pax_global_header00006660000000000000000000000064152326066350014522gustar00rootroot0000000000000052 comment=c0c81d3d205bb742da5f0fdc25b0df7352d9f6cf linuxdeepin-dde-calendar-f6d670a/000077500000000000000000000000001523260663500167665ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/.clang-format000066400000000000000000000136611523260663500213500ustar00rootroot00000000000000# This is the clang-format style used by qt releated deepin projects. # # This file is modified from https://github.com/qt/qt5/blob/5b22f8ec2e4fbb58e362b709ee82f2dbd8afdfd3/_clang-format # based on the rules from https://github.com/linuxdeepin/deepin-styleguide, # https://wiki.qt.io/Qt_Coding_Style and https://wiki.qt.io/Coding_Conventions # # This is for clang-format >= 14.0.0 --- # Webkit style was loosely based on the Qt style BasedOnStyle: WebKit # deepin project might not use same standard. Standard: Auto # Column width is limited to 100 in accordance with Qt Coding Style. # https://wiki.qt.io/Qt_Coding_Style # Note that this may be changed at some point in the future. ColumnLimit: 100 # How much weight do extra characters after the line length limit have. # PenaltyExcessCharacter: 4 # Disable reflow of some specific comments # qdoc comments: indentation rules are different. # Translation comments and SPDX license identifiers are also excluded. CommentPragmas: "^!|^:|^ SPDX-License-Identifier:" PointerAlignment: Right # We use template< without space. SpaceAfterTemplateKeyword: false # We want to break before the operators, but not before a '='. BreakBeforeBinaryOperators: NonAssignment # Braces are usually attached, but not after functions or class declarations. BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: true AfterUnion: false BeforeCatch: false BeforeElse: false IndentBraces: false # Indent initializers by 4 spaces ConstructorInitializerIndentWidth: 4 # Indent width for line continuations. ContinuationIndentWidth: 4 # No indentation for namespaces. NamespaceIndentation: None # Allow indentation for preprocessing directives (if/ifdef/endif). https://reviews.llvm.org/rL312125 IndentPPDirectives: AfterHash # We only indent with 2 spaces for preprocessor directives PPIndentWidth: 2 # Horizontally align arguments after an open bracket. # The coding style does not specify the following, but this is what gives # results closest to the existing code. AlignAfterOpenBracket: true AlwaysBreakTemplateDeclarations: true # Ideally we should also allow less short function in a single line, but # clang-format does not handle that. AllowShortFunctionsOnASingleLine: Inline # As clang-format 13 can regroup includes we enable this feature. # basically according to https://wiki.qt.io/Coding_Conventions#Including_headers # and https://github.com/linuxdeepin/deepin-styleguide IncludeBlocks: Regroup IncludeCategories: # gtest/gmock's h files - Regex: '^$' Priority: 6 CaseSensitive: true # C system headers. - Regex: '^<(aio|arpa/inet|assert|complex|cpio|ctype|curses|dirent|dlfcn|errno|fcntl|fenv|float|fmtmsg|fnmatch|ftw|glob|grp|iconv|inttypes|iso646|langinfo|libgen|limits|locale|math|monetary|mqueue|ndbm|netdb|net/if|netinet/in|netinet/tcp|nl_types|poll|pthread|pwd|regex|sched|search|semaphore|setjmp|signal|spawn|stdalign|stdarg|stdatomic|stdbool|stddef|stdint|stdio|stdlib|stdnoreturn|string|strings|stropts|sys/ipc|syslog|sys/mman|sys/msg|sys/resource|sys/select|sys/sem|sys/shm|sys/socket|sys/stat|sys/statvfs|sys/time|sys/times|sys/types|sys/uio|sys/un|sys/utsname|sys/wait|tar|term|termios|tgmath|threads|time|trace|uchar|ulimit|uncntrl|unistd|utime|utmpx|wchar|wctype|wordexp)\.h>$' Priority: 7 CaseSensitive: true # other libraries' h files. - Regex: '^<' Priority: 3 IncludeIsMainRegex: '((T|t)est)?$' SortIncludes: true # macros for which the opening brace stays attached. ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ] # Break constructor initializers before the colon and after the commas. BreakConstructorInitializers: BeforeComma # Add "// namespace " comments on closing brace for a namespace # Ignored for namespaces that qualify as a short namespace, # see 'ShortNamespaceLines' FixNamespaceComments: true # Definition of how short a short namespace is, default 1 ShortNamespaceLines: 1 # When escaping newlines in a macro attach the '\' as far left as possible, e.g. ##define a \ # something; \ # other; \ # thelastlineislong; AlignEscapedNewlines: Left # Avoids the addition of a space between an identifier and the # initializer list in list-initialization. SpaceBeforeCpp11BracedList: false AllowAllArgumentsOnNextLine: false AllowShortLambdasOnASingleLine: Empty AlignTrailingComments: true BinPackArguments: false BinPackParameters: false PackConstructorInitializers: Never PenaltyReturnTypeOnItsOwnLine: 100 SeparateDefinitionBlocks: Always WhitespaceSensitiveMacros: - Q_PROPERTY - Q_INTERFACESlinuxdeepin-dde-calendar-f6d670a/.github/000077500000000000000000000000001523260663500203265ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/.github/workflows/000077500000000000000000000000001523260663500223635ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/.github/workflows/backup-to-gitlab.yml000066400000000000000000000005371523260663500262400ustar00rootroot00000000000000name: backup to gitlab on: [push] concurrency: group: ${{ github.workflow }} cancel-in-progress: true jobs: backup-to-gitlabwh: uses: linuxdeepin/.github/.github/workflows/backup-to-gitlabwh.yml@master secrets: inherit backup-to-gitee: uses: linuxdeepin/.github/.github/workflows/backup-to-gitee.yml@master secrets: inherit linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-api-check.yml000066400000000000000000000004351523260663500256450ustar00rootroot00000000000000name: apiCheck on: pull_request_target: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: api-check: uses: linuxdeepin/.github/.github/workflows/api-check.yml@master secrets: inheritlinuxdeepin-dde-calendar-f6d670a/.github/workflows/call-auto-tag.yml000066400000000000000000000005171523260663500255430ustar00rootroot00000000000000name: auto tag on: pull_request_target: types: [opened, synchronize, closed] paths: - "debian/changelog" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: auto_tag: uses: linuxdeepin/.github/.github/workflows/auto-tag.yml@master secrets: inherit linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-build-distribution.yml000066400000000000000000000004321523260663500276320ustar00rootroot00000000000000name: Call build-distribution on: push: paths-ignore: - ".github/workflows/**" pull_request_target: paths-ignore: - ".github/workflows/**" jobs: check_job: uses: linuxdeepin/.github/.github/workflows/build-distribution.yml@master secrets: inherit linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-chatOps.yml000066400000000000000000000002421523260663500254160ustar00rootroot00000000000000name: chatOps on: issue_comment: types: [created] jobs: chatopt: uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master secrets: inherit linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-clacheck.yml000066400000000000000000000005251523260663500255560ustar00rootroot00000000000000name: Call CLA check on: issue_comment: types: [created] pull_request_target: types: [opened, closed, synchronize] concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: clacheck: uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master secrets: inherit linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-commitlint.yml000066400000000000000000000003641523260663500262010ustar00rootroot00000000000000name: Call commitlint on: pull_request_target: concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: check_job: uses: linuxdeepin/.github/.github/workflows/commitlint.yml@master linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-debian-check.yml000066400000000000000000000004461523260663500263200ustar00rootroot00000000000000name: debianCheck on: pull_request_target: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: debian-check: uses: linuxdeepin/.github/.github/workflows/debian-check.yml@master secrets: inheritlinuxdeepin-dde-calendar-f6d670a/.github/workflows/call-license-check.yml000066400000000000000000000005521523260663500265160ustar00rootroot00000000000000name: Call License and README Check on: pull_request_target: types: [opened, synchronize, reopened] permissions: pull-requests: write contents: read concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: license-check: uses: linuxdeepin/.github/.github/workflows/license-check.yml@master linuxdeepin-dde-calendar-f6d670a/.github/workflows/call-static-check.yml000066400000000000000000000004461523260663500263650ustar00rootroot00000000000000name: staticCheck on: pull_request_target: types: [opened, synchronize, reopened] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: static-check: uses: linuxdeepin/.github/.github/workflows/static-check.yml@master secrets: inheritlinuxdeepin-dde-calendar-f6d670a/.github/workflows/cppcheck.yml000066400000000000000000000012651523260663500246720ustar00rootroot00000000000000name: cppcheck on: pull_request_target: paths-ignore: - ".github/workflows/**" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: cppchceck: name: cppcheck runs-on: ubuntu-latest steps: - run: export - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} persist-credentials: false - uses: linuxdeepin/action-cppcheck@main with: github_token: ${{ secrets.GITHUB_TOKEN }} repository: ${{ github.repository }} pull_request_id: ${{ github.event.pull_request.number }} allow_approve: false linuxdeepin-dde-calendar-f6d670a/.gitignore000066400000000000000000000010231523260663500207520ustar00rootroot00000000000000# Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so *.dylib # Compiled Static libraries *.lai *.la *.a build*/ .linglong-target *.pro.user* *.DS_Store *.core *.autosave # qm file is auto generate from .ts file *.qm # vim tmp file *.swp .vscode/ build/ .cache/ .qmake.stash Makefile !debian/[source,changelog,compat,control,copyright,rules] CMakeLists.txt.user *.user.* binaries #linglong building dir linglong build obj-x86_64-linux-gnu/ .cursorindexingignore .cursor .specstory .promptx/ .spec-workflow/linuxdeepin-dde-calendar-f6d670a/.obs/000077500000000000000000000000001523260663500176275ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/.obs/workflows.yml000066400000000000000000000017321523260663500224120ustar00rootroot00000000000000test_build: steps: - link_package: source_project: deepin:Develop:dde source_package: %{SCM_REPOSITORY_NAME} target_project: deepin:CI - configure_repositories: project: deepin:CI repositories: - name: deepin_develop paths: - target_project: deepin:CI target_repository: deepin_develop architectures: - x86_64 - aarch64 - name: debian paths: - target_project: deepin:CI target_repository: debian_sid architectures: - x86_64 filters: event: pull_request tag_build: steps: - trigger_services: project: deepin:Unstable:dde package: %{SCM_REPOSITORY_NAME} filters: event: tag_push commit_build: steps: - trigger_services: project: deepin:Develop:dde package: %{SCM_REPOSITORY_NAME} filters: event: push linuxdeepin-dde-calendar-f6d670a/.project.json000066400000000000000000000004221523260663500214030ustar00rootroot00000000000000{ "type": "homebrew", "3rdparty": [], "ignore": ["debian", ".tx", "assets", "translations", ".git", "README.md", "*.conf", "CMakeLists.txt", "*.user", "*.o", "*.desktop", "*.qrc", "*.svg", "*.png", "*.qm", "*.ts", "LICENSE", "*.pro"], "license": ["GPLv3"] }linuxdeepin-dde-calendar-f6d670a/.tx/000077500000000000000000000000001523260663500174775ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/.tx/config000066400000000000000000000012561523260663500206730ustar00rootroot00000000000000[main] host = https://www.transifex.com [o:linuxdeepin:p:deepin-desktop-environment:r:6266c10022d26e548b3f7324f3af75c6] file_filter = translations/dde-calendar_.ts source_file = translations/dde-calendar_en_US.ts source_lang = en_US type = QT [o:linuxdeepin:p:deepin-desktop-environment:r:85e9ee7d8a9c82af00e8e8761a0aa93c] file_filter = translations/desktop/desktop_.ts source_file = translations/desktop/desktop.ts source_lang = en_US type = QT [o:linuxdeepin:p:deepin-desktop-environment:r:ecfd9d2397411fb030ecda872f33c554] file_filter = translations/dde-calendar-service_.ts source_file = translations/dde-calendar-service_en_US.ts source_lang = en_US type = QT linuxdeepin-dde-calendar-f6d670a/.tx/transifex.yaml000066400000000000000000000013751523260663500223740ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: CC0-1.0 filters: - filter_type: file source_file: translations/dde-calendar_en_US.ts file_format: QT source_language: en_US translation_files_expression: translations/dde-calendar_.ts - filter_type: file source_file: translations/desktop/desktop.ts file_format: QT source_language: en_US translation_files_expression: translations/desktop/desktop_.ts - filter_type: file source_file: translations/dde-calendar-service_en_US.ts file_format: QT source_language: en_US translation_files_expression: translations/dde-calendar-service_.ts settings: pr_branch_name: transifex_update_linuxdeepin-dde-calendar-f6d670a/3rdparty/000077500000000000000000000000001523260663500205365ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/000077500000000000000000000000001523260663500233335ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/CMakeLists.txt000066400000000000000000000014661523260663500261020ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(kcalendarcore) # Find the library find_package(PkgConfig REQUIRED) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui DBus) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) pkg_check_modules(3rd_lib REQUIRED libical) # 安全编译å�‚æ•° set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src ${3rd_lib_INCLUDE_DIRS}) aux_source_directory(src CALENDARCORE_SRCS) add_library(${PROJECT_NAME} STATIC ${CALENDARCORE_SRCS}) target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Gui ${3rd_lib_LIBRARIES} ${Libical_LIBRARIES} icalvcal icalss) linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/000077500000000000000000000000001523260663500241225ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/alarm.cpp000066400000000000000000000515371523260663500257350ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Alarm class. @brief Represents an alarm notification. @author Cornelius Schumacher \ */ #include "alarm.h" #include "incidence.h" #include "utils_p.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Alarm::Private { public: Private() : mParent(nullptr) , mType(Alarm::Invalid) , mAlarmSnoozeTime(5) , mAlarmRepeatCount(0) , mEndOffset(false) , mHasTime(false) , mAlarmEnabled(false) , mHasLocationRadius(false) , mLocationRadius(0) { } Incidence *mParent = nullptr; // the incidence which this alarm belongs to Type mType; // type of alarm QString mDescription; // text to display/email body/procedure arguments QString mFile; // program to run/optional audio file to play QString mMailSubject; // subject of email QStringList mMailAttachFiles; // filenames to attach to email Person::List mMailAddresses; // who to mail for reminder QDateTime mAlarmTime; // time at which to trigger the alarm Duration mAlarmSnoozeTime; // how long after alarm to snooze before // triggering again int mAlarmRepeatCount; // number of times for alarm to repeat // after the initial time Duration mOffset; // time relative to incidence DTSTART // to trigger the alarm bool mEndOffset; // if true, mOffset relates to DTEND, not DTSTART bool mHasTime; // use mAlarmTime, not mOffset bool mAlarmEnabled; bool mHasLocationRadius; int mLocationRadius; // location radius for the alarm }; //@endcond Alarm::Alarm(Incidence *parent) : d(new KCalendarCore::Alarm::Private) { d->mParent = parent; } Alarm::Alarm(const Alarm &other) : CustomProperties(other) , d(new KCalendarCore::Alarm::Private(*other.d)) { } Alarm::~Alarm() { delete d; } Alarm &Alarm::operator=(const Alarm &a) { if (&a != this) { d->mParent = a.d->mParent; d->mType = a.d->mType; d->mDescription = a.d->mDescription; d->mFile = a.d->mFile; d->mMailAttachFiles = a.d->mMailAttachFiles; d->mMailAddresses = a.d->mMailAddresses; d->mMailSubject = a.d->mMailSubject; d->mAlarmSnoozeTime = a.d->mAlarmSnoozeTime; d->mAlarmRepeatCount = a.d->mAlarmRepeatCount; d->mAlarmTime = a.d->mAlarmTime; d->mOffset = a.d->mOffset; d->mEndOffset = a.d->mEndOffset; d->mHasTime = a.d->mHasTime; d->mAlarmEnabled = a.d->mAlarmEnabled; } return *this; } static bool compareMailAddresses(const Person::List &list1, const Person::List &list2) { if (list1.count() == list2.count()) { for (int i = 0; i < list1.count(); ++i) { if (list1.at(i) != list2.at(i)) { return false; } } return true; } return false; } bool Alarm::operator==(const Alarm &rhs) const { if (d->mType != rhs.d->mType // || d->mAlarmSnoozeTime != rhs.d->mAlarmSnoozeTime // || d->mAlarmRepeatCount != rhs.d->mAlarmRepeatCount // || d->mAlarmEnabled != rhs.d->mAlarmEnabled // || d->mHasTime != rhs.d->mHasTime // || d->mHasLocationRadius != rhs.d->mHasLocationRadius // || d->mLocationRadius != rhs.d->mLocationRadius) { return false; } if (d->mHasTime) { if (d->mAlarmTime != rhs.d->mAlarmTime) { return false; } } else { if (d->mOffset != rhs.d->mOffset || d->mEndOffset != rhs.d->mEndOffset) { return false; } } switch (d->mType) { case Display: return d->mDescription == rhs.d->mDescription; case Email: return d->mDescription == rhs.d->mDescription // && d->mMailAttachFiles == rhs.d->mMailAttachFiles // && compareMailAddresses(d->mMailAddresses, rhs.d->mMailAddresses) // && d->mMailSubject == rhs.d->mMailSubject; case Procedure: return d->mFile == rhs.d->mFile && d->mDescription == rhs.d->mDescription; case Audio: return d->mFile == rhs.d->mFile; case Invalid: break; } return false; } bool Alarm::operator!=(const Alarm &a) const { return !operator==(a); } void Alarm::setType(Alarm::Type type) { if (type == d->mType) { return; } if (d->mParent) { d->mParent->update(); } switch (type) { case Display: d->mDescription.clear(); break; case Procedure: d->mFile.clear(); d->mDescription.clear(); break; case Audio: d->mFile.clear(); break; case Email: d->mMailSubject.clear(); d->mDescription.clear(); d->mMailAddresses.clear(); d->mMailAttachFiles.clear(); break; case Invalid: break; default: if (d->mParent) { d->mParent->updated(); // not really } return; } d->mType = type; if (d->mParent) { d->mParent->updated(); } } Alarm::Type Alarm::type() const { return d->mType; } void Alarm::setAudioAlarm(const QString &audioFile) { if (d->mParent) { d->mParent->update(); } d->mType = Audio; d->mFile = audioFile; if (d->mParent) { d->mParent->updated(); } } void Alarm::setAudioFile(const QString &audioFile) { if (d->mType == Audio) { if (d->mParent) { d->mParent->update(); } d->mFile = audioFile; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::audioFile() const { return (d->mType == Audio) ? d->mFile : QString(); } void Alarm::setProcedureAlarm(const QString &programFile, const QString &arguments) { if (d->mParent) { d->mParent->update(); } d->mType = Procedure; d->mFile = programFile; d->mDescription = arguments; if (d->mParent) { d->mParent->updated(); } } void Alarm::setProgramFile(const QString &programFile) { if (d->mType == Procedure) { if (d->mParent) { d->mParent->update(); } d->mFile = programFile; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::programFile() const { return (d->mType == Procedure) ? d->mFile : QString(); } void Alarm::setProgramArguments(const QString &arguments) { if (d->mType == Procedure) { if (d->mParent) { d->mParent->update(); } d->mDescription = arguments; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::programArguments() const { return (d->mType == Procedure) ? d->mDescription : QString(); } void Alarm::setEmailAlarm(const QString &subject, const QString &text, const Person::List &addressees, const QStringList &attachments) { if (d->mParent) { d->mParent->update(); } d->mType = Email; d->mMailSubject = subject; d->mDescription = text; d->mMailAddresses = addressees; d->mMailAttachFiles = attachments; if (d->mParent) { d->mParent->updated(); } } void Alarm::setMailAddress(const Person &mailAddress) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAddresses.clear(); d->mMailAddresses.append(mailAddress); if (d->mParent) { d->mParent->updated(); } } } void Alarm::setMailAddresses(const Person::List &mailAddresses) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAddresses += mailAddresses; if (d->mParent) { d->mParent->updated(); } } } void Alarm::addMailAddress(const Person &mailAddress) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAddresses.append(mailAddress); if (d->mParent) { d->mParent->updated(); } } } Person::List Alarm::mailAddresses() const { return (d->mType == Email) ? d->mMailAddresses : Person::List(); } void Alarm::setMailSubject(const QString &mailAlarmSubject) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailSubject = mailAlarmSubject; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::mailSubject() const { return (d->mType == Email) ? d->mMailSubject : QString(); } void Alarm::setMailAttachment(const QString &mailAttachFile) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAttachFiles.clear(); d->mMailAttachFiles += mailAttachFile; if (d->mParent) { d->mParent->updated(); } } } void Alarm::setMailAttachments(const QStringList &mailAttachFiles) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAttachFiles = mailAttachFiles; if (d->mParent) { d->mParent->updated(); } } } void Alarm::addMailAttachment(const QString &mailAttachFile) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mMailAttachFiles += mailAttachFile; if (d->mParent) { d->mParent->updated(); } } } QStringList Alarm::mailAttachments() const { return (d->mType == Email) ? d->mMailAttachFiles : QStringList(); } void Alarm::setMailText(const QString &text) { if (d->mType == Email) { if (d->mParent) { d->mParent->update(); } d->mDescription = text; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::mailText() const { return (d->mType == Email) ? d->mDescription : QString(); } void Alarm::setDisplayAlarm(const QString &text) { if (d->mParent) { d->mParent->update(); } d->mType = Display; if (!text.isNull()) { d->mDescription = text; } if (d->mParent) { d->mParent->updated(); } } void Alarm::setText(const QString &text) { if (d->mType == Display) { if (d->mParent) { d->mParent->update(); } d->mDescription = text; if (d->mParent) { d->mParent->updated(); } } } QString Alarm::text() const { return (d->mType == Display) ? d->mDescription : QString(); } void Alarm::setTime(const QDateTime &alarmTime) { if (d->mParent) { d->mParent->update(); } d->mAlarmTime = alarmTime; d->mHasTime = true; if (d->mParent) { d->mParent->updated(); } } QDateTime Alarm::time() const { if (hasTime()) { return d->mAlarmTime; } else if (d->mParent) { if (d->mEndOffset) { QDateTime dt = d->mParent->dateTime(Incidence::RoleAlarmEndOffset); return d->mOffset.end(dt); } else { QDateTime dt = d->mParent->dateTime(Incidence::RoleAlarmStartOffset); return d->mOffset.end(dt); } } else { return QDateTime(); } } QDateTime Alarm::nextTime(const QDateTime &preTime, bool ignoreRepetitions) const { if (d->mParent && d->mParent->recurs()) { QDateTime dtEnd = d->mParent->dateTime(Incidence::RoleAlarmEndOffset); QDateTime dtStart = d->mParent->dtStart(); // Find the incidence's earliest alarm // Alarm time is defined by an offset from the event start or end time. QDateTime alarmStart = d->mOffset.end(d->mEndOffset ? dtEnd : dtStart); // Find the offset from the event start time, which is also used as the // offset from the recurrence time. Duration alarmOffset(dtStart, alarmStart); /* qDebug() << "dtStart " << dtStart; qDebug() << "dtEnd " << dtEnd; qDebug() << "alarmStart " << alarmStart; qDebug() << "alarmOffset " << alarmOffset.value(); qDebug() << "preTime " << preTime; */ if (alarmStart > preTime) { // No need to go further. return alarmStart; } if (d->mAlarmRepeatCount && !ignoreRepetitions) { // The alarm has repetitions, so check whether repetitions of previous // recurrences happen after given time. QDateTime prevRecurrence = d->mParent->recurrence()->getPreviousDateTime(preTime); if (prevRecurrence.isValid()) { QDateTime prevLastRepeat = alarmOffset.end(duration().end(prevRecurrence)); // qDebug() << "prevRecurrence" << prevRecurrence; // qDebug() << "prevLastRepeat" << prevLastRepeat; if (prevLastRepeat > preTime) { // Yes they did, return alarm offset to previous recurrence. QDateTime prevAlarm = alarmOffset.end(prevRecurrence); // qDebug() << "prevAlarm " << prevAlarm; return prevAlarm; } } } // Check the next recurrence now. QDateTime nextRecurrence = d->mParent->recurrence()->getNextDateTime(preTime); if (nextRecurrence.isValid()) { QDateTime nextAlarm = alarmOffset.end(nextRecurrence); /* qDebug() << "nextRecurrence" << nextRecurrence; qDebug() << "nextAlarm " << nextAlarm; */ if (nextAlarm > preTime) { // It's first alarm takes place after given time. return nextAlarm; } } } else { // Not recurring. QDateTime alarmTime = time(); if (alarmTime > preTime) { return alarmTime; } } return QDateTime(); } bool Alarm::hasTime() const { return d->mHasTime; } void Alarm::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { if (d->mParent) { d->mParent->update(); } d->mAlarmTime = d->mAlarmTime.toTimeZone(oldZone); d->mAlarmTime.setTimeZone(newZone); if (d->mParent) { d->mParent->updated(); } } void Alarm::setSnoozeTime(const Duration &alarmSnoozeTime) { if (alarmSnoozeTime.value() > 0) { if (d->mParent) { d->mParent->update(); } d->mAlarmSnoozeTime = alarmSnoozeTime; if (d->mParent) { d->mParent->updated(); } } } Duration Alarm::snoozeTime() const { return d->mAlarmSnoozeTime; } void Alarm::setRepeatCount(int alarmRepeatCount) { if (d->mParent) { d->mParent->update(); } d->mAlarmRepeatCount = alarmRepeatCount; if (d->mParent) { d->mParent->updated(); } } int Alarm::repeatCount() const { return d->mAlarmRepeatCount; } Duration Alarm::duration() const { return Duration(d->mAlarmSnoozeTime.value() * d->mAlarmRepeatCount, d->mAlarmSnoozeTime.type()); } QDateTime Alarm::nextRepetition(const QDateTime &preTime) const { QDateTime at = nextTime(preTime); if (at > preTime) { return at; } if (!d->mAlarmRepeatCount) { // there isn't an occurrence after the specified time return QDateTime(); } qint64 repetition; int interval = d->mAlarmSnoozeTime.value(); bool daily = d->mAlarmSnoozeTime.isDaily(); if (daily) { qint64 daysTo = at.daysTo(preTime); if (preTime.time() <= at.time()) { --daysTo; } repetition = daysTo / interval + 1; } else { repetition = at.secsTo(preTime) / interval + 1; } if (repetition > d->mAlarmRepeatCount) { // all repetitions have finished before the specified time return QDateTime(); } return daily ? at.addDays(int(repetition * interval)) : at.addSecs(repetition * interval); } QDateTime Alarm::previousRepetition(const QDateTime &afterTime) const { QDateTime at = time(); if (at >= afterTime) { // alarm's first/only time is at/after the specified time return QDateTime(); } if (!d->mAlarmRepeatCount) { return at; } qint64 repetition; int interval = d->mAlarmSnoozeTime.value(); bool daily = d->mAlarmSnoozeTime.isDaily(); if (daily) { qint64 daysTo = at.daysTo(afterTime); if (afterTime.time() <= at.time()) { --daysTo; } repetition = daysTo / interval; } else { repetition = (at.secsTo(afterTime) - 1) / interval; } if (repetition > d->mAlarmRepeatCount) { repetition = d->mAlarmRepeatCount; } return daily ? at.addDays(int(repetition * interval)) : at.addSecs(repetition * interval); } QDateTime Alarm::endTime() const { if (!d->mAlarmRepeatCount) { return time(); } if (d->mAlarmSnoozeTime.isDaily()) { return time().addDays(d->mAlarmRepeatCount * d->mAlarmSnoozeTime.asDays()); } else { return time().addSecs(d->mAlarmRepeatCount * d->mAlarmSnoozeTime.asSeconds()); } } void Alarm::toggleAlarm() { if (d->mParent) { d->mParent->update(); } d->mAlarmEnabled = !d->mAlarmEnabled; if (d->mParent) { d->mParent->updated(); } } void Alarm::setEnabled(bool enable) { if (d->mParent) { d->mParent->update(); } d->mAlarmEnabled = enable; if (d->mParent) { d->mParent->updated(); } } bool Alarm::enabled() const { return d->mAlarmEnabled; } void Alarm::setStartOffset(const Duration &offset) { if (d->mParent) { d->mParent->update(); } d->mOffset = offset; d->mEndOffset = false; d->mHasTime = false; if (d->mParent) { d->mParent->updated(); } } Duration Alarm::startOffset() const { return (d->mHasTime || d->mEndOffset) ? Duration(0) : d->mOffset; } bool Alarm::hasStartOffset() const { return !d->mHasTime && !d->mEndOffset; } bool Alarm::hasEndOffset() const { return !d->mHasTime && d->mEndOffset; } void Alarm::setEndOffset(const Duration &offset) { if (d->mParent) { d->mParent->update(); } d->mOffset = offset; d->mEndOffset = true; d->mHasTime = false; if (d->mParent) { d->mParent->updated(); } } Duration Alarm::endOffset() const { return (d->mHasTime || !d->mEndOffset) ? Duration(0) : d->mOffset; } void Alarm::setParent(Incidence *parent) { d->mParent = parent; } QString Alarm::parentUid() const { return d->mParent ? d->mParent->uid() : QString(); } void Alarm::customPropertyUpdated() { if (d->mParent) { d->mParent->update(); d->mParent->updated(); } } void Alarm::setHasLocationRadius(bool hasLocationRadius) { if (d->mParent) { d->mParent->update(); } d->mHasLocationRadius = hasLocationRadius; if (hasLocationRadius) { setNonKDECustomProperty("X-LOCATION-RADIUS", QString::number(d->mLocationRadius)); } else { removeNonKDECustomProperty("X-LOCATION-RADIUS"); } if (d->mParent) { d->mParent->updated(); } } bool Alarm::hasLocationRadius() const { return d->mHasLocationRadius; } void Alarm::setLocationRadius(int locationRadius) { if (d->mParent) { d->mParent->update(); } d->mLocationRadius = locationRadius; if (d->mParent) { d->mParent->updated(); } } int Alarm::locationRadius() const { return d->mLocationRadius; } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &a) { if (a) { out << ((quint32)a->d->mType) << a->d->mAlarmSnoozeTime << a->d->mAlarmRepeatCount << a->d->mEndOffset << a->d->mHasTime << a->d->mAlarmEnabled << a->d->mHasLocationRadius << a->d->mLocationRadius << a->d->mOffset; serializeQDateTimeAsKDateTime(out, a->d->mAlarmTime); out << a->d->mFile << a->d->mMailSubject << a->d->mDescription << a->d->mMailAttachFiles << a->d->mMailAddresses; } return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, const KCalendarCore::Alarm::Ptr &a) { if (a) { quint32 type; in >> type; a->d->mType = static_cast(type); in >> a->d->mAlarmSnoozeTime >> a->d->mAlarmRepeatCount >> a->d->mEndOffset >> a->d->mHasTime >> a->d->mAlarmEnabled >> a->d->mHasLocationRadius >> a->d->mLocationRadius >> a->d->mOffset; deserializeKDateTimeAsQDateTime(in, a->d->mAlarmTime); in >> a->d->mFile >> a->d->mMailSubject >> a->d->mDescription >> a->d->mMailAttachFiles >> a->d->mMailAddresses; } return in; } void Alarm::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/alarm.h000066400000000000000000000504101523260663500253670ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003 David Jarvie SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Alarm class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_ALARM_H #define KCALCORE_ALARM_H #include "customproperties.h" #include "duration.h" #include "person.h" #include #include #include #include #include #include #include class QTimeZone; namespace KCalendarCore { class Incidence; /** @brief Represents an alarm notification. Alarms are user notifications that occur at specified times. Notifications can be on-screen pop-up dialogs, email messages, the playing of audio files, or the running of another program. Alarms always belong to a parent Incidence. */ class Q_CORE_EXPORT Alarm : public CustomProperties { public: /** The different types of alarms. */ enum Type { Invalid, /**< Invalid, or no alarm */ Display, /**< Display a dialog box */ Procedure, /**< Call a script */ Email, /**< Send email */ Audio, /**< Play an audio file */ }; /** A shared pointer to an Alarm object. */ typedef QSharedPointer Ptr; /** List of alarms. */ typedef QVector List; /** Constructs an alarm belonging to the @p parent Incidence. @param parent is the Incidence this alarm will belong to. */ // Can't find a way to use a shared pointer here. // 在这里找ä¸�到使用共享指针的方法。 // Inside incidence.cpp, it does alarm->setParent( this ) explicit Alarm(Incidence *parent); /** Copy constructor. @param other is the alarm to copy. */ Alarm(const Alarm &other); /** Destroys the alarm. */ ~Alarm() override; /** Copy operator. */ Alarm &operator=(const Alarm &); /** Compares two alarms for equality. @param a is the comparison alarm. */ bool operator==(const Alarm &a) const; /** Compares two alarms for inequality. @param a is the comparison alarm. */ bool operator!=(const Alarm &a) const; /** Sets the @p parent Incidence of the alarm. @param parent is alarm parent Incidence to set. @see parentUid() */ // Is there a way to use QSharedPointer here? // although it's safe, Incidence's dtor calls setParent( 0 ) // se we don't dereference a deleted pointer here. // Also, I renamed "Incidence *parent()" to "QString parentUid()" // So we don't return raw pointers void setParent(Incidence *parent); /** Returns the parent's incidence UID of the alarm. @see setParent() */ // We don't have a share pointer to return, so return the UID. Q_REQUIRED_RESULT QString parentUid() const; /** Sets the #Type for this alarm to @p type. If the specified type is different from the current type of the alarm, then the alarm's type-specific properties are re-initialized. @param type is the alarm #Type to set. @see type() */ void setType(Type type); /** Returns the #Type of the alarm. @see setType() */ Q_REQUIRED_RESULT Type type() const; /** Sets the #Display type for this alarm. If @p text is specified non-empty, then it is used as the description text to display when the alarm is triggered. @param text is the description to display when the alarm is triggered. @see setText(), text() */ void setDisplayAlarm(const QString &text = QString()); /** Sets the description @p text to be displayed when the alarm is triggered. Ignored if the alarm is not a display alarm. @param text is the description to display when the alarm is triggered. @see setDisplayAlarm(), text() */ void setText(const QString &text); /** Returns the display text string for a #Display alarm type. Returns an empty string if the alarm is not a #Display type. @see setDisplayAlarm(), setText() */ Q_REQUIRED_RESULT QString text() const; /** Sets the #Audio type for this alarm and the name of the audio file to play when the alarm is triggered. @param audioFile is the name of the audio file to play when the alarm is triggered. @see setAudioFile(), audioFile() */ void setAudioAlarm(const QString &audioFile = QString()); /** Sets the name of the audio file to play when the audio alarm is triggered. Ignored if the alarm is not an #Audio type. @param audioFile is the name of the audio file to play when the alarm is triggered. @see setAudioAlarm(), audioFile() */ void setAudioFile(const QString &audioFile); /** Returns the audio file name for an #Audio alarm type. Returns an empty string if the alarm is not an #Audio type. @see setAudioAlarm(), setAudioFile() */ Q_REQUIRED_RESULT QString audioFile() const; /** Sets the #Procedure type for this alarm and the program (with arguments) to execute when the alarm is triggered. @param programFile is the name of the program file to execute when the alarm is triggered. @param arguments is a string of arguments to supply to @p programFile. @see setProgramFile(), programFile(), setProgramArguments(), programArguments() */ void setProcedureAlarm(const QString &programFile, const QString &arguments = QString()); /** Sets the program file to execute when the alarm is triggered. Ignored if the alarm is not a #Procedure type. @param programFile is the name of the program file to execute when the alarm is triggered. @see setProcedureAlarm(), programFile(), setProgramArguments(), programArguments() */ void setProgramFile(const QString &programFile); /** Returns the program file name for a #Procedure alarm type. Returns an empty string if the alarm is not a #Procedure type. @see setProcedureAlarm(), setProgramFile(), setProgramArguments(), programArguments() */ Q_REQUIRED_RESULT QString programFile() const; /** Sets the program arguments string when the alarm is triggered. Ignored if the alarm is not a #Procedure type. @param arguments is a string of arguments to supply to the program. @see setProcedureAlarm(), setProgramFile(), programFile(), programArguments() */ void setProgramArguments(const QString &arguments); /** Returns the program arguments string for a #Procedure alarm type. Returns an empty string if the alarm is not a #Procedure type. @see setProcedureAlarm(), setProgramFile(), programFile(), setProgramArguments() */ Q_REQUIRED_RESULT QString programArguments() const; /** Sets the #Email type for this alarm and the email @p subject, @p text, @p addresses, and @p attachments that make up an email message to be sent when the alarm is triggered. @param subject is the email subject. @param text is a string containing the body of the email message. @param addressees is Person list of email addresses. @param attachments is a a QStringList of optional file names of email attachments. @see setMailSubject(), setMailText(), setMailAddresses(), setMailAttachments() */ void setEmailAlarm(const QString &subject, const QString &text, const Person::List &addressees, const QStringList &attachments = QStringList()); /** Sets the email address of an #Email type alarm. Ignored if the alarm is not an #Email type. @param mailAlarmAddress is a Person to receive a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAddresses(), setMailAttachment(), setMailAttachments(), mailAddresses() */ void setMailAddress(const Person &mailAlarmAddress); /** Sets a list of email addresses of an #Email type alarm. Ignored if the alarm is not an #Email type. @param mailAlarmAddresses is a Person list to receive a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAddress(), setMailAttachments(), setMailAttachment(), mailAddresses() */ void setMailAddresses(const Person::List &mailAlarmAddresses); /** Adds an address to the list of email addresses to send mail to when the alarm is triggered. Ignored if the alarm is not an #Email type. @param mailAlarmAddress is a Person to add to the list of addresses to receive a mail message when an #Email type alarm is triggered. @see setMailAddress(), setMailAddresses(), mailAddresses() */ void addMailAddress(const Person &mailAlarmAddress); /** Returns the list of addresses for an #Email alarm type. Returns an empty list if the alarm is not an #Email type. @see addMailAddress(), setMailAddress(), setMailAddresses() */ Q_REQUIRED_RESULT Person::List mailAddresses() const; /** Sets the subject line of a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAlarmSubject is a string to be used as a subject line of an email message to send when the #Email type alarm is triggered. @see setMailText(), setMailAddress(), setMailAddresses(), setMailAttachment(), setMailAttachments(), mailSubject() */ void setMailSubject(const QString &mailAlarmSubject); /** Returns the subject line string for an #Email alarm type. Returns an empty string if the alarm is not an #Email type. @see setMailSubject() */ Q_REQUIRED_RESULT QString mailSubject() const; /** Sets the filename to attach to a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAttachFile is a string containing a filename to be attached to an email message to send when the #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAddress(), setMailAddresses(), setMailAttachments(), mailAttachments() */ void setMailAttachment(const QString &mailAttachFile); /** Sets a list of filenames to attach to a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAttachFiles is a QString list of filenames to attach to a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailText(), setMailAttachment(), setMailAddress(), setMailAddresses() */ void setMailAttachments(const QStringList &mailAttachFiles); /** Adds a filename to the list of files to attach to a mail message for an #Email alarm type. Ignored if the alarm is not an #Email type. @param mailAttachFile is a string containing a filename to be attached to an email message to send when the #Email type alarm is triggered. @see setMailAttachment(), setMailAttachments(), mailAttachments() */ void addMailAttachment(const QString &mailAttachFile); /** Returns the list of attachment filenames for an #Email alarm type. Returns an empty list if the alarm is not an #Email type. @see addMailAttachment(), setMailAttachment(), setMailAttachments() */ Q_REQUIRED_RESULT QStringList mailAttachments() const; /** Sets the body text for an #Email alarm type. Ignored if the alarm is not an #Email type. @param text is a string containing the body text of a mail message when an #Email type alarm is triggered. @see setMailSubject(), setMailAddress(), setMailAddresses(), setMailAttachment(), setMailAttachments() */ void setMailText(const QString &text); /** Returns the body text for an #Email alarm type. Returns an empty string if the alarm is not an #Email type. @see setMailText() */ Q_REQUIRED_RESULT QString mailText() const; /** Sets the trigger time of the alarm. @param alarmTime is the QDateTime alarm trigger. @see time() */ void setTime(const QDateTime &alarmTime); /** Returns the alarm trigger date/time. @see setTime() */ Q_REQUIRED_RESULT QDateTime time() const; /** Returns the next alarm trigger date/time after given date/time. Takes recurrent incidences into account. 返回给定日期/æ—¶é—´å�Žçš„下一个报警触å�‘日期/时间。 å°†å��å¤�å�‘生的事件考虑在内。 @param preTime date/time from where to start @param ignoreRepetitions don't take repetitions into account @see nextRepetition() */ Q_REQUIRED_RESULT QDateTime nextTime(const QDateTime &preTime, bool ignoreRepetitions = false) const; /** Returns the date/time when the last repetition of the alarm goes off. If the alarm does not repeat this is equivalent to calling time(). 返回上次é‡�å¤�报警的日期/时间。 如果警报没有é‡�å¤�,这相当于调用时间()。 @see setTime() */ Q_REQUIRED_RESULT QDateTime endTime() const; /** Returns true if the alarm has a trigger date/time. */ Q_REQUIRED_RESULT bool hasTime() const; /** Sets the alarm offset relative to the start of the parent Incidence. @param offset is a Duration to be used as a time relative to the start of the parent Incidence to be used as the alarm trigger. @see setEndOffset(), startOffset(), endOffset() */ void setStartOffset(const Duration &offset); /** Returns offset of alarm in time relative to the start of the parent Incidence. If the alarm's time is not defined in terms of an offset relative to the start of the event, returns zero. @see setStartOffset(), hasStartOffset() */ Q_REQUIRED_RESULT Duration startOffset() const; /** Returns whether the alarm is defined in terms of an offset relative to the start of the parent Incidence. @see startOffset(), setStartOffset() */ bool hasStartOffset() const; /** Sets the alarm offset relative to the end of the parent Incidence. @param offset is a Duration to be used as a time relative to the end of the parent Incidence to be used as the alarm trigger. @see setStartOffset(), startOffset(), endOffset() */ void setEndOffset(const Duration &offset); /** Returns offset of alarm in time relative to the end of the event. If the alarm's time is not defined in terms of an offset relative to the end of the event, returns zero. @see setEndOffset(), hasEndOffset() */ Q_REQUIRED_RESULT Duration endOffset() const; /** Returns whether the alarm is defined in terms of an offset relative to the end of the event. @see endOffset(), setEndOffset() */ bool hasEndOffset() const; /** Shift the times of the alarm so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual alarm time zone. For example, shifting an alarm whose start time is 09:00 America/New York, using an old viewing time zone (@p oldZone) of Europe/London, to a new time zone (@p newZone) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the alarm start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Sets the snooze time interval for the alarm. @param alarmSnoozeTime the time between snoozes. @see snoozeTime() */ void setSnoozeTime(const Duration &alarmSnoozeTime); /** Returns the snooze time interval. @see setSnoozeTime() */ Q_REQUIRED_RESULT Duration snoozeTime() const; /** Sets how many times an alarm is to repeat itself after its initial occurrence (w/snoozes). @param alarmRepeatCount is the number of times an alarm may repeat, excluding the initial occurrence. @see repeatCount() */ void setRepeatCount(int alarmRepeatCount); /** Returns how many times an alarm may repeats after its initial occurrence. 返回警报在åˆ�å§‹å�‘生å�Žå�¯èƒ½é‡�å¤�的次数。 @see setRepeatCount() */ Q_REQUIRED_RESULT int repeatCount() const; /** Returns the date/time of the alarm's initial occurrence or its next repetition after a given time. @param preTime the date/time after which to find the next repetition. @return the date/time of the next repetition, or an invalid date/time if the specified time is at or after the alarm's last repetition. @see previousRepetition() */ Q_REQUIRED_RESULT QDateTime nextRepetition(const QDateTime &preTime) const; /** Returns the date/time of the alarm's latest repetition or, if none, its initial occurrence before a given time. @param afterTime is the date/time before which to find the latest repetition. @return the date and time of the latest repetition, or an invalid date/time if the specified time is at or before the alarm's initial occurrence. @see nextRepetition() */ Q_REQUIRED_RESULT QDateTime previousRepetition(const QDateTime &afterTime) const; /** Returns the interval between the alarm's initial occurrence and its final repetition. */ Q_REQUIRED_RESULT Duration duration() const; /** Toggles the alarm status, i.e, an enable alarm becomes disabled and a disabled alarm becomes enabled. @see enabled(), setEnabled() */ void toggleAlarm(); /** Sets the enabled status of the alarm. @param enable if true, then enable the alarm; else disable the alarm. @see enabled(), toggleAlarm() */ void setEnabled(bool enable); /** Returns the alarm enabled status: true (enabled) or false (disabled). @see setEnabled(), toggleAlarm() */ Q_REQUIRED_RESULT bool enabled() const; /** Set if the location radius for the alarm has been defined. @param hasLocationRadius if true, then this alarm has a location radius. @see setLocationRadius() */ void setHasLocationRadius(bool hasLocationRadius); /** Returns true if alarm has location radius defined. @see setLocationRadius() */ Q_REQUIRED_RESULT bool hasLocationRadius() const; /** Set location radius for the alarm. This means that alarm will be triggered when user approaches the location. Given value will be stored into custom properties as X-LOCATION-RADIUS. @param locationRadius radius in meters @see locationRadius() */ void setLocationRadius(int locationRadius); /** Returns the location radius in meters. @see setLocationRadius() */ Q_REQUIRED_RESULT int locationRadius() const; protected: /** @copydoc CustomProperties::customPropertyUpdated() */ void customPropertyUpdated() override; /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Alarm::Ptr &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, const KCalendarCore::Alarm::Ptr &); }; /** * Alarm serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::Alarm::Ptr &); /** * Alarm deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, const KCalendarCore::Alarm::Ptr &); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Alarm::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Alarm::Ptr) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/attachment.cpp000066400000000000000000000106071523260663500267620ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Michael Brade SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attachment class. @brief Represents information related to an attachment for a Calendar Incidence. @author Michael Brade \ */ #include "attachment.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Attachment::Private : public QSharedData { public: Private() = default; Private(const QString &mime, bool binary) : mMimeType(mime) , mBinary(binary) { } Private(const Private &other) = default; ~Private() { } mutable uint mSize = 0; mutable QByteArray mDecodedDataCache; QString mMimeType; QString mUri; QByteArray mEncodedData; QString mLabel; bool mBinary = false; bool mLocal = false; bool mShowInline = false; }; //@endcond Attachment::Attachment() : d(new Attachment::Private) { } Attachment::Attachment(const Attachment &attachment) = default; Attachment::Attachment(const QString &uri, const QString &mime) : d(new Attachment::Private(mime, false)) { d->mUri = uri; } Attachment::Attachment(const QByteArray &base64, const QString &mime) : d(new Attachment::Private(mime, true)) { d->mEncodedData = base64; } Attachment::~Attachment() = default; bool Attachment::isEmpty() const { return d->mMimeType.isEmpty() && d->mUri.isEmpty() && d->mEncodedData.isEmpty(); } bool Attachment::isUri() const { return !d->mBinary; } QString Attachment::uri() const { if (!d->mBinary) { return d->mUri; } else { return QString(); } } void Attachment::setUri(const QString &uri) { d->mUri = uri; d->mBinary = false; } bool Attachment::isBinary() const { return d->mBinary; } QByteArray Attachment::data() const { if (d->mBinary) { return d->mEncodedData; } else { return QByteArray(); } } QByteArray Attachment::decodedData() const { if (d->mDecodedDataCache.isNull()) { d->mDecodedDataCache = QByteArray::fromBase64(d->mEncodedData); } return d->mDecodedDataCache; } void Attachment::setDecodedData(const QByteArray &data) { setData(data.toBase64()); d->mDecodedDataCache = data; d->mSize = d->mDecodedDataCache.size(); } void Attachment::setData(const QByteArray &base64) { d->mEncodedData = base64; d->mBinary = true; d->mDecodedDataCache = QByteArray(); d->mSize = 0; } uint Attachment::size() const { if (isUri()) { return 0; } if (!d->mSize) { d->mSize = decodedData().size(); } return d->mSize; } QString Attachment::mimeType() const { return d->mMimeType; } void Attachment::setMimeType(const QString &mime) { d->mMimeType = mime; } bool Attachment::showInline() const { return d->mShowInline; } void Attachment::setShowInline(bool showinline) { d->mShowInline = showinline; } QString Attachment::label() const { return d->mLabel; } void Attachment::setLabel(const QString &label) { d->mLabel = label; } bool Attachment::isLocal() const { return d->mLocal; } void Attachment::setLocal(bool local) { d->mLocal = local; } Attachment &Attachment::operator=(const Attachment &other) = default; bool Attachment::operator==(const Attachment &a2) const { return uri() == a2.uri() // && d->mLabel == a2.label() // && d->mLocal == a2.isLocal() // && d->mBinary == a2.isBinary() // && d->mShowInline == a2.showInline() // && size() == a2.size() // && decodedData() == a2.decodedData(); } bool Attachment::operator!=(const Attachment &a2) const { return !(*this == a2); } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::Attachment &a) { out << a.d->mSize << a.d->mMimeType << a.d->mUri << a.d->mEncodedData << a.d->mLabel << a.d->mBinary << a.d->mLocal << a.d->mShowInline; return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::Attachment &a) { in >> a.d->mSize >> a.d->mMimeType >> a.d->mUri >> a.d->mEncodedData >> a.d->mLabel >> a.d->mBinary >> a.d->mLocal >> a.d->mShowInline; return in; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/attachment.h000066400000000000000000000166351523260663500264360ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Michael Brade SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attachment class. @author Michael Brade \ */ #ifndef KCALCORE_ATTACHMENT_H #define KCALCORE_ATTACHMENT_H #include #include #include #include namespace KCalendarCore { /** @brief Represents information related to an attachment for a Calendar Incidence. 表示与日历事件的附件相关的信æ�¯ã€‚ This is not an email message attachment. Calendar Incidence attachments consist of: - A Uniform Resource Identifier (URI) or a base64 encoded binary blob. - A Multipurpose Internet Mail Extensions (MIME) type. This class is used to associate files (local or remote) or other resources with a Calendar Incidence. */ class Q_CORE_EXPORT Attachment { Q_GADGET Q_PROPERTY(bool isEmpty READ isEmpty) Q_PROPERTY(QString uri READ uri WRITE setUri) Q_PROPERTY(bool isUri READ isUri) Q_PROPERTY(bool isBinary READ isBinary) Q_PROPERTY(int size READ size) Q_PROPERTY(QString mimeType READ mimeType WRITE setMimeType) Q_PROPERTY(bool showInline READ showInline WRITE setShowInline) Q_PROPERTY(QString label READ label WRITE setLabel) Q_PROPERTY(bool isLocal READ isLocal WRITE setLocal) public: /** List of attachments. */ typedef QVector List; /** Constructs an empty attachment. */ explicit Attachment(); /** Constructs an attachment consisting of a @p uri and a @p mime type. @param uri is the @acronym URI referred to by this attachment. @param mime is the (optional) @acronym MIME type of the @p uri */ explicit Attachment(const QString &uri, const QString &mime = QString()); /** Constructs an attachment consisting of a binary blob of data and a @p mime type. @param base64 is the binary data in base64 format for the attachment. @param mime is the (optional) @acronym MIME type of the attachment */ explicit Attachment(const QByteArray &base64, const QString &mime = QString()); /** Constructs an attachment by copying another attachment. @param attachment is the attachment to be copied. */ Attachment(const Attachment &attachment); /** Destroys the attachment. */ ~Attachment(); /** Returns whether this is an empty or default constructed object. */ bool isEmpty() const; /** Sets the @acronym URI for this attachment to @p uri. @param uri is the @acronym URI to use for the attachment. @see uri(), isUri() */ void setUri(const QString &uri); /** Returns the @acronym URI of the attachment. @see setUri(), isUri() */ Q_REQUIRED_RESULT QString uri() const; /** Returns true if the attachment has a @acronym URI; false otherwise. @see uri(), setUri(I), isBinary() */ Q_REQUIRED_RESULT bool isUri() const; /** Returns true if the attachment has a binary blob; false otherwise. @see isUri() */ Q_REQUIRED_RESULT bool isBinary() const; /** Sets the base64 encoded binary blob data of the attachment. @param base64 contains the base64 encoded binary data. @see data(), decodedData() */ void setData(const QByteArray &base64); /** Returns a pointer to a QByteArray containing the base64 encoded binary data of the attachment. @see setData(), setDecodedData() */ Q_REQUIRED_RESULT QByteArray data() const; /** Sets the decoded attachment data. @param data is the decoded base64 binary data. @see decodedData(), data() */ void setDecodedData(const QByteArray &data); /** Returns a QByteArray containing the decoded base64 binary data of the attachment. @see setDecodedData(), setData() */ Q_REQUIRED_RESULT QByteArray decodedData() const; /** Returns the size of the attachment, in bytes. If the attachment is binary (i.e, there is no @acronym URI associated with the attachment) then a value of 0 is returned. */ uint size() const; /** Sets the @acronym MIME-type of the attachment to @p mime. @param mime is the string to use for the attachment @acronym MIME-type. @see mimeType() */ void setMimeType(const QString &mime); /** Returns the @acronym MIME-type of the attachment. @see setMimeType() */ Q_REQUIRED_RESULT QString mimeType() const; /** Sets the attachment "show in-line" option, which is derived from the Calendar Incidence @b X-CONTENT-DISPOSITION parameter. @param showinline is the flag to set (true) or unset (false) for the attachment "show in-line" option. @see showInline() */ void setShowInline(bool showinline); /** Returns the attachment "show in-line" flag. @see setShowInline() */ Q_REQUIRED_RESULT bool showInline() const; /** Sets the attachment label to @p label, which is derived from the Calendar Incidence @b X-LABEL parameter. @param label is the string to use for the attachment label. @see label() */ void setLabel(const QString &label); /** Returns the attachment label string. */ Q_REQUIRED_RESULT QString label() const; /** Sets the attachment "local" option, which is derived from the Calendar Incidence @b X-KONTACT-TYPE parameter. @param local is the flag to set (true) or unset (false) for the attachment "local" option. @see local() */ void setLocal(bool local); /** Returns the attachment "local" flag. */ Q_REQUIRED_RESULT bool isLocal() const; /** Assignment operator. @param attachment is the attachment to assign. */ Attachment &operator=(const Attachment &attachment); /** Compare this with @p attachment for equality. @param attachment is the attachment to compare. @return true if the attachments are equal; false otherwise. */ bool operator==(const Attachment &attachment) const; /** Compare this with @p attachment for inequality. @param attachment is the attachment to compare. @return true if the attachments are /not/ equal; false otherwise. */ bool operator!=(const Attachment &attachment) const; private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Attachment &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Attachment &); }; /** * Attachment serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::Attachment &); /** * Attachment deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Attachment &); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Attachment, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Attachment) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/attendee.cpp000066400000000000000000000200221523260663500264130ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2010 Casey Link SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attendee class. @brief Represents information related to an attendee of an Calendar Incidence. @author Cornelius Schumacher \ */ #include "attendee.h" #include "person.h" #include "person_p.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Attendee::Private : public QSharedData { public: void setCuType(CuType cuType); void setCuType(const QString &cuType); CuType cuType() const; QString cuTypeStr() const; bool mRSVP = false; Role mRole; PartStat mStatus; mutable QString mUid; QString mDelegate; QString mDelegator; CustomProperties mCustomProperties; QString mName; QString mEmail; private: QString sCuType; CuType mCuType; }; //@endcond void KCalendarCore::Attendee::Private::setCuType(Attendee::CuType cuType) { mCuType = cuType; sCuType.clear(); } void KCalendarCore::Attendee::Private::setCuType(const QString &cuType) { const QString upper = cuType.toUpper(); if (upper == QLatin1String("INDIVIDUAL")) { setCuType(Attendee::Individual); } else if (upper == QLatin1String("GROUP")) { setCuType(Attendee::Group); } else if (upper == QLatin1String("RESOURCE")) { setCuType(Attendee::Resource); } else if (upper == QLatin1String("ROOM")) { setCuType(Attendee::Room); } else { setCuType(Attendee::Unknown); if (upper.startsWith(QLatin1String("X-")) || upper.startsWith(QLatin1String("IANA-"))) { sCuType = upper; } } } Attendee::CuType KCalendarCore::Attendee::Private::cuType() const { return mCuType; } QString KCalendarCore::Attendee::Private::cuTypeStr() const { switch (mCuType) { case Attendee::Individual: return QStringLiteral("INDIVIDUAL"); case Attendee::Group: return QStringLiteral("GROUP"); case Attendee::Resource: return QStringLiteral("RESOURCE"); case Attendee::Room: return QStringLiteral("ROOM"); case Attendee::Unknown: if (sCuType.isEmpty()) { return QStringLiteral("UNKNOWN"); } else { return sCuType; } } return QStringLiteral("UNKNOWN"); } Attendee::Attendee() : d(new Attendee::Private) { } Attendee::Attendee(const QString &name, const QString &email, bool rsvp, Attendee::PartStat status, Attendee::Role role, const QString &uid) : d(new Attendee::Private) { setName(name); setEmail(email); d->mRSVP = rsvp; d->mStatus = status; d->mRole = role; d->mUid = uid; d->setCuType(Attendee::Individual); } Attendee::Attendee(const Attendee &attendee) : d(attendee.d) { } Attendee::~Attendee() = default; bool Attendee::isNull() const { // isNull rather than isEmpty, as user code is actually creating empty but non-null attendees... return d->mName.isNull() && d->mEmail.isNull(); } bool KCalendarCore::Attendee::operator==(const Attendee &attendee) const { return d->mUid == attendee.d->mUid && d->mRSVP == attendee.d->mRSVP && d->mRole == attendee.d->mRole && d->mStatus == attendee.d->mStatus && d->mDelegate == attendee.d->mDelegate && d->mDelegator == attendee.d->mDelegator && d->cuTypeStr() == attendee.d->cuTypeStr() && d->mName == attendee.d->mName && d->mEmail == attendee.d->mEmail; } bool KCalendarCore::Attendee::operator!=(const Attendee &attendee) const { return !operator==(attendee); } Attendee &KCalendarCore::Attendee::operator=(const Attendee &attendee) { // check for self assignment if (&attendee == this) { return *this; } d = attendee.d; return *this; } QString Attendee::name() const { return d->mName; } void Attendee::setName(const QString &name) { if (name.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { d->mName = name.mid(7); } else { d->mName = name; } } QString Attendee::fullName() const { return fullNameHelper(d->mName, d->mEmail); } QString Attendee::email() const { return d->mEmail; } void Attendee::setEmail(const QString &email) { if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { d->mEmail = email.mid(7); } else { d->mEmail = email; } } void Attendee::setRSVP(bool r) { d->mRSVP = r; } bool Attendee::RSVP() const { return d->mRSVP; } void Attendee::setStatus(Attendee::PartStat status) { d->mStatus = status; } Attendee::PartStat Attendee::status() const { return d->mStatus; } void Attendee::setCuType(Attendee::CuType cuType) { d->setCuType(cuType); } void Attendee::setCuType(const QString &cuType) { d->setCuType(cuType); } Attendee::CuType Attendee::cuType() const { return d->cuType(); } QString Attendee::cuTypeStr() const { return d->cuTypeStr(); } void Attendee::setRole(Attendee::Role role) { d->mRole = role; } Attendee::Role Attendee::role() const { return d->mRole; } void Attendee::setUid(const QString &uid) { d->mUid = uid; } QString Attendee::uid() const { /* If Uid is empty, just use the pointer to Attendee (encoded to * string) as Uid. Only thing that matters is that the Uid is unique * insofar IncidenceBase is concerned, and this does that (albeit * not very nicely). If these are ever saved to disk, should use * (considerably more expensive) CalFormat::createUniqueId(). As Uid * is not part of Attendee in iCal std, it's fairly safe bet that * these will never hit disc though so faster generation speed is * more important than actually being forever unique.*/ if (d->mUid.isEmpty()) { d->mUid = QString::number((qlonglong)d.constData()); } return d->mUid; } void Attendee::setDelegate(const QString &delegate) { d->mDelegate = delegate; } QString Attendee::delegate() const { return d->mDelegate; } void Attendee::setDelegator(const QString &delegator) { d->mDelegator = delegator; } QString Attendee::delegator() const { return d->mDelegator; } void Attendee::setCustomProperty(const QByteArray &xname, const QString &xvalue) { d->mCustomProperties.setNonKDECustomProperty(xname, xvalue); } CustomProperties &Attendee::customProperties() { return d->mCustomProperties; } const CustomProperties &Attendee::customProperties() const { return d->mCustomProperties; } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Attendee &attendee) { KCalendarCore::Person p(attendee.name(), attendee.email()); stream << p; return stream << attendee.d->mRSVP << int(attendee.d->mRole) << int(attendee.d->mStatus) << attendee.d->mUid << attendee.d->mDelegate << attendee.d->mDelegator << attendee.d->cuTypeStr() << attendee.d->mCustomProperties; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::Attendee &attendee) { bool RSVP; Attendee::Role role; Attendee::PartStat status; QString uid; QString delegate; QString delegator; QString cuType; CustomProperties customProperties; uint role_int; uint status_int; KCalendarCore::Person person; stream >> person; stream >> RSVP >> role_int >> status_int >> uid >> delegate >> delegator >> cuType >> customProperties; role = Attendee::Role(role_int); status = Attendee::PartStat(status_int); attendee = Attendee(person.name(), person.email(), RSVP, status, role, uid); attendee.setDelegate(delegate); attendee.setDelegator(delegator); attendee.setCuType(cuType); attendee.d->mCustomProperties = customProperties; return stream; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/attendee.h000066400000000000000000000233651523260663500260750ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Attendee class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_ATTENDEE_H #define KCALCORE_ATTENDEE_H #include #include #include "customproperties.h" namespace KCalendarCore { /** @brief Represents information related to an attendee of an Calendar Incidence, typically a meeting or task (to-do). Attendees are people with a name and (optional) email address who are invited to participate in some way in a meeting or task. This class also tracks that status of the invitation: accepted; tentatively accepted; declined; delegated to another person; in-progress; completed. Attendees may optionally be asked to @acronym RSVP ("Respond Please") to the invitation. Note that each attendee be can optionally associated with a @acronym UID (unique identifier) derived from a Calendar Incidence, Email Message, or any other thing you want. */ class Q_CORE_EXPORT Attendee { Q_GADGET Q_PROPERTY(bool isNull READ isNull) Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QString fullName READ fullName) Q_PROPERTY(QString email READ email WRITE setEmail) Q_PROPERTY(Role role READ role WRITE setRole) Q_PROPERTY(QString uid READ uid WRITE setUid) Q_PROPERTY(PartStat status READ status WRITE setStatus) Q_PROPERTY(CuType cuType READ cuType WRITE setCuType) Q_PROPERTY(bool rsvp READ RSVP WRITE setRSVP) Q_PROPERTY(QString delegate READ delegate WRITE setDelegate) Q_PROPERTY(QString delegator READ delegator WRITE setDelegator) public: /** The different types of participant status. The meaning is specific to the incidence type in context. */ enum PartStat { NeedsAction, /**< Event, to-do or journal needs action (default) */ Accepted, /**< Event, to-do or journal accepted */ Declined, /**< Event, to-do or journal declined */ Tentative, /**< Event or to-do tentatively accepted */ Delegated, /**< Event or to-do delegated */ Completed, /**< To-do completed */ InProcess, /**< To-do in process of being completed */ None, }; Q_ENUM(PartStat) /** The different types of participation roles. */ enum Role { ReqParticipant, /**< Participation is required (default) */ OptParticipant, /**< Participation is optional */ NonParticipant, /**< Non-Participant; copied for information purposes */ Chair, /**< Chairperson */ }; Q_ENUM(Role) /** * The different types of a participant. * * @since 4.14 */ enum CuType { Individual, /**< An individual (default) */ Group, /**< A group of individuals */ Resource, /**< A physical resource */ Room, /**< A room resource */ Unknown, /**< Otherwise not known */ /** * Parameters that have to set via the QString variant of @setCuType() and @cuType() * x-name ; Experimental cuType * iana-token ; Other IANA-registered */ }; Q_ENUM(CuType) /** List of attendees. */ typedef QVector List; /** Create a null Attendee. */ Attendee(); /** Constructs an attendee consisting of a person name (@p name) and email address (@p email); invitation status and #Role; an optional @acronym RSVP flag and @acronym UID. @param name is person name of the attendee. @param email is person email address of the attendee. @param rsvp if true, the attendee is requested to reply to invitations. @param status is the #PartStat status of the attendee. @param role is the #Role of the attendee. @param uid is the @acronym UID of the attendee. */ Attendee(const QString &name, const QString &email, bool rsvp = false, PartStat status = None, Role role = ReqParticipant, const QString &uid = QString()); /** Constructs an attendee by copying another attendee. @param attendee is the attendee to be copied. */ Attendee(const Attendee &attendee); /** Destroys the attendee. */ ~Attendee(); /** * Returns @c true if this is a default-constructed Attendee instance. */ bool isNull() const; /** Returns the name of the attendee. */ Q_REQUIRED_RESULT QString name() const; /** Sets the name of the attendee to @p name. */ void setName(const QString &name); /** Returns the full name and email address of this attendee @return A QString containing the person's full name in the form "FirstName LastName \". */ Q_REQUIRED_RESULT QString fullName() const; /** Returns the email address for this attendee. */ Q_REQUIRED_RESULT QString email() const; /** Sets the email address for this attendee to @p email. */ void setEmail(const QString &email); /** Sets the Role of the attendee to @p role. @param role is the Role to use for the attendee. @see role() */ void setRole(Role role); /** Returns the Role of the attendee. @see setRole() */ Q_REQUIRED_RESULT Role role() const; /** Sets the @acronym UID of the attendee to @p uid. @param uid is the @acronym UID to use for the attendee. @see uid() */ void setUid(const QString &uid); /** Returns the @acronym UID of the attendee. @see setUid() */ Q_REQUIRED_RESULT QString uid() const; /** Sets the #PartStat of the attendee to @p status. @param status is the #PartStat to use for the attendee. @see status() */ void setStatus(PartStat status); /** Returns the #PartStat of the attendee. @see setStatus() */ Q_REQUIRED_RESULT PartStat status() const; /** Sets the #CuType of the attendee to @p cuType. @param cuType is the #CuType to use for the attendee. @see cuType() @since 4.14 */ void setCuType(CuType cuType); /** Sets the #CuType of the attendee to @p cuType. @param cuType is the #CuType to use for the attendee. @see cuType() @since 4.14 */ void setCuType(const QString &cuType); /** Returns the #CuType of the attendee. @see setCuType() @since 4.14 */ Q_REQUIRED_RESULT CuType cuType() const; /** Returns the #CuType of the attendee. @see setCuType() @since 4.14 */ Q_REQUIRED_RESULT QString cuTypeStr() const; /** Sets the @acronym RSVP flag of the attendee to @p rsvp. @param rsvp if set (true), the attendee is requested to reply to invitations. @see RSVP() */ void setRSVP(bool rsvp); /** Returns the attendee @acronym RSVP flag. @see setRSVP() */ Q_REQUIRED_RESULT bool RSVP() const; /** Compares this with @p attendee for equality. @param attendee the attendee to compare. */ bool operator==(const Attendee &attendee) const; /** Compares this with @p attendee for inequality. @param attendee the attendee to compare. */ bool operator!=(const Attendee &attendee) const; /** Sets the delegate. @param delegate is a string containing a MAILTO URI of those delegated to attend the meeting. @see delegate(), setDelegator(). */ void setDelegate(const QString &delegate); /** Returns the delegate. @see setDelegate(). */ Q_REQUIRED_RESULT QString delegate() const; /** Sets the delegator. @param delegator is a string containing a MAILTO URI of those who have delegated their meeting attendance. @see delegator(), setDelegate(). */ void setDelegator(const QString &delegator); /** Returns the delegator. @see setDelegator(). */ Q_REQUIRED_RESULT QString delegator() const; /** Adds a custom property. If the property already exists it will be overwritten. @param xname is the name of the property. @param xvalue is its value. */ void setCustomProperty(const QByteArray &xname, const QString &xvalue); /** Returns a reference to the CustomProperties object */ Q_REQUIRED_RESULT CustomProperties &customProperties(); /** Returns a const reference to the CustomProperties object */ const CustomProperties &customProperties() const; /** Sets this attendee equal to @p attendee. @param attendee is the attendee to copy. */ Attendee &operator=(const Attendee &attendee); private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Attendee &attendee); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Attendee &attendee); }; /** Serializes an Attendee object into a data stream. @param stream is a QDataStream. @param attendee is a pointer to a Attendee object to be serialized. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Attendee &attendee); /** Initializes an Attendee object from a data stream. @param stream is a QDataStream. @param attendee is a pointer to a Attendee object to be initialized. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Attendee &attendee); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Attendee, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Attendee) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calendar.cpp000066400000000000000000001164401523260663500264050ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2000-2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Calendar class. @brief Represents the main calendar class. @author Preston Brown \ @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ #include "calendar.h" #include "calendar_p.h" #include "calfilter.h" #include "icaltimezones_p.h" #include "sorting.h" #include "visitor.h" //extern "C" { //#include //} #include #include // for std::remove() using namespace KCalendarCore; /** Make a QHash::value that returns a QVector. */ template QVector values(const QMultiHash &c) { QVector v; v.reserve(c.size()); for (typename QMultiHash::const_iterator it = c.begin(), end = c.end(); it != end; ++it) { v.push_back(it.value()); } return v; } template QVector values(const QMultiHash &c, const K &x) { QVector v; typename QMultiHash::const_iterator it = c.find(x); while (it != c.end() && it.key() == x) { v.push_back(it.value()); ++it; } return v; } /** Template for a class that implements a visitor for adding an Incidence to a resource supporting addEvent(), addTodo() and addJournal() calls. */ template class AddVisitor : public Visitor { public: AddVisitor(T *r) : mResource(r) { } bool visit(const Event::Ptr &e) override { return mResource->addEvent(e); } bool visit(const Todo::Ptr &t) override { return mResource->addTodo(t); } bool visit(const Journal::Ptr &j) override { return mResource->addJournal(j); } bool visit(const FreeBusy::Ptr &) override { return false; } private: T *mResource; }; /** Template for a class that implements a visitor for deleting an Incidence from a resource supporting deleteEvent(), deleteTodo() and deleteJournal() calls. */ template class DeleteVisitor : public Visitor { public: DeleteVisitor(T *r) : mResource(r) { } bool visit(const Event::Ptr &e) override { mResource->deleteEvent(e); return true; } bool visit(const Todo::Ptr &t) override { mResource->deleteTodo(t); return true; } bool visit(const Journal::Ptr &j) override { mResource->deleteJournal(j); return true; } bool visit(const FreeBusy::Ptr &) override { return false; } private: T *mResource; }; //@endcond Calendar::Calendar(const QTimeZone &timeZone) : d(new KCalendarCore::Calendar::Private) { if (timeZone.isValid()) { d->mTimeZone = timeZone; } else { d->mTimeZone = QTimeZone::systemTimeZone(); } } Calendar::Calendar(const QByteArray &timeZoneId) : d(new KCalendarCore::Calendar::Private) { setTimeZoneId(timeZoneId); } Calendar::~Calendar() { delete d; } Person Calendar::owner() const { return d->mOwner; } void Calendar::setOwner(const Person &owner) { if (owner != d->mOwner) { d->mOwner = owner; setModified(true); Q_EMIT ownerChanged(); } } void Calendar::setTimeZone(const QTimeZone &timeZone) { if (timeZone.isValid()) { d->mTimeZone = timeZone; } else { d->mTimeZone = QTimeZone::systemTimeZone(); } doSetTimeZone(d->mTimeZone); } QTimeZone Calendar::timeZone() const { return d->mTimeZone; } void Calendar::setTimeZoneId(const QByteArray &timeZoneId) { d->mTimeZone = d->timeZoneIdSpec(timeZoneId); doSetTimeZone(d->mTimeZone); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall } //@cond PRIVATE QTimeZone Calendar::Private::timeZoneIdSpec(const QByteArray &timeZoneId) { if (timeZoneId == QByteArrayLiteral("UTC")) { return QTimeZone::utc(); } auto tz = QTimeZone(timeZoneId); if (tz.isValid()) { return tz; } return QTimeZone::systemTimeZone(); } //@endcond QByteArray Calendar::timeZoneId() const { return d->mTimeZone.id(); } void Calendar::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { setTimeZone(newZone); int i, end; Event::List ev = events(); for (i = 0, end = ev.count(); i < end; ++i) { ev[i]->shiftTimes(oldZone, newZone); } Todo::List to = todos(); for (i = 0, end = to.count(); i < end; ++i) { to[i]->shiftTimes(oldZone, newZone); } Journal::List jo = journals(); for (i = 0, end = jo.count(); i < end; ++i) { jo[i]->shiftTimes(oldZone, newZone); } } void Calendar::setFilter(CalFilter *filter) { if (filter) { d->mFilter = filter; } else { d->mFilter = d->mDefaultFilter; } Q_EMIT filterChanged(); } CalFilter *Calendar::filter() const { return d->mFilter; } QStringList Calendar::categories() const { Incidence::List rawInc(rawIncidences()); QStringList cats, thisCats; // @TODO: For now just iterate over all incidences. In the future, // the list of categories should be built when reading the file. for (Incidence::List::ConstIterator i = rawInc.constBegin(); i != rawInc.constEnd(); ++i) { thisCats = (*i)->categories(); for (QStringList::ConstIterator si = thisCats.constBegin(); si != thisCats.constEnd(); ++si) { if (!cats.contains(*si)) { cats.append(*si); } } } return cats; } Incidence::List Calendar::incidences(const QDate &date) const { return mergeIncidenceList(events(date), todos(date), journals(date)); } Incidence::List Calendar::incidences() const { return mergeIncidenceList(events(), todos(), journals()); } Incidence::List Calendar::rawIncidences() const { return mergeIncidenceList(rawEvents(), rawTodos(), rawJournals()); } Incidence::List Calendar::instances(const Incidence::Ptr &incidence) const { if (incidence) { Event::List elist; Todo::List tlist; Journal::List jlist; if (incidence->type() == Incidence::TypeEvent) { elist = eventInstances(incidence); } else if (incidence->type() == Incidence::TypeTodo) { tlist = todoInstances(incidence); } else if (incidence->type() == Incidence::TypeJournal) { jlist = journalInstances(incidence); } return mergeIncidenceList(elist, tlist, jlist); } else { return Incidence::List(); } } Incidence::List Calendar::duplicates(const Incidence::Ptr &incidence) { if (incidence) { Incidence::List list; Incidence::List vals = values(d->mNotebookIncidences); Incidence::List::const_iterator it; for (it = vals.constBegin(); it != vals.constEnd(); ++it) { if (((incidence->dtStart() == (*it)->dtStart()) || (!incidence->dtStart().isValid() && !(*it)->dtStart().isValid())) && (incidence->summary() == (*it)->summary())) { list.append(*it); } } return list; } else { return Incidence::List(); } } bool Calendar::addNotebook(const QString ¬ebook, bool isVisible) { if (d->mNotebooks.contains(notebook)) { return false; } else { d->mNotebooks.insert(notebook, isVisible); return true; } } bool Calendar::updateNotebook(const QString ¬ebook, bool isVisible) { if (!d->mNotebooks.contains(notebook)) { return false; } else { d->mNotebooks.insert(notebook, isVisible); const QList incidences = d->mNotebookIncidences.values(notebook); for (Incidence::Ptr incidence : incidences) { QHash::Iterator it = d->mIncidenceVisibility.find(incidence); if (it != d->mIncidenceVisibility.end()) *it = isVisible; } return true; } } bool Calendar::deleteNotebook(const QString ¬ebook) { if (!d->mNotebooks.contains(notebook)) { return false; } else { return d->mNotebooks.remove(notebook); } } bool Calendar::setDefaultNotebook(const QString ¬ebook) { if (!d->mNotebooks.contains(notebook)) { return false; } else { d->mDefaultNotebook = notebook; return true; } } QString Calendar::defaultNotebook() const { return d->mDefaultNotebook; } bool Calendar::hasValidNotebook(const QString ¬ebook) const { return d->mNotebooks.contains(notebook); } bool Calendar::isVisible(const Incidence::Ptr &incidence) const { if (d->mIncidenceVisibility.contains(incidence)) { return d->mIncidenceVisibility[incidence]; } const QString nuid = notebook(incidence); bool rv; if (d->mNotebooks.contains(nuid)) { rv = d->mNotebooks.value(nuid); } else { // NOTE returns true also for nonexisting notebooks for compatibility rv = true; } d->mIncidenceVisibility[incidence] = rv; return rv; } bool Calendar::isVisible(const QString ¬ebook) const { QHash::ConstIterator it = d->mNotebooks.constFind(notebook); return (it != d->mNotebooks.constEnd()) ? *it : true; } void Calendar::clearNotebookAssociations() { d->mNotebookIncidences.clear(); d->mUidToNotebook.clear(); d->mIncidenceVisibility.clear(); } bool Calendar::setNotebook(const Incidence::Ptr &inc, const QString ¬ebook) { if (!inc) { return false; } if (!notebook.isEmpty() && !incidence(inc->uid(), inc->recurrenceId())) { qWarning() << "cannot set notebook until incidence has been added"; return false; } if (d->mUidToNotebook.contains(inc->uid())) { QString old = d->mUidToNotebook.value(inc->uid()); if (!old.isEmpty() && notebook != old) { if (inc->hasRecurrenceId()) { qWarning() << "cannot set notebook for child incidences"; return false; } // Move all possible children also. Incidence::List list = instances(inc); Incidence::List::Iterator it; for (it = list.begin(); it != list.end(); ++it) { d->mNotebookIncidences.remove(old, *it); d->mNotebookIncidences.insert(notebook, *it); } notifyIncidenceChanged(inc); // for removing from old notebook // don not remove from mUidToNotebook to keep deleted incidences d->mNotebookIncidences.remove(old, inc); } } if (!notebook.isEmpty()) { d->mUidToNotebook.insert(inc->uid(), notebook); d->mNotebookIncidences.insert(notebook, inc); qWarning() << "setting notebook" << notebook << "for" << inc->uid(); notifyIncidenceChanged(inc); // for inserting into new notebook } return true; } QString Calendar::notebook(const Incidence::Ptr &incidence) const { if (incidence) { return d->mUidToNotebook.value(incidence->uid()); } else { return QString(); } } QString Calendar::notebook(const QString &uid) const { return d->mUidToNotebook.value(uid); } QStringList Calendar::notebooks() const { return d->mNotebookIncidences.uniqueKeys(); } Incidence::List Calendar::incidences(const QString ¬ebook) const { if (notebook.isEmpty()) { return values(d->mNotebookIncidences); } else { return values(d->mNotebookIncidences, notebook); } } /** static */ Event::List Calendar::sortEvents(const Event::List &eventList, EventSortField sortField, SortDirection sortDirection) { if (eventList.isEmpty()) { return Event::List(); } Event::List eventListSorted; // Notice we alphabetically presort Summaries first. // We do this so comparison "ties" stay in a nice order. eventListSorted = eventList; switch (sortField) { case EventSortUnsorted: break; case EventSortStartDate: if (sortDirection == SortDirectionAscending) { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::startDateLessThan); } else { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::startDateMoreThan); } break; case EventSortEndDate: if (sortDirection == SortDirectionAscending) { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::endDateLessThan); } else { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::endDateMoreThan); } break; case EventSortSummary: if (sortDirection == SortDirectionAscending) { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::summaryLessThan); } else { std::sort(eventListSorted.begin(), eventListSorted.end(), Events::summaryMoreThan); } break; } return eventListSorted; } Event::List Calendar::events(const QDate &date, const QTimeZone &timeZone, EventSortField sortField, SortDirection sortDirection) const { Event::List el = rawEventsForDate(date, timeZone, sortField, sortDirection); d->mFilter->apply(&el); return el; } Event::List Calendar::events(const QDateTime &dt) const { Event::List el = rawEventsForDate(dt); d->mFilter->apply(&el); return el; } Event::List Calendar::events(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Event::List el = rawEvents(start, end, timeZone, inclusive); d->mFilter->apply(&el); return el; } Event::List Calendar::events(EventSortField sortField, SortDirection sortDirection) const { Event::List el = rawEvents(sortField, sortDirection); d->mFilter->apply(&el); return el; } bool Calendar::addIncidence(const Incidence::Ptr &incidence) { if (!incidence) { return false; } AddVisitor v(this); return incidence->accept(v, incidence); } bool Calendar::deleteIncidence(const Incidence::Ptr &incidence) { if (!incidence) { return false; } if (beginChange(incidence)) { DeleteVisitor v(this); const bool result = incidence->accept(v, incidence); endChange(incidence); return result; } else { return false; } } Incidence::Ptr Calendar::createException(const Incidence::Ptr &incidence, const QDateTime &recurrenceId, bool thisAndFuture) { Q_ASSERT(recurrenceId.isValid()); if (!incidence || !incidence->recurs() || !recurrenceId.isValid()) { return Incidence::Ptr(); } Incidence::Ptr newInc(incidence->clone()); newInc->setCreated(QDateTime::currentDateTimeUtc()); newInc->setRevision(0); // Recurring exceptions are not support for now newInc->clearRecurrence(); newInc->setRecurrenceId(recurrenceId); newInc->setThisAndFuture(thisAndFuture); newInc->setDtStart(recurrenceId); // Calculate and set the new end of the incidence QDateTime end = incidence->dateTime(IncidenceBase::RoleEnd); if (end.isValid()) { if (incidence->allDay()) { qint64 offset = incidence->dtStart().daysTo(recurrenceId); end = end.addDays(offset); } else { qint64 offset = incidence->dtStart().secsTo(recurrenceId); end = end.addSecs(offset); } newInc->setDateTime(end, IncidenceBase::RoleEnd); } return newInc; } Incidence::Ptr Calendar::incidence(const QString &uid, const QDateTime &recurrenceId) const { Incidence::Ptr i = event(uid, recurrenceId); if (i) { return i; } i = todo(uid, recurrenceId); if (i) { return i; } i = journal(uid, recurrenceId); return i; } Incidence::Ptr Calendar::deleted(const QString &uid, const QDateTime &recurrenceId) const { Incidence::Ptr i = deletedEvent(uid, recurrenceId); if (i) { return i; } i = deletedTodo(uid, recurrenceId); if (i) { return i; } i = deletedJournal(uid, recurrenceId); return i; } Incidence::List Calendar::incidencesFromSchedulingID(const QString &sid) const { Incidence::List result; const Incidence::List incidences = rawIncidences(); Incidence::List::const_iterator it = incidences.begin(); for (; it != incidences.end(); ++it) { if ((*it)->schedulingID() == sid) { result.append(*it); } } return result; } Incidence::Ptr Calendar::incidenceFromSchedulingID(const QString &uid) const { const Incidence::List incidences = rawIncidences(); Incidence::List::const_iterator it = incidences.begin(); for (; it != incidences.end(); ++it) { if ((*it)->schedulingID() == uid) { // Touchdown, and the crowd goes wild return *it; } } // Not found return Incidence::Ptr(); } /** static */ Todo::List Calendar::sortTodos(const Todo::List &todoList, TodoSortField sortField, SortDirection sortDirection) { if (todoList.isEmpty()) { return Todo::List(); } Todo::List todoListSorted; // Notice we alphabetically presort Summaries first. // We do this so comparison "ties" stay in a nice order. // Note that To-dos may not have Start DateTimes nor due DateTimes. todoListSorted = todoList; switch (sortField) { case TodoSortUnsorted: break; case TodoSortStartDate: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::startDateLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::startDateMoreThan); } break; case TodoSortDueDate: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::dueDateLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::dueDateMoreThan); } break; case TodoSortPriority: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::priorityLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::priorityMoreThan); } break; case TodoSortPercentComplete: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::percentLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::percentMoreThan); } break; case TodoSortSummary: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::summaryLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::summaryMoreThan); } break; case TodoSortCreated: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::createdLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Todos::createdMoreThan); } break; case TodoSortCategories: if (sortDirection == SortDirectionAscending) { std::sort(todoListSorted.begin(), todoListSorted.end(), Incidences::categoriesLessThan); } else { std::sort(todoListSorted.begin(), todoListSorted.end(), Incidences::categoriesMoreThan); } break; } return todoListSorted; } Todo::List Calendar::todos(TodoSortField sortField, SortDirection sortDirection) const { Todo::List tl = rawTodos(sortField, sortDirection); d->mFilter->apply(&tl); return tl; } Todo::List Calendar::todos(const QDate &date) const { Todo::List el = rawTodosForDate(date); d->mFilter->apply(&el); return el; } Todo::List Calendar::todos(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Todo::List tl = rawTodos(start, end, timeZone, inclusive); d->mFilter->apply(&tl); return tl; } /** static */ Journal::List Calendar::sortJournals(const Journal::List &journalList, JournalSortField sortField, SortDirection sortDirection) { if (journalList.isEmpty()) { return Journal::List(); } Journal::List journalListSorted = journalList; switch (sortField) { case JournalSortUnsorted: break; case JournalSortDate: if (sortDirection == SortDirectionAscending) { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::dateLessThan); } else { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::dateMoreThan); } break; case JournalSortSummary: if (sortDirection == SortDirectionAscending) { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::summaryLessThan); } else { std::sort(journalListSorted.begin(), journalListSorted.end(), Journals::summaryMoreThan); } break; } return journalListSorted; } Journal::List Calendar::journals(JournalSortField sortField, SortDirection sortDirection) const { Journal::List jl = rawJournals(sortField, sortDirection); d->mFilter->apply(&jl); return jl; } Journal::List Calendar::journals(const QDate &date) const { Journal::List el = rawJournalsForDate(date); d->mFilter->apply(&el); return el; } // When this is called, the to-dos have already been added to the calendar. // This method is only about linking related to-dos. void Calendar::setupRelations(const Incidence::Ptr &forincidence) { if (!forincidence) { return; } const QString uid = forincidence->uid(); // First, go over the list of orphans and see if this is their parent Incidence::List l = values(d->mOrphans, uid); d->mOrphans.remove(uid); if (!l.isEmpty()) { Incidence::List &relations = d->mIncidenceRelations[uid]; relations.reserve(relations.count() + l.count()); for (int i = 0, end = l.count(); i < end; ++i) { relations.append(l[i]); d->mOrphanUids.remove(l[i]->uid()); } } // Now see about this incidences parent if (forincidence->relatedTo().isEmpty() && !forincidence->relatedTo().isEmpty()) { // Incidence has a uid it is related to but is not registered to it yet. // Try to find it Incidence::Ptr parent = incidence(forincidence->relatedTo()); if (parent) { // Found it // look for hierarchy loops if (isAncestorOf(forincidence, parent)) { forincidence->setRelatedTo(QString()); qWarning() << "hierarchy loop between " << forincidence->uid() << " and " << parent->uid(); } else { d->mIncidenceRelations[parent->uid()].append(forincidence); } } else { // Not found, put this in the mOrphans list // Note that the mOrphans dict might contain multiple entries with the // same key! which are multiple children that wait for the parent // incidence to be inserted. d->mOrphans.insert(forincidence->relatedTo(), forincidence); d->mOrphanUids.insert(forincidence->uid(), forincidence); } } } // If a to-do with sub-to-dos is deleted, move it's sub-to-dos to the orphan list void Calendar::removeRelations(const Incidence::Ptr &incidence) { if (!incidence) { qWarning() << "Warning: incidence is 0"; return; } const QString uid = incidence->uid(); for (const Incidence::Ptr &i : qAsConst(d->mIncidenceRelations[uid])) { if (!d->mOrphanUids.contains(i->uid())) { d->mOrphans.insert(uid, i); d->mOrphanUids.insert(i->uid(), i); i->setRelatedTo(uid); } } const QString parentUid = incidence->relatedTo(); // If this incidence is related to something else, tell that about it if (!parentUid.isEmpty()) { Incidence::List &relations = d->mIncidenceRelations[parentUid]; relations.erase(std::remove(relations.begin(), relations.end(), incidence), relations.end()); } // Remove this one from the orphans list if (d->mOrphanUids.remove(uid)) { // This incidence is located in the orphans list - it should be removed // Since the mOrphans dict might contain the same key (with different // child incidence pointers!) multiple times, take care that we remove // the correct one. So we need to remove all items with the given // parent UID, and re-add those that are not for this item. Also, there // might be other entries with different UID that point to this // incidence (this might happen when the relatedTo of the item is // changed before its parent is inserted. This might happen with // groupware servers....). Remove them, too QStringList relatedToUids; // First, create a list of all keys in the mOrphans list which point // to the removed item relatedToUids << incidence->relatedTo(); for (QMultiHash::Iterator it = d->mOrphans.begin(); it != d->mOrphans.end(); ++it) { if (it.value()->uid() == uid) { relatedToUids << it.key(); } } // now go through all uids that have one entry that point to the incidence for (QStringList::const_iterator uidit = relatedToUids.constBegin(); uidit != relatedToUids.constEnd(); ++uidit) { Incidence::List tempList; // Remove all to get access to the remaining entries const Incidence::List l = values(d->mOrphans, *uidit); d->mOrphans.remove(*uidit); for (const Incidence::Ptr &i : l) { if (i != incidence) { tempList.append(i); } } // Re-add those that point to a different orphan incidence for (Incidence::List::Iterator incit = tempList.begin(); incit != tempList.end(); ++incit) { d->mOrphans.insert(*uidit, *incit); } } } // Make sure the deleted incidence doesn't relate to a non-deleted incidence, // since that would cause trouble in MemoryCalendar::close(), as the deleted // incidences are destroyed after the non-deleted incidences. The destructor // of the deleted incidences would then try to access the already destroyed // non-deleted incidence, which would segfault. // // So in short: Make sure dead incidences don't point to alive incidences // via the relation. // // This crash is tested in MemoryCalendarTest::testRelationsCrash(). // incidence->setRelatedTo( Incidence::Ptr() ); } bool Calendar::isAncestorOf(const Incidence::Ptr &ancestor, const Incidence::Ptr &incidence) const { if (!incidence || incidence->relatedTo().isEmpty()) { return false; } else if (incidence->relatedTo() == ancestor->uid()) { return true; } else { return isAncestorOf(ancestor, this->incidence(incidence->relatedTo())); } } Incidence::List Calendar::relations(const QString &uid) const { return d->mIncidenceRelations[uid]; } Calendar::CalendarObserver::~CalendarObserver() { } void Calendar::CalendarObserver::calendarModified(bool modified, Calendar *calendar) { Q_UNUSED(modified); Q_UNUSED(calendar); } void Calendar::CalendarObserver::calendarIncidenceAdded(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::CalendarObserver::calendarIncidenceChanged(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::CalendarObserver::calendarIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::CalendarObserver::calendarIncidenceDeleted(const Incidence::Ptr &incidence, const Calendar *calendar) { Q_UNUSED(incidence); Q_UNUSED(calendar); } void Calendar::CalendarObserver::calendarIncidenceAdditionCanceled(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Calendar::registerObserver(CalendarObserver *observer) { if (!observer) { return; } if (!d->mObservers.contains(observer)) { d->mObservers.append(observer); } else { d->mNewObserver = true; } } void Calendar::unregisterObserver(CalendarObserver *observer) { if (!observer) { return; } else { d->mObservers.removeAll(observer); } } bool Calendar::isSaving() const { return false; } void Calendar::setModified(bool modified) { if (modified != d->mModified || d->mNewObserver) { d->mNewObserver = false; for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarModified(modified, this); } d->mModified = modified; } } bool Calendar::isModified() const { return d->mModified; } bool Calendar::save() { return true; } bool Calendar::reload() { return true; } void Calendar::incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) { Incidence::Ptr inc = incidence(uid, recurrenceId); if (!inc) { return; } inc->setLastModified(QDateTime::currentDateTimeUtc()); // we should probably update the revision number here, // or internally in the Event itself when certain things change. // need to verify with ical documentation. notifyIncidenceChanged(inc); setModified(true); } void Calendar::doSetTimeZone(const QTimeZone &timeZone) { Q_UNUSED(timeZone); } void Calendar::notifyIncidenceAdded(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceAdded(incidence); } for (auto role : {IncidenceBase::RoleStartTimeZone, IncidenceBase::RoleEndTimeZone}) { const auto dt = incidence->dateTime(role); if (dt.isValid() && dt.timeZone() != QTimeZone::utc()) { if (!d->mTimeZones.contains(dt.timeZone())) { d->mTimeZones.push_back(dt.timeZone()); } } } } void Calendar::notifyIncidenceChanged(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceChanged(incidence); } } void Calendar::notifyIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceAboutToBeDeleted(incidence); } } void Calendar::notifyIncidenceDeleted(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceDeleted(incidence, this); } } void Calendar::notifyIncidenceAdditionCanceled(const Incidence::Ptr &incidence) { if (!incidence) { return; } if (!d->mObserversEnabled) { return; } for (CalendarObserver *observer : qAsConst(d->mObservers)) { observer->calendarIncidenceAdditionCanceled(incidence); } } void Calendar::customPropertyUpdated() { setModified(true); } void Calendar::setProductId(const QString &id) { d->mProductId = id; } QString Calendar::productId() const { return d->mProductId; } /** static */ Incidence::List Calendar::mergeIncidenceList(const Event::List &events, const Todo::List &todos, const Journal::List &journals) { Incidence::List incidences; incidences.reserve(events.count() + todos.count() + journals.count()); int i, end; for (i = 0, end = events.count(); i < end; ++i) { incidences.append(events[i]); } for (i = 0, end = todos.count(); i < end; ++i) { incidences.append(todos[i]); } for (i = 0, end = journals.count(); i < end; ++i) { incidences.append(journals[i]); } return incidences; } bool Calendar::beginChange(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); return true; } bool Calendar::endChange(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); return true; } void Calendar::setObserversEnabled(bool enabled) { d->mObserversEnabled = enabled; } void Calendar::appendAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const { QDateTime preTime = from.addSecs(-1); Alarm::List alarmlist = incidence->alarms(); for (int i = 0, iend = alarmlist.count(); i < iend; ++i) { if (alarmlist[i]->enabled()) { QDateTime dt = alarmlist[i]->nextRepetition(preTime); if (dt.isValid() && dt <= to) { qWarning() << incidence->summary() << "':" << dt.toString(); alarms.append(alarmlist[i]); } } } } void Calendar::appendRecurringAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const { QDateTime dt; bool endOffsetValid = false; Duration endOffset(0); Duration period(from, to); Alarm::List alarmlist = incidence->alarms(); for (int i = 0, iend = alarmlist.count(); i < iend; ++i) { Alarm::Ptr a = alarmlist[i]; if (a->enabled()) { if (a->hasTime()) { // The alarm time is defined as an absolute date/time dt = a->nextRepetition(from.addSecs(-1)); if (!dt.isValid() || dt > to) { continue; } } else { // Alarm time is defined by an offset from the event start or end time. // Find the offset from the event start time, which is also used as the // offset from the recurrence time. Duration offset(0); if (a->hasStartOffset()) { offset = a->startOffset(); } else if (a->hasEndOffset()) { offset = a->endOffset(); if (!endOffsetValid) { endOffset = Duration(incidence->dtStart(), incidence->dateTime(Incidence::RoleAlarmEndOffset)); endOffsetValid = true; } } // Find the incidence's earliest alarm QDateTime alarmStart = offset.end(a->hasEndOffset() ? incidence->dateTime(Incidence::RoleAlarmEndOffset) : incidence->dtStart()); if (alarmStart > to) { continue; } QDateTime baseStart = incidence->dtStart(); if (from > alarmStart) { alarmStart = from; // don't look earlier than the earliest alarm baseStart = (-offset).end((-endOffset).end(alarmStart)); } // Adjust the 'alarmStart' date/time and find the next recurrence at or after it. // Treat the two offsets separately in case one is daily and the other not. dt = incidence->recurrence()->getNextDateTime(baseStart.addSecs(-1)); if (!dt.isValid() || (dt = endOffset.end(offset.end(dt))) > to) { // adjust 'dt' to get the alarm time // The next recurrence is too late. if (!a->repeatCount()) { continue; } // The alarm has repetitions, so check whether repetitions of previous // recurrences fall within the time period. bool found = false; Duration alarmDuration = a->duration(); for (QDateTime base = baseStart; (dt = incidence->recurrence()->getPreviousDateTime(base)).isValid(); base = dt) { if (a->duration().end(dt) < base) { break; // this recurrence's last repetition is too early, so give up } // The last repetition of this recurrence is at or after 'alarmStart' time. // Check if a repetition occurs between 'alarmStart' and 'to'. int snooze = a->snoozeTime().value(); // in seconds or days if (a->snoozeTime().isDaily()) { Duration toFromDuration(dt, base); int toFrom = toFromDuration.asDays(); if (a->snoozeTime().end(from) <= to || (toFromDuration.isDaily() && toFrom % snooze == 0) || (toFrom / snooze + 1) * snooze <= toFrom + period.asDays()) { found = true; #ifndef NDEBUG // for debug output dt = offset.end(dt).addDays(((toFrom - 1) / snooze + 1) * snooze); #endif break; } } else { int toFrom = dt.secsTo(base); if (period.asSeconds() >= snooze || toFrom % snooze == 0 || (toFrom / snooze + 1) * snooze <= toFrom + period.asSeconds()) { found = true; #ifndef NDEBUG // for debug output dt = offset.end(dt).addSecs(((toFrom - 1) / snooze + 1) * snooze); #endif break; } } } if (!found) { continue; } } } qWarning() << incidence->summary() << "':" << dt.toString(); alarms.append(a); } } } void Calendar::startBatchAdding() { d->batchAddingInProgress = true; } void Calendar::endBatchAdding() { d->batchAddingInProgress = false; } bool Calendar::batchAdding() const { return d->batchAddingInProgress; } void Calendar::setDeletionTracking(bool enable) { d->mDeletionTracking = enable; } bool Calendar::deletionTracking() const { return d->mDeletionTracking; } Alarm::List Calendar::alarmsTo(const QDateTime &to) const { return alarms(QDateTime(QDate(1900, 1, 1), QTime(0, 0, 0)), to); } void Calendar::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } QString Calendar::id() const { return d->mId; } void Calendar::setId(const QString &id) { if (d->mId != id) { d->mId = id; Q_EMIT idChanged(); } } QString Calendar::name() const { return d->mName; } void Calendar::setName(const QString &name) { if (d->mName != name) { d->mName = name; Q_EMIT nameChanged(); } } QIcon Calendar::icon() const { return d->mIcon; } void Calendar::setIcon(const QIcon &icon) { d->mIcon = icon; Q_EMIT iconChanged(); } AccessMode Calendar::accessMode() const { return d->mAccessMode; } void Calendar::setAccessMode(const AccessMode mode) { if (d->mAccessMode != mode) { d->mAccessMode = mode; Q_EMIT accessModeChanged(); } } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calendar.h000066400000000000000000001372161523260663500260560ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText 2001, 2003, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Calendar class. @author Preston Brown \ @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ /* TODO: KDE5: This API needs serious cleaning up: - Most (all) methods aren't async ( deleteIncidence(), addIncidence(), load(), save(), ... ) so it's not very easy to make a derived class that loads from akonadi. - It has too many methods. Why do we need fooEvent()/fooJournal()/fooTodo() when fooIncidence() should be enough. */ #ifndef KCALCORE_CALENDAR_H #define KCALCORE_CALENDAR_H #include "customproperties.h" #include "event.h" #include "incidence.h" #include "journal.h" #include "todo.h" #include #include #include #include /** Namespace for all KCalendarCore types. */ namespace KCalendarCore { class CalFilter; class Person; class ICalFormat; /** Calendar Incidence sort directions. */ enum SortDirection { SortDirectionAscending, /**< Sort in ascending order (first to last) */ SortDirectionDescending, /**< Sort in descending order (last to first) */ }; /** Calendar Event sort keys. */ enum EventSortField { EventSortUnsorted, /**< Do not sort Events */ EventSortStartDate, /**< Sort Events chronologically, by start date */ EventSortEndDate, /**< Sort Events chronologically, by end date */ EventSortSummary, /**< Sort Events alphabetically, by summary */ }; /** Calendar Todo sort keys. */ enum TodoSortField { TodoSortUnsorted, /**< Do not sort Todos */ TodoSortStartDate, /**< Sort Todos chronologically, by start date */ TodoSortDueDate, /**< Sort Todos chronologically, by due date */ TodoSortPriority, /**< Sort Todos by priority */ TodoSortPercentComplete, /**< Sort Todos by percentage completed */ TodoSortSummary, /**< Sort Todos alphabetically, by summary */ TodoSortCreated, /**< Sort Todos chronologically, by creation date */ TodoSortCategories, /**< Sort Todos by categories (tags) @since 5.83 */ }; /** Calendar Journal sort keys. */ enum JournalSortField { JournalSortUnsorted, /**< Do not sort Journals */ JournalSortDate, /**< Sort Journals chronologically by date */ JournalSortSummary, /**< Sort Journals alphabetically, by summary */ }; /** The calendar's access mode, i.e. whether it can be written to or is read only. @since 5.85 */ enum AccessMode { ReadOnly, ReadWrite, }; /** @brief Represents the main calendar class. A calendar contains information like incidences (events, to-dos, journals), alarms, time zones, and other useful information. This is an abstract base class defining the interface to a calendar. It is implemented by subclasses like MemoryCalendar, which use different methods to store and access the data. Ownership of Incidences: Incidence ownership is handled by the following policy: as soon as an incidence (or any other subclass of IncidenceBase) is added to the Calendar by an add...() method it is owned by the Calendar object. The Calendar takes care of deleting the incidence using the delete...() methods. All Incidences returned by the query functions are returned as pointers so that changes to the returned Incidences are immediately visible in the Calendar. Do Not attempt to 'delete' any Incidence object you get from Calendar -- use the delete...() methods. */ class Q_CORE_EXPORT Calendar : public QObject , public CustomProperties , public IncidenceBase::IncidenceObserver { Q_OBJECT Q_PROPERTY(QString productId READ productId WRITE setProductId) // clazy:exclude=qproperty-without-notify Q_PROPERTY(KCalendarCore::Person owner READ owner WRITE setOwner NOTIFY ownerChanged) Q_PROPERTY(QString id READ id WRITE setId NOTIFY idChanged) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QIcon icon READ icon WRITE setIcon NOTIFY iconChanged) Q_PROPERTY(AccessMode accessMode READ accessMode WRITE setAccessMode NOTIFY accessModeChanged) public: /** A shared pointer to a Calendar */ typedef QSharedPointer Ptr; /** Constructs a calendar with a specified time zone @p timeZone. The time zone is used as the default for creating or modifying incidences in the Calendar. The time zone does not alter existing incidences. @param timeZone time specification */ explicit Calendar(const QTimeZone &timeZone); /** Construct Calendar object using a time zone ID. The time zone ID is used as the default for creating or modifying incidences in the Calendar. The time zone does not alter existing incidences. @param timeZoneId is a string containing a time zone ID, which is assumed to be valid. If no time zone is found, the viewing time specification is set to local time zone. @e Example: "Europe/Berlin" */ explicit Calendar(const QByteArray &timeZoneId); /** Destroys the calendar. */ ~Calendar() override; /** Sets the calendar Product ID to @p id. @param id is a string containing the Product ID. @see productId() const */ void setProductId(const QString &id); /** Returns the calendar's Product ID. @see setProductId() */ Q_REQUIRED_RESULT QString productId() const; /** Sets the owner of the calendar to @p owner. @param owner is a Person object. Must be a non-null pointer. @see owner() */ void setOwner(const Person &owner); /** Returns the owner of the calendar. @return the owner Person object. @see setOwner() */ Q_REQUIRED_RESULT Person owner() const; /** Sets the default time specification zone used for creating or modifying incidences in the Calendar. @param timeZone The time zone */ void setTimeZone(const QTimeZone &timeZone); /** Get the time zone used for creating or modifying incidences in the Calendar. @return time specification */ Q_REQUIRED_RESULT QTimeZone timeZone() const; /** Sets the time zone ID used for creating or modifying incidences in the Calendar. This method has no effect on existing incidences. @param timeZoneId is a string containing a time zone ID, which is assumed to be valid. The time zone ID is used to set the time zone for viewing Incidence date/times. If no time zone is found, the viewing time specification is set to local time zone. @e Example: "Europe/Berlin" @see setTimeZone() */ void setTimeZoneId(const QByteArray &timeZoneId); /** Returns the time zone ID used for creating or modifying incidences in the calendar. @return the string containing the time zone ID, or empty string if the creation/modification time specification is not a time zone. */ Q_REQUIRED_RESULT QByteArray timeZoneId() const; /** Shifts the times of all incidences so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual incidence time zone. For example, shifting an incidence whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the incidence start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Sets if the calendar has been modified. @param modified is true if the calendar has been modified since open or last save. @see isModified() */ void setModified(bool modified); /** Determine the calendar's modification status. 确定日历的修改状æ€�。 @return true if the calendar has been modified since open or last save. @see setModified() */ Q_REQUIRED_RESULT bool isModified() const; /** * A unique identifier for this calendar. * @since 5.85 * @see setId() */ QString id() const; /** * set a unique identifier for this calendar. * 设置此日历的唯一标识符。 * @since 5.85 * @see id() */ void setId(const QString &id); /** * The user-visible name for this calendar. * 此日历的用户å�¯è§�å��称。 * @since 5.85 * @see setName() */ QString name() const; /** * Set the user-visible name for this calendar. * @since 5.85 * @see name() */ void setName(const QString &name); /** * This calendar's icon. * @since 5.85 * @see setIconName() */ QIcon icon() const; /** * Set this calendar's icon. * @since 5.85 * @see icon() */ void setIcon(const QIcon &icon); /** * This calendar's AccessMode, i.e. whether it is writable or read-only. * 此日历的访问模å¼�,å�³å®ƒæ˜¯å�¯å†™çš„还是å�ªè¯»çš„。 * Defaults to ReadWrite. * @since 5.85 * @see setAccessMode() */ AccessMode accessMode() const; /** * Set this calendar's AccessMode, i.e. whether it is writable or read-only. * 设置此日历的访问模å¼�,å�³å®ƒæ˜¯å�¯å†™çš„还是å�ªè¯»çš„。 * @since 5.85 * @see accessMode() */ void setAccessMode(const AccessMode mode); /** Clears out the current calendar, freeing all used memory etc. 清除当å‰�日历,释放所有已用内存等。 */ virtual void close() = 0; /** Syncs changes in memory to persistent storage. 将内存中的更改å�Œæ­¥åˆ°æ°¸ä¹…性存储。 @return true if the save was successful; false otherwise. Base implementation returns true. */ virtual bool save(); /** Loads the calendar contents from storage. This requires that the calendar has been previously loaded (initialized). @return true if the reload was successful; otherwise false. Base implementation returns true. */ virtual bool reload(); /** Determine if the calendar is currently being saved. @return true if the calendar is currently being saved; false otherwise. */ virtual bool isSaving() const; /** Returns a list of all categories used by Incidences in this Calendar. @return a QStringList containing all the categories. */ Q_REQUIRED_RESULT QStringList categories() const; // Incidence Specific Methods // /** Call this to tell the calendar that you're adding a batch of incidences. So it doesn't, for example, ask the destination for each incidence. @see endBatchAdding() */ virtual void startBatchAdding(); /** Tells the Calendar that you stopped adding a batch of incidences. @see startBatchAdding() */ virtual void endBatchAdding(); /** @return true if batch adding is in progress */ Q_REQUIRED_RESULT bool batchAdding() const; /** Inserts an Incidence into the calendar. 将事件æ�’入日历。 @param incidence is a pointer to the Incidence to insert. @return true if the Incidence was successfully inserted; false otherwise. @see deleteIncidence() */ virtual bool addIncidence(const Incidence::Ptr &incidence); /** Removes an Incidence from the calendar. @param incidence is a pointer to the Incidence to remove. @return true if the Incidence was successfully removed; false otherwise. @see addIncidence() */ virtual bool deleteIncidence(const Incidence::Ptr &incidence); /** Returns a filtered list of all Incidences for this Calendar. 返回此日历的所有事件的筛选列表。 @return the list of all filtered Incidences. */ virtual Incidence::List incidences() const; /** Returns a filtered list of all Incidences which occur on the given date. 返回给定日期å�‘生的所有事件的筛选列表。 @param date request filtered Incidence list for this QDate only. @return the list of filtered Incidences occurring on the specified date. */ virtual Incidence::List incidences(const QDate &date) const; /** Returns an unfiltered list of all Incidences for this Calendar. 返回此日历的所有事件的未筛选列表。 @return the list of all unfiltered Incidences. */ virtual Incidence::List rawIncidences() const; /** Returns an unfiltered list of all exceptions of this recurring incidence. 所有未筛选异常的é‡�å¤�å�‘生率列表。 @param incidence incidence to check @return the list of all unfiltered exceptions. */ virtual Incidence::List instances(const Incidence::Ptr &incidence) const; // Notebook Specific Methods // /** Clears notebook associations from hash-tables for incidences. Called when in-memory content of the calendar is cleared. */ virtual void clearNotebookAssociations(); /** Associate notebook for an incidence. @param incidence incidence @param notebook notebook uid @return true if the operation was successful; false otherwise. */ virtual bool setNotebook(const Incidence::Ptr &incidence, const QString ¬ebook); /** Get incidence's notebook. @param incidence incidence @return notebook uid */ virtual QString notebook(const Incidence::Ptr &incidence) const; /** Get incidence's notebook. @param uid is a unique identifier string @return notebook uid */ virtual QString notebook(const QString &uid) const; /** List all uids of notebooks currently in the memory. @return list of uids of notebooks */ virtual QStringList notebooks() const; /** Check if calendar knows about the given notebook. This means that it will be saved by one of the attached storages. @param notebook notebook uid @return true if calendar has valid notebook */ Q_REQUIRED_RESULT bool hasValidNotebook(const QString ¬ebook) const; /** Add notebook information into calendar. Is usually called by storages only. @param notebook notebook uid @param isVisible notebook visibility @return true if operation succeeded @see isVisible() */ Q_REQUIRED_RESULT bool addNotebook(const QString ¬ebook, bool isVisible); /** Update notebook information in calendar. Is usually called by storages only. @param notebook notebook uid @param isVisible notebook visibility @return true if operation succeeded @see isVisible() */ Q_REQUIRED_RESULT bool updateNotebook(const QString ¬ebook, bool isVisible); /** Delete notebook information from calendar. Is usually called by storages only. @param notebook notebook uid @return true if operation succeeded @see isVisible() */ Q_REQUIRED_RESULT bool deleteNotebook(const QString ¬ebook); /** set DefaultNotebook information to calendar. @param notebook notebook uid @return true if operation was successful; false otherwise. */ Q_REQUIRED_RESULT bool setDefaultNotebook(const QString ¬ebook); /** Get uid of default notebook. @return notebook uid */ Q_REQUIRED_RESULT QString defaultNotebook() const; /** Check if incidence is visible. @param incidence is a pointer to the Incidence to check for visibility. @return true if incidence is visible, false otherwise */ Q_REQUIRED_RESULT bool isVisible(const Incidence::Ptr &incidence) const; /** Check if notebook is visible. @param notebook notebook uid. @return true if notebook is visible, false otherwise */ Q_REQUIRED_RESULT bool isVisible(const QString ¬ebook) const; /** List all notebook incidences in the memory. @param notebook is the notebook uid. @return a list of incidences for the notebook. */ virtual Incidence::List incidences(const QString ¬ebook) const; /** List all possible duplicate incidences. @param incidence is the incidence to check. @return a list of duplicate incidences. */ virtual Incidence::List duplicates(const Incidence::Ptr &incidence); /** Returns the Incidence associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceid of incidence, default is null @return a pointer to the Incidence. A null pointer is returned if no such Incidence exists. */ Incidence::Ptr incidence(const QString &uid, const QDateTime &recurrenceId = {}) const; /** Returns the deleted Incidence associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceid of incidence, default is null @return a pointer to the Incidence. A null pointer is returned if no such Incidence exists. */ Incidence::Ptr deleted(const QString &uid, const QDateTime &recurrenceId = {}) const; /** Delete all incidences that are instances of recurring incidence @p incidence. @param incidence is a pointer to a deleted Incidence @return true if delete was successful; false otherwise */ virtual bool deleteIncidenceInstances(const Incidence::Ptr &incidence) = 0; /** Returns the Incidence associated with the given scheduling identifier. @param sid is a unique scheduling identifier string. @return a pointer to the Incidence. A null pointer is returned if no such Incidence exists. */ virtual Incidence::Ptr incidenceFromSchedulingID(const QString &sid) const; /** Searches all events and todos for an incidence with this scheduling identifier. Returns a list of matching results. @param sid is a unique scheduling identifier string. */ virtual Incidence::List incidencesFromSchedulingID(const QString &sid) const; /** Create a merged list of Events, Todos, and Journals. 创建事件ã€�待办事项和日志的å�ˆå¹¶åˆ—表。 @param events is an Event list to merge. @param todos is a Todo list to merge. @param journals is a Journal list to merge. @return a list of merged Incidences. */ static Incidence::List mergeIncidenceList(const Event::List &events, const Todo::List &todos, const Journal::List &journals); /** Flag that a change to a Calendar Incidence is starting. @param incidence is a pointer to the Incidence that will be changing. */ virtual bool beginChange(const Incidence::Ptr &incidence); /** Flag that a change to a Calendar Incidence has completed. @param incidence is a pointer to the Incidence that was changed. */ virtual bool endChange(const Incidence::Ptr &incidence); /** Creates an exception for an occurrence from a recurring Incidence. The returned exception is not automatically inserted into the calendar. @param incidence is a pointer to a recurring Incidence. @param recurrenceId specifies the specific occurrence for which the exception applies. @param thisAndFuture specifies if the exception applies only this specific occcurrence or also to all future occurrences. @return a pointer to a new exception incidence with @param recurrenceId set. @since 4.11 */ static Incidence::Ptr createException(const Incidence::Ptr &incidence, const QDateTime &recurrenceId, bool thisAndFuture = false); // Event Specific Methods // /** Inserts an Event into the calendar. @param event is a pointer to the Event to insert. @return true if the Event was successfully inserted; false otherwise. @see deleteEvent() */ virtual bool addEvent(const Event::Ptr &event) = 0; /** Removes an Event from the calendar. @param event is a pointer to the Event to remove. @return true if the Event was successfully remove; false otherwise. @see addEvent() */ virtual bool deleteEvent(const Event::Ptr &event) = 0; /** Delete all events that are instances of recurring event @p event. @param event is a pointer to a deleted Event @return true if delete was successful; false otherwise */ virtual bool deleteEventInstances(const Event::Ptr &event) = 0; /** Sort a list of Events. @param eventList is a pointer to a list of Events. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return a list of Events sorted as specified. */ static Event::List sortEvents(const Event::List &eventList, EventSortField sortField, SortDirection sortDirection); /** Returns a sorted, filtered list of all Events for this Calendar. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all filtered Events sorted as specified. */ virtual Event::List events(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a filtered list of all Events which occur on the given timestamp. @param dt request filtered Event list for this QDateTime only. @return the list of filtered Events occurring on the specified timestamp. */ Q_REQUIRED_RESULT Event::List events(const QDateTime &dt) const; /** Returns a filtered list of all Events occurring within a date range. @param start is the starting date. @param end is the ending date. @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Events which are completely included within the date range are returned. @return the list of filtered Events occurring within the specified date range. */ Q_REQUIRED_RESULT Event::List events(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const; /** Returns a sorted, filtered list of all Events which occur on the given date. The Events are sorted according to @a sortField and @a sortDirection. @param date request filtered Event list for this QDate only. @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of sorted, filtered Events occurring on @a date. */ Q_REQUIRED_RESULT Event::List events(const QDate &date, const QTimeZone &timeZone = {}, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a sorted, unfiltered list of all Events for this Calendar. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered Events sorted as specified. */ virtual Event::List rawEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns an unfiltered list of all Events which occur on the given timestamp. @param dt request unfiltered Event list for this QDateTime only. @return the list of unfiltered Events occurring on the specified timestamp. */ virtual Event::List rawEventsForDate(const QDateTime &dt) const = 0; /** Returns an unfiltered list of all Events occurring within a date range. @param start is the starting date @param end is the ending date @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Events which are completely included within the date range are returned. @return the list of unfiltered Events occurring within the specified date range. */ virtual Event::List rawEvents(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const = 0; /** Returns a sorted, unfiltered list of all Events which occur on the given date. The Events are sorted according to @a sortField and @a sortDirection. @param date request unfiltered Event list for this QDate only @param timeZone time zone to interpret @p date, or the calendar's default time zone if none is specified @param sortField specifies the EventSortField @param sortDirection specifies the SortDirection @return the list of sorted, unfiltered Events occurring on @p date */ virtual Event::List rawEventsForDate(const QDate &date, const QTimeZone &timeZone = {}, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns the Event associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of event, default is null @return a pointer to the Event. A null pointer is returned if no such Event exists. */ virtual Event::Ptr event(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns the deleted Event associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of event, default is null @return a pointer to the deleted Event. A null pointer is returned if no such deleted Event exists, or if deletion tracking is disabled. @see deletionTracking() */ virtual Event::Ptr deletedEvent(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns a sorted, unfiltered list of all deleted Events for this Calendar. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered deleted Events sorted as specified. An empty list is returned if deletion tracking is disabled. @see deletionTracking() */ virtual Event::List deletedEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns a sorted, unfiltered list of all possible instances for this recurring Event. @param event event to check for. Caller guarantees it's of type Event. @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered event instances sorted as specified. */ virtual Event::List eventInstances(const Incidence::Ptr &event, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; // Todo Specific Methods // /** Inserts a Todo into the calendar. @param todo is a pointer to the Todo to insert. @return true if the Todo was successfully inserted; false otherwise. @see deleteTodo() */ virtual bool addTodo(const Todo::Ptr &todo) = 0; /** Removes a Todo from the calendar. @param todo is a pointer to the Todo to remove. @return true if the Todo was successfully removed; false otherwise. @see addTodo() */ virtual bool deleteTodo(const Todo::Ptr &todo) = 0; /** Delete all to-dos that are instances of recurring to-do @p todo. @param todo is a pointer to a deleted Todo @return true if delete was successful; false otherwise */ virtual bool deleteTodoInstances(const Todo::Ptr &todo) = 0; /** Sort a list of Todos. @param todoList is a pointer to a list of Todos. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return a list of Todos sorted as specified. */ static Todo::List sortTodos(const Todo::List &todoList, TodoSortField sortField, SortDirection sortDirection); /** Returns a sorted, filtered list of all Todos for this Calendar. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all filtered Todos sorted as specified. */ virtual Todo::List todos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a filtered list of all Todos which are due on the specified date. @param date request filtered Todos due on this QDate. @return the list of filtered Todos due on the specified date. */ virtual Todo::List todos(const QDate &date) const; /** Returns a filtered list of all Todos occurring within a date range. @param start is the starting date @param end is the ending date @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Todos which are completely included within the date range are returned. @return the list of filtered Todos occurring within the specified date range. */ virtual Todo::List todos(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const; /** Returns a sorted, unfiltered list of all Todos for this Calendar. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered Todos sorted as specified. */ virtual Todo::List rawTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns an unfiltered list of all Todos which due on the specified date. @param date request unfiltered Todos due on this QDate. @return the list of unfiltered Todos due on the specified date. */ virtual Todo::List rawTodosForDate(const QDate &date) const = 0; /** Returns an unfiltered list of all Todos occurring within a date range. @param start is the starting date @param end is the ending date @param timeZone time zone to interpret @p start and @p end, or the calendar's default time zone if none is specified @param inclusive if true only Todos which are completely included within the date range are returned. @return the list of unfiltered Todos occurring within the specified date range. */ virtual Todo::List rawTodos(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const = 0; /** Returns the Todo associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of todo, default is null @return a pointer to the Todo. A null pointer is returned if no such Todo exists. */ virtual Todo::Ptr todo(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns the deleted Todo associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of todo, default is null @return a pointer to the deleted Todo. A null pointer is returned if no such deleted Todo exists or if deletion tracking is disabled. @see deletionTracking() */ virtual Todo::Ptr deletedTodo(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns a sorted, unfiltered list of all deleted Todos for this Calendar. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered deleted Todos sorted as specified. An empty list is returned if deletion tracking is disabled. @see deletionTracking() */ virtual Todo::List deletedTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns a sorted, unfiltered list of all possible instances for this recurring Todo. @param todo todo to check for. Caller guarantees it's of type Todo. @param sortField specifies the TodoSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered todo instances sorted as specified. */ virtual Todo::List todoInstances(const Incidence::Ptr &todo, TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; // Journal Specific Methods // /** Inserts a Journal into the calendar. @param journal is a pointer to the Journal to insert. @return true if the Journal was successfully inserted; false otherwise. @see deleteJournal() */ virtual bool addJournal(const Journal::Ptr &journal) = 0; /** Removes a Journal from the calendar. @param journal is a pointer to the Journal to remove. @return true if the Journal was successfully removed; false otherwise. @see addJournal() */ virtual bool deleteJournal(const Journal::Ptr &journal) = 0; /** Delete all journals that are instances of recurring journal @p journal. @param journal is a pointer to a deleted Journal @return true if delete was successful; false otherwise */ virtual bool deleteJournalInstances(const Journal::Ptr &journal) = 0; /** Sort a list of Journals. @param journalList is a pointer to a list of Journals. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return a list of Journals sorted as specified. */ static Journal::List sortJournals(const Journal::List &journalList, JournalSortField sortField, SortDirection sortDirection); /** Returns a sorted, filtered list of all Journals for this Calendar. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all filtered Journals sorted as specified. */ virtual Journal::List journals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const; /** Returns a filtered list of all Journals for on the specified date. @param date request filtered Journals for this QDate only. @return the list of filtered Journals for the specified date. */ virtual Journal::List journals(const QDate &date) const; /** Returns a sorted, unfiltered list of all Journals for this Calendar. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered Journals sorted as specified. */ virtual Journal::List rawJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns an unfiltered list of all Journals for on the specified date. @param date request unfiltered Journals for this QDate only. @return the list of unfiltered Journals for the specified date. */ virtual Journal::List rawJournalsForDate(const QDate &date) const = 0; /** Returns the Journal associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of journal, default is null @return a pointer to the Journal. A null pointer is returned if no such Journal exists. */ virtual Journal::Ptr journal(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns the deleted Journal associated with the given unique identifier. @param uid is a unique identifier string. @param recurrenceId is possible recurrenceId of journal, default is null @return a pointer to the deleted Journal. A null pointer is returned if no such deleted Journal exists or if deletion tracking is disabled. @see deletionTracking() */ virtual Journal::Ptr deletedJournal(const QString &uid, const QDateTime &recurrenceId = {}) const = 0; /** Returns a sorted, unfiltered list of all deleted Journals for this Calendar. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered deleted Journals sorted as specified. An empty list is returned if deletion tracking is disabled. @see deletionTracking() */ virtual Journal::List deletedJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; /** Returns a sorted, unfiltered list of all instances for this recurring Journal. @param journal journal to check for. Caller guarantees it's of type Journal. @param sortField specifies the JournalSortField. @param sortDirection specifies the SortDirection. @return the list of all unfiltered journal instances sorted as specified. */ virtual Journal::List journalInstances(const Incidence::Ptr &journal, JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const = 0; // Relations Specific Methods // /** Setup Relations for an Incidence. @param incidence is a pointer to the Incidence to have a Relation setup. */ virtual void setupRelations(const Incidence::Ptr &incidence); /** Removes all Relations from an Incidence. @param incidence is a pointer to the Incidence to have a Relation removed. */ virtual void removeRelations(const Incidence::Ptr &incidence); /** Checks if @p ancestor is an ancestor of @p incidence @param ancestor is the incidence we are testing to be an ancestor. @param incidence is the incidence we are testing to be descended from @p ancestor. */ bool isAncestorOf(const Incidence::Ptr &ancestor, const Incidence::Ptr &incidence) const; /** Returns a list of incidences that have a relation of RELTYPE parent to incidence @p uid. @param uid The parent identifier whose children we want to obtain. */ Incidence::List relations(const QString &uid) const; // Filter Specific Methods // /** Sets the calendar filter. @param filter a pointer to a CalFilter object which will be used to filter Calendar Incidences. The Calendar takes ownership of @p filter. @see filter() */ void setFilter(CalFilter *filter); /** Returns the calendar filter. @return a pointer to the calendar CalFilter. A null pointer is returned if no such CalFilter exists. @see setFilter() */ CalFilter *filter() const; // Alarm Specific Methods // /** Returns a list of Alarms within a time range for this Calendar. @param from is the starting timestamp. @param to is the ending timestamp. @param excludeBlockedAlarms if true, alarms belonging to blocked collections aren't returned. @return the list of Alarms for the for the specified time range. */ virtual Alarm::List alarms(const QDateTime &from, const QDateTime &to, bool excludeBlockedAlarms = false) const = 0; /** Return a list of Alarms that occur before the specified timestamp. @param to is the ending timestamp. @return the list of Alarms occurring before the specified QDateTime. @since 5.77 */ Q_REQUIRED_RESULT Alarm::List alarmsTo(const QDateTime &to) const; // Observer Specific Methods // /** @class CalendarObserver The CalendarObserver class. */ class Q_CORE_EXPORT CalendarObserver // krazy:exclude=dpointer { public: /** Destructor. */ virtual ~CalendarObserver(); /** Notify the Observer that a Calendar has been modified. @param modified set if the calendar has been modified. @param calendar is a pointer to the Calendar object that is being observed. */ virtual void calendarModified(bool modified, Calendar *calendar); /** Notify the Observer that an Incidence has been inserted. @param incidence is a pointer to the Incidence that was inserted. */ virtual void calendarIncidenceAdded(const Incidence::Ptr &incidence); /** Notify the Observer that an Incidence has been modified. @param incidence is a pointer to the Incidence that was modified. */ virtual void calendarIncidenceChanged(const Incidence::Ptr &incidence); /** Notify the Observer that an Incidence will be removed. @param incidence is a pointer to the Incidence that will be removed. */ virtual void calendarIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence); /** Notify the Observer that an Incidence has been removed. @param incidence is a pointer to the Incidence that was removed. @param calendar is a pointer to the calendar where the incidence was part of, because the incidence was deleted, there is now way to determine the calendar @since 4.83.0 */ virtual void calendarIncidenceDeleted(const Incidence::Ptr &incidence, const Calendar *calendar); /** Notify the Observer that an addition of Incidence has been canceled. @param incidence is a pointer to the Incidence that was removed. */ virtual void calendarIncidenceAdditionCanceled(const Incidence::Ptr &incidence); }; /** Registers an Observer for this Calendar. @param observer is a pointer to an Observer object that will be watching this Calendar. @see unregisterObserver() */ void registerObserver(CalendarObserver *observer); /** Unregisters an Observer for this Calendar. @param observer is a pointer to an Observer object that has been watching this Calendar. @see registerObserver() */ void unregisterObserver(CalendarObserver *observer); using QObject::event; // prevent warning about hidden virtual method protected: /** The Observer interface. So far not implemented. @param uid is the UID for the Incidence that has been updated. @param recurrenceId is possible recurrenceid of incidence. */ void incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) override; /** Let Calendar subclasses set the time specification. @param timeZone is the time specification (time zone, etc.) for viewing Incidence dates.\n */ virtual void doSetTimeZone(const QTimeZone &timeZone); /** Let Calendar subclasses notify that they inserted an Incidence. @param incidence is a pointer to the Incidence object that was inserted. */ void notifyIncidenceAdded(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they modified an Incidence. @param incidence is a pointer to the Incidence object that was modified. */ void notifyIncidenceChanged(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they will remove an Incidence. @param incidence is a pointer to the Incidence object that will be removed. */ void notifyIncidenceAboutToBeDeleted(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they removed an Incidence. @param incidence is a pointer to the Incidence object that has been removed. */ void notifyIncidenceDeleted(const Incidence::Ptr &incidence); /** Let Calendar subclasses notify that they canceled addition of an Incidence. @param incidence is a pointer to the Incidence object that addition as canceled. */ void notifyIncidenceAdditionCanceled(const Incidence::Ptr &incidence); /** @copydoc CustomProperties::customPropertyUpdated() */ void customPropertyUpdated() override; /** Let Calendar subclasses notify that they enabled an Observer. @param enabled if true tells the calendar that a subclass has enabled an Observer. */ void setObserversEnabled(bool enabled); /** Appends alarms of incidence in interval to list of alarms. @param alarms is a List of Alarms to be appended onto. @param incidence is a pointer to an Incidence containing the Alarm to be appended. @param from is the lower range of the next Alarm repetition. @param to is the upper range of the next Alarm repetition. */ void appendAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const; /** Appends alarms of recurring events in interval to list of alarms. @param alarms is a List of Alarms to be appended onto. @param incidence is a pointer to an Incidence containing the Alarm to be appended. @param from is the lower range of the next Alarm repetition. @param to is the upper range of the next Alarm repetition. */ void appendRecurringAlarms(Alarm::List &alarms, const Incidence::Ptr &incidence, const QDateTime &from, const QDateTime &to) const; /** Enables or disabled deletion tracking. Default is true. @see deletedEvent() @see deletedTodo() @see deletedJournal() @since 4.11 */ void setDeletionTracking(bool enable); /** Returns if deletion tracking is enabled. Default is true. @since 4.11 */ bool deletionTracking() const; /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); Q_SIGNALS: /** Emitted when setFilter() is called. @since 4.11 */ void filterChanged(); /** * Emitted when the id changes. * @since 5.85 * @see id() */ void idChanged(); /** * Emitted when the name changes. * @since 5.85 * @see name() */ void nameChanged(); /** * Emitted when the icon name changes. * @since 5.85 * @see icon() */ void iconChanged(); /** * Emitted when the AccessMode changes. * @since 5.85 * @see accessMode() */ void accessModeChanged(); /** * Emitted when the owner changes. * @since 5.85 * @see owner() */ void ownerChanged(); private: friend class ICalFormat; //@cond PRIVATE class Private; Private *const d; //@endcond Q_DISABLE_COPY(Calendar) }; } // namespace KCalendarCore Q_DECLARE_METATYPE(KCalendarCore::Calendar::Ptr) #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calendar_p.h000066400000000000000000000046131523260663500263670ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2000-2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_CALENDAR_P_H #define KCALCORE_CALENDAR_P_H #include "calendar.h" #include "calfilter.h" namespace KCalendarCore { /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN Calendar::Private { public: Private() : mModified(false) , mNewObserver(false) , mObserversEnabled(true) , mDefaultFilter(new CalFilter) , batchAddingInProgress(false) , mDeletionTracking(true) { // Setup default filter, which does nothing mFilter = mDefaultFilter; mFilter->setEnabled(false); mOwner.setName(QStringLiteral("Unknown Name")); mOwner.setEmail(QStringLiteral("unknown@nowhere")); } ~Private() { if (mFilter != mDefaultFilter) { delete mFilter; } delete mDefaultFilter; } QTimeZone timeZoneIdSpec(const QByteArray &timeZoneId); QString mProductId; Person mOwner; QTimeZone mTimeZone; QVector mTimeZones; bool mModified = false; bool mNewObserver = false; bool mObserversEnabled = false; QList mObservers; CalFilter *mDefaultFilter = nullptr; CalFilter *mFilter = nullptr; // These lists are used to put together related To-dos QMultiHash mOrphans; QMultiHash mOrphanUids; // Lists for associating incidences to notebooks QMultiHash mNotebookIncidences; QHash mUidToNotebook; QHash mNotebooks; // name to visibility QHash mIncidenceVisibility; // incidence -> visibility QString mDefaultNotebook; // uid of default notebook QMap mIncidenceRelations; bool batchAddingInProgress = false; bool mDeletionTracking = false; QString mId; QString mName; QIcon mIcon; AccessMode mAccessMode = ReadWrite; }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calendarplugin.cpp000066400000000000000000000005321523260663500276160ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Nicolas Fella SPDX-License-Identifier: LGPL-2.0-or-later */ #include "calendarplugin.h" using namespace KCalendarCore; CalendarPlugin::CalendarPlugin(QObject *parent, const QVariantList &args) : QObject(parent) { Q_UNUSED(args) } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calendarplugin.h000066400000000000000000000016261523260663500272700ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Nicolas Fella SPDX-License-Identifier: LGPL-2.0-or-later */ #pragma once #include "calendar.h" #include namespace KCalendarCore { /** @brief A plugin that provides calendar data. It allows calendar applications to consume data provided by multiple sources, e.g. local ical files or remote calendars. @since 5.85 */ class Q_CORE_EXPORT CalendarPlugin : public QObject { Q_OBJECT public: CalendarPlugin(QObject *parent, const QVariantList &args); /** * The set of calendars defined by this plugin. * * @return QVector of calendars. */ virtual QVector calendars() const = 0; Q_SIGNALS: /** * Emitted when the set of calendars changed. */ void calendarsChanged(); private: void *d; }; } // namespace KCalendarCore linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calfilter.cpp000066400000000000000000000137761523260663500266110ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2004 Bram Schoenmakers SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFilter class. @brief Provides a filter for calendars. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author Bram Schoenmakers \ */ #include "calfilter.h" using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::CalFilter::Private { public: Private() { } QString mName; // filter name QStringList mCategoryList; QStringList mEmailList; int mCriteria = 0; int mCompletedTimeSpan = 0; bool mEnabled = true; }; //@endcond CalFilter::CalFilter() : d(new KCalendarCore::CalFilter::Private) { } CalFilter::CalFilter(const QString &name) : d(new KCalendarCore::CalFilter::Private) { d->mName = name; } CalFilter::~CalFilter() { delete d; } bool KCalendarCore::CalFilter::operator==(const CalFilter &filter) const { return d->mName == filter.d->mName && d->mCriteria == filter.d->mCriteria && d->mCategoryList == filter.d->mCategoryList && d->mEmailList == filter.d->mEmailList && d->mCompletedTimeSpan == filter.d->mCompletedTimeSpan; } void CalFilter::apply(Event::List *eventList) const { if (!d->mEnabled) { return; } Event::List::Iterator it = eventList->begin(); while (it != eventList->end()) { if (!filterIncidence(*it)) { it = eventList->erase(it); } else { ++it; } } } // TODO: avoid duplicating apply() code void CalFilter::apply(Todo::List *todoList) const { if (!d->mEnabled) { return; } Todo::List::Iterator it = todoList->begin(); while (it != todoList->end()) { if (!filterIncidence(*it)) { it = todoList->erase(it); } else { ++it; } } } void CalFilter::apply(Journal::List *journalList) const { if (!d->mEnabled) { return; } Journal::List::Iterator it = journalList->begin(); while (it != journalList->end()) { if (!filterIncidence(*it)) { it = journalList->erase(it); } else { ++it; } } } bool CalFilter::filterIncidence(const Incidence::Ptr &incidence) const { if (!d->mEnabled) { return true; } Todo::Ptr todo = incidence.dynamicCast(); if (todo) { if ((d->mCriteria & HideCompletedTodos) && todo->isCompleted()) { // Check if completion date is suffently long ago: if (todo->completed().addDays(d->mCompletedTimeSpan) < QDateTime::currentDateTimeUtc()) { return false; } } if ((d->mCriteria & HideInactiveTodos) && ((todo->hasStartDate() && QDateTime::currentDateTimeUtc() < todo->dtStart()) || todo->isCompleted())) { return false; } if (d->mCriteria & HideNoMatchingAttendeeTodos) { bool iAmOneOfTheAttendees = false; const Attendee::List &attendees = todo->attendees(); if (!todo->attendees().isEmpty()) { Attendee::List::ConstIterator it; for (it = attendees.begin(); it != attendees.end(); ++it) { if (d->mEmailList.contains((*it).email())) { iAmOneOfTheAttendees = true; break; } } } else { // no attendees, must be me only iAmOneOfTheAttendees = true; } if (!iAmOneOfTheAttendees) { return false; } } } if (d->mCriteria & HideRecurring) { if (incidence->recurs() || incidence->hasRecurrenceId()) { return false; } } if (d->mCriteria & ShowCategories) { for (QStringList::ConstIterator it = d->mCategoryList.constBegin(); it != d->mCategoryList.constEnd(); ++it) { QStringList incidenceCategories = incidence->categories(); for (QStringList::ConstIterator it2 = incidenceCategories.constBegin(); it2 != incidenceCategories.constEnd(); ++it2) { if ((*it) == (*it2)) { return true; } } } return false; } else { for (QStringList::ConstIterator it = d->mCategoryList.constBegin(); it != d->mCategoryList.constEnd(); ++it) { QStringList incidenceCategories = incidence->categories(); for (QStringList::ConstIterator it2 = incidenceCategories.constBegin(); it2 != incidenceCategories.constEnd(); ++it2) { if ((*it) == (*it2)) { return false; } } } return true; } } void CalFilter::setName(const QString &name) { d->mName = name; } QString CalFilter::name() const { return d->mName; } void CalFilter::setEnabled(bool enabled) { d->mEnabled = enabled; } bool CalFilter::isEnabled() const { return d->mEnabled; } void CalFilter::setCriteria(int criteria) { d->mCriteria = criteria; } int CalFilter::criteria() const { return d->mCriteria; } void CalFilter::setCategoryList(const QStringList &categoryList) { d->mCategoryList = categoryList; } QStringList CalFilter::categoryList() const { return d->mCategoryList; } void CalFilter::setEmailList(const QStringList &emailList) { d->mEmailList = emailList; } QStringList CalFilter::emailList() const { return d->mEmailList; } void CalFilter::setCompletedTimeSpan(int timespan) { d->mCompletedTimeSpan = timespan; } int CalFilter::completedTimeSpan() const { return d->mCompletedTimeSpan; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calfilter.h000066400000000000000000000132171523260663500262440ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001, 2003, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFilter class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_CALFILTER_H #define KCALCORE_CALFILTER_H #include "event.h" #include "journal.h" #include "todo.h" namespace KCalendarCore { /** @brief Provides a filter for calendars. æ��供日历的筛选器。 This class provides a means for filtering calendar incidences by a list of email addresses, a list of categories, or other #Criteria. The following #Criteria are available: - remove recurring Incidences - keep Incidences with a matching category (see setCategoryList()) - remove completed To-dos (see setCompletedTimeSpan()) - remove inactive To-dos - remove To-dos without a matching attendee (see setEmailList()) */ class Q_CORE_EXPORT CalFilter { public: /** Filtering Criteria. */ enum Criteria { HideRecurring = 1, /**< Remove incidences that recur */ HideCompletedTodos = 2, /**< Remove completed to-dos */ ShowCategories = 4, /**< Show incidences with at least one matching category */ HideInactiveTodos = 8, /**< Remove to-dos that haven't started yet */ HideNoMatchingAttendeeTodos = 16, /**< Remove to-dos without a matching attendee */ }; /** Constructs an empty filter -- a filter without a name or criteria. */ CalFilter(); /** Constructs a filter with @p name. @param name is the name of this filter. */ explicit CalFilter(const QString &name); /** Destroys this filter. */ ~CalFilter(); /** Sets the filter name. @param name is the name of this filter. @see name(). */ void setName(const QString &name); /** Returns the filter name. @see setName(). */ Q_REQUIRED_RESULT QString name() const; /** Sets the criteria which must be fulfilled for an Incidence to pass the filter. @param criteria is a combination of #Criteria. @see criteria(). */ void setCriteria(int criteria); /** Returns the inclusive filter criteria. @see setCriteria(). */ Q_REQUIRED_RESULT int criteria() const; /** Applies the filter to a list of Events. All events not matching the filter criteria are removed from the list. @param eventList is a list of Events to filter. */ void apply(Event::List *eventList) const; /** Applies the filter to a list of To-dos. All to-dos not matching the filter criteria are removed from the list. @param todoList is a list of To-dos to filter. */ void apply(Todo::List *todoList) const; /** Applies the filter to a list of Journals. All journals not matching the filter criteria are removed from the list. @param journalList is a list of Journals to filter. */ void apply(Journal::List *journalList) const; /** Applies the filter criteria to the specified Incidence. @param incidence is the Incidence to filter. @return true if the Incidence passes the criteria; false otherwise. */ Q_REQUIRED_RESULT bool filterIncidence(const Incidence::Ptr &incidence) const; /** Enables or disables the filter. @param enabled is true if the filter is to be enabled; false otherwise. @see isEnabled(). */ void setEnabled(bool enabled); /** Returns whether the filter is enabled or not. @see setEnabled(). */ Q_REQUIRED_RESULT bool isEnabled() const; /** Sets the list of categories to be considered when filtering incidences according to the #ShowCategories criteria. @param categoryList is a QStringList of categories. @see categoryList(). */ void setCategoryList(const QStringList &categoryList); /** Returns the category list for this filter. @see setCategoryList(). */ Q_REQUIRED_RESULT QStringList categoryList() const; /** Sets the list of email addresses to be considered when filtering incidences according to the #HideNoMatchingAttendeeTodos criteria. @param emailList is a QStringList of email addresses. @see emailList(). */ void setEmailList(const QStringList &emailList); /** Returns the email list for this filter. @see setEmailList(). */ Q_REQUIRED_RESULT QStringList emailList() const; /** Sets the number of days for the #HideCompletedTodos criteria. If a to-do has been completed within the recent @p timespan days, then that to-do will be removed during filtering. If a time span is not specified in the filter, then all completed to-dos will be removed if the #HideCompletedTodos criteria is set. @param timespan is an integer representing a time span in days. @see completedTimeSpan(). */ void setCompletedTimeSpan(int timespan); /** Returns the completed time span for this filter. @see setCompletedTimeSpan() */ Q_REQUIRED_RESULT int completedTimeSpan() const; /** Compares this with @p filter for equality. @param filter the CalFilter to compare. */ bool operator==(const CalFilter &filter) const; private: //@cond PRIVATE Q_DISABLE_COPY(CalFilter) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calformat.cpp000066400000000000000000000045231523260663500266020ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFormat base class. @brief Base class providing an interface to various calendar formats. @author Cornelius Schumacher \ */ #include "calformat.h" #include "exceptions.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::CalFormat::Private { public: Private() { } ~Private() { delete mException; } static QString mApplication; // Name of application, for creating unique ID strings static QString mProductId; // PRODID string to write to calendar files QString mLoadedProductId; // PRODID string loaded from calendar file 从日历文件加载的PRODID字符串 Exception *mException = nullptr; }; QString CalFormat::Private::mApplication = QStringLiteral("libkcal"); QString CalFormat::Private::mProductId = QStringLiteral("-//K Desktop Environment//NONSGML libkcal 4.3//EN"); //@endcond CalFormat::CalFormat() : d(new KCalendarCore::CalFormat::Private) { } CalFormat::~CalFormat() { clearException(); delete d; } void CalFormat::clearException() { delete d->mException; d->mException = nullptr; } void CalFormat::setException(Exception *exception) { delete d->mException; d->mException = exception; } Exception *CalFormat::exception() const { return d->mException; } void CalFormat::setApplication(const QString &application, const QString &productID) { Private::mApplication = application; Private::mProductId = productID; } const QString &CalFormat::application() { return Private::mApplication; } const QString &CalFormat::productId() { return Private::mProductId; } QString CalFormat::loadedProductId() { return d->mLoadedProductId; } void CalFormat::setLoadedProductId(const QString &id) { d->mLoadedProductId = id; } QString CalFormat::createUniqueId() { return QUuid::createUuid().toString().mid(1, 36); } void CalFormat::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calformat.h000066400000000000000000000122151523260663500262440ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalFormat abstract base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_CALFORMAT_H #define KCALCORE_CALFORMAT_H #include "calendar.h" #include namespace KCalendarCore { class Exception; /** @brief An abstract base class that provides an interface to various calendar formats. This is the base class for calendar formats. It provides an interface for the generation/interpretation of a textual representation of a calendar. */ class Q_CORE_EXPORT CalFormat { public: /** Constructs a new Calendar Format object. */ CalFormat(); /** Destructor. */ virtual ~CalFormat(); /** Loads a calendar on disk into the calendar associated with this format. å°†ç£�盘上的日历加载到与此格å¼�å…³è�”的日历中。 @param calendar is the Calendar to be loaded. @param fileName is the name of the disk file containing the Calendar data. @return true if successful; false otherwise. */ virtual bool load(const Calendar::Ptr &calendar, const QString &fileName) = 0; /** Writes the calendar to disk. @param calendar is the Calendar containing the data to be saved. @param fileName is the name of the file to write the calendar data. @return true if successful; false otherwise. */ virtual bool save(const Calendar::Ptr &calendar, const QString &fileName) = 0; /** Loads a calendar from a string @param calendar is the Calendar to be loaded. @param string is the QString containing the Calendar data. @param deleted use deleted incidences @param notebook notebook uid @return true if successful; false otherwise. @see fromRawString(), toString(). */ virtual bool fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted = false, const QString ¬ebook = QString()) = 0; /** Parses a utf8 encoded string, returning the first iCal component encountered in that string. This is an overload used for efficient reading to avoid utf8 conversions, which are expensive when reading from disk. @param calendar is the Calendar to be loaded. @param string is the QByteArray containing the Calendar data. @param deleted use deleted incidences @param notebook notebook uid @return true if successful; false otherwise. @see fromString(), toString(). */ virtual bool fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted = false, const QString ¬ebook = QString()) = 0; /** Returns the calendar as a string. @param calendar is the Calendar containing the data to be saved. @param notebook uid use only incidences with given notebook @param deleted use deleted incidences @return a QString containing the Calendar data if successful; an empty string otherwise. @see fromString(), fromRawString(). */ virtual QString toString(const Calendar::Ptr &calendar, const QString ¬ebook = QString(), bool deleted = false) = 0; /** Clears the exception status. */ void clearException(); /** Returns an exception, if there is any, containing information about the last error that occurred. */ Exception *exception() const; /** Sets the application name for use in unique IDs and error messages, and product ID for incidence PRODID property @param application is a string containing the application name. @param productID is a string containing the product identifier. */ static void setApplication(const QString &application, const QString &productID); /** Returns the application name used in unique IDs and error messages. */ static const QString &application(); // krazy:exclude=constref /** Returns the our library's PRODID string to write into calendar files. */ static const QString &productId(); // krazy:exclude=constref /** Returns the PRODID string loaded from calendar file. @see setLoadedProductId() */ QString loadedProductId(); /** Creates a unique id string. */ static QString createUniqueId(); /** Sets an exception that is to be used by the functions of this class to report errors. @param error is a pointer to an Exception which contains the exception. */ void setException(Exception *error); protected: /** Sets the PRODID string loaded from calendar file. @param id is a pruduct Id string to set for the calendar file. @see loadedProductId() */ void setLoadedProductId(const QString &id); /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); private: //@cond PRIVATE Q_DISABLE_COPY(CalFormat) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calstorage.cpp000066400000000000000000000017761523260663500267650ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalStorage abstract base class. @brief An abstract base class that provides a calendar storage interface. @author Cornelius Schumacher \ */ #include "calstorage.h" using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::CalStorage::Private { public: Private(const Calendar::Ptr &cal) : mCalendar(cal) { } Calendar::Ptr mCalendar; }; //@endcond CalStorage::CalStorage(const Calendar::Ptr &calendar) : d(new KCalendarCore::CalStorage::Private(calendar)) { } CalStorage::~CalStorage() { delete d; } Calendar::Ptr CalStorage::calendar() const { return d->mCalendar; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/calstorage.h000066400000000000000000000035751523260663500264310ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CalStorage abstract base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_CALSTORAGE_H #define KCALCORE_CALSTORAGE_H #include "calendar.h" #include namespace KCalendarCore { /** @brief An abstract base class that provides a calendar storage interface. This is the base class for calendar storage. It provides an interface for the loading and saving of calendars. */ class Q_CORE_EXPORT CalStorage : public QObject { Q_OBJECT public: /** Constructs a new storage object for a calendar. @param calendar is a pointer to a valid Calendar object. */ explicit CalStorage(const Calendar::Ptr &calendar); /** Destuctor. */ ~CalStorage() override; /** Returns the calendar for this storage object. @return A pointer to the calendar whose storage is being managed. */ Calendar::Ptr calendar() const; /** Opens the calendar for storage. @return true if the open was successful; false otherwise. */ virtual bool open() = 0; /** Loads the calendar into memory. @return true if the load was successful; false otherwise. */ virtual bool load() = 0; /** Saves the calendar. @return true if the save was successful; false otherwise. */ virtual bool save() = 0; /** Closes the calendar storage. @return true if the close was successful; false otherwise. */ virtual bool close() = 0; private: //@cond PRIVATE Q_DISABLE_COPY(CalStorage) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/compat.cpp000066400000000000000000000251521523260663500261160ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines classes for managing compatibility between different calendar formats. @brief Classes that provide compatibility to older or "broken" calendar formats. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "compat_p.h" #include "incidence.h" #include #include #include #include using namespace KCalendarCore; Compat *CompatFactory::createCompat(const QString &productId, const QString &implementationVersion) { Compat *compat = nullptr; int korg = productId.indexOf(QLatin1String("KOrganizer")); int outl9 = productId.indexOf(QLatin1String("Outlook 9.0")); if (korg >= 0) { int versionStart = productId.indexOf(QLatin1Char(' '), korg); if (versionStart >= 0) { int versionStop = productId.indexOf(QRegularExpression(QStringLiteral("[ /]")), versionStart + 1); if (versionStop >= 0) { QString version = productId.mid(versionStart + 1, versionStop - versionStart - 1); int versionNum = version.section(QLatin1Char('.'), 0, 0).toInt() * 10000 + version.section(QLatin1Char('.'), 1, 1).toInt() * 100 + version.section(QLatin1Char('.'), 2, 2).toInt(); int releaseStop = productId.indexOf(QLatin1Char('/'), versionStop); QString release; if (releaseStop > versionStop) { release = productId.mid(versionStop + 1, releaseStop - versionStop - 1); } if (versionNum < 30100) { compat = new CompatPre31; } else if (versionNum < 30200) { compat = new CompatPre32; } else if (versionNum == 30200 && release == QLatin1String("pre")) { qDebug() << "Generating compat for KOrganizer 3.2 pre"; compat = new Compat32PrereleaseVersions; } else if (versionNum < 30400) { compat = new CompatPre34; } else if (versionNum < 30500) { compat = new CompatPre35; } } } } else if (outl9 >= 0) { qDebug() << "Generating compat for Outlook < 2000 (Outlook 9.0)"; compat = new CompatOutlook9; } if (!compat) { compat = new Compat; } // Older implementations lacked the implementation version, // so apply this fix if it is a file from kontact and the version is missing. if (implementationVersion.isEmpty() && (productId.contains(QLatin1String("libkcal")) || productId.contains(QLatin1String("KOrganizer")) || productId.contains(QLatin1String("KAlarm")))) { compat = new CompatPre410(compat); } return compat; } Compat::Compat() : d(nullptr) { } Compat::~Compat() { } void Compat::fixEmptySummary(const Incidence::Ptr &incidence) { // some stupid vCal exporters ignore the standard and use Description // instead of Summary for the default field. Correct for this: Copy the // first line of the description to the summary (if summary is just one // line, move it) if (incidence->summary().isEmpty() && !(incidence->description().isEmpty())) { QString oldDescription = incidence->description().trimmed(); QString newSummary(oldDescription); newSummary.remove(QRegularExpression(QStringLiteral("\n.*"))); incidence->setSummary(newSummary); if (oldDescription == newSummary) { incidence->setDescription(QLatin1String("")); } } } void Compat::fixAlarms(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); } void Compat::fixFloatingEnd(QDate &date) { Q_UNUSED(date); } void Compat::fixRecurrence(const Incidence::Ptr &incidence) { Q_UNUSED(incidence); // Prevent use of compatibility mode during subsequent changes by the application // incidence->recurrence()->setCompatVersion(); } int Compat::fixPriority(int priority) { return priority; } bool Compat::useTimeZoneShift() const { return true; } void Compat::setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) { Q_UNUSED(incidence); Q_UNUSED(dtstamp); } class Q_DECL_HIDDEN CompatDecorator::Private { public: Compat *compat; }; CompatDecorator::CompatDecorator(Compat *compat) : d(new CompatDecorator::Private) { d->compat = compat; } CompatDecorator::~CompatDecorator() { delete d->compat; delete d; } void CompatDecorator::fixEmptySummary(const Incidence::Ptr &incidence) { d->compat->fixEmptySummary(incidence); } void CompatDecorator::fixAlarms(const Incidence::Ptr &incidence) { d->compat->fixAlarms(incidence); } void CompatDecorator::fixFloatingEnd(QDate &date) { d->compat->fixFloatingEnd(date); } void CompatDecorator::fixRecurrence(const Incidence::Ptr &incidence) { d->compat->fixRecurrence(incidence); } int CompatDecorator::fixPriority(int priority) { return d->compat->fixPriority(priority); } bool CompatDecorator::useTimeZoneShift() const { return d->compat->useTimeZoneShift(); } void CompatDecorator::setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) { d->compat->setCreatedToDtStamp(incidence, dtstamp); } CompatPre35::CompatPre35() : d(nullptr) { } CompatPre35::~CompatPre35() { } void CompatPre35::fixRecurrence(const Incidence::Ptr &incidence) { Recurrence *recurrence = incidence->recurrence(); if (recurrence) { QDateTime start(incidence->dtStart()); // kde < 3.5 only had one rrule, so no need to loop over all RRULEs. RecurrenceRule *r = recurrence->defaultRRule(); if (r && !r->dateMatchesRules(start)) { recurrence->addExDateTime(start); } } // Call base class method now that everything else is done Compat::fixRecurrence(incidence); } CompatPre34::CompatPre34() : d(nullptr) { } CompatPre34::~CompatPre34() { } int CompatPre34::fixPriority(int priority) { if (0 < priority && priority < 6) { // adjust 1->1, 2->3, 3->5, 4->7, 5->9 return 2 * priority - 1; } else { return priority; } } CompatPre32::CompatPre32() : d(nullptr) { } CompatPre32::~CompatPre32() { } void CompatPre32::fixRecurrence(const Incidence::Ptr &incidence) { Recurrence *recurrence = incidence->recurrence(); if (recurrence->recurs() && recurrence->duration() > 0) { recurrence->setDuration(recurrence->duration() + incidence->recurrence()->exDates().count()); } // Call base class method now that everything else is done CompatPre35::fixRecurrence(incidence); } CompatPre31::CompatPre31() : d(nullptr) { } CompatPre31::~CompatPre31() { } void CompatPre31::fixFloatingEnd(QDate &endDate) { endDate = endDate.addDays(1); } void CompatPre31::fixRecurrence(const Incidence::Ptr &incidence) { CompatPre32::fixRecurrence(incidence); Recurrence *recur = incidence->recurrence(); RecurrenceRule *r = nullptr; if (recur) { r = recur->defaultRRule(); } if (recur && r) { int duration = r->duration(); if (duration > 0) { // Backwards compatibility for KDE < 3.1. // rDuration was set to the number of time periods to recur, // with week start always on a Monday. // Convert this to the number of occurrences. r->setDuration(-1); QDate end(r->startDt().date()); bool doNothing = false; // # of periods: int tmp = (duration - 1) * r->frequency(); switch (r->recurrenceType()) { case RecurrenceRule::rWeekly: { end = end.addDays(tmp * 7 + 7 - end.dayOfWeek()); break; } case RecurrenceRule::rMonthly: { int month = end.month() - 1 + tmp; end.setDate(end.year() + month / 12, month % 12 + 1, 31); break; } case RecurrenceRule::rYearly: { end.setDate(end.year() + tmp, 12, 31); break; } default: doNothing = true; break; } if (!doNothing) { duration = r->durationTo(QDateTime(end, QTime(0, 0, 0), incidence->dtStart().timeZone())); r->setDuration(duration); } } /* addYearlyNum */ // Dates were stored as day numbers, with a fiddle to take account of // leap years. Convert the day number to a month. QList days = r->byYearDays(); if (!days.isEmpty()) { QList months = r->byMonths(); for (int i = 0; i < months.size(); ++i) { int newmonth = QDate(r->startDt().date().year(), 1, 1).addDays(months.at(i) - 1).month(); if (!months.contains(newmonth)) { months.append(newmonth); } } r->setByMonths(months); days.clear(); r->setByYearDays(days); } } } CompatOutlook9::CompatOutlook9() : d(nullptr) { } CompatOutlook9::~CompatOutlook9() { } void CompatOutlook9::fixAlarms(const Incidence::Ptr &incidence) { if (!incidence) { return; } Alarm::List alarms = incidence->alarms(); Alarm::List::Iterator end(alarms.end()); for (Alarm::List::Iterator it = alarms.begin(); it != end; ++it) { Alarm::Ptr al = *it; if (al && al->hasStartOffset()) { Duration offsetDuration = al->startOffset(); int offs = offsetDuration.asSeconds(); if (offs > 0) { offsetDuration = Duration(-offs); } al->setStartOffset(offsetDuration); } } } Compat32PrereleaseVersions::Compat32PrereleaseVersions() : d(nullptr) { } Compat32PrereleaseVersions::~Compat32PrereleaseVersions() { } bool Compat32PrereleaseVersions::useTimeZoneShift() const { return false; } CompatPre410::CompatPre410(Compat *decoratedCompat) : CompatDecorator(decoratedCompat) , d(nullptr) { } CompatPre410::~CompatPre410() { } void CompatPre410::setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) { if (dtstamp.isValid()) { incidence->setCreated(dtstamp); } } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/compat_p.h000066400000000000000000000204671523260663500261060ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines classes for managing compatibility between different calendar formats. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_COMPAT_P_H #define KCALCORE_COMPAT_P_H #include "incidence.h" #include // for Q_DISABLE_COPY() class QDate; class QString; namespace KCalendarCore { class Compat; /** @brief Factory for creating the right Compat object. @internal */ class CompatFactory { public: /** Creates the appropriate Compat class as determined by the Product ID. @param productId is a string containing a valid Product ID from a supported calendar format. @return A pointer to a Compat object which is owned by the caller. */ static Compat *createCompat(const QString &productId, const QString &implementationVersion); }; /** @brief This class provides compatibility to older or broken calendar files. @internal */ class Compat { public: /** Constructor. */ Compat(); /** Destructor. */ virtual ~Compat(); /** Fixes the recurrence rule for an incidence. @param incidence is a pointer to an Incidence object that may need its recurrence rule fixed. */ virtual void fixRecurrence(const Incidence::Ptr &incidence); /** Fixes an empty summary for an incidence. @param incidence is a pointer to an Incidence object that may need its summary fixed. */ virtual void fixEmptySummary(const Incidence::Ptr &incidence); /** Fixes the alarms list an incidence. @param incidence is a pointer to an Incidence object that may need its alarms fixed. */ virtual void fixAlarms(const Incidence::Ptr &incidence); /** Fixes the end date for floating events. @param date is the end date to fix. */ virtual void fixFloatingEnd(QDate &date); /** Fixes the priority. @param priority is the priority value to fix. @return an integer representing a valid priority value. */ virtual int fixPriority(int priority); /** Returns true if a timezone shift should be used; false otherwise. */ virtual bool useTimeZoneShift() const; /** Sets the created and dtstamp. */ virtual void setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp); private: //@cond PRIVATE Q_DISABLE_COPY(Compat) class Private; Private *const d; //@endcond }; /** @brief Decorator so multiple compatibility classes can be stacked. */ class CompatDecorator : public Compat { public: explicit CompatDecorator(Compat *decoratedCompat); ~CompatDecorator() override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; /** @copydoc Compat::fixEmptySummary() */ void fixEmptySummary(const Incidence::Ptr &incidence) override; /** @copydoc Compat::fixAlarms() */ void fixAlarms(const Incidence::Ptr &incidence) override; /** @copydoc Compat::fixFloatingEnd() */ void fixFloatingEnd(QDate &date) override; /** @copydoc Compat::fixPriority() */ int fixPriority(int priority) override; /** @copydoc Compat::useTimeZoneShift() */ bool useTimeZoneShift() const override; /** @copydoc Compat::setCreatedToDtStamp() */ void setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) override; private: //@cond PRIVATE Q_DISABLE_COPY(CompatDecorator) class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.5 calendar files. Before kde 3.5, the start date was not automatically a recurring date. So, if the start date doesn't match the recurrence rule, we need to add an ex-date for the date start. If a duration was given, the DTSTART was only counted if it matched, so by accident this was already the correct behavior, so we don't need to adjust the duration. */ class CompatPre35 : public Compat { public: CompatPre35(); ~CompatPre35() override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.4 calendar files. */ class CompatPre34 : public CompatPre35 { public: CompatPre34(); ~CompatPre34() override; /** @copydoc Compat::fixPriority() */ int fixPriority(int priority) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.2 calendar files. The recurrence has a specified number of repetitions. Pre-3.2, this was extended by the number of exception dates. This is also rfc 2445-compliant. The duration of an RRULE also counts events that are later excluded via EXDATE or EXRULE. */ class CompatPre32 : public CompatPre34 { public: CompatPre32(); ~CompatPre32() override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer pre-3.1 calendar files. Before kde 3.1, floating events (events without a date) had 0:00 of their last day as the end date. E.g. 28.5.2005 0:00 until 28.5.2005 0:00 for an event that lasted the whole day on May 28, 2005. According to RFC 2445, the end date for such an event needs to be 29.5.2005 0:00. Update: We misunderstood rfc 2445 in this regard. For all-day events, the DTEND is the last day of the event. See a mail from the Author or rfc 2445: http://www.imc.org/ietf-calendar/archive1/msg03648.html However, as all other applications also got this wrong, we'll just leave it as it is and use the wrong interpretation (was also discussed on ietf-calsify) */ class CompatPre31 : public CompatPre32 { public: CompatPre31(); ~CompatPre31(); /** @copydoc Compat::fixFloatingEnd() */ void fixFloatingEnd(QDate &date) override; /** @copydoc Compat::fixRecurrence() */ void fixRecurrence(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for KOrganizer prerelease 3.2 calendar files. */ class Compat32PrereleaseVersions : public Compat { public: Compat32PrereleaseVersions(); ~Compat32PrereleaseVersions() override; /** @copydoc Compat::useTimeZoneShift() */ bool useTimeZoneShift() const override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for Outlook 9 calendar files. In Outlook 9, alarms have the wrong sign. I.e. RFC 2445 says that negative values for the trigger are before the event's start. Outlook/exchange, however used positive values. */ class CompatOutlook9 : public Compat { public: CompatOutlook9(); ~CompatOutlook9() override; /** @copydoc Compat::fixAlarms() */ void fixAlarms(const Incidence::Ptr &incidence) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** @brief Compatibility class for Kontact < 4.10 calendar files. */ class CompatPre410 : public CompatDecorator { public: explicit CompatPre410(Compat *decoratedCompat); ~CompatPre410() override; /** @copydoc Compat::setCreatedToDtStamp() */ void setCreatedToDtStamp(const Incidence::Ptr &incidence, const QDateTime &dtstamp) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/conference.cpp000066400000000000000000000062161523260663500267420ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #include "conference.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Conference::Private : public QSharedData { public: QString label; QString language; QStringList features; QUrl uri; CustomProperties customProperties; }; //@endcond Conference::Conference() : d(new Conference::Private) { } Conference::Conference(const QUrl &uri, const QString &label, const QStringList &features, const QString &language) : d(new Conference::Private) { setUri(uri); setLabel(label); setFeatures(features); setLanguage(language); } Conference::Conference(const Conference &) = default; Conference::~Conference() = default; bool Conference::isNull() const { // isNull rather than isEmpty, as user code is actually creating empty but non-null conferences... return !d->uri.isValid() && d->label.isNull(); } bool KCalendarCore::Conference::operator==(const Conference &other) const { return std::tie(d->label, d->language, d->features, d->uri) == std::tie(other.d->label, other.d->language, other.d->features, other.d->uri); } bool KCalendarCore::Conference::operator!=(const Conference &other) const { return !operator==(other); } Conference &KCalendarCore::Conference::operator=(const Conference &) = default; QUrl Conference::uri() const { return d->uri; } void Conference::setUri(const QUrl &uri) { d->uri = uri; } QString Conference::label() const { return d->label; } void Conference::setLabel(const QString &label) { d->label = label; } QStringList Conference::features() const { return d->features; } void Conference::addFeature(const QString &feature) { d->features.push_back(feature); } void Conference::removeFeature(const QString &feature) { d->features.removeAll(feature); } void Conference::setFeatures(const QStringList &features) { d->features = features; } QString Conference::language() const { return d->language; } void Conference::setLanguage(const QString &language) { d->language = language; } void Conference::setCustomProperty(const QByteArray &xname, const QString &xvalue) { d->customProperties.setNonKDECustomProperty(xname, xvalue); } CustomProperties &Conference::customProperties() { return d->customProperties; } const CustomProperties &Conference::customProperties() const { return d->customProperties; } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Conference &conference) { return stream << conference.d->uri << conference.d->label << conference.d->features << conference.d->language << conference.d->customProperties; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::Conference &conference) { Conference conf; stream >> conf.d->uri >> conf.d->label >> conf.d->features >> conf.d->language >> conf.d->customProperties; conference = conf; return stream; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/conference.h000066400000000000000000000125721523260663500264110ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2020 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_CONFERENCE_H #define KCALCORE_CONFERENCE_H #include #include #include #include "customproperties.h" namespace KCalendarCore { /** @brief Represents information related to a conference information of an Calendar Incidence, typically a meeting or task (to-do). 表示与会议相关的信æ�¯æ—¥åŽ†äº‹ä»¶çš„ä¿¡æ�¯ï¼Œé€šå¸¸æ˜¯ä¼šè®®æˆ–任务(待办事项)。 Conference contains information needed to join a remote conference system (e.g. phone call, audio/video meeting etc.) @since 5.77 */ class Q_CORE_EXPORT Conference { Q_GADGET Q_PROPERTY(bool isNull READ isNull) Q_PROPERTY(QStringList features READ features WRITE setFeatures) Q_PROPERTY(QString label READ label WRITE setLabel) Q_PROPERTY(QUrl uri READ uri WRITE setUri) Q_PROPERTY(QString language READ language WRITE setLanguage) public: using List = QVector; /** Create a null Conference. */ explicit Conference(); /** Constructs a conference consisting of a @p uri, description of the URI (@p label), list of features of the conference (@p features) and @p language. @param uri Uri to join the conference. @param label Label of the URI. @param features Features of this particular conference method. @param language Language of the information present in other fields. */ Conference(const QUrl &uri, const QString &label, const QStringList &features = {}, const QString &language = {}); /** Constructs a conference by copying another conference. @param conference is the conference to be copied. */ Conference(const Conference &conference); /** Destroys the conference. */ ~Conference(); /** Compares this with @p conference for equality. @param conference the conference to compare. */ bool operator==(const Conference &conference) const; /** Compares this with @p conference for inequality. @param conference the conference to compare. */ bool operator!=(const Conference &other) const; /** * Returns @c true if this is a default-constructed Conference instance. */ Q_REQUIRED_RESULT bool isNull() const; /** * Returns URI to join the conference, with access code included. */ Q_REQUIRED_RESULT QUrl uri() const; /** * Sets the URI to @uri. */ void setUri(const QUrl &uri); /** * Returns label with additional details regarding further use of the URI. */ Q_REQUIRED_RESULT QString label() const; /** * Sets the URI label to @p label. */ void setLabel(const QString &label); /** * Returns the list of features of the conferencing system at given URI. * * This can be e.g. CHAT, AUDIO, VIDEO, PHONE, etc. */ Q_REQUIRED_RESULT QStringList features() const; /** * Adds @p feature to the list of features. * * @param feature Feature to add. */ void addFeature(const QString &feature); /** * Removes @p feature from the list of features. * * @param feature Feature to remove. */ void removeFeature(const QString &feature); /** * Sets the list of features to @p features. */ void setFeatures(const QStringList &features); /** * Returns the language of the text present in other properties of this object. */ Q_REQUIRED_RESULT QString language() const; /** * Sets the language to @p language. */ void setLanguage(const QString &language); /** Sets this conference equal to @p conference. @param conference is the conference to copy. */ Conference &operator=(const Conference &conference); /** Adds a custom property. If the property already exists it will be overwritten. @param xname is the name of the property. @param xvalue is its value. */ void setCustomProperty(const QByteArray &xname, const QString &xvalue); /** Returns a reference to the CustomProperties object */ Q_REQUIRED_RESULT CustomProperties &customProperties(); /** Returns a const reference to the CustomProperties object */ const CustomProperties &customProperties() const; private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const KCalendarCore::Conference &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, KCalendarCore::Conference &); }; /** Serializes a Conference object into a data stream. @param stream is a QDataStream. @param conference is a reference to a Conference object to be serialized. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Conference &conference); /** Initializes a Conference object from a data stream. @param stream is a QDataStream. @param conference is a reference to a Conference object to be initialized. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Conference &conference); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Conference, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Conference) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/customproperties.cpp000066400000000000000000000163311523260663500302610ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2006, 2010 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CustomProperties class. @brief A class to manage custom calendar properties. @author David Jarvie \ */ #include "customproperties.h" #include #include using namespace KCalendarCore; //@cond PRIVATE static bool checkName(const QByteArray &name); class Q_DECL_HIDDEN CustomProperties::Private { public: bool operator==(const Private &other) const; QMap mProperties; // custom calendar properties QMap mPropertyParameters; // Volatile properties are not written back to the serialized format and are not compared in operator== // They are only used for runtime purposes and are not part of the payload. QMap mVolatileProperties; bool isVolatileProperty(const QString &name) const { return name.startsWith(QLatin1String("X-KDE-VOLATILE")); } }; bool CustomProperties::Private::operator==(const CustomProperties::Private &other) const { if (mProperties.count() != other.mProperties.count()) { // qDebug() << "Property count is different:" << mProperties << other.mProperties; return false; } for (QMap::ConstIterator it = mProperties.begin(); it != mProperties.end(); ++it) { QMap::ConstIterator itOther = other.mProperties.find(it.key()); if (itOther == other.mProperties.end() || itOther.value() != it.value()) { return false; } } for (QMap::ConstIterator it = mPropertyParameters.begin(); it != mPropertyParameters.end(); ++it) { QMap::ConstIterator itOther = other.mPropertyParameters.find(it.key()); if (itOther == other.mPropertyParameters.end() || itOther.value() != it.value()) { return false; } } return true; } //@endcond CustomProperties::CustomProperties() : d(new Private) { } CustomProperties::CustomProperties(const CustomProperties &cp) : d(new Private(*cp.d)) { } CustomProperties &CustomProperties::operator=(const CustomProperties &other) { // check for self assignment if (&other == this) { return *this; } *d = *other.d; return *this; } CustomProperties::~CustomProperties() { delete d; } bool CustomProperties::operator==(const CustomProperties &other) const { return *d == *other.d; } void CustomProperties::setCustomProperty(const QByteArray &app, const QByteArray &key, const QString &value) { if (value.isNull() || key.isEmpty() || app.isEmpty()) { return; } QByteArray property = "X-KDE-" + app + '-' + key; if (!checkName(property)) { return; } customPropertyUpdate(); if (d->isVolatileProperty(QLatin1String(property))) { d->mVolatileProperties[property] = value; } else { d->mProperties[property] = value; } customPropertyUpdated(); } void CustomProperties::removeCustomProperty(const QByteArray &app, const QByteArray &key) { removeNonKDECustomProperty(QByteArray("X-KDE-" + app + '-' + key)); } QString CustomProperties::customProperty(const QByteArray &app, const QByteArray &key) const { return nonKDECustomProperty(QByteArray("X-KDE-" + app + '-' + key)); } QByteArray CustomProperties::customPropertyName(const QByteArray &app, const QByteArray &key) { QByteArray property("X-KDE-" + app + '-' + key); if (!checkName(property)) { return QByteArray(); } return property; } void CustomProperties::setNonKDECustomProperty(const QByteArray &name, const QString &value, const QString ¶meters) { if (value.isNull() || !checkName(name)) { return; } customPropertyUpdate(); if (d->isVolatileProperty(QLatin1String(name))) { d->mVolatileProperties[name] = value; } else { d->mProperties[name] = value; d->mPropertyParameters[name] = parameters; } customPropertyUpdated(); } void CustomProperties::removeNonKDECustomProperty(const QByteArray &name) { if (d->mProperties.contains(name)) { customPropertyUpdate(); d->mProperties.remove(name); d->mPropertyParameters.remove(name); customPropertyUpdated(); } else if (d->mVolatileProperties.contains(name)) { customPropertyUpdate(); d->mVolatileProperties.remove(name); customPropertyUpdated(); } } QString CustomProperties::nonKDECustomProperty(const QByteArray &name) const { return d->isVolatileProperty(QLatin1String(name)) ? d->mVolatileProperties.value(name) : d->mProperties.value(name); } QString CustomProperties::nonKDECustomPropertyParameters(const QByteArray &name) const { return d->mPropertyParameters.value(name); } void CustomProperties::setCustomProperties(const QMap &properties) { bool changed = false; for (QMap::ConstIterator it = properties.begin(); it != properties.end(); ++it) { // Validate the property name and convert any null string to empty string if (checkName(it.key())) { if (d->isVolatileProperty(QLatin1String(it.key()))) { d->mVolatileProperties[it.key()] = it.value().isNull() ? QLatin1String("") : it.value(); } else { d->mProperties[it.key()] = it.value().isNull() ? QLatin1String("") : it.value(); } if (!changed) { customPropertyUpdate(); } changed = true; } } if (changed) { customPropertyUpdated(); } } QMap CustomProperties::customProperties() const { QMap result = d->mProperties; for (auto it = d->mVolatileProperties.begin(), end = d->mVolatileProperties.end(); it != end; ++it) { result.insert(it.key(), it.value()); } return result; } void CustomProperties::customPropertyUpdate() { } void CustomProperties::customPropertyUpdated() { } //@cond PRIVATE bool checkName(const QByteArray &name) { // Check that the property name starts with 'X-' and contains //检查属性å��称是å�¦ä»¥â€œX-â€�开头,并包å�« // only the permitted characters //å�ªæœ‰å…�许的字符 const char *n = name.constData(); int len = name.length(); if (len < 2 || n[0] != 'X' || n[1] != '-') { return false; } for (int i = 2; i < len; ++i) { char ch = n[i]; if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9') || ch == '-') { continue; } return false; // invalid character found } return true; } //@endcond QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::CustomProperties &properties) { return stream << properties.d->mProperties << properties.d->mPropertyParameters; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::CustomProperties &properties) { properties.d->mVolatileProperties.clear(); return stream >> properties.d->mProperties >> properties.d->mPropertyParameters; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/customproperties.h000066400000000000000000000154621523260663500277320ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2006, 2010 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the CustomProperties class. @author David Jarvie \ */ #ifndef KCALCORE_CUSTOMPROPERTIES_H #define KCALCORE_CUSTOMPROPERTIES_H #include #include namespace KCalendarCore { /** @brief A class to manage custom calendar properties. 用于管ç�†è‡ªå®šä¹‰æ—¥åŽ†å±žæ€§çš„ç±»ã€‚ This class represents custom calendar properties. It is used as a base class for classes which represent calendar components. A custom property name written by the kcalcore library has the form X-KDE-APP-KEY where APP represents the application name, and KEY distinguishes individual properties for the application. In keeping with RFC2445, property names must be composed only of the characters A-Z, a-z, 0-9 and '-'. */ class Q_CORE_EXPORT CustomProperties { friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::CustomProperties &properties); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::CustomProperties &properties); public: /** Constructs an empty custom properties instance. */ CustomProperties(); /** Copy constructor. @param other is the one to copy. */ CustomProperties(const CustomProperties &other); /** Destructor. */ virtual ~CustomProperties(); /** Compare this with @p properties for equality. @param properties is the one to compare. @warning The comparison is not polymorphic. */ bool operator==(const CustomProperties &properties) const; /** Create or modify a custom calendar property. @param app Application name as it appears in the custom property name. 在自定义属性å��称中显示的应用程åº�å��称。 @param key Property identifier specific to the application. 特定于应用程åº�的属性标识符。 @param value The property's value. A call with a value of QString() will be ignored. @see removeCustomProperty(). */ void setCustomProperty(const QByteArray &app, const QByteArray &key, const QString &value); /** Delete a custom calendar property. @param app Application name as it appears in the custom property name. @param key Property identifier specific to the application. @see setCustomProperty(). */ void removeCustomProperty(const QByteArray &app, const QByteArray &key); /** Return the value of a custom calendar property. @param app Application name as it appears in the custom property name. @param key Property identifier specific to the application. @return Property value, or QString() if (and only if) the property does not exist. */ Q_REQUIRED_RESULT QString customProperty(const QByteArray &app, const QByteArray &key) const; /** Validate and return the full name of a custom calendar property. @param app Application name as it appears in the custom property name. @param key Property identifier specific to the application. @return Full property name, or empty string if it would contain invalid characters */ Q_REQUIRED_RESULT static QByteArray customPropertyName(const QByteArray &app, const QByteArray &key); /** Create or modify a non-KDE or non-standard custom calendar property. 创建或修改é�žKDE或é�žæ ‡å‡†è‡ªå®šä¹‰æ—¥åŽ†å±žæ€§ã€‚ @param name Full property name @param value The property's value. A call with a value of QString() will be ignored. @param parameters The formatted list of parameters for the property. They should be formatted as RFC specifies, that is, KEY=VALUE;KEY2=VALUE2. We're mostly concerned about passing them through as-is albeit they can be of course parsed if need be. @see removeNonKDECustomProperty(). */ void setNonKDECustomProperty(const QByteArray &name, const QString &value, const QString ¶meters = QString()); /** Delete a non-KDE or non-standard custom calendar property. @param name Full property name @see setNonKDECustomProperty(). */ void removeNonKDECustomProperty(const QByteArray &name); /** Return the value of a non-KDE or non-standard custom calendar property. 返回é�žKDE或é�žæ ‡å‡†è‡ªå®šä¹‰æ—¥åŽ†å±žæ€§çš„å€¼ã€‚ @param name Full property name @return Property value, or QString() if (and only if) the property does not exist. */ Q_REQUIRED_RESULT QString nonKDECustomProperty(const QByteArray &name) const; /** Return the parameters of a non-KDE or non-standard custom calendar property. @param name Full property name @return The parameters for the given property. Empty string is returned if none are set. */ Q_REQUIRED_RESULT QString nonKDECustomPropertyParameters(const QByteArray &name) const; /** Initialise the alarm's custom calendar properties to the specified key/value pairs. 将报警的自定义日历属性åˆ�始化为指定的键/值对。 @param properties is a QMap of property key/value pairs. @see customProperties(). */ void setCustomProperties(const QMap &properties); /** Returns all custom calendar property key/value pairs. @see setCustomProperties(). */ Q_REQUIRED_RESULT QMap customProperties() const; /** Assignment operator. @warning The assignment is not polymorphic. @param other is the CustomProperty to assign. */ CustomProperties &operator=(const CustomProperties &other); protected: /** Called before a custom property will be changed. 在更改自定义属性之å‰�调用。 The default implementation does nothing: override in derived classes to perform change processing. 默认实现ä¸�å�šä»»ä½•事情:é‡�写派生类以执行更改处ç�†ã€‚ */ virtual void customPropertyUpdate(); /** Called when a custom property has been changed. The default implementation does nothing: override in derived classes to perform change processing. */ virtual void customPropertyUpdated(); private: //@cond PRIVATE class Private; Private *const d; //@endcond }; /** Serializes the @p properties object into the @p stream. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::CustomProperties &properties); /** Initializes the @p properties object from the @p stream. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::CustomProperties &properties); } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/duration.cpp000066400000000000000000000115571523260663500264640ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Duration class. @brief Represents a span of time measured in seconds. @author Cornelius Schumacher \ @author David Jarvie \ */ #include "duration.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Duration::Private { public: int seconds() const { return mDaily ? mDuration * 86400 : mDuration; } int mDuration; // number of seconds or days in the duration bool mDaily = false; // specified in terms of days rather than seconds }; //@endcond Duration::Duration() : d(new KCalendarCore::Duration::Private()) { } Duration::Duration(const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::Duration::Private()) { if (start.time() == end.time() && start.timeZone() == end.timeZone()) { d->mDuration = start.daysTo(end); d->mDaily = true; } else { d->mDuration = start.secsTo(end); d->mDaily = false; } } Duration::Duration(const QDateTime &start, const QDateTime &end, Type type) : d(new KCalendarCore::Duration::Private()) { if (type == Days) { QDateTime endSt(end.toTimeZone(start.timeZone())); d->mDuration = start.daysTo(endSt); if (d->mDuration) { // Round down to whole number of days if necessary if (start < endSt) { if (endSt.time() < start.time()) { --d->mDuration; } } else { if (endSt.time() > start.time()) { ++d->mDuration; } } } d->mDaily = true; } else { d->mDuration = start.secsTo(end); d->mDaily = false; } } Duration::Duration(int duration, Type type) : d(new KCalendarCore::Duration::Private()) { d->mDuration = duration; d->mDaily = (type == Days); } Duration::Duration(const Duration &duration) : d(new KCalendarCore::Duration::Private(*duration.d)) { } Duration::~Duration() { delete d; } Duration &Duration::operator=(const Duration &duration) { // check for self assignment if (&duration == this) { return *this; } *d = *duration.d; return *this; } Duration::operator bool() const { return d->mDuration; } bool Duration::operator<(const Duration &other) const { if (d->mDaily == other.d->mDaily) { // guard against integer overflow for two daily durations return d->mDuration < other.d->mDuration; } return d->seconds() < other.d->seconds(); } bool Duration::operator==(const Duration &other) const { // Note: daily and non-daily durations are always unequal, since a day's // duration may differ from 24 hours if it happens to span a daylight saving // time change. return d->mDuration == other.d->mDuration && d->mDaily == other.d->mDaily; } Duration &Duration::operator+=(const Duration &other) { if (d->mDaily == other.d->mDaily) { d->mDuration += other.d->mDuration; } else if (d->mDaily) { d->mDuration = d->mDuration * 86400 + other.d->mDuration; d->mDaily = false; } else { d->mDuration += other.d->mDuration + 86400; } return *this; } Duration Duration::operator-() const { return Duration(-d->mDuration, (d->mDaily ? Days : Seconds)); } Duration &Duration::operator-=(const Duration &duration) { return operator+=(-duration); } Duration &Duration::operator*=(int value) { d->mDuration *= value; return *this; } Duration &Duration::operator/=(int value) { d->mDuration /= value; return *this; } QDateTime Duration::end(const QDateTime &start) const { return d->mDaily ? start.addDays(d->mDuration) : start.addSecs(d->mDuration); } Duration::Type Duration::type() const { return d->mDaily ? Days : Seconds; } bool Duration::isDaily() const { return d->mDaily; } int Duration::asSeconds() const { return d->seconds(); } int Duration::asDays() const { return d->mDaily ? d->mDuration : d->mDuration / 86400; } int Duration::value() const { return d->mDuration; } bool Duration::isNull() const { return d->mDuration == 0; } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::Duration &duration) { out << duration.d->mDuration << duration.d->mDaily; return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::Duration &duration) { in >> duration.d->mDuration >> duration.d->mDaily; return in; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/duration.h000066400000000000000000000217451523260663500261310ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Duration class. @author Cornelius Schumacher \ @author David Jarvie \ */ #ifndef KCALCORE_DURATION_H #define KCALCORE_DURATION_H #include #include #include class QDateTime; namespace KCalendarCore { /** @brief Represents a span of time measured in seconds or days. 表示以秒或天为å�•ä½�的时间跨度。 A duration is a span of time measured in seconds or days. Construction can be done by specifying a stop and end time, or simply by specifying the number of seconds or days. Much of the time, it does not matter whether a duration is specified in seconds or in days. But it does make a difference when a duration is used to define a time period encompassing a daylight saving time change. */ class Q_CORE_EXPORT Duration { public: /** The unit of time used to define the duration. */ enum Type { Seconds, /**< duration is a number of seconds */ //ç§’ Days, /**< duration is a number of days */ //天 }; /** Constructs a duration of 0 seconds. */ Duration(); /** Constructs a duration from @p start to @p end. If the time of day in @p start and @p end is equal, and their time specifications (i.e. time zone etc.) are the same, the duration will be set in terms of days. Otherwise, the duration will be set in terms of seconds. @param start is the time the duration begins. @param end is the time the duration ends. */ Duration(const QDateTime &start, const QDateTime &end); /** Constructs a duration from @p start to @p end. If @p type is Days, and the time of day in @p start's time zone differs between @p start and @p end, the duration will be rounded down to the nearest whole number of days. @param start is the time the duration begins. @param end is the time the duration ends. @param type the unit of time to use (seconds or days) */ Duration(const QDateTime &start, const QDateTime &end, Type type); /** Constructs a duration with a number of seconds or days. @param duration the number of seconds or days in the duration @param type the unit of time to use (seconds or days) */ // Keep the following implicit since instances are often used in integer evaluations. Duration(int duration, Type type = Seconds); // krazy:exclude=explicit /** Constructs a duration by copying another duration object. @param duration is the duration to copy. */ Duration(const Duration &duration); /** Destroys a duration. */ ~Duration(); /** Sets this duration equal to @p duration. @param duration is the duration to copy. */ Duration &operator=(const Duration &duration); /** Returns true if this duration is non-zero. */ operator bool() const; /** Returns true if this duration is zero. */ bool operator!() const { return !operator bool(); } /** Returns true if this duration is smaller than the @p other. @param other is the other duration to compare. */ bool operator<(const Duration &other) const; /** Returns true if this duration is smaller than or equal to the @p other. @param other is the other duration to compare. */ bool operator<=(const Duration &other) const { return !other.operator<(*this); } /** Returns true if this duration is greater than the @p other. @param other is the other duration to compare. */ bool operator>(const Duration &other) const { return other.operator<(*this); } /** Returns true if this duration is greater than or equal to the @p other. @param other is the other duration to compare. */ bool operator>=(const Duration &other) const { return !operator<(other); } /** Returns true if this duration is equal to the @p other. Daily and non-daily durations are always considered unequal, since a day's duration may differ from 24 hours if it happens to span a daylight saving time change. @param other the other duration to compare */ bool operator==(const Duration &other) const; /** Returns true if this duration is not equal to the @p other. Daily and non-daily durations are always considered unequal, since a day's duration may differ from 24 hours if it happens to span a daylight saving time change. @param other is the other duration to compare. */ bool operator!=(const Duration &other) const { return !operator==(other); } /** Adds another duration to this one. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to add */ Duration &operator+=(const Duration &other); /** Adds two durations. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to add @return combined duration */ Duration operator+(const Duration &other) const { return Duration(*this) += other; } /** Returns the negative of this duration. */ Duration operator-() const; /** Subtracts another duration from this one. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to subtract */ Duration &operator-=(const Duration &other); /** Returns the difference between another duration and this. If one is in terms of days and the other in terms of seconds, the result is in terms of seconds. @param other the other duration to subtract @return difference in durations */ Duration operator-(const Duration &other) const { return Duration(*this) += other; } /** Multiplies this duration by a value. @param value value to multiply by */ Duration &operator*=(int value); /** Multiplies a duration by a value. @param value value to multiply by @return resultant duration */ Duration operator*(int value) const { return Duration(*this) *= value; } /** Divides this duration by a value. @param value value to divide by */ Duration &operator/=(int value); /** Divides a duration by a value. @param value value to divide by @return resultant duration */ Duration operator/(int value) const { return Duration(*this) /= value; } /** Computes a duration end time by adding the number of seconds or days in the duration to the specified @p start time. @param start is the start time. @return end time. */ Q_REQUIRED_RESULT QDateTime end(const QDateTime &start) const; /** Returns the time units (seconds or days) used to specify the duration. */ Q_REQUIRED_RESULT Type type() const; /** Returns whether the duration is specified in terms of days rather than seconds. */ Q_REQUIRED_RESULT bool isDaily() const; /** Returns the length of the duration in seconds. */ Q_REQUIRED_RESULT int asSeconds() const; /** Returns the length of the duration in days. If the duration is not an exact number of days, it is rounded down to return the number of whole days. */ Q_REQUIRED_RESULT int asDays() const; /** Returns the length of the duration in seconds or days. @return if isDaily(), duration in days, else duration in seconds */ Q_REQUIRED_RESULT int value() const; /** Returns true if the duration is 0 seconds. */ Q_REQUIRED_RESULT bool isNull() const; private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Duration &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Duration &); }; /** * Duration serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::Duration &); /** * Duration deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Duration &); inline uint qHash(const Duration &duration, uint seed = 0) { QtPrivate::QHashCombine hash; seed = hash(seed, duration.isDaily()); seed = hash(seed, duration.asSeconds()); return seed; } } // namespace KCalendarCore Q_DECLARE_METATYPE(KCalendarCore::Duration) #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/event.cpp000066400000000000000000000170441523260663500257550ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Event class. @brief This class provides an Event in the sense of RFC2445. @author Cornelius Schumacher \ */ #include "event.h" #include "utils_p.h" #include "visitor.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Event::Private { public: QDateTime mDtEnd; Transparency mTransparency = Opaque; bool mMultiDayValid = false; bool mMultiDay = false; bool mIsLunnar = false; //是å�¦ä¸ºå†œåކ }; //@endcond Event::Event() : d(new KCalendarCore::Event::Private) { } Event::Event(const Event &other) : Incidence(other) , d(new KCalendarCore::Event::Private(*other.d)) { } Event::Event(const Incidence &other) : Incidence(other) , d(new KCalendarCore::Event::Private) { } Event::~Event() { delete d; } Event *Event::clone() const { return new Event(*this); } IncidenceBase &Event::assign(const IncidenceBase &other) { if (&other != this) { Incidence::assign(other); const Event *e = static_cast(&other); *d = *(e->d); } return *this; } bool Event::equals(const IncidenceBase &event) const { if (!Incidence::equals(event)) { return false; } else { // If they weren't the same type IncidenceBase::equals would had returned false already const Event *e = static_cast(&event); return ((dtEnd() == e->dtEnd()) || (!dtEnd().isValid() && !e->dtEnd().isValid())) && transparency() == e->transparency(); } } Incidence::IncidenceType Event::type() const { return TypeEvent; } QByteArray Event::typeStr() const { return QByteArrayLiteral("Event"); } void Event::setDtStart(const QDateTime &dt) { d->mMultiDayValid = false; Incidence::setDtStart(dt); } void Event::setDtEnd(const QDateTime &dtEnd) { if (mReadOnly) { return; } if (d->mDtEnd != dtEnd || hasDuration() == dtEnd.isValid()) { update(); d->mDtEnd = dtEnd; d->mMultiDayValid = false; setHasDuration(!dtEnd.isValid()); setFieldDirty(FieldDtEnd); updated(); } } QDateTime Event::dtEnd() const { if (d->mDtEnd.isValid()) { return d->mDtEnd; } if (hasDuration()) { if (allDay()) { // For all day events, dtEnd is always inclusive QDateTime end = duration().end(dtStart().addDays(-1)); return end >= dtStart() ? end : dtStart(); } else { return duration().end(dtStart()); } } // It is valid for a VEVENT to be without a DTEND. See RFC2445, Sect4.6.1. // Be careful to use Event::dateEnd() as appropriate due to this possibility. return dtStart(); } QDate Event::dateEnd() const { QDateTime end = dtEnd().toTimeZone(dtStart().timeZone()); if (allDay()) { return end.date(); } else { return end.addSecs(-1).date(); } } bool Event::hasEndDate() const { return d->mDtEnd.isValid(); } bool Event::isMultiDay(const QTimeZone &zone) const { // First off, if spec's not valid, we can check for cache if (!zone.isValid() && d->mMultiDayValid) { return d->mMultiDay; } // Not in cache -> do it the hard way QDateTime start, end; if (!zone.isValid()) { start = dtStart(); end = dtEnd(); } else { start = dtStart().toTimeZone(zone); end = dtEnd().toTimeZone(zone); } bool multi = (start < end && start.date() != end.date()); // End date is non inclusive // If we have an incidence that duration is one day and ends with a start of a new day // than it is not a multiday event if (multi && end.time() == QTime(0, 0, 0)) { multi = start.daysTo(end) > 1; } // Update the cache // Also update Cache if spec is invalid d->mMultiDayValid = true; d->mMultiDay = multi; return multi; } void Event::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { Incidence::shiftTimes(oldZone, newZone); if (d->mDtEnd.isValid()) { d->mDtEnd = d->mDtEnd.toTimeZone(oldZone); d->mDtEnd.setTimeZone(newZone); } } void Event::setTransparency(Event::Transparency transparency) { if (mReadOnly) { return; } update(); d->mTransparency = transparency; setFieldDirty(FieldTransparency); updated(); } Event::Transparency Event::transparency() const { return d->mTransparency; } void Event::setDuration(const Duration &duration) { setDtEnd(QDateTime()); Incidence::setDuration(duration); } void Event::setAllDay(bool allday) { if (allday != allDay() && !mReadOnly) { setFieldDirty(FieldDtEnd); Incidence::setAllDay(allday); } } void Event::setLunnar(bool lunnar) { if (d->mIsLunnar == lunnar) return; update(); d->mIsLunnar = lunnar; updated(); } bool Event::lunnar() const { return d->mIsLunnar; } bool Event::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime Event::dateTime(DateTimeRole role) const { switch (role) { case RoleRecurrenceStart: case RoleAlarmStartOffset: case RoleStartTimeZone: case RoleSort: return dtStart(); case RoleCalendarHashing: return !recurs() && !isMultiDay() ? dtStart() : QDateTime(); case RoleAlarmEndOffset: case RoleEndTimeZone: case RoleEndRecurrenceBase: case RoleEnd: case RoleDisplayEnd: return dtEnd(); case RoleDisplayStart: return dtStart(); case RoleAlarm: if (alarms().isEmpty()) { return QDateTime(); } else { Alarm::Ptr alarm = alarms().at(0); return alarm->hasStartOffset() ? dtStart() : dtEnd(); } default: return QDateTime(); } } void Event::setDateTime(const QDateTime &dateTime, DateTimeRole role) { switch (role) { case RoleDnD: { const qint64 duration = dtStart().secsTo(dtEnd()); setDtStart(dateTime); setDtEnd(dateTime.addSecs(duration <= 0 ? 3600 : duration)); break; } case RoleEnd: setDtEnd(dateTime); break; default: qDebug() << "Unhandled role" << role; } } void Event::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); } QLatin1String KCalendarCore::Event::mimeType() const { return Event::eventMimeType(); } QLatin1String Event::eventMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.event"); } QLatin1String Event::iconName(const QDateTime &) const { return QLatin1String("view-calendar-day"); } void Event::serialize(QDataStream &out) const { Incidence::serialize(out); serializeQDateTimeAsKDateTime(out, d->mDtEnd); out << hasEndDate() << static_cast(d->mTransparency) << d->mMultiDayValid << d->mMultiDay; } void Event::deserialize(QDataStream &in) { Incidence::deserialize(in); bool hasEndDateDummy = true; deserializeKDateTimeAsQDateTime(in, d->mDtEnd); in >> hasEndDateDummy; quint32 transp; in >> transp; d->mTransparency = static_cast(transp); in >> d->mMultiDayValid >> d->mMultiDay; } bool Event::supportsGroupwareCommunication() const { return true; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/event.h000066400000000000000000000170151523260663500254200ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Event class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_EVENT_H #define KCALCORE_EVENT_H #include "incidence.h" #include namespace KCalendarCore { /** @brief This class provides an Event in the sense of RFC2445. 此类æ��ä¾›RFC2445æ„�义上的事件。 */ class Q_CORE_EXPORT Event : public Incidence { Q_GADGET Q_PROPERTY(QDateTime dtEnd READ dtEnd WRITE setDtEnd) Q_PROPERTY(KCalendarCore::Event::Transparency transparency READ transparency WRITE setTransparency) public: /** The different Event transparency types. */ enum Transparency { Opaque, /**< Event appears in free/busy time */ Transparent, /**< Event does @b not appear in free/busy time */ }; Q_ENUM(Transparency) /** A shared pointer to an Event object. */ typedef QSharedPointer Ptr; /** List of events. */ typedef QVector List; ///@cond PRIVATE // needed for Akonadi polymorphic payload support typedef Incidence SuperClass; ///@endcond /** Constructs an event. */ Event(); /** Copy constructor. @param other is the event to copy. */ Event(const Event &other); /** Costructs an event out of an incidence This constructs allows to make it easy to create an event from a todo. @param other is the incidence to copy. @since 4.14 */ Event(const Incidence &other); // krazy:exclude=explicit (copy ctor) /** Destroys the event. */ ~Event() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Returns an exact copy of this Event. The caller owns the returned object. */ Event *clone() const override; /** Sets the incidence starting date/time. 设置事件开始日期/时间。 @param dt is the starting date/time. @see IncidenceBase::dtStart(). */ void setDtStart(const QDateTime &dt) override; /** Sets the event end date and time. Important note for all day events: the end date is inclusive, the event will still occur during dtEnd(). When serializing to iCalendar DTEND will be dtEnd()+1, because the RFC states that DTEND is exclusive. @param dtEnd is a QDateTime specifying when the event ends. @see dtEnd(), dateEnd(). */ void setDtEnd(const QDateTime &dtEnd); /** Returns the event end date and time. Important note for all day events: the returned end date is inclusive, the event will still occur during dtEnd(). When serializing to iCalendar DTEND will be dtEnd()+1, because the RFC states that DTEND is exclusive. @see setDtEnd(). */ virtual QDateTime dtEnd() const; /** Returns the date when the event ends. This might be different from dtEnd().date, since the end date/time is non-inclusive. So timed events ending at 0:00 have their end date on the day before. 返回事件结æ�Ÿçš„æ—¥æœŸã€‚è¿™å�¯èƒ½ä¸ŽdtEnd()的日期ä¸�å�Œï¼Œå› ä¸ºç»“æ�Ÿæ—¥æœŸ/æ—¶é—´ä¸�包括在内。因此,在0:00结æ�Ÿçš„定时事件的结æ�Ÿæ—¥æœŸä¸ºå‰�一天 */ Q_REQUIRED_RESULT QDate dateEnd() const; /** Returns whether the event has an end date/time. */ Q_REQUIRED_RESULT bool hasEndDate() const; /** Returns true if the event spans multiple days, otherwise return false. 如果事件跨越多天,则返回true,å�¦åˆ™è¿”回false。 For recurring events, it returns true if the first occurrence spans multiple days, otherwise returns false. Other occurrences might have a different span due to day light savings changes. 对于é‡�å¤�å�‘生的事件,如果第一次å�‘生跨越多天,则返回true,å�¦åˆ™è¿”回false。由于日光节约的å�˜åŒ–,其他事件å�¯èƒ½ä¼šæœ‰ä¸�å�Œçš„跨度 @param zone If set, looks if the event is multiday for the given zone. If not set, looks if event this multiday for its zone. */ Q_REQUIRED_RESULT bool isMultiDay(const QTimeZone &zone = {}) const; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** Sets the event's time transparency level. 设置事件的时间é€�明度级别。 @param transparency is the event Transparency level. */ void setTransparency(Transparency transparency); /** Returns the event's time transparency level. */ Q_REQUIRED_RESULT Transparency transparency() const; /** Sets the duration of this event. 设置此事件的æŒ�续时间。 @param duration is the event Duration. */ void setDuration(const Duration &duration) override; /** @copydoc IncidenceBase::setAllDay(). */ void setAllDay(bool allDay) override; //设置是å�¦ä¸ºå†œåŽ†æ—¥ç¨‹ void setLunnar(bool lunnar); bool lunnar() const; /** @copydoc IncidenceBase::dateTime() */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime() */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** @copydoc Incidence::iconName() */ Q_REQUIRED_RESULT QLatin1String iconName(const QDateTime &recurrenceId = {}) const override; /** @copydoc Incidence::supportsGroupwareCommunication() 支æŒ�群件通信 */ Q_REQUIRED_RESULT bool supportsGroupwareCommunication() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::Event. */ Q_REQUIRED_RESULT static QLatin1String eventMimeType(); protected: /** Compares two events for equality. 比较两个事件是å�¦ç›¸ç­‰ã€‚ @param event is the event to compare. */ bool equals(const IncidenceBase &event) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept() */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass Event. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another Event object to assign to this one. */ Event &operator=(const Event &other); // For polymorfic serialization void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Event::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Event::Ptr) Q_DECLARE_METATYPE(KCalendarCore::Event *) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/exceptions.cpp000066400000000000000000000022631523260663500270120ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Exception class. We don't use actual C++ exceptions right now. These classes are currently returned by an error function; but we can build upon them, if/when we start to use C++ exceptions. @brief Exception base class. @author Cornelius Schumacher \ */ #include "exceptions.h" #include "calformat.h" using namespace KCalendarCore; namespace KCalendarCore { class ExceptionPrivate { public: /** The current exception code. */ Exception::ErrorCode mCode; /** Arguments to pass to i18n(). */ QStringList mArguments; }; } // namespace KCalendarCore Exception::Exception(const ErrorCode code, const QStringList &arguments) : d(new ExceptionPrivate) { d->mCode = code; d->mArguments = arguments; } Exception::~Exception() { } Exception::ErrorCode Exception::code() const { return d->mCode; } QStringList Exception::arguments() const { return d->mArguments; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/exceptions.h000066400000000000000000000052601523260663500264570ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Exception class. We don't use actual C++ exceptions right now. These classes are currently returned by an error function; but we can build upon them, if/when we start to use C++ exceptions. @brief Exception base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_EXCEPTIONS_H #define KCALCORE_EXCEPTIONS_H #include #include #include namespace KCalendarCore { class ExceptionPrivate; /** Exception base class, currently used as a fancy kind of error code and not as an C++ exception. */ class Q_CORE_EXPORT Exception { public: /** The different types of error codes */ enum ErrorCode { LoadError, /**< Load error */ SaveError, /**< Save error */ ParseErrorIcal, /**< Parse error in libical */ ParseErrorKcal, /**< Parse error in libkcal */ NoCalendar, /**< No calendar component found */ CalVersion1, /**< vCalendar v1.0 detected */ CalVersion2, /**< iCalendar v2.0 detected */ CalVersionUnknown, /**< Unknown calendar format detected */ Restriction, /**< Restriction violation */ UserCancel, /**< User canceled the operation */ NoWritableFound, /**< No writable resource is available */ SaveErrorOpenFile, SaveErrorSaveFile, LibICalError, VersionPropertyMissing, ExpectedCalVersion2, ExpectedCalVersion2Unknown, ParseErrorNotIncidence, ParseErrorEmptyMessage, ParseErrorUnableToParse, ParseErrorMethodProperty, }; /** Construct an exception. @param code is the error code. @param arguments is a list of arguments that can be passed to an i18n engine to help build a descriptive message for the user, a common argument is for example the filename where the error occurred. */ explicit Exception(const ErrorCode code, const QStringList &arguments = QStringList()); /** Destructor. */ virtual ~Exception(); /** Returns the error code. @return The ErrorCode for this exception. */ Q_REQUIRED_RESULT virtual ErrorCode code() const; /** Returns the arguments. @return A QStringList with the argument list for this exception. */ Q_REQUIRED_RESULT virtual QStringList arguments() const; private: std::unique_ptr d; }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/filestorage.cpp000066400000000000000000000101451523260663500271330ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FileStorage class. @brief This class provides a calendar storage as a local file. @author Cornelius Schumacher \ */ #include "filestorage.h" #include "exceptions.h" #include "icalformat.h" #include "memorycalendar.h" #include "vcalformat.h" #include using namespace KCalendarCore; /* Private class that helps to provide binary compatibility between releases. */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::FileStorage::Private { public: Private(const QString &fileName, CalFormat *format) : mFileName(fileName) , mSaveFormat(format) { } ~Private() { delete mSaveFormat; } QString mFileName; CalFormat *mSaveFormat = nullptr; }; //@endcond FileStorage::FileStorage(const Calendar::Ptr &cal, const QString &fileName, CalFormat *format) : CalStorage(cal) , d(new Private(fileName, format)) { } FileStorage::~FileStorage() { delete d; } void FileStorage::setFileName(const QString &fileName) { d->mFileName = fileName; } QString FileStorage::fileName() const { return d->mFileName; } void FileStorage::setSaveFormat(CalFormat *format) { delete d->mSaveFormat; d->mSaveFormat = format; } CalFormat *FileStorage::saveFormat() const { return d->mSaveFormat; } bool FileStorage::open() { return true; } bool FileStorage::load() { if (d->mFileName.isEmpty()) { qWarning() << "Empty filename while trying to load"; return false; } // Always try to load with iCalendar. It will detect, if it is actually a // vCalendar file. bool success; QString productId; // First try the supplied format. Otherwise fall through to iCalendar, then // to vCalendar success = saveFormat() && saveFormat()->load(calendar(), d->mFileName); if (success) { productId = saveFormat()->loadedProductId(); } else { ICalFormat iCal; success = iCal.load(calendar(), d->mFileName); if (success) { productId = iCal.loadedProductId(); } else { if (iCal.exception()) { if ((iCal.exception()->code() == Exception::ParseErrorIcal) || (iCal.exception()->code() == Exception::CalVersion1)) { // Possible vCalendar or invalid iCalendar encountered qDebug() << d->mFileName << " is an invalid iCalendar or possibly a vCalendar."; qDebug() << "Try to load it as a vCalendar"; VCalFormat vCal; success = vCal.load(calendar(), d->mFileName); productId = vCal.loadedProductId(); if (!success) { if (vCal.exception()) { qWarning() << d->mFileName << " is not a valid vCalendar file." << " exception code " << vCal.exception()->code(); } return false; } } else { return false; } } else { qWarning() << "There should be an exception set."; return false; } } } calendar()->setProductId(productId); calendar()->setModified(false); return true; } bool FileStorage::save() { if (d->mFileName.isEmpty()) { return false; } CalFormat *format = d->mSaveFormat ? d->mSaveFormat : new ICalFormat; bool success = format->save(calendar(), d->mFileName); if (success) { calendar()->setModified(false); } else { if (!format->exception()) { qDebug() << "Error. There should be an exception set."; } else { qDebug() << int(format->exception()->code()); } } if (!d->mSaveFormat) { delete format; } return success; } bool FileStorage::close() { return true; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/filestorage.h000066400000000000000000000057411523260663500266060ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2002, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FileStorage class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_FILESTORAGE_H #define KCALCORE_FILESTORAGE_H #include "calstorage.h" namespace KCalendarCore { class CalFormat; class Calendar; /** @brief This class provides a calendar storage as a local file. 此类将日历存储作为本地文件æ��供。 */ class Q_CORE_EXPORT FileStorage : public CalStorage { Q_OBJECT public: /** A shared pointer to a FileStorage. */ typedef QSharedPointer Ptr; /** Constructs a new FileStorage object for Calendar @p calendar with format @p format, and storage to file @p fileName. @param calendar is a pointer to a valid Calendar object. @param fileName is the name of the disk file containing the calendar data. @param format is a pointer to a valid CalFormat object that specifies the calendar format to be used. FileStorage takes ownership; i.e., the memory for @p format is deleted by this destructor. If no format is specified, then iCalendar format is assumed. */ explicit FileStorage(const Calendar::Ptr &calendar, const QString &fileName = QString(), KCalendarCore::CalFormat *format = nullptr); /** Destructor. */ ~FileStorage() override; /** Sets the name of the file that contains the calendar data. @param fileName is the name of the disk file containing the calendar data. @see fileName(). */ void setFileName(const QString &fileName); /** Returns the calendar file name. @return A QString with the name of the calendar file for this storge. @see setFileName(). */ Q_REQUIRED_RESULT QString fileName() const; /** Sets the CalFormat object to use for this storage. @param format is a pointer to a valid CalFormat object that specifies the calendar format to be used. FileStorage takes ownership. @see saveFormat(). */ void setSaveFormat(KCalendarCore::CalFormat *format); /** Returns the CalFormat object used by this storage. @return A pointer to the CalFormat object used by this storage. @see setSaveFormat(). */ CalFormat *saveFormat() const; /** @copydoc CalStorage::open() */ Q_REQUIRED_RESULT bool open() override; /** @copydoc CalStorage::load() */ Q_REQUIRED_RESULT bool load() override; /** @copydoc CalStorage::save() */ Q_REQUIRED_RESULT bool save() override; /** @copydoc CalStorage::close() */ Q_REQUIRED_RESULT bool close() override; private: //@cond PRIVATE Q_DISABLE_COPY(FileStorage) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/freebusy.cpp000066400000000000000000000261421523260663500264570ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusy class. @brief Provides information about the free/busy time of a calendar user. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "freebusy.h" #include "utils_p.h" #include "visitor.h" #include "icalformat.h" #include #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::FreeBusy::Private { private: FreeBusy *q; public: Private(FreeBusy *qq) : q(qq) { } Private(const KCalendarCore::FreeBusy::Private &other, FreeBusy *qq) : q(qq) { init(other); } Private(const FreeBusyPeriod::List &busyPeriods, FreeBusy *qq) : q(qq) , mBusyPeriods(busyPeriods) { } void init(const KCalendarCore::FreeBusy::Private &other); void init(const Event::List &events, const QDateTime &start, const QDateTime &end); QDateTime mDtEnd; // end datetime FreeBusyPeriod::List mBusyPeriods; // list of periods // This is used for creating a freebusy object for the current user bool addLocalPeriod(FreeBusy *fb, const QDateTime &start, const QDateTime &end); }; void KCalendarCore::FreeBusy::Private::init(const KCalendarCore::FreeBusy::Private &other) { mDtEnd = other.mDtEnd; mBusyPeriods = other.mBusyPeriods; } //@endcond FreeBusy::FreeBusy() : d(new KCalendarCore::FreeBusy::Private(this)) { } FreeBusy::FreeBusy(const FreeBusy &other) : IncidenceBase(other) , d(new KCalendarCore::FreeBusy::Private(*other.d, this)) { } FreeBusy::FreeBusy(const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::FreeBusy::Private(this)) { setDtStart(start); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall setDtEnd(end); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall } FreeBusy::FreeBusy(const Event::List &events, const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::FreeBusy::Private(this)) { setDtStart(start); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall setDtEnd(end); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall d->init(events, start, end); } //@cond PRIVATE void FreeBusy::Private::init(const Event::List &eventList, const QDateTime &start, const QDateTime &end) { const qint64 duration = start.daysTo(end); QDate day; QDateTime tmpStart; QDateTime tmpEnd; // Loops through every event in the calendar Event::List::ConstIterator it; for (it = eventList.constBegin(); it != eventList.constEnd(); ++it) { Event::Ptr event = *it; // If this event is transparent it shouldn't be in the freebusy list. if (event->transparency() == Event::Transparent) { continue; } // The code below can not handle all-day events. Fixing this resulted // in a lot of duplicated code. Instead, make a copy of the event and // set the period to the full day(s). This trick works for recurring, // multiday, and single day all-day events. Event::Ptr allDayEvent; if (event->allDay()) { // addDay event. Do the hack qDebug() << "All-day event"; allDayEvent = Event::Ptr(new Event(*event)); // Set the start and end times to be on midnight QDateTime st = allDayEvent->dtStart(); st.setTime(QTime(0, 0)); QDateTime nd = allDayEvent->dtEnd(); nd.setTime(QTime(23, 59, 59, 999)); allDayEvent->setAllDay(false); allDayEvent->setDtStart(st); allDayEvent->setDtEnd(nd); qDebug() << "Use:" << st.toString() << "to" << nd.toString(); // Finally, use this event for the setting below event = allDayEvent; } // This whole for loop is for recurring events, it loops through // each of the days of the freebusy request for (qint64 i = 0; i <= duration; ++i) { day = start.addDays(i).date(); tmpStart.setDate(day); tmpEnd.setDate(day); if (event->recurs()) { if (event->isMultiDay()) { // FIXME: This doesn't work for sub-daily recurrences or recurrences with // a different time than the original event. const qint64 extraDays = event->dtStart().daysTo(event->dtEnd()); for (qint64 x = 0; x <= extraDays; ++x) { if (event->recursOn(day.addDays(-x), start.timeZone())) { tmpStart.setDate(day.addDays(-x)); tmpStart.setTime(event->dtStart().time()); tmpEnd = event->duration().end(tmpStart); addLocalPeriod(q, tmpStart, tmpEnd); break; } } } else { if (event->recursOn(day, start.timeZone())) { tmpStart.setTime(event->dtStart().time()); tmpEnd.setTime(event->dtEnd().time()); addLocalPeriod(q, tmpStart, tmpEnd); } } } } // Non-recurring events addLocalPeriod(q, event->dtStart(), event->dtEnd()); } q->sortList(); } //@endcond FreeBusy::FreeBusy(const Period::List &busyPeriods) : d(new KCalendarCore::FreeBusy::Private(this)) { addPeriods(busyPeriods); } FreeBusy::FreeBusy(const FreeBusyPeriod::List &busyPeriods) : d(new KCalendarCore::FreeBusy::Private(busyPeriods, this)) { } FreeBusy::~FreeBusy() { delete d; } IncidenceBase::IncidenceType FreeBusy::type() const { return TypeFreeBusy; } QByteArray FreeBusy::typeStr() const { return QByteArrayLiteral("FreeBusy"); } void FreeBusy::setDtStart(const QDateTime &start) { IncidenceBase::setDtStart(start.toUTC()); updated(); } void FreeBusy::setDtEnd(const QDateTime &end) { d->mDtEnd = end; } QDateTime FreeBusy::dtEnd() const { return d->mDtEnd; } Period::List FreeBusy::busyPeriods() const { Period::List res; res.reserve(d->mBusyPeriods.count()); for (const FreeBusyPeriod &p : qAsConst(d->mBusyPeriods)) { res << p; } return res; } FreeBusyPeriod::List FreeBusy::fullBusyPeriods() const { return d->mBusyPeriods; } void FreeBusy::sortList() { std::sort(d->mBusyPeriods.begin(), d->mBusyPeriods.end()); } void FreeBusy::addPeriods(const Period::List &list) { d->mBusyPeriods.reserve(d->mBusyPeriods.count() + list.count()); for (const Period &p : qAsConst(list)) { d->mBusyPeriods << FreeBusyPeriod(p); } sortList(); } void FreeBusy::addPeriods(const FreeBusyPeriod::List &list) { d->mBusyPeriods += list; sortList(); } void FreeBusy::addPeriod(const QDateTime &start, const QDateTime &end) { d->mBusyPeriods.append(FreeBusyPeriod(start, end)); sortList(); } void FreeBusy::addPeriod(const QDateTime &start, const Duration &duration) { d->mBusyPeriods.append(FreeBusyPeriod(start, duration)); sortList(); } void FreeBusy::merge(const FreeBusy::Ptr &freeBusy) { if (freeBusy->dtStart() < dtStart()) { setDtStart(freeBusy->dtStart()); } if (freeBusy->dtEnd() > dtEnd()) { setDtEnd(freeBusy->dtEnd()); } Period::List periods = freeBusy->busyPeriods(); Period::List::ConstIterator it; d->mBusyPeriods.reserve(d->mBusyPeriods.count() + periods.count()); for (it = periods.constBegin(); it != periods.constEnd(); ++it) { d->mBusyPeriods.append(FreeBusyPeriod((*it).start(), (*it).end())); } sortList(); } void FreeBusy::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { if (oldZone.isValid() && newZone.isValid() && oldZone != newZone) { IncidenceBase::shiftTimes(oldZone, newZone); d->mDtEnd = d->mDtEnd.toTimeZone(oldZone); d->mDtEnd.setTimeZone(newZone); for (FreeBusyPeriod p : qAsConst(d->mBusyPeriods)) { p.shiftTimes(oldZone, newZone); } } } IncidenceBase &FreeBusy::assign(const IncidenceBase &other) { if (&other != this) { IncidenceBase::assign(other); const FreeBusy *f = static_cast(&other); d->init(*(f->d)); } return *this; } bool FreeBusy::equals(const IncidenceBase &freeBusy) const { if (!IncidenceBase::equals(freeBusy)) { return false; } else { // If they weren't the same type IncidenceBase::equals would had returned false already const FreeBusy *fb = static_cast(&freeBusy); return dtEnd() == fb->dtEnd() && d->mBusyPeriods == fb->d->mBusyPeriods; } } bool FreeBusy::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime FreeBusy::dateTime(DateTimeRole role) const { Q_UNUSED(role); // No roles affecting freeBusy yet return QDateTime(); } void FreeBusy::setDateTime(const QDateTime &dateTime, DateTimeRole role) { Q_UNUSED(dateTime); Q_UNUSED(role); } void FreeBusy::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } //@cond PRIVATE bool FreeBusy::Private::addLocalPeriod(FreeBusy *fb, const QDateTime &eventStart, const QDateTime &eventEnd) { QDateTime tmpStart; QDateTime tmpEnd; // Check to see if the start *or* end of the event is // between the start and end of the freebusy dates. QDateTime start = fb->dtStart(); if (!(((start.secsTo(eventStart) >= 0) && (eventStart.secsTo(mDtEnd) >= 0)) || ((start.secsTo(eventEnd) >= 0) && (eventEnd.secsTo(mDtEnd) >= 0)))) { return false; } if (eventStart.secsTo(start) >= 0) { tmpStart = start; } else { tmpStart = eventStart; } if (eventEnd.secsTo(mDtEnd) <= 0) { tmpEnd = mDtEnd; } else { tmpEnd = eventEnd; } FreeBusyPeriod p(tmpStart, tmpEnd); mBusyPeriods.append(p); return true; } //@endcond QLatin1String FreeBusy::mimeType() const { return FreeBusy::freeBusyMimeType(); } QLatin1String KCalendarCore::FreeBusy::freeBusyMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.freebusy"); } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::FreeBusy::Ptr &freebusy) { KCalendarCore::ICalFormat format; QString data = format.createScheduleMessage(freebusy, iTIPPublish); return stream << data; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::FreeBusy::Ptr &freebusy) { QString freeBusyVCal; stream >> freeBusyVCal; KCalendarCore::ICalFormat format; freebusy = format.parseFreeBusy(freeBusyVCal); if (!freebusy) { qDebug() << "Error parsing free/busy"; qDebug() << freeBusyVCal; } return stream; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/freebusy.h000066400000000000000000000164271523260663500261310ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusy class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_FREEBUSY_H #define KCALCORE_FREEBUSY_H #include "event.h" #include "freebusyperiod.h" #include "incidencebase.h" #include "period.h" #include namespace KCalendarCore { class FreeBusy; /** @brief Provides information about the free/busy time of a calendar. A free/busy is a collection of Periods. @see Period. */ class Q_CORE_EXPORT FreeBusy : public IncidenceBase { friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::FreeBusy::Ptr &freebusy); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::FreeBusy::Ptr &freebusy); public: /** A shared pointer to a FreeBusy object. */ typedef QSharedPointer Ptr; /** List of FreeBusy objects. */ typedef QVector List; /** Constructs an free/busy without any periods. */ FreeBusy(); /** Copy constructor. @param other is the free/busy to copy. */ FreeBusy(const FreeBusy &other); /** Constructs a free/busy from a list of periods. @param busyPeriods is a list of periods. */ explicit FreeBusy(const Period::List &busyPeriods); /** Constructs a free/busy from a list of periods. @param busyPeriods is a list of periods. */ explicit FreeBusy(const FreeBusyPeriod::List &busyPeriods); /** Constructs a free/busy from a single period. @param start is the start date/time of the period. @param end is the end date/time of the period. */ FreeBusy(const QDateTime &start, const QDateTime &end); /** Constructs a freebusy for a specified list of events given a single period. @param events list of events. @param start is the start date/time of the period. @param end is the end date/time of the period. */ FreeBusy(const Event::List &events, const QDateTime &start, const QDateTime &end); /** Destroys a free/busy. */ ~FreeBusy() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Sets the start date/time for the free/busy. Note that this date/time may be later or earlier than all periods within the free/busy. @param start is a QDateTime specifying an start datetime. @see IncidenceBase::dtStart(), setDtEnd(). */ void setDtStart(const QDateTime &start) override; /** Sets the end datetime for the free/busy. Note that this datetime may be later or earlier than all periods within the free/busy. @param end is a QDateTime specifying an end datetime. @see dtEnd(), setDtStart(). */ void setDtEnd(const QDateTime &end); /** Returns the end datetime for the free/busy. FIXME: calling addPeriod() does not change mDtEnd. Is that incorrect? @see setDtEnd(). */ Q_REQUIRED_RESULT virtual QDateTime dtEnd() const; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** Returns the list of all periods within the free/busy. */ Q_REQUIRED_RESULT Period::List busyPeriods() const; /** Returns the list of all periods within the free/busy. */ Q_REQUIRED_RESULT FreeBusyPeriod::List fullBusyPeriods() const; /** Adds a period to the freebusy list and sorts the list. @param start is the start datetime of the period. @param end is the end datetime of the period. */ void addPeriod(const QDateTime &start, const QDateTime &end); /** Adds a period to the freebusy list and sorts the list. @param start is the start datetime of the period. @param duration is the Duration of the period. */ void addPeriod(const QDateTime &start, const Duration &duration); /** Adds a list of periods to the freebusy object and then sorts that list. Use this if you are adding many items, instead of the addPeriod method, to avoid sorting repeatedly. @param list is a list of Period objects. */ void addPeriods(const Period::List &list); /** Adds a list of periods to the freebusy object and then sorts that list. Use this if you are adding many items, instead of the addPeriod method, to avoid sorting repeatedly. @param list is a list of FreeBusyPeriod objects. */ void addPeriods(const FreeBusyPeriod::List &list); /** Sorts the list of free/busy periods into ascending order. */ void sortList(); /** Merges another free/busy into this free/busy. @param freebusy is a pointer to a valid FreeBusy object. */ void merge(const FreeBusy::Ptr &freebusy); /** @copydoc IncidenceBase::dateTime() */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime() */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::FreeBusy. */ Q_REQUIRED_RESULT static QLatin1String freeBusyMimeType(); protected: /** Compare this with @p freebusy for equality. @param freebusy is the FreeBusy to compare. */ bool equals(const IncidenceBase &freebusy) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept() */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass FreeBusy. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another FreeBusy object to assign to this one. */ FreeBusy &operator=(const FreeBusy &other); //@cond PRIVATE class Private; Private *const d; //@endcond }; /** Serializes the @p freebusy object into the @p stream. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::FreeBusy::Ptr &freebusy); /** Initializes the @p freebusy object from the @p stream. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::FreeBusy::Ptr &freebusy); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::FreeBusy::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::FreeBusy::Ptr) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/freebusycache.cpp000066400000000000000000000010661523260663500274410ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2004 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusyCache abstract base class. @author Cornelius Schumacher \ */ #include "freebusycache.h" using namespace KCalendarCore; FreeBusyCache::~FreeBusyCache() { } void FreeBusyCache::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/freebusycache.h000066400000000000000000000032341523260663500271050ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2004 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusyCache abstract base class. @author Cornelius Schumacher \ */ #ifndef KCALCORE_FREEBUSYCACHE_H #define KCALCORE_FREEBUSYCACHE_H #include "freebusy.h" class QString; namespace KCalendarCore { class Person; /** @brief An abstract base class to allow different implementations of storing free busy information, e.g. local storage or storage on a Kolab server. */ class Q_CORE_EXPORT FreeBusyCache { public: /** Destructor. */ virtual ~FreeBusyCache(); /** Save freebusy information belonging to an email. @param freebusy is a pointer to a valid FreeBusy instance. @param person is a valid Person instance. @return true if the save was successful; false otherwise. */ virtual bool saveFreeBusy(const FreeBusy::Ptr &freebusy, const Person &person) = 0; /** Load freebusy information belonging to an email. @param email is a QString containing a email string in the "FirstName LastName " format. @return A pointer to the FreeBusy object loaded for the specified email; returns 0 if there was some problem attempting to load the FreeBusy information. */ virtual FreeBusy::Ptr loadFreeBusy(const QString &email) = 0; protected: /** @copydoc IncidenceBase::virtual_hook() */ virtual void virtual_hook(int id, void *data); }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/freebusyperiod.cpp000066400000000000000000000056311523260663500276620ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the FreeBusyPeriod class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #include "freebusyperiod.h" using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::FreeBusyPeriod::Private { public: Private() : mType(Unknown) { } QString mSummary; QString mLocation; FreeBusyType mType; }; //@endcond FreeBusyPeriod::FreeBusyPeriod() : Period() , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::FreeBusyPeriod(const QDateTime &start, const QDateTime &end) : Period(start, end) , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::FreeBusyPeriod(const QDateTime &start, const Duration &duration) : Period(start, duration) , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::FreeBusyPeriod(const FreeBusyPeriod &period) : Period(period) , d(new KCalendarCore::FreeBusyPeriod::Private(*period.d)) { } FreeBusyPeriod::FreeBusyPeriod(const Period &period) : Period(period) , d(new KCalendarCore::FreeBusyPeriod::Private()) { } FreeBusyPeriod::~FreeBusyPeriod() { delete d; } FreeBusyPeriod &FreeBusyPeriod::operator=(const FreeBusyPeriod &other) { // check for self assignment if (&other == this) { return *this; } Period::operator=(other); *d = *other.d; return *this; } QString FreeBusyPeriod::summary() const { return d->mSummary; } void FreeBusyPeriod::setSummary(const QString &summary) { d->mSummary = summary; } QString FreeBusyPeriod::location() const { return d->mLocation; } void FreeBusyPeriod::setLocation(const QString &location) { d->mLocation = location; } FreeBusyPeriod::FreeBusyType FreeBusyPeriod::type() const { return d->mType; } void FreeBusyPeriod::setType(FreeBusyPeriod::FreeBusyType type) { d->mType = type; } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::FreeBusyPeriod &period) { KCalendarCore::Period periodParent = static_cast(period); stream << periodParent; stream << period.summary() << period.location() << static_cast(period.type()); return stream; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, FreeBusyPeriod &period) { KCalendarCore::Period periodParent; QString summary, location; int type; stream >> periodParent >> summary >> location >> type; period = periodParent; period.setLocation(location); period.setSummary(summary); period.setType(static_cast(type)); return stream; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/freebusyperiod.h000066400000000000000000000072061523260663500273270ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Period class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #ifndef KCALCORE_FREEBUSYPERIOD_H #define KCALCORE_FREEBUSYPERIOD_H #include "period.h" #include namespace KCalendarCore { /** The period can be defined by either a start time and an end time or by a start time and a duration. */ class Q_CORE_EXPORT FreeBusyPeriod : public Period { public: enum FreeBusyType { Free, Busy, BusyUnavailable, BusyTentative, Unknown, }; /** List of periods. */ typedef QVector List; /** Constructs a period without a duration. */ FreeBusyPeriod(); /** Constructs a period from @p start to @p end. @param start the time the period begins. @param end the time the period ends. */ FreeBusyPeriod(const QDateTime &start, const QDateTime &end); /** Constructs a period from @p start and lasting @p duration. @param start the time when the period starts. @param duration how long the period lasts. */ FreeBusyPeriod(const QDateTime &start, const Duration &duration); /** Constructs a period by copying another period object @param period the period to copy */ FreeBusyPeriod(const FreeBusyPeriod &period); /** Constructs a period by copying another period object @param period the period to copy */ FreeBusyPeriod(const Period &period); // krazy:exclude=explicit /** Destroys a period. */ ~FreeBusyPeriod(); /** Sets this period equal to the @p other one. @param other is the other period to compare. */ FreeBusyPeriod &operator=(const FreeBusyPeriod &other); /** Sets the period summary. @param summary is the period summary string. @see summary(). */ void setSummary(const QString &summary); /** Returns the period summary. @see setSummary() */ Q_REQUIRED_RESULT QString summary() const; /** Sets the period location. @param location is the period location string. @see location(). */ void setLocation(const QString &location); /** Returns the period location. @see setLocation() */ Q_REQUIRED_RESULT QString location() const; /** Sets the free/busy type. @param type is the type of free/busy period @see type(). @since 5.0 */ void setType(FreeBusyType type); /** Returns free/busy type @see setType(). @since 5.0 */ Q_REQUIRED_RESULT FreeBusyType type() const; private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::FreeBusyPeriod &period); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::FreeBusyPeriod &period); }; /** Write @p period to the datastream @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::FreeBusyPeriod &period); /** Read a Period object into @p period from @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::FreeBusyPeriod &period); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_METATYPE(KCalendarCore::FreeBusyPeriod) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/icalformat.cpp000066400000000000000000000501371523260663500267550ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the ICalFormat class. @brief iCalendar format implementation: a layer of abstraction for libical. @author Cornelius Schumacher \ */ #include "icalformat.h" #include "calendar_p.h" #include "icalformat_p.h" #include "icaltimezones_p.h" #include "memorycalendar.h" #include #include #include #include extern "C" { #include "libical/ical.h" #include "libical/icalmemory.h" #include "libical/icalparser.h" #include "libical/icalrestriction.h" #include "libical/icalss.h" } using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::ICalFormat::Private { public: Private(ICalFormat *parent) : mImpl(new ICalFormatImpl(parent)) , mTimeZone(QTimeZone::utc()) { } ~Private() { delete mImpl; } ICalFormatImpl *mImpl = nullptr; QTimeZone mTimeZone; }; //@endcond ICalFormat::ICalFormat() : d(new Private(this)) { } ICalFormat::~ICalFormat() { icalmemory_free_ring(); delete d; } bool ICalFormat::load(const Calendar::Ptr &calendar, const QString &fileName) { qDebug() << fileName; clearException(); QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) { qCritical() << "load error: unable to open " << fileName; setException(new Exception(Exception::LoadError)); return false; } const QByteArray text = file.readAll().trimmed(); file.close(); if (!text.isEmpty()) { if (!fromRawString(calendar, text, false, fileName)) { qWarning() << fileName << " is not a valid iCalendar file"; setException(new Exception(Exception::ParseErrorIcal)); return false; } } // Note: we consider empty files to be valid return true; } bool ICalFormat::save(const Calendar::Ptr &calendar, const QString &fileName) { qDebug() << fileName; clearException(); QString text = toString(calendar); if (text.isEmpty()) { return false; } // Write backup file const QString backupFile = fileName + QLatin1Char('~'); QFile::remove(backupFile); QFile::copy(fileName, backupFile); QSaveFile file(fileName); if (!file.open(QIODevice::WriteOnly)) { qCritical() << "file open error: " << file.errorString() << ";filename=" << fileName; setException(new Exception(Exception::SaveErrorOpenFile, QStringList(fileName))); return false; } // Convert to UTF8 and save QByteArray textUtf8 = text.toUtf8(); file.write(textUtf8.data(), textUtf8.size()); // QSaveFile doesn't report a write error when the device is full (see Qt // bug 75077), so check that the data can actually be written. if (!file.flush()) { qDebug() << "file write error (flush failed)"; setException(new Exception(Exception::SaveErrorSaveFile, QStringList(fileName))); return false; } if (!file.commit()) { qDebug() << "file finalize error:" << file.errorString(); setException(new Exception(Exception::SaveErrorSaveFile, QStringList(fileName))); return false; } return true; } bool ICalFormat::fromString(const Calendar::Ptr &cal, const QString &string, bool deleted, const QString ¬ebook) { return fromRawString(cal, string.toUtf8(), deleted, notebook); } Incidence::Ptr ICalFormat::readIncidence(const QByteArray &string) { // Let's defend const correctness until the very gates of hell^Wlibical icalcomponent *calendar = icalcomponent_new_from_string(const_cast(string.constData())); if (!calendar) { qCritical() << "parse error from icalcomponent_new_from_string. string=" << QString::fromLatin1(string); setException(new Exception(Exception::ParseErrorIcal)); return Incidence::Ptr(); } ICalTimeZoneCache tzCache; ICalTimeZoneParser parser(&tzCache); parser.parse(calendar); Incidence::Ptr incidence; if (icalcomponent_isa(calendar) == ICAL_VCALENDAR_COMPONENT) { incidence = d->mImpl->readOneIncidence(calendar, &tzCache); } else if (icalcomponent_isa(calendar) == ICAL_XROOT_COMPONENT) { icalcomponent *comp = icalcomponent_get_first_component(calendar, ICAL_VCALENDAR_COMPONENT); if (comp) { incidence = d->mImpl->readOneIncidence(comp, &tzCache); } } if (!incidence) { qDebug() << "No VCALENDAR component found"; setException(new Exception(Exception::NoCalendar)); } icalcomponent_free(calendar); icalmemory_free_ring(); return incidence; } bool ICalFormat::fromRawString(const Calendar::Ptr &cal, const QByteArray &string, bool deleted, const QString ¬ebook) { Q_UNUSED(notebook); // Get first VCALENDAR component. // TODO: Handle more than one VCALENDAR or non-VCALENDAR top components icalcomponent *calendar; // Let's defend const correctness until the very gates of hell^Wlibical calendar = icalcomponent_new_from_string(const_cast(string.constData())); if (!calendar) { qCritical() << "parse error from icalcomponent_new_from_string. string=" << QString::fromLatin1(string); setException(new Exception(Exception::ParseErrorIcal)); return false; } bool success = true; if (icalcomponent_isa(calendar) == ICAL_XROOT_COMPONENT) { icalcomponent *comp; for (comp = icalcomponent_get_first_component(calendar, ICAL_VCALENDAR_COMPONENT); comp; comp = icalcomponent_get_next_component(calendar, ICAL_VCALENDAR_COMPONENT)) { // put all objects into their proper places if (!d->mImpl->populate(cal, comp, deleted)) { qCritical() << "Could not populate calendar"; if (!exception()) { setException(new Exception(Exception::ParseErrorKcal)); } success = false; } else { setLoadedProductId(d->mImpl->loadedProductId()); } } } else if (icalcomponent_isa(calendar) != ICAL_VCALENDAR_COMPONENT) { qDebug() << "No VCALENDAR component found"; setException(new Exception(Exception::NoCalendar)); success = false; } else { // put all objects into their proper places if (!d->mImpl->populate(cal, calendar, deleted)) { qDebug() << "Could not populate calendar"; if (!exception()) { setException(new Exception(Exception::ParseErrorKcal)); } success = false; } else { setLoadedProductId(d->mImpl->loadedProductId()); } } icalcomponent_free(calendar); icalmemory_free_ring(); return success; } Incidence::Ptr ICalFormat::fromString(const QString &string) { MemoryCalendar::Ptr cal(new MemoryCalendar(d->mTimeZone)); fromString(cal, string); const Incidence::List list = cal->incidences(); return !list.isEmpty() ? list.first() : Incidence::Ptr(); } QString ICalFormat::toString(const Calendar::Ptr &cal, const QString ¬ebook, bool deleted) { icalcomponent *calendar = d->mImpl->createCalendarComponent(cal); icalcomponent *component; QVector tzUsedList; TimeZoneEarliestDate earliestTz; // todos Todo::List todoList = deleted ? cal->deletedTodos() : cal->rawTodos(); for (auto it = todoList.cbegin(), end = todoList.cend(); it != end; ++it) { if (!deleted || !cal->todo((*it)->uid(), (*it)->recurrenceId())) { // use existing ones, or really deleted ones if (notebook.isEmpty() || (!cal->notebook(*it).isEmpty() && notebook.endsWith(cal->notebook(*it)))) { component = d->mImpl->writeTodo(*it, &tzUsedList); icalcomponent_add_component(calendar, component); ICalTimeZoneParser::updateTzEarliestDate((*it), &earliestTz); } } } // events Event::List events = deleted ? cal->deletedEvents() : cal->rawEvents(); for (auto it = events.cbegin(), end = events.cend(); it != end; ++it) { if (!deleted || !cal->event((*it)->uid(), (*it)->recurrenceId())) { // use existing ones, or really deleted ones if (notebook.isEmpty() || (!cal->notebook(*it).isEmpty() && notebook.endsWith(cal->notebook(*it)))) { component = d->mImpl->writeEvent(*it, &tzUsedList); icalcomponent_add_component(calendar, component); ICalTimeZoneParser::updateTzEarliestDate((*it), &earliestTz); } } } // journals Journal::List journals = deleted ? cal->deletedJournals() : cal->rawJournals(); for (auto it = journals.cbegin(), end = journals.cend(); it != end; ++it) { if (!deleted || !cal->journal((*it)->uid(), (*it)->recurrenceId())) { // use existing ones, or really deleted ones if (notebook.isEmpty() || (!cal->notebook(*it).isEmpty() && notebook.endsWith(cal->notebook(*it)))) { component = d->mImpl->writeJournal(*it, &tzUsedList); icalcomponent_add_component(calendar, component); ICalTimeZoneParser::updateTzEarliestDate((*it), &earliestTz); } } } // time zones if (todoList.isEmpty() && events.isEmpty() && journals.isEmpty()) { // no incidences means no used timezones, use all timezones // this will export a calendar having only timezone definitions tzUsedList = cal->d->mTimeZones; } for (const auto &qtz : qAsConst(tzUsedList)) { if (qtz != QTimeZone::utc()) { icaltimezone *tz = ICalTimeZoneParser::icaltimezoneFromQTimeZone(qtz, earliestTz[qtz]); if (!tz) { qCritical() << "bad time zone"; } else { component = icalcomponent_new_clone(icaltimezone_get_component(tz)); icalcomponent_add_component(calendar, component); icaltimezone_free(tz, 1); } } } char *const componentString = icalcomponent_as_ical_string_r(calendar); const QString &text = QString::fromUtf8(componentString); free(componentString); icalcomponent_free(calendar); icalmemory_free_ring(); if (text.isEmpty()) { setException(new Exception(Exception::LibICalError)); } return text; } QString ICalFormat::toICalString(const Incidence::Ptr &incidence) { MemoryCalendar::Ptr cal(new MemoryCalendar(d->mTimeZone)); cal->addIncidence(Incidence::Ptr(incidence->clone())); return toString(cal.staticCast()); } QString ICalFormat::toString(const Incidence::Ptr &incidence) { return QString::fromUtf8(toRawString(incidence)); } QByteArray ICalFormat::toRawString(const Incidence::Ptr &incidence) { TimeZoneList tzUsedList; icalcomponent *component = d->mImpl->writeIncidence(incidence, iTIPRequest, &tzUsedList); QByteArray text = icalcomponent_as_ical_string(component); TimeZoneEarliestDate earliestTzDt; ICalTimeZoneParser::updateTzEarliestDate(incidence, &earliestTzDt); // time zones for (const auto &qtz : qAsConst(tzUsedList)) { if (qtz != QTimeZone::utc()) { icaltimezone *tz = ICalTimeZoneParser::icaltimezoneFromQTimeZone(qtz, earliestTzDt[qtz]); if (!tz) { qCritical() << "bad time zone"; } else { icalcomponent *tzcomponent = icaltimezone_get_component(tz); icalcomponent_add_component(component, component); text.append(icalcomponent_as_ical_string(tzcomponent)); icaltimezone_free(tz, 1); } } } icalcomponent_free(component); return text; } QString ICalFormat::toString(RecurrenceRule *recurrence) { icalproperty *property = icalproperty_new_rrule(d->mImpl->writeRecurrenceRule(recurrence)); QString text = QString::fromUtf8(icalproperty_as_ical_string(property)); icalproperty_free(property); return text; } bool ICalFormat::fromString(RecurrenceRule *recurrence, const QString &rrule) { if (!recurrence) { return false; } bool success = true; icalerror_clear_errno(); struct icalrecurrencetype recur = icalrecurrencetype_from_string(rrule.toLatin1().constData()); if (icalerrno != ICAL_NO_ERROR) { qDebug() << "Recurrence parsing error:" << icalerror_strerror(icalerrno); success = false; } if (success) { d->mImpl->readRecurrence(recur, recurrence); } return success; } QString ICalFormat::createScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method) { icalcomponent *message = nullptr; if (incidence->type() == Incidence::TypeEvent || incidence->type() == Incidence::TypeTodo) { Incidence::Ptr i = incidence.staticCast(); // Recurring events need timezone information to allow proper calculations // across timezones with different DST. const bool useUtcTimes = !i->recurs(); const bool hasSchedulingId = (i->schedulingID() != i->uid()); const bool incidenceNeedChanges = (useUtcTimes || hasSchedulingId); if (incidenceNeedChanges) { // The incidence need changes, so clone it before we continue i = Incidence::Ptr(i->clone()); // Handle conversion to UTC times if (useUtcTimes) { i->shiftTimes(QTimeZone::utc(), QTimeZone::utc()); } // Handle scheduling ID being present if (hasSchedulingId) { // We have a separation of scheduling ID and UID i->setSchedulingID(QString(), i->schedulingID()); } // Build the message with the cloned incidence message = d->mImpl->createScheduleComponent(i, method); } } if (message == nullptr) { message = d->mImpl->createScheduleComponent(incidence, method); } QString messageText = QString::fromUtf8(icalcomponent_as_ical_string(message)); icalcomponent_free(message); return messageText; } FreeBusy::Ptr ICalFormat::parseFreeBusy(const QString &str) { clearException(); icalcomponent *message = icalparser_parse_string(str.toUtf8().constData()); if (!message) { return FreeBusy::Ptr(); } FreeBusy::Ptr freeBusy; icalcomponent *c = nullptr; for (c = icalcomponent_get_first_component(message, ICAL_VFREEBUSY_COMPONENT); c != nullptr; c = icalcomponent_get_next_component(message, ICAL_VFREEBUSY_COMPONENT)) { FreeBusy::Ptr fb = d->mImpl->readFreeBusy(c); if (freeBusy) { freeBusy->merge(fb); } else { freeBusy = fb; } } if (!freeBusy) { qDebug() << "object is not a freebusy."; } icalcomponent_free(message); return freeBusy; } ScheduleMessage::Ptr ICalFormat::parseScheduleMessage(const Calendar::Ptr &cal, const QString &messageText) { setTimeZone(cal->timeZone()); clearException(); if (messageText.isEmpty()) { setException(new Exception(Exception::ParseErrorEmptyMessage)); return ScheduleMessage::Ptr(); } icalcomponent *message = icalparser_parse_string(messageText.toUtf8().constData()); if (!message) { setException(new Exception(Exception::ParseErrorUnableToParse)); return ScheduleMessage::Ptr(); } icalproperty *m = icalcomponent_get_first_property(message, ICAL_METHOD_PROPERTY); if (!m) { setException(new Exception(Exception::ParseErrorMethodProperty)); return ScheduleMessage::Ptr(); } // Populate the message's time zone collection with all VTIMEZONE components ICalTimeZoneCache tzlist; ICalTimeZoneParser parser(&tzlist); parser.parse(message); IncidenceBase::Ptr incidence; icalcomponent *c = icalcomponent_get_first_component(message, ICAL_VEVENT_COMPONENT); if (c) { incidence = d->mImpl->readEvent(c, &tzlist).staticCast(); } if (!incidence) { c = icalcomponent_get_first_component(message, ICAL_VTODO_COMPONENT); if (c) { incidence = d->mImpl->readTodo(c, &tzlist).staticCast(); } } if (!incidence) { c = icalcomponent_get_first_component(message, ICAL_VJOURNAL_COMPONENT); if (c) { incidence = d->mImpl->readJournal(c, &tzlist).staticCast(); } } if (!incidence) { c = icalcomponent_get_first_component(message, ICAL_VFREEBUSY_COMPONENT); if (c) { incidence = d->mImpl->readFreeBusy(c).staticCast(); } } if (!incidence) { qDebug() << "object is not a freebusy, event, todo or journal"; setException(new Exception(Exception::ParseErrorNotIncidence)); return ScheduleMessage::Ptr(); } icalproperty_method icalmethod = icalproperty_get_method(m); iTIPMethod method; switch (icalmethod) { case ICAL_METHOD_PUBLISH: method = iTIPPublish; break; case ICAL_METHOD_REQUEST: method = iTIPRequest; break; case ICAL_METHOD_REFRESH: method = iTIPRefresh; break; case ICAL_METHOD_CANCEL: method = iTIPCancel; break; case ICAL_METHOD_ADD: method = iTIPAdd; break; case ICAL_METHOD_REPLY: method = iTIPReply; break; case ICAL_METHOD_COUNTER: method = iTIPCounter; break; case ICAL_METHOD_DECLINECOUNTER: method = iTIPDeclineCounter; break; default: method = iTIPNoMethod; qDebug() << "Unknown method"; break; } if (!icalrestriction_check(message)) { qWarning() << "\nkcalcore library reported a problem while parsing:"; qWarning() << ScheduleMessage::methodName(method) << ":" << d->mImpl->extractErrorProperty(c); } Incidence::Ptr existingIncidence = cal->incidence(incidence->uid()); icalcomponent *calendarComponent = nullptr; if (existingIncidence) { calendarComponent = d->mImpl->createCalendarComponent(cal); // TODO: check, if cast is required, or if it can be done by virtual funcs. // TODO: Use a visitor for this! if (existingIncidence->type() == Incidence::TypeTodo) { Todo::Ptr todo = existingIncidence.staticCast(); icalcomponent_add_component(calendarComponent, d->mImpl->writeTodo(todo)); } if (existingIncidence->type() == Incidence::TypeEvent) { Event::Ptr event = existingIncidence.staticCast(); icalcomponent_add_component(calendarComponent, d->mImpl->writeEvent(event)); } } else { icalcomponent_free(message); return ScheduleMessage::Ptr(new ScheduleMessage(incidence, method, ScheduleMessage::Unknown)); } icalproperty_xlicclass result = icalclassify(message, calendarComponent, static_cast("")); ScheduleMessage::Status status; switch (result) { case ICAL_XLICCLASS_PUBLISHNEW: status = ScheduleMessage::PublishNew; break; case ICAL_XLICCLASS_PUBLISHUPDATE: status = ScheduleMessage::PublishUpdate; break; case ICAL_XLICCLASS_OBSOLETE: status = ScheduleMessage::Obsolete; break; case ICAL_XLICCLASS_REQUESTNEW: status = ScheduleMessage::RequestNew; break; case ICAL_XLICCLASS_REQUESTUPDATE: status = ScheduleMessage::RequestUpdate; break; case ICAL_XLICCLASS_UNKNOWN: default: status = ScheduleMessage::Unknown; break; } icalcomponent_free(message); icalcomponent_free(calendarComponent); return ScheduleMessage::Ptr(new ScheduleMessage(incidence, method, status)); } void ICalFormat::setTimeZone(const QTimeZone &timeZone) { d->mTimeZone = timeZone; } QTimeZone ICalFormat::timeZone() const { return d->mTimeZone; } QByteArray ICalFormat::timeZoneId() const { return d->mTimeZone.id(); } void ICalFormat::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/icalformat.h000066400000000000000000000156771523260663500264340ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the ICalFormat class. 该文件是用于处ç�†æ—¥åŽ†æ•°æ�®çš„API的一部分,并定义了ICalFormat类。 @author Cornelius Schumacher \ */ #ifndef KCALCORE_ICALFORMAT_H #define KCALCORE_ICALFORMAT_H #include "calformat.h" #include "freebusy.h" #include "incidence.h" #include "schedulemessage.h" namespace KCalendarCore { class FreeBusy; class Incidence; class IncidenceBase; class RecurrenceRule; /** @brief iCalendar format implementation. This class implements the iCalendar format. It provides methods for loading/saving/converting iCalendar format data into the internal representation as Calendar and Incidences. @warning When importing/loading to a Calendar, there is only duplicate check if those Incidences are loaded into the Calendar. If they are not loaded it will create duplicates. */ class Q_CORE_EXPORT ICalFormat : public CalFormat { public: /** Constructor a new iCalendar Format object. */ ICalFormat(); /** Destructor. */ ~ICalFormat() override; /** @copydoc CalFormat::load() */ bool load(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::save() */ bool save(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::fromString() @note The notebook is ignored and the default one is used */ bool fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted = false, const QString ¬ebook = QString()) override; /** Parses a string, returning the first iCal component as an Incidence. è§£æž�字符串,将第一个iCal组件作为关è�”返回。 @param string is a QString containing the data to be parsed. @return non-zero pointer if the parsing was successful; 0 otherwise. @see fromString(const Calendar::Ptr &, const QString &), fromRawString() */ Incidence::Ptr fromString(const QString &string); /** Parses a bytearray, returning the first iCal component as an Incidence, ignoring timezone information. è§£æž�字节数组,将第一个iCal组件作为关è�”返回,忽略时区信æ�¯ã€‚ This function is significantly faster than fromString by avoiding the overhead of parsing timezone information. Timezones are instead solely interpreted by using system-timezones. @param string is a utf8 QByteArray containing the data to be parsed. @return non-zero pointer if the parsing was successful; 0 otherwise. @see fromString(const QString &), fromRawString() */ Incidence::Ptr readIncidence(const QByteArray &string); /** Parses a string and fills a RecurrenceRule object with the information. è§£æž�字符串并用信æ�¯å¡«å……RecurrenceRule对象。 @param rule is a pointer to a RecurrenceRule object. @param string is a QString containing the data to be parsed. @return true if successful; false otherwise. */ Q_REQUIRED_RESULT bool fromString(RecurrenceRule *rule, const QString &string); /** @copydoc CalFormat::fromRawString() */ Q_REQUIRED_RESULT bool fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted = false, const QString ¬ebook = QString()) override; /** @copydoc CalFormat::toString() */ Q_REQUIRED_RESULT QString toString(const Calendar::Ptr &calendar, const QString ¬ebook = QString(), bool deleted = false) override; /** Converts an Incidence to a QString. @param incidence is a pointer to an Incidence object to be converted into a QString. @return the QString will be Null if the conversion was unsuccessful. */ Q_REQUIRED_RESULT QString toString(const Incidence::Ptr &incidence); /** Converts an Incidence to a QByteArray. @param incidence is a pointer to an Incidence object to be converted into a QByteArray. @return the QString will be Null if the conversion was unsuccessful. @since 4.7 */ Q_REQUIRED_RESULT QByteArray toRawString(const Incidence::Ptr &incidence); /** Converts a RecurrenceRule to a QString. @param rule is a pointer to a RecurrenceRule object to be converted into a QString. @return the QString will be Null if the conversion was unsuccessful. */ Q_REQUIRED_RESULT QString toString(RecurrenceRule *rule); /** Converts an Incidence to iCalendar formatted text. @param incidence is a pointer to an Incidence object to be converted into iCal formatted text. @return the QString will be Null if the conversion was unsuccessful. */ Q_REQUIRED_RESULT QString toICalString(const Incidence::Ptr &incidence); /** Creates a scheduling message string for an Incidence. @param incidence is a pointer to an IncidenceBase object to be scheduled. @param method is a Scheduler::Method @return a QString containing the message if successful; 0 otherwise. */ Q_REQUIRED_RESULT QString createScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method); /** Parses a Calendar scheduling message string into ScheduleMessage object. @param calendar is a pointer to a Calendar object associated with the scheduling message. @param string is a QString containing the data to be parsed. @return a pointer to a ScheduleMessage object if successful; 0 otherwise. The calling routine may later free the return memory. */ ScheduleMessage::Ptr parseScheduleMessage(const Calendar::Ptr &calendar, const QString &string); /** Converts a QString into a FreeBusy object. @param string is a QString containing the data to be parsed. @return a pointer to a FreeBusy object if successful; 0 otherwise. @note Do not attempt to free the FreeBusy memory from the calling routine. */ FreeBusy::Ptr parseFreeBusy(const QString &string); /** Sets the iCalendar time zone. @param timeZone is the time zone to set. @see timeZone(). */ void setTimeZone(const QTimeZone &timeZone); /** Returns the iCalendar time zone. @see setTimeZone(). */ Q_REQUIRED_RESULT QTimeZone timeZone() const; /** Returns the timezone id string used by the iCalendar; an empty string if the iCalendar does not have a timezone. */ Q_REQUIRED_RESULT QByteArray timeZoneId() const; protected: /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(int id, void *data) override; private: //@cond PRIVATE Q_DISABLE_COPY(ICalFormat) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/icalformat_p.cpp000066400000000000000000003200451523260663500272720ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the internal ICalFormat classes. @brief This class provides the libical dependent functions for ICalFormat. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ #include "icalformat_p.h" #include "compat_p.h" #include "icalformat.h" #include "icaltimezones_p.h" #include "incidencebase.h" #include "memorycalendar.h" #include "visitor.h" #include #include #include // Qt5/Qt6 兼容性å®� #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #define QT_SKIP_EMPTY_PARTS Qt::SkipEmptyParts #else #define QT_SKIP_EMPTY_PARTS QString::SkipEmptyParts #endif using namespace KCalendarCore; static const char APP_NAME_FOR_XPROPERTIES[] = "KCALCORE"; static const char ENABLED_ALARM_XPROPERTY[] = "ENABLED"; static const char IMPLEMENTATION_VERSION_XPROPERTY[] = "X-KDE-ICAL-IMPLEMENTATION-VERSION"; //EVENT农历日程标识 static const char VEVENT_LUNNAR_XPROPERTY[] = "X-DDE-ICAL-LUNNAR"; /* Static helpers */ /* static void _dumpIcaltime( const icaltimetype& t) { qDebug() << "--- Y:" << t.year << "M:" << t.month << "D:" << t.day; qDebug() << "--- H:" << t.hour << "M:" << t.minute << "S:" << t.second; qDebug() << "--- isUtc:" << icaltime_is_utc( t ); qDebug() << "--- zoneId:" << icaltimezone_get_tzid( const_cast( t.zone ) ); } */ //@cond PRIVATE template void removeAllICal(QVector> &c, const QSharedPointer &x) { if (c.count() < 1) { return; } int cnt = c.count(x); if (cnt != 1) { qCritical() << "There number of relatedTos for this incidence is " << cnt << " (there must be 1 relatedTo only)"; Q_ASSERT_X(false, "removeAllICal", "Count is not 1."); return; } c.remove(c.indexOf(x)); } const int gSecondsPerMinute = 60; const int gSecondsPerHour = gSecondsPerMinute * 60; const int gSecondsPerDay = gSecondsPerHour * 24; const int gSecondsPerWeek = gSecondsPerDay * 7; class ToComponentVisitor : public Visitor { public: ToComponentVisitor(ICalFormatImpl *impl, iTIPMethod m, TimeZoneList *tzUsedList = nullptr) : mImpl(impl) , mComponent(nullptr) , mMethod(m) , mTzUsedList(tzUsedList) { } ~ToComponentVisitor(); bool visit(const Event::Ptr &e) override { mComponent = mImpl->writeEvent(e, mTzUsedList); return true; } bool visit(const Todo::Ptr &t) override { mComponent = mImpl->writeTodo(t, mTzUsedList); return true; } bool visit(const Journal::Ptr &j) override { mComponent = mImpl->writeJournal(j, mTzUsedList); return true; } bool visit(const FreeBusy::Ptr &fb) override { mComponent = mImpl->writeFreeBusy(fb, mMethod); return true; } icalcomponent *component() { return mComponent; } private: ICalFormatImpl *mImpl = nullptr; icalcomponent *mComponent = nullptr; iTIPMethod mMethod; TimeZoneList *mTzUsedList = nullptr; }; ToComponentVisitor::~ToComponentVisitor() { } class Q_DECL_HIDDEN ICalFormatImpl::Private { public: Private(ICalFormatImpl *impl, ICalFormat *parent) : mImpl(impl) , mParent(parent) , mCompat(new Compat) { } ~Private() { delete mCompat; } void writeIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &); void readIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &); void writeCustomProperties(icalcomponent *parent, CustomProperties *); void readCustomProperties(icalcomponent *parent, CustomProperties *); ICalFormatImpl *mImpl = nullptr; ICalFormat *mParent = nullptr; QString mLoadedProductId; // PRODID string loaded from calendar file Event::List mEventsRelate; // events with relations Todo::List mTodosRelate; // todos with relations Compat *mCompat = nullptr; }; //@endcond inline icaltimetype ICalFormatImpl::writeICalUtcDateTime(const QDateTime &dt, bool dayOnly) { return writeICalDateTime(dt.toUTC(), dayOnly); } ICalFormatImpl::ICalFormatImpl(ICalFormat *parent) : d(new Private(this, parent)) { } ICalFormatImpl::~ICalFormatImpl() { delete d; } QString ICalFormatImpl::loadedProductId() const { return d->mLoadedProductId; } icalcomponent *ICalFormatImpl::writeIncidence(const IncidenceBase::Ptr &incidence, iTIPMethod method, TimeZoneList *tzUsedList) { ToComponentVisitor v(this, method, tzUsedList); if (incidence->accept(v, incidence)) { return v.component(); } else { return nullptr; } } icalcomponent *ICalFormatImpl::writeTodo(const Todo::Ptr &todo, TimeZoneList *tzUsedList) { icalcomponent *vtodo = icalcomponent_new(ICAL_VTODO_COMPONENT); writeIncidence(vtodo, todo.staticCast(), tzUsedList); // due date icalproperty *prop; if (todo->hasDueDate()) { icaltimetype due; if (todo->allDay()) { due = writeICalDate(todo->dtDue(true).date()); prop = icalproperty_new_due(due); } else { prop = writeICalDateTimeProperty(ICAL_DUE_PROPERTY, todo->dtDue(true), tzUsedList); } icalcomponent_add_property(vtodo, prop); } // start time if (todo->hasStartDate()) { icaltimetype start; if (todo->allDay()) { start = writeICalDate(todo->dtStart(true).date()); prop = icalproperty_new_dtstart(start); } else { prop = writeICalDateTimeProperty(ICAL_DTSTART_PROPERTY, todo->dtStart(true), tzUsedList); } icalcomponent_add_property(vtodo, prop); } // completion date (UTC) if (todo->isCompleted()) { if (!todo->hasCompletedDate()) { // If the todo was created by KOrganizer<2.2 it does not have // a correct completion date. Set one now. todo->setCompleted(QDateTime::currentDateTimeUtc()); } icaltimetype completed = writeICalUtcDateTime(todo->completed()); icalcomponent_add_property(vtodo, icalproperty_new_completed(completed)); } icalcomponent_add_property(vtodo, icalproperty_new_percentcomplete(todo->percentComplete())); if (todo->isCompleted()) { if (icalcomponent_count_properties(vtodo, ICAL_STATUS_PROPERTY)) { icalproperty *p = icalcomponent_get_first_property(vtodo, ICAL_STATUS_PROPERTY); icalcomponent_remove_property(vtodo, p); icalproperty_free(p); } icalcomponent_add_property(vtodo, icalproperty_new_status(ICAL_STATUS_COMPLETED)); } if (todo->recurs() && todo->dtStart(false).isValid()) { prop = writeICalDateTimeProperty(ICAL_X_PROPERTY, todo->dtStart(false), tzUsedList); icalproperty_set_x_name(prop, "X-KDE-LIBKCAL-DTRECURRENCE"); icalcomponent_add_property(vtodo, prop); } return vtodo; } icalcomponent *ICalFormatImpl::writeEvent(const Event::Ptr &event, TimeZoneList *tzUsedList) { icalcomponent *vevent = icalcomponent_new(ICAL_VEVENT_COMPONENT); writeIncidence(vevent, event.staticCast(), tzUsedList); // start time icalproperty *prop = nullptr; icaltimetype start; QDateTime dt = event->dtStart(); if (dt.isValid()) { if (event->allDay()) { start = writeICalDate(event->dtStart().date()); prop = icalproperty_new_dtstart(start); } else { prop = writeICalDateTimeProperty(ICAL_DTSTART_PROPERTY, event->dtStart(), tzUsedList); } icalcomponent_add_property(vevent, prop); } if (event->hasEndDate()) { // End time. // RFC2445 says that if DTEND is present, it has to be greater than DTSTART. icaltimetype end; QDateTime dt = event->dtEnd(); if (event->allDay()) { // +1 day because end date is non-inclusive. end = writeICalDate(dt.date().addDays(1)); icalcomponent_add_property(vevent, icalproperty_new_dtend(end)); } else { if (dt != event->dtStart()) { icalcomponent_add_property(vevent, writeICalDateTimeProperty(ICAL_DTEND_PROPERTY, dt, tzUsedList)); } } } // TODO: resources #if 0 // resources QStringList tmpStrList = anEvent->resources(); QString tmpStr = tmpStrList.join(";"); if (!tmpStr.isEmpty()) { addPropValue(vevent, VCResourcesProp, tmpStr.toUtf8()); } #endif // Transparency switch (event->transparency()) { case Event::Transparent: icalcomponent_add_property(vevent, icalproperty_new_transp(ICAL_TRANSP_TRANSPARENT)); break; case Event::Opaque: icalcomponent_add_property(vevent, icalproperty_new_transp(ICAL_TRANSP_OPAQUE)); break; } //农历 if (event->lunnar()) { event->setNonKDECustomProperty(VEVENT_LUNNAR_XPROPERTY, QStringLiteral("TRUE")); } // Custom properties const QMap custom = event->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { icalproperty *p = icalproperty_new_x(c.value().toUtf8().constData()); icalproperty_set_x_name(p, c.key().constData()); icalcomponent_add_property(vevent, p); } return vevent; } icalcomponent *ICalFormatImpl::writeFreeBusy(const FreeBusy::Ptr &freebusy, iTIPMethod method) { icalcomponent *vfreebusy = icalcomponent_new(ICAL_VFREEBUSY_COMPONENT); d->writeIncidenceBase(vfreebusy, freebusy.staticCast()); icalcomponent_add_property(vfreebusy, icalproperty_new_dtstart(writeICalUtcDateTime(freebusy->dtStart()))); icalcomponent_add_property(vfreebusy, icalproperty_new_dtend(writeICalUtcDateTime(freebusy->dtEnd()))); Q_UNUSED(method); icalcomponent_add_property(vfreebusy, icalproperty_new_uid(freebusy->uid().toUtf8().constData())); // Loops through all the periods in the freebusy object FreeBusyPeriod::List list = freebusy->fullBusyPeriods(); icalperiodtype period = icalperiodtype_null_period(); for (int i = 0, count = list.count(); i < count; ++i) { const FreeBusyPeriod fbPeriod = list[i]; period.start = writeICalUtcDateTime(fbPeriod.start()); if (fbPeriod.hasDuration()) { period.duration = writeICalDuration(fbPeriod.duration()); } else { period.end = writeICalUtcDateTime(fbPeriod.end()); } icalproperty *property = icalproperty_new_freebusy(period); icalparameter_fbtype fbType; switch (fbPeriod.type()) { case FreeBusyPeriod::Free: fbType = ICAL_FBTYPE_FREE; break; case FreeBusyPeriod::Busy: fbType = ICAL_FBTYPE_BUSY; break; case FreeBusyPeriod::BusyTentative: fbType = ICAL_FBTYPE_BUSYTENTATIVE; break; case FreeBusyPeriod::BusyUnavailable: fbType = ICAL_FBTYPE_BUSYUNAVAILABLE; break; case FreeBusyPeriod::Unknown: fbType = ICAL_FBTYPE_X; break; default: fbType = ICAL_FBTYPE_NONE; break; } icalproperty_set_parameter(property, icalparameter_new_fbtype(fbType)); if (!fbPeriod.summary().isEmpty()) { icalparameter *param = icalparameter_new_x("X-SUMMARY"); icalparameter_set_xvalue(param, fbPeriod.summary().toUtf8().toBase64().constData()); icalproperty_set_parameter(property, param); } if (!fbPeriod.location().isEmpty()) { icalparameter *param = icalparameter_new_x("X-LOCATION"); icalparameter_set_xvalue(param, fbPeriod.location().toUtf8().toBase64().constData()); icalproperty_set_parameter(property, param); } icalcomponent_add_property(vfreebusy, property); } return vfreebusy; } icalcomponent *ICalFormatImpl::writeJournal(const Journal::Ptr &journal, TimeZoneList *tzUsedList) { icalcomponent *vjournal = icalcomponent_new(ICAL_VJOURNAL_COMPONENT); writeIncidence(vjournal, journal.staticCast(), tzUsedList); // start time icalproperty *prop = nullptr; QDateTime dt = journal->dtStart(); if (dt.isValid()) { icaltimetype start; if (journal->allDay()) { start = writeICalDate(dt.date()); prop = icalproperty_new_dtstart(start); } else { prop = writeICalDateTimeProperty(ICAL_DTSTART_PROPERTY, dt, tzUsedList); } icalcomponent_add_property(vjournal, prop); } return vjournal; } void ICalFormatImpl::writeIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, TimeZoneList *tzUsedList) { if (incidence->schedulingID() != incidence->uid()) { // We need to store the UID in here. The rawSchedulingID will // go into the iCal UID component incidence->setCustomProperty("LIBKCAL", "ID", incidence->uid()); } else { incidence->removeCustomProperty("LIBKCAL", "ID"); } d->writeIncidenceBase(parent, incidence.staticCast()); // creation date in storage icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_CREATED_PROPERTY, incidence->created())); // unique id // If the scheduling ID is different from the real UID, the real // one is stored on X-REALID above if (!incidence->schedulingID().isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_uid(incidence->schedulingID().toUtf8().constData())); } // revision if (incidence->revision() > 0) { // 0 is default, so don't write that out icalcomponent_add_property(parent, icalproperty_new_sequence(incidence->revision())); } // last modification date if (incidence->lastModified().isValid()) { icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_LASTMODIFIED_PROPERTY, incidence->lastModified())); } // description if (!incidence->description().isEmpty()) { icalcomponent_add_property(parent, writeDescription(incidence->description(), incidence->descriptionIsRich())); } // summary if (!incidence->summary().isEmpty()) { icalcomponent_add_property(parent, writeSummary(incidence->summary(), incidence->summaryIsRich())); } // location if (!incidence->location().isEmpty()) { icalcomponent_add_property(parent, writeLocation(incidence->location(), incidence->locationIsRich())); } // status icalproperty_status status = ICAL_STATUS_NONE; switch (incidence->status()) { case Incidence::StatusTentative: status = ICAL_STATUS_TENTATIVE; break; case Incidence::StatusConfirmed: status = ICAL_STATUS_CONFIRMED; break; case Incidence::StatusCompleted: status = ICAL_STATUS_COMPLETED; break; case Incidence::StatusNeedsAction: status = ICAL_STATUS_NEEDSACTION; break; case Incidence::StatusCanceled: status = ICAL_STATUS_CANCELLED; break; case Incidence::StatusInProcess: status = ICAL_STATUS_INPROCESS; break; case Incidence::StatusDraft: status = ICAL_STATUS_DRAFT; break; case Incidence::StatusFinal: status = ICAL_STATUS_FINAL; break; case Incidence::StatusX: { icalproperty *p = icalproperty_new_status(ICAL_STATUS_X); icalvalue_set_x(icalproperty_get_value(p), incidence->customStatus().toUtf8().constData()); icalcomponent_add_property(parent, p); break; } case Incidence::StatusNone: default: break; } if (status != ICAL_STATUS_NONE) { icalcomponent_add_property(parent, icalproperty_new_status(status)); } // secrecy icalproperty_class secClass; switch (incidence->secrecy()) { case Incidence::SecrecyPublic: secClass = ICAL_CLASS_PUBLIC; break; case Incidence::SecrecyConfidential: secClass = ICAL_CLASS_CONFIDENTIAL; break; case Incidence::SecrecyPrivate: default: secClass = ICAL_CLASS_PRIVATE; break; } if (secClass != ICAL_CLASS_PUBLIC) { icalcomponent_add_property(parent, icalproperty_new_class(secClass)); } // color if (!incidence->color().isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_color(incidence->color().toUtf8().constData())); } // geo if (incidence->hasGeo()) { icalgeotype geo; geo.lat = incidence->geoLatitude(); geo.lon = incidence->geoLongitude(); icalcomponent_add_property(parent, icalproperty_new_geo(geo)); } // priority if (incidence->priority() > 0) { // 0 is undefined priority icalcomponent_add_property(parent, icalproperty_new_priority(incidence->priority())); } // categories QString categories = incidence->categories().join(QLatin1Char(',')); if (!categories.isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_categories(categories.toUtf8().constData())); } // related event if (!incidence->relatedTo().isEmpty()) { icalcomponent_add_property(parent, icalproperty_new_relatedto(incidence->relatedTo().toUtf8().constData())); } // recurrenceid if (incidence->hasRecurrenceId()) { icalproperty *p = writeICalDateTimeProperty(ICAL_RECURRENCEID_PROPERTY, incidence->recurrenceId(), tzUsedList); if (incidence->thisAndFuture()) { icalproperty_add_parameter(p, icalparameter_new_range(ICAL_RANGE_THISANDFUTURE)); } icalcomponent_add_property(parent, p); } RecurrenceRule::List rrules(incidence->recurrence()->rRules()); RecurrenceRule::List::ConstIterator rit; for (rit = rrules.constBegin(); rit != rrules.constEnd(); ++rit) { icalcomponent_add_property(parent, icalproperty_new_rrule(writeRecurrenceRule((*rit)))); } RecurrenceRule::List exrules(incidence->recurrence()->exRules()); RecurrenceRule::List::ConstIterator exit; for (exit = exrules.constBegin(); exit != exrules.constEnd(); ++exit) { icalcomponent_add_property(parent, icalproperty_new_exrule(writeRecurrenceRule((*exit)))); } DateList dateList = incidence->recurrence()->exDates(); DateList::ConstIterator exIt; for (exIt = dateList.constBegin(); exIt != dateList.constEnd(); ++exIt) { icalcomponent_add_property(parent, icalproperty_new_exdate(writeICalDate(*exIt))); } auto dateTimeList = incidence->recurrence()->exDateTimes(); for (auto extIt = dateTimeList.constBegin(); extIt != dateTimeList.constEnd(); ++extIt) { icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_EXDATE_PROPERTY, *extIt, tzUsedList)); } dateList = incidence->recurrence()->rDates(); DateList::ConstIterator rdIt; for (rdIt = dateList.constBegin(); rdIt != dateList.constEnd(); ++rdIt) { icalcomponent_add_property(parent, icalproperty_new_rdate(writeICalDatePeriod(*rdIt))); } dateTimeList = incidence->recurrence()->rDateTimes(); for (auto rdtIt = dateTimeList.constBegin(); rdtIt != dateTimeList.constEnd(); ++rdtIt) { icalcomponent_add_property(parent, writeICalDateTimeProperty(ICAL_RDATE_PROPERTY, *rdtIt, tzUsedList)); } // attachments Attachment::List attachments = incidence->attachments(); Attachment::List::ConstIterator atIt; for (atIt = attachments.constBegin(); atIt != attachments.constEnd(); ++atIt) { icalcomponent_add_property(parent, writeAttachment(*atIt)); } // alarms auto alarms = incidence->alarms(); for (auto it = alarms.cbegin(), end = alarms.cend(); it != end; ++it) { icalcomponent_add_component(parent, writeAlarm(*it)); } // conferences const auto conferences = incidence->conferences(); for (const auto &conf : conferences) { icalcomponent_add_property(parent, writeConference(conf)); } // duration if (incidence->hasDuration()) { icaldurationtype duration; duration = writeICalDuration(incidence->duration()); icalcomponent_add_property(parent, icalproperty_new_duration(duration)); } } //@cond PRIVATE void ICalFormatImpl::Private::writeIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &incidenceBase) { // organizer stuff if (!incidenceBase->organizer().isEmpty()) { icalproperty *p = mImpl->writeOrganizer(incidenceBase->organizer()); if (p) { icalcomponent_add_property(parent, p); } } icalcomponent_add_property(parent, icalproperty_new_dtstamp(writeICalUtcDateTime(incidenceBase->lastModified()))); // attendees if (incidenceBase->attendeeCount() > 0) { auto attendees = incidenceBase->attendees(); for (auto it = attendees.constBegin(); it != attendees.constEnd(); ++it) { icalproperty *p = mImpl->writeAttendee(*it); if (p) { icalcomponent_add_property(parent, p); } } } // contacts QStringList contacts = incidenceBase->contacts(); for (QStringList::const_iterator it = contacts.constBegin(); it != contacts.constEnd(); ++it) { icalcomponent_add_property(parent, icalproperty_new_contact((*it).toUtf8().constData())); } // comments QStringList comments = incidenceBase->comments(); for (QStringList::const_iterator it = comments.constBegin(); it != comments.constEnd(); ++it) { icalcomponent_add_property(parent, icalproperty_new_comment((*it).toUtf8().constData())); } // url const QUrl url = incidenceBase->url(); if (url.isValid()) { icalcomponent_add_property(parent, icalproperty_new_url(url.toString().toUtf8().constData())); } // custom properties writeCustomProperties(parent, incidenceBase.data()); } void ICalFormatImpl::Private::writeCustomProperties(icalcomponent *parent, CustomProperties *properties) { const QMap custom = properties->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { if (c.key().startsWith("X-KDE-VOLATILE")) { // krazy:exclude=strings // We don't write these properties to disk to disk continue; } icalproperty *p = icalproperty_new_x(c.value().toUtf8().constData()); QString parameters = properties->nonKDECustomPropertyParameters(c.key()); // Minimalist parameter handler: extract icalparameter's out of // the given input text (not really parsing as such) if (!parameters.isEmpty()) { const QStringList sl = parameters.split(QLatin1Char(';')); for (const QString ¶meter : sl) { icalparameter *param = icalparameter_new_from_string(parameter.toUtf8().constData()); if (param) { icalproperty_add_parameter(p, param); } } } icalproperty_set_x_name(p, c.key().constData()); icalcomponent_add_property(parent, p); } } //@endcond icalproperty *ICalFormatImpl::writeOrganizer(const Person &organizer) { if (organizer.email().isEmpty()) { return nullptr; } icalproperty *p = icalproperty_new_organizer(QByteArray(QByteArray("MAILTO:") + organizer.email().toUtf8()).constData()); if (!organizer.name().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_cn(organizer.name().toUtf8().constData())); } // TODO: Write dir, sent-by and language return p; } icalproperty *ICalFormatImpl::writeDescription(const QString &description, bool isRich) { icalproperty *p = icalproperty_new_description(description.toUtf8().constData()); if (isRich) { icalproperty_add_parameter(p, icalparameter_new_from_string("X-KDE-TEXTFORMAT=HTML")); } return p; } icalproperty *ICalFormatImpl::writeSummary(const QString &summary, bool isRich) { icalproperty *p = icalproperty_new_summary(summary.toUtf8().constData()); if (isRich) { icalproperty_add_parameter(p, icalparameter_new_from_string("X-KDE-TEXTFORMAT=HTML")); } return p; } icalproperty *ICalFormatImpl::writeLocation(const QString &location, bool isRich) { icalproperty *p = icalproperty_new_location(location.toUtf8().constData()); if (isRich) { icalproperty_add_parameter(p, icalparameter_new_from_string("X-KDE-TEXTFORMAT=HTML")); } return p; } icalproperty *ICalFormatImpl::writeAttendee(const Attendee &attendee) { if (attendee.email().isEmpty()) { return nullptr; } icalproperty *p = icalproperty_new_attendee(QByteArray(QByteArray("mailto:") + attendee.email().toUtf8()).constData()); if (!attendee.name().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_cn(attendee.name().toUtf8().constData())); } icalproperty_add_parameter(p, icalparameter_new_rsvp(attendee.RSVP() ? ICAL_RSVP_TRUE : ICAL_RSVP_FALSE)); icalparameter_partstat status = ICAL_PARTSTAT_NEEDSACTION; switch (attendee.status()) { default: case Attendee::NeedsAction: status = ICAL_PARTSTAT_NEEDSACTION; break; case Attendee::Accepted: status = ICAL_PARTSTAT_ACCEPTED; break; case Attendee::Declined: status = ICAL_PARTSTAT_DECLINED; break; case Attendee::Tentative: status = ICAL_PARTSTAT_TENTATIVE; break; case Attendee::Delegated: status = ICAL_PARTSTAT_DELEGATED; break; case Attendee::Completed: status = ICAL_PARTSTAT_COMPLETED; break; case Attendee::InProcess: status = ICAL_PARTSTAT_INPROCESS; break; } icalproperty_add_parameter(p, icalparameter_new_partstat(status)); icalparameter_role role = ICAL_ROLE_REQPARTICIPANT; switch (attendee.role()) { case Attendee::Chair: role = ICAL_ROLE_CHAIR; break; default: case Attendee::ReqParticipant: role = ICAL_ROLE_REQPARTICIPANT; break; case Attendee::OptParticipant: role = ICAL_ROLE_OPTPARTICIPANT; break; case Attendee::NonParticipant: role = ICAL_ROLE_NONPARTICIPANT; break; } icalproperty_add_parameter(p, icalparameter_new_role(role)); icalparameter_cutype cutype = ICAL_CUTYPE_INDIVIDUAL; switch (attendee.cuType()) { case Attendee::Unknown: cutype = ICAL_CUTYPE_UNKNOWN; break; default: case Attendee::Individual: cutype = ICAL_CUTYPE_INDIVIDUAL; break; case Attendee::Group: cutype = ICAL_CUTYPE_GROUP; break; case Attendee::Resource: cutype = ICAL_CUTYPE_RESOURCE; break; case Attendee::Room: cutype = ICAL_CUTYPE_ROOM; break; } icalproperty_add_parameter(p, icalparameter_new_cutype(cutype)); if (!attendee.uid().isEmpty()) { icalparameter *icalparameter_uid = icalparameter_new_x(attendee.uid().toUtf8().constData()); icalparameter_set_xname(icalparameter_uid, "X-UID"); icalproperty_add_parameter(p, icalparameter_uid); } if (!attendee.delegate().isEmpty()) { icalparameter *icalparameter_delegate = icalparameter_new_delegatedto(attendee.delegate().toUtf8().constData()); icalproperty_add_parameter(p, icalparameter_delegate); } if (!attendee.delegator().isEmpty()) { icalparameter *icalparameter_delegator = icalparameter_new_delegatedfrom(attendee.delegator().toUtf8().constData()); icalproperty_add_parameter(p, icalparameter_delegator); } return p; } icalproperty *ICalFormatImpl::writeAttachment(const Attachment &att) { icalattach *attach; if (att.isUri()) { attach = icalattach_new_from_url(att.uri().toUtf8().data()); } else { attach = icalattach_new_from_data((const char *)att.data().constData(), nullptr, nullptr); } icalproperty *p = icalproperty_new_attach(attach); icalattach_unref(attach); if (!att.mimeType().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_fmttype(att.mimeType().toUtf8().data())); } if (att.isBinary()) { icalproperty_add_parameter(p, icalparameter_new_value(ICAL_VALUE_BINARY)); icalproperty_add_parameter(p, icalparameter_new_encoding(ICAL_ENCODING_BASE64)); } if (att.showInline()) { icalparameter *icalparameter_inline = icalparameter_new_x("inline"); icalparameter_set_xname(icalparameter_inline, "X-CONTENT-DISPOSITION"); icalproperty_add_parameter(p, icalparameter_inline); } if (!att.label().isEmpty()) { icalparameter *icalparameter_label = icalparameter_new_x(att.label().toUtf8().constData()); icalparameter_set_xname(icalparameter_label, "X-LABEL"); icalproperty_add_parameter(p, icalparameter_label); } if (att.isLocal()) { icalparameter *icalparameter_local = icalparameter_new_x("local"); icalparameter_set_xname(icalparameter_local, "X-KONTACT-TYPE"); icalproperty_add_parameter(p, icalparameter_local); } return p; } icalrecurrencetype ICalFormatImpl::writeRecurrenceRule(RecurrenceRule *recur) { icalrecurrencetype r; icalrecurrencetype_clear(&r); switch (recur->recurrenceType()) { case RecurrenceRule::rSecondly: r.freq = ICAL_SECONDLY_RECURRENCE; break; case RecurrenceRule::rMinutely: r.freq = ICAL_MINUTELY_RECURRENCE; break; case RecurrenceRule::rHourly: r.freq = ICAL_HOURLY_RECURRENCE; break; case RecurrenceRule::rDaily: r.freq = ICAL_DAILY_RECURRENCE; break; case RecurrenceRule::rWeekly: r.freq = ICAL_WEEKLY_RECURRENCE; break; case RecurrenceRule::rMonthly: r.freq = ICAL_MONTHLY_RECURRENCE; break; case RecurrenceRule::rYearly: r.freq = ICAL_YEARLY_RECURRENCE; break; default: r.freq = ICAL_NO_RECURRENCE; qDebug() << "no recurrence"; break; } int index = 0; QList bys; QList::ConstIterator it; // Now write out the BY* parts: bys = recur->bySeconds(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_second[index++] = *it; r.by_second[index++] = static_cast(*it); } bys = recur->byMinutes(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_minute[index++] = *it; r.by_minute[index++] = static_cast(*it); } bys = recur->byHours(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_hour[index++] = *it; r.by_hour[index++] = static_cast(*it); } bys = recur->byMonthDays(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { short dShort = static_cast((*it) * 8); r.by_month_day[index++] = static_cast(icalrecurrencetype_day_position(dShort)); } bys = recur->byYearDays(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_year_day[index++] = static_cast(*it); } bys = recur->byWeekNumbers(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_week_no[index++] = static_cast(*it); } bys = recur->byMonths(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_month[index++] = static_cast(*it); } bys = recur->bySetPos(); index = 0; for (it = bys.constBegin(); it != bys.constEnd(); ++it) { r.by_set_pos[index++] = static_cast(*it); } const QList &byd = recur->byDays(); int day; index = 0; for (QList::ConstIterator dit = byd.constBegin(); dit != byd.constEnd(); ++dit) { day = (*dit).day() % 7 + 1; // convert from Monday=1 to Sunday=1 if ((*dit).pos() < 0) { day += (-(*dit).pos()) * 8; day = -day; } else { day += (*dit).pos() * 8; } r.by_day[index++] = static_cast(day); } r.week_start = static_cast(recur->weekStart() % 7 + 1); if (recur->frequency() > 1) { // Don't write out INTERVAL=1, because that's the default anyway r.interval = static_cast(recur->frequency()); } if (recur->duration() > 0) { r.count = recur->duration(); } else if (recur->duration() == -1) { r.count = 0; } else { if (recur->allDay()) { r.until = writeICalDate(recur->endDt().date()); } else { r.until = writeICalDateTime(recur->endDt()); } } return r; } icalcomponent *ICalFormatImpl::writeAlarm(const Alarm::Ptr &alarm) { if (alarm->enabled()) { alarm->setCustomProperty(APP_NAME_FOR_XPROPERTIES, ENABLED_ALARM_XPROPERTY, QStringLiteral("TRUE")); } else { alarm->setCustomProperty(APP_NAME_FOR_XPROPERTIES, ENABLED_ALARM_XPROPERTY, QStringLiteral("FALSE")); } icalcomponent *a = icalcomponent_new(ICAL_VALARM_COMPONENT); icalproperty_action action; icalattach *attach = nullptr; switch (alarm->type()) { case Alarm::Procedure: action = ICAL_ACTION_PROCEDURE; attach = icalattach_new_from_url(QFile::encodeName(alarm->programFile()).data()); icalcomponent_add_property(a, icalproperty_new_attach(attach)); if (!alarm->programArguments().isEmpty()) { icalcomponent_add_property(a, icalproperty_new_description(alarm->programArguments().toUtf8().constData())); } break; case Alarm::Audio: action = ICAL_ACTION_AUDIO; if (!alarm->audioFile().isEmpty()) { attach = icalattach_new_from_url(QFile::encodeName(alarm->audioFile()).data()); icalcomponent_add_property(a, icalproperty_new_attach(attach)); } break; case Alarm::Email: { action = ICAL_ACTION_EMAIL; const Person::List addresses = alarm->mailAddresses(); for (Person::List::ConstIterator ad = addresses.constBegin(); ad != addresses.constEnd(); ++ad) { if (!(*ad).email().isEmpty()) { icalproperty *p = icalproperty_new_attendee(QByteArray(QByteArray("MAILTO:") + (*ad).email().toUtf8()).constData()); if (!(*ad).name().isEmpty()) { icalproperty_add_parameter(p, icalparameter_new_cn((*ad).name().toUtf8().constData())); } icalcomponent_add_property(a, p); } } icalcomponent_add_property(a, icalproperty_new_summary(alarm->mailSubject().toUtf8().constData())); icalcomponent_add_property(a, icalproperty_new_description(alarm->mailText().toUtf8().constData())); const QStringList attachments = alarm->mailAttachments(); if (!attachments.isEmpty()) { for (QStringList::const_iterator at = attachments.constBegin(), end = attachments.constEnd(); at != end; ++at) { attach = icalattach_new_from_url(QFile::encodeName(*at).data()); icalcomponent_add_property(a, icalproperty_new_attach(attach)); } } break; } case Alarm::Display: action = ICAL_ACTION_DISPLAY; icalcomponent_add_property(a, icalproperty_new_description(alarm->text().toUtf8().constData())); break; case Alarm::Invalid: default: qDebug() << "Unknown type of alarm"; action = ICAL_ACTION_NONE; break; } icalcomponent_add_property(a, icalproperty_new_action(action)); // Trigger time icaltriggertype trigger; if (alarm->hasTime()) { trigger.time = writeICalUtcDateTime(alarm->time(), false); trigger.duration = icaldurationtype_null_duration(); } else { trigger.time = icaltime_null_time(); Duration offset; if (alarm->hasStartOffset()) { offset = alarm->startOffset(); } else { offset = alarm->endOffset(); } trigger.duration = writeICalDuration(offset); } icalproperty *p = icalproperty_new_trigger(trigger); if (alarm->hasEndOffset()) { icalproperty_add_parameter(p, icalparameter_new_related(ICAL_RELATED_END)); } icalcomponent_add_property(a, p); // Repeat count and duration if (alarm->repeatCount()) { icalcomponent_add_property(a, icalproperty_new_repeat(alarm->repeatCount())); icalcomponent_add_property(a, icalproperty_new_duration(writeICalDuration(alarm->snoozeTime()))); } // Custom properties const QMap custom = alarm->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { icalproperty *p = icalproperty_new_x(c.value().toUtf8().constData()); icalproperty_set_x_name(p, c.key().constData()); icalcomponent_add_property(a, p); } icalattach_unref(attach); return a; } icalproperty *ICalFormatImpl::writeConference(const Conference &conference) { icalproperty *p = icalproperty_new_conference(conference.uri().toString().toUtf8().constData()); icalproperty_set_parameter_from_string(p, "VALUE", "URI"); icalproperty_set_parameter_from_string(p, "FEATURE", conference.features().join(QLatin1Char(',')).toUtf8().constData()); icalproperty_set_parameter_from_string(p, "LABEL", conference.label().toUtf8().constData()); return p; } Todo::Ptr ICalFormatImpl::readTodo(icalcomponent *vtodo, const ICalTimeZoneCache *tzlist) { Todo::Ptr todo(new Todo); readIncidence(vtodo, todo, tzlist); icalproperty *p = icalcomponent_get_first_property(vtodo, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_DUE_PROPERTY: { // due date/time bool allDay = false; QDateTime kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); todo->setDtDue(kdt, true); todo->setAllDay(allDay); break; } case ICAL_COMPLETED_PROPERTY: // completion date/time todo->setCompleted(readICalDateTimeProperty(p, tzlist)); break; case ICAL_PERCENTCOMPLETE_PROPERTY: // Percent completed todo->setPercentComplete(icalproperty_get_percentcomplete(p)); break; case ICAL_RELATEDTO_PROPERTY: // related todo (parent) todo->setRelatedTo(QString::fromUtf8(icalproperty_get_relatedto(p))); d->mTodosRelate.append(todo); break; case ICAL_DTSTART_PROPERTY: // Flag that todo has start date. Value is read in by readIncidence(). if (!todo->comments().filter(QStringLiteral("NoStartDate")).isEmpty()) { todo->setDtStart(QDateTime()); } break; case ICAL_X_PROPERTY: { const char *name = icalproperty_get_x_name(p); if (QLatin1String(name) == QLatin1String("X-KDE-LIBKCAL-DTRECURRENCE")) { const QDateTime dateTime = readICalDateTimeProperty(p, tzlist); if (dateTime.isValid()) { todo->setDtRecurrence(dateTime); } else { qDebug() << "Invalid dateTime"; } } } break; default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(vtodo, ICAL_ANY_PROPERTY); } if (d->mCompat) { d->mCompat->fixEmptySummary(todo); } todo->resetDirtyFields(); return todo; } Event::Ptr ICalFormatImpl::readEvent(icalcomponent *vevent, const ICalTimeZoneCache *tzlist) { Event::Ptr event(new Event); readIncidence(vevent, event, tzlist); icalproperty *p = icalcomponent_get_first_property(vevent, ICAL_ANY_PROPERTY); bool dtEndProcessed = false; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_DTEND_PROPERTY: { // end date and time bool allDay = false; QDateTime kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); if (allDay) { // End date is non-inclusive QDate endDate = kdt.date().addDays(-1); if (d->mCompat) { d->mCompat->fixFloatingEnd(endDate); } if (endDate < event->dtStart().date()) { endDate = event->dtStart().date(); } event->setDtEnd(QDateTime(endDate, {}, event->dtStart().timeZone())); event->setAllDay(true); } else { event->setDtEnd(kdt); event->setAllDay(false); } dtEndProcessed = true; break; } case ICAL_RELATEDTO_PROPERTY: // related event (parent) event->setRelatedTo(QString::fromUtf8(icalproperty_get_relatedto(p))); d->mEventsRelate.append(event); break; case ICAL_TRANSP_PROPERTY: { // Transparency icalproperty_transp transparency = icalproperty_get_transp(p); if (transparency == ICAL_TRANSP_TRANSPARENT) { event->setTransparency(Event::Transparent); } else { event->setTransparency(Event::Opaque); } break; } default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(vevent, ICAL_ANY_PROPERTY); } // according to rfc2445 the dtend shouldn't be written when it equals // start date. so assign one equal to start date. if (!dtEndProcessed && !event->hasDuration()) { event->setDtEnd(event->dtStart()); } //全天 QString msade = event->nonKDECustomProperty("X-MICROSOFT-CDO-ALLDAYEVENT"); if (!msade.isEmpty()) { bool allDay = (msade == QLatin1String("TRUE")); event->setAllDay(allDay); } //农历 QString lunnar = event->nonKDECustomProperty(VEVENT_LUNNAR_XPROPERTY); if (!lunnar.isEmpty()) { //TODO:多次转æ�¢æ—¶ä¼šå‡ºçŽ°å¤šä¸ªTRUE,待跟踪 bool isLunnar = (lunnar.contains(QLatin1String("TRUE"))); event->setLunnar(isLunnar); } if (d->mCompat) { d->mCompat->fixEmptySummary(event); } event->resetDirtyFields(); return event; } FreeBusy::Ptr ICalFormatImpl::readFreeBusy(icalcomponent *vfreebusy) { FreeBusy::Ptr freebusy(new FreeBusy); d->readIncidenceBase(vfreebusy, freebusy); icalproperty *p = icalcomponent_get_first_property(vfreebusy, ICAL_ANY_PROPERTY); FreeBusyPeriod::List periods; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_DTSTART_PROPERTY: // start date and time (UTC) freebusy->setDtStart(readICalUtcDateTimeProperty(p, nullptr)); break; case ICAL_DTEND_PROPERTY: // end Date and Time (UTC) freebusy->setDtEnd(readICalUtcDateTimeProperty(p, nullptr)); break; case ICAL_FREEBUSY_PROPERTY: { // Any FreeBusy Times (UTC) icalperiodtype icalperiod = icalproperty_get_freebusy(p); QDateTime period_start = readICalUtcDateTime(p, icalperiod.start); FreeBusyPeriod period; if (!icaltime_is_null_time(icalperiod.end)) { QDateTime period_end = readICalUtcDateTime(p, icalperiod.end); period = FreeBusyPeriod(period_start, period_end); } else { Duration duration(readICalDuration(icalperiod.duration)); period = FreeBusyPeriod(period_start, duration); } icalparameter *param = icalproperty_get_first_parameter(p, ICAL_FBTYPE_PARAMETER); if (param) { icalparameter_fbtype fbType = icalparameter_get_fbtype(param); switch (fbType) { case ICAL_FBTYPE_FREE: period.setType(FreeBusyPeriod::Free); break; case ICAL_FBTYPE_BUSY: period.setType(FreeBusyPeriod::Busy); break; case ICAL_FBTYPE_BUSYTENTATIVE: period.setType(FreeBusyPeriod::BusyTentative); break; case ICAL_FBTYPE_BUSYUNAVAILABLE: period.setType(FreeBusyPeriod::BusyUnavailable); break; case ICAL_FBTYPE_X: period.setType(FreeBusyPeriod::Unknown); break; case ICAL_FBTYPE_NONE: period.setType(FreeBusyPeriod::Free); break; } } param = icalproperty_get_first_parameter(p, ICAL_X_PARAMETER); while (param) { if (strncmp(icalparameter_get_xname(param), "X-SUMMARY", 9) == 0) { period.setSummary(QString::fromUtf8(QByteArray::fromBase64(icalparameter_get_xvalue(param)))); } if (strncmp(icalparameter_get_xname(param), "X-LOCATION", 10) == 0) { period.setLocation(QString::fromUtf8(QByteArray::fromBase64(icalparameter_get_xvalue(param)))); } param = icalproperty_get_next_parameter(p, ICAL_X_PARAMETER); } periods.append(period); break; } default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(vfreebusy, ICAL_ANY_PROPERTY); } freebusy->addPeriods(periods); freebusy->resetDirtyFields(); return freebusy; } Journal::Ptr ICalFormatImpl::readJournal(icalcomponent *vjournal, const ICalTimeZoneCache *tzList) { Journal::Ptr journal(new Journal); readIncidence(vjournal, journal, tzList); journal->resetDirtyFields(); return journal; } Attendee ICalFormatImpl::readAttendee(icalproperty *attendee) { // the following is a hack to support broken calendars (like WebCalendar 1.0.x) // that include non-RFC-compliant attendees. Otherwise libical 0.42 asserts. if (!icalproperty_get_value(attendee)) { return {}; } icalparameter *p = nullptr; QString email = QString::fromUtf8(icalproperty_get_attendee(attendee)); if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { email.remove(0, 7); } // libical may return everything after ATTENDEE tag if the rest is // not meaningful. Verify the address to filter out these cases. if (!Person::isValidEmail(email)) { return {}; } QString name; QString uid; p = icalproperty_get_first_parameter(attendee, ICAL_CN_PARAMETER); if (p) { name = QString::fromUtf8(icalparameter_get_cn(p)); } else { } bool rsvp = false; p = icalproperty_get_first_parameter(attendee, ICAL_RSVP_PARAMETER); if (p) { icalparameter_rsvp rsvpParameter = icalparameter_get_rsvp(p); if (rsvpParameter == ICAL_RSVP_TRUE) { rsvp = true; } } Attendee::PartStat status = Attendee::NeedsAction; p = icalproperty_get_first_parameter(attendee, ICAL_PARTSTAT_PARAMETER); if (p) { icalparameter_partstat partStatParameter = icalparameter_get_partstat(p); switch (partStatParameter) { default: case ICAL_PARTSTAT_NEEDSACTION: status = Attendee::NeedsAction; break; case ICAL_PARTSTAT_ACCEPTED: status = Attendee::Accepted; break; case ICAL_PARTSTAT_DECLINED: status = Attendee::Declined; break; case ICAL_PARTSTAT_TENTATIVE: status = Attendee::Tentative; break; case ICAL_PARTSTAT_DELEGATED: status = Attendee::Delegated; break; case ICAL_PARTSTAT_COMPLETED: status = Attendee::Completed; break; case ICAL_PARTSTAT_INPROCESS: status = Attendee::InProcess; break; } } Attendee::Role role = Attendee::ReqParticipant; p = icalproperty_get_first_parameter(attendee, ICAL_ROLE_PARAMETER); if (p) { icalparameter_role roleParameter = icalparameter_get_role(p); switch (roleParameter) { case ICAL_ROLE_CHAIR: role = Attendee::Chair; break; default: case ICAL_ROLE_REQPARTICIPANT: role = Attendee::ReqParticipant; break; case ICAL_ROLE_OPTPARTICIPANT: role = Attendee::OptParticipant; break; case ICAL_ROLE_NONPARTICIPANT: role = Attendee::NonParticipant; break; } } Attendee::CuType cuType = Attendee::Individual; p = icalproperty_get_first_parameter(attendee, ICAL_CUTYPE_PARAMETER); if (p) { icalparameter_cutype cutypeParameter = icalparameter_get_cutype(p); switch (cutypeParameter) { case ICAL_CUTYPE_X: case ICAL_CUTYPE_UNKNOWN: cuType = Attendee::Unknown; break; default: case ICAL_CUTYPE_NONE: case ICAL_CUTYPE_INDIVIDUAL: cuType = Attendee::Individual; break; case ICAL_CUTYPE_GROUP: cuType = Attendee::Group; break; case ICAL_CUTYPE_RESOURCE: cuType = Attendee::Resource; break; case ICAL_CUTYPE_ROOM: cuType = Attendee::Room; break; } } p = icalproperty_get_first_parameter(attendee, ICAL_X_PARAMETER); QMap custom; while (p) { QString xname = QString::fromLatin1(icalparameter_get_xname(p)).toUpper(); QString xvalue = QString::fromUtf8(icalparameter_get_xvalue(p)); if (xname == QLatin1String("X-UID")) { uid = xvalue; } else { custom[xname.toUtf8()] = xvalue; } p = icalproperty_get_next_parameter(attendee, ICAL_X_PARAMETER); } Attendee a(name, email, rsvp, status, role, uid); a.setCuType(cuType); a.customProperties().setCustomProperties(custom); p = icalproperty_get_first_parameter(attendee, ICAL_DELEGATEDTO_PARAMETER); if (p) { a.setDelegate(QLatin1String(icalparameter_get_delegatedto(p))); } p = icalproperty_get_first_parameter(attendee, ICAL_DELEGATEDFROM_PARAMETER); if (p) { a.setDelegator(QLatin1String(icalparameter_get_delegatedfrom(p))); } return a; } Person ICalFormatImpl::readOrganizer(icalproperty *organizer) { QString email = QString::fromUtf8(icalproperty_get_organizer(organizer)); if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { email.remove(0, 7); } QString cn; icalparameter *p = icalproperty_get_first_parameter(organizer, ICAL_CN_PARAMETER); if (p) { cn = QString::fromUtf8(icalparameter_get_cn(p)); } Person org(cn, email); // TODO: Treat sent-by, dir and language here, too return org; } Attachment ICalFormatImpl::readAttachment(icalproperty *attach) { Attachment attachment; QByteArray p; icalvalue *value = icalproperty_get_value(attach); switch (icalvalue_isa(value)) { case ICAL_ATTACH_VALUE: { icalattach *a = icalproperty_get_attach(attach); if (!icalattach_get_is_url(a)) { p = QByteArray(reinterpret_cast(icalattach_get_data(a))); if (!p.isEmpty()) { attachment = Attachment(p); } } else { p = icalattach_get_url(a); if (!p.isEmpty()) { attachment = Attachment(QString::fromUtf8(p)); } } break; } case ICAL_BINARY_VALUE: { icalattach *a = icalproperty_get_attach(attach); p = QByteArray(reinterpret_cast(icalattach_get_data(a))); if (!p.isEmpty()) { attachment = Attachment(p); } break; } case ICAL_URI_VALUE: p = icalvalue_get_uri(value); attachment = Attachment(QString::fromUtf8(p)); break; default: break; } if (!attachment.isEmpty()) { icalparameter *p = icalproperty_get_first_parameter(attach, ICAL_FMTTYPE_PARAMETER); if (p) { attachment.setMimeType(QLatin1String(icalparameter_get_fmttype(p))); } p = icalproperty_get_first_parameter(attach, ICAL_X_PARAMETER); while (p) { QString xname = QString::fromLatin1(icalparameter_get_xname(p)).toUpper(); QString xvalue = QString::fromUtf8(icalparameter_get_xvalue(p)); if (xname == QLatin1String("X-CONTENT-DISPOSITION")) { attachment.setShowInline(xvalue.toLower() == QLatin1String("inline")); } else if (xname == QLatin1String("X-LABEL")) { attachment.setLabel(xvalue); } else if (xname == QLatin1String("X-KONTACT-TYPE")) { attachment.setLocal(xvalue.toLower() == QLatin1String("local")); } p = icalproperty_get_next_parameter(attach, ICAL_X_PARAMETER); } p = icalproperty_get_first_parameter(attach, ICAL_X_PARAMETER); while (p) { if (strncmp(icalparameter_get_xname(p), "X-LABEL", 7) == 0) { attachment.setLabel(QString::fromUtf8(icalparameter_get_xvalue(p))); } p = icalproperty_get_next_parameter(attach, ICAL_X_PARAMETER); } } return attachment; } void ICalFormatImpl::readIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, const ICalTimeZoneCache *tzlist) { d->readIncidenceBase(parent, incidence); icalproperty *p = icalcomponent_get_first_property(parent, ICAL_ANY_PROPERTY); const char *text; int intvalue, inttext; icaldurationtype icalduration; QDateTime kdt; QDateTime dtstamp; QStringList categories; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_CREATED_PROPERTY: incidence->setCreated(readICalDateTimeProperty(p, tzlist)); break; case ICAL_DTSTAMP_PROPERTY: dtstamp = readICalDateTimeProperty(p, tzlist); break; case ICAL_SEQUENCE_PROPERTY: // sequence intvalue = icalproperty_get_sequence(p); incidence->setRevision(intvalue); break; case ICAL_LASTMODIFIED_PROPERTY: // last modification UTC date/time incidence->setLastModified(readICalDateTimeProperty(p, tzlist)); break; case ICAL_DTSTART_PROPERTY: { // start date and time bool allDay = false; kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); incidence->setDtStart(kdt); incidence->setAllDay(allDay); break; } case ICAL_DURATION_PROPERTY: // start date and time icalduration = icalproperty_get_duration(p); incidence->setDuration(readICalDuration(icalduration)); break; case ICAL_DESCRIPTION_PROPERTY: { // description QString textStr = QString::fromUtf8(icalproperty_get_description(p)); if (!textStr.isEmpty()) { QString valStr = QString::fromUtf8(icalproperty_get_parameter_as_string(p, "X-KDE-TEXTFORMAT")); if (!valStr.compare(QLatin1String("HTML"), Qt::CaseInsensitive)) { incidence->setDescription(textStr, true); } else { incidence->setDescription(textStr, false); } } } break; case ICAL_SUMMARY_PROPERTY: { // summary QString textStr = QString::fromUtf8(icalproperty_get_summary(p)); if (!textStr.isEmpty()) { QString valStr = QString::fromUtf8(icalproperty_get_parameter_as_string(p, "X-KDE-TEXTFORMAT")); if (!valStr.compare(QLatin1String("HTML"), Qt::CaseInsensitive)) { incidence->setSummary(textStr, true); } else { incidence->setSummary(textStr, false); } } } break; case ICAL_LOCATION_PROPERTY: { // location if (!icalproperty_get_value(p)) { // Fix for #191472. This is a pre-crash guard in case libical was // compiled in superstrict mode (--enable-icalerrors-are-fatal) // TODO: pre-crash guard other property getters too. break; } QString textStr = QString::fromUtf8(icalproperty_get_location(p)); if (!textStr.isEmpty()) { QString valStr = QString::fromUtf8(icalproperty_get_parameter_as_string(p, "X-KDE-TEXTFORMAT")); if (!valStr.compare(QLatin1String("HTML"), Qt::CaseInsensitive)) { incidence->setLocation(textStr, true); } else { incidence->setLocation(textStr, false); } } } break; case ICAL_STATUS_PROPERTY: { // status Incidence::Status stat; switch (icalproperty_get_status(p)) { case ICAL_STATUS_TENTATIVE: stat = Incidence::StatusTentative; break; case ICAL_STATUS_CONFIRMED: stat = Incidence::StatusConfirmed; break; case ICAL_STATUS_COMPLETED: stat = Incidence::StatusCompleted; break; case ICAL_STATUS_NEEDSACTION: stat = Incidence::StatusNeedsAction; break; case ICAL_STATUS_CANCELLED: stat = Incidence::StatusCanceled; break; case ICAL_STATUS_INPROCESS: stat = Incidence::StatusInProcess; break; case ICAL_STATUS_DRAFT: stat = Incidence::StatusDraft; break; case ICAL_STATUS_FINAL: stat = Incidence::StatusFinal; break; case ICAL_STATUS_X: incidence->setCustomStatus(QString::fromUtf8(icalvalue_get_x(icalproperty_get_value(p)))); stat = Incidence::StatusX; break; case ICAL_STATUS_NONE: default: stat = Incidence::StatusNone; break; } if (stat != Incidence::StatusX) { incidence->setStatus(stat); } break; } case ICAL_GEO_PROPERTY: { // geo icalgeotype geo = icalproperty_get_geo(p); incidence->setGeoLatitude(geo.lat); incidence->setGeoLongitude(geo.lon); incidence->setHasGeo(true); break; } case ICAL_PRIORITY_PROPERTY: // priority intvalue = icalproperty_get_priority(p); if (d->mCompat) { intvalue = d->mCompat->fixPriority(intvalue); } incidence->setPriority(intvalue); break; case ICAL_CATEGORIES_PROPERTY: { // categories // We have always supported multiple CATEGORIES properties per component // even though the RFC seems to indicate only 1 is permitted. // We can't change that -- in order to retain backwards compatibility. text = icalproperty_get_categories(p); const QString val = QString::fromUtf8(text); const QStringList lstVal = val.split(QLatin1Char(','), QT_SKIP_EMPTY_PARTS); for (const QString &cat : lstVal) { // ensure no duplicates if (!categories.contains(cat)) { categories.append(cat); } } break; } case ICAL_RECURRENCEID_PROPERTY: // recurrenceId kdt = readICalDateTimeProperty(p, tzlist); if (kdt.isValid()) { incidence->setRecurrenceId(kdt); const icalparameter *param = icalproperty_get_first_parameter(p, ICAL_RANGE_PARAMETER); if (param && icalparameter_get_range(param) == ICAL_RANGE_THISANDFUTURE) { incidence->setThisAndFuture(true); } else { // A workaround for a bug in libical (https://github.com/libical/libical/issues/185) // If a recurrenceId has both tzid and range, both parameters end up in the tzid. // This results in invalid tzid's like: "Europe/Berlin;RANGE=THISANDFUTURE" const icalparameter *param = icalproperty_get_first_parameter(p, ICAL_TZID_PARAMETER); QString tzid = QString::fromLatin1(icalparameter_get_tzid(param)); const QStringList parts = tzid.toLower().split(QLatin1Char(';')); for (const QString &part : parts) { if (part == QLatin1String("range=thisandfuture")) { incidence->setThisAndFuture(true); break; } } } } break; case ICAL_RRULE_PROPERTY: readRecurrenceRule(p, incidence); break; case ICAL_RDATE_PROPERTY: { bool allDay = false; kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); if (kdt.isValid()) { if (allDay) { incidence->recurrence()->addRDate(kdt.date()); } else { incidence->recurrence()->addRDateTime(kdt); } } else { // TODO: RDates as period are not yet implemented! } break; } case ICAL_EXRULE_PROPERTY: readExceptionRule(p, incidence); break; case ICAL_EXDATE_PROPERTY: { bool allDay = false; kdt = readICalDateTimeProperty(p, tzlist, false, &allDay); if (allDay) { incidence->recurrence()->addExDate(kdt.date()); } else { incidence->recurrence()->addExDateTime(kdt); } break; } case ICAL_CLASS_PROPERTY: inttext = icalproperty_get_class(p); if (inttext == ICAL_CLASS_PUBLIC) { incidence->setSecrecy(Incidence::SecrecyPublic); } else if (inttext == ICAL_CLASS_CONFIDENTIAL) { incidence->setSecrecy(Incidence::SecrecyConfidential); } else { incidence->setSecrecy(Incidence::SecrecyPrivate); } break; case ICAL_ATTACH_PROPERTY: // attachments incidence->addAttachment(readAttachment(p)); break; case ICAL_COLOR_PROPERTY: incidence->setColor(QString::fromUtf8(icalproperty_get_color(p))); break; default: // TODO: do something about unknown properties? break; } p = icalcomponent_get_next_property(parent, ICAL_ANY_PROPERTY); } // Set the scheduling ID const QString uid = incidence->customProperty("LIBKCAL", "ID"); if (!uid.isNull()) { // The UID stored in incidencebase is actually the scheduling ID // It has to be stored in the iCal UID component for compatibility // with other iCal applications incidence->setSchedulingID(incidence->uid(), uid); } // Now that recurrence and exception stuff is completely set up, // do any backwards compatibility adjustments. if (incidence->recurs() && d->mCompat) { d->mCompat->fixRecurrence(incidence); } // add categories incidence->setCategories(categories); // iterate through all alarms for (icalcomponent *alarm = icalcomponent_get_first_component(parent, ICAL_VALARM_COMPONENT); alarm; alarm = icalcomponent_get_next_component(parent, ICAL_VALARM_COMPONENT)) { readAlarm(alarm, incidence); } // iterate through all conferences Conference::List conferences; for (auto *conf = icalcomponent_get_first_property(parent, ICAL_CONFERENCE_PROPERTY); conf; conf = icalcomponent_get_next_property(parent, ICAL_CONFERENCE_PROPERTY)) { conferences.push_back(readConference(conf)); } incidence->setConferences(conferences); if (d->mCompat) { // Fix incorrect alarm settings by other applications (like outloook 9) d->mCompat->fixAlarms(incidence); d->mCompat->setCreatedToDtStamp(incidence, dtstamp); } } //@cond PRIVATE void ICalFormatImpl::Private::readIncidenceBase(icalcomponent *parent, const IncidenceBase::Ptr &incidenceBase) { icalproperty *p = icalcomponent_get_first_property(parent, ICAL_ANY_PROPERTY); bool uidProcessed = false; while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_UID_PROPERTY: // unique id uidProcessed = true; incidenceBase->setUid(QString::fromUtf8(icalproperty_get_uid(p))); break; case ICAL_ORGANIZER_PROPERTY: // organizer incidenceBase->setOrganizer(mImpl->readOrganizer(p)); break; case ICAL_ATTENDEE_PROPERTY: // attendee incidenceBase->addAttendee(mImpl->readAttendee(p)); break; case ICAL_COMMENT_PROPERTY: incidenceBase->addComment(QString::fromUtf8(icalproperty_get_comment(p))); break; case ICAL_CONTACT_PROPERTY: incidenceBase->addContact(QString::fromUtf8(icalproperty_get_contact(p))); break; case ICAL_URL_PROPERTY: incidenceBase->setUrl(QUrl(QString::fromUtf8(icalproperty_get_url(p)))); break; default: break; } p = icalcomponent_get_next_property(parent, ICAL_ANY_PROPERTY); } if (!uidProcessed) { qWarning() << "The incidence didn't have any UID! Report a bug " << "to the application that generated this file."; // Our in-memory incidence has a random uid generated in Event's ctor. // Make it empty so it matches what's in the file: incidenceBase->setUid(QString()); // Otherwise, next time we read the file, this function will return // an event with another random uid and we will have two events in the calendar. } // custom properties readCustomProperties(parent, incidenceBase.data()); } void ICalFormatImpl::Private::readCustomProperties(icalcomponent *parent, CustomProperties *properties) { QByteArray property; QString value, parameters; icalproperty *p = icalcomponent_get_first_property(parent, ICAL_X_PROPERTY); icalparameter *param = nullptr; while (p) { QString nvalue = QString::fromUtf8(icalproperty_get_x(p)); if (nvalue.isEmpty()) { icalvalue *value = icalproperty_get_value(p); if (icalvalue_isa(value) == ICAL_TEXT_VALUE) { // Calling icalvalue_get_text( value ) on a datetime value crashes. nvalue = QString::fromUtf8(icalvalue_get_text(value)); } else { p = icalcomponent_get_next_property(parent, ICAL_X_PROPERTY); continue; } } const char *name = icalproperty_get_x_name(p); QByteArray nproperty(name); if (property != nproperty) { // New property if (!property.isEmpty()) { properties->setNonKDECustomProperty(property, value, parameters); } property = name; value = nvalue; QStringList parametervalues; for (param = icalproperty_get_first_parameter(p, ICAL_ANY_PARAMETER); param; param = icalproperty_get_next_parameter(p, ICAL_ANY_PARAMETER)) { // 'c' is owned by ical library => all we need to do is just use it const char *c = icalparameter_as_ical_string(param); parametervalues.push_back(QLatin1String(c)); } parameters = parametervalues.join(QLatin1Char(';')); } else { value = value.append(QLatin1Char(',')).append(nvalue); } p = icalcomponent_get_next_property(parent, ICAL_X_PROPERTY); } if (!property.isEmpty()) { properties->setNonKDECustomProperty(property, value, parameters); } } //@endcond void ICalFormatImpl::readRecurrenceRule(icalproperty *rrule, const Incidence::Ptr &incidence) { Recurrence *recur = incidence->recurrence(); struct icalrecurrencetype r = icalproperty_get_rrule(rrule); // dumpIcalRecurrence(r); RecurrenceRule *recurrule = new RecurrenceRule(/*incidence*/); recurrule->setStartDt(incidence->dtStart()); readRecurrence(r, recurrule); recur->addRRule(recurrule); } void ICalFormatImpl::readExceptionRule(icalproperty *rrule, const Incidence::Ptr &incidence) { struct icalrecurrencetype r = icalproperty_get_exrule(rrule); // dumpIcalRecurrence(r); RecurrenceRule *recurrule = new RecurrenceRule(/*incidence*/); recurrule->setStartDt(incidence->dtStart()); readRecurrence(r, recurrule); Recurrence *recur = incidence->recurrence(); recur->addExRule(recurrule); } void ICalFormatImpl::readRecurrence(const struct icalrecurrencetype &r, RecurrenceRule *recur) { // Generate the RRULE string recur->setRRule(QLatin1String(icalrecurrencetype_as_string(const_cast(&r)))); // Period switch (r.freq) { case ICAL_SECONDLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rSecondly); break; case ICAL_MINUTELY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rMinutely); break; case ICAL_HOURLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rHourly); break; case ICAL_DAILY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rDaily); break; case ICAL_WEEKLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rWeekly); break; case ICAL_MONTHLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rMonthly); break; case ICAL_YEARLY_RECURRENCE: recur->setRecurrenceType(RecurrenceRule::rYearly); break; case ICAL_NO_RECURRENCE: default: recur->setRecurrenceType(RecurrenceRule::rNone); } // Frequency recur->setFrequency(r.interval); // Duration & End Date if (!icaltime_is_null_time(r.until)) { icaltimetype t = r.until; //结æ�Ÿæ—¶é—´ä¸�切æ�¢é›¶æ—¶åŒº recur->setEndDt(readICalDateTime(nullptr, t, nullptr, false)); } else { if (r.count == 0) { recur->setDuration(-1); } else { recur->setDuration(r.count); } } // Week start setting short wkst = static_cast((r.week_start + 5) % 7 + 1); recur->setWeekStart(wkst); // And now all BY* QList lst; int i; int index = 0; // clang-format off //@cond PRIVATE #define readSetByList( rrulecomp, setfunc ) \ index = 0; \ lst.clear(); \ while ( ( i = r.rrulecomp[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { \ lst.append( i ); \ } \ if ( !lst.isEmpty() ) { \ recur->setfunc( lst ); \ } //@endcond // clang-format on // BYSECOND, MINUTE and HOUR, MONTHDAY, YEARDAY, WEEKNUMBER, MONTH // and SETPOS are standard int lists, so we can treat them with the // same macro readSetByList(by_second, setBySeconds); readSetByList(by_minute, setByMinutes); readSetByList(by_hour, setByHours); readSetByList(by_month_day, setByMonthDays); readSetByList(by_year_day, setByYearDays); readSetByList(by_week_no, setByWeekNumbers); readSetByList(by_month, setByMonths); readSetByList(by_set_pos, setBySetPos); #undef readSetByList // BYDAY is a special case, since it's not an int list QList wdlst; short day; index = 0; while ((day = r.by_day[index++]) != ICAL_RECURRENCE_ARRAY_MAX) { RecurrenceRule::WDayPos pos; pos.setDay(static_cast((icalrecurrencetype_day_day_of_week(day) + 5) % 7 + 1)); pos.setPos(icalrecurrencetype_day_position(day)); wdlst.append(pos); } if (!wdlst.isEmpty()) { recur->setByDays(wdlst); } // TODO: Store all X- fields of the RRULE inside the recurrence (so they are // preserved } void ICalFormatImpl::readAlarm(icalcomponent *alarm, const Incidence::Ptr &incidence) { Alarm::Ptr ialarm = incidence->newAlarm(); ialarm->setRepeatCount(0); ialarm->setEnabled(true); // Determine the alarm's action type icalproperty *p = icalcomponent_get_first_property(alarm, ICAL_ACTION_PROPERTY); Alarm::Type type = Alarm::Display; icalproperty_action action = ICAL_ACTION_DISPLAY; if (!p) { qDebug() << "Unknown type of alarm, using default"; // TODO: do something about unknown alarm type? } else { action = icalproperty_get_action(p); switch (action) { case ICAL_ACTION_DISPLAY: type = Alarm::Display; break; case ICAL_ACTION_AUDIO: type = Alarm::Audio; break; case ICAL_ACTION_PROCEDURE: type = Alarm::Procedure; break; case ICAL_ACTION_EMAIL: type = Alarm::Email; break; default: break; // TODO: do something about invalid alarm type? } } ialarm->setType(type); p = icalcomponent_get_first_property(alarm, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_TRIGGER_PROPERTY: { icaltriggertype trigger = icalproperty_get_trigger(p); if (!icaltime_is_null_time(trigger.time)) { // set the trigger to a specific time (which is not in rfc2445, btw) ialarm->setTime(readICalUtcDateTime(p, trigger.time)); } else { // set the trigger to an offset from the incidence start or end time. if (!icaldurationtype_is_bad_duration(trigger.duration)) { Duration duration(readICalDuration(trigger.duration)); icalparameter *param = icalproperty_get_first_parameter(p, ICAL_RELATED_PARAMETER); if (param && icalparameter_get_related(param) == ICAL_RELATED_END) { ialarm->setEndOffset(duration); } else { ialarm->setStartOffset(duration); } } else { // a bad duration was encountered, just set a 0 duration from start ialarm->setStartOffset(Duration(0)); } } break; } case ICAL_DURATION_PROPERTY: { icaldurationtype duration = icalproperty_get_duration(p); ialarm->setSnoozeTime(readICalDuration(duration)); break; } case ICAL_REPEAT_PROPERTY: ialarm->setRepeatCount(icalproperty_get_repeat(p)); break; case ICAL_DESCRIPTION_PROPERTY: { // Only in DISPLAY and EMAIL and PROCEDURE alarms QString description = QString::fromUtf8(icalproperty_get_description(p)); switch (action) { case ICAL_ACTION_DISPLAY: ialarm->setText(description); break; case ICAL_ACTION_PROCEDURE: ialarm->setProgramArguments(description); break; case ICAL_ACTION_EMAIL: ialarm->setMailText(description); break; default: break; } break; } case ICAL_SUMMARY_PROPERTY: // Only in EMAIL alarm ialarm->setMailSubject(QString::fromUtf8(icalproperty_get_summary(p))); break; case ICAL_ATTENDEE_PROPERTY: { // Only in EMAIL alarm QString email = QString::fromUtf8(icalproperty_get_attendee(p)); if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { email.remove(0, 7); } QString name; icalparameter *param = icalproperty_get_first_parameter(p, ICAL_CN_PARAMETER); if (param) { name = QString::fromUtf8(icalparameter_get_cn(param)); } ialarm->addMailAddress(Person(name, email)); break; } case ICAL_ATTACH_PROPERTY: { // Only in AUDIO and EMAIL and PROCEDURE alarms Attachment attach = readAttachment(p); if (!attach.isEmpty() && attach.isUri()) { switch (action) { case ICAL_ACTION_AUDIO: ialarm->setAudioFile(attach.uri()); break; case ICAL_ACTION_PROCEDURE: ialarm->setProgramFile(attach.uri()); break; case ICAL_ACTION_EMAIL: ialarm->addMailAttachment(attach.uri()); break; default: break; } } else { qDebug() << "Alarm attachments currently only support URIs," << "but no binary data"; } break; } default: break; } p = icalcomponent_get_next_property(alarm, ICAL_ANY_PROPERTY); } // custom properties d->readCustomProperties(alarm, ialarm.data()); QString locationRadius = ialarm->nonKDECustomProperty("X-LOCATION-RADIUS"); if (!locationRadius.isEmpty()) { ialarm->setLocationRadius(locationRadius.toInt()); ialarm->setHasLocationRadius(true); } if (ialarm->customProperty(APP_NAME_FOR_XPROPERTIES, ENABLED_ALARM_XPROPERTY) == QLatin1String("FALSE")) { ialarm->setEnabled(false); } // TODO: check for consistency of alarm properties } icaldatetimeperiodtype ICalFormatImpl::writeICalDatePeriod(const QDate &date) { icaldatetimeperiodtype t; t.time = writeICalDate(date); t.period = icalperiodtype_null_period(); return t; } Conference ICalFormatImpl::readConference(icalproperty *prop) { Conference conf; conf.setUri(QUrl(QString::fromUtf8(icalproperty_get_conference(prop)))); conf.setLabel(QString::fromUtf8(icalproperty_get_parameter_as_string(prop, "LABEL"))); conf.setFeatures(QString::fromUtf8(icalproperty_get_parameter_as_string(prop, "FEATURE")).split(QLatin1Char(','))); conf.setLanguage(QString::fromUtf8(icalproperty_get_parameter_as_string(prop, "LANGUAGE"))); return conf; } icaltimetype ICalFormatImpl::writeICalDate(const QDate &date) { icaltimetype t = icaltime_null_time(); t.year = date.year(); t.month = date.month(); t.day = date.day(); t.hour = 0; t.minute = 0; t.second = 0; t.is_date = 1; t.zone = nullptr; return t; } icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &datetime, bool dateOnly) { icaltimetype t = icaltime_null_time(); t.year = datetime.date().year(); t.month = datetime.date().month(); t.day = datetime.date().day(); t.is_date = dateOnly; if (!t.is_date) { t.hour = datetime.time().hour(); t.minute = datetime.time().minute(); t.second = datetime.time().second(); } t.zone = nullptr; // zone is NOT set if (datetime.timeSpec() == Qt::UTC || (datetime.timeSpec() == Qt::TimeZone && datetime.timeZone() == QTimeZone::utc()) || (datetime.timeSpec() == Qt::OffsetFromUTC && datetime.offsetFromUtc() == 0)) { t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone()); } return t; } icalproperty *ICalFormatImpl::writeICalDateTimeProperty(const icalproperty_kind type, const QDateTime &dt, TimeZoneList *tzUsedList) { icaltimetype t; switch (type) { case ICAL_DTSTAMP_PROPERTY: case ICAL_CREATED_PROPERTY: case ICAL_LASTMODIFIED_PROPERTY: t = writeICalDateTime(dt.toUTC()); break; default: t = writeICalDateTime(dt); break; } icalproperty *p; switch (type) { case ICAL_DTSTAMP_PROPERTY: p = icalproperty_new_dtstamp(t); break; case ICAL_CREATED_PROPERTY: p = icalproperty_new_created(t); break; case ICAL_LASTMODIFIED_PROPERTY: p = icalproperty_new_lastmodified(t); break; case ICAL_DTSTART_PROPERTY: // start date and time p = icalproperty_new_dtstart(t); break; case ICAL_DTEND_PROPERTY: // end date and time p = icalproperty_new_dtend(t); break; case ICAL_DUE_PROPERTY: p = icalproperty_new_due(t); break; case ICAL_RECURRENCEID_PROPERTY: p = icalproperty_new_recurrenceid(t); break; case ICAL_EXDATE_PROPERTY: p = icalproperty_new_exdate(t); break; case ICAL_X_PROPERTY: { p = icalproperty_new_x(""); icaltimetype timeType = writeICalDateTime(dt); icalvalue *text = icalvalue_new_datetime(timeType); icalproperty_set_value(p, text); } break; default: { icaldatetimeperiodtype tp; tp.time = t; tp.period = icalperiodtype_null_period(); switch (type) { case ICAL_RDATE_PROPERTY: p = icalproperty_new_rdate(tp); break; default: return nullptr; } } } QTimeZone qtz; if (!icaltime_is_utc(t)) { qtz = dt.timeZone(); } if (qtz.isValid()) { if (tzUsedList) { if (!tzUsedList->contains(qtz)) { tzUsedList->push_back(qtz); } } icalproperty_add_parameter(p, icalparameter_new_tzid(qtz.id().constData())); } return p; } QDateTime ICalFormatImpl::readICalDateTime(icalproperty *p, const icaltimetype &t, const ICalTimeZoneCache *tzCache, bool utc) { // qDebug(); // _dumpIcaltime( t ); QTimeZone timeZone; if (icaltime_is_utc(t) || t.zone == icaltimezone_get_utc_timezone()) { timeZone = QTimeZone::utc(); // the time zone is UTC utc = false; // no need to convert to UTC } else { icalparameter *param = p ? icalproperty_get_first_parameter(p, ICAL_TZID_PARAMETER) : nullptr; QByteArray tzid = param ? QByteArray(icalparameter_get_tzid(param)) : QByteArray(); // A workaround for a bug in libical (https://github.com/libical/libical/issues/185) // If a recurrenceId has both tzid and range, both parameters end up in the tzid. // This results in invalid tzid's like: "Europe/Berlin;RANGE=THISANDFUTURE" QStringList parts = QString::fromLatin1(tzid).split(QLatin1Char(';')); if (parts.count() > 1) { tzid = parts.first().toLatin1(); } if (tzCache) { // First try to get the timezone from cache timeZone = tzCache->tzForTime(QDateTime({t.year, t.month, t.day}, {}), tzid); } if (!timeZone.isValid()) { // Fallback to trying to match against Qt timezone timeZone = QTimeZone(tzid); } if (!timeZone.isValid()) { // Finally, give up and assume local timezone timeZone = QTimeZone::systemTimeZone(); } } QDateTime result; if (t.is_date) { result = QDateTime(QDate(t.year, t.month, t.day), {}, timeZone); } else { result = QDateTime(QDate(t.year, t.month, t.day), QTime(t.hour, t.minute, t.second), timeZone); } return utc ? result.toUTC() : result; } QDate ICalFormatImpl::readICalDate(const icaltimetype &t) { return QDate(t.year, t.month, t.day); } QDateTime ICalFormatImpl::readICalDateTimeProperty(icalproperty *p, const ICalTimeZoneCache *tzList, bool utc, bool *allDay) { icaldatetimeperiodtype tp; icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_CREATED_PROPERTY: // UTC date/time tp.time = icalproperty_get_created(p); utc = true; break; case ICAL_DTSTAMP_PROPERTY: // UTC date/time tp.time = icalproperty_get_dtstamp(p); utc = true; break; case ICAL_LASTMODIFIED_PROPERTY: // last modification UTC date/time tp.time = icalproperty_get_lastmodified(p); utc = true; break; case ICAL_DTSTART_PROPERTY: // start date and time (UTC for freebusy) tp.time = icalproperty_get_dtstart(p); break; case ICAL_DTEND_PROPERTY: // end date and time (UTC for freebusy) tp.time = icalproperty_get_dtend(p); break; case ICAL_DUE_PROPERTY: // due date/time tp.time = icalproperty_get_due(p); break; case ICAL_COMPLETED_PROPERTY: // UTC completion date/time tp.time = icalproperty_get_completed(p); utc = true; break; case ICAL_RECURRENCEID_PROPERTY: tp.time = icalproperty_get_recurrenceid(p); break; case ICAL_EXDATE_PROPERTY: tp.time = icalproperty_get_exdate(p); break; case ICAL_X_PROPERTY: { const char *name = icalproperty_get_x_name(p); if (QLatin1String(name) == QLatin1String("X-KDE-LIBKCAL-DTRECURRENCE")) { const char *value = icalvalue_as_ical_string(icalproperty_get_value(p)); icalvalue *v = icalvalue_new_from_string(ICAL_DATETIME_VALUE, value); tp.time = icalvalue_get_datetime(v); icalvalue_free(v); break; } } // end of ICAL_X_PROPERTY Q_FALLTHROUGH(); default: switch (kind) { case ICAL_RDATE_PROPERTY: tp = icalproperty_get_rdate(p); break; default: return QDateTime(); } if (!icaltime_is_valid_time(tp.time)) { return QDateTime(); // a time period was found (not implemented yet) } break; } if (allDay) { *allDay = tp.time.is_date; } if (tp.time.is_date) { return QDateTime(readICalDate(tp.time), QTime()); } else { return readICalDateTime(p, tp.time, tzList, utc); } } icaldurationtype ICalFormatImpl::writeICalDuration(const Duration &duration) { // should be able to use icaldurationtype_from_int(), except we know // that some older tools do not properly support weeks. So we never // set a week duration, only days icaldurationtype d; int value = duration.value(); d.is_neg = (value < 0) ? 1 : 0; if (value < 0) { value = -value; } // RFC2445 states that an ical duration value must be // EITHER weeks OR days/time, not both. if (duration.isDaily()) { if (!(value % 7)) { d.weeks = value / 7; d.days = 0; } else { d.weeks = 0; d.days = value; } d.hours = d.minutes = d.seconds = 0; } else { if (!(value % gSecondsPerWeek)) { d.weeks = value / gSecondsPerWeek; d.days = d.hours = d.minutes = d.seconds = 0; } else { d.weeks = 0; d.days = value / gSecondsPerDay; value %= gSecondsPerDay; d.hours = value / gSecondsPerHour; value %= gSecondsPerHour; d.minutes = value / gSecondsPerMinute; value %= gSecondsPerMinute; d.seconds = value; } } return d; } Duration ICalFormatImpl::readICalDuration(const icaldurationtype &d) { int days = d.weeks * 7; days += d.days; int seconds = d.hours * gSecondsPerHour; seconds += d.minutes * gSecondsPerMinute; seconds += d.seconds; if (seconds || !days) { // Create second-type duration for 0 delay durations. seconds += days * gSecondsPerDay; if (d.is_neg) { seconds = -seconds; } return Duration(seconds, Duration::Seconds); } else { if (d.is_neg) { days = -days; } return Duration(days, Duration::Days); } } icalcomponent *ICalFormatImpl::createCalendarComponent(const Calendar::Ptr &cal) { icalcomponent *calendar; // Root component calendar = icalcomponent_new(ICAL_VCALENDAR_COMPONENT); // Product Identifier icalproperty *p = icalproperty_new_prodid(CalFormat::productId().toUtf8().constData()); icalcomponent_add_property(calendar, p); // iCalendar version (2.0) p = icalproperty_new_version(const_cast(_ICAL_VERSION)); icalcomponent_add_property(calendar, p); // Implementation Version p = icalproperty_new_x(_ICAL_IMPLEMENTATION_VERSION); icalproperty_set_x_name(p, IMPLEMENTATION_VERSION_XPROPERTY); icalcomponent_add_property(calendar, p); // Add time zone // NOTE: Commented out since relevant timezones are added by the caller. // Previously we got some timezones listed twice in the ical file. /* if ( cal && cal->timeZones() ) { const ICalTimeZones::ZoneMap zmaps = cal->timeZones()->zones(); for ( ICalTimeZones::ZoneMap::ConstIterator it=zmaps.constBegin(); it != zmaps.constEnd(); ++it ) { icaltimezone *icaltz = (*it).icalTimezone(); if ( !icaltz ) { qCritical() << "bad time zone"; } else { icalcomponent *tz = icalcomponent_new_clone( icaltimezone_get_component( icaltz ) ); icalcomponent_add_component( calendar, tz ); icaltimezone_free( icaltz, 1 ); } } } */ // Custom properties if (cal != nullptr) { d->writeCustomProperties(calendar, cal.data()); } return calendar; } Incidence::Ptr ICalFormatImpl::readOneIncidence(icalcomponent *calendar, const ICalTimeZoneCache *tzlist) { if (!calendar) { qWarning() << "Populate called with empty calendar"; return Incidence::Ptr(); } icalcomponent *c = icalcomponent_get_first_component(calendar, ICAL_VEVENT_COMPONENT); if (c) { return readEvent(c, tzlist); } c = icalcomponent_get_first_component(calendar, ICAL_VTODO_COMPONENT); if (c) { return readTodo(c, tzlist); } c = icalcomponent_get_first_component(calendar, ICAL_VJOURNAL_COMPONENT); if (c) { return readJournal(c, tzlist); } qWarning() << "Found no incidence"; return Incidence::Ptr(); } // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. // and break it down from its tree-like format into the dictionary format // that is used internally in the ICalFormatImpl. //获å�–原始vcalendar(å�³ï¼Œä»Žç£�盘上的文件ã€�剪贴æ�¿ç­‰ï¼‰ï¼Œå¹¶å°†å…¶ä»Žæ ‘状格å¼�分解为ICalFormatImpl内部使用的字典格å¼�。 bool ICalFormatImpl::populate(const Calendar::Ptr &cal, icalcomponent *calendar, bool deleted, const QString ¬ebook) { Q_UNUSED(notebook); // qDebug()<<"Populate called"; // this function will populate the caldict dictionary and other event // lists. It turns vevents into Events and then inserts them. // if (!calendar) { qWarning() << "Populate called with empty calendar"; return false; } // TODO: check for METHOD icalproperty *p = icalcomponent_get_first_property(calendar, ICAL_X_PROPERTY); QString implementationVersion; while (p) { const char *name = icalproperty_get_x_name(p); QByteArray nproperty(name); if (nproperty == QByteArray(IMPLEMENTATION_VERSION_XPROPERTY)) { QString nvalue = QString::fromUtf8(icalproperty_get_x(p)); if (nvalue.isEmpty()) { icalvalue *value = icalproperty_get_value(p); if (icalvalue_isa(value) == ICAL_TEXT_VALUE) { nvalue = QString::fromUtf8(icalvalue_get_text(value)); } } implementationVersion = nvalue; icalcomponent_remove_property(calendar, p); icalproperty_free(p); } p = icalcomponent_get_next_property(calendar, ICAL_X_PROPERTY); } p = icalcomponent_get_first_property(calendar, ICAL_PRODID_PROPERTY); if (!p) { qDebug() << "No PRODID property found"; d->mLoadedProductId.clear(); } else { d->mLoadedProductId = QString::fromUtf8(icalproperty_get_prodid(p)); delete d->mCompat; d->mCompat = CompatFactory::createCompat(d->mLoadedProductId, implementationVersion); } p = icalcomponent_get_first_property(calendar, ICAL_VERSION_PROPERTY); if (!p) { qDebug() << "No VERSION property found"; d->mParent->setException(new Exception(Exception::CalVersionUnknown)); return false; } else { const char *version = icalproperty_get_version(p); if (!version) { qDebug() << "No VERSION property found"; d->mParent->setException(new Exception(Exception::VersionPropertyMissing)); return false; } if (strcmp(version, "1.0") == 0) { qDebug() << "Expected iCalendar, got vCalendar"; d->mParent->setException(new Exception(Exception::CalVersion1)); return false; } else if (strcmp(version, "2.0") != 0) { qDebug() << "Expected iCalendar, got unknown format"; d->mParent->setException(new Exception(Exception::CalVersionUnknown)); return false; } } // Populate the calendar's time zone collection with all VTIMEZONE components ICalTimeZoneCache timeZoneCache; ICalTimeZoneParser parser(&timeZoneCache); parser.parse(calendar); // custom properties d->readCustomProperties(calendar, cal.data()); // Store all events with a relatedTo property in a list for post-processing d->mEventsRelate.clear(); d->mTodosRelate.clear(); // TODO: make sure that only actually added events go to this lists. icalcomponent *c = icalcomponent_get_first_component(calendar, ICAL_VTODO_COMPONENT); while (c) { Todo::Ptr todo = readTodo(c, &timeZoneCache); if (todo) { // qDebug() << "todo is not zero and deleted is " << deleted; Todo::Ptr old = cal->todo(todo->uid(), todo->recurrenceId()); if (old) { if (old->uid().isEmpty()) { qWarning() << "Skipping invalid VTODO"; c = icalcomponent_get_next_component(calendar, ICAL_VTODO_COMPONENT); continue; } // qDebug() << "Found an old todo with uid " << old->uid(); if (deleted) { // qDebug() << "Todo " << todo->uid() << " already deleted"; cal->deleteTodo(old); // move old to deleted removeAllICal(d->mTodosRelate, old); } else if (todo->revision() > old->revision()) { // qDebug() << "Replacing old todo " << old.data() << " with this one " << todo.data(); cal->deleteTodo(old); // move old to deleted removeAllICal(d->mTodosRelate, old); cal->addTodo(todo); // and replace it with this one } } else if (deleted) { // qDebug() << "Todo " << todo->uid() << " already deleted"; old = cal->deletedTodo(todo->uid(), todo->recurrenceId()); if (!old) { cal->addTodo(todo); // add this one cal->deleteTodo(todo); // and move it to deleted } } else { // qDebug() << "Adding todo " << todo.data() << todo->uid(); cal->addTodo(todo); // just add this one } } c = icalcomponent_get_next_component(calendar, ICAL_VTODO_COMPONENT); } // Iterate through all events c = icalcomponent_get_first_component(calendar, ICAL_VEVENT_COMPONENT); while (c) { Event::Ptr event = readEvent(c, &timeZoneCache); if (event) { // qDebug() << "event is not zero and deleted is " << deleted; Event::Ptr old = cal->event(event->uid(), event->recurrenceId()); if (old) { if (old->uid().isEmpty()) { qWarning() << "Skipping invalid VEVENT"; c = icalcomponent_get_next_component(calendar, ICAL_VEVENT_COMPONENT); continue; } // qDebug() << "Found an old event with uid " << old->uid(); if (deleted) { // qDebug() << "Event " << event->uid() << " already deleted"; cal->deleteEvent(old); // move old to deleted removeAllICal(d->mEventsRelate, old); } else if (event->revision() > old->revision()) { // qDebug() << "Replacing old event " << old.data() // << " with this one " << event.data(); cal->deleteEvent(old); // move old to deleted removeAllICal(d->mEventsRelate, old); cal->addEvent(event); // and replace it with this one } } else if (deleted) { // qDebug() << "Event " << event->uid() << " already deleted"; old = cal->deletedEvent(event->uid(), event->recurrenceId()); if (!old) { cal->addEvent(event); // add this one cal->deleteEvent(event); // and move it to deleted } } else { // qDebug() << "Adding event " << event.data() << event->uid(); cal->addEvent(event); // just add this one } } c = icalcomponent_get_next_component(calendar, ICAL_VEVENT_COMPONENT); } // Iterate through all journals c = icalcomponent_get_first_component(calendar, ICAL_VJOURNAL_COMPONENT); while (c) { Journal::Ptr journal = readJournal(c, &timeZoneCache); if (journal) { Journal::Ptr old = cal->journal(journal->uid(), journal->recurrenceId()); if (old) { if (deleted) { cal->deleteJournal(old); // move old to deleted } else if (journal->revision() > old->revision()) { cal->deleteJournal(old); // move old to deleted cal->addJournal(journal); // and replace it with this one } } else if (deleted) { old = cal->deletedJournal(journal->uid(), journal->recurrenceId()); if (!old) { cal->addJournal(journal); // add this one cal->deleteJournal(journal); // and move it to deleted } } else { cal->addJournal(journal); // just add this one } } c = icalcomponent_get_next_component(calendar, ICAL_VJOURNAL_COMPONENT); } // TODO: Remove any previous time zones no longer referenced in the calendar return true; } QString ICalFormatImpl::extractErrorProperty(icalcomponent *c) { QString errorMessage; icalproperty *error = icalcomponent_get_first_property(c, ICAL_XLICERROR_PROPERTY); while (error) { errorMessage += QLatin1String(icalproperty_get_xlicerror(error)); errorMessage += QLatin1Char('\n'); error = icalcomponent_get_next_property(c, ICAL_XLICERROR_PROPERTY); } return errorMessage; } /* void ICalFormatImpl::dumpIcalRecurrence( const icalrecurrencetype &r ) { int i; qDebug() << " Freq:" << int( r.freq ); qDebug() << " Until:" << icaltime_as_ical_string( r.until ); qDebug() << " Count:" << r.count; if ( r.by_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Day: "; while ( ( i = r.by_day[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_month_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Month Day: "; while ( ( i = r.by_month_day[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_year_day[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Year Day: "; while ( ( i = r.by_year_day[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_month[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Month: "; while ( ( i = r.by_month[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { out.append( QString::number( i ) + ' ' ); } qDebug() << out; } if ( r.by_set_pos[0] != ICAL_RECURRENCE_ARRAY_MAX ) { int index = 0; QString out = " By Set Pos: "; while ( ( i = r.by_set_pos[index++] ) != ICAL_RECURRENCE_ARRAY_MAX ) { qDebug() << "=========" << i; out.append( QString::number( i ) + ' ' ); } qDebug() << out; } } */ icalcomponent *ICalFormatImpl::createScheduleComponent(const IncidenceBase::Ptr &incidence, iTIPMethod method) { icalcomponent *message = createCalendarComponent(); // Create VTIMEZONE components for this incidence TimeZoneList zones; if (incidence) { const QDateTime kd1 = incidence->dateTime(IncidenceBase::RoleStartTimeZone); const QDateTime kd2 = incidence->dateTime(IncidenceBase::RoleEndTimeZone); if (kd1.isValid() && kd1.timeZone() != QTimeZone::utc()) { zones << kd1.timeZone(); } if (kd2.isValid() && kd2.timeZone() != QTimeZone::utc() && kd1.timeZone() != kd2.timeZone()) { zones << kd2.timeZone(); } TimeZoneEarliestDate earliestTz; ICalTimeZoneParser::updateTzEarliestDate(incidence, &earliestTz); for (const auto &qtz : qAsConst(zones)) { icaltimezone *icaltz = ICalTimeZoneParser::icaltimezoneFromQTimeZone(qtz, earliestTz[qtz]); if (!icaltz) { qCritical() << "bad time zone"; } else { icalcomponent *tz = icalcomponent_new_clone(icaltimezone_get_component(icaltz)); icalcomponent_add_component(message, tz); icaltimezone_free(icaltz, 1); } } } else { qDebug() << "No incidence"; return message; } icalproperty_method icalmethod = ICAL_METHOD_NONE; switch (method) { case iTIPPublish: icalmethod = ICAL_METHOD_PUBLISH; break; case iTIPRequest: icalmethod = ICAL_METHOD_REQUEST; break; case iTIPRefresh: icalmethod = ICAL_METHOD_REFRESH; break; case iTIPCancel: icalmethod = ICAL_METHOD_CANCEL; break; case iTIPAdd: icalmethod = ICAL_METHOD_ADD; break; case iTIPReply: icalmethod = ICAL_METHOD_REPLY; break; case iTIPCounter: icalmethod = ICAL_METHOD_COUNTER; break; case iTIPDeclineCounter: icalmethod = ICAL_METHOD_DECLINECOUNTER; break; default: qDebug() << "Unknown method"; return message; } icalcomponent_add_property(message, icalproperty_new_method(icalmethod)); icalcomponent *inc = writeIncidence(incidence, method); if (method != KCalendarCore::iTIPNoMethod) { // Not very nice, but since dtstamp changes semantics if used in scheduling, we have to adapt icalcomponent_set_dtstamp(inc, writeICalUtcDateTime(QDateTime::currentDateTimeUtc())); } /* * RFC 2446 states in section 3.4.3 ( REPLY to a VTODO ), that * a REQUEST-STATUS property has to be present. For the other two, event and * free busy, it can be there, but is optional. Until we do more * fine grained handling, assume all is well. Note that this is the * status of the _request_, not the attendee. Just to avoid confusion. * - till */ if (icalmethod == ICAL_METHOD_REPLY) { struct icalreqstattype rst; rst.code = ICAL_2_0_SUCCESS_STATUS; rst.desc = nullptr; rst.debug = nullptr; icalcomponent_add_property(inc, icalproperty_new_requeststatus(rst)); } icalcomponent_add_component(message, inc); return message; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/icalformat_p.h000066400000000000000000000201051523260663500267310ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2006 David Jarvie SPDX-FileCopyrightText: 2012 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the internal ICalFormatImpl class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author David Jarvie \ */ #ifndef KCALCORE_ICALFORMAT_P_H #define KCALCORE_ICALFORMAT_P_H #include "calendar.h" #include "event.h" #include "exceptions.h" #include "freebusy.h" #include "journal.h" #include "person.h" #include "schedulemessage.h" #include "todo.h" #include class QDate; namespace KCalendarCore { class Alarm; class Attachment; class Attendee; class Conference; class Duration; class Event; class FreeBusy; class ICalFormat; class ICalTimeZoneCache; class Incidence; class Journal; class Recurrence; class RecurrenceRule; class Todo; using TimeZoneList = QVector; /** Tell the Libical library that we are using ICal Version 2.0. @internal */ #define _ICAL_VERSION "2.0" /** Version of this library implementation @internal */ #define _ICAL_IMPLEMENTATION_VERSION "1.0" /** @brief This class provides the libical dependent functions for ICalFormat. This class implements the iCalendar format. It provides methods for loading/saving/converting iCalendar format data into the internal representation as Calendar and Incidences. @internal */ class ICalFormatImpl { public: /** Construct a new iCal format for calendar object. @param parent is a pointer to a valid ICalFormat object. */ explicit ICalFormatImpl(ICalFormat *parent); /** Destructor. */ virtual ~ICalFormatImpl(); /** Updates a calendar with data from a raw iCalendar. Incidences already existing in @p calendar are not affected except that if a new incidence with the same UID is found, the existing incidence is replaced. */ bool populate(const Calendar::Ptr &calendar, icalcomponent *fs, bool deleted = false, const QString ¬ebook = QString()); Incidence::Ptr readOneIncidence(icalcomponent *calendar, const ICalTimeZoneCache *tzlist); icalcomponent *writeIncidence(const IncidenceBase::Ptr &incidence, iTIPMethod method = iTIPRequest, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeTodo(const Todo::Ptr &todo, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeEvent(const Event::Ptr &event, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeJournal(const Journal::Ptr &journal, TimeZoneList *tzUsedList = nullptr); icalcomponent *writeFreeBusy(const FreeBusy::Ptr &freebusy, iTIPMethod method = iTIPPublish); void writeIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, TimeZoneList *tzUsedList = nullptr); icalproperty *writeDescription(const QString &description, bool isRich = false); icalproperty *writeSummary(const QString &summary, bool isRich = false); icalproperty *writeLocation(const QString &location, bool isRich = false); icalproperty *writeAttendee(const Attendee &attendee); icalproperty *writeOrganizer(const Person &organizer); icalproperty *writeAttachment(const Attachment &attach); icalproperty *writeRecurrenceRule(Recurrence *); icalrecurrencetype writeRecurrenceRule(RecurrenceRule *recur); icalcomponent *writeAlarm(const Alarm::Ptr &alarm); icalproperty *writeConference(const Conference &conference); QString extractErrorProperty(icalcomponent *); Todo::Ptr readTodo(icalcomponent *vtodo, const ICalTimeZoneCache *tzList); Event::Ptr readEvent(icalcomponent *vevent, const ICalTimeZoneCache *tzList); FreeBusy::Ptr readFreeBusy(icalcomponent *vfreebusy); Journal::Ptr readJournal(icalcomponent *vjournal, const ICalTimeZoneCache *tzList); Attendee readAttendee(icalproperty *attendee); Person readOrganizer(icalproperty *organizer); Attachment readAttachment(icalproperty *attach); void readIncidence(icalcomponent *parent, const Incidence::Ptr &incidence, const ICalTimeZoneCache *tzList); void readRecurrenceRule(icalproperty *rrule, const Incidence::Ptr &event); void readExceptionRule(icalproperty *rrule, const Incidence::Ptr &incidence); void readRecurrence(const struct icalrecurrencetype &r, RecurrenceRule *recur); void readAlarm(icalcomponent *alarm, const Incidence::Ptr &incidence); Conference readConference(icalproperty *conference); /** Returns the PRODID string loaded from calendar file. */ QString loadedProductId() const; static icaltimetype writeICalDate(const QDate &); static QDate readICalDate(const icaltimetype &); static icaltimetype writeICalDateTime(const QDateTime &, bool dayOnly = false); static icaltimetype writeICalUtcDateTime(const QDateTime &, bool dayOnly = false); /** Creates an ical property from a date/time value. If a time zone is specified for the value, a TZID parameter is inserted into the ical property, @p tzlist and @p tzUsedList are updated to include the time zone. Note that while @p tzlist owns any time zone instances in its collection, @p tzUsedList does not. @param kind kind of property @param dt date/time value @param tzlist time zones collection @param tzUsedList time zones collection, only updated if @p tzlist is also specified @return property, or null if error. It is the caller's responsibility to free the returned property. */ static icalproperty *writeICalDateTimeProperty(const icalproperty_kind kind, const QDateTime &dt, TimeZoneList *tzUsedList = nullptr); /** Converts a date/time from ICal format. @param p property from which @p t has been obtained @param t ICal format date/time @param utc UTC date/time is expected @return date/time, converted to UTC if @p utc is @c true */ static QDateTime readICalDateTime(icalproperty *p, const icaltimetype &t, const ICalTimeZoneCache *tzList, bool utc = false); /** Converts a UTC date/time from ICal format. If @p t is not a UTC date/time, it is treated as invalid. @param p ical parameter to read from @param t ICal format date/time @return date/time, or invalid if @p t is not UTC */ static QDateTime readICalUtcDateTime(icalproperty *p, icaltimetype &t, const ICalTimeZoneCache *tzList = nullptr) { return readICalDateTime(p, t, tzList, true); } /** Reads a date or date/time value from a property. @param p ical parameter to read from @param utc true to read a UTC value, false to allow time zone to be specified. @return date or date/time, or invalid if property doesn't contain a time value. */ static QDateTime readICalDateTimeProperty(icalproperty *p, const ICalTimeZoneCache *tzList, bool utc = false, bool *allDay = nullptr); /** Reads a UTC date/time value from a property. @param p is a pointer to a valid icalproperty structure. */ static QDateTime readICalUtcDateTimeProperty(icalproperty *p, const ICalTimeZoneCache *tzList, bool *allDay = nullptr) { return readICalDateTimeProperty(p, tzList, true, allDay); } static icaldurationtype writeICalDuration(const Duration &duration); static Duration readICalDuration(const icaldurationtype &d); static icaldatetimeperiodtype writeICalDatePeriod(const QDate &date); icalcomponent *createCalendarComponent(const Calendar::Ptr &calendar = Calendar::Ptr()); icalcomponent *createScheduleComponent(const IncidenceBase::Ptr &incidence, iTIPMethod method); protected: // void dumpIcalRecurrence( const icalrecurrencetype &r ); private: //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/icaltimezones.cpp000066400000000000000000000635441523260663500275100ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2005-2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #include "icalformat.h" #include "icalformat_p.h" #include "icaltimezones_p.h" #include "recurrence.h" #include "recurrencehelper_p.h" #include "recurrencerule.h" #include #include #include extern "C" { //#include #include } using namespace KCalendarCore; // Minimum repetition counts for VTIMEZONE RRULEs static const int minRuleCount = 5; // for any RRULE static const int minPhaseCount = 8; // for separate STANDARD/DAYLIGHT component // Convert an ical time to QDateTime, preserving the UTC indicator static QDateTime toQDateTime(const icaltimetype &t) { return QDateTime(QDate(t.year, t.month, t.day), QTime(t.hour, t.minute, t.second), (icaltime_is_utc(t) ? Qt::UTC : Qt::LocalTime)); } // Maximum date for time zone data. // It's not sensible to try to predict them very far in advance, because // they can easily change. Plus, it limits the processing required. static QDateTime MAX_DATE() { static QDateTime dt; if (!dt.isValid()) { dt = QDateTime(QDate::currentDate().addYears(20), QTime(0, 0, 0)); } return dt; } static icaltimetype writeLocalICalDateTime(const QDateTime &utc, int offset) { const QDateTime local = utc.addSecs(offset); icaltimetype t = icaltime_null_time(); t.year = local.date().year(); t.month = local.date().month(); t.day = local.date().day(); t.hour = local.time().hour(); t.minute = local.time().minute(); t.second = local.time().second(); t.is_date = 0; t.zone = nullptr; return t; } namespace KCalendarCore { void ICalTimeZonePhase::dump() { qDebug() << " ~~~ ICalTimeZonePhase ~~~"; qDebug() << " Abbreviations:" << abbrevs; qDebug() << " UTC offset:" << utcOffset; qDebug() << " Transitions:" << transitions; qDebug() << " ~~~~~~~~~~~~~~~~~~~~~~~~~"; } void ICalTimeZone::dump() { qDebug() << "~~~ ICalTimeZone ~~~"; qDebug() << "ID:" << id; qDebug() << "QZONE:" << qZone.id(); qDebug() << "STD:"; standard.dump(); qDebug() << "DST:"; daylight.dump(); qDebug() << "~~~~~~~~~~~~~~~~~~~~"; } ICalTimeZoneCache::ICalTimeZoneCache() { } void ICalTimeZoneCache::insert(const QByteArray &id, const ICalTimeZone &tz) { mCache.insert(id, tz); } namespace { template typename T::const_iterator greatestSmallerThan(const T &c, const typename T::value_type &v) { auto it = std::lower_bound(c.cbegin(), c.cend(), v); if (it != c.cbegin()) { return --it; } return c.cend(); } } // namespace QTimeZone ICalTimeZoneCache::tzForTime(const QDateTime &dt, const QByteArray &tzid) const { if (QTimeZone::isTimeZoneIdAvailable(tzid)) { return QTimeZone(tzid); } const ICalTimeZone tz = mCache.value(tzid); if (!tz.qZone.isValid()) { return QTimeZone::systemTimeZone(); } // If the matched timezone is one of the UTC offset timezones, we need to make // sure it's in the correct DTS. // The lookup in ICalTimeZoneParser will only find TZ in standard time, but // if the datetim in question fits in the DTS zone, we need to use another UTC // offset timezone if (tz.qZone.id().startsWith("UTC")) { // krazy:exclude=strings // Find the nearest standard and DST transitions that occur BEFORE the "dt" const auto stdPrev = greatestSmallerThan(tz.standard.transitions, dt); const auto dstPrev = greatestSmallerThan(tz.daylight.transitions, dt); if (stdPrev != tz.standard.transitions.cend() && dstPrev != tz.daylight.transitions.cend()) { if (*dstPrev > *stdPrev) { // Previous DTS is closer to "dt" than previous standard, which // means we are in DTS right now const auto tzids = QTimeZone::availableTimeZoneIds(tz.daylight.utcOffset); auto dtsTzId = std::find_if(tzids.cbegin(), tzids.cend(), [](const QByteArray &id) { return id.startsWith("UTC"); // krazy:exclude=strings }); if (dtsTzId != tzids.cend()) { return QTimeZone(*dtsTzId); } } } } return tz.qZone; } ICalTimeZoneParser::ICalTimeZoneParser(ICalTimeZoneCache *cache) : mCache(cache) { } void ICalTimeZoneParser::updateTzEarliestDate(const IncidenceBase::Ptr &incidence, TimeZoneEarliestDate *earliest) { for (auto role : {IncidenceBase::RoleStartTimeZone, IncidenceBase::RoleEndTimeZone}) { const auto dt = incidence->dateTime(role); if (dt.isValid()) { if (dt.timeZone() == QTimeZone::utc()) { continue; } const auto prev = earliest->value(incidence->dtStart().timeZone()); if (!prev.isValid() || incidence->dtStart() < prev) { earliest->insert(incidence->dtStart().timeZone(), prev); } } } } icalcomponent *ICalTimeZoneParser::icalcomponentFromQTimeZone(const QTimeZone &tz, const QDateTime &earliest) { // VTIMEZONE RRULE types enum { DAY_OF_MONTH = 0x01, WEEKDAY_OF_MONTH = 0x02, LAST_WEEKDAY_OF_MONTH = 0x04, }; // Write the time zone data into an iCal component icalcomponent *tzcomp = icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); icalcomponent_add_property(tzcomp, icalproperty_new_tzid(tz.id().constData())); // icalcomponent_add_property(tzcomp, icalproperty_new_location( tz.name().toUtf8() )); // Compile an ordered list of transitions so that we can know the phases // which occur before and after each transition. QTimeZone::OffsetDataList transits = tz.transitions(QDateTime(), MAX_DATE()); if (transits.isEmpty()) { // If there is no way to compile a complete list of transitions // transitions() can return an empty list // In that case try get one transition to write a valid VTIMEZONE entry. if (transits.isEmpty()) { qDebug() << "No transition information available VTIMEZONE will be invalid."; } } if (earliest.isValid()) { // Remove all transitions earlier than those we are interested in for (int i = 0, end = transits.count(); i < end; ++i) { if (transits.at(i).atUtc >= earliest) { if (i > 0) { transits.erase(transits.begin(), transits.begin() + i); } break; } } } int trcount = transits.count(); QVector transitionsDone(trcount, false); // Go through the list of transitions and create an iCal component for each // distinct combination of phase after and UTC offset before the transition. icaldatetimeperiodtype dtperiod; dtperiod.period = icalperiodtype_null_period(); for (;;) { int i = 0; for (; i < trcount && transitionsDone[i]; ++i) { ; } if (i >= trcount) { break; } // Found a phase combination which hasn't yet been processed const int preOffset = (i > 0) ? transits.at(i - 1).offsetFromUtc : 0; const auto &transit = transits.at(i); if (transit.offsetFromUtc == preOffset) { transitionsDone[i] = true; while (++i < trcount) { if (transitionsDone[i] || transits.at(i).offsetFromUtc != transit.offsetFromUtc || transits.at(i).daylightTimeOffset != transit.daylightTimeOffset || transits.at(i - 1).offsetFromUtc != preOffset) { continue; } transitionsDone[i] = true; } continue; } const bool isDst = transit.daylightTimeOffset > 0; icalcomponent *phaseComp = icalcomponent_new(isDst ? ICAL_XDAYLIGHT_COMPONENT : ICAL_XSTANDARD_COMPONENT); if (!transit.abbreviation.isEmpty()) { icalcomponent_add_property(phaseComp, icalproperty_new_tzname(static_cast(transit.abbreviation.toUtf8().constData()))); } icalcomponent_add_property(phaseComp, icalproperty_new_tzoffsetfrom(preOffset)); icalcomponent_add_property(phaseComp, icalproperty_new_tzoffsetto(transit.offsetFromUtc)); // Create a component to hold initial RRULE if any, plus all RDATEs icalcomponent *phaseComp1 = icalcomponent_new_clone(phaseComp); icalcomponent_add_property(phaseComp1, icalproperty_new_dtstart(writeLocalICalDateTime(transits.at(i).atUtc, preOffset))); bool useNewRRULE = false; // Compile the list of UTC transition dates/times, and check // if the list can be reduced to an RRULE instead of multiple RDATEs. QTime time; QDate date; int year = 0, month = 0, daysInMonth = 0, dayOfMonth = 0; // avoid compiler warnings int dayOfWeek = 0; // Monday = 1 int nthFromStart = 0; // nth (weekday) of month int nthFromEnd = 0; // nth last (weekday) of month int newRule; int rule = 0; QList rdates; // dates which (probably) need to be written as RDATEs QList times; QDateTime qdt = transits.at(i).atUtc; // set 'qdt' for start of loop times += qdt; transitionsDone[i] = true; do { if (!rule) { // Initialise data for detecting a new rule rule = DAY_OF_MONTH | WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH; time = qdt.time(); date = qdt.date(); year = date.year(); month = date.month(); daysInMonth = date.daysInMonth(); dayOfWeek = date.dayOfWeek(); // Monday = 1 dayOfMonth = date.day(); nthFromStart = (dayOfMonth - 1) / 7 + 1; // nth (weekday) of month nthFromEnd = (daysInMonth - dayOfMonth) / 7 + 1; // nth last (weekday) of month } if (++i >= trcount) { newRule = 0; times += QDateTime(); // append a dummy value since last value in list is ignored } else { if (transitionsDone[i] || transits.at(i).offsetFromUtc != transit.offsetFromUtc || transits.at(i).daylightTimeOffset != transit.daylightTimeOffset || transits.at(i - 1).offsetFromUtc != preOffset) { continue; } transitionsDone[i] = true; qdt = transits.at(i).atUtc; if (!qdt.isValid()) { continue; } newRule = rule; times += qdt; date = qdt.date(); if (qdt.time() != time || date.month() != month || date.year() != ++year) { newRule = 0; } else { const int day = date.day(); if ((newRule & DAY_OF_MONTH) && day != dayOfMonth) { newRule &= ~DAY_OF_MONTH; } if (newRule & (WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH)) { if (date.dayOfWeek() != dayOfWeek) { newRule &= ~(WEEKDAY_OF_MONTH | LAST_WEEKDAY_OF_MONTH); } else { if ((newRule & WEEKDAY_OF_MONTH) && (day - 1) / 7 + 1 != nthFromStart) { newRule &= ~WEEKDAY_OF_MONTH; } if ((newRule & LAST_WEEKDAY_OF_MONTH) && (daysInMonth - day) / 7 + 1 != nthFromEnd) { newRule &= ~LAST_WEEKDAY_OF_MONTH; } } } } } if (!newRule) { // The previous rule (if any) no longer applies. // Write all the times up to but not including the current one. // First check whether any of the last RDATE values fit this rule. int yr = times[0].date().year(); while (!rdates.isEmpty()) { qdt = rdates.last(); date = qdt.date(); if (qdt.time() != time || date.month() != month || date.year() != --yr) { break; } const int day = date.day(); if (rule & DAY_OF_MONTH) { if (day != dayOfMonth) { break; } } else { if (date.dayOfWeek() != dayOfWeek || ((rule & WEEKDAY_OF_MONTH) && (day - 1) / 7 + 1 != nthFromStart) || ((rule & LAST_WEEKDAY_OF_MONTH) && (daysInMonth - day) / 7 + 1 != nthFromEnd)) { break; } } times.prepend(qdt); rdates.pop_back(); } if (times.count() > (useNewRRULE ? minPhaseCount : minRuleCount)) { // There are enough dates to combine into an RRULE icalrecurrencetype r; icalrecurrencetype_clear(&r); r.freq = ICAL_YEARLY_RECURRENCE; r.by_month[0] = month; if (rule & DAY_OF_MONTH) { r.by_month_day[0] = dayOfMonth; } else if (rule & WEEKDAY_OF_MONTH) { r.by_day[0] = (dayOfWeek % 7 + 1) + (nthFromStart * 8); // Sunday = 1 } else if (rule & LAST_WEEKDAY_OF_MONTH) { r.by_day[0] = -(dayOfWeek % 7 + 1) - (nthFromEnd * 8); // Sunday = 1 } r.until = writeLocalICalDateTime(times.takeAt(times.size() - 1), preOffset); icalproperty *prop = icalproperty_new_rrule(r); if (useNewRRULE) { // This RRULE doesn't start from the phase start date, so set it into // a new STANDARD/DAYLIGHT component in the VTIMEZONE. icalcomponent *c = icalcomponent_new_clone(phaseComp); icalcomponent_add_property(c, icalproperty_new_dtstart(writeLocalICalDateTime(times[0], preOffset))); icalcomponent_add_property(c, prop); icalcomponent_add_component(tzcomp, c); } else { icalcomponent_add_property(phaseComp1, prop); } } else { // Save dates for writing as RDATEs for (int t = 0, tend = times.count() - 1; t < tend; ++t) { rdates += times[t]; } } useNewRRULE = true; // All date/time values but the last have been added to the VTIMEZONE. // Remove them from the list. qdt = times.last(); // set 'qdt' for start of loop times.clear(); times += qdt; } rule = newRule; } while (i < trcount); // Write remaining dates as RDATEs for (int rd = 0, rdend = rdates.count(); rd < rdend; ++rd) { dtperiod.time = writeLocalICalDateTime(rdates[rd], preOffset); icalcomponent_add_property(phaseComp1, icalproperty_new_rdate(dtperiod)); } icalcomponent_add_component(tzcomp, phaseComp1); icalcomponent_free(phaseComp); } return tzcomp; } icaltimezone *ICalTimeZoneParser::icaltimezoneFromQTimeZone(const QTimeZone &tz, const QDateTime &earliest) { auto itz = icaltimezone_new(); icaltimezone_set_component(itz, icalcomponentFromQTimeZone(tz, earliest)); return itz; } void ICalTimeZoneParser::parse(icalcomponent *calendar) { for (auto *c = icalcomponent_get_first_component(calendar, ICAL_VTIMEZONE_COMPONENT); c; c = icalcomponent_get_next_component(calendar, ICAL_VTIMEZONE_COMPONENT)) { auto icalZone = parseTimeZone(c); // icalZone.dump(); if (!icalZone.id.isEmpty()) { if (!icalZone.qZone.isValid()) { icalZone.qZone = resolveICalTimeZone(icalZone); } if (!icalZone.qZone.isValid()) { qWarning() << "Failed to map" << icalZone.id << "to a known IANA timezone"; continue; } mCache->insert(icalZone.id, icalZone); } } } QTimeZone ICalTimeZoneParser::resolveICalTimeZone(const ICalTimeZone &icalZone) { const auto phase = icalZone.standard; const auto now = QDateTime::currentDateTimeUtc(); const auto candidates = QTimeZone::availableTimeZoneIds(phase.utcOffset); QMap matchedCandidates; for (const auto &tzid : candidates) { const QTimeZone candidate(tzid); // This would be a fallback, candidate has transitions, but the phase does not if (candidate.hasTransitions() == phase.transitions.isEmpty()) { matchedCandidates.insert(0, candidate); continue; } // Without transitions, we can't do any more precise matching, so just // accept this candidate and be done with it if (!candidate.hasTransitions() && phase.transitions.isEmpty()) { return candidate; } // Calculate how many transitions this candidate shares with the phase. // The candidate with the most matching transitions will win. auto begin = std::lower_bound(phase.transitions.cbegin(), phase.transitions.cend(), now.addYears(-20)); // If no transition older than 20 years is found, we will start from beginning if (begin == phase.transitions.cend()) { begin = phase.transitions.cbegin(); } auto end = std::upper_bound(begin, phase.transitions.cend(), now); int matchedTransitions = 0; for (auto it = begin; it != end; ++it) { const auto &transition = *it; const QTimeZone::OffsetDataList candidateTransitions = candidate.transitions(transition, transition); if (candidateTransitions.isEmpty()) { continue; } ++matchedTransitions; // 1 point for a matching transition const auto candidateTransition = candidateTransitions[0]; // FIXME: THIS IS HOW IT SHOULD BE: // const auto abvs = transition.abbreviations(); const auto abvs = phase.abbrevs; for (const auto &abv : abvs) { if (candidateTransition.abbreviation == QString::fromUtf8(abv)) { matchedTransitions += 1024; // lots of points for a transition with a matching abbreviation break; } } } matchedCandidates.insert(matchedTransitions, candidate); } if (!matchedCandidates.isEmpty()) { return matchedCandidates.value(matchedCandidates.lastKey()); } return {}; } ICalTimeZone ICalTimeZoneParser::parseTimeZone(icalcomponent *vtimezone) { ICalTimeZone icalTz; if (auto tzidProp = icalcomponent_get_first_property(vtimezone, ICAL_TZID_PROPERTY)) { icalTz.id = icalproperty_get_value_as_string(tzidProp); // If the VTIMEZONE is a known IANA time zone don't bother parsing the rest // of the VTIMEZONE, get QTimeZone directly from Qt if (QTimeZone::isTimeZoneIdAvailable(icalTz.id)) { icalTz.qZone = QTimeZone(icalTz.id); return icalTz; } else { // Not IANA, but maybe we can match it from Windows ID? const auto ianaTzid = QTimeZone::windowsIdToDefaultIanaId(icalTz.id); if (!ianaTzid.isEmpty()) { icalTz.qZone = QTimeZone(ianaTzid); return icalTz; } } } for (icalcomponent *c = icalcomponent_get_first_component(vtimezone, ICAL_ANY_COMPONENT); c; c = icalcomponent_get_next_component(vtimezone, ICAL_ANY_COMPONENT)) { icalcomponent_kind kind = icalcomponent_isa(c); switch (kind) { case ICAL_XSTANDARD_COMPONENT: // qDebug() << "---standard phase: found"; parsePhase(c, false, icalTz.standard); break; case ICAL_XDAYLIGHT_COMPONENT: // qDebug() << "---daylight phase: found"; parsePhase(c, true, icalTz.daylight); break; default: qDebug() << "Unknown component:" << int(kind); break; } } return icalTz; } bool ICalTimeZoneParser::parsePhase(icalcomponent *c, bool daylight, ICalTimeZonePhase &phase) { // Read the observance data for this standard/daylight savings phase int utcOffset = 0; int prevOffset = 0; bool recurs = false; bool found_dtstart = false; bool found_tzoffsetfrom = false; bool found_tzoffsetto = false; icaltimetype dtstart = icaltime_null_time(); QSet abbrevs; // Now do the ical reading. icalproperty *p = icalcomponent_get_first_property(c, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_TZNAME_PROPERTY: { // abbreviated name for this time offset // TZNAME can appear multiple times in order to provide language // translations of the time zone offset name. // TODO: Does this cope with multiple language specifications? QByteArray name = icalproperty_get_tzname(p); // Outlook (2000) places "Standard Time" and "Daylight Time" in the TZNAME // strings, which is totally useless. So ignore those. if ((!daylight && name == "Standard Time") || (daylight && name == "Daylight Time")) { break; } abbrevs.insert(name); break; } case ICAL_DTSTART_PROPERTY: // local time at which phase starts dtstart = icalproperty_get_dtstart(p); found_dtstart = true; break; case ICAL_TZOFFSETFROM_PROPERTY: // UTC offset immediately before start of phase prevOffset = icalproperty_get_tzoffsetfrom(p); found_tzoffsetfrom = true; break; case ICAL_TZOFFSETTO_PROPERTY: utcOffset = icalproperty_get_tzoffsetto(p); found_tzoffsetto = true; break; case ICAL_RDATE_PROPERTY: case ICAL_RRULE_PROPERTY: recurs = true; break; default: break; } p = icalcomponent_get_next_property(c, ICAL_ANY_PROPERTY); } // Validate the phase data if (!found_dtstart || !found_tzoffsetfrom || !found_tzoffsetto) { qDebug() << "DTSTART/TZOFFSETFROM/TZOFFSETTO missing"; return false; } // Convert DTSTART to QDateTime, and from local time to UTC dtstart.second -= prevOffset; dtstart = icaltime_convert_to_zone(dtstart, icaltimezone_get_utc_timezone()); const QDateTime utcStart = toQDateTime(icaltime_normalize(dtstart)); // UTC phase.abbrevs.unite(abbrevs); phase.utcOffset = utcOffset; phase.transitions += utcStart; if (recurs) { /* RDATE or RRULE is specified. There should only be one or the other, but * it doesn't really matter - the code can cope with both. * Note that we had to get DTSTART, TZOFFSETFROM, TZOFFSETTO before reading * recurrences. */ const QDateTime maxTime(MAX_DATE()); Recurrence recur; icalproperty *p = icalcomponent_get_first_property(c, ICAL_ANY_PROPERTY); while (p) { icalproperty_kind kind = icalproperty_isa(p); switch (kind) { case ICAL_RDATE_PROPERTY: { icaltimetype t = icalproperty_get_rdate(p).time; if (icaltime_is_date(t)) { // RDATE with a DATE value inherits the (local) time from DTSTART t.hour = dtstart.hour; t.minute = dtstart.minute; t.second = dtstart.second; t.is_date = 0; } // RFC2445 states that RDATE must be in local time, // but we support UTC as well to be safe. if (!icaltime_is_utc(t)) { t.second -= prevOffset; // convert to UTC t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone()); t = icaltime_normalize(t); } phase.transitions += toQDateTime(t); break; } case ICAL_RRULE_PROPERTY: { RecurrenceRule r; ICalFormat icf; ICalFormatImpl impl(&icf); impl.readRecurrence(icalproperty_get_rrule(p), &r); r.setStartDt(utcStart); // The end date time specified in an RRULE must be in UTC. // We can not guarantee correctness if this is not the case. if (r.duration() == 0 && r.endDt().timeSpec() != Qt::UTC) { qWarning() << "UNTIL in RRULE must be specified in UTC"; break; } const auto dts = r.timesInInterval(utcStart, maxTime); for (int i = 0, end = dts.count(); i < end; ++i) { phase.transitions += dts[i]; } break; } default: break; } p = icalcomponent_get_next_property(c, ICAL_ANY_PROPERTY); } sortAndRemoveDuplicates(phase.transitions); } return true; } QByteArray ICalTimeZoneParser::vcaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest) { auto icalTz = icalcomponentFromQTimeZone(qtz, earliest); const QByteArray result(icalcomponent_as_ical_string(icalTz)); icalmemory_free_ring(); icalcomponent_free(icalTz); return result; } } // namespace KCalendarCore linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/icaltimezones_p.h000066400000000000000000000044021523260663500274600ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2005-2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_ICALTIMEZONES_P_H #define KCALCORE_ICALTIMEZONES_P_H #include "incidencebase.h" #include #include #include #ifndef ICALCOMPONENT_H typedef struct icalcomponent_impl icalcomponent; #endif #ifndef ICALTIMEZONE_DEFINED #define ICALTIMEZONE_DEFINED typedef struct _icaltimezone icaltimezone; #endif namespace KCalendarCore { class ICalTimeZonePhase; class ICalTimeZonePhase { public: void dump(); QSet abbrevs; // abbreviations of the phase int utcOffset = 0; // UTC offset of the phase QVector transitions; // times on which transition into this phase occurs }; class ICalTimeZone { public: void dump(); QByteArray id; // original TZID QTimeZone qZone; // QTimeZone mapped from TZID ICalTimeZonePhase standard; // standard time ICalTimeZonePhase daylight; // DST time }; class Q_CORE_EXPORT ICalTimeZoneCache { public: explicit ICalTimeZoneCache(); void insert(const QByteArray &id, const ICalTimeZone &tz); QTimeZone tzForTime(const QDateTime &dt, const QByteArray &tzid) const; private: QHash mCache; }; using TimeZoneEarliestDate = QHash; class Q_CORE_EXPORT ICalTimeZoneParser { public: explicit ICalTimeZoneParser(ICalTimeZoneCache *cache); void parse(icalcomponent *calendar); static void updateTzEarliestDate(const IncidenceBase::Ptr &incidence, TimeZoneEarliestDate *earliestDate); static icaltimezone *icaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); static QByteArray vcaltimezoneFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); private: static icalcomponent *icalcomponentFromQTimeZone(const QTimeZone &qtz, const QDateTime &earliest); ICalTimeZone parseTimeZone(icalcomponent *zone); bool parsePhase(icalcomponent *c, bool daylight, ICalTimeZonePhase &phase); QTimeZone resolveICalTimeZone(const ICalTimeZone &icalZone); ICalTimeZoneCache *mCache; }; } // namespace KCalendarCore inline uint qHash(const QTimeZone &tz) { return qHash(tz.id()); } #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/incidence.cpp000066400000000000000000000760421523260663500265600ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Incidence class. @brief Provides the class common to non-FreeBusy (Events, To-dos, Journals) calendar components known as incidences. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "incidence.h" #include "calformat.h" #include "utils_p.h" #include #include // for .toHtmlEscaped() and Qt::mightBeRichText() #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Incidence::Private { public: Private() : mGeoLatitude(INVALID_LATLON) , mGeoLongitude(INVALID_LATLON) , mRecurrence(nullptr) , mRevision(0) , mPriority(0) , mStatus(StatusNone) , mSecrecy(SecrecyPublic) , mDescriptionIsRich(false) , mSummaryIsRich(false) , mLocationIsRich(false) , mHasGeo(false) , mThisAndFuture(false) , mLocalOnly(false) { } Private(const Private &p) : mCreated(p.mCreated) , mDescription(p.mDescription) , mSummary(p.mSummary) , mLocation(p.mLocation) , mCategories(p.mCategories) , mResources(p.mResources) , mStatusString(p.mStatusString) , mSchedulingID(p.mSchedulingID) , mRelatedToUid(p.mRelatedToUid) , mRecurrenceId(p.mRecurrenceId) , mConferences(p.mConferences) , mGeoLatitude(p.mGeoLatitude) , mGeoLongitude(p.mGeoLongitude) , mRecurrence(nullptr) , mRevision(p.mRevision) , mPriority(p.mPriority) , mStatus(p.mStatus) , mSecrecy(p.mSecrecy) , mColor(p.mColor) , mDescriptionIsRich(p.mDescriptionIsRich) , mSummaryIsRich(p.mSummaryIsRich) , mLocationIsRich(p.mLocationIsRich) , mHasGeo(p.mHasGeo) , mThisAndFuture(p.mThisAndFuture) , mLocalOnly(false) { } void clear() { mAlarms.clear(); mAttachments.clear(); delete mRecurrence; mRecurrence = nullptr; } void init(Incidence *dest, const Incidence &src) { mRevision = src.d->mRevision; mCreated = src.d->mCreated; mDescription = src.d->mDescription; mDescriptionIsRich = src.d->mDescriptionIsRich; mSummary = src.d->mSummary; mSummaryIsRich = src.d->mSummaryIsRich; mCategories = src.d->mCategories; mRelatedToUid = src.d->mRelatedToUid; mResources = src.d->mResources; mStatusString = src.d->mStatusString; mStatus = src.d->mStatus; mSecrecy = src.d->mSecrecy; mPriority = src.d->mPriority; mLocation = src.d->mLocation; mLocationIsRich = src.d->mLocationIsRich; mGeoLatitude = src.d->mGeoLatitude; mGeoLongitude = src.d->mGeoLongitude; mHasGeo = src.d->mHasGeo; mRecurrenceId = src.d->mRecurrenceId; mConferences = src.d->mConferences; mThisAndFuture = src.d->mThisAndFuture; mLocalOnly = src.d->mLocalOnly; mColor = src.d->mColor; // Alarms and Attachments are stored in ListBase<...>, which is a QValueList<...*>. // We need to really duplicate the objects stored therein, otherwise deleting // i will also delete all attachments from this object (setAutoDelete...) mAlarms.reserve(src.d->mAlarms.count()); for (const Alarm::Ptr &alarm : qAsConst(src.d->mAlarms)) { Alarm::Ptr b(new Alarm(*alarm.data())); b->setParent(dest); mAlarms.append(b); } mAttachments = src.d->mAttachments; if (src.d->mRecurrence) { mRecurrence = new Recurrence(*(src.d->mRecurrence)); mRecurrence->addObserver(dest); } else { mRecurrence = nullptr; } } QDateTime mCreated; // creation datetime QString mDescription; // description string QString mSummary; // summary string QString mLocation; // location string QStringList mCategories; // category list Attachment::List mAttachments; // attachments list Alarm::List mAlarms; // alarms list QStringList mResources; // resources list (not calendar resources) QString mStatusString; // status string, for custom status QString mSchedulingID; // ID for scheduling mails QMap mRelatedToUid; // incidence uid this is related to, for each relType QDateTime mRecurrenceId; // recurrenceId Conference::List mConferences; // conference list float mGeoLatitude; // Specifies latitude in decimal degrees float mGeoLongitude; // Specifies longitude in decimal degrees mutable Recurrence *mRecurrence; // recurrence int mRevision; // revision number int mPriority; // priority: 1 = highest, 2 = less, etc. Status mStatus; // status Secrecy mSecrecy; // secrecy QString mColor; // background color bool mDescriptionIsRich = false; // description string is richtext. bool mSummaryIsRich = false; // summary string is richtext. bool mLocationIsRich = false; // location string is richtext. bool mHasGeo = false; // if incidence has geo data bool mThisAndFuture = false; bool mLocalOnly = false; // allow changes that won't go to the server }; //@endcond Incidence::Incidence() : IncidenceBase() , d(new KCalendarCore::Incidence::Private) { recreate(); resetDirtyFields(); } Incidence::Incidence(const Incidence &i) : IncidenceBase(i) , Recurrence::RecurrenceObserver() , d(new KCalendarCore::Incidence::Private(*i.d)) { d->init(this, i); resetDirtyFields(); } Incidence::~Incidence() { // Alarm has a raw incidence pointer, so we must set it to 0 // so Alarm doesn't use it after Incidence is destroyed for (const Alarm::Ptr &alarm : qAsConst(d->mAlarms)) { alarm->setParent(nullptr); } delete d->mRecurrence; delete d; } //@cond PRIVATE // A string comparison that considers that null and empty are the same static bool stringCompare(const QString &s1, const QString &s2) { return (s1.isEmpty() && s2.isEmpty()) || (s1 == s2); } //@endcond IncidenceBase &Incidence::assign(const IncidenceBase &other) { if (&other != this) { d->clear(); // TODO: should relations be cleared out, as in destructor??? IncidenceBase::assign(other); const Incidence *i = static_cast(&other); d->init(this, *i); } return *this; } bool Incidence::equals(const IncidenceBase &incidence) const { if (!IncidenceBase::equals(incidence)) { return false; } // If they weren't the same type IncidenceBase::equals would had returned false already const Incidence *i2 = static_cast(&incidence); const auto alarmList = alarms(); const auto otherAlarmsList = i2->alarms(); if (alarmList.count() != otherAlarmsList.count()) { return false; } Alarm::List::ConstIterator a1 = alarmList.constBegin(); Alarm::List::ConstIterator a1end = alarmList.constEnd(); Alarm::List::ConstIterator a2 = otherAlarmsList.constBegin(); Alarm::List::ConstIterator a2end = otherAlarmsList.constEnd(); for (; a1 != a1end && a2 != a2end; ++a1, ++a2) { if (**a1 == **a2) { continue; } else { return false; } } const auto attachmentList = attachments(); const auto otherAttachmentList = i2->attachments(); if (attachmentList.count() != otherAttachmentList.count()) { return false; } Attachment::List::ConstIterator att1 = attachmentList.constBegin(); const Attachment::List::ConstIterator att1end = attachmentList.constEnd(); Attachment::List::ConstIterator att2 = otherAttachmentList.constBegin(); const Attachment::List::ConstIterator att2end = otherAttachmentList.constEnd(); for (; att1 != att1end && att2 != att2end; ++att1, ++att2) { if (*att1 == *att2) { continue; } else { return false; } } bool recurrenceEqual = (d->mRecurrence == nullptr && i2->d->mRecurrence == nullptr); if (!recurrenceEqual) { recurrence(); // create if doesn't exist i2->recurrence(); // create if doesn't exist recurrenceEqual = d->mRecurrence != nullptr && i2->d->mRecurrence != nullptr && *d->mRecurrence == *i2->d->mRecurrence; } if (d->mHasGeo == i2->d->mHasGeo) { if (d->mHasGeo && (!qFuzzyCompare(d->mGeoLatitude, i2->d->mGeoLatitude) || !qFuzzyCompare(d->mGeoLongitude, i2->d->mGeoLongitude))) { return false; } } else { return false; } // clang-format off return recurrenceEqual && created() == i2->created() && stringCompare(description(), i2->description()) && descriptionIsRich() == i2->descriptionIsRich() && stringCompare(summary(), i2->summary()) && summaryIsRich() == i2->summaryIsRich() && categories() == i2->categories() && stringCompare(relatedTo(), i2->relatedTo()) && resources() == i2->resources() && d->mStatus == i2->d->mStatus && (d->mStatus == StatusNone || stringCompare(d->mStatusString, i2->d->mStatusString)) && secrecy() == i2->secrecy() && priority() == i2->priority() && stringCompare(location(), i2->location()) && locationIsRich() == i2->locationIsRich() && stringCompare(color(), i2->color()) && stringCompare(schedulingID(), i2->schedulingID()) && recurrenceId() == i2->recurrenceId() && conferences() == i2->conferences() && thisAndFuture() == i2->thisAndFuture(); // clang-format on } QString Incidence::instanceIdentifier() const { if (hasRecurrenceId()) { return uid() + recurrenceId().toString(Qt::ISODate); } return uid(); } void Incidence::recreate() { const QDateTime nowUTC = QDateTime::currentDateTimeUtc(); setCreated(nowUTC); setSchedulingID(QString(), CalFormat::createUniqueId()); setRevision(0); setLastModified(nowUTC); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall } void Incidence::setLastModified(const QDateTime &lm) { if (!d->mLocalOnly) { IncidenceBase::setLastModified(lm); } } void Incidence::setReadOnly(bool readOnly) { IncidenceBase::setReadOnly(readOnly); if (d->mRecurrence) { d->mRecurrence->setRecurReadOnly(readOnly); } } void Incidence::setLocalOnly(bool localOnly) { if (mReadOnly) { return; } d->mLocalOnly = localOnly; } bool Incidence::localOnly() const { return d->mLocalOnly; } void Incidence::setAllDay(bool allDay) { if (mReadOnly) { return; } if (d->mRecurrence) { d->mRecurrence->setAllDay(allDay); } IncidenceBase::setAllDay(allDay); } void Incidence::setCreated(const QDateTime &created) { if (mReadOnly || d->mLocalOnly) { return; } d->mCreated = created.toUTC(); const auto ct = d->mCreated.time(); // Remove milliseconds d->mCreated.setTime(QTime(ct.hour(), ct.minute(), ct.second())); setFieldDirty(FieldCreated); // FIXME: Shouldn't we call updated for the creation date, too? // updated(); } QDateTime Incidence::created() const { return d->mCreated; } void Incidence::setRevision(int rev) { if (mReadOnly || d->mLocalOnly) { return; } update(); d->mRevision = rev; setFieldDirty(FieldRevision); updated(); } int Incidence::revision() const { return d->mRevision; } void Incidence::setDtStart(const QDateTime &dt) { IncidenceBase::setDtStart(dt); if (d->mRecurrence && dirtyFields().contains(FieldDtStart)) { d->mRecurrence->setStartDateTime(dt, allDay()); } } void Incidence::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { IncidenceBase::shiftTimes(oldZone, newZone); if (d->mRecurrence) { d->mRecurrence->shiftTimes(oldZone, newZone); } for (int i = 0, end = d->mAlarms.count(); i < end; ++i) { d->mAlarms[i]->shiftTimes(oldZone, newZone); } } void Incidence::setDescription(const QString &description, bool isRich) { if (mReadOnly) { return; } update(); d->mDescription = description; d->mDescriptionIsRich = isRich; setFieldDirty(FieldDescription); updated(); } void Incidence::setDescription(const QString &description) { setDescription(description, Qt::mightBeRichText(description)); } QString Incidence::description() const { return d->mDescription; } QString Incidence::richDescription() const { if (descriptionIsRich()) { return d->mDescription; } else { return d->mDescription.toHtmlEscaped().replace(QLatin1Char('\n'), QStringLiteral("
")); } } bool Incidence::descriptionIsRich() const { return d->mDescriptionIsRich; } void Incidence::setSummary(const QString &summary, bool isRich) { if (mReadOnly) { return; } if (d->mSummary != summary || d->mSummaryIsRich != isRich) { update(); d->mSummary = summary; d->mSummaryIsRich = isRich; setFieldDirty(FieldSummary); updated(); } } void Incidence::setSummary(const QString &summary) { setSummary(summary, Qt::mightBeRichText(summary)); } QString Incidence::summary() const { return d->mSummary; } QString Incidence::richSummary() const { if (summaryIsRich()) { return d->mSummary; } else { return d->mSummary.toHtmlEscaped().replace(QLatin1Char('\n'), QStringLiteral("
")); } } bool Incidence::summaryIsRich() const { return d->mSummaryIsRich; } void Incidence::setCategories(const QStringList &categories) { if (mReadOnly) { return; } update(); d->mCategories = categories; updated(); } void Incidence::setCategories(const QString &catStr) { if (mReadOnly) { return; } update(); setFieldDirty(FieldCategories); d->mCategories.clear(); if (catStr.isEmpty()) { updated(); return; } d->mCategories = catStr.split(QLatin1Char(',')); QStringList::Iterator it; for (it = d->mCategories.begin(); it != d->mCategories.end(); ++it) { *it = (*it).trimmed(); } updated(); } QStringList Incidence::categories() const { return d->mCategories; } QString Incidence::categoriesStr() const { return d->mCategories.join(QLatin1Char(',')); } void Incidence::setRelatedTo(const QString &relatedToUid, RelType relType) { // TODO: RFC says that an incidence can have more than one related-to field // even for the same relType. if (d->mRelatedToUid[relType] != relatedToUid) { update(); d->mRelatedToUid[relType] = relatedToUid; setFieldDirty(FieldRelatedTo); updated(); } } QString Incidence::relatedTo(RelType relType) const { return d->mRelatedToUid.value(relType); } void Incidence::setColor(const QString &colorName) { if (mReadOnly) { return; } if (!stringCompare(d->mColor, colorName)) { update(); d->mColor = colorName; setFieldDirty(FieldColor); updated(); } } QString Incidence::color() const { return d->mColor; } // %%%%%%%%%%%% Recurrence-related methods %%%%%%%%%%%%%%%%%%%% Recurrence *Incidence::recurrence() const { if (!d->mRecurrence) { d->mRecurrence = new Recurrence(); d->mRecurrence->setStartDateTime(dateTime(RoleRecurrenceStart), allDay()); d->mRecurrence->setAllDay(allDay()); d->mRecurrence->setRecurReadOnly(mReadOnly); d->mRecurrence->addObserver(const_cast(this)); } return d->mRecurrence; } void Incidence::clearRecurrence() { delete d->mRecurrence; d->mRecurrence = nullptr; } ushort Incidence::recurrenceType() const { if (d->mRecurrence) { return d->mRecurrence->recurrenceType(); } else { return Recurrence::rNone; } } bool Incidence::recurs() const { if (d->mRecurrence) { return d->mRecurrence->recurs(); } else { return false; } } bool Incidence::recursOn(const QDate &date, const QTimeZone &timeZone) const { return d->mRecurrence && d->mRecurrence->recursOn(date, timeZone); } bool Incidence::recursAt(const QDateTime &qdt) const { return d->mRecurrence && d->mRecurrence->recursAt(qdt); } QList Incidence::startDateTimesForDate(const QDate &date, const QTimeZone &timeZone) const { QDateTime start = dtStart(); QDateTime end = dateTime(RoleEndRecurrenceBase); QList result; // TODO_Recurrence: Also work if only due date is given... if (!start.isValid() && !end.isValid()) { return result; } // if the incidence doesn't recur, QDateTime kdate(date, {}, timeZone); if (!recurs()) { if (start.date() <= date && end.date() >= date) { result << start; } return result; } qint64 days = start.daysTo(end); // Account for possible recurrences going over midnight, while the original event doesn't QDate tmpday(date.addDays(-days - 1)); QDateTime tmp; while (tmpday <= date) { if (recurrence()->recursOn(tmpday, timeZone)) { const QList times = recurrence()->recurTimesOn(tmpday, timeZone); for (const QTime &time : times) { tmp = QDateTime(tmpday, time, start.timeZone()); if (endDateForStart(tmp) >= kdate) { result << tmp; } } } tmpday = tmpday.addDays(1); } return result; } QList Incidence::startDateTimesForDateTime(const QDateTime &datetime) const { QDateTime start = dtStart(); QDateTime end = dateTime(RoleEndRecurrenceBase); QList result; // TODO_Recurrence: Also work if only due date is given... if (!start.isValid() && !end.isValid()) { return result; } // if the incidence doesn't recur, if (!recurs()) { if (!(start > datetime || end < datetime)) { result << start; } return result; } qint64 days = start.daysTo(end); // Account for possible recurrences going over midnight, while the original event doesn't QDate tmpday(datetime.date().addDays(-days - 1)); QDateTime tmp; while (tmpday <= datetime.date()) { if (recurrence()->recursOn(tmpday, datetime.timeZone())) { // Get the times during the day (in start date's time zone) when recurrences happen const QList times = recurrence()->recurTimesOn(tmpday, start.timeZone()); for (const QTime &time : times) { tmp = QDateTime(tmpday, time, start.timeZone()); if (!(tmp > datetime || endDateForStart(tmp) < datetime)) { result << tmp; } } } tmpday = tmpday.addDays(1); } return result; } QDateTime Incidence::endDateForStart(const QDateTime &startDt) const { QDateTime start = dtStart(); QDateTime end = dateTime(RoleEndRecurrenceBase); if (!end.isValid()) { return start; } if (!start.isValid()) { return end; } return startDt.addSecs(start.secsTo(end)); } void Incidence::addAttachment(const Attachment &attachment) { if (mReadOnly || attachment.isEmpty()) { return; } update(); d->mAttachments.append(attachment); setFieldDirty(FieldAttachment); updated(); } void Incidence::deleteAttachments(const QString &mime) { Attachment::List result; Attachment::List::Iterator it = d->mAttachments.begin(); while (it != d->mAttachments.end()) { if ((*it).mimeType() != mime) { result += *it; } ++it; } d->mAttachments = result; setFieldDirty(FieldAttachment); } Attachment::List Incidence::attachments() const { return d->mAttachments; } Attachment::List Incidence::attachments(const QString &mime) const { Attachment::List attachments; for (const Attachment &attachment : qAsConst(d->mAttachments)) { if (attachment.mimeType() == mime) { attachments.append(attachment); } } return attachments; } void Incidence::clearAttachments() { setFieldDirty(FieldAttachment); d->mAttachments.clear(); } void Incidence::setResources(const QStringList &resources) { if (mReadOnly) { return; } update(); d->mResources = resources; setFieldDirty(FieldResources); updated(); } QStringList Incidence::resources() const { return d->mResources; } void Incidence::setPriority(int priority) { if (mReadOnly) { return; } update(); d->mPriority = priority; setFieldDirty(FieldPriority); updated(); } int Incidence::priority() const { return d->mPriority; } void Incidence::setStatus(Incidence::Status status) { if (mReadOnly || status == StatusX) { return; } update(); d->mStatus = status; d->mStatusString.clear(); setFieldDirty(FieldStatus); updated(); } void Incidence::setCustomStatus(const QString &status) { if (mReadOnly) { return; } update(); d->mStatus = status.isEmpty() ? StatusNone : StatusX; d->mStatusString = status; setFieldDirty(FieldStatus); updated(); } Incidence::Status Incidence::status() const { return d->mStatus; } QString Incidence::customStatus() const { if (d->mStatus == StatusX) { return d->mStatusString; } else { return QString(); } } void Incidence::setSecrecy(Incidence::Secrecy secrecy) { if (mReadOnly) { return; } update(); d->mSecrecy = secrecy; setFieldDirty(FieldSecrecy); updated(); } Incidence::Secrecy Incidence::secrecy() const { return d->mSecrecy; } Alarm::List Incidence::alarms() const { return d->mAlarms; } Alarm::Ptr Incidence::newAlarm() { Alarm::Ptr alarm(new Alarm(this)); d->mAlarms.append(alarm); return alarm; } void Incidence::addAlarm(const Alarm::Ptr &alarm) { update(); d->mAlarms.append(alarm); setFieldDirty(FieldAlarms); updated(); } void Incidence::removeAlarm(const Alarm::Ptr &alarm) { const int index = d->mAlarms.indexOf(alarm); if (index > -1) { update(); d->mAlarms.remove(index); setFieldDirty(FieldAlarms); updated(); } } void Incidence::clearAlarms() { update(); d->mAlarms.clear(); setFieldDirty(FieldAlarms); updated(); } bool Incidence::hasEnabledAlarms() const { for (const Alarm::Ptr &alarm : qAsConst(d->mAlarms)) { if (alarm->enabled()) { return true; } } return false; } Conference::List Incidence::conferences() const { return d->mConferences; } void Incidence::addConference(const Conference &conference) { update(); d->mConferences.push_back(conference); setFieldDirty(FieldConferences); updated(); } void Incidence::setConferences(const Conference::List &conferences) { update(); d->mConferences = conferences; setFieldDirty(FieldConferences); updated(); } void Incidence::clearConferences() { update(); d->mConferences.clear(); setFieldDirty(FieldConferences); updated(); } void Incidence::setLocation(const QString &location, bool isRich) { if (mReadOnly) { return; } if (d->mLocation != location || d->mLocationIsRich != isRich) { update(); d->mLocation = location; d->mLocationIsRich = isRich; setFieldDirty(FieldLocation); updated(); } } void Incidence::setLocation(const QString &location) { setLocation(location, Qt::mightBeRichText(location)); } QString Incidence::location() const { return d->mLocation; } QString Incidence::richLocation() const { if (locationIsRich()) { return d->mLocation; } else { return d->mLocation.toHtmlEscaped().replace(QLatin1Char('\n'), QStringLiteral("
")); } } bool Incidence::locationIsRich() const { return d->mLocationIsRich; } void Incidence::setSchedulingID(const QString &sid, const QString &uid) { if (!uid.isEmpty()) { setUid(uid); } if (sid != d->mSchedulingID) { d->mSchedulingID = sid; setFieldDirty(FieldSchedulingId); } } QString Incidence::schedulingID() const { if (d->mSchedulingID.isNull()) { // Nothing set, so use the normal uid return uid(); } return d->mSchedulingID; } bool Incidence::hasGeo() const { return d->mHasGeo; } void Incidence::setHasGeo(bool hasGeo) { if (mReadOnly) { return; } if (hasGeo == d->mHasGeo) { return; } update(); d->mHasGeo = hasGeo; setFieldDirty(FieldGeoLatitude); setFieldDirty(FieldGeoLongitude); updated(); } float Incidence::geoLatitude() const { return d->mGeoLatitude; } void Incidence::setGeoLatitude(float geolatitude) { if (mReadOnly) { return; } update(); d->mGeoLatitude = geolatitude; setFieldDirty(FieldGeoLatitude); updated(); } float Incidence::geoLongitude() const { return d->mGeoLongitude; } void Incidence::setGeoLongitude(float geolongitude) { if (!mReadOnly) { update(); d->mGeoLongitude = geolongitude; setFieldDirty(FieldGeoLongitude); updated(); } } bool Incidence::hasRecurrenceId() const { return (allDay() && d->mRecurrenceId.date().isValid()) || d->mRecurrenceId.isValid(); } QDateTime Incidence::recurrenceId() const { return d->mRecurrenceId; } void Incidence::setThisAndFuture(bool thisAndFuture) { d->mThisAndFuture = thisAndFuture; } bool Incidence::thisAndFuture() const { return d->mThisAndFuture; } void Incidence::setRecurrenceId(const QDateTime &recurrenceId) { if (!mReadOnly) { update(); d->mRecurrenceId = recurrenceId; setFieldDirty(FieldRecurrenceId); updated(); } } /** Observer interface for the recurrence class. If the recurrence is changed, this method will be called for the incidence the recurrence object belongs to. */ void Incidence::recurrenceUpdated(Recurrence *recurrence) { if (recurrence == d->mRecurrence) { update(); setFieldDirty(FieldRecurrence); updated(); } } //@cond PRIVATE #define ALT_DESC_FIELD "X-ALT-DESC" #define ALT_DESC_PARAMETERS QStringLiteral("FMTTYPE=text/html") //@endcond bool Incidence::hasAltDescription() const { const QString value = nonKDECustomProperty(ALT_DESC_FIELD); const QString parameter = nonKDECustomPropertyParameters(ALT_DESC_FIELD); return parameter == ALT_DESC_PARAMETERS && !value.isEmpty(); } void Incidence::setAltDescription(const QString &altdescription) { if (altdescription.isEmpty()) { removeNonKDECustomProperty(ALT_DESC_FIELD); } else { setNonKDECustomProperty(ALT_DESC_FIELD, altdescription, ALT_DESC_PARAMETERS); } } QString Incidence::altDescription() const { if (!hasAltDescription()) { return QString(); } else { return nonKDECustomProperty(ALT_DESC_FIELD); } } /** static */ QStringList Incidence::mimeTypes() { return QStringList() << QStringLiteral("text/calendar") << KCalendarCore::Event::eventMimeType() << KCalendarCore::Todo::todoMimeType() << KCalendarCore::Journal::journalMimeType(); } void Incidence::serialize(QDataStream &out) const { serializeQDateTimeAsKDateTime(out, d->mCreated); out << d->mRevision << d->mDescription << d->mDescriptionIsRich << d->mSummary << d->mSummaryIsRich << d->mLocation << d->mLocationIsRich << d->mCategories << d->mResources << d->mStatusString << d->mPriority << d->mSchedulingID << d->mGeoLatitude << d->mGeoLongitude << d->mHasGeo; serializeQDateTimeAsKDateTime(out, d->mRecurrenceId); out << d->mThisAndFuture << d->mLocalOnly << d->mStatus << d->mSecrecy << (d->mRecurrence ? true : false) << d->mAttachments.count() << d->mAlarms.count() << d->mConferences.count() << d->mRelatedToUid; if (d->mRecurrence) { out << d->mRecurrence; } for (const Attachment &attachment : qAsConst(d->mAttachments)) { out << attachment; } for (const Alarm::Ptr &alarm : qAsConst(d->mAlarms)) { out << alarm; } for (const Conference &conf : qAsConst(d->mConferences)) { out << conf; } } void Incidence::deserialize(QDataStream &in) { quint32 status, secrecy; bool hasRecurrence; int attachmentCount, alarmCount, conferencesCount; QMap relatedToUid; deserializeKDateTimeAsQDateTime(in, d->mCreated); in >> d->mRevision >> d->mDescription >> d->mDescriptionIsRich >> d->mSummary >> d->mSummaryIsRich >> d->mLocation >> d->mLocationIsRich >> d->mCategories >> d->mResources >> d->mStatusString >> d->mPriority >> d->mSchedulingID >> d->mGeoLatitude >> d->mGeoLongitude >> d->mHasGeo; deserializeKDateTimeAsQDateTime(in, d->mRecurrenceId); in >> d->mThisAndFuture >> d->mLocalOnly >> status >> secrecy >> hasRecurrence >> attachmentCount >> alarmCount >> conferencesCount >> relatedToUid; if (hasRecurrence) { d->mRecurrence = new Recurrence(); d->mRecurrence->addObserver(const_cast(this)); in >> d->mRecurrence; } d->mAttachments.clear(); d->mAlarms.clear(); d->mConferences.clear(); d->mAttachments.reserve(attachmentCount); for (int i = 0; i < attachmentCount; ++i) { Attachment attachment; in >> attachment; d->mAttachments.append(attachment); } d->mAlarms.reserve(alarmCount); for (int i = 0; i < alarmCount; ++i) { Alarm::Ptr alarm = Alarm::Ptr(new Alarm(this)); in >> alarm; d->mAlarms.append(alarm); } d->mConferences.reserve(conferencesCount); for (int i = 0; i < conferencesCount; ++i) { Conference conf; in >> conf; d->mConferences.push_back(conf); } d->mStatus = static_cast(status); d->mSecrecy = static_cast(secrecy); d->mRelatedToUid.clear(); auto it = relatedToUid.cbegin(), end = relatedToUid.cend(); for (; it != end; ++it) { d->mRelatedToUid.insert(static_cast(it.key()), it.value()); } } namespace { template QVariantList toVariantList(int size, typename QVector::ConstIterator begin, typename QVector::ConstIterator end) { QVariantList l; l.reserve(size); std::transform(begin, end, std::back_inserter(l), [](const T &val) { return QVariant::fromValue(val); }); return l; } } // namespace QVariantList Incidence::attachmentsVariant() const { return toVariantList(d->mAttachments.size(), d->mAttachments.cbegin(), d->mAttachments.cend()); } QVariantList Incidence::conferencesVariant() const { return toVariantList(d->mConferences.size(), d->mConferences.cbegin(), d->mConferences.cend()); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/incidence.h000066400000000000000000000703111523260663500262160ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Incidence class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_INCIDENCE_H #define KCALCORE_INCIDENCE_H #include "alarm.h" #include "attachment.h" #include "conference.h" #include "incidencebase.h" #include "recurrence.h" #include //@cond PRIVATE // Value used to signal invalid/unset latitude or longitude. #define INVALID_LATLON 255.0 // krazy:exclude=defines (part of the API) //@endcond namespace KCalendarCore { /** @brief Provides the abstract base class common to non-FreeBusy (Events, To-dos, Journals) calendar components known as incidences. Several properties are not allowed for VFREEBUSY objects (see rfc:2445), so they are not in IncidenceBase. The hierarchy is: IncidenceBase + FreeBusy + Incidence + Event + Todo + Journal So IncidenceBase contains all properties that are common to all classes, and Incidence contains all additional properties that are common to Events, Todos and Journals, but are not allowed for FreeBusy entries. */ class Q_CORE_EXPORT Incidence : public IncidenceBase , public Recurrence::RecurrenceObserver { Q_GADGET Q_PROPERTY(QString description READ description WRITE setDescription) Q_PROPERTY(QString summary READ summary WRITE setSummary) Q_PROPERTY(QString location READ location WRITE setLocation) Q_PROPERTY(bool hasGeo READ hasGeo WRITE setHasGeo) Q_PROPERTY(float geoLatitude READ geoLatitude WRITE setGeoLatitude) Q_PROPERTY(float geoLongitude READ geoLongitude WRITE setGeoLongitude) Q_PROPERTY(QStringList categories READ categories WRITE setCategories) Q_PROPERTY(int priority READ priority WRITE setPriority) Q_PROPERTY(QDateTime created READ created WRITE setCreated) Q_PROPERTY(KCalendarCore::Incidence::Secrecy secrecy READ secrecy WRITE setSecrecy) Q_PROPERTY(KCalendarCore::Incidence::Status status READ status WRITE setStatus) Q_PROPERTY(QVariantList attachments READ attachmentsVariant) Q_PROPERTY(QVariantList conferences READ conferencesVariant) public: /** The different types of overall incidence status or confirmation. The meaning is specific to the incidence type in context. */ enum Status { StatusNone, /**< No status */ StatusTentative, /**< event is tentative */ StatusConfirmed, /**< event is definite */ StatusCompleted, /**< to-do completed */ StatusNeedsAction, /**< to-do needs action */ StatusCanceled, /**< event or to-do canceled; journal removed */ StatusInProcess, /**< to-do in process */ StatusDraft, /**< journal is draft */ StatusFinal, /**< journal is final */ StatusX, /**< a non-standard status string */ }; Q_ENUM(Status) /** The different types of incidence access classifications. */ enum Secrecy { SecrecyPublic, /**< Not secret (default) */ SecrecyPrivate, /**< Secret to the owner */ SecrecyConfidential, /**< Secret to the owner and some others */ }; Q_ENUM(Secrecy) /** The different types of RELTYPE values specified by the RFC. Only RelTypeParent is supported for now. */ enum RelType { RelTypeParent, /**< The related incidence is a parent. */ RelTypeChild, /**< The related incidence is a child. */ RelTypeSibling, /**< The related incidence is a peer. */ }; /** A shared pointer to an Incidence. */ typedef QSharedPointer Ptr; /** List of incidences. */ typedef QVector List; /** Constructs an empty incidence.* */ Incidence(); /** Destroys an incidence. */ ~Incidence() override; /** Returns an exact copy of this incidence. The returned object is owned by the caller. Dirty fields are cleared. */ virtual Incidence *clone() const = 0; /** Returns a unique identifier for a specific instance of an incidence. 返回事件的特定实例的唯一标识符 Due to the recurrence-id, the uid is not unique for a KCalendarCore::Incidence. @since 4.11 */ Q_REQUIRED_RESULT QString instanceIdentifier() const; /** Set readonly state of incidence. 设置关�的�读状�。 @param readonly If true, the incidence is set to readonly, if false the incidence is set to readwrite. */ void setReadOnly(bool readonly) override; /** @copydoc IncidenceBase::setLastModified(). */ void setLastModified(const QDateTime &lm) override; /** Set localOnly state of incidence. A local only incidence can be updated but it will not increase the revision number neither the modified date. 设置事件的本地唯一状�。 一个�在本地�生的事件�以被更新,但它�会增加修订�和修改日期,编�,也�增加修改日期。 @param localonly If true, the incidence is set to localonly, if false the incidence is set to normal stat. */ void setLocalOnly(bool localonly); /** Get the localOnly status. @return true if Local only, false otherwise. @see setLocalOnly() */ Q_REQUIRED_RESULT bool localOnly() const; /** @copydoc IncidenceBase::setAllDay(). */ void setAllDay(bool allDay) override; /** Recreate incidence. The incidence is made a new unique incidence, but already stored information is preserved. Sets unique id, creation date, last modification date and revision number. �新创建事件。该事件被制�一个新的唯一事件,但已�存储的信�被�留下�。设置唯一的ID�创建日期�最�修改日期和修订�。 */ void recreate(); /** Sets the incidence creation date/time. It is stored as a UTC date/time. @param dt is the creation date/time. @see created(). */ void setCreated(const QDateTime &dt); /** Returns the incidence creation date/time. @see setCreated(). */ Q_REQUIRED_RESULT QDateTime created() const; /** Sets the number of revisions this incidence has seen. 设置此事件已看到的修订数。 @param rev is the incidence revision number. @see revision(). */ void setRevision(int rev); /** Returns the number of revisions this incidence has seen. @see setRevision(). */ Q_REQUIRED_RESULT int revision() const; /** Sets the incidence starting date/time. @param dt is the starting date/time. @see IncidenceBase::dtStart(). */ void setDtStart(const QDateTime &dt) override; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** Sets the incidence description. @param description is the incidence description string. @param isRich if true indicates the description string contains richtext. @see description(). */ void setDescription(const QString &description, bool isRich); /** Sets the incidence description and tries to guess if the description is rich text. @param description is the incidence description string. @see description(). */ void setDescription(const QString &description); /** Returns the incidence description. @see setDescription(). @see richDescription(). */ Q_REQUIRED_RESULT QString description() const; /** Returns the incidence description in rich text format. @see setDescription(). @see description(). */ Q_REQUIRED_RESULT QString richDescription() const; /** Returns true if incidence description contains RichText; false otherwise. @see setDescription(), description(). */ Q_REQUIRED_RESULT bool descriptionIsRich() const; /** Sets the incidence summary. 设置事件摘�。 @param summary is the incidence summary string. @param isRich if true indicates the summary string contains richtext. @see summary(). */ void setSummary(const QString &summary, bool isRich); /** Sets the incidence summary and tries to guess if the summary is richtext. @param summary is the incidence summary string. @see summary(). */ void setSummary(const QString &summary); /** Returns the incidence summary. @see setSummary(). @see richSummary(). */ Q_REQUIRED_RESULT QString summary() const; /** Returns the incidence summary in rich text format. @see setSummary(). @see summary(). */ Q_REQUIRED_RESULT QString richSummary() const; /** Returns true if incidence summary contains RichText; false otherwise. @see setSummary(), summary(). */ Q_REQUIRED_RESULT bool summaryIsRich() const; /** Sets the incidence location. Do _not_ use with journals. 设置关��置。 ��和日记一起使用。 @param location is the incidence location string. @param isRich if true indicates the location string contains richtext. @see location(). */ void setLocation(const QString &location, bool isRich); /** Sets the incidence location and tries to guess if the location is richtext. Do _not_ use with journals. @param location is the incidence location string. @see location(). */ void setLocation(const QString &location); /** Returns the incidence location. Do _not_ use with journals. @see setLocation(). @see richLocation(). */ Q_REQUIRED_RESULT QString location() const; /** Returns the incidence location in rich text format. @see setLocation(). @see location(). */ Q_REQUIRED_RESULT QString richLocation() const; /** Returns true if incidence location contains RichText; false otherwise. @see setLocation(), location(). */ Q_REQUIRED_RESULT bool locationIsRich() const; /** Sets the incidence category list. @param categories is a list of category strings. @see setCategories( const QString &), categories(). */ void setCategories(const QStringList &categories); /** Sets the incidence category list based on a comma delimited string. @param catStr is a QString containing a list of categories which are delimited by a comma character. @see setCategories( const QStringList &), categories(). */ void setCategories(const QString &catStr); /** Returns the incidence categories as a list of strings. @see setCategories( const QStringList &), setCategories( const QString &). */ Q_REQUIRED_RESULT QStringList categories() const; /** Returns the incidence categories as a comma separated string. @see categories(). */ Q_REQUIRED_RESULT QString categoriesStr() const; /** Relates another incidence to this one, by UID. This function should only be used when constructing a calendar before the related incidence exists. @param uid is a QString containing a UID for another incidence. @param relType specifies the relation type. @warning KCalendarCore only supports one related-to field per reltype for now. @see relatedTo(). */ void setRelatedTo(const QString &uid, RelType relType = RelTypeParent); /** Returns a UID string for the incidence that is related to this one. This function should only be used when constructing a calendar before the related incidence exists. @warning KCalendarCore only supports one related-to field per reltype for now. @param relType specifies the relation type. @see setRelatedTo(). */ Q_REQUIRED_RESULT QString relatedTo(RelType relType = RelTypeParent) const; /** Set the incidence color, as added in RFC7986. �考RFC7986,设置关�颜色。 @param colorName a named color as defined in CSS3 color name, see https://www.w3.org/TR/css-color-3/#svg-color. @since: 5.76 */ void setColor(const QString &colorName); /** Returns the color, if any is defined, for this incidence. @since: 5.76 */ Q_REQUIRED_RESULT QString color() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Convenience wrappers for property handling // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Returns true if the alternative (=text/html) description is available. @see setAltDescription(), altDescription() */ Q_REQUIRED_RESULT bool hasAltDescription() const; /** Sets the incidence's alternative (=text/html) description. If the text is empty, the property is removed. @param altdescription is the incidence altdescription string. @see altAltdescription(). */ void setAltDescription(const QString &altdescription); /** Returns the incidence alternative (=text/html) description. @see setAltDescription(). */ Q_REQUIRED_RESULT QString altDescription() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Recurrence-related methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Returns the recurrence rule associated with this incidence. If there is none, returns an appropriate (non-0) object. 返回与此事件关�的��规则。如果没有,则返回适当的(�0)对象。 */ Recurrence *recurrence() const; /** Removes all recurrence and exception rules and dates. 删除所有��和异常规则和日期。 */ void clearRecurrence(); /** @copydoc Recurrence::recurs() */ Q_REQUIRED_RESULT bool recurs() const; /** @copydoc Recurrence::recurrenceType() */ Q_REQUIRED_RESULT ushort recurrenceType() const; /** @copydoc Recurrence::recursOn() */ virtual bool recursOn(const QDate &date, const QTimeZone &timeZone) const; /** @copydoc Recurrence::recursAt() */ Q_REQUIRED_RESULT bool recursAt(const QDateTime &dt) const; /** Calculates the start date/time for all recurrences that happen at some time on the given date (might start before that date, but end on or after the given date). @param date the date when the incidence should occur @param timeSpec time specification for @p date. @return the start date/time of all occurrences that overlap with the given date; an empty list if the incidence does not overlap with the date at all. */ virtual QList startDateTimesForDate(const QDate &date, const QTimeZone &timeZone) const; /** Calculates the start date/time for all recurrences that happen at the given time. @param datetime the date/time when the incidence should occur. @return the start date/time of all occurrences that overlap with the given date/time; an empty list if the incidence does not happen at the given time at all. */ Q_REQUIRED_RESULT virtual QList startDateTimesForDateTime(const QDateTime &datetime) const; /** Returns the end date/time of the incidence occurrence if it starts at specified date/time. @param startDt is the specified starting date/time. @return the corresponding end date/time for the occurrence; or the start date/time if the end date/time is invalid; or the end date/time if the start date/time is invalid. */ Q_REQUIRED_RESULT virtual QDateTime endDateForStart(const QDateTime &startDt) const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Attachment-related methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Adds an attachment to the incidence. @param attachment a valid Attachment object. */ void addAttachment(const Attachment &attachment); /** Removes all attachments of the specified MIME type from the incidence. The memory used by all the removed attachments is freed. @param mime is a QString containing the MIME type. @see deleteAttachment(). */ void deleteAttachments(const QString &mime); /** Returns a list of all incidence attachments. @see attachments( const QString &). */ Q_REQUIRED_RESULT Attachment::List attachments() const; /** Returns a list of all incidence attachments with the specified MIME type. @param mime is a QString containing the MIME type. @see attachments(). */ Q_REQUIRED_RESULT Attachment::List attachments(const QString &mime) const; /** Removes all attachments and frees the memory used by them. @see deleteAttachments( const QString &). */ void clearAttachments(); // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Secrecy and Status methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Sets the incidence #Secrecy. @param secrecy is the incidence #Secrecy to set. @see secrecy(), secrecyStr(). */ void setSecrecy(Secrecy secrecy); /** Returns the incidence #Secrecy. @see setSecrecy(), secrecyStr(). */ Q_REQUIRED_RESULT Secrecy secrecy() const; /** Sets the incidence status to a standard #Status value. Note that StatusX cannot be specified. @param status is the incidence #Status to set. @see status(), setCustomStatus(). */ void setStatus(Status status); /** Sets the incidence #Status to a non-standard status value. @param status is a non-standard status string. If empty, the incidence #Status will be set to StatusNone. @see setStatus(), status() customStatus(). */ void setCustomStatus(const QString &status); /** Returns the non-standard status value. @see setCustomStatus(). */ Q_REQUIRED_RESULT QString customStatus() const; /** Returns the incidence #Status. @see setStatus(), setCustomStatus(), statusStr(). */ Q_REQUIRED_RESULT Status status() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Other methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Sets a list of incidence resources. (Note: resources in this context means items used by the incidence such as money, fuel, hours, etc). @param resources is a list of resource strings. @see resources(). */ void setResources(const QStringList &resources); /** Returns the incidence resources as a list of strings. @see setResources(). */ Q_REQUIRED_RESULT QStringList resources() const; /** Sets the incidences priority. The priority must be an integer value between 0 and 9, where 0 is undefined, 1 is the highest, and 9 is the lowest priority (decreasing order). @param priority is the incidence priority to set. @see priority(). */ void setPriority(int priority); /** Returns the incidence priority. @see setPriority(). */ Q_REQUIRED_RESULT int priority() const; /** Returns true if the incidence has geo data, otherwise return false. @see setHasGeo(), setGeoLatitude(float), setGeoLongitude(float). */ Q_REQUIRED_RESULT bool hasGeo() const; /** Sets if the incidence has geo data. @param hasGeo true if incidence has geo data, otherwise false @see hasGeo(), geoLatitude(), geoLongitude(). */ void setHasGeo(bool hasGeo); /** Set the incidences geoLatitude. 设置事件地�纬度。 @param geolatitude is the incidence geolatitude to set @see geoLatitude(). */ void setGeoLatitude(float geolatitude); /** Returns the incidence geoLatidude. @return incidences geolatitude value @see setGeoLatitude(). */ Q_REQUIRED_RESULT float geoLatitude() const; /** Set the incidencesgeoLongitude. @param geolongitude is the incidence geolongitude to set @see geoLongitude(). */ void setGeoLongitude(float geolongitude); /** Returns the incidence geoLongitude. @return incidences geolongitude value @see setGeoLongitude(). */ Q_REQUIRED_RESULT float geoLongitude() const; /** Returns true if the incidence has recurrenceId, otherwise return false. @see setRecurrenceId(QDateTime) */ Q_REQUIRED_RESULT bool hasRecurrenceId() const; /** Set the incidences recurrenceId. 设置��ID This field indicates that this is an exception to a recurring incidence. The uid of this incidence MUST be the same as the one of the recurring main incidence. @param recurrenceId is the incidence recurrenceId to set @see recurrenceId(). */ void setRecurrenceId(const QDateTime &recurrenceId); /** Returns the incidence recurrenceId. @return incidences recurrenceId value @see setRecurrenceId(). */ Q_REQUIRED_RESULT QDateTime recurrenceId() const override; /** Set to true if the exception also applies to all future occurrences. 如果异常也适用于将�的所有事件,则设置为 true。 This option is only relevant if the incidence has a recurrenceId set. 仅当�生率设置了�� ID 时,此选项�相关。 @param thisAndFuture value @see thisAndFuture(), setRecurrenceId() @since 4.11 */ void setThisAndFuture(bool thisAndFuture); /** Returns true if the exception also applies to all future occurrences. @return incidences thisAndFuture value @see setThisAndFuture() @since 4.11 */ Q_REQUIRED_RESULT bool thisAndFuture() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Alarm-related methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Returns a list of all incidence alarms. 返回所有事件警报的列表。 */ Q_REQUIRED_RESULT Alarm::List alarms() const; /** Create a new incidence alarm. */ Alarm::Ptr newAlarm(); /** Adds an alarm to the incidence. @param alarm is a pointer to a valid Alarm object. @see removeAlarm(). */ void addAlarm(const Alarm::Ptr &alarm); /** Removes the specified alarm from the incidence. @param alarm is a pointer to a valid Alarm object. @see addAlarm(). */ void removeAlarm(const Alarm::Ptr &alarm); /** Removes all alarms. @see removeAlarm(). */ void clearAlarms(); /** Returns true if any of the incidence alarms are enabled; false otherwise. 如果任何一个事件警报被�用,返回true;�则返回false。 */ Q_REQUIRED_RESULT bool hasEnabledAlarms() const; // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Conferences-related method // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** * Returns list of all incidence conferencing methods. * @since 5.77 */ Q_REQUIRED_RESULT Conference::List conferences() const; /** * Replaces all conferences in the incidence with given @p conferences * * @param conferences New conferences to store in the incidence. * @since 5.77 */ void setConferences(const Conference::List &conferences); /** * Adds a conference to the incidence. * * @param conferene A conference to add. * @since 5.77 */ void addConference(const Conference &conference); /** * Removes all conferences from the incidence. * @since 5.77 */ void clearConferences(); // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // %%%%% Other methods // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /** Set the incidence scheduling ID. Do _not_ use with journals. This is used for accepted invitations as the place to store the UID of the invitation. It is later used again if updates to the invitation comes in. If we did not set a new UID on incidences from invitations, we can end up with more than one resource having events with the same UID, if you have access to other peoples resources. While constructing an incidence, when setting the scheduling ID, you will always want to set the incidence UID too. Instead of calling setUID() separately, you can pass the UID through @p uid so both members are changed in one atomic operation ( don't forget that setUID() emits incidenceUpdated() and whoever catches that signal will have an half-initialized incidence, therefore, always set the schedulingID and UID at the same time, and never with two separate calls). @param sid is a QString containing the scheduling ID. @param uid is a QString containing the incidence UID to set, if not specified, the current UID isn't changed, and this parameter is ignored. @see schedulingID(). */ void setSchedulingID(const QString &sid, const QString &uid = QString()); /** Returns the incidence scheduling ID. Do _not_ use with journals. If a scheduling ID is not set, then return the incidence UID. @see setSchedulingID(). */ Q_REQUIRED_RESULT QString schedulingID() const; /** Observer interface for the recurrence class. If the recurrence is changed, this method will be called for the incidence the recurrence object belongs to. 递归类的观察者接�。如果���生更改,将根����生对象所属的�生率调用此方法。 @param recurrence is a pointer to a valid Recurrence object. */ void recurrenceUpdated(Recurrence *recurrence) override; /** Returns the name of the icon that best represents this incidence. @param recurrenceId Some recurring incidences might use a different icon, for example, completed to-do occurrences. Use this parameter to identify the specific occurrence in a recurring serie. */ virtual QLatin1String iconName(const QDateTime &recurrenceId = {}) const = 0; /** * Returns true if the incidence type supports groupware communication. * @since 4.10 */ virtual bool supportsGroupwareCommunication() const = 0; /** Returns the list of possible mime types in an Incidence object: "text/calendar" "application/x-vnd.akonadi.calendar.event" "application/x-vnd.akonadi.calendar.todo" "application/x-vnd.akonadi.calendar.journal" @since 4.12 */ Q_REQUIRED_RESULT static QStringList mimeTypes(); protected: /** Copy constructor. @param other is the incidence to copy. */ Incidence(const Incidence &other); /** Compares this with Incidence @p incidence for equality. @param incidence is the Incidence to compare against. @return true if the incidences are equal; false otherwise. */ bool equals(const IncidenceBase &incidence) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; private: /** Disabled, not polymorphic. Use IncidenceBase::operator= which is safe because it calls virtual function assign. @param other is another Incidence object to assign to this one. */ Incidence &operator=(const Incidence &other); Q_DECL_HIDDEN QVariantList attachmentsVariant() const; Q_DECL_HIDDEN QVariantList conferencesVariant() const; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE inline uint qHash(const QSharedPointer &key) { return qHash(key.data()); } //@endcond //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Incidence::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Incidence *) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/incidencebase.cpp000066400000000000000000000415141523260663500274070ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001,2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the IncidenceBase class. @brief An abstract base class that provides a common base for all calendar incidence classes. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "incidencebase.h" #include "calformat.h" #include "utils_p.h" #include "visitor.h" #include #include #include #define KCALCORE_MAGIC_NUMBER 0xCA1C012E #define KCALCORE_SERIALIZATION_VERSION 1 using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::IncidenceBase::Private { public: Private() : mUpdateGroupLevel(0) , mUpdatedPending(false) , mAllDay(false) , mHasDuration(false) { } Private(const Private &other) : mUpdateGroupLevel(0) , mUpdatedPending(false) , mAllDay(true) , mHasDuration(false) { init(other); } ~Private() { } void init(const Private &other); QDateTime mLastModified; // incidence last modified date QDateTime mDtStart; // incidence start time Person mOrganizer; // incidence person (owner) QString mUid; // incidence unique id Duration mDuration; // incidence duration int mUpdateGroupLevel; // if non-zero, suppresses update() calls bool mUpdatedPending = false; // true if an update has occurred since startUpdates() bool mAllDay = false; // true if the incidence is all-day bool mHasDuration = false; // true if the incidence has a duration Attendee::List mAttendees; // list of incidence attendees QStringList mComments; // list of incidence comments QStringList mContacts; // list of incidence contacts QList mObservers; // list of incidence observers QSet mDirtyFields; // Fields that changed since last time the incidence was created // or since resetDirtyFlags() was called QUrl mUrl; // incidence url property }; void IncidenceBase::Private::init(const Private &other) { mLastModified = other.mLastModified; mDtStart = other.mDtStart; mOrganizer = other.mOrganizer; mUid = other.mUid; mDuration = other.mDuration; mAllDay = other.mAllDay; mHasDuration = other.mHasDuration; mComments = other.mComments; mContacts = other.mContacts; mAttendees = other.mAttendees; mAttendees.reserve(other.mAttendees.count()); mUrl = other.mUrl; } //@endcond IncidenceBase::IncidenceBase() : d(new KCalendarCore::IncidenceBase::Private) { mReadOnly = false; setUid(CalFormat::createUniqueId()); } IncidenceBase::IncidenceBase(const IncidenceBase &i) : CustomProperties(i) , d(new KCalendarCore::IncidenceBase::Private(*i.d)) { mReadOnly = i.mReadOnly; } IncidenceBase::~IncidenceBase() { delete d; } IncidenceBase &IncidenceBase::operator=(const IncidenceBase &other) { Q_ASSERT(type() == other.type()); startUpdates(); // assign is virtual, will call the derived class's IncidenceBase &ret = assign(other); endUpdates(); return ret; } IncidenceBase &IncidenceBase::assign(const IncidenceBase &other) { CustomProperties::operator=(other); d->init(*other.d); mReadOnly = other.mReadOnly; d->mDirtyFields.clear(); d->mDirtyFields.insert(FieldUnknown); return *this; } bool IncidenceBase::operator==(const IncidenceBase &i2) const { if (i2.type() != type()) { return false; } else { // equals is virtual, so here we're calling the derived class method return equals(i2); } } bool IncidenceBase::operator!=(const IncidenceBase &i2) const { return !operator==(i2); } bool IncidenceBase::equals(const IncidenceBase &i2) const { if (attendees().count() != i2.attendees().count()) { // qDebug() << "Attendee count is different"; return false; } Attendee::List al1 = attendees(); Attendee::List al2 = i2.attendees(); Attendee::List::ConstIterator a1 = al1.constBegin(); Attendee::List::ConstIterator a2 = al2.constBegin(); // TODO Does the order of attendees in the list really matter? // Please delete this comment if you know it's ok, kthx for (; a1 != al1.constEnd() && a2 != al2.constEnd(); ++a1, ++a2) { if (!(*a1 == *a2)) { // qDebug() << "Attendees are different"; return false; } } if (!CustomProperties::operator==(i2)) { // qDebug() << "Properties are different"; return false; } // Don't compare lastModified, otherwise the operator is not // of much use. We are not comparing for identity, after all. // no need to compare mObserver bool a = ((dtStart() == i2.dtStart()) || (!dtStart().isValid() && !i2.dtStart().isValid())); bool b = organizer() == i2.organizer(); bool c = uid() == i2.uid(); bool d = allDay() == i2.allDay(); bool e = duration() == i2.duration(); bool f = hasDuration() == i2.hasDuration(); bool g = url() == i2.url(); // qDebug() << a << b << c << d << e << f << g; return a && b && c && d && e && f && g; } bool IncidenceBase::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { Q_UNUSED(v); Q_UNUSED(incidence); return false; } void IncidenceBase::setUid(const QString &uid) { if (d->mUid != uid) { update(); d->mUid = uid; d->mDirtyFields.insert(FieldUid); updated(); } } QString IncidenceBase::uid() const { return d->mUid; } void IncidenceBase::setLastModified(const QDateTime &lm) { // DON'T! updated() because we call this from // Calendar::updateEvent(). d->mDirtyFields.insert(FieldLastModified); // Convert to UTC and remove milliseconds part. QDateTime current = lm.toUTC(); QTime t = current.time(); t.setHMS(t.hour(), t.minute(), t.second(), 0); current.setTime(t); d->mLastModified = current; } QDateTime IncidenceBase::lastModified() const { return d->mLastModified; } void IncidenceBase::setOrganizer(const Person &organizer) { update(); // we don't check for readonly here, because it is // possible that by setting the organizer we are changing // the event's readonly status... d->mOrganizer = organizer; d->mDirtyFields.insert(FieldOrganizer); updated(); } void IncidenceBase::setOrganizer(const QString &o) { QString mail(o); if (mail.startsWith(QLatin1String("MAILTO:"), Qt::CaseInsensitive)) { mail.remove(0, 7); } // split the string into full name plus email. const Person organizer = Person::fromFullName(mail); setOrganizer(organizer); } Person IncidenceBase::organizer() const { return d->mOrganizer; } void IncidenceBase::setReadOnly(bool readOnly) { mReadOnly = readOnly; } bool IncidenceBase::isReadOnly() const { return mReadOnly; } void IncidenceBase::setDtStart(const QDateTime &dtStart) { // if ( mReadOnly ) return; if (!dtStart.isValid() && type() != IncidenceBase::TypeTodo) { qWarning() << "Invalid dtStart"; } if (d->mDtStart != dtStart) { update(); d->mDtStart = dtStart; d->mDirtyFields.insert(FieldDtStart); updated(); } } QDateTime IncidenceBase::dtStart() const { return d->mDtStart; } bool IncidenceBase::allDay() const { return d->mAllDay; } void IncidenceBase::setAllDay(bool f) { if (mReadOnly || f == d->mAllDay) { return; } update(); d->mAllDay = f; if (d->mDtStart.isValid()) { d->mDirtyFields.insert(FieldDtStart); } updated(); } void IncidenceBase::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { update(); d->mDtStart = d->mDtStart.toTimeZone(oldZone); d->mDtStart.setTimeZone(newZone); d->mDirtyFields.insert(FieldDtStart); d->mDirtyFields.insert(FieldDtEnd); updated(); } void IncidenceBase::addComment(const QString &comment) { d->mComments += comment; } bool IncidenceBase::removeComment(const QString &comment) { bool found = false; QStringList::Iterator i; for (i = d->mComments.begin(); !found && i != d->mComments.end(); ++i) { if ((*i) == comment) { found = true; d->mComments.erase(i); } } if (found) { d->mDirtyFields.insert(FieldComment); } return found; } void IncidenceBase::clearComments() { d->mDirtyFields.insert(FieldComment); d->mComments.clear(); } QStringList IncidenceBase::comments() const { return d->mComments; } void IncidenceBase::addContact(const QString &contact) { if (!contact.isEmpty()) { d->mContacts += contact; d->mDirtyFields.insert(FieldContact); } } bool IncidenceBase::removeContact(const QString &contact) { bool found = false; QStringList::Iterator i; for (i = d->mContacts.begin(); !found && i != d->mContacts.end(); ++i) { if ((*i) == contact) { found = true; d->mContacts.erase(i); } } if (found) { d->mDirtyFields.insert(FieldContact); } return found; } void IncidenceBase::clearContacts() { d->mDirtyFields.insert(FieldContact); d->mContacts.clear(); } QStringList IncidenceBase::contacts() const { return d->mContacts; } void IncidenceBase::addAttendee(const Attendee &a, bool doupdate) { if (a.isNull() || mReadOnly) { return; } Q_ASSERT(!a.uid().isEmpty()); if (doupdate) { update(); } d->mAttendees.append(a); if (doupdate) { d->mDirtyFields.insert(FieldAttendees); updated(); } } Attendee::List IncidenceBase::attendees() const { return d->mAttendees; } int IncidenceBase::attendeeCount() const { return d->mAttendees.count(); } void IncidenceBase::setAttendees(const Attendee::List &attendees, bool doUpdate) { if (mReadOnly) { return; } if (doUpdate) { update(); } // don't simply assign, we need the logic in addAttendee here too clearAttendees(); d->mAttendees.reserve(attendees.size()); for (const auto &a : attendees) { addAttendee(a, false); } if (doUpdate) { d->mDirtyFields.insert(FieldAttendees); updated(); } } void IncidenceBase::clearAttendees() { if (mReadOnly) { return; } d->mDirtyFields.insert(FieldAttendees); d->mAttendees.clear(); } Attendee IncidenceBase::attendeeByMail(const QString &email) const { Attendee::List::ConstIterator it; for (it = d->mAttendees.constBegin(); it != d->mAttendees.constEnd(); ++it) { if ((*it).email() == email) { return *it; } } return {}; } Attendee IncidenceBase::attendeeByMails(const QStringList &emails, const QString &email) const { QStringList mails = emails; if (!email.isEmpty()) { mails.append(email); } Attendee::List::ConstIterator itA; for (itA = d->mAttendees.constBegin(); itA != d->mAttendees.constEnd(); ++itA) { for (QStringList::const_iterator it = mails.constBegin(); it != mails.constEnd(); ++it) { if ((*itA).email() == (*it)) { return *itA; } } } return {}; } Attendee IncidenceBase::attendeeByUid(const QString &uid) const { Attendee::List::ConstIterator it; for (it = d->mAttendees.constBegin(); it != d->mAttendees.constEnd(); ++it) { if ((*it).uid() == uid) { return *it; } } return {}; } void IncidenceBase::setDuration(const Duration &duration) { update(); d->mDuration = duration; setHasDuration(true); d->mDirtyFields.insert(FieldDuration); updated(); } Duration IncidenceBase::duration() const { return d->mDuration; } void IncidenceBase::setHasDuration(bool hasDuration) { d->mHasDuration = hasDuration; } bool IncidenceBase::hasDuration() const { return d->mHasDuration; } void IncidenceBase::setUrl(const QUrl &url) { d->mDirtyFields.insert(FieldUrl); d->mUrl = url; } QUrl IncidenceBase::url() const { return d->mUrl; } void IncidenceBase::registerObserver(IncidenceBase::IncidenceObserver *observer) { if (observer && !d->mObservers.contains(observer)) { d->mObservers.append(observer); } } void IncidenceBase::unRegisterObserver(IncidenceBase::IncidenceObserver *observer) { d->mObservers.removeAll(observer); } void IncidenceBase::update() { if (!d->mUpdateGroupLevel) { d->mUpdatedPending = true; const auto rid = recurrenceId(); for (IncidenceObserver *o : qAsConst(d->mObservers)) { o->incidenceUpdate(uid(), rid); } } } void IncidenceBase::updated() { if (d->mUpdateGroupLevel) { d->mUpdatedPending = true; } else { const auto rid = recurrenceId(); for (IncidenceObserver *o : qAsConst(d->mObservers)) { o->incidenceUpdated(uid(), rid); } } } void IncidenceBase::startUpdates() { update(); ++d->mUpdateGroupLevel; } void IncidenceBase::endUpdates() { if (d->mUpdateGroupLevel > 0) { if (--d->mUpdateGroupLevel == 0 && d->mUpdatedPending) { d->mUpdatedPending = false; updated(); } } } void IncidenceBase::customPropertyUpdate() { update(); } void IncidenceBase::customPropertyUpdated() { updated(); } QDateTime IncidenceBase::recurrenceId() const { return QDateTime(); } void IncidenceBase::resetDirtyFields() { d->mDirtyFields.clear(); } QSet IncidenceBase::dirtyFields() const { return d->mDirtyFields; } void IncidenceBase::setFieldDirty(IncidenceBase::Field field) { d->mDirtyFields.insert(field); } QUrl IncidenceBase::uri() const { return QUrl(QStringLiteral("urn:x-ical:") + uid()); } void IncidenceBase::setDirtyFields(const QSet &dirtyFields) { d->mDirtyFields = dirtyFields; } void IncidenceBase::serialize(QDataStream &out) const { Q_UNUSED(out); } void IncidenceBase::deserialize(QDataStream &in) { Q_UNUSED(in); } /** static */ quint32 IncidenceBase::magicSerializationIdentifier() { return KCALCORE_MAGIC_NUMBER; } QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::IncidenceBase::Ptr &i) { if (!i) { return out; } out << static_cast(KCALCORE_MAGIC_NUMBER); // Magic number to identify KCalendarCore data out << static_cast(KCALCORE_SERIALIZATION_VERSION); out << static_cast(i->type()); out << *(static_cast(i.data())); serializeQDateTimeAsKDateTime(out, i->d->mLastModified); serializeQDateTimeAsKDateTime(out, i->d->mDtStart); out << i->organizer() << i->d->mUid << i->d->mDuration << i->d->mAllDay << i->d->mHasDuration << i->d->mComments << i->d->mContacts << i->d->mAttendees.count() << i->d->mUrl; for (const Attendee &attendee : qAsConst(i->d->mAttendees)) { out << attendee; } // Serialize the sub-class data. i->serialize(out); return out; } QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::IncidenceBase::Ptr &i) { if (!i) { return in; } qint32 attendeeCount, type; quint32 magic, version; in >> magic; if (magic != KCALCORE_MAGIC_NUMBER) { qWarning() << "Invalid magic on serialized data"; return in; } in >> version; if (version > KCALCORE_MAGIC_NUMBER) { qWarning() << "Invalid version on serialized data"; return in; } in >> type; in >> *(static_cast(i.data())); deserializeKDateTimeAsQDateTime(in, i->d->mLastModified); deserializeKDateTimeAsQDateTime(in, i->d->mDtStart); in >> i->d->mOrganizer >> i->d->mUid >> i->d->mDuration >> i->d->mAllDay >> i->d->mHasDuration >> i->d->mComments >> i->d->mContacts >> attendeeCount >> i->d->mUrl; i->d->mAttendees.clear(); i->d->mAttendees.reserve(attendeeCount); for (int it = 0; it < attendeeCount; it++) { Attendee attendee; in >> attendee; i->d->mAttendees.append(attendee); } // Deserialize the sub-class data. i->deserialize(in); return in; } IncidenceBase::IncidenceObserver::~IncidenceObserver() { } QVariantList IncidenceBase::attendeesVariant() const { QVariantList l; l.reserve(d->mAttendees.size()); std::transform(d->mAttendees.begin(), d->mAttendees.end(), std::back_inserter(l), [](const Attendee &a) { return QVariant::fromValue(a); }); return l; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/incidencebase.h000066400000000000000000000615121523260663500270540ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2005 Rafal Rzepecki SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the IncidenceBase class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ @author Rafal Rzepecki \ @glossary @anchor incidence @b incidence: General term for a calendar component. Examples are events, to-dos, and journals. @glossary @anchor event @b event: An @ref incidence that has a start and end time, typically representing some occurrence of social or personal importance. May be recurring. Examples are appointments, meetings, or holidays. @glossary @anchor to-do @b to-do: An @ref incidence that has an optional start time and an optional due time typically representing some undertaking to be performed. May be recurring. Examples are "fix the bug" or "pay the bills". @glossary @anchor todo @b todo: See @ref to-do. @glossary @anchor journal @b journal: An @ref incidence with a start date that represents a diary or daily record of one's activities. May @b not be recurring. */ #ifndef KCALCORE_INCIDENCEBASE_H #define KCALCORE_INCIDENCEBASE_H #include "attendee.h" #include "customproperties.h" #include "duration.h" #include "person.h" #include #include #include #include #include class QUrl; class QDate; class QTimeZone; namespace KCalendarCore { /** List of dates */ typedef QList DateList; /** List of times */ typedef QList DateTimeList; class Event; class Todo; class Journal; class FreeBusy; class Visitor; /** @brief An abstract class that provides a common base for all calendar incidence classes. define: organizer (person) define: uid (same as the attendee uid?) Several properties are not allowed for VFREEBUSY objects (see rfc:2445), so they are not in IncidenceBase. The hierarchy is: IncidenceBase + FreeBusy + Incidence + Event + Todo + Journal So IncidenceBase contains all properties that are common to all classes, and Incidence contains all additional properties that are common to Events, Todos and Journals, but are not allowed for FreeBusy entries. */ class Q_CORE_EXPORT IncidenceBase : public CustomProperties { Q_GADGET Q_PROPERTY(QString uid READ uid WRITE setUid) Q_PROPERTY(QDateTime lastModified READ lastModified WRITE setLastModified) Q_PROPERTY(QDateTime dtStart READ dtStart WRITE setDtStart) Q_PROPERTY(bool allDay READ allDay WRITE setAllDay) Q_PROPERTY(KCalendarCore::Person organizer READ organizer WRITE setOrganizer) Q_PROPERTY(QVariantList attendees READ attendeesVariant) public: /** A shared pointer to an IncidenceBase. */ typedef QSharedPointer Ptr; /** The different types of incidences, per RFC2445. @see type(), typeStr() */ enum IncidenceType { TypeEvent = 0, /**< Type is an event */ TypeTodo, /**< Type is a to-do */ TypeJournal, /**< Type is a journal */ TypeFreeBusy, /**< Type is a free/busy */ TypeUnknown, /**< Type unknown */ }; /** The different types of incidence date/times roles. ��类型的事件日期/时间角色。 @see dateTime() */ enum DateTimeRole { RoleAlarmStartOffset = 0, /**< Role for an incidence alarm's starting offset date/time */ RoleAlarmEndOffset, /**< Role for an incidence alarm's ending offset date/time */ RoleSort, /**< Role for an incidence's date/time used when sorting */ RoleCalendarHashing, /**< Role for looking up an incidence in a Calendar */ RoleStartTimeZone, /**< Role for determining an incidence's starting timezone */ RoleEndTimeZone, /**< Role for determining an incidence's ending timezone */ RoleEndRecurrenceBase, RoleEnd, /**< Role for determining an incidence's dtEnd, will return an invalid QDateTime if the incidence does not support dtEnd */ RoleDisplayEnd, /**< Role used for display purposes, represents the end boundary if an incidence supports dtEnd */ RoleAlarm, /**< Role for determining the date/time of the first alarm. Returns invalid time if the incidence doesn't have any alarm */ RoleRecurrenceStart, /**< Role for determining the start of the recurrence. Currently that's DTSTART for an event and DTDUE for a to-do. (NOTE: If the incidence is a to-do, recurrence should be calculated having DTSTART for a reference, not DT-DUE. This is one place KCalendarCore isn't compliant with RFC2445) */ RoleDisplayStart, /**< Role for display purposes, represents the start boundary of an incidence. To-dos return dtDue here, for historical reasons */ RoleDnD, /**< Role for determining new start and end dates after a DnD */ }; /** The different types of incidence fields. //��类型的入射场。 */ enum Field { FieldDtStart, ///< Field representing the DTSTART component. FieldDtEnd, ///< Field representing the DTEND component. FieldLastModified, ///< Field representing the LAST-MODIFIED component. FieldDescription, ///< Field representing the DESCRIPTION component. FieldSummary, ///< Field representing the SUMMARY component. FieldLocation, ///< Field representing the LOCATION component. FieldCompleted, ///< Field representing the COMPLETED component. FieldPercentComplete, ///< Field representing the PERCENT-COMPLETE component. FieldDtDue, ///< Field representing the DUE component. FieldCategories, ///< Field representing the CATEGORIES component. FieldRelatedTo, ///< Field representing the RELATED-TO component. FieldRecurrence, ///< Field representing the EXDATE, EXRULE, RDATE, and RRULE components. FieldAttachment, ///< Field representing the ATTACH component. FieldSecrecy, ///< Field representing the CLASS component. FieldStatus, ///< Field representing the STATUS component. FieldTransparency, ///< Field representing the TRANSPARENCY component. FieldResources, ///< Field representing the RESOURCES component. FieldPriority, ///< Field representing the PRIORITY component. FieldGeoLatitude, ///< Field representing the latitude part of the GEO component. FieldGeoLongitude, ///< Field representing the longitude part of the GEO component. FieldRecurrenceId, ///< Field representing the RECURRENCE-ID component. FieldAlarms, ///< Field representing the VALARM component. FieldSchedulingId, ///< Field representing the X-KDE-LIBKCAL-ID component. FieldAttendees, ///< Field representing the ATTENDEE component. FieldOrganizer, ///< Field representing the ORGANIZER component. FieldCreated, ///< Field representing the CREATED component. FieldRevision, ///< Field representing the SEQUENCE component. FieldDuration, ///< Field representing the DURATION component. FieldContact, ///< Field representing the CONTACT component. FieldComment, ///< Field representing the COMMENT component. FieldUid, ///< Field representing the UID component. FieldUnknown, ///< Something changed. Always set when you use the assignment operator. FieldUrl, ///< Field representing the URL component. FieldConferences, ///< Field representing the CONFERENCE component. FieldColor, ///< Field representing the COLOR component. }; /** The IncidenceObserver class. 事件观察者类。 */ class Q_CORE_EXPORT IncidenceObserver { public: /** Destroys the IncidenceObserver. */ virtual ~IncidenceObserver(); /** The IncidenceObserver interface. This function is called before any changes are made. @param uid is the string containing the incidence @ref uid. @param recurrenceId is possible recurrenceid of incidence. */ virtual void incidenceUpdate(const QString &uid, const QDateTime &recurrenceId) = 0; /** The IncidenceObserver interface. This function is called after changes are completed. @param uid is the string containing the incidence @ref uid. @param recurrenceId is possible recurrenceid of incidence. */ virtual void incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) = 0; }; /** Constructs an empty IncidenceBase. */ IncidenceBase(); /** Destroys the IncidenceBase. */ ~IncidenceBase() override; /** Assignment operator. All data belonging to derived classes are also copied. @see assign(). The caller guarantees that both types match. @code if ( i1.type() == i2.type() ) { i1 = i2; } else { qDebug() << "Invalid assignment!"; } @endcode Dirty field FieldUnknown will be set. @param other is the IncidenceBase to assign. */ IncidenceBase &operator=(const IncidenceBase &other); /** Compares this with IncidenceBase @p ib for equality. All data belonging to derived classes are also compared. @see equals(). @param ib is the IncidenceBase to compare against. @return true if the incidences are equal; false otherwise. */ bool operator==(const IncidenceBase &ib) const; /** Compares this with IncidenceBase @p ib for inequality. @param ib is the IncidenceBase to compare against. @return true if the incidences are /not/ equal; false otherwise. */ bool operator!=(const IncidenceBase &ib) const; /** Accept IncidenceVisitor. A class taking part in the visitor mechanism has to provide this implementation:
       bool accept(Visitor &v) { return v.visit(this); }
     
@param v is a reference to a Visitor object. @param incidence is a valid IncidenceBase object for visiting. */ virtual bool accept(Visitor &v, const IncidenceBase::Ptr &incidence); /** Returns the incidence type. */ virtual IncidenceType type() const = 0; /** Prints the type of incidence as a string. 将事件类型打å�°ä¸ºå­—符串。 */ virtual QByteArray typeStr() const = 0; /** Sets the unique id for the incidence to @p uid. 将事件的唯一 id 设置为 uid。 @param uid is the string containing the incidence @ref uid. @see uid() */ void setUid(const QString &uid); /** Returns the unique id (@ref uid) for the incidence. @see setUid() */ Q_REQUIRED_RESULT QString uid() const; /** Returns the uri for the incidence, of form urn:x-ical:\ 返回事件的uri, */ Q_REQUIRED_RESULT QUrl uri() const; /** Sets the time the incidence was last modified to @p lm. It is stored as a UTC date/time. @param lm is the QDateTime when the incidence was last modified. @see lastModified() */ virtual void setLastModified(const QDateTime &lm); /** Returns the time the incidence was last modified. 返回上次修改事件的时间。 @see setLastModified() */ Q_REQUIRED_RESULT QDateTime lastModified() const; /** Sets the organizer for the incidence. 设置事件的组织者。 @param organizer is a non-null Person to use as the incidence @ref organizer. @see organizer(), setOrganizer(const QString &) */ void setOrganizer(const Person &organizer); /** Sets the incidence organizer to any string @p organizer. @param organizer is a string to use as the incidence @ref organizer. @see organizer(), setOrganizer(const Person &) */ void setOrganizer(const QString &organizer); /** Returns the Person associated with this incidence. If no Person was set through setOrganizer(), a default Person() is returned. @see setOrganizer(const QString &), setOrganizer(const Person &) */ Person organizer() const; /** Sets readonly status. 设置å�ªè¯»çжæ€�。 @param readOnly if set, the incidence is read-only; else the incidence can be modified. @see isReadOnly(). */ virtual void setReadOnly(bool readOnly); /** Returns true the object is read-only; false otherwise. @see setReadOnly() */ Q_REQUIRED_RESULT bool isReadOnly() const; /** Sets the incidence's starting date/time with a QDateTime. @param dtStart is the incidence start date/time. @see dtStart(). */ virtual void setDtStart(const QDateTime &dtStart); /** Returns an incidence's starting date/time as a QDateTime. @see setDtStart(). */ virtual QDateTime dtStart() const; /** Sets the incidence duration. @param duration the incidence duration @see duration() */ virtual void setDuration(const Duration &duration); /** Returns the length of the incidence duration. @see setDuration() */ Q_REQUIRED_RESULT Duration duration() const; /** Sets if the incidence has a duration. @param hasDuration true if the incidence has a duration; false otherwise. @see hasDuration() */ void setHasDuration(bool hasDuration); /** Returns true if the incidence has a duration; false otherwise. @see setHasDuration() */ Q_REQUIRED_RESULT bool hasDuration() const; /** Returns true or false depending on whether the incidence is all-day. i.e. has a date but no time attached to it. @see setAllDay() */ Q_REQUIRED_RESULT bool allDay() const; /** Sets whether the incidence is all-day, i.e. has a date but no time attached to it. @param allDay sets whether the incidence is all-day. @see allDay() */ virtual void setAllDay(bool allDay); /** Shift the times of the incidence so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual incidence time zone. For example, shifting an incidence whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the incidence start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ virtual void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Adds a comment to the incidence. Does not add a linefeed character; simply appends the text as specified. å�‘事件添加注释。ä¸�添加æ�¢è¡Œå­—符; 仅按指定附加文本。 @param comment is the QString containing the comment to add. @see removeComment(). */ void addComment(const QString &comment); /** Removes a comment from the incidence. Removes the first comment whose string is an exact match for the specified string in @p comment. @param comment is the QString containing the comment to remove. @return true if match found, false otherwise. @see addComment(). */ Q_REQUIRED_RESULT bool removeComment(const QString &comment); /** Deletes all incidence comments. */ void clearComments(); /** Returns all incidence comments as a list of strings. 将所有关è�”注释作为字符串列表返回。 */ Q_REQUIRED_RESULT QStringList comments() const; /** Adds a contact to thieincidence. Does not add a linefeed character; simply appends the text as specified. @param contact is the QString containing the contact to add. @see removeContact(). */ void addContact(const QString &contact); /** Removes a contact from the incidence. Removes the first contact whose string is an exact match for the specified string in @p contact. @param contact is the QString containing the contact to remove. @return true if match found, false otherwise. @see addContact(). */ Q_REQUIRED_RESULT bool removeContact(const QString &contact); /** Deletes all incidence contacts. */ void clearContacts(); /** Returns all incidence contacts as a list of strings. */ Q_REQUIRED_RESULT QStringList contacts() const; /** Add Attendee to this incidence. @param attendee the attendee to add @param doUpdate If true the Observers are notified, if false they are not. */ void addAttendee(const Attendee &attendee, bool doUpdate = true); /** Removes all attendees from the incidence. */ void clearAttendees(); /** Set the attendees of this incidence. This replaces all previously set attendees, unlike addAttendee. @param attendees A list of attendees. @param doUpdate If true the Observers are notified, if false they are not. */ void setAttendees(const Attendee::List &attendees, bool doUpdate = true); /** Returns a list of incidence attendees. All pointers in the list are valid. */ Q_REQUIRED_RESULT Attendee::List attendees() const; /** Returns the number of incidence attendees. */ Q_REQUIRED_RESULT int attendeeCount() const; /** Returns the attendee with the specified email address. @param email is a QString containing an email address of the form "FirstName LastName ". @see attendeeByMails(), attendeesByUid(). */ Attendee attendeeByMail(const QString &email) const; /** Returns the first incidence attendee with one of the specified email addresses. @param emails is a list of QStrings containing email addresses of the form "FirstName LastName ". @param email is a QString containing a single email address to search in addition to the list specified in @p emails. @see attendeeByMail(), attendeesByUid(). */ Attendee attendeeByMails(const QStringList &emails, const QString &email = QString()) const; /** Returns the incidence attendee with the specified attendee @acronym UID. @param uid is a QString containing an attendee @acronym UID. @see attendeeByMail(), attendeeByMails(). */ Attendee attendeeByUid(const QString &uid) const; /** Sets the incidences url. This property can be used to point to a more dynamic rendition of the incidence. I.e. a website related to the incidence. @param url of the incience. @see url() @since 4.12 */ void setUrl(const QUrl &url); /** Returns the url. @return incidences url value @see setUrl() @since 4.12 */ Q_REQUIRED_RESULT QUrl url() const; /** Register observer. The observer is notified when the observed object changes. @param observer is a pointer to an IncidenceObserver object that will be watching this incidence. @see unRegisterObserver() */ void registerObserver(IncidenceObserver *observer); /** Unregister observer. It isn't notified anymore about changes. @param observer is a pointer to an IncidenceObserver object that will be watching this incidence. @see registerObserver(). */ void unRegisterObserver(IncidenceObserver *observer); /** Call this to notify the observers after the IncidenceBase object will be changed. 调用此选项å�¯åœ¨IncidenceBase对象å�‘生更改å�Žé€šçŸ¥è§‚察者。 */ void update(); /** Call this to notify the observers after the IncidenceBase object has changed. */ void updated(); /** Call this when a group of updates is going to be made. This suppresses change notifications until endUpdates() is called, at which point updated() will automatically be called. */ void startUpdates(); /** Call this when a group of updates is complete, to notify observers that the instance has changed. This should be called in conjunction with startUpdates(). */ void endUpdates(); /** Returns a date/time corresponding to the specified DateTimeRole. @param role is a DateTimeRole. */ virtual QDateTime dateTime(DateTimeRole role) const = 0; /** Sets the date/time corresponding to the specified DateTimeRole. @param dateTime is QDateTime value to set. @param role is a DateTimeRole. */ virtual void setDateTime(const QDateTime &dateTime, DateTimeRole role) = 0; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::IncidenceBase item, e.g. getting "application/x-vnd.akonadi.calendar.event" for a KCalendarCore::Event. */ virtual QLatin1String mimeType() const = 0; /** Returns the incidence recurrenceId. @return incidences recurrenceId value @see setRecurrenceId(). */ virtual QDateTime recurrenceId() const; /** Returns a QSet with all Fields that were changed since the incidence was created or resetDirtyFields() was called. @see resetDirtyFields() */ QSet dirtyFields() const; /** Sets which fields are dirty. @see dirtyFields() @since 4.8 */ void setDirtyFields(const QSet &); /** Resets dirty fields. @see dirtyFields() */ void resetDirtyFields(); /** * Constant that identifies KCalendarCore data in a binary stream. * * @since 4.12 */ Q_REQUIRED_RESULT static quint32 magicSerializationIdentifier(); protected: /** Marks Field @p field as dirty. @param field is the Field type to mark as dirty. @see dirtyFields() */ void setFieldDirty(IncidenceBase::Field field); /** @copydoc CustomProperties::customPropertyUpdate() */ void customPropertyUpdate() override; /** @copydoc CustomProperties::customPropertyUpdated() */ void customPropertyUpdated() override; /** Constructs an IncidenceBase as a copy of another IncidenceBase object. @param ib is the IncidenceBase to copy. */ IncidenceBase(const IncidenceBase &ib); /** Provides polymorfic comparison for equality. Only called by IncidenceBase::operator==() which guarantees that @p incidenceBase is of the right type. @param incidenceBase is the IncidenceBase to compare against. @return true if the incidences are equal; false otherwise. */ virtual bool equals(const IncidenceBase &incidenceBase) const; /** Provides polymorfic assignment. @param other is the IncidenceBase to assign. */ virtual IncidenceBase &assign(const IncidenceBase &other); /** * Sub-type specific serialization. */ virtual void serialize(QDataStream &out) const; /** * Sub-type specific deserialization. */ virtual void deserialize(QDataStream &in); enum VirtualHook {}; /** Standard trick to add virtuals later. @param id is any integer unique to this class which we will use to identify the method to be called. @param data is a pointer to some glob of data, typically a struct. */ virtual void virtual_hook(VirtualHook id, void *data) = 0; /** Identifies a read-only incidence. */ bool mReadOnly; private: //@cond PRIVATE class Private; Private *const d; Q_DECL_HIDDEN QVariantList attendeesVariant() const; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::IncidenceBase::Ptr &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::IncidenceBase::Ptr &); }; /** * Incidence serializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::IncidenceBase::Ptr &); /** * Incidence deserializer. * * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::IncidenceBase::Ptr &); } // namespace KCalendarCore Q_DECLARE_METATYPE(KCalendarCore::IncidenceBase *) Q_DECLARE_METATYPE(KCalendarCore::IncidenceBase::Ptr) #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/journal.cpp000066400000000000000000000044361523260663500263070ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Journal class. @brief Provides a Journal in the sense of RFC2445. @author Cornelius Schumacher \ */ #include "journal.h" #include "visitor.h" #include using namespace KCalendarCore; Journal::Journal() : d(nullptr) { } Journal::Journal(const Journal &) = default; Journal::~Journal() = default; Incidence::IncidenceType Journal::type() const { return TypeJournal; } QByteArray Journal::typeStr() const { return QByteArrayLiteral("Journal"); } Journal *Journal::clone() const { return new Journal(*this); } IncidenceBase &Journal::assign(const IncidenceBase &other) { Incidence::assign(other); return *this; } bool Journal::equals(const IncidenceBase &journal) const { return Incidence::equals(journal); } bool Journal::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime Journal::dateTime(DateTimeRole role) const { switch (role) { case RoleEnd: case RoleEndTimeZone: return QDateTime(); case RoleDisplayStart: case RoleDisplayEnd: return dtStart(); default: return dtStart(); } } void Journal::setDateTime(const QDateTime &dateTime, DateTimeRole role) { switch (role) { case RoleDnD: { setDtStart(dateTime); break; } default: qDebug() << "Unhandled role" << role; } } void Journal::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); } QLatin1String Journal::mimeType() const { return Journal::journalMimeType(); } /* static */ QLatin1String Journal::journalMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.journal"); } QLatin1String Journal::iconName(const QDateTime &) const { return QLatin1String("view-pim-journal"); } void Journal::serialize(QDataStream &out) const { Incidence::serialize(out); } void Journal::deserialize(QDataStream &in) { Incidence::deserialize(in); } bool Journal::supportsGroupwareCommunication() const { return false; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/journal.h000066400000000000000000000074541523260663500257570ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Journal class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_JOURNAL_H #define KCALCORE_JOURNAL_H #include "incidence.h" namespace KCalendarCore { /** @brief Provides a Journal in the sense of RFC2445. */ class Q_CORE_EXPORT Journal : public Incidence { public: /** A shared pointer to a Journal object. */ typedef QSharedPointer Ptr; /** List of journals. */ typedef QVector List; ///@cond PRIVATE // needed for Akonadi polymorphic payload support typedef Incidence SuperClass; ///@endcond /** Constructs an empty journal. */ Journal(); /** Copy a journey object. */ Journal(const Journal &); /** Destroys a journal. */ ~Journal() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Returns an exact copy of this journal. The returned object is owned by the caller. */ Journal *clone() const override; /** @copydoc IncidenceBase::dateTime(DateTimeRole)const */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime(const QDateTime &, DateTimeRole ) */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** @copydoc Incidence::iconName() */ Q_REQUIRED_RESULT QLatin1String iconName(const QDateTime &recurrenceId = {}) const override; /** @copydoc Incidence::supportsGroupwareCommunication() */ Q_REQUIRED_RESULT bool supportsGroupwareCommunication() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::Journal. */ Q_REQUIRED_RESULT static QLatin1String journalMimeType(); protected: /** Compare this with @p journal for equality. @param journal is the journal to compare. */ bool equals(const IncidenceBase &journal) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept(Visitor &, const IncidenceBase::Ptr &) */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass Journal. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another Journal object to assign to this one. */ Journal &operator=(const Journal &other) = delete; // For polymorfic serialization void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Journal::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Journal::Ptr) Q_DECLARE_METATYPE(KCalendarCore::Journal *) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/memorycalendar.cpp000066400000000000000000000627771523260663500276530ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the MemoryCalendar class. @brief This class provides a calendar stored as a local file. @author Preston Brown \ @author Cornelius Schumacher \ */ #include "memorycalendar.h" #include "calformat.h" #include #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::MemoryCalendar::Private { private: static constexpr int incidenceTypeCount = 4; public: Private(MemoryCalendar *qq) : q(qq) , mFormat(nullptr) , mUpdateLastModified(true) { } ~Private() { } MemoryCalendar *q; CalFormat *mFormat; // calendar format QString mIncidenceBeingUpdated; // Instance identifier of Incidence currently being updated bool mUpdateLastModified; // Call setLastModified() on incidence modific ations /** * List of all incidences. * First indexed by incidence->type(), then by incidence->uid(); */ QMultiHash mIncidences[incidenceTypeCount]; /** * Has all incidences, indexed by identifier. */ QHash mIncidencesByIdentifier; /** * List of all deleted incidences. * First indexed by incidence->type(), then by incidence->uid(); */ QMultiHash mDeletedIncidences[incidenceTypeCount]; /** * Contains incidences ( to-dos; non-recurring, non-multiday events; journals; ) * indexed by start/due date. * * The QMap key is the incidence->type(). * The QMultiHash key is the dtStart/dtDue() converted to calendar's timezone * * Note: We had 3 variables, mJournalsForDate, mTodosForDate and mEventsForDate * but i merged them into one (indexed by type) because it simplifies code using * it. No need to if else based on type. */ QMultiHash mIncidencesForDate[incidenceTypeCount]; void insertIncidence(const Incidence::Ptr &incidence); Incidence::Ptr incidence(const QString &uid, IncidenceBase::IncidenceType type, const QDateTime &recurrenceId = {}) const; bool deleteIncidence(const QString &uid, IncidenceBase::IncidenceType type, const QDateTime &recurrenceId = {}); Incidence::Ptr deletedIncidence(const QString &uid, const QDateTime &recurrenceId, IncidenceBase::IncidenceType type) const; void deleteAllIncidences(IncidenceBase::IncidenceType type); template void forIncidences(const QMultiHash &incidences, const Key &key, std::function &&op) const { for (auto it = incidences.constFind(key), end = incidences.cend(); it != end && it.key() == key; ++it) { op(it.value().template staticCast()); } } template void forIncidences(const QMultiHash &incidences, std::function &&op) const { for (const auto &incidence : incidences) { op(incidence.template staticCast()); } } template typename IncidenceType::List castIncidenceList(const QMultiHash &incidences) const { typename IncidenceType::List list; list.reserve(incidences.size()); std::transform(incidences.cbegin(), incidences.cend(), std::back_inserter(list), [](const Incidence::Ptr &inc) { return inc.staticCast(); }); return list; } template typename IncidenceType::List incidenceInstances(IncidenceBase::IncidenceType type, const Incidence::Ptr &incidence) const { typename IncidenceType::List list; forIncidences(mIncidences[type], incidence->uid(), [&list](const typename IncidenceType::Ptr &incidence) { if (incidence->hasRecurrenceId()) { list.push_back(incidence); } }); return list; } Incidence::Ptr findIncidence(const QMultiHash &incidences, const QString &uid, const QDateTime &recurrenceId) const { for (auto it = incidences.constFind(uid), end = incidences.cend(); it != end && it.key() == uid; ++it) { const auto &incidence = it.value(); if (recurrenceId.isNull() && !incidence->hasRecurrenceId()) { return incidence; } else if (!recurrenceId.isNull() && incidence->hasRecurrenceId() && recurrenceId == incidence->recurrenceId()) { return incidence; } } return {}; } }; //@endcond MemoryCalendar::MemoryCalendar(const QTimeZone &timeZone) : Calendar(timeZone) , d(new KCalendarCore::MemoryCalendar::Private(this)) { } MemoryCalendar::MemoryCalendar(const QByteArray &timeZoneId) : Calendar(timeZoneId) , d(new KCalendarCore::MemoryCalendar::Private(this)) { } MemoryCalendar::~MemoryCalendar() { close(); // NOLINT false clang-analyzer-optin.cplusplus.VirtualCall delete d; } void MemoryCalendar::doSetTimeZone(const QTimeZone &timeZone) { // Reset date based hashes before storing for the new zone. for (auto &table : d->mIncidencesForDate) { table.clear(); } for (auto &table : d->mIncidences) { for (const auto &incidence : table) { const QDateTime dt = incidence->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { d->mIncidencesForDate[incidence->type()].insert(dt.toTimeZone(timeZone).date(), incidence); } } } } void MemoryCalendar::close() { setObserversEnabled(false); // Don't call the virtual function deleteEvents() etc, the base class might have // other ways of deleting the data. d->deleteAllIncidences(Incidence::TypeEvent); d->deleteAllIncidences(Incidence::TypeTodo); d->deleteAllIncidences(Incidence::TypeJournal); d->mIncidencesByIdentifier.clear(); for (auto &table : d->mDeletedIncidences) { table.clear(); } clearNotebookAssociations(); setModified(false); setObserversEnabled(true); } bool MemoryCalendar::deleteIncidence(const Incidence::Ptr &incidence) { // Handle orphaned children // relations is an Incidence's property, not a Todo's, so // we remove relations in deleteIncidence, not in deleteTodo. removeRelations(incidence); // Notify while the incidence is still available, // this is necessary so korganizer still has time to query for exceptions notifyIncidenceAboutToBeDeleted(incidence); incidence->unRegisterObserver(this); const Incidence::IncidenceType type = incidence->type(); const QString &uid = incidence->uid(); bool deleted = d->deleteIncidence(uid, type, incidence->recurrenceId()); if (deleted) { setModified(true); if (deletionTracking()) { d->mDeletedIncidences[type].insert(uid, incidence); } // Delete child-incidences. if (!incidence->hasRecurrenceId() && incidence->recurs()) { deleteIncidenceInstances(incidence); } } else { qWarning() << incidence->typeStr() << " not found. uid=" << uid; } notifyIncidenceDeleted(incidence); return deleted; } bool MemoryCalendar::deleteIncidenceInstances(const Incidence::Ptr &incidence) { Incidence::List instances; for (auto it = d->mIncidences[incidence->type()].constFind(incidence->uid()), end = d->mIncidences[incidence->type()].constEnd(); it != end && it.key() == incidence->uid(); ++it) { if (it.value()->hasRecurrenceId()) { qDebug() << "deleting child" << ", type=" << int(incidence->type()) << ", uid=" << incidence->uid() // << ", start=" << i->dtStart() << " from calendar"; // Don't call deleteIncidence() now since it's modifying the // mIncidences map we're iterating over. instances.append(it.value()); } } for (Incidence::Ptr instance : instances) { deleteIncidence(instance); } return true; } //@cond PRIVATE bool MemoryCalendar::Private::deleteIncidence(const QString &uid, IncidenceBase::IncidenceType type, const QDateTime &recurrenceId) { for (auto it = mIncidences[type].find(uid), end = mIncidences[type].end(); it != end && it.key() == uid; ++it) { Incidence::Ptr incidence = it.value(); if (recurrenceId.isNull() && incidence->hasRecurrenceId()) { continue; } else if (!recurrenceId.isNull() && (!incidence->hasRecurrenceId() || recurrenceId != incidence->recurrenceId())) { continue; } mIncidences[type].erase(it); mIncidencesByIdentifier.remove(incidence->instanceIdentifier()); const QDateTime dt = incidence->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { mIncidencesForDate[type].remove(dt.toTimeZone(q->timeZone()).date(), incidence); } return true; } return false; } void MemoryCalendar::Private::deleteAllIncidences(Incidence::IncidenceType incidenceType) { for (auto &incidence : mIncidences[incidenceType]) { q->notifyIncidenceAboutToBeDeleted(incidence); incidence->unRegisterObserver(q); } mIncidences[incidenceType].clear(); mIncidencesForDate[incidenceType].clear(); } Incidence::Ptr MemoryCalendar::Private::incidence(const QString &uid, Incidence::IncidenceType type, const QDateTime &recurrenceId) const { return findIncidence(mIncidences[type], uid, recurrenceId); } Incidence::Ptr MemoryCalendar::Private::deletedIncidence(const QString &uid, const QDateTime &recurrenceId, IncidenceBase::IncidenceType type) const { if (!q->deletionTracking()) { return Incidence::Ptr(); } return findIncidence(mDeletedIncidences[type], uid, recurrenceId); } void MemoryCalendar::Private::insertIncidence(const Incidence::Ptr &incidence) { const QString uid = incidence->uid(); const Incidence::IncidenceType type = incidence->type(); if (!mIncidences[type].contains(uid, incidence)) { mIncidences[type].insert(uid, incidence); mIncidencesByIdentifier.insert(incidence->instanceIdentifier(), incidence); const QDateTime dt = incidence->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { mIncidencesForDate[type].insert(dt.toTimeZone(q->timeZone()).date(), incidence); } } else { #ifndef NDEBUG // if we already have an to-do with this UID, it must be the same incidence, // otherwise something's really broken Q_ASSERT(mIncidences[type].value(uid) == incidence); #endif } } //@endcond bool MemoryCalendar::addIncidence(const Incidence::Ptr &incidence) { d->insertIncidence(incidence); notifyIncidenceAdded(incidence); incidence->registerObserver(this); setupRelations(incidence); setModified(true); return true; } bool MemoryCalendar::addEvent(const Event::Ptr &event) { return addIncidence(event); } bool MemoryCalendar::deleteEvent(const Event::Ptr &event) { return deleteIncidence(event); } bool MemoryCalendar::deleteEventInstances(const Event::Ptr &event) { return deleteIncidenceInstances(event); } Event::Ptr MemoryCalendar::event(const QString &uid, const QDateTime &recurrenceId) const { return d->incidence(uid, Incidence::TypeEvent, recurrenceId).staticCast(); } Event::Ptr MemoryCalendar::deletedEvent(const QString &uid, const QDateTime &recurrenceId) const { return d->deletedIncidence(uid, recurrenceId, Incidence::TypeEvent).staticCast(); } bool MemoryCalendar::addTodo(const Todo::Ptr &todo) { return addIncidence(todo); } bool MemoryCalendar::deleteTodo(const Todo::Ptr &todo) { return deleteIncidence(todo); } bool MemoryCalendar::deleteTodoInstances(const Todo::Ptr &todo) { return deleteIncidenceInstances(todo); } Todo::Ptr MemoryCalendar::todo(const QString &uid, const QDateTime &recurrenceId) const { return d->incidence(uid, Incidence::TypeTodo, recurrenceId).staticCast(); } Todo::Ptr MemoryCalendar::deletedTodo(const QString &uid, const QDateTime &recurrenceId) const { return d->deletedIncidence(uid, recurrenceId, Incidence::TypeTodo).staticCast(); } Todo::List MemoryCalendar::rawTodos(TodoSortField sortField, SortDirection sortDirection) const { return Calendar::sortTodos(d->castIncidenceList(d->mIncidences[Incidence::TypeTodo]), sortField, sortDirection); } Todo::List MemoryCalendar::deletedTodos(TodoSortField sortField, SortDirection sortDirection) const { if (!deletionTracking()) { return Todo::List(); } return Calendar::sortTodos(d->castIncidenceList(d->mDeletedIncidences[Incidence::TypeTodo]), sortField, sortDirection); } Todo::List MemoryCalendar::todoInstances(const Incidence::Ptr &todo, TodoSortField sortField, SortDirection sortDirection) const { return Calendar::sortTodos(d->incidenceInstances(Incidence::TypeTodo, todo), sortField, sortDirection); } Todo::List MemoryCalendar::rawTodosForDate(const QDate &date) const { Todo::List todoList; d->forIncidences(d->mIncidencesForDate[Incidence::TypeTodo], date, [&todoList](const Todo::Ptr &todo) { todoList.append(todo); }); // Iterate over all todos. Look for recurring todoss that occur on this date d->forIncidences(d->mIncidences[Incidence::TypeTodo], [this, &todoList, &date](const Todo::Ptr &todo) { if (todo->recurs() && todo->recursOn(date, timeZone())) { todoList.append(todo); } }); return todoList; } Todo::List MemoryCalendar::rawTodos(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Q_UNUSED(inclusive); // use only exact dtDue/dtStart, not dtStart and dtEnd Todo::List todoList; const auto ts = timeZone.isValid() ? timeZone : this->timeZone(); QDateTime st(start, QTime(0, 0, 0), ts); QDateTime nd(end, QTime(23, 59, 59, 999), ts); // Get todos for (const auto &incidence : d->mIncidences[Incidence::TypeTodo]) { const auto todo = incidence.staticCast(); if (!isVisible(todo)) { continue; } QDateTime rStart = todo->hasDueDate() ? todo->dtDue() : todo->hasStartDate() ? todo->dtStart() : QDateTime(); if (!rStart.isValid()) { continue; } if (!todo->recurs()) { // non-recurring todos if (nd.isValid() && nd < rStart) { continue; } if (st.isValid() && rStart < st) { continue; } } else { // recurring events switch (todo->recurrence()->duration()) { case -1: // infinite break; case 0: // end date given default: // count given QDateTime rEnd(todo->recurrence()->endDate(), QTime(23, 59, 59, 999), ts); if (!rEnd.isValid()) { continue; } if (st.isValid() && rEnd < st) { continue; } break; } // switch(duration) } // if(recurs) todoList.append(todo); } return todoList; } Alarm::List MemoryCalendar::alarmsTo(const QDateTime &to) const { return alarms(QDateTime(QDate(1900, 1, 1), QTime(0, 0, 0)), to); } Alarm::List MemoryCalendar::alarms(const QDateTime &from, const QDateTime &to, bool excludeBlockedAlarms) const { Q_UNUSED(excludeBlockedAlarms); Alarm::List alarmList; d->forIncidences(d->mIncidences[Incidence::TypeEvent], [this, &alarmList, &from, &to](const Event::Ptr &e) { if (e->recurs()) { appendRecurringAlarms(alarmList, e, from, to); } else { appendAlarms(alarmList, e, from, to); } }); d->forIncidences(d->mIncidences[IncidenceBase::TypeTodo], [this, &alarmList, &from, &to](const Todo::Ptr &t) { if (!t->isCompleted()) { appendAlarms(alarmList, t, from, to); if (t->recurs()) { appendRecurringAlarms(alarmList, t, from, to); } else { appendAlarms(alarmList, t, from, to); } } }); return alarmList; } bool MemoryCalendar::updateLastModifiedOnChange() const { return d->mUpdateLastModified; } void MemoryCalendar::setUpdateLastModifiedOnChange(bool update) { d->mUpdateLastModified = update; } void MemoryCalendar::incidenceUpdate(const QString &uid, const QDateTime &recurrenceId) { Incidence::Ptr inc = incidence(uid, recurrenceId); if (inc) { if (!d->mIncidenceBeingUpdated.isEmpty()) { qWarning() << "Incidence::update() called twice without an updated() call in between."; } // Save it so we can detect changes to uid or recurringId. d->mIncidenceBeingUpdated = inc->instanceIdentifier(); const QDateTime dt = inc->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { d->mIncidencesForDate[inc->type()].remove(dt.toTimeZone(timeZone()).date(), inc); } } } void MemoryCalendar::incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) { Incidence::Ptr inc = incidence(uid, recurrenceId); if (inc) { if (d->mIncidenceBeingUpdated.isEmpty()) { qWarning() << "Incidence::updated() called twice without an update() call in between."; } else if (inc->instanceIdentifier() != d->mIncidenceBeingUpdated) { // Instance identifier changed, update our hash table d->mIncidencesByIdentifier.remove(d->mIncidenceBeingUpdated); d->mIncidencesByIdentifier.insert(inc->instanceIdentifier(), inc); } d->mIncidenceBeingUpdated = QString(); if (d->mUpdateLastModified) { inc->setLastModified(QDateTime::currentDateTimeUtc()); } // we should probably update the revision number here, // or internally in the Event itself when certain things change. // need to verify with ical documentation. const QDateTime dt = inc->dateTime(Incidence::RoleCalendarHashing); if (dt.isValid()) { d->mIncidencesForDate[inc->type()].insert(dt.toTimeZone(timeZone()).date(), inc); } notifyIncidenceChanged(inc); setModified(true); } } Event::List MemoryCalendar::rawEventsForDate(const QDate &date, const QTimeZone &timeZone, EventSortField sortField, SortDirection sortDirection) const { Event::List eventList; if (!date.isValid()) { // There can't be events on invalid dates return eventList; } if (timeZone.isValid() && timeZone != this->timeZone()) { // We cannot use the hash table on date, since time zone is different. eventList = rawEvents(date, date, timeZone, false); return Calendar::sortEvents(eventList, sortField, sortDirection); } // Iterate over all non-recurring, single-day events that start on this date d->forIncidences(d->mIncidencesForDate[Incidence::TypeEvent], date, [&eventList](const Event::Ptr &event) { eventList.append(event); }); // Iterate over all events. Look for recurring events that occur on this date const auto ts = timeZone.isValid() ? timeZone : this->timeZone(); for (const auto &event : d->mIncidences[Incidence::TypeEvent]) { const auto ev = event.staticCast(); if (ev->recurs()) { if (ev->isMultiDay()) { int extraDays = ev->dtStart().date().daysTo(ev->dtEnd().date()); for (int i = 0; i <= extraDays; ++i) { if (ev->recursOn(date.addDays(-i), ts)) { eventList.append(ev); break; } } } else { if (ev->recursOn(date, ts)) { eventList.append(ev); } } } else { if (ev->isMultiDay()) { if (ev->dtStart().toTimeZone(ts).date() <= date && ev->dtEnd().toTimeZone(ts).date() >= date) { eventList.append(ev); } } } } return Calendar::sortEvents(eventList, sortField, sortDirection); } Event::List MemoryCalendar::rawEvents(const QDate &start, const QDate &end, const QTimeZone &timeZone, bool inclusive) const { Event::List eventList; const auto ts = timeZone.isValid() ? timeZone : this->timeZone(); QDateTime st(start, QTime(0, 0, 0), ts); QDateTime nd(end, QTime(23, 59, 59, 999), ts); // Get non-recurring events for (const auto &e : d->mIncidences[Incidence::TypeEvent]) { const auto event = e.staticCast(); QDateTime rStart = event->dtStart(); if (nd.isValid() && nd < rStart) { continue; } if (inclusive && st.isValid() && rStart < st) { continue; } if (!event->recurs()) { // non-recurring events QDateTime rEnd = event->dtEnd(); if (st.isValid() && rEnd < st) { continue; } if (inclusive && nd.isValid() && nd < rEnd) { continue; } } else { // recurring events switch (event->recurrence()->duration()) { case -1: // infinite if (inclusive) { continue; } break; case 0: // end date given default: // count given QDateTime rEnd(event->recurrence()->endDate(), QTime(23, 59, 59, 999), ts); if (!rEnd.isValid()) { continue; } if (st.isValid() && rEnd < st) { continue; } if (inclusive && nd.isValid() && nd < rEnd) { continue; } break; } // switch(duration) } // if(recurs) eventList.append(event); } return eventList; } Event::List MemoryCalendar::rawEventsForDate(const QDateTime &kdt) const { return rawEventsForDate(kdt.date(), kdt.timeZone()); } Event::List MemoryCalendar::rawEvents(EventSortField sortField, SortDirection sortDirection) const { return Calendar::sortEvents(d->castIncidenceList(d->mIncidences[Incidence::TypeEvent]), sortField, sortDirection); } Event::List MemoryCalendar::deletedEvents(EventSortField sortField, SortDirection sortDirection) const { if (!deletionTracking()) { return Event::List(); } return Calendar::sortEvents(d->castIncidenceList(d->mDeletedIncidences[Incidence::TypeEvent]), sortField, sortDirection); } Event::List MemoryCalendar::eventInstances(const Incidence::Ptr &event, EventSortField sortField, SortDirection sortDirection) const { return Calendar::sortEvents(d->incidenceInstances(Incidence::TypeEvent, event), sortField, sortDirection); } bool MemoryCalendar::addJournal(const Journal::Ptr &journal) { return addIncidence(journal); } bool MemoryCalendar::deleteJournal(const Journal::Ptr &journal) { return deleteIncidence(journal); } bool MemoryCalendar::deleteJournalInstances(const Journal::Ptr &journal) { return deleteIncidenceInstances(journal); } Journal::Ptr MemoryCalendar::journal(const QString &uid, const QDateTime &recurrenceId) const { return d->incidence(uid, Incidence::TypeJournal, recurrenceId).staticCast(); } Journal::Ptr MemoryCalendar::deletedJournal(const QString &uid, const QDateTime &recurrenceId) const { return d->deletedIncidence(uid, recurrenceId, Incidence::TypeJournal).staticCast(); } Journal::List MemoryCalendar::rawJournals(JournalSortField sortField, SortDirection sortDirection) const { return Calendar::sortJournals(d->castIncidenceList(d->mIncidences[Incidence::TypeJournal]), sortField, sortDirection); } Journal::List MemoryCalendar::deletedJournals(JournalSortField sortField, SortDirection sortDirection) const { if (!deletionTracking()) { return Journal::List(); } return Calendar::sortJournals(d->castIncidenceList(d->mDeletedIncidences[Incidence::TypeJournal]), sortField, sortDirection); } Journal::List MemoryCalendar::journalInstances(const Incidence::Ptr &journal, JournalSortField sortField, SortDirection sortDirection) const { return Calendar::sortJournals(d->incidenceInstances(Incidence::TypeJournal, journal), sortField, sortDirection); } Journal::List MemoryCalendar::rawJournalsForDate(const QDate &date) const { Journal::List journalList; d->forIncidences(d->mIncidencesForDate[Incidence::TypeJournal], date, [&journalList](const Journal::Ptr &journal) { journalList.append(journal); }); return journalList; } Incidence::Ptr MemoryCalendar::instance(const QString &identifier) const { return d->mIncidencesByIdentifier.value(identifier); } void MemoryCalendar::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/memorycalendar.h000066400000000000000000000247421523260663500273060ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the MemoryCalendar class. Very simple implementation of a Calendar that is only in memory @author Preston Brown \ @author Cornelius Schumacher \ */ #ifndef KCALCORE_MEMORYCALENDAR_H #define KCALCORE_MEMORYCALENDAR_H #include "calendar.h" namespace KCalendarCore { /** @brief This class provides a calendar stored in memory. 此类æ��供存储在内存中的日历 */ class Q_CORE_EXPORT MemoryCalendar : public Calendar { Q_OBJECT public: /** A shared pointer to a MemoryCalendar */ typedef QSharedPointer Ptr; /** @copydoc Calendar::Calendar(const QTimeZone &) */ explicit MemoryCalendar(const QTimeZone &timeZone); /** @copydoc Calendar::Calendar(const QString &) */ explicit MemoryCalendar(const QByteArray &timeZoneId); /** @copydoc Calendar::~Calendar() */ ~MemoryCalendar() override; /** Clears out the current calendar, freeing all used memory etc. etc. */ void close() override; /** @copydoc Calendar::doSetTimeZone() */ void doSetTimeZone(const QTimeZone &timeZone) override; /** @copydoc Calendar::deleteIncidence() */ bool deleteIncidence(const Incidence::Ptr &incidence) override; /** @copydoc Calendar::deleteIncidenceInstances */ bool deleteIncidenceInstances(const Incidence::Ptr &incidence) override; /** @copydoc Calendar::addIncidence() */ bool addIncidence(const Incidence::Ptr &incidence) override; // Event Specific Methods // /** @copydoc Calendar::addEvent() */ bool addEvent(const Event::Ptr &event) override; /** @copydoc Calendar::deleteEvent() */ bool deleteEvent(const Event::Ptr &event) override; /** @copydoc Calendar::deleteEventInstances() */ bool deleteEventInstances(const Event::Ptr &event) override; /** @copydoc Calendar::rawEvents(EventSortField, SortDirection)const */ Q_REQUIRED_RESULT Event::List rawEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawEvents(const QDate &, const QDate &, const QTimeZone &, bool)const */ Q_REQUIRED_RESULT Event::List rawEvents(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const override; /** Returns an unfiltered list of all Events which occur on the given date. @param date request unfiltered Event list for this QDate only. @param timeZone time zone to interpret @p date, or the calendar's default time zone if none is specified @param sortField specifies the EventSortField. @param sortDirection specifies the SortDirection. @return the list of unfiltered Events occurring on the specified QDate. */ Q_REQUIRED_RESULT Event::List rawEventsForDate(const QDate &date, const QTimeZone &timeZone = {}, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawEventsForDate(const QDateTime &)const */ Q_REQUIRED_RESULT Event::List rawEventsForDate(const QDateTime &dt) const override; /** * Returns an incidence by identifier. * @see Incidence::instanceIdentifier() * @since 4.11 */ Incidence::Ptr instance(const QString &identifier) const; /** @copydoc Calendar::event() */ Q_REQUIRED_RESULT Event::Ptr event(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedEvent() */ Q_REQUIRED_RESULT Event::Ptr deletedEvent(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedEvents(EventSortField, SortDirection)const */ Q_REQUIRED_RESULT Event::List deletedEvents(EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::eventInstances(const Incidence::Ptr &, EventSortField, SortDirection)const */ Q_REQUIRED_RESULT Event::List eventInstances(const Incidence::Ptr &event, EventSortField sortField = EventSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; // To-do Specific Methods // /** @copydoc Calendar::addTodo() */ bool addTodo(const Todo::Ptr &todo) override; /** @copydoc Calendar::deleteTodo() */ bool deleteTodo(const Todo::Ptr &todo) override; /** @copydoc Calendar::deleteTodoInstances() */ bool deleteTodoInstances(const Todo::Ptr &todo) override; /** @copydoc Calendar::rawTodos(TodoSortField, SortDirection)const */ Q_REQUIRED_RESULT Todo::List rawTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawTodos(const QDate &, const QDate &, const QTimeZone &, bool)const */ Q_REQUIRED_RESULT Todo::List rawTodos(const QDate &start, const QDate &end, const QTimeZone &timeZone = {}, bool inclusive = false) const override; /** @copydoc Calendar::rawTodosForDate() */ Q_REQUIRED_RESULT Todo::List rawTodosForDate(const QDate &date) const override; /** @copydoc Calendar::todo() */ Q_REQUIRED_RESULT Todo::Ptr todo(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedTodo() */ Q_REQUIRED_RESULT Todo::Ptr deletedTodo(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedTodos(TodoSortField, SortDirection)const */ Q_REQUIRED_RESULT Todo::List deletedTodos(TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::todoInstances(const Incidence::Ptr &, TodoSortField, SortDirection)const */ Q_REQUIRED_RESULT Todo::List todoInstances(const Incidence::Ptr &todo, TodoSortField sortField = TodoSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; // Journal Specific Methods // /** @copydoc Calendar::addJournal() */ bool addJournal(const Journal::Ptr &journal) override; /** @copydoc Calendar::deleteJournal() */ bool deleteJournal(const Journal::Ptr &journal) override; /** @copydoc Calendar::deleteJournalInstances() */ bool deleteJournalInstances(const Journal::Ptr &journal) override; /** @copydoc Calendar::rawJournals() */ Q_REQUIRED_RESULT Journal::List rawJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::rawJournalsForDate() */ Q_REQUIRED_RESULT Journal::List rawJournalsForDate(const QDate &date) const override; /** @copydoc Calendar::journal() */ Journal::Ptr journal(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedJournal() */ Journal::Ptr deletedJournal(const QString &uid, const QDateTime &recurrenceId = {}) const override; /** @copydoc Calendar::deletedJournals(JournalSortField, SortDirection)const */ Q_REQUIRED_RESULT Journal::List deletedJournals(JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; /** @copydoc Calendar::journalInstances(const Incidence::Ptr &, JournalSortField, SortDirection)const */ Q_REQUIRED_RESULT Journal::List journalInstances(const Incidence::Ptr &journal, JournalSortField sortField = JournalSortUnsorted, SortDirection sortDirection = SortDirectionAscending) const override; // Alarm Specific Methods // /** @copydoc Calendar::alarms() */ Q_REQUIRED_RESULT Alarm::List alarms(const QDateTime &from, const QDateTime &to, bool excludeBlockedAlarms = false) const override; /** Return a list of Alarms that occur before the specified timestamp. @param to is the ending timestamp. @return the list of Alarms occurring before the specified QDateTime. */ Q_REQUIRED_RESULT Alarm::List alarmsTo(const QDateTime &to) const; // TODO KF6 remove, already defined in Calendar /** Return true if the memory calendar is updating the lastModified field of incidence owned by the calendar on any incidence change. @since 5.80 */ bool updateLastModifiedOnChange() const; /** Govern if the memory calendar is changing the lastModified field of incidence it owns, on incidence updates. @param update, when true, the lastModified field of an incidence owned by the calendar is set to the current date time on any change of the incidence. @since 5.80 */ void setUpdateLastModifiedOnChange(bool update); /** @copydoc Calendar::incidenceUpdate(const QString &,const QDateTime &) */ void incidenceUpdate(const QString &uid, const QDateTime &recurrenceId) override; /** @copydoc Calendar::incidenceUpdated(const QString &,const QDateTime &) */ void incidenceUpdated(const QString &uid, const QDateTime &recurrenceId) override; using QObject::event; // prevent warning about hidden virtual method protected: /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(int id, void *data) override; private: //@cond PRIVATE class Private; Private *const d; //@endcond Q_DISABLE_COPY(MemoryCalendar) }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/occurrenceiterator.cpp000066400000000000000000000173511523260663500305370ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2013 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the OccurrenceIterator class. @brief This class provides an iterator to iterate over all occurrences of incidences. @author Christian Mollekopf \ */ #include "occurrenceiterator.h" #include "calendar.h" #include "calfilter.h" #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::OccurrenceIterator::Private { public: Private(OccurrenceIterator *qq) : q(qq) , occurrenceIt(occurrenceList) { } OccurrenceIterator *q; QDateTime start; QDateTime end; struct Occurrence { Occurrence() { } Occurrence(const Incidence::Ptr &i, const QDateTime &recurrenceId, const QDateTime &startDate) : incidence(i) , recurrenceId(recurrenceId) , startDate(startDate) { } Incidence::Ptr incidence; QDateTime recurrenceId; QDateTime startDate; }; QList occurrenceList; QListIterator occurrenceIt; Occurrence current; /* * KCalendarCore::CalFilter can't handle individual occurrences. * When filtering completed to-dos, the CalFilter doesn't hide * them if it's a recurring to-do. */ bool occurrenceIsHidden(const Calendar &calendar, const Incidence::Ptr &inc, const QDateTime &occurrenceDate) { if ((inc->type() == Incidence::TypeTodo) && calendar.filter() && (calendar.filter()->criteria() & KCalendarCore::CalFilter::HideCompletedTodos)) { if (inc->recurs()) { const Todo::Ptr todo = inc.staticCast(); if (todo && (occurrenceDate < todo->dtDue())) { return true; } } else if (inc->hasRecurrenceId()) { const Todo::Ptr mainTodo = calendar.todo(inc->uid()); if (mainTodo && mainTodo->isCompleted()) { return true; } } } return false; } void setupIterator(const Calendar &calendar, const Incidence::List &incidences) { for (const Incidence::Ptr &inc : qAsConst(incidences)) { if (inc->hasRecurrenceId()) { continue; } if (inc->recurs()) { QHash recurrenceIds; QDateTime incidenceRecStart = inc->dateTime(Incidence::RoleRecurrenceStart); // const bool isAllDay = inc->allDay(); const auto lstInstances = calendar.instances(inc); for (const Incidence::Ptr &exception : lstInstances) { if (incidenceRecStart.isValid()) { recurrenceIds.insert(exception->recurrenceId().toTimeZone(incidenceRecStart.timeZone()), exception); } } const auto occurrences = inc->recurrence()->timesInInterval(start, end); Incidence::Ptr incidence(inc), lastInc(inc); qint64 offset(0), lastOffset(0); QDateTime occurrenceStartDate; for (const auto &recurrenceId : qAsConst(occurrences)) { occurrenceStartDate = recurrenceId; bool resetIncidence = false; if (recurrenceIds.contains(recurrenceId)) { // TODO: exclude exceptions where the start/end is not within // (so the occurrence of the recurrence is omitted, but no exception is added) if (recurrenceIds.value(recurrenceId)->status() == Incidence::StatusCanceled) { continue; } incidence = recurrenceIds.value(recurrenceId); occurrenceStartDate = incidence->dtStart(); resetIncidence = !incidence->thisAndFuture(); offset = incidence->recurrenceId().secsTo(incidence->dtStart()); if (incidence->thisAndFuture()) { lastInc = incidence; lastOffset = offset; } } else if (inc != incidence) { // thisAndFuture exception is active occurrenceStartDate = occurrenceStartDate.addSecs(offset); } if (!occurrenceIsHidden(calendar, incidence, occurrenceStartDate)) { occurrenceList << Private::Occurrence(incidence, recurrenceId, occurrenceStartDate); } if (resetIncidence) { incidence = lastInc; offset = lastOffset; } } } else { occurrenceList << Private::Occurrence(inc, {}, inc->dtStart()); } } occurrenceIt = QListIterator(occurrenceList); } }; //@endcond /** * Right now there is little point in the iterator, but: * With an iterator it should be possible to solve this more memory efficiently * and with immediate results at the beginning of the selected timeframe. * Either all events are iterated simoulatneously, resulting in occurrences * of all events in parallel in the correct time-order, or incidence after * incidence, which would be even more efficient. * * By making this class a friend of calendar, we could also use the internally * available data structures. */ OccurrenceIterator::OccurrenceIterator(const Calendar &calendar, const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::OccurrenceIterator::Private(this)) { d->start = start; d->end = end; Event::List events = calendar.rawEvents(start.date(), end.date(), start.timeZone()); if (calendar.filter()) { calendar.filter()->apply(&events); } Todo::List todos = calendar.rawTodos(start.date(), end.date(), start.timeZone()); if (calendar.filter()) { calendar.filter()->apply(&todos); } Journal::List journals; const Journal::List allJournals = calendar.rawJournals(); for (const KCalendarCore::Journal::Ptr &journal : allJournals) { const QDate journalStart = journal->dtStart().toTimeZone(start.timeZone()).date(); if (journal->dtStart().isValid() && journalStart >= start.date() && journalStart <= end.date()) { journals << journal; } } if (calendar.filter()) { calendar.filter()->apply(&journals); } const Incidence::List incidences = KCalendarCore::Calendar::mergeIncidenceList(events, todos, journals); d->setupIterator(calendar, incidences); } OccurrenceIterator::OccurrenceIterator(const Calendar &calendar, const Incidence::Ptr &incidence, const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::OccurrenceIterator::Private(this)) { Q_ASSERT(incidence); d->start = start; d->end = end; d->setupIterator(calendar, Incidence::List() << incidence); } OccurrenceIterator::~OccurrenceIterator() { } bool OccurrenceIterator::hasNext() const { return d->occurrenceIt.hasNext(); } void OccurrenceIterator::next() { d->current = d->occurrenceIt.next(); } Incidence::Ptr OccurrenceIterator::incidence() const { return d->current.incidence; } QDateTime OccurrenceIterator::occurrenceStartDate() const { return d->current.startDate; } QDateTime OccurrenceIterator::recurrenceId() const { return d->current.recurrenceId; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/occurrenceiterator.h000066400000000000000000000044541523260663500302040ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2013 Christian Mollekopf SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the OccurrenceIterator class. @author Christian Mollekopf \ */ #ifndef KCALCORE_OCCURRENCEITERATOR_H #define KCALCORE_OCCURRENCEITERATOR_H #include "incidence.h" namespace KCalendarCore { class Calendar; /** * Iterate over calendar items in a calendar. * * The iterator takes recurrences and exceptions to recurrences into account * * The iterator does not iterate the occurrences of all incidences chronologically. * @since 4.11 */ class Q_CORE_EXPORT OccurrenceIterator { public: /** * Creates iterator that iterates over all occurrences of all incidences * between @param start and @param end (inclusive) */ explicit OccurrenceIterator(const Calendar &calendar, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime()); /** * Creates iterator that iterates over all occurrences * of @param incidence between @param start and @param end (inclusive) */ OccurrenceIterator(const Calendar &calendar, const KCalendarCore::Incidence::Ptr &incidence, const QDateTime &start = QDateTime(), const QDateTime &end = QDateTime()); ~OccurrenceIterator(); bool hasNext() const; /** * Advance iterator to the next occurrence. */ void next(); /** * Returns either main incidence or exception, depending on occurrence. */ Incidence::Ptr incidence() const; /** * Returns the start date of the occurrence * * This is either the occurrence date, or the start date of an exception * which overrides that occurrence. */ QDateTime occurrenceStartDate() const; /** * Returns the recurrence Id. * * This is the date where the occurrence starts without exceptions, * this id is used to identify one exact occurrence. */ QDateTime recurrenceId() const; private: Q_DISABLE_COPY(OccurrenceIterator) //@cond PRIVATE class Private; QScopedPointer d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/period.cpp000066400000000000000000000075411523260663500261170ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2007 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Period class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #include "period.h" #include "utils_p.h" #include #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Period::Private { public: Private() : mHasDuration(false) , mDailyDuration(false) { } Private(const QDateTime &start, const QDateTime &end, bool hasDuration) : mStart(start) , mEnd(end) , mHasDuration(hasDuration) , mDailyDuration(false) { } QDateTime mStart; // period starting date/time QDateTime mEnd; // period ending date/time bool mHasDuration = false; // does period have a duration? bool mDailyDuration = false; // duration is defined as number of days, not seconds }; //@endcond Period::Period() : d(new KCalendarCore::Period::Private()) { } Period::Period(const QDateTime &start, const QDateTime &end) : d(new KCalendarCore::Period::Private(start, end, false)) { } Period::Period(const QDateTime &start, const Duration &duration) : d(new KCalendarCore::Period::Private(start, duration.end(start), true)) { d->mDailyDuration = duration.isDaily(); } Period::Period(const Period &period) : d(new KCalendarCore::Period::Private(*period.d)) { } Period::~Period() { delete d; } bool Period::operator<(const Period &other) const { return d->mStart < other.d->mStart; } bool Period::operator==(const Period &other) const { return ((d->mStart == other.d->mStart) || (!d->mStart.isValid() && !other.d->mStart.isValid())) && ((d->mEnd == other.d->mEnd) || (!d->mEnd.isValid() && !other.d->mEnd.isValid())) && d->mHasDuration == other.d->mHasDuration; } Period &Period::operator=(const Period &other) { // check for self assignment if (&other == this) { return *this; } *d = *other.d; return *this; } QDateTime Period::start() const { return d->mStart; } QDateTime Period::end() const { return d->mEnd; } Duration Period::duration() const { if (d->mHasDuration) { return Duration(d->mStart, d->mEnd, d->mDailyDuration ? Duration::Days : Duration::Seconds); } else { return Duration(d->mStart, d->mEnd); } } Duration Period::duration(Duration::Type type) const { return Duration(d->mStart, d->mEnd, type); } bool Period::hasDuration() const { return d->mHasDuration; } void Period::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { if (oldZone.isValid() && newZone.isValid() && oldZone != newZone) { d->mStart = d->mStart.toTimeZone(oldZone); d->mStart.setTimeZone(newZone); d->mEnd = d->mEnd.toTimeZone(oldZone); d->mEnd.setTimeZone(newZone); } } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Period &period) { serializeQDateTimeAsKDateTime(stream, period.d->mStart); serializeQDateTimeAsKDateTime(stream, period.d->mEnd); return stream << period.d->mDailyDuration << period.d->mHasDuration; } QDataStream &KCalendarCore::operator>>(QDataStream &stream, KCalendarCore::Period &period) { deserializeKDateTimeAsQDateTime(stream, period.d->mStart); deserializeKDateTimeAsQDateTime(stream, period.d->mEnd); stream >> period.d->mDailyDuration >> period.d->mHasDuration; return stream; } uint KCalendarCore::qHash(const KCalendarCore::Period &key) { if (key.hasDuration()) { return qHash(key.duration()); } else { return qHash(key.start().toString() + key.end().toString()); } } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/period.h000066400000000000000000000133611523260663500255610ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Period class. @brief Represents a period of time. @author Cornelius Schumacher \ */ #ifndef KCALCORE_PERIOD_H #define KCALCORE_PERIOD_H #include "duration.h" #include #include #include #include class QTimeZone; namespace KCalendarCore { /** The period can be defined by either a start time and an end time or by a start time and a duration. */ class Q_CORE_EXPORT Period { public: /** List of periods. */ typedef QVector List; /** Constructs a period without a duration. */ Period(); /** Constructs a period from @p start to @p end. @param start the time the period begins. @param end the time the period ends. */ Period(const QDateTime &start, const QDateTime &end); /** Constructs a period from @p start and lasting @p duration. @param start the time when the period starts. @param duration how long the period lasts. */ Period(const QDateTime &start, const Duration &duration); /** Constructs a period by copying another period object @param period the period to copy */ Period(const Period &period); /** Destroys a period. */ ~Period(); /** Returns true if the start of this period is earlier than the start of the @p other one. @param other is the other period to compare. */ bool operator<(const Period &other) const; /** Returns true if the start of this period is later than the start of the @p other one. @param other the other period to compare */ bool operator>(const Period &other) const { return other.operator<(*this); } /** Returns true if this period is equal to the @p other one. Even if their start and end times are the same, two periods are considered not equal if one is defined in terms of a duration and the other in terms of a start and end time. @param other the other period to compare */ bool operator==(const Period &other) const; /** Returns true if this period is not equal to the @p other one. @param other the other period to compare @see operator==() */ bool operator!=(const Period &other) const { return !operator==(other); } /** Sets this period equal to the @p other one. @param other is the other period to compare. */ Period &operator=(const Period &other); /** Returns when this period starts. */ Q_REQUIRED_RESULT QDateTime start() const; /** Returns when this period ends. */ Q_REQUIRED_RESULT QDateTime end() const; /** Returns the duration of the period. If the period is defined in terms of a start and end time, the duration is computed from these. In this case, if the time of day in @p start and @p end is equal, and their time specifications (i.e. time zone etc.) are the same, the duration will be set in terms of days. Otherwise, the duration will be set in terms of seconds. If the period is defined in terms of a duration, that duration is returned unchanged. */ Q_REQUIRED_RESULT Duration duration() const; /** Returns the duration of the period. If the period is defined in terms of a start and end time, the duration is first computed from these. If @p type is Days, and the duration is not an exact number of days, the duration will be rounded down to the nearest whole number of days. @param type the unit of time to use (seconds or days) */ Q_REQUIRED_RESULT Duration duration(Duration::Type type) const; /** Returns true if this period has a set duration, false if it just has a start and an end. */ Q_REQUIRED_RESULT bool hasDuration() const; /** Shift the times of the period so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual period time zone. For example, shifting a period whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the period start) to 14:00 Paris time. @param oldZone the time zone which provides the clock times @param newZone the new time zone */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Period &period); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Period &period); }; /** Write @p period to the datastream @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Period &period); /** Read a Period object into @p period from @p stream, in binary format. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Period &period); /** Return a hash value for a Period argument. @param key is a Period. */ Q_CORE_EXPORT uint qHash(const KCalendarCore::Period &key); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_METATYPE(KCalendarCore::Period) Q_DECLARE_TYPEINFO(KCalendarCore::Period, Q_MOVABLE_TYPE); //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/person.cpp000066400000000000000000000246431523260663500261450ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2010 Casey Link SPDX-FileCopyrightText: 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Person class. @brief Represents a person, by name and email address. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #include "person.h" #include "person_p.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Person::Private : public QSharedData { public: QString mName; // person name QString mEmail; // person email address }; //@endcond Person::Person() : d(new KCalendarCore::Person::Private) { } Person::Person(const QString &name, const QString &email) : d(new KCalendarCore::Person::Private) { d->mName = name; d->mEmail = email; } Person::Person(const Person &person) : d(person.d) { } Person::~Person() = default; bool KCalendarCore::Person::operator==(const Person &person) const { return d->mName == person.d->mName && d->mEmail == person.d->mEmail; } bool KCalendarCore::Person::operator!=(const Person &person) const { return !(*this == person); } Person &KCalendarCore::Person::operator=(const Person &person) { // check for self assignment if (&person == this) { return *this; } d = person.d; return *this; } QString KCalendarCore::fullNameHelper(const QString &name, const QString &email) { if (name.isEmpty()) { return email; } if (email.isEmpty()) { return name; } // Taken from KContacts::Addressee::fullEmail QString fullName = name; const QRegularExpression needQuotes(QStringLiteral("[^ 0-9A-Za-z\\x{0080}-\\x{FFFF}]")); bool weNeedToQuote = name.indexOf(needQuotes) != -1; if (weNeedToQuote) { if (fullName[0] != QLatin1Char('"')) { fullName.prepend(QLatin1Char('"')); } if (fullName[fullName.length() - 1] != QLatin1Char('"')) { fullName.append(QLatin1Char('"')); } } return fullName + QStringLiteral(" <") + email + QLatin1Char('>'); } QString Person::fullName() const { return fullNameHelper(d->mName, d->mEmail); } QString Person::name() const { return d->mName; } QString Person::email() const { return d->mEmail; } bool Person::isEmpty() const { return d->mEmail.isEmpty() && d->mName.isEmpty(); } void Person::setName(const QString &name) { d->mName = name; } void Person::setEmail(const QString &email) { if (email.startsWith(QLatin1String("mailto:"), Qt::CaseInsensitive)) { d->mEmail = email.mid(7); } else { d->mEmail = email; } } bool Person::isValidEmail(const QString &email) { const int pos = email.lastIndexOf(QLatin1Char('@')); return (pos > 0) && (email.lastIndexOf(QLatin1Char('.')) > pos) && ((email.length() - pos) > 4); } uint KCalendarCore::qHash(const KCalendarCore::Person &key) { return qHash(key.fullName()); } QDataStream &KCalendarCore::operator<<(QDataStream &stream, const KCalendarCore::Person &person) { return stream << person.d->mName << person.d->mEmail << (int)(0); } QDataStream &KCalendarCore::operator>>(QDataStream &stream, Person &person) { int count; stream >> person.d->mName >> person.d->mEmail >> count; return stream; } // The following function was lifted directly from KPIMUtils // in order to eliminate the dependency on that library. // Any changes made here should be ported there, and vice versa. static bool extractEmailAddressAndName(const QString &aStr, QString &mail, QString &name) { name.clear(); mail.clear(); const int len = aStr.length(); const char cQuotes = '"'; bool bInComment = false; bool bInQuotesOutsideOfEmail = false; int i = 0, iAd = 0, iMailStart = 0, iMailEnd = 0; QChar c; unsigned int commentstack = 0; // Find the '@' of the email address // skipping all '@' inside "(...)" comments: while (i < len) { c = aStr[i]; if (QLatin1Char('(') == c) { commentstack++; } if (QLatin1Char(')') == c) { commentstack--; } bInComment = commentstack != 0; if (QLatin1Char('"') == c && !bInComment) { bInQuotesOutsideOfEmail = !bInQuotesOutsideOfEmail; } if (!bInComment && !bInQuotesOutsideOfEmail) { if (QLatin1Char('@') == c) { iAd = i; break; // found it } } ++i; } if (!iAd) { // We suppose the user is typing the string manually and just // has not finished typing the mail address part. // So we take everything that's left of the '<' as name and the rest as mail for (i = 0; len > i; ++i) { c = aStr[i]; if (QLatin1Char('<') != c) { name.append(c); } else { break; } } mail = aStr.mid(i + 1); if (mail.endsWith(QLatin1Char('>'))) { mail.chop(1); } } else { // Loop backwards until we find the start of the string // or a ',' that is outside of a comment // and outside of quoted text before the leading '<'. bInComment = false; bInQuotesOutsideOfEmail = false; for (i = iAd - 1; 0 <= i; --i) { c = aStr[i]; if (bInComment) { if (QLatin1Char('(') == c) { if (!name.isEmpty()) { name.prepend(QLatin1Char(' ')); } bInComment = false; } else { name.prepend(c); // all comment stuff is part of the name } } else if (bInQuotesOutsideOfEmail) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = false; } else if (c != QLatin1Char('\\')) { name.prepend(c); } } else { // found the start of this addressee ? if (QLatin1Char(',') == c) { break; } // stuff is before the leading '<' ? if (iMailStart) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = true; // end of quoted text found } else { name.prepend(c); } } else { switch (c.toLatin1()) { case '<': iMailStart = i; break; case ')': if (!name.isEmpty()) { name.prepend(QLatin1Char(' ')); } bInComment = true; break; default: if (QLatin1Char(' ') != c) { mail.prepend(c); } } } } } name = name.simplified(); mail = mail.simplified(); if (mail.isEmpty()) { return false; } mail.append(QLatin1Char('@')); // Loop forward until we find the end of the string // or a ',' that is outside of a comment // and outside of quoted text behind the trailing '>'. bInComment = false; bInQuotesOutsideOfEmail = false; int parenthesesNesting = 0; for (i = iAd + 1; len > i; ++i) { c = aStr[i]; if (bInComment) { if (QLatin1Char(')') == c) { if (--parenthesesNesting == 0) { bInComment = false; if (!name.isEmpty()) { name.append(QLatin1Char(' ')); } } else { // nested ")", add it name.append(QLatin1Char(')')); // name can't be empty here } } else { if (QLatin1Char('(') == c) { // nested "(" ++parenthesesNesting; } name.append(c); // all comment stuff is part of the name } } else if (bInQuotesOutsideOfEmail) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = false; } else if (c != QLatin1Char('\\')) { name.append(c); } } else { // found the end of this addressee ? if (QLatin1Char(',') == c) { break; } // stuff is behind the trailing '>' ? if (iMailEnd) { if (QLatin1Char(cQuotes) == c) { bInQuotesOutsideOfEmail = true; // start of quoted text found } else { name.append(c); } } else { switch (c.toLatin1()) { case '>': iMailEnd = i; break; case '(': if (!name.isEmpty()) { name.append(QLatin1Char(' ')); } if (++parenthesesNesting > 0) { bInComment = true; } break; default: if (QLatin1Char(' ') != c) { mail.append(c); } } } } } } name = name.simplified(); mail = mail.simplified(); return !(name.isEmpty() || mail.isEmpty()); } Person Person::fromFullName(const QString &fullName) { QString email, name; extractEmailAddressAndName(fullName, email, name); return Person(name, email); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/person.h000066400000000000000000000115521523260663500256050ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Person class. @author Cornelius Schumacher \ @author Reinhold Kainhofer \ */ #ifndef KCALCORE_PERSON_H #define KCALCORE_PERSON_H #include #include #include #include namespace KCalendarCore { /** @brief Represents a person, by name and email address. This class represents a person, with a name and an email address. It supports the "FirstName LastName\ " format. */ class Q_CORE_EXPORT Person { Q_GADGET Q_PROPERTY(bool isEmpty READ isEmpty) Q_PROPERTY(QString fullName READ fullName) Q_PROPERTY(QString name READ name WRITE setName) Q_PROPERTY(QString email READ email WRITE setEmail) public: /** List of persons. */ typedef QVector List; /** Constructs a blank person. */ Person(); /** Constructs a person with name and email address taken from @p fullName. @param fullName is the name and email of the person in the form "FirstName LastName \". @return A Person object. */ static Person fromFullName(const QString &fullName); /** Constructs a person with the name @p name and email address @p email. @param name is the name of this person. @param email is the email address of this person. */ Person(const QString &name, const QString &email); /** Constructs a person as a copy of another person object. @param person is the person to copy. */ Person(const Person &person); /** Destroys a person. */ virtual ~Person(); /** Returns true if the person name and email address are empty. */ Q_REQUIRED_RESULT bool isEmpty() const; /** Returns the full name of this person. @return A QString containing the person's full name in the form "FirstName LastName \". */ Q_REQUIRED_RESULT QString fullName() const; /** Sets the name of the person to @p name. @param name is the name of this person. @see name() */ void setName(const QString &name); /** Returns the person name string. @see setName() */ Q_REQUIRED_RESULT QString name() const; /** Sets the email address for this person to @p email. @param email is the email address for this person. @see email() */ void setEmail(const QString &email); /** Returns the email address for this person. @return A QString containing the person's email address. @see setEmail() */ Q_REQUIRED_RESULT QString email() const; /** Returns true if person's email address is valid. Simple email validity check, test that there: * is at least one @ * is at least one character in the local part * is at least one dot in the domain part * is at least four characters in the domain (assuming that no-one has an address at the tld, that the tld is at least 2 chars) @param email is the email address to validate */ Q_REQUIRED_RESULT static bool isValidEmail(const QString &email); /** Compares this with @p person for equality. @param person is the person to compare. */ bool operator==(const Person &person) const; /** Compares this with @p person for non-equality. @param person is the person to compare. */ bool operator!=(const Person &person) const; /** Sets this person equal to @p person. @param person is the person to copy. */ Person &operator=(const Person &person); private: //@cond PRIVATE class Private; QSharedDataPointer d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &s, const KCalendarCore::Person &person); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &s, KCalendarCore::Person &person); }; /** Serializes the @p person object into the @p stream. */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &stream, const KCalendarCore::Person &person); /** Initializes the @p person object from the @p stream. */ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &stream, KCalendarCore::Person &person); /** Return a hash value for a Person argument. @param key is a Person. */ Q_CORE_EXPORT uint qHash(const KCalendarCore::Person &key); } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Person, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Person) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/person_p.h000066400000000000000000000005221523260663500261170ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2019 Volker Krause SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_PERSON_P_H #define KCALCORE_PERSON_P_H class QString; namespace KCalendarCore { QString fullNameHelper(const QString &name, const QString &email); } #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/recurrence.cpp000066400000000000000000001175631523260663500270000ustar00rootroot00000000000000/* This file is part of kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-FileCopyrightText: 2002, 2006 David Jarvie SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #include "recurrence.h" #include "recurrencehelper_p.h" #include "utils_p.h" #include #include #include #include #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Recurrence::Private { public: Private() : mCachedType(rMax) , mAllDay(false) , mRecurReadOnly(false) { } Private(const Private &p) : mRDateTimes(p.mRDateTimes) , mRDates(p.mRDates) , mExDateTimes(p.mExDateTimes) , mExDates(p.mExDates) , mStartDateTime(p.mStartDateTime) , mCachedType(p.mCachedType) , mAllDay(p.mAllDay) , mRecurReadOnly(p.mRecurReadOnly) { } bool operator==(const Private &p) const; RecurrenceRule::List mExRules; RecurrenceRule::List mRRules; QList mRDateTimes; DateList mRDates; QList mExDateTimes; DateList mExDates; QDateTime mStartDateTime; // date/time of first recurrence QList mObservers; // Cache the type of the recurrence with the old system (e.g. MonthlyPos) //使用旧系统缓存é‡�å¤�å�‘生的类型 mutable ushort mCachedType; bool mAllDay = false; // the recurrence has no time, just a date bool mRecurReadOnly = false; }; bool Recurrence::Private::operator==(const Recurrence::Private &p) const { // qDebug() << mStartDateTime << p.mStartDateTime; if ((mStartDateTime != p.mStartDateTime && (mStartDateTime.isValid() || p.mStartDateTime.isValid())) || mAllDay != p.mAllDay || mRecurReadOnly != p.mRecurReadOnly || mExDates != p.mExDates || mExDateTimes != p.mExDateTimes || mRDates != p.mRDates || mRDateTimes != p.mRDateTimes) { return false; } // Compare the rrules, exrules! Assume they have the same order... This only // matters if we have more than one rule (which shouldn't be the default anyway) int i; int end = mRRules.count(); if (end != p.mRRules.count()) { return false; } for (i = 0; i < end; ++i) { if (*mRRules[i] != *p.mRRules[i]) { return false; } } end = mExRules.count(); if (end != p.mExRules.count()) { return false; } for (i = 0; i < end; ++i) { if (*mExRules[i] != *p.mExRules[i]) { return false; } } return true; } //@endcond Recurrence::Recurrence() : d(new KCalendarCore::Recurrence::Private()) { } Recurrence::Recurrence(const Recurrence &r) : RecurrenceRule::RuleObserver() , d(new KCalendarCore::Recurrence::Private(*r.d)) { int i, end; d->mRRules.reserve(r.d->mRRules.count()); for (i = 0, end = r.d->mRRules.count(); i < end; ++i) { RecurrenceRule *rule = new RecurrenceRule(*r.d->mRRules[i]); d->mRRules.append(rule); rule->addObserver(this); } d->mExRules.reserve(r.d->mExRules.count()); for (i = 0, end = r.d->mExRules.count(); i < end; ++i) { RecurrenceRule *rule = new RecurrenceRule(*r.d->mExRules[i]); d->mExRules.append(rule); rule->addObserver(this); } } Recurrence::~Recurrence() { qDeleteAll(d->mExRules); qDeleteAll(d->mRRules); delete d; } bool Recurrence::operator==(const Recurrence &recurrence) const { return *d == *recurrence.d; } void Recurrence::addObserver(RecurrenceObserver *observer) { if (!d->mObservers.contains(observer)) { d->mObservers.append(observer); } } void Recurrence::removeObserver(RecurrenceObserver *observer) { d->mObservers.removeAll(observer); } QDateTime Recurrence::startDateTime() const { return d->mStartDateTime; } bool Recurrence::allDay() const { return d->mAllDay; } void Recurrence::setAllDay(bool allDay) { if (d->mRecurReadOnly || allDay == d->mAllDay) { return; } d->mAllDay = allDay; for (int i = 0, end = d->mRRules.count(); i < end; ++i) { d->mRRules[i]->setAllDay(allDay); } for (int i = 0, end = d->mExRules.count(); i < end; ++i) { d->mExRules[i]->setAllDay(allDay); } updated(); } RecurrenceRule *Recurrence::defaultRRule(bool create) const { if (d->mRRules.isEmpty()) { if (!create || d->mRecurReadOnly) { return nullptr; } RecurrenceRule *rrule = new RecurrenceRule(); rrule->setStartDt(startDateTime()); const_cast(this)->addRRule(rrule); return rrule; } else { return d->mRRules[0]; } } RecurrenceRule *Recurrence::defaultRRuleConst() const { return d->mRRules.isEmpty() ? nullptr : d->mRRules[0]; } void Recurrence::updated() { // recurrenceType() re-calculates the type if it's rMax d->mCachedType = rMax; for (int i = 0, end = d->mObservers.count(); i < end; ++i) { if (d->mObservers[i]) { d->mObservers[i]->recurrenceUpdated(this); } } } bool Recurrence::recurs() const { return !d->mRRules.isEmpty() || !d->mRDates.isEmpty() || !d->mRDateTimes.isEmpty(); } ushort Recurrence::recurrenceType() const { if (d->mCachedType == rMax) { d->mCachedType = recurrenceType(defaultRRuleConst()); } return d->mCachedType; } ushort Recurrence::recurrenceType(const RecurrenceRule *rrule) { if (!rrule) { return rNone; } RecurrenceRule::PeriodType type = rrule->recurrenceType(); // BYSETPOS, BYWEEKNUMBER and BYSECOND were not supported in old versions if (!rrule->bySetPos().isEmpty() || !rrule->bySeconds().isEmpty() || !rrule->byWeekNumbers().isEmpty()) { return rOther; } // It wasn't possible to set BYMINUTES, BYHOUR etc. by the old code. So if // it's set, it's none of the old types if (!rrule->byMinutes().isEmpty() || !rrule->byHours().isEmpty()) { return rOther; } // Possible combinations were: // BYDAY: with WEEKLY, MONTHLY, YEARLY // BYMONTHDAY: with MONTHLY, YEARLY // BYMONTH: with YEARLY // BYYEARDAY: with YEARLY if ((!rrule->byYearDays().isEmpty() && type != RecurrenceRule::rYearly) || (!rrule->byMonths().isEmpty() && type != RecurrenceRule::rYearly)) { return rOther; } if (!rrule->byDays().isEmpty()) { if (type != RecurrenceRule::rYearly && type != RecurrenceRule::rMonthly && type != RecurrenceRule::rWeekly) { return rOther; } } switch (type) { case RecurrenceRule::rNone: return rNone; case RecurrenceRule::rMinutely: return rMinutely; case RecurrenceRule::rHourly: return rHourly; case RecurrenceRule::rDaily: return rDaily; case RecurrenceRule::rWeekly: return rWeekly; case RecurrenceRule::rMonthly: { if (rrule->byDays().isEmpty()) { return rMonthlyDay; } else if (rrule->byMonthDays().isEmpty()) { return rMonthlyPos; } else { return rOther; // both position and date specified } } case RecurrenceRule::rYearly: { // Possible combinations: // rYearlyMonth: [BYMONTH &] BYMONTHDAY // rYearlyDay: BYYEARDAY // rYearlyPos: [BYMONTH &] BYDAY if (!rrule->byDays().isEmpty()) { // can only by rYearlyPos if (rrule->byMonthDays().isEmpty() && rrule->byYearDays().isEmpty()) { return rYearlyPos; } else { return rOther; } } else if (!rrule->byYearDays().isEmpty()) { // Can only be rYearlyDay if (rrule->byMonths().isEmpty() && rrule->byMonthDays().isEmpty()) { return rYearlyDay; } else { return rOther; } } else { return rYearlyMonth; } } default: return rOther; } } bool Recurrence::recursOn(const QDate &qd, const QTimeZone &timeZone) const { // Don't waste time if date is before the start of the recurrence if (QDateTime(qd, QTime(23, 59, 59), timeZone) < d->mStartDateTime) { return false; } // First handle dates. Exrules override if (std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), qd)) { return false; } int i, end; // For all-day events a matching exrule excludes the whole day // since exclusions take precedence over inclusions, we know it can't occur on that day. if (allDay()) { for (i = 0, end = d->mExRules.count(); i < end; ++i) { if (d->mExRules[i]->recursOn(qd, timeZone)) { return false; } } } if (std::binary_search(d->mRDates.constBegin(), d->mRDates.constEnd(), qd)) { return true; } // Check if it might recur today at all. bool recurs = (startDate() == qd); for (i = 0, end = d->mRDateTimes.count(); i < end && !recurs; ++i) { recurs = (d->mRDateTimes[i].toTimeZone(timeZone).date() == qd); } for (i = 0, end = d->mRRules.count(); i < end && !recurs; ++i) { recurs = d->mRRules[i]->recursOn(qd, timeZone); } // If the event wouldn't recur at all, simply return false, don't check ex* if (!recurs) { return false; } // Check if there are any times for this day excluded, either by exdate or exrule: bool exon = false; for (i = 0, end = d->mExDateTimes.count(); i < end && !exon; ++i) { exon = (d->mExDateTimes[i].toTimeZone(timeZone).date() == qd); } if (!allDay()) { // we have already checked all-day times above for (i = 0, end = d->mExRules.count(); i < end && !exon; ++i) { exon = d->mExRules[i]->recursOn(qd, timeZone); } } if (!exon) { // Simple case, nothing on that day excluded, return the value from before return recurs; } else { // Harder part: I don't think there is any way other than to calculate the // whole list of items for that day. // TODO: consider whether it would be more efficient to call // Rule::recurTimesOn() instead of Rule::recursOn() from the start TimeList timesForDay(recurTimesOn(qd, timeZone)); return !timesForDay.isEmpty(); } } bool Recurrence::recursAt(const QDateTime &dt) const { // Convert to recurrence's time zone for date comparisons, and for more efficient time comparisons const auto dtrecur = dt.toTimeZone(d->mStartDateTime.timeZone()); // if it's excluded anyway, don't bother to check if it recurs at all. if (std::binary_search(d->mExDateTimes.constBegin(), d->mExDateTimes.constEnd(), dtrecur) || std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), dtrecur.date())) { return false; } int i, end; for (i = 0, end = d->mExRules.count(); i < end; ++i) { if (d->mExRules[i]->recursAt(dtrecur)) { return false; } } // Check explicit recurrences, then rrules. if (startDateTime() == dtrecur || std::binary_search(d->mRDateTimes.constBegin(), d->mRDateTimes.constEnd(), dtrecur)) { return true; } for (i = 0, end = d->mRRules.count(); i < end; ++i) { if (d->mRRules[i]->recursAt(dtrecur)) { return true; } } return false; } /** Calculates the cumulative end of the whole recurrence (rdates and rrules). If any rrule is infinite, or the recurrence doesn't have any rrules or rdates, an invalid date is returned. */ QDateTime Recurrence::endDateTime() const { QList dts; dts << startDateTime(); if (!d->mRDates.isEmpty()) { dts << QDateTime(d->mRDates.last(), QTime(0, 0, 0), d->mStartDateTime.timeZone()); } if (!d->mRDateTimes.isEmpty()) { dts << d->mRDateTimes.last(); } for (int i = 0, end = d->mRRules.count(); i < end; ++i) { auto rl = d->mRRules[i]->endDt(); // if any of the rules is infinite, the whole recurrence is if (!rl.isValid()) { return QDateTime(); } dts << rl; } sortAndRemoveDuplicates(dts); return dts.isEmpty() ? QDateTime() : dts.last(); } /** Calculates the cumulative end of the whole recurrence (rdates and rrules). If any rrule is infinite, or the recurrence doesn't have any rrules or rdates, an invalid date is returned. */ QDate Recurrence::endDate() const { QDateTime end(endDateTime()); return end.isValid() ? end.date() : QDate(); } void Recurrence::setEndDate(const QDate &date) { QDateTime dt(date, d->mStartDateTime.time(), d->mStartDateTime.timeZone()); if (allDay()) { dt.setTime(QTime(23, 59, 59)); } setEndDateTime(dt); } void Recurrence::setEndDateTime(const QDateTime &dateTime) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } // If the recurrence rule has a duration, and we're trying to set an invalid end date, // we have to skip setting it to avoid setting the field dirty. // The end date is already invalid since the duration is set and end date/duration // are mutually exclusive. // We can't use inequality check below, because endDt() also returns a valid date // for a duration (it is calculated from the duration). if (rrule->duration() > 0 && !dateTime.isValid()) { return; } if (dateTime != rrule->endDt()) { rrule->setEndDt(dateTime); updated(); } } int Recurrence::duration() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->duration() : 0; } int Recurrence::durationTo(const QDateTime &datetime) const { // Emulate old behavior: This is just an interface to the first rule! RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->durationTo(datetime) : 0; } int Recurrence::durationTo(const QDate &date) const { return durationTo(QDateTime(date, QTime(23, 59, 59), d->mStartDateTime.timeZone())); } void Recurrence::setDuration(int duration) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } if (duration != rrule->duration()) { rrule->setDuration(duration); updated(); } } void Recurrence::shiftTimes(const QTimeZone &oldTz, const QTimeZone &newTz) { if (d->mRecurReadOnly) { return; } d->mStartDateTime = d->mStartDateTime.toTimeZone(oldTz); d->mStartDateTime.setTimeZone(newTz); int i, end; for (i = 0, end = d->mRDateTimes.count(); i < end; ++i) { d->mRDateTimes[i] = d->mRDateTimes[i].toTimeZone(oldTz); d->mRDateTimes[i].setTimeZone(newTz); } for (i = 0, end = d->mExDateTimes.count(); i < end; ++i) { d->mExDateTimes[i] = d->mExDateTimes[i].toTimeZone(oldTz); d->mExDateTimes[i].setTimeZone(newTz); } for (i = 0, end = d->mRRules.count(); i < end; ++i) { d->mRRules[i]->shiftTimes(oldTz, newTz); } for (i = 0, end = d->mExRules.count(); i < end; ++i) { d->mExRules[i]->shiftTimes(oldTz, newTz); } } void Recurrence::unsetRecurs() { if (d->mRecurReadOnly) { return; } qDeleteAll(d->mRRules); d->mRRules.clear(); updated(); } void Recurrence::clear() { if (d->mRecurReadOnly) { return; } qDeleteAll(d->mRRules); d->mRRules.clear(); qDeleteAll(d->mExRules); d->mExRules.clear(); d->mRDates.clear(); d->mRDateTimes.clear(); d->mExDates.clear(); d->mExDateTimes.clear(); d->mCachedType = rMax; updated(); } void Recurrence::setRecurReadOnly(bool readOnly) { d->mRecurReadOnly = readOnly; } bool Recurrence::recurReadOnly() const { return d->mRecurReadOnly; } QDate Recurrence::startDate() const { return d->mStartDateTime.date(); } void Recurrence::setStartDateTime(const QDateTime &start, bool isAllDay) { if (d->mRecurReadOnly) { return; } d->mStartDateTime = start; setAllDay(isAllDay); // set all RRULEs and EXRULEs int i, end; for (i = 0, end = d->mRRules.count(); i < end; ++i) { d->mRRules[i]->setStartDt(start); } for (i = 0, end = d->mExRules.count(); i < end; ++i) { d->mExRules[i]->setStartDt(start); } updated(); } int Recurrence::frequency() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->frequency() : 0; } // Emulate the old behaviour. Make this methods just an interface to the // first rrule void Recurrence::setFrequency(int freq) { if (d->mRecurReadOnly || freq <= 0) { return; } RecurrenceRule *rrule = defaultRRule(true); if (rrule) { rrule->setFrequency(freq); } updated(); } // WEEKLY int Recurrence::weekStart() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->weekStart() : 1; } // Emulate the old behavior QBitArray Recurrence::days() const { QBitArray days(7); days.fill(0); RecurrenceRule *rrule = defaultRRuleConst(); if (rrule) { const QList &bydays = rrule->byDays(); for (int i = 0; i < bydays.size(); ++i) { if (bydays.at(i).pos() == 0) { days.setBit(bydays.at(i).day() - 1); } } } return days; } // MONTHLY // Emulate the old behavior QList Recurrence::monthDays() const { RecurrenceRule *rrule = defaultRRuleConst(); if (rrule) { return rrule->byMonthDays(); } else { return QList(); } } // Emulate the old behavior QList Recurrence::monthPositions() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->byDays() : QList(); } // YEARLY QList Recurrence::yearDays() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->byYearDays() : QList(); } QList Recurrence::yearDates() const { return monthDays(); } QList Recurrence::yearMonths() const { RecurrenceRule *rrule = defaultRRuleConst(); return rrule ? rrule->byMonths() : QList(); } QList Recurrence::yearPositions() const { return monthPositions(); } RecurrenceRule *Recurrence::setNewRecurrenceType(RecurrenceRule::PeriodType type, int freq) { if (d->mRecurReadOnly || freq <= 0) { return nullptr; } // Ignore the call if nothing has change if (defaultRRuleConst() && defaultRRuleConst()->recurrenceType() == type && frequency() == freq) { return nullptr; } qDeleteAll(d->mRRules); d->mRRules.clear(); updated(); RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return nullptr; } rrule->setRecurrenceType(type); rrule->setFrequency(freq); rrule->setDuration(-1); return rrule; } void Recurrence::setMinutely(int _rFreq) { if (setNewRecurrenceType(RecurrenceRule::rMinutely, _rFreq)) { updated(); } } void Recurrence::setHourly(int _rFreq) { if (setNewRecurrenceType(RecurrenceRule::rHourly, _rFreq)) { updated(); } } void Recurrence::setDaily(int _rFreq) { if (setNewRecurrenceType(RecurrenceRule::rDaily, _rFreq)) { updated(); } } void Recurrence::setWeekly(int freq, int weekStart) { RecurrenceRule *rrule = setNewRecurrenceType(RecurrenceRule::rWeekly, freq); if (!rrule) { return; } rrule->setWeekStart(weekStart); updated(); } void Recurrence::setWeekly(int freq, const QBitArray &days, int weekStart) { setWeekly(freq, weekStart); addMonthlyPos(0, days); } void Recurrence::addWeeklyDays(const QBitArray &days) { addMonthlyPos(0, days); } void Recurrence::setMonthly(int freq) { if (setNewRecurrenceType(RecurrenceRule::rMonthly, freq)) { updated(); } } void Recurrence::addMonthlyPos(short pos, const QBitArray &days) { // Allow 53 for yearly! if (d->mRecurReadOnly || pos > 53 || pos < -53) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } bool changed = false; QList positions = rrule->byDays(); for (int i = 0; i < 7; ++i) { if (days.testBit(i)) { RecurrenceRule::WDayPos p(pos, i + 1); if (!positions.contains(p)) { changed = true; positions.append(p); } } } if (changed) { rrule->setByDays(positions); updated(); } } void Recurrence::addMonthlyPos(short pos, ushort day) { // Allow 53 for yearly! if (d->mRecurReadOnly || pos > 53 || pos < -53) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } QList positions = rrule->byDays(); RecurrenceRule::WDayPos p(pos, day); if (!positions.contains(p)) { positions.append(p); setMonthlyPos(positions); } } void Recurrence::setMonthlyPos(const QList &monthlyDays) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } // TODO: sort lists // the position inside the list has no meaning, so sort the list before testing if it changed if (monthlyDays != rrule->byDays()) { rrule->setByDays(monthlyDays); updated(); } } void Recurrence::addMonthlyDate(short day) { if (d->mRecurReadOnly || day > 31 || day < -31) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } QList monthDays = rrule->byMonthDays(); if (!monthDays.contains(day)) { monthDays.append(day); setMonthlyDate(monthDays); } } void Recurrence::setMonthlyDate(const QList &monthlyDays) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(true); if (!rrule) { return; } QList mD(monthlyDays); QList rbD(rrule->byMonthDays()); sortAndRemoveDuplicates(mD); sortAndRemoveDuplicates(rbD); if (mD != rbD) { rrule->setByMonthDays(monthlyDays); updated(); } } void Recurrence::setYearly(int freq) { if (setNewRecurrenceType(RecurrenceRule::rYearly, freq)) { updated(); } } // Daynumber within year void Recurrence::addYearlyDay(int day) { RecurrenceRule *rrule = defaultRRule(false); // It must already exist! if (!rrule) { return; } QList days = rrule->byYearDays(); if (!days.contains(day)) { days << day; setYearlyDay(days); } } void Recurrence::setYearlyDay(const QList &days) { RecurrenceRule *rrule = defaultRRule(false); // It must already exist! if (!rrule) { return; } QList d(days); QList bYD(rrule->byYearDays()); sortAndRemoveDuplicates(d); sortAndRemoveDuplicates(bYD); if (d != bYD) { rrule->setByYearDays(days); updated(); } } // day part of date within year void Recurrence::addYearlyDate(int day) { addMonthlyDate(day); } void Recurrence::setYearlyDate(const QList &dates) { setMonthlyDate(dates); } // day part of date within year, given as position (n-th weekday) void Recurrence::addYearlyPos(short pos, const QBitArray &days) { addMonthlyPos(pos, days); } void Recurrence::setYearlyPos(const QList &days) { setMonthlyPos(days); } // month part of date within year void Recurrence::addYearlyMonth(short month) { if (d->mRecurReadOnly || month < 1 || month > 12) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } QList months = rrule->byMonths(); if (!months.contains(month)) { months << month; setYearlyMonth(months); } } void Recurrence::setYearlyMonth(const QList &months) { if (d->mRecurReadOnly) { return; } RecurrenceRule *rrule = defaultRRule(false); if (!rrule) { return; } QList m(months); QList bM(rrule->byMonths()); sortAndRemoveDuplicates(m); sortAndRemoveDuplicates(bM); if (m != bM) { rrule->setByMonths(months); updated(); } } TimeList Recurrence::recurTimesOn(const QDate &date, const QTimeZone &timeZone) const { // qDebug() << "recurTimesOn(" << date << ")"; int i, end; TimeList times; // The whole day is excepted if (std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), date)) { return times; } // EXRULE takes precedence over RDATE entries, so for all-day events, // a matching excule also excludes the whole day automatically if (allDay()) { for (i = 0, end = d->mExRules.count(); i < end; ++i) { if (d->mExRules[i]->recursOn(date, timeZone)) { return times; } } } QDateTime dt = startDateTime().toTimeZone(timeZone); if (dt.date() == date) { times << dt.time(); } bool foundDate = false; for (i = 0, end = d->mRDateTimes.count(); i < end; ++i) { dt = d->mRDateTimes[i].toTimeZone(timeZone); if (dt.date() == date) { times << dt.time(); foundDate = true; } else if (foundDate) { break; // <= Assume that the rdatetime list is sorted } } for (i = 0, end = d->mRRules.count(); i < end; ++i) { times += d->mRRules[i]->recurTimesOn(date, timeZone); } sortAndRemoveDuplicates(times); foundDate = false; TimeList extimes; for (i = 0, end = d->mExDateTimes.count(); i < end; ++i) { dt = d->mExDateTimes[i].toTimeZone(timeZone); if (dt.date() == date) { extimes << dt.time(); foundDate = true; } else if (foundDate) { break; } } if (!allDay()) { // we have already checked all-day times above for (i = 0, end = d->mExRules.count(); i < end; ++i) { extimes += d->mExRules[i]->recurTimesOn(date, timeZone); } } sortAndRemoveDuplicates(extimes); inplaceSetDifference(times, extimes); return times; } QList Recurrence::timesInInterval(const QDateTime &start, const QDateTime &end) const { int i, count; QList times; for (i = 0, count = d->mRRules.count(); i < count; ++i) { times += d->mRRules[i]->timesInInterval(start, end); } // add rdatetimes that fit in the interval for (i = 0, count = d->mRDateTimes.count(); i < count; ++i) { if (d->mRDateTimes[i] >= start && d->mRDateTimes[i] <= end) { times += d->mRDateTimes[i]; } } // add rdates that fit in the interval QDateTime kdt = d->mStartDateTime; for (i = 0, count = d->mRDates.count(); i < count; ++i) { kdt.setDate(d->mRDates[i]); if (kdt >= start && kdt <= end) { times += kdt; } } // Recurrence::timesInInterval(...) doesn't explicitly add mStartDateTime to the list // of times to be returned. It calls mRRules[i]->timesInInterval(...) which include // mStartDateTime. // So, If we have rdates/rdatetimes but don't have any rrule we must explicitly // add mStartDateTime to the list, otherwise we won't see the first occurrence. if ((!d->mRDates.isEmpty() || !d->mRDateTimes.isEmpty()) && d->mRRules.isEmpty() && start <= d->mStartDateTime && end >= d->mStartDateTime) { times += d->mStartDateTime; } sortAndRemoveDuplicates(times); // Remove excluded times int idt = 0; int enddt = times.count(); for (i = 0, count = d->mExDates.count(); i < count && idt < enddt; ++i) { while (idt < enddt && times[idt].date() < d->mExDates[i]) { ++idt; } while (idt < enddt && times[idt].date() == d->mExDates[i]) { times.removeAt(idt); --enddt; } } QList extimes; for (i = 0, count = d->mExRules.count(); i < count; ++i) { extimes += d->mExRules[i]->timesInInterval(start, end); } extimes += d->mExDateTimes; sortAndRemoveDuplicates(extimes); inplaceSetDifference(times, extimes); return times; } QDateTime Recurrence::getNextDateTime(const QDateTime &preDateTime) const { QDateTime nextDT = preDateTime; // prevent infinite loops, e.g. when an exrule extinguishes an rrule (e.g. // the exrule is identical to the rrule). If an occurrence is found, break // out of the loop by returning that QDateTime // TODO_Recurrence: Is a loop counter of 1000 really okay? I mean for secondly // recurrence, an exdate might exclude more than 1000 intervals! int loop = 0; while (loop < 1000) { // Outline of the algo: // 1) Find the next date/time after preDateTime when the event could recur // 1.0) Add the start date if it's after preDateTime // 1.1) Use the next occurrence from the explicit RDATE lists // 1.2) Add the next recurrence for each of the RRULEs // 2) Take the earliest recurrence of these = QDateTime nextDT // 3) If that date/time is not excluded, either explicitly by an EXDATE or // by an EXRULE, return nextDT as the next date/time of the recurrence // 4) If it's excluded, start all at 1), but starting at nextDT (instead // of preDateTime). Loop at most 1000 times. ++loop; // First, get the next recurrence from the RDate lists QList dates; if (nextDT < startDateTime()) { dates << startDateTime(); } // Assume that the rdatetime list is sorted const auto it = std::upper_bound(d->mRDateTimes.constBegin(), d->mRDateTimes.constEnd(), nextDT); if (it != d->mRDateTimes.constEnd()) { dates << *it; } QDateTime kdt(startDateTime()); for (const auto &date : qAsConst(d->mRDates)) { kdt.setDate(date); if (kdt > nextDT) { dates << kdt; break; } } // Add the next occurrences from all RRULEs. for (const auto &rule : qAsConst(d->mRRules)) { QDateTime dt = rule->getNextDate(nextDT); if (dt.isValid()) { dates << dt; } } // Take the first of these (all others can't be used later on) sortAndRemoveDuplicates(dates); if (dates.isEmpty()) { return QDateTime(); } nextDT = dates.first(); // Check if that date/time is excluded explicitly or by an exrule: if (!std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), nextDT.date()) && !std::binary_search(d->mExDateTimes.constBegin(), d->mExDateTimes.constEnd(), nextDT)) { bool allowed = true; for (const auto &rule : qAsConst(d->mExRules)) { allowed = allowed && !rule->recursAt(nextDT); } if (allowed) { return nextDT; } } } // Couldn't find a valid occurrences in 1000 loops, something is wrong! return QDateTime(); } QDateTime Recurrence::getPreviousDateTime(const QDateTime &afterDateTime) const { QDateTime prevDT = afterDateTime; // prevent infinite loops, e.g. when an exrule extinguishes an rrule (e.g. // the exrule is identical to the rrule). If an occurrence is found, break // out of the loop by returning that QDateTime int loop = 0; while (loop < 1000) { // Outline of the algo: // 1) Find the next date/time after preDateTime when the event could recur // 1.1) Use the next occurrence from the explicit RDATE lists // 1.2) Add the next recurrence for each of the RRULEs // 2) Take the earliest recurrence of these = QDateTime nextDT // 3) If that date/time is not excluded, either explicitly by an EXDATE or // by an EXRULE, return nextDT as the next date/time of the recurrence // 4) If it's excluded, start all at 1), but starting at nextDT (instead // of preDateTime). Loop at most 1000 times. ++loop; // First, get the next recurrence from the RDate lists QList dates; if (prevDT > startDateTime()) { dates << startDateTime(); } const auto it = strictLowerBound(d->mRDateTimes.constBegin(), d->mRDateTimes.constEnd(), prevDT); if (it != d->mRDateTimes.constEnd()) { dates << *it; } QDateTime kdt(startDateTime()); for (const auto &date : qAsConst(d->mRDates)) { kdt.setDate(date); if (kdt < prevDT) { dates << kdt; break; } } // Add the previous occurrences from all RRULEs. for (const auto &rule : qAsConst(d->mRRules)) { QDateTime dt = rule->getPreviousDate(prevDT); if (dt.isValid()) { dates << dt; } } // Take the last of these (all others can't be used later on) sortAndRemoveDuplicates(dates); if (dates.isEmpty()) { return QDateTime(); } prevDT = dates.last(); // Check if that date/time is excluded explicitly or by an exrule: if (!std::binary_search(d->mExDates.constBegin(), d->mExDates.constEnd(), prevDT.date()) && !std::binary_search(d->mExDateTimes.constBegin(), d->mExDateTimes.constEnd(), prevDT)) { bool allowed = true; for (const auto &rule : qAsConst(d->mExRules)) { allowed = allowed && !rule->recursAt(prevDT); } if (allowed) { return prevDT; } } } // Couldn't find a valid occurrences in 1000 loops, something is wrong! return QDateTime(); } /***************************** PROTECTED FUNCTIONS ***************************/ RecurrenceRule::List Recurrence::rRules() const { return d->mRRules; } void Recurrence::addRRule(RecurrenceRule *rrule) { if (d->mRecurReadOnly || !rrule) { return; } rrule->setAllDay(d->mAllDay); d->mRRules.append(rrule); rrule->addObserver(this); updated(); } void Recurrence::removeRRule(RecurrenceRule *rrule) { if (d->mRecurReadOnly) { return; } d->mRRules.removeAll(rrule); rrule->removeObserver(this); updated(); } void Recurrence::deleteRRule(RecurrenceRule *rrule) { if (d->mRecurReadOnly) { return; } d->mRRules.removeAll(rrule); delete rrule; updated(); } RecurrenceRule::List Recurrence::exRules() const { return d->mExRules; } void Recurrence::addExRule(RecurrenceRule *exrule) { if (d->mRecurReadOnly || !exrule) { return; } exrule->setAllDay(d->mAllDay); d->mExRules.append(exrule); exrule->addObserver(this); updated(); } void Recurrence::removeExRule(RecurrenceRule *exrule) { if (d->mRecurReadOnly) { return; } d->mExRules.removeAll(exrule); exrule->removeObserver(this); updated(); } void Recurrence::deleteExRule(RecurrenceRule *exrule) { if (d->mRecurReadOnly) { return; } d->mExRules.removeAll(exrule); delete exrule; updated(); } QList Recurrence::rDateTimes() const { return d->mRDateTimes; } void Recurrence::setRDateTimes(const QList &rdates) { if (d->mRecurReadOnly) { return; } d->mRDateTimes = rdates; sortAndRemoveDuplicates(d->mRDateTimes); updated(); } void Recurrence::addRDateTime(const QDateTime &rdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mRDateTimes, rdate); updated(); } DateList Recurrence::rDates() const { return d->mRDates; } void Recurrence::setRDates(const DateList &rdates) { if (d->mRecurReadOnly) { return; } d->mRDates = rdates; sortAndRemoveDuplicates(d->mRDates); updated(); } void Recurrence::addRDate(const QDate &rdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mRDates, rdate); updated(); } QList Recurrence::exDateTimes() const { return d->mExDateTimes; } void Recurrence::setExDateTimes(const QList &exdates) { if (d->mRecurReadOnly) { return; } d->mExDateTimes = exdates; sortAndRemoveDuplicates(d->mExDateTimes); } void Recurrence::addExDateTime(const QDateTime &exdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mExDateTimes, exdate); updated(); } DateList Recurrence::exDates() const { return d->mExDates; } void Recurrence::setExDates(const DateList &exdates) { if (d->mRecurReadOnly) { return; } DateList l = exdates; sortAndRemoveDuplicates(l); if (d->mExDates != l) { d->mExDates = l; updated(); } } void Recurrence::addExDate(const QDate &exdate) { if (d->mRecurReadOnly) { return; } setInsert(d->mExDates, exdate); updated(); } void Recurrence::recurrenceChanged(RecurrenceRule *) { updated(); } // %%%%%%%%%%%%%%%%%% end:Recurrencerule %%%%%%%%%%%%%%%%%% void Recurrence::dump() const { int i; int count = d->mRRules.count(); qDebug() << " -)" << count << "RRULEs:"; for (i = 0; i < count; ++i) { qDebug() << " -) RecurrenceRule: "; d->mRRules[i]->dump(); } count = d->mExRules.count(); qDebug() << " -)" << count << "EXRULEs:"; for (i = 0; i < count; ++i) { qDebug() << " -) ExceptionRule :"; d->mExRules[i]->dump(); } count = d->mRDates.count(); qDebug() << " -)" << count << "Recurrence Dates:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mRDates[i]; } count = d->mRDateTimes.count(); qDebug() << " -)" << count << "Recurrence Date/Times:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mRDateTimes[i]; } count = d->mExDates.count(); qDebug() << " -)" << count << "Exceptions Dates:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mExDates[i]; } count = d->mExDateTimes.count(); qDebug() << " -)" << count << "Exception Date/Times:"; for (i = 0; i < count; ++i) { qDebug() << " " << d->mExDateTimes[i]; } } Recurrence::RecurrenceObserver::~RecurrenceObserver() { } Q_CORE_EXPORT QDataStream &KCalendarCore::operator<<(QDataStream &out, KCalendarCore::Recurrence *r) { if (!r) { return out; } serializeQDateTimeList(out, r->d->mRDateTimes); serializeQDateTimeList(out, r->d->mExDateTimes); out << r->d->mRDates; serializeQDateTimeAsKDateTime(out, r->d->mStartDateTime); out << r->d->mCachedType << r->d->mAllDay << r->d->mRecurReadOnly << r->d->mExDates << r->d->mExRules.count() << r->d->mRRules.count(); for (RecurrenceRule *rule : qAsConst(r->d->mExRules)) { out << rule; } for (RecurrenceRule *rule : qAsConst(r->d->mRRules)) { out << rule; } return out; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::Recurrence *r) { if (!r) { return in; } int rruleCount, exruleCount; deserializeQDateTimeList(in, r->d->mRDateTimes); deserializeQDateTimeList(in, r->d->mExDateTimes); in >> r->d->mRDates; deserializeKDateTimeAsQDateTime(in, r->d->mStartDateTime); in >> r->d->mCachedType >> r->d->mAllDay >> r->d->mRecurReadOnly >> r->d->mExDates >> exruleCount >> rruleCount; r->d->mExRules.clear(); r->d->mRRules.clear(); for (int i = 0; i < exruleCount; ++i) { RecurrenceRule *rule = new RecurrenceRule(); rule->addObserver(r); in >> rule; r->d->mExRules.append(rule); } for (int i = 0; i < rruleCount; ++i) { RecurrenceRule *rule = new RecurrenceRule(); rule->addObserver(r); in >> rule; r->d->mRRules.append(rule); } return in; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/recurrence.h000066400000000000000000000665361523260663500264500ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher SPDX-FileCopyrightText: 2002, 2006 David Jarvie SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_RECURRENCE_H #define KCALCORE_RECURRENCE_H #include "recurrencerule.h" class QBitArray; class QTimeZone; namespace KCalendarCore { class RecurrenceRule; /** This class represents a recurrence rule for a calendar incidence. 此类表示日历事件的é‡�å¤�规则。 It manages all recurrence rules, recurrence date/times, exception rules and exception date times that can appear inside calendar items. Each recurrence rule and exception rule is represented as an object of type RecurrenceRule. 它管ç�†æ—¥åކ项䏭å�¯èƒ½å‡ºçŽ°çš„æ‰€æœ‰å®šæœŸè§„åˆ™ã€�定期日期/æ—¶é—´ã€�异常规则和异常日期时间。 æ¯�个递归规则和异常规则都表示为RecurrenceRule类型的对象。 For the simple case where at most one recurrence rule is present, this class provides shortcut methods to set the type: setMinutely() setHourly() setDaily() setWeekly() setMonthly() setYearly() to set/get general information about the recurrence: setEndDate() setEndDateTime() duration() durationTo() setDuration() frequency() setFrequency() and to set/get specific information about the recurrence within the interval: days() monthDays() monthPositions() yearDays() yearDates() yearMonths() yearPositions() addMonthlyPos() addMonthlyDate() addYearlyDay() addYearlyDate() addYearlyPos() addYearlyMonth() These are all available so that you don't have to work on the RecurrenceRule objects themselves. In other words, in that simple situation the interface stays almost the same compared to the old Recurrence class, which allowed only one recurrence rule. As soon as your recurrence consists of multiple recurrence rules or exception rules, you cannot use the methods mentioned above any more (since each rule will have a different type and different settings). If you still call any of them, the set*ly methods will remove all rules and add one rule with the specified type. The add* and the other set* methods will change only the first recurrence rule, but leave the others untouched. */ class Q_CORE_EXPORT Recurrence : public RecurrenceRule::RuleObserver { public: class RecurrenceObserver { public: virtual ~RecurrenceObserver(); /** This method will be called on each change of the recurrence object */ virtual void recurrenceUpdated(Recurrence *r) = 0; }; /** enumeration for describing how an event recurs, if at all. */ enum { rNone = 0, rMinutely = 0x001, rHourly = 0x0002, rDaily = 0x0003, rWeekly = 0x0004, rMonthlyPos = 0x0005, rMonthlyDay = 0x0006, rYearlyMonth = 0x0007, rYearlyDay = 0x0008, rYearlyPos = 0x0009, rOther = 0x000A, rMax = 0x00FF, }; /** Constructs an empty recurrence. */ Recurrence(); /** Copy constructor. @param r instance to copy from */ Recurrence(const Recurrence &r); /** Destructor. */ ~Recurrence() override; /** Comparison operator for equality. @param r instance to compare with @return true if recurrences are the same, false otherwise */ bool operator==(const Recurrence &r) const; /** Comparison operator for inequality. @param r instance to compare with @return true if recurrences are the different, false if the same */ bool operator!=(const Recurrence &r) const { return !operator==(r); } Recurrence &operator=(const Recurrence &r) = delete; /** Return the start date/time of the recurrence (Time for all-day recurrences will be 0:00). * 返回é‡�å¤�的开始日期/æ—¶é—´ (全天é‡�å¤�的时间为0:00) @return the current start/time of the recurrence. */ Q_REQUIRED_RESULT QDateTime startDateTime() const; /** Return the start date/time of the recurrence * 返回é‡�å¤�的开始日期/æ—¶é—´ */ Q_REQUIRED_RESULT QDate startDate() const; /** Set start of recurrence. @param start the new start date or date/time of the recurrence. @param isAllDay if true, the recurrence is set to all-day. Otherwise the recurrence is set to non-all-day. */ void setStartDateTime(const QDateTime &start, bool isAllDay); /** Set whether the recurrence has no time, just a date. * All-day means -- according to rfc2445 -- that the event has no time * associated. * N.B. This property is derived by default from whether setStartDateTime() is * called with a date-only or date/time parameter. * @return whether the recurrence has a time (false) or it is just a date (true). */ Q_REQUIRED_RESULT bool allDay() const; /** Sets whether the dtstart is a all-day (i.e. has no time attached) @param allDay If the recurrence is for all-day item (true) or has a time associated (false). */ void setAllDay(bool allDay); /** Set if recurrence is read-only or can be changed. */ void setRecurReadOnly(bool readOnly); /** Returns true if the recurrence is read-only, or false if it can be changed. */ //如果é‡�å¤�周期是å�ªè¯»çš„,则返回 true;如果å�¯ä»¥æ›´æ”¹ï¼Œåˆ™è¿”回 false。 Q_REQUIRED_RESULT bool recurReadOnly() const; /** Returns whether the event recurs at all. */ //返回事件是å�¦å†�次å�‘生 Q_REQUIRED_RESULT bool recurs() const; /** Returns the event's recurrence status. See the enumeration at the top * of this file for possible values. */ Q_REQUIRED_RESULT ushort recurrenceType() const; /** Returns the recurrence status for a recurrence rule. * 返回é‡�å¤�规则的é‡�å¤�状æ€�。 * See the enumeration at the top of this file for possible values. * 有关å�¯èƒ½çš„值,请å�‚阅此文件顶部的枚举。 * * @param rrule the recurrence rule to get the type for */ static ushort recurrenceType(const RecurrenceRule *rrule); /** Returns true if the date specified is one on which the event will recur. @param date date to check. @param timeZone time zone for the @p date. */ bool recursOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns true if the date/time specified is one at which the event will recur. Times are rounded down to the nearest minute to determine the result. 如果指定的日期/时间是事件将å†�次å�‘生的日期/时间,则返回true。时间四èˆ�五入到最近的分钟以确定结果。 @param dt is the date/time to check. */ bool recursAt(const QDateTime &dt) const; /** Removes all recurrence rules. Recurrence dates and exceptions are not removed. 删除所有é‡�å¤�规则。ä¸�会删除é‡�å¤�日期和例外情况。 */ void unsetRecurs(); /** Removes all recurrence and exception rules and dates. */ void clear(); /** Returns a list of the times on the specified date at which the * recurrence will occur. The returned times should be interpreted in the * context of @p timeSpec. * @param date the date for which to find the recurrence times * @param timeZone timezone for @p date */ Q_REQUIRED_RESULT TimeList recurTimesOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns a list of all the times at which the recurrence will occur * between two specified times. * * There is a (large) maximum limit to the number of times returned. If due to * this limit the list is incomplete, this is indicated by the last entry being * set to an invalid QDateTime value. If you need further values, call the * method again with a start time set to just after the last valid time returned. * * @param start inclusive start of interval * @param end inclusive end of interval * @return list of date/time values */ Q_REQUIRED_RESULT QList timesInInterval(const QDateTime &start, const QDateTime &end) const; /** Returns the start date/time of the earliest recurrence with a start date/time after * the specified date/time. * If the recurrence has no time, the next date after the specified date is returned. * @param preDateTime the date/time after which to find the recurrence. * @return start date/time of next recurrence (strictly later than the given * QDateTime), or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getNextDateTime(const QDateTime &preDateTime) const; /** Returns the date and time of the last previous recurrence, before the specified date/time. * If a time later than 00:00:00 is specified and the recurrence has no time, 00:00:00 on * the specified date is returned if that date recurs. * * @param afterDateTime the date/time before which to find the recurrence. * @return date/time of previous recurrence (strictly earlier than the given * QDateTime), or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getPreviousDateTime(const QDateTime &afterDateTime) const; /** Returns frequency of recurrence, in terms of the recurrence time period type. */ Q_REQUIRED_RESULT int frequency() const; /** Sets the frequency of recurrence, in terms of the recurrence time period type. */ void setFrequency(int freq); /** * Returns -1 if the event recurs infinitely, 0 if the end date is set, * otherwise the total number of recurrences, including the initial occurrence. * 如果事件无é™�é‡�å¤�,则返回-1;如果设置了结æ�Ÿæ—¥æœŸï¼Œåˆ™è¿”回0ï¼›å�¦åˆ™è¿”回包括åˆ�始事件在内的é‡�å¤�总数。 */ Q_REQUIRED_RESULT int duration() const; /** Sets the total number of times the event is to occur, including both the * first and last. */ void setDuration(int duration); /** Returns the number of recurrences up to and including the date/time specified. * 返回指定日期/时间之å‰�(包括指定日期/时间)的é‡�å¤�次数。 * @warning This function can be very time consuming - use it sparingly! */ Q_REQUIRED_RESULT int durationTo(const QDateTime &dt) const; /** Returns the number of recurrences up to and including the date specified. * @warning This function can be very time consuming - use it sparingly! */ Q_REQUIRED_RESULT int durationTo(const QDate &date) const; /** Returns the date/time of the last recurrence. * An invalid date is returned if the recurrence has no end. */ Q_REQUIRED_RESULT QDateTime endDateTime() const; /** Returns the date of the last recurrence. * 返回最å�Žä¸€æ¬¡é‡�å¤�的日期。 * An invalid date is returned if the recurrence has no end. */ Q_REQUIRED_RESULT QDate endDate() const; /** Sets the date of the last recurrence. The end time is set to the recurrence start time. * @param endDate the ending date after which to stop recurring. If the * recurrence is not all-day, the end time will be 23:59.*/ void setEndDate(const QDate &endDate); /** Sets the date and time of the last recurrence. * @param endDateTime the ending date/time after which to stop recurring. */ void setEndDateTime(const QDateTime &endDateTime); /** Shift the times of the recurrence so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual recurrence time zone. For example, shifting a recurrence whose start time is 09:00 America/New York, using an old viewing time zone (@p oldSpec) of Europe/London, to a new time zone (@p newSpec) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the recurrence start) to 14:00 Paris time. @param oldZone the time specification which provides the clock times @param newZone the new time specification */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone); /** Sets an event to recur minutely. By default infinite recurrence is used. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a minutely recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 2 is every other minute */ void setMinutely(int freq); /** Sets an event to recur hourly. By default infinite recurrence is used. The minute of the recurrence is taken from the start date (if you need to change it, you will have to modify the defaultRRule's byMinute list manually. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a hourly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 2 is every other hour */ void setHourly(int freq); /** Sets an event to recur daily. By default infinite recurrence is used. The minute and second of the recurrence is taken from the start date (if you need to change them, you will have to modify the defaultRRule's byMinute list manually. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a daily recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 2 is every other day */ void setDaily(int freq); /** Sets an event to recur weekly. By default infinite recurrence is used. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a weekly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. every other week etc. * @param weekStart the first day of the week (Monday=1 .. Sunday=7, default is Monday). */ void setWeekly(int freq, int weekStart = 1); /** Sets an event to recur weekly. By default infinite recurrence is used. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a weekly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. every other week etc. * @param days a 7 bit array indicating which days on which to recur (bit 0 = Monday). * @param weekStart the first day of the week (Monday=1 .. Sunday=7, default is Monday). */ void setWeekly(int freq, const QBitArray &days, int weekStart = 1); /** Adds days to the weekly day recurrence list. * @param days a 7 bit array indicating which days on which to recur (bit 0 = Monday). */ void addWeeklyDays(const QBitArray &days); /** Returns the first day of the week. Uses only the * first RRULE if present (i.e. a second RRULE as well as all EXRULES are * ignored! * @return Weekday of the first day of the week (Monday=1 .. Sunday=7) */ int weekStart() const; /** Returns week day mask (bit 0 = Monday). */ Q_REQUIRED_RESULT QBitArray days() const; // Emulate the old behavior /** Sets an event to recur monthly. By default infinite recurrence is used. The date of the monthly recurrence will be taken from the start date unless you explicitly add one or more recurrence dates with addMonthlyDate or a recurrence position in the month (e.g. first monday) using addMonthlyPos. To set an end date use the method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a monthly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 3 for every third month. */ void setMonthly(int freq); /** Adds a position (e.g. first monday) to the monthly recurrence rule. * @param pos the position in the month for the recurrence, with valid * values being 1-5 (5 weeks max in a month). * @param days the days for the position to recur on (bit 0 = Monday). * Example: pos = 2, and bits 0 and 2 are set in days: * the rule is to repeat every 2nd Monday and Wednesday in the month. */ void addMonthlyPos(short pos, const QBitArray &days); void addMonthlyPos(short pos, ushort day); void setMonthlyPos(const QList &monthlyDays); /** Adds a date (e.g. the 15th of each month) to the monthly day * recurrence list. * @param day the date in the month to recur. */ void addMonthlyDate(short day); void setMonthlyDate(const QList &monthlyDays); /** Returns list of day positions in months. */ Q_REQUIRED_RESULT QList monthPositions() const; /** Returns list of day numbers of a month. */ // Emulate old behavior Q_REQUIRED_RESULT QList monthDays() const; /** Sets an event to recur yearly. By default, this will recur every year * on the same date (e.g. every year on April 15 if the start date was * April 15). * The day of the year can be specified with addYearlyDay(). * The day of the month can be specified with addYearlyByDate * If both a month and a day ar specified with addYearlyMonth and * addYearlyDay, the day is understood as day number within the month. * * A position (e.g. 3rd Sunday of year/month, or last Friday of year/month) * can be specified with addYearlyPos. Again, if a month is specified, * this position is understood as within that month, otherwise within * the year. * * By default infinite recurrence is used. To set an end date use the * method setEndDate and to set the number of occurrences use setDuration. This method clears all recurrence rules and adds one rule with a yearly recurrence. All other recurrence components (recurrence date/times, exception date/times and exception rules) are not modified. * @param freq the frequency to recur, e.g. 3 for every third year. */ void setYearly(int freq); /** Adds day number of year within a yearly recurrence. * By default infinite recurrence is used. To set an end date use the * method setEndDate and to set the number of occurrences use setDuration. * @param day the day of the year for the event. E.g. if day is 60, this * means Feb 29 in leap years and March 1 in non-leap years. */ void addYearlyDay(int day); void setYearlyDay(const QList &days); /** Adds date within a yearly recurrence. The month(s) for the recurrence * can be specified with addYearlyMonth(), otherwise the month of the * start date is used. * * By default infinite recurrence is used. To set an end date use the * method setEndDate and to set the number of occurrences use setDuration. * @param date the day of the month for the event */ void addYearlyDate(int date); void setYearlyDate(const QList &dates); /** Adds month in yearly recurrence. You can specify specific day numbers * within the months (by calling addYearlyDate()) or specific day positions * within the month (by calling addYearlyPos). * @param _rNum the month in which the event shall recur. */ void addYearlyMonth(short _rNum); void setYearlyMonth(const QList &months); /** Adds position within month/year within a yearly recurrence. If months * are specified (via addYearlyMonth()), the parameters are understood as * position within these months, otherwise within the year. * * 在æ¯�å¹´é‡�å¤�的月/年内增加头寸。如果指定了月份 (通过添加年度月份 ()),则å�‚数应ç�†è§£ä¸ºè¿™äº›æœˆä»½å†…çš„ä½�置,å�¦åˆ™åº”ç�†è§£ä¸ºå¹´ä»½å†…çš„ä½�置。 * * By default infinite recurrence is used. * To set an end date use the method setEndDate and to set the number * of occurrences use setDuration. * @param pos the position in the month/year for the recurrence, with valid * values being 1 to 53 and -1 to -53 (53 weeks max in a year). * @param days the days for the position to recur on (bit 0 = Monday). * Example: pos = 2, and bits 0 and 2 are set in days * If months are specified (via addYearlyMonth), e.g. March, the rule is * to repeat every year on the 2nd Monday and Wednesday of March. * If no months are specified, the file is to repeat every year on the * 2nd Monday and Wednesday of the year. */ void addYearlyPos(short pos, const QBitArray &days); void setYearlyPos(const QList &days); /** Returns the day numbers within a yearly recurrence. * @return the days of the year for the event. E.g. if the list contains * 60, this means the recurrence happens on day 60 of the year, i.e. * on Feb 29 in leap years and March 1 in non-leap years. */ Q_REQUIRED_RESULT QList yearDays() const; /** Returns the dates within a yearly recurrence. * @return the days of the month for the event. E.g. if the list contains * 13, this means the recurrence happens on the 13th of the month. * The months for the recurrence can be obtained through * yearlyMonths(). If this list is empty, the month of the start * date is used. */ Q_REQUIRED_RESULT QList yearDates() const; /** Returns the months within a yearly recurrence. * @return the months for the event. E.g. if the list contains * 11, this means the recurrence happens in November. * The days for the recurrence can be obtained either through * yearDates() if they are given as dates within the month or * through yearlyPositions() if they are given as positions within the * month. If none is specified, the date of the start date is used. */ Q_REQUIRED_RESULT QList yearMonths() const; /** Returns the positions within a yearly recurrence. * @return the positions for the event, either within a month (if months * are set through addYearlyMonth()) or within the year. * E.g. if the list contains {Pos=3, Day=5}, this means the third * friday. If a month is set this position is understoodas third * Friday in the given months, otherwise as third Friday of the * year. */ /** Returns list of day positions in months, for a recursYearlyPos recurrence rule. */ Q_REQUIRED_RESULT QList yearPositions() const; /** Upper date limit for recurrences */ static const QDate MAX_DATE; /** Debug output. */ void dump() const; // RRULE Q_REQUIRED_RESULT RecurrenceRule::List rRules() const; /** Add a recurrence rule to the recurrence. å°†é‡�å¤�规则添加到é‡�å¤�中。 @param rrule the recurrence rule to add */ void addRRule(RecurrenceRule *rrule); /** Remove a recurrence rule from the recurrence. @p rrule is not deleted; it is the responsibility of the caller to ensure that it is deleted. @param rrule the recurrence rule to remove */ void removeRRule(RecurrenceRule *rrule); /** Remove a recurrence rule from the recurrence and delete it. @param rrule the recurrence rule to remove */ void deleteRRule(RecurrenceRule *rrule); // EXRULE Q_REQUIRED_RESULT RecurrenceRule::List exRules() const; /** Add an exception rule to the recurrence. å�‘é‡�å¤�添加例外规则。 @param exrule the exception rule to add */ void addExRule(RecurrenceRule *exrule); /** Remove an exception rule from the recurrence. @p exrule is not deleted; it is the responsibility of the caller to ensure that it is deleted. @param exrule the exception rule to remove */ void removeExRule(RecurrenceRule *exrule); /** Remove an exception rule from the recurrence and delete it. @param exrule the exception rule to remove */ void deleteExRule(RecurrenceRule *exrule); // RDATE Q_REQUIRED_RESULT QList rDateTimes() const; Q_REQUIRED_RESULT DateList rDates() const; void setRDateTimes(const QList &rdates); void setRDates(const DateList &rdates); void addRDateTime(const QDateTime &rdate); void addRDate(const QDate &rdate); // ExDATE Q_REQUIRED_RESULT QList exDateTimes() const; Q_REQUIRED_RESULT DateList exDates() const; void setExDateTimes(const QList &exdates); void setExDates(const DateList &exdates); void addExDateTime(const QDateTime &exdate); void addExDate(const QDate &exdate); RecurrenceRule *defaultRRule(bool create = false) const; RecurrenceRule *defaultRRuleConst() const; void updated(); /** Installs an observer. Whenever some setting of this recurrence object is changed, the recurrenceUpdated( Recurrence* ) method of each observer will be called to inform it of changes. @param observer the Recurrence::Observer-derived object, which will be installed as an observer of this object. */ void addObserver(RecurrenceObserver *observer); /** Removes an observer that was added with addObserver. If the given object was not an observer, it does nothing. @param observer the Recurrence::Observer-derived object to be removed from the list of observers of this object. */ void removeObserver(RecurrenceObserver *observer); void recurrenceChanged(RecurrenceRule *) override; protected: RecurrenceRule *setNewRecurrenceType(RecurrenceRule::PeriodType type, int freq); private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, KCalendarCore::Recurrence *); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Recurrence *); }; /** * Recurrence serializer and deserializer. * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, KCalendarCore::Recurrence *); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::Recurrence *); } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/recurrencehelper_p.h000066400000000000000000000025051523260663500301510ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2019 Volker Krause SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_RECURRENCEHELPER_P_H #define KCALCORE_RECURRENCEHELPER_P_H #include namespace KCalendarCore { template inline void sortAndRemoveDuplicates(T &container) { std::sort(container.begin(), container.end()); container.erase(std::unique(container.begin(), container.end()), container.end()); } template inline void inplaceSetDifference(T &set1, const T &set2) { auto beginIt = set1.begin(); for (const auto &elem : set2) { const auto it = std::lower_bound(beginIt, set1.end(), elem); if (it != set1.end() && *it == elem) { beginIt = set1.erase(it); } } } template inline void setInsert(Container &c, const Value &v) { const auto it = std::lower_bound(c.begin(), c.end(), v); if (it == c.end() || *it != v) { c.insert(it, v); } } template inline It strictLowerBound(It begin, It end, const Value &v) { const auto it = std::lower_bound(begin, end, v); if (it == end || (*it) >= v) { return it == begin ? end : (it - 1); } return it; } } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/recurrencerule.cpp000066400000000000000000002141541523260663500276620ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-FileCopyrightText: 2006-2008 David Jarvie SPDX-License-Identifier: LGPL-2.0-or-later */ #include "recurrencerule.h" #include "recurrencehelper_p.h" #include "utils_p.h" #include #include #include #include #include using namespace KCalendarCore; // Maximum number of intervals to process //è¦�处ç�†çš„æœ€å¤§é—´é𔿕° const int LOOP_LIMIT = 10000; #ifndef NDEBUG static QString dumpTime(const QDateTime &dt, bool allDay); // for debugging #endif /*========================================================================= = = = IMPORTANT CODING NOTE: = = = = Recurrence handling code is time critical, especially for sub-daily = = recurrences. For example, if getNextDate() is called repeatedly to = = check all consecutive occurrences over a few years, on a slow machine = = this could take many seconds to complete in the worst case. Simple = = sub-daily recurrences are optimised by use of mTimedRepetition. = = = ==========================================================================*/ /************************************************************************** * DateHelper * **************************************************************************/ //@cond PRIVATE class DateHelper { public: #ifndef NDEBUG static QString dayName(short day); #endif static QDate getNthWeek(int year, int weeknumber, short weekstart = 1); static int weekNumbersInYear(int year, short weekstart = 1); static int getWeekNumber(const QDate &date, short weekstart, int *year = nullptr); static int getWeekNumberNeg(const QDate &date, short weekstart, int *year = nullptr); // Convert to QDate, allowing for day < 0. // month and day must be non-zero. static QDate getDate(int year, int month, int day) { if (day >= 0) { return QDate(year, month, day); } else { if (++month > 12) { month = 1; ++year; } return QDate(year, month, 1).addDays(day); } } }; #ifndef NDEBUG // TODO: Move to a general library / class, as we need the same in the iCal // generator and in the xcal format QString DateHelper::dayName(short day) { switch (day) { case 1: return QStringLiteral("MO"); case 2: return QStringLiteral("TU"); case 3: return QStringLiteral("WE"); case 4: return QStringLiteral("TH"); case 5: return QStringLiteral("FR"); case 6: return QStringLiteral("SA"); case 7: return QStringLiteral("SU"); default: return QStringLiteral("??"); } } #endif QDate DateHelper::getNthWeek(int year, int weeknumber, short weekstart) { if (weeknumber == 0) { return QDate(); } // Adjust this to the first day of week #1 of the year and add 7*weekno days. QDate dt(year, 1, 4); // Week #1 is the week that contains Jan 4 int adjust = -(7 + dt.dayOfWeek() - weekstart) % 7; if (weeknumber > 0) { dt = dt.addDays(7 * (weeknumber - 1) + adjust); } else if (weeknumber < 0) { dt = dt.addYears(1); dt = dt.addDays(7 * weeknumber + adjust); } return dt; } int DateHelper::getWeekNumber(const QDate &date, short weekstart, int *year) { int y = date.year(); QDate dt(y, 1, 4); // <= definitely in week #1 dt = dt.addDays(-(7 + dt.dayOfWeek() - weekstart) % 7); // begin of week #1 qint64 daysto = dt.daysTo(date); if (daysto < 0) { // in first week of year --y; dt = QDate(y, 1, 4); dt = dt.addDays(-(7 + dt.dayOfWeek() - weekstart) % 7); // begin of week #1 daysto = dt.daysTo(date); } else if (daysto > 355) { // near the end of the year - check if it's next year QDate dtn(y + 1, 1, 4); // <= definitely first week of next year dtn = dtn.addDays(-(7 + dtn.dayOfWeek() - weekstart) % 7); qint64 dayston = dtn.daysTo(date); if (dayston >= 0) { // in first week of next year; ++y; daysto = dayston; } } if (year) { *year = y; } return daysto / 7 + 1; } int DateHelper::weekNumbersInYear(int year, short weekstart) { QDate dt(year, 1, weekstart); QDate dt1(year + 1, 1, weekstart); return dt.daysTo(dt1) / 7; } // Week number from the end of the year int DateHelper::getWeekNumberNeg(const QDate &date, short weekstart, int *year) { int weekpos = getWeekNumber(date, weekstart, year); return weekNumbersInYear(*year, weekstart) - weekpos - 1; } //@endcond /************************************************************************** * WDayPos * **************************************************************************/ bool RecurrenceRule::WDayPos::operator==(const RecurrenceRule::WDayPos &pos2) const { return mDay == pos2.mDay && mPos == pos2.mPos; } bool RecurrenceRule::WDayPos::operator!=(const RecurrenceRule::WDayPos &pos2) const { return !operator==(pos2); } /************************************************************************** * Constraint * **************************************************************************/ //@cond PRIVATE class Constraint { public: typedef QVector List; Constraint() { } explicit Constraint(const QTimeZone &, int wkst = 1); Constraint(const QDateTime &dt, RecurrenceRule::PeriodType type, int wkst); void clear(); void setYear(int n) { year = n; useCachedDt = false; } void setMonth(int n) { month = n; useCachedDt = false; } void setDay(int n) { day = n; useCachedDt = false; } void setHour(int n) { hour = n; useCachedDt = false; } void setMinute(int n) { minute = n; useCachedDt = false; } void setSecond(int n) { second = n; useCachedDt = false; } void setWeekday(int n) { weekday = n; useCachedDt = false; } void setWeekdaynr(int n) { weekdaynr = n; useCachedDt = false; } void setWeeknumber(int n) { weeknumber = n; useCachedDt = false; } void setYearday(int n) { yearday = n; useCachedDt = false; } void setWeekstart(int n) { weekstart = n; useCachedDt = false; } int year; // 0 means unspecified int month; // 0 means unspecified int day; // 0 means unspecified int hour; // -1 means unspecified int minute; // -1 means unspecified int second; // -1 means unspecified int weekday; // 0 means unspecified int weekdaynr; // index of weekday in month/year (0=unspecified) int weeknumber; // 0 means unspecified int yearday; // 0 means unspecified int weekstart; // first day of week (1=monday, 7=sunday, 0=unspec.) QTimeZone timeZone; // time zone etc. to use bool readDateTime(const QDateTime &dt, RecurrenceRule::PeriodType type); bool matches(const QDate &dt, RecurrenceRule::PeriodType type) const; bool matches(const QDateTime &dt, RecurrenceRule::PeriodType type) const; bool merge(const Constraint &interval); bool isConsistent(RecurrenceRule::PeriodType period) const; bool increase(RecurrenceRule::PeriodType type, int freq); QDateTime intervalDateTime(RecurrenceRule::PeriodType type) const; QList dateTimes(RecurrenceRule::PeriodType type) const; void appendDateTime(const QDate &date, const QTime &time, QList &list) const; void dump() const; private: mutable bool useCachedDt; mutable QDateTime cachedDt; }; Constraint::Constraint(const QTimeZone &timeZone, int wkst) : weekstart(wkst) , timeZone(timeZone) { clear(); } Constraint::Constraint(const QDateTime &dt, RecurrenceRule::PeriodType type, int wkst) : weekstart(wkst) , timeZone(dt.timeZone()) { clear(); readDateTime(dt, type); } void Constraint::clear() { year = 0; month = 0; day = 0; hour = -1; minute = -1; second = -1; weekday = 0; weekdaynr = 0; weeknumber = 0; yearday = 0; useCachedDt = false; } bool Constraint::matches(const QDate &dt, RecurrenceRule::PeriodType type) const { // If the event recurs in week 53 or 1, the day might not belong to the same // year as the week it is in. E.g. Jan 1, 2005 is in week 53 of year 2004. // So we can't simply check the year in that case! if (weeknumber == 0) { if (year > 0 && year != dt.year()) { return false; } } else { int y = 0; if (weeknumber > 0 && weeknumber != DateHelper::getWeekNumber(dt, weekstart, &y)) { return false; } if (weeknumber < 0 && weeknumber != DateHelper::getWeekNumberNeg(dt, weekstart, &y)) { return false; } if (year > 0 && year != y) { return false; } } if (month > 0 && month != dt.month()) { return false; } if (day > 0 && day != dt.day()) { return false; } if (day < 0 && dt.day() != (dt.daysInMonth() + day + 1)) { return false; } if (weekday > 0) { if (weekday != dt.dayOfWeek()) { return false; } if (weekdaynr != 0) { // If it's a yearly recurrence and a month is given, the position is // still in the month, not in the year. if ((type == RecurrenceRule::rMonthly) || (type == RecurrenceRule::rYearly && month > 0)) { // Monthly if (weekdaynr > 0 && weekdaynr != (dt.day() - 1) / 7 + 1) { return false; } if (weekdaynr < 0 && weekdaynr != -((dt.daysInMonth() - dt.day()) / 7 + 1)) { return false; } } else { // Yearly if (weekdaynr > 0 && weekdaynr != (dt.dayOfYear() - 1) / 7 + 1) { return false; } if (weekdaynr < 0 && weekdaynr != -((dt.daysInYear() - dt.dayOfYear()) / 7 + 1)) { return false; } } } } if (yearday > 0 && yearday != dt.dayOfYear()) { return false; } if (yearday < 0 && yearday != dt.daysInYear() - dt.dayOfYear() + 1) { return false; } return true; } /* Check for a match with the specified date/time. * The date/time's time specification must correspond with that of the start date/time. */ bool Constraint::matches(const QDateTime &dt, RecurrenceRule::PeriodType type) const { if ((hour >= 0 && hour != dt.time().hour()) || (minute >= 0 && minute != dt.time().minute()) || (second >= 0 && second != dt.time().second()) || !matches(dt.date(), type)) { return false; } return true; } bool Constraint::isConsistent(RecurrenceRule::PeriodType /*period*/) const { // TODO: Check for consistency, e.g. byyearday=3 and bymonth=10 return true; } // Return a date/time set to the constraint values, but with those parts less // significant than the given period type set to 1 (for dates) or 0 (for times). QDateTime Constraint::intervalDateTime(RecurrenceRule::PeriodType type) const { if (useCachedDt) { return cachedDt; } QDate d; QTime t(0, 0, 0); bool subdaily = true; switch (type) { case RecurrenceRule::rSecondly: t.setHMS(hour, minute, second); break; case RecurrenceRule::rMinutely: t.setHMS(hour, minute, 0); break; case RecurrenceRule::rHourly: t.setHMS(hour, 0, 0); break; case RecurrenceRule::rDaily: break; case RecurrenceRule::rWeekly: d = DateHelper::getNthWeek(year, weeknumber, weekstart); subdaily = false; break; case RecurrenceRule::rMonthly: d.setDate(year, month, 1); subdaily = false; break; case RecurrenceRule::rYearly: d.setDate(year, 1, 1); subdaily = false; break; default: break; } if (subdaily) { d = DateHelper::getDate(year, (month > 0) ? month : 1, day ? day : 1); } cachedDt = QDateTime(d, t, timeZone); useCachedDt = true; return cachedDt; } bool Constraint::merge(const Constraint &interval) { // clang-format off #define mergeConstraint( name, cmparison ) \ if ( interval.name cmparison ) { \ if ( !( name cmparison ) ) { \ name = interval.name; \ } else if ( name != interval.name ) { \ return false;\ } \ } // clang-format on useCachedDt = false; mergeConstraint(year, > 0); mergeConstraint(month, > 0); mergeConstraint(day, != 0); mergeConstraint(hour, >= 0); mergeConstraint(minute, >= 0); mergeConstraint(second, >= 0); mergeConstraint(weekday, != 0); mergeConstraint(weekdaynr, != 0); mergeConstraint(weeknumber, != 0); mergeConstraint(yearday, != 0); #undef mergeConstraint return true; } // Y M D | H Mn S | WD #WD | WN | YD // required: // x | x x x | | | // 0) Trivial: Exact date given, maybe other restrictions // x x x | x x x | | | // 1) Easy case: no weekly restrictions -> at most a loop through possible dates // x + + | x x x | - - | - | - // 2) Year day is given -> date known // x | x x x | | | + // 3) week number is given -> loop through all days of that week. Further // restrictions will be applied in the end, when we check all dates for // consistency with the constraints // x | x x x | | + | (-) // 4) week day is specified -> // x | x x x | x ? | (-)| (-) // 5) All possiblecases have already been treated, so this must be an error! QList Constraint::dateTimes(RecurrenceRule::PeriodType type) const { QList result; if (!isConsistent(type)) { return result; } // TODO_Recurrence: Handle all-day QTime tm(hour, minute, second); bool done = false; if (day && month > 0) { appendDateTime(DateHelper::getDate(year, month, day), tm, result); done = true; } if (!done && weekday == 0 && weeknumber == 0 && yearday == 0) { // Easy case: date is given, not restrictions by week or yearday uint mstart = (month > 0) ? month : 1; uint mend = (month <= 0) ? 12 : month; for (uint m = mstart; m <= mend; ++m) { uint dstart, dend; if (day > 0) { dstart = dend = day; } else if (day < 0) { QDate date(year, month, 1); dstart = dend = date.daysInMonth() + day + 1; } else { QDate date(year, month, 1); dstart = 1; dend = date.daysInMonth(); } uint d = dstart; for (QDate dt(year, m, dstart);; dt = dt.addDays(1)) { appendDateTime(dt, tm, result); if (++d > dend) { break; } } } done = true; } // Else: At least one of the week / yearday restrictions was given... // If we have a yearday (and of course a year), we know the exact date if (!done && yearday != 0) { // yearday < 0 means from end of year, so we'll need Jan 1 of the next year QDate d(year + ((yearday > 0) ? 0 : 1), 1, 1); d = d.addDays(yearday - ((yearday > 0) ? 1 : 0)); appendDateTime(d, tm, result); done = true; } // Else: If we have a weeknumber, we have at most 7 possible dates, loop through them if (!done && weeknumber != 0) { QDate wst(DateHelper::getNthWeek(year, weeknumber, weekstart)); if (weekday != 0) { wst = wst.addDays((7 + weekday - weekstart) % 7); appendDateTime(wst, tm, result); } else { for (int i = 0; i < 7; ++i) { appendDateTime(wst, tm, result); wst = wst.addDays(1); } } done = true; } // weekday is given if (!done && weekday != 0) { QDate dt(year, 1, 1); // If type == yearly and month is given, pos is still in month not year! // TODO_Recurrence: Correct handling of n-th BYDAY... int maxloop = 53; bool inMonth = (type == RecurrenceRule::rMonthly) || (type == RecurrenceRule::rYearly && month > 0); if (inMonth && month > 0) { dt = QDate(year, month, 1); maxloop = 5; } if (weekdaynr < 0) { // From end of period (month, year) => relative to begin of next period if (inMonth) { dt = dt.addMonths(1); } else { dt = dt.addYears(1); } } int adj = (7 + weekday - dt.dayOfWeek()) % 7; dt = dt.addDays(adj); // correct first weekday of the period if (weekdaynr > 0) { dt = dt.addDays((weekdaynr - 1) * 7); appendDateTime(dt, tm, result); } else if (weekdaynr < 0) { dt = dt.addDays(weekdaynr * 7); appendDateTime(dt, tm, result); } else { // loop through all possible weeks, non-matching will be filtered later for (int i = 0; i < maxloop; ++i) { appendDateTime(dt, tm, result); dt = dt.addDays(7); } } } // weekday != 0 // Only use those times that really match all other constraints, too QList valid; for (int i = 0, iend = result.count(); i < iend; ++i) { if (matches(result[i], type)) { valid.append(result[i]); } } // Don't sort it here, would be unnecessary work. The results from all // constraints will be merged to one big list of the interval. Sort that one! return valid; } void Constraint::appendDateTime(const QDate &date, const QTime &time, QList &list) const { QDateTime dt(date, time, timeZone); if (dt.isValid()) { list.append(dt); } } bool Constraint::increase(RecurrenceRule::PeriodType type, int freq) { // convert the first day of the interval to QDateTime intervalDateTime(type); // Now add the intervals switch (type) { case RecurrenceRule::rSecondly: cachedDt = cachedDt.addSecs(freq); break; case RecurrenceRule::rMinutely: cachedDt = cachedDt.addSecs(60 * freq); break; case RecurrenceRule::rHourly: cachedDt = cachedDt.addSecs(3600 * freq); break; case RecurrenceRule::rDaily: cachedDt = cachedDt.addDays(freq); break; case RecurrenceRule::rWeekly: cachedDt = cachedDt.addDays(7 * freq); break; case RecurrenceRule::rMonthly: cachedDt = cachedDt.addMonths(freq); break; case RecurrenceRule::rYearly: cachedDt = cachedDt.addYears(freq); break; default: break; } // Convert back from QDateTime to the Constraint class readDateTime(cachedDt, type); useCachedDt = true; // readDateTime() resets this return true; } // Set the constraint's value appropriate to 'type', to the value contained in a date/time. bool Constraint::readDateTime(const QDateTime &dt, RecurrenceRule::PeriodType type) { switch (type) { // Really fall through! Only weekly needs to be treated differently! case RecurrenceRule::rSecondly: second = dt.time().second(); Q_FALLTHROUGH(); case RecurrenceRule::rMinutely: minute = dt.time().minute(); Q_FALLTHROUGH(); case RecurrenceRule::rHourly: hour = dt.time().hour(); Q_FALLTHROUGH(); case RecurrenceRule::rDaily: day = dt.date().day(); Q_FALLTHROUGH(); case RecurrenceRule::rMonthly: month = dt.date().month(); Q_FALLTHROUGH(); case RecurrenceRule::rYearly: year = dt.date().year(); break; case RecurrenceRule::rWeekly: // Determine start day of the current week, calculate the week number from that weeknumber = DateHelper::getWeekNumber(dt.date(), weekstart, &year); break; default: break; } useCachedDt = false; return true; } //@endcond /************************************************************************** * RecurrenceRule::Private * **************************************************************************/ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::RecurrenceRule::Private { public: Private(RecurrenceRule *parent) : mParent(parent) , mPeriod(rNone) , mFrequency(0) , mDuration(-1) , mWeekStart(1) , mIsReadOnly(false) , mAllDay(false) { setDirty(); } Private(RecurrenceRule *parent, const Private &p); Private &operator=(const Private &other); bool operator==(const Private &other) const; void clear(); void setDirty(); void buildConstraints(); bool buildCache() const; Constraint getNextValidDateInterval(const QDateTime &preDate, PeriodType type) const; Constraint getPreviousValidDateInterval(const QDateTime &afterDate, PeriodType type) const; QList datesForInterval(const Constraint &interval, PeriodType type) const; RecurrenceRule *mParent; QString mRRule; // RRULE string PeriodType mPeriod; QDateTime mDateStart; // start of recurrence (but mDateStart is not an occurrence // unless it matches the rule) uint mFrequency; /** how often it recurs: < 0 means no end date, < 0表示没有结æ�Ÿæ—¥æœŸï¼Œ 0 means an explicit end date, 0表示明确的结æ�Ÿæ—¥æœŸï¼Œ positive values give the number of occurrences */ int mDuration; QDateTime mDateEnd; QList mBySeconds; // values: second 0-59 QList mByMinutes; // values: minute 0-59 QList mByHours; // values: hour 0-23 QList mByDays; // n-th weekday of the month or year QList mByMonthDays; // values: day -31 to -1 and 1-31 QList mByYearDays; // values: day -366 to -1 and 1-366 QList mByWeekNumbers; // values: week -53 to -1 and 1-53 QList mByMonths; // values: month 1-12 QList mBySetPos; // values: position -366 to -1 and 1-366 short mWeekStart; // first day of the week (1=Monday, 7=Sunday) 一周的第一天 Constraint::List mConstraints; QList mObservers; // Cache for duration mutable QList mCachedDates; mutable QDateTime mCachedDateEnd; mutable QDateTime mCachedLastDate; // when mCachedDateEnd invalid, last date checked 当mCachedDateEnd无效时,检查最å�Žæ—¥æœŸ mutable bool mCached; bool mIsReadOnly; bool mAllDay; bool mNoByRules; // no BySeconds, ByMinutes, ... rules exist uint mTimedRepetition; // repeats at a regular number of seconds interval, or 0 }; RecurrenceRule::Private::Private(RecurrenceRule *parent, const Private &p) : mParent(parent) , mRRule(p.mRRule) , mPeriod(p.mPeriod) , mDateStart(p.mDateStart) , mFrequency(p.mFrequency) , mDuration(p.mDuration) , mDateEnd(p.mDateEnd) , mBySeconds(p.mBySeconds) , mByMinutes(p.mByMinutes) , mByHours(p.mByHours) , mByDays(p.mByDays) , mByMonthDays(p.mByMonthDays) , mByYearDays(p.mByYearDays) , mByWeekNumbers(p.mByWeekNumbers) , mByMonths(p.mByMonths) , mBySetPos(p.mBySetPos) , mWeekStart(p.mWeekStart) , mIsReadOnly(p.mIsReadOnly) , mAllDay(p.mAllDay) , mNoByRules(p.mNoByRules) { setDirty(); } RecurrenceRule::Private &RecurrenceRule::Private::operator=(const Private &p) { // check for self assignment if (&p == this) { return *this; } mRRule = p.mRRule; mPeriod = p.mPeriod; mDateStart = p.mDateStart; mFrequency = p.mFrequency; mDuration = p.mDuration; mDateEnd = p.mDateEnd; mBySeconds = p.mBySeconds; mByMinutes = p.mByMinutes; mByHours = p.mByHours; mByDays = p.mByDays; mByMonthDays = p.mByMonthDays; mByYearDays = p.mByYearDays; mByWeekNumbers = p.mByWeekNumbers; mByMonths = p.mByMonths; mBySetPos = p.mBySetPos; mWeekStart = p.mWeekStart; mIsReadOnly = p.mIsReadOnly; mAllDay = p.mAllDay; mNoByRules = p.mNoByRules; setDirty(); return *this; } bool RecurrenceRule::Private::operator==(const Private &r) const { return mPeriod == r.mPeriod && ((mDateStart == r.mDateStart) || (!mDateStart.isValid() && !r.mDateStart.isValid())) && mDuration == r.mDuration && ((mDateEnd == r.mDateEnd) || (!mDateEnd.isValid() && !r.mDateEnd.isValid())) && mFrequency == r.mFrequency && mIsReadOnly == r.mIsReadOnly && mAllDay == r.mAllDay && mBySeconds == r.mBySeconds && mByMinutes == r.mByMinutes && mByHours == r.mByHours && mByDays == r.mByDays && mByMonthDays == r.mByMonthDays && mByYearDays == r.mByYearDays && mByWeekNumbers == r.mByWeekNumbers && mByMonths == r.mByMonths && mBySetPos == r.mBySetPos && mWeekStart == r.mWeekStart && mNoByRules == r.mNoByRules; } void RecurrenceRule::Private::clear() { if (mIsReadOnly) { return; } mPeriod = rNone; mBySeconds.clear(); mByMinutes.clear(); mByHours.clear(); mByDays.clear(); mByMonthDays.clear(); mByYearDays.clear(); mByWeekNumbers.clear(); mByMonths.clear(); mBySetPos.clear(); mWeekStart = 1; mNoByRules = false; setDirty(); } void RecurrenceRule::Private::setDirty() { buildConstraints(); mCached = false; mCachedDates.clear(); for (int i = 0, iend = mObservers.count(); i < iend; ++i) { if (mObservers[i]) { mObservers[i]->recurrenceChanged(mParent); } } } //@endcond /************************************************************************** * RecurrenceRule * **************************************************************************/ RecurrenceRule::RecurrenceRule() : d(new Private(this)) { } RecurrenceRule::RecurrenceRule(const RecurrenceRule &r) : d(new Private(this, *r.d)) { } RecurrenceRule::~RecurrenceRule() { delete d; } bool RecurrenceRule::operator==(const RecurrenceRule &r) const { return *d == *r.d; } RecurrenceRule &RecurrenceRule::operator=(const RecurrenceRule &r) { // check for self assignment if (&r == this) { return *this; } *d = *r.d; return *this; } void RecurrenceRule::addObserver(RuleObserver *observer) { if (!d->mObservers.contains(observer)) { d->mObservers.append(observer); } } void RecurrenceRule::removeObserver(RuleObserver *observer) { d->mObservers.removeAll(observer); } void RecurrenceRule::setRecurrenceType(PeriodType period) { if (isReadOnly()) { return; } d->mPeriod = period; d->setDirty(); } QDateTime RecurrenceRule::endDt(bool *result) const { if (result) { *result = false; } if (d->mPeriod == rNone) { return QDateTime(); } if (d->mDuration < 0) { return QDateTime(); } if (d->mDuration == 0) { if (result) { *result = true; } return d->mDateEnd; } // N occurrences. Check if we have a full cache. If so, return the cached end date. if (!d->mCached) { // If not enough occurrences can be found (i.e. inconsistent constraints) if (!d->buildCache()) { return QDateTime(); } } if (result) { *result = true; } return d->mCachedDateEnd; } void RecurrenceRule::setEndDt(const QDateTime &dateTime) { if (isReadOnly()) { return; } d->mDateEnd = dateTime; if (d->mDateEnd.isValid()) { d->mDuration = 0; // set to 0 because there is an end date/time } d->setDirty(); } void RecurrenceRule::setDuration(int duration) { if (isReadOnly()) { return; } d->mDuration = duration; d->setDirty(); } void RecurrenceRule::setAllDay(bool allDay) { if (isReadOnly()) { return; } d->mAllDay = allDay; d->setDirty(); } void RecurrenceRule::clear() { d->clear(); } void RecurrenceRule::setDirty() { d->setDirty(); } void RecurrenceRule::setStartDt(const QDateTime &start) { if (isReadOnly()) { return; } d->mDateStart = start; d->setDirty(); } void RecurrenceRule::setFrequency(int freq) { if (isReadOnly() || freq <= 0) { return; } d->mFrequency = freq; d->setDirty(); } void RecurrenceRule::setBySeconds(const QList &bySeconds) { if (isReadOnly()) { return; } d->mBySeconds = bySeconds; d->setDirty(); } void RecurrenceRule::setByMinutes(const QList &byMinutes) { if (isReadOnly()) { return; } d->mByMinutes = byMinutes; d->setDirty(); } void RecurrenceRule::setByHours(const QList &byHours) { if (isReadOnly()) { return; } d->mByHours = byHours; d->setDirty(); } void RecurrenceRule::setByDays(const QList &byDays) { if (isReadOnly()) { return; } d->mByDays = byDays; d->setDirty(); } void RecurrenceRule::setByMonthDays(const QList &byMonthDays) { if (isReadOnly()) { return; } d->mByMonthDays = byMonthDays; d->setDirty(); } void RecurrenceRule::setByYearDays(const QList &byYearDays) { if (isReadOnly()) { return; } d->mByYearDays = byYearDays; d->setDirty(); } void RecurrenceRule::setByWeekNumbers(const QList &byWeekNumbers) { if (isReadOnly()) { return; } d->mByWeekNumbers = byWeekNumbers; d->setDirty(); } void RecurrenceRule::setByMonths(const QList &byMonths) { if (isReadOnly()) { return; } d->mByMonths = byMonths; d->setDirty(); } void RecurrenceRule::setBySetPos(const QList &bySetPos) { if (isReadOnly()) { return; } d->mBySetPos = bySetPos; d->setDirty(); } void RecurrenceRule::setWeekStart(short weekStart) { if (isReadOnly()) { return; } d->mWeekStart = weekStart; d->setDirty(); } void RecurrenceRule::shiftTimes(const QTimeZone &oldTz, const QTimeZone &newTz) { d->mDateStart = d->mDateStart.toTimeZone(oldTz); d->mDateStart.setTimeZone(newTz); if (d->mDuration == 0) { d->mDateEnd = d->mDateEnd.toTimeZone(oldTz); d->mDateEnd.setTimeZone(newTz); } d->setDirty(); } // Taken from recurrence.cpp // int RecurrenceRule::maxIterations() const // { // /* Find the maximum number of iterations which may be needed to reach the // * next actual occurrence of a monthly or yearly recurrence. // * More than one iteration may be needed if, for example, it's the 29th February, // * the 31st day of the month or the 5th Monday, and the month being checked is // * February or a 30-day month. // * The following recurrences may never occur: // * - For rMonthlyDay: if the frequency is a whole number of years. // * - For rMonthlyPos: if the frequency is an even whole number of years. // * - For rYearlyDay, rYearlyMonth: if the frequency is a multiple of 4 years. // * - For rYearlyPos: if the frequency is an even number of years. // * The maximum number of iterations needed, assuming that it does actually occur, // * was found empirically. // */ // switch (recurs) { // case rMonthlyDay: // return (rFreq % 12) ? 6 : 8; // // case rMonthlyPos: // if (rFreq % 12 == 0) { // // Some of these frequencies may never occur // return (rFreq % 84 == 0) ? 364 // frequency = multiple of 7 years // : (rFreq % 48 == 0) ? 7 // frequency = multiple of 4 years // : (rFreq % 24 == 0) ? 14 : 28; // frequency = multiple of 2 or 1 year // } // // All other frequencies will occur sometime // if (rFreq > 120) // return 364; // frequencies of > 10 years will hit the date limit first // switch (rFreq) { // case 23: return 50; // case 46: return 38; // case 56: return 138; // case 66: return 36; // case 89: return 54; // case 112: return 253; // default: return 25; // most frequencies will need < 25 iterations // } // // case rYearlyMonth: // case rYearlyDay: // return 8; // only 29th Feb or day 366 will need more than one iteration // // case rYearlyPos: // if (rFreq % 7 == 0) // return 364; // frequencies of a multiple of 7 years will hit the date limit first // if (rFreq % 2 == 0) { // // Some of these frequencies may never occur // return (rFreq % 4 == 0) ? 7 : 14; // frequency = even number of years // } // return 28; // } // return 1; // } //@cond PRIVATE void RecurrenceRule::Private::buildConstraints() { mTimedRepetition = 0; mNoByRules = mBySetPos.isEmpty(); mConstraints.clear(); Constraint con(mDateStart.timeZone()); if (mWeekStart > 0) { con.setWeekstart(mWeekStart); } mConstraints.append(con); int c, cend; int i, iend; Constraint::List tmp; // clang-format off #define intConstraint( list, setElement ) \ if ( !list.isEmpty() ) { \ mNoByRules = false; \ iend = list.count(); \ if ( iend == 1 ) { \ for ( c = 0, cend = mConstraints.count(); c < cend; ++c ) { \ mConstraints[c].setElement( list[0] ); \ } \ } else { \ tmp.reserve(mConstraints.count() * iend); \ for ( c = 0, cend = mConstraints.count(); c < cend; ++c ) { \ for ( i = 0; i < iend; ++i ) { \ con = mConstraints[c]; \ con.setElement( list[i] ); \ tmp.append( con ); \ } \ } \ mConstraints = tmp; \ tmp.clear(); \ } \ } // clang-format on intConstraint(mBySeconds, setSecond); intConstraint(mByMinutes, setMinute); intConstraint(mByHours, setHour); intConstraint(mByMonthDays, setDay); intConstraint(mByMonths, setMonth); intConstraint(mByYearDays, setYearday); intConstraint(mByWeekNumbers, setWeeknumber); #undef intConstraint if (!mByDays.isEmpty()) { mNoByRules = false; tmp.reserve(mConstraints.count() * mByDays.count()); for (c = 0, cend = mConstraints.count(); c < cend; ++c) { for (i = 0, iend = mByDays.count(); i < iend; ++i) { con = mConstraints[c]; con.setWeekday(mByDays[i].day()); con.setWeekdaynr(mByDays[i].pos()); tmp.append(con); } } mConstraints = tmp; tmp.clear(); } // clang-format off #define fixConstraint( setElement, value ) \ { \ for ( c = 0, cend = mConstraints.count(); c < cend; ++c ) { \ mConstraints[c].setElement( value ); \ } \ } // clang-format on // Now determine missing values from DTSTART. This can speed up things, // because we have more restrictions and save some loops. // TODO: Does RFC 2445 intend to restrict the weekday in all cases of weekly? if (mPeriod == rWeekly && mByDays.isEmpty()) { fixConstraint(setWeekday, mDateStart.date().dayOfWeek()); } // Really fall through in the cases, because all smaller time intervals are // constrained from dtstart switch (mPeriod) { case rYearly: if (mByDays.isEmpty() && mByWeekNumbers.isEmpty() && mByYearDays.isEmpty() && mByMonths.isEmpty()) { fixConstraint(setMonth, mDateStart.date().month()); } Q_FALLTHROUGH(); case rMonthly: if (mByDays.isEmpty() && mByWeekNumbers.isEmpty() && mByYearDays.isEmpty() && mByMonthDays.isEmpty()) { fixConstraint(setDay, mDateStart.date().day()); } Q_FALLTHROUGH(); case rWeekly: case rDaily: if (mByHours.isEmpty()) { fixConstraint(setHour, mDateStart.time().hour()); } Q_FALLTHROUGH(); case rHourly: if (mByMinutes.isEmpty()) { fixConstraint(setMinute, mDateStart.time().minute()); } Q_FALLTHROUGH(); case rMinutely: if (mBySeconds.isEmpty()) { fixConstraint(setSecond, mDateStart.time().second()); } Q_FALLTHROUGH(); case rSecondly: default: break; } #undef fixConstraint if (mNoByRules) { switch (mPeriod) { case rHourly: mTimedRepetition = mFrequency * 3600; break; case rMinutely: mTimedRepetition = mFrequency * 60; break; case rSecondly: mTimedRepetition = mFrequency; break; default: break; } } else { for (c = 0, cend = mConstraints.count(); c < cend;) { if (mConstraints[c].isConsistent(mPeriod)) { ++c; } else { mConstraints.removeAt(c); --cend; } } } } // Build and cache a list of all occurrences. //生æˆ�并缓存所有事件的列表。 // Only call buildCache() if mDuration > 0. bool RecurrenceRule::Private::buildCache() const { Q_ASSERT(mDuration > 0); // Build the list of all occurrences of this event (we need that to determine // the end date!) Constraint interval(getNextValidDateInterval(mDateStart, mPeriod)); auto dts = datesForInterval(interval, mPeriod); // Only use dates after the event has started (start date is only included // if it matches) const auto it = strictLowerBound(dts.begin(), dts.end(), mDateStart); if (it != dts.end()) { dts.erase(dts.begin(), it + 1); } // some validity checks to avoid infinite loops (i.e. if we have // done this loop already 10000 times, bail out ) for (int loopnr = 0; loopnr < LOOP_LIMIT && dts.count() < mDuration; ++loopnr) { interval.increase(mPeriod, mFrequency); // The returned date list is already sorted! dts += datesForInterval(interval, mPeriod); } if (dts.count() > mDuration) { // we have picked up more occurrences than necessary, remove them // 我们å�‘现了更多ä¸�å¿…è¦�的事件,将其删除 dts.erase(dts.begin() + mDuration, dts.end()); } mCached = true; mCachedDates = dts; // it = dts.begin(); // while ( it != dts.end() ) { // qDebug() << " -=>" << dumpTime(*it); // ++it; // } if (int(dts.count()) == mDuration) { mCachedDateEnd = dts.last(); return true; } else { // The cached date list is incomplete mCachedDateEnd = QDateTime(); mCachedLastDate = interval.intervalDateTime(mPeriod); return false; } } //@endcond bool RecurrenceRule::dateMatchesRules(const QDateTime &kdt) const { QDateTime dt = kdt.toTimeZone(d->mDateStart.timeZone()); for (int i = 0, iend = d->mConstraints.count(); i < iend; ++i) { if (d->mConstraints[i].matches(dt, recurrenceType())) { return true; } } return false; } bool RecurrenceRule::recursOn(const QDate &qd, const QTimeZone &timeZone) const { int i, iend; if (!qd.isValid() || !d->mDateStart.isValid()) { // There can't be recurrences on invalid dates return false; } if (allDay()) { // It's a date-only rule, so it has no time specification. // Therefore ignore 'timeSpec'. if (qd < d->mDateStart.date()) { return false; } // Start date is only included if it really matches QDate endDate; if (d->mDuration >= 0) { endDate = endDt().date(); if (qd > endDate) { return false; } } // The date must be in an appropriate interval (getNextValidDateInterval), // Plus it must match at least one of the constraints bool match = false; for (i = 0, iend = d->mConstraints.count(); i < iend && !match; ++i) { match = d->mConstraints[i].matches(qd, recurrenceType()); } if (!match) { return false; } QDateTime start(qd, QTime(0, 0, 0), timeZone); // d->mDateStart.timeZone()); Constraint interval(d->getNextValidDateInterval(start, recurrenceType())); // Constraint::matches is quite efficient, so first check if it can occur at // all before we calculate all actual dates. if (!interval.matches(qd, recurrenceType())) { return false; } // We really need to obtain the list of dates in this interval, since // otherwise BYSETPOS will not work (i.e. the date will match the interval, // but BYSETPOS selects only one of these matching dates! QDateTime end = start.addDays(1); do { auto dts = d->datesForInterval(interval, recurrenceType()); for (i = 0, iend = dts.count(); i < iend; ++i) { if (dts[i].date() >= qd) { return dts[i].date() == qd; } } interval.increase(recurrenceType(), frequency()); } while (interval.intervalDateTime(recurrenceType()) < end); return false; } // It's a date-time rule, so we need to take the time specification into account. QDateTime start(qd, QTime(0, 0, 0), timeZone); QDateTime end = start.addDays(1).toTimeZone(d->mDateStart.timeZone()); start = start.toTimeZone(d->mDateStart.timeZone()); if (end < d->mDateStart) { return false; } if (start < d->mDateStart) { start = d->mDateStart; } // Start date is only included if it really matches if (d->mDuration >= 0) { QDateTime endRecur = endDt(); if (endRecur.isValid()) { if (start > endRecur) { return false; } if (end > endRecur) { end = endRecur; // limit end-of-day time to end of recurrence rule } } } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints int n = static_cast((d->mDateStart.secsTo(start) - 1) % d->mTimedRepetition); return start.addSecs(d->mTimedRepetition - n) < end; } // Find the start and end dates in the time spec for the rule QDate startDay = start.date(); QDate endDay = end.addSecs(-1).date(); int dayCount = startDay.daysTo(endDay) + 1; // The date must be in an appropriate interval (getNextValidDateInterval), // Plus it must match at least one of the constraints bool match = false; for (i = 0, iend = d->mConstraints.count(); i < iend && !match; ++i) { match = d->mConstraints[i].matches(startDay, recurrenceType()); for (int day = 1; day < dayCount && !match; ++day) { match = d->mConstraints[i].matches(startDay.addDays(day), recurrenceType()); } } if (!match) { return false; } Constraint interval(d->getNextValidDateInterval(start, recurrenceType())); // Constraint::matches is quite efficient, so first check if it can occur at // all before we calculate all actual dates. Constraint intervalm = interval; do { match = intervalm.matches(startDay, recurrenceType()); for (int day = 1; day < dayCount && !match; ++day) { match = intervalm.matches(startDay.addDays(day), recurrenceType()); } if (match) { break; } intervalm.increase(recurrenceType(), frequency()); } while (intervalm.intervalDateTime(recurrenceType()).isValid() && intervalm.intervalDateTime(recurrenceType()) < end); if (!match) { return false; } // We really need to obtain the list of dates in this interval, since // otherwise BYSETPOS will not work (i.e. the date will match the interval, // but BYSETPOS selects only one of these matching dates! do { auto dts = d->datesForInterval(interval, recurrenceType()); const auto it = std::lower_bound(dts.constBegin(), dts.constEnd(), start); if (it != dts.constEnd()) { return *it <= end; } interval.increase(recurrenceType(), frequency()); } while (interval.intervalDateTime(recurrenceType()).isValid() && interval.intervalDateTime(recurrenceType()) < end); return false; } bool RecurrenceRule::recursAt(const QDateTime &kdt) const { // Convert to the time spec used by this recurrence rule QDateTime dt(kdt.toTimeZone(d->mDateStart.timeZone())); if (allDay()) { return recursOn(dt.date(), dt.timeZone()); } if (dt < d->mDateStart) { return false; } // Start date is only included if it really matches if (d->mDuration >= 0 && dt > endDt()) { return false; } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints return !(d->mDateStart.secsTo(dt) % d->mTimedRepetition); } // The date must be in an appropriate interval (getNextValidDateInterval), // Plus it must match at least one of the constraints if (!dateMatchesRules(dt)) { return false; } // if it recurs every interval, speed things up... // if ( d->mFrequency == 1 && d->mBySetPos.isEmpty() && d->mByDays.isEmpty() ) return true; Constraint interval(d->getNextValidDateInterval(dt, recurrenceType())); // TODO_Recurrence: Does this work with BySetPos??? if (interval.matches(dt, recurrenceType())) { return true; } return false; } TimeList RecurrenceRule::recurTimesOn(const QDate &date, const QTimeZone &timeZone) const { TimeList lst; if (allDay()) { return lst; } QDateTime start(date, QTime(0, 0, 0), timeZone); QDateTime end = start.addDays(1).addSecs(-1); auto dts = timesInInterval(start, end); // returns between start and end inclusive for (int i = 0, iend = dts.count(); i < iend; ++i) { lst += dts[i].toTimeZone(timeZone).time(); } return lst; } /** Returns the number of recurrences up to and including the date/time specified. */ int RecurrenceRule::durationTo(const QDateTime &dt) const { // Convert to the time spec used by this recurrence rule QDateTime toDate(dt.toTimeZone(d->mDateStart.timeZone())); // Easy cases: // either before start, or after all recurrences and we know their number if (toDate < d->mDateStart) { return 0; } // Start date is only included if it really matches if (d->mDuration > 0 && toDate >= endDt()) { return d->mDuration; } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints return static_cast(d->mDateStart.secsTo(toDate) / d->mTimedRepetition); } return timesInInterval(d->mDateStart, toDate).count(); } int RecurrenceRule::durationTo(const QDate &date) const { return durationTo(QDateTime(date, QTime(23, 59, 59), d->mDateStart.timeZone())); } QDateTime RecurrenceRule::getPreviousDate(const QDateTime &afterDate) const { // Convert to the time spec used by this recurrence rule QDateTime toDate(afterDate.toTimeZone(d->mDateStart.timeZone())); // Invalid starting point, or beyond end of recurrence if (!toDate.isValid() || toDate < d->mDateStart) { return QDateTime(); } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints QDateTime prev = toDate; if (d->mDuration >= 0 && endDt().isValid() && toDate > endDt()) { prev = endDt().addSecs(1).toTimeZone(d->mDateStart.timeZone()); } int n = static_cast((d->mDateStart.secsTo(prev) - 1) % d->mTimedRepetition); if (n < 0) { return QDateTime(); // before recurrence start } prev = prev.addSecs(-n - 1); return prev >= d->mDateStart ? prev : QDateTime(); } // If we have a cache (duration given), use that if (d->mDuration > 0) { if (!d->mCached) { d->buildCache(); } const auto it = strictLowerBound(d->mCachedDates.constBegin(), d->mCachedDates.constEnd(), toDate); if (it != d->mCachedDates.constEnd()) { return *it; } return QDateTime(); } QDateTime prev = toDate; if (d->mDuration >= 0 && endDt().isValid() && toDate > endDt()) { prev = endDt().addSecs(1).toTimeZone(d->mDateStart.timeZone()); } Constraint interval(d->getPreviousValidDateInterval(prev, recurrenceType())); const auto dts = d->datesForInterval(interval, recurrenceType()); const auto it = strictLowerBound(dts.begin(), dts.end(), prev); if (it != dts.end()) { return ((*it) >= d->mDateStart) ? (*it) : QDateTime(); } // Previous interval. As soon as we find an occurrence, we're done. while (interval.intervalDateTime(recurrenceType()) > d->mDateStart) { interval.increase(recurrenceType(), -int(frequency())); // The returned date list is sorted auto dts = d->datesForInterval(interval, recurrenceType()); // The list is sorted, so take the last one. if (!dts.isEmpty()) { prev = dts.last(); if (prev.isValid() && prev >= d->mDateStart) { return prev; } else { return QDateTime(); } } } return QDateTime(); } QDateTime RecurrenceRule::getNextDate(const QDateTime &preDate) const { // Convert to the time spec used by this recurrence rule QDateTime fromDate(preDate.toTimeZone(d->mDateStart.timeZone())); // Beyond end of recurrence if (d->mDuration >= 0 && endDt().isValid() && fromDate >= endDt()) { return QDateTime(); } // Start date is only included if it really matches if (fromDate < d->mDateStart) { fromDate = d->mDateStart.addSecs(-1); } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints int n = static_cast((d->mDateStart.secsTo(fromDate) + 1) % d->mTimedRepetition); QDateTime next = fromDate.addSecs(d->mTimedRepetition - n + 1); return d->mDuration < 0 || !endDt().isValid() || next <= endDt() ? next : QDateTime(); } if (d->mDuration > 0) { if (!d->mCached) { d->buildCache(); } const auto it = std::upper_bound(d->mCachedDates.constBegin(), d->mCachedDates.constEnd(), fromDate); if (it != d->mCachedDates.constEnd()) { return *it; } } QDateTime end = endDt(); Constraint interval(d->getNextValidDateInterval(fromDate, recurrenceType())); const auto dts = d->datesForInterval(interval, recurrenceType()); const auto it = std::upper_bound(dts.begin(), dts.end(), fromDate); if (it != dts.end()) { return (d->mDuration < 0 || *it <= end) ? *it : QDateTime(); } interval.increase(recurrenceType(), frequency()); if (d->mDuration >= 0 && interval.intervalDateTime(recurrenceType()) > end) { return QDateTime(); } // Increase the interval. The first occurrence that we find is the result (if // if's before the end date). // TODO: some validity checks to avoid infinite loops for contradictory constraints int loop = 0; do { auto dts = d->datesForInterval(interval, recurrenceType()); if (!dts.isEmpty()) { QDateTime ret(dts[0]); if (d->mDuration >= 0 && ret > end) { return QDateTime(); } else { return ret; } } interval.increase(recurrenceType(), frequency()); } while (++loop < LOOP_LIMIT && (d->mDuration < 0 || interval.intervalDateTime(recurrenceType()) < end)); return QDateTime(); } QList RecurrenceRule::timesInInterval(const QDateTime &dtStart, const QDateTime &dtEnd) const { const QDateTime start = dtStart.toTimeZone(d->mDateStart.timeZone()); const QDateTime end = dtEnd.toTimeZone(d->mDateStart.timeZone()); QList result; if (end < d->mDateStart) { return result; // before start of recurrence } QDateTime enddt = end; if (d->mDuration >= 0) { const QDateTime endRecur = endDt(); if (endRecur.isValid()) { if (start > endRecur) { return result; // beyond end of recurrence } if (end >= endRecur) { enddt = endRecur; // limit end time to end of recurrence rule } } } if (d->mTimedRepetition) { // It's a simple sub-daily recurrence with no constraints // Seconds to add to interval start, to get first occurrence which is within interval qint64 offsetFromNextOccurrence; if (d->mDateStart < start) { offsetFromNextOccurrence = d->mTimedRepetition - (d->mDateStart.secsTo(start) % d->mTimedRepetition); } else { offsetFromNextOccurrence = -(d->mDateStart.secsTo(start) % d->mTimedRepetition); } QDateTime dt = start.addSecs(offsetFromNextOccurrence); if (dt <= enddt) { int numberOfOccurrencesWithinInterval = static_cast(dt.secsTo(enddt) / d->mTimedRepetition) + 1; // limit n by a sane value else we can "explode". numberOfOccurrencesWithinInterval = qMin(numberOfOccurrencesWithinInterval, LOOP_LIMIT); for (int i = 0; i < numberOfOccurrencesWithinInterval; dt = dt.addSecs(d->mTimedRepetition), ++i) { result += dt; } } return result; } QDateTime st = start < d->mDateStart ? d->mDateStart : start; bool done = false; if (d->mDuration > 0) { if (!d->mCached) { d->buildCache(); } if (d->mCachedDateEnd.isValid() && start > d->mCachedDateEnd) { return result; // beyond end of recurrence } const auto it = std::lower_bound(d->mCachedDates.constBegin(), d->mCachedDates.constEnd(), start); if (it != d->mCachedDates.constEnd()) { const auto itEnd = std::upper_bound(it, d->mCachedDates.constEnd(), enddt); if (itEnd != d->mCachedDates.constEnd()) { done = true; } std::copy(it, itEnd, std::back_inserter(result)); } if (d->mCachedDateEnd.isValid()) { done = true; } else if (!result.isEmpty()) { result += QDateTime(); // indicate that the returned list is incomplete done = true; } if (done) { return result; } // We don't have any result yet, but we reached the end of the incomplete cache st = d->mCachedLastDate.addSecs(1); } Constraint interval(d->getNextValidDateInterval(st, recurrenceType())); int loop = 0; do { auto dts = d->datesForInterval(interval, recurrenceType()); auto it = dts.begin(); auto itEnd = dts.end(); if (loop == 0) { it = std::lower_bound(dts.begin(), dts.end(), st); } itEnd = std::upper_bound(it, dts.end(), enddt); if (itEnd != dts.end()) { loop = LOOP_LIMIT; } std::copy(it, itEnd, std::back_inserter(result)); // Increase the interval. interval.increase(recurrenceType(), frequency()); } while (++loop < LOOP_LIMIT && interval.intervalDateTime(recurrenceType()) <= end); return result; } //@cond PRIVATE // Find the date/time of the occurrence at or before a date/time, // for a given period type. // Return a constraint whose value appropriate to 'type', is set to // the value contained in the date/time. Constraint RecurrenceRule::Private::getPreviousValidDateInterval(const QDateTime &dt, PeriodType type) const { long periods = 0; QDateTime start = mDateStart; QDateTime nextValid(start); int modifier = 1; QDateTime toDate(dt.toTimeZone(start.timeZone())); // for super-daily recurrences, don't care about the time part // Find the #intervals since the dtstart and round to the next multiple of // the frequency switch (type) { // Really fall through for sub-daily, since the calculations only differ // by the factor 60 and 60*60! Same for weekly and daily (factor 7) case rHourly: modifier *= 60; Q_FALLTHROUGH(); case rMinutely: modifier *= 60; Q_FALLTHROUGH(); case rSecondly: periods = static_cast(start.secsTo(toDate) / modifier); // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } nextValid = start.addSecs(modifier * periods); break; case rWeekly: toDate = toDate.addDays(-(7 + toDate.date().dayOfWeek() - mWeekStart) % 7); start = start.addDays(-(7 + start.date().dayOfWeek() - mWeekStart) % 7); modifier *= 7; Q_FALLTHROUGH(); case rDaily: periods = start.daysTo(toDate) / modifier; // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } nextValid = start.addDays(modifier * periods); break; case rMonthly: { periods = 12 * (toDate.date().year() - start.date().year()) + (toDate.date().month() - start.date().month()); // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } // set the day to the first day of the month, so we don't have problems // with non-existent days like Feb 30 or April 31 start.setDate(QDate(start.date().year(), start.date().month(), 1)); nextValid.setDate(start.date().addMonths(periods)); break; } case rYearly: periods = (toDate.date().year() - start.date().year()); // round it down to the next lower multiple of frequency: if (mFrequency > 0) { periods = (periods / mFrequency) * mFrequency; } nextValid.setDate(start.date().addYears(periods)); break; default: break; } return Constraint(nextValid, type, mWeekStart); } // Find the date/time of the next occurrence at or after a date/time, // for a given period type. // Return a constraint whose value appropriate to 'type', is set to the // value contained in the date/time. Constraint RecurrenceRule::Private::getNextValidDateInterval(const QDateTime &dt, PeriodType type) const { // TODO: Simplify this! long periods = 0; QDateTime start = mDateStart; QDateTime nextValid(start); int modifier = 1; QDateTime toDate(dt.toTimeZone(start.timeZone())); // for super-daily recurrences, don't care about the time part // Find the #intervals since the dtstart and round to the next multiple of // the frequency switch (type) { // Really fall through for sub-daily, since the calculations only differ // by the factor 60 and 60*60! Same for weekly and daily (factor 7) case rHourly: modifier *= 60; Q_FALLTHROUGH(); case rMinutely: modifier *= 60; Q_FALLTHROUGH(); case rSecondly: periods = static_cast(start.secsTo(toDate) / modifier); periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } nextValid = start.addSecs(modifier * periods); break; case rWeekly: // correct both start date and current date to start of week toDate = toDate.addDays(-(7 + toDate.date().dayOfWeek() - mWeekStart) % 7); start = start.addDays(-(7 + start.date().dayOfWeek() - mWeekStart) % 7); modifier *= 7; Q_FALLTHROUGH(); case rDaily: periods = start.daysTo(toDate) / modifier; periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } nextValid = start.addDays(modifier * periods); break; case rMonthly: { periods = 12 * (toDate.date().year() - start.date().year()) + (toDate.date().month() - start.date().month()); periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } // set the day to the first day of the month, so we don't have problems // with non-existent days like Feb 30 or April 31 start.setDate(QDate(start.date().year(), start.date().month(), 1)); nextValid.setDate(start.date().addMonths(periods)); break; } case rYearly: periods = (toDate.date().year() - start.date().year()); periods = qMax(0L, periods); if (periods > 0 && mFrequency > 0) { periods += (mFrequency - 1 - ((periods - 1) % mFrequency)); } nextValid.setDate(start.date().addYears(periods)); break; default: break; } return Constraint(nextValid, type, mWeekStart); } QList RecurrenceRule::Private::datesForInterval(const Constraint &interval, PeriodType type) const { /* -) Loop through constraints, -) merge interval with each constraint -) if merged constraint is not consistent => ignore that constraint -) if complete => add that one date to the date list -) Loop through all missing fields => For each add the resulting */ QList lst; for (int i = 0, iend = mConstraints.count(); i < iend; ++i) { Constraint merged(interval); if (merged.merge(mConstraints[i])) { // If the information is incomplete, we can't use this constraint if (merged.year > 0 && merged.hour >= 0 && merged.minute >= 0 && merged.second >= 0) { // We have a valid constraint, so get all datetimes that match it and // append it to all date/times of this interval QList lstnew = merged.dateTimes(type); lst += lstnew; } } } // Sort it so we can apply the BySetPos. Also some logic relies on this being sorted sortAndRemoveDuplicates(lst); /*if ( lst.isEmpty() ) { qDebug() << " No Dates in Interval"; } else { qDebug() << " Dates:"; for ( int i = 0, iend = lst.count(); i < iend; ++i ) { qDebug()<< " -)" << dumpTime(lst[i]); } qDebug() << " ---------------------"; }*/ if (!mBySetPos.isEmpty()) { auto tmplst = lst; lst.clear(); for (int i = 0, iend = mBySetPos.count(); i < iend; ++i) { int pos = mBySetPos[i]; if (pos > 0) { --pos; } if (pos < 0) { pos += tmplst.count(); } if (pos >= 0 && pos < tmplst.count()) { lst.append(tmplst[pos]); } } sortAndRemoveDuplicates(lst); } return lst; } //@endcond void RecurrenceRule::dump() const { #ifndef NDEBUG if (!d->mRRule.isEmpty()) { qDebug() << " RRULE=" << d->mRRule; } qDebug() << " Read-Only:" << isReadOnly(); qDebug() << " Period type:" << int(recurrenceType()) << ", frequency:" << frequency(); qDebug() << " #occurrences:" << duration(); qDebug() << " start date:" << dumpTime(startDt(), allDay()) << ", end date:" << dumpTime(endDt(), allDay()); // clang-format off #define dumpByIntList(list,label) \ if ( !list.isEmpty() ) {\ QStringList lst;\ for ( int i = 0, iend = list.count(); i < iend; ++i ) {\ lst.append( QString::number( list[i] ) );\ }\ qDebug() << " " << label << lst.join(QLatin1String(", ") );\ } // clang-format on dumpByIntList(d->mBySeconds, QStringLiteral("BySeconds: ")); dumpByIntList(d->mByMinutes, QStringLiteral("ByMinutes: ")); dumpByIntList(d->mByHours, QStringLiteral("ByHours: ")); if (!d->mByDays.isEmpty()) { QStringList lst; for (int i = 0, iend = d->mByDays.count(); i < iend; ++i) { lst.append((d->mByDays[i].pos() ? QString::number(d->mByDays[i].pos()) : QLatin1String("")) + DateHelper::dayName(d->mByDays[i].day())); } qDebug() << " ByDays: " << lst.join(QLatin1String(", ")); } dumpByIntList(d->mByMonthDays, QStringLiteral("ByMonthDays:")); dumpByIntList(d->mByYearDays, QStringLiteral("ByYearDays: ")); dumpByIntList(d->mByWeekNumbers, QStringLiteral("ByWeekNr: ")); dumpByIntList(d->mByMonths, QStringLiteral("ByMonths: ")); dumpByIntList(d->mBySetPos, QStringLiteral("BySetPos: ")); #undef dumpByIntList qDebug() << " Week start:" << DateHelper::dayName(d->mWeekStart); qDebug() << " Constraints:"; // dump constraints for (int i = 0, iend = d->mConstraints.count(); i < iend; ++i) { d->mConstraints[i].dump(); } #endif } //@cond PRIVATE void Constraint::dump() const { qDebug() << " ~> Y=" << year << ", M=" << month << ", D=" << day << ", H=" << hour << ", m=" << minute << ", S=" << second << ", wd=" << weekday << ",#wd=" << weekdaynr << ", #w=" << weeknumber << ", yd=" << yearday; } //@endcond QString dumpTime(const QDateTime &dt, bool isAllDay) { #ifndef NDEBUG if (!dt.isValid()) { return QString(); } QString result; if (isAllDay) { result = dt.toString(QStringLiteral("ddd yyyy-MM-dd t")); } else { result = dt.toString(QStringLiteral("ddd yyyy-MM-dd hh:mm:ss t")); } return result; #else Q_UNUSED(dt); Q_UNUSED(isAllDay); return QString(); #endif } QDateTime RecurrenceRule::startDt() const { return d->mDateStart; } RecurrenceRule::PeriodType RecurrenceRule::recurrenceType() const { return d->mPeriod; } uint RecurrenceRule::frequency() const { return d->mFrequency; } int RecurrenceRule::duration() const { return d->mDuration; } QString RecurrenceRule::rrule() const { return d->mRRule; } void RecurrenceRule::setRRule(const QString &rrule) { d->mRRule = rrule; } bool RecurrenceRule::isReadOnly() const { return d->mIsReadOnly; } void RecurrenceRule::setReadOnly(bool readOnly) { d->mIsReadOnly = readOnly; } bool RecurrenceRule::recurs() const { return d->mPeriod != rNone; } bool RecurrenceRule::allDay() const { return d->mAllDay; } const QList &RecurrenceRule::bySeconds() const { return d->mBySeconds; } const QList &RecurrenceRule::byMinutes() const { return d->mByMinutes; } const QList &RecurrenceRule::byHours() const { return d->mByHours; } const QList &RecurrenceRule::byDays() const { return d->mByDays; } const QList &RecurrenceRule::byMonthDays() const { return d->mByMonthDays; } const QList &RecurrenceRule::byYearDays() const { return d->mByYearDays; } const QList &RecurrenceRule::byWeekNumbers() const { return d->mByWeekNumbers; } const QList &RecurrenceRule::byMonths() const { return d->mByMonths; } const QList &RecurrenceRule::bySetPos() const { return d->mBySetPos; } short RecurrenceRule::weekStart() const { return d->mWeekStart; } RecurrenceRule::RuleObserver::~RuleObserver() { } RecurrenceRule::WDayPos::WDayPos(int ps, short dy) : mDay(dy) , mPos(ps) { } void RecurrenceRule::WDayPos::setDay(short dy) { mDay = dy; } short RecurrenceRule::WDayPos::day() const { return mDay; } void RecurrenceRule::WDayPos::setPos(int ps) { mPos = ps; } int RecurrenceRule::WDayPos::pos() const { return mPos; } QDataStream &operator<<(QDataStream &out, const Constraint &c) { out << c.year << c.month << c.day << c.hour << c.minute << c.second << c.weekday << c.weekdaynr << c.weeknumber << c.yearday << c.weekstart; serializeQTimeZoneAsSpec(out, c.timeZone); out << false; // for backwards compatibility return out; } QDataStream &operator>>(QDataStream &in, Constraint &c) { bool secondOccurrence; // no longer used in >> c.year >> c.month >> c.day >> c.hour >> c.minute >> c.second >> c.weekday >> c.weekdaynr >> c.weeknumber >> c.yearday >> c.weekstart; deserializeSpecAsQTimeZone(in, c.timeZone); in >> secondOccurrence; return in; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule::WDayPos &w) { out << w.mDay << w.mPos; return out; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator>>(QDataStream &in, KCalendarCore::RecurrenceRule::WDayPos &w) { in >> w.mDay >> w.mPos; return in; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule *r) { if (!r) { return out; } RecurrenceRule::Private *d = r->d; out << d->mRRule << static_cast(d->mPeriod); serializeQDateTimeAsKDateTime(out, d->mDateStart); out << d->mFrequency << d->mDuration; serializeQDateTimeAsKDateTime(out, d->mDateEnd); out << d->mBySeconds << d->mByMinutes << d->mByHours << d->mByDays << d->mByMonthDays << d->mByYearDays << d->mByWeekNumbers << d->mByMonths << d->mBySetPos << d->mWeekStart << d->mConstraints << d->mAllDay << d->mNoByRules << d->mTimedRepetition << d->mIsReadOnly; return out; } Q_CORE_EXPORT QDataStream &KCalendarCore::operator>>(QDataStream &in, const KCalendarCore::RecurrenceRule *r) { if (!r) { return in; } RecurrenceRule::Private *d = r->d; quint32 period; in >> d->mRRule >> period; deserializeKDateTimeAsQDateTime(in, d->mDateStart); in >> d->mFrequency >> d->mDuration; deserializeKDateTimeAsQDateTime(in, d->mDateEnd); in >> d->mBySeconds >> d->mByMinutes >> d->mByHours >> d->mByDays >> d->mByMonthDays >> d->mByYearDays >> d->mByWeekNumbers >> d->mByMonths >> d->mBySetPos >> d->mWeekStart >> d->mConstraints >> d->mAllDay >> d->mNoByRules >> d->mTimedRepetition >> d->mIsReadOnly; d->mPeriod = static_cast(period); return in; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/recurrencerule.h000066400000000000000000000350261523260663500273260ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001, 2003 Cornelius Schumacher SPDX-FileCopyrightText: 2002, 2006, 2007 David Jarvie SPDX-FileCopyrightText: 2005 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_RECURRENCERULE_H #define KCALCORE_RECURRENCERULE_H #include #include class QTimeZone; namespace KCalendarCore { // These two are duplicates wrt. incidencebase.h typedef QList DateList; /* List of times */ typedef QList TimeList; /** This class represents a recurrence rule for a calendar incidence. 此类表示日历事件的é‡�å¤�规则。 */ class Q_CORE_EXPORT RecurrenceRule { public: class RuleObserver { public: virtual ~RuleObserver(); /** This method is called on each change of the recurrence object * 对递归对象的æ¯�次更改都会调用此方法 */ virtual void recurrenceChanged(RecurrenceRule *) = 0; }; typedef QList List; /** enum for describing the frequency how an event recurs, if at all. * 枚举,用于æ��述事件递归的频率(如果有)。 */ enum PeriodType { rNone = 0, rSecondly, rMinutely, rHourly, rDaily, rWeekly, rMonthly, rYearly, }; /** structure for describing the n-th weekday of the month/year. * 用于æ��述月/年的第n个工作日的结构。 */ class Q_CORE_EXPORT WDayPos // krazy:exclude=dpointer { public: explicit WDayPos(int ps = 0, short dy = 0); void setDay(short dy); short day() const; void setPos(int ps); int pos() const; bool operator==(const RecurrenceRule::WDayPos &pos2) const; bool operator!=(const RecurrenceRule::WDayPos &pos2) const; protected: short mDay; // Weekday, 1=monday, 7=sunday int mPos; // week of the day (-1 for last, 1 for first, 0 for all weeks) // Bounded by -366 and +366, 0 means all weeks in that period friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule::WDayPos &); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::RecurrenceRule::WDayPos &); }; RecurrenceRule(); RecurrenceRule(const RecurrenceRule &r); ~RecurrenceRule(); bool operator==(const RecurrenceRule &r) const; bool operator!=(const RecurrenceRule &r) const { return !operator==(r); } RecurrenceRule &operator=(const RecurrenceRule &r); /** Set if recurrence is read-only or can be changed. * .设置é‡�å¤�周期是å�ªè¯»çš„还是å�¯ä»¥æ›´æ”¹çš„ * */ void setReadOnly(bool readOnly); /** Returns true if the recurrence is read-only; false if it can be changed. 如果é‡�å¤�周期为å�ªè¯»ï¼Œåˆ™è¿”回true;如果å�¯ä»¥æ›´æ”¹ï¼Œåˆ™ä¸ºfalse。 */ Q_REQUIRED_RESULT bool isReadOnly() const; /** Returns the event's recurrence status. See the enumeration at the top of this file for possible values. 返回事件的é‡�å¤�状æ€�。有关å�¯èƒ½çš„值,请å�‚阅此文件顶部的枚举。 */ Q_REQUIRED_RESULT bool recurs() const; void setRecurrenceType(PeriodType period); Q_REQUIRED_RESULT PeriodType recurrenceType() const; /** Turns off recurrence for the event. */ void clear(); /** Returns the recurrence frequency, in terms of the recurrence time period type. 返回按é‡�å¤�时间段类型表示的é‡�å¤�频率。 */ Q_REQUIRED_RESULT uint frequency() const; /** Sets the recurrence frequency, in terms of the recurrence time period type. æ ¹æ�®é‡�å¤�时间段类型设置é‡�å¤�频率。 */ void setFrequency(int freq); /** Returns the recurrence start date/time. Note that the recurrence does not necessarily occur on the start date/time. For this to happen, it must actually match the rule. 返回定期开始日期/时间。 请注æ„�,é‡�å¤�ä¸�一定å�‘生在开始日期/时间。 è¦�å�šåˆ°è¿™ä¸€ç‚¹ï¼Œå®ƒå¿…须符å�ˆè§„则。 */ Q_REQUIRED_RESULT QDateTime startDt() const; /** Sets the recurrence start date/time. Note that setting the start date/time does not make the recurrence occur on that date/time, it simply sets a lower limit to when the recurrences take place (this applies only for the by- rules, not for i.e. an hourly rule where the startDt is the first occurrence). 设置定期开始日期/时间。 请注æ„�,设置开始日期/æ—¶é—´ä¸�会使é‡�å¤�å�‘生在该日期/时间,它å�ªä¼šè®¾ç½®é‡�å¤�å�‘生的时间下é™�(这仅适用于by规则,而ä¸�适用于startDt是第一次å�‘生的æ¯�å°�时规则)。 Note that setting @p start to a date-only value does not make an all-day recurrence: to do this, call setAllDay(true). @param start the recurrence's start date and time */ void setStartDt(const QDateTime &start); /** Returns whether the start date has no time associated. All-Day means -- according to rfc2445 -- that the event has no time associate. */ Q_REQUIRED_RESULT bool allDay() const; /** Sets whether the dtstart is all-day (i.e. has no time attached) * * @param allDay Whether start datetime is all-day */ void setAllDay(bool allDay); /** Returns the date and time of the last recurrence. * An invalid date is returned if the recurrence has no end. * @param result if non-null, *result is updated to true if successful, * or false if there is no recurrence or its end date cannot be determined. */ Q_REQUIRED_RESULT QDateTime endDt(bool *result = nullptr) const; /** Sets the date and time of the last recurrence. * @param endDateTime the ending date/time after which to stop recurring. */ void setEndDt(const QDateTime &endDateTime); /** * Returns -1 if the event recurs infinitely, 0 if the end date is set, * otherwise the total number of recurrences, including the initial occurrence. * 如果事件无é™�é‡�å¤�,则返回-1;如果设置了结æ�Ÿæ—¥æœŸï¼Œåˆ™è¿”回0ï¼›å�¦åˆ™è¿”回包括åˆ�始事件在内的é‡�å¤�总数。 */ Q_REQUIRED_RESULT int duration() const; /** Sets the total number of times the event is to occur, including both the * first and last. * 设置事件å�‘生的总次数,包括第一次和最å�Žä¸€æ¬¡ã€‚ */ void setDuration(int duration); /** Returns the number of recurrences up to and including the date/time specified. */ //返回指定日期/时间之å‰�(包括指定日期/时间)的å¤�å�‘次数 Q_REQUIRED_RESULT int durationTo(const QDateTime &dt) const; /** Returns the number of recurrences up to and including the date specified. * 返回指定日期之å‰�(包括指定日期)的é‡�å¤�次数。 */ Q_REQUIRED_RESULT int durationTo(const QDate &date) const; /** Shift the times of the rule so that they appear at the same clock time as before but in a new time zone. The shift is done from a viewing time zone rather than from the actual rule time zone. For example, shifting a rule whose start time is 09:00 America/New York, using an old viewing time zone (@p oldTz) of Europe/London, to a new time zone (@p newTz) of Europe/Paris, will result in the time being shifted from 14:00 (which is the London time of the rule start) to 14:00 Paris time. @param oldTz the time specification which provides the clock times @param newTz the new time specification */ void shiftTimes(const QTimeZone &oldTz, const QTimeZone &newTz); /** Returns true if the date specified is one on which the event will * recur. The start date returns true only if it actually matches the rule. * 如果指定的日期是事件将å†�次å�‘生的日期,则返回true。仅当开始日期与规则实际匹é…�时,æ‰�会返回true。 * @param date date to check * @param timeZone time specification for @p date */ Q_REQUIRED_RESULT bool recursOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns true if the date/time specified is one at which the event will * recur. Times are rounded down to the nearest minute to determine the result. * The start date/time returns true only if it actually matches the rule. * 如果指定的日期/时间是事件将é‡�å¤�出现的日期/时间,则返回 true。时间å�‘下èˆ�入到最接近的分钟以确定结果。开始日期/时间仅当实际与规则匹é…�æ—¶æ‰�返回 true。 * @param dt the date+time to check for recurrency */ Q_REQUIRED_RESULT bool recursAt(const QDateTime &dt) const; /** Returns true if the date matches the rules. It does not necessarily mean that this is an actual occurrence. In particular, the method does not check if the date is after the end date, or if the frequency interval matches. @param dt the date+time to check for matching the rules */ Q_REQUIRED_RESULT bool dateMatchesRules(const QDateTime &dt) const; /** Returns a list of the times on the specified date at which the * recurrence will occur. The returned times should be interpreted in the * context of @p timeZone. * 返回在指定日期é‡�å¤�å�‘生的时间列表。 * @param date the date for which to find the recurrence times * @param timeZone time specification for @p date */ Q_REQUIRED_RESULT TimeList recurTimesOn(const QDate &date, const QTimeZone &timeZone) const; /** Returns a list of all the times at which the recurrence will occur * between two specified times. * 返回在两个指定时间之间é‡�å¤�å�‘生的所有时间的列表。 * There is a (large) maximum limit to the number of times returned. If due to * this limit the list is incomplete, this is indicated by the last entry being * set to an invalid QDateTime value. If you need further values, call the * method again with a start time set to just after the last valid time returned. * @param start inclusive start of interval * @param end inclusive end of interval * @return list of date/time values */ Q_REQUIRED_RESULT QList timesInInterval(const QDateTime &start, const QDateTime &end) const; /** Returns the date and time of the next recurrence, after the specified date/time. * 返回指定日期/时间之å�Žä¸‹æ¬¡é‡�å¤�的日期和时间。 * If the recurrence has no time, the next date after the specified date is returned. * @param preDateTime the date/time after which to find the recurrence. * @return date/time of next recurrence, or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getNextDate(const QDateTime &preDateTime) const; /** Returns the date and time of the last previous recurrence, before the specified date/time. * 返回指定日期/时间之å‰�上次é‡�å¤�的日期和时间。 * If a time later than 00:00:00 is specified and the recurrence has no time, 00:00:00 on * the specified date is returned if that date recurs. * @param afterDateTime the date/time before which to find the recurrence. * @return date/time of previous recurrence, or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getPreviousDate(const QDateTime &afterDateTime) const; void setBySeconds(const QList &bySeconds); void setByMinutes(const QList &byMinutes); void setByHours(const QList &byHours); void setByDays(const QList &byDays); void setByMonthDays(const QList &byMonthDays); void setByYearDays(const QList &byYearDays); void setByWeekNumbers(const QList &byWeekNumbers); void setByMonths(const QList &byMonths); void setBySetPos(const QList &bySetPos); void setWeekStart(short weekStart); const QList &bySeconds() const; const QList &byMinutes() const; const QList &byHours() const; const QList &byDays() const; const QList &byMonthDays() const; const QList &byYearDays() const; const QList &byWeekNumbers() const; const QList &byMonths() const; const QList &bySetPos() const; short weekStart() const; /** Set the RRULE string for the rule. This is merely stored for future reference. The string is not used in any way by the RecurrenceRule. @param rrule the RRULE string */ void setRRule(const QString &rrule); Q_REQUIRED_RESULT QString rrule() const; void setDirty(); /** Installs an observer. Whenever some setting of this recurrence object is changed, the recurrenceUpdated( Recurrence* ) method of each observer will be called to inform it of changes. 安装一个观察者。æ¯�当此递归对象的æŸ�些设置å�‘生更改时,将调用æ¯�个观察者的recurrenceUpdated(recurrence*)方法æ�¥é€šçŸ¥å…¶æ›´æ”¹ã€‚ @param observer the Recurrence::Observer-derived object, which will be installed as an observer of this object. */ void addObserver(RuleObserver *observer); /** Removes an observer that was added with addObserver. If the given object was not an observer, it does nothing. @param observer the Recurrence::Observer-derived object to be removed from the list of observers of this object. */ void removeObserver(RuleObserver *observer); /** Debug output. */ void dump() const; private: //@cond PRIVATE class Private; Private *const d; //@endcond friend Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule *); friend Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, const KCalendarCore::RecurrenceRule *); }; /** * RecurrenceRule serializer and deserializer. * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule *); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, const KCalendarCore::RecurrenceRule *); /** * RecurrenceRule::WDayPos serializer and deserializer. * @since 4.12 */ Q_CORE_EXPORT QDataStream &operator<<(QDataStream &out, const KCalendarCore::RecurrenceRule::WDayPos &); Q_CORE_EXPORT QDataStream &operator>>(QDataStream &in, KCalendarCore::RecurrenceRule::WDayPos &); } // namespace KCalendarCore Q_DECLARE_TYPEINFO(KCalendarCore::RecurrenceRule::WDayPos, Q_MOVABLE_TYPE); #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/schedulemessage.cpp000066400000000000000000000035061523260663500277730ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001, 2004 Cornelius Schumacher SPDX-FileCopyrightText: 2004 Reinhold Kainhofer SPDX-License-Identifier: LGPL-2.0-or-later */ #include "schedulemessage.h" #include using namespace KCalendarCore; //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::ScheduleMessage::Private { public: Private() { } IncidenceBase::Ptr mIncidence; iTIPMethod mMethod; Status mStatus; QString mError; ~Private() { } }; //@endcond ScheduleMessage::ScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method, ScheduleMessage::Status status) : d(new KCalendarCore::ScheduleMessage::Private) { d->mIncidence = incidence; d->mMethod = method; d->mStatus = status; } ScheduleMessage::~ScheduleMessage() { delete d; } IncidenceBase::Ptr ScheduleMessage::event() const { return d->mIncidence; } iTIPMethod ScheduleMessage::method() const { return d->mMethod; } QString ScheduleMessage::methodName(iTIPMethod method) { switch (method) { case iTIPPublish: return QStringLiteral("Publish"); case iTIPRequest: return QStringLiteral("Request"); case iTIPRefresh: return QStringLiteral("Refresh"); case iTIPCancel: return QStringLiteral("Cancel"); case iTIPAdd: return QStringLiteral("Add"); case iTIPReply: return QStringLiteral("Reply"); case iTIPCounter: return QStringLiteral("Counter"); case iTIPDeclineCounter: return QStringLiteral("Decline Counter"); default: return QStringLiteral("Unknown"); } } ScheduleMessage::Status ScheduleMessage::status() const { return d->mStatus; } QString ScheduleMessage::error() const { return d->mError; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/schedulemessage.h000066400000000000000000000054301523260663500274360ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_SCHEDULEMESSAGE_H #define KCALCORE_SCHEDULEMESSAGE_H #include "incidencebase.h" namespace KCalendarCore { class IncidenceBase; /** iTIP methods. */ enum iTIPMethod { iTIPPublish, /**< Event, to-do, journal or freebusy posting */ iTIPRequest, /**< Event, to-do or freebusy scheduling request */ iTIPReply, /**< Event, to-do or freebusy reply to request */ iTIPAdd, /**< Event, to-do or journal additional property request */ iTIPCancel, /**< Event, to-do or journal cancellation notice */ iTIPRefresh, /**< Event or to-do description update request */ iTIPCounter, /**< Event or to-do submit counter proposal */ iTIPDeclineCounter, /**< Event or to-do decline a counter proposal */ iTIPNoMethod, /**< No method */ }; /** @brief A Scheduling message class. This class provides an encapsulation of a scheduling message. It associates an incidence with an iTIPMethod and status information. */ class Q_CORE_EXPORT ScheduleMessage { public: /** Message status. */ enum Status { PublishNew, /**< New message posting */ PublishUpdate, /**< Updated message */ Obsolete, /**< obsolete */ RequestNew, /**< Request new message posting */ RequestUpdate, /**< Request updated message */ Unknown, /**< No status */ }; /** A shared pointer to a ScheduleMessage. */ typedef QSharedPointer Ptr; /** Creates a scheduling message with method as defined in iTIPMethod and a status. @param incidence a pointer to a valid Incidence to be associated with this message. @param method an iTIPMethod. @param status a Status. */ ScheduleMessage(const IncidenceBase::Ptr &incidence, iTIPMethod method, Status status); /** Destructor. */ ~ScheduleMessage(); /** Returns the event associated with this message. */ IncidenceBase::Ptr event() const; /** Returns the iTIP method associated with this message. */ Q_REQUIRED_RESULT iTIPMethod method() const; /** Returns a machine-readable (not translatable) name for a iTIP method. @param method an iTIPMethod. */ Q_REQUIRED_RESULT static QString methodName(iTIPMethod method); /** Returns the status of this message. */ Q_REQUIRED_RESULT Status status() const; /** Returns the error message if there is any. */ Q_REQUIRED_RESULT QString error() const; private: //@cond PRIVATE Q_DISABLE_COPY(ScheduleMessage) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/sorting.cpp000066400000000000000000000404021523260663500263130ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #include "sorting.h" // PENDING(kdab) Review // The QString::compare() need to be replace by a DUI string comparisons. // See http://qt.gitorious.org/maemo-6-ui-framework/libdui // If not compiled in "meego-mode" should we be using locale compares? using namespace KCalendarCore; /** * How one QDateTime compares with another. * * If any all-day events are involved, comparison of QDateTime values * requires them to be considered as representing time periods. An all-day * instance represents a time period from 00:00:00 to 23:59:59.999 on a given * date, while a date/time instance can be considered to represent a time * period whose start and end times are the same. They may therefore be * earlier or later, or may overlap or be contained one within the other. * * Values may be OR'ed with each other in any combination of 'consecutive' * intervals to represent different types of relationship. * * In the descriptions of the values below, * - s1 = start time of first instance * - e1 = end time of first instance * - s2 = start time of second instance * - e2 = end time of second instance. */ enum DateTimeComparison { Before = 0x01, /**< The first QDateTime is strictly earlier than the second, * i.e. e1 < s2. */ AtStart = 0x02, /**< The first QDateTime starts at the same time as the second, * and ends before the end of the second, * i.e. s1 = s2, e1 < e2. */ Inside = 0x04, /**< The first QDateTime starts after the start of the second, * and ends before the end of the second, * i.e. s1 > s2, e1 < e2. */ AtEnd = 0x08, /**< The first QDateTime starts after the start of the second, * and ends at the same time as the second, * i.e. s1 > s2, e1 = e2. */ After = 0x10, /**< The first QDateTime is strictly later than the second, * i.e. s1 > e2. */ Equal = AtStart | Inside | AtEnd, /**< Simultaneous, i.e. s1 = s2 && e1 = e2. */ Outside = Before | AtStart | Inside | AtEnd | After, /**< The first QDateTime starts before the start of the other, * and ends after the end of the other, * i.e. s1 < s2, e1 > e2. */ StartsAt = AtStart | Inside | AtEnd | After, /**< The first QDateTime starts at the same time as the other, * and ends after the end of the other, * i.e. s1 = s2, e1 > e2. */ EndsAt = Before | AtStart | Inside | AtEnd, /**< The first QDateTime starts before the start of the other, * and ends at the same time as the other, * i.e. s1 < s2, e1 = e2. */ }; /** * Compare two QDateTime instances to determine whether they are * simultaneous, earlier or later. * The comparison takes time zones into account: if the two instances have * different time zones, they are first converted to UTC before comparing. * * If both instances are not all-day values, the first instance is considered to * be either simultaneous, earlier or later, and does not overlap. * * If one instance is all-day and the other is a not all-day, the first instance * is either strictly earlier, strictly later, or overlaps. * * If both instance are all-day, they are considered simultaneous if both * their start of day and end of day times are simultaneous with each * other. (Both start and end of day times need to be considered in case a * daylight savings change occurs during that day.) Otherwise, the first instance * can be strictly earlier, earlier but overlapping, later but overlapping, * or strictly later. * * Note that if either instance is a local time (Qt::TimeSpec of Qt::LocalTime), * the result cannot be guaranteed to be correct, since by definition they * contain no information about time zones or daylight savings changes. * * @return DateTimeComparison indicating the relationship of dt1 to dt2 * @see operator==(), operator!=(), operator<(), operator<=(), operator>=(), operator>() */ DateTimeComparison compare(const QDateTime &dt1, bool isAllDay1, const QDateTime &dt2, bool isAllDay2) { QDateTime start1, start2; // FIXME When secondOccurrence is available in QDateTime // const bool conv = (!d->equalSpec(*other.d) || d->secondOccurrence() != other.d->secondOccurrence()); const bool conv = dt1.timeSpec() != dt2.timeSpec() || (dt1.timeSpec() == Qt::OffsetFromUTC && dt1.offsetFromUtc() != dt2.offsetFromUtc()) || (dt1.timeSpec() == Qt::TimeZone && dt1.timeZone() != dt2.timeZone()); if (conv) { // Different time specs or one is a time which occurs twice, // so convert to UTC before comparing start1 = dt1.toUTC(); start2 = dt2.toUTC(); } else { // Same time specs, so no need to convert to UTC start1 = dt1; start2 = dt2; } if (isAllDay1 || isAllDay2) { // At least one of the instances is date-only, so we need to compare // time periods rather than just times. QDateTime end1, end2; if (conv) { if (isAllDay1) { QDateTime dt(dt1); dt.setTime(QTime(23, 59, 59, 999)); end1 = dt.toUTC(); } else { end1 = start1; } if (isAllDay2) { QDateTime dt(dt2); dt.setTime(QTime(23, 59, 59, 999)); end2 = dt.toUTC(); } else { end2 = start2; } } else { if (isAllDay1) { end1 = QDateTime(dt1.date(), QTime(23, 59, 59, 999), Qt::LocalTime); } else { end1 = dt1; } if (isAllDay2) { end2 = QDateTime(dt2.date(), QTime(23, 59, 59, 999), Qt::LocalTime); } else { end2 = dt2; } } if (start1 == start2) { return !isAllDay1 ? AtStart : (end1 == end2) ? Equal : (end1 < end2) ? static_cast(AtStart | Inside) : static_cast(AtStart | Inside | AtEnd | After); } if (start1 < start2) { return (end1 < start2) ? Before : (end1 == end2) ? static_cast(Before | AtStart | Inside | AtEnd) : (end1 == start2) ? static_cast(Before | AtStart) : (end1 < end2) ? static_cast(Before | AtStart | Inside) : Outside; } else { return (start1 > end2) ? After : (start1 == end2) ? (end1 == end2 ? AtEnd : static_cast(AtEnd | After)) : (end1 == end2) ? static_cast(Inside | AtEnd) : (end1 < end2) ? Inside : static_cast(Inside | AtEnd | After); } } return (start1 == start2) ? Equal : (start1 < start2) ? Before : After; } bool KCalendarCore::Events::startDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtStart(), e1->allDay(), e2->dtStart(), e2->allDay()); if (res == Equal) { return Events::summaryLessThan(e1, e2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Events::startDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtStart(), e1->allDay(), e2->dtStart(), e2->allDay()); if (res == Equal) { return Events::summaryMoreThan(e1, e2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Events::summaryLessThan(const Event::Ptr &e1, const Event::Ptr &e2) { return QString::compare(e1->summary(), e2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Events::summaryMoreThan(const Event::Ptr &e1, const Event::Ptr &e2) { return QString::compare(e1->summary(), e2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Events::endDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtEnd(), e1->allDay(), e2->dtEnd(), e2->allDay()); if (res == Equal) { return Events::summaryLessThan(e1, e2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Events::endDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2) { DateTimeComparison res = compare(e1->dtEnd(), e1->allDay(), e2->dtEnd(), e2->allDay()); if (res == Equal) { return Events::summaryMoreThan(e1, e2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Journals::dateLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { DateTimeComparison res = compare(j1->dtStart(), j1->allDay(), j2->dtStart(), j2->allDay()); return (res & Before || res & AtStart); } bool KCalendarCore::Journals::dateMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { DateTimeComparison res = compare(j1->dtStart(), j1->allDay(), j2->dtStart(), j2->allDay()); return (res & After || res & AtEnd); } bool KCalendarCore::Journals::summaryLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { return QString::compare(j1->summary(), j2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Journals::summaryMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2) { return QString::compare(j1->summary(), j2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Todos::startDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->dtStart(), t1->allDay(), t2->dtStart(), t2->allDay()); if (res == Equal) { return Todos::summaryLessThan(t1, t2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Todos::startDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->dtStart(), t1->allDay(), t2->dtStart(), t2->allDay()); if (res == Equal) { return Todos::summaryMoreThan(t1, t2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Todos::dueDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (!t1->hasDueDate()) { return false; } if (!t2->hasDueDate()) { return true; } DateTimeComparison res = compare(t1->dtDue(), t1->allDay(), t2->dtDue(), t2->allDay()); if (res == Equal) { return Todos::summaryLessThan(t1, t2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Todos::dueDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (!t2->hasDueDate()) { return false; } if (!t1->hasDueDate()) { return true; } DateTimeComparison res = compare(t1->dtDue(), t1->allDay(), t2->dtDue(), t2->allDay()); if (res == Equal) { return Todos::summaryMoreThan(t1, t2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Todos::priorityLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->priority() < t2->priority()) { return true; } else if (t1->priority() == t2->priority()) { return Todos::summaryLessThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::priorityMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->priority() > t2->priority()) { return true; } else if (t1->priority() == t2->priority()) { return Todos::summaryMoreThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::percentLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->percentComplete() < t2->percentComplete()) { return true; } else if (t1->percentComplete() == t2->percentComplete()) { return Todos::summaryLessThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::percentMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { if (t1->percentComplete() > t2->percentComplete()) { return true; } else if (t1->percentComplete() == t2->percentComplete()) { return Todos::summaryMoreThan(t1, t2); } else { return false; } } bool KCalendarCore::Todos::summaryLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { return QString::compare(t1->summary(), t2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Todos::summaryMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { return QString::compare(t1->summary(), t2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Todos::createdLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->created(), t1->allDay(), t2->created(), t2->allDay()); if (res == Equal) { return Todos::summaryLessThan(t1, t2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Todos::createdMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2) { DateTimeComparison res = compare(t1->created(), t1->allDay(), t2->created(), t2->allDay()); if (res == Equal) { return Todos::summaryMoreThan(t1, t2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Incidences::dateLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->dateTime(Incidence::RoleSort), i1->allDay(), i2->dateTime(Incidence::RoleSort), i2->allDay()); if (res == Equal) { return Incidences::summaryLessThan(i1, i2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Incidences::dateMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->dateTime(Incidence::RoleSort), i1->allDay(), i2->dateTime(Incidence::RoleSort), i2->allDay()); if (res == Equal) { return Incidences::summaryMoreThan(i1, i2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Incidences::createdLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->created(), i1->allDay(), i2->created(), i2->allDay()); if (res == Equal) { return Incidences::summaryLessThan(i1, i2); } else { return (res & Before || res & AtStart); } } bool KCalendarCore::Incidences::createdMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { DateTimeComparison res = compare(i1->created(), i1->allDay(), i2->created(), i2->allDay()); if (res == Equal) { return Incidences::summaryMoreThan(i1, i2); } else { return (res & After || res & AtEnd); } } bool KCalendarCore::Incidences::summaryLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { return QString::compare(i1->summary(), i2->summary(), Qt::CaseInsensitive) < 0; } bool KCalendarCore::Incidences::summaryMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { return QString::compare(i1->summary(), i2->summary(), Qt::CaseInsensitive) > 0; } bool KCalendarCore::Incidences::categoriesLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { const auto res = QString::compare(i1->categoriesStr(), i2->categoriesStr(), Qt::CaseSensitive); if (res == 0) { return Incidences::summaryLessThan(i1, i2); } else { return res < 0; } } bool KCalendarCore::Incidences::categoriesMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2) { const auto res = QString::compare(i1->categoriesStr(), i2->categoriesStr(), Qt::CaseSensitive); if (res == 0) { return Incidences::summaryMoreThan(i1, i2); } else { return res > 0; } } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/sorting.h000066400000000000000000000065761523260663500257760ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_SORTING_H #define KCALCORE_SORTING_H #include "event.h" #include "freebusy.h" #include "journal.h" #include "person.h" #include "todo.h" namespace KCalendarCore { namespace Events { Q_CORE_EXPORT bool startDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool summaryLessThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool summaryMoreThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool startDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool endDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2); Q_CORE_EXPORT bool endDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2); } // namespace Events namespace Todos { Q_CORE_EXPORT bool startDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool startDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool dueDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool dueDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool priorityLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool priorityMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool percentLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool percentMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool summaryLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool summaryMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool createdLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2); Q_CORE_EXPORT bool createdMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2); } // namespace Todos namespace Journals { Q_CORE_EXPORT bool dateLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2); Q_CORE_EXPORT bool dateMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2); Q_CORE_EXPORT bool summaryLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2); Q_CORE_EXPORT bool summaryMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2); } // namespace Journals namespace Incidences { Q_CORE_EXPORT bool dateLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool dateMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool createdLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool createdMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool summaryLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); Q_CORE_EXPORT bool summaryMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); /** * Compare the categories (tags) of two incidences, as returned by categoriesStr(). * If they are equal, return summaryLessThan(). * @since 5.83 */ Q_CORE_EXPORT bool categoriesLessThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); /** * Compare the categories (tags) of two incidences, as returned by categoriesStr(). * If they are equal, return summaryMoreThan(). * @since 5.83 */ Q_CORE_EXPORT bool categoriesMoreThan(const Incidence::Ptr &i1, const Incidence::Ptr &i2); } // namespace Incidences } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/todo.cpp000066400000000000000000000350311523260663500255750ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2009 Allen Winter SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Todo class. @brief Provides a To-do in the sense of RFC2445. @author Cornelius Schumacher \ @author Allen Winter \ */ #include "todo.h" #include "recurrence.h" #include "utils_p.h" #include "visitor.h" #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE class Q_DECL_HIDDEN KCalendarCore::Todo::Private { public: Private() { } Private(const KCalendarCore::Todo::Private &other) { init(other); } void init(const KCalendarCore::Todo::Private &other); QDateTime mDtDue; // to-do due date (if there is one) // ALSO the first occurrence of a recurring to-do QDateTime mDtRecurrence; // next occurrence (for recurring to-dos) QDateTime mCompleted; // to-do completion date (if it has been completed) int mPercentComplete = 0; // to-do percent complete [0,100] /** Returns true if the todo got a new date, else false will be returned. */ bool recurTodo(Todo *todo); }; void KCalendarCore::Todo::Private::init(const KCalendarCore::Todo::Private &other) { mDtDue = other.mDtDue; mDtRecurrence = other.mDtRecurrence; mCompleted = other.mCompleted; mPercentComplete = other.mPercentComplete; } //@endcond Todo::Todo() : d(new KCalendarCore::Todo::Private) { } Todo::Todo(const Todo &other) : Incidence(other) , d(new KCalendarCore::Todo::Private(*other.d)) { } Todo::Todo(const Incidence &other) : Incidence(other) , d(new KCalendarCore::Todo::Private) { } Todo::~Todo() { delete d; } Todo *Todo::clone() const { return new Todo(*this); } IncidenceBase &Todo::assign(const IncidenceBase &other) { if (&other != this) { Incidence::assign(other); const Todo *t = static_cast(&other); d->init(*(t->d)); } return *this; } bool Todo::equals(const IncidenceBase &todo) const { if (!Incidence::equals(todo)) { return false; } else { // If they weren't the same type IncidenceBase::equals would had returned false already const Todo *t = static_cast(&todo); return ((dtDue() == t->dtDue()) || (!dtDue().isValid() && !t->dtDue().isValid())) && hasDueDate() == t->hasDueDate() && hasStartDate() == t->hasStartDate() && ((completed() == t->completed()) || (!completed().isValid() && !t->completed().isValid())) && hasCompletedDate() == t->hasCompletedDate() && percentComplete() == t->percentComplete(); } } Incidence::IncidenceType Todo::type() const { return TypeTodo; } QByteArray Todo::typeStr() const { return QByteArrayLiteral("Todo"); } void Todo::setDtDue(const QDateTime &dtDue, bool first) { startUpdates(); // int diffsecs = d->mDtDue.secsTo(dtDue); /*if (mReadOnly) return; const Alarm::List& alarms = alarms(); for (Alarm *alarm = alarms.first(); alarm; alarm = alarms.next()) { if (alarm->enabled()) { alarm->setTime(alarm->time().addSecs(diffsecs)); } }*/ if (recurs() && !first) { d->mDtRecurrence = dtDue; } else { d->mDtDue = dtDue; } if (recurs() && dtDue.isValid() && (!dtStart().isValid() || dtDue < recurrence()->startDateTime())) { qDebug() << "To-do recurrences are now calculated against DTSTART. Fixing legacy to-do."; setDtStart(dtDue); } /*const Alarm::List& alarms = alarms(); for (Alarm *alarm = alarms.first(); alarm; alarm = alarms.next()) alarm->setAlarmStart(d->mDtDue);*/ setFieldDirty(FieldDtDue); endUpdates(); } QDateTime Todo::dtDue(bool first) const { if (!hasDueDate()) { return QDateTime(); } const QDateTime start = IncidenceBase::dtStart(); if (recurs() && !first && d->mDtRecurrence.isValid()) { if (start.isValid()) { // This is the normal case, recurring to-dos have a valid DTSTART. const qint64 duration = start.daysTo(d->mDtDue); QDateTime dt = d->mDtRecurrence.addDays(duration); dt.setTime(d->mDtDue.time()); return dt; } else { // This is a legacy case, where recurrence was calculated against DTDUE return d->mDtRecurrence; } } return d->mDtDue; } bool Todo::hasDueDate() const { return d->mDtDue.isValid(); } bool Todo::hasStartDate() const { return IncidenceBase::dtStart().isValid(); } QDateTime Todo::dtStart() const { return dtStart(/*first=*/false); } QDateTime Todo::dtStart(bool first) const { if (!hasStartDate()) { return QDateTime(); } if (recurs() && !first && d->mDtRecurrence.isValid()) { return d->mDtRecurrence; } else { return IncidenceBase::dtStart(); } } bool Todo::isCompleted() const { return d->mPercentComplete == 100 || status() == StatusCompleted || hasCompletedDate(); } void Todo::setCompleted(bool completed) { update(); if (completed) { d->mPercentComplete = 100; } else { d->mPercentComplete = 0; if (hasCompletedDate()) { d->mCompleted = QDateTime(); setFieldDirty(FieldCompleted); } } setFieldDirty(FieldPercentComplete); updated(); setStatus(completed ? StatusCompleted : StatusNone); // Calls update()/updated(). } QDateTime Todo::completed() const { if (hasCompletedDate()) { return d->mCompleted; } else { return QDateTime(); } } void Todo::setCompleted(const QDateTime &completed) { update(); if (!d->recurTodo(this)) { if (d->mPercentComplete != 100) { d->mPercentComplete = 100; setFieldDirty(FieldPercentComplete); } if (d->mCompleted.isValid() != completed.isValid()) { d->mCompleted = completed.toUTC(); setFieldDirty(FieldCompleted); } } updated(); if (status() != StatusNone) { setStatus(StatusCompleted); // Calls update()/updated() } } bool Todo::hasCompletedDate() const { return d->mCompleted.isValid(); } int Todo::percentComplete() const { return d->mPercentComplete; } void Todo::setPercentComplete(int percent) { if (percent > 100) { percent = 100; } else if (percent < 0) { percent = 0; } update(); if (percent != d->mPercentComplete) { d->mPercentComplete = percent; setFieldDirty(FieldPercentComplete); } if (percent != 100 && d->mCompleted.isValid()) { d->mCompleted = QDateTime(); setFieldDirty(FieldCompleted); } updated(); if (percent != 100 && status() == Incidence::StatusCompleted) { setStatus(Incidence::StatusNone); // Calls update()/updated(). } } bool Todo::isInProgress(bool first) const { if (isOverdue()) { return false; } if (d->mPercentComplete > 0) { return true; } if (hasStartDate() && hasDueDate()) { if (allDay()) { QDate currDate = QDate::currentDate(); if (dtStart(first).date() <= currDate && currDate < dtDue(first).date()) { return true; } } else { QDateTime currDate = QDateTime::currentDateTimeUtc(); if (dtStart(first) <= currDate && currDate < dtDue(first)) { return true; } } } return false; } bool Todo::isOpenEnded() const { if (!hasDueDate() && !isCompleted()) { return true; } return false; } bool Todo::isNotStarted(bool first) const { if (d->mPercentComplete > 0) { return false; } if (!hasStartDate()) { return false; } if (allDay()) { if (dtStart(first).date() >= QDate::currentDate()) { return false; } } else { if (dtStart(first) >= QDateTime::currentDateTimeUtc()) { return false; } } return true; } void Todo::shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) { Incidence::shiftTimes(oldZone, newZone); d->mDtDue = d->mDtDue.toTimeZone(oldZone); d->mDtDue.setTimeZone(newZone); if (recurs()) { d->mDtRecurrence = d->mDtRecurrence.toTimeZone(oldZone); d->mDtRecurrence.setTimeZone(newZone); } if (hasCompletedDate()) { d->mCompleted = d->mCompleted.toTimeZone(oldZone); d->mCompleted.setTimeZone(newZone); } } void Todo::setDtRecurrence(const QDateTime &dt) { d->mDtRecurrence = dt; setFieldDirty(FieldRecurrence); } QDateTime Todo::dtRecurrence() const { return d->mDtRecurrence.isValid() ? d->mDtRecurrence : d->mDtDue; } bool Todo::recursOn(const QDate &date, const QTimeZone &timeZone) const { QDate today = QDate::currentDate(); return Incidence::recursOn(date, timeZone) && !(date < today && d->mDtRecurrence.date() < today && d->mDtRecurrence > recurrence()->startDateTime()); } bool Todo::isOverdue() const { if (!dtDue().isValid()) { return false; // if it's never due, it can't be overdue } const bool inPast = allDay() ? dtDue().date() < QDate::currentDate() : dtDue() < QDateTime::currentDateTimeUtc(); return inPast && !isCompleted(); } void Todo::setAllDay(bool allday) { if (allday != allDay() && !mReadOnly) { if (hasDueDate()) { setFieldDirty(FieldDtDue); } Incidence::setAllDay(allday); } } //@cond PRIVATE bool Todo::Private::recurTodo(Todo *todo) { if (todo && todo->recurs()) { Recurrence *r = todo->recurrence(); const QDateTime recurrenceEndDateTime = r->endDateTime(); QDateTime nextOccurrenceDateTime = r->getNextDateTime(todo->dtStart()); if ((r->duration() == -1 || (nextOccurrenceDateTime.isValid() && recurrenceEndDateTime.isValid() && nextOccurrenceDateTime <= recurrenceEndDateTime))) { // We convert to the same timeSpec so we get the correct .date() const auto rightNow = QDateTime::currentDateTimeUtc().toTimeZone(nextOccurrenceDateTime.timeZone()); const bool isDateOnly = todo->allDay(); /* Now we search for the occurrence that's _after_ the currentUtcDateTime, or * if it's dateOnly, the occurrrence that's _during or after today_. * The reason we use "<" for date only, but "<=" for occurrences with time is that * if it's date only, the user can still complete that occurrence today, so that's * the current occurrence that needs completing. */ while (!todo->recursAt(nextOccurrenceDateTime) || (!isDateOnly && nextOccurrenceDateTime <= rightNow) || (isDateOnly && nextOccurrenceDateTime.date() < rightNow.date())) { if (!nextOccurrenceDateTime.isValid() || (nextOccurrenceDateTime > recurrenceEndDateTime && r->duration() != -1)) { return false; } nextOccurrenceDateTime = r->getNextDateTime(nextOccurrenceDateTime); } todo->setDtRecurrence(nextOccurrenceDateTime); todo->setCompleted(false); todo->setRevision(todo->revision() + 1); return true; } } return false; } //@endcond bool Todo::accept(Visitor &v, const IncidenceBase::Ptr &incidence) { return v.visit(incidence.staticCast()); } QDateTime Todo::dateTime(DateTimeRole role) const { switch (role) { case RoleAlarmStartOffset: return dtStart(); case RoleAlarmEndOffset: return dtDue(); case RoleSort: // Sorting to-dos first compares dtDue, then dtStart if // dtDue doesn't exist return hasDueDate() ? dtDue() : dtStart(); case RoleCalendarHashing: return dtDue(); case RoleStartTimeZone: return dtStart(); case RoleEndTimeZone: return dtDue(); case RoleEndRecurrenceBase: return dtDue(); case RoleDisplayStart: case RoleDisplayEnd: return dtDue().isValid() ? dtDue() : dtStart(); case RoleAlarm: if (alarms().isEmpty()) { return QDateTime(); } else { Alarm::Ptr alarm = alarms().at(0); if (alarm->hasStartOffset() && hasStartDate()) { return dtStart(); } else if (alarm->hasEndOffset() && hasDueDate()) { return dtDue(); } else { // The application shouldn't add alarms on to-dos without dates. return QDateTime(); } } case RoleRecurrenceStart: if (dtStart().isValid()) { return dtStart(); } return dtDue(); // For the sake of backwards compatibility // where we calculated recurrences based on dtDue case RoleEnd: return dtDue(); default: return QDateTime(); } } void Todo::setDateTime(const QDateTime &dateTime, DateTimeRole role) { switch (role) { case RoleDnD: setDtDue(dateTime); break; case RoleEnd: setDtDue(dateTime, true); break; default: qDebug() << "Unhandled role" << role; } } void Todo::virtual_hook(VirtualHook id, void *data) { Q_UNUSED(id); Q_UNUSED(data); } QLatin1String Todo::mimeType() const { return Todo::todoMimeType(); } QLatin1String Todo::todoMimeType() { return QLatin1String("application/x-vnd.akonadi.calendar.todo"); } QLatin1String Todo::iconName(const QDateTime &recurrenceId) const { const bool usesCompletedTaskPixmap = isCompleted() || (recurs() && recurrenceId.isValid() && (recurrenceId < dtStart(/*first=*/false))); if (usesCompletedTaskPixmap) { return QLatin1String("task-complete"); } else { return QLatin1String("view-calendar-tasks"); } } void Todo::serialize(QDataStream &out) const { Incidence::serialize(out); serializeQDateTimeAsKDateTime(out, d->mDtDue); serializeQDateTimeAsKDateTime(out, d->mDtRecurrence); serializeQDateTimeAsKDateTime(out, d->mCompleted); out << d->mPercentComplete; } void Todo::deserialize(QDataStream &in) { Incidence::deserialize(in); deserializeKDateTimeAsQDateTime(in, d->mDtDue); deserializeKDateTimeAsQDateTime(in, d->mDtRecurrence); deserializeKDateTimeAsQDateTime(in, d->mCompleted); in >> d->mPercentComplete; } bool Todo::supportsGroupwareCommunication() const { return true; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/todo.h000066400000000000000000000254561523260663500252540ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2009 Allen Winter SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the Todo class. @author Cornelius Schumacher \ @author Allen Winter \ */ #ifndef KCALCORE_TODO_H #define KCALCORE_TODO_H #include "incidence.h" namespace KCalendarCore { /** @brief Provides a To-do in the sense of RFC2445. */ class Q_CORE_EXPORT Todo : public Incidence { public: /** A shared pointer to a Todo object. */ typedef QSharedPointer Ptr; /** List of to-dos. */ typedef QVector List; ///@cond PRIVATE // needed for Akonadi polymorphic payload support typedef Incidence SuperClass; ///@endcond /** Constructs an empty to-do. */ Todo(); /** Copy constructor. @param other is the to-do to copy. */ Todo(const Todo &other); /** Costructs a todo out of an incidence This constructs allows to make it easy to create a todo from an event. @param other is the incidence to copy. @since 4.14 */ Todo(const Incidence &other); // krazy:exclude=explicit (copy ctor) /** Destroys a to-do. */ ~Todo() override; /** @copydoc IncidenceBase::type() */ Q_REQUIRED_RESULT IncidenceType type() const override; /** @copydoc IncidenceBase::typeStr() */ Q_REQUIRED_RESULT QByteArray typeStr() const override; /** Returns an exact copy of this todo. The returned object is owned by the caller. @return A pointer to a Todo containing an exact copy of this object. */ Todo *clone() const override; /** Sets due date and time. @param dtDue The due date/time. @param first If true and the todo recurs, the due date of the first occurrence will be returned. If false and recurrent, the date of the current occurrence will be returned. If non-recurrent, the normal due date will be returned. */ void setDtDue(const QDateTime &dtDue, bool first = false); /** Returns the todo due datetime. @param first If true and the todo recurs, the due datetime of the first occurrence will be returned. If false and recurrent, the datetime of the current occurrence will be returned. If non-recurrent, the normal due datetime will be returned. @return A QDateTime containing the todo due datetime. */ Q_REQUIRED_RESULT QDateTime dtDue(bool first = false) const; /** Returns if the todo has a due datetime. @return true if the todo has a due datetime; false otherwise. */ Q_REQUIRED_RESULT bool hasDueDate() const; /** Returns if the todo has a start datetime. @return true if the todo has a start datetime; false otherwise. */ Q_REQUIRED_RESULT bool hasStartDate() const; /** @copydoc IncidenceBase::dtStart() */ Q_REQUIRED_RESULT QDateTime dtStart() const override; /** Returns the start datetime of the todo. @param first If true, the start datetime of the todo will be returned; also, if the todo recurs, the start datetime of the first occurrence will be returned. If false and the todo recurs, the relative start datetime will be returned, based on the datetime returned by dtRecurrence(). @return A QDateTime for the start datetime of the todo. */ Q_REQUIRED_RESULT QDateTime dtStart(bool first) const; /** Returns whether the todo is completed or not. @return true if the todo is 100% completed, has status @c StatusCompleted, or has a completed date; false otherwise. @see isOverdue, isInProgress(), isOpenEnded(), isNotStarted(bool), setCompleted(), percentComplete() */ Q_REQUIRED_RESULT bool isCompleted() const; /** Sets completion percentage and status. @param completed If @c true, percentage complete is set to 100%, and status is set to @c StatusCompleted; the completion date is @b not set or cleared. If @c false, percentage complete is set to 0%, status is set to @c StatusNone, and the completion date is cleared. @see isCompleted(), percentComplete(), hasCompletedDate() */ void setCompleted(bool completed); /** Returns what percentage of the to-do is completed. @return The percentage complete of the to-do as an integer between 0 and 100, inclusive. @see setPercentComplete(), isCompleted() */ Q_REQUIRED_RESULT int percentComplete() const; /** Sets what percentage of the to-do is completed. To prevent inconsistency, if @p percent is not 100, completed() is cleared, and if status() is StatusCompleted it is reset to StatusNone. @param percent is the completion percentage. Values greater than 100 are treated as 100; values less than p are treated as 0. @see isCompleted(), setCompleted() */ void setPercentComplete(int percent); /** Returns the to-do was completion datetime. @return A QDateTime for the completion datetime of the to-do. @see hasCompletedDate() */ Q_REQUIRED_RESULT QDateTime completed() const; /** Marks this Todo, or its current recurrence, as completed. If the todo does not recur, its completion percentage is set to 100%, and its completion date is set to @p completeDate. If its status is not StatusNone, it is set to StatusCompleted. @note If @p completeDate is invalid, the completion date is cleared, but the todo is still "complete". If the todo recurs, the first incomplete recurrence is marked complete. @param completeDate is the to-do completion date. @see completed(), hasCompletedDate() */ void setCompleted(const QDateTime &completeDate); /** Returns if the to-do has a completion datetime. @return true if the to-do has a date associated with completion; false otherwise. @see setCompleted(), completed() */ bool hasCompletedDate() const; /** Returns true, if the to-do is in-progress (started, or >0% completed); otherwise return false. If the to-do is overdue, then it is not considered to be in-progress. @param first If true, the start and due dates of the todo will be used; also, if the todo recurs, the start date and due date of the first occurrence will be used. If false and the todo recurs, the relative start and due dates will be used, based on the date returned by dtRecurrence(). @see isOverdue(), isCompleted(), isOpenEnded(), isNotStarted(bool) */ Q_REQUIRED_RESULT bool isInProgress(bool first) const; /** Returns true, if the to-do is open-ended (no due date); false otherwise. @see isOverdue(), isCompleted(), isInProgress(), isNotStarted(bool) */ Q_REQUIRED_RESULT bool isOpenEnded() const; /** Returns true, if the to-do has yet to be started (no start date and 0% completed); otherwise return false. @param first If true, the start date of the todo will be used; also, if the todo recurs, the start date of the first occurrence will be used. If false and the todo recurs, the relative start date will be used, based on the date returned by dtRecurrence(). @see isOverdue(), isCompleted(), isInProgress(), isOpenEnded() */ Q_REQUIRED_RESULT bool isNotStarted(bool first) const; /** @copydoc IncidenceBase::shiftTimes() */ void shiftTimes(const QTimeZone &oldZone, const QTimeZone &newZone) override; /** @copydoc IncidenceBase::setAllDay(). */ void setAllDay(bool allDay) override; /** Sets the due date/time of the current occurrence if recurrent. @param dt is the */ void setDtRecurrence(const QDateTime &dt); /** Returns the due date/time of the current occurrence if recurrent. */ Q_REQUIRED_RESULT QDateTime dtRecurrence() const; /** Returns true if the @p date specified is one on which the to-do will recur. Todos are a special case, hence the overload. It adds an extra check, which make it return false if there's an occurrence between the recur start and today. @param date is the date to check. @param timeZone is the time zone */ bool recursOn(const QDate &date, const QTimeZone &timeZone) const override; /** Returns true if this todo is overdue (e.g. due date is lower than today and not completed), else false. @see isCompleted(), isInProgress(), isOpenEnded(), isNotStarted(bool) */ bool isOverdue() const; /** @copydoc IncidenceBase::dateTime() */ Q_REQUIRED_RESULT QDateTime dateTime(DateTimeRole role) const override; /** @copydoc IncidenceBase::setDateTime() */ void setDateTime(const QDateTime &dateTime, DateTimeRole role) override; /** @copydoc IncidenceBase::mimeType() */ Q_REQUIRED_RESULT QLatin1String mimeType() const override; /** @copydoc Incidence::iconName() */ Q_REQUIRED_RESULT QLatin1String iconName(const QDateTime &recurrenceId = {}) const override; /** @copydoc Incidence::supportsGroupwareCommunication() */ bool supportsGroupwareCommunication() const override; /** Returns the Akonadi specific sub MIME type of a KCalendarCore::Todo. */ Q_REQUIRED_RESULT static QLatin1String todoMimeType(); protected: /** Compare this with @p todo for equality. @param todo is the to-do to compare. */ bool equals(const IncidenceBase &todo) const override; /** @copydoc IncidenceBase::assign() */ IncidenceBase &assign(const IncidenceBase &other) override; /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(VirtualHook id, void *data) override; private: /** @copydoc IncidenceBase::accept() */ bool accept(Visitor &v, const IncidenceBase::Ptr &incidence) override; /** Disabled, otherwise could be dangerous if you subclass Todo. Use IncidenceBase::operator= which is safe because it calls virtual function assign(). @param other is another Todo object to assign to this one. */ Todo &operator=(const Todo &other); // For polymorfic serialization void serialize(QDataStream &out) const override; void deserialize(QDataStream &in) override; //@cond PRIVATE class Private; Private *const d; //@endcond }; } // namespace KCalendarCore //@cond PRIVATE Q_DECLARE_TYPEINFO(KCalendarCore::Todo::Ptr, Q_MOVABLE_TYPE); Q_DECLARE_METATYPE(KCalendarCore::Todo::Ptr) Q_DECLARE_METATYPE(KCalendarCore::Todo *) //@endcond #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/utils.cpp000066400000000000000000000055551523260663500260000ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2017 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #include "utils_p.h" #include #include // To remain backwards compatible we need to (de)serialize QDateTime the way KDateTime // was (de)serialized void KCalendarCore::serializeQDateTimeAsKDateTime(QDataStream &out, const QDateTime &dt) { out << dt.date() << dt.time(); switch (dt.timeSpec()) { case Qt::UTC: out << static_cast('u'); break; case Qt::OffsetFromUTC: out << static_cast('o') << dt.offsetFromUtc(); break; case Qt::TimeZone: serializeQTimeZoneAsSpec(out, dt.timeZone()); break; case Qt::LocalTime: out << static_cast('c'); break; } const bool isDateOnly = dt.date().isValid() && !dt.time().isValid(); out << quint8(isDateOnly ? 0x01 : 0x00); } void KCalendarCore::deserializeKDateTimeAsQDateTime(QDataStream &in, QDateTime &dt) { QDate date; QTime time; quint8 ts, flags; in >> date >> time >> ts; switch (static_cast(ts)) { case 'u': dt = QDateTime(date, time, Qt::UTC); break; case 'o': { int offset; in >> offset; dt = QDateTime(date, time, Qt::OffsetFromUTC, offset); break; } case 'z': { QString tzid; in >> tzid; dt = QDateTime(date, time, QTimeZone(tzid.toUtf8())); break; } case 'c': dt = QDateTime(date, time, Qt::LocalTime); break; } // unused, we don't have a special handling for date-only QDateTime in >> flags; } void KCalendarCore::serializeQTimeZoneAsSpec(QDataStream &out, const QTimeZone &tz) { out << static_cast('z') << (tz.isValid() ? QString::fromUtf8(tz.id()) : QString()); } void KCalendarCore::deserializeSpecAsQTimeZone(QDataStream &in, QTimeZone &tz) { quint8 ts; in >> ts; switch (static_cast(ts)) { case 'u': tz = QTimeZone::utc(); return; case 'o': { int offset; in >> offset; tz = QTimeZone(offset); return; } case 'z': { QString tzid; in >> tzid; tz = QTimeZone(tzid.toUtf8()); return; } case 'c': tz = QTimeZone::systemTimeZone(); break; } } void KCalendarCore::serializeQDateTimeList(QDataStream &out, const QList &list) { out << list.size(); for (const auto &i : list) { serializeQDateTimeAsKDateTime(out, i); } } void KCalendarCore::deserializeQDateTimeList(QDataStream &in, QList &list) { int size; in >> size; list.clear(); list.reserve(size); for (int i = 0; i < size; ++i) { QDateTime dt; deserializeKDateTimeAsQDateTime(in, dt); list << dt; } } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/utils_p.h000066400000000000000000000015131523260663500257520ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2017 Daniel Vrátil SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_UTILS_H #define KCALCORE_UTILS_H #include class QDataStream; namespace KCalendarCore { /** * Helpers to retain backwards compatibility of binary serialization. */ void serializeQDateTimeAsKDateTime(QDataStream &out, const QDateTime &dt); Q_CORE_EXPORT void deserializeKDateTimeAsQDateTime(QDataStream &in, QDateTime &dt); void serializeQDateTimeList(QDataStream &out, const QList &list); void deserializeQDateTimeList(QDataStream &in, QList &list); void serializeQTimeZoneAsSpec(QDataStream &out, const QTimeZone &tz); void deserializeSpecAsQTimeZone(QDataStream &in, QTimeZone &tz); } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/vcalformat.cpp000066400000000000000000001745351523260663500270030ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the VCalFormat base class. This class implements the vCalendar format. It provides methods for loading/saving/converting vCalendar format data into the internal representation as Calendar and Incidences. @brief vCalendar format implementation. @author Preston Brown \ @author Cornelius Schumacher \ */ #include "vcalformat.h" #include "calendar.h" #include "exceptions.h" extern "C" { #include "libical/vcc.h" #include "libical/vobject.h" } #include #include #include // for .toHtmlEscaped() and Qt::mightBeRichText() #include #include using namespace KCalendarCore; /** Private class that helps to provide binary compatibility between releases. @internal */ //@cond PRIVATE template void removeAllVCal(QVector> &c, const QSharedPointer &x) { if (c.count() < 1) { return; } int cnt = c.count(x); if (cnt != 1) { qCritical() << "There number of relatedTos for this incidence is " << cnt << " (there must be 1 relatedTo only)"; Q_ASSERT_X(false, "removeAllVCal", "Count is not 1."); return; } c.remove(c.indexOf(x)); } class Q_DECL_HIDDEN KCalendarCore::VCalFormat::Private { public: Calendar::Ptr mCalendar; Event::List mEventsRelate; // Events with relations Todo::List mTodosRelate; // To-dos with relations QSet mManuallyWrittenExtensionFields; // X- fields that are manually dumped }; //@endcond VCalFormat::VCalFormat() : d(new KCalendarCore::VCalFormat::Private) { } VCalFormat::~VCalFormat() { delete d; } bool VCalFormat::load(const Calendar::Ptr &calendar, const QString &fileName) { d->mCalendar = calendar; clearException(); // this is not necessarily only 1 vcal. Could be many vcals, or include // a vcard... VObject *vcal = Parse_MIME_FromFileName(const_cast(QFile::encodeName(fileName).data())); if (!vcal) { setException(new Exception(Exception::CalVersionUnknown)); return false; } // any other top-level calendar stuff should be added/initialized here // put all vobjects into their proper places auto savedTimeZoneId = d->mCalendar->timeZoneId(); populate(vcal, false, fileName); d->mCalendar->setTimeZoneId(savedTimeZoneId); // clean up from vcal API stuff cleanVObjects(vcal); cleanStrTbl(); return true; } bool VCalFormat::save(const Calendar::Ptr &calendar, const QString &fileName) { Q_UNUSED(calendar); Q_UNUSED(fileName); qWarning() << "Saving VCAL is not supported"; return false; } bool VCalFormat::fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted, const QString ¬ebook) { return fromRawString(calendar, string.toUtf8(), deleted, notebook); } bool VCalFormat::fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted, const QString ¬ebook) { d->mCalendar = calendar; if (!string.size()) { return false; } VObject *vcal = Parse_MIME(string.data(), string.size()); if (!vcal) { return false; } VObjectIterator i; initPropIterator(&i, vcal); // put all vobjects into their proper places auto savedTimeZoneId = d->mCalendar->timeZoneId(); populate(vcal, deleted, notebook); d->mCalendar->setTimeZoneId(savedTimeZoneId); // clean up from vcal API stuff cleanVObjects(vcal); cleanStrTbl(); return true; } QString VCalFormat::toString(const Calendar::Ptr &calendar, const QString ¬ebook, bool deleted) { Q_UNUSED(calendar); Q_UNUSED(notebook); Q_UNUSED(deleted); qWarning() << "Exporting into VCAL is not supported"; return {}; } Todo::Ptr VCalFormat::VTodoToEvent(VObject *vtodo) { VObject *vo = nullptr; VObjectIterator voi; char *s = nullptr; Todo::Ptr anEvent(new Todo); // creation date if ((vo = isAPropertyOf(vtodo, VCDCreatedProp)) != nullptr) { anEvent->setCreated(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } // unique id vo = isAPropertyOf(vtodo, VCUniqueStringProp); // while the UID property is preferred, it is not required. We'll use the // default Event UID if none is given. if (vo) { anEvent->setUid(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } // last modification date if ((vo = isAPropertyOf(vtodo, VCLastModifiedProp)) != nullptr) { anEvent->setLastModified(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } else { anEvent->setLastModified(QDateTime::currentDateTimeUtc()); } // organizer // if our extension property for the event's ORGANIZER exists, add it. if ((vo = isAPropertyOf(vtodo, ICOrganizerProp)) != nullptr) { anEvent->setOrganizer(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } else { if (d->mCalendar->owner().name() != QLatin1String("Unknown Name")) { anEvent->setOrganizer(d->mCalendar->owner()); } } // attendees. initPropIterator(&voi, vtodo); while (moreIteration(&voi)) { vo = nextVObject(&voi); if (strcmp(vObjectName(vo), VCAttendeeProp) == 0) { Attendee a; VObject *vp; s = fakeCString(vObjectUStringZValue(vo)); QString tmpStr = QString::fromUtf8(s); deleteStr(s); tmpStr = tmpStr.simplified(); int emailPos1; if ((emailPos1 = tmpStr.indexOf(QLatin1Char('<'))) > 0) { // both email address and name int emailPos2 = tmpStr.lastIndexOf(QLatin1Char('>')); a = Attendee(tmpStr.left(emailPos1 - 1), tmpStr.mid(emailPos1 + 1, emailPos2 - (emailPos1 + 1))); } else if (tmpStr.indexOf(QLatin1Char('@')) > 0) { // just an email address a = Attendee(QString(), tmpStr); } else { // just a name // WTF??? Replacing the spaces of a name and using this as email? QString email = tmpStr.replace(QLatin1Char(' '), QLatin1Char('.')); a = Attendee(tmpStr, email); } // is there an RSVP property? if ((vp = isAPropertyOf(vo, VCRSVPProp)) != nullptr) { a.setRSVP(vObjectStringZValue(vp)); } // is there a status property? if ((vp = isAPropertyOf(vo, VCStatusProp)) != nullptr) { a.setStatus(readStatus(vObjectStringZValue(vp))); } // add the attendee anEvent->addAttendee(a); } } // description for todo if ((vo = isAPropertyOf(vtodo, VCDescriptionProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setDescription(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // summary if ((vo = isAPropertyOf(vtodo, VCSummaryProp))) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setSummary(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // location if ((vo = isAPropertyOf(vtodo, VCLocationProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setLocation(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // completed // was: status if ((vo = isAPropertyOf(vtodo, VCStatusProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s && strcmp(s, "COMPLETED") == 0) { anEvent->setCompleted(true); } else { anEvent->setCompleted(false); } deleteStr(s); } else { anEvent->setCompleted(false); } // completion date if ((vo = isAPropertyOf(vtodo, VCCompletedProp)) != nullptr) { anEvent->setCompleted(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } // priority if ((vo = isAPropertyOf(vtodo, VCPriorityProp))) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { anEvent->setPriority(atoi(s)); deleteStr(s); } } anEvent->setAllDay(false); // due date if ((vo = isAPropertyOf(vtodo, VCDueProp)) != nullptr) { anEvent->setDtDue(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtDue().time().hour() == 0 && anEvent->dtDue().time().minute() == 0 && anEvent->dtDue().time().second() == 0) { anEvent->setAllDay(true); } } else { anEvent->setDtDue(QDateTime()); } // start time if ((vo = isAPropertyOf(vtodo, VCDTstartProp)) != nullptr) { anEvent->setDtStart(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtStart().time().hour() == 0 && anEvent->dtStart().time().minute() == 0 && anEvent->dtStart().time().second() == 0) { anEvent->setAllDay(true); } } else { anEvent->setDtStart(QDateTime()); } // recurrence stuff if ((vo = isAPropertyOf(vtodo, VCRRuleProp)) != nullptr) { uint recurrenceType = Recurrence::rNone; int recurrenceTypeAbbrLen = 0; QString tmpStr = (QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); tmpStr = tmpStr.simplified(); const int tmpStrLen = tmpStr.length(); if (tmpStrLen > 0) { tmpStr = tmpStr.toUpper(); // first, read the type of the recurrence recurrenceTypeAbbrLen = 1; if (tmpStr.at(0) == QLatin1Char('D')) { recurrenceType = Recurrence::rDaily; } else if (tmpStr.at(0) == QLatin1Char('W')) { recurrenceType = Recurrence::rWeekly; } else if (tmpStrLen > 1) { recurrenceTypeAbbrLen = 2; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) auto prefix = QStringView(tmpStr).left(2); #else auto prefix = tmpStr.leftRef(2); #endif if (prefix == QLatin1String("MP")) { recurrenceType = Recurrence::rMonthlyPos; } else if (prefix == QLatin1String("MD")) { recurrenceType = Recurrence::rMonthlyDay; } else if (prefix == QLatin1String("YM")) { recurrenceType = Recurrence::rYearlyMonth; } else if (prefix == QLatin1String("YD")) { recurrenceType = Recurrence::rYearlyDay; } } } if (recurrenceType != Recurrence::rNone) { // Immediately after the type is the frequency int index = tmpStr.indexOf(QLatin1Char(' ')); int last = tmpStr.lastIndexOf(QLatin1Char(' ')) + 1; // find last entry #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) int rFreq = QStringView(tmpStr).mid(recurrenceTypeAbbrLen, (index - 1)).toInt(); #else int rFreq = tmpStr.midRef(recurrenceTypeAbbrLen, (index - 1)).toInt(); #endif ++index; // advance to beginning of stuff after freq // Read the type-specific settings switch (recurrenceType) { case Recurrence::rDaily: anEvent->recurrence()->setDaily(rFreq); break; case Recurrence::rWeekly: { QBitArray qba(7); QString dayStr; if (index == last) { // e.g. W1 #0 qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); } else { // e.g. W1 SU #0 while (index < last) { dayStr = tmpStr.mid(index, 3); int dayNum = numFromDay(dayStr); if (dayNum >= 0) { qba.setBit(dayNum); } index += 3; // advance to next day, or possibly "#" } } anEvent->recurrence()->setWeekly(rFreq, qba); break; } case Recurrence::rMonthlyPos: { anEvent->recurrence()->setMonthly(rFreq); QBitArray qba(7); short tmpPos; if (index == last) { // e.g. MP1 #0 tmpPos = anEvent->dtStart().date().day() / 7 + 1; if (tmpPos == 5) { tmpPos = -1; } qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); anEvent->recurrence()->addMonthlyPos(tmpPos, qba); } else { // e.g. MP1 1+ SU #0 while (index < last) { tmpPos = tmpStr.mid(index, 1).toShort(); index += 1; if (tmpStr.mid(index, 1) == QLatin1String("-")) { // convert tmpPos to negative tmpPos = 0 - tmpPos; } index += 2; // advance to day(s) while (numFromDay(tmpStr.mid(index, 3)) >= 0) { int dayNum = numFromDay(tmpStr.mid(index, 3)); qba.setBit(dayNum); index += 3; // advance to next day, or possibly pos or "#" } anEvent->recurrence()->addMonthlyPos(tmpPos, qba); qba.detach(); qba.fill(false); // clear out } // while != "#" } break; } case Recurrence::rMonthlyDay: anEvent->recurrence()->setMonthly(rFreq); if (index == last) { // e.g. MD1 #0 short tmpDay = anEvent->dtStart().date().day(); anEvent->recurrence()->addMonthlyDate(tmpDay); } else { // e.g. MD1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); if ((tmpStr.mid((index2 - 1), 1) == QLatin1String("-")) || (tmpStr.mid((index2 - 1), 1) == QLatin1String("+"))) { index2 = index2 - 1; } short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2; if (tmpStr.mid(index, 1) == QLatin1String("-")) { tmpDay = 0 - tmpDay; } index += 2; // advance the index; anEvent->recurrence()->addMonthlyDate(tmpDay); } // while != # } break; case Recurrence::rYearlyMonth: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YM1 #0 short tmpMonth = anEvent->dtStart().date().month(); anEvent->recurrence()->addYearlyMonth(tmpMonth); } else { // e.g. YM1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpMonth = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyMonth(tmpMonth); } // while != # } break; case Recurrence::rYearlyDay: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YD1 #0 short tmpDay = anEvent->dtStart().date().dayOfYear(); anEvent->recurrence()->addYearlyDay(tmpDay); } else { // e.g. YD1 123 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyDay(tmpDay); } // while != # } break; default: break; } // find the last field, which is either the duration or the end date index = last; if (tmpStr.mid(index, 1) == QLatin1String("#")) { // Nr of occurrences index++; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) int rDuration = QStringView(tmpStr).mid(index, tmpStr.length() - index).toInt(); #else int rDuration = tmpStr.midRef(index, tmpStr.length() - index).toInt(); #endif if (rDuration > 0) { anEvent->recurrence()->setDuration(rDuration); } } else if (tmpStr.indexOf(QLatin1Char('T'), index) != -1) { QDateTime rEndDate = ISOToQDateTime(tmpStr.mid(index, tmpStr.length() - index)); anEvent->recurrence()->setEndDateTime(rEndDate); } } else { qDebug() << "we don't understand this type of recurrence!"; } // if known recurrence type } // repeats // recurrence exceptions if ((vo = isAPropertyOf(vtodo, VCExpDateProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QStringList exDates = QString::fromUtf8(s).split(QLatin1Char(',')); QStringList::ConstIterator it; for (it = exDates.constBegin(); it != exDates.constEnd(); ++it) { QDateTime exDate = ISOToQDateTime(*it); if (exDate.time().hour() == 0 && exDate.time().minute() == 0 && exDate.time().second() == 0) { anEvent->recurrence()->addExDate(ISOToQDate(*it)); } else { anEvent->recurrence()->addExDateTime(exDate); } } deleteStr(s); } // alarm stuff if ((vo = isAPropertyOf(vtodo, VCDAlarmProp))) { Alarm::Ptr alarm; VObject *a = isAPropertyOf(vo, VCRunTimeProp); VObject *b = isAPropertyOf(vo, VCDisplayStringProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setDisplayAlarm(QString::fromUtf8(s)); deleteStr(s); } else { alarm->setDisplayAlarm(QString()); } } } if ((vo = isAPropertyOf(vtodo, VCAAlarmProp))) { Alarm::Ptr alarm; VObject *a; VObject *b; a = isAPropertyOf(vo, VCRunTimeProp); b = isAPropertyOf(vo, VCAudioContentProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setAudioAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setAudioAlarm(QString()); } } } if ((vo = isAPropertyOf(vtodo, VCPAlarmProp))) { Alarm::Ptr alarm; VObject *a = isAPropertyOf(vo, VCRunTimeProp); VObject *b = isAPropertyOf(vo, VCProcedureNameProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setProcedureAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setProcedureAlarm(QString()); } } } // related todo if ((vo = isAPropertyOf(vtodo, VCRelatedToProp)) != nullptr) { anEvent->setRelatedTo(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); d->mTodosRelate.append(anEvent); } // secrecy Incidence::Secrecy secrecy = Incidence::SecrecyPublic; if ((vo = isAPropertyOf(vtodo, VCClassProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s && strcmp(s, "PRIVATE") == 0) { secrecy = Incidence::SecrecyPrivate; } else if (s && strcmp(s, "CONFIDENTIAL") == 0) { secrecy = Incidence::SecrecyConfidential; } deleteStr(s); } anEvent->setSecrecy(secrecy); // categories if ((vo = isAPropertyOf(vtodo, VCCategoriesProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QString categories = QString::fromUtf8(s); deleteStr(s); QStringList tmpStrList = categories.split(QLatin1Char(';')); anEvent->setCategories(tmpStrList); } return anEvent; } Event::Ptr VCalFormat::VEventToEvent(VObject *vevent) { VObject *vo = nullptr; VObjectIterator voi; char *s = nullptr; Event::Ptr anEvent(new Event); // creation date if ((vo = isAPropertyOf(vevent, VCDCreatedProp)) != nullptr) { anEvent->setCreated(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } // unique id vo = isAPropertyOf(vevent, VCUniqueStringProp); // while the UID property is preferred, it is not required. We'll use the // default Event UID if none is given. if (vo) { anEvent->setUid(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } // revision // again NSCAL doesn't give us much to work with, so we improvise... anEvent->setRevision(0); if ((vo = isAPropertyOf(vevent, VCSequenceProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { anEvent->setRevision(atoi(s)); deleteStr(s); } } // last modification date if ((vo = isAPropertyOf(vevent, VCLastModifiedProp)) != nullptr) { anEvent->setLastModified(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); } else { anEvent->setLastModified(QDateTime::currentDateTimeUtc()); } // organizer // if our extension property for the event's ORGANIZER exists, add it. if ((vo = isAPropertyOf(vevent, ICOrganizerProp)) != nullptr) { // FIXME: Also use the full name, not just the email address anEvent->setOrganizer(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); } else { if (d->mCalendar->owner().name() != QLatin1String("Unknown Name")) { anEvent->setOrganizer(d->mCalendar->owner()); } } // deal with attendees. initPropIterator(&voi, vevent); while (moreIteration(&voi)) { vo = nextVObject(&voi); if (strcmp(vObjectName(vo), VCAttendeeProp) == 0) { Attendee a; VObject *vp = nullptr; s = fakeCString(vObjectUStringZValue(vo)); QString tmpStr = QString::fromUtf8(s); deleteStr(s); tmpStr = tmpStr.simplified(); int emailPos1; if ((emailPos1 = tmpStr.indexOf(QLatin1Char('<'))) > 0) { // both email address and name int emailPos2 = tmpStr.lastIndexOf(QLatin1Char('>')); a = Attendee(tmpStr.left(emailPos1 - 1), tmpStr.mid(emailPos1 + 1, emailPos2 - (emailPos1 + 1))); } else if (tmpStr.indexOf(QLatin1Char('@')) > 0) { // just an email address a = Attendee(QString(), tmpStr); } else { // just a name QString email = tmpStr.replace(QLatin1Char(' '), QLatin1Char('.')); a = Attendee(tmpStr, email); } // is there an RSVP property? if ((vp = isAPropertyOf(vo, VCRSVPProp)) != nullptr) { a.setRSVP(vObjectStringZValue(vp)); } // is there a status property? if ((vp = isAPropertyOf(vo, VCStatusProp)) != nullptr) { a.setStatus(readStatus(vObjectStringZValue(vp))); } // add the attendee anEvent->addAttendee(a); } } // This isn't strictly true. An event that doesn't have a start time // or an end time isn't all-day, it has an anchor in time but it doesn't // "take up" any time. /*if ((isAPropertyOf(vevent, VCDTstartProp) == 0) || (isAPropertyOf(vevent, VCDTendProp) == 0)) { anEvent->setAllDay(true); } else { }*/ anEvent->setAllDay(false); // start time if ((vo = isAPropertyOf(vevent, VCDTstartProp)) != nullptr) { anEvent->setDtStart(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtStart().time().hour() == 0 && anEvent->dtStart().time().minute() == 0 && anEvent->dtStart().time().second() == 0) { anEvent->setAllDay(true); } } // stop time if ((vo = isAPropertyOf(vevent, VCDTendProp)) != nullptr) { anEvent->setDtEnd(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo))))); deleteStr(s); if (anEvent->dtEnd().time().hour() == 0 && anEvent->dtEnd().time().minute() == 0 && anEvent->dtEnd().time().second() == 0) { anEvent->setAllDay(true); } } // at this point, there should be at least a start or end time. // fix up for events that take up no time but have a time associated if (!isAPropertyOf(vevent, VCDTstartProp)) { anEvent->setDtStart(anEvent->dtEnd()); } if (!isAPropertyOf(vevent, VCDTendProp)) { anEvent->setDtEnd(anEvent->dtStart()); } /////////////////////////////////////////////////////////////////////////// // recurrence stuff if ((vo = isAPropertyOf(vevent, VCRRuleProp)) != nullptr) { uint recurrenceType = Recurrence::rNone; int recurrenceTypeAbbrLen = 0; QString tmpStr = (QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); tmpStr = tmpStr.simplified(); const int tmpStrLen = tmpStr.length(); if (tmpStrLen > 0) { tmpStr = tmpStr.toUpper(); // first, read the type of the recurrence recurrenceTypeAbbrLen = 1; if (tmpStr.at(0) == QLatin1Char('D')) { recurrenceType = Recurrence::rDaily; } else if (tmpStr.at(0) == QLatin1Char('W')) { recurrenceType = Recurrence::rWeekly; } else if (tmpStrLen > 1) { recurrenceTypeAbbrLen = 2; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) auto prefix = QStringView(tmpStr).left(2); #else auto prefix = tmpStr.leftRef(2); #endif if (prefix == QLatin1String("MP")) { recurrenceType = Recurrence::rMonthlyPos; } else if (prefix == QLatin1String("MD")) { recurrenceType = Recurrence::rMonthlyDay; } else if (prefix == QLatin1String("YM")) { recurrenceType = Recurrence::rYearlyMonth; } else if (prefix == QLatin1String("YD")) { recurrenceType = Recurrence::rYearlyDay; } } } if (recurrenceType != Recurrence::rNone) { // Immediately after the type is the frequency int index = tmpStr.indexOf(QLatin1Char(' ')); int last = tmpStr.lastIndexOf(QLatin1Char(' ')) + 1; // find last entry #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) int rFreq = QStringView(tmpStr).mid(recurrenceTypeAbbrLen, (index - 1)).toInt(); #else int rFreq = tmpStr.midRef(recurrenceTypeAbbrLen, (index - 1)).toInt(); #endif ++index; // advance to beginning of stuff after freq // Read the type-specific settings switch (recurrenceType) { case Recurrence::rDaily: anEvent->recurrence()->setDaily(rFreq); break; case Recurrence::rWeekly: { QBitArray qba(7); QString dayStr; if (index == last) { // e.g. W1 #0 qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); } else { // e.g. W1 SU #0 while (index < last) { dayStr = tmpStr.mid(index, 3); int dayNum = numFromDay(dayStr); if (dayNum >= 0) { qba.setBit(dayNum); } index += 3; // advance to next day, or possibly "#" } } anEvent->recurrence()->setWeekly(rFreq, qba); break; } case Recurrence::rMonthlyPos: { anEvent->recurrence()->setMonthly(rFreq); QBitArray qba(7); short tmpPos; if (index == last) { // e.g. MP1 #0 tmpPos = anEvent->dtStart().date().day() / 7 + 1; if (tmpPos == 5) { tmpPos = -1; } qba.setBit(anEvent->dtStart().date().dayOfWeek() - 1); anEvent->recurrence()->addMonthlyPos(tmpPos, qba); } else { // e.g. MP1 1+ SU #0 while (index < last) { tmpPos = tmpStr.mid(index, 1).toShort(); index += 1; if (tmpStr.mid(index, 1) == QLatin1String("-")) { // convert tmpPos to negative tmpPos = 0 - tmpPos; } index += 2; // advance to day(s) while (numFromDay(tmpStr.mid(index, 3)) >= 0) { int dayNum = numFromDay(tmpStr.mid(index, 3)); qba.setBit(dayNum); index += 3; // advance to next day, or possibly pos or "#" } anEvent->recurrence()->addMonthlyPos(tmpPos, qba); qba.detach(); qba.fill(false); // clear out } // while != "#" } break; } case Recurrence::rMonthlyDay: anEvent->recurrence()->setMonthly(rFreq); if (index == last) { // e.g. MD1 #0 short tmpDay = anEvent->dtStart().date().day(); anEvent->recurrence()->addMonthlyDate(tmpDay); } else { // e.g. MD1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); if ((tmpStr.mid((index2 - 1), 1) == QLatin1String("-")) || (tmpStr.mid((index2 - 1), 1) == QLatin1String("+"))) { index2 = index2 - 1; } short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2; if (tmpStr.mid(index, 1) == QLatin1String("-")) { tmpDay = 0 - tmpDay; } index += 2; // advance the index; anEvent->recurrence()->addMonthlyDate(tmpDay); } // while != # } break; case Recurrence::rYearlyMonth: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YM1 #0 short tmpMonth = anEvent->dtStart().date().month(); anEvent->recurrence()->addYearlyMonth(tmpMonth); } else { // e.g. YM1 3 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpMonth = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyMonth(tmpMonth); } // while != # } break; case Recurrence::rYearlyDay: anEvent->recurrence()->setYearly(rFreq); if (index == last) { // e.g. YD1 #0 const int tmpDay = anEvent->dtStart().date().dayOfYear(); anEvent->recurrence()->addYearlyDay(tmpDay); } else { // e.g. YD1 123 #0 while (index < last) { int index2 = tmpStr.indexOf(QLatin1Char(' '), index); short tmpDay = tmpStr.mid(index, (index2 - index)).toShort(); index = index2 + 1; anEvent->recurrence()->addYearlyDay(tmpDay); } // while != # } break; default: break; } // find the last field, which is either the duration or the end date index = last; if (tmpStr.mid(index, 1) == QLatin1String("#")) { // Nr of occurrences index++; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) int rDuration = QStringView(tmpStr).mid(index, tmpStr.length() - index).toInt(); #else int rDuration = tmpStr.midRef(index, tmpStr.length() - index).toInt(); #endif if (rDuration > 0) { anEvent->recurrence()->setDuration(rDuration); } } else if (tmpStr.indexOf(QLatin1Char('T'), index) != -1) { QDateTime rEndDate = ISOToQDateTime(tmpStr.mid(index, tmpStr.length() - index)); anEvent->recurrence()->setEndDateTime(rEndDate); } // anEvent->recurrence()->dump(); } else { qDebug() << "we don't understand this type of recurrence!"; } // if known recurrence type } // repeats // recurrence exceptions if ((vo = isAPropertyOf(vevent, VCExpDateProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QStringList exDates = QString::fromUtf8(s).split(QLatin1Char(',')); QStringList::ConstIterator it; for (it = exDates.constBegin(); it != exDates.constEnd(); ++it) { QDateTime exDate = ISOToQDateTime(*it); if (exDate.time().hour() == 0 && exDate.time().minute() == 0 && exDate.time().second() == 0) { anEvent->recurrence()->addExDate(ISOToQDate(*it)); } else { anEvent->recurrence()->addExDateTime(exDate); } } deleteStr(s); } // summary if ((vo = isAPropertyOf(vevent, VCSummaryProp))) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setSummary(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // description if ((vo = isAPropertyOf(vevent, VCDescriptionProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); bool isRich = Qt::mightBeRichText(QString::fromUtf8(s)); if (!anEvent->description().isEmpty()) { anEvent->setDescription(anEvent->description() + QLatin1Char('\n') + QString::fromUtf8(s), isRich); } else { anEvent->setDescription(QString::fromUtf8(s), isRich); } deleteStr(s); } // location if ((vo = isAPropertyOf(vevent, VCLocationProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->setLocation(QString::fromUtf8(s), Qt::mightBeRichText(QString::fromUtf8(s))); deleteStr(s); } // some stupid vCal exporters ignore the standard and use Description // instead of Summary for the default field. Correct for this. if (anEvent->summary().isEmpty() && !(anEvent->description().isEmpty())) { QString tmpStr = anEvent->description().simplified(); anEvent->setDescription(QString()); anEvent->setSummary(tmpStr); } #if 0 // status if ((vo = isAPropertyOf(vevent, VCStatusProp)) != 0) { QString tmpStr(s = fakeCString(vObjectUStringZValue(vo))); deleteStr(s); // TODO: Define Event status // anEvent->setStatus( tmpStr ); } else { // anEvent->setStatus( "NEEDS ACTION" ); } #endif // secrecy Incidence::Secrecy secrecy = Incidence::SecrecyPublic; if ((vo = isAPropertyOf(vevent, VCClassProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s && strcmp(s, "PRIVATE") == 0) { secrecy = Incidence::SecrecyPrivate; } else if (s && strcmp(s, "CONFIDENTIAL") == 0) { secrecy = Incidence::SecrecyConfidential; } deleteStr(s); } anEvent->setSecrecy(secrecy); // categories if ((vo = isAPropertyOf(vevent, VCCategoriesProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); QString categories = QString::fromUtf8(s); deleteStr(s); QStringList tmpStrList = categories.split(QLatin1Char(',')); anEvent->setCategories(tmpStrList); } // attachments initPropIterator(&voi, vevent); while (moreIteration(&voi)) { vo = nextVObject(&voi); if (strcmp(vObjectName(vo), VCAttachProp) == 0) { s = fakeCString(vObjectUStringZValue(vo)); anEvent->addAttachment(Attachment(QString::fromUtf8(s))); deleteStr(s); } } // resources if ((vo = isAPropertyOf(vevent, VCResourcesProp)) != nullptr) { QString resources = (QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); QStringList tmpStrList = resources.split(QLatin1Char(';')); anEvent->setResources(tmpStrList); } // alarm stuff if ((vo = isAPropertyOf(vevent, VCDAlarmProp))) { Alarm::Ptr alarm; VObject *a = isAPropertyOf(vo, VCRunTimeProp); VObject *b = isAPropertyOf(vo, VCDisplayStringProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setDisplayAlarm(QString::fromUtf8(s)); deleteStr(s); } else { alarm->setDisplayAlarm(QString()); } } } if ((vo = isAPropertyOf(vevent, VCAAlarmProp))) { Alarm::Ptr alarm; VObject *a; VObject *b; a = isAPropertyOf(vo, VCRunTimeProp); b = isAPropertyOf(vo, VCAudioContentProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setAudioAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setAudioAlarm(QString()); } } } if ((vo = isAPropertyOf(vevent, VCPAlarmProp))) { Alarm::Ptr alarm; VObject *a; VObject *b; a = isAPropertyOf(vo, VCRunTimeProp); b = isAPropertyOf(vo, VCProcedureNameProp); if (a || b) { alarm = anEvent->newAlarm(); if (a) { alarm->setTime(ISOToQDateTime(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(a))))); deleteStr(s); } alarm->setEnabled(true); if (b) { s = fakeCString(vObjectUStringZValue(b)); alarm->setProcedureAlarm(QFile::decodeName(s)); deleteStr(s); } else { alarm->setProcedureAlarm(QString()); } } } // priority if ((vo = isAPropertyOf(vevent, VCPriorityProp))) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { anEvent->setPriority(atoi(s)); deleteStr(s); } } // transparency if ((vo = isAPropertyOf(vevent, VCTranspProp)) != nullptr) { s = fakeCString(vObjectUStringZValue(vo)); if (s) { int i = atoi(s); anEvent->setTransparency(i == 1 ? Event::Transparent : Event::Opaque); deleteStr(s); } } // related event if ((vo = isAPropertyOf(vevent, VCRelatedToProp)) != nullptr) { anEvent->setRelatedTo(QString::fromUtf8(s = fakeCString(vObjectUStringZValue(vo)))); deleteStr(s); d->mEventsRelate.append(anEvent); } /* Rest of the custom properties */ readCustomProperties(vevent, anEvent); return anEvent; } QString VCalFormat::parseTZ(const QByteArray &timezone) const { // qDebug() << timezone; QString pZone = QString::fromUtf8(timezone.mid(timezone.indexOf("TZID:VCAL") + 9)); return pZone.mid(0, pZone.indexOf(QLatin1Char('\n'))); } QString VCalFormat::parseDst(QByteArray &timezone) const { if (!timezone.contains("BEGIN:DAYLIGHT")) { return QString(); } timezone = timezone.mid(timezone.indexOf("BEGIN:DAYLIGHT")); timezone = timezone.mid(timezone.indexOf("TZNAME:") + 7); QString sStart = QString::fromUtf8(timezone.mid(0, (timezone.indexOf("COMMENT:")))); sStart.chop(2); timezone = timezone.mid(timezone.indexOf("TZOFFSETTO:") + 11); QString sOffset = QString::fromUtf8(timezone.mid(0, (timezone.indexOf("DTSTART:")))); sOffset.chop(2); sOffset.insert(3, QLatin1Char(':')); timezone = timezone.mid(timezone.indexOf("TZNAME:") + 7); QString sEnd = QString::fromUtf8(timezone.mid(0, (timezone.indexOf("COMMENT:")))); sEnd.chop(2); return QStringLiteral("TRUE;") + sOffset + QLatin1Char(';') + sStart + QLatin1Char(';') + sEnd + QLatin1String(";;"); } QString VCalFormat::qDateToISO(const QDate &qd) { if (!qd.isValid()) { return QString(); } return QString::asprintf("%.2d%.2d%.2d", qd.year(), qd.month(), qd.day()); } QString VCalFormat::qDateTimeToISO(const QDateTime &dt, bool zulu) { if (!dt.isValid()) { return QString(); } QDateTime tmpDT; if (zulu) { tmpDT = dt.toUTC(); } else { tmpDT = dt.toTimeZone(d->mCalendar->timeZone()); } QString tmpStr = QString::asprintf("%.2d%.2d%.2dT%.2d%.2d%.2d", tmpDT.date().year(), tmpDT.date().month(), tmpDT.date().day(), tmpDT.time().hour(), tmpDT.time().minute(), tmpDT.time().second()); if (zulu || dt.timeZone() == QTimeZone::utc()) { tmpStr += QLatin1Char('Z'); } return tmpStr; } QDateTime VCalFormat::ISOToQDateTime(const QString &dtStr) { QDate tmpDate; QTime tmpTime; int year, month, day, hour, minute, second; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QStringView tmpStr{dtStr}; year = tmpStr.left(4).toInt(); month = tmpStr.mid(4, 2).toInt(); day = tmpStr.mid(6, 2).toInt(); hour = tmpStr.mid(9, 2).toInt(); minute = tmpStr.mid(11, 2).toInt(); second = tmpStr.mid(13, 2).toInt(); #else QString tmpStr = dtStr; year = tmpStr.leftRef(4).toInt(); month = tmpStr.midRef(4, 2).toInt(); day = tmpStr.midRef(6, 2).toInt(); hour = tmpStr.midRef(9, 2).toInt(); minute = tmpStr.midRef(11, 2).toInt(); second = tmpStr.midRef(13, 2).toInt(); #endif tmpDate.setDate(year, month, day); tmpTime.setHMS(hour, minute, second); if (tmpDate.isValid() && tmpTime.isValid()) { // correct for GMT if string is in Zulu format if (dtStr.at(dtStr.length() - 1) == QLatin1Char('Z')) { return QDateTime(tmpDate, tmpTime, Qt::UTC); } else { return QDateTime(tmpDate, tmpTime, d->mCalendar->timeZone()); } } else { return QDateTime(); } } QDate VCalFormat::ISOToQDate(const QString &dateStr) { int year, month, day; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QStringView tmpStr{dateStr}; year = tmpStr.left(4).toInt(); month = tmpStr.mid(4, 2).toInt(); day = tmpStr.mid(6, 2).toInt(); #else year = dateStr.leftRef(4).toInt(); month = dateStr.midRef(4, 2).toInt(); day = dateStr.midRef(6, 2).toInt(); #endif return QDate(year, month, day); } bool VCalFormat::parseTZOffsetISO8601(const QString &s, int &result) { // ISO8601 format(s): // +- hh : mm // +- hh mm // +- hh // We also accept broken one without + int mod = 1; int v = 0; QString str = s.trimmed(); int ofs = 0; result = 0; // Check for end if (str.size() <= ofs) { return false; } if (str[ofs] == QLatin1Char('-')) { mod = -1; ofs++; } else if (str[ofs] == QLatin1Char('+')) { ofs++; } if (str.size() <= ofs) { return false; } // Make sure next two values are numbers bool ok; if (str.size() < (ofs + 2)) { return false; } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QStringView tmpStr{str}; v = tmpStr.mid(ofs, 2).toInt(&ok) * 60; #else v = str.midRef(ofs, 2).toInt(&ok) * 60; #endif if (!ok) { return false; } ofs += 2; if (str.size() > ofs) { if (str[ofs] == QLatin1Char(':')) { ofs++; } if (str.size() > ofs) { if (str.size() < (ofs + 2)) { return false; } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) v += tmpStr.mid(ofs, 2).toInt(&ok); #else v += str.midRef(ofs, 2).toInt(&ok); #endif if (!ok) { return false; } } } result = v * mod * 60; return true; } // take a raw vcalendar (i.e. from a file on disk, clipboard, etc. etc. // and break it down from it's tree-like format into the dictionary format // that is used internally in the VCalFormat. void VCalFormat::populate(VObject *vcal, bool deleted, const QString ¬ebook) { Q_UNUSED(notebook); // this function will populate the caldict dictionary and other event // lists. It turns vevents into Events and then inserts them. VObjectIterator i; VObject *curVO; Event::Ptr anEvent; bool hasTimeZone = false; // The calendar came with a TZ and not UTC QTimeZone previousZone; // If we add a new TZ we should leave the spec as it was before if ((curVO = isAPropertyOf(vcal, ICMethodProp)) != nullptr) { char *methodType = fakeCString(vObjectUStringZValue(curVO)); // qDebug() << "This calendar is an iTIP transaction of type '" << methodType << "'"; deleteStr(methodType); } // warn the user that we might have trouble reading non-known calendar. if ((curVO = isAPropertyOf(vcal, VCProdIdProp)) != nullptr) { char *s = fakeCString(vObjectUStringZValue(curVO)); if (!s || strcmp(productId().toUtf8().constData(), s) != 0) { qDebug() << "This vCalendar file was not created by KOrganizer or" << "any other product we support. Loading anyway..."; } setLoadedProductId(QString::fromUtf8(s)); deleteStr(s); } // warn the user we might have trouble reading this unknown version. if ((curVO = isAPropertyOf(vcal, VCVersionProp)) != nullptr) { char *s = fakeCString(vObjectUStringZValue(curVO)); if (!s || strcmp(_VCAL_VERSION, s) != 0) { qDebug() << "This vCalendar file has version" << s << "We only support" << _VCAL_VERSION; } deleteStr(s); } // set the time zone (this is a property of the view, so just discard!) if ((curVO = isAPropertyOf(vcal, VCTimeZoneProp)) != nullptr) { char *s = fakeCString(vObjectUStringZValue(curVO)); QString ts = QString::fromUtf8(s); QString name = QLatin1String("VCAL") + ts; deleteStr(s); // TODO: While using the timezone-offset + vcal as timezone is is // most likely unique, we should REALLY actually create something // like vcal-tzoffset-daylightoffsets, or better yet, // vcal-hash QStringList tzList; QString tz; int utcOffset; int utcOffsetDst; if (parseTZOffsetISO8601(ts, utcOffset)) { // qDebug() << "got standard offset" << ts << utcOffset; // standard from tz // starting date for now 01011900 QDateTime dt = QDateTime(QDateTime(QDate(1900, 1, 1), QTime(0, 0, 0))); tz = QStringLiteral("STD;%1;false;%2").arg(QString::number(utcOffset), dt.toString()); tzList.append(tz); // go through all the daylight tags initPropIterator(&i, vcal); while (moreIteration(&i)) { curVO = nextVObject(&i); if (strcmp(vObjectName(curVO), VCDayLightProp) == 0) { char *s = fakeCString(vObjectUStringZValue(curVO)); QString dst = QLatin1String(s); QStringList argl = dst.split(QLatin1Char(',')); deleteStr(s); // Too short -> not interesting if (argl.size() < 4) { continue; } // We don't care about the non-DST periods if (argl[0] != QLatin1String("TRUE")) { continue; } if (parseTZOffsetISO8601(argl[1], utcOffsetDst)) { // qDebug() << "got DST offset" << argl[1] << utcOffsetDst; // standard QString strEndDate = argl[3]; QDateTime endDate = ISOToQDateTime(strEndDate); // daylight QString strStartDate = argl[2]; QDateTime startDate = ISOToQDateTime(strStartDate); QString strRealEndDate = strEndDate; QString strRealStartDate = strStartDate; QDateTime realEndDate = endDate; QDateTime realStartDate = startDate; // if we get dates for some reason in wrong order, earlier is used for dst if (endDate < startDate) { strRealEndDate = strStartDate; strRealStartDate = strEndDate; realEndDate = startDate; realStartDate = endDate; } tz = QStringLiteral("%1;%2;false;%3").arg(strRealEndDate, QString::number(utcOffset), realEndDate.toString()); tzList.append(tz); tz = QStringLiteral("%1;%2;true;%3").arg(strRealStartDate, QString::number(utcOffsetDst), realStartDate.toString()); tzList.append(tz); } else { qDebug() << "unable to parse dst" << argl[1]; } } } if (!QTimeZone::isTimeZoneIdAvailable(name.toLatin1())) { qDebug() << "zone is not valid, parsing error" << tzList; } else { previousZone = d->mCalendar->timeZone(); d->mCalendar->setTimeZoneId(name.toUtf8()); hasTimeZone = true; } } else { qDebug() << "unable to parse tzoffset" << ts; } } // Store all events with a relatedTo property in a list for post-processing d->mEventsRelate.clear(); d->mTodosRelate.clear(); initPropIterator(&i, vcal); // go through all the vobjects in the vcal while (moreIteration(&i)) { curVO = nextVObject(&i); /************************************************************************/ // now, check to see that the object is an event or todo. if (strcmp(vObjectName(curVO), VCEventProp) == 0) { if (!isAPropertyOf(curVO, VCDTstartProp) && !isAPropertyOf(curVO, VCDTendProp)) { qDebug() << "found a VEvent with no DTSTART and no DTEND! Skipping..."; goto SKIP; } anEvent = VEventToEvent(curVO); if (anEvent) { if (hasTimeZone && !anEvent->allDay() && anEvent->dtStart().timeZone() == QTimeZone::utc()) { // This sounds stupid but is how others are doing it, so here // we go. If there is a TZ in the VCALENDAR even if the dtStart // and dtend are in UTC, clients interpret it using also the TZ defined // in the Calendar. I know it sounds braindead but oh well int utcOffSet = anEvent->dtStart().offsetFromUtc(); QDateTime dtStart(anEvent->dtStart().addSecs(utcOffSet)); dtStart.setTimeZone(d->mCalendar->timeZone()); QDateTime dtEnd(anEvent->dtEnd().addSecs(utcOffSet)); dtEnd.setTimeZone(d->mCalendar->timeZone()); anEvent->setDtStart(dtStart); anEvent->setDtEnd(dtEnd); } Event::Ptr old = !anEvent->hasRecurrenceId() ? d->mCalendar->event(anEvent->uid()) : d->mCalendar->event(anEvent->uid(), anEvent->recurrenceId()); if (old) { if (deleted) { d->mCalendar->deleteEvent(old); // move old to deleted removeAllVCal(d->mEventsRelate, old); } else if (anEvent->revision() > old->revision()) { d->mCalendar->deleteEvent(old); // move old to deleted removeAllVCal(d->mEventsRelate, old); d->mCalendar->addEvent(anEvent); // and replace it with this one } } else if (deleted) { old = !anEvent->hasRecurrenceId() ? d->mCalendar->deletedEvent(anEvent->uid()) : d->mCalendar->deletedEvent(anEvent->uid(), anEvent->recurrenceId()); if (!old) { d->mCalendar->addEvent(anEvent); // add this one d->mCalendar->deleteEvent(anEvent); // and move it to deleted } } else { d->mCalendar->addEvent(anEvent); // just add this one } } } else if (strcmp(vObjectName(curVO), VCTodoProp) == 0) { Todo::Ptr aTodo = VTodoToEvent(curVO); if (aTodo) { if (hasTimeZone && !aTodo->allDay() && aTodo->dtStart().timeZone() == QTimeZone::utc()) { // This sounds stupid but is how others are doing it, so here // we go. If there is a TZ in the VCALENDAR even if the dtStart // and dtend are in UTC, clients interpret it using also the TZ defined // in the Calendar. I know it sounds braindead but oh well int utcOffSet = aTodo->dtStart().offsetFromUtc(); QDateTime dtStart(aTodo->dtStart().addSecs(utcOffSet)); dtStart.setTimeZone(d->mCalendar->timeZone()); aTodo->setDtStart(dtStart); if (aTodo->hasDueDate()) { QDateTime dtDue(aTodo->dtDue().addSecs(utcOffSet)); dtDue.setTimeZone(d->mCalendar->timeZone()); aTodo->setDtDue(dtDue); } } Todo::Ptr old = !aTodo->hasRecurrenceId() ? d->mCalendar->todo(aTodo->uid()) : d->mCalendar->todo(aTodo->uid(), aTodo->recurrenceId()); if (old) { if (deleted) { d->mCalendar->deleteTodo(old); // move old to deleted removeAllVCal(d->mTodosRelate, old); } else if (aTodo->revision() > old->revision()) { d->mCalendar->deleteTodo(old); // move old to deleted removeAllVCal(d->mTodosRelate, old); d->mCalendar->addTodo(aTodo); // and replace it with this one } } else if (deleted) { old = d->mCalendar->deletedTodo(aTodo->uid(), aTodo->recurrenceId()); if (!old) { d->mCalendar->addTodo(aTodo); // add this one d->mCalendar->deleteTodo(aTodo); // and move it to deleted } } else { d->mCalendar->addTodo(aTodo); // just add this one } } } else if ((strcmp(vObjectName(curVO), VCVersionProp) == 0) || (strcmp(vObjectName(curVO), VCProdIdProp) == 0) || (strcmp(vObjectName(curVO), VCTimeZoneProp) == 0)) { // do nothing, we know these properties and we want to skip them. // we have either already processed them or are ignoring them. ; } else if (strcmp(vObjectName(curVO), VCDayLightProp) == 0) { // do nothing daylights are already processed ; } else { qDebug() << "Ignoring unknown vObject \"" << vObjectName(curVO) << "\""; } SKIP:; } // while // Post-Process list of events with relations, put Event objects in relation Event::List::ConstIterator eIt; for (eIt = d->mEventsRelate.constBegin(); eIt != d->mEventsRelate.constEnd(); ++eIt) { (*eIt)->setRelatedTo((*eIt)->relatedTo()); } Todo::List::ConstIterator tIt; for (tIt = d->mTodosRelate.constBegin(); tIt != d->mTodosRelate.constEnd(); ++tIt) { (*tIt)->setRelatedTo((*tIt)->relatedTo()); } // Now lets put the TZ back as it was if we have changed it. if (hasTimeZone) { d->mCalendar->setTimeZone(previousZone); } } int VCalFormat::numFromDay(const QString &day) { if (day == QLatin1String("MO ")) { return 0; } if (day == QLatin1String("TU ")) { return 1; } if (day == QLatin1String("WE ")) { return 2; } if (day == QLatin1String("TH ")) { return 3; } if (day == QLatin1String("FR ")) { return 4; } if (day == QLatin1String("SA ")) { return 5; } if (day == QLatin1String("SU ")) { return 6; } return -1; // something bad happened. :) } Attendee::PartStat VCalFormat::readStatus(const char *s) const { QString statStr = QString::fromUtf8(s); statStr = statStr.toUpper(); Attendee::PartStat status; if (statStr == QLatin1String("X-ACTION")) { status = Attendee::NeedsAction; } else if (statStr == QLatin1String("NEEDS ACTION")) { status = Attendee::NeedsAction; } else if (statStr == QLatin1String("ACCEPTED")) { status = Attendee::Accepted; } else if (statStr == QLatin1String("SENT")) { status = Attendee::NeedsAction; } else if (statStr == QLatin1String("TENTATIVE")) { status = Attendee::Tentative; } else if (statStr == QLatin1String("CONFIRMED")) { status = Attendee::Accepted; } else if (statStr == QLatin1String("DECLINED")) { status = Attendee::Declined; } else if (statStr == QLatin1String("COMPLETED")) { status = Attendee::Completed; } else if (statStr == QLatin1String("DELEGATED")) { status = Attendee::Delegated; } else { qDebug() << "error setting attendee mStatus, unknown mStatus!"; status = Attendee::NeedsAction; } return status; } QByteArray VCalFormat::writeStatus(Attendee::PartStat status) const { switch (status) { default: case Attendee::NeedsAction: return "NEEDS ACTION"; case Attendee::Accepted: return "ACCEPTED"; case Attendee::Declined: return "DECLINED"; case Attendee::Tentative: return "TENTATIVE"; case Attendee::Delegated: return "DELEGATED"; case Attendee::Completed: return "COMPLETED"; case Attendee::InProcess: return "NEEDS ACTION"; } } void VCalFormat::readCustomProperties(VObject *o, const Incidence::Ptr &i) { VObjectIterator iter; char *s; initPropIterator(&iter, o); while (moreIteration(&iter)) { VObject *cur = nextVObject(&iter); const char *curname = vObjectName(cur); Q_ASSERT(curname); if ((curname[0] == 'X' && curname[1] == '-') && strcmp(curname, ICOrganizerProp) != 0) { // TODO - for the time being, we ignore the parameters part // and just do the value handling here i->setNonKDECustomProperty(curname, QString::fromUtf8(s = fakeCString(vObjectUStringZValue(cur)))); deleteStr(s); } } } void VCalFormat::writeCustomProperties(VObject *o, const Incidence::Ptr &i) { const QMap custom = i->customProperties(); for (QMap::ConstIterator c = custom.begin(); c != custom.end(); ++c) { if (d->mManuallyWrittenExtensionFields.contains(c.key()) || c.key().startsWith("X-KDE-VOLATILE")) { // krazy:exclude=strings continue; } addPropValue(o, c.key().constData(), c.value().toUtf8().constData()); } } void VCalFormat::virtual_hook(int id, void *data) { Q_UNUSED(id); Q_UNUSED(data); Q_ASSERT(false); } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/vcalformat.h000066400000000000000000000141001523260663500264250ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 1998 Preston Brown SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-License-Identifier: LGPL-2.0-or-later */ /** @file This file is part of the API for handling calendar data and defines the VCalFormat base class. 该文件是用于处ç�†æ—¥åŽ†æ•°æ�®çš„API的一部分,并定义VCalFormat基类。 This class implements the vCalendar format. It provides methods for loading/saving/converting vCalendar format data into the internal representation as Calendar and Incidences. 此类实现vCalendaræ ¼å¼�。它æ��供了将vCalendaræ ¼å¼�æ•°æ�®åŠ è½½/ä¿�å­˜/转æ�¢ä¸ºæ—¥åŽ†å’Œäº‹ä»¶ç­‰å†…éƒ¨è¡¨ç¤ºå½¢å¼�的方法。 @brief vCalendar format implementation. @author Preston Brown \ @author Cornelius Schumacher \ */ #ifndef KCALCORE_VCALFORMAT_H #define KCALCORE_VCALFORMAT_H #include "attendee.h" #include "calformat.h" #include "event.h" #include "journal.h" #include "todo.h" struct VObject; class QDate; #define _VCAL_VERSION "1.0" /* extensions for iMIP / iTIP */ #define ICOrganizerProp "X-ORGANIZER" #define ICMethodProp "X-METHOD" #define ICRequestStatusProp "X-REQUEST-STATUS" namespace KCalendarCore { class Event; class Todo; /** @brief vCalendar format implementation. This class implements the vCalendar format. It provides methods for loading/saving/converting vCalendar format data into the internal representation as Calendar and Incidences. */ class Q_CORE_EXPORT VCalFormat : public CalFormat { public: /** Constructor a new vCalendar Format object. */ VCalFormat(); /** Destructor. */ ~VCalFormat() override; /** @copydoc CalFormat::load() */ bool load(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::save() */ bool save(const Calendar::Ptr &calendar, const QString &fileName) override; /** @copydoc CalFormat::fromString() */ Q_REQUIRED_RESULT bool fromString(const Calendar::Ptr &calendar, const QString &string, bool deleted = false, const QString ¬ebook = QString()) override; /** @copydoc CalFormat::toString() */ Q_REQUIRED_RESULT QString toString(const Calendar::Ptr &calendar, const QString ¬ebook = QString(), bool deleted = false) override; /** @copydoc CalFormat::fromRawString() */ Q_REQUIRED_RESULT bool fromRawString(const Calendar::Ptr &calendar, const QByteArray &string, bool deleted = false, const QString ¬ebook = QString()) override; protected: /** Translates a VObject of the TODO type into an Event. @param vtodo is a pointer to a valid VObject object. */ Todo::Ptr VTodoToEvent(VObject *vtodo); /** Translates a VObject into a Event and returns a pointer to it. @param vevent is a pointer to a valid VObject object. */ Event::Ptr VEventToEvent(VObject *vevent); /** Parse TZ tag from vtimezone. */ QString parseTZ(const QByteArray &timezone) const; /** Parse DAYLIGHT tag from vtimezone. */ QString parseDst(QByteArray &timezone) const; /** Takes a QDate and returns a string in the format YYYYMMDDTHHMMSS. @param date is the date to format. */ QString qDateToISO(const QDate &date); /** Takes a QDateTime and returns a string in format YYYYMMDDTHHMMSS. @param date is the date to format. @param zulu if true, then shift the date to UTC. */ QString qDateTimeToISO(const QDateTime &date, bool zulu = true); /** Takes a string in YYYYMMDDTHHMMSS format and returns a valid QDateTime. @param dtStr is a QString containing the date to convert. If this value is invalid, then QDateTime() is returned. */ QDateTime ISOToQDateTime(const QString &dtStr); /** Takes a string in the YYYYMMDD format and returns a valid QDate. @param dtStr is a QString containing the date to convert. If this value is invalid, then QDateTime() is returned. */ QDate ISOToQDate(const QString &dtStr); /** Parse one of the myriad of ISO8601 timezone offset formats, e.g. +- hh : mm +- hh mm +- hh @param s string to be parsed. @param result timezone offset in seconds, if parse succeeded. @return Whether the parse succeeded or not. */ bool parseTZOffsetISO8601(const QString &s, int &result); /** Takes a vCalendar tree of VObjects, and puts all of them that have the "event" property into the dictionary, todos in the todo-list, etc. */ void populate(VObject *vcal, bool deleted = false, const QString ¬ebook = QString()); /** Converts a two letter representation of the day (i.e. MO, TU, WE, etc) and returns a number 0-6 corresponding to that ordinal day of the week. @param day is the QString containing the two letter day representation. */ int numFromDay(const QString &day); /** Converts a status string into an Attendee::PartStat. @param s is a null-terminated character string containing the status to convert. @return a valid Attendee::PartStat. If the string provided is empty, null, or the contents are unrecognized, then Attendee::NeedsAction is returned. */ Attendee::PartStat readStatus(const char *s) const; /** Converts an Attendee::PartStat into a QByteArray string. @param status is the Attendee::PartStat to convert. @return a QByteArray containing the status string. */ QByteArray writeStatus(Attendee::PartStat status) const; void readCustomProperties(VObject *o, const Incidence::Ptr &i); void writeCustomProperties(VObject *o, const Incidence::Ptr &i); protected: /** @copydoc IncidenceBase::virtual_hook() */ void virtual_hook(int id, void *data) override; private: //@cond PRIVATE Q_DISABLE_COPY(VCalFormat) class Private; Private *const d; //@endcond }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/visitor.cpp000066400000000000000000000017071523260663500263320ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2005 Rafal Rzepecki SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #include "visitor.h" using namespace KCalendarCore; Visitor::Visitor() { } Visitor::~Visitor() { } bool Visitor::visit(const Event::Ptr &event) { Q_UNUSED(event); return false; } bool Visitor::visit(const Todo::Ptr &todo) { Q_UNUSED(todo); return false; } bool Visitor::visit(const Journal::Ptr &journal) { Q_UNUSED(journal); return false; } bool Visitor::visit(const FreeBusy::Ptr &freebusy) { Q_UNUSED(freebusy); return false; } linuxdeepin-dde-calendar-f6d670a/3rdparty/kcalendarcore/src/visitor.h000066400000000000000000000044031523260663500257730ustar00rootroot00000000000000/* This file is part of the kcalcore library. SPDX-FileCopyrightText: 2001-2003 Cornelius Schumacher SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer SPDX-FileCopyrightText: 2005 Rafal Rzepecki SPDX-FileCopyrightText: 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. SPDX-FileContributor: Alvaro Manera SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KCALCORE_VISITOR_H #define KCALCORE_VISITOR_H #include "event.h" #include "freebusy.h" #include "journal.h" #include "todo.h" namespace KCalendarCore { /** This class provides the interface for a visitor of calendar components. It serves as base class for concrete visitors, which implement certain actions on calendar components. It allows to add functions, which operate on the concrete types of calendar components, without changing the calendar component classes. */ class Q_CORE_EXPORT Visitor // krazy:exclude=dpointer { public: /** Destruct Incidence::Visitor */ virtual ~Visitor(); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on an Event object. @param event is a pointer to a valid Event object. */ virtual bool visit(const Event::Ptr &event); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on a Todo object. @param todo is a pointer to a valid Todo object. */ virtual bool visit(const Todo::Ptr &todo); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on an Journal object. @param journal is a pointer to a valid Journal object. */ virtual bool visit(const Journal::Ptr &journal); /** Reimplement this function in your concrete subclass of IncidenceBase::Visitor to perform actions on a FreeBusy object. @param freebusy is a pointer to a valid FreeBusy object. */ virtual bool visit(const FreeBusy::Ptr &freebusy); protected: /** Constructor is protected to prevent direct creation of visitor base class. */ Visitor(); }; } // namespace KCalendarCore #endif linuxdeepin-dde-calendar-f6d670a/CMakeLists.txt000066400000000000000000000100731523260663500215270ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX /usr) endif() include(GNUInstallDirs) # Find Qt version find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) message(" >>> Found Qt version: ${QT_VERSION_MAJOR}") # 检查并设置环境å�˜é‡� if(NOT DEFINED ENV{QT_SELECT}) set(ENV{QT_SELECT} "qt${QT_VERSION_MAJOR}") endif() message(" >>> Build with Qt version: $ENV{QT_SELECT}") if (QT_VERSION_MAJOR MATCHES 6) set(SUPPORT_QT6 TRUE) set(DTK_VERSION_MAJOR 6) else() set(DTK_VERSION_MAJOR "") endif() message(" >>> Build with DTK: ${DTK_VERSION_MAJOR}") # compile flags if(CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") # Enable Qt builtin debug mode add_definitions("-DQT_MESSAGELOGCONTEXT") else() # -Wl, -O2 Enable linker optimizations # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and # -ffunction-sections set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,--gc-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,--gc-sections") endif() # 编译加固 if(CMAKE_BUILD_TYPE STREQUAL "Release") message("Enable build hardening.") set(CMAKE_VERBOSE_MAKEFILE ON) set(HARDENING_FLAGS "-Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -ffile-prefix-map=${CMAKE_SOURCE_DIR}=. -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${HARDENING_FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${HARDENING_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now") endif() # 代ç �覆盖率开关 if(CMAKE_COVERAGE_ARG STREQUAL "CMAKE_COVERAGE_ARG_ON") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -fprofile-arcs -ftest-coverage") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -fprofile-arcs -ftest-coverage") endif() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) macro(SUBDIRLIST result curdir) file(GLOB children RELATIVE ${curdir} ${curdir}/*) set(dirlist "") foreach(child ${children}) if(IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) endif() endforeach() set(${result} ${dirlist}) endmacro() option(WITH_AIASSISTANT_PLUGIN "Build with AI assistant (schedule-plugin) support" ON) ADD_SUBDIRECTORY(3rdparty/kcalendarcore) ADD_SUBDIRECTORY(src/calendar-common) ADD_SUBDIRECTORY(src/calendar-client) ADD_SUBDIRECTORY(src/calendar-service) if(WITH_AIASSISTANT_PLUGIN) ADD_SUBDIRECTORY(src/schedule-plugin) endif() # FIXME: Unit tests have not been maintained for a long time # ADD_SUBDIRECTORY(tests) # ##### Translation ##### include(translation-generate) TRANSLATION_GENERATE(QM_FILES ${CMAKE_CURRENT_SOURCE_DIR}/translations) add_custom_target(${PROJECT_NAME}_qm_files DEPENDS ${QM_FILES}) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}_qm_files) install(FILES ${QM_FILES} DESTINATION ${CMAKE_INSTALL_DATADIR}/dde-calendar/translations) # ##### Translation end ##### # Install log json config file. install(FILES misc/configs/logconfig/dde-calendar.json DESTINATION ${CMAKE_INSTALL_PREFIX}/share/deepin-log-viewer/deepin-log.conf.d/) # Install debugmode json config file. install(FILES misc/configs/debugconfig/org.deepin.dde.calendar.json DESTINATION ${CMAKE_INSTALL_PREFIX}/share/deepin-debug-config/deepin-debug-config.d/) # 安装 DConfig é…�置文件,1040å�Šä»¥ä¸‹çš„默认DTK环境ä¸�支æŒ�DConfig set(DCONFIG_APPID org.deepin.dde.calendar) file(GLOB DCONFIG_FILES "${CMAKE_CURRENT_SOURCE_DIR}/misc/configs/dconfig/*.json") if(DEFINED DSG_DATA_DIR) if (DTK_VERSION_MAJOR EQUAL "6") dtk_add_config_meta_files(APPID ${DCONFIG_APPID} FILES ${DCONFIG_FILES}) else() dconfig_meta_files(APPID ${DCONFIG_APPID} FILES ${DCONFIG_FILES}) endif() message("-- DConfig is supported by DTK") else() install(FILES ${DCONFIG_FILES} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/dsg/configs/${DCONFIG_APPID}) message("-- DConfig is not supported by DTK") endif() linuxdeepin-dde-calendar-f6d670a/LICENSE000066400000000000000000001045051523260663500200000ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. {one line to give the program's name and a brief idea of what it does.} Copyright (C) {year} {name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: {project} Copyright (C) {year} {fullname} This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . linuxdeepin-dde-calendar-f6d670a/LICENSES/000077500000000000000000000000001523260663500201735ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/LICENSES/CC-BY-4.0.txt000066400000000000000000000411771523260663500220420ustar00rootroot00000000000000Creative Commons Attribution 4.0 International Creative Commons Corporation (“Creative Commonsâ€�) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-isâ€� basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 – Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 – Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: A. reproduce and Share the Licensed Material, in whole or in part; and B. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 5. Downstream recipients. A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 – License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: A. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 – Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 – Disclaimer of Warranties and Limitation of Liability. a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 – Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 – Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 – Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.â€� Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commonsâ€� or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. linuxdeepin-dde-calendar-f6d670a/LICENSES/CC0-1.0.txt000066400000000000000000000156101523260663500216000ustar00rootroot00000000000000Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. linuxdeepin-dde-calendar-f6d670a/LICENSES/GPL-3.0-or-later.txt000066400000000000000000001035561523260663500234110ustar00rootroot00000000000000GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This Licenseâ€� refers to version 3 of the GNU General Public License. “Copyrightâ€� also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Programâ€� refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€�. “Licenseesâ€� and “recipientsâ€� may be individuals or organizations. To “modifyâ€� a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified versionâ€� of the earlier work or a work “based onâ€� the earlier work. A “covered workâ€� means either the unmodified Program or a work based on the Program. To “propagateâ€� a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “conveyâ€� a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Noticesâ€� to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source codeâ€� for a work means the preferred form of the work for making modifications to it. “Object codeâ€� means any non-source form of a work. A “Standard Interfaceâ€� means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Librariesâ€� of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€�, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Sourceâ€� for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€�. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregateâ€� if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Productâ€� is either (1) a “consumer productâ€�, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally usedâ€� refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Informationâ€� for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissionsâ€� are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictionsâ€� within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transactionâ€� is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributorâ€� is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€�. A contributor's “essential patent claimsâ€� are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “controlâ€� includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent licenseâ€� is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grantâ€� such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relyingâ€� means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatoryâ€� if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later versionâ€� applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS ISâ€� WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyrightâ€� line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€�. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimerâ€� for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . linuxdeepin-dde-calendar-f6d670a/LICENSES/LGPL-2.0-or-later.txt000066400000000000000000001221621523260663500235160ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This Licenseâ€� refers to version 3 of the GNU General Public License. “Copyrightâ€� also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Programâ€� refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€�. “Licenseesâ€� and “recipientsâ€� may be individuals or organizations. To “modifyâ€� a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified versionâ€� of the earlier work or a work “based onâ€� the earlier work. A “covered workâ€� means either the unmodified Program or a work based on the Program. To “propagateâ€� a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “conveyâ€� a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Noticesâ€� to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source codeâ€� for a work means the preferred form of the work for making modifications to it. “Object codeâ€� means any non-source form of a work. A “Standard Interfaceâ€� means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Librariesâ€� of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€�, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Sourceâ€� for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€�. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregateâ€� if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Productâ€� is either (1) a “consumer productâ€�, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally usedâ€� refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Informationâ€� for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissionsâ€� are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictionsâ€� within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transactionâ€� is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributorâ€� is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€�. A contributor's “essential patent claimsâ€� are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “controlâ€� includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent licenseâ€� is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grantâ€� such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relyingâ€� means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatoryâ€� if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later versionâ€� applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS ISâ€� WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyrightâ€� line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€�. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimerâ€� for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . linuxdeepin-dde-calendar-f6d670a/LICENSES/LGPL-3.0-or-later.txt000066400000000000000000001221621523260663500235170ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This Licenseâ€� refers to version 3 of the GNU General Public License. “Copyrightâ€� also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Programâ€� refers to any copyrightable work licensed under this License. Each licensee is addressed as “youâ€�. “Licenseesâ€� and “recipientsâ€� may be individuals or organizations. To “modifyâ€� a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified versionâ€� of the earlier work or a work “based onâ€� the earlier work. A “covered workâ€� means either the unmodified Program or a work based on the Program. To “propagateâ€� a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “conveyâ€� a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Noticesâ€� to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source codeâ€� for a work means the preferred form of the work for making modifications to it. “Object codeâ€� means any non-source form of a work. A “Standard Interfaceâ€� means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Librariesâ€� of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Componentâ€�, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Sourceâ€� for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all noticesâ€�. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregateâ€� if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Productâ€� is either (1) a “consumer productâ€�, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally usedâ€� refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Informationâ€� for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissionsâ€� are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictionsâ€� within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transactionâ€� is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributorâ€� is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor versionâ€�. A contributor's “essential patent claimsâ€� are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “controlâ€� includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent licenseâ€� is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grantâ€� such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relyingâ€� means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatoryâ€� if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later versionâ€� applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS ISâ€� WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyrightâ€� line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about boxâ€�. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimerâ€� for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . linuxdeepin-dde-calendar-f6d670a/README.md000066400000000000000000000035621523260663500202530ustar00rootroot00000000000000# dde-calendar Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. ### Dependencies ### Build dependencies _The **master** branch is current development branch, build dependencies may changes without update README.md, refer to `./debian/control` for a working build depends list_ * debhelper-compat (=11) * cmake * pkg-config * deepin-gettext-tools * libdtk6gui-dev * libdtk6widget-dev * qt6-base-dev * qt6-tools-dev * qt6-tools-dev-tools * qt6-svg-dev * libgtest-dev * libical-dev * libgcrypt20-dev ## Installation ### Build from source code 1. Make sure you have installed all dependencies. _Package name may be different between distros, if dde-calendar is available from your distro, check the packaging script delivered from your distro is a better idea._ Assume you are using [Deepin](https://distrowatch.com/table.php?distribution=deepin) or other debian-based distro which got dde-calendar delivered: ``` shell $ sudo apt-get build-dep dde-calendar ``` 2. Build: ``` $ cd dde-calendar $ mkdir Build $ cd Build $ cmake ../ $ make ``` 3. Install: ``` $ sudo make install ``` The executable binary file could be found at `/usr/bin/dde-calendar ## Usage Execute `dde-calendar` ## Documentations - [Development Documentation](https://linuxdeepin.github.io/) ## Getting help Any usage issues can ask for help via * [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) * [IRC channel](https://webchat.freenode.net/?channels=deepin) * [Forum](https://bbs.deepin.org) * [WiKi](https://wiki.deepin.org/) ## Getting involved We encourage you to report issues and contribute changes * [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en). ## License dde-calendar is licensed under [GPL-3.0-or-later](LICENSE.txt).linuxdeepin-dde-calendar-f6d670a/README.zh_CN.md000066400000000000000000000032151523260663500212460ustar00rootroot00000000000000# 日历 日历是一款查看日期ã€�管ç�†æ—¥ç¨‹çš„å°�工具。 ### ä¾�èµ– ### 编译ä¾�èµ– _**master**分支是当å‰�å¼€å�‘分支,编译ä¾�èµ–å�¯èƒ½åœ¨æœªæ›´æ–°README.md文件的情况下å�˜æ›´ï¼Œè¯·å�‚考./debian/control文件获å�–有效的编译ä¾�赖列表_ * debhelper-compat (=11) * cmake * pkg-config * deepin-gettext-tools * libdtk6gui-dev * libdtk6widget-dev * qt6-base-dev * qt6-tools-dev * qt6-tools-dev-tools * qt6-svg-dev * libgtest-dev * libical-dev * libgcrypt20-dev ## 安装 ### 构建过程 1. ç¡®ä¿�已安装所有ä¾�赖库. _ä¸�å�Œå�‘行版的软件包å��ç§°å�¯èƒ½ä¸�å�Œï¼Œå¦‚果您的å�‘行版æ��供了日历,请检查å�‘行版æ��供的打包脚本。_ 如果你使用的是 [Deepin](https://distrowatch.com/table.php?distribution=deepin) 或者其它æ��供了日历的å�‘行版: ``` shell $ sudo apt-get build-dep dde-calendar ``` 2. 构建: ``` $ cd dde-calendar $ mkdir Build $ cd Build $ cmake ../ $ make ``` 3. 安装: ``` $ sudo make install ``` å�¯æ‰§è¡Œç¨‹åº�为 `/usr/bin/dde-calendar ## 使用 命令行执行 `dde-calendar` ## 文档 - [Development Documentation](https://linuxdeepin.github.io/) ## 帮助 任何使用问题都å�¯ä»¥é€šè¿‡ä»¥ä¸‹æ–¹å¼�寻求帮助: * [Gitter](https://gitter.im/orgs/linuxdeepin/rooms) * [IRC channel](https://webchat.freenode.net/?channels=deepin) * [Forum](https://bbs.deepin.org) * [WiKi](https://wiki.deepin.org/) ## 贡献指å�— 我们鼓励您报告问题并å�šå‡ºæ›´æ”¹ * [å¼€å�‘者代ç �贡献指å�—](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers) ## å¼€æº�许å�¯è¯� 日历是在 [GPL-3.0-or-later](LICENSE.txt) 下å�‘布.linuxdeepin-dde-calendar-f6d670a/REUSE.toml000066400000000000000000000062731523260663500205560ustar00rootroot00000000000000version = 1 # REUSE.toml itself [[annotations]] path = ["REUSE.toml"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # ci [[annotations]] path = [".github/**", ".obs/workflows.yml"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # gitignore [[annotations]] path = [".gitignore", ".clang-format"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # xml toml json conf yaml sh py misc [[annotations]] path = ["**/*.toml", "**/*.json", "**/*.conf", "**/*.yaml", "**/*.sh", "**/*.py", "misc/**", ".tx/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # debian [[annotations]] path = ["debian/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # rpm [[annotations]] path = ["rpm/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # cmake [[annotations]] path = ["cmake/**", "**/CMakeLists.txt", "**/*.cmake"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # README [[annotations]] path = ["README*", "CHANGELOG.md"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC-BY-4.0" # docs [[annotations]] path = ["docs/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC-BY-4.0" # src [[annotations]] path = ["src/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "GPL-3.0-or-later" # translations [[annotations]] path = ["translations/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "GPL-3.0-or-later" # tests [[annotations]] path = ["tests/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "GPL-3.0-or-later" # 3rdparty [[annotations]] path = ["3rdparty/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "LGPL-2.0-or-later" # toolGenerate [[annotations]] path = ["toolGenerate/**"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # images [[annotations]] path = ["**/*.png", "**/*.svg", "**/*.jpg", "**/*.gif"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "CC0-1.0" # linglong [[annotations]] path = ["install_dep", "deploy_dep", "linglong.yaml", "LICENSE", ".project.json"] precedence = "aggregate" SPDX-FileCopyrightText = "2026 UnionTech Software Technology Co., Ltd." SPDX-License-Identifier = "GPL-3.0-or-later" linuxdeepin-dde-calendar-f6d670a/cmake/000077500000000000000000000000001523260663500200465ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/cmake/qt-version-macros.cmake000066400000000000000000000012561523260663500244450ustar00rootroot00000000000000# Macro for adding DBus interface with Qt version detection macro(QT_ADD_DBUS_INTERFACE) if(SUPPORT_QT6) qt_add_dbus_interface(${ARGN}) else() qt5_add_dbus_interface(${ARGN}) endif() endmacro() # Macro for adding resources with Qt version detection macro(QT_ADD_RESOURCES_MACRO) if(SUPPORT_QT6) qt_add_resources(${ARGN}) else() qt5_add_resources(${ARGN}) endif() endmacro() # Macro for including Qt Gui private headers macro(QT_INCLUDE_GUI_PRIVATE_DIRS) if(SUPPORT_QT6) include_directories(${Qt6Gui_PRIVATE_INCLUDE_DIRS}) else() include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS}) endif() endmacro() linuxdeepin-dde-calendar-f6d670a/cmake/translation-generate.cmake000066400000000000000000000017031523260663500251770ustar00rootroot00000000000000function(TRANSLATION_GENERATE QMS) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS LinguistTools) if (QT_VERSION_MAJOR MATCHES 6) get_target_property(QT_LRELEASE Qt6::lrelease IMPORTED_LOCATION) else() set(QT_LRELEASE "lrelease") endif() if(NOT ARGN) message(SEND_ERROR "Error: TRANSLATION_GENERATE() called without any .ts path") return() endif() file(GLOB TS_FILES "${ARGN}/*.ts") set(${QMS}) foreach(TSFIL ${TS_FILES}) get_filename_component(FIL_WE ${TSFIL} NAME_WE) set(QMFIL ${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.qm) list(APPEND ${QMS} ${QMFIL}) add_custom_command( OUTPUT ${QMFIL} COMMAND ${QT_LRELEASE} ${TSFIL} -qm ${QMFIL} DEPENDS ${TSFIL} COMMENT "Running ${QT_LRELEASE} on ${TSFIL}" VERBATIM ) endforeach() set_source_files_properties(${${QMS}} PROPERTIES GENERATED TRUE) set(${QMS} ${${QMS}} PARENT_SCOPE) endfunction() linuxdeepin-dde-calendar-f6d670a/debian/000077500000000000000000000000001523260663500202105ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/debian/changelog000066400000000000000000000354641523260663500220760ustar00rootroot00000000000000dde-calendar (6.5.42) unstable; urgency=medium * chore: Update version to 6.5.42 * fix: add X-Deepin-Singleton flag to desktop file * fix: remove deepin prefix from Chinese translations in desktop file -- zhanghongyuan Thu, 30 Jul 2026 15:22:11 +0800 dde-calendar (6.5.41) unstable; urgency=medium * chore: Update version to 6.5.41 * fix(dialog): align my schedule dialog title and action button spacing * fix(client): align schedule tooltip text styles with themes * fix(build): require C++14 for calendar client -- zhanghongyuan Thu, 09 Jul 2026 13:24:43 +0800 dde-calendar (6.5.40) unstable; urgency=medium * fix(view): fix schedule label misalignment in week/day view -- Wang Yu Tue, 19 May 2026 20:39:01 +0800 dde-calendar (6.5.39) unstable; urgency=medium * chore: Update version to 6.5.39 * i18n: Translate dde-calendar-service_en_US.ts in fi * i18n: Translate dde-calendar_en_US.ts in pt_BR * i18n: Translate dde-calendar-service_en_US.ts in pt_BR * fix(dbus): add backend fallback for schedule CRUD operations -- zhanghongyuan Thu, 23 Apr 2026 17:25:57 +0800 dde-calendar (6.5.38) unstable; urgency=medium * fix: resolve high CPU usage and account loading failures * chore: reorganize project directory structure -- Wang Yu Tue, 07 Apr 2026 15:03:02 +0800 dde-calendar (6.5.37) unstable; urgency=medium * fix: prevent icon scaling at high DPI zoom levels * chore: update version to 6.5.36 -- Wang Yu Wed, 18 Mar 2026 12:25:32 +0800 dde-calendar (6.5.36) unstable; urgency=medium * fix: optimize application launch speed with lazy loading -- Wang Yu Fri, 13 Mar 2026 14:25:49 +0800 dde-calendar (6.5.35) unstable; urgency=medium * chore: Unify linglong.yaml * chore: Update version to 6.5.34 -- Wang Yu Thu, 05 Mar 2026 21:51:20 +0800 dde-calendar (6.5.34) unstable; urgency=medium * fix: Enhance asynchronous data handling in calendar client * feat: Provide an option to enable/disable aiassistant plugin * fix: fix translation generation for Qt6 -- dengzhongyuan Tue, 10 Feb 2026 14:24:02 +0800 dde-calendar (6.5.33) unstable; urgency=medium * chore: Update compiler flags for security enhancements * fix: Fix linglong build fail * fix: Enhance asynchronous data handling in calendar client * build(cmake): refactor Qt version compatibility -- wangrong Wed, 04 Feb 2026 17:16:58 +0800 dde-calendar (6.5.32) unstable; urgency=medium * chore: Update version to 6.5.32 * fix: Fix Qt5/Qt6 build compatibility. * fix: update Qt version detection and D-Bus interface configuration * feat: remove bash codes add systemd template support. -- re2zero Thu, 15 Jan 2026 19:07:09 +0800 dde-calendar (6.5.31) unstable; urgency=medium * chore: Update version to 6.5.31 * fix: [ui]adjust all-day event item heights and text positioning -- zhanghongyuan Fri, 05 Dec 2025 15:55:19 +0800 dde-calendar (6.5.30) unstable; urgency=medium * chore: Update version to 6.5.30 * fix: (calendar)improve lunar display with line wrapping for long texts -- zhanghongyuan Thu, 27 Nov 2025 16:54:09 +0800 dde-calendar (6.5.29) unstable; urgency=medium * chore: Update version to 6.5.29 * fix: revert prevent duplicate schedule type creation * chore: enhance logging configuration and refactor DConfig setup -- zhanghongyuan Fri, 21 Nov 2025 09:00:08 +0800 dde-calendar (6.5.28) unstable; urgency=medium * chore: Update version to 6.5.28 * feat: Support mips64 linglong build (#283) * feat(calendar): add 2026 Chinese holiday data and download script -- zhanghongyuan Thu, 13 Nov 2025 15:30:51 +0800 dde-calendar (6.5.27) unstable; urgency=medium * chore: Update version to 6.5.27 * feat: [dbus]Enhance Calendar DBus API with AI-friendly methods * fix: Improve account management for community edition -- re2zero Thu, 30 Oct 2025 19:21:38 +0800 dde-calendar (6.5.26) unstable; urgency=medium * chore: Update version to 6.5.26 * feat: Enhance DDE Calendar configuration and logging -- re2zero Thu, 23 Oct 2025 20:11:49 +0800 dde-calendar (6.5.25) unstable; urgency=medium * chore: Update version to 6.5.25 -- re2zero Thu, 16 Oct 2025 20:39:17 +0800 dde-calendar (6.5.24) unstable; urgency=medium * chore: Update version to 6.5.24 * fix: Fix title bar icon not sync with system theme * fix: Prevent duplicate schedule type creation * fix: Implement community edition detection and update privacy URL logic -- re2zero Fri, 10 Oct 2025 11:29:06 +0800 dde-calendar (6.5.23) unstable; urgency=medium * chore: Update version to 6.5.23 * fix: Fix twinkling issues. * fix: Adjust sidebar icon size and set text format for title label. -- re2zero Thu, 25 Sep 2025 16:37:55 +0800 dde-calendar (6.5.22) unstable; urgency=medium * chore: Update linglong base and runtime -- wangrong Wed, 17 Sep 2025 13:21:08 +0800 dde-calendar (6.5.21) unstable; urgency=medium * chore: Update version to 6.5.21 * fix some ui issues. -- re2zero Thu, 11 Sep 2025 14:13:40 +0800 dde-calendar (6.5.20) unstable; urgency=medium * chore: Update version to 6.5.17 -- dengzhongyuan Thu, 14 Aug 2025 09:27:48 +0800 dde-calendar (6.5.19) unstable; urgency=medium * Update version to 6.5.19. -- Tian ShiLin Wed, 13 Aug 2025 10:34:27 +0800 dde-calendar (6.5.18) unstable; urgency=medium * Update version to 6.5.18. -- Tian ShiLin Thu, 07 Aug 2025 18:35:15 +0800 dde-calendar (6.5.17) unstable; urgency=medium * chore: Update version to 6.5.17 * fix: Update control center page and item height adjustments -- re2zero Thu, 31 Jul 2025 14:01:35 +0800 dde-calendar (6.5.16) unstable; urgency=medium * chore: More logs for common * Update deepin-manual resources -- dengzhongyuan Wed, 16 Jul 2025 09:28:22 +0800 dde-calendar (6.5.15) unstable; urgency=medium * chore: Update deepin-manual resources -- dengzhongyuan Wed, 09 Jul 2025 16:13:48 +0800 dde-calendar (6.5.14) unstable; urgency=medium * chore: Update deb sources for linglong yaml -- wangrong Wed, 02 Jul 2025 11:19:32 +0800 dde-calendar (6.5.13) unstable; urgency=medium * update version 6.5.13. -- Tian ShiLin Tue, 01 Jul 2025 21:28:30 +0800 dde-calendar (6.5.12) unstable; urgency=medium * chore: New version 6.5.12. -- xiepengfei Fri, 27 Jun 2025 17:51:04 +0800 dde-calendar (6.5.11) unstable; urgency=medium * chore: New version 6.5.11. -- re2zero Tue, 24 Jun 2025 17:23:45 +0800 dde-calendar (6.5.10) unstable; urgency=medium * chore: New version 6.5.10. -- xiepengfei Mon, 23 Jun 2025 12:07:47 +0800 dde-calendar (6.5.9) unstable; urgency=medium * chore: Update dman's resources -- dengzhongyuan Thu, 19 Jun 2025 13:52:14 +0800 dde-calendar (6.5.8) unstable; urgency=medium * fix cloud synchronization (bug 311911). -- muyuankai Tue, 13 May 2025 16:26:10 +0800 dde-calendar (6.5.7) unstable; urgency=medium * crash fix (bug 303095 313675). -- muyuankai Thu, 08 May 2025 15:12:35 +0800 dde-calendar (6.5.6) unstable; urgency=medium * feat: enhance holiday data handling and add 2024/2025 holiday JSON files -- dengzhongyuan Tue, 22 Apr 2025 15:02:42 +0800 dde-calendar (6.5.5) unstable; urgency=medium * fix: crash caused by repeatedly deleting the same schedule data (Bug: 303095) -- renbin Wed, 16 Apr 2025 15:35:34 +0800 dde-calendar (6.5.4) unstable; urgency=medium * fix: Fix some UI issues (#228)(Bug: 304001) -- renbin Thu, 06 Mar 2025 19:50:56 +0800 dde-calendar (6.5.3) unstable; urgency=medium * chore: New version 6.5.3. -- xiepengfei Fri, 28 Feb 2025 10:46:43 +0800 dde-calendar (6.5.2) unstable; urgency=medium * New version 6.5.2 * Update linglong base to 25.0.0. -- re2zero Tue, 11 Feb 2025 16:32:35 +0800 dde-calendar (6.5.1) unstable; urgency=medium * Update version to 6.5.1 -- wangrong Wed, 22 Jan 2025 13:43:31 +0800 dde-calendar (6.5.0) unstable; urgency=medium * feat: Qt5 to Qt6 Migration * fix: missing translation files * chore: add ControlCenter DBus adaptor (#213) * feat: Add files generated by qdbusXML2cpp and DCONG2cpp -- renbin Mon, 20 Jan 2025 10:50:33 +0800 dde-calendar (5.14.13) unstable; urgency=medium * Update version to 5.14.13 -- renbin Fri, 27 Dec 2024 16:24:07 +0800 dde-calendar (5.14.12) unstable; urgency=medium * Update version to 5.14.12 -- xiepengfei Sat, 14 Dec 2024 15:03:16 +0800 dde-calendar (5.14.11) unstable; urgency=medium * Update version to 5.14.11 -- renbin Sat, 30 Nov 2024 18:21:11 +0800 dde-calendar (5.14.10) unstable; urgency=medium * chore: Update linglong build script. -- xiepengfei Sat, 30 Nov 2024 14:08:37 +0800 dde-calendar (5.14.9) UNRELEASED; urgency=medium [ transifex-integration[bot] ] * i18n: Translate dde-calendar_en_US.ts in ro * i18n: Translate dde-calendar-service_en_US.ts in ro * i18n: Translate dde-calendar_en_US.ts in sq * i18n: Translate dde-calendar-service_en_US.ts in sq * i18n: Translate dde-calendar-service_en_US.ts in zh_CN * i18n: Removing dde-calendar-service_en_US.ts in zh_CN [ myml ] * feat: cweekwidget uses locale to replace tr -- myml Sun, 29 Sep 2024 15:42:47 +0800 dde-calendar (5.14.8) unstable; urgency=medium * chore: Update linglong build script. -- wangrong Sat, 19 Oct 2024 15:18:45 +0800 dde-calendar (5.14.7) unstable; urgency=medium * chore: linglong package slimming. -- wangrong Fri, 18 Oct 2024 10:33:09 +0800 dde-calendar (5.14.6) unstable; urgency=medium * New version 5.14.6 * Adapt linglong. -- re2zero Fri, 13 Sep 2024 14:06:16 +0800 dde-calendar (5.14.5) unstable; urgency=medium * fix: sidebar calendar widget(Issue: https://github.com/linuxdeepin/developer-center/issues/10343) * feat: Execute reload after changing systemd(Issue: https://github.com/linuxdeepin/developer-center/issues/10093) * fix: remind widget display position(Issue: https://github.com/linuxdeepin/developer-center/issues/10341) -- myml Wed, 14 Aug 2024 16:37:30 +0800 dde-calendar (5.14.4) unstable; urgency=medium * feat: Unable to set timer reminder in Linglong environment -- myml Thu, 08 Aug 2024 11:29:59 +0800 dde-calendar (5.14.3) unstable; urgency=medium * fix: dialog window display position error(Issue: https://github.com/linuxdeepin/developer-center/issues/10141) -- myml Mon, 05 Aug 2024 14:16:16 +0800 dde-calendar (5.14.2) unstable; urgency=medium * chore: dbus activation adapt to AM(Issue: https://github.com/linuxdeepin/developer-center/issues/9742) * fix: cloud sync being unavailable at startup -- myml Fri, 26 Jul 2024 13:14:34 +0800 dde-calendar (5.14.1) unstable; urgency=medium * fix: cloud sync dbus error -- myml Mon, 22 Jul 2024 10:41:23 +0800 dde-calendar (5.14.0) unstable; urgency=medium * fix: build error in uos system * fix: problem of not displaying the floating frame * chore(CI): add debian check workflow Thanks to kuchune * feat: Delayed start of service -- myml Fri, 19 Jul 2024 14:21:37 +0800 dde-calendar (5.13.1) unstable; urgency=medium * fix: install deb package error(Issue: https://github.com/linuxdeepin/developer-center/issues/7763) -- myml Tue, 09 Apr 2024 11:41:53 +0800 dde-calendar (5.13.0) unstable; urgency=medium * feat: add metainfo of dde * Reapply "feat: get general settings from Control Center" * Reapply "chore: update translations" * feat: add docs files * feat: follow system config * chore: update translations * chore: update reuse * chore: typo * feat: auto update holiday data * feat: get system setting from dbus * feat: enable cloud sync -- myml Thu, 07 Mar 2024 13:54:33 +0800 dde-calendar (5.12.1) unstable; urgency=medium * fix: Unable sync schedule based on cloud sync * feat: keep the json struct of getFestivalMonth -- myml Fri, 12 Jan 2024 17:47:37 +0800 dde-calendar (5.12.0) unstable; urgency=medium * feat: add deepin-log config * feat: Supplement the holidays for the year 2024 * feat: Optimize holiday query, change the return type to QJsonArray -- myml Thu, 28 Dec 2023 10:23:56 +0800 dde-calendar (5.11.1) unstable; urgency=medium * fix: remove unused dframeworkdbus Thanks to Felix Yan * chore: correct typos in en_US docs Thanks to Felix Yan * feat: hide account login in community version(Issue: https://github.com/linuxdeepin/developer-center/issues/5912) -- myml Tue, 12 Dec 2023 13:25:42 +0800 dde-calendar (5.11.0) unstable; urgency=medium [ Deepin Packages Builder ] * feat: support for import ics file(Issue: https://github.com/linuxdeepin/developer-center/issues/5018) * feat: support for export ics file(Issue: https://github.com/linuxdeepin/developer-center/issues/5018) * feat: simplify the import process -- myml Thu, 27 Jul 2023 14:17:10 +0800 dde-calendar (5.10.1) unstable; urgency=medium * fix: remove illegal gcc option Thanks to rewine * chore(CI): Update obs tag build workflow * feat: avoid use hardcode path Thanks to rewine * fix: use imcomplete class QDesktopWidget * feat: Remove caller checks for Huangli dbus interface -- myml Mon, 24 Jul 2023 14:30:45 +0800 dde-calendar (5.10.0) unstable; urgency=medium * chore: deepin system does not support calendar sync * chore: correct a typo in CMakeLists.txt -- myml Thu, 6 Apr 2023 11:43:00 +0800 dde-calendar (5.9.1) unstable; urgency=medium * Init. -- Clay Stan Thu, 14 Jul 2022 14:13:00 +0800 linuxdeepin-dde-calendar-f6d670a/debian/control000066400000000000000000000015201523260663500216110ustar00rootroot00000000000000Source: dde-calendar Section: utils Priority: optional Maintainer: Deepin Packages Builder Build-Depends: debhelper-compat (=11), cmake, pkg-config, deepin-gettext-tools, qt6-base-dev, qt6-tools-dev, qt6-tools-dev-tools, qt6-svg-dev, libdtk6gui-dev, libdtk6widget-dev, libdtk6core-dev, libgtest-dev, libical-dev, libgcrypt20-dev Standards-Version: 4.3.0 Homepage: http://www.deepin.org Vcs-Git: https://github.com/linuxdeepin/dde-calendar Rules-Requires-Root: no Package: dde-calendar Architecture: linux-any Depends: dde-qt6integration, dde-api, ${misc:Depends}, ${shlibs:Depends}, Description: Calendar is a smart daily planner to schedule all things in life. Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. linuxdeepin-dde-calendar-f6d670a/debian/control.1000066400000000000000000000014701523260663500217540ustar00rootroot00000000000000Source: dde-calendar Section: utils Priority: optional Maintainer: Deepin Packages Builder Build-Depends: debhelper-compat (=11), cmake, pkg-config, deepin-gettext-tools, qtbase5-dev, qttools5-dev, qttools5-dev-tools, libqt5svg5-dev, libdtkgui-dev, libdtkwidget-dev, libdtkcore-dev, libgtest-dev, libical-dev, libgcrypt20-dev Standards-Version: 4.3.0 Homepage: http://www.deepin.org Vcs-Git: https://github.com/linuxdeepin/dde-calendar Rules-Requires-Root: no Package: dde-calendar Architecture: linux-any Depends: dde-api, ${misc:Depends}, ${shlibs:Depends}, Description: Calendar is a smart daily planner to schedule all things in life. Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. linuxdeepin-dde-calendar-f6d670a/debian/copyright000066400000000000000000000026741523260663500221540ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: dde-calendar Source: https://github.com/linuxdeepin/dde-calendar Upstream-Contact: https://github.com/linuxdeepin/developer-center/issues Files: * Copyright: 2015-2018 Deepin Technology Co., Ltd. 2019-2020 Uniontech Software Technology Co.,Ltd. License: GPL-3+ Files: debian/* Copyright: 2016-2022 Deepin Technology Co., Ltd. 2017 Yangfl 2019 Boyuan Yang 2020 Arun Kumar Pariyar 2022 Clay Stan License: GPL-3+ License: GPL-3+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". linuxdeepin-dde-calendar-f6d670a/debian/dde-calendar.1000066400000000000000000000024131523260663500225750ustar00rootroot00000000000000.\" This file is processed to generate manpages in the .\" build diretory. .TH "dde-calendar" "1" "2021-3-11" "Deepin" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME dde-calendar \- a smart daily planner to schedule all things in life .SH SYNOPSIS dde-calendar [OPTIONS...] .SH DESCRIPTION Calendar is a smart daily planner to schedule all things in life. .PP Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling. .SH OPTIONS .PP -h --help Prints the command line options. .PP -v --version Output version information and exit. .PP .SH SEE ALSO https://github.com/linuxdeepin/dde-calendar .SH AUTHOR .PP .B dde-calendar is written by Deepin Technology Co., Ltd. .PP This manual page was written by .MT chenhaifeng@\:uniontech.com Chen Haifeng .ME for the Debian Project (but may be used by others) linuxdeepin-dde-calendar-f6d670a/debian/dde-calendar.postinst000066400000000000000000000004521523260663500243210ustar00rootroot00000000000000#!/bin/bash #日历å�Žç«¯æœ�务进程å��ç§° calendarServiceName="dde-calendar-service" #获å�–日历å�Žç«¯è¿›ç¨‹id serviceIDsARR=($(pidof ${calendarServiceName})) #判断å�Žç«¯æ˜¯å�¦åœ¨è¿�行。如果在è¿�行则kill掉 if [ ${#serviceIDsARR[@]} -gt 0 ] then killall ${calendarServiceName} fi linuxdeepin-dde-calendar-f6d670a/debian/docs000066400000000000000000000000121523260663500210540ustar00rootroot00000000000000README.md linuxdeepin-dde-calendar-f6d670a/debian/manpages000066400000000000000000000000261523260663500217240ustar00rootroot00000000000000debian/dde-calendar.1 linuxdeepin-dde-calendar-f6d670a/debian/rules000077500000000000000000000017361523260663500212770ustar00rootroot00000000000000#!/usr/bin/make -f export DH_VERBOSE = 1 include /usr/share/dpkg/default.mk export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export QT_SELECT := 5 # 检测当å‰�安装的Qt版本,优先使用Qt6,å�¦åˆ™ä½¿ç”¨Qt5 define detect_qt_version ifneq (,$(shell which qmake6 2>/dev/null)) QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt6" else QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt5" endif endef # 调用检测Qt版本的命令 $(eval $(call detect_qt_version)) # hardcode this if want to force build with sepecific Qt version # QT_DIR="/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt5" %: dh $@ override_dh_auto_configure: dh_auto_configure -- \ -DCMAKE_BUILD_TYPE=Release \ -DSERVICE_INSTALL_DIR="/usr/lib/deepin-daemon" \ -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DAPP_VERSION=$(DEB_VERSION_UPSTREAM) -DVERSION=$(DEB_VERSION_UPSTREAM) \ -DLIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) \ -DQT_DIR=$(QT_DIR) linuxdeepin-dde-calendar-f6d670a/debian/source/000077500000000000000000000000001523260663500215105ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/debian/source/format000066400000000000000000000000151523260663500227170ustar00rootroot000000000000003.0 (native) linuxdeepin-dde-calendar-f6d670a/debian/upstream/000077500000000000000000000000001523260663500220505ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/debian/upstream/metadata000066400000000000000000000004131523260663500235510ustar00rootroot00000000000000--- Bug-Database: https://github.com/linuxdeepin/developer-center/issues Bug-Submit: https://github.com/linuxdeepin/developer-center/issues/new Repository: https://github.com/linuxdeepin/dde-calendar.git Repository-Browse: https://github.com/linuxdeepin/dde-calendar linuxdeepin-dde-calendar-f6d670a/debian/watch000066400000000000000000000002771523260663500212470ustar00rootroot00000000000000version=4 opts="filenamemangle=s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%dde-calendar-$1.tar.gz%" \ https://github.com/linuxdeepin/dde-calendar/tags \ (?:.*?/)?(\d[\d.]*)\.tar\.gz debian uupdate linuxdeepin-dde-calendar-f6d670a/deploy_dep000066400000000000000000000052021523260663500210340ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2023-2024 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: GPL-3.0-or-later #!/bin/bash set -e # 生æˆ�安装目录/文件和è¿�行时ä¾�赖的必è¦�库 # 获å�–应用id ID_VALUE=$(awk -F ': ' '/^ id: / {print $2}' linglong.yaml) ## 获å�–安装的文件列表并写入安装脚本(排除头文件ã€�pcå’Œcmake文件) # cmake 安装 if ! grep -- "-- Installing:" install.log | sed 's/-- Installing: //' | grep -vE '\.(h|cmake|pc)$' > ${ID_VALUE}.install; then echo "cmake install files are empty!" fi # qmake 安装 if ! grep -- "-install qinstall" install.log | awk '{print $NF}' | grep -vE '\.(h|cmake|pc)$' >> ${ID_VALUE}.install; then echo "qmake install files are empty!" fi # 动æ€�库软连接 if ! grep -- "^ln -f -s " install.log | awk '{print $NF}' >> ${ID_VALUE}.install; then echo "Get library softlink empty!" fi # glib-compile-schemas 文件添加到 install 文件 for SCHEMAS in "${PREFIX}"/share/glib-2.0/schemas/gschema*; do if [[ -f "$SCHEMAS" ]]; then echo "$SCHEMAS" >> "${ID_VALUE}.install" fi done # 获å�–ä¾�赖的所有文件 for LDFILE in "$@"; do # 判断文件是å�¦ä»¥ .so 结尾 if [[ "$LDFILE" == *.so ]]; then FILE_PATH="${PREFIX}/lib/${TRIPLET}/$LDFILE" # 添加ä¾�赖库到 install 文件 for SOFILE in "${PREFIX}/lib/${TRIPLET}"/${LDFILE}*; do if [[ -f "$SOFILE" ]]; then echo "$SOFILE" >> "${ID_VALUE}.install" fi done else FILE_PATH="${PREFIX}/bin/$LDFILE" fi # 获å�–ä¾�赖库 DEPENDENCIES=$(ldd "$FILE_PATH" | grep "$PREFIX") || continue if [[ ! -z "$DEPENDENCIES" ]]; then echo "$DEPENDENCIES" | while IFS= read -r line; do LIB_PATH=${line##*=> } LIB_PATH=${LIB_PATH%%(*} # 获å�–基本库å��并匹é…�相关库 LIB_DIR=$(dirname "$LIB_PATH") BASE_LIB_NAME=$(basename "$LIB_PATH") # 使用通é…�符查找相关库文件并将结果倒åº�存储到 install 文件 for FILE in "$LIB_DIR"/${BASE_LIB_NAME%.*}*; do if [[ -f "$FILE" ]]; then echo "$FILE" fi done | sort -r >> "${ID_VALUE}.install" done fi done # 排除é�™æ€�链接库 #echo '^'${PREFIX}'/'${TRIPLET}'/.+(?> "${ID_VALUE}.install" #echo '^'${PREFIX}'/lib/.+(?> "${ID_VALUE}.install" # 删除调试符å�· files=`cat ${ID_VALUE}.install` for file in $files do if [[ -f "$file" && -x "$file" ]] || [[ "$file" == *.so ]]; then strip -g $file || true fi done linuxdeepin-dde-calendar-f6d670a/docs/000077500000000000000000000000001523260663500177165ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/docs/dbus_API.md000066400000000000000000000417671523260663500217050ustar00rootroot00000000000000# DDE Calendar DBus API Documentation ## Overview This document describes the 6 new DBus interfaces added to DDE Calendar for AI/MCP (Model Control Protocol) integration. These APIs provide comprehensive calendar management functionality that can be easily consumed by AI systems. **Service Information:** - **Service Name:** `com.deepin.Calendar` - **Object Path:** `/com/deepin/Calendar` - **Interface:** `com.deepin.Calendar` ## API Methods ### 1. QuerySchedules Query schedules by various criteria including date, date range, and keyword search. #### Signature ```dbus QuerySchedules(query: string) → (result: string) ``` #### Parameters - `query` (string): Query criteria in the following formats: - `"day"` - Get today's schedules - `"today"` - Get today's schedules (alternative) - `"YYYY-MM-DD"` - Get schedules for specific date (e.g., "2025-10-29") - `"YYYY-MM-DD,YYYY-MM-DD"` - Get schedules for date range (e.g., "2025-10-21,2025-10-28") - `"search:keyword"` - Search schedules by keyword in title, description, or location (e.g., "search:会议") #### Returns JSON string containing schedule list and metadata. #### Response Format **Single Day Query:** ```json { "success": true, "count": 3, "type": "single_day", "date": "2025-10-29", "schedules": [ { "id": "uuid-string", "title": "Schedule Title", "description": "Schedule Description", "startTime": "2025-10-29T10:00:00+08:00", "endTime": "2025-10-29T11:00:00+08:00", "allDay": false, "location": "Meeting Room A", "reminderMinutes": 15, "scheduleType": "user" } ] } ``` **Date Range Query:** ```json { "success": true, "count": 5, "type": "date_range", "startDate": "2025-10-21", "endDate": "2025-10-28", "schedules": [...] } ``` **Search Query:** ```json { "success": true, "count": 3, "type": "search", "keyword": "会议", "schedules": [...] } ``` #### Example Usage ```bash # Query today's schedules (using "day") dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.QuerySchedules string:"day" # Query today's schedules (using "today") dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.QuerySchedules string:"today" # Query specific date dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.QuerySchedules string:"2025-10-29" # Search by keyword (supports Chinese) dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.QuerySchedules string:"search:会议" # Search in English dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.QuerySchedules string:"search:meeting" ``` --- ### 2. CreateSchedule Create a new schedule with detailed information. #### Signature ```dbus CreateSchedule(scheduleData: string) → (scheduleId: string) ``` #### Parameters - `scheduleData` (string): JSON string containing schedule information #### Input Format ```json { "title": "Schedule Title", // Required "description": "Description", // Optional "startTime": "2025-10-29T10:00:00", // Required (ISO format) "endTime": "2025-10-29T11:00:00", // Optional (defaults to +1 hour) "allDay": false, // Optional (defaults to false) "location": "Meeting Room A", // Optional "reminder": 15 // Optional (minutes before event) } ``` #### Returns String containing the created schedule's UUID. #### Example Usage ```bash # Create simple schedule dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.CreateSchedule \ string:'{"title":"Meeting","startTime":"2025-10-29T14:00:00","endTime":"2025-10-29T15:00:00"}' # Create all-day event dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.CreateSchedule \ string:'{"title":"Holiday","startTime":"2025-12-25T00:00:00","allDay":true}' ``` --- ### 3. ModifySchedule Modify, delete, or snooze an existing schedule. #### Signature ```dbus ModifySchedule(scheduleId: string, operation: string, data: string) → (success: boolean) ``` #### Parameters - `scheduleId` (string): UUID of the schedule to modify - `operation` (string): Operation type - "update", "delete", or "snooze" - `data` (string): Additional data based on operation type #### Operations ##### Update Operation - `operation`: "update" - `data`: JSON string with fields to update ```json { "title": "Updated Title", "description": "Updated Description", "startTime": "2025-10-29T15:00:00", "endTime": "2025-10-29T16:00:00" } ``` ##### Delete Operation - `operation`: "delete" - `data`: "" (empty string) ##### Snooze Operation - `operation`: "snooze" - `data`: "15" (minutes to snooze) #### Returns Boolean indicating operation success. #### Example Usage ```bash # Update schedule dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.ModifySchedule \ string:"schedule-uuid" string:"update" string:'{"title":"Updated Meeting"}' # Delete schedule dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.ModifySchedule \ string:"schedule-uuid" string:"delete" string:"" # Snooze reminder for 15 minutes dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.ModifySchedule \ string:"schedule-uuid" string:"snooze" string:"15" ``` --- ### 4. GetCalendarView Get comprehensive calendar view data including schedules and metadata. #### Signature ```dbus GetCalendarView(viewType: string, date: string) → (viewData: string) ``` #### Parameters - `viewType` (string): View type - "day", "week", or "month" - `date` (string): Target date in "YYYY-MM-DD" format (optional, defaults to current date) #### Response Formats ##### Day View ```json { "success": true, "viewType": "day", "date": "2025-10-28", "schedules": [...], "lunarInfo": { "date": "2025-10-28", "lunarDate": "" } } ``` ##### Week View ```json { "success": true, "viewType": "week", "startDate": "2025-10-27", "endDate": "2025-11-02", "days": [ { "date": "2025-10-27", "dayOfWeek": 1, "schedules": [...] } ], "lunarInfo": {...} } ``` ##### Month View ```json { "success": true, "viewType": "month", "year": 2025, "month": 10, "startDate": "2025-10-01", "endDate": "2025-10-31", "schedules": [...], "lunarInfo": {...} } ``` #### Example Usage ```bash # Get today's view dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetCalendarView \ string:"day" string:"" # Get week view for specific date dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetCalendarView \ string:"week" string:"2025-10-28" # Get month view dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetCalendarView \ string:"month" string:"2025-10-01" ``` --- ### 5. GetLunarInfo Get detailed lunar calendar and traditional Chinese calendar information. #### Signature ```dbus GetLunarInfo(date: string) → (lunarData: string) ``` #### Parameters - `date` (string): Date in "YYYY-MM-DD" format #### Returns JSON string containing lunar calendar information. #### Response Format ```json { "success": true, "solarDate": "2025-10-28", "lunarDate": "乙巳年ä¹�月åˆ�å…«", "lunarMonthDay": "ä¹�月åˆ�å…«", "festival": "é‡�阳节", "jieqi": "霜é™�", "huangLi": { "yi": ["祈ç¦�", "出行", "å«�娶"], "ji": ["动土", "开工", "安葬"], "ganZhiYear": "乙巳年", "ganZhiMonth": "庚戌月", "ganZhiDay": "戊å­�æ—¥" } } ``` **Invalid Date Response:** ```json { "success": false, "error": "Invalid date format", "date": "2025-09-31" } ``` #### Example Usage ```bash # Get lunar info for today dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetLunarInfo \ string:"$(date +%Y-%m-%d)" # Get lunar info for specific date dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetLunarInfo \ string:"2025-10-29" ``` --- ### 6. GetReminders Get upcoming reminders within a specified time range. #### Signature ```dbus GetReminders(hours: int32) → (reminders: string) ``` #### Parameters - `hours` (int32): Time range in hours (default: 24) #### Returns JSON string containing reminder list. #### Response Format ```json { "success": true, "count": 3, "timeRange": 24, "hours": 24, "reminders": [ { "scheduleId": "uuid-string", "title": "Meeting Reminder", "alarmTime": "2025-10-29T09:45:00+08:00", "scheduleTime": "2025-10-29T10:00:00+08:00", "minutesToAlarm": 1074 } ] } ``` #### Example Usage ```bash # Get reminders for next 24 hours dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetReminders int32:24 # Get reminders for next 72 hours dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetReminders int32:72 # Get reminders for next week dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.GetReminders int32:168 ``` ## Error Handling All APIs return JSON responses with error information when operations fail: ```json { "success": false, "error": "Error description" } ``` Common error scenarios: - Invalid JSON format in input parameters - Missing required fields (e.g., title, startTime in CreateSchedule) - Invalid date formats (e.g., "2025-09-31" returns error in GetLunarInfo) - Schedule not found (for modify operations) - Empty search results (returns success with count: 0) - Service unavailable (dde-calendar not running) - Permission denied (DBus session bus access) ## Data Types and Constraints ### Date/Time Formats - **ISO DateTime**: `"2025-10-29T10:00:00"` or `"2025-10-29T10:00:00+08:00"` - **Date Only**: `"2025-10-29"` ### Schedule Fields - **title**: Required, max 200 characters - **description**: Optional, max 1000 characters - **startTime**: Required, ISO datetime format - **endTime**: Optional, defaults to startTime + 1 hour - **allDay**: Optional boolean, defaults to false - **location**: Optional, max 200 characters - **reminder**: Optional integer (minutes), 0-10080 (1 week) - **scheduleType**: Schedule classification for deletion control - `"user"`: User-created schedule (deletable) - `"system"`: System-generated schedule (not deletable, e.g., holidays) ### Time Ranges - **Reminder hours**: 1-8760 hours (1 hour to 1 year) - **Search date range**: Recommended 1 year (6 months before to 6 months after current date) ### Search Functionality - **Search scope**: Title, description, and location fields - **Case sensitivity**: Case-insensitive matching - **Character support**: Full Unicode support (Chinese, English, etc.) - **Multiple keywords**: Use separate search calls for different keywords ## Performance Characteristics Based on performance testing: - **QuerySchedules**: ~5ms average response time - **GetCalendarView**: ~5ms average response time - **CreateSchedule**: ~10-50ms depending on data complexity - **ModifySchedule**: ~10-30ms depending on operation - **GetLunarInfo**: ~5-10ms - **GetReminders**: ~10-20ms depending on time range ## Integration Examples ### Python Integration ```python import dbus def query_today_schedules(): bus = dbus.SessionBus() calendar = bus.get_object('com.deepin.Calendar', '/com/deepin/Calendar') iface = dbus.Interface(calendar, 'com.deepin.Calendar') result = iface.QuerySchedules('today') # or use 'day' return json.loads(result) def create_meeting(title, start_time, end_time): bus = dbus.SessionBus() calendar = bus.get_object('com.deepin.Calendar', '/com/deepin/Calendar') iface = dbus.Interface(calendar, 'com.deepin.Calendar') schedule_data = { "title": title, "startTime": start_time, "endTime": end_time, "reminder": 15 } schedule_id = iface.CreateSchedule(json.dumps(schedule_data)) return schedule_id.strip('{}') ``` ### Shell Script Integration ```bash #!/bin/bash # Function to query schedules query_schedules() { local query="$1" dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.QuerySchedules \ string:"$query" | grep -o '".*"' | sed 's/"//g' | tail -1 } # Function to create schedule create_schedule() { local title="$1" local start_time="$2" local end_time="$3" local schedule_data="{\"title\":\"$title\",\"startTime\":\"$start_time\",\"endTime\":\"$end_time\"}" dbus-send --session --print-reply --dest="com.deepin.Calendar" \ /com/deepin/Calendar com.deepin.Calendar.CreateSchedule \ string:"$schedule_data" | grep -o '".*"' | sed 's/"//g' | tail -1 } # Usage examples echo "Today's schedules:" query_schedules "today" # or use "day" echo "Creating new meeting:" schedule_id=$(create_schedule "Team Meeting" "2025-10-29T14:00:00" "2025-10-29T15:00:00") echo "Created schedule with ID: $schedule_id" ``` ## Testing and Validation ### Prerequisites 1. Ensure `dde-calendar` service is running 2. User has appropriate permissions for DBus session access 3. Valid date/time formats in system locale ### Test Scripts - **Comprehensive Test**: `./test_dbus_apis.sh` - Full functionality test with data creation, testing, and cleanup **Test Features:** - Creates 8 practical test schedules with Chinese content - Tests all 6 API methods with various parameters - Validates search functionality with Chinese keywords - Tests error handling (invalid dates, empty searches) - Comprehensive cleanup of test data - Detailed logging to file (>100K output) ### Validation Checklist - [ ] Service availability check - [ ] All 6 API methods respond correctly - [ ] JSON format validation - [ ] Date/time parsing accuracy - [ ] Error handling verification - [ ] Performance within acceptable limits - [ ] Memory cleanup after operations ## Version Information - **API Version**: 1.0 - **DDE Calendar Version**: Compatible with DDE Calendar 5.0+ - **Qt Compatibility**: Qt5/Qt6 compatible - **Protocol**: DBus Session Bus - **Date Added**: October 2025 ## Support and Troubleshooting ### Common Issues 1. **Service Not Found** ``` Error: org.freedesktop.DBus.Error.ServiceUnknown Solution: Ensure dde-calendar is running: `dde-calendar &` ``` 2. **Invalid JSON Format** ``` Error: CreateSchedule returns empty string Solution: Validate JSON syntax and required fields ``` 3. **Permission Denied** ``` Error: org.freedesktop.DBus.Error.AccessDenied Solution: Check user permissions and session bus access ``` ### Debug Commands ```bash # List available services dbus-send --session --print-reply --dest=org.freedesktop.DBus \ /org/freedesktop/DBus org.freedesktop.DBus.ListNames # Introspect calendar service dbus-send --session --print-reply --dest=com.deepin.Calendar \ /com/deepin/Calendar org.freedesktop.DBus.Introspectable.Introspect ``` ## Best Practices ### Search Optimization - Use specific keywords for better results: `"search:会议"` vs `"search:meeting"` - Search operates on title, description, and location fields simultaneously - Empty search results return `{"success": true, "count": 0}`, not an error ### Date Handling - Always use "YYYY-MM-DD" format for dates - Invalid dates (e.g., "2025-09-31") will return proper error responses - Use "day" for current day queries (consistent with "week", "month" parameters) ### Performance Tips - Search operations scan a wide date range (±6 months), consider caching for repeated queries - GetLunarInfo is optimized for frequent calls - ModifySchedule delete operations validate schedule existence before deletion ### Error Recovery - Always check `"success"` field in JSON responses - Empty schedule arrays are normal for date ranges without events - DBus service auto-starts if dde-calendar application is launched ### Integration Notes - JSON responses use UTF-8 encoding, Chinese characters display correctly - Schedule IDs are UUIDs, safe for long-term storage and reference - All timestamps include timezone information (+08:00) ## Validation Results **Last Full Test**: October 28, 2025 - ✅ All 6 APIs functioning correctly - ✅ Chinese keyword search working (会议, 培训, è�šé¤�) - ✅ Date validation working (rejects invalid dates like "2025-09-31") - ✅ JSON encoding proper (no Unicode escape sequences) - ✅ Schedule deletion effective - ✅ Complete test suite: 100% pass rate **Test Coverage**: 8 practical scenarios, 40+ test cases, comprehensive data lifecycle --- **Document Version**: 1.1 **Last Updated**: October 28, 2025 **Authors**: DDE Calendar Development Team **Test Verification**: Complete API validation with practical scenarios linuxdeepin-dde-calendar-f6d670a/docs/interface.md000066400000000000000000000073461523260663500222120ustar00rootroot00000000000000## 获å�–农历信æ�¯ | DBus | `com.deepin.dataserver.Calendar` | | ---- | ---------------------------------------------------------------------------- | | 路径 | `/com/deepin/dataserver/Calendar/HuangLi` | | 接å�£ | `com.deepin.dataserver.Calendar.HuangLi` | | 方法 | `getHuangLiMonth (UInt32 year, UInt32 month, Boolean fill) ↦ (String arg_0)` | å�‚数说明: - year 公历年 - month 公历月 - fill 是å�¦ä»Žå‘¨æ—¥å¼€å§‹è¡¥é½�上下月信æ�¯ã€‚例如 2024 å¹´ 3 月 1 å�·æ˜¯æ˜ŸæœŸäº”(农历二å��一),如果 fill 为 false,返回的数æ�®ä»Žæ˜ŸæœŸäº”(农历二å��一)开始,如果 fill 为 true,返回的数æ�®ä»Žæ˜ŸæœŸæ—¥ï¼ˆå†œåކå��六)开始。 接å�£è¿”回的是一个 json 对象数组åº�列化å�Žçš„字符串,部分字段已弃用,主è¦�关注 GanZhiDayã€�GanZhiMonthã€�GanZhiYearã€�LunarDayNameã€�LunarMonthNameã€�Zodiacã€�Term | 字段 | 解释 | | -------------- | ---------------------------------------------------------------------- | | Avoid | 用于指定应该é�¿å…�的事项或活动。 | | GanZhiDay | 表示农历日期的干支表示法,"己未"指的是具体的天干和地支的组å�ˆã€‚ | | GanZhiMonth | 表示农历月份的干支表示法,"丙寅"指的是具体的天干和地支的组å�ˆã€‚ | | GanZhiYear | 表示农历年份的干支表示法,"甲辰"指的是具体的天干和地支的组å�ˆã€‚ | | LunarDayName | 表示农历日期的å��称,"å��å…­"表示这一天是农历月份中的第å��六天。 | | LunarFestival | 用于指定农历的传统节日。 | | LunarLeapMonth | 表示农历是å�¦æœ‰é—°æœˆï¼Œ0 表示没有闰月,正常的农历月份。 | | LunarMonthName | 表示农历月份的å��称,"正月"表示这一天所在的月份是农历的正月。 | | SolarFestival | 用于指定阳历的传统节日。 | | Suit | 用于指定适å�ˆè¿›è¡Œçš„æ´»åŠ¨æˆ–äº‹é¡¹ã€‚ | | Term | 表示二å��四节气中的具体术语。 | | Worktime | 表示工作时间,但在给定的 JSON 中为 0,å�¯èƒ½è¡¨ç¤ºæ²¡æœ‰ç‰¹å®šçš„工作时间è¦�求。 | | Zodiac | 表示生肖,"é¾™"代表相应的生肖。 | ## 获å�–节å�‡æ—¥ä¿¡æ�¯ | DBus | `com.deepin.dataserver.Calendar` | | ---- | --------------------------------------------------------------- | | 路径 | `/com/deepin/dataserver/Calendar/HuangLi` | | 接å�£ | `com.deepin.dataserver.Calendar.HuangLi` | | 方法 | `getFestivalMonth (UInt32 year, UInt32 month) ↦ (String arg_0)` | å�‚数说明: - year 公历年 - month 公历月 接å�£è¿”回的是一个 json 对象数组åº�列化å�Žçš„字符串,部分字段已弃用,主è¦�关注 list 字段 date:公历日期,例å­�:2024-05-01 name:节å�‡æ—¥å��称,例å­�:劳动节 status:调休标识,1 为休æ�¯ï¼Œ2 为调休 ## 获å�–控制中心时间格å¼� | DTK Config | `Dtk::Core::DConfig` | | ---------- | -------------------------- | | å��å­— | `org.deepin.region-format` | | é…�置项 | `shortTimeFormat` | ## 获å�–控制中心æ¯�周首日 | DTK Config | `Dtk::Core::DConfig` | | ---------- | -------------------------- | | å��å­— | `org.deepin.region-format` | | é…�置项 | `firstDayOfWeek` | linuxdeepin-dde-calendar-f6d670a/docs/notes.md000066400000000000000000000012251523260663500213700ustar00rootroot00000000000000# 日历代ç �梳ç�†ç¬”è®° ## 日历的通用é…�ç½® 在 service 端由 daccountmanagerservice æ��ä¾› dbus 接å�£ï¼Œdaccountmanagemodule æ��供具体功能, daccountmanagerdatabase æ“�作数æ�®åº“。 dbusservice -> calendarDataManager -> dbmanager 现在è¦�实现通用é…�置中的“æ¯�星期开始â€�和“时间格å¼�â€�è·Ÿéš�控制中心,最åˆ�的想法是给通用é…�置添加新的值,比如-1æ�¥ä»£è¡¨éœ€è¦�è·Ÿéš�控制中心,但这样å�¯èƒ½ä¼šå¯¼è‡´å…¶ä»–使用这两个é…�置项的应用得到æ„�外的值,所以决定给通用é…�置新增两个é…�置项,用æ�¥æ ‡è¯†â€œæ¯�星期开始â€�和“时间格å¼�â€�是å�¦è·Ÿéš�控制中心。linuxdeepin-dde-calendar-f6d670a/install_dep000066400000000000000000000142161523260663500212130ustar00rootroot00000000000000#!/bin/bash set -e project_dir=$PWD cache_dir=${LINGLONG_FETCH_CACHE:-$PWD/linglong/cache} mkdir -p "$cache_dir" # 文件å�� deb-source.bash # 包å�«è¦�解压的deb目录 deb_dir=$(realpath "$1") # å°†deb解压到输出目录 target=$(realpath "$2") # 默认会跳过base已安装的包,å�¯ä»¥å¼ºåˆ¶è§£åŽ‹å·²å®‰è£…çš„åŒ… include="$3" # 临时目录,将内容处ç�†å�Žå†�移动到 target out_dir="$(mktemp -d)" cd "$out_dir" # 临时文件,用于记录deb文件列表 deb_list_file="$out_dir/deb.list" # 临时文件,用于记录强制安装的包å�� include_list_file="$out_dir/include.packages.list" # 临时文件,用于记录跳过安装的包å�� exclude_list_file="$out_dir/exclude.packages.list" # 包数æ�®å­˜æ”¾çš„临时目录 data_list_dir="$out_dir/data" # 生æˆ�文件列表 find "$deb_dir" -type f -name "*.deb" >"$deb_list_file" echo "$include" | tr ',' '\n' >"$include_list_file" # 用于记录安装的所有文件æ�¥è‡ªå“ªä¸ªåŒ… mkdir /tmp/deb-source-file || true # 如果baseå’Œruntime已安装则跳过,旧版本base没有/packages.list文件就使用/var/lib/dpkg/status grep 'Package: ' /var/lib/dpkg/status >"$exclude_list_file" || true # 跳过baseå’Œruntime已安装的包,也å�¯ä½¿ç”¨install_dep_skip.list文件控制跳过哪些包 cat /packages.list /runtime/packages.list "$PREFIX/packages.list" "$project_dir/install_dep_skip.list" >>"$exclude_list_file" || true # é��历文件列表 while IFS= read -r deb_file; do # 输出debå��,但ä¸�æ�¢è¡Œï¼Œä¾¿äºŽåœ¨åŒ…å��å�Žé�¢åŠ skip echo -n "$deb_file" # æ��å�–control文件 control_file=$(ar -t "$deb_file" | grep control.tar) ar -x "$deb_file" "$control_file" # 获å�–包å�� pkg=$(tar -xf "$control_file" ./control -O | grep '^Package:' | awk '{print $2}') rm "$control_file" # 如果在baseå’Œruntime中已安装,并且ä¸�包å�«åœ¨include(强制安装)列表则跳过安装,å�¦åˆ™å®‰è£…到$PREFIX目录 if grep -q "^Package: $pkg$" "$exclude_list_file" && ! grep -q "^$pkg$" "$include_list_file"; then echo " skip" echo "$deb_file" >>/tmp/deb-source-file/skip.list continue fi # 记录到 packages.list echo "Package: $pkg" >>"$PREFIX/packages.list" # æ�¢è¡Œ echo "" # 缓存解压å�Žçš„data.tar文件,便于在下次使用时,加快安装速度 deb_sha=$(sha256sum "$deb_file" | awk '{print $1}') data_cache="$cache_dir/install_dep_$deb_sha" if [ ! -e "$data_cache" ]; then data_cache_tmp="$cache_dir/install_dep_tmp_$deb_sha" # 查找data.tar文件,文件会因为压缩格å¼�ä¸�å�Œï¼Œæœ‰ä¸�å�Œçš„å�Žç¼€ï¼Œä¾‹å¦‚data.tar.xzã€�data.tar.gz data_file=$(ar -t "$deb_file" | grep data.tar) case "$data_file" in *.xz) ar -p "$deb_file" "$data_file" | unxz >"$data_cache_tmp" ;; *.gz) ar -p "$deb_file" "$data_file" | gunzip >"$data_cache_tmp" ;; *.zst) ar -p "$deb_file" "$data_file" | unzstd >"$data_cache_tmp" ;; *) echo "unknown file type" exit 1 ;; esac mv "$data_cache_tmp" "$data_cache" fi # 解压data.tar文件到输出目录 mkdir "$data_list_dir" tar -xvf "$data_cache" -C "$data_list_dir" >>"/tmp/deb-source-file/$(basename "$deb_file").list" # 清ç�†ä¸�需è¦�å¤�制的目录 rm -r "${data_list_dir:?}/usr/share/applications"* 2>/dev/null || true # 修改pc文件的prefix sed -i "s#/usr#$PREFIX#g" "$data_list_dir"/usr/lib/"$TRIPLET"/pkgconfig/*.pc 2>/dev/null || true sed -i "s#/usr#$PREFIX#g" "$data_list_dir"/usr/share/pkgconfig/*.pc 2>/dev/null || true # 修改指å�‘/libçš„ç»�对路径的软链接 find "$data_list_dir" -type l | while IFS= read -r file; do linkTarget=$(readlink "$file") # 如果指å�‘的路径以/lib开头,并且文件ä¸�存在,则添加 /runtime å‰�ç¼€ # 部分 dev 包会创建 so 文件的ç»�对链接指å�‘ /lib 目录下 if echo "$linkTarget" | grep -q ^/lib && ! [ -f "$linkTarget" ]; then ln -sf "$target$linkTarget" "$file" echo " FIX LINK" "$linkTarget" "=>" "$target$linkTarget" fi done # ä¿®å¤�动æ€�库的RUNPATH find "$data_list_dir" -type f | while IFS= read -r file; do fileinfo=$(file "$file") # skip non-dynamic librarie if ! echo "$fileinfo" | grep -q 'shared object'; then continue fi # skip debug file if echo "$fileinfo" | grep -q 'with debug_info'; then continue fi runpath=$(readelf -d "$file" | grep RUNPATH | awk '{print $NF}') # skip without runpath if ! echo "$runpath" | grep -q '^\[/'; then continue fi # 如果RUNPATH使用ç»�对路径,则添加/runtimeå‰�ç¼€ runpath=${runpath#[} runpath=${runpath%]} newRunpath=${runpath//usr\/lib/runtime\/lib} newRunpath=${newRunpath//usr/runtime} patchelf --set-rpath "$newRunpath" "$file" echo " FIX RUNPATH" "$file" "$runpath" "=>" "$newRunpath" done # å¤�制/lib,/bin,/usr目录 cp -rP "$data_list_dir/lib" "$target" 2>/dev/null || true cp -rP "$data_list_dir/bin" "$target" 2>/dev/null || true cp -rP "$data_list_dir"/usr/* "$target" || true rm -r "$data_list_dir" done <"$deb_list_file" # ä¿®å¤�相对路径的软链接(dev包内的软连接å°�试修å¤�指å�‘base) find "$target" -type l | while IFS= read -r file; do # 获å�–链接的ç»�对路径 linkTarget=$(readlink -m "$file") # 如果链接指å�‘的文件ä¸�存在 if [ ! -e "$linkTarget" ]; then # 去掉å‰�缀查看/lib下是å�¦å­˜åœ¨ linkTarget="${linkTarget#$target}" if [ -e "$linkTarget" ]; then ln -sf "$linkTarget" "$file" echo " FIX LINK" "$file" "=>" "$target$linkTarget" fi # 添加usrå‰�缀查看/usr/lib下是å�¦å­˜åœ¨ linkTarget="/usr$target" if [ -e "$linkTarget" ]; then ln -sf "$target$linkTarget" "$file" echo " FIX LINK" "$file" "=>" "$target$linkTarget" fi fi done # æ›´æ–°ld.so.cache if [ -n "$LINGLONG_LD_SO_CACHE" ]; then ldconfig -C "$LINGLONG_LD_SO_CACHE" fi # 清ç�†ä¸´æ—¶ç›®å½• rm -r "$out_dir" linuxdeepin-dde-calendar-f6d670a/linglong.yaml000066400000000000000000000031051523260663500214620ustar00rootroot00000000000000# SPDX-FileCopyrightText: 2023-2026 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: GPL-3.0-or-later version: "1" package: id: org.dde.calendar name: dde-calendar version: 6.5.42.1 kind: app description: | calendar for deepin os. base: org.deepin.base/25.2.2 runtime: org.deepin.runtime.dtk/6.7.0 command: - dde-calendar build: | apt -y install --download-only deepin-gettext-tools libdtk6gui-dev libdtk6widget-dev qt6-base-dev qt6-tools-dev qt6-tools-dev-tools qt6-svg-dev libgtest-dev libical-dev libgcrypt20-dev bash ./install_dep /var/cache/apt/archives "$PREFIX" # 修改路径 sed -i 's|set(QT_LRELEASE "/lib/qt${QT_VERSION_MAJOR}/bin/lrelease")|set(QT_LRELEASE "lrelease")|g' cmake/translation-generate.cmake VERSION=$(head -1 debian/changelog | awk -F'[()]' '{print $2}') cmake -B build ${conf_args} \ -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_OFF" \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX="${PREFIX}" \ -DVERSION=${VERSION} \ -DEXEC_DDE_CALENDAR="dde-calendar" \ -DEXEC_DDE_CALENDAR_SERVICE="${PREFIX}/libexec/deepin-daemon/dde-calendar-service" cmake --build build -j`nproc` cmake --build build --target install > install.log 2>&1 # 项目生æˆ�应用å��和动æ€�éš�å¼�加载的ä¾�赖库,ldd无法找到的其他库 LDD_FILES=( dde-calendar ../libexec/deepin-daemon/dde-calendar-service ) # 生æˆ�.install 文件 bash ./deploy_dep "${LDD_FILES[@]}" # allow apt download in build and do apt update buildext: apt: build_depends: - libc6 linuxdeepin-dde-calendar-f6d670a/misc/000077500000000000000000000000001523260663500177215ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/misc/configs/000077500000000000000000000000001523260663500213515ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/misc/configs/dconfig/000077500000000000000000000000001523260663500227625ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/misc/configs/dconfig/org.deepin.dde.calendar.client.json000066400000000000000000000007051523260663500314710ustar00rootroot00000000000000{ "magic": "dsg.config.meta", "version": "1.0", "contents": { "log_rules": { "value": "*calendar*.debug=false;*calendar*.info=false;*calendar*.warning=true", "serial": 0, "flags": [ "global" ], "name": "log rules", "name[zh_CN]": "日志规则", "description": "log rules", "description[zh_CN]": "日志规则", "permissions": "readwrite", "visibility": "public" } } } linuxdeepin-dde-calendar-f6d670a/misc/configs/dconfig/org.deepin.dde.calendar.plugin.json000066400000000000000000000007051523260663500315110ustar00rootroot00000000000000{ "magic": "dsg.config.meta", "version": "1.0", "contents": { "log_rules": { "value": "*calendar*.debug=false;*calendar*.info=false;*calendar*.warning=true", "serial": 0, "flags": [ "global" ], "name": "log rules", "name[zh_CN]": "日志规则", "description": "log rules", "description[zh_CN]": "日志规则", "permissions": "readwrite", "visibility": "public" } } } linuxdeepin-dde-calendar-f6d670a/misc/configs/dconfig/org.deepin.dde.calendar.service.json000066400000000000000000000007051523260663500316530ustar00rootroot00000000000000{ "magic": "dsg.config.meta", "version": "1.0", "contents": { "log_rules": { "value": "*calendar*.debug=false;*calendar*.info=false;*calendar*.warning=true", "serial": 0, "flags": [ "global" ], "name": "log rules", "name[zh_CN]": "日志规则", "description": "log rules", "description[zh_CN]": "日志规则", "permissions": "readwrite", "visibility": "public" } } } linuxdeepin-dde-calendar-f6d670a/misc/configs/debugconfig/000077500000000000000000000000001523260663500236255ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/misc/configs/debugconfig/org.deepin.dde.calendar.json000066400000000000000000000006051523260663500310560ustar00rootroot00000000000000{ "name": "dde-calendar", "group": "", "submodules": [ { "name": "dde-calendar-client", "exec": "dde-calendar-client_debug.sh" }, { "name": "dde-calendar-service", "exec": "dde-calendar-service_debug.sh" }, { "name": "dde-calendar-plugin", "exec": "dde-calendar-plugin_debug.sh" } ], "reboot": 0, "version": "V1.0" } linuxdeepin-dde-calendar-f6d670a/misc/configs/logconfig/000077500000000000000000000000001523260663500233205ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/misc/configs/logconfig/dde-calendar.json000066400000000000000000000014261523260663500265210ustar00rootroot00000000000000{ "name": "dde-calendar", "group": "", "submodules": [ { "name": "client", "filter": "org.deepin.dde.calendar.client", "exec": "/usr/bin/dde-calendar", "logType": "journal", "logPath": "~/.cache/deepin/dde-calendar/dde-calendar.log" }, { "name": "service", "filter": "org.deepin.dde.calendar.service", "exec": "/usr/lib/deepin-daemon/dde-calendar-service", "logType": "journal", "logPath": "~/.cache/deepin/dde-calendar-service/dde-calendar-service.log" }, { "name": "plugin", "filter": "org.deepin.dde.calendar.plugin", "exec": "", "logType": "journal", "logPath": "" } ], "visible": true, "version": "V2.0" }linuxdeepin-dde-calendar-f6d670a/misc/script/000077500000000000000000000000001523260663500212255ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/misc/script/clear_schedules.sh000077500000000000000000000256711523260663500247240ustar00rootroot00000000000000#!/bin/bash # Clear User Schedules Script - DDE Calendar # 清ç�†ç”¨æˆ·æ—¥ç¨‹çš„脚本 (ä¿�留系统日程) # # 功能:先查询所有日程,识别用户创建的日程,然å�Žé€�个删除用户日程,ä¿�留系统日程(节å�‡æ—¥ç­‰) # Usage: ./clear_schedules.sh # set -e # Commented out to allow proper error handling in deletion loop # Configuration SERVICE="com.deepin.Calendar" OBJECT_PATH="/com/deepin/Calendar" INTERFACE="com.deepin.Calendar" # Color codes for terminal output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Statistics total_found=0 total_deleted=0 total_failed=0 # Logging functions log() { local message="$1" local timestamp=$(date "+%Y-%m-%d %H:%M:%S") echo -e "[$timestamp] $message" } log_colored() { local color="$1" local message="$2" local timestamp=$(date "+%Y-%m-%d %H:%M:%S") echo -e "${color}[$timestamp] $message${NC}" } info_log() { log_colored "$YELLOW" "ℹ INFO: $1" } success_log() { log_colored "$GREEN" "✓ SUCCESS: $1" } error_log() { log_colored "$RED" "✗ ERROR: $1" } # D-Bus call wrapper with better error handling call_dbus() { local method="$1" shift local result if result=$(dbus-send --session --print-reply --dest="$SERVICE" "$OBJECT_PATH" "$INTERFACE.$method" "$@" 2>&1); then if echo "$result" | grep -q "string"; then # Extract string value, handling both quoted and unquoted formats echo "$result" | sed -n 's/.*string "\(.*\)"/\1/p' elif echo "$result" | grep -q "boolean"; then echo "$result" | grep "boolean" | tail -1 | awk '{print $2}' else echo "$result" fi else error_log "DBus call failed: $result" return 1 fi } # Check if a schedule is a system schedule (festival/holiday) # Now uses the scheduleType field provided by the D-Bus API - more intuitive! is_system_schedule() { local schedule_block="$1" # Extract scheduleType field from the API response local schedule_type=$(echo "$schedule_block" | grep -o '"scheduleType":"[^"]*"' | sed 's/"scheduleType":"//g' | sed 's/"//g') if [ "$schedule_type" = "system" ]; then return 0 # Is system schedule else return 1 # Is user schedule (including "user" or any other type) fi } # Extract user schedule IDs only (exclude system schedules) extract_user_schedule_ids() { local json_response="$1" local temp_results="/tmp/schedule_results.$$" local temp_ids="/tmp/user_ids.$$" # Clear temp files > "$temp_results" > "$temp_ids" # Extract schedule objects and save to temp file for processing echo "$json_response" | grep -o '{[^}]*"id":"[^"]*"[^}]*}' > "$temp_results" local user_count=0 local system_count=0 # Process each schedule object - redirect all logs to stderr while IFS= read -r schedule_obj; do if [ -n "$schedule_obj" ]; then # Extract schedule ID and title local schedule_id=$(echo "$schedule_obj" | grep -o '"id":"[^"]*"' | sed 's/"id":"//g' | sed 's/"//g') local title=$(echo "$schedule_obj" | grep -o '"title":"[^"]*"' | sed 's/"title":"//g' | sed 's/"//g') if [ -n "$schedule_id" ] && [ -n "$title" ]; then if is_system_schedule "$schedule_obj"; then echo -e "${YELLOW}[$(date "+%Y-%m-%d %H:%M:%S")] ℹ INFO: 跳过系统日程: $schedule_id ($title)${NC}" >&2 system_count=$((system_count + 1)) else echo -e "${YELLOW}[$(date "+%Y-%m-%d %H:%M:%S")] ℹ INFO: å�‘现用户日程: $schedule_id ($title)${NC}" >&2 echo "$schedule_id" >> "$temp_ids" user_count=$((user_count + 1)) fi fi fi done < "$temp_results" echo -e "${YELLOW}[$(date "+%Y-%m-%d %H:%M:%S")] ℹ INFO: 分æž�完æˆ�: $user_count 个用户日程,$system_count 个系统日程${NC}" >&2 # Output only the user schedule IDs if [ -f "$temp_ids" ] && [ -s "$temp_ids" ]; then cat "$temp_ids" fi # Cleanup rm -f "$temp_results" "$temp_ids" } # Get all schedules in a wide date range get_all_schedules() { info_log "查询所有日程..." # Query a wide date range to get all schedules (past 1 year to future 1 year) local start_date=$(date -d "-1 year" "+%Y-%m-%d") local end_date=$(date -d "+1 year" "+%Y-%m-%d") local query="${start_date},${end_date}" info_log "查询日期范围: $start_date 到 $end_date" if result=$(call_dbus "QuerySchedules" string:"$query"); then echo "$result" else error_log "无法查询日程" return 1 fi } # Delete a single schedule delete_schedule() { local schedule_id="$1" local result if result=$(call_dbus "ModifySchedule" string:"$schedule_id" string:"delete" string:"" 2>&1); then if echo "$result" | grep -q "true"; then ((total_deleted++)) success_log "已删除日程: $schedule_id" return 0 else ((total_failed++)) error_log "删除失败: $schedule_id (æœ�务返回: $result)" return 1 fi else ((total_failed++)) error_log "删除失败: $schedule_id (调用失败: $result)" return 1 fi } # Main execution main() { log_colored "$CYAN" "==========================================" log_colored "$CYAN" "DDE Calendar - Clear User Schedules Script" log_colored "$CYAN" "ä¿�留系统日程,仅清ç�†ç”¨æˆ·åˆ›å»ºçš„æ—¥ç¨‹" log_colored "$CYAN" "==========================================" # Step 1: Check if D-Bus service is available info_log "检查D-Busæœ�务å�¯ç”¨æ€§..." if ! dbus-send --session --dest="$SERVICE" "$OBJECT_PATH" org.freedesktop.DBus.Introspectable.Introspect >/dev/null 2>&1; then error_log "D-Busæœ�务ä¸�å�¯ç”¨ï¼Œè¯·ç¡®ä¿�DDE Calendar正在è¿�行" exit 1 fi success_log "D-Busæœ�务å�¯ç”¨" # Step 2: Query all schedules log_colored "$BLUE" "==========================================" log_colored "$BLUE" "步骤 1: 查询所有日程" log_colored "$BLUE" "==========================================" local all_schedules_json if ! all_schedules_json=$(get_all_schedules); then error_log "查询日程失败" exit 1 fi # Extract schedule count if echo "$all_schedules_json" | grep -q '"count"'; then total_found=$(echo "$all_schedules_json" | grep -o '"count":[0-9]*' | sed 's/"count"://') else total_found=0 fi info_log "找到 $total_found 个日程" if [ "$total_found" -eq 0 ]; then success_log "没有找到需è¦�删除的日程" log_colored "$PURPLE" "==========================================" log_colored "$PURPLE" "清ç�†å®Œæˆ� - 无需删除任何日程" log_colored "$PURPLE" "==========================================" exit 0 fi # Step 3: Extract user schedule IDs (excluding system schedules) log_colored "$BLUE" "==========================================" log_colored "$BLUE" "步骤 2: æ��å�–用户日程ID (排除系统日程)" log_colored "$BLUE" "==========================================" local schedule_ids schedule_ids=$(extract_user_schedule_ids "$all_schedules_json") if [ -z "$schedule_ids" ]; then success_log "没有找到需è¦�删除的用户日程" log_colored "$PURPLE" "==========================================" log_colored "$PURPLE" "清ç�†å®Œæˆ� - 无用户日程需è¦�删除" log_colored "$PURPLE" "==========================================" exit 0 fi local user_schedule_count=$(echo "$schedule_ids" | wc -l) info_log "找到 $user_schedule_count 个用户日程需è¦�删除" # Step 4: Delete user schedules only log_colored "$BLUE" "==========================================" log_colored "$BLUE" "步骤 3: 删除用户日程 (ä¿�留系统日程)" log_colored "$BLUE" "==========================================" # Add safety limit to prevent runaway deletion local max_deletions=100 local count=0 while IFS= read -r schedule_id; do if [ -n "$schedule_id" ]; then ((count++)) # Safety check to prevent infinite loops if [ "$count" -gt "$max_deletions" ]; then error_log "安全é™�制: 已达到最大删除数é‡� ($max_deletions),å�œæ­¢åˆ é™¤" break fi info_log "删除用户日程 $count/$user_schedule_count: $schedule_id" # Continue even if deletion fails delete_schedule "$schedule_id" || true # Add a small delay to avoid overwhelming the service sleep 0.1 fi done <<< "$schedule_ids" # Step 5: Final verification log_colored "$BLUE" "==========================================" log_colored "$BLUE" "步骤 4: 验è¯�清ç�†ç»“æžœ" log_colored "$BLUE" "==========================================" info_log "验è¯�是å�¦è¿˜æœ‰å‰©ä½™ç”¨æˆ·æ—¥ç¨‹..." local remaining_schedules_json if remaining_schedules_json=$(get_all_schedules); then local remaining_user_ids remaining_user_ids=$(extract_user_schedule_ids "$remaining_schedules_json") local remaining_user_count=0 if [ -n "$remaining_user_ids" ]; then remaining_user_count=$(echo "$remaining_user_ids" | wc -l) fi if [ "$remaining_user_count" -eq 0 ]; then success_log "验è¯�æˆ�功 - 所有用户日程已清ç�†å®Œæ¯• (系统日程已ä¿�ç•™)" else error_log "验è¯�失败 - ä»�有 $remaining_user_count 个用户日程未删除" fi else error_log "无法验è¯�清ç�†ç»“æžœ" fi # Final report log_colored "$PURPLE" "==========================================" log_colored "$PURPLE" "清ç�†å®Œæˆ� - 最终统计" log_colored "$PURPLE" "==========================================" log "用户日程清ç�†ç»Ÿè®¡:" log " - 总日程数: $total_found" log " - 用户日程: $user_schedule_count" log " - æˆ�功删除: $total_deleted" log " - 删除失败: $total_failed" if [ "$user_schedule_count" -gt 0 ]; then log " - 删除æˆ�功率: $(( total_deleted * 100 / user_schedule_count ))%" else log " - 删除æˆ�功率: N/A (无用户日程)" fi if [ "$total_failed" -eq 0 ]; then success_log "🎉 所有用户日程清ç�†å®Œæˆ�ï¼�系统日程已ä¿�留。" else error_log "âš ï¸� 有 $total_failed 个用户日程删除失败,但清ç�†å·²å°½åŠ›å®Œæˆ�" fi } # Trap for cleanup on exit cleanup_on_exit() { info_log "脚本执行完毕" } trap cleanup_on_exit EXIT # Execute main function main "$@" linuxdeepin-dde-calendar-f6d670a/misc/script/download_holidays.py000077500000000000000000000111621523260663500253060ustar00rootroot00000000000000#!/usr/bin/env python3 """ Holiday JSON Downloader Script This script downloads holiday JSON files from the NateScarlet/holiday-cn GitHub repository. It supports specifying the year, custom save paths, and handles file conflicts. Souerce: https://github.com/NateScarlet/holiday-cn/tree/master Usage: python download_holidays.py [year] [output_path] Examples: python download_holidays.py 2025 python download_holidays.py 2025 ./custom/path/ python download_holidays.py 2025 ./custom/path/holidays.json """ import argparse import json import os import sys from datetime import datetime from pathlib import Path import urllib.request import urllib.error def download_holiday_json(year, output_path): """ Download holiday JSON file for a specific year from GitHub. Args: year (int): The year to download holidays for output_path (str): The output path where the file should be saved Returns: str: The path where the file was saved """ # GitHub raw file URL url = f"https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/{year}.json" try: # Download the JSON file with urllib.request.urlopen(url) as response: data = response.read().decode('utf-8') # Parse and validate JSON holiday_data = json.loads(data) # Determine the final file path if os.path.isdir(output_path): filename = f"{year}.json" final_path = os.path.join(output_path, filename) else: final_path = output_path # Handle file existence if os.path.exists(final_path): print(f"文件 {final_path} 已存在ï¼�") choice = input("是å�¦è¦†ç›–?(y/n): ").lower().strip() if choice != 'y': # Generate unique filename with timestamp timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") name, ext = os.path.splitext(final_path) final_path = f"{name}_{timestamp}{ext}" print(f"文件将ä¿�存为: {final_path}") # Ensure directory exists os.makedirs(os.path.dirname(final_path), exist_ok=True) # Save the file with open(final_path, 'w', encoding='utf-8') as f: json.dump(holiday_data, f, ensure_ascii=False, indent=2) print(f"æˆ�功下载 {year} 年节å�‡æ—¥æ•°æ�®åˆ°: {final_path}") return final_path except urllib.error.HTTPError as e: if e.code == 404: print(f"错误: 找ä¸�到 {year} 年的节å�‡æ—¥æ•°æ�®") else: print(f"下载错误: {e}") sys.exit(1) except json.JSONDecodeError as e: print(f"JSON è§£æž�错误: {e}") sys.exit(1) except Exception as e: print(f"未知错误: {e}") sys.exit(1) def main(): parser = argparse.ArgumentParser( description="""从 GitHub 下载中国节å�‡æ—¥ JSON æ•°æ�® Source: https://github.com/NateScarlet/holiday-cn/tree/master""", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" 示例: %(prog)s 2025 # 下载 2025 å¹´æ•°æ�®åˆ°é»˜è®¤è·¯å¾„ %(prog)s 2025 ./custom/ # 下载到自定义目录 %(prog)s 2025 ./holidays.json # 下载到自定义文件路径 """ ) parser.add_argument('year', type=int, help='è¦�下载的年份 (例如: 2025)') parser.add_argument('output_path', nargs='?', help='输出路径 (默认: src/calendar-service/assets/holiday-cn/)') args = parser.parse_args() # Validate year current_year = datetime.now().year if args.year < 1990 or args.year > current_year + 10: print(f"警告: 年份 {args.year} å�¯èƒ½ä¸�在有效范围内") confirm = input("继续下载?(y/n): ").lower().strip() if confirm != 'y': print("å·²å�–消下载") sys.exit(0) # Set default output path if not provided if not args.output_path: default_path = os.path.join(os.getcwd(), 'src', 'calendar-service', 'assets', 'holiday-cn') output_path = default_path else: output_path = args.output_path # Convert relative path to absolute if needed if not os.path.isabs(output_path): output_path = os.path.join(os.getcwd(), output_path) print(f"准备下载 {args.year} 年节å�‡æ—¥æ•°æ�®...") print(f"输出路径: {output_path}") # Download the holiday data download_holiday_json(args.year, output_path) if __name__ == "__main__": main()linuxdeepin-dde-calendar-f6d670a/misc/script/test_dbus_apis.sh000077500000000000000000000521651523260663500246050ustar00rootroot00000000000000#!/bin/bash # Practical DDE Calendar MCP API Test Suite # Creates test data, validates all 6 APIs, outputs detailed results to file, and ensures cleanup # # Usage: ./practical_mcp_api_test.sh [output_file] # set -e # Commented out to allow proper error handling # Configuration OUTPUT_FILE="${1:-dde_calendar_practical_test_$(date +%Y%m%d_%H%M%S).log}" SERVICE="com.deepin.Calendar" OBJECT_PATH="/com/deepin/Calendar" INTERFACE="com.deepin.Calendar" # Color codes for terminal output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Test tracking test_count=0 passed_tests=0 failed_tests=0 created_schedule_ids=() # Logging functions log() { local message="$1" local timestamp=$(date "+%Y-%m-%d %H:%M:%S") echo "[$timestamp] $message" | tee -a "$OUTPUT_FILE" } log_colored() { local color="$1" local message="$2" local timestamp=$(date "+%Y-%m-%d %H:%M:%S") echo -e "${color}[$timestamp] $message${NC}" echo "[$timestamp] $message" >> "$OUTPUT_FILE" } log_json() { local label="$1" local json_data="$2" log "$label:" if command -v python3 &> /dev/null; then echo "$json_data" | python3 -m json.tool 2>/dev/null | tee -a "$OUTPUT_FILE" || echo "$json_data" | tee -a "$OUTPUT_FILE" else echo "$json_data" | tee -a "$OUTPUT_FILE" fi echo "" | tee -a "$OUTPUT_FILE" } # DBus helper functions call_dbus() { local method="$1" shift local result if result=$(dbus-send --session --print-reply --dest="$SERVICE" "$OBJECT_PATH" "$INTERFACE.$method" "$@" 2>&1); then if echo "$result" | grep -q "string"; then # Extract complete string value from D-Bus response, handling complex JSON # Pattern: string "JSON_CONTENT" echo "$result" | sed -n 's/.*string "\(.*\)"/\1/p' | tail -1 elif echo "$result" | grep -q "boolean"; then echo "$result" | grep "boolean" | tail -1 | awk '{print $2}' else echo "$result" fi else log_colored "$RED" "DBus call failed: $result" return 1 fi } extract_schedule_id() { local response="$1" # Extract UUID from JSON-like response like "{8cc2d01c-bcc1-47e2-871b-ced2726d0dc4}" echo "$response" | sed 's/[{}"]//g' | tr -d ' \n\r' } # Test framework functions start_test() { test_count=$((test_count + 1)) log_colored "$BLUE" "==========================================" log_colored "$BLUE" "Test $test_count: $1" log_colored "$BLUE" "==========================================" } pass_test() { passed_tests=$((passed_tests + 1)) log_colored "$GREEN" "✓ PASSED: $1" } fail_test() { failed_tests=$((failed_tests + 1)) log_colored "$RED" "✗ FAILED: $1" } info_log() { log_colored "$YELLOW" "ℹ INFO: $1" } # Service availability check check_service() { start_test "Service Availability Check" if call_dbus "RaiseWindow" >/dev/null 2>&1; then pass_test "DDE Calendar service is running and accessible" # Show available methods info_log "Checking available methods..." local methods=$(dbus-send --session --print-reply --dest="$SERVICE" "$OBJECT_PATH" org.freedesktop.DBus.Introspectable.Introspect 2>/dev/null | grep 'method name=' | sed 's/.*method name="\([^"]*\)".*/\1/' | sort) log "Available D-Bus methods:" echo "$methods" | while read -r method; do log " - $method" done else fail_test "DDE Calendar service is not running or not accessible" log "ERROR: Please start dde-calendar first: dde-calendar &" return 1 fi } # Create practical test data create_practical_test_data() { start_test "Creating Practical Test Data" local tomorrow=$(date -d "tomorrow" +%Y-%m-%d) local day_after=$(date -d "2 days" +%Y-%m-%d) local next_week=$(date -d "1 week" +%Y-%m-%d) local test_schedules=( # Basic meeting scenarios "{\"title\":\"项目例会\",\"description\":\"周例会讨论项目进展\",\"startTime\":\"${tomorrow}T09:00:00\",\"endTime\":\"${tomorrow}T10:00:00\",\"location\":\"会议室A\",\"reminder\":15}" "{\"title\":\"客户洽谈\",\"description\":\"与é‡�è¦�客户讨论å�ˆä½œäº‹å®œ\",\"startTime\":\"${tomorrow}T14:00:00\",\"endTime\":\"${tomorrow}T15:30:00\",\"location\":\"客户办公室\",\"reminder\":30}" "{\"title\":\"技术培训\",\"description\":\"新技术培训课程\",\"startTime\":\"${day_after}T10:00:00\",\"endTime\":\"${day_after}T12:00:00\",\"location\":\"培训室\",\"reminder\":60}" # Personal events "{\"title\":\"医院预约\",\"description\":\"年度å�¥åº·æ£€æŸ¥\",\"startTime\":\"${day_after}T14:30:00\",\"endTime\":\"${day_after}T16:00:00\",\"location\":\"市人民医院\",\"reminder\":45}" "{\"title\":\"朋å�‹è�šé¤�\",\"description\":\"è€�å�Œå­¦è�šä¼š\",\"startTime\":\"${day_after}T18:00:00\",\"endTime\":\"${day_after}T20:00:00\",\"location\":\"西é¤�厅\",\"reminder\":30}" # Business events "{\"title\":\"出差北京\",\"description\":\"北京分公å�¸ä¸šåŠ¡äº¤æµ�\",\"startTime\":\"${next_week}T08:00:00\",\"endTime\":\"${next_week}T18:00:00\",\"location\":\"北京分公å�¸\",\"reminder\":120}" # All-day event "{\"title\":\"å…¬å�¸å›¢å»º\",\"description\":\"部门团建活动\",\"startTime\":\"${next_week}T00:00:00\",\"endTime\":\"${next_week}T23:59:59\",\"allDay\":true,\"location\":\"郊外度å�‡æ�‘\"}" # Test with special characters "{\"title\":\"测试:特殊字符@#$\",\"description\":\"测试特殊字符处ç�†èƒ½åŠ›\",\"startTime\":\"${next_week}T13:00:00\",\"endTime\":\"${next_week}T14:00:00\",\"location\":\"测试地点\",\"reminder\":10}" ) local created_count=0 local failed_count=0 for i in "${!test_schedules[@]}"; do local schedule_data="${test_schedules[$i]}" info_log "Creating test schedule $(($i + 1))/${#test_schedules[@]}" log_json "Schedule Data" "$schedule_data" if result=$(call_dbus "CreateSchedule" string:"$schedule_data"); then local schedule_id=$(extract_schedule_id "$result") if [[ -n "$schedule_id" && "$schedule_id" != "" ]]; then created_schedule_ids+=("$schedule_id") ((created_count++)) info_log "✓ Created schedule ID: $schedule_id" else ((failed_count++)) info_log "✗ Failed to extract schedule ID from: $result" fi else ((failed_count++)) info_log "✗ Failed to create schedule $(($i + 1)): $result" fi done if [[ $created_count -gt 0 ]]; then pass_test "Created $created_count test schedules (failed: $failed_count)" log "Created Schedule IDs:" for id in "${created_schedule_ids[@]}"; do log " - $id" done else fail_test "Failed to create any test schedules" fi } # Test QuerySchedules API test_query_schedules() { start_test "QuerySchedules API - Practical Query Testing" local tomorrow=$(date -d "tomorrow" +%Y-%m-%d) local day_after=$(date -d "2 days" +%Y-%m-%d) local week_range="$(date -d '1 week ago' +%Y-%m-%d),$(date -d '1 week' +%Y-%m-%d)" local queries=( "today|查询今日日程" "day|查询今日日程(dayå�‚æ•°)" "$tomorrow|查询明日日程" "$day_after|查询å�Žå¤©æ—¥ç¨‹" "$week_range|查询两周范围" "search:会议|æ�œç´¢ä¼šè®®å…³é”®è¯�" "search:培训|æ�œç´¢åŸ¹è®­å…³é”®è¯�" "search:è�šé¤�|æ�œç´¢è�šé¤�关键è¯�" "search:ä¸�存在|æ�œç´¢ä¸�存在关键è¯�" ) local successful_queries=0 for query_info in "${queries[@]}"; do IFS='|' read -r query desc <<< "$query_info" info_log "Testing: $desc ($query)" if result=$(call_dbus "QuerySchedules" string:"$query"); then if echo "$result" | grep -q '"success":true'; then local count=$(echo "$result" | grep -o '"count":[0-9]*' | grep -o '[0-9]*' | head -1) info_log "✓ Query successful, found $count schedule(s)" log_json "Query Result" "$result" ((successful_queries++)) else info_log "✗ Query returned error" log_json "Error Result" "$result" fi else info_log "✗ Query failed" fi echo "" | tee -a "$OUTPUT_FILE" done if [[ $successful_queries -eq ${#queries[@]} ]]; then pass_test "All ${#queries[@]} query tests successful" else fail_test "$((${#queries[@]} - successful_queries)) out of ${#queries[@]} queries failed" fi } # Test schedule modification test_modify_schedule() { start_test "ModifySchedule API - Update and Delete Testing" if [[ ${#created_schedule_ids[@]} -eq 0 ]]; then fail_test "No test schedules available for modification" return fi local successful_modifies=0 local total_modifies=0 # Test update if [[ ${#created_schedule_ids[@]} -gt 0 ]]; then local test_id="${created_schedule_ids[0]}" info_log "Testing schedule update with ID: $test_id" local update_data='{"title":"ã€�已更新】项目例会","description":"æ›´æ–°å�Žçš„会议æ��è¿°","location":"新会议室","reminder":25}' log_json "Update Data" "$update_data" ((total_modifies++)) if result=$(call_dbus "ModifySchedule" string:"$test_id" string:"update" string:"$update_data"); then if [[ "$result" == "true" ]]; then info_log "✓ Schedule update successful" ((successful_modifies++)) else info_log "✗ Schedule update failed: $result" fi else info_log "✗ Schedule update call failed" fi fi # Test delete (use last schedule to avoid affecting other tests) if [[ ${#created_schedule_ids[@]} -gt 1 ]]; then local delete_id="${created_schedule_ids[-1]}" info_log "Testing schedule deletion with ID: $delete_id" ((total_modifies++)) if result=$(call_dbus "ModifySchedule" string:"$delete_id" string:"delete" string:""); then if [[ "$result" == "true" ]]; then info_log "✓ Schedule deletion successful" ((successful_modifies++)) # Remove from array created_schedule_ids=("${created_schedule_ids[@]/$delete_id}") else info_log "✗ Schedule deletion failed: $result" fi else info_log "✗ Schedule deletion call failed" fi fi if [[ $successful_modifies -eq $total_modifies ]]; then pass_test "All $total_modifies modification tests successful" else fail_test "$((total_modifies - successful_modifies)) out of $total_modifies modifications failed" fi } # Test calendar views test_calendar_views() { start_test "GetCalendarView API - Multiple View Testing" local today=$(date +%Y-%m-%d) local tomorrow=$(date -d "tomorrow" +%Y-%m-%d) local views=( "today##今日视图" "week#$today#本周视图" "month#$today#本月视图" "today#$tomorrow#明日今日视图" "week#$tomorrow#明日所在周视图" ) local successful_views=0 for view_info in "${views[@]}"; do IFS='#' read -r view_type target_date desc <<< "$view_info" info_log "Testing: $desc (Type: $view_type, Date: $target_date)" if result=$(call_dbus "GetCalendarView" string:"$view_type" string:"$target_date"); then if echo "$result" | grep -q '"success":true'; then info_log "✓ Calendar view retrieved successfully" log_json "Calendar View Result" "$result" ((successful_views++)) else info_log "✗ Calendar view returned error" log_json "View Error" "$result" fi else info_log "✗ Calendar view call failed" fi echo "" | tee -a "$OUTPUT_FILE" done if [[ $successful_views -eq ${#views[@]} ]]; then pass_test "All ${#views[@]} calendar views successful" else fail_test "$((${#views[@]} - successful_views)) out of ${#views[@]} calendar views failed" fi } # Test lunar information test_lunar_info() { start_test "GetLunarInfo API - Lunar Calendar Testing" local today=$(date +%Y-%m-%d) local tomorrow=$(date -d "tomorrow" +%Y-%m-%d) local new_year="2025-01-01" local labor_day="2025-05-01" local national_day="2025-10-01" local test_dates=( "$today|今天农历信æ�¯" "$tomorrow|明天农历信æ�¯" "$new_year|元旦农历信æ�¯" "$labor_day|劳动节农历信æ�¯" "$national_day|国庆节农历信æ�¯" ) local successful_queries=0 for date_info in "${test_dates[@]}"; do IFS='|' read -r test_date desc <<< "$date_info" info_log "Testing: $desc ($test_date)" if result=$(call_dbus "GetLunarInfo" string:"$test_date"); then if echo "$result" | grep -q '"success":true'; then info_log "✓ Lunar information retrieved successfully" # Extract key info local lunar_date=$(echo "$result" | grep -o '"lunarDate":"[^"]*"' | cut -d':' -f2 | tr -d '"') local festival=$(echo "$result" | grep -o '"festival":"[^"]*"' | cut -d':' -f2 | tr -d '"') if [[ -n "$lunar_date" && "$lunar_date" != "" ]]; then info_log "农历: $lunar_date" fi if [[ -n "$festival" && "$festival" != "" ]]; then info_log "节日: $festival" fi log_json "Lunar Info Result" "$result" ((successful_queries++)) else info_log "✗ Lunar information returned error" log_json "Lunar Error" "$result" fi else info_log "✗ Lunar information call failed" fi echo "" | tee -a "$OUTPUT_FILE" done if [[ $successful_queries -eq ${#test_dates[@]} ]]; then pass_test "All ${#test_dates[@]} lunar information queries successful" else fail_test "$((${#test_dates[@]} - successful_queries)) out of ${#test_dates[@]} lunar queries failed" fi } # Test reminders test_reminders() { start_test "GetReminders API - Multiple Time Range Testing" local time_ranges=(24 72 168 720) # 1 day, 3 days, 1 week, 1 month local successful_queries=0 for hours in "${time_ranges[@]}"; do local desc="" case $hours in 24) desc="1天内" ;; 72) desc="3天内" ;; 168) desc="1周内" ;; 720) desc="1月内" ;; esac info_log "Testing reminders for next $hours hours ($desc)" if result=$(call_dbus "GetReminders" int32:$hours); then if echo "$result" | grep -q '"success":true'; then local count=$(echo "$result" | grep -o '"count":[0-9]*' | grep -o '[0-9]*' | head -1) info_log "✓ Found $count reminder(s) in next $hours hours" log_json "Reminders Result ($hours hours)" "$result" ((successful_queries++)) else info_log "✗ Reminders returned error" log_json "Reminders Error" "$result" fi else info_log "✗ Reminders call failed" fi echo "" | tee -a "$OUTPUT_FILE" done if [[ $successful_queries -eq ${#time_ranges[@]} ]]; then pass_test "All ${#time_ranges[@]} reminder queries successful" else fail_test "$((${#time_ranges[@]} - successful_queries)) out of ${#time_ranges[@]} reminder queries failed" fi } # Cleanup test data cleanup_test_data() { start_test "Cleanup - Delete All Test Schedules" if [[ ${#created_schedule_ids[@]} -eq 0 ]]; then info_log "No test schedules to clean up" pass_test "No cleanup needed" return fi local deleted_count=0 local failed_count=0 info_log "Cleaning up ${#created_schedule_ids[@]} test schedules..." for schedule_id in "${created_schedule_ids[@]}"; do if [[ -n "$schedule_id" ]]; then info_log "Deleting schedule: $schedule_id" if result=$(call_dbus "ModifySchedule" string:"$schedule_id" string:"delete" string:""); then if [[ "$result" == "true" ]]; then info_log "✓ Successfully deleted: $schedule_id" ((deleted_count++)) else info_log "âš  Schedule not found or already deleted: $schedule_id" ((deleted_count++)) # Count as success if not found fi else info_log "✗ Failed to delete: $schedule_id" ((failed_count++)) fi fi done log "Cleanup Summary:" log " - Total Schedules: ${#created_schedule_ids[@]}" log " - Successfully Deleted: $deleted_count" log " - Failed to Delete: $failed_count" if [[ $deleted_count -ge $((${#created_schedule_ids[@]} - 1)) ]]; then pass_test "Cleanup successful - all test schedules removed" else fail_test "$failed_count test schedules failed to delete" fi } # Generate final report generate_final_report() { local end_time=$(date) log_colored "$PURPLE" "==========================================" log_colored "$PURPLE" "PRACTICAL TEST FINAL REPORT" log_colored "$PURPLE" "==========================================" log "Test Execution Summary:" log " - End Time: $end_time" log " - Total Tests: $test_count" log " - Passed Tests: $passed_tests" log " - Failed Tests: $failed_tests" log " - Success Rate: $(( passed_tests * 100 / test_count ))%" log "" log "API Coverage Summary:" log " ✓ Service Availability Check" log " ✓ Practical Test Data Creation (8 scenarios)" log " ✓ QuerySchedules API (8 query types)" log " ✓ ModifySchedule API (Update & Delete)" log " ✓ GetCalendarView API (5 view types)" log " ✓ GetLunarInfo API (5 date scenarios)" log " ✓ GetReminders API (4 time ranges)" log " ✓ Complete Test Data Cleanup" log "" log "Test Data Summary:" log " - Test Schedules Created: ${#created_schedule_ids[@]}" log " - Output File: $OUTPUT_FILE" log " - File Size: $(du -h "$OUTPUT_FILE" 2>/dev/null | cut -f1 || echo "Unknown")" log "" if [[ $failed_tests -eq 0 ]]; then log_colored "$GREEN" "🎉 ALL PRACTICAL TESTS PASSED! 🎉" log_colored "$GREEN" "DDE Calendar MCP APIs are working correctly with practical test coverage." echo "" log_colored "$CYAN" "📄 Detailed results saved to: $OUTPUT_FILE" return 0 else log_colored "$RED" "â�Œ $failed_tests PRACTICAL TEST(S) FAILED â�Œ" log_colored "$RED" "Please review the implementation and check the detailed log." echo "" log_colored "$CYAN" "📄 Detailed results saved to: $OUTPUT_FILE" return 1 fi } # Main execution main() { local start_time=$(date) # Initialize log file echo "DDE Calendar DBus - Practical Test Suite Log" > "$OUTPUT_FILE" echo "Generated: $start_time" >> "$OUTPUT_FILE" echo "Test Scope: All 6 MCP APIs with practical scenarios" >> "$OUTPUT_FILE" echo "========================================" >> "$OUTPUT_FILE" echo "" >> "$OUTPUT_FILE" log_colored "$PURPLE" "🚀 DDE Calendar DBus - Practical Test Suite" log_colored "$PURPLE" "📋 Practical API Testing | 📊 Detailed Logging | 🧹 Complete Cleanup" log_colored "$PURPLE" "📄 Output file: $OUTPUT_FILE" # Execute practical test suite check_service || return 1 create_practical_test_data test_query_schedules test_modify_schedule test_calendar_views test_lunar_info test_reminders cleanup_test_data # Generate final report generate_final_report } # Cleanup function for script exit cleanup_on_exit() { if [[ ${#created_schedule_ids[@]} -gt 0 ]]; then log_colored "$YELLOW" "Emergency cleanup on exit..." for schedule_id in "${created_schedule_ids[@]}"; do if [[ -n "$schedule_id" ]]; then call_dbus "ModifySchedule" string:"$schedule_id" string:"delete" string:"" >/dev/null 2>&1 || true fi done fi } # Trap to ensure cleanup on exit trap cleanup_on_exit EXIT # Check if dde-calendar is running if ! dbus-send --session --print-reply --dest="$SERVICE" "$OBJECT_PATH" "$INTERFACE.RaiseWindow" >/dev/null 2>&1; then echo -e "${RED}Error: DDE Calendar service is not running${NC}" echo "Please start dde-calendar first:" echo " dde-calendar &" echo " sleep 3" echo " $0" exit 1 fi # Run the practical test suite main "$@" linuxdeepin-dde-calendar-f6d670a/rpm/000077500000000000000000000000001523260663500175645ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/rpm/dde-calendar.spec000066400000000000000000000030301523260663500227370ustar00rootroot00000000000000%define pkgrelease 1 %if 0%{?openeuler} %define specrelease %{pkgrelease} %else ## allow specrelease to have configurable %%{?dist} tag in other distribution %define specrelease %{pkgrelease}%{?dist} %endif Name: dde-calendar Version: 5.8.1.1 Release: %{specrelease} Summary: Calendar is a smart daily planner to schedule all things in life License: GPLv3 URL: https://github.com/linuxdeepin/dde-calendar Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz BuildRequires: cmake BuildRequires: qt5-devel BuildRequires: dtkgui-devel BuildRequires: dtkwidget-devel BuildRequires: deepin-gettext-tools BuildRequires: gtest-devel %description %{summary}. %prep %autosetup %build export PATH=%{_qt5_bindir}:$PATH sed -i "s|^cmake_minimum_required.*|cmake_minimum_required(VERSION 3.0)|" $(find . -name "CMakeLists.txt") mkdir build && pushd build %cmake -DCMAKE_BUILD_TYPE=Release ../ -DAPP_VERSION=%{version} -DVERSION=%{version} %make_build popd %install %make_install -C build INSTALL_ROOT="%buildroot" %files %doc README.md %license LICENSE %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/%{name}/translations/*.qm %{_datadir}/deepin-manual/manual-assets/application/dde-calendar/calendar/* %{_datadir}/dbus-1/services/*.service /etc/xdg/autostart/dde-calendar-service.desktop %{_datadir}/dde-calendar/data/* /usr/lib/deepin-daemon/dde-calendar-service %changelog * Tue Apr 20 2021 zhangdingwen - 5.8.1.1-1 - init spec for euler linuxdeepin-dde-calendar-f6d670a/src/000077500000000000000000000000001523260663500175555ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/000077500000000000000000000000001523260663500226025ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/CMakeLists.txt000066400000000000000000000075701523260663500253530ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) include(qt-version-macros) if(NOT DEFINED VERSION) if(SUPPORT_QT6) set(VERSION 6.0.0) else() set(VERSION 5.10.0) endif() message(WARNING "Not defined version, about dialog version set ${VERSION}") endif() # common resource names set(APP_RES_DIR "assets") set(APP_BIN_NAME "dde-calendar") set(APP_DESKTOP "${APP_RES_DIR}/dde-calendar.desktop") set(APP_QRC "${APP_RES_DIR}/resources.qrc") set(APP_SERVICE_IN "${APP_RES_DIR}/dbus/com.deepin.Calendar.service.in") project(${APP_BIN_NAME}) set(CMAKE_CXX_STANDARD 14) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed -fPIE") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") elseif(${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -ftree-vectorize -march=loongson3a -mhard-float -mno-micromips -mno-mips16 -flax-vector-conversions -mloongson-ext2 -mloongson-mmi -Wl,--as-needed") endif() # compile flags if(CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") # Enable Qt builtin debug mode add_definitions("-DQT_MESSAGELOGCONTEXT") else() # -Wl, -O2 Enable linker optimizations # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and # -ffunction-sections set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") endif() # 安全编译å�‚æ•° set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") configure_file(${APP_RES_DIR}/environments.h.in environments.h @ONLY) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/src) # Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE Calendar_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) find_package(PkgConfig REQUIRED) find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED Core Gui Widget) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Widgets Svg DBus Network Concurrent) set_source_files_properties(src/dbus/org.deepin.dde.ControlCenter.xml PROPERTIES CLASSNAME ControlCenterProxy) QT_ADD_DBUS_INTERFACE(Calendar_SRC src/dbus/org.deepin.dde.ControlCenter.xml controlCenterProxy) QT_INCLUDE_GUI_PRIVATE_DIRS() # Tell CMake to create the executable add_executable(${PROJECT_NAME} ${Calendar_SRC} ${APP_QRC}) target_include_directories(${PROJECT_NAME} PUBLIC ${OBJECT_BINARY_DIR} ../calendar-common/src) target_link_libraries(${PROJECT_NAME} commondata Dtk${DTK_VERSION_MAJOR}::Core Dtk${DTK_VERSION_MAJOR}::Gui Dtk${DTK_VERSION_MAJOR}::Widget Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Concurrent ) # 修改dbusæœ�务文件 set(EXEC_DDE_CALENDAR "${CMAKE_INSTALL_FULL_BINDIR}/${APP_BIN_NAME}" CACHE STRING "Command to execute dde-calendar") configure_file(${APP_SERVICE_IN} ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.Calendar.service @ONLY) # Install files install(TARGETS dde-calendar DESTINATION ${CMAKE_INSTALL_BINDIR}) install(DIRECTORY ${APP_RES_DIR}/dde-calendar DESTINATION ${CMAKE_INSTALL_DATADIR}/deepin-manual/manual-assets/application/) install(FILES ${APP_DESKTOP} DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.Calendar.service DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services) install(FILES assets/org.deepin.calendar.metainfo.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) linuxdeepin-dde-calendar-f6d670a/src/calendar-client/README.md000066400000000000000000000000221523260663500240530ustar00rootroot00000000000000# calendar-client linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/000077500000000000000000000000001523260663500241045ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/000077500000000000000000000000001523260663500255525ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/dark/000077500000000000000000000000001523260663500264735ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/dark/icons/000077500000000000000000000000001523260663500276065ustar00rootroot00000000000000dde_calendar_account_32px.svg000066400000000000000000000024671523260663500352360ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/dark/icons 账户- dark dde_calendar_create_32px.svg000066400000000000000000000017671523260663500350470ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/dark/icons 编组 21 dde_calendar_sidebar_32px.svg000066400000000000000000000037121523260663500352050ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/dark/icons ICON linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/000077500000000000000000000000001523260663500266655ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/dde_calendar_ban_32px.svg000066400000000000000000000015021523260663500334650ustar00rootroot00000000000000 类型 Created with Sketch. ç�­ dde_calendar_delete_32px.svg000066400000000000000000000064111523260663500341140ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons icon/schedule/delete linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/dde_calendar_edit_32px.svg000066400000000000000000000043171523260663500336610ustar00rootroot00000000000000 编组 18 dde_calendar_fail_200px.png000066400000000000000000000334441523260663500336350ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons‰PNG  IHDRÈÈ­X®žsRGB®Îé IDATx^í} ¸$WYöwN-½Ý{çÎ’™ 3A˜! F¢”@ˆÎ �!~•$ y²@&;~P'¿1õ�eÏBÈ„ A%L2™™;s·^j9ÿóÕé¯ûtuUŸªêåö½]õ<÷é¾]UgùÎyëý¶sŠA~äÈ%+–Ë&—@.�x äÉgG.�È’O�\9@ò9�K ›rÉ&·ü® ‘@� è¼›Ù$�$›Üò»&D9@&d ónf“@�lrËïš ä™��λ™M9@²É-¿kB$�dB:ïf6 äÉ&·ü® ‘@� è¼›Ù$�$›Üò»&D9@&d ónf“@�lrËïš ä™��λ™M9@²É-¿kB$�dB:ïf6 äÉ&·ü® ‘@� è¼›Ù$�$›Ü2Ý%Þrú&0½ãÀa›€ûA°M `ØÀ™ >|àêà‹hƒy`â øüXâ ¸ÆOÙ5·ÌÔ€ü¦ÔÈ’Zd½oo9É~ì“�ñ§ƒ'ˆí à‰° „˜¡ÛÃw^ý�1¶‚€Ÿˆ}pp¶üG~Ä®¹Ûp—&º¸ }¿8ïŒY¨yÏ!ž ž ¿*„(õY,ÐÀ„½Î0V€;Ø7�±oAÑø»ô–#ý¶e’ïÏ’bô…R^o=ý™â4`p<[0S3ºK¸ àÛ à6v\}ë=X9c¬w£kÕªª)ˆf¸TPøBìb vÀ «j”Û�ý/Á`lO–d#˜$BN-Pœ»k4j¯B¼ž"/MúðMj]Ä Tk¤× ÷®Ÿ{»ìâ�pùžÀèÏ™¥[ž9@š2i�ÿû+žBœ+„8ìdÏšU{UC0q gÆå°û‹ß¢^ä`‘’˜h€t€â¦]¾Z;|ñ^ðìU;Ýûh8ömàð—ðÂâ-°szœå$™`›e"ÒŒ‹.bðÈÝ;…`�€§t)6q¡+YÌ…­ëšç5š×8ÔÏ<À˜¸Ž=é&¸è¢V“&(�`à£ñ­/…ñ!v"=-ãæ½q¦IHºrÆ©~ÆØ} Äáê/}Q%¦IÊD¤ o;ýéàó�û ^§‘!„'l¯8DÚM×­ãT?öUÇóßc]ëÞIÊšH0Þñ²Yß5þÞ Æ 'ôZ/‹xàZnzÿ®üûŽàãZf”5 �.p¼ååg àW[×údfÿÀ~â]pÍ—nž6Ys鯛_±Y0¶[€xeçÄÑu}¸q½q¼ëgÀþŽ ñv¸ö‹Ö2Pt³d˜£�–Ý ôN=üýӇ녀cZY^XÓý+a>{#<þ—nS½]kÉ5¼&ÒŽ7¼¡öÜ_øÞ5鱞`YpW@cý§?]_kl²ªÉû÷'„³Gì ñ�ô�†ÄUw\ï½Õùu³Õ¾k-×Ï»„¿xןÀý÷ËçŃd¬ïŸÿæ÷@°«ƒ8Ǥ?‚×@ÿƒ8 o5^üªÆ$c�8pÀ?í9Åcìÿ ÑŒ�뼪Iu¤¤ú¤„1¬€à­#î†/…ߨõµqÉX$ÿxó\Óý.Ø q)±(c¤U^̦ ]‹Æ›HëZ“ž×ßù ê~r1 ×xüæ™ÿ3® O€ìØÁàÖ[‹n¡öUð¿’>ìóëV¡ÜaÖ‹/„ÓO¯ 3{dÅÒÅŽÛoçž8úqáûï\…Cž79¥À' cý{àÔSýqÉŠ$÷ßϼŸ=pšðý/aÆ[|uÖ*�RÒëäõɯNzeÒë&¹~!ç/7÷”Û`Ç1N Y1€DeåÂöí¬úèm±œúÝÄ5Þ‘nšÅ?Âtå$µñ³ .¯¿sl9>êXÅ“J[Nxöíã’œuœS’hÈ\£×H8ƒ}û‚öíãî:¾GñЬq€¤N]òú£M‡êGþŒ±/šGý]°}»?. €�ÝáÏŸé ñ׺É;ˆóý d^ÿˆ“?gìÕŸ¹y\ì‘‘$Î(^]ï6÷ –ï@Òÿô[½%0�˜¶ý ðKsã’‘$ÎîÀ÷V:ÿè ð–ÖÐ&Þ¤6&6ï»ö u½+lÑg$¯?¬W‡P/ÎàãñOÆiV\ÕZ€ Ý!Žv‡3m<¾¹h¿º�.^§{ØæõÇ#:ÉÉóÙäïÀÉÖ‚·7°GB‰�£Üêtd‰U­ î.?v›pJ2‰çWM‚c_3Ë›NƒzÝ_IUkôAöhåP(p¯zøtß÷o¢A×¹AÛ“#é•qªRô4KZjòˆI^‡¤[)Czùœï4Jn�ɨXd$i±GHµ‚õëMÇ]ø.UX‡ˆSý{EýšL4ã"ÎØïå�{VJÕ@Ô€ çKK–søgw €''FÛ/ÔDÊÚ¤¼þd¶?cð#kýãN‚J—évyµ†­j  iì�× *Þ0œ3AˆÏg�`ù}$ÆÎ¶=ëfXZò[ªÖˆ²~G��aõºá¸Kÿ" W*{Rk n¢èü‹º®çõ'³FF"ÿ;lsêP(x£6Øu³$óc*’=PµàîO|®ï»·÷,g¯_¤7�¼Zõ?T˜š}:Ôën‹Eææ0€ØÚ2h� @е{ÓMlߎi%†{äÈ/{^#P¯VÓ!Aò¾ É®n SÆkÎóÅÝ9Õ)œ(p ³Eý—mö¯›³³ßƒJŃ}û|عÓSwB€ìÚŃM s˜�5�=z�ñÇý‹gô%$ÉU»ü„Þ­¡wƒ�Ç‹ckZ�àÀÎ0`j³å£p䈰Ȇ {ö�œ±H¤qÞh°i“†a6ö4ð<ôÀ¶½ð¢ªA�d`*V¬kwfƨ=úè&V¯þ˜q[ÛÆáE·%¯öAêa?õó’‚䪶á>ÀúC“$¶ëÆYI˜ã ð÷îÕ®ˆ'ùS‡WJO*nÙræç‡êò,@(¥�Œó� 8tÈl,.þ–/ü/h'³rAüëÈGä‡oV?m’óµ6‰s•’4o^›©ÿ ™C¯VIpô:2ÕŸá5ñqmÐÕÏ;ËžšúظхC‡d£b¬�ƒDªW[·èÚÛ6�ù#z>œõÔi8æV¢[ÒúdÔB&9ÿ}ÀÊåØº¼»îÕ­ -¥ûè§þ¸Íל•÷Ŧz%Þ.ê·ÿŒÃ¥…™Ù‹¡Ñp—ïþýCQ³ ±ê•e™À¹ÙxôÑð…xöä:6ELrþù @Ò“$í°yVp|RËIë[éë8cß¶·lù-ð}ÇVd}p‰Q¯ÀóÊõåê ÅÞBMìO86ºòÂÅè®ï~æ±N{` I_¿ì_“€9tàÈZ¬’:¡ÓÒÕÏj…rù0ŒåaªY}D§^¹ËËOsÎ×ÎêUw;a[B�\=”ˆ{"p\ñIðï»oÕÉV×`Ó¶~Í,—0L5k°¡ÔLLlªWõ‡^%|w·®³«ù|b�ì¾z q©V�+º αFÁ��6 ëmÖ1ö SÍ@ÂÁÁBÁß·êËÕ !Îm�bÚ*“®Šu؇&ÐpêÇ`¢ý¾÷&°I�I¢ ÷è™ÝÉ:p| üŽô©’¥;ÆWþŒ±Ë åÒ‡€s§•z2à aZiuÉ6P±Ôuè½ZZ ‚ƒàºVýÐ‘Ï ­\‡´q³8oGÖ†³~ &ê@âÞ‰Þ­kZêV×¾1pV§©•ÝjÕ0ûŸxƒ¬ŸûraãìÙ`šN4ÄÔ“�7«_woÖyÖ’E ªz…é%øVÚJŪ<ü¯BÀS’O½&6@Ÿ {ãýçéZ�µ~t§ITË"ëgÖÙg�yê‹4jÕ•àé"äqdíÿ(åÏP±,ˆ»·/iDµ?šÑs[]¬ý íœ_ ×'‰T·®Õ{·²‚c-RÓcªø4à‘$U Ò?@TûCINDûÃ=ºøLÇñ¾,û8X?¸~ìu~õp ºëÓÆ~H�¼»7“Üy74›$l¸“¼˜g¿, s4®¸ü½ªÍ¡ëÏðûßYÃpÆß²Ì—˜ë¦îiÙ!É‹ý¨YƒÈý÷´îÓKÀó¬ÆríEž+þJ?™×îHÞ÷îÞÞ­X� Íñj­ZÕ¸bwkWžáž&{�].~ à â!´^}ÇŽÖ‘•HDüªU»¾¸üÛ¾+>59ÃÝÓäLÒ©n%cŽÉJ››ì÷ Så¿…R©€Ðâ(Œ˜¦ õºÝ¨úoô|÷O;§MZÒ_?|²~Éö§‰ßT«^ØÓ[Õ¸|·!_Ù8Púõ’>6{�¿ÁùÛ%óz(àºnG<¤¹ûâŠ$Ò@Gp ‹ t˲kG« |ÿUQ$Ý—ªå¶m~ÑÝׯ¸éþ~áØ«')¼ï¼ž6‰{çÝ ŽÎƒuê zƒãŠ«2©U:9³ÿQ–¨ÎRÒÅÁçQ\Wº §êrÿ^wP« Ó>Î[ƒÖ\ÿ2БAªK�ó…/2íb¢LœÉ—֔ޛ…êŸ'I/�aúHãò«À‹É­÷þ'}�%•?ã쥊ý±€A(`H†:®ésn GЛë?Ð@Ó´«sËBü~”Kó&®x9踒õóŽ×2I”ZàØ«xÎ3>‚W²ÿ�ÊIߤˆ‰¡xÆÙ§JëË—€ë6Z†zÄú�¬jÖ`¢z°0‚Ž6ˆiÚµ¹å }!Þ�ÄrIúHLúÈI\qóÂ!ÕŸ$Ž:Ú{ï�ñhtQ�—5-•†¯_!ùsή-®/_m5¢>OVÿ‰ò`¹®…*VmÁù ï7’4ÒtܦÓáßc&†vµuÌ�°þ¤ ‘ภüûîˆ[Tßµ¬|ÿ;[ÐloJùs“_[¬Xj©X1 ¨VŽAÂi¦˜€aØÕ#Ëï®xGÚ‡ö$]o¿ý�`žü«=»ì=ðïPÿè¥)³€'CŠŒ³+KÊÏ“FzLÊÉÊdÿ~wO$o`ƒÌ7Þ#|ñ“1T){$¾ ¬Ç{«ÔÑ»ÕØ}ƒ>-%e3Vû匳ËJ3öÇKuõnÝÚÞšô¢‹ÄÊD�� ‹·\T¬ê‚ó.áùçGRiâ‘é×ñ¨³êu Bý8v%µ° ’ˆ÷“Ä®óÃþëDÞq¾·ü™Á?Vš¶®À±¼ìt­ é32$ µE÷÷|׿PíoÖáÊz_x,²–“õ¾¨úíצG$߃úî’¿Ÿ$Ô€¬ýÈzß°åÏM~qqʼa<¢fñ¢z5?oÂÆ�&¦™  R?R=ÃuüKS=04Î#�SIw>i[²:etõÛ¯Eµê”Øf AŽÓ3w˽S‚d%ÞO¢ëŸîü åoZü¼Âlé–ÀÁt“C‡p‡QW²zWFÅB€Ð&q�éi+ˆƒ†];R;ÅsüÏD eP‚L*ðŸ�Ö·–µü¨ûì×îì©VIoÕ5 æ xÁ¹šˆ;�$ÍòÝv«ÖŠü ‹¿¾8[üZLX\XpZ¡ÍäöìñÇ Íe¶�ÆÑÚ/9 ÿ–AN²ÕZ–T«z3‚ÃkÆ9ø¶ŸK’+oèÜ xµ (c»-›Ÿa¯+~¿Ц#ƒŒ @Âi&M�š{ìÒ‚ó� ïº¥ƒ]‹³ûŒƒèÊ뢔�9·x:iB©_2GopÔ.¿ü½ûÚ­0NR¼à]z&¹òÓÝêÖõ˜ã_™±O†¢ùH@Bé&+Ë yXèæÎíåƒÕ{°öÚÓ´Ý~u�´ñ²Aêb 8ê—!s(àPÚÀO@&Ñ€äŽ{ ¾;$XÎJöÈõ3&–Ë›JÏßÇ(ºtóÆäc�-@–Öþ<)#ƒ®ÞÛgïë%æ¸,Ä=NçÎ{ Å$«W‚Ú–sÿQÚT|Ùê©XBª‡êWù¾P¢ai=ËCˆChE¯^�¡þ€9~G¯V]vm§ZÙ.Y:�¨†{¿Ú ýïèÇðêçœýKicámÀX}¼U,|!z±BF:Q¨nœïy”�Õ½2=)\ú3�YÖrÒÜ€CË×jUšþ#HJ¼³§MâÜq4u+Ú»•¦I©ž5;¤é¿ZÞgìÚâûc‘+#�‚qÅÍ‹6HõPí Ïñ?šV�ÊC$mGÖú )ÀÑ«-qõ�M¢I}÷gúJKÉÚÿ~MF’I’ú-‹_PØX¼%P±ÆÖÍKï"Œ"@¼ùúöêr·«wP‚L:ái{ÇÕ)ÁñüØ&aœ£vÙuÌ‘Ög!Õ­'$b ’½Ÿ$å@ büí2?Þ)ìkdì…¸` ³ycRM ¦Y^z¬ñ]�ß×𑃃T·~_«nÕwߨ“ ¢­Ã(ƒÔ+ÇØÏ×]€úx¦šèb6‚dé ûYâ—{ Jç�LûÌÑ•Ç):k¥[‹·_ûÛ`'dŽxèÚÛÝÿd ù>Ô¯üL‚]åÓ×ßßxö'ð½Ê&ëwp z5ÖÉŠÈ"éî˜nÄB9ïñ=ñƞΠ�¼’>†’Z¡:Ý&¡õ˜ ×wÇ9T¿É;4LB Qß¾«hÂþw•2"ùsƒ]_Þh}¼¥^�uº;„Þ ¢,˜Ç‘I‹óþ©NC\žtŽ×鬴paI½‘I‘ þÄà¸7:س) ê§ûS�$Å^ÀAùY'|ZÂOj$6˵,vna†ß°‡eI#}¬L)/ÍÁmGq=HÀ ·áo¬Í‹¯¡g.ýjý¤3?î‘—²’)õqŽ3¨U׃GêÝ ’õŸ?1)“Ü(s·t ÖO²úï‹5�þ ¯8ÃN1m~¨CÅÂ(úØ-¹Ý±ƒA̦  @âºöÒœøŒðá™IHI "é4×YºrÔvÎA›ã×co‘Þ*Ç3k YúÏŸˆÞ-½ºU» w©n%Õ¤²Ž[–~D V­Ÿs¸§²ž½LS2 ÇvÓÈí·sP^ûLÛþ�ŠØ!sÞ[=ä@ �†÷ì—Ù©iqåèÁáàp³¨UŠ\²öã$¥?|»Ö&©]ùÙžÞ­¬õ[þ�ÛÔ„O•×W·ìT±ÆrÛPZÒ#a¤Qç'Ö—Ät0vrI–�,œƒjU/æp¡ÃIUìAtã$eHîü>Ô?õÙäï'DÃ<’TS¨°³ì‚_À ¦d,±R©¶!)Ãv« øê5ˆ,T¶m1ªYŒÙKý[}_<>‰Æíš$à¨]vCßÌ1¨~'ÉßÉ$Ù] ª­iÊáŒ=\9†ŸBHõŠŒôqÛz;ÕñúµˆÍ«ƒ”÷¦«<Ï^:çù®x]´@ÆÕÏ pÎ+0Ç !ƒ\ן8N¡ß“ÇqÓ‹wÉ$¥Ø9èÜy/Ô>’þëï¬T÷×ÉKžç&ÜX™…KÁ0${ @Â.^ÜŸ—Ûö¹aCÀóuå%—¿]`T\çßÞ RVÜ�}ûD¿¯^£Öõ T$ЍGÙ!œ›™½MC½É"……ƒÆç…€ãS`ʽŠR¯È½K{ñnßÞwüc`*VŸj–U]´žïTSþÚSÒIDATÅ%º‡JÚiW^ÒøZ¿0Ëë�–@ù[%ö�Ò”ó¯ÆùÕ«�¨X]‰["ß~k«kDW0cæâ!ërÏëÜÔ!Ö8l!^s^D]9qíÒÝ—´^]9“R¿a°ïMmtÎ!ä›k)1‘Ö~àoèâm4\ˆxíó Ô«�$‘š…`(eò"®Uo Á0,g~±º`\'´ƒIg”ιs^7Ñ’V»v>ÌÑq+u�®!k°ÿŒ�WšöÞd•áßÁó2s—ƒµšŒ{`’âÕ«ÁK {³ff 8p 4lnä@ñ�àYä1~¾çÂ+tó!?¿ö%`˜ðÅ©cü�ì�À37ov`~Þƒ™™ÚÞ Š=†�¨äEtùª)ð ƒ ªåUýõKóö�BÀF9Æs=ÂÊÄaÔ¡JJ9ƒ‹CÈñÐQU¸Ùêg Uf¯3J|.†Ê ´s ¥¶{ž ô%88–é°EÂAÃÙYÂ1t÷Z¦¢`¤ÓQ¬Úþ‚zÝÈݾkŸ$b{X(xgý ÀáºR½r§• ¨Æ>Žñ€G 08¨6®ï@¡ZXGÐY䦛 ؾ�ƒšzB¯F UKê�𤠴>ìyÐ�%8Á“fRºnðõ©MΟà@õ ]»’EÚöªWô’L-ٷχ�;=Jm${ TÅê`�pL„ROLSÆEh¥!ìø½™Ÿ¨Z Ø´4g]'6DOŒÑùáóú£$0ù3€Ã•õ�76 @AvâäÚÅïøçºò-¶È¡ØÇX¤ $˜þN�=f®4ÄwˆhX¤ºh�ÜXd—k' ,ó¤š×ß)¸¤r C,RŽB{ 0æñ-{ ÝA®]2̇`œS»³ö3–õ»Ô,Ü3 ßf‘BA¦Ÿ„YU-ÆÌ…ƹ¾ ¯Lkª§5%ã:¢{Nf]�‘T]š¤ú þnz³wyS­jÇ=ˆ=0­¤^�f�!çCH,‹àÖ¤’(!cÝ0c=°G\·´p°ø O°§vL*Ý£• ‡M›¤WK ª;² EQµÀgöÂáÒ»9µnù¶ fAà@õŠ˜ƒ‚Ä"*s,-yÁ:óô;¼V#V­H#c�[„X$ìÕ2 °¾gDêÁ"ª O+ìöE �¤ºX~F­j~|˜mvZÇ®Ž*tþ­ð4› ú)–ÝKJSË÷F‚C¹u¥�.íÛF�x¿•NòZ�’=FÎ ‘ Q½Zª=‚à�Y½ÝvÅF"@â5¬c�–þÈ÷á)QOÄ´Ó•ÊÈz_¿pY-õsL­«þ™a;�õGØþ@{ƒ!U‹\¿¶ÍÑh/—1@(Õ-UíBƒ½Ñ�kG¢@¯ͥZµÞ-[?hÛ»_}}-ÄAs¥’ó‰âLí.BF¸U›ƒâ¶Ývç’:EY^öZFy£Ñ¶;VXµZ$Ò`�²GzˆíËËr7”¥¥6›‹ ]"U°v¾V˜I8g�º¹¾v´ðN×ãÏéwRç÷·%`ð­âº¥OÚ| µÛ GÕ ½Vø‰i$d”S”¼R‘ÁÀrÙ Œòã�— p¬ƒ´ôjZXE ‘oË•©(”õ‹*z¶ Õj'‹�OñÕ&Áû“åÁ–�–Ÿ[¯šo×oÑl]ê—éÅÁ')W„ü%cZ?n®P¨¸»ËÓËßùj3¿ƒ=È[¥Æ;ª1^*IÐ Ç ƒ�j–îŽBÝ¡d¥T«g�ž Áuì[·2ÀeºèÙ¢¤ÆbÑè‰ 2Ü‘EPåB›¿#H8gàyÜs­©¥#Å×y.?M»Í©.~çÿKjÍ'u–¥µÒ‡T?ðLÓ¿­<[»Ñ0�E0 ?`T­d^•Œ’«îÜv»d ù>sj5/ˆw 8Ècµ¿W+Î Z�à2]ôlE�$l“„YÓR,‹.cbü4 ¨5ŸX]*¼Ù÷Ù3bÕ&�•žÔ=¥BZâI ÌÔϹ¸·T©_[Xçþ<WuJU?Ñ5ë8~+‘˜CåQàˆ‰”�8Æ ز°ûW‰ëÊw "H(Õ&A‘*–üTT.d•å#Å“ëUëá³míyª›Q}"G»[ÄøÔÏ8 À‚o°õ¯-þZ­fœ%|ö�À&á<ãâŠEï ¥uµ¯ƒ!ükpÞV©Hµ¢äC•9,KÚ Õ '›ÕªUޱa�XUKÇ‘^.C£!?éòp5Sä@“D° xÀ—JÏ®WÍ3}Ÿ=EÇk1 x Ptn.OW¿ H#ÌmÆð[©ë*k ¶Ý‰eáb'i�¯"pŒ@°AZ&Ù°�kÚ9ç­8I¡ �wR¹*›DîÏ“^.4âÑ£†Ÿ¾ÏªK•§Ö—Í—û?Y°†ÁI}[è[xÆÀ1 ÿ;VÙýR©²ôC@– `�û r²9¢ rD˜5ÐÞ¨×= 8‡ïû�·êðaÑ‘�;†j•*ó±Q±ÔFõ z·ˆ0N‚Fx©dÀò2fKwp½Þf©VÉì_rG± ª]! 4ܺú¼ý"×1^âûì¸aMÖ•(—sñSÓò¾\˜i|Å6ëG»€Aêm’ ³q¥ÇJàò“þGæ($k 0ÊeªU/0â1ÎA†½ê­spŒ%ƒ$R·$LĈ;¦¥Ôj(h¸£OLâymŒ€BÁDT½h®+™DÚ)�@Á¬Rø…Fµø<ßåÏó›|R'å �_9y��W¶ëç á¦ÿ »TûF©Rÿq Ù?©Já§ ÓlÇ8dÊHÛ�«Ã0¼–½�†8¦Ž 0ŠE/HÁ9W8Æ =Õ- &HÐŒ ®p‚£ñŽñ’Z 7Ë–AûÄ4)."Ù$ÊxG  ‹ô ž¯/žØ¨Ú'¹.ûáOxÉÆîÀØpÿG–)î²K�» SõŸ´@  C‚@²„XÃu‘¤Þh d|£ãx&¢!Nà@&¢ à*`̱T±bÕ-)X¸€$˜»u챬#V‚ ‚ù[ø‰*1 ‚IJŒÀ6!°P@1ì & úNQP“UÀ4Á«±©ú’½Ýqͧz.ß.|ö$°W- ÆÅ¦·Ï2½*�}FQ,‚ëB[�Æ&c έÛ\—o>û9_ð-B°Í D º–ö†çFxËÑðù`ȪŒ‰œù�2.þÛ4ýÍ‚÷`¡Òø)0Õ Ñ œ„àSÕ(ÕC¥ªU •9ä*@©^‘:E¬�€@æ@• ïA{ãèQ¬_.•ݺUDåV­pŒ½Š¥eÉÎ�”š¢ª\XÄx º‚U6Qmb’°Ê¥º�ÉÓE¶ ² ~Wml(1 ± ~hšñ|ÆmX›<�Ïx›a˜ö}(ã•ÀÑ\ ÉÀeî<È9, æ-†˜7 Þ´�ƒ†íÏ·dC`�mh£Kz :A�ç‰-äµo{¨TO•js8H½RYƒ\¸ä¾ Û7Ýê6=-ÕeÌ™cÕ¨X]Ï×p‚#^§r¡+˜RMˆM,h› “�Úì’ÒŒ¸“ñN1T±a#>`‹¶k¸Í B²²Ê0*h¨Cž¨ßæI�j’z¨` † @¨ BLAî[•-,¨V‘*…Ÿ üŽŒAê2²‚ƒXƒRMÐ…K «T’ñÇ*:q¯ÿW…ŠÕ$rБ›Ò‘ʵ°À/år!0fgy‹Q Ú'*P(ꮲ‰j“�!¯2 1†ªrQã Ø�ó,ø¤“==qQU" PÙ* 軪N(ÈÎ@`¨Y¸j¡ R©2Æ‘#$lý�5¦§e|c•«Tá¹–n�Ò@oÈ×vÄJ$Ä&¤r>Ü6à‘MpRã©]ø�@B¶ þÖöxµÓS(*›„ øf�±¥zâT¯$ì¡¿‹„U)¹iÃÁ>2Ä%C´Y£×�l�ªý†€ ÖÀßøÿTÖØ°AôráJ<�·17]W-@äü =…å»H ƒMÔ˜ÉÌ Æ8$HPõÂïÈ,ø¿Ê(�y[ò¼šŒ`¡|.FØ5¬²H/F¡‘!•‹þ«Tê‹b ü-Ë  ÈIßÍa€àÿ ü$` ÈÇïóó¢#¶¡²FH¥ZÍàÚ>äýHŠïÉ&ª;ÓTöïo«]hÈËõ"�@!€”JrUc±ˆ€j3� R±T€�O=J�¢ôÄYlb‚,WÞø¶3Â�?zúKÛÁ‡ZMz�ªUŠ�K€¨ÀÀïh_��±u«¤‹hl�Õ š¸k ©Ø„Ô®¥¥¶ú¥':± …ìb,Ç‘†|$a€H·±t[–üTú_U¡ŽÓöRÂQ� ±,©R0*HÈÞ ßP�"õ) ŒJEºnI�Zì¡ÉšuJË&hÄ£Ú”rYNr²S–—%»Ðoø] Å4å=žG)ôm0NxÕ-¬ñØà(�„9Á€à 0„Õ+bÂ0$0\WlA @P š¤Úå²ßôÛò2²’LI�FLD|­°ÆšH& �ê¥Ú(óóŠEŒ¤cD¾ œjµ­–ÉŒ`y�B€!Pà9úfb’$J¨š3f ‚�T-~J›BÚŠR© Žz v ô ˜™ißhc�*¥2ÆcÍ©XQó¬‹M¤)Y“b'*£¨@©T�eär_Ê‚d Ų$8\WÿüNŒ‚ÿ#HèëU�‚ÿãy;&3¥ÑÀëÛÁ?�,U ú”¶ƒü�ßñ7Ç@À@Pà¹éi´A$SlØ€ÛíˆÀøN ŒµÈÁ j'en޹]CY¿×�H;ejŠAµŠlÐ ‚Fªb8Áñ¼Œ úB`P¿ ²™’¨ƒÀQ¯·�B`Àëñ;‚@*ý�€h4Б A0¨ (•,.J»Õ¨¹9Q}B»‚@±y³äKÍ̈À#¥ªQX&íK%·+™pµÆ4Òc"B�Öó»Ð=Œ@Á# d´W–—Y‹]0õºd!S„A!û'Ù‚ò¦r`´FeÍy±Ò<%"�"'G;ਠ^�ì²¸Ø ü�@ƒÀY·'´,ÁƒÇÌLû{\ÃóÍÜDüŽàèQùI`À߉!SSx�¼¾Pàí“Äáa˜h€¨ÂèÉ*x!eËÅZm5 ¿£Ë˜ìù¤— ƒ² hÇà�¶ ˜õ][Ë+ææä'‚€h?à�`ÀƒBÞ'í T�d[¥M�G˜)ð· W£Z²�ø’$B(©Á"'¡´[ð@Àà� 9þxœ¼m9#xè õ!šüt ªIíû<ô`À# 9(tÒíy>ˆF|Z5 ï'vÁïÄ0ü$àP] µn“zФW#ÐoÈ ²ü6h�!ðPí ü?‚%ðçIVŸ’ 'H)5¯‰‹œ€�²TAŽZ'9âÚ¡N~õBz"EŠ_+ÉŠéº<Ø«{‚& 8jõ¢$Çöíñë¶c˜�ŠÍ"‰€ã¯I6@ýÕ1‘wk�3`©ä@°@›ÅåŽ\óR׈r€¬‘�Ì»1 äŽ\óR׈r€¬‘�Ì»1 ü¶• 3ŠÙIEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/dde_calendar_ji_32px.svg000066400000000000000000000025111523260663500333300ustar00rootroot00000000000000 icon_ji Created with Sketch. 忌 dde_calendar_spinner_32px.svg000066400000000000000000000147701523260663500343370ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons -mockplus- dde_calendar_success_200px.png000066400000000000000000000377771523260663500344070ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons‰PNG  IHDRÈÈ­X®žsRGB®Îé IDATx^í} ¼U•þwkëî·æ%yY0’`Ùƒ‘qÑÄEDEPÔ™Y\õ¯ˆˆ+ˆŠã�Äm!,!!$�@�’¼loï®íþçVUwuuWWõö^¿÷ªù…î×}ëÞºçÞïžó�sî-†ä•H ‘@¨X"›D‰Â%�$™‰*H H2= $Iæ@"�Ú$�h�Úä–\5E$�dŠ tÒÍÚ$�¤6¹%WM $™"�t³6 $©MnÉUSD @¦È@'ݬM @j“[rÕ‘@�)2ÐI7k“@�Úä–\5E$�dŠ tÒÍÚ$�¤6¹%WM $™"�t³6 $©MnÉUSD @¦È@'ݬM @j“[rÕ‘@�)2ÐI7k“@�Úä–\5E$�dŠ tÒÍÚ$�¤6¹ÕtÕ»ÁLÓÆ8a¿?Ķq†g9g9Øzέ'þžÂæuGÃhp—¦tu @êþÓ›6MÑOgÇ3›¿šƒ¿Š™ ¸íxÏÏ÷’/œ‚ÌýžÇ Dq†Qö0“Ø_Áøý¦ÖyßmG8Pg§ôå @ª~Î…¼Þ±V;J?�sœðã(ùjbNhgF×ðªF1˜ ì0ÜnƒÝ~ëjý1}ÁZj¸‘©qI­Ã45¤C½ô�6;“1~&ç|-×ÎË™ká+¾§ <‘…Ìð|u�ßC4L-í3†ç8g·@â·$`‰7…€”““ Š3ëœif�2ðs,ñá¡pUÉÄ®Q¤µqN<`ÅlŸa»AI«7­9jÐ!ýŒ%š%0bJ3Ú&t)Ž Õv<çüB€Ÿîz—cl= ]vÛq¿.êÛÊÔHoy¨g¥b™WsŽ×…µÊ‰ÝpÀ·PûŒáO¦¥|æw'ìbªer$Œ7¯Ÿ6MâÿÎ8? 2 vI ®Ê™å| «.Ô-Ü¢í3ÀâŒ]ou°Ïÿ~E ø8‰5ÊäHo}pÚ;$Ëþ›[åLŠKà%.³ ~{ì�[§‚6™| ãõΞÕnëß眿=ÎL¯veo´%4QÚg ¿–R¿ëØ]»'3P&@À ïÔ[¼ö4fãp>§a]¯&—£äâBf´ÏØN.áœß{áíEÞ.áU›AÇÉ�8NÚ¶ Õ±sàkàüÜ?îlnv—£"�“¬}ξ38§ë_ï9ô9JÓ/¼&Hš=Zq¬šÚ˔ѧÜ÷£yiY¿Ç:W™‚pÚÖ/ )Ò>ÃYK;óÎ>º}2i“úÇ¿öé]ß•eÀñ÷_wƒôŸ |–Wy\ƒ§¾› ¿z*µÏÛÍ%~Öï�=ÿÞÉ’‰ �2àxÓÚ|ÜþãPýÓ5*û<ÌM%˜(¦âÝÃTkŸ3`Ò'þwõÇnœ ‰šÍZXk¯7�&ldozàÏ_øÅÅ|£ÖEí·V|ånŸ�Û`_½ý¸×~XÊ'rºÊÄH­±ôÉ5Ê¡ý{oàÀûÂM™ò] /W7눤ýbÆ'YÀÏ·uÏ8gã²3̉ªM&@Ê€ã¸nHMãÖ/PJzÍd¼Qú¢VgÀdoŸ1ܶò{8îœÜDI뤼æh;xàÀƒã�Q¬VC§Öë‚÷Sk=µ^×’í3üáù®iïܸ쌑‰’ÖH ßV­»>Ý«K·‚óHpD�'ù} %ÀØú4ûëV�›uZ�iô­ �2à8ì™›ÕE}¹_‚‹�~!¯ÊkoóÝ®IûÅããtŒÝ¶µ7uÖ3‡½×=š¨õAÒš)à^é´ûŸý ouÞ¢(H„‰ ÊAŒ´ÄuìFAÕÖeŒµVÿ9ØÍw¿ðlàDwÇbkƒ¤õRÙ©<ü%p~ÉISÍ’cWÝqÜ«\pk›[­�pœ²öÑKÜúai^UéÖºî7j.$í—×ïErat˜’|Þ�«_y£'i]�´@BÀqòëNR€ÿçEòFM褞q’c üÃ�;òžVIk$«×®Ÿßaë˜fIÇeq§AT;qÈQ9½Q.†z5Ñi÷�¤»võŠZ$- ��lå›Ó½C#bÀ1¡^‘²³,Š”†‘ë(rö{鎚¢q¡EÂ'vûxhCGÛëv­<<ÛŠi)ã�2¹UX÷¬tŠ1x5·ù'ã®ü…rq×øêkŽwEÒ~e/cÞÈØuÒ:?ƒU íVÉø¤8ÐÇNzhçi²iÿ¦1ÛÕ¶#â”JÚw¤TqªqK‘þñžcæÜôòVÉø$Ž5zûØ‘©ý³g ·œÏŽ3ý¢ÊÄ5¸¢ê©õ÷¤}GrQ'Àvíe©U�çzv¡¯—ãŒÖÈ€„€½½ÒÉýnøÛÆçÆ’”ÃñÔwœ±_ßݵüLôõÙ­’ñ™‡eyG�ôZãþwȶõËò6lØFb«%·Õú•ÂÈ~Ø‹^CËßA”š\ý·$ù¬?«ÇߊUû[‚�Œ=@BÀ±R]Û3cÐzÌ9�¤0Íœ[ Ÿ^Î/…iTÜ¥¸Ó'Hò“ö=æ0¶òç;÷uÊG>a¬Þß [€”3­Îècx²W:q`ãwg­ÕÖO®›<àŒýèÞ®%`YŸ�5ãËGÆ W8íÞs¯D¼ã˜ágV¶™æZç8Ðr>�(%*ÀçÕUOÒþøËŸqX#ª²ú¡öÞ|ä¤@bã'4v 1­Ðý‚tbß‹·ƒó“&Ϙô¤n 0vϽ½�†þùöxšZãÒÑ=K:~ïη*_äA—rŒjI{ñÊX¸:™OÚwä| C)*˳TÓ‡—7eéŒûgÌù-úwÛ%AÄ1Ò"c�¼ö(6­�Í*¯Í½ð À–— ºÖl¤¨HvÔïaÆX­F\Æ é?€ NÍ?é´9^¦VóRÁ´:~wß™2ìŸÖ­Ž“ &­,H¸Vï-ãej�!@®` h¹ëµÂÌ~õ„­ûÖ1ðÃÇrtÇ3æ˜(åIðXÉ`¢µÏ�Í÷-š± {º�²^­&›ZÍHP{¸^+´÷Iǽ4ò™Û7�ÕÄHÚ™¸°˜ôÞæ¶ÝŠá^»`j�ÍVÝ1H11G¿"ŸÛy·?•½ÄR˜à…Ç{�«âaÔðG¹w“ö‹%Xòtß¼€Æ^þœá¡ûSsNF·i�5ao@*h�Wõå^­éö�EC’¿“(ñ{þg÷C``óm†V“´_ •*� M’¿®J§<Ü›úëXk‘1ˆ§=z$Šy�ö8NïûãxGÔªïú+ŽW©o)¨Y¢R%"î"/“½ý£»ŽÆkg¼ÓÔ¼˜}è»Ï�>—ÚXõŸK¸õ­÷ýŽ)ii@´ÇÀvy KÍžnç6ÐÊNͨ<Ê ¬4n}ͪw‚¶¯J*.=ìR¼¡÷Ô"‰ZÜŸÿnÞ �Õz«ÃÖ¥pyéû3™ÅOeGw£kž5V\¤É h�vE>æùŸ–-ë+%KP”:©r¢…ŽW•õD›dåo|"·/AÂ_‰×Í Jöç7}÷ì»7tÔšÑK–/}è�i×`xì´Hóây®¶ËèJÉ«ûÍuŒóÅtt±4jBWOkTù(�Ó¨vÆ¡ÿÿ¼èsxûœ ‡WØ<´zâÃ¥iÖQñÔ:äÂÛ²¶[Y…�œUV‹4ÁÌj<@Š¢æ”Râr�vE^ùÂÀª6Ãú3Í­üÓ\£4‡/‘½<' t!ï~q¿ÏXñÈ$í;‚Î×s矃Ï?;rT8ç8ií)й{Šh~ÁDZ,ÿE~íó»Ö�•i.@|q C9f€Q²ùEe¥_"Èà�0ZÃf|ØŠ¬.iïœóv|vá§#Á!€%r*tÛ}nçÉß–Ø·êb—¡fY�VƒµHcâ×5_Xð\¡ÛTŽÝ=ò8©�F™.±†ÙW(®73®‰0ÁÚ?eæÉøââ/@bR¬;ß4´g?þQÿNµX×Å&-á¦åóÎj[‰~ÅÌ{´žÝoíao HšÊØ}2EÍ‘Ñä•;¬Wf²Žyå×ía¼`ø"¸*QM‘WôÞ•¤}à˜i«põW�²þ³Ø£ï«S�•?gì�G;å7C“M´§Ìf™Y Hyóª=7Ú¶ä@ú9¤ýmØý!t?w ”�Ĉá‹bùË'iû”ºpåaŸÅ›g½>öD'Pœ³þs �ä} -"€g7MË.NeFšifÕ�ój¡•^>-+æ‘Ã5•£~�l N(MÌö/:ô#xßËÞ[8ƒæ0>ºá_±e¸�Ú^Þ¨ ßT”| ¿¥ùk¶ÈÙ Í4³êï]%ó*c)K_äïJ[ìûQ#7@vÃQb�ÊíhÞøä!ŒAþw"âç?ù<6ðd‰AÜJò7Tþ±õsØ-mž™Õ8€øƒƒ®÷ ¦®®<�¹L¶paЄI¨HìùZWÁ·Íz.;ì°@œ(¬Rrá~nÓU¸w=ù® ¯RKƵOLý"ÍÈ›Y 6 ¾}^p°ÃV`fÔ#÷àf‰£x×�OîQ”5Lžõßxyƒ!8%&rû'M?ÿoÉÅ�YþD׊3ž¯|æ;øõîÂnèVî¿ÍpÇã3ñ^(£†B‚†uz²êŸgÂĺ‚yçìb2ºúdØí*¸¡9”¾—q,©}-jà’SÓMLÌö_Ùµ ß[vRRù�›åDqͶ›pÓŽ[?µnÿ9æÇ;²'‚©¤a½ºAÃqH%þaæTpS=²¿c+ÀÚƒî]/…¤Tƒö䇫2Ë( c¼ë)ku^jd&a{v'Œ|t8ÞõÁGŠUÛ~3ûxûüxù—Ñ©´Ç^nÚq¾µí¦ 'w5Vþ�é?~¼{h˜b@IÍp÷Ö§A<€þ±”ᙇdøøÇœÁ¶9³ueCìQÃ&huµT*ýÎ٧⼃ÏD¯6]ë7ñó—~‡¶ÿ7lîä»Eaû<˜â§>×e>–ç!ût ��äÅ:̬Æ„ö~xü£}š3§.Ú›~}»)ýg¬‘jp¡rëð¶yøïW\-̪°×ÿì¼_Üúƒºï¦>=P}órnX~%–t,ˆ}ñºþ§ðñ�_jJ~ÕXõX1Þ½u†q—0±†˜yâß#2îñgïRzIÆR0�Õèþ§ —¾oÄ‚X�òoÅ«Õ_ê¼ùïÄù¿+ò·ÿ×<ÿóÈr�-P{ÿS’Šï-½¯ê^û–6?�o¸,oR6^þ•o®¶þç˜}þ–®þÿAWZ�‡Œ;@p¯”ßÕm*ÈÙ k‡¶Ÿ£Yørùp¾�¢Äábóöxb� a1\¶è\¼sÎ)±&ÑÕÛ~ŽÿØñÛ’§{¦Mõí—k¸ÞþË�ðÍ%áõ3Ž�Õ/*´=» XöèÆTþÍè¿!Ûÿ¶¹sôÀÒ‘’ÌüV\Ї€žLu¯gUí&V9‚>b)h“e ‚+Úáý�ŸR-ù_‹Ólå^ÿyóÞ�Orf¬‰D1�+¶þ·îº;VùB¡¨þEý^]s— ÐW“_uX9^È¡Ø¥£úõ{ì†DAC¶¾¶¹{ðÛ`¦.ˆúˆe¡M6qXcˆzcBû?ÃYmI¶çs²-�bôª‡iˆj½ïQúƒ„¹ 3·õ�ŠÄ?UÒÈþê�wáÜy•ϯòßø�9‚mø6 o‹­9âZãÑê›%ÙßÚ”Þÿ ´§õ¢.ö‡Ô· ·N€"è´ÿ£"‚Žáœ¶ddÖ%²ÍÎ�œ]cXàcB‹¼3v‹ºmà㿎ûŸŒ}ÍX|ßÜÓpñÂÄnŠò«Î{òkxdà©Ø×L„‚†Ä¿»¥m÷UhO9v÷‡·áÖÈC¿‹"è[��Óï›u¹bIç:‚.^;«ÕQƒ]ŸS‚þÅ¢sðÎ9'GU™ÿ}ØŇ7ü;6 =zMÜö=Ö]>üöÞ2óx\µø�ªÈ¯ºhÓµ¸kߺ<ë«§ýrw]_sÆß”ùõ[¦ïºRJǨdEÔàɪ åtà)œûÔ· Û¦{M´ñ»r_µGéÀÏW\‚Emžüî}Û® œ_ûrQ0­Ïå­_þåî,nûºl^ùlçÎÑ®éȺñŽw€ø³x)HhØ Ú¹BABÀÐ:èô”®^Syh¢õ{Xíq¯sÊš™�›—_ŒZWì™t×ÞGqáæï…$úU×~¹Ó^Ú¤~²üŸ±²saì{Z7ð4Îyò›ÈÚÞc ¢€uŸQ¿7Fþá§ÝTn?§ŸÞÖõâm€ª‹`á03ʼn‹Á`á¸pˆwHDdñš®‰%k/ì9©ÃHÿÄY‘Ê“¯Rñ¯q‡×«§ÐNÁ­·ý#ÚÆO—ÿ3:•øçÔÞºë¯øü3ÿ‘ïF=í;•8=V„ἦ 'Âæáíx߆¯c@äWUßûÞõc)ÿZÚV³gïèÜ� éÂÄRœÝ…z–¡,l€dTXºJ^¬ÙÃ�¯èÎuÞ{ùk�‚¯êZŒ/ûÒUìÄ»qÇøÚ¶5 »{òÜ}cñ9xKo5ùU{ðîõ_Ãný@Ãîc"TÔŸ<}Wûà߀hF>šÞR ¦™¸é2Ô9³g­­FÐQœ#ÌŽZéâÞµÿºéGâ;K>:h-îëêç…lÿ¿¸ÅCËQû—.x>pPüüª½úÎZÿu<ŸÝÝ�ö z¬P]µãRë�TÛήÎÝ«Tcg @¼}!-¡A‚áY £²†´¡¶wÑc h«U`ãuÝ齫ñÕ—Ÿ;ZM¹Ë·þ¿ÜUxJ-÷þ‰yo§y[ìK‡ÌQ¼oÃÕØ8ü÷Ø×L–‚yfÆÖ£�Uud(R!k\M¬ Y´ÿ°ß1/�”êCJÅuÖJ&½ZJÛ?{îëqéÂò»Ëõ‡’?³ùüï^Jé¨öÅpÖìðÅEï‰}DOÎ6pÎÆïàÁþ- xPGëÉ?J‚œñ§·Nßú–‰×ÄË¥î[ô‰K'W»Ç;:):ÜñX,ØèšÊ „wÕE¿çÏÿ‡¨±ÊÿNnßóžú>î;à%Ækÿ�3^�oþ‘ª2�/Øt=þ¸ïonÛaûxí;}ÕØÈ?<Áa3~÷³ÓŸùx*×Ú&V÷ ò^¬I‡žK2ºðsª¥žÛ(Ž=S‹‡¶^½Bí]¹ð,¼wîk¢›vKŒX9|`õøÛжX`Zݵ7,ûhg`œ™sÿ¶õø¯]÷—)Þøþǹ§B™±kß”�ëŸÏ<û heÒR$½ 7/ÅBœzÚÈ|=Ì�©~år®¨výª§}ò*}kñÙxKïªØså€1Œwo¸[F¼äFçÒàŠ¸´}~±üÓèPŠÎö®ØÎ7žÿ ¾¿½ø,Œ(ýQOÿ+iبz㎓WO´æ*ŒVý—;_pb -ëæõŽû)($WïŒá¹K»s]ÊÕ[nB¨LÆ�ø(Nì‰ÿ\�]¹8sý5Ø’ÜxHº·¬¸3µÎØÀ»qÇÝøÊ¶àán±/ŸTûS§ïmi£GK éDE/«Lª $–‚�j[°Áƒ`ÌMAuÖˆ‚éS/9,^™KM¹òõ×Ò~FÒð³eçã•]ñOÙ6Ú‡3×{òÉ�ÎÎR»±få§1?=#ö¤ýÕî‡ñ¹§^t-–g°ºÆõ¿Ò�†›²MjŸ#÷\ÏsÇBÊ�Àæ¹ÖL5ñ„žfKÙ¼¾dEÒ 0‘:døå?•¸üÊÊÆQ˜r­7òÀàÐV.ß­´á—Ë/Àáíñs£6íÀ¹O]�—D�c®Öƒ–~Kª¨ãî}Oâ¼M7ÀÌŸÙ—Õ5¶ÿÕïiNû6³}¾ýé@�CÐ[6Y±Bº»LmÞÀáŸQmíœrÜ¡tUò4L±`ãN‡ 9 nº‹®'ºýYjÖ¬¼W±ú˜£¸{ÿFÑÝ“{–¢«Št–uÏáýO~£ùüª ky ƒÍèE•7Fí›’~Ãö®ÍWŠÃ?Z6Ý=¸£Ð·aʈ¡õŽ,8¥Ýè¸6¶-1 ’ž�5+.@oÉ�µtkóðKx׆ëÐoŽÖrù¤½fTºpWÛswæ zËo˜¢G>{‡Æ¹[nÁt�¸GÚêœ1{pÁ=`�#Ý®qÝq˦H#Û?¢}.þkÅùUiƒjfìöì>üÓúë°KïS´…ïÃE×6²ÿe+Žè`CÚçÜÚÕ¹í¤¬<¸œçÀ5½u·Üb#CÈ¡ È1—50I›7pÄOd.íŸ�aµS¾¸|$°ªkÿèÎøÙ²s‘!eÙÀ×^cï|â»x.ÛWï”kjÿ«æ$ �?göcïzêlpz&5Çs­{hd]�zpNàØ0Ú"i`¦vÐÐç)vê|¸�Ì�ZµÙi¡œÏ•|¾¾@Å%ß»wЀöOîY‚ë�ø T)~rc¥Y?dfqÖ†býðŽè€O~Â�_ÿ‹œ/c SÊ~÷ÅŽ§~NüÃÖÁM½E�ýàí )spiCƒ&k=Ã/[Ñ‘�ù ob„?,"T±Q”Ùy9#å‘ÔÂ÷GæÔÖþÛf¾×,>+vrc@r¶‰³Ÿ¼÷l-_¤EûïÝìXÈ0Ý÷žýí;ÖC·tpU·ô=8Έ?Xè;zYCCZÖÀis…¥Í?pÔoÁ%gów\ IØ­IDATïmÔ œF‘*ܽ  í¿gö1øÊ¢ÓcçSo�vž¿éøã>ßán¨ÿÇ5î8E�‹dïxaÚcodÌÖ‘µt¤ÝÝ„-uô¨˜äîã×B¯FVwS˜Zs–Z±Re·Z⎠q†??=`jG¹ßƒL&P>¬�¨öß0})®;ü,däxyUÞm0GpÎÆŸááÁmÎ<› ýÏk’&Éß�s7íìÜp�0­ÈÅ+¢¹\¤•¯ö$äñ°5i]ƒÎRdnu�´¢KŸó³²+Mp…)py®w¥m`û‡ezñ…oÂë¦^‰j¸@àøõž'pÕ¶ÛñbÎç­šÀý/êt˜w-* ÒÿáÔKïßßöâzaVi<‡¬¦CÒ�üAÀ“å>@‡ÎçEZÑ #f -rÐÀÑk˜-ZbˆÍÏÜïc›LÅÉk¤’j–¶À÷ hÿØ®øÇ™+ðÆG`v ^òBv?nß»¿ê{O í(Mcl@ûþ…¨ Ʊë£Ûçßöb×#g8Ä\Ö¡!‡¬GÐ[ù:ž'+Œ¨§ œL-¦õ,û f¶ž›µ’„®Á!Ûkt?¹£JÕ®ªk¿CN �ØàØ©¢âS¤ÿywpòוákûº7ÞpŒ‰«@ÐWí·�¥|üž’7±DÝŸ´è ƒL,‡¨§0}Ö̡ſåœ9Fz‹´_|^,Ï)P2“öä-ŽTã— ×äÅëV¾Æ�ƒ1nìéØòÖöí�b *Ïå`åÏÃj̳AÊMÏø=÷Äÿœt/¢^”râ�táö…©Íî?æ*ÙV+ŸJP]¼®pßµ^ÆAª]á“öIV+·ù[’q×®î‡.Äœø‡GÒ£RLÄ,÷ìÕê¦wýɃä �¨{ò¤Ç pCEÚT u‡‡t닎j�ý£f²DQä½Á™´�@ƒä?Ò¶ë£ýÚÖÇòüË gL5Š{Ð×gã¤ú¿ÖX€ø#ê…GAÓ“¦òC¡A˜…«³ócÉV–Wkc(}yÉ—rú(*ê÷òˆwê|p©LÚ/–WANyR‚ °ß.™vN{è#0™!øi�rÂ.ÝBƒœãÝM˜.¾.*zVaó,ÇCÜÔwaj™’Ö“[rJJŸþ•€”ÌûˆŠÐ%;¬ n±¤ý€‰4þòÏiû.ÝŸÚt'Š}¸ñ�àÿy¼kzy½�^k<@Êñz´?³×M\$²¦¤f÷¯¾¶tH¹5:¸òDYB1�—Q\Ð÷¦â“ö+¯™Í’?—ìçwu¯}/¸™Ë“sGœ Þ:ùGM,ªÊ}^!z$ls (àm¦ê¸y]w¯Á„GkÚèŠSSÆŒ+ã««¤äT“@NÝ{ù�Ìú;8T×½+öŸ[:FˆŒPÝçºØ|îÝ–ˆŸ¨¯ÙÈò‡YÇ0³ 0­·ÿøŸ0[}‚Mu Á�ùòk~!y1ÞTKÚ/ÏÁÂ¥WÙ�W•ü%këîîûφÉõXæUþ°êúã�3±òqµH0íD·áÍæ•®yûC„™Åmµ[_ybj´÷ª‚À«õ“V[> ÕÖWmù¤ýxÆG.³÷’~ío÷‚IF‰y%Ü»ªM6Ñž2Ñ ~ïU´GcL¬ @È›UÎÌ‚©{³(6¢¨�¹2sàÄk™¥¸‡:DM jÉwÜ\•ZÛõ®‹JCmìšTz·“«}.›�îéº÷BXÌL#ÿð¼Wh¾yÕ8€D™Yûtí– ®9š„¸ˆ4—Õv}áâ¶‘? —>Û¨Ú‰’ÛåVSùWÑ·d­¾¤}G€åå-]*Á¬‘¶g>2¬=¿Ì*€Ã; Žé†eÓ5ž÷ª æURÆÌê‡ {Ä rÒ"…]†Pd†¥A†Ò3ðšÏÉV&þ±æÕâ&)?a$`É£¿Þßõ—oÀ‚ UÖaZFÑîAzš­¶è†Õ,óªy  ý�f³-W‹Pn™Y6y¸TÙìî™6|ôMŒKâ$µ(Ã(z%*žµºià £¤ýJz"Ú –È39fï=ÐþÈ-¥¿£=ˆ¸[k‰wH²Qô¨µrÁÁñ�ÆÄÏEij Ý !(×ÁdYo3T ûȺj«0$AÖYíÊ-?YÍÍ qû6š ‡QÈJ›´ï&j©©UQ9ò5R/^>�Úp7`‚œ«¶ƒ@â‹}Œ¸ä|ˆ[è6-ÐÃ:ô÷ VC»¼¼¨º¡ÓNÚû$d4ÃþçrÎi'Pl•"ëDÖÁ¹Ú3xò—˜�~ s"|8œ[/�¶ÎáîÙx]NÚwä8–òçRö/û;ïþ39§È¹)"s7åž¿ë=‡°]21ª[îµ± V>µ½�Ú£y„â�‰�1Mç!ŸÄCh§¡çò h™÷ÌìzÕ�—â?¼â¢U­1Të v]Ò~,cŒÙûú;þˆÅöï Õ´s�ø=¤SQL¡=‚ä¼¥â7³ü©'¤EèH Ь·u*ÎC> '&¢—j‘výÈÕZvþUΞ÷x¯¸›k DßkÒ~Yq=³ý’aíñµ%ÚCsϾ"=¤sdÐÌGÎI{4!öÑ<+�¬ÓóC¼Èz.B‹ÈP +J÷þ×\(Yo�žrI‰‰.[üUÏ}×Â2Má¹*Ç=<í‘’Ì"×®ç`ƒµGãM,o¤ü\$¿Od»Œ®”\¢Eˆ‹¨Šê÷h‘Ûºšé~Ý·˜­gTK¡«-uÕÖWmùÉÚ¾-™Oõ·ßu4cÔ‡Ïse˜F�{ø´Ç@ÎB×¼¦D΃rŽk™D�OñïA²N'/zZäï.’²Tä$ ÄEh¯çªðjq(šuÐì¶¡£¿ÎzJo î‹Ê¦Šú=¬ëIûŽd¢ŒÆpùrÆ÷�v<òq]~q˜«9ˆ Óžò\¥l9Ù§–xÜã`ÅİË=š¬=Æ@ƒPþ݆®ÉÒ®‚ö¬{qn9©(²HA!�dF–¿RË-ø*À”Ê(MÈp,2\ÝRWEéjåÏM=õÜÅ£mà ¯i2¯hC“×.Å=<ÏÕ¨i!L{4Á¼j@*q/.B{E¸Ñõ¥ tÙqû@(€harûðê7)úÜÏTCÚ«®¼uè~¨Wµ&íW€+cÜÔ^ºz¸}íÿÂâ$˜" H!·®æºts®æ˜¦•Mxqò\��ö#€´ˆ?.¢sEhrý’G‹´ñÃt4 q®P|Di>ùC²Ùýž*–´¤h‹JÀRöÿb¸ýÞÿ#­á'æŠâžö ³Š´‡ÆLøãAÏU“´GsRV‹<+¡{–t=c+°(6¢ªÈ.a'>bj°UÅ3µ$ƒ§ý ³ÚNñ�{éJ_§¨Ý‚[!“ö„´èO[¹s¨óö¯;àpM+É0�tÉI©:$À¬•L‘Òž×»m¬ZX8óª‰àC€”Ñ"t°tíwûú »ÇE|¦¸¢u œúoÌʼº õ¸d9îrV_µßÇm/X®Úv&Nÿ¹<úס®;¾,r©‚¦q�rĜܺ#–ʹ*÷˜Ð jŠ®SŽÖ“½èü¬þ>ÇíkAAºMG�L-af‘¹ÅdÁI¬Tª}ð�W2;}t-S0îtŠ[®Ú{ˆ[oÜr¥}.eîüÃå�s9Á9  ‘±ë3­2tb¢b ;bB¦ß`¢»×ÉØ]Ög;9WîŽÁ&ƒ£ù¤ ®ñÃL-áÙ¢l_"ìÞ?E�ÆdäÝêÈ´�|Y­ ©vR%åë“€G×]W‚�d¡2:�Ãt‚b· ý³�U¨iU†˜O €”p Èö ©¥eñØÍRa+@Ü”xrûBb2$ȤIÚßp ³Ú„¹Õ¬7îÔHÚw$ät\ùëH篚Æ›Àá @$Ó€.â1ú¨)b¡¦•XhÝŒÔÚOL¬v\ã–¯½\IðÐ%ìéI˜ZÙoªÂÔ"¯y´4U…íiY%¢îx¶ À† )¥dúßðYÉê¨|Œiíw]÷þÂ:š.špõº�k½�ZÝÕÔž-Ý5ÚýÇoÂΙ�àCDË}1I2 ŽçŠ€A¦U‘sÓ¦UvÈFÿØs¿¬ÆNîE‰‡îA^„Ýoj™¶‚´­ˆ"WUG“¸±eç a’”<ålÉšù.'NRëZEŽ=±Åõ{E•«–œO öã¶Ü÷_ÙÎ;nÛ)à`NÌC€ƒ€a¼ÊR–nÐk5>¦•'í±H”©•ê”0l*Ð$YSÒ 7>Bæ–SË’ÔÐ §IÆüO\DÜÃ;V]— Ó<¸Ï¤¸žðra@ˆ·¦O¼öaÚê ×å:ži¥¹¼Ã‹wx¼#ÇLP@P·-‘Œ˜´‹½VckZ�3@\Âî÷j l—±°SÂvÒ ²,Ì,�@¢9!>â‘vÛ5µ@˜LÏ_‡-IÚèQGÊÙÃ/¤i…éWl$Ôª_âMçr¥¦RûÖ+½å*=óØã�lzЉ;ÚƒL+‰´‡Kʉw�YEyV:}Oæ•eaždâÙA[$#–óZ�1+o!ø÷xL-?¡({ ) …øˆ …2}Éíë7µ ‘͹½êð —2[[RˤÛ µG¾–¶*Á)¸‚µzû\Ò7í÷}ÅR^ê+‡pë2¤=LŠKÊ!èÔ ä`Šhyï_Ój|4H�9xPÂ_|„´‰*ÒN\“˦¿ äM­'-ÕÿÆ�0{ú[Qò`öFMå¤GŒsißosÝø1`ÒƒmÎái2­<`�•8tÁAÅ#åïxLü½ÓÎï æZ�±æh-€�©ÕÛÇÐÛ+‰=ìÄGè ‡} R=²Ø�hQüƒ¸HÊ%ð®û—{9�ض¤dW­ä^~‡Üt@6ÚÔ*­¯rÊÉdhŸ1{¿©=ý-3½öH’]ùDDFΦ•ÌL±C0·ß‚6ÝD·ŠxG_ 8¥RDØ}|¤,H,žg‹8‰e©ÈªqSâóæñ‘†9#UkI=ÌÚg§žý¾Ùö—¿‚3.´†LÚƒÛ‚Œ{Þ*AÈÝMP&38 f K¥I$Û*ʳ"RŽ^^tBÉ8iŽñ5±üR/yVBz!y¶Ú;%‘ÔØg+è•ä"�Ø®¹åñáÝ¢H»ëÝq‰Ì`“F™Ù¡ �øAXÓNsŽ9M^UHÀ‚|àv½ãÞ›€=CŽIåÓÄ9"Þá'ää©Ê™Eàè³-ôºIˆÃ®Ç*û,/ÉÒgpŒ¿©HÚÝH{ßI¸ !skÄÏI(xèz¶¤MTI‚mÉ mbÓg›’T e—.”³G� ;sddꕲ�[éG¯·ÓŸ¥¨8„—Û�d †m m!ȹ·;�þ– çhsÍ*Ò8:-K¸s{§•�”·8Z tk¼H{ú€Õ’´$‹h;wáݲTXš"L.Ò"DÜEÄ�ÉÐlɉ•›\°$¦d_½šé‹ÞϹzhÞ0rMú|ô¢j‹©¶ý ­Ø>“Œm\Ûú33ý×µ�m^bR‘ÖÐ ,”_Eæ“ë “JÖ2NÞ*"äÄ9²®æ pƒ6²¿;WðÑ©ªãé´�ZͪþF5\RO‰©U$ÄI<âN !@/¡Ïô_ ôÙ5¹$Ò “‹Œ,¦JÊà ¯aÆ‚÷p®ÌOU©5%p]¤ ª�¨ ""9Q—ƒQ&È \}þfçŸÿnPŠ¡£5ü&•mÛ¤"p0<€Pœƒ!ø†”BBœc�£u4H¨©U$û\NB I'±`iz'`øH;i"ë,ÄI\mBf£À%g(ÙׇÜÁïàvz‰÷$¤°!?ÏÜù•& î÷Áé_«æhJûRv“�úû­vúÏ`€H8ãœòˆ¸íj "ç ?)§xƒBž*zWe9ÛÊòéCs´I/q#í�(£L¤È§Ò’ˆ“芌鲳OÄJû@â„€âÅI,ÓIM!m"È;q×L@±$F€‘rGÁr‡ÿ#ìŽÕ¤bŠn1jnv(¾áísÒÐZžÚü;õÈSž9Eî[¡9¸-ܸ¤5HcÈŠCÆ…q½UžÖñ�¬)ö}ì³,h¦çÈem±+ÐÌðV7«üãÝ:&VEÏ–×»å&ŽÈ"wˤ\†éòâ&¤Iä” [w¼[9×Ë%´‰åÅb.XdW“€>»[9æõ0fŸ ®Î+J@rÕþBË×°jÛŒíPwÝa·=tØ®þb`�æp=T2w�![Â¥KÀH1gG ¤™°r–ØùG\ƒÀ¢�ye“äM‘[•鲊‚€EÞªÖãÁõº5BwÊI Q% *2FeÙ1±˜óî¥ÄçM.rýºÚDhÓÕ$®w+Oâý@á ŠLq0†Ñ•‡1sñ Ìš~¸2'/È(Ê�7#Ø[·�j'ŽfaæN.ï»�+[îCæ‰g 3Ó¢xªcJ “ÊâysÊ‹Ž ¾¡8|ÃÓB“¸&•—Ê.´}ÏLd, �¦³ÓÎGÈ'8Z�ƒÄ5·üÁĽ�Òƒ²ŠŒÞ”„½¶³5·,®æQv½@Ü=Òî™]XT%æ] Ø.Gñ€B|%÷Š…’¹p7{ކ�9\ÄTò¸x&¹L�;„­MÞf¹b+˜IGØR—·PŤÑÍLÙÿˆ­<»©¿=+@àƒ>K`¶Ïœò"äyBNZÃïðƒ‚¶ÒÎ WnÎFÚ´�í´1ÃM[/ ¶¾æh]R$B°L¸€ïqs·RC ”¬ö;±’ÑAYð’”, “KaŽù5ê‚„â#"˜H)ò¦ Ëå$ÂlKŽÙå…Ààq y½ˆ§ÐŽÒ*ô·>³沥̘}¬Î¥àé—ƒ3-|ßV€­‡i˜(�Q"'òÈÙ:Xöiȹºû)(On„¶gHx¡(èݦ$t8Àp9Å  ÒDÎÉ”R,±]V´à¸�!sŠrs9ÅA,ä\¾‘ét=UÝ¶Ø ˜ëàÎ ìe"äb‰nþ¶ÙÝ]ñçÖ5±B9‰ /Á±s1çþR@ñЙL$9ª#’0¹ÈË• hE—aRΖä˜\ /±œ´ÝA܉£xž.ŸV)�”’‘}ùNæ¹o+q� ¬5üs}r$–6dbÅs ï”@Þ®!(9 2iÚoHÂ3%òtI ­"› ,–ûN 0- šKä=À“Ëf0‘Íe;¤ÞK(~^RbR¹Àðƒ‡AZÄ�DÀu‹CqM*ƒÇ5Tˆ¥ØB[ ªãâµtFÊ£#c ïÔôN;ïº%`�95ØésßN.­19âõª’6¡à"ÅMÈì@é�ph–�€B¥×`&�â’yY— «P$‚³¸`1MG£,šgr)L€AÄå&B{Ø ´•Þð4‰{ÃP^4áó}c*õè1~R�€ oħ=t2©,Šmp¡!ªj Aàš‚ÒÙ5‡cùnÏÙèS¹ÐiŽ^7àç™Sù ßä†'òÉ£A‚s¬ x¦—ÇQ†F$h) ’É K2º,†¬"A1$ä\°î»à²„´Í„vñL,anÑo÷3G˜dbÑ3‚4ƫЅ; �ierñ›÷Y¼K¤%² yµÈtrA‘2m˜*¥‚Ø�94ÁA8tÒm6üÃ3¥¦ 0&?@Êš]bÅ+x»‚ÅŠšc�»IË8æ—Ü΄VÕ¤.öjŽáz¦*™R“SCƒDš]> x®á“(uÅÇSH«”‹äò2Ãd“�CŸ³º$C`ÉÚÎ{@ÖýÎÏ9HÒ…»Ì¹ Iù€�,ÄäÏóÒ2G:Ç1*ž1À‘v¿#@¤5JMç½+\ð [%S«2(Vmá¸(äN•áSS ùIV.½Ã5½Ä�Úô�—Яð¤Kêý`é#3Lgð´ Fê`¥ÇËC>ÐŒ�f0êjºïo?ˆ=­âýž‘9†Ý‚ïï6Ò .:Ž~ª7cÃâE€°4ŽÞ/ÑËz8Ö"ŽAÚ"Ÿ7•cj¤"PZ¥X^êe˜O±ˆ,C0ÂŒ"И ƒíL€fÐtÌ*Ò8Þ‹4 :ƒºÎý{ÐÑÞ‹4½:]0t»QÝ|-WCøñ€¹>ó©ZPL1�ˆ©ÁAB¦_Ñ×y ¿fñ›aT ¹Œ·�2¤\ÀìÊ2Ñ`ÐÝèy—û·Q�y¿ÁÐqsût» ¢d&Ñ‹øƒø[sÞ‰`ÏNs r}ó\>A¿‰ÌZ×|*щ¶¨4 @ÊI§°Ðõ'�¬{ɉ¯x€¡wÍ¡¼É/Àç+ä¡,Äý�q(\œ€"ö¨'‰-ª�‚AS8þjDq^g, Ÿì•€@u'`ˆ#áÐ2ñ¨®&¦èÅ‘Ài°\ 4X Nu @š"Ö¤ÒÉ"� “e$“~4E @š"Ö¤ÒÉ"� “e$“~4EÿîßôÛýÏhIEND®B`‚dde_calendar_sync_schedule_32px.svg000066400000000000000000000072501523260663500355040ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons icon/unionID/日程类型 dde_calendar_sync_setting_32px.svg000066400000000000000000000133371523260663500353700ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons icon/unionID/设置 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/dde_calendar_warning.svg000066400000000000000000000065321523260663500335260ustar00rootroot00000000000000 deepin-cloudprint-config-helper Created with Sketch. dde_calendar_warning_light_32px.svg000066400000000000000000000051671523260663500355150ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons 形状结å�ˆ linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/dde_calendar_xiu.svg000066400000000000000000000015021523260663500326560ustar00rootroot00000000000000 类型 Created with Sketch. 休 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/dde_calendar_yi_32px.svg000066400000000000000000000025111523260663500333470ustar00rootroot00000000000000 icon_yi Created with Sketch. 宜 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/icons/icon_refresh.svg000066400000000000000000000035501523260663500320570ustar00rootroot00000000000000 路径 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/light/000077500000000000000000000000001523260663500266615ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/light/icons/000077500000000000000000000000001523260663500277745ustar00rootroot00000000000000dde_calendar_account_32px.svg000066400000000000000000000024451523260663500354200ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/light/icons 账户- light dde_calendar_create_32px.svg000066400000000000000000000017671523260663500352350ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/light/icons 编组 21 dde_calendar_sidebar_32px.svg000066400000000000000000000037121523260663500353730ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/builtin/light/icons ICON linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dbus/000077500000000000000000000000001523260663500250415ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dbus/com.deepin.Calendar.service.in000066400000000000000000000001451523260663500325610ustar00rootroot00000000000000[D-BUS Service] Name=com.deepin.Calendar Exec=@EXEC_DDE_CALENDAR@ SystemdService=dde-calendar.servicelinuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dbus/com.deepin.Calendar.xml000066400000000000000000000025711523260663500313210ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar.desktop000066400000000000000000000176731523260663500300200ustar00rootroot00000000000000[Desktop Entry] Categories=Application;Utility;Calendar; Comment=Calendar is a date tool. Exec=dde-calendar GenericName=Calendar Icon=dde-calendar Keywords=calendar;date;deepin;dde; Name=Deepin Calendar StartupNotify=false Terminal=false Type=Application #X-Deepin-TurboType=dtkwidget X-Deepin-Vendor=deepin X-Deepin-Singleton=true X-MultipleArgs=false # Translations: # Do not manually modify! Comment[am_ET]=ቀን መá‰�ጠሪያ Comment[ar]=التقويم هو أداة عرض التاريخ . Comment[ast]=Calendariu ye una ferramienta de dates. Comment[az]=Kalendar tarix alÉ™tidir Comment[bg]=Календарът е приложение за показване на датата. Comment[bn]=কà§�যালেনà§�ডার à¦�কটি তারিখ টà§�ল Comment[bo]=ལོ་à½�ོ་ནི་ཚེས་གྲངས་ལྟ་བའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེདà¼� Comment[ca]=El calendari és una eina de cites. Comment[cs]=Kalendář je nástroj pro práci s datumy. Comment[da]=Kalender er et datoværktøj. Comment[de]=Kalender ist ein Datumswerkzeug. Comment[el]=ΕφαÏ�μογή ΗμεÏ�ολογίου Comment[en_AU]=Calendar is a date tool. Comment[en_GB]=Calendar is a date tool Comment[eo]=Kalendaro estas datilo. Comment[es]=Calendario de Deepin es una herramienta de gestión de eventos. Comment[et]=Kalender on kuupäeva tööriist. Comment[fa]=تقویم یک ابزار تاریخ است. Comment[fi]=Kalenteri on ajankäytön apuohjelma. Comment[fr]=Simple calendrier. Comment[gl_ES]=O calendario é unha ferramenta de datas. Comment[hi_IN]=दिनदरà¥�शिका तिथि हेतà¥� à¤�क साधन है। Comment[hr]=Kalendar je alat za rad sa vremenom. Comment[hu]=A Naptár egy dátum megjelenítÅ‘ eszköz. Comment[id]=Kalender adalah sebuah peralatan penanggalan. Comment[it]=Calendario è un tool calendario. Localizzazione italiana a cura di Carofano Massimo Antonio. Comment[ja]=カレンダーã�¯æ—¥ä»˜ãƒ„ールã�§ã�™ã€‚ Comment[ka]=კáƒ�ლენდáƒ�რი áƒ�რის თáƒ�რიღებთáƒ�ნ სáƒ�მუშáƒ�áƒ� ხელსáƒ�წყáƒ� Comment[kab]=Awitay d afecku n wazemz. Comment[km_KH]=ប្រáž�ិទិនគឺជាឧបករណáŸ�កាលបរិច្ឆáŸ�ទ។ Comment[ko]=달력ì�€ ë‚ ì§œ ë�„구입니다. Comment[ku]=Salname navgîneke tarîxê ye. Comment[ku_IQ]=ساڵنامە ئامرازێکی بەروارە Comment[lt]=Kalendorius yra datų įrankis. Comment[lv]=KalendÄ�rs ir datumu rÄ«ks. Comment[ml]=കലണàµ�ടർ à´’à´°àµ� തീയതി ഉപകരണം ആണàµ� Comment[mn]=Хуанли нь огноо, цагалбарын Ñ…Ñ�Ñ€Ñ�гÑ�Ñ�л. Comment[ms]=Kalendar merupakan alat tarikh. Comment[nb]=Kalander er et redskap for Ã¥ organisere hendelser etter dato og klokkeslett. Comment[ne]=कà¥�यालेनà¥�डर à¤�क मिति उपकरण हो। Comment[nl]=Kalender is een hulpmiddel voor het bijhouden van afspraken. Comment[pa]=ਕੈਲੰਡਰ ਤਾਰੀਖ ਸਾਧਨ ਹੈ। Comment[pl]=Kalendarz to narzÄ™dzie do zarzÄ…dzania czasem. Comment[pt]=O Calendário é uma ferramenta de data. Comment[pt_BR]=O Calendário é uma ferramenta que permite agendar e visualizar eventos. Comment[ro]=Calendarul este un instrument pentru date Comment[ru]=Календарь Ñ�влÑ�етÑ�Ñ� приложением длÑ� планированиÑ� Вашего времени. Comment[si]=දින දසුන දින මෙවලමකි. Comment[sk]=Kalendár je dátumový nástroj. Comment[sl]=Koledar je orodje za urejanje datumov. Comment[sq]=Kalendari është një mjet datash. Comment[sr]=Календар је алат за приказивање датума. Comment[sv]=Kalender är ett datumverktyg. Comment[sw]=Kalenda ni chombo ya tarehe Comment[tr]=Takvim, tarihi görüntüleyen bir araçtır. Comment[ug]=كالÛ�ندار ۋاقىتنى تەكشۈرىدىغان كىچىك قورال Comment[uk]=Календар Comment[vi]=Lịch là má»™t công cụ ngày tháng. Comment[lo]=ປະຕິທິນເປັນເຄື່ອງມືສà»�າລັບເບິ່ງວັນທີ Comment[zh_CN]=日历是一款查看日期的å°�工具。 Comment[zh_HK]=日曆是一款查看日期的å°�工具。 Comment[zh_TW]=簡易日期顯示工具 GenericName[am_ET]=ቀን መá‰�ጠሪያ GenericName[ar]=التقويم GenericName[ast]=Calendariu GenericName[az]=Kalendar GenericName[bg]=Календар GenericName[bn]=কà§�যালেনà§�ডার GenericName[bo]=ལོ་à½�ོà¼� GenericName[ca]=Calendari GenericName[cs]=Kalendář GenericName[da]=Kalender GenericName[de]=Kalender GenericName[el]=ΗμεÏ�ολόγιο GenericName[en_AU]=Calendar GenericName[en_GB]=Calendar GenericName[eo]=Kalendaro GenericName[es]=Calendario GenericName[et]=Kalender GenericName[fa]=تقویم GenericName[fi]=Kalenteri GenericName[fr]=Calendrier GenericName[gl_ES]=Calendario GenericName[hi_IN]=दिनदरà¥�शिका GenericName[hr]=Kalendar GenericName[hu]=Naptár GenericName[id]=Kalender GenericName[it]=Calendario GenericName[ja]=カレンダー GenericName[ka]=კáƒ�ლენდáƒ�რი GenericName[kab]=Awitay GenericName[km_KH]=ប្រáž�ិទិន GenericName[ko]=달력 GenericName[ku]=Salname GenericName[ku_IQ]=Salname GenericName[lt]=Kalendorius GenericName[lv]=KalendÄ�rs GenericName[ml]=കലണàµ�ടർ GenericName[mn]=Хуанли GenericName[ms]=Kalendar GenericName[nb]=Kalender GenericName[ne]=कà¥�यालेनà¥�डर GenericName[nl]=Kalender GenericName[pa]=ਕੈਲੰਡਰ GenericName[pl]=Kalendarz GenericName[pt]=Calendário GenericName[pt_BR]=Calendário GenericName[ro]=Calendar GenericName[ru]=Календарь GenericName[si]=දින දසුන GenericName[sk]=Kalendár GenericName[sl]=Koledar GenericName[sq]=Kalendar GenericName[sr]=Календар GenericName[sv]=Kalender GenericName[sw]=Kalenda GenericName[tr]=Takvim GenericName[ug]=كالÛ�ندار GenericName[uk]=Календар GenericName[vi]=Lịch GenericName[lo]=ປະຕິທິນ GenericName[zh_CN]=日历 GenericName[zh_HK]=日曆 GenericName[zh_TW]=日曆 Name[am_ET]=ዲá�•ኢን ቀን መá‰�ጠሪያ Name[ar]=تقويم ديبين Name[ast]=Deepin Calendar Name[az]=Deepin Kalendarı Name[bg]=Deepin Календар Name[bn]=ডিপিন কà§�যালেনà§�ডার Name[bo]=གྲ་རྒྱས་པའི་ལོ་à½�ོà¼� Name[ca]=Calendari del Deepin Name[cs]=Deepin kalendář Name[da]=Deepin kalender Name[de]=Deepin Kalender Name[el]=ΗμεÏ�ολόγιο Deepin Name[en_AU]=Deepin Calendar Name[en_GB]=Deepin Calendar Name[eo]=Deepin kalendaro Name[es]=Calendario Name[et]=Deepin Kalender Name[fa]=تقویم Deepin Name[fi]=Deepin kalenteri Name[fr]=Calendrier Deepin Name[gl_ES]=Calendario do Deepin Name[hi_IN]=डीपिन दिनदरà¥�शिका Name[hr]=Deepin kalendar Name[hu]=Deepin® Naptár Name[id]=Kalender Deepin Name[it]=Calendario di Deepin Name[ja]=Deepin カレンダー Name[ka]=კáƒ�ლენდáƒ�რი Name[kab]=Awitay n Deepin Name[km_KH]=ប្រáž�ិទិន Deepin Name[ko]=Deepin 달력 Name[ku]=Salnameya Deepin Name[ku_IQ]=ساڵنامەی Deepin Name[lt]=Deepin kalendorius Name[lv]=Deepin kalendÄ�rs Name[ml]=ഡീപിൻ കലണàµ�ടർ Name[mn]=Деепин Хуанли Name[ms]=Kalendar Deepin Name[nb]=Deepin Kalender Name[ne]=डिपिन कà¥�यालेनà¥�डर Name[nl]=Deepin Kalender Name[pa]=ਡੀਪਿਨ ਕੈਲੰਡਰ Name[pl]=Kalendarz Deepin Name[pt]=Calendário Deepin Name[pt_BR]=deepin Calendário Name[ro]=Calendarul Deepin Name[ru]=Календарь Deepin Name[si]=Deepin දින දසුන Name[sk]=Deepin Kalendár Name[sl]=Deepin koledar Name[sq]=Kalendar Deepin Name[sr]=Дипин Календар Name[sv]=Deepin kalender Name[sw]=Kalenda ya Deepin Name[tr]=Deepin Takvim Name[ug]=Deepin كالÛ�ندارى Name[uk]=Календар Deepin Name[vi]=Lịch Deepin Name[lo]=ປະຕິທິນ Name[zh_CN]=日历 Name[zh_HK]=日曆 Name[zh_TW]=日曆 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/000077500000000000000000000000001523260663500264075ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/000077500000000000000000000000001523260663500301605ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/000077500000000000000000000000001523260663500314505ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/Ctrl.svg000066400000000000000000000040711523260663500330770ustar00rootroot00000000000000 Ctrl Created with Sketch. linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/QM.svg000066400000000000000000000040111523260663500325020ustar00rootroot00000000000000 QM Created with Sketch. linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/Shift.svg000066400000000000000000000067711523260663500332610ustar00rootroot00000000000000 Shift Created with Sketch. linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/add.svg000066400000000000000000000040031523260663500327160ustar00rootroot00000000000000 button/add linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/add1.svg000066400000000000000000000037321523260663500330070ustar00rootroot00000000000000 新增 attention.svg000066400000000000000000000020421523260663500341150ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common attention linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/close.svg000066400000000000000000000024741523260663500333050ustar00rootroot00000000000000 x close_icon.svg000066400000000000000000000023671523260663500342370ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common Rectangle 9 Created with Sketch. dde-calendar.svg000066400000000000000000000224121523260663500344160ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common apps/128/dde-calendar dde_calendar.svg000066400000000000000000000224121523260663500345000ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common apps/128/dde-calendar deepin_launcher.svg000066400000000000000000001007221523260663500352410ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common places/128/deepin-launcher linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/delete.svg000066400000000000000000000030771523260663500334420ustar00rootroot00000000000000 icon/schedule/delete linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/edit.svg000066400000000000000000000025721523260663500331240ustar00rootroot00000000000000 icon/schedule/edit icon_menu.svg000066400000000000000000000024101523260663500340630ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common DTK/Toolbar/TitleButton/Menu linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/notes.svg000066400000000000000000000031531523260663500333230ustar00rootroot00000000000000 notes linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/search.svg000066400000000000000000000013361523260663500334410ustar00rootroot00000000000000 side_menu.svg000066400000000000000000000027511523260663500340670ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common 视图切æ�¢ linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/common/tips.svg000066400000000000000000000030731523260663500331530ustar00rootroot00000000000000 tips linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/000077500000000000000000000000001523260663500311715ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/calendar.md000066400000000000000000000233271523260663500332730ustar00rootroot00000000000000# Calendar|dde-calendar| ## Overview Calendar is a small tool for viewing dates and managing schedules. It supports viewing lunar calendars, Chinese almanacs, solar terms, and common festival information, with built-in schedule reminders to help you better plan your time. ![0|main](fig/main.png) ## Getting Started Run or close Calendar, or create shortcuts using the following methods. ### Running Calendar 1. Click the Launcher icon ![deepin_launcher](../common/deepin_launcher.svg) on the taskbar to enter the Launcher interface. 2. Scroll the mouse wheel or search to locate the Calendar icon ![draw](../common/dde_calendar.svg), then click to run. 3. Right-click ![draw](../common/dde_calendar.svg) to: - Click **Send to Desktop** to create a desktop shortcut. - Click **Pin to Taskbar** to pin the application to the taskbar. - Click **Start on Boot** to add the application to startup items, automatically running when the computer starts. ### Closing Calendar - Click ![close_icon](../common/close_icon.svg) in the Calendar interface to exit. - Right-click ![draw](../common/dde_calendar.svg) on the taskbar and select **Close All** to exit Calendar. - Click ![icon_menu](../common/icon_menu.svg) in the Calendar interface and select **Exit** to exit Calendar. ### Viewing Shortcuts In the Calendar interface, use the shortcut **Ctrl + Shift + ?** to open the shortcut preview. Mastering shortcuts will greatly improve your efficiency. ![0|view](fig/hotkey.png) ## Operations Guide Calendar displays date attributes in Year, Month, Week, and Day views. The system defaults to Month view. Switch between views by clicking the corresponding buttons. - Only in Chinese systems: Calendar displays lunar dates, Chinese almanacs, and festival information. - Dates start from **1900**; dates earlier than **1900** cannot be viewed. - In Month and Week views, Saturdays and Sundays are visually distinguished from weekdays. The sidebar shows calendar accounts and a mini-calendar view. 1. Click ![side_menu](../common/side_menu.svg) to toggle the sidebar visibility. 2. Check calendar types under Calendar Accounts to display their schedules; uncheck to hide. 3. Click dates in the mini-calendar to navigate the main calendar view.
View Description
Year Displays all months and days of the year.
Month Shows festival information and schedules.
Week Displays daily schedules for the week.
Day Shows festival info, detailed schedules, and Chinese almanac.
### Creating Schedules 1. Create a schedule using one of these methods: - Click the add button plus in the menu bar. - Double-click a blank date area or right-click and select **New Schedule** in Month/Week/Day view. - Click and drag to create a schedule in Month/Week/Day view. 2. The "New Schedule" window appears. Configure calendar account, schedule type, content, time, reminders, etc. pic
Parameter Description
Calendar Account Defaults to local account; supports UOS ID and other network accounts.
Type Default types: "Work", "Life", "Other". Custom types can be added:
  1. Select New Schedule Type from the dropdown.
  2. Enter type name and set color.
You can also add/edit/delete types via the main menu (see "Manage" section).
Content Schedule description.
Schedule Time Set all-day or timed schedules; Gregorian or lunar calendar dates/times.
  • All-day
    • Checked: Only dates can be set for start/end times.
    • Unchecked: Dates, hours, and minutes can be set.
  • Calendar Type
    • Gregorian: Displays Gregorian dates only.
    • Lunar: Displays both Gregorian and lunar dates.
Reminder All-day: Options include Never, Day of event (9 AM), 1 day before, 2 days before, or 1 week before.
Timed: Options include Never, At start time, 15 min before, 30 min before, 1 hour before, 1 day before, 2 days before, or 1 week before.
Repeat Gregorian: Never, Daily, Weekdays, Weekly, Monthly, Yearly.
Lunar: Never, Monthly, Yearly.
End Repeat Appears only if repeat is enabled. Options: Never, After n times, or By date.
3. Click **Save** to create the schedule. Schedules appear as tags in calendar views. ### Editing Schedules 1. Double-click or right-click a schedule tag in Month/Week/Day view. 2. Select **Edit**. 3. Modify schedule properties in the "Edit Schedule" window and click **Save**. 4. If editing all-day or repeating schedules, confirm the prompt to complete changes. > ![notes](../common/notes.svg) Note: Drag schedule tags to modify start/end times. Prompt buttons during editing:
Button Description
All Schedules Modify all related recurring schedules.
This Schedule Only Modify only the current schedule.
All Future Schedules Modify schedules from the selected date onward; earlier schedules remain unchanged.
Change All Modify all recurring schedules.
### Setting All-Day/Multi-Day Schedules When creating/editing schedules, set **Start Time** and **End Time** to create all-day or multi-day schedules. ### Setting Recurring Schedules 1. When creating/editing schedules, select a repeat cycle (e.g., Monthly) from the **Repeat** dropdown. 2. Set end conditions in the **End Repeat** dropdown. pic ### Searching Schedules 1. Click ![search](../common/search.svg) in the top search box. 2. Enter keywords and press **Enter**. 3. Click ![0|close](../common/close_icon.svg) or delete text to clear keywords/cancel search. ### Viewing Schedules Double-click a schedule tag in Month/Week/Day view to open the "My Schedule" window for viewing, editing, or deleting. ### Viewing Schedule Reminder Details Click notification prompts to view schedule details when reminders appear. Reminder action buttons:
Button Description
Snooze First reminder: Snooze for 10 min; subsequent snoozes add 5 min each time.
Options: 15 min later, 1 hour later, 4 hours later, or tomorrow.
Remind Tomorrow Appears for "1 day before" or "2 days before" reminders.
Remind 1 Day Earlier Appears for "1 week before" reminders.
Close Close the prompt.
### Deleting Schedules 1. Double-click or right-click a schedule tag in Month/Week/Day view. 2. Select **Delete**. 3. Confirm deletion in the prompt. Deletion prompt buttons:
Button Description
Delete Schedule Delete non-recurring schedules.
Delete All Delete all recurring schedules.
Delete This Only Delete only the selected recurring schedule.
Delete Future Schedules Delete recurring schedules from the selected date onward; earlier schedules remain.
## Main Menu Access management settings, view privacy policy, switch themes, view help, or learn more about Calendar. ### Manage Click ![icon_menu](../common/icon_menu.svg) > **Manage** to: - Manage schedule types - Sync schedule data/calendar settings to cloud via UOS ID - Configure general settings #### Cloud Sync Sync schedule data and settings to cloud via UOS ID. > ![notes](../common/notes.svg) Note: Not available on older UOS versions. **Logging In/Out** 1. Click **Log In** in Account Settings. 2. Log in via UOS ID/password, SMS, or WeChat scan. 3. Click **Log Out** to sign out. **Sync Settings** 1. While logged in, toggle **Schedules** and **General Settings** to enable/disable sync. 2. Select sync frequency or choose **Manual Sync**. 3. Click **Sync Now** for immediate sync. > ![notes](../common/notes.svg) Note: Requires enabling **UOS Cloud Sync** in Control Center. #### Managing Schedule Types **Add Type** 1. Click ![icon](../common/add1.svg) in Calendar Management. 2. Enter name and set color. 3. Click **Save**. **Edit Type** 1. Select a custom type. 2. Click ![icon](../common/edit.svg). 3. Modify name/color. 4. Click **Save**. **Delete Type** 1. Select a custom type. 2. Click ![icon](../common/delete.svg). #### General Settings **First Day of Week** Set **Sunday** or **Monday** as the start of the week. **Time Format** Choose **24-hour** or **12-hour** format. ### Theme Window themes include Light, Dark, and System. 1. Click ![icon_menu](../common/icon_menu.svg) in Calendar. 2. Select **Theme** > Choose a theme. ### Help View help manual for Calendar usage. 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **Help**. ### About View Calendar version and info. 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **About**. ### Exit 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **Exit**.d_calendar.md000066400000000000000000000233461523260663500335200ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US# Calendar|dde-calendar| ## Overview Calendar is a small tool for viewing dates and managing schedules. It supports viewing lunar calendars, Chinese almanacs, solar terms, and common festival information, with built-in schedule reminders to help you better plan your time. ![0|main](fig/main.png) ## Getting Started Run or close Calendar, or create shortcuts using the following methods. ### Running Calendar 1. Click the Launcher icon ![deepin_launcher](../common/deepin_launcher.svg) on the taskbar to enter the Launcher interface. 2. Scroll the mouse wheel or search to locate the Calendar icon ![draw](../common/dde_calendar.svg), then click to run. 3. Right-click ![draw](../common/dde_calendar.svg) to: - Click **Send to Desktop** to create a desktop shortcut. - Click **Pin to Taskbar** to pin the application to the taskbar. - Click **Start on Boot** to add the application to startup items, automatically running when the computer starts. ### Closing Calendar - Click ![close_icon](../common/close_icon.svg) in the Calendar interface to exit. - Right-click ![draw](../common/dde_calendar.svg) on the taskbar and select **Close All** to exit Calendar. - Click ![icon_menu](../common/icon_menu.svg) in the Calendar interface and select **Exit** to exit Calendar. ### Viewing Shortcuts In the Calendar interface, use the shortcut **Ctrl + Shift + ?** to open the shortcut preview. Mastering shortcuts will greatly improve your efficiency. ![0|view](fig/hotkey.png) ## Operations Guide Calendar displays date attributes in Year, Month, Week, and Day views. The system defaults to Month view. Switch between views by clicking the corresponding buttons. - Only in Chinese systems: Calendar displays lunar dates, Chinese almanacs, and festival information. - Dates start from **1900**; dates earlier than **1900** cannot be viewed. - In Month and Week views, Saturdays and Sundays are visually distinguished from weekdays. The sidebar shows calendar accounts and a mini-calendar view. 1. Click ![side_menu](../common/side_menu.svg) to toggle the sidebar visibility. 2. Check calendar types under Calendar Accounts to display their schedules; uncheck to hide. 3. Click dates in the mini-calendar to navigate the main calendar view.
View Description
Year Displays all months and days of the year.
Month Shows festival information and schedules.
Week Displays daily schedules for the week.
Day Shows festival info, detailed schedules, and Chinese almanac.
### Creating Schedules 1. Create a schedule using one of these methods: - Click the add button plus in the menu bar. - Double-click a blank date area or right-click and select **New Schedule** in Month/Week/Day view. - Click and drag to create a schedule in Month/Week/Day view. 2. The "New Schedule" window appears. Configure calendar account, schedule type, content, time, reminders, etc. pic
Parameter Description
Calendar Account Defaults to local account; supports UOS ID and other network accounts.
Type Default types: "Work", "Life", "Other". Custom types can be added:
  1. Select New Schedule Type from the dropdown.
  2. Enter type name and set color.
You can also add/edit/delete types via the main menu (see "Manage" section).
Content Schedule description.
Schedule Time Set all-day or timed schedules; Gregorian or lunar calendar dates/times.
  • All-day
    • Checked: Only dates can be set for start/end times.
    • Unchecked: Dates, hours, and minutes can be set.
  • Calendar Type
    • Gregorian: Displays Gregorian dates only.
    • Lunar: Displays both Gregorian and lunar dates.
Reminder All-day: Options include Never, Day of event (9 AM), 1 day before, 2 days before, or 1 week before.
Timed: Options include Never, At start time, 15 min before, 30 min before, 1 hour before, 1 day before, 2 days before, or 1 week before.
Repeat Gregorian: Never, Daily, Weekdays, Weekly, Monthly, Yearly.
Lunar: Never, Monthly, Yearly.
End Repeat Appears only if repeat is enabled. Options: Never, After n times, or By date.
3. Click **Save** to create the schedule. Schedules appear as tags in calendar views. ### Editing Schedules 1. Double-click or right-click a schedule tag in Month/Week/Day view. 2. Select **Edit**. 3. Modify schedule properties in the "Edit Schedule" window and click **Save**. 4. If editing all-day or repeating schedules, confirm the prompt to complete changes. > ![notes](../common/notes.svg) Note: Drag schedule tags to modify start/end times. Prompt buttons during editing:
Button Description
All Schedules Modify all related recurring schedules.
This Schedule Only Modify only the current schedule.
All Future Schedules Modify schedules from the selected date onward; earlier schedules remain unchanged.
Change All Modify all recurring schedules.
### Setting All-Day/Multi-Day Schedules When creating/editing schedules, set **Start Time** and **End Time** to create all-day or multi-day schedules. ### Setting Recurring Schedules 1. When creating/editing schedules, select a repeat cycle (e.g., Monthly) from the **Repeat** dropdown. 2. Set end conditions in the **End Repeat** dropdown. pic ### Searching Schedules 1. Click ![search](../common/search.svg) in the top search box. 2. Enter keywords and press **Enter**. 3. Click ![0|close](../common/close_icon.svg) or delete text to clear keywords/cancel search. ### Viewing Schedules Double-click a schedule tag in Month/Week/Day view to open the "My Schedule" window for viewing, editing, or deleting. ### Viewing Schedule Reminder Details Click notification prompts to view schedule details when reminders appear. Reminder action buttons:
Button Description
Snooze First reminder: Snooze for 10 min; subsequent snoozes add 5 min each time.
Options: 15 min later, 1 hour later, 4 hours later, or tomorrow.
Remind Tomorrow Appears for "1 day before" or "2 days before" reminders.
Remind 1 Day Earlier Appears for "1 week before" reminders.
Close Close the prompt.
### Deleting Schedules 1. Double-click or right-click a schedule tag in Month/Week/Day view. 2. Select **Delete**. 3. Confirm deletion in the prompt. Deletion prompt buttons:
Button Description
Delete Schedule Delete non-recurring schedules.
Delete All Delete all recurring schedules.
Delete This Only Delete only the selected recurring schedule.
Delete Future Schedules Delete recurring schedules from the selected date onward; earlier schedules remain.
## Main Menu Access management settings, view privacy policy, switch themes, view help, or learn more about Calendar. ### Manage Click ![icon_menu](../common/icon_menu.svg) > **Manage** to: - Manage schedule types - Sync schedule data/calendar settings to cloud via deepin ID - Configure general settings #### Cloud Sync Sync schedule data and settings to cloud via deepin ID. > ![notes](../common/notes.svg) Note: Not available on older deepin versions. **Logging In/Out** 1. Click **Log In** in Account Settings. 2. Log in via deepin ID/password, SMS, or WeChat scan. 3. Click **Log Out** to sign out. **Sync Settings** 1. While logged in, toggle **Schedules** and **General Settings** to enable/disable sync. 2. Select sync frequency or choose **Manual Sync**. 3. Click **Sync Now** for immediate sync. > ![notes](../common/notes.svg) Note: Requires enabling **deepin Cloud Sync** in Control Center. #### Managing Schedule Types **Add Type** 1. Click ![icon](../common/add1.svg) in Calendar Management. 2. Enter name and set color. 3. Click **Save**. **Edit Type** 1. Select a custom type. 2. Click ![icon](../common/edit.svg). 3. Modify name/color. 4. Click **Save**. **Delete Type** 1. Select a custom type. 2. Click ![icon](../common/delete.svg). #### General Settings **First Day of Week** Set **Sunday** or **Monday** as the start of the week. **Time Format** Choose **24-hour** or **12-hour** format. ### Theme Window themes include Light, Dark, and System. 1. Click ![icon_menu](../common/icon_menu.svg) in Calendar. 2. Select **Theme** > Choose a theme. ### Help View help manual for Calendar usage. 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **Help**. ### About View Calendar version and info. 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **About**. ### Exit 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **Exit**.linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/fig/000077500000000000000000000000001523260663500317365ustar00rootroot00000000000000create.png000066400000000000000000000712471523260663500336430ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/fig‰PNG  IHDRÖ?EÛoÚ pHYsÄÄ•+ IDATxœìÝw|S×Ý?ðï¹WÒÕ–—¼7x³7 ;È"%¡d§I“æICú´MÓö×öiŸÎäI:ò´Í|š&!‹@€°ÁöÆx`[ÞCò�,ÉZ÷žß2Œm0–}mü}¿üò˺::÷H–>:÷Üsï%f³B‰Av»]ìf „Ш£Õj±Û€B£F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„D#»hXñûðý�Šx�FOýÏg&F±�wðåù¿þ¿·ò¥eÓUƒµz¡æÐÞ:Õ$\µ��Ÿùó§s�d°VŠPßVÿüýÝs7wïua/õÌWwfÛ9»CFh:ñê/ÿñ“µf¿Ø-AÃÍ_÷ÜêŸÿ£Ç»˜¿€½`Ô+ê.øúTyæÌdéЯ›Iž·tYJ盓pZÝ w�…º3¥u<È{=hd ¤p·´xþF0ê ÚQÓäh)Ür,ëùºž·•xGñáãyÇ+«ZݼL7&}Ñ‚Ü1:Òrhão·Ô lÌŠÝ=Sà¯úä•-‡�”HbøÑ]34¾ÊO^ÝzØI¢æ}ëÇóC{ªœ(C#“â/g?m/|óõ½¼$dúÝ?_x×:Nnýõz³—¨g>¾ê�dI/ía@h<þÚß�Öisþã»É5»SdiõI�qÉ –LŸ)%¼£h_þçZ÷é­?< @T³ž|dEn#¢Ëº¥pPòp õH–:~nœ„P_yþ±WO%¨óÔº/ßÚVXlqz mOzëÝüó.¢OŒŽ$@yKyµ„¦zsÊ[Ìu~êÊ;(0Ê”¤�|ÿuâ„$)ÚVl®â ð_¨óQ`t‰â%½·çr%‚­ì³÷¶l8Youùy_GSYÁ§¸àê¨Øµ×ÜìØK†F�®‰`å/`/õÈçWÏ\�~è_笎‹Ûäd, ï6à-?±é\;\Ê‚»žº=\Ò\øþ;û Z‹¶ÉI¿-:E{¼¶Ík67óíU VÊÄÆ‡6TY+«Z…1¡-æúfˆ"*-º·æÏ}þÎêÏ31 üáCfN¬¼¸¼£­ò|ýô¤<5ç*¼ˆ1#5QÞ²ÞÛ37¤³VÁi±‡ÍZ1kF$-Û³{}�C°—Ÿªœ�1&ûû¿ ýòÏö¶Rù¸%¿[‘€Ÿ Ô›G${ÁèZÔëõË',Jãê=ÖF�a˜Ë1,ÔUµ @¸¸Ûf„+HCÇÌ+'Th¨¨w0ai‰ÚZUß"ø++-<Ñ¥MN01‚µª±]ð”›­€4.&±?£ÌÊ1©cåûù¢ÀS^Qâ`tãrÂÙ¾Ûsy—"ÑäL½{œ)*2jæìÔP€úìíÞѳË \ {Û;wðûõ@(Õ¤9û.«uWïÜ[�3‘½"0ù–V§îÒÿûu镤n•&&EJO›}� •UÕ>àÂÇš<*R]ßPåÖ–Uó˜˜ä(U¯;Ù˜äùwÝ�Úùæätä±Ó¸ÓgÜMEæÆyú–¢j&.Œ½`Ô7IâìÉ9§vŸv^Õ=”%NºbÍûÇÛNä½z"¯s)á&?<~² ˜¸$“üH©ÝîÖo’Å\(iï"IHŽìó ¡|ï–7övÞ¸âe6)'Épìl³Í „MÎNêšT|½ö\£OIT1�íBKñš7‹ØÜ•ßI¾Ñ)sè×w?{Áhpuò�3Ã¤ÝÆN‰2ëžåß¿oü¸8�†cV¢Ô‡Ž?n¢©ó%Kˆ Ìíb4a±:D­'LhZ¢üæÆb%±)¹D9!Ss¹’ëµçº§,XtON˜žc gˆŠM4àG b6›ív»ØÍ@¡QG«ÕâW=B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„D#»#•D"aYV"‘PJ ð!të!„~ûý~žçý~+ǾJ¥’²là7ÃàÆB·2Axžg†R*‚Ëå V͘ý¦Ñh(¥ÇÉd2©TŠù‹Ð-�a©TÊqœT*¥”j4š Õ¬ŠF ¥Ré÷ûU*&/B£˲*•Êï÷+•Ê Tˆ9Ò‰„¢P(ÄnBHLr¹œa‰$¹8Ü„†a!¸ó ¡Ñ,��Ýt­jàUŒ‰ÇB¬^0Jÿ`#„ xQ€�Ò?Á!À#„º%0‚BH4"D°¿(ï§Ø[Ä¡*ÚQôÖ¯?Ù\+¡®áK(]÷÷ï¼Y໡  Τ4ÁÙxxï‰Cêëí>�*âãæ,»mjø¨êbó§ÿýçwÿý‰4©ØM�дáÕ}a/¬˜‰s¦ê� D0m/ÿì�]g¤Éó-^.gÜöÊ ‡A3ªòw´ã-egê…b7¡~¡”æåŸ˜;k<˲×ÞËóüžý§æß61(ó{3ðöíÞŒd<ûÔì´Î�1&!ð‡ÐpjÿÆCÕ5VG£N7íÛK’�Ý“ÙWòÐú}Í6ª6%Î[:sV G„¶¼w66M™ráðþÒÖ‰&yÒŒo/LÐ3ÞÆ¢ ›ŽŸ¬q1zÓ´¹Ñ]¯ uÖìÞrüDe³µ]PFÄϽ{ΜXÁ¼í³Ï¥sVê ?Û]f Ÿþò“Ù!ƒøz^ƒz«å­ÙQXÚâW„ÆL»sуSÂdÀ·•oY·wÏùF› M�ñü÷¦Æ‘¶vm>S[Ûì�iÒ²¥�Ï—õZs/…©·êðžOv–Z<M茕=’£ ¾–c[vo|ýŸŸÿàÙ$’Îæá�wÖ](1¿¼úáAÍ_øî8ê°Y=ЍeOÉFtIc&& JN7f\´ßbu^µãŒ¶ŸsN¢V¥Ô¤Ìœ�æã¥žÀc¹±îÉ 7jÕ¦ô 3âüµu6ÀWQ|Ò»hIzœ^©�H¸sAª¶«6‰1gRb¼Q©T²ÇÅjZZ-—Væé0.xpÚÄÄð¸0å�vÏhÛá½%ܬ;œ` Óë&Î{t¶ìØ® _ɉ¼¦¸û�5!>4:.qrf¸ ˆÀçæ£� @Bà ��#R¹ ü¼@Û›m>}tô¥®ÎTþæÛªö|}改ÍÉá=6>¾+½Øè˜ž:é7ñTiï3;ÏÜ~Õ\AsM#ÄÞÆv.dbâ™ý�u~�44w„ÄÇ«®®ÏÛ|l{þγu–�€¿Ý#¹�¿TàÚu÷XØßR×Dbç„K®(Ì[- B輘+—Ѷ«+$>Nyi™22Áè9[g2´´ëÙÐËk§”ML¤¼ó."•KŸ�v5­¯—¡á*.&üåÕÿñ¯½þÏÏžjùÛÿÞÈßÄxSßoè ¼ÝÁD¥ ‘ºê;h‚ª[;Ïï{sKû´•ËIÑÈÀuðý5º?šeS-_™ÞÕ "Q( ØË2½�\^Î0là†`ݵfûÑÐÙßyvL´’áÍûûAÇåH$’¡¸ìÚÿ!øçuo’ÿ†Oß,Nzö»OMŒàñß¼³÷z{+L…k×H�Â5këéÍÓã‹ÄóWTI˜žö[ 4²ÅÇF¼ôýUúÛšýòï7E##ÔÕÖ~͇žÑG†B£Å©Ô©õ�?*µ¬�°$š­ÔÖÒàé¼M[lÍu6•[T9ÓÇD+ðÚ®áÐc�1&¨®j¼´yÏWW6 a&–è \sC•óŠÂBkIY{ìÔ)#8€¶Ûm}lâ÷V˜1˜ÂhuUÓ• Œ1$ŒX+j|W,#ú¨0UK}¥£ó6u6TX¹è( �°¬àç/mCø-–kÿs× ‚pkÏÏF·´ÄxÓË«’sÜË«²ü… D0áræOIi?ýÎÿíÛWXWÓØ\]U}úxE½ŸèôjÒÜTÕAApW:zäÚaM¢�0=‘?‘ÿÙáÚ†6g‹¥áÜ‘ û¼ ˆ41mœ¢jǶâj[‡ÝR�÷uqs`ØB®6pµ5v€¯¥|Ëþ«ò¦7® {~󧯾i¦@=ç6|ü«X ®²�þçßoµßD† ¶š:KçO½½t3dúìZ{º©ÕÑ^}zÏGû=ãçd†��™p›Á¼~ÍásumÖÆº3§ªšAeÔ³ÖÊú6¨Û²Ãñ²>Z@z)̦ÍNtîßñɱچæÖêÒ gj}D•6¢äèúí{J­V«µôlI™$©“ÙðÙ±b«Óf­Îû4ÿBØøyi&:.\()8bå[É�­žë¾Œ^ §N[ìG»çz¥–âL¯ü×÷â†.!(ó‚Ù°¬ï|W™—wæ› ›7¸xF¦ �Ï^‘›9yÖÒê=k^ûÈä¦ì)Ëg:ò®y¬6{Î÷üG7íßýúÖ^ª4%eÞ›ÓçʸØ{šµ~Ó‘7^ßËꢦ/š>Ãz@sÇÝc×l[÷˽,§‹ž³hZÖºúë7� iS¸Ô‰£ ÜlÎsnÇ/Î]º!Mÿþë÷OÉ^üÒ·÷|´iÍ�-iHÌÔåß^9QM@ó­çîe׿¿óê;/7åÎ]�7õÞEEäýì¥]2…!wñÂûÚv¶ö¶&¢ì¥01N»ç‡žÝŸ|õéÏ[¼]ÔÂÇ’s‰bü+߸kó»ï}à$šèœGŸK6lɳ�µyoþ>¯�*bÒ'|ÿ{3%@ Ó=Z¹yý_ÿT® ‹³pQÒ¥×yâD›yÿ’Ò·Ö¿»z�qÉóO­HÂIihDbÙ¡~ë³Ùl·Û‡x­#Çq*•JìV „†§Óéñ h£O«Õbo!„DƒŒB¢Áî‡A=T!4²àµãD€¯B¼(ÀîŒ`„/ ð"öýàñx†éñ¼v¡QÅï÷p:Dö‚û�çyJ)Ïã‰iÕ‚Áýã÷ûÝn¼„B£šÛíöû¯{ZÁ‚Ü Ã8�ÎÀoì #4 ñ<ßA¹Ž=Ž÷�L&³ÙljµÚçóñ<Ï\"v»BƒHAã”R›ÍÆq\PjÆî7ŽãœN'!D*•Êd2ÒuòI„Э¨ë3îõz}>¥4Xù Á7G&“ ‚àõzÝnwŸçqGÝ !„†a$Ip·z1‚oÃ02Y¯—ÖD¡�ƒ˜!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„  |“$ ˲‰$p‚3Y}fë_VºUPgÁúM» ÷»?xì¹Ya]o.êªZûæÖʬ{_X„ù‹F»ðPÃÏ~ðhñŪ×ÿù¹ßÏw-çá�wÖ](1ÿä…‡5a°vÇIM3¸Òs•N Ôr¡¢)29ÇH¨qÖâœÔPµ.,vÁÒœˆ†’“õ¸Íù'…É‹'g†)”ÚðésÇê+KϵQ`Œ ž}òw÷.p𱑙)Òò’/ÐúÂò¶¤ätC¸DûÙsVøò’Z&91Y"T<^1íñÅ)1!šˆ¤q�,Ow8r¨‚Úõãž[9>+Áclëâ·ì~wÝAã¬HÂA „ >6â§/>RVQûç7;S˜çù7Þþ¢°Øüòꇓ¢»ƒ´ÏŒMÈMÖ¼_Vè3Ea;w¡-*+)”8}ø¥]HŒ1,JvÒÚJÒÒài¿ðÁûG÷PÞÍ«Ú� Ã+'(¥Á:;Äõêa“ÇFû¿2›½aeç›&'¨@‘™eúàÈÅÆEþ‹žäù±2ê««oSÆF/�²BcŠŽT5ñ3 ¯¿´J)Ù–õ…eáÿ*+ Ïr�Ð%q1á/¯~ø�ýèõ~öüSËßþ÷¦@þ&Æ›úþœ ëyÁltêx݆SE®I çšBÇgj‡(\*4@)eÃæ=vÇ4í¥»éFõ„9UJb|û¹"shqmxîcÄ�‘»¡¬ Š-i Ÿ¦$࣠û{àòˆ´TÊ^õ Æ·˜}“¦›Î~µ©tÒ£iÚáõí†�˜âc#^úþª?ýmÍ�~ùwžù;4«´˜cŒã³u…Uµ%U QÉ9]ýYo[C[gl–¦Ÿ&Ü@HHH8ckh“êtj}àG«TŒ¶IW#úøŒ°æ¢ü‹æÐ¤l#bLÎ o8·Ï\Ÿn$’èhƒ«¦Áziz…§º®–1Æ„öò?eÃæÝ¿ðÉGo =³íƒíØ FèJ‰ñ¦—W?$縗W?4dù ƒyh‰ÈN‰¨*Ù~Þ›�tň‚õÀŽse-.»µjçÖsVÓ˜ ‘ Q$Ü6ž+Øž—Wlm±;,µU‡�VµP¡9ïí÷·¹Ú3h­ Jot«„R*ÜHI&4#MQzάLOŽ ü—cN†ªðŒ™KMŒe€‰›95«ùÈ;ÊëmÎæÊsk¾¼ ›2i|Ÿ'’fM“¿sOØùÏ·æ7c#t•„8Ó+ÿõ½„¸¡Ë_Ô”cò„ð£_Ö˜¾µBÕ•ÀD›67¥yÓ{GjlHRúc÷çF2 K»ó®ÇwnÚ¸ÝîcÔ†¤qSÓ€ ‚ Œ€° üT�’ëwÝýT¸±IL˜XÉÞʬÌÈK•2q™Iš�gSÆFuî_ É}æ?øO×mÿÍ6›O2vê]?¾+II®�¸ªÚÈÙK,ø¿O?:>æû“#Gõ`BݱìP$ˆÙl¶Ûû>Xë¦ æmŸü£aÜÏÏ ì�óåýbûø�猙ƒ Ç©Tªï’ÿq µØ�2Uß³ƒ)¥Í^'®ëøÉ’Ái#Bhˆ8�N�g@›èZ­v0#Ÿ·ž+v§ä$^µç‡öÙE±øå“xš½NŸÀ÷8"A)õ |³×É3à_>iè[ˆ†g Âïuz=µ‡ò§<š¥ ûÞ}iÒïÎgÖ·YìT®=þM aÃuÂòIxš4„PÀ D°ÿâ7¿ý¸ qóVLs VÑ÷ ƒ/5܇à �A9wÄ ŽßjäryàÊ©b7!$2AÜn·ÛíH%ƒ<|+®s’3„Ш¬(U'õ(�ÇÃ0L�çµC�*~¿€Ó!°Ü<ÏSJyž¿~Q„Э+ˆQ€Ü?~¿€£?¡‘Îívûýþ T…Ü Ã8�ÎÀoì #4 ñ<ßAÙ3�cÁý#“Él6›Z­öù|<Ï3—ˆÝ.„Ð A„Àø¥Ôf³q\pæÛb÷ÇqN§“"•Je2Y`n ž¡[U×gÜëõú|>Ji°ò0‚oŽL&ÁëõºÝî žÇ!4<B! ÃH$’ànõbß$†ad2™Ø­@�l8ˆ‰B¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢Á£ãn˲r¹\*•2 ”ëG!„†9J© >ŸÏívñD‰Áý¦R©är¹Ø­@ )B˲�î—Ûív:�A©"úG§Óaþ"4ÊÉår�N”ª0‚ûA¥RI$¸Ý€‰D¢R©^Fð� l€ˆÝ „Ðp!—Ë~1_Œà…ù‹êfàçnǾQR©Tì& „†—�Ÿ4#øFáâBÝ <0VnÎÿEu3ðXÀýûApâtQm½uάñZMç4�‰û IDATRAvï;ž“™nxý�ÚÎŽ®%¦ãôÉY¯9 Ãí9~ºxÖÔlüšAhˆa �³…e3&g3Ì`¥XƘ„hSXàï�R“¥U„ VˆºAÁÁ‘gª«·ÔÔ5ÅÅD\{oK›ýìù2»Ý)—ËÆ¦ÆÇF‡>~^¥Räd$@cSË¡ãsÇÆF‡@a±¹µ­}Æ”¬n}R9'Ó¨•]7묧Ζ,š;E*•¥4/ÿxB¬)%)¦Ãí9WXÞÐÔ,aÙøØÈô´x†aššKÊjâc#‹J+Ýn¯V£Ÿ“¦×ª+*ëO”RJ¿Ü’Ïɤw.˜†£Þ ™÷aªòÖþ÷ç�ý¹l¼·4ÿwÙ_â´FH%læØ¤Â³×ëëv—«ÃsèØùø˜È;æOÍÉH>sþ¢¥¹-,ÔÐÜb –9Ç5YZ€RÚÜb 5ê®;&f`¦ÑÒ¸i³;�.OtT˜ GŽÊdÒ…s&Ïœš]ߨ\|±*P¦µÍ^Wo™>)kÁí“rîÔÙA ‰ñ¦¬ôDcˆî¾¥·-]4ó¡¡4ð^0~ÝûïœôPB™J�˜<óöqMÜàl�]\ÊÄ�Yßµ -;Þ>j||ñ$9€Ä=1—3[x�ÆD…ÕÔ5–Tæf&_yWeuƒA§Nˆ‹$„DFÃC 5u–¤„¨Ââ ŸÏ'“I›,­I Q•u‚ µÙ�™é‰×®âtAéé‚ÒÀßYc“R’bLƺk´)”RSo ÑÉ9™ÅÚæìpÏžžÃ²¬BÎ%%D•UÔŽM�J!;#Y­R@JbÌ�£ç(PÿEH4Áˆà2æüpI,+ø-– ÇO~þ¶¹ê¡{îK‘‡›èRÇ/¹^!¾¥òB“0ëÒM&$yñÜà7¥BHNfʾ§b£ÃCôš®åöv‡¥¹më®C�›~ž5hT ©TÒjk—sœÏçOˆ�,«¨µÙ�~žgYF§Q_[ÿ˜”øhShàoŽ“@tTØ‘ãç}~¿„eë¬i)±„»Ãåõú¶ç ”ä�aJ)HXF!ïœÆ(‘0@໽‰'8LdʃF`4†Ä§$$lúâíM'ƽ03IÀÛÏæ}³õD�Õ'‹L;{Ùø4 ê­:ºÿËýÕ6£Ô%äNhq‚Ž€`¯ÎÛvô`is» IÿøÃ¹á%yÿµ?ì{ ømOÙ£WýxaÈžOþÞ2å·¥Ê:ŠÞþŸòô£Ê¶Ÿ:oõÉÃân[zÛÂ$%­;ù·÷ŽTzhÅÿãCF?ÿ™•K{~ñ%ûØKsÆs'VTJùØ´ø³ç/ΞžÛ5’@)˜"B³Ó“ºŠ1,ò¬Ñ kn±K¥cˆN*•C´MÖVA zM�ûôrY׌‹£AèD+r¯××5ûB¥”Ïš–Cºº·¤sö"žZ¡áfvÇ.mFzôɳµÓ“âù²[>«IZõÔ¼D®ýÔæíÿúBö£Ç³ Mg?ÝÙ–õÐO™XWsS¥Ë !~ËŽ·ÖLXñļPp6:•¡ €`=ÿÑý„w.Ò+�X®\—¿zËNù}÷._®óWÜûñÇ_kž_:=jÂê'<x¯õŽŸ, Dø‹‚ÿ,{“YS×TQY×5¨ªQ+--r¹¬[ü…uµu†ab¢Ã!áÆªêÂS„ñƒ’a˜(SXM�E£V†‡8™4°:·ÛK€(7zè$BJ)`>#4Äe#”1ÂX§µ�·9ÿ¤0yñäÌ0…R>}îX}eé¹6 <ÏS`8N©P†Å$LJÓ1¾òóš£î¼obV´!2:&7-$°ÍL�Bê’ 3MqÑ:U÷Œ`RfΘ§ÓéŒ9 §OQÔ+tôgG]ð1 “›™r±¼ÖçïÜý—ér¹Ïœ¿èpv8]îêÚ¦6›BCt¶v§Íî3 ܨ·Ù�m6‡ÑÐóIðÜo»Ãøqux cLaÍ­öºkLTx`IhˆV­V?]Ôfsttxš,­µõ–+ì¢PpíN—Íîp{¼�! „ÐМIiT(aZZ<í>xÿh :)ïæUíNÊDg/ŸÞ°æ�O§¤Ïž‘=%I#Únmõè£c®=ý›,2-¶—ó3eDè¥=scl8œi¶  ·3§ÓªâLE¥•�›*•bÆ”ìóÅæ¯óO�F•›� j•B*aår.0>Ëq2•Jîñú´e�Õ› ‹Í�¿»ÍÐjT NæñúÂà �»X–�>9³àBù�#g}~^¥”�I‰ë»Á‘áÆˆ°�üC§9N¶ðöÉ,‹�a„†È D°`i®ÔY(¥lؼÇ½ta8D9fá=¿˜Rò虯×|šŸ»ðù»âݯ>ýVÒ{&\î´Q«7qÜØnKÒÓâÓÓâ»n†´³§åt+Ã0Ìó¦^q“Ì�5¡Çú†Y4wJ/w‘y·Mì¶P!ç&�Oï¶02ܸdáô®›z�æî;;wX²,3eB÷ò¡!0‚ótþkHR®‰!!!ጭ¡MªÓ©õ�­RqiŸ˜Tgšºpñͤ§ Îw�Q+m³ÖtôYy7ÔÙ`ñt¯ßZÙÆP-�#·)�›Ô¡á-8L½®–Öv«ÕZVXðå¿×\ªžï„Xˆ"á¶ñ\Áö¼¼bk‹Ýa©­:|´ª…‚Ð\y¨ ®¡Ííq;j«[\rµ^ ²äÌiºšíN5Ú[¬M…çëÚ®Ÿ¡ÂŇŽÖ´·Û›ÏìY_æjö®ûÅ_”v?¨!„Wp"<…{W„•*µúø”¬'ïÉÎ Ô,K»ó®ÇwnÚ¸ÝîcÔ†¤qSÓÜåûó7Õ;Ý Õ›âç=8uŒ"—<²�Ùzìã·· \Dú´ï¤G]gÅLÈŒé† ×}ÑäåB㮺}ªŽÑ¤.™[¹fûÚ_mÓÏ{lÅâ+A!pLP*4ð'P�p?Bh¨³Ùl·ÛÅnÆÍ Eo¿r*æé—F ÅÁFcÎy†ºÅ477ßôcµZíˆ?2 û®¡‘kÄG0B�\Á!$š<<Äp,!t­Ñ>ŒB#F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#øFQJÅnBhxx,`ß(AÄnBhxx,`ß(ŸÏ'vBË×ë` Á7Êív‹Ý„Ðð‚§Ó9ðz0‚ûÇf³a_¡QÎívÛíö T% J-£ŠÓét»ÝÇÉd2†a!b·!4è(¥‚ x½^�ÇÃó|°ªÅ¾<Ï»\.—Ë%vCB#D „�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ Fðಸ¥�å'½rÖ$vCBÞ)íæQϘœÿš+ø±LJ¯‚VŽ+hUÖ8¹—rêÅh#BhXþInžyå¬éËJO{>_0Kè¤7Ûà‰4Ë7!4"`ß ðÇ3¦õ•!}”¹ÝÔ~g¬Íî“Ø½Ìâè¶!kBhı`ÚQôÖ¯?Ù\+€¿(ï§Ø[´3Í‹Ìéc6Tú(�ªu?£1Tî�RzI±ê¹[å™#„‚*h½`oéÞß~X•ýتÉ7\'߸é¯ëóš)F¢Ô‡$�͘?'=Q5¬/D*rzmdçÿIN}ŒÊ{ÑÆ½^ùÞì –Ð¡l!Bh¤RSOበ¢aÏž¬^–œ¨èÇ#Ù”;î[•-§~wK}ͱý‡þþϺ‡žž?^7|S˜Rèð÷Ú<)C_ÌlÈл>æ‡GãÝ<Óá'”^a!t­àD0u”)UO[szË…gâdU?+UªC šÐ°°´±Ñ†w6¬ß•<öþDwMÁ—» Këm6¯$4)ó¾å“Ç�’w_?¢[µê�ξ6_úÕšwš'ýìøìŸÇdKW<ž«‚¬£½w�ŸL³Ünj—²ðü¡¸:— ÷¡Q.(cÁ´ùlQ™1yBvj®¶öȹö›ßê–…Ïžå.*/óÈÚÄɳŸyþ‘ß¼° Ëyæó} ‚2aB²¯à\½7PÞßx¶Ø“”• %@ÈP÷4 €Ié»r�wDÛ¾•Т‘ò¯ž�<ÙÜùE„c¡Þ#‚…–c'­Q9Éáã„}åÉ’ÆkæÉÞ8e¨^í³7;)0ƸiY¦­\39]ï°¶¹�ËÈ�ã‹/^ôð5ç;¢Æ�U2úŒïþô±Çs†¢ ÜåΘ¶W&W=‘f ¬4ÓÐñ½ôFçßPiø¼Â8„ A�TAˆðWo Ÿ“¥%@³S£ö^8V7þ®˜› wJ`´½²`û¾â’&—�Áãâc¨ JMˤ{N—û2ưU…fW¤ŒþŒ{E sý”¤éÜ ŸÍËæ7h~œ]­ôžoUþñLÔP7!42 <‚}%'K›}ë_{s=P ¶“u‹cbnªjjkhvr:£ŠÐÖ‚?8ÁÎYüýU‘Z mØóÅk• ‹ž˜Î|TPëIQœ+v§Ì�W‹4Öº³V7Þè| ±åé1–;¢mcu-ɉó 8ø‹º!�`ÚQy¤�ÏXºü®¤À®'ê,ÌëPÑ…E1Ù7S[MÞáUÆ„d ðõõfûèôH­›ÝuiPU’œ›$ý¬¼´F}Á½ M>ô�×5ÉìÕ³¦0¹~”Ý(÷ ~x4¾ÙÓý%•àŒ4„P/:l/(º K½}R„)"ÄbŠ0&OËɤ•G.tÜ`ðø\Ž–V{ScÃùãGÞ{sûQ&ã�q£Uëü-• > ‚­ìÄÎó—+”ĦŽãjì«´'%§+hÛ…w_ùðƒ³®¡I»8µ‡ �ŸŸˆ=nU±„þ÷©è‚ÖîóñXBãÔž!iBhäh/øÄÉzã„i©ÒËKˆ"aV.÷ö‰‹­c¤½?® qÇÚßì$¬D¦ KÍ�÷Ÿ3“M=nÅì–µÿþà+ÕD§ß}çØ/Î\z6!SúÚ>{îÊ8Eg˜ ¼0€½€ý@heÂí¦ö=õZððäÙ zmÿæ˜Úµ2'#„zDÌf³Ýn»ýæ+ÊûÕ:áÁ.Ì•‹°vž’‹vîï"òë5½&ǽÝÔþ\zcŠÖƒGÇ!„®¥ÕjGèiz|¥jر·�#€!4AíùϬ†UIÍu2^¸zþ¯„�(…פôE*¼ æ/B¨#-‚©¿Ãík7ŸØR Ÿþd'R+€Œ¥±*¯IáÍ:(½"f  c  éå\–!4â"˜:/~øúÞ‰!{ÑüÑb^òƒ°„²,p,ž !t“FêX0B�tZ­¯‡B¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„D3®š1 •ÚåëÍ!›Ô .)D*}3ÂËZRµn±›6X(¥^ïñú€“IdR–à5¢º)xÕŒ›çÈ+gMk+Œ×^ž“¬Hl~)§^ÆÜj×î´µ»Ûn ÀÉ$àñú €FÍé4 ±›†Ð3r¯ ,>¯@ž;˜xÔ¢êñ^ ðy…Ñì�ÿcFÅ­”Âu�6©”�1é»-·´8ë-vS˜V”V!4r ÖX0u–þûµ/vÔ ƒT¿è^9kê-»µ¨^=k òŠ…¶¼7ßùÛÁö¡ÏõºF›Z% Q_{WXˆJ%—Õ7áæBý3Ð^ðÖ¿½¹£±{ÎÊÇ-ùݽ!csSôÚ[sˆ°Ô._[aìº91ÂÿÑÝÞ¤P”[½«6ÊN5u¾°ŸWHºÎ¸°·©tËö“§ÌmžUŒ©Sf¬œ!Ô'жv·TÊjÕ½Ž6h5r�Ïokwë4ò>k¢Îæ–FªI •Ýšo„úc |û#+'ú)€÷ì†�‡Âæ?=3„ÂÈU¬T:u�ñú�™Ö›Cº:¡ãÃý‡Ÿ"V¸9Ö$9ú4?å …)Àz³á'9õ½Öå«ÝôÁ×…QS|"FžKS“\1܆‡(¥í÷µãÝ„T5�6­šÃ½sÝ �~ØU½ ¨[#V©‰3†6hGÑ[¯œŠ~êÁeÑ`Þöé§0e!~Ë©;£I�:ûÁñ¾}_9b¶û•a"WÏøêOZ¿ï¢ÙFÕ¦ÄyKgΊáð·~ö^Yʳÿ1%~ØÌ ;Øtycüã{¼]ù aÙ�ïq¥¿#¹TXÐkÓvKµÃ0u~nf€èØè®»œUg7l?[Pç†Ô S–ÏKa»=Zh8µã¡ê«£ƒQ'Œ›öí%ÉFüEyÿµ?ì{ ømOÙ£WýøŽ }wL¯Çëãod܃”z}'ëÞÐë¡Îæ–&Ð$;»Æ^[[�G.gw}­W&u·u8½X‰F¯U±€w¶:[;ü^?–Uë4aj–¸[[-D.q7µy}Rel„BÚÏÖ 4d†¦¿E›Ž<1gî3/„êï¯ÝùÚ™�‰‹þh¹Ôrôëm:œš¶x¢…ùoírßöÀ·� õÇö¼¿&_óüÂq* �aÕ­ Ì? Œ?tsåÂ+ _‹hŒQJ{aAÓìðåORh.xÿƒ“dæ¼0JíÕ»¾Üý¦oÉ—DqW?Z¡‹˜´8ó�H5±~üQþÖ¤¸G2¤ XÏ´E?aÁ�‹ôJãÕ�¹ ¯?0ÿáº8™Ôãõõ?‚ûB©¯¹…CtF)xŽÆ''×jY`X™,D¥â$ÄïrÖ·:Û�åàs9šX™>T'c™á¶I�Е†¨cIôi‹gÇFèÔ¦ŒœI~Hž¸434D«K›™‘$´Ö·@ÛO,×NŸ9'Q«RjRfNÈóñR›|çªß??%nØt�ƒL»ì�ñÊS›~û¿Û7©jòº›BÝÉs¡¹+n�3éU¡qc—/Nî8~末ۃ‰.iÌÄ$£AÉéãÆŒ‹ö[¬ÎÀÀ7E##ÔÕ6hs… !5giqö]ÌÚêÒ¨nn«… W„.õù¯;£\èðœZ¡–öÌ 7´Ç¡afØD0ÑN˜žÈŸÈÿìpmC›³ÅÒpîÈ…‹.àËv|ú‹«Ny¤jÝ+›»nžj’¤¿£äþ áþ IGÙ•¿ð@bsJŸ“‚…ÆÒ]KÎW4ÖYZkÊ‹6î¾è��K�2Q“rÇ´žY—_ÝÔÞÑZSüåŽ2Ù¸¬Ì«6ñ‰N¯&ÍMUwå¡£G¬ƒøé4 ?Ï÷1Ñfïðóü�¦,ð^_×� Èd,¸=?ÞÝÑÖqÝ@%R|¿ÞÞÖqËž’ÝÒ†Ñîbmöœïù�nÚ¿ûõ­¼TiJʼ7�†]祜z³CÞ÷rSÂ?îcFp+XÏŸÌßmwø¨T¥OHŸúÌÂŒ ûðc¦­ùÙÛîãô)ãç=» VA.¿Ä8yÖÒê=k^ûÈä¦ì)Ëg:ò‚òÜza ÓÖ7Ù½>¨Auå†>¥ÔÚêòóü� ,t8«;.õ© «Q«Õ¡^Gs}‹•a¤2N§•Y<}×Á¨ ªŽfgUµ“a¥NÂ;ù›z^‰OÓsó¼yõ¬éó^NÓó@bóK9õÒ[è¶vw»ÓM)ådRÀÓô 4Z­#x JíòõfÃÁ&Í'«l_žÐz«Ÿ¬Rðx}8Y¥,ˆ{þE0‚BH4Z­vØìŽC¡Ñ#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$Œ`„ F0B‰#!„DƒŒB¢ÁF!Ñ`#„�h0‚BH4Á!$šatá"„†‰D²¬D" \ʹÛ�û%p‘'BˆßïçyÞï÷­•häÃF¨;¥RIaY6ð›aº±(Ïó ÃPJAp¹\Ai'ºà@BWÑh4”RŽãd2™T*xþÃ0R©”ã8©TJ)Õh4¯Ý0‚ºL©Túý~•J”ä½˲*•Êï÷+•ÊÁ¨�8Áu’H$„…bÐ/-—ˆ‘HpáX0B—B†!„ dçÛ�¬%°›�rØ F¨“D"¤ñ‡ka/`#tÙPFðЬ sø>@è2Œ`4Äð}€P§ÁwuhxÂF!Ñ`#„�h‚°OÖÛTºeûÉSæ6Ϫ ÆÔ)3VΈ� -;Þ>j||ñ$yÿj£öóo¯õëÉ\㞱÷”žÝ¾ïÂù»‡UE§çÞ·4'A@ÝMû7çï.lvUlö„o-Ɉ–õQ¾×zÜ…»·]ñÄê™qöŠí›�©°y$š¤ñ“—/L —ôP,¦µºJ™}WmÚ¾&ïLØ´G¿âmúfó¾·¶p?º;¶{1ÆufïÉ mÖª§£ L{áî=Ÿ̆½03IBm§ö¾Ð7ûþû¿껸ïëO>‘†<;%gL!4øØ_|ÑãñÜôã©­|ç7®ñÌ›¥Òê´&SRGëNþíí#•ž¶3ùǶï-õ¥eŽÑ8ÎíÜóñæ·Ù}¼ªI16JÁø‹ò~¹Á1&¤îóoûxW'-ù`³ÙÙV½ïëc;·ÇÍL”Wžüä“]Ÿ|uhûþÂ3U¾ˆ1Q!Œu×[Ÿ®©5N«¦)!ѦOJÏŒÑiœJ µ_Ÿ‡¬©1:ŸyˆêøûTjBRC�ßìªÕOI‰’÷R^ÚËr@¥_m³e,�”Øvní!éOÎÌÖqJmHZœp|ËEÙÄ´Xîªb)j™)#crjhˆšSª´±áÞ³êUãÆ&Ê�Ç·lÊZôèd£J©ŽITÖï=Ù��2ê©$‰L&ë»Ls‹íÝ7gg$K¥Ýß}®Ï?ÿµ!%1Z©¸¡M?ŸÏ‡gMå8Žhˆ�1Ji/,hš¡¼4tÀDMXý„çïµÞñ“%�T¦5%,Ξc�Ø ¾ywËÁãi˦këù�¶è',¸s‘^iŒÒf _þ©0ùå§s�€¯ýâ‹3žK~ú„­UõB(@ 9 GÑ©µ«µ^]ÝùšK¢M1ôPe£01�é±|oõm-(©ˆHûV� Ÿ—áÒÎrŒA çk-h˜«Š]�w¸œ•AE@h©i’ÄÎ6t6‚‹H ÷©± )†Q—Á7@©”7·Øÿçºú!•êò¨P‡Ûó§¿®áAÎ]'ĺҀ?eÒØeŒWžÚôÛÿݾéHU“§—y6+³(p IDAT„‹Ï›¥Õ(”1ãS“ˆ­±UÜC�Bê’ 3MqÑ:Õ5¹Ãó@$2¥B®3åäDë c\ðì“¿¸;ŽhÓ‡m/ß}“3-EG€ºÜ¹êRV+×pn‡‹öV¾¯å‚íÔkܸäLDDT>Ùê¥@}í…_Ÿ)òù}þîÅ®ÂÛŽ|SÆMÈÊàx�ÓË©»¾?‰\­‡£'LõH!ç^~ñ!–aþð×5NgG`a‡ÛóÇ¿¬á¡[.#t]AØ”W%L|æÅôª¢âÃGö½öµzöŠÅKS®yúÚÎì;–_ØÔìø^ÉtáÒ]²È´Xi÷òlôÂeÉÿÚ¸ö7'gLÏ™•¡Q{‰¨»~ûÇû³<Ÿ.¦ó.оÊ÷¶\h,=a5ÍÍTP¥._nýð«µ?ÛÎJ%ª±·%&J\ îšb—«snݾ×óô‚(tNOíÖ®Ñ9c•Rz#suåœì'«Wýé¯ÿá¯k^~aÃ2úëǼ ¼üÂ*¥R~ã³}q^0‚ �¦G¢ŒË—•5m÷Æ76œHÿÁ¬Ä«îö_ܱù£ò¸‡W­È•1þòÿþÀ�e%½Ž*0!Y·ýgjnñ邽_oúýáÜï>9%iDô~hGý¶vž�¼ý{‹c]L¢R¨|ÍN@à‹„w;<œæR÷óÚò½/ªÏ–ÚS§fužï� ɘ¹:}º§ÃG䜤ñè«yú#sM±ÀC�›7VÿØ£ã[Ì…šó\îŒS·ÃIU‘ò3Ò#…œ{é…UüëGzããÀ’Ÿ¾ø°R1BÞšh8 îpŸ4:!LîtØøÀÕZ(ø\ ö²J—i\Nv¨Œ N§]èµ B•}CÂéÆN�ùÌs ²lçVðAmð`¡®Ú-ÿÞY=ç¹»u—^c&4]C5cÙÞÊ÷ºÜ_ìœ/c\œâʘ$ §ädŒ¯âäÅ–˜„1ªžŠ Žs›¾ú¼1é‰Ç¦¥tå2cŒ7ù«ª/ y›*š¤Ñ&-÷M©à^^ýpàï—Wcþ¢›4Ð^°ÐXšWF£L:ƒZ&´7Ý}Ñ?=A D£ÑCÑùó-r†U„h™ÖÚ&» ×ùZŽî8W)@/óΈZ¯–XªÎÖ�™¦#¥«è„]—®•tÔ5Y}Ê ¡9ïݯGÍÿѲØáù®§®š¯Þßq\5aå8E[]S£6††ÈcgŒ“¼»ãpÚ½Ù1`ýf{±oìÜ,e¯å BÏËÕ•%g!ñ‘äË£7^‡Ã#‘1m%ÇyB2ûñ1!¼eWg6|õ‰9tÙ½ñ’–¦*"Uë#uʜɉÛ6Ü;kJ¨¿lßÑyêw“‡éd“a¥+…1ÑMð'�¬çOæï¶;|TªÒ'¤O}faFФ.™[¹fûÚ_mÓÏ{lÅw̺¸îП~@ªÐeÜ>sqû~{/õqc&Þ=f׿w>Ø®ûÄê̶’cë··Ú}DaÏY¼`A¨pu?y˜áÍö×y<ôÐ[%—nòÃ�?I&™rï=¿?fZ@B&¹ò}¿òÊ fÎÜ{2sæ3çž{î™Ë0‚QÃ韹Ùív†aX¶+®‚E§C À^0B­$I¢”JR§_�Ùe;BÞ#¡ËDQ´Ùl�½›Í†+#Œ`„܆±Z­®ß�ÔE•$©uø=öp,¡+ ‚`±Xôz½Óé”$‰iÑÁÍʲ,˲kü�Rj±XT*¼²`#t •JeµZ !<Ï ‚àš½Û‘µ}[·àp8œN'¥óµÂFèZ‚ Ȳìp8l6Û-®ã~s„BÃ0ÇáøºF0Bm`æg¿Ê¡ŽÃd„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)/PF¨ DZ,Ëqœk�ˆŽ/ÓCEQ’$\)] #¡kiµZB˲®ßY¬Òµô%¥T–妦&�ÔÝp ¡« ×z’‚ ð<͆áy^¥Rñɰ·Smßç–ÞÝŸíð†»1©&÷Ô¶ýgÏ\¬·³º°~ƒgN­ ¶Šƒ›ìʪ¶]ÄÀ¡s¦önRþ†Ûq±eízk›æéE£#ëó·m:z$ßbç ±C’gÝÛ;�k£Xxí…Ý»�Ë­®9¿ˆÞ§¥ŒæhÓ¹ýÖ..·±~‘ñÓ™è×£_?„ºŒg¦Å}ïZ<9Ìõ®%ŒÊ¬xßZYö²}{ ¸ÁcÌòáJ÷¤øl³áµÙ1°gmÙ¶©"öÑù÷F@Õ�Ô}Ÿm3ünF„êFå7¸Ý5�”ÚΜ(ÒœM+¶­Ü}2`ä“/Dù:*~Ø´ÿ?›U¿�qm1¦é侌|cÂc¿ õa²víýîk6`áèXŽZŽïûâ�sììÙÏú;Ïïß³jïûüðHœ1…PçóÌûŒQë|®ÜmÎþäÝü~�†î:qª¬™1%M?k°™Ú”³wÿú#ÅUè€Ä‘*Æ=C�:ŠŽüþ`~±ÅÉhMуSæNŽæ³v¿“Úx÷s3ÆùwŸyìªðY¿ wÿÛ7~ʈœôC—*iL¤³øèHzldb(`š>¹4ó«3§ï�HÒÜ ü�¶Chc~Zž!i¢?-;œQzß³ }4`˜1³îüÇ'OÜ‘b¸ªCÈ�9s†¸7g}wߟ>*.¬§±>ÖÌã%¦3ï‹÷eü¦ÏyïàႤÈÞØnCu�eåš�󟘮ը®¹«©ÙþéŠ�sçÜëçkR¤n¨;êÄþ*‹7o©ˆ™<ã÷¿yøé!$#õà± ÕGw}~È6pöCÿóòƒ3#+ö§[d�+N}³£®Ï̇þðꓯ<ž2¼—�� Э¯"’›‰Io$ WU•Éþ1aî�*.,$œV^’oTþ¦·ÓÚÓçòƒâ’8�F¥áÝå³?Ô”TÊ×»šÔØdåt>:rÍÅ ."ÂÇÝTA1�Ž¢‹õ×T ¹hµêêšú?ý}…ÕÚ|åíÍ6û;ﯬ¨ªS«¥ê†º#ÏD°íäÖW^ÿè¥×?zéõ�^ùê\KÛ$±£G�Š6›Œæø±û‘êâJäúÇË ÃFÝg6L±É£ÇEµ¤ƒ$I•J«Ñ„G‹31Úþ÷¼ñÚŒ»ºQøj´á®tû ‘½Mh“­™SëZ²XµAekl¢7*³ÛeËñ“U‘‰½| 0AA‘P|8£ÖA�:²öœÌvŠNñÚbW‘,G~ÈS Mè¯�ìV‡J¯m)AÔz466ã„©6iÔª¥‹ç² óç÷W¶¦p³Íþö?VJ²üꢹ:]§/1�î$ ޳pRËX°J¯vÝJ´Á�*÷;›á^EZ_YCBFûº�r‰:$PGê˜��³RÊW~²âDï~cG kà¯ÛQ÷BmeÛ¾>x)aâ‹ýÔî�Ùë>Jdz³ò7º]¾”›^2a€ž€®Ï¬YU+6®~mËsº¾wÅÄpM®£ä«Š]Þ\SÖ–mÛ�ƒ~91T÷ôÔkêÕ3g¬RJoe®®Z%ünÑcï¼ÿõŸß_¹tác ˼óþ×’,/]ø˜V«¾õÙ¾8/�çÆ‚ ÁA¾W�ió @Èoy†iíiãï}àõáeGOîYùÍ�Á÷¾8=ÚÐ]»¿@›Ë¶.ßq*xÜ “Ã]]L¢ÓèœÕV'€ëóG²5ÚU†–îçõåo|»\|*·¾Ïˆ÷z‡ŒoÿÑ‹ú¥Ø›�D­â.ýënó ?æºb®‡ZOoÚômiÔ¼'“"]GÌœF¯²_îŒS[£•ê‚ÕÝö‰ï µjÉÂÇÞ~ÿ«w>üÚuË«‹¿~t¡ŸÕåsˆÑ߇–—׺‡©³ªæªCqÞ2âÞÉ¿yr=~úLs››èhSÉæ/wœ¿`FŒ©å9füÃùª‚RÉõ_±´¼ü"™•¿áíbÙ±LgÿÄHÍ•1I•V%0ÎüŒó5áÑñº¶ŠÉ�™6~w)öéy#{·æ2ã"·¼"ŽŠü >,ÄØÃgµü,­FµtÑã®/]„ù‹n“gzÁ²­±¢²öò¤4_í ÇSbbÐν‡vÆŒÂÔžKß{A†X¹ºðHîë£K‹kšÔz3Mg÷¾»¡qÂüûÇúu›nmº¸ñ‹íiº¡�$jêJ+\£,z?_uĨDîÓí‡ãU?lËqö�� ½ay¹íÛõ…çNA̽.?ÇŽÆF;'0ÍuçÒŸÎ�}*Þ—€#ïêbrãÉõWøßÿ`WSQ@x½9ؤ”³5õÐŽˆ1ÃýżýGO«û<× §¤ý¼ÖÆüE·Í3ï4Gö�w²Ýÿv]šÑï†e‰ÿˆ‰OY÷¯ÿîÛNUH¿!Óî[^àºËváà� eVðæ�¨»ÏC3•e©› šIg–Úíô§ÿœk¹‰¨’êñ¾\¯‰÷=¸åÀúOWYduXßaÏN�ÕoPþ¹ÍÛx²@•05öòK'—ý´éŸj%^sßÓÃGEð@ígO\UŒ6:YÛ,Ö®þ,·usþcf¾6%X×oì3uÖ®_»£‘˜Â{Ïš;¢ww†ï*¾¨ƒHAAA}}½ÒÕ@Hy*•J§ÓuÙî¬V«ÝŽWæ÷hF#Žø!„�r0‚BH1Á¹uñ—¹áwÇ!ÀFèJ²ÜEfwÙŽ�—ÃFè2Œ`ÔÅpú'Bnv»�a–íŠ%âDQÄé°ŒP+I’(¥’$Ý1;BÞ#¡ËDQ´Ùl�½›Í&Šbgïu Á¹1 cµZ]¿;©‹*IRë.ð{ìàX0BWÁb±èõz§Ó)IÓ¢ƒ›•eY–e×ø¥Ôb±¨Txe3ÀFè*•ÊjµBxžÁ5{·#Ë”´nÁáp8�NJ)æ/j…ŒÐµA�eÙápØl¶[\Çýæ!„†a8ŽÃñt%Œ`„ÚÀ0Œ à·À¡N‡È!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R ^ |›8ŽcY–ã8×_FÝ©\ËôBDQ”$ W FW¾Z­–²¬ë7.¼‚nεR%Ã0”RY–›šš”®ò˜íf0\ë ‚Àó<æ/úY Ãð<¯R©xž§” ¥k„¼ÆGûhµZQu:&/º ,Ëêt:QµZ­ÒuA^s¤8Ž#„h4¥+‚º7µZíZ;XéŠ åa#hתۄ<ù†:ÂÕŠ\§éP‡½àvÀ¯<@ž‚½`ä‚�Ò>ÁÈ#°!!líƒïäØ�� ¶ƒvÀ!`äAØœ`#„�‚¼7‚¹ÞúÇÁsí¹˜“6gÿç«6•È�V)Orf¦>¿dsf®V¥Ö“ï.úø»¢vý½bñÁÔ×÷öÓ ÿö‡­eÒíï!ä?'+�YûÅ'v @X^ïã?4yÆØpS‡³�ó KLü¼÷3¢-öŠ«Ö-?ôü»3‡yåénZúÛ5üf?ýò@AâL¬ÒõA¨‡óLNýƽ<%œ‘ìUY›·m].<ôbŠ©ƒ“ß^“'x¤v]ÄqéôWŸîÊÕšºøÊ�v=ÏrmM ¾h��®³êÓsPJwHŸ0f˶ñY&IÒÞƒÇï¹+ çÿ¢›ðL3*�¿Ÿ‰ ôcJ >=WÚ4Ò¤#ÐTœ¹~ˉSeÍŒ)hèø±3†ø böî7~0?<زs_^i3Ð'ñáû#.íýaû©KÐÇ=wr´™€˜½ûõïÙyKÆ÷eå‚­ß|CFL†³[ÒK«D!¨Ï 9í¥p\Ê^¿!-ãbc9!L¹Æ.×äæ;F>ôjLÖ?l¸A©âøÞÏןȩ‘MQ  ½üì7¤}•z<ëbu��ŒOzü‰qõµ›ß]öCß§Þšìz7¥¯}yóìÿÎLV_¹MÆ–èý/��ºdWõšôÐÔñ:à¼øÓ®åÛÎäÕPcdüÔ_Lš­ª<¼ákϔ٥e¿yóSßäWßœÜ�ÖÛ°cÝá‚rçÕwÊì‰÷D« €33uÑÎ�ßM×}}(ÓýË·æ¤ðµi›¶¯9TXáP… H~ôáQý�==Y*«ëV§îÍ̺°ð¹Ùפ°$I,[›�[8h@¯@¥jˆ¼ŸÇ�ó ÃÂ0€Öf­XqJzßÒ%O,žX´iëÆ NW!ébÆÆ �>ûØkó‡•^öïÇ�CŸ[8÷•Ù‘Ö#ûw\¸~ˆ’V>ø#;`Þ¯çþ÷ü”ðKÇVî+“ÀQ²á«ý9æ¤/=¾ä±�$ídŽb£›Lð˜éÏߪ£7<Ñ-ÿøÁç§¹±½ýÖ K¦™Óve5¶Ü¥Ò™ãÆN~å÷‹>|}æÐ†#Ÿo¿(1>ÓC«ŽŸm鵟9žÏ è?P}õFåÊý-Þ|æ½·æÿrPÓÖeöÕP¨?±å¯©uƒçÎÿÇÛ¿|n`ý÷m=Ú@G>ðæ¯G©â^øûëËÿ4¹k?³fÕNë§¼ð«÷Þxò‰¾–ïÿ¹n_•»öryúÇ«/öšñð/¾{ Ú‘ýý7ÿw>è‘—_üà�‡ÆËé|žQÑãÏçúû¼öÒ“9ç‹Þûè;Q¼Üò$Yþð“µgÏüná\Ì_ts�`*Y Nî>#Ç'„kˆ\šž™6tæ°@³VŸ4¡wóñ“­çüS& ˆõÓù†õ½k€Þ®‰�6.2ؤî;hX°£¬ÜÚÆ»ÛØgÚÝ1af�oXÜ=‰> eÕ œù9ÖˆISûE𵿠è)û=ù÷x–œ4³$lÄÜ»#�†�~)�Œ h½� è=nhD¨Y£ˆ3دþRu%þCúÔfue°-?-‡œ£¾v³Ü€‰w�Š2™Lþ‰÷O§/8xÂB©åðžló„ISâÌ�¹ßÄÑÉäÜ¡,Û5�¤M¹;ۇϜtWŒ��o`âÔ)Ó ·t¿F´Qê?gæŒ!±‘¾úæÜ?É£gÞ•¬Ó›CÇOì“—™^Ýã3 *"èÕÅOäå—üýcw K’ôá²5Y9K=ªt‘·óÌ@„íÔöW³�E'çŸ2uúŒDgù%‹ãÂ�þÓO®2’Ã)õivð ˜[c�c|L~®ÿNàA’äëßܬ¿_`Ëç… âA’$  Õ§9,¬eð• ð dŠ=òµ‰Òwq[Ë¥mt^ªhÐ…ùµ¬0â'¸KÒúóißoÏúöÅù³–}¹Á•¿1Q!7o-8/�ÇNÇÅ�yyJ8S—½båÁפ!àj`ºã^¾/¤u�Œðj5€ Ã^9�x++–°W?äÊG·þ‹¹a/qÕßÙr�­ÎøèßÙ)¿øýsá&ž–lýìr]¥uC’£¿Þt6F`㉠lÂô~ª6¶I¯þ'q?ùlÿŸzvߺg^«¿î¹¡W?Ü]Å–püå‚”²!S_œ5Îܲ ª ˜¿nQAKþë±w>XùÛÿ÷/I’]ù«t¥P÷à™w‘ët\`¯¤9)ìOŽå9€ 4Ø+êì½Ùäþ1i9�&$1øyKM¹ÝýZc©öÞ9Á\@€ÞZZQçÎ#z·yÈ"gïÞs°ÐR__}rËžMQcM„˜SÆÇK?mýlAIMCUùÅô'²¯}$ÑÄÝ7V›žºó`¡¥ÞR�¹}Û–òð‰)Á×G+ÑÅÝ;R“±nÃæÓ—ªêêË Ïï?p¾ £¯ò—7^ˆŽÄüEíàéë„ÐÉÓâ2¿>°sÀ¬iá O̓�;2>û×^+å}C"ÇO÷ðÞ@ñÀÜ1ë6ùð½}¬)4eRʨªŒëKQY–]ÃË”Ê2u�4SY’»t4Ž‹»pžã‹Ôo_YKÍÑ 3g¦T~ÓlÔˆy“*¾üç{Á•øðœA•G[$ Hîóù‡Ç™»æÆñml“ј7Û7cÅÿ}qÉ® ê=å¹)ã| ˜’¦-÷³3õ�5V‘7DÄ }tØõ�æãf<º€ß¾úãÿ|feÌq÷/˜81°ÍÕ€Ù�.ÐìN]µb]�“5øÅ�?È3ÏÊ…eqpµ)((¨¯¯Wº݃J¥Òéºú’ÚxòoÿýCЯ_x¢ùßQ¬V«ÝnÿùrèÎe4ñCÛÛ5œÉÉ3÷M‰ÁüEèä•  ÙÞl·Õœ_µ¥(|ÜÄX|¡ºá;»ºôb¹f×??[}Q=|Ê ã|ñhå΃kG À±àvQ«Õ®ï¾Uº"¨Û“eÙf³Ùl×^²ˆz n7YöމǨÁ†„\p ¢ìv;Ã0m®LˆP»ˆ¢ˆÓ!xó·fx!I’(¥’„ß5�:j…Ü>¢(âøê ›Í&ŠøÆ*tÁn†a¬V«ë7vaÐm�$©µ áy]8Ü^‚ X,½^ït:%IbZ(]/äÕdY–eÙ5þ@)µX,*U[«Þ¡ž#¸ÝT*•Õj%„ðøÎA� ¹`;hF„Í F0B)#!„Óñs²Ò™µ_|’a§„åõ>þñC“gŒ 7uE¶Ëç7­M‹›ýHœ7|�H'¾üûßÒýZ:ozhK}¤’UüÆ2gñóYEë†òRž /¡ß¸W_žûÚ‹<6Ú§|ÿÖåG,]1Êå¬ÈʳzÕpšŠ©Ø¸:ã’¬t=P— ”îÚŸ&IR›÷J’´kø¢›óÌÌDF¥ó÷3q��~LiÁ§çJ›FštšŠ3×o9qª¬™1 ?vÆ_@ÌÞýÆÓ#Cvì9±‰õ‹í7cƈ�> €Tj÷[ÒK«œBpŸ�3îg `»xúû�Y¹e‹ƒó�0sVr_uéúnÙWå¤_~|˜è)�.J(ùäßÇ„i¿xj°V¡)ïLØèþé¾>¿x„áú:Xó�­\s8­ØÊø„¥L�üH2Ùñ—O|öÍi�®OÂÆ£«_^«yñÍû ΋?íZ¾íL^ 5FÆOýŤ‰Ñj"WozweÅ”GûŸÞüõárýÄyoNÁÞµ‚*«ëV§îÍ̺°ð¹Ù,{ÕK!IÒËÖfçšÐb5IDATÐ+ÐßG©"ïçñCxÂ0„0  µY+Vœ‡Þ·tÉ‹§mÚºñ‚ÓUH*9þ}®ïôgýŸïM–³—s¼TgÞöÍßøOŸÿøOI¡§?_s¦šcLòØ_½øÄNL°žün¹Ä…=¸pÒp­fä¼çßëù—Ƙ! ìGNuŸGgEæ­ß“Þxí]´:ãßÿ>êL™ýç?/|cNÈ…o¿û6×0<)¸ìxöEW¯™6�Ì(Ð$&ô þÄ–¿¦Ö ž;ÿoÿò¹�õß´õhƒ«Œõôº ;aðs/Í[0&óWY�þ>¯½ôdÎù¢÷>úN/÷…%Yþð“µgÏüná\Ì_ts�`*Y Nî>#Ç'„kˆ\šž™6tæ°@³VŸ4¡wóñ“eîvJýÆLÔÇ_o ˆ˜8mPPù¹Œ2l2ääÉÉ4Zc`Ê„¾æÂÜÌ: Œ_äÈ„� £ZçžÜÏÜXUg»îðŽ˜û?÷ê¼§)Õ*J²Oò¤‡"òVmÌoºª†rÑ¡c9Q£žê§Ó;¥¯õ𱋾CzUf§•Ê@Ï9§INŽà©åðžló„ISâÌ�¹ßÄÑÉäÜ¡,›kõæÄ� Iˆ ÷Ák«”ôêâ'òòKþþ±;…%IúpÙš¬œ‚¥‹��Uº‚ÈÛyæml;µýÕ,dÑÉù§L�>#QGÀY~Éâ¸ðãŸÿô“«ŒäpJ}š<¨Ì�&wT2~¡BFU-•IM¹½áìò/Žºî¡’MÒ5X)ø@CáémûsÎU49)‘íMR8Ud¸•Rzã¡½Ö•Û £1îð_·§æ‘hÚò0±¤¤Æž³sÉow»JK‡ØÏêð‰³gWFÅŒ° ¦ÓYÙ†¾3¢*V—; ‹>_°Ã½eG³Uß$S`Bã£Ì8£Ô›D†.]ôøÛïõÞGß¾8Ö²/7¸ò7&*保¾Š<ÁBü˜—§„3uÙ+V^|M®¦0îåû.�W^­�€Rhm~®X#”R6àîy÷�4¶>€QéZ{zÅòtvüäÿz,ØÈÑò½kþVè‘ZwÆÈSÎþïê#£Ƕ ŒPJAŸ8å3#/?‚FCø¤aßî9{qª¾(£Øwè¸h@¤”²ý|êÙA|kY^«'P <Ïââ.Þ&*"hÉ=öÎ+ûÿþ%I²+•®ê<3á:Ø+iN ûÓ†cyà öŠ:»Ao6¹LZÎŽºò:wË•�†@B|}Kyoj)o6j5,Hee$btJ°‘ÙRßzˆO¡²7v%HðØû¦ñi+¨c܉ˇ„˜me56“Ñ×Çýã£ã €qpB_KÎÑs¹iyæÂX`ý‚ ´¬AïÓZØ`Paðzµ˜¨�¥‹æªUª¥‹æbþ¢[çÙÓq\Ô¸1)ôÌš½å`‡ Œ­;ùõ¦œüªÆºÚš¼Ì“i%­§,ª~Üž™WÓT_U´cKfUHüÐ`†h¢ï¢:½m÷šúÆÊ’¢ÃG‹j(0F½I¬),wR�-yé;Î4»C—è}M΂³…UMÍõÍ­;ûé_V,?Õä‘Ìúßûðpç®éîê0Q£†ÅÕùä»S¹—êkª*sÒŽ*€èz§Ä[Ó7¤Ÿ ê?"˜sÊøxé§­Ÿí/(©i¨*¿˜~àDöuç÷�·‰Ž ùË/DGbþ¢vðô)!tò´¸Ì¯ì0kZxÂSó`㎌Ïþµ×Jyß�ÈñÓÝ¥ˆ1nBïê Ÿ¹ØÈúÆö›7{p0BÜ”éó4‡vlHÝVïdô>±‰#ú0a‰¿[³úËå?²¼!¬ßŒ)}לÆwÔ¤Á¹©»ÿtœ��4ó…T–dï™’Ë…�˜7öì7Ó`†½økø.õÇüy³Uü"b§<œ@4ƒ†Å~ùÉÙÐÙ³‚[>MIÓ–ˆû¿Ù™úÆ«È"â†>:L©¿µËzÃUB¨;!õõõ]¹K1{÷ëëÙ§^ßÝ&U©T*�N§t-ÐÂjµÚív¥k�”d4úоâlBõXxÜ„BŠÁnü²/äAØœ(2Ü}©Õj×wß*]Ôíɲl³Ùl6›ÒAJRn,¸Û’½hÎêÆ°!!\g ìv;Ã0׬‰…ÐmE§C À±àv‘$‰Rz£õaºEØ�P+ŒàöEÇïPÙl6Q•®ò ÁíÀ0ŒÕjuýÆ. º ’$µ6!<¯‹Ç‚ÛK‹Å¢×ë�N§$IL ¥ë…¼š,˲,»Æ(¥‹E¥R)])ä0‚ÛM¥RY­VBÏó‚ ¸fwâÚ¯èFZ[ˆÃáp:�”RÌ_Ô #øv‚ ˲Ãá°Ùl7]Ç!B!„aŽãð˜ ] #ø61 #‚Òµ@uoø�ŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1\'nšãX–å8ŽR ®ß¨"„¸~‹¢(I’(ŠJרmù�ê-ņôjmeÓ,ÁÛSQ´r’_ÓÔˆ†½­óöE êëë=¾]­VKaYÖõ›a°»Ý£É²,I’,Ë”RY–›šš”®ÑUœ2ù('xc�X€ÃÁÛ³Qd ¨ Tže}!¾œg<ÿ™l4;¥� J©J¥�çyÌ_Ä0 Ïó*•ŠçyJ©Á`ðÈfë¬߈S&¯�Ú�¯^ ¬,�ù‹€0ÀòÀ©€6ä«_;å”IgìÇóZ­VE�Nçñ-£;˲:�ÎjµjµZ/é ÿ;'8£œ•ž> k}FyãG9Á û•y|óŽ`Žã!jµÚ³›EwµZít:9ŽS|\8¿Q½!_ ‚³Ý ¯I-`§G¨=>.ìá&„0 CÁ“oè&\�ÄušNY õ”áìÿ¢›!,³±H¿°¿‡#ØÃc^ÇáÈ/º Ãp\'NȹEéUZå? P7@˜´J­Ç·êù÷F0º^ÒN*šXʰØF?�°M¬Ç·ŠŒ”á%íÄ&°^Qäíc“<¿U7>F·ÎZ‹Tu�ÑZ”ŒCHA”âD4t«:#‚ñÌ«93SŸ_²9ÓK/è½PüÁŸöüxö‚o�³üÔáõ»NgÕ6ЬÎ' ~äø§§ÆñtzwF¡sÞX^Iã¯�‡YáàÇBuüp¥ƒW\ÓM`+ÈY°cÕÛj£Æ��ÿ@h€Zª-)¾@ :Ì_Ô]pð‡Ù0é,þJ"ü ·ìJW aß¹"cÅæŠ˜_<óÛq¾®i)áaa]÷Ѻôõ;7�,)©nCȰû§=5*P9wíÇŸ‘ 3áøÚC…NUhÿOÎÝWΚc›w¥)(m$ºÀ>/x`Œ‘-ù›¾Û½óLe³àÛwÔøy÷Çà‹ÓùzÎX0£ƒD-¬<[«N•^¾«ïx3 û‚Q†´3ðë½P¤…5óáÂ:x¥È]æžûàs- ýjõ°ø˜&'Ì„W~„ÂN˜'à�p,X)´òTÖmÿi£|Ûš¨6GÄÍ|æ©wß^øÚTã™ïv²¸U¾oû6éׯ½øîo&F•X¶­Xj?½vÕÇǹ±O<ù¿¯Îýå´Ä>>ÄŠM¯=¬Oyå‹ÿ¶hŒùDêÛË{LÃV’âc‹]ö#Yጠîí ¦ëîªk€o÷Äÿ@ÒZûÃï{�Ü«‹`j¨\exx ì9 U,,zf6ÁœO!ñ;¸Ô–�Né?­+<#øVÈ•—ê 88¢Ín)Q÷6xP¤Ù¨ÓG�GjJªd÷]æ„9÷ÇGùü#Náo)¾d¡@›ÎíDcA%�?ô”éÕ8/X)Œ_€‘fU–J`ºö Ï®ÿæãœØçŸ›Ÿ¤bÄœ½²£õ>Â2ìõçë(Ð6V% L@â‚…)-wFÐã‹ÓùzFt\A‚´lHˆ/ÇÂÖɰ}d÷�u÷À—©0¿¬žyžqtÛaÍø[<¨Kà�Xؼü¤:xú[8ÓòÄQ 5ROy;ãÏÄwù­ �ý{‡nLÛž–?òêUîåÚsy #†'©ÚPo‘ÀxÓm1~¾äDþE'ø´ S�¿¦®²’û\Î8!¸ÓÑžÒƒ»Æ©"¨O†PH8Jàà Ð „ê( °7 ˜)p÷˜(ÂÓE@)”WC½¢(l÷ü7ít�ÐTpç–°aÉ�ŒÕf®úêýM§2ó+.^,={*óÇÜJt~f¶ª°¬Nj«<¸>-ïç^$¢‹»'‰;ºnÛÞܪªªªÜSçò��zOPɺ/ö-¬­©­-ÊÎÜq¼ ‡‚‘qðJ2L‰„?oÝê‹pÄ eõ@}`¨€@ò0xÜ÷òC¬E°Y†%£ ñ‘l…ði5üþ~˜ a âÁóK×ô$Ø ¾5D3pΓKƒ¤þ°ïŸÛšeNïΣ-àlVº"È»‰Í3c,qf§Ç7ìá^0Ã0V«Õh4Z­VµZ�}at I’l6Ã0õõõ‚ üü:Ã0/'”4ÆfT4§Á¾0º–,�³9)H|i@)Ãðß¼‡¯Žs±Ûíz½žã8æ žÝê^dY–eÙ5þ Šbcc£J¥RºR—54;þ~&l]¾‰ ‹s$z:*ƒ,µŒ?X^P¢×x¾Ç`4;%‚ÀápBxžÁ5ýÓ‡EŠhm‡ÃétRJ½¡ÿ{ ‡Ã‘S'¬/4©4T6sÍ^1L‚£á @#Žhx0ª.Þìè¤Û‰ ²,‹¢(Ëò»ä8ºe„BÃ0®c#¥«Ó6l±¨U×´X£Ñ؉(3 ã…�„n[,êz^ÚA¡ž#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)†£Ñ¨t5B¨'úÿ,/]érIEND®B`‚hotkey.png000066400000000000000000004416631523260663500337060ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/fig‰PNG  IHDR@‚:QsRGB®Îé IDATx^ì½_ɶî½È“l6Á$ç4söÌ9ï§¿{Ïì™±MÆäŒÛ$Jïo­ªên倄$ôè^¶ç@«»úßÕÝë©•\g—‘H$Bü㢗‹\.—üÝÚÆ¥¶tnïŠ$ú2~     P."c¢çjª³0V¿ëìü‚%�½×„ÚAIòŸñC~“눊Bˆ' o„¤ûéŸp© @A@J…@Dƒ:—eú»N}¾ˆR1ÖF($ú{©@Á8@@òK ’F:@3ä—7ö $ žèùypkáÀ»‹Þ!‹Yv2"#…x€£¡€W»�;%Àa©É¨œÎùyÝéiá`  P¡ò*Î|g¶Ç!æe!âAÞ ^Ž_A8TèLÄiƒÜKæÙŸìä¾î% œ€”;—?ÍÏ‚� ¡Ü'Æ ù%á�_žØ€�„CñØãÈ  P *à"ãA*„„C…\hœ&€‡„Cq¸ã¨  �ùgŠ=‚€X 0@@à¾È·p8÷E¬t $Gß—Y‚ó�œ @8äŒ_�#�gáà;÷Ùr¡Ä.6† wOÂáî™ãˆ  P…ኽ‚€L¸/ îË•Äy€€@I€p(ÉË‚A�€@LB‚9ìÂñWf¡Jú {Gäg ·; |@@ _ òEû�b¸káà"’C&m8áPì)�ダ@> @8ä“&ö Å$` ‡|ŒÂå;?O’‘8W/e—j‡|\ì@J…„C©\ Œ@nK ÏÂáL ‡Ø’¬¢&""‹‡”Ê�bŠ1Ýö ñ}�"H&Ò½Š[X®3Ÿ/±[!’©Ç!ÛCb{�Âȳp8õq8NdˆÙ1 íKHãp(ü9ã     9ÈŸxp�žù"âzŽSÊãÀÛ5� ¤®¾    eOÀuvv‘äç(á „CÙ__œ€€€€ä…€¦æªÙ'„C^èb'     pO¸|âqPÂ!¶.«”cåÍ_hÔ=Á†Ó�Ê"à:÷qÝ‹Á,!"ª«‡Ü•Cî߬¬ �³�dn“iœ/{Üuq~!© ¦‚’=X;9:�C¢“á¤jÔüÆ     ·  ¬åÔ;M‰†Ø´„ÜÆâº<¿Œ°r°‹¯š±pPƒLúqÈ—äÂÁ�ÛÈð-+(¯ƒ-nïwp]^háàèÛ�ñõ‰Ê‹ˆÿVÂþÎÍD™ä‚ ãbC({·±˜o/>ªd•^ÍbHi¼ öÕI5Ô,ŽWö—'    åKÀuæ;�ئ}†|†Â!y¸ç?”/8Œ@@@@*‰€ëÌç‹HH‘õÉ^<$û†Ê�Hò1›Ì¿•Dç     H�Ü̶¼Ë�zE>ÚÞÏøÀQºÎ·,4ƒµ—¨®Ñƒá�DðïÃá0E¹4·“Å·@@@@@ ìˆnH. Ü7¹ÝÉ ¹È-=Ûnêã:;¿P¡J¹®üká`†b| F0(ñ`.�]©I~N.,2)[v�¤ORóÙårçÅ´vù..•5Ÿë¿ËÙ$N5� kOƒC/ˆçÁò@˜ò¯iÄ z@ä0«ð�Š"àñxÈ�R8ÜÞÛÀ@]çª\îÂAõ”°>‘°-´·Au˜Ó�"t³¹d!L™\eUæ5“-± €€€€Üo¼Øn‡*©|c/³Éœ¯Åx,r�T>‰p‡Uƒ%ô53•–RžDÂnÖöEÏ€û=�pv    •B@ä‚‹…ç<¨¼†< ‡s‡pÈa?¥pkás¹ø;i<J D¥Ltœ'€€€€ÀíÜ�p8‹PÄEI‘¾¥ppä.HžC8LáPHíבÉmŽŽ„“V]µäJ–nBŸnß�ûB@…'©°%®¤Â”ò©ãº¸8‹°h¸µpÐÉÏ–`Т€s”Pˆ%)º<èo$2é¾{_&Î@@@@R0¹Ã¶ÇA-À«*¬y,Çšá@*ñ™Ë«rN{$·A䂎KºEþ5¦ €€€€€@bª?ZÄ &ÏÁx¸ÏC>¼®‹ós-R\¹Vr©µÿˆˆž¤ÿ›UŽÛåÖûu”cÕçŒêH˜þ     p;²pÏÂÁ„&éähÓQÚãö¤í,�É´pP!A9µrá TŽÒ:Öª'¹p�DºØer¢Ø@@@@î#õQiÅl_³p�8%µˆÏ}8çá¶×…ïÜÊBÈ·pàÑ:ǵÿtåVÑ«á¶×ߨ¶0�ÿÒ‹ó, ÊD8¤ö(H'é$3Ÿ5g+f¾àDA@@@*Ž@ªðŽîñz¼ùò8\X½ßòïq€p¨¸™‹(ªäõr¨R²6™Õu�“h7ˆ�ô¬ª)©ÊJœã ¼$)Jª¦iW�ü‡Ì/$¶¨`IŒyÎmðz½ÒÛá¶9‹†Xá ¥XUe%#œ�ßâ›&T)åwo{æø>€€€€Ü)r‡¹ŸCUUž„ƒÏwn§`çÎö8°`ÅÕÇ!ñG –äYqßtüâVb'§óÄ—@@@@@ 4 ˜&p±£ãNŽ–nÒ:(ר×éÙyD¾œC…&«ˆ«é­=ªdÀå»Ü*ÄCiÎVŒ @@@@ ä˜ Kìyp»]Q"ÛÁºN}ç‘Û4b“¶q1Â�EƒÕ9:ßÂ�ÏP‹x²½ÜØ@@@@ ’ä_8ܸwI†„ WRIÑêß‚ - *iÚã\A@@@²%áá�íœÁö    H ¤…ƒ©ª�CÎLœ2€€€€@I(-ဇ’š €€€€%#¬ªJœãÀ�ß à8aº`×-ÖlPØ1€€€€”�’Œ…«*©ÖÓªktH'Há ÿš˜àmÄÅ-ºKërb4     P%&D5Èÿ㼆P($Þõ[û�(ø”ØHü÷Œ°A8d„ �€€€T.�’j ª­—a …C †$d‰� æï±—Êô�HÖá®r/-Î@@@@òG ¤„ƒê:­sÂ! ƒ$••tR¢–ÖJ8p¢‚òTà     �ùgŠ=‚€€€€À½#ápï.)N@@@@òOÂ!ÿL±G�;' Šûã“ �ÜÂûó*Î|ç•Åœý‡sTƒéá ª*qu%ä8dÏß�Ê!�£Z9€œi®âAÙì.·›ÜnýßFdq\gç‘\Û©ñqLò3WRâá÷s`á–“ErtEÏnœ<€€€$!`,Ö,,׊fiDCŽâÁå"·Ë-âÁÅâÁbÉB"3° „C惱=$%X!2ƒŽ­@@@@ ²›ùé�V9¨cLJÌEƒ|Y< nÙ„Cv—[ƒ€€€@e€pÈîúßF8¨ð$åqP!KÙ{"Ù]0l     �ÙqÌU8(ζp0¡J™xœN‡ì®¶È‡ì@æ"lÆJ8hoC”Ç!qN²=6û¸UÊîŠak�¼€pÈc>„C¢P%‡ì®¶¸cÙÏ]8H %ö8°§Á¥J²šO¢ ¨Ñã‚Ç!»ë„­A@@@òLÂ!; ·J0(�‡,e\ƒ• ²»NØ@@@@ Ï ²š›pˆê­û88=éÇá�ž¶( ‡ìà[8 �Cv× [ƒ€€€䉄Cv !(bÅMe‡[ƒ€€€”3‡ì®^±„ƒ=J”cÍîŠak�¼€pÈct3¶Ì¾+õ”ˆ8·Áê]U)³ý¨­ ²¡…mA@@@ àìR™?”u§QzWG…pÈŽtn×ÈnrKr´*ËšýG:GŸ;F‘Ý€x \Ú‰?áH˜Bá0…Ca ‡Ã‰„•2árO1SK–"¨”Ý1³?I|@@@Ê…@1Dƒas×6„Cö³2ûk¤ìî|x ²¿^ø€€€„@1 é\âço ¡˜ç{Û±—Ï÷oïqˆ*ÇêË^ºhVð8”ϤÁHA@@J�@1 i‡RŸ¹ŽÏDúH¸œB• re�ï�€€€@�@8lEï6±p�åÿ ¸D'd»ÎÎáqÈ€6�€p(0àŠÜ½-\Úã�kU%Éq€p¨ÈY„“(1%vAîÅp”pP�ìP¥L=�ò<@8Ü‹)�“(å Kï Tr´+_}àq(½KŒ�€€T‡Ê»æ…?c%´ÇÁm{ø÷ÙVH‚Ç¡ð× G� @8d ›dIÀ.òx<:dI͵Ìú©ÙIÔYÂÇæ    P…áZÙ{�n7‡-¹I5bÎäá� %l   wHÂáaWÌ¡¢…WTâ.ÒF8¤’ñ󇊙68Q�Ò&áPÚ×§êrûf�„cÈn²(á .z8q‡0E"ºQ„C¹Í/Œ@@@@-‰C1Ž áP¤‹]ðÃæW8ø|n ¡>Ù ó]ö8„Åã¦H8ì(ïäÈÄŽA“ÝÑ ÎM Æ{1ÅJ1„C1Ï·²&º,ö»]äv{$9šTäO&ÉÑ6+×é™/"^¹?²7å�æàð$¡�xŒÇÁyYò¢T¬º²&Î@@*�@%†Ð@8Üïy!·ËMn� üßÊòÏR8œ��GD4ÜB8ð!ÙË „ƒ S‚p¸ßÓg  ÷—„Ãý½¶•wffážó’E8¸TW†íߢœ·&ü/;á�NádrQáqÈ„¶È–„C¶Ä°}é`á aJ,¤‡ ‡ÜÆëÊ›ppæ8ˆÇ!~@*9ÕE§ºÜN ß�Ü @8äÎß,5,Lnƒd'°p›äá„P“�CÞ„ƒ S’R¬aUŠ5öc„C¢0¦RƒŒñ€€€T*‡J½ò÷ñ¼Y(x<^òpB´ül�³ýšîüó'8ÇAWUâÒ¬‰\VOþ³##Q¯‡tÇßA@@@ 0  Ã{-Îiðx½1IÑÊÛÀ¶» ]Ê,v)?Â!¢ÀñÁCRŽUœñq�¨¿¨P&þg¥þâü¤Îó.x@@@ @8TÂU®”sdQàõ²ÇÁ£‚J‹VÅŒ’7lNÄ'ÂAå,°—�K±†t9Ö䣵tpxT¶wŒpH[[¶8—û6aV™ª¹âœŽ     @8`&”�T6¨Õò@Û¹-—_5Â�ím³ˆŸ¾�C<ƒ[ 6†Ù{ aJa#HJ=ñ'*$)V ˆÛ!¢E„CéMQŒ@@*‘„C%^õR?gñ$dª<§Ç!j¡>‡Eú[ 5H·œ{ä'%Ã%ŸL¶¶9Ç8ÏB ‡RŸT€€€Àm @8Ü– ¾ŸÙ§Í-ÂÁ£:F]8¨òªD¡07~c¯ƒò"˜§«ä>‡ø\ŒÌ'²62g…-A@@ x ŠÇGNF ­p�È•7,áñº_ƒ*Ǫ»E;SîÚãà<1çÉp9V“ëàܦ܅ƒÕ‡".‘;“I®*M¥jì�É^° €€€@¡ @8š0öŸ=�tÂ�÷(¡u•$éíV"Âôn¸½ÇÁw®lY¹G²7kÍ ¼Ó$æªJ²¤²µU %þÙß&ø€€Ü%gÎef%*ïrt…;–±³· 7&ì9Ù"}22œ* ƒ›Ü"XH¨­ÙáÙZ¦.Ÿï"B.óµì&KÔ ¼i-ÉÒI–6¡K¦ÜSbá »IÇÈÁ}Rèéu;� ¨pÒ¬Ðg…ýƒ€€@©(–_¬ããz@8ƒz6Ç̤²' n  ÊaõW»m¨’�=*M!'�ƒó„Õíå¨ 6BÕŠ5’G�xÄn8¡çjœl1b$!ÕÔ™åv)µl.Išmö›È|ÿ2âÚ,[Õ—ù‘sÛÒ\Ïܾ�o�€€@>Óx/æ±óÁ.Ó}@4dJêöÛÝÒÚK·ÆÏ¢A„ƒ‡<%ÄÂ7ýÄN·m~‡yžÑ©¹n+ŒúIÔ£@…,±çÁî$̓eo[Ðn·Êð¶TÆ9©óö…ÈGú�nóIy­KÒâ’l "ÂÒ£Æ     Üæí{ˆÅ:îmÆœíw!²%–ûöjù–Ò!áá­Å^�ÏÀ¢Á£=ünÔÌö¶±×£½ªs&—ïÜgõpÎä ±Û¤’Û ]¥µÇAÿk’;¬D k^µ¤°”PŽ«ów!2äëÐtd�¤ð°b’er½oSE*“ýcHM ›7n¾YóØù>—dûs[é–³ïjL÷÷8…²ç¤j—[•ŠJªŸšª¬¤<,Ø(/má ¯»I’–ů¶ìü>/ãQÈmß…pàSËäq’ŸÛ™îï#g  �œ@%V7*Ö|€ç¡Xä3=n*»S…&ytõ${±šmbU§ÈNà㕦Ç!Š'M«>,Ø a5¬Z³&?B‡2å&ÔA ½Rž‰h0§ŸÑy¤ *žpÈ$'Ó �í@@@ s ™³Ê×–ù"™l?‰Bû39¦Y`OfßZÂA¯l«E{¾žæ>ÒETuLRñ…ƒn:‘èä�%[UÅ%íyÐAIvmY.<¤ªÓö¤3Ý32×3¹VñÛä²ëtÃe—R†Š%Ëå ¹�ž-x̤»Ý~ðmÈž@¥–EÍžTþ¾á�?–‰÷d‡égy$éç¦+$%ø*‡)±ÇA'QHà¢Åß’ UJ*ô}•µmUQÒU†ÛˆW"”¾li:;¼Pfvºã¦š©Æä ÕJ¸�¢; ?Ëé�ÍA@@ àuÈÄ wÑ�!¨[m&Æ.{�îÏ:o!Á÷¥;4·DÐkͱÉα9ÉEó8¤ÊW¹ê윙ÜÎß+§ƒJ1nöH¤û¤ƒž~éŽ�D)æö5Å ÅwÓ�Ï-›óWÕ¥aï>   P wKâ¡à¼o#$Ù9‰}êP N›Ûl]:Â!¦d”Ó]be™;„Dª]§3´ !Ò3ÉÆ•�}grül·)ÇlÇ€íA@*•„ÃÝ]yˆ†»`}+{/Óš© N¤¬…Ÿƒ³›RH$Ö]\¯²<†Ze9x @@nE¹·Â—öËù©ÿ˜ö0Ø hÔ6×™ï'Õ.Áü.›„í[÷qÈ•‚Ó¯Ú`C8$'i‡vÝJ§æz©ð=(2x wài(ÛRÙ³]ÉTš<Ü¢ ]Ñ„ƒò:Ø%¢ÊÉß�ËXocòÃãP*7Æ  p·àm¸Þð:Ü çb…¯±”fÒ•—r[²/ªp(&¾Ûû®…ÃmÆŠï‚€€@ù€§áî®<wǺ8G²$çÞÌu~q!�B¹§ä¦XŠƒ,ÝQ3ó ärÆ™í9Ýøðw¨$wwµ!îŽuqŽ”ápqy‘2¨¹žÃ½ÊOÈ̼�N2É \f{Îl_Ø @@*ƒ„ÃÝ]g‡»c]œ#åG8ˆÇá‡[y+nîb'éa33ï!nsÝð]È”@fïåL÷†í2!�óR²ìÜ™—™©¥–¨Ãqª‘ÚÝ—3=BôÞ¢šg‚äžl“áÀ¡JÌãvÓ¤D âéÈdeмW‡¨HwÙogZU3#Da½4�ªÜg¶¢AÄ 7Q“ê@ÙWåŒígp÷|‹wD‡¼Ë‡âMg@@@ Ü $ù>'‡ÜˆB8@8ä6sð-(‡@ÍÓ.! ò4•°¸=‡Û3,Ô   5·°_HO 6%B)ý½§!¤É¤Í>�E’£‘ã�þÚÄláá�õ¤Á@@@@ ¤œ¿RŽõœÀÌ‚@LUJ]ûHmŸÝGÉÑYa«xá`ÓJ7%�ê7–±ó»HŽÎjbc�Š#`J®rÕ¤H$þì ¹EA°rHn§)c6G„Ò¿8»*P¨ª¤¤\ªk’êjHçhÞ ;ì9^à‚}-5[a%€.¦Î¡`—;¸Œ]Å¢A•\M 2Në+[8¹Ø®i•SJá¥ºÒ ôpÈö¦Æö   ÷‹€-’xôbl&‡»&áápG¢á®on@@@ ô@8”Þ5ÉdD•�ãEè¡J =ÉðçâËäRb(åq�bG á`¹ áPl�C®™Cå9¹1j�Ò$áPš×%ݨÊ\8äcõÞ®œ>c?™á�mfy>Æ�îÒ&ú;„C.Ôð�ü° ÐÕ’øˆª$k¢’­ùO6{CŽCYæ8äÓøŽobKAá$ó*» ­ö’ýø³ÿF¼ƒ)›Û‚€€€@!¤*:oï$_ Õ\ÎÕXs97=oœSÕ4ÑF~\o‡ˆÐÍCœ)]#’äkÿª“¡Úÿh™aJ•¥rH-âÄS/ùNï,Ke[!9—Ûß(&�tq ÎЦ¹›5^m8%¶cÒ-Ð&7€l{,Ýè2'áPÖÂá6ëðÉK§Ê_¬Vä¦ñˆéÔ ¼Fårˆ“ªA¬ÿ.mÌÓðÉ |ÝðD:)RD»è¸Ç†º)"i…C²ZÈú|ä¸ù»yÒßfÙ†q¥ß#¶(=)­ 1lE5…¶c0تŠ$1ždù1I¯¡à°ÁQQ"%Ù'{›¡¢…Câ ãü­êng¯š«¹.ÿk7A·þQfyÂAIûcÝNŽvz.·Û:йg’J¥mÓ-!t§¢AÀåÜY°ô‰€€€@F&xcÅ)T³gÕñ™-'±¨Œ�cC)]�ÈúÑ¿ƒp¸³IYÆÉÑÎ ”b2 ÊX+>¹§!%ys3Ù•Ìu„iW™+¹Ä) ³ =(z¸ÆÅ—›pH•£QÈùáPHºØ7€€” ËÚJb¨D ³ËáÙb©±ÇÁ?Ñg”\8Ø ”v°v\l¹c±Woµ{x²™?÷D88OÙL˜è|µ…srÄÎÎD³ÜÞ>vZEûL“‡ 3²?‰÷“Øã kÜw)¼q:¥ÇÂ!›Û‚€€dGàöÂ!±¯B•�ÅxÂŽ¢3±ö—ʵmÀÛ„¸«1 T©,C•©Æd¿3“-F,ÈôÅ*. IDATܱWôUX�ò!ð$s¹Ü29øÇ(,³K8Š(ÊÓ�N8ÄʇVޏ( R0¢P($Ç÷x<äõxÈãõ�ÛåŽöth÷�:b²‡ìØ@@@ ÊFŠ·oœÆ¶2ºU.¨ƒ±3D9¿äóжM¼/!½p°EƒÙ§²àÄÎ3ÖTlD‰ü!ya‡²ÎéœÈÓàü»S4H@�Jh޹ÝZNCÃÔÜÔHÁ`P¹ñ¬’±v8UE?µÌÉë ·�dM�LD­‰¦x+óEÙE¼PëróB­²Ñü××t}�…T¶u"bØ›íåñyÁÔ­Ì ·‹í9Õj[Îë­�‚R1ÆöRf“Ò"Ưá”2››t‡}{î÷Y8X Ôˆlø_]ÓÞÞ7:<üN>ßUUWS_o/uuwQ{{› ž¨–»�ge„Èç;§““ÚÚÚ¦““cª®©–íŸ<é§––fªªò¨y¥]`ÑÞ-gRŽ.)¦cû¬ íbÏ…‹üþkÓÓÓ4;;Gkts}Cï?¼£W/_ÒèÈ3jin¢P0 '¾rÒY""“;»"¶AˆTE\fœ$€€@ÉH—µ¶§M].ñá¦ë›�Øhûû‡ôóç�_œS(;GBˆtß,±|t˜›iUUnj¨¯¥ÞÞGbϵ4µPMM�^$æ…ßË‹K:??§Ó3ùÎÎTøwCµµµRSS£Øqæ6P¬­‚ î©p0F¹JqÑåÕ5�œœÑÌÌ -~]¤��]ª««¥?Ðøø <}"- è¤iî¡ &ÝþþmlnÒ_ÿý¯xš[šihh€þõ¯ÿ¡Ç�É~Xœ†CAG OL^EÌj8{5,�„NÆ6ÂaJ„Ã,­­oÐÍÍ ½ÿž^¿zIc£J8È-�ƒ³(¬SïWòz;„CɼI0�Š �¹p0 Òlq^/÷{èòò𦦦ifvžVVVe‘—s=ùÃ!H"$ÌÜx ø¿#T__Míôáý;š˜˜ G�QSS³|/Ê¢ñÁá!íîìÑææ&mmoQGGõôtÑèèõõõJäI•׫ã¬Ù¶Mápo…ƒºþìc#ýŠ…Ãñ}™œ¤…ùõuµôñ×�411NƒO-á ¦{Ü’ ómŸ6Ö7éÏ?þ Í­Mjnn¢áá!úí÷Qoïcª¯¯•op²tôÇx}$¬Æ¥Ã“” NË)ffgi]„C€>|xO¯^¾ Ñ‘aåq©¤i©{åqH&*MD@8TÄ[ '   P22:|\FÍ €m4�~úçÓ$MOÏÑòò �žžRmm-Õ²w ®ŽÜÞVŒÝ`–³ª#TWë¥ÖÖfš˜£ÁÁAêêì–¤ëÃCñ^pÞ({0ŽŽŽéèèH"HúûúèéÀzþ|œŸRm]-UUyUäHLѸ²…ƒÉ¶÷ÅV¤ÊbºÎ/.LDX_Ë÷¦Îd“k .³ÇSEn·W ‡Súüù ÍÏ-Ðî{êè—_>Ò8O¶�'‚$1u:'‚cïø¿÷Y8llÒ,6Y84ÒÐР-êê”Ç!t”x�õ8Ø �wjâû¸S¢n+Ç�="66) =¯^½ ‘g,%T)Úã`:0/†ãƲ&{%‰‡|ßaØ€€¤"�^8(;ÄÊ5ˆDÄ>s¹«$\éòÊOýý…&'giuu�üW~êêê¢ö¨­½•ªkj$¤œ¤%/Ôr%¥0UW»©±¡N<===ÔÚÚª"L¦gi~~�éôôLò'8ô) ÓÈè3ñ6¼~ý’†Ÿ RC}�‡p$Ó¥::[�_ýÎT�ª„Y!×–¹Õ‰k-•¼dmÊyR²ÂAõ1'·Ç+É7ì;>:¡/“S2‘vw÷DÁF ‡*¤<ì­`�ñ8ˆp°<ƒôÛoìqp„*qM1£¢uˆ”®v²µžp¶fÖù¯UrôÔôŒä8¬sŽ ‡wïèõ«46ª<¦L«©D t»ÎìÑ2NMlvmè$ Çmû%‰‰ØßE¥;•ÉýáP& ø'Ò[ º_–˜’MJ ÛV ÒWìq˜¢©©YZYYxø=yÚO½�S]}­:dIʰrb´;BUÕ)ÓÐÐ@55u’›Ê ¾[[»´»ó�ŽONÈwvN?�Žèøøˆ$räÍ›—ôŒ…C ‡*rn’§Í"¬ó_‡û-tÆ> ‡‹ ?�Ðää-,|Õ¡ž>þòA¹·8Ç¡Š²š¯”•ÛåaaKßööeõßò8´¨P¥ßÿ—Êq¨­V�L$9šÃ‡T%¦P0LÁWà^ö‡³ÿ½^¯”|å~R>Ìí5|~qEÓ33477Okëë"Þiáð||XnŒë›!‰Ýãñ±¸ñÈþ¼ZMsÉÙ ”–e5îr»¬rU^>&Ïn~’ZH¨¼¼>ºtº’|:wŒ‡(qé-#Øà76–²™Èå¥Kÿµ‡ééY UbéÍ›×’‡úlxˆë¥z’TË”Þ&IÚxì܉«+?ýøÁ"á”NO}ôó牄+ml¬ÓÆÆõõ÷ÒÀÓ§ôö- µoñ8Xe÷ lx,+ð~z¢U¡ñ8°’½¼ðÓññ MMÍÐ< ‡�oªôáã{š˜¥¡A%‚ÒtMMv¡E".ÚÛ;�Då?þøSB•ZX8?÷ÓúÆ6Í/,‰x88ü!Uº»ºéøøXÜpß¿§³³é;QU]%Ç|ò¤�FGŸQõ>~Hâ}Ðw¡³ñ»�äÌÓHæy(‚�ž÷Ç]¾v¨šËà   `PÖ„�ƒjú[¹Ü^ñ6p¾' ‡¿ÿ™¦©é9Záষo�pPáDÊdQž Õ¦A7uÓÍp%p[ç�º$Ê-ý~Òææ>}úô�ütwuŠýÆÂ� Ïð¾«%Ç� @‡Ø¹{sÜžº«²%.ýtt|J_D8,ÒîîÕÕ×Ó/?ÐÄø öRMuµ¬Ð« ©Ê„±÷àÛþ!­olÑ¿ÿóíqh¦gÃ*9º¯÷Õ××H‡g+ú¶ÿ]öýõë­­mHè¯ohõ쿾’íø8]]�R`lt„ÆÆÇd——~UŽlfVõq¸ ˆ¸yóê¹xX8øÎý´ººI3s_iye�VVÖ©±±‘šUëu'…s•.EÆŠÛOWþ+©UüèQ�”u}ñâ9=`ÏCsEDa›ŠP:7ÂBê¬ •¨j eçÊ„^•   M ™p ^Üuy9¨šÎ/üôÏçi©ª´²¼L^¯›Þ½{Cã£4<< вةÂ;L] �]ð”¼O·êÍàö¸èààˆ6·öéÓ?ÿÐ?ÿü-ÂáÑã‡ôî íq@rtÒi[QÂ�Ã�xâ°’áðešææ¿ÒöÎ>UUU‹=8ÐO�uQ »©B!�9ε…9ì(B?~Óî·}ššš¢ýƒ}jom‘˜8Îqàä膆Zòûýtv棥¥UZXX¦í�]ú~øCêwuvуmT]]C¾ó úñãíííIgÃö¶Vzõê•äZpbž_¾LŠ×a}}Ó¯•Ç¡Ž…ƒïŠ–W7izfžfç¿Òüü"56ÔKø7¦ãö0ÔÔÖˆHáÒc\EŠÇÈ7"{Þ½}COŸôRïãG"D<˜gQì 2Àã�9+l   P)R ö8„#J8|úï•Çab\yÎD8lÐÔô<Í/,ÒÂ×E =zÒßG##ÏèéÓ'ÔÜÔ ¹ þë 4QYZ^¡ÍÍ ÚÙÙ1à þå‹çôòÅ„Ãã`¼ N/„Cæv‡ÌYaK�J!�‘p¸dá0KÓÓó´¼´D�›€TTzüè¡ähÖÖpÙVŽNRáD\ä…C¹ù[{{«ä€ÖÔTëþVlês![[ûâm�Cw§ä¨¾“P%åqH\ŽÕ\!Û.B9Ö{QŽ5Ñ­§cผxn$ÇáËäŒt%\^Y—Öã��MT[Ã9ß÷#Ù *iGBé\é&À¹ —’Ñÿ°§“&ÆFUU¥GœãP-½VW×ijz–&§f©¿¿_2öß¿%Â�'$K’ëë�„>}]XE½¶ºBOúûéÍëW’åÏ“Y<ÓÓâqàÄÉqxýœžkáà;¿¤¥%¾..Ñâò �� Óóñ1QçÃCƒÒ‘Õn!úþã'--¯J¥¦éé)©ð´¿�Þ¿G¿üòž<®ˆãܪ”ûƒÂ!wvø&€€À}%�T8¸¼ÄáJâq¸ôÓçϳbÛ,-.Óù¹�ÚZ[©¥µYJÑ{½ÜNç „Ã"jj«hxh@r8Y@ðâ«É�`û�‹ã(áð“¶¶¿Ñ?:T©§»Kªb¾{÷**Ç�«QƇG‡dC8Ü[á n?ÉU�ÎÑ7t|rF“Ss4;;O K+â�¨«Uݽ\ž”K{Ir+CQ¡JqQ(¦`8,Þ†ê*�ä <Ÿ“äè‡=Ý¢z77·h~a�WÄHõê5qÓ¶±±êëí¡pØEÜæ!‰ÐÑÏZ[Û¦……š™š—ç9pøÓÓ§ýâq˜™ž¡Õµ là³ÇáùÄ�Îq¸¢¥•ušœš§åÕUZ[[£7¯^¨$¢±gô¤¿WnBÉr�œúhskWò&þúë/ :ÅùÿúׯT[í•óB¨ÒmÙ·%ˆïƒ€Ü?É…çcrŽƒ )ÿôe–¦§X8,IX7X0p(’ZÜ [áÕ¢ÄyïÞ¿¦W/ŸSoo¯„j;…IŽƒ—ÒÖÖžÊqøô±pàPó÷œã0úL÷qà’ö\æÞ™3- JB8"ÁV�÷bà‰syɱþg4É¥Nghem�®ü×RõÁƒVjin�œ©ÌÖ6+UîÍ@$*øÔç£oßöèÚï§î®¥ÿûßß©»«K\f+«kÒ¸myyM þg#ÏhxhˆzzP{[3…B {b1rq~Iß¿ÿ¤ííÚ\_— ÌÛ���ÐÐÐMNNŠpàJNNá`…*�_ÑÒ2{7æå¸ëëëôîí+úðþ5�� Q_ßc)EÆùu~~I;ßhffNJÊ×ÔÔÐ@?¾§ßûUâëëjTF]MÀôTÝ8Q\±pÆù©Û©×®\šåzå0n�ÂH,Ø‚àªJiw~yMŸ?ψmáJ\Z¾±±A¢$ø_ö0°%Âeä#‘UUy¨¾¶–FF‡ihð©,ÂJ©y-¢Zrqž ‡Z8|¢>ýM=]]RUéý»74:Ê9õRU‰‹Ô¨dkcáÄÛ8ÅÊ.+ÂÇ¥�\ôÎѺúQ¾Èé¹\ÒXM:G_ÝÐÑñMNªäè­íIV~ûö-�ŽÑÓ'�¨¶ºš‚!ÕX„…gâG\ú¶ÿƒ6¶véï¿ÿ–ΉyFÿßÿý/uuvÊD[\Z¦OŸ¾H•#6øÛÚÚ©µ¥•jk½2¹ÕDWÂ�Â]__K²òõÕ%õõöJž‹®U<95I³3³Rr•sØãÀåXÇGŸJrô©ï’–u¨·egáð^„ƒr¹q¯n<GÈSå•�ýƒŸ433Oÿù㺺¼ êê*úøáýöÛ¯ÔÚÒDM� RYInÇ5Q9ÙÈÜövWf•eŸï+WÎûƒp(竇±ƒ€†@"á <<"Œpøôyšf¦99z‰‚¡ Hùú‡{¤Ù®”Zåf»‘°„ŽWy½ÔÒÒ,ÍqëëjŶQæ­ŠºP¡Jñ^æPs©ª$%T9V]ë5‰}ZLá ì.“{Z˜k•j¯öñUYÜ\–Ž]çò½\¾,ƒ+°pðHŽwŽVÉÑ““ª÷qàp¹ëÄ ôI®—O�O=·[¼»ßim}KuŽÞÚ¢Ö–y6,¡“…C0(¹ÿüóYD‡µµ·Skk+ÕÕV)á F¹ ƒbƒžË±FBjòóäx*IÍ\刣¹�ƒxtrôëW4>6 ÂA’£-á°*ýÞ½}IÞ½¢±Ñañ8n´pð²p¸7Ýôìœô¢`áPS]EÂ�“©¥º’N:2×Óú"«òÉöÕ†xpÞbwÿÃA@J�@¼pP9¤ñÂ�;GÏÑê겄�?Ÿ§ááAÉa`aÀ¡áªÙVDþ›X,TWUIHGŽ˜yNŽfûÏ#ÂÁáqp”cåP%.*Ã!OÜóJy-GwºŽ±p!ŠªtGÂÁw~EG?OirzFú8ìí}#\„÷qèÓ à¸�ƒ^e×}ööhmc“þüã¿–pxöl˜þ�…C‡\Ùèï>ÑÖö®tšîìꢎŽ2¹Aœm�«véÄaDnî·à–r­,X„´µµŠh˜›[ •Õuò›ÎÑ\ŽÕTU:÷Kr7ç8°Ç�[¨¿{ó‚Þ¿{EãÒà�…CHŠªää§ýïG43;Gÿþ÷Èu) Ýß¿“‡––F©Â”™pˆV˜¥þÂÂø@@ŠK á �£¥�Ã,­­q�änŽ��JÑ©NÉi«zÑYß-3_²RåÃéªê/:êÄë¥CÎqØæUú‡º;;TU¥wohÄj§JâK'j³šn­ª—FU%x”ËáîŠ7‚¶h�ÇA ‡Éqøúu‘vvw©®®ž~ù……Ã( ôJ©/âm�r¬n ]úvpH[ôŸáð¿¿ÿN]’ã@´´´$¡J›Û;´»»OÃφ%_�sÚZ›”‡!/†œr8,Þ&î$ÝXß �Ø8tŠ+!ñM#%c×7”pøðŽÞ¼~!)Çzá§ååušœVÂ�=ïß¾¤�:T‰KÄr8·fàãù..Åk2=3+¡JÜ›+üòὄ*q9YÎq°…ß8Ê;¢0ª¹‘â<ºç{qŸI¥sô"uŽÎÍaX:Ø0�ûK 3ápMŸ>OI‡•Õ%ªòº¤ç‡qså$îWe÷q0ÅlŒ ©Jé+³R¹q)�/ ÚÉÑ*ÇÁ\ŽU…*‰ÇÁ ×6ö©y»B8(9fB¥ŠªTÀûDÒzu¨Òùùýüy"åRÙ;°½³#‡_ýE<Oû¤º NпɯU�¡0ü �Í óÙØÜ’¤gÃÃôûï¿SOw·¸ÆVVVirjJ:LoïìÑÛwoèÍ›—4<ÜO�vP0 <ÒÑYšªœÑÄ.UkøÚ#Þ�©)U2–�„*}äªJÑÂAʱN±;o]å8¼{%Â�K¿ö=~D¡PXŽÇ®:.;ËáSÜTîÏ¿þ’¯«³CDÓïÿúUßUWs†3TÉã}Ñ¡€36Ç]Èk—ãhð5ˆ"�‘p¸bá <++‹äõº$yY:G‹ph ¯Ç,bj¯€)„i ZѺ—¶ÿx•ó<­ªJªd<Z84rŽƒñ88ÀÁ㋞] ›K5qS‰1l˜_\˜ÎÑS’Í�”ëëëé×_?*�ÃÓ>1 ƒÁ€®Æ$‰ÌìqØ?”Då?´Ç�ë «p�>”®…;Û»ôõëÍÎ/ÈþŸ� ‰Šåþ ƒƒý2‰¼cO†©   uöŠx<^ñ.ð8ù¦aá°¶¾N×âqP}ÆÇt8ñ8lÐÔÌ<-/s9Öuzûú¹xÆÇGè)—c•<ŠˆôŸ8<üA _—hn~žæææ¨¥¥IŽØE÷áý;r»¹�ƒ¸ADm;+ °¾”NŒâqP7¤³º’IB/ÐeÄn3&P Ï]šãÃÓ‘ñ†  P±¢„ƒq pÙx®|ɽtU%ñ8°pXþ*U”Þ¾}-6ÚÈð�TWâÒù¼ðæ� ½®ÊîÛ Ã.¹ªryÜÎ}6¹ÜßÓßÿ%=³¸ëÇoilìÕÕÕJ¢uXç8ÛXì"µÜk];ä8;Ç¡@·‘x äÇ-?VçèÏ_hn~�vw¿Q}ƒ-8Ç�l‚�kÕ9ÚÍž·ß{,Ö·èÏ?ÿK[ÛÛâq¦ßþõ›ÄÈq¦?7YÛÜÜ¡OŸ'%Išózv[5‚¹›!÷‹àO8�Âÿò*mm-Õ74ÒÍM�®®®%¤ˆ{Mp—ŒeÿWUçî† R²leuS5IYZ¡•åñš¼|1FãcÜ9º_*Caº¼¸¢�ÝoÒÃam}�vwv¤éÉ«—/¤YÜóçã s"uȪªäl~¢D”rëØîAuÓ/»¿@S»Í”<™’Âv  PÑâ…ƒªzÄÉÑæGú8°p˜š¡å•%ñ.áÀ'›X8xÜf›%�mõ¯)ÏhÂR’>P‘œ@ýýÇ1íìÒ—Ï_èË—ÏÔÕÕ!=¹¸° ÷Ðâ¼O¶Ñ8J……†j6'á!úº9äƒ^@óίª ¿û#k�¦í¾{ªïq¸¢£#î=M ìqàäh;Ça�=5^ n”ÇAVÙUŽ';sÒÿûmmmIé/¿ýF}½�©¾¾Fz%ü<:•ؼÉÉ):==#¿ÿJ:HsyÔÎÎÔÄ ]$½ NOO(ps-¦x_?�ŒŒˆ×�ãØÈgá°¸¸L>Ÿ�FÇǤáÜË—ãÔÖÞ&‚`umKB•æç¿JÎFW×zÔÓEýOúèQO�ˆÞ÷éÉ)íÐæÆ]]]‰w„+pÜ W_â‡o@%XY«›ÄÇfW(0wˆ³†Vq&ï�ß«8`<Ì � Ä «GGa°Ç€ËæûéÓ§IªÄÂ�=19ª¤{N‰np©†·zÁ—£-xö„mŸýïäó]H?¬³³ éåµµ½%v„áRô}}©»ë�Î5å¼Õö¶6jnn&o\c\-t-ÑâE\Ïîº×9æäX°ÇArŽN$€ mö8°p°«*õKU¥`ðFy´‚�ÃÞ¾-¶·dr±pøý·ßDprq ¦««­¬¬IO‡å¥e©ÀTS]C � Ò(®‰“¸HÅÉɱ4\cOÄóçÏ%©®Žœxi~~A~8Aúû÷ÔÛ×+ŠøÍÛWÔÓÓ#IÔÍÍ= IDAT:595+Õ—æç¤Ú@SSƒtMär±µ5ÜÐ-Bgg§òã;;“q?éï“D£/žS[k³4UaÑÀ ]7°P Þò&ä®*3x–`“r&áPÎWc�;&à\td±ÀEhŒÑï¥+ö8|ú"Q+Ë\UÉ-‹œcRUi@B•Ø{ ÚÑò"§Z}±ùÂaÕ7Óé©Ol¼¥ÅeÉQ==»$¿ÿZúb���ÑéÙ‰”¤ç‚8M�µbÃñs¤Èèè(õ÷õQwwÕÔVë%>ž3ï�±é^ºgă,ÚáòaÞ¾�C�NßûÆÂá’ŽŽNhrjZ ‡½oT_WO>¾§‰ñ1z"'è ¢ÂœØžær¬\ŽõÏ?isÓx†ÄãÀ-ιÏ^ž°ÇǧôóèH&ìòÊ*ˆòe×'Qˤ—螈”^å2¬£c£ôüù„„!UWWÓúÚ¦|÷Ó?Ÿå¸,pX<¼ÿ–¨½£ƒ¶·÷èËä -Ì/Êù°¤µµIE¸¹¡`àFD'üp¥'Oúå\ûúz©§§KB³¸�ŠÜ¨oŽ(á`7|+Ð¥ÂnË•„C¹^9Œ@Š@À~ªŸƒËíOÁ§OŸizzšVWWÈëñЛ7¯ibb\šãJ9V1 ¤K¯e»„YJH¤ˆWò:�~ÓÚÚ}ù2-¶Û~lŸñ'Hd Ûb7Iå&õã±ðöÝ[‰ÊèïÓ¶�+:TÉ® áP¼pšºF8HÒ ¹dBž��ÓêÚmmmÓÏŸGTSS#Ù ~ô°[* qh»”'áÓþþ!ÍÍÏÑáá¡øœ'ð|b‚:::©º¦FD'ãÜ¢j··wågg{›Éí§ Tl"éNXW_+áK¼öZRUU%^ör°7a{k[šÐqC9¾yzûú¨½½ƒ¶vvéË—Z\\’‡‡�zèáCUá‰í;?£›k¿$ûp vNzÒß/IÑ­m-ÔP_'â%*Ú´òá`âè  4EïÁn‹“�Ý‚ð`Ä)€€@¥Ðù§aSÉå•�".m¿¾¶N{ßöÄžâæoý^[˶–ɬæü%$Zš½¹)ÑÉéíîìIÁ¶ÝÎNÏÅŽâüý ]ÑR…qQXDGlŒ��ÓÓ'ýÔ-!ßN�ƒ¹@Ž÷ž•A]¼Ð¡»ž6áq0ñùJpò±Ÿ®¯¯å¿9Œ‰k÷ÖÕÕH˜’4$´ÜQ*q‡WâÁ Ý\Èw›k 'âã!P“QUâÉÉbÃ}M~ÿ ]]^InÿÜnˆ]UÕ^}ÜZ96‡ÕÔÖJ©V)Ëz}#n5VÉgg>kUu5=èè ºzgª–®Òœ¯±º²Jëkôüù˜$:?|ÔMm­-t¡ÇÊÉ><ÖÆ†F õuuÒÉÚÍw‰j(•è"“Âá®ïE/ðtdC Û‚€@‰`G`pÙûˆ.ÏIͺ¼¼TöÒõµˆŽè`ÁP'6‡žër¬"Ñ*pÉ´c!Â}¬®ý×t~q!¶{TÑŽøPž i$'ûR‹Å¼^¸mh¬§ºÚ:YXf¯„² Í�³O„£ŸAR¤‹uAï¿ppÁ¢jùt K(:&…L?Q³&�G5<Ó©Âú:qßÙÈqÝLe!£:ù_5ÁÙ.…Ã"V¸’ÿ‚³õ9·A݉.¿ú%Oxv»‚\=À-₈Xqÿ†É©Z]]¥�õ z÷î5½ÿFšÎ=|ØEþËK âêc¡Så­Ö­Úyü|ž < ¦y„C±îI7™PÂ6  P¢tÅK· U2ÍeíáÚ¦‘�[À Áª$eáÙØwþ&‡<ÉGY·ÊœcI ¦�Ž¢Ðï+lÜ”_µí´íbÿÛ9š½è á�Õ<+ÙÝt€\.�([¾o„€6þeVq%!çÄÔ’À ÅSž3ÕTÔu}MI.“#êUMTUV…üH�4|c—˜šk*N/Baý;žÄâ­ˆðßTB7Gr–å;ì†óJE%ÿu�VV×hjjVâ×ÖÖ$ÿáÇ·42<@�{{(PåÊÔ½¢Æc>,”`Q.7é+¡ù¨óD¨RVw6¾[wËG�¼P‹­œ— *ªªEVz¤Œž¸EUí1�ÈÞ$9£lßÙù™zõWv DÛ_ÊæSvVXú@˜Rª¦Ä¼Ý·ÁØDÆ3á\ÝÕ‹ÄŽEÖ¼b)ƒ�Ýk�ƒðEjš®;YMãSÐS$þr)¯–þe`+Olá`y#L?þ&†¾ j/ê»JFh£ÝáµÐÞ7ý7£jÍñT‚7ûÖTõ¦ZY]§éé Uâþ ìmøðþ-�Ž RoßC’¯aö(9æ¸|.v•ók«ƒÖ8Õ÷líëm)ƒÙŽ!Þ÷çZâL@*�€m ©> v4�Õ+*N9ØV”Yô4}¢…ƒ�Ó„5ñ¢¬éíåôV˜…`å’°Ã�Ô:ªZ`UvŸ3šÄœ$R7÷ÿRÞáà0ÃUü›cvZ!J¶1’”l8 #,ÿá Ký*f�' w‡6I=ήƒª_„íÒàm¸¬òNèp']}€½'¶tyu#¡J3ÓìqX¥õ�u Uúðþ �ŽR_ï#IÒædl™î„-²E{X8È0ªë¢UYɺQtÔ ¹gŒÁfu�6î¿„ñV÷ÿ‡„Cq¸ã¨  �áàX 4Ó_Ù0ÚžÒñq#ˆÚ¦ÒžkØRd„„uâ\u"F4H>«Þ¶MŸŠj 8¯°3ÙÅ)b·‹�<±¢Áü=fö¨Ø"u;è´—2wF'¨‰L²$OvN†T ðHŀ˫ké*ÍmÙE8¬+áðþ ‡aêë{$åÆ8AÈ(fé„­Ý{ªÉ›íqPÇÑî>Ky+‘5<=.§ï¡x PòòôÂNÊ‘„C9^5Œ@4§p0Q © wÝ!:I.�²ã•ÀD“¨_%Û§ÿ–P®»mlˆ’ÃÞƒpP0‹ÈÙLíÎqHtÆã`ÄB2!+bE‡Sl¤“œ¶ZŸGâlhËbÏsçXM΄‡‚"üâqà&)F8¼}óŠÞ‰pxF½}�(x P8(1~.‰ôè¸@s“Øöl@8d3í±mQ @8? ù'`/fÚû6‘"º)¯ü!ÞæŠ³Vö™ò7P6®óPÓ ‡ØãÁãÖ•í\(3áàœŽ¶hpê̸ÕtGl›Q²ZjYÊ93h±î®ÄßJ®¹Õ�ÃÉÒªÑÜ ~§“.ÙzF]�ÔÕÝI´SKs£$F‡#!í1pKµ‰Û³=êƒpÈì b«"�b%©p£t> wì@*“€)ªê<{-’.º: Q6¾ŠÜHüQ‰Ó’”m«“Œè_ëXŽÊ»Jª”ðòGUT’¹ küÊÖÜÍÐÊ�0.0elÇ—cuî?Ñd5²#6¶/vâÅzE¢ÓrdDRû˜Ë¼ªp&ö(p•Î_�c’6¡ÆhBž$TI~ë–ËP8èêKÊ5eŸ_tâPåÝD8ã "OG]lœ*€@! Ø™�±¶Yô_T~‚ ÛŽ‘ IRâ¶rˆö88m2íqà>ÎÜNk×éy�ÇA—ï/$¤Üw^…ƒ9¿äeE �BmÚ£1f°yÄ!\RXý試ÿ5a>f/‰B™¢Ï7Q_\D]|ý1ÇTV}T>ž*ÙÊ€ÛS1#9 êLb€kÁ¥®õ6ŽŠPü%S©@+ »Š>NÔ-¨«V%¼ºŽÄ¤"\}òKÂ!¿<±7�{G ù*òSM cÅØ¡JÊ RŸ¨¸ëú¯Ö?ÉrUŽ©ÉCÛGöšIø¹±�îÝåK{Bi�šÇ R‹chÇ0VMƇ¨éè NU¬a;ÑŒ�V¹F<$2ëÍ(£s ìÛÂxÔ´f7›êë Â�Ýò‡·Â”3 PtÏç­f“‰f',±O\úC$s!&y¼üØÜ-‡»å�£�”�[ ‡dF�^M`iY›³¢ª±‡”‘›Ä^3Íâ,ûÆYî5Cìé4F†»)§ÍÊ^8¤2ÀÕ…H2älêæÜ.:ŠÙžäh—ÉUN6Yõw³ñÌXÁMq��MÃ9§k/zϱÊ<-—8Õ�¬ƒ%uRêólÎ3¬ØŠF¡hèq`�r �½%�ñ7Rl\’á�Ö�n³[€‹>Æ Ù0Neâf8³9\VÛ¦@Yíǹq|Ì_λÂA @8TÂUÆ9‚äH ôʳ—²]—#ä"-/ÂáâââΕ�¼óƒù¢áð E"áP$ð8,€@9(=áPÔÊkŒe+³#ú¿¼¨c´ åI (%`‹‡ Åg‹ÇG�r$áPŽW-»1C8dÇ [ƒ€@…�úËQ¥—+äÄqš 9€pÈ\} ¡Œ.†  wJ¡YwŠ�r'áPîW0ýø!Ò3  P™ *óºã¬A G9‚+£¯A8”ÑÅÂPA@àN @8Ü)n òE ³Ffù:šc?Éz:àPØeq@8‡;Ž  ¥O¡ô¯F `åÓ¢P  Eû�r'áPîWã¯Pzáïà´!î2 eI¡,/ ˜…"áP(²Ø/€”;�"‡¢Åf˵BçŠrŸ²¿"မP(…"‹ý‚€@¹�†w¦Õæ]�Œ‹¨X –E8ß»¦{WWDZ (1|ÇK‡»?2æó_ç"î^à ¶3‡¸çŠñd½{ƒG]Ä"œ«žŽûz©•ÿ»?»¢yÄK‰Ï}&p¯„Ã}¾På|nxˆ”óÕÃØA N žŽ‚Ÿ  ǃeÜÝåµ€p¸KÚE9„CQ°WÞA!*ïšãŒA²!€§d6´ÊgÛ"¸$Ç¡xÌäⱿ‹#C8Üe®KÌ(se-Êœý½¾sÕ+÷þrãA@@î9‡{~�‹yzŤ�cƒ€€€@~ @8ä—'öæ á€é   ÷‡„Ãý¹–%w&%wI0 È™„CÎèðÅt ÒÂßA@@@ |@8”ðµr%èž‘zßåñ�p(�ë„Q‚€€@æÌÛ=yÑ׸Æwht˜9Þß¡D/� ü/ÿÁ‡KtÄñÂp(›K…�‚€€@"D²€™¼±–bÃ8?Mc84ˆË€qioáP‚×'‘§Á ‡¼`€€T#ødã=q‚ÁÉ¢á^̇¼ŒNC /ã!Áã�1*l  e@@ ‡dAÓn—›\n·DI”ÓBg€/™!B8”Ì¥°Â7[*¯C 9á� ÊåJaœ   � �ÔÂ�½*B)yþC&GÁ6¥KÂ!nr7ù˜sÂF©kÁêÝ­sJw*Å�,Wá`7Ž¥A:Ý£ŒJã:a  P9´7!BŽ„-ï§>¸Ý,Üäv»eÔùÃûê~Ì� ñ&X„§tÊâÑÓÜ•Ô9—j2$»U™„. tÐåå%]__SMu5ÕÔÖR}]y«¼:))vŸéÌKÇø_•óWÿßú¨Âò—øOÔ/�Wô·Ôövê¿RUa0‡´/J~4νeÊ,Ódº¿Ì©÷hÿ5z„™Ž7óq`K�»&�ÄfI1Œø·Bþߦ`K(¢`0$vŠÿÚOÁ@Pþzª¯¯'¯×K^�‡\,$Èe Œì)¦2Ò²=¿|½§ÓÛ?ÙŸgù|£èÂ!ÛËžZÉñ#–±Š½# ‡Õ¿FG¤€r³9ÿUæ.W3Ên´‰„F¬Qû¶·‹V½:Ï„vÔ¯£‹½—„I´ÑoíÏÚ6“'Yd¢b²cªq&ºÝ� ¥$§ Jz†1è²¹æéJ™®¾$–•j¶$‘“SòÔÜî | @@à®(›…m•°Ø,ae¯8×ÖdÑÏ¥ s^á×Q ê aÿ˜w‰ZŒ™&xýËQ¢ßUfÙOUJboB0¦›ë:>9¡ßÒÅÅ]]]QOO7uuu‰€¨«­‘|>0GS$Êyˆ_ ^çÛ.úíÍ1çhC‰·~’¿I3¹’Éßè‰Þ°éßÿ™³¶¹çÂA_Hq—¹eâòÍ)ÑÍu€B¡ˆLlSsØãuËʾ×ë!�×#7ˆÇí¢H8H ËÍ™`‰>±¡kâ)ÚŽ›G•Z5Â!&ÚÙûF[[Û´°ð•vww¨¿¿�žÒÄøuuwQ$Šæ�ÀQ=Ö"ÆÄ4"IoÃ7bìô·\‹<˜¨ñÛ7ªVÖíª…˜ÉË0U]A‰³è�¹ÁbÌh=îè‰á�XÙu硬<kjk•|n�(µ40M¶•óR?8þ•ÕjÒO´çG��»<2#a-pu"šœ›9¿˜‡tFÏ4½ãdãIÐW¤r#€”]ÆÔå–|±Unn(J³ünp‘Ç㦪ª*ª®®›Åëö(óDÞ üÂ[‹€ò^¶Ê¨*[ÄzZ/]eÈ_¢^¦úÿp«wÛ"n‚´¶ºNssótpp@?ü —¯^Ðó‰qzØÓ-‹žüž’ÅZë mïØ2@£’­Õ»Þze9 ý×ïð0Q„í!õæ·_OÆæ0jö;ßñ2Ô6Y¢¹eÇm�(Ï#£—lùLÃ#-9á�Íúnú+`Or6º”[톎�OéøäTþõ_Ý�‡ÝiR €äFdáPUÍ7cÕ××Q}=‡ ÕP]M5UUyÉô•jn=5£†½6Ì7±1üìuqµbà¦H8B¡0ÑÚÚ--¯Ò§ÏŸi}}�ž� ‹høðþõ>~D‘HÈ¡´õDÕöžœŸ„ã&�ƒS8ˆê’°(þá©P0HÕ5ÕTÃç®ÏSíK=J,‘!÷£vK8*³™2lìQ72 SY!‘�íø�¾«£9:½"ÑrB�Ž¥îJ”)/“yY�Ç3Ñ#ZBEïùö¢Á­sŠ˜‡sìƒL?̓V¯¦™Cì&V/uí$Æã¡ÚÚZ¹†êa­z~¤x6FßBÖµŽ¿³ìc§¿ë°€€@ö¬u}Éð�O".èçÏ#±YxÑ3 ©H —ÕUUTSSCµú§¡¾žê먶–_El볈�hõEmk+ÚC­õ+±%”(q9µ".Ý?JvÆ7…D8„hvvžþúïß´½½Mûûßèþçúðá=}ÒO]]�óx� pÑïSõ–6§� ßÛf¸~W»èæ& áQ¡P€Â¡ ÕÖV˹3 ί0ÕœœïËhá Oߤ$ bÑÂ!z\2b‡mä´G²¿êå÷�’… J+…Ì“íÌwNK‹+´´´J«k"<ž*=é,»LŒ¯ÚÚq»=|ÔMOûûèñ£jl¨—¼•ÀÌŠWU@R‹ø|s*ƒZiyçÙ•’ÌŠ±ØÞzlì #´¾±E+«ë"ÖÖÖhtd˜ÆÇÇèýû·Ôûø¡(lÛE—‰pp¡¶á©Bµ\Âãôì”NŽOéââœÚÚZ©­­…ÚÛZ©¾®–Âò�âð(;Bޝ�Re™�¦ÍmNeW†²Ö0ì–Ãð�±^­•ó•3°îÛ¨eë«Ñþ#ô5�käà ÃQcV¿5’˜ëõWç(‰ D7üÒvW9ÞÖ3ÓT£0£R>!sò,ôøûüB¹ö_ө�ŽèÇÏŸT]SC ��ÔÑñ€ÚÛÛµhÐõ¹§}¥®ÎÔñ �<~g(µóclùØ ŽæmÍ ó‰°ð`+@„ƒ‡ˆ<–Çanv�þûß¿ig{[¼¿þú�>¼KOžôRgg§µx§-$Ëvˆ ްl&m£Èà€‹s$ø‡èèè˜ö÷÷éÚEÁÀ uwwQWW‡„EUU{-�¤ý)öûÝ:û½-¢¯jbá`Æ¥VkÍ¢ªú¦Ó.(Ô )�ý–Œpȯhp^D¾Á”GáêÊO''§455K3³ó´¸¸B§§gÔÔÔLuuu¢ÎyE? H"ÿ477Q[k‹„ =é{èA{›¨\¯G…?Ùá!ZLèð£ÔÂA­6G ‡P„Ö×·hyeƒ>QÂaddH<ïß¿�E‚ŽøE}hxÆã­î³ ‹â›0Ì?D‡ßiooŸvwwéçÏŸÔ××Ký}½ÔÛÛC­-Íâ…`&6RnvMÆEÈçÀ+Æ·oød¦¶­âo´X]/£� ê±–øF5žuýí9¥ pçƒÈ¯½]t̤ùŽ1â£ç”}¾Î¿ÇÞÔNéc©ƒè±ko‚zîØ^µ»™õYèÕ¹3+Qü�ÞÚÞ¦õõ jlj¤ÎÎ.zúô õõ÷:„ƒs¥'Íã ¡4žÊ€@E0>qŽ‚ðx½´±±CËËlLÒüÂW±Mئ®«¯“ˆ“;Àh�ËM^oõtu‰­ðäIõ÷=¦ÖÖfjjjÐÕŽLº§òÄ«54{ͼ[ãC•xñм£8’ÀKÁ`˜n¶Çag{‡è×_X8¼‘ãwvuˆPPÇ2áÏñÅWÌ›ÒòD…³[„m-¢@("¡Ü‹_éüÜG××~}6LCÃÔÜÔ(Ñ!ápPpíÐ^½¬è|×Zé1¡çŽYgÂ×£'¢ã} á ÐäØÔÏuqq‘³ÝoÖäëya¯èºÜr»Aφ©»«ƒx’òм ÛÑa1b&ð8X«ÜV(¹2¹a ßü³º¶EKKk"Ö7ÖéÙ³A¯„ìætxX„Hù3ïnç9ðÍ®WÜÍÂå¢PØE¡i¡²J‹‹K´·»KÏ_<§çc4òl€º:Û)ÈÂA¼Ú“"ÊÁ„Áh#^».£W¢‚ c´xLü¤²šãþ×pµ½ F”8…C¢}éIë|U̧2ĵ·A?Dœ¦½-Ôqì$3§Ño²,–Ì'^,Åú2âÅNl’³3Ɉ‘�%Ô|òˆ›˜çòÑñ ­¯oÒüÂMMÏЃèéÀSzñâ9���ª‡´>gåz6$š´¾ó€Ä·2B•òõ\Â~@@ ŠÃOhÎWà°èµµmúº´I“_&éëâ’ Ÿn¬§îînjnn”÷ÔµßOg>�ŸÐÑÏ1业ѳgC4:òLþåÕÿª*y½l(ûA-0šÅªXñ`6ͪº~ÇÉ*)¿û¼ E$ÇÁò8ììÐáÁýÏÿ| ØãÐ'ž€P(¨B¬%ïÂäá™wWÙ,uá1Ö[^’±Õñü×Aš[øJýõ7�Óåå}üðŽÞ½}M´RKs£:^8dõ²ò+¬H;ì:ZD/dÚ«êÎ÷»ãýápÿ…{.µp˜šš¡¹ùEÚØÜC{llœžô?¦ž®ÈB�oDáùömŸööÉïç\/�<¦Ñ‘!¦ÎÎvò²в]uRŽšqúÉ`Ô®}£rµe¾éj–pXݤÅå5ú‡õuaá01*¡¯Wå8ˆpЊ\…¯èeyãQ0ùÚ•i b»< ¢`ˆhye�¾.,ÑÂׯ´»³KoÞ¼¢W/Ùødqô@ ÛÅ©ÒTe'; š]—&·ÂÝ΄¸)Û;nPGL¥Ó¸69\N¶ÆW§§s(ôñMóÜѱ‹êüY4ðƒ‹Å•ÂÇ쌛ÖôÎ0F¶z´˜P4ǪLDÅwFUxÐ>]eD› éÒ?&¿Åáépºˆõ#\q$Å×E&žÿ›Çíï?¸ü8’�¶™ÙYúüù‹Ä’ Ñë7¯èÅó ½ºÃO?°õlt>ãü=ñYìÑo7$GÃÞ�ˆœg¸º¶C_7éË—/´¸¸Lmí-ÔÕÍÏúA1Ê9®Ÿ÷¸|ûÑÏc:8øNß¿Óááw‰èìh§W¯_񯯵··H¥#{áQ�†e¬k¯¶¼]õ+ßúÆ[ Ù’»è•…GNÜž��£?ÿü›vY8°Çá×�Êãð´�º:;(Ìï Ésëœ co#Ü.øa¨¢ÞS:ß#ŒÐÕu�ffféßÿþCvýW—ôë/E¨tu´SKK#…9÷Á²‘õK½À©ß½¦4,G‹˜žæ‚ÚV›s-QôA¢¼ŒøŠM”¢ïÖU÷Òã T´‹ä¦Kÿµx&'§i~~‘¶wö¨¶¶Ž>~øHãcÃ4ðä¡ä5„EIèú&@+k«´¼¼*Š��=êéé¤áÁQÕƒýÔÐP'âò•Ñ IDATÉÒª г€eæÊ cÃ4âÊL$UD<èP%NNbáÀžV×6m�  U‘£¯�=jµ_ý¨΄ )ÕžðÒÂ7¾„‰×A¹åÄ$å›>H’ˆ½0¿¨<{ßèí›×ôê ‡ê�CÈDz¦«–"RΖãù8qš±ñ#ÐÍÉJ&ÿ#Ì+ *¼ÉÔu–±é„-«º”Žã—s‘Å ½V®sºä;!uþ|~Ê[£\¡Q«üps{d»�„“©°3&SŠ—÷!²BWÜR·¹%©›«p…äZñq”°áëÆß±«cñ¥ý(¢JÅ‚šüa/y/¦âÿ«þÛœ³¸›­Õ%¶·€ÅŽ97·»JØ<Žï?~ÒÊÊ:MÏÌÒ—/“"†‡‡Eø½x9®±2~^íÑȤv$Jê&wÛýI…€€À½&�Èã°K‹K›ôÏ?Ÿiii‰úúÓàÐSzõò…„¤ÖÔT‹xàwÄÙ©��h~~�¦&§èôä„üþ+úðñ�¼žöSg×e è( “ â�y?ʆ�÷c8"ùò¶¼ò'·Ç«aš�™£?þüKª@²Ç�s8'óI¯ˆ~Ÿ©ðfS4E^”ú�«ÖÖTȶíýÐ¦Š²xÑÌí¡-¦§géÿýû?tvz*¡J¿|ü@ïß½¡®Î65ÂÂAÞÛÚ³öÏvв9›—$T{”-f‹(•¢l)û':ŠÀYuÄq¯'¨ur%# “Xb„¯ÒºèòÒ/ÂáËä -,(áPWß Šubü =},¹ ,¸b—ã€Ý½o495+‚Ý`ííÍôˇ·âuxô¨‡j9‰X÷„àyÆ L——ôãûúqt$õ�ýþkIÚájM­­­’ÀÚÙÑAMM�’Ô sÕ§0­­qŽÃ}ÖU•FFib|”ÞxK½½�¬ÕhžÔ,4øÆå¾ÇÇgtttDÇÇ'*G#–Æqœ0ÕÞÞFíÚ¨­½UŒ`ÿõ ýøÉ F?h}ƒcä·èàà�ÎNϨ¯ï±$a÷ô< ö¶&©ÖÀ+œ€ÔÐÐ îSÞw0’cÓñÑ)�žœ‰0âqUW{©±±Au9„Ï—¿§¼$öÃÃΗPUT^‚~€‘K*`�óJÊÑ1ýøñ�...éêêR8² i•Dî6 3knn–’t\iH�鄎NN¤ÊPsK³$‰=�óW'9Žt WÈ`ýÔÒÚ* ÍÌòììŒ~üø!ž.~˜ñË€c59¹�WŒššEànÂt~qEGG'´½»'¡v››[’çÐÔÔ$½>zûÑãÇ©¶¦ŠêêÔy´pO-UyÙ3¤=BæA©fMÆQÓ®2ž€8K(  „Ãú.-.²pø$¡ÿI/ Ðë×/Å0¯­«‘²ñüXç÷%çqrá—¹Ù¯’#¹»»M##Ã4:úŒ&&F©¿¿WÞ“\vžß·ê]&ß™OÂ_ù�Î?�›ë]Ä^ŠŽN.ºÑFMÍ-òNåè É9„if†=Fy8'ó‰TUê°—#aUÙòæFª¾ÿ!9§üþcû‰?\Å’m"^{ÐÞ.v› §gçôãÇ };ü)žöù…Eñ6ðûr` Ÿžö÷Rcc55ÖQ[+÷¾j¡¶övâ SRLäú†|¾ e³“Ïw&9¼èËaal?°�Â6YKK“ZÜAá[kÙ,ÌÚ6‹ý[x²¹�nŸãP�³g{8Ç��®É©Zøº$ÆW]]=ýúË/ô|ü <¦ºš*“§2ø9¦îüüоLÍÐìÜmmnR8 ×¯'èå‹qš˜£––&µ€ÃHØU8;7/åððPn6Zéqï#z6 ÆÆ&:Û;Ûôua^„ ç×°éìx žŸÏÇ%a�E’ïì’¾íÒ×ÅeZYY£µõ-:=9%ÿõµˆ®(Q#¥ùª©­­‰ºº;èå‹ 9�Úd<gªC¨¬Çœ3\¬ ÷b6�l  •HÀd¢)cVr,áð�ý�å�ôêÕ É!àg: ^Ìw{TnÄöö>-/oÊâãÌÌ”ü˜ÄÆ<ۼŠ‚òþ» Ê»mk‹“°WÄ~`ÁÁ¡O¼šÏöJgçzñò9�ŽŽP¿,ÖñqØãÀ¶€;;ÛÊãð?*tèI?{8º¬ÞWü¾áwáɱOì…¹¹y§noïP p#ï¦ÎÎYŒ}õꥈ�G»ET¬oìÐÒò-,®ÐÞþ�,|r)V¶˜A]-—��PC}�¥gÏÔWuâwâñÉmoïÉâï×ÅE:ØW¶¿î¸œ-‹œ¡Áé?ÁçØÜÒ¤’Ï­~VvIw53TÉDU¥¬nÚ[ ‡ØX﬎žtãDÂÁ/ªZB•¾Òöî7ª×‡ç#ÊãÀÂ�Wìejpü`˜®üúº¸Bó K477G>ß)�ްÁ:..9)Ž�Ïw.]WWÖhii…~É µ„ I¯Óõ9"«ÀÜÜmhpP˜x^O­­oÊä–äh®ªôl�&&Fè=÷qèë%rsÙÖ ]ùýt°ÿCJµmllÓÆÆ–¡Á@@$ìŽã›‘= -ÍMôøñ#¥d¥{muSîë×/ä‡ü@we(Lç¾ ÚÙý&!?Û[Ûâyèëï£woßÐãÞÇÔÓÝ-ûÛÝÝ‘´¹µM—WÒ;��Åc—§Û%†;{lX8p ëþ'ýâ�a>\Á‹'¾ó¹µ¶¶é‡7ÿýŠÎÏÏ%ÉíúFy¦ø�Æ®e]Ï_LP__Ÿx˜Xäðj .ÝË^ |N,¸T0{ÍZ[yÕæ�ÛÁÁêxÐ.^ «� äºÛ Ó¦v7<ùyú`/  ��ÂamGy>}’…A#Þ¼y)Þ~Öó¢‘ vËËÊü·Ÿô÷?ÿÿì}[K·õžÁÝ��"XÜÏ{þwN\!ÁÝÝ�¾g­êêi$Ì0L�lÞ›{"Ý]U«l¯­òõË÷.† QWWc3óòòyÏ...óŸ˜àaEÇý ¹wùÁá>zXßꤽ½�‚uMm�ää@1W¥^yûö�LOÃsaž1tUºy“Aܸ§!lnnSv€ nßsssü{«<Äoàf„ç‘÷zgg KK«ôŽè‘9‡U&m�î5xmƒa&¬Aª!w©Fµ!F#²´¼Le›Ic  õ«L›¨}e$2h‚DTUW²>„‘YO ‡4ð?N,k¤¸�Z¢Yï)CàB´º¶AŸðŸ¿ú)0ÂUéõ«BâÐÚ,ù¹H3fRž� C‘A9£cS4~øø�l‚pww»üïÿ�ÑÃ%e~nž úÇ�’lÎü“f0hŸa››Ÿcþahá;ÚÛiñ€e>b ,=cqxþü}ábs$ „ѯ_{dfzVæçø l¸âcjƒûËÚªÉ …´²°<ܺu‹Y¤0öžcq˜_Xb]lbdj€¶¼°0WJ‹ iž„f£³£S iUèûÕ/Ÿ?e›ËË+RÇó5RTTÌ ˆv×�ŒT•r¯ý®tw¶K÷ƒNZ3à«CBÈŒ-7$œ««2:>)¿~õ3cÐáÑ1¸>Aƒr!Åf677¤¬¼ŒÚ�—/_Juu5ÝÄ@ ÿ{ûŽŒýÅó'òòå3)..dê]ı °\~>~ü,sóóœ#’½~ýŠÖŠ¢Â"ùÙû‹AÈÐ’À¥ Œ@«*«hÎÄ�¸º²ÌTtp‡BPbEž>{ÊßÄX~þì—=?evf�¦^¸­Á¼�KHaˆßZ]Y¡•¡¾®V^½z)íí’_P [›ÛÒ�œÞ#c$XúGl>¸'áð„ÕVh_0p)´ ë�ØCP-Ñœwú¬" (×€ÀïÄÁÑãòåóZÒAî´CŒK� ‘ƒ°Ÿ%;;û²¹¹+ï?|�O?RæÀ=ôÏ?¯åÑãÒÜTOw¥ÕUXçG˜\ZUý§¡¾�5�p§À‚°¼²Dמ‚Â|zIÀ÷î} ôhÁÊïþ{KË9ˆÃË—ÏåéÓ'”5  Ô`ggO¦§çe H¾~û.«+«ڡȬ¯o0JG™�›••å%’Ü÷¸û›˜ýrv~‘É\fææèÑabFq¿KiI!•wEEù´°ßnm¥U÷)pƒ—@?•…ù”# ³ òÑÜì¬lomJUU%‰ˆHÒî›àî ØR3 êâ¦#UâͦìîÃñ/_‰é¥K÷,â3oƒ£éª´†àèïÔÚNNÏP }ýê¥tuÞ—Ûqµžmpi�In|bV†FÆäýû÷L[ ·âÿ÷¿(D¢¸Üðð°ôôôPC½´´$wÚîHkk+’àCwtfÓäÔ¤ÌÍbñ/HmM-�`~ÄB…;Ë@?Ò±Ââ€àèûòüÅ3jïC''ôу_{__?SË"P n/Æ-¨•Â(šàçá~ddD¶AJŠé¶óðác2pY£&ñÆæ&7Í­›7¤¹©–q¹¹y$ee²½½#³3³Ôæã°vpÓºs§•Â)aøL ã‘Ã} Åð¯|ñâ™”—•�Å3Û�“2ÍXœÀþC²¹µ#“S³òýG¯LMÍp¬µuµr§í®ÔÖVJuu9ý*Qñ{bbB¦g¦Y"/?�V‘ææ¬Ë16>ÁƒT°¼<{úH^¾|*uµ5Œ÷Àþ‡»ÕÌ̉ڇ�ŸézTZZF ÿë×/xPÀËEÏ�^f O÷`²½Ñäd¨ÙÞÙ§Ebdx˜éá öðÁyöüÀ¿~öIO/‚Özè~UZ‚¸‘âÖÐPK-H´@c£c4ã[8tŸ?Nw¬Æ¦ZÉÉÍeŒ\ž‡GXÃ8€àa}`î`õÈÍEiXJ9ïè-$ÖŸÎ[®Æ è>ðté}¦*Š€" \�ßcFF§<Äaøq@ŠU�]jDœ-ûG²»{(?~’OŸ>ÉÊò ­â¯ß¼’Ç�JKKï¶¡á Ô¿~þäÝVQ^Akû­›·$¿ —é[q—C6ì—õõU ó�!=z$Õ5µ’—›G7â·ÿÁâ`‰Ã yú쉴޺IW%¸CÁ«®ÞÃCÃ2>1ÉØXÑ›š¤±±Á�¿ƒ%.E“ð 8 »3d¨ú†Öž‚‹Òàаôþü){{;t+¿wÿŽÜi»MòPZRÄ;Á@6­ F³$ÛTâÒ_]Í $y€‡Èää¤lm¢®W±<~òHîÞi“¦F“0Ǻ,™ŠFrµž2&Šù¹^™öê+,^_ˆKpt¬ÄÁ;ˆø~q@ŒÃ�j¤'§@ Èj»: q`ŒƒKà7˜ÃŠ…SÓ„Çåí»÷,­ŽEŸ¿ÿýïRVZ*[Û[ÒÛÛ#Þ¿gIøì¬l–^‡ËKyE)…L†ðÛ‡›O߀|ûö�x˜ÅàCøøÑ›¢û·¯_e|l”&7+t7652Ó²�4@óŒÜΖaèìê`¥iĘ Û ÆŸ?¦p¹»³ÃMˆ>×ÖÖIAa1Y8´úðk\\ZâÁßúŽûmlá‚‹ JËÃܿġáa ÉwØ·Néè¼+m·[€Žjc}G&ƧäÓçO2;7CòÅÞ¼–úúZ©¬(““²5™\Ë–8ìíÊüÂ2-)>|b 2¼Q;V�dM@>çƒý#šê8ÔP0Þß?–­í=úÕýöƒåÞsððÑCš$›šj¤¶®ŠZ ¿h.P?~|ç¡´¸4/·nÞdEId‚@ðü¡-°¢*=¡�OL3p‚HØíÖ[´n þÁëø Æ::;éªR855ɘĬ@ÒÕ…÷;(À76çðóÄá<80Ä´¶h‡o÷ƒn¹{§Uë˜å¢·ç— †,ˆÇ@_?îbæ ¸ÁòŠéqAĵ0/<à:zðà>sxƒô` ¡ß ==?·§P ­Q…áëv– \Æâ`ƒØ£Ú…ú°" (ŠÀåˆ&»ÈÉ’Q¸* z]•@n b`­†UAÑŒûsˆ²AÂ*�LLpÁ�žža°óëׯy—@ÞØÚÚ¢•š}¸û÷œ§N,b­“ywÛ13A�‡P�@¸êÂ-®@UU�!úå¿ßÒžâŸ<},mm7H=7‡ä#cü<��ñÐê£VTy…àq¯¯­nËìì³4�ŽŒHaa­ °ºWW×2‰ î¼ÿ÷￲½½!GLJ$ðf@ÁZ80À³cpØýòíûwÆÂÒ îpÈlˆw„X 3›åàÀˆ|ûöÕàq«…±™�½�¼&'q‘&ݺ›|ÕÉkR©G¬—›ëÔ~*i,ñ†Ñ­û{‚ì=‘ÊÑtUúîGOMÓoœÄ¡ó¾ÜiÅF„ÅÑúÆg¿àª4=;Oíô¿ÿ½“ɉ)úÂݹsW^¿z%Ù994…�8ÀþsŒEý…¶¶[&Gÿ‰Éõxp$««›t¥éùñƒ~ñ�?’W¯^ÉÜ켌Ž� ²*aãØÅûòÅšýð.,`ïðóÛÛ; �û–�²))-¤7 ëFÀõgc“…äø;?7+u5µô½‡ÿaCc#…Sl,¸Æà{°� ˆÁßð„ð¾³{@È_ý ;Ÿy�ììÓðàa·”•2HSÄwª‘á!ZgæèÚƒ"v8ô°)qÐYœ1Wˆ=ÚØØfñ;�:Ìâ°Ù¡™¿wÿ¶d‘9-¯l/húW×V¤º¦šnD F°ú ²2HŠç€TAsñôécj0°‚ azf–‡ÜÓgϨ)AV¨¡ÁAš9§§feiiE:»:åþ½{ÒØTìE,Úç¤yÆxáZ—µ›·Z¨Ý€›´D$´$ôÊîÎ.$"Ä2à ‚EêøHØ`€Â:ÓÓÓĹ»»“™¼êêˆ1‚Ì`5ƒÉ¶·§‡d ®s°Z!Ž…Y,Рc®l[ÓÄÍœä�NA¿¿º*]P ˆhßÏOÒxŸŠú=E@H^N‡l‡8 ŽËg'ÆŠ· ‰bPaÇ!Zð p(,_¿yMåâ-q‡ÓízvVˆ åT5´öå¸ÛPgÁÔ&éÀ —g¤EG’”W/_Éí¶6©¯k�‡ÿ qX\Z¤%÷,dŸ²òR�•_¿†Hd¶¶·I6à–�»º¬´�‘ì•ëýÚê¦|ýöM&&Æ%''È4ô��êêXAwÞ¿ÿï_ÙÚÞ`"–7o^ÉË/¤†uJé.„bxß¾ýâ� ï ÄþA–ºyë&“Ò" qÀ]¹°¸Âû2ˆä<ÿèáÊzp £ÕÁ›ÆœN-6#d´·Xò®ÂËô,.ÄaooïÄ[xì2 _÷3g‰â c-XLÖâÀt¬ °8äçJè1W'¸Æ ˆnHrÖŒ „ˆ¬ðûG 4äÜGž~d²��; Ÿ! frHö™ ìÙ/Mÿ«×¯“€ì°\`£W¥yõê Û\Z^§k ²@x„¥¢¢Rêêð”-¹9è6Å�^}66Öé¦ttp 7š›i%€F.N ؤð•qxòä‘q‹q,ШomïÊâòšôþD©÷Ï,>¶½³ËŒKè\v`Údá©a‘ý½HÃO?tt ·oß$)AÌÜ}`q`p“StZ{�:d®‚Ùîd^†véIqرþ ½æ�´³;ÛÛ²¼²Ì`kºët">á3TÁ7cÃYVZFœAôtw3ðÿôñÓ°âpljj¦9]ÈÖÔ××G7/ø\ÎÏ/IM5â#*€•——}ÊŸÁÚȪ…Cy©‘- ó†_È./üêùÞ˶@‚8<éfÎiü˜Jœ'ô·´Ö¬5< 2w«Æ†zš‹ qp‰ܯ:ÚïW¥î › ߦø[¤Ê7LÂ6㘳 iq@šÖó À¹¾œ×@b9n•8\÷é©ßW�Ä#p>q€Å�Äapˆ®=§\•‹ë €8deÓ�iä!¨Ã] ~þH~òæŸ7TfÒáÇ�Tìmom™Ôíu5¬Ñ÷iS°Í¸îÀÝrÄÑñ‘466ÊëW¯i݇,ìoÿ{+ÓT"«ÒKyþü)-ønßÀ¸ôö2a ”uˆµCm% 乨wq‘Åùhnn–AÝeeEt ~ýú ƒ¨Qõׯ_òï¿ÿ1»åÑѾüóÏ*AzPƒX Ó§OßiåG gè$D9‚É_JŠ�‚®&K#e‰½=Ö²˜ŸŸ%A@Ì)‚ÀqŸ"5:â2ÏTn­ ±Üb‰_]ñl13ˆCÀ¤'=]ÇÁl"€ëêrˆC^.­FFB¦Ÿ€…Ât¡1ÁÑc?¿{÷îÓ„�À ˆ[ÈÎÎeV˜äL&S½×,<ô'Ì(pxpÀ… ¤îînúñ‘8L˜‚/#à 0—uÈË—�©Q_\\£ùí¿·oe~n‘EíÐNYY9}Mm§²4\–`¶tê+äædIKs3Ûji�V½‘®Jèó)âðÈqUª3®Jp�š_Xapïû÷Ÿ˜I …ÈŠKŠx0deÁ `„O£à6¦Ó£ÃŽ9/'‹�R¨I€C}ô ®J8ì€1jR¬¬¬“œ ˆ ¹¡‘r>”t‚›’ƒžÃúÍû°ZÀG1/?—ÄáþýûòìÙ3º�œ!q)¨Œ™Ÿ—/oÞ¼‘‡÷ïÔ5Í,ˆ�€V†dï$Ì /ÌÃÔÔSÂ"p~’Ђ â¤ 0“‘Æ—EðÂôá¼wï565Ñ‚€i¯ÅÄá ˆêxðˆ'æÓ)€IvjrZ:�‘ê q˜Ÿ_4‡ÞŸ´ª ˆ‹‡ÇÆâ@ö†t§&,Gø}9 IDAT1Õ4�_îyçT÷–ëtN™ËW96cyW‰C<¯ý–" $çTŽ'b¡3$#�e¹Åº*!Õ;– ª gÉîÞ!vÐâðù­ÿP6ýóÏÿ˜Nñ—�3à:â…îK$paáR|�—­©U�< ¯â~ƒË5܇Ÿ=5^ Èä8Ð? oß½•ix5ÌÏQq÷Â!�ƒzŽHÏÏAÞ}�pÿ h.² "®¤HjvÄ †³ˆvQPõvëMÞéÕ5uÌÜÿ9Äá„è5«GW×T’8à]\X‘¾ÒâÅ dX�DÖo4î(t‘­qww›Êܶ۷äÞý»ÒÕÙÎÄ#ÀÇcp°7âäM+Ÿëèú{q¹ào½$½Åáâ0ådUBÞán›U •£�á/ÈPFò…˜þ.Bȧ z¸Ðt´wÈãÇ�åðèˆÅÆ ì"¨þs°€U³ò!üá6â™dó4†¤¤«¥õöm2x�¤tÅA�ŒG÷âðüÅ#2ô…””7ä`Fñ´… œ� {Çw­fç ìì`�¢¡®ŽÚp¸=UTV1C„ë±ÑqGÃ*ðÄ¡ý¶Ô×Usnl‚8,ˇ8¬­¡èØ¡IIZ])ÙÙh×#՛ДácSÛ¡ ?—‚-6#þ‹€'ô]–œ�8,“8@3ßO¡÷!debºR2¯0IGø$ÄÔhV£M ³ݺ)í÷Ûy@€TA°6îUüóË—¯Hœàê´²º,ïß½c!Äs@ÃðòÕKÖ~iAƒËfY?°`q€µäÁ-GO×0ô+ÄCsÐÔÔ$-7oÒªSUYmâ(~õÑ5 ®J(4C‹]•J9_жà×àЈK�=ËuUzØ)�õu\;&8z€dõû�ï øîìhç…’a²@Ø´·^‹ƒŒ~¿Üå\çÕ»Èâ�LJþv¼ê¿+Š@f ð'âðE‡å,wlåh'Æ�q˜'Œufg1 ymmÛ¤cýô‰éÛQäìÿþïÿäþýv>‹ìˆïÞ½g6@d„D¡7ÈP �<µ©!¸×�CGü=â`‘o¿ßA â9û€àhXXα8ܾÝ"EÅEÒósDz{¡û)këLSître|ƒãRË|óŒ•Dma="ÜmííRZV.¡P€d®QÛ[pU:`VÌç/ž3ë"¾ W-(:?~øB’â€û AŒ‰jÌ�æƒuT’HUŽ:…ùÒÜÔ@c(?7‡ Pw•òò ˆú<:2Æàh¸1�8ttÀÑX—Ö‹ÃGVg6Õ�M±´™›Ç²Ð®KŒ!GajæQ¹›¶¦Ú/asSÐ&&(^`&ˆ•Õuùù¶!Xž0‹âà@à3rQs㆑‘É©€Œ�°Š¯åð0FõuõŒ;AýÔÞ˜œ˜‘¹¹ENà nEß¾~¦I”…ÖºÚ骕“›'ÛÛ»ò£÷§|þô•BúêÊ: ü#ËËQçÂTavŠë„°hõAx*«ª¤¬´\òò€ó ³Oœµ8<~ŸÓã^†@ëP€éa1~¥›š–nÄ80ë–!xnÞqUºq°óbHƒ]Îö7˜*qÈ”3_Ç©(I‰ÀùÄapЀt\•n³Ã͇<Þ±tU B�”¥å5³Üׯ$põ…ÅáîÝ{¬×K”�HtyŠGÜçð€@A5jäé=àx/8.Ât3*-å o€ü¼ù…t¬°8€8,.0pY•ÚÚZèô«oLz"–²‡éÍQüÙ!æçQ gå÷N ‡IpÏÂÅYŸ²sò™¨®QÛÛ›r|tà•gL{�˜ È,K‹pUú&½?�«Ò¿Â rp² Fü5q¨PDÂU«¢¼”±§ SÄîiø]Ù¥Ä!&`jX²W% �U�áË¿÷®®{rû–©Äˆ Ê&F"Hÿ~dßùòõÙ+Š·A0Dùv�‡;wo3ð´É_¿|•¦Æ&Æ& øÙ|,qˆT$w\E2ƒ\”È¢€ n¸ ¡( |ëh‹"¤YE³êš ×H1—)˜ ±I೿ÊÊR)--¤æ‚µÝ„V{€’ìh›ÿŒ4« !P½°`ˆÃã‡ÒÙ�t¬Õt«‚ÙEÙz{ûåÝ»�²½ƒZ Ù8 à‡XT\q‹qjc{ Á´›”¬lãæc|(áâ7²,A&”…ïïrƒ¡™@àwG'2!´;•š�ÄÚ�ä1$&E®ÔŽ”»CC£$~¨þÝvû³4äædÓü:8ð‹¹œ»»GpŸíYY9²¹µ/½¿ú˜>.aД<}ü˜ü�f¤”…/%ŠØEJÏó`q¬ YÙ9$/rbÈ' ßе¨ç—ìíîÒºñàA‡¬()�ÀÅÄòb @ŒÅá! �@¨Eµ4U’‡G™!¨÷g/k@¹k{kk›šHÿýûŸ,,.R‰odBª«E}XÀ�Ñ >ÜqWÈ,¸cÐŒ$%°ü¤å.¿�!ž#ëÓ'rçN ½.‡¦Hà­K~sS “B~‚Ò¬¨ÊZãI`¨ø”*<‘I177Ÿ)á‘ÚõÇ�ŸŒ5ÝÙÙ”Ðñ¡S©ú©T×TÏÖ:Bq\¸W#Ž–:·Ý¹-·Zoñþg’�²Óð‡0ñ€¬‚±ð˜€laý”ŒÅáì ¤Ä!­ˆƒ±´9éXÄÁÀ¼Ep´µ8ÀU©ÓVŽfŒC˜p›f)Rá†×!‡ †OHA}}�ìlï²þ4÷ð‰»GõE›ŽÙ�ZÍÑî`÷¹£¶Âj 3È–øÙ‹ÃS›[Û22:NM*Fcƒ ú4Ò±Þli”Ʀ:cq`^gçÇ|œ>ﮃY,F·"�‚é¬ÚiÃÝ¥³ÃŒÍ¤c=’­­]í~þüMæd}}C>z@¢�ZuHÇê˜)PÛ€\çàÁÞc{ö }3½CìIV PË?:6IËÎ×/ßø�æˆÉèä¡VE7pË£§2Ecâi²aa·ÃÅjbrF¾ÿIW+h;«€@rÄ#,//HqQ¾<öHîßkcñ4dnØÝƒû ÍôÉèè8ëa@ó�Ãn\�NÚÛS?NZÓ0�1®`×êS ý®ôºÄ�®J�:Y°?8û]‹ƒS5¤C*Ù'� q€)V�,Ä7ÀÕŒY•ÚMŒƒuU جJ$4f-X·£³÷蟒\øŽ]^)q)k'E@H<—StXOy£jC5h(ÁÆÆfdp(’UéÆ�fíjäq¯B�—$hôM�´_299Á`_ÄýÁE©«»‹ @P� ÷ \•Xôl ÷Vf[DÖ&¸é!ÚZΊ…ÈTi¬¡ã°CÞ“8°Ž³*=‘¶;-´LÏ.ËÀà(•�¨K÷m¤™‡¬£ u�Û®›P2{0Èd'ø†Û4ŠÃþ÷ß;78Ú¸F=cZsÜ¥¸¯ߨ×?L·ç?~�è0kÇ}ºþ#›S.Çbdc:Œ»µ!-P´yÂå Æ£Âñç5wª#Ç$~YùÚbZÇ8˜°#Hâ_÷oß{]W%¤cÅBïb3S‰ñø(Ì ¾pQÁ€¦1 ØMHÓu÷®¼yý‚™‚`ÖC!1øÁƒ8¼ÿð‘‹)/7ŸL1•UåRR‚pð¡ƒPí”)·ÚrãäÇ¿GͤãD�cp4,/žJCccfffhý@P\¤è ­44Øííw i “v …wX!ŽÉ²¡‘‡µ5 ÝîéýÅ€\T¼Æ�DâÐyW‴®!V|„výÃó°t?ij¨�qËÈê ò5£íF½†µ"9¬e‰K0›Ä– (n·@�øÝûÌNIŒ ‡CUâŠ�Ín\�Lj'"ű:€ˆàà…ྲº!óó+òåk�|ùÖC„÷@ä U��©Vþyó‚AXp©‚Ï¡¨¬ß¿ý •¦\¤†}úô ÞQÁ¬ æ€u S¤Æ3–Ôµ@±6Z~ü4Y•:ÚåáÃNyòY•LŒ¬@¡0\•F\Kj†`þ‘*ÏK�åi`pˆ®OÈÕ@¿Ó{œ¿ȪÄt¬Æ=ŽßoÁ ‘ËÀ€–¼zO¤H�¾ßÏ©xÄ8øzúi㊀" \3§„¬?¶±8Ð Êøø´ M0-8î\ȨC„ØÊ[·nâ�â ²¼„”¢Ó,ˆŠ„'ûû»r"!º=yòDn¶´HUµq?ž�™g)Ô`@FH¸V#¥;R�ÂúÀ€e+0ón2q“øKÞ×t�zg@ñø…qIæ™Ä¡õv ]‡áê<6ר·¦í. Ñšp·n¶ÐÙ�+ÇâÀx¿cʸ\�…#�ò ¾ùíßÿÞÊÆú:LjB»øV]}�TVšÔæˆ#œœšc<(Ɖ6ßYÞUUåRJYפ”ŒûtäÞd¼¢#SX÷^×›ŸÉ˜< ¹k^CÉöù4'‹C Kvàr³¶Aa Zm,fì…;wïJË�©¯«¤€µ¿æ¾K—œ¹¹9™_\`$ A8k¿—åÈ‘¦ Â#Rž¢"4\ŒàsŽgT.F•fS/¡ŽB/4ý¢‘Bm ¤:²!«Lið/„v•“ašDV%T2Fü\‚PðÄfc}ƒBü¯Ÿ¨úÜËúð%D•ClHÿ�‡ØÒ­!³S~^ŽÔÔT±ø[Vvž…NX}.<Є#@Á@øüQœ%;+‹±…EŲ¹¹ÅzÈ„¢qˆA¿¡AhlLd€)éIwv¶(P£]Ô„hnj$†F·âü‚Eˆ…kŒ��Zã“ÓLÝ7�•ÕU¦|EúX¤SEÌê;À|¸³½É²óÈ‚…ñâß�cº´Ù!rxÈá Y[Û”žÞ~ùÞÓGŸ••ZŠ óY‰ùNÛ-yõ…ìLyyTÈô´¸¸Âç¿ï%Q°a*†e¢¼¬ŒÏã0AeNT²Ä¸`âDz܆†FödØÏ_}ÒãÔq@$¸=eV¥ÓÄó’�µ„Ì_°8=€Õåq·)žk#=0Öò§Ï_˜u AöÐä ]L±À½¸sWÀì^pQ‹°Û£ÈŠÿ&ÕíyW¯Ëâp9MÜÅGf,æÑd;€µ?Š€"�Þ˜sîï§]Dw�´ªÖâ0M‹‰°€ã¾…�>´ç55Õ¼k SÀhmu�qŠˆ3X\œgzRÄ è”|åeåRXTÄø(P‘„£¿¯Ÿ÷~�™1|7oB†@_id$B*V,#¾IQjk�º™Ì>âR€`뇺i%‡;RcS#ozÜW¸GA~&§&¥ ¿€q ¨Ñ×%dY‚7ÁÁÁ¾ìïíRvÀ]Š; ã­¨¨’`V®ì1]ûÛ·˜²‰j „Ca·ªê ¦6/*D¡ØZæ!‹A–˜™�‘�� ©­«•ÖV#K?ºˆK€íYâHòór¥¡¾–Ö’’âBÊx^åš�J�Áá³›^k<­‰ƒq Š€C Q¸*õôü¢ÏûÐðÓŠbaÂ7.+((‚T`›[›²¹µ%‡GÜ<Ønݼ!ÏX‹àƒ|‘Û—Öƒ0Rq†ezvŽ‚ÿç/ßäóç¯RPˆÂh%L›r€ç±ÉWWV˜ Œ!Q÷áò3>>Å€Þ�?R³ ‚zž<~D²R[WIW$ä)†î‚wç(�lÈX!ÌHÃö–,-,H8|$U•e$>pk*.A€r@&'Œ=.?}%Á{ ‚¾ºª‚Ó‡Zp@õöô²¨û€B2� L튫’’R’¢­ÍMY^†ÿä c/Píù³§`‹!'XÍÁj\uD––WIžz~šJËÐþ#%+¡ÍM$,(಴„ Ö+r|tÈ4lÝ:y â@‚€«ãÞþ #´ø¿ú`]ùI·,¸�á�éh¿+ÝÝíòôq7‰ ëRÌæÚØÜÜáAÕÛÓÇ¢}Háʃ³¶šýñÃp°"Æ -ë§O1ÞBÎøâP{‚9¢Yû�C íp\•†¤×)-ˆâ'�íL@H†�&ÄñÃÇOÌÓ�È’¦F–z)-.$&ˆSY„&†$‡)Z#¶Û@ë\”’øU-¿Jÿ|ØFÙÝô:¹u4Š€"�fx,ŒEDåè)£7¼p—ÀßwîAÈûûFiµ�_Û[Ìê—››Å¬}vóN„œaÝg¡¼CBȰîùü•Õ¥QcÅÙ ðªª�°^Átç»{;2;3-‡GûT:BQˆ,G•TÐ!é’µŒŽŽ²uÛ�VÊ*p ºÝÖJ×$ÔM�”¾_HÿþCV×Öäøè˜Ù‘�–~$7ÙÜX“�õUY]]æ8ð xx´´Ü’¢âZäû†˜1 ŠÕñ±qkÅ�WVZLW%Ä:@ÙXS[G%-RÎ#©Í¯¾>z+€<5Ô72ñJA>jAY\˜—uÊL Ë=¦àžGF*ãúm”�ޏ!ƒ,®z9r˜. 6½‰ƒãªŸul8‡µu¨ö"X¶˜A¯ÅEŪ�f“qõa €_ 0ÁŒo470�( »� Å©u‚Ð ¢�àe2ùþAJ[_[—Üü¢¼ïdl½ÝJ‹;¬ccpaþÅ;U¤á9�8PÔ^€Ò B<úŠ$3ˆ¸àÂ{ò jOÀBBsEm舮ĨŸ€øFÔWBêW(%�%3³¸‹Ç¤Y.õ9.T�q�ˆ�§#x(@C;ŽJ�Ó3sŒ�€ûÒöÎ65õØà¡¶²¢œë¶Û­ €†Ë ØòúúÍzxE…Ä•eTEj¨‘.ôAw7d?hÒ76·exÈøÄÏÌÎ2p®;Üág‚�ÜÔXÇàß[·Zh,(,’`v6wQQ»¿oˆÚ��ÙÙZ(òr³(„ßn»-?¢PrC¡uuS�b´¯_æH’ptä¦>lÂ{w[MÐUs#S³š 6ÊŒC Ìøt–¥•U™˜š‘a'îOÛÛ;&r…åò²Inà÷ ‹ÍÝ{w¨y().vÜrl„ IùúMˆ ˆ42À¥¥¹‘‡ã3•b0£¬Qä1(£cc2¿0O—,úb2¦%—.b8là*„ÃÚ¸§‡ÃŒ‘âá¿·»ç¸{ÒÝq�–ü˜¬J'2âdÖê ©~§÷ïߥ9&VZ‹; ÉôôÍ¿0c ÑÔ‹B6 5Õ8x;h¦†›Hp$‹„s2¸Ü8´úE.Kì�tUÂrÙƒMŸSE q8Ùá¼›e2-Ò#`l‚J½¡áaÞÕî�õÀÄñá®-bí(“òw!â/!OÀ�ßÖ+ˆè…Œb ²ª!У â�!ë%$€h#'7›wGCC-7oÒªEîà…ù%™Ÿ–ÞÞ^fq ÑÅqay‡f¿´´œÂ%ŠÍA9Š; òkkLT‚‚šPp‚¬ÕÜÜDe#² ¢V,,ÀecsG–—×Ù_x?À `eeYB¡C¶ yåÞÝ{ÒÕ ×ÞF*ø xDr›á‘QÊKëŽ,aŠæ‚@@–€œ‚XGÄ2¢¶îtÈ„®¥Á©Såd«5KC‰C:«Å6™{ð ™’ŽHÖ76ec}“ñ ´. Æ ˜‡ü \Nžñ l»~âð‰C‰tÇÁ-’­�M€+Ìc¦Jõ𬭝Ëi€ö¾ùp×�澤¤ˆ>ƒ°Yê=/W�MÀ7â °© íÇfª«­å»Ô¦;q<³±±Å`bü.JØô0uB�þ—–ñ A›øsVv6…th €Âõemu]–—–e}c�mbÃ@›�zpƒ*.)‘ü‚<¶‹²ðN‚Åf{k›äX‚´€ˆAó Ì@ZØn1|&ó$Íôf§²ØÓdBBNà7£í“.Q;»»ÌH³!4!80�eI)p,‘²ÒúóÃ*ÁTq®ù0HÁ©uá¹¾ëE�\x ‘Aÿ Y •†ï¡f„ÉpaªB‡\Œ×××™‰‚s:æS¹y9´¡/ú‚ß[�ܬ· âüðïHÃZ]‰ O9ÆÒubƽ±eækcF–.|Ïc¼<´PØ/ ßÌ]>‹À8ÌbKà^‡ø Ìu}]�TUWIiI1q1ä¿ÌGÜ'Ø+šKòª¼‡2FÓ¬Ûgµ8D›>¬(I�€¹ -1ØÚÞ‘­ÍmzJ@na¶Ç¬ùF¦Á=唽ë XºˆÊ(üŒ)t®W{ô#èÚœÿp�ÅýÌ6pÇÂk1‘peBa8“ 5—w¹)ÚfЍAûO/Š`�Þ HƒàhXÞÑfSs“Ô×ÕÑ}™®Ã… ªP0ë‘mï‚e'¾‰â­Å”YŠI†lì$\¥Ad`u�l—oÜ{p†ë7j0 ¿p9FêúšêÓÁ¸ÕÙÚÚ‘ ÈH›²¹½M¹0@�,K=p+/-e=üJb[ïÁpçî4tÌYMšŽ5–»8I-q0ÛФ€+Œ+LÒÈÇ…c"æ�´\NJMû÷¶fžq3 ¸ ó\FP�ˆBø64×p5:8<¤vMAøÃ†Æ‚¥ö�ÿg…g³ áÎttxDÿEãØPü•—+Ù(FÂ>¿th˜bõ蘚lx¼ „´c8XŒÀh|õ,ö¿¨� ÿ¿½Ý}j­Qí›D!7EZŒ0μΔ=#..è´Ü–™¾æ’´˜ú&?²[´ÍÉÖ`Ïpwì`lœ#K�9Gô �Þp£2ú q0.`м da€á ¿æ7Á×ü¦[-Ù´`ë.xgÎM·æÎ§!n€0çåé�9^X0§˜O†³/îTFÖ׆Ó4 ’‰Ê×YAÓSÿÁq×rÖºk†€1˜¹³–ó=cÁb8<0ónæþ�Ø#8}‚˜ýw¬dw'¦�  N¬GéÕ•ìµ2Äjqˆ¥Ý¨:©+Š€".{ÆÂ܈®Äσι\M�s'™ºeæ>¦ßÔ!¡ˆ25�"²Œ#ôÚt¢P(ƒ8éq·…�†ÞÜmPâ^ƒ A÷gÔr¦æ21ý´µ°OÅ•% x�A“rÝÈ\�_Ì»°ž ± ‰C^.Ýš ¯€”xïf¾cïe§¯¨Y…,…{û{„ òFA!”°&~�t…VK˜®¾»Tðk ˆd‰\SkÊ*’Á(ØÎÜ忇XDç8,,Ÿ>‘Æ1QãFï,XGü2ÿàˆO$f[{ëÐkÆÕZ;Û9B0#¾nîwœöœMn‹mQÜC¾c–37éŬ kÁ72�%7†8 /ØFH†»•޹™¬èh�ÉÑT`vRz:éPq€`¯¸Â»;ðœCFxt0b¬]eŒ€�`:2 þÈzáÛ¤uvø7÷ IDAT ‰9þ•pc€8ÜvXÔ͘QÝqR(5u"­zW¼=„"„ÁLVcoò-›tipQ ›ÖcÁ0Z•ȷ㲚¼Ïꚦî�dµ ®Û¿UÏ8·9j­Ðo^·…ߌuÂŒÉ%�cg­¸ßwFªX+´[Šd Œ³% 'ö€w0gß(´ïÐÕ™;`�Ö1Zx¸fÎðGãdˆ’ñ‘�öçì—ýÂÙKô²—ªí_¬íF;>}^P�«"pJȺÔÇΜˆŽ ûÇñð5Š,#H“/@jpL Lð0ÅÛðËþq}—ƒ8w�Ñ+™»œ.»!To6ÄÂüŠ$21ʬˆÌBo‹Ð±ãê˧‚ W~p”ªæ>¥pÅßѽù8dÔ™®œcïtK ¬¤âñSpŠ–â(ð,AB›¶]´Ã{߃!†kܪÏhP`^G¶²òðŒÜ�‘‰³jG÷o\+þ¥&7-ÊâI'Ù�®‹„>ªˆ±Ö�Âe¤§Î¦t¦™ËÜ£•ý³vÖ|/’ß è6&Âh»�‡‘Ò¿V+nŠ©yÖ˜#ìzWµÔNåb¦4u6cä]ÛŽÑ(»�=ìœý’9 L*Ns˜CÁj<œXçP1zqûŒ#°;ŸŠ¸Áx†æÁß4m ®xGãB®VÂvЦ uêXs¡UžxÆâÒ#ÄÁXLŽf¨í’‰•°soÿÍ©©á}ÐZ¦Üq’£¸u+ˆ¬%OêâÚ„#mÙ©q°öRDûx3‡‘Õa¤}ûmÖdpÆÏ×\â`@pó̵{Ô:Œs˸¤Ñ¨U‰R‚¿,QøÛIe³§¶Åß¾}ѿǫﱶ¯ï)Š@f =qðàâTæ®5V„ˆ5âôÙiî«û" དGÌ]uJŠàŸ©Xâsgäûè©—¬"͸TÙÁ#ÓØÌ+G8ïŸRä�Ç�ièô¹le�ÈÅ{þ¹m‰�ó +Ø»ý¼—œ¾™^·&6àœP°‚µñbp¡ð� ÓiïØ·¦£½7ãÚ3~Q§ct:’”®J‘IöÂõ;ÔΖr–¬Y€\Cg�}’<°»-þ$¶œmé/"ŽÙ‰ž_Îæww¡¹sζ´ØX­…¶=h"ñ7"ó;Dvw{wà™µzÁ¡ä>ÁÊü•‹³8œƒË)�Ùº¥‘ÚôÎ=Ÿ=õŠ÷¼6§½ço<¿wA—�9òÌ”\4o†œ™YsíÌv+¹ÃvhÌLÏ~ó,^g�†ÓÏŸZYÎ?9gìoëý2‡L¼„ïh÷V<Ú�Ç7.ƒ‘>£(™�@´çÛÅh¹*7WñQÙ ÿ´¿½=çÜsþ÷[ú·Û÷²³uÚ½ÚÛÒé/ØñŸ½�<’Ê©ìsö–´7±×]èO}Œ¼ïÈ/ç”ÔÄ!š�è³#pf©¸*É‚ÀÅ:Yz¨ýPE@P.FÀKb!ñ²8Ýgl„U‰C¬ðXG@£CL!”8¤ÐdiWE@P~C@‰ƒ.Š”@@‰CJL“vò/(qÐ%¢(Š€"�Ê(qHåÙË ¾+qÈ ÉNã¡*qHãÉÕ¡)Š€"�(qÈ€IN‡!*qH‡YÔ1(qÐ5 (Š€"�Ê(qHåÙÓ¾ÿ%…HH J¶6¥(Š€"wÜ´±¶FGÜ[øûÝXýw°ô‰èPò=fúÆõ  ÄázpÕ¯*Š€" $+¸Ç’U)½Tâõ" ÄAG²  Ä!YfBû¡(Š€" JbAMßI)”8¤Ôt¥ug•8¤õôêàE@H{”8¤ýë•8èH”8$ËLh?E@PbA@‰C,¨é;)…€‡”š®´î¬·Æelõ.Óœ" (Š@#à Œö+¾ð\9ÆawoïDNN$•.b?Oâ5y-]Sâp-°êGc@àì•JgV ÃÕWE@PÒ+»WxOäð¬<â�ŠÂ¡’‡Ä,·T\‰AF[I4J�xlíé<ņ›¾¥d*™$ÏAh÷º+%rÎãFvvwSöœÏ¤Å–ÈÅåmK‰ƒ_Èk»gHÙƒ*§Rç*']‡¬ĈÀUd9«=�±i_^»ÊxãÑá+[¶SŒ8œÜï ˆÇ$&ó7”8$óìdVßTM�ùÖ¹J�¹Òž*~#«Ç÷œBj~�á²íÇ:ÖË~ÿ2Ïeqà:ñ “ “p™‰JÕg”8¤êÌi¿�Ä" Áë‰Å[[SÒ7h8†¥¢Å!†aÆõ%q…S?v%º&Eà²hÊÜË"¥Ï)Š€E@‰Cbׂ‡Äâ�q­)qȸ)×+1# Ä!fèôEE cPâ�Ø©Wâ�X¼3®5%7å:`E f”8Ä �¾¨d,J;õJ‹wƵ¦Ä!ã¦\¬ÄŒ€‡˜¡Ó�ŒE@‰Cb§^‰Cbñθ֔8dÜ”ë€�˜Pâ3tú¢"�‘x«)MxsýË@‰ÃõcœÑ-(qÈèé×Á+Q! Ä!*¸ôaE ã°)UY-ãÑH Jƒsƶ¢Ä!c§^®D�€‡¨!Ó�ŒF@‰Câ§_‰Câ1Ϩ•8dÔtë`�+! ÄáJðéËŠ@Æ! Ä!ñS®Ä!ñ˜k‹×Œ€’•kX?¯\J® Xý¬"�¦(qHüÄ*qH<æÚbPò��µ E Îhõè8ªŸSÒ Œögr3ž8ø{b[ÍÄ€!%‰]cÚš"¼Äß;ûçx´¡ßP�ô@@‰ƒ?óxeâ°³»Ë³=•øL¤3mÌJü9P´UEà*¤Ò=r•q&ûŠu2ÌBzõÁ/9Ãë®”^ˆ&çh2—8Ì÷k¡Ÿ· ì^(ðd‡cè1¾Kv—ø«Â.°ä\þç÷JIG*Í–ö5�Hü •NèE?Å;zÌô�‹ˆA:‰+œ~·×ÁüácW‘«¬|s•o\uœ�”µ8IEŒ\ÿg Žycø@®º¸üz_‰ƒ_Èk»Š€"p�¨+Øu¢«ßÖZ ‰Y~ ýñ¡¿Äá�ÂpàBs‚5kYbÆã� ç$|ó*¦¸«¼{•!¦¢þGòv0ô]E@P’ @O‚IHÓ.Xåf²ÈTi óÅž)—0ç(øí�}EHü%FMÿ'Qûüs9E²-ᅫ&Š>;�ºD—XTñ~$UÉC¼qÐï)Š€"� (qH†YHÏ>ø)k¤'¢ñU¢ÈÁŸzî?q¸¨w'Ø>ŸTœµ8Äj’ð‹`“IØ-í’" (Š@âPâ�8¬3¯%^Î Óšk›~k5¸Jg ÄUž£é‹ÄáD$|–“ðE«ÓŸ3œ¤µ8D}4ÏžÆ(Ñ"îeÑJE ÉeǦÏ)Š@f#ðiPá.³D¼Gp”º®â�ì©ï]E¦²ïZòq–„$Bò�8`p¡ãc …ÃçO�ZNãâhIâÁНu÷�óq�qH4âÚž" $­Î�H´3«-G_%‰KfÁåËhφ¬¬,7¶!¤ƒNq°Âÿ ƒ#ý†Ãá?‰ü‰õ&R‚öeyœnÔ;ÜD =Q‹0žð¦bŸã9~ý–" ¤?ªNÿ9ök„‰’/ü_ª·ëµVà÷Á ýóç¼?_źqV ! pK ‡Â‚ß3)©®Î¨Ö¯AK^ÂUgõaE@P�ëEÀ¹”D\/Ì™òuW$Ó•²Së~yIDʇS–‡ð‰C\z”²”èŽûE0NÕâ'z¶µ=E@Pþ‚@ Dœöt¹\›ÁQ×ÑUPôý]X¬Õÿõº1ÅS–»&‹$|bˆó#1Xß�²!C‰|:U:àqˆçBKœµŸŠ€" $3Z.™g'5ûvVSÉ,5çÑö„$Âþrõ q*$gâàTNv›­…ÁÛi©PÒõªTâ5dú‚" (i‡€*…ÓnJ“n@J’nJ.Õ!ëâ% 6"ž.Kñ%~fõdó_‡@G˜ï�Ú×CðRëÁ I䆿Üĉ¡^n”ú”" (ŠÀŸÐ;S×Çu#�H9ãºÇ’Iß·ÄÁf^:ëº/òp­Ä”Læ$J †4àü°ø7ê?ÙEí×Fv-D—í¨>§(Š€" (Š€"�p@l|±—8Øßǃ<\™8xZZœ«ˆo°éWÏjH‚È0B5Ú _WQ5è2بÞÒ‡E@PE@P…€·z4•¾Ž¬oËՈéÚË ‡B´2ØÂnWa7j’õ,7º€%æçô¡ð\bF©­(Š€" (Š€"�Þx „%q¬òy\ˆƒ v†µ„�uœŠÐ±v ƒJ” œK&�Ä� ÊE-)±:´“Š€" (Š€" œ‹€MÏšÄá¬iÄZà†tÕìIJü±8œZujqÐcHPE@P�”E iˆÃYÍ4ê4„BaÆ90~�¢ñÿb íUæ`õþÆú’p<" Æ8ƒ)»É´ãŠ€" (Š€" ¤IEÜlÓv†=Ä$„!¦æþ�!Á®J^Rxö÷þƒ¡=PE@PE@¸ ÉEœ”ª¦*tX°88• qP]õe&õ¯Ï(qø+Dú€" (Š€" (ŠÀi’Ž8Àê@kƒ‡8¸Zj%ñY¿J⃣~EPE@P� BÀü÷ªÕ¤¯”UÉÅœÄÁ{Cp´©ídæQâ¿¥©1ñÃR¿¤(Š€" (Š@ pQJV;ôh¼ƒâCXøÍ±:x\•®šU)æ2ù‡¨Y•’Ž´‡Š€" (Š€" ükmÈÊÊú-Œ@‰ƒ.�ø! Ä!~Xê—E@PE@ð�³ÄvkuEá¤&/¥šTâ�RÓ¥�UE@PEà,Ö]);;›o6µ8èz‰J⇥~IPE@PŸ@`´uU²AÒÑvŵ8àÅØco5Æ!ZàSæy%)3UÚQE@PE@P.BÀ›–5.Ä!vò Ä!m—©CüŸVñumSPE@PÒ�óˆƒ7Öá2c>eq¸Ì ç=K À!³R(bjVÔvàü¨bý°¾web·"9M+q¸òèE@PE@ð�³…ࢉm°}ìîîÆE44բà ™ Ò±Djû hº¶eò�@`,ÉÄúQ™@àµ)E@PE@HkΫ mtü——¸H®Š?`‹ÀÁâà!°8è�¿\y‚Ø}/qàbN`ÛÚ”" (Š€" (éŠ@ÒÃ`qp\•Ôâ�kΆT".pq±ƒÅ6 JVbÃMßRE@P�äE@‰CòÎMRôL‰Ãå§dÁâ¥Äáò¸é“Š€" (Š€"�(qH�yò­—)Mˆš—(hlE�צE@PE a(qHÔ©Ù�‡ËÏ›kqРì˃¦O*Š€" (Š@Ê  Ä!e¦ÊŸŽ*qˆw%1€¦¯(Š€" (Š@²# Ä!ÙgÈçþ)qˆa”8Äš¾¢(Š€" (ÉŽ€‡dŸ!Ÿû§Ä!† PâhúŠ" (Š€" $;J’}†|&@‰C  é+Š€" (Š€"�ì(qHöò¹Jb˜%1€¦¯(Š€" (Š@²# Ä!ÙgÈçþ)qˆa”8Äš¾¢(Š€" (ÉŽ€‡dŸ!Ÿûç­�’Õ£ýÀO‰ƒ¨k›Š€" (Š€"pÍ(q¸f€SýógÉ‚’‡K̨‡K€¤�(Š€" (Š@ª! Ä!Õḟþ^…,\å]†Ÿ&•8ÄGýŠ" (Š€" $J’j:’·3W!Wy7yùCÏ”8¤ä´i§E@PEàÏ(qÐr-dblD@D8n%ײ¦ô£Š€" (Š€"à/JüÅ?­[ϤŒL öçD‰CZ¯kœ" (Š€"�©(qÈÔ™OÀ¸ý&^a>Ãõ2‡„6§�)Š€" (Š€"�”8$å mÃOâài¿Ú†¥CE@PE@¸.”8\²ú]ãïoýþŒ‡Wx÷K�Oä�mlE"ÛÔ¶E@PE ³Pâ�Yó�ÐÑ&qðƒ4ø¥÷רЄ.omLPE@È8”8dÜ”'nÀ™Hü" ´ìhPvâ·¶¤(Š€" d J2pÒ5äL#~TÙÖlN‰ZÍÚŽ" (Š€" (qÐ5pmd2qðÅò ‡k[ËúaE@PE@Qâ «àÚÈTâà i0¾J¾etº¶E¤VE@P�¤A@‰CÒLEúuD‰C‚çT‰C‚׿E@P�ÌB@‰CfÍwBGëÕ¼'Z o}ÿ™UÉO¢Ä‰Uâ�Ðõ­�)Š€" (™†€‡L›ñŽ×�`a ϯJ¸¸´)E@PEÀG­õq¨§š’••%Á`�ñöÇûû¿õ5°»»ü�N¿B¡�„Ãaþž‚ §cëŒþ{r!—…q…!©Åá à髊€" (Š€"p.~Ë7~MËYâ�éà£�Õ•8ø5{)Ò®_›+‘¤S¡‡Y�ÚME@PEàŠøêU…�~Åa¾óK²‚A×êË÷•8Ä‚š¾“v$qðnð´X¤(Š€" $ ~ÅqRˆO"â`-ÑL‹‡hÐÒgÓ�d!~œhëŽcÔ6E@P‹€_w¾ÄÁ�uÇ%ÉkqPâ {Bˆ¿±ë1½†ÃËŽY‰CLêKŠ€" ()Š€_w¾Ï‚ÑàèÝ=Úm"à×!âü.Q@Bƒ3™¬üè�¶©(Š€" $¿î|%J¹Îµ­kDÀ¯Cä‡ôÇOÓâ`3ŸùÕ mWPE@ð¿î|%J|XîÚäu à×!rc‰ê›Zx.*¸ôaE@P�ÔGÀ¯;_‰ƒ‡Ôß=:"à×!â'üW)¶g­~ö_ÛVE@PbA ’U)ÁQ~ nî6žàh€C!8[¿!š;]³*Ųâô�´C “‰C,çX4‡LÚ-�" (Š@J#À;?ÁiQ“0Ü÷$ Á [=:Zò Ä!fRûà;J¢›%Ñá¥O+Š€" $™F¬‚$Õ£Að Vâ�<ëR{’B(qˆn²”8D‡—>­(Š€"�<d"q IÀÿ¼ÄÁÎÊeïuµ8$Ï:Öžøˆ€‡èÀ¿ìÝWõiE@PEàúÈ8â8îI†8Ðò žú²÷º‡ë_ŸÚB àWùy?¡qM—1vⲇLŒŸ××E@P�¸#àÞ÷Ô¾gƈ‚¡iupˆƒë¢œôì—AC‰ÃePÒgÒ/qàJû L{p\v¸ö�½ i¸Ê»—í§>§(Š€"�üøy×òþË�iŒ5; 1 N\–†3öËÜɧ²0îîîÆeÞÐp8v%ÿrÕ*§ˆËFˆT¿Ú�%ŸôÙªÓ<{¢óe©(?©�+Š€" ¤ ~ÝFnN_â@Npâ(AmÖìlFƒ0¸÷ÿ%- q%þ,iPÁ w¯v™øuˆùÕn´Óî=<°Ï£% Ѷ§Ï+Š€" ¤/¸û¼–ïT¹ “yFH‚º�„Ã!bœ““#Á`VÄ-É!a~ÞýNO…«Z,q°ä! ‘Hè�" ü�T�« "ÃÙãJt•+Š€" ÄŠ€—8¨ä+Ч߳)VyO“<œ�8d“8O‡¿µxöŽ�q ¦ÖqU²ÄAÉÃߦCÿ]HáŠÕJtù*Š€" \�LËntE¸.õ:‘Œ†ÏxQ€8ƒ’ W¥(‰^?å¦/‹ƒ% ˆuPâp©ùÕ‡2�”M«Ä!ÃW®_P�«# Äáê^æ p_q�p3(]20üÚˆƒ%–8€<è�" ü%ºBE@P2%×0óŽ¥ÁZlµh¤cMJâ îJ×°ô“i‰€‡´œV”" (ŠÀ%Pâp �¢}ÄChTpн‘8à/l²ß$}Öâ .KÑθ>ŸI¤,q0&Fͪ”I‹UǪ(Š@œPâg@�»™_EÖ$’ü7Èø†¤ ¦o(ûËZÌ8"ñòÑ�ºXõ“Š@R �ªÄá¬Ïc4`ª2!´ôYE@PR�he»T½ÿüœ 7ðÙ!§2QÑÒ…ž©Õ¢ÒtоÅZì.î1@·tµ‡ €8»¤á¬Àí"ós²´mEà:HÕƒÓ$±¤cUâp+I¿©(Š€Ä*Ï¥êèÒ¶h›SÛ�]pïSo%X‚AÉ"qò÷ÖÒKÊÛ„›aÉ[$Î.0›kÖ� Ð6�d@ UM%ɰz´Š€" $J®®€Ân°(x¼{lÊU“…¤!âšD«ƒ­�mÉE”]M(qðº-yëœp”8$rmPH>ü¼$”8$ßzÐ)Š@f#àç��ÙÈ'ÿè•8$ÿi�kGÀÏKB‰ÃµO¯6 (Š@Tøy'DÕQ}8á(qH8äÚ "�|øyI(qH¾õ =R�ÌEÀÞ@ÀûûÌEDGnð’üþØÝÝÕu¢kDÈ0”8dØ„ëpE ¥ðK0ó«Ý”šœ éìYÒ Ä!C&^‡©œ‡€]Š€" $'~ ï~¶�œ³ÿ^�'�Ç¿•øÑõP‹CüÁÕ/*ÉŽ€‡dŸ!íŸ" d"gwäÓk¤:i ÕA‰Cz-J�"p”8\%}FP�Ä" Ä!±x'ºµ³�Ɖn?í)qˆŠú E ÅPâ�b¦ÝU�Œ@Àϳ9#öy�J|žm^PbCÀÏËI³*Å6gú–" ¤?~žÍé�®ÿ#TâàÿhE ü¼œ”8Ä0aúŠ" d~žÍ°ÏƒTâàóZ™Š± IDAThóŠ€"~^NJb›3}KPÒ?ÏæôG×ÿ*qð´Š€"~^NJb˜0}EP2?ÏæŒØçA*qðy´yE@ˆ ?/'%±Í™¾¥(é�€Ÿgsú£ëÿ•8ø?ÚE@ˆ?/'%1L˜¾¢(�€ŸgsFìó •8ø<Ú¼" Ć€Ÿ—“‡ØæLßR�ôGÀϳ9ýÑõ„JüŸí�" Ä€€Ÿ—“‡&L_Q�Œ@Àϳ9#öy�J|žm^PbCÀÏËI‰Cls¦o)Š@ú#àçÙœþèú?B%þÏ�ö@Pb@À^NöÕ³Žá“}Å{`âá³þëôE@PÒ?Îä¿Cyö”NÄMñ÷^�¾=’¥OïwºÜ��ÝÝݤG=ÒAoWÍ\,|xÿå¢!þiè—k.ÓÎß”yââþœD%f�þNàÌ»¿£xÙþésé‚€—ÔewÔuaìwû×5.ý®" $ æ”9_fù[Ͼ{žL`¿ü'�>Ú“î"‰à¬mø<[HÙ§ÿ$w%¯H«Äáo{ ÎÿÆV<‰,ˆ@À™þU@Ì/š<½ígÌ;'ü_ä眅zvÚ¶Ý—ì;¦�S?—–Òí»¿oú³4àbhÍH.:6@ ÎÛRÑ3qžZýœO$ïñz}€èZ¿>lõËŠ@F"ÑÄ# XY„’ÅIX œü~îDþæÔ­}V¶8Á7NœKÝ´‚7ÍqŸŸæOÉžV/”C<ÿàrûm‘ãã°ÉÁÁû‘•”ÜœÉÍÍ‘¬¬€Nˆúê@ÐK‡ ñÛ�ÁÎX¬ÌæÈ`|12¾ˆ´fúbÆjD@È~øE\øçÈ{§)›÷ïÏËü¼ülûªû4©-X$‘p8,alBgë`Áâa<# # Œ�8 Ø]`X´øù‡C$¸I��Éhé…ý–ùŸ:Å6ð!qáÏ|‹}°Ï8¹`¥àU|‡ŒKˆœ‘Ú dÚ÷´{ÞÌÛÍwæ "Žy7•ñU7A&¿ï7yHDûé¢åÉäuªcW’W.p˜öŽƒ‡(³XA÷7}£8(ÃÙØ¡΃øäC>Áš�B`šç!7‘Úù¿‹ œzÆ‘ºÑ e%+$E~{ŠÀ³ÍîíÈÎήlllJ8’¼ü\).*”Ò’bÉÍÍ"y`NN$ìÈVFì1½§kŽ�oþÞ 5Ò�“pXР+Vñ#VÞ ò÷æû¦ÿÁ`PN¦]¼´ ñ³¦OÄÞ2­³‹‡¸Y¹-ñ++Õå­¤&v:#[#Bg)Ÿ8ä!|"¡PHdï@Ž��ù+7/Oòòr%??OòrsÍsת£ p,f�E˜­«·?�8¸ ÞÙv#xIÈ¥ˆƒéŒYç8 Ì&ðþXÎì*ö}ö)Cè�§,©·g‚‡ÄŸ ÚâoœG”8èBQ�TEà\âà\ê 'b-VÃn|+› ÿèøX)¿ìïï9rA@òóò(¿äæåHvv–£¿7rODÉ‘eþ`Þ÷* =ÞÎ?žª�âÒÎB@²²³åè8$‹‹+2==+ÃÃÃrxp eÒÜÜ(­­·¤¤¸PòòrâÅ®GßïJ쎌t†§�<­ÕÀZ¬´cå°ˆ2àààPöööåðàP�¨,ÎÎÊ’¢Â|)ÈÏ—œœ,É¡p¨–P�'¤{Á©.Äû±w’š8Xk- Al0O¬ÓÙ0'6çáÁ‘ìííÉÖÖ™1Ìj‡‡GRTT(EEÅR^^*%%Å\X9ÙY’�…ïœH8tlؼÃ<¹�asµÏ#¯ÅÁ+݃»¦3|+br3–7Ã~íf=m³ôkq8�8X#ßÇLxª�Sìã´ÅÁ+¬ÙM£›Ç�í—ymÚµ—Âp]]ë™·ÞtÄŠÀu"pq°.5°ÀuØ1ò‹•ak¬ ;»{²µ¹-ë²±¾Îç U/++•²ÒÊ/……’•-ÐhíòËÆqèÈÑèCT ,ÆYã¬{²UÛ[báxYËþ9”œœlÊP££“òóg¿|øðAvww¤¡¡Nº:;äéÓÇRUYN¡�Š]XF\éçôIë:jAn³žÁ c5ð*L=Ä!‹Ë‰‡Näè($›[Û”ï çmoïHvv¶äåæHeE¹T”—HQ¡!2Ö¢Ó~¿mì¼�õð¸Îµ’NßNâ@G6Ç" ÈÑѱlmîÈü¢ÌÏÍËìì,Õî°ˆÃ'\ü¹¹¹RQY.5Õ•rãF“4Ô×IEy©äçå8Z~³p 97/Wà·3íqo:mpL‹.³w¾å–m{ˆƒ»zì»æ`ùÝâYìE@„<�Z„.qpþö,  Å!bTâ�N[8µÆ¢Ä!µæK{«(#p‘Å�7®s»ÞÖ…' 6ggO–—Weff–rÌââå—ýý !pdž§C}}�44ÔKcc£TUUHaa!ÿýèèH66Öeeu™¢IvV¶”——IYYµñÁ,¸ôXˆ¸4Y™Àxè�,·ÝHP¹e×J®¶iôíØPâ;vú¦" $Å8˜ûÝôÕ*#­GdÄ Ì/,ÉØØ„üêë'yX^^–p脚xcO€ ö1ÿ âp³å†tuwIkëM©®®¢œO‹é™i¡6\³ñ\SS­<,�_"† d¦.ѱZ¸ÖÇK"''‡®A$¿úhqØÛÛ‘ÆÆq(7ÄÁ±"Ð[ÃÄÌ¿g¬ c)qåó÷&†Õ…¦©¼=9‘ƒÃcY]]“‰‰)‘�þ!Y[Û e†Ï!æ!| “„äd¤´¸PZo·ÈÝ;mrÿþ=©««u-4¿%¬ñĬªÅ!¶ý”ÔÄÁ+ ŸH�>t‡GDz¾¾)CC£2<Œ_#´4৤¤D*++¥  €ñ [››²±¹)››ër||(7šåNÛ-yüø�Ühj�üü\šôè‹èüF7Ùñð£s™2ü½nGNp“wGºÚîÊHV÷ q66Úæ†qɆپ– ˜£ÃôÍkq^rû±’xŽlÌC$€H‰Cl›DߊJ⇥~IPüEà<â`ü÷�p]*�LÌ H(–µ�M™™™—¾¾~—éézIäÐRPQ^NÅ'ÞZ]]•õõu9<ܧ•¡³³SÚÛïK[[›äçç“€ôôÉ—/Ÿ)˜éý»tÕF|„ °>­Ót´ýŽŒbܧ"}…[7\¾‡G&èªôñ£qU2‡yöô1]„@˜¸&–@0K„AÕp/ É,GG:ÑE¼  ŸXA"”ʨIM · øF”ÂÀ¦ïW¿ÌÎÍËúú†äåHii™—Kqq±ÊÁþž¬./ÊîÎ&½H`qxúä±Ünk%yÈËËóª^ÝÅ¢‡«í›¤&&XØ,¦ðI€©Á66·dvvA¾|ù&CC#²´´Lw$0aüjhhàËËË—µµ5YY]‘Ù™iY[[•²Òbinn�çOKKK3j°ˆAlFk °˜ÄÁš»ðü¤<–W{o3(y‚Hœ¬P‘´dˆ­0™‚Øh6 Ú<’†nÂ#,q@�•×gÑònÇ>av_d5X÷%ô•Y"ÔâpµM£oÇŽ€‡Ø±Ó7E ¹ˆ(ýlECHœÌ=®22€,Eû211#ƒCÃòãÇ™Ÿ_`ºS(<[n4Kmm­ÔTWÓR€Ÿ……þZ\˜§0ÞÖvGîÞ½K­zn^¾lllÉ÷ßåßÿ]“JK‹åéÓGòðA—”–”Haaþ9ÄÁÔÿ[m¿ã`䎜œ ƒ¡‡\âðñTŒÃ³gO¤ª1: Q¦ feK  Ç Ý‰–––ds1§†ôÔVWKQq¾�éÁX(ºdA Êáñ±¬®¬Iÿ  ÊÀà�ìïï“TÕ×7È�7¤¼¢‚±G‡²·»#Ó“²¸0'û»üûGJ[Ûmi¤r8Ï£˜õˆG‹R‹Clû)©‰ƒ’qéApÌîÞ�LMÏÊÈȘ|ûúƒ¦½ââ¹yó†t?蔺ÚZ)--1l=䂃)¬}{k“Qø%%ErëÖM©¬(s³Ø4_FwÒœ¹ˆÿ<ÊäÆtè7š�=ðX+¬å“Õì�k&Œ7œ„N®U-bð‡°X·&AYž¸ xåI½°™š¬1ò´áNFcÛ8úVl(qˆ 7}KP’«’G»è¢ -¿±88 R\­BÔqòG»Äáp_†G= Ÿ>âP__K‹Æ³g�¥ª¢‚ÁÑpõ†Å$ȦÅ ‚¼{zzdbr’ž CÝ]]ÒP_OKÚ`¿¨8E§, …OdyuC&'gäëׯ211AKCUU•Ü»{GZZZ¤ùF3]°`Á€úñÑ‘¬®,Ëæúºìï38º¾¾^ªª*¥¼¬ŒVôí¬»’Z®¶—’Ÿ80“ÌW‡²±±M@°Q¸)Ávçîéì¸/v2UXŽÃÔ± ãp|bÀþœ�“%å4óÙdä៾�Ý]šÿ @Š4ìxln0×ü*È—ü“" D‹Ÿ5%‚YÌî´pȈ˜Û²s°À‘F-›9�MàÓ>MlèEEER\R$E…Eü{ô}Øsž0;HaAÓ˜™vƒôs<…,¾½µÍ60k21p£™x[ã÷E£Y•®¶‘ôíË! Äár8éSŠ€"�JD�»JØæFá}}"këÛ2=3/>|”áá!*3kkªåñãGrïÎm¹y£Y ri9°² d¤ÝÜÞ"ñ((,Äàß×Ö7ejj‘òPOïOf�DPpûý6¹sû¦æS°‡[OAA!߃œÀš ˆ  |’-ÙÙ9ŒÝÞÙaÐñI8$•Uå’›—+óóË”µ>}ú,{»Û$tU"q0zl€²Œ»‘dyeUÞ½{+ƒƒƒ²¾¶&M��òòÅ ¹uó†ÔÖÔpbCá�3ÁA fŒ=6>#ýÃòõëYYY¡¥„êÑã‡ÒÜÔÈÀçS²L8l䤽=Êl�Éð¼IÐ(d­—ˆw5)q¸ÚÞJzâ`2eskG––VäãÇ/Ò×? ›ë›ô|öì©´·ß‘–›MŒYà"±ñ tA2®A–uâ{ä€ä,r<ƒÍV?>1!£cã²¾¶!›[›$ªØpF‚ÿÜ­›-üoMM•äæÂ,q;BÔ?¾‹Èìì¼—”Ò"R\TDÁɉ Y^^’­Í-2àœÜinj’›·n2/ò�–r:¡•þ}SÓS²´´Èçnßn¥{USSûrA‹C0Èì ##£295%;Û;$60i"ÓÒ¦åäf;)Ó¼ŽJ‘Å£ÄájIß¾J.‡“>¥(©„€ñ60Ê�Í'KBÐÄ;Õ–¡•Ÿ˜•¡¡1 ásssRR\$m·oÉógOsYYQÊ,A°S¸Â8$…°ÐM Ž Á¬ÙÞÙ“ÉÉYŸ”‘‘ Æ #„fX*Ê‹¥¼¬ˆZy(ïß¿/Í7nHIq±¬olJ߯>*IKKù¤¸Dfff˜`©`¤ûA5üGÇaf5B ²*54€8´»1Eq@*�÷ƒ!úß¾{'CCC²±¾&� òêÅ z‡€,áµ¶ à¤[W0 Û;»òãGŸôôü”Ÿ?2¨ûÞ½»ÒÞ~�mV”—IAaž[7žcÖ(a‡ŒK6ä#·ÈÜn»¢”8\mo%=qƒ…)kyyM¦gçåíÛw288Ì ÝÿüóZnß¾%UU¥ŽY VwyxŠšàº™N+ÃήLMÏÈèè(]¡�áÌì‹Â9, °T477‘< ³Aee9­p�‚??¿Ä §ïß°�¹¹ù’—o, 0©mooÑç�ŸÂa©¬ª¤‹ž èc3ã{ƒƒC24<$#Ãìyïþ]i¿�Ï!ø Ÿ–Ž@€Áâ ,h…Z`q¨¬¨�§OŸÐZYYÆôjÌ®Çc´¼Ú"Ò·�Ë" Äá²HésŠ€"�:Xâ`b$�EáÄAѰôõÓí± ››Tv´ß“Ç�HmM•æç˜µN1XZ\fˆ+æ»+«Òß?"ƒ#284”®¨q€Gs²‚R�Ÿ-ùù9’“mê@6NèÄøñ¸s§M^¾x.ÍM ô}  °>…W[4ú¶"+JbENßS�dEÀKHNœ$+È/'tÃùüå+ÉÃèØ(Ц#ÐÚôÒâ" ©ÎŒhÎï7­ ÉC–PÈ^X–‰)$Š™”ñ‰)™˜˜”\ýEEÒÔhd�ü¼\’Ôt¨¨¨”€dQÞq—Õ•UÆz–——3u)ä”ââ|&��KtqI‰¬¬¬Ëèè¸|øø‘Œ [twuÈóçϤ¬¤„îÚ»{{Œ‘8ŸH(lÈ‚š¿ÿ.ãããN,G 3=™àè2'N3$……E´zìîÉÒòš¼{÷Neo[êk©ü>ˆ­@A7Ä_Pè·Y‘�ÎÆQ¢š¤3’à&˜9§¶–‡«í¤¤&˜xDÚ…etlB†FX„JÑ÷î¶‘±?ñ\êjk(ÓÄgÓ¥:õœê#NjSÖc¤ŸàþÁ+öõ ÐB†¼¿·/]]]ò„éZ¥¡¾†Ö ø É—/_èXV^Jæýæ ù¦Aq˜œœ“ÿÞ¾£Å~Žeeåòèáiï¸+­­Í,¶½±‰˜�5¦•}ÿá=MmØÄoÞ¼‘îÝÜ$«0÷½}+“:>fœÃ›^KË�&´Ã~6ˆ©B@ÑW™›�•öövnnÔ«@,†ÙlÐbØàh�h¸Ú¶Ñ·cE@‰C¬Èé{Š€"�¬x‰”�Ì€î¤e=< Ñ•èÃÇOt'žžž’¼ü}ÆöÖ6ÚÚšÑÓýOe^µR§µ'^Ü~KµPSòU:dÅÁ ¿?„µõMŒŒŽãÝû�¢ :èïÃógƒ2Ðóò²¥Ý È#$UêÓ§OX][�ÕþÏŸ?ACC-ªªÊ±±¹‡•åM¼~ýÃ##ÈÊÌByE¹¬üw´·¢´´Y™>™4ÁÐ)ƒ•kÚÛßG¤gÏž¡¯¯WþH$ŒO?cffÛÛÛr¬ÁÁA´µ6¢¡¡Z„K¡PXÄNãS˜››EÀïGzº»ÐÚÖ,%P‚ÆEÖ3à�Ú´1{ÿn pøÝÈ™ýLLîj€CŒô¤ É3HÅadöŸzÿþƒäë’Г=@ªÃ’hŽ6UwôX¶š³‘²ÄjnùÙ?ðcqiŸ¿|“•úìœ,YDèEoO—‰¬Ì 0ªqn@ç¾~ó‹ KbSOæsÒ¾Ùû€ìöp p ÓbfvEtBU: ÙÀáé“'²JÁôÜÜœ,^‚§�†•fA:?ï�v²ÌcèHIqsV–>¯WQ±bQ455£¾¡¾ŒlYÌú0„……y¸\1Y ýçå346Ö‰žÔ£õ qáªÊc¬~Y–•ú�)ߣ/à�ÚLº³ÀAÝ|ES"bŸž™Çäô,¾~ý&MßXqàðd@h>j 8€C,ª•õl§A…îNÈšèvnn߆GñþÃ'0Sðüi?^>½„Ò%ÑøBzHPÃÀIJáòÊʊЙž<@gG+Ú[±¹u€%o0:2ŠÂ¢BÔ××áÿ{‰Ö–&dziÍJmpvv.%G68¡‹WH h=ÖÖÚ$zˆÑ‘qéÜH^$õ¬Fôt·£»»M&ÚÑq_>AÑÞî®T^ˆÒ{º;Q]]�ìÌ ™¸Sâ4`�íßl0Dj3ÈìýK0Àá—Âe660¸H¤+w%&øòž>:VÀaxD³²3d�’nA´(¥}(iEôqä2vƒ6ÝûÉÉa—6À!SQûpàB(/80‘?ð‹.âÍ›·Ò­š„îîNüBýf>CM' ¼ºsôôì2F8(W%vŽf?R•˜Wìïáóׯ’—úáœ(Ýíh¥„ZÄ¥�hÆÙWJ/ð²â@ávwOŠJÊ¥šòñÓ,.. Íu�úºjüóŠ:ÍZ¡7©ŠóÕ×ZµÜ1ã Áê}eÅìj’c€Cj“ê‡ DÎUÅajFUØI±µ¹I—Ìž UÈ ºÔ§û)ÛBUæS‚%6NÙÙÛÇôôFÆ&ðåë E„ó¤¿Oz´³5´Uƒ€ÚÁ²BAzÓôÌ4Š‹ ÑÛ׃žžNôtw`ss_€'æØè(ŠŠ QW_‹^½@kK#2¼éâzÀžÇ;=�`zvcc˜˜šžbo/�×�îî©zÐn�½+¾|–ÉB Ò××�'O‹àŠ\ÂCŸä�ÄÊ5ü¾®Î6äŠ=›4­»Pý&âR›:fï߉€¿5³�‰€‰À]Ž€²Ü©˜ ª),¸ÚtÀ»÷CþƊÆô‚zþ|P*� uR°XV£Ø ¡.)í¦Jt•@š‰9»48,-màËׯBñÉÎɪRpÈÊ]„¸èùïë7r´]%3�À�šæQbkJ Yw¼â €ÃG»â À ˆV3=Çêºr¢<9�È‚(ó,Zį¯x1’M IDAT¯IÕ�F0´‚¥@:??WÕ¤dQsYYY…²ò ¤¹½ðCR9!U ¤*iàÐÜX�ÒRMU¢¥*%8ºç*W¥¸”áçoR›Mw8Ä.DÈ<¿°Œ™ÙáÚщ6£äå=þ\D=j~áµ[Ž\ªÒ �¡ñÒM‰ à[Û»˜˜šÆØøFÇ&eÒpBô÷uáqo'bшL båØEšöhƒ6#L##£‚èiMÖÿ¸ýý½ØÚÚ—‰LËXú³¼V__ƒW/_ˆÀ'ÓëQ>Í.Ú³ÅÇ03· À`l|óó Ò\åÑ£. ôw£¬¼ëlð2#: ÚÆâñã^Ñ:pBàý»!Œ �ÈùpE€(�®¸ÓØ%*S ©ëžþ“Õì2µadö6H.?¤'wœßÙ*þjÿ�½Í>&&&×GÀ ¬_,ß].É_üþ T¾~¶“n�:ÐÔT/†+ÌU¬w´¢ÝĶګé.7ÒÀ²‡·UÀ�‡ÿ½"U‰À!]�<‡w$ÊnÕ1éÊ86>‰q‡‡.)ö÷wË$Ýß?ÂüÜ>~ü‚­íé„͆(OŸ=K·@à?|Âä䤔[š›¤å< Ë}™XÞÓnšh{à�Ú2{ÿZ pøµx™­MLîKTµAåŠÝ`9†NNñéÓ7¡FÏÎÌH2ËÅF‡ö¶ÑS2Y·uˆz±“ ‹E÷QQPM_Ýéé’�°Ó²�#À¡}ŠªDàÀžO¬z„£Ø?<–þR¯ÿ}ƒ­­MDcçRqxõ깸•«~ Ò´Î�ÓÓ0ææV0:>%½(rfUqèàÀJ ¹±O…’Ø©ùÂ…ýýqyœ›�“påx28€Ú»)—ÇhnOºP”B'aloïãÍÛ7˜˜GÀ„Šò¼zù­­M¨®¬Ð9ž2À!pP®IêÇÅïNp]u8,]CÇ6À!µ9uç�ƒÕŽBæÅÅ¡ÍÍ/È eƒ®æ³©HNv–òf²O4£8I• Õ €úáÄ8‹DÄZU@ÀÄFG'Ä‚•B€C_—T8±8Q‰¢ÃçQìïJ;tƒœÜltvvàñãn ô`kë@¹*½y#‡B©8Ôáÿþy%R•Xq °aÅ�.là"T¥ÉI,--¢§»==�Ð××)Õƒ`�–±ëøú•MQ–±½µƒZ¡+õ 8¢€idx‹ xÔ­œHSª(gÙQ5™}ƒŒõXSÒ•£qHm™½)8üR¸ÌÆ&&÷&Nà ¨3ªoTš4š™ÄÈÈ8FÇÆ„-@;÷®®vyg“ÃϾ â6dÓpx ËžÕ² U”kÏà0„œœl­q px$šHjØDŽíÃC­qx­�Cô\)é I@ ìçI!ŠÁ“î‘ÖÙ9KýQ4´H%#‚ @ÀeeØ]®Uã;1”ÅÞî>Þ½’p‡ì]�gÒÇ�ÀAõq`~Bs¬Óp{»‡²0ÌÜig{CÄÔÏž ¢½½õµ5¢ùTñÑÚ ÑlÆÁƒíý¢3FUŹü1À!µIuç�''ßÎÎ>V×6d0RPÌO¥îFØÒÒ$¾Å´0UBë‹Â™�5V�ƒju¾³»'nE#£øúm……â,0Ðß+®–“ˆ£/.„»·½½+´&Kã@ñ3õ½=�èíéW¥¥¥uUI‹£/¨ªG0ÁÄä”8+-ÌÏ ï°¿ÿ±‘®ÎV©8°Ä¸µµ'€…«ü)(,DSs“¬P�†ÄràÞή¬ôö>Q'5'¦t‹ŽZô­¸8Ú‡Ô&ŽÙû÷"`€ÃïÅÍìe"`"p" é3ÖJ83·'M˜SÓ ŸÁ—/_qp°�ʪr©6<îï“ü%7'K÷[²´ ¤%©w¶å©Üšp8�Ã>³â@�Cv6ÊËK1ð¸W* y¹yÈÊÎ’üG€Ã‘_*IbÅA5¡ë”ŠûÒÒ9OZ¿’ÁA°3;¿*®JCïã à(èxŒââBäfgÊb,÷Q�­U–¾»·�wo߉…=+UU•xúô‰4Ì¥µ*�ŠR»A×££>|T�£fá󥣯§[XÔŸÐÄMp¹Du�Ž��8%Ûr‘L(E(Xaõ�¸U܃avÛ§x§�ƒÃAEðÀAµ½³'}($¦=*ù{wt´¢¥¥Qñ>ª 9Eħggˆ2�Ns‰­O—–W06:!4 Ÿ/ÕÕlÀöÏž*á››(1uL¶±êñåë7¡1Ég3”�Á~t´7‹EêÆÆ.–ÖeÂHÅ¡°uuµøŸ‡fi)OpÃAžàð(ˆ‘Ñ1|þü;»;Ò(åÙ³'èÜ‹¦¦:±dewk> —V¥:B�Ãx°¡ ˉÇG8?ãÅó§ÒѺ´¤P*0ÂdYOÜ`?„dâè8ªÒmOÁ¿ëû pø»î·¹Z�¿*ŽªEUâ{š ÿÊêfç–Eh¼º¶*9Ù´O§%+õ ’(E¦ÍÙç{<ð‹<óŸÏ‡œÜ<ø!¬®R­ìX™©>}èí~$ý²³²…úÏ…JÚ± UéÍkl’ªt 8�®MÊ«ÔHÅAê3ØŽ,23háZR\ ò É1bB‰’».H7k8iàðä jjªp‰Uò;·ìG—I ±ÉÀAøìµ55hkoEOï#¡R<0¶ý>5°‘(Âá°TD˜ë°«>ŸWh]ñþUñ‘h€Cj³òΫq‡…H¹âO�íĸJ?:6!Ý këj¥£2Q6sVV†â¾]°D ‘È9667±½µ%ݘi‡Ê®ÊœdðH¸wpzF¯á éæøâÅ3æ!/?Ñ(ÄNmwïó ‹úˆµµU©Zð8Ü–z‚ªÊ¬¯ïbQWXŽd»÷šŠ£_¢½­¹9H÷xíÒ� 6”£#‹œ¾ ¯4…é܇Šòb™øÜ–gsS$ýé3W+ŽuWjú-»¥M|A~6ž?*�¬iÁ* GÓ””[ƒË‡ÔæŠÙû"`€Ã ÑÂDÀDànFÀZ·lT¥³±[ �ü'ØØÜ=íÕ÷öv‘_�/ÚJ®¨sñ3'' ^¯W\™¸(&3!ÄüÜ vwwdѳ¨¸õõ ¢×ÜÜÜÆ×oß„åÀd¹¸¨Hr˜Þžni6›�MW%ÂDl;ÖÿýÛÛ[¢åw“ª$‡’’8pð²âÁŒ¦*}LpURÒ«¸X§©Š6Ù#bè½¢*±âÀEVZ¸ÖT+àÀð0ÉWrê6~þеµ Yu' îêì”r_aa>1!‚!R“ž?”ä?7;K€g=EJ‡ÇÌÎ.âë×ai1¿¾¾%hš£ª² uu•xò¤íí­Ò(…K¹Liq´K‡ËSqHm™½-8üZ¼ÌÖ&&÷$3†§ëÖŠ:u�G~aÐIqvf‘óˆ³Ô×Õ ©¹Qi]*F.1HµƒýÌÎNcWX µµµxÔ݃ŒŒL‹QË›·o%‰öy}¢oèêè—EÒ—2¹˜šæF p‚Ù¹y›ªdº*U” p8�:¨JáææV16>-Bg2"Š‹‹ÐÙÑ&À�©ù¹9Jw@hdëI¿?€™©i¬o¬# uºµ¥Eö炨md#®ÒET}tÄÚú¾}ÆìÜœPªrssÑÐÔ ×]S[ƒÌÌL®bQœGÂBÓÞÚd~¶(UæpMMMhh¬àO{â”%R›Sw8X—¥¨hLñ݈Æ\ð‚ØÜÚw‚©éi,-/K™Œ’¢V8¡8°üÇÇ8<:ÂæÆºp Ù‚�Èúé“é’XTTŒÝÝ=GSðÌJFvV–4n«©©FyE…|÷Éé)–WV¤cµßŒ¼ü\´µµ À ¦ +‹å³4lnìHé�èŸN,Ÿ¹ÓÜ‚~é*ÀÉÉ2Úy$"MìV×Öqtt„@À/ rùúz»Äº•ƒ]ù/)ªÔÉÙ9–WÖ¥«-#=,¨y8?—¾‘pX(â¤>Ѻ՛ž.:±T•Šƒ�¨áNK¡4­k�03;�©©iLLLJŽC …EE’KåçÈõ„OOp aw{ û{»ðÉÂð£îGèìhGk[«T]x-Ê�ɇ›šIw8ØîÒLE©ïÙ îØ�U÷¹…JS@/a z8YÒÓÓå‡e«“Ó�$êî4ª«*Ä刈¹¦ºùùù¢]X]]îWØá1 "7/_\ ˆ¢‰Â���ű‰•…êšj9F}C�x Ó‡˜¥Å��m ÞËC�À� {^n®‹H™U‡U ¢rR«8¹é„D—…ÚšJ”•ã"ªéÀHAw”eÉÌ̱ê0"º ÎNFZ·ö=~„–æÕýñœ¢hnj’˜ãÜ\ p¸¹Xš#™˜Ü�8…¹¤Ï0ù–Ç\ý³xÿêϤOûCØÚÚ‘äxa~KËK’“!À…Eæ0L¢™„“·O&�Û%¹Gcc£¸I¶¶¶"¯ @ÒîÙÙ9|þòËKKD òò�—“ƒt¯99¹himEUU52³³deþÝû·6p;Ö—å²èªìX!¯™kmníKó]R•Ø"ô‹3R__š›ÑÐP Ÿ×«Á€µVi9@©{c7ã¥E¾îúÌæv‰½)<’ãñ»I§yÍÊÊšäw+««ØÚÚ–¸RÎ…áÌŒL>‘ðÎBAé»E;ÚŠòrttv ±±Alú³²3á–{�8NLÅ!µysg�o,“_&Îlx"”%(ÔÎDÞ<KUZ³²¤533‡Ã£Cœ�žé²ÁDPQV*踫³Í� " ¢È&Í¥€È)»nl‰Ýéää´X£ˆPÄïu{H”G²â"6IY‘] VXYߨëÔwo‡0<2&cÕíöHƒ’ÃCœ…Ïä¼l|>455 ½½M’þÆÆ:éôìõ(ËV~È�´<¡÷ö�±B1Ô—a¼{÷QD?ä5>1€ÁÁ^i’B 3"|¢~Ãj$ciÔDŽLÅ!µ döþµàðkñ2[›˜Ünt?±¤O‚à€ïà4wÜnøaîbÙ•žžFD«¸¼¼":K&ýì´Ì\„úIeå aN0 •©±±ímm²p™W@Ú3©Ìj [&ÆÇÅ”å$’ES€ –}�£­½eee88<ÀЇ÷¢q ¡ 5ÿ°âPQ�¬й‰ôp—–™À}ø(Ç_\œGiq‘X¿³…Ò¤ðèà¿XΪL}ø»˜ýoÒ‘VsI”[¾Z¶,l™·p�˜”lÒ«ÈÙØÚ›W:?ñ»¸1Ýí³3}()ʗܬµ¹Y@Cqq±tçÊvbƒu6ÆU)éñ|݆w8([U-¸!qG8tJ#Ï„? ‰zŸÍÜ67¶„ï …„ëGtÊ$œÊú’âB”RCPQ.] )èQ ãd,#½�Õ–ÈèœÄöé!©VœÉ6nw:òòrD×@í‘yQq¡è Ô³€b·ty^^^Ç›·ï022&ލ««CNvŽ”Ùæ�e:¯Ï+ViðTIׯBqœ‹<�×.“O­X Í-‚j–9?¡‹ÂÑK¼¼xùƒ=ÈÍË–†,±(©JñͶ§Õ0Rš3fç"`€C Á3»š˜üù8µ I|;›“ñLz’‹™­•º ó˜ëï¬<\€à�-[›ÛØÝ%%iA&ý§§’¿p‰OèFìÏPZ" —e¥¥ÈËÏCº4“墢KØt™\__ÇúÚüÇ~É5¸ É> ��b]Ïýx쥕%Ñ+�ùÀJCSC=òòòd1Õ2¥‘þUì_Ãáá1—±¶º"‚e²$Hù¦µj­î¯À\„9‰*Q§¦2,Ñ@6èÅL�¡”˜ÚÑeŠÌ ¡¦S£Žˆ!ÎÎî>66·°p€ƒƒ#œ�†E4îv»„•—�‰Â‚\Éï#ê@("—]9cǚİý¥Mî,p°®Bæ�•@k¿^ù•tW WÄ=I*§†N±GiËåó!3ÇÌL¯4_SºÕ‰Q ÜxXæÚäØQÄDûVrü¤‹¢Û�ìœldø¼p¥‘>¤OJk Üi¬kàðï¿o¤A›ÊÑýàù³çbË* 'Ê.‹a©8P´D¾›Â±Ë3äé8 ©Jªy�[€ÃáÑ1V×6ñå ]Þ �Ú‰ç/…®”žN® EU‰¥B+–Ö�¡Jlú8z¢‘òÄªÃÆú–˜ÙÝzlt%%¥¨ohÀ‹çÏÑØÔ çÁ}Ù‘š� �‰¾šD–볺¡jj�Mì›[ÛÂg¤cltLúN´¶¶ §§Sì^IåÐaélÄGõ© ³·‰@j0À!µø™½MLîx4ÍHÞãNªŽ]yP€�I¹ÊAÔbßÛ‘H‘pÄ^#'‰‹ŒÔh:i?öº¶ž‚�î§9‹ˆ[�Y^ãnkÅA¡¡x%<Áñ±_Üqtì—n�Ë+Ë"¼¢“›¼ ô«fu¹¹,~²É’ƒ£é‰â àð³ûnþýODÀ‡?eó&&©Fà&ÒÏ#¹ÿW¯ãgËŸÖ9ý<{ººEòÙѯžõuÛ_w†Wc–¸ÕMܵ›8÷‡}Œ{nóæX½ë*o1&ÀAux|ùʪ8Ð�‰ÀAQ âþR‘§è EÍEß뛘ž™ÁêÚöEåøQ^V†¦¦Fôövãqo¯T1T'ENGù F p¸Í±b¾ÛŠ€f,˜˜܇Üæ³*•øü 8¤rl³¯‰€¤•¡PÈ@´ß ª«µ8ljªÒ;Œ��K#¶Iÿ矗báêóý8Ø´¥4á8®¯oˆÕì—/_ÄǘT%_F†8;4´··‹O1mÔhpüØ?^œrv0T¥ß¼Ñf·‹Àm¾ŒÍ õÆn£9�‰Àƒ�Àm>«R ®yÎ¥=³o20À!™(}g‹ªd­æïîìass ##£˜››—C¨««�×K�’EU²ªèNª;¶JðшTñíÛ7±"#®`çĺÚZ465¢¹© 99YÈôe vUN8ÄA„ q’ÖSM!„f׿,·ù26/Ô¿l°™Ë5H!·ù¬Já´m%£yÛ§E³ï�"`€C ã#8À¶ ;:•è™}“‰€ÉD)a›_]p‚+“OPè/µAƒEEº|š®ô�Ó’_Ûá{9.f�ŸGà6_Ææ…úóûc¶00P¸ÍgU*÷À<çR‰žÙ7™à�L”RÖÎV/…„>ô?ÿvNÐp!8 ÖC#á¡g€ÃÏãl¶ø#¸Í—±y¡þ‘[l¾ÄDàADà6ŸU©Ð<çR‰žÙ7™à�L”Ö¬~¥ò`�†ß­8Ð)éàÁ!È6À!éj6¼…ÜæËØ¼Poᆛ¯4¸§¸ÍgU*!3ϹT¢göM&8$¥›<^2¸Ãf9�Ãu;²9Äu®ÑÎ2T¥¤o·Ùð?‰Àm¾ŒÍ õ?¹¥æ &2·ù¬J% æ9—Jô̾ÉDÀ‡d¢ô_‡_üÞÄÎЗwþŽÀÚvU²¶7À!é°› ÿ“ÜæËØ¼Pÿ“[jj"ð #p›ÏªTjžs©DÏì›L pH&Jö6É” ~tÀT÷Ÿ=Æ~vìŸýû/Âll"ð[øÙ(þ­ƒ&¹“y¡&(³™‰€‰€G›1`"ð�àðËC#ð�Jò~[ßûË2;˜|78˜Áa"`"p"p›ÏªTâcHR‰žÙ7™à�L”Ì6&&7�Û|›ê�ÜBs�¿"·ù¬J%Àæ9—Jô̾ÉDÀ‡d¢d¶10¸‘ÜæËØ¼Po䚃˜ü¸ÍgU*6ϹT¢göM&8$%³�‰€‰À�Dà6_Ææ…z#·ÐÄDைÀm>«R °yÎ¥=³o20À!™(™mLLn$·ù26/Ô¹…æ &EnóY•J€Ís.•è™}“‰€ÉDÉlc"`"p#¸Í—±y¡ÞÈ-41ø+"p›ÏªTlžs©DÏì›L pH&Jf�‰Àm¾ŒÍ õFn¡9ˆ‰À_�Û|V¥`óœK%zfßd"`€C2Q2Û˜˜ÜHnóel^¨7r ÍALþŠÜæ³*•›ç\*Ñ3û&’‰’ÙÆDÀDàF"p›/cóB½‘[hb"ðWDà6ŸU©Ø<çR‰žÙ7™à�L”Ì6&&7�Û|›ê�Ü›K•ö IDATBs�¿"·ù¬J%Àæ9—Jô̾ÉDÀ‡d¢d¶10¸‘ÜæËØ¼Po䚃˜ü¸ÍgU*6ϹT¢göM&8$%³�‰€‰À�Dà6_Ææ…z#·ÐÄDைÀm>«R °yÎ¥=³o20À!™(™mLLn$ÖËØ:Øå¿ßÈ—|ç æ…ú_F×ÛDàáDàºçÒû¬ºîèÖë×âzžsÖ™þ·‘ýµè™­“‰€+ ^¿7@“ù‚oó³sÏë¶Î)õh›#˜Üv p¸í;`¾ßDà~FàgÙÂwUê›ýû¿—+|ïHÎßÿ,Ïøþ¿ßàpùü=ºÿÝý6GþY4pàf?¨?;Ô¯þ{²å?:¯ï~=ÿáçæâùüGçô«!4Û›ÜÃ$;ó¿wi¿»ÿýx¡ÞÃjNÙDà?ŽÀïÎù›8-yåãâ�ƒKÒˆëÏ[ý֕𯗷tþë÷ò�ëÿ§žsà�Ëå’õù…ÜȺä$v±︡êûûßñ–CÆÿïê0à¾Ü$‰ï¾‰1ôÐŽá¿xÓSŠÄÏÖ�wóæï¬ë A†Gãµ�ö$¥X™�M^RI~w_3sÞ82Wôð#ð³lῈ€zV\ÀÅìÓNA’}òÄ÷NH%ìÄCùGë˜ß—óŸŸý=~º¿“91—LðRF}ù÷hàÓÒÒôöÉ~£ÞîÚËõ1¾|>rwbqàÂ{$çè#×íc�k[³ü{³ç‡$éW¬s`^·_rö¿¿Rnü½›fö2øÛ"àœUɾ¾/Çȇ¿mÔ˜ë}¸MàÀ4<žC'ûäùpPu ë_¹@iÿùJm"žëX[Åïåõ «?†É�»tÔ5;ÎAWœãÉ &˜¤'à kCg9ÀÞ9Yàÿþk+? ÷íê,�hÈ5ýZ‘ä!̧›¸†[?Ì—_ó‰…½ø„³1ä¥xüýjU‡”ªöâ´¾¦âÀ�äT¹ú`­@\wü««7q“Ì1LL¾¿6—ll pH6Rf;�»�ï­Éÿ÷g¨*¿ dÜ‘©8*’ͨì5)ðp4üüiæ„ÉÆJE?º8X«øhPÇUT¥k�ƒ�?®YP½ò«ø/.˜8ŽIÜÆ¢J) cJê”>¯ï]·:’—·»%�C2�‚øÄˆ#îD*ù¼Ö¯N°«e7ÙFOkÐ[iÉeà`=4Ô ÔÀáÚA™ úÁmJ¶Ê÷»wÚìg"pÏ#�ÌSãG—øóWí=�9}��Tç}*!¹º@™üÑâ�ÀIw²ö¿@œù éAÚR<±uêT®R—ï?Í./†&žñ�—�ƒ‰ZI…t’.×%ªÒeíÁ÷)ö©Y@$þ_ I,p]mm…º&llPçm€CòãõW¶¼%W¥d?D•j@Kðú:™®\/Ù´ÊÿÙºç±âWeìgh65à`?~åî™mMþ¢$óÔ0Àá/æRÿФ:ïSRr4Ÿ«ßã¬6\³2è8¬Å§°þ{q³WþãXpT3.ï÷+ ?ÏQ,àÀ2‹Z·×× *d½{eì^³½(+™“N¤¾æ†¨ôM –vÀà¬úÄwޝ®[_Å€és4À!õÑÝn©�C2�'p�á™P:‹Sç4½HaN‡®Y—«.ÍWç_¯:¤®›É— pøo¸9êÉ@2O Îý6Wb"à|«þnú~»QäY»t�À™(×%õ±*VŽm§Ïú߬WŒY2½ŒŸEçgÿOØåŒ�T%{WëûU>f³3¬sÒô++¡¿ˆÅâ ºšÖu÷Ãú ¬Ä© °\ 6.WBÔâ®–´_x;a¨J©ÍŠ; â`Áš6Ρÿ½”ܪ"XÄDŸŽjÄ�RùËÛÊè¯8\1 ·ÀY_tañí®Ÿ¸v2”<ÆH펛½Mîi p¸§7Μ¶‰@ HuÞ§ðÕ)îê,)0ÑvÒ‹®[�·€ƒCJya%ßzéÔ•&HN ñ£´üÇ—cÇY,N5ÝG¾L�ŠX4ŠHä1©†·�G\•ø£\Ž€´4•óX'•ø[íÂÔ·8iD6,Z”B .¤]:Y]ñ�ߪm,`b;_é0ȱ].¤YzÔkR/RÚw8¨ûω¢KczÇÑ©ú÷¸`G pUÚR�cGúEÌá÷k×´dðÅbü7— xõ‰�´Dà =œ¾ÅR*°*ñ‰#ÇJ(#\oój€CjØìý÷D ÕÂhþž±b®ôáD Õy;‘HôBŠ×héÎÜD'ä–^@g’®‹ë»J|™Ÿ8Q‚ä#WVï™w¨dþÚÜEk.ÇÁiW*9wBS­ç¼H“¯ç¿�œžÂìG$‘œ)++¹¹9HOOËåÈÎíõ‰Ê¡œwQU Tò®ÈY.—[þÓúK{ÏíTþ¦®_S—œ@ÁB7V<].¸ÝŒó…¢™_†!F�Ò´¸ÃÀÁAMÒU¹ýz X1-Í-¿‹Æbˆ„#8; #�Éß9 ùãMwÓîÖ/®¢I@Å Í@®Ö@�7ÑåF»|x!_·­ì·æsâãï2D1T¥”ƱÙù/ˆ@ª „Á 1—øà"�꼿�€\5QU¿‰;××É3ó &äü9GpÎ=ð�îÕ¹Œ× ·G-–ÚzXà⚥u &☠NçvÒ‘„ðm³%¬êó7bÑNNÃØÙÙÁÒâÁb±(*++ÐP_�œœlRÐIºÅ³�¯w)÷"‹Ña� ¨(0à–jÃùù9"çQD£QY& q»Ý¢Cµò*§E.ñ·å�+þ;Ac&ǾF$m*©ÍŠ; T%�h7¦P¨€«M æø¹Ò�ær#»Ðà÷pxx„ÓÓ3Ù9Ù2¨óór‘““©^|å?ÑàÕB%V�uVdÀÛâ kÅ€âê4¸ÓÒdÂó\¸R`•ÏÔwÄ׬UR¸fï¿/©&8ü}cÆ\ñý�@ªóþ¶"÷k�±„ áBL’lÒÜ\m‡ü=Ž ãøèX­î‡Ã¸ˆE‘››+«û9¹9ÈÈðé¦kVÎB:“S;?vŽ¡çËVª‰ ØÌ�´#95æ5n„Ãç888ÆÌÌ,†††°··‡hô==�ðüùS””” ° _†°7´ÕÊÙ�0ñgjÛ©IšÇ‘UâFìÂ%¹Ûéé©üðãËÈ€ÏëƒÏ—.Ÿ™(*ÊGQQÊËJPT˜�ì¬Lx‰F­„^S¡ÔÄ»8¨J+ 'njâár‚qðƒ!ø<>y€œðœìn]‰°ýƒŽ¦â�Ú@6{?ü¤š@àððLj¹Â‡�TçýmEDÑŽ8`þ ÈD:w�È4Yh$C‚¹ËÞî¾$å{{ûø‚ˆžGddd '; …E…())Fii òóó�““%9Ëùy�€~¿_r·Ûƒœìl•<»UÂm-ZZú‹Îm[ Zíél:�"ØÛ;Âää4Þ¼yƒÝÝ}}=xõÏ ”—•¡¸¸±ó¨Mû–z©K‚mõ ¶õ½ \inD"Qlïìbskëkk8;;CvNÊJËP]S�ÜœdfúT–S‘d…‚Ûnnl`wwW*!ܾ¬¼ åå’ÿÙ—î8¤6+î0pÐ&-Ò±Ëjin�ö: c{{“S3‚„ùstäÄ®¬*–¥¹]())Dee9z{ºÐÖÖ„Êò2äæd#튿ð÷�ƒÕà„Õ‚u>jå€H˜È–@&aks {»»2á3}>ÔÖÖ ¨¨ék«+DႼy¾F�ÚH6{?ø¤š@àðà‡ˆ¹À�TçýŸ ‰Ò<òÄUVÙ‹Žjñ_i0ÓÜ¡åƒ'XZZÆÄÄ$ææç±0¿ˆÓ“S„Ï"¶ˆ˜‹�¾ ÊËËÐØÐ€îî.46Ö ]ˆ‰Îéé Ö××°²² ozº�ªÊJ©ø|>x<¤ŵ V¦úü,-ƒœ¢¬î;�Ã1&'§ðæõìpˆ ¯¯/_=GEy™€™Øù¹Th½‚h¢5ÕœZSÑoˆÆC¯KµA‰«OÎÎ033/qøòå+ŽŽŽPPP€öövü„ááaÌÍÍJÕ¦§§]]�èèhC^^ž-ÖvŽR›· ~~ò/P¡c‘(ü� –W60¿°„™™9Aš'¡¤{½ÈÉÎ�×ëCzº¡“NB!„Ã'œhj¬CKK#uu ²¼^¯'ab+û€8µH[è®»´s°š>*h"4%Vüþ ý˜œœÄÒâ¢<8¸*ÐÓÝ�šš*øø}"šVblu|UÉø®çØÏCd¶0ø+"�ja€Ã_1LÌE>°¤:ïÿl8â+ûвÌ|Á¢[«†¹ =ççQìîícqa óó ˜››ºõéɲ²²�••-M' J’ÌÊB^^.ššÑÚÖ‚ŽŽvx½^„#aLMNbdx™™ÂrhokC}}²23…ïÏÄ…É»]q°9q—#…kÔ9ò‡¹ÍY8‚ý}æ5Óxýú5övw‹�£W€Ã3Š‹´Î@å6Ê2Ö%ÕŠ©#çd�„E³@&« "^Ö °¬<0Û;{XXXćŸ°²²"U‡úúz<}ú õ¨ªªBºÖ«r¡xwg†Þc||¿_€ÂÀÀÚÛÛP[[-±ˆS¸ôH²›v›ÎÑ¿;7î0pˆ¿æ¥z@ñL ðCØÜÚÁç/#˜˜œÂâÒ²ˆrJŠK}WW× ''W&Ýþþž”Õ–—±··�ââAéÿ¼|ަÆFTÀ"êIh"§ü´˜Èò5v)å¿ÍO” Ftîа·€÷ï†0::*†²²üïÕ+´¶4!#ƒFÙˆ©¶‘Ž2ƒåp…©¨qËïÞa³Ÿ‰À‰@ª „d ˜Ëø«"�ê¼ÿ³ÁŠ¿Ó&¸Iò…4Š|Õ“d²>|ü„…ùy¬¯o ;+ E…E¨ª®Fee•P�HwÞÝÛÁÖÖ&–——%gå¡££Ož";;[h>?~Äëÿ]gaaÐÙÙ.ì &ëVÅA�Uù°?V·g›N­€dqìï4pøW³)¢ 8¼$p(Aqq‘ˆ“•Æ!ÎÆ }; " áä$„ ŸO€ÏÇëó:*na‰„#çØÜÜÆÐÐG¼ÞÒÒR ôK塵¥™™^¤{]²x¼0¿Œ¡÷ï1?7+q¨«­ÅÓgO$¿#=�•–hìüŠ@ZÀS\2ûg‡Èø¶[ÉENQãÜ‚J)œ Ÿ�cm}s ‹øòe뛲ÒOÄÛÑÞ"“‰"oºn�¡Ð ‚Á¶··ptt R†ÚÚZd0zÜmõªV�Ÿ?q¡´úQ“MqìÔ¨ãÿXf#x88ôcg÷oß¾ÃÈÈ2|^9·ÿû�C322<¢sÀy‹VeÃÙ¹Úª>\ÃfJnܘ­fRM px˜ãÂ\ÕÃŽ@ªóþÏF'î'dI¢ ä}ŸÆ|ƒùLŽý,.. ý‡4V232P[S�ÆÆ£° P_’-Èž8>:Âúú:NÏÎ�——�ʪJ466ÊÊþñQC^£  W*ƒýèìhGnn|ÞtÄtÞ!,{Õ]i.œ¹…òQt#gÅ�T¥½½9V_¯åå¥(¡Æ!ÊtCRù�DZ?ˆ¥¥5¬­¯csc]¨F¬pA•: Û]V3J¦ƒ£cLLLc||ccãÂÒ¨®ªFgW'úzû�_�‹¬lFG&0::މñ1V mm­è~ôHhM\æ¾Ô=8Mjxu–ÑR¼+÷Ÿ%÷ýÛn8ü Ö” ñ÷u)áL x‚‰I5 FÇ&:9‘IFêÑà@¯h2|é*¹�Ѧ+&â™cÿ‘ˆh,*e½’âbddf êgC¢\Î$–½^7|^åÿkM NÌmÂ"Qù/+,áyÒÓáKOW%¹X ;{GØÜbéì#Æ'&äAÀIõ‚¸©>¼–è\ðˆ€‰òûô°Ö£ÙzP&FÇ‚-÷}È™ó7ø½¤š@àð{q7{™ÜfR�÷öÜ�ÀA�¹Ò0Og–�󨶷wðåë7Œ�M`ffZœÛZšÑÕÙ�®®q„dŽBIµªÄ„¶³³»+À�tìÌÌ,qY:>asó_>ÁÐÐJŠÄõ¨µµ ¹ÙÈÈ$ÛA‰¦ÝžtÉ�è}Áúú ¢ç àÑ£G’äçkmcGà w q�¸YŽý�ùqw€Cüžªë°DÑH“Éœ`wïŸ>ÅÄÄvv÷�•�…Ç�ûÐÑÑ‚æÆdggè~ƒ‚•¥_††ýƒC¬¯obiyU�}A~êêªÐP_¥t "^f©.нý}Qû/¯¬È¾¬\TVTŠð™• º:Íͯ`v~ ««k"Üæ1ézPSU�â¢døÜR©¬(Eyy¹TH¤qŠòr²Qpb­Ãº­8üÎ7û<œ¤š@àðpÆ‚¹’¿'©Îû?)Çê½ÝdL­¾_¸Ò‰^àØÂòò†>|ÀââŽQ[S…þ¾^Y`¬¯«U™ÝÌ},«UÕ¯àT÷©b žŠFbuu KKë"°&µ‡ÎCYY\´,AqQ¾,Xr•¾®¶eå((,ÆÑÑ1–$w¡eQa!Ћа¿·+?;;»â YYU�’’RäææKþC:)à¬.¼bÅ¡ŒT%‡s ”K’‡™šÓôô$*+ËÄ�‰À¡©¡N‹}Š‚ÂBdçd‰5ìèÈ€(òós18Ð/²IXm�åXëàp£Óàn‡ë,…´@‡%3ÞûÝ=•ä¿yûSÓ32Ȫª«ðêÕ ´´Ô£¬$·K4-Фe¹d ,U) ƒÕ…š´'– WV×e@ù:,¾¿t^zÜ×…Á�-xæw»prÆòÊ*ffçðõë7Aþ ííèéé–Þ‹‹KŸÂØø´TFNNNx¤{Ò�ʼnœá• LÄM½CKK3ZZZàI÷¨pH¼ÃV#nt䛃ݻ¤š@àpïn¹9a{�øòÚâÝ Í%àÀ†°n\iéuŽ`sk_܃޽{‡íímÑBv´5ãù³ATWUHµ€¥Eˆ»yœ¦õllîȪ<�5;»„ýƒùáñ� ‘†ŒŒtÉ9¸6YZR„ÞÞ^4·´ ¢²Zt¢LÊi{<‘d»¢¬;Û›ØÞÚÄÆÆ†XË·´µ£±± Õ55’ç|þüû²Â¯€Ãs¡‰«ê7U/V8v÷Ž022#Ô# 8<ÖÀ¡±±.]Ma’ÇL‡}¹¸4æ­ÃðÈÆÆ&Äi©¬¼\ª9¹¹bo?:6‚Å…9Hõµ5èíëAC}²³³x‰–Ô†$‰£ÇTR›=÷8¬­o‰úÍ›w˜›_@Aaš››ðòÕ Ô×U#'Û ·‹MTÎÈäøðáhÃ"N9P‘¿¼²†‘‘qâP¬S]]…gOãÅóG Í-¥3~7iRDÜ,6ÐíQ'úûûpxx(Îã3†œÀÁ�œìLdgù�•éEey©œwsS#šZš‘ήmÒH�ºú1À!µ!nö~(0Àá¡ÜIs&ÉG ÕyŸü7ÝÌ–6ùE[­[ÀÁåv!tÆüü*Æ&¦ññÃG~I¼»:Ú„n]ZZ„ü¼mÀo”¦;²)&ó˜4766·1>>…i‹888W&Oº[*™ì8MKzR—zÐÔÔŒ²Š*Y„¥&buy;[;bÙJ÷¥Ø9›¨E¤ºAªuSs+jjkÅÖ•¬Š�Ÿ>b_ÀEÐ×Û£�C©‘mÇ&JAÍçÈ謰Dª¸8û¸ÍMõh¨¯Ñ ÝqZ4¦Z”M³™c¿TRÆÆ'ñù˰Ä$77ééì&í­ÅI(€®Î6t´· -‹=%„®-`-ŠÒeB’©�õ; ”]©²/c“”¥¥UÌÎ-ˆðxieE0…?/^>CuU9¼éâ,]•ÎY÷J°Ü�ˆ=5p õéð(€¥¥|û6Š·ïÞËÄ©©®Â˃øß?Ït �™À!,Ö¯ÔV¼ÂÙé›ÑÛûOžô‹°issSÓó˜žYÀÖÖŽ o:›°d¡¢¢L7žó e©²¢UU•¨¬ª�A®lÒâT%SqHmP›½fRM LÅáaŽ sU;©Îû?Û�U{·+'%\î4ON1>1‡‘ÑIÑ$på¾¹‰‹�íèëíBaA®jrvq!y�¬ÄËj¼õѦ.7ö„f=?¿Œ¹¹elnnakk[Vã³²2Q\RˆÂ‚<©:P”L!uEE%ò ŠeÑôÝû!ÌÍÌceyY03}â<Ém™·�º]QU�¢¢bé༶¶®;Gï"z~VÈø(-)–…ÜÓ³Séz-§M͂ۅýý#LL.ˆ>b�Õ�²YpåbomM¥&(];ƒ]ªÙƒÂ“îppzÁþ�“Ssøðé›Ð§ü�€°J¨[𦳹n&ú{EçÊjM^~®xæ;#Æàp³³àîj ¤du!]¢És›ž™”¼¶¾�Ʀt=êij§OPQQ OG+ACTEȦ?©~ "¤(4 °¨�ûwC"ª©®ÄË—Oð¬®�ªâ0?¿„±‰)¼ú Ü? pè*ðìÙ ¸5q¬¬nbqi _¿ cvvy¹9¢îèïCC]­ nK7­ÈX値Ÿ ×—bMÅáf‡¼9Ú}�@ª „÷õΛóþ›#�ê¼ÿÓ±‹µ’. ��¤ÒÜðB›Æðè8†¿ ‹ËbWg;uµ xÈ$ÅB°yý‰’k.‘‘(Í]ÂXߨÅÂâÆFÇ1::†‚‚|ó¸MM ÈÍV@‚bëôtŸˆ´çæÁ¼gjj ó³ó"&.+eRß�ööæ)ÛÔ Ÿ°4‚¡3ÉiÞ¼}«:4ŸëÎѯ^ˆƒû'P¸M;zº0�ŸÇàr§kW¥qW¥Za^”•Û–´�ÍÎÊD~>AK¼>Ÿ,ÓŒf~aŸ¿NHe…öµ§§AœGÎPWW�ƆZ <îA{[“œ/-ï….ųK²PÈ1¹´«Ùª‘¯ùüjî6p`S�è…ˆ‘gfç155‹OŸ?csk Í-Íèî~„§O„ãFRpÐXV&œ‰ÀÁ�ÅÅU|ÁÛ·C6U‰Ýu]&M(t&B�ñ‰iAé' â*ðâùñMf3Ä�Í]oÞ¾ÃØè˜¡©…øß?/E×�)}èøÑS¼»À”D_eûNàð«ƒÚlÿ0#�ja€ÃÃæªvR�÷::Nª’zÇ+gHÚ“~žî¾ôzJ÷ ·û=jãÎ6¡5Siõ•²šÍ*ãw®‡ªNÔL�YÁ ÒöΖ7ñ‰®Jï? ´´X-XôI‡¼œL�PC/ÄB’p“S˜ŸŸCmuµÐ§YExÔE ×lX“¤q¹œ‡X�ûzñÏ«—T˜øÏÌÎbqiIØdi¸Ü^©ìííãððþã#9&õùyÙÈÏÍ–\ˆË¹ü]Yi)jkjPZZ†ŒÌ,i~Ç‹^YÛÂÈ«4CÀ„ðÙ zzºÐÛÓ)`§©¡V®‘n• 8(ƉØÎˆ­¿79î.pÐÚ†Ñ.ujzV4lEÎ’UK[K8”•�Ð$å+HR®�&û+°jaOBqhRÍä�üXXXÁ×o#2�¸ú_S]�/ðÏ«§²ÀI‹¹8,.­ Oïí»!>³‘¹zÏŸ?‘+üÊÍÍ]¬­mâõÛ·8 ®®ÿ¼z¡€-ÑÒèŽ@·BÅV5$® ñ+1ƒ�orø›cݧ¤š@àpŸî¶9W�TçýŸŽ£õœ±;GkgH®.ùƒÒ¼vxx cããbÊBæBwW;º:[‘“�¡’_'EÉZgŠ­Wȥ͚¶IYÚÀ§�Ÿñþý�h&Ø wpà1:;Û¤�{JÑeRbÏ]ÂÞx÷î=fgf°´¸(6°ý�£½­M�uvgg«�ÃÁ{+Láß_‹++"ý�ñ¿ÿ½Bvf–8@‘ B¶ÅÆÆ–€‡4·Oò-V h‹OŠNÓÓÓàI£%½K¨Zõõ5Ò »§»GØ99yÂÊ`ò¿±µ‡©ÙU[4§9>:”ªÅ䃃�ÑÖ܈êê \,2Xý*$ÇrQpÍž8ÜävØ£ IDAT<¸³ÀAµ=§#„ª4=3+HDÕ[Û;âJô¨§ ÏŸ=Þ-¹\"n°E�Cð`9©µ{ ‹¨qÐÀák8PÍŠƒXêŠÆ€`ðLôãSx÷þƒ xü¸G/Û»d8¬®nˆctLUh�F`k³nb]q°j ¶ãºÔÆTnrÀ›cÝߤš@àpï½9ó¿7©Îû?¹à "]e)ÏDÿ8@à0ŠoÃã‡×ëA÷£.¡)=êl�W,ª’m)ªèÖ–·¢ª8Ðò”‡} > p`cµª*pÈq‡pNà0=/ÚNv\^]]FoO7ž>”ªC]mµ"G¹X$±ÀK/†×¯_cowOÜžú÷áŸ^"O\Ž2095�¹¹yìíг¤Û��p$Š£ãc!8Ff†…yÈÍÎBNV¦ˆ¬™³±ß]-Éä(¯¨�nwºôÇZ^ÝÀÈè &¦f055-‚ò³³©4°:Âö„ {ezº[ª!tT"«C*5Ҩׇ›œw8èåx¦ÍDÊ3³ ˜ššÁ‡OŸ°¾¹)èôÑ£.¼xñå¥ 8èŽÏär5`Dà 5œÊ*ìð0`WXE ò¯¦ÆAÄÑÏ¥2@gJ&‚¡Sñ<¦ƒÁ»¡�8qtƒ”õpÈ$½±±ƒÕÕM¼}÷N:J_ˆÚj¼|ÉŠCcœªDp£úO;Ûeû_ p¸ÉoŽu#�ja€Ãý½÷æÌÿÞ¤:ïÿtäâÀA½Ñ•®’ÀÁ 0„/_Ç1<<ޱ±1ilƪެ:äåd ˜`bΪ�ŠDÜëàâ4HJLËSOº‡ååu|üø ïß±âP,Iøà`¿èH¢®’ì ÚœžG æ8,,Ìcc}U’Ȥ I ?’;ÙT¥#Y¸}óæ-ö4UI¹*½jTAA�8:ùƒAœ�F¤²áödàø8(.˜KK‹XYYDqqZ[›EOZ]Y®“ü¨Ò~Ѝ;K„Ø·GmOÏÈ6™Ç»¡OÒi{}}gg§R© ¶•ý/ž=íðPTX€¬,Ÿ8B1~V¥1Àá&çÁ�œp¬ÔQc ÞÇCCXY]EU5[�·Ëj> ͉”ÎA»è¼\�µ¢/ÿU“˜¥´ÅER•Fñö-]•HUbÅá þ÷ÏS­qP àB¡Såª$âè�Rqh U©¯G4Ò\ ¯²TÞ½ÇøØòóó¤…<©J--MÂÁ%¢—c8k297=eã7Ù‡›ðæX÷7©&8Üß{oÎüï�@ªóþOGÎùœQù¾Ê9Ø´-:ÁØø¬¸*}ûöMزÚÕŽ¾ž.äçÊ£Ä6T“ôQ? 8¨nÏ;RqX—¾ C‹3�Ÿ<@BàÀÄœ¹L4êBX*Šª´¸0�õõUÉež=%ph�C8B+W;X1Ø?<ÂÄÄ,fff077+zTVXjeQ• >µ©B+w»¥ÿè6žbccW¬kÙø— ¶�ç‘‘3tVê¬t<^Qa¾ê,K³<¶ú³7; îgga,¯¬ãóço˜Ÿ_ÄæÆ&êÑßß�‡Ú‡ ûŠÙ™iéUÁ^^´½onnDAAžÐ½$~– Í¥ªƒi—Ú,¹ƒÀ�¤-zÒq Q̼½µ#}(Ò!Ÿ® °Ož¢½½ uÕB7R�ŒërÔ;D£Ê™Çf'Ç@ ˆ•Õ �âí›wð¤{ÄÂŒ@€“A”ÿéJã„0;·ˆ±±IqŸ�¡©¹IJdtUÊ�°¶¾‰¥¥5AòããÔ8(;VZ–‘ª$®J´ce¿ =�×+>•*i:Šj—�ƒIxRìfïûî÷ý3go"�JòŸÊ¾2òqà@G]{`… ̓óh »ûǘ›[»÷ï±²¼" d™ð²'E¾ÔZÊR¡ä+ñ«–¦pѨr\b5ÀãFº7;» 8|ü$ljªèª4ø]íÈÖâh.‚ŠÙLÄ%.•oÞ¼Ãââ66ÖÐO‡ÈgOP_W+ÍiåCG¢´4D"¤*iàðæ�¬òÛ‡—/DØ\\R Ô!þ^\Œ¤âàÆÞîFF§095…™™i¡PÑÆžý%R⎗*ÿ!à  zoÿXšÆ‘á±½½-®LÝ�áåËWÈÊf¾åÁë×ÿâÓÇOŸ…���)çÏ KUu…4°³Ò ÙËÇ:¶úï¦�ÃoM W(ºJû­CÝÔNjÚÙºòù. «üGGÇ›®Ýìü‚€�¦æftt°yJ‡´=§j_µ§•ê…4"¡�ðþÁ!üÇ~™5µu‚Zwv÷0:2†×oÞÊw õˆN™¡}ˆ�0:6މ‰ILNNÉñ[Z›8°í΄ª´¹­¨Joß‹8šnÕÕÔ8¼A…;´ ‹ UÉ)Ù±þ|4°* ÷å±ySãÀÇDàjR™x›e"p{Heîª4ï~|4rÖV·ç4D™Ëœ�c}cŸ>}Áôô4VW×PXP€ÖÖt´·££³]5lËðª•x&@NOÈùßÄÁÑ¡4~ËÍËÖÅÉi;Ûûøøé³8:¢¬¼O¥âЉöq`C5ZÈDéRI�Ã,Þ¾}‹Å…»â@à¢*•’tó£ùs’ª49-v¬»»VÅ¡¯^=WÀ�U’ó¨ª8h|·;Mr/.¸Òqifvååeèéy$º˜§i¹,ê¦ÁbvvQÌh¾}ÊQeE:;;Ñ××' ÁëMÃÇ_ðõë0VVVpzz‚G�:ÐÙÑŽ¶¶a+Ê’`6x°–fïËhº›cÞu Ylž;v†ªê`Y©Æ¢1ìöLâOŸ‡±³³‡Ü¼<ÕŹ¯•Uåb�ÊÖåüpÀŸžœayeëëëØß?-ÃãþÇ(.*F ”?g§aQô ö xÈÎbggCØØØÃÈè(fgf±±¹!êR•ž=@NŽì/±±±�÷ïÞ 'ÏçÍ�¦&ÏŸ?CKK£²ZKç¹Å�[ N¬²Ùõ7 QãpÇn’9�?�ß}äàðÇo•ùB‰ÀïV ïcølà MG$$ÿ—ʃûGŸ”F.J2¿É/(@GGzzºe4??—¼$ìgu|t$v¤›[›"®¨¨@OO�8+‘Aq4›ÏædgKS¶��~iGà�™é“Uzö°ŠÅÒd5ŸÚÎÅER•Ö¤—„G׉㑢ù(à Gqp�ES‡��mœGÎÑÛÛ�/ž ½ª´¤X|Ñk U‰Õ13;'Ÿ—¥£5µ©µuµ¢¥�¯Ò…Ò²’¢µ»»‡OŸ¿a||Bì] Ð××+t®–ædgû8Œ�ÏØàbcc]Oss“4¦«©©’Ƽì‰aWn®€‡ûGïÖLp�ƒVS‘;vjªr ÷V­È³ F�àÕ5RŒ&0?¿$mÎY®#͈IziY ¼^Ÿ(óIG"¥issûûûRm())Áà“AiöÆä}~nA&ÛööBÁêëëÐÒÚ"MÝ223°·{¨ô++" ¢Ý’XZTÀa¹ytU‚T5È7üøá£T2øýéžtt´·¡¦¶ù9‚–•—q�T8xN—ñÚÄF*f€ß­±iÎÆDÀDÀDÀD Ùü�ÀAérµ-¼îÁ ¢æ47NY%ØÙÅÌì<¾|ý*•„£#¿Øš–••I/æ\\d"ðp°€ÕÕUƒ1ZáªýÀàòò |ùúM¨Jg§gÒ­½½MVõÙ­™.……EÒX-##‹ ¤J )à°¾& ¯Ïžˆî ºªBC=&ÿD"1ÄŸv¬ëëk’Û�">0ø uu’¨3Ÿb•!þ¹@ø,,L�ã€þ€_ú=0ÊÎÉF–Љ"Ui n�6ùKË«øðá#¥gCmm-ž>”ܬª¢^ŸG˜››;¢{¥V„•~Xý`¥…Œ�ŠòrM_×"iÇ ´:bÜŸ:V²3íÏlw‡�ƒEWÒ®Cš‹Æ²»ÎÍ/IÛô©Éi쪤]X UOz:‚� T‚�€wJJŠéööö ¦¦™™X[£ç+æçç±²²Šl}ŒÜ65ÉD0x‚`0„P((J~–óòr„ H®žtŽÖÀ�%¶ÃC?†‡G0>6!Ç P‡@Q!òósPX˜�’â"ÔÔÖ ¡¡A�ÃwWC pø33Á|‹‰€‰€‰€‰À�¿iùË~—;�SqKÔì"eéáð9ÖÖ7„~=ËUù…Eœ��É*|~~>ò ò¥¿TšË�ãc¿äÁPé7JËŠd�“Ô�¢¢"x}™’s°A.Y]€Ð&Õ—áq]]=**«Q\TŠÕ•5q`Z\\ÀúÆšmÇÊÎÄV‡óó „‚§²úO�)éMÔÔÖÕˆ“JKK‹01Dgª+ª” Ž£ìQµ„SçrümL›×p•V®KK¢¿øøñ#ööw‘›“# ½ XI!8á!h“xx„÷CC•bžC:;;ÐÒÜ„œœ©|ˆMB§¬¿iDÞü”ÖÀÁ:ðÝ*æ[MO â?t8dº±¹­›‹¬ˆÈ( II�ûýZ+ù,ù•”‰ ™´& –)\&’gYla�|º |E>äê=ñTª›l­N7–åfgæ0::Žå¥e©”PÍJ¹‡l²Â’$Å>9ªž EÒ—ï±7?êÍMLLLþXþ¦4íÇÀ�!§q¼Ònraroÿ@çæ°¶¶†õµ DÎÙD-*´kŠ�™×°)›ÊVVVõ¹NôÕ¢‡ ¥ˆ½®¦gf159…¹¹9írt.NŽE……xÔý--m¨«kÄÖÖ¶0#hiJà`‹£5pPù–>Wö8¿-Æ×/ß019�™éäå碪ºR:H÷ööªJBv–8.)+Të Níªö¼×t,—4�š7Íex ‚j¨Õ`ÎæËð‰nAr¦‹ œœžbdTí311.ù+íèëíEiI 232ì®ÛqýÉß4"o~šßyà`ñÿ Df¤û:°|æ÷±µ½ƒ••u,..á`ÿÁ`Ð tJ"b'}‰]ëëêDA4OdLdÏ’µ¬8p±zqtt$%B‚‡òŠJ”•– r繬®, ° a�BNåz“–ì›[ÛR Y^^‘R]ä<,ÍJJJ‹¥¹xäëy}´I³<×Ü`n~Ô›#š˜˜˜ü±üMiZpP&£jÑ]èJìª÷]¢Á ÷÷°±±%É9éHÇ~¿ä2Ö2=)ÏÙYÙÒl�\þúúZaPP Mkz~vw÷…r=;7‡Å…E S"Íu!I}[©KM¨ª®ÅñÑ1¦§g°µµ�ýý]´47J²]Q®z2X}”’ͧÒ$Oâq JøÃüŠì ®îs!477G@ŒäjÒ¹ÙŠ„¾ûvÖî\ fâ¤ôQÓ33XXPŠ9XKK3ê„ U-Õ'ŠU .Ê.¯®biiIª6ÇÇÇ¢‰ £¤­µUSVf&\ÊÞÊþªRjSßu 84w«âpùÒTÕKM<&ýlk‰œãää ?éD'ÒÕYü„£1IÊ9ب+ ÏÏ—AÁ³W¤›�ؤ!JTìÆ 8™ü~?�€lC­D~^²sràMO—ºéJ´Se«øŒLŸ�8€­äŸ“†ƒ™ÞÇt�"7�Ç£��©PùyÈÍÍj¬jʵ¶8¤6ÂÍÞ&&&&·�¿8$¸+i�ƒˆ£õŸ™Ã0aæûÿ<œ�¹Ì)B'¤G5ƒBõ¥ÊðQàœ)+ú’Ëø¼Ò{ŠÉ;tæFÌ1BHk"ðü¢ÉôxÒdÕ�4nj²²²q~ v8Lúõ²³2U£8o:Ò½›Ú£ÄÙ<ç4DÂçrnÌkö÷%¢%,u.¬ÊùhêµIkÀäyqͪú¥\ìBttÁ �œŠ=-)[Lõ¨3¥#”TÒÒì"…"?©Ø�†ÏÄ8‡�yy]�>¯ÙYY’Ç1W“ p¸±gÀ½êªpPVPj@sðq¥Ÿ› @¼Žc1�üsriÑËg²»ÆÂ÷ŽÖ­Ñ˜ :X‚¢x–)æIOgU@aoÕåY`‚Xª rÕ‹Ò©Ú!†âñ"uL–’G '˜ 8t5Ň׿@&&&&w$8\ZS·2”„¨«bƒÞÒÑ7@��ÓHVá±0s—³HápXòæ\Äô¦sÑ“yƒ@�ƒh�NBø=\L%€‡Ïp~‘Uz&ø\üd^ãNc…‚9”>HïÖ�®]JH¬2$�épPà„?̱”[UbøC6ˆÚN×¾æKcÐé")=)dA˜ºm[«¿]5%7²ÎÓÎm �¨›PU»¹›Ž»Nóì³°ó7ùâ;2AîÙiÜKà BjêØ\XËFŒƒ�Ü@•œË¼¶û²Òh„ÖSÈqEd¡§Áù¼PÖci¬‚°Û£>;»c¤5ᬳÖÍíd]mÐû\;vLÅážM)sº&&&&ÎÜ[à –Èõ‚eâ=•œÓV¡7±¸­…Dýû¸@×"ËXIù…mMêDL‚™“¸uS5ÍxÒzcî£(Ad.È™êF~o‰tþ£öerNê‘Ò�Zé�갬݇SMÜ\ÌOœ×l î®rþ—yŒ¢©kùÙÇ ¬¬È†²¨ϹE]{¶Zˆ4ÜÎú¶8ýË:ië\.£tœTÞ§Ó´Ÿ�²ù÷K¸Ó‡ïÝ­øš¿ö–Ü^ù«9Ÿ”ññŸ04hà„±½³Àx¹yHâ0·¾ˆßCà “\7N‘ÕšuÍãæÒ9G-qo¹f²™˜˜˜˜ØÅôKoß»y5ëøK9ñ�€ƒ}a—€ÃÕ Vɯ²%µŠÎEä÷jÑSé$t¾c—9˜oh‚«'‚½8*j�ÔqzÅ]­È«•}«’aë2ìí¯*¬Ê‚‚J�üG"±o•½þo×9œ1Š/ìê3w�jâ• }ýú÷²è{9áÕ—s0Àá·çß= .$>„ôßdhà` ‘¾‡‚uµ�BñWV¨ÙY¿’R™Pœ åÒ·+à×*Ä'Q;Ë�Ú ÌQ…Pˆßb^éòÞuOU~{p›MLLLn?÷vùë?V&k9—ªvuÄJÆÕq¤z u ’óXšÒ„J‚óx‰ÒÅyÑ"ü òàtË´…âÖÚ©Íþ°ì`-`q8¨ÜLæ8u¦ÑXT.™U LIÆè8õ8�*!Ý»ý‰rOÎÀ~^bº+×ôý‡�MÔÈ!\OhuŽêèhƒ†x,ÔÖveìrå!>�Ñtü¡ ²'“>¾weH™ó0000ø�"`€Ãw{%¯·(ØJiÀÜâ7)m¦E²jq½ƒ½`ÉP«á\B²ì`gØô%ëèSTš’`YàœÔö–aM"ÈùÞPŠë ô—+%º’g�h*¹“¢d�*z>‘VWžj+XÅI@8ÜØì¾Ó à¾w•×?„®ûm"í(œ )>a4Ú¸AãǽŽ+÷cuÍå§‚GÒbmU:»æŠMÅáÆ»9�‰€‰€‰€‰ÀŸ�€WcÎW»Ê‘Õê:ÿgk,eåŸý4UÉÁx°\¹½¸Cêj�ìKê’;M:1Ë¡eÉ]ƒmìbë>­^ N©€µÖiW*l^”MEJHT(œ¦X[ô—s©äÆ™ ÓŸK ÙÖù\CU²s09@œÎe{1ׇänH[¹N‚!ePt�>—óë8US%þ¹.Õ¿\…¸üH»þß/£âGþQð¾b­½.‰~ÿ6\‡*îÑM3§j"`"`"`"ðWFÀ‡ë�ÃåŒ%�&mïb™·$(ôZ?ó]{ñQµFPBhù(ƒë×s;ÄÑ—r’k™¢a¸”‡óhjRªÀÁ:…ø7\ÒcÈ¥\ó;‹J•p�—Y ‰ç­0ŽGÿîÃè‡DØð}à &Ðe Ãw–ùñtدÚÓÐîT�ƒq_?Q�ßc€Ãïr³Ÿ‰€‰€‰€‰ÀíEÀ‡kbïp�³sâ«÷–ëÓÕT-Îó·›«9ìß­\Æ®ZXZÇJ¼%`Ž»0ñ¿œÃ|/¹8X§½ë¯�³epñj‚A—µúú-Í88rZÈ:»X«-,�e\•~í^Ùñ …B÷2#½„“¸úë‰Fz9ö¿\‹�“øÎ«›\ìj8Ë�¿uX³“‰€‰€‰€‰€‰À�ŒÀ½?‰æ�ÞÜ—‰ÒWumæ¥(K‰,�« »ÕôÍ©K°Ž/ä&©|Ç5¡üpù¬.Ó¸ëüíæ÷SÉËàA}kòT˜«[Ƶ–öÃy%‰ŽPwrÊÜé“rÝWà ¨1!´?´Wuâ]ù¥è‡Ì»_º¹×qíT'ì_:ŒÙØDÀDÀDÀDÀDàÞDࡇ݀Ÿ»Q™ÍrìáÔ>Ê—\¦q[íÌx%Râ‰ï‡kÅ”·?”ÁCòIQò[ƯñJìoÿòïÕÜkàp¯"�w¹ò€¸·WeNÜDÀDÀDÀDÀDàJ p¸:(®&¯JÈ,+‰×š¦$,ñ;€C"°Pô}Õ˜6n‹úûÕ€‡8œ pHí®þ?{ßÁÖF’u}‘DÎ9gƒmœ³gvß_ÿí8ÌŒ#`r°“3Iá{î­®î–H­€ÔÒÑ,kBÅSUÝ÷ÔM éá—‘ÚÉù8d¤+4€@àVqH’8¸Ž8Ķ¡5Ñ¿W¦JvâÒp93y\*úŠ[=:yÙˆƒƒe¹Î�9Qšõ›ŸÕu0<@ �w€8€8äÓ¦„Æ!½ÕqH¿DQ�’O±¿Cˆ$Å€@ÀU€8$IŒ¶¦ïceA<¹Dû ˆû¤øO@ã�Cf Iâ™ â�˜É\$á ÔfI.Š €€KqHŽ8ˆ<6ÂIR8þ8“ Ì| "Sp}‡Ì>(@’ÄÄ!I P  €€ ·‡DÁIÓ Çze‡¨Dm¦�v’vJTªhE@âžC˜*¥÷xqH¿L•ê=ú£5r¯�C’«�b@ à\Mø½Ìš€°Uúƒ:Äù»× Úâ,”~ß[²…nKª©�øI;Ô8€8$<  !º±ˆC’øe‚8ðƒ"–$j7Éá¡@�¼DÀýÄA²&Da›=âP¢úâî@²²ŸAÒƒÄ!Iü øÉ8G_WáX“\@×!âpuÉ®×8€8d{ƒƒ8¤‡0ˆCzøe¤6ˆCF`D#@ �‡€8€8äÓ¶qHo5@ÒÃϬ�\ Í €@A!â�qP.ðqÈôaqHÑ"&©„(»þƒ8¤·Q  ÄAùT›ŽÕ¦¶“­Á ˜âJ*²Ž“ÎÜWÖ[þN© IDAT”×Ì�·î›C.G\¤Ä!�ƒŸ<€8är£o €ÈWÜKT.¿êȆ²-ª’þm”t‘JT%éÊ©êqšß‰CºÆ¢�޼“¯;*õqéµßs‡”€,Bâ�‰Ct•<$R}%ãÇ�È;¥NP !`³�*Ú@�Xa:oßÛDÕŒ„/ܪ’@�áHø#õá²r㯩Ê× ¡Öãf¾Nã IÁµíÅËí6Ô³·Â&Æz‚8¤†u‘‡Øää@Å’…èŸùðß5I=Onî/ÑßS[â›k�8dU´ €M ’ s´ ò'Ö>JtA߉œS¸{öŠôg“Ùœy‘.FÉάˆ‰ƒóÃdÉýW·™Àã âvBK ¸'»UQ ܈€{M• RpÍ¥ŸMß`.KìïRJÅR)¢’¿ÙHL„ÅÄl粎÷X¢1ß„BJk”¨Ãþ{‘‡ÔˆCŸL  ²‚€[‰C:`ha4U¡4žˆCê+r�Ô—êú¤>÷×qp¼†ñ™0Ur<T@ �ç€88_ B'%6I>r‹Ò»�@Üb·Î7@×(2âÀ+‘î# Ä!�÷3†€y†@ºoÝ<›NRÃIOãÀÖÚuÂo Iã�kâÒ�Ô6Ž[ÈeÄ!S\1�LjCêÛ 5�@ ØHç�ëV¬œ‡hcšh�ƒj ÄÁ­»¡°Æ�ÿÄÁ ?øt8c²~±å@ ë`6@ �MŠ‘80žÉ‘‡«èXQWu@W'«ãçè(�ƒ,'SEÙœ �×ÄÁŒ@¤“¨Ä QœD:vu,íÑ œ>Æâi:2Ž5';� €È"N߸Yг¦�èFÎ*©ÒÉ‘.y=:%%ž˜0ï‰/KéHöb4•™ÙëØÇã¬Ï+Ä!®Œ–îøP?¸–8\Ù¢1²½J½¢>ò§¨„)öÂôÌú$>–ºìUâ ºI¾…l,(Ú@ �O¸–8ˆáL ¾N¬¾y=bú0ï9õ7v¹"�Œ¡“›e`ÄšF)ùF÷¯ü0¬�3œ¢‰ƒmNæ·ÎÚËÀtÑD’¸’8(B­7U‰Ä;¶ï`•íÑcÙˆ\.ŠJX?Ùv¿•I0Ѧ�Oâá2‘änD1 €(8\MR¼½¿ªq°Ë ñnKæ0eS㑼þB‰G*!mº×˜á0�‰Ûò�ÇÃr•"ü/÷‡ãK6»i#_%vòàîSp8fBî ±‰Pd/g†8D“ƒKû÷úC—îq,ôm…ù €P¸W Lt�xý ÇêTKñd‡«èhâ`™å†8DÂÊ"Ã$!†ES5êhë�«&R7HQfUÝVLY“Y¤¾8ÙAÀ=Ä!ÖÈ$Ʀ‹XÌ÷ªÆÁbúW7{|U¤ÚÂqn®áð7ib³Egg)Ñ*@�üCÀ�Ä!V`u&ÀZbp¬ð«yˆO¸Ct75¹ëÌLi„¸\7m±ì�Qc»®pü1[‡kˆƒð,wîœü;�™‘KˆƒòQPÛO9Q憵 ç¼™=¬J³9ÛDo¿˜“p� cÔvSíôg“µPv/ŠÔt©ÕÊìVAk@ œ#àNñÏõM>q^ÍQ¿ºr«~vÖµ&Ë/ÊH%ûÜô±ÿÕq°ËCV+"?E[�GuÏœ!â �Iׯ5­y9ÌýÚô3òçëIÉu£·K`Ö÷�¥œŸÞ«5\A´ªLm0c“¥236•ì öOvuü­c§ÐªJ⛄D~ úÅÕ.hg¥4§Ó·VÌÄvA@ œ!à^âpƒäl\LÞ$ŠZ¢Eb�5JÖ·ù ¢:]Ûªáã�x•beŸ˜Ûcú"a…•Oƒ¾ õx=äõrÔ'{FÉ>–€¯d–ó–ùÙÀ�òưä'q¸.”�ȈW&+-ǨL¢µ=‰W%1‚ÅXÂ%ÄÁØ€¦Ó³rÌQÆwƲé*é-&lns?^Õ $eJdúc‰†ÖF”è�½•¸}ƒÓ\¿Ç¢yŽQŽoŒ“#}^·Íu¹øÍ'5¿bÜý˜3@dwã"2mt≴–<+B·cä_¹ 3 Sv°KÒöÛxK<gå§èxžZ°}­Þ`†À¯d¥õ…"t~qN�@€‚Á E"aª¨(§êª**-õ‘¯ÔËÌBä2þ›9 Ck"M™aõ•ü¦ä"��’ñd¼,çE,ÌDÔ/1ÊsÛæ¥°–îÔ¿üÿ"FÂr�¬ü2ø_kµGPSl'íÕ-Æ\@CŒ�GmbÞ ¼‘™ùjuVÔ¹Œˆ™Gðès –NÖÑŒu8Ьãm%+ÊA4çÕVïC«uèô�‰ÖlØXB\=›u¤dó«ƒv½ÖA•±xEô @ŠñhcÎ@�ü@À­Äáê�u2xÆ…k.ülw�JÆÑ‘Š" …( Ë-?ÿçõxˆoø}>y$·ƒ‡’¡Õ»_4"4«‹DSfÑ… yIK.`Á\ î*o„°¹%…ÂL.é`ÿ€Ö76èì4 š‡æ–&êlo£ªêJªª¬PÚ!aaBÑ¡[¯&9šš$JŽž "cz9’“Ç�ñ íËjÌ)bŒ;)‘þÃŒ[8DŠ�Ïç5å@½j±ÄÁ”!“YV”1Èkâ`nªQX6Ñåe�.‚!º¸¸”Ã¥>Pê{fÀee¥ä3TiDÌ€™P¨yÇn»˜mjb6IrÄ!ÞãÑ®1˜±ŽLPâ1™·r�0È�~(ØT*ºM"Œå8e¿]ˆg�“€·�€»‰CBƒ›+pZ2E¡ÿ¨…_Ú€ïY¾a!Ýâ§“¿’q"ªªª�oøËËË„HˆÄ ‚´òédÒÀ³PãòT“ËSÂèܼñ7¤,›5‡–»„’x¼¼ ÑѱŸ–—–éË—¯´°'Âùèè=yü�Z𛍡¡^~Ç_újÕÒ˜‚—º5númálä"8 Ñùù…ôÇäÈçóQyy9•ú¼äõäÈ·�aGŒÏ�èüìŒ..¸þ…È~••TVêSæT"÷±™•þD¯Ëu¶·}NÜÒ_^“ùFJ((ª² íîíÓîþÒéé¹RG•”ÈÆÒNÑš8TV”Ëæ©–§X1 uàÔñˆýhæý·S +Õ”y”ò¯ˆn7**�¡=0T Ä,™7úÙéCA¹a¨¨¬ ŠòròòÍ‚Gk,ö®µVVmk¤q0T™1ìÄÁ-Çã@ÅKäjÓZH1ýQª�×+ßCa œž Q8<:¢ƒÃ#::<¦££c•'!¡Êª ª©©¦Æ†zÒë멲ªR.I¹u.wvz*¦D,({}^ª(¯ ²ò2!–Ÿ€11²¸Ù#Q*Hi <^Ÿ�™ýý#šžš¡ÿýï´½³Máp�ž>yLþñ†Ú;Ú¨¹¹QnûCa¾ÌÕäDÍ=Ö\Jä:uƒk þgä÷ŸÒææŠö¤ºªšÚÛ[©®®–ª«*¨Dn~Y«b\þ¤!Žˆ,¸µ¹Eûû{t~¢ÕÕÙNõuuTÅu#C[a'ze@œ=kòš8¨©°Ò©„ÎσÂz§¦gifnž–ÒÞÁy½Þ([6Þ¬Òc ²¦æFè§�þ^êìè ††:Õ¬a�gèÔLÔâë ´ àu&qöZ6ò Ý)¢n”Y3f¾LØßÛ§íí:==¥ËË joo§æ–f9(¥e>óÁ¡ìõ¬í¥Ôv�†ê2–éƒ âàìp 4@¤�@±‡Ø‹G=ˆe6ýa�šoÔùû³óKZûý›æçèׯZY]!úôôÌ4Ibß¾·¶6S_oÝ»{—zº»¨¹©QHÁÅù9mnmÒúúo*/+ÿƒææfjhhPÖ>eÝÆ””Æ‚Mƒ”Ÿ„AäBÖGq˜ž¡w½£í�-Ñ„<}úˆþóç[îy¡PPí7`˜ôÁæk Ú0o`��Gd»Í­úúå+---‹ö µµEÈI_¯Ì›I’ְȤ=J6 œ^ÐÎö}ýö�–èèè€ÚÚZèåógÔ××#&SÊŒJùJh2gYr¤¿Ç‹©…ü'Â*=²9Žèë·qŸœ¢ÙÙy:<<¢šÚ:Ñ*”——*0Vyeóf)+-¥îîNêëé¡ááAêéî¦ú†Z*/+U6„†�]OpÕ‹Áf/x­3Mô£QqãhÕ„vÈa»A¾e¸8Òêê--ý¤ÃÃ!wïŽÒàÐÕ××ReU9…ƒ!ÃnÑp™Ò! d—ZþÚñÈ`EúZA•ŠR‰ÓöÆ\�@ ×5q�É«|tÅìÚˆVt||B›Û´°¸HSÓ3´³»+r 쥾2*--˃À©_™àø¼"Pß¿w�Fî ÓÐÐ ù¼^:??£ùùyšžžy¨¦¦†„\°›ìDØdÛ¨%úæÝÿjBÊÃ’‰ƒ—.Dãp,‡¿Þ½£ím&¬qxDþù–:˜8´4Q(¨ÍÇ�–…ˆ°cuHùl„Ãb‚äõ)ó!‘‰…ùOÏhkk‡>|ø›~Lþ ÝÝ]!#o^¿¢»wG¨¯·Û´á:"ûˆÆ†hoÿ˜~­ü¦>ÒâÂ<]^žIyÛ`Ÿ�6íbâÀZ‡ôŸyMx�=/Q‰—ü�3ÚÛ?¤ïã“499Mó‹Kt~vI]]]ÔÚÚJMM äñ–P(¤@@ÙòßÝÝ¡òÒRQY��ݧû÷Gitt˜šĦN6‘ͤG;ÏØ‰„!vÒ‘_F³v×ßf/d¯iSRšÎLJrq¢@àœffæhbb’¶¶¶èøø˜Þ¼}#²¹µ‘jª«(º "ì,¤<…ô04�1§a8„KwQ‘š,µd<­ô·Z@ p�b%%æí6“%$³]>_žž^Я•Uú>>A³ss´´´$BuMM­XðWUUµ–e¶¶6hscCÞë½==tì>½xþŒ*+*éââLü>~ü@5ÕÕTßPOÏž=‘‹H6Û)/çÛz™H™BX&DÚtˆ/ñµs´"9ì+pqyIûû'455Kýõ?ÚÞÞâÀþ üñš::ÚD8YV ž™Êÿ  ÓÙÙ��ŸÓùù9•úJÅÄŠý4øK]¦z(&:<<¦�ÿKß¿�ÓÒâ¢X]¼|ñœÆîߣ;wE‹¢îMÕe2›c1Xý½Có ?éÇ´¶ºJ5Õ•tgx€^¿~I½Ý]ÔØP'äKü/ŒÈSz‡Bã�ÚÓ*ÿ‰ƒ×'åÄ*¾ ß¾OÐ�3ôóçŠüþîÝ{Ôßß+ölŒµ ì`s~vN¿¯ÑÚÚoÚÚÜÛ¿Á�~9HÏŸ?¡®®N—}¯#˜NCÊP›q´$%ûë¸ÎJÝÅÚÓ]Ân('’¼Aôï%” ÿ^:;’ÿäœ~ü˜ÛÖÖ6�ŸÐþû'½xþ”ZÚ©¶Æ †�#�UìeäFäƒ(s(ŠVG[ˆuƈùÙcj[µ€@$F Ø‰ƒÊUà5‰ƒßF¿×7ivnž¾~ýF{û{tyyIííÔ×Û'¦6-ÍÍTV^.·ô‡Gr º¶¶&�aØ ©¿¿�îÝ¡’¯˜úüûï¿ôÄ' ©©Q„îûcw©¦F9TkÁÙ4„'eCbÜ@š&K²¤Êw”ûÛß;3qngg[L’4q`S¥Ö8ˆŸfÈP®pÀ§´¾¾)dcggGÆÖÙÕIÍMMrÙ«51lvÄ2Þ·¯“ôýû$Mý˜ýÌØØ=»W¾jk«©ÔçŠe?6I†B4·ð‹¦§çéß?ÑÞÞ.uwuÐÝÑ;ôìé#jokW™ª8nÛòvé 5‰·/JÄ �×Ä�Çʶƒ;öÄ1úË×ï455C¿×6¨ª²Š^½|E÷î�ÐÀ@�Ø^ÙÆNmúß¿×iee…>~ü‡æfçå0 öÓþ󇍸***Dˆ7Åév Q¬\ÿ«Â�É®c÷Å3ø{Ö5ÊæøÅ±ISTÚªHÅiæä)!E5<>“8LNNÑ—/ßhgg—ü~¿"/žRkkÕÔVÊadG!S)"7ª_>ëÌ)ôGÙÿEÌðeÁ“T^Q.DàÁØ}zôð!ÕÕU‹À«å\žÂ—Ÿ››tzvN•UUÔØXO­­�ä÷³Ãýý÷¿ôîÝ_â8Í€çÏŸÒý{w¥­ŠŠ2e.dšZëèF6뉹o<ñŸÓÊêoúôé Í/,H$¡öö6zøpŒFG†éÎ�!vKن߸Ödÿ€Ë`Pä–q|¥eb]Á²ÊúÆýüõ›æÅÏ�£G²¹R__7uv´‹¯d]]�È� �TS[+òÊææ&���S(ŸˆÚÚZ:>:¢#Žìtp [ZZ¨¶¶ŽJKËimõ7ýóÏ?´»·#&IOŸ>çèV&ML‚*˜‹áhͦDL�¾ÿAÓÓ³47;K�]ôôéìK%�¨ âËË­®nÑÜì‚ê‡5µÕtwt˜^½zFmmm"‹©KSExNÏÎèßO_éÛ÷I!&L|ž?{"2!÷Á2”È>Ò‹!³Ýþö/¸ÝCÙ„Ÿ¿|¥©Ó´±¾M5Õ5ôêÕKµI†zÅAš üì\´¿wH[[»ôîýGš˜ø!­¥¥™þïÿþCw†‡D ßÛÛ§ù…%Z\Z¦å¥%ÚÝÛ¥ýƒ}iƒ½øù°õôtÓãÇʼnÕrU••†ß�ŠDÀ¬zcsKÆ5=5E[ÛÛ´¿¿/ÉKÊ+Ê$TYww7�ŒŽPsG(£å¥úöm’¶·÷ĶOºÃa ƶ|¾Òª­«V>2r‡ž<~DMMÍb:µ¿(„áÇÔ4Mþ»{{r8¸.×abôàáêíí¡Æ†Qñ©C­|4´ÆA¹L€9ÜÉÆ„€y‚@QÃTY„\6QæÐ¦Á0mníÑìü’8óþ^_—K<& 쬄ýVŠ„Ã¢!Ð e͈ˆìL\â¡pÄ#2Çô̼Š™�[aŸÍ�½FxzëÎ2Qii µ´6Ó“Ç�éÎ�;ÔÙÕ%òûDpXûó³ êììeuõ­¬ü¢ååeÉ%1:z�†††©§§—ŽŽ�èÛׯb ^г§Oè¿ÿýS4�6âÀó•ùBöh||†~LÍÐìÌŒö½âÐÇ%Òs¾¶r:Ø?3ô÷ïÞË8¡K ?þx%r–¹$§W0"DŠå»oß¿I8V¾Øýó�×tÿÞ(õtwЦ…µ#:�pThÜ<9n†{ˆƒÿ4Jã°þ{“ª«jDãÀÏCƒ=TÆÄá2(B¿Ï룽ý#!½ûHã㓲A[[šéíÛWÔÑÞF~ÿ‰„>›žž“Hì¼Ãê/ööW‘Tt&¶d5" ãlsÇu++Ê„!ŸÑÂÂ"MMMÓúúmom“�S°û|ä‘4éåéBTl��ÔÚÒ&`ssGìòvwö$Z;K±£ç›à¨¾2�¨{{ºéÎ�azøð¡˜bІ‚UÆuwwOœ§8&´JÀ¢LªXSÑ××KCƒƒB<•3’p�áш�ÞàÆ³‹1 \�@QÃéQ›*KFhb›|�]\Šv`jzŽþþû‰¦ØP_/‚.û$´··Pc}­a.­L�µ¥ÂP‘*ñ‰¦�–ÙObnnQ¬&8Jk*øÒ“óXñÅe©Ï#>�?¤á¡!êèì¤ß¿7Å'€Í¹÷÷Äú‚µ§e½ÀfB,ÃÜ¥¾¾~jkm%¾œüüé“\®rЕúŸÿüIímÍö^åq0ÒØäEL²&fÕ8YãÐÙ.šŠáÁ~è5¶Ut¥:;½+‘�ïÿ¦¹¹9!)}½]ôæíK ®în‘wX�9: Ðöö>½ÿ�&üq‘ïÞ¼”K^&4e¥^ñmP Ú}:<:­ ÿ;;{á‰íëêĬ©¼Â'}2Ùèïï§‘;#tÉ�Ÿ?ibr’¾}ý&¬¾¼¼BìÙYŠ…Ø’�Â~¿¨‡‡E+ÓÛÛ-6‚¬Q‰PtX2ý8Jg¡.@�ø q…¾¾G7b¯H4%lâõ‘ÿôœffibbŠ>}ú$æ@l²ópì={úXlòYà—›x ñ¨‚´h¡—C¹*û~Ÿä=˜™�§ùù%ZXX?ɽý}¹`dóäÚºj‰0TZêS"¶ùïë룖–6 Ï¡O—iuí·ôÃþžɈ}+˜H°¥ÂÀà uttPMMmllÐßÿ-¼Îãðço©Ýðq¸¼rŒš¸×WB»{419O33<Î9¹te‡ÁÁ>èïVáQ9L«×§üYÉ#òÐ?¢ÉÉ´¼´Hmí-ôêõsÉT=84(ZŸ·„Ö7öieeƒ>¼/$ƒ­5z{ºD¾c�çñâ1°Y•™[ÂÜž é<«ÜCg´»w(ÎÑUimm�ª*«E(~06JCÃÝ’qYi " F$¶/ûüûù‹,fÝýôúÕsjnjÍ‚ûææ6UVVSK {àWPee¹Ä.ÎhnnV„õƒƒ=±äM96vWÊq’–¥¥5!ÿüó/ÕÕ±SR«ü�Õk|Ø™ÈÊ‚míX˜gu[ÀF››»r[Àöbk Ó½{wihx€ššj„8TVrD„ *õ•K’˜ñïã)Šý)z{{EõØ&Œ¿ž‚—a:9>¥åŸ?ium•¶·¶¤�GÐèèº3<(±�Y+¡,«BÕöÁ1Jç¡.@ÄCÀ~Ïç/ßsšYØNDà—_μ^Ÿ\€NLN‹Ä·oßåý{wt„ŒÝ¥Gî©KòRã¥Ì!D•u€õQÄ��¬ÏÎ.$ÓôÚÚ&-ÿ\“ÐîÓÓÓT__OM��4|gˆz{»¨²²L"+ñÅauu�ø+,.þ¤�ÿ¦ÙÙ9Z\ú)¡ß9YÜ�¡èïÇë†ú:ª­¯¥²²rº¸ ÉxÏÎÑ{»2&6Ÿþã�7bþÍe÷÷d<çl©!¯¯T¢=--¯¨Äv++Ÿ-7º:Û”I–q‰YQQ)ßuu b:Å!÷9Ÿ;Ž×ÔTJt¨{÷ïÒ½{÷©¦†óvùhqa�ææ~Ò§OÿˆYSWW‡È]Ξ}YÙzƒe.Kão·AòIå æ=q`Û7þòÎiwÿHˆÃää ýZY£²Òrq´¤þþvr,‘ðaœãaI�—i~~Qlí8’‡/{öì±�¾•çpa¬9` æ–aç¬ ;¿‘ÿä”&&ÆéÇ�B xrÝG�Æ$¶°?pJ³³KBþý÷³ä”’¨HÆî‰É3Ý‹‹sñþç)¥e¥¢y8;»¤ƒýcÑ |üûqVbâðÇoéÙó§ÔÑÑHõõ5 Ed;;ûºõÃÇ¿EÂŽÞÏž=S­¦¦Z1kº¼d›?&3Ê”éû·¯¢Rdߣ‡c†Vü3øCÌšTè4�  €7#�ŽðŸNÝ\¬KºÄ�“®IäEþòøèè$@_¿Žù¨&%A-¿›9rÐØ½¹íçà+êFOE?dò .øtøx•B"qއ�úõkƒþùôY,Z[ZÄ áÅ‹g¢e`Á»¢¢Tª³@qd–%8RÒÂü‚äŒ`Ÿö?xôà¾h(Ø*ƒM·%€Ìþ1ýø1Kÿûßÿ$9_Šjâ IýúõK.5�ONéü¼O��‰³ôùù%-,­Ht>„MMMâdôâåsy°GEy©ŠoÌ1„E%硟5ûûGrëÀaÔ4qøóÏ?$ŒZ{{“¨ù s9Öž°zóß>‰twO·¤|þü±Ø"òŸ ޏ´¾¾%déÓ¿ÿÐÉñ¡Øú=|pŸÞ¼~Iµµ5â!ÄAµÂT)•ƒƒ:@�bC ]Á?Ýú·�wjÄAÍR25Û4L�ôåó8}Ÿ é©iÑ.p4¥‡cwEëÀ¦Bœ;AB­›Ñu˜Tƒ<¨9s2‡1ÝÚÚ§åŸëryÉZ–‡:;Ú„8¨ülµP.„ƒA²S1;Sxÿ‘æææéçÏe1¿~ø`Œîß¡‘a•l�åNªËrÎçq˜š¥ÿqÇ‹�ßÿy+¡œáúëׯÄáå·wöèø8@o…Âò\òj�ŸŸJ®-6Åb߃²Rvr‰/hWwõ÷õÑØƒÔÚÚNÇG~š_X¤÷ïß“ßLµu5B^¼xA-- T_WMÿüó•>úN‹Kóâ›ÁÎÚÜólÖ˜¨œWš8Äî<ˆtÎR^&:Eû)‡C&BØNðøØOõ *3b™—ˆ”Csð2(¤S/Á¹»»K«²ë¨B¢0щï‡õ œž‰o«Oü:::¦Õ•5±d¿æùìˆÍÄ�™9Û®ýÞRZƒþ6[V^&±“ïŒ SkKƒØ,ò!dm;,q¸TŽCÌD�£#]%*�›qÂvÀæƒ87¿$qŸ?þ*áÔ8�üèèݽ;$ó0¢ É¼Ù)|uõ7Mާ€ÿ„š›êåáÄjEV)ò!×¶…Úi¼;�c„º@�ÂF Vôr HeuR'FôBI"käp`�ÃQ€>™�lÑSSS6âp�=¸+vúb^ôÃÈ)%tA,´]±’‹ø’Í�67÷hiy�þe�ÃÇ¿©­µ™º˜8p‡û*�¶hà ÍÁP ÍÎ.лhqa�ÖVWèÑ£ôòå31Uêïí’3œxŽ/Ï/ â0=K½{O;’9:¤Â±ÚˆË2öž­#ŽOTâáÜ‘­8{ôùù™È@.¶¬Œ‰t *âÐÕ)þ÷îß§ŽŽN©ÇfæýõŽ6·6) Ñýû÷èÍkÎÑ,!çßýõ‘þýç3mm­S …%*Õƒ‡÷%  ‡áxýú ö÷RoW‡‘¼V‡ h¦gæèÝ»÷’š/(Ÿ°ÆáÏ7’3Š}79¢$'éåu——l]Q.rͯ•U¹xÝX_§†Æ:ñåËÜÖ–FÓT‰},¸�†ÆFªªªÙŒëqÄ$ÖˆìííÑÝ»wéí›·âGZ_ÏÄá�Dy:;óSUU9½}Ã6ïIÛ¬Õ`r£“â^¿rN©aâ=P %òVã X¶r⬋'�s¹Iÿú}’&ÌÈ <'^c�œ5uµäózä|±ú�£ pˆ0NÛÎ!Κ››¨¼Œ g$ñƒàÀœ|…wÖ76hccSÀ1;ÿ�ø"°ã2‡(cÿ€»£CÂÎY+Àáâ2D¿oÐÏŸ¿$™ËâÂù~q†fMGIêéî2¿8ª û6–M¡X½ÇfN�öqˆ›*±�C{G‹ØrßëÛ4ùcŽ&ÆÈMkR˜Q³=$Ûª¼ÔêÁ¢Â¿†Ä)›}+ø@ötuÈÉ I}]�øY˜™£�èJÐ8ÃqÇ�©!àf'çÔflYÄ'û~´ˆ÷(ÆFÊÇAä å=99Kã?èÛw¾ŒÐÝ‘;b¦Ä– |9É›–¾Â "ò 6Y’ÄKÊÀØÈWe‡/¢qàð¨Ý]LžÐ½»Lª%p 'Ÿcâp$¹x}ÿáý\^¢õõ5zúä!½~ÅÄ¡‡º»:Œ(D*›„³�GŸd�61züøýùÇ1�’H”bŽt!ýp.Nt»·(õæçhiiA„zißßß#�D+@a ±ÊfWœãŠë1òk¿Ùüê‹„qå5CCCôêå+ñ…`’Áєƿ“”LB^½|.&Wõ õâßÀÖ'ñµ öÝâ�ÊÙp q8fâ°w(9ëÏ_kâ—ÀÎ2£#Ô×Û*Ä€…oV鱺�íþY5Æ·îìpÄj7÷ÅÌû€ý~­ÒÌì¬xî³:��X°ïèì�Iµ‰ý$66¶haa^ñÑÑaƒ8<“Û{~0°pÏNÖ\î÷ú†8d3ÙÛß“ð¨lªÄfhp€îÞ¥cc’ëÁr"IX>|üH¿Ò8¼eçègO¨³³U|˜½¯ÿÞ¢‰Iç4MLN‰Ý!;$±Ùg†æƒ'ÄÝ&—�!D5UU’´np ŸFGF¨ºªJÌ¥´ÆAm•Ï €ñqH¼/ìQ•¢ó8°^J Ǻ$ïqΣÀ2E__�‡gOªÈGU"W„øEn¼ŸEÛÀÿq(V&r§ª4›ìã°¼NÿüûY’ÊqxT¶2`_IåãPm$B#1U:¿dâ0/>ËË‹´±±FO? W¯^ÐÐ@/õtuª|Pæ;LB´¿LSÓìýNù8D"âçÉáéÕÅl£Ê{%rs6£âä¸41>+ÚŠ……Y SϯÃC:�ƒ’]xN\‡µ3l&Å?s¸Ù‰‰ñ›à5]]œˆ÷ 5ÔÕI´Iö᜙™¢îÎ6è‘<ìàͶì'¢4LÜnZ7‡Ä»új ×Ö8pT¥¯ßÆijjFR¶óæá<ŒÐð�Ž5�ŸÀžøƒ7$‡iõûÏ$ÉÈ�É)Z\Z¢µµ5ª««£nä©KBy±ÃO­®­ÓòÒOúþý;�œ £Õö€|ÈYâ‡8Ëc˜ŽOüttt"æJJƒ±%Y¤÷v÷„¡775ÑÝ‘zùò…¨ÚøÀ|ýö�>¼ÿ ă‰û!HT¥NNõ®L•66vhjz^¸MLLReE%ñÙüª»»C‘vÄó#½Èê΢¢¬LT•-MM’ÂM¸ØTJ™)Yñ¡AR9>¨€(@¯s4q(ƒ ¹�'uÏþ?­‹Î&Êœí™e�ûwGèå‹gÔÑÞJ�MõâßÀB¸þ¨vUFfËT‰ÛTÄáçÏ “8ð­~Wg½|¡|Ør�͹ùà ÚÎ/ â 5†©ÒËç’_¡§«Ë¸xŒH>,¶ªØÛ;¡Ó3ô¿ÿÇÎÑ*ªk4q`‡eI@+˜ŠÔðåîî>}ÿ>#ó�Ÿ›¥ŽÎ61‹ Á�>åk)™�•&…­K�ðHP˜……_¢�ùüù‹äÙ¦ªÊ*1·ž™ž¢µÕ_422$– l–Å æXcÃ8IÔȨ¤oñÖÄ!ñ®v!qÇ"6U:å�`GôùË7ú15­ò8T1qxIcc£tg¨G²9‡ â Lw” {× £õx%L+g“æL‹ÿóI2/³vâÞý{ôâå jmm¢ú†¢ˆG 瘙ž¥ÏŸ?ÓáÑ�ŽÜ±ˆCSƒìK‰V ìV©è‚¡ ˜*mïì Áùúõ­®¬ÐÅù9õõôHUvb�ž É»÷ï)à?MÈŸ¾•›‚ŽŽª­«5áÖöÍÍ-‹Æ�‰FcC#�pìçwiìÁ=3¹‰Ò"Øn)dîD>ɤÍÎHê@ñÄ!•ã‚:@�âDÄ!ñºG'€c¹C‘E|t K°NÚöþÃGú½¶&òÂèÈ0½}óZnÌYøe�Zˆƒ ºv�Vïo&*ÕëóÒÖöýü¥2A³Ù3‡"íâèŽ/žH ÎMÅIÓx0*«&ïiyy‰6ÖYãÀ¦JÏih O̪ù2”E o©&*ëÿ3ñ’Ôyûö ut4K¤#vt–葆Æ�->q˜¦©éšŸ×™£Iˆxöu`Ò AlŒäo,?1AbBtâ?“KSöí|ÿþ#y=l’Ô&‘™X¦ÛØøMÇGôøñ˜‘;«_2GÖ\¦™’%�8$ÞÁÉ•È�ƒÄ2*‘Œ‹Š8pæèiqfVÄá•$€ê‘HI¡`Ȱ÷·h­cÂ~k¿7%´ØÇÿÐñÉ ÕÕ×Ñã'�é�?þÒÀŽ6͈ó;pr6ÖpŒ�³ÆáD’µh6âˆL—ÁKqž.¯àxÉ•ò°àƒÏ¡×XëÀÂþüì¥ò vçÄn6â`h8Ú@‰ØF*ó- L¨ƒ©q€¶!¹Ã‚R@�bEÄ!É•7¤•v@ßë•P‰×'N¿lñ°º¶&¶ýßÜØž‡ŒD­w†å}βñªaüâü’ö÷ö$  ËUÕÕÔÒÚB''ç´±¹'²û-°eçeà(IœŒ¶Æ <ž(âÀŽÇË‹´¾±JO?2�£ÙTÉðÅS(6UÚÛ?9ˆM•vww„¸¨<¯©£½…ZZê­°ó†7Godâ0>>MÓ3Š8tt¶K‚¶ÁÁ~ƒ8¨d´Jã .‰ù‹5œHîðÀ/>­ïß}”€/l£¥¬+B¼¼ ŸÏ#!éÙ‡“-0j-çô¸Ñ”bׇ$wuT±¼'|ÃaE8ªÒ&Ó3ô{�‰Cµ©qèU9‚A#E»ÚÂ_ û9þ‰íÊÊošü1-ŒŸÃ¯¶wtÐÓgOé�?þ¤êêr*-+¡³³ Ä"fÓ 1633#áÄî�ŽÒÃGèù³§bKç÷ûé\B��KæEŽ · %œDŽ�Š%^³þâ˜ÇÏ_<§á¡! ûãǤD8<<-Å›7¯ÅÇ¡»»U"ðƒ†ÃÎrn†‰ÉôñÃßâSÁÎßÏž?£7oÞHBv€RaY­¸ÅâB%ªCŽìP"ÎãJÛ ˆƒÂ'/ƒj¥²—Q ²„ˆC*ÀŠ{´¼sÙ~_²>GJhgg—¾}Ÿ ññ šœü!fѽ==ôðáCIjË_ØÇQù+ò;;BG‡G’šM¡Ù'³µµ�î��IéÃÃýûé“D=âdj---ôêõ ÉßÄ™–9ËBš8ÌŠ�ÃZ^^ õõUzöô‘äyèëke™ ‚Óp2·ýƒqræHFu2ÉÅ%›Vw´5SsK=…u¾*ƒ8øJKiowŸ&$ æ,ÍÏÏ™¦JLúûzMÿLÑ4D¹âpõÜ/�õüAŸ½ý9ÊÀÞî.µ¶µI”§N_Q!aQ÷ö÷%ÉÊêÊ*ìïSG{‡˜*õõ÷IX1&œqee�¶·w$âûQ°©'1áÃÇ*N>L«k¿éû÷ Éθ³½#™ªÅ.’CͲz�4�À ���ÊáâHPí­-2�(L ˜\¨lj‡RÙR¨€…†ˆC*+ªˆƒú(„…bÎãĹ–ffçèÛ·q Ï~’mmíB Xæw6›"±�Oayä×ÏŸttt(ŽÇ}ýýôôùsª®©£P¨DüÞ½ÿ ¦?ì_0öà¾$C«ª*?‡ºÚZª¬¬¦ÒÒJZX\¢�âã`h̨J}ÔÝÕ•¥úü"D‡~šåp¬ï?q ü4vÿ½|ùœúúº$Šgi– +–v¯Xx°\Ã~ûû»TS]MmìÇÑP/!ëÍе¢IPu´ÖArx…‰–—~ѧOßinŽ#3-Ñià„..ÎĬkph@ÂÎrÖhv–ós%MÉ’Õw°»p²»óš8ÈQó¨tí'þSÚÛ?0ˆÃ´ó•UUôö-‡{44ØK•lª ¾  ‰@"-y%[4Ggš›_¤þ–Ü œè�U~,„sžV²S3‚Í�M:8< Ÿ×'™m9ž0¾5øúå -..ÒÏ_¿Ä|¨§·WÅnh ¿ÿD;Ç!>::-Á�;wDKÐÝÕEµuµ4?7/9 X«±°°D��ÔÑÑ&¾L8Ü*ßp*v~Ø,..ÑÄÄñ�àCƦQ==ÝR¯¼¼B.G=8>> Ë‹ •Ɖï†ú¥“ ß86ˆÎŒ“3ƒ²@�¢CÄÁù’‹}½ë#¡�”Â$�sDýü¹"¹™8“3aá›wιÀ&Í,“pU6ÛÙÛÙ¥½=þR�VêëDyýæ µ´¶SEEµ´ÃQ•XH?:>¢ÞÞ^ñ—`K ŽÀÈïÖRÔ74ÓʯE~ZQ•ØÇa€åMDšP¦JG'Ü9Ó¯_?e,ÃÃâ ÍÎÉÃä+e_JÖ¨Ád#ÊÌÜ kÄÎÞêÒRYq±üaø�äÆo)ñˆƒµ×롵µ šœ˜SÑ•&'éðð€NOOTÆí‡÷éÑ£‡’Ø·²’s`pœK# ®öç¼Éª绚(bè%¦Æ��ÙÇaeuM„|Ñ8ŒÝ£;ƒý†�ƒaª¤Ì mLR…ûâ¨Ì‚×7¶hzšóA,ˆÀ …Tžã‹Ã¥²sÎDÍ›•Œ9¬)ÇFfŸ6OâÐ«ÜÆÜÜ]²E$Bœ±LrE°-"oäêêjêïï¥;ÃÃt÷Þ¨‘ˆ­Lr@p†DMØGƒWUu¹Š†ÔÒ,‡ùáÃGEŠsO,/ÿ¤™™9ÚÜØ¢í�*+åq—J´$þ\/$çlèïë¦c*›"ûTHd©PÈtW›æJ©Ô@  ÎWZiõ�hH¦™0›.Eè2e–E~þZ¡ÅÅŸ´µµC»»»â“È—|üÅמl&ÍšŽ9'çA�Ü55µä--“¤n|©¸¸´,«,Ãp(zŸ¾�å–ÁÁ!êêî£�õ ú÷ß”Æaý—áýB䎪¤²V󸽊”H�&9Ÿ>«¼ ËKK¢as£ÇOŠç•âÄk žë†âJ“`ˆb:µ�2„Òª Cï RQ¥q`‹��=Z^\¥ññIúòå ì‘ß$þ�Ïž>mCoo�„ÞW¬qHV¦qp¾«]@ôö:;» Ã£#a�sóó’/¡¢²’ž>yJwG‡i ¯G¿iÁÛÊή©"þ^aÀlªÃŽ6ì¸<Ë7þã¢N;>>–�Êö†mímÔÖÖFõõõ¢mX[[•¨Hím­t‡™ö“GbBÄ™ù ÎÎÍÑúú†dyfÁœ9÷[ê+¥¦¦ÉýàÁ}裎ö6*¯(—!òƒcw÷P|)xnÂæYÑÂñœ;»Úitd”^¼x!jL_imoïʃanvžfffÅÏ‚3Qó�å«ëø†¡»§K4 lúı�™Hp$‰Ñ¬]¤m!YSÙ@¨€…�ˆƒó5f@ç%0ó,±¢á? óE_Prpn*¾Äd‡éã£c øýrÁÇr¶>`¿H–!8Ÿç›jhlsf•0mƒ~ýZ“F¬Á`“&– <%aÉÁÂýÈè]èj̲ºú“¶6V%ß;-÷õöPG{»Èa&œõšý2È#ÉrÙAzjZùlr¤¦¦ÆzñÉxúô1Õ×ÕJÂY©Ë‘’¤žò©Ô9-HÌ™ Jal(^—U “ç}|ä—H˜|aüíëWƒ8K‚»G�É…,窲"Fª Üä> Éá]*ï5¼Ø$Ÿ…}>`lúsxtL§§§’i�³ò†­«©2òj2ó]1gá±FÈ/öâgÍFûû‡Š4œøé4pF'‹+•Û~öU`Á’1;ÿTVTHÌú9sãÙù…��ƒ£#ù—5ìûÀÑ–x쬥¨¯¯›¾¦æª­­‘[>Üîù9g¦¾'"žÛ:ŸIÖÉò2565ŠÖ�£$°Æ�”d²œŠ�Ÿ3U«<a9‘U•ò�á9ÔÕª¯ÊÊr*+-5ÂÃZ!ü7½`ÔʡB €@¡!PÌÄA߃§²¦Z Uf:Öõ;Ë%|…Ç÷xœèõÄ ýƒc:àwºß/~ bzVV ìÉ‘ëëk¨¾¡VÞñlÖÄ7ó,#gÒßÐïìíÓɱòudóè9r“ʺ\O硉oîÏ'bÝÒÒ( cY>QCUþ¥ì“QB^1­bEL¸·6Éë)+Ž”ÔÙÎæRåry+ùx@Æí­„Æ7>š@Hˆ| 9¥µ +Éþå{Ö8øèò"('û{û´»³Cì¼�Ëa55ÕjÌò±¢EÚ­Ä®®[¬lYÇÉÞÎ{â CŒ k7ˆN0¢¤`•¯�CŽ ‰—Ù«Tï²�ÔŸekæ¯ÕhÚt‰Ã ²Y±Æ�U|ìçÀydÿK}õ�ôcßà;fn¡SƒÁ $mcÿ&l>T]UIeå¥*j‰=ׂÊû Æ©4!œiúììL"ð�gp~8°³Ø6R²2 %Ä~ ì„}vΑBrðø±Ù׈$¶²Ò2DeQ4N–úÝu ÊÉ�BY €@!"PìÄÁéšêˆŽæ»Õ�#$ó³äbà×®Š\$Ñ– g`Ž&Ä—ƒ­‘üóE'9aÑÊfÈ|áÇ9𨂀_ãbD R¹GBÉËÅèé)]\^PY©Wä&>_*ŸO¹4”P¨,S0E°ÉÞͪ]6–bã—M´g§¦¯�‹e&ü¥²N[NáJ³v�™WËæ�,¦QZ®±Žâ°¬,÷pY•ÓB·*ŽØv÷ [ZÛpsð§ûÙ^>¯‰ƒÚÊyÆ ªíàŒßYЦèÇšNc®íìL¡Z”C&XˆE„‚Á�|y¼ìàã“©þ®}Å�UB9î“IˆPµÛ�L…œ´%Ba1UR› ý\ž«( Š2c²Ú5TB———’FêzJ¨ÔçSÚ UÙ03Rþr�ØV2R~ Æu÷ÇNE2aà*­»-­´á¤¤<™ÐâP¥s¨P Ph€88_Ñ«×núB“ß寭¼ä/P² þâ<-ïtN¨¦d¶\`ÙÄÃB?ó ¹=U2_:Šd¢oï9,{„/2UB6.Ãò;.sÛ– ‘PÃ×@ ÷ÆM«™(Vi´Ì¤„x–•‚Æ*ÉØXF1âÆš ±l¡ä/kÎZÅ …{Ñ*DÊØÈ¸žUõ 9GËe\Æ%®áX­;Ô÷È* �ò-Iî“l¹äZ+†RyO´c‘:F¨/Ã_oJ�SQ-˜ÚTê2];%z9¨ö¸¾JEÁõUögÎwÀê1Ž  ÚR¡K£7¡bºZS ¿Õ»&×Ò¿¹«õh#¦ó�ŠjĶ|Ѝ4éêA!¬Ü /š²˜ÈhS›ñ)G&+C¶©yÑšãï:ÚAs4ç«qy(†æ€H�b$Éà[ææ7g,qP&9Ú2‚-Ô-»2—°ßž[²‹!äÛœ®Uq Õô•$d^*ã‰/i”U>‘Úâ@]d–†|£->t�-јæGFk‘Q ÙÅÔ´Øä$-“É|lòˆ8@+&tå£ =Ôìù¸´w5GƒÂ@Í+¹HCr8E—Êkâ;!}KÏ¿†+,]o~» ]Sib}>RL L̓ºÍ·G@ÐÄÁîàdFVÓ»ÚŒ”`lbƒëÍwQD-gh$<[ôø4[Ö¡ÊôCÁ<å·ãÁíñÔš‹è[jÂh!ëð%g¦„–ÊC €@! â�ü*Úß–ñßœúTDw«amûo\hj9B ÜJÈ—7ºÍdÚ0¾ˆœ=’“E4t!–}¤ Ã* 3†ˆa\ZI´I¹àdSq3âŒa"eXWX víz¥¹^þQQšŒëqÕó´Ò2X¬FAY]Ø/Œ“_/”t†€+‰o- [KŠlIÔ IDATmûÏŠ«áÐD7ˆƒ!ð³ýžÁ JefFdÒ‰äT«Z#¡~0Œ„̘Ä6Õœ6eŠY­=±Æ¦ë*ö0™Š #׳�|\�§ùzR` \OàÚ}cƒ9ÛZ( €…‚ˆƒ³•tþæ¼*AkR ‚*Aß’?ì²Bœº¶KQ» Í³í”viÀ´¨(!1»ÖÖºŒú;k-tô$KÃ!‚»!¼Ç“Åœ!¨Òu&Göß‹ ¸¶Ö`’“´™’Ó¡¼¬q ¸†º h"s«_3=uË/ñ¬õµÛíi•™Ø£ £µVv¯Óçáʆ×cdÆomÏgÙÚò¬˜Ì'‘ù‘þûM[Àùã/1†(€nBÄÁÙj¥õæ4�-sj%ÍX2K|Mƒu©©ÍŸÑPZ‡›„ùxRÀ•ßi³›œbš&igg09*Kb+;ómpÔ5 Û(Hâ}8²Ã‹bwˉÛfkhÚZÞ×í>‹8hήKj“"mj¥o�°Ì�®›çuJÓd_i=þpØ€@ Hö�QSÍÈÒzsjâ`è±¢‰nÔ­KIûû?9â�èQþn®Ñ–F2ž,‡xs΄V##‹]d�¸–8Ømü,F}ÕY檩Ž3"aXÅ÷E¬·©Õ8¬ÈD×od{ô¢«»L›>Åû<µŠñªs¶eóxµeËÖñú½�èQKfŠì”`º@�"GÄÁÙH‹8]Ý$$M”9µ=„|´³£ÙL"û»Yµò‘P2‘ùû,‡«–$±j¡�¿gׇäApF’mWmdëÆßÒ@ÜÜÂu¦wö³í€ÛžETìÚ†kžf(ÛÔHƒ�0À9:Ù½�r@�BCÄÁÙŠf‚8è‹JÑc^ò‰µÎdŸ„ÄA F�`�í°mæÔŠvõvØ ¥oò_…Ö!c0'ÝPÅŠ‹û“Îü3õø+îÀì�nFÄÁÙê¹íÍ™ˆ8$š½Ûæ›h>øûõ q(Æ-�©Ç<Ÿ{0g €€�L½QŠU·½9AŠeg¦?O‡ô1ÌãÒ}ðÔÜöøËãåÀЀ.EÄÁÙ¹íÍ™®´à¶ù:[M”¶#âPÐû!ÝGˆCAoL �$ Ies› �®´à¶ù:[M”q(š=�©G��@ x˜(@€88Û n¤ÓYß낾;C ¥Ý‚4nY©”ÆëíÄI:6Š¢*¥´¨€ÈNžè™B®úÍä²Ý–›‰c“ìCRÈöNÊ¿öAòoM28¢T‰\4€È8É v™î8WýfzÙnÏíÄ!U|pŘ*rî©âàžµJc¤é<êñHxT@d�tžèé&—}§;öÛ¬ï6âàDËGH ·¹»rÛˆCnñ¿¥ÞS}ÔãQpK „n€I!�ª9©ÆQ(c¸‘8¤C -dlëä}C y¿D @…ˆƒ;v‚[‰ƒ;ÐÅ(s‰ˆC.ÑGß@  �NôÝ hš€8¤ ªç- y»4@�h@ܱ#@ܱN¥s@œc†@ r‚ˆCN`wÜ)ˆƒcÈPÁ%€8¸d¡0L € îØ îX'ŒÒ9 Î1C €9AÄ!'°;îÄÁ1d¨à@\²P&@wìw¬Fé瘡@�œ â�Øw âà2Tp  .Y(  €ˆƒ;öˆƒ;Ö £tŽˆƒsÌP €@NqÈ ìŽ;qp *¸—,† €@ÄÁ{ÄÁë„Q:GÄÁ9f¨€@ '€8ävÇ�‚88† \‚ˆƒK Ã@  ‰ƒ�@•üCÄ!ÿÖ#Ê  ™Á­ ®E �˜‡í‘9"%Z,Í\›h)³€8dO´¦Hç]R’¡çˆv#@ ˤó°ÏòÐм š!!À…ÓwÍ�A\³T®h:ï×,3 €@ 3˜¦JÐbeÐ,·ÝP–.²æ3%ü§4é ‡º@ n;q€Ü-ï°+h†âI!â�L(€@0 îØ îX'·�ÄÁm+†ñ €È!ÇšCð“ìÚnžS¥$AC1× S%×, €ÅŽ€&úææJùµ#b‰ˆC~­�ÛG“Žst¦æž3âÀ“‡Ãi…–Êh €€qÈÿU‚Æ!ÿרFÈ—ú‹çkÆ”-’‘6qHu`\/ yÀ � ©>o’ie€€05 ǚס¼^׎I‚Çã1¿âù>dë}™Uâ ™�¼Ö0ðÏö/ׯ &€À­ �­á­ �� â�o¡ ‡[¹È»ÐäAkì?gš¬fDš$h ƒþ9›CÛ@ …·¦˜‘3@œá•«Ò ¹B¾¸úµk´B û¿™D%ëÄ�'¥5 ü¯þbÀn›•ÉI¡-  ‡Â\WÌ*y@’Ç*—%Ar‰~qöm÷yÐß3™Ð"SïϬ½tvGh»¹ˆCqnn̤Š@¦|©ö�z@ ×€8äz’ëÄ!9œP*=â½™,Ø} bÝÒë‘(«Ä!6r’ž ^þé.ê�âDÏŽâ\wÌÚBÄÁ»ÄÁëäÖQÚM”ì²µ¶æaòàõzÅy:n™ÇNনIܺe1n �ðÌÈ îè5qÈŸµ¸i$ îX'·Ž2^%mÑ£‰‚�8ð<3•u:m�ƒ];<ÇFNrë¢`Ü@ä�ƒÜàŽ^Ý�ˆƒ;Ö ÄÁëTh£Ô;Q° »‹€ý¢ß ©H›8˜Ù+�„nöÈI™d8…¶¸˜ñqÀÎ×#âàŽÝâàŽu*–Q²¬îóùLÓ%ž7ˆC±¬>æ  ‡_`L/-@Ò‚ïÖ*ƒ8ÜÔè( @’ E€p' î\7Œúvq¸œÓíÄ!]Q?“€8dM´€@^!â�WË�Áä y¶ × ÄÁëT,£q(–•Æ<�@"âP„‹Ž)'�ˆCÒPå´ ˆCNáGç1€8`K P°€8ìÒbb@Ä! ÞB ·2ºH�Œ‡ÓÓÓH:/jDUJzÝP�4Hç9•F·¨ ò ‡¼ZŽkâàŽu*–Q‚8ËJcž@D!ò€ Qì€8¸c€8¸c�Še” ŲҘ' Ø@À†ˆƒ;¶ˆƒ;Ö©XFyqpŠA L•œB†ò@ä hr…<úÍ@òe%nˆƒ;Ö©XFÉÄÁëõš àøçTß§ Ųk0O P¤ú +€©c @@qpÇFqpÇ:Ë(™(ð—Çã‰ÊÍówJ"@Še×`ž@ q(€EÄÒBÄ!-øn­2ˆÃ­A�Ž’D –8èàFö GÉ4â� J(€@^ â�Ë€A䇂ï k&š<8¨†¢@ «ØÉk´Æ�ÿMöý â�Õ%Bã@d�dl™ìm�|BÄ!ŸVãú±€8¸c�Šm”±ÄÁ©¶AˆF 0ŸC©ˆ<© †:@ ¸(îõÇìSGÄ!uìn£¦]Ë`š+9”²"PUÜÆReÚIš¥S! E¹m0i �[@r‹?zw7 ù½~W|"ÎM–d�Aò{¡]::6OÒÑ•ø{~;}'CãàÒÅǰ�€[pú�rë<1n � @²�jæÚqÈ–h)ó€8dS´€@–qÈ2Àh¾ qÈÿå�G�ÚGp¡pò€8$�J �'€8äÉB`®DÄÁËçhw¬S±�Ä¡ØVó€ˆC,"¦�3@r½£ŽAÁ…·„ˆÃ-�n€È ™Ã- îXót¬�Ò©ët0Ê\!â�+äÑ/)#â�2t¨ÄÁ=› �N]÷ „‘Þ6 ·�8ú@ m@Ò† 1 …»ø±dä¡p×:W3qÈòè�”qH:TÐ8øˆ—@®À§ŒéÝ" ·6º@ 3€8dG´Rœ@ãPøë~%œkáO3¼%@n ht€@æqÈ–h©øq(ü5q(ü5ÎÕ Ar…<ú@ e@R†�L•Š`€8Á"çhŠ 9Ý �: ©c‡š@@kJJ”xij MÁ âP0K™wÉ qð"”†ë¾ùðŠD(S(’µp ÿžwèa@@䇜ÀŽN �Xâp›ÓI¹´Ançbì%#ÄÁïDd“¦H@ŠqëaÎ@À ÎðBi p¹$ÐpÜξq¸œ‹±—̇“@D4ž Ÿ‡0g p+€8Ü Ì褘0L•n{ÊÐ:dq‡ìc\¬=€8ëÊcÞ@Àe€8¸lÁ0ܼGà¶Í€5aqÈþÖqÈ>ÆÅÚˆC±®<æ \†ˆƒË ÃÍ{@ò~‰R ˆCÊСb@°E€p ®X& ÒE€8¸h±ÄÁ!`(ž4™!U‰]àã�4ð(€€3@œá…Ò@  ‰rïßAÜ»vù>òŒ‡ŽªT’²o4!ªR¾oŒä‡Ü¯FPX€8ÖzÚgâP¸k›ë™�8äzÐ?I!â�L(’FÄ!i¨\WÄÁuKæšgˆ8ø#ú”е4®Ù/(È 9ƒ( º°¶èø©Èd…‹ f– @2�"Ú@ ë€8dbtPd€8î‚CãP¸k›ë™�8äzÐ?I!â�L(’FÄ!i¨\WÄÁuK暃8¸f©0P PÜ€8÷úcö™GÄ!ó˜æK‹ ù²…7‡Â[SÌ$ ¹¬˜TqÈ!øYîÄ!Ëqó E¼ø˜:p nZ-ŒÕ €8¸a•R#ˆCj¸¡Vb2Bü~„³¿¥ê½�¨J‰ %€@±#âPì;óÏ4 ™F4ÚqÈŸµ(´‘d†8œáXSd …¶­0 �y@2�)Z,n@ wýA wms=3‡\¯ú@ )@’‚ …€@Ò€8$ •ë ‚8¸nÉ\3àŒ‡À‰2UJÕV ×ì ä ‡œA�Ž ‡]X$€+܅̓™�8äÁ"`@$FÄ!1F(œ âà-w•…ÆÁ]ëå¦Ñ‚8¸iµ0V PÄ€8ñâcêYAÄ!+°æE£ y± 9ˆ Ö�¥æ S¥‚Ü[˜È( …�q(ÜMâP¸k›ë™eˆ8œ> ¹^Pô ‡B]YÌ+W€8ä ùì÷ â�}Œ‹µ‡b]y̸ —-†[°¤J8""úß‚(&â�‹P C°»Å�“é–NŽmçZ˜*9�e�@q"âPœëŽYç'©�‡Û[K‡Ûú˜zâs¯‰Ï_ünæ/'χbÚ5˜+È 9Ý�88tu‡ÛÛJ ·‡u1õâPL«�¹—#âàòÄð ‡ü^N‡ü^·ŽÄÁ­+‡q�"DÄ¡SÎ[@òvid` ù½>nˆƒ[WãE†HC‘-8¦›÷€8ä÷�8ä÷ú¸ut n]9Œäêóh10 �eØOA„Òó6qUDUÊÞ"ņ§q®&{cCËîG cÄÁr‘Ûõ4qŒÌMQ•R¹Õp<T@ %@R‚ •€€kÐB:ïæb#Î¥¢Ìm�\ö�¹Y ¥|@@GQÒQ•ÔýAŠQ•,â�Úµ‡P(Dü�$¶ ÆnFç;±Ä¡ØH€ÓÕNM*rÚËÕò¹ê7ý‘£…|E€euŸÏ'áXSÍß çVâ÷û#é¨.Aòu›`\@Ä{ g»Á.ÀC˜w†Jç™'iØ;‚8ä׿Àh€@²@ã�,R( SÃ�Æ;¿0�HnpRN'”ÊòŠ8Øá ‡ÃbªÄÿâ€@~#â�ßëƒÑ�L#âà Qgx¡tþ"à â …’tœ°òw 02 à~@Ü¿†˜p‚ˆƒ´�OÁZ(�Ïä-q`A„µ ú+ŸAÄØ€@±#âPì;ó/6@œ­84ÎðBéüE /‰ƒëK œäïFÂÈŠœÍâ^̾øqp¶æ ÎðBéüE@‡aÍ\T¥4¥Xøà/m’¤‰ƒþ}þˆ‘�âFÄ¡¸×³/>@œ­9ˆƒ3¼P:·؃i¹\'}Ó„Açsà‘¦*¨p¬iím'Úd)��å~ô �T…� f gë âà /”Î-š°\ÎïwM¼^¯|¯?™Éã�q°;Aëïõ¿:ÊRn¡Dï@ÄC@?\€Nv°ßìd§´ œ!âà /gx¡tþ `Ïm7Oâæœ8Ü“&v³%»YSþ@Œ‘�âCA ²»æ±ëìö†Ö�@’¤qQ˜dW Éß nI zBvÒ ¿·[å5qЄAçvÐ?ã…ZÐ{“Ë#n2G‚Æ!» ¥mK³Û ZÉ!`jŒGûÏɵP\¥bÉÈCq­¿›gË2¶Ý§!v.yMô`c5éøT¸y11v pÛÜDÀ »«S¥ìâ‹Ö�#ÀdA`CëàFò� >}:_]Ô(vôeU<-ƒÝÚ'çÄ!Ö‹[=“JL*þÙîû`�ºT싌ù�l#r�m„¯o$¹Ã=ÇGÀíÄá¶øÛîû¤ƒ;Aó—ýc—b EªRÒŽª;@Mìÿê2zÚDBM:[u�@b�1·‰1D P¸Q»�kÜAr½è?�X_ý³Ý¯Á.sÛ/ïó’88YbhØ÷!‘)…“6Q#7 ÿ:\r<\R½mˆw)Pè¸_‡1ž_…¾ò…5?�‡ÔÖ"5ÜP+³Ä þ±¦Iv’¯g;ÉHTö¦‘gTãà¢DΙ7½”qSêm”/FR%ÉÔÃLœ@ã©Ëß9Û‰ƒ[Hœ”ów?ad·�@¬Æ!6ØÐu—…yU)‘€‘ê‹3[íÞþ2£G �;Ò9G‰êænVùÑs"30Ù"?F‹Q¢X²àòâ€� ,ìïåxþÄɼ·sî�h�©‡Dj”tÚÅ&@ =�ûôZ/ŒÚˆªTëX(³ˆ«mÈwæ`c HÆV(;óH�Xò ÛKö½ â�î  >)!�ìC*¥Æ]R .Y( Sp£©�¤( ýɘø'j#Öiû8$Òy±& �¶ƒ¿7 �èü¥;‡ëÚ/¶³ÒÝI¨Ÿ€8äÃ*` @ ·€8äôrŽ@¶ÈC¢v‹‰<€8ä|›c@Ä! ¢ �‡ð;*ÙwrΉCâ‡! �‡ táú&’}P»~¢˜@A âPˈI�´qH >T@à:@ï ‡Ä¡Dþ â�?k�‘�\!â�+äÑ/(p@/0ˆCbŒP"qÈŸµÀH€@®qÈòè8 ‰Ä!1F(‘?€8äÏZ`$@ W€8ä yô  ‡Ä â�#”È@òg-0 �+@r…<úŽˆCâqHŒJä ù³ È )!ŸNºL[*Ë”úF% à@¯ˆCbŒP";¤óã¥[?;³Šßj.ÀÝN™–*R³Gzµos_ ¯Ôqp„[º÷-öã�é£îh"( ²ŠHCbxAc„ÙC Uñ.Ñ0{³¹¹å\‡t0vŠU¦$ŠôÆ1³t;¿*Ÿ©Y¤Ö;j%‡@A‡Ì /¹%é™Ç"¹ –­Ré`‘­1c»…¶¯²µ†Ø¯ÙBí:E ž`˜ž°èt·_>Ä!Ól`+fÛŽ—Ð+‘À§Çèø¹^-ò;Ó<Ü4‹Ûß+è11‰öQ¢Jü~$__ŠŽ7¢Ùš*¸t©?ÂÒÁ9óX$+kÒÁ!kƒ*Ò† i_es ±g³‰.Úv‚Àm´NÆseSë¦>ºÛÀ9ÓÄ�gËãÖÏõd%�‡Ô7Š k‚88Z4“�µìÇ*Y[ê�°t„�LxÉ>D4¤<ÓtÆìhiP8'db_ådà·Ü)ÎÁ-Žî®E ]½¹¡Mý­›úloƒ8Øßµü}º‡Ô‰C‰Ñ·š54©ï7Ô,hâ�Ùˆ% úˆÅÝë{�D=Iâ�kŒÈÍ.GÒÚ ÜÅ.à¥"Ä8UoÛ#³»/_[qHneR9sɵŒR@À ÎðJ§´Ó˶ؾâÕWïVã ý�ý/¦Ö •ñÇ“vnjÇû8¤3ëd/`S™êd GH&sœnÞø– uµ\"á"¾a°%Óg�aœ�î7Q7Á‘ì ,m*WqHnùÒ9wÉõ€R@ 9@’Ã)S¥Ò£cëª Âè7lì%?kbŸËüóM—‡†ø SŽØLnìV‹4$W3c�†Lí¹l·âàa§Ä!ö ðá½¾ÃDÂÅ�Ä�Y¾ØÆÝ�88ZhN‡ä€Jt¶“k¥€@ú€8¤�a¶[Hö’Nx„m0üœÑ?Û�£íÄ!Þ³è:â�Ü<£ ¤’«‚R®FÄÁÑò9!7ßüÇë6‘p!¤C†ï cãGœ®³A’…÷É"å¾r É­Y¢³�\+(ÒGÄ!} ³ÝÂu÷‹ò{Ö\c™ì‘÷ÿU�ƒª‰ïs¨E}Éèø… â�íý�oíqHE{%§ç–8Èæ±ëm»I%Ì,²HtwN`tü Ê·‚ñ܈ˆCö7HGö1.¦@nwµS~F^kv¬m–I°ø'Mbû½ŽP˜-è�")!\  !*°ÅC”%OJKVÏ6qˆb)qÆjÌ Š<¨‰ÉC"ψCªx§´H¨”R~)æd´îìÄÁ�ë–¯£q¸Ý•Iùi3;²_Ú©öX{à1'rå]kh%´\PâñÄ×DÄh¤A‡ÛÝ .ì Ä!‰EËqÐ>ñïì-!�{qމC�¡H‘ �òK±HðÉÄ4A2�"Ú° Ÿñ¾/d„ôÕm—Y±g_›*]·VâË64L §JMÌu×Ζ®"Nlì¹mÕóÿ$ q°;ÿ$»�¢ô R)�ƒªk ZWã%؉ƒR+ª>õ7ÿ‡8˜v�×L.>ù¿�1ÂÛFÄávy¸œ‹¡h\°ÊÚzàÊP­à'ñž½‘0Ë Lb| ߇+ÄÁk¢Ä†‡hYÂQÉô­°d�Ì>·R%¢FqÁ¢»gˆÅAlfJN·O4yHŸ8y¯Ù!b¡(*Hþâ‡M²¡~Ï·öêÖ丶r›ºúqpÏ¡tÓHAÜ´ZÎÆšÙ—¾³¾Q:{€8dÛ´[6/ Õ*]=ƒ6¿†8! ‘]ɶ«N-7Ç•≠q%í# …d\ÃüI åêïJ^Ñ_ºLò˜à&K Xn¤½XÅÛ@Q‡¨m$ Õ™ ňùvµÅµ›ø:¥¨�t\Õ6¨æ,âÀßËáãÿÂÖC$š8D3"yP\ïÄ¡xy6gžü !›£@ÛÙ@Ä!¨æ¾M‡Ü¯Áu#`CÞùIB«_Õ÷/1~*hŠSå:9 ™p¬Ú "‰¬âñØ.9yBâf¦… ™%B�׿[‘ŒÀ¯g•h—ÆkËþ»ëä0§WÇù»Wr9²"#jÓXÂøõÄAnü�•‰˜§êº�Ï¿·oHû¦�ÖR(²�8(Ò <� ‘p�[í˜ÏÃ)Jo*ój[ÇD‰6b2ÇÞÞFÂá'êÏ{@ò~‰R ˆCÊÐ9ªèô¹ê¨ñ…sÙw&瑨­ëÄÈDõnûïZÔ‰Bxƒmä©›‰Wô ľ ,Ð+“%uñ˜Iâ ò“±i”5•‡¼^…™0pŸLÄTJN3é IDAT�×#ÿÊßc-% p£/t•ž$Š>Ľ°5˜JÔ9!ñÊÞöj»·¿â ¼uµ0®©ƒ=“¢±Kåaìš`ÄîlCè7yB´¡u0bEf‹,Äj9,_† Cty¦ËËKù¾Ôç#_©�ÊËËÈëõÚëP]Ñ™(•ƒ¹c5,j~Öf½î¥a‘ kþ©¾`@ÜûpHfä É äÎ2 ·³n©>[Ó]®úMwÜ©Ôw q°ß)Êù3_ Ö¥bXGUŠyŸó»Ÿë˜aWí—ˆ‰^Ä×ÉѶߛÏ1I*!&0Á`˜‚Á ]ƒòoY™—ÊÊ|"¯ð—‡#?QµÏ¦Z¿èÝ'Ã3~e Õ*}ýªZ°î@£/nÕï­×Q¨ŒZ¶í£å2}i›ÊÎ*Î:O´ºO�5Û–4X±^vþ3'Oa›<þ^Nkƒ*™\m4õo‰”·ò&('æØ~ Æ¢õÑ»Œû3œ 9Âéé9gtrâ§³³sª¬,§êê*ª¯¯£òòraíêá`�2­Ö4¶iä!¢ççÁ ³1Ê‹jÔ8‰|GÀ�AĦ¥Hü²±›«Gµ8�Yng�ŽpŸHxL§íÜ¢‚Þ!�híÕÇßoF Þ³4ñ󨦂@n‰ƒ]jO°ÂZF1ªØ¯uøUK7ÞµZÐ÷š1²‹é(­Ã¶'и8�FÉÖ¥*ƒ8Dˆüþ�ÐÙÙ�_œS}]5ÕÕUSEE9•••™Vª)-¨GÓ}MË—»Wù�E XÑ¢eåc!R™‘ØÎðÿT”Â�‘¬y°yU´GÉ>¬QÏ9�‡„ÛÂV à‰ƒlûˆŠPÄ_|“ †( *5µÑøš%û|Š1+íƒ}“«�«NT›Î(Ç}i×$iV"-Z~×±•‰˜8lmïÐæÆ6ýúµBÛÛ;ÔÞÞJ]]�48ØO�M�Db?¨_lkÑ¡^Eobüê¹¢ºîf!îMÍ'㿺ÑT)ûáOtÑád³¢lj¤#Ü'Ói;µÙ Öm!�híok…ÚOìó¤!{+íâ FÉ�/0ùÿÒ�WØ!™åÃòH„`œ½^±¼¢œ�coÛŽ*Q¿ù¼Ž“#ÂBßöÖ6ˆƒú›!S”xD^ …#´ºú›æ–hoo�ŽŽix¨Ÿû¨¹¹‰êjk¥Žý‚2Z’°Ë J®Š^'mŸ¡Û0þª/2 A,JÞ0I€1Së’Œi%ÙXðÄAE&RäAÝêŸÉmþùÅ…BA“mò~ãXZVJåTQQI%ÖzIØà¤ÖÍ/�ž^�?pªä•ó ‡´µƒA|lTFbÖÌ$‚-Ô»Û�µŸƒ!‡(Ëí;_P¶nàµ$¡v§Rd°LäÒp Óøø$½ÿ‘VWWisk“Þ¾yI/_>£¾¾^jmm1¯U€»JÁºŽŒÖ8XdÂ:,3±¢‰‹½IæËò�i�aiL�)£CÕ*™NG©´48 ɞ‚'Zuq¢@àœVVÖhuu�~¯oÐñÉ yÅëŸÕoÀC^�GÌ‚XÕÖØØ@�M rš›”ú­Ô''ˆ�€Ìä*&A0.öÅiH«ÒÔR(a_¼XòÀ{ž‰Ã‚A¾|¡ååeaâp—^¼|.Ä¡ÄÃ-èpgê_eгÜZùmé§ï äòa9=;£@àTp8;=¥ÚÚª­©¦šêj*++µ42L2˜€ÙµºOCiÁŽUÀ2˜Jv[¢\&HG¸O$<¦Óv&父2�@¢µÏ|�ÅÕ"ˆÃí­·ˆƒqe'€ÉÃÖö­¯oÓÊÊ*ýþ½NçgtyTÐÆÅž×ç¡ÒÒRªª¬¤êêj‘UÚÚ[©¡¾NL†”x vm?`É&v‡e%X[µµ:6k#T|(¡‹Ë �Oü þ¦ÕÕÚÜܤ7o^Ò‹çÏh ¿�ÚÚÛ”ÉP„Íž §iñ¨¶;}Û´ÚÌÚèX_´jy‰å6ã>88  ñ RcCÕ7Ô‰\æóêLÚ–õ…Ñ�`¦Ìš”,Æþ**TnwÆí�€ÌöTðÄ¡¤DöØß?¦oß'd³OMÍÒÎî•—U»7ý"ò•z©¬´”:»:¨»»‹FF‡ip Ÿšš¨¶¦Ê`«–-¿• QmLû¦Ô7÷rko 9{{A!ZXX¢™™yúúõ›A†-�Co7•”( ‡w¦2D*I]Òf1ÅþJËÈ�FÔƒÆP5rµ`ˆho_0ØX_§ýý}êêì ÎÎjok¡šš*9˜ÜŸÇëS~JueŠ¥´aìKG;héþÙD‘|n�tpO$<¦Óöí#�� �hí�´…²Wq¸½]‘[ñÐ~³ÿ¨I¿ÄµÉôÒò*ÍÍ-ÓׯßijjZ.ù...©ÔWJ –¢-ˆª«ª¨¾¡�úidd˜z{»¨»«ƒJËX{a™1imƒN¥C½+QÁ"Qa` ßNõ<àKV…Ba!qXa�Ãæ½yýJ‡�~ê`â ²¼‘�*!—ª,äÚ�è •¦ „Šá!„ÂDë›´´¼L�@€...¨¿¿�z{{¨¦º’*+Ê(a“.�GBí/%ƒiR¡ä6ýÒ9&´3uºÂðííæÜ÷”.V%~¿?’Ï/&¼ñXÛ°¿Dß¾MÐÄä4ÍÍ/аµ¥•êë멺º’¡]œŸQà4@�€_6®×["uOo·ȾÞjl¨¥rÞ¤aµIåc•¼MmXg7U†Jã`HûªªI”Æáë—¯r8FYã0v�^¼xF=½]D|(XÓ¡´cÝ¢:�~Xió#¥f$ …ˆVV×hùçOZ\X¤�Í ¡Ñ‘a죦¦z‰îÄ„GidÔÍ�¶W´kìÛØÜ qH�¹9ðé÷‰Îv:mç ôš,‰Ö>ÙvP.> ··3ÜFJ}^Z\Z£Ù¹ŸôùóWšžž‘[óò²rjjj¢ªªJï₪Ä9™éŠÊ ª©®¢;#C4:2(—Ÿmm͆)“×x‰+3!KD7òEh“â?EP \n)q`ÿ 1Uúð‘VV”Æáí›×ôòÅ3êïï§ö¶VÃÜÙ02.%�A|Ôe¤±ì‘.¹?±gYªD™F]†h~~�¾ûN‡GG2çG�Òƒ±{ÔÔX'—�‘pP]pš%kÙͯøïüÅÄABתÖÛÛŒÐSz½­ho~› ÉÉiZZþ%ôðð0uuuPKs“æ€öö÷ÄÙg{{‹vww…$44ÔÓ“'Åth ¿‡ꔳ²Þì†ó5'Z«³µã“Í„J¢1‰ŠÓKáp ]†"4?¿(7SÓS´¶ºJOž<¦Ç�ÒØý;ò°áÛ�P˜};tô(Ã9Ë$Aúab»è ¥4Q¶†`·þØHG¸¿IxL§Ý[:FÄÁ1dŽ*€88‚+­Â®"ì»PꥅÅ5š�ýEŸ>}âP[WKÍMMâ?ÐØÔ$BïùÙÒÎήW9:<¤ãã#ì¥;wèÁƒûtçÎÕÔTSE9ßÈ+AE"4F‘íx­èD”mËË`8Hˆ¼ryM666è�·¯éåËÔß×'– f0Ý D’TÎßróo ùbÏdåž03S+âp ÓÙÙ%ML°OÅ{Ú?8 ÓÿÏÞ{°µµ%M£�$rÎ9'p€ísæ»þ�q6˜œsÎ"P@ܧjí%m�ˆB `1ñ Ú©÷ ]ÝÕÕÇÇò©§Kº>vJqq¾äåeKðÔÏzOõ~ë*˜«þN 8¨`,áƒM]2¦÷Ì~¶ÀA;ôhNâp¸Äà°»/½½ý ‹K’œ’*ïÞ¿—æ¦z©©.#*‡Ôósó27?'KËKT ¨©­––¦Fyÿ¾Cªª*˜ƒ31/þôÊøÄ„”—•’ñÐúª…j‹¨CÄ^ fØ;233#S“Sr&§’’â�ÎÎ÷Òñ¦�Ÿ/ÈÏ Ó,¿:ܳ*äÙ[õŒV:‚-oÑ¢­ @à4¨ùï?eqaA>ê¦#χ’b‹nVGJU¼L¿ ¾¢·;CíS–Ü<V&$ S§,–¯_¿Š{o�5šúzÅEy’››É௠èFÖ›&‰ê`�,²%øV5„ =!”-{ Ä�‡Þ³<ðE‡íÝ=FÆ(#–ž‘!Ÿ>õH{[«46TIzZª èç4pÆ?çç¨n„šƒé™ÉÈL#oÊÍÍ RTT )É)€'Nýe4q JÀ�Bìc99>¯×ËB NÔR 7Ò‰ééi’’šÊÂ&à ¤â�qpèÕÀ¡Y‡®.‡*F‡‹£UâáÄëeýÐ7®§dÛp­$*D!¥™žž!iééÌ6`²{<'²p$ÓÓ3299%óóó²¹¹)--ÍÒÜÔ õuRX”ýŠggg³æƒQ‚3ØèÿDŽ� PuÂ{Pׂ/v¾•¶öWÒÔˆ`'™.vÞsÈîΞÌÎÎÉÂüiOt–Ó3ÒØ›¡ªªRêê륨¸Hi“3x&ÓSª8º¯‡ª*µµµ2õ‡ -íŠ�‰àóúdmmC–—WÙûYL ÈÌ¢f£ 0Ÿ\Úš©¬¬bkøCÏ‘,,(íe¨5@aê`ÿ€À#/?WòórXE4ž«¬¬díúH ÂÅ)Õ•K¡j‰ ,˜|EEE¼nuu%i`˜˜�‡£¨qƒ¥e&åƒìð8<ˆ™ÍEîÉ/e³6‡{078ÍS`, H7;·,S“sÒÛÛ+“S“R[S%��õ¤LƒýÂé-:‰õ™ÞÍÎ.ÊØØŒ ÉÄÄ™ v ™”¥Ìt:ÇðWp¦½>ÙØXg�ÂòòЬ¬®’q�ý×yyyì# RVVÊ "¨ØtB¿’ƇŠeqq¡455IuM5Åh*ÖÖ·daa™rõ`ŠÀgh8 žJIq‘åK²óL23Ri#øJUUU’—›Oðpxx([›Û‚nødÛÛ;²»ë¦h �eå%RYQN°%(ˆädh0õ€¸å»ÝÕ·HØâè0ZTÀ‡P•,à06®2éÒÓÓ-í­ÒÔPMPð¡Ã P¹SŽO¼rxxÄ �îÄĸœI{{«¼yÓ&oß¾•üü|nè,ƒÞ´´¸,ós‹œ˜ˆ'^(!xI/ZÏÊÎdÁj+jëà\WãzS“ 8`¡˜�›•æ¦pÆ¡º¦J% ƒAf8Üî=ÙÜÜ–ù¹N(d 0!@ ÀÀ‚^cE9&D�´¶¶JVv63"¨m€ºÔÊÊš¬­oˆ7pʈœ|ð+Q`UTT(�M òþý;þ=55E]wc[fffefvN¶·¶)�¦ ’”"ݸ™™â¢BF:,Y6d ¢¿ÁŽw¹ë侇K›S ÜÚ8ÜÚdæ€k,ðT€|0@å™p˜š“Þ?RSS%M�uòîýfÀZp¸P³n·ºº%óóëòû÷/éûÛÚÇáç´½~%……¹ �‚ú³çÞ—õ�M2@qB�”Ù$÷ô”{9®QUYAõ¢¦æ&ª.fgç„Ô¡8úë·ïª�äXYsð�`¥´´„o… L>Ÿlo»䜟_¤(Ëž{�òª ¸ü�œœ,úF õRßP+))©²²²!Ó3ó Þ®®®ËöÎŽb8ÀBšd¤§"¯ ™)òªµY𛛥©©Yrrryݵµu™�™ã=.-¯„ŠÉá³  ‰) µ X•••INN³¤•ëf–…,ðl3úÁ0Qã°½³ÇìÒyÀ¤*!ãÐÖ"�õU 8Ž<&Rw3³ 219-¿ÿ–­Í il¬•ŽŽ6éééaÖ 8ípÄ1‘ú‡$ààä,Q#ª¿ëÞ¡S_T\,¯_½–ÎÎNvY„"ÀäÔ¬ŒŽªp³s3¯ÛZ¥‡šJ¦Ö¼>?Û¼ÏÎγ>™ LD dè8ãhyo�@€ŽŽf ò 8iûþösnln’#‰‰ˆô Ó’i©¼bÕ7Ô1Zå)€HÆ�° ö#++‡ýÂÐjxN\rlmí­TjBvJà âwŠºdoofe¼,`€C¼,kΠ૾ìs>%à@9V—Sfg!Ç:/~ÿ–‰ P•*™qxÿî�ÔÖUKZz*Õ‰”ì lúžÛ#[ÛûòóçOú+ØÛ¾|ù,ïÞvHyy÷w�Ç'ss 200@:6Ø©iið�•pï¹I ‚z$ú%¼}û†tæšÚZî÷ðoY¬ü�Ñü�u]ã€>µ¬q@° 9Á¨@ÀrumMööö%3#SòóQä­z,ìììŠÇsHFyE9k;á_íïÊÂⲌ�O2K_+8d¤ŠËyÆl šæ675I}}ÈNLNLÊÐð0A @LnN¥k}~/iZî½] žÈ`iok£ nN6}šÓ`Àª�6™½Š<[à ©JºšþÀAgFÆeiyU222©;LàÐPE>>Я.r’xXXTÔL�••e©¬,gíÁ?ÿ|‘ÂÂ"‚ d€ˆQ§§¾¸¸˜ßååÅ’ŸŸÃóìïÈâÒ"éKàÛa~ìü(5µURQQ*ÓS@ÕÈ8XT%G¿n•®îNjÔ4ìÈúú†Œ�MHÿ A®Ïô\e%)JÈllïìÊæÆïŽ#(GõõõÒÒÒ §n~�÷ U†ã£#"m8ûP(e)#=S ‹Š¤¢²’œFdVúûØŒ Ò{•,OcÆagÇ-›²¼²$É.‡²ÕëVy÷î�dg"ˆ…N“qx˜Í܇‡±³¹ÊýXÀ‡û±£9ËÅÞ¨�ÃX�”F�ö^t‡3Aó7{IÍÎ,ÉÄÄœüþó[&'.fðYІpHÏ‘OŽåçÏ_òë×/Fõáõ~ùò…€£ºº”™„å•M:âÿþ%Uû{yy¹TUW³>AÔ­í]ÙÜÜ’¥Å²&Ø#¢¥YÚÛÛ•ÃïtZÅÑŠªDàð9\ U%P°wvÝ299-ã“26>AÀ‘“�+e奪îªÓX^Za0þj+Þâ~kª%33‹Ì�¥¥U™››—é™Ù‹£ª²œtèŒôdÉÎÎ`9¥Ùٹ̨ �ŒÊÜìœ,¯¬0¨ZRRJµ§â’B‚*Ôvà÷ëëÌ. óðáý{illà¹�u ,D7“ŠxqÀ¡5:ã�àÐEàÐܨ¨J§HJ\Cý/-¯1Uà°°¸HéV(üç?ÿ!G!4¢ð˜¬à~ŸŸ™ ü’’<ÉÍÉ@ÄíÞ—™9@OÊðÈ©CÈ:„€þ¤ø‰PUú#3³3DÏÈ8 …;ÿ€?HЀ‚æ‘‘Qf7Š‹K¤¾¾‘Çãóhö·[M´¿}}²ººB‰L, à-&9:ˆ8 >²³o;:(ßÖÚŒhA¡ƒ*[s&NY[_g15€ž•@¤®^:Þ¼b¡8" 0»n�,Ì/I__¯looú¼ }øéS·Hnv–ÕÀήµlfc<-`€C<­kÎ}ß0Àá¾-úrÏw(< p pŠõêvf'ZþTí·8ÌÌ,Êøø¬¢*M8 〢*¥¥§¨^K 7%‹×õ!¿üúõ[~ÿúÍ}u�_>–÷ïßJ]]…ü~é%ŠŠyyù¬+Åß©©/"û{Gì\ýãÇw™ŸŸ¥P (KÝ==R^QÁ¬ÃÈè¨|ûþ]–ÐÇamU>î‘î��R_WÍ.Ö¸ø!¿~ÿf0*Ê+©fYWW%•Ue,؆ææVefzIdskSƒ7÷i—ŒŒlÖ©ÑCŸ-dº»?ʇ÷o¥  ›tht�> eoï�”ìï?~2“át8ùloß½“ÒÒ)*Ê‘àé•™†‡FIEŸ�™&«ãý»w”݇¿|õCû¶—÷(#êÑ'ô³(<†:�Ê8¸¥ïï ŒZUÝ­Š£™qpqRéFg�qE›óå•u™ž]�¯_¿Ëü‹v0ÿý÷_G£Ðfp`P~üø)i©itÌ{º?r‚ge�ú“Â:(,.¯Òùþõû�íªªjª$t~|O‡[©*õÊìÌLH޵«û£ÇG^Ò’0yPc°°°$ÍÍ-ò¡³Sj¤¦ºœ¨×:<òËÚê¦üýÛÇsíîì0+ñÏ—Ïœô¹ù¹222¢ ±gfeccƒß¿{+¯_5HYi1›Ä�xâ9ö²Žb`pPæeeyUÚÚT�GccµTW—«b«À©úX?Ò÷·W–æeWêЪ*Ê¥¤Ô® 3Æ¡�ÿü76Ž¿�Íî×8ܯ=él�éf=ÚµÏ3\¢ÞˆÒY—Cff¡ª4'~ÿ!p¨­©¤ª�C]©J¹Q‡K|þ ÷ìß¿þÈïßXg ê0€(Ç`6€ÂüóW/�ëkëŒê#Ê^W_Ã: €°‡NŽý²¹µ+ß¾~“ññ 9>>’Ò²RR´«kj4“¯ß¾©pV‡î®N©¯¯‘Âü|ÙÞÙ§Ì<”—P< `ÔÔÔ(?vIyy‰åò’$(ëû²¸¸&ßü�ù¹9ÉËÏf‘õÇ®.)(@† (ƒòßÿþ—”&п¿|ù$==¥¨0_rs³èàz<¬�Ÿ)[ГP›ñêÕ+ú,�m…_ÝÔw"«36 GÏûªµE^·¶<䀮„Â!à�®ôh#ëѦö³L©8œ 8{Y­3(’IgÆ¡[:Úš-ª€Ô�”†08ƒH.¯n°Îá_¿³>€½¹Q¾|þBŽ¢ ÁþA¦QŒ ôÞÙù–Y R9½>NÄÑñI‚ Lèܼyÿþ='öâ"Š¡tÆa–�ª‘�èéùÀj÷î!S~ˆ& ó ¶>Èþßÿ#‚ÎÏËRr©AH˜�3¸'#Ã#\tæfg¥¤¨Pº»»X”�m€”™éiè/xÿN^·6Rý T­£c¯ìîÊÈè8Ñû®{�ê]]]ò©ç“góºJeA]T¥¡¡A™šž�Å…9©®ª�î�¤¡¾Ž NLºR”îÒ�6žØ…�ížØ 3·{c àpcS=¹>–‹õX×¥r 5^ý1w€Ô7$‘9 ;G#s0>1.uµÕì9¥jª(=êp@ã4öZBª Á@À8þ�‡Lƒ7o¤°°�'È@ìˆÖÖéùÜ#e¥…RX˜SgBzõ�Ÿ½2<<*ëëk¬uìêî–†úz?���Ëÿþ÷U––4pøÄšÌ†új/-­ÉèØý°1JK•ÿþÃ{6lKOƒÌ»êáñœÊÖÖ�Áøø˜$9‚RYY&Ÿ>}"Å6BM�Ãá�œžúY»ÑÓÓEi|œ_Pס¡Q¦X d[ñœ¨ÑHIM&"9’´YZÚ”©)€›o²µµ!5U•ÒÚÒÄc$NIq l)‡Ù×cް‡_^p@�Cú8ŒZ5Q2§~¿%! _•q@–`jzžê�ï hÏ,., ÷þùÃÉRZZÊ(|yYI¨"�GP?qpx,ë[X«þW IDAT ( €ÿðá½|úüYVVVYý�ó@å ¹r¬p()–íí}"ãïß¿ËêÚ:3Pe‚\jFF*øâÔX>ÅDí¯™q_psÓÍ®×_�ðWV¨6�‘žÁVôT‚R}]Ôð&x@¯4X ŠËáà„­ VTVÈÄ$Òsý255%k�Òùþ�¼zÕÄæ-ûÐ]^ß–Á¡ùþý³ ÐbÎÈÌ MK’ÐÅ:ÌýÃß�° �ˆúÑà!¾ji¢ÂlŒÏ˜¯»[À‡»ÛΙØ0À!±ßO,w÷¸êF±ÜùÝ�ÕÀá2×ò|ÆÀÁitŽîíµ¨JÕJU }ÐW êKô‚™qpŠ×�£cU�âfôkøçŸéONI‘�õ ð„jz@Tõjîéo%ÿ~â…‹Ÿ�N*?}ú,M��¤ÿ8@Uɪq@C]° šk$;+K†‡§ephL†dsk‹çFcZ05’€KAJÏ: ~y†ÑA9Øß' © 0—ÁFБ@¯Nv¥*àðû8õÉg‡®.;ƒ½�æ½ëÛÌ’ Ž�ŽåõSJ…Î)©)êEž�Ž¥R°�×wÂ,€SK“ ؾ}ÓÁÀ.Sø)j�ƒ8Üf†$l‡Ðë´Q•À·ëíûKç{ieM‡n‡föq`�ƒåЂÞ—¼ý陟Eè�¬ol°¹&á‡Ît“S¬;èï§ÔY^^.õ“32Ò$H)/ð¥Áœz8ü@ð­-­ÒÖÞFP‚ ÿßÈ8LOSWøu€C'û(lnì°°ÅA�%óSoéG g§×P¨˜€³ Ÿ "-%™ÍèçPV^Ƭ &=Š£§§¦H}ÒT¥W *ià°ï‘•µ-‡?~Éöö.‹ÁÑ¿¢  _ñÿÜ¡ª¬–@öšðû9Á„E#¸ÖæfwÕTU°g"£ªt›©ùYîn;sdb[À‡Ä~?±Ü�­  Žä p˜™CÆa^þüù£äXQÝP¯2èã�®q ª’Ë)žC¯¸÷�ä×Ï_¤+¡ù,d¹¼zÕJÇÌP‡@c:>9¦;ê2ѹà!ü¥ötìÕðaœ.k-ßt¼eÆ   €õšÿûúMQ•Ö×ä˧é²2Y™™2<<%CCãô�P¤ŒnÐ�Á‡„;žÑAðv\E»bWç$‘‚ü\6ºëèh—‚üBR¹†åÿþû_9òJðÌOÖ¨QEÈ8ä¡àYd}}K~üø#CƒÃ¬ÉÉͦ¿—žžŠ–ãºø?üОd…ÏV_[CZ5²*Èb@4Geìà!–Yðô�}Aû8 ã5�åå5`ðãìr¬PUÂhÂÿlìæ'hƒtÙ€ìî¹é|·½~Mú5LŒOÉÐà�ôôS#úÅèß�››mI�žZQ ]fsƈ=œ~8ôè̈H�1ã0­:G¿~ýJºYüS(Û2::ÎI]d\ªJ8>5ÕE©SôZPN%´•P„|ƨ?äR!SVYUI 㬬lò f…€n2jZ[p8LJ-òÀ�DƤ¢¼Œé¿äd§¸’-<0ãq†oÕB>5-•Ý+**¤¸¨€ELÐLFÖÁôq¸ûb€ÃÝmgŽLl à�Øï'–»3Àá:à€ÚJ‡8!ÇŠâè)ôqP‡+ã€ì}¨ú œ"jŸÄ½xg÷P66ÜÌ6€§ì€ÿüç_imia =Ðí’¤èØ Ú‚žˆÊ‡Ôa’B¡@áô²GŠ•á¿@aQt pÐÅÑh@;à0 ?cˆ=žPWš_€ÑE¬@=‡Š7â? j‰OÑ,×Iÿ µ�µ5µ’ž‘)~ß)ZPãp|tHFÃ§Ï ¨ 3',‰��-ùùã7ƒ�3Ó³´'j6QÌ�“›«––¦Á¼%ô«@Ã»Š²RvɆ4=ºgC7 ο¿—ÙÛá…g¨8º·oPFFÆX·šRkmmÍÒP_Á>h,£ u†Â`Ðrúû‡ehd”ÍÖð{¨€Bôª¥™ÍM „4ЪÒ_Ö7€/ØÔT/µµU!GÞòåCôA8~˜ˆ˜¬@˜„hª65=Ã…T%‡6+〉¶µ…> òãûOÙÚÞ‘ÀiPZš[ä ”rÒ%;+UJáÿƒ/ANzðüС“mØ‘&CO†ÁA™�†ªÒ&3è­€C'ááá±lnîÊðИ|ÿñ‹šÏÐaÆ}µ··Ivv:;6ž"ã€ôŸµ3àùhGvŸDC¹LIOM¡�¡¨„âh“q¸ûl€ÃÝmgŽLl à�Øï'–»3Àá*à  ¤‰‡³:=³(cs0™œš’Úê*Ò~µ+öUßÕ {üÊÊ:Õ˜p èÓå(0îaÝïÈÂü‚ü÷_YׇŽ9˜ ù9’�“A‚˜:‰ênå%ч@Gftt†,€Ã·ïá>�]Gçè¦ÆZR±'&æ úúþ²æ�okkë(ü’••.©iNú+¸^Èe_Š$ÒŠ� �²ÑÙY›Ö¡–ôÿûŸx<(ŽÈç/=”dEÆ!��ZÔ8lËŸßý¤5MLLIfV& £kª«deVňvµ$øJÉÕ<Íp3ÐË©j0"j4³ãåf ^pØ·T•&dai…»õµå–l*"ö £‰¢ü}}ýŒô#í—‘™É�ÚÖÖJêÍ‘ç˜�ÛÐ Ò_¨@÷ÁÎPUzÅAŠ�‡Z Õº\ º�ãÇ*d?;3/“SÓLM²8ÚŸz:CªJ˜è±±¹%ÇÇ>yóæ 9‡åeùRRœKu#üWðÁÊXu˜ühF‡¬ž ÜC¤ó>v8 8ºAJKp€¬{÷€€åç¯?²»ãf±UçÇä––‚²”m-4!FV¨H›Â!T1H"’9U)‰K‹ŒbÙ–^α8¼œwýÒžÔ‡çûÆ p¸p@ÆÀa||Nzûúp¨©–¦F;pH d@Kžž™“‘‘ %ݹ¡±�Nú»wïÈj€Šê(VWÖä4¨‚�]Ý]RQ^"Å%ùc@î3ŠÑÿ@8¥ Npο}íIQ• RÙÕù^ššj%/7Wææ!??%¿~ÿ’Ã�—�±U%(8egƒÎ­$äá›�±ÀÀ§Uiá ñždoï˜Mo¿~ý*ûøä³%ÇŠâh¨*ávÑ„vpp„ýlPk*8®ÛÒÚ*i©¨ aÑ‚-Û¡|~'!öÕ pˆ·Ï8¨ˆ68{ZŽÀ‡qöqЇ:‡TÖ +òñ‰— GÓÓ³äñ¡7An^®ÔTWIϧ�ÔSÎËÍ¡f0$Çþþí§C�¢Ÿ¼Ü<éî馮• ÔäÀ¤PÀSƒ%HÑóßB~rbZþ Ü̬4752ðéS'©>G/»=¤ ¯ÂâÒª464Ê۷蘆¥NªBþ¸.�V²§ª@[eÌTø|6=ÁC£”õõMÒ”Þ½}#mm�R^¦ú8øPluäeGìþ�Avn\Z\f¶Ù ,55å!à ‡R¤°%® à„h‘çš©ønN‚±ÛÝìfŽJ| à�øïè®wh€ÃuT%Uãàp%Éìì2k~#ã09)µ55ì�ðö-jªØ-™r¬§"»î}ÙXß’‘Q"Š{ꇲ#Þ¼ig¦´Ÿ€T¥e²@‡幦¦FÞ@/¨Zª±fX ©Ð£­çR8@%È&´ËËK”tGÿ*‡†Æ),È—ÍÍ=™žš“?ÊêêBcSeá!µZ\œOˆ€˜ª–eõ ~ë6è;$±èû`ßk‡oì.}rr,ÿü£äXxòó•ëáá¡LOÏ“YÒû§� ‰²ÒRyýú5T^~³hŸLɬ*_Åœ}Býü²/CUºËZ�ÐÅÑ!à�ä”Ã#ôqØ—¿Y=·°(®ä:ÊèÆXUULN> w=G”p˜�›£2¢ìPxõªYÞ¾m—Šr´#w±P­Ù¡sŒAºp '''ÒÑñ†õ haž›Õ#'' pü�)O@èHMI‘™ÙyZ£¨ijzJêëê˜bëîéd´ ü=tžF`x]󤲢ŠJH-Íõ’’‰3t“T…ј\(ÐNNv°å:>�UYP¬Pï16†~ +¼Vkk³¼j­§+&.€—Ë‘,ë› D�¨ÎÑàbÁ­©¾¡†-â�N¤CÑ­Ù—ËEš@&"U(çe‹hÜeä½ðc pxáà?¾Ï÷åàpCààtÈìܲL ÆáO¯ŒOLHYi™TUW±AYyE©¤¦¢GÕƒ€[›;ìÐ :õÌÌ4éÁ�CýÐù^Ú;ÚÈñGý%|ìåƒÃÜ÷Ñ*;+GjjkÉ”€\z*!S]Ì0€tt|Ä?ÓRSYkZµÓ™L§�GÔK,..1ãðáÃ;yÿ®ƒý& ürrì“••5ùÓÛGÿâ2ÅÅÅòêÕk26**ÊÄ…¢lü£S)Ÿx¡Èx&Y™YôY233x-�ÇÏë}ûöC677eÏífã\P·ŠŠóP£à±ç>`põ÷Ÿ^ÙÞÞf£®®N^·µIII!k-5`ñûNØ×Ov9铱�jJTÃ4Àáü¨}‡$§xÜC,ôE-�×ï§¼Švsó²Xã=9¡óD»¿·/‡‡j£°]•[_5Key‰ädgÒùõùüìk07· cãtê'&'¥°°HЋХ²ªBŠKŠ 0x÷öÜâ9ô\ nAé!—òïós‹295#?¾ÿ`�dêêØ“>´H�qhhLþüù+‡ñûR]UÉÎÐP:‚b�?àcÄa{gS‚¿dggJ]] 3˜üèOA 29#½½ý26>)%Å%¼—ºÚ )).$ŸÙè.C= Ô-¤&ÿüé““ãcʽB®ªª\ò XHäóûÙp“ƒ j¨ù€.2R„ð%Ã9BÓËáŽ>‚w4œ9,á-`€C¿¢;ß 7 ÒÌjU¥Þ¿ìМž–.Ù99,dFápR@Ɉ۽/î]ЈOHGjjn�ÈŸ·4sßGÑ/œjÌ-Ôm./­Rð¥ïo¿¸w÷ì++/'£Š‰Ø·éÄŸÉÚúªø¼'•UUR_×Àûp8\22ŒÚÇŸ,È:°ëò«Ê™ÖÖÖ0¸ŠºÈ±ñ)R£GFFÅçóQ˜r®UUU"¨'8::`†ÝÝ©¡¡Qjjk¤¢=ÒÅï;ã9 n‰€.˜è,�çË/È–üüHCi233KvwÝôW —zlPTTÌëâŠ� ]íìlÉþþ›ÿÂwB_¬ªÊJöp@0ÁÐHªîN�d“q¸Ëbð$2ˆš#ã°‹ŒCÿ «íÇ'¦dÿà�•ö™Y,Ú²òôû|t€“](^N£ô"þ¨9€“œ�™n)¡K3¤¼‚l:²²ºÆô"òpðñG„“ ™¤þŽ� ž}( …Iˆ¢$('a"¡û"¾@YBvºÍh.ƒÈ&=&+î\K, PsÀñ¯Z›¥££-RÙt�¾Ë| c€CLæ3'° pHà—ã­àp=p ­—Àa‘T%Hȃ‚Ä:‡“û2X (f„Tª×{†ªàûÀñEmAKk“4·4“9PP˜OÊ�*òMb†âààH–é¯ÌÏ/Êòò } µdg3ÊO‰Rÿ‰ìﻩ̈ ª™h‘ü¼x \ìôô4¯WUUa‰¬´Ð�7{m}“ GCã²¶¶&n·›`~® šøÉ‰GŽ��Äëƒ,jº´·#sÑ$UÕ5Ì>ƒI¼WPÍÇÇÆ¨E°=(22S%;'“€ ²²‚’ù°ÕêÊ*©Ø£££¬Q…ŠžÙÜ?l½°'Þ“cþJJoß¼‘ººZJàƒI�€²úÒ•1N‚gpø É88Äã9!U©`ˆ¼< ºí�:Ü@•ºz0+!_ Z FDí3ÒSÅÉŽ.ªpHi;äÄç§Â�- ”ÐTmvn^¼>+TšÐ×UûP@ææFého—²òʉmo»emmS~þøÁ:t]ÕE |C%!pzF´±¹-ãctúA§ÚÙÞQÍTÀÍCgÄdÕŒõ -M ä9BÝ®dFÐͪQƒC£²°°À zBà¸ÂÂ|Ör ýˆHîÑí>�µÕMÖ} ²µµÉE€œ…SNINV`¶õ ×Dd€zȺ‘ŠUhõ æÐ£<‚�bvsѰ€`äGº„WXG÷qpÊÌì‚LLÎÊßþômÃ!9YÑ‘¡vj "çy99RTX@Öœ^È©£#4"þü,yüVÝÂY{&@jÔgåX�sïßÞÞQÊŒ”uÒgA=˜­¯Z¤¡¡�N9¨Çhr»¸¸"cc3¬«b'hô°Bí(j1Ð÷`ì¨Í�å05-ãâÞÛ£¸ŒrpoAÖ3€5ßÍ õõRZV&™`x8dwwOVW7d``Xþöõ‹{ÏM@ `'mø-­ÍòæÍ[)-)%'�u'Æ')833;K¶‚›,†F´C$-=M*+Ê¥¡¡NÚÛÚ˜qÈÉÍa UÕˆjA—˪L¸Û,) �qPάê�6ìè•°´¼"«ëërpxHG×i9Û Z¶…ÓHU¡Ïf4uêVê@§ªÙ S¦êÁ Óc¨y@;w!ò@�t®ƒ~ ˆ p´ ȃåä€Ë—ÎûCmÅôÔ´ÌÍ͉۽+Á³Sʈ!íį¥ÉN¼*^òÁ/Ç VP?®dPÁUØ)ÂD,+áäЦ”šÓÁÈΛ,,®ÈÊÊŠlmm1z¤�h&j@X«‘›Ãc Ѻ²¼B;nomÉîî.34J9…Yd(p-ô{À±…y œQZÙî¥8·™P7ý¬7µ”ùÜS³ÀKYì$‡çNx8ïV½$7Kw޾z*=ø* þ9,\^]ßd13Ø l¥~EUD¸§¢>Ôi8ó <—“E‘™‘NpÐ@ `EÌ“J�.öE€ÏEEdàØ8 ?kÜ‚ª99™Ü¿H-))aã74JõH\_ß‘ù¹9 §^:ÿ¨—„¿ÿ �àðh¨…�G×µ ì ôtÛ!Ùå`pÁÑ¢âB‚PÄáK¤Âgq8äù‡Ç²°°DzÔîÎ.iåÁ _’Sœ ðVW<Õ‘> ?æ`ÿ�µðÇ��Ѐ¨�jÌ{Fà… ü”Ò’‚dmà«8)à 3圛/iDÛ¤sïÈIhà œ+¼x5!ÁëGQði (§g§–ê�x ¬>mV w ¤ ‘æãï´\—F jœ(¥$%+éU8ð˜ä(ªF¡°Ê:$1µÆF+É.¶zGa�¢ËY}‚gr|tÄ‚¤CÏ!;0cPã;;+S\.Pª´&“ƒ-Ö)¯zâãuN¼>R¤0a ƒ *®år$1“ "Èjb!qˆœ%ɉô¢#9>>V÷êH’l&¥Y‹“nî–D�€oP²À«Äs‚¦„l€23ª``Ëêj­1böå pˆÙ„æ jôÅÄp[8\g< àh@”Ä!þÓ÷TìïPB¤š»%,ÚŒ­ÃYO¦¿’DMMbc3:'–ÏÂægNIJrqï‡ODÄÓSú'P”<:a÷fPw@±F¡t²•¹pºœô[0Gµ¿&ÏÑÑk7QsŠœ}önJKƒ{€o¿jF wÃo@}(ê'‘‘€�:HzP)?"L†+¥öuuVúâ`€G€0èç0pˆì†å³„ªT­ ¹•/rF  ƒ›ø»¾/½×Ñ–?§|áñ¸®nt«@2³á5$Ü)‡CÙÀˆ?EÇm€í'á©X “ÕÀÂò/w/nD‡›õ=ÇŒƒFÅ è¬C9Ø*ã-$oM6å„+4ÊÁcMݰίv¤Õ„ãDG€Ç �¨vhòëF*V¾‘ª£.Èaj6žöŸ+ø£Î©z²ØK躎PŸL>¿B41˜ð f))TVðœÚ6á‚¥PGñUºSÕt( d^ka°ºGãî` ˆTíCØŽ6¤SELî'·Ä|ÃW9ÿ×9N8Äl~s‚'h�ëæÅSz¤—^ž‹uÓ©#ˆÈ„ý8ÀÊË‹È3ªQd¹‘Íe­#µ®ýÖçàDT]9Y× ýí;X~ná‹SÁUåº(¿CË–†®6_Ær:ðlÑ|0\¥‚:Ë eÛ­`§õ´J*× ß7~ÀÁ>Ï¡ç g,´ïßl í¨�* Ã×ÑA^;˜ÙðÜë<Ó‘ß›¾ægò¹g]zG¡¹…Ô­�b5ETÎ{8ôrúŠ×3Æ ¶)m èɆ :«J-Ø&¨>¿í3ö j��ósVo8j ëÉ :[¢g;?¢zº«…ÂZPÔB¡–�Ô�-tʸè)ê³*›J–�45L/dv�£€ŒÂG8XËÐhý:ɇg²›Ç¸µ®›·>á#ð€ƒ÷9xìà@Úôù­°!ƒüN‚-“`ýÊökõWÝúYí½ª(XEäU6@wkVþ€êàláè[‘÷0{gŒ 3¬ÑÌŸ…aŽöƒB·D¡ÝpÄÕ¾zdóãªGUÏCÂ$« :ü°¼w[ÀRû#šÝ¡-©|dÔs†*ÈŠß„Xu$¾îóý?�s=kà ¢ú¡ž5ÈUAu5>cí®•NâÕƒSZ=OíÃ8 .p-|FMΰCo�¬kToGÄáëERwôõnºQ†2 ã/ɰÿX§C”,+m§XMP¨vóLMêΊ6� ¨Ij:ÿ¯=­i·M8scÇéVÜÃÂpç��ÇòûÎi‹I IDAT¨JOá-™{L4 àð¸oä2ÒÌãÞÕ󹺎ÀGøv×#L^°Ñœ•7£ôj�WùËËÑÇÐ9×{Ű‘þO¡‚«:áÏÇ>Ô×°ÎÑ(-Šã}Þá´Ïå«|'ícè`nøßçGcø�Ôs©û¿¸f„ÒV]jØ/R A9FÑp�/ 8Z½~Mαd ¬´—}ÀFÛ”t*ë|T=ÚRu�³Ýòv>k=‹`=•ÅYÄ5u”âÌ^„úmDõµaÕI]¼¢U[t'›·>þ’ç¶5£?R"Øûnà`€ÃlªŠcB¥bÒ *äÕཚØ‹C¨_St:“•9‰’>8ŸÞ¼*%xù¢ehmŠLj _zˆžÔúúVð!¤îpÑT/”Å‚×e§®g×{Û}Â|ÞXà©Xàºõ÷©<‡OåM%Æ}žßÓ#÷»ÀËýì±lu%pP™�ð}X´ �Ç`g „<›0ÊúQ˜~¤. Âõ“¸ŽÝϸœ�qñ¶/ß//6¢M²=¸/8¨‡¿?·8�¿=ï(Ç Ýïcщžæ‹2«£äéîrýhɺË£«²*åý>ïr_Ïëãü?¯÷ižæa,`€ÃÃØù²«ªÒãÚÿò«ë4Áý‡ª’í»»•%Ð` ô™hðø2ŸÊN…¾ ÕÀáþ¬ý>TÆ!TrárOt?¦¾¿Gz 3½ª’¶fä[¾ù;lðpSàpߣÒßw9·WY͇»Œ)sÌK·€�; px\û_ÂŽo,wz>ãp•dsùyÉóÿV÷¡Ïpp¸¹gËó]&³¦*ÙËá+àðbŠ£/‡Ðм &°“Þb©w<ú±’Ú8Üñ…Ýè0nd&ó!c� à𸇇´ÿ�Û Ý¯Ó}Ó�eä˜Ðüo}[JÖ=<\eÃû}†Ë¯ͯJ¢D¿ú2Àá2۽ȌCݼɼd—’‡\,Î_ë:¤�{;¿=ÜÅ&ãpÕ›1À!ãÖœó¹[À‡Ç}Ã8<”ýoäœ\î²__|®ÛÜAøŠviSíƒßôL—‘¢âaóèÙp�ƒ/8ر®øÞÏÔºù€¶Qçn~?yÀ!–§�åØó F,纥Ùüã8$ø 2·—�0Àáq_‹aÿ›ÆúÃÑñÈ»º¿}ö&.¿ÝŶGì¯êºL‰ö¢?3•¢þʇ»Žä‘qˆjœGJ"DU*¸öíÅJUŠe‰åX;dÃßïã\×ëÉ|À‡'óªÌ�&�ž#p°‡‡ÈÔ·r~õ6«y<ßÔm�C´ýõ¡ß�ê…p÷«Þ¢\¿ôe¨€m´s_®{Ãwóç®;kâÿÞ‡~GwhwYDâ‰x`Ó=»Ëàðì^©y °Às‰ px€ÁºÄ]÷üG~Kw…ñ—÷sw‰¶S•®{ãwóç®;kâÿþå‡Ä7çî0–IuˆxrFx¶7l@ij}µæÁî`�çnò豬ìw=ö®®�ÙInòFïë3w}»æ-E{W�†H‹2Þu#؇ë,”P¿�e!‰u«H(C„ã2QšáÅóNãéÐðÏ7gÎýT,Ï9–ˆ6ˆeU¿k–"–Ý –cÑþ‰}Owæ-Ùß« —�»µÂcÃËæ†‰½j˜»»ÆílÇÓ©yèg1ƒËX -Ï9–ˆÏ{—{ºÏª7ãÝå ˜cžŠÂ`áòœžÅ® ¥þnf†Oe”›û¼•ÚÙŽ§SóÐÏr+C› <�â9Çèâ~™ûÆ5Šû«2xD Ü4è[´†»×j<â?Ð¥MÆ!†~ 0‘7ÛxÚã1ž׌Ç3ÅãœqÞæ”ÆqµÀcÌé¸>PNn€CŒjNùì,`€C|^©q°ëc8€‰ºÙÆÛýܱN˜«†[¼m‡¡nNi,pïxè9}ïð'4ÀáŒl.ñä-`€C|^a¬~P’Çã93 }äËy 0QßA¼mñÐÏë„1À!> ™9«±@¬xèµ$–û5À!ë™c_Š pˆÏ›ŽÕ2À!Ê{‰·³m($ê¦o[<ôsÇ:a pˆÏBfÎj,«z-‰å~ pˆÅzæØ—bâó¦cõƒ p¸%pˆesºÊ �å¼ñZ±Ÿõ& ã¡Ÿ;Ö c€CìãœÁX xèµ$–g0À!ë™c_Š pˆÏ›ŽÕ2ÀÁ‡øŒL‘ ?ôfë„1À!nÃÅœØX & <ôZËÍà‹õ̱/Å8ÄçMÇêà`€C|F¦q³«9±±€±ÀE à`F…±Àó²€ñyŸ8ÄÁ®ñ¢]GÝyJßMÌ~Ýóâý̱N“q¸É›7Ÿ1xx <ôZËšŒC,Ö3Ǿ àŸ7«d2 ’q¸nx<¥MQ?‹×½Uó{cc�û²ÀSZ# p¸¯·nÎóœ-`€C|Þ®÷m×3‘«›'±5á]úužÉ™}·¸å}?¥MñvÀá®ö¼¥­�Ç:aLÆánv7G ÄÛOi�<¿Ütk8¿óÜe'Š÷{0ç7¸/ DúbWyfÚ+ ÏÓ9úò·«d2çlKç>š‡o�Gì_W-Ý‘ÛA8ûåþ)mŠÊ:J×o‡—?×MìzÙ6zùuc�08Ü×–`Îc,p¿HÔ5òúU«å; p¸™�žö§n2nïCÄ×&7¹ç«î úóœ‡ —Autä98Äb­ûxó±úAO8܇ Ïæè™\I½l"‹n¾Ý?޾yE&ñ¸÷ø. ·;»~æë¦H’D‚±$n‹f£óçÅg®úÜíî:–Oß(År~s¬±€±ÀåHDàpÝêËû|î;H,¶yÚÇ^¶w>l¼l¤E#ÜÙvÛz3ðpÝ»�"®;æ¡˺p[«F{¶ îÃ|·.p Ï΂ Û&…^ü<T`ÂþóË_ÎÃßûíž4ÖOß<q³W¶9;».ã ¯¡�C’…ìÎl8âòéy™“‹óa€C¬ãÆo,pw Ä2wï~U‘$Û2ÿZK×e«à}¬þ÷qŽXžÙO ¨àddJ¿ñ‡×�4;ȹ잯²ÕÍžçj’Räù9Ó@ßæœ9n"¢½…ëÞÌ•V·¢µwõYžpÆáŽf»ì-ÝøtA+"nw\Õ+Ò !ü2.~ÆúdGÓuçº 8ØPô•F´_ãºëÅçm<äYï¢Y2K™ŒÃ�߸ŽH_qßÄuøOMj;RKJrœË@\¨óàÏð†vÓ‰ã‡JÐÞ”¦¤¦C4ªígß…ÖÎ3Ð Í ¬D¼C“qHÐbnËXàÞ-�¨ÀáºXU,À½Ñœð,mD\Eû‰æX_5jîsD]—ù·ûLÑÏMï奸Faó:O3Ú@¼/ˆõB�L~Óió2¯¤¿à”×;¼ ¨ÏijRØùµ U+Á›uZ õu›{€uìÞ/q½µ ýK½OØÓáP�V¶þC`æ@탶½þSeȳhbêQ.‹Ø„ÔP•îý¥› <ª pxTó›‹ßР;c+‹ÌœkŸBù÷§Û‚‡øø‘Óómß¿©¯c€ÃM†�7±RÔÏܧéŒÃeYS\®FÍÁ ®qÀ?ŸiÀ±ê÷t_é‡&?o€CxBmˆÎÊ( ›†m&9”�5 Ð`Cý,ÉV_¢� ¿ƒË†™wž€æ@c�„´€ ùZÌM�³€ò!ÀDÐA®ðŸá`¤]¤%šÏr“ŸÝÔi¿ù+º8\|ž›I p¸É[0Àá&VJàFïzâè~áÍJGÎ-*“B:7¡˜ø&ãp.Ûr~a‹,8Iã&1¡FC’^P5L©0E: ׃Kî<Í�Æ iòµ˜›º8œ:x¦ƒŽ—ï:àp_ AŸç:z•ýN¯ß/>—7™(8ÜÄJ—~FÌð VÎcØÁׇª´Ÿ½tÁfzûœ¡û‡í”¨›¼2]Ûmâ(*ŽåýÆôô‰ðUT¥ó6°ÛÅz2 ¸B4&EE:_B0qá�ß|ÑŠîê|ÜU� ñߥ¹Cc�§a�»ÎÝXŸî:U¥ËV¤—²Äjßçv|8〽OÂ4mIgÈT¸t+;ïÿ„¼›q•ÃS‹ž:K¢ŽW÷w@qÕuÃ׺¼ú~ÃÁÜûK7µÏÝ>w"÷eg¾‰z“»zÖ5ç¹~¹ÊŒaꊈÃáM8= &hE­�¿ŸÇSJUÃÃ’«jRD.´&ü×$,gg§¡Biûˉœ ;À#Ó‹‘Žz$í'\ÌÛÀºŽëÙ« ô.¬Õ2DW²Þ î'h¯‡à PÀŸÕŸ×ãáÒ‰gÕB\æèp“eÇ|ÆX ñ,`€Câ½sG-`z¿ÂþÅú>Ôì]ðÅí™xœ¼8Öµ/d¯½¼ÎÁ¿xoúÚ*(GΰåÙÕ õqá}þfA¸È £}<»ªÿ€g÷÷¢?sØ÷Ãïq ½‚‹]zjàç×mD›Tip*9í0à´OiÕ Ð¡¯�A 65/Â|8p}sà€ÓOƒ8=•Ó@@Nƒ§ø))É’œì§S ~—h $Îæ �þ8•€? Áà) §Ë%)É.~Þ¢ý¾/Ððàpë—m0H <–Ã`2 ñúŸÌMè:I-Bß…ÀA9¾Ñz)ÿ$RÍ1â�éß+àaŸaA‘ëÌcùBöšLKê÷ë÷ûåô>N�~M²Ë%N—Ӻ簊dø*çÕùd¶›‹¢(Ï. g^Ôç4pÛH�Kÿ.²Nòa³×Yöüï p¸­ÅnùùhŽ^8XŽƒÇæœ#z­˜ºd˜ohöÁv:oFUÂu1¡þS9::’C�GNOO‘¾�ìœ,ÉÊÊ&—÷§ŠuàçaöùTÞyô~ÿ|ÿë�ƒÊä¨EÀÊëõ);ÒPÉÉÉ’™™!ÙÙÙ*úàHâgNNNdÿ@¼'^´´ô4ÉÊÊ’ÔÔdFl"³<Ó¨×eR p¸å$57H à� /ÂÜÆ•P�DPÀ¿CÀÁX ©2Z�N8ÞVÀS'è[XÌMí~OˆiqÎݸ|ž„³šÞ ?ÇïÈÁÁ�‰×ë•ÔÔÉÎÎ’´´TIIM¹ O¯>|�hþÀyà¢|\P�Äž _ Ïf>{ÐSƒüét:C "‡¢q~+— p"ò3…NOƒgDÃ^ï £ÿøJII‘”ÔTF«Õ Š|Uvð`ŸÀŠlx3ààp8Åç Èññ‰¬¬¬Ê¢ø}^‚„ººZ©ª® ã‹I¦Òoש$ÄÙ˜Wœþá�C85‰…Éçó‰{wOÖÖÖd~a�Ù€�ÊÊ ©­­•Ô”fvwݲ½½#ósó²³³ËÅ«¨¸Pjjª%//‡@M�™p”â¶V5Àá¶3Ÿ7H à�ïÁÜÅÕ°âˆj¯²²Ê9†/ ?ƒodÖÕGtŸ,†—ržm@@˽ƒo¡éEšH¡ýÜM˜…a¯%°Öì'ÕN<‚zÂ@Ýüü¼llnÈþþ¾äçåJMm�æK^~žU§q1H§k ¢3‡.ca\ ªÒÏ;=µ¨àᬠ|;|‡)éÊÿ3Àáúx]õº3<‰ÎÑö4”ŽT<œ‚t:=âÞssÒá ÑþœœIKK“4�ˆ)¦Òg!´n!e$k@ò÷v YãÀIH ”“ aoïP†ä×ïßDäÁÓ€|úÔ-ï?¼“¢¢:·HñiÖÃfÎ’«¨:çÌÝØu-»ª¨\Ï‘,/¯ÈèȨüúõSü�€ÉÛ·o¥»«K²ÝHM‘……e™™�“_¿~Ëâ¢Kcc½tu}”ŠÊ2‚4d40Ô)áh“àrPziEÚusÉüÞXÀXà-`€Ã#ß\úÓ�t-ƒÊ8IÁõùüâ9ôÈÁáÿ<>>–ôŒtÉÈH—¼Üú5`0p�³ê/C‚0V ´'‡åçè¾Tš®¤l½ÿ“!a¯ àÖ§@ƒÃáâŸ�@PVW×åçÏŸ299)ëëR]U)]]�R_�iå9YÙpÝid¸¯‰n¦PmE¸Ø4ôA2;f;ð­ƒ{éééôñt=„ª1=c‘ÝåÕå7xWñûˆÉ8Ä϶gV¬$…¨§A99ö2ò¼¹¹-›âv»åèÈÃÁ…¯ÔÔ4IOO“ÜÜ\ÉÍÍ¡ZP˜/ÙY™’š–ªs°,þ=Tûp™ó¨&€&ûÑщìîÈß¿ýòýû9>:b´üŸ>ËÇ®R\\(99 8„�؇ Ú�jSMb$` ©GЂ�™IKMS©ÇôtKB6,ép·Íø*çÛ¢(1r¢RЇ‡G²¸¸$ÃÃÃòýûwñüRR\,>¼—OŸ>Ó†³s‹255#?~ü’ùù)))–æ¦Fùô¹[ªª*%-Í‚A êÐN”qj€ÃM^sc�²ÀÝÖªØoîº}½*žßgGˆý¹ÍnkMÏu�1� ÃÑñ±ìíïË}™ ÙÛۗÃ99ñŠÏç%e±Ü¼),È—ÒÒ)(D@2[RSS]Çg<ÕßÙ9Ù!_'%9ùBCÔèt^ÅP¾6þî9sˆ?$£âÛ·ï21>.këkRSS%==] ÚÕÖV�ìPA?B;òŠB¬AIØ7eFèåë*PÙÕ=²pªƒýCÙÜÜ$#aee…€Ï][[#ÕUUd'ÀßÓµ¤çë nû–âýyâlad«6@÷@Ï}gÇ-£#c2:6.ccã²½½Íâd�šÓƒŽeyy™t¼i—ׯ_IyE‘»Ð(˜n×uÁPF"ºÌ˜z`8¼N§K='²³³'ÿÈ÷ï?UÆ�Àá‹|üøAJŠ $''S§~^S;ïa³Ù#ÖOC»Èyçûü¿#·«TH› ïEwevÐIÇâ´¼²,«+«’“›#ùyùRYU%……´K¨˜œÅæá¨:md�Sä¥ô•£Ô„îL½S§)Fí�Eo�ÀaD~þø)�€OJŠ‹äý{‡OXY][—ùùE–¥¥e¦óÀÌÍÍæ`ÚŠGª‘kÖÔ×JCC�´µ¿–êê*IMVŸSY•AÐÖjŒ«WR#³9ËŒ@ÍÇàà•�Ý}f¾1ãp]]¤„T¥ŒU ‹F„r€Mê5ŒÈí²°:òo 5›_ÊÂXQ‚p«¹Èa©x�êºøÞÙuËúú¦Œ�OÈäÔ””””HEy¹¼zýJª*+ÙùZ�*«C¶%F$¥ËR‚°é‚¢s¨i[©%LE«ÅI0³°¸,CCÃòãÇ9eÆ¡P>|ø _>–¬ìL¾Û¹¹%™šš“ï?~†2--M 8TUXT%µ84D^X[IKÖ]À8<À¤6—0ˆƒ 8\õ(×M¶!!!N©TõÔ¿àg8ä ôÜÃcY^Y•¹Ù9™˜œ��õ ÙßÛ#ÈHÏ µ}''Ç Hz<‡Üj+**¤¾¡^^·µIEe…äççÊÚÚºŒ�OÉÂâ¢,/-IKk³´47KyY)ƒ�*`oP«œ¥hEJkO¶©)ª’C|þ ,/¯É÷oße|bLÖVW¤¦¶J>ê&p@öν8hò¨P {}>>=²ªîþ“Ê*è@$îC¹c–¿pE¿,Iææ¤¯o@FGǘõ€àtˆ|êé’��èß••–ˆ%J!†“CáÜMàðoèÈóÄ�½ƒC—á‘Qa¡NIQ±TT–ù*%#§ìîì2µµ´¼$ëëë’_˜ÇÏ|þÔ#­­-Lãa3µe¦ÊtÏÝžó�C:ô¤”M#"v‰Çs"»îépøöCŽ,àð/2]�RR”/9Ù™rzª Ò8®k%-#$Ôì*Êϵè6–“n�ç“UeÓ:VhݺM‹¢£.…à1ñ¸ pÒ{{ÿÊ@ÿ€TWWs!êúØ)MM  �V1Ò·ç¥ÜÂUZћ߱—†“™›ù‡ùñã»ü>)-)”�_¾HVV†$8¬ÈÔôiaXL�¶mmi’¾€ªT.©ŽÊ:s¢_œR‰ÐoR×»¨Ïþe€ÃLjs c�8X �ƒZ5£Ð‡A�0§´öxH¨Š ~âÏàY’øg²¾±)ýýÊFíY™™ â!¢Ÿ—›G:ÀÄÎζÌÍÍÊöö©Å••UòáãGilj�ŠŠYXX’ßúerrJff¦Hñ}ÿî-EZtÆ!²®ÊhF‡ÞîYOÊãdú>2k¤*���Êêê}­/_>)àPme(cù  Ëç�:åÞÛã[ÉÊÈ ¥(=-M\.‡¸¸Y+ÿŠ~¾éC8D.Ú �‰ÉYùþý—LOO“ià÷�ˆýÒùá�|xÿV^¿j‘ššJú~8¥ªq û0ÑÖ…óJ“9l pˆ³µñrN(å8eÿÀ#[»ò§÷¯ŒŽŽËÆú&kÚ^¿–úúj©ª*%U‘�Ç#›[[œtP#ÈÊÉ’–æ&Ò•¨Aleà€W=BÚf6G9Ü øŒõFª É%ž£cÙÞAÆa€Qpôrp€#^Rl-*|=åÔ_èöÑ ™h†w.Øæ¿2/ –£Ïe@Ñ­T\?D�R1‡¬®nÈüü’ôöõIÿ —ÆÆùøñ=9‹\J0é0�-  ¢ú> êõk»Ù7Hõ\¡¢vÞGD Ç:TE�Ndaq…À‘ :?¼—/_>Kv6jS’evvE&§æC‡Ò’bimQT¥ªÊrIKUªJú^-Ú¸ñîì”.ý{â<‘Íé�À‰ àÑÍ%ÎÖ^Lj€¢(%9�âõŸÊúú¶ÌÌÎK__¿,/+Öjúšꥢ¢ŒÎ>”!“]Éâ÷ûøûÕ•eÖr:\.ÉËË—êš:),.äÞ8=3'¿ÿ•éé)™��•ÎÎt¨ë-à@—\ë«Zõ¢:óo‘.Bg%ïŠfjØKQã ¤*}ý à0&kk 8 ãÐćêP0Q“¤N§øý§²½ãfVejjŠÁFPÇŒ*+Ê%#=�ý—@íÆ7A ›¼ª¬žóÄ”½½#›’ïßËÖÖ¶œËÉñ¡øNޤ¾¶ZjåÝÛ=ÓÓSØ?+¬b©}–‹Ý ò®Ë‰^ôðx#Ã#c200Èg~~¾¼nmÊÊËŠ¥° �ñBÕ»>C�PЯRONN•ôÌl�ƒŽ=vjjZzûHß]Z\”7o:¤££Mjª+鬃„?|ÌúGh¤8%˜q¹’Ù@—�Þ¼'ðûù3dœ®TÙØÜ’?~ÊÄĸ¬­-Km €C—456¨âhf à/©=ªF^Ÿ_—We||R~ÿþCߤ¶¦F@-~ÝÚJÖGZZ²Õ87Àç¦MÚT’jìzà9‘å•—_¿zécdefÉ‘ç@<nÉÉÊ�ÂÂ<éþøA^¿n!])‘‡h]¶ÃŠK�±f˜ŒCœ§: xÈusÊÖÖ®,-¯Éÿ¾þ�ѱ :Áååòï¿_¤¥¹^JKò$Ùå´¬âèüÔ8•À!Ô‘ò$pøØ‹ÁK ÏÒÒ )N(2‚3'Hà ‚ËW^VÂ"¤Û°x<Dz³kG8 ãp”ÿüû…reÅEù¬q µ‡³$9>öQE‘ÿÅÅeÙÙÙa|a‚£/âêê )+-Vü~"s+jÀ†ipŽE¶AÉÚÚ‘å•Ö~xŽ<ìgÀ“ž–*E…E, .).áµ<Ì6LNÏÉúú‹Êsr²%/?‡5ùù9t¾ òs™ú+))’¼Ü\‚,6ºC;áàö÷x/¸‡­­-öd@”¿Ã"‚LPyY™TUVHyy)ïÉ鲚¹8Ë¢8(ªR(ã�“)©©.R•&'QãðKææФ¥¥Qþa�ƒ Ȩ,�%ͺ3e„�Â8ÄyR›Ó ÄÉ�áÄéQÌiŸ°´¸R‚„¬|Pw¶wö¤ïï ŒŒŽÉÌì,k^¿j•W­-òºµY©!¥ªý^‰µ¨h—×çå FàjL>ÙÚÞ••Õ5™��—©©YÙÝÝeÏ…’RìûE’“�%¹9Y,’Æ^^SSCÿŠ”Û;;ü3;;GJÊÊÉ?<<�µ•eÙÞÚ¤ƒžŸ_(5µ ô††GHƒZ]Y¤oðås£ü ¿!úÊ‚f‡Rzòúè¯)àð›÷^W[#­-Í|Þ¬ÌôPÆ�AZ‹‘@º.—ììÈÄä‚ �IÿÀ�äæäJ}}½xö޳%'Gq$¥§ç#�ü&d`ÎÎTõª½ÜdžiÆAo˜( 8 íµ&ß¾«ŒÃñ‰OŠŠŠ¥§§›À¡¢¢H2Ò€¨-�-5Ç~qz!²dIé|� ;�� p(õ z&8‡A r 8]74Ô25WP�OôÀ±½ë–¿ýƒò㻦*åßÿ‘î��RT”ÇÝaÚëõËöö.ÊìÜSŒ ¨ÕÀâ€gFS•ÒÒbimmâõ�ºÄ (DŠðÐ2·°È”çü¢,-¯°«2|*-5UŠ‹ŠXLUSSK%(!CÒtrrFŽŽO(Ëš’ââB…ÎËéiÉ’••&å¥òæÍk¦:ËJK%9ÙiuŶèF– ñFP¤Žº 4Á[[ß�=÷%â�õAæh?×ÕÖrá% €(==ÕRU:’ù ÞªR €Cç{ù5Ù’’┹ùGc h9VP•Pã €ƒÒofæEA‡P]ƒ:å= Á0AµŸŸð>jnÝXàA,`€Ãƒ˜Ù\ä (E!°%T0ê4‘ñ?8<–•µ ùñó—Œ�O0p‡ŒÀ§žÖêÕÖTJŠ jF ªá™î;eq%Ó÷ÙØØ•™¹›¤X ê°ç"Xš–ž*ié)悜奥¤$#� HŸ#c�à[NN.��Ô 0ÁU;K��õ!"ë[²´¼Ê”+@ÐÁÁ!;y§¥¥Krr ß�÷ä„ý"@QB/†Žö6ik{ꔲ²b¦&÷ŽdaaU‡F©ª¤äXpPÅÑé6à kæ¥K˱V–I jýÀ·¾´>´Tñ—f÷7xn0Àṽѧù"æJ2>Lf,)‰¾Ðñ‰_66w4™`cTøCP/‚¯‘ž‘Ê œÓ™¤²ý¥¥R[W+ííâJF?¤y™šž–‰‰IÒz‘õP@åTÎNýâL:“²Ò2©¬¬–†ÆVR–FÇFevvZ–—˜qÀ=#˜ZW à nA:þId €¹¸´n‡?<ÿÅŒ" qŸ²Ì”®,²3 VY?õÊôô,{8@†þÀ±Ç#;ÛÛ2:eÍEého•ö×­¤A!èªÂ)ðv™4�Ï8€ètŠçÈ+n÷�Œ�Oq0B~ قܼ\ê775�Ú£ÁmŠ‹u ¡/tœž±—ÁâÒŠLŒOÊÀÀ�œœøX ­d(0ÁéUÎñºlnmÊÞž›j¯¥íU+‹rY{±³'½h÷í»ŸxIIB‡.‡ÒÉÎÊ�£#/�ì‰ñ)™˜˜–‰Éinp¡ TZZÊ À äÔ677XÓ€†/?v2QQQLDîÞóðøÁÁ!.PT((,”¢B)**”l4œÃ¹NNA@´#?¿@r²¡éœMÐ1=3Ïæy;»;’Ÿ—CI7dG@UxÇÊ¥¥ER�ŸÇÔ#¢øúKé= ³  [ ñOÜ_zF¦|!- ;onlq¢ã“ûUk³¼{×. �µŠòuˆì‰Ê8üø®€šçEsòÍ’cef†À¡‹ÅÑ©)è ¡Ô±.µòªÌŽOsG6wm,p… p0Ã#, �ƒÊ6(¾>j–W8œ'pXXZ¤ÃÞÐP/Ÿ{º,(È'éµ Ú(A{Y¯¦n{}§âÞ;ä^>;¿ÈþF +íïRÅHQ• $3#�JM`HÀÏx@'høè�52:J!8×èo…h}~n–äçæHQQEEårâõËÀÀ‹¯——ªBÀQ~ÕÕÙÇ@*˜~¿¬®nRǨªª`AuKS£d¤ƒ6ДÎ(·Ž`#|† 8äè(ÀZ̯ß~°�ÃÉÉ‘´··Ë¿ÿþ+Þ¯¸wÝòçÏ/™—úÚ*ijª“7íl‹žOª6$쳜8j,ðÌ,`€Ã3{¡Oôq.øA™žYdMÂÏ_¿dcs“{7jþÐÄ Äì¬t*(²ÐØ’9×òáJ˜„ÝšTOˆ$EçA@òôès€€#|(uw`M!®Á/²´“dmmCúú†¤CðAUOx÷–~ø>P*bs¸³$ñú‚ô�%Qr¬+RGàðIê ÐxþÔúæ6}1uo(à>!¨ØØØ O‘•™A†ºhà&g§ôWàÿ AoUuµäåç-,¬ÉðÈ„üúõGNƒEŸnoc�¨ð÷¾þïÒ×ûz‘R�—-=ÝÙ§ >(ç*^häXÏO%m“»Öt&%²«õÖCE3ß� ­©ºµõ-ع¹Eú@~Uü:%-Í%eå¥D¸pÍM�’—ŸÍA„èN(hÆÀÎLÏ”wïÞÑá‡ô'8ÿº‘ˆ{ß#+«ÒÛÛ+³33T B:ìÿûÿO ÿÿö®„­‰¬éV ˆÊ&‹ ⊣3Îûë¿™qWvÙÙd !�|Ï9uow' @@py_“î¾]Ý÷Þ:U§NUT�OßÙÕEѵµu¢á¿ÿpxÊtavVˆé:4®CÓ5L((H¦Ë3Ï›%;¦A€Ã›7ï p˜`@òY{«46ÔË�7´1ÅŠBT>üø©Wºº{¥¯·O®\¾Ìï!ˆ÷ða ë áÌ[åÆX,Aàðê¿Wd(ÌÎΰöñ¯Ï¥¡¡^jkj€D õ¢�̇Ï’îþ¨LpFàS¡†>Q"cc\øW¤½½]>zȺE‡¾¾aéî�šR7{>@nõ^K³´´Üc ÄÖÖŽ¼~ýJ>}x/?æ$'KØ[âþý{ìQ„`¬é%µ×+ê2ç8ã`¡²Öä¢ó"xkÈ$(m¶º¶N™VÔ€ï‡âfÈŒ-//±&š¾EE…¤ �[ßÔX/Å%ÅTQd–T›Â‚"¹Y_/wïÜaÔ:KÛ ÐqF!²ÈÌÏÍѹG‘Ïßÿû›²¢øéîî&U :ËÈ üýò%��/‚þþ/lnö©£‹ã®¦ÒQµÔ7ÔP®Ôöñ2ƒúU'(<Ôà@ö­m�)™ÖÛÛ+#£c21©­å[Ñ9ñn“46Öꂃ ƒí�lÛYÛ%BÌž@º  p‘q@šòÙSd´ù›‘3S´nûâ™þŽTÒnÔÚ^%YQßàžåÊê»jolÄx?K?~ÈÌÔ”LMM2�»üõçsÖ9”•_&HCq´¡*Å¢”“£ª3JUÓŒû8PŽõª‘cu·; \t 8àpÑ߀̸Ó’Éô*B�ƒ‡¡á éCÆáí;² ªªn$ô%›ã§+Bª’ÖîA¡)Ζî½ ÊÓ¿}û^Ƙqpx"íOÀÁ´ƒÅ_È8|ìm¸Oúú>KåÕ v^¾ßÒÌ?`Hh52Ñ+ ôhÓ®¿_¾ÍN³ñúg�à0:6&ÃÃ#òíûûZÔlÇTy…y~a�{ͬóö'¤hЀ¢þ«¨ºç8Ø–ètT Š%’T¿žÈŸH$Æz8Ôhá>øe@–——ÙÛ úœôzÊž¡áZ }ù"ÿüû/#âP ((( ÅFƒ-ªQ®"óêÚ‹m@…º}û6³pê‘þëîêaÆa}T¥yù÷Kiú”ÅF�!ƒ2Š™!ÛŠºåKaa¾—ÙP©PÑú„h”r«¨Ý@vê(üY__“îžnòçæÈI|ÚþDëkØ9;a ,«ˆ¢ÌQfÑNÈ€¢ |hxT>8tv©®ò½»ä‚³ˆô¡Ê™iÆÁN>ÛA%‮ÂrPhZ\úÁ¬úñ± ö—X^Y—­hŒ ¤ a :1¢îÍÞH÷t… 8I$HBª¯¤¸˜ê­­�Yc€wr¤È^@Ñ€ àþ~I5¤Ë—/ÓaîéÖÔ`ww/³@Õ—Š/1-HN£iPÇ+›Î×�XE§e¤Ýjëj)»´´(�”ŽEÃ5è2ÿñG»Ô×U±�E|'Æ j–,¯};|fkBèãðéS3%wnCÊöy–·šêµ®À‰û?¬i¦!DÀ°¼²F]hЪ�E†@5y¹Ú 2ž�Å…y™ûþ�€ <Ç¿@Uzü€jN8/3¨q€ë2¦�Ã_±·„öq‡q¨q@½D°8šÍòì�•cõÒ'³±Íy’{¿ÍmƒÎÎgË8œ­çužGëµ…dAdK5#g�ÄRFGGdrbBž?JAdã¯_ךb<à`Š£o\¿f”"ï8dçdIXm4Û 8¼p`�Ã%XÿD�C“Ö8À GpÕSUÊÊòU•†Fäã§�dB ¨APû óR4´’œ<bgÉêzT&'gäõÛ÷lVøHÈ @Z67'Ï4Ô ËÚꪬ¯¡‹ô’d‡Ò|÷–Ü¿×,Ýg6lF!=·À+:7ÁÕ|ýjQ½hêï?Jj¥ÆîÊ�ƒßĹ®q æ>£ÛúÃYÕ¦*øï#Z'6L¾ŸÊ•…(ݺº²I:¸w33�óŠJk¢ê�,Ð��ý&ÿ÷Ͽ춘_úL¹TVV’§y ‹ôõñÀE i5 ø¦[M’Ÿ_HšNW§R•àø#ã@àPZÊÔÈHt÷ôJoÏg¢òò²r¹RvY®”•rRàÅÆ¸©¨`2 (öÆÄ‡ƒŒÎ�³ß¾É‡�ÙÀ¡õñcyñü©«½.7®—ËÎÎéJ¨50Ê£æN…°x„Y?9¶ÎŽNééé•;·™.MÍ8(p@:Ñ,_°-ǧ™€5©C% µƒCCìZ‰3ÕÕ5RS['u57ù;N58Ø/½Œ<e8´¶=”Ê«e´ôð¨GåXf”ªä‡`¸k••¤*AŽ5X”a³ÁM÷¬ÜQ&äÁ§®û¦³€³ÀqZÀ‡ã´¦;×Q,à;ƒÚ{™‚Ùï‹ì¿DZÑø8�iÔ)‚öúÏÕò+d XàÀ-‹½§4¸¨^¶m’¦SÈ«8¼yÇ@)3ÏÛå�ö66}ÓŒƒîÙJUš“ŽÎ>¥*õö²_„Ul÷jH¤<€� ç™šž•W¯^ËÀà€Ì~›¡úâóçÏäVc=¥Y‘1À°ÐÑz'‘ RzJ|5} È'Ô&*‘eaçh¯CvBÂÙYAßf—dhdœ6]{qÍxcT{d£92²HÕ¢Ë�ˆËöVDr³ÃRWSEJz{{ÄPj‚4,ÂÓY7QPÍ8¹]?à°×èŽ2âs ÌLáK�´6£éÈ6„ ¦ç¤ÒÏñö¢8w3ºMêœuüÿµ >dz ýææäßÿ¥³[RZ*M�M,¼a =HHT´´0vnš¤¡û‚™µµ�T4ã°C(DPÀ�ì+&jgW/{ Ôݼ) uÌ" «²Õkö^bST„HEÑ¥")ÈÏ£¤¢úÈ8Œ�MÊôÌ,º –âö­Z‚t\F†ƒÊúÈ @Ý ÐŠÐTÀaD:::˜B„¦ò½fUv UIv$Ä: 5íÀ¨€ ÜZ×°½� Ì6›¾}–Þ>4´[`±xUu•45ÕËÕ«•lg2OŸ>}âøP,öòå HÑ2ã0:#]Ý}¦stL;G·)p(.Η¼¼,ó;GcáMUªªD5;dL¬…þ'!5²uÞ ½'qJ�²k¸c�œÎŒà83�êÌ TE&h$TÙ9zæ;�â�Á/”w]éùÏØ‡ ½l7eOþÜ(iwe³s™&¶¤QïàðÀa„L ª*µ?!p ª’ƃ‡ŽN¿ÆÐ{@WÅ'';ÄŒ€ŽŸq˜•ÿ^!ã0`T•jXˆ|r¬7kÌŲ*8>ÍæÖ–Q“ü"ïÞ½#H‚3Ojtó]Ö-¤Øzø�£Wå©!ú ê"P[^^&×®VP“�dª:f1ËšÔÄØ˜ÌÏ}'`©º~MþxÞNÑ(jâ\Ûv“Þß·žÀQÜðÿ–Í2ìuæãé¹–`gug;Î>œx¼$xAí8h5Ð},4Iéï$OJD�?ki¹/·Ì …Iûß«ÿ˜î*¹\Êè=:>—J~ –™â0“Ëû‡ï¬êA(^ZZ‘ÎÎnò!ëªÀáO‡«—I}BÊ œÂOŸº8ÆÛwîPU©µõ›Êù/‚ÿ:á~èð†B,¸Æ�T+€ÐЗªI¡“"Ô î·4É­¦Zv¢Äõ­ú¡Dd{T¥ Ô8 �rb8`Áº9Ö§ B¬ïЖ÷Tf¢Z’2¤‘qh@S;4~ëéý,CÃ#”cEFçÁƒ¹ÛÜDÚÆ¿²¼&‹‹ËòáC‡¼yýŽÀ“ùåß/¤µõ¡T\¸‚‚®.•cB–¥­­Uþ|ñ§”–äK~>¨J Y�Ë«×oXOa‹£AUBs€>U§R6͘øÀÁt‡³†õæäq¦¿„¸#œœNÛ<œö8_×·ÀA}ý¥AôtB=êÇÇÇY3 Ú3j ÄcÇg:âÆ0@øØÛ•†‹‚ëOœ~ÎÛ·o•š=>N§rðp0xL4mýÔÑÃ@æç¾ÏÌH(ph&e9;KÝÇÕI…Ú É×éYSãÐ/3FŽ{.€CÃÍjOHÅÚç"à‰ŒºYÃ÷p@Ô¿4wïHKK³äK6À±+Á ê:ÑcêŠ��@ƒ¸·oÝ"õ='�–A×XYY‘÷ï?P!ja~žö|ñâÁIMÍ ÚÓJÌ{Y›@í&!ú@ IDAT§ö %þþ÷1]ðà€Ã/ž�FÍ5Ë'ziiYæ–dêë4Õ{Ð Ê;�+,*ä$‚ƒ §> LJ®n:·¨úÇ1�[[¥ùî]òßV–° yæÛ ’1qž?.ÕU•RYYÆZ…Äz ¨T*&­-¶Ý ××£²àÐÛÌ8 ÁYåÕ+DÕc“l �HŠˆÐ‘±Ð.»RÊ"i_:L�]ÃÿÃuÑë`fæUz{û¥»»�÷ÞØØ(OÚ±�À'=Ðì°. œ M®×ÇÁGCU©©AšïÜf„âÖ­F …l¦Áôqð¢óÙLF6·dmuC>uv±‘ ´£1ùŸ>k—ûîISSÕ“Ü_\ü!³³óòþýGyóêS‡XþzùBÚÚJ9jÈ8€ª„Œ:GÇ ,p()pËè¨Ö8¼yóŽÀ�ÅѤ*ýÁEETT¥`ÆA#4^q=OŠd;àðû×Dwg�3eÎÔãÊüÁÒwQ×�l *!…Ù$­¯ï‹ôõõKo_¯lE£ríÚ5Ò…[=dmT‡¼^gGfH±6ß»#¨WÆuQ[¡ªµ�ïްÔÌÌ4Çøìé¹s»^šjY§©!:4¦Sà¿ãû÷yUUêFmcœB/–A­ �É“A²8Zbfãóç^Yþ±È>XÈž á.”áiðV}(\§³ ª•}¼N$²!wïÞ––{Í,ú./»,y¹¨‡«©MîN+ãpšïú¹Dëh ²—ññ¯2<:FºÏØØ;!_*.!—­Û‹KJÙÕRb+«+²´øC¦gt¢ÁYEëu¨U—”–ÈÆú:‹„�ü»{zøÚ—–”Rþ²¨°ˆ7º‘�Ȇ¬./³®¢’mÓ«(I†¢ìÅÅUª%aâÎ/Ì� ^ õñCih¨•òŠ+‰lRqˆ´ž/@aõõ78™Ð׋8Ú«¯®€l²8ÅSˆ  ÷jDïû>2Ë1¿°(+Ë«R[['5µ5, .))fçåµµ5™››e´uõõ Òrÿ¾D67 Þ½}'ïß} ³�ΑàÖÖTK~^•� ·\RRd;ê#´( à!Ý&M Míú>�¶¼²"uõõ´]mm5SŠ��ÅÂ855M¥«™™YÞx—H'>ztŸ‹~Æ'Ð$N‹£1v<3ÖpÊ–bÁbðÕ&P¨Ö×W‰�áÐ?xpŸ²ghI�úDúÑ){p`ˆý`‹ÜÜ<ÉË/�ŠŠr6¸ÛŠmIdc]–~@j6›Žú½{÷äÉ“'\Ф }>|ø u±‹´09‘,»rYª«¯³Íûõk<Û·›þ hÀð02:Îz‰Î®‚ƒü‚>‡Š«Wù`7€8€!HåâZ¥—K ¾ Ê`�CV8K¦¦ç¤ÿ³6Ç™››“ØvŒNX ÑѺ¾¾Ffg^¿yËèG,cD²®�’ƒ>4I¥…j}†â¿…2•Ìï&Râ€Ãþ› û†³Ày¶€çùéžü½Ù=Ås¦´ 4MÅþ�ìÀ—Á!îe‹ KT~,È/�âK%*ŠRPÈ@äÚÚŠ¬®¯Èöv”L7QÛØt«Aª««dqa™Î3˜hêŠ$¢óØÇ/ãÏ傸@؇‡GÙÃ5ޤ*=|ÀšDê¡NvkI³B_…ùð±“uƒƒƒôUÀTxh}ÔÂzFÔ(UɈ”‹|#|¨™~lÒø_` ž�‰Éãþ?=ý•’íYs À5tþMZ{ìô̼ŒŒŒ“æŒâð¼œlil¬—?ÿ|N&èà`Rhc[ÔüÝ«ÇÅAfKF}•+H^ýZ„R¤P#˜@we¤«´“±w•—Ј9D¤�¾‘m€Í@çÁ9Æ'¾ÊðЂ@qŠFѳ´'Ș%èø²J Ž<8wÐÞÜŒ1UþReHÿA³øÙ³6¹Û|›=$pQ,àýaìHá�2´Ýb4Ž6¨VààCY\ÇšÚ*¹ßr�`JPX bÛ;,ÈF8ôcø"³ìظdRsœ™—¼ü@^Ž”•_‘ºº:yò¤�`dòëWì Ó" 8Ü1ð•Œô+j`ÅžÛÕÙIõH0°C­“`tØzB<ìŽf³ÖÂ4ó%ˆ‡é‹õ}ÖÚÍήNªM56ÔÈ ¸XYQA°â«"Â×ñP¤Y^Ù0Mêþ“Á�2ÀDøßÿ^2˜xíZ…©ý´ó.ãpî�ƒuVñ7Ú˜¯¬¬Ëüü"£÷Ó3ßdqqIÖ76HãÑæ:º(¾Á¤¨¾q�mÑ!;¦Q}åÉ¡• І76"òãÇ*;ŽŒŽ±2³¨5`ï†,Ê¡‚—* ÀHY:æ°èg~n�½"åË—!ƒ’sÿþ=ih¼Ià@§?¶Cù×ïßdrrJFÇÆ |Ö×6LïáØ±àeÁÀ¤D"J báÑF$ÊÚœ�¤QôÅækaœc.央¯¯eF œ~è-c¼èÁ0:<Â6õ0¶-üÕÊ *,!]˜›“M5+[/€4#&íÆú&î8Á~¨e 6ÉÏËã}#= À†ìÀf$"‘ȺìÄ·á@T� a›ÈFŒhdd”j²?U5U¤—A�=3ð¼ â„ï}ý:I R]u]n560Ý  ¢½>T’65ã€è†'º‡º‹9 d¼pÈøGt¦¨ÀÁHÈ{½A1P¤ÅC²¶¶!óóóÜ‹'Æ'éϨÿ÷$àHDϧÊkåTJB@­¼¬Œþ 69ø`x@zû0(¨•„/€¬ŽA}'šÎ!ø†ÀÜøøiO!Èb ²�ºFXѬ¨D ZÏÌ1Ø988 ++ˤ@C‘ê�©Áx4K‘\W¨¡\VÝ“©5Ô&Ð�D}bbœ ’ð{�Õ@ŸH²"°É"lSK¡Š›Z£1С@¥Bl8'c�Q¤�¢ ;G05Õ‡qð^1i™Ýáâ�?XP´™ZÝCiAi[6fbÚïyQª<µMЀg‚º[ðMФ±OÒVC8 @‰]DÐÐf›À0º%Æ} Â'|zÑèé¡Y¦mZ@ �mFc|.ãpÒ;¦»ž³À´€gð¡eð�ƒ|¥Åê>¼›Sž,;�}t{ù¶îÇ<ææfIV¶vhö"ï¦�”l–”}Õpì±êS xipc·ä¬¼ß§JyJ&*oT�ࠃѱm|#ìÓpÎéØÃÏòöøä‡bBwê~çŸ6@6{9šÆK¡xÜøð’èj�@ÃÔNà¿�\,ü?ŒK™>ËÀîýð©T}ÉfLóW-²H 8f:etÆÁÞˆfÍÔáV~œ‚E¯¶À¿«sª5¬u|ñá,kU½VÔ«–¿M ±…¹9?œp¦ �Þ?&+Jø;˜ý\´�à}ÙMZOѳ¾¬„:,þ7Ô¾«¦õ{à Áá¦bQR*ÏF)ÌÐí}z“Ϫø…¾8c×û³=-¬³ŽÈƒ•XÓ5v¡¢�‰ðoÓôƒQ;£…¼žO]´8fÏ~>gQ�›ßÂÖè¦ìwbãoü®a(9dF°Y5$Cõ€šA?¨¯ p±Ñ .Ú¨Îû h�@q´Ë8fypßu¸pÀáb<瓺ˤÀšáøb�2;²W lþA3òüÐWÿƒËAå!C»e§ÙK齘à>÷{o/7ÿŒàzQ%âÊ´ óìþ4è¾Ì=Ûú!öÜß•ª¤Ì ³³zúæz.ÝÃ-õ'Ð-;ÉÐÆÓJòÍmq®ñe¼0¢è}ÕœßíþnM¥ÜêËÙcx¿^fÃyô�ð 4X逃õ�Ò™g8x¯WOT¼û¶m²ÌF²éîÒo5Ñ{*+[‡^A†�Àó%ÞÌJjÓùÔc­KÔKà`^YO·Ùçòé9€®í“Q­ž×¢{›‡0wàEÚƒZï0kt뤳Êöº~†Åã]Tù ‚uìyŸ¦xØNJ‹ÚynöP³™_Áøñ6cp0À!ð©Þ·½W[ˆ®à‡˜ìŽ}Áô¢pŸºêé³ñ5g0çÿ·Lñ@†÷¾˜¹X±‡t– wŒ³Àù²€çëyžöÝøÀÁ‰ï"۽ѨÙ\¾u%L NK0”÷+N5�O­Û´; ä™h½A(ÁŒ‡·'ªÉ}�Qÿ€ñl@5hO°Wð¢~‡OGÚk÷´Ö°¬¿ãún€é �ôõ¬Ž‰ôჅB^ظHÉ÷`(RÖ³6òî4"NûÍ9™ëŸkªÒÏ!�ý$•Og_ÿoëJsnø$!ƒoí ¸×÷ý#ù©EÖV¼‰ÿ¤N¾‹l=auß9¡¼ ˆ s૪ÈÁd?¬l�~ͬPÙ€Yƒ-ZÒ(€žÐD¶ Ø‹pxB��ÍØ(qÐϼ«FÌð8«Td »RXH`Lä�ÕÜ¿.2�oy¡ lþ2€[Ô•B#$š�±ã& ‰¼H xô¼i€é%5E©ãòåX-ŠÓg£o…'³X¹«8 dªpÈÔ's6Çe÷�o{·¤þ�)ù(øc]Ùà.ÉoxÁ±$רx6¾ÿaƒ–©ç5bàjzûÿêÀOüŽïS‡Þd2ltï ›o ½˜¯ÖËR¸k³Ÿ[�²—·` ±UýI­gv|¯;è[ø5¶Î$è»í=ò³ùöí?ê ‚+0XC¥N&û’ûÈÞ¾Xö5õÏd¿ãŸÃKÁ�Ÿ˜Xýy�x|Û}¤l_rû¡‡³Í)ƒ£öFD@‚u�½¼ƒ—q°ÀÁ:Áfb:S"ânJÐG×hEÐ&f9�Ó¬QC°ë›ºã”˜éh_4ËS ,Öæ!ØÉŸúò&ß½&büÓ‡×õjH4³aA�j?+MÉWCð˜Í–àÊL�"»¸Xç‡Ô‘^¬%dÿEÆ}ÃYà¼[À‡óþ„Oöþ‚®²RcüÂ`¥ÔúžˆYÐÉ÷¾áù¾[t‘“Ýe»[ÆÄÏü$“Ú¸ÚZ„GR?À:/{œ+ \è%“Æ›zg6?°x°4îÀõ,YÃ0Mì¾ìÙÖÿ”Ýå³,R÷o¤ôwòïùg>Ëɾ3'yµ ‚yõØm´ØN}9R'c0h¿‘‚~“ž–ÿýà4å‘vB0ãà䨂$/¥†‚f‹– ÊkD–äÃk†ÁË>ÕÈxÎ}ÊòƒAu¤éT“V¥)I+Cê±£ìd2N3Îck*l6Ô¿ý÷ÏОlpC�î  Ògà- � ÇîEÍÖ ˜Oì¢éE2̳ r7=ã[›m£]#mÝŠ \*½º Í8x¼N®“~ÖF§yƒÑ{?8œäæ®å,púpÀáôŸÁyAйõ÷oÍŒ÷ó”�4™‘`üPTÇ=wØß‡½ ÌÛøûn‡ß×­Ãìïx¶æÑ ºè)@�²´¡”ÝÑœ‚A@[Cdg›1Øì€r�ö!û‡Ô÷ÃÏ8| Ïç±õ04ØBkIHmV'Ã÷/Ö®dà°±±a2`{£ÓÌYPSÇ—úûÞ8sï»J") ¼¤÷30¥Ì«¦3A®‹¢t�•Uß5bß3ß]¯á9êæÕ6¿û4~’¼‚§ ÇN �Þ�Ö(KÁ[Mg)÷èMµÝÇ$OèƒL@U Íû§ ñ ˆT˜&tJÛ ‚VIH©¶Àâ§_ÑKÒ»Ȳ¤.HIIš]þžÈœyö{îÏ�ÕYàwZ`·ZÍá®f�¹Ã•9ì±\�“‰ë>ÅQï÷Àr_<ô3òv0o7u’ÜŠ’÷éÝ^�ÙÓ¼}ËÒ“@!i‹Õ zòÏ/‚£»¶çäh{�¸›ç´{mªÿ£>FjÈv×k ûû«gíᤸ1öÜëÙ|þsÏ÷y°@\Ïçe?à°ß"”îâvü�ao°û:©îþÞË~ë0ÀáW×Úï~ƒ£ßw¢y'ûÙtHšÖû]ú—Ÿ'�+ÙÆAÛì=’Ýwu°Á¤,)QˆÔ´­_¢“]k¢ƒÀÁCE^M�ƒ­°‘»Q ©w½UÁ>»É+sæØ�‡ì¾è,�QØoûÙ`Ó ¾sÐ}i�Ý#Mà€3¥{¿õÐÎÀ`NjmNÝyýz†ŸxÎAÛ‘¯³†ì¿•<‘Ý>û¾Oçp»ÿîñ›6t¹ÿ˜wë×3p÷§»ÃÌé\u_ódì.pÈØçàvÜH™ÇIåc¦ ÝWfJQFâÁ_J½µŸŽ2ii9…5ä¤6§ã~Lî|Ιb�ti2å fæ8Ncm¶5†iYÄlf‡ÝÆxX �¡yú_ÿ8¤ž+ù G9×a¡ûnà�–¥ÏìAÇ~½8�IsfŸ†ø±YÀï~¾$x”ʤ¯ü*tðEpßóØîTOäæÙ1Ô�îÂY ]à`ç_ºsð¨×M÷Aåºé^ó"—î{q[õÙîUF`pÁžÃòÈM{1ŸŽr#gäØýÒ¹�óØ€Ã�¯è¾è,ð›-ÀIlŠœ4y°+‰kdpM‘z ÝQ¿€ë¡–c¶ÁilNÇ| îtΧj�£8[atë<ÂO:×>êœOçšG¸Å yèQŸÑ©m�ÌÃÏöÇ pÀ˜Á?Õû<ÂÅ�â/á²§~èÏ€ÃAß÷�-Ž>õ;qp0ÐÉì”QëÊ/Hñ%kƒW�•îW‹Þ¯ {*_ÿÖgsTªÄoœ;¹³À±€U„9ìpíü;覙zþ£8ðé^“Î] Në°÷ì¾p åü*¿é›‡¤-ym©.xpÀÁ÷–óž‡"‘HÂ-@¿iÒºÓ¦moBÛ÷:i†Û*.ýÐ{õM;_Ö*åò©Ò)«ã)»“ýqÀádíí®v>-à€Ãù|®§}W‡q¨N{¬{^—<êÏGy/nP¿Í‡yÏpøm�Á�øHø‰÷®4&û¶Ÿ†½’O]ÚóÚ¦‘L°'Eð{Vªí4€Ã‘låvpH;{yνº©]Ôü¹vƒ¡��ˆvöp?ÎçÁ̤y#°Hóxw˜³€³À™´ÀA7Ì3ysnÐgÎŽræÙ…°¸çt½­ e/w³™nÛØ-�×™ ²]È%Ó±Ÿ³Àï°€›û¿ÃªîœéXÀ‡t¬æŽ9) „666MÆ!O뤆é®ã,pp ¸E÷à¶rßtpp÷8 8 8 Ô8ÔRî{gÆ8œ™Gåê,�pÙ†Œx nÎÎgÀ¡H$jT•�qpY‡3ðÌÜ÷±€îqp8Œp8ŒµÜw�œ.² Cé~œ2ר=8°µ5™{#ndÎÎf2ì�¸á8 8 d¬B››È8ÄÓ–²ËØ;s;P¨�ÔýÍûÍ�‚f‡½d•RkžÓê—Ò7"0klWZ}.^;wÌ8\°în×YÀY m „6¼p Ó«×?SGûHÛ¶îÀ#Y@]ð½ü{v’¶Ÿx_ð]ödÜð“Ö™I'6ÇRŽ•ù7äžXqÂkÿèµh¾çgCp8ÒCw; É?ûíc8Éìî`gg� d�Ðúƺñ“Ð^0”ìbºß¢{�ìånõÄ,`�C2€ÐßâBð°«#¦BŠd¿ÿ×Ào¼÷ƒÿ ¥d,8§*Xø—°ÇúNìqrH²À~Îÿ¯ö±ýŽu¦vpppP „6"Z�?8¸÷"c,`@€qìm”ÿwKBò³ v>„H$Y@9:3�Ìßþ‰�}+•IDAT¿dŒÝ@œ.ˆösþp¸ /‚»Mgg�c·@0‘ŠlFñx\£·®ùÕ±Û�0= ìvʃt ò'$´‹ÇtøŒƒ_?¡%ë\p.0ÈÂQ@ xQ n’“éݱ;ÊYÀYà(ØoÿrÀá(ÖuÇ: 8 \d $‡èV4ßñ‹£±¸X|y¿ù"ÓÝûñ[`ï‚ s7 Áæ ü2˜’Å~5ÁÚˆ„Ä …C‡%nD²ÂaÎ�Dó4)ü^“WaHOŽ«tü/„;£³À,°ß>å€ÃŒè¾’1Àûºß;}ƒ ^#Õÿ;Žó»s$[ÀÚû$žmªí�«ì ‹m%vR€3æÇ÷ÚŸ¤vC'Ó�üÚ†…£€ðÒžÀÁúúöfö(Žf>À –p8䀈°qÍFào’—̽,ÅIÌ]ËYÀY@¡ü>sÜ‹rV,�ú®î÷nç}—syœc:oç:Éçyܶ#&ØÞÞNìììxÎ�EœIÎÐq_Ù�ÏYà'Ø[%Õ�ñó°ÔŒB0Êÿ39Ö},ž ‚˜Ò•”¡d‹¢õ¿I”Šk: ÂWˆÕ,a„¡6¹‡ë,à,pòØo3vÀá䟉»bzÀ»ŠîIG§÷›CéÝ�;j/ œ%€|éíìì°Æ!˜¢Jýï‹øØS'ÐYzÈ™ü¼H“q�_´Ou#~hê,µ. —`')°å ¾¼°Wlm@‡ý]1@@k)˜.ö2 ¾…9W ’ÑwÆq•2ùýsc;¿ø•Ó³ßúí¦óû^dÊ�dï³cÝ‹2Î�ÏdÕö{ŸrÏIœuWßz“�ùï%xBæEb1"ÿjÎh*ç@ÊIEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/fig/main.png000066400000000000000000003545611523260663500334060ustar00rootroot00000000000000‰PNG  IHDR¼øÅõÖsRGB®ÎéDeXIfMM*‡i  ¼ ø¸+’<@IDATxìÝœeþÇñd+°ôÞ{Géˆ "6ÄŠ¢§{og={Æwžå¼Ãrövz"Ï.6D)R¤Hß…]Ø’Íÿû›g�°�d7»lv?ÏK¿L&“™gÞ“L²3¿LüË–-óÑ@@@@@��q;ø@@@@0�ÇЦM<@@@@@ Š ,_¾\TVñ§«� € € € €@~æá6 € € € €U\€ƒ†Uü Àê#€ € € € �_€ƒ†ùE¸� € € € €@à a°ú € € € €äà a~n#€ € € € PÅ8hXÅŸ¬> € € € €ù8h˜_„Û € € € €TqVñ'«� € € € €@~æá6 € € € €U\€ƒ†Uü Àê#€ € € € �_€ƒ†ùE¸� € € € €@à a°ú € € € €äHÈ?‚ÛDC ;;[³q¢1Ë›ÇókÅX�÷]w¯í³uß-œ%Ç€@||¼z™˜˜¸+c Ó¾‹nÿœ‘‘¡žfff*ݾ: Vø¾ÓA@ " øý~u˽g%''k¸F�J÷þU{LŸ@Ø›•†{â~@@@@ª˜•†¥Úà999z|jjªrÇŽʬ¬,enn®²¬ë5Üù̸8;ò›””¤¬V­š²N�:Ê„„òÞ¸7nÔr]ÅŠªx»ë * Ã} \؉JÃp­˜Î ¸}]ýúõ‰HÀ½+¥¥¥éQééé=–‰@ŠpûX÷×�K·§MIIÑk×®­tŸÞ‹Ÿ÷:þÎ♀T* +ÂV  € € € €T �ò.F«@«^Ò®¸³ˆ®ºpÓ¦Mš�»v‰;sè*þ\õ_I—Ùã\U£»ÕÖ­V±åªHêÕ«§aWuXvg5]]¡«1Œ¬ßL�”TÀUv¯^½Z3hР�Ò]=ª¤ó«ü�sï\î=‹zðÊ¿½YC¨H®ÞÐÕ͹ù²ûd^‘Ö»$}á﬒¨ñ@ ,¨4,K]æ� € € € €@ PiÁFsç¾6lؠǸJÃêÕ«k¸<ë v×-=´®êÐõÓý>fÆ õÀèžÕtµ*®n¥`¯ƒ”�€«t¦Þ°xmW�N�añJÜ‹”�€Û»½±û&PÙ-+çÌßY±¸Õè3T* «ÂVf@@@@ˆ@€Jð\u¡K÷;h<¸'u×Xt=t½MLLÔòëÖ­Å^pÃ(b2+(¥€«znÖ¬Y)çSùîêÍù­äÊ·eY#ˆE·7®Q£†:ï>ŸÇâZ”EŸù;«,T™' Pz* KoÈ@@@@¨Te^i˜»aƒã&_ÚÖ`F†?æËÁÏçÆÅûu¯N­`ƒúqÞýJ³\÷{g®’Å]ǰ4s+ÏÇV«VM‹Û¼y³²f͚ʄ„Òntj Ës ²,GÀ] )ôú†á<ª*L“‘‘QV“uDbHÀ홹²¡Ûdü�CO]ºŠUP ´Ç�Š"Ó¡ÁÀï«üÓ¦û[ذ1!˜ë�·eùƒ¡ ý>_¾›š$ߘЛ6ƒöýä‡äè÷A6´kÃÿáÇñ7srtü.g�c…Åw)š÷êà¡?-5nÅÊœŸççyx þøø,ÀUê¹_(v¿AìªZJ0«r~HhŸÝZ4jÔ¨”}à÷7K ÈÃ@ ŒØ;„Ť  c@�}+Àž9ÔŸ¿³B5F*š@ôª20gÚôø·ß ¦¦eiuýùjm”OÇõŸîr÷ê;Ë6ìáèñº+N[ô¦q…†»¦Ô$n‚¼9»ÛÞ|ÜqÉ|Å„*7Ô$9�øU«ãÞz;'77á !¶L € € € €!ýƒ†™KóMšìß²%Ç;¸Ç·�]'tÔ/Îï‹�Ó±<;~˜ô'ÄÛd�\;"¨Ã…º7�ãFŒ³ÉtqG¦éÓÅøt 1;Û_-Ùîݱ×�èSå`n®ý§Gi¤fRØ1Áì /~ó–À¤É�Í«µoW„F‘£whYêµÊŒÉæzîÖ¢4+à~…³4sà± €@Y ¸=¿Jéœ;wFC¨8ì™C·g…j0ŒT4�(4ÔŸj¹Ÿ|š´iSv`�_Y/¿ªŸ@qÊ{,T3ñùÔ±ÌO>Ë>÷,þ˜¬hODúƒ € € € Pq¢\:—½ju`Ñâœl}87òŸnî£ã‰µkÅí×#nð€`VN\�îqôò·n™»}‡¯i“¸ýºû{÷ôµh‘«êBodÖ§ŸûjÔH<ã´Ü„ø¸^=N:>0o~άrs²u 1®Kç`bbnÆö`Íšþ.�s5ó�ËÝc¡ÞHëØ¯‹ÔÉH7€†ª©^Ï•ìEúð}>½ë¹[‹Òt¦ôs(ÍÒy, Ž{ªP%]�7V.ÂÚm†@�J,Àž9tãºwm÷×JèøXŽÖßY±²¾ôªš@”+ +W7mä¼ æUz¦!eÞ·‰uÅøöíƒukÇï¿_njj0;KßSŽëØ1°t™?11®cûœŸ~Òw�‹gë a½zIGŒÆÅŬŸXÉ|c‚/1Q¿¯â¯ß@?‘ìoÞÌ¿c»¿QCýèŠ~ƒ%äëÉ! õ:Ð�*oÞ”³r…¯m›ª¶¥Y_@@@@ˆöAÃuë«élQÀ4ôúàÜip×!D•úãVîL8úH_Ý:�ÅKì„[Rb|ÿ>9ßÏÖ÷—úõó}üinfV¢¾¡ÜsÓ¦™ïMlÞì¯];ç‡9®hÂf“ð%%%�|Rpûv�Ú:™k ½Eæ;`¸s\bVÎŽuÂÔÙ5™Š5£e†»zîÖb×J•`€+°”�‡ €@9 °§*gp‡ €@‰ø;«Ät<(�¨4Ô�<¿ßغUÜa?iRtÓ7…õÛ&Y™9s¬vÊÉY_|©£qþøø`ýzq­['T¯îׯ¡4iâkØP5ƒÙ³ç~_UmÌh+ÔW�sÓÒâÚ¶ dekþ„„¸`®~%ýÅgræÿ’4lhµ#ÏU‰£w€¯¨ÅWOðelݪ{]‡‹šŒñ € € € €TY�(4Ìݱݗc4,Ô~#%èKJÌüö»¤#ÏšýCâ~=tÕ„�ýs×­ÛöУþ¸øš×^•0 _0>>wó–|˜8°òŸNÍ~àÁÌ?N¹âÒê~ýÚr®~|9óã�U¿¨‚ÄÜíÛí Îq~[´«4,¢Á@N®÷SÈ4tµ�EÌ2fFW޵ˆn:Š ¡ÀÖmzDrr’2)1jQ"ì“#€”Ÿ@åø ¥r¬Eùmu–„±#åO亪`nN@_ù6r�ï'ƒ9kÖúgÎlܘzýMAýþI�ê~œþJØñá'9Kóùã¶¿ÿA\­š9+÷efæfff¼ùVRÿ~þ† ³fÎÊ}l|µC‡ª8qÇgS›6eMÿ>wË– ¾ï¼æ�¬é3‚:˜˜wIJ°ï'룺—“;ˆž"€ € € € PÞQ>h¨/窔O—,¶å.ü5û—¾„_V– uøo÷äIV_°ýä�QÙ`BBÖœ¹*HôÅÇëXaÖ¬ÙYßϲ{ããôØô×^·ñ ñY dÍŸoó,¶ÎQ]³o7—YÛ°)Uó~üù·•n¸,Õ°~Íö²sOTºá²X óD@ ìÖ®Û¤™¿3åKå¬UffÚ´û¾Bë–M4Œö-å¡÷QÞsóʦ�ë+³¼/ü8©†'¾7U9kîBåÕŸ¢LäZ‡R(ºeÿô®î¼òeû€wùýÇ(÷�òg½¢—Í=å �»Q ™üàÓÊú_¢¼mx]eèçlÝÜÝr7kø»7&)_›¾J™g¯²Ù+åýäÈšÿ?-÷Ö7â”çÜz¤²G¢¢ŒšýE²hâÊÖÛgòñ—짬¦ÿiUIàÙW§ìZÝóϰ½" @ |�(VÐÃ@ÖŽœÇüÂïPYO™ã÷«“e½æ� € € € €@ì Dù aʈÃRèíÏʬ°"5’’ƒ ”]÷9öÝçÕ“Ën»æï–U¦ ª(3¦©'_<þoå›5ŽU>pNeJè‰õ ýææ·Ï<©|Å”rÜùÝ•µC§ÑíÊÛâ­tÀ÷õe–ý·Z9ÞòÓ"’'6³{çœoÙÙ.,ælx¾™J…mlehv6cÃg/)o˜ÚByË�#”ãy-˜:[C½Íê 6vžrÜ Æ2‰/cæ›sÕk¶ó¼äþ”}Ëöå®%T€°ú”ׯ>¯œ²n÷y!œ•ˆÔ¬ßHÙ¹×ÊQGYvªUe^xZ[Z$î:†®ÆðòóOÒC{í×1ß ’’ìyÕ¯·íç{öè |øñÿ*_zãCetëD²Öü¬yN˜ø�rúb«áJ˱Ww­†vEÅî‡Ø^âüá¶Ç¨ /t­f¥i;~xGë2nùå'4W†îÉ+ÍjîuE2þJÓ¼8Ã*û޾ê åÁµímÞ_ÛžçeÒr×i¶ï<ø…²ÑŸ­:xHõÝËIhÔV7÷·÷ˆÆUs“ìÆ`@  ?îR­íg“¬þ=ÒVšÇFº¬‚ÓGùC�¾}“’ìG:*p«¡__¡!€ € € € €@Q>h¿1Rn�œ9g�Ø_š`•®�5Æ*àh økë!C޵ßÐüðᯕŸ®é¤<®¹�9w-gå ¼7¿žrä�Ý”U§ÆÐ ¸ ÚO�ú–{e^g¶·áOí2›…´{ÙÈšVÄéód•ºJ=ïz£Mß¶ë©-Ühs{XÞš§/°ñKã­ÊÉ7o‘bõqViØ*ï‰fuÄKþ® ¶?TÙÙ~ì½J5+ évÒ9Ê‹úZéHnövåÆßS~õÑgÊûç®P^|ÝñÊAõvÛê&  ¸ßJv×1,XcX�(É»‚áeçYUïuwXùôÈv-àfMJý¥�ìešÏkãßSÎme¯èó®j§¬ï³gõ†µk”k«×Pz{ýK‹�Luô——+·×±JêÚì=.m½}• ³Igeÿ6öiªîî�NºýX¿D3�»ÆêG˜}\#û„v—•+ ÃÊGÀÕ+…¿¬’UE…?¦D ê¸WS¤5ƒ‘N_žeüÁ¡,ºÌ<@@@@@ ,¢\iX–]�½y÷ëÝU�vÚûÐ_OÏpñ ­j‚ѽç*ŸÿÀÊ熟kÂ5}éÊÿ³«Ñe´+dÖ´êÖ7¹5Ÿø‹|çô´¬ïUZ¥Á®æÕÇ�ex¾·çY^`…›U¢Å7m«õìVû[å/‹­žhdc«$òû쪿ülU„ ÷QÖÿΪç¬?XÙª‰çê]§iÁ{T›!m”5«ÜÍV81Å.AѰ�s³_ílÒÔê1»ïßVÙà¡•/¿cµ$=½k�Ö¨rJZuZ!Á Õ=ÍúÑvIî·’ ™¨ˆQµk¥èž¾=­Zjö\›Ã1G .bÚpG·¬Õ¤ËÒ*9ÖÞ_h¾ûÉÚ¦][�)ØÒû^#_}sºræJ{÷‰«gW<<ò(åi)ó®~Ü¢áYï|¬œÿñåGÊW>^¨\º9KŸbëÕqàpåÅ'Ù3­ÈR鈷쓚۳þC•'úlËNœ¶\¹.;YÙ¼»mµ³Î¢ìZS‘ׂöœùèuëú”¹ë”Û’­‡=‡ÚôÍ‹¿`0]ÓÌžðºòù¯Ì?+{¥òúËl;&÷;EùäöLHÌÙ¬œ9ùCå›®WYÖ«=ú+ÿtª=¯º»/ndoÐð7­?ïβ÷Ê?¼§s�öŒë{Ì(åÙÍ(ï{äså’ö|[tÍ=Ê'â¬.xÔ —(GoµÚÞ�¿î}”†“ß~Bù·Uƒ-¯ê«¬¿û…è nøNcî½Û>ãu¹îbå)õMï½ _)§-6™uiöÜKiÖQ9òtëÉQíl-Bf£[!-Œu9o õ™ÚŠ5+‰•ƒ•dCV°Õˆ´‚µ`÷«Î33üzÊPcè¶Ô¾?h8{öì9sæ¬Zµ*99¹}ûöp@‡ò=�.\8þü|# Þ{/fÒT´Ê/°-}»V2++[Ù¤‘ÕšEÚš5µZ³u¬6ªôÍ_ǪüZ¥ØÜæÎZ­<¼™Õ ¦ñÂn´Z§Ç·wœÇ�VŽ»Ìö ÙK§)Ÿxþ åë^¨<«‹{ÒÛ{QÝV�•'ö=\Ù¶�íy6ýð¡ò‘7>QNëa»éaujV7·qÖûÊçêÛ£F^p–²im»»~Îå»�OPN­mUiç\exšø·*WoMQ6 )‹ nµ·�æ S^påeÊ–‰¶7›1áMå«ÿù^Ùý›OÈÅ�u+¤å¬Ó�ÉONTNom•‰Û^YgÛRå„§ßU>–h=¼kDå ï(¿ûe‡²_[wXù‹†gn2ÛÃûxûÒˆ%õP_`¹U–½Tãåy—YÅY‹¼5²†®Qÿ³/Ò˜óÓU¾ÛÜzø@ȯ'ç®úRcžyÇÞü¸äå5-m»l[oÂKÒ­¾lo×DŽtËZÍÝÚ©¶Ý?;Ì$/¿åXeʶߔŸ�¢ü÷­•žÜJ´¾ÿ±gÔ„?º)/ºaŒ²Ku{#ÿù›þÅe¹ÊVöfUXóÛó¡Ï˜ó”-ê½ ¼eŽÍgÜõƒ”;/䛥áo¿®|nyWåE×Z¯:V³çÉwÿµçÉcÏÛšÞýg[L´”Ïÿj>—]’²su›Ã†ßí�qS{OLlaϨÛÿlÏ�1á8UúëÉÙ?iÄ®¯¡ý­oõ¿ž¯œ½Å–5"¯ÈÓÜÖϵçÏo�º+Ïö.0ìØÚ5ï2Pyá({^5©nKœÿî哯ÏTöº±¨ç¶ÍsSëòbÒ#h €{(Yµ`é«÷Þ³Š7Eñõ†§ÆÐÉÙç¤}ÒÒÓÓÏ>ûì)Sì£Oh[ºtéí·ß¾eË–qãÆí:n˜”ä>‡NXÈp|¼}ø !€ € € € €@iöÙAÃ'Ÿ|r×Ã.]ºvØa~¿ÿóÏ?w_C~øá‡;uêtñÅv&9´Õ«Woà@;µèZBBÂÊ•+çÎ�ënî:ȸóþ}ü/¿ž\ÀßèÍöäA³”ÿ|ß²ZÎeüP«×8°n%"º¯*µÜ�¶¶¯Z™ˆïL;…ï{á{K«LPía/ËŸ~´\bQ¥*欖°SW«MÈž²L¹<`=í[¤œçk«<»]=eÓý)ßøÉ„¶ÚW™´x¹rEÍ6ÊÑ¡%=ºMÛ)P³©W§“µV#Öo³šŽ=.Oµs2þ­‚ÉÉvþ/7מÙÙví¹¤${=†ßvìÈÔÄÉ>ªÈù'YÝÜ)ç¨|ê…W”×ϱ1‡bµN‡´á¦ÕÜ{Ší;WL³ÝèÂ66ýÃCš+óêÑö?XÃGwµ:Ä—¾·ª«Ó»tP&ø­J«C?o‡«¡�­öÀì<Ñ* WmðöÊy•†6ÅŽŒ&Êco®�bc\Ëž÷¹>]×Z9抃”}¬´Kͪ/m�¶³eç 4Ö¿‡�d™ºç•–ÕÔð¡Ã­¦lò¿¬ªn¥m_ó"NËf/²Š­O6tRžsµõ¹u²B¥†Vóuâ0{ÿýËT«[qô!ÊÁ½lkþk¶í33úØô)~[»å?,Tnî`=éW϶þŠÉß+×ÔÄÖ‚Þ�ë +Z�¡sØ7 7oÞüÜsϹŒ5êÑGm×®�._¾üüóÏÿì³Ït¹ôñãÇŸsÎ9ºÐaèëÖ­Ûk¯½¦)ÝH ¨,Ñ4lÖ¬™î �˜a@@@@(�À¾9høë¯¿ºŠÂÚµkßzë­»~ù¤mÛ¶wÞyçôéÓ322TBøÓO?õë×/t­TZX·®wAoìºuëv•+žrÊ):n:q‡Ýo>º ¶}{uÑÄ.CõÁgvVÙµHç¹óq»ÿ áO¹{îqÈj:igÚ;Ý3IùZ¢�¿æ«ÎpgÉ5PÕ›wŽý ïÊAwô6ŒNv ß·È«g9ËJd|Ïž/×Êìª\«Ù©�Ö¹Mš-XoÅ6 óSnï8TÙ9ÉNK$÷°Z¡ÆÿûUùÓ6{ŽÕûõweB'; Ý~ßì;µä ß¼:² W½—w~§Â÷™–‹@R¢½lZµ°ú ç/Uöëmï’á·Ÿ¼Gw´íÿ£Õju²¹]?Öv”KçÚ>aê—ï+oŸbU]‡Ÿ{Šò”nö¾³z•Õue.üXyÃõŸ*C[ +K7sº¥+mHûЬ�Êï?øRù‘÷ëÉë¶Û®Ùï³}ÎÖLÓæí«5°«Å·±½S7+áÚÕ¬âlË6·íõÛ(ÛXYÕ^š?Ù«@ ýZ÷¯Þ3ÙgÕv9…6[bêšõÊ´ô5Ê'o±ª4Wæ¥k[Ëì«ËN˵uéÞ϶fõ§~Qþ¸½‡rp²Õˆ}ÿÃ6e·£ìÞº~[÷Jš¾ÜJµFÞ,¼ˆo5@ÿþß¡¿+ŸzèŸÊïºÙþˆá6þ .ö6YDñ¥îñZ‰¶l\«^/xÉäjÞÒrLÆþ×û²w¥ïõAÛ‚=[ºµ÷îp‘dã[5´­QšJÃÀû2ª[”?ŽDùUè;hOŽí9ö*H³ èk0x„rô‚·•�ܾXÙi`?å‘í±W[‹Ðèf¸-Î>¿ ê[_ùÁl{ÏÝ4´¿²þ«Q�ñ»wïÙ¶ÖîØ´DÃïOž®ün±½.¶zpþ»²áæ@'e�–ƹf},ÃuÙ¹þ�HÀý…Rš¿SÂlñSoñ+UšÇ?çèÞ[šëÇ•ìŠuÑí?sC ò ¬7¬hë¸Ç'ÀrëÜâÅ‹kz­·×B—;hРݣ1™™™+V¬pwé{Ç)^«V­ZèYG —,±�ºó„NÐ!ÅÐY1Œ € € € €%Ø7GÙÆŒsüñÇ«»úé í·~%Ç;Ý·ë®Ë/¿\?©¬Étôp×w“³³³_|ñE÷Øž={öïo§%iUDÀ_Û¾Š>¸óåÂj6¼_õ*²ê¬æj+øð}1Üò ;Uï{½£eg+ññMJ·ÜK=…MR ›ß«ÖéÖpªÖmÁ¢U¶† ¬”¢ÓжJ÷Tò7³j…žµ¿Wþ¸Ð¦i²4[Ùñð–ʪé¦/¶YuÒæßÿP¦U³š‘Æ5KXwRìR¸3¶F µê¤‰“¦*{zõ¼®±øµúæ;«ÜêýþrŸž�‹Ÿ¸$÷&ØÙÊö}ízyíûöU{ï%彯|­ìu÷0¥WDë«uÀH �=±µ²`m»?Éöսб_Þ~MÃO,l¯¼ôâ •}›$+ãr(Ç_ÿ‘²`ó{§? ¾t‚öúr¥\ï,8}ÀÒÈ‚=,dÊ"F¹s´q�¬óò«T¶*°`œí kzŸ%Ûï§áþ)¯+gÌÛnà íMhæ¶vÊ“z¦(ý¾Le$’š<¯þ®ôkdóRó~Yx¿ãÏÔàC‡ØÉéé_~§|ÿ©'•ö?Iyëi¶ÿ/ì7”­¤­„[Öm‘†šaþæmkW¯]Øäqš>Þ¢tÍ-%Þ¾£sÌ•£•C ^ÚoÏ jµlaþøÊ‘—]ª²ÜžÃS?ûVùïûf(»�ažW ¬«Œ¼ÙZ6ïgÕ©->òž3›ì5ØkŽ ¯ô®xxY#O"×Þ_&=1Aùe“£”×ÜØSÙ:ÅzXô¡òºñÊ⛿z¸ëR˜ñóæÞ}#PüµC¯cXü”û¦÷å»TªÃ÷.MU¦[ ÚákWå)C¯c:\qLöÍACûS+Tá©§žJMMÕ]ª7ìÕ«—›¦º×òM?uêÔÙ³gk¤#žtÒI®>1ß4ÜD@@@@�HöÍAâzùå—_êGQÞ�š�9²E ;XhÓ ð‰'nݺU÷Ö¯_ÿ´ÓN+t²BG†~Á¹Ð ¢5rÖÜ…šÕKìÌçYcìŒhß²¨�ˆVwcl>vö7¯ì”ÁEl» wºýeû¿oœ‹øRÚYN²§¤ÏŽÍû|�¼¬rgëݽ³Õ}>o–2w]Se¿®6&ï å]e©Ww« ú÷?(S75±i¼Gñ¤E¾LÿMc&aU™µz¤ìRø¹¡|�ãfÕ6ÄvFîýñáÇÿ«áKϵoÔ©]ø…ú\�¡«9a¤=¯JS?§ìµYõ\ëŽÍ”5>ISnʱ§rófVEµ}ž]Gn{«ªk]TµWîzÝ»p‰}Di5p 2¯ÆPCúõ^ï£Ë–€ ×¶Øk³ýM�ÆV½›¼q­r¹W'ÞÆ.7WFÍ–X·©]E®ú[—õ~[X¯zÅîùškšA}R”›½H9¿±]Ÿ.½Û0e/­¡¤{PÄiýt¿™—ë~&¹ˆ9$Õ³ŠÑCŽ·´ßÇÊÛ›©üáØNÊ¡Ÿ’¹›5>z[V3+¤ÅÕ·mÝÈÿ£råï‰R/äãzÀú°v“WyZÈ£Ã×ÐÞ›ÅÛÙ÷U›ì9_¯]È;`‘³±W_�6=”ÇŸÛMÙ¿ù ÊÛ>Ÿ¯\Ûß*R{ôq>ëa WV‹klsÔò+åÌ9Ë•9sÖ+;ìªlè=õ‚[WixáZÛ0ýNë©t5†PËLµW\z0üýÃÞ×¥YQ¯qo‰Tnê+÷ö­kW°®°b^ß°½®ZµêÚk¯Ýä]þY?�rà 7³!×®]ûù矻 Ž=öØb/3îB@@@@�‚!§. ÞYŽcô³'ºpá¬YVò£/�?¾kW;µXTSM¢~‚Y÷ꪈÿ÷ÿ·ëB‡EM:>77ìóž¡‹|¸¨_OŽ|N<�’ |`Å ¾ÇÆX^šf9ÂNáWñfõí»´Rž·Šà%-‡*Ï©ã3hÈšMÓaÿöÊœ§~R.k4Xyfñµ6š¢27«ÉN·*Õ 3•�Vò´ö7«*úüc»²ÕÏñVGvÅq”Õô? �=tÁb�¸úâS”/½ñ¡òú;WöíeW*læU·íÈÌÒðOó¬LÚ]ÇÐÕ¾÷Á4�iÓÒê‚{í×QYšXý³>å{V·jeµ] j[eqnªU3}5É®§–Ýa¸²S’õ¹þ�þÊ._}¦|ú¿VuxÖð¶ÊñöZX¿l©rC£¾Ê!­­¬®a]Û‡lX±Z¹%·�²^–ý^íWo¯\b‹õµ¶«%ué£é†ÖEùÖ«Ó•õ޳�IMã3”«VÛµöZõ¶ù…W½¨ ÷һغÖäEå[Ï®¬=Ú~'·£·€m¬Ôð/Û›)?ÀjÖâ¼ß¶mÓ·»†ë?f{ƒ‰«M¦çhÛÔÐÿÖL²Mø’mJö1Õêë×·en^hWß[¸Ù¶oË[zõí+”߬´mݱ�õ¼aõlåÊ¥”éÕmõêYá]aÍ»bt·lÁÅøkZ�ãA=ì™öÜ$Ë^u­‚¯S�t察}£œ•aO Ó/ió§Ø+îˆA_*š8I99y˜rPK«7 ¤®S.ð>-ìw°mÁø_TÎZÅ}çõ”5ƒVó¸èwëUR]«Eu—±�«c¯Žú¾¹Ê~°jÁÞ½½ÆD«,ò}Áo�êßßÖéíoìù–±ÉÞ£�èm[$ï½ÙÛ: ªÛs~År[zv{e×ÛVžðÑRe–ÏôŠnæ¶ya¸ëRô|¸@�’ ¬1 �WE«7´ÏOû¼é(Þ#�<òî»ïºž\ýõGyd1½Ò÷‹_xá7AŸ>}úz×,/fzîB@@@@�ðJv 7üù‡5å„ î½÷^7©Êo¾ùæâ¦ß?ùꫯÜ4£F�ª[×NN†ßÊ횆áw‰)(;�ôe6ï‰Û,‡þd9ûD’ Uí–ܱ­:ç+7wo¯lTà4JR‡Žß=aŽraçvÊæ¦ÑÈ*Óì©óË[Ï(¯yÛ*?â­Z§n#« éÖÿXåØÝ•-‹,&Ñ�4|‰‰öñÃýŠåȃ4ì®r¸acª†Ýï)w´]ÁÐU ê[v5†ÿzæ- _qÁIÊÒÔúãíùüÇV½øÑ{Vµ”f޾¤Zõ•{S^|¥»žš¯Q? _q…Â÷Æ;ß(¹²2=×ÊÒ¶²}ÈQ§Ù4>¿Õ¸ <ÑNþòâ§Ê›ÿb×ËKªnõY½Ž>Bybê‡Ê-ú?Ì–ÔR޾ìDeÜ_(ÿý7«AK Ø‹­Y¯áÊ«{µVF­%Øëú„ËNU&¾mKüïcß)7ì°×~J£Ê~G[†¶ø¶PïkåÄÔ^ÊÑ]Í'´Å…/ú°†m7ÝeÄåÁËÌùï·ÏPVïyŒòÞã­Ölá'(_û=M¹=h=lÐÊ*ÔF^p¨rÿü]Ö8¯•Å–Ý9ïÝÿzõŒƒÎ8Ec6½fýþ�™ÊŒd«ªÛÿÐÔc˜¤4å’7Û{÷8ùtåå5ìYúÎ^R¾µÅê.ãkÙ²:4 ÛŠzRïøCùù›Ÿ(ŸÝ¸]H²ÊÁV]P^rje-{jè’‡6|ò1‹”O¾õ´òÏ*G^y�ÒžÁ…7{pƒÞû)Û¿õ¾rI÷ã•}¬„qgK´WÙ‰²=õæóÊ+þg{†jõÚ(�:Ádú¼°BY|‹`]ŠŸ÷"€ ¡@ñ5†¡3«8õ†ö¹jß6}%ùºë®KO·o7èç’ï»ï¾¤¤¢>¬åõô•W^qÓ7nÜ8¢Ÿ@Ù·kÊÒ@@@@ˆ ÿ²eËÔÑ6mì]iš¾b¬ mß¾½zu»pI˜mÍš5ÇsÌÞ/“6lØpÒ¤Iƒ.þ±ú ”áÇÿò‹]lHe‰/¿ürñÓ¼7--­víÚ®Ãï-tŒ»~bJJJ¡÷†ŽüøK;œ–fÇ@G�z×®á>³sõ®5|àÎÁþ�8å M]»–õçðC¼º†0펴vîÜ9Œi ŸÄý\µË§`ìN�Ï4ß9È¿{XuÁê½LÁÝD"P«–•¦¸Œäq•sÚÕ«+ÛëëGïZ‡ÿ|z¢6Øeç� < gÉß×*çVg­@ š7ç³¢m§ðÿÎ*ÙV}öÕ)»è*ÜwÝŒâ@éÿΊbgŠ™•«r*f‚bîâׄ‹Á©âw•æyåèªÂ³+üÂO§Ò<¶àܳ|ùrM¼/+ �ÀwÜáŽê€ãý÷ß¿×#†êñ´iÓÜ[‹röÙg‡¿ÂL‰ € € € €á$„3QMóä“O>÷Üsnægžyf8GuœQ@TêQx`¿~áÙ•Ñ*œíûÙ5qžxáå—·Í-8A¾1ÿ ©:ÌwW175¨«{/9Û®öBC@ êôìÑA+ë®iè®oxõ%võ·]ÛUÖ@ L�²«. ³j²ªPÏU¡À«Hgx^…³¡K£TšÇ†Ó·â§Ùg ?ÿüó›nºIßöûýGqÄã�?¾×KjM-Z¤¯0»UÒÕ #ý ”â-¸@@@@$°o®X±âÊ+¯Ü¶m›õ !A ¿ùæW?¸k«è7Ž»téÒ¾½ýPÚ®öꫯfddèfÓ¦M?üð]ã#Ðaʈ¦�hâ†õëhúÛ¯å{Ó±11 €¸ßMv5†é;"x$“"€ € €@xQ>hæñ¸Ÿ~úiÞ¼y®‡ÙÙÙúõäB{;vìX]ôp×]›7o~ûí·ÝÍC9¤Ä?èf'w-—@@@@ª”@”ª<0¾0'ËwtoêÔ©»5êˆá,(ZÓäëI´f[Îó©kQÎh,@ Â pà »iè ¦@åø ¥r¬E˜›ŒÉ@ J Dù a˜»K]‹ð€Ø+tË–-wM£«ê÷ž{öì©MÖøaÆíº+Ò�0;él™@@@@�Ê!僆a–0à£�>Ú«`JJÊ®it¤ïœsÎ9ãŒ34P­Zµš5kîº+ÒvŒô!î8£\ê�%xx¤‹‹úô®ç¥?Z¯¾¹­\ú¹E}5™!Tq·wr{ª*NÁê#€ ü�›‰N"€@•ˆòAÃ|?fR«~(¹aÆEÝ[èx½�Dë·’Ãìd¡Ý`$ € € € €•^ j Ý9"Uy¨Uä4×Cm׈:™˜˜¨‡Äz¥¡[‹Ò<§Ý"¢+Íâx, ‘€Û;•~_ÑB+øÄÎDï}¼Ÿt¨:|–ÝÖü�ªÁ0 PÑ"þ¢n1+àŽÇé×�‹™fŸß¥îí:n¸Ï;C@@@@¨€Q«4Ôº¹ƒq™™™ºê_BB4ç-¸œœuÏõ3¢S|ú>µú�‘‘¡ŒÅ«eiÅÕó5j”R’ú�Ròp(öT¡Èî=˽ „Žg@`_ Äâ_egÅßYegËœ@�Ò D¹ÒPÒ³²²Ü7yKß¿(ÎA]RÇÜ uÜ0ŠsfV € € € €T&�¨ÕºÂ=�7Ó÷Õt„Ng�ToX~kX�Q‘…;b¨Ã…® 2¢JÃÚµkk«§§§+ÝaÇX9Cz�Ô­E韾î| J}puŽª1T÷\åcçϬ@@@@¨LÑ7óÐ,Ÿg€¾®¹t=qÎî:†5kÖÔ½®çÑí�›³[®«^)ÏíÝuan »®žšëC¿C+å333‹Ÿ˜{@¢.à~1Ùí�£>óJ0CþΪ‘U@�J)ýƒ†ŽIGëô•(QRÓ±¤}u8IÝPÓ�:� € € € €@ô8h}Sæˆ € € € €@L pÐ0¦7�G@@@@ ú4Œ¾)sD@@@@ ¦8hÓ›�Î#€ € € € }Fß”9"€ € € € Ó4ŒéÍGç@@@@ˆ¾ £oÊ@@@@ˆiÆôæ£ó € € € €D_€ƒ†Ñ7eŽ € € € €Ä´ czóÑy@@@@¢/�àf™––ýy3G@@@@ˆA* cp£Ñe@@@@ÊR€ƒ†e©Ë¼@@@@ˆAÆàF£Ë € € € €”¥ ËR—y#€ € € € ƒ4ŒÁ�F—@@@@(K�¼_Oöûýe¹æ� € € € €1#@¥aÌl*:Š € € € €@ùpа|œY  € € € €1#ÀAØÙTt@@@@�òà aù8³@@@@bF€ƒ†1³©è( € € € €å#À¯'—�3KA@@@@ f¨4Œ™MEG@@@@(–�3KA@@@@ f8h3›ŠŽ"€ € € € P>\Ó°|œY  € € € €1#@¥aÌl*:Š € € € €@ùpа|œY  € € € €1#ÀAØÙTt@@@@�òÈ»¦aY,Ìï÷k¶ñññʸ8;:鯔Ų˜'Ä–@ffflu˜Þ"€ € € P¥¨4¬R››•E@@@@`ïeòëÉ 6[Wc¸÷.0T=ꎫÞ6g�@@@bI€JÃXÚZô@@@@�rˆò5 ÕiwÃrè=‹@@@@@�¨ PiuRfˆ € € € €@l D횆\Ç0¶Ÿô�òàš†åëÍÒ@@@ˆL€JÃȼ˜@@@@�J/…kºŠ!~+¹Ò?WXA@@@@�*"@¥aÙЬ& € € € €á D¡Ò�Ãp±™@@@@�X Ò0¶}D@@@@ ¢ðëÉ®Ò�ßB-Ç­Æ¢ˆyö1¿ Y@@@�J-@¥a¥Þ¼¬ € € € €‘ DᚆT EÎÎ#@@@@¨¸TVÜmCÏ@@@@Ø'4Ü'ì,@@@@�Š+ÀAÊ»mè € € € €ûD ¿žÌ5 ÷É–c¡Ä´û�˜Þ|t@@@ Ò PiXé71+ˆ € € € €@d4ŒÌ‹©@@@@¨ô4¬ô›˜D@@@@ 2FæÅÔ € € € €TzVúMÌ "€ € € € ™ #óbj@@@@*½ +ý&f@@@@ˆL€ƒ†‘y15 € € € €•^€ƒ†•~³‚ € € € €D&ÀAÃȼ˜@@@@�J/ÀAÃJ¿‰YA@@@@"Hˆlr¦F@"ðûýzP||¼2.ÎÎYº1‘ωG € €@~�`0¨Q¹¹¹Ê@  tcòOÇm@ * #ÑbZ@@@@ª€•†U`#³Š €ì;�„û°áj ÷]/X2 €•Y ´¢ß½çºzÜœœÊ¼ÚUfÝÜÖܶm›Ö8++K™��­tµ¥T•Vî'‚{u»oê$&&je“’’”5kÖT–õgl* +÷³‹µC@@@@ b* #&ã € Ž€;ê΋†3=Ó € €@´\ý‘«QrUiÑš3ó)W?˜žž®Å¥¦¦*C·©«5ãSVùl‹Š°”Ð+–fdd¨Kî¹Q»vm §¤¤(ËâŠáTV„­O@Òv/Ö@IDAT@@@¨@TV �AW@¨î:†œý®[“µ@ˆ]÷^ìÞ—¹¾a¬lGWcèª ·nݪnW¯^]É'«XÙ‚eÑO·õCŸîJ—›7oÖâÜ«»N�:Žn½!•†e±5™' € € € €1,@¥a o<ºŽ €@Epç6ËúwÜ*ÚZÓ@*²€{_vuIüÒnEÞR®oîZu®ÆÐ]«®â÷™–¿€{]»gˆ{¶¸šb÷«ÊÑꕆђd> € € € €T* +Ȇ ¨óŸ«¼~ͱʉ·ôWÚu h €ÄŽ5†±³­è) €@ÕpïÑ\Ù°"ouW ê®fè®cX‘{Kß*Ž@µjÕÔ™´´4¥{æDë39•†g+Ó@@@@*„@¥¬4Ìíôܤ¼/p–ò­k{*õ?­Ò ä®Ö*¾|ãdeÓ±)¯Qé×™D*�@èoºU nÑ@ª¼ïÑÿ)à*ÅÜ–r׉攫U„†>gܳ¨^½zQ镆Qad& € € € €T�JYiXy6k©@ΚyzÈŒv�Èã"}0Ó#€”ZÀ�/õl˜ì!��k7§.³œ´ÐòÛß-WoµÜ�aÙÐûvEóZ6<¸¥åq],‡µµL¤TÀhTiÞ£+þæÏÊÊR'© ­ø[ªböÐ=sܳ(Z=äãC´$™ € € € €•D BTfee‹síº�ÊÖ-›î•vÅïk5MÓÆ ”II¥¾Vap‡æ³äÓw”OLœ¥œ·ÞúS£I{åðSNQ^0¬™2Yÿïl��¿hðõçßSN™m§z7çÚo7é~¤òŽ[‡+ÛÇÙ}ýÒ›Ê׿[¦\¾n›ÒW§µâà?�¡¼jDseèœusï-᜽u\úÙ$ÍùÉ·½u\kk�X×Öë°‹®T^1 EéÏZ¯üòõ‰ÊW§Ú‰ìi~e­æû+/¸íå�mŒxí™w5<ù»’`ª¿–²]ߡʋ.¡ì]וÞ}•É|çhü„«öSîÜrvê|ékã”W,°Ç¾z×Aʺ۾UÞzÑ\倻(yåå7¿ÙïÅ5h§~†^1´‰Ò¿ôCåÕ·Ú:þ²Ýæ9ï´K•ãâíÞÓþz‡ò¢Î% @b@ 7h�œ0ßò–Ï,—n¶,ª­ñ>fºœµÆ¦ú×÷–í½‹ÝoN}czXÚ'9 €@ÅÈζcÉÉɯkô(\¥afffûÊ1”(b2+@@@@*ƒ@…¨4\¸h¹,Çþíiå¸;¯PvjߪPÝEKWjüÍcÿ¥¼ó† •û÷èXè”á�´¸›¾yUyÓs•Ã/¿Ry}W«¹Ûº`ªòÑñÿT>œ|³ò¦ÁVIçÏZ¡|åÞ§”ï×;JyõÝg)›û¶(—§ÕV¶ˆWø|A»´LƒööÛÍg4ZÙ¹q’rý´ÿ*oú-å'}/WñÏÚD6ç�_Û:ÞøôÊ/¸@yiW›CÆÚõÊ`;ö·+g=o¶Ìi­¼àÊë”ýX�à+íÚ -xg¦sœÀ¿5æ£&Ç)oz¨·Ýë³¹}ùòËÊÛïÍU>ú€ùt(ų,˜m§×Ÿ}Öδ\tÉŸ•z¥¨Ë?ú�†ï~|‚²sO3ÙþHå?ÆÚE}νÍjQÏ|Á* ùõd!Ð@@ †Ò¼�Óí£¢oÊ¢ÒvÜÕ'ž6ÑæóÊO–¯žhY›Bc !€HÀýV2×4¬@›$¦ºâž9ÑýÅm* cê)@g@@@@({�RÔ€E¯s®Zð/Wž©YÞt—UºÝûeÊ.�ÚìZÈ⥿kø–±ã•W_zº²t5†ÞŒƒ›ôÏçS~TV?âjå…C¬ÂΡ4r¼†¯Xü³òÚwf(Ït˜²ÁÏ_*'­î¤¼à«n\Ï]ÆJàv÷X7üÕݬ muí¯›û=o§�Wüay¾H+ ßs]»øÍç“ç*Ý:^1¢½†õ¿ZËî_ep«�z~ç3»Öá!×�¡<é€jJ×ZL^Ëþá+ M^ÝQyþ]Ô½ë8[�“.=F9ûâ·•ïühb×õq÷j°ÍŽkïüÉÊQ=¼JOo O¦ûOzCùëJû­ä‘õ*Ä“Y=¡ÅŒ@0]]]6mŠrò'_+gÍ_©\·ÅêUƒÕíùܬýþÊ�²gàɇwQæ=Ù5TxËÖè?f¾£|õM» ç÷ lž›2¬®¹z{!udû�SÏ8NÙ«añÏ[{noùõ å”)Ÿ*¿ùÁ NVoHUîð[�pý–¶/ê}Ð(å˜Ñ+ÛÖ(öW&k­ÅÒ@¢ °v›Íä°—-çÛW8¢Ü&ÿj3üœåggY6I±¤!€T�èÖˆU„5¢å/Ýg‘‘¡!€ € € € €»Š/rÙ5Yy ìg¿¨{ßÏTÞrÏãJWo¯á›ÆþSéj ÔKÃQh�ušÉòUV•Ó~dsåžv«}G«Å‹ûh•rEÀj…ü«ìÊ€�;+;Ö.¶¢'Ó¦üòM«cz{ú2åš «òû­)5ÓªýFÚˆÈ[øsØIê嫽ueë’WcX`™¹¬Ñ¸ßsí·†�kŸ\à~7Â6ýnëµ­±Õ7u¬™_À_«•Æwib‹3VlQûXÅV ›¿Žئ•UTí±¤x«‚¬žd|ÙvÑEìXñ™¦~úÁñÊ÷~±giÀgû™õ­^¸YÛÆ6f‹ý&øÊmÊÿüø¥ò“o¯QþýV»Rg‹=wãóeéÿßÞºMyý³•[ìåâ«VÏ^w­ÛÚšÔÕK•3&Ùþmæ´”WýýNå1­òÏ.¸ÍJA&�PùôÇ¿)Ó½¹%¤4Ôp³m•ÉYV+½r‰-ëÃÅ–S?©¼õïÖÏ!î ¤ÚÙÊf­wÎ�@J'�é}&<é ›KYÔ†öÎÍÿÄÿÚ¸Ï϶L¶·A € °‡•†{pp@@@@ò—·ìsWoxÍe§«'®ÞÐuÉ�‰Z�aÈz†õ}o¿U¹¹J·`îîïQû¶{´†¬–p΋ÿRŽû©»òæ›ì÷—jQ]—=Gyï™”‘·HçlÝõJ”ÂZTÐ[Ë¢×Ëf ™_ñsöïYXL;½^ÈÜüvâ;!¾ø3cîB Ÿ€=Ër6-TÎ]b¿Þtàÿ)Ï=ûåA�­*6¯7hÕ²«¾zZy÷ßÞU.þÊ*ÇÜOyßÑVñú¼ÌYj¯èŸ¶Š¿Ô8«X<ô껕×Õ^™âMÌX®áOþy§ò¡�¿U>þà[Êý£lZåáUÏÿq…ÆûÚS\pžõsÔ€¶ÊZy{n[—ô¥*û¨òÓï+ÿñÌ eïTºåº×VY¬µACˆŠÀÍŸÚl¾ý=*3 k&nYn¹ÖC˜@� "LŸ«žd¨òþÕg*ÿ·âßÊ#Šx�ꮨ6Û&Ó®ëª<äaS œ{Bg�»á›h¾â .¤¨1Á­öÜžð·{”�½ñ¹òÇe•ÛZ+/Ÿü‹òÑCËËþ^øþf»Þý�,TÚíbZ¢=}Çýø­ò¦®ñÅL­»‚öeߟYŽ·ú¼¯¯øêÔµácûYŽ`Ù¨ìÞrlö4ö±@ÖLÛç_üŒíöòŽß\ÓœzûyÊc›òÂCÌ´ÒΉ™U¥£ € € € € Ž@tN‡³¤LSúêÂ`º�[¶|µr�U�³k 6ii§S;¡¯rÂ#vŒü™®g(Oînµ ióíäÑø�ìºfƒ/µF¿çÁ>º‘�M}qü§Ê†gôV¶LHW._ž¥l7¨™²q;Óµn±�ß°ªÆ†YÖ“_šªü%Wá³J¤ˆš¿–&�`Îq�5ýð£»)ßxæ¿Ê'ÛŸª<¡«Í'Ë«\_ËÎã lÝSyÜA“•÷¼`gò{Ô8RÙ·aP¹qù:e|W›¦ë~Ô£Û>¨|ù);�Ýâì>Ê–>›æ‹§(ç45¥Göwõ6‡6Z(ƒ¯[õÇÔ?l‰G6±3 ›~úPùÆLsÚi×Rµ¸úõõøF>;Ó8ýÛµÊAƒj(ýIµ•uªqNC 4 Øþ a+{�î­Ù”mÚ·RÆûV)©©Ê­ú_µ^úréß37)ƒÞ+î hØžy…¶j=4úˆa6Ïw_]¡üöK«&¸¢¯½ŽBkŠ’›Ø4öÞ[«Ö¶�&iî�\ß²}‹†SmW´ç좻ÖÞì *„@öOêÆƒÇ­»ápå-�LTÔp³rÆów+¯;âå¶o>Q^Û=ôu¦¥lö—öÃÊóO¹Qùu†}ư±Å´€í7ÆŸz¬ò¶•‡)or¬²õ¥ÊwÆÝªs¬ÕÖ|6ý>å@›eD­D½ò–�»á+ý;ît«—|à'›Oâν�wi"Ò^Ùôë^?_y賕ý.½^9þV«Ãª¹y–ò¯†ôÌ£Ó4\×Û Güþ‡î+qËù]�ró)ʳŸ^¦LŒ³ÏuôôÚ_¿±yåxŸ ‹Ÿkœ}tõM8Ó²ÑbËûÞ³\°<Ø>Òúnc™ô¢åm«,‹oÙÞr]þ=ªøi ¿7sÖ#ºãÜkÞV¶?÷rå£7Ù;]³${ Îyý~åíŽTn©û£òÅ(ͱ¼[†8ã¾K•O/¯¦Œ‹îÎ ¬Õ1îÍí�:ù�›”/\3P¹GG¼Oû�;{o꺯¼Z0mšuçá¶¥M®üó_žVÞßÓꃪgoS&w´ÏEeßlÝ;�9^9qàVea/{Ò/yåjåM_wSvkV.b¶[ò=io2¾ël3úî8Êr„÷Ú\¹Ô†o°·ߟâ,?êoé Ú �J&�¸Ÿ1w×0¥{�æ®´¿Ä|É^‡_´²O²B;}ÛÏÕn°/öýÞò‰ °+1D@@@@ r ”ÏÉ¢}f·ýû7´ì‹­¸mÏ–d=w¾v¡rh;—þ×K')Ç¿òåYk¬ê-©q{å°s¯P^t��QÎ;*žlãϽí©|í«(�µ{ëëf)Z†ûÅ_Sž2Áöí÷N¹Q¹ä´?)ÐÿÑhîòËï. w^¹¶»õ�ùoËõVàî³Ï¬;Û'Ël¨Ù–§Ú+ߨU–Ù{iïØ‘ï‰c,½‹xÛ@˜-¹ÿ�šò»•c•IIù߯:¸µÆ¯ýz�òÉIß)³O°Z¶$ý_¾-ã»û´À‹Ÿ°×ÚyØžáÑË·¶4Ûb›7[Öíq¸òø†+Ë_C iöõ„Ù^¢|(Í Yß�ö˜rDý�¯6Ý(×fË­ÛÝ^}ÇyÏäB¾ãk�¼æúuÊögZÏ�ŠÖn½�…í´M盼ÂòÈc-oéaÿf6fÛJË‹íã¡o³ýiâk`AC  ø«Ù»sÓ¦–®Ò«i Áo{µz�íÓKóÝpô•ímVLûTùê‡ó•‹¼Ÿz¨Þ°¥†}„òÔöé(t¯˜¹z®Æ¼úŸ/•Ó—oSÆÕ·w–¡#Û* î§‚[Óø÷&|¥œ¶ØöëÒ¬69¥™½›�<}”ò¨vv¨bé[O*ï_f/Ô¿^cÙ0dvÁÍ35fÜ]ß*[]y™òÌŽñʪÖò¿¯Wµõg}@@@@@ Ÿ@B¾Û•⦭Ԡ«þ®üôªpVÈŽ1·:x´ò/ÃzLÓ^šìüÛ¼,ê­ëž¿üÝ˂Ӿ_¾qÝϽ[cÞÏ7¶°›IÎY¥GšM·cìÌá?¼,l®Þ¸jvÕ’#.ú³—EN¥;üu:)Çx5ƒcŠ›pç}Ivêí¨+þâåΑ{þkç[wµZæ6î ËBZB7�¼îÅ¿å¿ËûÅÛî']ªñ/�”ÿNn#±@ÐÎM}ÿ��,xgÌöïkõ¶VU»³Ö¯Õàz+ òù6UöKÇvohKhb¯ˆÆÞɪ%k~×ðZo‘WÚy³å3¾W® Ø©±š½ú*KUVÆZk»Z�vFqÝúÍÊ›ï~\yÿmvοV­P'�ÈkéVcxÛ½vf/�k«]-9ôlbÞdüƒ@öüÙ°ðWåÆj(õ*PeßVãOmg�¯¿ç#å̬•‡EéI×úÍmÜ;”mÞ_™ú˜Õ»õáÍ^³‹¾°³å«ÙûÞqƒBOÁÛcâZÙ9ðãû\§û¿o”ÛO?^iïåáµÈ{åÍ7Á>™œ7þÊÑ=VvX`ÕŽÙE¯Œî ¿•´W¶·ìØ®ðåÄ»}©ßö*[·¹ŠºÏ�ºױæ}à•Ï+?ñªlú¹†/Ї·üY«íŸõÞ�°c¥WcXÈäöäò­5 _MïR0a#‹i®®?Z3a¡wÙg濫^S9V²u»õ¥vÝ:Êð{¥‰£Ó2¦k>÷^lï;Õ®ÿDya]ûDúˆþ/çæ‹nÜl/ªºûÛw*DG¦ígžñ7åA·} |—Ujw(Ÿ¢>-©Ð–k½zù_V¯”s„}ê8«S9VyOß+­´Ñwä–®ayOËϽ1÷l°á;GZzwÚ �ª.´7˜éSU&t¦òÔ>öiÇ}jÔw¸†ÏZaßîºï㟕£{ÙûEÝ_íjËÓ·¶SþéäÞÊöy—Oì¬á“ŽÝÏîýÇoÊ=ZbcÝì7Ärg³ÏT}¶WÖ™m/Q÷¯æ-zhxpû,1cŽõðHï§ÐýA{ï˜óÃïʺ½‡*;ü´¦±U£U„÷©ª!ÍZ"€ € € € #UøxiŒl!º‰ûD {Å-÷o¤\ï·š›£þ|¾²M¿2´s¬’#¯š#ÞvªaíXìTu‚›YÐ�“ã*zòÏ_wÞ¶/Ôø×îBù]šÍ­Ý˜«•êVÔe¥tç^Zøk]pFÅׯÅÛ9*j º1¦ôu†«™ MºRùðmvµš­ìZÃ~Wwþ¤”W>:W™ã;D°B¨}ج\--Õê°|µ­Î¨°º`ÛÔ®SÛ¦IµR´-Q-ø³ÙV‚–ñ½Vâ¡{ßVú�{Fy~·r¬6Šàj+4�Z;Üžà¾aVá;vže¤OœUö¢)iË]¡GþóÐNÊ«¾ôÊ2ý¶ç¯ÛãOÊû߯<¿SXï�š2Z-}Ú=šÕ%ÿ¶“¦^«ìé½Iþ­D:Ÿ\«dÙ¸Ù|挢lp›Õ¼¤æXñ^£Žƒ”Ç]r—òÞ+¬æ·I¹<©Ë­voEöåË7ý]yôå÷+'޵Ï??¾¬¼õšÓl|ÆÊYÿ8T™Wòm™3žÒŸü®�rÌ{')‡ýÑ)Z=4Ìæ4Ù{��zdžŸöJqrS¼ás-Ï©oIC R� Wãï2ÒÇV„éƒÞ;�{÷Ù¹.^¿r6êŸßÿ°áV‡4RÆ»5µjöjÙÚjã¾¶‰Vçä*ýëìSPfý6ÊÖ5l®¡_�ˆobóig{0w‡[b`Ó�x²ÕMÏXbËÝj_óðùsv(7:*né~Û“ ègË}oöåÚC)›l[¤œ¹Ôös}GYEdܽՈ Ý¢ûüñvoz}é € € € €”«@yŸî+וca €@ä9k?Õƒ¼ùŸÊï¶XmBÏ ïR^1¸®²àÉl¿W3è]âÆ—°ÓXÞ©,ý[l xÕ…î4\œ=:1¯ì°ØG¹;3Ó¿ïÜ}›ò…yV¯Tÿ@«ž¸ë¼ý”%»zN¤k­Ú\½á½Þ¯'ßz¯UAÞv¿U„¶qw\¦›5Sª‡Žd� ĵ²¢Ž¿ò«òÌKÏVvúte\œ}Èi<äJåýYEÏ7Zí^�”‚¯c�.·fçkãÜI[·(bÉyg‰½_Ï-vÊ"fPyGViÝ&^fõkß4ZùòäS•M÷í†Uö]ëÜÇ–ýBOËÇ_·ü$Ó²\[\S-î´«<Ы¥M[³PÃßL´Ã;髜þÂTå‹cZ*˼r!ý-åîKžVÖºñ å5û»J|«^Ùg-é@-úFïBÚb¥h­šØ' ßÖ•ŠÙï>¦¼ïz»þã©_*¿¹Ãܬ ±,[NZªfŸî]�ò�[&jøÉ3lk潤z÷ÒðKë¬fg?ïšÅÜs¨†OñŠ¡5P~Í»&ÚûÿzQKü­ËÅÊ׆{¥}å׃¼%-·‚$ß_f[vØßòŒ:–¯Ì´ü‹W{Øè>Æ •h °S œÏ3þ¼}�÷ïވбy³ó>NÅÿ?{÷E�¿q|7�„ÒAz/RTPDÅÆ‰±ëy–;õþzÖ+êyv½;ËÙ={OEE�¢ "(@zï 5=»ÿï3`C¦Øòùùòa2;³;óžÉìîÌ7¿ |À§*Å÷ŸxËrróã,ÿxƒÞ3�.çKçbÃz,ÏrgÓÌÍ{ê;TöGêKqÆúC-�X¤÷¯ù�Ú[ž–UçïWö*ÁÜ"}ýƒyÛ°l € € € €*  ;/ŠÁ(P²f¼-Öý7Üo9~­®ëw8G}!Ý~æ!– ö¥-I—ÚÝ®·¹wRv‹öyQÆïNé<¡7^UInD¥/±k¤Sc8úï7ÚˆG§«_¤†½¯°¼ûÏÇ[¶ªÑ½†km¯·÷æVÞù-›[oèN뎡ÆpïrYïË�/Ͷ,rÞy‹œ»œçªsS¿Ó§p¾swõ¼ú:V$ÆëxR—M ÌAg*˽L?ûéðc޵ÌÞÞÞòôgÿk9ífUÔa£[T´ÖÚ£ãäàAÚz�…;Öó˜�Éê£%iV0ÕrþJéy’ëÚJ/Ø|K_¶G½·Ãòðû.±ìV‡{Qà+ï.ݤáó�Z†ƒ5³yîuj ?_Sφ;�÷ËœßÙ²²{›Úè²�ÖÒ†ÒœKV«~ѵ©uEÎCû<¾–¬[m¹WÆ¢›é~å‰ mšwn¿Éòq§Æ°q_õ x÷_‡[¶VáBµ[mÖº*/XoèNO�aUܘ¦VQ‰6{Ó¬ÖJ÷‰JÕ+͸q‹,“íoÙqŸ¿›îLu™zù6ÑK|<ßbQ‰sk�}«lÌü…ª¦Ih­)3ö¼(nã"¬9}™}q«j ÏxAåy7~ø–å5Ý´ÅC·µV E [š³�¦Ùç|ª<ÿ{e±¢†-·Q gÜ×l^uöÖ¾£*J<,³pËÔê°Ò°x–½ÊÛoϱܼèVË~)ÊÊÚ$yJ“ÿZ¶¸üË%�± üu´`SuL‡NÙ–ÞwUA³ÙgQç-&#Û^#Ý«hÅjç%Ó÷¬,ñÚ£…NÿŠñq¾pNûõÌ'³œœ¨�þÕ³UW´çRÚ¨:nëë¾v^øu•C•ûK”m@Ïm*±õ<õŽr¬ ›<í’•4"ZÀy/0¤“!Œy~¬å›¹'Zm£o^ÛL³|é gzœ­iš:‡o[};4ñ ËÑoëÕâä6–� õ�kÒê…p½'ÖÒmÞzúekR/ÏrÙ’_,‹sUáè_ÿ³å›cõ \äÑ3”k^}®èÕ'Ãò­)“-¿X«1}ŽWå5Áü‘ÖØi € € € € ¼ºÜMC"V x¥Ê3î¹áAˉkÕIF·Kî²¼c„ú¶H¬Â¥toÃv6eû–º 5cùË9 T84¸ëÞ°êxcÙìy–Ûýz�$§’¨åÞ.âäë9ßrj ÿó�.X79L=4Ý{ËI–Y5ª1¬ýZÛKW±Q]XE(&«çwíµ¿Ú3?ò]+Ë÷k©kdzéW={È˶yÅòý©º~ô Ýs¾åÚ˜Ñ3t éÞK›"¶ùuÜ›~¯ªª‡�’ÞÕÿmyK_UTá mSoëÕRËÖÔÙøëµ#T©¥æh²OU.¯1CY ¨akæìdîòÔð)ö6›O•õS¾\¨Ç[«Ãܺ.Ûˆéj¯rÕë-O-ð[–o³þ�?ZŽx^G†{ÞQOÁ‡g¨žew½Šýpà›Ókç´)ú„ài;Ìâ�½}”دËÓUÇÆ£›ýÛò­ÿN²¼¥Ï`Ë�GKíYߎÿÂrs3�ïY¡ÑFÖmÛò±=ÿ¨çæ[fŽ|ÂòÄÆç·?ÎÙ"^½½x6ª(jw—lÎ çæáž"®<Éy—Ò2Ð�¤.Cman8ûsË—ÞÙòúõúEŠMI·ì{êÙ–#z©d·ì7ûÖò¢®º…ÞîÚ!ûÁm…êeiì]ã*õêJZ�þº®gÿ—oþ<Õ¼yëÍ–O}«{A6?ò:Ë{oTE@«]»ÞokmK@C X|¶ «¾g9ß—b™X°Òræû£,ï¥ëÏ�/{ÛòÖ£‚¥b/¦ëe¶<7œø¤å¥�´L½ýRË>‰K,Gß«êÈ/[^hùÑY--NE�½ðAnEöús?Ãò¤¿|c™qñ�–m`ùòb‹r-*E•'ßŲQˆ�97‡ôü¦�Väi½uüJKÒ[�çg*³Ô¡“ç©|å©ZéòMåtžis•óUþþ+Í]wy~eÒrë©¿»ït˛橾ï„õ(m2šZÆn[d9åÕZ>ø™~ûN~þbËÎuýýÃé�*§÷aöZz‡Þ³éˆ±bVC˨¸4ËN4eŸŠoÃ6v·’o°§<ÿßë,{ ÔÛ&³¹e½<íÐS_{Èòßé3ÉÙ¯_bÙ¾®«2í5¬Õ;Òâú[�±|ëŠó,‡'þÝò�Çh‡Ûú•ŽT·>¼Ê²ÿ]°<"Þâ€5m¯å¯éxþö/Ý-o¹l€e‚ý0ZJk½êÉŽÀ-ïh8æpeçíeíj ÿýseӎʪñ�RÓÓu�è\IÔÁ¬Ò¦7€½5ÍõNV:Ñ#Ò{ؘß^ïä�Ù�=;í1.µ‡¾+ýÙÉ=²‡ÞÛ«âHã­§O\mÒb-×wé`ÙŠ;S8½Ç:/K € € € € €@° Ôõ•¾`]o– "X h™ú »ó]ûr“ê’\}�åŸOζ¬þåsHÛžtšeÏ÷U·øÍ'[þ³ƒ®Ò_;TUn߈þüe6<~Ôƒ–ï¯Ô•ó˜Ì,Oë—dXãÏûÙÆ¼þWÕ>=Ke$­ŽÑð½×i™V£#÷þ^k[A" Î¥¼~�åÉͳÌ�md™ÙIå§?6Ñò/ö¶L ü5³Ÿb‹RýÎ9ϨbnÛõ×Z>x�jµîÈo`Ùfà…–ÿ}ñ.Ë£Ur©Í¿ÕÖ|ê,ו*ŸÒV>ÿ)‹JZl÷ÛmìŒãTéÖèÀÔgU²5u“S©ôÂ,Í[¬7‡½¶VÙz¨—óF›¥áÇ�ÔÐM¿ž+–*ç«[Ƚ¶X§’âFÛÕ  :ãpÕt´™ü¬å?¯Ó{ܪ-Ú^ÞÄf–­{mù§·ÿfyýo2,#¹t#*]µr�=ÿ°|áïÚ•®Ýnéw¬Úô9Άÿü¿Û,ÿx¬ôÔAKÛ1çâW-ÇÆÞjy˵ùÐfËØtUåüæž1–÷_ÕÞ²FCl¾µâïm¶§Uñ^Ô�ÿX^x€Ê/+_ZçOD<Ïœ§G݊¿½¥áÚå= œ#ö§ŒéYç÷:U£i þ�ú 9cµŽ½ý.Ðïn$¿[n05F@@@@�wÉ’%Æ�–¦=jÖâã�Ë�5›™¹@ " � ²~Ý}+í5_¿æ˧fëõ½º^¯¬Úõ|]�Ï=GUŠ�̱ÜyíEÅ!kÆÝiyÝ}5\ªç«çÜ ¬•s�¿Í«–Û˜�yNIƒÎ6|Ñ=ªp<§}`‡7%6fö“[^óº–ÖçÕ+ÄÆÅYV½·©ØnWÚôÏÜy¢eÝ­µ== �r|*(ÇÁTYàÚO5鿾ªò ûiÂÿë§'ú§Ši ísxDèÖv%—.]jOQ¿¾ÓMfmŸŒùE ¤ À¦((Øh9åU• ¿}´å�—ê›ZC}™ ɶcÇ[½ý1BUWjÍš56éÎo»U�‹é@@@@@ Ìh—anÉê!€@Ù2ù-õ¿þQe_a�²jM•†…%ÏP6›®Á¤}‹å#Í»Z¾òªzÿ™ò“®.^láIhœeÙãˆÁ–ÃÏQˆZU^©]\¨å,k~U&ê:˜S¹sü>ÿ-)Ò•­£§îÖzŸ Áƒ €U¸[Å ž¯V(§:©¡ºlÔÁ Ç}ݺ|ž@ ª^oÈ–·Uuƒd:}ÃZôѳ–w�Wß²�Z«;Òß^¬{1‡n�¡-¼µý»Qi誒 € € € € P&@Ÿ†ì  pèKå  ó’ú4< ̼HØ ¬Q¹ƒç蕳×+ë¢ulªg¾²9g‰�†@ ð9<˜7öòåËmñÜOSQQÔxó¶ ÆeóùTAéþŽgd8PP‹Å¤OÃZà1+ € € € €á+@Ÿ†á»mY3@@��HKÒâN½XyλÊæ)÷W;©­žéåáÊäÊ»ÕÕC4@�ƒ"£S4n½•†e„ô‹º{Ž»í¯¡ÞuIò< € € € €„‰•†a²!Y @‚AÀï×]»÷ï]Û‚a½X¤€[øþ½æ›³•7�S.úEYÝ–ÛXs¸wI>££†¹7§hDž€ûyëJkìÖˆ¹}ÒEGG‡Ò¢³¬A PRRbK±{§Ò06,‹€ € € € €@0 PiL[ƒeA@ ÄܾT¸6⛑Å ·ðL§6px{-ÒÄ%Ê÷�^§®ÐðªmÊ yÊÔDeËÊþéÊaN†ƒ²5K©€hD´€ûÑA¿òõëë–ö–¥¥¥–|¦ ú� èî-n5±»í¯ÅâãÃþ’äy@@@@* ÃdC² €ƒWŃa+° á'àÖ ÉÕš¹~ëÈ!€@] ¸ïÑuý*<mlv·RlëÖ­»†kóœÌ nujrr²­¬»í¯µ¦ÒpIò< € € € €„‰•†a²!Y @‚AÀíK…zÃ`Ø, €®@`g˜³@T”êºÕI­»ÕvìØaÃníýó¶;ðËæî!n�¡[�êî9î^´¿–‡JÃý%Éó € € € € &T†É†d5@�’’[¯WwÝ¿W;ƒgY@‚_À½c²û¾üK˺n]¡»íÜêB·ÞЭ,s?Y&n‘ àînÖöc¸{3tU©4Œ„½‹uD@@@@ TV‹I@@ êÅÅÅ6qLŒ>lÐ OÕݘ@�Ú ¸µHÔÖ^ò`=ƒÛ?�û Êý4åö^çnÓÂÂB[0·/i7Öròºu-àþ펛îžg/êÖÆÇÇÛ°›u±$TÖ…*ω € € € €@ PiÂ�EG@ øÜëán½ƒ{µÜí…ǽ^üËÏ"€ ün­YÅþ΂ÉYÂ} ¸d±±±6™;ØŸ5†ûÖ §Gë ÝOÔî^Q×½‡SiN{ë‚ € € € €À~ Òp? ò € °o÷J8=+í[‰G@@�Šn5YÝõ[Wñƒ€+@¥!{ € € € €”à¤a9~@@@@@N² € € € € €@9N–ãà@@@@à¤!û € € € €”à¤a9~@@@@@N² € € € € €@9�˜r?Eò›whí«Ìi¦9@IC@@@@ ¨4Œ° Îê"€ € € € ðk¡_ièwV±¸Dÿ¬Þ¬ôù”ûn^çlij’¦Š�U>ô‰rÑ:庭J* ¥@C@@@ˆ8* #n“³Â € € € €ì[ ”+ ‹œê—§h 'ÏU–V¡ÆPÓílÑÎ9ÓSûèçe”^…ç„îÎ? € € € €‘(@¥a$nuÖ@@@@�}„f¥¡Û�áK_jÅ&ÎÙÇêýÊCݳ4Aß6Êíʼ"e?gŒ†B¬ù·Mµ%¾å’q–íî½ÅòÂÎ ‡ØFdq@@@@�ƒ.À¥ƒ¾ X@@@@‚K 4+ œz@·Úy¦§h¾ÓœÞ ÖÓpje‡Vʤe…6þžkmܨz[¾zMgËø€iò¦>k?�}ï<Ë�»ÃòºžÎ}™Ë¦QŒ3ÿ‹å_מlùò­‡Y6v{Q´! € € € €Á!@¥apl–@@@@� µJC·7ÃU›ès¨¦e²SWxŽªüËŽ­œç,YbÃ_¯²Ã#Žëb9}Ú–óKUQèV#ú7.°áï×4±ìÑEå¬ËÖ¹ŸÛðãÏ)§,ÜbYšÔܲÇõ{øû]-ÓÜ­ä[kïÝô°åê3ÿ`Ùý›—-Ÿ¿Ü²Á)×iX3UÒ|fÚØûþüšåÚc5ïݧ©j²ò¾í € € € €@ PiÁŸUG@@@@ 2��«4tVÂ-¬l}ö5îÄz´{–2Ú9[úè oئtÛ>Ÿ9ª•* »7þÄò»Ù;,ÏjÕÀÒ·ø'Ëy¹–ž¤JÃüÏ>²œºx¸eÇ6z­sç[.l ÚÃó³4Æ·z¢åßÿ®góþæ|Ëÿ©•eüÆ9–/�zÎòæÂ+-½äËDûßšOKûÍs/X.ér„å ÿ8Ã2%¥…e´g¥e`óïÐë>s׫– z]lùà©Ô 1Œ € € € °§€Î^Ñ@@@@@�]¡Yi¸kñmÀíx0%Iã6mWV¬<´µÆÙQ™¯|éKåÏ«•UoÑ6m�Nq–Ÿþ°È²ðÕ®ž©ÚÀ�í�²ìžªjÄüv¯X¾;c�åEmšYþìLÕá,në³\8N•†?µbùÔ�,ÓÝS¸MûÛð.Tˆç?0ÎòË3ÛXSßšVos“–ÿºì0Ëf®€ ÙcE“Þb­ÝèûŸ±×ü4Ë]ÒÁ’»6 @@@@`T@@@@ˆD�Я4ì§þþ«t¼åâÕÎʨÜК&Íìª×J ¨1Ô#»›î=çõ§-¿›ÝÒò÷�õµl¡Û;Ó@@@@ø� '«~ezF@@@@�0ýJÃRõèÉh¢LqºýÛQ áï–)ÏVßž¦ÉÊEë•/:½j¨M¥}I�TåwÈ–i–ßÏK³üa©ªùúöhhéu:YLí©ÊÇœTÏøÍB!ÿ¸^Óôכּ-{=ª:ô»µ�nÚÏ{oÞr…ú!.^ÏYntàì¥ZÓE-g~eùÊKß[qM7ËF{�ͤ!€ € € € àü­+  € € € € €À.�Я4üz¡V¦­*þQ–”*kѼMÚÚÜÝ[¼oùýÕÎOÓ}™×l÷ßz{›iLß–[ÎøHw[^ÔLs]Qv«c�ÉÊjj¹ý[UD®ñ©ßò»'Û�ÇS°h‰åÒh­×qiÕ,Œnas�tñ–çÆ¨óú^µ|ø õ“ø×#YVómÁ.PêSána‰ª�‹}Jg„UõV¡ 7ØWŽåC@@ˆh¯ó‡¨QÎ �Ø(�ƒŠ�QF»£êÀf÷y®:xrž@@@@BO 4+ £+œë|eŠì&*{å(“ë)Ý£G>Õð§ÞPC{oŸ¹â´QªþëÙYwI~cì\Ë&'g™xobgš>=Ô—âkül™tÔ`Ëœ²i´ü­�=Ú²×'ïY>ü–î¡|Õ1é–ñf[¾ø‚î?èw–’œÓÈ5*–ŠÉÐë^w®žó÷O¾bùq»Ë-�¨‹´i„¨€ûk‘W¤;†»5†!º",6 € € €ûpÿŠ®Ôù\êÓßÑ8MëÖ&ÆíóîûxÞ½?TáìÛÞ'å@@@@ˆ�Ь4l®û{Ü¿Ùv;-sóÉñí Êvê×ÏóôåâuÊ}7·ÆÐ}æ}OéQ¹à!ÝZ[Æ~4ϲWOÕ –§tj {w°ñ ßÕý‹;tϲŒµÿw6oÓ~6xó­:7üŸg_³¼ê�M–E‰Í,» >Ïòž‘z†ún„5ª44&{†ôãGZþnƽ–O<2ɲËmGZ¦—U>Ú �p!¶Ûr—¸G€[@@@�Ú ¸uWêÓ·ã :óäžFªíóºg”jÿ,< € € € €„�€wÉ’%¶2iiꧯf->>¾f3Öd.·¸¨Xý—yÿL9s‰2°¹5ƒIÎRU¥Cw^·'ÄËÕÏ 'Ö©Ü_'f—�ap k)±ƒ~ k)Èì € € €á%àöoXßéß°6k¶fÍ›]»JC@@@@v ”ïˆo×è p«ÿÜZÂá}´˜níᬥvû5+õi¸*5†n¯ˆNoƒžSzk.÷™©1” � (u~Ó¹Wr�n @@@à ¸ß”bt²,Ú=ëU‹%¡Ò°xÌŠ € € € €@8 „Z¥¡» ¢œs�-é§³tbÏ1�•¶)ï£êÖ!jlùí¦6ÐØ&n&iØ}f Ñ@ H¨1 Ò Ãb!€ € €�€û­9œh|@IDAT1.º–ËB¥a-™@@@@�pÍJC·ÏÁçŒi³dm·f0§©†÷V]¨Çv6÷Ü»$»ãíÖÒ›áN!þE hŠ}N¿¥A»|, € € €O`ç·f* Þ6à•@@@@K�Ь4t7…[èÞïØ=y[Ûs¨a¹�Y)ÂL °ÛÒ0[5V@@@�Z ì¯oÍôiXË Áì € € € €„›@(W†Û¶`}@ J~U:.­ÒS1 € € €a&°¿¾5Sif;«ƒ € € € €@m8iX[AæG@@@@ Ì8if”ÕA@@@@ ¶œ4¬­ ó#€ € € € fœ4 ³ Êê € € € € P[NÖV�ù@@@@3N†Ùeu@@@@¨­' k+Èü € € € €„™' Ãlƒ²: € € € €ÔV€“†µd~@@@@ÂL€“†a¶AY@@@@j+ÀIÃÚ 2? € € € €a&ÀIÃ0Û ¬ € € € €µà¤am™@@@@�0à¤a˜mPV@@@@�Ú pÒ°¶‚Ì� € € € €@˜ pÒ0Ì6(«ƒ € € € €@m8iX[AæG@@@@ Ì8if”ÕA@@@@ ¶œ4¬­ ó#€ € € € fœ4 ³ Êê € € € € P[NÖV�ù@@@@3N†Ùeu@@@@¨­' k+Èü € € € €„™' Ãlƒ²: € € € €ÔV ¦¶OÀü €Õز.Öfz`šr̪hËõ¥~Ëä$Ÿe—–%–W(²<<Ñ‚öÚÖ³_¿ÛòsK-ëwiù»SÚ[ÆÙÿ•7í'Ë?~ÈòÕi›-£Ú ·üýÈž–õ¼´0(�óº­á¿ßøÑR{ï6o#›¤×´’¥#-¼ô>²mús–ÿùDk6øê‹,{&ïy8(]ö‘�êùi–Ñ~gyÉ�V–å« lÌì7°ühË@Ë‹~«l²ç“Ù¸Ú6ÿº ö/<9ݲå¹×Z›Íþi ¨ÕæHrtƒ©¶”/=6Ù2uÄ –Ç·aÛ  „/ã[ý™-ÕsOO´Ü �´•µ¨TÛ÷â«,�lUþ¨SÙä�Žly?½eùü§>êwgXv¨_#{^Z ”j[6SŸj�«ÓP?lÓ,�Ö6ÍJÕ§ßA� -oi¯]'Þþ§‡@U~KƒcIY @@@@8 Tf^Ø)Pú‹®°]ü®®Ÿ-HU}ÙŽT¶ôêj۪ͺ–óõj p„6…ÈjÚîqõ, æý`¹¸P•†íöv±µx‰=:{Nže|‚v—*ÕšÙt´pˆÊ8ÂVeøÈî–~]ª·¦ýaáøÑ–ßÇö·<ùˆl˲ÉWÕÍ ›qÍØ²éR?3Û2ůú¯+ôþÒ³càAD.²ÜîÔïøÍ·áM~U¦ê v¶ÒU6´b…Ž+ :g[6|Ô~¦…‹@­Ž$ùá¢ÀzìOý™LëÁ§Xöh^áÇ«OÂ�ªY´]¯¡æj¬·ºŠYM!”šÞ<>ŸTÏò’ŸµÜÇõPEá?Sµ5 ò´‡Ì[«�ºB£w~bÑ` ÛÖùz­Á‹‹-§«w1ís´š Tø®é1 € € € €„‡u,á±Y �E uàýƯ«^÷Ÿ  jgêbX¹vi¹Ÿø!²b³ÚÚ ·\4ÏrÎ|•p´ë\aqHŠϲç—bÙ&CµBsËjÍœ‡‰ð&µ´µÌÕ.°³ù·ÚÐÖ¯ô£7¾…eNÛv–\c—Hd´¨Ô[ÑŒ¤I– –­¶ôu̶,«ðo¶á¥‹6Y6Ìmmé[ºÀrÉ–A–©�vú6,µ1+óT¥˜ž­}‰ZCËV›#‰ŸJðÜ'j¹R^}ÖMÎÐç™Öû¡R—âs�µ™kA 5�U¾=Oï!™]ô÷�öU†úÛ‡]­Ë®¡Zho™´H¯¸Ý«JCZíx÷¯½!Ï€ € € € €@X PiV›“•A�Ј­ò…›âÕªõô®Ú'œ¶Ãò/Í÷\×í?«­Ë8�¿çb]ú?K�ãy¶ÌÑø^ߪ«+GOUÕÑkôòy1Ó£�ú½ºãp]‘ëXîŸ� P_B{½Ž­¶÷Ã\˼N=,wY÷uÚ¾‹¾W5¢·íÉ–é…š~Î^.©–lšm�Nùl’åO‹×ZîðiçhÔJ5hݱì•�d¹óET »pôý–ŸÄèŽÌ§g-±œ4Yµ�Ë6ꞪQIªÖrò×:F­Ù¢ý$Þ©pìµf{5å¨wõ­çþUz…b�†³õaÇÞ`t<ùë¹y–W¨{LZ5œ�V�é™@@@@Â\ Ü%À0_WV�ìL]éjã\1»ÿsU‚d *¶ì©‹auØJ7ëµ®«ër';÷,{âPu€·u�®ÝÝ=Uµ—ÇëÑq´„”ÂAi>§0·ó!öêŸ�Ö•öùÛU‰Ó­AÀuÙ|]6�½P[é�3²-c¾¶¨¤ù·ê>|^•DËSúZ1ü8Ë”Õ ­ž5ÁròËÏ[n;÷RË£²/ÜkÙ1û}Ë÷Viyz :ݲo¢öØ ?|n9aìë–1M¯¶<¾Mà¼6‚†þm?ÚZ�yá-ËeM³|ÖI–ÉE+,¿ýôË7ß´ð\pžö7î·+‹ÝtTo•­zCïÏK,Wæ«>«‰ngê)\²ÀruT–eל\�ÊT Á' Yôèj™àôµjé*ö7h™^V7ªjŽ5“^´|óK9ZÕaG¤ë·ÎoùÙÛ/XŒ¼ÂòØ\½³¸•Ñ ?Òø~Ò˜NGŸiyl 1òW}g9õ#å/~ÓÒìZè ¨ÞgþXU’¶ì©}fèÈÆ–ÑÛ[NÿTï¾×À²ÙE:nP-h´[6Ì|Ãò�Mªkw˜þŠ¢Wb#Ë–åþÔÂFÐBM Zß,ŽÉô[ŽþQGþ{šëoV®ÍõY:oMöïÞš>ýÎÛ¢y‡ôÔqææ o_¡÷�›¿Ò{Êu T?øf7=ÛÈcô·8…ŸèYÿ“¨Wùøç{�Ws5ªoA«¶•†Õ&c@@@@Â[€JÃðÞ¾¬�@l3]%{jˆ®›]6A×dž½ ke}Û¨jãÂîÊRu5LWZ÷_óë2›§[]»½½ž_K`­•®ÂyÖéÒÛ+õšË�IsËÖƒ´/ßFõ>­cuÕ}ÎÜ­–]û¨ ¯Ç¹¾:WõƒËêu²<=Koå›§YìÑtÅuÍן[Î+íh9쬡–ízšËÈqj‘6�²ñ“'ªÒ§—S–°õý…ªéqÚ)–}ŠC22´÷n\ô¼å¢Åë,}m2,¹iaÚ´G­�®=êç’v–'ž>IJc}wwÑÖoµÖòéW§X~·²·åQéû÷HfOIûUm‘ú™9–)þ©–+VªŠ§«Ê…=+.±ô¥kÛeÆë·ØÓ&]cÆÍ·\Q¢#O›è5^Qd™Ü!Û²¡»‘ó~²á©SõhÃ~¿³<¾¯Ž!eÛ¸å©6¼cÙÖ“¿šmyXNOËÄm?XNÿa›eÓ#εzhs˲cEF– 7)Òžóì皆’~ícч µ<ùHíjúd£¦#C“‚%–OŒYd¹²`€eJ= Z ømÝ|Å:†íù.àuúž‹‰Õx÷ÐbÓÚð†UúÔ÷Ž×RuÜ8³‹ö“‹Úë‹J†v�rÍ[OÓÜ=LY®9ß§æ/Òóüs•ö–Ânš&¥�^«‘³ûxc5œž¬½kçÉiÕüm¬öÌÌ€ € € € €á'Pá\nø­"k„Ÿ@n[]1“¡kkÏÑÕ¯T^ñ³²Gw=úÌ]1k¶ó"¬ תEë:Û­tÍ­üSjL 纜wƒÙ®{NäŒ"œ€7®µ½X‡vºûîªîÙÒ[Õ�<[,çý°Ô2©ã`Ë–Î%üÍ6´Gókʕ˱ŒÊ8Ò2; ÆÐ~Tóª· ÖmUõ3qÒËU%}-“Õ±XYó¦äØPf£ò{��rî–ÛÐéi±°@õ³îŽS6ÿ„Ÿ€«­ÓŠ¥-½­³Ì©ÐÏT\z–�oæUÕêÚÕê7ÓŸžlYaï±q´ºð¦fÛ d$M°\¼Tu|¾\½§,^¬ßÖf‡æZ&z�-“ÓFcЦX.Z¡iZ'/µ\±UÇŸŒìÝU�¥«k|±ªž;¢ñå*ˆ¼ÚÖ­2ôhé+-7øTi˜¾VÃë|ªYîÖ¦©eùšýÔ8;Û2Ù«šDZH 8µc-r2máõ9fwÓ>–�¬}#Ö¯£G¡v@�sSSg€K¿ª†g½r—²Â zéóÌÈ«Ž·L/{TûI½¶},;”«1,{˜Â@À[Oµ„× SÿƒÃWè4ÔK?èãæk“-ŸŸ©wŸÛNÔ7 ó›Tá¥ÓGašfõ”–jÿÑßjqhqö{”×ÞïOÏ"€ € € € €@¨ Pij[ŒåE�0ˆ©§ê¿“zêªÚIÝu•lÊtuósÉtÕwü£…êtέÂÕ6›î×ë¼ô< u˲Jš^{g«êë휞ëF@W_3;w°L|EÕ7s7õ³ìëÕ½kg¯TÍNûãZZFyT¯ZIók¿ÊWxb�î£*{Ëw®í'j¯ó”jÒÂ"gûëÅËš7A�Æî";Ù9 ÿ†¡@%Ǿ­g~¾)]6Úò‘;”›ß¯Ý¥EÑ^öÌŠ30¦.¢t|ÈÌPÕ×wË—[n]§-¸lGËCrUe\ökÝPuÍ9M>³œ½p�e^Óe–¢Õ]¯ôÝG_¾ž¡È§úåéÏý]iÿïÙ´‡øã5¯[÷á+Ò±¥Ø«#I½ŠõÎ6Ö–¤žM¨ä8ã?´uÞŠ·«¢ý…™z/ûÄé»py¾(ÐW(�ó‡.öt¦Õ�¿•ugË3#€ € € € ’ûÿrPH2x<¿lÒ‚?ú 2G\=ç\¬¤!€H JWÞôÖµµ~PÍÅ7ku]§$W=€ì,ÑàÞZ^‘®¼ù÷Ù³œsÑnoOÀø ˆÉìjËÔ®ÁLË9?­µÌuúüZ×´‹ ß|ŸWþܺ]¸õç«·êGWlw7íuùyªòD«z±^ûˆ0¼ýÊFÖ^Qìt<æ÷|PôªP9Á)‹msœ �<&ײüe#¬éb“´GýÊKibZ ¨^£Uv+KïØe– ë8ðK}mµì¦G�(õ3˜�«ÚŸ¯–.´œŸ¿ÒÒßüpËô€ò¿¨Pb£R-»�q¦2àŽêöã®æ�Ò»X²ó"QqÚsbü, ´wUÜ/üN]ª{Œr& 0•±_„àÎàôqY¿¹ ÀÒ3+{—صNî!Áý‘7Œ],‘4P?E¿ãêª÷¬÷§hoùÑù¥oë|ùëÛz7y?Qß�n=L]¢ÚH;Mýhí.|ªêÔ;ìZ] |b¨Ë—á¹@@@@@ T. ‡Ê"—_N·Ÿ‹b�zö¬^¥,uŠr4´÷åœ,MÕ…UO¼S…ñн^4_¹n�’JC)Ð@àÀ ø uÝl½sKIÔ•4÷ÚŽ?Ö¹ªæTílrz©+¿\škÖM[â©ÂA°üÌü¼Ѻ¯`‡Žê}læ÷c-'zÖ[6ë¥Jý”øØ#Nsîdš‘¥þË|3~¶\œ×ͲCàoý›mÌŸõ¶Õª‡eZÈ.°• ýŠ€7N}â<ª0ÍÏwº*׋”>T­Y¡ÊVŸ§•eYóꮸ陪ôý¸Î2¯a?ËÜÊ:¼´ñ´ƒ- ÷…ÄÌlËÔRÝÏzÎlUÆç °L+Wú£š·ÉµL˜1×ò§½Í4<$ÛÒ¹Aºý«Ý"DzU¬zV]·Y=L5iŸbé¾OÙ@¥ÍßL{Q³(õͺt±úCô·ÐqI˧¦w·m+–YnqwF�¤…½€¶\¼ÓÑr‰öÌ‚bí §zHÖJW[¬Z­{ªúUlDC�°ذÃyOˆ×Û@çªx�þ™¸]G†áG«Æð,}(Þٜޓ·¹ß‰’vŽÔ¿š>Úy[*q¾é²ç]Ý�QD•öý._å§aB@@@@�®((ÒéfÏËÏ)'�SV¥ÆPÓílÑÎ9ìSGèçe‹•^ç÷‰Ã5LCêB`ì¤D{Ú×ýºøÕ+E×ÓZ9…¾|’>ýA=zLˆÕU±QmôhÙµ�Fšþ°$¤Þ˜¡úŽS[öpj|æ.Ô˜{9‡0¢…�€öŠæ�;[¦L�`¹(*Çò˜ŽUé-NûNó¾G[vüþMËqo|bY|XË&±ªìXýÝxË/V«V¨û9ªCLf'2…poÞ&Ú‹²N°üáËÉ–Sû[¶HÐ%û s´WLšë|̲¡ÝM{cZßÁ–í~xÛòƒõX¿¾í-›%é#eižºˆ^»\w~o>p�eëÀÊVû™v`¼M²íÓ“´Mg¬ÒûË!ý2-5T¾Å¤b#2£�Tת—¨nCšY–«/¨ßÉÆÖšå«ã_°|7ïË.Y:†ÄûµÏlÛ°Ürm¬ª¡�êÕÂ2*YG°Þ�&Y¾7IÇ¢±ñÚ‹:6×;WÁU N›¦c¼å^ÍÆÐÂW@o6õ³r-›ú'ZNŸ0ײŠÖ_²ÑrÑ—c,ت)�Nzí_„ž@éFí¯øRGøÌ–>ËœÊ&NeñRç½é©õ›Þ±·¾ÝôÓÇ Ot’jÓ£4~æR}ÆXÙ\ß�š”èy>ÿNuʯl±ðx+ ½š«­ó «øg½î¿hÌP}ýò4l¢ïSmœgýL«šïÍUsb*@@@@"F $+ Ý~ _zF[iÂg5ßVÝ{kÞ~‡+wlWæéÒxÙ Õ¼éÜùϯÜkyÇšc-ý¿^– u¢Üãÿe¶ås½n9úG]“/m¤E¹þ_ç[ ì<Æ~¦!€@x d¤êø°ã{~›£+7›uÙÌ“POã»d¨7±§û*�U©Çέ+c× UÐÖɺnvéKºL–­¹:dêºÜMC4×c¹d aÕ¢š«f§}³É–›“Tضê�õ;ÚôC/TQý´q-§¾ûµå¶U%·hk9`¤Þ§ÍæÂ«1DF‹Î´õ<ìô, ?þÂò½GµoGëb}ÓÖúÄ2è7ý,?w�e`ó6ÐÞxÂE: }ý¹æ�õÉ–[œ¾cꫯºmúXæÄ8zlˆv¢Të—™©ßî³[Zfg©GËJZl¶�ÌÉÐ{Óì%–­4\¾é¸‘6ð|Ë >·œ2}‚嘩ú]äÜ_;¹Y¶ ·?¼žeÙàÕ›Ù!'^`yBÂG–SÇ¿f9«PÏß0«‡åÀ3O´\ð‚*Ëh‘#àmÚßVö¤aÛ,?›8Úòùéúœã­¯Žç3º ´�6Ð÷š;�Ò÷š›¿Ö;×€o5W\}MstWÕ¶?~¨ÆŒXiQ®õ?TG’«·h®ç>MT&èëÖÍÃõ*TBµß-«ÅÅÄ € € € €„¿€wÉ’%¶–iii5^×x÷¾W5ž¿ú3æ«#&ϺÌéñù”ÕmYšãÊk•M›+Ý^;¨ÓOš.ÄzÜ5´»éüôWÝdyg©^þ�k»ZêªëžM9¿qæXËÑ[ô¤ç¥'�sîj:ûÙÛmøºº[þ㦣-3œâɤæº?&�ÿ-ì uu¨fmSž®;Ñ@@@@`o)‰úë�šµ5kÖØŒTÖL�¹@@@@[�Š�•õªº½®Z¡…¬Y�arCÍ{ÎÅJ·Æpår ¿ö_åÍ*ôDí‡S©úëú&=ÕK”óRzZ§©ß±U«·Z¦vQ¥a·æZ Û ¶Ä4@@@@�ðاLJ5C@@@@ B²Ä­¨FšÅ8ëzæyÚÌ9­•n߈�ܧá"§ƒµš=³æß³éž>³ŸSáâŸVŸlùöŸÔ_á·¾`ùæ­@žï~ËcßÓbõºòNËû†&[úÑíÁ^}ò]ËÑß®¶Ü§;ˆu2Ìòª‘ºof‹�Ün¶à4@@@@� Ò06‹ˆ € € € €À�ÉŠµšõfxâpÁöè­ŒvÖ{Ô]Þ°^é6·ÏÄ�?í×ã±§»àî?[¶øÇÍ–/gþŸå³çëFÎÑö¿µ’•¯Þõ´å„Ü–÷<ÞÁ²ÑÖ9–ÏÞ÷¼åíñ×YŽ:+Ý2$7ž-7 @@@@ ¸¨4 îíÃÒ!€ € € € pÀB¾XÍ«Û{Rš(7mTV¬ì{˜Æ¥[{ë+_zFùóle`«8oà£u=\üÓ${‰Ñk:[^s‡J"sœ×lÜËþ9ÿ„É–|8Ãráéª4lWV hƒ4@@@@ö›•†û�’'B@@@@ <B¾Ò°ßáÚÇœ œùµòÃ÷”nÍ {—äágiL²nMì™4N9îce05¿-̦e«,Ù¾ÌòžK~´,wN·D7x.ŠMµÜ¢Éi € € € €Ô‰@¹³Ruò <) € € € €„”@HVºýºÎ¥¥ú7C· .ëÙpûv ÏRמ‘)›6W.Z |ÑéÍPCÁ×ÜêÈè4uÁø—Û�±Ì©pR×oã“Cr»Ÿ8K„ € € € P™@…“R•MÄ8@@@@ˆ��¯XûzŠ6VÛÊÁÇ)‡�¦t•«á­[”�ܯ,)V_ÓM SÒUY£z6\ÕÈòÐTçæÐ6DC@@@@à@ Pix ¤y@@@@BD $+ ££÷Ô}å9�iÔXÙ«¯2Y…z¿OùÈ}Ê-›•ûn1UöðïØhOµd©ªËÍUÏÆ4OwnÕ¼ï«ðh\—�6îäôZ¾ð¯÷-]4À²£³.[W.²áY;2-OÐÂ’3¾†@C@@@ØïœwÚ蠟:5ƒ9­µ–{«. pŸ!Ö¹�Œ[]è&½*1Œ € € € ™TFævg­@@@@Ø«@HVºkãVº÷;v36v¯ëÉ € € € € PE* «Åd € € € €DŠ' #eK³ž € € € €TQ€“†U„b2@@@@"E€“†‘²¥YO@@@@ª(ÀIÃ*B1 € € € €‘"ÂwOŽ”MÄz"€T_ å# ª?sDœÀª«¶EÜ:³Â € €TM€Jê91 € € € €#ÀIÈÙÔ¬( € € € €Uà¤aÕœ˜ @@@@�ˆ OÈÙÔ¬(á"Ф~¼­Jttt¸¬ëQ'ù7ØóFEéÚ{K�‡É“&ÚzlÛ¦ž ãââ,Ù[ÂdÃÖÙjlÞ¼Ùž»aÆ–^¯·Î^‡'mŸÏg+à[ܽ%´×‡¥¯K�¢¢"{úââbËúõë×åKñÜ!/�——gëà~¾MHHùõaêRÀ=¶Ôþ¨4¬½!Ï€ € € € €@X PiV›“•A Ü: ª�"a[×fKKKmvö–ÚFμî~Osälóš¯iLŒ><»{ •†5w ÷9ÝJÂÕ¼»{K¸¯1ëWs�À# {KÍ#cN÷ó­»Ï°·DÆ6¯ùZºû‰ßï¯ùS8sRiXK@fG@@@@ Ü8in[”õA@@@@ –œ4¬% ³#€ € € € nœ4 ·-Êú € € € € PKNÖ�Ù@@@@7N†Ûe}@@@@¨¥' k Èì € € € €„›' Ãm‹²> € € € €ÔR€“†µdv@@@@ÂM€“†á¶EY@@@@j)ÀIÃZ2; € € € €á&ÀIÃpÛ¢¬ € € € €µà¤a-™@@@@�pà¤a¸mQÖ@@@@�Z pÒ°–€ÌŽ € € € €@¸ Ä„Û ±> €@èØÂÎ�;×réÒ¥–›7o¶,**²Œ‰Ñ!ºaÆ–999–�;w¶Œ��µÜwsŸçÛo¿µÉV­Ze™ŸŸog™––fÙ½{wËfÍšYÒ‚_ îö–Àu_»v­ý8nÜ8Ë;vX:Ô2##Ã’î>[Á�S´¼ðì¿X~¸"Ùò¢WZ>3TGZ$ ®œl«ÿòÏZ¾þÁDËY‹W[n*лRãôö–‡s¦å•ú½åñ­ëYÒ"N `…­ò¯?cùü›YNžù³å²õÛ-Kb’,S3;X:ä Ë+þt¥åМKå´ÏL½åpËÁ÷̲,ˆ?ÕòÕ o[ލoA‹�R[Ïy÷fÙùÆi–ÅUYï˜.6Õß¾™iy{7N|U…¬òi¨4¬Ü…± € € € €D¬'\#vÓ³â p0Üê©S§ÚBëjYT”®â$'«®Ç­.t+Ë6lØ`cÜ\¼x± Ÿx≖ñññ–Ûš5kläÇléV,ºÕ…�7¶1yyy–K–,±\¾|¹åàÁƒ-ÝJF ¡@Ýí-�+ûã�?Ú�Ó¦éúmi©®èz½ÞÀ g¿jœ¿õ[Ë7¼c¹°À¯õåâ²"»•®µõŸøà–¿ýû{– vhßðƧXfæ¶³ì«j åó¾±üð‰é–½ú†å�ï}byç‘z÷áhbaÝ´Wl™ú€å9çÜjùÑbý}ƒí(�2ÛXvêÝÀ2j‡>¥ÌÿYï5ï?ö•寽oy×§ZÞØ‹â1c ™€ö¨ÍŸÝlyÑß[ºoJ6@‹Hç/!Öm´u÷9ï'ñ ›Úp£„}¾·Ä¤Ú4I1ûœ&"5«»Ò|¬®Ó#€ € € € æT†ùfõ@ 85jd V¯^=Ë=zXvèÐÁ²býàúõëmüرc-ÝzÃY³Ô«Ë¡‡jØJJJìÇ &Xº5†;v´á~ýúYº=$úýºrûÓO?YºuŽ“'«�*·gÃúõ¹ÂoA×êboqWÒ­ru÷� ØH÷µ¢££mxÓ¦MAgÁíoÿ6Ož¾|„å_U¿cþ¶§XKøÀòý,h‘-àÛfë?oòË¥‰},{÷?,oº@Uê­“u¬p[ÉzU�=rÉ–× ªÃûw§åI?¨úl@åÅñö-<TË“ìTž¶h >p_ùËþïBË!mœCÚÙŠVM°Áû.P˜·~6Éòö«Ÿ°>é:˶»w+û‰‰þuª?ýão·\”Ûײφ¯-§ï° E €Si¸Þ©4ôêÛÓ°§[¾qFbZøU¦ÒðÀ›óŠ € € € €µ•†A½yX8W÷þÅ#F¨ºgß­iÓ¦6�{§ã/¾øÂ†Ý»!»5ƒ�½Î¹=nݺզIII±ìß¿¿¥[5fÖÜéÝ»0¯[·ÎƸõesæÌ±áÞ½{k"Z� ÔÅÞâóéší‡~héî ééé6|ÔQGYºwO¶Z8 gkwϱ-ÿSi(àßn+½~ƒzf÷G5³lÞ´òw¢´9«L¥á@æ%@@@@%.ú…ÒÖbY@ bbcw_O ¬. Y¶lÙ®sssm8°Æp×C»Ú¶mkà .´t«{öìiÃî}œwMÆ@È Teoq·²Ûë¥[Éèö’éî]nbÈ­8 \=�Ø.6ýˆËO³œ:`¸å¨{T”­~‚¦—XÐ(ð6jmCzÏøµæmÒÉ&éÔBu c©ÿ©õ|¿6�G¨€7Q=)'–•jŸ‰RÐ"V@o< žT�ò5ïn°Ì¾d´å½CU ÿû Z¤ øœw“�λI”þ+­‹·3`}à¬y%@@@@BB€JÃ�ØL,$D®€[ó5oÞ¼]­Zµ²áÀzCw÷^·îx÷nÈ»f©tÀí-Ñ­8Û²e‹MSXXhéÞÓ¹ÒYäUÙ[WÁ­6 ãö•8†áðÐ Js.xβ\ß…>¿�qn´¾«ÎšÕ�@é/öÜ›¶h/òD¥Z4oJ�‚0håvØ�3_xUY¬RÃz�±<¼!½C„¶Âÿek~ñ�ŸZnïð–ïkÖ,K÷ŽÉ-[¶´ánݺíâε}»î,æV&%%í1MÅÝžïì¡ü|õ³mÛ6K* +Z瘚í-Á¹.,„‡@ÞTÝw{ü&õ<Ýj°å�Î|Ý�m[›µÐþP´]½Ô-ûiŠåûOßey׳3-}™§X>ôØe–¹´˜B¶<Ýù® o³ü²¤—åßž¿Ãr`²SyºÃ©\¶Ÿi+Ч¡×·ÌFÿåBË�W¬²Ü¸£Ô2®�ú:ÌêÔ×rÈ©#-O94MãíZí80×Î�¹@@@@;.ý…Ý&e…@ Ô–/_n‹üñÇ[VìQ.%%ÅÆ¬z�Ö­uÿÊÀÞ íGk¥¥ºÂæ¦ûh\\U¯«ÅÇÇÛ¼yyy–n…£ ЂV ö{KЮ †¡-Pô£-ÿ¨¿¾`¹Ô§j÷Ãÿxµå •³Ó"O`ËK¶Î¿I;Ïòýr÷½UíXló>–#ï|Çò†+~cÙ‘Þ M!›«­ôD§jìÞocmøˆûŸ·¼¹w=KeÅÎ}“cœÊÓâ96òƒ'••´ÔæS÷ÝfÙñõ’ùÚ—XvÑ­Úi5 Ò°†p̆ € € € €@¸ PiX¶e)UO^£Ö¾e™¯^ÃÎmr\ÙcüƒÔ¥€[ëçÞËØ­4,..¶t{tï‰ûï×Z”G'™ScYÆG©÷„¯yÝraáJ˵ś,©44�fÍšÙ«œrÊ){¼–ÛGá²eËlüW_}e9cÆ K·ñÈ#�´a·U¬+¬JÍ``ua`ÕáÎgåß`¨ýÞŒkÅ2!€@ˆ ø7Û‚y»j@ÎxX}úÚ\dùÜk×Zv‰· Eª@ý¡¶æ÷OR–k>Õ¢.ŸöŽåC·Ü |ñzËãg¬¶üxÊ–ƒ’-ha.à[ý¦­áU—=g¹´Ù–/?y±e.Ŧ¦@«L ®Õ¡6úØV‹U½a˃,GÞv„å‘íFXö:WûØÒ—ï·|é/Ç[^�MÍœ1T»¡Vm2f@@@@@ ¼B¸Ò°È©.|iã'¶…&nûÖ²Ôÿë5†�›3Ú«s¦§5>ÊriÑK÷�ÜOjtXàd #€E :Z[srr,6Ô5´wÞÑ•ù XvëÖͲqãÆ–î”11:¤»ý!Ùpbb¢å¾›;¥;�Û_Þ¾§çÑà¨úÞœËÏR!€@ˆ 85†SîP�á°;ÔÏÔŽÌ3-Ÿó¸åð–Ô%­2�¨ú66£¿îªüÀÿÒ-‹zcùÈlí9w¿®Õ�—ªy÷{™ ÐÂM t±­Ñs¿ûƒåk³,/~o”å™7L�V[½û´<íJËÓoÔ÷¦Q+fZ~õm¡åÕÙܕ۪ÝxG¯63 € € € € Þ!Yièw¶É7|lÿNئ3Ç5kÝÛÚŒý“:[î(ÍWú v�±�ÜüÛt�ö–KÆZ¶¹ë/–—´á¬îÞ¼A*Ш‘ú`MNN¶Ü¼Y}H¹wUv+ Ý> 4h`ã7nTï®Û·ë>bî\6Piskóóuôsû4LJJªtJF†–À¾÷–ÐZ–‚NÀÿ‹-ÒäÛN²üÍ?ôÙ5/çlËg?~ÎòÜÖÜõÔhUHÒ_w?P3ñè‚M–ßÏœcYìQ¥!{’!„e+þúQ[¯»Ç¬·ôGé/c>ü}oËœß[TÖüy6v½ Ŭé ÀÕ³-oòêTFÛ«F[޹®“%Ý!MÑ-,Ò[8çR–ÛpÞ¥ÇC¥¡ÃPÍàœT5Á˜@@@@�pÉJß.4Lrú1¬Ùʈkf3žÑx°eÃhU֤ƪŠg`B¶eRÔ¯÷V¸æ{›òÍW>³üì»e–«¶•ZÆ%7µl×{€å9g«·Äž©�×þ�åéY|¦5Zµô©&?_@~§Ø}o¢7Ãj!†ÞÄÅÚâî'Zñ^½TYµæT.[êL¬cNÒf�pÿ±jÏÀT à[k+¹j­sÇ‹¨&6œ–Æwœšow* knÇœ € € € €„¥@ˆ]t¯!¬*V�¯FW’£ëÛ¼ç5jÙ,V=h¬,ZgùêÆ±–ny�e”sWe¨´•®œlão»ù ËEYª%<ÿêS,Û5UÏ…ë—X~1ú#Ë?ߨk ×ß{±åàTçšY‘j§}§þÈ|½,h €@•Ö­Ó‘*/O×WÝÔ””=æÌÎζ1sçε\¸p¡e×®]-ÝûêÚÀmÞ¼y6Æïב5##Ã2°zq�‰ù1„ª²·„Ðê°¨ pðüúìýùÍN�áýÓm¸´Ó–¯�yØòäV�Uc#hTIÀ¿QýÓ½3a›¥ß«¿ôêÖ»“eˆ}Aµ%¦UG vàC6ù’e•ÚŽ×l²ÓR϶|Çsªå«Þ¶¡¯õ4öÐ÷š_ƾh9z…þ4ªÑ@Ë£{ÅZÒj&@¥aÍܘ @@@@�°¹ 9:s\èsï}S½­ãÕUÐ)C,sâuO®|§oć֪f°È¯çÜùÌz•JúÓpîÜôÅ+ïÛcß5ÓµÖGÿ¦ŠÅÜÀÓÖYêA¬S·lËz7ÞgùÄk³-û_¦‰^¸æ1Ë7W:=/Üv• �q®¥u¼øo6üðÑÖt&·`áxË»WNY¢» F7ɶ<êœs,ÿ0¨¹åÎ�§¥ÝöóDËÇŸùÌò‹Åº^•šc9øÌ³,wT K÷ïø‹§¿`Ãg½—iyßH­õûÔrú¦v–×?s©å`]ê£!€@�¸}~ñÅöì­Zµ²t«üââ*¿OàÊ•+mš‰õ;îΛ››kà 6´ lî³¥¦¦ÚH·OéSu_Ë~ýúYÆÄè˜áÖΞ­ã’[�èŽïÔI×öiÁ&Pw{K°­)˃A*à[o öÙ�'Xžúà -d�?Z¼ýÑ–Ç5§þ@$4û.eãï¸Èò£ÆgXž9L_lze6°Ôw°ÝÍgƒ[~þŸå}—«^õÕÕú.“s®åUÃÕ;³×þ§!€Ðcñ‹7XþsýËóN;ƲWV…cK±Þ­f¾q—å®yÖr©¯ž¦¼ZóžÜ˜ãŠ1Ô°ñN_C8fC@@@@ \v«…ÔúùkÔ›áI�³µìžØÖ2Ú©:|xÍ+6¼¡$ðnMn�á^8ŠØS¾S�`× tž;G僕µXUtŽå+o̲œ}ùHËËù­åÖ _°ô^{·åõwOöoÓó{|ë,Æ|°ÂòŠß_«LÓR-ýäeËÛ{Óò�®¿·<Ñ9_î_÷¥ ßù�ñ–IçêùŸ :£¢Ÿ?µ¼ëÁ',ŸJ½Åòª.ñ–nó­˜d÷<­ŠÅ£Î½Üòœ¦É–-t:ž†u.°b…~ÇÝþÝ{»÷/®WO¿„n=àÖ­[m¸  `×Ò¤¥¥ÙðᇾkLà€Û#á Aƒlä‡~héV.X c‹ûün¯ˆùùù6Æ}]·±Q#ÝAžœu±·çš²T l…cT£qÖƒßXnó«R#fö“–§µVV©%œj“½¸ò¿–Ãw­Ò¬L:ú¶²yöh˾¦oX^c™Ô<ײM¦ê“bŠ,7¯Òg’ùKÕÃ{¡óÅ+.Cu¬÷¾y¿å±ú:BCv è0Q´j²ånzÐrÔŸT»œ˜ši™Ý*ŲžG—¹ÚéÏ}õ¶öGéﱺ_ö´å›·èVîß\Ú­TÖ�Y@@@@g] éæþmzJŒÎ%orj�KVåÖ©oýNöóà:Ç\?Jg™_Ü8Æòç‚e–�­â¼åݼÑ~\[¨¿Ÿ?¤U}K÷Õ§Ù9¬G·R_ÒÝonÍv繓v>¾¯u&·ë)§[žÐ^3¸¯Òø”#m¸÷{¯[Î_®;ykÊ…c'XþØæ8Ë—ŽÍ¶läÎÐ[WíÎ讳ò�L\hyE—Ž–nóoÕ3tÿÓE–çT –=Ì? Pgn=ààÁƒíÜÀµk×Úð¶mê�ÔM·011ÑÆdeeY¶nÝÚÒíÍpß÷8vïª<|øp›~æÌ™–Ë—/·Ü´i“¥Ûsbf¦®Î¹÷VnÙ²¥ Ó‚S ®÷–à\k– ‚H  ÏFÕéjú4[R°C©«ÖJU/ï|r­ÚôL’q¶ÔÇÞñŽåã­õmåƒÏ§Yþ¸@Ÿ@~þVÕ……~ý‰VýÆêi½ÝÀ£-�tŽåe—³ìÔPßkh €@y�hû1÷‚‡,Ÿ.xÎò�q_Y~?o‰å⟖YGëÌLã],�¦³"g^z…åyƒô}‡CC¨eãè\K@fG@@@@ ÜB¾Ò°’Î(“|¨å̼¹–lVN]_Ù]’OK9ÒÆ4pÎ@OÜö­ ¶U=³T»¹|Õž­š3xU5™•^Ï²Ü F«˜zqºR[\vyW=ƒ,[¶Î2ÿ‡·,/<÷]ËÀVR¨Kº«‚ICVgä¤'!×þíÙ^ÏIC�/àöNèf]¼zR’ê”XOÎs`�ºÞ[WÇ­r6Lu´ˆÒ'„k¿Ð§†k#”€ÕÞ-šªÆò|J{з–¤6ÇZ^ö'÷>)� P=�ú#lú·ó•´ÈˆMëg+~þ­nF¦ÁÁ\k* ¦>¯� € € € €@ „d¥a`ý]©_•w™ñê=0%&Ùr{©ú]ù.o¾å¹Mô7íMctWÐE…+-ÝÞ m ÍÛ°‰Í•¯ª½e+ÕŸ‹¿“^1pyìG§©Òñ—•k-·×O³LKªl*gÒ=ù³sLtU§÷ùô û�´|ô‚6–7ª7^ç¯ÞÑvõA«^Eâªú"Μ € € € €@dPiÛ™µD@@@@ Ê‹Òªo縅Æ5Ö>�?a;¾9Ö*.ûß;^™èµêÅR¬Î±õ�¶ @@@@�ìPi˜%¶A@@@@ ˆ<ëׯWwãâì[†�µÈH«hûÿiö­Ãö ÈVÓ÷êŽÉÊÅVÚCZ f°Ph”ËÎ:†�]ë´•{ƶRæóXf†úÀÀ&$œ4�äd[ÔY ·ÿBÃÂøšpg~Á²WJŠ­'Œ–`9êNû™˜˜¨] °•‹-Nƒe¿øøxuµX±bJ�‡O‹ÁrÜsÚO¯×«]”1119Ý�íƒJ ð‰%ðÙ¸pa[£Ÿ†@VIIIúQàÝ'*Êfbcî"€ € € € TTÕᦳ € € € €œX OVÖ ÷Çql¸}Y Z°‚ïLÝ|7LV5†ÿ·"ž!ð-É¡þ5†¬fxâ!à € € € €n ÒÐíG˜þ!€ € € € �C�¿Œò‘÷üõzù2à§ïÓ�?æÌVN˜³Dùû¦å¡ðÂʳk^¨¼­[3eÃØ¬jë¼úéÖ/ßPÞ=âOeƒþC”Ô9Š7Ôž³D1{ž˜bv;«B@ýÈ~STY"Æ* ý;ÙƒY4›ÿ-^¼ˆ2j¯eÁã?uN_I~{Îâ…ý™eù¢6ù»åä•v9±¡/iƒ6�1êå„›• ¡æSõâ¦ÊÞw\¬¬˜_AC@@@È••†¹âcg@@@@Ü'pT)œ[º˜¼å'uåÕç§(—*®,�Eå�oÿ&ýôÇ•Š�ºm»){TŒQFì·º¶YoŒUn�¼=°±2ö¨çI^;G�?3ÅêK;r6í—õxï‰{•ÕëUWF§Tú¶ý¦üð­eÊù¿[�\«!M”»^¶ºÈmË•(óEÚz…+?³õ?]´T¹³fåÓM¶*‡>ú�2­v-e�½¸‚)öøœI¶å�‹¬wen½OÙ9uª2[¯ä™¶Ú²äŒáÊá«c•Ô-©<”ßz·{Ù×Ê7?üC¹(¥®òé¾U•ß=›íW~cimŸ±nóø†!¾ƒÚ~ÁèQÊÑ›ÎW>0¸‹²ŠÇz7õÕ÷”��)¦|³G5eý¡!€ € € €88r†Ëéó° € € € €¸Dà´¨4LIIç¶ñÊ³ÊØ· ¿mܼMÄÅZý`DDÆå ûÙêx;ÿX¡L¹¢»ò…*?+{?iµ~G7O‘z°KËL­xMÝm}ÅÙÊIw(w؇d\ØÐ—¸\�Œzé'e…Î7(ó�¯´úÀš/Öjßš4°š¸ø]K”_üb=ݶq±²ô¥•]u¦²LH¤²ØE(nµ•W}e¯|Õ:ŸÒ³ÂÖìkP½¾²FU«UôxÌꫬ&qÃn{…ŸÏ]£ükÿ~åO%¬"¯JÃʪ%¬Ñ—žýWbÛ¨^OyYØå®ß(¿ßb5ŒæÚßÛäÜs,K—QFø_y•l¿òŒsÕÙ1 9hõ˜sæ+Bþ÷p å¥ÇÝê»u¶^ÿðô<傎öª®(tT9¨¥!€ € € €dO ãìMöö`+@@@@pµÀiQi¸rõ!xîMå�'z)+W({LöÕk­^ï‘#”O<ØUY«F¥£¶´™Ð2M:*öÿ,m…ÕôùËý÷O¶†`â&[spì'öÚÊ4jª¬¦ø§ywëÖ¯NTþÙ¸‹ò¹ó“•o¤[U`Æ–¯´U,ÞÐÒVý[9áEå—õ)/^»^™¿îʛϱÿÛeöHµÝ‹”O}UBÙôJ«›[œx†Ý¾ñBe)ë¢ZQýi|�­¸‰½’¯Xmàug­Vn*VGyK «aüç0çð•Ô²ÚÆÖÕ·+§°2¿êW[�ã®ß­�5®½JyQô¿5}Õsðʵ«Iv ÓÿÚ¬Í×§Û¨hW)PchOhù*UÐ�ÊÞéÊåì8_Q#ã¡ lE"€ € € €dWàïɧìnÎv € € € € àv�JÐþÓ~ª¸Û_ø¤UîßSYµr¹Ã¯kÍZ«5ë7àUeŸí”Ǫ1<¼yÎox·jŸ ?¯û§Õ ¦x )«5½E9 ]Ee~ý±–ª?N{G9ÎgˆÏµ:Ké³ú¾¬ZòŠ�õ£ç§Ú·7~ª•òª_‡*ïzÅêãê½YY'ðÏ>[CpÎë“”?�ÕR9¦“Õ!&÷z_ùÂl{%Ï^kkùf|}‰Ku{äp«,xm?e÷Êß(»>5Vù~­¾Ê[+þ{ sðJB¬ârÃÌ÷”om¬ªì÷P3å®g)_U]Yµ¯Õ3 ”æà•çÌЗ¸_Kb„­äm™[¸©¢Q”{öYé™ySî!€ € € €œX€Jñ € € € €A%ðoÚÞíõlŽ{[½a¿A¯)õ†aa¶>ÝÆ+5†�.¬­Û'¹…Zí^³Q^rÈ* ÷n±ïäýâÔ½[…à+�ÙÑ¿OS>ó�­Øûiûnâ¸ÀÔ«•åeÙ"+4ÖÏzÜmß_\¦ŠËÅžaÕ…—/¬¬õïÊ€![©°aÛ6Ê‚ÞÊâÑv˜:ö¶¿à@%ûÎèŒs½žB•ôÈÍÝ:)ΉU(|¥ò¾^;”eÊyˆsðJBL¾ô¥Víxo™Êú‹)Ó:ÙßZE“á…gï•[%`â’úl/ŸÿïÊøêÁ Í¿�Ë r@@@@ ÇgŸr¼3; € € € € €€û<ëׯW¯âââ÷-2òèEæ?Ùß;~·`‰n½ôš­âh÷ö´u �Õ¦­˜¢}o{2AÙ}\{ž#¿€W�»y7ÍÖîº×¾¹áÐû”¥ßHùô«ûóUöæ TºùQëmóÞ@«1,~Ô–z0(›Uq~5äeö ßí´WÛ?Ôo‹²Ý˜Ê«lyÃÚ¡Eº5 “U/Æô¨ì]Ój$i§³@r²�g-<Üêg5ÈΞ�½‚A %%åð8a´ÃÏMµ{�VSÏhÉ�d0ì¯n+f¿{á9úƒ`0ÐÇlx½^m•�`ÿúˆ‰‰ÉÆl¼�O,�ÏÆ… Ûo¡ÑÈJ ))I? ¼ûDEEeµ�# �À¹åï*G"Û¶mÓ~T:Âc'@@@@Ü+pä‚w§IO…/ß^Üà¬c˜�Þú+íZ¡µýiÐÕÖ=ÝÎVÐËÔÒ7èîû­ª1å–{”]êÚUè¢ÔJá߿İx´­/Y%r¡rÙŸöÍËW�ûo±hêŸëôȪ[e²cYæÁÅ@C@@@r%À K®øØ@@@@÷ œ¦•†èÿŸêÂä¥_믻¶ˆ²A�ÒÊ3b¬.yçZ圱_+7—»\yq[)¯`ØÊò%™[úÝ�·yØC¥l›r±§5oæWÿÿvÏ / –È©¡}ëôu—Yuaÿ±3”ç÷¼LY9d“rú˜ùÊ”ö½Û £)ì @@@È••†¹âcg@@@@Ü'@)\HXA«_Û·h–rÐøíÊ=m½ÂÈ"%•Uê^©|úÖÿ)+ð•¼RøošÕ~žÛ¾«²Ç[(Gö Üå-¤¬xÁuÊÝÎSRh( € € € �K* s Èî € € € €¸MÀ³~ýzõ)..ÎqÏ"##ïËŽ œÉÉÉŽ;n%Òaa”þ:& ŠSRR�FKPò\t211Q{(Pàð˜ÉÅ“±«ËâããÕÃbÅŠ)=VRvùávÜ=¯×«}”111ŽŸ‡ƒA ð‰%ðÙ¸páÂÁÐeúèX ))IûÞ}¢¢¢?;ƒ@àÜâóÙïÑ:kÛ¶mÓŽT:Óc/@@@@\+À¤¡k-C@@@@À™“†ÎÜØ @@@@× 0ièÚCKÇ@@@@p&À¤¡37öB@@@@ÀµLºöÐÒ1@@@@œ 0ièÌ�½@@@@p­@¸k{FÇ@À¥ééé.íÝ:™Œ““©éöçJMMUÓÒÒ”>ŸÏíÝ¥¹œ[£Åãñäê¹ØÙ½^¯W� Œ“@º·¯ô,·�’ñ�(·ÏÈþîÈøîùŽÇùäô,0BÂÂÂrùtTæ�Ý@@@@p›•†n;¢ô× 8p@}Ì—/Ÿë{Js#°ÿ~í©d´äF2öMNN>ÜÍÜ_�=üTÜp¥@`´Þ‰¨4tå!>)� Tf-'åiyW ª�£…÷ Wâ“Ø©””=[ æ=pž9‰OÎS¹L pn)T¨P.ûE¥a.Ù@@@@· Piè¶#Jp½@�ÔÇ@™ë;K Ö*\¸°ž!<œ7;Ç�A±c`´DGG«·TyÅ!ÏE'×í‹)¢ç Ò0�.ß5cP`´¸¼Ãt/�Ú±ˆˆ=GàsK.žŒ]].�””¤Þ}¢¢¢\Þ[º—;�À¹%÷«uSi˜»ãÀÞ € € € €¸N€IC×R:„ € € € €@î˜4Ì�{#€ € € € à:& ]wHé € € € €¹`Ò0w~ì� € € € €€ë˜4tÝ!¥C € € € €äN€IÃÜù±7 € € € €®`ÒÐu‡”!€ € € € �;& sçÇÞ € € € €¸N€IC×R:„ € € € €@î˜4Ì�{#€ € € € à:& ]wHé € € € €¹`Ò0w~ì� € € € €€ë˜4tÝ!¥C € € € €äN€IÃÜù±7 € € € €®w]�è àz�$õpíçï(G¾3MùåÂß•kþÚ­<�âQF«ªì9y±òÙÆù”4w ¤-yB¬So ò÷4G}õÖní¦îTŽoéè)Ø)/ Ô‹^;{”ò•Ñ“•sæ/SnÜu@é+XRY¾fCå5íz)ïíÒXY:BA >�ôêó‚1Ï+‡ŽùH9ï·õÊ=!E•¥+ÖV^Ѧ»òÞ-•5ŠØû͵¾DumÉh;âmúLP®ð6WŽÛ6CÙ¡ˆ"{-m»¶û~ô`åóol·—mVîM˯Œ­\_Ù¤ý½ÊGï¹NY1JAËk‡ÖèOº¿�òΑöé4颡ÊåßÞ§¬à¨�)mËlíûD»NÊgçÙgàJý ücˆ�¦9„�W[îG‹7A}_úÑ›ÊQïÙ¿•>_°R¹i§�µ|c•åϽDy}g;·Ü×ÑÆL GãP;º¾ãúCL@@@@È™Sð9óbk@à?ðí³k³#ºØuÚ‡§Ú5Û¤�0eÁ¸*Êõk*£ó¥*÷ï²+iɇ|JZ0x ©›%J•R–ÊA¥a²¶ß·Ó®Ç ±ê¨üT‰!8šÏê2æ>ÒDÙâùEÊ}>«ë)U½žò’ó£•i;íÊüÏ &+‡~7EùÎûƒ”³>é§l`ƒŽ‡þP?_»©©òžY[”é+÷*Y©¦ò¼ÂV¯ºiÅ—Ê·ùB9þ­vÊÑŸ�Q¶¯@µ»ÜÕX=òØÞöi¤×û]‡ÄÀÇ ;…䤥¯ÓÖﵿ\Ùåà ÊÔ{ŠüŸj"÷éö†•_)Ç<2W9cöÓÊÏf=¬¬WPAË)ë­*ù‘¶]”//ŒWzý£%ÂákO×~ÛçÚHèØá)åÙç^•…RÈû-÷£åÀ «z~¸ó=Ê‘ í·gÒüc£p\yÝ®P£¬=²ãOåÊomË!ßÚg›ñ3G*¿˜ÐYY™·,)dnTföà € € € €A/@¥aÐ@ O¤­ÒËuË5Ê>³í:mÑ z(_yé1e‡†g*sz�_»Ð\#Vãõå«Í–ÙoÉómûÚ�_P®)s‹²]c§×þ³ÿ·²åé!�²ð½�îC+£ê*ï�ûéš©V³|óm¯*™z¯²Ï¸«•3»Ø§ jë„p¸¡q˜‚ € € € € `T2@�Ó\À®Æocks<ü™]e-ÐÀ®ÜÎþ²~! �œ øl�—©CÇ(W§Û•×ú=ìJì¥4× ØšPæÍS®óW½ùQÝxT�a¢à9tcHŸ·•“{«üeÞ�ÊýþJÃ"ºEs±À�ÏÕ¹£lݺä°JÊ>cì¼Ñ½î‘'‹Ð˜óõx·w>Tn[}¡òÉŸ†*Oï®üàf«Iôè-o x×¾¡~cCû-‡Ù»íû²Ü?]ùa«óêgõ€9hi¿jã7‡Ûz… -ž{Gy¿¿Æ0ã8‰*ƒþ�‡”ß×í¯\ü¦�«éØHk["ã¶z€öŸ øô vN½]yQ«ÝYSyû¸)Ê¡±/)«MŸ«ÌI³1öußK”×¼l+톔o¥1ÅÆä…Ó.UΜ­ å9�“;ZìlPôrû-ŠO¹KY¤Je¡£Ož‚z¼R«”ð¡sé‹*¿žá?#uî¨Û1Gï¥GƒµQi¬Gž~#€ € € € �…•†YÀð0 p𸝯¿ñÊz9 aU•¾lkpPcxšŸ<ú2Ò—½©WþâÇöý¹!17*îél£+ÌîÓ\/`ÐÃÂìʱÇ_û•¯€U�eý…�¶}þ¨üþí!¡á6R¸ onoiË¿Wî¶š÷°3mÕ¹Yc˜É ²¶îvïù?å³w|ªœ=ÙÞ¿o¶µí;¹iyS ´| ½ðžmg*K×^ùJÇs”ö�W¦ù¬b(û-}µU÷Ì^e¥Îž"M”o°Dz:«ä«nõÎ T.úΪ_§|ž lÛÖji§“€ÃWvUÞvmª²äc¯+{Õ+¢L�mk¤Ú£9kök5v¶•4¯_oU‡=F>ª¼,ÖÎK‹&åüù´í´8£Å>Ë”®j5†'j¶ÔnµZöé7¶íÏuº½?Ä* cô‡†äHÀ»I›öɯÊT�} ntUc%kï áˆv‚Óó[s@@@@\/Àõ>×b:ˆyWÀ®Æ¯_mk÷¤ùìO\¨­)Öõ¢¡Ê‰[mÝ�ó^ªlÖ M¹í7«@\0ýEe·O¬>è«·¾PŽk_^yÜ¢ýœ Éêä�¯¾¢üz¿Õw”hÛGÙ©"WÅ|ÍSL}¾rè—ÊOcoSÞ:àåÀÖö­¦/—¶Ä·oV&>OÙ~؇ʡ=/R–`ÈH!8Z¾êVá^Ç_j¸z£Õ¥NY0Hyñ%Y,A—¾Q?ýàÅ÷•ëíML%öݦö‡†€ XêÞÝ þ[v*‰Ž±jÖ}J±÷¬¢þ-=þgð×Àj›1œ‘dAC�ì ØYh×ÇO*Ÿý&IZöeßöeí¶þÐ2 `’Ùƒ{ € € € €½•†A?@�ÓWÀ¾nçv»–î ±ZÂ¥c^Pleµ„ vWÖ/žáڼϮÛ/z¡µòš‡­ÆpâÝVGÖôŠéÊ[ϰ«ô´`ðíœ¦î¿øöjeZxe—{š+‹14¤´-4J]�­|¾²Zœ�76n´š°Ä-VcøRÊð0;Ï„¦ÛãivZâB¼!H"úZu´×ç(§ ]¡Ñ¡�²Ø°§”]þW]Y2tŸrÃ/V£úî�þÊa ­È°�¿8a«I,ÀyF 4°ŸÔ;ŸØ-}÷qDv¿ý8,2BÛ‡ùÇRzª­²šx { �-�äoh»Ûº�Unò”Wv1XÙ´(oTb8F£Òð(<„ € € € €@0 PiÌGŸ¾#€Ài.`аµ6|!ví+_­”ÇÝ¥¬wô—ÝzlU z÷½¦|hZMåƒ æ(ÇÏÜ®ìØ-NÉ4!e³ªŸå£­Fõ£Ý6® ^a߇ۣ¾UmЂT u�:>©{3e—1Ë ¡ò Š'§XY÷ ­ŠgÞØaÊç^¯|÷Þ+”³¦öSNœ2@yy Î(bp}+ 64YùÚæ–ÊÞ?VöoáOÝú·Y-Bô¹w(_f{=ÙñeeRÉX%ë` �æðžñWÎ �ªÃìधØy)Ý_]艰÷¯NBÙ�c𠤮{_ÿßåZû üÉ΢ÊK‡Ø»Û°æ%•œN„pÌF¥á1Yx@@@@�à Ò0x�==G�¦lPäßkí­£GZÞÑMùBûVÊ~sžV¶¾Õ¾apÑÇ]•åERp}ËokÞ>a‰²Éݶ:ê¤Yó•+¶&*½ÏPVkhk¤¶¹ñBeái7)ïôÚX ?»²òì ðê.-ˆlT+£ôhÅæ��}{”V¼O)V^˜àßÒ_hâ)Z\�Äü{º²Ýi €À1R×MÐã]®î¢œ°Ájá/ìgk¾O} ŽÒVÞ¥e-À½¬mø  € € € €A)@¥aPv:�yCÀ 3J�a«A…†¬S¦¥¥eã…Ûe÷…ìšÇÿÍ„ÉÉVU¸2Ÿ�ÝÙÄeVDZqüPå„Ív;_�Û•½›Ú ˜´ HùNõú"å�°ªÊG†>¬ÌXc¨»‡[hñ‹tû�ñ¶>ÝÏç´UNüâU帥vÅþñZ”�‰!Hšº—ihcà>«ÛöŽ3o¡Õ5ôÙØ¨Qÿ|e†VÝ£³€�Š3+”Wð,PÜ´A¹ÝÿÍìY׿[%âÆu›”é!ö qgŸ¥,D¥¡h �µ@ÊŸï釷]}»òƒõVSذÿGÊ™O4RR­,„6* OHÄ € € € €—•†Áu¼é-ä);EŸSç\eÏ庅?*·yë)ËdyÑÇ®ÆoݲM™® Å��’¥ìÁ²Ü\?£¹X ù'uîÕWæ*÷‡R6í}§ò<–·”B°6_¢ÕõlØå/ì ·JÚÕN< ¶Æ®ýÞ -'|ÚˉÛ"€ € € € \ú ‚ƒL@ / xJܨ—ÿè½¶šØ§O,V>ßÎ* Ïžòº²Ë¹¶BGàú�wﯺ=º{7å›ëmµ²üçÙêu=.�RÒ‚N }…º<úÅÊx_„òünw+¯ÌjÅ(ýŒ$‘V§Óª™U ¾7v¹rÄ]�(M¬¼¦¬�–ŒÍ·ïwÝ}»ûýʉ;­‚5�[”7Õâc¤húöÛ¯¥0ºŸ�aú�_ªL-~µòÅ—:)ËR¢ Ú¡õ@§û[+_hýžræƒ�•/V«¼ç"«†œ_m˜©Û�ÞöŒò§dL¥;[kÛ¬—vÖOi œ‡–¿©Ž·kÒS9}«}ι~Älå„.ÿ"‚ƒÆÛ¸4vA@@@@ÀÍ\"vóÑ¥o à û–Àóz_ùÚÒ¦Ê;'MPv«ó±r` »nvVT¢rýVYö׫1 ?ëzåKãRždÙ�£¹_`ÿ—/«“¯-N¶®i®èÝ•ïš4 Zˆ§¨š?7ZÙë·6Êá?U^Wyœ²Úu•UKTz6*ûq±r}‚�["ÊÝ |ù][·î\>EJ!HÚ¾ÔÑŽõ‡(×–9CY$ÂV—Û»i¥ò÷)÷û—»ŒªÐR·‡~0FÙ£êqWÉÔ´à°Õ‹·°3Ï›ÝVÞüú§Ê�¥|®be噑 Êõ+í,´×¿˜aÁÚVcøös¶bQ–3”  ¤¯ÖÍá]îVNßdky‡„Ú ïsú6P–´�-'lö±¦V¿ï”ßõ³ÏÌa'Ü#86 Ò08Ž3½D@@@@ Û\#Î6"€ÿ¡@„]uïôþ"åù­^S¾üÆ$åÜ%(%Ú÷¢gÙ•´¯·U�úö½Mya)Nòb¾æÝ¤>�jÕ©›Óí*i¹öV�qS…b ý-à)u­n½2ÿ7eóÑÔoNþB¹à÷o•³æ[�jhT1å™U®Rv¹á6eï»oVžK‘�‚ª…Vw û¶(—̳÷�ƒþ•R ;S·+]fõªÿkq«²{ç&öH໹u‹†Àq<±úáu#üu= žÕíÁ¯OV~ýÛ2åi¶þX‰ �”mZõP>ò �´s‹ð^&!pH÷²ßа՗ռ)Šƒ,³×ìßMS3ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,À¤¡›�.}C@@@@À�“†ÐØ@@@@7 0ièæ£Kß@@@@p À¤¡4vA@@@@ÀÍLºùèÒ7@@@@0iè�]@@@@p³“†n>ºô @@@@L:@c@@@@Ü,îæÎÑ7p£ÀÞ½{Õ­|ùò¹±sôé¤ $&&ê¹’““•'íyy"7 ìÛ·OÝJMMU†‡óÑÈ�Çøäõ)!!áð“y<žÃ·¹�@F¯×«»û÷ïWú|¾Œ?â6GÞ}2æp�Ç:|ûàÁƒ‡os�£g•¢E‹ý£=B¥aޏØ@@@@÷ p9Ýýǘ"à2�èèhõ(22Òeý¢;§B P¡BzZjÇN…­›ž3PT¤Hu*,,ÌM]£/'] ==]ϸnO¥áIçuÍÎ*�’û*װБc ¤¤¤èñ@>·s3D@IIIÊÀ¹%** Ž#8«gƒlþˆJÃlB± € € € €Á"@¥a°iú‰€kBCíjG ]Ó):rÒ×`-'Ö•O¨.d´¸òàžôNe'Tžt^—=aÆÑâ²®Ñ�“('?·œÄ'ç©\&ÀhqÙ=¥Ý Œ–ܯ«K¥á)=L<9 € € € €yO€IüwÌxÅ € € € €œR& O)/OŽ € € € €@Þ`Ò0ï3^1 € € € €§T€IÃSÊË“#€ € € € �÷˜4Ì{ÇŒWŒ € € € €À)`Òð”òòä € € € €ä=& óÞ1ã#€ € € € pJ˜4<¥¼<9 € € € €yO€IüwÌxÅ € € € €œR& O)/OŽ € € € €@Þ`Ò0ï3^1 € € € €§T€IÃSÊË“#€ € € € �÷˜4Ì{ÇŒWŒ € € € €À)`Òð”òòä € € € €ä=�ð¼÷’yÅ €€{Ò¶ÌVçžh×Iùì¼ÝÊJý ücH}å‰NÙ^m³wÙ,å;£ßSÎøb�ò÷µÛìñCŠ�üEÏPV¬ÝHÙ¼Ó½Ê{;ÔUç’òZËÝh9qo½Çj£ÖtVNÛnC¤Æc •¿ª£<ÑhÔ&´ÓDÀÎ ñ? UÞÖö1å¬ÍÑÊγ¶(ßj¡#€ € € € ¬ ë‘§ß p ¤ëµlŸk×Ì;vxJùÅ_©J_ök¹Ò×iûIwݤì9úge¼=eHX¡8eÅÊç)+GÚsîY¿RùÇÜñÊßæNVNúú}åÜÑ7*Ks!I §{ËõhÉNÓVk«×ï補±Ý*�BB~†¼¾½z½‹FÜ¡lóàT埇üv¸£@IDATu‚9<˜¾ý;µï®$Û×^PS¼�2ŸþdÝòͯz²Þ€Ÿœ^'i´üÓ©4ÝØ8ó!e›.¯(ìò¿-EX}ÙÙÕ¬è¢ó (=‡l”îòZõ‡½KÑò„À�ez™c{[ÕX¯1¿+ý§–û�þ„ÍÎ ù‹–R–*eÇ=û-=i·6ŽO´‘âÉoY$§˜ìóýG[¦¬·j¯GÚvQ¾¼0^éõ�–œTuÙç�-Óº)¯lÿ¶rÅ!;ðKŸ«¬™ýÆLÔ¡­Ê¥‹¾QŽz®òƒ1*‡1EÙ½ZNþ6í@û�NÆh±áµc¶ý6U“›‡)µ’è�|EÊ*Ï©]YºË>å.žú¼rÁtQãúOWÎx¼‘2†³Š2·~l̼3÷@@@@@À}Tºï˜Ò#È;Þ]z­ß¿p›²]ÿO”›£ÎS¶hº_9sö:e¶Z˜UV­£Œ©m+ˆõz ¯²ç�õ”±/¯z÷é‘eìú[ë;Æ(—¿{·ò‰›®VŽ¾Æª‡h§©ÀÉ-'è^²~þÛÐÎÊG¾²Më]TMùË|»*KË+¾Ä%z©£»[PŸ V_ì«ÒBy}~[�ð#+ ÊAóÆ[¥a¼•z„„U·sËÜÅO*ÏåS¤ò~;¹£ÅªäUÕþ¥�“küUËCÊëvóA/)Ÿéu�²ZQVCžl‡VOÒ뾯�Õ|�ú%IYæ;·Ôøv†r�˜ž°Y…àõo®·<ᶇ7ðþ¥›c®¯®¼ýûk.i×Jy60R8›£-³ŸP¶ëô¬r^|qe£–—+×̘«´šÃl¶}ö ù±žö©uE²U+_>ÐÆÛ¤G.Vf\´Ð»w±Ö¡™òþY¶Æ÷CÙj›-ftRÆQA&…Ó±�ÌÑâÛö�ºxW§áÊ_Ä(>ø®rü“6*Îþ{‰e«qÞðÉeûŽÏ)ç ²ÏK½ÏýE9¶eI%ƒE‡'ÚÃÜ@@@@@à1ãøOöëoýºï%Êk^¶: �òvÍ|Äû~É §]ªœ9[‘ÍfÎj÷ý\¹ÚÊ;²n¡ÑúYõöVñ1pæTåÍ·+¿ùêweê5)�¿N™6 ý¿ œÜÑr¼—`á ýø¶󕾋†(»vš²•=@Ë ©¿êU>sucå£ í[Jϸê)åÄq”Kn±Ê [_*'Í¿C›ÿ]iX2N·KR(–ÀÓwÛS0ZB’¾Sõ|U¹<µŒ²Íøo”ãn±Û !äÑæ]kŸOnlØC9{wQeƒû§+?ìoïP}â¬òëÔµÔ%#õä/ͱߖðÄYÕØ=íË)©ÂiÖ|z=;§Þ®¼¨Í8åæÈšÊÛÇÙÚ‚Ccíógµés•Ùo©ËìòÝN+w;ËÞË�]‡ßþ½Õ‹½ýÏ�Žøÿiã¬&è©'lý©ß™ xuœ’%÷·$«"\ó—�O>«ÑØ6æZeƒg*C«\h·¯¶Õ£"×*üþ+å;�ÎUÎø¸¿ræì'”GgY¢ŸÒ‚GÀ·u’:;t¬�+oÄùÊnwÿOiÕD´à°÷�27Ù;Ï7Qg*;Üa¿13éA;ÃL}¶¬²Têå–CVSÖ°ÇåkOߪ<—󉂤yЍ£uêWU†ÍúMùÃäéÊÍ�»*ËfñA$q��¥W¿NVúü«»§¦æôû½µ«Ë[x.ï5ÝC@@@@�,¨4Ì’† €ySÀj4 •­­¼ �Õz¤ù×4LŒ·k°6ÙÚd«>¦|pÝråŠþ¶6Ù€¶Õ•¬k(„`i)ËÔÓa]PÎN¬¦ì3ùå5Å©ñí°€­çSãÁ9ÊEÌWƳµ +•/£,YÐFË¡=vnY±`–ò­!ƒ”oÌÿZ9¸õMʘVGvu>pŠÁåÍ¿]=Ü™îSúRf+_iÕ…÷N]¡tCe”þüÓ’7LÓÍ»¯i«½`°²ëàk”¿<Ó@©?´à°JŸ%#­è3[”,¤HóÞÊ®59“˜F°6{?*TÚ>±œW¥¸òûvÎIÛ½I¹%°þr~!a>û›”4;g-;ÿO 7 Ø©ÙÙÎM†Yuá¬9ö)·å]V'÷Rß–Êúåìß:)Ûí7±¾Ÿ:\ùø5bAÛÆsÈ>Õ(XÀnëí* ÿ‘àÿ@@@@@À/Àå à2»ÎV­çDå÷=�ìZJüR=ôÅ;O+x¾Iyh‡Ÿ”+’*?º½¼’«IBpu³ï‰[<ä6eÿyVÍQ§ÿ;ÊA—F+¹²*Ú‘Õ.oräãþûKØy£n³^–WXeYÉÆ—(-þAùÒ0«4¼käUÊüúCs¯€/é€:w0PÜZB·o6UùÜ g(�~g‰,guCŸ·oDýøú1ÊULPþ8È* /ɧ ©€oï,õüÅ7þP¦†–S¶¿ç&eoQRÆfߣýǨŽÊæ÷X…òÆüç*Û¿ðŽòñŽö»2;çŒV¾ô¬ý&͔׬Êìâ�¬‚ìÙ©¶ï=õlEo†�\ßBÏê¬>¾=ñOe«vÏ*¿y‡²±?uãpóä³Uݯô®²Ã·7*û|jÿ†*ku¬G¿géÁ mhí¡§ã € € € €[€JÃc»ð( àJ�ˆâ5Ô¯kïOY£ÀNeÍ»¾PÎ~Ú®ÍþÐÑÖj¡ ¹V qÞãêÛmC+ó]ò¼ò�~õ”¶‚ �\ ¨«'è~ÇÅÊg©ÜñÓ�ʵéViXÝ.áÓÜ+�ÏŠÿ´ðä¿T·oiqìÃŒ…/¾\wëE¼£œ¹ÍVÚ]¾ÛŠ/)EU�‚°yÕç?ßyQ9y»�„È º+{]Ê{”‚´%~ÝO=o}·¿Æ°øuº=âËIÊÕ£‹Tj?@·/º¹›ò³þ7+Û>oõª}[Þ¥,÷³U“µ,ÉYE ®ov”c¯|ZùͪöÊÙ­æý«%ë”ñ‡ì}*¦¼}û•­Û(›V^«|â½teHhYE¥òÿŽ+{�FÝ%c@@@@Ž Òðî"€Á `kS”mr�òÜ|ViøÃ–_•¿n·+ü�ʲr…ÜØ|»Ô«ÉÏŒP.M¶ ލ¥¯(¯«bu¦Yµ”½[õ£tý/$dõðfÊJãüŨ‘Mu{ø/#•Í)‘Íì ±Òg*óûK:$í×í6Üh.�µºÂRaþïÿöÒ4{K9Q‹*¤- ªPS“u;Ùvbý±Á¹ôçIóÔ±áÃPôÄ([ÝÓEY•:e)cKP§?yuŒrUšÕˆ5|À>·Ü™¡ÆPwÿmþUêš ¶ÕQŸú©š²×Ü•¯N¢¼¡‡­aÇg\!I -Z]=½öNfÑgß¶EúÉOÚ§\O¡ó•õ«ÛH£e࿚ŒÜF@@@@�¿@ è|í[t*€Bí"~x¸¿B$è$‚§Ãv55͹Oÿ IÚµQ¹Á ³ÕR¬êpƒ]øW!ÙNd~ â°€�«½[·)ç–ÐRVuXŠ‹Ô‡…Ü{ÃS¸¶:w~%{7ùxù/Êù‹­r°ýå‘ʬšwûfýhkª�ODIel Ã%+-w?nc`ë‡C•c×Ù»UXÅNÊ>-mTðéDÁØÒ·«×6ÚçUŸ§˜²zÍ2Êœ#B­ê¹N]]áWët{󆿔Þ* Å@;,`Åðk?§üö�=XôÚ–ÊÿEÛmZF�ü—qSn#€ € € € €@0°¦a0eúˆ!�ªûËgÌP.M³…Uª£<Ÿï•3 ÷6O)õ­Ûgv9Õ¾_ðÄÍÇÏýÏS6xj¥²êc •¿²ÑÂ!ÐŽH]¥GÆ�·õÈR<¶*й—_ª<“‹ÔRp} ¯©.¶liëˆ=³t©rÒp[M¬ß¥”ÇVå±qætå¢T«$‹hp±ò‚‚ Zð ¤.QŸG½4[™¥¼¸gOeÃü Z° „ƨç%KØ'�o¯rùR«Mö^]A™å‹Ï~â�ßýÕ…Û*®´}þÉr{ýŒ|É+G©Ówþ^y(¬²²{Ÿ”Å)l–BæÆ;™=¸‡ € € € €@Ð P(ôCÈûékƨ÷>¿EYïæVÊk/±Z�ŠÌ-ÙÖ¤ûaÌÊÛŸ²ï K±¥;.ëÕUY�÷)Ð@à°@Ê7ºùL�Ï•±mÛ)›ûÏ-%#3^ˆ÷éñýkm›‘Ü¥|lÞ¥'îe¿;k)9µ!šçóîz\Ùú-;úfÜ£¼¥¬Ý~âje™¿ß•l­ÃMŸ>¡lßÿkå�msK/cgSÒ …àjvÙûÉKÊQ¿§*=%Z+ûtª¨d8!x›§¸ú~Õ�—+£?ýDùÃ�nÊg.˜ |ðb[ï2ÓûKº-Ò¼à¥;”ýçØ;QHa;ó´½>+!ÚÖ4· ¤ïQÿ˜úœ²OŸ”_íʧ<§×eÿ‹ (iG p>Ú„G@@@@j�LSóA-Aç@�¼+pÈj ¿Ó_9ü «ò�´U`ÊV*¯<3ÆÖò°^6¬þS¹m¿­Uç -¢<ÿ®w•c窱´ï¼¤!€‡|ûtsÙ”ÁÊGÞ¶ôDXmré³Ë)c£ícdJüåš »•‡l‘º�ˆ²×(Ÿ™d«Ý籇hA#à)eÕî#Þï§\ßÒÆÌ÷ƒ›*+½aï2µª”Pz·¯Pþ±ÖÆLŠÇFTÝ>c•Ãn²zCFŒ‚«yת¿ï¾8Y¹Ýkg•ª�­FµY1Æ‚‚¼Y…S™NVöÚ×M”wŒÿRùX㳕¯Öº@Y§’ÕF¦Ä+×þ²P¹d‹Õú¢ÎQvzÃÞ‰n/G¥”‚¤Ù¿q¼ByëÇvÜK·…Ø¡X»l©e¼U»‡„Yë½ßRN|þ*e §)«ñßϱTx @@@@�  Ò0ˆ>]G·„Uíª®¼1.B9nÚå÷?/W®]ÿ‡rËr»æšßª9J”±ï½mÚЮ§µ¾½‡²}£ÒÊHý¡!€GD\¦}ÏÖ‹�`ëIÍûy™rͦ•Êßþ´•È"£­Ê£üE×+/kÞQÙ£[Ke­®L‹!›•j»t�rî¯ÿSŽ6\ùîÌÊ?¯W¦ˆSV»ª…ò–»Rö¾¾Š’¯MB¶ƒßÙþ}’õ½ ÕõêQ_É'¡I ¼¼¢ÝØŸ•uZ¿®>ƾu}î"ûÆí¯–'*SÃìüQâ,[E·Y�VÊ®÷اÜfU8¯ˆ!¨š½EEÛ×®'¬üV¹ÒÿûU�•*gÿjÖêZe›®Ý”7׋U2)&„ã4>χ!€ € € € Œžõë׫ßqqvÅÏY‹Œä:�39öB x’“ýkIä€3O.ð‚b×={ìûÑ .¬ ç bPtÇ� Œ–èh«Æ cmOÇ�A±c|¼­œU¬X1¥ÇÃHAqÐtÒëµ>”11¶Ê0 �¬RRRô£ÀgãÀç–¬¶äq’’¬&7ðîå_­²œ[|>û½gmÛ¶mÚ‘JCgzì… € € € €€k˜4tí¡¥c € € € €8`ÒЙ{!€ € € € àZ& ]{hé € € € €Î˜4tæÆ^ € € € €¸V€IC×Z:† € € € €€3& �¹± € € € €®`Òе‡–Ž!€ € € € àL€ICgnì… € € € €€k˜4tí¡¥c € € € €8`ÒЙ{!€ € € € àZ& ]{hé € € € €Î˜4tæÆ^ € € € €¸V€IC×Z:† € € € €€3& �¹± € € € €®`Òе‡–Ž!€ € € € àL€ICgnì… € € € €€k˜4tí¡¥c € € € €8`ÒЙ{!€ € € € àZ& ]{hé € € € €Î˜4tæÆ^ € € € €¸V€IC×Z:† € € € €€3& �¹± € € € €®`Òе‡–Ž!€ € € € àL€ICgnì… € € € €€k˜4tí¡¥c € € € €8`ÒЙ{!€ € € € àZ& ]{hé € € € €Î˜4tæÆ^ € € € €¸V€IC×Z:† € € € €€3& �¹± € € € €®`Òе‡–Ž!€ € € € àL€ICgnì… € € € €€k˜4tí¡¥c € € € €8`ÒЙ{!€ € € € àZ& ]{hé € € € €Î˜4tæÆ^ € € € €¸V€IC×Z:† € € € €€3& �¹± € € € €®`Òе‡–Ž!€ € €Àÿ±wðMÔÇ›NÊ.³ì 2”­ˆ2\ˆ¢âD@Qq¢¢€·øw 8p!N@Ep¡"‚²\ì)ȦÌBgþÏ÷°XÀ6MÓ&ùüxõáz¹ù¾k’Þ}û  € à› }sc.@@@@BV€‹†!{hÙ1@@@@|ࢡonÌ… € € € €@È pÑ0d-;† € € € €€o\4ôÍ�¹@@@@Y.†ì¡eÇ@@@@ðM€‹†¾¹1 € € € €!+ÀEÃ�=´ì € € € €¾ pÑÐ77æB@@@@ d¸h²‡–C@@@@À7.úæÆ\ € € € €„¬ Cöвc € € € €ø&ÀECßܘ @@@@��à¢aÈZv @@@@߸hè›s!€ € € € ²\4 ÙCËŽ!€ € € € à› }sc.@@@@BV€‹†!{hÙ1@@@@|ࢡonÌ… € € € €@È pÑ0d-;† € € € €€o\4ôÍ�¹@@@@Y.†ì¡eÇ@@@@ðM€‹†¾¹1 € € € €!+ÀEÃ�=´ì € € € €¾ pÑÐ77æB@@@@ d¸h²‡–C@@@@À7.úæÆ\ € € € €„¬ Cöвc € € € €ø&ÀECßܘ @@@@��à¢aÈZv @@@@߸hè›s!€ € € € ²\4 ÙCËŽ!€ € € € à› }sc.@@@@BV€‹†!{hÙ1@@@@|ࢡonÌ… € € € €@È pÑ0d-;† € € € €€o\4ôÍ�¹@@@@Y.†ì¡eÇ@@@@ðM€‹†¾¹1 € € € €!+í¯=Û¾}»µgÏ¥×ëUFFÚI�ÇspLöa=DC� pÞ³ÿt»ã333µwî£ÅŠÓpéÒ¥ƒzÙx@@@ÂA€JÃp8Êì# € € € €¹ð[¥¡[=D Q.ì™@@@@�B)@¥a¡<,l € € € €'ÀE³gÍ € € € €J.ÊÃÂF!€ € € € Pp\4,8{ÖŒ € € € €@¡à¢a¡<,l € € € €'ÀE³gÍ € € € €J.ÊÃÂF!€ € € € Pp\4,8{ÖŒ € € € €@¡à¢a¡<,l € € € €'ÀE³gÍ € € € €J.ÊÃÂF!€ € € € PpÑ·jÖŒø"°{÷nÍ–––æËÌÌ6{öìѾz<et4/vasà}ÚQ÷Y%2Òî¤FEEù´ f ÷¹%66V;ì>Ä˞³Ÿ¹ÈÌÌÔäîsKLLLnfeÚ°HMMÕ>§¤¤(yV »ÃŸËNNN>8GFFÆÁaÈ.à>·+V,ûC¹C¥a®¸˜@@@@�Рø"ô�1{ˆ@ˆ ¸wì¹ob‡Õﻓõ<¡ÒÐï¼!¶@·jÌ=g¨4 ±ƒë÷ÝÉúÜBM�ßyCf�n¥aÖç–�Ù5vÄï^¯WËtÏÞßú�7Äèž!î«gKˆ\¿ïŽûÜ’÷ÅRi˜wC–€ € € € €@H PiR‡“�A âââ´›n†Ãþ²�¾ ¸õîyB¥¡o†á3WÖ³…JÃð9î¾íiÖ³…JCß Ãa®¬•†¼c ‡#ž—}ÌúLÂÙ’Ép˜×íÇÐ=g8[ÂáˆçeÝó$ïõ†Tæå(0/ € € € €!(ÀEÃ<¨ì € € € €yà¢a^ô˜@@@@�à¢aTv @@@@�¼pÑ0/zÌ‹ € € € €@ pÑ0*»„ € € € €@^¸h˜=æE@@@@ ¸h‚•]B@@@@ /\4Ì‹ó"€ € € € ‚\4 ÁƒÊ.!€ € € € �.æE�y@@@@A.†àAe—@@@@È‹ ó¢Ç¼ € € € €„  Cð ²K € € € €äE€‹†yÑc^@@@@BP :÷©ÐìRzzº¶å÷…+”Í×/4Ûņä¯À‚ß—j�Ž­­ŒŽŠÊß•±ô`ÈÜ¡=øã“—•£Þž üê§ÅÊ¿6ïRz‹UPÖjr²²{ß[”·^ÞRY.·{ö,¯)Ÿzøyå»ßü¬\±)YY²šò¸ö=”WªìÛªœ�×­� äÛÙr`¿35°uæeŸ‹ïV~¶¶¤²ïg딯v‹UÒ‚F ÙÞ{|ñÚKÊ7>ú\9ã�ÕÊ�;Ò”EÊÖP6j{ºò²›oW^Õ¾²2F_Gn)ë¦ëÁ±#_S¾7išrÁÊõÊmûl¾„ªÇ([u¾Pyݠ땧׉WÒ‚@À¿g‹w�vyù×o+_yë#å—3æ+—®KR&gÚÙR²b-åqmº)/¹é6å•'ÿ÷¨Éh.Øç�ÝÚßïl§ìôè徸ó”ã¶ØyuQ1­Ð ØoÁ›ç} ýò;Ê�§ÎS.û{«2ÙSB™Xïå)ç]­4°§²Q �òp-C#—<~’ò¸Á³”öJöŸ-º±&¹w®½¾¿)=þÓ«'ðïÙ’}Gì7 _½®ùºý¶5uÖoÊeoSîIµ³.¾LåuÚYúXû£¿Ò$a×ø=1ì9;Œ € € € €ÀÑ<«V­Ò‰‰‰GŸî(�ÆÅÅåÑð|È­1¼ÿ±W´ûQQvevØ»‹â·–awkçMüX9fŠ])_¾Ý«L¨ÛBÙçú ”]ª¹×ÈíN̪¯Ç)kwzWï-¢¬uÒÙÊ;®i«¬kóîYi÷mÞxëKå7¿oQ&ÇYýQó³.RÞva}eiON¦¬«)·ø„òöå�”/¶Ú¨ÒûoÙ’¾­¼ú3»Ïüä£]”5¢lüîV¿pù v7éÆQý•�ŽxÇIÒvï#£´eQ‘vÜït¥ ;ç@!ÝÜÚ¬”””<®9ØŸyö,²ŸÊ!}oVŽœµY™awAK$ÚÏEÍD»�ž¾i¹réß»l8"VYý¼‘ʯÇõUÖ;Ìm0û9ÚñÃ}Ê®g=¤œµÃÆD—¬¢¬W«Œ2}ý2åòÍvÏÍWOyÅÛß(_íYUJ÷‘’’ìy²D »›Üw˜óçlÌ�æÝ®¡¹Ï_¥¼èŽñÊåûì̉ˆ´W�~aPièž-%KZeeTWˆÛóêêI(¯0B9u­óLYTÃåjÚsKçÅ8iÅb ¯ÙîÔjDUÐp§Ç¬ñ“ÛŽWÚÔ[ÆF N1@yÕ•Ëöعታç“êµ­r¹LŒUýµd…r«sæxJÙëþà‰_(꘠ôè+TÚÖ­[µ+eʘ€Ç¼{æÿ³%sƒñ»zÙ+ÔSÓ×+S�W•ørvîÕ«Y^YÔ»S¹vñåº]V]m¯PÝ_²W¢®²w›‡yqÓØ`k™™™Úä;v(ì§ ˆ[<ØóÌö¯oR¶9ãåâ4çU©Èy½JÃÔÔTí—ûÞØ}ߢoƒ´y·ÏÓ–�ØO9ä-û-u‡ý(DÄ”²ŸôÚ5ìy ~Ÿ=?,Yf¯/ÉΣE�µw c¿¶w¹=*g7j¯V?j¨ Fx÷®TNºÛÎÌËþ7[ùÉí·+Ç�mÕ¬½+f™TßÓ \ àÏÞMöþdàUÖ+ëŠÚ­•-·Øy2g�‚V¨¼{Wkû~œ¶Ð¶²a/Å#ٻܫOo¤,³¿�ØÊ wüú†ò† ìÕgìBû�éº;ÏRž2¦»²Ô!O6ýÖÍVå�é±Úºî/ÛsÈûØë-xòçlq<Ò—è¿Q½ìŠÄÀÏíÌ)ÝÊδgþggãe'ÚµûM‰–3~?Ì™S!€ € € € 6ôiè·C½¿Æð±—µÄ´t»ûÀÐk”11Ñ~[Ç-(c©Ý¡íÿ”Ý�ôü¹Ê2“ÿ§¸º›òÍ*Ý¿ÑOÿý} ÷yµ¸òÁg(kæò>�ÿê¡;•ß¶yPùЩÖÏÚ!7~ô½µìSÚ] um탖vTŽdõ†ÞïÍçÚ/ë*Ÿnu •�Åy·þ á¡wÿ¥ìÑß*FN°^–{ £rÿ-çäÙ¾»ŸõMÐá5»Wй¨B-]_3ŸªœÐðåãÝœúÄôÍþö»‹5êû¿•©Å«*;ö¬¯\?)UyùÓç)þS*¡ïüÓÜ~-ïyx”Wº¤9ßq³UVsÿGþ‘q—BŸ†î'¿­[lç|©úµ•Å÷£åp¥(gÜvœ²ÃSË•qÝí¬^;ñreÂþ¹¬më;ç+ë\6^¹§‘ýDÌœû°²eö¯Ýs¹-ó‚±[”ÇÞ=K9ÿAû9 Üs–V–o-”ú4ô÷Ùâ §Í×�´o¯¼kÖ^e¥Î÷+ß{ë2å‚^V1tÃ÷ö\JŸ†B¦–¹I[»d¹ý×­WFy˜—ww2ëÿGÛ6V�cO%'ްÚ�é·Ú3RÖ¹¼Ûí™gé¾êÊú‰û E4œ½y7¼ª‘gÖí¯œ’b¯¶ƒgþ®|´eh<¯hW"B¥OCÛ—ˆ|8[œåæ,R¾Ót7Ö?Mùü_ölsÅ'땯Ÿ•ýEK£ƒ¬…TŸ†Ž}€ž2×jmc/´ºæÞíLèûÁƒÊô«®P¾‘l¿ÝЧ¡ yK^m¯/[*6PV?jA×Î�í÷£zç½eÓ—é§œ´Ö^GNÏú4à¼ksV�ï÷…ý†xÃ×öªô\Ç£½i‚�l¡Ô§¡{€ü|¶Ddj±k^>SÙäš/”­îS~óµeKû¥<Œ}†ÑÁfW@@@@¤@èÜø ¤Ú¿Ö•õ³’݇¼ó öó:½ZãÖek”»kž¨¬™¡\¶n›²bÕòʬ÷b¢*'jL⦥ʵV¨Q+Öò�–bK[´¶¬²~-«Ü_ÒtÈDÎ7‡™ÒjªvµÆÖS>V~¼ÌêÒ'ü­<ñJ»[èÖªúPÃfXáÆæÝ•Í›Zá_Û1)¿ûÛª`zU±¥å¦Ù2×ñŽò¹eVéðà¨Û” c6*'?ýŒrRšÝü\_ùÓÜ£?l°U[ ¹ÿyåS/ÚöÜzÝ%Jê …öÍ~"«4¨�‡XMslc»[±L™¾Åªh·Ùi~°ÒÐ>Imúäï”;½¶äã{]ª\—‡¯ÀSqÊøcôèEÝ¿TÞòØ+ʈj§+ž=.ËÍ£L«þûæ{«“:éšZʘ(ÛôSÛÚ¶=ùýzåWQæâ ·×*&~ž½ZyÌéW):ž«¯ìzfSåÛ/*ò½¥¦nr²Ý2+U©æð8&ß×Ì BIÀJ “¶&)½N½oty«$*›õG"}©ÆüüëN›&²œ²Ek+4²ªÝ#·¸æ'êÁãc_VN^jÕ¾s·ÚºŽç“+¥¬-gËþ]³³£Öc”ŸdÝÙL[‚ׂê^{åݶÍ-ê°'”ò­‚#ëSK® 2ì™jÛçrž‹*–ÏÓòr½Ì�O~>[ì IúöuåGËí�RdéŽÊÓZZU5-è|zHùýÚñ~ƒí·†ÝÇÞ¢ÿ¤ýÖPÖû¾2ÍymÒ-ļIVE˜ä¾h”¬¨á ñÙvÑ©4Ü”¥Ò�W–lFa1"'gKúV¡üÉb{e‰>öBå%-²\y 'ÿï$ïäüoÊ@@@@j* ýpøÜÞëîb}p<à|z²û™¹�ùôäÌm¿j½Ï>üµ²Xj¸‡Õ®¯)b÷lSS¬j/kó:cR¢¬¼°È!gAŠÆ,ýØ*�žXr¼ò®{š(K¦<.'SÚl•N=UyÂï(£º·RVȲ´Œ•Vß4u¹Õn6X9I_jé¶üä2öè’ ÏUZÕâ‘Û!e1Îýðí»mïÊ&ؽ…,+Œˆ,YBcJEÚòó¯¹Õ…ƒ‡=§U49Îj¾®ê}Nþ­Ž%‡²@æ_Ú»/&[iûºv�­¯Ï’ú:Ø2Öjpõ_Ö“iDTUEÍjG¯2´ =%jØ”åìî‘wÃ*å²UÎ*ò¤ ñ´ ÈÉÙ4;Æ毀wÛWZÁ¤™öjè�>Nyj§jʼÜONþñ3-á›mÖóTT•NÊÓŽãùD Aßòv¶Ø{´Œû+�M+(§}ô‚røã(—Ç«ì;r„²Wù¬ï×4‚”¹~Hž£ý|¸Ï0åŒôæÊ{_PÙ¾¤s>ì9ä=¾ÆÓBEÀ~WýsÊçÊéöÊSºCgåa ޳ôièÉ\£i>¾»�òóµ+·î±÷®±%¬R¾F£ÖÊÓλDÙ£•ý…™ý6H �œœ-ö\±ýç¹Ê¥vF•jnWê&ý¨õàCÊ‘g(m°¿•Œ.m¿15lg¿¡÷-×­7¼÷‘Q“õ†Þjù/ Ÿ¨ÜÝc€rè‰ ÊW‚m{ªT+«Ü¸Ò>‹*-®�»÷[2Öo°ñåíL•ýIi^5å5åC?ÖTÞ~Oe+lúWËù”ÎŒ1Åô_©¢NÅ_±¬§œÝ1X8íeì¹7)_;ÃúbÛ—9Ó¶yâÃo+¿Zx–ò˜:öH¤óiˇô·åµ*‰]»liû›§¨J³úÊ…;,½úÔÙKÎÜ»OÃÉÞüº›½oŸmÏ�¾¨<¶~-åõW] ¤!�{»c¶eÒ0åcÓ’•‘Õ®Rº4[5о$�OÚçÜ��,¥á„’ž ôÍ‘šÇ™Ò-$þ{›¦ÚâÔirÆn�Ÿ-…{7غ€ìÖZf>ú€r¢ýèG”;g�òêÆY_£m|.Zêïšøù{ÞP®Î,®l7Ð^Ù;æ]„FÓ‚HÀ§³%s…öð©öVExÛŒÿ½‹'¾ºÆwèó?åƒìu­sm{çF z�Ü>x­/æiw÷Q>öKŒòä'^Wm¯¤…¶@Æê7µƒw=ÿ›2=¶¡òšÛº+Ëdÿ-ͪ×#¢�ÒjpÒhËôIïkäË�S6¼ÔžaÞy¥²±ý2J b�œ�-Vsºj©½ú¤{í÷ ÄÈ™Êþm­’ý½õ”ÇŸØAyVk»n°áW«@üiâSÊ«'Û•o^ýZùÖ¥öûûþ $¢ýs} @@@@@ÀÈÃ-e'°¿Þð»kz¿óyÁ�xMÃÆ\}¸É}çݵTs¾2ÜëÔO9¤mIešSã–æÔêEÇÆjLùÖ/aÕ ß*'ÿUGyNÅíÊ/>™¯Œkq­²z”]k_;õuå°/­2ñš¡VcX7Úî ;eyžH»ûk÷yÖåhJ»ºŸýF‘FþÓR—iø«Ÿì^b‡ûlÛ*8}«˜Àj º¶³j…;¾]¢ì¬ÕQV,i5’,µž:7³yÓÿž­œºÐî-D´¶ˆðØ\'´¨ªóÅ4å’ÖÝ” b’”3¿´þt6f6SæGs{´¬Qͪ8oèO�a~‡Ë2S�Ö®ö¹ÚîÄþå±»^}ŸXÙ-['£Þ4ûiM³R35ûÙwžœïŽ›2.ÖùIõÚR,â(3ñPáÈùÙR8·Ÿ­ ”€½V®ýà:ååÏØß+¤W°ÊŽ'þw‰²²½tç¾yí³/¿lK6s�²d»Ç•/\×@ɽz!mËËÙb%¦•¶R¶N·×—Œ;7’Ö¯V®Ù´F9môÝ6¼È*†?n¯ný[Ø;=ç5IÿÓ‚J ×Ïö–eËäÛ”ýž[¤,qºý…Ök77TÚ»Z 잣�{ô²[•“·ÚÑn|ûKÊ¡­íyã0­¸½N½ü‹Õ…]j'KDµúu•Õí·Å¸ «†Þ´Ò~·ýî½g”÷?9QùçØk•Ýãì7²y/Ÿ©´,›å]‰w‡ÆÌ}ò|åéC¾V¾wã@e·Nvþô®Äk‘ö7ßÞ˜›ÿ@@@@@ ä¨4Ì—Cºÿó”[½áï íïêýÛ’fNÑ?\¼Q™¶øe�ÑYÖà)­oÎþ òæÆ'+oé½^ùè°¡ÊÑ»­f°J‹nÊ;zVWFgXÝâÄwæ+×l¶+ôw]e•‰Y[t“‹ôí;Ã*+s4åƒ4e¹£^ Ož?KÓÌJ8A9â0å vE»Z;{´â›rNJå})zÉîH÷+a{šP¶–²I+«‘´»ÕÖlÞ*§_ª°æ å½ý§*3ŠWRžÔÁ¹7•å6ƒFú± è×SK«Uì<ž£øq­,*´ÒV¾£êwÆ�ÊÉ›í<ïðȇÊgÏ.¯Ì~Vybì>mŒû€[3˜ªÿÕöOé(:U‡±nÕáÍÇã…J ·gK¡Úx6&€öú¾aÊ@å}ÞV®Šk¦4nŒòŠš>½(z·kÞ÷[ ÈÏZŸ†™uû*Ǽkõ#�ã´ ÈóÙiï‚.=Ýò«^ܹ|šò�LJ(ï|e¤òÚN¿*·MÿF9¤)§Ž‚§ùô<�¹þíá�רóÏê öw9cG÷SÖöé©H3Ò‚C`ïoÚÎç/´W�ûfX…`â9VaúáðvÊú:r‹­b•Ë]ªd›"Æê +k¿{^2Ì~óíØÀ~om~™�c«Ç>¡|ûîÓ•7Õ¤^J ÁÓr}¶Øo4{÷$+½ÎoK1�o×ð{o]¯l‘½ŒÕé۽ŭ/êÑÁŽSÞñӗʱŸÚ5–˯NTfÿ�K#ðñ“†�]F@@@@àhTM'��¹õ†Í×Ïãr²Ï^¦ëMùE×ì�~L•öv—÷9'7E=�¼áÕ,÷ð¿Æå|Êý3FÕÒÀ5/Þ÷¯åmu…Ƽk7�ŽØ<‰§é±g^Ï2AÛ^6ÆÉ,c5xޡߪ쪢Æt¾á'ÿy0}ÑGúæÊÙV™•÷²k×Ì~ 쟵3„ÀÑÒVŽÓýºØýöq«‹*ÛÜ9Q9þv«º-¦¯Ã¶"e4ºlQç~Ø.ë¡#i§Õ‰DT>ê-{§/�¤v_.Âc=I•ÍÖ[¢=D+¬>ž-…uwØ®|p«ÆnÑò»]`¯õ¿GX¯a׎ûLùè)ö³Ÿë{éNmÑÌ­Z¤ûƒ?*÷T¿Pùê”—”çæ¯4šùp¶²ßöªT²N'åµ#í ,»³±ò¢wR>ùÄåõo÷P½æHÐ ^À·ç�Œ•Úò1WÛïïo¬¡ì7ñyå…ëç%áè…@Ñ55M�šÎSúüµ^õ—õqÌÑNqï®Õ6¥Ó“iDT5 ת΋‚±þ–§³¥ðï[è7«[?Éþ:¡ëEÖkÏïM”׿?Yùô™•”¹¾{ìMÒ\Ó‡�¥Ú½÷”ŸÒ4¿¤Ú½´¨ÚÖgâñås²2MH+0?œ-¶í¬8�Vk¼îë5¬ëÅÎë`ts ßö¡=·<ÖÙ½¯ÁÜ4ï6M=íž3•=™¥L©ßWùöç¶üókð–R AÚòálÉ‘„½úìÛ»OéÖtx¢¬ÿ¨h^ˆr¤W@åýy Íj¾ÜúoÚ ¯_m™³æT®YíLlÏ9Å·Û;|j‚r¦ð©vÿ¢UþïüÓ•·i¯ •{¼¨ü|ìÕʆùWö—¹QËÿ{£UOGD–U$&ò;Ÿaêæ‡³ÅžŽ9Áþ¢¢¨Çz'\9k¶rC¦Õ2W=b±œ½®_·A™áüõEùŠVÄÉõXø54ÂÇ € € € €U€ÛÂGåáÁ`ˆª×Y›ÿèó–4 §@Êâ×´a—u½VùÑZ»ÚuÄdå�W×WN›ÝA=é\«J|åå¯ï¾£üeÐCÊÙ?&Ü©øüÍ�õèúLë¤Z·3”ͬȃVHüw¶Òd³ü$`<M¸NÙõR{6X\¤­òÎ ÖGêìy&×…\^«_þv¨ScøÄ g4 |oʳʳéX ÁÚòálÉ9EæZMûñøYÊT·¾£™Õ¼×¢kºœrJ?=Ä´F[½*Ý2GmÏ»š¬g¹‹•ã#ÎSŽÛò‘ò¢b Z!ðîš§-qž½·2u»²F/{=úüõÞÊzÙß—j¬šU�&}õ–òãµVAYº½òÔæ¼ÁC!mþ=[JžÖSûÙ¥ôåøì/!FÎë§ÞÒ~W:LÛ=]#'|±I™i‡ÑæÄúJ.“ á`£Òð  € € € € `\Bå<@ @`ß—µÖKºZ5ÐÄõ‰ÊîÏÛgŽ»¶‘Ò·n^Š�z“æ½®ùXå=sŸV^y‹UmŒÒîÌ×)êTe$ixÞÈ«”7�Û ôµ*¤ë¯;Yy„{pz„V�ùq¶äþ°îü°ª±5^£ìrùåÒâ”~:Q9´�õ—šëÃÌÍšëëÁV-rÞ«‰8~ â£ÉO*»VäÞ³‘góïÙbÕ=›ÇUÞþse¯óÏRvlZIŸí´Kß:_ãß»¯¿òޝv*#Š4U\sýiJ È ¤P5ž Õá(ÜãÝ9Gøx{Õ¸ó»Ýʺ½ßT~þr/e­\üY¿„+ߺCùÔæ•—÷ì¬l^£„ò�¢ä4{µúùý‡•7Üldz:ÓÞM7¿Éæ=;!ÛÓ�ÆÒ ZÀßg‹í�§œýÖs—óДûì}Ë—X¥aÍ�^Rökbï…Ü÷.™Ûí•è•k­‡Í—WÙ™V¤™½ƒpŠo¿‡iÖ�m¼Û ÙCËŽ!€ € € € à›€gÕªUš31Ñê\|kqqùØ-�o›Ä\ PÈRRRò¸…AüÌ“aŸküD»ÆÊÁ?9Îçz‰·Û¯9»“cEâ�ïüAùÃ�Ç)³ÞkÝ÷Û³sÎi·*¿Úd÷Í¢JUU6¨UF™¶~™rÙ¦=Jo¤Õ€œñüTåøk�UÆê+TZR’ÕT–(a÷¢££M,([>Ÿ-‡1É\¡‘Oµ·óá¶K*û}¶Nùj·P:;´C‡4÷l)YÒö7**ëÏÓ!“òo¼›_×v¯ewÔ'Ù�x„'ÆÞ¡�ÍñEVÖôWOúCùT{{FJù¬¯²òÙ¯+·y­R#ºHQe\ŽQÄîù¿µîMå¹!ñ†qëÖ­Ú—2eìÕã ÖêŸ-ö»aTeÍk¿V¦8U­1%«h¸N]{ *ëT»ïÛö—†—.µg•�iVŸè)Z_yÉ‹Ÿ(_½¢�2$N“ˆÌL{ýݱc‡2!!A¼­€Ÿ OÃÔÔT�î{c÷}Kpž-ö¹Ø?ÝÑHÙî {¯›á±—Џxû;–œ*zl‡ÿiú?&õWVòX¿„‹³ÃÆCf+Óœe-W]Ã5«Øóp|„Õ3®_¾ÜrWºÒiÕdÍ®~E9þÙ󕹯pÔL…´%''kËÜWŸøøà­‰Ë�³%Ë!Kµ3ð�ÞÝ”×¼oïlS#í7‚ª�ìü¬¿K¹ê÷EÊ¿÷ØsutõîÊg'¿«¼¶‘�±¡ÑÜç¯×^m}k6lÐŒ9ûýÔ·50 € € € €¡@Ð_¡5›Œ8û”{÷Ù}­ý÷}2íóÞ=–9köÔ½7-˲ÌV¤ñMúî“ÙV¯ñÜðÊ7§ÌR.þm½2ªTeÓÓ/W^qÛ]Ê�¬$”«È´{AÜò÷l b6=»@šs¶¤ÿs?ÙëŒÙc·ósÖ"­~!%ãŸ%Dì³1{÷ÏmãÓ÷Y£Õrä°eØVY­­P øùl±ŠË Z}Ð{ûÞP~8å{åÜ?­ögíŸs•KRmš¸öùÝ•Ÿª<«Seïkû(»Ö)¦¤Rž é�)Œ›µo¯=çïo^{îOI¶W�œÿ…QÚ>{ÑÊt_ˆœºÂÚWØgm¿²oŒrüÔŸ”¿.Y¥\ùÇeZ”={$Tj¬<µ{Wå…ý(/ïP]:5cÚ™�kþ>[²ÅÖÓ7W¼c¯>Ç÷|Qùôè÷•ß.ø]9w—½•®ÞZy^÷¾ÊAƒú(ÛTäâ˜Ó¨4< £@@@@gú4 ç£Ï¾#P`aݧa�©‡×ŠC¤OÃð:h¶·¡Ñ§a�ñ…ÙŠC£OÃ0;h°»¡Ô§að…Ù*C¥OÃ0;l´»¡Ò§añ…ÙjéÓ0Ì8»‹ € € € €@ øóä@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%ÀEÃ@I³@@@@‚D€‹†Ar ØL@@@@%¨±r.�¢I§>WY¹’“l§ð!“ÿ×7^M�¼b†òÅ—¿PN_º]™WZY«I'å-·�¢¬—óS-m�¦Ÿ6׎{»¶ö³s„=Ñ#4@@@(ìùue§°ï7Û‡ € € € €GÈyÑpèèÌ¿¿ÓˆÇF®T6½ãNå°c¬ækïæ¿•Ë“Ë*ãóV"¥%ä¶y*j–²+æ)g$µQžU&ëFX-äÜï+‹W-¥ è•Ô¨Zã•Ï=§ìkå_*éûT9`Dªòæçz*9%[žHÛ®üÜ6[v¥Fu”Å¿Xª\–a•†��µg¬Y¨áù)Ö·àŽ_lxC/«4t ÓW-Óð¢âVyN¢¶Ñ“õi¹š§¢UÀ=ýaGe¦×*ö6NzFyݲS•ïl¢Œqæ�tríx�($Ídj^0Dùâ%Õ”íþ¢ÁHçøyCmÞ �šZy¢œ>âÔ·¾ý¤�i›;_«s_eeÌî­Êåk­.²Âþ�Ó`ŽZÊïßiº—§£lC¥aŽÌ˜@@@�Â+àŸë;…wÿØ2@@@@È¥€¿+ “¶i¶•²Š³“ŽKPuꕊV­£á²ú²fÕa‹ß®|,â å˽­ÚÎ-lÊ\k=¬ÝøÀåÕ/YˆM3U>:`޲æùqÊã(Wí´9ª´9G9ôú¶Ê1ŠÃµh[{»ã¬–ðÛ­G¹3Ï,£tKÙ¼»ÿÐð7Kk+Û5\¥œ«¯ƒ-Ó¶dî{ã”#¿°zºÍi±ÊJͬÞíúkOS6.aKJ_ô‘²ÿ{¶…çW±)ßû~�r›×ú‰k~¾õ­7øœšJ«Ö;´¹U„®ÀþbB§Ð.2Ê®êF¹$[‘w÷³zɯ PvÞ¿ t Ï|j¨rBCë5ïñn%•çóvç½g}5¾8e¹r«ÇÆ7:½—òö (K»:ТkÕ×`£”ÉÊß×Û‘j\Õ&Ú´ÀôROl¯l=×* ç%Ù¾W)kå‘®PîmÐMY×ÙZïž•ÿÒ»Ê÷çÛY‘Q¢ªò´>—+û·6ÿ¨›wÇ_(Ÿ|qªrþöheÅÆ¶–V©Gº¢mÛãqÊ£œcé {<®•“šÂšm¿Û¢“MàÍÞWNYdý÷¥—¬­ìq}eïÆÖc '·ÂšÇ‡æn¹{d™Ý¶ö¯�žR>å5ÉÎk?V¾23EÙeØmÊܯœÕéQå°“í<ô±e˜À¦å”ÍÛÔT–)✠E¬Þ°™�>мvì¾õmå[?Y¯…›vÛv–nxªrÐm]• �^&ï}Á~B×ìsÕDeåÓ¯Q>ÞÓŽûþs[C4@@@�#]— †mg@@@@@ ¬°Ë�-º¶õ¹ÖÆ;F9ò�êÊ›/8AY»D^¯Nzwÿ¢å|¶äJåˆ.S–ß·Dùâ�/+ßžkk¹«­Uù¦eØn6>¹¡rÚ‡?+ןqš²²Ç©t›mR+Ÿ¬ìê±z´•†ö覯ßR>6ת¥î~æjeÓâ»”³_}NùÐH«˜9¨¹ÒjÕ""Òü œÕf rÔ•Þ•ö™ÂƒïùTùMû”geÿðf�õg³-ßúí;ÊÇç$*ï|Îj¾šD®PŽºÛŽÎ¨Zw+·ÚÿÙÈÞßbki i�ÍÊi‹’•U±Ê²ŸXÅYÃ3M©Õ®ʯìQž}ŠU¨ýùç&eý66o¬w¯rök¯)?-r¾ò¹×›(Kþõ¥rèV{øe]«”<½ØŸÊWžš®Œ¹l°ò£SÌ3ù7«°|ª²œ­0�Í46ϳ^ã°Ov~¿®�릌VÞ<ÆŽWÇ'­²¯†¾ ¾™öŠ�?Qοìrå«×Ú,mSõå—cU–'oU·/�š¢¬Ö¿“²M•"J§æPÿ;ÍSLÿUki…÷]ROY%z£òƒûG(Ç|×J9âL›÷îK¬õ’9­•¯¶Ÿˆ#ü4ê € € €v�¼^Ë+ìûÇö!€ € € € €@.¬äÊŸ-¾�–6à¡~Ê o[mÝ]¬w³J'Y¥ÒÕ—µSSB‘ûUAóœr¦U2Vˆqfwª¥Ú6´žÝÞØ´Kéuj›©“r&ŒðZ­YlÃʶÛ'(¿[kµQ—TÝ©üaºUÕµ¼ ®2ÖŠÞ4ïn Í™iÕyõÎè«lRʽÆZJÃ-{Z \•­Jqn²ÕUuÔ—ª´J5VvïdÕaû?'º†�i^Þê7lµ-‰ÈïJC¯ÕΞ¾DY«›Ue6)i[­ìÚÖj"‡Î]­LouŒò�“Àc%w\Eå«¿¯T¦žh5nóV×T¶;Ö^“�Õ”/ülµ{{ÛYmÚoËíè4ígózÒ~W~3ÛÖÒõÛ÷ ÑÎ1©ÙFÃ�ª~©œõ§õÓ×9Áz“ü9öå]íË)Ý^úb�ë á.õ¾·Gõå�Ûø$-¦{]«¬tÏ�*-i¸Æûk•­¼/•†¶š5?«¼ð‹([¥ÓdÑ‘ÎuOg®Cgø÷w§2ñ”Ö{õÀ3?¬W^xªÕâ}›dÕpW70нÙ* ·ï´ê·2 VouȺK–¶ñ«éÛ¾ûŸíõ”°Z¼ý%‰Rs?9Ò¦Ét*Úœ±~޶@ öZý×Ö¦½`̃ÊóßRìoÞ ïm±Oy¸Í1ÏÄFu”Ŧ.S.úÃöqaõc•×5ƒR�­>±ÊXë‘ð·•Vw¹(¾®òŒ 6¯w—Õo&íµOÚ�9t¨òÃ,p™©öÍ1í¬Ò03Æj9w—ª©Lp£¬y²k÷ßÒÖX¬”-ÓŽâÁæœ9QÎ!9Dïà‡ädšCçÈþ�íd•.W*ŸèYEéî´'ÒJg‹;?‹œ³¬xŲS*‹›¾õ‹-¯e¶íeÛÓ¶çåo“Ç)¹÷MeÄÓý�bÿRNygŠò‹EIÊ4çSªS·nÑpÆ)  € € €„ @ÖK5!¸{ì € € € €äV _* ³nDT ë—­Ûå”__¿P¹8µ£²šSçÍøw­[æ«kËRº§ïÜfeWÎLFäúÿ(ÍÑ �õ—ñÌlå´¨åÊäÖ+ëÚƒ¿Yhûëݬ/¹ß·Y]ž×ù„d·üË»c»Ælõ:5q%œqV†µÝiœïýnÅ¢ÓçÝ!…•^«ÚÛµ+ýŸ59Ÿx›PÂêêZŸ{¿rØÉÖ?]Î[t-«m˜lý~53YY¡iW¥Û¿ž§¬U6O˜¡œ>Õ*+w68MYË1ôÄ›I©øZÊ~ÿ¨<·Üá=Ò³Oæ-¶ËjÜv8'B%g Îç/ïIöGmŸí¶œœ:9>°Tþ�Š·½NH(©tw÷ÀB²ü,ädkÌæŸÿ£­b´ñ™g+»~ó¼rþ*;ó+üüŠòÍíÖËáÿi£¬kÛ¹øÍáÊÇôeíðÇ×}ŒD@@@�` Ò0�ÛŒ € € € €@> ø¹Ò0uí"mì¼=öiªõ«9ý²EZÿzN�¯\U±Ž²FŒÕ%%T(­Lú~•rS†U¥UŠ´ÃßYµß†Ì†ÊühQµ[h±'G=­|öSëÓí¢G*)£œ > üÓœJÃVí­æî�IVs· ee³â¶Gs&LW®kÖMÙÜ>’7ÿ[¬©V,¹AùÇRë™±s3[qúßV59ua†2¢µE„ǪÿZžlÚo}]9´ï e…3ì{þR;?£ôEC@@@�àÈz%(x¶š-E@@@@�|ð¬ZµJ OL´î|kqqq¾ÍÈ\ ¶))YÊ}Rà™Ç'¶0š))É>Ò¾D «a�ŽösY}9†Ç®ºgKÉ’Ö‡oTµÑáqÔ}ÝË­[­Wß2eÊ(é·×WÅП/3Óþ¾gǎʄ뗜†À‘RSSõ�ûÞØ}ßr¤)�@rr²ÜWŸøxû;0GpŸ[¼^û¤ßÚ† ö‰Tú¦Ç\ € € € €„¬ Cöвc € € € €ø&ÀECßܘ @@@@��à¢aÈZv @@@@߸hè›s!€ € € € ²\4 ÙCËŽ!€ € € € à› }sc.@@@@BV€‹†!{hÙ1@@@@|ࢡonÌ… € € € €@È pÑ0d-;† € € € €€o\4ôÍ�¹@@@@Y.†ì¡eÇ@@@@ðM€‹†¾¹1 € € € €!+ÀEÃ�=´ì € € € €¾ pÑÐ77æB@@@@ d¸h²‡–C@@@@À7.úæÆ\ € € € €„¬ Cöвc € € € €ø&ÀECßܘ @@@@��à¢aÈZv @@@@߸hè›s!€ € € € ²\4 ÙCËŽ!€ € € € à› }sc.@@@@BV€‹†!{hÙ1@@@@|ࢡonÌ… € € € €@È D‡ìžårÇR2l†©+,'.¶œû·åúÝ–[“-˵¬TܲEeË ,O­meIC@@@@ ب4 ö#Èö#€ € € € àg�°®4LÏ4Í׿[Þ÷�姮І×ÜGÝüeƒMñòÏ–níá°Ž6ܯ™e4c��† € € € ”\Ü ÊÃÆF#€ € € € �aZi¸z‡‘žûž¥[3hC¾6·ßÃk&Ùü#çZNèeY£”% @@@@�à Ò0¸Ž[‹ € € € €@¾ „]¥á¬ufzö8ËÍÎg"Û�ÿš[·Øòe[â§[¶®bIC@@@@ X¨4 –#Åv"€ € € €  �0ª4tû1<Ë©1Ü’5†Y�˜[ÃèÖ3Îéo�пaV†@@@@ ³•†…ùè°m € € € €€@XT¦gš¬ûYÉù]c˜õºõ†ç½oãf]iÍEZc !€ € € €j.bêÃÃÆ!€ € € € x�°¨4|m¾ÁºŸkxâŸ×Û:Ç8ÛÐÿ„À¯Ÿ5"€ € € € �;* sçÅÔ € € € €„¼@ˆW¦dؼﻂ?Žî6ônj[UðÛà € € € € p$* �$Ãx@@@@ÂT  •†IÛwŠyÝúÍÊä½û”�GY±|eµ*ŽÑ€ZF† ®XµN™š–®lØ –Ò�KÿÙ¦®°I6ìþÏ �8Aå:öÐûçZ.žhyå2ËܶõÎ6|³Òæ;½nnçÎ2}F’¾™7ñcå˜)¿)—o÷*ê¶Pö¹þe—j1ÊÀ7ï®UZéäq“”fýßÉŠˆ’Õ­ÀòÒë.Rž];ÎF‚æÝò“¶â¾[ÞQ¦ö~XùHçâJ;#Ö¼;´ªOî½[ùô;Ã4ÛŠ²§ß¤7àe@Pl„ýïÝ£øó³�”£>±ómÅNû©Œo×O9ö†ã”s¶iÅ4@@@È7* ó�–#€ € € € œ-`r««WM”UÉÅ”ûRR• —¬:8¦t©NIMS.Y¶FY$Î*™¼VN—ë6qq®g98CË66øfcËEV"é‡6a‘-$/•†Þ�f²`K5e߇/VžP&ÅÆŒ}Q9lô�Êf´WVhÉœV‘¶K±»ìIÊ;Ÿ ¬]lŸrñG£•CF~¯<þÑÎʪ{±Ú»]Û0õÕo•—*ª,§¯i™»µÚ¤=U”}ž¤¼´ú?4žH;„ÿ|¯oÚ2µ¶ÕÛ±{t¾U;Þ<|¸ò„ N­¨óøSL –žnU™QQtêpGpkÕݳå“0�ýiiö®Ã=g@Aàè^çÐ=[rþ·/G_&�†ž@f¦½�r“ç–Ð;¾þÝ#÷ Éšþ]>K %�¬¯><·„Ò‘Í�}qÏ�Èȼ^QÈëüù±o,@@@@ P  •†nß…Y÷¶H\¬¾-V´ˆ2%Åîó»-Òéë°jåòúÖ­'Z³vã�sñÿÜ¿s1ñ¿&M¶r´ˆ¾c-�?ϲ…EžÚ¼õyš]3{¬À~×d]ŽU~5>ÑjÁÊü´E¹ÅnmFTx–§Œ•eöêik?Ьž´nóºÊr_YoŒ[�ŠÑªøÿ¶ú­Ó?T¾yвgýO”ÓôU Ík•†ÛwY_ŠuËØ‹Š*¨ê½lûŸjeºM±§ˆ ê¦l^.˶9?¡Ùæ Ј}û¬‚• ²qíjRR¬ Û­ŠŽè‹]К…wb““­#^Ζð=r¶çîÙâ¾ål¦ _÷lÙ»woø°ç9pßÓº5ïœ-9 ëIÜg7Â�Ï�€ûÜŸƒi�6 •†GÓá1@@@@ÂP ÀŠ/Üavì´ÏfÝ“luC5œ¾Ýcc–Pº¤rç.›Æ·æ~f±oóþáô?è~˜î YJ¬|[š;×zëôÏïÍ©žsúÜ]óD-½Z¡¹œ¾ë/mÏ—ã±}ns‘¢^ÀëmÕš7iž_ob½îi®,þ¶ó‘Ø&ôÿ™væ'ï^®|õ–!ÊÑέèRµšh¸×UV´yFm«ÃõÓ ¨%å´e¬Y¢Iÿ,nÕ¾U'Y�™×üh…»»b+);^~‰òÊVö¹ç�?¤Å‹[mf\œÓ»¢†hNÀíIªD ë'—ڱà 1î··—¢E­—[úKýÇ…¡Ã ¸gHÞïÛnÙŒ 5ΖP;¢ù³?î;·Ò�÷·ùc:KukÇÜk)11öÙ4Ž$�õ¹åHÓäd|¡¹¼”“�e@@@@È�¨4\¾j�ökóëá.Òù|ØU­v)Îéßп»¼Õº'*DmK>lOÆÆŸ´‡/|l=Bž;´™²DàËÒ²gþ=Uß ºÝú ü}·u¯˜ÐÄ>1ùÖ>µ•VÅQ Í»S«ý~Ì—ÊŒ×)O-kL³"œN5T -Ö* ou¿2³˜ÕÕÆgìPþöñëÊa�ša•ç/T6³Î?Ú2“¬SÏÍkV+לc�h>s…U¦-üT9ø±÷”_Õ»VÙ-¡@O8m @@@ü-@¥¡¿EY € € € €A.P•†ujVš›{÷Ù§[._¹V™éµª´JË)ýÕÊ:…mì#j E+ç×B»Ìm¿j¯ž}øke±Þ7({Õ(€ú/ÙÈʧjÌSc-½)V­¶èÛ�”ßù¾2òië ¯¥_´À£6«%ÜþÓå;i§)‡w(­ôD¤+ ºY�^‘’Vc¸¿E•Ò@“¶�'~6Q¹`�ý\4«ðëû™Î‡p×l«µ_Ô®¢²ˆSPXäØv>µòÊßWf(»%üY§Í !€ € € €€~%Â�Û΢@@@@@  ¸D(¾ˆ}þiÙ2V]å~J²+ +Ù‡¬FžJÃJö1ž~hÞj)/ ·J´Ý=(‡ž˜ ,l×€=qVÓwìi'*›½kõ†¿­·úµ–u¸¥^+4�ñÅ<åêÅæví¶%nKK¶´Nùñeï}”c®i¨,à ¯UGfzíó°ò¡«O-õ¿[d¹²š¨ünëcq»StXÕ=h^«ÐL˰ÏLŽ.`&m @@@òE €×nòeûY( € € € €øY @•B^§rjÇÎ=ÚüâÅâ•ÑÑV©”’jŸù»u›U3•IÈÒ³›¾÷GkQÙ–òË,ËËhn�§æÝµTó¿2Üú\שŸrH[sKsz‡LSO}²�µ�Ú� èa«ŒK^mÛ¶$2QylÛª8¯}\ôŠog(çyª)o¨ÐÍÒ#PYC4@@@-* Cëx²7 € € € €äYÀ³jÕ*-$1Ñú¡ó­ÅÅY5Yál)¶]µž±\o¢[`Íýç•7ÛÄTíX�í=+Fàß)))ÿ•Ëï ó3O.w…ÉóE ))IË-QÂꈣù¨ï|1�…îÚeµÞE‹Z1|T/Ò¡sdócOöîÝ«ÅÆÇ[Ý4Ž.ÀÙrtu2335�–f�¯óþ–³âèééö×rî'FÄÄÄ}b s�¬Ï-¾QlØ`B¥¡ozÌ… € € € €@È º·Cº5}Ã:Új¯™à•²ºû;Ú·Ô‚Â7 € € € €…R€JÃByXØ(@@@@ N Ä+ ]Ø~Íìÿ‘s-±?Êh;¡’­®¯³ ]1+C�Â/�¹CÛøÇ'/+G½=AùÕO‹•m¶Ö¼Å*(k59YÙ½ï-Ê[/o©,—ívOú‚û4þ„(³®Nrß<Ö÷ß%ã7+Çö(¼=Õæ~ÇBh?�-‡ŠXïl+>¥|æ••_þø§rÍ–=Jo±òÊZÎ繟~É ¾¥_{e•X-d6nܨ}›:uªrÏ;ºu리V­š’Îîù°páB!¬^½Zéöš‘a�ˆ+VLYµjUe“&M”%K–TÒÂMÀ=–/_®_±b…rË–-Ê}ûö)=�²xñâÊ*Uª(›6mªtû Ö � Ìž=[cæÏŸ¯tû¾âŠ+4L�Õÿ‚ ùo,X }œ5kV÷42Ò~e:÷Üs•eË–Íá\L–] Û¯žÙ'a  € € € €„“@XTF;—F'ô²ÛÒ z"6'[æw+oÃ1áBKwlˆ†¨~gÑ81 ék©>r–Õ÷¥GØr‰ÄZÊÚ�¬¢'}“Ý¥_ü½MùÈ÷)Ç~:Rùõ¸¾ÊzY>0ÍmwìËU¬¨¬˜‹JCû ë�›­Úqo„UƱûÿ´Â&àß³eÿÞy·iàÛ¡]•=ž˜«Üé-¢¬Ø°…òäã­>(}³Õ½þüÓ‡Ê?Øøú;*?›|§²µ�t´�øý÷ßµ?î=|·VÈ­ ©�dgr)à~F篿þªùæÍ›§t?»Ó­÷q«ÃÜjŽ;ìÕäÏ?­ZyÙ²eÊ.]º(+W®¬¤…ƒ€[§üÍ7ßhgÝ*Tw¯ÝºÂråÊé[÷üÙ¾}»†Ý³Å­I<óÌ35Æ�Æ�‹D`ݺuBpŸÐ@Àýó*帬Òð–‘ç+§ª¯ŒÒ-˜ÒÒÒ´ùÓ§OWºÕa¥K—Ö°{÷~Û6«H¥…³€[i¸~ýz!¸=ˆµjÕJÃõëÛ3€[ëáú¸=ÖM›6Mߺ=ºçÕùçÛ3ÆÑëAÜ%�Á.àöbc ѰaCå‘z·LN¶?ûúöÛo•n5ÙŒ34ܽ{w%5ÎBóæÖ”¹Ï'îyå>ø¯Ya޶»ïžîî·oo½l×®];l5¹ãTR›u!€ € € € aTiè�ÖVB1§¿åyï[þl·NýÖÜÏJvû1¤ÆÐo¬,��°~KŸbu^S~¹^Yª¾Ý%+ž½;A�}eÝžV øÜÌÏ•ž²^¿ûØz ÚÑ÷reBö¹4ö?›×zQ?bŒri†Õ5¶`uŽœžX5@+4ùq¶dhïV;•e+�0K_x—Æ<�­ÆÐE(vÌexdàkÊoú^ùËôÙÊÝN¥!Åô¢Ò–™™©-ÿì³Ï”›6mRºŸ{{Ê)§hØýôd ÐÂ\Àí ªS§Nrp{£+Zôð/EŠX¿¨'Ÿ|²Ò­s{µsëUË—/æ’á°ûñññÚM·¶ôèûëžEmÛ¶ÕdãÇ�WºŸ°œ’b½-»çÒÑ—À£¡*àV7ÿðÃÚA÷Û;wî¬a·ê0T÷šýʉ@ÖO`çY"'bþš†JCI²@@@@BD ì* Ýãæöo8ëJûnÌ|Ë{¿³Ü°Û2·­Rq›ãþŽ–}›YòYɦ@C�£ X�?UX�á5ë_îØÆ ”Ñöy”é[¬Np›uvçc¥aÆŸ/kÞ§&9½•%œ§á›ûÚòéŸN…²ù÷l±êŨ(»kèÑ¿ˆˆ§nÈÖqøfÓ‰·"ROšÑv¦¸ÃÎ"(Ü 2·ß±ÄÄDíƒÛW�Û›˜[‡”;ÆF烀ÛwaÖ �´·úí#s+ ³öBu¤¹žn/™Y÷�Þ ³j„çðÂ… µã«V­R6h`ïNÝ*øŒ û; Zx ¸õ§Y+ ݺæðÔü^SixsÖˆ € € € €@¡ÓJC÷˜¸õ€ýO°ïz7µüf¥å„E–óÖ[®ße¹Å>à+¢œÓ…K¥6ܼ’å¹ÇXvªeG‰Ž1Ð@ÀïVR˜´5Iéuª»¢ËWÐpYoúØ“ÚWO¿¤ü%ÅQûº�ÊsËS7&†h99[ì¸W?ÙùÔ¹è™^òÙ+Êÿ:Myiµl/f©K4þ�wlÊÔHû\Ý3ϲy�"{ýO n÷3p³îƒ{??ë†ȹ€{þ¤¦¦j·jŒž§r®nS.Yb¯/n]s¥JöËUNªYÃM)|ö×íÿtölë7¹ti{¿Ñ¦M›ƒ»ÏkÓAŠ0 Ò°`º�¿tìF³v@@@@È?�°®4ÌÊêÖ ž^ׯ¹™õQ†@�ÈüK«þbò|ešÇú•k×Ùê¼Jê+÷-sõÛšiĻ딙ñ')¯»îD¥-—9>[¢[Ü®Ý}îûäÜsžùHyUûs”KF<®¼µÇ±Ê¨e•�\£ò‰ï¬n¨ÎeÖæó½«(¹ë(üK`ãÆ�ã~n±bÅ4\¦L™M÷á)�––¦OJ²¿œX´Èþ°kñâÅÊâÅ­r½]»vJú4B6÷“Ù¿ûî;í»[yÚ±cG »•§î£ú–¶n¥¡ûÊâÏ™3Gîçk»Ï-11Ö;·ûŠS³fM W¨`›EË»ïùónÈ@@@@)* Cêp²3 ZÖ?Ý–IÔ�M³®U#«]¥ti5ÖWîZŠ&ŸýÂ3Êïv[†å.¨¼¢Nî—¤Ùh…N —g‹ÇjN1U9¥Beïû'+8ÿsåÓU*+£7®Uî(ÑLyé³(G\×VYŽSF 48TÀ­š;w®F»• �7ÖpTT¶žR�‘ïBRÀí×ò­·ÞÒÞeÿÜ[÷“O[¶l©GÝÏp§7Ã�< r¸SnÕØÖ­[5}ëÖ­•åË—Ïá¼Lîë‹[‰ì»Ÿ²�}ß׬Y£‘óçÏWÖ«WOyòÉ'+³V»FÒr(ÀÿB1 € € € €á"@¥a¸iö‚N eÑhmsŸ«ßTþå±�iïûüÃÊn¥}ù¤cïæ š÷©×–*Ó£ë+ûÝ|¶²Œ/ Ó|´Â%àãٯݨPïx屉_+׬±>§v­³C¯/FD;UB‘6>=ÓÆøPæêÌF €@( Ìš5K»·aÃebb¢Ò­ å}fߎ,iµ)n½˜[äöL·{÷îÿ·w'ðQ•çDz‘„} {@@öE7¬Z…*nm]o­•ºwÓÖÚÖ½µµê­]l­ÕªÅ¥u­Z´¢^-bÝP©(«,²ïÖ!ûý?óhœ&“ÉL2ç÷úáïÉ™3sÞ÷{N†pæÉ{´¾¤¤D9kÖ,å¶mÛ”cÇŽUæåå)iÁðº°ùóçkÈ=zØoÒx…rpi4>_áé§Ÿ®�ý£uëÖZöw ¯m/..Öš¥K—*gÏž­\²ÄþÕãÕî_ø‚ÍO‹M€JÃØÜx € € € €)+@¥aÊZ†MW |ù£êüí®µ/lj£<úÖ§”8Åfx©{i`¥žõÑý¿U>·ÅŠÇò¿h¯ü­1ÙJZSˆñl)_®�?yÙÉÊ øÈúÙÝ“öôÍÊ˳{%¿ñð”¿úí#ʇ~ðEåÔg®U>ñôMÊc;ÔýLÔÓh �rï¿ÿ¾Æ4oÞ<¥WüñZf6Ô;Ôu�Ï vê©§îõ¯ úä“O´Þg²[¼x±–7mÚ¤<í4û›ˆù …�òm÷n›­û�7ÞP6oÞ\éµ`ÜA;å}ÌÌÏÏ×s=÷}‘6mì_L£F�RúßDÓ§Oײ׎i¿UÓ²eK%­®TÖUŒí@@@@Hq* Sü3<hZåËS‡/˜p�ò±•6³Ïa×NQ>ó£C”öùZ ­Øæª»ãn›9¨4Ýæ™:çŠs•½øØH M¹Åz¶Xáì_�£¼à�…ʬqV9øÒ?¯WÚúóúÁÓò€Ö|å¢K”¿>׿‘¹öå_*Ïø†Í:ôŸç/Vöæ,’ �  øœtž-Z´É'ž¨dfº ž·×‘uîÜY›~éK_R>ýôÓÊ­[·*—-[¦0`€’–ª^múúë¯k€>»å„ ´ÌûFªñÄ�«OŸ>Úé{ï½§ôyTýÞÜTÆv,øa?67ž… € € € €@Ê Pi˜²‡–�!€@Ó([ú7uxÒ„ •�¯°šÂ#nxNùÏŸŽS¶ý¼üK_Eßìf·«ù�ò±5¶œ5Ø^ÿòìŽc´¦+P¯³¥ìM üÏwÿG¹+ã`å5¿¹Z^c¨/kZ³ö‡kùG�Ü¡œ5à”Oüë.å_ç_ ¼qh†’†AøÏì=äƒ>PzíÆÄ‰µÜªU« Q0Þ˜üލ]ºtÑ+ìØ±CYTTó«ñĦ"à3Z®^½ZöÊÓ7ß´ŸL"·ÊJ›¡ÛÛ“O>ùÙbÚ�!C´ádÜ97>¦�ûUªªB?�„:éË^ }¯Ã·/+³™ši„ ø¼™~‡îðªÃðmXŽ^€JÃè­Ø@@@@�@PiˆÃÌ @ q ”.š¬Ž}ýK—)Ÿ^Ó^ù¥ß¼ üû÷G*­20öV­§Mù­ròâ eF7»[îçtWòy‘š\‹×Ù’žßAcï�*aݱXËó†æy±ÞpçüžrÑ6ë]vÇ~ÊÓ.>WyîЖÊúL5¦§ÇÔÌmó6ßÙoÿòºrö&{™ŽƒÇ)¿õÝ“•cÛ%îZpõ›Ùjê�VÞSôå}·¯ìNS¹Yk^ŸlŸÝóê*åŽl»Ò?öŒó”W�ÜK™¾½¾ŽG‹ªo¡E¿eýûu }Ùñݵü]åC}Yùê¼"åîu²UŠýð¬þÊ6I³Z¤t»‚@IDATõ3ÿ¥|àïo+g®,V–e[­ÁÐñ§+¯:oˆ²CôM/›bmÏG÷iD_ûÒ·•SÖ[ÝÖ©|IùØeƒ•¹úSÏV¹P/pÿoŸUn®¶OØF^ò=åñöÖEkbq>[rŽÒøO?Ùκ¿=ü‘ò�ß¹F9î©[”'ö°³%¼U/'_öCå›ì=ªù!g+Ϛȿ—µC$AÀg†z÷]ûÉdΜ9J¯×ðÃÜÜ8ü}•„Q±Ë†˜5k–^8''GÙ«—ý„_ÛL—Û¶mÓ£~Ï\ŸwÌïÁ]XX¨õ4@ \`É’%ú²¤¤DÙ§Oå¾ï->?æ²eveéí·íߪþ÷—ß_Ûß—´’ƒ@â®.ÅÐ9ž‚ € € € €‰Hb™€#u=í*åK§Xå‚ýù¬Uo~K‹×_m‡ô³{5&²Uï²ûÁÝ{ÏRåÀë~ªüßþVy±é­G”Wþñÿ”#þt†rH¢»–V½Õ*ç|eÏ+®SÞ4Ä®üÎìå-h§üÃO­ê°sW{Un²mîºÍê1WØ~[ìç´ÕÍÓŸPÞ¹¤¿ò¦û¾¯ìWbÏýÝ�*<èZå·e)ãÕ¢ë›í-ú-ëß·èöe5­ë¬Rf}�ò/×uµåu3”·ÿôaåÃ~¦¼<®5>ÑõÍŽf±}0œ6ô?Pþpp[ûbÓŠßßø7åäA7)<Ú>a¦Õ*PiŸ•Ýy�ÕýMYmG<­Ù'Š—¯:TÙÑÞØì­{èµo*ß¼Öª;÷}+Ú9í­ÿÓû¥Ê´Ö§(.¿Ø¶L⛾õ„VW�†8[ÒÛ¨§üê~åw眣¼ó½ß(Oê÷WåÀ±£”w¶Jÿªíö^4ç½÷•+¶W)³{�¦¼ã!;M‡q2I�†@ª ¬^½ZCôCëÖ­[µðØc�E9tŸwìÜsÏÕöûþ}å˰YðscéRû7Ô[oÙ¿æòòò”^ä÷0õºÂâââšñø£ãÇ�ן}¬æ!@ øì„>¯î;ï¼£5Í›7W†Ï¨»cÇ­)//Wú»Í Aƒ´Íêódž‹ € € € €©'�ì:�t+‡k–^gµ Ë^µ šÕc¾¢×:üQ­høVf¿-¿3ÍîÞÕ¯§}>æ=èØ·»–Û—oP–†FêëDµÒ6›Ìì^ã”?ÖZ™êÜð3OÔòèoÙ,xon:Ryz§†uk–m³Ø :ûÛÊ‹r§)/~T±WÛ£¯?˜¹\9pâ$ËP9bz‹áZ>󘗔׿±ByÉ ~Êx�ŽÑõM;L‹~KÛº~-º}YÅeߓβ ß]«ý9â §•Ó?±Ú±ê�V¼Žqt}³zÛþãíL³ªÑšÖÉæàSX¦|¡Èûf•†ñê[Í~RhÁ¾/JöØ{ݧo$U¦W²Ë2ºfß+%åa¯þ´*« yä7ö ¹¦Òj:z�k¾gpLÄÐäZC�-é�'Êâ÷3ìï”Sîÿƒò¾§þ¥|gîëÊ©3ì{¹Yn;e×þVýqÁi“”—ÏÞ�†5Ĥªz]4>�ÊÊʽ:µïš½6ØëKŸUj¯•|™’cƌѸZµj¥ô{"{íOQQQÍx½–ÐïŸëó0@�RcXCÄì%п¿ýëÓÿöY»v­–·oß®ôêf¯+ôºfW8p õ÷-Ðê)@¥a=y: € € € €©&¯Ò®ø¹ìY¤×š2Íêo&\kW”í·ÕÛÒÛŒÐÏgÕwýêyeùÄNÊEÏÎT¶={’rx’äªÊíóÞêL«GË /Ê´ÏôÚåoSnØdõGi�vÖ˜ôÖvtŽk»ª˜k¹ŸV¹E+×nl©ìÑÕŽäg]¶«Õ]»[-çÎùV¹¹£ºŸ²Ýgk¹>-ª¾…vý–õé�?·^û*]¥Y¸¦½²o«ñŒ•w--ƾU[-ÒÆ­btÊ «Œœ0ÉŽu|û¦Lµ–1T#ºñ«+¼±!ÆÖ¬‡^õÒÿ³Ù‚.mˆ×ç5)ÐÐgKóB�æøïþ6”‰ûj¼þ‰ý©§žÚx»HÏ(лwoíí’K.Ià>ÙUSðC¯7lªc ß�OÀçE½ð _×èQ‚¼ŠpÔ(ûÝ;Ïí˜Ý„¨4äD@@@@@�ÿHR½Üõ¡æ «.Üüæt匮G)ï*LÒ5Ít»käà 6o`Ï_LUÞw·Ý…gW{[sÝ(«�K\ó~iï½|OùÒ*›ð+=ÌmÅ´W”¯®·åqIbÓ®÷i¡™Úʬ.2oŸêfädk}V©U«Ù¬]´ý TÛ ›sFùþÀS”wôNî®PÞ»Ë*ä~>Ýæ’(É,PŽŸ4IyLCß´[û !€ € € €@à $÷êCÃ��= € € € € €@’U0·¿nVÚÜv/¾°FyÈYßTvLÒÔhÕ›fhe–rð�¦¼©ŸUð}ü�)o¾áIe³ßœ£�—è.6ëvŒö{Õùv²;ný¹ò©4›E®ÿlÆ¡mNÃömϵ`«%ÌͶ:ÍPA¡þÿy«,µ:Äò›ëÐþÐö°Ì%ÏÞ§¼}ñHåu7 S&û¶¥ö¦1ö;·(Ÿÿ¶Í°Y¼n�òñßÿIyCù÷•¿>¥³²ñœ…ê @@@ê$À¿ëëÄÅÆ € € € €¤¾@#ª4Ü3ï5y¿¸g´òºQñ¿?lô³dþm<¯�Í«xcÿÏ{ÒïKv'Á“¦ÿ^ùÖÇVc5zXâm~À^Çþ�òwÇ*>mUk_ÖÒoöVžš¬ÍÏ:óùÿ3Úi¹G—ÝÊ×ÖÙ¼…Õýó”éivçõk­^2¿k'e«D—ljŸ�¹YmæŠ'+9£Pù£&(nl™év‡î–݆(O=ªƒòÙy«•e¡JÃÆÖYuŒ† € € €Q Pi%›!€ € € € �ÄÊíO¶z‡Ö¾þü‡Êvã¯T°rº¤µìŽíµïVKç)ß)²;ÝÁ*ªJVÍVÎÜh�ÞÉÖ$«UÛ‹iééö¿’ ó•�üñ eÞÉ—+&³kÚx³j³QGôUÞ7uºrᘕýJæ*Ÿš¾S9ú’^ÊÆq"ª#Iovoâ5ÓTþìe;Ó.½Æj ûf†îCmÅšiéÍìÛ#'Û®ø'´@³z«ö¸àCûnmß¿›²S¾�jeE‹”Ͻ¾^Ùë°îÊlý¡!€ € € €@S Ò°)=úŽ € € € €@4Нª5v·â) m>¾¯|×f¸KîµÌÌAÕ‡Ÿø¸òO×\¯ü£•¥5Ëí¢üÂEç*O)Hh�—íÞ[µÝù…_Þ¦¼ï#ëVf+«ù:ü” •ןÐQ™¤žiÏû6ëKëqg(¯Xö�ò——X%éÖ´6Êá§~Cù“9JÚ§•˵0åQ«º]µÉf~¼î"«Ð o™ÃìÎÝ�þâhe‡Dìj«v\ýÆß•·üzµ²¨ÌvŸÝÂf3z´}_\{j�2¹ß¿ê @@@ê)À¿îë ÈÓ@@@@H5�ô+VhLV[ËÉ¡R,69ž…@pJKKë9xÞyê ˜òOߺÕfálÙ²¥23³Q”Õ§¼yÓ`qq±:Ÿ——§ÌÈhD7]ÒîyII‰F—›››Âcdhñàl‰—dj¿NU•ývQyy¹’ŸoSûX×tö»†Õ¡[de%õFõ ¯ÐÀáï-±íjÆ z"•†±éñ,@@@@RV€‹†){h € € € €± pÑ067ž… € € € €@Ê pÑ0e-C@@@@ 6.ÆæÆ³@@@@HY.¦ì¡e` € € € €Ä&ÀEÃØÜx € € € €)+ÀEÔ=´ @@@@�ظh›ÏB@@@@ e¸h˜²‡–�!€ € € € › csãY € € € €¤¬ SöÐ20@@@@bà¢aln< @@@@�”à¢aÊZ† € € € €@l\4ŒÍ�g!€ € € € �²\4LÙCËÀ@@@@ˆM€‹†±¹ñ,@@@@RV€‹†){h € € € €± pÑ067ž… € € € €@Ê pÑ0e-C@@@@ 6.ÆæÆ³@@@@HY.¦ì¡e` € € € €Ä&ÀEÃØÜx € € € €)+ÀEÔ=´ @@@@�ظh›ÏB@@@@ e¸h˜²‡–�!€ € € € › csãY € € € €¤¬ SöÐ20@@@@bà¢aln< @@@@�”à¢aÊZ† € € € €@l\4ŒÍ�g!€ € € € �²™‰YõžµÚéÔ;ÿ¬¼§è Êûn;^Ù%]±ßV¦µ þ•ò‡oPÞ~÷Ê!ЏµhzU1÷qíïÜþ­ÜT¶ëÌþúâò{¿¯ür‡Z‡ö„º-FÓ7Ųõhá¡¿LU¾²`³²¤YOåyÿ{…ò¬nñ¿F|€¾UÌÓ~uþŸ”/W+÷m™U+øßñÊøvð} u¥z÷ ýÿ÷Ø‘}rÖ&eIZž²ðÈ“”W^x˜²W¶"n-š^¥…¾G^¼ÿQíõá·ìûeW^WåQg}MùÝ/uWæêO|š—]ËßU>ô×—•¯Î+RîÎé uò9Êžegx?µ+í¼z}òCÊ{^]¥Ü‘m[Ž=ã<åU'÷RæÅÿ›@¯JC@@@�Ä Äÿ*RâúΞ@@@@@ ZiX¹i¶†p×mS”« Ú)[DqѲtñKÚòîYŠ´ŽQloÛÕ¥Eß«Ê;õÂåG^¬œzåå§%héVXÕ¬YüË«¢ï[u±ÕôÝyó Ê´3ÎWÜwueëL«#«®NRß2kï?úë•?´ŽÔ´r-Í›|«òÎæVÅÖ9®G6:7+]öì#ʧ*­Îñw“Ç* *V)ùÅ�Ê»ÿ=HyëøVÊú F׫ íká““•Ûy¬ò–ÉG(»lyOùë›þ¢œÜýjåwç(ãÑl�ëب³Ž¾@ù—묪1kÝ åí?}Xùð Ÿ)/jŽ›§?¡¼s‰µ›î³êÚ~%ö}ý»T>xеÊoÊRÒ@@@@ é 4kº]§ç € € € € Ð ­4l–mó° :ûÛÊ‹r§)/~4â ÊVêáÇî_¤yÆhåœG¬Ö/¾-º^Y™\ñö]Êm­î,+î·ÆuZE½ÞÞ-ú¾m˜þŠž @@@@¨Hh¥aÍ^¸P¾ì_Úæ®¬2ñ»7÷Ræl¶JÃä5»ºÚë+W(ù’¡µniµ`»VÏRÞsÛƒÊ_µ³ûÆþêD»+tBK¬ªvh�›6ïVÎßmõ�7]sƒòǹV�öòïîPÞú¤ÍÙwÿ¤ÞÊ$òòêÃs/mWõ­aÊV ÅÒÿ«evµ»`Ÿ>Úî|ëß­²uFhÚ̡ߜ å-Þ¹ŒÎÚï�~VÓzï´�”_ímw nµÝ–�jßùæÖ€×û«mïsFùþÀS”wôí­Êή’2›1ï³)3µì-#'[ Y¥6û¡Õ¾Ò@@@@ ) 4à•‡¦ÌBß@@@@®@’ËÎö_¾F+Ÿ¼ožrøEVÙ7À ˜Òl~¾¤· ›Ù­�MéöikºÃì¹þ­¯/�³BYª4ܧ ëÓíæ6¹]UµõíÐÓŽWmíׂm޹ãÆTN~r™rSµUvIxñœvjÖÏâÿ¼¦œÖÜî |û «YK^³y3ç>|§òž]')ï¾×ªÛn™¯|ð7VÞXñ=åí§tV&êúºÍxèù“”ÿé)å÷.y\™[0Hyâ «ºm±Ãî:× *õzÞ¬Npɳ÷)o_µâ]VqxÝEë•“nùŽò+]’{ÝÓªç*+­W™9V7—„Þ4³º³Î¬s¶ÚltÕiÖ/«ª´»ñVfÚ�NòÁ®Þ¢>L{~¡²ï‰_UöL–vûY«\§¥wgY'Žºr¸²sfȬ“Ýû›göW~íYëí–“­Ò°C+4ý>Ë_¿æZí÷ëúcÍæ |ûŽ[”ý‡ôPÆûhZýàŠ'+9£Pù£&(/̰ù:{t±Ù3_[gý©îŸ§LÕ¯_[¤åü®�”É�§R !€ € € €@=’{Ù¦ž�çé € € € € �x—+Õ»‡™ÛÝZÿô—/)+­ŒïÓV½ñu-]ÿ[»Sð7n9M9²]"¯xÚ\oKgÙ½k«zõSöiŸ­,Yùžò¯/oSŽýfe2@­lÌ16çÝý�<¯œ1ò,塹ë”ÏNµZ¹ŽÃÇ+Û'°VN»Û«U|ü†Ö<·Þêø.9Òª#“Ú…¶Qº´·û8¿ö­ʸ�sÑ÷Í{S½Kÿ_0õi域³ïše;*•¹ã.P>òÝ!Êðï}K‹ªWf°nʯ•“&Û9îõéNÓóµp ·)<:nfŸ¾8ÿC@@@�Ä Pi˜Xoö† € € € €@£HPAPõŽU¢˜]ÔCùÍ[þGyH»R[óÈŸ”?»w†rÄÏ¿ ì”V¢\ô܃Ê[_³:ªžíöÊfô}ëý(ê]8W‡^•Kigû#•×Þù-eŸü=ÊEOß«¼úž×•#o¯ì'ÈèûÖ)Ü¡z›ú0í/Ó•ëZç);èO¼[úVµS;ߺ«›rÒï¯RžÛós ôfÖõÏ¿Öõnuè[ºUÚ®|ÖŽàmZµã7߬<¤S¨b´ÚªtÃiõeÌ-ú^u=Í”^:Åön>kÕ›ßÒâõW¤<¤_Æg«ðÿ»vY fi©½‡Ð¨M`÷n+º®ª²ï¦¬¬8TåÖ¶#Ö§€€¿ŸdfÚEÍšÅ÷½?x ”••qžü—_Ô.àï-¼«Ô.Ä#&à?«”——Ã�À**ì7¾*+í÷ÏüÌ9àSØ °~žddÔ÷_èüdØSˆ�#€ € € € °�U¦·µùõ.¸4¼V35ô«¢j÷N‘²ÈÊAÒ:eX—r:�Vþø¦¾Ê�oÿ_å"ýi˜V‡¾ÕaõíkzÕn¨vvöéá{´ÙåúŽ2½¯Øl’›C…aÝÃ7©ÇrúöéEmÛýæ7žR>ÑìXåéým¶ÊëO¼[úVm•†ÛŠ[(û¶³ŽfdÄ«zoÿ£ªCß*í|úEû^8ó—'(Guë[zØòþwU‡µuèUȧÙ)Ù7í²WßT®óå¸Öñì[mÃhÙ²¥ªÿg&µ½>ëSC ;;»æ<álI�cÚp£ðZT?gÒãúÛp}æ•“%@ýr²ä›â~9[šâQK|ŸÃëÅøÝˆÄû7­=úO)þ»œ-MëØ%¾·þ/ ¯7¬ÏÞ©4¬�ÏE@@@@ ¬”)I-T}öñ*í}gáÊŸ^À´™§ c½ Í‚·Ä–Üjë۾݈~Ë}Ÿ[×5Ñî«¢xµ^úåg>°fwOnø‰æ"õ­zëûêÃÝÏØ6gß0JÙâoS”‰jµô­Üf~ܽs©ò/?¸Zy¯M§™Öº÷0åÙYéæÄ>Í• Y;·ÿ¾U._¬ý.hÑQÙýy›÷óÒë”ÅÙ]”Çœ÷5å…cÛ)ë;?�^b?mÿ½Úφ{¬"rÊ4Û~µý•æÕðÍçb† †—nÚ{?O8[šö±løÞûçöžœ- ï� {àZ~¼òæ£Û(ÓÓ*”‰iµ÷Í÷o5zÍ[Y�á§-£µ†}Ùz{ÄÔ)ÊÙk­fsDïø_[?@ߪB·/<\{?g\geóPAaó�ã´|\×Û•ó–W*OhÏï�ôJû«i•´øâ k”‡œõMeÇø—<ÖìŒ@@@H´@ü¯†$zì@@@@â*Ï2¥v¬zûms÷ÍVõóËßR^sD[ec¸r}ߢßRC«g‹m_é9VÓ7ðø#”#·zùë­rmÌAñ”>@ߪwj�oýŸÝ7yå";î—�o=ñV¾»X ¥3~®üƲIÊ.¤Œ×éx€¾iOZè^TUÕvÍ0š¾5ëÐ^{ï¸ÓæXÜ*:ìÚê4Ë+ížÉ™ñÂÒk©:µŽß›{潦g½¸g´òºQ¹J …@C@@@ eây)eP € € € €AˆkµRí�ÕÅKôàý7Ûüzk¿x�òêÃm.¹ò=¥–¡*¥Ìl+ëÊJøeÌèû–¹+q£ˆ®WV W¾Úzµ¸Y�r`7Sͩޭ\6ý-åûé=”ßíOÖèúÖBû=þª›•‡Û-²kšÕʽÿmÊ—úÿ@yýx»/p¼NÄèúfgZf‘¹½½Éæ1ÚÏúÐ2m›òƒ¿ÿŸrf§ʳ ïú.(¥½›—òáçÇ*o<µ‹r×^U¾RÔWù̓¬Þ°þ-z±O¿7ýŽØÏ¨]·¥r€�†4@@@H)�x^I)ƒ € € € €@PâUàÁÏõí•O-Ú¨,_t«òË÷*>ké6ßi7ÿByÅÐté³ý¦Eß·Ÿë9ç­KÌ(êÖ« Ò>Vßž¼w²rÎz«1¬ÊÈQ¶ï=DyúOÎP·û&Gß7?š¡ÊGõàóf•†-³m¼¬¼–Ê6yñ:âuëÛ÷:nÑÞßzàaåoÖ„æXLo®å®Cl.È+|œ²0>Å|z¥ºõ튡Ýôœ³~xºrÛïWžûèe³Ž+¿òý¯+�̯ÿ,‚uí•©ª53”Sö¶ž|·“’O„@C@@@ Åø÷~ŠP†ƒ € € € €@}ÒW¬X¡×((°ñbk99V×FC¢(-µùLck™¡[GgdÄ­4¶nð¬F.PVV¦úyÂÙÒÈVÒ»·gÏõ!;4·r³f|žšôÒ¨;PRR¢þåææ6ê^Ò¹Æ!ÀÙÒ8ŽCcïEUU•ºX^nÓÀó/ëÆ~´’Ý¿Š û½½êjû�±¬,¦–OöñhÜûo‰­§6lÐùÉ86=ž… € € € €@Ê pÑ0e-C@@@@ 6.ÆæÆ³@@@@HY�xݸ6e� Ð8Ö¬Y£Ž-^¼XùÉ'Ÿ(wï¶û§WVV*}NœñãÇk¹K—.JZj lÞ¼YüÇ?þ¡ôLbï„ ôÄÂÂÂØžÎ³š¨ÀêÕ«Õó… *7nܨôy}¾¤¶mÛjMß¾}• P2ó£Ø|­E‹iìž[¶l©qhÕª•–:è å Aƒ”>OhÍ,¤¤€¿o¼ýöÛ�Ÿ!ç�wž–£?úþw–¿ŽŸW[·n­yµÖ­[kÙ߆ ¢eŸÛZ ´&$à?�Θ1C}þè£�”�;wVžrÊ)Êôôte]Û®]»ô”W_}U¹~ýzåˆ#”cÇŽUÒš®@ýÏ/Z¹r¥–,Y¢ô+ù<³þ³M»ví´þàƒVöë×OÛy¨'¦|£Ò0å1D@@@@ nTÖÍ‹­@�$ ø�ÿýï«Ë—/¯éI^^ž–;vì¨ô ¯òOêj6c!…ü¸û]ëZièg‹ãp§é>Iö;´÷Þ{OëgÏž­ôOæ½®°C‡Zãç†>ïwÐûøã�µþÄOTrßF!¤ùß&¯¼òŠÆ»jÕ*¥Wdxu¡Ÿ Û¶mÓz?£¼jlâĉZãÛh�–2~ÿÖ·ÞzK#òÚ@Z]ÿñ÷¯[¶lY��Ÿ3þjáç•×Dûûõ†5\�|¡¸¸X=œ6mšÒÿ6©‡×­[§ñ3ÇϦþ¯É+4�úŸ-þŽñÚk¯i8áç›ÿ[É« ½ÞЫS=½&ñ¸ãŽÓ³ø]Š}Ï* ÷5a  € € € €� Ò0ЇŸÁ#€@SðÚ1ÿœÖ?iïÔ©“:øá‡+}^˜¦2úÙ^vî¹çÖéÅ}öºþóŸzV~~¾’0ëؤ7öOàçÌ™£QxE�ςڣG�½ÆåŸÛ¿ôÒKZïõ†>#Õ°aÃöÚ’/SUàƒ>ÐмÆÐ«ÀŽ?þx­ñŠTuii©Þ|óMåÒ¥K•^tê©§j™Ú !¤@Û¾}»Fá?�i¹gÏžJ¯Ö©k�»W¤z�¡×ù»PøO5^yäU®¾—÷ß_{<ôÐC•´Æ,à?¯zÍ—×­÷îÝ[^±bE ÝöºTÿ;kæÌ™z¯6õ¿³|_1¼,Oi$ñ:[¼òÔçÛõw§Ñ£GkŒá[ù�ýw¶üüôeŸýÐg9l$,�¤T6’A7@@@@h,T6–#A?@�~—äðÓN:IÛ3§X4: €bïµ!~·Sf‰: ZÊl^Ô§O�kßCl›6m´à÷-õ{¤ús©4L™“!Â@|ö:¯-õjÁcŽ9FÛï[µ‘““£õþ¨×£mÚ´Ik¼ªÈÏ1}Ik¢;vìPÏŸ}öY¥W•ú;À!‡¢5ûÛßê4.ÿ{gÞ¼yz–Ï�镃á5†þ‚-[¶Ô‚ŸWÏ<󌖽>qøðáZnÞ¼¹oF6*¯ÛòŠT¯d?öØcÕCŸy9¶JÃwÞyG¯0wî\¥×;{]ªï‹JÃFuÔ©3ñ=[ºvíª½õ«_UúO/µuÆë^ýwnüça?3©4ÜWŒJÃ}MXƒ € € € €@ ¨4 ôágð ÐøüÓxÿdÕ«<Ž8âu›ÃÆìs·nݪîù e^Ä'«�ùx5Dß¼ºÇ_9š Óðm˜Ÿ®!ŽHã|M¯ðÊ2ŸuÎgÔ­­·^U4xð`mðïÿ[é3ÖQiX›XSYïµ]}ûöU‡;vì¨ìׯŸ²¬¬LéóÍi!Êæu‹^‘š��­gFx®ÏÛëçžÏ¬ºfÍmïý‰ðDJŠ@·nÝ´_ŸQnäÈ‘Zös¦>õ€þSŠÏqyÔQGé5½nÑgPMÊ0Ùi\âl‰\cÞm¿Ÿ²¯ñ™7ýÝ,üg¤ð탹L¥a0�;£F@@@@ V* k¥á@ 1x•‡í;“Tcè'}hZ^»ZYY©nûl†Ì Õ´Ž`ý{ëwÊöšA¯9ݹs§^¶E‹{½¸×;üñÇZ{ýÈ^›ñeJ x�¡W^ø»D4õþ÷”Ÿ]~K?‹¨Qmê'‰ÿ®CýG±yóf½ˆŸ^é^˼ïëûYç3z¥¡ßÿ�JÃ}­Ã¯�0aB;ãçI|_3ŽÝã¥bhˆ³%úÎxu¡oﵫÑüýë§Æ–T¦Æqd € € € €ÄM€JøQòB €@CéeýÓx¯ÝðùƒfÍš¥õ~Ÿ¯Ý»wkÙ?©+((Ðòˆ#”‘gžÒ´ x5™Ïä•>ûX)>dŸaÊ�¾WžþóŸÿ”Éa‡¦ôùÅ|Þ±7ß|SkÖ­[§ôYÌú÷ï¯eZüoiøìu‘k1ÊËËõ¯Oô¿¡ê:ç]lƒ»b]_'ÛSi„£Ì@@@@¨ƒ•†uÀbS@ ñ>›¡ï×?‡Ÿ2eоôÚ ŸßÇ+ }† ¯=ôûÓ}ôÑÚ’ÔóçÏŸ¯îy�Ÿ~OÌÆÜgúÖp^Wèóø¼ÿþûÚÑ+¯¼¢ôÚŸ’’-û½Ú�<òH-û ˜ÑÔicZ ø\º~xu˜Ï%çUíûÐk7¼vÕ—½R~ß-YdŸ+Órrr¢¤ß2|¶MÞ‘¢d3¨ðÃõë×k�Ïæì¿KQ³ 5TÖP°€ € € € €&@¥!ç Ш¼ÒÇ»¸hÑ"-ôéÓG9nÜ8å¾w¼�={¶Ö¿÷Þ{Ê·ÞzKÙµkWe^^ž’d¿CœŸE~Ó!C†„±KÀ+t¼ÚÔë ½šl×®]5>¾�W�yR×Sƒ“ò >§á€4Ò9sæ(_}õU¥ßE×g€òóÁgàýðÃõ¨W#úzŸ;•sF,´�ÊÊʚ匌ŒšåÈ á[RÁÙŠG@ 6�mÛ¶é¡×_]é7ùïR„Ïá[Ûsƒ¹žJÃ`wF� € € € €@­TÖJà €@c¨¨¨¨éF»ví´|ì±Ç*Ã?o¯Ù@ Æ Sú̆7nÔòÊ•+•TÒ‚,°páB ßë ½>ÈïŸd“ �ÝëtÞxã !xýiëÖ­µ7G—.]´¥Wnݺ՟NVÀ`Á øâ³2ËX`O Üç?õC¿î 'œ õásúŒ1Bk|>;ŸÉnÍš5Zãd¾=g‘@R¾ùß;ÇwœFêï~ßÉÝ»wk�ÏZعsg-÷îÝ[éÕî>fË–-µ&üï2}I ¸@x�rø�”#³„oéïT¼ÿDãQp¯1œ:uª¾ô¹›GŽ©åáÇCt@* HÄ € € € €K€JÃ`oF‹MN ü®ÇÑß+Ðë>|°ás5¹áÓá¸,Y²D¯ãŸ¬úŒc=zôˆË+ó"MQÀßI¼òÔë¿?üp $¼Æ0|\^ôÅ/~Q+Ÿ|òIåÚµk•^ÅìgTøö,§¶€WzÖ6R¿{²?ÊÜ©µ)y½×Ÿº€Ï•Í�Ù½VÈŸþ A–dì Y`ÇŽÚà…^Pú{È!‡¢åQ£FE~"�ÖPiXCÁ € € € €˜•†œ €@£èСCMÿ¼v#šOã}ž)"w®¬ à‚יΛ7¯fì>ó‹Õ€p¡¬¬L£öûúŒ`mÚ´9 CNN޶iÕª•rÓ¦MJ¯¢Òð€t�ÚÀgPõ»lûû w¥ Ô å`ýg?C¶lÙ¢gUTT(³²²öû þ“OxkøOGû} +@ àÛ·o—€×úoÛŒ3Fk|¾æ€ãÔiøTÖ‰‹�@@@@H}�„UVËr×òw•ýõeå«óŠ”»s¬‚fÔÉç(xVe›tEZõîÊÜó¸òÉYöivIZž²ðÈ“”W^x˜²W¶¢ž­n½JÛc3ø¼xÿ£Ê‡ß²å]y]•G�õ5åw¿Ô]™«?ñiåz™õ3ÿ¥|àïo+g®,V–e·Uºòªó†(;„ÄÒ*7kùõÉ)ïyu•rG¶ÙŽ=ã<åU'÷Ræù–Zªo«cßB»«éM½óÏúꞢ/(ï»íxe—¸õ*´›(bÛö�ÚjÉ2Sê×§§²MëQ6lÐrQ‘½Ö6K”Wy¬^½ZÛx ‘ßU_Ò(à÷0õÏZóóó%pÐAÐ�!‡ x-�Ï|êïÛ¶mÓµ½«øs}KŸÈß[¨bWeÙfΜ©¯éð¹SÛ·o{ ´ha?{wêÔI¹qãF¥ÿmÕ¯_¿½¶ô/ý=Ê+ ý½Ë:ÚïÆ¬D�€ ø;†×úoEv˜]A:thÀeb>•†±¹ñ,@@@@RV a•†V?µ~�Õve}�ò/×Y�^ÖºÊÛú°òáA?S^>Ô®c.{öåS•ã•¿›Ÿ½¥´Ô*7Ü»¦W«×Ø'®ËW®³õý •^Ó¡…„µê*;Ê99¦4|H?eF3;ln¸låZ-ÐG™ø¾i§�j~ßRÿdì?ÿù�Æ>mÚ4å„ ”᳉ùÓÜâÅ‹µüÖ[o)�?Þ~À+€´PÓÂß[JJJ´Þß[Âßj6f!€^Wè5†~¯vÿ›ËïÊÍÏ <%8d?+† ¦-_yåå»ï¾«ôYSÃïÍíg×k¯½¦G}–Þƒ>XËû¾Si% .^cè3¼yä‘24È® ÑbHÒÅ›Ø:˳@@@@@ áVihõJ}O:Ë2|T=Fé«#zZ9ý“ReušÍ’¶k§-·.´ùæ:g+ÒÒ³»(ûw³×™µÇ*ãÑ¢îUåVíîÝY6§Û‘—®ì�ºÞÚíP-_0ñMå¦/S^28TÇ¡¥ú6vÿñ'Z†¿T§ÁújLa™ò…"«Òò3—+Nœd*äKo1\Ëgó’òú7V(/ÔO�C}߬ҰYv®rÐÙßV^”kR?ªHBkžc=xp¡rÉR›ñ-¹-+ËŽFï^{W�µogU´[C3 Ö·š6Öz%fׂŽ{½@ÛÖ-µfã¦-¡õõ«ôÝë¥ù2¢€ßçkëV{/Zºt©òé§í�³m[«Aöù}Âï?èŸÀ{¬UFsŸ\!°­]»V£ö»Üfgۻ߀èÀ�k8ôPûfóæÍJŸ)ì‰'žÐ²Ïl˜——§e¯1ôG}™÷±°ùÑÿÇ?þ¡±ûì¨^¯êU`^ÙáÍ^)vÜqÇiËhîÊ@L†\#PXX¨e¯‚_°`�–Ÿ{î9¥ŸE~ŽùÙUUeÿÞñù1ý½K_Ò@�ÿ;È«’ýï&¯h~ç�w´�gÍÆFŽ©G=#l¨‡¨4 Ôáf° € € € €X egÞKí[”®Òc ר]Õú÷¶z´ô4»Ž9èû|²õ-*×b¢ò°R»Û#kÇ(/<ß*k°Æi?½²¹ðÊ+3”ÙYá{¶å6míþ_»?°ÏêwÚDpimÃ7±ñhÕVW¸ñC«œ²¢¯rÂ$«ùJ¯\§\»Ñ–{tµ:ÍÏvn’]»[¥ØÎù”;ª­Ò°Ýgk9n­¶¾ùZ÷×ÿ�·©)Ó*lr­¤µvm­‚Ï?…HZ'¢Øñ®]{´U^nèh6ÄñŠ¢ûnâ÷S^»a“rÉôFÓ·}{›zk¼Zð‹_ü¢†Ö»woåG}¤ô*!¿«©WùþŒòý�§(ïèýùÌÌ®#´æôÑ3”·þýïÊ;iC¿9A9 Eƒ8ÕÖ«ôÎÚï�~Öç{§YuÏW{ÛÜ‚­¶Ûò£Sí΃ùÔŸ�A_Ä¡Ùì�ïÝu£òçÓ·+K2 ”ã'MRÓ9äPeó–”ÙüŒyöq﵌Ð,~Y¥V¥hÕkñlQô-ž» Äkí)µ£¹n£U¶Ü·gÒǼg��9ó>²Ú“ŠJ›Ó³UË|eÏîvÒ/àssôéÓG»öL|ØcãðódâD«Ó§!YÀk ¶Ÿj<#oÏ£ÁðÊÁ³Ï>;˜ÃgÔ¼îï /Œ°M4õïo¿™äÍölÓzôè¡n_|ñÅqìüرöëlžq|Y^*éu=[ü§ßÓO?=é=O½ÄûWê 1"@@@@&�”JC«]Zòì}ÊÛÛ½i®»ÁjôÚ|Z>X®å¹ß©¼g×Iʻﵪö[æ+üÍŸ•7V|Oyû)�•ñ»ê¹W6»Ü¡çOR~ü§§”ß»äqenÁ 剃z)[ì°òâ\ihìwnQ>ÿm«ó*^gw{ü÷RÞPþ}å¯'f+s³Í-TP¨ÿÞ*C•kå9ÖûÏEßâ|ŒâÙûÆöZeev}¼RÙ³›�Û>§arûÙ¼¹¯Ž9Péó;l*Ú¦åù ­öpø`›%3##~ß…z9 € € €4þµß]@@@@@ 1 ÐÆÍ‡IDAT$¸ÒÐj©V¼8YùË…ÊÝ0Aypx \è^Àïβ«™G]iwÿìœ*Þëdwëûæ™ý•_{Öîñ·åd«Æê‡Ê¾(z¥=é®Ä¡»ýškµüõП'ðí;nÑWý‡Ø šn÷nnÙÍN=ªƒòÙy«•e§ØÜ¡lß¿›²S¾U–-R>÷úze¯Ãº+³C•|£Žè«åû¦NW.s¢²_É\åSÓ­Ÿ£/±Yãv°ëÐ7í–V«€ß�Øç1ìªàk×Ö΢ÊÐ}ŠýPáYë 5À»KìÛÒ÷Þ;@×*­BpÊ£*Wm²¹ö®»ÈjâÂ[æ°sô壿8Z9á’3•+î~@ùÍ©VñT•n]í0ø Êk. ŒC�S{ÕfÁ3ÚïÅ·ÎPnQ…_ZZÁàÃlÍ •#ã;±[µÕ`®~ãïÊ[~ms•Ycv ›ónèÑç*¯=µ@é×}[�;CËW,{HùËK®TnM³šÍá§~Cù“qÐÒë|ÚêØ·ÏžÆÿ÷زÅêg‹wÚ|”žËW®«ÙÈ«üÜ[kZµÌ¯YŸ˜…Š »[·÷gOèÜ¡Û4ŸÁ°ÿAVÿË}“s,Ø  € € €‰ Ò0ñæì@@@@�F-�¾bÅ u° ÀjÖbk9ÌkÏB À¥¡;/Ç�™iuÇ6Ë' �ÚÊʬ^ÛÏΖڔXï{öØï4dgÛïø�â‘A 6�’’=”›ß_0©mo¬oÚœ-Mûø%ª÷UUö{xåååJþe�(õ¦ºŸŠ »+Cuè^ YYvOµ „¿·Ô¶Mäõ6lÐTFVâQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'ÀEÃÀrŒ € € € €@d.FöáQ@@@@'�ÙØF\V^®.Íž·DÙ³{�²sÇvIéä‚E˵ßí;vîµ÷Î�¬?}zuÛk}"¿¬®®Öî6nÚ¢\·¡HYQQ¡ìЮ�²Oarú¶>Ô“«×«µµ�ý õP›Ö-kÛ A×oÙºC¯¿jÍeyH,';KË…=»*[µÌW&¾mÛnçØÊ�[iY™–[¶°ž:ŽÙ¡&¦W•••ÚѲk•eåvF :¸·2==]éÍϽ•«ÍpÓæ­J´[—ŽZîÒ¹ƒoF"€ € € €@“ Ò°I>:� € € € €@üQ¥¡W0­XiujÙYVÿ•¬æ=©¨°ª«áƒû)sss’Õ™ýîwýÆÍZ¿}G±ÒkÁšçdkÙ{¾ß§$`e—«2+èÜ~¯}yÍÚü�–j}~^î^�&æK?šËVZ Ý€~…ÊùÖ“Í[·+—†jëF é¯å°¢:}Õ°­ ͽئ�ÍcèžÑ�5ž[…×`æ6·ªLo^WR­N³#Ÿ®ÿÕvìÜ¥]åå6W¶ne5†Þ|~Àæ,Ö—^蕤Ÿ=ÿÿ7 }ãuïjófdd(W­±jÇ}ÛÖm6/dA'«'Í méÙ±}[­ñïb* ÷uc  € € €MK€Jæu¼è- € € € € .Ð(* }f·µ6i¸û*W¯Ý•Sƒ{„và•f¡JÃ9ó?Öºªj«ïóаÂ]´œš/´yB£dO©öçµ]ë7ØÌ†[B•_^)Ö³{g­iÛ¦UBûTûμZ³(4 ÞÁ}{Õ¾aƒ?âŽ~wéÅKWk]Bs/ú½§»wí¤5nØà] ÛAuU¨¶±ÙÞµ�^­™™iå¡û‰7t¥¡ûø™³£Øê÷m^­ùiåcó½gùôy?‹wÚ\‡4@@@hêT6õ#Hÿ@@@@ˆ³@£¨4\±Úî˜Ü­ÀæSËÎNæ}“]×ë¼F µ{éff8‘U„yUÚ¢¥v‡ÙCì®ÊÍš%úªkYè.·»Köhï^+׫G�–½:lq¨oÃçiM²fÔ®kÚæ­6ÿ]óЂ�áÔ�:Ú¼{‹–¬T. Ý1ÙÏ·Ö­m¾ÅÄ7¯W]¹fƒvíÇ47TÁ÷IÑV­ÙSZ¦¬í.Ɖï­Í÷¨ªÛн’›íS™ú^ð97½&qßÙ-“Ñgö‰ € € €±$úšW,}ä9 € € € € �@�$Wn U¢ùÌníÛµNàÀ¼«¬Ìp«±êZÐA¹á›IpÏ«Ë˳ûÞ&²yÝY~h¿áb-[Xu¡Ï|·k·Õ!¶iýùÝxÙCߗךmØhV>c`rëÎ|&¾E[•h¿ƒz*Ýð“MVÓ÷Ñ¢åÊ¡ƒú*32w%Ýë {v³™(‡ú¦5?²9¡ª[O_Ÿì´zÛf!ŸªÐlŒáý© Ý�Úko“{¬Ã{Å2 € € €Ä&�¸ë#±õ�g!€ € € € €@‚‹é¼kÛÝÆMV‰¶sW‰òýÙ mU¨U†æMÛ¼u»¾Úª›ëÝ«ë§�%ï^=ç™øÙ }Ü996çcyE…Òê¾|ž¹ÐBM¤ï}3ÞšG·às,ú wmÛ$gÆÀðчk•¡-Âî|í³mÙ¦õ;wÙ�[·Jt…fÇ6Ó¢§ÔüÙ^‡›��í+“ž^?Ø<ÔŸ=¡»x‡K–”Ø}½ú.ÏIG  € € €D€JÀh†‰ € € € €@´I®4ôÙå|NÃð.¯XµN_æçÛ<}�;¶ (Ë>ÿ�ß§8¼–jíúMÚ»×RyÅ_:³×.òBµr™Z¿14c`AçöZÞ¶½Xé}ÎÏËÝëY‰ÿÒg~쪡k 3ÜùñÚ¹ÛjZýøú\�^Óç÷)n Ur¥¡;&/]¾Vý,èdG¶1Ô�†Ÿ?íBs�n ÍìÙ&t×éªê*mP´Ùª5 {&¿"8¼·,#€ € € €@lTÆæÆ³@@@@HY�$WzÅ\š•ÍýWóý>¶‰¼›í§�ݢث½ÍkåZµÌ×^™¬ê9ßo¿>=Ô“¥+¬mÕÚ�J¯›;¨ww-gf‰j.V¼ÓæìÓ«[¢v{€ý´laÇ® Tµº`á2-W…ŽrF3»nÞ«G�2''ѳúü˜~OgŸu1+˾%½z´s§Dרj×líÛ¶Ò6»Bó�~0g‘–ýœô>'÷žÝì< € € € €@”TF Åf € € € €E }ÅŠkA�UZÅÖrrrb{"ÏB�À ”–ÚÝ–ck™™V�™šÙ3¶WàYA(++«9O8[‚pÄë3Æ={öèé~·zÿ]‡ú¼ÏMm�’›977ùóG§¶sjŒŽ³%5ŽcC�¢ªÊæ///Wò/ë†Önê¯_QQ¡!øï«eee5õáÐÿo‰mG6lЩ4ŒM�g!€ € € € �²\4LÙCËÀ@@@@ˆM€‹†±¹ñ,@@@@RV€‹†){h € € € €± pÑ067ž… € € € €@Ê ØMHi €@ðû…5¡ÓU@@@&¯5Si˜°CÆŽ@@@@h\4llj^"€ € € € �0.&Œš!€ € € € Ð4˜Ó°i'z‰5ñš�¡æY@@@@ eâõ¯f* Sæ”`  € € € €ÄG€JÃø8ò* �0�x}f’°³#@@@&PUU—}QiF^@@@@�Ô Ò0uŽ%#A Tä@3L@@@�âõ¯f* cÀç) € € € €¤²•†©|t),PYY©Ñedd¤ð € € €Ñ ø¿”£ß>ò–TFöáQ@@@@'@¥aà9F 5¨4L�ãÈ(@@@â%@¥a¼$y@@@@Ø�•†ûAa4~¿õ†�ÿHÑC@@@�†ðÇë¾ÉÞ[æ4lè£Æë#€ € € € ÐÄâPièW1ÓÓÓ›ØÐé.4}�ŠŠ Âßš5ãS�¦D € € €@]ªªª´¹ÿë¸.Ï;ð¶üûÀFl� € € € €@ âPièW4322Ç`@ ñø'*YYYêUÏ�ç¸Ð@@@�†ðßýmˆCï3•† wìxe@@@@š¤@* ¹{i“<òt�ðOWÊËË5&ê SèÀ2@@@�ý„ÿ+Ø—÷³Q½WQiXoB^@@@@�ÔˆC¥¡_ѤÞ0µN Fƒ@Óÿ¤%3ÓÞܸŸrÓ;Šô@@@ v�ð{%7\�¡ïŸJÃÚ�� € € € € H�8Tº›ß«Åï[JuO Ï%�@£Ø·Þ�{»7ŠC'@@@ê!à¿ãÛp÷JÞ·kTîkÂ@@@@-·JCWô»—úlbT÷úÌbð4ÿ&|ÆUÞ—Áa¡  € € €Q ø¿g=zÃ};D¥á¾&¬A@@@@ Ðq®4tË}«{|–CŸñ0ÐÞ .àŸÆøû’gøì«áïKáË ï&;Œ³€ßSÌ�)G6θ)÷r~¶x¦ÜàPœ8[â šÒ/ÇÙ’Ò‡7nƒóóÄkˆø›(n¬)úB~†ø¿n8[Ré ‡×†ßðõÉ/•†É’g¿ € € € €4R�©4ô±ú5Q¯ëi¤£§[ HwòOt ˆA{u¡Ë'±�8äõ¤Ïv>_L=^Œ§¦¸€ÏÜí³x§øP^½8[êM ð¿‰xo Ð!¯÷P9[êMÈ D%@¥aTLl„ € € € €@p¸hœcÍH@@@@ˆJ€‹†Q1± € € € €Áà¢apŽ5#E@@@@ *.FÅÄF € € € €G€‹†Á9ÖŒ@@@@�¨¸h!€ € € € .çX3R@@@@¢à¢aTLl„ € € € €@p¸hœcÍH@@@@ˆJ€‹†Q1± € € € €Áà¢apŽ5#E@@@@ *.FÅÄF € € € €G€‹†Á9ÖŒ@@@@�¨¸h!€ € € € .çX3R@@@@¢à¢aTLl„ € € € €@p¸hœcÍH@@@@ˆJ€‹†Q1± € € € €ÁÈô¡nذ!8cf¤ € € € € A€JÃ8<„ € € € €@þqQT½˜ûIEND®B`‚manage.png000066400000000000000000002500131523260663500336160ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/fig‰PNG  IHDRXø§TRsRGB®ÎéDeXIfMM*‡i  X øõÉÄÏ@IDATxìݼÍõÇñsî´7‘½%3„4ŒÐ¦¡¥¢=þM*õ×ÖÐø—¦”Ò¤-%3%Z(Q2ºÈˆ¬kÞuÎÿýùþ¸Î�.Îݯï#o¿ó;¿ñý=GÜß÷óû\\œ�† € € €ÅC ¢x&G‰ € € €&å1Ô­[@@@(Â+V¬ÐÑQP„O1‡† € € €@z.¤á5 € € €EX€ Eøärh € € €¤àB@z^#€ € € P„¸P„O.‡† € € €@z.¤á5 € € €EX€ Eøärh € € €¤àB@z^#€ € € P„¸P„O.‡† € € €@z.¤á5 € € €EX€ Eøärh € € €¤àB@z^#€ € € P„¸P„O.‡† € € €@z.¤á5 € € €EX€ Eøärh € € €¤àB@z^#€ € € P„¸P„O.‡† € € €@z.¤á5 € € €EX€ Eøärh € € €¤ˆJ?#w^þý׿q“/~[pçNJJ0Ì�ý¤Ùª?ÂŒˆô—*å+_6X¹RD•*iÞæ € € €ÅO w/èÇý”¿Wû¿›ãÿ+.åß�QÁ€?Òöè†^ðû|é^j‘tsB_Ú2,�Ù*~¿í(%%9""¢Jå”úuƒÇtЬUK+Ó@@@(ž¹x! ¨ŸÀçüàŸ49rã¦`r²~&ONóóÞ�ë‚€?~kÄÊUÉ¿-JîÝ3ªÓÑþÈȼÛ={B@@@ ÀäÖ…�à'7'ò£O‚[ãu´þtcø6˧ëúOoyïê~›v6Z_oEèn¯ uI-â-°gËÞk·ïZCºA•h‘ä”ÈÕk">ü(9ˆ:¶‹í“† € € €@1È­  Ëÿò}:Á¿eK²ûé>M¥¿G¬Ÿä#ü¾Èý|n×AT¤-–°Ÿòu @ï¦$»K¶˜. ìN°ŸÞ£¢ô~0)É_"ÖÞݽÛíÓ `ÿi-ÍÔF2û9?)è‹Ü¼%åÓ )5/Ñ ~1;×. € € €¾È›o¾Y *T#FRRRʇE/]–”†4ý,¯¶gV %¢~ýèK/ ü³>åŸ|+Ä\u…¯LÙäß~ó•*uáù‘íÚi:˜�q\—è~gEvîèoÓ*X¿!à Fžp\T¿s"�éôG6mŽ<»O`Ý?�M#ŽhÕ³Gòüùºàí9ÍNÝÞ£’ý­ZFrƒ@Ï:›B@@(Ø[·nUsåë“V¯IY²49I5ø�`Èz¹oŽ®”+ÑâȈÎG“#ŽlѶµ¿N­À®Ý¾ê‡E´h®û}5kTàf&N�® ÑýÏDEF´nuVŸ”…‹’žHN Fø#š6 FGvî –)ãoÚ$ �ïÝoš�º™Ö±?—¨“ûÑ;@@@Â/�+·¤¬ZÜ´9%�ânØ÷îï÷ºîÕë»9®’_OˆhÐ X¡\dË�­[ƒI‰*ˆhÔ(eyœ?::¢Qƒä T矲ti’.T¬ÓëÄ`DDd—Îz aÂûã|ÑÑ÷÷Wª¬¯ð^ÿ{—¿j=˜PÏ) ¹5 d§®)ú2�Í›’W­ôÕ«~Q¶ˆ € € €@È� ë7”°Û¼ îèSïØO½, !{DŠ Ë£Nîí«P>eé2+æ�‰ŽìpTò�sõØ€¨öí}“§£»Õª¥¿zõ„Ï&¤lÞì/W.yÞ|-«MÛf)¾˜˜˜sÎ îÚå/_Nv!Àí2ÝE€½ó¢“w¯ÿ·Ÿº† € € €@®„ùB€~8×Wõ¥lÛ¦oçÛm�ý˺©J_·ï'&$ÿòk‰~ç$~=SÔ·ú+UŒ¨S'ªdI¿žxØa¾*U4¶Ÿ4w~Êß«Kœ{¶~þWÙ >>¢^Ý”Ä$mÀ è‘�;ÆŒJ^ô{L×Jôî©Ç؃³n%£|;·mÓû^‡³^�w@@@(R¹r! °{—/Ù�•nã×Óÿc¢fÓ»gâÜyÑ-Ž´ÇvìX¿~ûˆ§ý‘eÝutû`dd`ó–Ý_NŠîØ!ö‚ó’†?ž0iréë¯-é×· ô¥ “'«6@…�]»ìæ‚¿íÚ«È¢Á”䀾n€ Yø0@@@ ¨ „ùB€Ç¤»ôÉ)*Ú×Ú{á2Ü &¯]çÿinÊÆ�[oÔ3K•ôû#|±±»'MI^þ—ϱkâ—eË$¯úÛ—�HHØ9þØíýUª$þôsà#Kt;AE»§ÍHÙ´)qÎ��-[ô )kÿIœóƒ¾À·ç*Df÷èª�º—œ´·oüŽ € € €@qðÇÅÅéXëÖ­–#ÖP|DDÄÚ'Ÿ®0kövݨŸ}Ó•ý¥}À]Þûb¿Ô9z7"ÂÖzË[X%j‘{^zóS·™í®ËDFnéҹƠ›½g»,o"€ € € PV¬X¡ÃÈ�Š€=èß*Rë<0�·αÁúÝàïÆîݵ€} ¸™zÜ€Ù³Š7G—t[¿wá ÒÞµUôÒÍ×”ÍJݦ¦½ÜDjh«UH½Ê�ú € € €u�ܹ`·$ï©Íß'h?¾ï{åÊB^j2Ý{/ì[(ý½Š tÿ¾ 3… € € €@ñÈ• º �’¸;9tô¿€i&ûýêdëÝA@@@ ×råB@é{”nÛÆŸ˜�ëÝ?Ø”Љ V®|°k³ € € €…U W.”jwTtLLù‚mR*1±`w�Þ!€ € € ~�ˆðo²�<‡�‡æÆ©g› € € €\ W.ðc¦{ € € €[.ÛSÏ�#€ € €¼@÷3®Õ·þ¡¬{p{ ]+WžºƒNÏ�;wþüù«W¯Ž��mРAÛ¶m6l˜nÝÅ‹/Z´(ÝÌŒ/;wî\½zõŒó™ƒ € € €ù!`ãÆ�C‡}ÿý÷7mÚ”z>t-àÒK/½ãŽ;¢££Sg¾ûî»Ã† K}™ÕÄ'Ÿ|rÆgdõ.ó@@@8t�iŸ¾ �xEÞtN¶y Ëçd›ºL>_رcÇ€>ÿüótý^¾|ù=÷ܳeË–Gy$õZ@LLLºÅ2}™é|f"€ € € €@>_xñÅS¯4mÚ´G�~¿úôéÞ-O>ùdãÆ�¯¾úêtç©bÅŠ;vL�µjÕª_~ùÅ›“zá u&@@@È �œ×„ZO ?/lÞ¼yôèÑ^?N;í´§Ÿ~º~ýúº°bÅŠË/¿|Ú´iÁ`päȑԃBOØGñÎ;ïhIo¦&T>à]¨Q£†Þ ]˜i@@@HÈÏ þù§7ò_®\¹»ï¾;õé€õêÕûïÿ;gΜ�;wj¨Á‚íÛ·Oí±&TP¡B…Ô9ëׯO-+èׯŸ®¤¾Å € € €¹-�}]@Á©ðòóë—.]ZƵ6®…ž˜N�:éÍIHHX¹r¥÷–jþK»V¢D  ¤.¯«Ë–-ÓK½Ù·o_]&H}‹ @@@ÈÏŸ™Ï=÷Ü>}ú¨7z¼Ÿ~¶í–˜œœ¬9©oýç?ÿÑW h¦®¤Þ�””4fÌoÝV­ZuèÐ!t;L#€ € € �7ë Z-€ç�Ÿôó¼Z¦ç㥗^Úºu«ÞR]@ëÖ­½eJº–nù3fÌ�;W3uiଳÎòêÒ-ÃK@@@ðòóB@Vç`æÌ™zp`JJŠ8å”SjÖ¬™Õ’ºAàƒ>ضm›¨T©Òù矟ՒÌG@@@ 2ÖäÁNhùùŒ€L;ºzõêAƒmÚ´Iïêñ�·ß~{¦‹y3×­[§ïô¦O?ýôl.d³ÞB@@@ ø¬Š=PøùçŸuTä¯ïlÖ¬Y6'Cµúê- § \tÑE©ÈfÞB@@@ ÷BŸ :�{{<Ð- Š€@ ðÔSO}òÉ'Þ1Üzë­½{÷Îæxt_À믿î-pÔQGµk×.›…y @@@$P€*Æ�÷àƒzgEÃûwÞygögHÏüæ›o¼eN;í´ *d¿<ï"€ € € �{Çÿ æó JE€n_˜>}ú�!Cô}úæ?Uø?ÿüóû}4€—,Yòé§Ÿz z:� ýl1� € € €@6ùy!`åÊ•7ÜpÃöíÛÕ¿¨¨(]˜5k–7ΟÚc}G`Ó¦M4h�:Go½õÖÎ�;5Q½zõž={†¾Å4 € € €y �óZ€Ð΄º€\¹ áýÐãÌjzÁ‚ .ôÞMJJÒ·dºä}÷ݧ‡¤¾µyóæ�>úÈ{yüñÇôcsØÉÔý2� € € €@È• ÆÏ MK÷ûŒ3R/è™9ÙQ¦Ëäpï™®ËL@@@�b.à�í¡¬{p{ ]+W.¤ûÑ=t¡Óº·¿mÛ¶¡s2�®U«Vê|=M`ÅŠ­ZµÒ—h~×®]Sß:Љvò@7Ëò € € €d\\œúW·nݰôR?¨ëGô]»v•,Yr¿LLLŒ��ßïb¥K—NÝš†ñ·nݪûôc|‰%Ê”)³ßÕ³ZÀë¤×ᬖa> € € €EF@#ë:–\©H÷À¿¬ÈôUªTÉêÝLçëçÿp}G@;™i7˜‰ € € €@!ˆo¿½z{�Û«…wËáÝZj¹A ¼°l @@@ € „ùB€ŽÖû[ÕûùÈÕ½Ôk¹Ÿô @@@�ð äÖ…€„„„äääðö5\[SÇÔ=.„Ë“í € € €"�\¹ ã×øz ÅWÐ,Ô%uÌ{@€®´îÑ@@@rU Ì ôn¹�ŒŒTí½š~êÖ£¢¢ôU¹z9Ù¸:£Zï*€.¨WZ‹g䄎e@@@ŠŒ@˜/ÈE?óGGGëGnýàí5ýÈ­Kš¯Ÿº½–|Þh¿:àM¨@ê•W  n¨“áòDP° @@@RÂ!@›ÖØúá_cïúÙ[M?{{R÷šKÚ—¶¬þ•úQ?45Ó» e¸ �Kþl@@@ à „ÿB€~ÌÖ…Ý ¹uw€R‡ås›Ã»ॷ/]€Ð„wQÀ»à]P÷¼ …ÜîÛG@@@ @ „ÿB€Ïûñ[µ÷úÙ[Õø¡¬9¡/Ã;íýÀïí=uËÞÌÔ—*UPÇ´LºÅR`@@@�",�+äåÝ  ý¼íÝ#à!¦Îç�iºK^�‚ú£kšÎƒ° @@@ š@n]ÐáÞÏÛªÐÏÞ^Y¾W�«Eé|½kJ¯Þå ®¤Sâ% € € €@ñÈ­ ž ~W¾nÚWÓ�âjù"«n¨éç.ä‹?;E@@(8¹~!@‡ªŠ¯( /tz‚ € € €@~ äУò†åCç0� € € €y,À3óòœÝ!€ € € �Ÿ\ÈO}ö� € € €@ p! �ÁÙ € € €ù)À…€üÔgß € € €ä±òœÝ!€ € € �Ÿ\ÈO}ö� € € €@ p! �ÁÙ € € €ù)À…€üÔgß € € €ä±òœÝ!€ € € �Ÿ\ÈO}ö� € € €@ p! �ÁÙ € € €ù)À…€üÔgß € € €ä±òœÝ!€ € € �Ÿ\ÈO}ö� € € €@ p! �ÁÙ € € €ù)À…€üÔgß € € €ä±òœÝ!€ € € �Ÿ\ÈO}ö� € € €@ p! �ÁÙ € € €ù)À…€üÔgß € € €ä±@Tï�Ý!€HHHÀ@@òE€Š€|ag§ € € €ä�@®W,Xo6j®åWË-WmµÜ‘dIC�‚ P:ÚzQ»¼e¯–WeÙ²š% @@Š’Eélr, € € €ìGÀ§EêÖ­»Ÿäí„[ú–I–/þd´ !€@¡ð»ž^ÓÞ~{ª·el¤e¸Ï—$ÛA@@ çëÖ­ÓÂTä\Œ%@@@(ôa~F€W pò[æ2=®Ðëp[¯ŠçWÑóÇ¿ÆðEËðÖØi € € �·Tä­7{C@@@ _Â\à=€Z€|=§ì�0 x¢¹§~Œ<%Ìgs € € �ÇTä18»C@@@ ?ÂV°`½†÷ùy@ìrGÀ{^€÷=-«åÎ>Ø* € €ä¾¹oÌ@@@(0a«5׎É{Òx�9::‚aðþt¿:Ï6øtï°m– !€ € €@ P�Çàì@@@�ü[EÀWËóó0Ø7ä�À¤ey³ö‚ € €¹%@E@nɲ]@@@  @Ø*Vm-€GG—@ ÌüI3(›C@@ ϨÈsrvˆ € € €@þ „­"`GRþ{F�¼(˜Òý~¿"##•v}Ó›“W*ì@@�ðƒöm]�@@™’’¢ôæ„gë{·BEÀ^ ~G@@@ „­" Xqˆ Pࢢìb^-@�ëB@@àBk]½åzuÉÉɸ¥ì§" ;ÞC@@@ ˆ PPÄN(‡ƒ@qˆŽŽÖ¡zO(.ÇÌq"€ €?¯.À«HJ ÏÃù¨(~Ÿ#Ž@@@  PPŒO>‡Ž@áðž @-@á<{ô@@à`¼ýzÿ>ôçPp0ç€u@@@(¤TÒG·(Ž¡ÏP-ŽÇÏ1#€ €o�Ðïƒ�AEÀAÓ±" € € €…O€Š€ÂwÎè1ÅVÀ»ZlŸG@@@Þ¿ŠåITðAB@@@  PPŒN6‡^IÛÞ —[ö^mÙù#Ëu´\à›r…•�"€ €*�CÿW1…ê„ÓY@@@M @Wô>Íîó£,¿žhÙó'Ë€-OÚ·²Ý5rƒÝï®ÏÓ]‡qgÕêÚÆ..aùôbË‹LZN–ôGÛŠ ËZÖ¨hYÎo¹îàÞi«Ó²ð¾5 ›x @@�"/pèÿ*¦" ÈH8@@@@ö ЊïîëËŽ°Ž]À±mmºÙÏ–‹q5†¼j1¶£›zY–�dYx+Îèbý¿}›å³ÙVädÉ@¼mçÜ—,«î²ü“O¦1Ð@@@ @ PP O�C@@@ ¼´" fs;ÌSc-_Ÿky¡{RÀÀš6}ûß–´¼¨ØÀöÓÓ=!NÞì2öéîä?«ŽmÚ¿0»ä|Io+›7ÙÛ$ï!€ € €H€Š€t2è  € € €¹-Pð*Üs×û·±�uc­£fÙt­Ö–ºù÷¹Š€6#ëæžè~ÆÑ¶ÀµGZ¶«dYÚ=&~µÀ�ò½Í¹a�eèÓã«Õ²9ƒ;YöucȵÝsæ·m·9®±¼÷sËéîÎp›Rs{<­£MÞÒÒ²�{’| ·é¥n­7gÛüg–Zî¶HÓª·³—q§ZNþÄòŒ_,3ÞxîwãÛ“o´w»¸{Ý+�·é=Ýq•Ÿ ¶9‡Í°Ï2º¬å™®Ê`|C›¾åuËÿm°ÜâòñY6=´›eewvÏ·éd _Š«GXã#'KºÅÝš9‹èÃl¹7.¶lgáûÔõÿ WѪ‘Í9Õ�ÏwpÇÒæ›ó�Åžæ}�ÆÿØËk\mË’e6ýœûlG—³é>î<çÎNƒ›“ò0wÆgžmï–r26EC@@�â$à~\(Ṉ"€ € € Pœ¢ ÚÁwuwn7qc³·.°Þy£ÓÜxþ¿îÎêËܨæ87:�q,ú¨cl­»k[þæFÝ{¸ø3Þjo‹ìiþÒ61â$Ë:îŽîk_·é—6ZfßÚ¸=«cKÍsƒ°Ý§Ùt¼ÅžæŸn�»ÝAÝmúF7¢ûh.�ÊVt _Ù[; wpöR-æGË©WZïä�øÉ¦sVsܨõ²X›ó¸«ð*^wçÅææ°EÚr纳æ[cÓ§¼m¹$Ãñ»%£¼Sn‹ìi-:ÚĽµ,_~Çò:§º�ÇÚü9—Xëjùö8˸8Ë1î>ükºÚt™M–oüb™h‘¦-Ëñ’iVËöE¤±o½ÚjïFûW„~pgØüG¯°¼­©å™e-_ÜféµN®¦ãÊÊöêG÷„.]g÷,3¤šML¼Ô²²ß2cëz¤Í«á„/{#ãûÌA@@�¼C²Ù·w¿?‹Öï[ä §¨8H8VC@@@ 0  Š ¼Ü�é÷ܳýmJ£ënx¼d¿Â�N7™kóÿ½tâ.k\ÔÊæG¹›ï˜iÓÙר>_5wwú©¥lú×–£rP às{ìßÒ–÷öø°»=´ÀÞÓ“öÝ@üC®^àò³mηÖW;àÝ©nsÃÝ;m‹OþlZ `¯5îŽñw3z—ª6Ç»·ü· còöÞA7w޶º§*DV°­œXÅrI†jˆ Ûo’½¹·yç´µ½ŒtÏÆ÷¾M ¦cß»�ûÝ¡ÏØjÓ×Ô³<ÚÕL ï±Ø†¼9�±³mÅ4µÞ–ܸÄ^ êlÙØ)ù¼Š'àÕSD¸OõpWÙZ `ëè¹ë-ÿÝòx÷gĦҶmî,�L·zöÞë®îæh € € �·YÕx½ðÞÍ�º÷CFÞ*{C@@@�ü(@5\-À©®.`â|YªâÍÇüf³®r£¦Þ7 Üéî9÷ô»ñü–eíUòß–?¸ñO›Ú_kv˜-ãFn¿wëæd Ù{–{ëò¶nò*Ë3Þtn³÷´­î.qo¼½½Û£[Õçæ÷.Öß“Ý(ú‚¬JÜñÆ;%ïþü˜°î}ÏÆÜýðÏM·W}ûZ޼ÊòR7v=Ò=•`ÜJ›ãÊl"µyÂmÝy”ÇžzSê›YO¸ã­è}ºsr"³ÞRXÞñ*æg¨€Ýøž±z7«„;Rï]ïS}dȧú§l?c ÖÚzÉYTLùÎÞ�ÐÀòâs,ÜoIC@@�â#@E@ñ9×) € € €¾‚Qà…Øß�a–vÓ纱Ês³=AýÝSîpÞHr„Î.ë¶p7Äou#ÞÙnfÏ›ecm"Â-¿%ãÍôYl"­µg�n\=>Û=Ý2î6v_躳]+‹�çhvÐ�oϵíç¨n¡Uî^ôv®ÌãšclÖµ-,_s9Â=§à÷Ä„ÇÜÝò^1‡§TÞ�Ó$w®/™ike¼CÞæ¦6Wƒ0/ÍÃRßË� W•°-«ºŒl{”ñS�ýgÌ«ïp™l7ÑUˆœù¢½uÎÑ™,À,@@(òTùSÌ"€ € € °O @TDW· <Ür½»‹þs÷ü󬆱›4´%»ayÊTËñn ?èF€w¸Õ¼‘ärn$9'u;ܺA·|y7ÎoÛÝ_ ¸aëmÞÝÓ ¼±ë¬öèw[öž à�Õ{ëîo?éß÷»óæ‰�þ­þzû&ëà,ŸœlÙ³µå�³¼ï<ˆã,/]lÈPÑðË›ÿ{V{³€¶ƒë²'°çSíj^Êdû©ŽqÏp‹déàÕ˼ïj+²\ˆ7@@@ ˆ PPDO,‡… € € €@f¢"àxw·S׿áí·¡k3ëìÞy�:ÙÔo½,/su̳é€{TÀï;lº«{&7‚ºÊ»ÝÜfgÙþt5In õèZ¶Xä_–Ù?r>¸Ë–™»Å²G5Ko�+³Øcùš¶L 7f»ÜÝ-ï=/Àæú|‰!÷�Çf{fb+Ûò òä2N0d ;ûqfëÓ�4¯žbÒ¶Îô–³¯´<Û=5à:W°Ó�Ó_âm~w'ÜÃTüîÌmn[Î�"çKæpׇ¶X0äSÝÍ ´vŸ�Õ®†%㶺ÏF¶ŸŒ+1@@Š‘@žü(YŒ<9T@@@ ´@>úÝ}õ—77£Wð¦'ÏÞlÙB{ZWË Ñ|›^â†ïß]dÓW»ª�¡ÇÚô4÷�ŒCÈÑî2H’{ÀúÚ?Ý’=,{w°¼ø7Ë×7[¦in­h·–·î›nï7¹u‡¸çá5ÝÖØ²š÷t€;ºØ¬ònäÿq·ý�"ß6×ÅunDºU·äÏ–{~–;êªn€ÞÝDo‹åRÛ骼½4¨b;‰v{Êb@:Ë^Tu�4ØàÆ·3.”â ¼½ìv›ÞS‹áœÇ8áëºÙzwõ¶œò�å¡|6C…�ÊZ.spÞ¿W}à=»¡¬3?ÜéÅ…ŒÿÛ:ª+qÇ›“%½ås=�À®>âZ÷ɼµ�ísêK×Y›P‹(cy½«§p ö2]«àÎÂwô ¦Û/@@@ � PPHOÝF@@@à`ò¹" º»Ãÿ´’Öõ™n}I†ÚŒ‡tCí¯-µwz7³¼Ä}ïÀ=®¦`Ö76çÙú–7»øumúó¿-w¸¡Ònùš+lÎ1Ó,“Ý]è·L±é§XŽr÷«ŸçFbºÔ²ål~§Z–�¿h9Ö È.üÞ¦ïn`ùøq–ójZ~¸Êr§{NÁñîH»ºûÛ§¹½<½ÞÞ mI®‡£]MÄ07®û±ÛïÈå¶Ô.·�ÎÍmúÚÃ-׸±b7Ho/s©írG1Å= ¡ogÛÉï|m·iÿËG~·Ü3†o“i›3è*›Ùe£ålwìË�¹¿´Íé厷£;¢'ÜøèX÷¯nô{h=[ò±¦–?^kù©û ¬rCÛå]À1î,”úÕÞm>ÙÒ½é º'GLtßIÑ£ŽÍÿ¼Ÿå{k,K¸®ÿÏíe]Η´Uó¨ÍüÆvôVcË‹{ZÎvŸÃOܧ%Â3tŸ�î¼$¹Ïª-—¶�rš½QÁrº;ö 'Ø4 @@Š�Åç\s¤ € € €øò¹"àÂ6vJ»Áß×ݨ²Îщ™è¾)`­i¿ØmçaW°Ë�]cùÉ=)à*7Rz^{›SÆÂ÷·Ç~k¥M‡îqñÏ6§£{.ÀmGÛôin ¶{ ›ÞíÆçç-³éÉ–{š›~ò{µÈÝÅ}s+›¾¼‹e)÷î7ú:d¢ÍùßRËÝi›—~Ømgg{ëò#-Ǻmîr#½?¸½ŸëŽ®û…öî-¹Ø‚n¿×Œ³]$�hÙÛ=¡àXwCÿ´6g?Í�ÿÉ–ªçÎEߣlº‚ûôívçk¡«;¸î;›ÿŠ›¶©Ôæ†õG8™ß<á–öÞ)®'eÝå¬x×ÏyËmþ[‹,CO‘ÏUš<û‘ͯz²å@W;p—Ë¿þ°9#-|°¤·|ždÀÝ•î¼ÿÞÍvyY#Ë»šZntuÍ´éÎja_›ÎØ~X`óf¸Ïöqî\ø&d\Š9 € € P”Ü�PEù96@@@Ø'à�‹‹Ó«ºuÝmôûæð”ÿþ^…@ ìU]•ĪÓmß�·ìçê#l*|-xï¡n+!!ô)9ÝZlllNe9@@ ¼@0¸ÿ‡äùýþL�ãàþE½n�=fŒŠ€LI™‰ € € €@ÑÈçgMTŽ �ühZÕöå.,®Û™ý`Ï € € PP¨(¨g†~!€ € € � Tä*›D Ü¥m‹�Ý÷/,vß³�q±•mÞÝî+ü®`êÚŒK1@@Š»ÅýÀñ#€ € €+*ŠÕéæ` «@tMëùwg[Æ­°ü~½å:÷èýز6}F Ë#Ýcõ§|iÓŸ̃ùmE € €a*ŠðÉåÐ@@@H/@E@z^#P’ìË>}�ýjyZË~.+DÛt’ù_êžpï6gÄb7ß‚†ÅN ¸i‚ŽùÚN—('u|Q9û�s•Õ3ÿb½CC@�â%@E@ñ:ß- € € €@1[E@i72¹#©˜{røäŠ@ Þ6ûèç.se9ݨ÷'=§KÍåvè°&]ÝTyê+›•'<÷»ròuV¤ÁµU!äaÛ¦}ýôÆsÊ¥m)Ïoé’‘‡=Ç®‚ÚÈú¯_V¾¹õDåÍg4TFêWú–Ó%ƒ;ViÕe«·(×.[©Œضªg¶Q{ƒ† €ÅL€µ³Îá"€ € €o\\œêÖ­{ˆG»ƒý‹Þ?(‡?ðœrÜôß”«wØ—ÐTmÜQyúu÷)¼º“²²wá:ÅŽeì•¶Í[Þœ¯ü79ãß9¶…£‡Ûö¿»#ÔP32kÉ«5wú³({ã å‹íãS¬¾£bMÛBÛãNV^q§)õk–VH³vØ7GŒ>LùäÛS•óWÙW}DT¨§lsbåàa·)ÏlRJéó%ë×üçÎQ^0Ô}r¶ÚyÌx$±'¿¢ù_žlË\{OöK¾ªeþþÜl«Ä{ÎkzR·�ùÞ ,×ü'�?Bywy;_+^k¦üðAû„¼üñ,åÿìV–¨Þ\yì97+v‘²eÙŒç\³}Ékg(Ÿ:LùÊ„Ÿ”qñVrXõˆã”çÞh¶w?CÙçû|VmŸÀ´Ït°=.ûÌþ\ÜÿÔ;Ê©s—)ÿÙa*¥ªØ·r4kw‚òŒÿØYrr]åÞ?š¤!€ P(xF@¡EùÙ «zØ3†¯©ð7ëóŸŸØ8ó©�ÎVnlg½:ýª•%·YÅÄ”q+_ºÞê–ì(&ý§‘2Ò_FÙ褕÷úŸTý‡²åÕÿSÞÐÉ«7¹ªííìì5Ôd¦m›æNÔMyÒÈ5ʺ'Ú™½úl.¹c­rù"ëôÏLfÙ�û”iÚNû ïᓬb➟Ê*�=÷Rå�fV1‘´ú{åGcïWžóշʧf~®¼Ñ}½D…gkú¶;¢•Þó�rc—AÊ—¶Pz=GÖê¬éãb•û[òX-zòõr¿-iÁZæ’Vþìsãíç\£é“#7)ýâ}åçO Tþ¸Úê#æ¿sžò0¿bO n´Š»�©|q‰-Ó¸×ùÊëÛVQ&ýmçî“»)¿éd5Ë“>ëë¾f¦þw™òø ÞSî<ÂþDô¿ÁÎEͨ-Ê¿—þ¦œ=õåwkì,„tA¯h € p`ûû7Ò�m�¥@@@@ @ xCaëâS½mSÞwL� ÛfÙä£@÷ú¶ó'ÝŸî|ìF¾îÚFÚgŒ~KùgTG婌ôÛµÔÓœ¡¬ò‰�èŽg£úý®®¥L{�5Isæ>~µò¡Ù»”-nþR9õ‰îÊ*iÕœÐ\o£²ƒo|W¹²â©Ê¾¯¼º©�gÝlàuþW)‡¹'Ò·½sª¦§=h#ÌåB†Sƒ|­9·uµüäPëáÿNš¥¼Ã�Zk"Z@ÛÜ<û;e쳕¿ j®ôFó5¡–xýÊínWÎõŽò÷kîQ¶ˆ¬®ìtîeÃm6z|Ûè%ÊÚÇÙ}øû—U@K´û÷Ç/³U: WLœhõ�3ÜzLLÔüä˜Ð7Lø·§¯UÞ?ÇF¿¯š`Gô|o›öÝ~þ­šÓ©ûSÊa÷ع»p¼�u×ëz±r@uû̼øß•Û›ôT^2ÐÎ…�­ïkM5Ù0GKî[''S)«fj±_:¼¦üé=«:©úï‚a5玎Ç+ÿd”ò£µV‡rÍáÞñ™ÉœG­²ã•?M¦Ã½ö›:¬ƒ²Œ~ímÃØÙ<å8;›±{g§þnÕ13Þ³Ñþµ1'+GOÿH9°J¨¢fø|ÛcbÐl²ýCcËÒ@@ þ&͇·@@@(j¡WþÃpl±n°ä ˜ñ šdé=/Àîÿ£!€@áðFâ¼çx•>i†B Ï�„¥§ÁÍv_÷«n´¿d·ÿjú¼úû®¢–ëi£ÓçÔ|K9Ê«¸âM7 v¦ª1uƒ† €@ " œD@@@�œ äJE@èνŧ{‡Îc($)KÕÑ·FOWîØ0îûçUr©È´Ùhý[£¿VÞÓáDe)·T`{¼~ßf很òVYP>G—am…mñÛ”�ˆjÊ r´š-oÅW{öXΊ=Êe»ª¿œë•߯{Ûܺnè÷À+ö�kSÙ4Y+Š(“a¤=›Urá-C©Ýï5åÏmú)_|âIå ï<¤¼ô�G”ƒ[�©¼é¡G•·ŸZ_é Kâ·hz«;§ÑnÖô÷öPf9(®÷ÔÜ·´õ>ÞœüÍX«¼({P#í�íöÉ ýTgý3çråíŒgõ1Œ9âj½ûѯ�•ãŸ{\ùÌËo+ï>o´ò¾êG+/¸}¸òáº*käú¿_´ €EV «¿‘‹ìs` € € €g®¨ç³Ï±#€À~’æ�ѯÿd5©ÖÑž½j AÍlÛêþüêå¬ñ¯*'>lãÃçT´eý¥ì‰è¥ÝjÞX}¼IÞ_]€­Pº´ û6úºÕ[MSûk® À=ßغoì:«=·Ú½ë[Ýp¾¿Œ�ܺÛó÷·› ïwíÔ¼�9- Ȱ~þÌ0ç2�OUÞú’å Ç—('¿þ„ò¾‡mDú¿}¿W.ÿ³òµ>U”eì“PÆ»œ´z�Ö'Ÿ¦<ŠB QsŸÏƒêoDi«~(í¼ê€íY~ªí‘˜hÏyÈþ£Q±•–9÷ž7-ï|FùÛ„—•ÇYEƃORþ°f²åãölûsEC@� "àÀÍX@@@�B+@E@¡=utrW`—6?óÕ±ÊÅ>{Úù�‘6ý`»¬ž¯nƒ¡KŸüKÙâÖ ÊÑ®Už}ùáʈª¶…#ªÙ`ñŒ³•?n¿^YÛ†Þ³iö¿è&-š*£ƒß(˜cÏ,HéÑ\™ýÀ³¿r-sT=ÛÂÔß)Üvƒ²Ž=. ]³1Ú­?X¯~K²å´i©,ïê4¡ëM(v[íCV-áÏEzk¹û²ù¬– ×|¿_ƒÁìGšlŸåk…Þ7¾¤ìÖµ¦²sûaÊÞ™¡|¾Ï9ÊRUlìºu-;Ó~¥œºêåõð û¾ƒðíç(r¾¤ú‘ûÍ_¥™vâ}ª§/´Z‰_ìë|53y‚} –-^¦<€�F”=�£Eß!ʱ=ŽVVhÓKùâ»ï)|Ø*ºfõÇQïÑ@@ k�ü÷JÖâ@@@(ø6øCCH'Ü2Qs^÷·2²Ý#Ê‹Ûd?øh×Už?PÙý¿W)§½jÏ<_:ðVeã{úùý(_zú#僫ìþÈ±Ê !#½Þ=ÔII)šmÿ‹®qú¶ä�éÊI#‡*ß¼ÀFD6ÈПä$ÍOŠ´ùÑQí”|Õ¶³ÁÝ+£©ÜjÖ«R¬¼!ÆocÌËÿX¢LòÙQgpѼ,ZоÍaÃFëiÕ*%2](²„Í�qÏ…(QÊ»÷ÔbDÛõ€�fõü½3•ß4Jyâ{W)›eÜXâzÍ_ºÆöÕ°^¥wÚ#ÊUÔtù«hØöçbåšÀIÊŒ…9_R«çE‹¶ÏÒÙ}j+_9^ùÄKöiïq‹Õ¿ì«!Ñ÷P¬µOàsï.W¦dr~ìã²eƒ=¥¢tÕÊÊLÎ`´�–Œ63”= ”ǧ) €¸nÆ € € €Z�½C>…öè8 �ë>­ÍNØdã�Ç?`cò�³¿)ßuÂ_ãlý~é)v¯ø¤_W¾ñËÍÊ޲ítú¼ò†©6–þôc=•-¿>]yjç:ÊÒ‰•ËçÏR®>á-åwuPFÕ |ê±�•]ÿcyE»ÖÊ÷úœ¨<²Š]Ïݶz‘rÎw”·ýú¾ò¢òÖÝ#ع+h@IDATo²'®?4Å–¼í¡ʶsÎSžul=e©m6B;óC[~ÆJ{\A÷Gmù›[¤ÿ«!ºÓ@Í¿¬Í+Êaï\«ì[yµò?½*KnûK9ûýg•/üdO’?<ú_¥ýÊÍVò{Âÿ‰•¬ÿ�è§²¹òÖKOPîë6¥VƒÌäÁ½•·v�²Ã‘o+Ï8Ùêj—¶j…­îì|7Ùªv^2U¹èq«‰Ö/�oWë¦<¥C)åÔoïQžzö åy¬Þawl'å�·Øö«ç|I-�­¤vrü]#”ý'œ¯|ó¶ã•�g›gŸ¶Õ”�õ¿*¿7E¹»º�‹è¿íèÒ¶�z9ñj{wpœo·¦Ý¸¾=_£LâåÜ c•ã—Ø�~ĶßÖøi € p�T$«!€ € € P¸¢^Ï}F�\x{´�Üî(wŠrà9µ”9ºnê·û½O¹ÌêjŒ·š‚7G£¼ë(õ-YéD刯¿U¶ÒÆQ_?MùÞ )·ûmL¾Vóc•ý� Ý£�7½úå÷ _R>þ¿7”&¾¦œ¶9IY¢JeÛÞö4û–V|°·•´Ú�A~P6ù¨òé7'*_}ôåÎX³mÜÁê†?·òÆ“ê+C7 —ÖbÚ*îúl‚²Ô](_}Ïžå~ÑóÉÊ’‡Ù(úѽ/U¾?Ãú?íT~J¿r³ù«÷׿_¿J}Û‹ÊI¯W~[¦¶²û}öî~ZÔ‘Zàœë¬² îýéÊ�GÙÝì[v•%*ÕQyŒ�ó?û]Ê+�)­LÓJ™Ì`'Übä#š~zì—ʉ¯ÚYÞ–£,wXCeÛ^7)û÷3«4õFÚœƾ£Üpƒ�…×§ŒT><ŪêŸÙXùýRËù’Þòy’5ÎÒ~^ùÚ>GÜó rôVWòð§‘ÊÊ�­öáÌ¡öîàR+��±"À>qG_t­²ëÿ>S~3n¦r||‚Ò_ªª²~ë®Ê[ÇÜ©¼£K¥WO¡  €„@Žþe{Ûe@@@(€þ¸¸8u«nݺ°st Šª@B‚�õh‹ ù6û]—å@ ÿ¬Âbè“•µ¯²ÑþÓßµ'HŒ;מŒ@C@ 8 ƒö·döÍï÷gºÀÁý‹zݺuÚ™’2@@@�¢)�æFÅ¢yˆ €ä§@’v¾xÑerDeõjÜ㟟çƒ}#€ @EŸ@@@Š‘Åèds¨ €„W ðÏŸÚà’hûf„¦•ì›2¶„Å£4ó¡7ã”ÁÊ*{´¥"@ 4@òM€Š€|£gÇ € € €ä½yoÎ@("I?>¤#9æü©ÊzÇ� ìØÒªª—³1ÿ„5?)?}÷så­•'>s·òÔò  €ä›ùFÏŽ@@@È{*òÞœ="€ PD¢[÷בÜ~q¼rÂ7ß*Ç}û�rË®€2º\ue££.RÞƒÕ îÓØæë @òO€Š€ü³gÏ € € €ä¹€?..N;­[·nžïš"€@ñHHH8ˆƒ���=ˆµX@@�‚) ÷Û1¿ßŸé2÷/êuëÖikTdJÊL@@@ЦŠæyå¨@@@ÈT€ ™²0@@@�¢)À…€¢y^9*@@@2àB@¦,ÌD@@@ h DÍÃ:ð£Ú=÷-­tÉ‹”]† SÞÔº¸ÏñÎï^“ÃmK»+ÿw‰}¯D¤~Ñ@@@ ³…ùìÑw@@@P€ŠŸ/¸ShßOýEé¯d ßLµº€+Z·V–Ö¯âØvë ùq‰rgE« !€ € € *ŠÆyä(@@@È‘¾à–y¢úbnEåÉW6SÎ|õ;嬭­”½Êû•¡-eãïzùîkŸ)?Ÿû·rs ¤ò°æ½•÷Þmãç "ƒÊø?f(_c9kéfeb‰ ÊF'_¢|ìÂFÊØ �½/›ú±ò…~V.Ü�¤,uXe÷~ý”Wt­¡ŒÕ/Ÿ/°v²òÆ­ÏÇÿïVå¹5B®æ$ÍÕœûú ¬üßû•שð-zíåÿÊK|vt¯MùS¹&Ñz^§m7å�ÿ±þ·*»CùÍ3�(œn}N Wö¯ðÅ=@9~h'e›AC@@(d!?C²žÓ]@@@8`�b^`ãök¿ž­\P£­òÚãZ(ƒ�P~ù­�‡÷<µ’rOU@âJM�}ð%åÄŠ')o¾ßÆö÷mQ®ˆ/§¬é¬Xóµ¦ï¿¢2©×yʇ®«¥Œ‰ÿG¹!ÖFøc|¶÷M³ìÛ †ŒÞ¨ìþŸ”·6³çlsÕO�|VÓOÆÞ©Ò¹¬ò`[@+®úü}ågg\ úäÅʲñVÝðúˆ·•�Žo¬sYCåq7UÞnû}«Î-ÊÑ|k€h € € €@á " ðŸCŽ@@@� ”5‚š<ÍîóoÐÝî~¯]YÙý¸jÊ÷§þ \y²�ü×uL›©éOרÈù÷Úõ�+zµÕmý²fcï‹§XEÀÂÃ{*_¹¤½²ÖžK.¶¤=@-hUÓ?ÿUY²×ÍÊ+»ÔQz§¤z—>š¾~éoÊA[Ovê¡Z«^vake#W¹à«fsÎë:Mùõ¯æ°9hU÷”@h’† € € P¤¨(R§“ƒA@@@ {oø9ûeŠì»I‹íé“×ÙXþ9ÇTQúÝÓjkcø ÇÙÓõ¿Zj£úW6±+&›VÛþ;«5Q6*—Õ y¢ÞýûïMÊ2 l„¿zV[RÖëÝ«m; N9\™ödØ«�j*#¾Z­\™¢8¤Š€ÈÃm/µÓôÇö^¢T¬m:Ù¾­ Ù¦h € € €EV Í…Eö(90@@@pi¡‹J‚ŽuÞÔŸ”kâ•Ï]u½¥~ímA{¨¿ïß©K”—4iª Úíÿ{ZVõÞÛ·îÞ/Ø»Nf¿½ÝdöÖ¾y~Û[ö{ܳpŠ• ¤x{ß·þž)”= *Gʰ23@@@Š„Eâ4r € € €äL ˜V·-�ÏsìŽøNWܦ¼¢•»O~�š ©o�ó®ò® ö�4Sv8Üž#Pbý*åÒí¶L£ò‡×£5¿æáå•ÛÙ’ë¶îÞo ÐäÞißРŽmᣥö€äã(÷žëÛò%+5�SÖ¶á|Ÿ?ÒÞ�òÙÈ¢ÝÔŸ¦þÙ ×ë\å‚}óÁÁ7ëU„;¸@Šm.‹"ƒƒßk"€ € €ä‹ùÂÎN@@@È�½ÃÏù³÷|Ù«�moüÎ�ó—h§éûzÕWÖ-pý Vê¦ß;6VùåœmÊ.]ldþäªÏ(ÇŒœª¬Ò¿�²VÔåŠö}õ;7V6íaK6™4YùÔ»66M÷ZÊ’;mÄ~I|%å mª*{ôµ>Œ{j¼rT³þÊsš—VÆ/š¦ùÕneçkí[ ª»ñy%ÛN£òë”ßΈSö¹ØêÊ$Øœ¯ÞŸ¥üËÊ|­,ºY]CÕªÖ“ÌWþö¯E½h»rT¦|Ie1üèè¨i € € €@a " °ŸAú� € € €À¿aÝ€�ÉO›ºLY½Ç™Ê6j$-ž£½Nþ»†²Ï…5•_¾=[9uí1Êsç« 6þª¥¿^”¤,ÝëVdQ@@�ƒà_«�Æ* € € €V* 뙣ß �O ÚïÜÉ?*ÿ©uœ²ÇIõ•ñŸ½ œ4ýoåÙýë(#õ+] Úº+¾�¤|sÂÏʹq›•;ý%•Uk6Qžwó¥ÊÓj{Wií» ¶-ýN9öýo”ß.\§Ü˜hÛ.[Åêºô¿\yÓ±•~Ÿ-¿cù÷Ê1oOWÎ\¸V¹9%VY¥Žm¿ëé§(ûoU ¥ö<ËÀÖÚ2y¤ò¼çw*/þVå¹5Ò_)Nùk‚æ_=è+e�ÛžTÞëÝÉøGÓïÞþ�rÊQ7*ï¨>_9ú㟔¿®Þ¡ô•®ªhÞņû¯ÐIY¿„íwÓì·•ƒŸ±c\¹;  ¿A9C¿tDe;+s‰²#_ @ƒ@úç…a“l@@@ ª#,õÌÐ/(�Áx»›ý‹96rÞìÜ£•õKÙh|¯.”“¦Û³~ëg­c©-ES+'¾¤¼é•8eÕã{)¯>³–²\òV媶L½ªû®Ï&üù¹æÜ>ô å?õìû.¸ÊÆók—HPnXeãð±5Ë*½¡ý„¥_júŽ¡¶Öú&=”n9[Y»ä.åʧ)Ç<=BùÛÆÁÊ'βº€hý O³þU_ŽRÞW­¥òÌó(/0߆_mﯼ?V9,¶šrÔÀÊòmÏP¿Ãj†Ü?Syø5÷(ong=ù#m~9þ¦’ @ŸÀ¾q†o›l @@@ ¨ã,ôÄÐ-(x6â½a–ÝÍþCr#åuÇUQúÝx|ón4]kâ,åóm”»õÑ%”{Ú®…šxûÝÅJ§�ÊÇn±å+î¹K_“¾Î6ä¿·­F`Ú»S•KËÙÇ] lWJ±·uÜ;¡ßƒñŠïÚÝû‹Ë§|ü®3•mBºÐªeSÍ©‘ð rÈûŸ)gô¸ZÙ³¼",Í|’j)/¸óBå©•C¯ymÍIZ:Tùäü?”¬" ~ «h¨RÁ:jO>P�CY«°¨Z…¿ž� €ä‚¹€Ê&@@@(¨ ¹Ô3C¿@   ¸gãO�²TýŠhq®ò¨ØÝÊí;\GÝ]ñÇÖ¶1ù�&ÿ¢ÜÒÁ†ì+¸AñäK4ýÛv»¿u»>´@/ӷ䕚óË‰Ê ǵU¶­H¿´âmùù¿»å�m­é!µ{·Y­;7W–Ÿ4W9oIвg{o$^“ah‘õ�ÐVŽªR àmÕ}3Bõjî0VÙ3 vX @@ ¨Ètv‰ € € €@~ P�_òì ™@òÒÙêñ¤åÉÊ�)o+/ºÐ2có¯¶çÌØ`ß)зšßaeÛƒö üò9y~âN-¹Íø}åÊ•Vfa··öµ$Ûþ6û2�ý,ï/[FË”õÛ¦·m·cÙ{o¾›Ì>r0†ï/m½-“}wƒ9ØPö=á]@@�C "àðX@@@�Â&@E@a;côòAÀÆÏ™ò£rMeçtCe­Œ—Rw.ÒüQ�ÛÓþ¿œ±Nyƹ5”¾’%¥}6dï�Ãgû¿ßh»Ÿ¿´[$>ÞFû÷3†mãðå¬àÀ·xëöl–ÄoÓ»ñ®6¡\Ù}}ðg?†oöwÙ½ý;³íŠ·�lÌm‘@@È�ŒÿŒÍ�^°O@@@È�}ÃAy²;v‚>�àößÔ鉳â•5Oî¡<©ue&ÿ ÚøŸ¶3•�M·g üqÖYÊæu*›•ž¡œ7Û¶¶åØöJï;4‘¾EÛö[4¶=LŸ7_ùë®fÊ£¬° ³UOsÛi%“çÙwüºÛ=½ß R›}ÇÁ/³­f!¾„õ§M#ïûlü¾D)Ût´oƒrs¼ôw¥ zéZ@¹nñ_ʳ­ð–>ÐôGZO¼Þ$%æ bâ@wÀò € €!T„`0‰ € € €@QÈd@«¨2LJ˜À¦ïì[æìª¥¼¨«e–ÿëô—Õ»]Nl¥,;ü'大)›·µ9œYOùýØw”CžÝ¬<»ÓáÊòAûŽ€5ËÖ*KgË÷¬]AyâyÇ+?6Mùðývݶÿ)Í•5KÚ˜ù–Õ+”ªÛ2v¬¨ìÖÿåÄ;?V>ú°\Ú§…²NI«Xñƒ=¹`ôdÛW³þ§*O(¿ï^þ˜f¶åÖ%æ*'¿k{ìtí±Ê&eì¹k~ùZùÜ'+÷­£ajUkjKõˤ(¿�ð™rJe«˜¨´*�ªGÖQVó 4EC@84*Í�µ@@@(TYkª£ ³ €@. L�²X[q޲{Íý_?-Õö-Ùµ²}ËÀ´)öD€+Ú¥ltöõʧ*LT¾1q†ò¹™[•;ý6zXý¶ÊËzx#î–¥Zœ©q_%åëãf)ß}þ[å¦ÝÖ‡²5ê*Oº¬»ÒkQu{hâ¡GÊ+ßzÇFõßxÒòßÝö¿úJµ+»Ý0X9 ›Õ5Äè×Þæ¯ÔQ“ƒ†lQŽ|s†òžk­²`w”Õ8ÔnÖZyæmç)+=ø¾2Ì (ÙRÛ¼ò–ÞÊ-£¾Qޏ×2æ0“¼ëi*Ä@C@Â&°ÿцmWl@@@ò[À§>Ô­k#K´p $ý8F›:çY…»gteûT{P¿ý¨ò�u½”#oi§ ¹YX¯h#P°ÏûÁQî­“�`wžh‹��=ÐUX@@�+ î¿ÎÒïÏüM÷/êuëÖIƒŠ€û‘ c € € €„_ �S‡ÿàö·Å„Uv﫯MRN_ô�rk’�”¯nw϶9ɾý{ðéõ•i¾Š[¯ V³ç‡ÏåqåÔv·)•ýiµëIUšY@÷5”%C.0íüî5͹m©Ýuü¿K¬N¤h<¨;¸i¦ŽåÎ'•7=p¢²FÈQë% @@(&T“Ía"€ € € `Ù]£Ä?ul/Ýÿ¦òû†g(ÝßLYÕ·CùϪ•Ê¿KÛ³²CŸª­—±%Zo¿ŸoÏúØ0ÿ~› …W>ÊžpYšeí›Æùq‰rgÅîiÞ)Ü/ì®›-síÉí¿'5É‹Cqµä5û@@@�ˆ8ðUX@@@ «@1­n²Qô?·TWžt��~w®»ïšH£&M3œOUÞ¶økå ¯NQ~û×6eD•úÊîçÚwk_ÕÍî·ßÏÓ’ÿÕ2ß¾ýžòµ)6ö¾&¡¤²îQ'(¯¾ÊFéÛVÜ×_âÍ™ùîÊ·f,V®Œ·‘沇Ûwn_1ľa{ù/(Ç­NP‡Ý üÂz4¿ì^M?Û·ª2íètŠæ,zí>å­kOW~pçÊŸžyDùàôÍʤàpeÏñ _ÌÑ”ã‡vR–ÉyÿöÌ…w‡<­\ÕûeåY)?ýu£2P±ž²çÀ‹•ç•þAùÜè™ÊŸÜQ”ªmGwÑ )û6tO‰îÒôâ/Æ)ŸÿøW›Þ`ÇYÎŽ®y×¾Ê![)+§9T;kk'™Ïõ/ZEÀ¶”Êþ}>PúËvV><æeÇH«†X6õcå ü¬\¸!IYê°Êîýú)¯èZC™“gÖû#Mø¯/Æ(_ýh¾rY¼=i¡z‹.Ê«®³ ”.ÕBž½�sU­IC@@M ägÎCÛk#€ € € €@Á(¦þŠ5un”µñöïg­Pö­S_Y6Íx²fìiÁõ³4õЃӔe.ºB9ê˜*ÊÄÅ_)ñ¢ò•*w)oh™Õ˜±�`ÿ:f¤òÉ%m”·?lcÑG–ܤœñÊËÊaO•R¾xßñÊ>ÿùµç”Ãç×Q^qÃ`eûÊöÿ¬JTÖ<Ìîxïõ¬õ'~ �?ûÙ¨þmûùÖ-’¶ùËèõq7UÞ~§ò­:·(G§ùÖ€í¿6 ¡ÿíŠic¦*û^gý|ù:ûÈÅM|Cyÿ3öM³êØHþ¥×ߦ¼©|¼rÆË/)_zõ;e§‡º)«­4ùoX•A§»­‡Ô³íį]©ü}ûaÊ ™œ;›U£÷µÊgw=¡¼bv[å«ÿgï<À£¨Ú6¼%ÙôN½wDš€"MTAÁò£bA±Wì‚]Äòé‡å³‚ bÆ•¦ ŠŠˆ Ò$ôÐKz¶ýÏs&Ȇ„�„²És¸¸3;åÌ™{&»›ó¾sf|ÎÏ[ŸY»æMïšÄl…¾×ÝÞÖ2 Lû{øßžŸã~ïê²+ÌÝ_ü»Åä§Ë‡‚·�;L¶¥‚ß½ú:øèãàóOœ6v–ÐjÑ;F�*2 2 2 2 2 2p8Ê8œ!-—�������Jd€aÕªXÂZâ¨GŽæ=ùãŸ™Žø©5xÚé'‚gœÜ ¬i…_}˜^óípiÓSÁ·4óâÏ�búÜã~Ÿ›»¼¦ë)¤dðîô�gòîñSî;<¡®%Ÿæ�çu§ßù 8ÛIàÐH®ÿÉ,Þ»Þkô…à9ÃA«ÔgŠÀþÂ�ò/%lÿ0Þ¼ŸW"»Ðó¥'0 ÃÊ—¨>¸¦Û~: t�y8 9³!ì6æYœuzð­ ›Àõf«îáë@C"¸fL ãê±1íÀºø_êâgFÆì/8î@Ä€›Á+{R®unjõŒéëW/oýd!xé ýÀýÙ˜,¬8`îàKz�íjZWQ,¦‡�ì ~ãpöZ:i\»dWŰ¼Ú°©Š È€ È€ È€ È€ È€ ”Ò€2J)N›É€ È€ È€ È€ È€ È€ È@0¨ªæ.ï¸6§ãœ=ö"£Ó+2ÞûåWoƒW¿“¹u8ò¸Ppýúm`ÖŸFÿÒ‹8ú}`ñäðNoÏqi §å6 „7u3^¦d1þ¼ð¡»À�÷{ûíÎôă»÷ñ®u_Úp£�w¿ŸÕØŠ£cò˜•’¶ß–—Àž¦Úuk€ô¸¿ØÃxDaÆÉk×ât  {ý¹¼Ì†ðR†ÍÙ¸7xÝ™kÀÇï Î=Ž9CÎêh—–Ò‘—gvÝ&î¿ñÀ:`þ_ ¾jÜ”¹ Žod(Ôο–æ+áÌkHN <&.wÔ`ý Ây lÚʯ½dW…M°¦"2 2 2 2 2pd”pdþ´µ È€ È€ È€ È€ È€ È€ •�¢#›Au(¥nlh6mÑóCÞ×=pê3àÍÏ v{yèó¶¸îÃÁ.i g‹ÂüHüß7»™Ü¿ÚæýççßxzþGÞs=;Ÿ-ozgÖr†ßDÊŽ,sÉQ/%m^Ùvg�¨°£à|‡£°%y›ïÿagî@§‹n߬32N»˜ìÓùCðªûç‚ .l ž[¸Q»ÝôyùŒ%ëÀ¬�…¡q}¾øx5GðœÔÜÿ‹Á±þYµô%ŸÖ+ÎyÏÚŠ5×o§‚îuôµù¶²þ”lŽhй&+rÔ(ÙU�MTd@d@d@d@d@dà ø+å+Òæ2 2 2 2 2 2 2 ßÀþÀgÅoi™¶Ð»îÔ÷î 7nÄîkÆó¹ôÞÝkÁS�¹­‡€mÂØWR}@o°ÝŒéà¯2;à†A-À!Ù>uårpkmFŒû7  {L{ÌÒç ðÞ×ßß çè}1/À³›£Ç/YØ:�Ö¬ËõÏ:ñsðáÉï‚m"O;Uc›w®cn‚³%×iÍgÔJbÖÀ7?ñ‰÷›š7#ìÌ HŒ)¼=XT pÍêÕÙž.—î`VBÃPˆŽ+aû±MÙßf×WkyDmšsìýQ<Þµ+¶€iQ4P-¬ð\+ë"®:ŸÈºq8oMWp`5ÆäCâ¹m¿!�ÀiÏ𩯵¼Öšöý5 |ážåî×tkj'Xv 0ƒà³7æ‚­.eÍõmÌøvkKiؼ£!­Ú�%´êcNÁ»÷> ~ÕøRð¥Q­@WÊ·àí-›Üt'x]žÍUï?Þ=·18æéaàqT¨"2 2 2 2 2P¥ ð¯��������*b ŠfØCø÷Í f€Ÿ¼½ÜÍ ¯-<ŽÙ­º1VÿØE=Á¼·×ê…éûîl¯¾Á­ÆÞ2Ló1ÀZ³1£²Ã®â:‡.áXtüå7€÷FN}ñipÊ.7Ç;ÕÛö> d´ÅΈt÷Q×�7¿ÁHõ;��'¤¶¸F'€7�e<Ùæà}æg^Ò\ôÂð²ÙŒu·qøÔàZ`ñú{¸U»!瀞˜Þ=j6Õ�òWîè– ýX»,K:*[ú13#^IáØ ~š¯Ñ¸xþmƒÁÎEƺ#;Ä:£:O'Þ=|#–ï‰G×­Ëàã×| ¾ðÖpÄ–lÐUƒ±ôÞ—]Ž:1´ãÿáŠëø¡Xå–)àK÷LWïã/Z�¶¼¢ÆÜÑlHÙ(%¼*Ì6~3‚ƒ×Œw`fàñÌñZó9¹¿øy�{ Œø°±~Ê€ È€ È€ È€ È€ TEÅû ±*šÑ1Ë€ È€ È€ È€ È€ È€ È@%4`OIIÁa5hРœId ¢ÈÉÉ)EÓŠLü(E�ÚDd@d@d@d@Ž�¿Éí-zÿv{áyÉ¥ûF�ššŠÝ)# hçZ*2 2 2 2 2 2 •Ê€:*ÕéÔÁÈ€ È€ È€ È€ È€ È€ È@ÑÔP´-•�������Je@•êtê`d@d@d@d@d@d@d hê(Ú�–Ê€ È€ È€ È€ È€ È€ È@¥2 Ž€Ju:u02 2 2 2 2 2 2P´uíGKe@d@d@d@d@d@d RPG@¥:�:������(Ú€:Šö£¥2 2 2 2 2 2 2P© ¨# R�NŒ È€ È€ È€ È€ È€ È€ m@EûÑR������¨TÔP©N§Fd@d@d@d@d@d@Š6 Ž€¢ýh© È€ È€ È€ È€ È€ È€ T*ê¨T§S#2 2 2 2 2 2 EPG@Ñ~´Td@d@d@d@d@d@*•uTªÓ©ƒ‘�������¢ ¨# h?Z*2 2 2 2 2 2 •Ê€:*ÕéÔÁÈ€ È€ È€ È€ È€ È€ È@ÑÔP´-•�������Je@•êtê`d@d@d@d@d@d@d hê(Ú�–Ê€ È€ È€ È€ È€ È€ È@¥2 Ž€Ju:u02 2 2 2 2 2 2P´uíGKe@d@d@d@d@d@d R©TG£ƒ‘��r6à÷û±¯× ú|>КSλUõ2 2 2 2 ÇÀ€ÝnÇ^FÐ�N'hÍ9M)Ó]*# Luª2������¨Ø”P±Ï�Z'2Pa x<´Åʨ0�RCd@d@d@d@ÊÑ@`6¨õ=ÐÊ  î?¥•PŽ�ª–�������Šf ¸»1*šMµGd Rp»Ý8.kD€Jy€:(�����b°ò¬L�ÐÐÐbnUÑVSF@E;#j� È€ È€ È€ È€ È€ È€ ”£e”£\U-2ì¬q” ìçQí—����²5`}?´¾+ãxÊ(ÛëAµÉ€ È€ È€ È€ È€ È€ È@…6 Œ€ }zÔ8��ce p„ØcÕíWd@d@d@d "|Ž€Ýn¯ÈM=¨mÊ8Hˆ^Ê€ È€ È€ È€ È€ È€ È@e6 Œ€Ê|vul2 ¥6`õï–zsm(2 2 2 2PE X߃k¤eT‘‹S‡)2 2 2 2 2 2 4 Œ]2 2Pˆ�Šð¤€Ô»Ð²_þü\ü7¹~ó&pûž`®'ôææ‚®öêÖªVƒL$Û·lö8¾˜\»¨"2 2 2 2P*Â÷Æ’—2JjLëË€ È€ È€ È€ È€ È€ È@PF@Ÿ<5]d ü XO (¿ú Öìñx1sÎ/‹À¾™ ®LY úmŒù{}9 '—ôz8'Äáç4aófrþæÕÌH7Kߟ>�ó³Ý`—ãÛƒ;<µw04DoþР"2 2P% X÷o§§§ãhsM&�ÛÍÏG+Š{ô?ñ«„ôcz�ÖèýcÞ¡¡¡ Ë壣£A§Ó –m Æ«He{ ¨6������¨Ðì)))h`ƒ *t3Õ8��Êe '‡ì’–°°°’nRêõK×ÂÒíî×e¼ÿÿå÷?wîå¸Ù9™ ;‡‘ÿ¬,F0Ünæbï­ÓÁ§Ô:�+`³efs�ê.övo^³ ©™†‡±·;'›ž«W‹mN�œ\5|رEWPEd@d@*Ÿ+B›‘ÁñtöîÝ Zq`+VlM[ãÊwì:"Ë€•ñaåƒfÄÆÆb…¨¨(кÊÊX龩'›àPí,Ý÷ÕÔÔT²2Ê꼫������ºM4N’š(2Pù d›œˆ o¾�Cûꇟ@Wcþ7#üÙÙÙ`t$#ÿIIì±� g6DB<#ÿN/™•Á5·í`ä¿N$ïyÛ½mؤyuÐf7µù¸Ž+Ž£Ø"˜�ëØ>÷é`ÇÚýÀ‘C¯##"@��vV|ÕÊHKKÃáD˜Ï8ÅÿƒýÌ–´ýÖ<ïVvÀîÝ»Q•ÇÃoJqqqà¡âí%Ýcp­¯Œ€à:_j­ È€ È€ È€ È€ È€ È€ ‘e‘>m,2 %5°sÏlrÏÓÿüº cŸ¬+‘÷üw>¾1¸m#ù1‰Ì HªÍ1¼YÌظ‰÷:Z¥N2LjI3SMä?, ÓËþÞFÅ0þä-Íô±¶pø�‰ÇôÒ´àC¯¬ï¹â106е©È€ È€ È@ð°Æ°r¬ûÀƒ÷XÔò²5`� a]Öbž£d=M l÷UñkSF@Å?Gj¡ È€ È€ È€ È€ È€ È€ ”™=5 ÌTª"��â(ݧ¥‹µø­ \³t- ¬¡àtZ&cõ¦=¦nÝúìŒðçf3 +�¬•ÌD­øhÆÿ­g{�ŒöÛÍ“ÒÓy·Viáq33ÙŸk–úv±6Îñä2#`óÞ¹m]ŸÀõëÔdJ€Ó<}Àå⸙Ù|–rx(GÐÛÿÀ¤f¨È€ È€ È@p°î·FD·¾3Þ\Ç¢Ö–·ëjq»ù-¨fÍš •/p$û-Ý7U=5àHœk[��������bÐÅÒ¤•d@dàH ää2ª?þ�IàêM# Ûd¸s™àw“¡æV­ø\>ÕvóvŽdâä[´ßÉø¿ÏËuÜFõ}~Î ±ñÙŽ®ã aü?g7{µýÑ|‚À–�|frúVêð1 7�Y»œ\ÓoÖ�Ža�{w²mæ¡¶qÄô£w3g!<Œã¨È€ È€ È@°Ø·�™wV€5|qb­ÁrtjgÙ¼N¬+'!�£/U�b¾xV�ÃÕ‘Ê€ È€ È€ È€ È€ È€ È@Õ6 Œ€ª}þuô2 GÅÀ+�ý,]¹ ôÙ�`¶‰Ïgf±7ÖigdÞåb¬~ß>ÎÉÈ`F@xcõqÕÉ÷s[NsüçeF@viÏæ¶¡Ùœ¶² \1Ì÷æ€>Ÿà0Ï °E²¶ßüCÂ8F€+ŽUçær�Åk�?âH×ýß­ Š È€ È€ ‹kl� ,ç«"´ÓºZ¬+§"´çh¶AGÓ¶ö%2 2 2 2 2 2 ÇØ€2Žñ Ðîe@*·�EË×à?�û+èeØ÷.2&ïñ1zï·1&ïõs�ÇÇÈüNsŸN&#ÿ™Ùd6“l~×1ƒØœˆñãÙ6Ž��ÅÚ\¹œ³±o7w7—Ú£X›ë"/ –wû‡¸8Çaò œdV.«öø¸~X8×ñÛ™A0c!ózv:<®y'PEd@d@*¾køÒ�Ü^ñ�N-,VF@y<+ª‡¹ÃßÀdXOÈõp©7‡Ks=¬Ç*ä ˜šÍ@6O6ïí�Îf„?4Š~G:³2ÍÝnFûC\&SÀcâÿ^®ét˜¬NÚì~~ØÍNrL=;wgbΓ¯N§ŒŸZÏ/À„Š È€ È€ TXû?g鬰§¨Â5ÌʨšO—ÐïI…»Õ ������(?Ê(?·ª¹"ØûZ3¸ÖÅàŒ>Á�_\šáØñ3h‹{>š~k ÞËý\øà‚%ãÀÎú͆…c]f-\Š&¬\—ʆ˜çX=¯VF€Ýn½bôÞgc8Þïg€ÞïæÝþf@›×Í¥6·É0ùv§ ò‚øñ9Œíg{ù|�l“àâ#l;­¿É5ð³J›©Àæ0׆ÏÄÿýf¬�PÓ6T‡ur=¬?+“\±f 8ëÇÙà€“NUd@d@d "¨šqÝŠ|F‚¥mUóÊQF@°\Ÿj§ È€ È€ È€ È€ È€ È€ ”�� 7ôC9³Îeà—9ŒJ¹º>.ùñN°… ‰a¢È’Ž¥_]ÑÒÎzr38 Àߨ3Ó˜`·°s+«bkÔ�›kFÅð½Ñçà¶¡¦žÌ,n•a¶uš Þúä}ÌQF$¨È€ È€ È€ È@¥1 Œ€Js*u 2 2 2 2 2 2 2px"#`3‹ˆä³¬³½ ¾ùÇhð‘ãßHÿ.>õúõ�¶‚¡á|.·y¨6~ªÈ€ ÈÀÑ6°aË6ìrÉâe '/òÏØ»ßDæýN¾×ù†·¹LŽ€uç¿ß à·Æ0[YA|+¨ï79y¹&§ÀoFHôñ2ÉŒ,°7”}»Y~îËkžà3÷ü[Ó+%€;·Ycx½Ì  å€!æ�6ÇŒ&`aãÌãl¿ÿý¦7lÙÖ«� VÂâÛ�ƒúpìàÜNüÜùï95ÁCõ”{½�¥N ·›_»ìNå…®ó÷›ãÁ»Öõ'ßÛŒ7g—¶ÄŸ±5ß~ãGpìñ½@Fù /ìWÛüûÕ¾Lkžzf øÕgi Š È€ }?/Y��ºMøžwðsœ¾SY�xŸy:€“÷ù8?"Òê“åºcÈV17ïcη;L°Àlë5¹aÖXÙ âgGðý³zßýLFÀ;à7Ù^.õäðÉÖÈÖ~s͘,+ ˰¾¡Ãë$ÆóLŦ;�‹“¸~ľX0ªèªKÚ’0Ó’hÖœxÈ4,Ì+%i¹µÉáú3×cÕÏ&~Nûe3¸ÏÁV5ë~ xí%'€�™ê§"2 •×€Ÿ£•ýõ-?³¦ý°\·‹Ÿž¶p¾?×iÔ<¼?Ø%‘ M˜нF50¼èϬqô ßów¯øüèëÅàâ”�à¾\~–EU«¶íʼ¶s´k2 ‹Uü{~ÃzO½Î/"—ÜÌÏ‹ÈF±!¨W:ÌW˜ >65^d@d@d@d@d@d@dà *#€±¨œäÁàU=¾ïx 8ó‘^à@� +Þ5˜ûÎä¹`nû»Àa-—øò3 ÐÂþ¹Móx‡ç˓޿œË¾¨÷€îpöÌ5îÄ(Ó÷�oêÍÞ¯|ñ£¼'Ò_Žù[dœê«S‚ã~œ6{)¸)ƒ]dÕ›u]û øÈUìåJ*ÐñâßË»ˆ§O|œú û,aäj[&W�MfáIç�½ï°uPHñl™ƒ¹Æ<¾úù¯`Ê>žÜê­NÏ»ñaðÞ^sÀÁ­î“&m?¹�±¯|Å¿/M~|ðyšü~#<™.šiÚe xÙ]€7žRtáÉKÎzéËOÑØ[_þ®ØÄXŸ=¡6بUOðŠ'^¯ëZ%cÍ7˜˜ò2¯Šg̯NÓ|‘`Íæ4<ø:éÃWvì@‰KNÊרæ™ƃ“¿¢Év³4&¹-Øû¼Àûî¹ì¸æür7×éù [òQ [öòCà“9†ÅÏ«w‚Þzkß÷BðÎq<Cš„ƒ…?�üù6ÏÅ}ϼÎYÆ8jV8#¨N½|àÑÞ ËØÌÈWоÆrs3ò­­ea`Ñ_«P�÷îÌ·îðÏh6'ÍkFþwçò³âñ3:€ÇÜáoÅä�N¾X±ú¼Ÿf[·¹çG$ßmgf‚¾^‡ë3xN]ÎÐë"^óÖcg^󼛓6»©Ác¥ìßæ[{´žbàósÛ…‹8òŒ€ÜÍ‹PÏKÿ�.�JùÛ[XñglÂì_WrYÇs/¯lºÒ7€_Oâ{ø/qÎKcøŽQ0†�»væÿ瓽`õcSû‹ç��1yÛ\Ú²SK0Ö¼“ø·ò]ý£)+ÀŸ—ñwsÈCýÀ�ÏMFqÍ.Mi;ÔE‰«¾û üfŸP³£õÿ�ôçïé„€žömÀãÌ9�ÌMÅôÌ�¸æ¯‹xtu†_Žp «%ÚÕ?{ üßšê`—Ž|gÎçÑí^þøú‡�‹ÜÁnjþøŸÉ`±Z>¸6ÖtâÿþR´C›? +.œ< œ²©xË#À¦vÝôWÞ~3üß•-Àïæx¡"2 •Ä?>·ÿ øÌ×nðäóÏ/©ËïÈ9{v�ë×å‚ñ)a ­{`ßÓ+JáQì^ÄÏ£‡&­ã{ž^zF=°F8¿¥ìÙ´üîs~z>´¦?8æZ~ß®Ã/¥(Üã>ó}i�§a)¶×&GnààïFG^£j�������¨°JÙ‡S>ÇÞ!·—‰s/aæ�‘ì]›üå“àéç1vT0îéYò&æOù…==žf”µÉFŠXW¡ÅÜÃóÃÆØŸÃ^®S†\iÆú=)3Á7'OoÄP”á\pt!ã0{1åô›Á3gägg§!à Qì!‹Hã¶ßMcû_¾~!¸ÊÇûmf\× Œ·x×2Ò{ß]Á´nƒÀ¡7^ &‡32¿ø#ÎÿIÆŸÛÉèý’WÏoõïd<êÆ>gƒ/­bïc³€×›H‘{#÷;ýÆ>à'´ÿaÈÐv"‘¿øÙg9s4×Čƅ¥n7ϲ üÛ¼Þ\îÞ à3[Y÷ðû­m­Ä®a³2 œ!v¾pòŠj–Íw”xëÜäH=‰‘ ÓÔc½Ûäe`îþ,»Ù±ù·›§X¹ V›­6ø=üí±›höêõ)ÜøˆŠù-þkêÈ=y$8¾OG?º§ÐZí±|¿q=™¯$¶ÆË!½€~°ÜÁŠm5¬Cå¤ÍŸþ78ñùßÀ†ó÷(t2£ÓÌ”Ø_ü5Z`²Æ®wídÀ¬?ø¸u[UçÄF`·¾üìo}x^7~Bñ9J2?GZ´1Óyàú«>|¿ýdð…«Û‚áø�ÏÇ-KÀ©Sç‚ ÖñSÙÄÚN>«èý”ß C/¿<¯>ß³Ýò{àM3ø®;ª'¿~ñå2pµ•ÍZ—ŸDg ?ì_?¯E˜.¤¸×cæ§&§,ôä‹0}ç¹õA«U?ùH@IDATÖúõêò{u›&QàãfƒïýÆÏè›»qNæ‚wÁ¾bK?Ø4àsÙ³‚­Üú"¿ùŒxjXÿ§÷Àßæ7êtyë5ß‚ö¨ãÀÑ�� TÊÑ@àç~9îFUË€ È€ È€ È€ È€ È€ È€ T®§ÅcFî1øØ9ã¶/ÁÏ' ¦žËRm†Cþ-ìUšoâÀG²çéµóØwåï1k¢�Þ„¥ƒÿó#¸"‰ýd Ù�õo�©-Y[»›ÇxûCFŠ[†ÕÅü®]¿~ëspëÅW�ù¯Ì(¬øØúúM·ƒ_Ùϧ,äùº°^À©²Ý�9#Ç÷»ÝCŸwM¼œ}Sc�íû·x–crÖš+ÀOÿ`–ÁÀê®ÿÌ:’1½!æê}í›ñ˜î7ô€ißúI˜sûCóÀ}uþ|÷ç7Áaµöãƒ93®=<ó%/hc·l!å0×X![hÖ‘ؼm'ªp8x¾Ü>¾#…¸xÅÆÆÄƒIñ1œãdß¼Óá7oßæd§“¹Y • €‰§­9y9fL�pó.´ÓÃßžæ~þNÕÞæ·%ðzXä\ zÌÖX!fÔ€'¯jŸ+”KÍè¡vN;ÜÊg²­f�¯.N³ºµKRø­¸Æ‰çƒ÷eMïY̯°�ÝÆO·‚#þ`¦J98ÄåPN{Sµ2 2 2 2 2 2 2 ÇÔÀþ€Ä1mDàέx—=�½]#ήN{k øÞÚËÀ›ô\¤}‹9¯¿·Œ?“ÚÁ&³ôÐã`«DÔ7¹û_üdï]ƒ>}Àæ!߃[̽¾^ûº öì9ª Áü[¯b<§`Ï™«9—îp/8ߌŠiÝŸ˜`s°±Y  °ÃÞ»~Ý"À—?Þ nÚŸŠ-Êxp3ôþŒ2ùÙ¯v×­]À‘e¼0%¢ÝµøyûPZú~ûó—,¼œ3åmðkwcY{6²rþ(ìì߃ñ®·>œÎü“ÑÎÝ!yW¾�5ßœŸ†÷~w{¿%V2Å×?[pç…”°¶}1·Wíqà_[§JõrµÚÅØ�oí4¬9e6ÛVû"šìaßøy ÄžÔ/Z‡,ùn¸çF¶Ê<?­ÂÈXçQ·ƒ§æX MNÊ)ÃØÚø)SÁV³µ^ÜéÏkŒqËÔ/>çe²éîbÁÙ�¹x�bêéË•˜<~â� £«…–¢¯±B7ÑÌ#3à7ã™$&²g=ÂŒ�ï �Át\—“¢ùna·ów';;Œ ‹#ByöÿNa7±%Øü¦ãÀ¼'§” å%sèOç{fz(?sb)# ᙊ ç:{Ò¬++ÿ z%2 •Á?#jô:¼lóÇà�¼Îît<Ø÷$¾wiÈ÷ÉïøxQ ¸Wþ�yó÷ðsíüÑÌójÆ/(­ðÿ¼³7�¿=}ˆO4?¿oôƼ¶¶y!õXL÷ïÏm¿z~ ¸�_:luø±_HqïâgÜg˜\Í|ê²–5+?jÖdýÞ¥ü®b†#°Å[ Å 2`}c ª&«±2 2 2 2 2 2 2 ¥5PtçTik-ƒíIè;â<°ÁëìW{cê_à cÛ‚VÔtǧ¯czúNÆ®/¸Œñ�À±ôñ²„…ñ Ÿ‹àÞ­á�=ãu¬0¤ïülÇ _aÅή¼Xs¯¦?‡'ƳŠWüÖøá&üi¢ˆvòšþ<«ÿÎe˜X¶™�ï�N;³Ã±Ð˜Y»Žì ±ýtðÞµ˜³èöêùr¿ï:¾>‰ÿE3$vZÝ€E¬¶Qî2ötþíáV�OèÖ*£n(ë®fŸ—§!Ê:mF“IÀ¼Ã—œ?M_êæû& O:üV®=;±Ò^èÊ—àHÀüv‚³H0ÅÍžÔhó\÷6Õ`Oðª¿VrÊÄü;wcÄïPõ8vÀÒöæé<†’ë³›óX’í´îá ôíÙ+å0¼jóúy¡»BùnÁ3FúÍS²s¹Rz&£¦7£î ñŒ*§eqŽßÏ5}&ÀºÃ¯0Ǔ˥N{Þm.,ßa¼ñ짯µŽ³ÚÚº‚¯{æƒ6“kàË{*¯s‡©Çn®@[[h]ã¹ærôšÑÖRóì,:ÚÅä³ ¼•õžæ7eïæ0=ëãÁÑOò¨Ÿº“ï~±Ëx/úæñÞûkïïÖ´ÞaŠ|#kØkŽºº˜ÜŒ�’êµ™0ÚDoZDDEìq˜ßí\¾?Dú[ƒ‰1ô<üZî ½I"ø–f�j‚9C/îkQŒˆî Þx?Å’ëüá[‚–˜÷ƒ:' B=×'3—¤“É:ñ\È}Å:š‚ù> ‹Õržòô?KèÐ\!Öã|L¡¦ƒ‹¯$CA¼±^Ë€ È@± ާSì�ÊbE'?z\x9رÿZ𧟃Ÿ?ÿ?ðC3úØÍ#øWC²ùDÆ‹yµ²öö¤ò[eVb°~$ß“­·XL Økð»A-ç*¾ÈÛŠëXi‚ö0Fòëðë'šùœ´ùÍx@aæ/·ÉïóókB!åÀ6ûk¨æ õök–ä9XkÿY80kýü¹éþyû×*XÏþ%Gã§µ÷£±§Š´�Àï-©]j‹ È€ È€ È€ È€ È€ È€ È@988(Q»(}•aÝ/ÆÆÃ[>ŽŸú&øë��ƒÝB6‚Ó&ÏÓ›\^Ú‹QŒÏmX$ÌÝ’¼û VzúõÏÁy‹}ݰ“6w¾¨{IÇ9t±ÇXqÝC¯q¸%¹fb•Ÿ|œöÝBpÙÚ­àÞF†óõƹ³ ,¾ô4¼Lc€Ðæˆã½9±‡ìØá‚Ø8¶¶�U|û0Ï^Vd�îŽ}óf°KÑW‡¹»¸~§¢WB5(ìóËJKÝ&:—ÀØZ!-ÁÜ cnÛ¼>5a*øõ‚%àšÍ{À,ó¤‰À~Ŧ>³˜¶íÙ‹µsü<–—ñ\°cãš`\„²á-L_qÞs`*þ—Oñ­›‚Š/è>œžÞ<û†{ÁOd8»n"û ]NæÌð4ð–o€|ÅÅ™õ+; �¡;[\!Ý;ìÛËÍeÄ/0rεQV››ùÝ4P¯Çà™eö(Oö)†G1.b"�i{Ù�h{ؼ¶wÇç×€=‡¾nL>¼öÖgÁqí€ÕcótúxNŸ=�ç”×Jq‹i[ „šû¥sãZcúô3OäœâVrÐz¬³�î܃Ö*ü%ÏB¤qåðñŠM³R> _s†Ë±bqš[œkì�kÁp„ð÷hçNfšde2Fíóózw:y~CÍ]÷ÖXý9&ŸÅúe°âð>sx\BS¬Î+<Ç� FEðm.ÖÁßℸdж‡×ð þŽøÃ"À¬µ\³N8ß=þ‰äšá �Àó{i² ²²9�׌~âõñÆç㜴Œ ß<Ë ÌÅvzM�ÝŒ[Q¯NÌ©@Åä)ðÈYh¦Ëå£Áÿ�¿ç›âÛ€ï�›æã;ÉˆŽ‰`¾»èñºª—Ò8LŠYmM]¿‚¯å'r¿¶Þ†Üÿ¤`Îj[mpx]^Q*2 2PÕ 8ãëá�›ÕàgÓ¬]üÔöÙ fð{cl Þâ¶k¸‘˶ú+úvîÆœæ«s].,ãâ¬× 5û 8o>?7OZä7ìüÅ·ãO̘»œïêm/hòû¾«˜o8vó"~·È_Ò¶³ý~þ-Xòžgd>ÓóҲ͗èÀu4]~ôÙ\~nU³ È€ È€ È€ È€ È€ È€ T8 [Uà»]šýß°çƒ7‚LþZ÷ p‘³øôE­@®wØ’ùVyñÅ?Àì†×�Ÿ}͘Ÿƒ;§lžÐÏ0¿< #„+¦r†�}^ø|ÿöæï›aßá?á\¿`±Wk‰™­jðèg/û üÃÜl†‘>huöÍ­Y±,ØKgs2fØ¡�¹o ûgÌÚ޼ ,«Ž¹°mP[Sçટ‚Ûü¼{¶NÑ;ðoÅ:?ÿ&¸Æ¬ÿÀôO1}_»q'¼dÉe–A´Õ¼.ÂÚvÄÚ­CÞÍú\æ9<îü~˜k¾£ÁNß|ð÷EëA__ÎÉm`†Í¿cø÷6ÓEÌ´†Kñ¯±7ÑD™¨•È“±yÛ^0’¿â6»�gÖiî½÷˜rryެQ¬gX¿ n/ã9¹<§?_cM.€ßü.Ú3øž�eÖ‰·³§>g³bj€ÛönçûÿCꃮê ÍDøC¼‚FnCByqg»™5�›ÃvÚí œ“Í>{»Yǽ;íü]kת;x4Kîò°»·Ör´…®­™�P+žQëœ)àwS¹tSý^`�dº�rÖ"ù¦•¿xi,&„v³k0:]¿:×WÉo€~¢’Jê°¶:½¯¥§~v¸ê$°©møÙ[|ŸÏíü`7óôL¨È€ È@e3àç§ð²ï·ÅòS&9‰ã§D‡ðvËÒàŒÎé8¨x¨O W³vXzB4¿‹NÿˆY®Égñ»_bÎðûOƒ›}üDæ·ç2/¡üÎpæ9­ÁE“?ŸòòvPίÁo,{6¬¿û‚ßN×7êÞÛ) ´¾½¸’ù R+íOpÁræ´6kËïB¾]+ÁOæðÛ¬×Æ¿\ön“ÈOùÐÔ5àohàd3ä@H ÿ< ·ªÆ”Jù(ø—EùìGµÊ€ È€ È€ È€ È€ È€ È€ TìȯàÅQï\´ð’þ÷€—<ɨWdÿ;Áó»/ÃËn2s›£ï°­c"u|} °Woñ4ÆœW°óËÆ(yÙFü²2Ù¿¹û¦N2ÃX�Ä·ùÌÿ{kMLæ/¡Ýðzèàzà‹/0ÒþÔË·�ýna–DàÁù¶LÇœçßýôrç;ûóú�6zç9púXÖóQ�WÀ¡õÙû˜¯øÙžMkv‚ñMë‚ÜþpÅÙfV9¿ãxðÞYO‚÷~øÒ ö æïeÄÒíæ~C�Ðïàšuk¼hés÷ì÷Á[¹fIO›³ÙØèò>ãÀ_¾{¼ù‰Aà§ww ÉïÙÅ>Ñõ¾Æ`ãjÏf—º°¶:§»EÌ|ñqðëKy.V ìMÇœ_^àüyÖcß1u ÷;°…¦ÊÎ@óúŒ®/ÿg˜îæõœºƒqi»¹ƒÎzÈž´lÌÉÊåR»éOÏvóMÇ¥?2‚׿Ë0Gåh`ŽFÛ .¯œ< |íþÇÀ�¾(°QçSÁ1#yå|ÅL�¨øÍÍž¾œùíO`ê~R{ÌÚK¬Ûì1òpp3ë¬ù¦Š×•°†˜qÞ¨à[ïÌóè4ù}' ìˆév+–‚åSø�!áx~û½/êð£¯_{öp_.�1ªZ-°]W~G; X+àó×Q»+æ\vöpÊÔ—Àëü`Bµ:`�þü›¥É‡{ÁÀÞöD¼<¯íÇà´ÿðo��£;€7<8ìPàOÌT)C<¯*2 2 2 2 2 2 2 UÄ@ÁàjÅ;p{u´ið%g€ _¼®ËbDhø¥ì‘ªÉ¬â•¨žXïô“y/Ê'ß2ê{Í�‰à�§5£3-ÿé£Á×±¤»±l»ˆ2/ÔÞêTöù5||øÑ=W€m2F€]k1êµõÏoÁ)Ï3#`kÞqäÜTØÄ^÷ü¼ðsö5¾y{/°û‚‹ÀÁyϰoÛð›iß�Ùµš‚¡×�Kd¯0sâm?‚g=1<¿ÃÏ`ÿÁ§€j…�9»¸í’ïÙ¶ŸâïÏ¿lÐ#ˆ—…gÌ¿ñ…±à—§’‡²Ïï×ÓÙûxr³xз‡õÿù#ÛÜâé?Á—N« ö;­=>o&øÈ傎Q'� \”²b.¯Š¦ò Æ7 Ûõø_¢âh€Õ/á¿à·}¯?Ãú[v&8¨g0ΖnY±œ9k Øï½-à”3i¦l‹£ñ•¨ð©»x\§<0Ö…{ü¿óN†3`í‚éà'«’ÁnMyÔóñÿ@áœâ\cÜøô��4UF™Ÿlë99̈‰æÙk²rs=˜ö˜\€œœ\Nû€¼8¼ƒ+bÄ~Î 1Ï1ã x²Íš¾;¹üœ¶›§,†lÞ.0'Ýz²SÁõÍxU{Cø~â7Ïp›Qy=fÚgçµF+ˆtz¹¦Ÿ5{Í­g Øíf_!¬¹[›Æ`Ù–�CPá¤7 ¯5¤Á XpÓòˆŠ³)6¿æ�Q%U|㢆ñjÀU7VqS:|��ªgÀŒ×ÓúŒóqä�ð�•Ã~¶6=çZðµë†×eäÿŠÛ –ú3þÀ«§ßå¶fÀŸ¼e!íΔIÍ›øÃY¿^Žç×Ûb֟ЂÑû‘†ÅÜŒ«Ùù}¸IŸ³Á‡¸ÛBÊ f†ò¯¼>—�" ,ÔŒò6Àó­"2 2 2 2 2 2 2PE ˜ØSE?VƸâO»<§ö{à$Ç0ð²ÓxGk Š£>V9…÷ÛdÜ=|qÊÍà°g�‹¬Ùì>”s>šÃ>©9ƒÁ�ÿåS"N‡Š?›Ñ¶;{w)ïrÏtò¸êµ^>axƒ�±¬æg¯ Gís0óÕ¹Ÿƒ­ÆrÍI_½Žû”aú¤fÝÁ³ÇpéèHî±Í%ëÀBŠ3üäq³±èç.Ï€�=OÛß}üÉ &žI^lÞ™{¼ó2Þ½S§8¹Xo‰êr&¿þ‰nŸ{òà;3>_ýj/苪67wõnjUM¶½ý#ðc³œø,xõß‹a{ZŸ<û5ûUNaü°×t Ä%´éeØæÝ…ÍÀWÇ?NþŒ6¦LàÞÝ!1`õ†íÀ¯z¼´c(X>%Õvû58§Þƒà}Ï~~8á0+œGÝ~ÀàÔïo½c�?.ò•â\c0Œ§RÆ’â¢PcÃ8ëS62›Ã›ÈÜ §�±÷è¨Ðãsƒ9&JfÒ|æÖ|¿y¦@˜y¾¶ãVfŒ€ê.ÆöÝf¬��5ÔÚÈw�]¡ü�öÔÜnMئï‰í-�õ£Á].;è7õ;L(!ÄÉfÌ‚x3âq–‡­õš‘<^¾+Zk¶hÈßÊäñ Š È€ È€ ÈÀÑ7àݺ;ÝbF`9.FqÜ£*çu%UÎ󪣒�������B ØSRR° Aƒ….ÖÌÊb€±Äí¯�Öõ=8èÝà´óyV‘�£o ''§; +ûՌҵ0°¶?ÿ…—OafÍÆhfd¸™Ï2wû瘑ÂÍs\¡œïpp\�›¿­™ÙÌpº˜u’dž�Ñzûmë÷�{#¸Ž/›yÛãgƒþVŒìÝ\ôÆÖäüÔp_kÈeb�ÍgÆÀº˜ö:ý\Ð9"\™f…²N�7´ÙÙž§oú?ð´žÌ…Q‘���Šl`Ý:fÉEEñ³,ÈŠ�ßÌç¹ t¶dvj³šü–îØ·üê-f4Ï ï >zc'0߃¤ðZåÈ dd0ùùÈÿ".Ý7U+g³è#°Ûù]±`)Ý÷ÕÔTŽ'Åo–*2 2 2 2 2 2 2 UÄoU©]\ñ{=Žj`­åw{ЩC”�bh×®Öú¾ãó{¼¼Ÿ?2Šc^ääš¼€NgçÈŒÈu3Ÿ•Å9™Ù¼KߎLÐÎõcÒ“À'×ñæ0’¿;šÙqM8â®;ƒëlÝÅõ}dl*£úÛªs+�ÿ@/²Ãô(G›§ ÄÙùΰ1‹kææ˜L7÷ku7«_“ýOhÍ9*2 2 2Pá *jZáŽ{~3Í\~¸u/¿ø]£ª^+Ž�uýyAå@B™— ¾rŽÀ…2Ž@ž6•�������`3 Œ€`;cÚëÛºóV…6[$2ÆX°ä¬x 3}3ô' û•ãˆ÷¨^Edcòó÷qÀÙ›ã¹w¾¡‘Pö÷çš,O.£ñ~3>®ÛDøÓyÚç»Í|ó [r6GìßîÞ æ†ñÂôìÃýËÏõûEó¹¾e|3w9ׂõ8^ÀÆíœï5™6¿[ÁäxÌèIvŽ à5cÄÚLö��­õù8ßÉäÛØ‘g�!æ(øZEd@d@*¶+®ë3O䱞}S±ÛÐ:;ŸÖõ¼‹ æk²œ XW‹2ÊY³ª—������8Ö”p¬ÏÀïßýË£¨£Ç3Á†'� vkÇì€Z±Œ=ælþüôÝ/Àe{9Šxÿ ÷‚g°ÛQEd Ü ´hÞûèÚ‘ã̘÷;è7‘yŸŸwûg›§'ìKcl?+—÷êûüæž@³´š�#wŒM÷¹™)��¸ ܱ‡oÝÉMRÀíaŒáç6âÑ!œŸÐ\³ Lˆå^öìc�>çóóG„�ûÊõp\åZŽXpo6Û°×ÅùÃõ{thªÈ€ È€ È@°1ŸƒA™,Š+];­«Åºr*ÝÁæ€4FÀai± È€ È€ È€ È€ È€ È€ T&Êú³ÚáBÃsüðϘN›÷!¸'‹‘ÀÐØZ`ÓãyÇÑC70`ôàfœ�ÿ*2 GËÀù§õÄ®–¬Zþ³~+èõóÎü­;y?z&£úÖSd­»ÔBÌØþqaᘿc³v&în®cgnއ‘üõ[9j@ídþNglæœ [9š€+†õïM³Fà»�Ýd8|Ü6Ñ˧‡„›O6sŽ‹äÓ j7áï9 T‘���à2`Åu­'«;5ÆMp�¼cÔZ�‡ß—ÂÂÌ÷¥cÔ†cµ[e+óÚ¯ È€ È€ È€ È€ È€ È€ ö””ì¶AƒÇ`çÚ¥ È@U5`õÖ—ôè�fméZXôíMç}þw<=\±v¸/=ÌÍqƒó¤»ÃŽéP'Óµšø"ÀúI¦Ç6�ëûÝ âïÈfäß¿t…±';mïðÏÉavn6ó€\a­ÁLól‚­;¸Ôíå³ »˜ 0(“ôú¸íj?3š5áú#ž¼LˆçS‹Ud@d@d ¸ dfòsvçÎ�`¨yR�ò‚ë ÍÖzÍ÷"·›ßÁ’’’ÀÈÈÈ#l@龩Z9¡EïúPÏ5(Ý÷ÕÔÔTìNE;×R������¨T4F@¥:�:��Šl .š=Íãn¼¼æá àî=ÛÀÐ'è çÈÿvüÛŸàó2ŸÂøF½PŽüŸž´ŒÜÇûù]Nfre‡/CÒj“ìß­ÙL¬Él‚¥Ë¹mt$ëÌÊf6A´�ÏØàØ Ö ããCjµˆ/3T.$¨È€ È€ ©�ðpŽtÅgâìÛÇñ³¬é =5»\ dgsÜ¥ØXfYZWN¹î®V®Œ€ xRÔ$������(/Ê(/³ªWd@ 5�Ͼç)�ÞNxã=ð‹ÙóÁÈÆð£ Ý>Žókžý‘“¾ ÓÛë®Ó¶0k ;„ñüÐæ¸Ó¤pNtn 0)�1�åËŒ>kb#N'Ÿ,±‹5gÚ˜PïÔvàYW�Ã\Œ¢¨È€ È€ È@ðp8ã´îô¶îÏÈà(9V¼Wãï™-«–[W…• `e‹XW‹uå”Õ^‚¥eË™R;e@d@d@d@d@d@d  (#  $ª �(©�ˆpÞÿ×(FãûžÐ |û“¯Àu[8 €I°í`ßË1üwíâ8 ì½õæ$€9™Ìðx¸Rˆ“ñÿU™°;�®fÄDp/v/ÇÈu˜'å¶æœ+/»ìо+¨"2 2 •É€ÿ÷™�R+ ÀÊ °¢ÁVì7�•éØu,�¬kÀ¢uö­ñùǨš£X–”xµhZd@d@d@d@d@d@*¹eTò¬Ã“¨øº¶oƒFvjÛ üyÑbpÆÜyàï«W€‰qŒó{ì¼·?55ŒM`n®�Y!6Ž�¼=Õ Ö�âs"]É`| >¡ uÕ°f Î?mÀ)`¿ÝÁªy/\Ed@d Š°îý¶2BBø'�ug¸ÇÃü8ëéëV|¸8Oq¯"Ò*ÍaÚíÌ…´h�}—Ë…9Vü?,ŒÙ‘+Í!—â@”P iÚDd@d@d@d@d@d@‚Õ€=%%moЀñ"�8:¬žø’îëhöÝæær\ýc%HݾmXºüwpÃæ¹à¦�Ë8½c=“îä*xxG hžØ <¾gg0ÌΑš7a®Aýäº Š È€ È€ TMÖ]ân·‡x¯ø±ý”¯šçâhu`^€•Ê‘•Ê#/ÒÚ—•wPÒc,ÎuhÕ_°æÒ}£NMM¥‡‚ÕiŽ È€ È€ È€ È€ È€ È€ È@e5 1*ë™ÕqÉ€ ‘«·ØŠQEG°q­êÕ±u­êL� :m*2 2 UÒ€õ™~4ó «¤æ*}Ðå‘ePÞB•PÞ†U¿ È€ È€ È€ È€ È€ È€ T ʨ@'CM‘¨8¬{ÉŽmF@ű¡–È€ È€ È€ È€ Ê€õ½ñPK+æ|eTÌó¢VÉ€ È€ È€ È€ È€ È€ È@¹PF@¹hU¥2 ÁnÀ�UyÁ~Õ~���(?ÖwÅC�ê_~û=òš•päUƒ È€ È€ È€ È€ È€ È€ �eÍ©RCe@޾��¾IZÏwµžB|ôÛ =Ê€ È€ È€ È€ T4Ö“¬ïŠ­mÅi�2ŠcIëÈ€ È€ È€ È€ È€ È€ È@%1 Œ€Jr"u2 åg 44•{<PÏ(?ϪYd@d@d@*¾k\€àͰ +# â_ij¡ È€ È€ È€ È€ È€ È€ ”™e”™JU$2P¹ Xý¾�ϰF °F¨ÜÇ®£“����ªiÀz"€5"@ð># à¹SF@A'š#2 2 2 2 2 2 •Ö€2*í©Õ�É€ ”‡«W8Øï +3ªSd@d@d@d X (# XΔÚ)2 2 2 2 2 2 e`@e QUÈ€ È€ È€ È€ È€ È€ È@°PG@°œ)µSd@d@d@d@d@d@ÊÀ€:Ê@¢ª��������`1 Ž€`9Sj§ È€ È€ È€ È€ È€ È€ ”�u”�DU!2 2 2 2 2 2 Áb@Ár¦ÔN������(ê(‰ªBd@d@d@d@d@d@‚Å€:‚åL©�2 2 2 2 2 2 2PÔPU… È€ È€ È€ È€ È€ È€ ‹uË™R;e@d@d@d@d@d@d  ¨#  $ª ������ê–3¥vÊ€ È€ È€ È€ È€ È€ È@PG@HT2 2 2 2 2 2 2,Ô,gJí”�������20 Ž€2�¨*d@d@d@d@d@d@d X ¨# XΔÚ)2 2 2 2 2 2 e`@e QUÈ€ È€ È€ È€ È€ È€ È@°PG@°œ)µSd@d@d@d@d@d@ÊÀ@HÔ”UxÐêŸ&ÜÞ;3ô8 {LwÌ7eØ­‚yòïú­ºûé\ð¦‡ûƒµíÀaJæ�¯c�ÛW÷ŸÑtf -–�����¨l”PÙΨŽGd@d@d@d@d@d@Š0PÁ"ÝE´´ÜEt½u?{i 0P‡Ý‰9Õ+\М¹ {-—»›ƒÅ+ÙXí�_V�™ ÌP‘�����¨š”P5Ï»ŽZd@d@d@d@d@d Š �WQöÈy½ºµÀÐü»çcÞ]W Öó xc»@i¼Kÿ—çïÞ;|ãžn`ìž¿Áw^ùœþû0ÃUìÐÿ,ð†áÀÚ¦ÚLß;ê°ë�ÌJXþÖwàüµû@GR#°ï…‚ן\Ü>ãEN¿ÄŒ€4ïŸà…ƒ?9¢�?K˜ðøÈìÝ Û?<åÀæêr6xaÚàœ·�¯\X LƒHŸ÷×y‰}F·½r ˜ôÞÃà“þ3Á‹½ßƒ¯Í\ î´Åƒ­Næü[.§‡a@^ñí.®[n*¶ùîõ÷À·æýnæAØ¢jÖO<ÿ"ð–>5AõcA‚Š È€ È€ È€ È€ È€ ”È€þ’*‘.­,2 2 2 2 2 2 Ám 0¸ÜGRN­·Ç·GÍ}Û1ê>éÇ5àÕí·wá?JïºÿþW7Øid;0λ |g£ès_ޱ¿o98é‰Éàƒa£Áçϯ Z±w¿û/LOœÈú¨«o¯d‚‚mÝ7oƒýoؼýuàÀS¯ŸËz ¼bAGpâøþà!Ÿ`�ÆÒ“nŽN¿œZÿpRÞS8â@êçÌ/x÷«Eàš ˜Ðgœ3|ôy‹këbðÕg¦‚c]‰œÙ óÐÉ»År’Œ5wÏd.À—2æÏø‘`»¨l0u-³¶'$€êÁ‚�����(…ý=U iÚDd@d@d@d@d@d@‚Õ€2l™s_ÆÙ;ýûƒO¡« vo°{¯–à S~—]ÆŒ€Ž&% g)çüämÞdÂåžeÓ1==µ-ç<ÜlØl �€/ùâ7pÍ0FÑ÷�ûÏ™vƒ‡�g¶‰íøo³U;§7ØåÓ÷Á•¼àÀ„¼`=¦Ë¢p?5»wÛ¼5œûÏ °y3ÓC”µÓó–p�Ýn “€Ÿ¦T£™ËÎã‘6²UídLßpîðâ© Á?G0# Ã_”[<'̈÷ðH}&["<šûŒ‰c^CLÇj kT‘�����(­ó÷^i7Öv2 2 2 2 2 2 2 Áe@¶ˆÎŒÃ?3‚qþ@ó4�H›·wfô»Ë«¼WÎò¡`ǼO~ñü¥ ­ËE@§HÞo¿kýfpwúzpüH.Í××âÉÁœÜPF¶÷rõýŇ©õý¶rò8™Náb„ÜíÉ›Wæ?ì‰Pgß6¼çÿ�ùëÀËš5Ýþþê`ÌÿÎö¿ÀfcK¬â¬SÉùØöøFõÀjY4°9�–ê•À khÞïlðÒ?&�c¯â“Úôî ÔìšL'\OEd@d@d@d@d@d äòý•Zò͵… È€ È€ È€ È€ È€ È€ È@0 �S»Ë°­ö¨$ÔÖ°A0ôPõFräÿ¾�vþj0§§çþÆž”·0› ÿ÷Çù�µzbz̃§€� t¶Ø�Œ®Çº·3°â~ó,°Ãµ7ƒ÷õaVEÀnñJEd@d@d@d@d@dàð ü‘zøM´† È€ È€ È€ È€ È€ È€ È@°ŒJë1•v3 ~|¯v ïyÆÌíÈŒ€_\Ç�cÚÈ$H¬[s¢vr¤€-Žx°kµ¢âÖ�`åb»Ýôàø¸µ·@L¾°J؇iˆÏËûöóï— bÍ8�_åSæý͇Œ?˜§p |²�5B&þ-ÞM[0½�•ÙZç�ÀZw­^n�¬Ö‰a;Kꛘ‹3¡igð¢[:‚½êÿ¼ê‹EàÆ“€õÔ‘ *2 2 2 2 2 2PúCª$¶´® È€ È€ È€ È€ È€ È€ ¹eØü™»q7lLuØ�ÿz­X0ÜÄÒÃÛ2:ÝÃ1|kñ�è~%�`sµë…9ƒê> NyæS0þ2Žuߚɶ}›þÿȨéÁQ÷MÅøYüÂ-⪳ºÐ�ËÀykº‚«™Qâ£1YH¥ÌY¨^= ÜñçbpéF솲'(:Žã„D¶ûu~œôÑ0ËÁ ˆ[¯ÿ-ÛÆäëï3wàúSù¤×–_Áÿ}Èc¬qòY`[“*Q'µ°Õ®%¬y±¿.ئ!Ljó헭ݺ’xì±…#f«È€ È€ È€ È€ È€ È€ Æ€2#H‹e@d@d@d@d@d@d 2 �W¦ã*Á±d-|k_±ðàMì1Ý1kÜ”`7Ë“«)¦ûv㚟ÉQ.¸¶!˜Ob(£ý�¹tMþ|õþ™à¶L{¯ÝÓ'žÛ<’Ùy 6Õy"8ñî1à±'€÷¿t!ØÍT˜/ÐnÈ9à€'¦�w�š Fuãú¯ÜÁCJ´s€ã{µŸyàGÐ1ð&°m!µa¶-¬kp@ú·à½×1 `»?lÝûbð¡‹š€y# ”Љ=k¶ý|Ò‡à¶e‚^ó2Çg1Üs%ó2â” *2 2 2 2 2 ÁlÀnç6�O^ <kiàœ²šVF@Y™T=2 2 2 2 2 2 2ì)))hfƒŒT«È€ßH¸çŠ/Àäû¯o˜ñàÅœ¿^¼-uøáÝ]@Ž1 "%1�““S’ÕóÖ ËË2)ŶÚDd@d@d@d@*“�Ò}£NMM…eT¦+AÇ"2 2 2 2 2 2 ‡1ì=̪Z\Ù øq€{ûü+éxðâE^\]Ed@d@d@d@d@d È (# ÈN˜š+2 2 2 2 2 2 Gb È�ï‘T¬mƒÃïùÏÎÈ3·/_~oØø >_ ¥®XP‘������Êe@•ë|êhd@d@d@d@d@d@d HŠù©§Ò/ômÇ!~òàcवû¿Yï À{ÖÕK *2 2 2 2 2 2PÉ èo½JvBu82 2 2 2 2 2 2P”{JJ –7hР¨µ´Ld@ÊÔ@éžzV¦­Pe2 2 2 2 2¬J÷�:55¬Œ€`=ëj· È€ È€ È€ È€ È€ È€ ”€Æ(…4m"2P% øÓqØ}ý%8õÛ?À¥ö‚Y~W½6Ø¢}'ð¼á}Àöqv°”Å·¾{ÇÃàäø‹ÀÆœFãðÿÞßÐØq£?Óι™Ók‚ê�†„c_*Å5vì5ëxþþM¸ôîŸÀc9âÏíÇë«Ý±>+Ú¿ È€ ƒ} †³¤6Ê€ È€ È€ È€ È€ È€ È@P·q‰T52 •Ù€·|êpô{ÀÆýû�£†TÃsö�©›6€®æÒܰ#ÈÀöªd1÷á±kæ€mŸ¾”Xì£ �Âú5jÑRdó&·ô,g¦ÀÈWù¼’ûŸ:l\5»¦�Ä0¬©È€ È€ È€ È@É Tͯ]%÷¤-d@d@d@d@d@d@d RPF@¥8�:��r5à]‹ê¿�µtv»|캮`l`€¯+[ñã€Ò/áð¶¶D Š=²%Ö¾ò2ÉÅË¿æ-·úºå_T¥^©á²“ÅK¹’_Îe'K5É€ È€ È@%0 Œ€Jpu2 2 2 2 2 2 2P\Ê(®)­'2 0`w8Ag ƒ§¾=«±Õô·¿?ý9ÜœÎ*µϼððÿ:&€¬½x¥”uúsPýºy3À7?ç¨þ‹Rvƒ™vÞ«_=¹9xþÍÃÁäÙÿú˜cìõ2výÌ¥×’øo³¹º23¢ègøÓ`�{.}L»ø>ð¹AYàû÷ýœ´”Ï\pû?¯BÚlüHj}¹YÓŒ¿`·q¿ék8"úoÏçþÅç)ìñE‚õÛñI _ÎñzÕ ­’·ßË>ÅËšw]÷ç'à›³W�2ØžÔ¸=8ìŠsÁ�‘�S¦|ÎZš îñqtƒúí{€W\}&xBµ€~s/�ýú±©særL¯ÞšºCتõ�' ^{R 0`K¼² ÏÂïo< Ï0=düó38åíÙà÷˶€»½a`µúq9x 5ØìaŒIò‰Š³6V8z4ùüCà³Ûzƒãïë Öw0M·VTÔý£ôwßËøð¶–§‚WÝÓ¬åeÜ~æÔÀGƲå÷==<1. šêçÓ¾îpU×Þॣy¼ÑkÁO'³ÎÝ~îëžr:xûÙ<<ßFæJL61ØG_¬Îé1ÝÁ$;#ó›¿|¼ï=F€{_Æý^Ñ”&üi»À”¿×€YqŽ/ †‰[ÛpÎjFƒïó¸­y?ð’[†‚õ"²Àõ¿Ì§ü÷?àÒ�tûÔ9Ì (òÂÄr«Ð˜wÉtðÉtF¤/¸’ç}Ts6üò8ñ ^½wg±æg‡7­k´´×!*(¬øÓ1wÖ ÿÏÞ}€GQ¶QÞMBïzï *½)((¨(6DÅþÛÅ.*¨ØÅ†D± ˆ"Xè Š‚¢H•€ˆ¡Ho©ûŸw6HBHYBvó|וÃììÔ{²ÌûÍÌ+ÊW××Uqþ¦4sêüû¶oј5¿Z_Œ’%M¯v×öÊN¿Œ_oÓpïsË)í“z¸%­ûAƒó6Ûö¶>¿¥²¬ó±j¾Ë•´îKå=ÏUPvê×OyÿEE•‰ÿü¬ü`ü,åˆgl̘'í“SÍ»h�mÃÜçŸU>¾Ä¶¤]¿>Ê;ëYß×Û’õ{m™S€}ºþ™i�n}5VY¥÷¹Êû¯²¿ ![Q¾÷Öåq6å«XŸ… Îvzþ]¢á'î¯\ÙJyå­*F'*7ÿ¼Pùú+ë”ÛÊm}öîKrÞËîQv1¥Œ%sg!®°böN„Çzì?�âŒÌÃçлÐLÒ¶¶fß›”oÔZ¤œôé×ʱ�ØßšWK×Uö:ßî�0¸GŒ2Ê�(Úât w-÷ƒrîœ5Ê+YÕ=e¹õøvOYe¯.v¤ìsŸ¾¹Ãm¿"í#�I;|ô�·Ò|öí5O�õ(‰önD&såÙk}Fö¤Øùî…;•Ý_8ònÚ!�Çv©ÎA;ØÝ·Áz"ØûÞ#�ɇØy7Ò>ÙØ›˜† €ÀYübùï}@@@@ €²[. ]fW@Ÿ DØÕË/뮜9Ï®m^½z«2¹•]c\ܹéypLW ?r›]«œþzu�Hmî «Ê–óþ«œ¦yø}ïŸ6M.—éT}‹é:zÕ'÷ä¬bœ~òåU¨íid˜ÕHËžq¹ò±~U”¯“ÖHµ "%”™Ü&?«º3W^"¼B#Í>à:ËþƒíJòå³?W¾:aœòŽ�výöØÿYŸ‘ƒ”×n\­¼ge¬rsŠõ¨—U7½'‡c ‡T×4-Y—€YËW(>Ô@Ù2Ýݬz¼â»UÊ=v”›×>æ*5Eú–kWׯØÕEY1íÃ$œ§T,ûÑjò‰Eë)Tq>½yùj)9ia¥jjò^C*7ÿò¤rúšÍÊd§G@ˆsÿ‡˜.§iLÓÉS•ó¿µç&¸~²kƒ í3SÃÙd™×f ªT¯†²TÊwÊ…‹w(ûö¶gd,Õk¤ZHuskZ|žò§ Ö� ÜYv‹e5ƒÞ³fÿzÔ­k½�<Û‘ý1îLeÍJiwÆž ûëÊ]vK €9Hû%³1) € € €ø£=üñ¨±Í �¯ž¸¯µ¾£×)£Ç(«•³+ÒK³s©ûâ¬"7wúBå¥OQ>x†sõ²S#¬Ü³ŸÆô›÷’òÍ_Qnëgw hYÅz ;÷„ß²a½†×GµU^Û£²�×OæÍÖ˜Ëekªy/:·ºrñ„”ÃFïTöo[IíÔ~7ÿñ�†‹�ÑGÙ½ª­«xuÛž²žùÊÏ?üVY£—� qÙö׫g×3§+Nëõñ›-9¦fEeТ%Ê÷¦Y{`C[Rr߸ª=%¾óÅVýâ¾iÊû²jêù=+k•²+ð“÷[/Œ�¿Y½ÚÕæBÅ€YËÙDyoVƒ];íCåìD« 7©n5Û %ì—é�¿íYîïSF·´w½ås dѬ(œá΃ÎÒ”_Üó©òÉ‘¦4¸¯9T+b}6,™£;뀲þ ÞÊŽ™Ü,A£3m¶ a!±ÊwGMR&žÛBY«¸õÔØ´d–ò�…¶–ZtU¶±BµZ>‡ÞdÌ”-÷Õ[V9ß^µŽ²NUëgQ:"Q·b®rîßáÊ}í˜öH»K·Ò˜Þ­ísòÜÄ/”)Éu•מaK°=ô] md—¶\ª|n¼ý½~doe·ºÑÊ ýÿ*ÿøÝ£l}Yeýˆ†ÊK.i¤\òÊ[ÊÛº)ûµ³IÊGØ”vnUþ¶æ ²Ñ ^Ê6Q&\«»MÙöËw•  ½Èþõ¨ç�¸UßiøÃ9{”¾ÝI-‘† èö›†† € € €…DÀŠ4@�c DZ�ºNi«Κ3Cù•sïC)V•Œ,UAÙ •UþŸ¸Àj€-ÓÔcÝE­¶9tĭʪ“¾RNÿÔêÉŸm·úmR˜ÕÕ+Õ´êe§óŠ(³sv6·Ë´ðk÷¿Qù\ «š¾óÅ|åK_ïVp[�¹| «_ÙõHy1¤žÕäï¹Ì®…~þÓÉ6üµ½[ºí@åKw8=ŽL®qÙi¶—Õú\¢¼ù¯÷”ï~8FyKŠÝ_½Ù¥·(Ÿ¬jÃa5»+¢¤òÃ�(§¿µD¹eŸU‰ƒ‹Ùsj6j¢tnû´´ëÙRùÚ¢…ʃíÎSvH{¿½öI ²^½ï2±È�í30yÞåˆ�ìotJ¸m[õæ=•íõcÍ>핺_¥|1ÚúnLøÌ>Ão=gwÅ+\E�ONÖ§k¸}è‘=s—=Ucî}̦ykÜLå„glÞ½Nœê-í_›«n¨œvûÇJ €ÙÈÎwÎì/�)@@@@ @ ¸cccµ�11v¦Ÿ†ä�@|¼SËáÊÂí6HC2 $þ:I#¯¸ÿGe³ûQÞÕš12:1@ pr÷�:..NôœÏ{‚ € € €Àqìâ@ € ௞}Úòo¿øA¹­B[eŸfôð׃Év#€ä�=òÇ™µ € € € P èP � €Ùðh²[6)ÿÚ}Ðò{»{ÿ«‹¬¶qÆm]• ìÁ4@ÈR€YÒð € € €�'@�€À;¦ì €,`=6ÍyGyËG›•A%«*Û_9Tù¿Ó£•nýÐ@@ kzdmÃ; € € €œ€;66V;p»Æ!€@ÁÈÝSOÃùxÁ=¦l € €@~ äîu\\œ6’ùy¤X € € €'Y€'ù°z@@@òS€ù©Íº@@@8Éœ8É€Õ#€ € € �ŸœÈOmÖ… € € €ÀIàDÀI>¬@@@�üàD@~j³.@@@N²'Nò`õ € € €ä§'òS›u!€ € € p’8p’«G@@@ ?8�ŸÚ¬ @@@�“,À‰€“|X= € € €ù)À‰€üÔf] € € €œd��“¼~V_�RþÔÖ=Û¡�òŽ•*§nyGyv¸¢�¶CßÞ«=o{ÎÛÊJ�-PN»®Ž2X?4@@@ÀèàG‰mD@@@ÀG´G@ÒÖ¥ÚÁÉo¾©œøÅ×Ê¥«7(·ìŽWº#¢•åbê*›¶é¨Ñú<Ðßê®Å³8e‘¸ý7½»Ñ¹N›»ˆ‚æìW~ÿñÊ�)e�iâÑ»;g¬œµÃ†Ûsj—;RïÇ4µÏ$ @@ðG�,þ{í�»Â6#€ € € €Àñ D�ÏÎiÚÎ{n~_¹!üTåð/g(hUTyìZÆžPë˜ÅÇ~¥÷Ÿ{ø åÛ_þ¨üs§õAˆªÜXÙé‚›”Þ{‰²YtÚ»Ê'iÌ÷Ø4§½nuâ)±v yø˜G”£Þþ\¹øw»o|rTUeÓ.ƒ”w�¼GÙ¯V„2“æÙ©‘ËÞ~L9ü¥Éʯݬ<VFYû”³”ƒ‡=¬¼¹»-3L?ÿµÝ4Ø·‚=aûcv?üWíRŽ»ûåS/Qn8ÔBùØö|û;ë+÷ÿ1S9~ÌxåÇ3¾Qþô{œroŠÙ–¯kûÕ÷Û¯G¯n­,™@¯óÖR¶ÛV½5b¤ò�ϾU®ÚdÛœR\Y±VSe»ž—*ï¼°²Uÿ¸…¯jüðǬoÈÔï¬÷Ƕ»OD…úÖg¤ïÐû”]Ó^YÖvוòÏtå�çU¾¼Èl“Q~óò™ÊÒU”¯®LJ¹Y9úë[1ðñaÊeœµÙ�iT'Z™Ü˦yÐý¬òö±k”M†¾¨¼©­·O‡I”m]Qé51ýã7›ê·©·({?ù�òßV&ö5Ý”EöÚ±˜=éSå˜ísµ.Åžk0ã;v©= 4¤Þß?¬ìÙÃ>WK“ì“Ðáüë”í+)\[VÌP>س³rj«Ê—íiº–�£�nz^ € € €@!ðþï¦ì(»ˆ € € €.WÈÉFˆ×ü¸p±ò�ÛÊôÝÏi¯´«ÀóØR6jãþw§òK÷yÊñK¬†<¨jÚšë=3ä‰.ÊSï}Z9ì­+”óþWS™îI’ÕÏçþq•ò³¯+Ï*›¦‚í¹Wcú±ýœû›3ŸÐp×þ‘Jo;¸Ðêº×޶~ îµJøüGí*ñ#S¸\÷ÝÖGc®hÕ_ùÞ°ÊÙçŽQö(ªø¯Yµ|ýÖ¯á¥ö÷)¬³µ·+™n{5Æ»1—½¥¡åý­Î_¯R¸�NÓn`õó6mS~5ÁúGl¹t¨²bš�ÓË\´¤_­â=iE‚²Ö-•³Ÿj§ ÓOú–��¨aiÞðì°wßd}vœñŒrÑçÿS6H»ù÷ݨ1ûšù5oØQ~þªîÊÇZ6WžsY¥kÖíŠÑKísÕ¦¿õû¸"Í•ózií_k¯má�cíèT=c�òŠAi»shDŽš£�ß-R†?ý�rÅm •Þ>PK¸ñie×Vw)¿~óåêkP6ö~<“­oÂ+·ŽR.=TWyýçÖCdtwë[qøà˜Ûýo_¨l?ÄúD$‡Ý# ûGA³Ó@@@ �düßc!Ùqv@@@�Â(p²{xvIýï¿÷+SœëÛkÅd±I)iš©�XízÚ¦deºRO//~Üêä]œß§¬Ÿ¤áñólÉ/qª¦î4¼i“"]+~FW½nb•Ûf£Üu³õ(u¸ðªaïÝã[_c•çžiû8ï¹ÜV§í> ‹²Äø÷”þþ·2Ùe[ì:¨œ?ÞêÛ�¢y^%å.gSlÿ�´&ìÖÞ®]Ÿðñ|åœ_’”=NMkâј”�¶Êûß² ™õÐèÔæŽ¶}©g‹Ì¤…7¶mîPq¤rÕ?¶ÍqmÅ´+Ìd¾ã� вUFÙâ6.ž£\±Ëz@œR"H™¶………¦yi{÷ïô·•S·Zo‰n�ž©ŒÚf‡Í~Ž4+�·ëÞJúÅåܹ±Ê”–µ•G¯C£ò½•é§uÞ6ôè¾Þ «kïömvŸòÛUÖáO;Ô©=’³ ÿGKã•E:ߦ¼·[Ú¾¡fn5Ù½.bšòÉõŠt-ûG!Ýl¼@@@�€(ÿc h`v@@@�‚$�çÊo^wÆ*À‹ãµ”5ÅÒ�Ç*ßZéOÓÎÖI¯šßw»ÒÛ# þ—e^™hé=c(kÚ¬Çia»l-»�íI×# ÈžÜÞ¤Yu¥÷"n Õ‚"‹kL¤ÛfŽ?dµÜÔÝJ^¯áe+v*S¾VkYÍR?ÇhA¶žwÚÕæ[h3»›ÀYÕ³Ú–Œs=&%ÙdR’‹(‹s:?$›ª�õE ªu¹3ü¦÷”ž{PÙ¾ÖGʳ‡Ü ¼îš‹”]k›XúsQ¶ «—­PLÙ­üôjëUñ©~ŽÕìc¼s‡õ®ðz¥_æ±æ‚JY}µ|ƉÜv½zñȬʲz3ë–²GïíÚmµjwdWåïÞ¢<åØön«ñVk•ùDî%õnôq6Ç$·~7Nùô V™ÿê;«3ÿ±ÙÜ&Ùö˜ÔáÒàð�Oþt—Ñbº?½HùKï±ÊgŸ~IùÎs×)?}Æî–_çÌk•ÃG= ¼°¡ »�Šþî]&–lwR8ïÉW”ƒëeø½{÷i¶D�}‹—°»-düH^®Ý) xtQe&‡l…”dû›BC@@�Â#�õÿ/ �{Š € € €@¡ȼàœ�»®uµhÓLö¾U�çÍ\®Lèjw˜·šxnšUF#¢¬Âê\±Ÿmwn?³Ïé6F?¹iNµ5“’k6–äíM`ç\<‰^µ}oeŸ,/ûÎÆ2�3‰U•·O·ÚûiýßTnªÜSyým/*G6‰Q–�²^Á)+•/^p•òýø¾ÙZªu¾^ù|gÛž‘*?xáQå#/?¥ÔñWåþ>S©nJ‘α J±ªxÑÚÝ•}úXÅ»p4çÓYL;â¶^ûö˜ƒ eÞ/ÀŽub‚ÝaÀ†2oÇ: ™ÏÁX@@\zî±eÏ@@@È pÒ{Ø™ˆªç RvºßjųÞ|X9ö{.úµµr¿yá�íží C&*—Í�¥ü5Éz4Ïý"5w®Zp ÍÖ¬‰s¥÷Ï?hxÆÜÊ!3>>WËÏ8“g‹Æ}òÒ»Ê? ÞÅ� € € PxèPxŽ5{Š € € €€+ÿëã™ U¹LcGÞ5Vùíƒö€[z]¬Œg×´_wzeNï\g æº²óHå³m9·Œ:[ùÙ=­•Å3TV“vü®ñSj*k–ñíù»Þ»ÛÛ£ŒVN}àå”ö¯+ûWËP¥÷Xu÷ï?þU–¨]Eióç¨yâ5ù�v]¹'ÈôªTÌx ­~¼sžÕœgl±)]ÖeÁgͳ»–µÝe½ÊËÀíÜ?<Âîávîô_´˜]Çî½ó}Ù¾C4Ôï^û$|ðö�Êú[º–U¦?6¶å{×ÿ©Ü_¥¶²B*§M]Òé…‘¼AÃkœš¹«fFK§BîÜ™?Ì�¤)ÿ\³N™èj¥Ìpl4.?Zpƒ¾Z͹�S><óyås‹ÏSŽhk÷›8ÜìîZhOÄ·Ô¶<ãc²slFZN¼}F’“í©))Îß²Ћ$'{À´ € €Ùðö ²ÿ_+Óö&ÎîR ÞtéÿWUð¶�-B@@@ d,ûpáÙ_”Uƒ[Þ3EùáŽs•—¾0YyK‡iÊ‘ í í›[½·|qëà9dO>ß²aµréb«~gÒ‚b4òÊ—­š:«ËPå”ûÏP6œÖGyöiµ”Ñ®½ÊÖ.QΙû‡²ëÄ”ãûX¥Ú·­h‡‡µÀ·î°+ÞÏ5^ya³ÅÊn}»+›U°5Æï°ÚõÏ_Û ¾/1LùÓ·w)ëÚ‰§œ´ ëGе—]UñÍåcWW]c1a»”k| |ù=«¥—ˆ±�ÁFýø®%¯1ù®=í %:œ®lV¯¦²Zi[×®u ”“Þ·==Tírå�³J*ÝúQ+mŸ�§ÇX¿€e½©|îL»f~î™ç(;7(£ >°Mùç²yÊYË(_Ü4]yE)ï2¬–ßò¬žÊJ¯ØÆ]ÑK™4IJ¦ë€²Ê3¹¼™mOç9ÝJYÿˆOŸ9_Ùgç¥Ê’•ž†W(ïéoŸÀ|jÁM´¢ÿ={£rRïç”Oôl£üåÒʶ•í±s­N™ö·²d}§ïÃZ ¦kÙ9 #Æ|•n^d-�””¤7½}²žŠw@@G moPï÷@o¿€�û„ÿ6zøï±cË@@@ȱ@A:�\I›ßûÙ…Ê_¼§|eŒÕ“¿üf¹rÎäo”û“ìÌEXQ«–©X]Ù°ßÍÊk;Ùõÿ½Ë}^#´ö`�ÿpIåO<­|{šÕ�Ç¿`½C¢”e«[õõô¡+¯ha•äÒÜVñî8ÒÖ¾ø«ñ>þ’íÝìO^³Ü¯pE”4�º­íj𻟥¬d¥ß\4›­ñ�¶�Ÿ¤XŸ‚áoÙ]®í÷˜ÒekiØñbå_Yµ¼úø¶ÊS>kÁÕmû¯9ÿ'å;³¾PŽÿâ_åþdëÓQ¢r}e›‹G)_¾ï&e÷t7Ä·ãX±¯É|ûÍéʧF½®œ2ïCåKÓ)ƒŠÙݪ6°-¿ôÁk”gDyûh0µEõ|JCSF[÷–§m÷ÞµTY¤| ÓÛ£ô6w…Axmò_ÊÐ;m½3ÞzBùMdUe—áönþ6Û—èÎæ3gVuåƒ�QNocfxŠ+«·î­¼~òXeÝ §(ûeè��£0BsÒŽ'�˜˜¨I¼w8Þ´¼� € ÈÞ~Þž¡¡'ìÿ�'˜ðèÿ9ŸàÕ±x@@@8™îØØX­?&&ædnëF�\ Ø=2¦^RNyÊÑÌQÞP¥ Ÿã‹�·-Ïi ·»iägã¾ù©Íº@@ÿ8¹÷ ÈÝ7길8!ôÿ-ø×瀭E@@@ € ¤{p*6�(�¼^µjíAÛ´ˆòŠ %9»gyoiï›÷¥±@@�ÀHû·ûè{–äýåÿ ùè°m € € €øX€>eqøBÀžh°ãw{ @bŒ=a¡|&·#MÖøM?ª|m¹=¡X÷nÊvE4xÏïú`A,@@  ¼ßCBüé?×ôè�$;‡ € € €@z:i‘~Ëy…@ X…혳•ÝÞ‰P¶ëÔ^Ù¬N%eÉë °í—/•?YªÜZäåƒÃ/RVâäž|ÑRRR|±–� € àþø½‘ÿ4ø‡’ÝC@@@ ­=Òj0Œ@°¿˜uνUyõ†ÉÊù?|ª|ó³�ÊýIÁÊȲՕMϦ|æž»•7+¦¤ùJÀûÔ_-�å € €ª€?~o¤G@ ~Ù/@@@2pÇÆÆjtLLL&o2 81ñññ¹Xpxxx.æÊÝ,¹ÛÂÜ­‹¹@@ü] ?¿©z­r÷}5..N³Ó#Àß?ol? € € €9àD@°˜@@@àD€¿A¶@@@�p" XLŠ € € €€¿ p"Àß� Û� € € €@ìqå4@�|X»Wky}öFåŽýÉ>YcÉbv>wh7{òK‹êQ>Y& A@üK`Õv·6xÜŠ`åœXûv´a·�ñ¶˜h�ºÕHQ^ÑÔ¾ƒ5,cc s£G@a>úì; € € €@¡ G@¡;äì0œ,�1³7hÕ}ïQ6ªï“ÍX¹9LËñ.ùµ«ûd™,@(ø N÷Ê»æÚißXn}’³(ó{û ¬ÚnÓ¼ü£åЖ6ó�“”a6¢Ð5zºCÎ#€ € €fzæ£Ï¾#€@¾ ìÜoW¦Õ+Ÿ ,–Å)ënQýò‰šã½%¶ä•ÿصpUKØ’£‹(h € €@ xûô�ª}›·!gµmo¯�W–Z7€5ÿÚw§©çÛ·©Ðœ-Fsøw+d»ëß‹­G@@@ ¯ôÈ« ó#€98”hçžC‚,óÞ%Ùr¼½ ì27ׯ�6¦I‘ì÷8°Ù–¼ü òáù”çtG�ªñÃ_¿HyJû½áÙù­¶êÁí\þ vRVð ­–DC@�‚(à½/@Nûx÷$ܹ#€·OÁ\çùÜ» <ÓÍù"Uw÷„l=N+ E@@@ ` °ÊNÁDb«@ß <öeIß-,“%%:wÐÍä�lŒŠh=@S=sIeÚ_î`»å@™wO]ë»°ë§UʵI¶Í4@l�_·YÇ?ï3r·§ïœkó­ßi9lŽåkËì+Î�æöªa™Œ=#mšÀkô¼cÊ!€ € € �¥@Ú’O–ñ €@Þ&þ¯é YöWA¼�=¨h ma•Êå•vÞôͳó{�xà3••î¾Wy]£´¿DìiKÇŒP>¾»�ò­;OQFíúMùѸiÊé?Å)„•Q6ér–òº š(+8‹ñì[¢á‡oüEÙú6«ð¯ýpžrQì^eP©e§�•מnKØ>ûMåmoZ�€½É¿*_ð©òð lÊ:kíTÿ«ï~£üqÃebXqeÕí•Coî®lZ´  m @Ž»Âª÷Þ;ÿõÖq_ÞÞÎ&éQÓòû‘Ú¼K{ûg[ò¨.…åNô8|üù@@@�B �¶˜Sv—]DNžÀ…/ü|BW~÷yÍNèòÝ%kù�YÕý�ï×+‡4²º}˜~ÔâÿP|³ÔΣ·¼¢‘²xò?Ê�ž¯\XÝî>ðè õ”%ö®QŽö=åȰ›”Ϩ¬ôÞ‚À“à¼;Þ–:xÈõ–ìj½ s>R>ñúe�F×({v»JùÌÁ”×/i®|õ‘NÊÔ§$ÿnc^š¯<Ðûjå˜û­�k÷VÅoëí:ÀJEè `$4@üE`î†ÜT²;X·B×È.–&Yþ¾Ã2m›½>7KN»ÿ.\{ë_dž­E@@@Àçôð9) DŽ%pÿ™v›ÚÈð”cM”í÷öÅÛù\ï“ZVµÊy^Ú�…c5{?» >] ku±^O¸«•²ÍiVÕóÞ åêˬG@³P…+~•�ù!¥¾òúE•I«>WNßÒPyÃ-”5".WIÔk‘òꯖ+ןk=jëÇšUéõ9WyVÃÈÔ×.Wés:h¸Õç+×ýmz=Kó\¶ÇjþÞg(…ÚŠ£"‹)Ã#k(ËØ i € àgíɼ7_˜Ó±0Á~ù§k•¢ìåÄþ–£ì«‡kšÝ¼(“–Õ’3™4 Fó[T@ì!;� € € €ÿ Ð#à? @�üˆµº}ѰœUïßûÒ®º¯UÕz´m¼ù¿ MJ9²œ´O"È]–ý´äQ[�?í¯‡ ¢%5¦¨S«w·l©áVã>Q.\ÝWÙ¬©mÃÏßÛÝû=-í^ý-ŠØ˜�›ì»ömR>}½½ë½ €¬%Å+BJ+wÙ = ZcªU.¢LwÎ?8Lc"B�:vnèb{qá•v¯?£<ÏîqpæY•}N‹Q–L·AAC@�-�î»�³¥¡NiûÇ«íŨo-'übéÿ‘ݤȵb‹åCó-³jÎjÒ€O�€€8Œì € € €ÙH[òÉÞL… p6mµ‹Ø­H]³ò®ÿÖ0ý›ÚŽÝluò¦­þVþ³ß®x¯Xì�Ò·-¨X)-0¦ZEehV‹.jwèØÂ®Òåû?• õ¬JÿÍr;³ÜöÆ:J«æ»\{œ:P¹¶ö@eõ 'ŸÝAVç�J÷»ÈBBò~ZÞVV¾­žoÖI¹|áBå'½¢¼úK3üÁ^ÊF<;@ 4@üA jqûz±jû‘ï ‰ö•$µ/À[çØðÞË.5,«·lõºešn”öò¨VÍYòQ#øe†/e¼¯ì € € €…^ ]¦Ðk€œ4o_€ÑíÎü—žc·%´ªü7?UQ:o…ò ÇΗ+jWן¼®U7?Ýž�òšmÕÒæÖ#`ihSåÝ Žô$(Y¹œÆÛaw ˆs®üo]úÈù{�<ª9Žwü—n·sF;ÅÊÉÞEdX‰»H½Û²‡=‰ ÅiÖÃâ™[?P~ùkwe£Öü* @?è^Ã~ã¯Ú~ôm~¼÷(n_R\Þûxëÿg¼mcþ=hyìæ]ò±§ ¤wéHG“}A@@@à8”AŽÄÛ €@þxï àí 0öÓfZih��ó|þOÊ=.;o{JÙ�Ê`wîjçšõ8-å€Ý›`ÓßvkÝ´¿ÜÁvÕ™òv™]„So�hhÏh4QùỉĩW(Ótp…5:MczW­œ0úse‰Kí~õK(\{6¯Wþ²¿ªòì¶” ùwìfsD—±Å…þ½Z¹èÏÖÊžeÌ*4r�réÜ•eUSV)e½öý±QùO‚íKÓ’œ  @¿ÜÌú!¾¼Ôz$Ù¥tí•í¥·_Àö6üã‘G-ÙËL[ˆóuÀ»äL'È‘| ÈÃÊN!€ € € �¹@Ú’OæS0@ ßZÖÞªu÷_®üsO1å® «{·*kµú0§�€NP;ôãd-ùzçlzÚU¸£NÕËá¯_¤<Åû{#¬¦†;�bS}9ÞbpþÕ1Êt¿TB­ÚѰ«”a¾Tޱ@¹í€íQd›¾Ýy–yiEZõÐìW¶xGùöƒÃ•ï·­½÷¹öÊíË¿RŽ™`}v$8ë-gklÉ%Êókr6\ 4@üF ~i�¶õº–Ö/`ô�Gß)À»O|›³Ý¹±µ-­n)[rái|*<Çš=E@@@ÀåŽ��CLL^k2X"€Ùˆ�ÏÍ}ïÃÃ�[Áf5y˜2w[xì^ûæJMлÑneãJÎ#n�9Þ»¦ÝªØ.WTX¢óçÑñËæ0�úòW»Nþêž�ÿ{»eÕÂuVû¿g@^ ѹ;Ày“í›Ò¬õ¹¯m÷¨i šÒß¾eyï�ºüü¦êÝÎÜ}_�‹‹Óì¹WË‹ó"€ € € €ÀIHw9çIÙVŠ�k»[ß«1³6(',Ép£Û\)”*fWÇ�݆^]¹âc&@ðC�P§œ=e€Uòï�gÿ¥}uYæÏȸsÞÊÿ ­ì¾#:Ù“�òÞ ãZ þzücÄ"€ € € à3îà3J„ÙÈÝMùyåUî¶0û+ÿ±kÿì4´�[˜ÓÓ«qEîàcX‡ €V`õvûfõöÏÖ/`v¬U»7ìöÞgÉ69&Ú¾u¯aý17µ¾õœ§hÀ‡-?¿©z7;wßW¹G€:‹B@@@À?¸G€'¶L j ;3ý×._ö ðö¨V’¾öaaw@@à8 ÊØ÷Ÿ'»œ€Î–ÇY³¿¾Í=üõȱÝ € € €äB€¹@c@ ¯ÑEl ÑE¨ÞçU’ù@@r*@�€œŠ1= € € €~,@�?>x'nÓ={¿ÓÂï2KY{äýÊ!µ9gtâ¼Y2 € € �üï.ÿ¬Y € € €']€.WüV†ï¦ÍPNY¸ZùÛß»•ûS”Ñå**¶é¦¼þŠ–ÊŠœ<‘ @@@À?øO­7¶@@@�\ êžýë„6î¡W•“öÔRž{î@åeuK+‹z*wmÛ¢üã��)Éi)Ð@@@üY€ÿÚúóÑcÛ@@@È¡@¡í�(¨•LPNÜÓBùð¨K”íJ¸•éZíÚzÙ*Ý(çEÒvýñÍû•ãf[Ï‚ÍñöX𘖕C¯é¡láíB�b} >ö¼ò¯^¶–Š‹?UN]§Üf} švﯼãÒ&ʲ©'gìéâ{×.P¾úÖlå7ë÷*ƒÊÔPv¹àBå5�íþúq¹¯¼ðÓjÊQÛÞ½óÊLå;ê)ï|ë*eÛM_+_žð�ò§õÛ”Û…*+5é ¼áæ>ÊÖ4–† € € (ô”#É~ € € € � ��lLˆ“$þ®½š¹p§²áù½•msP �×ô?�YùìºæÊ»F^¦lTd‡rþ¯+~®¨òµáVi·ª½ZÊ>Åܱ_({]5HùâÐh塵Víâ¹w•oÖDyÏ©Vã÷lýV9â±¹ÊÈK¬žÿfû2Ê„µVçùÌkÊ7ÊÜ«¼©I¸ÒÛRœšÿo–×ËΗ\«T¶¸²bëéeKhÜÓz\Pß¶«dâFåħm›Ÿ›Ü@9þªÚÊ`ýÐ@@@Q€�xTÙ'@@@²(¤=<»íúüMû­&_§¦¥UÌ·¤eïiðÂG)wÛ¥ú*‘WR\úÌ=ÊËËþ¢üdN²²ûƒNo‚*^Æ(�9ë‚vÊ©wÿ üvëÊe©­Hë^Ú©ºÒêþjm{*úÔ·úÿÔ?í¾ɧںÖÏš¯\YÛÞ�Уº2µËBë³4|~ó…ÊÑ þP^פ¡ÒÛ<{l«šß1X9(MO�Ô·+6ÒÀ™©]¼ãêé�mÊ)?]½U¹ßc=¬ @@@ èˆG•}B@@@ �BÚ#ÀåÔù=N?€  'C‚Z�ÿ¹:+“vZmÿ©G­€Ç™+9n³†cÚ–<2L9#mwO’ÆH*¡Ü¹Ç™!µG€­¦R5»z?L?ÿ5w¸‹:Ý­ž¯ûègãF«Ïüe²òŠK>Q¦mIññz™ÔÜž#`Cÿ-3¢¦†[Ö·e¦o¶%»V-PŽŸü½rÙÆ=ÊxG å€ 'ÕIQÚ @@@ p2ü'8pw•=C@@@�BÚ#Àm÷ϯ¾[¹~Ã~¥§¾]ï-í»#¬ž_­š¥§¨ÝAÀ¹é¾þtš·c@p5½¸ð¡«”g–NÛ%À™Æm÷Ý/Z"íy›&8ÔÆg˜Ú™%}¤8¥ùèvkôË—Ûuû•;¼˜Æuf´~j¡¡Š° +ðlµ{ ŒxäKeð…C•Ï «¡,f=b'>©¼~•‚† € € àiÿ§à»Êî!€ € € €@Æ2sá0 µûé­íÒüG¿˜«\ݱŸ²aê­ü5˜e *o·Ý¯b5ö Ûìjü2õ¬2Ÿ¡ ¯qNËñe÷v�ªUK+,sîPò ״ιlI¬Óœ«‚(ïïm÷(•z£»+Á¿;ìÎý ô' @@@ �èÈG—}C@@@à(�ÂÚ#À]Díõ·ö®òž{­*~ñ¹m•-ªÛ}Š:wïÿ÷·�Þ‘¦\îŽjª1ý:®¼oÜ;Ê#ÎVv®aý’vÚ3~¶¼«U¯FJ{N@Κ��©Ó£“²ÉŒ©ÊQoXή§,rH÷Ûjå–Šg(»Õ¶û»•.¥ Ê$¬Q®Þ`Kh[ÇæÚ±â å{‹ö)Sj*h �*žñéà € € öN € € €�ÂÚ#À9¼AåÚèÏûFÙó>ùp¦rƸהcwÄ+=!VŒ.[AY·ƒMÙ´”÷>v#�–WÞ¤¼/rŠò½WŸUŽß‘¨ ‰¶�;�£´yrÛ‚*tЬ>dó¿ñÎ å·¾§Ü›b[U¾¦]í?`¨M“�\§›&û_ë­ðÂðû”Ó‚m9%k·W^}e[eÜ Râãíß € €Ùð¯þ¤ôÈÎ1e@@@DÀ«]‰‰‰ �b7@ÀrWoÏÏó¬¹ÛB°g@@|/�ŸßT½[Ÿ»ï«qqqš�¾ÿ°D@@@ ¬' ì¡aÃ@@@ð½'|oÊ@@@(°œ(°‡† C@@@À÷œð½)KD@@@ À p" À6 @@@ß p"À÷¦,@@@�+À‰€{hØ0@@@|/À‰ß›²D@@@ ¬' ì¡aÃ@@@ð½'|oÊ@@@(°œ(°‡† C@@@À÷œð½)KD@@@ À p" À6 @@@ß p"À÷¦,@@@�+À‰€{hØ0@@@|/À‰ß›²D@@@ ¬@H�Ý26 („q»´×NZ§Üs0YY4ÌÎØŽXGY±D¸’† € €@^è�=æE@@@ÀÏèàgŒÍE�À˜¾|«v°^¹ƒÊÞ�÷+?_YL9}é6åÕ]«(i € €iVmwëå¸ÁÊ9±VíÞ°ÛÆx[L´GÝj¤(¯hj=.–±1…¹Ñ# 0}ö@@@ Ð Ð# Ðrv ‚ÀôeVù_÷�ÕüëUŽRîÚ—¨üvÍåíÝl|É¢vÆúÌFû”£fíTºƒì’ó6äì÷²·×À+K­Àší;ÕÔó­WfhΣ9ü»²ÝõïƒÅÖ#€ € € �WzäU�ù@� ¼½à/Mß³�Uò;׳§¸\–‰N'€y¿ÕðøÅ–»œ7ËDZO�vÕí®ƒÚìV¹®ËjïŽ_ð·²òy ”e�é5�›oÏ&Xüålågß®Uþ¶y�ò@Š�q�.[AY¿Uå5—6SVàd²ò£Ù‡ãçqÏ)絸Uù¿æi/g<Ö»î"vÔZ�Þ\Y¦TÚÏŽFÐ@ðKï}rÚÀ»«áίPoŸ‚¹Îó†9wx¦›Ý/ ð4¾ÄžcÍž"€ € € à¢G@ _N«gwø_±þ�ÒÛ# 1Ùê´¯|]R\LÙ£…Uq‹ WîÜkSÎýÙjþ+ãløšÓìžANqwM\„†[Ô°eþe£Sï|]óß<ûÿÐÄïŒxSùÉžÊsΠ¼¨v)eQ�­w×v{ÒÁúxÛΜF–B¾µëEòÃÏÖ;#¥E†µûݰJš¡û@K €þ.ðë6ûä}F@îöå�sm¾õη¦asløµeÖI`Hsëa×°L° ªñU. ';ƒ € € €À±èplÞE|,Ð¥‘ÕØ'.ŠS&§ØYí«¬@Hˆeßvu”î4÷(nýu.®œ´Ð®ÛŸ·Öêó�êZ®þÇÎa÷lmËô¶Í»m™ÑE²>Ûî”û뤕ïiª¼oÄ@å©Ñ¶œt­VM½l™n”ó"é_ý±hâÇÊwçYÏ‚Í ÖO!¦ùÊ!WvQ6óv!H±{Lzà%妶– ?LWNÿÉž¡°/Ìö¢I×¾Ê[.j¤,“z²Úöeßoß(_gžrQ¬Ýa!¸TŒ²Ó€þÊÁ*(m­ºÛÂÒ÷”—M«ªq�íÝ„7ìžÿKwÖVÞöÊÊS6«óÁwÊŸcm«þ�·'/Tltšrèõ½”-3 hì1šÓobÝÌO4ɘi¿(×m�WG•UÖïÐGyû%�•¥Ú”�¿iø£qÓ”ÓŠS+£lÒå,åu4QVðü®|óÎוS6'(=#nWÎtÙqo0èbËy•Ÿd|÷²{4þéÎ*N÷Ôó\ýî“Ê]½•»¾W¾;ÏÖõ�sìª6ï¨áë‡vU6Ž:òIðب1ÓÞš¤üh‰móþÛ»Vgž­lóÏÊY5ì٣β£™²íWå»c?·ñ+í(ïN¶Ïs™êõ”ç]5HyNM¾Šˆ�† �-�±+ì7 ÷ÎÿÙš!ÍD··³=ìëŒëë™Ú¼K{ûg[ò¨.I‡GøŸ©_²|/Ù=@@@p8 ÏÈW�¿wX•¸X„­4(Èj³‹cíŧWV¦ë ^x×ä@IDAT`%jW…â6M¸ó¯uÐiU4&¼/‹w=û¬G@f-E#7͘¢ü¢·mð'*#÷þ¦|÷ù�”ÏL©¥|ãòÊÏåâqc•ãb*o>XÙ´ØåòO?V¾ö­MSÃ&W³Ïäwl›çGX/�ÇF[oˆR‰»•±ëL)¼löu59 @×Ü ¹©dwˆ1º‘],X·6×ïöU%]›½>7KN·¿zQ¸öÖ¯ ‹ € € €€ïèà{S–ˆd*°l½ÕN_š±QyNÓ}Ê„$·r·•ö]%#‹ÚNsàª[Ö£Wn›$µ5¬dµß]VvM�·Oc[·߬Who§»›T²ºwö›g�Õfÿ>`5ùÚ5¢•iVèJúi¢Æ\öÄbånÛ•È+*.~Ü®TTÆ®Ÿ:/YÙõž^Ê6•½5^ë›Ð«åôû—*¿ÛÖ^yn…š­¡H«îÊ!gTS:Ý#t¹^W ŸYï;åôõەɧغ6ÌýZùkÍnʱ]múÔºzË>¯É"嫎ÀÕ�ëkØÛRöÚV5»åRåÀFa©cÿû£B öHí¢à[Wt;Å®xŸ¾f›ò€§¦2ûšž$»ªÐ{�aH;šQ‘¶gÅk7RZ�Ã-qÕ7œ¾¥¡ò†ì15¼%mxP/Û£«¿Z®\®ÍWG?'¨•j¥_æÜ� ¦÷Еµ1:.P~³òoå.O eéý«”3[?‚3þgþÎ5Õªñë§Ûå½”+–ŒSÆéÇš}\’’í(¸BBÅœOxtˆÉ4+kG–† €@NþÚ“ö{Ê‘¹Ãœßb ί�#c].ï×¢‰ÖÐ5Ê~Áº¦Y×·LZVKÎdÒ€E�€€8Œì € € €Ù G@öœ˜ ȳÀó_lÐ2ú·Ø«l[î öxì¬vXˆe|b¢2"Ìjו¢­šš¶/€^ªí<`Ó„9ÿr{Ï|·¯ét'pª¯gË?£®]‰ê­îjè¸Í©ó{œ*}�mHº\ß*½O>ÕA™¼s™ò¹'W*Sœ¹’·ØµîíT.}üAåì´§—S¬B~ ÉzìÜãÌ�Ú#À&ªXµœÒöö¿æ¶ s§6ž˜è=¥oû»q£õ8´òSåÐ!Ó”i[Ò¡x½Ljfª6ôß2#jh¸yÝtkpÞ·-ÙµÆjòï}òƒò§¿¬§F‚˶*ù€ 'Õ¶µg(*hܱZp SºæÌXå³=¢\ØôTåÙg�¡ìÖØ*çaΑڹÉÜvíÛ¤|úz«´§;\I¶ !¥•©½04tbZpEëQ5íQs> E7§�ƒ÷îÉ)[·hÊ¿Sì¨õ®žA5ÌÆÇT°îPDÃí/ì§üṉʡ7.TvèÙQÙ¯{e�Èt+Ö €ÇÈðUÅêü2ùñj›oÔ·–~±ôŽÿh€ ¯°_b®‡æ[fÕ2~ïÊjÊÀÏïàÀ8Žì € € €Ù G@¶˜˜È»@ÍrVñ ¶»¦{›ÛmÕéF•¬îýóz;Yݦ^Ue»¤:“6}™MÓÄ™Þ;¯w¢ð[Nå’V§ýó_;W^½”�‰.¢8NsG[å¹B¸UÂcÿÚ¯ôÔ³ûxϸ»#¬ž_µª¥§¨�wS ?�æ±µx‚íYî½BÙ£t†3õn«v‰>ú¼sHˆ�Ï0µÆ¥mÎò-\ÅO=_ùü%µ”u¹ÃìÊsûQ=ßIwˆM–ažm‹4þ©Çg*ƒúQŽº#FY2ÔV³áãg•·¬Vä¼¹í~-/ºA9¶ÇŸÊ3ç+?~úIåÔÓ.S>y•ÝÀas•k«áatQV?šÇå²£åÝUï.鵯›Û9 Á”²Z�s(2;jnÛ�à {VÕöñΧ›*7,[¢œúÙå­Ÿ[ɿЮQö‹Éx<5š† €@&U�§)­Ú~äWWbŠMæí ðÖ96¼7Á²K Ë*Å-[½néíÏhC™µjÎ’3{'0Çeø¥˜»É^!€ € € €€ pžÏ �OMªY]}ò2»|Ù_Väí\gŸòìÆv}û3sìd·SY­Y¦¢†K8O¼OtnC?}™ÝÇþûuÖ›`Xw›þ÷­Öm`ÁïÅlx› ·«gédç¼xì;SÞ¬²·‚«Á¬[ˆÕØÛ·°KóŸ˜ñµrÍé}” œkõ5pŒTÞ®0¯ü�rÃvëïPº®Uå�œ¥×‹´ÍÙ¶´#Ž7lUñ*UìêúƒËMà`‰VÊÖ™ —-iýšsµ»¾òî3«+K¦ö¿°{ìØa¶9ÞLÍ“¾…•®©Ý/²ìÐbªò¦Ç¾Q.h=:U¶+ê‹í°;ÄÙ§¢uÆž{¤™¨;ÈŽfr&åŒc¿{d)y *kÏS¨ä¶ªþúMN…Ò©p¶Øä�ЏíY|Þ‚ìSÓº“òæVöd„zO<®œ8ÿ/eŸËk(ù:" €Àqº×°ßÒ«¶ýUÀ{_€âöeÄå½/€÷æoÛ˜½·T²Á,›wÉY¾poÐ# à);„ € € €@Öœ‚ÏÚ†w@Ÿ ô;ÅêÀ-ª[Ý~É”o,²šðugX5õ®î–ïÿhç¹o÷¯²¬s�ø¿û¬R].Êò†Ž»”ÿî·³ào,*¡ìÖÄú´mhý¢#�Ü "M±Vo«¹­ôê@»¨®Í(zȪâôm­lVÍÖRÔ¹ÿŽß7ixgšr¹;ÒžPpNÇʇÞ}O99â,e‡ê¶=I;mïVZÞÕ¢{¥íΚ�­®Õõ e£YÓ•Ï�+­¼¶we¹àCʸß×*·•o¯ì\ëø»Tª¤¦,�ø›r͆xe›Úö«pÇ/3•~o}4ãåÿzؼ¶Ï4@²'P¿´G^×ÒúŒþѾ)elO|›qܱÆÜØÚ–V×yâÒ±¦ ¬÷èXÇ“½A@@@à˜îØØXM“¦òpÌxÈ»@|¼]›�ÓžZNÍ錹˜>w[˜ýyŸ$?}™]*½ú/«£^~ên¥ÇcõÑŸþ¶kÝ7î°¬^ÊîÐÞ´Š‰yk§ï,±ë¾«”³·ëU±šªÓÕÀUɹ<2ÌΔ±Yõ K'\ e›V1ùþ§”?t°ÎOô²�#@!Ð@|.�èÜà¼ÉöugÖúÜ×¶{Ô´MéïôYËýbR÷/?¿©zW™»ï«qqqš=Ï»›º×ü� € € €~ À=üà ±‰ xÞZ}±;ûÛ»F}ö»wÀ†6·7BÙ°ŠÕT§­´§ ü¸ÑzÔpî¿j³�ÿ®QñÈ™ÜrvóuW¹Hë @Cà$ÄoÑJc·Úg²D {z}NÂQ`• €@¡u¾M`•ü{çÙi_]–ùs2’xŸpC+»/ÀˆNÖïÒ;&ã”�=æÈ÷ÈÀÞOö@@@$@�> €ÀIèÒ¨”Ö]>Úz|ö£ÕTSœBê¥]jj8Ømçj[Õ­¨üòÇ?•«·Ù•l—t¬¬,ULém¡™ß4÷ðÛü‰€¬r²v¦=ã`M‰ÆÊVµíþQë±òÃGӕ߸ìùw4²Ï3 @�-àíðTW«ê_ÙÌ~O½ý³}%škß 6ì>Ò;-&ÚzMv¯aߣ7µ)ë9OÐ@¡mô(´‡žG@@(Œ<5 0uö�“.�»{œæç½Xs·…y�ýw¿�·Þ°ãèe„;=·¢í²k×ñvâ;]«^Ú^–*Ê=Ò±ð§VEÙ0çåèÏÖ*ÿܶO™à²ûY”­ÕHÙwP?ËúÖWåHF/h €�üü¦êåÌÝ÷UžP>Œì" € € €éè�ÞƒW �/¹;™ŸçYs·…yÇÛsÈ–±u¯ÕS½O¨^ÊêüÁÎ…\ÉV”uÅî°w=Nù¿\”ýQÜŠ²4@@�“&�ŸßT½;™»ï«ô8iVŒ € € €ÀÉà©'Kžõ"€™xkûÅ#2¿ÚßÛ/ V™ÌßÍdqŒB@@ ƒO È@Â@@@W€�{lÙ3@@@2p"  #@@@\î¸Ç–=C�<¸�[ö{¼·æÏÃr˜@@ °¼ßýkéà_Ç‹­E@@@ OôÈ3#€@  ÙyÒäää@ÝAö @@À'Þï�>YT¾-„ùFÍŠ@@@8ùô8ùÇ€-@�(¬­¢G@<4l € P ¼ß Ô&wcèp\"&@@@@ pè8Ç’=A xïþJ¿’²(@@ À¼ßyj@€Vv@@@�@ G@ Qö|(bÿHz<eJJŠ—Ì¢@@üWÀû¤ïwEÜ îà�G�mF@@@ —ôÈ%³!€@á ÕÎ&%%)yŽ@á9îì) € �QÀ{_ÿí àÝ#zd<²ŒA@@@ `è°‡–Cß xÏû¦}Ž€÷®Þ;øv], @@  xŸà½#€ÿ># £$=2š0@@@�€ G@ÀZv N„€÷¬°¿_v"dX& € €€¿Ð#À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € € €€¿p"À_ŽÛ‰ € € €€8àD� € €ü¿½;�“«*óÜ�îl$�!IK–„5l†E6ÔAÇÁmdÑqEeFÇu\Ft€e@„DQQ�€ ˜DÂ!! IzûÞ·n0¡“Tºûö}îï—?ÕÕUçžóœ®…{ÞºE€@Y(ËLé' @€¨ƒ€u@Ô @€(‹€e™)ý$@€ @€uh®Cš @€@e:::b¬mmm‘ííí‘Å5•0P @€@…c´ýúå zSSSdqMÙ T”}õŸ @€¬…€Š€µÀrSª,ÐÚÚÃ/jªì`ì @€�êt®-ÞuÍÍåþ_iÕù6R @€ ÐPîÃ&�Ý ÐÒÒ{)ÎÐ »³  @€�^+PÔ•ýû÷ïµý\sÇT¬ÙÇo  @€ @€@ŸPЧ¦Ó`¨¯@q^µõUÕ @ ìÅûÃâ½bÏ " ì�úO€ @€ÖB@EÀZ`¹)Õè|†ØêŒÚH  @€º.Ðù{»~Ç¿¥Š€Ÿ @€ @€Ý' " û¬í‰� ÇwKÔa]%@€è�â}c¹Î " GþTì” @€ôŒ€Š€žq·Wz¹€o èå¤{¨ @[Gú§åJÞe÷fÞúH棋ò“É‹–GØh: F ÍÌ´­Û#_71óˆñ™Màƒüe|ߨ" þl @€ @ **ª2ÓÆI€ÀZ ß°Vwqc °�nœ›«w￾)ò®'­äm fÍö�¢:fÖ3¹ô?ë™|Ô\twæ®[dEÀk‹œ>&/×k+ãûFÏ#õš}í @€ @€�¨(Á$é" @€@Õj'hø�Ûr%óÃ7ä›öâš}F§Ä[§f<6s›M2‹ÏEç%�j /L…_ÎɼàŽÌÛæå*øQ—d~ö�ÖÈ3öÎê€ pÒ€hµ·o*zû é @€¨£€Š€:bjŠ @€@}ŠZ€Õj†ôÏ6Ï?.óĉ¹†¹dñâÈeË–E.z&¯y®£¨ˆ‹6•hlÌ5þÍ›²šæäF¾cê�ÈKgæ5ï¼*¢á¬_¬üá÷ÖêòÚ*m*ª4ÛÆJ€ @€•Xy ¤ò @€ô¼@ñÅyŠZ€OÉ^M¶$ò©'ó£Ïe”«tw=™¹ÏèìíI“òž|"kœ ElÖO ¨ 8iR~›ÀWFg-Àmóòw]íÑ÷ªí³.  ›Š€*̲1 @€ @€�*ü) @€è—Ý»r•î­S³KK/ŽT Ð+¦G'ú„@ñh*Y§LÉï¸m^ìòÚ£OE@Ÿ˜dƒ @€ @€VP°ª‡Ÿ @€ô�À­�¬¬8xlvbÙ²e=Ô»%ЗŠGÖ!ãVŽñ–N�¾•×öÝK+Ÿkúî�Œ @€X! "ÀŸ @€�^!ð袕_b¾M~x¹á¹§[{EÏt‚@ßhmÍGÖèÍWŽªó£oåµ}÷’Š€¾;·FF€ @€VP°‰+ @€ô„À¢å+÷:t@^^ØÑ±ò*—¨“@ñÝ×eE“�}uÚI¯nFE@¯ž�#@€ @€õp  ¾žZ#@€ @€½ZÀ�€^==:G€ @€ê+àõõÔú”@Ç‚?Äx>÷Ñ_FŽ9ó}‘'�¯ú䖇Û¾™/ :÷ ‘{x- ê!°üžk£™�þ0_kNùè‘‘;÷¯G»Ú @`U�ª¿Ÿ[UÃO @€ @ � XÅèãlxô”À²‡gÄ®¿wáõ‘7Î|2rAk>ån2rëÈ)G¼&òŒ£ÇFнuk¼UtmϧFŽØlå·[¯[Ÿ¿å¸ã‡:(ò‹'�‰lZ·†Ü‹Ö,°ì‰øý�ß¿<ò¿ïØ2òÔ/¼6r¯UÞû·Ç5ýèÜÈO]÷td[ü[¹åzᨣÞùoÇç+W÷>ï/‘ó6ÙéËkã§^¹ ÈU Ãߘ¹~ÛÒ¸ûg<¹dxVØ @`C,üîhö¢ó³mÖFÃ"¿än:â7 >¹Å+^yÆ!#"_X'Ì5ùæ¡›FvçÂ|¿-&ÅOxu„­Bù×øó³šò�w�ljêêß][[Ö²ÜpÓ푯œ¾gdcãúÖ0F#}~{á‘Þçj€ @€ @€@æƒ@€õè˜ÿp48kA~&óð“rõ{Ú˜•G]Çï¸ã_w÷ü¾—ßñÕ\-ç×O‰ùãó˜ýÌ ?ùÕ†\²9¹á–È ox òÑåyƃm§æ¨ßý®WFî24ë ~óŸ_ˆüܯž�léøRä1WD4 ØëM‘ÿsÖÞ‘CZóª¿ýÁe‘Þ�µ�ÔZ;õqùío;4rÊð”\Ñ«ÓsÕë�Ïî9÷ü¼×U÷¶D|Zžeúñss5lë³>ùO;w~±[×ÌøÖ§#?»à˜Èïüó‘ nüQäù×ÞùÀ#ÙÏÅMÃ#'M?6ò}o™¹UW'â¶6t¿@~æÿ™YŽ\¾ïë#?¼Ý=‘ç|-_#^d«½:,x®5~5bJž·eÛ­³Zmõׂ¹o§«ZîúqüôÞë6�|û´ù‘W^“û�»$ëÞFMÎgé·¾a|ä£×\yÅïòÕm~ãÆ‘;pDä©'ìYœˆ¦hí=æóöiŸÉW™]›s\³.;7ò;�‡D¾¶áöÈË~;'ò‰–�‘[Ožù–791/6OEü沟DþxF¾.?ž/G m>*rÏWçóÿÛ¦eŸóuÅÖÓO>�¯¼—þø†È»îy(òŒ|]äšëŠZ€¯~;ßÜ;+ÿvÛyûÈ‘#²’Ŷfùköñ[ @€ Ч:/’ô©� zJ qx®6Œšk¿¿ynäqÛŽ‹ì¼Ø?Æ6x—=#÷tAä¯oÏ¥Šƒ^±re¾}^®xßòX¶6}ÚÈÈ~ ÙZÇò\µþÞ÷r¥å­owæV‘s~þÃÈûvž#zÇ�ÿ1òÈÚñgnγ|ü¿žŒœöÖˆ|çNE.y<¯i——×vý§¡!×g¾.÷uÍ«OŒüÐçÞ9ô¹û#/üJöä‹—çQùóþa»ÈNû`ä{}"ò’mN�<÷M¹úôÂû²¸|÷Åߎüê»Ežù©“#' ~&òÆ ÒçÓ_ËO¹~õc¹Ú“• ±µ¦Æ÷¿”k;rB俜<,rÓQ›Dþiç+#ÿû–?G¾}笞H¯Ø–e­ÁM3rl�SvŽÜ¤1�‰·n>6ò�7gû§�ÍvçÝù•¿4òÂ�'Fþó>¹îd#@€@oÈg³­Ì:¦Sk]l{ðOñßÚ‡¯k?ÿMtäë΂…ùùê‡þ/Ÿiϸbidë€|[{…:ñø½âòC"^fk›ó›¸Å†¿2òíg¹ù’"/ùVV|é³wDn7ýðÈ÷Ÿ�5k s~ñ�ï\yÅäñ‘o›´æÿ1éˆÛ<öËë"ñÊWEžö‘é�Eù<Ùw²êíÛ?ÉW–ÏŸ¸Mä‚ßf-À÷çšÿ»?�¯; Ί°§þKä3ÃrŒéeëÅþGþß[¢;ŸýÊ…‘_úf¾—ø§¾>²¹ù…÷ ñCmkkÏ÷!_;/kfÞ?;òCï}s¤Z€@èâæï¿‹PnF€ @€ú‚Àš¼õ…º[`à„Øã)gäªÈ¾þÍÈ·ÿ.¯9âˆý#�zE^=¸¶? ×@ž–kòŸüí=‘ ÌOËkÌãÜó~WäÃc¦F0ªvÜ6obËûî|Ìk#�ž*rŸÑEs9º£^·Oäÿ}lFäÍO¦áñ E ÏE Ú÷]‘ï;:ÇòÂKZ® 9 �¿uñ�‘3ß²cä”Ú°—Ý“×ü®=Wøß½{6Ttmó]Rþ�ø÷×mBî÷Àñ?�¼î‘‘í #ÿúK Pz�~›Ç}KÖs�[šÏ‡#6ÎçÞ矘ùó+~ùùó#ÎyOÖl¹æÄެÖ:äø|˜°âIJ\>|÷›"gÜ“ÏÉ'½jûÈÑE;Ãò9ö€m²Rà�,Šì˜4<òe¶á»Ä N<&[[¼Pl–¯A¯žvkäm÷=¹ #+Úkg’鶴úÜhP\3tããÐɹ—qñÏÖûÆn›E~ßßGu_>÷‡q¹s]@q^€¢àžûfÇo‹Z€ñ㶎˶® ¬ùÝõvÜ’ @€(�À Ë'%èª. @ ,¹Æ¼ÉäÃ#Ïù�i‘÷ÿþ÷‘×ý4�jŸñÃ\‹8öŒ·EþÃn¹â=ñ€\3þ™\ùÝÂ\u9lã§"oþ]®lŒß/[Ä…Üúå'ØÇŒY¬f畱5å§àõÏuõ–Ö¼¢¡-Ï0÷ѼÕv¯Y[�ÿÖgkµU4´í*‡”s_ƒ×>�ßš�(:²æýµ=þhÜ`îÒù‘3>{väõ�ÛlÏ6–´æ¨ç/ÌÕþ†\Ô ‡”Üuç\¥_õÅ,û°ñù]{^ð£È_Ï|Mä”Ýò¾¼åžÈŽ=rl÷$Œ–F<ø«üÜéÿ\?3ò¡§—E¶7æí—.Ƚ�œœ6t¿@ñýêë¶ßކ|[‘µS¬~¾€!£·‹Ûäªú_·‘#ââØ�F>ðÅ»"ÿT>£½E>»¾ÈV{bn¸Yüj«|ªŽ³Ô®ªí}À€|åé·ù¦‘#Šþ¿¬=sXñr‘Ï´íŽVü6ÿS´óBkqEC¿‘[DŽª=?¿0–¼åÀ�+_wZj-l±ï+ãúî½"òË rÇiù {ä!S#wÛ2oÿã‰ßØzR`Ì6ùÊ^¬óÿÛ\—¿ôÍDžþŽ"¿ý½+#;×l76«;ÿ�Ä�¶—èüVëeoì @€ @€@¹V]D)÷Xôž½O ž—x§ý­ež‘þÈ|=òƒçþ,r¯¯½6r—ís¥eúæyý�XyÈÄ»#o~x›¼¾Ó·¯X&©�k¿¹¹++ÅŠJ4³A¶ÆÚY|›ºÒ‘5ï¿¶¬ÓÑ”ã=ñ#§D±ùj�6æ‡A«¿~>.Æ–«L¬vËÚï6ʳ´{®äÿç-E.Ÿ�µ7Ýž-ì{úŽ‘ƒkkS oÍJ��_0?òÈ3ÿ1òŸwËu­A #¯ý×�¼&þÙ P%�~#ò [ô»/rÑ’âõç%žo –¦|v->¶_\±JöËûÖb•«×ö‡Æb/kìHÑfãଃ;úŸN�<`NŽâ—7Üù­ÏÜ9éä7Gž>-+˺ÐXÜÊÖÝÅù>øž“cÇŸûêÅ‘8û‘mmùÊ^Ô µñ£mjï¨Öá~îB€ @€”P@E@ 'M— («ÀÀèøøIÛF¹*ןŸn©�dPžçvúþ#"¯¼-?ÁþÐó™sÇO‰Üäz¬UôË6Go™+9×=øHdëþã"{â©åZP{í»_¨nˆî4ôÛ2Ï5°MS®ÕÌy*•6ß)OðR#ï|߸ÙKlÙÎÔ'G¶Ÿ›ß0cjVÌè¿[äY“²š ÖâßÜ™Ž\<á¨È׵Ŏ۞‹kžz¶k{‹›Ú ЇÚϳÌ<Þ�kæ{oZ޵ìQ66_ ^sJVŠí½õ÷"?þË|�}lïý#W9 OülëMÅšÿ‡Þû¦èÔ×λ<ò=ïé˜ÈI¹h[“³ž)`Û«gD^¼$WïwÜ/�¯OA@C­"àà#vŠv.ûnG?»×E;!¿­ åɇ#Ÿ:)rï1"7ä–+ð#F ‰|úî<õŸžN™±µ³ ¶K\>î ë"?qa~ð9}\Þ¾uþ£‘w?ѰûáÙÛ¼g×¶A“Suß~y¶áK.o�4í”È5ùÍFÔ>#ú‡¹qýý‹ö‰ÜkÈ’Èû®½6òg�ä<ÖNƒÿµ @ ït,¸?ó7.ŽÜfòèÈ­7ÍׂåO<yÍ¥·G¶í•ç²ÙsãˆmYÉ5ÿ¾|­™Ù±e䎣óy~hdz‘³Îñ¾I^SÔÅ%[ï(Öÿÿý“ÿÝlª�'¢w÷·½SPŽyÒK @€ PuaÔV 46çÊó£·þ<òª<ùì²\�8,W²'î•kÝçüÝ~‘�Wûûm•g8hÛ\…þöÛEžvFm¥:.­û–‹[”•ŸZúãÈóðíÈw?¹4²ÿfc"�}wí3“qiÃnù)Í��=.ò°~ù‰ÓoŒÜh¯×G~ã̽#§¾åÔÈ ¹2òûç}=ò¢ùË#›6¹óôWGîÿÖj0>n~p6ßpíuY—qÒ;ÇF¾ðâ—>£Ëõ®Sf]ù¥÷|,²aàFcöÏ™z×1ó#/�6ô1�ù¬ØðÈMß”¯Yó·D6ËgÝÉûyÖÑ;D–qå¼qécÑó.»>ò;Oç—Í´ Èj¸m&N�<õõ“#7V åÙÔÔw®TÔ×Sk @€ @ W 4Ξ=;:8vl®�Ø Ð=Ë–-[‡ ¸â#õëpßµ½Ëºõpm÷²êíó ö3/üläGgyÞÇòlÆ›[¯ª!0ès+_é:ÎÎ1Ï›7¯C7J= 0ztž£ñœ•»^zÖº¼G-îß�ïT‹=®ÛûÕÇËz+gÝ% @€ Ðç^ø˜dŸ¨ @ — ´æšÏ-3ò|õ»¾&Ï¢¿™Z€^>eºG€(§€Š€rΛ^ @€ @€�uP°NlîD€�º´äÙû.Í*€?ÿ$Ï–ÿ“–Ý#ÏÚ7¿ßXA@ Ø @€ê. " î¤$@€ @€½W@E@ï�=#@ Ï ´ÜyyŒñ_˜Ù1rbä‰ïyuäîƒ#l P9�¡rÈ‹–¯ÌÆÆ¬ëèèÈ«lÔI xd=W{¬M�¾:5_‚fT”`’t‘ @€ÔK@E@½$µC€�µè¿×ÉqŸ^’i#@€£†æÊÿ¬g² àá…é±Ys¾]oiiÉlÔI ¹öÈšW{”M�¾:5_‚fT”`’t‘ @€ÔK@E@½$µC€ @`½¦mÝ÷ŸõLSä/çdS·ÃÀHia#P?��ó‘uì•-î[{ô­ü¹¯_RÐ×gØø @€ @€@'�0\$@€ Ðs¯›˜Ý�Ü‘ýxÇÔ¡‘‹-ŠôÝ)b#°~Å÷ š�¬âQV´wBíÑ·~m—éÞ*Ê4[úJ€ @€ÖS@EÀzº; @€�ú1>+vÑyÛ¼¬ ¸tfæqÛ �œ?~¤��õ><MÅ#ëw�dK»n‘�¸#k�¾ü¹›Š€j̳Q @€ @€�š€Š @€z…@Scvã ¯l�|Õ²à�Wå5N’¹i^~öÙg#�/ -lº&Pœ ¨¸wa>šŠGV¿Ú#îó‡æ#®¸Üµöú­Tô…Y4 @€ ÐE]„r3 @€Ý!pð¸ÜË¿¼biäÇ~=(rúw#Î;6W2Oš”×,®}�ÀÒ¥y›ÖÖ\ÏT#6!P¬ÿ77çÿê”�—â;Šóµ‹[’êÓÓótð¸Za@^Q¡ME@…&ÛP  @€ @€€Š @€z�Àû÷/V)Ÿ�ž�}ÓàÈ“/ÏN~etž;à”)Ã"—9ºvî€�ÄE Ï-O„y 3o˜•ùÝ;3o›—Yœ àÓ¯ÈGÖ™ûUw]¼º#Ï¿ @€¨˜€Š€ŠM¸á @€”A ¨øÀþ¹n·û–K"?xC.úß6/ßÀk›qÁF€@v‘gÓøÜÁY0ðÊí³²¦Ê›Š€*Ͼ± @€ @€@åTTnÊ ˜�®ç›uæ®X¹ lh�bõò–qy¢ókgåzæ÷çÛø[ÍUÍÇçÚÞâ–*žù<n#ð7CúwÄ5[ i�œ6ª-òø�²àèó1ÒÜTÿZ€â}c4^¢ME@‰&KW  @€ @€Àú ¨X_A÷'@ O ôë—ÇIÛÚò(²�ô�þMùÚtÜÄìËqsͳ¡!×9m¼œ@ý«:ï±xߨùšÞYE@ïŸ#=$@€ @€uPP7J  ЗšjŸSЗæÔX @€B x߸!ZÞpmªØp¶Z&@€ @€½N@E@¯›"@ 7gUÐæB @€½S x¯è[zçìè @€ °B@E€?¼¤@ss>Ivtä™™ÛÛóÛhm @€Šo (Þ+–QÃ9Ê8kúL€ @€ÖQ@EÀ:¹Õèß¿ ¶µ5¿«Ù÷TgÞ�” °º@q^€òÖ#R°ú̺† @€ôY}vj Œ�ú Ç};�@qÖ€â õÝ—Ö @€zƒ@ñ�ÅÊû«KªXÝÄ5 @€ @ Ï ¨è³Sk`l�â¨pÙ?¶!d´I€ Pe™)ý$@€ @€up  ˆš @€ @€ep  ,3¥Ÿ @€ @ ÔQ @€ @ ,”e¦ô“ @€ÔAÀ�€: j‚ @€”EÀ�€²Ì”~ @€ @€�:8PDM @€ @€�²8P–™ÒO @€ Pꀨ  @€ PÊ2SúI€ @€ê à@@5A€ @€Ê"à@@YfJ?  @€ @€@¨¢& @€ @€@Y(ËLé' @€¨ƒ€u@Ô @€(‹€e™)ý$@€ @€up  ˆš @€ @€ep  ,3¥Ÿ @€ @ ÔQ @€ @ ,”e¦ô“ @€ÔAÀ�€: j‚ @€”EÀ�€²Ì”~ @€ @€�:8PDM @€ @€�²8P–™ÒO @€ Pꀨ  @€ PÊ2SúI€ @€ê à@@5A€ @€Ê"à@@YfJ?  @€ @€@¨¢& @€ @€@Y(ËLé' @€¨ƒ€u@Ô @€(‹€e™)ý$@€ @€up  ˆš @€ @€ep  ,3¥Ÿ @€ @ ÔQ @€ @ ,”e¦ô“ @€ÔAÀ�€: j‚ @€”EÀ�€²Ì”~ @€ @€�:8PDM @€ @€�²8P–™ÒO @€ Pꀨ  @€ PÊ2SúI€ @€ê à@@5A€ @€Ê"à@@YfJ?  @€ @€@¨¢& @€ @€@Y(ËLé' @€¨ƒ€u@Ô @€(‹€e™)ý$@€ @€up  ˆš @€ @€ep  ,3¥Ÿ @€ @ ÍuhC¨Œ@GGGŒµ­­-²½½=²¸¦2J€¨�@cccŒ¶_¿\AojjŠ,®);�Š€²Ï þ @€ @€�µP°XnJ€@•Z[[cøE-@•Œ� P�ÎÕ ÅûÀ¢. ¹¹Üÿ+­" :ÃFJ€ @€Ê}à @ ZZZb/źawvA€ ÐkŠº€¢R ÿþ½¶Ÿk€5ûø- @€èS*úÔt õ(Î   ¾ªZ#@€”] xX¼W,ãùT”ý/Pÿ  @€ @€ÀZ¨X ,7%@ :�Ï[�Q) @€@×:�@ccc×ïØã·TÐãS  @€ @ ûTtŸµ= P"�âøn‰:¬« @€="P¼o,×™TôÈŸŠ� @€ @€�žPÐ3îöJ€@/ðM½|‚t� ÐKÊø¾QE@/ùãÑ  @€ Ð*ºCÙ>(�@ñ­¥ë¶ @€t³@ß7ªèæ?»#@€ @€=)à@@OêÛ7 @€èfºÜî @€ @€@O 8G@OêÛ7”N ø®àE‹EÏ—/_ÙÒÒYœ1¸ŒŸ,Ýè06�@ccc´Ü¯_®•öïß?rÀ€‘C‡�ljjŠ´è*úÆ< @€è’€Š€.1¹TY Xç_¼xq ,X° ²X*ÖŽŠõ¢b©ÊJÆN€�¾!PTxõ_K–,‰AÏÿ›l²I\2dHdñüß7ÆkÕPPÍy7j @€¨¨€Š€ŠN¼a @€@WŠZ€¢ à¹çž‹» <8ÒúWô܆e(žá;?ÏÕóçÏ�á´¶¶F6,R]@çWŸ þ @€ @€@…TTh² •ÖV ø\hQ P|.tm[p{(»@q^˜âU xEhnÎÿ�*¾M ì£Óÿj ¨¨æ¼5 @€TT@E@E'Þ°  @`ÍÅ'B‹³çXóíý–ª 0hРæÂ… #‹W‡¢^  c7ƾ$ " /ͦ± @€ @€�—Pð2@~M€Õ(V{гFç….¾A šFM€…@ç×…â•bÓM7…C t*J7e:L€ @€Ö]@EÀºÛ¹'ôa�åË—Çè:�t¬¡ @€ÀZ ¯Å+ÅZÝÑ� ô½d"tƒ @€t‡€Š€îP¶(�@KKKôyàÀ�¥ë¹ @€À†(*–-[¶¡w¤}H@EÀ‚Õ, @€è�*zã¬èô¸@ñÎÐã¡è…Å«ƒo“é…S£K]PÐE(7#@€ @€}A@E@_˜Ec @€�º Xç©;©  ÐǼRô± ­ÔpTTjº – @€ª.à@@ÕÿŒŸ @€*%à@@¥¦Û`  @€ @ êTý/Àø  @€ @ RTjº – @€ª.à[ªþ`ü @€@7 ,ôîØã¥—ý&ò–žŽ\ØšoÉ6±eääé‡E¾ýÐÑ‘ã_¯ÝÚæE×¾ÿ©ï4oÛP9IDATFþ¤ß>‘ùðá‘Vëtû“7ÇõçüëìÈC?ów‘Ó‡DØ @ ÇTô½ @€ @€�îPÐýæöH€TU evŒüû߸*òÎm‰|Û{·‹Ü¬áùȧ{4ò±ÁEö�¥ØóÍdÿù3"/úÙ®‘g³U^ÿl Ð[TôÖ™Ñ/ @€ °TlTM @€^L ãÙÇâêÙ GDN?vZäî[7þõ†c·÷×ËÏÝ—¿tö/#7ýÇÓ"ß:©óÛ¶¶¸æžK¾ù¥'Œüüic#óÅ #�~Läwþ"òú{žŠ\ÒxäÄò3üïxÍŽ‘›­X êˆË‹ú}ä%?º-rÆœ…‘-7Ž;ý¸È³Ž9 þ½èÖ84®Þ÷Ȭk¸÷úë"¯ßëï#_µUWW›=˜û½øò[#ÿ0wQdûFé3yÿƒ"ßüê�"·èx ò¼�^Ùú¦÷FþÓ”¢æ =.?xù¹‘çü"{òæsrï‡oVSíX—úåoFþzò;"?uT¶ÜÕžÅMm裞 ûèÄ @€x1�·–_ì÷®#@€¨“@ã°‘ÑÒ¶CæGÞ9ã‘ÈÃGå· YY?åÖ84WÂ÷›ø³Èÿ™17òM“ÆG®X™o}8.ÿþ®<³ÀN¯Ê[o\Ùб$âæÿýuäô×yör�|ùìòk_¿1²õÀ£"ÏÚŸŸ¥ÏÖ_~ËUúÖöA‘»Dä:òû3²Náô½²o/¶å½æ{ßr߸ü™£vˆ\±÷ͦÆå¿?á/‘8?Ï0ãè“"'ì”õÏþ.¯²=+F>õPä]ÏnyøAyvƒ«ÿ4'ré~“"ûÏ�ù`ó˜ÈécúEÚ @ ðœè/� @€TH@E@…&ÛP  @ ëqã"»~/·$Ð�¡;äúüû?9%ò¡?Þù«¯‰üøÕy®þÃN91ò¤IC"OÚ%rjÃÿEÞzßòÈÝviŠ|èŽY‘‹vÌ•ÿ)C‹¿Õ¸[®ñŒ•Ÿ‡o.þ†óÊØò“þó´ --ù©þŽŽü\ý£�æyõ7Úv«ÈÍ;·W¼ÜVk?ZŠÛ­x¤l´c\~ÃëÆEž}Ù ‘·O<&rjÞä…mÅ#+÷þÈ£ÏFn´m®ó¯¾÷ÛŒŠëG·gEÀÜ'²‚`ÚŽc#G^™kþ÷/Î:‚æ{ˆ|dl*í7ù™È_Ý”ç¸yÖ#l:+kž—·Ü¾©èg\´¨›€×ˆºQj¨ÛTt;¹ @€ @€�žPÐsööL€TY 9???~�ü|þø=öŒ<èª #?}qžEʧòóöŽ‹Üo·\¹9wÆìÈ¥“ò|ø3îÊo˜tt~®~ãâÌü�VÝ›šòöÅÕqá%¶Ú yñ»—»éK´ðâWo2õ°øÅgüWä%×äêý„ƒs�«í¥SIAüþ¥¶•÷mÚ*+& Î3Ü7;ÏÐqw~ƒÀØ�ó†o;WÔ÷|yä/~’ëÞÏNÈ3áOÉ‹ë¼åjÐvûížùë["/¸&×ÞOž62ràÒütýìEÃ"÷™”ý\Ûµ£ÆMw�{½ùÕ÷DþË•¹>ßÜ‘­½°e{c˜¹ËM7Dþ÷uùÝ¿æ€gмâG©1`Ÿü…ÝWŒ4Qvš°Uä“×d›K†O‰v|dç‘n²C~wÀV gG.›¶Cdç%ÿÁ;¥ÌöKï�œµÛ¸ÈñÞ톂�« ¨XÕÃO @€ @ O 4Ξ=;8vl[µ @ {–-[¶;80?IÛ=Ûºõ°{úf/Ý#0gΜØÑ�!CºgwöBàe–ßueÜæ}ÿ�ëço;'×ê÷ü²wr6 ÀâÅ‹£uÿ'µ‰KÕtw¾S-`Öíýêc�åwµ¨(Õ—Î @€ @€�õð©©õóso @€ÀÈ ̼óÏ‘M»¹‹Z€ nnèË*úòì @€øâG @€@/èh‰N,Y’µ ¸)òÒ?dÀAïͳèŠ6 °®*ÖUÎý @€ @€@ T”pÒt™6¼@cãzEû†ï¤=ôa�Žçî‰Ñ�û‰«#ïn¹çñ¯‰¬›€Š€uss/ @€ PJ¥œ6�&@€� -P¬ó´··ÇŽúõsÜ|C{kÿo7™W�ùåL½M xuPÐÛæEº.à�M×­Ü’ @€”^@E@é§Ð @`C47çK¤Š€ a«M”] xu(^)Ê>ý¯¦€Š€jλQ @€ @€@ETTtâ ›�5 8pÍ7ðÛ>/0nܸ>?F$@€ª) " šónÔ @€ PQ*:ñ†M€ @€Õp  šónÔ @€ PQ*:ñ†M€ @€Õp  šónÔ @€ PQßPщ7leèèèˆn766–±óúL€ @ .Å»âõiJEÀúè¹/ @€(™€Š€’M˜î¨²@{{{ ¿©©©ÊÆN€ Pq�â]ñú ¨X=÷%@€ @€%PP² Ó]Uhkk‹á«¨ò߀± @€ïŠ×ÇAEÀúè¹/ @€(™€Š€’M˜î¨²@q~TuUþ0v @€@•Šw¾5 ÊÆN€ @€ÖZ@EÀZ“¹=+ÐÚÚhllŒì×Ïç›zv6ì� @ ;Šo (Þ ¯ÿþ¼‡^C- @€ @€�Ò¨(ÍTé(�ZZZâÇææ|ó=�e\&@€èKÅyêU PȨèK!ÆB€ @€^F@EÀËù5½Y 82Úù{гgèÍ=×7 @€« ßPœ ^ß°ú^T¬nâ @€ ÐgTôÙ©50Õ(Ž›Ö÷sSÕÑ3R @€�ª ¨¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZÀ�€JO¿Á @€ @€@Õ¨ÚŒ/ @€TZ ¹ýœ9s*Í`ð @€ @ *ª1ÏFI€ @€jÿÈQÒ$\Ñ)IEND®B`‚repeat.png000066400000000000000000001050651523260663500336540ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US/fig‰PNG  IHDRÖm�Æ& pHYsÄÄ•+ IDATxœìÝw|uþ?ð÷gf{O6mÓ;$! ¡W¥KD{;=OÅ;=õî~Þ}¯xÞ�§žz§ˆçYA¥ H‡Ð¥BI !!½î¦l²}g>¿?6 - „l2 y?yð`g?ó™Ï¶×~æ3Ÿ™%EEE€BH"0›ÍB7!„�FÃÝ„¸0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$‘Ð @}Š#ãë/¾Éå@2úWÏ f[îà üñÙ�lø’WçŽUöÔæù²#o}rª†¿j!1þwO§êIOm¡Î-ûÝGï¿ùÜ­Ý{CØ FísUœÙ–e¥B7£×ð5'ßþýG¯­)r ÝÔ×¼ÿæsË~÷Q»wu3{Á¨CÔž½çTaÒøqïo›‰™2gnlË›“H5Úïógò+8�ôôvPÿäIákÒ¶ûù Á¨=Œ˜Ÿ­¬¦¹.gKÆ�çÇiÛßWâšóŽžH?Q\Roç$êðA 3¦¥Ò’º#ÿ²¥‚gC½2o¼À]òí?¶µP" »ÿ•»Ç©\Åß¾½õ¨…O¹ï×SýÚ«œ(ü‚¢#.g?mÊYþî¾óNâ;vÞïæ†x޵͙[ÿ¸¾ÈITã[zŒ¨ƒö0ÀWŸxç?Ç+4)¿øYLÙ®£skë]b}xÌ´ÙcG‰ ל»ÿÀêŸêxûé­/Ÿ Ê O<¼(÷Ñeפ°Wòp µK—69\D¨«ð@F¶µ½ÔrjÝŸlËÉ«µ8 ¶†‹™G>ùï�sV¢‹ "@¹ÚÂRð5•E6 ”«-ªp_UQh£À(b£}oòýGTQâÅhC^Q çi€#ï|…‹£�!ê¸=—+á ¾ÿlˆÌJ£Õ͹l5Ùß}õÓy;ÐæK»ö™\Ý{ÊÐÐ6"á­üì£v¹ÜªñÓŽ|žel¾¸í§”Äé׌8 OnÊjâ@;íî§î ™r¾øtv}îÖc) w„ÄjN”78‹ŠL\b`SI•‘2a~U%Æâ’z~�_]Q¥‰"Žé(�¹¬ÕŸ.[íù?:}ñË“|’RÂdy…¶†âs•c£Cp”e]rR úĸ(8 :nÏdß–ZyK­Ù¢ ã‚hÁÞÝë³›ysá©â‰‰ƒ’_øƒßïmØWOeCg¿¹(?¨#íŽHtö‚Ñõ¨Óé–D ›/%”¯ˆ(hX’úr%7jÏ +Ž�6ãž�”aDRŸà°(üh Þ@ŠŠŠÌf³ÐÍ@¡G£ÑàW=B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„#ºý•H$bYV$QJÀó/BèöCñüëv»9Žs»Ý^¬#øV( B˲žw&º�ñ<ÏqÃ0”Ržç­V«·jÆìè2µZM)•J¥‰D,cþ"tÛcF,K¥R±XL)U«Õ^«Ù[  …Âív+•JL^„ –e•J¥ÛíV(^©s¤ D"!D.— Ý„��d2Ã0"‘rq,¸ ! ÃBðàB™'<‡éº[U÷«8D"Ž? „À[½` ”®ÁF�÷¢¥k0‚B€,FµñJ `#„�`ˆ`wnúoÞÚ—Ëy¡*jËýä�ßn.ç½PWßÅç¯ûϓ˳íB·!äuÞ™”Æ[ª�î;yä|e¥Ùb…Hø¤¹wŒP]lîô—ï}ÄÏûÏãñb¡›"¾fÃÛûý_\4çL#Ô^ˆ`ÚTøý§»Îˆc¦Î˜¹(@ÆØÍÅ—š}Ô*:®¶àL%?Mèf Ô%”Òô''OHcYöú{9ŽÛ{èÔÔ;†{eþoGºÁ®Ü݇2Hâ³OMŒoééC#=ÿá«NÚx¤´ÌØlcT‘CÇ<0;Fm2»*3�¬ß±¨‘ª QS挟*%|Cú§kFMö=ôP~½M¤Ž1î�é‘:ÀY�»aÓ‰Ì2+£3Œ™ÒöÜPKÙî-'N›ŒM¼"0bò¼I“Â$ø¢m߯OZ¢Íù~wAmÀØ×ŸHöíÁçó:ÔYr$}厜ü:·Ü/t̬‹GùK€k(ܲnßÞsÕ�¼Ì/nÜó?NNnصùLy¹É jȹs é°æ SgÉѽßîÊɯuˆÔ~ã–<øpŠœ¸ê2¶ìÞx¬¨¢™(â?wÏ=á \³gï¹Ú&F–4bñ¢±‰âéÎ/‡{>|4N À—lþï G¼ûÂ0�õÌ;oä¥>Y°éè‰ÒfF2nÞ܇FéIéO~oo��æÿòÏ3ú¹¯>»$¿€Q?PkjX³qoVNá‹?[xM s÷ÁŠu¹ùÅ)I1~>=׆nG°»òôy[Ô”´¸vö@‰\8bfÒýA*R›³ê›[£ÃN¼j7½9çÀ'»ìwÜßc�¤2cï+¨ŸŸ>T@m'·ž=wÒKsβÓ߬ٻ9ü¡‡Äà,ßôÍþ¼ð;ž[¡qÔüqo' ölL*ŒN}`j ¿Ìqa×öo~ÌN|vX |}ÖþÕºÈ)KîõW©t½™¿�™›ß^Û0æ¡¥OEË-Ÿ¯\õ™ä©g‡*‰«rãGköiÆ?¶l^ iªhR1T¦ ‹Ÿ?|z¤^TwjÇ{«wNZ:IÛQÝí¦ '7¿ý½)íþ…FËlµu4LF¨#{Ý·ËÏîø‘do¬rúpWnühÍAýäg38ê26üø¯�ùÿ÷ò„ðÎß®‚5k%‹—<¸ØÊmù÷ª�‘ƒ˜6þ�í¯½gœÿ·Å8�ú‘?Ÿßþò‘·þõõ»¯þå³÷‹D-)Ìñü‡Ÿ®;¡èõeõhþB÷ÇÑæF£C¨h/Ùˆ6zÐðh½�Bª 44Ä]k´\uàŒ6e.ÔŒ?)J£T¨cÇK�¢ùϺÒÁÃîI ÐkT†„aãÂÝå�<€ëR^¦%lÆì„p�B9kZœ¦­6‘>eDT„^¡Pú$ S×Õ×¶nÌaÓO[‘WO£ã*jÝåëÿßÁ–\v.Äâ Ä/À§¥qD,“€›ãh“©Ñ¥ iíj±þ¾L©çÿ\CÉÞ=gN5X8 œ£‘‹hK/6$´½Nú-Ô¥%Õ­»÷\iq5èo`‰6ÀGjª*±\Q˜¯¿PÐ6zÔð@)@›Ì��ìâwT˜ñ1øÓÒ’š+½¯?1^*s]±Œè‚ý•u•ÅÍ-·©¥ê’Q¬&"–åÝ\ë>„»¶öúWî:„a€çoïùÙè¶ax}Ùƒ2©ôõeöZþ‚"˜HS¦ŽŠm:ýéÿöïÏ©(«6•–”ž>q©ÒM´:1Õ”Ø(ðöâ#Ç�]?¬I4ÃÆFq'|´¼ªÁRW[•uìüÅND?T^²c[^i£Í\[š¾'Ïä¶�©|¤¶ò2³ ÀUW¸åÐUyÓëù½úû�M¨#kê?|™mä�Z ¾ùç—Ÿ7ßB†ó¶Æ²ŠÚ–¿J³ ´ã¦%¹ÚµætM}sSéé½ßr¤MJò' 4쟢õ+�fU4«+Μ*1�R¯c�Å• Vª ™4cÌ�u•7n:åy®u“oíÄQàoµ?çÈÚñFVë q ï.•<óÕö~³iå¯kbßÐÑ X2\E@zßs÷²k|úö^3'3¤N^–>úÞ¹_¥ÿöÕ]¹OêÌéóvÖw´%¢è 0Ñ�¹çeÇîoüîwuN‘6xú£1©Džvÿ’Ç6îÚüßϾ²uHÊ#ÏÅë?ûÙûÉšôåMo òЄa/ü||”ˆÏ˜�o^ÿ·w¿“©ýCMŸýUþ 8Ñ$-œ�ÿÉúÿ.[§ŸýüS‹¢qRê—X¶·ßº¤¨¨Èl6÷òVû)©TªT*…nB¨O°X,G·vú4 öVBH0Á!$Œà.èÑSÅBý þvœpâB¼Á]ƒŒïEþˆ}8†aÚ½®Bh@q»ÝÝœá�½à.à8ŽRÊqxa„4/FFp׸Ýn»B¡Ín·»Ý7¼¬àMÁî†a,‹ç_ì #4q×^ù{ î‰D񯯬R©\.ÇqL+¡Û…êA<Ïó<ï ”666J¥R¯ÔŒÜeR©Ôb±BÄb±D"!mŸDÝŽÚ>ãN§ÓårQJ½•¿€|k$ ÏóN§Ón·wzw„Ðí€BaF$yw¯#ø1 #‘tøÓš!t3p!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚Á”o‘H$bYV$y.�—‰@èvå¹L!Äívsç­+{`ß …BAaYÖó/^¬¡Û›çJ• ÃPJyž·Z­Þª³£ËÔjµçju‰D,cþ"tÛcF,K¥R±XL)U«Õ^«Ù[  …Âív+•JL^„ –e•J¥ÛíV(^©s¤ D"!D.— Ý„��d2™çÚÁݯ Ç‚»ÀsÍfB|Ch óä€ç0]w«ê~‡×/˜�ê§¼Õ Æ@éŒ`„x/ 0Pº#!Þ‹ î‚·€ÅjØuǹZ3¡pý¥@ 0þ~áHW|`¶!Ô+¼rL#Ø;Äjø» :±\D˜ëÇé)¥nÊ7Öšùéâg¦¹âi'B¨OÁÝjï`×gyÐK”b†m÷8)!D̰z‰’å�]—ÑËÍ£–3ÿ\öɺ2¾—·‹ê\w{Á[?X¾£úÚ¶lèì7E¨6WkÖ‰å7œ¤BÑŠå�µæNKÙ�|òÁײùÿz4Nâ¹}ú‡—V�xþ…§=O*—½êÃ÷Lw¾û|šÖ ³bB‚énNÞùð’án à<»aãÿ©O�÷e€02%ë•Öõ„‚ˆÜÔ.…ˆ0”ï¼7*4Ø`ß]\ÂÅŲà¾�]ÄKÝÙgË]‰bàks/ÚÂÆF¨1êJiú�““'¤±l;‰ÅqÜÞC§¦Þ1Ü+ó;ÒÝVúè”@íj ° u ¿àÈÛóû5Î{_ž9ÜsoÚöŸuÙÉ‹–eþé€vIZÓÎ=ˬ¬>:aÞ¼ÑÉ> g>›~pëÉ £K—üÏOõI³Þøãóyf¤ê̆·(¶{ª –ìõ›vAêÏ~ùèsüÛÞ\ÔZ²fùÖâ!÷¾8ó t~>¿ýå#yKÞýxµÛ͵-çxþÃO×�¿PôÚ‹öhþBOކ'Jó³Š-híùK5A1)z@õf¦Äù©´þaÓæ¤V]ȬäÁ^t “9sd’¿\¡ ;y°®8?«�£ŸöìoÌëë]`ïcƒ’bÅ…Êœ@+s ¢c|"‡F™Ïfyà /”31Q1"¾äð‰üÀ1�ÍŒ õUF}xA‚õ§c'-ž*¨Y7ô¹%iC" ¡>ž}Bܵ»ÿ»î°~ú/Eã Bø›—.¸TþÞò–æ8îÃksòŠ^_öPtdpO7 ‡Ž™±‘©1ê/ r¬ƒFɳÎ7‰öc€©. õ£÷–dë)OêªMç¿úâ¸çÊÙ9e“…‚OßÊ J©·®q£zؘÁ!œþçL‘##• ObøêØÅêîœ‹Ž˜©aꪨlP„ê[/Y! 5„ðÇJj¸qáÀŠÐµn‡RJÁ]°e}NAÀCâ�W¹@¨UxhÀëËúÛûß¼ûñ÷Ï?µ`Å—›<ùaèüsÒ§ç³!qiÚ §r­#"/eÕø¥%i<§(´ò ”²þS½kŒ¦õ.ÂH•zœ26*¢)+·È/¯< õQ5â“¶¡ »„½P�¯ à¢àÚ÷Àåi±˜½êŒ«+r�k8ûã¦ü�ÄkúÖ·BBŠ |õ…¥ÿ`å+¿ÿÇñžüí�M÷XÌ1ú´dí¥œ’ò %UÁ1)mýYgCUCKlðµ5e.u€!¾¾LcUƒX«Ué<…| Mª¸ÑE$ú›r\,ò‹NÖ ú˜Ô€ª¬ýEe¾ z ñ±–U[§W8J+Ê}¨_¯)ë?eáô'¹Ãï̶¯N6a'¡+EE^_ö L*}}Ùƒ½–¿Ð“§f�ÀäØÀ’ ÛÏÃ’£¯Q0þ´#« Îj6–ìÜše4 ÄyäiÒìíééyÆ:ssmyÉÑã%u€7¥¯øâÍÍ¥Žk¥·Pz³{%”RþfJ2~‰ñòü¬"EBL°çUbô)‰Êœ3EÒ¸¨0˜ðñ£‡˜Ž}µ£°²Ñb*ÎZùÃyɨi�^Hš5Œ|òÿs«·0a#t•ÈpÃ?þïç‘á½—¿Ð£'(3ú˜aÇ(3Ü·HÙ–ÀD?9Ö´é³ceͬot£ Sƒ�ÄϺûQùá�›6n7»•OôÐÑ @yžçûAXPnÊ‹É�»înÊßÜ$&rP˜h_ñ�¤ ÖJ™ð¤hõ㱃ƒ[ޝù¦>ó î»uÛÿ´­Ñ%÷<úî_ß­ ×�N\UmÐÄÙ‹³ÿ÷Ý7'½02h@ö t-–íí�)**2›;?Yë–ñEÛ¾ý¨jèïKò�s禿±�}ìדõÏA©TªT*Û½Kö·-´Ö¬—(;ŸL)59-L€ÖöÚìži#B¨—X,‡£[»è�¦'#Ÿ3fåÙcS¢®:òC;í¢õ[Ü‚&§ÅÅsíŽHPJ]ãN§ÓårQJ½•¿€|k$ ÏóN§Ón·{ñ:‰BaF$yw¯#ø1 #‘H„nB¨ÃAL„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ žw+X–•Édb±˜a¯ü~B¨�£”ò<ïr¹ìv»/”ˆÜeJ¥R&“ Ý „P¯"„°,ëé~Ùív‹Åâ•jq ¢k´Z-æ/BœL&Ójµ^© #¸ ”J¥H„û !‰DJ¥²ûõ`ß,ψЭ@õ2™¬û?æ‹|³0B×èþµÛ1‚o–X,º ¡¾¥û ǾYøq¡kt?0VnÖ€ŸÿËþøß—ÿ—Ó„?Ò„P«îÇF0êm8ùö{æ” IDATGkZ2—øÄ$ŽMò“ ðo"„¼ §X¡ŽPsN~�;²õ&ñIwŸ€ÍAèvDŠŠŠÌf³ÐÍèôz}GwQ[Å®ï¶þxºÖ*Õ§Lž’Vóã�°Ç7EçÎÚ¸l—áµ»ÝëWÎjŒ|úÍûÆŠë26í\´¨Ê.ò�¶?òÏù#Óæ·¿ª˜8×7s×î¼·*pÄ]³¹3XqUW”Ï_·ü3¸swrí‘òV›pÇÌ'Æ:w~»w~½[e;Þ££ôž/[Ë¥Œ•k�ž(µ0>!cgÏ\2Ú_ à*;²û«íç ê¨&|ÐìE3¦EJk}ÿÇUù�<Q}ùïs”?þ[í�ÿyvˆÔræ�7òRŸŽ,ØtôDi3£ 7oîC-›à�gö|¶þt^ÕE%Ý;M½÷[ó‚?ÏIÆïzt›2™L·¼®F£éwŸ ¾$}Ý—¦´_-ŠUÞô±3ÿÀÛ[˜EÏOˆï‰‡Km§V¯ù¾,öÉ—%È›³wlû:ÃÖÚܪ“Ë×èÇÎ[|�^ sœûþÛO.D<òóg’µ®â#»>ý÷zöõ&ûuþHlG×ÿ4ù�ù~HÞ”whÅÊÕ_êžyv¨üêuhÕþôóæ¾ò{?þÒ¡¾î÷ãÌÿË#’ªƒ›>ønobÒ}c•@M™}t\qÏ·žÓ¹ üùêïuO?2Hb>½õí�ÖO<õB”ÜüáÇÛ4ÿoþè ‹oûâ·§ÞzeL>ÿÊ º Ö¬•,^òàb(?´åß«vFz`’¸Š£þ/K9ká_ÇøºË²¾]u°ˆKñæ³�Ðí¥û™Ä�[÷ŧ™ @#QjB¢bÆß9t¸AÚ3c†D;Ü×WÒyí|ÝŽÇõ�Í!éC†§}ÏŒ{SëÅý§øÑON.ÐN\tGΙµ5m÷6s‰OÍŸ/jÍÞuÔ1êÉwDIÀgö¬9ç>Ùv¨òŽ{ƒ;ß„\jäÇ*¡äpF^ĸwÇk@òÄYƒ3¿Ê(]ïwtO®nòS³âu @´ñ#÷­>œc=ºó �$~êô)qJà3cTòžíEUhIññ3¥Ácþ:#*ˆÐ�xÒ…ßì¾Å'¡�À;ÝBi⤗g‡±¼«¹®öü‰ÌÕ+ŠJ¼g~lO¹!Ú¸´Ù7*ÄÕŸ¯á'´Þd|cfNö~S”að”§|O´C ¶ÖÖÓ(Ðdl°‚Ï-´¡¢GÆGÖblàÀ^t “9sd’¿\¡ ;y°®8?«�Çq©T!Wø‡FŽˆ×2®Âs?™‚gÍ>$Ä'($45ÞדÔÂÇÍž6=É¢½î;~Üèp­V«O™>v”¼"#§¹—O ʸ Éô覽™U‹¹6só�cæö›@ñ3'(OnØy¨¨ÑÜhÊÚ¾mKUèôqA,€$$ÈÐTp8§™pÕåmØWâ¾bEË™Ck2«ëÌæKGw®=+96V~+-e"Æ�TwôÓïÏæW›ëŒµy'ŽýTì¢;y�ûð¶Ïö•×5«ÊNî?}¾ˆÚW#®¾x¢¤¹ÙlµßÔÓÊD�L.9ºê@y�Åf,ÌünožÉ�P'zfFåyJøºº*GÓù¯¾8Þ²ÍÙ9e“…2!É ÆV­üôëÓ± Ç%�ŠV‹�6ëº�Ðë/ÿ& Šëàú Dè×zdN¤ €3&3ê^={€(F=pŸñÛíÿûk†Uâ“4qô�‘åÚ/*Ž¿ç�ç$;Ö._þ™…Ñ…ÇÏýÅôièÇç¿XùñsTîã»\•ö®—_¿«í¦(á…÷Ún©¢F<ñËO\[ƒ$tôŒWFϸv±Øò?»| ³m+ÊÔWÞO½\Lýä?~Õö‡ßõÛá-ÛwemZKž‚‰PGzàÓÁ[N8oô�N50Ä×7€i¬jkµ*�çO£�· k £§Ï|ù‘$z*ûœ�¨õqƒ±ÌÖ•mQKU­£%xÝÆâjÐûiðœ¹M9AÙi,52Z�7gƒÐëŽáõÔXQëÔ¨4˜ÁuÀ;ê´ÖÕ7�Æ‚œì¾\¿*_5õÞaa,yäiÒìíééyÆ:ssmyÉÑã%uxSñ‘슪»ÃÞ\^Zg•©tb�Ä$�Ñ–mßp:·Ú\g¬É9WÑpãäá/þtäxYS“Ùtfç‘ GȨD jµjÏ�«k²Z-Î+‹›ÒW|ñææR_uúÃ|»¾ÀÀ—í[÷Æ¿~ÊwÝÚ£ç ìÙqº¼²Áj®¯<¸zÏq;*¾»—°ë§h}î¦-gÏ•7467WæúrwMðÐAÁÁuÀ;Žœ}oæaÅ �."vÈ÷$'úzj–ÄϺûQùá�›6n7»•OôÐÑ öÂC6UZì Ö"¦,=H A³žÎlÍXõÉÑ&^˜0æÉ„œ³Œï¸±>ç7®[[ã”ú…O_zçh-¢Ž›=¹xåö5ئ›ò袙W¬Ayžç)¥¼çp?PžãoyƒH™¦ã?¬^c²¸ˆLwÿ33Fªn±®~O"q^:øéž­õ6N¬ö<öÞçï Äyiu¤_#‚ÚrWüãTèÓ‹çôJ/«“kD „¬n^#¢ßï" u!„º¯ßG0Bõ_Á!$˜~<ÜËp,!t½�>ŒBýF0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #øfQJ…nB¨oé~,`ß,žç…nB¨oé~,`ß,—Ë%tB}‹Óéìf Á7Ën· Ý„Pß‚Ü{8ŽÃFµ±Ûín·»›•`w�Åbéþ3Žº ¸\.‹ÅÒýz0‚»¦±±û pv»Ýl6{¥*‘WjP,‹Ýn—J¥‰„aBˆÐ-Bõ8J)ÏóN§Óáppç­j1‚oÇqV«Õjµ Ý„Pÿ†!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚Á+¥Ýºm{2.VtR 6:xÖ”‘½Ö„P¿ƒ½à[ôæûß:’Eíäïàѳoýë[¡[Šê»°|+¶íɰ6[ßüÝ“7,ùÛ¿þo{zÆÌ©ØFµ£{ÁÔ–ûÉ¿Ý\΀;7ý7oíËõÚ•æv±°Â¤¿™’†ýÅ¢òžnB¨ŸòZ/Ø™¿ï/_—$?ºtQÌM×ÉUoz}º‰aD �oôàÄ©“¢”øS@¡ÁKL9'/5{6³tnL”¼ k²±wÍ_š,£n{]eYÆ¡#ÿù¸âÁ§§¦i1…B·?ïD0m.<–¯37ôô–óÙ–¨‘Ê.¬+V¨|}äÔ~þþñƒC|>ݰ~WÌà…Qrö²ìvåäW66:E~ÑIóŒD.ü÷ÝcÚ¥Kïoéksù?®üÔ4â·÷À÷gHæ,z,U�á�ê/¼2LMgs ô1Ã’ãR5åDzšè-×$ ˜8:Øž[Xà�È5Q#'>óüÃzqÚË™Õû«xEä°WvV¥ÓSÞ]}6Ï=$RC€Àß2Fõ/Þˆ`¾.#Óœ ÒKÑg^¨æo½2…ŸNå2›,}ø˜!†@�Lé:2A×ll°ƒ415œË»xÑÀ•]:g N¬`t‰?ûÍ£�¥`!ÔŸxa Â]š{¢.`Ò �¼ï|FEÚÝ¡·î”òÀ0hSqööýyj¬.Jx‡• ¥<€2.>‰î=]èJÄ–äY#G$veÜ!„úŽîG°ëBf¾Ée[ÿÎòõ@)4fVÌ ½¥ªic•É"Õê•„ÖgýÕIvÒÌ–iD´jïÚwŠ@2<�ù&»Ü+ÏʳÇNŽPa×!Ô?u7‚©­øX—8gÁÝÑbÏKÎ�OŽäžŸš|+µ•¥­R&‹WYYD¤ßh¶¶1‹bR£Åßæ—©Î[C¦ÅË0�BýTw#Øœ�{^÷äˆ@ƒ¸e Õ¤$Þwì¼mÈà›ªÁem®«wqNkmiñ‘ƒgó˜ÄǦ…Kx�Jë.+®r%…²æ‚“;ÏÙhpk£Ãâ†Jwþ´_fŽš   ç?[qB2sáÃ8Œê?ºÁ'3+õÃÆÄ‰//!òÈ ©Ò'/Öw¼^îâŽ5ÚIX‘Díë—:åWãc R&d袉uk¾üê'V¬I˜7kðÚ3­+±þÃ’Äïì7§. —·$.å9¾G»&6:øà‘¬›)YQmœ<.µ§Ûƒê§HQQ‘Ùlº]æÊMÿÃ:~ñËÓSeÂ4à­}Ûd±;;M¹¢Úè£Q½úÂâ^kB¨Ñh4ýô2=®üóeìà; ”¿ð›—ØžžÑùõ&�K�1yD¯5 !Ôïô·¦n›ÝÕTtrK¶lìáRAÛ2sêH¼BèÖõ³¦–‹_¿»ï‚È'yÆÔi!x±c„PÿÖ_Ç‚B¨¿Óh4Ø‘D!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ég¿šÑå›eë‹|רª¬bR¸Æ4/ˆ¬‹ÓØ…nZO¡”:]œÃé©D$³„¡…P¿„¿šqëœ<ùÇYÚKzzÝ]`Q”éÕ”J sý�ý[c“½©ÙN¤8œn VIµj¹ÐMC¨Ÿé¿¿ ,<'Ož;u¼VÙî½`õ%}Q³ì£q—n§®¨n‹ÙPƒîšåµu–ÊZ³Á_#H«ê¿zj,˜Zò¿|gíŽr¾‡êÜ?Î:Êß6Çk•oŸ5xyÃ|CúòO?8ÜÔû¹^QݨRJü}U×ßåï«TÊ$•5¸;…P×t·¼õƒå;ª¯ÍYÙÐÙoÞë;85V§¹=‡óͲ5—ôm7‡º¿™çŒö“@¡Ñ¹t£äTMË»ú’þþèŒ ;kò·lÏ|éÉ/Öì|çŒïð™Ó_Y ®=¾çóMGãâg—CsÎ�OvÙï¸ÿ¾ÇIeÆÞ/VP??}¨B Ou«<óÏ<<ã׸rá•…¯GÔú`…9'»fb@ âŠÉ›²¿ø*“ŒŸòâýz±¹t×»—»f¿<;XzõÚrmàˆ™I÷©HmΪol�8Q ¼ñÜ7[tæ͚¡Sè¯^ç8œnÏü‡’Jħ«ëÜJ]¦:¢÷ÕêÅàln®®³He +‘ø*•Rq[-•õ–&¹g9¸¬Í5¬Dç§•°L_Û¥@èJ½Ô±$ºø™Ãµ*Cbʈ@7Ä Ÿ“äç«ÑÆ�OŒæë+ëx M™‡ 5cÇOŠÒ(êØñÃR èD¾€�™µô¯Ï� ï3]`/‡Í½?MqjÓ_þ½}Ó±’‡§»ÉWdf]òK]tg¸A§ô ¼`fŒíÄ™,ë5+mô áÑz…T>hhˆ»Öhñ ÌS 7{Úô$CxˆVÙ§¾¾n‰\£ÔÊXË*4r¸.Ïb"SÊ–e©R*Îén)Oy‘�¿R-IÅLÿôèvÖK]FïãçÉP"–ˆ_OgˆX$ÞÍð µîòŠõÿï g ê²s!iü)\—šZú–…Fç`õOc¡ÑÙöÜ)\�צŒþÌK %¹yG�íg�j⢙sbEÕ5Mrƒ¿oë�ÄàÄŸ­¨ã!øŠ5©³ìÔ‰ÅåfpX8ŸÈÖIP|˜×ö¿¥QcÓM�iâpºot8î0qÛ7°g´(×Ühm´º]”σ¦m¸D"–ß®ßÙèöÒ[{i Ã^¥„¹þx ÊÆÍX°$¡­ID$WôÁü€qÍm¼t£äøÓœˆ½¼ëíæ¸¥%Wnºq�"Eø�´ð!CÆìÞøá†“ ¿Ýn©kž ˹ýË·4�Y2÷áXµ¬‡¿XùÓå Y‘÷ž;‰˜½™Ê(¥„€äæ†,nXÕU£ÏílžÚêÍÕvq ¿N%&@�UeÍ—‹ãAÔOô™®£ òƒêZ‹B«Òµü)U}uÚ҂Ⱥ¶–�ª�ú”æVZ�.·Óåέ´Žú”¶MJ# #ëoºbqH¤¿ÌÒÜȱA�Z[e­©u¾Ÿ³²¦Šñ1è¯|½øª¢J{xÂäXµ„PkC�Í&„¨UÒÚ:KçÅŒõVµòÖöZrEèR—û†3Êy›ƒ—ªä*±çÈSG êcúLͰ±QÜÉß-¯j°ÔÕVe;Ñ \ÁŽïÞø(£¤/�ä§±/Š2µÝ×Ãy5¥²¨YÖù r£ü›ÝÉŒ`–7žË<°ÛÜì¢b¥.2aô3Ó} €nðC�ò›¶ø×¾&—T›6åÙiarpù™ ú‘æ”î]ùÎç ‘’G-ßœî•ÇÖƒ¿¦²Æìt¹ý|”WîèSJ�õV7ÇÝü ʼÍRjkíSiP˜Z¥Rù9›M•uF†K¤Z�¤ÖÑyŒÊGi3YJJ- Ã(´J_ÎÂÝÒãBH@x™ž[çäÉÛg «;¸LÏýQ¦WS*Å·Ñ"<›ìM;¥T*^¦¡nÐh4ÁÝ•o–­/ò9\£¾âb•M "ëo÷‹Uò§ <«”xñÈBF0B F£Ñô™Ãq!4ð`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B ¦ýjB¨]Ç9�N—ËÅó}é÷»†aÄb±D"a¯ø¡^¯ÀF¨"‘ˆeY‘Häù)çk~йK˜èr¹z´ ·©TÚ›¯�L&kjjòJâc/¡"‘¨‡öa¯wÃ^0Î?ë¹\Þ›¯�L&óÖ „ŒÐe½ù1î� ž=˜ÞÙ–§#ìµÚ¼UB·Œà~ #¡~¯§‡…ÝÜí­ÿ¾vÁ!$Œ`„Œ&¥9kò·lÏ{̈ÑõÅ¢Yê(>¼ç‹]ÆäÇ\‰_À· wcÙ¾ô³§K›"UxÒ�Ù"ô×}²]¦K;veeUX©B?bÄì~ŠN—£ÞÑív•oújONðèÅ�‡êÀQW[S#“‹¸ºâó5ü„.WG›ó‹‹¸�î¶JXŽÊ}{ŠD©ž[à#nªØ³ñÀg[Ô¿]%GÎÖí›k¢xjzlÜ÷Ùvõkó¤•wv°ÜóåDíçN—(’ïŽ$õ{W§Ÿñÿä²h<»c×w«eÁÏ�f®.ÆuúaçΕ§ƒßN8Ó� Gr|S>¢s™ŽïÎøf¯ä™é†«:?nãÞ�— #¾+@ÒpiÛÖ›•³%ÈHGË…z,ûÒK/9Ž[^Ÿ6î«Íññçb£Bò›Úõs¹\�\Ân·ßL%ÀUåmÉÝqÿðµD®ÒFÓ³{ŠÅÉQÁ¢ú+·þPí“£&eç6e)¦.L�SK”>Á\ñ®\&eˆŸ¸¼ýåý.ƒU*U/¿vÍÍÍ2Y÷ñ¯#•J»bD­V˜s²k&*Z_6&xزÇo}V×k³["¨Dcˆœ™<.ÔGÔ˜}ð¿[ŸˆŸ;V ÀÏ}³E7lÚ¬:…>X“Äÿð÷œ˜×ŸNÕ®|íÚ3Žq³ó¸šëK*y?)%À{sBzßÜl#Z•†o4Vò~ÓCZžsQˆ!”)®æ‡_5 p¹|Gõ­Ï¾p)0þ>�Ǭ=’]’Â6œ8^*2!н¾ˆCÒpá¡ø[¦PÈLu濾÷õo–=¨T^²Ù%Çó2é ‚ÀûÜn#‘·~”­Úò«L<„B€ @͵ v}hˆÔS„èƒý¤'LU¥í/]íÝtK_|í¼p8N6÷þ4Å©Mù÷öMÇJj|¸‰4"epB°F-W„¦ÅE“Æêú–sK¨…�›=mz’!4Æ—Yò=wÏŸý×?¿ùË»ë¨Ç¿pw„âúbÈä2éë/=È2Ì[ﯴXZ.—e³;þö¯•Ï_óÙ_0Tfž3;¨Û’8÷¢‹ssŒn⃠—M3HìV'Èdm�$"—*8{³£Ãå·¥>øÚ�WfD(#‡?óÒƒÏN´gïçÝ ›/ÚÚ‰aWÙݻ>ü`åÿ½ýõßÛŸå¼âì>IP|˜øú5Ø�éscšv¯ùÓG»¶žª6{çÊD½‡Ú+·¯:T=dÊ‚ÖÁ5z]ò´³ò-ç«óO #“T€«É>µ¿B9zÚÈI©A޳G·œ­wµS ݽ92©äµeK=Ÿäæf«Õf÷|†_q©B!»ÉJ<¼Òl¢ˆœ53ÒzxÛßß_û÷OöŸQ†‰Å²«ûsÚÙíxy¿ÓO_;ðÚezDŠð!iáC†ŒÙ½ñà '~9!ꪻÝwlþ¦0ü¡¥‹’ý$Œ»ðË¿þtź¬¨Ã„`|‡Üñ«¸Ô¼ÓÙûölúëÑÔŸ=1*º_ô~¨­rÛW;ÏÝùó™¡ž^QÊ•.“Åà%àìÍ©ºµr}ùŽ—ó¥góÍq£‡(hݹï6×¥<5¦�<*ù؇ŸïÙº`š?½²ò"¹Lúê‹Kÿöþ7ÿp•gÉo^zH!ê­Itqތ갹‰T"2ž]~X� »ªw¥PÈÀn·Rð|‡S›ÃJ¤JI‡Ëoc}ìµóò¼`qH¤¿ÌÒÜÈy~­…rž¯ Þ\Pl5 MIö“0Ôb1w|� Bðü•}C"Õ=þ™ç¦ iÌ:|©ô„©µ|Ë—;³C&=7/JÛú3~¡bcQEËCpWT•‚>,€é¨|‡ËÝ•Y®Ä¡áž©¼©®VìÐ2ú+5„FJªLü5Å�w)äÒ×—=äùÿëË„ü ·b¤r‰„q—f—4…Ä\õ½KÔA¾ª:SEËåi]¥É®÷ u´¼·›ÞËúÔk×Ý'›¯ÎO/ Á­�JÂ7Uß}Ñ16R D­ÖAî¹su‰‰2†•ûj˜úò3¯ÓºêŽïÈ*桃ygD¥S‰þ{÷E�ÿüý™²5[Ò{’ÐC'„*i"Šë©§`9=ô~ÞWÏïYîÔ³œ§‡úUQ,4齤—�Ð!!¤·Ý$»Ù23Ÿß“„–„6™ ¼Ÿy„Íììgw>óÚÏ|æ3Ÿ)¹˜žŸ0ÐD8�ýôáJSlP�‘«É/.uë:He[¿^½/läŸîŽT¼Ö7ˆÚ/­þnã!}ïYIZK~±€ññðÓDJâ¾Þ¸/~J÷(ݵáŒ;qD7]£ËûJ ?î“s6bêPÛ{ÇD {·¥v L5‚í¾#i®ÐIaŒëüU‹!�«ß“Ï_—ÍîâxÆQ™•~lC;`Fœ™H–Ý¿n;4è#CT¡q½L[vlÏò¬ª¸°þHutJ´ÒÈã·=ïÙv·ü}ÇJ¥'ޤn©¬vS^oŽé<ࣻøC§ #rmXò?ëÍw=rïØ±ƒÏ-Ûûþ;¿óZS—a)ãªvW6²>uBŸÉ ›×|µpƒ>ñÑy]-g.ßPQé&Zß ãF� c€•®n'{1ûÔî|§“îýïÙº‡ˆºßƒsLä:Œ;e]ꊯ¶Jšðľ�OŠÓY~–Ôàãt?–­î6!®nÓc¬jVnÞñÁÎjåýÂcF=8¨¿Á•¾þªÅPkP|ZrdÇ·û­¯ 63¥ohíV§•ä^KÆœ2i@Íæ´¿=àVã’R&õГ&¿xǶ’��]YÙX"tQ«Õz½¾Í^Îf³51$ßb±´YInÁÁÁm¼íŠŠŠÌfó-®Çh4â%ª!¤Œ`„R F0Bµ<8·¾Üí­ýn;Œ`„.k³;¶á­á<‹RÚ–Û΃—f`#tFp;%IR[n;¾YB¨–Óéd†eÙ6x-Ašž¡�aŒéæ³Ûí<Ï·Ù¶³ÛힺU¶‚ª%Š"¥T[ý Ìæ¼Ïã55-PSSÓ–ÛNN|�¬#¡ËAhþD½7Íáp41S°ì†³ß¢+É-Ó¶Ùvv»]EµÚ3Wv`#T‹a›Í&ÿl¥ö”(Šõ/Ñô‘,˲˜ÂÍÇ0LYY™$I­½í$I*++Óh4žêˆÀ¾`„.S©TV«ÕÇÇÇív‹¢ÈÔ¹ÅÕÊ'päcXJ©ÕjmNJ«ÕJ’tÃö2’q—ŸŸȲl+m;§ÓYRR¢Óé´Z�Í,ŒŒÐUÔjµÍf#„ð<¯R©ä ·2©~ .—ËívSJ›y KÑëõ555.—ë¦_ýŽ¢R©JKKY–5 Z­–aBÈ-n;y¸[MMMUU•(Š>>>:�'§Å9"j€Üü”G€Þú PB!„aŽãn¢]&Š¢ß8F¢9äF«Üá‘m<Ïk4�FãÙAF#ÞJ¡†0 ã=]±,ËjµZü"ï�§ãBH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1xuBÞ/PVÃ0òœ!Ÿ#¡pDz,Çqò$·>M!DQ[4ó¥§éi)µZ­Õj5�<5Ç­OÓC)u8òL=*•J«Õzðö�Á]K§ÓBX–•zdÂCyúDyÚ-»ÝÞœgQJm6NVÙ|„µZíñmÇó¼���Ãá�g%ÖëõžJaì Fè*ƒAžOR¥Rñ<ï‘™¹åÃXµZÍó<¥Ô`04çY555˜¿ÍG –?çVÚv<Ï‹¢XSSsëk®]¿§V„Ðm@§Ó ‚ ×ë=uO„k°,«×ëA¸áœ³rÿok”ávåïï/ϰܪÛNnh»\.OÝ›#¡ZÇBÚ`NHù¶7×T7 æo‹¨Õj¹ ¸µ_Hž5X­V{ja_0BµäYÕoñNsȯÒtg¢ÛínÕ2ÜfÔju[n;�FSUUå‘ÄÇV0Bµnî–7熭`Ö"òmŠÚ浆Ñh4žÚ@Á]Ö–»qÛ¼ÐB>‚i›×’Â[›§V„Ðm#¸�ÂF¨ÝkínDe_îöÖ~·F0B)Fñ–²×/zeQ¦Sér „PÛ»õAiâ‰eß}uÄYß.'ºÄ§æßÕÅÃsY´/byfú†�§N\ªt²úðÎ=§N죠ŽâÝkR·œ,³}d÷Þ3&t W5±|£ë‘9Nnùûí£óR¢­Yk×@'Ò.êºOŠ!Ûo=æ›òø¼�`M߸ù—Åš°gû†1W/Æu–þþÛ¦M#¿½¸Ës6¬>’«Ñ«¯zØ•¹}×Ö²È)³RBIùþ�~Ù©ftÈUË¥ÛW¼Ú÷¡±A*Ë…õëR×è'ÜÛYC{¼MßÖÁ3û"£ñ ô½r]´æôW\è|xΖ´ô‚ÆÜgÔði=Í,Pû™í;WìÏ-v©Ãº& T3µÛ•º.ØýÛî ¹V7£3ÅôLž=.†?¹õý•Õw=5yX@ûÙúêˆiˆ¨ýÝ/aü€3‡÷•ÐØ(wî�Ðç��Ia€iÒ¸üŒOÙGÛÈò�­‡Ðê ‡ÎúŒ `hnI?*1ÚÄõë¹þ'k…r_^ À]š{AÓûÙG4[?ÚÕÆÉm£¬Üºhéæ'š¤Óª¯ù“½Æùõ«gÏíïgjÛBÑÊK…B·¡�„^üfé¹ ÓÎB�{’º³>£†Ÿþ-óì��ԟ¶ ôÌèP.ÿB†-l̈¸ €o·ñ½/}•–cML04ò¸¹ýì…×óÊmך}ÁTÈ]»®8vÜ俼|ߣ½È‘•»V-;°åÛ=ŽîÓgþÏKS¦FïFRii�^ûUÅ…‡FÐ’œ"©±å›|œV?{!8¾O &¨k'æäÞã—j(uU:�ËuëË^·Þë¡)‰!<à©ø›¦ÓiÊÊ+ßù×6ÛUµÔ8œï²¨¸Ô¢Q_w¨ßêˆ�SûøkèU'ê¥òŠbêR[¸àÀPZ~©T’§Ï$ÐÊ‹Ãß?\]·ž°uiY¡ØØãmû¶<Í+·�‡"Øqlý+o|ñâ_¼øÆ¯üx¶îý‘¸””A1f“Ñœ0¤{gR–["�T™v´ÀÐwÐØx³Ñ`Šë—2,º.lDQ¤À¨Õ:­.0"¦o¼‰Ðuùæë“‡¶£&ðÕhUÖ–ÃÎ;šP»£†Óèùº¿±ƒÚQm§�-ßÔã’õè±Ò¨¤~€hºß3iŸþñ?þïGËS )ÏOŠÖ]¿ò­F=ÿ…Ù,üûÉ¢ú=¹Æá|ïãE¢$½6o¶^ßêÓ4u8kXµ®þà”UëU.[ c2{ú¼Q¡*‡Ý�®®z­Z':ª��>Þ®yç¶óL«¿üÜ}¯>wß«ÏÝ÷òÝ1ùQ¢ R×nD†Wñ’ ÐÊ’rîWûÕL4¡Azy&´û´dvÏW?¼ÿãžß³ªnƒ+ä©£`ÃO»‹ºÝ5­®�^…mjùÆ—Š2—†öëêCÄâãGwæëŒê7¼gˆ3}ßÚô w‹¡ Í£Q«þ<ïyO®®¶Ûkò><î:�¦™+‘µöû�k7üµ/J¡�2ÐÆ÷ZíwÛyª/ØìwU_04|¹ ù¨þ¹LýW­.aô=oô/8ràØ¶E¿¤öýܤC» ZS°~á¦ô�aÏŒ‹�[D¯Õ»ËlnùûGtT;Õ†º–ÆõË7þ¸”›žYÙi@7-?ñËšòOLÊ$öï¾ÿ³o·íŒ˜6*�^¹ò ­FýêÜÞûäÇ÷?ûI~äµ¼¾‡QYD§Ñ »P_ßœ6—Ú ½j�Òé4àpØ)Èßí´Æi'j½ªÑÇoÞ¶íÚ|ì1øÒŠÚPê.-¿êPœ7…=î击ңÇOxlZä¶Fíyk¿ßt<|ø³“cMuŸ1Á—fç×ö¨ ù…¹àÄ4¶|£� 3Ü]’¢ä½I*+/áb‚j�+Ô¡1jKa™tÍbȳtZõüyʿϟçuù Œ¯g¹TTWߊK Àêå.O !~>åeùµÓ.Òò‚2‡¿o0רãmZþÖãUÛÎ3ªä¨..©¸<(ÍOÇ7¶(cJJ Þ¼}ÏæØáƒB™Š³‡·gI •åì/àc#ü|5B~n¹]ãcæÁ~jû«ªG*ì¸ t� �,»Ýv4hÐF†¨Bãz™¶ìØžå;0XUqaý‘êè”h?¤‘ÇoÞ³í<Á®Ó©ïŸ®ý]¾4£s£Ë’€£æØv®Xüë&·:´s¯‰w…/Ì–ÿäÈÚ�ºªÀæÞ}×}x¨¡’$¶z§™g‰Ù§vç;�tïÏÖ=DÔýœó`"×aÔØ)ëRW|ý³UÒ„'ö}|Rœž€ÐÈò³¤ û±lu· qu›Žf=P³róŽvV;(ï3êÁAý ®ôõW-†Zƒâ;p“¸èÁCÆn?¸ñ—5UTÜ¡Û}##åN)*QIÞ©sʤ5›Ó~üö€[eŒKJ™ÔCOšxü6â%ÛŽdggWVV*] „”§V«õz}›½œÍfs:d`±XÚ¬$·�ààà6ÞvEEEf³ù×c4ïðëØBHIÁ!¤Œ`„jypn/|¹Û[ûÝvÁ]ÖfwlÃ[Ãy¥´-·�G`#tFp;%IR[n;¾YB¨–Óéd†eÛb®kAš Ã`L7ŸÝnçy¾Í¶�Ýn÷Ô­ê°ŒP-Q)¥¢Øê‚5ç…x¯©i�ššš¶Üvrâ{d…Á]&‚ÃáhíWq8‚ 4½ŒJu[ÌÈÐVä–iÛl;»Ý.Š¢Zí™+;0‚ªÅ0ŒÍf“¶R{JÅú—húH–eYLáæc¦¬¬L’¤ÖÞv’$•••i4OuD`_0B—©T*«Õêãããv»EQdêÜâjå8ò1,¥Ôjµ6§ ¥Õj%Iºa{É8ŽËÏÏ dY¶•¶�Óé,))ÑétZ­ÇfÆFè*jµÚf³BxžW©TòÐ[„T¿—Ëåv»)¥Í<†%„èõúšš—ËuÓ¯~GQ©T¥¥¥,Ë ­VË0 !ä·�<Ü­¦¦¦ªªJE�Γӿâ5@n~Ê#@o}(!„Â0 Çq7Ñ.EQŽo#Ñr£UîŽðȶžç5�F£ñì  £o¥‹PC†ñž®X–eµZ­~‘÷ÀÓq!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R ^ |“8ŽcY–ã8ù"tÞK ÝfäI!‚ ˆ¢ˆ3Ÿ¡+aß �NGaYVþé©™CÑíJž8†ayÚ-»Ý®t‰�·Àìh1ƒÁ Ï7¨R©xžÇüE7Ä0 ÏójµšçyJ©Á`PºDÈ[`|´ŒN§A¯×cò¢›À²¬^¯Á³s΢ö s¤8Ž#„àœ�èÉ·½á8ìDØÜò¬Û·8?Br-’OÓ¡;¶‚[àæny€Ðõ°Œd(-ƒŒ<+’a=hÜs�G`EB2¬-€]Àȃ°:!ÀF!yo»2Sÿþñî³-¹˜“Öœþï[?¯É»=oôí:¹þ•77žp+Yj;öÁ¼/_lÑ',äî^ùÆŸß{tî‡o­/[«hµK·~NV<±ì»¯Ž8)ay߀„Þý&‰0Ýr¶sþá}zïýŽhˆ³8õçå Ó‚Ÿþ`jßÚ�VÊúíË·6–ÕE:îÑ÷¦„±-_7“Ü�ÝÄ3k R¼âŸ;çޛҶÚiåñ_—fùOô¥î*‘3Ýtñº-yfXŒªó°—ÆG0¢³4ûäÚ ëªf>—lºÅA�Œ_‡q#wD@8ß›‹!&°ó´‰7_<±äü±iÔͯà²mY©¢¼˜†ÜÝ;ØWï‰×ö&”Ò­©‡G îŲ lRQ·ï>:rhÿ‹šà™fÔúäÏäg}6ß>Ф'`ÏÍX±.-½ †1÷>dr/?€pzë›»Ì÷õ´nÞq>¿†ì”tßÝ‘EÛwmL/²‚O\ß”ÙãbÌ„Ó[ßø�}äÕቬ”½þ—_È€qpjÝáüRAܩnj)½;è\E§W¬:tä’�1‡®\e—Ê3/¸Î|-öäß>«ºü0uZ«„€žQ‘a>�•Í�±rÞFÿÇT¬Zwò¢]Ú%ùÑûâ Ö­_q0¿‚:¥ŒyzZ¼wÆÊçàþøÎÄ¹ìËoȈ©ptÙžœb·:¬Ë€‡g§$ú€T²÷ooŸê÷Æ£ €pê³—7›Ÿ{îÍÞ·ÿµý¼ƒf¾øöŒÿݯ>=+†±]8¸hé¾C¹6Æ7#™¯8´fãÒ=9Å.ux×~÷ß7¨‹Ñ»²¬¤Ì²dåöŒ“YsŸš~M ‹¢øé‚e§3sztíà«T ‘÷óøàpÂ0„0  'ø!];zìü®WnÚ�‹×¯6͜ǀxéÈjCò¬Ç˜9«~J]ðŸSQRžšëyG.Þ¹)>rf‡kv{Z¼o÷ï)Cùã­íÒúÅ;íýË„PÖ•·êÇ�g¢†>{o´ÑY¼kõö3¢&ÌÓo©y˜�Á“žÏŸ¸êD7µ[+Ŭ5ßÎ]áTÆèn}fLéÛñºö ˜óû¯æ‘�¿4Üß~î—ÿ®ÿèÝ´Ø¡£_þk äìùü›u+ºÄ=Öùš-E wlÜ6rü_Ÿ¤¯¾°ì›µ 6DýsFdcÅF¦¼1×ñç•N}ï>¹#‚–ùÏèî™þî³fwÖž/¾]ü«ùɇèáå«öjF¿úv¼Y¨º”U¦ò¿®}'•ìÜm}ôáÇæ˜Ýv¬ýrÁ*ã_f�ð#•iëþ¹Ò>æ±'ž‡K»Ö|öÅzãÿ›:`à=o‡ø\ñºÎ¿üüß³Ñ?ó‡î&wÎÞÍ_ý{9;ÿþ¤ÂÃ_.ñOž|ß=þú �ëôÒ_þ/'ñ©—&uÔX÷ÿºôÓo5›Û'È›B8(À÷õ~÷ã>úbñ‹OÏä¸ÚÏJ”¤Ï¾Zvêlöüybþ¢¦y´«•ŠÖìc[OH Ý"´DÊ?œq>¼÷Ô¾Af�6(¡ÏˆŽ5G�ÕŸ� HÓ5Î_ïž8´«�S7qXTˆÉ'$±GßWA¡­�Ñ:ÆNïŠ 7ëýÂãG&ùV”UQp_8sÄ9fBç(³Î3~T'£'ß�'0þw=<ë¹'ï}íÕ9z ·_ÖÖ~}¨èú³Y4xÄ”> �†€èž£{º„{Çw÷5†÷èŸáÈ˯nà1w›qwB´Ÿ! ªûÄÖÜ"k Æ8I÷<=è¡”0½.¤û�ñ‰¶}s ¢(áõ:­Ñ/¨KßÎ×[p]GÝ5(Úd2$Ý=j˜Oöî4+¥Ö}ÛN›GŒo6èÍ�G¥ô#g÷œt\û.í™›÷9ûO34Ö××/(iÂø‰A9ëw×Ö Z-v™1ur¯È¸(?ŸšÌM{¥”©C“Bô>æ°ázúžÏ8\æu£¸¢#ƒ_{á¡óòþõåbA@ÅÏ,=y&{þ¼ãbj öÃ3­`GúÆ×N2 n. y¤ÉIzîÂ"«+ë÷wßÙ+/#ºÜb§*SPÝA¥JÅ1¾&ù„Sñ ŠÒõ»àT÷}¡Ró Š"Ъ2«Û^×ùÊú1¹yG ¢”Þp,'J¯^PÛ]þ-( ÚPyîÃŒC¥½'’+ŸCÔ~!&y (U©xÆß7 vØ(§R� ¥@ë‹@€ ­�¬‚ªÕ*wý‹^ùKýshýóÀ�—Wî<³ùÕ?m•‹ º\Bg›“ª{O�öÕšWß88`hÿqC"õW5;)¥”ø„ªjKÇøG“½EQs Ý9¿}vSí‚®1ºÒ.Qõ•¯+–”H#ùºò™¢#u¥y%ª¢êˆ.±µKŠó–ôÏÿµK~}ÊE�t IDAT*ÖkµD½ïülTDÐüy¾÷É�}ñësOL[ðý*9c£C›®-8.�ÇNÇ% ~i|c9ýâ,•ŸIK@®`ú®Ã^Z(Kx�@†a¯Üµ›3c {õS®|výoL£Ëx &À?�9Sm§×žÓb™«øÂÜè��Æ?�ËD©�o3yëø$�kêåŽ^¢ÒjHhÒÓÿ/!ïxúÆÍßÜ~xæÜYcï틠WÿJj77ÛeÊœÇ{ðõëãu×wÓ«Ÿ./HêžÀñ—¤” �ðÜ´aæºuVcðºü•EG¿úüïºèOý\%9•.jûÇÏËÏ»¤K;–½ññï™­|¥µž]½úèÑóÅEå–ÜÓ‡¾YtTìÛ¯O«Ý3�ƒ£ e‡äÙ(PgÙïëÓ.ÕE0c6ùAáÑ´’Êêê*'=¨o|Åþ¯§gU–—–œ9t`OŽÔyî`Ú±œrk�«ª(?»|}õ×UéôÖm»s¬••eÇÖmKµGN2bNž î]ÿÍÎì¼òªÒÂK‡SÓNW_Wp�‰ ýÇ›ÏÄDaþ¢ðôˆUظ‰ñ?¥nî:mbD·9�ÀêMG¾ù|»�ò~¡QÃ'yøÕ@yÏìÁËWíÿ죬),yLò Ò#×/E%©ö€œRI¢µÇæT¥Öï�Si ÷¢Ý[+lnÎÔ¥ÿ¤?OèØèð´[ÇEÝóà o–,yicðõOL4à.>ùóÒM…ÕçãŸÐoÂãC|¯),ãÓõ‘é~G~ø¿ïŠœÚàŽãŸ?Ì�€©ÏÄW…�¿l^ùæR›À"ã{ßß÷úòññ“ï–߸äËÿ~ccÌ‘ñw?;jTãÔ]§ßÿ¬vëÊŸXnq³ÿøÃ{xö³j,ë¥]%Èk‘ìììÊÊJ¥‹Ñ>¨Õj½þ¶»À)Äf³9�Î/‡n_F£¿´BH1Á!¤ŒàÀ‹ý‘auB€ÜRõ£ººX‘� #¸epÏA� Éð®-àt:†ipfB„ZD�[Á-"Š"¥TñÎè–`EBõ0‚[F‡ãÚ Àj‡Ã!-¹%º}a·Ã06›Mþ‰MtDQ¬¯Bx{ØÜR*•Êjµúøø¸ÝnQ™:J— y5I’$I’û(¥V«U­¾~n"t'Ân1µZm³Ù!<Ï«T*R7W£ÒåB^ª¾†¸\.·ÛM)ÅüEõ0‚o†J¥’$Éår9ŽæÌãŽîp„BÃ0Çá1ºFðMbF¥R)] „Pû†_È!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R ^ |“8ŽcY–ã8y‚œ&5Fž¦‡"‚(Š8S0ºFðÍÐét„–eåŸ8ñ jšM‡îpØ n¼åòl#JË`#�ÀŠ„dXZ÷äX‘� ëA `0ò ¬N0‚BHAÁŠ’Ê7}òÙ?vVPwÆÊ§_]›�¯"t'¹õs²â‰eß}uÄIËûø$ôî7yH„©-²]:·fÙ¡øé³â½á‹DLûþ_î­¡„0jƒoT|ç‘ã’EhšyDt±=»1Q8J¡;”g†Å¨:{i|#:K³O®Ý°~¡jæsɦVôè.>yÞFã[ûeZ@“t÷Û÷Ʋ¢»²4ÿØî½ßþólÖÓ?ØYÛèGA4�†�èÔ–EDžC)ÝšzxÄà^,Ë^ÿWQ·ï>:rhÿ‹šà™fÔúäÏäg}6ß>Ф'`ÏÍX±.-½ †1÷>dr/?€pz뛩¦Y½ª6m;wÉÎúÇužÔ±�ý)¨¤Ì²dåöŒ“YsŸš~M ‹¢øé‚e§3sztíà«T ‘÷óø!#:Ö=VP[O©ÿàq=:ø˜#GMì\xöH�ŽìÔ#R¿qýºjuÆ ä‰æœÌ Æ?j`·Ð`£Fïѯ³¹ºÔâ¸n<1wyêµGæôP¬ |=& ”­*.€ ì8¬wd˜Yë;¸§eQ™½‘!Ilx×äà‚i Ô–vô’9©s¼�Ê+EG¿öÂCç/äýëËÚEñ³KOžÉž?ïÁ¸˜0¥ ˆ¼�gölGúÆ×N2 n. y¤ÉIzîÂ"«+ë÷wßÙ+/#ºÜb§jsP]_1ã¦:RZA%R^è¬:µð»ò_¨èõU6 ¾P•s|ÃÎ3g‹ínJ$§]Œ ’GÊÝB”ÒÆÇrÖÎÜ~ÕhOI’(aP*Už;ôÛÆŒÕ.J$Gµ-Šõ+“WKë~#þýû­>rºpÄÀàêÌCY†>w‡28ˆÔ[EEÍŸ÷à{ŸüøÑ¿>÷Ä´߯’ó76:´é�†›�ÇNÇ% ~i|c9ýâ,•ŸIK@®`ú®Ã^ZMx�@9ªê•“ˆPJÙÀ»;ÐXÿF­ghÅñf‡�{þ�#G ·/ý0Ç#¥nubaa®hìÈÒ²#_üg7;þÞ¿<aâiÞúoþ'³‰ç‘àÞÝbÖ?\ÒHÖ™Lsâôhoò�üêó¼ÿé¢?ýõsQ”äüUºP¨}ð̾-ŸŽ êÐgF2»wÕÁó.à‚‚ Îb‹Óàc6Õþ3é¸Ú¦¯ËRh©Í`©¤ø’ÛäKˆŸ_c-´ð¦ºåÍF�–±  ›D¦$‡9�¬•õGð„*ymSBª:¸éXQ`b¿pF̽xŽÄ�aâ@²XlMšø%&Ç–J/<~ü’_¯ÎQ˜À^/6:tþ¼Ùµzþ¼Ù˜¿¨ù<»ssÑÃ'ÓK·º€‰èÛ=Îrì§5g.”V[*ÊÏg;”WÊ¢ô÷�çËí•¥7­Ë( MèÂmÌÐ^êã¶n=SZ^Y]’wqß�‹å£�I(Ï)tS�¬ço:QS›_ÄÇÏäÎ>•Sj¯©¬©åÔ×ÿøaazc]¬m�:m¥e–⢢3i‡ýû»'Œw?0(–b6ùºKÏç»(H§w­Ó•J¢¤Hq=DZµ¯Âñ>fÿ¸Ä¾óîï×3�6zÀ#cŠ¿ÿ÷§Û•1:é¾=JÜ`UÆÝ–¬8ê?ôþ0l·,‹ µ ÉÎή¬¬lË—No}c;ç•á í­u§V«õz}½˜T¾öƒ¯övìoãq·¾-Ùl6§Ó©t)�’ŒF£B{÷gãPƒhÙÙÃA{`þ"tÃá¦^Gp8޲=K÷w9$È{F9#„<#¸Úäb)kÝÿ½»­ÚÜ¡Ï�umý‰6�bpîŠô·_�F¾÷­ÒAíž$I‡Ãáp(]¤$åú‚Û-Iá1è6� ɰ#¢œN'Ã0 ÎLˆP‹‚€Ã!à]3ZDEJ©(62ÇB̓ ÕÃnA°ÿÝ"‡Ã!x‹*€Ü" ÃØl6ù'6aÐME±¾ áy]ØÜR*•Êjµúøø¸ÝnQ™:J— y5I’$I’û(¥V«U­V+](ä0‚[L­VÛl6BÏó*•J݉s¿¢ÆÔ×—Ëåv»)¥˜¿¨FðÍP©T’$¹\.‡ÃÑä<îB! Ãp‡ÇLèJÁ7‰a•J¥t)Bí~!#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�bðê8„¼˲�†çy†aÚÅç(¥’$¹Ýn‡Ã�s 6 #ø&qDz,Çqò8MjŒš„ADQléLÁz½^£Ñ´NÑZ !„eYù›ÃápØl6¥Kä½0‚o†N§“+™ü'^AM“gªdFnÚíöf>Ñd2q\ûÞI5 ÇqV«Ué‚x)ÌŽ3 ò|ƒ*•J>6TºDÈÛ1 Ãó¼Z­æyžRj0šó,½^ßÞóWÆqœ^¯Wº^ ã£et:� z½“Ý–eõz½ :�î†K¶»þ‡&h4¼ïmƒ0GZ€ã8BˆV«Uº ¨}Óh4òÜÁM/Ófåi8Q}ƒn‡Ãœ6#ϺMÁ“oèVȵ¨é± <Ï·YyÚ†J¥j~'ø�[Á-€·<@žrÃVðíWÓn¿wäø¡´ V#ä7¬Híbüo‹Ü~ïÈ#0PZ#yV$$ÃzÐØŒ<«Œ`„R�â,e¯_ôÊ¢L§ÒåhU´òü’O?ÿÃóï<ù—•ûñZM„d’5õÛ¿Üo½“n}PšxbÙw_qÖˆD—øÔü»ºÜÚ(l©,í“Oöd‹@ÃitAQFŒíß/¸ Óqž\û§ÏÏ÷yþÙ9‰õŸ­tnó†õÕ /ýÏÀPJõ:ñÔâo÷t}ôñ®8Ryˆ³8õçå Ó‚Ÿþ`jߺzGkò·ü²~õ±¢*Æ×{ð#÷öŠò‚�¹Î[>Ïëñ˜ ˆ&²s'&Ì3í�9{?^bÿ̨×_ˆ'Yw¿òh¤?òU¼Õy ÏŒ V%}a\¸œ(„Q›=ò.ÿ»›âG�Ue©{~^(ç KPybÍ­‡:Òöœ!&öàÞó3ê®rWù&$vðaÀ})íT•ÔUÉb"� ”nM=²™í6kZÔöë‹Üô³wvÛiú3íK­Ö,ÞºùDI�Ê/qÐðGîNäÀ�±rÞæÐ?O–ÿ´'Ãóäßg$ãEy^¦¤Ì²dåöŒ“YsŸš~M ‹¢øé‚e§3sztíàÛš¥�Ê3/¸Î|-öäß>«ºü°3kw zrdÿ(À÷¾i9‡¿<|ôž¸ä\ݺŽ-ûeáÑj�.}q'ð‰#ßž¼gÁ’=f=?È žÞúæ.ó}=­›wœÏ¯á;%ÝwwdÑö]Ó‹¬à×7eö¸3°çf¬X—–^PØ‚{2¹—Ÿ @È9±§,|b’‰€»âІ]›2 K 1ö1bf/3Þe€ßâ]G-}†z¦‰è)­xur×®ã'Mž<É íünåîȸ»hÙ�-ßî‡Îœ98””ž:ðË:«ÔéFëbX@Žêê“©ÿÝì:sÆœ`Rppûw‹R Ï�NÒ-9°gÿ�aOÍ à+²V-Ùñ5gxuBX¶›iñÁcg;ÏîÛ�nþ>õ°5e¸‰ðQÓ^~2è?¯ {ø½)a, žQ=%yô…'厡xõ—ËöE�å­8SuÖ’¯V~Ê?üæÄ� ¹Ä?yò}÷øëƒ”n½ ëø¾þâÃï~üÃG_,~ñé™W›Â¢$}öÕ²Sg³çÏ{°•ó˜�Á“žÏŸ¸r„…XT˜+†LŽ®ÝÁùèÈiÛ¹|)¹£’ùÓsú}³ì 7ßóšÜ!Y®ü«xéÈjCò¬Ç˜9«~J]ðŸSQRžšëyG.Þ¹)>rf–Vœüá‡tíè±ó»\¹i?.^¿Ú4sz{étNuTŸ-PË‘]‹/˜~jtœÆ]^Ph1ø0À»$š×Ÿ¹hböó¦ÊžÙŽcë_yã‹ßøâÅ7¾xådz5µ“¸””A1f“Ñœ0¤{gR–["�T™v´ÀÐwÐØx³Ñ`Šë—2,úŸ‡ä¨HÛ~<×·C�PhÕ‘=YÆä”á±F½ÎÐ1¥wÈ>T2ÏÔiÂðèP“> ¦ûôáaÖcg³Z65ë­‘Šß[Ù·s(œÜ×ÿÜÞŒ|éÆOrgÚRÚiÆ´®Q&­)¼ËÔá!yO^”hµØeÆÔɽ"ã¢ü|¼©Ò zÑ‘Á¯½ðÐù yÿúr± ˆ Šâg –ž<“=Þƒq1aJŒÚjl¼Î§¾ÂêLj{eµ—Ÿ÷ HÓ5Î_ïž8´«�S7qXTˆÉ'$±GßWA¡�‚”8ã|xï©}ƒÌ:mPBŸkŽ+iÍ¥|›x€ŽH’D�QiÕ:cD§øn!ò÷ Ôçµe&4ƒ‡ú‚ÏS׬ö©m±]H�º6:^ÅK‚@+KÊIhŠ_mƒ�hBƒôÄÒÀ:A*Y÷ù׉$º©)¾ßc�ôŠáDK~‰�—¿üÿí’¢n‡nsRà€ ð ¬;4„˜�%¥v£GÞ"¥´‰±œÂùc»KÃÆõ6…�Þ]£ÖÝ�“<3†¨›Ô½nv÷úuPK~I¥­àË×3k¿ E—›óµŠ4‚¨#ºÄr8zÔËEEÍŸ÷à{ŸüøÑ¿>÷Ä´߯’ó76:´ém×Ê[–�k¾¸½½.©LAÆÚ"«Tãkò—ÿG8¢(Q ‹¬®¬ßß}g¯¼˜èr‹�j\´º¼|} €øöJžpnó׿Ä&u6¨Kç¾v5fƒI¸Xn£`ö¢�§ú‚ !Á~Wõið @®¬Lc]ÁŒß°ÙcSü„ó[Ö­th�LíÓ)ÛiÌ´Y�ë_�pZ�Ú\ òº¯øµm¸Nì;Qâ²ýøÆ;?Bm*öæL‰‰½QOe“ž�›YWV¨|8Âsí`ˆŽ ~õùÞÿtÑŸþú¹(Jrþ*[$â£÷qW¹êvqÑ^éÔšô^Õ z†a¯Üc˜ÈˆR ú®Ã^ZßõNx�†¹ÜÀ«¸Ú¨Õ�xè�¾yY{÷¦-úwzÇ{î™ÓËHÏ«@p¹Ûà�´@›Ï”FŒ¾ô`a…Ô=�ê.-·7òÕ\{:ÎüÀŸÿ¾ìHÔ“} „1‡À™›n`øÕÑF@,-/– †Z•WlјÚêäµ�KM“î�3³vЭJÛðáöcéSbû^{�B¥Ú÷LLÁZKI 1ôô½ªºyÙѺ�ØèÐùóföÕò矜¥pþ£Ê8—+ NàÀ}ñÒšªxB@oº5Μg-NC§°+ߊÈñ¸]@}23†ðŽcfÄõ úíƒ}çKzö b€º7p¼—Íé™M"9ª‹K*ŠJ*ŠJ*ŠËì®&>`Æ””l9¸gó9k•­êbÚÞíY7è1%ÆNSFfoÚ}ÐJ�{'ÇŠ‡SÝ—Wh±•—fì?u®~<ËÙu;/UÚ˲3–¦úöLˆã€ZN}ý�¦Û)ÐòÃÞúpËQ­ü}á÷o-=ï¡Î1j9z,]ÝelJxDX`DX`DXPâ°~½àÜ®c¶k_�1šÝ™ÇÎUÛ­6�Oè=28oùw;äT”WT\<�±éhi3ú�‘׉‰ ýÇ›ÏxCþ¨ãFôçöþ¶í`®¥$÷ôâåéîI½}”.pf³ºòBV–ÕQesµü¾žLDßîq–c?­9s¡´ÚRQ~>ãØ¡<½¯,–jùŠ5ëÌ¡ó¥e6—£ªüB��3êõò‘qe•…Õ›õ^Ô žj»N§¾ºöwùÒŒÎ�.KŒšcÛ¹bñ¯›ÜêÐν&Þ¾0»éÕ¿>ƒÇ[ºjmfÂýñ¦î߬ڽå£u5"¯ �ë:¥n”¡*±g¿š£ >)´€>¦çˆ'F…ò¨$Jµ¡F©$Õ~SI’<uRÅÞ½“ïJ¼¢eNô�FöÓ~¸÷dÙ€îW-ÌŽ˜Úÿ䢕ó÷±ñSæüydè=ÏÎä—§þúÙþ2ц÷§Ø9t‹XVñff=>qòŒÙK×ýôÑ*$]d�¡óf%zÁI]&.eP¿K»|˜¡é<ì•™Á-~¾_·9�ÀêMG¾ù|»�ò~¡QÃ']x¨¶4¯´†úë géžõ¿ÿZáy]h‡ÎÝÝQO€–^*qvŒð²V0ÉÎή¬¬Tº·NÊ^ÿóçåýÿwv§Ö»H­Vã-°�§Øl6§³Ñ+óýýýÛ²0m£¬¬¬•ÖìÎÜñ¿¿:îyy\ïÆ†ÏSëö¯ê4ýå~Þó=i4½§0!t“ø¸nɾy¿§U6Ö³(ä�ÚW:¸·×] ìmåA¡–c†OH´í9t¢Á[#Ѫ[Ïê‡êoR¾/æ^Ö/âÝpÚäAX�¯+Šâí”ÂÍùÖ¹3a·ŒJ¥²Z­”R·Ûír¹AÀ.tC’$É�¿n·›RjµZUªßKÀf³Ý±åv»m6¼mmÃðt\‹©Õj›ÍFáy^¥RÉ£;ñl/jL} q¹\r«ÕͽŠÞjµêõz�¦ß4Åáp`þ6#øf¨T*I’\.—Ãáhzw„@žù–†a8Žké¸r›Íæp8ÔjµJ¥b¦]\ÐA)•w§Ó‰]vMþI Ã4çX¡['Š¢Ýn·Û¼öµoØŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠÁF!Å`#„�b0‚BH1\+®šãX–å8ŽR òOt"„È?AEQ¥KÔ° Õšu¹†Ãeº;S#Á {§¢´,ê¤>þö ‘U±>ŽÖ{-’��]YYéñõêt:B˲òO†ÁæöM’$Q%I¢”J’d·Û•.ÑUÜùâLÈêl°†‚5öÎF%�D PiRt À7 ·IDAT´í™„Bžñüw²Ñhl•zf0(¥jµZ¥Rñ<�ù‹†áy^­Vós»x8‚=ÜçÅqöü¢æ`†ãZq@N3.Õ(ÿM€ÚÂ*Ñy|­žß0‚QsxI=)¶³”a± ŒnŒ°ÅvÖãkÅFÊð’zâX¯( òv„qˆž_«‡+v£æó†ÚâE@íFkÔå;ãR¥8 5WkD0‚y5wÆÊ§_]›á¥ôÞ(þÃ-ùçqØ n>waú¾[Žg\¬¨X½o`ÂÀá�Nˆ3âéôöŒBëìX^Iëo ‡iàÏB™vƒy‡Á+.�i'0‚äÎÞôó{«*¢‡yâž°@�X‘—›E zÌ_Ô^pðÖtS/,†<€Hèè§Ò…BÁÍ"ùamqì½�ýi˜Ÿ<,%"<¼»ü7j9¼bóšcyyev0„ö½{âœAA*�2—}ù 1Ž.Û“SìV‡uððì”Dp—\»eåþìüj¢êtß³÷ ö'’õšÅ[7Ÿ(©Qù%þÈÝ �¸qZß�ÓÌè!I‹vÃúR€ôüËJì o÷�ž~`”àÐ øãv¸¨ƒ¥O@Örxåbí2#Ç·:èýTøÀ #á‰X0¹aw¼ò;ä´Â8ï„}ÁJ¡%é'³t]&òkhX Æ?õ±9¼7÷õ Æ‹·ì±Ö>«pÇÆmlŸ?¾þÜ/�ŠÎO]°!Wê<¾ìç/�rCzø_›ýäĤN¾„â5_.Ûç“üÊ[/|8o°9må§ ­$ÅûÛìŸhƒ�¦ëþd©‚_wˆÿBŸe t�¿t©–\„ ñ –—áឰ픲0o LµÃŒ¯!i1u‚…€Sú­µå?�Ãn©¤È!!‘ 6K‰¦Cßž=¢ÌF½OÌ€®ñ¤<¯Tªý“¹ÛŒ»¢ý QÝ'°æY)PûÙÍûœý¦ß=¶KHXXX�Þ1Á ¸3m)í4cZ×(“ÖÞeêð�¼ƒ'/J ½B7Ç [–®pôQx»tT]þKÁEX’—jàR¬(‚Ž~Àl8úŽ0€ÐF–f�*ž0ÃßwÂñj(*�÷ŽBBgè†)r <|¬K)õ†ÁžžV?é|CïÍUvpCê¦ôü’‰€På䆉µË1A�¡µ³ePµZ‚à¦T,-)”îŠà®Xµä—TÚ ¾|=³¶2‹.7çkiDýëÞ~*x͸`åKÑFJ/Âô¯ O'x8 v‚kà­l =»ÃŸ{B½r/¥P~¶Œ„)á°#†Ä9[��øï ö�µp§ ¯ÆqÁJaü�ôdI¾¦k?0áÔŠ_¾<÷ôSOô V3™Ï_ÙTÿ7Â2ìõçë(Ðf% L`Ò³s“#ëþ@•nœÖwgDÇD8t�†ï‡Àúq°qœîËGÂ÷+á‰l°Qxì>xL>èvÂÒ,ø04ypO¬] Õþ¢ýNÔ}p”B¹x§|Œ­ñ6q/oÔ¥cØêC%' ¼z–{©âìùªÈýû«ZUiÁØäº¿@’vá’|ë‰)8@k))!†ž¾W…3nuôNiÁ]#ý"Töƒ0Hòà³,¨Âô”Ø~˜ñpWŒàÑ‹@)–A¥¢)lôü�vÚƒV¨*Ø‹Ó,lx¿YCt?ÿøÉšôŒ Å—.åŸJÏø=³Š½¿™-Í)°H@%»W:£�Dôñ#ûp–oØžYZZZš™~ö|5ð ½Gç-ÿnÇ�œŠòŠŠ‹§36-Å®`äA\ ¼ÒÆGA7è  šK°ß •@}¡·€@¿¾ð ßå§Ø.ÂZ ^Õga¿àÈ�¯Ëà/wÃÔ7@÷x6þ!}'E"†SÆœ^¸õõW7«´¾=Ç�žjÙTq£Uõš9kÎÊÍk¾þf¡�Â{<ül'àBïyv&¿<õ×Ïö—9ˆ>0¼Ï¸°¶ygw¸;§/X!6ž �*°Ûà`&LÝ 9�4x3 üÀ 'OÁ+áeZÛ 7,É„ÇzÃGÀ)J¼·#ào÷A¤,°zOÝÂw‚VxŸ¾}§Z­Æ[¡f²ÙlNç-]PYe3n©¾õ_ *Ÿ[Yºƒ¸ªL»àÁõµÖí;B5vD ;Ú�Ó�<Àû¥yÃÝÀP{á µã)Ëó­`I’¼ä†È›I’WŒøP³à�$ XcÑ�PIÓ ƒ?<_ó¼d×B^ÎKêI�V gã@Í ‰AZÏW·‚�N'Ã0,‹#Ñ ‚p‹Ã!<¢¯UNµÇÇ£Å~U_«‡#XEJ©(Š˜Â¨ õõDñ>«i±•˲ý©$ƒ55N Ði±ž¿(Ðó;€ ‡Ãã«E·‡Ã!^qõu‚¯{JŒÜ5Jy7¡fj¬5ÞìöøŠ=Ü fÆf³�F›Í¦Ñh°-Œ®!Š¢Ãá`¦²²R¥RÝø ­Œa˜—ºågWÇ)®N‹mat-IwMŸ`áÅ®ù Ã{|õ¾:Næt:}||8Žc®àÙ—@í‹$I’$Éý‚ TWW«Õj¥ uYU�ë_'—_0QÂa€aqŒÄ�ŽJ ‰uýÖ—ºæùh=ßb0�­Áàr¹!<Ï«T*yø§7L‹Q_\.—Ûí¦”zCû÷.—ëŒEµ"Ǽ¿ÄPRÃÕxE7 RŒ–ƒ@­0 °jJ´%Áìj¥ÛŠ ’$ ‚ IÒm;å8j6B!„aùØHéâ4 k,ª×65Öh4¶âÊ Ãxac¡Æ`�EmÏKÛ#!t'ÀF!Å`#„�b0‚BH1Á!¤Œ`„R F0B)#!„ƒŒBŠáÀh4*] „ºýØÅá…*IEND®B`‚p_calendar.md000066400000000000000000000233271523260663500335330ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/en_US# Calendar|dde-calendar| ## Overview Calendar is a small tool for viewing dates and managing schedules. It supports viewing lunar calendars, Chinese almanacs, solar terms, and common festival information, with built-in schedule reminders to help you better plan your time. ![0|main](fig/main.png) ## Getting Started Run or close Calendar, or create shortcuts using the following methods. ### Running Calendar 1. Click the Launcher icon ![deepin_launcher](../common/deepin_launcher.svg) on the taskbar to enter the Launcher interface. 2. Scroll the mouse wheel or search to locate the Calendar icon ![draw](../common/dde_calendar.svg), then click to run. 3. Right-click ![draw](../common/dde_calendar.svg) to: - Click **Send to Desktop** to create a desktop shortcut. - Click **Pin to Taskbar** to pin the application to the taskbar. - Click **Start on Boot** to add the application to startup items, automatically running when the computer starts. ### Closing Calendar - Click ![close_icon](../common/close_icon.svg) in the Calendar interface to exit. - Right-click ![draw](../common/dde_calendar.svg) on the taskbar and select **Close All** to exit Calendar. - Click ![icon_menu](../common/icon_menu.svg) in the Calendar interface and select **Exit** to exit Calendar. ### Viewing Shortcuts In the Calendar interface, use the shortcut **Ctrl + Shift + ?** to open the shortcut preview. Mastering shortcuts will greatly improve your efficiency. ![0|view](fig/hotkey.png) ## Operations Guide Calendar displays date attributes in Year, Month, Week, and Day views. The system defaults to Month view. Switch between views by clicking the corresponding buttons. - Only in Chinese systems: Calendar displays lunar dates, Chinese almanacs, and festival information. - Dates start from **1900**; dates earlier than **1900** cannot be viewed. - In Month and Week views, Saturdays and Sundays are visually distinguished from weekdays. The sidebar shows calendar accounts and a mini-calendar view. 1. Click ![side_menu](../common/side_menu.svg) to toggle the sidebar visibility. 2. Check calendar types under Calendar Accounts to display their schedules; uncheck to hide. 3. Click dates in the mini-calendar to navigate the main calendar view.
View Description
Year Displays all months and days of the year.
Month Shows festival information and schedules.
Week Displays daily schedules for the week.
Day Shows festival info, detailed schedules, and Chinese almanac.
### Creating Schedules 1. Create a schedule using one of these methods: - Click the add button plus in the menu bar. - Double-click a blank date area or right-click and select **New Schedule** in Month/Week/Day view. - Click and drag to create a schedule in Month/Week/Day view. 2. The "New Schedule" window appears. Configure calendar account, schedule type, content, time, reminders, etc. pic
Parameter Description
Calendar Account Defaults to local account; supports UOS ID and other network accounts.
Type Default types: "Work", "Life", "Other". Custom types can be added:
  1. Select New Schedule Type from the dropdown.
  2. Enter type name and set color.
You can also add/edit/delete types via the main menu (see "Manage" section).
Content Schedule description.
Schedule Time Set all-day or timed schedules; Gregorian or lunar calendar dates/times.
  • All-day
    • Checked: Only dates can be set for start/end times.
    • Unchecked: Dates, hours, and minutes can be set.
  • Calendar Type
    • Gregorian: Displays Gregorian dates only.
    • Lunar: Displays both Gregorian and lunar dates.
Reminder All-day: Options include Never, Day of event (9 AM), 1 day before, 2 days before, or 1 week before.
Timed: Options include Never, At start time, 15 min before, 30 min before, 1 hour before, 1 day before, 2 days before, or 1 week before.
Repeat Gregorian: Never, Daily, Weekdays, Weekly, Monthly, Yearly.
Lunar: Never, Monthly, Yearly.
End Repeat Appears only if repeat is enabled. Options: Never, After n times, or By date.
3. Click **Save** to create the schedule. Schedules appear as tags in calendar views. ### Editing Schedules 1. Double-click or right-click a schedule tag in Month/Week/Day view. 2. Select **Edit**. 3. Modify schedule properties in the "Edit Schedule" window and click **Save**. 4. If editing all-day or repeating schedules, confirm the prompt to complete changes. > ![notes](../common/notes.svg) Note: Drag schedule tags to modify start/end times. Prompt buttons during editing:
Button Description
All Schedules Modify all related recurring schedules.
This Schedule Only Modify only the current schedule.
All Future Schedules Modify schedules from the selected date onward; earlier schedules remain unchanged.
Change All Modify all recurring schedules.
### Setting All-Day/Multi-Day Schedules When creating/editing schedules, set **Start Time** and **End Time** to create all-day or multi-day schedules. ### Setting Recurring Schedules 1. When creating/editing schedules, select a repeat cycle (e.g., Monthly) from the **Repeat** dropdown. 2. Set end conditions in the **End Repeat** dropdown. pic ### Searching Schedules 1. Click ![search](../common/search.svg) in the top search box. 2. Enter keywords and press **Enter**. 3. Click ![0|close](../common/close_icon.svg) or delete text to clear keywords/cancel search. ### Viewing Schedules Double-click a schedule tag in Month/Week/Day view to open the "My Schedule" window for viewing, editing, or deleting. ### Viewing Schedule Reminder Details Click notification prompts to view schedule details when reminders appear. Reminder action buttons:
Button Description
Snooze First reminder: Snooze for 10 min; subsequent snoozes add 5 min each time.
Options: 15 min later, 1 hour later, 4 hours later, or tomorrow.
Remind Tomorrow Appears for "1 day before" or "2 days before" reminders.
Remind 1 Day Earlier Appears for "1 week before" reminders.
Close Close the prompt.
### Deleting Schedules 1. Double-click or right-click a schedule tag in Month/Week/Day view. 2. Select **Delete**. 3. Confirm deletion in the prompt. Deletion prompt buttons:
Button Description
Delete Schedule Delete non-recurring schedules.
Delete All Delete all recurring schedules.
Delete This Only Delete only the selected recurring schedule.
Delete Future Schedules Delete recurring schedules from the selected date onward; earlier schedules remain.
## Main Menu Access management settings, view privacy policy, switch themes, view help, or learn more about Calendar. ### Manage Click ![icon_menu](../common/icon_menu.svg) > **Manage** to: - Manage schedule types - Sync schedule data/calendar settings to cloud via UOS ID - Configure general settings #### Cloud Sync Sync schedule data and settings to cloud via UOS ID. > ![notes](../common/notes.svg) Note: Not available on older UOS versions. **Logging In/Out** 1. Click **Log In** in Account Settings. 2. Log in via UOS ID/password, SMS, or WeChat scan. 3. Click **Log Out** to sign out. **Sync Settings** 1. While logged in, toggle **Schedules** and **General Settings** to enable/disable sync. 2. Select sync frequency or choose **Manual Sync**. 3. Click **Sync Now** for immediate sync. > ![notes](../common/notes.svg) Note: Requires enabling **UOS Cloud Sync** in Control Center. #### Managing Schedule Types **Add Type** 1. Click ![icon](../common/add1.svg) in Calendar Management. 2. Enter name and set color. 3. Click **Save**. **Edit Type** 1. Select a custom type. 2. Click ![icon](../common/edit.svg). 3. Modify name/color. 4. Click **Save**. **Delete Type** 1. Select a custom type. 2. Click ![icon](../common/delete.svg). #### General Settings **First Day of Week** Set **Sunday** or **Monday** as the start of the week. **Time Format** Choose **24-hour** or **12-hour** format. ### Theme Window themes include Light, Dark, and System. 1. Click ![icon_menu](../common/icon_menu.svg) in Calendar. 2. Select **Theme** > Choose a theme. ### Help View help manual for Calendar usage. 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **Help**. ### About View Calendar version and info. 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **About**. ### Exit 1. Click ![icon_menu](../common/icon_menu.svg). 2. Select **Exit**.linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN/000077500000000000000000000000001523260663500311615ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN/calendar.md000066400000000000000000000305461523260663500332640ustar00rootroot00000000000000# 日历|dde-calendar| ## 概述 日历是一款查看日期�管�日程的�工具,支�查看农历�黄历�节气和常�的节日信�等,内置日程�醒功能帮您更好地规划时间。 ![0|main](fig/main.png) ## 使用入门 通过以下方��行或关闭日历,或者创建日历的快�方�。 ### �行日历 1. �击任务�上的�动器图标 ![deepin_launcher](../common/deepin_launcher.svg) ,进入�动器界�。 2. 上下滚动鼠标滚轮�览或通过�索,找到日历图标 ![draw](../common/dde_calendar.svg),�击�行。 3. �键�击 ![draw](../common/dde_calendar.svg) ,您�以: - �击 **��到桌�**,在桌�创建快�方�。 - �击 **��到任务�**,将应用程�固定到任务�。 - �击 **开机自动�动**,将应用程�添加到开机�动项,在电脑开机时自动�行该应用。 ### 关闭日历 - 在日历界��击 ![close_icon](../common/close_icon.svg) ,退出日历。 - 在任务��键�击 ![draw](../common/dde_calendar.svg) ,选择 **关闭所有**,退出日历。 - 在日历界��击 ![icon_menu](../common/icon_menu.svg) ,选择 **退出** ,退出日历。 ### 查看快�键 在日历界�,使用快�键 **Ctrl + Shift + ?** 打开快�键预览界�。熟练地使用快�键,将大大��您的�作效率。 ![0|view](fig/hotkey.png) ## �作介� 日历分为年�月�周�日视图,通过��的视图方�展示日期属性。 系统默认显示月视图,�以通过鼠标点击切�年�月�周�日视图。 - 仅在中文系统中,日历会显示日期所对应的农历日期�黄历和节日信�。 - 日期以 **1900** 年为起点,在日期切�时,�能查看早于 **1900** 年的日期。 - 在月视图�周视图中,周六�周日的日期显示会区别于周一至周五。 日历视图中的侧边�展示日历�户以��日历视图。 1. �击 ![side_menu](../common/side_menu.svg)�切�窗�中侧边�的展示和��。 2. 在日历�户中勾选相应的日历类型,则该类型下的日程在日历视图中展示;若�消勾选,则在视图中��。 3. 在侧边�下方的�日历中点选日期,��动控制�侧大日历视图的日期展示。
视图 说明
年 显示全年的月份�天数。
月 显示节日信��日程安排。
周 显示这一周�天的日程安排。
日 显示节日信��详细的日程安排和黄历。
### 新建日程 1. 通过以下方法之一新建日程。 - 在日历界�,�击���上的添加按钮 plus。 - 在月�周或日视图中,�击日期空白处或�击鼠标�键选择 **新建日程**。 - 在月�周或日视图中,�击鼠标拖拽新建日程。 2. 弹出“新建日程�窗�,选择日历�户�设置日程类型�内容�时间��醒等信�。 pic
�数 说明
日历�户 默认本地�户,�选UOS ID等网络账户。
类型 系统默认�供“工作��“生活��“其他�三�日程类型,您也�以自定义日程类型。
  1. 在类型下拉列表中,选择 新增日程类型。
  2. 类型框呈�编辑状�,输入类型�称,设置颜色。
您也�以通过主��中的管�功能新增�编辑或删除日程类型,具体�作步骤请�考“管��章节。
内容 日程的�述信�。
日程时间 设置全天或�全天�公历或农历日程的日期和时间。
  • 全天
    • 勾选全天:开始时间和结æ�Ÿæ—¶é—´å�ªèƒ½è®¾ç½®æ—¥æœŸã€‚
    • å�–消勾选全天:开始时间和结æ�Ÿæ—¶é—´æ—¢èƒ½è®¾ç½®æ—¥æœŸã€�也能设置å°�时和分钟。
  • æ—¶é—´
    • 公历:开始时间和结æ�Ÿæ—¶é—´ä»…显示公历日期。
    • 农历:开始时间和结æ�Ÿæ—¶é—´æ˜¾ç¤ºå…¬åŽ†å’Œå†œåŽ†æ—¥æœŸã€‚
�醒 勾选全天,则�醒设置的选项包�:从��日程�生当天(上�9点)�1天�� 2天�或1周�。
�消勾选全天,则�醒设置的选项包�:从��日程开始时�15分钟��30分钟��1�时��1天�� 2天�或1周�。
�� 选择公历日程,则��设置的选项包�:从���天�工作日��周��月或�年。
选择农历日程,则��设置的选项包�:从���月或�年。
结��� �有设置了��功能,结��� �会出现。结���的选项包�:从��于n次�或于日期。
3. �击 **�存**,创建日程。日程创建完��,会以标签形�呈现在日历视图中。 ### 编辑日程 1. 在月�周或日视图中,�击或�键�击日程标签。 2. 选择 **编辑**。 3. 弹出“编辑日程�窗�,设置编辑日程的相关属性,�击 **�存**。 4. 如果设置了全天或��,则弹出�示框,确认�示信��,完�日程编辑。 > ![notes](../common/notes.svg) 说明:已创建的日程�以通过拖拽日程标签�修改日程的开始时间和结�时间。 编辑日程时,系统会根�所更改内容的��显示��的�示信�。�示信�中按钮说明如下表。
按钮 说明
全部日程 修改所有与此相关的��日程。
仅此日程 �修改当�日程。
所有将�日程 修改选中日期�以�日期的日程,选中的日期之�的日程�然�留。
全部更改 修改所有��日程。
### 设置全天或多天日程 在创建或编辑日程时,设置 **开始时间**�**结�时间**,�以设置全天或多天�续的日程。 ### 设置��日程 1. 在创建或编辑日程时,在 **��** 的下拉列表中选择���醒日程的周期,例如,�月。 2. 在 **结���** 的下拉列表中设置结���的次数或�止日期。 pic ### �索日程 1. 在日历界�顶部�索框中,�击 ![search](../common/search.svg),输入关键字。 2. 按下键盘上的 **Enter** 键进行�索。 3. 在�索框中�击 ![0|close](../common/close_icon.svg) 或删除输入的信�,清除当�输入的关键字或�消�索。 ### 查看日程 在月�周或日视图中,�击日程标签,弹出“我的日程�窗�,此时既�以查看日程,也�以 [编辑日程](#编辑日程) 或 [删除日程](#删除日程)。 ### 查看日程�醒详情 当系统�出通知�,�击通知�示框,查看日程详情。 日程�醒时,�示信�按钮说明如下表。
按钮 说明
���醒 �醒设置为当天,首次�醒�,�击 ���醒,10分钟��次�醒,此��次�击“���醒�增加5分钟的时间间隔。
您也�以在"���醒"下拉列表中,选择15分钟��1�时��4�时�或明天。
明天�醒 当�醒设置为1天�或2天�时,出现该按钮。
��1天�醒 当�醒设置为1周�时,出现该按钮。
关闭 关闭�示信�。
### 删除日程 1. 在月�周或日视图中,�击或�键�击日程标签。 2. 选择 **删除**。 3. 弹出“您正在删除日程��示框,�击 **删除**,删除该日程。 删除日程时,��与���日程�示信�中的按钮说明如下表。
按钮 说明
删除日程 删除���日程。
全部删除 删除所有��日程。
仅删除此日程 针对��日程,仅删除当�所选的日程。
删除所有将�日程 针对��日程,删除当�选中日期�以�日期的日程,选中的日期之�的日程�然�留。
## 主�� 在主��中,您�以打开管�设置�查看��政策�切�窗�主题�查看帮助手册�了解日历的更多信�。 ### 管� �击 ![icon_menu](../common/icon_menu.svg) > **管�**,进入日历管�界�,您�以管�日历�户的日程类型�登录UOS ID将日程数�和日历�置�步至云端,�时也�以对通用�置进行设置。 #### 日历云�步 日历支�通过UOS ID将日程数��设置�步至云端。 > ![notes](../common/notes.svg) 说明:该功能暂�对�版本UOS系统开放。 **登录和登出UOS ID** 1. 在�户设置界�,点击 **登录** 按钮。 2. 弹出UOS ID登录弹窗,在弹窗中通过账�密��手机验��或微信扫�等方�完�UOS ID登录。 3. 登录�显示账户��头�和相关�步设置,点击 **退出登录** 按钮�将UOS ID账�登出。 **日历�步设置** 1. UOS ID登录状�下,点击 **日程** � **通用设置** �的�选框,设置是��步至云端。 2. 点击 **�步频率** �的下拉框,�选择系统自动�步的频率,您也�以选中 **手动�步** ,关闭自动�步模�。 3. 点击 **立��步** 按钮,立�和云端数�进行�步。 > ![notes](../common/notes.svg) 说明:需在控制中心开� **UOS Cloud�步**,�能使用云�步功能。 #### 管�日程类型 **新增日程类型** 1. 在日历管�界�,�击添加按钮 ![icon](../common/add1.svg)。 2. 弹出“新增日程类型�窗�,输入类型�称,设置颜色。 3. �击 **�存**。 **编辑日程类型** 1. 在日历管�界�,选择�一个自定义类型。 2. �击编辑按钮 ![icon](../common/edit.svg)。 3. 弹出“编辑日程类型�窗�,输入类型�称,设置颜色。 4. �击 **�存**。 **删除日程类型** 1. 在�户设置界�,选择�一个自定义类型。 2. �击删除按钮 ![icon](../common/delete.svg),删除该日程类型。 #### 通用设置 **一周首日** 点击 **�星期开始于** �的下拉框,�选中 **周日** 或 **周一** 设置为�周的第一天。 **时间格�** 点击 **时间** �的下拉框,选中 **24�时制** 或 **12�时制** ,则日历中的时间格�将按选中项进行展示。 ### 主题 窗�主题包�浅色主题�深色主题和系统主题。 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **主题**,选择一个主题颜色。 ### 帮助 查看帮助手册,进一步了解和使用日历。 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **帮助**。 3. 查看日历的帮助手册。 ### 关于 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **关于**。 3. 查看日历的版本和介�。 ### 退出 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **退出**。 d_calendar.md000066400000000000000000000306041523260663500335030ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN# 日历|dde-calendar| ## 概述 日历是一款查看日期�管�日程的�工具,支�查看农历�黄历�节气和常�的节日信�等,内置日程�醒功能帮您更好地规划时间。 ![0|main](fig/main.png) ## 使用入门 通过以下方��行或关闭日历,或者创建日历的快�方�。 ### �行日历 1. �击任务�上的�动器图标 ![deepin_launcher](../common/deepin_launcher.svg) ,进入�动器界�。 2. 上下滚动鼠标滚轮�览或通过�索,找到日历图标 ![draw](../common/dde_calendar.svg),�击�行。 3. �键�击 ![draw](../common/dde_calendar.svg) ,您�以: - �击 **��到桌�**,在桌�创建快�方�。 - �击 **��到任务�**,将应用程�固定到任务�。 - �击 **开机自动�动**,将应用程�添加到开机�动项,在电脑开机时自动�行该应用。 ### 关闭日历 - 在日历界��击 ![close_icon](../common/close_icon.svg) ,退出日历。 - 在任务��键�击 ![draw](../common/dde_calendar.svg) ,选择 **关闭所有**,退出日历。 - 在日历界��击 ![icon_menu](../common/icon_menu.svg) ,选择 **退出** ,退出日历。 ### 查看快�键 在日历界�,使用快�键 **Ctrl + Shift + ?** 打开快�键预览界�。熟练地使用快�键,将大大��您的�作效率。 ![0|view](fig/hotkey.png) ## �作介� 日历分为年�月�周�日视图,通过��的视图方�展示日期属性。 系统默认显示月视图,�以通过鼠标点击切�年�月�周�日视图。 - 仅在中文系统中,日历会显示日期所对应的农历日期�黄历和节日信�。 - 日期以 **1900** 年为起点,在日期切�时,�能查看早于 **1900** 年的日期。 - 在月视图�周视图中,周六�周日的日期显示会区别于周一至周五。 日历视图中的侧边�展示日历�户以��日历视图。 1. �击 ![side_menu](../common/side_menu.svg)�切�窗�中侧边�的展示和��。 2. 在日历�户中勾选相应的日历类型,则该类型下的日程在日历视图中展示;若�消勾选,则在视图中��。 3. 在侧边�下方的�日历中点选日期,��动控制�侧大日历视图的日期展示。
视图 说明
年 显示全年的月份�天数。
月 显示节日信��日程安排。
周 显示这一周�天的日程安排。
日 显示节日信��详细的日程安排和黄历。
### 新建日程 1. 通过以下方法之一新建日程。 - 在日历界�,�击���上的添加按钮 plus。 - 在月�周或日视图中,�击日期空白处或�击鼠标�键选择 **新建日程**。 - 在月�周或日视图中,�击鼠标拖拽新建日程。 2. 弹出“新建日程�窗�,选择日历�户�设置日程类型�内容�时间��醒等信�。 pic
�数 说明
日历�户 默认本地�户,�选deepin ID等网络账户。
类型 系统默认�供“工作��“生活��“其他�三�日程类型,您也�以自定义日程类型。
  1. 在类型下拉列表中,选择 新增日程类型。
  2. 类型框呈�编辑状�,输入类型�称,设置颜色。
您也�以通过主��中的管�功能新增�编辑或删除日程类型,具体�作步骤请�考“管��章节。
内容 日程的�述信�。
日程时间 设置全天或�全天�公历或农历日程的日期和时间。
  • 全天
    • 勾选全天:开始时间和结æ�Ÿæ—¶é—´å�ªèƒ½è®¾ç½®æ—¥æœŸã€‚
    • å�–消勾选全天:开始时间和结æ�Ÿæ—¶é—´æ—¢èƒ½è®¾ç½®æ—¥æœŸã€�也能设置å°�时和分钟。
  • æ—¶é—´
    • 公历:开始时间和结æ�Ÿæ—¶é—´ä»…显示公历日期。
    • 农历:开始时间和结æ�Ÿæ—¶é—´æ˜¾ç¤ºå…¬åŽ†å’Œå†œåŽ†æ—¥æœŸã€‚
�醒 勾选全天,则�醒设置的选项包�:从��日程�生当天(上�9点)�1天�� 2天�或1周�。
�消勾选全天,则�醒设置的选项包�:从��日程开始时�15分钟��30分钟��1�时��1天�� 2天�或1周�。
�� 选择公历日程,则��设置的选项包�:从���天�工作日��周��月或�年。
选择农历日程,则��设置的选项包�:从���月或�年。
结��� �有设置了��功能,结��� �会出现。结���的选项包�:从��于n次�或于日期。
3. �击 **�存**,创建日程。日程创建完��,会以标签形�呈现在日历视图中。 ### 编辑日程 1. 在月�周或日视图中,�击或�键�击日程标签。 2. 选择 **编辑**。 3. 弹出“编辑日程�窗�,设置编辑日程的相关属性,�击 **�存**。 4. 如果设置了全天或��,则弹出�示框,确认�示信��,完�日程编辑。 > ![notes](../common/notes.svg) 说明:已创建的日程�以通过拖拽日程标签�修改日程的开始时间和结�时间。 编辑日程时,系统会根�所更改内容的��显示��的�示信�。�示信�中按钮说明如下表。
按钮 说明
全部日程 修改所有与此相关的��日程。
仅此日程 �修改当�日程。
所有将�日程 修改选中日期�以�日期的日程,选中的日期之�的日程�然�留。
全部更改 修改所有��日程。
### 设置全天或多天日程 在创建或编辑日程时,设置 **开始时间**�**结�时间**,�以设置全天或多天�续的日程。 ### 设置��日程 1. 在创建或编辑日程时,在 **��** 的下拉列表中选择���醒日程的周期,例如,�月。 2. 在 **结���** 的下拉列表中设置结���的次数或�止日期。 pic ### �索日程 1. 在日历界�顶部�索框中,�击 ![search](../common/search.svg),输入关键字。 2. 按下键盘上的 **Enter** 键进行�索。 3. 在�索框中�击 ![0|close](../common/close_icon.svg) 或删除输入的信�,清除当�输入的关键字或�消�索。 ### 查看日程 在月�周或日视图中,�击日程标签,弹出“我的日程�窗�,此时既�以查看日程,也�以 [编辑日程](#编辑日程) 或 [删除日程](#删除日程)。 ### 查看日程�醒详情 当系统�出通知�,�击通知�示框,查看日程详情。 日程�醒时,�示信�按钮说明如下表。
按钮 说明
���醒 �醒设置为当天,首次�醒�,�击 ���醒,10分钟��次�醒,此��次�击“���醒�增加5分钟的时间间隔。
您也�以在"���醒"下拉列表中,选择15分钟��1�时��4�时�或明天。
明天�醒 当�醒设置为1天�或2天�时,出现该按钮。
��1天�醒 当�醒设置为1周�时,出现该按钮。
关闭 关闭�示信�。
### 删除日程 1. 在月�周或日视图中,�击或�键�击日程标签。 2. 选择 **删除**。 3. 弹出“您正在删除日程��示框,�击 **删除**,删除该日程。 删除日程时,��与���日程�示信�中的按钮说明如下表。
按钮 说明
删除日程 删除���日程。
全部删除 删除所有��日程。
仅删除此日程 针对��日程,仅删除当�所选的日程。
删除所有将�日程 针对��日程,删除当�选中日期�以�日期的日程,选中的日期之�的日程�然�留。
## 主è�œå�• 在主è�œå�•中,您å�¯ä»¥æ‰“开管ç�†è®¾ç½®ã€�查看éš�ç§�政策ã€�切æ�¢çª—å�£ä¸»é¢˜ã€�查看帮助手册ã€�了解日历的更多信æ�¯ã€‚ ### 管ç�† å�•击 ![icon_menu](../common/icon_menu.svg) > **管ç�†**,进入日历管ç�†ç•Œé�¢ï¼Œæ‚¨å�¯ä»¥ç®¡ç�†æ—¥åކå¸�户的日程类型ã€�登录deepin ID将日程数æ�®å’Œæ—¥åކé…�ç½®å�Œæ­¥è‡³äº‘端,å�Œæ—¶ä¹Ÿå�¯ä»¥å¯¹é€šç”¨é…�置进行设置。 #### 日历云å�Œæ­¥ 日历支æŒ�通过deepin ID将日程数æ�®å�Šè®¾ç½®å�Œæ­¥è‡³äº‘端。 > ![notes](../common/notes.svg) 说明:该功能暂ä¸�对è€�版本deepin系统开放。 **登录和登出deepin ID** 1. 在å¸�户设置界é�¢ï¼Œç‚¹å‡» **登录** 按钮。 2. 弹出deepin ID登录弹窗,在弹窗中通过账å�·å¯†ç �ã€�手机验è¯�ç �或微信扫ç �等方å¼�完æˆ�deepin ID登录。 3. 登录å�Žæ˜¾ç¤ºè´¦æˆ·å��ã€�头åƒ�和相关å�Œæ­¥è®¾ç½®ï¼Œç‚¹å‡» **退出登录** 按钮å�¯å°†deepin IDè´¦å�·ç™»å‡ºã€‚ **日历å�Œæ­¥è®¾ç½®** 1. deepin ID登录状æ€�下,点击 **日程** ã€� **通用设置** å�Žçš„å¤�选框,设置是å�¦å�Œæ­¥è‡³äº‘端。 2. 点击 **å�Œæ­¥é¢‘率** å�Žçš„下拉框,å�¯é€‰æ‹©ç³»ç»Ÿè‡ªåЍå�Œæ­¥çš„频率,您也å�¯ä»¥é€‰ä¸­ **手动å�Œæ­¥** ,关闭自动å�Œæ­¥æ¨¡å¼�。 3. 点击 **ç«‹å�³å�Œæ­¥** 按钮,立å�³å’Œäº‘端数æ�®è¿›è¡Œå�Œæ­¥ã€‚ > ![notes](../common/notes.svg) 说明:需在控制中心开å�¯ **deepin Cloudå�Œæ­¥**,æ‰�能使用云å�Œæ­¥åŠŸèƒ½ã€‚ #### 管ç�†æ—¥ç¨‹ç±»åž‹ **新增日程类型** 1. 在日历管ç�†ç•Œé�¢ï¼Œå�•击添加按钮 ![icon](../common/add1.svg)。 2. 弹出“新增日程类型â€�窗å�£ï¼Œè¾“入类型å��称,设置颜色。 3. å�•击 **ä¿�å­˜**。 **编辑日程类型** 1. 在日历管ç�†ç•Œé�¢ï¼Œé€‰æ‹©æŸ�一个自定义类型。 2. å�•击编辑按钮 ![icon](../common/edit.svg)。 3. 弹出“编辑日程类型â€�窗å�£ï¼Œè¾“入类型å��称,设置颜色。 4. å�•击 **ä¿�å­˜**。 **删除日程类型** 1. 在å¸�户设置界é�¢ï¼Œé€‰æ‹©æŸ�一个自定义类型。 2. å�•击删除按钮 ![icon](../common/delete.svg),删除该日程类型。 #### 通用设置 **一周首日** 点击 **æ¯�星期开始于** å�Žçš„下拉框,å�¯é€‰ä¸­ **周日** 或 **周一** 设置为æ¯�周的第一天。 **æ—¶é—´æ ¼å¼�** 点击 **æ—¶é—´** å�Žçš„下拉框,选中 **24å°�时制** 或 **12å°�时制** ,则日历中的时间格å¼�将按选中项进行展示。 ### 主题 窗å�£ä¸»é¢˜åŒ…å�«æµ…色主题ã€�深色主题和系统主题。 1. 在日历界é�¢ï¼Œå�•击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **主题**,选择一个主题颜色。 ### 帮助 查看帮助手册,进一步了解和使用日历。 1. 在日历界é�¢ï¼Œå�•击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **帮助**。 3. 查看日历的帮助手册。 ### 关于 1. 在日历界é�¢ï¼Œå�•击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **关于**。 3. 查看日历的版本和介ç»�。 ### 退出 1. 在日历界é�¢ï¼Œå�•击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **退出**。 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN/fig/000077500000000000000000000000001523260663500317265ustar00rootroot00000000000000create.png000066400000000000000000002042401523260663500336220ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN/fig‰PNG  IHDR¾[+ § pHYsÄÄ•+ IDATxœìÝy|TÕý?þsî2ûL’I {HXÂ&›l²ÈŽ(‹Š`E­Ú~´u©µ¶öÛO?íçÛ~Ú~»ü>Z—Ö­. ¨E!b$l‚ìK„„ìÛLf»Ûùýqa²‘@f2 ¯ç£�>ÂÍ�{ÏŒ“9¯yŸsÏ¥EEEŒ1¢ù?5MSE–eMÓšü"†Rj·Û»º�Àåruu ;1™Lƒ¡«[q½$Ir¹\<Ïó<ßÕm¹DUUUU‡þòRJ9ŽEQžç)¥¡;‡þ“ž9s†\B–$I’$MÓxž·Ûí6»�£”rÜÇè!¢ð³ ßÖ®Mþ§ ›Îx®z™@U¯×«ª*ÏóƒÁh4~{’�è ƒB“ô (ŠßïgŒÙíö¸¸8Žã:¡iQ ý4Ü (¥zEÄ`42M �'˜L&Q)¥Á�@)m!:0Æü~¿,Ë‹ÅétŠ¢Ø5Ï"ŽrœÉl6��Çãñ ³Ù|EÕ�\cz±"11ÑjµvM« KQ޳Ùíf³¹¶¶VUU‹ÅÂqœ^~àXMÓ<!$55¹àÇ ‚3>^Ó´ÆÆFUUõ´ÀKš¦y½^BHzzzè̸añ<ït:c�GO¹Ì"}Âooº ÝRd{rÎårEô„Ð�q¸2Ú�ÃIh?Ìu€@tèæ";~€èÐ�E|Þ�€èЉ.\¸�››[XX¸xñâáÇ_uÿÚÚÚŠŠŠìììÝøž1öÁ=zÔáp<öØcñññ×Ñäkçõz Nœ4p Õjí’@—@tèLªª}ýõ×.—+''gðàÁ¢(¶´�ZZZzôèуj[°`þÝwß-Š"cìܹs¡—L»\.ŸÏwë­·šÍæÐƒTUU9�NY–¯Ú*—ËU__ß¡?vžç›·Ÿ1VZZZPPpäÈ‘üüü@ 0a„‡zhýúõùùùmÐ`0Üÿýýû÷o :!:\/ŸÏWQQ¡iŒ¢ªjRR’Ëå>yòäÞ½{“““ ¡”Ò˜˜˜ŠŠò#GŽœ={¶¨¨Èëõrå8nçÎ�ƒ¾é¦›4MûôÓO÷îÝz|Žã:´`Á‚O?ýT’$}ãÅ‹ !.—ëÕW_5 Á�³³³ï½÷Þ&5ŒmÛ¶­Y³¦CKÇÚl¶ŸýìgÁžþôéÓ{÷î=þü¹sç¼^ohã�?~ìøñ²²²¢¢¢6h2™|~ûÐn7Ðu‚¹¹_–––>ðÀ²«^É[½jURRÒô3:½XÔàz�>}úÅ_ ¤Ð���ž×^{�Bå8nÞ¼¹UUU_½‡Bã8Þd2öíÛwÈ�!Ç�ÈÊÊl{À";;[Ó´S§NùýýúvEQštØV«UÓ´ ´‡¬(_~ù¥Ïç ná8näÈ‘³fÏ2x0Çq»vî$„Øl¶‰'6)�äççŸ9s¦sÛpÙ ”!ååå›6mª¯¯òɧÚHŒ±×^}u÷îÝwÜqG8š!àavEaÏf³.\¸pðà!ii©ÍdãyþñÇä‘G!>Ÿïoû[QQQBB„ ŒFã£�>ª( !„1¦Ï¨°ÙlóçÏw8²,oܸ±¢¢¢�vp7hР>}ú´±�¢({öìi¾ÈlfŸ>S§N¥”&%%•——oÞ¼™2zôè‘#Fè�Òws8wß}wllì·Ož±Õ«W#:@xÜX¹�rß}KkjjvïÞMi-=sÄ X¶,ÍÀ€Àõ:tèË/¿¼nݺ­[·fff>ùäSƒHY½zõ¶mÛžxâ‰ÌÌÌ·ß~›f2™Æ�ׯÄF³Ù¬k/(((..&„L˜0Áív———Ûív}MÓ‚±Ãn·ÇÅÅùý~}KCCÑ#GúõëÚ�;vΜ9m<·Û}úôéæÑÁb±<ôÐCúÏÛ·ooß �ŒRúä“OBZK¡¹áɧڪL\ X\/žçív{JJŠ,+.\¨©©ÉÎàv»/\¸ iZ\\\FF†Ñh$„´ÿK’ÏçËÉÉQ%))iâĉÿú׿>ò{ý8´±±ñ­·Þ }`aaáK/½ôÔSO�?¾3žD—6ÒCdrAÕ ³dg´Ûm.—ûäÉÙÙJJJJKKyž7nœÅb¹òíêÏûöí;}ú4¥tΜ9IIIN§3%%%t‡ºº:ŸÏÏóB|¼S¯7ÔÔÔ“Éßd¶Áõ;}útNNŽ>¾YYY©oÌÍÍ=~ü8¥ô– ô-.—ë“O>irö'NtncnpMÓÃSOQJ#–ª×ïÈ‘#eee~¿Ÿã8BÈÑ£GA8vìX 0 õõõ›7o¶X,�@€"IR~þq‡ÃÑä ”Ò¬¬,}H¢ººzݺušÆúõë;~üxŽã¾ÿýï‡îÌ{íµ×víÚãøùÏÿORR¢×ëýãÿxúôé¡C‡>óÌ3-^z=jjkwïÞ­ªjèÆÂÂÂÂÂBŽã²²²ô-���[¶léÜS@sMÒÃãO<ñÆë¯G&7D€ëÄÛ±cÇ®]»ƒ3Ž�;~ìØ1ýg¿ß¿~ýzBhJJrLL !Äårÿýï¯7?ŽÉd|î¹çnºé&ŸÏ·råʲ²rMÓNŸ.|≠â˜1cF�µmÛ¶àYJJJô£ýío¯ MÓô-a"Šbll¬Eá8Îh4�FJ©ÉdJIIi>C¢ÉÌ&SøZp£ M'Ož¬­­�Ln °¸~111‰‰½ƒ�ºÇãñz½”R§Ó©×!!ñññíù[cŒ­Y³æ›oö…^ú$I²Ïçs¹\ùùM.‰R¥°°/;v,¸2D‹$Ij1Œ¾ùæÑ7ßL©¬¬üýï¯�Y,[¶lúôéí?;t.Jéã�?¡ç§ÓùøODænب:\Jé<ðÀèÿÔ¯EܰaCllì/~ñ‹ÄÄÄàv}™‡ØØ˜G}Ôáˆ)--Y±bE �9bÁ‚;9ŽKKK¥”Nž|ë±cÇn¹å–ÄÄÄÆÆÆO?ý´±Ñ;|ø›ÍŸ_øäää�7lÝúe“îÙår¿üò+¡[ÌfÓOúÓAƒ5?2ÇqsæÜ6~ü-mœÝëó®X¾\_庹C‡�={6Ø}‚Åk¯½–™™™‘‘ñíA¼ÞêêjBˆÍfs:�Áí111¢h pÝBsƒžž|ªé5á;;¢@84ý£Õ4M_rQ„àˆišVXX¨ªêùóç c6›­wïÄ„„„¬¬Ìàleeec£G„””äÐ “Éd2µzefïÞ½³³´qv·Ûm0‚ëF„þª¡¡áóÏ?×W£ÒÓØ1cŽ=Z\\œ��ý»ßý.øQuèðá—^|QQ”I“&-[võÅö®o¡+4Ï DŸ5©ô€ €ëB)�6mú°aÃ|>Ÿ(Š<ÏoݺuïÞol6ëƒ>Èq\ èÝ»·Éd^¹r!Äl6·}ådFFzFFÆÉ“§6oÞ\SS£iZJJJ|¼sÁ‚ ,Ð÷ ^œépØŸ}öÇII‰á~šúÒ×gÏž5›Í£G�Þ±c!䦛nJLLÜ¿ÿìÙ³[ú�ÂÇ=@çk17è"–Pu¸^‰‰½�θ×^{­  `öìÙz‰^„šššÏ?ÿ<))é'?ù‰ªª�‡ã8‡ÃÑvt0›ÍãÆ�;uêôÁƒ !Ç 8pãÆ� ýkÕ¯qp¹Ü/½ôb“y‘v»ý‘GíÝ»W'>Ç#G�nܸ‘2bĈþýûëÑ�çù¹sçŽ?Þjµþñ�lhhÐwöz½Š¢BvîÜYPP o¤”ÞqÇ“'OîÄVÜhÚÈ ºÈ¤T:Á¹sçóóó}>¿ÓéÔïAE)íÕ«—¾6C^^Þ°aÃõ‹®z[Ë &ìܹ³¨¨HÓ4›Í6|øˆÜÜ/Ïž=×|¢¢(ÅÅ!¡S ccceYîÄg§ªêÎ;¼^ollì¼yóB�ˆ‰‰‰‰‰©®®.)) ^y¬7¸\n—ëÒDQŽãÚ^ø®jåÊW]÷)4=ÄÇÇ/½ÿþNo†€aH€ë$Ëò¦M½^_zzÚ¨Q7þù&}{ffÖ¤I“6oÞ²uëVBˆ¾ØCzzúUÿèÇm·Ýöæ›ois8‡cÊ”) V.ß9óŒÍfÕïœúp£Ñ×½¯®Ïó³fÍ>räȼyó233KJJš FX,–Ûn»Íëõêÿ,//ß·o?c,3³Ï°a»õë׿[7tOM¥¦¦ÎŸ?ÿ¾û–¶ý1¢§‡ØØØ¤¤¤p4×EïÅ÷íÛ/üܹsccc‚¿â8nÚ´é{öì)/¯X»v­¢¨‹955íªÇ”eùøñãz�¡¼¼âÏþÓ½÷Þ;iÒ¤àÀcìøñã……g øqãÛ?×aÿþýõõõmì IR‹;dee.Y²ä–[niñËb±çaB>|ðàAEQø�ï|ßOàjði¯éÓg´sOJé² S30`p½l6›Ýn:tè-·4½î1%%yÖ¬Y¢(~ùå—�7999%%¹í£1ƶmÛ¦�SšÍ&I’/^,{å•WãâbÇ�7dÈ�””Ô„„øQ£F9�N‹ÅbµZÚÙNMÓŽ;~ìØñkxŽ¢(báHä†îÑàºPJ'Nœ˜�=�Rš““SRRRTT¤o×}ºûî»7oÞ\YYÅq܈#,–¶zz=7¬ZµJ’䨨˜gŸýqiiÉG}ÔÐ઩©Ý´éóM›>ç8ŽR*Š‚ÉdE1777ôš¦1ÆF�õÐCuúM°Zlð{ï½wàÀ+Tʲ¬O“ÌÍÍÝ»woè¯&OžŒ:@w‡èÐ â !¢(æåm×4�ã¸ääd‹ÅL‘e¹²²’RÓörL„�S§N¯^½Úçó›LÆ%K–dgÈÎ0f̘]»víÚµëìÙsŠ¢èªªúý�b2G�Ó<7p7oÞ܉'µÑ¯Ïû�·ß¾x±¬�O\Ó4—ËUSSÛâoýþ@h#9Ž Î‡€îK ”^÷ê´@!C† �2åVžçÓÒÒÆ�¯¯-Šâ²eËÒÒÒ|>ßUG+Ìþáøî»ïΛ7oÊ”)úF»Ý>gΜ9sæø|¾’’ÒŠŠò††¿ß/I’¢(Mn„­ï߯oßÐ-6›MŸ‘––Ö§Oi�ÏçËÎÎv8f³¹¥Õ¬›â8nìØ±íŸŠÕ¯”º;º~ýú 'âO ò‚“”›ô¦>Ÿ¯=ÝvW‘e¹±ÑC±Z-–†ö@'ÓÙºôÅ€@—iíûw4çBˆ(Š�{ñ'ôtÈ = ¢t:Ä…°‰‚—¶­Ûðt\tn=Ut¼´¨:ÀõˆŽÞ "U¸fÈ 5/6¢\›¨éÊ ²à 7ܸ0×Z„p-CÕ:U ¨1@û¡ê€ªÀ 5¸v¨:@ êРŠÐ£EÙ^D€î+ʺ‡èû�Œ èTº£èû* 7 TºäèJ¨:D?d…#„D×[Ñ šES�@Á€@CnBHÔ½Puˆ°(ë ÊEßûUèT"&ú¾?tªÐ¨:„ j pÝ¢òM„èe¢21!:tºèþà‡(õoÌuˆQŸªת;|ÆC÷ÒMÞS¨:\ƒnòˆÐˆÐ˜ë Ãt©îóDÕ€t§�m€®†èÐÕºUvEt€À\ˆB¡_ÁXg ú°îô&EÕ¢Üõ vŸ�d€îÑ¢Móž}?@At€À\è.P{€­ûLw@Õ¢ ùÔl>/²û|¦\ÖIÓ‚Ã Uètm„€¶÷§—Ò>>nT¨:@ ê�¨ýà íÙƒpƒé&oyT ³à¢J€v WÎí ÝÞM êaE1q åX od­ï­Pu€pëVŠ�®Çý êйs º�«¾£»á[Ñ¡gRTUSUI’EÑ4­«›�‰ã8A Ïó¼é®Ñ¡G¡”*Šâ÷û�!„ã8Žãxž§´ÆZh cŒ1¦(Š$I„£Ñh2™" z¯×ë÷ûc¢( ‚Àq˜ËÐciš¦(J �$Él6›ÌæÈœÑ¡‡`Œù|>¿ßÏó¼ÑhD™ Çã8Î`0ˆ¢¼^¯¦i‹…„ÿóßJ{ˆ@ à÷ûEQ4™LÈ 7J©ÉdEÑï÷ûýþœU‡ž@’$¯×«O™éê¶@0 Œ1¯×ËqœÁh ë¹Puèö4Móù|ÇÃü^€hf49Žóù|„…w6Tº=ý L£ÑÈÂü^€('B ðùüfK§L¢êÐíýß®nt1ýÚ:I „õ,ˆÝ›¢ªŠ¢ 7€NEQTE ß)º7¦i„¬ß:½GPU5Œ§ß¡!E!ˆp¢\…þæÀB Ó{DˆˆÐˆÐ7Dtp»Ý555>Ÿ¯³È«®®ëHRDiªªªZ',(¥)²,+Z[»0­“ÎõíI~¹m‹öõü~yy¹¦µÙ5c4SRRô©"Œ±>ø 77÷î»ï^´h‘¾±®®nÕªU>ŸoáÂ…}ûöÕ¥(J}}}|||Û³�?þÆë¯{½ÞŸ<ÿü�Áƒ¯õ™Eíü†_ýæßY÷ÿö·%_%Kje;ÞY½Ç;è®'îèßìv¬fçË?ÿGÁÐïÿéG“âZ~ µŠ/ÿøŸ+.ÎúùK÷ ä/mSJ÷¬ß}Aì?mîÈ„oOÏdYE¾Å£|»“ëÈšÿ}ûKyúϽ°/nß‘ˆzç�ŸŸßž�ÓÒÒ–-[f¾|Óñ¢³gÿ¿¿ü¥£ƒþýû¿ð V«µµ�@~~¾Çã™5{vpãŽ�;ß{÷ݤ¤¤þð‡­=69)Éh4ÖÕÕmÏ˘�ÍóWéÞz¨):z´6nöå²S™QÑh®õ*µ¦`ógyŽ»n¾cdÂåmZõ®×³ºrð=ÿñØôôÖ3µ§÷‰—ä_n=6+ëf;®3ˆ€UÊËËOŸ>Ýž=c­1tŠÒÒÒO?ùDQ”ääääää6öt:�#FŒ(//?vìXeeeÛ;÷t¬~ï/¼ytà#xnjÂÕwo'µj÷š5Üò�ìAÉm×hÜð[ÇYlÿ&ïð¢Q“�ÈÐM0ÆdYnÿm¼^¯ÉdŠ’U|":`?dÈ�Ÿ9cìĉ•••->Ðd2=ó£ ÌÎnñz½JJTUMKMu8Mö×o^îv»«««cn·›RWWwöìYžçSRRšì___ÿÎ;ïTUUÅÇÇ/\¸PÅà¯.\¸ðòË/{<žÐý�€~À_ÿúסÿÕÓÓÓŸzê)»ÝÞžW£Ç Tœp'd÷íeæaª¬h„húLM‘eY#”¾Ywï-\ÿú?÷¹ÍC—Ý?%ùŠ7¨>\Òpe² T«„IG>úë_ö8BÞYâໞ˜Û|P *Ô××ïÞ½;..nÔ¨Q&“©í�kkk×®];uêÔD¦ym‹htÈÈÈøÞ÷¾Ú11Æ^~ùåÖ¢¥Ô`0G1!çΟåå—UU}ú™gF'&¶ø¨C‡¿ñúëÁFnnnnn®ÍfûùÏn±X‚»ÕÕÕýýï?yò¤Á`¸oéÒ&CŠ¢¸\.=|4רØúÏØØØæûœ:ujÅŠ„�eË–e‡¤ŸHcõù9[ó]Í'(jõ'ë5¢UØôo—£ù÷vj8ýöaùB¯z*NäïþjË{Îûïþ¯ßÝ�Å«çÖÿò·ŸT\îô·üù‰-„ði‹ý›ùW¼ÜÌSôùë/¯;#÷šòøcÓS›¼Sôá’‹-¥Xýùãõ¡LÎÙ¸‘(D­'Näåå鵇qãÆµ‘ª««W¬X¡²?óÌ3Ѱ`´O“l�¦iŒ1ŽãZ "¡ô¹Œ1Ji“ÛR3ÆÎ­Y½º¸¸˜ã¸{-ºeüøÂqÜœ9sú·÷víÜyðàÁæÛ=ÏÊ•+‹ŠŠ!«W¯~þùçCSKD1oñ×?+jõª�†yN´°�O3��3ĵþW¿_W¡¦©!y}r%Böýÿý½+Þ팢ûçÿEÑ_iÞ ~;‚³g IW‹ .âû±W/nr&©òÀ§o¼µùL ææeÏ^ш쮮ój»3ÆHy«AïÝ™T_|hkζ/¶“ £Ä‘=möìq†=/-?úzò}oûî}�·þkÅÅ1‹ë÷ÕÏ^/ ù¥r1÷­ÿÙqÀMãÇ>ôìcÓÒŒ­?Þ`2›Í­G£H At€hf³Ù¦OŸÎûꫯ6nÜH)=zt“ï–kÖ¬)((èÓ§ÏÃ?Ü|´½«Dt¸Ô\¸páÕW^©¯¯oòëÿùío›léÛ·ï /¼ÐÆ„—Û�š¦qwë”)ýúõ³Z­&L¨««Ówà8.&&¦S.�°Z­÷-]ºbùrBÈ}K—vYÉ�B,ɃG†NéÔª¶}Yªr½fÜ6úØÚM•éÓosnßx ¸Î”½`X³kS¬s~ö‡9„¨ç>ý¯ß|\{Ë£¿ýîp#!D.Ëñ3¢œüøå“—÷ozð?žšÀy¢„�öFd!åÖ¥m–óC3úß–×Ëf³Í˜1ƒ²mÛ¶ 60ÆÆŒì&ÊÊÊ>üðÃüüü>}ú,[¶,55µK{…ˆ~F—””üóŸÿlmšäÙ³g[|”>ÖÐþ*MÛh¨ªúî;ïVUUéÿ|ó�7ôÖ¬YÜÇétþò—¿LJJÒÏ®+/+;uêTk‡­­­míWƒ úÝï~×ÎÆwT°y¨çئuÇeÃ�¹Ó»ŽB8ç˜9³�\—÷ñWSÎÍhyˆ1Â!Œ0¹&?w㆜íùU2¡bü É³gÞÚ¯níŸVžäxîÛ e8JBZømSa„(ç6¿úߪ«„Õ|ù�W⌄éÀ¡gÇ<øô×SSU…¢ø½��ÆÖ«>©ÉÉ¢“ÕjÕkyyy7n$„Œ3Æd2•••}üñÇ™™™K—.Õë íÿH»Ö~¡½"ªªª¶nÝÚ¡‡èýÏóIIIO=ý´,_Z7p玻víJHH¸oéÒàøÐW¹¹ß|ó�(Š�¸Ö‚ªªz7øÁ\}ïîÃwúó¶ÕÐÔùw�ïÅåB¡Æ¬éwݲío»Ö­Þ6òdzRÚœDByZW°#¿N°˜d�:ðÎGœ’@j¶‡¤B¦i„PŽoëJ"¹±úBñ•BTwEqKsQMÙ!KEªŠÄˆœ¿ò¿ž^yµ'x•ùÊÑA¯=0ƶoß¾qãFÆXRRRNNŽž–,Y’––%×dE4:Øl¶¤¤¤ûçßÕ IDATÖêeeeM.X —{nBˆÍj .ûÈÛ½k!$))iäˆúÄTÆØ�ýû !F£±�W™çùï,YÂóÜ{ï¾ç÷û¿³d‰ÛåZ¿~}rròÃßý®Éh$„‚¯ï/+J—¬3V¬±`Ýû›JYÂôïÌég¢ÁéŠ4fÔ]÷ ?ôîá�ÞÛÜï¹ùYmu¿4îæ%?ÿÍÃÖâ÷ùÖ±–Ρ* #Ä ´‘ℾ ^xâqùØÊ^ÛmŸûü¯ç9¾~íÿ®<=ðÁÿþÁ„ËËQRÞ<“¥!\lŸ!™q­¿s™«øhQ«E €hc³ÙfΜI)ÍËËûì³Ï C]]]VVÖâÅ‹ÓÓÓ£-7�G‡<ûì³m\œ¹gÏž&Ûý~¿¢(f³ÙhüvÞœ×ë½xñ"!$555t»¾è¤Ñhl{…�ä¤$‹Å"¥455%fðàÜÜ܆†“ÑØ¿ÿ&;{½^Y–­VëóÏ?ßÚ¥•š¦­^½zÓ¦Mm=ùè!•ï\þÖ–RÖkÆCwßd£$4q½&Þß¡Âw|ü÷å ?ùî-‰­–˜�xs=¸,ùáLFC#Mœh2™£@ á£Ù’ܯ_¿&E‘êêjMÓL&SlllkõžçgÍšuóè›MFS—N„l¥zßÊ¿¾÷M½aÀÝÿ±hX K7ó½&>ôýså/¹ûí9úÜCã{7OÊÙÜwÿðî¾"ãü_ü¤W³ßjåû>]Qéi,*R¨¥·ÓÒ�K‰¸Äá·d}X”¿ûpÕÄé½›þÁ°úÊr•ðI 1mþ)ñýîüŸ¿ÜNDÖƒ€nÄjµÎœ9“1VQQ1sæÌŒŒŒ¨½ÑA´GWC!Äf³kŒ±={öx½Þ¤¤¤ý¿]hAQ}Íǘ˜˜µmÛ6})ˆ&!Îl6�?þÔ©S;vì˜ÞÀˆR|pgësË̾6Ö|~ïP7­þ¢Šs¹ã¡YšwàÌwæ›í�e*á›M„àGOþï·mü¢`üýC¯|Å™§¼¸\¥¦´¤ÖV|¸Ä`‹sväuˆV«uÖ¬YŠ¢Øl¶¨Í $Ê£c¬¼¼œ\iëÌ™3»ví"„Œ;Öéü¶‹�eÙëõBbZ)¸\.Žã²²²œN§¾gИѣs¶l)//ÏÍÍ]²dIðá���çÏŸ'„¤§§Ûl¶k{ëÖ­#„Üyç�]/e»Wýýý¼ uŽšsSïþæó+w(ÙüêÿÝü—ÐwÒô¡Ç¶?°æOEÇï}ú{ƒŠÞã߇ÊýŒPC¯aÓçΙ>~p¢™cõ»šŸJè¿à·[@E_¶[~ÙØÁɶ+ÿ{(§·®=M¸øYΦ!€Æ�ºmZâ¡Í_­Ë›2àö´ÐÜ8¢@&âÐþi('@OÕÆ�£GD£Ccc㉓'Zœˆ¼ÓD¨àœ†¤¤$ýQ555Ë—/w¹\IIIÓ¦M �.—ËårQJãã/剬ÌÌ%÷Ý—žž¶ï›}„�qãÆMŸ1½oV_»Ýª««÷íߟ™™Y^^¾eË–¬¾YãÇ]Zúé|ñù‹/êëA]Û^>Ÿï½÷Þ;zô(!¤®®î™gž¹êZåab°÷Š·ræþw<þÄ]™eŸ»ü —¨b�Ž”ÌiC‡¦GøŒI‹fß5ìã7ÿ±'fôðT‡­Öä’íýn�sûÌI#úÄ´8‚Æßúã7o Ù¨9úÁ‹oì{øwÏOí5ö¡õ5$ÛèBˆã?»sH|¯Þ±Í^ &7Ͻkž¿ýY¿ŸÝ3 XyðžÚ¿¯‘‰ƒ‡÷�‰ŠÕÔnT�§OŸþÃïÿÐþý+*****(¥™YY”Ò²²²7ß|óÌ™3ƒaÑâE‰‰‰Š¢ƒH~A�Ûí6›Í½. ¿§¥¥¥¥¥1Æôè�––6|Øp=¨ªªiš,Ëï¾ó®¾$Ãwy¤²²²¨¨hÅòv»}Èà!Š¢lÏÛ.IR\\Ü �¯í)˲\__¯_£ÑÐÐ ËrWEjë?÷‰_ßbLìe"$þÎÿ¸)øíüú_ývmEÊ”ûŸ˜�|e`Ô’çÿgŽk¤døâÿúãÉñM—Sàxž¦ª#¤i�®ÕV\T¨!¹W ¥†Ô!ÃS Ñ*!Ô˜�–™žt¹§_{,×íÏÙ»wûŽCþ™/üä¾Ñ§ÞÚ·á�÷ž}dJš‰¢ÕÈýÚM Ã' K@rèJQ=`qôèQ�Çãp8RSR¶ää|òñÇ.—K„E‹ß2þBÈÖ/¿\½j•~­„ÏçSUµ=sdYÞ½{wcc£¦i•••Ç%'''''-½é+/¿RSSóò__~î¹çRàÀ�„�aÆõîÝûÚž‚Ãᘿ`Áûï½G™7~×ÞT“�Il>©ñ*Œ—ïèep&Å7ÿ5µôJ‰ãöŸÞò¯ÉMb…Zjw¡j?(½Í"äªÒ‹ Ñêv¬ü;!ÔœMPuè™UÕTU’$EQ4Mëêæ@gâ8NƒÁÈóœ Dº+GtèQ(¥Š¢øýþ@ @á8Žã8žç)ív¡ZÆcŒ)Š"I!Äh4šL¦HD‡Åëóú}~Ƙ(Š‚ p¤z,MÓE ’$™Íf³Ù™ó":ôŒ0Ÿ×ç÷ûyž7�(3ôxÇ Q�€×ëÕ4Íb±DàóßJ{ˆ€?à÷ûEQ4™LÈ 7J©ÉdEÑï÷ûýþœU‡ž@’$¯×+‚Á`èê¶@0 Œ1¯×Ëq¼ÑÞ¾U‡nOcšÏçã8Îh4vu[ Ë�FŽã|>/c,¬'BÕ¡Û“’¢(F£1Üïˆr‚ Ÿßo ç”ITº½@  _àÛÕ €.¦_['a= ¢C÷¦¨Š¢(È  AQEQÂw D‡î�iŒ‚õ@§÷ªª†ñá;4D€ž+@‡èW¡¿9°�èôAUÃx÷"DèL¯»±U�ÆÏ³‚RMÕÔvÜQ“ç8Žçè�´ÀüáJ‚--€(‡èpOVð+vú½„1'˜‘§\kCŒUÓ$MñKr¸ÈPTN—M’³#Úbˆ>]\.—¬ÈÑ`·Û»ª 7¾ª‘_¹+àö”�1šDÚŽ;qó„1ƒÌÔÉpyŒËw²ÍQ¬i/D©EY–¿ù曆††Ù³g ‚ Ëò[o½uðÐÁ‰&þà? ”ú|¾�>úÈn·�5²OFŸ`¯VQYQ\\¬µTZç8.%%%5%5¸%''gõêÕýû÷öÙg#vïÑîÂôÙaŸÛ#PÞi´ð´½s\(¥*8�ÖÚ€Gjôš7VžÖv¶N>»áåKûL�»`|š‘V»ÿßëÎÅŽœ0ydŠ©‹šp#ŠPtرcÇû￯1M–å 4ù-c,///ç‹BˆÁ`è“Ñ'ø«C-_±¼µè°ðî…}2û¼ó�wÒÒÒž~úiMÓR@–å°>—nŠ”ÆbŒ¦öç† žr1smÀÃŽ—„£míâ-ÈË9Vàã'.6BˆV±óç_�IŒ»yêÈ.kÀ�(BÑaÊ”)6nX¿~}FŸŒ¡C††þöÔéSŸ~ú©¦iS§L�={vh!Ýf³¥¥¦ÕÖÖz}^‹Ùât:ëëë=�Fƒ±W¯^111²,»Ý���‘y"Ý—¦jN)m)oàí®ö‘Šw|²£¸CËšñIãÌèo ݤÕìߺ«�ÄL�1ÊI !rñÞ¼3Š�5ul†Øá&t5Ƙ,Ëí¿�€×ë5™LQ²ŠOØ£ƒÛí–™2iò¤£G�^(¹pôÈѤ¤¤@ @‘$©²ªòË­_ºÝÙ²o¿ãvw£›" ¢Íf£”Nš4iâĉï½÷ÞÖ/·Þ|óÍ�?þø¿ÿýïO>ýdÈ�!Ï<óŒ(Š_ïù:ÜO¡gP5Í,ˆ×¼¥ÔÈ ^Uêð#µÚS[·äuh=uÃè¬Û§÷'!Mõäoúôh€ï{×Ì!VBsÙòE‰ÊÅZë�nÝr¬ù8Ç€[ÆgÙ°ÜD©úúúÝ»wÇÅÅ�5ÊdºÊ¨kmmíÚµk§N�:`À€È4¯má�~¿ÿÕW_=zìhèÆMŸoÚôù&ýç½ßìÝûÍ^ýç'O¼ð úσúéOÚYóN�>µbù BȲ—eÈî”cvG×0TŠ»¶‡‹™3ŸùÉØ¦Õ ­ä«×?Ø/%N}pé˜ø¦Ç¥¶Kh¯/�ÿòß¹Õ$nÚ�SÒBˆ\¼mÝ#¤îðÆU‡[:©0ø¡áã j�8q"//O¯=Œ7®�ôP]]½bÅŠüü|�ÇóÌ3ÏDÀQ}qfÑÙ¢¿üù/îF7cLÓ´;wìܵS¿µôÁC}ìÑÔ”Ô3f´}�dzrÅÊ¢³E„�Õ«V?ÿüó‹¥í‡ôT×ùv»Æ·+Ûghl³­ª1_$D¶¥6,¹íH8·eùºs*µŽ?ÄF Q.n[³¡X³_øÐ-�­ïlYRUU=I´SX×ô†°ðžþìÝOÎÈŒPÊq!JÙ¶}T0 yðþùãì‡óä´1yàÈQ®q@W°ÙlÓ§OgŒ}õÕW7n¤”Ž=ºÉ7ÛŠŠŠ5kÖôéÓçá‡NIIéªÖ6öªCpÙ†êšê�×~¼sçNEURSRcåå ñ Œ±šÚšõŸ­ß±cǬY³f̘|HzZú¯~ý«†††·Þ|«º¦záÝ G�½õ‹­¹_åÌøÀ²ÌfóÙ¢³m7ÀjµÞ·ô>}Àâ¾¥÷ݰ%‡nI®ØùÞß7œW.ÇCæ9õ雫�„~÷.™œÄSO—¶àzØl6½p¾mÛ¶ 60ÆÆŒì¤ÊÊÊ>üðÃüüü>}ú,[¶,55µÍƒETØ£ƒÏçË/Èß±}Ç¡C‡R€çùÉ“&/¾wñûï½_^Qž��ýÈ#�ìܹsÆ UÕU~ôáæÍ›çÌ™£QÓRÓNŸ:][Wk³ÚF�Ý'£OLL !Äb±¤§¥‹¢(ËòÜ;æÆÆÆŠb«3íü»ßý.ÜÏ´K°Ë"yÆN=L­WŠ7ÿýÝoj™m@¶óì© „Î~ñÑÆ³ŠmÔÃ�ÍJ/?qV·ñÿ=þùµ9Óôç^¼pT�ÆbµZõÚC^^ÞÆ� !cÆŒ1™LeeeüqAAAffæÒ¥KõzCû?~ÃÝ/„÷ÓµèlÑ‹ÿûbMm !„㸌ôŒÅ÷.}óhýVÑ:“É4k֬ɓ'ïØ±cݺuµuµ~ôá… žxâ žç÷ìݳzõjMÓÆŽ›–šÖü鯙Æ'öìÙSXXHpÉžCH5±ÿF­Ïãß´ï×§.j̼ã鲯ÅiS’Br"ål½ÒâÍ¡ÿÕE»oèôÚclûöí7ndŒ%%%åääè¹aÉ’%iiiQrMfPx£C߬¾ßùÎwþùÏfee͘9cÌè1Á X9Ž3ˆ}*ƒ z€˜0aÂ矾}ûöÛæÜ&¾ýûÞ|ãMI–úfõ½{áÝ‚ cTCCÃá#‡SSS““’ !k×®­ª®"——˜¼ê….Ð-)·>òŸ£�)Öü}ú*&Ü|×ü¦»9n}ì—‹ûc®tS6›mæÌ™”Ò¼¼¼Ï>ûÌ`0ÔÕÕeee-^¼8===Úr‰À€ÅĉÇŒÓdâ¨ßﯪª’dÉn·óü·ŸùV«uÑ¢E ,ÐGF�5þü³gÏ~÷‘ïÆ;ã !”Ò¡7 UUuÛ¶m/½ôÒÝwݽhÑ¢xgüøñã ­Vk¿~ýf̘�ÂCOaê�b"¤C‹Bt?zz „äååUTT §ÑÚÑû`©Lk�ü„R2¤…¥5Ú¢ÉÞššš–¢ƒNñÖ×x[ú…à”¢sxà†ÞèàŒsž=w–\^jêÔ©S§N .´I)9bäÀì�yyy[·n½Xv1 Î�‘eyÑâEŠ/tJ3&Nš8vÜXBH +N¶Q!è”~=ÜÇo7ÿ¼a†¢ò€ËSðÄÌ"åÛ3rÁ“™Ú ù¦š¶À¼a:)�÷ÄË£Ôk©ñp‚%€hÞè;wîÜÇ÷ë×ï¦a7¥$§´Ø]™Íæ9sæÜvÛm%¥%ùgÏž=ftB|ÂwÜ1kÖ¬«Ÿ¦Ù!)¥Fã¥õ6–©»è¿PlÜ�+vI�ÞÚ€ÇÀ FNà(×Z~`ŒhD ¨Š¤)„R“Ã&?0AI°uì¬T0˜®ÿ=Æ9κÝÂõs4m«àÌž6Ó*ôÁe˜‘Cׯ_?aâá¯À�¨SÞb×Þ¹/IóStÆñÝ.w hÿŒ\Î+ §+H•KÓ´ö¬pN)å8Ž%ØÕìDÍb¸¾Æ@$x<£ÉäÛ*G‘ºCÐuv“¡}\8B�È)¢€f¥œ¯ârt¸æŽ-2ùèw££kï(}ÍÆÖÞrù›a½–þºM[ùD„Ú¸n(z�ÖÅ(1‰½{c„D¸,=B¤æ:@x‚Àó¼,ËW¬À 7*Y–9Ž k§€ªC÷Æó<Ïóš¦)ŠÒÕm€.¦(Цi¢(bÀZE)DA}en¸‘éEhAÂ:wÑ¡ÛEQMÓ�@W·ºL Ð4MÅp¯‚ˆèÐ퉢(ˆ‚ÉdRE’¤®ntI’E1™L¢ :ÀÕ ÊQ£Ñ(˲ßïoÏ2‘Ð30Æü~¿,ËF£‘çùàݧÃÑ¡'àyÞh4rì Ó麱çUý‡Ã섟Ïçñzº´EÐ5¼^¯Ïç#„ÌæÐ·ì;'‡é\ˆÝXåå%#ûô2Bjkk»´9-£­ÿ:Q]]¹Ü#Bª\áš)�èÐ�Õ4^z[8m¼¦i^_»†µcí;|ký�>cLŸžÓÚ# 2|>Ÿ¦iñv^ÿgµ;\ÑgvcÁÙ³€Sóäp@tè!Ú˜ÁÀ“$IUUAxžçy^QEQ8޳X,”RJiRRR|B¼ÙlnòX‹Å2bäHƘª*g Ïx½ÞÞ½{›-–>}úègôz½•••V«µW¯^„�úúúúúú›¡ŸE+-6²¢¢¢±±1tc\\œ¦iF£‘ã¸óçÏSJ{÷îm0ô¿ ŽãRRRB(I’Ûín÷d€ž&2€ˆ=¥Ôf·¥¤¤”––g9”–”–••¥¥¥õNì]|¾˜Rj³ÙšçB¥„RJm¨oôz½v»�RZòÍ^›ê“%)¥zaÃårñ<×´%6[“�¡Çi^00�)))„¿ßÏÓ+%еº,:¸Ýî@ `0‚Õéñù|UUU)))‚€ôsuv‡�+ãêêêâœq„·Û-Š¢#ÆÑÎÎXUÕòòr½làr¹ÊÊÊšìàñx<žo—”¨®®–$)&&&x_–kœ ©(Š^‘$ézׯkú]EQÞ|ãÍýö�9êÙ?ÛdJÝU}‘óÅŠ•+8Ž{ú©§GÝ<*L�ì1c‚ ‚à÷ûeY–’×ëu8¢(¶gTŒ1VYQéõz{õê刉1[,qN'¹|}Dccã… ìv{ZZ!¤ªªªªª*55Õét^‘ ²²2t®!$??Ÿ’��ÀSåĉM¢ª*&H„UTeWUµ¨¨Èëi:3Ÿã8£ÑèñxÖ¯_¯iZóÂCŸÌ>±±±‘jfT“%Ùãñ9|DÿçÑ#GõêêêêêêA0™Lš¦5!£”öíÛ76.¶¡¾¡¼¼œ1ÖØØxêäI‹Åœó¨%}A*}-3ƒÁÐ)—G »ÝNQÅçóñç@Jày^–/]Õ©oQUU¯Rèÿ”$¹¤¤Dï¤õ«+õ¯õMÆ,ü~óQŒ&ôðÑÚ}Àõ¹œM6:�N§ÓÉ;þ¼ÏçEqÀ€(*t­°G‡ÒÒÒ¯r¿ öO:ÆØ…’ „�’Ò’ËW4©l ‚0mú4½Ná8®�ßbUU qBÏóV›µÿ€þ„I’N�]çp8ÆŽ\6àø±ãgΜ™}Ûl³Ù|þüù?üáÍÓéS§V,_AYöà²ìììN{nÝ�¦i²$—\(¹ô³,BÊËÊõ¢‚~¡£>ñÊÇ}»Š4/>¯×d2ɲ¬išÉdr54¯ÀÔ—�òù|/^ >Ød2%&&W� Љ‰1�­5µ¡¡!há¶ŸÕÕÕÁ÷�žAh{•ˆëœž mˆÐ€Ïó©)©Ánƒ1VV^æñxl6[rRrp7I’J/–¶xŸÏ·üŸËó¶ç †ØØX=:œ(8ñòÿÏÞ}ÇGQçÿÿÌlÉ–dSI!!  5A¡Š‡t<8ÁòÓ¯õÄó¬Wý~¿žžzzç¡râ÷NQÂQˆJGBG -$�$¤·MßM¶ÏÌç÷ÇÈÞ²)ì†”Íæõ|ðÐdvfvvv2Ÿ÷¼?íƒõƒáÔ©S=ô�RÕ¶{!1 [Ò¶B¶mÝöâK/ÚéÄrÝéq_«ÕŠ?¨Õj©T*ÙÑ´55---*µZlÇ R©ÌfsSS“Ø6Bì�i±X«üüüœöòlhhh'�3¯_¿Þ6t0™Lõõõr¹œã8©TêããÓØØ2qâDq›ÍvíÚ5JéðáÃ;‰K »ôRè T*û¯Ç† &þj2™ÞýË»×ò¯�OÿäSOÚyËËËÿüç?ÛG,V(?ò°ÙlælÜßßÿû•œ+R©tù}Ëïœzç©“§®\¹2{ÎìG~dË¿·TTV¼ýÎÛsçÌ}nÝsR™4<<¼ÝÃè�a¶< ˲~¿øøx±=©ØaaÈ�!‹E­VK$lee˲,Ë8ÎV%þ,6› jnn®¯«3 2™L¥RÛ«š››Å9,âoÌaÑ�A¨®®æy>""B«Õ2 3dȱ~ÄžÒày^l2ɲlÛ<t»¾i&i±Xtz!$44´“Õ†4hPæÑÌÝ{vëõz¹\¾rÅÊù÷Ì/..ÞºmkSSSmmí /¾0,aØç›>¿pñÂþû«ªªû¯ÇÄfù"µZ½zõêÍ›7BV¯^= R„†a$‰^¯ojjŠ�� ×–––úúúøøxµZ%VXtÒ+ÁO£ñññ©««£”j4ƒÁPTTd�xžÇ™ÎËûOkVJi@@@ddäm|]]]cc£ŸŸ_@@€˜)ñññILL´ÙlùùùbãMA¬V+¥´°°PÌ�ˆ†¯¯ïm¾;´«÷ª„HkªkšššBrss›:mïvúÔé­Û¶êõúððð~ýÂ= ªúdã'MMM‚ \Ë¿öåÎ/ýýý×=·nÙÒeR©4ûJö×_}í”]HLJ|ãÍ7Þxó�ĤĞùpž‹!Dày½^¯R©T7*t‚‚‚äryMM�Ùl¶Z­r¹\*•¶�%[ü]*‘DDüT©È0 Ïó¶Äò[œËŽçùŽzR¸Žçù––©Te¯O¡”ŠÑ�8-–Ñh4›ÍâÛÙ—˜L¦˜^è5}�u ”ž9sÆj±‚�Ÿíý÷ÿþË_>Ú¦j\4cæ �N×Ðаòþ•�¦  `ãÆ�555���‰#Ïþpvßþ}ÍÍÍkÖ®Y¾by@@@QQÑý?¿‰k#Ne4q#‘üôu+Š   šššêêŽã4MçgLœE‚㸆††ØØØ±cÇÚ_ê¹ ‰Dn2™ÔjµS3[…Ba?«ÕzíÚ5Žã’’’0×6@/èƒÐáÚÕk§NŸ"„ÄÄÄÖhkŠ‹‹þþ÷õÏ>ûËðˆˆ¶%�D"Yvï2BÇqܱsGkkkppðÓO==|ÄðøøøôégΞ)¼^¸vÍÚ¹wͽ‹¹«×?�‡O&Ï <Ïùûû;Ž¡$>²‹Õ Óaþ‰çyqh©TÚÒÒ’——¢R©X–en¸åñ‚P\\\ZZÚÉ9-ñõõE½€§éíÐA[S³iÓ&“ÑòÌ3O^ÿü‹ÏËÊJׯÿàW¿z®£­®nßžž›—K?ô¿ÿ¯èèhBÈü{æoNÛ\__ÿ·÷ÿ62iäòˇŽy’ì¤R‰ŸŸoTTdcc£Éd²Ùlr¹œa¥R9¸  P.—wR2 ãïï/“É¡&“™ã¸°°°Žú4RJkjj ELLŒB¡ˆŠŠ mjjÒëõf³Ùb±t4bG`` ÓÀP,ËÆÆÆúûûwô^¥¥¥m'ÏlËd2µ»šãH‰¤mïPè½:X­ÖÝ»÷\½vÕh0ÈäòËWLO�Naf欙&“i{úöââ¢O?ûÔÞ3“çù´Íi‡rlpÇó|YyY»o!&Ï)¥yy¹‹eèÐøàÃF!$,,, @œ´B\¬P(Ä$„¸D*• ‚ F] ÃDDDH¥Rû¼\. ³Ìlj3n;N�Á0ŒL&³ç$Ihhh@@€¯¯o'ñ\DDDppp»]`d2YPP˲,ˆ‡‡‡„„tžX¢”b¼j€ÒK¡ƒXŠØl6?�fíšµ)ÓRì·~†aîþÙÝÍÍÍg8;wÎÜo¿ûV|�•H$Ë–-½~ýºÍf›:uê±ãÇ´Zí´”iIIIN;7�{2ö´¶¶.[º,44ôôéÓ+W®pŒjµÚÝ»÷B–.]ÒQ{L¯'“Ie2ñëËx†âTU!æù—ˆm;Ù­Ø«ó– žŽF‚rÔI½‰D"‰‰‰±ÿа õRè •J/^4mÚ´ØØ˜ðˆ§W%ÉŠ•+-^¤knÞ»o¯}y@`ào÷[¹\n0Μ9CIHH˜5{–ÓæMMMlmm•Ëå©3RSg¤:¾j2™>ûlÓ•+Ùâšëž[‡vø]Ö{m$É�SïìèU™L&“Ét7fF°sléÆb³ÙÄá�™ŒFJiGùk›ÍÖÜÜ,Özèt:›Í6àC´!€®ëûI·m6ÛÞïö644ˆƒšL&–eÛÜP„´´Íii›ÛÝOG³0h4šÅ‹oú|!dÑ¢EŽM€»ì•ß}ö$*“ÉA8rä°½9äàÈȈˆÎê×Ý•2-åŽÉwªä½ò p»z<ë Pø ‰"‘H:™ÕpôèQ¹¹¹‚ (•Êððð™3gßt”Ritt´\.Ÿ3gÎØ±cœ67�ß´´´t2#Æ€ xà�¾>ð*LFFFJÊT‚1”ú¡¤šJ[û¯Q MMöÙ@ðm DAAAAAAa�房^}wpçëwMïM½qô „^qô,„à„Þ)èqÀ À À À À ¼ íëï‡ÐÜ€ÐÁ[0ã:@/@èn@èn@èn@èn@èn@èÐo ûx©ø¿>,–0ŒQ瘛Æé€¾%íëh'jé¨td:}Õû´Ï!÷}Ë+,:/2HÙ9@>&ô;}ŸuhWçg'¯zGNqx,OÌ:Ü/(t½à#€óЬÃíh·èíöl„Ó»xG¶à–Ĭƒ÷?èvï'l»7ï?ƒ„¯Ì:t¤»z6v%8îßõn#�ïÀÓx[[‡Îõt �¼ÞÊ:ˆú*z@TÞa`eà6!t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t7 t×1ÀE AÖÜ"íëOÆ8ýެ¸¡¸¡CÿåœAèhëÐO!n€náv�‚РŸK}êÎÊÝ¡@Ä´ù¡— ­¸Y‡~í ï!tè n5DèÂú®ï³›!tèví6Dè$,p¥á‚ãæ}™‡Fèн:*×�–ÓNWö\ú…þwa T®ß±Ý½·÷pYàòîÑÃÜ€¬ƒçCÊ _(·kd<œ«"à ”K:Ò;e²ž¦‹ßºT"éÞã€~GÒ¶,è�X¡ƒGéú7,•ʺñ8€ÒÞm¹£–½•úe:ëã)•öF±ŽÐ¡Ïuýjc¥„!„ðU(ÝwH@:¸?ÛvïØM¿aÛÑ:ˆ†Q(¼@o¬K{(žA[‡ÞÁÜø×�‚}úú[y–e•Je÷î`sëŽÝÁÊL›]xC— •JɲlC /þâ×SE¡´ÁúÒ"?ñç·v7žÈm&„H$’¨¨¨àà ñ2€.éùèÁÝfomË1,)çp2OÿÖîFqÝ—ù1=ö$¿øÅ/† ‚¡»Uïe±†Ëj›Í9•‚@Iƹ–aa’á‘*†a”J¥¿¿¿L&µ ¥ý)ˆð ·}3ïîÒ€eY™TªT*ÂBCU*•8‚dÆ �}\eå !äþÉòµ3ºù�`\‡îÒgÁ×ïï .©¯û¡ˆ7ÙÈ£×,8«õ¾Á#û°,«Ñøk4þ}u`Ð ®UYÞÚUõÝ£øëäxÉV÷è;2)))È:܆¾?w&«ðRZÝ¡\Þ¾$v�lâPU¨¿Tíƒj /d°µ:.뺱¤Îf_8o”ô�5ƒ”òž½ó#ëÐ.§h ÝTßG vJ9»þáÐiÚø½Ù`!„�’:[I�®¯� z‰Ú‡<9[ùèÜ@–íbñäúf\Ñéˆáž�e™Çï ºo²í“úW¸�Ð×G½!ÜŸ�?VþØMˆ¦—&3B…E[·C¼“Õ<¥$»ÌTZÇUë8ƒ¹Å®žUêÖÚ}?_ @7óU°Ò˜AÒÑÑÊn)Ä‘uè2o(J†Œ�QŽ�éëãè¯z¬,ð†B¡ÃM:ùJ½âÛ€v8Þá]®žf:]݃ �Û?4„vü=@·éÝä¾7ò‚С£/Ð)tlê8°¿s€�ë–÷ ¦ƒŸ /\Á8üºÎ‹C{5"è&žW¤ôþyýPƒž÷%@ß@‰Ð=:Ï:¸ØŒàö¹2zc'ë@/é$ëÐ =;šm‘€‡êr[‡ž›¹íþOÀíèß­ß<çÐo§­CO Ï9Kð{Ö¡÷ËiWÞÑt£>K<´}Wwçâñ·Ù9³?~d€.A¡Gñêqú^GñFÿ�C¼~\èN`@¡]ï!x›z„à´u€È…þ ý·1BCÖÜ€¬ X=2¶B»Ó2yS ¡@÷ð¦ø ¼PAAÁG}TXXh³Ù\ÜD&“ 6lݺuñññ=zlýT—§nò¾xm¼MffæòåË¿ÿþ{«ÕêúVV«õûï¿¿÷Þ{333{îØÀ 0))) ÓÛQ‘Õj­««|x7~(èÏBAßýz©™dMMÍßÿþ÷mÛ¶Y­Öèè!¿úÕóâøaaaÏ=÷«áÃl6ÛÎ�;ß~û-±¶¾s”ºÑ·Ö`0lÙ’VTT\TT¼mÛV£ÑØõ�&Éì@�‡z½>==ý�üãùóç !'N|ùåW¢¢¢ì+„„„<ÿü¯SSS†ÉÍÍûßÿýßôôô–––NöÉqœØúÁÝŠ ·ÚLÀ@×Á,Û00°‡ú¹.Lû›!˜è¥ÐA©TÞÿÏ[[[Å_9ŽÛ·ooYYyllÌüù÷اx–Édƒ jw”ÒÌÌÌíÛ·s=dáÂ…ÁÁÁË—¯Ø°aÃõëE7~üä“Ou4]¤V«Ý½{7!déÒ¥�¤4ÀKuq„è2°´»z)t�J¥ÉÉÉö_­VëÙ³gÊÊʧN�êÔL²-“ÉôÕW_8pÀjµ†„ÿ¿ÿ÷¨8Ùæ„ –,Yòå—_^¹’óÖ[~衇ÛN£e2™6mú,;û !¤©©é¹çžS(ÝýùÀÃ! è6ÝL’Âóü�?þ¸k×—UUÕ„�ÐÐAÏ<óËaƉ¯2 ³páB«Õš‘‘QVVþöÛoOž|øŽ;Ο?/BPP°ã`Ó¦M›(((°Ùl.n"“Éž}öYqFS/ÕAaçNˆ¢ÇCOÒ^y‡ÐÁžÞL [u}2+ "„0à96dpšà¢ƒ�¡2„N‰Å yd`rŒ¸Ýð`€£„ÂtB ®h¡À 7 è}Ø.„0Àµ lèÚ:ÀÀt«Ø±C:ÀÔa\À0ö¶BhnUC�|C§ÐÖ™7 ëò ÝYn@èn@èCZ;¸ ¡!¨²pšIÀÀaÏ,8Ç ˆ\‡¬ x¨«p²0u˜~€[BÖ2Šœƒ»�u ”BC¤!n Y€ŸP‚Ä­!ë@njô@�€#d˜›þ�Bè@â—¡Â8Aƒ[�u€� aƒÛ:€Paáýjtôè5þd!)o¤uz�2Hà b¦ #³FHÂýqw'J©N§kll$„ùûû3H…€wAèàÍjtÂÆLa÷yŽÞœ‘+­Jëɉ|òÎwÜÒ Ò§fKBýP¼Ý®¼«W�;vîܹÖÖVûB__ßI“&¥Î˜‘”˜Ø‡Ç`j,܇ÐÁk½*ün—Íh%�ü]PÂ|}ž?p…ÿÓ}ÒÙ‰’^<:¯R]]�––váÂ…ÀÀÀ©S§ÆÄÆBš››KKJÎ�;wôèÑñãǯY³&""¢¯ì3t“‘‘‘’’‚œª—Ùz–ÿË>Žº<&Ã�—æËVOAÛ·]¼xéƒÖûúúÞÿóŸ§L�ÚöO‰RzêôéôíÛ[[[×=÷ܸ±c»÷Äásñ' à¾[�倿ªH~ñ‹_ 2Äî;gÏžýÍo~sèС±cÇúûû‹ m6ÛÁƒ:8bD¢��±�3Þ)Oø8}èèUá�_sînuêº0<œ‰ ¹­èÁjµ^¹rE¡P( q ¥ôúõë999QQQ,ÛÎÎ]ùBÛò�¯øâÅKï¾û—±cÇþæ7¿‰��o÷¨†‰2dÖ¬YÅÅÅ»¾ü2~èÐðððn<†œÜÜÿùïÿ.--=z´L&ëhµ~}žzÓÎOâ/öÐ�¯°¸|ùrUU•Ó¨¨¨Ñ£G»²ùµk×víÚe4M&Óã�?QVVöî»ïšL¦N6aYöé§ŸNIIéúA÷g5:áw»l]Ø�Ròû]ÜWϲ·ÓîáòåË}ô‘¯¯ï«¯¾I)..~÷ÝwA IJJjó¦ôßÿþ÷Þ½{Apý]<ä+®®®þàƒõÉÉÉ¿þõ¯oYÄ*•Ê^xá½÷Þû`ýú?ýéOÝXsQRR¢×ëY–µ‡kmuý¼›>“':z�wê‡)aÉ–§ã»@_é–§ƒ&ý¡Þ1÷@ s,ŸÞ‡ÛHÍÍÍ_ýµÕj�7o^\\œãKË–-Û´iSFFF||üÈ‘#_m÷�(¥'NœÈÌÌ\³f�giÇ� LIq;™?-%eë¿ÿ}âøñ.t×”H$S§N ³/9Ÿ•UVV6tèÐ17·¾¬¯«;uêÔ-wH)=qüxffæšµk=ó<ô÷xtçLžç·mÛš•u~âÄ Ï=÷+BHuuuÛ”Ã0jµZì×–Á`زeKQQ!dÛ¶m/¾ø¢J¥êé#ï+' �—¼³Ê7зæs�¾Ò·îûâÖVÇ…Ç „ûïp¯±$Çq%%%QQQwß}wۼ´iÓòòòNž<¹iÓ¦çŸÞ•š~›ÍFé¤Ý_¢”ž;wnj{ý)n‰a˜‰'ž={ö±Çsws©T:mút{ ­V{òÄ BˆF£Yºd‰ã¹º’“óÃ?¸²OO>Ïà™z>t`þ{ã•JõÐC[,ǯ]»úÍ7ß*Š•+W†††¶-]êêê^ýõææf§å,ËÎ�;çᇹå±tTÓá5Ê�[ÑÏw‹tú=ÉJ§Ð¡¢ÍN:G)=|øðáÇ}||–/_Linnþá‡&L˜B‘Éd+W®,///++û¿ÿû¿gŸ}600°“} ‚ V`yf]»N§kmm�‰‰íÚæ±qq‡ÒétÅ»®àyþÀ�uuu‚ ”––644t¡ã†‡ŸgðL½”u¨ªªÚ»w¯ø!D*•&&&666�?^¬e# ™L–””4dÈBǵÓÃP"‘K¥?¹N§ë¼qƒZ­^µj•Xa±jÕ*/N9BÄq¦‰í";Ñv…Ú6;é¥4333==�çùE‹Mš4ɾpÇŽß}÷Ý«¯¾*i!!!�<òÈû￟ŸŸÿÑG=õÔSb�!v¤”¦¥¥�8qÂÞ‡PüZ?ûì³Í›7;¾£R©|úé§û¶âIgºË¿¸acc£ë{�J¥K–,™9kVlLŒ¸äü… G� Ðh4EÅÅŽ¡ƒ¯ZýÄ“Oj4¹\..¹ÅyþôÓÍ_|áøŽžpžÀ3õRèPXx½°ðºø³Ø¹?;;û£�>â8î©§žË)•ÊuëÖÅÇÇB(¥7~|âÄÉÎ7IJJzã�7ºzìÐ!JéÁƒ·nÝj³Ù¦N�joY[[{ôèQBÈôéÓÃ*æÖ®]û¯ýëêÕ«Ÿ|òɯ~õ+…B!–a‰Äf³96ž{åØl6Ç\Çq6›­Ý˜Ò»1 “��`ÿ5ïêÕ/>ÿœçùû–/W*•ÿذá|VÖä;îCêÏ�ûìÓO§N�ºråJ{럮œgoÏÒˆ(&ÝvS/…ÁÁÁ11Ñ„�ÒÒ²¦¦&BH\\\LLtnnÞÎ�;bccÅ´¶‹ôz½øØG)uªõàiØÒú›r3ßyâÁ`v.B5®6t`fܸqçÎ�S«Õ�<òˆØˆ•çùƒÖÕÕÅÆÆÞu×]NÕùS¦Lá8nÏž=+V¬P*•”R±|’Éd�<òÈ#�üTëÔÜÜüÆo †ßýîwâø„ƒÁðÎ;ïTWWÛŸ¤ûJPP!¤mÝ™‹Ä Å�¸‹Rz.+ë³O?miiY²téÌ3ZZZ|åÊ•òòòèèèÃGŽlß¶MlÁàˆïÂyF0Ä,õRè0jÔÈ'žx’bOøúú®\yÿ{ï½WQQ¹{÷×=ô°‹»jmm}ç�w—´;FáÀ4$ˆ)­¿iɾK¦åS|;ÙdïEçꞨ 7þ|ÂÂÂÄ! ìíìòóó�;&“É-ZÔ6!Ï0ÌôéÓ'Nœhï,c/ÒW3 ƒA­V«ÕjûBžç­V+˲}:øûûûúú–––tmó’âb???û�©®knnþꫯ2339ŽKNN^¶t©D"ñ÷÷ŸtÇ_õÕž={”JåñãÇe2ÙšµkçΙãØá¨?žg€^‚ÀÁM}Yè6ì®»î"„œøàO<‰žå·/ÜŸY:Á¹*·R˜ô‡ú�gZíÍ f~ç™ÖI¨wJ’²l‚´kCIB®^½úÝwßI$’¥K—Š}d!R©t劉‰‰¥¥¥Û¶mŸ˜í¬V«Á`�ÉdŽOÃz½>;;[¥R�5Êqe“Éd³ÙìOÛ}+))qüøñééÛݽÔd2íHO?~¼[ãAi4šÇ|áÂ…üãýë_GGG;­À0ÌìY³FŒQ__øðá¶��ÿsžò=z½>ûòe•J5êæAº<ê<€ê¥[Cnnnnn®ø³SÓ„ Ü›–Âh4¾öÚkö_]ÉkµÚ={vB–,YêØàß+=5[rà ï4�/�·¶:�ßЖJNžœ}‹Îœ©¯¯ß¼yskkëÌ™3So~¤öóó[»ví_ÿú׳gÏÆÄÄ8ŽEm2™š››•J¥cÅÿ™3g***’Ç�wßÐ`0X­VµZí!‰ô5kÖüþ÷¿ÿè£�^xáWj(¥~øakkëÚµkÝ}¯°°°Õ«Ww²‚Ø ùý÷ß?xð @À=óç;VX´žÏž­¨¨ßÎy6zÔyèI¹RÒe½:( ÇÊTµº³†{�k;õ_çÍ$M&Ó¦M›²³³ !MMMëÖ=×Ƀ^ Ô�yã>Ù¯·ÛÜ­…gò§û¤]›6S¯×úé§eee“'O.((0Þ`2™Äd2™ C‡µO¡YSSÓÒÒoÏ:ddd(Šù?û™S"ª¾¾Þf³ùxH‚*""âÙg×½ûî_Þ{ï½gžy¦óQÒM&Ó‡~xéÒ¥—^~¹{'Ýæy¾¸¸ØÆq‰#F¬Y»öÿ>ù$}ûvCkë½÷Þk¯q¨ÑjÛ9Ï{ö(ŠŸÍŸßîyð˜ó Г/tE/…“'ßñÄOvaÔ^G|ðAÛÐ�¹¡Ý­l6[ss³¸•N§·ÙlÞ:Bf%²/Í—ýeŸÑÃ�—æËf'v¥Ëh4®_¿þêÕ«‚ TVV¾ýöÛ�¬l0ÒÓÓŸþy�FC),,´Z­111â—RPPðñÇëtº%K–8ÍÐM)Í/( ”Žˆ¸Í ©%'�{ñÅ—>ø`ý«¯¾ºråýÓ¦¥´=6JéÉS§v¤§·¶¶¾ôòËãnžl¢ ÄL[KKËñ'²/_ÎÉÉÑëõÓ§OO1bÊäÉV«õóM›222®_¿¾víZ±æ¨Ãó¼t©SÕ ¥´  ŸR1ØsÎ3x”Æ�Kö÷÷���k÷Õ#GŽ|õÕWbÁo±X(¥2™¬“§7‰DÒîW%%%?þø£^¯³Z­ Ã8æ!4Í¢E‹>ÿüsBÈÂ… ýüünû3õ«§°áþÒßïâÚNÀÝ–JNþtŸ´kq!D©T:ôêÕ«‰ÄÏÏÏ××W죾A¥RùúúªT*‹Åòïÿ»  àÀ�Ë—/7›Í—/_‡µX,‡Þ½{·Édš5{ö²eˆinnÞ½gÇqr¹Üd2�=sÆÇÇÇqd$O�œ<îOúSZZÚ† mÝúï‰'ÆÆÅ‰½R›››KŠ‹³²²šššÆ�¿víÚÛÏ7 †Ë—.B.]ºtéÒ%–e}||&Mš4éŽ;! ÃÌHMÕh4Ÿ}úinnîk¯½6{öì… ^¾tI*•&&%Y,–ÃGŽìþúk“É4{öìeK—Šçy�Ãy>ã‘ç  8 †™:uêÔ©Î.˜””´k×.{Ã{‰D2iÒÄÎg7h—R©€nÆ0 !ŒD ‚@)¥´7ž †a†eY^(¥f³Ùl6+•J¥RÉ0·Õ‘�ã8ŽãzçS@�bF1äyžÒÓ_«xíI$‰D²,˲Çñ€n&“É,‹T*Ëi!—Ë¥R©ÅbÛ£¹þ§G)µ!¾÷ ‚ xò•)6£é�üB‡~Ìf³áQ¼ ð‚ °,ëããÓ×ÇâÌÇLJeYžçY‰„çy›ÍæÊVBoõ �ž&Ö yì•)6}ÛQöô;¢™d?†ª ð>,Ëpçããã™Å­=ñ "V©ÜrŠ.^AìUëáW¦Íf“J¥<Ïw×$AÖ¡CoLð>”R–e¥R}ª›Ó‹Ou.f�ô<Ï{þ•ioñÐÓo‡Ð¡Cqð:Œ8¾M_Fgħ:Â0.þzæC*¸EÅÁó¯Ì^m ¡C?†Ð¼ Ë2„�>éíæ:ñðX—Cü�zñ9¾_\™<Ï÷Â%çÑ'”þuƒvqý>ï·O,ŒûÅ•)B/\r}"`@s­^ÖŠ‡‡jˆW¦„à)úQyÜ� Û!t7 t7ô�С“Ü ÉdBæ ×ôƒÐ¡¦¦fݺuO>ùdnn®ÓKf³ùý÷ß_·nÝŽ;\ž¥]”Ò-[ÒÖ¬YóÚk¯9Mo³ÙöíÛ÷ñÇÿhii±¯yK]> °£”šÍæÛùN;g³ÙÌf3¾,€.èñ.N�:µgÏw·JMM]°`�Ø^´¥¥EœáÔÏÏÏiµâââÂÂB«ÕªV«ÛŽk³Ù~üñG½^ï¸�a˜Ñ£GGFFºr×®]Ûµk—Ñh4™L�?þDYYÙ»ï¾k2™:Ù„eÙ§Ÿ~:%%Å•ý{WÆ.½å:Ý5ê… ?ýô_wß}÷âÅ‹[5»²ÿ[¶…6›Í6l¨¯¯ÿõ¯rûG Ð[(ÏS‰¤óG>ÊóD"q³/€À ì-ö+ð<ãö~Á;õxèÐÚÚZQQáÖ,Ëêõ:û¯:�Îl6‡……9…ÇefµX,ƒž2e !D¾Û^f˜Íæo¾ù¦¤¤Äiç�?þ¸‹¡Ã¨Q£V­Zµy󿬬ó»v}9~ü×?E¿@)-((8räÈÕ«WÍf³F£¹ãŽ;î¾ûnÇÕZZZ¾ûî»üÑh44è®»îJIIq,µZí‘#G.^¼¨Óé ÅÈ‘#,Xe_¡¢¢rÇŽt³Ùìt Ë–-s£�RzíÚU©T:bD¢ømÚl¶cÇŽ=ú}CCƒZ­NII™?¾R©tÚ*;ûÊÉ“'ŠŠŠ CxxxjêŒéÓ§µ�)ëêꫪª†`_XS£ÍÌ\XXøÄO‰«µ´´|òÉ'â”qZ­vëÖ­ÍÍÍ ,�H$”ÒóçÏoݺµ¥¥E"‘¨Õj“É”••UXXøè£�Ž1B܉^¯+))i:8Å(¢ÖÖÖÂÂÂ���Áƒ#ÄãܵkWff¦ J¥Ò`0ìß¿¿ººú‘G±G<Ï÷Ýwûöíã8N"‘°,[UUµ}û¶ââ¢5kÖ8Í�[XXh2™“Ä�åҥ˻v}YWWÇó<Ã0áááŽ+[mÖòòòvgXfÆçЯc*=üé‡[ÏÕq„õÑrºúk'væg]¾ïÅçµÇÏÖÊÃý9ír+aU��Œ®äìWæ\_ó›_Î�ìx~hªÏÞúößWqDæ/QNA IDATägªÍ9üŵ¼Êç^}`ŒÆ” ÷¼÷—¯¯[ˆÔ/ÈßÖ˜|Û{9¥Oüö±)!=;¿x´bcccccÅŸ³³³OŸ>Ã0Ì�wNMJJšÍæ¼¼¼úúú¨¨È%K–Ø#Jizúöӧψí òóó_zé%BHpp°X°íß¿Ïh4FEEM›6M&“ÕÕÕ644¤§§ÇÆÆ:e¡.\8gΜ–––?ÿùÏeeeEE×·nÝÚÚÚÚöh Ÿ}öY…BñüóÏ�=ºªªJ¯×''��˜>}ºÓc®•JÕn.=???--�²fÍšáÇ»yþzPQQÑÑ£G¥Ré}÷Ý—šš*“ÉŠ‹‹¿øâ‹ÒÒÒ#GŽ,_¾\œ¿õûï¿¿~ýzTTÔc�=vþüù´´´#GŽ$&&&$$ètºo¿ýÖh4Κ5káÂ…�¦±±qÛ¶m—/_ÎÈÈˆŽŽOšÙlæ8.<<|åÊ•ŽÏèjµºíI«¨¨¬¯¯Ÿ:uª¯¯/!$''÷Ô©S*•ꡇ=zTEEå?ÿùW®\9}úÌœ9³ÅM.\¸xàÀ¥R¹té²I“&Êd²Ë—³¿ù y¼SÜÀqÜÕ«yjµzèС⒖–ƒÁ R©Äƒt:˜¨ÈÈuÏ=wS¼HIuuõ®]_B~6>RÂf³ét:Wj êëëýýý]™ôÒðÕ'·¥Ÿ«—ÆýìñG—LŒTK¨Y{a׆ ó¿Þ|xÜïEË!„¯9ž¶-Û ºäùuK’ü‰þÚ·ëÿúuöö´ã£^œÞA!oÈÙ½éH•xçc/=œ!·Öœùâ�ž:²iÏø×׌Ô¬Å?ßsݪ³ú¥'ïŠUñ�—v¾÷ÁÁ3_¤'�xjJ*/\á•W¦G7“lmm­¯¯7™L‚ ˜Í溺ººººÚÚZBÈùóçÏŸ¿ •J,X(“É–/_^UUµwïwÝ2oÏóÛ¶m}ýõר?{öl™LV]]]ÑFeeesssG;1 [¶l)*****Ú¶m[»¯}%!!á�xôÑGçÌ™#^¬qqq³fÍbY677W ­t:]VV–L&[¶lYxx8Ã0&L˜6mšÉd:{ö,¥4 àá‡^µjÕÊ•+5 !$((èž{îQ*••••ÕÕÕâ{Y,J©¿¿ÿ°›EDD85Jk+AHJÉ0 ÇqgΜ¶Ùl³gÏ=zÃ0C†D-^¼„eÙ~8k0!F£ñðáC‚ ,Z´85uºR©”J¥&Œÿío;aÂx§OÝØØTVV9hÐOÉÓ§O{÷Ýwÿò—¿Lœ8±íY’Ëåq±±Ã†µÿ‹Ž’——k±XfÍš5òF }‹çùõë׿ùæ›âý¡µµµo¾ùæúõëûK#YIÄœ'ž[ûð ϯš©–BEØ„%‹'ɾüÔÅ*±*ØVtbß5½øÁÅIþRB¤š \ÃZ¯8YÜAccÚtñÐñFªš¼úÓ",aáSW?p§š6;|±I<9ÆÜïV²‘+Ö΋UK#J¾oÍ]ÁŒáü�j05‡ ¼õÊôÜyÀ†™1cfXXøž={8Ž»çž{¬VËþýd2YccãÎ�;­VkBB Aƒ®\¹b0 Chè šššãÇOLštGRÇ÷ôˆˆÁÏ>û¬Sxñý÷G²²ÎGDD,_¾\©TÚ3%vuuu¯¿þzÛ(�eÙ¹sç>üð÷üDž6÷®8- fYÖd2Y,??¿òòò†††ÐÐÐèèhûV‰‰‰™™™EEE­­­~~~ÑÑÑöWE�F¬þ°÷L1 ‚ ¨Tª[N=g6›óó󃂂† ‰"„477—––úøøØÛ=BââbýýýµZ­V[WRRZUU:~|²ã®Ú}¯âââ–––™3g9e#\—�}%;;{ðàÁ³fÍòð�i‰D“��ýÖ[o½úê«¡¡¡í®V[[ûÖ[o566¦¤¤ôŸïŽ 9gæÍ‹”!A ©nlh¶‘ÂWäf5lØ„1QöVYäè a»Jj²r«– ‹‘B¸æ¢ 9 A£Æ �B[ò/æÙ¨,y¿g‚ñ>~´ìÔ9— [§ÞáÇXг/¨dÄ„‘!ö§LÅÐqɾ•^È«¿+"Ô£>=�·^™ž:B, Çq���sæÌÉÉÉg>ݸqc}}½ ×®]{ýõ×�¶2�ûöí6l˜}InnŽÕj5›ÍbIæëë;zôèââb›Í&VÆSJsr®BT*ÕØ±cÅFÇ"~…ÿù"%Ipp°½LÒét�7nP«Õ«V­+,V­ZåÔ\ÃY­VJ©T*?£V«å8.88ر²FüU¯×ëtº¶Ý^!lj]!Äâ™R*¦[ ECCCccS``à A!íÖïÔÔhµZíèÑ£Åf��MF£Q¥RÚ×Q©T���MMMµµµññqeee‹%""B¬àèÏóyy¹>>>]®92™LG�~ÏóüŒ3Ûm¨}eÅŠ„�o¾ù¦£{´ýî¼hÑ"qåþ‹Z-fJ¹R!!„ЖêÒ�Èb;¶?�„ Ž‘‘ªú²êVãÏðåÞsG /úóÿùíüH‰P[Ql£’ð¨0ßÿÜàuXÔ ÉÙêâŠ:á?¦±²ÄHŸ!ƒƒBÙ ¨()É+-¯µ‘P´õ¹5¯¼2{6thii¹~ýº½þ¸´´T–eóóóÅT3!Äf³‰ý'³²²~:,©tèС~~~eeeV«5""\£ÑÔÖÖRJ###†©¯¯·¿‹Ø:ÏÏÏO£ÑH$’üüü+Wr † BáÔ©Ó§N�WfYV„o¿ý6===88øå—_Žˆˆpý)•ÊuëÖÅÇÇB(¥7n|¨¨¨H.—�=zÞ¼yNõ‹---ÅÅÅ¡¡¡ááa];E……×ËÊÊÂÃÃÇ�Ûµ=@'nsp”åË—SJ¿ýöÛ·Þzë•W^q¼G×ÖÖ¾ýöÛ��� .W»ýã¼�=ÜA[”§§Œ<1>BB¡º-OU€æ¦v7J?†jô”ø3œ¾¡‘§„ò M-xð`]]Ý—_î|üñ'Üj–¢×ë !”ÒŽúìõS���—.]bYv̘1r¹Üþ�ÎÃ0R©”çùv‡l‡Óà8nøðá���öMX–Õh4#GŽ”ËåEEEååå;v¤ÛlÖ¹sçÚ¿>«ÕzõêU??¿¸¸8q‰xR©Ô1Â@|•ã8±ãÆÙ³g:$V‹ètºÌÌ̼¼¼'Ÿ|Jì¦!*/¯hll7n\ç-^;B)½té¢ÅbIJJv€§Ú¾ýöÛ·ß~Û~�v¼;÷—§ºÎ˜ N~_Ê3ê)SýBµš�arÙ͹ÌLJ!­³…B|=±’;V6sþp9!Ôf1 „0r§›ŸTîÃBÍf+%‹™£„ñ‘K�V‘3„P£ÙJS²Ð)/»2{¼Â‚eYûMß µm'f#ìË% Ã0:�®¬¬œeÙ˜˜ƒÁPQQÉ0LLLì¸qãT*•Á`¨¯¯wL?ˆî¾ûîÑ£G+ {Eû¼yó{XB¢¢¢.\˜––öÃ?Ž9jöìÙ.~œÖÖÖwÞyÇéºq:<ÏóG�­««7uêT×ßZ„8pPüÕ±iÃ0óçÏ'�NêíÄh4¾öÚkö_]ÙP«ÕŠ€-Y²$,¬‹ û{Nyyù?ÿùO­V;tèÐÕ«W;%„¢££5MCCƒV«£JiQQ‘Åb‰‰‰±w†liiùâ‹/²³³|ðÁÁƒoª°Z­ÕÕÕÑÑÑŽß{]]}SS“L&³÷p)))mjjºóÎ;3I��W¯^-..Ž‹‹½qÌb5„Xq0lØ0•JUZZZ[[g¯Œ¨¯¯7›Í¾¾¾þþBˆÅb¹zõj```llL×NÇqbóX___¯iàâõúï­Ù ×paëûŽTòêÑ?_÷ÐÔAN ‡$�÷ûîpååüº{†„‰§PŸ¹’g4ãGqèñŸ†�Œÿ°1ñÒ‹ù99E¦ £j6l.ÎɱRéˆ1ÃüBˆ"nÔ(ùñsÙ…úÔ`qC®âêe•„�†¿‚®ëïWf/}÷.\8š™IIJLtqÁ%%%û÷ï'„H¥RŽãvîÜyñâE×7gYÖ××7ØÁí<2 ‚À;¸å´^&“iÓ¦M™™™™™™ŸþyÛIúVaaá'Ÿ|¢Õjãââ|ðA__ßÿÏÞ}‡GUå�?çÖ)é=¤@HB B  Tš.(XÖµ¬®õußmï®�»vw-ëêÏ¶ŠŠ‚(Š@@D:ˆH' é½Ìd&É”ÛÎï�㘄�„ÌLfòý<û¸drï�3“sïýÞïiö‹$IB…‡‡gffÚíöœœ:R¦¤¤dÏž=¢(Ž7Žö‚4™Lï¿ÿ~nnnXXØŠ+’““]q8š¦mÛ¶íÕW_Ý´i“kŒººú¯¾Zg·Û ”œœ„"„œ9“ÇqÜ�!CÝ# A&L¸Ša˜íÛ¿¯¨¨DY,–-[6˲œ••E£™øø¸‘#G¶´´ìܹƒÛn·Ó¥Ñ†JS#õõ ÕÕÕIII=žŒA’$ú ôýÉ9@€qVÿ°òå7w”+†ŒÅ�Þ?3�uþLV BH—ž=-�UÎ}³v_­‚BJÝ�/¾9«° Ó²Ó.Dâöâ­¯ýÏoŸxí»zbbÆNË2 Ëîµó[BµžËY»«‰Æ\;&šA!:rêäpì8òåºcf !„œåÛ×n©Ôø´’` ‹~ÌY‡Ó§OðÁt ÿÍ tkÎÿêêê÷Þ{Ïl6GEE­X±âóÏ?·Ùl®«YYéñã?'ÆKJJ:¼—/]ºtÆŒ�¿Ñeóññño¼ñFûãã‹:Ü‹v¿ {Y,Y–ûÎ’ÅÅÅï¾û®ÅbÁ—––>õÔSî_Â�!Czè!�N7cÆŒüüü3gÎ<ýôÓ•••²,Oš4)##!ÔÜÜüþûïB¬Vëþó÷þŒ¡¡¡�?þ8ÏótLóöíÛãââ!555N§3<<|áÂEtÌ…Õj-**êpÆ…¬¬ÑÇŽ=yòäË/¿ßÐÐÐÒÒ2pàÀ)S¦Ð¯�ã¸n˜[ZZºoß¾‚‚:y}}}llììÙsh|SPP`·Û32F´™b²¢²òµW_u ÆA8pàÀ�¡Ñ£Gßwß}®íE¡¡�^o€áÀk´úýï¼øß£MBØQ°á…GÖ©nç)Ÿù랸&‹ƒ¯[6óÐ+ÛŽ|ø·?ËOŸ«—˜³–ÍL¹ð¤ä8»óë�búzwᵃFŠáðñ‹–8óÉÉ-/ÿédÆ�pKA^¹U3ŒZ²p\øÅ n9oéÄãoØûŸ¿ ë(>]lRø´…¿š‘CæÙÐ�®Š¹fÍš––A/^ìÞ®s„�ǯZµª±±QÅ¥K—Ž7.44Ôb±Ð^Šš¦åälÎÉÙ|©#ˆ¢8eÊ‹¥©Í4É®²}üñGG�£Égzó0 �ÌñÀ²l‡ –””:tˆN^D'0pý*$$dþüù}ôBhÞ¼y—íàM‹…>FB:™$;66öž{îY³fMQQ‘Åbáy~êÔ© , _”Íf3™L4æèð ÃÌž=;==}Ë–-yyyÅÅÅ!Žã233.\äšt¡²²ª±±1;;»ýŒ�z½~ùòåëÖ­;räHqq1˲C‡]¶ì6WׄPllÌý÷?°víçùùù555,Ë6ìÖ[EY–é’W´æôŒ,˲,Ó!6=>ÝEšªŠ-ô‰…¨²t©Ípðˆ%�?¬ûøã-§Îm@˜‹9ÿŽ;oáê")&�È Û÷£%lL†k-M~ÀôûŸÄ«W~ùCYî‘ „ ÉS–ܽtú·k yÕ�OªÁ®Ù^˜w¤a1nü-w-Ÿ3¸¯<ßðlè`6›÷íÛg³Ùt:Ý­·ÞzÝu×uëq­µµµ¹¹Y¯×¯X±bâĉ!ÚØAoó´%¢Í ÷ù A˜;wî¥βlFƈ�;w¹FêtºììÉ=XµL¯×ïÛ·¯¾¾!ÖfžÑÉ“'_uÕU¨ÝÄJ>—••õæ›oveËäääßÿþ÷µµµ---ÑÑÑî9ÿØØØ^xá²GHIIyðÁív{CCƒªªqqqîÙBH~þ×’Wíw ¹ûî»o¾ùf“ÉÝ~³¸¸ØGy¤±±ÑjmŽŠŠt�ÒL&syyybbbTTd›½þùÏvåKˆŠŠzþù绲%½ˆM¿åÕoéÊ–BtÖ¢ÿ9§±®±"c¢Œ¿¸¼ãˆ‰÷>3ø&›!6ÚmþHlL™þ›§²—Ô×[%.$&&Ll߈­põmwcC½ÙÁEÆD ß<:DEE=öØcë¾ürì¸q£F�êð®À²ì€øx§Óó‹L5ÆxêÔ©‡#%%¥Í¼ Ç ˜,‚ F�úy>àâââõë¿EÑ=žèÄСC-Z$˲ áááC‡uïÆˆ1NLLlmmMLLì<≈ˆ˜6mZuuuxxxVV–k&D—¾4ôÆø²Se\–^¯§³ƒ·a·Û """h¿‡K‰ˆˆpÏ4tˆvgió"]òjúôé02:Î9ÀØö ¸€5FèhX1#†Å&†uð‹Ÿa!8:¡åL��á�7úËR]  ºÀD(**~óÍÿdff®X±¢Ã&¡+¡ªêÇ|êÔ©ßýîá””A½{pлèxݾ?m] –ã¸öqj{�¯�ü‚ÃáPÅ/j&Çq:�ÎÓíª0ºø^SSSrrò¸qã{=n@9�N–eÇŽÛã%¯¸ëÓ‹nƒ~bìØ1cÇŽñÐÁ ÃwÜᡃƒÞŲ,]ú¯/çAi§`O„¹ Ï¢Ò/j¦wJY@ßrÙéR|«»ÅóéòÜ wÐû±_ÔLŒ±ª„~ æ4F#ùÉZ#¤‹' œ§À¿B/T9h°ðc Ãôñª @·Mc9N–å63wõ)²,cŒ5UíâÚ;O�À£èý¸ï×L†a Á\F_®Äôíë@—FóuY:¦(Цi„��ïôŠô�Ø÷k&ºôÔ…½ B?³€ƒ1–…eY÷5ÖûY–Y–UTcÜÅÐCƒ…ÿÃÓ[r¯™,ËÒ¢zúí Nû1žçá�cMÓ4Ms:�¾.K[N§“–�Á¸ëYæÒkÜ?²,m#î³5“a:x¡¯„þ ÖS†ã8§ÓI—É¥ë ö’$)Šâ*^×O=Œ1 BÿÇq!„çù¾Y3é*ƒÇ ‚à…PBÿ&4[€#‚Ínç8N–e‡Ãáó>†„‡ÃA»ÈÙìv᢮�eHATU¡¯ÕLWÁ¼ÓÑAè‚‚‚ઠ˲<ÇÙl6–e5M³Ùl’$ùd0‘¦i’$Ùl6MÓX–µÙl<Ç ‚Ð~}×Ëòγ ð(–eEQ¤�ø}§fÒDˆ(ŠÇuqý¦+]ôýÆ844ÔjµöÙ®¿t=d³ÙAàyÞµâ9{æé{0�Ñ’vk …¡O™‚ èõúàààž@E_Ýi@o¡5“No�1ömͤ�ªªÒE½™�†Ð!`ŒCBBìv;,´ÇqcI’$IâxžcYz•ôN–˜Þ0ÆŠª:[[1Æ¢(éõúßèAEQÅç¹nÐc®š©ª*íAk&òüÌ¡®jIUU†Ñëõ¢(zy}fÆØ`0ˆ¢èp8àÉ–eõz=½×:|4(Žaº¡N§ë•–AŽã†Q…Þl€?r¯™®9‘·Ö�@B†¡Éžç½?c)„…eY£Ñh4i…†kÞL9PcÚï¬×ç^c†æ–éìR��ðSôAŸ¶ ÐÿzáMiË)êÃ^n:&˜h€¾–·ð©Kdp'¿À €x¡ æ@7@è€n€ÐÝ}ô+wj€®]Ytdô?0ó @ÖÝYý ¤®dÐ �uÀÜ“ °\Hº²þùÿ «Ã•ƒ¬€€†;ü'è9È:UU‡$IÞY9€þ€aAt:˲½r@MÓTUU¥WŽú3Žã8Žóþêí:BˆÝn·Ûí¾.½ cŒfYFÓ4B!Þèé†1Æ3 £j!Äáp8½^¯×ë1¾¢WEQEñΧ…1Ö4�‚ªª"„<ýg¥u�eY–e†aFQUU9ŽãyÞ£oÝ„�€bµZá!zóÆ+Š¢(Ã0,ËÒ›ºGß—(š¦ÑsŠã8Bˆªªv»]Q”àààž€Á€AQE’$„�¯j¦ 4*¤^’ IDAT&˲¦i‚ xº.:ø=BˆÅb¡1/�„ã8ú€Îó¼O²²ô-Ë2ƘçyY–eY¶X,¡¡¡=¸F;�NH6UU%IòyÍ”$ cLÚZ­×ë½Sè&é÷ZZZ n†az«fÆ`0‚àý«3ºØËÁ`00 #Ë2ÏócUU[ZZºuŒ1½Óx¨œÀ›Eq:�}§f:�Nš„ „8�N/À;oBŽãœN'í�ÖõS�vqðdÑ€—hšÖ—k&íFã�ü„~L–ex”cFÓ4†aDQôuYÚE‘aUUiÓ²,Ë]ÙËk£B€§Ñ´>[3i×Ú�ÒÓïÝ$ý<Ê€ÀÃ0XQQûæíÖ=ñ@›T.» © tTm¯™²,sG£[�¾düŒÆ�‡Â0 ÇõѧÚ�žF]Ì:@j00¨ªÚ÷k¦«Çƒ§ßB?O3 à`:¿�¯‹ÑúTG§êÊö}ó!t �Å¡ï×L¯Í6¡ƒƒÐ†Á!ŸŒvë:Z¼®‡pžúï5SUU/T¹>ýEúÿº@wq{ŸáWŽÞŒý¢fjšæ…*×§¿@¿Bs­}ü^K‹Íý ÔÌ6 tô~t?ö£¢Ðë t@7@è€nðÞPBH‡ E„“ɤ(JPP�Ñhìâ¡Ìf3!Ä`0xm¡0 ¯…ÍÍÍo¼ñFdDÄÌë®KMMu�!šššžyæ™úúú›o¾yÉ’%]é‡RWW÷Ì3Ï˜ÍæeË–Í›7ïÊ‹GùìÓO·|ûmjjêþðƒÁ@_—eyûöí%%Å·ß¾<88u­�³�w¥ñ t 8–e»2[_Ð9¼EQ„?t——B‡óçÏæIR\||jjj×wìðVíz±“Éá1Ʋ,:tÈjµ¶y}äÈ‘ ]y÷³gÏ~õÕW6›Ín·ßwßýeeeÿüç?ív{'»0 óàƒfggwåø}JWæ.½ì6½5ê±cÇ?øà¿³gϾñÆÝïî]9þeûB;Ž·Þz«¡¡á‰'žˆŠŠºòÒà-DU Ëz ¡YS5æ2ÇÕT³,ÄÚy't�ey÷®]’$ÅÅÅMž<cœ——WQQAKo̡⢢mÛ¶ÑA7n!äùçŸ/--½Ô‘?ûì³Ï>û¬Í‹ Ã,_¾üúë¯w8›6m*))ióÛû‹¡Ãˆ#–.]úÉ'Ÿ9rô«¯Ö�3¶ËÚ?B ¶ïØ‘ŸŸïp8BBB&L˜0{öìÐÐP÷Íš››7oÞ|èÐ!›Í=ëºYWg_í~ ¯«­Û¾cûñãÇ-‹N§ËÈȘ7w^BâÏ_reEåÚ/Ö:Ž6HOO_°`A›9Ú!gÏæs7tè0Ȳ¼gÏÞ]»v666�Æììì믿¾M[!$7÷ÔþýûŠŠŠZ[[ãââ¦N½fÊ”Éíóõõ UUUC† s½XSS»{÷®âââÌÌ̹sçº"�ŠŠÊµk?w:�~� ·Þz«N§ëôkà i­åGvmßµÿȹêUŒJ휹3Ç Ð·½�kŽú‚Ã{ö.m »ú¶;®Ž¹|Œ¡Z önÜðíþ¼ZIˆ–}ý‚›®IýetNlerÖoÙ}²ÂÆ„§Oœ}Ó‚™#"=’ ~áCaaá©Ó§BS§N�ŒŒ$„øá‡�»vµ™ñêø‰ÇOœ ÿ KMMmsë†abccCCCUU-//§ëš·ÉBètô„»ÝNAÇcŒ¯½öÚÊÊŠ­[¿+((œ>}Æþð‡KMS[[ûé§Ÿvž“èSEÙ²eËÖ­[é«z½Þjµnß¾½°°ðþûï�ˆˆ ›577¿ûî»tɸÚÚÚÏVfn2Ï�;—eYBȱ£Ç>[ýYss3˲F£Ñn·9r¤°°ð7÷üfÈÐ!ô V«µ¤¤¤}èÐ៸¥¥¥°°0**jÀ€xZί¾új÷îÝš¦éõúÖÖÖ­[·VWWß}÷Ý®èAUÕÍ›7ûí·Š¢°,Ë0LUUÕ矯)..Z¾|y›r ívû°aÃiÈrâÄɯ¾ZW__OgŽ‹‹sßX’¤òòòWXÆ÷Á5ô@À±—nÿà?«×+ˆC"ÂKÃÙ}_ž;rrÑ“�ߘz1~&–ܯ>ürïé²&™ „Ø�ú°8±æ®~ñõíU âC#‚íu§·|öL壼=3Ä”Ø 7üëåõç�ˆ Ž•Mçö®ù×éÒûÿü›‰Qž]_ ôi$IÚœ“c·Û§L™²wïÞÆÆF†aÂÃÃ隦Y­VBˆ(Š®NÁÁÁ Ã�Æ|°ýŸÙlþïÿÛÒÒ2göì«;jˆŽŽvÿqÞ¼y3fÌhnn~þùçËÊʊΟ_½zuKKKû ~øa�N÷øã��9²ªªÊjµfe�‰‹‹Ÿ2eJç]2 C‡¹ôsçέZµ !´|ùò!C†tr/+.*ÚµkÇq‹-š2u*Ïó%ÅÅ}üqiiéŽ;/^L×oݹsçùóçï½÷Þ˜˜˜cÇŽ}òÉ';vì>|xZZšÅbÙ”³Éf³M›6mÞ¼y!!!&“iÍš5'OžÜ°qÃCÉÑ/Íáp(ŠwË-¿xF7�í¿´ŠŠÊ†††«¯¾:((!tútÞ?ü`0î¼ó®‘#GTTT¾ÿþ{§N�:pàÇ3¦Ó]Ž;þÝwßéõú›o^0~ü8žçOžÌÝ´icVÖ˜6qƒ¢(ùùgŒF£«á¬¹¹¹µµÕ`0ÐB¶)LbbÂ#�<Ú&^¬®®þê«u¡9s®‡”C!˲ÅbéJ TCCChh¨‡ºÑô:µzÿ𵇏”9÷ÝsÓ¸#KµÇ¾zë­mçÖ²}ô_æ'_ø²¥¦º… ‰ˆp6›[º¶¦nëéoVî¨ÒÂ'ýæ÷weÇ RÍ�¿ôþ;Vnó�å#èµX*Þöцó’!sÙï¸n�A5�øò_olûñãµYC;1 /º" k¦ÇC‡ýû÷çž:ÅqÜܹsEùæ›ojkk'ŒÿÊ+¯Ð/Èl6ÿýﯯ¯¿þúëÛw“LJJjmmms›—$‰Î¸)í½è²lXXX¯,R¢ªêš5«�9:nÜØG} !T]]Ý>å€16�î©ow­­­Ÿ~úiQQBhÍš5O>ù¤+<ò¹´ôôå·ßÎóüÈÌLúÊ ””éÓ¦¯ù|M^^Þœ9s‚ƒƒ-Ë‘#Gxž_¸pall,Bh̘1EEEßÿý�?þ˜ššv÷]w—””\�}5ýÚ#""æÞ0·   ²²²¦º&ep BÈétBBCCÓÒR;¿×ÒÖ MÓ†ÏÀ+Šòã�dYž={öÈ‘#0ÆII‰7ÞxÓÊ•þôÓÁ‰¯2�6›mûöï5M›?ÿÆ©S§ÐãŒ;fÔ¨Ìö5Ád2—••%$$DG_8“§L™|÷îÝEEE---ÁÁÁIÉIIÉIî  ¦ÍÍ-Íô•–ÖMÓ Ãe£:‡Ãqîܹˆˆˆ¤¤D„PSSSii©(Š®~¡””A¡¡¡µµµµµuƒ§”””VUUÅÄÄŒ“å~¨ß«¸¸¸¹¹ùÚk§µÉFt]nî©ÜÜÜL›6­ïŸáý˲ÌÍÍ}á…:¹FÓ«³ÉdÊÎÎöŸ¿–1ãÚ_¾¤�Š�À¨ÚÔØ$£�]m4SšŠŽ�nŒ1&5ŒCˆ4Ÿ;~F&|ÖØ¡Á¿ 4dÌHþ‡ŸNŸ(l¹zB0vço%ìбQ® A—::+è»ïK��i¸.¾ �)ú¹@­™ž JKK- BÈd2}·mBˆa˜3f$$$ü÷ý÷i.�&sB?ýôSUe%Ý1-=ݽ«ÚÊ;}Z’$‡ÃÑÜÜŒ 9rdqq±,ËC‡EBNŸ>…2 £F�¢‰�ö¹k„˲‘‘‘®{’Åbé¼sƒÑh\ºt)m°XºtißI9\Š$I„Žãèg¬©©Q%22Ò½±†þhµZ­Vk›¬¥ª* AoÏ„ÚW@§Ó™M&“)<<<*:ªÃö�ššÚÚÚÚ‘#GÒn&“Ùf³ †ˆˆp×6ƒ!<<Ül6×ÕÕ œRVVæt:ãããiG'TU=s&OÅ·Ùíö]»vªªzÍ5×öJ_Ð[–,Y‚Ú´iÓ¥®Ñ®«óüùóéÆþ‹HNAXÐëºÜá@-ÿîµç¾(QÙÔ_=ýçëX­®¢X&l\blÐÏ×YlŒMŒfVWÔk‚±©²ÄF°˜4 Â-Dà£9t¦´¼NF1Ð×çò²fz6t=zô®]»BCCY–-**"„¤¦¦Î›7¯µµõÈÑ£mžà++++/†í¥§§?ùä“ôÞP[[ûì³ÏšÍæ¥K—ºæuøñÇßzë­ö;jšöÃ�?8@dFÓ´œœœµk×FFFþïÿþo|||×?‘^¯ä‘GŒ"„¼óÎÛûöíï|—áÇ?ûì³] "„—«ªk0!���¡6Ù�N'Š" :«RYYÙÚÚâjÞ£¡Ã¡C‡~üñG:9Xhhè¼¹ó&O™Ü&€((8çt:‡Ï ¯[­VI’¢¢¢ÜÓT<Ï MÓÌf!¤ºº !sþ|Ñöíß ‚0räÈY³fµi_lnn...މ‰‰‹‹íÙWTXx¾¬¬,..nôèQ=;蹨g»/^¼˜’““ó /üáp¿F×ÕÕ½øâ‹&“iÞ¼yt³+/ç•áÊhµEg¬ ÃÇw9tP¬�&• ¢6š›U„X{S}³†˜È0£û6†F0¨ÒRßä@Hlj¨QÄþb“�p¹ÁÔL�èȽjfž RSS_yåEQÞzóMBHddä]wÝ¢iÚÕ“&uØk�ÜÑÜ,ËÒ<„+AA¸þÝᡆIJJŠŒˆPTµ  Àét2 “••µmÛ¶úúúuë¾¼ï¾û»Õ-ÅjµšL&tqÚ¢®ïØ÷™L¦'N0 3*s” ®ØæûÁs§ª*–Ò†,Ë?ýô“¢(C† qu†Å3 ’‘‘!BQQQyyùÚ/ÖJ²4sæL×ßN’¤üüüààà””ú -Çqî-ý­¢(tàÆÁƒ¿ÿþ{Ú,b±XvïÞ}æÌ™ø-¦A•—W˜L¦Ñ£G÷lRBȉÇ�NçðáÃCBBzpàiô¡-''çÅ_t]£Ý¯ÎþòT×GÁþ�¥*6Nœ8,¸Ë·nqØüûoQöÔÄ^{ý!";BXhsñã#D‰ ÖéP¢ÀµÙDÀ›C"õ“ÐáÊXÍôlè@o kV¯>vü¸(Š·Ýv[HHÈ©S§xž_qÇÝ:T}}ýêÏ>£÷‡ÃÑÚÚŠ:räH}]Ý ¶®îRÑÖ¬Y³ÜGX „çÍ›·jÕªŸ~:”‘1búôé],FKKËK/½äþJ_Á½ëTUݵkW}}ý€Fg�îdËÎ’Nžõö¬}ÍÉ'öîÝËóü ×ßàjŧ�Ú|FMÓèô í³5555ëׯWUuòäÉ´Y‡â8ν{ÇqS§L=|ø°Ùl.++s…t6§aÆ»ŽL‡c(ŠâÞÉ”ö¥@‰¢H‹�1ž0a²eËèŽ3g^W\\\PP`±X"##B6›­¨¨(222!a@Ͼ¢ššÚ¦¦¦àààøø¸Ëo |Çu�¦h„�?^�;d+ÈùðëB™0wÙÌA=ìé‹Bˆõ!"µ¹€©²Dbt:#^б)’ÜÑ&X§ã!|©™ž :´cçNz•§AÍZ‡††¶47›ÍæÇMˆ¢èž OII¹fêT×ÓgiYYYY™kG�N7*3Ó•6 —í+çÚqÁ‚………ç�;ÖÅö!ƒÁðÇ?þ±[}üBIqñÚ/¾�$éÚk¯u¥0Æ´ÅÁf³©ªêêî I’Óéäy¾Íre‹eÕªUõõõééé³fÍêü¹Üd 6›Íæ&3}EQ”¼¼Óz½>==ýçÍŒFžç�N§{•PÅf³1 Ʋ,íª©×ëÝ;dDEEét:§Óiµ6ÓСªªº¶¶vüøñ=nk¨¬¬t:�‰‰‰]\§ ø�ë�üöêÜž\wà“·7+|êÂ{nzE}®±>4܈‘µÉj#(Òuª’VK“†˜àˆ!&$"šAefk«æ¶Ê2±5[4„ÙÈÐ z 0j¦gC‡áÇÓ{Ï�ôôA))ƒ JNN !„¬Y½!”œœ|óÍ7»1«ªªÖ¯_ßæ.>nܸqãÆ!„!?ýôÓ±ãÇÝ:;äÒeË:éî^VZzøða‡ÃѦwEZZÚÂ… cbbF�½fÍê^ûØþ¦²¢âÕ+Ífsffæ�7Þè~މ‰á8Îd2Ùív×` “Éät:ÃÂÂÜ¿óÖÖÖU«VÆÄÄÜvÛm޼pGS ÃðÜ…¿¾Åb)//���w͸€Šˆˆ0 6›Íb±º&¸t8‹E„¨¨(ŒqBB"Ã0���Š¢¸êÇq Ã(ŠB«!äܹ³Š¢ ÞöBHUU%B(,,¬Ç;�7¹.Ê~zunC5_óúlD“î~`îà+�‰Œ�NÈ¡uUõ”äŠB Õµâ&D±áÈE\j¯¬µ�¡®ðBm¬©T›œÃ+z*j¦gC‡˜˜˜ÿû¿ÿ‹ŽŽn³‚QKK‹FBÈh4fee¹r7nì° ÀáplذaË–-²,ÇÆÆZ,I’’’’êêêŽ?þì³ÏÞu×]Þ4MûnÛ¶ï.®ŽáÞ5c|ýõ×£®­‡IÙl¶§žzÊõcWv¬­­Ý°aB覛n¢³*õ)åï½÷~mmmjjê²eËÚ MJJ ill¬««s­zþüy§Ó9pà@W‚§¹¹ùã�?ÎÍÍ ¿óÎ;Û Z‘$©¦¦&))Éý¯ÓPß`6›yžwm\ZRj6›'Mšä>»sxxX|||~~~qqqJÊ úbyym†  iiiƒ¡´´´®®ÞÕÑÐÐàp8‚‚‚BCCBN§3???<<¼ýŒ]¤( í0\žÿ^šÛP�­~í­•ªq䯹óêèž^¹î؈CÓ2sÇÏ�>]d;òÂ%ØQ|ú´D¸¡™i¡!¤K1BØ{¸ ·Ð:52”î¨T䟴6vô�X8 zÎßk¦gÿö,ËÆÄÄ(ŠRTT´sçΕ~øÔSOÝ{ï½o½õ–,umªT„TU=|øðÓO?½aÃY–Çde=øàƒ4cë몫«“’’z<ƒ$Iôèû“s€ã¬þaåËoî(W ‹½fëü™¬võ¹Ç^¼õµÿùí¯}WB¯BLÌØiYdÙ½vc~ A¡Ös9kw5ØkÇDÓ)*CGN�ŽG¾\w̬!„�³|ûÚ-•Ÿ6cB¬aÑ�y6ë°k×®M›6ÕÕÕµI$ØívÚtmµZ:äJ2×ÔÔ¸÷†s8G�ݶm[AA�¦i¢(Λ7ïæ›o¦!Œñ¤I“âââÞÿý’’’={öþôÓ¡I“&Θ1Ó}iï¥K—Θ1£ó¢^6ÿÆo´�ðEî%ËrSSÝËb±È²Üw–<())~ç�w- Ƹ´´ôoO=åþ% 2䡇Òét3gÎÌÏÏ?sæÌÓO?QYY)Ëò¤I“†Žjnn~ÿý÷é¤V«õ�7Þpÿ †††>ñÄtœgNNÎöíÛãââ!555N§3<<|ÑÂE4çdµZ‹ŠŠbbbbÛ͸�•5úر£'Ož|ùå—âããZZZ8eÊúµswà sKKK÷íÛWPPWUUU__;{öߨíöŒŒm¦˜¬¨¨xíµ×è\aÔ�8€=zô}÷ÝçÚ^Qúèõz^¼F«ßÿ΋ÿ=Ú¤!„^xd�êvžò™¿~á‰k"Iõ¶çÿúi�Ûe¶tíÿýz-BÍùÃ눱Èqvç×'ÄôõîÂk�Âáã-9pæ““[^þÓÉŒ!á–‚¼r«fµdá¸ð‹Ü8rÞÒ‰Çß>°÷?)6<ÖQ|ºØ¤ði 5¥ë3J€äñ5,jjj4McF„¤¤¤´ÔÔ´ôôôôô­[·"„*++ß~ûí6»Ð|µªªë¾ürË·ßÒÝÓÒÒ–-[6lذöWíAƒýå/Ù¸qã·ß~ëp8víÚ�›{êñǧ nY,MÉÉÉí ¦ªêÇtôè1š|¦7£ÑÐÉ,Ëv8bIIÉ¡C‡¬V‹$ItׯBBBæÏŸÿÑG!„æÍ›wÙÞd±Xèc4!¤“I²cbb~ó›ß¬^½º¨¨Èb±ð裻dY–e™±éñAè.ÒTUl¡O,D•»š¬mOL‘¶ïGKؘŒ„‹yW~ÀôûŸÄ«W~ùCYî‘ „ ÉS–ܽtú·k yÕ�OªÁ®Ù^˜w¤a1nü-w-ŸsÅ]-€Ã7nôܤÙEEE;wìHJNNKKKJJrÝ• !kÖ¬ÎÉÙÌó<íýNɲܨØÈóüc�=6zôh»Ýþî;ïTVUÍ�;wòäÉ®ÝkkkŸyæ³Ù¼lÙ2×l’¡ŠŠŠ�7œ8qòž{î™0aÂe‹wðàÁ7ß|Ó•Ñét¿þõ¯§L¹°~’¢(¯¿þškù«N_¨­­}î¹çêëëBaaaO>ùd›[M±ôúzhtªGï „ÔÕÕµ´´DEEõ8ço·Ûél•îÙBÈ×_½sçÎûî½/sTæ¥v7™L&“9888&&úR5¶±±ÑjmŽŠŠt�Òjkë^{íÕøøøxz8öe´çlßÀÒÚÚªiÇqî—¯Ké|®zoR[ëkm†Øhc› ÍÙT_o•¸�˜˜0±ãFl"57Ô›LPdL„¡æ貺~Q39ŽÓétž~ÂñlÖaðàÁ>çaŒccãFŒ‘œ”tË­·º®æÕÕÕ߬_¯i½9éõúzˆa˜6Ïú‚ ¤lmnvîD%&&þö·Úl¶.Î8tèÐE‹ɲ,BxxøÐ¡CÝ»1bŒ[[m‰‰‰�‡VÓ¦M«®® ÏÊãš ÑÅ/QíÆ$ñ'¯ IDAT866ö »yêõúÄÄÄö¯Ûíö‚‚‚ˆˆˆ6ËhµÑæ/ÞíÎÒæEºäÕôéÓ!nýkŒÐѽ�Ãb;^û÷",G'ô¡œ)ð1Ïf€Gy3ëàQÅEÅÿyó?™™™+V¬è°IèJ¨ªúñÇŸ:uêw¿û]û¨ô)�u}dÚ€Ñ5À÷ššš’““Ç�ßëqBÈét²,;vìØ¸8˜z�Ç»IpYcÆŽ3vŒ‡n0îèæ‚)ÀWX–¥Kÿõå<(íì‰0ôY´BúEÍôN !ëè[.;]Šou·x>]žôz?ö‹š‰1öB•ƒÐÁ�Áœ† ÀÐkŸ_\  !]<á< þ:x¡ÊAƒ…c¦�Weº…²¬,Ë�Œ…ö9Y–1ƪªvñí�§@àQô~Ü÷k&Ã0Ð`.£/Wbz€öu K£ùº,SEÓ4âtqÐ5ôŠô�Ø÷k&ºôÔ…½ B?³€ƒ1–e™&|]–ŽÑ⩪Š1îbè cLoÉ}¼f²,K‹êé·ƒ:íÇxž‡`h3œ¦iN§Ó×eiËétҲѫsC‡NÖ¸~„eYZ9ûlͤÓ'z§¯„þ ÖS†ã8§ÓÉqœ¢(R—××õI’Eq¯ë§Æ„€ã8BÏó}³fòL¤iš$I6›MÓ4–ei@#Bûõ]/Ë;Ï‚À£X–E‘>â÷�šI!¢(rG×�öè¢ï÷0Æ¡¡¡V«µÏvý »èè!›Í&Ïó®ÏéØ3O߃錖´[- }ÊA¯×÷¬¢(úêNz ­™tz{ګׇ5“6R¨ª*Š¢(ŠÞÌ@Cè0Æ!!!v»Úƒã8Œ±$I’$qG[šUUõN–˜Þ0ƪª´¶:1Æ¢(éõúßèAEQÅç¹nÐc®š©ª*­–´f"ÏÏꪖ4p¡“‹èõzQ½¼>3„cl0DQt8ðd˲z½žÞk‡OÊÀ0 ]‡P§ÓõJË Çq Ã(ŠBo6À¹×L׎È[ëG ‹“™ÒdÏóÞ ¡C@aYÖh4�FZ¡áÚ†7SÁ²l¯Ï½Æ0 Í-ÓÙ¥ á§èƒ>mA ÿõ›Җ:RÔ‡½Ü tL0Ñ$}_¿š-Š>–ûº wô£Š À§B�b :𠙆€¡OÀíþ� ’ Ð" t`×ÿASEà€Ð@oƒäB@ƒ ½ª³¸zJ\©Ž¢ˆ4X¸"�¶N�.mü dô*H7:È:èÈÈ:èªžÆ oÐ :è’»Cà‚Ѐg@ô  tà1="a˜TUQUÍét*Š¢i𝋀Ÿa†ã8QY†a9¸Nð pJŒ±¢Èv»Ãét"„†a†eYŒ¡{3]E!„(Š"IBHE½NDÏ`hàd(6›Ín·Bxžç8Ža A €žÓ4MQ§Ó)I’^¯×ëõ¾.‘ÀM´¡C€ „Øl6‡ÃÁ²¬(Š�fàÊ1 #ÏóN§Óf³išf0úÕÉÕ{2žJ„Ãáp8<Ïëtº~uiÀÓ0Æ:�Žçyz–ùº8Þ×p):I’l6Çq‚ øº,&A8޳Ùl´ègX tð{š¦Ùl6†aDQôuYd¢(2 c³Ù�;aÀ¢X�ú:ø=I’EE.gxÇqN§Óáp|—Ih­�€¬ƒßs8t º¯ @ࣗèàçæ±¸’¡ƒSUEQˆðŽãEQÅ×Àg tðot¦H˜¿¯¡§›ªª¾.HïÀýÏcoÜrü›¢¨B¼èBèó»ƒ~ n9þ�>úÀDx =Ý&ë@@èÀÃàé&°@è€n€Ðú/õ/õV0I”¿òFè@inn¶Z­Ð:zU'“`I’áš@_å4À™ê¼1@SSÓßÿþ÷¦¦¦Ç{lôèÑ¡'N”——k—袒��-BCCCUUU‡÷‡àà`žçÛÿ cœ’’Ò»Ÿtˆ˜Nï:éH:$%>˜§/iöúÂã',É×NHà/±—ó캗×Õ¿añÂ1Ñí£WµxýŸÿ±¾)û±×~“u‰ûHÓ™Ík×íªqß Ó íßš»æoïžMžvËòEY‘�Z �€(!@ø`*!BÈáÇwîÜy©Ð!99yìØ±‚ úè¸qãz¿è -©h×§«6Të&ýö¹û¯ Å!D,'Ö¾þîa4>(íÁIáv޲�=°ç|!;Hêé]‡&¦„Ø¿:°ñ�ÕÉùõ¸6o#WìݰÇÔ*$Ç%„CÜ@](ý�/g!ÌÈȘû !4`À€iÓ¦Ñím6[YY™Ùlöè‡ògjÅî÷>Ù|¢ Î®„�2£MΆØê Oåæ¶ ¾x4¾ý´»¶sß®;Ø‚ŒãoœžæðÉ3n�õÃË[v}üEæ_ïóˈ@­ûaí7çd‚Põñï«�Ó¹!‘S¯»|è@ÌÇ×}¸ñb™I+‘fþáÓ·”£Ñ®šLšKŽœ²!ŸÝ´²è‹\úì×&³—9> MMM3fŒN§ë|c“ÉôÕW_]{íµéééÞ)¸R~ɳ¡ÃÖ­[W­ZåjSx饗†Y¼x1ý±²²²²²²“Ýív{II‰Õju8¡ÆÆFBHyyyPPPhh(�BŽ9räÈ÷½Ú?dœ;wnÕªU¡åË—2¤—>œ?"­ e Š!‰éìÁŸ_Õ‰Wߎ„ýH~~þž={hî᪫®ê$zhhhXµjU^^^kkë#�<¬y�èÁù²ÁbêÔ©·Ür‹û+?ýôÍ%PÕÕÕ¯¾újKK ý±®®!ôõ×_ýõד&M G <833“n IÒþýûm6›{MlmmýôÓO‹ŠŠBkÖ¬yòÉ' †úÕõÜÐÅÏýk1BZÙ¦¿=ýeEû ˆ½µYCLä€AI‰ �¤n5óñµl®Ðø”›o›žØA-2¿qŬ“ÿüöàÿ/.âñ›Ó�!DšŽoÚ˜ï0Žùõm3†Ä¸ßȵòc6o*ýE0SudkÕÅó#¢¯�>$8æšG_¹JíAO+,.Õe¦ÌÌ̆††�;wæää „&L˜Ðá2Ùuuu«W¯ÎËËKJJºå–[úgÜ@Ï(}òþø…φ“&MJMMµX,}ôQssó-·Ü2dÈ�ˆˆˆõë×#„Ž=zîÜ9÷í;\ÊÖh42 #I’(Ї#$$Äd2¹~«Óé"ÂÃé¿ív;Ëvöd £C/G±·ØbBƒõ��ж¢œ·ßÞY­ CÝ9'Eìx#ãð÷/.~þ‹³Þx/ø;3QD8lìœ9#«—l~í¯[Ü6åGݺ,!l¼ê¶§'2ZõÞ÷VýÐ:|ÑCóÓEb9±ö½o/$§X1(X­:s®ÖÙ>|à£ÓG$a§¥ÎlGúð˜PI9o~�'Ž_úÀŒ$hÂîg‚‚‚¦OŸNÙµk×æÍ›1ÆãÆ�kóØP[[ûù矟9sfàÀ�wÞyç€|UÚþ âåÙÐ!,,,,,Ìl6s‡1NLLLOOwuwhmmmmm½ìAÒÒÒÂÃÃ‹ŠŠRSSóóóçÌ™C[¨¼¼¼¼¼<÷íÛ4X�ÆeK—~²jBhÙÒ¥ý8åÐÄaoÕb‚ Œ¥ºÔä`ƒ#£#CD÷Û®bÊ]ÿÎÛ9gȘ¹xé䩹YºÔá"²—.>óòg¹ÇW½øzëï˜?4DL¿ùá»ÐÓÿow«d³´ÊX0†8ÄK´IKˆ4lx:«êΊÙÓ‡®'�õÁîïOÌ'¿xcMq»�‰[ø·gƒPÙwÏ?·ÏûóËKÒYb¯?›wÆ0¸ƒ@ôAAA3fÌ@íÞ½;''‡2~üx× ººú‹/¾ÈËË8pàòåË|ZXßs?Kà–:烋–––o¼qþüù�l#˲{†@UU–eiçgZ§†4p (Š¢(&&&æççsG[49ދމq?Ú°áß}öYO|Ÿ#u{7·Ý~]s´4k©?½ó‡}N'Aa64mÚ’å‹&'0BH.ÿîÍ眗DZ¶ÜÏþþØgÿg\Ê”£NíÌ=»ïÙì´ñ‘ æÓ<óÊ%oÕÃ/ï4ÎyìÅE©,BZùæõí>Î/>ÚÅÒÿrCçß7oÈ…ÖkéüÖw¾9sa‹ !º¹ÛÎÝû†@`0�4÷°gϞ͛7#„Æ�¯Ó骫«¿þúë3gÎ 4hÙ²e4ßÐõZÒ““€â½ÐAQ”œœœO>ùÄjµÚl¶KMê@………ýõ¯¥ÿ–e¹¡¡!$$D÷m¢££†1 3gÌ())EqÉ’%QQQü ��0�1iÊ I^,?�s°REH«/�i=½ý+íFXÏ7©i²Ón·³šCÖBªÓa·#âpvÐAEúé�'�¹ºµhò%ÛL@(((hæÌ™ã={ölÚ´I³Ùœ’’²dÉ’¤¤$ˆè.φ{öìÙ¸q#M00 “šš:qâÄ«®ºŠ¹NJJÊÎÎ^·n]NNÎèÑ£}ôÑ6Ýè°I’'Ož¬iZ]}}II‰Ùl®®®>þ¼¦i---®!çÏŸ§o¹‡ž¢§ºÿwõœ©�mnÌ=^Ø2q|pј\[^¢ .5éc&�,9 ÂŒ^çÞ�RmÌÛš³ÏÕV-:°¹!ÄÆ�ޱlû×ÃÛ\Ûxû‰ÿÝvx9ôªÌØ ¯ªõ§÷ž¬ëö'ý �B{öì©­­>|øÂ… !n g<:¤¦¦%''+вhÑ"º†ÅÁƒ·nÝ:räÈI“&Ñ-­VëñãÇ9ŽÃ ‚�–žNó¡aÆÝ{ï½4¸÷Þ{�>üú¿ÿ]VVÆ0ÌĉçÌž]]]½êÓOyžÿõÝw‡…‡cŒƒ‚‚ åÐ[¸Èø5¨õ�Íu:(U§[7$cð/~Id‡� l4êÜ/Íâ�›ÿú�9!¥pãó2\ó›Çf%³aÓÁwΜfCãE0q4”V6iƸAqA ’›*ÊÚ&¸Ôi·.w±Áâć t—c4gΜI©­­�9sfrrrç²—âÙÐ!++ë�7Þhii¡Ë_Ñ !t&¨èèhQ¼ðHZPPðÊ+¯ÐÇÆÆþío ¿8ä2//ïñÇosäøøxŒqLLLUUU]]!DÓ´êêê–––eG^œé\9¢ÈA‹"ßQ4æ,úé‡j�Ϙ˜ùËIŸ‰ÃÖ¢!&4èÃ<CT‚!„k0ƒ0›˜˜È"¤‘“¡�Éwýé–tV-^ÿ—g¾iÊúÕ“÷déIãÞWÿôA~›wUJÜüMÅ…¾/Juqû©.hÏh4^wÝuŠ¢AÜСޟ¡©³Ã‘®lú φÎoµZiK„ÉdrMä>xð`š< sß‘eYW!¤iš¢()))#22þûÁîÝ-?_»!¤ÓéžxüñÈÈH×ëµµµ6l@ÝtÓM±±±½û i­,³Ç Œro -¥ù%*b"SÚÎ'‰’«ö~³£…M�96ò—¿%­V“†˜°`c—. ±ÓŸ|e á í®æ8rêãïLAè—i$µêðæõ‡Ý·ƒ´3è÷ŽV€žñêàLzí/,(¨­­Õ4íÌ™3G&š† é|—óçÏÿë_ÿrÝ>¬V+Í4¤¥¥Ñµj Ož<)Šâ¢E‹Úw�”e¹©©‰îb±XdYî·¡ƒ”ûÑ£¯ìrüü‚ºÿßîG!~äÝÏ=‘�¹à0Îtì‹�ȉIMO Öò¢Ú…Œ^vçŒ_N7­µ–íÿü�OöUk1×üúŽÉíV¨TjËÎˈKÕq“%'AĺÿíÿÛbjÒØØše‰y);€YŽ.F“*÷s®‚IžñГ3º|€‡Á"�ȳ¡CeeåÆ�[[[- ƘB§a zðÁËJK?[½š®LQPPðꫯº²ãáÆ¥¥§#„¬VëÉ“'Û¹°°ðÅ_T!äp8ìv»$Io¼ñMN‚°dÉ’Áƒ#„BBBnœ?åG!„æÏ›ìÑ�ìǸÈ1Ëþø�Q{¾ývûþÓ'jB˜1 ?gñ’ëÇĺæÔPš+ÏÚµyÓγf�OšþÛ‡—Ž cBÈ^zpß¹V^ŽQªî¬Ó˜ÈÔ¤ðŽ®ö²½;ŽIˆ³I|Íí‹æNɈézÜpQZZ5–‘,v‚�+5AZkŠªš f�TÙ¤!Ä2páÀ— z8ž BBBÊËË‹‹‹B hiiÙ¿?Bhö¬YéééC† ILL\½fÍùóç­Vë±cÇ~.Ç]=iÍ4¤¥¥-¸ùfWTQPP°þ›ol6[~~¾$ý<ž_UÕ‚‚úo�Ngs›â:{òä W]…rï3Ñ ™wþ¿ïì|“¨×-1óÖ³ÙÒ*ó¡1Q!Â/ Zã±Õ¯¼}ÀD˜Ðaso¿}þøW7H][´nÕ�®YŸqÈèù“uTܵ¹‡ÏÙØ¨Ñso]4klrPϺ«aÜ|샿}FÒÄÁƒ"hI1ÛtèÝ—·6ÐN0LxÆàv9€wAôXðÆ�³³³=4”‘²oïÞªêêˆððQ£GÇÆÆ�ÉË›5{¶ûÔ�uuuÅEEV«Õn·Óé]A¸:;ÛétnÞ¼96&fÎõ×»ºC766œ;Çó<Ïó—š cœ2xpH0477;¯öü"Íyßm¯K˜tUFœ�ió›²ã§Ë[$Y%¬‘˜6$9ô±šTy"WK›ÔaG­öàÚœ\Ç ·Í,´ý%±œÝ½ïœ-fÌuyóéí{ÏÛY1(*9cÔ°Ø‹QŒTqpëáj� ¡1)#F¥E¶; W¢µµU§ÓƦÍ)èÁU4/yPˆ)ü�gCài>è÷#tèð¢¡è ,À·.u»öÔm¼íq!\ðoÐìßh;,â€×ÐÓ f”ê* qB‚ÐÁ¿ÑëWçË�z=ÝX?_üÂKO4(ÿ®ý€‚Я ˜Ó r• Ç ¯ƒcY–eYY–;œˆÐëdYf† ˆ3΃�"A@ƒ¬ƒcY–ã8º®‡¯Ë@àSEÓ4žç¡¯èÏ tðocžç9Ž“eÙ×e ðÑ Ïq�1 Ýã] ´‹&üÇq<ÏkšæZ†à N§“¦¸þ=/m·Aôp tð{4ë ÓéEqŸ™Ћ$IRE§ÓÑ`Ý×ÅépO=¡C �aQeYv80ͽˆâp8dYE‘eY÷Iô€�.p�òo:–eéEM¯×kšf³Ù$I ˜!døŠ¦i’$Ùl6MÓôz=� ƒ$�0¾ ‹‹‚J’d0Eq:�tÃ0ãÀèÒ€wB!š¦Ñø[EŽeÆ‚ LS…‹ï. 02Ô�Aè8xžgF’$–e�F#±©ª*¤è.†ah2�Á˜ Ä@¾7:Úf!Ë2�æ!Àeð>†a©_$½B‡Äó<Ïó„UU¡Ë$=ƒ1fYûhB‡€…1†Ù©—âÕ˜ˆ\êý Çƒ_‚èø¤ü„ÐA7(Ðc:@?Ñè ÿ‚èô„èÐ :  t€~�x¡ÇCg0¡»…ÿ�ЀÇà®LÜуŸ�‰Š ÿrÝÖ}=#´¯ßtd Ÿ‚5èÈ:ðyáë÷ÝY¾qƒŸ�¬�qõ€„ð €@è˜TUUUÕét*Š¢i𝋀Ÿa†ã8QY†a¹@¸Nvxã†Û:è™@8%€ ÆXQ»Ýît:B Ã0 ò,Æpe «!„EQ$IB‰¢¨×é#€ð¸ä48ŠÍf³Û턞ç9ŽcèË@Ïiš¦(ŠÓé”$I¯×ëõz_—ÈOt5n€øÂ_Aè !6›Íáp°,+Š"¤¸r ÂÀó¼Óé´Ùl𦠆@:¹°'&c‚¸¡€§Òáp8Ïó:�.�.møÆX§Óñ š#<­ú7EQ„xÑÅÐÁ7ó»wrS&�þØù¾t „þ�>úÀDx =Ýú`ÖÁuðqk\�ú õí;8 oúvÁ¥A¢Ý¡º¡o…�LjD‘eÙ›…@{^êë@Qåÿ·wçáQTéÂÀßsªª×ì $! Bd ²O"" ¨¸ ƒƒŠ¸Í¨ƒÞïÎÌ¿¹ê8s�Õ¹Îâ6*(²(Š ˆ¢ DÂ�DH Ù“î®îZÎý£ $é¤Ó�¤»zy�Ï#é®®:ÝUçÔ[gEÑår9‡Ãa·Ûív{sssSSS]]]]]]MMM}}ýÝwß=}út÷=8pà�7Þ1bÄâÅ‹“ìð%žÛ»ãx“)uôµcSÛÎÆ¯VØú]¥�ÛÁçNå4vøuS³£±ìC¨gB,ï„XrQ"tÈÌÌŒŽŽEQ[ÚQ[¾¶¬�üd IDATººÚét¦§§O™2%111!!!!!!11Ñ}I:I’Ö¯__RR¢ªêÉ“'ûÛßz>\\\ÜSO=•ššêy³ˆÆ\¢È€,¦öí-*Ct”©ãG”‹G7oüÒç‡ùawO¸CpZ§÷s´Ûív“ÉlS¤ô,ãè–Ý0ŸG ÿ†v»ýÀ�¢(.X° íë’$}ñÅUUU‹ÅjµŠ¢xáÂ… .´n`2™Æ�o±X$IZ·n]~~>!¤ÿþÞ”111Çõý— +.Ñ΀D[:DÌakf@c£-n(Ÿ–»ô§Ã;�ÇuŸœpÐ×.œ?*¦}éA,ÑÁU£ÈÐÐаgÏžøøøk®¹Ædr …Û«««{ÿý÷§M›–��˜ä!Òü:466®]»¶¡¡¡« ŠŠŠŠŠŠÜ_�‹‹:t¨Ëåzûí·÷íÛ™™™3fÌð:BRSS¯ºêª¯Ÿ:ujõêÕ°xñb÷w#s´4ª@c¬¦ö7zÖÒP«��µº=>p‰WMê´‹‰\±ãëR‘Ñ”™‹ÍiõSŠòMQQÑ®]»´º‡I“&yˆjjjV¯^]XXh³Ù–-[$¬E"|…“5D ÿ†V«uÆŒ6›­Ã몪444 0`äÈ‘�~Ðjµ9räСC„�ììì³gÏ®X±Âóá(¥3fÌÈÎÎn›ùm6Ûš5kJJJ`ݺu¿øÅ/,–ˆïè²5‹ h\Œµ}�€£©ÎÁ—åmîwžÛþÖúã"˜¦Ü>oÆ (hŒ=º¦¦fçÎ�ü1Lœ8±Óe²«««×®][XX˜‘‘qç�wIÜð§aþ bbbî¼óN»Ý¾zõêêêêÖ×UUu¹\`³ÙÊËËÛ~$**jñâÅIII�——W[[K5jÔóÏ?/IÒ¬Y³222Ü$IÒÖ­[/^¼è9=A8w¬.˜­¹QbŒ‰nÿ$¦6Õ^T€ôOŒõ®�©Úpxëï�r2 B\ŒP[rÒ³’:vVAHQQQ3fÌ`Œ}ùå—[·n%„hm m·©ªªZ¿~ý‰'233ï½÷Þè•ÚȃqCh D7IY–KJJÎ�;çþV}}}}}}ÛWâââœN§öoBÈ-·Üeee ªêþýû�?î¾EQºvaµZ-Z´jÕ*X´hV9€ÚTS©¨/Ö+Ãû]é"ÕT\P€ÆF[¼È׬åÔ–W^ÝqAaÀ§·½ºïðçàY÷,]0)ÍŒÒ]TTÔõ×__}õÕÇÌ›0aBk PQQñî»ïfff.^¼8--M×Ä"J·†¥ô®»îÊËËQ_~ùå3gÎäåå-Z´H«$üî»ïÞzë-zøðáÏ=÷œ?ö¬;v™OŸrÔ]lR�Ù½óÖŽÁËnH»TO ÖV”I ”òóÕëç±ò@i<±ù¥·‹¦¡×d5>VkΜ™‘µæßköÜð—Šs?ùÙâi½iý@È�¢¢¢fΜIÙµk×G}d0êëë|ÇwdddèXn„CÖèáwh[g?C¤ è¢Û‚ h�œµ©Z€ã¸ÖnÏî“AµJHH¸ë®» óóócYYYS§NuÏðÚàLì#Ý WùéSð#‡^3m„µ¸äµo·¯ùdÜ“·:_x¤™!Ôó{–ÍÉÔîêPí‡?ß°fóáZ…ÄŒ˜·téÍc’€Ž3=ë é÷ÿ:5õõ—7ßóö«ªyìöÑñ8ÏÒ—=À®]»ªªªFŒ±`ÁŒꙀ6X´}±´´´´´´ÛÏZ­Ö¤¤¤ãÇ�kí‹uuuÚ€«¶c999cÇŽíÃ4‡%©¬èH ãÒ†fÄò ´ð@ákû·møjì-�{/ª4yÞÏoo\þÊ>9kPNë`6Örô�ßÿcGµ\üèKï�;*Ñà .vØüeOö[ý�å_—~þ~þ„«nb ÄWCÈ«Õ:sæLÆXUUÕÌ™3ˆsÇõ Æ>,¡ƒÕj}à�ZÇM€Óé|÷ÝwËÊÊÆŽ;wîÜv âù~ýúµ}E’¤;vlܸ±¥¥E{¥¶¶¶«cÍ™3§Ãú¨=×¹#ûkUš<~ä o»e×áµ�}üá¹Z•¦L;r´|mÿÝŸ~½íÛÙç÷¿T´’¨‘sL:ýMâtãøt«j†”)÷ü”²ß�; ã$¬Vë 7Ü ËrTTÆ õ˜ßCƘ6“t‡É‡Ž;V\\Üá#YYY?ÿùϵ†Œ¢¢¢ 6œ:u L&“Ëå4hÐÝwß­M )ËòÞ½{µ +zè¡�º§¡ªªjóæÍpóÍ7'''û狆Ç©=_W«´ÿÄÑÚ¹çRò>’X{ö£W A>+w°Á3n±ãíÂ?<8ö� q—-¸Ä)>3Ù§Ö >qìMsüðê9«g.C¨·Që ŠbKK‹ªv²þ�ËåÒæ†jËf³µÆ<Ï755Y,– Lœ8qåÊ•|î¹çÆ�—••µoß>­½cÈ�!÷ßÿàÁƒÝáp8Þzë­£G�@}}ý²e˺�Ð>|©¿Û¾»Aå2rÇ l=õ¦ôÔæß(‘!fê¬ ý)ôŸüßœøtïšµ£=ôƒ¤ËgØ‹!„PBBÈ’%Kî½÷Þ¶µ¢(¾ð §N�š6mÚ’%K:|„RÚZ—8tèÐ_ýêWŒ±äädI’æÍ›×ÒÒR\\¼oß>mm JiVVÖâÅ‹;´ ’$544h�Kcc£$I:°¦Ã[6Á4fVî•ÈÁu~çÛkµ€õš;nsi‰Kóð¹?¾vÿ‹»¾{ë¥ÄØ'î‹CWê3!‚÷*é!ü½Qþ JJJ^{í5­m¢mòÇ={ö;vÌý]³Ù¼dÉ’ÆÆÆÊÊÊúúúšššªªªªª*Y–µ (¥F£ÑétªªZ\\üì³ÏRJµÅ»ãããccc§M›¦5^ÄÄÄÌŸ?_›ljÞ¼yÑÑÑþû¾AM©Ù·nÕîz•˘sóÄÄK™ØUµ÷í®+t€yô �Ô!�رw.�]ò§ßoûûŸ[xâžIý:!„PÐòïý@Q”ÚÚZ÷å¯Z‰¢(Š¢ûëf³YUÕ²²²M›6µ¶tPJ­VkVVVNNθqãRRRÎ�;WPPPXXXZZêr¹´ð‚R:~üøþýû·î-77wâĉ Þ­ÍŽäªÂo‹—:{ÑìÖ~‹â…#{ kUÒÿÚû—\—ܮ׉yÛc÷5<ÿfQZöÀ8ŒŠlXe€Ú [¶lÉÍÍõS+¶,Ë���=˜±•SYYùá‡ÆÆÆ&_Ö¯_¿NûE+ŠRYYYQQQ]]ÝÔÔ”——×UûE˜innEÑËž_Jã©='Œ¦dšÚ¿¸ÿû˜kƤt:«†T{¶J˜ÓõåÁO|þÙ‘z>ëº[&¤`»Š6›Íd2õ¸ 3$ïÂ}�è�üÞ¨Sþ �¿ù: „ú†þþ rø˜ˆBÈ# P{:„6­ùƯ‹ø!„ÚÒ²Î(…"†¡M+¿:�3!äZvã8,pÐ]hã9Žã8I’xO%B� -üËq˜ã<À !Ìa­ƒuZIÐ'ŸÒ6à8ŽçyUU['ËBù�,˪ª ‚€}P$ÃС/µ½ß¦¶Ž"Ïó’$ùÿhE:­†OøÞ h±^ÍXƒ€Ü`èÐgôÊ_Ï ‚ ªjÛeÍB}N›ù^ž�Üyi z£«~‹}XßÀ.ÿç� Ï›L&Y–Ý—!Eõ —Ë%˲Édây>’§´G0t˜®Gtºe§ÿöÀ`0p”�FI’DQÄiêCŒ1Q%I2�Ç �NÚŽPÁNÂ=°æ oÄqœÑh§“šÍ¢(Úív­¥"ÔsZdI’!f³™b0zßA; P‡¡ƒ´‚£ok´T—Ëe±XdYv:�Ú2J)!×(AÈ{Œ1ƘªªÚF£‘ç9b0°©!ÀÐÁK­7Þ`n �Rêr¹€ãx«U{`Rg°AÈW”R­2�RÂPÊõI}BáCßôáÃ{Û]±>Ú9Çqf³Y’$Y– ׋FÙ`’Pàù£ª,$PJ}êIºø•°Þ… Â� ‚ 0ÆEéq—ɼID”®îp¶‡»*!ÇùÔØ×Õ¦7 0ƒ¡C7“çýqBHof§Ž¨›Dò5‰6;}…UÜ’‰F�ƒ¡B§íœ§Ý†¤‹?=C M$Ý‚#é»F<¼‡PDóK�Wûã-%àIŽ,Xë€P¤óµßr׃™Ü ]:ts> WÚã}àþ‘Öþˆ„¤|X^F" ¼Öm¿2÷„%( >íþÛ8¼1ü5P$Á¾—x»ÆDÄ”¬¡œvtžÇ€Á'9°ÖÁw> k åáðî:¡ù%�·0Èè½¶yOÆ0tè,B ‹¿È… ^æ€÷þ§u¤,ÚBþ€µ>¯ äõD(ìaè@¡Üï¡÷µ»BEˆð:íë׫Š\_?ܳ‰|½Ù•7m÷o�S£pœ2Bá-hE(XE\è@|ÍÊ=,ü_bêæ€e_ðë´J§£‰ûölßóG·´—5^n‰º�ÙõH˜†½zóz¡0…}"O�Ý©‚,9íôjV�°¡!ä`ÝB­.…ĽþÀ½Î ‹:†®t²OÔgüwS ¨PM7BE0¬u!Ô±¯�`kòä“eP}qäAˆ=á\Èÿ0t'Ý݈ƒòfBõ'~ß`‹�ê;7 Ž¨Þ @(”t5õBEŽ®k°§BHò8«MW§4˜ž—Cµé¥ïàÄD(È`§^Ô6X„±®D÷ßí³Châþõ Œì«’ÕóZJî¿çè¼P`aè€ÂçI¿Û™:]öÐ׫ÓíÝûWöùÏ.g õ5ŒPÀa耂—ÿn“½,lûvmŸb—Öï!½`èÞ|¹+…pûÆ%=N~ïoÃ=ÞCÏ>ˆqÀëéC‡°×iéÒÅM6ÈúQ†}=qûBÞ‹éC‡Èäãd ºVHô`â‡`(TCh¾ z‚áG,ˆBY–Eq:�²,«ªªwrÒ¥”ã8žçyž7BäLë.+p¨\ÙsZ=^îªiVl*®Ä‹"™Ù@¢iZ?iŸ—Í÷�Š¢@ÿÐ�"I’Ãáp:�@)Õ ÍÈ)+rÇSUÕáp!Äjµ †ðÎ È—'å7¾rUÔ9B åðE2‡ÂÊëÕòZñÛbxñ3rãó}S�IQ:§JÿÐÁf³9Ƙ <ÏSŠ\"t cLQI’ZZZDž�вòœþyÖì.øŸ�ĽÅ"0F8�P\Š�S¦HŸ²yÂõ››-¹C9“¤gædŒµ´´ØívJ©Åb1 7 Ô!„çy³Ùl0dYnjj–d90‡®¬¬ Ì� ÎÆ[-î=åB©ÁB8Æ µGå©`&¼Áá”ŸÚØòþEÇÔèùãp8DQÁ`0è˜ „‚Ÿ lj¢ØÜÜNu’Oor–V‰„gÀž yBÂsª,¾¸½%96*O§ºÝB{§Ói·ÛyžÇ¸!oPJM&“ªª--6F7Ø×wÉÇω@yÂaQ€�¥¼‰©êsÚkZôI‚>Ï.ªªjíF£Q— Š(¥ƒÁår9].SXä�óõlã~#”òÆð‰†ò7B�7Ø�®7ó]¿œ«CÌ­Oè �À4�áôð„Pð<¯õš �ï|++’Bx#N|��OÈ[ÚïÍúǺ(Ð'tE‘RÊóáÓ^‹PÀ‚àt:%Y6‚ÞiéU…ü“NF(¡Û|ÄÉeÝ:cÆ ¨;ØO2@¢²Ls3Ø›¾“gN¦ª••ŠÝí‡�J’MÐùI!dÒ0!ÓЦ€ ÜMÙVÙ 7\Ýå LLRöÉåx’ýEŸ„¡CØ¡éÓxtÈÇÏþöÝÊ‘ózh¼€Uïüëÿ_Yû»vn&¸œË_nZ/wØŽ<ø@¿eC»Ø Ç/\?;Öý rUnÜÓ¹]œµ8žùSSyÇc¡Ð†å{dá³æ=õ¸áå·ÕOºï×ó‡j§_½°ó_/n�ì^åp�:ûgÏNQ¢c8.ëú›ÆnýàÎ=gfeD_ÞD©Þ³ñ£³j¿™?™‡UÈ ,!kBÔmé„5Ú—%»Øå*ÇÎ~yí•ÎOŠ¢?á0·flB³‡Svñ¬XÔèéèªè:¯àYöl°@}N*þbíÊcs”�×ú0S|ÚðaY¶=ÍÌ’: ‰´œo®W¹!’:½$»�Y,!:F`Šl9kñ}3³Ç¡R…¢€*KJü|*þŒ8ð*£Ê€ÃáéŽO4=3ÇM é{çç€/¶ª*Ë?hZ~ù¯Ô11F³9W¬lZe뛤¢‚¡CS/~½³°õÏËe†19#ƒË?[Vå‚$#HJ‹e74#Á}Hk.Üø—Lšsû‚YãFi,Ê÷[þû÷›ªTXѺåÑ·þëá·.ÿá{gL�°§ƒßñü £¯±kókŒ/K¸§ãÖÄG´Mº9)<ÿÓëMq„•î³mO4þÇdν÷e§ Ôõê Ïpp&ês†‰ýaé5VV³ëÏ®-¹ô2MÊÌŽ%%'K«Ôœ�ÔÊâc Ì|mvz'ƒ"Alj|ýw¾rxWμ{ï�7¶ßåîP4jÀ�´h·"ÃQ}¦¬Þß !ä%Bï^»8“º×ÿJû%÷xð4™>'f~ Qjl/í”ãó¢—Ì1t:H£hÕ¿lß„üJm¨#BvYà1@xƒÉd20ƒ6•Ã¥Ÿ�O:ÂøÉ·E¥µ7e$±Ê‡.(Âèa��œ.~Ä�?{f\î¶Õ+7ÛòÒòØßýòúm;áêÛŸxpœµÃ”3õ‡�ì€gدÂ&a_ÿÉÊ�yüjžS•}Eêø‘h¿¶ËùÓgª…ËÑDöô¸•³ ¶Ã 7op9.P’=]\©#¢žÌEþt³íOÙ—«b»0ÄÀOϵ 5ƒÜ(¾¾Þ¾;Húöu@}Nmª,=Sb!ÀêªÛ�Ã21\Ø}üPqãÔ¸Æýù%ŠaÔ¸a±]öM0ös˲§†~²­zìµ)@{„PëËN�0›:óüE oé¯ô�cÿ !i_Ã3MQ›G^y]”Yë”P¢ÖŠ1›Ä¼é±—iù×�-é<(oŸdP[æü{Ù• Ò›s›)Ë Íçm_ݲ¶¶�¾ 2:„1éø{;~åÏ+]Hìðq#„C…߯Œ;Ÿ^5\3yT¼ç^�||ÎüE9íö~bÓ?Ot±uÇ€!hªÍù¿+ê+×dí’{Cìc9íú/óQ<°fG¯{¼í³+«*hz4_qµßaÚPËÿÞ=¬íÜ[!⮎ٰÈJa~ýS[]EØN¾0tcü i·_—i`ÍEŸ}¸¯Mo%?rÂHáÈÑOßl¬«aÖ)?ÈéºÎ¡•\¾ûÓòÁ7L ]4|Ö¬Å7 1v؈Uî]³ù0È Z»6XøOÑy.ÿÂÑñBVçÞÇ�³òYí›M%D;;­FMŒùçsª'3 tVUnˆ¢QȧZÚìÂΑ�Ñá4 †aŒK=u†6%ìßÒ6t’0vÚäèÃùÅ%À¥Ýjº´©ST;T9T41àXýé–ÿ)àŸ¹Ól0dGí¸ÏÚ®·%Ù±ùn;u”úͺšb„V0tˆŠ,+jMÑîm5rÒä[&¦Rˆ1ibô×_4ñ#fOÒå$²Wvqá›Oö6Ñ´™ã P ŸÞ¹auaǘ¬¡¸…áZîÈK883Za‡C­Ñ:Cú£…Q3“0`@f²Åøã�»V8öwÑ«±æ”íoœ'º.ŒŠyFÛ­ÌšZC›ÌNo& « Ž6õŒµHx–ýg¢>¢ˆ 5Uç/:Ègv¬zùË‹eg˪š%p~÷ûˆeÖ°ùS©rñ»�ß63ùûÃE5y×öëjt•ÆvüóOKÓÕs®Í@ëY¥TÛõűÎ7Ǿ-B~8?îÉqjavôß~¬>¼ÆYÔ齈©p@kE£Tj»å¹v}+“óâ>¿Õ%Ísß=Î0‰B†á†Ù�®}æ•}NÕ…ßV!:%3;¶òt¹8ðÆŸÝwýДD¥Û–¿sÐÆ'ˆ¯­8¸öÍíËnÌìú~/•íÚüuô›3g|BkˆaÒÃZzMÇ §•’Mÿ$Z{òIDATýü6 ä¬ví§¸îŒ{ôÞäp­|»ùÓ«âîE~aUcú#qycbÿÍ7ÿúǧÇý´î�uöà9 �r†á†X�›vm¬i@Ú€©©ÉÉý“bM´zç_óö騴AýbˆX¶sÅ¿Þ?)ZÇÜóøƒC¿øÇ 'ÞýçrããKg 4w¶GµæÛ÷·”(†œ›®¿ªMxAxƒÁhìØMR1ð85òÎ&­¿pZ–ù‰[£¦§R°»Ö­jøó96òªKoÉuÎÿ÷vóëK£¯Î‰yñ1aÅ{Í/Ÿejw»õ9ài l°@}„ö›¼héäv/]¹´\5G·®xmË ›aÈ»Zª•$?üÓšç_ܱÕ_*ï¹ïÖ‰Ìíoý¬ùèGïq�䛿Oî×e¹þlq¥�RN=_+3Bi'3Ø!„ôC¢LOßm®ZÇ¿W6¿t¡ã§ñœýÁ×Ù‹÷EOL5?òvá…æ÷½©>$d|ŸB@RÁš@(€‚QCÀÐ!’¨u‡?xë£ö˜Qw<öÐÜ¡ÑhܘE¿xÂòÊ«�ÞÿÝéëÆ Hk_‘ 5Ö7b3f¶‡ +ûô…‡µÙ HÔ¤¡)žûN ¸rf hëa¶ˆO¾£üæjåÍ-â±í;—Çø5”;îù»ü_·™ÙΖ�]Œ“j{º`02/î7£[ØùJÙ®ÓˆÁ„³I"?2 7ûÆ!I©©'>êʲ�˜::±ÍÐ..ç¶ÿ|fø‰–Ì«Ó:6@€!}ú#O,u¤_éå@¬é¦Ïp¦Ç_¹zHü¨¹‹ŽpÎ`‰MÍ5¬›¦B�â¬q}sTužU+NÚ:Ùî­–é`1+ÔÖqj³ôÇ•’‡½É Ò¾ãÄ\#7^ºc±íì³ <ÇÀåRk.8×|)»<|…²eË–ÜÜ\J7œ®©©IE«µãŒ!/I’är¹ú÷ëç¿CTVV¦¤¤øoÿðÒvÛ›_»¨€EB=ĉ©®ý¿Kðq±Ö!¤ì&‰P/EP7IŽã€1FVj#Ôá‘}¬&îòLÔ!ÿ]Òc&=Fµé:¨ªªý!ä+UUà tèM0Æ X ÔŒ)IÑ:W·ƒUÕó˜a„PçcŠ¢BÇIÀCNZ<â¡bŒ)i :TèqHžç8N’$žÇžùL–eÆX »6ûÉÈT.ÞÂ7Øe !!xLU€An–E�> <Ï‹¢(Ë2FùJ’$Bˆ!ôk ——M·’‰*ŠEB¾aªD¹n˜yG‡h…"Ïó’äiô0BÈ�,˪ªšL¦0» !÷ärÏ�ŠEB¾aªÄ˜zÓC¤4X€ ²,;§Óé¾ B¨Sªª:�NŽãž�^Æ™Iü‚ñlý·"‘�„Ç¢!ï0UU\f÷à4N—¢@ÏÐ�1&Š"!Ä`0è’ „Bˆªª¢(RJM&cô‘Ô‚ðèt¹ð¼ñh™dB8, êS™,RJ{‹a@¼>E�nužƒAQ£Ñèt:UU5�a0Ø !?‘eÙétRJÍf3ÏqaÐZÑÊj6 ï†Ã+ÔIDATxœíÝi\Wû7ð3 ²D¶°% ˆ@Yª‚Â_ŵZÐR±Xik)bݪ¢h­bÕŠKÅ�º ¸ X±®w]P(. Š (B Ȫ ’™çŹÑZk5Áö÷}E†+ñ:†93s�3sø·ÓÒÒ ÷öö~ILÏž=CBB&MštèÐ!å_uíÚ5))ÉÕÕõíf ðîà¨;âáá1kÖ,kkkÓ犢(Š 3fŒ®®®••‡óÿÿn ´fÍ777===õ¶âO‰Åâøøxgggu'ð–‰Åâ+W®Ð4ͼÈåË—�žžÞ… ”·Ëåò%K–|þùç™™™ÞÞÞ÷îÝóññQqææææ+W®û¬¹¹yýúõšššênÇŸÐÐÐØ°aÃøñãÕ�țԱFPÏœ9ciiill¼mÛ¶S§N™››ÛÛÛçååùä33³S§N)ööªªª¼¼¼ÊÊÊN�:½÷Þ{�;wfwWW×¶¶¶ßÿýÙ³gjmÍß’“““��ÀþÜÚÚ*“ɺwï®§§§8¿û'¡iÚÞÞ^qÞ§ØžŸŸÏª…Bá¹sçØíuuu ì]»öîÝ»jIø…ßMÓ¹¹¹r¹¼¢¢"''‡bllLQT|||rr2!ÄÞÞž�´°°Ø¿?[¾ „°ýæ’%KÞé/W$™››Ÿ>}ÚÛÛ{÷îÝG� ÏÈÈØ´iŸÏ�ŠŠRñþ˜��½{÷n ‹Q£F%%%Í™3';;ûõ>ŠÃáü�áµèX={yyy�=¸\ntt´P( jmm]»v­©©éæÍ›���7mÚ4vìØ¦¦&‡³jÕªU«VBjkkÏž=«­­M‰ŽŽ&„444Œ5*==]½Íù;jkkÙ“>…ǧ¦¦îß¿_])½=ÐÒÒZ½zõ„ ßEQl€}ÙÚÚ:}út}}ý�?þ8,,,<<\}ù’²²2BH×®] ^É0 ¬L"‘xxxBBBB\\\¦OŸÎ0 EQ ‰D\.·C�¶¿"oo 77·eË–]¾|ù§Ÿ~233ËÊÊŠ‰‰™7ož@ ˜7o^[[›ÊòyôèÑ¥K—!©©©›7ož3gNPPÐëýÇþÕᓎ cUcæÏŸÿìÙ³–––¯¾új̘1���µµµ>>>ZZZGŽ …Ý»w'„0 ³nÝ:{{ûï¿ÿþÖ­[B¡ÐÁÁáîÝ»>>>ïâ¾ñ¯5xðà~øÁÔÔôüùó²ÿ’J¥+W®TL]g ëååå---wïÞmhh „444”””¨þ».,,,..P ájkk[XX°y¾Þ©7Ã0¿þú«µµµr!ÞÆÆFñ? z&&&zzzB¡POOÏÈȈÏç[YYikk›šš¶ËŠÃáØÚÚ677ççç'$$øøøÜ¼yS"‘EDDlÙ²%..N•ݺ²¶¶¶#GŽtëÖ­k×®„‘H´~ýúóçÏïÙ³ÇÝÝýùøv:::§OŸ¶´´ c‡O! çÏŸ�ŽŽ677Wq‹^EÇêÙ×­[×¥K—5kÖ”••õíÛ·sçÎfff¿ýö›——WYYYZZZ}}}qq1!„a˜ššš‚‚‚êêjö½†††„�ºº:MMMŠ¢Ôõgô¦ :”-²gee©~¦¶ÊhjjΞ={ÿþýµµµ·nÝòôô¤(ÊÆÆæÌ™3ÙÙÙ›7oV.Î<ïðáÃ���l/¯J2™lÍš5¶¶¶[¶lñ÷÷Ÿ0aÂÎ�;-ZDÓtEEEŸ>}|||D"Q»wµ¶¶2 ÓµkWE×ßÐÐPSS£8{ölZZÚŠ+¦M›6bĈ ìÙ³§wïÞªk˜Š¢fΜ9dÈ�ùóç><88ØÑÑqãÆ�ŽŽŽ³gÏÖÕÕU¦i:66ÖÖÖVWWwîܹ�ÀÔÔ477—=øÍŸ??//O-­`•——SeffÖ¥K—˜˜˜ÆÆÆ… ¦¥¥EEEµë—Ÿí†Oz÷î½víÚ´´´… 677GEE©kŽÖKt¬žÝÒÒ211qêÔ©«V­ÊÊʲ±±Ù¾}»��Mvvö§Ÿ~êïïÿÁTUUBØj MÓ›6mbO„B¡L&«¯¯gÇâßõž=''gÖݹsGÝé¼-4Ms¹Ü%K–xzzîÛ·ïøñã§N�ºråJKKK@@Àƒž —Ë577çóùê-ÏÉÉ nhh ¼qãÆ‚ d2Ùúõë���—.]ÊÖ[”•––fee*:‚DFF*"—Ë#""bcc½¼¼æÍ›gmm‘••¥Ò†ýÃ0‹-JII™={vrròºuërrrÆŒ“��½`Á‚ç�¦‰$=== ÀÞÞ¾G�¶¶¶ZZZæææ=zô°³³cO¼Ô‹a˜ÀÀ@BHlllQQÑñãÇkkk¬ó|€¯¯¯òðÉãÇ�§N�zåÊ•cÇŽ%&&Z[[+FP:ŽŽUgohhàóù[·n=wîœ���³³s¿~ýfÍšÅð†imme#ÙjÌöíÛ?ùäooo‡Ó³gÏ444X[[S¥ˆ|G=_gÿGÒÖÖ>s挵µõ¢E‹ ¤££ãéé©­­moo?þüììl‰DrÿþýÖÖÖÖÖVöü]GGg÷îÝ� 11QGG§wïÞݺuÓÐÐxùÙýÛ ‘HæÍ›×nãµk×üýý/•ûw™L6cÆŒ—&MÓIIIIIIo0Ï×FQ‡Ãaw%‡CQÔK _ ÃH$’Õ«WOš4I±‘÷¢izÅŠK–,Q×ÁØÊÊŠ�3íïïobb’ššªøUçÎ�•#­­­_ÀårÅb±@ èß¿?»…¦é?½ýXõ:VÏþøñãåË—>|Xy|ìðáÃìr¹|Ê”)»ví"ÿ[�144ôòòòööNKKkiiÑÔÔ¤iº¥¥E-M€WGQÔܹsçÌ™óàÁƒ{÷¤L™2%??_$}ðÁÞÞÞaaa‹/Ž��ïÛ·/!$((¨²²rܸqìý;FFF«V­²²²ºxñb~~¾ºôOÃápx<»+uêÔ‰a˜?Ú­Aff&—Ë »~ýzddddddLLLJJЇ‡Gxx¸¯;555ÇŽ[TTTRRÂÞï6aÂå3?åZÊ 455Ã'r¹¼ºº:33sÉ’%ªlÅ_Õ±zvBHKK {‰”““ããã³sç΀€€œœ“_ýUFQTß¾}cbb†neeµfÍ}}ýˆˆ†a:uê$—Ëßõsöv(Šruuåñx�:u222êÕ«WeeeEE…ºóú[†Y¶lÙÒ¥KÛ�noݺuëÖ­Ï¿%11111Qñ²¶¶OVy{x<ž––V}}=Ã0:::4M³7 766îØ±CyÎO}}ý¤I“®_¿þìÙ³ØØØ††ö�³¸¸ØÂÂ"***00°±±Q•É ‚>}úXXXøùù‰D¢o¾ùF.—'%% 2déÒ¥¿üò EQï¿ÿþÎ�;ÛÚÚZ[[ÍÍ͵´´^ •JÙá“‚‚‚’’’¸¸¸~øááÇÙÙÙìˆBRRRG»“¦cÕÙ_HCCÃÄÄÄÄÄ„�ÿKQÔwß}7tèбcÇ~ôÑGW®\™1cF[[Û•+WnܸAOŸ>}§'³?�ÇãmܸqÛ¶mfffÞÞÞqqqìý»N&“©¾Š¯HOOO__¿²²’bjjÚÔÔÔÔÔDillŒ‹‹Sa¯¡Ÿ¹páÂüùó===üñÇ/¿ü’­S©¸uªÃ�³?�Ïç'&&º¹¹]¿~��ýìØ±‹/Ò4ýÃ?†……‰Åb __ßššš§OŸª;ñ×DÓôĉÛmlmmý¿ÿû?µäÿZìÍ%R©”ÏçÛÛÛçäähkk³7 …B‡£<ËSCCc̘1ÇŽ+--µ±±a«÷îÝ;yò¤““ûD¤ýÂ=Há÷ߟ={v»�qqqqqq/ h7|’žžþNß.£E)Ê^½{÷>qâ„âÎÃrww¿q㆟ŸŸ††F||wîÜW_}õ†“†T3A�ärùˆ#îÝ»WXXXXXXPP0qâÄÞ½{uêÔiêÔ©"‘¨ÝÚ›úúú‹/ær¹Û·oOJJâr¹–––ÅÅÅ/Y¢ómprrÚ³g�……EBBÂÁƒ½½½'OžÌápâãã'OžüX]]�””4zôhKKKBÈĉŸ={¶oß¾7�8ü+t¸žÝÈÈH,‹D" 333öñ¡ãÇ�<O,ÛØØØØØèéé±oÔÖÖÞ´iÓØ±c_ïßåp8ýúõ7nœ®®®‰‰‰©ƒ7Ô8x>Ÿûöm[[[‘H”™™©££ãââòᇲKh±lll>üðC“¤¤¤ªªªèèh>ŸÏçó›››†ÑÔÔTñšæ\.7<<¼´´4$$dÿþý‰‰‰Ÿ~úi||<‡Ã144d/2^Å”)S6nܨ<Ø¿}}ýçŸ. ýüüvíÚõäÉ“·Öˆ¿ÌÚÚúøñãÞÞÞí¶óx§OŸNOOonnöññY¼xñŽ;F�=kÖ,å]ˆa˜¸¸8ïÿ¥X¸ëéÓ§eee>LMM?~|uuõ‰'ø|>;oîܹ*^»–ÃáìÝ»7;;ûêÕ«?ÿüóòåËÙËó?BQ”ƒƒƒP(TY†o\mmíÉ“'�?Î.¹ÙŽ\.ÿâ‹/¼½½ËÊÊNœ8‘““ÓÖÖÖ©S'ƒšš†aØž½­­Me [YYB$‰òÆ––– ´´´9r$$$$##ƒ¢¡¡‘™™¹mÛ6ÅŠ¯<O$‰Åb>Ÿ/‹Åb±¶¶6!ääÉ“%%%ÞÞÞÛ·oW6ÔŽÃá„……�3fóæÍãÇ� U> ]¿~ý‹/¾;vìܹsøÑGíÙ³ÇÁÁ¡¢¢Bù,J•þê(ŸÏwrrÒÕÕ}yØçŸž••5zôè7—é[ñÎQŸ'‰ÌÍÍOŸ>ííí½{÷î£G�†‡‡gddlÚ´‰ÏçGEE±kì2 SZZúÛo¿)¿Wy¾ÚÚÚõë׳eŸŽ³yvvöîÝ»-,,F�•””4gΜììì×û(‡—žž¾{÷î7›ä›R[[{êÔ)š¦]]]†Ù¼ysll¬¹¹¹"àù^[WWW(B´´´†iiiQYÂ/œ|IÓtnn®\.¯¨¨`×S666¦(*>>>99™booÏFZXXìß¿_q>ËžÇ,^¼øäÉ“ººº†††E©¨1†Ãáûí·+W®Ü°aÃíÛ·£¢¢![¶lQŒm¤¥¥Íš5ëÉ“'sçÎ-**6lØÀ�gÏž=qâÄêêêÖÖÖªª*Uæìää´aƲ²²„„ �qãÆµ´´ÄÄÄüÍ�Ãá 0àÙ³gƒ úå—_:Nwñ¼w¸g÷öö®¨¨pss[¶lÙåË—úé'33³¬¬¬˜˜˜yóæ ‚yóæ½ÊçL™2%&&†=Í÷óó»~ýzß¾}•»‰sçν­6ü±G�]ºt‰’ššºyóæ9sæ½Þ á_-þªXSSS^^Þùóç—-[¦¡¡‘••EquuMJJª®®.**Rær¹ÞÞÞnnnwïÞåóù„---š¦U¹¦yYY!¤k×®l/Á0 ¬L"‘xxxBBBB\\\¦OŸ®è#&OžüäÉ“S§NŸ:uêÑ£Go!ý¿@KKkÞ¼yóæÍÛ²eËæÍ›årùîÝ»Á÷ßïèè¸páB6C†a:DQ—Ë­««ËÏÏwrrjkkc¯†Uœ³b$44”½îIMM•J¥¯1 âââ2sæLÅ·ÃïÅÄÄ|ùå—�@íßÎKt¬jŒ‰‰‰žžžP(ÔÓÓ322âóùVVVÚÚÚ¦¦¦ínJäp8¶¶¶ÍÍÍùùù >>>7oÞ”H$EEE[¶l‰‹‹{ÅËóÇûúúæååegg80  [·n]•677¿�ÿ¹¶¶¶#Gް)BD"ÑúõëÏŸ?¿gÏww÷çãÛèèè´+þB<<<Ο?­|j¬zE�9sfÆŒE-Y²døðáwîÜÑ×׿ÿ~Ÿ>}FŽùàÁ6RKKKWWw×®]ÇŽ³´´;vìƒØ~ŸÏç3 £Êž½°°°¸¸8 @±4¨¶¶¶……!„a˜×¾�J$ùùù%$$ìÚµ‹¢(µ/Ôîä䔚šúí·ßîܹs÷îÝVVV666b±8555::zòäÉgΜéÛ·¯���££££££³³óÆ�¯\¹Â0Lrr²¢#—Ë-Z¤²´ßÒ(!dÀ€lÙV&“=?’Ü¡t ž�¢¨™3g2dþüùÇvttܸq£££ãìÙ³ÛÕ¿hšŽ��µµµÕÕÕ�;w®@ 055ÍÍÍew¶ùóççå屑gùòåí†O·oß®Øý=z$—ËÍÍÍß{ï=‡mÛ¶•””Hþ׈#Týß¡¤¼¼œ¢(33³.]ºÄÄÄ466.\¸0---**ª]¿ü|€@ hWüíÝ»÷ÚµkÓÒÒ.\ØÜܥƕ‹E"Ñ�;wêÿÀãÇ�gÏžÍFŽ5JWW÷èÑ£½zõJNN9rdrr2;‚jdd$•JUyô•ÉdkÖ¬±µµÝ²e‹¿¿ÿ„ vîܹhÑ"š¦+**úôéããã#‰Ú½«µµ•a˜®]»*þöjjjØŸ)Š }øð!{ªž˜˜èïïÏÎÕ‚ËåŽ;V \»vmÆŒwïÞ-ü¯‚‚‚Å‹Èd² &|üñÇ7oÞ¼uëÖðáà `gg÷Ÿÿü'..næÌ™ùùùnnnݺuÛ´i“Ê2K£ gàÀ�—.]jllÌÉÉ4hPG¾#ºõì Ã,Z´(%%eöìÙÉÉÉëÖ­ËÉÉ3fLvvö‚ ÚÅK$’ôôô€€{{û=zØÚÚjii™››÷èÑÃÎÎÎÐÐPñ±/A%„ ~üxêÔ©W®\9vìXQQQbb¢µµµ¢þ«z%%%"‘ˆ¬îß¿qq±¯¯/ûÒØØøÚµkŠjLBB‚‡‡Ç´iÓ455ãââ ØÇðù|//¯êêꦦ&Ufž““ÜÐÐxãÆ� Èd²õë×/]º”­·(+--ÍÊÊ TJ8Éþ)º¸¸ 8pûöíì$Ÿƒ>zô(,,L]݇\._¾|¹‡‡G¿~ý8EQ}úô),,ôðð (ŠÃḺºzyyÍ›7/66ÖÀÀàüùór¹¼¼¼üñãÇ�àêÕ«555­­­<(++SåôÍW©««c#ããããââÎ�;§è,,,’““SRR\]]:”’’Ò¿±Xܽ{÷šš—òòòž={ •5ê¯êXuvö/†ýËfÿ˜^RYfF"‘¬^½zÒ¤IŠ�ÑÑÑ„š¦W¬X±dÉò #¨B¡pĈÅÅÅUUUõõõ555¿ÿþ»‘‘QKKKyyù�;wÞt+ÿ2+++†a>|èïïobb¢<®ÝtLkkë—p¹\±X,ú÷ïÏn¡iZ½÷åëëë;;;�=z„ ›6múí·ßŒŒŒÚÚÚììì JJJذòòòòòr¡P¸gÏ.—;mÚ4™LvêÔ©~ýúI¥ÒððpÕWÌ$Éóc9×®]ó÷÷W¼Tîße2ÙŒ3þèÓrss===/Ÿ>}Ú&`0 £§§g``@Q”P(äñxfffb±˜a˜ææf¶lÇÃÃC__ÿÒ¥K®®®„‡y÷îݤ¤$Õäü–FA>ûì3�§ø†ñöö>zôè›oÀ›Ð±zv‡ÃãñØÑËN�:½dƒ@ ÈÌÌär¹aaaׯ_�ŒŒŒŒŒŒ‰‰IIIñððõ9((ˆÃá\ºt‰ÇãÍœ9ó£�>Ú°a[_Û¹sçÎ�; û÷ï_QQñ¦šù—hjjŽ;¶¨¨¨¤¤¤²²²´´t„ Ês·•k)/ ÐÔÔTåryuuuff&{ØS»ñãÇÿôÓOååågΜ9rä­[·8ÎÂ… gÍš%•J÷ï߯¨ª±*++CBBªªªØ¯cÒ¤I� ®®®´´TM-øç›>}ú²eËçŸþ™Â0ÌÞ½{?ýôSEƒBQ”§§çÚµkOœ8qÿþ}v£©©©\.§(J5“I£ çÏŸgÛ´µµ;Göõ®�ØRÌ/¿üɾŒ��õõõí°3d:P5†Âãñ´´´êëë†ÑÑÑ¡iš=kllܱc‡òѵ¾¾~ôèÑæææ;wîœ:ujCC»«?xð **êOç¥*TUUmÙ²¥¦¦†¦éšššÄÄDOOÏÛ·oGDDØÛÛ:´ººúm´÷%AŸ>}üüüâãã»wï¾nÝ:¹\ž””Ô¹sç¥K—zzzzyy………±ƒ‡­­­æææZZZ/ �ÉdŠâ¯¥¥e\\Ü�!CBCCÝÜ܆ ¤ÆrááÇ…B¡££ãŒ3nݺE¡iú›o¾áñx�;wþì³ÏØJº²ëׯ+޲ÅÅÅ999%%%sïúgX±b—Ë}¾¤Ü­BÜÝÝ>|ãÆ�eË–µµµ•––š››———ddd¨ì;z£ "‘¨{÷îéééìKš¦322zõêÕa 2«g×ÓÓÓ××goW155mjjb‹§���qqqŠi„†ajjjžìîîž““Ó¯_?ccc__ß[·n9999;;çææ:::jhhlÛ¶mëÖ­¶¶¶žžžwîÜùè£�¸\nttô¢E‹(Šz•§ B(ŠZ·nÝÞ½{Ç�'•JÛEÒ4½zõêŽ<ð6¸ººVWW¿p÷aÕ××ûøø8888p`Íš5��� ãÆ�ëÓ§Oÿþýƒ‚‚–.]züøñõë×wØ;*þ‘:V�ýý÷ß¿zõêwß}gooÏÞÀòÓO?UUU±�^š5kVZZZYY™¥¥¥\.gF&“Íš5‹ÇãEDD„††æççß¼yS.—Ï�;—  iº¨¨hïÞ½qqqÊÿЇ~¨\ŒfæöíÛååågÏžussk7‰•½>Àõ>üÛܽ{×ÇÇç%Ï~‘Ëå%%%ƒÎËËûúë¯nݺ5iÒ¤M›6uéÒ…¢(©TúìÙ³–––cÇŽá"ìß‹Aeær¹jœg ¯ˆ½õTÝY@çééyêÔ)vQBˆ©©é¯¿þ:lذ—¿K[[;&&fâĉo?A€wLÇzŠ/üÛôïßݺu]ºt‰Dï½÷ÞÙ³g���544D"‘òjP–––ìCØY'Ožd×¥´±±166Vcþ‰X,Ž��wvvVw"ðχžÔ©®®nàÀ�ìãòßÿ}.—«ü~e�?ž0==]SS³wïÞìK‡ãåå•““óüªRªc=ŸþmšššvíÚ%  ”™™yèÐ!v;û�ý3gÎ0 SWW÷G]6Ã0kÖ¬a—Äzôè‘ÊÎå¹\nxxxiiihh¨T*%„¤¦¦J¥R‡chhøê�´�2eŠ‹‹ËÌ™3†¹ÿ~EE…——×ùóç !k×®í (ðnÁ9;¨ÓâÅ‹wîÜÕ­[·Å‹_¾|ÙÝÝ�BÓ´D"ÉÍͽyófyyù½�a˜òòr6ìùEèß;;»}ûö±Ý:!¤±±‘Çã�>}ÚÒÒ2,,,;;{̘1öööܵk×ÁƒŸïñ9Žb™™L–‘‘Ñ·o_vYv˜K—.©¬QðO‚žÔ)&&ÆÍÍ-%%¥²²rĈýû÷¿}ûöwœ ­¬¬!‰DycKKË‚ ZZZŽ9’‘‘AÑÐЈˆˆÈÌÌܶm›b=h�'‰Äb±��ŸÏ‹Åb±X[[ûâÅ‹ÆÆÆÝ»w'„ôë×ïÎ�;µµµªnü# êTUUÕ©S'CCCOOφ††BØÊÌ“'OÆŒSXXHár¹2™L.—^¾|™�d2xðàèèh6,--M5i¿ðCÓtnn®\.¯¨¨`W$766¦(*>>>99™booÏFZXXìß¿_± ÛÒÅ‹Ÿ;w®¾¾ÞÃã°°ÐÝÝ}ïÞ½ŠƒÀ_‚žÔìƒ>‰D4MõÕW Ó¦Mc»ònݺ­^½š £(J[[»­­M&“¥Bùä�¼¼¼k×®]»v-//�íÇ !EÙÙÙÕÖÖ>}ú”Â0 [ˆÏÍÍÍÏÏokkSeÚ………ÅÅÅŠ¥zµµµÙ;­†ù;U£ .ØÛÛ�1B"‘”––¾™táß=;¨ ‡Ã™6mšL&;vìÃ0{÷î�6mÚ£G�ž�,//2dˆ–––»»»¥¥¥¿¿?Û¿«‹L&[³f�­­í–-[üýý'L˜°sçÎE‹Ñ4]QQѧO‘HÔî]­­­ ÃtíÚUÑõ744ÔÔÔ(Ç\»vM&“ùûû§§§£¯ =;¨ MÓUUUëÖ­«¬¬$„|øÀ�×®]{>LÝ­è(0‚ êÄÎonn...nkk{öìÙ�76lØÀ–˜ÍÍÍ¿þú릦&;;»cÇŽ­Zµª©©)""B Ì�;wûöíìto##£o¾ù¦¹¹YÍ�€¿áÿ�ºUö†IEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN/fig/main.png000066400000000000000000010170411523260663500333640ustar00rootroot00000000000000‰PNG  IHDR n†±b�sRGB®ÎéDeXIfMM*‡i    n}7Úk@IDATxì�€UÅÙþï¹÷nc–K/‚t£ˆˆQ£�ˆ-Ø¢11úi4ÑcŒFó÷Kô‹Mb¢IÔÄ’DÑc‹¥ØP@�& }wÙÞn9ÿç�÷Ü»g+wwï–»ûŒòîœ9SÞùÍ)sîÌ;c]ûÜ~OÄÙÆc9‡^üµ=aHË’3¶9#$Ä22–8a;ª¨”s! ñJÛ¿mIZ;,Ò kn&ŸDòâ?¤ÅâL2“§¥©l‰‰ÂD„}�^_2¿í“T–9Vm=î3e…Méa£¿7,9kž–)Ä6:‡M)ß”„HF7S_£¬êäÔEJ“ŒL&fØD²TO¯œõÙ†‰‰ãÔÂè¦:¨>Cj+e…MLÛäà�(gΫF†›‰©Âë•:†L)Ú,Fਊ6Q}¦ì�aktó%NÈÔÚò›B´’†› †BFSo¯OâÛ¦,Ë!at×¢LJ pÍ‘j+^ÛäRåL"¿ÉA[Ê«$MÍß¶¤^N6æ*r.#S�ï\K&ÄQÁë5uW¶©©i|h.±¼&$lü–ž “°sŠîÜ”@¤íäŒe‹nš~_P {Åokˆ^ÂÓh¹*ª®[Ë1W£z�:ÈG™Ìà—øšVïA¯GšJ)á60~S®¹Î}š…iÁ°sUˆ*>×µª<Sn Ç9×�¹ê¶œp®%½&]œõ~·ôú4©Ã¦z {¼R¢s¿ëµd®4Ëoò3Z¡NÇ6µÓªb½& 7DBÌ�áàSÍ5©uwšJ5Ñ{Üä¬×@¤QÑ2íÖ#–œ0yºŸ0ú QJz�G´2´5s}ÍsC«åhbr³-m~¹NôN�\ÕRKë«W¸8w‡^K&•3|œç�„y�ǨÄ78q…˜¸N‹«nU„�³ÚvlÈë3VïG­©äi/ËÓ,sWzÌ@ÉØÎ• GU¿$›8>+É„þæ>òè£Í´”êi`8ÍåèfJÔ:šË�¤ù›†¡e è;B¯ó�Q(òdÐ×¼¡‚^zh}ÍA¥;Ocó>[îè�Þ5F!S8˜H*mG-Å2u ™Ì õ�cRyÍe;oOQ.lB|ÎdrC¨pS>â´‚ ðé¯-hJwÞh&•ÇgrJƒÍUçR$Ò7Ðû]ká H:ódÐvw^/æú·LPØÄÔ—OÈ´‰^Ÿ^åcBô2×›Þk®¹J�±ÉÎÖ{Ääã@7 ¼ß\-SÉûU Ÿä¡?KïV}2˜œõ~wîç½`î/s­zLL•A`›&±nr „ a}ƒ;­ij­y:÷ 96íå5W©¹ œ'¿û)­WU(,�d™yzF]-@ë¥áæ"Ö–�Hs=›6Õ·‰ÒökK™9½CO5×;¯÷¸ÖÔÄ9q¤tçúQæNn�$:;md˽©ÎvúuryºŠß«ÉÄ‹p)RßzzµGî.ýkjdt ›Æp¿a�‡�ÉG¯R½#ïPCZq;o1“›©…>õîÖ+Í‚+Rš_ÉØ–\Û–^íγZË‘8ÎûÚiSÓjFI!w¥”å7 ]´#}lS;GAù£o['îtŒLk:|ŒnzOiS4Ñ{KzãÐ=*5ÏH/B5—“Úšš¿Ó. Îdç�Tæ:t®RS#ç�i´2á½fî½ê4Ü\¥ú4“¶�ÖN¯[�£×³yéS×é èݧOÃÍ)Eÿh…M¸ö‚ô~ׯ íWkÆú„Ô¶sM´W©÷…†G®·*>‘:V•l™g¬~õ8Oi}.éµaž-JÒkj6VäYmhƒ›+ß!¬<#ê¢0m)½2mœ+Aþè——Oé™rõŠÅëGÒš�7»i;ç¬+#íË9×¼%ÏÅ y¦ésI¿û´½´¢Ï"­‘Ó¦­½>¹Þô¹á¼��žI¦5õÊGÖ¢•ö[œV6‘ÌVŸoú�éä¬ýaUÎéí2}ãÛ~Ië×~Ž>•›¹Úµ¿§ü}æ¡à´…óœz�è;1reJ¸ã×ö2·‘>÷P=œõyMMMY®�ÖÜï®üµ‘g’ÊCÂÒç¹óÖ–`§•Å‹ÓRGm"ýD›¯Œ$¿´iØ|JiORû HŒpç½ Éœ«Ú°Õœœ'•á¯×›‰©ßA<}Ñê]ïú¦¶Í·Œ^únÕM§ õæÔþ›dê<LáÎ…iÊÒ7 ­Olí¡™²•õÁ­eéwŸó6y"ßH»„Cr•êÝg‚á<Áô×g»Þƒª‰)K+ç5ͦo§ê4•ÑEqè#ÀieQ%Ò·7­c®X[Kqâ;•m"ň×ik9« é¢}!‰!¦$µ×ªôš×RÜ:Ýtm_“…ie}§;÷ ó"t "’VHc+$íOj�˹V´Ï¦�]5ò2Ï窔ë_[YIê}ääoš\ÏêsÉù5å;½;G¯XÕËk(…“„RHûTFEÃÔéùÈý*§�¦†Œæ¬}*çÛÓõFv*a²ÐkTï*íW«ÎÚç×Þ²–e›dÀ&Ì\^ÍN[Vï £�>Ùô ¹$•ÓûÒkÏÔEû*λչ®ä´óÛš¹:ô»@¿pµ÷¥×’~#à§ !àÜT’VŸÉÎ�œƒNFgí±›jhØálâ8o}�;š�5g•¦«ÕµôÉ  lj„�j““f§×†øµÖÎóDáyÊ�>á�¾·ùMÃy[i#©>F}9�^¿ÎY)Kk¡W‘óN1õ-7]ž`H¯R“©Ñ!9ÙܹúÖ@²q\Ds©žö"L"|€JˆóLÓ;ÑTÝ�a®F˜ÑMàŸöšï £‰öcµ5�×L|…ê¼Í5ÕÓäéðTM�§�–/Yh_KËÅBô)­wŸj®�½r"ß•¦LU]sV©ª8ÐUE Òž¼óäÔë_¯.ÕÖ¤5_}¿)ÞyC™pmXý%*Ò×Ò¾±ä/¾ˆÓ³N¯C51RozçÁi"kLçn2´#U1 L‘_óveæ< �Vs¢ëy§I�Äi_ìôßL}"¦uôªvžcz�˜ÓúÖvò2‘BÊÓéƒÙ¯9èõ¬…;ÌåÀù�ܨèôóMeô›Ñù}@9˜<Z_ÃAÛ×t¯p5Hnª¿Ó¿ÕöÒ>ž©¤^-zí9TM],ó qêhbªß¹–\w�> ‚¦,meçV0e9½q­»©iä§h Š\WR¥¤¥èÝ­} §WoÒ:g%:îS‘&ع½ôJÓþ›£¹ÞAΔ¨÷¬j¢¡&½Œ×ÉÔy½G2E\ç—§H“ØEXÓj¹ú{‘öù5žæfšzHγZÉTe†§�èÕk.:”+‘LiE!}ŠšŸŽÌqä®w¾DL­�»Is3™*mç`“§ó¾ÓDLLý"ðúL)¢J7ÒÐSЦSì~äT«‘>K#÷¦¤U­"£’�ók†þ>ìt%¥øJó80Hœöuº?ú<”ÌTç[Ãùò5µSþú€´Mžš�öÛMR|/È_óS–§ÒÐ}²ií´Wì`5É´U}48w¨fªÒyI-´}uÄAŸ]!Ӈק¢ê©W‚jyZŠrÚâZŠÓé0íbÁéç;¨É©µ)F¯ÍSïkýåÅyãh‹+“§þä¤×[„•TÆ�ƒÓÖì8}ùMÛ9×°ÉM×'[¥Þª„A©zj¿]ßY!£¿òq~kr´2…œ§� pwŠ•­×õán¯=ÉBŸ?‘_%DŸWN}MÎúfÔ˜N�KÃ�ôéÝd´Õ>§^uî.¶ÃÐTR{àzÏêE¡%ºŠrî)}cê ¯w«ß…[¯E¢£`Úv›zè]¦ïP…Ö»É`užœFsËüBî1_¯úëh’_ôrîS§»,к8ß¡æRÐ|B¦ÂÚŽZJ              �ND#Úf Û ëèqÈ å;ó¼ gÖƒi×ñçPe9ÎØ!#·m‘]Re6ÃÄQY�GH‡ìž&#Ø™©"»¦TÑG �@sèåÌ@iNFµÒ¶\εŠrÜ%6ì×�­uí<Ýšhn§¾üÝ9¸ÓÖç¯/¾»wZw�jÇiÎYw�ÜZÕ.Å­�;•úk§­ÍÍ�ªvþµãש­Cç iÿ4Ú¿†�çjaM;5÷ã¸õœv?”õfÖ´îpwnîÞßÇí¯§XwgŠxíœÝikû5 wªj™Ö:pǬí×èîRÜ!µ2«#@ót�ÐÙÄ‘ù¹®­ãu×±Ù%ºÁ¸ý�ÍØ�Ö|>:nek�tìEô:9BÌZ 9¹™?Zzí|j%ÒoàjÁNZæÖÐîNP;ކÔß�–~H4z]»¯úD«õm¯Ü×VcýÎû·VÕ°j��Z‘œ÷3Û}…×^_>î®AÃ1{Ö�sÓts—X;7©{õú7TŠ®ÙàŽQ=µ»¬úüuëP_ìºÂcÉ¡*ŽÖ®ê8b¿XWÎî0w ¯‹RU˜»w.õù«RFb¨Õfä¨f~Ž•Xä4þFâWåT3�+2¼Uñª‡ëQÍÚV�SýlÕQ•/Bµz)z^órkW=V¤.ÕC娚%ku•jEbºËrGqkêo ÃeÕw¶¾ð†5Œ=U 1�&Š!fÃJU;«¹i�)À)¥Z$sP³¤¤Ä„ÔŽZ;¤v>šÔÄŒ¼\‘Ü94ì×DUZE2ÑT®³µ_HN¹îü#©ø«ù8™&ž»ðj¥˜î³ÕîosÂ)¼–¶ª@í³Nˆ¦­Jåë[µŽ5¨*¾> ÒÓ»¸*êÊÓÉÁ•ÊIêœ0©L�;À­³ú]8/|w'­;’f\+ÄÉ­V¸[+ç³Vs0Ò½¶_ó49h6EƒëÐÖ9¡L\-Q—©Ö²§È¬°RT!éeb{¼ñ@)ä'»C—ɸ­Z{<©âON†Ô5´|f}Yg…-S”³†�¹ºÔ.œÆÀEG$@$@$@$@$@$@$@$@$@$@$@$@$@�‘€¥{‡ÌxµÏ,ƒ­{±è.ž‘5»ÅJ8’Áë`E¤îk2uDOøçŒí9¢§,¿m–ËÆ_:            ˆ•@qqq¬Q¯]ÈÈÈh—zud¥t_êíybs¼lK>äÚ/ÄæX÷ª÷%‹µ±W·P¶e´×ÙÔØX´ëˆ0%\ÿP’ � � � � � � � � � � � � � t6~Û¬O­ãÉ!3 íŒ!›�‹}Y »ÜìXª¬€ì€î�çNï 9,K¬ŠéH€H€H€H€H€H€H€H€H€H€H€H€H€H€Z“€®ý<²§X�<^V†Þ9VFrŸ_}rÛÁBÈ$ŸìgìK–¦-“ÀVÃd¯Œ ‡ÍË´0 :             èŒüvÈF½mcIì³dü9hË:×^ct\QV"gÃré‰C!g�”ñg:              �öC`Hwí½á”þ�Ë¿kãEïï† ‹ “ÓÒ!-3 l¡ö„Ãb]L c@ #             �ÎHÀï1kU[Ɔض ‚°ì[0¶Å]’eDùšS†AŽî#+\Ó‘ � � � � � � � � � � � � � ´g'MƒzýºÊ8ì‚,/—µ¥½)îSd�eɸ0-Œ… � � � � � � � � � � � � � tB~�%û[¶ "‡‚A‘•²†uŠßyëY# ûdp\èH€H€H€H€H€H€H€H€H€H€H€H€H€H aŒê™]o:]ìŒýêvÈÒ²RH¿îg -Œ               èŒüž°Ù¸Ø;ã`¥¬[í±mˆkO IÛb@ #             �%Ð;]Ö“¾òä!�üwd¨¼ Ò—fö3†�ŽH€H€H€H€H€H€H€H€H€H€H€H€H€H ð‡CaT;”1dlb ±pæPÈ£ú$CÒ‘ � � � � � � � � � � � � � $:�‘½d?ã Žù÷÷wAZ•>H±>¦#             è„ü¶Gv/*!G÷Í€­�Uµ*V ïöL›º‘ � tNú¶Rû•ºž‡ZsoãD¼*ÔŽD{ƒíÙv$ÙRg  èHô÷–ÜÜ\TJ]Q ÎŽTÇÎVí>|W«b% ¿¤©Ôõ„Ús?_{°*õ÷@­K^^ª£ÖÆ=zô€ŸW¬¶/% � � 4Ÿ€ŽÓ¸ù$™ � � � � � � � � � � � � � $$ÿуeN]¢P«  "º+‰ÎÔ] Õ·=Ïl˜¿Î+Tûi­�Î+,**B¾}ûB¶Ÿ]LÔª[5Ô��®Ï’ � �@û! «bèÛ6++ Ši�¢ýhHMê# 6%ºÆL}qN$@$@$@nú{‹»ÿ@«M7Ÿöï×ÌÉÉ�ªºÊ�†$%ÉN„jOœèýyý�MmâÕÚXÕU‘zõê…š&îožíÿ£†$@$@�‡-Œ;O[³¦$@$@$@$@$@$@$@$@$@$@$@$@$@$P�€¿Gº¿Z�€îì{ðàA(®sî’““á×¹„‰V›ºõÕy‚:/R¥Z>©ýîÞ½{‘¬OŸ>�ugÑ*¡:‹óСC(Mí¡[¥XB$@$@q& oX}£é–söãŒ8®Ùi{é¾Åq͘™‘ � � t"Ú—Ð_]ô—¥NTù¬ªþ¸ÿ~è®+Íèú‚ºÖ`G꽫…´û×NÝÛX¯Xý…°_¿~à�è¶Ô xRe  �E€Æª9Y             ˆ�€?3Õ{ì–‹iWTØEŞÇ=…ž’Oy¹'„Á¬Çn¹2㔳%ذ+ˆ'-ÕÓ%Ý“ÙÍÓ£‡Õ5ÃJI‰Sõf£;v¨m±Ú¶¦¥¥!vg˜O§öÓ:wÒÍAg¶Õ~ƺo1m‹ë½dy‚H€H ¡èMßn={öL(Ý;—²ºï ö;WÍY[   �øо„ö+t�™øåÍœâIÀ½¾�Úë¯d�Á.\-§õw?]eG pm¤x^aÌ‹H€H ³hûõ¨C‡[6zvìð|¹×[Q)ãÄ¡�Ƕåÿ*?f=hþš3ê«}*£µNY¦D ›‘ãpJ’�=Ð6Ì7Ö×£GU%è#             �öDÀß-µÍV¥†Uqø“5ÖŠ•ÞÜ}»é›®K—.­¯Kl€€¶K.éH€H€H€H ´_Á¾_YYYõ%‰c¸Îd,,,ŒcžÌŠH€H€Ú}ÓéŠ&ºsX{Ó°sê£Ö?�³î¬5 � � �@Ë …q˱mNÎjÿ}øðad¢¿†©MmsòLô´J@×_T2]»vE¥ZsÝÁDgHýI€H€H@ ´ª…±3Z\Z~ùÕ”M[*óòdÓ_¸jCÅѦiÀ¾8aNAÑÊC9É¡P…ÿÕÀyç$¥w¡�q´�é!            h[­7`¬†˜˜ðúpEêg+òrŰ؎nZ “Üú†�#§°ÃqØöx-�׉lyB!o® 4‘%sɼ ÒðYØéWþÇIqÈ¡ö ØF™PXrCBÉFˆí ‡DO=DR'D#DŽhhr¯.d'押¼”Ï6•¯Xá›}Œrš3f¬»ëŒ9µïÑÝJoõ¢;בrP«kå“™™ -=£P÷NÖ™Œ�‹8kK$@$Йè›NßzÜɸý´¼®­Ò~ô¡&$@$@$@ƒ€ö1´Ø™×´ko­™Ÿ/+5ª�±ZÖò÷@m#ýU°¢¢‡ú«`¯^½Ú[óQ  hçZoÀ 0ÀY¾o¿½ì½ÊÜ<k�Ž· ¤jPåœSVïÞV× »°Ø>tÈ1M‡¬¾}¬Œ » ÀÆ2×ÖÅtr’7;ã„á<%e26l‡­Ý->DV– ÚX¼¥°qªVÃÆ>ÊÞì�Hn$@$@$ÐÎ è[�Æí¼™¨ � � � Ä…€Ú§¦Öúù+.¹3“Æ())A"µùV›ÚÆçÑ1S¸×TJ´0î˜-ÍZ‘ � ´$³…pK yëiyAaxã¦`q1Šm;ù'k¸ºOyRR<©©ÞáíáCíÊ …­¡C¼Ã‡IxRÆP%CËã›%á–eçæÚú¦ãIK³»eø&ŒíÜ马ÄÀ²d x‡ ÁvÅ¡M[‚~³cïQ£ípH66–lñ7d‡pˆñc3©ƒ«?ß�Á¡�VÂþØöûtÐ e¨UMnQñè¸iÕøiä\�§‚ÁÐæ­I§Ìö5 i½½{U,Yš|ö|ìg,cÀ!�oÚTäXý‰}ø°]VæŸ>­â¿oX••²á±eùOœi5Ú“™™4{–Þ¸¼ÂÓ5û7o ‚v8–r�:°]ðezú¤ &Ж-��Ñ`± ”R[Ý;­ýéH�H€H€H€H€âC@÷ˆO^Ì¥yÔjVó`?¼>–n2JŒÆõ±b8 � � Ô&ÐÆ(Õ"Í/ðÀÆWÍp%Ô™­òˆ‚fˆµ®Sö¤¤b”7iÖLÿ±Ó‘iøðáàg›RÎ;G¬–C!o�¾£ÇÚåå¶î™eççûFŽðèú«R‡1¾štÒ,Ø [ii0J.ýÓ£Áy`R,¶Â+Nã7Pg”Úè ëN›•¨KJB;w!¹œMMõ�–±jöŽÆwFŠ#š#;,6‡5NÁ¦9¿@iH]éH€H€H€H€H€H€H€H€H€H€H€H€H€H í´Æ€±Œ®b÷_,(]\$û›å µÊÎø,Ìè*þ:¬‘ñV‰x…Çï îÜXûiŒ“ü�wß 8`âÈzÔÖàl_ÿ~0îrëÍhœʤàÆM:Ü[ú»‡B_îIÿÉM0MïßgÃòز°ú4vAö�Sñò«²`5•áç°%CÈaV®.½ÿ·˜C¾aCºþö7PDFŒQ)Õ.ªa¤PÔ«îSØi¹¸X�@6ÁDXgwºgÌEÊäß*ʧ¥gÂr/Ÿ*âô‘ � t&ì�t¦Öf]I€H€H€H€Úž€{=þ*X_{¸É¸‰ÕŸá$@$@$@n­´‡1Š”QÒ²rŒÈš!c ¶ÊÿŽS�,+í„×>%!¢¸®¨¨xg©•‘n¥¤T,}W}Æ©p(ìŸ6£Å寽^rÿƒ%ü¶ì™EHà›0ÁNNA¾Ð t8?¸}Gù¿_BÚÔ .°SR`wܽ;´m[ÒôiÉsN=C!kÀ,C-êˆ1ÊÄÆ~ÛŸd¤b—S¢´ù+Rã#Äœ©ûÆ¡Ãeeˆ.U¡#             �6%ÐJÆ:D*½b^ì.�z£ž(Žh<ø»^ ›÷Z>_à“5¡}û=•Á­[½=³œ]Ò’¦LFþ¯½ú|â{ûôN9íÔ¤1GY}zKfØ~9$ù+?ø õksýc�Jšq\Åâwì²`Ùs/dÜøƒ.W_™|â á‚‚¤ <))…7ýă ƒ±[0Ry ¶ÙÞXµ2ÆÇ0@vŠÖ¿‘# ŒúkœBõÍ&Äç$o̵éÑ=z“®sÅUÓmZw®VgmI€H€Z‹×Øh-Ò,‡ZŠ€îê·råJ°zõjÈ]»vAæççCê·F÷îÝá5jä´iÓ 'NœÙ„E’�ŠŽH€H€H 9Ü¿qñ]\I77±úâ3œH€H€HÀM ÅŒ£Ã¢ð„ØÃö¸K1 qVr6!ÑS–í çä†öî ÃF¹¤¤ðÖÛq.\Zjef†öåäxû÷Gt¬V-cÉi)( TPX¹rUòÄ ¾!CÂyy¡={íŠ ä.,*}î….—\„u­+>X�=�+?ZYtϽióÎò ŠÿC–¿¹8¸o¿·Gw)17ÏÑ‹HWVblX*CYg;¢'£ªjX�§Ps@p3qwe"™ñ/ � � � � � � � � � � � � � ´�0vW«=ë*Îî@øu´U‡�UF#DOÁSò÷g,¿/\\ [áP^âÀÚ8˜“Spëívy™'*¸ãvy6$Æà-Æk±HtÉãO”¦¥ÚeåbyüþvQ±íõbsâŠ+›6ÃtØÆð-2òy1´\¹öS_ÏžØ&9œ_€˜°EF)…wýÒe·a óz½Á ~ŠâÊ=ÉÉPm¥¬êCàZ)Ѱú)I‚m’éH€H€H€H€H€H  è·Ëûï¿�2-’½{ÔžXUHII�§'¾†0ÃÕ|°äääÀ¿oß>ÈeË–A<ò /„3f $ � � �@ëˆüÙ:¥u„RH¬#´"ë@$@$кZiÀ/iqÁ 3ÖaÖj­#(r>zÊ.,�0¬,qbø‡ÂÊhòÿÁ2'‚îlŒÁZŒ.™5¥1à\¢iådÈ£d'²æ†¥§C¡àþýN ß‡=�=Á`(7O3wÔ†CI†(.²¦tTCÍÉ-kœr îhô“ � � � � � � � � � � � � �@ëhÝc¬&×CmD�1F ¦­J �zªÎ™��õÐ5Ä+uGŽŒFGK©M¶4®K =‚ c¨¸­-Œoøùï¡e÷n�Cõ�µŽâ«ÃaСkÖo…Ìв_±<ˆ›3¨¿Ø-Cõù…Å�ÿïæï@¦wI�[̈H€H€H€H€:+µ~òÉ'`É’%�ºKñœ9sà?ñÄ!‡ éÞ.'ˆu›<žÍ›7C.^¼Rw;¾çž{àW;ãSO=~:       �D'ÐJÆŠIÌ‹až¬säØ ÆÊ Ï5œ†#ðˆ§3§FªV8å.Úí×êˆiq[×ËC             �NK •ŒÍÌ+•%©Ã®5¥ks�²Ö8U_8¢Õ8å>tûkÄl“S/„UkåCµžúL”;iÜÈ#–^R* }«…ñ1“d¯²SfN=bªÆFX»ás$yôï¯@8$T2 ±™0> � � � � �@”¾ÂàwÛ÷ë'+ ]wÝu�4ÔßöûåSqܸqQ¹nÝ:ø~øaȧŸ~2)) röìÙ�­ïìÊZTf>¯|²:QF†ìÄY3ª>�8QZ i+l‰›šÑ 2­¾ŒÃEȹ°T4´­dÈŒîé�B�®m„Ql6®òxÊe!-�7EZ¤kªOj¹P¹´`I…¤òx¥»tMƒl�‹EJ #     �6$Ъ_:v0dÛaÛòÖãU;àȾÃQ«`Áâ:U-¼�SÑx&ÃèQUnðé)œ‹Gãµà)ËÂO6aZKSБ � � � � � � � � � � � � ´=�V0V ã`qqå¡C°0–qZü‹ŽÒ*½ÕaÜÚ§4¤ÎTM>-ÑÝZD“OÕÐÖŠ×<ù£?¬€ �¹ò,»2÷­ÃÄX,DK¾Ü y¨ „gå]²ó˃!/¸óvÈ3²ëH†ð¦:Ñ0ïÃ?AÞò¸XfR¿ yóCCŽí }o©ceÁ>È›¥Ž«ÖJíÎY99í0ä®}bLyñ7VçëÖQ‡ô[Þ#9±Þ.É“ªJ‚‚µK�ž�õq‡á컿¿òÉM¢ÿ�óî€üù™ƒ «_rÍì]|/ä‹vBÚYgAþô×çBŽì -ˆªÐ‘ � � � � �€C •Œµ´ŒÓæ¦Lšè7 £uÎð[–¯Á•ß:'ÖšH€H€H€H€H€H€H€H€H€H€H€H€H M´Ò€±e\æÂ Ò¼�}.nL«+*Û¤±ë+´Üèr­•íŲá°:M“=Àè: �ÐTê�¹è ìc7ñëW@^=W¬Cdo.ºvKÀ,aл‹üI5þæk ˆuÅÞŠæçÄ$Ä%eòü ò8;Ëì«—–.ÏíÎþ¢�3ZfG$@ I ²RÞ8‹-‚ôùäÍ û7ͶØ� ;;‡—_~9äÿøGH-åG?ú‘;Z;ð‹]kɾM�/yòÅ77B÷ý{—êËXdéî5�Ë·ÉnµbUu>Yêèã�†ìm^®Á¼íð¯ßYy¤—¹œ/ØiVô�.tbËšO Ë«›²ÊÙZÎJ•^úè±bkkŒ¢«Å(ùìE?þÆH±±�‹óE6§^6r\†«£”ýží“/ˆ}ûÄžøË�Û ·nZ¹a»X÷V:8$ÕÒýbÞûÃy¢×Ÿ|2·V4àMïy?ƒ¼{ÁpÈ#ôj*6#Î wŠðâÀ �×ýú;�SD…váì¼UÐãŸO/‡<ÐXSëzk Õ;ïJÈÓ†·›ªÖ«-O� td×_}´z>ø`ÔO � � $ �7ÞxªîÞ½R¿s½X#¹y #ƒ'žxr€± �;wnó²l¥ÔÍ­yãÔlg¥�S>^± !^$™ � � � � � � � � � � � � �@ó´’…±*‰�Œ›§-SÇ™@~a1r¼ã×�Cê¬wß»Tf—Ô×H P±ýÔâ�2ë?d‹…DFo±Ÿ m1 ´sçí.&½­ä¸#\ÄZ•ÒO#êWûW±¬¡k¡/ÄÂæöÿ} ²1v6±jãr>¢Þùó¯AÆyÆXUèðñ䙹ý�G ÿóY ޵õõ™‰Ü.\x dO—AW‹`V$@��ÀÊ•+Qëü|±p�3g¤ÎkŽŠc�=Y½þúë�ëׯ‡TÛÓþýûÇ«ˆfä#³¹÷¿sä�O|Yf>C-ü£FeCZ«¿„T;᢭Kà{ýíO!«­•:!7L?R-Œ;߆ÿ�¾ )=§F¹À:Dáw"cq¾áßD´ÿ÷3áÙ¥Ú4o©L°P濺Fl£«éŒã&»dé\~¥¶l`'Âß|@¬xߨ£#¯®äþ!Oš)WÅäI²×õÐò7!ÕYþ^ð /ä»:aî?Ò^;å*Ú!ÝÒF¸À.±_kº°ISÆÁ?¬‹ä¶çíßAþiI.dõß ä ^¸¿ª’{_!w¬¨ûK¨2_,ª%G¸‚%ºS®“Tü«rB sæ�?œ;ÒÝ\v¥TiÇZi©-Ò•ˆ‹“ò»Ï©^³¸dÌLH€H€ŠÀóÏ?}ÿö·¿ÅEëädy>÷ÜsqÉ�™�@g pà€¬!ô¿ÿû¿�û÷ïo¡*÷ë'+Ýzë­�}ûr¤&þ˜÷îÝ‹L_|QÖpÊË“õ“n¼ñFȦÙë(Û}÷݇–/_9¾Œ²%ŠsË$ŠÎÔ“H€H€H€H€H€H€H€H€H€H€H€H€H€H ZÉÂX÷0¦…qZ,®YtMkůž8 ²¬¢j–¼ÎžÈî/3Áé:�°Ì²_ùß·!êTy³ïiÎÇfN¢L—oª³º#å¤3çAN¦‰\S)2 �@;& ÍÒýë ׬)�£žþQbu®š ‰‘ � Ä�ÀêÕ«£¹Ìœ)+Ä×áûjÎÛ·o‡_K<óÌ3ã[PÍÜÌšU¶± »×¯2OQýÞTª(CÚJ[fH÷œõÈÏû×i_@>÷Ù ÈÍR‹Œ'B~sà$ÈpÑfÈ7_úRìª;oÆ@L™&_Ob©z$WqPrÛ°»Òöö„5e(d7ü;’óö’øÉ±¼|ƒó+§M„ìÝÈ áå_JMßYs²Êên—6GÇ�>²¬/óêg]GV:Fžpä˜î�k*»H€¾·\,ªóõ;>:  �ÎM`üøñ°pá¸`P ã¸dÅLH “øàYÅSm‹Ï;Jõ¢E‹�³–õ�o|£…JéÌÙ^z饨~NNä²eË õk÷†n€?v;ãڶųfÍBº/2< á÷•’U¢’$@$@$@$@$@$@$@$@$@$@$@$@$@$@±ÀTÜX&-Ç’UCqÔ¸¡<×|>™1pÖ\™-^Ÿ+)•¹ùtƒ@Ég¯¡"/|R éÌ76Çß!2_½ÉÎ7IûœòuÈÉ­òTi²¦(¡´áö÷ò!Ùè´ç‘kç ŒsÎË–c»9:c´�äc�í·ï¸rBš»1Ùýú=�üW,cüÓe?¼;/”YÃÕwË“?´ü÷�ÿ÷¯í�1_ˆK¾~S�Ñ)LjµYJ#²K§k߀üxwÃVO�È”QI€H �]»v!$%EžOC‡­q6^‡cÇŽ�f¥%F[ȳìþ+‘ócëjÙ÷n~á?¹B¤”ìþûÝÉŽKN3¯Ûb™3žtÛ°Ê·pZïa�c3$<œWù�ùD>_u—2ê \5ªzhÝGòfÎYz?ä-�¯ƒ $Ë[cÁÿ\ 9¶+[7Õ%�FÊÙçœ Ù˜œEžvYÃÆÙÑpø©ß‰p¶ä®Xÿñok£wYXzJ›×Šþ!ß È‰£ÄúÙ2_"=§È5ð?Üm�4°ì(¼öÑ|Ù^!�uœØ=/œÞR¾�«œôÊ},1Ÿý0ÒΘ ¹àÒ ÔjAï^¯žª;+ÇO•–š7äq«§ô„÷¿…�­ïѸ’ �@§&pÔQG¡þ*;5VžÚˆ@ PõUÒÒÆî²Ú¨º¶Xµ!V{b­¤Ú«?;ãúl‹cIÛÞ°ÊÈAâºÊÊÊ�;w~öÙg0üǘ46ý3fÌ AƒºtéÒp¥ ŽSßYdÞ³§|‹Ò‘ � � � � � � � � � � � � �@BÀ€±Z%™IÔ-\]û;.…ƒÁ'Ÿ|òoûÛŠ+ÊË«¶Äv “&Mš?þ•W^Ù»·L®Ó=ôÐC·ß~{�§4°>U±!Ö\ðÔSO5�–§H °‹6@«ÿýÈœ°Üïþ�Ç@ž:­?dþU9y&äm�9ìïmûr+käÉ'ˆíEz}� KŒU‡Ô{'éZ„@ÑA™ËöÌ:±�ˆÉù¤}g�S\Fj)V rÎè&w^ W¬�JõUì‘v,.¯jM»²!:ÃIö÷'7aZ¯�ÝÒ«ß»r–®õø†Î@aóÏ�™ÑˆbÅÚi}©<�iaÜlŒJ$ÐHùù²‰Îs­ïÓ¦‘YÖ=+++ª%FÛ�GÞªû^ò§¯‹Yè°s/„ƒâä\¹éEÈ;ÿµ²êÃÕ&WËÓ{Ó²‹Õo–V‹…�z]X¬o ÜŠ·á¿÷{K ëëPãT•óJ/ý·Þ yV#­Q«2‰‹Ï–úÞ/V¶eÚc±Å;Ïé¾HP @ì}÷‰×’UQºVug€@¾)Šòź÷p†µÂ¶¨B³†7&gÞŠxëvÊÎÁÞ>“ �ê[•uF¶|¿Lˆ¨îÂb7ž¿øŸºWD×Aã §MåªôrF*°{ÿË�–±0ö$€¬ÙÁzd- cœ¢#    HPM³3îH¶ÅÚpÕ>‚¥-¿øâ‹þð‡ÿþ÷¿k+ ›ã��{æ™gî¿ÿþ¯~õ«µã  ‰!ç:O1°É �˜3#� � � � � � � � � � � � � �@kH¼ã­[·žsÎ9ëÖÉFP 8D8ûì³ÿô§?-\¸°�hM8Õr3ô› L\’‰[ P5‚®sÞ³zÈ.§t O ”‹*|ô�G!ï +iäüï~òëCÅÒ±º“8Û=B¾o,Œ}ý¦Áú‚Ù�½c2ˆ@DºV"à5¦™É17ŒObV·Ÿh%UYLMŸ#äå_>¹,b>\#Nx­XÀܽÖ,÷ìŒïß 9ÏL? � � ¸ø|b I¿®åœ{*­ÎÈn¹²4ç)—ÜÏ]•býY¼îÈûžYrä÷¯8²WJ:d`õ HµæMñøNÑ2s œ•ïqÒ/òeÉÀ§ÌMƒ –î‚üøýM�b[ÝÙ¶|1¹k]ý|ƒG¶è º oŒï•¶‹9vƒY5ódp2xéÎ_C¾]�qõÁ·ÂÙŸ½eJJ™…?ß¿VöëUg½Ïïny$K/Ul‘ ?—¶¥3'��ËoÆú¹ÿd™V>w0„§[¶\uõ¤%,=[Ö9u®ìi§ ƒìZWT„Ó‘ � � � � $:�ØíŒ;žm±¶],ßcí¨•KJJ¾÷½ïq´X5...¾êª«ÞzK?[ÛQ-¨ � � � � � � � � � � � � � ´±ÌÂ�›žÍ·Í}ôÑGßy§æÄä#FL›6­k×®;vìX¹reaaaTcø±xõ»ï¾›™Y5Á9z6êIKKCòè¡ÛƒM‹srr Ý�ÆŸ—/¬î¼÷¯�µëxÅ…g"|ä°��t I $vkÿ){¶ýåÙu,l%CŽüÆ¥�së°-F0]‡ óû@®�Ÿ@jSÕŸØ9�œ-6.ÉŽ˜¼k ¶}¹rG)¤·¯ìÀwℾ�‘¶XŒeg™£|xéH€H€H Ý»Ë[2�jë÷GÞ$uDob�毉þàjbµ’uí#ß&]ÍÞÃE{«lC­´ïŸ� Ù×+v¹{KP™!�5åtÈsÏé }ù<þ‰“7¯o°ØŸsü ÈpÎRÈ/WÔmaŒSÆIžý¿þcÈŸž.yFfaË^¼×¼ùÔßCn3†ÌI=§ÂÿÍk¿y\y�‡KvC~¶Kzæ£ÇÊ[^|Ð&_¬¢¹ã ÈuNß@ÂÒùd?ã®æ: IƒÄè„eFr„h݉ʼcýÈJOÈãÆ�T†ðg®�÷Ÿ…ÿ�íA'¬®?ùë^EðÓGX¿Ì¤,Ùˆ?oþ]¤:ß àYpÒ0ÈÚ«69‘ø‡H€H€H€H€H ¡4lg|ýõ×£6<ðäòåË!gÍšyà 7@¶ÎÊ[(¨…\ü5h!E‘-F~øawþééé·ÞzëÕW_­?ˆ`ɵõë×ÿøÇ?~ã�7¢Ñòì³Ï~÷»ß�†Ôö\z饿ùÍoj‡#dñâÅóçÏw¦Nž<¹Î˜ $             �Ä"�HƮ߲eKj;»~@IDAT”/Æêýë_c´8‚�º&MšôÜsÏÍ›7oÉ’%ÑðE‹]vÙeII2ǹN‡S02®ó›u9r=›••µ`Á‚:c&b`f· ¨=ÿô™�2#^�΃1”¶Å"‰ù×.ÞÅ¿Ø_2–=¿"Vãã÷=yÿ¯2[(;(ÖÉbs«”íb'ñÇ»Åê±¾»(iÌ7pöš³ÇBÖ}/á �€›@òPÍZ(2âÄfçKbÕ´ÚXûGÍ�ÿ‚‹e¢Rõ;KbØAG$@$@u5jB÷íÛ¹yófÈqãÆÕ¯yAî­‚F�ݼÌâ‘:XŒ\öçV@´#‹^°Ç³û¹; ¯|¢†Û‰ãE·_)²ÆŠ1p�NŒ—½ÉòfNOY±_öQ^úÉã߈õp…¯ä¤ùB.gýòg�€L2;{}>íþy�qv_ à ëÄÎØ“|,ĸa©â¯æ¤§T°} ä[o•W;¿ƒ”Bf^ìƶ¬ïµái)»G#šJâm…<$Õ¢#  Hxç�wêPQ!½ÖÖt))ÒÛÄXIkʲH A ÔggüÙgŸ¡FºÚVG²-ÖfjÜWJÛ6íûï¿â¨ÇüW\=Œz°¸ô-·Ü’œ\µ$Õ† ô·’hœ·±ûÖ¸v+ãÔœ9sôÇw4úI€H€H€H€H€H€H€H€H€H€H€H€H€H  4zúrs*Ùœ=Œaæ»fÍwé0#v� »OwÜqÄp¯îß¿?//oðàÁÑ85FˆkF£½ôÒKˆbN¯Ž¶‰GUu˦©¡9x-™ò 2ç½>WRjæn›ÓÍ/·¾R4g=ÛüRšŸC}z&V¸•9 Ï¿þ6ÈËŲ¤ÛWd‡­­¿} róæ†vóB„*W~þí›EÖçRzÊuÂ)ïõñ‰W¸Ï<³#n± ùüÝ|È?orŒhŽ\�WRŸs^7ÈcëÞºýÈy0FSØÒF‘v’¿_¾ñKÈ?½¼Ò}7Úa™¥wSåû¿ƒÿûʳÚí|ÃÎÁáw§»Ãèom¡]+Pä«/î…”9º±:iíýÛÜmkJÆ# �Ø L›6 ‘—-[‰Mv ãka¬û"/]º9ëÌë¶Ý¸'´Sv¢½ïGÿ€Ìí!+ß|çx±:ÍÈ�•ª&ãÀU”ˆÕiÀØÂ&§É>¸ul›k¦ GÌŒåoŸÉb ra?yKûý!ŸûÃc�ËVî‚,›÷¼%¹ š"«ƒd¤þÖ³ò[°s-äªí�aóÞpÌWá?iRÈtóª·RÃ?ã±Kk‹íòÐÌš}ÖtÁ/òþ‹"[Ɖ^Ÿ’(…ëG@æhgÅôY½þBþ5ê‡�ŒÏƒ|åW²ªj+Åì¼Ýuæå߇œ“]sŽ{p·�_[(´ýãÇCŽèZ›’¤êqÔi�g¥VoW¹o5þ.^%ïñ�¯/ää“¥k•]Û\¡âø·oõ[�«öÖ�§ÄjÀÙb¿yÉ‹"ˆÆS$@$P÷/]îßÐêŠÛô0Ý—1öôEEEÑÈ×]w]Ô‹çÁŒ%Zâ¸Y5!y%ÑUdV¯–7ZK»©S§¢ˆ£Ž:ª¥ ê$ù/\¸5m+ ãN™Õ$�¸Я]}?ºm‹{õ’5¥4\ãÄ¥¸6ÏDFÂá' ìaœ™™©ÚbìyÆŒõiÞ­[7lo=‹Áæ²2ÍŠ:,¿Cäèa�ëQWVV>ùä“Ñ8ðŒ?~öìÙîúI€H€H€H€H€H€H€H€H€H€H€H€H€H q $Ì€1¶~õÕWÝÛ »G|k4@yyy�:560ÆÎÇ]t‘ZÇñs7É:/HöìŸÞyF-KVºœ±0ž8!s­Ç.”u&þðŒË¶X‚qBlpw,v¨»å8â,ɡDZy=û3!ä,ƒ|ö/Òë.ùÎe�' 9ý«"á¼B~ÄD©KÕœèØÒò¶#âÆ]B,C’ð�ë¿ï@ºû!v@8¼ùû ½×Ì…¬Ø¹rGÓ¶öнï¤È6ÔðGœô�ön’vÏ ËOÃÆ�„ìùŒ�?â¼ðôŸ.]ÞsëY‘¥ì“|œ]êX�ÆsØ$ÈéÇÊ,~™‡/Nfîoÿò9È«…q÷áðO>öXÈÞõM¸Ç9º–'àO‘0fb\P$F,t @À6ÆjIl%É®„ÃN»ò‘3šd$bIªCï¬M€šw\½™CP¹qÃz@ŠÕX¬NÚ®p×:Èíy±XsÅš/ã‘ �€›€®¥tá…²î=÷ÜùðÃCÞrË-�ÙÙÙ�Ms«V­BÂ^xRçàžþùM˪ ©Þ{ô7Hµh§ôWÝΛ5 ‡ç\:ræÑý ‹>yò_{jÆôØyßXjÞ¿Æ¿ö-©K™Ë®4lö4EVè™:\f»×wÁ!œÕu,ä™W_9Û[¹ç³� —/—}w—˜ü-yã˜z äésN‚œ>¶dZ0rÍ'Û wíß­w‹µëák¯†œ762Ò3‡÷H.y*bœûý‹!Ç6â…$|øäMËjGØnØ.Bœu¯½ ¹©ÒÔ¾ˆóvJÅ;!_ÿƒ�?é[·Cþb�ûyë}ùöo!ÿ²DZÁwô¹�?¼@L¶3ª}eH5ºö©U™°X´oþt¤î:<ñ(áÙVˆÝ†Î’}ÎN¸è:ÈyC§uxÿ[Hu÷Ïž‚Ü¢JøèH€H Þ»¯°{ÏãÆ¦�·î�1¿sÏ•7©ÊÎXÖ™H€Z’€Úßwß}(dùòå�³fÍ‚ÔwŸÚk¸jÑ1ìŒ÷•¢5oçMøÜs2ÖuóæÍ«s—âh„ÚžgŸ}öÀ�îð‹/¾Øç«õÉêŽA? � � � � � � � � � � � � � $÷„ß„R¼e_{íµ;ï¼ÛGÏ6ìÛßþvô0¶@^´h‘;æøñãçΕ­˜:˜ËÍ+@�îþíÓÑz ì'³ž|­Ø"Б ´7ÉY2mÅÙ§Í’?'_&ÖáÛ«žy1©l’Æ“‘âE ¼´Y…MKy»É*]Ì~Ò»ßxþ§WÊ®x±4£7S¬�.½ædÈÚÖN¤k5þ±g¡¬ï]%[#f4¢T±àZÿ„XÝûvÓ¶vlDaŒJ$ÐÉ `¥%P;ã§Ÿ–>ÿ]wÝyùå—CkÖ�Q[d6à‚A1iÔ}‹Õ¶X?¸z÷î�ðÆÎÍm  #ž=A¾Vzø‡CÓ[ös}ûC±jµúȾ°Ç˜}|3½òVݱîUÈÿ¼+¶¿õ;Ù»wÓ’—DV‹$æ®éû³ GÿÏW #»äÊ»:P,ë3íÛ-–Á[6­€\¶üÈ=%bA«os+E,_�žqä„~²smáV™“þò§¢[i©È²b)¥‹Wdy‰”ÿâý÷B_säÂÉ�]Á‰ZЕn~¹?³\,ƒ­�'BžÔCö3^º^jÝÿ«òÅ}NÞ��þäé_‘6êWí÷±ö÷ê¬t¹~²†tx;gkÿ±oEàºr5z»O‚3€Sºksb � � � � �@Ó Ôg[|à ò¥¦{«=±–ё쌽MÇÖþRîØ±ãºë®+--�ªæ÷ûñ‹_ôé#Ÿë±»O>ùä£�d=±¨ûæ7¿ûÊÑTô� � � � � � � � � � � � � �@{&PmÆo{Vôˆºaœøª«®úüóÏÝ11æ�¥¤Ý!±øŸxâ �D¯‘1T¼`Á‚X&\œ¬Ý óEçœ Y^!6Ojaœp¡Âu( €/CÊÌù#ö¹eUvŒå¹{²k—Ø^Dæ�HÜ}ù²§µ:»LRíÙµ ²LL p’GFŸlȬÔ¢ñT LÍ–‡¶³‡±ÉÃ2-¢²‰™2Y‹�{ªø°ÜGº�¢·—Ø é^}9;áÿüóBȪ;õ8oŸq8£[Ò¸H & ¨FàÔS¥·�©´�O=õäÿøGÈ×_ræÌ™�cÇŽ…ÌÊÊ‚ÔO¡œœø×­“=×—.] yè�ì «û«m1&ì"DwoúÁ~JJ d˹á_ÿ2ÿ¿sÅJµü£‡!— c§¯ë,oÈ�ÇŸ9aÍ ×IwØã(ö¾ç~Ml‘«Û³Jê¼µ²óî¿VHí¤á�_;k dĶ^œ��†?~ìVÈ?¯–þs}ïn»â Înxç‘øW¿³¼¢mZºXÊJwC.~HVIúá��ç-ßkGè€#FKºpþdÿìco@î w�œöµ9�cÖˆuµ\p–ì»<ñ¹~ì+!ËÄZúÿú2ˆª(�W¹V?ÿ-ßÒ]Ǥ —"äŽ+�…ÌtNHŠ¢mr5nJPú$iÇÁì � � � � � �@<Äb[¬åtT;cÝéîöÛoã ùˆ�ºÓN;íç?ÿyô0FϾ}ût±µhüSN9E@‰†ÐC$@$@$@$@$@$@$@$@$@$@$@$@$@€@±0ÆŽ\>ø »=FŒ�‰ó]ºÈ èF9삼ËXRj*ìéuÉ%—4*‡Ь;–;Eì è:�ÐîŨÔ}¿”ýÆ×cþ°óÕßâì¯6TûðÙ×í�Ÿ‹<‚³ÄnòÌŸŠ=Áy£ÄN‚.n¼ÂsæyhëLŸÐ~Y~ÿ¡·emc6ƒ¿18Kò9ýë]!§fÄŸQâ@@ìõsöÉ>‹!c?Óµ¯ì¿ØÕẌõ–8iÕó~y냜cü1.´õyüýÉoÞ‚”V§#  �Æ8ùä“‘høp±�]´häúõë!·oßÙ°ÓÙÓ3fÌ@´óÏ?R÷-VÛâ�7"¤uìŒ}Æ‚Ùg,TËëUZúK½Ç� yÝ­Ò;}è—ƒ\³w5äÊ=S!¯œ/²OŠX \-vÀ�¬•wrØ’ïDZç~ òÔ!U»íâPœÕbÌÔñ�=‰¥löÀÞ�Y©ò®/²ûAŽ’™Þ% 2ÍÚùæ_¤½1(iOþŸ[ ç�6_©Åá/Î9¨käê¿ý ò÷ËöC®_¹ rîØ)�Õ¬œqܺ.T,úì5Ÿ©GŸÿ¹Ç Õ]bx\Íy»Ê:CƒÍÚFû‚Ò>ÅÅÒKu[WKþ%Å"Ý.¹2„ÃêŸ/²ëóŽõ +=bÅ>mÜPÈ–YÒHJ.úbä§{¤§íõIÿÙkK�¶Ýç•þ›ü£#    Hd±Û»kÙñìŒ;Â×ͪU«°ô´{iŒcüxذaîÆ‹Å …0öìŽ9räÈSN9ÅB? � � � � � � � � � � � � � t  oa|ðàÁ+®¸ÒÝ·ÝvÛ™gžé‰Ñ¿zõê+d+¦¨;ï¼ózô� Ôt$@$ІRú‹Åì�b”*ÿ<žÝŒ…ñ ±Ù¨i—a"Ô-|²ÕÛ¤Óë>ÉÐ!:€l¿Ø"–1¶G^»Ã÷�¬þ6-›$3j³åžÏJ‘¸ÚîðБ � �@“ "ö¬?úÑ� ±$¾€ u�¥üü|øu–tf¦ìJ;zôhÈÉ“'CêÇðD�î[ÜúvÆQŽèIêâ\qm!ä/–ÄŸ½ú;ÈÛ7yÒ !°ì½�eYeܹ×C^=w0d-ûb„ÉÛ8kæµ�÷Ψ`3ä�? ¹dÝ&ÈÞ�—.œ98,–©«ô¥nVyÉè‘��ÒõÏ@>òärÈݾ¡�'.¸rþ9×AÞ0]Þû#ÇõƒL�åõ–Ú0«d™­�q‹3v´9b'-¾ú]R¶0œwŠX<ï?id¿ôjvá_ÝN*Üg–ÔåÞén[á0Bv¿~7äÿ•½¢}“.�¼ý²©�Â%â¬$±À®¶ÏtÅN„lX'½_Û/Wã¸áé�-ãzjHê÷Ò£ÿ�Ü/Š×pÒFÙƒ¤G'½·X�Ø+Þ+9ﲄRì.œ“‹Èå 7UìÙ1& � � � �@³ $%ɯ¬êt §ÈQüÿºËŠî�;ǦÙ»™u$;ãÆ}¥¸)´ ¸þúë×®]ëVæÒK/½é¦›Ü!±ûqc—”È7³ºŒŒ ]r-À¿$@$@$@$@$@$@$@$@$@$@$@$@$@$ÐqT7pJ´zÝ{ï½ÿüç?ÝZO™2å¾ûîó™M†Üá±ø>üì³Ïºcžxâ‰ãÆ�s‡ÐO DÀ7âlh{÷Ã󩳨ìxñ6Èÿ{Uf²{Ç\yçÄž W V¾$±¥ ‹K /œ+–à Z;(Ö K?n¤mqÜbF�#>ð|²_î,�oÄè!Ý!­jöäëò‚…“8ݦÉî¼Î™ÑðS=$ûòîZùä?ÿþ_ÈÏ ä©îí&_Ž�Ÿ™-KÃÔõò¶äD¿ §@žv’¬AòÌ›b£¼ìÉ{ ?Z2ò¼K΃Ó°ˆu•Áû×;E¶ŒKC¶cÏù®ÈdcEa‹…qÃÎ—Ú º+'ªô… Òª¾¬d±+Îì. zU³'vâWý ~¹k ÄÀÖ?zäÈÌØUå»/)[lë�î"¥ì7Sʽ~á�Ù{䨩҂ߘ-ýºFÌÁç þ;�Ü!ÿèH€H€H€H€™ÀñÇ˪Eo¿ý6dËY÷ë'+iY‰L«ýêþøã�C¹åË—CΚ5 àBªÝ0<1ºúìŒ{÷î�.»ì²óiÛh�øºi[Ek—þÊ+¯Üu×]îp ÿóŸÿÜ«W/w`ìþ×_]—b‹&�±²ßŸØcêѺÐC$@$@$@$@$@$@$@$@$@$@$@$@$@5$êhèŽ;®¹æšÒÒ*ƒ+Xß}÷ÝÓ¦M«QÃC¡Ð3ÏzÔ0ÈÁAŽ%óú+6.�|õ¥W ßÝ.vƶى¶û¸ùð_6$dábé»x�¼±½•» ÷8/|)Ñg^ä¾nCá?aá�!ÇO_ùÜÿ€|w×{�OÞý)äÇ_»òŠy²_oﺶSFxk:_r J„÷B¥Å¿yòÕ½Nµk(,9Œm…Àš'á¿ãGò>­ÝEMžò-„ßvñxÈÜMk!sÌžÐÙFÁß»¥»D)R{ ò£�YôGt$@$@$Ð^<÷ÜsPå‰'žh…`U…RÎ=÷ÜV(‹E�@¢èÛ·/Týío›( SÏ: $_| ,€Ôg]cm‹Ýٺ팳²²pjÀY—(Q\Kfµ‡¢¢¢ï}ï{;wîtçŽñãË/¿ÜÒ(ÿ† `aìN2þüž={ºCè'             �ŽD ñ,Œaü“ŸüäÍ7ßt7ÃìÙ³±<µÕŒI¿O>ùdYYÕVL©©©—\r‰»ˆã÷ûeöý¿_“™ìkÖo•z5È-¬š¾êSÙaëË}2s?nÎXu±[LêT·¾½eæ �@¿‘é€ð‡óº@ª…]!«Ï¼Rù…c onà$±K~ä4c=cl[Ãß+öýå¤ãJJe½ùGoöáO�åk‹÷@†<òìrÂTÈAu¼{eþVßÓyÓÜlÈjó¹ÂùÙü®X,í¬”|>_¾²lS¤¶�×ì)(çèH€H€H -´Ž�qzºô…Ö½ü"ävç3EÞ™YCeÖv�ð—�ÿÓï —æº{7ÒÿIÊËÔé'Ì„÷Ä1ý!YQ¤h’3_Ê ÒoL¶^±A9ã‡bY>7»q5°ÊÕø»ÿûäŽÐ" � �@‡'0aÂÔqáÂ…­PS-« b$@$ÐÊæÎ�÷ÕÎøŠ+®ˆ{Î-�aã¾RZZ›XòÿË_þòðûc:!]»º@ܧcðçåå½ø¢üèusæÌ™›àÍ%bdu‘IH§ÏyõÊœ­�']yËd‰ïÏ’³½²Ò «»n8ìï} ò/¯ŠíT5ÃKòËž0²WâMƒÖ‰ê’§\Õo¿t¤Üi±:¹ï6-º ò‘÷å>¥# �ŽD >;c�ò{ýõ×7³²Þ>c‘ÃI'�94)²÷` 9æ˜Ñ�))ò>=ãìY�åŸg@6 rĈá�Cô€L­ö®”ç÷øÙ²ßøÙgC–åÊ{vûçÛDîO�œtúÑ�]ÕÈô¨³à¿ö§r0mä nn‹a±�|ú�ûIßÊ›$ïô®=³!ÇL� yT=/ +U¬f�½ð&È¡³Š 3³{CŠ5�¨’š}<äùJ­Ã>±®ÖCj×£Zíp×eÜiˆñí+�ƒ´-á9,U«Ú`BÓ÷è>üXD:Þ/Ì»õ•šz¼’Ãñß•wÜÑÒÁl–³Òz!}JþÈuÛ%;«ë$ȱÙÒói¾ófʵqÜLÉ)äÙÝCÝ%z#œ•.×ÞɈ%ú1¡4tPd�î�+ËNž‚Tó¿#LJmiæžÜ×èH€H  <øàƒmP*‹ŒÐßÛù«x$3þ%  �ÖZÉ).¤÷íÛwõÕW>|8š›ÏçûÙÏ~ÖL›q ??õÔSÑ<áõÚfÈJ¯ä‘š.¶D}‡É®EÇ3²GÓ²FJº#!ÊÁO—@®Ù/~_¯ñ�3§Š]W]`®ÓÉu›»ÅXŸçˆßê"VM'‰L—›5\Ïž²‹ds:u PÉQqïÞ½ ¢)Õ쌴·¬¶Åiib[yå•WvF¬s HµèãG oúà Hï ².˽ß[Û.øGG$Ðòt÷·æì×ò:v–8€ª@bµÅÎRí&Õ³¤DÖùÈÌ”ßCúö•õ?èH€‹@q±ü"M—¸22dµ'ºD$�H?-×þE îî�…ûž={ê‹öüóÏ»G‹Ñëºà‚ ê‹Ìp             è0iÀ P7™{}i‹ŠŠþùϺ³=î¸ã¦L‘9Ët$ÐY ˆÝ퀙—C^cöôê¬ÚK½×~ ûØ}«ÑêˆMÆ^–µľ•®mÈK6kâÈ‹›­€ÐIÈã²+EÒµé„ô™8rîÄæ”oö-»EÎh©%0š£Ó’ �@Üè:Íß·8n 1£# +µäš…ÀÆNš ö±# ÅV�ŽH€H€H€H€H€H ÞcEÖx׺*¿eË–mݺµêØã¹è¢‹üþDGw+O? � � � � � � � � � � � � � ÄN UGFÞiøˆJƒ2ŸiÛ×Nˆ­{ì1w¶ƒ :ãŒ3jÇŒc 4vßâ8–άH€H€H€H€H€H€H ÝH‚†CO½ òúSÛ½²T�H€H€H€H€H€œ@+ ÇeˆôW¿úÕM7ÝÔ4àÙÙÙµB«Ûn»íæ›oŽžÊÌÌìׯ_ô°åOõ¢-Jm†îßKÝÄjÇd � � �@m­·‡1ÞÙî×vmU:I9t’†f5I€H€H€H€H€H€H€H€H€H€H€H€H ýhU cìŒáÒÎ<Õ„æØåø|>\UȤý_[m¨¡òQV-§FsÚ±å´bÎ$@$@$ÐÒZú ÛÒú3    H,îxëüê•X|T[÷ï¥nb‰XêL$@$@­O Å-Œ£ÃÃ:Vê~s·~mÛ¼DT(T“(œ6WŒ � � � � � � � � � � � � � tB­aaŒaQ8% ƒ°ËÄa'd ¨¾VÜ i „ÿÏÞ}ÀGQæϦ'„Þ›€HST,ˆ]Tìgïz§ž]±àýízg½;{/ØÎŽ�¢¢(¨¨Ø¨ŠˆÒ;„�ÞöÿýÍqÓ6u“ÝÍçyé—ÉììÌ3ïÙ�™Ýyž�ÄÄDÍ!++KéH›&fe¯gRTT¤ ’““+›¬^ÆÓV±^™  €@Ä ð·É¨0 € P ¾÷¨Zˆž’��P2gõEÑ0[§¤dÀɸ?ÅJ&`@‚„¼‡±[¶»¨©ËxºbZrÑ4Hµ¢ò!·îîZ&Wy£r³R € € € € € €D–@õ0.AQS/]7UÇ”¦ÖÎ],léV»kÆIIIÂÌÌÌTºKïññ ±K¶`˜8×ÏØY…ºÂn)yyy¡^óG@ ÑæØÚè«I@@$ÀïÊ„ÏËÀ�‡»ï T1¾,¿ueøäRÞ‡1 €h¸Æîú¨®˜ºK§î’^ðÊEÍ£ZY]ÈÔŠ» Æ¢pQ³‚¬ € € € € € €D¢@uNu×G•ºtê~“Y—Nu‹Ù¦pÝT«œ››«µVÑp Eí^.Íš5Ó7mÚ¤ l7W»¹Eß³œ‰kë¬B½ŽîNÉô0µ3óGwÔ ‡šP@@�P $&&†zÌ¿šî—ÝÙø–-[ô,~w0�Îi¸Ž:îûÀ¦öÛ–� #€ P;�†¸`¬K¤®èP­ã·»hªÌÉÉIHHÐ/¨èÑÚÕ>ÌŸ¥uÔúꦻTìÎZÜú:�0¯?ÕC@@@@@@�èhˆ Æ ¼`¬?uÕ]$Ö5T]OÕ5T]9Ž¦ËÆ%—е‚vŒÝ+IWÍërµØµîLKKÓÜ222”´(t°�m [´h¡‘ Ó655µd[h[»Ê� €D™€;OsG½([µˆ^w¶“ŸŸÑkAå@@ ÜÜ9÷0ŸíâÎÆÝ÷]ê�£Šñ»ƒ�['PÃ)EÓ÷Ì�kÊ0 €¡h  ÆZw•Ôu2Ö°ën«wmU¿è«a]9.¹žªñî)¡¾W—ù»ú»µÓ|\Ñåaw�Xº¥›²¤{qè¶(sF@@@@@@ª)Ð@Œu¹TÍUt=Øu·ÕÅT ¸?UW7 1®ÞúSzV5WÃM¦yj ² œ&pÎn80Z~ÊÀGË—,Ý]*Ö%+¥Yi½œCàlËÏ$È'Ó¼ysM“��­twÏÕl5ì2ÈÓ£ò!Q—8è’¼†��³ õ*»Méú|»»È„z‰Ì@�†pGºZŸÀ4|…›È]Ÿoz7‘ÍÍj"€ Ð`ü®LƒQ×hAIIIšÞ�™§§§kØ}+èÆ×hVQ3±pß º¾ÅMY#j6++‚ Ð( wÁXß0ºk¥úõi}«å.mêbªûæÑ]?ÖpIg\qÔôò§;9(¹d«9”¨ìæøÕ§.Ÿ�Ï œ>p¼†­aWÜR4¬×°Šæd&eæÉŸ € € € € € € €@ˆ肱j¯K¤ºVª ºtª[¡¸ß Öýé.{WQ·v)vwãpë¬iÜÓ•š¸$Ë_ vWa§wcÓ=êæìÆ—vc—åÆOÍ­ä)PѲTܰZ·iX«¯ \nðyVöhrr²jÓ¦�rýúõÊÜÜ\¥¯Eh¸)÷pëîÖÚ™8‡†p}šÝëÖÝM¹!—β@�@à¯w„n)̹v®÷Off¦žÎHí y € ¸s?zš„ϰú¢¨2®‡±û�÷ëƒî›Fwçéð©m¨kâÜ9°{Å:§ê¥3@¢O ¡/KP?¬k¨:‰ÑqÝ]UÕ]ùsÿÜaÞýœˆãv]jz�tS¦›Ò�¹)‡Ë�q�º |®®]–™›û=dWI­¬ÕÕD%pÊÚ-‹g!€ € € € € € €uh¸ Æ®®îº©†uaX ¾t=Õý*µ»’ªñîr²»ÚêîþxaØ]ju­ݰž¨g¹áòY²P7êT\´ ×±¸ä"±ê¬á’GëX'�’’¢ù´nÝZ¹iÓ&¥ëáêîÕᦩã‚Âöé� ÜkÀ98“ÆZ÷À>ßîu¶€T @�*ÜÖݪœ˜ Q U«VZú† ”®ye#V†E#€ €@„ ¸ï¬ÜyE„®B©¶û]½–-[j}ݹŸû>Ð}徬¯o Ã�Ô­¯ëhä¾7vß:�†ÿÅÁpó¡> €ÔE A/»“÷å£*­?uh×eT]üsÇx�qEÓ”|ÛåÓÍAS–Ys7&0Ýå§,óĺÿ©E¸êäÌ h½ÜO hÀU[“©Ô}qÌ@@@@@@¨»@ƒ^0VuÝåÒ’+¾pÍßtIÕ]gu«ä&p\/^m ®;DÝçàêìæ£º©h¥4²¤¸‘u_PÉ\›Á@�߸q£Òµ³+((ÐpÉEk «ÊH,î5àZ¸õrkíz»žONÃec­£«�ë뜞ž®j¸:7V}X. €µÐ9Œžèú—4ÖïvÔ®æMóYî~u®_…;iš¬5 €ÔEÀ�K4µûàÖE¬±žëÎÕ]ÏZ÷]Ÿ“••¥*¹»»ïÝ™¼¾™l¬ªÖËrÝw€î·Ý·‚n­Ý‹[´h¡¥¸¾ÅΡ^ÊL@h‚ }ÁXÄ%§2Pq×Suìw‡]TÑxM©�2›Ä�w#‡ËLÖÀ–ÔDn8ð"±V•ÜC \7‡ € € € € € €T&ÐŒU•’«ªÐUa]RÕÕbwy80+«txŽw+U’Z) —”PÔY3×l[¶oß^c\‹ÂÌÌL »ÞÆné®��*¦?ÝsÝøðL÷JpÍûéºú»öƒÍš5Så]«I×–0ÖËõrvýŒ322TÃüüüðD¦V €”p}JÜq–þ%epÂüÏÔÔÔ’nÞ¼YÃîlªd$ € €@÷-Šë[x.Qf2þ C÷m˜«Xà7„[¶lÑÈÜÜ\¥ë�ë¾I ü>0¾=«Œ4ð›a÷­ K7½ûö¯yóæúÓ}ZqßÂjT6gÆ#€ €@p�ƹ`ìêäÎN”:pÃÑñ­VÉz• ß<Š € € € € € €4Š@c^0Ö »Kª�‘~͸d�W*¤›Ö-Ñõ3l3èzߺÆ.]?W×[7°u^H«Wë™»uq½¢]ûÁÀ»»G]ûÁƽoqe+èÚ9º~Æ999šÌõüvò‘þ:¯l­� Yî,ÂUÝ™ƒ;£àî_‘µkëú¹ûÕ¹û»û½NÃ0 € àÎZµj% ~W&r_î›±ÀïÝwèú»ïÝ—áü­”û„â>�¸W¦K÷Ý {ݺGÝ÷�|r‰ÜW/5G7�F¾`ì8þ"k¸mêƒ € € € € € €4¼@X\0nøÕŽÖ%Þ·Ãݧĵ³s½…"}­]Ã×–0°e8¯—óOKKS%ÝÖqÛÅõùv½½]»ÎÀ ç5Цº íe÷ó¦D®@\œÝÇ�‚ÕpÇÐÀ l•.«37¦ ×£C‡ªjvvvIºþ%á_jˆ €¡pgî÷H¸cq(„kžîÜÞmS÷½“ëIMgøn¿l,m–‹ €@´ p½$Z·,ë… € € € € € €T!àÛ’W¬IÒé§U…TD?‰=Y{A¹a×–0¢7DIå]âòÛ¥d@¨w�Àc«;ªº1õ¾ f¶ÅÅvæïú»aw6¶¦b € Pkw¾çînëú»áZÏ�'Fœ@ä~ûÄ'—ˆ{±QaêQ 33³çƬ^ÀýÞjÃ/—%Ö]€Æu7d € € € € € € €@D pãˆÜl5­t4õͭ麇çô®¥¤»óJxÖ�Z!€ €@ô ¸~EÉÉÉÑ·j¬ € €@¾}*Ÿ € D€ÆApx@@@@@@ˆf.GóÖeÝ@@@@@@@� \0‚ÃC € € € € € € €@4 pÁ8š·.ë† € € € € € €à‚qB@@@@@@¢Y€ ÆÑ¼uY7@@@@@@@ ˆŒƒàð € € € € € € Í\0Žæ­Ëº!€ € € € € € €A¸`‡‡@@@@@@@�hà‚q4o]Ö @@@@@@"Àã 8<„ € € € € € €D³Œ£yë²n € € € € € € €@.Áá!@@@@@@@ š¸`Í[—uC@@@@@@‚pÁ8!€ € € € € € €Ñ,ÀãhÞº¬ € € € € € € D€ ÆApx@@@@@@ˆf.GóÖeÝ@@@@@@@� \0‚ÃC € € € € € € €@4 øV®ß¬õk–Í+ɺ!€ € € € € € €” ‡qyÆ € € € € € € €MB€ ÆMb3³’ € € € € € € €@y.—7a  € € € € € € Ð$â}Mb5YI@@@@@@@�²ô0.+Âß € € € € € € €@à‚qÙЬ& € € € € € € PV€ ÆeEø@@@@@@h"ñþ&²¢¬& € € € € € € €@iz—öà/@@@@@@@ ÉÄû|>­¬Mf¥YQ@@@@@@@�˜zó*@@@@@@@š¨Œ›è†gµ@@@@@@@.ó@@@@@@@š¨Œ›è†gµ@@@@@@@.ó@@@@@@@š¨Œ›è†gµ@@@@@@@.ó@@@@@@@š¨@¼ÏçÓª{ÑD Xm@@@@@@@ i ÐøinwÖ@@@@@@ˆá‚1/@@@@@@@ ‰ pÁ¸‰nxV@@@@@@à‚1¯@@@@@@@ ‰ pÁ¸‰nxV@@@@@@ˆ÷ù|Rð @@@@@@@�&$@ã&´±YU@@@@@@@ P€ Æ� #€ € € € € € €MH€ ÆMhc³ª € € € € € € €@ Œ5F@@@@@@š�Œ›ÐÆfU@@@@@@@�@�øÀ?kØçóiѱ±võڥ㲱jÅr@ÂG ///|*CM@@@@@ˆzGͦdE@@@@@@@�š 4Zc×{8..NõuY³Š35 € € € € € € €@Ýèa\7?ž� € € € € € €D¬@ü¶»7ܸ»'$$4Ü"Y €@„ pWû߀T@@@@@ Lèa¦†j!€ € € € € € €¡hÐ{»{ÇÇ7èBC-Èü@@@@@@@� ‡q„n8ª� € € € € € €ÔU �:ûºûÓ·¸®›‹ç#€ € € € € € €õ'@ãú³dN € € € € € € €@D Äû|>UØ‹�TÜÍ?111$sg¦ €MCÀMšÆº²– € € € € €4œ=ŒΚ%!€ € € € € € €a%ò{ÇÅÅ…Õ S@@@@@@@'@c^  € € € € € € €@acw¿Iz7ÑW«� € € € € € €a/@ã°ßDT@@@@@@�@{ÇÆr5:4�¹"€ € € € € € €õ!À5ÝúPd € € € € € € €@ Ä»; û|õ_ww÷b7ÿúŸ;sDhJMšÒÖf]@@@@@N€Æ gÍ’@@@@@@@�°á=Œé V[šÊ € € € € € € €eèa\„?@@@@@@@�¦"@㦲¥YO@@@@@@@ Œ=ŒË€ð' € € € € € € ÐT¸`ÜT¶4ë‰ € € € € € €”à‚qþD@@@@@@šŠŒ›Ê–f=@@@@@@@�2\0.Ÿ € € € € € € €@Sˆ÷Åø´®>‹z.¾PÌ´žëÈì@"C€cJdl'á(|Ë@IDATj‰ € € € € iô0Ž´-F}@@@@@@@�zˆ÷:×Ó̘  € € € € € € €@äÐÃ8r¶5E@@@@@@êU€ ÆõÊÉÌ@@@@@@@�Èà‚qäl+jŠ € € € € € €Ô«Œë•“™!€ € € € € € €‘#ÀãÈÙVÔ@@@@@@¨W.×+'3C@@@@@@"G€ Æ‘³­¨) € € € € € € P¯º`ì÷þ«×¹23@@@@@@@�° ‡qØo"*ˆ € € € € € €„F >&Æš93W@@@@@@@�° ‡qXo*‡ € € € € € €„N€ Æ¡³eÎ € € € € € € €@X pÁ8¬7•C@@@@@@B'ÀãÐÙ2g@@@@@@@ ¬¸`Ö›‡Ê!€ € € € € € €¡ˆݬ™3 € € €@¤ ø|>­B\\œ26ÖÚ»1‘¾^Ô@@�š øý~=¥¸¸XYTT¤tcj:¦GÂM€Æá¶E¨ € € € € € € Ð@ô0n hƒ € €D–@|¼}`t}‹#«æÔ@@�PþúŽ;OvýŒ C±¸¨™§ë“�››«5ÊÉÉQ:1§ç2jV–A Œ€ÛW¸tŸ²SRR4Mrr²ÒýŽW™§4ÊŸô0nvŠ € € € € € €4¾@¼~bß«…Ý•Š‚ € € Д\Ÿ ×ê9|Z:7å-º#€ €„³€ë5è΢]¯Yîjì¶—ëUœ™™©?·lÙ¢tcÜ£ÎÍ}âpÃn<‰@ô ¸}‚ëIŸŸŸ¯ÌÎÎVº×óæÍ5œ––V2F�RèaÜ(ì,@@@@@@h|�ø}‹3P@@@ T ×C"êC@@×SÐ�K»„á_çÐÕÐ lܸQ‹(((P:Ÿ¤¤$ öÉ]˜3á)ØÛؽ;6oÞ¬ªº>ÇmÚ´Ñpbbb£TžÆ�ÂÎB@@@@@@@�ƈoü*P@@@�Æ oqco–� € ÙîwzÜyµë;ÙëSóÚçääèI®o±»c±ë+éLj>?ž�@´ ¸½D|¼]œuéö®_þºuë4Þõ3NIIià•§‡qƒ³8@@@@@@@ \èa.[‚z € € €�"àî(æ²Q*ÀB@@ˆ�À³k×Ë6jV-ÈŠÞ·ØÝ¥Õõ�äSF4B@®ÿ½»·wnn®Æ¸>úíÛ·×pCÞϘƼ @@@@@@@�&*@ãÚðþâ"-©¸Ø[\¬]§�‹õ5в+\ŒßêSXhé÷¹_K·ZÕ´N�ëå‹‹ÓwµT�rÅÖ17Ç2)%QYÓu,7CF € € UîÎIQµJ¬  € €�*àα]¿ÛF­HÈîzQÞ·˜¾Å!GgQ'àúâ'''kÍïÞ¡C�i˜žúô0Žº—+„ € € € € € €TO€ÆÕsªÓTÖ·uñ[£”×¼¼JÙçü‡”÷ÓMY§+öÅË5‡OyN9-s ò”k�Wö·n´U”âõS4Å�?¬œ»ë•ʧn¼IyùÓË”GÞõ‚òÜ�ʽ¨ –jüoNU.I <ôøÝ•+X–ͳ À2!¡Ü|4¶&Å¿ùGMþü?T~˜¸òÎûNWöMRP@@@`k;eŸ�_ááÅ€ € €@} ¸sl×/0ºïdœ™™)¸‚‚¥»ßjÃô†¬Ï­Å¼÷Þqï#÷ûîýÕ¢E‹¨`—ì`©,@@@@@@@ ÑÔ‰ÓïU‚å�¾-j^®ž³î×Ê7´Uå6fÀœü…yú+7ßúìú¬kmrBƒ·(^§åÎ}ÿ-å'-OUîyœ×ÃXC¥KÑÚ©ñßkžS®ÞåLåU£F*{U£Ï´&+S|-ziLïöùÊüé(?˜y¤²Ï^-•¼â…@A@hâ´ýoâ/V@@ ¤ÑÝÃØõœÎÈÈ�¡ëQíîÜì÷—»PRefŽ@t ¸÷‘ëµïÞ_iiiZÅP~oðk‡ÑµÙX@@@@@@@ rÔØž–‘»ù‚×ÜZñlúò^å…ÌTîtÙãÊ[í  »R¸FUúâùç•ßfØÝvÝi ²{­úë‰V|­CÞG™6}²ò«O~Pž±ÇÁÊö4–�@@ i „º…rÓÖeí@@šº@tŸoçæÚo º~ÆIIöû¦¨/�„„Í*/Ïûaï½–ššZ_3¯p>\4«�…‘ € € € € € € €@ô ¨‡1�@ë—œ»ò'åOÖyǾ•©®iAq‘† Š,ý~»/rA¡¥+ÅÖ38ßÝ/Ù§áøË*ú°û³4Íü7­'ô_ÛÝR] <D7e¥/ÐâåzôÓGìnÇÓÒƒÞ!gµ¦)òîÕ�÷ãK¾ë¶iÊVVµ JüΧhìµÇ÷WÖ¥{s³f € € €„±ÀÒ ö�ÇÇs¬¿Ô÷‹ì[Ž5›mÌÚ ûöc�—©Iö=GÇöEI‡––=ÚÙ·#ZϪá}í»„Äø*¾ Ñ4@"] ;;»dââ*ù½d @ &�ï)÷^£‡qMü˜@@@@@@@ Ú•và¬öšÞ„ŵγ'L´ Þ·u«�õÝø³=«X=]cbVû®ò¥ô–Êê´8õ5·»ùŽß.ð~sÔõƒŒî5m¢/_V»QÜ{ʽ¿Ü{-ÔÕ±_Ρ € € € € € € €4A�xïÖ®¿â……Ö4>¾®m6«7»çîâ/ÞQ¾µÀúæÖ´¤ÏýDOyÛ:ôV«ÄõHÑtÃ�ÙU¹ù�QÊëÇ®R{ý`‹¶ÞEØæyÇéŸ)c½;ÿ8ï~ �²§VTüÖÖþ×}ˆg=©¼úëíä5®µ‘Vâ¬=lb‚7\*¬�A‹^VŸ^E ”s–YßýÙø53•‹ô�’gMp§¿n}‹|ßúç¶ÞSyá WîÙ¶†ím¹ÝÿÊÚÕ¦‡DáÏ/è¹Üñ‘Ò™h€‚ €@ˆü9ó4çqÿù§rìjë›âK±Æ;p¶òÊ+Uö¨ëI�æAA@(+Pd'_1ïýhý‰ï›h¿|¶rSm¾Û±¹TT²òì{…ñ3ì{’ 3-�j_Í\}„õ6îÖ†û;Š�‚ %EEv ¼Ój”¬«�@ØÄÆÚõ2÷^ u¥jxe.ÔÕaþ € € € € € € € %_­›è6Tmj±œìl»ÓÌ�7Þ¨<ðÀ•ÇsL-æ3nœÝ{wÊ”)Ê;ï¼S™ššZñ||m4~èÙ×+;çTÒÕ¿E�Î}ó 帅Öz´UK»6¿9ÝZ°&$Y§Ý‚<ëÑ›¶ÇÊK顬¬+‘/Éî%ÜÁ»¸¿.¹•†Ûµ³çÇXf¬Ý Ì*¶ÞÀ-ÛÚ£I>›Só¤ÀÖVϼ�Öï÷‡Æ+'�ÿX9Ón²ã÷:å¶Üq¤†�>z¸2éË;”ON¯¬·®Í¿ï1—(ÏÍ}P9êéeÊag]®ì÷Ñ…Ê{—(**E6åG\«üôÛ ¥¯ƒ-ñ¢›®PÖ3ÙÆèÿšNL±»©©�k]ݹ&Û “Ýr+Ù¢Õ�Ó!€ TÀŽ33?Q~²æÏ¾,þœµ³¦Y{e{;¬Q@@êY`c¦u.¾øùtå· ½/Dêy egçý¸[Ì;ßÛwA®·ñ=§¶Ððñ»WöspeçÀß €„³@q±[ëþË¯á¼ŽÔ �Æpw2vïµPפ6W×B]'æ� € € € € € € Еujm€E×Ï"’’¬gm§Nvç¿1cƔ̴úýŒ]ßb÷ÜáýþµÞtw[¥Ý¯XJ·OW¾`ƒ•D³ºøž“•ýKÝÓÑîŽPl««bÿäf™|fJmª[˜m÷. ìè¥?) €@Èl–»n¡rÆ7_*§M·cļ…Ë”ë2mo”ÖÞî^ßmÛoº§rï}+{6/µ+Ô˜ÚÛs¦/¶_¿øúó©Ê¯fý¦üc‰5r›wQöè5@¹û~*÷ßËjÒ¥Ymö±z¢W~­m‰kgOR~³8OY÷ý|lks8h¿”ÕøYMXlùÙ?MPŽ�U¶>ñ; Óø~Ék”Ë—+´øRÚhy�Û¦*ë²�´Ò, @¨†Àì%šê´Gí×ݲóë~>X�EVc’§>µ_ws}�>§•†cù�™j¸1  € €@èøV0t¶Ì@@@@@@k�mÝJú’UW®¦ýŒCÒ·Øë¹”ýË»ªîó“Ö*}ÛÙÝyOÙ·£2κû–ë[ÛgäiÊý'ý[9å�g•ïq«ò¨î ÊZŸµˆÝ0GùélëCß,E™Ÿiwèxò(å…‡vPƬ›¬¨¨«õÇ*²ØÚ¹8¶vÍ\ýÖg7cÍbåâ?îT”¡1«[V«¤ì¤É*hìõ¥.päÏÖ4O_q¦eµfl"ó¢ €¡ðg/ÕŒ§½ú°òá±Ö«xcQŽr—[ßõ^ΚjG–çžÞQùï¾õçØCõ»Ó­?ßúÿúƒÊ{_þ^¹!`'­?­dØÒÓWXΞf°»¬¼äºK”Göo©¬~OçÆ[k[±•ÓžT>òŽý EÅÖz Ú%i÷Ñšv�}kÕøh¥žûÙ+ï+W”3/œÿ?�ÿÇ_-¾¤q—:öjëË^»×UÃ×™%"€ €ÁÖl¶¯6þ>f“2|úÖyÂLû)¶>�ìLuÔÈ´À‡F@@ �ìú"@@@@@@@  DIc·åªÓÏ84}‹mùþ-s•¯?þŽr©ßzþ×c•ýS¬¯õ´-]b[ï¡§�9TùÝ#ÖÇë�¾§ìwÛ‰Ê>Þ³4PÃb-Úìu®ò®‡¬XÚâÇ•—?0SY½b�žŠ \/,»ŸrBí^# }õÜ“ïºV9:†òé ­/õÔ–'(ÿu¿­c«ÏïQ^ýô/Ê�.z@ù�Ú*Kõ{öÙâ“Ê×Áow!Êóî‹ÛFýí l[~J�­ªøÓmûü¸`]Uò8 P Û£æ-Ÿ¢|ô¶{•Öê~ºþŒyzî»w�R.O¿OyÛq½•É¥všQy)Z¯Ç¦?q�òÖq˔庹Vø\«Á2û]ЇGÛ~2û¾Û•§ôk¦¬|áa°Ö~;HdgÙZZm³Xï–�_¿¬|ñG«Uc×§1-Xv„ øíT�ow=/ö~Y Á;-«V›Ób{µoÞb¯ÿæ-S•Õz–¦+[léÙ™–Iiö;=Õÿ…ƒ²sâo@�¦!�ç}§qÁ³›´ºk3ÜO¨…ïš?ð¡õ0î×پι«é( € €@eùéöý^N³vÊ–uø±ÚÊæÏø¦,PÛïmš²ëŽ € € € € € €D…@­úc†÷šWÖÏøý÷í®�ëÖYï¨áÇ+G�­tÓk ö%…žûÙv?ÈqK­×PÇ#.Rž6¸…ÒWi.ëÑñÀó•ç}g½lžþŠò¿OÚ=†ÿyéþÊÎÖÅ·FÅ–^�ký9âšY¿Û71ñzîææx}Ÿb­/HrbåýÇôp¥ÅÖ.1Ùîœo-dÜl|V£äTë—ÖmÐîÊ^ s”ó~\ Ìy°²]5š1ø³·hÊtïÞŸ¾æûiø¼ÏU¬ñ ëI1…sÇ(Ϻiœ2ÜÛ[}) )¶/ÍùãCå½7Ú1bêêÀ>½¶[Œo·³räÑ)wîiûÿ±9ÊuØo3L~ï#å\ï&ÃÞ~Ù~ÎBc~xÊ~³á�þ+ÏÞÑö±Uí©­gÞò�îWÞ3~™²T=Òì7!9Í~ûáÀV‡ÄìÊÙ“^W¾6ͦw?<áϱ{Æ?wÇóÊÞ�]ªÜ½Eù%‡ÍZûóTÃ,¯w£þ,>;BÅÇÛÁ¦|íÿœ¬¢¡„¸š>ÃæâOÿQùÊ3Ÿ*7nÝ�6ž‚@ø ø3~V%Ç½éæ¤¯S®ßl[<¹MGe»æöu!ç�BãbçE¹¶'ܰ>]™ã½OÛ¶·×sZ”¼Qµ*ê&�³PÏŸøà=ʲìúˆ¿Ø·yGíÝCٌݜ(u°s\  € € € € € € €@ˆÚ¦fåûõ•õu¨ç¾Å…k5ϯžº]ùèWÖŽ/iÀéÊkάlY�6qÖOâÀ‹¯R.\q§òƒ©Ö í¶X{ò?/±¾³�¬\U¥Ðzè~ôèuÊG¿¶á䓬ÿÙ?­!]U¥x…¦øúõ§”«2­M÷‚Ö8Ö×ÌêÖ®V}AôÄ*Kl—!šfÿ>/*ÌžªüaíÊ‘�ªn)_¼qµ¦\a�câ»YûúÖU?É&®°Äõ;Yãs¬=šÔ†( €@lOŸ”¦LK²aû_ýMãZ+Ÿn¿rqÕ©{*»”¿ñÞhüÈ#U¾vû ÊfY? ×=Õ_¸HÃo¿1Myø­#”‚6ógü iÞüŸe¦›…†TŸ”]•çþû_ÊÓú[=] ÕOÃöØC¹ãÓvd¹é­ß•ÞN7¦håx ÿo’õtÒöÊÒ‡©pYkµHVݲ2ËþrD\׳4þáç,ûÕáØ¡§W]Š×kšiÏ< ¿ÂZ»o-Þïmô?û¿úóŽ{+«uÜ)œ«)Çœi¯‡÷íå°µ$p½†ž½zoe]¾·Mìß8ûIº²¬·×ü/Ëí¼¨ìk(pºê{íå‹’5y×�ú+;•×ÎÊoø×Io)¿^UËœ¹~E Ÿí[NÛ»«2èΣôÓªýWb§^š¶{Šõ0^—¾XùݬUÊö颬ÉÇ[÷õóR®,4CŽÕ·Ek“ܶ¿Ò ¥i xwË^;ߎ‰^yVùâÇ ”¹½¯Pþï•s”!ßÛkõ] 7Ø>â˶FÏ<ù‚rÊüÍÊlý¯~�)Gž7JyÍ%§)‡u³#Iļ/ü¶˾yWù¿çŸW¾ðê§Ê…nõb¬W\Ëþ(ÿzéåÊKζ½Vß¡ØciÆ [¼uÿù¹ µÔóŸ§,ðÖ÷Ø&jøæýìÓhøoGÿÆÉªç�ÇþŸrÒÖ­¦Á*JÂnÿЯ?}вgÈ6æÆ,;v<19àT©ŠzUýp×^ö›7c½Q÷ïiDZԀúçÙ9ò<ï\ýáqvþùq¦¢Æe“Wó§>³š�>ÒÎÌ뻘̒7/RžvÏ�Jû5žš—†ÙŽ5¯WÅÏ(Xgg#ï?û„rÌk”_αs’ìԖʾÃNU^0Êö¥çiý´ZlYýæ¥`­mÇ7·oŸzÅ>£ý°Ð;R¤vÐðà#ÏWŽºú2å){vVzIõo¸žõö^øýGʱcžS¾7w“2í¬§•_9DYú“¦FTXì,1kñÇÊgî¶ïB~eŠr±·wJm¹‹†»äZå�WÙÒ¾&g£zB-K‘ž—µÂŽæSßÿŸòÙ—¿T.‰ÙKyó›)ÿÒµf/¸úÓÂë¡ÔG}l¿”ñ›S^}vŒò™1v4œ±ÁZÜùÀ~ó×˯QŽ:ç`e/:QJ�ÒŠ6h¥¿å)åø?ìÜ£8Æ>)>koå¡Ãz(kþæ°ýç†9¶žºÀÎ@ìïú/vnÛv×Ôô±3œð?×­ƒÈ™cÍŽL‘³^Ô@@@@@@@  �†iTUE%B÷p`?㬵à‘G©¬û}‹ýÙh>Ÿ�±¾AO|ºRYk=„FþÅú'¬Y¬\¤ÿ­Xk©åò•~o8gý2 /Zdc¶]±o£áýN¡œõð$åŠÏPÞœe-GF]t´r`›?7VQ¶µˆüåÛÏ•³7y-? l‰ß~aókÞ{å‘}š+‹íÖU•Xk{تèmå³Ö(ãÚïª<Þ[îëtTUñ[+Ú_Y‹°-ˬ…KL|œbÛÚÙˆ J¬µp6ÒÚ ¾ôÀwÊ·Ç[Ë»}Ï·öò•·ˆ±õÍ\aº+‹¬=JrëÓ¶Š…i’J‹/ÑÚq·m_é<€ÔZ ¡³µ‡½ìnÛ+ÆÝlmfsN¹]yåAÝ”Á[yǵ¨iN¹âoÊ/|T9gëÝÑlO˜õý4åÜM+n[Yû<;­œ:V9i½µqÞVì˜2àÌK•'–ê[¼íqýgǦ¡gY/„c¿¾NùöJ7ÛÏÿ2v¼rÖáW(w/÷[�½Öª”uETd¥›@`‰mßJ–«rà$õ2lJ«&?®|h’[·éÛ–Jèw¦òò“lû¶®~ÇÞBëUYA+ûŸšjí¯S+{!è1Juìý•¿ÆÚê~ùÅå¶mWÝçW>�mž¸ŸíõpÔÉ({ئ«°X r3•[¶ÔßòmQV‡¤<{_Ø2êZlÅEVÃâÀÙùì¤jÀÎ�”³§ÙyòæŸç(ífçœÛ')JŠgâ�7ÚPéâÏþ]#f̱óa÷NöÅåiø�éŸ(W—‚ÆV³$ØÙãàvR¶«Ë|ª¹8&«wºfùÝS7(ïzÞŽGŸ|·\éz£h@¥e+; ”zezãÃ;앾iæóÊkÏ¿FùÚ ×W¬­†{ ÝOÙ½x™röüYÊwîþ›òÓ¿WŽyû~剥ß`nÅ¿åWUé½»¬ÇÛ¥OV®ò6[jÛ^<´§2iíÏÊÙó?P>tùTåØ�oS¾óÂhå^m"÷Mk;ÊÜù¯*o½áå·kÝk¶‡†Gl=ÇÓ`¿÷MŲ3T×k«[á¶=mîöçÕ}Nͧ{ôã,=)+/ð°Tó¹l{ÆÎ»·ÐàS§ØYV—€“0¿÷»Þ/Ã%&ÙyõÀ=[*ím÷>°EùšÆk\Æxw_>k[bÇ–uøš£’%çÛ^å÷¶íª½éJæeµê<ÈÖ1£äÑð(Xnû�O=]ùØWÞ¬‡�{xÚ¡ÊV›ç*?›ú”rô7ã”Sn³wåK£­÷gë°ßͬ˜¤zÞ|êÊG¦Ù™RLÛÃN©l¶ü;åä7ïRžó±õûî©×•ÿ9¹�²‘?/äÙþ•üSùÄø‰Ê™^G`·7ÔŸ*½N¨þÙ¯½Ós~³ýêÇ\ |n¾"&µ×žÊÃzÛ|~þúå»w_¨üâ»?”ï½açûÔåkD=¿âb{¸ÕSþ«¼ñ?V« _Ø9ðÖ�½†T:Ø·ÓÞ Ð½?«Œz«ryUMP_õq¿¨ôæÍZÞ—Û;ñ �)µe7 ï²ÏÊ”µó”sçÛkø¡K¿P~8Ízf¿õôyÊ�Cÿ‘^K¡ Eöë sÆ>¬|æ«uÊmgS¶ÌþáEå£o¥)/;ageM~‡Õæ�¹dšòƒ +”Õßÿjâj;kعýþJ×øÚOdÂF¨ÿ³ÏFX ‰ € € € € € € PskõÅõ'>æ˜cêeMs—®ù<ûŸÇ”ÿa-d}í­åÚ±ƒ¬­Ç„»­%ø»ú¿ò²ä½»õàÕÂZ[ô=èpå ÖZpÖôç•7-˜­<ç†+•;/°åÞû’µ\™cm@b|ÖM£Ó{ÖñÇZ[Âývé¢L�µG7NQTYìeÐï”G”¯Ÿlm-Wx½7æ,ß[Ã;wµvµ•·/°Öšó&¾léMÕá¨í5ܾò'èQ7¿6{ÚvÙÙÖè½Io(?9ÄÚEþ¥g¢²‚âÏÕÈE?Y½ü›fPÿÊR�Uô7'�„ŽÃU�K¢,N¶N…¶Ç¯^Iè>L:èåœïí¸³µä[ï¢_—Ùøà¶•ì3‹WëÑ™_ZË\›n[ñ%ï®Á£ꥬä™['õ¥í¢¡C�°½úûc~SZÏYõMÜd-§ÿúwåÐ!©JŸþ/]m­]5¼ãEf¹ÆqmZéñP6G¶ãoÖ¯o)ïô ¥û) ¨øú+Ϻâe¿ê÷-¶§RV ÖÎŽ’íýá^ó5X|±=£ ÐZýÚ«Áн?|©Ö^~÷ƒ¬½üv¶¨A‰ëh}b†h§¬âôª‚¹Ú¹Óò™v®µpó¶U0™ª›¥Ñë–­Wf{º>d¹[Ÿ´Eã×,Y¢ôx´Jù^úµ�µÎ\»­•³þ(_òhÜGÏZ_¢­×1?HÙ#.ðÛc­š1]ù›«Š÷ ?Ïêöǯ–u)¾dÛØo'›I©åÖe®<·üöÚ[3Ë>P½ÿݪ\phåO·cë^ßâggز�ÿ”ò‘›NSëÑ\çÏÓçOÔð.9_y÷””Wܶ¯r÷çNUö°X¸–BûÔ¼`æLåæ”aÊK½Wy퉶oìÑÜ«z±uÌüã3û|zÙw('Ž¿S9zÌÊI×Ú9Lå¿G¥õäÙyÔÿú§òÃRÝ͵•×ËŸmG„­?^Óö0 ßóªmÇ£»;Fù’ì(Ö¥ü)£ÆÖGÉ-°ÃÕk_g×ÇÌbRº5Ó|î=ÙÎr]ß⌥v”|z¼Íÿýß­ÎêD;„ŒÜ+MùGØ¡=^žršMXËâÖbìt[Êå‡Ùœë¯}çCïRNýùVåÖÃ{¥ °ÇÓ¿¹_yÎÏ)W¶9ZyÇè#”]‚mj=Þ¨ÅûôÑÝW©®oq·óÓð[ÿ=S¹sk·‹´ãÈÚožP^rò Ê·ï¼^ùüA•WUòéF5~)Z¦:Œ»õbå#Óì·4¶;ËÖâ¥ÎWmëö¢öý}â=Ê¿ÿíAåc—šÆ€c•—ìb¯ê�½5ï`Å_¸AÏÿMåWK‚MY­Çòm¿úúuW[η³»=F=­üßí'*ûÙa3&{…�O>sÕéÊÞ¼[9êA;bNþ×þÊúîMn¥ß*ßÿȾ·´µ­[©g±ºUFÏ®�ú˜Röì1ÊË.x@ùEÁÊSî}\yûy*û´ò^ÉEöJ^<ÅÞ¿Wž}»rÜk×)¯Ûw/åÛTÚž—‚@ ä­ÖÊMÕΊŸýb…²Àoà¶{Ú9ÿ_:ü |uÂåïÚÞþî g(/9ÛÞG=«}ºœØº—¦°cKeÐOõ1E›íôÛ {oÇÚN¶kŸîÊ–vB¤ØÃ]Üy~�©x(<Âù/<„¨ € € € € € € ¥^ƒ�(]·­VbËŽšsûæv­=µÿñÊk®µß}–¿£LÏé ´¶¦k9µåk">gy®2µÇnÊAÝË·é³Í±ýÁg)�>mˆòÕû¬mÈ­­åõÐíZ([¬³¶S›óm¸ßˆã”Çy�r÷Þ­”Öš®z%¶ýMxë[–«çÚŸWþ뾯”—>öOå¡�†+/¹©¯2©»ÕÁg YT¬ïð‹îPž¼k{e§Îm”Uu�2™‚\«ùžÇØ:~öÔ×Ê—²6�}ï°1;–k ãÏž§ñß|e-Yü‰»(‡°9øô?o�8¯oq ïʯB¬õÆèÚ+EéózÛÞSÅ_ Ø´Ùúø½~Âå÷„ÅëçêÑo~¶)KüN¶×Ý¥]uÚ�Ù±©çཕ�â~S.w9¿õšö½�¹`È®J;TT~­]-üy&“éõ5ÙV/Jlm­ Csï.Û2Ù¿¿¯¼û&k1=#kë¶ÒpŒ÷‹ ξBƒ'ôõ¶¦��à’ŸŸ¯ÚoÞ¼YÙ¾½ýë^Ö­³ûñ´li-[½Þ½uŸgÍç`¯“fŽTž? fÏ.Î\¢'|óáGÊ«ò¼'ÛÜ’: R:ÒÞG½ZÔx gùÚl¯Üy—žÊ?ߟasXø½²ŠÆ…Ö~yÆë[ók¡¢LY®¿¿›héŠ/µ«ºÚ)m=—¼•ßiŽSg§+‹½³¼´®¶1vè`{3-)ÞÝÊWÏÿU#VÙ lLb‡”;vµ^Y¥¦´·•øNJ«Î.pÛ3ø7¼bmŸsä#(sr{Z{Éθo°rÄ�ÖÊ>‹¯Õ>ªöUOß©Üü޽¿®¸ñXeïR-ûÌת¿�ÿÇÍö¾~ÿ[ë/8•“·>Uçõ‹W†gñµÞKõÄ[Ê�Ó*ÝÍÎsJÕ8ÖÞ¿=¾Tyíù/(§ÜeÛtækŸ+½jwåàêôÕÔ�_ìˆðû›·+o·\™rà¡Ê=ç|¬œR÷hšKöýW[çÆ˜˜6½;í¶“rÇö•îwmÊ—/Í×ròξj·DŸ.:¶™²o¢Í¢h]–òÖÇí[ˆwÝZÛh-ÌN‹ÇO1�ó2• km̲:WaÒ{Í„¢‡qr{Û^l'ZEñgØæ¾×íÌvaLå9ÿ¶½Í™Âý<¶xítÕsü»¶ßÈn9ByŨӕÛúkPÅ6m‡½ÎW^}�õŸþð;÷xåÓ_”—±oä*ût£‡±̳-òè[‹•ÙNR^«­ÅÖ¾ÅRñz}õ>ê þ÷úo”�ž¢¼ç‘IÊãž:NÙX}Ä}ÍìHwë;i»É½SŠlK=wü�ÊK&U‡hOΘþ²òÁ�Ö*czÙQã¦ëí8ØÏûÎÖFês_×½•ÞòÊ�?»DùÁÓOXž·¯òŒžõ{:hçéÛŸñ†rå©ÖOÏ­bÆÛƒ¿_¹\ÿפԟXM–Zù´õQ;R¤îj¯Û‡5�g‹ÎVÞröÎÊ�‡‘8ûäÞkÄ(å­£?T~~ÍÊ©Ï} üéov1Ô¾&§ …ùëfi­Æ?û¬rÂ|ï:ˆ÷[c­‡ÚûåêsPvM¦ìÿ¸ò¡÷ìøµöÛ—”w.[¨<í¼S•û÷¶+8¶oª¸Ø>°ó>ö~m»ç*JÖ�OkŠ«ùZ™—`ç~Ç]~‘r¨�¼S¢D ~�‹Q‚Âj € € € € € € €MA ¾)¬dý®clóþšá £PîŸl½:ºŽ´í­ÕÆ5»)Êkaºh¬µ‡ºæåUÊî‡X«�k�馬üŠýzô¯ÿzTylqke›dkdåzŽòÞ§­Ý\çöÖŒªò9èÁ˜Ø8·‰­M[A‘Õ¤Z¥x½&[µ¬PéK´zvleËñ%m§Üu¨¥ûMû•Þ�ë5Õ¾‡µTíյ܋Ê5¨sS¬Ó¿ ¾¯œöå'ÊÉßY»Â#ïºMyÞÞ?+øê-åý�wPÞ|Ù!Ê[»*kxÝt¯M™u•‰Ir€rpU·J¶I) €@„ Ä'X+øò¥Ø¸“-ûxÁŠ…5/?p¼µ,ì°“í±«¿ûŒëÖWÓïâí�—gº%Zn^°D¹®xWeЛÖéñÚ”Ú­õÖ%åfk`ke·Ž²uoïõ0~ôÜ:y ÿ)\õ™žqÿ Öºó›��ÛÅ–Ûnÿ+•×�d’Þ!]ÿFj)òÎ(þóŸÿh–.]ªü׿þ¥ìÔÉ΋jWV¯^­'ÞrË-Êí¶³3�믿^gzá_òÖÎQ%'OüB¹h‹�±ø}vFÔ¦ÿAÊ#°³Ç6ÕΗ`çŸ]½›-o^lg°™ñÞ˜nÖß&ýÛ^Öߪ¤ølõv<úïʃKߎ¸d7P´|ªž{o®ÒúO•.þ¬E1í“™ÊõEö>Šma-—<â`¥÷S ú7 ø­'Ê+(]ã”ívÓð>{Û«1VÿS¢SÀ>ÅzGF{EZ±}EB\¤os«ë!öYï!ëÞ¤˜@‹þC•ÃZÚdóVÍVþ²Ìú8úûµRÚáZ’{ ª¼z¾fz¼C�žÊ”{�oØ´I¹ÅõMçõS5K•‚ÅïêïÛoyG¹<ÁúÁ_?Ú¶rÒe+#±‡q~ÖfÕÜû™›˜ÔŽöɽuóÆß"ϱïê^:YÚ#¶·÷£Ïë8ës;⽟lÞ+ÖTûû–`³ÙúØOË 4´r“ͳKë†?2É_^»CyÏd[íÇߣü¿ã·WVü™D„Mñ§¯S]–ºO@©=4ÜÅÝÙ·| }¶­»÷ÝE™cçrkWX_U÷ "©ñ_ÔªK`±3Ì峦*çÙ[0¦å;;Ú½²×{{Ñ]�:CÓìs÷åÄqc•Ÿßt¬ò´�uÄ´åÆ'ÚÑ{ë·‡EöšªñNÝoǻٟ¾­\˜�ªlü_”ûv¨x½’û›Õñ{µU~0Ñ4&|³LyZO{…Tü=P«â‹·³âÄ­«ç×pR‚ýQÛwr=‰Õj]*zR=ÕÇ{}8ó¿ZĽ-&`\²†ûì¶·²UÌÊ%KíÛãÅëí14_Ch¾E ØölK¦¿§|éÕO• ÝÉgûÉnûÿUyÖî¶?Y³ÞŽÎ]ºZ/ü¾ÇŽRÞÐöeåc/~¥\¹òkåKwÚ;å»ÃNWžqÔîÊîÍê¾·³}%ºêþ*‰nÖ@@@@@@ˆZ�­í�¢výB¶bq­;kÞC67c_r ØÿÛŠ/©�»¶ßöw°­1dZ§îÊ6±Ö®dþ¸1ʧVY�áà}› 7Z ”©ó •©û Tö´†,µ,ùk¬Õž×]9¦xƒµŽyú?–1>kØm�Õ۷²VÉ{^tµrÑÊ;”ïù˜òºuk”×ßx¦rgŸµš÷�”9>SyäžÊjÝ‚SÓQ@�ðîйiÝU¿T[>Ÿµ´mßÊúßTÔüÝÚÛn\ñ‡2§ÔÓìÐß««MªßjÌ—l{én�½VÑ¿ÙÑÁ•ÂEK5°Öº@ÄxÝÝèúÈZ®õŸ‹öçfé�-EŽq­ºÛµJÓ¨­bÅVõì,›2ßë/‘šjý ã*ÕAK|G;*�vþÊåMPþf�>c’ž¥¼õÊý•_»LyÛ—åûUjt•%[S¬³(Uò¾¶#敼¨¬i»õØÎÖÃà†[�RíªÇÿ,®×o¯^½4jæÌ™J×3¸výŒûoØ`½E÷ß߬"¡o±½¼¶,¶6¼'ÙYÊZ¯ß›Ï»oÜöÃí gÄ ëçü¼K„añ5ï£Zís¨ÕÎ3ã”ó›÷Sî{ˆõ̘ñìDåý_Rü¶ÏI_ú«r~ŽõiãýöLÇR÷^µ©}Þû¯ü{ÌŸmgŒ_�Ÿ¤œ·Ùææ‹m©ÜñëOPAßb�¥ ÐÄbm¯ø‘¾Øë—%*~;à­]ú‡Ò;œÆ´¸½†;GÖ.µ`‰êüþ]7+ß\¬ˆé{áMÊ‹÷i­|ÆFD\±ÓÊœ-Ö½Ñ;ŒIèng•-_ˆ�´N_Îϯ—%÷hG±^Þù lž_ζ£’ýß°ÅÝ•ù”½ìì´!KñÊ�´¸‡ÿ=Y¹¡å`åÝÿ8EÙß>|D@‰mÛUµì“bß8MÚ2W9™íEü]Ên²­š¹iµ2/ƦïÐÑÞ›ÍÊŸ¦hlã«múzÛ•dz•ié}¦kôC]|�šv�¶¶vLS~?ßÞ¿§ö°5 ÓUͪ,E¶w�3u…2[ýÃcböl箥¿KJüvÜiXGeêÄyÊi?Ú™lÆ©=”­"BÕo%¶ÔïNÙ{¡ØG"_Àoß­Ÿÿ•ò£÷ìs÷”éJwR+ ƒNºHyBWûîåÙ‡íýGLwåþg_ L•ºà¸9ÊßûAùá{ßW£šÖ¸.¹ûAÊKOÛCYËÖvÅÖNsʳ¯()°yÆ6ß^¹Ï‘Ö“é°öRîèµñÜÖ#j�Æœ}Óÿ)ýÿ~P9»ï@e÷4kk3ÿÕ1Ê�V[+–”!§)�”¦¤! ( Í^ß”_æ”ë3‘¸“Öz‡n•Ê­ÕíúU‹•Ö°¤x÷>iߦ…FÔ Õ˜×ϯ}'oY=ŒýùÖ#põ&[VL§ÌϦ^j¹ÖÎÔõ0ÎØÖô±ä�•?jøÝ'¾Q~4é;åâ-¶‘ô%Xû͆î­Üç€ÊCö1çŽÉÕX»X;*õ>ä å½½vP>üدÊ}¯³cÖŽÍMiFÆRå¢EÖ§¹¾Š?k­fµd‘eMK|¬õO(õ ©ö,Î8㌒ißyç ×´Ÿqù¾ÅǼæ8ç’E„Ù€½×ÍùD9á‹EÊ-^w_Rg i}‹‡õ°×C5^7šª%ß^3ÊmgMÕx–›Äo¿O�S»Í|!±­ôø€ƒ†)÷,X¥üaܧÊOŠ­gðГ¶W–ïaÛ~W�?êëâ÷~o¦�Ç”—¾Fc6äX¿í_’¢Ë®6MÑ÷ã”o|«¨°hlæ¦?ßê™ól»Œ]f?�SÑY¢-¬í ‘ʃûÙ=Ÿ*šF£)D€@ÑZ; ÿê~y¢e wïŸ�l?°iÆ‹ÊÇž[®ÌNí¥<ýoöÙ¶w�w‚zR£Ûí.Ÿx·òÆWZ ú^¨¸ûÆ£•Ýâì7À¼Ÿfп‘Ul›�±QéÎMã[YßÍ%_¾§üq¾�y®/°óÌnÛÛQ`‡�+wíeÇï{Ò®€¼:sƒ²Ð^ì*¶'KìjŸ²O=÷Tåþ½íÌÊ·Å>ÉhWv–ÎXªœ:ævåâEç+/9eweǾö]Äe·ÙðóןU¾þ�íóó7Ú~oÒó¿(§|u²òæÑ6e÷âtåšô\åÖ…k¨âb�oZcÓ{;N=ÁÎ2ÖÛÕŸÕ‰Š*‹­W’÷+³­#냪\³èšÀ^g@@@@@@@�&(¹�É"hcYë‰fÛY«�ÃFZÃÔ6]S®öqvŸ¹!çX»æçO¶6 Ó­=VAÐ[=Ä&4Ó4­Û¶R&mg—Üeˆ¦9täÊÞåoÛQã‡wŠrÕ>ý•‡ï»£²cJ°– ñí­E̹·?®Üg-hZx÷’luò-¾1á#¿ßAJw3M P@�(°|¹ó¿VN]W¶ÏDÂÀ=5~'×5¯üúû­?DNV¹v‚±¶_mÙ,èνüÜÔ;&&­e¹ÛEv\ËÊ­ª%b3 2ªk0W®Õ­tÇ kÿøã+÷YL8è/ب?ûf‚—•/o7ByÙõ—(�èkzÁŽazØ{{áeúš%Êyß¼¯|á)[»YÖcìè›_TÞql7eMÏ`ô”F)E+­þÿ¹ñ%å‚;F\xÏ�Êc¼Þ«1ö³Zì<-{Ëz¥Û1ow­†�WÉê¤öÕÇßü¨ò�+íœj»ô)Y¿Åêâ¯û ©wζ]k;˜¹Z±×k9§_ªÆ¼x”}O²w7{ ½b²ÖÚùö¸ vŒ»Í»Û±�qÖGY³ykžú˜YµæáÏøNÓ½õô4å†T;"_ýבÊ‘µkñÙwYû^þ òÿ¦� ü÷¸(�üc†òÚ.Wž~˜½+3^û—ò®©ÖS|Ï+ìzæn¶­ÝÖ×@˜{íué3HÙ*õS庳• 7Ÿ©ìå½n5P¦®Y 1s–¸W¥;–§Û¨îo—2 jà?ý[ìSÛ÷+Õ~àM ûÄZù¶³GÒZÙ«ÚÎ_õIy‘íǶ¸7Y¤Z¼š7¹(¶Ï\ßü…r­w¯ñn‡ ÓðŽi•oí&gÔÈ+ì÷À�ÙÈŠ”Å'tUM‡j¯çi?Ù·O‹clµÛ‘')O¥µ²ƒ—Á§®Þ£¶^mv;Qy¡5y©°ØrÓ¼iþZáã•�ô¥X Aëɵ­ø’¬•ÍÐSÏÙ6‚@�hð[»éoÞ·¾Œ«]'·Æ¾4ý»ÏÖ±ò[së¼ìrmÇ}Öò:¡¦½|Ö�"!¡\;3¿õÿËÍSÔ_©ÓZÿY�Âlk;ŸWÀMዳ¶�i­­ÿAR®9oȲ÷¥û¦Ø“ –~¢|ðZk­™wÿmÊã{o½®I¶–m}‹·ý]Ñ¿¾6Öocô?�Qö Þ¶½èWMóæµ)§4þLÚýïsû_í`\ãfÖ vnХ܆ÕÈ•ê÷3Žà¾ÅÅ[d²è k�ûÑ\ë‘Pèõ-N†�8ܲ[j�QÙ;3#[é:oÄÛË®Ôý]u±�WÖÊŸ”_OýF9½7¿Yëì©cš@IDAT'©ØúÏ—~l³î³«5}Žñgýbÿ¸âÝÕx»!ûê¯~�}h¼;4/úö[�ÿÝ6QLŠ×wyx{wW´=l\J‡pî?dkAA ¸€ótMðúSÓ”bìsÓ~çÙqdH³Š^õz L‹g·üð¸òø#V.¬gªõÿ;ó¾W”_0XÙºÎG«ÀÙ‡p¸xµf>é¿Ö«ãÙy¶œþÛ/~Ýt´íßÜ)X%§'6qØ{�%·ë¥ìÕÒö¥­‡] užíÏwëÞ\³Å¶äÌñO*ÿ=f²ò�ÛOSfÄLP¾ùöµHýÞzrm½õĵµkžôçû(®³�u?úw;NµŠµí¶qµÅÖÙ˱SÛž-:$+O=džۿlg•̰N‹uï¼¶îʬŠT³ØÚeüø¡rìB;ú§v±o{ßÝÎÿÑRbÛï§š^óàmÊï²^Åç¼®¼éT˻ڶU¦ää(ÛžhûŸgn°WÂz?cÛ¡å�Õ§ö|Bùï?^P>ôœm©Á£ì�ÕÖíb¼W_ÖbûóÀ¨ •�~·YéJQ¾½† ½?ì3^dž½JÓí4SSmÏ“TÅʘ^|¢½[Ýygv�}ZÌq"ñ5®êG}±ýRÎÜw”OMXek›:Pqö‰Ã•Þ­äm�ˆ°=Oó~Ç*/¸¼›rc'ûVg@;÷;¬¨Ä·ÑØ�O¸Rym‹§•½ñ“2¹•¯›î ½oÿº ±ù_¾Ó0å컬ž'Ò ¥ÂúT¨TMù@@@@@@@ ^âc|´¢ªWQf† €@=X[Ú,¯-íK_Z§9û{[‰ër”�Ù#h{ïÆy9�ÏsÏ·¶Š5îaìõ+ˆO´vˆî¼aë|‹­]vn~ù¥¸eÕ4m>uZë€&°¾VW�²DùØ[ÖâÒ·“�9ûô#”{ì¡l›âÚ—[Óô¬5 •3>yUùôK_)Wþ¹^þÌlü}ï*wyðteŸ �>5A5Klb{MÙ³_?e?W�ÊžYhý;Û–›Æ×ÊÚ¢öñæÐ¢QOë‚÷3v«uË-·h`Æ Êã�?^ø,7M(2/c½f»Å:TTX¬ eJKk«[ªM®›Öë[üû”÷ô×Gó6)‹¼ž -û¨á£ÞQÙ&Ä�tã{í¯¥œ0¬«²ÜK@ã‚ï—|:Aý°öÏWuÐçÄož­ &¼0Õ¦YúcükŽ©üåf½ªò6þ¡üqötå÷ Ì?ßë“›ÚEÃ;·~0;´ªþÚØ[®]ÏþÊ��âýöZÊšý�Òõ0Nôú½õÐIcªß6¶(']ÓoÊrým4XA‰Oµ½n«Ôê×¹‚™0 �º xïèY/Ü¥ù<6c³2uë=vÕ)»*ÝmÎ4A%±ã`Õöìk®P®_ý»rÖ×Ó”?-ž¯|ù;R¬_ù¨ò±ë¬ëöaý[¶÷[;ù~å�ÏÏQÆô¿Dq÷ væÖmkÏ?ÉÅö¬=þòˆròìk”y�z+;$)JÊž~ÐÁÊÝ»�ª<ò“”“ï½Gùî o)ÿž÷Ûö¾KØR±ÍlŸŸ¼Æú2>ø²�“?²Ôޤ¶¥õŽkk«ýàE­”‡z½�òîs|äO6åøJÏ:ô`ø·oùômÕl©­nL›#ìGgA·ýB­»ëF's®à1›~í¶-Ff¶®oëL«Ûí×þÛâü*eõ]qó¯-™Õµšµ½èù–;hXSpß[Ï»ÜÖ9ù6eÿgãl‹/´Æâ…#†ZlàÄæ¶¾ôÊ Ñ–œwçÒªÝ5ðí(³¹{§ÅôĬWʶUØíß½Ynñàsõþ˜ÝMoœÓ‡Y|i‘…v•^9x\W.µº~òÖf‹¥ž^�› çp×à67²KõzåW]wÁ�->¶Vç׿ø?‹??¸»Å„ýÀâO?ÕYÊý·üÎâ­Ï>lñW§o³XþÜ#v`“Wr²5:³(7xÀ 7[|ö©Áo¼î‹O¼ªWž›�Ô²ŒÜ‘6=å{ÿ°xç�'Y\ý«Ã,ž·Zç8y9£pÇZ­woªŽ¸\÷)ÓW®ÓÕ&ŠÞC«*u´ºgzÉ™6�ÞÀçå&6¢ŽðëJf_=|�Åß¾¸N�Ú}º…_]{ºÅáúBA |å;¬UkV®´¨3ŒV•õºWÐ©Š½Üo´ù³M°xðؾßÚ¤7Mïw}ú*6^ôúY8÷‹Ëª4Xj6ëš:ËJO¶¸ß(�Q¢] DgÕÑÎ@ý@@@@@@@�øP’@"EÀ?láã·[}]¬‡ºþ{êž¾ßE/š¬Qo›ëó¥ìÀ´à,d¿zUWdNØÍõîrÆ)©«�s'o–ýK×Cµ¯„¬ÕÁÕЩN×þÊ-nYÑú½&}×âeG̶ø»7Ôdz¶ÕNÞäœ¹ßØœgÖ¬hïœo- O Î3v§ãs‹ÝÇMHÖÓ4%¥‘ãÆÉ¦M¬·7õœ/Xð¦Å׿TƉ›_Ûc¬Æø9iò ‹Á‡—ÍlAÑ–×ÎVîõÂDåîŒ6Äâ Þ:šÂsj®¶w2ZÑþš(^u×ÏíÝÇbŸ ­?u‚’5ÞyLǦ�~tÄÙYÌÚ´Úâά‘ó\T5kW¥7¥›Å¡c÷³¸ÿXÝ·w“£ÿVoµu¶+ ¼öˆszX×õ­ÖoßlqSBÀ®òÚœ¢Ú×4ݯ¦Xûkó& ÍeÏxÕºK¯\­š |�”YÕkŠ–YQKRý§ˆ3Ÿ€@Ç T®ÕÕn¸âOßÐÓܳǥ±xÓ™Ã-ê¹+Å›¢,‡áS.¶xë�:ÆMSžñŒGn´øð¹Ó,þz¢2Ã^ ìVç�_}þßë-Þõ‰êìq®Áðæï¾c“ªâõ‹¯ØnoÜâÎÔ¿G®8ÔâÛYzIM?ê‹/üéH‹Ý#©‘VŸÖ–„žÃì.c‡9¯´•­ûåš|‹Už¡C•$Ö#;Ѷæ^¶ÃI¶[m*~]„§°Ì}½o»Þgëd°Ñ’¿RoBë|Êw�¨=8°ŸbÂ"m­Õ—õ±ûÔ•Þ¡Êœ®Û`ÿ}ëÚÒ—»ÏÞ½mzüHå!©%QTœsõ�¼ÁªüÐgª÷˜?iúŠƒœÜbͰ&)¿¶ÿgX¼þ‘ñGõÔqzñ½¯X¼éÚG,õò�,ŽÕiB¤¯Z1äÈk,>0õR‹Z³Öâ–Rí±œ¼ôÐ: ó,~ðµ^sldjûÛ{po‹Q¶gUùzÅ›£}šç¾ù•Ùôö�z…ñ{²-6ô©㺸@'ˆ:ªí•vX‹9Ñá´%¶‚ÎÄóßû«Å+þ„Åu}–?ýæ[-^²O¤½û[¥(„L ©×XÛÖI§ëUºõçz•+[õ�Å×>QVq�_¯…)ÃO¶xñwö°¨ã§ ¥|¹Ýé�W>µXêl3iØÑ6=½Ç‡_š«Oèï<ý®Åƒ~>ÝâÀXúXb퉿ÂcüísZŒ € € € € € €8áIc@Z- ¾´[fßkñÏ�/µXí¦78ÛñæL´ÿW\uŒÅ-y÷öªS_Zš“oál¡vc>õ¿.«Ø´³´™àWŽ_y©jX¯xÕC±}#?…´Õõ*׎^åÁŒ›:Åbö›ÊèÚY ¦¥_hï¬÷i�Œ0¥Q�Àð’ÞU~ŠÞ3£ýmÆÚ¯… ãxÝó´@@@@@@â^ JºËÅý~@ ¦œ~ýK”9wË_^³¸10ƒ!Q£+þ£«,Ý¿å=ýÕ'¬K/å &zÔ×^Y�VüêQ½¥@£Xù=],¶¨ÛŸ§­¹-?°Z6ÃR{Ô‹½{n‹¶áÜ!0„£Õ�ÛoÏ´Z”Öw˜ÅaιÒçJõ©-5;¶ÛT‘ Ú1‰u¥ÿ;+«¸­\zfn[ºÐâ†*M{“[œxˆúÉf·¿³¥s –”hËîñ—œ­¼�´¶FÎVZô¸;V*KøÍùïXœÙg’ÅÓNUþMs#eªŠ©ýGX–®þË W*KcM©ú�ª×gYL‰�# Ûí]Åy=Y4óc›Q6h‹£êUŽ‚Á5[u´þóòó,ÞôF¾VØGyÆwßû ‹Sz¶ÿ%I›ŒèâUjª7ãÒª ³‘Hh€se…ƒ~=Ïê’ÿÓT¨ô#[éæC¾cñ¶u:[»ò陯›âdþ%ë}¡¹×d[% Š¿t“ÕrÕr÷DJW£Ý_¯ù-?£my#'ï‘b+?5Wçºí)s—)±ä@Õ6+W5Ý_)4ž—6*—dgÔ¬€÷ñâbåœ<ß©Es&�R‹Â_TÛÍ«tm•�¥Î£õlÿúFáSÐ_¦ ÿ­[�f$wµéìôæOÖ“òÔÞ=´Ã=o®[mqÓö ‹~ç*;V+DUÑž]?÷u‹ï:o Ý�SNØAƒš7‰‚f&²Jî3µŸÅŒY«,Îýl™ÅÂs†Xì¼Ûª×Øü¯æl±XêÑ!}ð~:§Í ^ÓæR:Z@ŸPv.xÐâ5çýÜâ“«Uƒ!gÞlñþßëy; oz Ñ/P£W¶9�Ügñ-'ØŸÐÓ¦ýîÉkÓÏε —¾r�máî7ÖZ¬öët=sÜû4ý4±Õš*Î(D[ò•yã÷«}5éNëjw¶3§BK‹‹‹-mԈµ¹Z¾u6ýÉ[ÊÝ)s^ üN®Æòuå6g”ž8-,jKù/³j›e§]`ñàýΰxÙ8 ­)>Õð³gž¶8w«êŸ3îd‹gOÔkf ¡Ý *Ž3ù A.̈�êüÙV�¿_z¶Åß¿¨#Å3ü\ ·=ü‹g�P*\4¾JWoz[­¸_¯$']}ŠÅMqV±ä[ç½-z]òdô·0ax‹íz%Ô¶B^ôz“–«|�=4Wü%ºÊKfm3ô/£‹îÛ³§“aÜÜÝ;q¹»ï}^­<íâC,önôUT¯ö›fêõùéÍÎÌ=Ȧ�;p¨ÅpìÁ£öQ­ÚŸa¼i�Þ×>)ÖQ65[Í›v°â_ŸÑ¹\‘ýÕ/{ŒVð§Iþ½A~¹´ö ¢þŠ­¸µ·sU¡¾4†±ê¼}ƒÞ—Ýwüܾz6vqFbnE¥#`Uof/«ÅÀÁ¹ªËl}šó•ÿ¿×‹�=ëj¶n°¥Ëk¯5óºéSXD¿ÆVëúO…Ys3>ßñε¥�Þù¢Åü ½rž{Þ‘‡7zÌÚÂè)^�Áîsø©‡þåF‹+žyÞâì_L³xBïo›”/zÇæ?3Wç�ž^:ç<î@íëo¯§Å”ŽÐç›óÿcñGg_cñ¸ž>ÇýÎâ£ÿú¾Å}I �ôÖµâUåÿwž¾µóyõ?äx;gŒÓÙfk_å|E+í^³ž|Àâcè3H¥_ï‡ÙûœmñŠÓöÖtí¤«ïaß³xñš?[¼kÖf‹_=s«Å[6ë“ËŧO²8$»±w`[H‰8�Ö>g"®T@@@@@@@ mIm»÷B@�ö ToþÀ6r÷uÊz·^î©úßõ8L}lsþ‹u=øl²…E]þÒû ²èSõ�’¬èßÊÅk,ù[ìÒ‚Îó¾M+lÍoг%t·ä¡ê—ÝÚ!ÃÙj«NÈŠ¿D=÷wÔ|{ƒÞ$õåO¯—u¡žÑ›gÿÓâÏïQ~F-¶M5WüoÙ*ÿø™bÛJÅgÙ¯ÓÀ1í,:-vé]ï>k˜Åxíªþ”]{)?5É»ÊbUÅ"‹o=SaqXÿ®3RdÓ‚CÇÖ (~=/v®ýÚâ2'CÝ›¨GÒ_Ϩz[s®.�™�âÌW¯a߯e¯WáþYêÉÛØÁ¶¨Áâ÷)÷½hÝ翨&]-íÑGYD©ÎsvÍ õ#~a¡2«œôcûX”UµiU`n•Z´n�úW S ¼^·z­hh 6Ûhû¥¥:j< ÊÊqR㽉jWrkŸv~Ý+±–Ï©C¢žÉÉÉŽ’MQbQ rçkVA©^ ëÞ™ôlÜV;¼¼Óær½†oݬ«8lª}^é’’£ñS»e´ö©fwꀢ֔¯~Íâ/þ®ÅÛÞѰ“¥Ý§Yüím¿¶xteG­X¦ù¾àÃÌñ7§ÏP[Ú»ÉÌ][¡£KÍZ{Ä~û‹7Ü¿ÁâÝsç[¼ù7[ÇÒ‹ÿÓ O»ÊÑû¸Ûk×FZzg¿^-·lЕEJ�ûôÐÝþgë4!ÚJòh«ñ±—eñ–Ïž²øô�7Xœ2ì‹ì§W�ÀçŸoç"›óä?ÿeqö6=K{}ç"‹GŽŠà/K}:¾æýKõ¼à�},þùï?±8}´Î“üzÞ®ùÄâS7éhýó,]Ñ¡ûô?Züù‰-&Ú_ç½SoÓ zqUÝ»·ÝðmµPX¡¥nñiÎæM:�j÷„Wÿ3»éÜIû·ÿzÈ™x®Å«�Ôç—K^øŸÅ?Þr¸Å=n<Ùâˆ, žòMs-Þ÷Ç[-Îröò>¿¾Ü¦§ýSÜ_®½³e‡Îu�3]û¯RT W†º�•Zºc‹Z·)ywÒ´{vI³X÷Z1Ûp;Khë£÷úM³o·xÅy7X|nµ^�rºÚâm7žn±_Ñ*‹ËvÈ2ø”Ç“ WàÞƒûZÌé¼§µ=:�ÎÐ+ÊÖ¹�X¼ëù¥+œ<à¬}ϱéK�nQïj-,ΙÛò¹oØêÏ<û–Åo ´}¿“ŸÜm½Òþè{S->=IÐ7$ãϽÆâ%Õ:¢ïÿP¯oëßÐ⿘mñ°O°8mâžûÖ]`Ǧ)‘)°û�)2ëG­@@@@@@@Â$PÛU+L[g³ € Р@õ–96ÿžë”7óÒjõÕ­ëeíô•>àû6çÆkްØ/°¼ÝnMIì7ÆVŸ�§·ß¬«ëÓl}¿X`sV”M¶8¾™ˆU¯‚¥_X\²»Û·ÝR¾Å¾ãGZlù¸¹Ój«R»‹Z½sÅW—ïf«ÝjÒ�6Õ«û¥vCü‹PƒY£ttºR9ï®PNmiþ2‹ ò-„¢xuTvs ÅÑ ¤ùë=oØ‹Y ¿´X´s±ÅwŸQ Uñf µM�©l7�!3Ç;ÓÉö;ó’Õ/9·»2�z8±[Wõ î’ªÌ�Ïg¨n[�ü�ÿ›Îp3 •¥´xök‹‚Æ+ò•ë¾k�+$tSN@ÄåAZ�(‘+ ·¢eÿ;ÓâÁW̰XØXUgÿÒ–Lé¯XWúÛÄ_Òî8^yfî3¿niçÿ÷̲JÜ|†2nú8 eÛÞ±92ä”›,Þýу†µy¡)iÉznœu°ñ�™ÊçkOùøƒwéfñÇ{êh:ül½n|p¬^…¶Ö(û"¯›¢{Ñ™še6}çSÊ\¬É6·gLT+:¨øµ§ ·Vîz¸Ä.Ú�é»nGÓ„NЇŸùg‹wÎ_mñ»·?`ñ’)oZ¼gÚ‘'�Q–mNÅZ‹s_yÆâìo´¯“÷Ñç¯Ûn=ÛâH}ЉÐâÛ2Ïjöôã3-~3÷‹ß™u¯Å=Æîc1¯DŸ_>þr£E÷Ì¥MßóÏK,îÓÌç>[%œÅ§Z½rõþÏz4¿‰GZ}Ëq¶tÀ-«ô:Ýn<2çq‹ç ÑqW[RôÊsöŸ´Çß™ÿ#‹�Ý~�Å^×£:¬Êâ3>²è$¯zr']kÓ¿zŠÅp¼™TͿӶ<ñ ½Bê=¬Á’ÿ”;l?'¬0äú÷íÖÂßb±öø‡XÀ#¶z2dõÑkuÙü»,žÒ ßÞæ>[mÒSø‘2ϯØLô+[áݲ8µõdkfã,F ²J—½d¼çA}¯¸Í§º&ô>Ìâ%j±�Þ ›+Îõ*–¾÷º­÷òë3,.È×™€{ ãMÔ7ãNþžÅó�ÞÓbצ?X$÷¶u&~WGe—>Z¼ï9}W°}çR‹ï>úw‹3žìaqä�Ó-žyöT‹C¢óTÃjÛ%à]6¶Jë@@@@@@@ê 4Ý7 þºÜB@�v TmúÀ¶q·“[üâ õzv{ð¹™Né{Ÿosþð›S,ŽlÿèƒÉCm;ûMéeñÿ§>Ý5ög�¸Mýg~©þ×ã&f[T/ß‹O½¿ç½=×bE]Eµbªú°¼�z¶¤÷Y‡¶Ú§¬ÐÏÞ^b1ïЉû¦6Ú>[Ú@©^g3ß{Y½ÑëµÚEkÀê_™Ôl¯“3ꎜÚÊÇk  ÍÒðU+¯¥&`_x�[“Z;¤m Óº±`X_³»Z{÷œ~ŽÅ¼ÕÊëýf¹2Q6mÝa±ÄeͰlfó%A©™ÊUê7\GÐø½ûiŽý5TRN²Ù'©gÓ¬¹_[\·ÓyÅhíãnÜß4£×(›7á0eQ� ¸D@îðCmÎ Î5 rr5^cN¦j×À³Âye¨.PRâ á»$é•dÔXµhÁ,Yo\nqÉF ¯º7ÚbkÇAohsÌC üe[­k×*×-‹Þ8sÇ\hñ_odñ;�=dñ¡_t^å>ب×:·dt×»í —+cìê+ϳ8uH¦Åð¼ÃÚ†)Í (é²Ï”k,><ë‹çüß-þ÷¡G,¾öÙ|‹3W[°’aÝ÷8Æâ¹WýÔâ�.œfqXûÏlm+Í•+�Òóä‰�”¯VRÿ4®¹»Ö_^£³æ>°ÝâŽãs,þð ½'öê¢wó�öggÔΩÀ&gÜâ;Ÿ,¶9�è nW¹dªêß;7èD³][mòÎ>Ym­ØµRJŽêÐÚÓç]wïô oÚ«ÃÉ·¾lqð¤ÿX¼ãö»,>ñÒƒ?QRVmÉ辯MÿÛŸX¼æŠ3,N죽É%¡·ò¤o|ñ‹ãïù›Å¿ß£<ã�?zÛâ7ögG`î§_ú ‹¿½Fg³ûª]±øú©6eìù]‹w¿ÚÅâÈën°xûë³,¾XËÑߦ¹Tyo7ýî‹Sz%Z¤t®@Õ¶ V�¥¹Å�[�hð/°ª>}¯ÞÌ–;ç9ÞÔ6}Êez›ÛâWú}–ï’Qdqƒs•¿W‰É½ÆN·xú©z¯ß_ç­8#IÔw{§³÷öRöókÏõ¯\ôø þ€reÊêv’M{SÇ[üÑ¿o±xbÿï™^ý…=îݧ(âé µ%íÈßÛÔc¿<ÄbNðn¬[�ÿQ. �‰ªJ•½T\®ž¹5­Lpö&蛜®<àìteG…çÉ¢—‰²í›,nÚ¦§iep=½zôôn},öë¡,´vK~åb.žùžÅE…:\3GL¶xÄ^ÊäOmÃ1UøÔS»3S]jµÞ–Ÿ¯X W9V/‹}òzXÌImô$ÖR"B Z¯öîÜZ ½™ÐµŸÅ�yÊöë¬ø¯7õ\úë+Š¡* iz¿š:D1/AïË_®Ð™ç}©‚Ò5SÏöY×õ´˜�Î;XHwoÂWnÓÛÖ¯µ¸ÉmÚŸ¢¬ñ^ýû+fêÌ$zKu±^?×mØb±¨JWèÒw€Åþ]Ó,ÆÝ3ɯ}]°Nûzái=´—õÑ9ptïik%Ê¢ÿ{­†wÀêÕ«mAJŠ^Ü+®5¼sC# Ï¼•Û—Yœç| ^Ûÿ$›>}‚ΜuŽÒªâ×™ÒÒ÷?²X8à‹c‡èüM¹Æ!)þJÛÌö•_Züt¥ÒŠ8|/‹]âîÍÉÝ®RU¥o�*+å9hРvm«¹;óé«9!–#€ € € € € € €1*`Æê{•²n»�諾ۂ)@�ö DsOLõþ+^ú¢Å¿^§Å÷ókuw‘xsÆÙô9?<ÍâÉÊÒ(*Q,uò«k”ÁÐtIè;ÁV8~’z™5p}ÿ›ÿáß.µxýkÛ-ªN*ê}Øçð+-^ûƒc-Žîæœø•Ï�ÿù3ÿ~Óçí¨»‡ÝHaá{wüÃâ¹#x4›ï>BÇ·ºb¥ÆG¹öª»,~�ìMbs&Ÿ¢~—DzŸÅ‘ýº[ÌÉPØ„õ©Ì_¡>�³ž}Èâß^n1`vKýчœû7‹ÿüîÞ3:¾G$ÆæNA�P ð©-Ô¢l:_ ¢Jç®gÜ¡óÞ/V+'#òË=ßSNÏ1c•JAˆ=�hþ^«©½A†qS:,C d‡B‘m € € € € € € €4)`é2nÎPǧÉ4Y/"€ •Ë•ózýÏî¶øEq@žn@ëü;?·[ÿ»Y±m%ý�wôÁƒ,¦¿¥{•¯pà…?¶xì°øjípÄÊuÞø®r…¯zÿa‹Fh„§ŒÂÕ—mØi±:°Ê^åïyÎU¿3¢±Üb[èé¬V§ôc�>e‚Æ>üò½ÍÝlnÙJ›žõ¿ÛœhÁŠ˜’R�VT*£ºÚØT­QW´fö—YüõÙm¥r‹ëªÂ@@�fR“uþöï‹»Z<á¯[-æïlþš=Ín6L+\sl–m™Üâ0ñ²Y@@� 0†q ¡X @@@@@@ˆ5Ë0V¿K  €„Z@«›4î’Fr‹CýˆMm/±ç$[|ùu?°Xp�2ž?Úêæßê^þª‹k¾Vl 8¹ÅƒŽý…-úõ9ʲÍjôô¡3[íÍÒøÊ'þúv‹ý†ÿËâmhq£3Ž�MÕ³º¢<`NФWã÷wÇx¾ê8›–Þh³ƒîÌ @@�Îè�«‰û.QžñÙÿÒxÆ¥•�]Q¦sêyü8�X|ÕÑÊ0¦ € � z·õ7zͶhluF ²ÜãË=ÖÂ]32ŒÃ-Ìö@@@@@@@�Pê @â@@Ù±™#O¶ø»;‡X|ñÁÿX|ì­o,Ôç[hýÔ¼q�¿ðûÏ?Bù»Ù‘ßÙ,YcïwÎ ÿ}Ø|‹3^yÉâ ¯~`qÅNåU·Öfªx-䌜fñÌsÏ´xÜÄÁ³5›‚ € ec%[�Ÿ½¦»Å‹ïÓÕtÖoß}•�ÎjÌåÓ2í¡~|¶Å.aÓY»�ÇEh·€›õèóùÚ½%6€ ¸ÇÆ ë0@@@@@@@ $ÞmE½/S.C\RSSC¼E6‡ ¯ñÚô°¶[y¶ÛWY\ºbƒÅ-Û‹,V§æXìÖs€Å#sÂpž`›íàâ¯.¶GÌ_³Úâº�ù ŠÊ,VztÆ’•ÛÍbÞàá‡ä)Û#9Ò²=ª¿°ZÝ}ÊO,>]b¡¶¤ù{›zì—‡X̉´:×U’ÿ ±)))V7¯——�ˆÝET B&°½XùO?xp‡Å¹Ë*C¶Ý–m(%I¯´>[gÚ'ïŸÞ²;± €@Ô ¸ã�VVvôûNÇÀåçëÛ•²2}»’‘‘a‘O#ϣă€ûêQZZj�MO×Ùc¯^ºªbøJä_V2|mgË € € € € € € €@\ ØÆî(~ô(�ëç�GˆK½û§vbqo'Æ6‚7)ËØ{è^»bl·—Ö!€ € tËRÖÄcWêº2Ï¢\¨¿¾¢+Ðl(רÆîåNqò‰2]ç¢ýº%Z¤ € Éɺ$�›Y]]mÓIIö“B àSnž±{¬…`£Mn‚ ã&yXˆ € € € € € €Ä®€u÷ ·8vw/-C@@ðù4¢gb"o�±bK Áùì”4Üqû¦Yüßî©�•s¼h½²£ÚS2Sõ‡ï•jñŠ#”U<º¹Víå¾ €@t ¸çÛÑ݆ÆkZTTd«TUUY$øq-– Ð:÷˜JHPÞ¯{¬µîþ­_› ãÖ›q@@@@@@@ &¼ÛŠÊ­!™ºÔ|ˆKjªzSR@h¿@EEEû7ˆr¿ÕßW£1ö|š¬-Þå&ºÉ2u3ù�´PÀí­Ü1ã!µ°J¬†t¢Àšm:×zk�¾+›·B™R› 5'§®Ç°Å‰)Ê!î�«Œ^9Šƒz*‡ø'«øà‘)6�’ÄõüŒ�‚ P›w«yÆ5Îw¶§‹‹‹-º¿ ‘gÌS�ö¸£»ß‡geéŠ5]»vµîkƒ‘aÜž½Æ}@@@@@@@�( Ã8ŠwUGâG€ ãøÙ×´@ ãRR”çõ’×ñö<" € €@l øýº8Xeeel6/ U%%%vËÍ3v3#ÝñVÝ«¬È$4#à^� ¬¬ÌÖs3õÝÜâÌÌÌfîŠÅd‡B‘m € € € € € € €Q( AV( € € €q+àæ0’qÜ>h8 € €@ÈÜsì�o67èŽ[œ��mu+,,´X^^n1--Í"yƆ@A Y7·Ø=vÜ£Æ=¦Üã«Ù»‡d2ŒCÂÈF@@@@@@@�è Ã8úö5F@@B(àöev#!„eS € €q(xvÍwGZ Ì3.**²†»ã°ºóÝuâAƒ6"ÐZ÷jvÇàÜâŽÎnïfÆ3öa € €ÁnŽ ;iðÒx˜ãf §§§[cÝéÜÜ\›v3ŒKKKwM»nž±û‰ƒlcׄ«nV±û*áæ»-uŸÿYYYv3p´ï´´4›ÓñÇƱú ¤] € € € € € € €@3d7Äb@@@ ~Ç]sóŒÝ¾ÿñ#@K@@h¹€›/ϹÅ�V�yÆnn±;ÇÍžt¯f]=7ó2p;L#Kn&±Ý,|w”b7ºÇHg�[èL†q Ó € € € € € € €@ �aG;›¦"€ € €-pó$Ü^ÿŒ1Ör7ÖD@ˆU�à±HÝ9±ÚÞö´ËÍ*vó&ݬb7Ã2%%¥=›å¾Ä€€›Uì^ÓË=FÜ££s›F†qçúóè € € € € € € €@§ �aÜiô<0 € € ùnÎDà¨lnoèàùm¡† € €´\À=Ž-ßkºy“n¶±Ý+¡Ês#~‚?;»WðŠ42Œ#m�P@@@@@@@ ƒ’<þz$@@@ ³b 94@@:L 2s+;¬ù<+@†qÄî*† € € € € € €„W ÉãuSŒ½á}¶Ž € € € € € € adGØ¡: € € € € € € €@G $y<äw6�ƒ € € € € € €D’Æ‘´7¨  € € € € € € Ð�ü`Ü�Ø< € € € € € € Iü`I{ƒº € € € € € € €(ÀƈÍC!€ € € € € € €‘$ÀÆ‘´7¨  € € € € € € Ð�ü`Ü�Ø< € € € € € € Iü`I{ƒº € € € € € € €(�äñwà£ñP�®¼Ï§y•ÕŠ�ÏQ\¿]ñ„qŠc)R@@@@@@@�0�aT6‰ € € € € € €Dƒ€wÛÎr«gfJè+›ššú�väks¯�î´¿vVÛkáõê¾îvÜ�U×hÎ#³g/VtK×Lý¿ýüÚ›üCâ[ ¢¢"¾h= € € € € €a Ã8,¬l@@@@@@ˆ|�$�×Mtu2_#¿¾á®a`&±Ï¹QåŒ.¼¡@�¼­XÑ]GS­).pvšîÓ§«bj’âÌEŠ�¹Åºíñd„!éÛÝ2@@@@@@pÈ0所 € € € € € €Ä©€“ä§m¯ßlw\a7«¸¬RËžÿDq†“ìŽ4¬Û¡(I‰Úʱcß^¨X’�¥g8�i@@@@@@@ äd‡œ” "€ € € € € € €Ñ!`Æq?z±;&±›[\Z¡ývËKŠë¶+†£¤;ãï;HÛÔCñ¾w+œñ’Ϙ¨éþÝ£°ø >°ZßyËL‹É�hñôÇXìævN¨XbÓ/ß?ËbùÈI?|ôî¥6EA@@@@@@�Ž ø£¤y@@@@@@@ Â’<îØ½ñœgì Tû´kžsÆ-_nq¢ó ý‡è±r3sÒ�P®§Ü;yü`M»#k*ŠJ�ÕuýlågÏXô�Å{žlñ¢Ún Jå.Yø¶Å'ßxÃbeñ(‹Ó¦Y  € € € € € € €@'�aÜ è<$ € € € € € €  Io�a8zqE•öÇ{Ê‹ c9q?m|H/Ådç×z·½²5gt?ÅÔdÅ^ºÙ¢¬èmŸ=gñ…Ï ,:YÒÍÞ«µ+è’±×t‹gÔÇbc½ üeÒ{ûeŪde7M1Õþ¬ø -|>ã}‹…ž®�>|œÅ.qü´æS@@@@@@èD�Æ~ûëÄ*ñÐ € € € € € € €!Ð’4ÖŽ¨G'=†“ÞësòrÝq‹«5 oXÊÄáÚìANtÇ'vÇ3Þ Ì`Ïÿ}¨xͱŠîØÆ -ù-ßx�îûÒ‹K-†§öªI^úd‹g:Æ6TªmΆ�Y|e“jÕåp�^|h¿D‹n©Z¥Ñ‹Ÿû D7“ò,T¯z×âK4£%%iÀ[í˜qºoKtZ²MÖA@@@@@@ žøÝ-ž÷>mG@@@@@@�¸ˆï cwü`Ÿóo[q¸žƒ{jË'ŽWLuÀ“œßéK*4çßʲõT(C׳£TÑ--ÙWÛé1áb‹×,·è6ÈÝ@pôïøÌf>zÇ‹—'jüàs~ö‹#S,4QT•äžM�^ì+˜kë<þØ‹•É£-žÊþsÝVø•Eýñ³Ï[\æ$Aûk–ÛôÛ+¶¼¤7ÈV>Š ã–“±& € € € € € €M �aÜ$ @@@@@@@�؈ó c'#×C»§»dh{çMRLOULrÆô­qñþ™š³µHÑ-n®sÝ­üWoFß=-ŽëÛüê¾-Ûm¥—Ýa…{ÙôˆqÊ{ïT­ùû7¸†o›Íþè¿÷[|¿PíJ{˜Å ýܧ–æìüüI‹ÿ}§Å„�ÇX¼ìì~¿ºÿA‹ïµxüågX›ÓTbub÷�¶} �‚ € € € € € €@Høõ-$Œl@@@@@@ˆ>�øÎ0Ü_NÒoàŒvM';i¼ç¢�tËRLømþùyš³x£b`ñùtËÍxœ¡Ówyó{÷Y¼gÆV‹Ník³¨ÝÖúwηù�ßûšÅMž<‹'\r�Å£Çä[,zÜÉ'ÞÙݦGŒ?Ðâ�Ý›Ê0¶( € € € € € € B�€_1C¸U6… € € € € € € ñd‡'£÷”´ë÷Tt³�½Nîìœešóî׊Á¥6E7xA¤ÍqF&^ø¸Uë/w}dѼ¸~%«”?=ãîZ|ÕI¥î1í{6}úXå[{}Ê0¦ € € € € € € €@ç �aܹþ<: € € € € € € Ðid‡š~ÊÚâ~CSÞ'·x•Fùõ<¦|ÜfJÄ�aìß1ÇšpÿŸŸ²¸¤Rmì;b€Å¢e+,Vx”¼mîÿ,Þÿáv‹‰ƒ¾cñêïj”â.ÁƒW}lóÿñýÓ,þËþ,I{ÙìKÿqƒÅcòèåР3@@@@@@hµ¿½µšŒ; € € € € € € €±!@†qãûÑ�øP'c8§Ö{s�bM#C �ÈÓÒéû*¦&+&:é´…eš¾ï]ÅêÅ(/Þ\åûN9¨—Å/ NµøË3*,Þõ+e¯ô¨ÕÝ']nñ†�2Y5æt‹cr‚“‹m¶•4ûëѯ¿Å\‡Mó¾U5tFâ·ær@@@@@@Ú%@†q»ø¸3 € € € € € € ½d7¾ïNÚO˺g+ºÙÃYÊ…õ<=WQõÖ•Î:ç¬ÛiN’l’óK¼›O|ÿ ÍßQªÅ›cíwÖõÿ˜ªÌà¾Û_úv˼Y6gÄñç)~{YýÛÉûØís÷‹S»7–…\ÿ.ÜB@@@@@@�P�a E¶� € € € € € €D¡Æu;-8µµ¼JËÒ�Œa¯³xÿ¡šSªñz=¯ÌWLu/8DÓ¹ŠI|þ²ª@IDATí>éä"/Ï×ü˜+ ÝX›”_ìñø¶;ÿ € € € € € € UdGÕ € € € € € € €@èÈ0nÜò)'?øêc´F—LÅ$gàâ©{iºÄÉ3ÒSÓý»+¦8¹Ån¦òû‹5çƒ%Š”¦ü¶|ÕW_Xœ¯Á‘,bÍê7Úâðž) ®ÁL@ Ü>çM ²¦Æ¨ªF7|~7ê‘ýδ¦( € € € € €Ôp/gœèU6oR‚~ùJNtcçç÷v~ ê[q @@@@@@@ ƒÈ0®ƒvòÆên8ÿ·ëß¿g(þØÉ3Îpr[�_û=§ ù'¡Ø�ãv X²I³ÝìdMµ¾¸Ûiýý¢õUÊÃ~î¯×+6Ú†T[rà5÷ZüÍÔn÷F×f *7«¸¬ªÚ6XQí ÕfÙ € € € € €@\ ¸©¬öë{f÷Ëær}ñìIp~LOÖ•ŒS“:'×·sU­§ € € € € € € €tªÆ–¬Úd¶êÚmÚA÷ÏTüÁ4Å-ð^n—€­EZê®YCš0ZTûÙj“N;Êâ¨ÌÆö…z6ôœÖ¢ ²  �J畼¤R#3>q(DÙ € € € € €À·|ÎïŒ%•J7®ªÑ/b™)Ê6öþùí;…ø6Æ!es € € € € € € €@´�a\·§ºeÖM5ôÑzÍ}ôÅ‹¦(ºãkʆµ¬Rü÷»ŠEeŠm+MסmÛŒü{%ö·:N8æ$‹S»7–aùÍ † ;åÕÊ*.ur‹c§U´@@@@@ ²Ü+_ÖTø­š9iÉ;æ—32Œ#ûyAí@@@@@@@�° Äw†±{ío7æur’ó zu##¼\ëd;#éž¼¿¦Ýq2�×8£knëK’®EîqëX«&·´ôÉŸÙò[ßÜaQ= š-5¥¶J�“í©zϦo»âs‹i-îœ�2ùǶþíޱ˜b@ ¶ÜÞ[äÇÖ^¥5 € € € € €@4 Ôøô»_Q¹~ÒËî�V�µl“âF� ÜhÙ\Øè¢V-èãŒ�|¬ó¸nÜúxšO1yÖ�öP�Ÿ¦ìâÖg·ª–µ+{“RmŠÑ‹ÛbÇ}@ ²ʪtíU7"»®Ô@@@@@ >*œ ã´$ýš™¶_uÉ0Ž�g­D@@@@@@‚’‚æÄÓ 7‰×3ØÍîÍT­çÊ£_�¯8w™bµ3V±¦BQœ^ž‡k[Ó÷Ut·6ÃØ©Vó ÆžÄ”t»kz$$üf´šL:ñd‹{÷ìg1­éú{³l�A“¦[<®¸�ÅÞ¼MP@�pG/®íë|·�‡C@@@@ˆE÷ÃîHÆ™)áúa— ãX|îÐ&@@@@@@@ ÞmEå¶Zfr Ömå*©©Q’4êþ4ïsrˆ�ë€{*ªÔÖJ�gé©pâ†Mï(U .-ó²k¦îíŽ[œæ »}R�éäD-uÇ0n:CWëQ@�8¨¨¨SkË«klË¥•Š@@@@@"MÀýÙ°kF¸.;L†q¤íqêƒ € € € € € €t�@¸.uÝAÕÉø?Ê»#»9¾^g–;¢°›<¼·ÊèÒÍHníC>J¢ó;½»ýÚèÌqëà®ÙÚí³> €@›ªjÚö²Þ¦ãN € € € € €´RÀý»ºF×KNrglåš^� ã¦}XŠ € € € € € €ĬÆu»ÖÍ*®Í3v’|ÝßçÝœãÚÜâ ,´¦G/v·Y÷úø(îXŵYÅÎ#’[hÅ4 Ð!¾¦_É;¤< € € € € €M ¸—Ë Ç�»d7-ÏR@@@@@@@ fÂñ#t4c¹9¾�yÀ~S�æJÝ@�æÜKH4·Ë@@@@@èLØ®—ɯ¡�¹_yl@@@@@@@ ’<µ¿E3|n'î@ ÓÂ×'«ÓšÄ#€ € € € €Äœ€?l-"Ã8l´l@@@@@@ˆl�$�;^od×’Ú!€ € € € € € €„\€ ã�“²A@@@@@@@ :ìc»Þuø.y Ô@@@@@@ˆC2Œãp§Ód@@@@@@@@I� @@@@@@@�8 Ã8w:MF@@@@@@$ÀÆ<@@@@@@@�8 Ã8Nw<ÍF@@@@@@Øç € € € € € € §dÇ鎧Ù € € € € € € €?ó@@@@@@@âT€ŒãtÇÓl@@@@@@@€Œy € € € € € € €q*ÀÆqºãi6 € € € € € € ÀÆ<@@@@@@@�8àã8Ýñ4@@@@@@àcž € € € € € € €@œ ðƒqœîxš� € € € € € €ðƒ1Ï@@@@@@@ NøÁ8Nw<ÍF@@@@@@øÁ˜ç € € € € € € §ü`§;žf#€ € € € € € €ü`Ìs@@@@@@ˆS~0ŽÓO³@@@@@@@~0æ9€ € € € € € €Ä©?Ç鎧Ù € € € € € € €?ó@@@@@@@âT€ŒãtÇÓl@@@@@@@€Œy € € € € € € €q*ÀÆqºãi6 € € € € € € � € € € € € € ,P]æ³™KW(¦ Õ‹ÃÒƒ×bNt �aÝû�Ú#€ € € € € € €m øÍtÜ@�˜ðû­y«W[\]Þ-Mï¥Ó’úz-ê¯Á¢Jy*«ôO}ÃS“ôøÉt« oìoÕ_jmܼx‰Åürç)Æ6빚Òk„Å‘}3-6z성l� pì„’ÍÄ�ÇNÜír"Ž�A²™¸à؉»]NƒC$™ß³µ qëç•ÙZ×¼®ïáÖ:_Æx¸¾2ûëdE~b4„˜)|3»’† € € € € € € €­àçÿÖy±6 €ñ"àô|ü|f¥µ÷ÖMÑè±SÕ�m¿¾‰õ×PñmQ}~vo•Åy5 ­Šygž™a›¹z4¹š¡ÐŒÃmø‹¬Ñ+f>gqÖæðe»²:jºv™Åd»$ÄèàØ‰Þ}GÍ;W ÂŽù6󨏥Ģ/ìÚÐÙZF�þ»¥sæf ”ÖḎã/ZiõžÿÅ‹eá>j…¼Ùvkð~ã,öå ”aºi�ˆ9vÜjÖm´‰õ[•þHŸ¿2{²Ø#ƒ÷c ´F "¿gkIòë[ºΕþÖ:‡Ù§sôíÜçû¥Y<@_¡QbD@¯q@@@@@@@�8 Ã8w:MF@@hZ Ú—n/P¬ o¾Š7QÝòs»eYä#º!P¢ZÀ·i®Õÿ™‡?²XÞCÇãñ¦Û£Œ?ÿ—�ÒØjl!�ˆð—(·øóo[ÜîËÓJ$¶[©{ºÆ� ˜F Zô6S¾r†Å§ž[dQgoa-¼ï„•—�Gª@b�d«Úé{꛳@Ç]u©.ú÷ØçzÓ?IY©œ‡B 2Œc`'Ò@@@@@@@ -t_n‹÷A@ 2G¥X«Ÿ>Ký » ÖãÛ¦q…ÿô?ÅÅN¿øi'(çã¢aA«Ú\[¨PkþþŸõä�vŒFÜg NfN¨Giø‘lA£Eý"‹7êá]îô‘ltM Ðv�¤‘§Ú�/;k_‹YAOSß¶y6ÿÙÿ›eq‹OÇ×Èã`qÚ0Má§6óÉ;ž·¸ªÇN𖙃@¤ tò±ãÛn ž¹ËâÌ á=ØzM³G¹à²Ã,ö¦S·)PÚ'ÐÉÇNû*ϽèD�È8vœÏ5^½8a—‡>­ø}ú å ‚éñÖ®ãž\ºK�è,®¿t×FlhqmÁçn"`6“´G 2Ž�ö´€û"Ð9‘ù=[^½×ŒŸ ,âQ_)Ïx‘ó½ß¼¹úfï«ýS-î£@‰z>ŒFý.¤ € € € € € € €@ÛÈ0n›÷B@ ^ÔmÝSå¤Z9“µ¾JÝÚR¨¸ÌY:¾B‹*ƒr{ʇjt“>#”…yödõ�kÛ6·~Rf÷}‚ cS „UÀ¯.¸55:<ê;zî°¸³FÏçÒ õÒ­®wì8¹& zŽÓßÓ(ñ%À±_û›Ö†N “Ž�„žã­ Ç�5Ô¢/ð /t-Û½%¯Þ³{ñÞ¸›„©tÒ±SWs=Ÿûû#‹gÐÍ¢›Aì©ZlÓ¯üåQ‹ «4/û ‹-^vä@‹ ¾Í?ú·®Š1k³¼¤±çX¼ê;£,Ö]µFg¡«_»Õâ—Z ÷jA‰/�N8vt,¤;Úâ¹—j±Ñgµ¿Ø–.yí1‹sÖ;_X$¶éCÎ>ÆâP]­…EGhF·¶}÷Ї`µøpž¸‘ó=[c; ¥ŸÞONêãd¯w֪з‹óÕ€}Ô¾_9 Ñ*ÀYu´î9ê� € € € € € €´S€ ãvrw@âKÀ·]¹�¿¹[cÏv:æ6Öþ'ŸT¿õ'ƒïyhšÍ»WÉ'âHÀ¿}®µö±{^µèvjo¨ñ:¾¾~êfÅz‹Õ˳ë”ï[¼˜c§ž 7b_ Óޝ’Mzï}°Å ƒÍW Éðfô³í¤Ó)?$šl¤N ³ŽofžUaèHE Ñ(ÐYÇN3VÕ:KÔŸŠÞ0’’ùR×Á DŒ@g; ™ÝÍ /³Iß:[¼´ÌvÕYÑ=û8Xç`}Hn�…áèÐïÙœ1ìW;̯wU³·²‹ÞƒöLÓasâžÅúrpÞ" -+ Úˆ‘º¯³±–Ý‹µ:D€ ãaæA@@@@@@@�ȰÎhn_i:3GÞΡF € € €�"àͶ‡|ÐQŠ�R@�:µ®ðTU{Á }‹›šZ76qÝ:üG�F*vØ¢‚¢Ý׌IèÙÃæä’L×( bTÀk|ÖËÖ¼» ÛÓF¥'½¼MIÊÎ2îý•“a¬@‰ ^#hgP@@@@@@@ #î¢#µy,@¢^ ¡›z²ßôK�BìÿǦ·jD­_߯ø±3¶ñé§gØô#,Ô+ÞDõˆO(¼w½¸�@L x»M°v�ù‹ý,îîÙnÓ[?²9�=ð¶ÅÍ5:¾FŸö‹ÇŒH±X¼‰ZšP¼)p&ÓļÇNÌïb&Ž�0Á²Ù˜ˆÐc§RÙ`Æi6‡+FÆü2Š¡ÇŽ#èÛ¹Ýþow¾©p�›”îÝlN&‡P=Ãb·ª|Ï»û6úZF†qôí3jŒ € € € € € €„D€ ã�0²@â@ÀéÏ^¸U�r7—»½¾-. HœÜ¹]9Ä«ƒ“!½êÄÛSéÇbR à0¨mŸŽš’­ë-î:vü;vÚüºétß²‚Íó7)Ÿ¸^ñ¦ÚÍÜŒàí×[‹D­@ðs›c'jw&ïPŽ�åæÁbH šŽ_±F`Ýá^¤É«ëÐdg¥[$=2†ž�QÔ”ˆ´™�=4Ãâ–Àš¯¾9ÞlÛöø³¯´8e½TÃK[îüc'–4iK< Dæ±£“È‚eŸY\YÚ·"½§ä Ù×âðAWã°¹Z*™ÇNpíõ¹lçæ Ë�\4Ob›îÞÕùx¼:s»@$;þ²ÖîžxÎâ }¨j¢¨þó_´øÌü&V«]äÍœhSg]sœÅ�v̓±F‘ð=›¾=Ë §r^5eQ¼ ðÝM¼îyÚ� € € € € € €q/�ävM‹{@@ �ê€ c¯“œ“®ÞfûôlÇ„“aìl¦�Glí¬2gØäÏOní&X� ¨ÇzMÍîcÄ›¤ü§Œt'¤G3ÝÝ›ªKbŽ-MmI¯v¿ݪ åßWÅMm<äËœÑõªw3„üØ`ì DÀ±{¨´(."óØÑûÝÖ¯[|ëËÊ�Ž:u/‹d‡67™ÇNÐŽðÚ¬Õ‹×YT�m¼ÕœAûä]cÉ4ÇYŸ€@¨¢äØ Q³½™™¶¥T¯y²™ÈÿžÍ_©c|ÞWŠ]ë ˆ¡]u4úU„Oû×.ÑÕÔfíÔZ§LPL·?J´ �am{Œú"€ € € € € € €!Íð�!ª ›A@�Ȩ H†LHQ� ÓÕGpR»«é/Tß÷ڽ�.ÝÕûí�ª[Ûºü–;ãêÍÈW�Ȁ涻fl ~œ÷µO&ç™™¬ÌàQÇ^a±ùñ‡›só~j«,hzµ„T[žÕµ»E§spÓk‡g©W=ñÓ턞e«Ñ-ÇNtRû¸à؉Û]OÃÛ)ÇNùê�¬�óVéäÒï|âÉ5Ò¦{že9WvIKÛ â/Ýa7¶mÝjÑùçñ×”Ùt~�2þ¹Œ!PÚ!‰ÇŽ7s´µè¨Ëú[¬ |Šû·Ùœ/žzÜâ'[Usoª®QqÔE‡[ìxÙm+Õ«,Ìzðe‹K� y32lš cC „D ò¿gÛºPï¿{I+Ó{‰Ç3dŒ¾a¸ódý˜è$k¦ŠOÇÔkëÚf\åx z·ªê©o/Òöoêìî”N øSØyP@@@@@@@ óÈ0îü}@ @ˆDg ’�ê&X[º§©o Û×lÙ-xAiµ¦$èÞ'œ�bqDkî×ĺC÷U?Ç_MÖ–ƒ;7qÇ]‹¶~¢¾ö³_&Ãx íðéè( 8vÒÒô,õz”U¿a΋ç­kåÀ‰ê)¿ÿñ[ìkÍ•„l•Ó~¨HA j"àØ‰+*Š@ @„;zï|ô�-^1-0Õ+°êm›Öib:ãâµM�{Dè±³»†UÛæÛ�·^˜cq»’¸<Þ$çœpü@›ÖhÞ»Š7Ë&»õÒõ]¼«vZ¬^¢üÈÿ.±@A Ô‘yì$è}!·GлCe�ͯ(ÚýNäí©#h@¯^� –ÙÿÝÅ_²Q7üë;ÆÎ×!»Wc �¶Dü÷lþJ}SñÊûNn±{xuÞuð^ú¾­‹&ëç[¾‰ô�\ÿպק�¾¤åq—èlp¬Rô)Q#à~ë5Õ¥¢ € € € € € € €¡° ãÚ®¡Ú"ÛA@�ð—ê Áâ§¶5}²Õ™Ðëœ9ìØ žƒO/¬]ÔÒN7øÉǵtuÖC ü¥EVí§_­›÷ž�ív©UbHÉÆ¯-~ó•úÛ¶¢$ëè=½÷`U¢N€c'êvŽ�H>v’3rL©^d„¨Q ìûÐ=gÓcþçÏ[||æ*‹�Ïe¯Ž¤>SŽ·¸oÏàü-0éD‹ä¿dñ³Õ…«w'IÚ- ¡ˆÔc§áÖù ·Ø‚üÚƒAŸª’{ö°˜|9ð——Ú÷°Ó÷OR¦²–y/sxíˆüïÙ6~¦o*s.vÚš9@ÏýSF¸ß6Üü®£•I|ÍÞºzßÏè�§r»F2þëÛÊK¾ó]ä8G D�@#/�QPsªˆ € € € € € € Ð.ûyŸ÷Û%È�@ˆIßNõ \©DâÚ“…]uÎÜ×,-O½¯;T=³í¯~)\¦þ‰7~êô1¬¿ˆ[Ĥ€çvk×öÚcÇé§«ŽŒàc'¡·Æ>êÐáÓë�’ëx)YöŽÅ·?Í·¨L ±.À±ë{˜ö…K€c'\²l7Ö"õØÑIajšÎ!«”iŸÅR,äM<ËâÉ“úZl,Ó1!g”-�z¡âa>ewÕÔ^óÆ&­èŒrÍ·øô'Ê¡Ô'�Ö Dê±ÓpKª·o¶µ¨ô™¬{¯nuŒ5XÊKlvIíú:³³œÑÁ\™™´F ’¿góí¨²¦<0SO}çë@û CÏÿó×7~}‚¿Î°¹»Š3Îñ„#õnuÒŠ ‹Oë0ò,û\ß>4BGÛU£µ5ýQ"[ é]Ùu§v € € € € € € €í°n2~Ýo‡b›îêwà}N¥ u¼ð<ñ°âº5Š'œª¸ï~Š@:^`G¾$׸§ ‰êa6ÐÉ0®;sØ]£Ä,-Ýwõ:ìtB±µD½鿾Œ©ÐSœ¿ÁbQí±£ñ±ztuó@t,–„ì~vsè£-:C„ïZ¨;–|lÑëQ†1�XàØ‰õ=LûÂ%À±.Y¶ë‘|ìèUîG[v‚Û¢¯Ý 6ëÓYÝÆ:†zö̵Xïà°Ûu¥¦¤È&•ƒ¯¢µ²³3,}Õ¡ÅZ%¡ß³9?S}ü޾¯x£|wƒŽÑñrÊ =÷[òüOÈÑûÎEGëú>§wœ ΖŸzU?}MèŸfqbðe m.%’{mŒ¤:R@@@@@@@�0ègJƒn°»È�œÓà]š�é\Îݸµju¹ðÕÕêÉ[tìT׸۰…b^ rŽw•%t«²³ÁõåOÏLµØèèz¶Œ‚€"çØa ]‘~ìøýú¶÷þÇXÌsiktÞØ¾�Vº·{¥Cw“DZ/éÇN½ùËìæÖ�Û-ÖžÖ%èxêݽ±Dô Fy±2Œk‡ÿöê\,++Ýb½�kv›‚@ë"÷{¶­ ôÍßߪ†Î{ö žù—OÕ‘’Óʧ~÷½õY檯ôZqíbg›Ez÷¹ý-mûž“µÍ.­Ü¦Ý…Òa {ÕaÏ!€ € € € € € €t–€ý¤Ïú»ñsÝ>wU•Zº~�â¶-Ší)9"ÁÓGÃÕyRÔeÜóÞÛŠ�¹Åºíñddºÿ‰ €t´€¿\½ÿæ,UO@·n—Áê]8H(eËõfyÒMÎ[fËÃ;kÛzõRœ5_ç3mëWè ÔܾÞúám#[��òÕVÕ¥KÕ?×ïœc§ dÓ½9vjV¼hKÿý'E q-9ÇŽOù>}ä.‹³6wNŠqB÷©öèç]q¸Å>m{c³{RâD rŽ{ß³¬¬›-–kºãKBº.†Ó3×ùª¥ãžGŒ.�:v‚áô¹dÝëÿ°ø·×ƒ—2�Nˆèc'HÆ·ÍfåoØýYß›ÑÇæôÈnì×½•Z¬= ôjÀÕ¬L®ùb ”v Dæ÷lÕÛtµ³½¦cd­{úæÓW–ðä.mjr‚>ÀL>*Ùâ´Uúžð-çÒ…«húá=u4]µ‡¦±ãÐQ:Q€ �ˆÏC#€ € € € € € €�)ÐH¾CgV©sÛÍ-v³ŠËJU‡çžPœñ–¢3´œ&BR’ÔÁÂ3ýDÅ·^S ,ÉÎÒ³/ œªiõŽªv™ô9YXIÉzÐk T¾lˆ �‚EÊÙ}UŽÔvù;t”úªomä•ÕߨGäo¾‰¼šQ£øPwÜ¢o>±¸ÄͬòªOî =†XÔ˜WhX€c§aæ"М@¤;:{\÷Þ}Ÿ™ßñW�QŽJæÄïY¼âèÁù–Ã(�DÚ±ÓH5™�@Ä DرãÛjB_<¯k5-,läª0¾[º­H5¯-_ÛÄ;¯·è|_7¿ö¿Ö¬Ø®¼äÚûøwÚô—°¸&øé{Ùü#Î8ÈboÞxL�Ò¸@¤}Ïæ/SVñSÏ8Àì»¶t¢ï1~°ŸžÐíùá0±»˜K&ëüðÃwt„–8?¿=õºqò@]f\†JÄ ðbq»„ !€ € € € € € €#`Ü3ñ{ÍðÀÜâRu<òÜ|½âº5Šá(éNšÉ¾ûkÛƒ†*þûÅ '—ëŒó5=`�b«‹_ XôÚ³ŠÉ#,Ž›0Áâ�\§g@õB›~à¼ßZ|Ù¨Å_Ýÿ‹7:rƒ-l¢è™SòÍ«Ÿ[ÒÛâaÓÆ[ìŸÙ–^þªb»ï–u«,®\¾ÄâWŸlqiæñ|é!ó‚{rÙ\  €@èüêcøÊ‡Š;œ„„ åO®ó„ÆÎ2ÿŸ½û�£¬û8¾{½—\r—K½ôN ! é*(* ¯åElØQTT„W¬EPD)ÒBB !½÷Ü%×ûÞí¾ÿß3wd/×k.·ßGùÝÜììììgöÙ™½<ÿ�q�øçËô6�Ù|!÷õkßÖ:óí?Ÿ¯jƒj‚_­ÐœÝîQ4×çKˆiëQ¼eHú©@�N—½¶É²Ö½ªýISmzú¸ËæÝÂfZ‹w¡å—ζLi¾P°Øæï|{«e‰O=±fã*ËwÊ·[–6ôÝ-6¦;cm4Žž@¿ë;êM)9£-GÄk,|ß7jš=(}ú^þ{Ä~×wŽ1?67rŽ�¾£¿ªeL=Õrn^²eó“Ä®î>�>ZóœåÊ�ªñj8�ìêê¸_d ô»¾£¿*”Øa¹;¿£çl¡Z}Â:°SÙ¡RO)ݧGQ­qÓæOn3´ �ÖúÝßÙêÔ_žBþõ^m·×¢tôùêú’«??ô@5O-üôjý£×ÏÝëŠUsü«Wõ™ë—gëaì?ZèÊ¿íõ§íg[@@@@@@@º(@9‚Ï«0ö®Rü·‡åØ{µÅÑntÆ'>£GIÏP¦¥+Ï:OYå¾/þøùšö®d¬©Î´P•.áøâC�Y>S}¼eú,WaÜ™•ttÙÚí¶ä³÷ýÎòÑ MõØcS,ÏûØÇ-/>]U5ƒ£5V¥¤°Ð²¨¸HyH×�(8 á+{öì¶Ü¹Mµ86ï·,¯ݨ1” 9"ûçò‰–ŸZ�mÙC\lM4@�#J7k”îãºPC›q‚FÎJjü]?õþ…©‚’†@ëýíïl¡€ztÐözßsVìŽ3~ŸþÊw¦N¦z®Åéïï{�þRø�?«¶xG”Ži9îäÊ\Çu…Í6�Ö_øËRÙl € € € € € € ÐÇöÏû=7R­�·½Û~õâùþû|·WÚæ .ü°n;^£�P mˆÊK|SÝ öx æðÅuzx’ƆToXfùF™¦ãfª®ezV¯� ˆÓ®Üü Ë1ÏüÉòþ?¿lùÏ_]gùÂÓº&ß7¿4Òò©oÿÒr¹wA?›j©E šd³O=i®åä ã,Ç:¦±ÃUˆßkOÂVNCxW }šB¿‰Ò÷FüäEÍþø|� ;di¦µÌa!x¼›n/t¦1y¢ÞÊ3ÞÒ¨öR÷®žž ù£ë—EsuØûà蜓ÄjùéãµUƒÝhÄœaš“3H©ÿ:ßGim—Îѽµ}>ß„ôl‰[’@À;—Nžö£øxtªåS/jäìÂù#,ÕO7½ÆR‡é{S´\û-Ñ1a¬eì[o[¢´¾¸]Í.m°Ö?îøÓ,Oݼ�Úlý\@ï´ô�~¾“ؼ~)Ð?ûŽŽqi#õå3iú3 �~(Ð?ûŽ ¢²æX^ô¹É–ÞWïŤèzö=ý™DŸzF�ó-˯Ÿ­¿úÜ÷±W7\^®G¼ûçÊ•yûŠ •cÆ+ÝeD4ÑÁV¿ïu[òéÅ–î ùVÜõE›¾Lå¾ï6]ì±Ö=–Ï÷ªMßqÅRË;ß½½å Õ• ºð{–¿ü¨®4¬Ñ G6-7d¦åEßÐú.¨×KË tð;è£6=ÛþkÚ‚{6ØŒ8-4eá7@ ŸÄõ·�ô“§Æf ЫÔ÷*/+Àô�¼syj½*@ßéU^V>€è;xçòÔzU€¾Ó«¼¬| ðw¶¼sÌSãëÌ®ä‰ € € € € € € €�°2P¯5¯NèU‡Tvëó¦;‡×ÞÒ™ZâãŸV&&)½‹ÙÕ×kú¾_)æ+½t[Ò°Cg¶ÿ3TbË,ÿëc–ï¸ qF»‹$÷zå®# ¹Rè&¯¿«-VÐ@@@@@@@ _ Paܯw‡ € € € € € €ôž@Œßפ:´÷©ß®Ù«°îÙ c¯’øãWèI¬ôæhÊç{ü况ÊðæU½ ¿¡Õi-Z¹ö Ë?¼pÐ2”qºå7ï¼Êraf³=[·Úæßó±ïX>:Éòêß^­%S›-isÛj*dÞõ¯Û,ÿoežåE—\`¹p|†¥WZ\¿ã)›þÁOÿe™ïUNÛÔ-Pj3Ôinà�»-¿ñ¥-[Å ë&�¸ð[–ß:{x+ËØl € € € € € €tB ¥›ëÄÝY@@@@@@@àXàJ³�qîÑ=xñeZ]ÞX¥W[ì.õë{ãUÍyáYeóæ]M¹ùüÖæ ß´›¸óqË�ÁËY½Är~óÚb›Ûƒ­v¿­lýš]–»–.±üéRÕ�=ýRËO^zŽåŒºJËü]n™Ö*Œm‰w[Õ!›Ü³KÙRS…qB¥.þ܉ì–VÄ<@@@@@@xW€ ãw)˜@@@@@@@"K †zÍžÝá§œ©õ?_¯Œrÿ(¿}«¦ú�²�Öá]R¼]—AÞY¡õ¥ÎÕ“?wæ0KUãöj‹e«?ëwZwö3–ºï!Ëÿ¾pŸå÷7êÊÄ·Üñ?–¿|üC–­]:¸÷Ÿvëõ_½×rÛ¢k-{ÕËûïȦ«,û]™vg¯·|äšø@@@@@@¨0n”à' € € € € € € a\øÕž7N7�ê*† húY]¨×W¯ é¶Ð&LÖÌ .RÆë‚¾hWê[R¬é{~®¬ ({ª šó)[ÕÍ?[d¹'ZLkÑWͯêœYZ~íö-ÏxúIË�c4gr‚« öy•Á6£¥^1ìר…¨†liaæ!€ € € € € € €@O PaÜÓ¢¬@@@@@@8F¨0nuG]ôÝ4xˆrâeJªòÑ?)ïËë-ó±ÿÕü„DeŒs ¸zâßþJsŠ‹”½Ñâ†L°ÕŽÞõ¼å/~³Ø²¤µ« ‡Tì¼­ÆÂÚ*ûï/·ÿÐò…6_QÙ§Ù2Ÿ¾â$ËœVøã²íÖY}FiÿÑ@@@@@@@àXhå�…Mg@@@@@@@º#ÐfmiwV|¬Ý×]N·ÉF×TëW¯b8J—âõÍ] ¬¨Pþóq¥w­âO|VÓé™J¯¶XSV‹üGå–�ÊÞn¡ê|{ˆ5o.µÜìÈ£©Úxë -¿µÍÅ£'N·Û?Þæ2 7†Êmâ­ÇþjYºðRË“‡©Èzù}7X>°²Ö²I ”Ú¯ê4/ðÆÝ–ßøÒƒ–MF1ÄèRÒ¾þ*ËÓ²›Übsh € € € € € € Ðþ®;zÜ@@@@@@8†¬ÂØ»à­+¡=†ŸHÏoú_TìêûÚ·•ƒ”1±Ê3ÎVV¨˜Ö7F対‘£•qqJ¯Rùå4ýêKʾiÑc>`tû.°lµÀ¸î»õ÷_¸Õò¹à‰–_ùÙ•–óRÛÜûQñ¶Lr†Ônû—-ùàCª0Þ¾"ËrÜN±¬)Þm¹k·ª�ã“’-ãÂÖï. ïSýqi±W…¬×d R¥ÜÕQ–Uõ4@@@@@@èa�°¸ëá5³:@@@@@@@�~-`ÆmV—öë�ïÉ� y…Öa«¿ý•òÊ«•á×*ÖïvÍ`W�|¨@ÓÞ’õtÍ]=ù²•ºnñŸ—UYÆLø¤å‡æë²Ï~_©% @@@@@@ú§Æýs¿°U € € € € € € €@¯ Äø}ÞÅ{Û,³íõÍ8šà=ó̬¶¶aÝÝúÇû”ŸÒ¥u}ÑaµÙ5*¬õÝ}§²¬%µƒk ÇÖžU­·m~ò÷ÿ¶Ì÷é œ{ÙY–£c-| /.7I € € € € € € €@ Â¸¿í¶@@@@@@è#�˜Ð1VÑÚ“.~WÌëwÿhž;LkŽquÃuu-?Ê’×4?%UùÁK•Á Ò«<Þ¹]Ó]k1®wh®îím�·m][[_Ý«ÆhÛ?ï·|b‡ ’O¸ÌòâYj©NZv®©R9veeK·Û ^ i™š:¯ö½q&?@@@@@@@ §¨0îiQÖ‡ € € € € € €#} c¯Š7Ê»ÆÅk�-Êý­[Ã«Š©->ìÅ € € € € € €ô¾ƽoÌ# € € € € € € €ýR€ ã&»Å«ñ ¯6ö!ÔDˆ_@@@@@@@`àPaÆw ›� € € € € € €tUÀ®aLmqWñ¸ € € Ð�¿[Ñ™ÅY7 @@@�^ Â¸—`Y- € € € € € € ÐßìÆ4@@@@@@@h†%]@IDAT�H Â8÷:Ï@@@@@@0þÁ˜— € € € € € € ¡üƒq„îxž6 € € € € € € à/,«6…¤Øž§ˆ��ïù•²F@�ˆ¨©©é¥ç]R{ÐÖÝKëgµ T�Šò {jÁP½ejjÚ@}šƒ/yíu˥益íÚsÈ2�ªwב£&XÎ:ñdËE'L±Ê)�)´ÞBÕúkÆÎ]…–µ‰Ù–cFdXò6„c¨­³­}mÍËúnwZzâz§2MÝš6„¿¢¶èSÍÎúß&²E € € € € € € €½!ÀÀ—ÞPe� €ôˆ€†8Š5Êûíמ·|ü¾{-ï}v­ei¥…•I^jñà²_[ö· ãCu{l«^,û�åÆš¥–­µò Fæz¹7°Ñ¦_+ÿ‹å¤„–§§~ÒrPô0ËÎ4�¤>ðö2Ë•»U7zቖӳ5Ý—­þ j[_{u»eÍ �×>åä<Ë.ŽÖ·{ÒZhìüßî¸Åò–ß¼l¹©DÕm·Ä\½6>zÃM–×]®W]®JúE;zýèèö ÕÛoÐûÆ’íz'¹ðLË™9Œv5†^lµ®=uÏ­ö߻햫K¼ƒM›š¤ÚÙ©ïý–å�¾ÿEË &©2)²÷V� ì{±å›î4fá©6=3;Îò(·P�m@Mµ¶°Î¯7»äþ,Ð×û¤vË£ö�߼ೖÜÖËrÿ׿<¶ì·–‘]a¬wþŠ�+,¯R \êdÕ½�{ô×xÄòé×^²üçß–Xnè@•¤-ÖOÚÖU„<^|›eM¨ë57TëÚ~ÛkT3úþŒ«-'ÄϳìXÓ8ß¡Ó&[æäëªÏ;ÞÚd™{ÆTËÌ"�ñ|þµ–5Þ©�MµÛ\%VÞ¢ÓlÁéC::ê.:k¤-?:s§åºÂm–[òGX—CE—1ôH«·µ|ã>Ëo}î–^­*‡Æ–hƒ&ª6hþÌ\Kÿ½V,Ók`¿{yVíSà}W~Ärå†ßX>ô“ ,GéEtÔÚÑîGý¥µA¬jòý¯é•ÍgUMò§µ®c4¨Ö$)7ÏrΜi–ÃãK,7-}Õr…WY©9kÿ¢û^úæJË[½ÇòËÇ«Ò"R -T¹›;Mï<¹ùË-·½¥”agg™U¤ãÚ3¯é ‚�9%Øòc�c9³ÍcP¨h³-³t½ ôbr&YΫ}á·B:-~^u]eÃXž?Wï�}Sµié- ÿÇxƒåßÂk‹#Ýåˆç¯wŽäÑê/Sv¿dùöÆ·,7çžj9)yŸåÒ§—ZîÑ)@›Ö™6ùtË3¦è{:óîÔ™e;¸9,ÖL TQlóö«ô”Ö��ݧr—zÊŠíå–ú½±ÕWéHòé\®{Ýò•­Í^Õ¡€Í¯¨ÖýBî3éêWu ï¸ð£ÛœÉ td‰Ýòšåbw¬©¿ø§_ŸqRëóÎÄáÊL>ô˜Bß5÷JØô¨=à·>úYË_.ÓÞol:¯K=Ñröô1–©[,W®Ô™Ãn÷½2‡–èSÕW/zÅò�Ÿ>lùëÏ϶Ì%Øï4hW }¨-’ÎÁÛ…b�þ$ÐÑ¿uö§mf[@@@@@@@z@ÀFy1@¨Y €=#àFs¿öÃïÚÚîØÖ3«ì˵l®Ñ5ƒ+ú¡eÐ�aïþ£×„t=­¿ÝjùáÌïXŽ‹?¾•ÕjÔ|U¡jªJk½QõО‘©ëçk¬}Áž˨�­24DzÎþ³qôÕªiÈ/ª±ŒNÑ•´²Ru/¿�(×¹ Ë´lÀ»ƒMu°ùSlÁ‘ã²-7¿¹ßrϦ½–ã³GY6¹˜—ýN뜀*!ö¿ø3ËÏìËïÓ«Å—¤‘¼§^ñ-˯æ½–'ObßpÚ«r¤Ê½ïXþûî[,¯ýé3–;+U—¼âÞ¯kÎqwÿ»Ë'XÆÙ}ÛŽ^?ê—=¨oñ#ðÑBŪһûë7Y6Öërú%×[Þðå[ž9w¼eVc²éPÍAËuÏßoùý¯Ïò‘õªK®Ü¦Š–¿¬Zä9ÿ¼Ñò¤ÌÈù¼éÞ[ u”)UÙ¶5Uíffê]d±Þa öè(� ãBÎPÕõê]LÇ "ËEÕ–Ñ)ªßâŽA6a­®\ÚË´l Î;ºi~k­®BǬûU…—<îˆÅüqªTNp»¥¤Vp«ŒŽœu„Hßýªˆ�×ùÌwÙf^Ëßw[Ñ¿)à^í‡ÊŸl%d¦Ù&G»3´’{l:°ÎîÒ] êÀåóÕËòP�ªè±Z~HV²eCÝ|­z_þ!-¨Óš½^ÔÞK^K…¼E£TkA½…!ôj«sÆùaÅ�éó¯¶Gü¿ïžc9¼“; *Eï~Yííæ^}F}¿ò`@g–ދ×Û†P�ºJÈÍ««Ñ­uÍi´LÀëSîèT]©%½ã”M¨E¥ZÔ‡´3²rFYŽ d[&¦èHW¶e•å¶rÍ™2_Ÿ×Fèã­OêvÿÓïú&µÅ:¯}îW,xÖçÏk™ÙP<®WJuÁ:Ë—ÿr‡å ×ÿÙrMÌpË “u®ÙW7Ú€ˆÊ»ÀžÛ¯Ÿ˜cþE �Â:‡_÷ð7,¯{`£e¥/ËòÌoÝnùÉ™}ÿ{ØÈhA}JZó¼>Ïîhø`wž¸ŽnSN±\8Vg’Í�”ÝYû±rßNžp+O‹íD@@@@@@hO@3i € Ð_¢rlK~÷—–w.®hغú]/ÚÔm?ù«åv•Iô£v¨N5OkekµÅïIÕˆæƒu»,ߪzÖÒk#b§ØÄ Iï³|¼ä' s›þðÖùDñOmöåƒÿÏ23ZU¤MZH•RëVX®Îo¶À!›Þ¼B¹uÐdËSOÑHÒd7h°v×r›þÏ2�OLÉ›f9wBŠ¥Wa\ºþ5›~e�«ýêÒp»¸¡#l CXî¯U­s¹«?KŠ·IZ—´ó¢¢uB㕥ϳé+}§å —êu•ÞÂþÒ¢IÃŽ³¼è¦_[‰þË‹ozݲ´RõÏÞþËW.ü¾å™}Xœr”ûQ?îA¶#h½$àÏXdkþÚo~`¹úXfÝx�å-WmÐàVjƒüñª‚�z¾ÆÑß•¡ÃÕ�ó¯·|ÉU†•,¾Û¦ïAïù /V…J Ñæ°æzPþº%ö´V¶p *°ùV(7 šayæ) ,½ª�Ú]oØô3ËtŒHÍ›e9Bª¥w *Y¯£ÿ‹ëtà�Žj{¤»ê„j«Uarcâ“TOÜä>1š“«y¡*­SÇ6«9vIôž@Ýî§lå?úΟ,7 Þ—uö-OÚþŒå“Ý,͎ئWoÕžÕ–o¬Õ[‰~oÚö¼³Ìfì‰QÅÛñg«MrçQ¡òÍ6ýòóo[–dŽ·œ»`´¥w’<¨u>ûêVËèh½5éö{‹Í/{Ûà�Ö™C;�¯Å•0³£nï—i¿Âî’4u¡ývÎÙg[‹ˆIØ“ïô¤^×)c�ØØð;˶bË+–ÿY­oT:ë,˹ƒT=\•f™ê}ƒH¨Ð¦×<÷²åæ:UÏ;[Ç£!­É§«—M×Á­»êlÛ®æ}K�^¾s•å;{u´Ñïjú¤VUä>¯…´ß·­ÐÑó€w>oSÖOãÕÓ§ÎÒ£¤6_±¡5î·ßŸ½í[–÷4\·XµÅ?ñ Ë¿ýê-§µP,,Ü„!S-Ïþâo,gLÕgáß—\dyÕéC-õY‹†À@ˆâÎÉÏRv§ÕlzÐîþ‡v[VúÔï²ß÷]ËÛ¿¢s•úº%{¶}Ýôæwgwîd­›¯µq¾×Úa¿›¸Ü@@@@@@@ ¿ Ø !ot—þýœ† €GY J•X‹>¡zÇEÍ6¥î­R›wŸWaÜìÖ£;ã…²ßÙÔ¸ÑåÍ·$9*Ãf.HR%Í]‡>wÄñþd›38Z#ÙÛnÞú½Çº8ãÚ#öëÚ0ÙÓO°<±ÉõKt¶S¶]u'ïìVÝ Qªän¼~°n­«=\Ï{ä(êPÐ�/ù5ÒÎ]ÆN÷°ÿ­WÍÊot¼MµÕ´†êh�6MMÐüí+T%³Ýþk½E¥ÉdÆÔl˰‹‡¶~‡ˆ»E{*û”¯XÞõ¨^cÜsªåç>8Ö2±#§·QƒlÉ?ûEËÝ»Òòþݪ̫ÚþwËçW^cyÆ{T:Ñ‘•ÙbÝlG¹õiê&•}ˆÑõbkÜÕõ*Ê]•ŒËò2M——–YV$�³\8W*\9ÊZizu§ÍÖ;óݯ~È2e¸ªI¼kÜÚD›M÷͘™åçÜiùÒ_òÝòû,Ÿ{m�eÉu\‹ˆ‘õþx{¦9Óuô>©…cÐ ›¿Úƒ²Fé5é}¿…÷y<à®%ìŽ4¾ØŽA®˯«Æc�M¶Újª«í¶�«ëNj^aìב(ÅÕ…ŠËmºR�É—qä¡O3i=#P¿×Öó¯Ÿ\où{wµo_Ò›þüÕŸ¶LüÊ3–OÚ‘Þô~’4r¶åIƒt–åõO¥¾h“M,_ëÞa†Ž´éu¸ÆV°)ïjÜÖ…lºÉË9¨—¸w*Þ…z§Zùâ*Ë®“ÙÄáÔ:«ÝF„ t¾÷Â3k-[8ðëQ•Ä#Ý«7:VgLq~-ßÂ«ÝæªiUì´Ì/Wç ùôÕI«\‡ êL,Ç6Ë€\¾š|}ƾ}úäó‡¯Õ-゚£´@Õ±¥ZÂVçæ'ëÛž&¸D{+}ýnË«w*gíKšþy›¾ó¶OY¶T[l³�hz…äžþ5Ëk�¸…_@ E��Ÿ€ø(õúW¦Þ¥m.íHÕ” 1ôÈÙù=z„-5q¶Þ{“\…±W×R»ç Í)qþQaìzPbú`{Ö‰ö_c Uï¶ÉmÕš‘2ÎbòH}¯FøK². ×¼wÕᎃlñ›ŽeU•zå‡Ü·w¤&ë²IókëRSµÇý‡TÍUZ¡�4,=|‹l­Gô&uàß?µüÎ}k-½+Û�øÐ7múŠ:îÜWãõ›¤ùb’2Ma°NÓ[Hïù[Ö«ö´Ö}cÍÔ‰¹6^` ¨º±Öõª¸xÕG6y5»«ݼ(w•;[@ÍU:FÅèÓühR§Þä5¯:3Ö-Ù8O½&P¥m«ꬳν×5ÞÊÏÎ ˆ¯¢DG íK5½2‡dXvè;ctZ‹ê IcZž7Æ[@ÚU‰:,]ºÙrù+:ÕŸt‚å”ÓÏWÚm5­¡tçjË•;÷”Æ{”ØÄŽ·ßRº~—�èú«?ÕæL<õLË©™ÚÏ;?k¹<_ç3Ï^d9&^×Q~û¹W,·Ø´ ¸ëO¿þ×ßÛâÞ×Xاd›~ï5WZž™MµXY �N èÝoÇ?´¼ñI�íWúTízîu7Y~bšŽbMÎFìwǂnjca/±� € € € € € € €@/ÄhT @èªÀúê×۸븸ãíÖ9‰çYþ®ðË““?zÄòY1ÃmNZô�o­ j”úòª¾{¯�»n–÷¸Ù)yïÎoa"¤Ľ«×[î¯ÕØöá34ê³pÅÛ–“4z~TºÆÏy×�ô¹k¸&&„�¨Ó¹R°Þ+ÝrÚp½çÛiœE]H¯ß4÷ÎþJÖë¾Þ!%¦ñ4Îæøbô� 3Ïhù›»—Ø­ÿzSÇ©¤q ,Ïœ¢^Ó¸fí·ÆúH›¤uS@û§²d¯¥û¦û™hÿ�œfÙhn“´�hbŽzÐÂù’u±ªy׬Q…\΂іíUuë8’5õTË3Çk Áòm–o¾©,wûnĬy6=1SK–m]j¹l‡­W‚ûþkë}ì‘– ßY‘{�Mä=c,õ©•Ö¾€^É;t†¶|»¾=B¿·Ñêõ^å¾¢Å*ÚhÓo¼¬—¸^ñm´(½§�›;Ór¨_k¨Ñª—šßÖ“ :×ø¶Ï{éñújC_²§ø«[µt/ö¥Ïû’M_÷ÉY–-œ€ÛÜ�Üú²IxD{ª�ŒÝËÏ­�÷±^~tV� € € € € € € pÔlÀ·7bF£Nh € €@g¶Õ®jñ.ÑªØøpÆw,ýn¬m½O5…ƒ¢s�Xþ¸ÕéÆúUY5=á4˽� –^óæ7þvøç¶Uœœ’rd½rã¬[ºYu]kö¸ê�Ä›ŽÙ·Îr£ÊE|Æ©eDºêߪ*´m!¿*M“TÒФyÕ]!¿–lrñ»( ÖmaÀn�Æ —×j�|IÑaÿVïá>oÖuà?ðÎó–K÷ôÚI€ûëÊØEçڣ̌ÔÓñVwD7opßè³â?²ÕÜã}�LÒ›¾ø›WX.̈Üw¼¾êAÝÜܽŽíq3 € € € € € € 0Pìrl‘;êa îTž €})PRŸÄÃ%D© ðÓƒ~f¹¦ú%Ëãδ,rµŒO–ÞnÓ^7Ý&æ$�oYT]”W‹ü÷Ò;lÚ»V±M´ØJê5‚¾¥¦ÑÀ;UŵôÕ÷¨vØZ•ꨶïUÝIîœù–3G¨*%*¤Äåeì�Ó–§Ä‡Ÿi~ã5ŒU¨£‚á6š–/ßö–åËk4B9iÂñ–'OW-Wc¡—ª(ö-ÅrÅ-Ÿ={¡åÜÑÚžðǶ_i}!Ôk `·«Dox<ÕLŒÈUÅyßT~­~Tl>¾Oz�ó>dÊ,ž7Y•É)zý'Å{ùÚ†‚•/X.Ù®>’àj%S“íjýªiïT¬~Âò÷ÿÎ?¼eéz�ýŸ³¦Yê»#"«éÕ[¾s¹åb¯2Ò{úU{íçÖ½zµŸs²åœÉ–Q!UÔ•¹«ûãôΓÚìÔx cõ޶�AuE:2ÖëH’4DÇ�Ö® æOͶ[‡&«‚sÕ<¬S…qn;Ç8[„Ö®€úEÑ+¿°¼þWK-ê‹O¹Æ¦où’Žø™î`rßµÐkµEö8Çj«+Þl›¾ä�M–Å @:KܵµÌ2uŒ®(¼pFŽe‚_7(Õõ&ƒ~õ©´”ð±öE}ø5ŒÛ¹ ¸-nM•ße%ZgȯcSFšê)i½(ÒÙHYãÎv¤3öÁ™ª0æÜØ�t,ÜùUZ޾ç)×U=Ú[hÓUÑ’ÌÎÑ÷tµÜWû!#áÈ3±PµŽn·©oª¿5¶PÅN›\±\ǵéiÞ-ʺš*˪*}>«­÷æë¸Y[­o㨠él¼N3pr¿­ èsåÖÕ:gÖžVÓ^3{¢eΑ»K7ÓZÐ+DŸhÎ^˜gٱ˪êÈu(ÃõÓ†ïÀ°=Þô­1i]íð=¾5i…Áÿ±§sïÏ[6œãÍù²MþÜá–�ó±Éˆj}Ùƒ" ö(ÝÄǪ'Öuv7e’zëæuêË›ª,¬Yçœ[?«Ôïï6�@¬}éå»ó¬÷é IkO xЖع^†ªÓWKµÿæNÐoúG÷þY°ÓæïØ­³”¢ju•äŒ!–ÃóFYNìÀ;¤-G뮀ä³&ÎSvwUÜ¿�ô>¶îñ»,Ûáõ¹l›>û3[Îní‹}ì6ÇŽG‚cg_±¥ € € € € € € €@� 4lÔ£«fe €  ‰~�b.5^5©ñÚïT<ÔÆÓŸ¿Èn͈VuÈâÊ¿Zž–üqËç˰üpÆõ–›kÞ´ ¸Ñè6qDKŠÒã6iU™ìÝ®qÖ5q­;yš*¨ö­ÜjY–=ÉrzÂ.Ë·w®·Üš§ñÔã*T§RÔ(ºô!ªWhR]å®/X§áòVjª[Z¿ø�*QŠ6iýÞj _܈ñ–c2ZŸ•6Ún=nŠªÁ^}[Û¼nåˬEy–)-ßÉn¡õ¬€ê™ÊWþ×òï;½ò­?qÈÙ–'§×XßT­~~…٣܃$ßý¨¨°•U–O?ê>¨»"a°V#è‹ öZîÜúŽåÏüÙòÞ_=e¹¢Ä�¯OÒ»î¢ÏüÆòþoŸj™Õ7�Ç©Ÿ´€ŠIwoWµnuœŽ/Ӧ防g¥Ž eÙÓ,�KØnùÖNÕÌmÎS Öø -_äŽAîªÃªÒz·…Tè�Ê;ŶV9Ðqd×^Õ=øÇZ ÔÚ¢ZÄûö„Œá#l*eóË}[w[Vc™iûΞs�´�¾¿dÉ]ß±¼íe½¼kIžöÍ[mê‹'ª‚Z©´ØBµ6»pÇNe@ßO0l¦ÎÜâ7¬²Üf9mºzĆU:¯{g»Î£ÓyÔþrõ‘è¡êw™Í^øuÝ+äjôãÚþž[Îz\�νÎ7*צ³š­SËÑzPÀ};QI�{óV[²Ä~^Á¼Vd‡Íß½ù-ËWŸþ“å�¾$ËɹÉò?ù²å™£-éq†ÐK­v¿ÎVnÓ9@¨™–c*V[®-ÒéWJž;êE—ÛtLµŽzKËUáš9\•¬Y š.Ý»Ý2¿Jý}ð(õñŒ}ˆ*Ø¡Úh½ŸÒÚê3ø¾ÍîLÌ[8I}aD¶wÄÑ»_áš§-÷¯-ïºÿYË�a‹Û¯Ö’rçY~ðʯY~ùò‹,O¦ýB2ï „Julzä®—-yssßg?/{ÏKþ™Í#!�uÅi € € € € € € €(ÀЇ£¶ÓÝ(q_0¤Qu5!.=\øœånwíÃ÷gœlÓ³’&XÒ@èÏiуmóÊÝèæŽlgj”–¿0ýë–�ÿÀÒv•Ø]�UßQ«qè¤}Åò‰’Û,›·´(Õ‘4i±ªå7cªezâpËaþ–ûì?kCgg“õ©ªž¥:†=k56´>JµÈ¹C›×"h\¶WÝå�SÝWl+­ƒ%ÛíÖw¶”[cTi7qªê§ã[YÞ«îJ«Ñ÷÷¾n¹ö ªÐVmÑ}Oœ�jÉÈ>CèÝ,°õ¿üç‡-·6Œµ×k`Â'4²þÄÁ­î<»µgÛÑêGñQªBhhGµ5nDw~êüºj×JËÅ»µ'ž0ÛrL:=É:ßêônü›³Nµ¼æ%½O6+G±y®Šå¤Ëmê+ר*åÓL·™Ÿ2cõî=a†ª¬2GZŽðoµT�”5¿*urgoéƒF¸cÐîµzª�ÒñkØPy6}ßÑçÄZWaì�‹·é–ŽAzåWìÜd¹Ç•ç¥LVýV;ƶ„e2F[ŽÉÚl¹º@kØ|p„åqCb-i�Ð^([~¯åM?}ѲÄÝ9ý´oÙÏ[®<Ñ2£é®u·aî<-w²ÎÓŽ®Ú¸¼}óÇ;:9²¦wòäQzWŸã®Ì?&ŦK7©¸$¤7�ÜáÙ–MjôÝw$jkm¾Ï¯þßôfÍoAÕ4nß°Û²Ú§õOÌÓ:;ý–ЖWùu$Jìô�íNØt„)ݯw¼ðæU=^pÙlæé3Ü;›«L-Û¿Áæ,~Jço?¯w°JwŒZÿõ¸ ×ï´üÓ·[^œ§wNZ Ôë;-Ö¯ÚaY?Üò„)9–µË-[TšM�¯O4å»´üðázÌ�:ÝrD²zåÎrí©üjõµSfXŽIÐ+a_|²e¡»º«Ž�´6êô®up¯wÌqËųiq‡,—Þu�å®}IJáû`lª¥V¹o©Íþã —YþãQ�×Ýþ‡Û-/ŸéU*Û$ �Й^ñÒ§,i¨é×yEîûÞgyâP�¥Ð¼šÆ~äY € € € € € € €�`¬c«d7¢¦ŸÞt(Ô8ÏÝÐ…ðû5žÎ[OÈ­µÎ]ñÁCÿ²ù¯”­zw�÷ü‡MÿbÔÕïÎa@�þ)06~–mØÞÀÆv7Ï»Jë24öUÕs–[kWXŽ‹›{Ä}Ÿ.û…ÍùbÖ}–‹’?bùZÅ_ŽXflüœ#æxuYñ9ª?ÐXw;æ–¹ááj(Ǹ¯ðPó– eLŽjªr›_¶Ñ]A¹ºZçþ�qo¡N¡^cº7¯ÜbY\¯ÑxS'[ŽJî@1Q”ÆÔçÍo¹ï%UK­WUß¶œy–ãÒÛg ½Ô´O+Vêuõˇ\…„÷8Y‹ìç§/9Á2½;лS÷óhõ£Ìèܰ�×> =(l º7©}Z[£š•:w�¼š`îÂîmz¿¼·<ƒÁ:KÕû´Ø’ô~{ê{5²þÔ™šN‹èÏ—z½%䌱T}qËÇ ,›?®á¤jøM Ç Ñ6=¼KÇ P�¾GcÝ&ÕÕÇê›-&æé;3:tüð«ŠkÔ$=úæ×·Zn{{“åˆS¦ZFh¥¸=óηPù[v§ûo¸ÕòßÚv9ÝâÚ[¿`¹€âb‰t¨ùST7V'GöTå~„…÷m1ÆÚ¬Pµj‹—lQu�/A¯áÑC›Ÿ£ÕÛüšê€eÈUù'´úÅ/Z¦pƒzåz×+FL±éñ™êI¶dx Ul·_ßXrÐrðq:Ë�ž«jcŽI†Ðr‹™mó?û˜ê ëoú‘åÒ)_³¼á ﵜ•­=Û\ïŠ/j™«¿ÅòKWþÆòåC:^U®~ÀòÊkŽ·œñÐÿZNl»²Ü– uJ ZG™ì!ÊÀP}+À°õµíöß‘Mû-e¤–9Á;4¹@ÓßÝQ)wÒ4›~†Út!~;,ª­±_ªõqöÝVlSÿ½íÓ–·>þ´eá�§}ãÇŸ·üðÚyCtô÷•ç[lY¦¿Hß{ë,^ªXÉêû-¿~…ÎXF<¥þxNNWÞ íŽ4Ž@H½ã�§³Üí}4JdÓ½÷DËlºˆ)ôm«¯Ò{]Q¹;Çë�‡vçœiYi¶îVO{ãqûÁ:y9÷ƒ�À& € € € € € € €GC Æ«smi¬ÞÑØœ£ý˜!·ž‰wuá@Hcê÷ ,Õ©~¨keÆ®´Ø—¥1\Ãâ[Æùu]¨—ÊVX†×Û¯Ö’¢¼ @�~.0)~¡má«åGV7ßì9‰çÛÌ’z�e~®ìÞæ ¼;§*¨Òà?}Ûò¢ôoX.­ü»e Tméw5“Øt×Z¨FÛ°nÕnKïuã'k{B³â…PU¹Í/Ó°E_t²ªCšŽ.Ô ×®¶Ü\¤‘õÑ™*›1^ã;>./*M•1Ó'î³|m]‘å¦U;-såY¦t|E¶4­c¡ê�¶à#·Üi¹T§xִ׿|þ*ËMíëR”£Õ�Ç ×Sïdë¹ÔÖGÇDÛÍ~ŸzY]�úW;½*XaKiùPt†ejózM›Kë €»Nü WÞa‹ßs©Þ“‹ öZn_»ÔòÅg”ëKÖ[þéÚ(¿¯÷±3?÷=Ëûc–ljèrch­…jöÛMk¼«?ºwžI“õ-‰-ƒ$_ªµƒôY²Éq*¤úËÝ«V)«t¨È˜2ÙrDóÙÜÖ[ì�Ivã´aÚ¿Ëöè½qùÕ�23DzéQÏfК „Tfòöïo²¼ùå†âb›>ýÚ[,¿0_ïEÍv¬Í£uCÀ™ïZ¥ï‰ÙБbÐ䉖9úKÓÒq¡´LÅw~wUÔ¤æoKî»dm\fË,ÙPhYŸ<ÊrîŒa–]|ý»?ÕWim…ÞñË&imè,}’ꉯ}è|Ë`”æ´s «ê®ù¡åõÒ>çŠ,7WªWæÿKǯû_¹ÐòÖ3µdD÷Dw¥Û‚½{ÌÁ+�³‰7ÉŤê/™9iqî^êl9ÓYfÅiŽßõJwÑ·A½ÃÂßfJÞ²9ù“Žæ?üËßßþeËÓGêïÌMzAF¦Í2BçÇÏÓw* ùÐ%–?^¬�F%Ëî±üÑŸ.µ<ùks,9­6ZÄ „Š–Ûsÿ÷,ÞESNµéSgé½±�£•-AëI��­¬z¯þ ÷Új�{7ù’…žz èᶦyçϳÞüì±§¥_®‡×s¿Ü-l € € € € € € Ðû1MÆõþãõÛGh¬*Ö…ª ®ñ·â—,_,Õø‘€»Ò°MôH‹õk ìyé -Ÿ+ÕØüðë× …� :;|f§¦Cn|Y½žŠ/*J�Õ‘ÝÒhŒúz7&ÃÝ+ºCwÓ£Ð@"Y 'vŒ=}¯ÞwCõmP¼^ù»µÜUÔûôm·ýu[l�»}Á²ñ;Qt�É :†fÇäé—N¶P�«ß]ªÑˆ»*t€L?Õr\†Ž€%{UõUÔÑ3&Z·ÖìÛeYÔ»ÌÌTËÆÑvZ¾|›êºVlQr0FUD“g�µL× :Õt‡ôñÙ�·[ç[n¶\»KÕ]'ŒN´ìÈÁÜ£µ/àj ÖýAõ(?xFß"£=«í›¬1õ×}Q¯®Ì>ç>Zý(9Jµo=׃Ú~Lõ³ÔÁªqŒÛ¢j˜}o¾hùÌ[šßêΩ׻ŠWc?Jõšî¢‡ö“Ö%�(½ÿÌ»äre“ècF x§åêWž°¼ëÖ[,Z¼Ãòùÿ»ÒòüÕz÷~èÁ-ÏÌ�°!ÙöœÛh5¿a©>cîpÇ ´ñÇÙô„ »Ú¯ðcPõ¾í6¿Èƒe¦Ù´ú€5÷}ûW/¶É•{ôÝу¦YΙ #QÃ26ÕÁæ®í:|æ,[<¿h‰åŽmoZ¾7ßrÁ”!–]¬³´{䦾PµöAËï~ÿyKwùT»xñµ6}ˤ—Þê–ÝHë¼€«ªß¿F¯ÒU{¿ò�£úûšÂÝ–ù®gÅĨ„*t·«\{*z˜Žw©a{¤®Lßì²i�Î 7îW½P(Qß73s�úBn“r~›qDÓ;[\œëmn«l^gsê\W –ë|²Ò§ÊËQiœÅCgZGj‹›¬/Þ~û�¯Z~éÞ¿Y^õ¢ê#}•[-þú�«_wÆé–ia{ß~�¨ªÖ«ý�¥ÊÎ7Á¥N>Í2ÛU{�~W[¬ZcÚQˆvïEM>{&ÙædŸ{ƒå¿ùºå¬öÏ b‡�eK~Í}CÌ×þÚ¦wTª-½ïï–+>7Ûò¤äîBöüi‘+ ³ˆÊuúK׿ t¶àµô©'ÚÄÔÜöûWã=øÙ“1©Cmu£óô7:í¡o~}ªŠÌoVà5Ýã¯&Vˆ € € € € € € ÷nƒtט©jŒê-û~o¹»6¿—öab”Æ?ÎNšh™¯Ñwç?aYÒÅ©.ôË‘qÑßéæ*fÞüŧìŽ?xQ#Ð?òã»-ÿgR“Áf6§y«[û;›ù©ë´%�³n²üý—Ž·L°ÿ:Ú4.~ï3·YÞ¹JãÐÏüà%–gMH±laZýz›ÿàg¯µ|¬þ"Ë[û)Ë©¼*M�†k§§~Ò6y{�ª4jš]Ū¨^•õ!Õÿ5¯-®óé»=Jƒ-›·ðÚâø(U�œžú‰æ‹upNm‘FÖï+Ò–ÄfO¶œ=UUŒ±~7*±Dµ«Ö«bØýn?Õ¢Ý5†Ç×Q±áˆæ®xWQî.,é*H†7Ón—Þ�Ñx1ƒl ã§ ³Ü»L•Ðþ�™ÔùT›Âø}CèvÓ^-^z¯åµ×=gé Š¬l†M_q»ÆàŸsTÇ÷ÿ~Ôc=ȬÛk±¹Sl‘ystæ¼mw±ey�znxß´_·(õ’¤Aª7)Û’^s§'§ô.›1Úòø÷©¢ë˟þ¹Z^÷×Ý–ùÏßnùùT;ûü]²Å¾)Øñ±H>{Ü•¶ã²§ÛôÜ©úÜÔx ÚdÓË×—Z†¿Î£ÓÆÙœ‰ÃÃêëteÖ¢bWå�¢}1ç„ –�ÿ~ »SCóÇ«ïÌ\ ÷Ãê×ß¶,*Ð'â’±º6[v;Õ–¶Häµê öœúÞ÷,ŸÍwû"ëL›þö­WZΧ¸Øzº…*Ù*wïS©On9gîxË ÷­0õõºõ�å:—«ëB~w¥ÛÉãõ7–†ã‚wÝâmª Þ´¿Ê2n°þ>3{®Ž;C;r.§¿±d�k™±W¯„‚m.mJMï“qƒÕÇÇ nÿ¯1º­› Sm§]¨Lq±e‰»ÊäÞÿ¼eÓ[n>Ýrv¤‰¢Ý'‹¹óì¹ëök'›^Ï1©I–š¢õ'ïêìiñÚ; WVMÒ'ܯ}Ogh©-ÖýÔô¾—½ð}– úµå�î°V¹ç¿6½j«þÞ{ÒŒHëBö¤i˜@ÀþÛ´L=Øãú…}â´éœSô÷Ÿ±äM¡¯›ŽEñÙ:s›•Ý×� �בóàHpà9"€ € € € € € €'`ƒƒ"}|˜W·TgõNvÝ⢗,{¯¶8Ú¯¡ÿäàó-3bTw›­J©³ÓçYVk-�OÖX0ïJÆ6q,µÚ-¶µ/ýc‰åúý™{Êÿ$ZFú+Ìh €@ ŠV]ìEªÑ|´è‡–Aû_cûÍ¡Ï6N¶ðsG­*™¼láf7+Ê�zþ@ú5ö[F´¾Ÿ£#ÍŸe‹�Ÿ5Í2�˜a™”£íœ·P]� eZØP¯RóT7/³Æ2èFâûcu,KwW/Ž=ê×üœó-O¥�¦1é=3î>n¨Ž¡'�­KˆglŸ1ôX ìú—­ë‡WÞnùŸCª(²ýoÿ-üê­–ßj’å¬Qº �¨¬ìq?÷ýïX>ÿÒç-ÿá.åºù±ŸÚôŸ?§Ï>ß<¡gÞ!mUÇPóÇkÐûÄYz%3-“sFZ.\¨w›ÚŒËÆš`ƒÒòæXžv ŠŠ•[º»zqBøÛS¬Žn“O<ÅrX½>W¦'ö̧®èôq¶¶ù§êøX§wÈ ŠLáȦ3œ�Oêlç»ÿÜg©ó;ǨÛcùä�¶|A3Úk�ƒ¶Ä†Â°ÅJT¿òýËγ¼G_kÒÐßw‹M=â¾,¾qæÀÿé×_K†M�e™ÔtzŠ^™Ù‹d�çWõä�äÃgJÑ™ãmÎüÕ³j½Ó¸h-™œ¡3ÀTïzÃ6eͯù93X.ÊQåPZvºel'»Qìà©v¯ÓÎS¯©ªÑz¼‡õ¹o¼HLÔ£¸âgûIëm½U ¯wÑTßbK]ÕúfÁËâ*wZ~ kwë÷ieаá}ñ4ýqö(ƒ'ÈÿøZ½ye†³ZØí¯AãteÜãGè¾™�í~-¬3"gEëý-{‚>™ú6zÇ¢"›¬ªíJQ¹?#Ïî;mšÎ1|»õ� ¾’ÍÛ¸ïßš¡ÇêäÛ¤Ö10[¢Îå&ÏÒ«=� 1^ÂsGÛ³ î³X»x“¥wd±³c›ž3Ygõ=tnkаFêÇ;üð¹u?ÞH6 @@@@@@@ çlH—7æ(GyÏ<ÒèàWÝûß²=o¶Æ‹24|l¼Æ÷Åø·“is¦%ޱŒ÷kz\”FÛµÓ‚ûm�7ŸxÉr‹Š“­éÇÎÍÙê iü×ê?bùðÊöG÷¯µ%UQe×JÜø¢å£k쌶ÆZ”ê±æ¿ÿdË1-\¿J–¥o=kùÌny&Ÿr�å"ÝÉ·ù±¯[ÞòT™å¯þÜòŠÙaƒ¥íw €À@?מÊ%™7Zþ­ä6Ëš`E7Ÿ\¼ÿ~W»<6^ãÖ;ÑâT/’›§ o‰ƒU¡âFb‡ÏöE%jÉ!Íoh²Tø/:Â&¦k„i�5w&� ¢Z� ‹–Ùº~õ…«-ï_QêÖ«Ý<ê’ïYþìšE–YíŸ.¹ûõ~ô£~Ôë=¨÷5y„¾H˜tº=Ô… Tcñ�zU)ëmúÉ×õ™âêfZ6|²°©iqªÅž§ o‰ƒUÙüPåª�sšß~ç°i¿«>ò¶@—'£“\mq—ï?ðï¨Ï¼‡v¯¶,ô ºÜS®,Ñk~ñ¿•]l•»íŽ«_v¶Š1'}7ì·ˆ™ôëïY#ó”áOÚÕëL*äA9ÊêQ…@IDAT5¿*ø³Ô»Õü1:iKrÙ­qçn $$¥Ú:ÿ­Í~©Õ_¢Ê«Üªu#­—ô7ÌT÷-cÖ^JÉV}^�~Žê¥g×�WëþZ;~¦ŽÚIî쫲²Ú¦·ï×—WÝ•V;ñǯ½‘žÞ‡êmNQ©u!ÆÆÐÐüñúKþð<%m` „ªvÚ\¿\ÿÎÒÐÜyò¤Q:éDÿj¼7?M€ÔŸ_¼ªûóÞaÛ@@@@@@@�^ˆñªl{ñúõªõì½+,z×-„4rª7Ú‰)Ómµ SfXz×'ŽvcPöÖ´9:¤Úܯý¨ez¼ÆsyWj´‰¶ZPãÅÞùûŸ-ÿVØ|Ojü×úçVÚ�jÛ_¶ÅÝvŸ„Sí—QçyÆaó½ÉÚ­öó™‡_°,ŽÊ³üèûUa–á ×ók4¢³°°Ø²ª¾ùvÚì–š«HÛ¹V£xbÇL´ÌMãÖÒ]˜‡ Ð?ÆÄ϶ ¹<ëËÊ~g¹±ú ËPÃ÷šØd;Íﮎ4)áD[îŒÔOZvüºÅí¬š›#L T¶Îžñƒ_ý¼åÍÿÜo除�t¥MÿúgŸ°œÞ/¯iG?²]C;–¢ÛÖŽð®¢×°Ý%ös×ΖåîC@¦ûtÐp#?8†ôRN÷AË/}ãËÊmúœ«ô9úùÿj¹BÝÅþ ¿\ø±s-'&î0q“T×ÅxC !І@u…¾E¦ÉßõâTqžÄ7÷´¡ÆMÇ´€û¦„ÑSçÙ“Hñm³¬tWY}cÍv›®ºx„eØÁÄ~k»©÷Ô»¯­ _.>¶ß‚~¦@Á½ú¶¤·Šôï, -ñ8›;”CK#?–Ÿ8ÖþäÙ € € € € € € €ˆ9×Vz¡»zq\”®Û㮨RT}Ë]ù�[Ö„4|«¨^•¸^ó*«kågôh»áÜïè ‘ ƒÞ2Zçš?ßlù»ºÏ_ü¶åùyí׿ÖoyÒ–üþ]¯XÖͽÜòÆK¦Z6Œ–qcÖr›¿^4úìÀËYþm‹6"íÔK,ÏïݯÉÈN›ßv ”éZM«Vh^|FU×ÿݨ*ꘅ߰üí7O¶Lo¾ 6—† Ðÿ2£‡ÚF]œq­eEPß3q°n—eQ½ª´ýs$[ì(6úÑQÄç¡;'ª³åk«š�ÿõiËûäÕ¹²4ýW@ÇŽqÝdù㋺¾•¡COÛ�¿úDX…qÒ 6çã×ÿØòâaŒïïº-÷Œ<�Z{Ê»6,·<ü—5û ÒØ16'·3%–‘GÇ3>¦t¤>óËãÒ±üO‰>eøÏ›–¯=Érv‚EÇZ}‘-w`›>¡7´$Õèggzß…Ù8“ŸDŠ€>ÁTíÝb¹úPØsN̳_†â<-Ì„É$À+{íLž  € € € € € € лAäl†\m±w=ÅŽ_U±ã¼Ñ�õñ¬ó,“¢TqkÕźžŠ*q[ðwË‚:U\y-j(nœÑÞO¿Æy ¯ëûª†ËZHãÈŠ3Ü8œM1ÖrìØö«gê«UÅå-ÌiÓ&jÍmD«Ûÿ’-sßï–YV†ôO_8Ó²CuÀAÕÔ¹š_ÑS6}óª·® Y�ïUfÛ�4@�cR 9J×ÞKŽSŽöÍ8&Ÿ}ì„ÊU[üÈ5Ÿ¶¼êž5–º¢�Ï—8ñ#–?ýã,?õÔïR?zu[c²_ÒOׯ·ý·a[„†À€пPØeé}W™÷$“R†ØDfJGz•w�cI€ ãcio±­ € € € € € € €@ XÁ«W͹c"¼çdMk÷Œcýª$þÄ`ÕgŤYƸ9ÞZÿVô’M¬¯ÞáýúnݾðòÝ™]ŸæÛ}»öÃÊN®%±#ËvÛRÏÝý[Ë%¥‡ýüþÖ^KZ¦2“åÿXjùŸýÇòÍCš²«XZ¦Oµ<ëÜs-OÍÛcùû?l¹«C#álA €D´@°ä{þ~M×-¾ú�µ– ×-žø!›¾õÏ·Y~r†j([;_±›hDŒ€Îë6üÑòË—þÍròÿýÚòêÿgï>Û¨ï6ŽKÞ‘W'Î^²Ia‡½Ê,ú2ÊjK¡J ( J'”Uv¡Ð0[”½B��„L2œØñÞÖ½Ïïd9^’-;–ôý·<9ŸN§»Ïùt'ë~÷?h�ÒîVj³Þ‹×½ù„ò±¥V©ÜвÇhàÄ}í®Ev¿  €Mœëuøžs®Un>÷~åµG W¦…q¢fÕÉËž»Sy÷œ ÊÈ܃4æÜãìx¾0æ¦ÉiD›@ÒNZâ#Î>F9ä½Ç•k‹­Vøž{íÞ–§ìvšrdÛ§bî+¿|åIMùžý9Yͧÿ†|ïHå”<êÍL„v¦Âõv÷² ž½=½v° ã,v‹øû…ˆ“5æW;N64«‰ € € € € € €l+`…°qßìÊúȶ“sÖ G¦Úµù�jã·Žå£rëEïíëñ·y‹Xmq`Ö^ëQxÐÄ)ÊBèRØ)Z¦)?Y¸!ðì¶Òoý.Ï}üåCŸ—+[tj­ÇÀ‚-5î4v-άûíºÑYúO•=^»^¡¡"9Ë®ƒ»þ>ë]c²-¸Ç¿æ¿Jo [g·j™KBÍ…† €- ÔoúT£ï»ð\å Ï®V6Ô�=UÜfç-?žl÷}áŒB4$ฟJî¾øR ?;Ïz¼«8f¹rþõPÞpÞáʱ9m¤Øyþú™÷(/¹ä1ec�±U¥ <êB剓Cº{‘¦¤!€Ä‘@ýF­ìÛ·ýRyã>R¿~„rÑ·+oºèXåιmƒüešæëé·(Ï»Ôºá&Ùžòóß(O™�¦¤!ëÖ÷÷Ðã.W^}è+Ê ^²óºµÏ]¡¼|ŠÝëåÁ vWæ´ÐI¸ýáµèó•7Ýö�Òž©–mÕùœg{å`ÊÍL„nå}ázû®$èþž”9“ÉŸâï7"NÖ˜·ü8ÙЬ& € € € € € € °­€*Œ¹b[”Îü|`æ®zú”ô±Ê¯] ™ ÿy<«jÖ+Ÿ*x]Ù^k­^·½çmó¸×®©œz–]SyƘ.!Ûfòº…�hÌ9W[]¯õ'Ür³ëÎ6`ýÊüqú*e]Æ$åž#¬áÓ/ê•N±U*Ïxæ=åk¯½¯\´ÙíŸØýMó ÝSc?êPå�{Ú•ž³®ºQùB}Š29h1�z{­:ý§ßÑD{ �_UWƒ@�XðoúP«vÿ/+WÛj ÍÙ´@c×?R6O?=uó5ÊO2š¿QÚ­Dvú¡U�ýtŸÞÊæSh$ �¨°³¦ªÕo)ï8÷å�omRj‹Õ¯�†GíÒ_¹é¿w*¯}Ì® .-³ò“òrëñ®¶ÞæÐιWÚÁšæŠ‡ÎRîÜf¡‹& !EÞŒQZÚCp”ò±™ÿR.ªøR9í·vïŸéwî£<ñgg+OØo‚rh_ëÿ;ű}§hÝ×ÊO_\yߣ¶®l¨ëÒ Ç7Þ­ì¿éÿ4¼£�æÓ@h*�`÷¢¹l­òùß­Üô•ýÅà’3ìﱓ‡Ù§$ÿæ•Ê…³§+ï¹å>åë;R®†ûퟕ?ß+SÉn$Z< ¸Æ%î�SƒW?1;]?öbÇFa8†¨0Ž¡�ɪ € € € € € € €á¨ð(PSÁEÛ²�L¨Qfî¦ÜT»EùZÉÇÊzÇ*_›·ÑiC5ò˜Þû*SìBúD·¶¸¸¾LÃ÷çÿGYë´R2¦Ç"ÞÜkÿ¿]dý%Ï) *Ýmå…êWY t ¢·•I4Ú®0è3iåî}lúì‹­ÜoÑÕÊ9_)½‰%Êů¿£\T’£ì—[ªÜT`ÏÝïÇ—*:¥—ÒS¿Xa=Õ´ØêmYj¿žIn…q‹“1ˆ�ª�Z•Ï¿WùT~ÈkUa說>hÙR ‘?=ð"%Çû–|åŽU ϼóWÊÛÝÚâ¦ëcç$_L»Ó²éáý4r¼¦ÿeË'€á͉©èY v®¾ÛùÿPþoÔ®Êk/û�ò…¶gU¬·óôýÎM µß¬®+ï ó”»û&å©£í~B|Î @`[¯U.Ž;ͪ_muÆ·]i�ÿxÛj"+V¿«|ø75Ô~³úãÝ~z‡òþÛ~¢Ü½7ÇŸöÕ˜"¶ìw>cÂ�•w>iw\ªÿñ•Êi‹ì� 3î³OL3¬�¸õæËÓcG\ö˜ò�_ï­Ìa7’-~l?*)ØöÛœä «0Neïˆß_Œ_sû�† € € € € € € ‡ª0¦µ,ðƒœõ@ß$ëñ1P=œ‘hu±Ï¾­ Ôii@­o’]Éø£Ü#•½¼©Ê$U[OÀV#ûÀ¦•En�±º¯9VU3ëÑß[†ùªnýo«ÏIÈÙS��s›õÓœ5À|V. š8cgýðƒ+oQ=`”²â%ë9ãʧ­þ8ŒV[­‰«Üš„”T«Øæê†0ô˜@�¸°32'ø´,.Öš•D ¢^« ~˜Ý豎Wž;ýå¿{TùìG˔Ŋ›=7oÏ(/¸à\å' Ü1“3w1Ð@ÚHÖýv?Kùç—�PžñÆóÊ?þˆòÉW?W6t«ª¡mšÏþ7zª=÷¢_Ùý-N?|¢2×fIC nì,wO»ÇØcoÛßo�¹ç/Ê;xI9'¿ù)�{xЙzôÒ+/Qž}øevû·ªÔT4bZÀoûKé&û†¢±ÙþÒ+þ9±ï*hÄ¢Ÿäcq«²N € € € € € € €@T7 5¿í|•¿F�¥yíz¯×ß#}œ²Ü_¥|¹ÈªvS½váâ9}�QöNÌP&y·^‚õ´[‹¼¼ú[�ßÍ›¥Ýç¬ •‡ iÿÊÿê74åßžü4„EµµÎ�ëN¹í}ü={´ßh»®Óë±G—ºÓ…µeÖwZ™cKÞ/�þÏÂõczˆ>�„¡V¡õÐF7£oñYb¶‡€7G¯zø_)+þº=€×D ¶³ìþ@žqµå�.WþiÝJåª5ë”›ŠÊ•U~;ÛOÏ´û õº£rÔ0û\ЫýšŠ†[¼¹Gë‡»ÖØ�2îÚ:š!âTÀ›6@k¾ÛñöW¬ÝŽÿ…ò¦Íß(W­^«ÜPPª¬¬µƒM¯ì>ÊþÃvRî4ÔŽG)Íÿ¨§±4â[ u€UŸqó4å)¿Y£\ºÌ2³Ý²&Åjôû²s¿q;õWú8—“ �ï’&hð‚÷m¹à»‘ ë b} ³~ € € € € € € €@+T·ãñêƒ/pª¦ÈIÈTú½ÆuhÖey}¥rdê åДŒµÚª\ý¦f£¦xpÓ‹Ê óNR¦4ôU¼•ÎïÖ'o®³J߇Ü)ë�ÆŠ_�ê²VñíÍûÝw¾QZeñ¶­Z#Ö|öŽå¶µ÷óë?øý Á“Ùµƒ­<;xtĆmþ}¦^¢||ß‹•‰)ÖsRÑbåç«¶(ûŽÊQ&·µ¹ô8 @@@@@@B Â8T)¦C@@@@@@bL Éiè½7~Ë6kÞ'1³�M»¨r•}|ókÊ÷;F™ô]ß¾Oµc}ߟÿeI}…²c­ORx=õ=æwz¡¶êâæ}0;Uë5þ³ÿþSùrɾÊsÏ<@9Ä: nlÕk5ôÞÓ¶^…;î¯<`ÊheßÔæ¿6&±—u†ÜØ«±;×Çêùg>l½DŸÙÊœêó?Õ#÷^e¶I?¼Ý†4Ɔõ @@@@@@:'@…qçüx6 € € € € € € µIÍ+I£v]Â^p¯×ÖÞëXLé«LòZõl�ÓR�ÀÏìò…z43ѧ<1ç e >ûñͯj8ÐÛ±:Ð’Ýטœ«çzÝ>•ËÖö¬’Óûh‚¾é[§ª/³ŠáXÅð ÏÛR-ȯµ‡Ýif¯ÙOƒ÷ LöØøõ3žQÎúl¶råû+_}v¤rß#¿§<ôÀ}”“‡[Uqg*z½ [¯Kðû­:PÝÞïžMUV`}H—úm£s¬{ë¼ô @@@@@@:!À·o�Àã© € € € € € € €@4 t¦p4š×Û]ö@…k‚[gœâ5Š}3vVÎ(�ׯº½Ub½ê~Q¹\éwüÊMuEmLÊCûfLÒd�e,O{Õ·6W§¶Dùí’ùÊ9³ÞRþïm[ò UV›ëí5L¹ï©ÿ§<ñhëÃx§ÞÁ›;Ycp¡ò/{Ú4_Ïy_ùú‹/*ßyþ^åÌçQÚãåI'XÍñþú+ÓBY8MgÍ&í�7H™äÙ œÿ¦õFüF™�Ii{>õÅšæËW>QÖ$ôSŽÛѪÀ¹ÆA4@@@@@@""À·oad& € € € € € € €@ô —œFßÒwz‰­Ä5Á­YMt{>¶·õòûuÕåúÚ‚6濱¶°�GC(Ðoñ1½­8° �å Ôæ¶=Ÿ%ÏýN\7m©²Ú퉹×à)>ḣ”‡NÝE9<«ýMœ�fõ»c¦žl¹ï±ÊS¾|O9ýé§•ÿûôyåÝŸ}¨\rå­Ê_ìm}-[oÏí7»"¡ï?P~´õýÜl›ç=³¡5¯UB:ìlå÷v²a € € € € € €DJ€ ãHI2@@@@@@@ ʼ…¥UZd_”n¦¦¦F†ßc=þÖ:uÊ*µ²¤¾BùJ±ÕÔ~\ö¥²Î©WFª%¹ÕÌ{gLÔ �ɶÚâ¬DŸ2-ÁÄ’ÝÞ”ÜÞõc[­._�ÎyÝúT®ÝÑj‹'ïd} ûB+þÕ”í4¹&XóÉLå²Þ{)Û[ÙtöÖ‹ó†ÙÏ*_[T£v õˆ|ÈͶ~�ÛãòŠ•ztý–Je­ßä[mnmqF¿áš`ÔH«�îÅå ­bñ±/P]mïÏ]ÑÊê·h¶>_¯®˜¹ÍÓoÇo�½ïyÜc�§íw?›Ž†@G¼î±Õ=Óp’Òl.IîÙkwU‰lÛRX¤Ö×Ûoxß~}#;sæ†@Ì k} vv�••óëË "Y�’ûté÷Û§ÑÞ½m?¢!€@èeeeš¸¶¶V™““ú™$PQa7®ª²¿¨ö o|Ú‚�Xì;ååö½C`JHà�þ±ºµY¯È Ô×Û7•�#QJJJÄ_€½1â¤Ì@@@@@@ˆ*ŒÝúb]›ìصÉ�:ãjÇ*e«ýv­eµc¹®v³²¨®TÙ¼9î<Ú¬–m¨ÎI²ê�@¿Åi^ûþ?5ÁŠ»SÝá†Úb¯}‹ù: Í”†D­@”U×Y=´·ÜŽÞ»ú˜†ÀvH°;ƒ8>«qÒ²m1Ü3 è\£Â¸s~<;Þ¨0Ž÷ßÖ¿sTwÎ�gÇ»ÆñþÀúwN€ ãÎùñìx Â8ÞXÿÎ PaÜ9?ž� € € € € € € Њ@’ªM܇ⷢ5°æ noÉ�x=O$ºýÿ¥:VìK¢ô§ZrgZ‚Ǫ‡“ÜÊžÀüUÅIn¿À�eˆß-ÑYž‹ô o…õˆ¨-îKÄRĽ€ßz7ñ–Y½»§Êî•âd´a÷'6@C@@@@�ø ãøÞþ¬= € € € € € €ı€ j©hµíïuëŒÍ$Ñ­ö{­ªØïXvK}‡Òs±žÚ ü*�jㄆ‹íÙ&EC¢SÀ[Y¤§¶8:·^¼,µ7лvÑ:­°¿·Ý=Åãöp/ëÏz"€ € € € €@KT·¤Â8@@@@@@@ ¬Ë^Úw�߯:àDw¼›ÿ~gÄ €À6�ªÍ²MÛŒæGz¨@}�Ì[ºQédê¡ Éb!€ € € € €@w PaÜ]Ò¼ € € € € € € ÐÃTaè…—Ú¶eX@�( ßâ(ÙP,foM¹~vêªllRZ“Çø@@@@âI€ ãxÚÚ¬+ € € € € € € $  cj‹ƒ<D@ t�¦õÖT„þŒ˜™Ò)ß u™3û åÚÞ»+�ß­�2Qÿu²ÕYoÐsg,QnL®ÜoÏ¡ÊÌàÇÌ—2W¹´éæwã4�`ý%Ÿ|Ý®J*Œƒaš »Û·É~@@@@@�8ØúwÛ8[qV@@@@@@ˆw•ûª£¨3Ž÷_Ö@§²XЬ_Û´Ì K%{ï½õï3žWÎþÄ*ƒó¡—ªhlµk54ca¡ÒÉÜYyä>C”}|Іæ/¶þ† ½V�œ3d_åµ° à&¥ÚUÖ7ó¿n±”ç >\yõÏwW柪8VÁüþý)Ÿ[;Fù“kŽWîôZ¯]çËáÚ81Ð@@@@@�Vø+j«4<€ € € € € € €Ķ€u(HC@$PóõÊËÿø‘²²UëQøÞëÚîWx¾¦yàF˦-E?zÙMÊ vÉT`ÜœÊÍú1í'ö¦ei¸ÿ€<åÀà‹ÜüöCNš;Q‚UAçö·iYQ4 @@@@@ �à?¾†ñ4&E@@@@@@ˆv*Œ£} ²ü €DL yäš×µ×ZŸÁõÕåÊ-åÖŸ±£ÿ:Þ¬8%Ý*‰3S-&73•½Jqe�²áUü½5|À/ÎQîžlÞbëYÙúFnÚv<öL�¸¼Ö*ŒT¹ÓÔÚk%¦¥+³{ÙkÑ@@@@@ڠ¸mE@@@@@@bV€ ã˜Ý´¬ €@l øý~wíÚ/¯Û™oç×7!³¿f2vŒÍ©âó+o½÷Se•�èp³~‹¸øzåÅ“|ÊÆ…µŠâ-ŸØ«\ôà"e�þël³ªâQ§]¦¼íèJ®Œë¬(ÏG@@@@�Xà僧¾…Y?@@@@@@@ *Œ[�a4 €=WÀjskª¬î×ñf+“»°»^ëox¯ŸüJyöDë-¸¡>Øÿ­†§ßöOåi)¯ºd_åà†KÑl Ë翨¼æŸK•-5›SÚ0ë/ùG§�R*¦§´µ[>ãmåÌõÖ“ñ^ÇØüÇf4Ö'뇠V·n®~zúýuAãD@@@@h_€ ãö�˜@@@@@@ˆI*Œcr³²R €±-P§Õ«®²t2”½Z®»�„‚½ÊÜiÿP.M ~•z�©,±Jb¿w¦ò®[æ(ƒK��šJ�©i¬IÖpó–>bW�W9ì ë¥ø¬Ýr”�«É’NÒðg Vúõß6Í_¨5_¯RnJî«ÜiÂNÊÜ&Kbcv›jóËœ¬lò ~¦!€ € € € €lo*Œ·÷àõ@@@@@@@�í$  c«U¢æg;ùó² €„!à”-ÕÔÓ_\¬¬N› \ãØãyY½”­N©ÇzJÓÍQ<e)×=oõÖ• 6¦WFoå¤C¿§X™ªÿÚh^«ÎÌv¯+Ø á³ç)·X‰²§z…õR¼ÆkóÙ¨OY·i…ò³%Êœqc,õ_‹ÍÙ¤ÑeŸ¥\›ÚO9v¢M߯Í"åâ…_hš…#Ç)Çç%+Ûœ\�·Üzí|¢xàK € € € € €@g¨0îŒÏE@@@@@@¢X@Ýþz1îX…O¯9‹Ž €@gºúèi} çÏ{GùüìBeö®ßW^uþ>Ê¡)Šöš×zó�¼ÿe΢ùÊgàÆf×�õ›z¦rï6\ýÙGÊ¿ßý™²Jÿ…ØJçjÂÇï±l¯YUñÞ\« T·7=�w±€·«‡»xù™= € € € €tZ€ ãN2@@@@@@@ :¼…¥•Zr_räëKRSÛéW1:ÅXj@�í P]]ÝE¯ZV¿Esöù¬¯ßp›·ªTOñ–ZßÀ]Ù¬ÖwõÂõÊŒ1#•¹º?HxͯÉ+¶lVæ×(ëÝÛ‹x“l­óå*3Ü^��†kjmúÀH4ñ–�dÅÑ)î+¶>óZ=´qéåÊÒ4å° £”ƒl�9�DÛþ>Ã;0Ç-…EzV}½ýÎôí×·sà)ij@q‘õIïK°û@deeÅ3ëŽ@JJJô,¿ßÎXz÷¶ýˆ†¡ ”••iâÚZ;ßÎÉÉ ý‰L‰¨¨¨PVUÙçôÀäå¾Müf ²@`ß)//ÿnJH ¦1d>&Œ{�úz»eàH”’ÊÍ'Ã#co Ï‹©@@@@@@@�˜P�Räk‹cF‡A@  'Å*t»þ8jEµÃ'XmqG›]æËÉSŽh³„À›`ÅË=ã!ÖÛqÿÑ-õ­k¿Ã]3oæŠ € € € €Ñ!@…qtl'–@@@@@@ˆ¸€ ‰}v}}TÄ—�"€ °}Üz\'ŧ¥ðÖX?F4¢KÀI£çÔèÚb,- € € € €‘ Â8ò¦Ì@@@@@@ˆ ëª�† €pÒûê¹Þšo:<žˆ@÷ 8)éö¢IÖC6 @@@@âY€ ãxÞú¬; € € € € € €ĵÆq½ùYy@�$¥j&NF?¥·lSfÈ,èR�ÄÍÞÉìߥ/ÂÌ@@@@@ Z¨0Ž–-År"€ € € € € € €P…±7³dv €ÄŸ€Ó«÷w+M�ñw ô('P Ÿ=Ж*!±G- ƒ € € € €ÛK€ ãí%Ïë"€ € € € € € €ÛY@ÆŽ»Ôoç-ÁË#€Ä€@ ÎØIî¥uñ–o¶¬©ˆ�õb¢XÀ­$v|9Z'-ÛVÄËõ‚Q¼=Yt@@@@".À_ #NÊ @@@@@@@�èP…1 @"*ÐÐSì`ÍÔñ×)½5•öŽ {ü�{{Ø � xÝß®;ÁsSmæîo£Ç˽d",Íì@@@@ˆ*ŒcfS²" € € € € € € €@x*@¡â$<2¦F@ �@­gZfOaR@@@@@ºK€ ãî’æu@@@@@@@�& /ŒÕ×�)ö°ÍÂâ € € € € € € €]/@…q×ó  € € € € € € €@� ã¹YX(@@@@@@@ ë¨0îzc^@@@@@@è‘|aÜ#7 … € € € € € €t½_w½1¯€ € € € € € €ôH}aì¸ÿï‘KÇB!€ € € € € € €t™Æ]FËŒ@@@@@@@�ž-�äñx{ö²t € € € € € € €]"@…q—°2S@@@@@@@ ç ð…qÏßF,! € € € € € € Ð%|aÜ%¬Ì@@@@@@èùúÂØqÿßó•%D@@@@@@ˆ¤Æ‘Ôd^ € € € € € € €@ $y<Þ(Z\@@@@@@@ RTGJ’ù € € € € € € €Q&@ÆQ¶ÁX\@@@@@@@ RTGJ’ù € € € € € € €Q&@ÆQ¶ÁX\@@@@@@@ RTGJ’ù € € € € € € €Q&ÀÆQ¶ÁX\@@@@@@@ R|a)Iæƒ € € € € € €D™€¾0vÜÿGÙr³¸ € € € € € € €� Â¸“€<@@@@@@ˆV¾0ŽÖ-Çr#€ € € € € € €�à ãNòt@@@@@@@ ZøÂ8Z·Ë� € € € € € €tR€/Œ; ÈÓ@@@@@@@�hà ãhÝr,7 € € € € € € ÐI¾0î$ OG@@@@@@¢U€/Œ£u˱Ü € € € € € € €@'øÂ¸“€<@@@@@@ˆV�$�Ç­ËÎr#€ € € € € € €tB€ ãNàñT@@@@@@@ šøÂ8š·ËŽ € € € € € €tB€/Œ;�ÇS@@@@@@@�hà ãhÞz,; € € € € € € Ð ¾0îOE@@@@@@¢Y@_;îÿ£y%Xv@@@@@@@�ð¨0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!ÀÆ1±Y @@@@@@@ |¾0ߌg € € € € € € €1!�äñxcbEX @@@@@@@�ð¨0Ï‹©@@@@@@@�˜à ã˜Ù”¬ € € € € € € ž_‡çÅÔ € € € € € € €@̨c €ñ+PSS£•OJJŒ_Ö� ö�z�žîÐlxq*PSS«5ON´dŠÓ_V»Á{Mðp'fÉSˆ#�À^S__¯u®®®Vz½Þ8ZV�Î ö º:û؃¨Èêœ)ÏŽ'�À^¼%&ò¹xú `];'Øwü~çfÓê³9žµJà € € € € € € €@l PaÛÛ—µChG ±.UST—tÕ•Yí¼<#µÞºd-{²þǵ‘ߎÞZû VQS¡tg;. /�@4 jSõ‘Ѹü,3ÛW ¸º‹Úâí»-xõhT2°±Eãvd™·—@ >²²²R ¨ÎgÚ^Û‚×�^�@…qZZZÄW� ㈓2C@@@@@@@ :¨0ŽŽíÄR"€t‘@¯TŸæìóYÒ@ t�ÂÂBMœšj5úééé¡?‘)@@EEEʤ$û8–‘‘� „%PRR¢éõ(™™™a=—‰@ ¬¬L�ý¬¬, SÝÅo¡ TTØbÆ�=ˆ>ŒC×cJµÅÉÉv¯²ÀY}ó[�@èÁý‡þ¬Ð§¤Â8t+¦D@@@@@@bJ€ ã˜Úœ¬  €@¸�+¹ž1\7¦G °×®¦gâ÷�p{M ¢‹=(\=¦G °×úîbâ÷�p‚÷ À½.Â�Ó#Ï�=(p؃¨Ñ�çßÖ=\�À^S]]­'†©Ñ×�éÜå¢+¨0î Uæ‰ € € € € € €D�_GÁFb@@@@@@@�®à ã®Pež € € € € € € €@è cÇý,+‹ˆ € € € € € € A*Œ#ˆÉ¬@@@@@@@�hHòx¼Ñ´¼,+ € € € € € € €@„¨0Ž$³A@@@@@@¢M€>Œ£m‹±¼ € € € € € € €@„¨0Ž$³A@@@@@@¢M€/Œ£m‹±¼ € € € € € € €@„øÂ8B�Ì@@@@@@ˆ6¾0޶-Æò"€ € € € € € €à ãA2@@@@@@@ ÚøÂ8Ú¶Ë‹ € € € € € €DH€/Œ#Él@@@@@@@�hà ãhÛb,/ € € € € € € !¾0Ž$³A@@@@@@¢M ÉãñFÛ2³¼ € € € € € € € Â8ˆÌ@@@@@@ˆF}aì¸ÿ�Æ…g™@@@@@@@:.@…qÇíx& € € € € € € ÕôaÕ›�…G@@@@@@:.@…qÇíx& € € € € € € ÕôaÕ›�…G@@@@@@:.@…qÇíx& € € € €ã^í@IDAT € € ÕôaÕ›�…Gˆ}�º’•Zɹ}¢œ3o‘rÕúBeeR–²ß ”vÝC¹÷^•ƒ|\ &†�ZmÑM·*¿J™’;L9,7UéÕ´èp*Ök%|øžòýYŸ)—¬Ü ,Mí§2l”rò¾(÷ßs‚rP:ûŽÂhìAa`õœIëK´,+çÍS~SêW:ÞLåÈ)»)‡§Gòý¯¶ÈŽ_Ÿ½ÿ–òý9_)W~³IY›5H9|Ô$徇j9a€2Þ_ìAÚèQØjµÌ[¾þ\¹`]¥ÒqìØÑgÌÞÊIS”]ÒºqÏí’åï‚™:U›5×oÖØYqM¯<åÈ!½•ú#WD›£¹ÕW+7W$+ûå¦+9cB‡ZwìAõ¥v†?æ»ÊŸÌW.^iç„Eu½”¹ý‡(wœ4E¹÷>û)÷ÝGi[7žZWïANM¹8K*l‹{S3”Y½"½wÆÓöj\×îØƒüåö‰é«9³”³>]¨\±Æö©o7Ù§æÔœþÊ¡£í/“wÝK¹ß^c•ýR#y©öðÖÕ{P_ý¨]¼î؃ÚñóŠòoìLrΊR¥ýlÍÎ,rÇî£Üy@쑺|ª³cPÁf®M¶O»}Ýó7ŽC¢h·q–Û. € € € € € € €±) ¯Õ×1Ä×u@±¹1Y+@�˜¨³j‰ùÏýQyÍ w)_YZÑæÊùôhWÝz‹ò‚Æ+{qx—BËÍÎj W)-,PfŽ·k¥Æ E­€]5œ?ûqå﮸Nùè «)i}ÿ±}'{Ê©Ê[þp½ò'Û¾ãcß‘B[�=¨-�žô˜»¥ŠVk‘æÏz]ùÜÃw+ïýKeq`ÇÈ;SÃOÏyL� cÇj.¿yçåÝ |zqëûŸöå*8ïNå]×Ûž89'Që�=(š¶°ß­d]>w†úÓPÞý�íMË~µ­ZñÒ×(ÿäVGâÒí{®–>êZ•ݱ`ÙÂÅʲ~VÛ=d°[a‰ °£ÆÎ"æ¾cwúYã TN9lOåдȾŒf³­{ö §ê[ ~øÄ”×ýþa廫Û<ú¼}#õï?¿QyÛÕ§+wË�›ê£.Þƒj7~!Ï÷çX­j¯Ñ*›�£dÏBX­›ö JÛƒf?oço·Þdge/5äÚ\Z÷¯{ž¢i®»Õ>I�{ÈeDoX£ùõÈÖÅ{Pëël÷ª­²jïšz;gNKOUÆÃÙ³V³­{ö ÐÌ)·3ÆG.8Ryñ+ö—¨Æ6\W¼e�ÞîVÇø»eïANå:I~1ÛýÌ›³³†Û”2)ÆYµŠhTG‘Y € € € € € € €Ñ(7—ÎEãÆa™@âP ._+ýÞ­?Ržüë÷± pq¼[ƒ5~ÿã5æ{S†*}Õv½öD|ós«~(˜ó/åoN°ÞP?ø_åßOÛII „º¬Y PÙj3Ÿ÷�m*û9-uðdÍf�²”\š¨Õ¯yÕªŠÏ:óïÊ÷v{¶/oåÁÇ¢œ�Q¢\Vν÷Yå�g�Wf@/…®lNÙrÍ~Öû‹”[ìrùȵ«[�x°õ52Þ Æýv=õÌGŸP¾4ËŽ#Ó_øP¹¸¡ Xƒ]Ôj4ßÕ/^©<áÛç^È­>™8U?|o_»²;­`¾ò�Wg)WVØ•õ3þvžò¨Ö#éKO\¬Ü=‹ÝO í6;æ/ÿT¹`]u»S‡6�ɧßU¹ë°teüm «ÚYùÖcʧþgUůý÷EåÌ•!T+jº·í¶çvx‰ãã‰)všFؾ°v©�o/YQ¤4>GIE—šµîÞƒª×Ú‘îÏýBùû—)ƒ÷U_ž�ÑMÙÛú[íWg5”_Ìž«\8K¬X©á7þbÏ�7w…rÚ4;“<8�m+ÚvèÎ=ÈÎ"*W¿¡üóÅç+o›¾ZÙdÊ¢1£vÝM9¶¿í_Ù'¦�Øûa…;mÁ'�jø×ÇÛÙÈ÷=£¼óÌqʸ¨3ÖzF¼ÕoÒ,¿šmïf¥éæ?n’ýý'3pBæØ1hÉ ;?Yæì¨Üÿp«žÌ¥$P Öºs ¼bÈ騾µð‰”·¼\[ò˜°ƒñ÷i¦ƒP Oãí¤s~<@@@@@@ˆZUó{Ôn=@ ¦êµ6ß¾|½ògAµÅ¾±ghÌíܦüéT»Â´I±\í­3ÿyË‹.º_9³`‘ò©‹£Üc»Â÷¼ñ©JZ× ÔWÚu¾›7[ݪ]§ÝÙfçf¾œºÎÎ&ŽžoêU‹­ÂþŠ_ÕûÆjÌ·?¨¼õ§û*‡ú‚®•¬½Cc¾ò7å•¿þ“ò•Õ¶ï<ò«3•9þ§¼ãH«+ zŽ~¢EVÀÊŠëêì·½>9[Ù/§—2`^_Q¨áÍ%V;žšÝOÙÛ혽¦ÄêP +lOIϵJâÌäÀ'{­(´GKêl8û£fmÍoTüþ·Ê;VvÏ›tåÂG•—\𰲡¶ØÝÏü£�¹ýÇVí=ÈÝ‚Úæ.^b{ÙŸ.ú™ò/oå+×O¿AùóßOPþï¶Ã”ýØý¤Ð^«¯²£OqQ¥Ò¶Ä6ÍoûB�ßñ&èã¿'±U{ØÙ’Í2zšcµ)Ë_û½òÚ¿®í¾åÞ{n÷­\4¿’UÔåŒØA™»|�²`å2å†÷Pæ[ Û´nÚƒì=­råtåõgýTyïL«Öªðø”#�û•òÆË~¬<ν³ENÃy‚FxêJV+çL¿KyõeöééÝü eþ»TþüÚIÊ·î;Q9Ô6> �îè¦=È])ÿFýóöŸ~­l¬-¶=(wÏÓ”×^s¾ò„íŽ##²íü¡¡ùmY?ÿUå}×]¦üó+¶OUTX_¡_j…Øeò³Ê 'ÛÜçè …(àT—jÊÍ›ì~rÕ}”ö™vk³OZª¹:%vw™šNþ¶NwCݹ…�k©jñSÊoxSévÂx>“†/`æN`ïH°O7í| ÿbøXÅðÆeÕ@@@@@@@�¶t‰Pà«v®øi‹‰Ç@èr�ªz‰§ÿ4M¹Ì.Ûõx²wSüên«€¼p«¢ká:¯d?ù”[””Ûµ½]ü¼2¿à-å_ŸøPù·¬ìÍ¡^ ‘oÆš=öPå M/ý�üK1ÇÖÜ«ã߸ëf=>}uÃΣá©WYmñ]NUæ4ßy’­÷Á '\§|8ÃêO:Ù*õg®|èú»•Çîñ;åA}ØyÄÐå-¡Ïh½Æž{Q&»ŸP*VÌÔð›ó·(ûŽÝ[¹Ç Û�…_Z_k3–Y­ÃÐIV·:.ðçö µr–]µ=/ž»…J �©7Z]ïÃö«Ý¤ùטϭwر&b]²ú7hnoüýÊ××oݸږá®_X}Óc�m»ì1Ç+¯À¦_s°Õ‡ýsu±rÎÃVã5íôý”¿œlç´ÖìݩτÔÇZaö6Í>é-z[ùÞsÎÛåå¾Ã)ŠC-M� ?òåÃãë·�®z©Æü÷:ûm)²ï3Ý¿çn»nüܪ€×7X� Ï[¤,,´½©´ÌýÝH¥µ9Z÷ìAöî—àÞ5!)pŽçËÓ˜#.yHyïUÇ*wl¥Õ¤¬áztï3nW>‘mwS8úTû´µ Â¶ìÒgì®3OþôHå•{¥+9 ­ºgrWÈ=î}Ãú᪯NQ¾¾Ë�Ê®;I9.»ùÇ'�ÖŽguÃwµinxȆË�«oHJâ’à�ù†jÒýÏú‰e³'ÕÍ+Ѹ*Œ›=Ú±5 mßùû´ }päYsåyVÿÝveIòÈ4Í¥¿yTùò/ßPØ‘ëî',OŸt¸2—�/…Ž4ÛƒÊËì}ÑqëQ23’;2›x{Ž×jSv:ÜÞÿwj¶îNù �[ù‡®¨0îî=·ÙÊÅÕGk[µ~¡rÞªR¥ýÜV³Çë*¬®+3Ëö£-K?QÚ¹{-Áúž=eŒ27~J‘»qJ~ŒlozršrÀóVKtÒv…!!½ÕÙDƒ�ºPyé÷žPžó‚{Ó€âù~öÝEÊ_ïe=UÛ;-ò¶½j«ìU^V¦,s³´ÔöÇÒR;W)­ÌQî|Ð$e{�ôNÕÇ „¾S5çß[Ëg�îmoœ´0üÕ•šºÊ±Óß”t«ánºAlgHÏ´ñÞuåʲ ÷Æ_{d¡Ö�Ç À ¶—ÖÏôògoV^÷Òze…'[yè%¿TžþíçÊç_QШ5ϹïÚQ{£Rš6­~Tê;›hø�×ìÈÞÂÇJ¯m‘1S÷VŽlåÞ$z(®Z+÷—ˆ+V@@@@@@ˆKŠ%âr³³Ò €=KÀ® ­Ì_£t;plX¸Ì]­GÏÁM/(mx¬¥¼½Çjô”½3ìA·Â¸bËJ ®ßÂ5§FB‹E»”týÜw”õ%™}ŒUœì“ò•‘ ý4ý�§Ÿ­ÿØUÊ9Å6»OYo¯KN¥œ�¢ u«@]�ÕG:îuâ©)-\ Ü­K˵,`×n=ó¿Ê9 7È°Š‡§[ÏvSû†²Õ¬vkü‘§Úô¹Vaüb�Õ­}ñ-å¼kSÚv‘²¦ µ(àX…Jy¹{ɽ×Î 2¹j¾E(FÆ«@}E¡V}ã;â7/Mi]Å*ºÞðZŸÈqûÌ枆·=!�vF eˆ)~e7‹ ¿%�Ðsö<|Weö vÜ ÔG®þÄê�¾­ßC¹£•óÑÂpê4uM�{ç>¯fó ýûÅç6¦¡z¸ÄªŠ+ëZÛ=ìü!©—ÝC«ºÆ�&Ðc«~¦E^À´Óú[mqøõôö§Š¡ãvWfzÞSÞ+Ê6h¸°ÔÝvM:àÕhZ&Víö§îw+!32ÜJâ&ϰ핞™©Lp̹¤´Jéôm>¥FÓ¶³@íÊÿh n¾Þr­}ÄñøÆÛ] .ÿÑDeÍ ö®Hë €×ö…„$ûr3©ùi\�‰Í›`Ó$»S6޳}­¶ÒŽDU~{çkõpÔø„¸ú7俣ŕ +‹ € € € € € €Ä�€¾`·oãi € °�Üëã‚—¡¾²F?6\éÒáÚ®ŒËèt|½UÕl½´.xö19l=Ĭ_ð‰ré–æn»Êþ*ëËqû­+[9GÃ36ém;yÃÏÞ^Ã4´ë#•™!m—VfÄèØ5¹ëW|ª´«C­Y4;27Œ #mCú&¤/éº_ Í=òÍ·»ö Éz­¾•ë”ë6™Y ïá’ûlURfgÑ5õ[ùj ¿Ñ˜å†ªÃ¹aÒÒ{+ûeY•d–[+™éfF†ñU•iɶuš²4ŽÖönêÆK´Ž‹S¢ìd¢;÷ ÷ÔBݼ» %Ö“·ã5Ãì,û Oó½ )Ûη³l,*´}°~¤}†�2r-q ·Z;'yñVû,óìÊ@qñ@ ÷Û •‡ô³¿cL·Óó˜iÝ¿ �ÝäC,›·ÚµÖ“ú«ŸZ?Ǿ÷V:ÎŽ;�{“}jûæ£×•Ÿå+hMÚ9—n2-? € € € € € € €Ä�€.= \Ôøýz ­«‚ €@”ØQØç^Û>ÙJé<«­35Oñ‡s”KÊŽSöÏ áHí/Ò”ù«·^¦èËÚQcõ Ṛ.šc5RÕeæ°e‹]³Ù^³³ À™P½[m¼Å:j§%ÔZ·A5\ Ó×m˜¯¡÷lT†òÚ O þÇ­zÙiï½4ndFÜlµ`�p‡Ý:K ­Õ½jWÿڵسӕa_Ùk=kÒT«®ó¸Æž‚E6¸Â "œq¶Ýc|«l×=H¼[›ß*T ·Ø~æÍÈQf§l}�¡ž#à”XUë—s݃V`±r­ÇÇ]w ¾‚;„åM¡‰&îgÕ¾@…q…½—ÎYb•þ©£•QP¤·Ýö ;ŽUæ­üj™[—¯¡m›¿ùʲµ–8Ø*/GºÆ­MÃxºZ ¾Ú*«Š¶Øïª�Õµ×gqžZ; (ÞÒx.ÐÆ³ìì :0k¯ » oó;—./µ‰Ò2¬º+±…ÿ�ëUÚBM†�!pœB”6o¢û›Ðdé~³šŒ‹†ºsªÙd•ý YucÀË›h§k¾ û@ÛÛk÷ ØTdU\©C¬"y¯±V–™nûTrB ;•ÆÓ¢MÀÎÕ¿ýzžÒÞ»[îÄqÞx#”ÆÑQðowîA-p¸÷†)*ªÕCNBeïL{wjÞ¼éöù¨�Û?tÑæÍ.ò[õjß–'o>Æt©€ík_¹MyÍSË”º‡…Ç“wصʫOÜA™ìY£¬uûz×@Ì´í¼58Ú©*¨/pŸ¯—ÆpÔ ý׌7’Э˜@@@@@@ˆ)UóýzLmQV@ JGî¯%?é <åôç­�Š)ïšvŠrÊÏ&(}m´ëV¬i^ý4Pée×0;ñ 夸©UõÚ•ƒ#öµšìú¯­fWV¬˜©|s¾‰eŽ;Dyð«¯j“Y�·Öìy^·r¥ƒWä¹ýX7ë̺µ—c¼¬Ÿ¦+*þ®YÅOU­]Õvmˆ×ª‡�¦ÌöXo7Å«úè«o”µÇXýPŒ—¹vûÔÚ6ªq{cýÆJS<™cízùà›,$4”ƒYíWm¥MT–d{ŸSouÉ%U­ÍUÒ",P¿a•æøEpQIÆ�–滠׎YFZ%q/ÏJe…Ç*e¿\¾Î†e*ݾ‰Åm¦�=j?å!Ãl¿ìþÍv�„™ 6(ïªÜoŒÕ£ãœÂÅ6ÍaPf‡ € € € € € €D‹€Ê2×»W7DËR³œ €Äž@ÒZ§®ü�òˆ÷nT¾Q`׊>ÅO”ÒRÞrª]ÇÝ»ùµºN‘Æ2íåÛV.ëñ䬸åVoÔ›ƒ¼‰tyK0I¯qˆ$кKÀk׊fåZí¯Ï³Z¨Jüú[«ø©õì¤l¾»hd+Í®¤Ìé?J™ê™íNc—ç¯Ý¤,uO™sÙ›\—® #®Ùb]óç­QV¥Vî<"¸îß6@F_«]ð-Y®\þñ[–úo›f“Ö¥¶½*ܪ¬¯‹J4&{Ð eß°KülËö0BÙx¸í}•ËÖ*7»{_TkY·_Kê•©ϲò-5#+Ûdý°úÝþܳÝ÷Él·÷à·±ÚRûÉïV§¥š}ð£ú‘†@| 8VeºvñJe™c’ÜÁöž–Õä˜b{IúÐqÊÜ{Õ,]3Oà X½×”ÁiJö#!DGsìƒÓâÏæ+¡ìŒÒã²Ûhå€&Û]#hMÝÞ»f4Éq"P»é3­éãW]¨üÓìÀ‰ í;¹ß»Jy•ÛK«¾r …%P�oÿÙ\oÇ�Œ<÷n«‡ûŒ›;°¿2eµ}nZ·Îª“ÇåZâá|þÕä´È øíž ¯ÿéZåËŠ‹5|ø�·(Ï™hûH«›T�Ñ""PoÝ´Ùî<çM±JýÜà›•Eä%b}&œþÄúfý@@@@@@@�V¸Ü§F#€ ÐÝv­aÖ”_*ï¾s‰òøóV..þDyÏy‡)?ß®U¼þ×§+gW�¦x­ï“‚Y÷Øø¿ÎPû†(Oºå6åÙé)J ´°ë§‡�Û_ÙÏg½g­®°+y׿?W¹ìŠ}”Ë5ÜN«±«³?ÿp¡²:hÒš»j¾Â­q¤Â8&ƒõùV¡õÎÆ:e]Bo娽¬jPÚ¶×a'õ›¨ñlåü…eµÊzwëxl8‘ÍgU¹‚Ö¥†^UfýF[kcKdÛ.#ìË’m+û²ÜãZã¬ôoõfë¹ÒtêÌÍM"$#+/1=¿×z&Îj¡çHÛ‚5Õönç¸Õ©nÆú‘†@Ü ÔlüJëþU¾‰¼é;(Ç�°òÉm�C•dïWcvµ{™lüÀÎÛ¿�oUªúì©ö]ô$Úvðo²;ʼ6½pëkûl»¿ßXeè§�[ŸÎPçœjëu²Ük="g¤´°çunö<;l§ÎÎÊŠò•ëV/SΟõ²ò_÷ݯ|i±[CéÖå<ò2�yô�_(wç¶0R«9Uš|ÃZs®óf+‡ ¾ÇRËóJêkù˜jŸaW¯Y©Ü8ÆŽMƒxó’Bw7;÷Îë/ÊkY ¬p÷‹¼ÃoÔð-gÛ§WoiRèúV»ÉöˆuîtR† Ôp®ýш†»ÃÀbR@@@@@@@ –¨0Ž¥­Éº €D¿€×z>Ûéô;•/¥[¿5??ÿ.åÛùvµéG^¬<êI«Þçä ”ça‡òÿ]w«òí»uŸËîUþù';+Ó¹†Q ´X°_ñìÉ*�ì÷å«í:÷âOUN›uªòæƒû(ÛÙê6kš�î²úþ ¶úÔ@O\°Vmu«VmDëJ�„>C5û‘½ìzÖÌ­oÈá½­2²¥fÓ¤fç)ÚÛ^cslë׬p·6Æ�*]úou…Õ°ZQß5_ªÃÿ�i[-9ÅŽ€ÁW4ר6u/׿´�Ü}¡¤ÄÝ2n�JVFËï‚5ÕVѨ0NëeÛ®åéB~e&D ZÜ3�%_~£å¯ôؾ0d‚Õ˜ömóí,©ÏhM³Ë¨õÊ–Z.˜gsÈÝ{¸’Z"!ôàfgw+_}BùÜZ;ÖZö^çjàû»·RYÞ8ÿv‘€S²\sþàÓeÞÄ=•» c[tv³µ3¯�o±šÈC¯³ªâ­{HÓ'ùF¡?ýµÕÿòÌÔ;5íò½éäüÔª€¿Øêƒ—¹wZJì3LÃCB©ÒN²¿�‘©\½ø[å’£”ÆÚý~‚Ϩõ#­Kü›ßÓüÿvÍÊyîŸ|yGjø¦[ÎVNà„@ ÝÐüvï«UKÖ*«'Z X?ì›ÍU./µw¶ä¼ñÊñƒl¿h¯æÞÞ˜úŒÙE¹ã†”_oüR¹à«úÚk¸½�µ7MBÛN�m¯‡þöвác–o †�;ÿÊ�프1�ÐÏÌü5VÛZ[m÷/)³]“¶ÝÇN¿š0j\ ;»˜xÈñÊ£ö� ”ÁYD£MXÿ:v.ýÍ¢åÊ�U4mÆ¡Ý+Î̳GŽQZiŸ¿ýú åŠÁû)Ge²EÄÐõÍ)Ôk|ðwûËýsŠ‹5|äïnVž5�31tC³»†.±s¹Å…ö'mˆÝ±lTNGö§|•žûñìÍʾ“¦('´}3~Îè:¢&  € € € € € € €@´ p�v´oA–@ ¦œŠZŸ—ÿ å{C¹Ö3Qyæ]Rž7Úz¦yóŸ÷)ïÑ®! ®†,xÓ*)/¿%WyÇe'('äXe$­kìZù²o)¿Îïª àSóFkþã§+ãçzF­lxÍkeøû\øgååï|_yë»ÖóYñ<ÛS~>u–ò¿çž¥¶3k‰ € € € € € €4 Â¸ #@Ø.µkô²/_{ŠòÌ¿Úõqµ¹)¯~üŸÊ뎲«ä]N=âG¾ðË·•Oß÷åmÿœ¡\_±Zù¿ßŸ¥œûÙUʧý­ò îÅÐ%­fËZÍwõ*«N°«#ÙìbÈŒ”Ê@…q$ç‹óòæì§ÕºâÉ”¾K¬FÿÚ§)+Š­rè…?ÿÆRÿmÓ|£4âøëÝýè’ã4œöÒiÊàëHSúfkLFÇ®NÕ3i¡ x³†h±Ãs”|ÏrÜŠÉ•K5‡õ•¡½*SuN Õ—¡W ÕWº½vh¶µµÖŸn½½¡6´ä»¿B Ýï6NÇÿZ%Jþ¢•Ÿo´ •V[ñ =4g–eëÍj+WþÿìÝ€\e¹?àÝdÓ6=!¡†$´ÐMPQûU{ËUAE±`CQþ^¼W±P‘ÐD�Ðk !Ù”MÛìüßwfC6d7ÙlËÌÎó)¿œ�9sæœçÌ)3ó½s¦e¶©ß¸¼2뫞©B¢ŒÁ>"Ð4?�·þ+ÏÀkò÷¶Ø=_ó“6¢¸8FoiÆïC{LÈúþ[ŸÈ¼÷¾§"Çï»eä øOÛôÅj°[ÏŽùâw®‹ÌÉh#ˆøØ)ïŽÜ»Sk?'¢­-ÐoÔ¸¸al]n_OÏÈ£ÕŸgg©cÿöΨ‹WÌ]¹²x>tÇsÛ±­Ï/â­×òL|Û—å§ ïÙ Ÿ´°<ÝäÑ;r ºøG_�<ã²G>òǯE¾ë®¬B>ýÂs#O<`L¤Jµ@X§å™Û’YwDÞ|OÖ7 Ü"òE/š¹ñ;¡Ü¨†MÞ;r�¹�¼sNÝn¹-·¸ƒöÏ­itjÝ,Ph¸5¦xÎ)ß‹¼±x8©ßò51üµ¯¾3rW§Î¡Ð“­iQžk=|O~ÚóÐSÅOä†ä×^æ¹Ü–x™{¹�‹û§B~pðô#÷G6K’›çù[éÌpÛªü­ ûíxh @€ @€ @€¨F�Nv߯F*ËL€zJ «â½è ‘Çÿ,k‹êÇG¾ù?Žüb«Úâø3[mV)ŒßãÈÈ�ÿ$;ýõ¦ì)ÿ¹�~%ò¢G²oÝœ+¾ùžOMˆ¼ò—Ù_~ŠÒ†PèΖ=yGMIÿWo_èÎ ·šVm]®¶ö:â·Ñ`‹À€-_CŸ<Zäë>zEä_¯þ[äßoÍÞîÍ^9fJö9Ý÷ŇGuTæ‹wΈAµyí´»ž›™5’Ùò*Dc7ÏÞñ.A˜ÝÞj³¢k舑…±¹¿Ú~‡ì_ßÙNð¹Þ†7åZî·8+_땦„BOµÜ3 ²N…ñ‚죽l£wŠù€KsÝeåìêV7:·Á�v‚«AZý›oäÇLÞ3r¯-6š»ÕtÖ7X;8÷~ü×gä¾JÈꮥ‹sŸ³ªxž5tÛ}bxï‰ù«�Ýåä9Û»ì9~N^Ãxisþj²bÁä Ç£°ØÔmÕÓ×Ä,œqÒ·"¯Í"Éhù+2‡žüÝÈO2:²³k?ª­%P;dÛø{ßçðÐcs"ç/É÷¼«Ú;dÕfEÓÀ¡yN>qç�"B¶ÚAcc®v8è-‘ŸŸúâÈ¿ùÞÈ·žqUä¼™ˆ<íø¬jÝãŠÜÖg« †µ[ñW‘¯Ø½¬ß¨¸o‡ýó4qã‹‹×L·6�_÷ÍßKh¼éæÈÎ�|fÑÄÈÑcò=—Öm…¼¶÷í¿85ò»×·Çð§e�ý;wéu=ÕJ×-ž‘5Á?•ï=n–G�½§æ9ØC:R›§ec'n9ê?F>3£˜1”-×ÞÀÍv�œ¼Y5žÀuD0�4 @€ @€ @€èc*ŒûØ µ8 Py…ùY yÞ·òúª³³<¸fäA'E~ú»FnàÒ'Åž¤“ûtŒù‹‹³'cÓ‘Ÿ‹¼dNNhæe§EþðÊWGþøè¬ÛÓS,Š­Ôgp‡ÞëEY×8`ôàÈ�íÚo@>jHgË!ã±Z�ÔeOí_ööçóyšÂs1Ö=Yì'ÿfÝÉÞ“6�¬Æž¥±Øí¶îÙ‚j‡fŸ÷ý^žÙ-«»6ße¿Ìi¬W _CÇn9&Ë€[Ž_KKUDY®¿Q›M-˜›õýY´º œ8>Goì®yõÃËøß®oA¹O¾åäÌ2^N³F †ä™íÎ/Ê3±•ƒ³âmÀFì+òŒxø„¬èzéèí#—É#þ.xcl¨ÕÖçYå¾‡å¼ œG%çÞ2ë�û �Y9tþg��<ëÖÒY^ºÆ¿ö´ÈïŸtpä˜�xýÄè•ߺ´udñtÐØí"÷(fGcœ °UÌð¡ŸÌíèÓWßùùâ¥\î8/†Ï¼ô½‘/ûàΑ}ðírW¶ Ú¢ûl¹ÀZ‹@~‚·bîÌÈ{Wç=�s#î¹ñªÌü»-�N3n¿6³Õ£G¾ôèøke>mŸjݱå»Å±]þa±Úº¬$®/fŸ"îÂÂôÑ7ß]ñP @€ @€ @€T‰€Þ&U²¢-&”§@ÖTͺïÆÈ¥îîÅkN�²mÜ2p£g9¯…³Û¡¯�Üuäu‘77ä$ÿczäc�ÿ9aXÇ«–ó±�êhzìŽXØ¿ÍhÙc¸~ëWFî³�æêyXÒ�è·ÙÄxÀΛeÿîš¹Åm§á–¼ï‰‘GožG¥µæ§b´GîúOäê-0kþöÙ>¯ÚçŠRb™4èa�æü͘[˜5Äï=3ßmßÕÔ�?2†¿rî7#ß²]‡�S1¶F€@Ûy½Ïq²ÂxXM©Â8Ç[zÏìÈg›r¸ïUçRiÕ*Ðìn±èÇ~æ3‘yåÛN´B‘îûÓù‘~ ôî'ßûð¶÷D¾tÛ5Ÿö=9n®ä3´Þðrë-iÏC€ @€ @€ @€�2P0Qf+Äì @€@u äUçÅOZ÷L¬ëßù]ýGåE<&åe8jnΨi\‘ÓoXR¼ì‰ 㢉 °¶@v}ô—FÞÚr-¢¬˜Üéí¯ŽÜÛV �6M‰›÷?2�;õ÷͈ll|2ò¦éOD6í·SdGÞpåÕ‹ÿ5mõõ‹ã�±ûG²ûøÈÎãÁT›@ó‚Xâ;Î9>ò¸/ý1rvKùÖÁ1ü±_žyâ£#_A#Ðe�üœaåòe‘ùûiÏ·æü¬£øÄó7 Péù‹}Cö86òëßÎìdk~<xÁ¬üüau…ñ¨~Ù¿ù­W業ý6` h›DÀÙÑ&a÷¤ @€ @€ @€ØôÑá[…M¿ÌT«@öܹ٤È5�EN4+´šj²ç{^hcZóÂ,�œ³¼Õcæt†×;â·21H •@aÁMñ×oqcdK�ñȽbø˜#öŽT`�¶jój[{½üµ‘cÎþqdccnC7]ò÷ȇߕÆ»là0–•'óoûkäž.•€Å`ÍØ}�ˆÜ’맆F€hž£ý«X[üöÏ\Ã�´ÔïÃ;÷W‘§1!rÍõ!ã�@ ¬\¸0–~åð¬hì䅜£Óïˆ\ÿ­nCöÜ6Çuä§fV?Ä¿ °ÉToòU` @€ @€ @€ °i¢ŸOéjªŽ6Í ð¬ PÝY;5qŸWFNyMäm ‘·ŸIä­ÇìyȨŽ£óºAÞø—È»s2-mü!/Š¡†v|:«é_•$�ç´Kf�~݈ì#¿�²ÆÒ¢ò*w·ŸwFäOn+m6yõ≯?1ò­{ ‰Ôh_ �,›ôÆÈãvø‘ßšžÅ\ó¦�ù»›ßù•—ŽŽl÷´â±¸÷Ï¿ümäJu`õãcø•ǹƒª”PÐ @`ƒMÏÄ(7Ÿõ‘Èwœšï¤f–Ž)#ó}ЇrAä·Þ¼}äàvHq§F Š ³&øìw½?òöWÿ"òœ9v#Ͼ–?’W ÿåÿæ6XÚìb1|ÀDNÌ<4¨Æ³ªÌ( @€ @€ @€ºW z é\×½¤¦F€:.�Gáú=³6ë#‡ŸyÏÅs#nþ~äɧe…ñ_S丠PsŒ³ð®_F~íŒë#[®ÃZ¿{ sìË#·ÖI,´¾+°bÖŸbáNyÛ7#—øG‘_zǾ‘ãÛ»H]Ó³qï¿ú|ä¾ô—ÈÒVS?þ51|Ê¿>rR‡Š”cD�@U ÔŽ~I,ÿ{OÌmçïϺ®y ·FþðËy,;ä‚/E¾j«u6§BþÀ½çŸùÕËæD–ªRêwúP ôv‘ë<&nÓ @€@+�å³ã�«¿õ�ÈwûÊÈ9-µÅY+ù±Ÿç/XœñÖ#7ðv*ÆÐT‰@s~æpí7>ùåËþÙpužÅ=tÇW#¿õ…wF¾tòðÈö˃ó·�g^ù��6ò�-^ ÖÔïüöÈ�¹Cd|ñ  @€@ øð¸‚V–Y%@€ @€ @€ @€@w èèÓ�š¦E€:#0h§xÔÛ¾úíÈëï>>ò×äµToûÁ»"(ë´¾xâ1‘‡í›cn=¦>²!¯XÜðäC‘·_õ«Èï|åœÈ«f·tª�áý?ü­È“_5>R±@Ðú¤@aÉ]±\?ÿhV–œssö—o¼ù¥‘Wþï{#?tì‘ûï¸E䈺å‘ófæø»ðç‘gÿ¹Ø§¾U%ÊûÏÎ-ñ¸�Gj*K ù™b†üíK#_Õö¼ž¹3îx²õ�‹ÿýúk'GÞ2¬¶õ=Åá|øÓ[³ÿÃ�Ž\wŒR%ðŽÿõ•¸÷ô+n‹<ùâÙ‘ ×g…ñ;ÞòT䩟}Oä¡»Œ‹°xVä¿.ýIäéßÿCä#-Û`^ëîãgœy𨶞'îÐôœ@ó1í¿|ë¬ÈkžÍßni£5åÖsÓ‚Ö÷d­ü ??%òä+µ¾ãùá�û¼'†¿rÜž‘ë]6Ý–ûü  н¾?ó}Ñßùá³òSCËrä{¥±»î9êá "Oÿln´ .Ž\´dIäò•¹�g�äzZ¿ÍãÎ7}íÌÈ·íÐ~¥åz¦à.èÍ-¨ß˜˜¯Ý�Ì_2;ôw÷D^63ké¶sóì¿ýnäË�Í÷VǹäÎÛŒ�Z—[Í’yywÿÍŒüåÙFNkU[\32Ïå>ü�ÏE±•­&´ÞèÍ-¨·–ÉóØ$>=Þ$ìž” @€ @€ @€›^ ö¹EYŸT? ûgeР¶{×vÿ3™"ôu�å˳.°'ÚªUY„U_ŸýÐ7uË>î ïÎël�ú±OEž{ÃÜÈRÙU [ÎgýØ!‘C–.�œ×¸öýy÷6¯>ñÇ‘?>åèÈ ]ÿ8FÑl´ÀsÏ=�8p`ä°aÃ6úñÝù€Ü?̺æ;‘'| ¯a|ùÌu¶‹õ>]ýø¬HþÐ�²æøô·N‰ª¸q½bîìºÀ‚YíÔ¯_öß1bD×'ShžuQä{¦¾-ò7yé–¶eLåC—f]òO_¿yäú{¯œ}UŒóÕ÷¿'òûW͉ìÐÖ82+/ßý½ßDþè}9<Ü6 Zû .Œ;››³ÚiÔ¨Qí�¸1÷4ÝcŸsÄA‘½fu¥âÆL ½q'~áú¸ëÞÓ_¹îñ¥¶ÜöæÜí}U`ñ⬵]¹reäèÑùëÝÐzu Êmօúö¬!^kˆ‘‡Æ_gO»:ò£»åïmhJ�Å÷àË–å'ê¥-¨¶¶Ë'.½º•–#·£…^ùƒÏ}6òŒËò×Ë:tæã­Ýê'¿6n8ù‡?Œüï×méªák ùk�@iÛYRü½‡ÒTzO´fŒN m‚-¨s¹ú!Í�ÇÐÇyÜ…¥#ØÄþì5Ó#¿õÊ|oØå}JLC뛥ϱKG¢Ò'rÝ»œë¿ß½Ïej @€ @€ @€ PFºÈ•ÑÊ0+ PÝÙƒpÄÇFžyù�‘oüÃù‘çýôg‘—ÜZªÓÊþ¾�óŠCÏ·bUñÁoýHÜðÑù†ƒ³âºU,Ï?Â�>$0(–eÂa_Œ¼èæÃ#ÿpÞÙ‘çœ{qä íT×�Ü5î}ù{Ž�üÄdzBå°í‡GêM�N Ø&·ÁÓ.¾6rêÙY÷ÿÝŸäõínœ½N½Jýȸ}×Wæò>ù¹ü]�w¼UdnÏØ�@¡�õ‘�(þÎÍ”×Çÿtñ!‘oþÛ¥‘žÿËÈ__2-²�7RqO¶ú‰‡FóÑüâýÇyÀ6ù[h*#A#@€@… øL¬BWœÙ&@€ @€ @€ @€@W\ø«‚O€½ P×0n²9¯�4oÖ£‘�ÍÊ«›,X˜uZ+ÔGŽ5>rÂöy•  cGê Z/”Ó5ŒÛ^ÜæÆÜ^{xfäÓÅ+.7,Ã#ÆŽ‹Üzû�"'�ÉjF½àAëe�ž¸†q//BŸ®iá¬óÁ‡Ÿˆœûl^w¶ið˜Èq[MŽœ²CņØCAÛ�¹†ñÆÌ€q T´@�\ø¢EÌ<��è‘koÌ ôð¸Y»¿lþ“‘�Ïȳ¸9ó"—"Ë_ˆ½ù¶‘;l·Mä¨ANã‚AÛ�¹†ñF<¿Q T¶€kWöú3÷ @€ @€ @€([×0.ÛUcÆ @€@Q _Ö ��¸ÛóÉ…�Žô«ÏÊÅö*fG`z@ nÄ„˜ênû³¦o’ @€Ý'�¿Y6xtž¹í\Êî›´) @€@™ øÝÊ2_Af� @€ @€ @€=%à ãž’5] @€ @€ @€”¹€/ŒË|™= @€ @€ @€ô”@|a\(þ¿§žÀt  @€ @€ @€ @ <T—çz1W @€ @€ @€èq_÷8±' @€ @€ @€ @€@y øÂ¸<׋¹"@€ @€ @€ @€@� ÔÕÔÔöø“x @€ @€ @€(?Æå·NÌ @€ @€ @€zEÀƽÂìI @€ @€ @€ P~¾0.¿ubŽ @€ @€ @€ Ð+¾0îfOB€ @€ @€ @€�òð…qù­sD€ @€ @€ @€�^ˆ/Œ Åÿ÷ʳy @€ @€ @€(Æe³*Ì @€ @€ @€zWÀƽëíÙ @€ @€ @€ P6¾0.›UaF @€ @€ @€ л¾0î]oÏF€ @€ @€ @€�²ð…qÙ¬ 3B€ @€ @€ @€�Þð…qïz{6 @€ @€ @€”�€/ŒËfU˜ @€ @€ @€ô®€/Œ{×Û³ @€ @€ @€ @ l|a\6«ÂŒ @€ @€ @€ @ wêjjj{÷= @€ @€ @€”…€ ã²X f‚ @€ @€ @€½/_Šÿïý§öŒ @€ @€ @€ °)ToJ}ÏM€ @€ @€ @€�M(à ãMˆï©  @€ @€ @€ °)|a¼)õ=7 ŽJz@IDAT@€ @€ @€6¡€/Œ7!¾§&@€ @€ @€ @€À¦ð…ñ¦Ô÷Ü @€ @€ @€Ø„u55µ›ðé=5 @€ @€ @€l*Æ›JÞó @€ @€ @€ @` ÄÆ…âÿ7ñ|xz @€ @€ @€èeƽ îé @€ @€ @€ P.¾0.—5a> @€ @€ @€ Ð˾0îepOG€ @€ @€ @€�r¨«©©-—y1 @€ @€ @€ Ћ*Œ{ÛS @€ @€ @€ @ œ|a\Nkü @€ @€ @€ @ |a܋؞Š @€ @€ @€å$PW(§¹1/ @€ @€ @€ Ðk*Œ{�Ú @€ @€ @€ @ ¼|a\^ëÃÜ @€ @€ @€ @ ×|aÜkÔžˆ @€ @€ @€å%P×ÏWÆåµFÌ  @€ @€ @€zIÀ׎íi @€ @€ @€ Pnu5…r›%óC€ @€ @€ @€½! Â¸7”= @€ @€ @€ÊPÀÆe¸RÌ @€ @€ @€zCÀƽ¡ì9 @€ @€ @€ P†¾0.Õb– @€ @€ @€ о0î eÏA€ @€ @€ @€�2¨[Õ\†se– @€ @€ @€ @ ÇT÷8±' @€ @€ @€ @€@y ÔÊs¾Ì @€ @€ @€ô°€ ã6y @€ @€ @€”«€/ŒËu͘/ @€ @€ @€ô°€/Œ{Øä  @€ @€ @€ P®ñ…q\ÅØ…ŒËuý˜/ @€ @€ @€ô˜€ ã£5a @€ @€ @€”·@]MMmyÏ¡¹#@€ @€ @€ @€�PaÜ#¬&J€ @€ @€ @€�òð…qù¯#sH€ @€ @€ @€�ð…q�°š( @€ @€ @€Ê_ ÎŒË%™C @€ @€ @€ô„€ ãžP5M @€ @€ @€T€€/Œ+`%™E @€ @€ @€ô„€/Œ{BÕ4  @€ @€ @€ P¾0®€•d  @€ @€ @€ о0î UÓ$@€ @€ @€ @€@øÂ¸V’Y$@€ @€ @€ @€@OøÂ¸'TM“ @€ @€ @€ PWS[si  @€ @€ @€ @ ÛTw;©  @€ @€ @€ @ 2|a\ëÉ\ @€ @€ @€ @ Û|aÜí¤&H€ @€ @€ @€�ʨ«)TÆŒšK @€ @€ @€è^ÆÝëij @€ @€ @€¨�ºšÚŠ™W3J€ @€ @€ @€Ý( Â¸1MŠ @€ @€ @€•$×0.]ÄX¡q%­6óJ€ @€ @€ @€�® ¨0) @€ @€ @€ @ "|a\‘«ÍL @€ @€ @€ @ ë¾0) @€ @€ @€ @ "|a\‘«ÍL @€ @€ @€ @ ë¾0) @€ @€ @€ @ "|a\‘«ÍL @€ @€ @€ @ ë¾0) @€ @€ @€ @ "êjjj+rÆÍ4 @€ @€ @€tM@…q×ü<š @€ @€ @€+à ãŠ]ufœ @€ @€ @€]ð…q×ü<š @€ @€ @€+à ãŠ]ufœ @€ @€ @€]ð…q×ü<š @€ @€ @€+_Šÿ¯Ø%0ã @€ @€ @€ Ð)Æ�bó  @€ @€ @€T¾€/Œ+Z @€ @€ @€tJÀÆ�bó  @€ @€ @€T¾@]Mmmå/…% @€ @€ @€ @€��Pa¼Ñd@€ @€ @€ @€�¾!PWSè b) @€ @€ @€ @`ãToœ—±  @€ @€ @€ Ðgâ ã(1VeÜgV¨!@€ @€ @€ @€@GTwTÊx @€ @€ @€ècu55µ}l‘, @€ @€ @€tD@…qG”ŒC€ @€ @€ @€�>(àÆ}p¥Z$ @€ @€ @€tD@…qG”ŒC€ @€ @€ @€�>(àÆ}p¥Z$ @€ @€ @€tD@…qG”ŒC€ @€ @€ @€�>(à ã>¸R- @€ @€ @€:"à ãŽ(‡ @€ @€ @€}P ¾0.ÿß—Í" @€ @€ @€ @€ÀzT¯Ç] @€ @€ @€èËu55µ}yù, @€ @€ @€´# Â¸7 @€ @€ @€ @ ¯ øÂ¸¯¯aËG€ @€ @€ @€�v|aÜŒ›  @€ @€ @€ Ð×êjj Ået%ã¾¾ª- @€ @€ @€ÖPa¼¶‡¿ @€ @€ @€ P5u5µÅU³¶-( @€ @€ @€Z ¨0n…a� @€ @€ @€Õ$_Ç5ŒK—1®¦å¶¬ @€ @€ @€¨zÆUÿ@€ @€ @€ @€@µ ÔÕÔ¸†qµ®|ËM€ @€ @€ @€@u ¨0®îõoé  @€ @€ @€¨b_WñÊ·è @€ @€ @€T·€/Œ«{ý[z @€ @€ @€ªX ¾0.ÿ_Å� @€ @€ @€U) Â¸*W»…&@€ @€ @€ @€@MM]MM- @€ @€ @€¨BÆU¸Ò-2 @€ @€ @€RÀÆ^ @€ @€ @€¨R_W銷Ø @€ @€ @€ˆkk @ z/^ ߨØX½–œ@§.\�4hPä²eË:5 "P½¥£Oÿþýƒ`ÅŠÕ aÉ tJ`É’%ñ¸ÚÚÚȦ¦¦NMÃT¯ÀÒ¥Kcá›››#W­ZU½–œ@§Jï}V®\�.mA¥ãQ§&æAªN`ùòå±Ì¥,mAýú©i¬º—�î´@éü­tÜ8p`§§ÓÞm�íɸ� @€ @€ @€}\ *Œ ÅEÌž¹¨6�!C†Ä"—j¼ªmÙ-/�®”z5–*Œ ЕIy,�*(ò]X]]þàSi;ªB‹L ‹¥z”Áƒwq:N ÚJU)¥#Q}}}µ-¾å%ÐE�ÒѧTYÚ‚Tw‘ÔëJ ôù[é3„Ҥ¸ª^¶‹¥£OÏýÆ’ ã.® '@€ @€ @€ @€@¥ D—vµÅ•ºòÌ7t] Ô·QÏú®KšBµ ”®Ýe ª¶õny»K tÝâRozÇ îR5�ê(õ©/ýÖ…-¨zÖ»%í.�Ò¶Sº«-¨»TM§ÚJï†J[� ãj[û–·+¥w@­ÏâTwÅÓc«M TaÜØØØC ®Â¸‡`M– @€ @€ @€å.à ãr_Cæ� @€ @€ @€=$à ã‚5Y @€ @€ @€”»€/ŒË} ™? @€ @€ @€ô�€/Œ{Öd  @€ @€ @€ Pî¾0.÷5dþ @€ @€ @€ ÐC¾0î!X“%@€ @€ @€ @€@¹ øÂ¸Ü×�ù#@€ @€ @€ @€@ øÂ¸‡`M– @€ @€ @€å.PWî3hþ @€ @ çvU<ÉUÓ—Eþ{æÊÈÇæ6EÎmhŽ\´¬Ù\È:({�Z9y|¾©Üe«ÌÃv¹÷¤‘ýòN� @€¨Æ°’Ì" @€ @€ @€zB@…qO¨š& @€ÊZàÉ粞øw·,�¼ò®¬*~詬'îH[¸4kŽæCkfë’¯¿oy ÿôš%‘› Ï~ɯ*V¿iÿ¬9Þo»�‘ @€ Pž*ŒËs½˜+ @€ @€ @€ô¸@Tç5¨jj\`ªÇ­= @€6¡À‚Ƭ þñUYü«#W®*½ìΙzvQ>ËÿÞœÓ/å+vß;jxä”-ýÌU0h @€ @ ŒT—ÑÊ0+ @€ @€ @€èM�»{SÛs @€ @ W Åâ_þ=«ŠpEfé Ľ9»7¯p|]ñ:ÇoÙH ŸúƬ61DæÞ\ž‹ @€´-àýyÛ.n%@€ @€ @€ @€@Ÿˆ cW/îókÙ @€ PuKWdqñg~Ûù§;—mòå/Õ:_|ëÒ˜“ÍXyÞ‡FGNדϛ @€ @€Õ, Â¸š×¾e'@€ @€ @€ @ ª\øªW¿…'@€ @ ï ÌY°*ꃿXyÏì¬å-·öØÜ¦˜¥7|^äOÞ3*ò�)Ëm&Í @€¨ÆU²¢-& @€ @€ @€^( Âø…"þ&@€ @€@… <ÝÐsþ¦3Ÿ‹,Õ—ó‚44æÜ¾ûœœÛó>˜×3>t×Aå<Ãæ� @€ôIÆ}rµZ( @€ @€ @€lX@…ñ†�ŒA€ @€�2X¾²sø¡óæG–mqkÌUYf\ó±_å—/ýÔØÈ6÷F5M4 @€ Ð;*Œ{ÇÙ³ @€ @€ @€ @ ìtÜ.»Ub† @ � ¬Z 8ãßÿŽ|bQUj‡GNžºOäÄ¡µ‘�k+æL�Þò`^ ²X¬Õ¹ÉÄ£rn½WäA;Žjù;þѺ °rÁ¬xôãs—E»mä¶có:��_ßñàêl=¶µËÙ”Ûì¬{n‹œvã­‘Ó}"òÉgrm·Mä„íw�<à�C2wŸ9¼�e–Ì�%züéÅ‘ý†o¹í¸!‘í½zW,x2î}ò¹‘Fo¹Íè�‘ZÏ ²´¸æ¿—¯Õ»f®ì¹'êÑ)/^–‹ñþŸg…t©ÎxôопÙÔ£/›^Ÿxn_ó¾#rú–F ù*3åÀÈ=·ìÎ}]ÓÂ1Í;oΣÏíÿ¾/òñ9yŽ·´nD中¶‹Ümïý"< �A[Õ÷…í%ä…­xž3ëÙ¸}Y]ž—nµÍ˜ÈAí„ ËæÅ½³þÓ¹jÈf‘¶L±>tXŽ¥©ÜÖ+[Pó¢zâŽ#¯¿á¦È;œù̲a‘›o;1rÊ>G¾ôà©9<~pd;/¨¸§Â›-¨bWàªEùþñ®¯‹¼á¶»"˜1'rASž‡�Ý<߃l¿g¾†<(_Ïûí”ûÆñ_w´ÂòÜ—>ôÏ|ö¿Ýpgäƒ�çüÌ+ŒŽœ0i§È½ä°ÈW�ÃcÛÛ)Ç}ÝlA»ú6í´6[¯ûÖ~Jè´@}GÑi$@€ @€ @€ @€@ÕèdY5«Ú‚ @€À¦(ÄÓ®\�½Úïšveäÿ�÷ãÈs®¼'²¡1¢¦fü;#.¼ý";[aœÅóoûIäÛßðóÈì{Üù62zÈ�þy]±ÂØéBç-ó‘Å×Às�ÇÐ}÷fOíá»nYª0Žm½½³­; MqÓsw_yö×N‰üæÅYÝUÚdc �–ÛÎîoû\äé_þhäQ»d-T¥÷Ðl^øD,ÅÝweUAÝä¬Î™Ðn…q®¯ås޼ëÞ‘#vÍëÑn]¬0î³µ;±„›º]tkV:þáöÌJo3Ÿ]‹Pª–þÙûs ªôf ªø5¸,k[½ó†È¿ü.ϲ~|nžÑ=ÒrHȯO]9=ò»Å ã.íëš²†ø®ÿûNä¿|VäŸZÿ‘§>Æ;õM‘ŸÿÆé‘Ç61rH—f"&PF­P4ylzV×=3tçÈÑ¥ ãöæqIžß?=�DËÆí¹ÅÅ ã>dÒÞ¢—çíͽ´åȲY×GþìÔÏF~íâÛ#ç­wªßòÐç_ÿfäçŽ9 r«>W%i ŠÕZA­°,§ç¦ßœyê×Ï‹¼næz_Ä¥e«Ÿÿþ‘¯D~ó ÇDî3¶sïàóS…Eå; ï|òÄÈïýefdûs�Ç ‰GžyÖ™Ÿ‰õù; »¾äèÈ×L�Y_¬Þ¸ûoYvõs"çÝ~~ä§ßpG俸4òGïØ1²Û¶Í˜Vßm…�ÄÂÝzwJ®ì¦Å¬6)¦´Ï‹Šë«ÚÊRjz ʃÇÒ‡/Š<ùíŽüéy>ÖÒê·‰�ý_sTäK·ÏCÝ3w_ù§òמæÍ¹>ò¬÷½&òÖ»ù¿ßÈmm²�'6Ø óc”û¯›ùÈ’â!|ƒéèýcÄ-÷}UäÔ­tôA>ÞòÙ¹çÿÞÇò7о~Yî—ZuêÇï·L=p÷ÈqMOFÞ}ë�‘•�3bøªïçcÿ}çc‘¿ûÝ©‘/Ÿ’k¹ïÿuä GŸù›Õ?£ÃõÛä•’_þŠý"·­�ù¯k¯�¼mvÎãÌ¿|-òÍŒ<ûO?�|×”|ÇTu;¿Xæ�oÍÏ>ºùþg";rîÝ‘g¨µCŒ¶ß[FêÈúÄ8›z êýc_Y®¶æ¦˜­¥K–D®ÿ°Ð¼|qŒ³piŽßpþ2ÁðÁÞ_ ¹*Æ,µÂÊü=³'¸?òÙîÚxZ¦�{¯‘»nYª0n¹¹jþñÉUÕ¬j J€ @€ @€ @€�µ²{�F€t§@söùýÇ×ÿ;òÛÙÙ·Zv¨[Òðtäò–gË^½“?�×ÀûÉ[³‡é†{ëµ<0þÉþtƒ&l½‘�Zóør*4<³qô‡#w½Ë{mznС‘;�Ö[:z²m‚-¨´8ùB™÷�¼fØZµÅõY|Èû¾ùÕ^yДq‘-Å'…¬GšÿèÍ‘—þä+‘_üùu‘�[LŽÜeÂÈH=4Aë!�ó®ËÜÏ,ìp·êÚ܃í9%ë Þù’¡‘Gìšµ;Ê/Ó¦ cø¨f½Èýëßsãüø´¼Æð9�îhÅ>é—ü(¯û©Çr‚߸,+§/9)+,‹3ž7j/p¼{HWÿ,d�È£Wä>ÿ”3³Žªç[VK<ù§/E~°UmqýÎÇÅ-ßúù7#ßÈ6‘õ­O@V~#n¹ë÷™ûØ9‘7λ/ò·Ÿøtä~/º(òC»VOeQ,n'[aeîEŸ›—{žåëßïuøú­Ú"Æ]SÓáö…{} *,üW¸ýôYù«–Úâ<ûÚÿøFžýå·Gî3>·…– ¨�ï–æÞñ‘ßúÔ§"vÃÜÈ[Ï|wäûÆý5òÿ}Pä¨Ö[\ü­½P 7˜UMYÖ´*Ï F�OùÒe  +³zlÞ¼Ìæ!£#Ç�,î‘–eMØÜ¹ŒØ,rL}é}jNmå¢y‘ó–ä4›;|j#WlË¥^:ã�‘_z×û#Ͼ1kŠïå�:1†¿rò{#�zq¾£=`Í‹²iá̸åö?žù…“ó(pÝÜ<›{]~ð‘SöŒ¼æ§oŠœÐ� ·Æ˜g�pRäêÚââvô±Å-ç|ém‘{�[ó‹/+Ÿ½+n¹èkŠ<á¬Û"Éêä“OØ-r×K>¹ßˆ5sjm šr­5,Èí¢�£F!7ƒU«2 µ¹"ëúoXµÿ€ü…žB¾¸žßñ‡û`”ËTÓëǾò\™µCò|uŸC3W-˜ùðœ< ”^Œ1PlŵöL¾ò-Í×ó�ÑyÖ´ÅÈvvUuy™¸C޳֙ð� qËÔÃ6�\ëp±*·¦‡o»=rÆ¢œþ¨�ö�œ:)ë˜[>™Y•ç~sŸZ9|Ë< Yç#›~†ÄíÞÞb¤>×ÖÁèsKh� @€ @€ @€ @ MÆm²¸‘tA _ö};ä+çEž—Ý£×jͳ®Ž¿¿ñíßEvßåð²7ê’†§"³Ú1[ö†›rÀ+#?|Jd;½õâž>ÚŠÅhýûçr÷_»Ccg¸6ûØ©oë ]'³ ¶ œËÂüi‘?ùü÷"[®[\¿e }ú¥‘ÿsböK½ngËÚ,®½ÃK#ßû½ßGî¾óÙ‘’5¯ŸT�Õ]Åîè­7šBKõX –Vº¥õ8Ïß…Ö}ˆKS[k ÙO×Ö´Z¬óÿ>·$ûRŸsmö�^41�?xuVÿìºmV‡LžkaÝ—sܸ [¡9_SK²è¨¥ÝùxÓJ×3~Í^9ÿÐz r¼ëæ—E¾Ò&¾úôÈóv]§Úgyþ~É¥§žyy–�uG[6=¦ráwÙrÉÈ‘ûÄð‰?þAä /É û6¶Öyû^oËùüù’™‘‡~"�Asç]yæonŠü¯o¼<²Òª$s?°ÖAc�ƒMûÇ xèÚÇ –ãÑ §YÛê ÔoÜ^ñ¨#ß�©u‡@onAyŒxìߎ<ãŠÜ Ku™ã�þF ÿâÛïŠÜshïÖjµyn6~ßc#¿ù«œÛåGå˜gßÓyý÷¾ù?¯¾$òÄ}òw8Öy|ÜVÎí…¯öÖ'e¥ùîÞ-¨Åb@ÖxízàÞ‘ã‹;¬Â‚ûcøo×?¹r«Ý#Ü3«¸jžúWÄŸož9brîëÜ.«ik‹3ÚðÀßbøºû7|n£õ‰–¯¯~ýòÃùºÒ޾øËF‡òܸåìÏ¿.rûu_ÃqkŒ?bbä�Ç}+ò7#óœðÈ·çQczcÖí=tÑw#/xÿ«#?wÀú_ɹ=zé÷#ϼ.·‚¨â‹ÿJÛѹgÃ{¬UÖ—c Ø,÷™Ç|3?ñXøx~æðé?Î�œwsÎÃ÷/käoŽ�™ËVI­·· þ[äVpäQ™ë¶æ¹wÆ��öxdaB¾=bßü¬©ê>Û‰en»•ÃTš³Þ<öµmQn·®ZôdÌÒC<Ùä¸È±-¿'QœÓ�y»E~Ü-«�J»Ÿâß55Y%ß07�ìKí9~ûu*Œ‹ŸÃ šŸÆ´´BV ÿçÎ{#_”Ûò�mö�<`×Ö�Í=Þ3ÓoŽœþhkÏß#ÇÙg»ÈQ­&Vm+Žªvñ-8 @€ @€ @€ªW Ò:úTïš²ä P9ý&ļ¾ä]ïË\g®›þ½0nûY©Âx�{;yC±'ÝâÙW.{g˲­ÇŽˆ¬´~ñ9÷]oµ#vŒ‰òêL­Âz ªYDwŸZä÷§­éY?ñ­Ù×þ‡ËÞÜmÔÇ­/hýFÇ û}ø‹™/¸«"þ,dÛGÿ‘ÕiÓçe¥ÂºmÕŒiqãg¬{OÛ·4ÜŸ•"—e‘IK«µk ½âÐ)‘.m¶Z¥3ÿþéŽ|Ý.éÀ%7o•ÕT¯Ü-3� ÝÒšòˆsÑr{¹¹Se[ï9<ûæ³s¿b]ÑÌiy|<ëɈµÚ…·doñ ¨0ÞD[�ãÝZ/—®ÿQ›5";¾êÝ™ëL­°ä†¸mÆÝYaÜôhV9\V¬n,=áȽòÙßÞ^mqi¤RÖæïìüÆFûµ¿Fž93ÏŸøã�‘÷�zhä‹×© ‹˲b®Ümäõ,ŠÌ¿_Ð=7\Yf‡ÚÜÇhW\šÙÒú���½_ýâÈIƒ«óy5EýÛ›[Ðò{b!.ûÙU‘YÛ­~»ˆ|òØÈ=Ú©ËÌÑV·A“^ƒŸù›"ÿð�ó#çÌËmç{ç\ùösÞ¹E¦*¢õú”§í·æUq_þ5¦uy¢PÚÞÚØ®‹ãTs šøÚXüÓ.ø]ä¿Ï3ð7xä6"6Ør¤­�8!òS¯ùMä{.Éš¼š†»".¾î¾È“È÷%ylk«ÿ3nþßü9rõv´s ÿ™wFî¾Þ#Hmýn1ÎqŸÉg?÷š/GÞÑ8'ò¯g]ù¯7~.ò€õN!F(›Öë[ÐŽA9?˗仳¦âÖ3bøÐ®˜R/®×M»µ,hoûzѶ»žª_]0îð‘ÅŸšÉW[ñÒsï¹%F¿½x&<`\î�Ü{›ÈµwB¹Ï·ûÁ‘ô»5òöGroù�äûÐ}Ø3r«¡Õ¾�UûòÇ‹@#@€ @€ @€ @€@u tø‹ýêä±Ô @ " YM²ð¹¼ÎÇê–UdãGgý–ê‰Õ&þ%ж@aI^êòÿ¹)2ë%£�ÍÚ£OžxtäÄõîÏU~Ëú�!£ò sãú­©),Ïþ¶ó/-;xd o6|}uª«çÇ8Ï-iЬ«9zèš7µCëã–N•¤Æã´5WÝ�Æi�eÿì3.Èñû·:$ Û)+N˜š/ñ�^#ÅÊ¡ßOËÚß�mƒ¶Ê×À%¯Í¾Ë¥þËËfç•«N»<«–Ÿ‰ÿÖnÓÊ£[©–zè V °öheð—-¨ VB…ÍBîi—Î�9³åð“ 0|ï�"·îðѧvTVƒM=pX>¸XWÑ8F Ι_Ü“¯]X‘ã”q+5Æ�ËZ¸–ãPsî»<—5Ç+ûåÞcô˜Üw­9®Ä­ÛÊÜŸ<· ÷NÍòLx̨œZKµD¿<Š îWÎ{’˜A­CM�Ýã]ùК�§~«×Ç-‡Oíøo,åëhâkÞyÌV—D~¯x!ñÙ—ý_ ÿý”<|Û¶•TiS>[PaUž–*#‡ ZßycŒ¦…ÀÀm‹<ñÄNaÔMЇíÿª½#G^’¿ÔPüݱ™·e…ñ“«ö‹Ü¾�S½â1èžëâÞKÊÏJmä>ÇÅÀÑS;òIBîK‡OÍk-»÷÷#ï(þVSÈá¿ßwRäSs\)­|¶ Ò1°qqÑ ÅóôáÃó7E½Ú{-mŠ-¨½yqû:ÅŠáB1×¹¯­Jã·uÏ n+,{6nytú�‘÷=™Û˪â¯ïŒ®ÏóÀ™÷äí�­*þâźٔǩÒ)áò†1|Û�ù®sïç•�'oc§·WC«¤óžjX–‘ @€ @€ @€½&Ðn§Ì^›OD€tU Taül« ãú±1ÍqÅŠ ½P»ÊÛöã³ÚrÎô¬lxh~ÛW{mý¸æeY£Y(VË,žq{ ßðÔ†{,ÖÙ6ÆÜ{¿É‘íÈPèþ–=ënûcäù¬éY?öÀ·Ç-¯Ù#+™ª¾xí¥­öÌ+úlÿ­n«æä+öÏ·d \Ý–»G¾øEã#Ûêyšž‹ú{äµ÷.ˆ:iŸÈƒ§¬[ë“ý|—7fÝXS>¨‡Z¾ÙTŸ×LªëC+²¡1÷9·<ÜjŸ¿^¿•ó²r÷¼b¶q‡¡Y©püÔÖ·õðp¿Üï}ê­Ã"w-œVæ¼ýþ¢¬�¾.Ûh+Š/‘¿ßŸ{Ý#_TÆu*½ºµå¦J¨}áîiÕÒܺ[ö�/¼³Í¥ÌíbبV竲®bENTPËE61«:ž¸f¶ Ë�?nº2kDž©Ïó¢¼Kä¨vd óî‰{¯úÇÑËFï¹ß‹'Eigü¸K«@�ª´ ®÷AeåYY3“Îc·Î_§¨¯¹&²Tw¿tæs1¼°]ô<ÖÜc¾šÑò6(ßûl}ø�‘S:~Â5hçÿ€WmY_¬0nlx0†ÿ|ÓC‘Ÿœºgd‡2#ÆÝT­×· V ZX”{›‡ÿ“¿¥±zuåÙ~ÃÜ|¯T¨M¿Æ§‹{¼…ëÌšsÌæºQ‘vȵ0l�QâFm½�Û‚Ö;Iw¶(òUºªXãÛêæö‹ã¯ÞÚ-ïÉw‘sŸ*Ö—F,äÑçÙ™�f�<ýúçguŠY—9 ˜uu¹›5>ß™Ö?S}fî“1|çMy̯{Iž‘n½‘gñ�>Ð*ᜧ0[ @€ @€ @€”Ÿ@~©® @€•-PÈ^u OeOº–6dR Œ¡gØj�nÿ·Øçqù⬡œ??k%7Ô²d©�äªbµñüì.¼�Öo帣ic¹» Åþ§÷ý#{Ö?ÑÒ³>«ó§ýâÈí�)w�vmΊ‡û¯Ÿ9cyÇzo`ŠmÝÝë¸uÿ#÷�ܺ­Íëï/VfGí k;ìŸ×Ã{ûä<6Õ÷ˆ³oYÃßž¹á¹æž²¯0ÞðBƒÀ ²¨¾X¶W|jfk%nÊßuxpñQ‘›�è@¡Psž�Ì�™{†R«±} l5¦�]ý�*ÿ·°ô‰¸}Ú‘øá˜6µ²>i³Ý‰Ügëüe ­'òÌaqCn0k^÷qØÍFÆ-]T›�Úqï<[[3;r^MÖ*Ýrïã‘ËÞ²MäFO3S½-ß-˜—û¥æ~Yõ8f¤÷¤½ñj¨íŸÎ¹'ZÓÖ{ŽÝ<7F|äß�G®¾xn /{QA:^`\Sü…•í÷zIÔÓ¾�%t3èûMYa¼à™–É\Þ!Ù·t¬ËÞ¦EÏ´Ú¼öç¤gõϤ ÁÃwyEäËÛ¸ªkܬõ®@óñ|÷ÞôtdËöS?:†÷ÛeÛÈŽôi�Ñ´ÎÔŒG�Ü<{o¹²3èÐcŠu-ƒû\çà»gõY‡\;3R±GùI‡g¿ïRÁdañ²þÕ¹,«ëZÖ7á{*q©×·@î#Ð"ÐrVE¼ùЬuøãï³Þ«ñ±s#ÏúÝÛ"§~p·ÈõW76ÍÌzˆ¿þ³Tw”W ÜöM‡Fîé2†¡ÐÑ–‡ŠÚ~YSÑÙºŠâ:útÆë�ó˜Òº­ZžÇ”U¥¢Ê�8úç:ßb»ÜÖFÔ\9¯xV8ïö‡bøÉæ¬ßÑIa(t¬–f•öcOæï‚ô;%róÖ§bý’²ÄÙ¼<Ͼ/ΟL©-4E>·piäz«bã~m]�4\ðÔŒÈ\݆í˜gÚcÚÛ©­ÌªÖÇîÌzú–VŸ¿n5y«|7ÔÞƒV�ÚúßwÌÖÛEŽÎCPÍœâÛª†;‹á§Vå-*ŒS¡ýÖ³]ãÎC_±cdËëÅœ¾ë¦û#Ÿ29r¿ý3×:°7å{Ø»o¼7òÙ�ùË6b¿£kÏ tj zþÑ6$м"ß÷-[šûùµBŽß¡±kó•?r\f{­°*«‡—.ÎOM—Œ*î’Ú5?�·ûK#_ÖÆ½ÕuÓÆìÿ«KÆÒ @€ @€ @€ @ � D…q©çŠ.(}|M[<èÃ…ÆE±t Z—œõÏνË¿6òü_]ù·nŠüçô™‘K†OˆÜq×½#zIö¡;ôU‡G<%{ç?4Õ!PXœ5?ÐêjPÃr»˜²MV�¯u~\È:‰ù³�|bNŽ¿¤Xe>rÌÖ1¿UYËúgôñg³?øª,¨)^¤oý£»—@åÔeUÖ>÷éÈïÿJäUó²®è÷Ÿ}_äCÏ�<ýí{DŽZ÷(SÈ«„Þö»ÿyméP6öå1üñãÎñ×:ŒÅ Z»µCòÜxê+2µJÈ÷БyP\¬h,ýPLã#¹íÌ+)¶ØÈ™�£ó÷™&æ%\kf4d.}ðÉÈg‹‡\Æ)²¡Ö¼ü™åþÛîŽ|ª)WÌvSr›jý ýFf ë¸A�GÎ~à‘×<ñ‚¶îÎî#øsm�Bø×]‘¥CA¨Çð6ûìÙÞ¶Ð<ï?qï£ó‹åÀ1mØÎ[�éŒÿ1¹MÉ·P5÷'Ù87+žÿ³ ¿wØ{œRÊ´ÛäúQÜÿ”Æ)<—ïR—¿´é7r³7*ïXº»˜…Æ\Û-ßë Ì{|’ÓŠgc;µmÌTã¸ýGl‹=e—¼’}¡X-Ü0û±þÏ¢bd~ÆRS—ŸRioRÈw”O=2+rÁªˆ6Zaé³qk~šSSÓÜ�[Öƒäa¾½I;1î�ù¡ÿzi䤡íõX�;5]x¶xµ¿.M¢7Ü?ÞrÖ¼ïà¬{(]m²°<W—þ=‹¶Zo|ñçzÚŠ¦¬ X²<û¤�âµ*wUœ@/FLýxä�ø`äÑ:/ò�†Û"ò¡Ã"ïøû)‘_:é˜ÈWì’U•ks[˜7í'yû™7D6Ôg%Ç›Oÿfä»w¯ÞªˆX|­ r«2y÷ȃó,jfÏÍîËmaú“ŽÜmb‡�…|ðÃÿ¼)rf«_lj\–ü‹óèS3Èy]2´ÛVf5ö›¹|eV9n¶Ë~‘»�[§âqPþ6Ï>/Ϫ²mçgeXSîÌ¢Ä,…Ÿøwä½sò Aë¸@ó3·ÆÈWüñ¹5©ß.†�>8+†[פ®!jþ–æ;�ù­?C˜•¬#׺LnëG¬o¸vhÖŽkýd+²†oq©H¶ÝZ¾õM³šï[±8?áYVÈí¢~DîæÖÙ–jjVdÍäòâ.ªvРhG ß:·müóT×#ú�ÌóÒ�†ä‘tÖ}¹odñšàæ%sã–'oï%[:òŽ�qvÛo§ÈÖ¿T®iÅ#øSçOUÌ(m kîkkha~ú@n^m¶œŸá;oYª0ns¤>c‡ÏŸú¼„$@€ @€ @€ @€@• dwo�¨h�RïàykºëÅÒdÕãØ=_ùŽ·¹÷äq‘Ck²÷ÜGÿyÅ…D^_öümlœù—Ó��¼ÆY‘—ÿì}‘»©’ ­ï 4/ÊžøO”.hSZÌ~#âß!+î�¼à“'D~êÜ"ç®UU7<ßò޹Ó/‰üæû®ˆ¼øÏ_�üÕÙ'E¾x|g®Ô¬G`IK­ÆzF)£»FîœÇ£—�ÏþÚ¥>ä��f]ñE­Ê`:>»KŠ=ÇGdñ¤F o ÔfþŽÇü0òò¡yÎö‘çùصs³ãæ_|"òˆ ²zø ·ùáÃóÜ¿œú�Èkçåu :ùìÈï½o�H§o� õy�~[îËxØÁYsþòZž5s¯Žø—d%ÓÑ'í¹¡m!‹+Ÿ¼:·¬�œt~d©R9Š-OW*vmÑXï?uY™ºõĬ�0:«ÁvÚzxd{:÷2*îݼ˜1PlYOÖ°ðþHÆ%‘ŽeÅÏøëo"ÿoöš·+#ø@Üòú}³2µtö/h…9~ÃZ¯ð< j£”õmãÏÚãÖÁ­ßú¬Ê"¾ÆŠ:kmcÁ6ÁM¹-,Y˜zÍÅ«»Ž‘ùë®ÇÂò<£.U!’ë®5ü©u@ ó[P&^¥£¬Z6?–ü©™�F>ôÈìÈ+ŠÃE�~õY¿»Ývy®;¸õ˺�ÇÜgg<9gIŽ?xTYFׯ·Þµß˜g·W¼:rÊš'‰¿Ö´Âœ洛3—n™ç¯Üs|d{ÓíW—õú­g-þ¬ªÖžLU!XX @€ @€ @€T£@{�½ªÑÂ2 @€� è¿ÃÛbÎ|QöÞâ´?EŽþÀW"O|óþ‘Û´Ñ#ï}qûñ'eä•?ødä‡ÏøsäìÆœÂŒ NŽüø>/мü“ÙsC}óc”2iÙ¥pÙ¬0XÔ‘ë—tj®kdOíÑ£²ÀMÞN–ÓƒVd¿ì†ìXÜÒêWþ+†ÎùÄo#/¹ð‰È1¯Ì:ãœ�WŽ<|ê‘[ Ï5¿ôÙÇ#ïºæ×‘ßù깑×ÍÉ-è‘ß)ò½£'D^ù“ÿŠœ”î5U(�=³_»oöÑSê¤]È ÞuWöŸÿi�p¼ë¼]ù?²ÿ°¬–›?x“Å,Eãœø÷æ_ŸZÌ5·�}ýÏâ�sO]äDGœ50†úº@Ýv±„G|ð¸È�¯Ìêüó]À5§�ùµíþ'òÔ£·�\÷½LaYnM·^ðåÈ�Ÿü‹ÈÛóG—^Ðò#Óþý^p£?Û(Öu Û*×ȘڦÈEó³ÂlcZNbñÒµ~2kc^¥ãæý#–üÜä{ù–ÃEý–1|ԇ߹G�¶ßŠõ©ó[½ªéŸçl:÷]ÁºÆM cjK[U¶?+îi%PX4,È,Ôf¥þÈáë®’Ü^V,ËqJṴ̂Á¹îª¹&2¿­K[P'ž¯/?$_‰ Íë©O»ûéÈeÅën�ØjJ ï¿ãæ‘Mÿ3òÎ'Ÿ‰üϼ<×Ýs÷âQ£9÷^�ÜóhäÓK"jê·Ü#ò€©#‡mà(œŸÌ œŸÎµ÷ã…å¹µL¦ž(’ão`Â1Fµ62Õºæ-7 @€ @€ @€U/°n•ª'@€*N vhÌò¤W|,òç‡æ•íjûeŸ°õ÷0í?bÇçÈ/fŸúŸ5yÌ÷óŠ_ ñ¿èqæÙ‘W¼-ï}óÖ•ÒÃ,û³?{ßM‘ÿœÓSýÓû�ËÚëW<9²~ýÄ1†VÞ…Uù:Yš…Á-­qöe1tþåÙ7ÿ5§üoäYŸ;*rÇa/\Ù£Gå5ó¶ÚaïÈý÷Êñ�;êó‘WÌËÉ=ôÛ¯GþâØÃ#O?tTä 7U`[þøÍ1×zb½KÓœU¤ÅR“ \ÂJ˜å¡k]çx`öó>lJöû.E MYÆrË=�u ´Þ×^c”f­û¶ Ç»²_Ù9ƒ…ÆÇâúúG#�ÿÁU‘³kv�|çYß�üÐNOF^ý«ŸFžsÙí‘s[¹æ]ý�¸å3§çQéÛ'¿!r·Ñ¹Ýõ½VXü`,Ô —?¼¾E+þ’Áªânfý篅†Çc:ÓË:ÈÔUº»`*r:µýódxh}qæ[ºæg/ìƒ>þËÈó¾üêÈ­6p¾œ¯º±fMØçO¸0ò†¯þ;²±ñ‘È_ÿ~ZäI/{mä¸>ÑC¶v`b�¨_«!niÝV-Ëî —v®<¡õ” ·-°Ù†.åÔöÃzýÖ!“²²a×ÒöU|öæ¹+âß[Ö”ÁlÄ< ,îv‡ª„cQû‹Õ}[�ã]ûÊwÏÊY1Ë:åm‘ï<3ë#WŽ=4ò ¿þUä©GäYM©6è�Ã��áî¹6òŸžùÍ_Ý9§qfä_¾žgqwþ+ëâ·¿üïÈC·ØÀ,Æ©°Ö/÷*CG ‰l·r®)w1 ‹–opÑ K³Œô‰ÇŸˆÌ ¯înýÆ �IîPª0îÞ�º­bø5_»(ò‚a‹üøwþ9£qnä­|½˜/hy¾·û;¾ùݯåYÜ+ŸùëV/…ú¡£ã–CúÄ \,I´nÝ‚J“lÉþi5i—m"‡w,ß»-}ú‘ÈG箌ÔÚH«·žùÅï\™©ÑFñ±SÞ¹÷ºîÎ1ÖjµƒómTëŪ,b]Ñ9þ•¹×]«¶neõ;ù‚ˆÇ–]ë¶-¨øjrz,à´{çGæßm·gãæo)fÛ#´Ü:ÿ‘ÛbhZn@«[ÿ¬ïÜÿÈý#·n½–Wß_Åÿ¦w×· *lsÑSuUS¾ÔF�ÏmÙ’< Ïš›%^¼pAäüçò¼ë¹†¥‘MÅó¸Á#FÄð€Æ¼wÑʼ}Î=ùùÉõOމ3*댇Ë=ÕÐúÌÁƒò ăêó ³²Rùæ'íoAqgÜ�?}°²8RáÉ<ÓþëÓxGÙo\Œ¹ç+r š�§ŸUÔ: SE•Àÿgï>ࣨó7ŽgÓH/„BoÒ;(ŠÄSì]Ïó<{ûÛïìØ{;OÅ~vÏîyvQDDE¬  Hï$$!}ÿÏw&‘�¤l’Mv7ùü^ò8™�úž��ÙÝùî € € € € € € €@+à “V´±YU@jˆînwùš<Îî~÷ÒkvÝŸ{¥òôy‹ÔUp°Uïp W(ÄšU›´í9Ì2Ä–ŒÅ Q�»¦µƒS.û�»ˆ�OÑÿ¯½Ôî=\Wm±;‚“›Î¨}Sö¼c¾ò»‚妿Tþ¼mef‹¸åulÇ¡Z—ñò”Õ]yjîn]ô±rú÷v¥0­)zd9o⾯»~®)æîÿ4‡õ±kÀ3}ž(›WXÑÊw *>ïÞÎ^á£|¦æÿ’„Î��Ûƒ8Þ…ÎVmÌ’XÍý’/Wžõ�U<ä$Ø«ëá7ݧ¼Â§¶XZsîG˜5ØŽ)ÿwÿÊ›ª¼äÌk”/.¶ãÎêwoVžxaå{�ÿUÙ·UExºk�FîÑ_™VCÑšw£Ïßÿäge•Z7ý]µEfV�‰PµwàþŠ´Ó î8ÐÚ¦ä‰ï¡‡'_óšrÌ)ß~Ïjñ?šù…òûÅ«•¥Ù•ÃGí®üÓ�“•G÷V¦9ç�³ìкŠRMuFÄ÷no�†ùqÇÖ¤²vrëüã’ì85άºö2ÏŒŠÙ9d~œíµÛb,Óã8!�Û²[ÙÚiZÁ[Ï¿E9Ýž¶jVÏ·çEw(ÏÝͪ½kx�Ô#Û[ůžøþ\C™Ý· È¶…ÓptÂ[dÕ�[í°VÙ¢’ÔÏ1¨ÒÃçÿ¶}Údí¤mçó®¸Ï�èô$j*©ìF;XjÚa­¼‡½Ë[÷íGÊ9¿Ùkxå³ÚžíÑñÉÊ´¶”½»YånV{;ãm›h`�óÛ[ÖÙ‘zÍÚuÊuë7(W.]£,«œ�º#¢íË�ãwUv޳£OÛ¶ö¾Øwý˜æ±eó·j / „c4@@@@@@@ Üô%¼û¼?×…ûʲü € Pƒ@TG=Ðkˆ]£QQalu*…k6)·:' áPal‹zÍβbÛÙ÷C‡YÅOLzœ’s/!½E¦Ú•­Ýœ©¨)±ëaëï.Ûžq]­æi¤]⯠cË‚ K”+79»PØVG¦Ø4‡k§ô$Û•¶5?{í‘øŽVÁ3&¹T�dwš¬yx=H«·Àà.N1T½ÇkÎl›ïlW|W^¡l{ÁÚµö¬° ”ú·Aa°ÖÕ¯{Põ.ôÕg1›?Ãc·¼ª\á5Rw9_Ýk5¯u4œÊ¡î/Ö��¼d¯´¥û_¢|uµMhÙë×*ïyo_å}Y=G垨Î0kž«&é5Ô~?¦SLšÒÖ¶––lǬácl¬²X;³­ñšQö+ñuLNƒÐÂHÀ¶i»Aö;1'¸y‘? o?|±æ—”v¯ÅÊ–ÔßžKYá»ó8+Ò„{�ÇNy{ﺷ¥3¯Æ…�9$v¬ݹqSj¹c{ jåžùÇYÊÍqߺØÛ˜¬Éöš×ùã”m Ò¯æI³sûξ¯�¿¨ÏºÍ¶GDt¬ßS¿|ËZ�´Ôççoâì†v©~/�Í5äZÓíA±i�´¶=ì°Fk&�ÀîAÍ´Ða3;þ¶ï7R9¢ƒ½ïKL´÷DçÄqѵ¾žDÙçciÙ=~Ï~êÒy²sWã¼<;2çØ;È¢hÛa:§Ú{̨ԡʱ/¤èVëÖ ô̘ € € € € € € €@èè ùð¾Ò't(Y@ÂYÀêÕ’¬vÐ-¶t ]"Š7oUŸ†Uƒ…³Fà—=:%[íî”p~êL±¡‘™Ý5êÀ.γީʊØfw=\¹Á¹²>Ó÷¦^uÏÓd•Î�V+.³»ïäæ;Æ•ýÂîÿžÄ,-s7»äׯ�d÷%ʶۖњD`Ïþv·{¡v©óTm’Ù4f¢QvÝwŸL{§YñnÓk ºj�eÃyâ p½ {�6:m;.l™÷–ò¹¥î9—Aù'åðdÿ?¥±!S†�¢¼ê«Tž~þ eŽS%öÊK«û²ŽVv ßb�(;;íÐÝÒŸæqªŠ³²9åòG‹a¯U/ýöãWʼ ;ó5°»2ìc‰=¨b›†ùÿJ×h¦ßd¯öç=µXé9ýEÝ÷þëte}Ž<“h®½v²£OÄ2§^9g©:Wlpïªkçrþ�숶mÃ*·â›Ô?¸—²c¸ßÈ�=È6fø·&؃Â%ðké|nÐÕJ‹Ð<1öÉén`‚LÂO�ð}Óàç 2 € € € € € € €@õv¹ @Z½@± ¶Z=±{µ² ›j†kU—»$µDwÕƒ}Ç´µAæ:Ïý�?¨sÁÒMJo«”õïÊz ¨›%–)ì­Û›Ý�'†3îí t@ 5Á®ú»“ÕÏZh¯Þ!×ÚØ“¾«S²R±låVW¼ÆJîëÝb£m/Ü£?Ç¢zÓ1B Øñbù³”[*N¼¬‚vT_;*Ù¾]¿fÇš�{¬�jƳ�¯¼O¨{iÁQÊ.a_&©• !Ð4…?iºs§Û¹_Åî˜ÚGÝ»±[#Rg#Z0Êí™9ç«!þÛÝvÔ¨¸wqÖþê¾æÑ›•Gô´£@½[”Ýá¾Ç`ç÷¦¹Sµû/.W–íÑOéß›父ð ¿Eÿ¬Ù¯7¥ è¦lÏ.d ´à 4ݼubÎ4©/ÛMÊËÄ@@@@@@@�ÐðïR¡Ð]~– @!P¶RSùy~®Ï´ìºàŒ^vg£ .0óq¡³E xÒµ:wÙ]™uï”ë"ì*þéŸY�ñÖý÷P¦ø]b\¾e­†ÿÍ÷¦ßñvïêŒv!1Ð,0i°U“„f…qç°ÑÖç&à^çÆÜò•zJŒëcõ–‰müÞë9}G Vs_�·QYâ3û訆/¢ÒÚkJÝ�RüÙÎ4 Šmú9ùvwÉð¿«³JM °í;«ËeáöCTêÎǪτþõ¯öo‚Åc’­W Üêu¿zð,åñSþ§\á–À§ŽS÷9�?¨æï/¨{qEmñuŸóè“Êk÷ë¢lܓԎDGí£Ü=˦ùâ:EÄê·_W~¶ê`å�ë®4+_õ™†üß[«•-k¢:&ŒÌRÖ=~åHü�€ 4Ó°åeB„”¯Û!µ9X@@@@@@@ ù¨0n>kæ„ €@@¬žlÛ§•§Ÿý¥rò}7*�ê—¬¬G-Ié ÿîýw+?ð©ŒLz’ú>ÖjSê15 MC Ü";Z%ñ±Ç R¾tçwÊ‚EO(ï}ñ¯Êqg VÖQ Uò‹†ùà?/+íÈÖ¬Be׃vUv�²¿iV m¢]û{Æ„Då�oçU;ñ˜vV£xr_{ îX­˜ØÅúû¾Â{’l¨CÆYíòD;ÈT6¯ý±`¾•.~ìÖ¸T>Ríÿ“�ûvûî5^§Âx‹•×£�èn˳ï[-KÀö¾n#&(û¦NSÎͱòÆyϼªœsÜ@åni¾{§zÔÒ õØÂYo+¿­¨’´�³v¦ìÍ $ ƒÖ¼ù¹Zü¸e²í^u6û}¦u3îSÞúÌ"¥{pKbç~g¸“’L…@kn�Òõšãì�¡<ö*;",sŸš©öz~úýÏ*o9¼—2ÎÿC„†®¹EvÝKsP7å›�.S¬~Sùè+ ”û�kó­ñ0âµ…ûöÕ+ßrª“õžIÝ=?R9Þ¯ k@�hö=(p‹Î”*ŒCeK° € € € € € € €@3 pÁ\3ƒ3;@#àÝò…&tßy)_™n¥Á¯ìó£rÞ-7+/>b¤²}›Ú.<ö.×0Óï>[yÖcNU¥ºÔz+ŽùÇß”cSj›‚ LC x2µ{Ÿs…òˆ—OV>µÌö©éW]¨¼«ÿÓÊKöì ´jÇ?4o¾züôŸ”×½n—ÖWT¨ ° •³²»€W3–úÒ„ÀÉ{%j2OϲçݺÜ?ð&ô²GÏ?Ê*tý©Ò�Ê´»Ÿ~ä÷ .·›?¿Üß ãöNq±ïµÉÞb«QÞjQ�vÙÁÉÚÃ�¨f .ö´Nr¨òŒIö+/ß½dG�œÙw)/ºv òÙSöö-Õ×ßl¶×ç~ó¸òú[?RÚÑK-Á~3ã¸?ï¥ìä»+Úc4Z”€·`¡ÖçÙóŽQ>™y¥òŸÿ°{¯L¯éO;–­šõ€ò‚SmïûÔ­ËwÞ7å|õ™˜Ån#Zó ­Ðü>¸åå_o{O¹º¢¶x”ºÏyø9å­GZí{‡ Q¯™­Á'�qŽrôKW~”cG’Onš¢|pŒ_.k¿œTu¯°£Ï¦y)§Ü8SYqôIÝEÝçž:AÙ¾êêCC  ‚µ5á*1i‚#À‹wpÜ™+ € € € € € € t�š.¸ ú‚± €„Ÿ@ùz»ºö¾Ûþ«üÕnŒUMó®ÿZ}Wú>’÷¥þzêz«þg¯ù+Ó~~VyÃ?ìð“››§ÜšŸ¯,*±£U?àÙ^ÃvýÝÊ£{G)«6;“L~²òÆK?PtýûÊ�ëÞPN9òhåò+íW—Ž×K™æ,ÝÒÙÏ«ûŸ×Y…ñû뜣�³í{Ù êó×a¶ä¼ ­‚¼5ÿ±¯L™Eëà½CëÞþ¬= € € € € € €´bφ\»:5© .ÝnÓ¦ú«k[±6«Ž Ð@�¢¢¢ŽY×heeVœ�`×À6¾•/Q9q”]‡ûôºÆOÏ�B¶þwÚ¿V>p°]\åj¯r»Êøû×ìŽw—]z§ò�Ån}‰:ëÓ¬rå(çá;ÏÙSÝ�9Œ×ǯ»iÓ&­ul¬�D&%%D {ÐŽËíµZ±ïŸ¾Xyâ¹Ï(çåø»O%8wí:å!»××�GõUVó“êKC@ê[ìÕ;2Ò^ÑSRRIâuJK.zÖ*R^ýb[#§ÜÑ»µ³Ú—×/²z¯´+•ƒ»pÌ=drssµ,ååVY•––˜å*ýQÓyp¿]”gN«¬ï Ĥ»]þ‘&óý {(«)¹²8÷Ûç”W�cU\�δ“ȪÇ;SMȰû‹Ço³}|cAÕÇíáΊ}Ï»Oyß•)ëºÿ±¡µR�¼<«P,)±ûÓ§§§F!{�í;ù?¿¦¼æ´3•S?Úqß©uåºéáý/¶ý©—ÿIÙ�w@µ‚ñ +Pà¼Ú'êîäñTóâî—Å–¿p‚rÔ1VC°�|ç�º§þšú©UŸ9°¶úyï¶Ÿ5Ì+—þUyÆ£³•w8Ô¨ç›S[¼Ë)VmüÔ­‡){Ç5Lã�æï–*àî;ùN•¼»¹ï‰ê¿¾!°áØW'ÆhYîçØî‘ÈýD.°ëWå3çÀNš©!€ € € € € € €„²@m…òr³l € `‘VU3ðð딯ìy´òÃÿÚý„žyüi嫟.SÖxY°sMýnÇž¥aÎ?Ó®kž<¢ƒ’ ‚…@k½»ìÀìÆï ßWùðÝvǯ_˜¥\¶ãî”�¥þ£¿@yéŧ(ÒN£4šKÀ-k¹ùh«T^²®TùÍ2« ¯–ä~;Íjݨ-¯mÇÒ6NÀ*±RÿYy÷c•‡¾öŒò±¬ZëÕ9«•ÎÙ\�SêUå@äT�;ò sæ)Ç+g“ÕÕ1«7 �&`ûNâNVÑxÛ›#•¾ð°ò~ç·^Þœëî;êQµ9gn#&Ÿ¤¾gŸkg÷-ާ$²ª5›€×kU’¡Ð<ñ;i1ޏÓî^Ükì=Ê[ï²#Ñóv¬ÝOPÿŒ(ϼèåyG�P¶ã{)КW tö æ]oæ†@S PaÜT²L@@@@@@qîaâˆÅC0�p¹‡qm­ò"-Ìæ•¿*]¾J¹!×*Rнm”Éé™ÊÎ;õUvψSr™hõhŠ{×kšq`»ÓyÞ*»§×¢ek•6Ûý#£’í«zôSöíluÉ\R/šŸ�½‡±ïL×åZ�ÊÁwnT®ÞbÏÞÐoQÎAè±S­¶xÏvœ¢!P»@“ÜøöY6ÿ£åvwÌ�Ë—(—.·ê®-ι\IŒÕu¥¤Ùï[téÕ˲-çrb ÕC Iîa\�ù7ñ ¥v‡æUK+—¯·£áæ\ûí�6ivæ–ÕÅj(ûtIUò{0B 5@ p÷0nÀÌ›uoñ&Íï×…v$Z¹Îö¦Ý­» åùb ÕC p÷0®ÇL�#À=Œ[̦dE@@@@@@@�РÂ8´¶Kƒ P­ÆÕ²Ð� ´¦ ã 23ë+ÐtÆ.™[[|ê#[ôçw+B÷~Æ© V\<õoiÊq}bÝ…'¨S UTשÀ4T …W7”…ñðS õTû Â`ÔK€ ãzq10 Âø ü‰ € € € € € € nµG¦‚ € €„ˆ@vZ”–ä¥óÚ*ÿþ\Žòͯí~¨¡ÓzfÙ[ÑÇN³û÷È´¥¥!€ € € €@°ìÀh € € € € € € €­P@—u{�Õö´Â•g•@@@�–*kïòîý«Ý!xD�å?ßÉSæn+W6‹tÞt>:^³¾êÐdeJ�U FDÛÝC+ÒC¡ŸaÐ@ v�îíìÕã´½kŒG@@@@ … PaÜÂ6(«ƒ € € € € € €ø+@…±¿R ‡ €€¿¥…6dþzËâ|KÁˆtª�2lþqi–®4 € € € €¸|bÈ3@@@@@@h¥ª0ö:«Î�íZé3€ÕF¤@Á&›Zþº@N“i!Ð�ò2;ÏyNæZwj'ËÈK € € € €´z*Œ[ýS@@@@@@h­ÜøµnyÖ@ °Û6Ûô¨-¬*S ¬€{wí-ËmªiÝ,Ý;[ @@@@Z©Æ­tóÚ € € € € € € €Æ<@hœ€[µ™·¶qSalšK ¬Øæ´uµejgK € € € €´b*Œ[ñÆgÕ@@@@@@@ u ¨ÂØÓºX{@'�¿¾qã36Á(γ¹–n³ŒŽ·¤!€ € € € €@« Â¸UnvV@@@@@@PE  € Ð@�òR±8¿�£b´’Mv'Ú5Ñ™ÊÎ)vX¯úË!^õ)X½\¹9­«²SJI�inøMS[¸x‹2yðeïĪsV¯†µÒuïË™?*×&öPî>Ú–<Ùwò^3_<÷KåÂütåÐÝ+;Ç*hõ(̱¡“ð´¨Ï\@@@@BH€ ãÚ,  € € € € € € МT7§6óBhYÅÁ\Ÿ’Ušû;ܦ|lI{åqW^¤<ºçö2Ûü…ÿSŸËoý@¹±ß!ʫϙ Ü)Á·\W=êÝ —LÓ8wL�¯Ì<ìbå­‡tS¶Ñ¿Æ5oÉZMà³ç^P~Ôóhåð�w¬06ùEÓ_V>´t¸òÒÑT‹¡þ-¸Ïáú//c € € € € €@À¨08)D@@@@@@ÂC€ ãðØN,% €@( x�{aÉ 5ÏŸßù�ò™…¶ íÆOVîÛc{m±þTKÜi/åIûþ¤¼ñ­×”WßS¦œrî$e¿ï:\¤G×ý²B¹¾ØîX\M‹·ªßñ_)ç¾óŽòíž•}j*1öÄéÑì�•mcå[~QÎúÆê¤ }gRbw\þÍ3¢lãbå'ÛéJšoQ´7W}¾ßX®Œ(³Šä¯g}ªÌ³™T6�ͦË��•ýÓ}G®€ÿK ¼@@@@håT·ò'«� € € € € € €­W@%;nQ•7­÷IÀš#€4P Ü©pmàÈ Í o×ÍyIyû+K•%�÷Vž{´ÝÁ·J ®þV‹LQ =ò å%¥÷+o~Ïîj|í=vô¿æü?)û&(ª¶ò-ú{Î3÷(YäOõ ùøí–5¶˜!zè‚;OWîåÔûz7ý îgÿý–ruM�ë¾Ô£ÏüÛ²æö›zïÙg-}Šl«¿Žºj¤²z”ï#toðúwoïM € € € €´*Œ[϶fM@@@@@@@�*ª0¦¶¸Š € ’Nmñ¼µl×>ø¹rmÂå©g¨’\ëÑ<2UÃŒ<æLåß‹ÿ¥¼eƛʛIVÞpæ8egßÛ;µ¹»�òõXl÷¸ýeÚÊ>±O>çxå™Õϱèg«ò½î©ï”©{«¼p¯ŽÊh��›á³œ‘�ǫϵ·ŽR–ù–¹.TŸ§nx^9·Ó~Ê)gŒVfùÎлQ}>zðå +ú+O½âpåßji�]—Hm±h € € € € €@ÍT×lÃ# € € € € € € €@‹ˆö-éiÑkÊÊ!€ žÞ|-÷âéVq{Û3_)×&XMí‰� Ü#Îî7¼©(K™aE¼Õ4ï¶Uê;ÿÇeöä¿(O\?Uùï/_PÞúJ;å�ÇôU¦TTñƨ;=»³¥þ©þxÂ.Ê·>±ºäÏ~°å9ò[†$ýû½y·ªsö»‹”‘핇î1BÙ§›MmÇæ‰µúæ,}›wÛ:ý™ä,IdœÝƒ¹C›Z¶ïEnåöGzœ;P¼º3ÚÛ0�ª,�zÐ@@@@@êðýðµŽAy@@@@@@@ % DGxÝcß¶¤d]@ooÑ&­À÷_ý¤\—4HyòÅV[¼óÒÇ”'=ñ‹rÐÉW*¯Ú#CYõZ0;Êoýþåíÿš«ŒÞóLå}§Ø}ˆ—]oSøüçŸ•Ë ¬Âx`¢ _Zb÷K.�pÏÔÑq¤b¿Áï*ïûhºrÖ¤^ʽ3¶Ÿ?”­ž£>¯}nõlj#�PîÑIQ\bwA®l¶tÑ1QJw9Ë óÔ�³­´r͸­º÷<ó4娘4ëŸãTQ[W•Öû€“ô÷e%VaܡЦĖ'2Î �Óâm.4@@@@@�Úª~ª\û°<Š € € € € € € Ђ¢·Wµ µbU@h1ž¸.Z—Ï8GÙk«Ý©w`§8¥7i”rPÌBåüwg+ïr€²O¬¢²y7«kîÇó•ùžvÊÃÆõQ¦´µû Ÿxñß•GgvU¶wÇ*[ªîg.¼KùêŸ cý½½ý Î©?ßr{Ϫ]sŸÐß§:Yå�¸=õç ¥eÓß<÷)å�|§,Ö¿Æ6«*ÞéØË•·íŸ­¤Ê¸±¢Œ� € € € €-]€ ã–¾…Y?@@@@@@@ �è5Æ5ØÐ@��ˆLé¦e”²}�<í†ë�ƒ÷|Gùõ+ߘ?^yáhÈ=º,š©îW¿µÚÝØû('í´½9¥“ÕûLR£¥©Ï�Q&—ÔTa¬Uàœ£XðžÍwþ6[¶}ªÌ®ýR´¨Ž&³âÔÃþßuŒò„c­î¹\ÿ¶·Bu.žùžræêtå.“míúÛ퉫i¥«¾Tßÿ|¼¢šÇè… € € € € P³@íëÖ<� € € € € € € €„¹@´J„œU¨(ö óÕañ@h=ñZÕÁûî§1ëYå'Ï¿¥Ü£ÿ1Ê‘Q‹•/=9]¹2¢ƒòˆCížÇj¿T,2CÃŒØ×j‘Gè_-­|¥ô̵ æùe=•{Nž¤TÏ›'v©±ꮨڼ[õ÷'K¦)g®³»/�Ük‚rRey²º}[Ñ‚uúó%*Œ}QèF@@@@ü¨ýcc?&À  € € € € € € €á)í­¸Ëax.>K� €@ëˆÊ²{Ÿöço•=ú©ò¾Ç­÷ˆdë~m…]ÖûпXŸ>qʺ~QÄî#¼ô­»”7¼»QYõ¾Âêñ{+SWÁV{Ü[þ‰ò¦óç)·ß!YìÐbGÛ’Üó—J«�¦!€ € € € €[€ ã`oæ� € € € € € €I ÚÃ=ŒƒDÏl@„€Ý4¸ÃnG*O[ð‹ò®9¯)vj‰ãú¦îs&wWú_Ñ›˜mÀ»�-PVT—;•Ä‘v�YE�²s�á…ŸZUñ¢ÂLåàÑ}•™Î¥h%…6d‚Õ4Gë_e‹î’¬N®V«ôàÿ € € € € €@ðøÌ6øÛ€%@@@@@@@‚" ²Ÿºîf”åb¦ € à¿@™WÃ&¤§*£=¹Ê¯ß“ìʰÒb{4"ÖŸ#¾ ß~ÄþÊ“FØHºO±þ}óìÝÊûé¥<þT«fŸ¹Fùꯔ‹6ôSxì!Ê̯_QÞþÄRe·ÎTž4Æê�k¿·± !€ € € € €E€ ã °3S@@@@@@@ øÑ·0þ’° € P/»¯pÞòùÊWŸ}Ñòû­Ê˜Nƒ”£c–(¿øòeåe«íÞÆùËAÊ}µSÚ½…ën6ýM_ýW9õýUÊm£öQöÏ´»&WÓ<Ö¿]ï�Ê~iŸ*ßxà^eIéÙÊsƵW¢Î¸TÓYòÞãÊǿަŒrî¬\ž»RÝEÎý‘S“mýü©§Ö`4@@@@@ • PaÜÊŸ¬> € € € € € €´^ÝÃØ¹¯!u8­÷9Àš#€„‘@™–u명ÊO¦¿§|qÚbå&¯ÕîvÝý8å…ÞUÙ#Òj‚?|îIåÃÏS>vÛåÛC÷PºÏX宲•):øc³ÚâÍß¿¡¼ù«^—µ»òŠvVfº›Ù Õ´¨t«0>ñ¢“•¥·=ª|ç‘•ñ ç)Ož¦¬¡BY�øÓlq;v´»5¯zå'eA¤õIH²)›p€òøQéJ®‰ @@@@¨S€OSë$b@@@@@@@ e D»õÅ-såX+@Â[ÀŽÒëU~ûÝÊ9³?W~òÓFe‘×îÒ›ÔÝj…O=f²rÒÀ¶Ê6úg­“þM8ùïÊÁcg)ÿóü[Êç œ:šòѶݕcÆ SŽÚÙª‡Çï”¬ÜøÅ”WO�­\ÓΦÁŇ+‡z6([iwö”[÷æb…ŠymI|ïÝvˆúœtÞÑÊ�7<§|÷¡ç•}®?M9¡¢HY� lñƒ�Ò˜ÿ~Ø’† € € € € Ð*Œ£Ç¸ € € € € € € €@ DGx|+‚ÂxMXt@š[ ²©¯»²c´wËwÊçŸzW¹¤,NÙièåA“vSŽØ^™Xã‚ÄèѬ�{)Ï»Öj…�øá+å´Vs<ý«_•³>³»ÿŽ˜hÃD9÷Î2IÝ'–©ôŒµy�Í´û—­þ^9õÊ•?X™±š-aÚ®=”Ù;,Cl¶ÝMù¬Ó·)û RîÚn‡�Ô—D΃ˆÏ¬@@@@ >· �íÀR € € € € € € €Í.àÙ�ku?I±V!ØÖ¦Må];]¦† ÐúŠŠŠšh¥ËÊÊ4å„„„†L¿0×ÆÚºª!ãÖc;RÿúíRei§ÞÊžmíÛøk¾J œ{çXÕr÷줺§éݪa–Ì_¢\ﵚã6Iv×äî=:*Ó­˜9€­DÓZ»Èîܼtk¼²ëÀ>ÊN¶°´À DÅÚ´ÚölÀ7mÚ¤±bcm IIöü¡!€€ÿ[¶lÑÀ‘Î/U¤¤¤ø?"C"€€rsí¬¼¼\™–f¿•BCÿòòò4pI‰�o§§§û?"C"€€ ”………Jwòð»M<3ð[ÀÝwòóó߃Ü÷D~O€hÕîçØî‘ÈýD.°�ÿ´9°ËÃÔ@@@@@@@šIÀʃh € Ð�ØÕ%×{NV_Û}ðÀz�W×Ñ í4HOÿW“¬á{ fY×Äý¸,·ï3Ô²ÑÓb5 4Ós¸Æùó € € € €]€ ã o@@@@@@Ž@t„783f® €„½@¤óC±‰¶"Åvÿa&—f Ìâ"€ € € € €@ ¨0´(ÓC@@@@@@ÂD Úë “%e1@M�ÄL[.*ŒCsë°T5 Ä&Ù#Ñv‡l € € € €´f*Œ[óÖgÝ@@@@@@@ U èÆ”·êg+� ÐX�è8›BR{˼µ–4BY *Ö–.9;”—‘eC@@@@�f Â¸Ù¨™ € € € € € € ZÑž¯³DÔ‡Ö†ai@ÂL >}ûSg¼Ý‚®Pp«áS;Ù2EF…Ò’±, € € € € 4*ŒƒFÏŒ@@@@@@@�à DwöÌ@�%àÖÇÄÛJ寷,η¤!,·’8!Ãæ—féázAc !€ € € € €€+À'†<@@@@@@@�V*íÞÁ¸•®=«� €@STÜ)¶‹M»¼Ô²¸ÀÒët——[7 �¦ð8�t~B&ª�ýá>=îM1K¦‰ € € € €á-@…qxo?–@@@@@@h°÷0n0#"€ à‡€[ë—âÇ  ‚ € € € € €@s PaÜÜâÌ@@@@@@¾0‘ Áb € € € € € € €Í-ÀÆÍ-Îü@@@@@@@�ˆö„È‚° € € € € € € €Í+@…qóz37@@@@@@@ d¢½Ô‡ÌÖ`A@@@@@@@�f Â¸±™ € € € € € € J|aJ[ƒeA@@@@@@šQ€/Œ››Y!€ € € € € € €¡$ /Œ½Î¡´P,  € € € € € € €@Ó PaÜôÆÌ@@@@@@I�èˆOH. … € € € € € € дT7­/SG@@@@@@BV€{‡ì¦aÁ@@@@@@@�¦ Â¸i}™: € € € € € € ²|a²›†C@@@@@@šV€/Œ›Ö—©#€ € € € € € €!+ÀÆ!»iX0@@@@@@@ iøÂ¸i}™: € € € € € € ²|a²›†C@@@@@@šV€/Œ›Ö—©#€ € € € € € €!+ÀÆ!»iX0@@@@@@@ iøÂ¸i}™: € € € € € € ²|a²›†C@@@@@@šV€/Œ›Ö—©#€ € € € € € €!+á Ù…cÁ@@@@@@@šN€ 㦳eÊ € € € € € € €@H è c¯ó_H/% ‡ € € € € € € p*ŒNÊ@@@@@@@�ðà ãðØN,% € € € € € € p¾08)D@@@@@@ÂC€/ŒÃc;±” € € € € € € €@ÀøÂ8à¤L@@@@@@¾0�íÄR"€ € € € € € €à 〓2A@@@@@@@ <øÂ8<¶K‰ € € € € € €\€/ŒNÊ@@@@@@@�ðà ãðØN,% € € € € € € p¾08)D@@@@@@ÂC€/ŒÃc;±” € € € € € € €@ÀøÂ8à¤L@@@@@@�è¦^ÌÂÂBÍbóæÍÊòòr¥×ëUFFÚwÕ�GéÛ|û¸Cú>J7 €@8 ÔþÚî¾Ú»ÇwH÷‘žž®•�‹‹ ÇUf™@@@@@ *ŒÃb3±� € € € € € € €@àš¼ÂØ­ ËÎÎü²3E@@@@@@@�FPaÜÃ!кÜ}§¼¼¼‰8ž5,“E@@@@@@B]€‚ªPßB, €@“ ¸Wfåææ6é\˜8-OÀ÷ªÆ¦»¶±å¹±F¸%%%êp+T¼^/, P/·6Å­�¬×ˆ Œð­î¢¶˜§õpÏßÜt÷ ö£ú2|kp?Iضm›Üê|ö Öü|`Ý&à~ ×°Ñk‹ ãZpx@@@@@@hÉT·ä­Ëº!€Ô)ЦM “��Pç� €¾›6mҟ˜èûÝ P§À–-[4Lt´½KJJªsx@_÷·aÜz”ääd߇èF�:òòò4Œ[£Ÿ’’¢nª»êDc~(((P·[aìîAÜÃøw:¨SÀ­-މ‰Ñ�îY÷0®�ø]À­Ñw-æ÷žì Â8€˜L @@@@@@'*ŒÃik±¬ €p¯däzÆ€Ã2Á/àî5îÕôìA-~s³‚p÷·¢‹=(à¼L°Å ¸{�{ï.ö ¿¹YÁ€ øîAîo]|L�,àîAîYœ»Q£ß‚77«pw¯që#ÝnjôŽÌ[¼€û+M±šT7…*ÓD@@@@@@Â@ Ú É""€ € € € € € €^€ ãÀ›2E@@@@@@@ ,¢=a±˜,$ € € € € € € €@ ¨0´(ÓC@@@@@@ÂD :‚›‡É¦b1@@@@@@@�À PaXO¦† € € € € € €„�@tDw1›­Å‚"€ € € € € € € Â8€˜L @@@@@@'�hoÅMŒ©3§ÍƲ"€ € € € € € €� Â¸ñ†L@@@@@@K¾0ËÍÆB#€ € € € € € €�à ãÆ2@@@@@@@ ,øÂ8,7 � € € € € € €4^€/ŒoÈ@@@@@@@�°à ã°Ül,4 € € € € € € Ðx¾0n¼!S@@@@@@@ÂR Ú–‹ÍB#€ € € € € € €4V€ ãÆ 2> € € € € € € ¦Ñ”‡é¦c±@@@@@@@�Æ PaÜ8?ÆF@@@@@@ÂV :l—œG dʵd¾™®üz['åà!ý•(ç @@@@@@ „¨0¡�Á¢ € € € € € € €Í)íõ6çì˜Wsäääh6©©©Í13æ±£@é¯ê7ãñ©ÊgV�Ržÿ@?e ¯0öh—~òžòëõVcݰ™9\#î»{Oeè”dçææjyRRR¶RŒ… € € € € €„¬Æ!»iX0@@@@@@@ i¢=ÜVµi…›uêŸ~ú©æwÏ=÷(¯¹æå€”Áh%šéÆŸ>SΘõ•òçÕÛ”ñÙV9ÚoøîÊñ#ìþ¾5V‘–mÑ£‹f¾«œ6w‰rkR7åÀac•»�í­L‹RTmeV]½tîÇÊ�¿øQ¹b«Ý¨;«{_å�]Ç+G÷°:Ѫ£Z¡ýÖŸ¦)ß™¿QYs…¬M­ûøÃ”c;îx½…3�o¬ÊöÝ_m1ýºX._ œ¿\QŸæ±elÛ}�²kª¿;jyÞ¯þó÷ÞW~öÓeLg{ Ûyœr—™ÊXý«¾•©wî¯_*gÏûNù㢕ÊÂä®ÊA»ì­Ük„­Q⎫Q¨þËg=§|òó"eÃZ›±í4ân…qÃ&б~øáMÏÝ›.¼ðBu�kÏ@þ Øë@Ášï•³gØëÒì¯íuiéªMÊÂXûˆöΫâ QcÔ=vœå€¬8¥¿û¼­¦k¾Õ,Jˆôòæ¯Ó’üº6O™œ­ìš¯¬É¹x‹½ú­ÜT¬ŒI·£Uçôš_;õp ­¤ÀŽJù6™ˆØDÛâ 1ÖMóO XÏd;š®_¤üj¶�YÍY`ç!¿-·ùÚÛ„ií:*{ª¾ó®Ê][Ÿ„jŽ�êö-X{PØÃy‚µù³ÚÅhõ‚Ï•‹6ÙrÚ^§æ±³ô^;ÛïÍt©ñM‚ ^-X{Pù¶Í‚ZŸcg摉ÊÌdBõ{î”mµWþofÍPΜû�ò§_V+·”ÚYDFûÎÊ^Cì7¥Æîbï¶vîÓVÙ0åâÕöžñó…v–h{EÛ�ÝÄv²#Ô.;¥)k:ÛiøªÓöã²mvæ³Á9Vff$ª;lŒeÛlÉWç*ã:¶W&…Í¢kaC´5çT3�q6/µýwΧö ÕÜï—*—¯´O~J’m[w麓rØ.»+ÇíÜ_Ù¡eœÒñ¬Ö¶ çÖÔ{PùÆÅóéwk•e§b�õ²—ÑÌ�v|˜iŸp†Yc ³ öÇÅmê=è�óûÃß%vF÷󳕟iÇ E¿Ù¾¶¥¸�2-Ë>eê=d¤rôØ�•ý2­s�³iVMߨƒšÞ¸‰æÀ)pÁ2Y@@@@@@@ Ô¬\’ÖÜÚâÛo¿]ëÒ·o_e�=‚³^N�ï�¯ß£¹ßöÔ<妻F&9ͲèË9ÊßxM9íˆ+•SެLñ½„¦Ì®ôüü�Ë•·~°Fé�OW¦E|¡üìýW”oìs‰ò¦3­Ö3ùLÍ[ð‹º?xàåC3m¬Ò»¢9=Áªf¿rjŽß~õ-uïû�”§�±«ì+¯p³k¸7ÿd•Áÿyn‘ÒÆ©¶ylš Q®ubâl«E9òÓþ§Î·÷»Lyãév}ºïVÓß¿·X{ôôÛÎTŽNþ½o�Þ�6Ç{®xBiú¡Ôºwï®ÅéÚµ«òÖ[oU^qÅÊQ£liÔ$P²þ+=ôâ]S”×=0C¹(Çîó]{KÈÞMÕÍÊ«O²îŽÎ.XûX¾�k¾¾ËšÝ广iÁ¾ýf¹2ºG’²K�Æöê]´îgå7ßÛo]¤ °ãE'§Â¸¦—= °C³#˦…öúöÙ¯ö`·]÷WŽhϵz¦Q{ Ö3¹x½]ùûæÃ¶^{ûÊ~ì¹ ©rÀvfrËug+'÷µ*É–´¥ƒ±‰°ææ-ÕcE…vöRê±ÊĸºÏ”jž\K{$X{�ÿŽÅK^ÒÀÿ˜|šò™>ÇÇì¿©ÏËóU¶¤ ã`íA%ë’äœ/×*ãû8ÀÞUÕçX¦Á[]ó®Ô:ö´�ù_uãcÊË|ž¥5y$ôÐ#“θFyóåÇ)Gdøÿºdç ›çÞ¯<æ�‡•«õ¯áÍŽJ»Ýkg 3œ cÿ—£áóԘŶÔ_8W¹Ü›­5q´²K\cžq%šÂ¦_í¬lu¾óþZ]õožD[ž�º;ݦœÿ›�½ÏþÆ>‹Hî·»r÷~¶¿Dé­>Á؃ª_¾¢5ö9ÆËÿ´wdWÜû®²®]9AÃdŒ9V9åúË•'Oì©LlÌSXã§ñ¬Ž{ãçÚœ{PùÒ×µÀ§ì™r‘ºú¯�¯ùôe¸U³Õk‡Æ͹U·ÆÅê¹æó§•7]v�ò±�V(kß½ÜOÿrµ�y^ý·]•Ù ùy;�:�=(t¶EC–¤%}–Õ�õg@@@@@@@ Õ D{í+Z ìX[ìÞo5>>>(kµmÑ›šïÏ~­ŒŽòΓ÷VöNµksK6ZíÎs7\«|åÕ•o޹[y\÷â{:æ|ùœòÁìZøv{_¬¼þL«´kaw üì¡«”·O³qŸ=@yÎh[Óߦ=¢|ì“"å°­Žö¬É•±eÊÜ…vÝÜmW=¥|ÿÁ•c�¡ás±ha~Žúx=vUé^çݦ<ªïŽ×ÛÅ¥ñnQ³º~oÞBu.~Ãê!^Zb×aô<è\å_G¥+}/H-_öžúÜñïÏ”Q»Ÿ¢¼`be5×n¸÷0îºã2hðªÍ»MÿøÚTå«K¬Îfô™w(/Ü·›2&w¾ò™«¯W¾öèãÊO†ÚÕ²{gºó4ó¢%æs÷ÔO”[ºþIyñVîÒÕêð¼9vM÷ô'_UnÞ­�²Ž[*{âl˜ŒvÊÌ:Õ ºG—UbÅú2Yï�h ö|¸öZ{Æ^u•=÷nºé¦ß»‡®n•Vñ¶þs{uºðô+•Ï,°W•ÊfÏ¥Œ>C•c‡vVF®µ;Ísî¾Ú¹à°`õ,õyø¬”_-|Bùòmö{Ýbµ´`Í·–Eâ! ¬g²sð§h‰/>ÍŽ�Ïþà{°í¹ ÙÝ•#FØyE§6¶_ÿ<×öÖ¯ÜÊHçNÕ?¼hãó…�ÿÜüÒÃÊÿ™¦ Ƀ›–+Ô›wób-âÜŸ¬Ò+º}_åðžæYqî’ÿ‹ºgOÿN¹µÓXåþ£²•~œ3i¨–Ú‚µÕӳĶÝk7Ú9Õ«¾µÅõœ ƒû%àóVßãáÕ¨n³¢Ó4Ð�眩¼ñu{ªr<È >£ÆRf–Zò·sì5ÑF÷4ΞÛïßeãÎÿz©òùçíy¾W–¿¯Lù¹öŠW¦aÚbÛkÁ{vOT®XdÕÆ —nQvtêÚýUоÍ[¢¿rVØ»ÑEë­»a-2ÓŽæÝ»9ÆÕì Ö+±Ûeÿ)¿]4_¹8{eßD[—¹oÏU®¬Çæ±i¦ôÛK¹wÿTe5³Uß–Õ‚»UZzÕQðóKÊKŽ;Myß¼?¾#KífŸi ÔC™œ¿Dùõ×¶¿¯p~WfãœÇÔ}Þ!öÙÈçw<¯œz†½ëO ³Mh‹Ë³ZaÔBc (XjM.5,ïÞ|{�w‹½þÌùÖŽ5vÌ Dó$u×dF ë¢L³×®†¯°÷ û>bÙÿ.SuÂÝʹ;É1Qyð„¡ÊìØ|åŠ/ßW¾>ÓÞÏnt> |èŒýÕ=ñsÊ—o²îÎU~T=¨5ËäÝ,‘g|ª\܈ߡ©ŽÕÎ[³Gî£Õ1Œ7Cu«æW¿j¾¥òk<B@@@@@@s�è0_þV½ø¡V[ìnŒøþG«cÊ-;+˻ە›Y>—bÄdØu»ûO¦|ã_vÝîì+•G÷題*ߤüꃙÊÍ1ƒ•g=NÙ¡¢øÔ®YÞåÈÔƒ>¶J ™|©üóÎ{)»9÷¼¹Ožº;öí¤¬¼Y’=ÉSúXÕì�»¾ üvÆgʯ—ž¢1Ø]8»T¸ o«Ò™©ìÜݦЩ“?WB;wœúúi ÷³?*Ë{«<ëø=•}*BÝn+mó�:Ú8WÇd[ÅÌÐa¦äÏœÜ)ì˜Þ‚ïÕsúû«”ž®V;©›2Þ½ $Í®`:ì¨]•ïÜfëþÎl3ßó »Ö,Òk—<ÍûïkÊÅý”']|ªr|Ÿ‡t[Îýηë¤üj^»ZjýÊåÊå¹u_ÌæÝdWÓØ¥À!ÚíJy·ÎøÊ+¯T÷�7Þ¨œ2eŠrÈ{VÓZ·@‰VõŒ[•'ýùfå»nÉpB¶º÷:åjå%§ªÜc`–²ò…Á^yòW-P¾û� sÑvÏÔeNµâ¼Gβ>Cú+Ÿ=ÉöÁ6ú÷Ǭùþq9ø�Æ ó™ìÝ2W ÿÐE¶VÖ'¨{ÐÑW(¯ú¿#•FõVf´Ù~DómPŸ§ÿ[yÝE×*_øÉ*Ì ~±Š–)ÿ7P9â-;Fì–¾},ýIóS 4ßÎ ×®Y­ŒMìõ‡±<±ö[&îkiNq±ºKœ³ˆ¨VŠÌ=蛦Ö?Kõèoÿ³£ä•/ü¢ô­Ý¬uDl€€íÎnQ‘T׌hNÛ~ùŸrÊ '+§ÎrÞ›Dر Ç�ç)¯¹èoÊwµcAzÌöšÒÜeê3ïÿR^~‘ýÆÌŒuö¼^7ãvåWÚ{„iØ»×.u¼Ù+×0ù9k•EúgÍ™û)6�û�´ùÖ1å÷fKئK'e}Æú}ôwØÜÒ»÷Tf,±óÛ�¿XÕÔš^;+;Uw"«þõh‘xÀî#•�ý˜š·À¶ÎŸ.Tæê_u­$ÏŽæóìÕÉmqé)êˆÚlÛ!g­½k^×ÎÞ§v°³úrÛP*·­¼q½½�.‰±á33•ÚÅ6·uNÝyI©MÙÝ·?oÔ«EµP؃¶ƒ–®xK\Q¥¶Øö¦n:WyãU§(÷eÏÒôŠO™lù ×Û'93_¼KyÕÿQ~m{ÐNýl»'…ÕÆ ³ºÜö£ï¦ÏU.+vŸïêlp³�±Òú�WîÚÓö¬°âoÀZsŠì>YK<õ¿#”e�Út…šÂ�Ïÿ]yùã‹”öŠ=á’;•« —Öü{�·$_8›6Ú~TÔ¨­°Ý8²Ìj»íó¦–ß‚¹ùêýlÇŽœñ�²¢¶8u´ºÏºgªòêcìì%Ë÷ìÅù¥Òæ|TW¥�…„OkÞ=ȶ~™s®UZfŸ¤g¥*Ý�m¼%ö ÑÆ�–åñéÊÌTgÚï߬Ûbgz1)í”mÜ38›ZÉV{°1ßÎß*ÎúÔÕúš‰i € € € € € € €­P ¼.Sh…¨úUÍÚâÊeµ'U»�¬j¶ºfW&&Û‘ºw­®¤.°+ÑÜæ-\¢Ž ¬R$²ópe¿Šûìº�[FföUëh×:|»à[åâm{*G'Ø4{ö³¬¦yì*’äT»Þ$Â¹Š§ È½Ú7F=ÑæÞ¹Êä¬RïÁÊ~1+¿Ÿo³Üt€Uglý^9{®]%ÝoåèN�~Y(þZÓyüÒs,õ¯>Í÷r«úŒ×Ã&''k6×]w�òŠ+®P^ýõJ÷®áš<­µ Ø^eûNŒ»÷¥î¢îs§>¬¼ö˜AÊ´j.вA;ÚkÝáWÛ¾’u˜òÀ«g*s V+ß¹óQå̃oSî“as©Ú‚5ߪK‚9wm´ë+›×ç>Žn?·�ï0¿«oE5ˆÓÏ�Z•)˜<·ƒ¬küÿƒùLö¤�Ó \ðÀ ʇڞ˜1ÅöÜ›þbW·³Ó„jš§�]‹:`»ŽþÁ4;£X»¿>²Ë‚#rfÛ•Åÿþð宇wRVó ¾!Û‚¼Ù~Y\¸MéuªJâìü­Ê+`´õ‰wêü¼ÛìÆ=›tÎóôWkkÁ܃ü·.]agË·\ù¬r±m´ˆŒIvÔÛí×w•¯/rzYïðoAÞƒ¶z+.Œ·gHTT˜½m_�&ïrö H;‹‹v‘²Ô=é;›zÙÊ^‰U^�ÔÇmÑ)ÝÔ1öø[”O§Ú{Ãý�ù§rA�=Ÿ½x‡òÙ“÷U^2&QYýTô€S”Ÿ³F]%ö§Z¼þõ3A9iR_¥{‚©Žož;êuËúA¹i“9lÍsjœÚ4~ l m¬Z4±òçzÔ]SóFXM[Í¿\qßb{¶ô9á^å«÷ÿM9°šÏylùã2('�ý€rð{_ÿdÎ!Êó÷ê ´W‡ðhÁzV›¡Ç9ÊD5~Gw^)#m’­¤ÙªFé™iŸNØÇ²1­èç§5úS®P8¿�‘uà5ê¾ó\{å ŸŸ[ Ι9TJûbI«¿@0÷ Š¥õæªcö·*ßtkЩ°Ÿxå}êsË ö©Bòޝi{çš=ödåoR.ÝÏŽ_Ó7.S¾úÏ•gt±r¤ -8{PML{u kŸ¯f9çóÞ-?ªûÃ�*K:Ú§²c‡Øg8k¾T¼5Û^¯RzŒPŽíig çL0ç§Õ=ãG«ûoÍ�÷�­yë³î € € € € € € ЪÂçR¹V½™¶¯|h×o_Κ»ìÊë «—+K"¬l§kv†Ò½Ô¦|Ã*uÿæÜõ$º½õOÝñ’†ÈõÏhoO]ïòß”«6Ø4#ºÖz)c¹]5¼f…]ãì�²«ž³3ìŠãŠK|œ ãü­ÎtÊìÞQŸ=s»ò“5”eé]•}[½àĽíÊ N îx¶pIÝÆ(÷ck4tÒYÊ!sÎQþã¶<¥]]SKûð^=xɇÕÙù8=pǽÇ({׸r¶Ì9k캘­^¨W;«±ÞqÇŽLm«þíœé”üºRÝë�ÕM[mUÝ?+"{Ùš¦®Sþü“]‰³xµ=�Ò©—²ÿ€žÊ¶ÆV]sj)ÊÊ�5Žé£!&Ÿz ²…Uu£Töóæ~£Î—û@iW‡vKM5a·¶øòË/W·[aìöéׯ_h/>K×D¶Ïµoµ†�½”®|rååÙ‡õVÖþ ÀšsW¶q§] Î£±j†Gœ×«‚__Q÷û__¡œ8Ñ~u âUK]Ö‚5_wî!™Î=Ô—|2M ·`£ó2·Ãb–ýò©úýï—¨¡GÎ�ê‘×íE±¢yÒ¨kï=­â'¥ê&©Ä¿ÿ{­2µ¨À®^Ì˳£F^ÞVåÖ­NæZæ'Ø+êøQ�•5½ë¡0oÁ}&Û&L~ºò¡YG(“:Y5‰ÅKÊÆMs¬ò”}ïQ~ô¢CuOsýûàÓï”9‡ÙYGØ\Y2{PQa¡Ü¼NmvÂŽÆž=šäÔ y·Ø¾Sà°¥ÙS©¶àîA~€—­Ò@ïÜfDz'�»}G$ØÕÜg\x²2þÜw•¯ë_ h;%mü^l3æ-W–ìè--R¿rçW�rÎR÷{Kª?hyâ{èÑ1ãí¸–Vý z¤%·6Ý&kõ®}öye‡Wìüáð³&);ÛÖ:› Ôi¿³•þéi副n´qr¾Q¼4Ãjmϳ³²Æï6=š·Å¶¡½_µfÇüNöÎ7ØÄÞß®¶gÚü_í̤Žw¸Îã¥m4drŠÉl^4W9[ÿji‘ö^µÏ({fDÕ4œ�5ää(·Ø!¢®¶ÍTKk\\sMè2\¹[[›²ï€e›VŸ/pŽéìw¹ÚÛ U¶RÛR%î1¶ŽU>åv@rßGEÚ'­¡yr¶^îg‰zÊ£¶Ç¹ûQ 3Ô}Ïí'*««-Vï?4ÛšÙ{] ¼ô�„ÇŸAzV;ïdîý'!Yu6­þÁÞƒê¿Ä¿�Qd¯–/\mŸŒ½¶Ìö¼„¬ƒ•×Üt’rH ¿Ï¡‡B²i I‹ðZ¨ ïAÛì]ÿ'ÿýMYq—µ·ºÿz¸½ß©¦¶X}·7{Ö¥Œ´ÏNÝïNåôgìÜ#燷”Ÿ/>_9rP•³ õ Õb{�s>æ|Hm'—¶|UÏ÷œD5­åüµšU§ € € € € € € кÂå"…Ö½•œµß¼y³þë­ö›øn»ôR»ê1>>¾²G8ü¿ø-åìK•å±Î/Èn§n÷Ê…²mV#’ë\«ëI²Ú‘ê®Â¶~ñîuj^»¾8Ï.®£•­ýBCÌøÆ®Žê:N9¢Êm~íêûmùÎŒËíZž%¿e)ûeÚ¼Ö-š©|uö4åÛ£¼æjËþN]KtZ?upÑ•J]Á¬ßÎq:£:êNþ‹rtÆö+3Ê–OWŸûŸµå‰k�ž¹g'åö!ô‡Ûb³õ÷—÷+{Uÿÿmy¹zÀ½Ï_Rb χhëŸk×ÓxóÍy[™­oqŽÝ)Á-®ŽøþeußpÎ|å·Nݶ#¢¿œ«„ú¦®K¯´eVÍíXꦯ µb�ÃÆ�WŽñ£Â¸|½Õ1ôÄÊ5ú-==]‹yúé§+§L™¢¼ï¾û”÷Þ{¯ÒíM¥Ð›]³–9Öž7hõ#³Fj¼‰{%)yÚ¹6±`­º?ún™²Ì©0®î°¬ùj¡B°™F|Z;efdåk˜^÷Šìurc®ó"g¿Ð.¹¶zݲ;ænÊ·WõèÛßÓ·Û{ÿŸ½û€�¢Îß8žMï…@HBè¤ÛTìåìílËYPÏzêÙõlœÝ³÷z§žÞÙ;*vQQ¥ˆô^BBBz²ÿç;›È’°Iv³»Éç÷zñ0Ù���yÏþffwç»c{({¦Æ›»Ú¶lµå'6'K¬:燥V�ã©!ÞTdk¹Ò ™j.{†¸H›çrgQœMxCc¶“Û‚ûJ¶š’ÎyÙ-±tözFuÒc� cÏ™Å+Öë–BgÝ…M…±óºv²~WZb¯|·+I™’´MosÙQMJŠ­5×ëÝ›œ£¸Ü4Ïyú¡¶àö ÆÀm·æýÛ•W=þ‹Òse»¼#/Õðé»ÚþîñrO�Ñ`;h¶Ú´¹ì=Dt´í¡¶ìóê ««=‡æöwd”�íÝG¬¯•9o¥ª"íH¾±Ý‘îê -6o/-éùç·hq£{éa;ï=J™öß•…N�É’éöÊ_QmÆ}·Ù˜éFknë›òíÈ¡®ÙQJVFŠÒ{�ÕÝÛÖÿW—Ø{Æ5«­rº9¯“ÍßÞ±o·9>í±í‹Øû�56ó¾üØÒûv†x¯í<ÊsŒ×ÙëêšÛÞ)ÿ6×–´"Ò~ÝgÈ€¥w�±»Ò9ÆsÖLlœ­©zëȹvx�s[d»vxðz�½6¾|åi¥çg,Ô{4|Ð%“•“|ùHEãµ—Æ«:|×dÐzP Éì(bÉ«7)¯ym¹²Ä¹në~W\«á“†Ú†µÞ¶Q‡C£…ÃZjxƒÕƒj íS»%·¼£IL¦[úæ6vØ·ÍüGÚ‘ÆÐ]íû…4O…qá" /YcÇQîìó«péM¡ÓƒÜÕ¶�ªrä’�£5ýIóQ ±#gÎh € € € € € € €á*`'ÓÂBÀSÑxÙe—ino»í6å­·Þªô\?5êŒíÌŽUÓþ­|u±�<ÜeÿÔãºn9kÁíü¾¼ç:C.ç,ãÈN¡qΣ÷œ¦ã\ý±öº¹šVƒ­ÆªÄ¦¿ø’ò§J«c{ø$e/+J©k‘yÚïÒ¿+sV[…а¬ÆÈsýBwÙJ |ÿ•Ê{§ÙtywWåmGöV6Ú…œó‘ûŽ«qÆvÛ²ŒUéóuËãß)cz Wî:v€ÒçóŽ4®w3ÉÏu’œ³f¢�³˜`sj˜�Ò•ªU;�²Ç–——)ÝNMBù‚6|¤ÕFþco›·Év†Ô¼7­jvÊ¿ÿ§¼÷ßvžÔ½g�V:%Öúßin;Ϻ̹„ +ÑÎÅNi×¥p+V¬Ð2Þyç�JOßô\ϘÚb�ÐZ.à\ÿ)§—UÎÕ5ëƒëÖ(=5¦õJƒêFjíÿÁzÞÖÎwC�wÅëÖÜáã,½î¯^e[Ý·¾^¦ŒÎÙA¹ÛH«<زuֵͶ�Eó§)§þlòI½l‹7n`ª²þÖÕê± WÚùÔk ¬nxS‘U:m²Ü´¹\éü”ƒþ·V¸Â¶±ž:W”Uª$¦Z%tç›rJŠí¡RRR”ÉÉ6œäübD\TýçÔ´Æ‚öJ¶×ŒÛ½uÍUT‚­åF�[ŠàÞÞ¦=¨‘Eu®»Éóã'Qv>uj×?³¾›–aÇ‘‹Ö+ó ¬Ç¹Ól @ŸBKZzPÍ:ûe�;¯zB9ËsÚ}æx _ráÁÊž®¯”¶æÚMkû”9Xx÷²¬ßl‹´ö‡w”_,¶{º�±w@#½+íjVë–oÙZXª´Ö Øû¹ÌnöÎ.1âC¥g�_º$_ÞßÐÒ@ÃÍSa¼ÞÞOÕ¶ÄL tI…mšmS“úXÏ=¨—íïÓìY"xKlÏè¹p„ËŽ‘ºí«ÌôeçZ¾Ncþ:×Þµùð“dËzMÑ•sÖÛûå”þ-—ÙoƒÍ*¶£Ç¡Ýìw/"œ ã*·Ísª³¯÷ÞïÔTÛc=RÑÎgž¿ªÊl#è¼×ÿ�h6ÑñVÕ×€d žÑ¿ÓlyªY5M³òò‹VãåÙÕDä¨á£÷ê­ôþàGv°¸Wuƒ ƒÅmyjÙ¹×¢Þó”ÎÅ‹#Òv>WÃWœi¯ð|½ç}Ocsgã$$Û±_ÝŽK”WT5ö€0¹=˜=¨²ÔŽþªÜ¶f“’¶QîX6LVŠO³ÙÐ'¥>=�‘@@@@@@@Â[ îÄ…ð^Š4÷ãÆYÕ”§yêŒ=Æ¡]glgo”/~[ùÀß)K3wWžw´�w–âuª�+Îê꒜ӊ7Û¹¡eΉõODZ:„Ïõ†#“5œXÿnÝR×ìLœÕÓQ>üÉeâèÉÊÆÙ9;õÏ•°™ˆí2D¹SE½æŠ·*µ ‡ì§|åóç•K¿ž¥\uxoe÷úÒ-mÛlÎãì<â(çœèâÍžŠa› /Z�0m·—”¨Ë¹žq\Œ³Ôqž³ll¸Ó^Q^vÂÎÊÔÚ[ÝÛÈÃŽUîõþÕÊ×?ÿZ9ÿÿF)G'x=CµUr¯]mgE”| ¸ë|;Û®é´ÝVe•yk­T/ ÚªU«4—W^y¥Òí6Ï›o¾Y™›ë]ͨh´@À6(‘‘ÛlVœ-a &çóC‚õ¼>Ï`hŽèüÊÅÆE¶G˜½ÖÙú9ócû²äNYÊèÒõÊüÛZf µ=ø°<«�IJ°­#ÅÃBðk Ò+¹Æö ¿ýT ´ck¶_î6´·²Ë6Úî§5!Pa5úΑ^dZº†Sí´àZl†Ñ%»¬¢(�ÕðUõ´}qÇ®%@‹›_{�ÛŽ½§Ý}•òážJK«ŸpÁ5Ê“FX‰ØhÇê•v=ÍßÎoÿ”–:u .“Oô>n÷÷³1½ß\ί=Õßhùpçü²Báj¯:Ø„^šffjÈìBœ«e×–Ëþ¾´6P¡›�ß„ˆO¶÷• ÛX'/Í·­tE²½ÙNóé-¢FT³ã+çç´tˆlïý»ö´}kw¦àÞlÏ»lž¯Æ•æhüï~^§¬tÙ»àìêEÊ™ÎïXÄõée·çÚ¶«ªÄöönç…ÄDÏ»iÝPÛjœk{Þ‹GEÛkÁ¥+èé г¦*§¯Ø&ϧé÷·ŸrDØ|4¿YÿÚøã4å{«êŽÂtÔ½÷þºe—œ�éAš›`´@¾ªƒ±<<çöšßƒ¶7ÅïwöY3ž¹Uw>âù™Ä< qééÊÝÒí�oûhmكܥK…öÝs•·|´Ð,HÛãt:^9º›íhÍhYŠìÔSO4¸‡oG¬rÞõ|©ÁØ1Òľ¬ ;NÈ_mGµÇ‚iÝ5Ü;ÇŽF·Gµe”W³c­‚ öùL�óû¯�Ò:úñ€ŽOƒxùÄÄH € € € € € € €@û Â8,×ixÕW¯ÿFÊ�OyR9«ÌÎ;;èÒS•c;m}¾BdFWÝÞÍyU®*,Öp©�0‘æ}:�s…§âMÎ WÑÝtoVÆÖÓñœ‰¼é§ëÞÛ°óz 2'*/>{/¥gúhV‹rjÅr�y[Rì\L©`¡ÕÑÎYç9SØrñ §T¶ÆÎdù퇯”_-Ý2‡ÕË–é–2çªF•K­.í믬cËúû¹’ôW÷áÔy‰Þž‘ìqi]r”1®Ÿ”‹<ç;{îÝ’îRó¬eë•­áN΢ã�åònбšœ ¶cì*›99v¶š{ÞZå†"gÅxU*T;gBÍwNê�ɰ3Ç;§Ùù×Ûαnܺ9WeذÚÄ<Ž[�¯]kËî©-®ª²ó¿nºé&e^ž½ªiøAÀ¹æúÚåö{uÍÎRìžÓIÙ@߬©µÿëy[;ßÁ~¼s­Ê®ƒwÖ|ì6ȶxÉɶÅNŒ³]…Ë©‰YóÃÛþr±""!-C™šØèöÞF¢µF ¯dÛnžõªòé÷mQÛÒvÑÀ {UúrFqÝÃøßª6®SæWÛDb«!nì*h®”,Ý›�d5aóÖ¬R®¯² ãçhM´æ ø­Y¿ØøÙ?•WÞ?]Y[_<á ß|înÊ çÑí¶ã¾P>öÓì…ksÛ‘¡ç¹1v,‘ÖÀûˆp]¸P�o{Zà]âÌhrÏ;¯&çºj³=v�óVÊ3b‚½¿Ëôþ1®&'¬;«óçë©¿üt�²�A\lgÎåÛÓFDwÉP¦DÚùÅ+�ú‰[ÿg÷Ö?e¥n™úÈKýk°}õŒnžb§å5Þb¬¶øìûvP6TalŒÍ3‡�1ï*gÏùM¹¡¦¯2Ëë„�Š¥vö÷Ü »)}P/¥çÂF‘Ýì\›áÉŠˆçÛÙL«ªì¬¨^ÞÛw™n)qθ‰p%j8¡Þ áv&ΚŸìü©E5v §ÝN»AyÑ8_¯µP³ÎÎOüûÙ÷*gë_èµõë×k¦®¸â eY™ixj‹{öìz3Ë…±€»d�æþ‡/l{RÛ­¶x·Á¶mllûU7jËÿÖó¶|ŽCå‘¶ÃHèdU2 ¡2Kz>Úö•lÇ¿Ø‘Æ “¯U¾·ÁƒoG8cÏ»FyÂÛ'Òš#`‡Yù«×*+�k1æuiòX¹2kvŽ™Ì_°F¹b�ýÊKNŽUYÑš+à¯ä.°CÛ®¾[ù•g‡–6Aýå\e{º²�'d›{“Uê¯+³w'ÑÙ�•é�;ŒY…6ž1çºÝs¿Ÿ©§­Ý!8׳Ïm•ŽÙ^ï˶�/w‰U²8?SU{o”mÙÊÛûÈçž~_ùѧ_*¿�eï…7§tWöbïÚÆþÁú×î{ï£70CÙF[@·U`,Ÿkï‹Ý¶x™Ýr•õ/»lGJIÝ+û,ü\9Ù�ÊYÙ6Ÿ;v³½d#o¾u�ÓjìY6{~v¬ÚêEf|`ûˆ&9�*ÜZVS÷çÖÿ[ï([gŸ9LŸnï”78þžùq;ÇÝQQöà’ Ö›6UX}p|¬­©ü|ÕkG€É[/AµóKTž#÷èhÏœ:>vÖø™úGkP e=¨ÆÞ§/�k}ÎS•¥Ïi4¼c{5z¤áùº’uKuû’å«•Ël³˜”n¿ŽÖ­WeçŸ^Y3T[[¾ªCÕ ÃÎWËzP³¹¬boÎÿR¾¼ÄÓç²4¼ÏŸ�PŽjìG�t_x´`ö W‚íÙwÜÓ’�Võ ;ž~ܕʳÿýƒòÖo •óŸ?[yjç8å£W¬ìÛ@±#�µŸ<§|j†=*¹"øÁç­ÁQaöû@ÁìAF§=}¹³Í™þ“ru•K÷h}Ê22Íöû]â+—ÏýLùá\ÅV­£¿q ÷ã¡­V'"€ € € € € € €ø*Pÿ”;_Åx!$šuÆ•k¿‘Ñ7ݦ|{q¬r؉W)/Ü×ÎܬWžª¿oQÎUûè†çŸþVùÑ×V/²ÓÞv>ot„Õ�¬™þ‘òû2;סïÄ•ÝkOû¨ÖpÁO/*§ÜlùKU_åaW^¦cÿk5|Û8;'È—V½ð �vミ*cö°J‹Ëè©lôܧÂ&³SCó®‡9-²óý?~˜�ÓôÃOæóù’‰ÊÃzÛyL.çŠt?~bÕ]]íö]ú)m­¨% QLØÓnÿàõ÷”ïÍÚKùçÑVÓã9£¤rÅ, »Ü–1n¨-{¯šïˆò_uË'ïØÙÙUIã•»µ³z›šcÝ&-??_sê©-..¶«UÝxã�ÊÞ½{‡É0›á"`çâÿð¡òK=çêÚœ'v9P9qx“5v6b‹[°ž·Å3Ü!X¹Ù¶6Õ ÉÊxφ¸C,wk2p¯d›rM…õÊ‚u+•Kþ¬üúÝ+½ÿMåŒB§Ï&ZÕи??¨|âo•™ícG¨%i³ViuBËVZíBDBE·N�Ù8ÎqJz·< %/˜§\µp¹²$ÛöÑÞçëOZ“~êAîMz–oºJyÛ§Î9òε$w¿ôÝrÎØt%ÝBnöžhã ë Eîhe×\;�¾öÈ_C´ÀÔ¬³÷¿ï¾nïj[¢mÇþ8n�²iw‰õ�üŠÚÇÙKì}ô‘;[6Ôlý.šmïïÞéåõ‰=•\t·òÎKÿ¨˜ØˆŠ5öîoÎÚ*¥+É–tp/;ni �GÛþqà(ûM¬5ŸÙ¶zÅÌ™ÊìN;+»{¿ïÖßõ›»¨@7x®+kïv㜋7ð,õhUÛ–­<ª�mh«æ6îü%K-+mʹ#*ãæÙ¼-ª´úÔ¡;ØÒÍ›¹PùóbîœkõÍ«‹mzQÙÖ³2¶ÙMUUÚ£Ü.«ôŽ�öiN5&­…=¨ÆzܪΑ˜1Ñ*Šò²<{[ù³ßV>ý°õ”‡ž°O<æ{�®?ÕsvV>ùBåy§ªÜ)×^a¶þxUk�uÔÖÂÔL.÷&ÛÓ½øÐ§J«ëW˱ºÉãöê­´cްnô °^}­›ùÖ÷ È¬Iš…+ºYùëÁU¾²ÜzÉÇ·§ÜýÛ3”×]yŽòˆñý”éN‡©\þކÿqõãÊY%¶ÿpÚíÊëï¥ ³>ÜT¹Bb3>Z¢,¯´c°ÎƒwRíbÃõZ\7ý9z�$e��›•Už¯t"mŸ_²ôGåÏ«ìø¡#·À¾‹èȲ,; € € € € € € âav²Bˆkqö¼ëŒï¹çÍÉ¢E‹”C†Xýh[¶ªUÓôt÷^{·òÓÕv†{D¬]ƒ³jŽÕâL¹ÊÎä­r{�ãë²Ê¹ñ¶³oèe/Èž{� Üïýë•o?rƒòÖ¥•\ ”ÓÞ�®,É9Pyü¤ʨ;dÃw�*¯¿ÕÎÍY\aÓ�t.Ò»ôµ;5|õìÜï§�ˆ¥[Ntj€6LŸ­áŸ§MU^<ë#åÆWæ&”)WÍ´%úh¶U½Ä 8FyÚÞÝ•QÎù¦IÙý4<ÀJ }jUÕ�5^¬óؘ.=5<`Àå6§&û4µÚ‘"»h`Üq‡+ßþÉœŸ½éFåÚIÔ‰+¾V¾û™Íú.V0ÈΖ­m® =ô4夯oQ¾=åeÑÁ{(‡¤*xë5å܈>Ê£�¯¬»:²­Í¥<§|m™™çy€rLºKÙ>ZAA�¤¦Æ^c7Ü`¯Æ~ýl�Óð³@ÍMðã?«\X{λsváIGê–q�Ö§‚õ¼~ækO“³miÉ2ÛÓ}¾Ü¶ÏƒvÚEÙ7�3üÄÐx Ä+¹êg=߃{OT^ò‰�¼M9Šn³~š7þTå_.¹PyÚ�;(;E+hͰWþæ¥ö›%+Êí�Ƀz(·S`l#FD¦÷Töδ£ÄYël Öç)‡o{6±n¥5(à‡dk°è{;¿öö�•v‘¶ûeÊ›'�U¶£ÃC[´�mî’åš·y‹í|ùˆxëG½sZR'W]ZªÇVÇÛž(6`‡!šx»h•ZŠEïØQÜËË·ì+Òv9]·2&YÙ4¡»´HãlpÞ:kÀi¶É>IyÜQû(Gõ¶w|I¶f×þö½òÝŸW~ò‹õ¶’’%Ê·o<^9gѽÊ7¶}ÓЮ–§›[תì}å¼ÙK•¥qʼ¡ƒ”�›Ü÷Ew²÷¼#û­R~6ßrÖ�6…Ì]mÞÐoB8[•5«uo±;J™5ôʱ=}}=»7Û~á³RnÔ¿­šó;^9ƒì]ÿðnéÊ^]í5ÿó|Ïx‘ú/©Ç(åè*«Y‰ëmëqӯ˔…Ní~N·, Çêß–fó\Yaï‘#\¶ãêßm·ÓhEª²êüõ+=ûgÒ1¹ú/5֎ܦ?t…òìË_TÖþŒ†j%«ìØû¹«­ì�ÿXß¹ã™;”§Ž°×FÓýW#„JãU*k¢�ç£=¨sjÛ·‚éöëJ/ÖÖôÛV.çàƒ•c³m›ö�ö«°e à¯dûŠ”‘g){Û¾éÈþó¹Ê'�ë/ÿо%9ýÃG”ßãDåy§Ùû£Âç.U>ø�ÍCÖ¾—+¹Ù>ìc‡WáÖ‚Ûƒ¢íÛ–n=­ž8&ÃŽ9tKQ6vp•`û÷®NjÀi¶•+Ü4GI…q»Ø¦{V+‰ € € € € € € Ð�ƾhoÎ47d oÜ+Ù¦\Sc{ÕÚ^¹­N¢UïM<ÈŽL&ްáTvÛ*ùp‹»ÜŽæüºAY“­ÐËŽcíXa»Íå\h`O�¸àË…ÊE?Ù‘FÞ„!Jª½…ÐdóOrÿ¨gyâê[”ïÛjÔ®kÅå·Øñó®›Hà[µU©.úq¶rM…mŒºŒ¨ìÚìk{U”¯ú^ùéÒå�1£•=R؉¡�æÞð™n}ìî·”k=÷'æèÿƒÏ>n{*õß1ÿjMrWØ1sY�·\�þ˜v›}vqËÿÞVæçÙqÚ_§œ¥˜šiµzt¦Æ€[Óƒ›f·»­w|ýæËÊÚŸÒHì¤áC«¬û B †}kËöXíbу\1)²é”iÇ6Ú«8é ;N[òñÃÊKœôÜš˜gÇu÷=z¹rbV”çÆ0Í õ ;,�Hεc¶N.û §hãF»©Í&Q\ê|9ÑŒGµÏQÃ鸧}®– @@@ž8”@IDAT@@@’uA‚äÓ«¶Ø³LÉc/ÒÀK¯[¶´Ùy¸ñy”gL±êºc×Ù¹leñvŽg—T»Pý3uíe<ìô)_;]Ñ‚fU,ýö8Iù·Ý�S–Øy(…eö<)�íwð“cê?§n ¹fåY;ž ¼þa;Ÿ}Ãú"et§,ez\Óg‡ØÒÅåÚ¹�']cy|‰™¯/µ3£3;Ù¸ÑÞÕv6îÌ÷?W.t®m|ØyÒðèÚšo 6Ôbl:%ß?¨¼ãc»þ–sP혮Ø< ¸ûe²÷sÕÞÌÿ¨-¦~{nwÙ\-â¿nþ‡Ò¹¸‰þ·-ÒŽg]¦s¦e©õŽôÁƒ”y MöP�Q¿Åt¨†æÚ:únÅ|å÷³í¸qˆ®JªR„Ð`óCrÛ™ò?=}­òïŸÚÑ£g/¶Çå7kèì]Ò•Í[—6…öÜü܃­!÷&Ý:ý±•þh}ÁÓ2Ç_ª� ê®ô©NÄù¥„^{ÚµîÙ}²ÒiÛæ×]Tj�sÀ•�*.<@ù§;T:µ,ßÜõ€†ß=Æî=¢[“ÇcûÍŽ‰ÊVÎRÎXhÇ*î˜,åБ¶ïkFs´m™ë­\éü&ÄêŸÒðò¬�•Ýk·üv¼T°àgåâEDBï¾ÊnÍÜ/Ø#ýÒœ­Ü²™V½ºÒÖg§A” Ôî»íî¦"ë;®8ë}‰íó@@Kæ§ÖúTc¯–JÏ!¶g¦ ­¼ô¼ 8êʧï8O¹Gwûd£^ŸJÏÐ-]òìøaÌ΃møÈc”S¾*T~÷ˆòÖç�UþáÂÑÊvuHî‡Wõ–m³lïo¯{¿·¨nšäÎØö¡½i[ÞÖ÷ m§ÙÈ-î�ßëž÷_]£t6ÌúØn¢†'Ž´ÏK[¿�ÑD©ù¡Ù⺠+g-´ÏŸу\‰ÖƒÈRònH[7ÿö gj?ÿëJ=Ë™ç?¡ü¢Ô>¥ßå¾ùXë)ó^RùÀ#ï)gÖö$ —,AyÝ%v\—tÓ9Êýû¥(ëí³ôw»i~êAõ<ªVéÏYÓ,ýÑ|:~÷Ç…è4:ÜV=D׳… € € € € € €´¹çhµ99OØ,W¬FOÍʱlÖ[<²ËÎJ̰3°[<‘Æ™mõ»g\lgU»ríYqֆ˩åíœcç5·¬E%ÚÙß]#ˆÊÖ½νNÙù ;WwÀ@[?Û9ûÉegH�<îåu»—Ùø‘vÎN´sþuF¶Uç¦ÇÙíúGC Ý 8gÕýòÌÕZÐkß]«ôœa˜8èD _sÎe§@t†`=¯–'4š+Ö6m©‰¶µo¬U—YÍЦҚÆFðávÛº§v¶*ոߖ*W|ûŽòÍm»×ØŠuWWê^O�D\«Úiàyº•&�@¿’#­2uçcNµ¬n•¶Ng}öªò¡[¬’ò__-QN½k²ò€Y¿Ù-ÏÚþnRN{;Øö[rÛ‘ÀêY_)XaÃQ�†*G÷OWZÿiVs®ÙmÄH=híF«³\²è[å×±»(wìôÄÆ:žÆè€Í=ÈúBé/Ï*¯»aªrƒ³KÛãr ß|¶É§a.…úÍo=(¢Z.Y»Hùó¬9ÊåEvKlg«“ÛeŒíA¶S÷é¼ÏŠõ”œTX}Øâ96�5.gÍ®-Ò°;ÊúNÚv&¤Q:`3¥‚oP^yÛÇJ«ITK³Wþ¹W�¬Õ"·H§¶Ø&åc‹²wÊûL¾Èò¹“”ÿ±ƒJU«¼£|÷[«;¬›�ÓìíªSת6Z½æ7ß/S–DØ;ôìl{Û«EË“5H�Öݪ@¾Yjùó/«•Yc²•îÕVsüÝ<§â*ÞÞ!d¯ÃF÷¦Õv̶j™½†Ë�#,—Ë6=î2«�/³ኲ£¯¨æn‘œßÀX=Ûö)3WnÙO ïmï²Ëó—+×n¶‰FG›®{³ù,+¶§ŒÊµêU.ü-„Fš)ù¡EÙë"ÖVïïÍŽó³ö»Zùäƒ+wËÜþk?&wo�y¡ó 1/kýzI‰õéé�¿®œqæ(åø½ÚõÀÐj~}UG§XŸíÙË>çqºš¿—ÕeÇ„íª¶ÛoB~êA>Í�=WÉœ¯•ï¯sõœG¥ ±Ï6‡äl¿9£·—ðkr—Úžkéâ¥Ê@ü˜Kd'ë›ý<Æíe øi9üÚƒœwUóž»@óvøYO*çGØq×Á×¾¤|ìÂñÊ,çç=Ǩá“þ2Cùîó÷*o½íåwΛ¨_^ú›†�šñ£rÊ *'�±c‰vÕÇüÚƒ„³¥E™U¯ÁvÜØÒ£/{U”®Y üm­}.ב[»zÕuäɲ#€ € € € € € €Íhô4ÍæNˆñ@À�È »âÑØ –aßârµCú¾vþuB¶Õ=Œ²SQitXç|Æé÷iù/¾Âê?VyNÕM³Z�3ï°ó ÷ȹºÁz^-PµØÜš› #³” �7gJEó§)§þ\ lM‹É®‡�m¿Ä°`¹Uº—ÛÙÃö ¶H;õ4©“�Ù m(›ªƒnp âÆà¾’m_“ÞS9æàó•ï¶›r‡3W^ñŠSo4õ Ÿuµ­ý©©ìÑŽŽ¸ýÖƒª6Kfc�³ùK6ÏÑ;õW¦Õ«Ò Íh®8;›{ĮÔe_Z�ÚÆuVjWØÇ®•oëŽæÙ´~T6O˜ÿºþzå{k�õ˜9Iûe²rŠ‹¥ÐPó[ª´ê·¥sç*WÛk;½÷ŽÊ�†Ù$Ù—~äJÓ˜y}2•Kg¯W.™gû©ºf›­ô�}•]­ ”VO z͇ú{Ê·*§nðÜež»_|»ò/ã­Ê¡-·8ѽlOtà8[›ÿùŸg†ì2õ;« .9Ķ�É-œ!ûµ•ÒbÛbW;Ë”Ôc´†Gõ´*ÛN2"N�Ílï ³VÙ¶º´¦LYVY¬Ì_d5ÇÅÉÊ^£lOšÛôÖ;Ò^ •«f+XmGYõZ¤Õ›vïaG}Í}!»KLrùªMÊê»äèû)Ó�Råêj»÷çï*=uÌPsÅtRê×UÉQœ‰4ÔüÕƒ<׊N�³µlÕïj‰ƒ^oGh¾ÔÛC¬Ù{‚¬ÝVÚéå=ÎÄJVLÓðÌ…öû ㇵ‡ƒ9ÿ½ª­÷ÇeÙçZΛ*ýOk;õ ßæØ*í~ýîå §_x~�±ë„º¥�/Ǿ=MXŒå¿d‹Ùe˜r¯ý†jÙ�ÏšÞ…ê©C{ºþëAö¹ÄæYO(/¾ðIåüÛõ;ýnå½^µÅúÓi¶¯Iʳ#ö#.{J¹÷¡G(o¿àlåïÚñOÉ‚•—ý_ge÷wl:‡äµ‡½�DÍ¿=H¿ç¢iÆ'§*Óâí¸«G_;Nóá‡E4Ö¶ÍY›ñvDZc™‘ÐÐç…Û>®=ÞÒq—¼=®M– @@@@@@h†@û9I¡ ͨ €O rÙëzòë&߬|ÏsÉÇ«J¾�?xå~V»ˆÝs°žW‹ô™ÚCó0b¤�§éJI±ltžìž„Ü¡Ê]R¬N%:9AÙøøº³‰fµ%é=lj;Ú,Ðü j¯äÈÌ�´TgÞp•rê'g)ßpúõ‚—­Îìßg ¼t';׸¥¯"=4È- =(Æ*á�� Ì­¶J²´ÿE¥YMä.íš—¥±vÆqr 6©šnx6ô -úÒ×nR^÷–s.¼C‘XµBÿ¿vÍQÊ�œ[¶•ë5B½¢ÖB«_¹á¸ý•�ØO3Ô¶„ƒm�ùâ¹c”V™n-0=Ȫî2N™±Ù¶0Y�̦9½ÈÎÊOï7^¹o§¾³ÂªèììzM'ÚV@b¼užæLÓÛ¾›»Äj럻t²òÞo¬Š×Sk•uàõºó[#�Úž,ÊŽû·-^Dm…±‚•­ÎW9+µ¥ÆVc�Ò}´rB†m]Ë쨵õK®ÄîšÎ˜½²•1ñöêõT3¤íd†Iíµ×¹‹¯jçö9;ì¢ñwééT»lJQÑv Ÿls›šàÃ+Ùe5Ó¹CF*Sjl8-Ùö#Yãlz¹¬ÇuIÚRq•ÑO·ì2Ö*Z*jâ(3)=]™»eLýIû]ÀÏ=(Ê´³úÛ±º »œgÙ¨,­ðlÉœ|Wz/�;t¨ŸD,· òˆÂŠEkŠ•îaö\mß¹õ¤-o¼ª[n¢�ôsòe)kVi¬_¾úUéÙçéÈZãÙ6ÜOïšRH¶@÷ (ûå‹g’ËßgÊÏ=Èéïß7ER;;�ˆÌ=4|É…‡({ÙaHÍŽRÚ˜×>kÇqǦ¼Êùáš’ÙOjøº‡í]ÕÄ&*ÓÃl÷£YÖ.3ÀGVί%õÛmO=•“µ¶qRžÕýïœ×Úi…ûã9Š ÷5Èü#€ € € € € € €-°-i € Ð5¿Ñ³ÜsöÙÊGgl©JéyŒ�“øÀ%Vi×Òëmè¡�¶`=o£3Ôæw¸’²ôœ={ûúÄÑNMIŽ��¸K—j¬¹ß[�}msޱö°íb3úWÝ£Ãéö á´¶¶7¯èA5+¿Ð³¾úº½sñweN°šà½6ïÐ<ªóx=ê¼kì×k^úêïÊY%6½ùϾ®œ~‘}N¸OF°Ž0õä-mô –Êýqí|Ût_f@@@@@@Yÿ�²‹ÈŒ!€ lwÑlÍ“矤¼ÖëŠ�iã/Ð-�Ý}šrXªR‚õ¼Z~ƒWr¤]!;Ïs½Ú%·_X¶t�²Ø¹”^8ž\»(üæþîAv†{jßÕçþu_eK®©‡•.TL}öeí�n¤í áCŽßO9 iËyô±­®‹3�…@ Ž@�] ø›{¬†ø”»>WÖþJLÖ¾î±[”Gö±J¾àµ =uI‘Õ{j\ì‰Ä@k#Þw·4Oƒ € € € € € €„š§'„Úa~@Ú•€{³]Íñ_—¯¼øÙùJÏÙ¹‰ÃÏÐðƒ�_©œ”íÿÝq°žW‹CCÀ�aóJvWi©+Jíüßz­Æj/[XYoBü�@KÓƒì´ù¾‡^«œrhKæÊó÷†·5pþ«^Ɖ;é–¯œ¢<"—3›=NdPj ôô3²«Ê�p�]In¹ç0.mœ†Ï}ò!åù»Ø•¤ƒüz­^¡yøõÇMʺf•.™}»Yyæêæˆÿ; @À{�½¸»�°ë;O{Qùa¡uÑ5~«œ¹]r”ïÅÿÕí±‹Ê•µ-Ñjô³2ìÚÆt£:þoC�€÷ ¦—ÅÞÁ”®üM9kƒ×˜ ½ôGv'ú„— ƒ¡)Àd½£|³ý²K¥çÈЈ‰¶~±åW’œ} W\'�™Ý3ÆÆ_ä<¨Ä:^þ&Û+¹#ì3ÖMÙ™�@3ؾ7‹Q@@@@@@@�ö$àÿ’¦ö¤Ã² € Ðbwñ=ö_—üIyÎ#³”µW¼p‚†ïyîv屬þÿç ëyµ 4ü(ÐV¯äÍsÑ&;18)µ$ev5ÖÙßxz¹‡!Mÿuë•­ ÀÊ=OA"Ш@[õ Fg€;o�«5üÞ©->ö¯V¹¸ ¶¶x´†Ï}ìiåõûwWÆê_Ë›íƒÊÊì×)âã�š’MªrÁgzÜk_x•€%vÕ-ûì4@Éu&[„ʃZ'ÐF=Èf2fОÊcÆe*?|ÛzAálë³ïÍ´ßs¹‹U ûòn«zÙOóóE^Çri{Øúù^¤¬ÑiøC  {Pã³k5”×,S–z�”˜ÜEe$ûÒ«¼Æ m)ðd¯ÿ¤Œ,e²}¤§´ÃÄ‚ÙV¼ºfWeÏæiVÚÞgýêJemK´ÏÒ’íH“þV‡Âÿm!ÐÜo[ÌÏ� € € € € € € ÐT·2O� бj ­žøÉ �WþåÉÙJOQJâ€ã4|û¿ÿ©5ßÓ×5¨“�*ßͪ»Z^5f¢!Ð<�¶êAÍ›+ÆF lªÖiV¿º÷,åqWÛÞa‰gÓž6RÃgÞÿ¼òÖ#ú*ã[uçÙÙ¾ãÌs¾WxßMÊ£5óø°j¹õîýw)?°ÒÊÚ–6âT ±k†²U³Y7AþGÀW�6êA^³Ý_ìsò�ʼOžQ./´Záûx]yÌh{ÿÕ»éC1·uòÙoYïþd­BÍJÆòöÛW¹c•6&Bk#�¶ïA�.˜ýFþªùJ¯+{G$ô± ãTºE£nÜT�6ìA1ýwÔ¢”kû‹¹ÎѬýÀ>[xcö!Ês†Ûí¾ƒÙ1aÑ+ß^µåó„Ä®{ê–á½øòN ´6`ߦÜ< € € € € € € :œ¤:ë‚9A{�ªu_kî;Ç®[|å)=ç&:QÃw½`µÅaW"ñíLC�èS Öóú4sŒ„€ÏmùJvoúNóuß_.RþçG+Ë*9ð7åÌk¦(¯=coå Œ¦ R*4ΪÏïW^xáSʺc;›8gÿs”‡�HPÒh�¶ìAm³D< m*PnÕºÜzºòä¼§¬-óH³ ’sù—rÊQý•‰­>Œs|«éÜwþÅÊW¦Ú>蕽ç(¿»õå%GŽQv�kêiÜev]É©wÙ¾fòã[~Ï&"±Ÿn9öÒS”»¦65�@CÀŸm؃êÏv”þì~ð_•WLzK9ù ëSË_¾Tù×í·^�l}*ÃFܪY eÁŒG•×ßò™²¶P?m„†'Ÿ±�²…6R µ�@ÐzP#ËæTÞç¯Z­»½®ì›m¿]‘Âî¥6nš@›÷ Wº]«øØ³Æ*Ÿ¼dªrÆO”×]ôåÀ§þ¦Ü;/NÙt«Z÷¥F¸ÿï÷*ªílö™á¨ÓŽRŽíDg­M8ðiSnž @@@@@@UsžBè¬æ@ ìŠ#eKÞQÞtú)Ê;?\«¬»öˆ�ØodŽrÝ«v¦áeOÙIƒ›Š‹•›7—)+«m ö¯‰oõŽW[°òWå·ï=£|ðÉ•‹ê:¼†‡«¼íú£•}c4*œÐEbâ´±€»xžžñ¥+m›æ½ß(목ì#2‡ S¦ÿú¼òÆK ”›6ÙQ\ÑæÍÊòJ«P´~ØD‹ìª;ÿû]Êcú9EŽñ]4)Õdií@ ¤Ä^WeeöËCžärµì¨?Ôz�×Ê©±*üg�¶Ç“^Ù²oì}õgºeö ã•­ø E�¦u\OßÙìüR‹§yÞ5_$TzPõºéšùG/?[yù 3”…Ûì|í,ì›¸Ò vwýQ¬? 8âjåƒw_¤Ü3Ï>i¡!°­€çslÏžÈó‰Ü¶ã´æÞ‡·F�Ç"€ € € € € € €a,àurk/³Ž €@œëÖmçâu�˜½`=o –…ivd� ¾’]v&oϽìÞ§>û£òô×_R>÷Ô“Êÿ|µ@¹íÙÁºÑiöج�íJ““'Ÿ®<áð ʾ)œ‘)Z› µµÙRòDRÀí¶ • ´H«�zÄ ÊWv?FùÑ«/(Ÿ{òYå¿X¢¬_}¢êZbO �?n²ò‚³OR8:[II¤hm,´ÔÀrÚ1XæÎç*Ÿšº³òÀû­‚ÿžGÞP~·vÛþäî~¢î½è² •'ï=P™¥ !ÐF¡Ôƒ¼¹ÆúKÑ:ï_z³þ’�œ ¤òÑKŠÁ „BŠêb{œ³¶ß’™pÔËÊg½_ùØ»³”N9qDI‰s•âz;"ëS½'�¬<÷ìS•Ç4F™ײ_,ÐCiøA€Ï³ü€È$@@@@@@@�pàÆá¸Ö˜g@ Ã „ô5Œ;ÜÚ`�0¿]Ã849ÝvU¿Â•‹”‹—­T®+ج,«‰Q&¥XMXçî}•ýz8×"â$LYК#à·k7çI�v#à¿k‡$I�Utm\±XéÙ­ßd)î8eJFe^«ƒì•¯d$Z³üw ãf=mÐF®,\¦çž¿Àríz»vxElš²sn?åàþ]•‰t$)Ð|ðß5Œ}{>ÆB } øïÆ¡ìR­™+Y»X¹`‘}ž°¾ HYZcõùÉiʬ¶êÛÍöG±K�æ›×0ö͉±@@@@@@@š)À5Œ› Æè € €í^Àe•ÄiÝ(G8Ùî—˜D�H«$Îèn5Äž •c>O�˜´îšñ¡cœ ÏE`®@ÂJ Js›˜e¿I6Üɰšyf¶C ð“+zõ³ð € € € € € € БøÂ¸#¯}–@@@@@@:´_wèÕÏÂ#€ € € € € € €@Gà ㎼öYv@@@@@@èÐ|aÜ¡W? � € € € € € €Y :"ÂÕ‘—ŸeG@@@@@@:¬ÆvÕ³à € € € € € € ÐÑ¢Ý]€åG@@@@@@:¨ÆtųØ € € € € € € €@´Ëí©1æJƼ@@@@@@@�Ž%@…qÇZß,- € € € € € € ð»@t¥Å¿c0€ € € € € € €t$*Œ;ÒÚfY@@@@@@@/¾0öÂ`@@@@@@èH|aÜ‘Ö6ËŠ € € € € € €x D»½þ`@@@@@@@ ãPaÜqÖ5KŠ € € € € € €ÔˆŽ Ä¸ € € € € € € €E€ ㎲¦YN@@@@@@@`+¾0Þ „?@@@@@@@�Ž"ÀÆeM³œ € € € € € € €ÀVÑ®­nàO@@@@@@@�Ž!@…qÇXÏ,% € € € € € € °�@t%ÆÛ p € € € € € € Ш0îk™eD@@@@@@ˆŽp7p+7!€ € € € € € €´{*ŒÛý*f@@@@@@@�†¢)0n†[@@@@@@@�ö.@…q{_Ã, € € € € € € Ј@´+ÂÕÈ]ÜŒ € € € € € € О¨0nÏk—eC@@@@@@šà ã&p¸ @@@@@@hÏ|aÜž×.ˆ € € € € € €4!ínâNîB@@@@@@h¿T·ßuË’!€ € € € € € €M è cÕSfÜ$w"€ € € € € € €íQ€ ãö¸VY&@@@@@@@À�hÆa@�Ž-à®Òò­üU¹*ª�²vœÒ¥4@@@@@g*ŒÃyí1ï € € € € € € €@+Â¡ÂØ]®\¿x‘r]Yk.·lµp YV×33VImœh €Àv*üGãüíÒ”ëFÿEùÏ+')³8éH 4@@@@@ÂY€ûÃyí1ï € € € € € € €@+¢Â8_ 8ý±+•ýTÙŠ…µªâÑç> ¼fŸ,%Æ­Àä¡� TÌÓ}¯Þe™³[ó‚õ~†è�úëп©Ü!1ø¯ÜšµS5'·^ö„òç …ÿZì(MëÌ;.VNèü%uÏÒœ¼tßëÊ_í2¾þh1Ã5•c.þ£²8lƒ5Ÿ1}÷P<ü¿Ê¾Iùö/»)OÞ!Aüõ¤™ !€ € € € € €@‹¨0nB@@@@@@Â_@ÕmaUcu–ýùeÿ8_ù‹~U£>ñþ _Àx°ëOoüünå¥�ÍT¶¾øÖ•¸·MíÞ㕃C§RÓ]¬ùY1cºrz©Â-Þê8÷¬öǤü2 ·ÍJYQ‘rsúåØÁ]”ž•P±z¶†¿™·QÙe¨Õ¡ê¥,Zd&?,³óTz�ÙQÙ#I¡f×)_õ“Ý;¿È†«[s±r=Þ�­z³&¶zþ囵­šãP\¢[+#b”‰ÉñJ[Ú&ZB®î, �elbV¿+²«Ç4AùÜ�*ß}ÃÖ×ÁC&*39õH 4@@@@@ÂS€�ùÃs½1× € € € € € € €@«Tè)s “:ã¨nZäáØ]¹k’/ólK—ñ¥ò*Œ¥ôi5¨qqVÞú³\ñVÉéòå…Ж 7FÏv΋vÕÛsÚòyƒô\±Ã×3Ÿ÷—�•‰.§Ç}r³†g̳«ÿŽ9æåY#mM-|é|åÌ­ZzÒ)*ÿØÝy¸í:åÓnùAyÇ E5WÚXÍÍùOXnÛÜ%VeûÏSnR~ÜååÍ÷­ì³�c�vͺYò°=”{d}¢ü¤À~³ae‰­ñÌäP넚) € € € € €ø$Ðúïì|zFB@@@@@@5�йîk¨É0?~°ÄŒÝÎSÞg—µ¥µK«7­¬°‹ýº]VGÛžÏJqç¯Ñ2.¯²¥Žîe¿Ð9Ì×ÖÔü7R¾1¯J¹½fã¬Kè©ìße•òý‡ï´Ô¿Æ[TÏ}tçiG S¦PŠÜ8÷ € € € € € �0ûr#(F<) € € € € € € Ð.TaLÁW»\³,A¨(+Õs»#»(ÓÚõÕm«6¬Ô2.¯²3o2ó²”>]Z]ã…HsWkF ~ûB9mZYófjñÇ�ÛuG�y’�c3 € € € € €´­Æmëͳ!€ € € € € € €!#v×0¶z¸Ê2»îfY”/ŠvmÑòJ{” …VsæmS¾fjSyM fÍeL ©ÊäXªÉÅÌt뜊յ«õgUÌHev'ÏY){…×=q@ÿw—-Óô¿ýx–r]í¢XÿÝ<Ïn)u[ÏJ]ö½ò�·æ+ëõ4·]÷·Ò�¢8~wåàŒ�9SÇ•¨ùÙñœç•/Ÿ¨m¤+Òv4ÑõPt @@@@@BB d¾· f@@@@@@è@*üòT•…IñWÙ4­œÛN±l~‹mþCú«“žýÌdåõïÛ5_Ò"íºªGOyXyÂ@ŸŠ²2p¢5«´ÐÞq›ò�åVwÛ²»ÛYzà-Ç V†ÁTÛ5}ý¥Øæ¶÷e÷Ä0Ù¶h^›håKtç'OX?úÜ:nmågÿÒ­�|ÖÀ]vSŒiœ6rwå`+ø¡£¹‰ÝfŽÜåöûk7[r—NñÊÎ0ª¶u½ü× Ê”=•i Œ¤›i € € € € € ¢|´¢+†ÙB@@@@@@-%‹õ¢rôçèI£•9VçS+[:]ã}üS¡Oc·ÝHöm}Zß Ê=÷¬ ÔÓº’5åîIí¢Ê3PFœ®+Òªº£[qùÖhW¸¬;çš¾³?Ðò¾·Ð^Û}O¥Ìñ:)%:ÖªT#jìš¾Åùk”kb�»«VjxÙ»=4›+Ù–åÔ{TïùQ†šužvÏß•/,¤<ùú³•»¦{­/·Uè~ùÀuÊgç§+S­X7,šÕįùäåyÌSö8þåÍG[�tœþ©¹‹ß?r�òïïÙ…�'\r»ò‚ñ™J¯Õ®¿h € € € € € º|ªºë†9C@@@@@@*nÆ1v%×ýN9C¹«OU³V ˜ÿñzåç?ý  ¥f× í·ÿ9Ê ö¥ùb^ü"iÕð“.¶kOòËCw"ÖËJ–XmñS÷½©\ÓeåŸw領 kkö×AöÛy‘/*_¸úLKýÛªY·½•¤yêœkYÛ*7j l­UE»R(ÌSvóÞ¦V[�nL…UßFD¦*’ÃäŠÎî’ÙšÛ7_ž©,�î§·soemm±†Ô\)Ї£ýéýÊi?¦3àåĬº5¯?h € € € € € ÂT‡ðÊaÖ@@@@@@@�@ xWÃòy˜6´S�ò/ìJ·ùl³rsìPåqWŸ¤“êu5_ý­úÔAV�zó½v=àßVÛøUÎõ€#£K5<ëÙ»•ÿ]¢ƒV³q•æri‰-@̈îʮ۞~ã¶e,Ü`Æ®¤4erÌÖ&º1ÄZ…ægÑ;Ï)ß]k³Öeßã”{õlø¢ñѹ{êÞ3NýVyÑ}_*yôcåÀËöRf³‡‘ @@@@@�ÐØö+ŽÐž_æ@@@@@@@ÀOÔù ’É ÐQbGï§E?¬³mLr÷=T¹[÷DeCµ´v]Û”nv%ò‘v�ãºæÎ×PÑÛÎù+aRa\µÆfô·J›çô^¹Ê´mN¿q—oÒí7[rtŸLeê6ãèÆ�jU+>Ôü<õâ|eeòXå‰GYEø6åâºÍÓl½gïqªòÿ¾¶+ß?ýqåÃÚZ¾r?[Íìf„@C@@@@@ dBþë‹�•cÆ@@@@@@@�0 ô+ÌW`X̾s%×Õ¿­ÐÌn²Ë¹¤ÅföÔt{fÆ)ªm È“2Q¨ÊP Ûk˜2¾Ú.{»d±¢9Í]¨±×nØ‹£9óâø6Ÿkÿª,qÛ•}wè™­´êéúÍ]´Q7¬¯¶[#;›RJ(¿4+–jßyèiåÌrëGÃN>A9¾‹çEçhÌ=O;YùÕÏ*gùˆr¦•öùÔÊ–.Ôx•>�ËH¨¶«½¾{ãß”ÿÍ·ë¹ú»ÙKaÐé÷(oýcž2Xeœî²zö©/}¦\æÔ•jÀŸ-Úª¨'½§²�•€†D+Ÿþ¨æãÒé~š™X?M§Õ“q—¬Ñ4~[j×W®¬÷²­Ð-sgÚV¥Ê• Œ-Yn·ÌY¥ôn5ËíJÀ+«íõYeÓY:×¶`µµÈ.Ûüftï§ÌN ÖkVOá.QÌûï½Ê§g•)ã‡ÿYyæ>Ö›|ßIDçNÒø§üéSåìÇ¿W>õø'ÊáÛK™½m ¶n¥!€ € € € € €@°¨0öàù@@@@@@@� ø^<¤Üêi«­†oÆûomu³o†Lé¢o³Û~ÆŠLײ Üç0åaåõJ5ý´ŒvÞCFÏD?M­“©´+øÎ|óÊiV¨éïoµÅƒßCÙ'.¨5©^K3àýuÊ>}”-íc›õØ9o<£œºu™®n N«Y5MO|×åÏ)—5zyårÝûñv¥Þ�õ¯‰ö¥Õa_ñ¥×‘Yúãè)+O¬ò[ûå…ÕŸÚU‡ÿñ‚ÕCW&ŽVžvæ¾Êî>ÿŠƒFvš= Ç¾§*�šv™òùom�>ÿ•MóÂñ�”‘úGC@@@@@�PàÓûPZÌ  € € € € € € ІáVa÷á\üÀ9Ê�’|q²zÖ�ŸÝ®<ÿþŸ|yãø_ 2WÓû§ÿ³ôÿÔChŠ®¤57g=bU•§d¾¬‚311j‹£­û夬Þaœr¯½‡)ã[6kîb=¶[©G®°WK—––*ë±þj‘�­.ö„ º(ËQï²…ì–Õ22?-eM‘&´f•eM”U<ïqî¹Ê}òš]\¬GÕ¶¸¾8ðÄý”N±­®«Ø®ß\æ¶ ãPxñj6h € € € € € ð»Æ¿S0€ € € € € € €t,ך�¥Zâ´ÿW¹ÅÅÅùÇÒ]¡él\±Â²2A™Õ#[™ìóE?«K ì±ÅUÊèä ez‚ÏÖØ4@ = ض1ùze|7Ûºú¡Ø]¢éY¥rZj+ê•õøºV^nWŒD«®®ÖdCà:è�X<¦‰@Àòóí÷bcí÷’““ö%£!€€ï%%ö‰GYY™ÒÓƒ\.ÿ®îûü0&á%àé;›7oÖl{z�ç=Qx-s‹@°<Ÿc{öDžOäü;'Tûד©!€ € € € € € €a#×0v®ô™‘×[¨-;ï1*ÁÎ8îlÅÉ4@�­lGÐ)Ïj‹ýÖ\V­›F¹”ß@™ € € € € €� Â8P²L@@@@@@q¾0ñÄì!€ € € € € € €�à ã@É2]@@@@@@@ ÄøÂ8ÄW³‡ € € € € € €J€/Œ%Ët@@@@@@@�à ã_AÌ € € € € € € (¾0”,ÓE@@@@@@B\€/ŒC|1{ € € € € € € €@ øÂ8P²L@@@@@@q¾0ñÄì!€ € € € € € €�à ã@É2]@@@@@@@ ÄøÂ8ÄW³‡ € € € € € €J€/Œ%Ët@@@@@@@�à ã_AÌ € € € € € € (¾0”,ÓE@@@@@@B\ :ÂâsÈì!€ € € € € € €D€ 〰2Q@@@@@@@ ô¢#\¡?“Ì! € € € € € € €€ÿ¨0ö¿)SD@@@@@@ÂB€/ŒÃb51“ € € € € € € €€ÿøÂØÿ¦L@@@@@@ ¾0‹ÕÄL"€ € € € € € €þà cÿ›2E@@@@@@@ ,¢#Üa1ŸÌ$ € € € € € € €€Ÿ¨0ö3(“C@@@@@@ÂE šãpYUÌ' € € € € € € à_*ŒýëÉÔ@@@@@@@�°à ã°YUÌ( € € € € € € à_¾0ö¯'SC@@@@@@ÂF Ú6³ÊŒ"€ € € € € € €øS€ cj2-@@@@@@@ Œ¢#(1£ÕŬ"€ € € € € € €þ ÂØ–L @@@@@@+¾0«ÕÅÌ"€ € € € € € €þà cÿY2%@@@@@@@ ¬øÂ8¬V3‹ € € € € € €øO€/ŒýgÉ”@@@@@@@�°à ã°Z]Ì, € € € € € € à?¾0öŸ%SB@@@@@@ÂJ :ÂVóËÌ"€ € € € € € €øI€ c?A2@@@@@@@ ÜøÂ8ÜÖó‹ € € € € € €øI€/ŒýÉd@@@@@@@�pˆæÆá¶Ê˜_@@@@@@@À?TûÇ‘© € € € € € € €a'ÀÆa·Ê˜a@@@@@@@À?|aìG¦‚ € € € € € €„�@´+ìf™F@@@@@@ð‡ÆþPd € € € € € € €@ ð…q®4f@@@@@@ð‡_ûC‘i € € € € € € €a(íÙf–@@@@@@@Z/@…që ™ € € € € € € –|a–«�™F@@@@@@·®‹¬@IDATZ/ÀÆ­7d  € € € € € € €@X ð…qX®6f@@@@@@h½_·Þ�) € € € € € € €a)í ËÙÞf¦Ýeºi휯•_þ´Zéò�»*Ãø[ñêBÍÿÂéÓ”Ó¾�£\^­Ìê5P9|· Ê�{§*£ô/¬[•-éâ™3”³æÚ’Î]\¤LÈî­8Æ–tˆle|;yÉjQ~oZöÕ›Ê/–Øp\¿põºµEs?T¾óãe�þ5ÜìõÜkÂáÊ]sõ§ºË×jþùÚ¶??Ι§\´Á–¥Kÿ1Ê “Æ)gÆ(ë¹Kj†?}cºrUã«p«…Šï¿çÿ³wàqTç×ßUתWK–d˽ã.Ø¦ØØŠ!€C‡  @€|�P: ¡·€C�i ÷nãŽ{¯²dY½K»ßyç•ÄÈ«•W}G:÷y|t÷Î�™{wîÌìzμ(9ÿÄD¨UGô˜.ñ# � � � � � � � � � � thü=¿C/;G$@$@$@$@$@$@$@$@$@$@$@$@$@ž ˆ½ÏªÉU„–oúòèô¯Ä·!£êr‰5~êPèù†ÃË%Wñ.´yÖKOA_™/žéÊÀ0hŒ£ ºÊð=ã+äϺç1èM£ã VôWfýˆ–¿ÿ÷¿A?YŸuÙÅ‹.Zº|tÖÿ½ä!èÃW ‚†w Ÿqùî¯Ñ£Ÿû7ô§2ˆå�^uçlþ}yÿ½­P9jëMv9ªÏôK¨ÆÎ¼õhù{�?ýx³œl~Á�àÀ hÙ²yЯ?Ÿ ýíã@ÏK‚Z&•DS—}üt¡qd¯årJ¿f4tŠ˜«™H€H€H€H€H€H€H€H€H€H€H€,@€c ›H$@$@$@$@$@$@$@$@$@$@$@$@$@­A @b�Z5‰k±4¿ÔutpÐ6èO{  VNâMÜûýkÐ7ˆ­oصâ_¼å\qÖÆI¯ó·|}æÁw ß½ütÌàßAG„YÏxëgƒE9â'>á²û¡¿=g45Z¼˜å  ¯=øtÖ'ÂdæØiЩ=¬lŽG4UìÃßo_çÆ2�‹ÖÁ꾸ý)-’¸Ô.»:áŽg —ôs÷ÀKCãÜËQìÛÉ)±™¿þ,ôã­!Я•£÷wg„&ÊÌ=¸êè¿—¦A‡w•ãÙZÉ> ¾îù— Wz¸T8�È;^zü?ÐMqç@sf:ÔZ#ZXXˆ6qä˜H€¼#�Ÿ/ï –7+”––z·k‘ T(*’·%é " �ÆÐäï/w�z=jìXŸ:3ýîc·Ë÷qΠÎ|$°ïM# ß}œNgí ÒÙÔ´­q-èlÊÊäWÓÊÊJ¨^ƒüüèiìlGûÛtUUòÿƒ­wÝállúØpM             °4� ûí‘@?ü*qõ ·‰ý-wþÓÐßN[µr¯m÷óî…>ÙW|o]û¥@Cª‡Jœµ‘}�2öCèú9‹¡«wÞ1DÖµVò‹‘`§×MûÔî7ª¹!I'£äôÑáÐï¿8ݾOä®1P ½¶ ´ÿ¬× Ó7ÈÑÛwˆ¸ä÷lØ µ~’ç\Š �‘òK@>5]Žá”kùN‡Š]?`ñG Å]3é~è.�¬>(åHNu ô¾Qk&‰0ßU´žäùŠO¿…n,O†N¹ù è°È[%…††¢©êP±J›ÙNðúL½ú#ÍWo_hÛ@¾N @îê+*äžPó¾Þb¶�|‰€Ãøæ¨Ï×sùÒȰ-Ö  3HÝ]œAÖ3¶Ò—„„È{æÌwq­çôò¥~³-$Ð’tÖè5ˆã–$Ëmut­ý 6ÆýbÿH€H€H€H€H€H€H€H€H€H€H€H€H€HÀ�ÖC߬]ì…ö÷ì/ZO²K¼Àˆ(y¢Íæ’¨�ÅeòÞ—áεšïVÚd½Øž±úδBg¿ò2tСqžåß êÜ Ò»5å2V½N Mâ£G ÀD$@$@$@$@$@$@$@$@$@$@Ö$ÀŸù­9nl5 � � � � � � � � � � � � � 4›€ì|ÍîdGÙ@%:’1ïUè+s³¡Ž·@¯íÿóï—*néÛµÙœøWšùôëWž…¾óò£P{ÄsÐ;ljoÕ26cç´vѿ߀..�8¾ƒÏî-ß*�‹×àŸÍV¹ý0Túl³•Ú]»F\Ç1ÝÅ…Ü#ÆZSUF&(AZ>R ·u’=¤+>ŸzÁ/ ÿ]øèޥ렇.‡qšå ´3Äa}�ý‘¿úO¿‡ž×Ídóïu:J.»ptÁ D×d@ÏIM�Z ‹he½ÉU‚âë×CËí†w¼oä-Ü£z»ÉB          èLø;gmö•H€H€H€H€H€H€H€H€H€H€H€H€H€L¬e[45¼seÅwš¿þ}è´CsãNƒÞ}ó$hJ‡Cyš!$qôü+σÎY5ºøÛ•Ð+O>ÚÅ"<¸òÄ'½h¹ÄcvIXÛúŸ•l=©lÑë(ýË"ñ"O¼ÿmè£e˜ O+þv„䛈nt5ŽÞýٹȪ½Ú÷ÇÔ/­�O6š¾OÆ$ÀßZ7I7bÅK`ù�L‰>î´YÜaìŸô®-â3vÊÜìÖÅà€ � � � � � � � � � � �€5 øþÎX“+[M$@$@$@$@$@$@$@$@$@$@$@$@$@>O€æ0"±£lþúô“¢Ûü%.ì•÷ÜŸèîkD±å’K«œòì‚¿‡ü‚B±Ôa,­ÊÉG¾Øðé"c‰d“Q›zß_ gyhyåö/±ô™é« Áã~½sr:4&]"æZÍ[,�t¹¤ÕvMwŠßú¨æ¶$Ä@#<Œ¾Ôð©d�DszH‡.Þݾ¯êJ‰€ÖtW”•C�‡‡øÅk–"kÉä*‘HÛûWAí¡IÐø«÷É’ÁF“ � � � � � � � � � �@ °ÊÑ´`—¹)              !@‡±ÏâáË]ÿ!ôé'D7Vö‚^xÿ½Ð©ý ÖwöI³—¼}jv*ôºßŸevNW äÀšåÐ]•Ò㰾ݡ‰ÖzÔ!(mî3\ÔSªð[�EÚóàä~È1 ¶ÄÓZ¾W.cšµð_ÐçW†ÞxÃh·PÓÑZ%‹W}õ5tG•ô¸÷ØaÐdËŒ©4´ëèÉÐ!Ó¥§‹¿™�:â\hªÂa7.„lZ¹Zæ=i�á–é"ÚZ_r©/\Ùæ#Žj‡i`ë[ƒe$@$@$@$@$@$@$@$@$@$@$@¾NÀêÿáë|Ù>             ðYuK|ÐÒMŸA_øl3T\¨6[yæ¦Ú|ÞÂw�ú€DµÛá#¯¼:)Íì^E�&‰é›½ò5è#O}Ý].ýõK�ÿÝßûùsÐ?–Я.)®I�Ñ»úþ_A¨Ç±f‰ïþ5\˜û6mG w-ÿzßm‹ ãN=š-ÖÅü]â-þa¡Ô) —òë.7j}� àƒÉ™�FmY¾úÓ¼ w¯› =eü Ю¡¥ÐCkçAgo8 ì{)ôúÉiPߟ™hdmòërò×\1zß[2[~l?ôìQ©PÛnéãŒY⥎{ô¼�"†q¡ô(ÛpûGÒa L$@$@$@$@$@$@$@$@$@$@$`yt[~Ù             h‹:Œ¥³Îü=ÐåK–@Å·X793~BÁÒ £Ô/Ò.¬[Ãw?‰ÃøàšùÐ=†·X[êÌÚŠÌÊ,ý䦡)(*6{ŽÝªø\�= MvíÐi}?‡~øÉWÐ…_¾�¯}±#Ÿ4âbèM¿ÿô)©�P&%`̵ñw<‹æ% —1ýøÓ™ÐÙ3ÖA�ƘÚ£‘ïwæÍЮ>Ú×’†q92{ž/1Åÿð6ôõÿ΂¾»¦j3ú8øBYzëec ]¬e –>Ô“ª ‡qŽŽcdj„Øë©Æ"             ÃØBƒÅ¦’ � � � � � � � � � � � � �@K°g-Áö¢-o  4‚€«•‹óŽBs‹ÄÆèˆ‹‡F…ˆ=³å�Ql”©µ ¸*°‡âÜh^©ŒaD¼Œix`‡O—x‹ó³$ʯ3JúÌ'r€¡ÅRYYY‹m«î†ªª$,³Ãá¨[ÌO$@Ç!pô¨\¯ƒ‚‚ áááÇ©ÍÅ$@u ¡Àå’;^Πºlø‰ŽO ¼\î½�Ny;WHHÈñW`  �ÊJùí¥¢B¾­‡††š–0K$p|椿~ûùñ÷Ÿãsc PœA<H 9ô7�Gúm¨9[s_—×3w&,!             �NAÀÂ1Œ;Åøt¶NÚå€tDKÌi‡ºe²>»ÄœvÄcjýÞ4Ô»xì"¥§L$@$@$@$@$@$@$@$@$@$@$@$`t[e¤ØN             haüãÊÍ‘ � � � � � � � � � � � � �€Uð?Œ­2Rl' � � � � � � � � � � � � � ´0Æ0na Ü � � Ôp"SœñtÉœy¢«7Aw< - Š‚vIî |Òhè˜q¢C vük^rÂÖ-ž �·èGè–]Ђàhj·ÞСcO…ž2j´kXÇ|†ÌY–ƒÞ:*½ë’,ÌyëI.´³4k+tÕ’EÐeëv@÷îÛ=\�Žï í9h(tøÈ±Ð“‡H‰£…çŠÜ]ØÚ�ó¾‡Î[)ów×Þ,hE¤ì¥{ï c'ž!:( ÚRûŦ|$ùÆ ’siYÞh¾_,4!‚ó¸}§SÆbïÞ½ÐÒÒR¨Ý.׫ôôthpp0”ÉL ªª •UXX˜yQä+++±mC` œ3ýüZè䨭·þ.rssщmÛ¶A333¡%%%P…ÐÐPä“’äÚѳgOhT”Ü¥0™ ¸\r'PTT 7/b¾Ã(++CwïÞ =pà´°°ªåAAAÈë¬éÚUîÊzôèÕs2L о3Hïô ¨ç½�ùžËä;Ž‘»kUs«ôÚm.ì„ùö�Afàz/WPP€Â€ùÄk¢™OKåÍ×ýælY¿鵩9Ûé¨ëò¨öå‘å7F_¶�H€H€H€H€H€H€H€H€H€H€H€H€H€Z‘ÏoE¸Ü4 � �@ç$P‘µ ÿ蹇 �¾4º5¯ø¸(ÉãQ窟„>|�ä»6Ú¬U�µ2—½}ôž¡oÍ?õ¼o–F�tô±§¥µ×Mèu4ßàŒ­´_BÆú%ÐûÅYÕcìiС‰âH`òeåYkѼÿ½*sá‘g¿„®óbÙâÍx޽Ч½zn¿Hh£ŸŽt‰lïìAïùýÃÐ7{žCX숃œzãóÐ<$³ihŒ?ÔúÉWfPÕ‘ €9w¡øËËbÅÕ=ñ”^Ððr¦BW|:©·oÇá¿qãFh~~~m‹Õ3�:Œk±ÔfŽ=Š|q±œC̾ÒÚ ­šÉÉÉÁöu‘w8äºÏÔztv,\¸»POdÕ}Æ;3~üQÞÓ¿è˜1c êB¦“'uSé<ª¨�»Ü˜˜a¢~m Ç«¥¥¼¼›Z³f tùú›9»ïåðáÃ(ܺu+tɹç5jtÀ€P¦ö�A:vYYònu„«oUßMÂÑi_ꤜ5kš¡Ç‰¹=§œr >Òaܾ3È<":›òòòP¨÷Ût›ù´T^ß 3þ|l°áû7oö¨3¨{wù…M¿x³Vç©Ã£Ú—Ǻѿ¡ùrgØ6              ï Ðaì=+Ö$  �H¤À¬¥/CïºéèôuòhMOO\_‰´:fh*Ôï°ÄC]¹Rž�?$Ö#[ñ!ñ£¼zËyÐU[Þ†~òÌ/¡Ý½2ÄŠëbß7â*¾æêBçfEŽ¢ÄaÐ çO„ gØæ…_@¿_)õòV¾ ½mÊRèê?†>Í@¨õÝ{ÁèEò !¢™âÝÙµf3´ëDq(Æå¬…Î\´Zæ‚x—ìy«ç¸³ Cô©;Y9oÇ èºƒâÈl‰$ÆÉ°îáû…A;‡‘R<%‹^‚þñÆû ÿÙøó1Œ£%Žät舃 )Á2¿¶-—Y³j¿N!)Ùø‘¬{ÙŠÕÐ'?~zÛ‰Ë;†Ò†=Ÿ‹Gù—×Ê �©–aG2ònxzïo/„ž6(Rm;¬B¾èà:èÌW¤ÎÝÓ$Vëžb±4®|í)9Aâoýçº~PñúÕŸÄáZºy:ôž›MÞbG”\õÔkÐ'® Ms˜ž«x%?}õw轘ýjÏFè›w\ �IúúÌY] ¦uðÉ÷“P->šÍ³(’D“�‰›vF®¸«³ˆgÎ?$Ú%IÆHÆþ¹R‰õx8§ê.ñ8"~ö/VŠsôH�Ô­¨ææTU*[ÎË-�» ENiU¥S–ØýäÖËÿ8Xe±+É í<É•»�}å5Þbñõ¾ô~胷ý zÆIâî� þÙ¹ë*“qÙôƒ¸ä½û¨Æ.Þõ1òÝ&^ä_=óóZøè–dtJ~z zç-o@«½ÅÆ<ºúY)yê7'C»†êv*‘ÏÛ"3eÚï }îûLè¡/¤ý¿{\öûõ““ ÕFt䬑Úg‡�]fÝzÉlݲâtß¶ýÐ~‰= %æ:ºâIÝr›6mBkªªäx`j,u'˜ãnªNËÕ+éï/×&õJ*s­¯QZÕÑhv—j¹ÖÑú�më·�Í›åý%·X½Âº/�Ö9bÄ|LII�š¨ê$^¾\®}{öìÑU ‡‚ª÷ëä“åºÓÙ’ífç¨ÆkÔ³3;$$¤ŽÎ uók¤@sTu�ƒæ1ª]ý˜Œžý®¯{ÑÖ³:?6Š€ŽÝâÅ‹±–Ù[¬#8l˜¼'©OŸ>PsvGu™ëºf¯äºuò +9Yîºu“·’tžä 3Hi›Ïxš7—tžñµž}#\¼’O}º(oôõ‡^€ž7òQèé±ö‹e>˜\b+ÎÜ´ º:ÓÝ¡+Îã-«D·Å�žqê¨Fk.ß·ù™+…gDº¸F÷_£Ýð çmžƒüœMBØßÏÌDò±ƒÄKzžØJ�I.|ÎÝøtîY7qؙбÝ=;Ʊ¸S&{ô8ôûΗƒ®»PfDÜC2ƒž¸úDhüÏfo|ú9كŠ>ðœÿ}9ZŽäÃçˆ#y®õmyK^�¾9ûèØ‹ÅÝå>P(É)¾óïþù4ô[}C€MæÑ©÷½ýÇÍc¡Ñæa·É|�êw>ô¡Wed÷M¸úï=ÆÞxù®�Ý64j™Ô3È[6ÁIâê"®ˆƒåP}‹€ƒ“É[„^ÕÓgç–+—»Oý[»wïöj[�µ’:GÕéèÎ@#«çXÝoÊ\ÙêÒ°°0¬-ñ×5é65†kcý 5ÛàßÖ"`öŽèè¨'òÄåúe^jn�ÆÐ�û y³?lÆ (IKKƒšG;pò…¤xÍ.½ÎÃß—-=_™ß‡¡óHï:Ì}_îEk·ÍwfPk÷”Ûw' o1—‡‡‡ãã AòCÏcf2Ìwl7ëØÝfïH€H€H€H€H€H€H€H€H€H€H€H€H€H€ÄÁD$@$@$Ð r1írªxßøXœ»ÿ>pôÖ‹zC«ž"×@ò‹ÃÂq7Þ ½äµ•Ð×ö‹g±x÷¡ß­Çä¤Iâ4ªcqÄgĘÜ1úÆG» ²žÄO½z÷ ≬Ç[,Uj“Ñò‰wàóý×΀N}^âðå- ú�/ ÿké…Ô³D²‹Ù°Ë`qvŽ/w™š,ù‚ÝâŸ^·¿×M¢š…U•¥åâNÖu�í±Ëiø•íâ ÷kÄãvU¨_T(#ã2ÚîÁ*‹�=É`D¿ úÊ©Ðð”$hMÌodH²nôèË¡7œõ�¬¬,ldýúõµ›Ò¡ïØ3gNm93m?ƒÈÜwèõÂÜ^ÙÍ4˜ï<¼þ5¹ó aOI€H€H€H€H€H€H€H€H€H€H€H€H€H s¨Ö×9zË^’ � �€ï0"'§›�±âSÌ:’ -3ü‘uìŽâš;´sT|C’¢ð¯×�žÐ¸F<&u >úËîâ­\¹Nö›ý£x.í¸:h€8k-™ �ïþuò<õÁrq‚¦ GuöªUÐÂ~'@Ó£–Æ0¶1\CCÌýôUU†KØ&VëóB|–$uŠï„î˕ȬÕÉ%‘Vƒg—ÉÙ»·BËꌣÔÕÉ~]‘ï™*ãX×M.u˜ŽG@8»\:R?×õ Æ�<«vcé²o$¦WµÁØ&åÉãC#ÜF …õ¦€'¡|Ò »ÏçË–Šþº`ÃЉãÅ_îõÆP×gR+Î q“§Œ’7"$S¤Uúl—ÙíýKZ¥ Üh'& ~©ìlyo‡ú¨Ôy䈼ù@óêSÔ¥ê¾rw›}Wf‡–ÆTï²Ù7ìîÖØÉ:ºu5¬æ}uâalõ®«÷Nã&šÆîN—VoŠOî ??íRêÎ×X›YP#‚›=Äž<ÁÚ9oŽj�MZßì$6ãÑrÝš:ŒÍK™÷::îgT_h[[¶¡õf�ž»RRRê펾ÓB¯wz~‹�•{ls:|XÞ§Ås�™IËæõîbá…جÙÏ­ï®Ð3ªùüÙ²{ï[k½¤×2o¢Gë} ª^q4vxÄõ˜� ¿~4|elx;�g©{ c:Œ;úmyTëÞÚg0�;º¯ÆÒ°nýFüœlÝN²å$@$@$@$@$@$@$@$@$@$@$@$@$@$@î<Ú-Ü«²„H€H€H 5 ÈS\îq×<¾ Äpþå•(¹«Õf'er”Dçmôa¡=±Ö ãÅi3ƶì�’Ý)±ô\ä¹T«ù#Å��·ýGèÚFôâPñïZÝtbKíZí%·CÅEF c»<ùf¶yã³Í欒­¹ìF ãzàŠA²$stÓv‘ú “âß»IÔSòO‰Ä¢†ÃØS–{$à”Aݱ^×Ìq̧ êM¨gÔPlså‹/|ÃjSð¸‘(Þ'ÚˆcÞ?õ�“ãÇ¡c#ùÊ-QâßZ�5¥¾›ÚbÙýŒ9å¡Rư \<ýᙡõŒ…Sæož1:8>ù�z*¡˜‰Ú�€F]-)‘낺Ü4¯êpÈ9Êì0Ö†ºûáÌÏΛŸpW׋Ù¡wæmªÛXÝÌêñÒí›·Ón€¸c÷1;ËM;QV}‡¹¹re7óQç¢òQ‡±9ê°{´Zó ªçNÛDÔìßÒ=6ì0Ö­i;u]s;Mf¶Õ è»Ì»Ñs¬:ÑÍå�'ßö3È̶áYi®É|ëиÅÃX÷)ß7‡ V»Só²¶�hí¤žoó;-¼Á®ãåýZ¼—ð†ªÖ1ßQk‰^G¼ßk¶åQ­×}ýVÕzä»té‚�w6¯¹‡ÏZ3·L$@$@$@$@$@$@$@$@$@$@$@$@$@$àê{\ß7šÆV� � �@§"àÌAw3÷^ØêŽ‹ß7-Y<‹Áõ8çÄu$¦âÚ$ŽÀÒ ‰¡[ŸÃµ¶Z}ÃYÛ­o7,‹²‰S3Ï&Þâ%›öB+·±xý¬‘$Šmá^ñ/ù) *Þa¤ñzî<(öá”§@G¤nl—�/(�µìAòÌuDܲ&†±09&ÉxQ½ÇA'v“í(çqi/\—õK×O|�æÁtÝ,uÖHÛü‚$ª«Õ|¨hr»'á]´î3è¿¿Ëü¹5Q£‘¿jò h�‰òs [UÆn|Z_`* ï‡ÝùT¥]œ‚I=úBCm» Å6ñnØ!#[ì’rï#"£r»¦¶ŸAæîÊhìZ�½A¢A‡õ9zú`#þr’Ä[|àÇ +Hý.ÃO‡Žé.3Ú<¿ð‘‰Ú…€FðR‡±6@Ÿ¸×XÂñññ(T¿¯:?Ô)¢nE÷8sfwˆÙ#×Mêª4»“ÕQ¤/uIºo¹fmþmO:¾‘ÚÜõΚK:O^]>™™rM7ÿ:³tîÄÅÅÕјŽêîuw›·`žAµ«×fÌÎ-�5 ×Wlj9šxgö³ÖblãŒòßµKî¾Ì©G�øØðšëw¤|{Í 3Æg¥¹&ó­A 'G¾á®^½ºvã:Æ�“o¬ÁÁòÝHÏxt×"ªÍ´Í Ò·¿¨ÖîºÞŒ¶'#C~UбKJJª·& ›F@ïô¬eÞBgó•šûÞ´|[Õ:šÖNoÖÒ»Jów+oÖêuù[XÇè4{A$@$@$@$@$@$@$@$@$@$@$@$@$@$“ !� � � øWñv4cõ"qÔU'‡x‹Çè­ÇujBydœ¸î¶=Pu4n;pù [h=k¡´þ$Ï�Åté ¶-3ªH ÑÌýYбðÙâ,`Ü/qÎö•Ðeä Ü£åÈüœ\âáÎÉ”xxeiâG )/õQ£ª_—hä#ê¬ßp].%  hb?,\-OǺW\‰š ç"sÚ U·>Çœø‡» 8šàOížbY÷Ð<‰T´ý‰ú9¸ÆêˆüqRù>TXµø'¨D­IåÙb½,6ü‘pWHk÷ï> - _ΠA1Ы·B AOÙ ]³W\‰ÛÓ»@{Iý§ôµýº*Ϙ;Áq¿} úæŸOƒz>ne›¥…ùPq‚פà®â2oôC•2¶ŽÈc�Ÿ²#r ”Èဇ� õeiç$~ñ£Û6B5˜{pjä{E×?åü"{aéðâHž»^â\nX½?NÞ”P÷=(`"�V' ž�±ªÞ}òýèQy�…ú«4–ºÕµ 1†ÍŽF÷†êRÝfk»Ô�¤ÑŽÍnf÷V±¤¥ìÝ»›Ò#A·©ÇIJJJKíÂBÛQ·®ó¥[Ý<:¿´Dç”Î5‡Ã�Þ©G_ý¾îÇ­®«å Ï �›ZÓ›ÒºGó¼Ö6¼ ‡�4UGP=ÜÙÙò2™={ö@wì�ë¾yø¬³ÎByçt{·ï v$�G:+u¹ÏJ­Im ›6mÂf:T»ñÈHù=aÔ¨Qµ%Ìx"à 3ÈSÛXÞÚÌ1Œõ>D½Åžö«G‹ê®]»PmÕªUЉ'Bããã=­Èrðq¾ÿÕ�dóH€H€H€H€H€H€H€H€H€H€H€H€H€HÀªè0¶êȱÝ$@$@‡€S®sÞºÓ0IJTb›­ï5S¡ãâëºRQT�¤â¥0�>2‘@«POal¬u;@Î"fO•æu©ÆXU÷[F†¸äu©z%Í�Tƒú´ÚƳ¨> uòiT6Æž4�HËæu|7nÜxÌfÕ[¬ž°cuø�êË×¹ jŽ!±íÕoª|ÌñÂÕïëŽHëk¹§y¤ñVÕ÷$ïšq�…ì¾eÝšz(µ�Å\}ÆîõYÒX³fÍÂ*êÜò´®¾¡wïÞ¨0räH¨§#ÁÓ:Ry{Í 3C�z]kÚyL¯zºOsÖ¼Gæ•€¾waåJy÷˜^_”ÞøñãQ«¹7lj/Ì oÚÉ:-K@ç‹Ùa¬Û×”””„�êÖ+ŽÞ-ïß¿åúN­¯÷$ÿûŸ¼ÿìÜså}�z/­K©$`üÅ*#Åv’ � � � � � � � � � � � � �@ €¥…‰H€H€H �Èe¸hõ o´Ú=w*ò7^:åÑ]‡…6¿. ¿¾aô×Aóòä™âîzÚïÝ' W –˜¬îQ@+²×¢|Æ“€ÞþÒ\hfõî‘­I²žuž/X!]z@ÓŒ¸Ä>Z7Ê^}¤°â°Ä{ÞvTÌtéMq¸áv‰;´´TFÊ.þQñŸ7UŠK2·@¶l6Æ!n[¶ÉÒÒÃal—­†[‡4šÛFIÈ;�ârw?<«›àè†ÌiçM*ùH¯ ²åòÒ"¨ÙaìbøŠPÚøä(ë‹á¹º¹ÅÒêRÝ�W­2Öm7i§T•‹o]½šS%眘�rNKsŸ5(®›üÄmÖsXè�¹ Ù›×@wt/EŸHÎ)``jSf—°Æ6ï^c�ªE êkT?œ»£QýUê�TOƒyk­‘×}©»Ký­±nS hÖ¬,yÓ‰&ñ!CäØ9“ÎU÷#Pùè ÒȵêòQ�yö™é™#…»»u/999XEóQQrç¦û2oÇS^ë«/_}Æê9V§²§µXî ÷cÀ}-}sC÷îr'OeÛÏ óˆèýç+¡'&xºÝ•ÁöOp¶•2:*È4*¹ªd]qC×$G°Ìž€÷ˆfKÌ e$S+kã�Ð-9BÏ?ftXo9z�Í/²'êí+§³y›dVn^»š4®74Âû ¡6 ´>u$=z»R£'ï‚z”Ícï]�f'¥9†«§þ©+Bc¸jõÙxªÏòæP÷ɲeòn³‡2-- %]»Jw&O”Xv¶œíõØV¢:„ÌkiM�Gêï1Ï ­©ž`=òÕ ÙØ¸º_�Å:¯Õ™œœŒ]¸ïÑÜBæ& ¾aõªªoRÇK9ë¹43Sýö[¨FÌ=å”S�×Xà o¿s.mÙ¤[ӸŪ:×ÔùÝ4ºM_u7m;�g­íÛ·£³{÷î­í²ž‘F�U[ÂLKhÙÔR­âvšO@¯ÚS§NŦ¼¹vëÕÿÄOD}½Y½zum3ô|¸mÛ6”  ßp™HÀ*øó‰UFŠí$             �&Ë…›•¦…wÁÍ‘ � � ¸pIdÓ�ï<}x¦<¯ñYý¯Fþ¡[O…Æz}‰¶ÇŒCý{þ3ê¸ófèn„ç­ƒÎøëEñï˜äïÝù= }òÎ)Ð�//‡Vá_M ŠŸ_¸×-©Yχÿ–‰eËò¡{Фc‘½O€ö‰–~ç<-pŠã4À_––Ú ÍqÊ3v±1‘К§íÄ™¹Q"E­:Ü 5OœŽ+‰zNâüÞ³Já{L•ü†áÓäq= îá•M;nÖ¯ ú6êÒëDëôR|Û¹{¡ë|}ùÉ' ï-~?üíè9ëvHÉ»AÏHÆMo=)ØŽR³Ã¸ªD¢VËè6>UTHDê*�ÌÆê�1fWzã·èƒk´Ø ’W°Kb®¯Ø!1¿�±ÐAÃû@£ÍC‚ÏÇO²B´1—{í_€ü¶#â;_¿O\z'ww@e>3‘@{0ûáÔ5�F©¯Qc ªsE�ÄçXK5$$[.(�w3¨S=yžè^T5Z¤»_ÓÓº,o,�+V`uŸèºêÉ3f >zï#oì~­^_�O=žKJJÐ�ê+U—°ú‰Õ¤y�wê6³ÕÙ‘››‹íhýøøxäÍu¼'¦sY[¥ªÎ×ÄÄÄÚí{¿5ÖTýúõCFÕÌDGV£€«£K£çªÿxæÌ™¨sßB<¹  8.¹òæ.z÷}ß@©1J¼¤7ýõÏг“›òDW`ò©X÷ÎéâR=ïfy²þ›Y³¡ó–m€nÝ_�í'{9qì™Ð)SDÇö—±Áv‰»ºöè~¨ø+%‰'/®‹xþÜ#ûÊrk¦²éã�q�%†ž4PÚ�;¢¼mÈÿ¸YüŽz‡„ ’d/hß”Ph�OQ«±=Ä�<4É\-–ì!Â?¨f—-¶Ýް!�Ýzâ”; ¯Œ |ÓEÐûþ+£œùÃ_¡¿{PÆè‡—§B»É Õ&ÙBp¨›Ã8WK¥�RY¡¼Df™Ù�#ó¨#�`‹Í —œi %’·Ë M>á$hŸ¨F›‹±Vu ˆC¦ï 4辕ò.{™Œf…q6 BމÚ›€ÆàTW–:€5Ê£:µÜì:Õöj,áðp9_yŸÔ%¬n˜ÂÂB¬èM$cõ:GGG{¿#Öl��;å�#7n¬]KGäÈ‘(!ùZ,õfÔWªNbõ2&$È]œ24{¿Ì««[H]Èær�qZ¢ÛiNÜnmƒz”>ŒÍjkÍóݼwæ›C@GªwïÞØHzz:tölùÖ³{÷n¨zÊçÏŸ�¼ŽˆûècQ'L-;ƒÔ¬Þb½v(mïç‘^×Ô�§×)ó èURÕ\μ™ÀÒ¥KñÑìhT/#cx›)µT¾egPKµŠÛñêæOMMEc¶nÝZÛ¤¬¬,äõªÄ7÷ÔbaÆÇ 4å÷hï›G$@$@$@$@$@$@$@$@$@$@$@$@$@$à �:> oV`   �æ¨Ø÷VÿË-oõÛìjs1òãïø;ôþ_HÄÍf]žÄÔç´Ëjõv䎛\GQeïV‰à›W]Y¢Oïm†ã¯z[íõÇ,qãú „V„Æ@úˆûpìØ$hy´ô®ÆÐ(~ÓÈôГcÄûè4<¦~�â�2¢‡Ô!"’{ˆâS{ð‹oÖM�>ýaîï _ókû'Ó�ÿ¦s ÷Œ”Ñ”‘–$Ãâ’¡±RlÛoLÇ’�‡�ÏË}£}9\r3÷CÅ3[“‚ºËS³ËšbËümÅdèÉCN�Nè&Îì€(‰÷Ü|TAIâ)Ÿp¦<\gÒ¢„‰Ú’€úcbäê£Ñ9ò5¾£ú±Ô•¨­2Ç3V¯¤nAýUæšÞ÷Bý[�u'{¿}Öôž€FÞUףޝ®Û­[7d–·ž0™ è1ov]«sQg�.5{uNéRó Òr÷¨„êï×y×R‘>Õ?””$÷™êé÷&’«¹×Ì7–€>å¹£Po·z^ÕÛ½~ýz”�7®±›íõ[{ %ãÁ@IDATÅÅÉ›]ôºæ#Ü€ºVZš|;Sžyærî4ÌðÀùæ¾cÇŽcªé{,ÔmÌ¢z?ê|1/Z¾|9>®Zµª¶PïC.¼ðB”¸ŸKk«u°LkÏ ïqé\ÐûIºT½çÖö5õ¾Â¼_�È®×#=ã™—væ<�j_}:Œ}ytØ6             hEͲ0µb»¸i  èpœ9ËЧço¾úÚ*õñŠÓ¨û¥OC_üã©Ð¸öz”«Rœ‘[—‹Ï¸:EõDfH/‰ ×^�ªiJ3þ‰ß:%ýØXŒ¡ñâ-uÛ°ŸáBîâ¾À­& |“@H¿ hØcÄñðåWÅÖ–·òùb‰N}×È¡Pñ›×¤@Ã#>Ô ºÎpìÃÂÌ\§Téâý±_…êÙ‡$^‘D •d8h{I£ï7c¬éCÒê3HÐ8¢ZÔ¥o—‘°ÈL$ÐÎÔâ;Ó“Ã@Ÿµ§§ª�‡­v¯±9¿ûî;lÛ7W½³§�vÊÕÉÔ ;·ü&Õlî†'7°úÞÔïh®ï)¯Ì=mÍÓZÞ”kK:�Ï&­]GÏ«·uûöíµ»Û¿_¾ã¨Û»sŽHkÏ ïg\í “á|9ˆ— PÓü¾ ]ÑÝ1ìåk«••ÉÛ¶TµPgPm…N•i½ä=FO÷“Þo�5Û†€û…ÎP�~íéþ¿mÚæk{áQík#bn�u¾2÷‚y              �F Ã¸Ñȸ � � 4–€«`VyëŽk %R +£-jü�ýï×C‡D4?v'6ÓÄT¹SbÍÞ¥í’�8R΀ŽèÉ[¡Ád~ñhjj³I\Üüûö†q©Í…ý⻣¼¼¸�m™ÆñŸ·Ù�{%ñù]B¤Ü›äÌ@­íkBkf‘DÑK¢2Ž. 0‘ �@'$PZZŠ^Ïœ9ªn0… .“3Ï<56¤–SI€šCÀý�EEEØ`gv7‡'×õeaaahžºê›ÓN�ü­‘Vu;úö ݾ–h$øæì…ë’@g `~‹ŒöWße·u†ÑïH}¤Ã¸#�&ûB$@$@$@$@$@$@$@$@$@$@$@$@$@� `-±«’ � � xOÀU$ñSßûã•лߕø¦ê>tœp#ò/½q?ôŒ¤öuñV¢ ;|]f„|ÕØ«}/; %ÃÃÛÓ÷Œ0‘@ã¸äx./‘ˆÂu’Sîyë¹ï î‡òQçHLkÇÆ]ÐââÐÅëöB+Gö…z3?]2»\T¿âFAÆN„ò M@`" �NE@£?ª·øèÑ£µ}×øv“'OF‰º¸j1C$ÐLf—d37ÅÕIÀÇ ¤¥¥¡…ªMkª:ï?ù䬞››[»‘!C† ?`À€ÚfH€¼!��]ýƒZmeuçó]2µ@˜±þ~e‰ab#I€H€H€H€H€H€H€H€H€H€H€H€H€H å xc™hù½¶ä]eØZÖ¦%Ð…?Š‹kO¶¸Gb»‰_dø¸±ÐÁFü9k:¤œhá.éÝ÷ó%ºä �gKê7:bŒÑ»¤`ä­Õ»ÊüÝhóªÅ+¡;óc¡'ž;Ú'¬¡~8 w£ÎÒo¿ƒ.Þ|˜::lä8èÉ AøçK©i=Õ4gݶgÐèÖVIDÉ�ËçAç­ØÝ_ §£Ät™¹'Œ=:ªG$Ô'â>º$öXæ&‰j¹x½LBW/9b/8Iiõ=w#g¡ÒÃÒ¯Wÿݲy4£JŽö´>ò´æØÓFC{EùØI¸Ñ=E'êI®Ü�(ýö»uÐ\›¸ë¼™ãõlÈâE®B9ÞûãÐ[_rÜÃÅØ÷*èóÓ§A/ë+‘S:÷aq+'Wîbìá½×B«Ÿ‡ŒŠüg‡Ò` LmB@îy ò‹¡a‘áÐúή^4¤t'*mX¦³MëK,á”ô$h=�Âí²tè„s¡±/¾-.–y°x†\¡¶]#ã��’œós–ýô°´_S܉g#3*Ý'®c5�â_  �V'`Ž[œ™™Y»?�`7iÒ$”$%ÉU‰‰H@ ””” £±½›ÆÄå’û±#Gä—"sÒ8¬~~M¼¯4oŠy  �I@cë;`šÖA}¯Ìþýû�Y]ï÷x : ?ú8Þ3ùø±y$@$@$@$@$@$@$@$@$@$@$@$@$@$ÐZÚ×ÕÔ¬n¹ÄñuÆÐGÞY- —§tSãÄ¡²lÞLè?ùzÍ#!ò¢>íïâB3¼N�/cáKÐÿûû÷Ðý.qÛ$Ä@lËÏ‚Îøà[èeIï.õåÑtf,B ß|ã¿Ð…«w@�–Ë ¶ Ñ�.gL€ö “÷äÊ—ñ�þ—G¡ÿÝ^ ЧfàÊeÐ>•¸›cÿ8ôîI)RŽí—šÓÓæ¬Ûö=nZk]Å»ÐÔY/=}e¾¸u+eàcor•á9þzÆWÈŸuÏcЛFÇAÛÁŸå*Â~7}ù túWË¡2äœãrÉ<‹Ÿ*þËó ‡12?'ã¼´ë»—QòÌkó 䀵ù…HÆÒeóÄ…ößÏÇCïxìNè„äh»¥¦õÔSs]ùfÅôç /'Ž §sÜÓÆ¬[îÌ?ñ[w^ ½ý­ Pu:ú^Žü´÷ÿ ½nHËž·åŒZ’_ ˆw¾WgBc¼V¾ñ4êÿk¹:2åZÙý‚; ¿ e"�Ö'`½[¦cG·]6Úÿo/Bï:½+´1ï‘{§ƒ³Þ…¾½Uç²6[”¼»â¢±â®o^gõ“/ÄÒ«z¿ }j�¬›½è èK¦BÿrªÜ~I½zS¹xš¿zë=èÁ꩞ˆüWN‚ön×<ÀD$@$ÐfŠ‹å2 q‹ÍNGõOœ8KSSSÛ¬=Ü ø>õþùçhªÎޱcÇ"ßX?ÖáDZVF†üÂ`Náµ±[3o�y  �ŽJ@ïܾøâ tpРAP�áÝØþ®Y³«èM×µÛå÷ƒþýû7vS¬OíN€ãv6€H€H€H€H€H€H€H€H€H€H€H€H€H€Ú‡€…]U{Å_ûÊtñžÚFßyþî3¡©Ò×VºO<|½WÜ�ï½9:æñó )ù/rg–x_A¼ÅÓÄõòèCWC‡ÆÈó)%{ç@_|LèÄ„öæ&öí†{µi”ŒuÛ^ßÚ 4rï÷¯AßXPvíãÐ[Εg¸â‚Äaœ¿Ež,~æÁw ß½ütÌàßAG4ßZ!I{Jóå ê::8HŽØŸöˆƒÓs’cÏ^–-Išýý­â(×Gbl‡Ùó¡›g<}húBèkˆÏøÄ?œ �ôh^ÃÂVMMë©{“Ä#˜·ê}èëßgBåm�/Uf-E§_¸õ èýï‚VûË9üoÈyû·CåLز^¾ïØæ—> -»IöòÐå'B=Ù3+%¾×ªÿzÃC_C%j+|ð‰¿€>ð§  éõ™1¥ ´(WþJlï…Ûï‚~¼FŽÄâsw@×>ô4ôá'CûÇ4|8–£Î¡…ÿ‚ÞyçÛЃ±ùä³o…^Ô cÞs êüæ9þ_»^\ÎÙyË Ï?,ïKÿŸ‡ “»ºµÁ%W„Ÿ¦?}ôóCÐêùÞ÷Fäo9¿'Ôm”1‘ � t4ùùrŸ¯ÞâÜ\yãŽ&sÜânݺÕó/ �ÞÝ%ßç̙մqãFä³²² ãÇË7å„ùÝpR7ÿìÙò»ŸÓùówP�}Èwy&  0ÐëÅܹsQ¨× %K– è�|¯×w]„‡‡#ï)éUlíÚµ¨°nݺcªéû-RRRŽ)çGð}òL$@$@$@$@$@$@$@$@$@$@$@$@$@$@��€EÆòÌ`Îö Ð=Ubž:iühhJðÏ~­�ÔSQ2qäÛÐe‹‚îÈ?šýs|ôÉ$½ËüQž²\Slôîüó‘?!æç(®¡Ý& äê_-€.}aô«I� qPß| À¿ûYhÛ݋ڪ¶BÞ»ùèG¥ÀSrËØýðÝA¨½Û•ÐËÏì ÕNFEþ¢KÆB¿yf±è’ÐÓÏOƒ¶‡¦õ Fjκº…¶ÔÆ·V|VÝÏ»úd_qœwí'OZ…TOJ9Eöw×”±B×Ï‘1]½SÜó#†´¹Gˉý¿ê~Q›<ûœ;_¼n¿�&OœyLö,J?ïOÐM††U¬º†øJûžz´ÿ‡ë¡ë6í‚f8 ‡ñÏSem˜šÖS·º Çÿ‡¯~‹%™±ƒ¡CÂ6A×r«Ú ä)Ýó ôñ~}ÎðX«×TQÒ{X24ë3ñ—ßû¶xÐó e•B+ªd ò¯�2 ï{]fÄPÓ„pÉóŒ¯Þ,å//owñ¹~û¾´äÆ+φŽê“� (ƒfï‘ú³?|úâWòž†@œ.�…û ?~ö/ècÏ} Ý^=�äŽô¶§o…޳À='šÉDÕôÉú äû…>/´Tæ�9é³ùóçÏGa` éâdª¤±»z÷–™ÎD�€º¿ýVî�‹ŠŠŽé`DDJ6oÞ UJee%òªžæšy#þþò%á‚ .€ªcÒ¼”y°.�ï¨WutUUU¡;ê0þôS¹¿R‡q�=��Š’oU:#t®íß/wk{öì�š½Åºå“N’o7111P&  0Ð+…^e8€EzW¶{÷nä÷í“ïûêîÚµ+òf·±¾KfÇy/Zv¶¾­Ùê)¿'Ÿzªü.§{©Y¿$` íõjÖ ÃV’ � � � � � � � � � � � � �@&`;ÙÑlGT44Ð.~Üì‰!ç´I‰<+IÊ]"6»Ÿøü‚ëä]*øX’Fç–'%+ ·br¢<™"}þ9ÉÿôÇ”ç%{¬†®]#›âÓÅaìÃ�ŒÑºÆ¥ª=â1ZU(½�™$¾¢Ôš66$å὇@û΃þ´F¼ËGχq<‡L~ò\pÏþ¢õ$»ÌÖˆ(ÃÝh¸ÇŠËä|—²î,¨gm_)ò EKÂDêI®2±¡ÉÃÓ6ÿ9kEX¦cÒæz’«…ë>Çê×èÈßÿ :tîcÐNá0vå¢§óž¿ ú˜á-FÆ”ÄO¼îqîÕÄTéøÙr®»Ó¸®™+ÛÃúã㸠ú݆'¡_î‘clû·â}¼ÇPdHŽÄS±ôÆÊ>vQ/h�ï¿�•¸ˆZŽ€Ÿ8?FÜô ôëÞáÜý(tÆ:™;Ň–@§?j(rÇOrJ<ýFèß_xzY_¹¦xs¢µ‡Ë,»þ¹7 ò®…>÷Ý!hö’ס¸PÔcŠ:‹~ýW™G÷ON‚Zô&Ûc¹ £¨¨¨@ÕãeöiyÓouƒyª™ššêiËIÀÒÔ‰²téRôÂÝ[¬]ËÉÉAFµi�U?eÓÖåZ$àûúöí‹FªÞ¼yÈë/´åz}iø*cî£Î—‘#G¢ð„äÞŒ‰H€H€Ü ¨÷W¯ê3^¸p!ªËïiúÆ u«ºoÁ½$>>…“&M‚:ò» X‘ÿKÍŠ£Æ6“ � � � � � � � � � � � � �@ €ùÁÇE ì©E7!m4zV× Ÿ~ø2ô½d‰7udWhPÖJ蜕åиÓO�rX¥§ÒÎàP‰ÏçgË‚•ÈóþîN{d,Jü%êå–=¡G çYx.Š-š¤3yû¡.éR¯xñ¤â�=&ùE ‡x£×»%ê@–Á�ãc@Yã£Südûåy.— 49NÂNZeö¢©õ'—ø¤ ‰c~æ¿g@w¸ä}§Œ…&YøÑ9ÿýô ôÕ¯ä,ä%>×ëOwݪ¹�N’ŒèÆ´G‡ƒ±Ó´I÷C?Zr&ôÓ7^„¾üúÇÐù†Û™c’#j J&\{ ôöÛ®�NêµðÁˆÖ3Yš€]žÀí>é.èÛ Î‡ÞðÅGÐéo¿ýxÉvhu¼mäŽM²n⨠¡·Ürôª‹N…öŠhʘ*óè‘�å󤟅NûׇЅƵ ™Ÿ“CîLž!{¼ó^iùÕãä.Tæ$ � �@ç àMâÎA‚½$�¦HNNÆÊS§N…nÙ²ºiÓ&èÑ£G¡ 'u§§§£Úðáò®šØXù�ˆ‰H€H€¼! W�U¬WŸÍ›7cż<ù�ºá† úN‹ àþ oƒKIÀ·4åw4ßê[C$@$@$@$@$@$@$@$@$@$@$@$@$@$Ð$xäA-QÖóïÙC¡Ë—Þs-tçŸ ÷Éã·"?«ÏhhßÊÕеÉA¾rÔ:‘}åñ»ö�µ ]±pôèðqR¢îáŠ,)ÿ@ü.‹Ë 6Wa´T²*•æ£?.Ã_î)$l€„Š ’cØU$±TKª õ™‘�bŠ/¨:¼Í›³V\õþÝä˜Q7lµ/7þض¹äè]þêÐWç‹û6«PÞyàòK�žþû{¡¿-1Œ­wþE£�ä*–ç¾g¼ò9t¿côöë'@“ü3¡�(ÙcÑÙ³þ¶êú[{õ[Ž£�d…˽ô®g ;·í�6žÍÏ+ D>2.šÒ«/4=Vœ�Ö=Ñx¦IÀ?²7úuÚU÷‰^ùÿ Óî‚îÞgœKs�{§Ïar�OëíÝMÞÜÚBCúEÊÓÁüéMè¹·<ݲm/4óˆœÛ+CdÖ'tíí×;ʉ LV&'3è†Ä1ÏD$à �~7eÊo*³ �Àq ¨+kÐ ù­Oµ°P~á9räTãJVVÊ»»‚‚‚ ‘‘‘ÐÄD¹££ ˜H Qüüä‹Ó%—\Ò¨µX™:*½² :T-((@>;;ZT$¿Bhlã��äõmúJï QÈD€@ ý¨ÖH° $@$@$@$@$@$@$@$@$@$@$@$@$@$ÐÉXù¥êUò|džæA·Tt�Ž8E|{‡W,�./�ØÂˆÕ´´Tž@´EŠÅ I,*!σ^1Jz÷�9Ó ÿïð2èÈTq^îXµº­PìÆ'¯*XþZ¥‡hªI¼ïN§Œ Óð¿øËó õx¤Ü_�å2£¾Óª¾yt¤ó&gú¾üC‰X¹¾"zòEg@Ó-|XË‘%g§®iÆ‘»{òY%‡ «g/€þ4TÎZ'%X°“.9Énùô茽=tôíâI:=IÎK˜´LíNÀÏ!ÏÚ÷jh»·† �&°Ë2*E<ñC mò–š¼b@dÖt¢¡MÞ W$   h �ðpùe@µ1ë±. � � 4—@DD6¡ÚÜmq}°:Œ­3Vl) � � � � � � � � � � � � � ´(�ub¶è6Û`câ"=ðíóÐgÿ'‘äNþãSÐÛÇK\F[�xø–ù6ôµ�>ƒ>ù„¸oêrhÿ�úªXàk) -šxç“PÇ—ŸBg-ß]¹IÜŠƒO¿zÕñÜ|{ŸpX-ϼ8,Ò94Õ‹$� 碿aW,,’Íõx‡�R^\,KìF<ãàÀýêèIÞ�1ïUè+såÍŽ·@¯'±ô,üT‹]ž†zÙý†BôRÎW»—¼ýÛß?�>õ”ĽxúÉ_A{I&K$™k¥Û$nñ«3vC]]&@‡E‹szýQ›KÆqoža4v‰w|÷Ok¡kä Ö§2´c�¯Ð!&          °$ ÿ_Œ%y³Ñ$@$@$@$@$@$@$@$@$@$@$@$@$@$à3,éÄ,߀³f¬‡V¤_ýåñ‘3ñjùîÈŸ|ù=ÐÈŠ» ÷ÏøúÅÊs ýÆGC­Òk{h*Z{ò%· ©“ª¶ˆÏ¯VHoÂzJ͸õ€t&*Aœˆ�v뜂b¨:Œ‘©M®’Bäó +c@º8³c;‡ÚŽvÈŒ [þzqÜN{q147î4èÝ7O‚¦X9Æ:Ú_O ˆDaúxyÛÁ¥Ë€>5ÿ+èœ-@{ ±ŠÅXFmïŠÙÐ�2#�’ùÑúÒV~:í!è½®…þmÚEÐôêS6²L$@$@$@$@$@$@$@$@$@$@$@íF€ÿ±Önè¹c             h_–tð¹ 3Aí 3 �DÄŒuwªÙ%2hzÿ~Ð ×\èîG N›8ŒÝ«£ÐR©­Ý¹rô K¢O<¡Tbw¬”Úê8ºaÓh¶³4Ñô¨Cù^ñ/n.—¢èþéÐÓR|dòIâL-Ø,q|Ÿ~Rt›ÿ@è•÷ÜŸhí9êt:Ñ »Ÿˆõ¼ÏÀ.Nâ�Pc©K|óù…åP—MÊë©�RßJÒòäSåÍ�s‘»ï_c/}óE,�™ÑzÁmW@G$È;8C�‰H€H€H€H€H€H€H€H€H€H€|„€üîÏD$@$@$@$@$@$@$@$@$@$@$@$@$@$Ð XÒalWqZŒüo÷ò-«¡›rÇAÇ%ÈI{wí‚VØÅy›Ò%j�ÿ!ß^Æš¡=GAûDjÛÅËW¶.tÆÌýP[êÅ�IC Vð&J“½O~ñCQyüñ‹¯^/Rî9 za�`¨Ý™]3w 4Ç.GÅ…£{C­ M픩 ½Î]/¸Ÿ~Btc¥¸Æ/¼ÿ^èÔ~Ö>’]%ÛыϞ~š5ùvèµc»BƒM“Ó™ÿJV¬)…ºåˆí• 5UÁ'_NÒÒˆ´!ÐáiÚé<„ÑÆYë°œ{{!õã¬ÓK=c1 � � � � � � � � � � t0ÖùÿÓžÝ!             �ö&à²�«­VP_dqͩйÓ~€þíÁ蔳ʼnÛ=R<¸¹Û%¾ïÿÛ è})ôâQ1P«¸ÛÊw~ŽÖ>ûØ»Ð=±'@O7_)®âç.„n+éýå]@û‡øpÏœháÂ7þ ]pDb»Ú\�Ý92R¶ÊÍ�Ï_x ºÔ°û÷8ùß]: é—wùEЯ׿}÷ñÇ ™gˆ»Ñq`)tæ‰N}ÊÝÐsú‹¹ÝRszêj¥¶ü&öTŽäŠ_ƒ>òÔ7ÐÝår ø!m÷~þò~\ u‡2’‡C®¾ÿWÐmd—Ý—nú úÂgr|Šßßf+ÏÜT›Ï[øòOˆ„ÚíáБWÞ=Ͷºq§¬µü™?@W ? :~`4¤ì0tÃñʯ9,qšÓ¦\��*ùöHMï餴öjs{pâ>I€H€H€H€H€H€H€H€H€H€H ã Ã¸ãŽ-{F$@$@$@$@$@$@$@$@$@$@$@$@$@ €—ϨÐöÅÛuœ…âlKw+ôñ�Tè;ïˆð“WA�F‡ì�ÑÈ÷�pô®«Î‚öwX©�Aég¢Í7ß” }ó½ï ßÿw-Ôe‹eloñ,^{í5Ð)C �#r>›\¥hZæFq/Ù!ñkë¦<|ÜùãQcA°k,þÞ`äÕÚWâ4ÿéOâ=}áÅO¡ß¼/4lAq�¾“½éÚñPÃªŠ¿í”šÓÓæ¬ÛöÝmbk�héÁ5ó¡{ o±6Ü™µ™•YúÉMCSPT¬'*·…­WàÌ߃�/_"G¦Áu“3Câ/[8,Ò‰�´ %ØOfî=Ï%C¿ûX"41[æïÇ«~>ÓúGöFɄ믅^}Žxå#ÛõäÔ´ž¢ÙL$@$@$@$@$@$@$@$@$@$@$@€Æ`Ù             h {F¶xç¢Ãš²rÃë7\¡E—Šs±¼@ü¸ÙEâ?ŽŒ‹�†¶«q-h‘TYŒÍ=’ ­tÄC"ÅgÜ!ú†~4.¹*аBö‰‚+ÎÎè`>÷Ð8†¬Ý–œer¬æääCË£ q1ó8ˆ‡-(4&•••5¦z#êVUÉ›G#ÖaU Ü™= AArO.g6& ï É=­Ë%ï iáä’oF¶Ry‹�͸±U•KÞ)oëa"�V$`7npýð3\Œ;«¹ûµ„жh*/—£Ú锣=$$¤E·Í�‘@Ç'PY)W„ŠŠ hhhËÏÐŽO�=ìÜÌ3HýöóãO<�û˜`ïC€3¨1´X—Ž% ¿!è<ÒoCÇÖhÞg^ÏšÇ�k“ � � � � � � � � � � � � �€e X4†±;oùŸï ˆhr„ûR‹—ÈÓÙ±It¿É8ÚÅŸÜ ¦xÙ< ´0¿`9%Å%u¼S ƒâæH€H€H€šK@ýIJ—¼?ƒ‰Ú”€ºÛÕÑ^bøÚKä-Y¶ ã-É’÷“÷�1‘ � � � � � ø:Œ}mDØ             h#5‹‰H€H€H€H€H€HÀ¢Š�HË µhØìL ¼P:—»G4:MÔ/P”‰H€H€H€H€H€HÀgÐaì3CÁ†� � � � � � � � � � � � � �@Û°·íþ¸7      �–! q‹é-nšÜJkÐØÆydÑÝDí|~]00‘ � � � � �€/à74_¶�H€H€H€H€H€H€H€H€H€H€H€H€H€Ú�@@;ì“»$     h—SÖ.ÈhÎ6¸. ´5�ÊRÙci®hh¬( � � � � � �€ ÃØ�M              �ö @‡q{Pç>I€H€H€H€H€H 9JódmWUs¶ÑJë:³·bË?¬÷³£ÏHèØî¡P;þy›Ä?]tÄèc\ òa¦•Kö­EÉÜÿÏÞ}ÀGQæßM¯„„NèM@�""‚½÷®çõü{§w^ÑÓ;=õÄrÍÓ»SÏ;{ï]l€ Š€€ˆ(Mzï! ée÷ÿýÍXHH6Ù$»I>ÏëÅ—Éìììó¼gw³óÛg©ÝÚfà(å™qÊ=›øóµ¼m›Â“Þ!Yk‹56¿¶ÈY9OùÅ*«‚í;MÙýÊC•£kQal5Ó›¦?¦üýSk”¯¼AyøvÊX§…ëfkùÉg­o#a}p+Œµ V¼ÒwÂÝ“”%ÇüŸò¾R¶ª¡�ÕÆ•³lªò±—¶*Oé4ZY¹ÂØ·u¡Ö?õì e» {*Ç9ÆZ +às*ãÝùŒc­úœ† € € ^*ŒÃëÏ£#€ € € € € € €aÐÆ5\h¶®ñÀ € € €U ”—T¹ºþVÚ,Â[¾|Yyï;;”öó¾fWw:-MyeùÊ{?.PZ•îþmç·iÅ9¶ÉÞ¦“POÿËoQþåäŽÊý¯bŽÖšN#ŽW?éAå›Ï<«œØãzå¹Ýì¾måÖÏÏÞ± ãõQ]•?:öåþµÅæ¶aáWÊÅY�c²¾ï\ž«ô{¬¢zÍ‚™ÊI;¬?�­|ÃFýXæŒ5wÅ-Oþt�2pQ­{kÍØ¡6ºý¡U)P^l«©0®‡• € € €@ã žÕ6î#óh € € € € € € €aÐÚîUàÔ‡õ8ðà € € €@ð>«‚mÈf•µÝOü¥òá1N%®ßªog?ó°òÙ}”çßOÙkçÊ_t)Wºç–¾-V¿ûôË•éG�¡<·ŠÝš»Tùæß(+7_q¾Vf”:7ÙŒÅÇŸ=JùÅÃVéûá§6/ò¨3»+ ò¬2Õ}¬âü-gí2�Ýß¾£|ö»µÓñ'*Gµ²}fí²³Ý˜ÄTe«x»uõôW”Í©®J{ÑÇV]½HÞ²¿þP7þçë·ˆ?ü'Z5|ˆSaÌ©ö�<?7øs¸â�ø@@@ &*Œkâv@@@@@@@ ™ Äp¹s3=² @@I >Í*}3mªbOéZ›¯wæ2«åípâËÓ”Ÿí7°Vx|…V%ìwj€Ë‹ µœ›çœwæ[Eo¹3òŽo¿ÐòÛi#•§Œê¢,]`½×gÊ£Zõó)îúXý5âê?)ÿ8®•rønQ>r�[¥¬E5«¢Þ4ýqå½ïg)ÇüôFå¥ýœ5¹ôû÷µþ¦Çç+[ŸôSåm'tR^‹í�³jæ4N¶¥PM ä¯f3nB@@hx�À³Ú†4@@@@@@@ bb¸¨7bŽA@@"OÀg·3Þ¶òÞ•‰C”¿9¥§2ïí�”S—[Íñ~­Øæ.v*Œw­° ~§mqêtKó´œíwÎAW-Ôògml.ä㎴ ãŠr\Û²ßñç)Oí¯ ¥®ú\wê“�;±¹™“3Ú[¬u+ŒË[Å9ë¬/©m:(3;9=زt§ÝÏëô7.­�–;w²-m¿4@@@š¦ÆMó¸Ñk@@@@@@@ d�ç²ï�wÃN §À曺Øf%›´ÐrúË‚’ÚÕºâ\éâàÝ÷¤ÁVy0¸«ÍLæ­(LÐ2 @@B(×Ý·Í~SùÔWEʎǦlŸ›¯L¿øåÑVa\bó÷´ò•6Ëï/ï³êÞ®g^­¼yl†Ý¶m¦âž ï*ýgÿ\ù—“;*£œ“R«J¶f•º�¡–þ½ráVwFd-Ùì” º}_åˆÄeÊg÷«0vwb}Î϶Q»ÏÎêè~gèï›®·[S[ïVfí:ðÃ×z¸ÖÿæúC”1­­"9{W¶Òëµó‘ä4«?Ž?ðNZGC@@@ r¨0ŽÜcCÏ@@@@@@@�8pB¦}0vÞ2òЬzø¿ŸØõû�O³,*­]=qe·e›íªÿe›m´‡&YínWôßrvªrdowî1-Ò@@@ ö‰=ûÛ·•~Òæ!vçΞúŒ–ožj%´IÇ\¬¼<û å£ ¬¸rË~þ^­¼üùÀ[ì$´àŠ*–­`yëüו¼gõ»µ9°¾¥œò+åÃýUµòµZûÚm÷+ß̮;«ÚÙžuñGiá¶/W‘XÍvÜ„ € € €@Ä Paq‡„!€ € € € € € €�#ã±Ë¯iÔ³€Ï¹LÿùÚï??´ à¬ü€iÍêùÑlw ÖZMÃEÿÎR¨Íj|Ûy­”=ÚÚ,h4@@¨�€�(¶êb3õŽ9½“òÒÞ­•Q;­Úøñgf+ãÛg*‡Ž¹Rù‡qûêtË7ÍÒš‡ßX¬l{ì…ÊKÙ'óŠ«•mω™iÊŠ“Qû;å°ó•Þw¶2®••èn]­ÐtÄ�ýî:åi�+îa7ØÊ×LÒª›ÿ9]ió-kFáAç*ÿ}ßéÊØÔ€>DÙX†ž}ž²uɾžëG5ßÎEÊ×'Û Ê%}Æ(/Ñ^YÑ-V4®–¾�£µDC@@@�à¨0Ή­@@@@@@@�f'PÅ4LÍnŒ ¨Á²ò­–÷’‡²”ëwZ�qä4ŸSap×[6�š[�på1VgLC@@�ê¢ÚÚÃÇöºòÁ)ï)“<›•QÝÏRöMNQ¶¾øråpý©hå«>Òâì2þ<å/G[=qåêàèÂR­÷'یȕoÕJk>û$ÿí4Ûç·ös�Íöd=£!€ € € €@pTçÄV € € € € € € €@³ Â¸ÙÒÆP™SN|í“6KY¤ÕW–¸ûm«NèÛÑžöG÷�¯¼k@@@`Ÿ€·µ–Gž4VÙö¯Ÿ(?õÙìÀ}/í£Ìyk‚ò†OŠ”k9¯Ü§›~úJåÛíÚåŽgߨ|ä‚Êýg¶Ÿ\x�ò­ íÛŒ6ò òúgÖ(GüìOÊ›ŽJPÎòÊ»¾è§üÕ߯Q›aÆ^§bù UËÚ‚† € € €TWHð7 € € € € € € Ш0na¼¾‡{×[¹Úåì%õ½ãÙŸ;ŸñuOçhïïÞØFÙ£íþ• ò°ì@@�&,�Ô´zj�O•O®¶SÈ”(û�yüÏ•÷Œô+[ùúÏõãß^X ìpò�•?ÖJYùj嘌öU®×Jk^§V¸h½?›¾RY–x˜rÌ¡iÊh¯�ƒDí™ûضŒŠrÒ¹—~´æ·Oþ_OýN}èPåÀŽÉʺ�û³ê¾Oüošr­3šhO±–7¯·¯]Šrftv¦cÖO4@@@š’@åsö¦Ô{úŠ € € € € € € Pg�Ï�—ƒ×yWܱe |³®T~æó‚&7ìÜB›ín§6úñ«Ó›\ÿé0 € €�%`§‹9‹f(?^kŸ¢££Ê” ^¼_ù—1§+/>~¸rX¯ e¢sArYÌb-Ç;5¸i™=µæeòþ7ñS88ÿ §>�� € €ì'@…ñ~ü€ € € € € € €´ïæ�vÝwzrý_Üßr[ÔH¯|Ôf›ºÈꌛG{ïF«0Ü5¶y ‡Q Ð,Š‹ê=§¼Üæ5LJ²º%/�••¥�ãâl.Ñ”””àïÈ– �üü|¥ßo•µu|í\a’>«ßm¸æÏ·Šá¥ÙÊþ™‰Êú?o¬è½?³Ûz:u³Ù‚3‚¹¾Ù ‹³·)7ì4ÕRŸÂã–4{½ö ?¥­Í^œÙÚÎOƒé¿÷m9Ùey›žÊ=Ó”ÁôF›Ñ‚Híh[&ØÕµm%%ö}W>Ÿì„„„ÚÞ�íháeeö»£´´T™˜hïí4^ ðäþëwTŸ‚÷cË–.À+¨¥?hî¿!¸¯#÷l(´ýxo~Ÿ(ÂÏ € € € € € € €@ h:sû‹tH¶-™­œùí¥¿÷±Ê³GصçUü¿·Ï®OÿòÍéÊÕÕ^vÕf¨¶9å„þÊVÁ\p®í¦•å®ÑŽçÏœ§\•kWñ~º�±o õßV—»æ+å¬yß)—|o—å¥vS}œòØá6kWrLZ]‹–_lWêÏXêìÅim­éÿÆÙ•à’­ÿŸ¼gÕ/d+ökãŽNÕÏ?îe&¨ƒã³½M~×ööRŽ"¨6é[«\lˆ ãºS_ÞZõgÞçölÿn…Í—ŸÔIÙkàH娑½”iûOà¦5ámµ©Uä­ž¥œòÙ|å2{Y{:2H9|ÔQÊAƒ­±{Ö³g{Ñ–o•Ÿjý\¸Ò*WÊZuQö8B9n¬õ¶}üÁž›öJÙþÝ4åGSmŒëŠíuÝ{ð0åQcmÝRB~Yj/¡¶ÐGêô ¶ïÒ¡v›û#€ в¢íuCW{“3õ eâ_o²}â=´Ÿ «6Í>‰Å·¶³ÂÞu)U­â¡¼©öyïð–´ˆ¶Oû4@@@�Hˆ„ÿ«ˆú€ € € € € € €´8�˜=“;EæÀýV'ºä½ÿ)ŸŽò»-J¿ß®"o{ÁåYN…±hþb«²�óê‹ÊÉVœ|Ð7$]·�?><ƾ-_èÑŸ|â 匯W*³J¬ÚÏw¤¢ÃñÇ*ûìŠ~¿ÕÅn˜ú ò·>WnµòZOl‚s¥vñ\-Ïœò®òƒSÿ ¼ç«hL?X1¤n«©M_b�XRæô°¦�¸=±—ÍúÌ…6˜Á­<6ѽ\Ág³ælžjÇÚ³_…±u´K/›Mç¸á¶i0÷—YMçŠ�½i)¸6i¡=En8-%¸ÍkØ*”cZ¾Ížÿ¹ý~å”ÍömºuR&äÌ´5ï¾¢|÷„ß)ï¾ÖjpÛ…µÎ¸®#µ’ÿ-3QÞõÏ)Ê ~“og/DÏœ™“•o¾ü±ò’ÛoµhUæÁ}mVOÍž“;濬üÇ}¯+åÛ30±•­DÎS~1ùmåÛÓ¯PÞù‡³•½ûh{Ø8ÅŽã­Ù±Ûåµ1¦§Øú9Ÿ |cÒùÊÛÿôCåà°}¹AÈ# á]Z§!€ €@Ýâí3’§ÔÎ�h41�(ç4&&¡‰u›î"€ € €ÍW€ ãæ{l € € € € € € P­@„Ïal³E¹…ʸΔƒâ–+­Ý­¬¡Y�ižS {ÈeZ¾ýú£•m+ÿyl+­Ï¨¼^k¾ù‹óô 9eiÊžƒú*c¿³1nÕŸêš ¬xå;ÊþcµÅÙÝNQÞø›(Gw³ZFŽíç“gÞTîkS�¥@êçÚ7·Â¸ö÷³{DÅqª×f®Ý¶Íúߦ½=ý¬¯U7ÛæÓ�²”×δ®WÑ}¯­}ŠÕ}^ÞÛ–×Í´çÆc;µhË6;5¯9ö|ëòäÀu<¦þ\=ú¼—ÿ«œ²5Syî„»”?bÏ�è²]ʯŸ½]9áÝÇ”oŒ¢¼f˜UlW!£µ ßê6RßöéêÚãYmñ¦®ç*'ÜnU¶Cœâ÷ÂuÓ´üŸ»­nþ•Z�ï€ûªšÒx£ôç|£G|õ«û_Ñî4åïþr¹ò¨n¦U´EùÅãw(ï›ü¼ò±O¬vÿž3º(Ý’oß¶Ï´üäc6óñînç(ÿtç�”CÓì™¶~Ò?”·>ò–ò‘·í¾÷ÿp 2¡ñ†¨G³úH=žÞ¥ÝN� € P7�û”èÉw>øúí7ò~ÍoŸ¥=åöí;žrû– �ß>‡Gô÷KYÿhMY Ê=©v>Ç:ÕÃn%qå1%µ±uÎÙ\åYƒ € € ÐøaúoÒÆ(�ˆ € € € € € € °¿@dW{­öwØå·Z:ÃgöW-_}ŸÕíUßüN…ñnç2úèŽÝµqï.VµÙˆeŠÕwpÏ­ÑÝOÖÒ wXzÊ¿W¼øó›”/[aíÁ›?G·Í{Û*Wxú+¯¼ñj帮4ý­9õ×PÖWÛ¸«RíBлÎ_bµÔ§:é‰�×ò3Ò•ã�K϶›M[­"sÓA ®Û °™Ûnëa×=”m±ýßûn©r»þÔ¾m̲§KèÆu<¦åõèK¿¶:co»S•G ²ª·bÕcV‡;^Ùõ=«jýzÉ&¥o˜U¥ïÙFK�Ûj?RÞöÕ4å‚‚8刳ÎR–¾o‰ÝŽÕš^ø¹röC“•ïÏ=϶9Öªç oÚáz¬«&üEyr¢ ÷n½¯‡ž„ŽZ3ú {Íöüäi効‹•;N³ ãQöÙ8ëCå‚"{ruñÊ¡éöÚôz,»�p‰ò̉ó”/|lß]0@9"©±KŒC©º¬!Õý]Ú¹?� €uð:ŸŒR퓉'×>Iî©!.±OÅž¢lKŸs:dK4Â!›h�šhç2žhûüïqç-N°ïˆ¢!€ € €DŽ@ãüÿK䌗ž € € € € € € €ìP¹[c×´5޽¿Ð®¬ÏõÙèâÒ­µñçm¸‘úsiç³æ(cú[ÕéÈL«\lè¶-'bjœÙ°~qZ’†ÜÑk5�“Þ³Y«?¶ã:¶m¹nýtlïâÝ¢l6ç´6v ‡óNen‘ßv™ð ufžó9¯Ù¤„0õÓúTçfÏŸ][7(K½V}Û©½Õ§ŒP?™@Û�#”½c¾V~³`¹²à«0n¬o°Åwê¯ì­?U5o²õÜ-<^“o¯Dg†@ÕñdiùûoÖ(Kc+ëgGv¿1ÆtÕšÜyßýJË‹ÖØsoÄÀÆxë�Z# Ø ‹ € 6�x;Óñ$:Ÿ+¶.±ewÞb[¢!n�ÒBë�›n5|çóµ[îÞñø € € €{¨0ÞKÁ € € € € € € вTÐæT1î_ÿÖ üVaœí‡à½@IDATÄú—NÔò¿ïzQ¹9ßfÏíØÓf ~̉ʣ±•¿²OZçV¾y¥î»Ä)iLîÝMËéE۔˗ZUÁŠÍvC«L»v{ÀÀ^Ê gº(-„ضæFJ…qú€d�匮VY²Îj‹]ì>“ë>Ä­á­ŸŽÊT×G�WnŒ¶Ê׫FZ•j´þ4¥æÔ³&ZÅm”3Ót~¡[~àëÏÛ*CÛ´‹¶cºlí&åç©—1.Û±Q½ÚPæŒ(ÓæL·EÕôìPlXíŒ+º�–Û´ª|]Ž�·uÛ¶Êÿåú­9JßÀÆ›§Yd;èHƒ¼?›!€ €@ƒ øì{J<%N§;/l�}Ù3Ÿ±-Ñ·@¬}/”'Ê9)-¶óô=³Û @@@ "*ÿOFDt‹N € € € € € € €4´À�…} ýx�¶ÿ²b›U´Ô©Ÿ.Z»JËÛ÷P¦zÖ)¿úp¾ò³')çÿæn坯[�`Sచ˒›'u·[î»èu-ßý‹Êo�2ÌŠJ[+xLêwžò÷ü¡rhëP¯((®Ø·v¶fã:çH›·­×ú3n‘òkWCKum…%á��ŽÇ]§üíŠÛ”÷~øˆò¦9ï(‡·ÚÓu³w+�¼î÷Ê“»DL±­zl³1vî?T™á}O9w†½³†�±5î€J·Ûú—_QÎ,VxüyVAnÇ8BšßÞ[Ïø\¹Ýo•îG�´šï=“M—Û­ùö\ò&Ù­‰9PñI6ã ×y�ÊÍsª‚ôsDµêGQ]¥3 €´X�Ý›mèî¼ÅqNg¬}�§Ä>7zJ쓉Çç|÷‰[‹l?Óh¯ó•;QÎYuŒ�¯yâS,£í[¾ö´¼­¶›héncK4@@@�0 „ú?ˆaî>� € € € € € € PW�¦PR[§±% û‰î÷·;F+ËzQöNsk³|å,²úÅ»ï°üì±—”G ýµrtš; ©#º[½¥ß©M,^±Â–/¸Qù·SvK±J‚eTþõ¥·”ÿ~i°åφ+SBb;g6ÖM»Ì0l-Îæ¾:¦�s­C©• ÎøÆŠ‹C.0ö´K ïõV“Z¸f–rÒ\«Iìw”rˆw©röÌo•åÞŽÊCJ­Õ-‡Ž áhj'�Þ¬» ÏP^6rºòßÓîSþnë—Ê#ºXíËÊùó”Ëó¬,×­D(�·¿cõ'2ZñêÕ‘?¶Jho÷‹•gžfËúcÓÚ3±Ü)V÷ÆØ(¢rŒ¢£ÝÒcçÙ[nÞ wuà€VýHؘ@@ ±Êœo()qf„ |l·Ê3¾•­s3ðV–ˆ�|û,íIsªá#¡?ô@@hñáý²Ï € € € € € € >�f[a쉲ْº?¼’­Uõ¥95ŽçiÕ·�1GùÕr«Ù5ÂæR:HA n‰”o3By�žfœp½–o¾|¤²Õž®[=ÁÐs/Qž0é6å»3f+¿ÿÉ0åðĺ�¯}T'ö´ ãþv <¾-%ÊY•Ê*ì¶Ú·öiá¼~Ÿ÷�ºüÜ_W~Ýö2åŸÿt¡²o¢�qû¢©Ê—J9å¿”þ¤(7¾�2œýÖÃ×¶ÅX�ôq¿ù³2é={ Nžó�rÞ’ÊAÇ\¥¼|”U|Ë¿”_¶¶¹~“êþ´Õ½ë§ùókG¯=ô’rYy¦ò쟞¥ì›°¯sÞX{m&ÆØÿngöe+ÖÌmNDQ�=qýÎ IIVE½o/›…e1˜‘†¥c<( €ì(ÊÙ·ÉK~û™Ü[•rì3O¯>ö Ö™áVØŠwÚ–9Éí•í>eUlg{Û¸ÐÎà¾Ýißò2è¨AÊ.¶c}´ÊU,›µP¹ÚßYyäQ½”é‘ó1K½¡I Ä>'{|e–îœÇ¶DC@@›@ûŸ¦°9ñÀ € € € € € € €@³h¾ÆÕ*o²noÓÑ*q£üvm~v®Íûë÷D~…±]Ÿ�aWܧ;ÿÝŸkµ˜ñ•¯š�m«õ�:Ya£Ù6åÎÝΩ!TwHsË$íºþpµžÝl¼mœ±n³kÒ¹œ!w¨}«JE !ï3¸ØvÌ~G9y«GŒ¹ò4eŸ=Eµ¶¦Ý S•×ÞbÕÕ9¿ø·rö«Ÿ(W�±:ò>MðuìM좞�¾è—N*ökå+^ÑÏ�–ÚÓ:¹—méñý6jÌJ6êѦ>d3.¿¾Òž|ý.³YÏ/lßd°ß‹/*]k:t±Câ_½[™Wè¼îö›nÚÖäe+˽ö|îØÖêc"âú�àGªÓ@@ Œ%vþÒHÍoŸWKŠ‹•ENÙ÷3æ[�hnž}oJn®evŽ}ÂÙ±c‡rÓ¦MÊU«-·–+ýÎ'¥£jß�ô«£íÛeìÓmEó|¯Åÿþ rbq?å™çŸ­I¾PnŸŸûŒê¥L¯ô1¿|à ­ÿçËß(óœkZ¨Ÿæµ1�¸ð*åéÝ#âó]ýŒ«!öâ>‡쬜† € € ^Î`ÃëÏ£#€ € € € € € €ah‚•‰ÁYùýv¡¸×»_íß¾»úíŠøÜ]vE¼ß©ðKOK²í÷mÑKQ™‡¨‡Yq£gÊ÷«•›Ë†){OgŒyNù­×F—XE²V×¢ îjð±M ¶vh+p¯tØ™e• 6Çoh-Ù‘éÙ®RéAh» úÞö\ÍÚ¼^YêµúÔŽm••Ÿ�ÑmzkýÀÎ6ú97(·Ø}ûTL^­å¦ß¬jdռϕ›ü6{ñq‡õTZnXZÉ=ìçÿ½KùÐÌ,eûcoTÞx¾U½T1³r”ÍÉ׳keÔ²EÊeëlDcÔÏø¬æfõbK_ì`eß.·êç°´ÚŽ4,�äA@@`¯€;ÿëÞrÁ·}¦v?á÷/*ÖðeCö6:Ñ> uínß3pÌe·.¶Ü³[¦²G¦}RåOwÞ$û¬{îÕ—*KžKùÖ£S~úÉåy§¦ìoUÎ+²œsŸU3¯\¼X™ä~,óm×òç²Ç·UËK¾µ[s�“‡Ø6ݵ<(Ó¾kÊS´KáÞºÝ9Lˆ õZj_©õ­Øgûïz¦}J§Õ à/«anF@@h,�PÏŠ«Ÿ< € € € € € € €@= V¤Öó®Ãµ;wî«×î{Eð�}�ò‚!ÊŠ¡ÚµÞÅëlþ×wg*=i'(Žè› ¬\ÓiD^ó&T§Ægó~M~÷cåÇ mW·ùŸÜ«J7Z!ðÜ võ}ü¡C•}SC߉ƒMé¾÷m~²p4ë»TŸWóMk¾±|] EÚ¢¦6~€Í¿ß,³5ݧ>o·qµíÒS럯\ðí:åy}m�õ¬¢ùs×kqÅuTzGe›f¤®ØkãÿmGlË‚¯”»{�Tömå>g�׿†OµæÍ�6(=]ÎWœ0ت4̨q›¿È´§ýÇj‹œ¾M™>úZån5.*ÞP´¼³#ÖçÈ£•íß}[9sšÓsŽR¦G¹ï?V£3m±9$6V9¤­+ Å0´ºŽ4 ]å!@@`Ÿ€3¯ð¾r)ªÝ¡ÚýÅ?¾D9Îkg‰‰–IIIÊä$[.[ü†òO/¯VޏâfåÍ£íܤ6Ÿâ¢µ}ëÞG)¯¹Å¾QiØëO)_X¹IùÞCŸ+·:¥ÅZpÚJå?l鮨/çê§Çþaéž!u<Û¾'æ‘ ì³e`ksÚõúñ±‹z)­uiö½G‹_ºEù‡íó-(ß~‡3¨»° € € €@Äó)fDì@@@@@@@ (�ƒVÉuïÜÈ®Ë.Zbõy½½TéV‘–l[²w9gƳZþëFçºu¯Mç{Ä~®S¸@9oñ<å²ù¿TÎ5^9²�Õ{³WØš)³”«KÚ(�¾î"åá�? ¬o‹wÆÏ(?ßá\[íß­å5»œkÒËlÔï<ôåì8…'ºç©ÊŸ]lµÂ­¼‰ÊCϹJyüì?+?øëíÊÝg«Ø*Gùõûï(—zìJù‹.µ*Æö!_Я£=aº·µ+ï×î°ëèƒjÑv¯Û¯¶#5.Õ¹‡×ºÒÞJ1uHìÖS~dGçHg«ò­Z¾ñù"å·��GÙ½ÚXÞJ…ü|³ ÜÄn«};i°Û•Úßó€{„pL3F]¨�]Øïå ÏÝ©¼sÛYÊc¶WÆY]Å‚�ìñE‘Y�ùùIʾ•'ÓÚFh!Œ4aµ=3ÿ~÷sʵ‡)Ç�±š•¶e”_}:C¹¼°»òœßž­ìŸP›ºÝ!äæ/Z­}¼ÿ·;”�ÏËVú¼V‰’”÷¥ò©»§+KÊí¹g¬Ù3³óÉönsíx«ûOpºòò1Ÿ*ïŸò/å„¢eÊÑ]íY½è“�”‹=}”—^bõÊíB~mj'uh¡�Ôž™%µ~—¶*íºÖµz§ƒä. € PGû´¿sµ�•¬Îq>õ¤Ù§PûSÑü¥öÙ&/§P™›mË~ç³ùÎ5vÖ6/Ñ>AUÿIΛš©më�®Üïƒm¬�©�¼äWÊ¡…¶ÿí;r”Å>{”…¯?¤|rqoå�n8W9ÜNõ¡m«bÒCO+?òY¥òo®?ZÙ5Êz“ÚNé~ì ý B»¢!€ € € ÐlÂôßÍÆ�� € € € € € € €MVÀŠ;#¶ùrתosfY5°]I¾ómY¤³­LWŠ[­[×síÊñÄC¬RsÂ?ízó�^·Ù¬&N_ùòLçºx§¶5±óH­¹ôŠ+•ça�a¨wóÛ˜¶-ž­œµ²rµ®]A¿ê+û*ýÑ\¶~»Fþ§Î²Q6ŠÿûÓÍÊ´ÇŸU~øú“ÊÏœ�&dŽÓòOï¹JyZ+Ë­þê~mPcó:»8}X‚¶üÏäü·ß³�cÞ¹“J÷i]ùN¶Ó6íV«#ðxʽÅJ§�Øùyo8ûÉHr:áÌÙ–W°÷¶:.$ÆÙÞŽXOÆ!Sob?õä‚ÛîQ¦¿ü´òåIÏ(üÀ}ÞZ?;¡¼èæ+”ç�²ç|ž·zTµF×Ãj£~ÍNå“/NRNyãۥמ}Æ+ò“)Ïì|€–·ùs–ëç,tj‹Ý‡öÛ³}ݹ–îšýÒêaÊF¹ßƒàÜÕNýó?* bÿ­|zš½=ïÔ´$w¡å‹ÿÊóûÙ«ÉŽn8Zè#­ý»t8ÆÉc"€ €@]ì³ÍÊÉ�+ïþÜ>Ÿß–}`Ÿcïú æ{Ä�¾Z=qmº²tÝwÊEžÊaݬd8ÆkŸv½1öy©Mç»ßª�7$:ŸžœÙ”3:اâΩ �HXŸÓb�[ËmU;÷Ö=šíjiŸþ¼ù¶ÚçÒ×?[£,r>†t[¯}Rrâ1–Uœãô~Ü€ € € €@ Ø93 @@@@@@@  x7ï°k´ÓSœ«°ë >¾žª6CîUyq®ö‘½Ëf.�·Y·Ú¥ÛÀa«ÎÔc7L+/°ªÍ…Î5ø6gXLýXOV¾]—?nÂve^ Þk“ˆn¿<Ùjn8Í�ô,²ºê/³×föN«s-M°ª‹6ivd›Õó¶ÌŠÄ³vØË’Ú*Ûµ²:ãxÚj¯ájöz)ʶ×Ë®R{¦µkÛP¯Íp�°q·¸¸vµMÁ÷ª¼Ü¾ã!)©Šï5~'l‰@ ÈÊÊÒ¨ãâì};%%“¶ÀƒÂ�›�@~¾}‰ßoE¬u|m_ÚÀãµÏ0yÛ7)·T.¶µZÞ Ÿ½¢|pòzeqåMœï�éqì%ºõšc3•na°ö6o¢��uKÛ¡|í®û”/®³ïnévä)Ê+Îë©\þÏÙúMÕ×k“šZìaÚâ7ÿ¸F9nçDå5w}¤ô�~ƒò±‹z)ýß¿­¼únûœ�•G¤µ{[Œõí§÷Ø}Ïêl›.~éå>´å³oý³òÊCšÕ'w�¨ž›óùß“lgµm%%%º‹ÏgÏŠ„;K¢!€@ðeeeÚ¸´ÔÞÉíßÇh ¼@à+Èý×ï¨(*²‚÷cË–.À+¨¥?hî¿!¸¯#÷l(´ýxo~Ÿ(ÂÏ € € € € € € €@ ˆè9ŒëëDÇÛüRm:Z6ï�d³whà2¹Œd»ÎàÚ¬–èo­n»)6w×gµž‘Ù¼1v�oz‡f}µoŒ=Y3:6ðS6ÌØ^/ ­;(;…¹'<< € ¼€}†Ii×Å2ðN¥»ôÓ‚_T>5e£²Õ—)¯`3ÿù«{~åuÊ£V½¬|ðÓוOÇ\¤¼ö¼ÊžÎÙ„š}&¿àæ›”�?zWùÌûï('|×My̱§+/ã|�ϾÛ`þ‡_(—ø{)O8õPe‡=¥¼V-·þËÉÊÏ6ØÙ߈“Æ(Iuîëµjæ®ñβ–ªkVå<üªÛ•·cgXfa;•dÉ«·)ÿ¡ýLC@@@ yTœù6�Ñ0 @@@@@@@� ZD…qÐlX �+Æ[Uès3lÚÍÙv­}Ój¿>Õ*%R‚©0hZ#£· € €Ô¯€Ív™µb®ò�—ÞR¾¿ÜæŽíÆÏ•7œ7Pýå"¥Û¼ öÝ*ã®ø­2³Ç«ÊûžFyãü9ʳηŠá3�ì©Ì°RÞ=-&µ«–Æ]hû2ìsåÄ�}”ŽÏTÆyìwÎ}NùQ‘]÷ÜãÜ ”ÿwNwe¼þT´¼ž…Z\zŸíaGL_åoβýÖI7½³ €† € € €@ƒ PaÜ`´ì@@@@@@ˆl*Œ#ûøDpïã¬6÷¿WµV^ø/›K¬¤ÌÁýÝ×µÓ‡&è‡޵ i € €T!Pž¯•–,PN›:U9qÞfeQ‚ÕŸpÅÅÊKFvT&Ûwe—Ç)Û´µ³ƒ_‘2¯Ðjz;ŽºPyG'«'~åy›ŸøÍÿݧœøÖ!Êã�?Vyæqƒ•™ö!]Í®iNë3^ù+ V³³Œ¼•S”ÿ|Âj”wX±±g×{ÿRþè}[Þ¿Yýp‰ß²üƒ'•¶½Nùëã­R9Qh € € € °¿Æû{ð € € € € € € ÐbTalu¢4ê&0¤›M;ö·K[)ý\NÝvÒh÷˜i½ýûÒ”^žø�æÎ!€ €4=�uyד”o.´�·{¸rçg_)'?iU“­|·Š¶é¿ÒZ«J>°Ù§ñ!'�¡l¿ê åú2;�HßS[¬ÅŠæÏÖÒ¬7>Uîno�>õëÉâ÷;�lM|Ÿ£”?ÑNYq´•ož7QùÞÛ&9ÁªŸg?óOå„í—)¯={¨²³þT×ìQvo]¯ü~åneÅþ­jy]–ÍèLC@@@ 9 Tœù6§11@@@@@@@� Ta¼ïí ¶gª8g„Ͷn§]qÿyUlîU]ÛD« �_msª%9³/‡»G<> € €,�®ÎyÙ¯•�\˜ªì»DùÐVa¼®ë1ÊkÎì§´ÛªkVõ»uîʧg*» ;QyÍå')Ëýö)ÝþìßJ×ÎÖŠW'ZUñJ;ÉðDµê¯¼üg6óñ¢'l.äõ½†)O9¡—²b¶éÒ¬ÉÊ÷VôP^ý‡qÊ-/>¡|ã›eÊM'¦¬©ÂØjˆ—O|Ty“•+WÕb¬²™† € € €@ó Â¸yGF� € € € € € €ÔZ@Æ4êGàú“S´£îmíIuÓK6Ÿqq©[¿^?û¯Û^F÷�Óÿs…Õ§'s…Dݹ € €@Kð&Z�qGû:!�ßʃ+š×jzcc쓬M\M³ 㘨JŸÃ�=DWqß|mÿõ'Ÿ*Wù;(Ϻê|åÈ�VÍ<(Úê›—8ß’µcâ?´|þÁ*€í$À�nÉ—Þx‹rüîdeg盇|»´XE‹Î}ëjå–n=•™mª(gÖúÀæM¶½õ?IJޚßj¦WÏ™£üÎÓWyÌÈ.ÊT·;¡Üª½Ð@@@¨�*άëc·ì@@@@@@@ Ò¨0Žô#ÔDû7¤[¬z>õֶʧ?+P><9O™WÔ°³ÕÏæûý™VOp˜Ó-Ð@@@ â‡ÿH{ûÏ/�P¦×P¸ks¯yÿoÊß½¶§@XËU4¿UÏ›ø‘rQy†òÌÓ‡+Ûä"çăuëqãz)«ú:!û–£åoNP^û¯ÊÛî»D9Ü™�Y {[iî-¯ßh7TµŸ½V³`cܺÛý^¥»[º|²n½û?“”Û=6'tVú�Ê÷³“ñPnÕÝi € € €Ô‹À�g³õ²Sv‚ € € € € € € ù1þ†-øŒ|zØ€‰qVnðó’•—Œ¶kö›f3x½ÿu‘rí÷|-Ö±ÅÅØþ�>ĪŠ8Öf,? ^é­¡ÊA›Ð@@@ Ž¥kgëžÏ?g3Ûçïêš�pæ®Þ¥´:܃·âUÓuã‹3­Î8þÐK•g °3ˆÀ�öÞx›9Źì¹pÓ*-/\R¦Œ©|VëÌ ¼`±=®'½�"£ŠŽÚÝr¦?­¼Þ¼>š7倽DgØŒÅýÓ­z9ËÓ[ٳ;JæPn=à�ø@@@�: Pa\g:îˆ € € € € € €4m�j1›öl:½OO¶«n:ÃfþÝé–Ë·Z5À¤…VmüÝ[Þšc5ÇÛr­ö`»“IN�r‡4»oûV–™v=þ1N%ñÑý­L 9>°ê@+h € €4w¯sí¯¿úªÝC(¶:à;b•öm?Õ5«âÍÏw¿[è`ŸÛm›¢2ûœŸ‘ÖA9ü¬Êε°·y“{iùè1•³¦½©¼ã«½7V±à�i§µÇþüpe·J{s«—“‡œ¢[:º½²ŠM´¶æfGaï)_ÿîÀ­£ÚÚXnüëån�}+R«€ó—Pn=ð‘šÜÏQuõnr#¥Ã € € €@Ä p†ñ‡ˆ"€ € € € € € € #àݼÃê;Óœh©->¾ŠI¢êa¿ì@ å 7РËË­æ))É*~h ¼@VV–6Ž‹³Ú””ø(|WØ�&(�ŸŸ¯^ûýVY[ÇWP–Íàë)/±lœVn¯úÅóìq³Rº)�8Ôªrk:ë³1æmX¢üv³}«PÛ>ƒ”}Ó«¾v¹,/O·–$Û»JÒÁ ’=ö»;oçvåöÝ&Pnr@³;Ç·¶f¦[ÏŸ³Vkf/±=xÚ÷SÙ«•2p»)ØfŸµr�ò;g—ûÕr¿Ö@°;nÞÛ¥v¶ñ%˜|m[I‰wŸÏj»lfk/PVfïÆ¥¥¥ÊÄD›-ž†Á ¾‚ÜýŽâ;3‚çcË/À+¨Å?IÀý7÷uäž …´»Jw®ëq¥±@@@@@@@ i x7m/T�3RëÿÚg*Œ›ÖS�Þ"€‘,@…q$úÖ2¨0n™Ç�Q×—@=Tçm±Îf×W—Ø�-Ц�=bTL— ã: qö VwQa¼—…‚|Qa$›!°W€WÐ^ ¨ƒÆu@ã. € € € € € € €5 Äx=õ_[\óò € € €@�Òì®T×�;†Q .Ù¼NµÅaì5� € €4cæ0nÆ—¡!€ € € € € € €Õ hº ¿s;uÆÕ1q € € A1‰Ö™¸Ë’VË£ûÛûvÕïÔº�† € € € € €aßÿ7…uØ<8 € € € € € € €€wÓv«õÌH­ÿ¾øøø:ùZ½ZñÆ/”OýýßÊW+c’Ó”©ž|å®|«ùó¶µÄ_Þõ[åñ™nõZ(÷Õn¹…Ò[Ÿúš³ämåƒ÷=§œ»Ý©cŒNÒrJ‚ùäXzbº*N¹ù.å5#­Î¯Q¯(ÏÑ#.yç_Ê¿=;O™å±gEjkËâìÝ–þe¿ þ¨¼ýòÁÊVÕ>ý‹µÍó7ߪ|m­�:ºß•Êÿíe×Fž°¢…<Ò²%Ïj_ÿ÷ûו;ì©QesêP/ÿ‡nû×E½”ös#·�GêÖ¤¬xGÿû�O+¿Ê±ç³7Ξ ñåöz/ržÎ ý.Öò�w^ª�\íÓB[Ô{ a¤¥ þ§î\~ûûJ{‡­±y[k“³ï~\yÕà¸7¯� Byÿqßö�³àiå�÷Ú{ÑJ¿½Kgf¶Rm¶ï‡ØYlã:òÚ»•7žÔEÊØŠ‹í¹ÑÍÝsR’½Ò@ x�¬¬,mì~ÞKN¶ï2¡!€@ðùùv^ãu¾î)%%%ø;²%H ¤¤Dé÷Û'ÒºþË�´\�ÒRû÷¢²²2ebbbË…`äÔIÀ}í¸¯#÷wPTT¸þ9²NàN„U€WPXùyð&/àóÙÿ¤¸éž Õï�ø}V¿žì @@@@@@h21�^µW�o»¶˜ùÜ•mí­¼àö_)/ÞQ™àT¯�ô –ÿøˆÍ‰ûØs£”Co¯lã á¾�ÿ_硌4ÊŽ[´S»˜]bJgÞø3å¹Gô4‡»Ê`ç×Ï)'Üe•?jyôaW*Yg#4»Ö»ðû‰ÊG^øZ;îÊ\uœ²OšUÆ–:³ö¾x÷�Z~ãM;â�|@yY¿ƒT!ú­VsÙÛ�*ß\ç” j)ü­~FZ^˜§¡äûí‰Øé¬ß+ÿxªU‡W~bF§„köâú©?Ïfº}ñ¾§•óËú+/¼ízåyÃ:)ÊìU¼èý§•“bíÕÝ#¸©­µeýµPGsÈ…êÌ�œ¡´}ØlÝîožUÞý¿9ÊØqÿ§"Ë4'÷äfscA q_ATF6Ž9�ÒœÜó ·Â˜WPs:²Œ¥qÜW�ûm1î#ò:jy¥9 ¸ÿ’mÿËV¿­òÿFÕïþÙ € € € € € € €@„ ÄTUýÖ¾Fµ×Ãsý½ÊNÛÛ(én³âUT¥Ùr÷ãÏT÷êlåÛó¿R~_0N9:%”ûV<‚vÔ8-¤‘ZoS\¢œð¿ ”‰I6+pÅìÊ‚6CŽQŽíòžrõ&«ö[³Ó*�e6ÎUÖ—Ä6íí9BéëÑOÙÞ�lZKªªls˜ò´Ó‡*ßû÷嬅•÷ë©Üÿê{ž9³Þ>úÆj-'¬ìüý·Ê•úÎúH�ÑX…±Ï£ìÐÍ23;(çhé�‚h¡�Ôž�[gØ<Ín¶gìÈ_ߨüÁ5Ó1ö*>ì|«FµçGxZÈ#M´ùÂ;gVÝ{¡Õæ>ÿÁ\åî4{ïºéŠ£”íöÒkM¶�ßÊ·Ú»ÊÂíöìM8i¬r„S[ìö9*¥�Ž9îPå«Ûw ,Zk³d�ËhÄ*j=^p-!Á¾x!&Æ^}4^ 6vß/uæ� Þ�-p˜�•g¡¸ó»ŸßøŠ$÷m™n-—[•Â+¨e>u(n�¾û›(.Îþ•Ã]eŸÜ�–#ø rñ j9GŸ‘†.àÖè»ÉÆ¡{²@@@@@@@�=‘7‡±Ó1oR7ýÝ¿ûAŽS”Õ§¥Y ?·PYTìl™bÊ}�½4j„Ö[+HLJ:HYb¹Í)XPdõÞh«wl�lb�Û¬b¯m_«-®ªY’SÓ”Qª­Õ ¾Uσè/¶*â÷þ÷šreÔå—œ \~w$T«#j¡ŒÔŽQaÞn¥ß©(NoeÏðÆ?ZzÐ Z#õmÓþ̰úÚÒ¸#•ㇷQFRµº³·…0Ò½û8pÁæÞÞ4íyå»ë­2oøu—)Ge„Ç ”÷o²½rÓ£íÙ».+[™g‹žø€'®{­“¾@ëo° #¨¹WÖ7Ĭ4Hº‚@¸u] 7oJt™]"Aîï÷Ĭ]t`èJp_5î§M^AMä ÑÍpñ Š CBWš”€û{Ç­‰t“ßDMêÒÙ0 ð óàᛸ€û{Çý—*Œ›øÁ¤û € € € € € € €@$ ÄDlc5Jþ¢íºuãV«Iõ¦vR¶K (j«æžªà á¾Õî¸An¬}o­Ä¯4g½ò«wžS~¸Íd2Ï;]9Ü©ÉÖBÄ4;‚;6[oK=VmÙ­“Õ›î,­x|Íû�*_YnU˜~r�ò”î6۱͡Ú4Zõ#µ£V”Ÿ«,÷ZêÚOWþy¢�1;ª�²Gÿ!ʱ'£Ü>p¾j­ˆ¨VÝHýÅÔ×å+Ê”Ñ�{)3lææMK­æxɪJoFWeŸVGÞ-Íj|#µU7ÒƒõÙ_d#�ôö"eiû3”çŒí <È·è–p¶êߢ2†©s'Œ³×켩Ï*yÓ¾Éàš3mîév;Ö³§ÛxË»ž§<ª·½Æi € € € € € iáùÔHS ? € € € € € € €@ ˆÑ¤©MªYw³¿ž®œ•o•¨íŽ;\\éZ(÷Õƒ4r ¾·Vé¸uÚýÊ Ï}¥Ü²3_Yê±:Ôާݤ¼éÒC•Iû—îjM˜[Éju`Ö´UJ_Ü å¨Ám•�W1”¬ùPk}i™Ò;ð å5§÷TÆZõm“iAŒ´¨ÀŽšßoÕ·WYufFŸÖÊØ�ß*?ye†òãf+¯¾û÷ÊÓ{Dd�qµ#õåÙL·YeöÜöç}­|îÖ·”_}¿ÛÖèOE‹JªÅÝv³òÜ~9£sµ#­Gàß6¾‚ï>U~²ÕÖw¾d¼r`Ľ,­oîѨá�ÖkÏÏ#ò;åùkoS¾þÌíÊÚkùˆ.Yʹkú+t÷¹Ê¾ö„¥!€ € € € € €@Ä þß\ÄuŽ!€ € € € € € €4œ@L`U_Ã=L}íÙŸÿ�võöK_(óã¬jö²S,ƒ¨� å¾zˆFnµímtBºzر³Íÿêõ­Q®ße³ÿ®›ó‰ræÑ•ç LSFÆl©VG»yúKÊ·×Øs°Ý©Vƒ8¦CÀ ¥ë´æãÇ^T.öXÿ¯¸æ4eÏ8…Ç_hÙZ#uŽÉ!LÐpî쟣ì2ÄfðmãŒÔã³ÊãÕïSÞòÄ|å3OMWqÇIÊ@0ýÖÄHKŠÔÃBçMÇ·}‘–×öº\yëN­mgð®o^W>pß»ÊçþýŽrÐý—)û¹Z  b¤•;é·±/�c5⻽”§Ìy}ƒ{ÿ)Qÿ7ÍŸ¤üb­½¯t9J™ºöKåÌùv«7££²¬ÐÞ‹üžD[£?4@@@@@ˆ$�€ÿŸ‹¤nÑ@@@@@@@�†ˆñ6•Š/ß.Y|õìÃÊw6X5[¿^¡;áeòý6Ïè)�Ã[clå¥Åk>PþçÉyÊÂ6Ç(y‘ÍY›º§ü°TË&?®|þ;«Ml5òe§ìÅÊ *0_­È²é›5®Íø»ä›o”Ùmz*uk¥ w-c0#U7÷4obg- 9Âr¿e3øö<ù屯Y…ñÄÅs•‹³OTvÈ÷(Õ göᚎ©m牳ilÝïˆîzž–oøíùÊ�_�räEZsáèIÊ¿|þ©rî[Ó¯_¯tm×°­vÇt¿¾”¯Õ�‹äÙÊÄ#‡t�„YwökA¿ÿ/·ù§ÿþàteô©w(ïºÒ^Åiåö^½|ÆÊ'OùüÝW&þýNå‘9jõŒ† € € € € €@K Â¸¥yÆ� € € € € € €-^ "KÜ8*þ­Xñ®ÕÈÞÿÑfeòðk”ןÕG™P}�e(÷ÕÞ¹ÕWo½6Ýkz?«@ýÁù3”3¶êÛ÷¿°Ç/ì¥ W•qù›ßô‰¿>¥\XÔEyÆMW*Gg\»àÛª5_O·9n ýVÓYøåÓÊ{ì®UµMV�úГ•içþYùÔ6çqxŸÜA�T½ ²ÅfhÜ1­´ Μ<§¼:#\Gr_¿ƒiTj[E¼½hýe6–ظJ/`o’Ö·ËLWz}YÊíYî ¸¶}¥­µ®ñZð#­Ü'ßÎuZ¹Ü)Š�éÝCËkxóª¼�^üû�ßê¤|ðŽrµwˆòg¦Ls_ÄQvìúkßypK’½{ÿâ^›Iýõmú㯶*䀒rýDC@@@@@�p ü/]8»Ác#€ € € € € € €4¶@Œß™4Ü•{¶¿P7¬ùèŸÊ{ž¶Ù’îg)oýÕ)Ê®VF{ðÊ}¾×†º¥n½õY�©/Êþ׿ªÿù·j̸«×ôzlˬœ|¥U솣•gÙü»ÏÜûåÇ›S•Güìfå�†¦)÷«õ¶Ñš?ù£2³°êþúó¾Õ­¯þËæI]ÖÖj©võXe§v™ÊðVÝÖb¤ê«5£ßoÞý ì¶=­|·²³ËíÇ«6NO©ê˜ÛÍ�×j=Òøîê\ÿCí¥ûáüåÊ5;í™Ù·}àXL£¨Ày®z­ª811Vy0ÝÔ­Ö#­Ô§òíëµn•MÏí‰îÔ^™Þ!YG*ZmßüÙºçÖ Vùí‰î¨h×:ðÚj÷ˆ¥ô ¥Þ±S” ×Ú÷Cäø©0 @@@@@�¨ü¯üÔ9º‚ € € € € € € ÐpVÀ‰Íoõ…+Þ»_9áÉyÊÝ�NPÞøÇ+‡UQͦÕ-”ûVì£ñþ®[oý¹êá·ÏÚ|½¯Æ\¨¼þâáÊvVŠYÑÊwhiá—‹”%άÆCzuÖrã_#PºÍ&~òž¿+?XcÕ¥ƒhÕÿ9¹›Ò™ÐV4o¢~è4`˜eÀêÀEŽÍ�ú‰3ojW-:ܶïÚøÃ èV­GêÜ·dýÇúû�Ç6)Ç_{¹òÈŽ¦TQ€jE©[g¼§œ¼ÝªoG©غâvýÐè­n#õxmvÛ¡Ç¥Lýr†ò£©+”c/î§tçµõYåñ×ól–\OòÑŠÁ=ŸÖ¶º1[Gº_í¨æØÌÓÅNy|«d-WñÌßï^�òCÝÞœãع»½N=+¬ÖÁ÷öŽ=d��«âyéŒzÃ*­YWfë;[]u«Š›µLC@@@@@�Hë¯E}@@@@@@@Zª€*Œ#¬àËosµ.~énå„W–( üö¿Ú‰;•Ÿ<ü'åe6ï©ß Øö´˜~çi醢ܸr�îûãºoZcb„0Òß^dóþ.[¶F¹pñ坿ŒTŽe•šmc¬Úoý×Ó”Ó›g|¿(/msß6æ5e›§ëÿ}‡ÍBýÙgþÝ8ëCÙ’—”ýc‰-Ho+­{õï”§õïLÄêB-Z]Gúk=Æà¥V�½háWÊ™¿¶zúÃÇ�VöoouÆùëlÍÔÏ–)w'[õÕ?«lטR�WÑê:Ò}Ç´õ—hgWùµòÁ—íÙû§íg(ÇöŽWn™õ®òý�¶<øªó•#õe©ÜÓBiÅžì­*ß©0ö9¯¿Ö)îÌâ·‡åïÞnpÞ-‡œmÕðÃg=¢|ëÞÛ•ÙgÛlâÃ2mt¥ÛìÝ{êÛ*w$Q^}æ`eRc¾Çêñh € € € € € P“@˜þÓ©¦nq; € € € € € € €@C Äx=n¡nÄ”}ù¶kÌ‹f}¯,ØSClõÄY+æ[êOU->åd­.å¾Uí¶a×…Ð[_¢ÕCŸ‡ÍñÜãýW”¯Lü\ùÁ˳•{Žhl[-zÚuÊ+.=AÙ×�$VK�ѬEk¬jöK§¶xÏÁ,Ù¢5‹çZVÑ¢l–Ó�ÅUÜÁ«B©ÍÎÛõ”[”týDùæko+§|üšrÞžiµ¶í‡œ£üí•V›;®»­ G e¤ý�餎ûÕ�¶ê…Ç/OyIùød[áMé­<éz«XýñqÝ•VgÝØ­žFº§Û¶·¼ûŽ„r§Â8-Õfÿ ó{nï?Îwxb»Ú»îïþœ¢|ã™ç•_´jã©îw8ó¦·lµã¿rž·Çt Ç‘ÔÃÓ@@@@@@ Z*Œ«åáF@@@@@@@ ù x7m/Ôè2Rë¿Ú->>\u�Í÷pU3²ò"ݘ³k—2¯,A™Þ¶µ2I5ä´¦$`õô%yÙÊ]¹VjÓº�2#)FÙ\�¥¿4O£Û‘esZ§´µY®›ÒÖê/ÍÊ‹r”;wÙ{Qlë6ÊÖ‰õù¼-.n¨/ˆŽ¶'\LŒõ–†Á ””Øû¶ßù^>õïÆ–¸¼‚x& Š€û òùìì)!ÁÎi ¼@YY™6.--U&&Ú7`Ñ@ x�ÀW�{EEVð~lÙÒxµôgãMÀýW8÷uäž …¶¿ïÍï³Eø@@@@@@h!1{&¼m!ÃmÆÃŒ¶«ªÓÚÚì°iÍx˜Íhv G\ŠUÙv°Éa[DóÆÚPÛuhƒmƃŒN°÷žö�xjÆ™¡!€ € € € €4C*Œ›áAeH € € € € € € €@01ÍvZÔ`FÏ6 € € € € € € €@  Â¸|†Ž € € € € € €-[ ÆÛ²ÇÏè@håååêçÆ�•kÖ¬Qæää(‹‹‹•ñññÊ´4›CºG�Ê.]º(£¢¸2L m®^aa¡¶HHHØ›½7D¤ÀÖ­[Õ¯]»v5PïÜ×QÏž=µÿØØØz”¦¸[÷}©´´T��‰‰Ù›Mq,ôù`ºiõêÕÊ-[¶(Ý5^¯�G&''+;uê¤t_#îï#ýH«Q€ßA55é JJJÔÿ+V(7lؠܽ{·2::Zé¾vºvíªe^;B¨Cs¹ªîï ”””:쇻4¾€ûÛÄ=—ñûýê@ÇŽ•­[·®ÇΔ••io«V­R®[·Né>[܇pŸ-Ý»w×�½zõRºÏ"÷Ö–��ù r�…›î9WKn¸16Î+¨rÿÃõ¸•{ kúäóù4L÷<ËýäÐÒÞ£î(7ô3¹¨¨H�w?nÚ´IËîo÷÷�ûضm[­wÿíÎý Øpã�Ì=7ô+(2GÝTzÅ¿#7•#E?@@@@@@@�z°R €D¬€[•2sæLõ0;;»š~nÞ¼Y·.]ºTé^¡?vìX-wîܹš{µä›Üê.WÕãš÷¦ø|p¯Þ]´hQuÞ­0vk(©0Dv+MwîÜ©•­ZµRfddnä²{µõöíÛµ½[}ä«Ü,))Iëë·J©ÊjÆ+Ýš†ùóçkŒ .TV\–/_®m¾üòKåG¡8p ’V½¿ƒª÷iº·º�_|ñ…†à~‹ÉÁÆâÖ�‘#Gj³lcÖ à¾/¹UªîwPa|Q„üèVÈ­]»VýY¼x±Ò­î ìÞ˜1côc}ýîv÷?uêTí3///ð�ö.»Ÿ:Ü×à¼yó´þ¸ãŽS¶œJ¯Æy¹5dn��‹ïž™R+¹÷©XãBã¿‚Ü.…ëqk‰� ú”ŸŸ¯‘†~ž!\aìFã<“ÝG™3gŽFêþ‹œûîw°�»ïŠîy–û®8~üxmœššz°»4³õ ý ªžË}tw~U¶¢Â¸² k@@@@@@@�!c³‘e9@IDAT…Ð@@ ò¾ûî;ujÖ¬YJ·/°�n¥cbb¢Vº³¤¸³å¹Û¸U³|ð�~7nœ²_¿~îM$ÔJÀ�5ÊÍZÝ‘�k%ྃ¹µ­îµÕ•ß÷¶C÷ n÷Jü¸¸¸ƒmÆú\ÿ)S¦hË5kÖ°½[½çÖ‘»æn…–{ìÜzÙ3fè^î±p«�Ø ?Ö£€[Íà~¿Hð¯—`:àÎQMX0V�Ûì“›ûMmÚ´ÑÆnCVV––ÝW�›Ÿþ¹Ö¸õ²£F� Ü-Ë *àV�Wÿ->µí€û›È=âµ½oóØÞ­$v«í·nݪAU_kU_£vk¶>úè#í0°~È} ¦§§ï} ]»viÙý­çV!»çM§žzªÖ»ß+³wcê,à~~v??äææj?î\ž�Ç¢Î;oÆw ×+(\�ÛŒ%C ‹@c>“ÝOt“&MÒHÝw¹À!»¿}Ü÷@÷7Ž{–ø¹ÝýÍõÎ;ïèŽgžy¦2---p',×JÀµu?{¸ÿjêž½ºg7î­î7‘¸Ë]ºtÑþÝ[kõ@Íxc*Œ›ñÁeh € € € € € € ðÿíÝ ´]õ}x]½Ð !„€„ÌË`cÌ+ãÔµ�ØNœ6žNZOgÚLf:íJ»Ò׬NIÓ4]ië¶3«iÚYÎZíꤓºÛ‰]׎p° ƱÁæa2 !� ÄK $Ýùm}ÓÛÝ«suï=÷<>'áï}÷Ù�ÿÿó?ûœ}töwÿ L%` ã©tuÓ¦M5ßc.¢�2 †vÂ>½“ræ'é•9y6#¿fÝÔ0ï~Ž©éöWÒ!�¸­wùå—צn¼ñÆ*£�-Ç?‰ä{ï½·f&ùàƒÖt’(o}ë[³°rNòéß¾OOçîÒ§íw¿ÎeÚsÚÇT{þèL'[œã¢7­~íµ×jG·8ÇWö›oOïyÏ{êÏÕ«Wgf•ɹ~å+_©é$�²Öí·ß^s~ò'²ÊÜÉ©&}2uefk;Sïe8žMÚ~æ£ÍÝÿý’kQ#³uëÖš¸êª«†j^Z‘«z'{×ê¬R^ùÉÖw$4u>¬s_æ´r…u®sÏüøß|óÍõg>ƒÚËg:×Ëç¾ñOb2Ÿ_9¦’3î¾7;÷bN7I¯nذabጆ›q:3ÚÊ•+ëÙŒµ–t]Æôj'_“´k¿NlÐÄIòjÏý]Ú£´^tÑEµü­·ÞZeçë?ÇÎÛßþöz6ùï»îº«¦³µdŽs—´q=å1G9.Rvî"I ÜE&÷q^Ý©Ô9'wéÅ9ÇÈÃ?\«´¿étnaºsòù•„VÖM†õø@ýÙ~—˳I€ýÈ�üHýùéOºÊä_³…d¿n¸á†,¬œ¡@îz•ÄvÎrÖ!a<lï� Ôd¾ö;™ƒùNO 7¯äÎo¸[¶l© ÿðÿp•�Ÿ;iKÞ óù’ï¼ù׿<ûüóÏ×Dîö”Vd¾²{�ö]Fò)Ó>ÏtÎÃóI”3“v ¼û} ë’ÆÃÚ³ÚE€ @€ @€ @€�S,?Åž&@€z'�LI{üÎ\›Ÿ„Jç5Œ�5Ë2o²óYsæB Ù  .¸`.6n›=HÞ.£gw¹ò7ÇQûŠÔT¦¯v‘”a’U1é&Y•ÌPÖÊu»Ŷ›w°öNÝË·G'šÝÄR_uÇœV&ýÕΕæš÷Œ[ÜÍ®¯¹æšZ,¹±\©�m&K4ÙUöÝlÙ2§'Ð>º9úNo/ÖÊë|ß¾}ѾþúëkN7ïcW\qE-ùøã�WùÌ3ÏT™#1yý›nº©æxÌ—@ûÞIIÎWMk¿W^yåI+œ×ö£�>Z϶ù']¸Ë™ùÞôÈ#�œ°üu×]Ws¦þôÉ9|–ÌxÆÙH>ËÞö¶·�r 'ìt¤þÌ�±^yå•.[�ÔWŽ£Ü#åÔ«çÎݼ—N½�Áz¶—GP[f¾öÛ®ƒéîrLåÛVg™÷ØÑ¼ÓOo^ÉëÖ­«ÎÊþr_Šw½ë]5§û¬jîd–Oœ¼æì}ÇŽµ ãî�…ö’yåGr²¾Èü,“cg²%Û[�i ãÑék-%@€ @€ @€ @€ÀXüGþò 0O¹:þ‰'ž˜Ø®¤ÎØ�Fxš`1A`rUiÆüε¥9î2ªPF+œÅÝ Ü¦’J~·ûlG–L¦'ïl/¾øbµ=£¥v"dùŒ&Ø™7Êø‘é�ôÈd×ÿfÝŒ>˜ñŸr‡†îkÞY·Ñ™“„PŽˆ´zÍš55Ñý§Oz'ý˜O�$�4uÆktœ{ÙÒôf^ÿÆs'¿{÷îÚxûØIâ$ãFw³ßôQR&C:[Kæ8ç�“½ïu³}ËÌD =ž„ñL$çn݃í,xQÀ»ÙïÖ­[k±ÜW#ç-ÙÚž={j~Æ#ïf;£¶LŽŽœ§ußöœÑu³|ÞÛŸeݬeƒ.�×|û¼"ïK¹—IŽ ”íe:[�søœ�;‹èô™­9ù†{Ûm·�ÆÓG¹WûŽ éë|w?]Øö™Ûd¯üÜ_$[Î'~Φ»¯a]^ÂxX{V» @€ @€ @€ p  ãSyšôF`çÎ�µ£öÕñ«V­ª9›7oîM†f/I¶%'kZ{ÜÓ—_~¹K6q²å3?W)f$WÉÅ©­úÿÙŒ”1#SÛ�7ÖD÷ã¶ögRÃ\Ïž-L÷ªÛÕ«W׊ɭæøÊœÎë|“MIµ³¶íã4Çuûªá,Ÿ«³Ûã禮ŽÐNÏîçt¦½§^7Úíëµ³|»§ÞÂp<ÛËÏ ©År¤$}ÒyÜM½®g»Hž¾½|²&Ó}ÿÉù^2¬y¯Ë9ÉÞ½{kヰ½—a�ÎçEÊ©ÛØÎ`E,yЩ×J¿ä,®}\´ÍÛ[h¶ïxÑ^&5É–“,Ÿnï··fzºO>ùä «ä\®ûDx>¹Î=÷ÜÚN¾‘¥OwíÚUs+aÜË#(çu)Oè‚YüÓÑ4‹˜6uJ�^A9Ón²$7œÏ£vU3'eŽˆ|÷É»Üde–ioÇt t¾‹æÜ#ŸDýYçÉjÕË#¨}×®Oû>�ßL³dæçhê<âÚ[Íi ãÑìw­&@€ @€ @€ @€À c/ й†½]•-[¶ÔŸ® m›t3�LUûºÂÉÖj_³™+|»IÂu³Ìd{4¿ò:ùÖ·¾UUjgƒ2Z¤±‚rDäêæ¼ M7aœµÚ#Úfd¦Œ+Ü~%D{²1nS‡Ô'×gË9ÆÛÙ¯<›ÑC'»š¸½_Óm�ŒXœë¬sD¼ð µ@„»éý¬Õ¾OCz6wËhïk¸§ûá3(}‘Ì}r'ÞÓæîU×~Ê^2êt÷˜ž:ûì³kÅçž{®Êôc2룓0λ}7gqm᜛u¿VlÛ[Ⱥ�yñö2¹gF{N{:ŸMÝ�]Ý^×ôé ¤ß8pÂêIŸ0ó”nذ¡–IÂ8 ïß¿¿&òj”œk/� ©M’Ùšú|,ŸSI‰å:e7Y€Àœ ôòJ¶¸ós§}Ôä8Z±bEµ:çê9[˜úè›S"Ÿu�aêÍ^A�‘Ïëv¿}4µ—Ïü|?Ê™ü`}Ö·Û2ÓÆs¡j› @€ @€ @€ ãè$U$@€�áÈÕñI�´[šñÕÚsLw#�ȺYò¥—^ªÅ’KÈ»)»Y×2ƒ.ðØc�U’yM[’ß:ï¼ó½i³RÿŒ(œw§•+WÖ6O/¡˜„q޵d³r”%G’9í±‡§®|®üM‚³½Vê–+…Û#_&ç—úO½eÏ&Y•1´r\$owß}÷λÞõ®SíÛ·¯–i�E�wãɲã§Üà€.ПAÉyçH™zDÕ,ÓN6d΀âÏKµ;SqIWL·2é…¼C&aœ-tžNw˃µ|÷çcùxöÙg«�yŸéþèë4É}ÚIîôcÆ�N/ç̼}¼äS2ýÕžß¹}sæB }ÔþÜÏ^N/çݹVÎ^ÒË�Gú\´hæÛœ¯#¨]ó¤µr\$ ™³ëö1’3�ÜË$çi¾ù¶ MÏ—@/� ¼òóù•#%ï39RòΖû$…?YVr¾¬ìw¶:ï_’Lyû=s¶ö5×ÛéåÔÙ–|^ç;l;CܹdæäÜ/ß^sVyzw šlûƒ;_ÂxpûNÍ  @€ @€ @€ 0# ãñY™Ì\ Wag ›l-i¹Œc×Þ~ÒuIĶ“‘!2#wž^ °½Ó†[ Wž>ôÐCÍÌÕ»W_}uÍÄ+y'2+yŸIª&I�žÞÆs¥|®’ÎÕÓ)“ãI–±sÐì+É¡ôWæä}2ïr¹Ö¾]«væ8ó%ÔnÅ|MGõú믯 Ü~ûíUæ•ðý₩“{˜l„ï,ùÀL¬•WÎ5×\SsS…гGަäQÒ§�Ço®�Or%¹ðÎêéµN“Éætf:“"“­Û9¿óŽÉ=ä(Ó/�b³5'ÇK;¿ÕþLÉ{`çýÚ‰|Ÿ8³ÕÝo'ÇZ;ÓŸ~ì<ŽºÙfÖÊQ–#.ý›c°ó½´›mŽæ2“5†mÕ¶Fî@“Œp’^ùVÛ^Ò4�aÈ'KÊam£vM-�÷ÉÜˤ½¤Ùkkt?�{,E5ççSŸ9çs§ýIÔyVßýÞ‡iI ãaêMm!@€ @€ @€ @€À4/ŸÆÒ%@€f] �ÉÆs\®ÈÎõqÉx=øàƒµ@’�ÕH*â²Ë.«§®½öÚ*]שd�§Ÿ~º2jZ4’rؼy3œÈÝ ’ªÉU·�™ªéBåÝ,ïu¹†7I�Œr”´ñáÇk³Éçêàv¶8{Ì5ø©URD�5™,UÙ¹¤9�_|qÍ̘©ßýîwk:ŸA™Þ½{w͹ᆪܴiS•yüà?¨‰�;wþáß \qÅ5혚éÁDŽšöÝJ2.ugê1‰ÿŒ(™ã.Õ˹GÞÛ‰½T~ w‘q7·oß>ÑŠ$Eò.Úy/„‰ÅN˜Èò{öì9a~r®9§ÎIœ°¢?g(�1ð"?Y¬}¤äÓGÍ�}Z«·û¨½âé�·ä›Tz0ýžmf/í훞L ŸD¹×EÞýrŽÝ¹|Ž—¤è2y>}Úã¹v®eS äS)ïc“}Wšz ží¥Àd÷û¹à‚ zY�¡ÙW>ƒòúÏ¿?LÝ´ü«B¾+eÝÜåѱ#a<õ+dz @€ @€ @€Z�ŠƆ¶mF€B Wa·¯dOµ“5ùÜç>WæÊë©›“œPRÈ»víª…ôG´JcnMíæÙQH²}Ä]xá……àJÒ\“ž+�sençHê§÷jÉÝ"œw¶dæ’fžì=0Ù”Î~Éò횤7³å\#œDKZÑ^Òt7É'kõío»VIÚ;ãÝ~þóŸ¯9çœsN•¹þ=Ÿ;é…óÏ?¿æßtÓMUzôR ©¬5ùÜŸ:c—þMÙ®gÞÚ¹Éö³¦;’¶Ï;OÜ’Qxì±ÇjáË/¿¼s•æäøúêW¿Zó;Ï÷:ïµpÂêþœ#�vþ¾óHÉNÓãy÷ëLóÏQÅlvB ŸûNLœ^_tÞ =+a<;ÅDÞ©80±Lî"Óy7±@Mäs*çl¹‡V¶�;d8‹k[™&Ð�@>¹r¯ |�3.x7nóµLî#Ø>ÓË}€¶nÝ:_UÐýæßò¯9g›ìÞ0íæ*Yä|å_'fëß@Úû¬i ãÁê/µ%@€ @€ @€ @€À¬ ,0ž5K"@€§%ÐN'd¹žý‹_übýùâ‹/V™+ ¯ºêªšÞ²eK•Iìe4Ð$&y䑚ŸëseÜí·ß^s~ìÇ~¬ÊΫæk¦Ç r ïÜ%±rÍãÔ)±6a¤VÏ5§O=õÔD«#œq['fŽìD9Iˆæ*ÝÉ2UÓ%JF$W¸g/Ùr{4â¼§¥�2Úq{T¡nö˜÷½n–´ÌÔù Jåi_ùžu÷ïß_)3'©Ö÷¿ÿýõ§Oœ˜ô¾LN+=ؙşº>9N;ûzêµ<›]ÎÍvìØQ ñ¿çž{j:ï{“�ç�<÷�wÞYKvŽ^[»8ô¾Ì9^ü'û4lŸzßë}%aœ#®}¼œ^Â8Ÿw�GÜd9æÞ··Ÿ÷˜dp¬rF×Íø‘iQÞE:T¦Ì7ÜÉÆ?îgu#0¿9‹ËgSûj~keï�y—˿ൟÍ�i&;ëh/i:9xá…êÏLŸuÖY5Ýùi>™X–Ï¿?$gœÏ¯Qî ãÉ^-æ @€ @€ @€ @`È�y5�ô»@gš's’-Nfå=ïyO5#×k·Û“kß6nÜX3Ï=÷Ü*¿ò•¯T™kë2Þd÷£èµ·lº�ôQF+ìfùé.“OÏNw]Ëw ìÞ½»f¶G%ŒpFcí\~4ç$—“»Ì®@çh@�#¬·G L>²û«ƒg·¶£¹µ¹;E;‹Ÿ«Ý×®][,?üp•¹Ž»­”+²ï¸ãŽšyë­·VÙ}º¨½Ó§'�»tŽ€{z[sÜM×íæ›o®Už{î¹*sV�£é _øBÍ9ï¼óªlš'�·k×®šŸ³¾¼fDäeõT=òž¬G¢1»eÒ�íÏ�l?gÑí³…,Ó™Öjçøólò‘ízæLC¶Mfkº� N¯eË�ß­ºÙc¶ÐÞNÖ:½¼r7{Že’ÊJ™Éyu÷¯ù¬•sŒ½{÷K¾aåN3²ûÃñ:ÑŠé ä¸ÈZÝ¿§µ?•F99]íÞ/ÿÍo~³vÚ>ÓÈ÷¦·¾õ­½¯Ì@ï1ß@óÊÏ�ùòÙÑ}£ò)ŸœqÎÏóï¨9{o‰ÝosЗ”0ôT @€ @€ @€œ¦ÀâÓ\Ïj @€À, LvÍZF¼{ßûÞWûéæÚöK.¹¤–|üñÇ«|òÉ''j·}ûöš¾ì²ËªìþZï‰ÕML!0ש‘%K–L±wOMW ãöZ6l¨?»9¾Úk�æt2síäM�ј‹÷–\ÜÍQ�Zuf^G³§N¯ÕIÚ}éK_ªÕ3–júô¦›nª9W_}õÄfså{òÇ÷Þ{oÍO( $1ù;¿ó;õç?øÁ*36ažUÎ�@Ž”™§º3¦Zg’rîj>[ÎXÅþð‡«99Ž’�Ë»SŽ©ÉF)Þºuk­uË-·TùÐC�2×g'ìn¤þÌ«==5uÓ5™z™ŒH�2Kæ]ô‚ .¨?çâSrêúŒÂ³�ÙÓq§÷Ö¹Vz­s/£`ÛM“èzþùçkáÈç^2Ýœ¹un?g}¹ÃMòÊ9¯[¿~}çÂæz�d%ó.”O«nîj–,rÞµrþ0ôP×Àü{ÝO<1Qóôòõ×__sôÚË)'rÆ•³¸ü›êºuëj­Ó;ã:óÌ3kÝÜ'&e¾áæß‹&û7ÛSVr@�0ÐŽSm @€ @€ @€ÌT@Âx¦‚Ö'@€3Èè2¹.WgçúµÛn»­¶<Ýìã¶mÛj­vÂxÿþý5'ã£äJÕVØê�#°NÖ9žîÌSãÝì}—Éë?¯ØéÞ�'í͹Ÿ3ÀAìýÔ9ç ù$ÊœG¹'ÊtßͲV;õ•-kÊæGPF|œÝóÀöçZ¦÷õ©æÃ-0ó#¨Ÿ_)»YÞ2ý)�”êïýÞïUõÚ÷’ɻ護ÞZóÛŸeýي٭ÕÌ� üKN ÛÿF1“zæ|2w¡k�>“mâºƃØkêL€ @€ @€ @€�Y�0žD› @€3È5qo#ãÛµÓrÓ ª3'‘­eË3©çð­›ëgëjÄáó¦%騙™îñ5L&ÓmKÞ£f22P7{<½ëèsEvÞK»Ù‹eÚó¾=á–-[j�馲Ö%—\Rënß¾}bÉ5c!ÏõX¡;ˆ ŸAÑM=«dîÓNç�íœsÎéYkGI�ø¬^›ÝÚ¶Ïr·Œöw¨é…¬›;� ë7…Ù:‚æâÌP¶xº¯^Ë÷^`¶Ž Þ×Ü{)�³»;vºÿþ‰]ç�ó½ï}oÍÖûXL4ö¤3?‚rž<ŸÑùÆ:Êß[%ŒOú¢5“ @€ @€ @€Ã/ a<ü}¬… Ðç¹¶.ãl=ûì³UÛ\ÿüóÏ×ôtÇ&lg(Û Ï^ÚsL�TcÛGG®êMvdt´”@§À¾}ûN˜9“DãÅ_\[Kª8GÜÁƒkNÆîšnjù„Šù“À äHÌ‘’f&c·aÆ!nµ¦˜‰@ÒEg�uVm$ùàl-ß¡ºA¼½V»>ɯ�rƨ­ašºÈ¸_ýêWk•]»vM¬˜Ï”Ûn»­æ8Ç›`1ÑWÆ}Õ*C€ @€ @€ @€�Þ ôyÂx¼$^öÁ*¿öûߨò�Ç÷Vydõæ*·]ùÎ*ß}Ë[«ÜpÆX•'yn®—ð÷o¯òîwVùÊê «¼âꪼåúæú÷Õ‹ª˜¿Ç‘æŠû�÷ßWå�<\å#;_®rù¹UyÙuï®òÝo;·Êe“4ñØ+;ëÙ{~÷KUÞýH“E[²ùÊ*ß~ý»ª¼ùÊõU.­ÿç‘«ªsMhFSÛ´iSU8F1i§3žbÆ3ȈÉs Ç|ii]/¿Ü¼ª:TeFH’ríÚµƒóÂ쪦yõ>óÌ3Kú«7ýøÔSOU‹2=Ñ´&Ò³ç�wÞ óýÙ�@®Ž�^ÆYk÷îÝ5qÍ5×t³‘‰e:ÇßÊöåº&ˆLŒ @>sÛ O¶8GG{¾i£&ÐN4¦í3IS­X±¢6’#+g)ßxã�šï“hÔ^]ÚÛ½ÀŽ;jáöùv¾G8jº7´ä¨ ä³&wcÚ³gÏDóŸ{ÎÑÔÍ™^–Ü»·ù÷Æöcº÷yj¯kšFS Ÿ)wÝuW5?w]ŠC>�n¼ñÆú3÷dM­î ãþï#5$@€ @€ @€ @€Àœ,[0IpuNv×ýF߬EŸ¿ï?VùÏ>þ[U~ïÕæ·íå«×T¹èз«¼ëË¿]åoßùç«üÅÿã#Un[þßÚ2þÊ#5çSÿø—«ü�^ªréÙ«\yèž*¿úŸ?Yåo¿ççªüÅŸmîÞ’*zú8²ïÞÚßoþŸÿ¢Êßz°©áøXS‰•«šòõ?¸«Ê/öSMù§~¾Ê_ø3WU¹ê¿5qÁøKMöú7þþ?¨òS�®réYM^sÉ·¿YåíŸi|~èg¹Ê¿þÇ›„n³Ý~}¼öÚkUµ'Ÿ|²Êv6.Wßœ{n“±ô„ñ‘#Gª�?þx•/½ÔôxZ— Ç+¯¼Rs’«ÞºukM¯_ߤÃññúë¯Wµ{ì±*“*N+Ú-Mò8^xa‚2¯á_|±Ú2¯Þ$àsµu;ñÐÙYIåhMÛ;—1gj�mÛ¶Õ÷ß•ï$iõ¼?¬ZµjêÕ'žm_SŸ™Y·û-LlÊ�!È{W{d»4*÷ö˜I’rp4�@ äXhSä<­=§û霶ÏrV�;‘t¿K�|îÌ \z饣ƒ ¥N[à‚ .¨uﻯ¹o_¾CåS,w—éæ®fY²ýÙ—óÃ-[¶œv­¬H€£&�Ï d‹~¸¹�lù6tÝu×ÕŸW_}õ�í ô©€„qŸvŒj @€ @€ @€ @`®�/hÆ ®,Ü\ïiZÛ?Øä«þÓ¿nòµ�­ÿ`•óWþ‡*hËÊ*¾þl•wýú/Tùñ/ÿF•Ÿ¸½Ïø—?ÜŒm¼h¼I7>üéÿ«Êßx i×MéW«ü¹÷7Wžqô@•|òŸTù�þÓ¿ªò__~I•¿ð£M·—Ã/,ûJÓ¾Ðä~¯ù©¿SåÿòÁ·W¹yM3âðág¿Vå'þÞ?¯òË¿õ‰*¿øC¯ò£vz¼ öáÏüZ•Ÿ~üŒ*oø‹Í³íM2uÉKß­ò7~á—ªü̯ÿÛ*¿ö¶¿]å[ß¿×äœd’SÌuÖUí¡yd\Òdj“Ą̂T¹võàÁf4ë\WþôÓO×ôš5kª\²¤Ÿ“á'ïœ\9•djrÒû'É’ôì£�>Z+'Q=#7ïß¿¿Z”lñÉ]snú1uÏj“�´‘W²lñLú9c{çý!£påÎßùÎwj³·Þzë)7žþÊñÕ^8WÇKR¶ML�ŽÀÔ ãÑqÐR“ ä<-WÁçxÉXª¹ >gæ“­Û9çÎ�5³�0>묳jÎg4ßY< ·@¾étÔäHùæ7›;„eœïø$)Ý8ܯ­›-�ü{BÊ}ûöÕfóïK>ØÜ“ï¶Ûn;厲dÖÊÂëÖ­«‰|;;åê @€�È'È�wÞY�÷ŒyÛÛÞVóßñŽwŒ¸’æŠ@ÿþ‚8(‚êI€ @€ @€ @€�Xü‡ã>«þØYÍ]Ýÿçð+U~`y3r϶5­ôï²fDÛ›?ü�*/ºýßUùØ·¾_åólÆßÜ^åÝwì©rÁÆ�Vñ¬É/Kˆzq3Êï5?Ùä•?pçß­ò³¿}G•Ûßûg«¼¢ ÷öè±ðì¦�?ýñ&å<¶bE•í$é²so®9ï¹±±ò÷>»»ÊÇžz¹Êñ‹Î®rÁkß«âö/5mÛò±*ÿôû›lñò\°¦¹nåOþ©ªò ÿäî¦üF³…÷üxãП×ddÍ+¯¼²j˜ë¬3ŠgÒu5sÉŸyæ™Õ–$-Ú�ʜիW×̤�3jé ^ÓšÉUW5£nwŽ<�+îÓÒŒ”+ñ#Ó6”é7ß|³ªúÔSOM´79ÎÌ”VLVÏvÂ8ñ•+›;=xÌ…@òÙ7Þxcmü³Ÿýl•ñä‘Gj:yýË/¿|Š]ûÛß®g3 WË] ÞúÖ·N±–§ ·@Î+:ï\’»& wÛµŽ@7I1æ\4÷JÉ8Ä·ß~{­þþ÷¿¿ÊnòÁ»víª%;ïr‘O.w¹è¦/,3¸¹ÛÐç?ÿùjÂ[Þò–*ßùÎæ.h�ß†ÒÆœã%[ÜN¢äH¹ùææ_-jýHVS Ð!�£æÚk¯­g¾üå/W™s¿Y›77ÿN¸mÛ¶ŽõšO<ñD•íc0ßȲ5wÏ:)š™ 0!�_.ùu)wZÊSùIª8÷mšXÅ�>èÏ_ûMõ @€ @€ @€ 0 ÇÄídž4qà3ÎkrT'¿°’µ+›,f‚Ç;_}­¦×5ZÉË͘%ϼ2^åâ«›,òÚŽ sÇ–5©åk¯]^åï|é[U~o÷Ÿ©òŠ‹:­¹sõhÚ¸ôx¶ø${oZsèµ#ÍSc˪8{uSÛĤ�<ùPMß÷Jó×Ù¼Éqnþ#o毺äê*/_rg•ßûîö*|¸I¯s‘@)ÌÇ#×uf‹Ûui_�ÞNv¶—”év[:ëÜnÝ ŽÓÜnQò4Éçúå$§‡/a<è=Õîµ~žN’8Wµß{ï½UÕ\#ÿµ¯}­¦wïnî‘äJÒÞy½=öØc5?¯Æš¨GÞs®¿þúšN¦ÿøl�‘È»q{\ºä® #Ç¡Á:rÎvË-·Ô3_üâ«Ì•òÏ<óLMêSŸª2#omÝÚÜÓ(Ÿ>ùlÊ=-’*þþ÷›{>µ�µŒŽœ{ÕS†R céK_ªÖ%�ÿÀÔt’‹É5f<Ôä sÔäÌ-™þ°´“(9v†’K£†X ïÿIYåXèll–iRd™‡jþ�kÇŽ�«Ôœ 6Tyà 7œôÙÌÌ'ÔE]TæèË^¾ò•¯Ôœ|¢]xá…Y¸Ê'Ÿ|²Ê‡~¸Êv}.¾øâšcñBðè±@^‡½?‚æk¿=æµ»¡èý+9Ÿt9|öÙgOÎý™òïu¹Mþ]"ß³ÚŸ;'¬8ñgÎ ßýîwל�7NÌ7A`®üx8×¶O€ @€ @€ @€�>èÛ„ñ©½Ž<ߤ¬ž>2V囚$ñÙÍ䂱3š$îŠã?…�¿Ü$�ßhfŸðh~Ö9ëª\x´¹ä齯W9~Q36çñÍÔÿÎÏãØjÇO|ã“Uþ‡¯ªréeªÊ÷_ÕäŒëÚÇúïà³OWùòx+Þ¶î¬*;;ráYÍhÍëŽ'�ßÜÙXíkV•0núð‘”F®NÊ5DÝŒׇ ™¢JIïÛ×Üॗ^ª2ãG®Y³fеúù©äRfî\ó•1Ìú¹æÝ×-×¾åõùꫯ֊íüPz0‰Ø©ÓóÝïÑ’ÈH'¹19•ôÂã�?^ ¤œÌ*ï!É(½x2%óGGàðáæ®-9‚Ú­–0nk˜&�DcF,NëСæ›È+¯¼Rå]wÝ5QæS¦ó˜j^pAsg£÷¾÷½U½¸-czøò­-)üo|ãÕÀ|ëɱsÿý÷Ÿ²ÉíXsxÊU,@ ož{[¾9v_ɃÖÂ);×êf<ïvëµ×š LÞ+)®|‡MÙ¹ýÌ9÷Üæßo½õÖ*³µÉ–4ŸÀÜ Ì×4_û�;I[M�^¾’soŒÎlqäó/ü“Ý9£›ÞÉ'Ñpܽ²›öZ¦$Œû§/Ô„ @€ @€ @€=X<ÏqÚÓkìxsµà÷¿ÞŒæ¸o¼ÉßzÃåU®LÂxe3âÈU—-­ò«ßÿz•ßxâUn¾¤IèŽ-hÆ6~õ±ÏWù>·«Ê£ š%_=”r³µÞ?ŽîülíôåÓU>úÜ U:ÚÔbõÕM¶øïüµ�TyÑ’fN‡^iÒ™ãÇ;oÕÊ&Q}’ÇâfþÊ¥ Êø«M2 Ûz÷%—\R;ÄÜIÚ’ñbsÍWÆC¾+‘Ûãj$¥—¾Ë+¥�±Î8OÆÕ˜ÝcèÆo¬ &õõ­o}«¦Ÿþù)v±vmso‰¬•t× {ŠÀˆ佫³±Æeï41‡ÀæÍ› á£ýh•IFnß¾½¦Û£QN–->çœsjÉ«¯¾ºÊK/½´Êá;/ªFy8©@ÆênŸ³å›BÒÆ�«äèH¢1#³:‹îT2‡Àtòo)úЇjÅûʤŠ3ÖxçÖ²üUW]UO%ßßMš¹s;æ @€†C@Âx8úQ+ @€ @€ @€ 0m�ÅÇ·Ó^m~WxcǪÿïïî«rlë_å�]׌ãû‡c/ÜXÓ·þÔ�Wù…ŸÿT•ÿáïýïUþà–+«\¹ïÁ*ÿà»{ª<Ô¬øŒ%�£×"=zŒ-^Y{ZwÞ¦*_kÂÅ;÷4#¸¼¼½IHßþ­›«¼ôMrzåX“�>v¬YæØñ/^ÔüêßjJý•G3QšõÆñå�5ëž|ÙãO(æE )�§Ÿ~ºöžé\]>ˆ¹ÛNÀ\;ß'2£/$Q�±~s%~çºý<'ý•ÔZ²8Ë—7™þÉ27ýÜ–©ë–Äj–9óÌ3k¢Ý›/¾øbÍI‚|÷îf¬ô³Ï>û„eêO� $+œ2©î;9Ž2rÞºuëj/íþšáN­N`hrtüÌÏüÌдHC̵@Îjnºé¦ÚQîZ‘Ï�Ԝ䴒ÁZ¶¬¹‡Ó† ª\µjU•FY`Íš5Õü÷½ï}Uæ›BF¶Ë}¤r�¢Ü­ÇQ3ʯ“am{þãcûؼ70ŸP×_}ÕäÚk¯­2GâË/¿\ÓùΞï¶ç�w^ÍY¼8ÿpV“æM`¾Ž ùÚï¼AÛñ� ôþ•üÎw¾³,S)ªf�¨€„ñˆv¼f @€ @€ @€ @`ÀÆ0õûÕgÿ߯þf•�mò¸ù™&I|é²v¶™^yUsUãßÿ‡ÍÕîŸù\3Úñw¾ÓŒ_rƶëªü“ó¯V¹íÉVå/~²Éòž¹*#×ä<<n~oíõ¯üBS6Éá'lï÷ªü/ÿ÷?­òßÿ›P娙ÿ¼Ê¿ú®æšå3–¯¨rÑñ%_yõõš>IvøX3ÿµ×šgÆŽ�g|Æ’¶RÍöè �çž{®êqð`ó:̸ÅëׯÍF%Ò¢Œé•í%¹cÇŽú3™Ô\Ï›«ìgcŸs»�ôTÆ‘Íø—IÜ&s“}·Ç*K7Ðdæ¶~³½õdÄ3*aç¶Ó¢\�ýÒKÍØê)“çë\Þœ™ $Ã�ræ[³ 0µ@ÎòÉîó}j+Ïh ä;–-[Ú3M Ðc�ükCî Öã]Û @`à$Œ®ËT˜ @€ @€ @€³#08unFǼãW?^åo=ÞüÎý–?ósUþÔÕÍXY'KÎ.ªùg_ñ#Uþôñ²&þÛc¼Is~ýîç«<¶¤Ûø¢sû‡¢iݲ WWùãûp•_¹ï7ª¼ûw¿]åÇn~•g­oÆYY2ÖŒÇüÂ˯U™„qML<ƽRÓ/5qå‹/<·Êµ.h0ú葱H3n®{½è¢‹ª~w¡�*:«Uɨx�õÑG­mïÛ׌Gž\uR,³ºÃYÞXz-ãe<æ'žxbŠ}ìÚµ«žMÂø¬³Ž�¶>v²w¬)6Ñ÷OµG5ÎØl}_e$@€ @€ @€þPÀOˆ^  @€ @€ @€Q�Å'‰¦öÅág«F_û7¿Tå¯Þ} Ê ?ü7ªü?ù–*WœVToüÅûkÝ»î=\å’ ¯­òòu½ÿí¼ ÿ=ÖìwÑ$;_¸ty=»âø³G_hÆ=>$ñ‚õ›/­éË–|±Ê‡~¼ÊýǶU¹¡µ�û¶×œG7³Ö\~a•ë[ÏÖŸó(�qp“LM¦öâ‹/®ú$};�›Å]'ƒ;Yb¸�¢¬Lj’еw2®¤Æ“?ÎhIË–%}è²ÅHK3�q�'“1Ÿ @€ @€è7?!ö[�¨ @€ @€ @€z$Ð?÷ž¤Áã¯?Us¿òkM¶ø_Þ¹·Ê³oþKUþÝ¿ø®*7NY÷ñ—PË|ó±3«|ÇÛ›|—&‹|¬½ø¡Ïþv•÷ZQå;?Ølmó¢*zö8Z{Úÿ�_«òWîØ\åOÿì�WyÅYíJ¼Ysv÷ªÜq¤©úÊ·l­2â…ëÞVÓ·\Ýd¿óàU~ýÉÛªü�Q娱ªüîï£ÊÆ66óo¼¤Ê¥õŸÇ| dÜd‹“ÁM¶8£ÛÎwífgÿ“øùç›1·mÛVe{ŒÛìãÅ_¬‰¬Xщ“e‘³|ÿ”+W®¬Ê¤ì¬UZôÌ3ÏÔSÉÝž}öÙ5�1Œ;—ïç9I~oßÞÜ«àÜs��ƒ¾ví ~å•ãc¥¿ÔÜÿ`Ñ¢ælõêÕ',ãO @€ @€ @ Ÿ$Œû¹wÔ� @€ @€ @€s(0eJw÷{ŠM�¿¾£–øü?ù…*ýÛMñØX“ê[ñÊ7«ü·ÿðÎ*¯²ù¯y4¿|Ÿÿ�¿\å_zw“¤½çשÊ|g3NðÅ7ßVåõ[›<î‹�ÜUåßiÆE>ó†&¯üçn]_eO9o2yO=üX•;þà÷ªüÛ¹©Õ»Þ}]•®iòÄ/íh²Å·½Yæ�UÍüŸþo¯rerÒcM�ßõ§ÿd•ÿåÁ߬òÿùåXåÞ÷^]åŠÝ÷Tùů5ùÎ5·þõ*?xyÓöþ|$‘™ÄíáÃͨÒy$ݘg¼§9 Ô¤Q·nÝú_˜ÿMâvçÎ�Uã´kñâæ|öÙæÕ¸gÏž*Û�´÷Š+®¨™íÛËôçôË/¿\Köô¡‡ªéä§3ºí¡C‡jÎKÇ3©i×ùçŸßŸ ñZ½úê«%�þÊ1¸wïÞš“c0ùévR|Ó¦Mõ¬1ŒGüe£ù @€ @€ 0p=ý�tàtT˜ @€ @€ @€C,Я ãƒÍÄðÀñlqøÇ›¬Û®¾Õ”™óGÊ%õב›šqŒm¨â�ú¯Tù±Ãÿ®ÊÏ|ã?Wù›ï‚…+š‘8ßþ‘¿ZåOÿÔ»«ÜÔ¬ÚÛÇØYµ¿·ÿ¹TåÇßò;U~ò·>_å×?×d…¿šÐôØ5}î;~²Ê¿ðçÿ»*oÝÜ®h4^þ–æÙ¿õ·ŽTù«¿ö™*¿ð›÷W¹`é9U¼å}ÿ[•áÏÝRåú¾¿0 YÆ7Þx£jÛùȳ�ókÎÁƒ«ÂɧæIQ§ìlKÒ·íå;—éÏ9]tQUlÕªUU&?}àÀ�ªš1€·lÙRó'ø„UüÙc�ä“qß½{wí=¯á$ÈS™ä‰“ø_·n]�khw @€ @€ @€ÀÌúþ‡Ä™7Ñ @€ @€ @€ @àdc{ö6㉮]�¡qO¶ÈéÎ;ãŒ&#;ß�f ãÃ/í¯rÿk‹ª\³~m•Ë›É~zŒ7)á×6)Ì_m"Æ+Îi²zg-k*ÚMߌ¿Ù$°÷?ߌ»xm“±^s†«ŠÁ£/2:u²ÔygX´¨ß¾€êóJ=z´j˜;¤{ù>?ÙfŽ–¶dLñ™oÍŒŽ@ÞÛs'Œ^¾ŒŽ°–·€#h¸ûWëæZ GбcÍ÷ýeË–ÍõîlŸÀ� ä»ù›o6wé[¾|ù�µNs̵@ûÊ÷ Ü#p®÷kû†CÀ4ý¨ó%�…Ëq”oC³[¿)ή§­ @€ @€ @€ @``út ãÙók~_ºz}•ç­ž½­Îú–ÆšŽX±¦I¯Xs:[[²²V[w^Szè7�¥K—V•Rö[ÝÔ§{�$qW¬XÑý*–$@€ @€ @€ú\@¸Ï;Hõ @€ @€ @€ 0W~0ž+YÛ%@€ @€ @€ @€@Ÿ øÁ¸Ï;Hõ @€ @€ @€ 0W5tîØ\mÛv  @€ @€ @€ @ �$Œû¸sT� @€ @€ @€s)°xÁØøñíËÏ%³m @€ @€ @€ @ ÿ$Œû¯OÔˆ @€ @€ @€=X¼ ãžìÌN @€ @€ @€ @ $Œû§/Ô„ @€ @€ @€=¨1Œ�^ÜSq;#@€ @€ @€ @€@ŸH÷IG¨ @€ @€ @€z-àã^‹Û @€ @€ @€úDÀÆ}ÒªA€ @€ @€ @€�^ ÔÆãÇÿ¿×;¶? @€ @€ @€˜_ ãùõ·w @€ @€ @€Ì›€Œç�ÞŽ  @€ @€ @€ 0¿~0ž_{'@€ @€ @€ @€À¼ ,n†0ö @€ @€ @€ @€�Ñ�0½>×b @€ @€ @€ðƒ± @€ @€ @€FTÀÆ#ÚñšM€ @€ @€ @€?{  @€ @€ @€ @`Dü`<¢¯Ù @€ @€ @€ðƒ±× @€ @€ @€FTÀÆ#ÚñšM€ @€ @€ @€?{  @€ @€ @€ @`Dü`<¢¯Ù @€ @€ @€ðƒ±× @€ @€ @€FTÀÆ#ÚñšM€ @€ @€ @€?{  @€ @€ @€ @`Dü`<¢¯Ù @€ @€ @€ðƒ±× @€ @€ @€FTÀÆ#ÚñšM€ @€ @€ @€?{  @€ @€ @€ @`Dü`<¢¯Ù @€ @€ @€ðƒ±× @€ @€ @€FTÀÆ#ÚñšM€ @€ @€ @€?{  @€ @€ @€ @`Dü`<¢¯Ù @€ @€ @€ðƒ±× @€ @€ @€FTÀÆ#ÚñšM€ @€ @€ @€?{  @€ @€ @€ @`Dü`<¢¯Ù @€ @€ @€X<G�­†<ÿüóU¾üòËU¾ùæ›U®X±¢ÊsÏ=·Ê3Î8£ÊAy8p ªš¶t_çM›6Õ‹j·¦×öîÝ[­xíµ×ª\¸°¹¦aõêÕU®[·®Ê±±±*ý‘žÍ+ö�7Þ¨æ¬\¹²Ê´qùòå×ÀÇW�Ó¢ôc7¯Æ,ùÌ3ÏÔº¯¾új•Ë–-«òì³Ï®rÍš5UöÏãÅ_¬ÊúhÍyýõ×'æ'‡úÊ+¯Ôœ¤/»ì²šNâmb±¾�H5‰½n*™$îùçŸßÍÂ}¸LŠéǤN—.]ZõLv=Éäã“´>óÌ3'ÚÛÞZ{~r¤úë¼ÝÆá˜žzlø×iiz|8Z­ @€ @€ @`˜$Œ‡©7µ… @€ @€ @€Óà„ñk¯½V Mâpùòå5�äbƸ]¸°ù-<9Å©3pÓÐêƒEÓÆ”i]Ê>¨ÚiV!=˜Ñ¦“œ~â‰'j[Q5£üfÛì`íÚµ§¹§ù^-¯ÉÔb²Q~Û£À¾þúëµðð%kÓ®8´ÛÛîŸÌÏk£�Ìn/cºÿÚ¯áË2âýßkjH€ @€ @€£& a\­Ø¶m[•Éqf„㌆»{÷î‰ùƒ›OM{}ê©§j�¿9rs?€<›9�[˜ë9Ég|åÎ}åÙvæ¸}„ÎdÝÎ}ÍõœÓ«m’å¹—C»†�sÚ϶ÅÚóM @€ @€ @€ó% a<_òöK€ @€ @€ @€�yÛ³÷PUaíê±Y¯H“³¾ÙSnðС¦EK—.­r˜’¸§løÐ,�Dõ믿>уéÍ¡i`5dÚØ}eäæôxÞ7¹Ýë�Î’“eÙg.�×[îv0ó­Ù�ÑÈ�ò‰6_g}££­¥Ã'à¾>Õ¢^ äÊ÷ˆeË–õr×öE`r¬ÜÿiùòåCÐ"M ÐK�ö”ïA Jdõ²ìk°AƒÝj?ßí»çÛÐìÖÈçÙìzÚ @€ @€ @€F`àÇ0î”vud§É`ÍɘµÃÝ�£ÐÆî_u¹sÅŠݯbI @€ @€ @€�Y�0žF!@€ @€ @€ @€Àà øÁxðúL�  @€ @€ @€ 0+~0žF!@€ @€ @€ @€Àà áÆƒ× jL€ó'0>>>;·g @€ @€ ЕÀÜýk¶„qW`! @€ @€ @€ Ÿ€„ñðõ© @€À4ÆÆÆ¦±´E  @€ @€ @€À|ä_³ç"g,a<ýiŸ @€ @€ @€è ã>èU @€�ù˜‹«±æ¯5öL€ @€ @€Ã)0wÿš-a<œ¯­"@€ @€ @€ @€À)ü`|J"  @€ @€ @€ @`8ü`<œýªU @€ @€ @€8¥€1ŒOIdf�¹õa˜Õ´� @€ @€z%0×ÿŽ-aÜ«ž´ @€ @€ @€ô™€„qŸuˆê @€@oæúʬ޶ÆÞ @€ @€ @`ØŽ;6§M’0žS^'@€ @€ @€ @€@ÿ H÷oߨôL ×g-\è:ªž‘Û @€ @€t% aÜ“… @€ @€ @€ @`ºÆÓ³< ¡€„ñvª& @€ @€ @`ÀÆÇÇ«)ÇÆÆæ¨5î½9G°6K€ @€ @€ @€�~�0î÷R?è�ÀÑ£Gk/‹ûXì¶] @€ @€ @€@Ws=zq*!aÜUgXˆ @€ @€ @€Ã' J5|}ªE pšGŽ©5åŒO“Ïj @€ @€ 0K·8ÿj=K›œt3Æ“Òx‚ @€ @€ @€Ã- a<Üý«u 0 �Œd¼hÑ¢ZglllkZ” @€ @€Ìž@þ½zö¶7Õ–$Œ§Òñ @€ @€ @€†X@Âxˆ;WÓ @àtrÝ–‘ŒOÇÎ: @€ @€ 03�Œ^,a<3Ek @€ @€ @€ @€@s˜0Î¯ßÆ€ì¢,B€}$`$ã>ê U!@€ @€ @€Àˆ 9r¤Ç-6†q�ÁíŽ @€ @€ @€ý" aÜ/=¡ ÐWo¾ùfÕgÉ’%Uº[F_u�Ê @€ @€ @`(rÿËcÇŽõ¸uÆ=·; @€ @€ @€ô‹À&Œóë÷Â…~“î—ÎVè^`||¼NÎxéҥݯhI @€ @€ 0-�ü®ÚûÑ‹SI¿æN«³,L€ @€ @€ @€�ᨄñص¦÷÷מ£†Ø,Œ¬@;gœñŒG–Bà  @€ @€ @`ÖÚÿ =ëïrƒÆ]BYŒ @€ @€ @€Ã&0‡cç÷ð£G�–Ù¢E‹†MN{ @`drÏŒŒg,g<2Ý®¡ @€ @€˜C�ö¿<ÏánºØ´„qH!@€ @€ @€ @€À0 TÂxüx»æj$c ãa|ÙhFQ W{>|¸ŸœñØØ\}zŽ¢¯6 @€ @€ @`4òûé‘#Gú¤¹Æ}ÒªA€ @€ @€ @€�^ ÌáÆiJF26îc¯;Öþ @`n:?×äŒçFÚV  @€ @€ 0lI'aÜ?m“0P @€ @€ @€ôT`ÎÆiMÆ}Ìoæ‹÷h§=…´3%�äŒ3žñ¢E‹ªé)¥�GéU ­ @€ @€8µ@ûwÒüÛò©×éíƽõ¶7 @€ @€ @€ô�@Oþ¹w~9_²dIß ¨8}�|º¥LÎØ½4N_Óš @€ @€|�þO·�%ŒÛ¦  @€ @€ @€ 0B‹Ÿq¼š»võXÏ�_Ô;Ç}ìYìˆÌ‘@gÚxáÂæÚ¬”s´S›%@€ @€ @€�yÈý•óhûŽËóX¥iíZÂxZ\&@€ @€ @€ @€Àð,Þwàhµæ-[zýËq~i?räHí=¿´·3XccMâ9åð`k Œ’@;mœvw~ºeN>}ê�Ò«cÚšë%Ó’œÑ C«´�@¯A½’¶Ÿáp g¿jU¯ò=%{s×+uû�ö”éö§Òð´SKÌ�@ûÊg�{òÍ�´­Î•@û_qÛïÿ™?W{íÕv{ý;q¯Úe? @€ @€ @€ p �ÅÏìãø"KN±à\>�ßÞsuIû“¹Ü§m @€�^ äón8®8ëµ�ýõŸ@;ïü­ÿúG�ú]ÀÔï=¤~ý-àêïþQ»ÁH¢ËYÜ`ô–ZöŸ@Ž v¶¬ÿê¨FúW GPûW¡þ­«šè?�¹û·e ãþëm5"@€ @€ @€ @€@OÞ}ïÞúÿžìËN @€ @€ @€ @ �$Œû¨3T… @€ @€ @€½Xüûwïªý=vq•‹ü|ÜK{û"@€ @€ @€ @€À< ovì'âyâ·[ @€ @€ @€Ì·Àâ®:|롦¼éš¥ó]û'@€ @€ @€ @€�9xxwó±„ñœCÛ @€ @€ @€úS`ñ‚ÅÍoÆÿö3�WyÓ5Wôg-ÕŠ @€ @€ @€fQàÓ_m~#–0žER›"@€ @€ @€ @€À ,^°hIÕ÷Ëwïªò;�^Råµ—5s< @€ @€ @€ @`ø¶ïy³u÷wŸ®RÂxøúW‹ @€ @€ @€ ЕÀâE‹Î¨�¾y¸Êü‰Gªü�¿º«U-D€ @€ @€ @€ƒ&ð‰Ï6¿ �«RÂxÐzO}  @€ @€ @€ 0K‹�;V›Z8¶¬Ê?xàÙ*ÿý>¿ÊÿñÃçTéA€ @€ @€ @€Ã!ðùo½P y`{ó»ð¢¥Í½¨%Œ‡£gµ‚ @€ @€ @€ÓX<Öܘº~8^\Åø±¦ü¥ù­*/ÝúÃUÞ|uó«² @€ @€ @€ ®ÀC»Wåõ“÷V¹hñ’*/^Z¥„q!x @€ @€ @€ @`Æ.øãw6íoF2_p´)�ªòͯ̕ʟù—·VyÑù‹ªô @€ @€ @€ @€�ÁØóBó[ðÏý‹¯Wùò¡7«\¼tE•ÇoB-a\ @€ @€ @€I�±óø«Õð…Éx¬I/8ž3>v䵚:{u3†ñ¿úù›«¼éêæÖ @€ @€ @€ Ðÿ·ø?ñ�ªêˇިréòåUŽ�-®r|AsŸic‚ @€ @€ @€FQ`ló{š{U7¿7ÿ5åXÊãiã£G_­9‹Žaüó?{CMÿÙ�U¥ @€ @€ @€ô§Àç¿}°*ö¯?ùí*��7¿/YÞŒ[¼`¬I�Õÿ-XpøX3-a\ @€ @€ @€E�± Þóµj÷±VÛ“0^0ÖüμàxÎøØÑæ~Ö Æ›ޝ»fc•û½¢ÊkßÒÜÛÚƒ @€ @€ @€æW`û3GªŸøÜÃU>°ý¹*-j~Ï]ºôŒ*Ç�g‹ëjúhóÃï‚#ǧ%Œ  @€ @€ @€Œ ÀØæ÷6c;Öä‰.j~O^pôx¶øø�¬��5ÙããEÝǺù¡ùØÑך9ÇóÇx÷Å5ý?ý‰­U^å’*úº< @€ @€ @€ 0—Çà]ððî&Uü;_ÝYå×î}¢ÙáñŸ|/]V“‹5Ùâ<Ž�5O9rüéã å·]?ðþW!ÿK€ @€ @€ @€�øÿSšÚ¾èé˜oIEND®B`‚repeat.png000066400000000000000000002211271523260663500336420ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN/fig‰PNG  IHDR¾ TNâ} pHYsÄÄ•+ IDATxœìÝy|TÕÁ?þsî2{2Éd_I„Mö}dEP,¢¸V¿Úª´µ¶öiûÔçÛ>¶ß.¿ÇÖ¥u«ø€»‚ € ›(Èž°„B û6“Ùîv~\‡l$�™L’ÏûÕ— wîÜ{f2™ó¹g»´¸¸˜1F‚´ü§¦iŠ¢È²¬iZ³G!l(¥QQQÝ]Š.àt:»»Г˜L&ƒÁÐÝ¥¸Z’$9�Nžçyžïî²\ ªªªªÑÑÑúÛK)å8NEAxž§”ïüOzêÔ)ri\þY’$I’4Mãy>*****J?tÈ_À• Íþ¿O@˜ïåð &}ìOºóºâíÑ› TEñx<ªªòÆXTTTll,âô¬Ùÿ@GPJõƒÑÈ4Íï÷»Ýn¿ßo2™DQ¤”B¥´•èÀóù|²,[,‡Ã!Šb÷¼BZ\  "´(Ç™Ìf£Ñèv»Ýn·Á`0›Í—´:�KCcLo¬HJJ²Z­ÝSjèV”ãlQQf³¹®®NUU‹ÅÂqœÞüÀ± š¦¹ÝnBHZZr@Ç ‚#.NÓ´¦¦&UUõ´Àš4Móx<„�ŒŒŒà‘Ðgñ<ïp8cn·[O¹ØOáõzEIIIÁˆH «(Š×ëeŒqúR ~¿_–夤$´7@3¼ ÄÄÄH’ä÷û/̰ðù|‹¥w¬8]Îh4�F¯×Ëq'Ë2¥4>>¾»K‘ŠÒ¨¨(MÓ8“ÉD)�‹‹ëË|@èð‚`4™8MÓ(¥6›­»Ë‘Î}¡·"rîÆ‹çyN’$›ÍÖìY­ ”Ó4 £ ƒ8MÓAèîb@ÏÀ1ÆÐ[Ä1ưò4tZ 8MÓº» Ðc|Óm€ËâœNgw—z 33 2Þ¡9<¢ #  I¢º£0Ö"mãç¶ö�nƒa’ÐíÚÏH ‘Ñ"E€h]wÔáè°èJgËÊò¶n-**Z²dɈ#.»]}}eEEnnn§n|Ï{ï½÷>ýÃŒs8®¢ÈWÎãñ;6xÐ «ÕÚ-€n�èЕTUýúë¯�.×æÍ›‡ "Šb«ûœ;þð¡Cû÷ï/**Ò[¸`Á­·Þ*Š"cìô™3ÎÆÆÀÎN§Óëõ^{íµf³9ø ÕÕÕÅ%%ŽØXY–/[*§ÓÙÐÐØ©?vžç“’[–Ÿ1vîÜù‚C‡øýÒäÉ“î¹çžuëÖ´s@ƒÁpç�w пãe€È„èpµ¼^oeU•¾0«ªªÉÉÉN—ëøñãß|óMJj*!„Rj·Û++*:TRRR\\ìñz ¹r·sçÎ!C†\sÍ5š¦}úÉ'ß|ûmðñ9Ž;pàÀÂ… ?ýôSI’ô�çÏŸ'„8]®žÞ`0vÎÍͽýöÛ›µalÛ¶íÝwßëÔÒ±6›õ—¿|*PÓŸö˜A !kÖ¬Ù–Ÿ÷È#�dee½öÚk„“É4aâÄv6šÍfýª½°°°´´”2yòd—ËUÑÔ¥ï£iZ vDEEÅÆÆú|>}Kccã¡C‡ú÷ï\Œ?~Þ¼yí¼—ËuòäÉ–ÑÁb±ÜsÏ=úÏÛ·oïÐû]�Rúè£�BÚJÁ¹áÑÇÚk™¸è°¸Z<ÏGEE¥¦¦ÊŠröìÙÚÚÚÜ�].×Ù³g5M‹��ÍÌÌ4��:¦×ëݼy³¢ªÉIIS¦NýßwÞ9xèPËÝšÜîW_{-xKÑ©SÿÇ?{ôщ'^Õ«+†¹—ÔNzOn huè*¹ƒEÙlN—ëø±c¹–••�;wŽçù &X,–Îþ¡íÝ»÷dQ¥tÞ¼yÉII‡#5%%x‡úúz¯ÏÇó|œÃ¡·7ÔÖÖú%Éd4ÆÅÅ5mpõNž,Ú¼y“Þ¿Yu±[$//ïèÑ£”ÒI“'ë[œNç'Ÿ|ÒììÇŽëÚÂ@o„ÜÐ ÍÓÃc�QJÖZ®Þ¡C‡ÊËË}>Çq„�Ç ‚päÈ¿$D±¡¡aãÆ�‹Åï÷B$I*8z4::ºÙA(¥ÙÙÙz—DMmíÚµk5M럓3qâDŽãzè¡à�c/¾øâ®Ý»íÑÑ¿ú�ÿHNJòx<þóŸO 6lÅŠ­N ½uuµ»w­ªjðÆ¢¢SEE§8ŽËÎÎÖ·45¹7mÚܵ§€–𥇇yäå—^ On ˆW‰1¶cÇŽ]»wF9zôÈÑ£úÏ>¿ÝgŸBRSRìv;!Äérý륗ZÇd4>ñÄ×\s�×ë}gÕªòŠ MÓN=ò£Dqܸq£G�Þ¶m[à,eeeúÑþù⋃AÓ4}Kˆˆ¢c×£CS“[QŽãŒFƒÑh¤”šL¦ÔÔT§ÓÙþ̦.n èË‚ÓÃñãÇëêê“:,®žÝnOJL Tên·ÛãõRJ±±z;!$..®#kŒ±wß}÷Û½{ƒ§>I²ìõz�NgAaa³)QŠ¢�"¤£Í½GŽ‘.�DÚŒ$I­&€1cÆŒ3†RUUýÇ?>SUUMY¾|ùÌ™3;tb€ö ·â QJ~ø=78އy$ ù ë1Æ^|ñ¸ÈÀXrqÔdHO� €«Âûè£�Ö}öY³Š³¾¡á·¿ý­þ3Çq³gÍÒwE‘k÷¯ºèÔ©�>üÐçó=ñÄ•^ŸOàù””” ë×oÙºµÙYœ.×sÏ?¼Ål2ýâ¿ç"tgGtMÓô%A €hkÏ¢¢"UUÏœ9STTijÙl‰IIñññÙYY�?تªª&·[„Ô””à “ÉdjµÉ�BHbbbnîÀvÎîr¹‚±±ñ‹/¾ÐW£ÒÓøqc>\Zz677÷™gž |U8xðïÏ>«(êÔ©S—/¿übûГá—Û .É ×ugz@‡ÀU¡”^7sæðáý^¯(Š<ÏoÙ²å›o¿µY­wß}7Çq~¿?11Ñd6¿³j!Äl6·å�™‘‘™™yüĉ�7ÖÖÖjš–ššçp,\¸páÂ…ú>�É™ÑQQ?ýÙÏ’“’Bý2õ¥¯KJN›Í¦±cÇîØ±“rÍ5×$%%íÛ·oîÜë‘£ÕÜ  [z@«ÀÕJJLtÄÆ¾øâ‹………sçÎÕ›èA¨­­ýâ‹/’““þ󟫪êv»9Ž‹ŽŽn?:˜Íæ &œ8yrÿ�„Žã ´aÆýû÷ÿµêë29]®¿?ûl³q‘QQQ÷?ð@bBB¾ÆC‡oذ�2räÈèÑ�çùùóçOœ8ÉjµüùÏn¼x¯p�Ç£(*!dçÎ�………úFJé�7Þ8mÚ´.,@_ÓNnÐ…'= Õ  œ>s¦  Àëó9ŽÊÊJB¥4!!A_›!??øˆú¤ÇøøøËÞÖròäÉ;wî,.)Ñ4ÍfµŽ92oëÖ’Ó§[ŽCT¥ôìÙfcìvY–»îÅUUwîØáñxcbì7Ý´ ¬ìû3Úív»Ý^SS[VV˜yàtº·Ãà8®ý…à²ÞygU;¹Aœâââ–Ýyg—C@3#ÀU’eùó <^oFzúè1c¾øüs}{VvöÔ©S7nÚ´eËBˆÇã¡”fdd\ö�.::úúë¯åÕW5M‹ŽŽŽŽŽž>}ú Aƒ­-ïœüt£ÑÛÚ½¯®ÏósæÌ=tèÐM7Ý”•Õ/8:è,óõ×_ïñxôVTTìÝ»�1–•Õoøðá�Ýú÷Ð…¥‚£¤¥¥-X°àŽ;–µÿ5¢§‡˜˜˜äääPWE¯Å÷îÛ'ðüüùócìöÀCÇ]7sæž={**+?úè#EU-fsZzúe�)ËòÑ£Gõ6†ŠÊÊ¿þå/·ß~ûÔ©SŒ±£G��:e0&LœØñ±ûöíkhhhgI’ZÝ!;;kéÒ¥“&Mjõ Ëb±ÆaB<¸ÿ~EQ ôƒü×']eæÌYÜ“Rºüî»CT tX\-›Íe³ 6lÒ¤æóSSRæÌ™#ŠâÖ­[ÝOJJJ³»XµÄÛ¶m›ÞOi6™$Y>_^þü /ÄÆÄL˜0aèС©iiñqq£G�v8‹Åj±t°œš¦]X$»ó× ¢(báÈ>.@t¸*”Ò)S¦äD)ݼysYYYqq±¾]_ôéÖ[oݸqcUu5Çq#GŽ´´[Óë¹aõêÕ’,ÇØí?ýÙÏΕ•}ðÁ�Ngm]Ýç_|ñù_pG)Ád2‰¢˜——|MÓc£G�¾çž{°ˆcìÍ7ßüî»KV¨”eY&™——÷Í7ß?4mÚ4´CD¤àßH«Ñ¿2ø¢@ˆ�‹#„ˆ¢˜¿}»¦iÇ¥¤¤XÌfBˆ,ËUUU”Ò»}b‹f‰fNœ<¹fͯÏg2—.]š;p`îÀ�ãÆ�Ûµk×®]»JNŸVEïÈPUÕç÷·z“Ñ8nܸ–¹�㸛æÏŸ2uê…·VAx¼ž¿öZ[KBµ¤išÓél9@Rçóù}¾ï Éq\`<D0ÚâÃ�Ü‘ºï×"PJ1Ø K 6lúµ×ò<Ÿžž>qâD}5hQ—/_žžžîõz/Û[1(7÷Ç?þño¼qÓM7MŸ>]ß5oÞ¼yóæy½Þ²sç*+*}>Ÿ$IŠ¢4»¶¾NNNð›Í¦�‡HOOï—™ÙN¼^onnntt´ÙlîÈjÖÇ�?¾ãC±ú€&‡HÒ‘ß~_©[-tݺuS¦LéÎ"ôU�AÊÍjS¯×¢›Pt Y–›šÜ„«ÕÒÖÒ“ñ:Ró°ï a×­¿tXt›¶®¿#97BDQŒ�íÊɟг :@«ÐÞ‘"àׂèУ5«I0z­W‹€Ü@zšà-k’fó#"£ª�Þ¥½›ÿ@„¡Aÿèhuè):•/ TzÚî?¡ˆ˜ß9:,  Ða™®¸y:bÚµ¡—Btè.í,É€ê"¢@·h+ 4@¤ÃXèD€°¡-~èyÐaXz D€�BV€ÞÐ huèBWÓÆ€ö hMä}.Ðê�€V€.y׆¡�Vè´:\´1@XDä Ñ ÂDdb@‡t¢t:,ÚÙ ÇÐ+Eü‡Ñ 2D|hСÃ:Ñ:QZ¶Ø² 2ôœÏ&¢D¸v¾P»6U@‡ Ãz®žs™Ћ :@' Ã®^[Wÿ-;BÚN€F€p@t€«ÔÁ õ:@ =óÏÐ hu€Pë™VÐD�0„äèÉX�ü#:tŸÀ`âž“! #ZýVcAÿí9_{pu0L �£¨õ à{huèËhÐW°¨3"@_„èºà€{C@›Ða-¡9Ú„è�€ €¾¬�Iåhx€Ö!:ôq=sI€ªÙ_[\Ô� :ôú7Æ?„QG&>÷À?JD€Þ!ðÕþ}®Ûºäè(D€^àŠÇ+ôÌK€È×ñˆÕU¡Ctè�TUUUU’$EQ4Mëîâ@Wâ8NƒÁÀó¿ßOá8Žã8žç)í�±ZÃcŒ)Š"I!Äh4šL¦pD‡^Åãñø|>Ƙ(Š‚ pÖíèµ4MSÅï÷K’d6›Mfsx΋èÐK0Ƽ^¯ÏçãyÞh4¢™ ×ã8Î`0ˆ¢è÷û=�¦i‹…„þûW¥½„ßï÷ù|¢(šL&䀾ƒRj2™DQôù|>Ÿ/ gD«Co I’ÇãчÌtwY  ƘÇãá8Î`4†ô\huèñ4Móz½ÇCüY€Hf49Žóz½„…vÒ5Zz<}¦Ñhd!þ¬@„Áï÷{½>³%„C&ÑêÐãùý~}‚owº™>·N’ü!= ¢CϦ¨ª¢(È  AQUQBw D‡ž�i!ë7€N¯TU á)BwhEQ¢\„è—¡8°�èôÑ"¢t¢tBŸˆ.—«¶¶ÖëõvÕc555!íI +MUUUë‚¥4E–eEko¦uѹ¾?©ß'wáá }‘¾€Ï竨¨Ð´vk£ŒFcjjª>T„1öÞ{ïåååÝzë­‹/Ö7Ö×ׯ^½Úëõ.Z´(''G–¢( qqqí�:š1cÆÀ�ÃS¼ö…5:dff>øàƒÁscì¹çžk+:PJ C ƒrúÌ™çŸ{NUÕÇW¬›”Ôê³<øÒK/iìBM“÷U^ÞWy6«íW¿ú•Åb ìV__ÿ¯ýëøñãƒáŽeË23.éªPTÅétº\®VOÑÔÔüϘ˜˜–ûœ8ybÕÊU„�åw/ϘÛr‡0a ›·8[PÔŽ7hD«þîó�Ñ-¯Û©uÐ̆wæ‚^uW+ØýÕ¦/÷œñ&ÝúŸÏܚͫ§×ýöŸT^¬ô7ýõ‘M„ðéKžþý‚KÞnæ.þâ¥çÖž’¦?üÙiÍ>)zwÉùÖ¥XÙ£ ÁL޹¸‘(D¬cÇŽåççëm&Lh'=ÔÔÔ¬ZµJïd_±bE$¬éÃ$Û¢icŒã¸VƒÈ÷(á9žÂ£”^¸-5%„}cIqñ»kÖ”––rwÛâÅ“&Nlõ0ÏÍ»~Þ€¶ãÞ®�;÷Øßr»Ûí~gÕ;Å%Å„�5«×<ùä“Á©%¬˜§ôë Ÿ·9+¤ñXþúc­lçÓMãç u®ûÝ×Vj„iªFHþ?ÝA‰�{ç=xɧ�1B”#oÿ×(Š^oóñû1\TæÐ µ¸ð¼?nÀШ꣥ÍÎ$U}÷é˯n<å·�Y¾â®1±m´Ë‰Ãîþ¯G§´�eÔãïýâyÈ Ɇ^SS“——·~ýzBÈøñãƒ/�ªªªV¯^]PP�‘‘qûí·GBn =+:\¨ø !„øý~MÓxž!x».ðæRJgÍœ¥(ʶümóoœ_VV<äBcÚáÇϟ?/¢E‹n¼á†¶~+”Ò�¹¹m ÆØé’’V£C°nžÌÉÅŒ¼ýñ$_Ð{Åš ×½µé4o�æœ�>Á (’buÛ½3Ò/ùXã(­3Úãâ�È®šz�fˆrØ�”·ôÚ�I ¥¶lÞöå¶#2a”Dç^7wîÞ¿¯ü.øýäs®¿ïÿ«ÿ¹êü¸Å?ìÿÕ/_* zP9Ÿ÷êïøÎEãÆßóÓ^—nlû•ð“Ùln;:EJ¢D2›Í6sæLÆØW_}µaÃJ騱c›][VVV¾ûî»………ýúõ»÷Þ{[ö¶w—ÊΞ}áùçšmÿï?ü�� ­ºœìœ§žzª�N§Ëï—4Mã(wíôéýû÷·Z­“§L®o¨×wà8Îmï’©V«õŽeËV­\I¹cÙ²nkr „KÊ�QÁC:µêm[Ï©\¬ëÇùè󪌙×;¶oø®´Þ”»px‹¹)Öy¿üÓ_{T6 �?sˆó(!„sŒ›7÷Ðþµù5cÐüÌÖû�#ŒÂ“k ò6¬ß¼½ Z&TŒOS“±íV¯Ôìd‘Éjµêmùùù6l „Œ7Îd2•——üñÇ………YYYË–-ÓÛ:þ•v¥õBG…5:TWWoÙ²¥SOÑëžç“’“{üqY¾°nàÎ;víÚDze�þ¡¯òò¾Ýû­(Š]¸Ö‚ªªz5øÞûï‘÷»ê¨ÝÏ{ò‹÷¶ÕÒ´·LLà6B¡Æì™·LÚöÏ]k×lõ³9©í"ái}ᎂzÁb’Ýê ›¸{z<©Ý” ™¦B9¾½™DrSÍÙÒ³*!„¨®ÊÒÖÆ¢šrƒ–ŠT‰¹à™(¼ IDAT�ÿ|ü�˽ÀËŒWˆ zÛclûöí6l`Œ%''oÞ¼YÏ K—.MOO��9™a�6›-99¹­öƒòòòfÈÅš›b³Ys²/,ûÈÛ½k¡$99yÔÈ‘úÀTÆØwûöBŒFc;ï2ÏóK—.åxþÍ7Þðù|K—.u:�ë>[—’œrï}÷™LFBˆ qŽ8}YVºe�‰�bM…kßúü‹ŸùƒyýM40\‘ÚGßrÛˆoüàÍ�ýŸX�Ý^õKcÇ,ýÕïïµ–¾õÛW�´vUQ!¡�'ä,|ꑇå#ï<õâî¨ùO>}Sô×/þßwNºû¿~4ùâr””7ŽÀdÉOÓohVlÛŸ\æ,=\Üf#@¤±Ùl³gϦ”æççöÙgƒ¡¾¾>;;{É’%‘–H˜£ÃÀ�úÓŸ¶39sÏž=Ͷû|>EUÌf³Ñøý¸9�ÇsþüyBHZZZðv}ÑI£ÑØþ É)É‹EJijZÚ�¡CòòòM&ã€þšíìñxdE¶Z¬Oþâɶ¦Vjš¶f͚Ͽø¼½9¤Š�+_ÝtŽ%̺çÖkl”#.aÊ�w(zý»�ÿµ2þç÷MJj³é�É~‰7·SƒË’�Îd4´3Ø�M&³`(!œ`4[R†�Ì O*öÍle}'æu;UFm—ýäŽAmŸX-üßÝÜÛâôjzz „äççWVV2dÑ¢E‘™Hä“ô¸ÝŒ±f‹:œ/?_QQÁqÜÀÜÜ@†¢(zt0›Í�é°`I‰IiiiÇO?xà`ÿœþÍEjjj4M3™L111mµ—ðµk×.BÈøñãAU„,Ë�‡ÒVó€Óåä8.;+Ûëðx=Á�7vÓ¦M•y[ó–.]xzSSÓ™3g!6›íÊ^SeUåÚO×Bn¾åænŒþòÝ«ÿõVþY‰:FÏ»¦ñË~ÿÅ¥;”m|áÿn üKÈ™:sØ‘mG¿{÷/ÅGoüÁÁÅo½üá� #Ô�0|æüy3'I2s¬aWËS þ០©hàË÷m+(?$ÅvéïC9¹å£“„‹›“éhhìèë¯K:°ñ«µùÓÞ�œ;ügŽÊD6 Í Ð[µsãÆÈÖèÐÔÔtìøñV"0ÆZ.öÓ�œœ¬?«¶®våÛ+�.grRòu3¯ ŽN—ÓétRJqòDVvÖKïHÏHßûí^BÈ„ñfΚ™“�jjköîÝ—••UQY±iÓ¦ìœì‰.,ýt¦´ôüùóúzPW¶†—×ë}ó�79L©¯¯_±bÅe×*CTBœ•3¸ñáGnÉ*ÿÂé‹¿¸@k:{¸°ÜoN6,5лÀgN]<÷–á¿òï=ö±#Ò¢mu&§ÕÿÚy7Ìž:²Ÿ½Õ!4îÚŸ½rmÐíá÷ž}yï½Ï<9#aü=?É1¤Øè!BˆaÜÝ¿¼yh\BbL‹÷‚Iþè1sÇîZµ÷Ã×>ëÿËÛZ<'öímbâ�챚@_Öèp²èäŸþôÇŽï_YUYYYI)ÍÎΦ”–W”¿òò+§ŠODÃâ%K’“E ‘‚BW“Ël2'$\è~OOKOOKgŒéÑ!==}ÄðzPUUÓ4Y‘ßxý�ºú:BÈ}÷Ý_UUU\R¼j媨¨è¡C†(в=?_’¥Ø˜ØÁƒ]ÙK–e¹¡¡AŸ£ÑØØ(ËrwEj0ÿ‘§'“L„ÄÝü® <¢�Y÷»?|T™:ýÎGæ¦\Ú 0zé“ÿ=O³Ç)±ä?ÿ|oR\óå8ž'„©ªÆZ.±¡ÕUžW¨!%ÁN©!mèˆ4B´JB5Ƨge$_l‹ÓçËuÅû6óÍö|³ŸúùcO¼ºwýËoÅÿôþéé&BˆVû]Þ×.b1yx<’@wа‹K>tØíqGGE§¦¥nÞ¼ùã�?vºœ/,Y²D_zëÖ­«W¯ÖçJx}^UU“’.?æ@–åÝ»v7¹›4M«ª®â8.%9%%%yÙ�ËžîùÚºÚçþñ�'~þ„ß/}÷Ýw„�áÇ'&$^ÙKˆŽŽ^°pá[o¾I¹iÁ‚&oOj9¨ñ2Œïèep$ǵ|˜ZRc¹}'7ýïªÊ”f±Bm8±»H5OœÑî rõ¹ó Ñêw¼ó/B¨9eÔÌL{ü˜»:Sõ�Mß¼ù§ºêÇ¿m0WðùºC>sݬÑqHÝ*ŒÑ�’¡C†ÞÿÀý­vXhš¶òí•l‘eYorÈÊÊJˆOØóõW“Ëfµ-_¾|êÔ©zãÁÈQ#×­[W[W«?ÅfµÝ´à¦ËVÏ’$jšf4G�5{Îì!ƒ‡èRîàþ¿öïéÓ§g¤g¼õÖ[^Ÿ×fµÍ™;çj†«L�2eÂøñ„�ËÜ©«g²®»ó†Âo<”·ñ`‹©1uê}·ŽlåvœZõÎ5)”³eŽŸ5gÆ”1ƒ’,!„ »ý'�’_+È”j“N}¼ú«*f~Ë�Ãz@/ @ï¦è0~üøäääÔÔÔä¤äV«aÆØœ¹s®¹æš˜˜ƒÁ@Eñ¡‡>b¸ÙlŽŠŠZ²dIBBÂðñŽû¸ßÙèdŒÙ¢l999�¥œ‚%%'çÌuÄÅé�ÃjµÎ™;'++ëÆù7ÆÇÅ_RÎqã333íÑv“ÉôÃþ0--�r\vVöU¾ü –´±3fºc’LWr=ÏÅŽ¸ý×ÿ³°±Á铵KÖ=¥‚%Æm¼¤ „“F̸.;30n’KÃÍUÌš�éùyÇÈ¥¿øcÅûŸ=.æ¹'NMŒÜÇ}]·nÝ”)Sº»p…\.—ßïï#r <Ün·ÑhŒŠŽÑñ#q™*ˆXˆ=›Þûƒ;D€N¯Bº¢¢CϦ8zß ºàÊî8ºS :ôlzk¢èÂP#DôºpYÏóB–eŽãøPV huèÙxžçy^Ó4EQº»,ÐÍEÑ4MDtX@›(¥‚( ‚ Ërw—º™Þ-ŠÂ•Ýw©ƒzY–�F#ÏóúÍBŠ#„0‚š¦gãyÞh0rŸÏï÷B8Žã8ŽçyJqÝ ÐK0ÆcŠ¢H’D1�&“)œÑ¡Wñx=>¯�1&Š¢ ‡)€^KÓ4EQü~¿$If³Ùl6‡ç¼ˆ½#Ìëñú|>žç�F#šz=Žã ƒ(Š~¿ßãñhšf±XÂðý�«Ò^Âïóû|>QM&r@ßA)5™L¢(ú|>ŸÏ†3¢Õ¡7�$Éãñ‚`0º»,Ð cÌãñpo4†¶.@«C�§1Íëõrg4»»,ÐmŒF#Çq^¯‡1Ò¡Õ¡Ç“ü’¢(F£1ÔŸˆp‚ øý~¯Ïg å�I´:ôx~¿_ŸàÛÝ€n¦Ï­“üþ�žÑ¡gSTEQäÐ ‚ (Š¢(¡;¢CÏÆ4FÁú  ÓkUUCxŠÐÂ@Ï•ˆ Ct€ËÐ?XÈtz� ª!¼{¢t†×õ-Bu“ñ³ƒ¬ðœ¦jjî¨ÉsÇsthºÁ%Þ†@„CtèCÄã•üª�Þ&aÌÀ fAä)×VW#DÕ4IS|’Ÿ,6WÐåSåܤ°–"O·E§Ó)+²A4DEEuWú¾º‰g—ßå(o7šDÚ�;qó„1ƒÌÔFÉëwº�+w²ŸÌSâ­a)/D¨0EY–¿ýöÛÆÆÆ¹sç ‚ Ëò«¯¾ºÿÀþ)“§üèG?¢”z½Þ>ø **jÔèQý2ûjµÊªÊÒÒR­µ¦uŽãRSSÓRÓ[6oÞ¼fÍšüô§? Û½G{ Óg½.·@y‡ÑÂÓŽŽq¡”¨à0Zëün©Éc^P¹wJHËÙ6¹dýsïŸë7cþ‰éFBXݾמŽ5yÚ¨TS7  / StرcÇ[o½¥1M–å… 6{”1–ŸŸ¿ùËÍ„ƒÁÐ/³_à¡û¬\µ²­è°èÖEý²ú½þï×ÓÓÓüqMÓü’_–å�¾–Šž#ŒÙ�¦Žç†žrvƒ¹ÎïfGËBQ¶ñæo>Rèå§,1BˆV¹oã_�JŠ3cT·•  / St˜>}zeeåú ë×­[—Ù/sØÐaÁ�ž8yâÓO?Õ4mÆôsçÎ nH·Ùléiéuuu¯Çb¶8ކ††&w“Ñ`LHH°Ûí²,»š\MMMáy!=—¦jN)eO)oàí fûH¥;>ÙQÚ©eÍøä g °oÒj÷mÙÕHì3f�vPBˆ\úMþ)EÈž1>Sìt‘ºcL–åŽßFÀãñ˜L¦YÅ'äÑÁårÉŠL™:mêáÇϖ�=|èprr²ßï'„H’TU]µuËVW“+w`î 7ÞàjrBDA´Ùl”Ò©S§N™2åÍ7ßܲu˘1c~øá?üð“O?:tèŠ+DQüzÏס~ ½ƒªifA¼â (¥FNð¨R§Ÿ©Õ�ز)¿Së©Æfß0s *ª»àóOûùœ[fµB˜óЦ/ËT.ÆÚpx˦#-�ÀEœ41Û†å. B544ìÞ½;66vôèÑ&Óez]ëêê>úè£3f 80<Åk_h£ƒÏç{á…9¼ñó/>ÿü‹ÏõŸ¿ùö›o¾ýFÿùØñcO=õ”þóàAƒñ‹_tÕx…'O¬Z¹Š²üîå¹s»ä˜=ÑtUã®ìébÖì?ß¼µB+ûê¥÷öII3î^6.®ùq©-Õ\ëKg¶~˜WCb¯»yzº@‘K·­Ýãd„Ôܰú`k'†Ü3b¢D¬cÇŽåççëm&Lh'=ÔÔÔ¬Zµª  Àív¯X±"ÖŒèÉ™Å%Åûëß\M.Ƙ¦i;vîØ¹k§~kéýö?ðÃÒRÓfÍšÕþAÜn÷;«Þ).)&„¬Y½æÉ'Ÿ´X,í?¥¸¢OÎU~Ü®ðãÊÇôÓb«j, ‘miƒ†Oi?’øOoZ¹ö´J­ã'µQB”óÛÞ]_ªYG,ºg’ËëNÇ.~`ZÚ%¡æ”èˆhÖhÕðáÃkjjòòòÖ¯_O?~|«WËUUU«W¯.((ÈÈȸýöÛ#!7�PG“ÉôØc�麣GŽ®^½º¡±!x·([Ô¬Y³¦];-ðÆ‰‚¨G0EQ q·,©ªªž$:(¤kzCHxN~öÆ'§dF(å8Ž¥|Ûÿ~Pè7 ½û΢äÉIcÊ Q£^á €î`³ÙfΜÉûꫯ6lØ@);vl³+ÛÊÊÊwß}·°°°_¿~÷Þ{ojjjw•¶™�·:–m¨©­ùø£�wîÜ©¨JZjc¬¢²">.ž1V[W»î³u;vì˜3gάY³OÉHÏøÝÓ¿kll|õ•Wkjkݺh츱[¾Ü’÷UÞ ÜAw-¿Ël6——´_«ÕzDz;ô‹;–ÝÑšú¹rç›ÿZF¹™ûħ¯¬9êúß¾tZ2OÝÝZ:€«a³Ùô†ómÛ¶­_¿ž16nܸ@%U^^þþûïôë×oùòåiiií,¬B¼^oAaÁŽí;8à—ü<ÏO›:mÉíKÞzó­ŠÊŠÜÜÜûï¿çÎ�ëׯ¯®©~ÿƒ÷7nÜ8oÞ<=@ˆ¢˜ž–~òÄɺú:›Õ6vÜØ~™ýìv;!Äb±d¤gˆ¢(ËòüçÇÄĈb›#í‡ òÌ3Ï„ú•6hUêD³H§±‹BxŽgìÒôSz¥tã¿Þø¶ŽÙæ:JNœ%Ì_òåJÛè{8'C¼øÂYý†ÿ÷ð—4â™f>ñì�C"º7€«Õª·=äççoذ�2nÜ8“ÉT^^þñÇfee-[¶Looèø×o¨ë…Ð~»—?û?ÏÖÖÕB8ŽËÌÈ\rû’±cÆê·ŠÖ™L¦9sæL›6mÇŽk×®­«¯{ÿƒ÷Ïž=ûÈ#�ð<¿ç›=kÖ¬Ñ4müøñéié-O‘™‘iœmþcöµxÝôä œH9[Bzœ9øm£ x× GÐÛcÛ·oß°ac,99yóæÍznXºtizzú•ÌÉ å—`h£CNvÎ~ðƒ·ß~;;;{ÖìYãÆŽ L`å8Î ô¡ ‚ èbòäÉ_|ñÅöíÛ¯Ÿw½ {÷í}ååW$YÊÉιuÑ­‚ bTccãÁCÓÒÒR’S!}ôQuM5¹¸Ääe'ºt=ÔT! ¤^{ÿoÆ:R­{õ TŒsË‚æ»E_ûÃß.€±ÐCÙl¶Ù³gSJóóó?ûì3ƒÁP__Ÿ��½dÉ’ŒŒŒYË!XÈ¢ÃŪtÊÔ)ãÆ�k6pÔçóUWWK²Åóßç[­ÖÅ‹/\¸Pï}=jô‚ JJJî»ÿ¾8G!„R:ìšaªªnÛ¶íïÿû­·ÜºxÉ⸸¸‰'Y­ÖþýûÏš=«í›:AÏbJL5Ò©E!z==Bòóó+++‡ ²hÑ¢ÈÌ $TÑábÅív»_}åÕ²²æ««ªZS[CÙ³gÏÑ£G[ !!áG?úQttô¢E‹ššš**+jkkõ‡xž˜;p÷îÝ„�ÚÚÚ“'OBÆ�7nü8BˆÕjÅý´ú¹ª¸à¨?øÏ‹ ±™¹©XÖz«Õ:{ölÆXeeåìÙ³333ƒ/­#ÊÅè@»n4_Ð÷µ¦iUUUçËÏ·µ¯Óåtºœ­>¤1�PB)-(,xá…Z�W¹-Û¶ümÁ[†_3ügOü¬:,z‚«ü ‡q,f§°¦oWÿÏ·—lâ ~ý—Ŷý£h�Õj�3gŽ¢(6›-bs¹¤Õ!—h&“iÑm‹\NWðÆòòòÍ_n–¤ KGGGß0ï†èèèà}̳ÕzáæÎ<Ï‹¢ØìMÔZRJ›mou1ðÊÊʵŸ®%„Ü|ËÍIIIWûªz,UÓÈU|5ÒùX„5 š¹pTÂ%­ÆÌ˜Hl丌@ÝÉB;LRÅñãÇo)**Ú´i“¢(f³ùº×mß±½©©éСC÷?pFFF«7nÜ믿¼Åétþñ™?–�+»åæ[/YÜþ” ¯×ûæoê‹a××ׯøÉоÙ&Ásœ¤)Œ®l12Ƙ_Uøˆìu3˜<ï ““0M}÷z½;¶ïØ`¿$Iƒá¶E·Ýpã ééé+W­É/3Õ@¯ä—.3UÒ“ÁØ©g±ÆoÿýÿÞ=ÖÚ]Ðå&!äô'ùåÆÖ*}¡ßÍO<:=1“ @âuŠ‹·}µ­¤¤¤ôl©¢(š¦q—Ÿ°ìÎe'N¤”^7óºXG쪕«**+vîÚ¹ûëÝú2Pééé'M<[zöÝ÷Þm¹þtÀæ/7oþrsËíi©i¿ùíobbb!ÑÑÑ .|ó­7 !7-¸©Ï¢¤CÓÉÁâFÉë0Z;{,•i�’�PJ†¶²´F{4ÙS[[ÛZtÐ)ž†ZOk)2»Gú¼ÐF‡ÃQTTTrº„\\jÆŒ3®›Xh“R:jÔ¨AƒåoËß²eËùòó~¿ÿTñ)Y–/Y|¶ôl—cÊÔ)ã'Œ'„´³âd¯ç»i¸¡¸Âït×ùÝvƒY¤|Gz.c2S%ŸÂTS´ÍÓðN�”ÆLxä¹Ñꌯ¤œ`D“@$ mtˆ‰‰™?þÁƒû÷ïÍðkRSS[­®Ìfó¼æ]?ïú²²²Â‚Â’’’±ãÆÆÇÇß8ÿÆ9sç\Áy)¥Fã%Më}94è”xw×ãª]R“§Îï6p‚‘8ʵ•#Ñüª"i ¡Ôm“ÄÛ:wV*LWÿãƒæÜ`áúG7/«àȽn¶Uè‡i˜áC×­[7yÊä¹�'t–Ëéòûý‘Ëydád%©vjšÖ‘Î)¥DZø(57I³®®°n·Ûh2E‡¬ƒwê[4‹(�ìäx€ èNîÙôe-ÂyçLˆdz�Ò¹ôˆ=›Ú™„}Š^#„t1JD‡ž�Fà¢0Ôëг ‚Àó¼,Ë­®À }�,ËÇ…´R@«CÏÆó<Ïóš¦é7õ€¾L_}±å�Ÿº¢CÏF)DA}enèËôFhABºæ¢C�'Š¢ š¦ùýþî. t¿ß¯iš Š¡^Ñ¡ÇEQ“ɤ(JàVæÐ§H’¤(ŠÉdÑ.Ï`0PŽ�FY–}>–yè;c>ŸO–e£ÑÈó|àîÓ¡ƒèÐð‚¡F ¼§}&gÀBnè›  0Ö:Ý Ó[ð�íÁw Ã:Ñú\6t Dè “èCÚi{igÅr´Ø@0DèõPñt%tX@' Õ¾‡&¸,D ¡: Ñ¡WQUÕçóI’¤iZèÏYuMd• \8Ž3 &“‰çùðœÑ¡—`Œy½^¯×ÛÝ€°Ò4Íçóù|>³Ùl6›) ù•¢CoÀs:�Š¢„ë„!ÿ\Ÿ€…ç”=œ×ëU%***Ôé3,z<ÆXcccsCÑ‹ÿk¹.K–寯FÆÚY¨¥ :ôxMMMªª†ël¨Ç"šªªMMM!=¢CÏ&I’$IÝ] ˆ ¡®z6�ÇÓÝEè2hÍè*!­z0Y–ÃØUÑ•hkÿ€®¢ªª,Ë!:8¢C⮊+©Ù‘"Dè¢&gö`!›Uq…•>²@ä@t€V„eÉÈ€œpzP IDAT6ƒA;‰a »„®Ž@‡Eve‹.žïËXoл….: Õ¡¯`Œ•Ÿ/¯¬¬ÌÈȈOˆok7Y–ê8Ž‹‹osŸ`���§N�Љ‰ÉÉÉ õúe’$Õ×׫ªš””¤iZ[ý5”R“ÉÒ’ôeˆ}¥4**ª¢¢¢ªª*Ö¸KЦi~¿ßãö4559�N¿ßÏã8NQ”Ĥ$ŸÏw®¬,Ю ªªÍfKNIñû|ú�ÇÓeÙårÎe6›EQ >{EEEg ÅÇÇGGGNçóù<�Ûív:�>Ÿ�Âq!Äét:�ÎV�`0†j0:þæ@Ç!:ôrªªŸ*öûý„ÆcÌív-Ð[¬V+!¤¦¦Fß™ã8›Íc�‰1›Í„MÓ\.Wðõ½(Š^�çÔ©SÁýÍ*òœœœø F UU;R`«ÕˆÕÕÕ¥¥¥�‡xžOJJr8&“Éårqg·Ûƒ3Цiõõõsà :ô~ªªJ’¤ªª <Ïó<¯(Š¢(ÇY,J)¥4999.>Îl67Úh±XFŽÅSUõTQ‘ÇãILL´X,ýúõÓÇLx<žªª*«Õš��@ihhhhhhµúYô°Òc¬²²²Ù⩱±±š¦�FŽãΜ9C)MLL4 zjá8.555ø€’$¹\®P/ÞÐÇ!:ôr<Ï2¸¢¼âܹs�QçÊΕ——§§§'&%–ž)¥”Úl6½™áâ�*/ ”PÊB<�~C¶à+{½žÖ³¥ToØp:�<ÏÇÆÆ^z(j³Ùšm >NˣјššJñù|Œ±0ÜI.«Û¢ƒËåòûýƒ!Ð:Ý)^¯·ºº:55U�~./*:Š+çêëëc±„—Ë%Šb´=ºƒ•±ªªz³�Óé,//o¶ƒÛív»Ý�ÖÔÔH’d·Ûõq W,0RQ½u7ìèvÝSï*ŠòÊ˯ìûnßèQ£ú³Ÿ6RwY_nþrÕ;«8Ž{ü±ÇG�¢BöŒ1MÓAÁçóɲ,ù%�Ç-ŠbÛó*iðª*+=OBB‚Ýn·X,‡#ðhSSÓÙ³g£¢¢ÒÓÓ !ÕÕÕÕÕÕiii‡ãê ªªª‚Ç:B !ñññŒ1EQŽ;Öì)ªªb€$@HEô%»ªªÅÅÅwó‘ùÇ�F·Û½nÝ:½^l¶C¿¬~111á*fDs6:ƒ‡4>tXÿ¡¾¾¾¾¾^“ɤiZqqq³!”Òœœœ˜ØØÆ††ŠŠ ÆXSSÓñãÇ-‹ÝnŒyÔ»ü~]]!ÄëõB C—L�4 QQQ„EQ¼^/Ïó&“‰ã8ý¿mMÎDC@HEô—¬$IkV¯)æ@ïJày>°R©¾EUUƘ ú?%I*++Ó+i}v¥~Y߬ÏÂçóµìÅhFm-QÂkÙáp8cìÌ™3^¯WÅ�¢Q {…<:œ;w¯š­¤Í;[v–Rv®lÕÊUÍZ¶A¸næuz8!„ã¸^ŪªÜã„«ÕÚ@ýgI’N?AÉÊÎ TÀgNŸá8.'''&6FßAQ”ÁC†ÞðÌÌL^Ì&SSSSQQ‘(Šñññv»]Ôår�9sÆn·gddNÚjíλl¼h•ßï×g~ú|¾ÒÒÒ¬¬¬úúz½‘£-QQQúøJèr!�õuõ[¶n ¬ ŒRS]ýå—››Í¥3 ÇDBÈMóoZ¼d±×ë]ûéÚèèèñÆ– 8zäè©S§æ^?×l6Ÿ9sæOúSËôpâĉU+WB–ß½<77·K__¤“$©¶¦Vï°Ð4MÏpåz£‚>ÑQ�|¯ËàŸAðxŸ"+ÿøû?Ž="ÂâÛOšx£&³Ùœ;h�ßçÓÇ“ê222ü~¿Õjåxîü¹óÇQŽ^ÚÖð=‡ÃÑÐÐP]]ív»EQ´X,qqq�††ÐÝÃBÓ4=÷¤¤¤TVVRJ322ôþ‘@“†ªªú�IŽãZ¶s@—ëža’~¿¿ÑÙHILLlg7JiBB¶¯¶}ºöS§Ói0n_rû 7ÞPRR²zÍêúúúªªªŸ?ùó¼õæ[ûì߸iãùóç|èA}X¾Îjµ.[¶låÊ•„�eË–õ©&òÿ³wçñM”ùãÀŸ™MÒ4=éAK/(´œ- H¡\‚‹Ü ¸°R�ïî×V¼•]w×ß~]]Ï]…×E”¢¥"*å¾ å èA[z_iÓ#iîÌÌóûc$†¤M“4w?ï—¯—%�™<™IçùÌç¹âp¸b±¸½­­««+11‘­\{zzd2Yrr²(PÄ6XX• ‘HÚÛÛ1ƉD¥RUWW£š¦Ùy¦ËÊ~éÍŠ1 ‰��`áÛÛÛ;;;ƒ‚‚BBBØLI@@@jjªÁ`¨¨¨`;o2 £×ë1ÆUUUlî„�0Äbñß@¯<Ó$ÜÚÒÊNXZZÚeµ¿Ûùsç¿ÉýF¡PDGG¿ôâK,| ¹¹ù³­Ÿuuu1 s«âÖw»¿ Þð܆åË–s¹Ü7oüðýfÙ…Ô´Ô·Þ~ë­·ßJMKuíó4¢·ÿÔ*•B¡‰Dư),,ŒÏç·¶¶ê´Z½^ÏçóyÜ>§Öàp811?7*…††AÓ´á¶þfWÀ2¢izà‹½Ò4ÝÓÓÃårãââŒí)c6úa—ÅR«ÕZ­–};ã+�f¦—Àm<�uÀ_¸pA¯Ó1 SQqë£�þõû߯�´hgÍœ5S.—wtt¬zx•D"©¬¬Üºukkkkhhhê¨Ô‹?]MÓìÔ\.·§§§¬¬,,,,""B$‘$IÆñý`¦¦¦¦®®ÎÊ™½"‹¡Ý¼�»CikëöíÛ5juxDÄúõ몪nùÕ—õõu›6}üüóÏõµ×íªª]»òJËJBÓ‡ÿï“ÿ�ZðÀ‚ððð9;d2Ù??úçè´Ñ+V®9r$¬“„bûŸo¥z¦(ª¶¶V¡PH$’ÄÄD™L&•JÛÚÚÚÚÚØù6ø|~`` MÓUUU¦;r8œ¡C‡š¥úšÿÑŽ�D]]]ÆUÂB Ãèt:‚ êêêŒí좚wôàLî 0Æ·«ª¶~öYKs3�Ï_ñЊظ¸¡±±ã¯v|ÕÐPÿÉ'›|ðAÓ](Š*¹Yrøðá’’›l­ÃÎ~¸ý‹í¦›ñù|!†aJJn–——¥¦¦Í›7/cb†½Kcøã#¶þf'|$"88˜=3�†¢¨¨¨¨¾Æ4bŒ[[[;;;ABB‚@ ˆ‹‹‹ŒŒìêêR(Z­V§Ói{›±!j61I’‰‰‰Æ¹¤,ß«®®ÎrñLK�¦×ÍLgzàp8–£C8…›B½^ÿã�{Ëo•«U*Ÿ¿rÅÊY3BAÌš=K£ÑìÊÛUSS½í‹mÆ‘™4MçìÈ9~ü˜i‡;š¦ê{} 6yŽ1.++ÕétÇ'‡ß™6 „¢¢¢BBBØE+ØW"""›„`_ár¹ááá ð±A111\.788ØøÏçó£¢¢Œ3EQìŠÛ¦K`ÁãñŒ9‡"‹­Äs111ááá½�áñxaaa$I’$a=±„1†ùªÀEÜ:°µˆÁ`’H²×fgNÏ4Þú ‚¸ÿW÷www_üéâ}sïÛ`?û Ëáp–/_vûömƒÁ0mÚ´ÓgN·I¥™™ÓÓÒÒÌ®V«÷æïU)•Ë–-�ŒŒ<þüªU+Mã†6©ôÇ÷"„–-[ÚWLt×,�<—Ç3¿ÜfMlžßô¶¯¢•÷`Guö›àék&(+…1+FBB‚ñŸ€¹)tàr¹K–,ž>}zbb‚ewH‡³rÕÊÅKË»»:h|=$4ô�¯ÿ‘Ïç«Tª . „RRRfÏ™m¶{wW×ÑcGUJ%ŸÏÏš™•53Ëô·�æ‹/¶ß¼y!ÔÕյṠÐp˜ûú:p8œ{§ÝÛ×oy<�Ç“ßYÁȬ§›Á``§C6¥V«ÍŒ6Û¥»»›mõ�ËåƒaЄÐW€óy~ÑmƒÁpðÀÁŽŽ‡£P(4 I’½NnÈ0LNÎŽœœ½§¯U$É’%K¶¹!´xñbÓ‰&`/χ<�a˜'Ž»C���‰±Ö¾n¯Ìé™÷L¹ÙÐ$ë\:Ãâ†q8+«Ž;¦´´”a¡P=kÖ̰ðð»JÉåÆÇÇóùü¹sçŽ?ÎlwµZ�Ÿ¿¯§§ÇÊŠ4NAäççgffB³¸/êì°¶ü€A.üîçpgñÌòWðQ:À:À:À:À:À:À:À:À:À:À:À:À?/º=�…3± GÀ¯Xno¹ ¼ d`îÀaKÆÂÞm ÁH6pÈ:ÀNÈ:¸‚KŸ¶�›Ò œtLH0ð ^:¸aMßo½n¶�íLJˆ€oŒ¡²-U0�JÝÕÇ<ú:À:À:Àƒ´¯Ë´G‚+z@oþ²°Ã Î:° 7ز°„°„°„°„°„°„°„°„°„°„°„°„°„°„°„°„°„°„°„°„°×Ó€{N9 d`È:ÞØÀÎ8”sÒ f t<Â%õº@èà£|õ À¶{¸é6–OÖÐ×v€¬ƒÏ�|ø¢�ܽ½ëÎYØBßâ]�'ÛøÕÝ,|ˆ_}ó`ÐðÙ»w‡ÐpL¯U+îûW¶Ì):˜ý`ïa­BÀNÊ%8=%áú„>Ág“]à?l¼÷·Y¿‡!œ‘xpåa!t¬pêÛcᇳf„êk/;C ¼äÀƒà&Ü œ ô â†ÞAÖðn”pàø6€¬ìY¯É1ðS~tƒ‡¬ìY/áGá(x;gÜr-��­þÖY¼ º€ÐÀ 1€Z×–]½ Rw½^_SS+•JÃÃÃûÚ²ººúرc ÃôÐ;_½Ä„Äùóçs8'Ö—ÔÕÕ!„ÂÃú<ŸÖ±;ÖÕÕ�7ΙÅ w®«/œxdÓþ‰Î:š‹ö"ìl¦±›íkFôuÖ DðnÞ¼¹mÛU*BH¡Püûß[Ö­[Ÿ––ÖëÆmmmgΜ¡iÚöã+')ï»ï¾Á:¼˜fXvYÕŒío6±qƒßpwèpùòåmÛþ«Pô ³zõšï¿ßSWWÿñÇ›žxâ&OžlÙï!000!!Þ,ë ×ë¥Ò6ŒqDD¸H$2Û%22úOìdyÓÈ èÕh›ÿhKîÁOpcè`0>¼gϽ^µnÝúäääaÆ}òÉÇ55µ[¶lY¶lÙ¢E‹x<žé^ãÆ�³LžWUU½÷Þ{�fõê5÷Þ{o¿o]QQ‘“³!´vmöÈ‘#�ø¡0¨Æë9dxßù±¿8NUoä¦n’­­­ÿú׿rssõz}|ü°çŸ��? **ê¹çž92Å`0ìÞ½ûÝwßa[ë­ÃØŽ@V¥RíÜ™S]]S]]“›û�Z­vüc„°øÏ›Ûëxr¶qL©]Ü®¿Ëeã©ñþ+ ìåòÐA¡Päååýå/¹rå BhÒ¤I¯¾úZ\\œqƒˆˆˆ^x1++‹ ˆÒÒ²ÿû¿ÿËËËëéé±rLŠ¢ØÞö6LØÕgàTƒ­ú ,~plw‡¹|À…ñmÀ`ãÚ‹ìÝ»W©T2 C’d\\lRRÒÙ³g-·Œ‰‰IJJ¬®®Ñh4{÷î-(8µ|ùƒYYYmmmE™mÜÐÐ@Ó4AÕÕÕf¿%"(((""‚ýg``àêÕk؋ի×Xö�8•s‡$ø4úE:�Ýïuvh„ \:$%%q¹‚ âã‡I¥mõõ õõ ÖJÃåFGGI¥m5dÈ�öööwÞù{w·¼¯ísrr,_$I2kfÖ“ÿû¤1'‘––öÖ[oð³ìa¶ ä`K98 ×U1mgÙ1Âi缯53àÒZ® ÒÒÒžyfI’ááá»víR«UìëãÚÚ:…B!‘HŒu<Ÿ°|ùr™L¦T*'L˜ÐØØèÒâ\Ï¿k–�ÔžNŸƒÛÝJbCªÂ®é#ýûb#—�°3f ûóÏ>k|Q¯×ÿóŸÿ(.¾žœœü /˜�ªHJJbˆŽŽ~õÕ×Ì,t:ÝÎ�9µµu!¡P˜��mÚs‚%‘H`|&À!dâ¸^†õ]Ü8¯’�&ÜÓ™x¯^9“Çã%&&š½xëÖ-™ì繫u:]ccã¬Y³ PÀ×øÐcª•BººÞtö˜–‡·¡[fÜ:h4š¯¾úJ*meÿIÓtKK+B¨ªªêí·ß2Vü¢ÀÀìµÙQQQ}Ç`0:|H­VK$’Ô´ÔË—.N�:5%%Å Ÿà$Þü¤jW#¾½u«�Ü+Î�qƒ÷ÍD\ÂM¡EQuuµl+ƒ)¥RyëV…ñŸ‰D«ÕöuŒñÉ“'¯^¹ŠÊœž¹há¢6©´¾¾!'gÇóÏ¿ê¢ÂœÍËë·-Êå¬.Î= ƒ¼ü¢'rSè  ~ø×J¥’ý'EQ‡¬¯oHLLX°àãÏ<oÈ�!½c\PP°k×.Š¢âã‡-Z¸(<<|ÅŠ•[¶l¹}»zëÖOŸ~ú™¾–‹”J¥?îý!´lé2+) À€Aõѳ¸ÁY'jÀù $ |¨- 8ÆM¡—ËMOO7þS¯×_¼x¡¾¾!$4tÚ´ifÝ$-i4šïøþÈá#z½>""üþç·ìb›'N\ºtéwß}wófÉ;ïüý±Ç·\FK£ÑlßþÅ�7B]]]ÏmxN 8ûó€�X¥ZŽÀtFôÐ×áí, $<ÜM’èï;OÓô¥K—öìù®¹¹!9dýúß�1âçÝ bÑ¢Ez½>??¿¾¾áÝwß�:uÊ,LHøeÀ§Á`èîîfÐRÈåƒÁ�C‡„„„PGg‡c»³;²xˆ•Ûb_3,XßËñr˜&–oÓWÜñ„ß#òóó333]4Bc¼}ûö‚‚Ë_QÅN1Éåö¾dd¤¯[·þÒ¥Kûöå××7°[ŽŸ0þ±G³lqÀŸ:u*77—�¾šÃá$%%fg?jì;yöìÙ/¿ü!ôøã�gff:÷3z†a²²²óòòúj¾éKww÷Ã?¬R©Îœ9clBÀfP_XÑo ߯Šß-'¹�7±ÌoÀ%´\žu iš�zý-Ã0z½ÞòuŠ¢‚�H$ìT’‘‘‘=ôPfff¯qAsæÌ9räîÝß]a&<<Üt²‡éÓ§O™2!Ôoˈ¯#Iòí·ßÞ°aìY³¢¢¢l�1ÆR©!´iÓ&ˆp*g嬯¡å¼z¼�Þ™§ `<Å åÚ¬BH&“uwwÛ»—X,f³ /^ÔëõS¦L±¥•c\__åÊ•éÓ§GFF:R\¿P]]ýñÇWVV wáñx)))Ï>û,»¢)�zÄŒí�ú /lÙ˧�ðÔ¯àòÐ0˜À�Ä”Y?[¶4²=ÔðÆ N| IDATÐYø7HMœÈ+æ2òÄ�ÿü\ìAË«'¢€AÀö*Øë*këÝ ÷௠tòºh D¯?ZßøÀW8c(‡ßBpÁ·<î8À�«o˜÷– 8dÀYlœéÀÊÔJ–ݼ½EÃöa$ÀoÀ €sy{UçJÄ –G°%nðÌÀ ËÒ æ‹=˜Aè4ðÙ©Ý÷RlõŸÀ�Aèp.È[»šçÏpo�ÄϯƒÁBðN® úªúûßã~ö„èa0 \i€Ë9ZWù!¢�ŸÝ\†¼u®´ßƒ€�0«� �m [¦gðí“‹jú7a¬#°É+ _ýV¬¶ÄdÕ_tàKÓP;A_ÀÙÞá}õŸÏðHµëä– ¸ü~²w‚L¶ÃÜyÞl®åmÙ.¸ß�¬ÀÍ Ëä ƒ{ýø0•ˆ%ìq•eœQ“£Â…÷:<*S¸�ŸûÝˉ§ÑÅW.¸¿€¾àqVIJÎãý` Å`¡ÀuÌÆmZ²\(r°�ªø®fË Hƒ–O 'EºðN:ÜÀzôàŒš ¸�-«XX»ˆ�kòu:\DZY`î3¾XÕÚ@˜ò­O8˜Á €KAS…¯pÅ•òøXSà�u¸š½•G¯Ÿ¸¿ |Žs P�ƒ�Ðà�lìá£a„K+oãÁû ÂÜ#„&ê¯D>z1Àýìª$mÙØ–€À£É˹Ÿ¡ÀwÁSª¾wr°IYß+ý`¡ƒÿk•ãS·˜³U¸¡·+„Ð 9,Œ˜>‚˜=ŠŒ†¿PgÂËåòÎÎN„PXXXpp0AÀ¶<�:…—�FÇÍÜÙ †Ùx3üY«œÙZÀüx…Âwÿ Öɘ:*¬@ïÀË&rŸ™Ã‰ ‚?Ò�*+/?súôåË—•J¥ñE±X}5\ioÃùÍo~3lØ0o¸ï\¼xñøÃ±cÇÆ�̾h0Ž=zìØÑQ£RÐ�¥uÞðq<èT9ó—({÷:w›C$E (zÐëõ7oÞ�€}c|ûöí’’’¸¸8’ìåà¶\PK^r‰¯ðþûãÇ�ÿÃþ�œœÜk©‚ˆ6löìÙ555{¾û.yøðèèh'–¡¤´ô¯ÿïÿÕÕÕ�;–Çãõµ™OŸç>xsÙÜÆû#Sv_2‚€Ëì�\Þ`qýúõææf³ãââÆŽkËî·nÝÚ³g�Z­Öh4O>ùT}}ý| Ñh¬ìB’äºuë233/´/k•3¯ï18°#ÆèOßQß?K¤ßÃõë×7oÞ,‹7nÜ‹ª©©ùàƒ†‰ˆˆHKK³xSüõ×_üðÃ�7múÛßþæÄ–‹ÚÚZ…BA’¤1\³äøy^¿>sš‡Ïóàc=Sï[±‚» 1ƒ÷rmè€1>wîlaáYÓI’3gf�3Æ–š1cƬ^½zÇŽEEWöìù.#c¢+Ëë¶0j½ù‹½·Z¼`‚0PÀA©´ô¡bÍ«¹JúîzD­GŸž¤ÿ²ÔÁo…Á`(((0 'N4>X'$$dff9rdß¾}‰‰‰B¡°×}Åbq_¿²D›‚ò¬œœ±X¼~ýzÍ ‚X¿~ýÆ�srr^yå»Þ c\ZVÖÑÑaö:Ã0Οg>SXhöÛààà±cÆp8¿ôbñÅólb�Ô%ƒäcæ¦n’!!!ÑÑQ¡ÖV©B¡@iµZ³môz=Bˆa­V«Ñh¸\.�Ç#bÖ¬YMM�‡©¬¬š3gîk¯½FÓt¯ï"•JwîÜi='áßZåøÇ+”Ù­gt,¹s]X¨ø—k(ଘ*ž;FðÈ–ÎÒ¦»Â‡®POÎâ86b³¸¸¸¤¤D,Ïš5ËX]q8œùóç_¹råúõëÇ�_´hQ¯íâÅ‹—.]júJYYYcccJJJbb¢…qµ²òò«W¯®ÿýïm¯‰BB¡pÕÃoÙ¼¹¬¼Ü®1E:x°¨¨¨¯ NŸ>}úôi³ÓÒÒF¦¤˜–pñ’%K—,1ݦ¬¼¼±±1eÄï<Ï/ä¦ÐaüøqO=õ4BhëÖO Ï*Š¿þõÿÕ×7Xn©P(Þxã ’$W®\¹lÙ²ææf…B‘žž3cÆ ë·i‘Hdú€eTQQ‘““ƒZ»víÈ‘#�ô™¼Ñ©[ŒÙ8L‰v® 5�ŒBÅÜ�ëÂ&ÿYfš{Àˆ8]�¾ÇîС»»û‡~ÐëõóçÏOJJ2ýULLÌòåË·oßžŸŸŸœœ|Üݽ/eííçÎ�ë÷€ãÂ3g Öfg{çyƒôrðb^=8“¦éÜÜoŠŠ®Lš4ñ¹çžGµ´´X¦‚ d‡ÃYR©T;w®Fåææ¾üòË"‘ÈÕ%÷”³UæM‰ï­‡Šûì:*æ¾ûkñËß(M_σ›O÷ip X¤Û{x&t‰D�=ö¸N§3}ñÖ­ò}ûö ‚U«VEFFZÖ.ííío¾ùfww·Ùë$IÞwßÜÇ¢ß÷í«¥Ão4tšÿq-˜ÐO:ý�t¡YèÐhqë0ÆÇ�?~üx@@ÀŠ+ÂÃÃBÝÝÝ?ýôÓĉ#""B<oÕªU õõõÿùÏž}öÙÐÐP+Çd†mÀ è³ëŸÉår¥R™àèczbRÒ±cÇäry_ñ®-hš>räH{{;Ã0uuu Ü09Ï^Õ§¡/ƒj¤?û1oÑ×e$—ß˹)thnn9xð ûBˆË妦¦vvvÖÔÔddd°­ l$ÁãñÒÒÒ† †¢¨^Fr8œððp.÷ç’Ëårë�W¯^Í6X¬^½Ú�S!vžiSl¿H+,7h³8ˆã‚‚‚¼¼<š¦/^õôÓ‰„Ï糯ôsž·mÛñ•×�ç>ôZ›B…€û¸)t¨ªªªªªbf÷߸qcóæÍE=óÌ3l}c#¡P¸aÆääd„ƘíaŒ�=úÍ7ß †iÓ¦»@¶µµ�:u !4cÆŒ(“†ù”””ìììÿþ÷¿åååŸ}öÙóÏ?/Ø:ŒÃá Óγ쨃Á`š+¢(Ê`0P”Ÿg�,‘’’bügYyùW_~IÓôC+V…ÂoÙr¥¨hÊ=÷°!õ¥Ë—¿Ø¶mÚ´i«V­2öþqä<ûF–ÎJÐàksÞܬaáÍÜ:„‡‡'$Ä#„êê껺ºBIII ¥¥¥»wïNLLdÓÚ6R(ìcÆØ¬Õc�"!ëdwå TZÚzâA¥5¯"%¶vt b„ —/_ |â‰'ØN¬4M=z´½½=11qÞ¼yfÍùS§N¥(jïÞ½+W® …c¶ÆâñøO<ñÄOüÜêÔÝÝýÖ[o©Tª×_��!¤R©Þ{ï½––>ßà óaaa!˶3±;²±ÆørQÑÛ¶õôô,]¶lÖÌ™===C‡½yófCCC||üñ'våæ²=LÝ9Ï<;γow€Àÿ„šÈÇ ÆˆÉG¸)t3f´é „�X,^µjÕ‡~ØØØøã�?<öØã6J©T¾÷Þ{¦¯ô:Gáà4,Œ¨“ÝõÊ¡bÍŠ©b+»¼fÞÜfÇ6**Š�¢ÀØÏ®¢¢âôéÓ<oñâÅ– y‚ f̘1iÒ$ã`c•fº™J¥R©T������ÆišÖëõ$I“ðž,‹ëjkÛ½¶¦&((È8eªíº»»¿ÿþû‚‚Š¢ÒÓÓ—/[Æáp‚ƒƒ'ßsÏß¿wï^¡PxæÌ�·6;û¾¹sMùâyƒ{^Ì“•îˆ#æÍ›‡:{öܵk×lÜ‹$I±XtÜÝLMaþ§öj®²KÙç¤Ô]Jêµ]J³³RìûVðxiÒ$„ÆøÖ­[Ÿ}öYee¥qÓA¶*•Š ³>(íí2µZeY¥ñx<�÷é#bòäÉ—/_v`vgŒqQQÑäÉ“í^!“ÉvíÚõÚk¯?~œíØ(‰Øæ ‚ ²fÌˆŠŠºxñâéÓ§£¢¢^~å•ûçÏ7¨Üûy–yõy¶6ùà*ž ‚˜7o^bb¢^¯¿pá¼eеW"‘hãÆ�[·nݺuë§Ÿ~zï½S]]N2{IÜ}Ó¤ôÈ–Î^£‡.%õÈ–N³ % „gŽt0ÔÇ;v¬¬¬,<<ü¡‡bã š¦Ï�;wúôéíÛ·[N†HQ”V«åñxb±Øô8eeeE�‘bú”l0ôz=ŸÏ÷†x1kæÌ®®®swfr´ÝÙs纺ºfdeÙ¾‹B¡ø÷¿ÿ�ŸŸ¯V«322-^l¶Add䜹s9NDDÄË/¿<ÚbÂï~ÎsŠ÷žg@”à¯p¯A \ooà¦ÐA&ë(*****’Éîª1éõz•JÅãñD¢_ò …âÆ�ë"‘h̘»&�Òh4ƒÁø´íYi©©y»vÙ5{©F£ù6//##îù $É“O>¹hÑ¢¿üå//¾øb||¼ÙAÌ™={Ô¨Q2™ìøñã–ƒ�9Ï»Ïóõë"‘hÌhï=϶±1Ó•Žo‚,’÷qÓ­¡´´´´´”ýÙ¬kÂĉö-K¡V«ßxã ã?mÉK¥Ò½{D-]ºÌ´Ã¿_zfçÈMÚl šA/£4›¿Á’ˆ�žžÓÏ`ξÈd²;v(•ÊY³feÝýH”��ý�üãâÅ‹ ‰‹-4æê5Mww·P(4mø¿pábcccFF†Ùü†*•Z¯×zI"}íÚµúÓŸ6oÞüÒK/ÙÒú€1þä“O”Jevv¶½ïµfÍ+°ƒ�?ú裣G�‡„<°`�iƒEïçùbçYí]çÙ© ý'pSè LS­uܳÎré?ëÝ$5ÍöíÛoܸ�êêêÚ°á9+ ú�È â­‡x/î2ØÛ Oèo+¸Ž-›©P(¶mÛV__3eÊ”ÊÊJõ�†ý�Çã1 “Ÿ¿wøðáii??s·¶J{zz’““�mð•••ùù{Á¯~µÀ,%“É CHHˆ—$¨bbbžÝ°áƒ÷ßÿðÃׯ_o}–t�FóÉ'Ÿ¿òê«\tÛì Ñ4]SSc ¨ÔQ£Öfgÿç³ÏòvíR)•>ø ±Å¡UÚÛyÞ»W üj�·ŸggTóJù ˜”Ú˸)t˜2åž§žzÚ�Y{MÅÄÄ|üñÇ–¡qG¯{ †îînv/¹\a0ü;t@ÍN%_YÀ{ÿ�ÑA WðæŒr¤K­VoÚ´©¼¼œa˜¦¦¦wß}×ÊÆ*•*/o× /¼ ‘HBUUUz½>!!�½(•••Ÿ~ú©\._ºt™1¼`aŒ+++0Æ11CøEr¢ô ^~å•�7mÚ¸q㪇žž™iY6ŒñÙsç¾ÍËS*•¯¼úê„»›p›iëéé),,¼~ýzII‰B¡˜1cFê¨QS§LÑëõ_nßžŸŸûöíììl¶å¨Ïó¼l™YÓ Æ¸²¢c3ԋγS&pŸø€�¬^Çå¡Ã„ éÁÁÁ‰‰I½þöĉßÿ=[ñët:Œ1�dzòôÆápz]શ¶öÒ¥K …\¯×aš‡�H$‹/þòË/B‹- ðgòk¦’ÑÁÜ?í¡,à¶$⣿=Ä�“ê`Ç¡P8|øðòòr‡$‹Ù!0�wˆD"±X,‰t:Ý×_]YYyäÈÑ+Òjµ×¯s¹ÜÔÔ4�Nwüø‰üA£ÑÌ™3gùòeAtwwïÝ»—¢(>Ÿ¯Ñh.\¸`:3’7HŸ0áoû[NNΖ͛¿ùúëI“&%&%±£R»»»kkjŠŠŠººº222²³³˜o@©Tªââb„Pqqqqq1I’“'Ož|Ï=!‚ ffeI$’/¶m+--}ã�7æÌ™³hÑ¢ëÅÅ\.75-M§Ó?qâÇîœçe>sž�Ä,V€ö /÷sØIoãÚÐ� ˆiÓ¦Më{uÁ´´´={ö;Þs8œÉ“'Y_Ý WB¡°°°°½½!iúÛéÓ§O™2 ²5~æ¤r¾–üô$ýà ÷ñ‡G ¼|"÷é9ÇÚ)~>A<ðÀ³gÏŽŒŒì5°3ÕÕÕ½sgÎ�×çÏŸ×ÕÕ%•J‡ 2|xòÕ«×öìùc¼bÅÊE‹²W*((H¥R�={–M‘$9gΜ””ÕEbbb^y啲òòÂ3g.^¼xìØ1㯂‚‚&Ož<#+Ë�u2{ÕØØxýúu„PHHHzzúäÉ“G�m–HKŸ0áÏþs^^Þµk×’’“årùÏç99ùêµk{¾ûc¼båÊE ­žç^wž-Ø>Ó"ÑÛ?!nÀAD~~~foYV÷0 §N�êêêb‡� ><))ÉXš¦wïþöÖ­ŠQ£F®\¹ÊJµd0öíÛ×ÒÒšžž‘ššê§¹VG´Êñé |¦’iìÄìú‘2.ŒÈJ!gŽ$Oá•JuãÆÍ Ƴ¹¥¦¦¦††Æ©S§ „~úéRTT¤Y—=v†a8NttT||¼—_YŒ±\.gg; vn�)Š:|øp\\ÜèÑ£­‡ÂlIØ455546N�2!ôÓ¥KQ‘½�çÆ;ç9ÊûϳiÙú ¼ùƒØ,�éEôê/æ ááÐìÑë�ÊJåêw6�õÐÁ‡ú­ø _· Ö×a¶¬b}®6�(¡/¿œŒ „|ðÚú¾ÂÞÇKèÍà7 Á»ÀÂQß�æxd>ÇöèÁtK/\…�ø ƒ„eûE_µu_A†+:äAÄ|„€AÂz/Ë�¸ X¼„ÿc9ñT7>͇žè&  l\˜Ûͼ­<^#8iÞ²?c9í´ieã �7”ÁgA‹…€Ðà÷LçŒ2V;P{?¸X^ ,ƒaó<Ö^Ø´1AnÁ{A衆«ÝF`8Ùž¡`râz›Øâàr=xôu BÖ#»Rå�Ww…þÏ*Æw6‚+àv�uø¨FüañÃ�·>îY€?1V"ÞCÀlTÀ?AèðQÖ¤ðøðèá.›¹„|aù#�™'@_€°œDø#“é9×Ù3 ëðQÖŸ7ûíô+*ù*¸Z¡À¿¹¹Ó$Ð�ÿƒ €ÿ!zË×÷ÆÀÛô�Áµò�uð+4MkµZ½^Ï0Œ§Ë€9³†!I’Ïç ‡ÓÇ&öe†¡iš¢¨�— r\.—Ëå’¤»³:ø Œ±F£Ñh4ž.NF"I2 ƒ1Æ6MA<ÐV‚ ‚ I’fŒ±V«ÕjµB¡P(„õA¡ý (Š¢(Û>ðjA0 Â4M#„\}YÙï‡Ãáp8$I’$IQMÓ\.—Çã¹ô­Í@èà0Æ …b€Ÿa+o‚ (Š¢†$I‡ÃVê.}_6@a†ý›âr¹cšf4 EQAAA&°£ªÀCFÐo`Œ)ŠÒëõ!O}3ù|>› 3 Ãðù|WÀBŸ‡1–ËålÌ €?ár¹ì:�ÇóHV–½G ‚ x<®Á@ ¹\ìÀ=Z§ÓA²Á?Ð4­×ë=þÍÔëõA°ÛZ- ÝSè&éó”J%Ä ÀÏ�$Éãñ I’"‘ˆÏç»ÿîŒîôr‰D$I �Kˆ¦)¥²Ç®…¶ ‚`k—–¸EQ:�Î{¾™:�ŽMB`Œu:�› àž·.¢×ëÙŒþ„�x<ž@ p[¶/A¶H|>Ùÿwgl ¾ŽÍ7xÛ7S¯×³_0·}Ó tðmjµÚÓEÀÉx<žN§ãr¹l=í%ø|>—ËÕétl4ÛÿôØ.®,p†a¼ù›Év£qO~ Bf0àQø‚$†!I2 ÀÓe1@’$MÓlÓ²Á`°e/›G…oǶ yí7“íúÀö£tõ;B7I�2Àÿ�AQT@@€wV·¦‰¶I¥ß]`H…`GÕzù7Ó`0p¹\6ºuéÛAÖÁ‡ÁhLà0Æ$Ir¹^úTÃv§g£³�ô4M{ÿ7ÓØãÁÕo¡ƒƒ§ào‚�߯Óå°†}ªc§²e{ï|Hvagqðþo¦ÛfƒÐÁ‡Aèü I!�Œv³[<ÛCø;õìs¼O|3išvÃWΫO`Pñ­´�Û{|8¶2ö‰o&Ã0nøÊyõ‰ *l®ÕËëZ¶xÐ 1¨À7Ó „oáCõ±§ƒÐv€Ðvð�ÐÁJnP£Ñ@æpZ[[7lØðôÓO—––šýJ«Õ~ôÑG6løöÛomœž¥Wã�;sÖ®]ûÆo˜NMo0:ôé§Ÿöôô·ì—ÃÅFc­V;�kj�Á`Ðjµp±À.Ÿàâܹs{÷îµw¯¬¬¬… ²ýE{zzØNƒ‚‚Ì6«©©©ªªÒëõ���–3 †K—.) Ó ‚;vlll¬-ŸuëÖž={ÔjµF£yòÉ'êëßÿà�Fce’$ׯ[7-3Ó–ã{[æ.íwgM€zõêµmÛþ{ÿý÷/Y²Ä´W³-Çï·/´V«Ý²e‹L&{ñÅ#""^ZÜÓ4æp¬?òašFŽ�cš!û9.CÓ„ÝÇþÉ塃R©lll´k† ’$ ¹ñŸr¹\«ÕFEE™…EœÒétC‡�:u*Bˆ�¾ÛXghµÚ}ûöÕÖÖšüÉ'Ÿ´1t3fÌêÕ«wìØQTT´gÏž‰¶ Ÿ€1®¬¬|¸²²rΜ9¯½öÓÇT0R©4gçNë9 ¯BQÔÁƒ>ÌN°*  ÅñãÇ«ªªžzê©°°0v³žžžÏ>û¬²²’]2N*•~óÍ×ÝÝ] .äp8ã+W®~óÍ×==='00P£ÑUUUýö·¿5j${�F“w Æ IDAT››[\\Ì6ˆÅâ¾*c„�R©¬ªªŠˆˆ:4†-çž={ † …*•êðáÃ---O<ñ„1z iúÀ�‡¢(ŠÃá�$ÙÜܼ+7·¦ºzíÚµf+äVUUi4šÔ´4vZÙâë×÷|÷]{{;;»ptô]�^¯ohhèu…e‚ ¼p =_´½ÒÔßöÉ7—Û)DHÂB)¹ìVáë½üÂ’áÆøYßt|óßs®+) %䵿ÿ¤äöÚ?üþ¾Ø¾×‡ÆŠß¼û¯ãÍâ‡iÚJŽu«¬é¹��Œ“¯…ºjï‡ïÿp[‡¸AaÁ†ÎŠ3¹–Ô=õÇßM�píúJÀ«¹œ}¥§§G¥R‰D"­Vk¹¢X\lì†çž3›:°¥¥eÏwß!„~µ`¤¬bÿœûíSâ„ Á`0Èår[Z d2Ypp°-‹^zºålnÞe7éWOþv館@ÖJ¯îÙ²åhÅ;ŽOx}q<!„èÖ39¹7T¼áK_ذ4-)níßô�nìÊ93æåû¢û¨äU%?n?ÑÌ„Þû»WÏŒáë[/|õÞççNlß›ñæÚ1샚¾æè—{oëEãÖ¼òô¼DÝY¼ûÃ��^ø*/}Ô3SC Ö³…_~3½º›¤R©”Éd�†a­VÛÞÞÞÞÞÞÖÖ†ºråÊ•+W¹\îÂ… CCCy<ÞŠ+£££›››<à”uÃhšÎÍÍý¿7ß<|äÈì9sx<^KKK£…¦¦¦îîî¾¢R©vîÜY]]]]]�››Ûë매¤¤<òÈ#¿ýíoçÎ�Ë~Y“’’fÏžM’dii)ZÉåò¢¢"�·|ùƒÑÑQALœ˜1}út�FsñâŒqHHÈã�?±zõšU«VI$„PXXØ, …MMM--­ì{½üòË|ðÁ† ÏZ)ÛZÁ0LZÚh‚ (Šºpá¼Á`˜3gÎØ±c‚6,nÉ’¥$IþôÓE•J…R«ÕÇ�cfñ’%Y3f…B.—;1#ã�ü£eSgWW}}}llì�;É3¦OÿàƒÞÿýI“&Y–‡Ïç'%&Ž>Üø_ü°ae¥¥:�nöìÙ£ïDÀ Ø=qMÓ›6mzûí·Ùûƒmmmo¿ýö¦M›|¥“,'fîSÏe?þÒ «§ÄrB„ jâÒ%“ùÝpîZ3Ûl¨.%%eÈ�!7oÞT©T*•*2rHkkë™3…“'ß“Ö÷==&fè³Ï>k^œ~˜q¯ÔÔ´‚‚‚êêj¥R?Ìø[–DÄ6G¦ØN«ÕVTT„…… ‡êî« •šjÌH%%%K¥Ri[[rRRm]]sssdddFzºé¡z]殦¦¦§§gÖìÙfÙÛݸyóÆ�C‡�={¶—OLë œs9NBBÂ�7Þyç��7FFFöºY[[Û;ï¼ÓÙÙ™™™é;׎ =wÖÝ/ #bÂÔÒÙÑm@ ˆn,-ê`Ȩ‰ã⌬¼Ø±£öÔ¶•6/‘ÀAQÝÕWK:ÂÆd á"„{*®•0/}⨠;g‚�ÌË;÷SIq•rÚ=A„®æÆ5挚8:Âø”)>!]|äXÝÕ2Ù¼˜H¯~øôþúÍôÞÐ!”’’¢Óé(Š �;wnII »òéÖ­[e2Ã0·nÝzóÍ7ÍöR«Õ‡1b„ñ•ÒÒ½^¯ÕjÙšL,�;¶¦¦Æ`0Œ5 !„1.))A‰D¢ñãdz�*,s×!‡n¬“är¹õô{``àšÕ«wää „Ö¬^mÖ]à éõzŒ1—Ëe?£T*¥(*<<Ü´±†ý§B¡�Ë–Ã^BE³C!¨ž[[¥R©tìØ±lWÍή.µZ-‰ÂBC�ÛˆD¢ÐÐЮ®®¶¶¶ä¤¤úúz�NÃ6pXAÓtYii@@€Ã-G�æÔÉ“4MÏœ5ˬ3)è�koˆ+W®DíÛ·¯¯{´ñî¼xñbvcß…õ:-F_(à „pOK]ƒx CMûp"†&ðP³¬¾E‰‚ ºáÈGo[Ks†ÿú¯\ËaÚk ˜%þåÂ�QqC8[jÛ™{‚ˆÎ¦Z5&† 3 xCâ⸨¬®¡Í€"¡¯Oÿüò›éÚС§§çöíÛÆ:¸®®Ža’$+**ØT3BÈ`0°ã';::‹ŠŠ~.—;|øð   úúz½^-‘HÚÚÚ0Ʊ±±AÈd2ã»°½ó‚‚‚$ ‡Ã©¨¨¸y³¤²²rذa!†aÎ�;îÜyvc’$†Ù¿^^^xxø«¯¾cû' …6lHNNFaŒ·nÝZXXh}—Ô´´·ÞzËö·ð Œqmm-MÓQQQ"‘cÜÑÑ�‰D¦OðB¡ @¡P( „z«ÒÔÔ¤R©$É�!v}¬¬¬Ðétii£ÙŽ# …B¯×GDD˜¶ÿñx<‘HÄ0LWg'Ƹ¥¹!y»ºúø±cÕÕÕ|>ìØ±óçÏ7k_ìéé©©©‰ŒŒŒŽŠ²·`¬ªÛ·ëë룣£'ŒïØ€œeÅŠãýû÷¿óÎ;¯½öšé=º­­íÝwßíìì\´h»ÙÀË9�# #­.S`‚ŸšÃAay‡”F„(DrW¿aPp�Tm Œ‚ JÑÑIc„鎮!ަ»½‡AdxH iHG‡‘¨IÞÞ­E( [ÖJ#2tèÐô»; ˜±ÞW\|ýæÍ›���3fdÙ;=”LÖÑØØ˜˜˜ösÌ�™^"hã9g¿9ƒc,—Ëï½÷Þ… FDDtvvnß¾½¢¢âð¡CÙÙÙlœ�1.-)!I25-ͱÖD…BQYYÉãñ>p³{4BÈGïÎ}ÐןØ}´ s~uÿ�1”}_cö‹�1B#æÎ�ÌŒ� ý_ÁÝüé›éÚÐ!%%eëÖ­ìÏãÝ»wÿøã�þóŸÃÃÃÙ×µZí?þñ�ÒÒÒÌÌiÏ<³ÎôŽ\UUÕÓÓÃ0Ì®]»f̘ÑÞÞ. ãââ4 ;l¡×7 ûÓŸþd6:ßÒÌ™3‹‹‹‹‹‹÷îÝËöx°I’"‘ÈXHö©×Æ}½\qqñ™3gx<Þ‚ Œ­ølg³ÏÈ0 ;}‚e¶¦¥¥õÇ izúôéÇ'Û[v6§ÔÔ4ã‘Ù¡�E™v2¥išýg@@[ ‚ î¹çž5kÖ°;†……Ý7o^MMMee¥\.g¿ljµººº:<<¡¦¦æÛo¿Õëõ³fÍ2¦‚`ç[T«Õ4M»;ètz�NÇãñ̆YÊåò�;sÚÛÛSRRæÏŸoïs9EQ¥¥%B¡0%%Åø";ŸN§3m¡(J­V“$ÂápØ®šì˜Lã6�@§Ó)zzØÐ¡¹¥E*•Nž<Ùᶆ¦¦&�Ng}|)ðÆ{4òÙ»³%CÛùŸæ×P¼áþvé(ã]” �à f�\©Eè—¯¦N)×bDF„õò—HƒC ¤èV¨1 7n€Uòn‘Aa’„HIØÕw)TŒÉ@~¬î‘3ˆà„‹!tp€|3Ý:H¥Òêê„Prr’�³è‘žžþꫯnÙ²…mhˆŽŽ 0ÎŽ°fÍš¬¬,ãö7nÜøç?ÿiyœúúºË—/kµZ³iFŒñàƒFFFN˜0!77×á�æë·oßÞÕÕ5nܸ%K–˜VÀ‘‘‘\.·³³S£ÑStvvêtº�����_†¨TªœœœªªªÈÈÈ5k~ÓëÈ ëäryCCCLLŒiçʰð0‘H¤V«å …q‚K­V+—Ëù|~DDA±qq$IvttPeLWp¹\’$)ŠbƒBŒqÅ­[E¥�íX[Ƹ¹© !âðÀNàNÆ›²�Þ�ÍÐ]×rÿõß (ìÞ'ž^˜lr%‚£‡‘×åM-� ¼SÇ3�ÒF ‘!qQ’Þ¾ðœ!q \TÜÖÜ®EÃŒQˆVÖ"e7!6‚ƒ>4!€¨Ó4Iåx”1¼ ;Z›(ĉ�ƒáŽòƒo¦›BŒqAÁ)övŸžža×½;66633³¾¾ža˜óç/$&&M›6Íö݆9räè‘#GÙšvM bÁ‚Èê¢ÞfÔjõo¼aü§-;J¥Rv°¥K—F9Ú±ßu>ÿüs©T:|øð5kÖ˜%„âãã%IGG‡TÚÆFãêêÛ:�.!!Á8²§§ç«¯¾ºqãFhhè£�>ÆN m¯Úºº®®®{ï½×4“S^^^SS“tg²�†ÆF¶‚m81b„H$ª««kko76FÈd2­V+‹ƒ%„�N§+// MLHp l!Š¢Øî±b±Øo:¸¸—ÚÆ}÷Öl†ê¸úÍG[N4Ñ�c½á±iCÌ:.KË:p¼ézEûâØ/'#«¸ÞD’ŒÑÃLzýÒ±‘1.™{­¢¤¤Z3qìÏ݆µ5%%zÌ5nD0�$�Ã?s¹òF•"+<˜Ý‘j,¿.Çœ¨ #£à¯Àq¾þÍtÓµ¿zõê©S¡´´TÓlQ[[{øða„—Ë¥(j÷îÝ×®]³}w’$Åbq¸‰�<22 C›èwY/�F³}ûö‚‚‚‚‚‚/¿ü’ à=ªªª>ûì3©Tš””ôè£�ŠÅbÍz½!:nÜ8�F³ÿ>v¤LmmÝéÓ§&MšÌö‚ìììüüóÏoܸ’�ýh|ü0ãAl_Øc\VZÊårGŽeYòùü{¦L!Iòø±c�MM!¹\~ðÀƒÁ�žžÎF31ÑÑcÇŽU*•'Oœ`‹­Ñh N�Òét£F�bÛ\Úe²–––aÆ9<ƒ^¯gÏ€÷OÎüŒ®åÜö÷7Ÿh D£W<÷Ô}±Ý/ 4F R2gÇr¨Šó ¥BQmç¿ýñʼn��9âçH\Ssø£—žyñ£#µì]ˆŒœ8;]„äyùåJŒBªŠýy§º±(cVÆ!„ˆà±YÓC mÑîï®v1!¤k8žw°‰á�˜{Ï0XÃbsGÖ¡¤¤dÛ¶mì@ÿeË–Û5çKKËþóŸ®®®ˆˆˆììì]»v©ÕjãÝ¿¾¾îÚµ_ãµµµ½Öå«W¯ž;w®õ7ê·†‹‰‰ùøã�-�OÜÑë^l÷ v/¹\n0¼gɃšššÏ>ûL.—QWW÷Æo˜ž„‘#G®_¿^ Ì�;·¼¼¼¬¬ì¯ýkXXXSS“Á`¸÷Þ{G�NCõôô|þùçÕÕÕc…BñÉ'›ög ~饗##‡ìܹ³°°ÐôøÿûÛ!�@ðÔSO��¦P(ª««{�q!}„«W®\¿~ýý÷Þ‹‰‰‘ÉdJ¥2!!aÆŒìiçr¹,\XWWWXXXYYÉÎGÞÞÞuÿ¯~ÅÆ7•••�fô˜1fSL665}ôÏšÎzyþüùóçÏ#„&L˜ðä“O·§(Š�þKhÒOWcÚÏn}÷¿Wº„måÞw6|G›üñÆýÏ;/Î '’ç­¹ïÒ?Ž}ñ—�…c≆’Šv=9tþšû’~~RÒÞ:ù}q‡w~_P5+qlBDèä‡Vž/Ûqýàû¸>zd¨¼²´AÁˆÆ¯|pRè�/xàØE«§^ûôü™O^¯LM‹ÒÖ”ÔtR¼þzF Dƒ™kCvUÌÜÜ\¥RÉçóW¬XaÚÎ:ŒñåË—srr:::V¯^=iÒ¤àà`¹\ÎöRdfÿþû÷èë3fÌ�Ë»ããã{-ÛW_}yåÊU6ùÌVl§¼¾ÈápzmXûÿÙ»óø¨ª³qàçÜm¶ì{ � a û*›€²(ZPÜêZ[ן­]Þ¶o[w«­µúªuAE@*Ь"²ƒ„5 dOf2“Ìv·óûãÀ8L¶IÈLf&Ï÷Cm2¹sçdræžç>g»x1÷ȳÅ"Š"ÝùÓõ£ˆˆˆóç¯øä„Ðüyó:1ÀwÌf3½�&„´±Hvbbâ<¸fÍêââb³ÙÌóü”)S.\Hß(›Ín4iLp=+m——WÔ××Oœ8±ùŠ�:�nùòåëÖ­;zôhII ˲\vç�®¡¡Ä„„G}tí_TUU±,;hР;~ö3ˆH’D·¼¢5§s$I’$‰N±éôIè(ÒPQb¦w,D‘ÄÖÃთ<ý¸öÓO·ž>¬a.fÈü{î]0Ø5DR“6xDÔþÍQ9Ù®½4ù^Óy¯^ñåeyG/#¬O›¼äþ¥Ó{¹]™Ø±÷>«„¼fGQþÑJ„5I£o¿oùœ~�rº‡oC“É´ÿ~›Í¦Õjï¸ãŽo¼±C·kV«µ±±Q§ÓÝ}÷ÝãÆ�CÑÎÚÌÓž�taJJ„¹sç¶vr–e³³ïÚµÛ5óP«ÕNš8±»–étº}û÷×ÖÖ"„¢¢¢â¯]gtâ¤IcÆŽEÍVêv#FŒxûí·½92--õ׿þuuuMSSS||œ{Î?11áå—_n÷ Ë—/_¾|yk?%„œumyÕü€ˆˆˆûï¿ÿÖ[o5šLááá ññÍKJL|â‰'êëë-��q±±îQšÑdºtéRJJJÜÕ)Á.)½{ÿýïo·ü¡¸¸¸—^zÉ›#èBlæíÿøøvoŽâG,úCæÔ×Ô[‘>6!ÎpÍåÇŒ{èù~·Øô‰ñnëGbCßéþyâ’ÚZ‹ÈE$$Dišwbk{M¸ó÷£ÔÕšLXlBŒò À·¡C\\ÜSO=µnÝ—#GŽ6lX‹­˲½z%;�΄„k2Õã)S¦8޾}ûz¬»Àq\Ÿ>i‚ ,\¸p˜ÛzÀ%%%ë×­ÑhÜã‰6 8pÑ¢E’$ ‚=pà@÷aŒã””«Õš’’ÒvÄ3}Ú´ŠÊÊèèèœ#\+!ºZÐÐ 㤤D„|2ÌÓn·ÆÄÄxl£å!&&Æ=ÓÐ":œÅãAºåÕôéÓafuœ!¶—ÁópkˆïÕÒ´bF•˜Õæi±ß;€r¦ ›á�7ËV]ÀÝ`"—¼ýö¿‡z÷ÝwwtÊv)Šòé§Ÿž>}úW�?“,Ë Ãþ²V«UUUŽãšÇ©Íµ½C ‡C–å ¨™ÇiµZ_÷«ÂìÐýÒÒÒ\S6º–ÓédYväÈ‘�Þò €»€Þtô#G挙㣓ëõú{î¹ÇG']‹eYºõ_ çAé `_„¹ `Ñ 5Ó?%„¬ °´»\J÷êhñºu{nÐ5h{5cì‡*¡Cƒ5 Aˆ¡—¼ ¸@B¼üÂç4Wèà‡*AŒa˜¯Êt{(I’ÇÊ]E’$Œ±¢(^^ ýs|жÇ�_3†� ÐŽ@®Ätë@wuïî²´L–eUU !-n:ß"è1ðk&j}鮡CƒU @ˆÁK²Ì²¬ûëE’$–eEÁ{:@‡EÀÓ&9Àk&˲´¨¾~9¨ÓAŒçy¸¡!†ÁXUUUU�Ngw—Å“Óé¤e£Wg/C‡6ö¸A„eYÚG°5“a:ø!Z…Ð!¸Á~ Äpçt:é6¹tÔ!Š¢,Ë®âyÿÑÃC‚0pGáy>0k&Ïó„ŽãAðC¨ ¡Cp®J Ä‚`³ÛéxIï÷m÷BˆÃá Cälv»p•÷g ·ƒ¾+!ðAE!Ðj¦«`þè€ taaapU¡„eYžãl6˲ªªÚl6Q»e2‘ªª¢(Úl6UUY–µÙl<Ç ‚Ð|×vùç^ø˲�†ÞâNͤ‰�FÃqœ—û7]?¢ô0Æ‘‘‘‹%`‡þÐQtö�Íf�çy׎çtÛ`º¢%Ö@ Cï2AÐétááá�+€F£é®–tZ3éòöãî­™´“BQºé£?3Ð:„ŒqDD„Ýn‡�v@Èà8c,Š¢(ŠÏs,K¯’þÉÓ6c,+ŠÓjÅk4š°°0�N×éæ�žD–eY–»=× :ÍU3E¡ hÍD¾_9ÔU-iàBÑét�ÆÏû3Cè"0Æz½^£Ñ8¸³¡�eY�NGÛZG7MŠc†îC¨Õj»¤g�ã8†adY¦� Fî5Óµ†#ò×þèêb¦4ÙÀó¼ÿ'CèRX–5 ƒ�Vh¸6��áÏ”EgF°,Ûåk¯1 CsËtu)È@)z£O{èýð¢´g„ÎíÆQn:„&Xh€ÀדV‹rÝŽ·'á¾jë!Ð  �àkmD -‡72ønáKÒüg õœt€ÑBÜ€¢£ ½ÎB€n¡€n†›}Ñò�A`€Ð€Ÿ�/[ �Ýþ�¡ÿóŒ~ú¢µp�x1?ø “ ý0 ë »‘f¹À tÐ-~Š®I(@v!àAè »4Ë0@Ü t n:èF0q"ø@耀Ð@7#ˆD ,`]‡�¢(ŠÃáEÑ?;ÇÐ0 #‚V«eY¶KN¨ªª¢(²,wÉÙ@OÆqÇqþß½B‡A±Ûív»½» @Ã#ŒY†QU•Bˆ?nK1Æcæê‹:‡Ã¡Óét:Æ×5–O–eY–ýó[ŸÂ«ªJAEQB¾þ³ÒºÇ²,˲ Ã0 #˲¢(Çñ<ïÓ—ö¡C( „X,¸‰!†6ÞcY–eUe†eYÚ¨ûôui€¢ª*ýLqGQÅn·Ë²„-ú IDATÞ¹B #2!²,‹¢ˆꮚ)Í„I’¤ªª ¾.€ „A�b6›iÌ @(á8ŽÞ ó<ß-YYz�–$ cÌó¼$I’$™ÍæÈÈÈN\£�N'$Bƒ¢(¢(v{ÍEcLÚ[­ÓéüS&ôššš n!†aÚT3 £×ëAðÿÕ]å ×놑$‰çyŒ±¢(MMM:Ƙ¶4>*'ð'Y–�NgàÔL§ÓI“„§Óé§øçe€�ˆ¢H3f„7ð<¯Õjý–ƒm ÆX«ÕÒ" ‚€:þ¹sõ…ƒ`Gó �V3EQ¤Ìo5 B‡àf³Ùº»t1žç�N'Çq´�‚ pçt:éx4ï?ztˆƒ/‹üDUÕ@®™t�ò[:1I’àV„Ì0ªª2 £Ñhº»,ž4 Ã0Š¢Ð®eI’¼y–ßf…_£=h[3éÐ:ŽÒׯÃ$ƒÜÊ€ÐÃ`,˲F£ ÌæÖ=ñ@»TÚ} L© tVm€×LI’8Ž£Ñ­O_²A fc‚ÐCa†ãô®†§§Ñ€—YH †EQ¿fºF<øúå tbp7B¦ëÛtw1ÚBïêèr@Þ˜7© Cè*�_3ý¶Ú„A Bb#„ºe¶›÷hñ¼àsè}|PÔLEQüPåú�ô(Áu�öòønŸÂ®mŒƒ¢fªªê‡*Ðo G¡¹Öokiñ ¢G�šéB@ ¢ö8ˆŠ @—ƒÐ¡:ÀSM!-vBŒF£,ËaaaƒÁËS™L&Bˆ^¯÷ÛFa@~ ßzë­ØØ˜™3oÌÈÈp�!žþùÚÚÚ[o½uÉ’%ÞŒC©©©yþùçM&Ó²eËæÍ›wýÅ#„¬ZõùÖ­ßfdd<÷Üsz½ž>.IÒŽ;.^,¹ë®åáááÈ»ÎJèp,Ëz³Z_'Ð5¼5 ü± £ü:\¸p¡¨¨(?_LJJÎÈÈðþ‰-6Õ®ÛXc,IÒ‘#G,‹ÇãC† éÝ»·7¯~îܹ¯¾úÊf³Ùíö‡~¤¬¬ìïÿ»Ýnoã) Ã<öØc'NôæüÅ›µKÛ=¦«@=~üÄG}8{öì ¸·îÞœ¿Ý±Ð‡ã�wÞ©««{æ™gââ⮿´ø Q²>èhV•i缪¢`–…X ÿ„’$íÙ³[Ť¤¤I“&aŒóóó/_¾LJf„PIIñöíÛ郂 Œ5ŠòÒK/•––¶væU«V­ZµÊãA†a–/_~ÓM79ŽM›6]¼xÑã§?ü°—¡ÃàÁƒ—.]úÙgŸ=z쫯ÖåäŒôú—„�¢¢Â;v8Žˆˆˆ1cÆÌž=;22Òý°ÆÆÆ-[¶9rÄf³ÅÇÇÏš5k„ îMxMMÍŽ;Nœ8a6›µZmvvö¼¹óz§üô&———¯]»Öápx 33sáÂ…k´BÎ�+à8nàÀA4�$iïÞ}»w絛¯7 'N¼é¦›<úª!yy§Ø_\\lµZ“’’¦L¹aòäIÍóµµu ˆŠŠr=XUU½gÏî’’’¡C‡Î�;×y\¾\¾víN§³Å7°wïÞwÜq‡V«mómà:©ÖKGwïØ}àèùÊ&E—9zꜹ3szé<ÛqÕQ[˜»won©5jÂ�÷LHh?ÆPÌ…û6nøö@~µ($ šxÓÂ[nÈŒ¼6:'¶²ƒ›×oÝsê²�‰Î7û–…3Çú$‚†?B‡¢¢¢Ó§Ï „¦L™K9xð‡]»v{¬xuâÄÉ'NÒ¯£¢¢222<°Îa&11122RQ”K—.Ñ}Í=2„º=!Än·ÓMÐ1Æã©S§–—_Þ¶í»Â¢éÓg<÷Üs­-S]]ýù矷�“(²,oݺuÛ¶mt�U�Ng±XvìØQTTôÈ#�ÄÄÄÐÃßÿýÂÂBºe\uuõªU«L&ÓܹsY–%„?~|ÕªU���,Ë »Ý~ôèÑ¢¢¢|pÀ€ô$‹åâÅ‹ÍC‡ÿÄMMMEEEqqq½z%Ór~õÕW{öìQUU§ÓY­ÖmÛ¶UVVÞÿý®èAQ”-[¶|ûí·²,³,Ë0LEEÅ_¬)))^¾|¹Ç¹EEEv»}Р,²œù¤´´tçÎ�‹/¦û·îÚµëÂ… )))=ôPBBÂñãÇ?ûì³�;wfeeõïßßl6oÚ´Éf³M›6mÞ¼yF£qÍš5§N�Ú°aÃ/ùKú¦9Y–“’’<îÑ Có7íòåòººº &„……!„ΜÉÿá‡ôzý½÷Þ7dÈàË—Ë?øà?§OŸ>xðÇ3¦Ó§?~â»ï¾Óét·ÞºpôèQ<ÏŸ:•·iÓÆ#r<âY– Î WÇYcc£ÕjÕëõ´�…IIéýÄOzÄ‹•••_}µ!4gÎM�r’$™Ífoz êêê"##}4Œ¦Ë)•֬ͭãúÎyø�[Fõ6°ÄQ}ü«wÞÙ~~ýg;†ÿa~Ú•_C2WU6±11ÎFS“w{êZÏ|³bg…=þÁ_ß71Y«~üôÕ~عbCÎß–¦×b±dû'.ˆú¡Ë~ýè�ézÅxòË×ßÚþã§kG üŸ(è¼ðFHÖLŸ‡ÈË;ÍqÜܹseYþæ›oª««ÇŒýÆoÐ7Èd2ýõ¯­­­½é¦›š“LMMµZ­ͼ(ŠtÅMAèèE–e£¢¢ºd“EQÖ¬Y}ôè±Q£F>ùäS¡ÊÊÊæ)Œ±Á`pO}»³Z­Ÿþyqq1BhÍš5Ï>û¬+<êvýûg._~ÏóC† ¥�¤§§OŸ>}Íš5ùùùsæÌ 7›ÍG�åyþ¶ÛnKLLDåääÿý÷?þøcFFFTTÔý÷ßñâÅ &з=&&fîܹ………åååUUU}ûöE9�NBHdddFFFÛm-í­PU5++c,Ëò�?”$iöìÙC† Ƨ¦¦,XpËŠ>|hܸ±ƒÁf³íØñ½ªªóç/˜2e2=ÏÈ‘9Æ m^ŒFSYYYïÞ½ãã¯|’'Ož4yò$BÈŠ+:äq¼ }û¦»?"ŠâÎ�;œNçœ9s²³³:ñ΃.§(Ê¿þõ¯òòòßþö· mYSSóòË/÷îÝû™gž ŠA²lòŒGždNòcnÈ Ç!„µ‰#oY0zÏÛ?^úáDÅÜ´> Bá¸É¿|e2BÈzôýgÞúÁ‹Mu‰éÄ÷ûŒD?nÙ�“’µ!mÒ„ew�>ùïƒ{wœ˜—=1#dËßµý²Êg/¹{Vº�Aˆ�±hù�Ç^Ûvì»ÃUcf'Ãìþö„jÍômè�››ûå—_Š¢S\|a÷îÝÕÕÕ:�núôÞV[·n]¿~}‹ûy|ó͆o¾ÙàþHDDÄï~÷»>}ú´qÂää^�?þ¸G°k×ΣG�%''/^¼X§Ó¥§§{<«¶¶öoû[CCƒÇã ÃÌœ9ó¾ûîk÷ ´½w1ÆÍGoÄÆÆ2 c·Û�NgxxøåË—ëëëRSS]ÏÊÊÊÚ³gOqqqSSSxxxjjªë§Txx8íþhll¤�455©ªª×ëÛ�êÇùóçcbbRSSB ¥¥¥�Æ5î!Ô·ozddduuuuuM¿~}/^,­¨¨HHHÈÉá~ª_«¤¤¤±±qêÔiÙïåå�ÎËËëÕ«×´iÓÿÞC°,Û§OŸ¼¼¼—_~¹�k4½:�Ɖ'Ïߎ‰Êž1õÚ‡tqÉ1Uë$ÔÇÛN3¹¡øø™ú˜Á9QB¤ñü‰³áGŒ~õ�Àar†ð?>s²¨i˜pì,É;a%ìÀ‘Ùq® A›1|DØwß—?[wc²ƒ)z¸P­™¾ JKKÍf3BÈh4~÷Ýv„Ã03fÌèÝ»÷‡~@s 4™ƒ:|øpEE9}bÿþ™îCÕ®S~þQmɆ RRR"IÒÀ�B„�3gN#„ôzý°aÃhb yî!IJlll¬«M2›Ímn0 K—.¥Ë–. œ”CkDQ$„pGǪª*Y–cccÝ;kè·‹Åb±xd}(EQèTÚ<BèX­Vk4�Fcttt\\\‹ý;UUÕÕÕÕC† ¡Ã ŒF“ÍfÓëõ11Ñ®côz}tt´Édª©©éׯoYY™ÓéLNN¦mPåìÙ|�FÓéž#»Ý¾{÷.EQn¸aj—ŒÅ]eÉ’%¡M›6µv�v]�çÏŸO^Dt:‚Nëõ€åÒwÿ|ñ¿6ãgùýM½Yµær‰Dؤ”İŸ®³Ø�˜Ïª,¹\«Ž ÇÆò‹6‚5©½bÜB>>%…CgK/ÕH(Æú´/$k¦oC‡áÇïÞ½;22’eÙââbBHFFƼyó¬VëÑ£Ç<îàËËËËËË[;Uffæ³Ï>KÛ†êêê^xÁd2-]ºÔµ®Ã�?þøÎ;ï4¢ªª?üpð‡Òo†QUuóæÍk×®���ýÍo~“œœìýo¤Óéžxâ‰~ýú!„!ï½÷îþýÚ~JVVÖ /¼àýKt#BHII‰¢(‰‰‰z½žR__�òÈhµZ�FCC‡窔——[­ÖˆˆW÷ Ž9òã�?ÒÅÁ"##çÍ›7iÒ$�¢°ð¼ÓéÌÊʦ�[,QãââÜÓT<ÏëõzUUM&#!¤²²!”��páBñŽß ‚0dÈ�Y³fyô/666–””$$$$%%vî-**ºPVV–””4|ø°Î�´�\Õ¹§/^¼˜²yóæ—_~ù¹çžs¿F×ÔÔ¼òÊ+F£qÞ¼yô°ë/çõœáú¨ÕÅg- ƒú%{:È–z£BQêM� B¬½¡¶QELl”Áý "cTn®mp ¤i¨«RÆ^sHD4ƒˆTgl$H7È]j¦߆o¼ñ†,Ëï¼ó6!$66ö¾ûˆPUu„ñ-ŽZ§úõkaí–ei•� “ \_·x*†aRSScccdY),,t:� ÃŒ1bûöíµµµëÖ}ùðÃ�thXŠÅb1�èê²EÞ?1ð�Æ“'O2 3lØ0A\¿ Çûƒ1æ8NQ:-Ń$I‡–eyÀ€®Á°c†a"""²³³A(..¾téÒÚµkEQœ9s¦ëo'ŠbAAAxx8!�¢à8Î=  ?•e™NÜ8tèÐ÷ßO»EÌfóž={Ξ=û裿 Ó4¨K—.�ÆáÇwnRBÈÉ“'œNgVVVDDD'Î|�Þ´mÞ¼ù•W^q]£Ý¯ÎÁrW×Gá�]¥ 6Œ7(Üë¦[3hþ#·Ë{«§Þ4@@ˆHN‡Š<.~œ Á‡C$ˆu:d‚°Fà<0BÄæ B=$t¸~!V3}:Ð&aÍšÕÇ�ŸÐh4wÞygDDÄéÓ§yž¿ûî{:tªÚÚÚÕ«WÑöÃápX­V„ÐÑ£GkkkèÕÕ5­E[³fÍrŸa�JII™7oÞÊ•+>’�=xúôé^£©©éÕW_u$Àwp÷ž¢(»wï®­­íÕ«×ðáÃÛ8²íޤS§N�>}Ú`0L™2…þ½0Æ‹/ÎÉÉIMM¥m60»cÇŽ]»v >Ü5#¦¾¾þòåËééé®î‰ÿ¦®÷œ¢ªª$I„³Ù<~üø¹sçÆÅÅ�Æ+Vœ?~Û¶oï¾ûngBòóÏ0 3hPVçúÂ,Kaa!Ïó�>ð�k4B(H¯Î­Ëv~¹½†p}æÌv›CÙ>6zðÜû»¾½òÑjvZ± Ate„™çAô{Ø:´ƒB©fú6thllüòËÿîܹKUUEQÞ{ï=QB'NÈÏÏß¹sg‹Ïá�ÈÎÎv°¡¡aÇÏã :W¶n¸áäÉ'OžÚ°añà †aôz½«Ù w½�+@ 9uêä¾}ûxž¿ùæ›]½øt°‚Ç飯*]>¡y¶¦ªªjýúõŠ¢Lš4‰vëPǹ/à8nÊ”)¹¹¹&“©¬¬Ì:ÐÕœ²e¹Î¬Ójiܙұ!�FC‹�13f̲eËècbbf챤¤¤°°Ðl6ÇÆÆ"„l6[qqqlllïÞ½:÷UUU744„‡‡'''µ4è>®k4½@#„‚ñêÜ"[áæ�¿.’˜^s—ÍLïäH_„B¼F‡"¢ÇL‘D‚£Õ ñ‚–ÅH¥–ÁZ-ásG…LÍômèpäÈ‘�;wÑ«< hÖ:22²©©Ñd2µ8oB£Ñ¸gÂûöí{à S\wŸ¥¥eeee®'jµÚaƺòÏz½¾Ý±r®'.\x[QÑ…úúúãÇ�{Ù?¤×ëûÛßvh¬CP¸x±díÚÿŠ¢8uêTWÊcL{l6›¢(®á¢(:�Nžç=¶+3›Í+W®¬­­ÍÌÌœ5kVÛ÷åƒ!<<Üd2™L&úˆ,ËgΜÑét™™™î‡ñ<ït:Ý«„,Ë6›�a˜ÈÈ(–eéPM�Nç> #..N«Õ:�N‹¥‘†•ÕÕÕ£G�ît_Cyy¹ÓéLIIñrŸ6Ð�\×h´Wçæ¤šƒŸ½»±Dæ3n{à–�×5æë"£ Y,6‚b]Ub57¨ˆ �‰Ð ÄDÄÄ3¨Ìd±ªn»,[£YE˜�� ƒÐ¡B£fú6tÈÊÊ¢mÏ€™éé}ÓÓÓÓÒÒ"""!kÖ¬F¥¥¥Ýzë­®[ÌŠŠŠõë×{´â£F�5jBˆrøðáãÇO¸tuÈ¥K—µ1ܽ¬¬477×ápxŒ®èß¿ÿm·Ý–��0|øpZžŽ …ÏNyùå�?^a2™†º`Á÷8!!�ã8£Ñh·Û]“)ŒF£Ó錊ŠrÏ­VëÊ•+‹ŠŠî¼óÎg^¸£© †a\}³Ù|éÒ¥ää䏸ŸÆ6ÆÄÄèõz›Íf1[\ \:³Ù,B\\Ƹwï†aêëëeYv��ã8†adY¦Õ‰rþü9Y–ér�x—!tPTTT§'vr]”ƒôêìA1�Xóæ‡?Ö£˜ñ÷?:·ßõ®DÆÆ§ôáÐÉšŠZJuE!ŽºÊjq}zDZáØ^}4¸Ô^^m&]á…R_U.#6-¦WtVÔL߆ ÿó?ÿﱃQSS“ª„�Á`1b„+gPXX¸qãÆ»dž ¶nÝ*IRbb¢ÙlE155µ¦¦æøñ/¼ðÂ}÷Ý—•ÕB´ªªß}·�N E×MÀßtÓMÈ»ý0)›Íöç?ÿÙõ­7O¬®®Þ°aBè–[n¡«*”Ë—/ýç?TWWgdd,[¶ÌcúhjjjDDD}}}MM�kïÐ .8�Î>}ú¸<���Ÿ~úi^^^ttô½÷Þë1iEŪªªÔÔT÷¿N]]�ÉdâyÞupii©Éd?~¼ûêÎQÑQÉÉÉ%%%é}Ó郗.]¦Ý´ã ÿþz½¾´´´¦¦ÖÕQWWçp8ÂÂÂ"##BN§³   :::=½­5?Ú Ë22\B^ð^š=ÈõÇWÿó��åŠaÈÏž¸wB|g¯Ü? lÄ‘ý‡öãNœ?s¦Ø>rÈ•K°£äÌ‘p‡ö�Ä!mßÁƒ…}¹…yE–)±‘ô‰òå‚SfÂ&�Ÿ‚Î öšéÛ¿=˲ ²,ïÚµkÅŠ�ÿüç??ôÐCï¼óŽ$y·T*BТ俿þå/Ù°aƒ$I99#{ì1š1ž4iÒC=vùòåW_}õ½÷Þ­ªªòx:Ã0aaa±n®ç–‘Úpi±ÃÅ�Ýn_±bÅž={öìÙóÉ'Ÿ4ßÄ¡{]¸PôÞ{ïWWW÷íÛ÷Þ{ï ³_E;˜¢££‡j·Û7mÚD‡¦–––îÝ»W£ÑŒ=šŽ‚4�|ðA^^^TTÔ=÷Ü“ššê:‰ÃáPUuûöío¼ñƦM›\k`ÔÖÖ®[·În·§§§Óå¤!ùùùÇ 8Ð=Âa옱 Ã|¿ãûòËå!³Ù¼uëI’FŒA£™ää¤!C†455íÚµ“Ûn·ïÙ³Ûét8�.ôY[[WYY™ššÚéÅDQ¤ï@à/ÎBŒ³ò‡¯½½ó’¬Ï^üä#3{³ÎŸHŠ·÷=ö’mÿü¿xæŸß]¤W!&aä´zdÞ³vcAA!ëùÍkw7}ÎÔœxºDeä�)“¢±ãè—뎛T„r^Ú±vk¹Ê÷Ÿ1&ö°èÁ|›uؽ{÷¦M›jjj< v»�v][,–#Gޏ’ÌUUUî£áDZcǶoß^XX¨ªªF£™7oÞ­·ÞJoþBãñãÇ'%%}ðÁ/^Ü»wßáÃGÆ�7cÆL÷­½—.]:cÆŒ¶‹Únþ 99ù­·Þj+à«Z|–$I ôYf³Y’¤ÀÙòàâÅ’÷Þ{ßl6cŒKKKÿô§?¹¿  øå/©ÕjgΜYPPpöìÙ¿üå/111ååå’$�?>++ !ÔØØøÁÐE;,Ë[o½åþŒŒŒ|æ™gè<ÏÍ›7ïØ±#))‰RUUåt:£££-ZDsN‹¥¸¸8!!¡ybføˆáÇŽ;uêÔ«¯½šœœ\WW×ÔÔÔ§OŸÉ“'Ó·�㸛ož[ZZºÿþ¤¤¤ŠŠŠÚÚÚÄÄÄÙ³çÐø¦°°Ðn·ggöXbòòåòþó®U/BÊU§Ó-_¾|ݺuG�-))aYvàÀ�Ë–Ýéú€JLLxä‘G×®ý¢   ªªŠeÙAƒÝqÇÏèÒO’$Ñ-¯Ü'}t”$I’$Ñ)6�> E*JÌôŽ…(^'k›Ó¤ µÿGsTNvï«yW¾×ôGžÅ«W|ùCYÞÑËëÓ&/¹éô^n×@&vì½Ï*á¯ÙQ”´aMÒèÛï[>纇Z€à†7nÜè»E³‹‹‹wíÚ™ššÖ¿ÿÔÔTW«L‡InÞ¼…çy:ú�’$©¾¾žçù§žzjøðáv»ýý÷ß+/¯˜;wî¤I“\O¯®®~þùçM&Ó²eË\«I"„._¾¼q㆓'O=ðÀcÆŒi·x‡zûí·]­VûóŸÿ|òä+û'ɲüæ›ÿtmÕÆæ ÕÕÕ/¾øbmm-B(**êÙgŸõh¢hŠ¥Ë÷C£K=ú!¤¦¦¦©©)..®Ó9»Ý^__OW«tϾB¾þúë]»v=üðÃC‡míéF£Ñd4…‡‡Ç'Ä·Vcëëë-–Ƹ¸X÷(­ººæŸÿüGrrò£�> #9øX¬V«ªªǹ_¾ZÓöZõþ¤Xk«múÄxƒÇ �êl¨­µˆ\DBB”¦åNl"6ÖÕšLXlBŒ¾æ趺AQ39ŽÓjµ¾¾ÃñmÖ¡_¿~-ÞçaŒ“œ––zûíw¸®æ•••ß|³^UUÚ8étºÇû%Ã0÷ú‚ ddô³XÝï;B)))¿øÅc6›Í˵¸hÑ"I’AˆŽŽ8p {¶cœ’’bµÚRRRÚ­bbb¦M›VYY=bÄ×Jˆ.A±‰jÛ0Ɖ̰®X IDAT‰‰×9ÌS§Ó¥¤¤4Ün·ÆÄÄxl£å!&&Æã/ÞÎâñ Ýòjúôé7€žŒ5Ä÷j©íc4Q‰)-ïý{Âã{PÎt3ßf€Où3ëàS%%%ÿþ÷¿‡z÷Ýw·Ø%t=EùôÓOOŸ>ý«_=Þ·ozמt-È:€ÀY0»t¿†††´´4×”�®åt:Y–9rd§·¼àÎçÃ$hWNNNNNŽ�N®×ëï¹§c¦€î²,Ýú/�ó tP°/Â\°h… ŠšéŸBÖXÚ].¥{u´xݺ=7è´=Šš‰1öC•ƒÐ!ˆÁš† ÄÐk_P\  !^~ás‚+tðC•ƒ‹ Æ0L€We:„²¬$ImÌ…îv’$aŒEñòퟻ@àS´=üšÉ0 tX€vr% èXº5Zw—¥e²,«ªJC/']èˆ@ÿˆ�_3QëKv-‚¬RB ÆX’$šxèî²´ŒOQŒ±—¡tX„Œ1m’¼f²,K‹êë—ƒ:Äxž‡bh7œªªN§³»ËâÉétҲѫ³—¡C{Ü€ ²,­œ[3éò‰þë¡Cpƒý@ˆá8Îétr'Ë2Ý5@ˆ¢(˲«xÞô0Æ� ÇBxžÌšÉóÆ�âp8è9»Ý.\åý𝦂‘ Š¢‚h5ÓU0ÿ t@:„€°°0¸*�PBûl6˲ªªÚl6Q»e2‘ªª¢(Úl6UUY–¥� Í÷wm—î�O±,«Ñhè-~àÔLšÑh4ÇÑ}§ý†è=Œqdd¤Åb Ø¡¿t�=d³ÙAàyÞµã9�{æë6˜®hI‡5ÐÂлLAt:]xxxç  Ñhº«¥]…ÖLº¼=ÕÛ�5“vR(Š¢Ñh4�?3Ð:„ŒqDD„Ýn‡�v@Èà8c,Š¢(Š<DZG¯’þÉÓ6c¬(²ÕêÄk4š°°0�N×éæ�žD–eY–»=× :ÍU3E¡ hÍD¾_9ÔU-iàBÑét�ÆÏû3Cè"0Æz½^£Ñ8¸³¡�eY�NGÛZÉáè–20 C÷!Ôjµ]Ò3ÈqÃ0²,ÓÆ#÷šéZÃùkÿtu1SšlàyÞÿ€!t),Ë ƒÁ@+4\›@ÈðgÊ�¢3#X–íòµ×†¡¹eººd ‚½Ñ§=ô¿~xQÚ3BgŠvã(7B,4 @à öÕ¢0BÍ¢žf÷Ý064AÀ+ÍÃ÷G yÒswÌ pAÊ!DAÖ@;:@ܺ ëÀ #tAè  àæ‰ˆBtX¸NÐ9ѳ@ÖÀõh3n€ÄC(‚¬€®35{ ´Å«ÞÜæ· ´@‡€VA šƒ¬€@ÐZYž:7×@YW\W¦�@¦¢§€¬:Be-,òØõôXô(ÐašEVÕétʲ¬ªjw€ Ã0 Çq�†e– îë¤7MzÅäjŸô[„¸àþHcY–ìv‡ÓéD1 Ã0 ˲Ã'oB!²,‹¢ˆÒh4:�6؈6øàê£B\È~z&›Íf·Û !<ÏsÇ0Ð!@穪*˲ÓéEQ§Óétºî.Q°€¸!ÄAè"!6›Íáp°,«Ñh ÍÀõcFžç�N§ÍfSUU¯×‡Ø‡«ëÈ8ôpW"‡Ãáày^«Õ†Ø¥ €î…1Öjµ<ÏÓOYw§+Á•t„¡@E›ÍÆqœ Ý]B“ ÇÙl6:€ž B‡ §ªªÍfcF£ÑtwYe�†a›ÍFH(LDôeÊ!ÞÐëôDQ”eY£Ñ„Æå €@ÆqœÓét80d²=0ä!”AÖ!è9:½» @裗èägÐ*¸‹ u:7E‘eY†¸¿á8N–eE‘»» �� «KLB‚ tnt¥HX¿¿¡7EQº» †¯ý@§A“ÜdYA:àGWC‡ [ß½bH7„.hr‚½õ�…ðúq Ƭ]úÈøÁAïH‚¬„¸nj»!dY:èrØãÿA(ñGè@ill´X,Ð;ºT‹`Q”`�ø‚?Æ:444üõ¯mhhxê©§†Ž:yòä¥K—èÄÂæ"""&Nœ(B]]]EEE‹íCxx8ÏóõõõÍ„1îÛ·oDDD×þ EÄxf÷)Gï�ú&‡óô!Õ^[tâ¤9mê˜Þ|+Ïrž[÷ÚºÚ¬›ß–ßõÏG´²bi8»eíºÝ5ƒ~æ¶L}óŸ[óÖüéýsiÓn_¾hD,¤Ö@Oçß•!Ïúºa˜$!$77w×®]­…iii#GŽáСC«W¯nñ°Aƒ%''ïÙ³§ùO9Ž{òÉ'G�ÕõEžÄâÝŸ¯ÜP©ÿ‹‰Bˆ˜O®}óý\4:¬ÿcã£[¼ˆØÎÜ{¡ˆMÂ:ÛªãÈ”¾ö¯n|ouÚ~>Êãe¤Ëû6ì5Z…´¤ÞÑ7€P+3%}ÞÈC¢ºs†Evvö¤I“Ü)**Ú³g�ëÛèè茌 EQÊËËé¾·‹%))É`0¤¦¦ÒlDrrrZZ=^–åüü|I’ º¶I²”�þaÏù5Ê€ù�ÌxͦY¶³ßügKQ³uòØ”÷Ý‘åñÆKÞŽ�• “G>ïªÉ¤ñâÑÓv‚c¤s›V_y�Ëœ}÷Ô4¶�óƒÒÐÐpðàÁèè蜜­VÛöÁF£ñ«¯¾š:ujff¦Šú ni¾ ¶mÛ¶råJWŸÂ«¯¾Ê0ÌâÅ‹é·ååååååm<Ýn·_¼xÑb±8„P}}=!äÒ¥Kaaa‘‘‘4 9zôèÑ£GÝŸÕü&ãüùó+W®D-_¾|À€]ôË#b­+«“õÑ1‚­ÁboaÐ*qØ,*ÂSüsú¸·´B¤gÊÁQ¸uå¶ •Ï\°pLŒÇÏôƒæß=ëäß¿Ý÷Éêì´‡ÆÅºÎd¿øíÇ«NXõ#îzòöÁn V¬ønÝþ&WªÆ³‚äâ}ë¿,º2ZÇ ›=}€ÁQ›ÿÃþB� †ÔŸûqÿ¹f¿‰ñÜ¡ŸÕj&Ü…„=HAAÁÞ½{iîaìØ±mDuuu+W®ÌÏÏ·Z­O<ñDY`Í·¿d�x {´îì°˜2eÊí·ßîþÈáÇi.�ª¬¬üÇ?þÑÔÔD¿­©©A}ýõ×_ýõøñ㣣£Býúõ:t(=@ÅØl6÷sZ­ÖÏ?ÿ¼¸¸!´fÍšgŸ}V¯oa\]ÏÀ \üâë‹RË6ýé/_^n~±[UÄÄöJOMéÝFêV5�XûÑ–Ë*ß÷Ö;§§´P‹ Y îžuêïßúèÿ’bž¾5Ó€B¤áĦ�CÎÏïœ1 Á½!W/?¸eSé5ÁLÅÑmW¿æÇO�> <á†'ß«tbæô­ Ù¡ièСuuu»víÚ¼y3Bh̘1-n“]SS³zõêüüüÔÔÔÛo¿½‡Ä \'߆ãÇ�ÏÈÈ0›ÍŸ|òIccãí·ß>`À€˜˜˜õë×#„Ž;vþüy÷ã[ÜÊÖ`00 #Š¢F£q8F£ÑõS­VM¿¶Ûí,ÛÖ�%Ìm�lo²ÄD†ëÚº‚ÚŠ7¿ûî®JU°èÞ9}5-dÈZøÈâ’—þ{nÃ[ÿ ÿÍ/f¦hŽ9gÎ�ŠÜ‹[þùÇ­n‡òÃîXŽ6Œ½ó±é)ŒZ¹ï?+°f-úåüL 1Ÿ\ûŸo¯$§XMX¸Rqö|µ³yøÀÇgN ÃNs�ÉŽtÑ ‘$n~ûë|Íè¥�ÎH….ì&,,lúôé„�Ý»woÙ²c}ú,_¾¼wïÞÝZØPäß)¡ÀŸº¡Ã¢©©iÁ‚óçÏoãI’Ü3Š¢°,ë>ø™a˜ô>}4�F£III)((à8ŽöhrŸ�à~¶AYY/¼ðB—ÿ"�€\Õá§¹=ý§ÇUGS£Š�rø½çö;�!„ÙÈþÓ–,_4)M�BÒ¥ïÞþ׿ â8Ö–·ê¯O­jñü?áúNž1ìô®¼sö�›Øt,ƒùÌ…Ï¿±PÎ_ùøk» sžzeQ‹�ziËúf¿Î5¿ÚÕ/é¹�óž7àJïµxaÛ{ßœ½rÄ•ƒ=ÜíÉ{‡@h0 4÷°wïÞ-[¶ „F�­Õj+++¿þúë³gϦ§§/[¶Œæ¼¯%�ùÐ WkîÖ�\ù_K¯ÑD(ð_è ËòæÍ›?ûì3‹Åb³ÙZ[Ô�ŠŠŠúãÿH¿–$©®®.""B÷câãã†Ñëõ3g̸xñ¢F£Y²dI\\œ‡ÐGŽÇ‡÷7>;I'›.;p¼pÇG¯T;~ÿø�½Ä§ÞøÈ#ÆUy}Œ¨ùró:CmªºXÕD I}“Ýj Öš’J Ž4÷‘Ùé»+úß8º ×fbcÒ³‡5Ðoj.tG€ÖÐÜ!dß¾}[¶l!„$%%mß¾�Æ ?ûÙÏRRRzÈœÌæ�6ä@çø6t¨¬¬<~üx^^žÉdRåôéÓ!A ƒëQéôk÷ALaaa®sqq±ªª·Ýv!¤¾¾~ãÆ�ªª*ŠrüÄ »ÝŽ1þzýz»Ýîp8Þ|óMžçBƽuáBñÔaLâ´Çÿšv‰ôΈ¿2‚a￸â虯×ýØø(ŒøøQw=9 !„~3b!B!bÜÿæo?Ì ›úóßÝžùS…Oúä뻈^+èR'ßœzåÁK7*WRk %D¬gv|¥Çëø!UrÚívVuH*BHq:ìvDΨˆ‡ß{ö¸kX‹*µÚgBaaa3gÎÄïÝ»wÓ¦M‚ ˜L¦¾}û.Y²$55µ‡Ä ­ñHžtýEÓ3<�‘¡À·¡ÃÞ½{iK�b&##cܸqcÇŽ¥S®SSS'Nœ¸nݺ͛7>üÉ'Ÿô¦@§Eˆ¢˜’’2iÒ$UUkkk/^¼h2™*++/\¸ ªjSS“k Æ… è Aî¡ó„¸~îß&M˜3eãñ-õy'ŠšÆ�oá/U_º(#.#õš9H�aF§uF©ÔçoÛ¼ß5V)>¸¥!Ä& Ɉ˜·¿þøv×±ß}æàÕ¯=§G0±ÇM¼ò¨R{fß©šÿ¦ '¡ÑBhïÞ½ÕÕÕYYY·Ýv[O‹¼i´!¼áÛÐ!###,,,--­¤¤D–åE‹Ñ=,:´mÛ¶!C†Œ?ži±XNœ8ACA233iþ!4hР‡zˆF=ôPnnî¿þõ¯²²2†aÆ�7göìÊÊÊ•ŸÎóüÏï¿?*:c)‡®ÂÅ&÷fQ�R[ßHP ¡ƒ\Qx¦‰p²û]óC"9ìaƒAë~iÖ ¸õ�›C’‹6¾ôÉý >5+�E½wö ™œ¯ÇÄQWZÞ ’Ò“Â$5\.«óLêj‡ÅÉ�BèÚc0fΜI©®®ž9sfZZZÛ²BU7-Ä,¢7߆#FŒxë­·šššèöWôAB] *>>^£¹rKZXXøÆoЯÿô§?E_�r™ŸŸÿôÓO{œ999cœ��PQQQSSCQUµ²²²©©‰eÙ!WWz×�È’H ßÒGÝY|ø‡J•Ï7ôÚEŸ‰ÃÖ¤"&2ìšižŒ>®·!„dK8ƒ0™˜’’Â"¤’S¡ˆI÷ýîöLV)Yÿ‡ç¿iñ³g¡#õûþñ»� <^U.ýqË7—¯Œ}‘+Kš/u @sƒáÆo”e9,,¬gÆ T°Žð÷¡C‹«Ç[,Úa4] 9DGG÷ë×�&£¢¢ÜŸÈ²¬+�RUU–å¾}ûfggôÑGîÃ-¿X»!¤ÕjŸyú騨X×ãÕÕÕ6l@ÝrË-‰‰‰]û;†b-/³'ô‰sï M¥ÄÄöíí¹ž$BHªØ÷ÍÎ5eæÈØkJ¬£Š˜¨pƒW÷‰ÓŸ}c2áõÍ®æ8vÊÓïMFèÚ4’R‘»e}®ûq=(í ®‡û@+Ð"H€vuÃäÌÂÂÂêêjUUÏž=›››KÛþ~ýú5ë@ 6ì©§žrEGssßü׿B©©©7ß|³ªªf³977—a˜ñãÇët:žãbÝÆ:Øíö+Väåå!„L&ÓO<Ñî‚ö=”jÌýüõ÷ϧßvÿ²ÙñZŒ"¶Kû¿ø2׎¸þ3'ôõp Zò×ÿgíYÑ0â®ùÃ<»2œfc“Š…˜(}[W!Bµgoß|*á®ÇoLn¥ùo¡óIûè+Œ¼•8N}òë_�5±ÙÙ8F×>ð‡6›í»ï¾“$)!!¡±±ñ£�>Šˆˆhû).\xýõ×]͇Åb¡ÑFÿþýé^5EEE§N�Òh4‹-j>@R’¤††ú³Ù,IR� ļOž|c·ã§”ÿzìBñCîñ™‰˜ �âŒÇÿûúÉÍ ™©QØ|©¨¸ºIA×Ý;ãÚå¦UkÙ�/Þûl¥špÃÏï™Ôl‡J¹ºì‚„¸Œ^q-W1ItD,ÞýŸ­Æ•M¼¹QBÉ­¬KÙÌr¼p5šT¸ŸrLÚŒ_>;Ãëó|¯å@²AÌ·¡CyyùÆ�­V«ÙlÆBè2,aaa�=öXYiéªÕ«éÎ………ÿøÇ?\YŒqÖ Aý33B‹åÔ©Sg.**zå•WdYF9»Ý.Šâ[o½E“‚ ,Y²¤_¿~¡ˆˆˆóç¯øä„ÐüyóÂÃÃ}ú+1.6gÙoÿ6lï·ßî8p¦ðd5B3ú^£ç,^rSN¢kM ¹±üì‘Ý[6í:gRùÔé¿x|iNƒBöÒCûÏ[y� pŒ\yhW�ÊÄf¤F·tq°—íÛy\D„˜Œr¿îZ4wrv‚÷qÃDnª¯³ª,#ší!Wj‚X«Š+ f�XÞ "Ä2p}€.äÛÐ!""âÒ¥K%%%¡^½z5558p!4{Ö¬ÌÌ̤¤¤¬^³æÂ… ‹åøñã?‹ã&ŒO3 ýû÷_xë­®¨¢°°pý7ߨl¶‚‚Qüi>¿¢(………ôk­Vks[âzâ¤IcÆŽE¹�™è�„¡÷þßÇ÷¶}HÜà—žyG“Éd¶J|dB\„pMBA­?¾ú�w 9hî]wÍÝÛ5 Rï[ù£kÕg1|þ¤ô–j˜³:/÷¼��>÷ŽE³F¦…un¸Æ�Ç?úÓ*º‘&ï×;†–³ GÞm[ÃDg÷k–ÐyxãÆ�'NôÑTFº‚[eeettôðáË‹‹ÏæçÏš=Û}iÈššš’âb‹Åb·Ûéò®‚ L˜8ÑétnÙ²%1!aÎM7¹†C××מ?Ïó<Ïó­­‹1îÛ¯_OH0466:¿Žü"�ùßí¨é=~lv’žñøIÙ‰3—šDI!¬“Ò@Zd+±šX~2OÍ™Úâ@µúÐÚÍyŽôwÎè'xþ�˜ÏíÙÞ–�sã˜ÞtfǾ vV—–=lPâÕ(F¼|h[n¥Ê úÈ„¾ƒ‡õ�mv®‡ÕjÕjµ!|…¹fžu{tìt×w& |:_ë†Ð€/äCtµIocgÚ ß ºdrx"í-ÿ‹Côd:7Ú�¼›øtèÇ­'¯(Õaí„!’ AB‡àF¯_moC èBôãÆö¤Í/ZÓ·,4%¨ý¡Bü>n�ÔBîâ†`Õ «I‚.IJ,˲’$µ¸' ËI’Ä0 Ÿ8ЃAÖ!¸±,ËqÝ×£»Ë@è“eYUUžça¬C']“{ nÿ@0�Ð!¸aŒyžç8N’¤î. ¡�føxŽƒ íTW·ùF‚Çq<Ï«ªêÚ†à N§“¦¸ž½.mh'B ­ü�B‡ G³Z­V–e÷•¹]HEY–µZ- Ö»»8t'B�  Ãh4I’,ó@"„8I’4 ˲î‹èƒë©„ ¡C(`Y–^Ôt:�ªª6›ME˜BÀuRUUE›Í¦ªªN§£q �ìb=!˜_"hUE½^/˲Óé¤SȆÁÃ�.¼G!„¨ªJão�Fñ,ÂXèªð K<BÏó ȢȲ¬Á` 36E�ôÅ0 Mæ1„È7àB‡�Bû,$I¢Ë<@§,׉aé´Û¢�܃W?€Ð!ñ<Ïó- ÐãØíÝ]‚ƒuÐ�é 'II]^ ‡ö,~‡C’”dÿòK_@¨êäØÇVŸÜc)Ù-[„^èîRtŒÀàC×ÕÈ·:ç&ct')×ôOˆ!ü B�­ùÊvž¡B‹kßA<á+0á"¾ØXÛ''ނЀÏù*€¸ŽƒNƒ±ü¤ë÷Êò¼Ñò¡À{�uà?-6æÐÿ\ ëÀ¯x‹B‘eYE„�F£Ñiµ@t Xn:0Á‡!¤Øl6»ÝNáyžã8†�a°tžªª²,;�NQu:�N§ëîõPþZ*oAè"!6›Íáp°,«Ñh ÍÀõcFžç�N§ÍfSUU¯×Ç+@´3+ø„!Âáp8žçAèî²R0ÆZ­VE‡ÃÁ0 äS×­ÑÑœ=1h�„v(EÑf³qq>"Çq6›�€¨åÅ!`½€Ð!詪j³Ù†Ñh4Ý]B™F£aÆf³ÍèÑ Ã"艢(˲F£�˾ÆqœÓét8Ðmz2È:=ÚÿÊÁÌ1|�N\¢“ŸA`ò{ŸEO\DB‡à¦(Š,Ë7à7Çɲ¬ÈrwtD»�;é™1@'AèÜèJ‘°~~C?nŠ¢twA@«:0^²yÄÐÉ‚´ù/Ô@“ÜdYF:àGWBXß=y߈‡f‹ße ÑÜè­¬Q€ßÐ�d_ËM?ia†Vw³è²­ÿÊ< ÒRv¢#¯LˆOt?¿Ÿ:,!²,;Qív»Ýn·Y­6›­±±Ñb±M&£ÑXWWg2™î^¾|ÚôéÍÏp47÷ƒ?ÌÊÊZ¾|yll¬Š²ˆùèŠ?|X”¶à‘'ægj;òDE’;0°³<XÑ)x«FŽíÑ IDAT…>ж»-H³oƒiìcø#tعsçÇìÍ€d†avîÚ5|Ĉèèh÷ÇÍfó†�›ššêëëÍfs'áy>))‰çùë-wè’/íßz¤IŠì•Þ»#qBâéÏžx}·ÃÛÃ…Ñ�¾öËñ‘!úÙ„> àæyùÜVn#Áîùnõ›nä�Ð!===<<ÜápЭµZ-Ïó555N§3%%eü¸q±±±1111±±±±±Í÷~”$é‹/¾(..VUõܹsÿû¿ÿÛöËEEEýñ�LNNöÕïìÔúÃßl½¨ ÔøãG<Þ^MÄa7üâO·f°n�°Ñ)ýô®ïõ—j¬8,!%Æ-qÔ—»¶Ütíâô~�v›Í¦Õja‰ТÖZzìÅ1]Z†^¤Ù5œ´ú“¶Ïï]g=Ì·¡ƒÍfËÍÍu8 .¤�Ð_E’¤;wVWWëõzƒÁàp8******ÐÕ_Z«ÕŽ=Z¯×K’´fÍš}ûöaŒ¼¹ DDD°,Ûîa=i8ºníq+ÖEÅEh¼¨Y˜m¶hDä¤{~³$óê[¬¬zâ•ïµ7Þó›Å?jéÆ?þu]m×€Žihh8xð`tttNNŽVÛNvÍh4~õÕWS§NÍÌÌôOñ@hè’p¡�Q•í½†g' ií']É·¡ƒÙl^³fMCCCk4<***33SÅO?ýôðáá>}úL›6­íÐ�Á8¹W¯x<~þüù•+W"„–/_Þü§=Š\s`åÊÍLúÂ_?wk¿ŽõV\sž†Ëª­!„Ô2£‚ˆTWzþœÌ „æ£SûtQy褂‚‚½{÷ÒÜÃØ±cÛˆêêêV®\™ŸŸoµZŸxâ X` €vù6t0 Ó¦M³Ùl�«ªzìØ±†††^½zegg7"ÍFœ½±±c&®;cm�DEEBHUÕýû÷Ÿ8q¢óqEénÚ…Édºû‹ü»ï¾j›d—‹ê úŒÙ�ühRËê) ŸpÛÝ¢¥êÝë7éÇÌ�7)Éxñ†‹6ýdÝ®ú†Œqá©Ã/L‚Q˜#,Â\Lúðϱúfè³Ù<{öl„Ð7ß|³yófJ©6‚J{¶¦¦æÃ?,**JIIYºté�!CüZXß%¢&„äççOŸ>!är¹^{íµÓ§OO›6-??_k$Ü»wïªU«⥳³³Ÿþù�8²ßÑ‹.»%1|þ#¿�áÔ‡j¶Ö)ˆI9i„°–S¶SGÊv*øT˜·dÉüÜFH­¶}�æXÒaЭªªaF-Yÿ‹?mkº�à�ª U›_øñ–‹¡?fÅI?”¯ß2½g2™´¶‡�;w „Æ�¯×ëkjj>þøãâââÔÔÔüü|­½¡÷¿Õ�ν@€ó]è ªê{ï½÷Þ{ïy>XXXXXXØË#BÆ�%W;b 1!$µ4Ô©˜‹ Áˆ »fÎ}¿šãyÞf³¥¥¥Ý~ûíIIIPoà-Ÿ®œÉqœ6EJ–eíteÆ=iªs2(·ˆˆˆüüüâââÂÂBJiFFÆôéÓ;Ÿðãøøx#Ý%Ú~~÷Žímî–ç™=ŸŸé¸‘íÐWÕ?üÕXüíöb„�žäÞ¡….{›ŠˆÅlÀêù­/¾üy} ºÉ>{×5òè+-z@íܹÓjµfgg/^¼âúƧ­Ôíý|W3 ™>%Çâ HøMOþÑc½L±¥¶ÞNb³ÖÔ·ˆ!Â@×›� Eill´ÛíÝmàr¹<‡Oº UU+**>ýôS÷Ý1!Äd2edd ><777..îüùó(...//EQ /!¹¹¹111î£M›6mâĉ!Žër1'€’ÏöÌï·6›L:ÕÞÜFC¦åfyô »J¾Þ\$�¤ù³GhmÌ�Ù?ÿÃT¤·x5#-^ÿÝús Á|Væ4A@�ØÐ!--íÅ_ìCÆVŒ±Åb±X,V«5444&&&666...::Ús\tZZš6¾AQ”ÚÚÚêê꺺ºÖÖÖéÓ§wè•€ árøÄÜ›æ8Ë�’‚¸Ð!#&Oeñ¸êë³?~?w8"/õâçÈ™#¢ÌŽÁ;onói‰auú�ˆ¤á¹c Õ‚ÍÀ†,ËFFFöy÷¤¤¤Gy¤7[2 3dÈXÀæJðÉÓîX2­Û§uñSn‹¿Ü1˜„Éwü×ä~-€7…ð„ƒ›Ö}‹øà3ÚéÆÀ`pƒ_ÿà¦eàï2g` h§!�Œ\½ t:à3pºàÓ•3A¿cY–aI’X¾J|A’$Bœqàj­ƒÃ0,˪ªêN–8²,«ªÊq¬ž®f: nc–eY–•$Éße øi-|,Ëb ÙÎÀÕ B‡A�ã8ŽãTUÁße ˜i™ïµ3ÎßeÀŸ tô8ŽcYV¯×˲ÜyR@¿EQ–e½^ϲ,„à*¡C0ày^[L’$—ËièG”R—Ë%I’N§c†çy—?ƒÐ!0 £UjÚ²a‡CE˜BÀRUUE‡Ã¡ªªÁ`Ðâ Ì/ Z ª(ŠƒAQA´)d„Œ1 é ÷(¥”RUUµø[‹Ë1Æ<ÏCWB‡`Âq!Dî`4)¥²,+ŠÍx‹¢5æia7´7à B‡ ¢õYH’¤Í>‡NY®�–ý ð¡CÒ&�QJE�!“ô ÆXë§ðwA8:--[”¿K ØÀ xBxBxBxBxBxBxBxBxBxBxBxBxBxeŸRÅår‰¢¨ªª¿Ë(8Žãy^¯×û»  W tN²,«ª*‚ö€A†²¬Žç ðl¿Õ“”R§Óét:ûë€AC’$I’\.—Édâ8ÎßÅ—¡CPÁk§Ÿ !B!„aŒ±¿‹À A)¥”ʲ,Š"BH§Óéõú+ (¥­­­²,÷Gƒ“¢(­­­&“ š„AÅáp8�NJ)Çq,ËcYè;UUeYAEƒÁ`0ú|(JiKK‹¢(ýX¼`e·ÛB=2‚¥Ôáp¸\.†at:43på!<Ïs'‚ÃáPUÕh4öíäjoo‡¸¡÷ìv;Ã0Ðs°à®4H¸\.—ËÅqœ^¯‡¸€~„1ÖëõÇigYŽ Š¢Ö÷zOk{� B‡` Š¢Ãá`Y–çy—€àÄó<˲‡Co÷u8Q¤à¦ÍCñw)@× tôTUu8„�Nçï²Ìt:!ÄátRJ{¿—$IÐUÑ7ÐT°`¬Ã 'Š¢,Ë:�Ϋê Ð,Ë ‚àr9 c/w�ë_ŸI’D)…Ø­ƒžËåÒæ û» ?mâ’ x ÀlÌ+Ÿ^`‚Ðap“eY–eˆð–eµó®—ÛCN¶+}=�‰ „4tZZ­ùðítëý% B‡+ý°� .9ƒ›vë¡>ãmè@ð!!ê/­þ‚aDøŒvºAè®fp· /@è/@è/ønR_w™=(¥MMM²,›Íf“ÉÔËCÙl6J©Ñh¼’µìzYBí)Y–a-’$!„ Zö …mmm¯¼òJddäõ×_Ÿ‘‘áy…nnn~î¹çêëë.\xûí·÷fÄ_]]ÝsÏ=g³ÙòóóçÏŸÙí)¥‚ H’¤-g·Ûµÿmkkkii±Ùl ”ÒÇ<==½óöïßÿæ›o6lÙ²e‘‘‘^½wýî믿^³fMrròƒ>˜˜˜Ø·ƒ(Šb³Ùjjjª««Ï�;wöìY†azè¡øøøþ-m�ñQèpúôéÓ§OÇÇÇgddô~Ç.'õº¤”v7ë×= ú�7Þ(,,ìÍÔj†a¶mÛvß}÷uc[ZZ6nÜØÞÞÞÜÜÜØØØÒÒÒÃA8Ž‹‹‹ Ô@˜6žØ¾¯Â‹Dxº”‰3³#`þƒ‚¢(„� ›r¥(JaaaTTTNNŽû­QJËÊÊdYv8—m®V¥¤¤¤±±±½½½½½½µµµ¹¹¹¹¹Ùf³577w˜,Cyå•W{챸¸¸�zKƒŸ/BI’vìØ!Šb\\Ü´iÓ0ÆEEE•••Ú³‡Ãét"„Μ9³mÛ6íAžçsss)¥/¼ðÂùóç»;òûï¿ÿþûïwx�²téÒyóæ!„†:tèž={´¥ßyž×°©©©QUuäÈ‘999‘‘‘‘‘‘ááá Ãt.üÚµkËËËUU-))ùíoÛó› {ê©§5bU›Š?[÷YS¯§ã’è[†ÎÈŽèø¡ð(¥’$õ>G»ÃáÐëõ›"¥­­m÷îÝG��ŒŒÌÏÏïÐQK)=zôè–-çÏWp7bĈ[n¹%66Ö_¥í_;wî|ç�wE™4iÒ]wÝ…jkk«ª¬D%&&†„„ô|»ÝþÎ;«Î�ëúR¢ýH¢££ãããRRRÒÓÓcbbúý�_„eee'Nœ@]{íµ‘‘‘”ÒÝ»wïØ±£CKÀ‘#GŽ9¢ý;,,,###44ôJ^×jµ=z”RºdÉÏÇ[ZZ¶nÝ*‚Åbáy^‹CÏ�;çÞ ""bìØ± ÃH’´fÍš]»vaŒcbbzS…„„tŽ?‰¿ì¡d©Cè ŸÛþöæbš1gùÜLý%Ï`.6*@«RzÔÜܼgÏžððð±cÇêõúž7njjÚ°aÃu×]—••å›âõ^MMÍêÕ«Ï�;§uí ‚«sìï¾ûníÚµ‚ èõzY–8PYYñÓŸ>÷Í©©©©©©¥¥¥{öì9yòäòåËÇ�þüùZ«!TUUõ�ü£Ã.’$�5jöìÙî`J!$"""999$$$$$$44Ô}ßdM5mÀCQ7oÞìt:‡ 2}úôÂÂÂÆÆFBHxx¸¶�ªª­­­”R�Ng4^XŒÎl6BL&ÓÃ?,B‡cÚl¶7ß|³½½}Μ9S§Níü¢ÑÑÑ¡³gÏj±jwe+,,,,,ìüø°aÃrrrAXµjÕ¾}ûBÉÉɳfÍê9tÀ'$$ :´Ãã%%%ï¾û.BhÙ²e�Ÿõ-š:vBjÇGECÑ;›‹Õè¬q'˜ýP*úßÉ“'wîÜ©µ=Lœ8±‡è¡¡¡aõêÕEEEv»ýÑG ´Kˆ ­­-z½ža˜Î•!BÈjµlVeñâÅyyy‡ã�wÞ9~üxAAÁòå˃`�›´´´'Ÿ|rË–-Ÿ~úiccãúõëÓÓÓ:$Š¢ªªUUUUUU�÷:zô¨Édš>}ºçƒ“'OÎÏÏ´¯x0ð_Õ·ß~{üøq–eçÏŸ/Ëò§Ÿ~jµZÇ�ÿÒK/iñ ÍfûÝï~W__?oÞ¼ÎÃ$“’’ìv{{{»çƒ¢(jíŠ<Ïwhªb&,,L;[bcco¸á†Î¡ƒÃá8pà€(ŠÃ‡ï²g!>>žeÙýû÷9rcœ™™yþüù·ß~»çwJ™9sfVV–ç[°Ûí«W¯.//G­Y³æ‰'žp‡G€�3räȆ††íÛ·oÞ¼!4a„.gcÕÕÕ­Y³¦¨¨())éŽ;îÀ‹Jjjê³Ï>‡úæ›oÖ­[×yƒÃ‡766 >\»½±X,·ÞzkEEEQQQMMMRR’Ï‹Üÿxž_¸paZZÚ{ï½—ŸŸ/ËòáÇBÑÑÑ)))6®ªª²Z­‹%--­ÃSÕÕÕ{÷îíÍ+B¢££SSSû£øAh`C‡ýû÷¯_¿^ňˆˆÓ§Ooß¾Ýjµ Ïv¤ËÚ²eË'Ÿ|Òå8Ç�7nܸÑó‹Åòä“Oj?&­™«¢¢bíÚµ.—˽�(ŠZ‹ŸÍfëX¤¤¤Üyç�Ú ÊôéÓ1Æ#GŽüóŸÿ,IÒõ×_ßåy(IÒ–-[êëë{~#�¹Ÿ1›Í³fÍ¢”îØ±£  cœ››Û!p·Z­ëÖ­+..NIIY±bEBB‚¿Jë…K»EQ49à3f³yöìÙ¡o¾ùfóæÍ”ÒñãÇ»ÏÁššš?ü°¨¨(%%eéÒ¥C† ñþü¿þ�ÓéljldÆsP¤6èïĉUUU=¤«Œxž¯¬¬üúë¯UUMMM=z´¢(���V«µµµ!T]]}öìYŒñøñã=oP)¥Z[uï?�`úÜúÝÀ†£G�Þ±c‡Åba¦¼¼œRšžž>þ|»Ý~ðàÁææfÏ�»ë²Òdff>ñÄf³!dµZŸþy›Ív÷Ýw»ó:|÷Ýw¯½öZw»›Íæ‡~Xk}²Z­/¿ürkkëòåË'Mš„¢”®]»v×®]ýñ¦;ÊÎÎ~á…âÈèâôÔ^­K+”ïü仪®æ¨*õ%BèÌÎõï—ò�Ÿ&ñ“n™™Þo™·ð“ɤµ=ìܹ³  !4~üx½^_SSóñǧ¦¦æççkí ½_ß¹·'ÝÀs8N—‹çyÏÛŒqXXB¨¥¥EQ” îà&IÒúõëyžŸ7o^HHˆ–!¤½Í}ûöµ··ÇÇÇ�5ʽ¥Tk·¾å–[³[jÐØŸTFFÆK/½$Ëò«¯¾J)�ŒŒ¼÷Þ{-‹ªª“'Ov8=ìØùA†a´¯ÜýÅcŒ=ÿÝCIÚÛÛÿð‡?txpåÊ•+W®ìå{!„äæævßaQP_ßÐËCù‡ÔX¼ý‹ïºeuQݱ_ëâq~bÆ�×¥àdƒ’Öö@)-,,,(( ”ÆÅÅmÛ¶M‹îºë®ÄÄÄ€�“yYÚPAŒq‡.`íOíY?­ÿ)ŠrêÔ©Å‹³,+ËòĉB¢(j£G�N§$IcƒÁ0qâD÷H|äêét:ˆúÅÀ†Ú—´f͚Çëtº%K–X,–ãÇ�s·|ùr¯ÕÐÐðþûïkó].—Ö±ÿþºº:m«ÕÚÃ}€–(B›íi·Û÷íÛ'Šâˆ#ܽ›ž©&:ÓQoݺµ‡zícÈšÿ?OÎêê’Ê ^ùðÍ^øÐÂáÆÎ§6Ævñ(ƒ†ÙlÎËËÃïܹó³Ï>ãyÞf³¥¥¥Ý~ûíIII�~æ^N—]Ay�,..~å•W²²²î»ï¾ÐÐP­™¡©©Éáp¨ªzöìY—Ëuûí·çåå±,ëù (Š¢MmÕëõÇŽÛ²eKÏ•Á`¸óÎ;5=O@ØÐ¡­­íÃ?ܾ}»ªªŠ¢üûßÿE!4eÊ”¢¢¢¯¾úªË½xž¿ÿþû‡îù`ssó×_ÝaËS§N�:uª7%Áët:mˆµ{V4ÏóîA×=$cˆˆˆX²dIQQÑ®]»´>—k¯½¶suƒ1Ž��Ü3– MÌê:O†(ì!©–ÄÌk†ÂäL”´è!´sçN«Õš��½xñâÁ7tþ9Ž#„¨ªÚ!Ùƒ{}‡A÷»c·Û7lØàp8ªªª$Ir÷”——k­V«µ¼¼|ôèÑží ‡Ã¡5HX,›ÍvôèÑžC³Ù¬%*ÝØÐaß¾}Û·o×fhA!DËÅÑÖÖÖÜÜÜå÷§Óé´ß½&--íÚk¯u·(œ;w®¢¢Â½£^¯9r¤;0�ÚxˆAرcG‡÷ïß¿ÿþ˾ “ÉuâÄ ­ MMMÚt/O”Òœœœ±cÇ^öh¿0™Lyyy”R«Õš———œœÀÙÛzËh4êuºÖ¶6Ïþ_Ji[[ ô u^ÐfÊ”––bŒçÌ™ãNuåt:Ýu¸(Šß~ûmNNNç±---.—‹çùÐÐІ†„�^¯Ÿ6mZç Ö•••Ú´Oг� ²³³µÑ:C‡MKKKMMMNN¶X,”Ò5kÖ „’’’-Zä®®þä“O:ô;äæææææ"„(¥{÷î=|ø°gÀ!Š¢¢(ùùùÝ¥žLLL|üñÇ='F655­^½Úáp,X°`Ĉž…Ù»¼ IDAT›L¦©c$Iúꫯ6lØàÎ-ÑÔÔÔå �8qbÞ¼y�^@€0™L×_½¶Nop\S�FcxDDcSScc£ûAEQêêê! �Ûê�sçÎmݺÕÝèë~üàÁƒgΜA%$$ÔÕÕ>|¸´´4;;»ÃîÕÕÕ¢(†‡‡GFFj¡ƒÑhœ?~çl›………:ôÆÀ†111O=õTttt‡n§ööv->0™LcÆŒq·”––nÚ´©sšU„�ËåÚ¸qã–-[$IЉ‰immE111±¾¾þðáÃÏ=÷ܽ÷Þ›��Ýá(--EéõzQSRR–/_®%…”eyÏž=kÖ¬iii ðÁ“““;—Üjµ~úé§¡… MVy©Ë.•4¸p—‘‘QRRròäÉ)S¦h7ÜÍÍÍÕÕÕ:�Ϋµ–Óéüàƒl6›–Ê�°ªªJËó“Ÿüä½÷Þ+--]·nÝÏ~ö3í–U£­}…ŠŽŽ¶X,þyAg`C†abbb$Iª¨¨ÐÖ3-//¯¬¬ÌÌÌìýEQ:´~ýzmã˜1c.\ø·¿ýMÅéÓ§GEE­\¹²ªªê�üã¤I“/^ìHRJµÅµ»<²ËåòL…"„x>Âq\kk«Ñh\´hÑĉW®\yøðáçŸ~ìØ±{÷î={ö,B(--íþûï !ät:ß~ûíãÇ�#„l6Ûc�=vÙtú€ÁÁÝ<ê¿{Œñ¸qã´¤½‡?~¼6 »¡¡!;;»ÏKQ”­[·;v !4yòäÑ£GkÖÔÔh™ ´TÅ ,xõÕWËÊÊÞxã�|Ð%Øl¶²²2„PFFT¿ýe`C‡;vlÚ´©¾¾¾CC‚6‹!ÔÚÚºoß>w‡Emm­gÏ‚Ëå:xðà_|QVV¦ªªN§›?þÂ… Ý]ãÉ“'ÇÅŽþúëçÎ�+,,Ü·oߤI“òòò2220Æ&“é·¿ým‡µµµ/¼ðB[[Ûý÷ß?mÚ4ϧðEÚŸ™™™¿üå/)¥±±±’$Ý|óÍíííeeeûöíÓÖ¶ „¤§§/[¶¬»”m’$¹‡t´´´H’¿]‚ í*zè�¼‡ãoû›v‹¢©¬¬üùÏŽŠŠŠ|â‰_„……%&&Θ1£  àí·ßÞ²e‹Ëåjll4›Í7Þx£;¿ä ÖÜÜŒ1Ž�‰Y¸p!˲Ú2¡o¿ýVCC#B(//oæÌ™ã1cÆÌ™3góæÍ‡~ñÅ—-[6lØ0Œñþýûµ<£G�v×í‡cóæÍ]ŽuðõÛœ¦ËåênŠè��½X$''kÑÌÌ̤¤$�õO/LDÖétîí%Ir·(0 sÛm·544TUUÍŸ?Ú´i=,{¡MÃ�:uêÆ��=ºbÅŠôôô²²²ÆÆÆ&áh‰K;ã8c\QQñé§Ÿºw×VòLOOÏÉÉÉÍÍ�‹‹;þü�ŠŠŠÎž=+Šb]]�64iܸqž¹Ó§M›¦¥.éý²Oovzï­C‚»¾#Ñ׿¦ëüY$@GF£ñÉ'Ÿ¼ìfÇÍŸ?Ö¬Yµµµ<ÏÇÅÅSIŒñ”)SB”ÒãÇ�ÿý÷¢(šÍf-…ƒçpWžç—/_ûñÇ+Š’““#Š¢¶\â¬Y³<n²,›’’Ò¹U¦¥¥¥¶¶Ö7ïkPØŸWzzºg ç†1Ž‹‹>|xrrò�wÞéþþjjj´•®´éƒáá‡&„t Íó|FFFkk«gØ�JLL|衇‡6îrÆŒ¹¹¹}È˲lhhèäÉ“kkkCCCccccccãâ⢣£=K’––¦�oP¥¶¶¶ººº®®®µµuúôéz%)hÐà°‘7.¹-½–åõæ°˜Ôk® C±¸Z�Æ.ëÛ �1ž9s&˲ǎ»å–[º\v„㸠Œ;¶´´T»áüÕ¯~UXX¨Ý¿!„,KVV–ÅbY¾|yddd‡ÝOœ8±yófw мiÓ¦)S¦\6mˆáöÛqm-BˆÆÅ9ׯ÷IÙÀåµ¶¶ ‚dƒÆpv»]§ÓYz×ÿØØÍtnÐF£1(¯âLA�îâÚFÂÿýŸrÓMþ-�·‚$Ñ|B‡ÁMë@ �Eü¸h§[pd” o tÜ´ú+˜Ç Ài§›7¡½øA"xFáW^wà.�£ª*ÜàîH½óùÜå@cmyªK÷€ɽ‰´ƒÏ…ÐÁÝâ= ß“gsú@¿Ó«ø²1w÷G¿�v¨sX–aÆs9À€’$©ó´/M—':Æ!µÓ†pEì¸) L¯7½¹Ð^ÉÅkûô¥ÝO}ÿ´Û?úFï[†aF–eY–!z` É²¬e¶íý%�eYEé¼.Ïe+ˆ-BªµÀäë±:ý<ø¸ƒõü�jæ8ŽeYÏeÊDkáÓ²Æõr—¾fƒ†ºyõ9_‚a’ƒ˲,˪ª*‚¿Ë@0ÓrÏkg\ï÷â8Ž�¾µºÓKÿ»êð<×éC¸Ú?“¡Ã §µ:èõzY–EQôwqN¢(ʲ¬×ëµV¯öõL� z‰a,° )ð<¯õ¿jwE:�Zùè/”RAEÑét !}è€àyžãxIºÂȾëQ˜WvÌÀe4šz3ôNû¿n?¨ „Á€ažçEQ4 .—ËáphM—Í/è�ªª²,K’„16èõcŽçû6æßl6·´´¨ªÒßeô¼ºÏeÒh4zÕ´ÓmŒ1H†Ó ºa: í4Ó¢EQAЦ�B0ÆÐ@ïi#¸UUÕò1¸çSð<ßç¥ì0Æ¡¡¡­­­ŠÜy¶E»yõ"=_~M%`4¡«"ÀAè<8Ž#„ˆ¢H)5�ªª*Š¢( äšÀ[Zæžç !”RBß×ö7Œ±Åbq:�.§³¿Êé�AÐ>A1™L�·Ô0èB‡ Â0ŒÁ`�$I–e„!NB®!¤ã"»ƒ16�:�ÎårI¢xù°¾7ÍØ} nØ˲<ÏCcÃ`¡Câ8Žã8J©¢(ƒ® €�1ff :û†1™LÈdÒL)J¿€4´™eYèT\ tZcHÄ@ ƒ3 R0^€Ð^€Ð^€Ð^€Ð^€Ð^ðzj®­5ÞqÇ@¸àÚZáŠôeVñ`Ïè3è°€zÛê@££´ÀÕÈ`ðw ¼ÖÛÐÁùÚkZ Ða/@è/@è/„¥ÔßÅÀà­ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ð„ðëïúíþ)Üë-»Ü±—Û{¾JÏ»àŸ.—½´»7ÀÞÄ ½9rß6¦ d t x^×{x¶_+ô{a `ÀAè€x{/úÌó„0€Ã$ÁŠB(À@€V®\™ŒÖ ŸAè@o@ˆ¬ºûf!¤ [Ðaèd [ú¡'€ÁŒEQ '1�ùü¼èÛ vw{|åÅïyú¤oŽï·›ÿÞ¼=h™W)è°`B„žçZöï+t„ãßã_á«ûôâÞ¹¬[€à@¡ƒ,˪ªŠ¢¨ýÃßÅÀŸ! Ã0 ò,ÇqWÏ%HVÐáJõ»ÓjQ¥ØÐ®6ÛUhW3O"BHB831��šÉÄ„DeàÿÐc,I’ ‚ „!Z¥‰q@|@ø¥TUUI’Bc£ÑÈó|pŸá§”· ¥š&!„0A˜`ÂÀ½;¸š9ZiS+…½e«ÛðÜQú{¦óQf?—Êÿ¡ƒÃáp¹\”RŽãX–%Fnp¥TQI’ìv» F£‘ej@8$üügÂ÷e¢3&,ÂP€Ð…Ø™RU¡Š´õˆó›“Ò“ ôS3ýYøó䤔:§ÓIÑnª nÀƘeYƒÁÀó¼,Ëííí²¢øæ¥k­Vß¼B¨É�}Oø¾Ô…0!¼3<Ä \ cÂ΀YÞ)ÈOìøø ?»õýÙêàr¹\.Çq<Ïû±>Žã†q¹\íííf³™ñIÛƒoÆH zú¡Ü*`†Ã #è æ0˨²ëÕ/í1ã4?µ=ø-´EÑét², q½AÑëõªª:—¥?½Y¨Uˆ°˜�ª€^À„°zªª¿ßäjh÷OüÓê ªªÖO¡ÓéüR#BÏó¢(Š¢8ð1·/nÿ«›Ñ†.Š auÐÜ@oa‚XÞ!ˆ+wI?ŸÇùþõý:h30u:d£À+,Ëj£&ƒ£¹nÍ÷²")˜ÕArI¼‚1G‘¼å°sùT6ÆâëYHB‡>_Âû6…RBËú~ƒÇq‚ H’Äq~¸ÛèGªŠv•ˆLXˆðé²°û´ºh¬¯G<\éXê=Y–eY†¸€¾ÑÆHjyPµSVµÅ.cU}� ƒú¶äJ«‚>\ÇýpÒj™"a&}ƒ1f&2®VÙT„‚ª€>ˆ0ÖfÕ÷]ÿ~EA:p!Н< œú6•R„�!Oô©oóCUà‡ë·VåAžiú c­v§VåAU@Ÿa§è‡ªz]ø–zñ?@ßøë ‚Ðà';p…ütÁ€xZÀ•R%A”)æt::­�w ÑapÈEH†¯Ð ÃôU¤îGÜNÇy×ÖDÛŠ 6ŸMœ5kT¬þBl ·ÖÚ˜ØhF©5_½ø›µ•#îÿÃϦG`„�`=SÅ$¤Fé¡I €€;&äÝØ3Ú_üNvõ¸¥ P[ïÆì[²C>¹�o)³ÿn­ëР¶ ¼¡CÐQÊ6üò÷ÍÝD¢úÙOü}yŽ7IÅs;?Úôy™ðåW£o^ö_7ŽŽ–‹?xþ¯[…©�ýfÅèÎéOiÓþ5|ã¨)ïž]šcìã{þçƒ[Š¥ffúfò'ëc#� s¿ùßðñ=ÕtÿG ÷îëÍ·‚g�à# �ÔrZ�üÃ_g„AcGŒË>}âd�š62#‚E Ö“'*�æäœ ]åÖwWí”SÒÄëg_Ö)àSç?ñ»¤mëÞýäàÇ/—-|ô‘'MMúbýÎ÷6ŽÏø¯æK·vžübãQ�ÉX4ëˆÀåÀ8I1gèoLÂÈîüdŸœw¢ªZ[«8:}ðæH.V�ºþR0žx —Â{T˜¹)‹!ˆÖ¶¡ëGu»¢ •”ïNÊ•ð%ÿœA:’xÝý§o~æ·Ö_ðàƒ¹&„hÝö?ýߪÒô9÷>¾ùÑ?}u¬«ýØá‰3f_Óå!u1£<ü›a_¾ýÚçºø(£.2/ÿÆ=¿ß´}ýŽk¯Y�䱡P¾mÝ—u(nîm3†ÀO €À@˜ŸÌ5ÆZ¾×ñ¡ƒÉC‰Â›¯µ®“;l‡¸?úÑÌn°w-ŸÚù Óò½öm‘ºÿ7‰ézÉgBË:?nº¢wz“3A¿ã'<øÂ}cMц�{fÍ™ “¨”¬P|æT¹UÍI&H­-=ÞL Ó³»ø1( �·íûôŸGvæ,X±bÁ˜è‹Ã¡ˆ9!}HH§*ÃYwºÂ6pï ÐK˜,»+ti éÜþ‡ ‰Žíóäi=nêÖÕ«6ßôꛡ¿{bvœ¶7ê¶Ÿ=0ÎÔaåôG¿xá3‚ox@ÍcNÆTËc£XFUöžTs‡sHû´Eá'O×q£‰¬™a«nàíGšoù@t^ÜQ’{úqÅg›ŸœÊqŠüùFûŠ,q¼©º. CxvæTc¦É-®××9¾…’ Æ:€~§¶Ö–Ÿ>cĈ6Õ]2Ë�–=ŒûöÄáÒ–kÃZöžQøã® ívl‚.fôÂGŸÊܲµnÌô8‚�v ¡Ú*JŠ úޝYU/Á¥ÿ+?ìÜ?‹‹ÚÛüt«yãðwÉÔ�Ê¥��¢Ô.ÑÞŒXK1þýnc"‹”jç;§(B¨±Bx¹â‡ †¤~u«>Àڪì/¯n_ÓØOo‚˜tbý_NüðçCpè°qÙÜá¢}'jê «T~ì¤á=�jdÃsnÎϹäèÅŸ¼RÜÍÖ €¯©v᥷šZjq’öžz}è#9—Œ_fÍ,AÈ”²ö1Ï{Wj=Øúp¡"^zÀ!™Æ—–„d´££Î½a£,äÂ�RTh{ª@< ýÁ B‡ Ʀ^wÛŒB´íäŸîõ­„Ç�Î=öùÛ-M Ô4yJN÷mnrå·ŸW¦]?9AûѰ7,½>]×a#ZûÝ{�@•zAëWƒ‹�s²JAE\ü„C¹Œ!Lç1Œ‰Í¸´ëQkߎۈ –Wâ9ä¨^‡QWMå¼™˜$—´?¸Q„Á‘¾Ñákò‚?òÚYZJ(´“gè€pĘë&…),=ƒ˜!·ä�ìœPº#Úvôó>ÚmpE?»ˆ „;lüä.Æ:T­ßtÄÑŸoÐèŽMM·|qq¹d÷ð=¡s¢°vêS‡ðú›­Ÿµ^ØTp©šjZ)b¨­¬ý¹ƒìÓwLñYæ¯ï5]2Ú#ŒÊ -üƒgê(u÷Ú†A„T t¸(²¬ ¤6œüvkƒ5iá„x‚ÌÙ'„ìúª•Ížsmz·Id8Dõî-ßµ’!y¹ÉªD!¹lû«‹:NÀ¤Í¥íÖr½“3}Àý ;�jƒ6“;ï2çEaDÅÉT6êîž§Ûù–s7£Jìù@8uH¬ayZ;¬L[ÛÞãdÇ 7`$«ÍN�öJÛ%ø– LÎýDq57X«ê�ɧ¿~÷µõç*¬mE¨êÛ `ã ×Ü>66&*TOê¶ÿéWï”…IMж`WÅö·þ¾á”Ë4zùc¤ùÇï?(þð•7u�Ý7+ÙÐÕÕ†ï7l:£ð97Íê^`–çuºŽÃ$ž…Ô w ›¤o¸?á!†Ÿ-2ÏŒ'È!®}·ùçé𡞒›„Çßi{ý¾�Q9–<½µ¾íµsT½Üa{ˆàkõ ¿uX¨jÏ?0Ø�èIù÷Mºä¡~Zbñ‚·þ³©ØÎ§ÏäG×Å›pì�Òðç|½ÿÝ?6×.¿wфå—~Úvì³ G�8ö¦›'Ew;†A¶�+­u¨U�2Å„t‘Áà?جÿÍ2C®‰�ίj{µºã§å¼ã�×é?î ™oxè¿hõ_Û6ô¦ùãÜ 6#IE¦LR j¸ °’$ù» ÀWÔ¦#¯ü¬Øaqû#Þ˜‚B$ltþÏfüç¿>+Û¿¯lÆè„!—6$H-¶6Œ £oÎËêaC+>ÿë[G´lPØ<13®ç± X9ÓW´õ0Û]O¾¯üj”òö&×—ç3]œã×\é\þ²üË[ t{ûGÝÌ“òüº(Eˆ¢áÓÂ~5Ò}³@«je‡Ÿf ^…ü–M²¤¤dÆŒ~xeàCú„qsæ¥GÅÇO˜ð°˜aϾvd¤ÇÔ&,çÖÿyzXq{ʨ!; Ÿ8ó¡ß$—;å€M‰ãgÎÃèîÂá#n\zW¶3¼14>kÄ5—É0ð¡AÜ}LΩ5§ìžºä©öéP)uÕ¨îyj›ôûU=ÝOÊÍÒÞØÐ ·\¸bÑm7ð,C‘(ª ÕÂ{;d±‡ýAPÀùË_–-[Fˆï¦Óµ·· ‚`2uÌè%I’DQŒŒŒ¸—¨­­�‹‹¸ã#„þù¥cå·á * �¨"QUüþéÐËoÚ¯X–…‘’?€a’\!¿ “ÄØ×-ËZ ¥Ô÷/ @pŽÓǨ#3Qú÷€Pª÷Ǭ6?490 ƒRUUûÀ[ªªAèB(¢”*CU@_PªD…øáu‰¿* ˜ @ßPJE ‚®Æ!á!D¡* �(¥JB¸"o?tX0 Ã0Œ$IAP÷à{²,G‡Ev< 7²Í‘Žk¡.‹ª ¢hJúUÓaÁ0Œ,˲,Cô€·$IÂsÜ ¿Üò35vDŪŒ Tx‡ªÆøÚ¡~huðC‡ƘeY–…lTxM–eUUu:]„ÝãeSŽe� UÞ¡ªD©zã(nH„ª?tX „X–UÅår ‚Ðy@—TU�¹ÈßÅéÉQÌ¢qôƒ½–ÌBU@ïPUUDÏüèZì—ª€õe2(7ŽãdYÖét‚ `Œyž÷}\TUu¹\„žçƒ ·BÃqÜO¯“‹ªøã•"’1f *àr¨Je!ä77³ áþ© üÓê€ây^Q-zÐ`ƒ`ØD–eA!:�Ža˜ è­p3øgºþ߇|y�ˆ©ŠY¤y ;T•¨"Bþ;�›1û«*ðC“ƒ†a-\Ðëõªª:QaÆ&ž(¥²,;�N­ŸB§Óiу^z ³P»1 Áÿs �šÅ#ªª’ƒ*"ºÌ‚Ï\m(Ue*;©"xæ…[¹;Æ#?v÷û­Õ!¤5ºŠ¢¨E‚ H’D!„`Œ¡\Í(¥ªª*Š‚Ò"lŒ1!Dû‡¿K×Ï8Ž A/.·Ÿâ^߉*›DªH„ B!ÀÕ�"ªRª „ÆóGñ÷]Kc-È¿U�?C„Çq„Q)¥ƒA»ÇRUšÀUN‹žµD�Äq\� ÒÞéõÃÅYê¡ ~÷it¬RihSšÚaQnpU3ð8ÒŒÂÙ©xz&еÐ@¨ X„�ªª~,©aÆ`0H’¤ A3þ €~¡Mfæ8.ø:ìSo�IDAT:Ъ–•&¥ËRU„ˆ{T4U°ã@HjËqÇqZ†] ·\lxŽI˜½U`UÀB'¹‚Uù»?ƒª€@F!õõõþ.Âq\II 4 à²(¥„ã8-'´¿ €@çr¹Ã0„�³gÏú»0tgÏž%c�NW^^ît:ý].§ÓYSSC´´3ããÇ�û»H\%%%‚ mõ^ƒÁÐØØS-Ð¥úúúššƒÁp!Y˲,Ë“§ôù¿èÀÕ!àݱݷrUÚ¯‹Óú÷‹íz´7&¦èvÏž@@@(r�¢îÐ~ÚìïcÞy/°}GŠÎÖ›i ßfyÔ/ ÿ×"w©î°iÇFï×"Ÿmà¬ãd¬©UÜömÙ}ílÇíkÈ4诲­’–³f­ïíwÒüþØž=lŸ4@@@J¨@Qw$/ûÛóþ4ï¶miΧûƒ*ý]b}’÷y=1>}>·>Àc«¥ûíS¾º´4=ÍéðÙjêØ›lŸÞccµ<�šê-]Ê–îÝë‰�óh„ßï·ÿ×»4SÉîs~jÀ³u[úûÓÒëÖ)ݸQ ½Öœ € € €ž˜‘#GŠ¡R¥JE€‘šššþö;qKÿJM÷‚š>Ë«í›åO÷5j7ì"ÿ†�é6x*WŠ¿â2O¹òi¿þêIHˆ=ÿܘ#�Ôt 9ÅwL�¸ÁgÆtëâíÐ.°c‡ã?~O æØcbŠéÞ5àõù·l�9ë4ÿú þ-›}-[Äöë“¶`�zÜ=´SgïqÉÉ©))Þvmc¸A þ4° @@@�¢ؾ}»vX¤_˜ºfmúŸKÓRUƒïý¿^˜£>‚ å}mZûºHIóµnåëØÞÛ ž?i¯§VM_›VúØï©[ׯ*gfÊ3ÔAwÁ¹þØ_ûv±gž–¾hqÚÜùþ´Ô€ÏëkÞ,çß“(WÎÛ¼™_߿߃vêÌ´[ò§²h/{C@@@ èŠôÖ€ôU«[¶¦ûÓ�öÝûûÝSuëõ�9N%¿ž àkÜ8P©BLÛ6þíÛ©)*ð5mš¾l¹7.Î×´qÚÂ…ªóO_º4U•+ÇŸÐ7àóÅôè¦Ç&¿9Õ§qo•ªújo�ÚÞ½IÞêÕô`B=§0èÖ€ �:G‘®/غ%mÕJOÃÄ¢»ì @@@�"(ÚŽ€�ÿ”¶ÛÜŽç,3îØÏèÐ�½×—nÃò�Ø“ú{*UL_ú—óÇÇÅÕ)íÇyzl@lçΞϾð'§ÄõîÛ®­·V­ä¦¥oÝê­P!mþ­«MÛfüéžøøøAg’’¼+¨sÁoÎ.3u쟗’¶wã¦"ôgW € € €©@uèù¾ª/}çN};ß^{ì_è¦*}ݾŸ’œöó/¥Jùêk= Pßê¨RÙ× Al™2^=1°fMOµjÛO�· }õšÒgŸ¥Ïÿ*û÷ïØák˜˜ž’ª xcc}¿¸ûåÒÿßûØÒýûé1öàÀЭL¬gÏÎ�ZîpèY‚ € € €@±(ÒŽÿÞ$Oš= '*ÝÆ¯§ÿÇÇ%7'¾¿”yóãÚ´¶Çv9Ê¿qã®GóúbÊÝ8"öèÎ�˜ÿÖm{?™×å¨Rç�“ú¯‡’§VöÚ«Êxõ-~}é@ògŸ©6@…þ¤$»¹Àçµ]»!Ž �žæ×× Ð‡Ù € € €Å] ˆ:\&Ý¥ïOKWѾ>hï‡Ëro@ �¶n½÷§yé›7ou[@ÏL(ãõú<¥Jí�þyÚ²¿=^_ÒGŸøÊ—K[µÚ“œìONÞó¿·ã�êì­V-å§¹þ'ž.}ܱ*"ØûåÌô-[R¾ÿÑ¿m›¾A }݆”ïЗxöõBdwo€z txi©û��Ÿ € € €”4ïòåËuN‰‰‰…zfŠ÷ù|ë}¬Ò¬ïvéFýœ›z ôÿ±±*зüàõÝ/ö˘£¥>Ÿ­¬ÿ×"we•¨Åøö½tçgl3Ç]—‹‰ÙÖ£[íGºœãº,D@@@ 8 ¬X±B‡[´ézпUdÔ¸`�žcƒõ>ÝàïŒÝ;}VpfêqZeß[Ü9êÐmýnÇAŒ-µ·è¥3_S6+c›švWp&2BëX­BF/CÆ&@@@()EÛ`·¤í«Í? hß¼rÊ‚^j2Ó û»¬”y…|¿E…ºáÀ†™B@@@ d iG€zÒSö¦�þG˜fš×«ƒŒ°ƒâp@@@(0�"í(Û·OÙŽ¼)Évø½¡„øR�ªU z«l@@@�H(ÒŽ€„#;ÅÅÇWŒ”sÏþ8RR²_À\@@@Š¿€¯(O¡X<‡¯XdQ^5ö… € € P’Š´# $Áq. € € €G:ŠãUã˜@@@Â,pü©Wéÿów‡óÞüí1ø]EúŒ€àçrzÞ¼y ,X³fM©R¥7nܱcÇ&Mšdzïü±xñâL3³¾ìÖ­[­Zµ²Îg € € €Ñ#¹›7o¾ãŽ;Þ|óÍ-[¶d\õ 6ìÖ[o�‹‹Ë˜ùúë¯ßu×]/CM¼÷Þ{§žzj¨¥ÌG@@@ ÷_¾ÿ¬Vv‹Üéܼ7¯ëçf›y]'B;vïÞ=tèÐ?ü0Óù,[¶ìÎ;ïܶmÛý÷ߟÑŸiµl_ÆÄÄd;Ÿ™ € € €D�@„vLš4)£ yóæ}úôñz½3fÌpoxôÑG�8âˆáÇgºN•+WîÒ¥KÆÌØØØU«VýüóÏîœŒŽƒŒ˜@@@@àpr_ µî™FbGÀÖ­[_zé%÷øøØc�5jÔH+V¬¸ôÒK¿üòË@ ðôÓO_|ñÅzp@ðkÙ²åk¯½¦5Ý™šPù€ÛP»vm- ^™i@@@¢P ;–,YâŽüW¨PáöÛoÏx:`Æ Ç�÷ý÷ßïÙ³GCý .ìܹsð5S @¥J•2ælܸ1£¬`ðàÁê ÈXÄ € € €%�s]@äÔ¸ç‰_¸téÒrNëà´à ÓµkW-Ñœäää•+Wº‹Tó_Öi¥K—V±@Æúêøë¯¿ôR O?ýtud,b@@@�èˆÄÏÆgŸ}öi§�¦ë¡Çûé³}ð…ÑcÓÒÒ4Ççóe,ºæškôUš©�ŒûRSS_~ùe÷½íÚµ;ꨣ‚·Ã4 € € €+�µ. ÒjÜó�ÄŽ}žWËöz<÷ÜsÛ·o×"Õ´oßÞ]§ŒÓ2­?sæÌyóæi¦ºÎ<óL·Ž Ó:¼D@@@ Ú"±# Ô5øúë¯õàÀôôt­0`À€ºuë†ZS7¼õÖ[;wîÔ UªT9÷ÜsC­É|@@@ P k]@n¼@6‰ÏÈöÄÖ¬Ysã�7nÙ²EKõøÀ[n¹%ÛÕÜ™ëׯ×w ºÓ§œrJ]9l„E € € €”<�âQ GêAsçÎÕP‘¿¾;°E‹9\ Õè«´‚ž20dÈ�Œäð!€ € € pøÁÏž>ü-ÔŠAE€ßïŸ8qâ{ï½çžó¨Q£ú÷ïŸÃùë¾€)S¦¸+têÔéÈ#�Ìae!€ € € UÅ "`êÔ©ãÇ�w¯Š†÷G��óÒ3¿ùæw��VªT)çõYŠ € € €Àá dÿ�ÌçDzE€n¸é¦›vïÞ­K¢¯ ¸ï¾ûâããs¾<¯¼òŠ»~�5xL`ÎV,E@@ˆ6�ˆ®X·nÝå—_®ÇêªT«VíÙgŸmРAÎWH� œ>}º»Î 'œÐ¬Y³œ×g) € € €‡)�µ xƒ‘V¹úšÀ±cÇΟ?_|>Ÿo„ ݺu ¦ÌvzöìÙîcõ–¡C‡f»3@@@ˆZ�È­˜4iÒK/½ä^˜ /¼07ŸêÕw  (õ®îÝ»wîÜ9j¯+'Ž € € P9×@äÔDhGÀŒ3n»í6}_€¾ùOþÏ<óÌ! ß?ÿüóý÷ßw¡õtügŽi@@@$‰+W®¼îºëvíÚeÇ«Ž€Y³f¹ãü×LßؼyóÆ�gÌÑÄ«¯¾ºgÏMÔªU«_¿~Á‹˜F@@@ r_ ¼ÓH¨ (ÒŽ ïŸ¨é… .Z´È]šššªo ÈvÍ»ï¾[ÈX´uëÖwÞyÇ}Ù«W¯|?&0—™±_&@@@(FEÚ aüÜÐärµLŸØgΜ™Ñ} g äfGÙ®“˽gû^f"€ € €D‰€;¶Ÿ¿“=œ÷æo�Áï*ÒŽ€L݃�#xZ÷öwìØ1xN¶ÓõêÕ˘¯§ ¬X±¢]»vú²ÍïÝ»wÆ¢¼Näò óºYÖG@@@ ¼Ë—/×q$&&êÑ胺>¢'%%•)Sæ�;JIIÙ±cÇ!W+[¶lÆÖ4Œ¿}ûvÝG �ñ¥K—.W®Ü!ßj÷ ݵó@@@(vA×1iE@¦þ…"ÓT«V-ÔÒlçëóA}G@.2ÛÃ`& € € €.à+šãsëí5n¯V4{Ìß^2Ž�òÈ»@@@"\ ˆ:¤à~ÆVõ~$‹èð2ú"ù896@@@ò'PÔÉÉÉiiiù;ÖÂ~—L‡GG@a;³}@@@�0 iG€ÎSwàëY€z_Ï9Û]ë�t`îÔ�í:ÌD@@@ ¸ ÑÃÝ[îcbbT{¯¦OÝz"`ll¬¾J ì‚:Õ¸½êÐQé�xF@د € € € PEÔ C×gþ¸¸8}äÖo·é#·º4_ŸºÝV€g˜uT_»Èؾ[ÿ¯Ô‘¨ @GåÖhd$tOd* € € € @Ñuè õ[þ5öî~×go·#  ÎÇýð¯ÏöÚ û±?8³Ý‹Ûà½Ù1@@@ $ ]G€>f«#@wèS·î¢>„»Ý ÔípÓݦ:4áv„Ú‹ŽA+¨©@‡çV(„Z™ù € € €k�¢ë“û±\Ÿ·õÙ[ÕøÁpÒ# ó{9äÆÝ•3VS©‚LGèdÆ|&@@@(IEÚ 8÷îMèó¶{�€«é~,/�î€C^žL]n�‚ŽG}š>äÛY@@@�â+PÔúî~ÞVE€>{»eùîçÿ¢ép/•Û tÀíž  øþ9æÈ@@@r)PÔîaé¸êðu3¿š>Š«åòp v5†š>ÿÓP°°l @@@ bÂÖ U¸EáíˆØkÃ�!€ € € Pàáé> wX>xÓ € € € PH<¯�`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�B # �`Ù, € € €‘(@G@$^Ž @@@�Bˆ-¤í²Y@ �äää–²@@ O€Š€Â³eË € € €Dœ@¡W,ÜhçüÂ<ËO—Y®Ún¹;Õ’†‘ P6ÎŽ¢~EË[^Öɲm K € €”$*JÒÕä\@@@8„€wùòåZ%11ñ+æeqrº­}ÃtËI?Y,h Pl¼Î‘^ÙÙ~LìoY*Ʋ Ï((I¶ƒ € €@îÖ¯_¯•©Ƚk"€ € € Pì øn-ÀI¯šËŒåÅ^‡@ jÜ*žg�Šžß7ÃÇXl]€m‘† € €E+@E@Ñz³7@@@Â*PÀîs¨ë5eç°€û7úFç©O(à�³9@@(b*ŠœÝ!€ € € N�«X¸ÑNÃýŽ€pžûF�ÂpŸà~�@Û…³¶Š € €…/@E@á³@@@"F À*^˜gçä>iëßtç• ûA@@ `û¶.¿ß¯LOOWºs fëû·BEÀ~ ~"€ € € VVœ"Dœ@l¬ýsk"îà8 @@ò(\ëêþ+×­ HKKËã–rZ�Š€œtX† € € €@  " „]PN�hˆ‹‹Ó©ºOˆ–sæ<@@¢OÀ­ p+RS æá|TDߟ#Î@@@ Ѝˆâ‹Ï©#P<ÜçP P<¯G� € �÷_¿î¿„ÿyTäçð@@@Š©ÅôÂqØD£@ð3T£ñü9g@@�èþ�@ �o *òMÇ@@@(~WP£®!>ÓÎrñ\˱-j1öªgyK_²å×I–…×ÚÕ³mßÒÑrÇÏ–W¯´<¬f�<÷œ]ÉòÍ,i �³€Ûšó:,E@@ d ¸ÿ*>œ'PP²ÿ„pv € € €$qeªÛñ�ÒÙ²ÒrKO–Š€µmök[Æ/°ì0Ír�ÅA­Ws{yQË×Y~‘¯¯]ÜSÖÞ{RËør–/¯²œ“ÿ›2<·�b[„å¹ïZûÃr»ÅAí:gÍÇœz„�=7éö–Gµª>¹ڳo¶uº9õ6Up-m…m«ç,GÆÞOC ;¾) ;æ!€ €D—Àáÿ«8äçÊè‚äl@@@ˆ�ˆ«((ö§ `ìÛÞqÎF—-±ù«Xú—½w–3X?°‘M_\ÙrÎËüµ—fÚûú;ÏD8ý,›.ûžåÙN傳+{y 9Õ?ϳ ƒÆü¶°9=œã±©Üµ´µ¶ÞUï[º(¨ÑÖ¦Ÿén9çcˇVZºíœÓìç9Îsü?›þÞoéq* Æ_l“Î�Ø �Bp¿5 �6Îf@@(‡ÿ¯b*ŠÅ…æ @@@(�’Xà5š›œZ€ÞÎýü?~hsÛc™MsÖ¿Å o•ã�óeöÚ»Î6{ô´é);,³¶tgþÄù¶ä×ÏØèT zÕÖy¨e?÷Y[mz˜3boStw¾%ÁãlgÞ›sÉ&K·�«n?óZàqž•°Ð)pïçï¶{ßõc·süï¹Ogp|ú¥9K�*€5λÞsžJà)eóïp € € €‘/@E@ä_#Ž@@@�wE€3Ú<¼£�OëxËXçÜþ‰zMmÎ-ýÎõS‹m:Ä0¼-RrŒå-­,7;÷ÛßäŒÌ‡*ð8ãí':Ç9O°wªµu¾AÀ¹­>›UÝ;ð§ºÙ,?0k³Spù;6ç?]-§¹ãð6¹¯UO° ¯3¿1hÜ~ÿòüüŒM´w}göï=á\›¢”Áóäí¶ôI‹ƒš[4pÐ,^ € € €D˜vA8@@@ S ÜNGÄ©½ìTÈ|¢Í�J�æÎì´Uöãíß,³©p* †9µ�µušsF·ýÛÞY9Ç. 2Íl�)Ç[®ûÁò&çÛ r& $Ûš¿çZÛÖ¦!€ € €­@Ž‹öPØ € € €¶@¸+‚ÎoëÏö¢× ˹Îóó¿ùŸ3}¤å�!žçïuÎ`ô [çò––iN-À¨×lzrŠe±lΓ î>ÕŽ½›Sk0ó{›ž™e¼}·{ŽNMDûö¶Îxgd¾œsËþ¤…6çwgé§² ¶û6;d«æ|3‚»¢»ýʹyzBiÛ`Oçx>L ¹q € € €„Q€Š€0â³k@@@ŠZ ‚*òwêç¶õõÎè÷ç;F`[š‘µœ§!¼×ÛŽð zç,ž}Úæ?å<àñ�6}|MËUÎ]ú×9g—õ»¦ýbë\ÒÈòø,û8U{VÛôWλ~w:|n9ßæëŒÛÛTîZëž¶Þ Nææß¼mk}øknÖe@@@�¢ " ¨ÅÙ € € €a8hX:ŒÇqè];w¹Ÿu¬­X§²egNLm›î¸Ür®S0¨·M; °‰Í'ÿ~ŽÍ˜˜ÍdZñÀËœZ»Ò6öÆlK·¦�ó|þîÎÙ\}'‚sœuœº€YŸÙœë�§,¶ÉlÚïÙÌV�f³èÀ,¿Mö~ðÀŒ�SŽês—ØòË*ZÞü„å£NÍ…MшVÿšïtêSg®W6íwšòÈYúRÓí‹=vî´ ”.¯¬P:�åÐzùiöËbïꕟ|j�)×w¨²oƒÃþÅžºYÛY¿ÍR«ºó�MÑ@@JŠ@–Å–”ã<@@@@ «ÀaeÝd!ÍqFª»w¶­wNÚG-›ädÐÜì&�Qqïo¶(kE@œ3hçu†¾Îtîä?Æ™ÏnC!æ9[¨ågˆ5< –Û’!NÚ”Ç3®ªepEÀêµ6ç_3,û8cò#�µé\5gï«—ÚºO¬²Üh‘Mv¢Í|áhËœ{ƒcëµÄ2WÍ©¤øß[÷<ç½¹z—3à÷ÔŶî56 IC $ v謖ý0_¹2ÉþÊ¥ÿ¾L¹Ç³M¹äǯ•3ÿ±¾T_ÕÊnmí¯¢[(£‰,Í~A¬þä>åÕwØ× +¯éâ®{-SK·_a3ï½@yí×9ÿ&³ÕÝvÿeŸìŸÌæg½‘¶ôg·" ›åfù*wՋ럲§$ý¯Š²s�à¾cóß±iµ--gV©R.D��–奭˜Ð[«—›�ý{†·²ÿÙžÍÂK4¯Y¬eÖ–˜us@@�(þW]3pê € € €D‡@‰ªXmÃužol¸Î3Ðnƒõ ùÖòi¸ ÙjØ §žjN—ÈJ»!×ã”ØDÞš3ºþ”s~ÞÞzíßÿ´e“œþÛmÐÑóp[ËÓœ¤–¶é'Nµlîÿ[_Øô{Aõö:‡æ¼ëL»IÙ³3÷ïr6g·ëî«\p¦J–€ƒÎç« g)/yßùÕt~� ³�Çœ9‰·~©Ÿ¿Üoåœ9E`¯^®üä^åÅN²E—½¢xì²öÊò¹D¯q޽kÎÿYu@üvá&[ Âø–Ý”Ï鿼´R�L`ìÍ™ßØmß}ðíô5Ê:ŽRQ*ó:yxcEMW~µ\9,ÇßE© žÔ:}NAÙó…ÊûúZµÂ! �'„zƒÞNC@¢J ¯ÿœŒ*N@@@�’&©ÎàNŸÁÆíÜïٶЦWä8RäqFþ_pÆäOìmëí`9ù'Kç¶}›ÈÔŽ«k3âœ-ÿ¾Ê¦s{'®­[ðí‚.¶Íó�ú‚ó´éM³ì0ÌràÉ–SR-7Ø œg°ó�|cÓ£–[æ¡9{yû¿öž�7V�"+}éÿüoÊw;¼«lßoºrä,ûkÙám+Ñ9o·"›æO^­¹ß<1NyÝ[¿üð)ÊWÆÛ_ãnM�¦Š]ó[}ÄwOŽQÞÿ{/å=O:ÏÈ2(_ªlu-�Û»\¹pŽý:‹/c¿¼öÄ5PvíXOYÊ©˜Ø¼Úê/v9¿‘4¢Ù¯é�›6)wyÊ*+'X_vÒžP¿ÝµpÛcu[âl�UËd9Ðýkñ@ˆ*¢äBsš € € €˜@¸+œñŸ/°CY¹Õ2ŽËÔŸÿeŽÍyÏ¥ÿö/›^aá©ád¨øÂÿŸåŒ–kƒUžÛœ{ìÇÚ#Àn1öòø†–^.òüd·»†£9T=O±]kh¹g‘e]Bó,v†».›jÓŸ\dyÚ K·­´‡š{.ùÊÒõ±)„[ÀoßP¥”�Š÷zà#å�û+kÅ)"ªÙ/ÜÍ�Tvð„Ò*2Zâ(M~öóƒÊcvÍRN¾÷å¸ÿÚ¯ìÓ_°J‡KÛ%(�_cúé6û—&}¯R^úîX帽•»âL£íp{RÁûím|¾†ß~A¿2Ø~Y�œ“·z¬‡No¦w=¤ÿÙ:k•‰³¾SŽìîÿá;äѲ € PÈT20›G@@@ ’Â=0âŒü?2ûI¢sW¿ûú§`¬Ýœ{ˆÖйO~LG[í8çYúc?³év§[Ž8Írþk–ï8ϰ)}ãtË•,·ýjùz²e5gø¬n9Û›×é�iÓЦ—9#ü×~lÓ‹-öÕm\ÐÂ&+¹ƒnNz½Øò6ÿxfó|·Ñ2ÍÙïYN•Ángk¹o¬;ª™Çwå~û¬‰@±H_«C�ÿáÿ”ëWÛóùW$Û/š½?ÙøùoÇZ@ï„5ÊoÞu {4•©ù*kFÛ~}”-*�¬Û_°@º³¶×æ/sæX$´¬m=ùÖ±J¿þÏãùû}ù;S±¯Åx­°ê¯åM•£§�WïÝ@êëJ5µoxä'5•móÙW¼Œø~›e¶+dÌ X §7Ù/úó�Q~3í eËpÿ�† €/*Š×õâh@@@8,�b9’RÉn¼õ”s†ÆÊµµé¯œZ€Xg´Ñ\›³Òá°±M�oo9ùBË:oZ>½Çò†–Õœ1í÷œqx»Wµ¨Zç¨Î¬mû 8ß0Ó©b¸ÂyÆA¹6ÿaçìú·±éÖ-w;cþ/ÙcË=>§Fàœæ6}¯s¦þaÓŸ,²|Í9™9îX¢s�Ou¶YÖzšÚ-½6ð§öåG–/o²ÌUsäÏ8ÙÖìT"Ô®cÓç9þ~§ªâóÍ6Ç › !P’Ò­xé›Gÿ¥¼sÆögúôuš>÷é3BNÕ°_Ooüt¼òàŠûK•²Û~A$¯_ üòCûõW=¯…iö«áçI(šÈÒlseõTžÞÈ]hû�ÿ÷½ÊàŠ€Ø:ý5gÄ=¶tÁÆ_”_|h™«ˆ×j5;دÝ#ëÛï¡ìú¡íWÒÊׇ(�:ÏŠ¸B9 ×ÒVq–![£ ZôÃ’ÑÊ£ŠåÿÖ…<3 € €‡)�Ý¿Äs“¼@@@"U ¸�’Ääøã,+:cbÉÎØþ76TæyÉK}·M»í§ìg¬3î=Æ3¯êl¡‡SA0¤ž-Ýö»åƒ+,‹²-Ýb{Ûåÿ´·múêå– �qþÏÛtUçw:ëÓ>±9÷9ç8Ç9#�3÷ß#lþ�½,»µ´ÑÊr¸Ý¶ì2Ùr¦S ðä%6Ý KçOÿÓm¾�ôå· »ØÞ9Ìy{š ŽzúL±üÚ©¶°)%X ¾‹Nîú/ì.÷1«ßT^Üùjå®í‹O¦^˜ ü`ø‘Êá»UþøÊ¹Ê¬53s ØØ{ò.›½}ÁCÊKfZNs~íå{ö«gíç#•§Üþw·bEM=þRùùM�”¥s~¿S%ñ³ŸÕZ§×Éòk+Ô{;µdæ�¦=à�P+1@ˆv�\ÿë*Ú¡8@@@J‚@ÄU$m5Öo³\t³­½VsîxŸîÜÿ_ÆK¿{®ÍþÉ!·Éƒ›3Â4›9ÃnJõ|猭yœ-×¾¢ã´�5”YÇÐ53£¶oÔôꤊÊFõª)Kçü†Œwfšˆk¦ç¼ñ�ò„r�•y®)Þ ·’^u2BÙûß·)ïå eçk­)!èýë?לgµ¬6ô åY-­¦ W­â©Zí±/(ÏÊÃ3vhý£Û)�·Ç5Ð@@² " f!€ € € PR"®" ¤Bs^ ͱMûêô/ès§rÔ”�•#Oªlšãïà”µi�ù»Ê+�O´g Äè¿|4_½éˆ£ºæã­¡ÞRªù9Ztç­S•ýï¿[ùB�ÉÊë:Yý‚gïߊwÆ[½ÀK{ÎT>wíñÊêAõz™SÛþ¡–Ž9­§ò‘\—¸’Ù¾êÛrÞe«Ó@@�è " z®5gŠ € € €€'ÇÑ(|@2 ¤ÎÔŒ«Û”sfÛèwŸgìnÿà{ã�EGl#½>é’!Êñç<«|ã'ÓÝFû³&·‡…¬ZdOûßPæ(eçæö¥ Ù­©Ù…ßÉÚÇš¯§(§Çœ«ÖÞÐéÊ'”�þ§X:;NûÑÝ¿ý²«×ª³òÈÖ9ÿ µú€¤ ‹”?ÎøDùñvK5a¬ò“~–£&vR¾q{oe� �¥,ù\sÞüÜžÐõÞ~ÊÖ¥EÕ;µ§�k¶(÷l´ïxbâÑÊ¡�OWŽÒV¹ïpÒ¶jzÉÜ_”kS�ؾYÓÛ+6Rî]·Dùצ¦ÊöÕã•yhÛß×Ê7ŸdÏG˜$s¨-˜ù®uη”>Ôº,G@¢U€Š€h½òœ7 € € €@T äaœ%gŸúÎWGÿ¾)çµXŠÅ[Àý›^¼Ï¡0�>m›�E¯MNRþñð eÇK•ÿÔ·Qý+ÇP–ëp™ò�ÍVž2âå¹Iö$‚çï´{ì›&Ø8üדŸT~Ó׿ŸØB™Çñt½#- ·mûé%å¯Ú‘$´¢|็”û۳Ò6þ®œ5{¦òƒÿØq>9Ý~õ·¿ÀjÞzܪü_Ù· ÜyÏÊîÏ÷R^qƒ�õéÇwSvnaO (ë>ô m—¦ÿÙ¸C™ê±ñü [÷*ÓËÙ¹�™lÏbP+×}ÖN-÷÷Û{Ï™fÛügíZåÚX…Ç[ʪñEùeöÅŠ#E@@ Ø PPì.Œ € € €@þ ¸"À=·.À}ºø•Έâ‹ómÉô¿,Wm·Ü�jIC�H(gGQ¿¢eÿ&–—v´l[Ã’† € €%I€Š€’t59@@@!P(ÁûtGãyãÁ(L#€ € € &*ÂÏn@@@‡áPgŸ € € €„I€Ž€0Á³[@@@Â!@G@8ÔÙ' € € €a # Lðì@@@�pÐuö‰ € € €@˜è<»E@@@ t„C�}"€ € € &:ÂÏn@@@‡áPgŸ € € €„I€Ž€0Á³[@@@Â!@G@8ÔÙ' € € €a # Lðì@@@�pÐuö‰ € € €@˜è<»E@@@ t„C�}"€ € € &:ÂÏn@@@‡áPgŸ € € €„I€Ž€0Á³[@@@Â!@G@8ÔÙ' € € €a # Lðì@@@�pÐuö‰ € € €@˜è<»E@@@ t„C�}"€ € € &:ÂÏn@@@‡@l8v9û èP6÷ºòÑ¿Ú)G_ÐZYΫðv,S~ùÕ?ÊÄã»(›–Uìk�佚JŽ+­,�‹î”ÀŽ?µæ;/ÏUV9çeïÎn4EC@@@ ¨rñ¶¨…ý € € € €@a DyE€ñ¦íÜ \´>Ié·ûZ`÷ M}òê/ʾ]�V6-ë– l×ôw“îW>›p¡rÒeVGà.ÔD¶Í›§ù{—ÌVNûé8e¯5•ôÄ�† € € Pd|-2jv„ € € €@ø¨ÈÓ5H×Ú¿}Sùäu”=ÜByP-@À* 6®°' ì .0pª ª6±g ,üäkå÷ͺ(kuÅxËVÕœ†5íQA³õІ € € €@Áðy³`Ù  € € €ÅB J+ÒÿxG—çÂ[?U®ß7nÿ‡¦Oÿúee÷w+ïj¥Øß)šZûíTå]OÚ· t¸þfå µc”µô•zùÎí�+ߨißJ�]ûR3ï¸Ñ2¸•é3\/§^ßA™à<Ž x)Ó € € €¾‡oÈ@@@(6QZà^ŸØ½51¢ËßÊ—¶W­0C¹@ÿe´ÀnM.|g’òÅOÖ+Û^u­rD�*Ê,õšç6ûŽ€“nÿ—rT—2ÊÐüöÜ�_'ߦ¼m‡‚† € € €@! PPˆ¸l@@@�HˆêŠO©Šº5ªØ“ü}e+ÙtÅ,cüÞͯߢ¥-m6Xyvoû¾€Ò¡‡øµ”† € € €@d P™×…£B@@@ P¢»" Rû �õ<¡ðøeš³ÎÜGì;ômúoÊDgr_`—kÇ)ï;¡šÒç±o ðÛf<^ªŒ�† € € ATDÐÅàP@@@(l*2 [ÏH¥®§+¯=ówå3Oþ¥<êú”Þ÷^QÎo3DyÅQö|¯óm 5+8Ó X Aª?EùÑø-õ_îZ™>¹[�µ@@@ȯù•ã} € € €C*²¹h¥«7ÐÜÖGlUVˆ±'ÔoÑQÙtýÇÊ�ÖÇ+›´j¦,›å)�½Iš¿Ëc5G ·L̹·%]ë,}ïiå3ú�† € € €@a äüµ0÷̶@@@@ È¨È%yŒÖkж­²üó”¿ìl§ìV!sIA±Áú@IDAT@`»Õ¬ TWžÐª¡²Yíœ{[ì[ê\p½²izUe©Ì›Ô< € € €#�ógÔ‚Ù[A@@@� "`ß…Hþú?šç³{ûÏWF™u`>®éÑš?°ÆCÊ·¿Ý¨ÿÁã*;”Sdjöì’Í3žQ^8ñW¥U(åО«…}í¡%·«]ºú±ÑÊA‰ôùŒÃ+@@ ºø×at_Î@@@ Ê¢¼"ÀÆí+w¶'{ßf·ùg4›_µç`å•ó²›(U£¦fÛèžÖ?Öžþ}�3M €@I$-Õé¼qÏ‹ÊÏ‚è?ø�æÜø�õ¨68ÿfå‹çÚ8|p ¤mÕËyS_PÞû?«ètõuÊ ÛZ1À!j‡âêk�ÁWŸ¤Ì®v@³³ié­¹ÞØ•Í2f!€ € À³¥ø3€ € € €@T DyE@T]kNOÀçÞuoµ?©SÎ;ù6åù«Q>¡ÿ25ÿF͘ùŒ-�ümœrਔWö¨¡ ñ,- j>{þHóN”Ý*¢z ãmi h:ÎCE@  € € ðŒ€ƒ8x� € € €@É " d__ÎÂ'à«®}u²};@•¾ö-$}ÛTTýˆ^Ò@@(b*ŠœÝ!€ € € N*©Ͼ@ Ä¤ýý‰ÎåæA?+¤¸§õ†~\q“;mùÀ�ÉýSÞ²š:w‚-¹¢õ�Z¿ß¯9�ýŠöæöáZ—† € €À¡¨8´k € € € Pb¨(1—’A�p øª¶ÒîÏÑNÙfúkÊ×·tR^9¸Žré(¿«×Oym¯ZÊý½°VP»öþWzá´ô´Tû™¼XqïEW[Úë¼´ûŽ € €Y2ÿë3ëÌA@@@�#@E@‰¹”œ„SÀW¡�vßù‡/µøMåToce÷c»+[¬þF9ó÷ Ê–=»(ë„ì† héÞÝIÊôÒ-”—Œì¥lràz•SKÿûk-žðÆ®œVb € €@ „ü§h›pê € € €”X*Jì¥åÄ@ 2ât�ÛÙʾoß)ð˦ÞÊ:5B}@š–nùg“ÒS»£¢{ËÆ¹®ð7´=^Yn‡²iÅP{ÑB € €@” P¥žÓF@@ˆN*¢óºsÖ p˜ézÿúe*—ï²ioùœ6XºÅQZ< êÊwg®Pö9»¡ÒÆî35¿�äoXkuqõ«+«æ±ÃÖW³�Þuê@ @@�lòøÌl¶À,@@@(6T›KÅ�"€@¤ ¬ýâ=Ò; +ûŸd£÷!ûVK5ÑÒ~§Ø7 ¼ùúgÊïú^¦ìU%ó=ü�¤Uš¿èûî€fCê+Ëg^Eóh € €ä_ ä¿Zó¿IÞ‰ € € €‘*@E@¤^Ž "FÀ[®ƒŽeä‹­•1ñÿ(ßòØCü;]~«ò�k(÷÷ªÚ½ý7¿^îÙð·rsboåé^V>ùÂe‹›º*k}#À®_hάdÛæÙ­ª)÷oY“4@@ @€a"›@@@@ ¸PP\®ljáðÚ¯Ê2e�_˜ö94[œê”¤­ûIÓÿ¾çsåœù[•‰ߦœpÕ±Êï|]y÷äRÊ;/ꨬ³QùÕ´ùÊ=ÍOU“ȯh1Ð@@ X€Š€es € € €D²ÃM‘|u86(f©+¾Ñ¿ùmŠ2}Ïjåª#z)¯ßCÙ³µÝùŸà=My׈ÊÛŸ™¦üì˜ÊþÞQ¾ükY›}´²nгô’† € €@�PP Œl@@@�â!@E@ñ¸N%DŠ€·´Ž¤nGû�´êñJoБÅÖ¨«W�zÚþgŸnµ�ê&(Ú·wÕë=TùhË�Ê 5Ë(Ól›' >Jyjç Êà-ë% @@� " @Ù € € €ÅCÀ»|ùribbbñ8^ŽJ„@rrr>ΣT){Æ> @@ò÷/êõë×‹ŽŠþü € € € EtDÑÅæT@@@ #€? € € €D‘Qt±9U@@@èàÏ € € €Q$@G@]lN@@@:ø3€ € € €@ ÐE›SE@@@€Žþ € € € EtDÑÅæT@@@ #€? € € €D‘Qt±9U@@@èàÏ € € €Q$@G@]lN@@@:ø3€ € € €@ ÐE›SE@@@€Žþ € € € EtDÑÅæT@@@ #€? € € €D‘@l�kÖSMߦyü¶GÙ ueï�•I[õbÅú�ÊôÀ�ù�­TºjmeÝŠ™þt[ß¼~Þ¦}11zƒ/èHö¿?EK?}_9·úñÊAíR•³ßš§Œ?¦¯²Kí8eî[ é­üæ$ÛBµ³)û48°…ÀÎ…šóßþV¶ºèeçªÙ–懡vk§ ¦¾ªœQu òú>vÍŽ† € € Z€Š€Ð6,A@@@ Ä dÐ.q'˜Ó ¥­�«Å/NøDét•òŽ3+Ë9ÃÞþÕ_kzÜͶtÕA#ü†Ö}ÄÝÊ{úTQîëM $izΓ·)Ç|a£÷yoñzËI·ÿK9ªKeðø»ÿŸŸ4ç•)6z_ã–Êô¿gÙœ©¿({¶8R™èËÚ³ã3Ä—×Òê•K+ƒÇÌýëþԜϾۨ<$ó†Ô¿iþG?ZÅDóáÁÇ¢µÀæÙz=nø•ßæïÔ�í%œ|�~¾;¼•2øhRÖÛ‘ÌúËŽ¿C÷FÊÊ«¼Øö÷"å¼Ô¾ÊÃi�Ýóõö‡†=¯üdo.¶ä«ª•†=d.<"X4ïe@@@ ¬Y?7†õpØ9 € € €¦@ð°kaî'"·[ÿxטÛìYcî}N9±ò(›>®ºÒ°±tÂ1ÊG^>_Ù1æåGã&(m<ûf}+�‡X]Àsg7PnüäQå•?Ûv^¾åheùå)¯³Åæ¿x²²‰×Öß´i§òŸ_—*×ת¯¬’bg·v})eåše•+~ùU¹½NG¥oÃjåßAe^§Ê N튚¿ï¹1µ4}ö-({×È}“�í/yçiå ú/»–ìÔ><òr5-|¤«S°oóv�Ö¼ñ�²ß™ß™p‚UyL½¶�²Œ'YùãS·*oýÔ¦j¥;éå­Ü©<×ý;‘¶JÓoßc5…-ím{ßVVP®µb !€ € €@1Øÿ¹¦˜6‡‹ € € €ùˆêŠ÷üJíN•Ü-—ØøçÔ.§t{GöîÜ®é]Um¸B:LìqË^±ûüû½¢Èh6ö~æi™ÇìG ²ûü÷·xMœ´ÿ…ýôïPüüªU+<2Ën^owM=å–¦(ŸXÔLyÇK—+�«jãüóÞxMùcâ™ÊË�NSNû rnßîÊFÎÀ½ÿŸyšžxí«ÊïöÝÏÿ‡¦o½ês¥§LÅC/vU.üÆ*’×|ª¼u„ep‹k5H/_œÐGY×]àµçÔndõuK[ÅÁn;„C´øòöü‚䪱ä©Y‰Bµ¾VƒpÏ“ ¾P¾rVÙaÖì䛟9BùL«n˜öÀTå–S¯T^ضª²FeáOr:°Ó*3–ï´ckÕÈ–Æî{þ‚í±L•šÊ*û7­i € € P\‚?7—cæ8@@@@ ŸQ^àªÙ8|Óγtg¤ÛÝûßiO¤¯x´Ý^ß½Üoý&1Ž™Ïk#ÿդøm´9Î�n3ì^M¿5Ôî]?¨í²gû?qÓte�ÛnRj”µƶé‹wî�ï øãm«¸ó�µÊç;)vlËþ´ý;üe�UK•kJ[åÂÖe‹•‹NTnY0G9·ÒÉÊóºVVºûÛ÷qödþÑÏ^£ìSÕöëwž\põí¶ýmó¿Q~¸ûhåýÿ7TÙÅJ%Ôì¼6ϰûù/ùÊ=k›{PKß —�·J„Iå<Äo”ÝGØ�ùV]�ßVªj½õˆ¦ •î…ÊnKvöê4²¬ig1'ÞÖ Ôµ9-ްÁý•ïÞ¯¼ü%«.eøåÁñšcOh°fkžy�=•àÚΕ²™4@@@ Ødý,Zl�E@@@�¼ 8£Ûy}Sñ^ßFƒ7|ú¸òâ§ìÞødçtJw½H?§\e÷~Ï}õUå³KlÌü¶K›(­f@ÍgwŒ7lVIùèãc”}³%'Ýn#ÉÃýÿ§<ïþ¹Ê$ý—Cgï}-Ä ¥Ž¢%ÿ½ÝîÒ¯T£�òä(k~ú‚rN¼�~÷u‹²÷ß)GÞ¹\yÖcö®}—ÓoO7øeæÊ%¥ÎSÖ,­ÈÔ¬ Àë³ô9pkRÍä¿ÿµ-T:ée‡}µšÜ×RS­ÁãT.ÄÙn1õôúì‰OY¼$Ä+«øÙN.£YÕšV^òÜßJgû–^uÆô}S~Øø|Öo p—{Ë÷ÖÄÄ—ÏQ¶ËÅŸw÷OÂäÛŽÒúi¿ÿ¬\^º™òè«•Ï\ðœÒþ Ñ@@@�â)@E@ñ¼n5 € € €ùÈÅi¾¶Áo²!ìÊ�+{ØFî×}õŠòáoÚVå²�6<ê®Ó•ݪyÛøósF+§öµ1ó=γèËU²§å—‹»Lùáû—*·¯^ª\¹ýÀÈqêÇû~‚òª�Q6î„ñÚ–k6n¨¬úT±¿9sf¼ö•^'õ³ýö¬nÇù½»ÜgO¹?fȩʙ7¼¥üßñ-•—µ Þ´fd×bjjnÏ�U&ÖX¢œü®�Ï_xZSeY¯�QjrŠÒSÊŽ9ä]òif»u›eÚ½ jñeõ¢jÅØ Yî¤ÑTëz¾ò‰#l_îü[×jzE º²a%óŸùÔ•ó;Z5ÇÈcì¬]Tÿž=šN.mÚ ±VÒP7F‘§–¬µÿšþŠòùÚö]�­8ƒ† € €{�à£Åþd8@@@ÈY ë`lÎë—�¥ñUêêLšW±±î„ßmœÜçTøª6ÓtÛ¸—•w]5S²yíéñ­/¾Q9ñ {jÀþf÷³/ýàåÝKlkýZTTú<6^}’ÝøïY>û'K›ô’l”ûÛoíHÎ{|”ò´º9÷ÎØèø¦Ùo+ÿ½îHå�#š+¼6BÜbjÚ]îg÷·J„;§ÿªܺ³²‚þSK]¤˜0ìjK{½¿•é¡©+öS¶Zù¡òƒ'lÔýÕ&·(/okµi)nE€UÄLèõþæß0[“÷\ÿ?åÏÁ·øï_A?Ëw¹ò�‘íƒæ˜,UÕž5ÐÜØ<žôMŠÏ2ÕçÒÏP>kceí²fõg-¬oÑÌj|�ÝÊŸž»_ù¤÷Ë+lÍr!ŽS‹h € € €@T äü™3ª(8Y@@@J¾@”V„¾°vWy»“û*;|ÿ­²úe—)Ïj¯t[`ó×|�r×�V¿0äÉ9ÊuNÝÁà“­Áë|ã}«3®×ô316°^Éß·§Ø&š3ü® ”=*Ûÿª™Ê±�§)ÝVº‰9\öBåˆç­² çƒ§)½Ivç|‚ÕDXU@-¾“Þ3ÅFþ{ÚW.¨Ùþÿ~ë>刕öúPͪV}þºòéV#pÙ#]”5ÜMÜvÿþ©f¼ð¹}Á‘£)Ë;g}ðZY^ùmý´,!Ôà ²¼Ÿ € € €@±õù´ØœŠ € € €¹°!kÚ¯�ÏWjy¢òÊA ”·þ¸A9¬Ÿ=ç¿–o¯rÑw¿(—59NyKk{¾@¨!ç²�ÚhéqÇÖU†ªlµZƒE_ý¡ ÙÒ­N¡ã%×*¦ÛÓì7ì(§,½ò#åí/¬Uö½ãåÙmª(Ë•vö–¼UÓ«÷Ø{ë×ÊÒããµ#¯Z»–²^U;ƒô{z@¼g‹r_sžƒÐä¤Sõrà§Ï)_þÚr0x·9T¨œÓ¹k…Ãm;ÓU_þG9zÒ e»«oRö¯ëü¡=hôÞFî÷®¶§<5ñ åžã­áÂŽ¦”ÍÕI·ñÿT¿=ºà·�_VÞ4ÙöÕ uÐF¶4y¯m¹T\¨«§…4@@@ ˜ dù|XÌŽŸÃE@@@�<PpVÚ¦?ôzARCe»í~øc¿œ¢|ðm9¿¾ž�9?8ÍžœÑ}½”õCúÙHòæoßSÞ÷KÈ•´Ô“n£ëÓíYÇÛëLÍÙÎl¿eV3åée?P¾VÁžöÿúŃ•cNzTyÛ¿Uv»ßž¨ßʹíŒÉš¾ú£¦ÊG²QýævSž›·lK½çœÑ#”iuìFÿ%OÙQUª—‹ŠgTÛ¦ÍZÿŸ½îؼ�ºoÞuàIz™m ¤¬ÓüÙŸþ©¬uþUÊ[úÚU8ø©v$;~ÿLyÿ[s”¿Ö;Yù¯¡í••ƒ»¹üVñÓ›o*§|bO=øm«�ó׫kU݇ôQ&®¶¥_îTèQÛkWÛ17ê]YéóìRÒ@@@�â.üQ©¸Ÿ Ç� € € €‡Èq°úï-Q‹ÓV|£ó¹ô*厾7*Ÿ?×F•/½®»ò†±�)/÷X-@·«nVžÕ4çñpI®ØÎž,0ìíÕãØñ›–¾:e½2›æ·;öšiu ¥š§¬µ)h-oY½h3èå™ó^S~ûç ÊDŸ�Ë»;*;ïš©œ:ÇênïUI¹¯¬aó:Ûïjg¬Þ¿a‡¦íý™›�K•F�m¶­â[ª÷Ôèâ|[¸¿¥.ÒÔ£#îØÿú Ÿeì„B6o©†Z6xì8åÀ2v¦eí@Ô¬ i£ù¦tsýûk«Héq¦ò�«m£Ílõƒ›×* RwÙY7x�rx»¾­jÛ3bôŸž°õRåÉV8±çÛ©Êv·Q^˜jžS>OTxx´²Bµƒë4‹† € €�PŸO‹Éás˜ € € € ��è®$ÉjÝ*»ƒ=y½Mo?ÞÆŠï9ÃÆ~SÖÙhög_؈ýF„V³ñä¥ßÍRÎnÚOÙ£±Ý3 ÑŸfãë{“í‰ô¡z\Év·|ú¾íkò ¶÷O‹žú«Ý?à;ªRöˆOÀowÚ»oò&س.zpŒ26Þö³fÚ¯Êé­¼µ¯á}Ÿÿ¬ÜÐóX¥Õ'¨¥ý¥xnÌ=–öz+Ócÿ”v`Ƕ7Éž±ï‹·1p殮Ê«+*[Ö°úw�>ÄáëK:i�{¦\®ìi’m³í‡j¾²NåÅæ5Zá׿–+ý8Kù¿ÏmzO­ÖÊ o¨<£§ùTt÷5•©y­~¡Ûe#,3-Úÿ2¾¬S 0Ûž0á¥åÊN7ŒT]áGåÄ—žUÎlmuw^mŠU³ûFͧ•l�@Àþ¼§;ß=áwÿ&:sJöYsv € €@t x½ö‰Çç³ÏY11öaÃ�SÜ5B}>-îçÅñ#€ € € €@6¡³³YµäÍ l[¬“úbvª²åiW(oïgcøïM«œ¶ÀîÏ�=¢»òš‡l$¹K¬­ÿÚ³ÿSÞs×Ê*MÛ*O2HÙ}Å$åð—V+m$ÝÚ§úïANÎU{üªk´Þã¥l›w»¬�á{­Œ`‹³±ô1ÏÙûVÝwóýþeûì9ù³Ÿ§¼o¶Éœ1ðòmmTü’9õ"ùjõÔ:wO²Ñ÷Òe·À½^·t�r›3¦ºb³œ¯ª»M›ÞøÝÊ&ÿ üeƒÕb¤;ßP£y{MŸ9êlå‰G7TV¶b…ü¶À½sñ‡Fù‚󽋼�5}ÎÍ7(‡t­¡Œ÷XÅÁÝÖWN~p²ò¦»·Úœ1g(;T ¡§e´’%�–fÝZ€’ufœ  € €@öÁÕ î¿ݺ€ØØâýQ:§ÏrÙK0@@@Š­€wùòå:øÄD»¿:úšÕ¬Y²VY¾© TH_¥üø?s•¾Î]”Ý[×V–îîI³qò•¿ÎWÎøöÎ>Šâýùô¡÷�¢ €¢((þ¤¨ˆ‚X±` "Šõo¯ ˆ]TÄ‚bÅ ¨XÁŠ" (¤wBIÏÝÿûî&p!…„ÔË=/¾™����yönïnÞwfØ(m}¡yÈ�Ž·ÚÒ2|Òb™ÇFg"œ9ùay8›­þäm›¤›ÍOžîïçwŽ�¬ZSù jÛzøþ צ̗ºEºhÑNiÍ6 Ò:‘’|-e›­Ï¿a§ùB}›±_³~mi¼ŸÞ·åGåÜ}ÍLi§±7JOoTà“óÌ‚?&ܯ’ýb3mj×j$íuÙEÒ³¶–û6Ï“¾÷Åi�6IÛ´l,mXÍš›åˆ¾M?*ýtGké)Ç[ÌEýè¼ÏàM\¬½|l­ê<À¢šHO°< ¤:kg乫€Ì¨¨¨ö–Þ®ôt{w»+”ÞY¨€ @ P¸«DDøý(*ó¦Ø7êõëí÷]�¿Öʼ'œ€ @€ �R%ä¥Ê6è*wçÏhMõç9Ôy*‡›ãñ{:‡/Äòܧux|–uJ†8ižâQÚWŠú!@fá{cQùPTb”‡ @€ 0"øâÑt@ ô¸O (½úó«Ùçøõ3u=ÿ9Júeù%UļþnŽ[ƒ7k· àÄ„9ÉЬR9je€ P‰ ¸ó·wíÚ¥>¦¥¥IÓÓÓ¥®·¼>ñ+1ðrïš»zh¨ù¼#""¤‘‘‘Ò*UªHä%k�ø*"" d_Ô@€ @¨Ðˆ¨Ð—‡ÆAÁ@ 5=SÝôzl|:ÌuÜgÍ÷/©Þ[0@†#à.b+ xˆ()ÀÔ@Œ€ë¡Ý½{·Ú•˜˜(uýÀ®¯Øõ»ã ÖpšSb܈7$))Iõº¯‡øøx¥ãââ¤îë¡ÄNPP—‹ÆB€ @€ŠG€ˆ€âñãh@DÀëÌÛOL²™ŠÉ©Ò¸h›Ã%u¦ó믙ÿZn~~9¹�Ê�ãV—áœ!ÔÙê±úüK:§E @IÀ�p£vîÜ©>ÄÄÄHñÿäå,F£Ý+îÝÝè€mÛ¶©ÖŒ ûöU­Z5ipÆPŒ‡B€ @€��vÅh/ à2�ý·ìJQ?ÒÒݹúÖ¥l?¿ýõ¹Sù-;‡e—Ù›éŸãŸvKœ“ýl‹Ï:î#öž‹ @ âpç�»±î<ðŠßfZX6Üu"ÜW…û ·ŸÃîÓʦ ç,DTœkAK @€ @¥N€ˆ€RGÌ ¸Üu6ï´X€ŒL‹ð·pç©¶>Ç3_–~y'@AO°¸€Ö ð¿$¤!@  ¸3ÀÝÕÜuªù4¶L DGGë|;vì�º¯7^ LQ®'#" \ñsr@€ @€@Ù " lys6@ ( 8�Ù¼3U½Owcœ,w­þH'À�¥’å“/µ˜¿óº—Â]�À=_Fˆ�G(>ƒ ×»ë®ï®ï>A ÐúA{Ë‚€ÿëÄ}åÔ¨Q£,N\aÎAD@…¹4€ @€ Púˆ(}Æœz;SœX€Œt‘ð¸áN0@dD„râ¢íùÆîs|YÎøÒŠpcÜÕ r{K2� <¡V*܉Mp†@€€@ZZšZéÿÜøh4M,Wî«Å}å”kCÊáäD”tN @€ @(/D”yÎ ׳¥ÞV µ[®Ïqú»+Ó†‡Ùh¬ë¥Ïþën•|D€ˆà># Ù‰P µ³GEGúµAÉ�Lçäak‰Ç‰°\ € P± ¤§[ä]T”}æb( 7" 5Õ"7ƒÍˆ¶+N!@€ @ ¨ Ô—ŸÎC¥GÀõÀg8Þu×Ën·\ÇѾ紹<ÿ~+ì)t@ ·fG³’ÖŠ¤›?™‘‘)M1uÛeqî3 ,¡2>Ûî®�³ÑÎ~€ P±¸Ï`�€ŠuU*vkÜWKp>]‚ˆ€ŠýÚ¤u€ @€ �%@D@‰â¤2@ÙÜåÿÝùöÙyæšw]þÙ9þ]ǽ“ã—ô/Qä´ãîw+sç¿¥¥ÙüI×ܧ¸ë¸�‘‘ö×2�†: sòwñ€ P §_·^ˆ€kRp¾rˆ¸* † @€ 8"œGB(€@¦P@‰ÒÜåsæö»ÏHIµuÒÒ2öœÐ�p#|Þí¬àu<ÿYk8¥ÝcÂöY k×ÎyÓ¥¯-n*pF[im®Eƒ � KÀy*�×ùT-ý�,[å~á´¥_„v•=É>1�õ~ô· KÛ•¨Ý;ÓrZ«£cí“é÷K3;'=¼–Å®™³@º£ùaÒCª—í÷�+¥ÿ*-…FS% @€ @F€ˆ€ãÆQ€ò%à®P„€€¬eœ±ù¬õù‹8)ß¿gº¿;Οœf±éN,€›ãVïÆ ¸ðe=7À¶’�¸_¤•�Ž4¿‚[2ëX+r æMÒ‘×l“&¹Õ95y"ªêoƒúñÒH·ÓÞ-Jÿøñ éÔ•‡Jïyˆ´võ"2Ñ1 @  øvê$sÞ|C:­joé°¾ Òª{:Ï?>ôµùðý>µåg‘ûvý賤�býò}»µ±véf©¯^i£ª®×¾eìZ»B:/âp©ÿ·ß®MÊY´Ö<ùu›7”ÖÈZÈr~ôœôáö®¤MÇìs¶v�Ó¤ý·ÿ"�¶³Ž4¶Öé³î�sÅAÒ6Õí³;ÛŸl}Úú£õ}äkË¥¹ëUfÞæ±oݯ!|XTÞeÈ-5ÙW°ÔN@Å€ @€ TDTœkAK �JBÀ•ÏÚ½žm¯×ÊúœY…aaÎŒ»,gA¾>ƒ|Yy�àž=Åy:@ª³:€ÿ!yÕkþ ×ÜÀ‚d÷(§™Qáö1‘é¤ÃÝGd.Ò__òb•Ÿô¯H¿LÙ{hD›Óµ1î¾îÒÆkÝöß§Iß\Ò@zd‚õÊ{6S±í`‹¨Îðµ(`€ P¡xÌCÞîD›«?ûÙw¥�{Ï–Žè×LêZÔQæiàŒæÒ½Oè‘'ÍOÊý’ÅÍåaë”ùåÓïK3_/Ü~ÿžsïºßUòÉg, ï¢ûÏ“v©æ|�;gnÛû\åÜt¼E th-M_õ½ô�1s¥‡v²Ø„.!S0uì{–ÝHzæ5JûT_*}÷û0î~ÚaÒzN8_üaqï퇘×7 eç´”åÚ~ÿéYÒ¨H~�æ„SV[|¥*+Òœ€ @€ P0S.M€*w­þÜ}ÊšÈï®çïÄ$%'«X¦³#&ÆFå#ü��Ѻ+'§Ø,Ä”ô½ÏÈÝ’‚s¼ÎªÉ)é*æsa¡æ½(�Œ0›ßxåã6°Çš×¥ƒ>‘dYÆ&ó`¼üÊfšõ�¬@§·²¬±vç�SÈç³)éæÃOuVÈ:ØÙëß(À²*vJ¸Ï HqÖ u¢¢b÷?/±€Ê Ø•±ÕžNüú£6¯ò·fý¤cNi,�ްŒW]±Xzã“/HŸò\.½¦»åǾc*�A€JŸ@T#ó¥_fóeö‰o^r}¢u9S:ö\[u?Ç«g*çÞg¥¥oöí¢þq¶~ÁÍéH}òUévŸ­qÐcp‚4lûvéý IèÚQÚèÙo¤<`+Uio±7]`±uý»‘²L9ï�š,ýÁ (œ…ÙS ÚæW8Z%^Ê^  @€ @AB€ˆ€ ¹Ðt(;^7$ÀÏ_ízì32mnÞî$›=˜õL×cï”tŸ ஫2áa¶#»šì¿Êò[‘×=UjšÍôKNµ˜×üKgçíÿ¯{”ǯ~÷˜äT‹5¨^ ™‹ÍÏpï�öœäIö‘”¶Üü W\`+$ûG(„ÕˆWΟ㟖>u‹ôÖc«K1@€@ùð%Ùúü«¶8ŸïNS<‘ö™Õ ^Ìž†ù2í“Ú�³³8�ló¦Z¾ûÄŸì¼Rþë¬R”é±ÏÜÈû$m\Õâf¼ø¼©þç´°ú¶:O³�[-;Ú¾)df:ŸÏ~ß5bÛ*èSŽZ¹ý˜w�­SðÀèEÒ"öC«´vPZd©€ @€ P P/ M‚œ@Ö¼}ןmš‘aãýî*Y±NýÓç(¯³"Àîäí�sž#à, )ÿNmn•YÇÚŸTçéÉÎL~';KüköÏ?°´ÏSZ£ÆaÍmžá'µ�¶ï� Ým•ܾ‘ð*浈ڲÑö&  TéË~P;îÆÖØ·Ï0­ж�t̵�-“Ô_?–Þð람œ‰ˆ¦Ú޺þ-„Äæþ�fqyߌ{ÄÔJìcïj{Ȭ}2åîoé—eŸ«;VX §~ô�ôËÕκÏRúä–qÒ‚?é“WÛ±|ø¹ôö{ÿ�žtîiÒ>>kÑÈñÿHí»KÑmÑ�ê —£ìûÀÍcN—¶'F èàˆ‚¯øTÈ!€ @€ T\¹œ*n[i �€ à.óïÎÞOwb’�u¼{æûçœýž»S^›?¸+ÉfÎÇÅÆJÃs Û¦¸±Nì€Ï­Ù�È]]EÎ ¯¥ÖqÂÒÆn-#«Ù<ÿ}ì� � &àFÕlL\a€F´ë«bãŸ3ù晓¤·Ï±¾ìö(Õm€ô™ÓmÕ€™_®”6êÞEÚ&r£ôû·leœI/}/m1²»©û ž0›ŸßkØ@éÑ~Q�!>[èßÏ?�~v¬ôúÞS�Õî‰VN=û¡–x¤¡éIÒÌV'Iïékë¼òØéuN ‚Yä¡Ú{ÃWJOšoþÿÝ�ã¥UâzIï¿ÝöÎ�gß[:ZKâí! áÛ ùꋆXÞõ\é�#«IÝÕˆ’Wü®ô7[[HO:ÂzZ'Üå¦d™ZÙ¿fÊ´{ùœ,×WË|Ê‘ @€ @€@% @D@%¸ˆt¨XÜ!{wö¾û€¬‘fŽ×JøÎÿ&û�ñgíóYD@¦×¶v'Ûø}Öza6Àžšf�èMN1õúlÖŸk¾ýÌïË.Wô¿a¥k�aëO¸ò9éä�~8ü›nƒk&íSŸQl4¤!@ 0x"ÌK›ø§tìØ¥ÒC¢Íg¾<î(鈫ºI³bœÕr–|ô’r]gù]y¸´fÖ…d¥wͲOðpó¥·j• µÚe¾]’_^²OÕ§ª�mzNsi\Ë®Òó[JäªÿÙþ„'H.¿÷BéñÙU+íoi›?ÿšñö}ÃaQ­ºíWÀ<ü52çIûj¦ôË5=¥ÃZ�"-r¡j„»üëiHïƒ$5Öþ$}kòÒeMkJOîÕZê<”@±² Àw©² Ì9 @€ @„äBÐ @ òHO·Õ}sÄPçÜ8‚ŒŒL½+ÉÖâ�Š´ÙIκîS¨â"î>º ÈÇå: s•²ž¿~¤©³3¢M3¿BJ÷¼j¸t@k‹}pÍ»Å<O9ž“ì<þB€�@„=õæÐ“N–^ðí·Ò·¬!=õFóÕ·«±÷³O›2Ÿ÷—¾7øÏÍ.œ:ë ¹O#Ê÷Ÿ-°{Çé¶Ð¬`ƒ} §í²Dì“ï¿ÕÌbni ¼úütéÃ/Ø·—Û¯j*u-cÙ�J¼3Å¢2±ÕÖÜ[zÛ…GHÙW¬L P¦¸9 @€ @ | 4´S¾-ã쀔@F¦E¸cðþ~û|æ¾çè¥[&ÇQNVF¦ýÉpblµÝ=æñKïÉ,éDx>^‚"Ÿ'´®9k¤­~Ü£žµÜi³ ë†:ó�5âë6PN“Æ{½"ÞH›SÕy0@€@ È4ï÷Ö-æO_ó�ôÑ{¦Hn³OºAw�'½>æ-éØñŸHë\wº´KÝ2ü�–¹Zg|óá§Mõ¿sžPÀ~íŠnÔI:øZsî43Q:÷ƒ/¤_o6ßs³Vµ¥Ë¾þMêédÏY¸ëâöÒÚeØ]�ÛC€ˆ€=(H@€ @€*?F`ÊíûvÎÕ¹'¿f3d<Çœ&=£“ùÊò›±ù9K§¿.�•dãg½N³Õ82£F0T$Ñö¶Ü™ìÌ©óåŽÈ�S˜Öç:*W†=‘ t,:¢Ø[Ý fó�4Nh,má¿ò¦P:­§V@€@Y°ùö»vÚš>ÞÝ °s»ùÛÿ^f1nõì°Ã‘Ý¥ÒLÚ(Þ>[=}Ï‘^‘8I:ù»ÿ¤Îi!µÙö¥i¡õŽQõwŒ¶ ^yð+iì¥C¤ZGI]K]jùw?¿Mzæ�­Ð1ë±î~µe v­Y(ý~ƯÒo~q>ÙY¯kDÚÇÙŠç4ø@úäì?¤ß/i.=ýàªÒ½q€ÚÀÊ„@þ¿:Ëäôœ€ @€ �²$`QÁk™ëÔ÷ß§Ú¨Õj›¼S*Z§£ê=±‹�üe?Ó¼v‰³ß–ÞyóûÒ¾õ—ö÷ÚXZÎeAmR¬;[Ø“ö�ÒŸ>l«m?œð’töéP²æÛ½JÎûk�4¹¨ÎEOŒŽjt¨E+4‰³–cNQ6®í?Ï?Ð9D;=*N/<±‡èðK0Íßìþ·s³ùÖ¬Ýëðn±ÕŒ‹|GÊÿ4ì� ”$ïNÕö÷'ö­þÙ»¥µkÎ–Ž™`ßÿ»�ØG:ìè–Ò:q3é|Äe¤Zì@jªùe›Ÿh¿†¤Ù÷ç�›’¥ÍêìõÌûvmVÎò¥+¥[ܯØ>‹:\³Ã>73Ã6J—.µò}'óY kw:_å«;9ùI\síéÒÉ~=9s‰´O«vÒª!Ö£¹ßþ)Í<æ,iûx÷ÄJæ°Ì­‹µýù3¤Ÿþ±Eêit°´ïý¤'´µU“¾|ÐâÖzÌóßþl[áÊô·¤Ï?û²tÙ ÇIO=þPéÁN¯ó>“vc%J€ˆ€ÅIe€ @€ �ŠM BEؘÖò7Η3ð]©�nÏšÝòµ*˜7ª»4�a¬Œ•ÊŸ:ÜFàî\.)k¼AŠA.�ª1QJ$¥Ù\ÁÀ5·¥ßþ�¢Zcs[\6ð:é¹­÷Fy·ÎQ΋ãJãÃKñ­ú1@€@Q Äò?róõöêaûô÷„˜&tî.Òùé%É6o?)9EšœæD †Ù']x¸î—ŽŒvkPvH«3FH_³/òE1Ÿyãç}ð®tZU‹Sp-¬ÑÑJÜrOiæ~b²Éû�ãÛ�©æ|RG¶Q™‹Fšf™×‚Š¿~ãeéûë­/ñuÚIÏJð{䀳²X³cû*ÿîNÇJWl±v6#@ÊÊŠö»¬ZÅy @€ @(6U-¢¾ZuÔ)¤ç²×/T˜¦ú¶Ä«ØO÷-"`5›ß{õ“»h¬ù½/o^ñA‡  wƒÍ„}ËSÒ §=-½é,!keõ_xÍéÒ'®�"ýó†~ÒþQæŸÿö#›u?§æåÒ1÷^(íØÐ¼g!gÜ"¹÷Ëã¥Ã^š)½è�K¤­œ�J챨&Ç(Ý×�#”ñ�ÒëÆY¡Oš[~ïÓûHë8n¶Ì%æsà �â¨eï²mávKËpÆþ‹_iÖé´ÜíE©Ÿ6¬¹NqÎ}7äy¢Ðš‡+è¦ @ ?åö¼žÐªjR£ù¶K;"bb¥Õ\ͯ`Iå{ì\íϺÔԿ΋®]Ç� ößQ¢éÐZª®Çˆ›L Q±'º¦J5oTˆ¢¥V¤Ü^9¥Ö£ÂTLD@a(Q€ @€ PIÍ¡]I:} ݰi4©‰«¥óÿI–zCdžjhóÀ5QÚ¯µùá[ÙÄ™�È4<ñNé—3«I[76/¢gåŸÒWîSš>Ú|þ}üÜýá6tÖçN‹ ˜ÑZÚÒo§6‹aæ½ÜòŸE,X`ß&éÛ,?Í·BºpÁiœÇÈl^µ]xO5ƒ@©pG—kW�ÑÖnÛ%õùŠ3!¯Ôš«b·åuªš?!8ÇÈs!!€€€û™åõZ¤mh(þθdåÞD÷Õœßvx‡”ûË�@€ @€ÊŽE`�žf+p†„™‡<&ò@"BœDMk,W ZÛÚ˜³�*•Ø¿ 2ŸÔ ý ipµ }üç3Ò¾u¨�!ëtìÄË»˜êÿ¾f�èüÒ¾¹!µl� ð'i�:ñ1ö~OLJõßUaÓÕœçÄDòQa/ ƒ �<¸+ð�²ò!à¾ZÜWN>E*m6•öÒÒ1@€ @€@n8|r0ñmž¯íé?-“¦ä˜Ìks�þ›½Fšœ™&�ûõÇÒ*µ ò·‡5ì¤2'ÕXš×ä}[Zô²—>’Þ|¬3_©· ºàå³¥_?ðZ²�´6ß0}žôÑ“jH=^‹˜2Ôz4¢ÖÒy£ºKã=FfÃGWIlÏSÀ �ÜjW±ùö)iö>MI7­˜a µªØº @ °¸~ÝÔT‹¿ +ÚsÇ«§´¶¤ddØ·²¨¨¬eÛJªÚ€¨‡ˆ€€¸L4€ @€ P2‚;"ÀgÞlû¯QCç)Þ 3•}±Í±ÿ6Ñòó³1C¾Ñ®1ùívò›ßõƒþþ•oD€�SÖ¨__ZÓyœgjާŠB‹'Öž5д®ÍCÎmÞå“”yÞ1IßÛè·ÿ«SµQ×i0Ôbfß`i (Y¡Î¦QM{Îð›wHÓò� °�ÏcÑFç)¾K»9JÈÜH¤¬½Î†›ãÞB�ò%ïÖÞÄLó–×�7Í]eØAý”׿nÁ[GàÏS¬d=óØ÷<Ü|wy”T®ÖâÞa³pפ[Ä@/ç¹Üù•´Ò{ÍÖ)(òSö^¼TšÍ.^þ�­P�ôß3ÒÞ§Û*«õ?o¨ìæï˜æ4›·|þ[¿I'�×TÊ8SN>lw¹,½îcÃÄ©s{¥;ÑU£ÌçßÌy?yÒmµÿZ5œùÿ j)�‘b9›·Úû72¦Š´n5»§Å…[4Sí*ö�&νH € T\ßo„ót07í?W¼,?åƒ {é¬\€â¾Jãî¹*HÇ Ù ~©Å @€ @•�@ÐFØLÚ­+ÿ‘þ—n3fÏl�·Ÿ?sí—ÚûêË‹¥­=)íZ3?¿Õ¹s«­äŸÑBZ¯zÑðfl[§£V®\)-Ú‘:À1OŒy×5¯`aÆxv~=J%Ï>Â8ÌÞq‘ôõ�/–¾2½ŸÔú³Ç¼¶žùg·�”N¬~¥ôé[{Hëå€aç¬ÚÒf5çÈÖ6�@#àŽ»~ƒòj{D˜½§\uÛpbçvû6ÆÞî!Mk·Ø›ßÄbs0@€\îgº”�Òˆ2(�vú×iß21@€ @€‚„À�9ž+›U»fÑlibµ£¤­æB‘±VùS½WúnÈ9Ò —t–VÍ×ÙmôM«ÿ•&ÅÚêÜõk~œÅyjÀÃæ‡où°ä­Ù-_ëÈy£ºKãýÚ™¾m©ræüø½tÆÔ÷¥“~³uÅÓ-`ÇÉ—Hp¦´S£Ñìp¿ƒµ-˰’ËÆZ2ªÖaÒn'ž$M(|íP CÀ�KV¾‹†B€ � &à~o ,üŒ ¬ëEk!@€ @Å"�Ë ^¬ÚJîàôõªë÷/ÌwýÞ_E­ð휣£'ؘÌÿ´{þ�+¥m‡H[×ñ;K†=Mà积•^õŠ$ä—ï�ökR .¯µø‹iqº¤ym¿:-·+ÆS2l•þQ­-Zá…<Î`q [xDÚÿüw¤q]H/}ü=éI't•vL°È#r(ƒ@ÐpW%. h_t€ ì—€û]‘§ì @€ @(Oº¸Ë±aIótòñ#Î3-F3šåslÆÊµç³YÒ6#mVüAÎ3·S×Ûªï>|£ôúñ›¥§Œ�$}ð «)Rÿe¾-’¹ŸÙlü%öŒî˜Û“¶âséãïÙlÿV7Z�-ŠH÷Ÿ�aÏØfŽÿ<Í¢ê3\:å÷û¥í[וFû+8± gÌ×Ûâ y™÷?å.Üj»R3þ–Îúz†tiî8‚Ðxå·<úHi³ØÜ»•�A `„‡ÛÛØ}ΰכïÛ,`úCC!@€J‚€û¤÷»bIÔWÖuøÿ,ëss>@€ @€ʘ@}ÖeÖºj¶"ý ?™�ýŠCŠtZß;꺎§J?ÎãHŸòvmÙ.õÔ=TzV÷¶Ò(¯ùùgŽ¿Ezý´zÒ‘ïÛò×õn!ÍáØö˜Ç;dé“’Á#fIm[…K:Ÿ}·ô±!�¥ù?_@;÷±$m/)þSö©5{3´n;%;×ÍÞÞç¯w…2>ÔKúË÷Ù—çæ(åüÖ4kp™2ߟ=AJD@|È @juF†Åñ�¼€4€ ”w]€À�pAPb/*‚ @€ T|ž+V¨•Íš5«mõ© »Wý)�·ÊæâÖ?ôióø"Î3O7ßþòEk¥IUÌKߦY iÎàç\+—)g£ƒ¤õ�ݾÝvÔª”:Ò¦µÌ˜¿Y ^¯M©w=„^ŸE.DFZE…o±o÷|•ï™O¥ÿfëù_ßÇbŠáøó¿|î#µ°Yoé�SÛH£ ß•Æ P¶RSSà„QQQpTÉâ®�õ®wV psJö,Ô@€ P¸OpW¨hÏ8°oÔë×Ûúˆ¨¯.Ú@€ @(#*" ŒúÌi �r'p`ã—!" ÜÑÑ@€ ˆÀ�}£&"€ @€ @ è05 è.9† @€ �`&À@@0_}ú@€ @AG€�€ »ät€ @€‚™Á|õé; @€ ‚î’Óa@€ @f óÕ§ï€ @€ tºKN‡!@€ @ ˜ 0ÌWŸ¾C€ @€@Ð` è.9† @€ �`&À@@0_}ú@€ @AG€�€ »ät€ @€‚™Á|õé; @€ ‚î’Óa@€ @f óÕ§ï€ @€ tºKN‡!@€ @ ˜ 0ÌWŸ¾C€ @€@Ð` è.9† @€ �`&À@@0_}ú@€ @AG€�€ »ät€ @€‚™Á|õé; @€ ‚î’Óa@€ @f óÕ§ï€ @€ tºKN‡!@€ @ ˜ 0ÌWŸ¾C€ @€@Ð` è.9† @€ �`&À@@0_}ú@€ @AG€�€ »ät€ @€‚™Á|õé; @€ ‚î’Óa@€ @f óÕ§ï€ @€ tºKN‡!@€ @ ˜ 0ÌWŸ¾C€ @€@Ð` è.9† @€ �`&À@@0_}ú@€ @AG€�€ »ät€ @€‚™Á|õé; @€ ‚î’Óa@€ @f óÕ§ï€ @€ tºKN‡!@€ @ ˜ 0ÌWŸ¾C€ @€@Ð` è.9† @€ �`&À@@0_}ú@€ @AG€�€ »ät€ @€‚™Á|õé; @€ �ð ë1† P Þ]Ûutbdui�ÈbTTqõ%ª-|ü½tS›ã¥'/Ý6÷éwÛ›K{t3­^Œ¡ãŒ¥ßª†q_ï–v9ýéQu÷­.cÙwN™ i�szH­æ‘Še,™¡¦>2y�ô˜�H{4Ú·��ÒÚ @€@å&Àw”Ê}}é @€ @ "rà`€@¾¼[µë›§”¾Þ_:zx7iÓhI¶ù,^àëQwIø9=;7Ç߈CÎÒö„Q½¤Mr Ʀÿù†òϸk¦4Iÿ‹iÑG«‚Q/•“w]I¡ϼ¾@Úíþ¥žÌõÒÞþPúFƒÁÒ^(�¿ù|Úçó˜÷>/¾WùëÿùU:õ»zÒ£/ÈÕí+³fÞ,égß'H» Ì«&íð7ï&m}~÷}ÒGçZAI˜…yœv×ÃÒŽô¿´Nݾ4ýY3÷éÂ�i×õ¥ÑNc}»ŒÛ�?-–&œ-)9ËüOu½5âé‹+3‹VoÔa*Çø«¤=j‚jÑj§4 @I ÷·±€ì�† @€ @ 0ˆ( ¥¢—ñ™'p벿¤¿¬«)=¾smiÊŽT©×œgùZD›{\=ÆŒÆH^¿Hº ©‘ôˆU¤žÌÕÒ�~Gº­ï5Ò‹süWÉ«”þùW›÷Ûàð¶Ò„x¿Ú�Vâ&ó[î.бSMeêU�’fy‘¼•þþÕéÒÝHOkU9&I«+öG ÔÞËÝ.5Wïï÷˜ßþæ'ì-4zÄ Ò„\Î㨎'+ÿ¶S›I#�÷ªoÞRú•m’ýYdK•¸ö‘Ë¥=ìæ²mæ+Ò«&ÚýáŽçΔnw†Mߌ—ÿ¤‰ô¾1}¤­Â,ó÷¤Ã^“äk¾]ÿjßÏ/Méaç:ë`{¿'þjïñ·þ1û¶¿_�öÿJ’¿y´¯aŸ¡Òç®0ÿsUdzo‡rγûU\×S¤‡ÆJršãÛŸûëZåFwrza )‚E~²JßÚÛ8XkŠn¾D‹‰xý…Ù𢽋§¿)}4ó|+ïFøãÜ''\o÷d»ûX„½†=q³ô̬€‹†X9e”ôò—�’qßÇ"[+cÐMæÕÔŸÌî…Êyý±Òµ]Ï�ÞØ³�4OœršÄù_e`€ 5¿ß‡AÍ�ÎC€ @€‚‚@xPô2ßNš7oÁk·K¯}ßüçæG+œE{™ ¾ysgiuÇÑ’¾~žÒOÿ]úÇæYš½Âü:��>IÚ 2YúÈC_J×›û'O‹Pn·ëï•ÞÓ½†4Ûƒcñ›çÚ±£'ÙÁ—Ž2¿Ð© l¶ê¶æAÚ˜ä´Ý—¤ôßï½"}à�vÒÑ�•æ0¯•ŸrÇXéÄ|›bg®yÆpéc ¦Joþ÷xéøaµ¤ÿͶù±ÛŸ#Å l"vQ—GÜ™*}àÿ>–¾<Ë|à÷ô´wG¨ÏÞõ©¶3$þ {v=º•4<Äî65–| )LD€óî µ±Ú0gÀ64ëv`µ1¸šÝ?g,´’;ÿzAÚo†d³>Ö=ûzé·”úû½ÃšÏüØ.m¥öÁæÝdwéiaG¨Èþ,4^%z^z®´GksóXèHãšþù†¬Öý¥÷Ô³6ìþÇ:ÿègöZêw¥E:t¨j‘ ­;Y¯ëúu/é�9ÊYROzÆéÿ“ÕÒ>G0@€ P0ÿï"—d/ @€ @OÀϳð})V¢:جԻ´‘ƺ­<ê3oüò©¤/ø»¸œ’a¡æ½Ù•QSÚ°šíŽ:eˆô¹+Í϶ðCiHL7Éc¯_ íèÏÞ»N9Sn{Djþ�}-RMN¼HzýÂÑÒqŸ™ÿíƒÍ#—mæÌ\û‹tÒ÷Õ¤Cïî+=¬Š$§…µÐö%㟒vzåVé½!—Kߺؼk¯_ñŒt÷µÖ’a-gÍgæóLΰú1@À%Ùļ¯7�¶;Ff}'ÀÙáK6OûÂ¥vis‚Mî?ÀÑÖ´Å:öÉá7™êN»ãâŸrfhk‰þßxÑ×ûæ;O ðÏô¥¬Ñæ´'í�þØ,[+$3¬�4‚¬+Z³‘RíÚÙ,Ó¬9®y\ûLå…ýî@3~ ­k¾¬Kw�þûƯÒ/v™Ÿ§8c-ù?QüYÕÜï3I¶=8R©©Ù[úûë5×IŸprŸ¢¿ãžî'måïgsö"€@Ñ Ø»»j#ó¥g™w§óÞÿHúEDGé�GT—f߬|x„s÷ؽYéåKVHwgšc·zóæÒúáIÒ O–NxÑ4/KQæœW-fç‰í½¥c¯3ÿym«>_ Ï´x%×[¿jºyËŸø-FÚ·‚tÖg¤ž¨&Ò“”¶¨~¨4î»—¥'#rFœ4ÛìN¸á·O¥S-v`̈®ÒzÙ]UÚßâ¶Ðæá›IÝÛ�oK¢Òî4ùÌ�(=yêVi«³¯�ö=º±4LJSæÊY>ÉN°4*Çåø›'¾­6=`÷ÃórùÌýKú§=UmŽ}´g®æž´oûJ¥[d-ÌôÚ5Z¸É¢Ã2}–?ûóÿÇ;ü3–m²ü»FËçÏ‘þ´9(Ú§×F5 8âàZÒ"Ììµò§]yžô„z¹/¼u{ÃoKÿY‚A€ �<ô%�âdA€ @€ È r­r¿Ê¡í)[mnðší6«sõÖtiFÒFéÒeU¥±‰ŽGΛ¬ôÖ�æ\ïï™÷mSNbÚ¾¬ðVæ|ê‰nÒì}ö7ié é˜g“®6×”ÌüBñ­»H/xœôàx¿„[:Ã>;š ôy£~—ZkÌ×ÿ“>t’®Ü5\?jlg¿%?Ǥ_q’¨Ü2æ›õ¬;¾“îÌz+Úûë�A·IŸ8Þb>?IúêìHiÿ;ΖSÍß[ko¿Æ�ì½Ùé+ æ¹ÿ¦ï¥ž*-¥Ã!=-ÌæÌ�ö®ôw»…ì×>Q‰áW˜æoÖÎÆÜ.}¼ŸÅ/49ù"é#mÌÃH˜õèw'"ÀõÖ×h{´r:oµ–<øæ|éîKûJ«‡š'<Û¬Îu«H·Íœ&}§]é=ëH‹ð¡â³;Ð7“l’íQ�¤÷ôh”O vÿL5G{HL”ùÎýÉZn¶y", #á`Ó¢š×ÜùyXæ£ñðƒßH·e߈�rFïá‡LsÛŒ—íNkwêü-úøÁÚùv›ZÒˆüº”ûðÐå5=ØbŽhbŸ&_=5QúuÂ9Òûû[”ÁêVÆCD€(`€ äE€ˆ€¼¨�@€ @¨¤Šà¼©¤J¤[æ”_÷ÍKÒ«&Z\€y¯ÌÞÑÿ«f™‡°{ïŽR_êléWšæeæéêæ·Ãg«Ž·háfeêÏÖ¿¾�¾úÖiäɽ¤½g›_që±¶jwµÙÓ¥O>i>¢ó† 0íÚPêÿo‡³”3þY‹øúÉ¥s•tDçíÒÉw¼%MºèFéÅÎ#Rg/Rƒ@0ml~ò[om%ÍÌ\'ýò9ó„Û;M3½«T“Öj`«„Üôhoé ±ÒÜ.Þèƒì}úÀxÓ¬ Ÿ…º+{ÌdÓ�4«{ÁÜUÒĬ¨ËI]&™ü”y§3N½@zn[Ç÷«Ô^³J£X¬ÁáM«Hsœ$ڼd.6Íaé´ùå‹“¥³êZK;¾®4,d…Ôß"lï5çÙ½èšWÍ«ÿs§AÒãªç8›rò5�µü„ÁC¥�œIöaŸ?£ô}UÎ�ÞÚ¯±Ôîž2Ÿ`Y–Êß2�§´\t‹Ý-×ûÓËuHT'c8ñN»ïÚÝ6/ ow®²'dêoIëVhs]¤ÅY´¨e-ÝúÍ8éEÏZØÀ /\#íUË�†¶#ÙJÆÇYTEI˜‘I\½Rº¨Zš4GÈBIœ€: @¨”ˆ¨”—•NA€ @€ò&@D@ï¶µJýûo¼Ô|yy›¹––mÊö÷ï-cã)ÍϺSúÅi‹¤†=)}¯öéÒñ÷�$m°{£t}ß“¥û±Pó ¥:n�hOºÒÛ–ü)�þ©y·ÞùÖ¦±6ê7D:ê›ùÿùœ™RO»Ò‘ç¶—vzõUé“�<,ý©§ùÿo¹ì8i˪ÖÎÐØÒº[m�€¹«êI»7?g“FË¥Õœ‰ªáu,¿q}{yliÔNÚ;ÔŽâå"X­Ñ\½îÒÅ4$s©dñ+{#B"íý’3Ozõð/¥èAfïñ°øƒ¤×<0BÚ?a_ÿ°/Ù<ÿ<òštyǮңüåoÙÛÞÑ!ÎZúóæ[2Ë|‰JÌûʲÒκIú‚°oíY¥÷ùc7�] ¾‘¾9ß¼ÜCáuéäCn�ž×*JêñÙ�0ÕÞ!Ñ‘v2‚ûµðF*rÁÈ ¤Ç×Én‘e�YôáÓÒg“l»¨æÛ¹@‡¼v¿ùÿ§5 }î6»"F$o³Þ%Î~G:ô)£tÁCÃ¥ýšrO € �r àÿݨNÏ)!@€ @(K¸#²h§þiëxßìha.@ô±y—JYd3fg8O™Nß8Uéçg*œòŠôê—WKsG(s�…Õ·¨�gžë'­úÕ³Ò+Æ-”¦Æ·�ž{£yù.8Ö<]qÞÒȘi¨Ïñ©tu׋¥=š8ãAæŠÛÇÌëV«c/é¹ulÆò¦Õ7±Ýœs!O¡|rVƒ@%'`ï…º�-öçÔïß”~‚ô†~æó÷_¡Cïcå,üômékí]œPoÿÞú*µëªdãÆ…¸]{­¶•NA‹*šY/ªt8Gúô8kgTèé´‡–Ž™e9¾ÐjÒS›V—º£ÈžøÃ”2öiLÍø=ùJ8f¥êõ<[zs�úR÷(_â_J¿”ã1÷ÖèF=Ï—^ý›E<ñüWÒ#:UÚ2ÝΞä³ÆÆ˜ß½Pwg ‚ú *ߺ�{f%e�\ÃÉIr2 /™ÛTö§W'I?Øaëößt·Åk4p.£ñÊË|;þQöÛgKwd4ŽlTˆ«™WUäA€ �!àÿݨD*¤@€ @€*.œY×&¦ûåJ½=Â|æUòu6™iÁk·KoZ'Éi>s-ý5ÓæÞot¼ëá Í?¶~ÒÒeco“~Ñ?˦ôºi�I‡Î:R:þÞÿIëç–ñ×Où7xvI[vµ¹úM«øù�y³»ÍW–浈€,óؤަÝÌ·6¦Õ¡Ò¹I¶ @U§_ÉÛþSzI\wéí—.­áö×c^¾§w”¾rÿõÒÝ)}´�ùWN'}ð'+Z«qéàææ—à ×?Ÿ`žáAƒ–ImšØ°¿´§ß<ðÌuß)ç“Ev'9ôÂãMc$˜½ãÂ#ì½UˆÛµ×Jþ‰ô¡õìŽ7즃¤uj»7» Å¥YÜÐC7ؽ+ñÄ ¥Ï<ÛLZ;Þî5«9óö•2³òñN,€³™‡Ä5h®Üö‡Y îýË·e«Ò®K>ÇáûÐãb‹ŠšzÃçÒgt’>Ø9YºËg½kk1På`éõãËv'|`†Ýo{Ýtž´gVL‡ßX¹{,mƒ’_¿øºtò6»¿õXiC¿¹6ó6¯EÌ›ñ±tîß«¥Mލ½oIŸ½–2œ0³Èp«Ô½Šûc€ ä$�ë§gÎÝlA€ @€ P™ÂÅT™º[š}É\ÿ«ªo¦ÍƒíÑÅFX~­ÞCzn˜Í­a^ýõk’¤ÎJÚ·ÚؙɶÊ÷Ú5ë-ß–qWõoPÃ|n^oUiBK»Lé×H—Úò̷k±R‹wÙÞZ»mFð²eægËiæÁ«º[šä³H�¸V}¤Ým~£Pÿ� ÐZÊ9â´ÞÒÕ¿Ì‘~«ÿ2'¾àˆËTròåNä `Þ`¯×ÞSU;œ$½¤Ý(鸦KÛÝn³Ü[‡ÙûwêKŸJ¯×]:¶WCéþnÁNÒWŸ¨äªÈÂøz­ün»Ù„40Éß¼vÇøùë%Òˆ#[K7L}GúUƒÿIu³X¡‹/°{Úõ/Z›¿oo«“\Ñdo,€w«Í{ÿ »WÔ:g€´gý¸¹Up?Ѥ›J\Ü{®ô“ »g&%[DÀλV�) Ô’vÔú+¤‹vûßìŒÒªmNà–Rû5_ªŠüóî³Ò{¦Z�Ý®.Þµ¦Ô¿^m:æ¼v¯RzúÄñÒ±?Z,Cß[/–öi!ÍiæÐß¾â_éì?þ’Îún�4%=EúùÇÖßî''m]Ãâ üÍ—fQë6X™¦õìn_h:þÕ�† @ èäõ&è Ða@€ @€@°ØŸ;*X8¯Ÿ¾�:þ×w?—®ìj³FGÄO¶œ¤:ÒžCl&pØ*ó ^;â#é¿æŽÚcÿ)uã5S�móåÔ=ûé·”&ýeå¯õ»ÔüPØÓ�hç´| xªž =�O mngñ­´Ö^qƒy—äh�2²mþ=Jõz!{3ûoôñƒ•|{ä‘ÒxÜOÙXøŒ¼æ|_òÅ+Ò‰[Ì—~ÏùIO¼ÆæÕÿuÛ«Ò;O—ö�þMúê_u¥C°�v±’ýšy’{ßhñ8×aéýXæ2˜xÕcÒ ,š¹úíóõ/¤ÍëY¨O£ŸfJ§µ·U.ífñMOºHzý?Ýpß8›©ÞiÌùÒ#c̓�kËd,ýQ:þÝC¤�®µ8‚êÅ¿'x Íáƒn”vt–¼ÿþ©ô'" >çc”Ÿ¯eXÆ›£Æ˜æS(ªS>;ü³=ÑæT»·ß”PEz\W‹æˆÎÑSÛˆ¬ÓTÚ6þ;éKw=*Ýœ\O:àÿ®–êTCš×è»Ý‚—LµWѨv•;‚ô–ˬqG·k$­æ„x7Z¼ÀùZ�ÅKBÿ´×ÕÌôÆÒ�mì}Ë#¨zpwéU-F n^§T>@€@0à B0_}ú@€ @AG€ˆ€’¸äž8Õ’pè1ÒKÚÚ*ýÕ¿¶ˆ×BCÍSÖÌæÞ�ûÐTþxý/ÌSªv¢’Ÿ}lêo^ç)Ü/ÜfÎúßZv–6ž7_zþém'™·*ÊN›¯…6ìª}w>Ñ^šaÍÉ6ߥ¾yê%é¯Ioú_m©ÿˆ‘'ÆüZqÖ¯*'w�öt{Û,÷yéðT[}㸡'J3�wSdmó«_r¡ykg=>]:!ļÊ�¯¼VzfKKî ”¦’Ó½]:«ðklWñÖ°:—üø‹tQUÇÿ˜ÝÁ–¾+Éi¡ÕµÝõ¢s¥~ž*u×ùÏ\>Ué‘Ìó|jç2Ñ"Œ¦÷³ô€„0©¿í^·\›óæ'KÝ;‰/q­Òî$}óeçe'ÀãÜ-wlÚ¨"‰cU¯ð!-Uþ†§®—žÖÀÿ¦Œ<Ì›GÞÞ¬Ðêm´qâ±{s²R»•Xý�Å,ÌøÄ®ø‚-ÖÓØv'HヲŸôØF_qÛÛöLkçë5�6ô:Œ¶³-´®}¾ô?Ó^dI+¾“>:~Ž´Jï¡Òv‹'I¯|a“´ë K,}R iµýw]¥0@€‚‹_‚ëzÓ[@€ @ráAÞÿ=ÝOþæE¥û}³'c?‰è~!Oiн¿´^¨ùjíçèÚ�¾S‡­˜k3rßzù3é/ÕO’>xÅ©Ò ß‘ÞúðXé�ËÍuyÿ£¤íêÛlÛ}=tòFF™¯¯I3Ó浩¨óc­G±µÍ7Õ<Áæ£2b$Xаw÷®çIÛiþãÔèúÒ î¸\zññÒ¤5ÿH¿ûbªôÕO–H}µ“vͰôOã—Þ¶ÆÞ³ö>\Ú®QUiD¾á6c¼d×ðm3ßõûŸ˜�½Y_[à°»C¬tni/�î8ÇÃ�·}hm›©~ÉÅ™Ífß¼f�tÙr»WTÙUÚ㋌øü»eÒþ ­¤æã6³Š6̰»Óȶ�ÜXªÃrdÙ†Ï0‡x\&™;”þ{ÎRËwâªêÚi÷cžš­Uâ¼ lE†ƒJ(xÉ—nžÿMY}ÿOéE‹¬Uüö·tþ&knã#�“^{ßñÒã³;g\¡o�±õ,6Âî×y›AIÙ²\úÛwßH'½c±;:ž-}h Ql‘ }$ýméè—“›o{ï¾æÒ–%ÄAUa€ T…þ’R úJ @€ @AO€ˆ€¬—@T‡>JÝ= �4ÿE©Í»µ|êé æËiÎŒÖPÇcæ¿Ã»Î¼77 {Wú{ºÿ7m~ ú›'ËBÍ‹5dìíÒîÛ¿•~þãBéìßMí6~×~¥OœÕYšàº�:�§ô؇̧ôê‹Ko:YZûàC¤G·m!ír²ù©Â>¼MzÓÔTé~lþ=*�û©YGE4SbØ7KÏlˆRþTjöÞèø�×Ö5?ùM·](=±ê¿Òç®·Ú/O–zj$=óÚ›¤çß\ZÝ»E:wÚ‡ÒqoÚûý†OìžP­™ùr�¸TÚ{ÇûÒ3îš)MÒÿ=vÏuJ~´g³�‰I£UðDkTHx³Ó¤Ï=a‘�­UZX<€ž ÒÈP»´n_Kš4ùY驟Iò7�½ßëŸlóÒ«mþÿZç˜Ï¹~�*R¯O²Ç¬d‹�Æá…s펑;:iOQK¤­�¼yó£Ò—–ùÝdC-Ú¢ûˆöÒ†…¸Ù„Ö±(Œ~gHò7Ÿ1^9çoÓd'ü Ñ<ü2­� #ö¶4mùtåÜr«]�¹ÉN÷<öÑY»yKiçný¤Ž·»ñQÍ­�¶¯Íg1¿¿6N:zÊÒ]óþƒíUqv‡Ö)«*§Í)ƒ¥O¶øRúȨ÷¤7Üg¯ÉGï;EÚ:;TCi € �`&Pˆ¯TÁŒ‡¾C€ @€*ÏŠ+Ô£fÍÌW|f¾�ÍÛ¬ûßR’öìd3~mVnÞfå·-±¶§4’vnWWšs1o‹Xõ­yüÞK=N:¼{5éú5‰ÒTÇ™¤DAæ1OTµVÕUæÕyâ³íÒ––vìhÚ¢†M“u§Ð*±¯yS”³þßùÒ_ç.”ÎÛÒTzñÐnÒš[̧´vWaš¢‚˜µ¡fkgm¼LpbW^RS “’ëÀ¨¨ò©ù’7«]ëRkHVwüÆ>{wÿþñÒÍÍ—ã÷ìwmîcÞd‹X<×î$?.5/îÉÌŸÜ s—tË›¥_ü÷§*ÙkaÑJW¯iáCö¾ÍÓ¼vE6­´ûÚíæCNs�àß�³ZHT¼Ý÷šTOïPb_óYmë›�}s\‚´]#;{¾w-í3³ûç¶¶ÊÊòíRŸÏF«cê4‘¶jl¬r´ß»I9Ÿß}Ÿt\㫤S†¶•Î'Ÿ©’Ë?#½é“ÝÒZ5í^]·åÑÒA—ØÝ²yŒD�Ú&ùó+[bGÝfÒ–-ì¾× ¾Àû°J”œ%-ýI•}±Æ˜w;¦…´VþT{N›²úW¥§­´ûŸc þtÛs @€†À�}£^¿~½zhß±0@€ @€‚„@�GÉU¦›¨plü²"DT8”Aß Ÿû˜'Ú ëYAÏ€ �ûFMD@0¼6è# @€ @ �ÂM¥Ìq€ �ŠBÀC@E¹´€ �€!Às©h( @€ @ ø(>Cj€ @€  æRÑP@€ @€@ñ 0P|†Ô@€ @ Ì¥¢¡€ @€ �â`  ø ©€ @€ 0˜KEC!@€ @Å'À@@ñR @€ @ `00—ІB€ @€ŠO€�€â3¤@€ @€@À` `. … @€ ŸÅgH € @€ �€!À@@À\* @€ @(>ŠÏ� @€ @C€�€€¹T4€ @€ P| Ÿ!5@€ @€†s©h( @€ @ ø(>Cj€ @€  æRÑP@€ @€@ñ 0P|†Ô@€ @ Ì¥¢¡€ @€ �â`  ø ©€ @€ 0˜KEC!@€ @Å'À@@ñR @€ @ `00—ІB€ @€ŠO€�€â3¤@€ @€@À` `. … @€ ŸÅgH € @€ �€!À@@À\* @€ @(>ŠÏ� @€ @C€�€€¹T4€ @€ P| Ÿ!5@€ @€†s©h( @€ @ ø(>Cj€ @€  æRÑP@€ @€@ñ 0P|†Ô@€ @ Ì¥¢¡€ @€ �â`  ø ©€ @€ 0˜KEC!@€ @Å'À@@ñR @€ @ `00—ІB€ @€ŠO ¼øUP �à!àóùÔÙÌÌL©×땺9ÁC€žB€ �à!àñxÔÙÐPó ‡……IÝœ@'@D@ _AÚ@€ @("Š‹¢€@0ÈÈÈP÷ÝX€`æ@ß!@€@ðð�u¿ºqáá�ýSšˆ€ày ÓS@€ @€@H`cp!”�ôôt�Å]  NÇ) @€*,7.À�ˆˆˆ¨°í,¸aḊ½€ @€ �JE ÒGØúÞÎÂÞZéÑÖ{¬@–¾E�Y¿½Š´~�¨ Ô0šdp×  ›!@€Œ€ûýÐý®ˆëÀë€ @€ DÊ="ÀžÂ½}ÞÒQ¯¥I/¸ã2i‡ê~#Þ5Ê™<è(éÙ×I‹b±*\·û�ÒwÞ¹[zB¿š‹RQ‰–MQmó'\"=ùÕæÒG_}Hzþ!U¥9ãìYå‹_>CÚeð'R‹"ÈÓš[ïf.¸Gzltž%BB2~׎G:/½eAR>…<»Ùÿ}«ƒÿ~àÒ¸œÝ8ðJ9åDÀ…Ørj§… @¨ÐüŸ#àñÒO Šð«¸B_Z@€ @¨LÊ="ÀFMÂ< °î“‘Ò³Wí’N7Lzt­0iHhI÷{¿•þ{›O’fev…ÄI«Dî;îâÝ>_ùoÜs½ôñßZH/~±´sí¼G=2þ~N{O<öjé·‰’±Zªåäñ3¥Ÿ]~°ÔéÉžšÍeßî¼{¤·}{®ôê~Û¤»&�“^Þ>^ºo¯”U«·äödžJ�ªæî·xŠe·;¾•Á�˜¢Ò?ÜÖUç1ª»fYTÂñ—Î•Žøü-éÅ­œVûv*ýƒãç¿bÑMJöêùÒn—Rg+=ö¸>Ò·õƒ@e!àŽïV–ÞÐ@€ �Ò"à~o ¬•òþm\Z„¨€ @€ �r%P!"ªv™ <9É<σÏü?éÀë«I?~þé!±‘ÒšÍZ›ú¶Jg=x�ôÒ¯-gØu—KÏ=é0iÌ2ór�¾c¸ôù�=¥MyDzõq ¤û{£ùðOºÕÊ_qTuiŸ|ú"å¼7ü6é×ÇÞ+}là¡ÒýÏi¾m?+ã¹[^Ι�ÇVh�#•{ÍóoJSž.½ù’;¥�>{\zjýc4©Ê ‰±þvíc%ûÔv[—¡ôœ%÷HC¾5)¼…ÅZëÔ±h 7" ¦z¬Òa!‘Òª5,¿N7" Jé±N:ÊV1¨éåî I­¡œ*{«- •�O ¨ W‘>@€ �Ò'ˆßùWú¯ Î@€ @¨0Ê="À%aã5Ž2?ÿSÏ­”ž>p„ôê¶K§ÜrŒ4kR¼§¦Ò�¯zRúd5›Q?fØqÒû«[Éë–JcÏ+�>é"éÑõÌ¿]8³’ Çœ*=ãôzÒc$©æç_`!?µî&í{Fwi¼ë˜·ì,ó®µùöŸÝik³3 øZÃz7üëKòûÖ»#ëúŸÙ|þ;6¯¶½Uì¼5«ä:¥r‹n+:AUy(ï#‡¶µ†­F°¯ RFëpÓÜÖ,w9XîS¶ù4€ @ Œâ÷Fÿßœe„‰Ó@€ @€ P^*HD€Û}›ÅßøÔ»¤ÏÞgsÑöl'�÷¤KwlØ ML3»òôÿ°þ·JÇck|øìÃÒ±ïYɸUK¤K–®�6Lsgñ›=º¦­P'Ιë®TE²¨æg©9wÙ’ü9Ì·û/mÏœ¾FÚ°ÏQÒV6aÿ@-ÌÖ5¸ò»ÒË\�ùÔ”þçÓÚÓ³ÿéq¾‘>ØË¢ö�ଠ»ŸBªƒ @€ �r#@D@¹¡çÄ€ @€ �²'P¡"œî{lúc†ßgêòð®Òß©7ÚûçMÚèæ¤Ÿ�ÖÞ�Žfk¬Ä ÓçI=ÉêÏËi�¦üÿf)ý,,×S2*aŠ$$yÉOÒiŸí–Ú:û9Í·åwe¬²Ê´1Ì»EÿôôÿIGý{¼ô¾§�5r5=*ÎVø�HY!�ÿËoÒÈ‹ŒHŠh*=æpë{”Ïš¾eµEUìòJ 0 عy³tWHœ´F¬�%'%I÷cIv–­vÆZ1¹ºŸƒÙ @€ @eA€ˆ€² Ì9 @€ @„@Å‹(LÝ�okÿ쉤MœA ß¶éJ�l±tÍh[Ûÿ­ ›KÝŽŒ¿ŸSúÄcóY_ûöšyà§=`Ϙ¶73¯ÔäÛ•;`r^»öæÕRòä½›J™§}ËT{BÇ>OIWëÿkv£’_Î}DÚm×,é+÷ß,½ûõmÒþ>•noñ9ýìvùêu•í�r—ôî>'HwEXŒÀaC_�~ÜÁüóu½‹¤“Î9^:â—DiámLÿÖ*<¦0ÄZÔÆã³,bbDÇ{i¦”� @€ P P ."]€ @€ –@9»m½Ë'©¥çc~ø÷ü§ÿÇÚúöc~˜#½±£$Û’w(µyÓ&i´°ÝüÛI™™Ò”[¥7U‘ºóó3·Yy›1¿³g \1ÅÎøÜéõ¤9ÆHR-Öà�CºH'œûµtÞ¨îÒøœzåx×Z¨À�#‡J×êN‹=øe<=ùR¯þ…„,ÿØ<ÿw}+ɲ0�µy銖ÒÛ>}@:ô„¦Ò(ýÏË¢ZÚÆNs4¯–Ú^rÝÏÛMm;óY Â#—^°ÀV(øáÓ+¤‡”ó+EMÀ ðæ¬Ø©>Œÿê?éÖÝv×*¾Õˆ³{ÕÐ^ͤ‡'T-~…Ô@€ŽÀ‚ÍöÃ앹ö+pÆ ûv´2qïOµfÕ,:»Wsûýui{ûÖ¶¶å³åøµÌ è; @€ @ ”³Ÿ×SÓf•_5aŠôB  Iš÷štÄh›ÓžÛ6N6ïôŽæÞrµÕöñÕ¹÷Ø<ù£sg»9>;q†“ Ý;n”_ñÍ·šcš'íßÜ­ÃÎ9gùýRÿˆ€ð†¶¶Àu÷ÙÞ?7Î“ÎøÌ´Pæ‹T±z�•vjbkþç5Òcýýïí�Ò£ÎKꊡM?³¸†¶¦ùZó‡´ë×E·I�*çWS¾md*�¾Z©–œv¨Eý´k�Z"­úk­½ëÝšŸb±TÎ|•µmùé¯ëí¹-ÝŽ´UTRv�Ì|‡ãížWMZ=&¯;™v`€ 1�4'¼òæ¯íGÈ‹s, ¿ïn¼À‚ÍVæÙÙ¦C�°ƒGw·ß\‘–tÆ·« »ät€ @€‚™@9ûp=Õýî}MÝuõwTùQ©ÛBòŽ(•§d¤éŒ)é6!5?Tyšyì×~eÏè{ûò"6ļgÇ>úµô«‘GH£ >¾îEÚÿæ�öl…þ =*ä³yÎßÞÙIÚçC ŠÀ¶ÝöînSÏî9±‘ùºÂ UWv¡ÿgï>ࣨö6Žï¦’z‡Ð, ¨Ø±{U¬¨àUñµ·kÁr-E¼VìbW¬×ÞØ+¢"¢`!H ½&!m÷}þ3�l$a“ììþÎçÃÃìììì™ï$³›sÎÌlׯúÛ§|kkžµÄŽ^�šÚš3R5*Ö.þë”ë•—¼jcª_¿FCl„ÑcÙ˜¬¦Î´0{–¦ßúðå�?þ¦œñ·µ¸·ße_eÛ¤<åÿ�¦\j¯´ØÑxØyW)¯Ú³©²¡�Ì•V’™ € ÐîX€#^´o ÓæWû¯§¦î¨�û¾·¿þ~[iß/^;ƾM%Öl5κ¼1¶¹^ÞUÔ@@@�mhà5Þ€œ•zÉâ ì…n#Æšš\ïÜ5 gåM/X`å>Yœ½ZÓ[>7XhϯóYÝüïÞS¾¾±BWZÑÍÿm£Â—÷ûÊ·_·³ Ëù‚«¾Óü¿me¾ÚâZËÖàq3”çî¡<â㕯¿s­rÏf{Ŭë�'NP»$GyÒAý•[  %T6¼­¸ìàÁÊñ5¨®uáå­°{4øìB¨�ÀÆBû-NÓI6ÙÚÜÞûët÷ý½ÚæôO©~�‹kÄ@IDAT¾½*´$÷?@¯ÙS™úD™i;d½ÿ„ò‘ ½úññV•œb»"@Û {:é€1ÊI§÷QÆÏ}]éKª˜øÈ±ÊÖ(¿©²5õú¿ïPÎÜ4�ÿ@@�Íîuj:À}y²ó­ÃS0Õ¹¿ÀÎUnÛÏù"µù=¢}‚Ѿ‡Ù>@@@BjÐ òª›\öÊ9zïÝœ¬¤ ÓÌ·.¨øLGÍRq¶Ó‹¶n¥õ>åæÚµó_¾ÆúÕ_®dÉ�Y/_£'le!»&öˆ�ÕxÒoçÄîv’mÌ^“¯PNxúHå swP¦Z‡_I d¨©ûn·l9úyåÑ}lLAµJÆáZìÎi+�®Á5l4Ä´q”û¼   €@ Æ¿cýäuW ídÿm*qÍÚëõ}ú؈€Æ!G›²+µ·‰ûÁùYZöÍoµ£f�m£“æ<÷½ò£[mÏB  € €@­~Ynß(Ü{Ôn%OÚU¾y«-¯øÈò�6Hà´í»Mß–µSiëòNá[™wö5E@@@`›<6" Üw °3WWgÏSæµ­|ñÛG•#;VhÉÿZóÇ÷±Q;U9sÂÞÊô }e�Å/iþéƒÎT.Ö¿m+ɽ�Ó ®¹üEåˆ ×+ö˜ò¼�3”¾�VóWÆÛx�Gs�R>xî>ÊVj¥™•—µoiþ•G쮼­ÚÃt‡N-¿vÁr[g ^e‹Sˆe�ç/°q4n™± ú¿¨›^ã�ÿóWÙ[¯µË¥,Zm×1)γQWóæ5V¦¬³cˆ/`—]YµÌ®ó²´Ì5ÖhÎú‚ ’‚ €„ <ú“}ip¯ü:¿:Ó—8CÄèfËîbC¢KŠ»¶ÇgÚšoÙ§hÓì(ÿ¿Â_¼Q¾½l € € €1-à±ÕÙWÁ õ#ýNo[ÐúüíŸîAíÎq¦K"hר_0÷ge^«±ÊÌV Ú2ÌW}ú¸ò½øã•§³+ìü“”·ÿt¨òüÑ—*[°ÆzòçÎi¢L)sÐ ­šÕÞÊMýý¥ÏX}ºüãråÿ®|ìÂû•¯´´ñG÷\³¯²m®]adéÁû)·Râìíó�ÍjTeM¶²žF@�¨X°®ò/Iv‚¿¯À¹ QèÆ¶·¯3¾ç�¶¼åKË7æZV,U­¹â’Ñ1‡ѱÙ @@@ª%]Èù TÙo=OyÖveéáGZøÛ£W振<óò�•Ÿ6n­lÒ äÏØCs®™ngÞÒš+›ûíüù÷¿³Þõ`’�hÙÞzË[¤:ÍDš²bLëxWù¿9vþÁר¹µMCÖ¬‡u[‚ëµþe‹l[ú¿Ñ�ÊŸÝ8÷'=ññJ;b®x_ùð´¾ÊÑùO+/|r‘²âˆÍÜ\âÛØ‚Ûï:LÙ+ô¾y &@@ –*þ¹–ètmO·?þ|·|aùôÏ–îüFÚôOK-¯ýزªRñ‚rU-óû‘­@@@@ Z5è®Öújº�3àÝëOÑëNzð�ò÷î§)ïØ³•²b “fVQ¬.Pd½YŸuTÅÅÛ«ùÊ�ÎÙ) ñUu`Ùk×LT9iŠ�Híw’râƒÿUž9ÔF=-ûMùÅ—+ßxònåÝï­Pî0êßÊ—î²+>™¤¼æ†QÊ¡í©{ÑéÊì3D9h;‘æV¡È–/[§,ttõFM7ÞOyåc·*n[íV!g,ÃçìµÇ½ië\¾Øú';?MþdaѦEª²ÚkÔ²b]`á²&"((´_ÚnÖlæxóóšÎZlGÈ­}IŽ Åi—f¿ÅuQRö£Õ>q®] ¥q•‡E;Ìý:åzåUN+»&J‹sÍ—Ù_ý¨9Ë6;¡]ºréó6 iÞ;¿q˜{„°ãaöûv”;÷ë�”÷^½‡² ‡)P@@ ¬@§tûæ0{Eé”B盆;àPî[_`¹OWËŽöÄ7Ðþìó… £´‡åJggÍåfFñC¾jEñÎeÓ@@@(/àôá–ŸY�ƒë·Ïþ;WyÔ�*ÏÚ¥™ÒmŸh5pŒ¦ïþp婨üä‹ï”¼øŽrI¶õŒ-œ÷§MçÙè€fÍ­Ç,=ÃzÕÒ§)SS-SR­÷,¥É®Ê½Ú$*WN»GyÃK6}øäS”»¦—¶*éa5Š�øía;suϳÞS® yMj;¹pã픕µµØ{5nÝQÙn§ó•ÏÝ­òЮVÏ‚_P3ü,å[y¶Ìî#OWÞÿîåÑÃ2•iîJšØ°CNP>ý�½ê!glÅ�¶J_¿ _T~xÛÁÊVˬ†—²Sd³ÁeÊŸ/ó¸fnÖâ‡dZº%óò©š˜9aoe�QKÖÁÄ¢€;àîçjãO>ügeAž£>ÿÑŽ£Ž²óíó‚vôh�š¯ŒäRœmÇê—¿j£>ØXÓ›W¿JÙ:ÁÆ(-]œ§,rÆ(-[mM÷��6ÂhÉb`PäåâR›jºmÓdeM�Ñz @¢L`ÿ®mÑìåG^»×H·¯ >÷ºnÿÿ�Ûœ•ö¥c+Å]óVŠ¢§+û+5Š6�MA@@@�PVV–gfZ?sC•¢Õvöû†Œ–ʦõÓ4á\›`êËsôŽ=Fî§ìloU—Àr=7ûó_”+šm§Ò¿­Ò¿Èz½Þ�‘­ ú­]*¹‰]k C[¦O›På­OoC®½ªqZÈÐŒ€­í›7¬÷/iç¡Êþ�l=!KèQÅÔ¬‚Õ)øâ[åú>G)÷ëî4‹iŠ‚@$ äçצO;9¹þ~žkWÃ-w×L-0þpëOodíÙËŒ?ì*!�¾ºƒ21Ζ9õ;Ó~½Óð½KÛÕšNrækBeÝF;Æ\ýzsååGÙ«ÜR󻔞óõ*;zÔä‡kùG/¤lê³Þþoî»YyoÂHå¹é¯)ÿ›{œrÊ©½•ñ ?T^|Ù[ʹö¶•Ðêç*Õ]éTº$3@@ V~[iß=j÷J+ªüË”ï »œšo… :÷=üƒå–K‚óÛŒÓl|b¯æöWUíJ}~SukX»ï«ÙÙö÷f•¥Önãy € € €D²ÀÖº™ë¥î Íœ±õò^%o’ÜIûœ`Y­gýü}÷Ü«üÂvÑœC;”Ÿ]­Ç~ëÛt.ePvñ8k°ë–5)Ö6–ÔÌúÍv=Ô’‚^عÇ2U;þhk¾þk]šrMœývlµF:@#±øíŽ!™}íØxÒvÛ+3>±n‰s¶%¾óþzx×s–M¥Ü5À¡ @@`+Ûµ°ogílC ïž^ùxÁ›¿ØÊJÊ=}î [Û¶Œ(·BOøÁ|åÓßVq¡ÛnŠ;à°Á¶æp•äþhUWŽì©´3þ+/Vÿ¬÷ŸP>RqS⬕9Îg£BK ûS=wÑËÊ+i|ÿKóÇ÷RéKœë³Œ™0NsŽëFËu) S €IJ@¢ó¥àå‘…B¸ršýI{ÿ YÕ}B­Ü{œ3о¥Ü¸—}qç„. Ó|¯Š…½Ì6"€ € € P"àÏÊÊÒdff8{“ÐE¶,P»»žÖçÝYkWÃ-ouè³³–ØÙþ•ôЇ.U›é$g¤W¿vv~~MŠ-¿bö×ÊùÝ”{íÔFiwé­¼Øòkþœ©œ½±½rP_»»JR™‹ØP�…ŸþOùR¾]Hàœ½2”K­UæW§‚~kÝÏhkëoÑHAA@*øu…}y|¦}sø0Ëz»ç¯-ýR’™a_;öïjßLN`cz;wÐDK}~Su«]»ï«ÙÙÙz9#¸ëY € € €‘.Àˆ€HßCÔ�¨¨]ûe}¶³Ö®†ÕßYkólÙkÂ9.À й™µy§Ó^ý�Á’ € €À6 Ôç7U·²µû¾Êˆ€mÞÕ¬@@@¯ pׯí1ê‹Q!�‘b›‘‘R�å£bƒÙ@@�ˆà³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/@C@Ýó € € €DŒ ³+¨ € € €u/�P÷oÁ; €ÞHNNö^¥©1 € €Õ`D@5�X@@@�h`D@´ìI¶Â*�ŸŸÖõ±2@@�hðÖxRFDóÏ"Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9Ê�ð@@@�h ! š÷.Û† € € €@9�„r�cëaÐÙ\ÈF‹ô`cn¾²È}6äɲ“öt\RcejRÙgx„ € € €@¤ 0" R÷ õB@@@ btD@0g®0Ÿ¼é-e܉§+GmßĦ ~U>ðÏû”¯ç)¶P¬ ¥Íþg(ï?wGeSgdA0µ¦ç/X«,пš[gFûÎÊ6©5{%K#€@td¯±#Ç¿_ü]¹.¯X™šdG†�ï©l×4YIA@@`[°-z¼@@@� ø³²²TåÌÌL�U|«´«Ìÿåe�­S8î,åè2”qN_þÂ�ÿ§é§~o­Ü{¿�•™¾W>þÀ;Ê?z©¼zìÊ®!½÷�hÎ…¾¬œU¨¨Iñ§kéQ7ߤ<­O|M^ɲxL ?ß~kZ’“ë¯?¼v5¬éU\þái 5síºlå!ýr”oÍJS¦7n«¿õ+fðOå�ù*¯˜ôºrû;NRN·Û´0D9lÅTåÓ×¼¢üu½µ*õøÇÙÊÛG÷UfTÕ�’¸½ž½ò¡s”ûµpÚ¢K5ýú5”Ÿíq¥râ�6Ö dù?kúÎÑO+)  oÎX¦Íü}‰õù÷î`×(Y³Á}ñÛ*å%ûÙüf©Öb}Ðö”·|`×ñÇY;wÛ¦‰Êß—¬Wöëh#‰öÐB¹MÅm/m:÷ùJî¢b×,¨Ö]T’mäBªU­Kpí}ÖòæÊí»Ú;†† ÖX ÷¢Õ&Y¦�ßovMÛµS6¯0¬$0çâ2/ÐŒ”8g¿Ä…êÕàÕ,Š €µ(°pßeSíS~òö©ªOsw¼Àì¶Ì½Ó-ÏÜÙ^|óÞvϸ$›s%ôTÌm<Œ € € €@¬ Äêˆw?ûéÿ‡�U>0̺rš'ÎTÞ~ìÊ77**)¿¿r·æiC|þæû(ïzøe¿Ø¶4 TC`Öëáé%´wo›ž•e½ý qÖ%}þ^6§Uc§‰[S>_‹4;Ÿíü½m¤À´9Ö?¿|µ¯:dØô3_8ËgØ8¦3mdAMK0ç½dÊßUÆ;Zy|_÷.*s4ýðY“•oUã.*­÷£%'ýße†Ó7Ì_£é¿Ù]T kÚßî·vêô¶�”­K®Ãb+~ú@yËC¦±ï¿ìè}Jçsžýú9M_ðH–ÒFl.ñí5yÆ-ÿRÕ9¤¤,ú×Ê“úÛµNÎ}ò¿Ê#?µAPÏüiÇÆá{ï ìœó£ò©‡­þÏî‡)¯]:@U‚Ëg(']eW`™m§àÕ¤ømTÂq7\§³�{êžµ\·z‚òÚ“•ãnBÙìº3•GdÚÇY0`ÉCOV>uá@eú†”·žkõ¬º˜h×ã/VÞ}´�AXþ¾�ü:oÖPåä‹)›ÌOyÁu6vã´ÉÇ+wŠËRN¹à~å2ý£ € €@} ¸×¨éX·vÉÎ× wLÁÔ,ûvq…s•�Ûö«é—•úÚÚºyFÔ�+kE@@@ "bpD€õ-y÷vå˜ûìÌX;#Äçk´Û)ʧ.°^8_`¹âÉqv6é“öxs¹ES‡‡Ìr¯°ùéÒ‰ø®š3îånM�Þ»ÀJMrŸõ_ý°ÓåÚ+�ç|¾‚ß5=底ˆn�a½mÒOó6*Ý…Åv$¸ïÓfʸx»þ;ÙÈ£ô4ë¥_½Þ–œ:ÓúügeÛôØaÖ/í^£þ·l»ÖÉN]m� lvÉ•o3l¨SõŠßÎr?õ¢_Wð¨òšûÞRö½åxå &‰ÊVý+‡¬üTùìÞPÎqî¢Òí0;0qÔvÊ*dã.½w¬rŸæîñÐzÐߺáVåC/UŽ?ÀÆ”´Lçÿ¢é{ÆÚÙþ•g W�COÔSç®ùRÙŇ‚ÆiizýÚõÊÄf6š µäðªÉ­û\˜÷œ}.ZæmÿÒœ¾zºÜë¯<ñë�9¦w@Èc&@@ î~Ynðî=j÷.Oi¯›ç|kºâ#›~`† 8mGû.Ñ·¥}+ˆ…Rò½+6•mD@@@�`mH-vµ³Lïía}k §>¡¼u…bSq®0æ–«ôøønùÊoî½VùB—‹”ÿ=¤�²x¦u�p�¢L z\×XÙ±{e¯fN·TÀºç~K³–—´6•={´Vnê³^¬f4ËH�‚@´ ì³½�zþËleqÀŽïͶQ –G é©ôo-¤éÔd0jït募ÍQN›cÇ®½zYþºÄÚ°G ²uºeñZ[gFJ Û³�»¨t?øT½vÒ[Có„YÊ»N~Dù®½U%åÏ×ÐÜã_·§ü͆+o½ßšÙûº'õÛìº)ñ-µÞá£ß¼öà:“ùø+»ªË�ÑvŒ-ùx‹³k¼ß¶È _ ÐÆ�l¤C|À*Ú÷ä«•ÏŽR”)Á¸oœ�ÕjwñùÊ£ºT~˜ŽK²µQ@@ ®ýÉ>»Ý+ÿ×ô½.b¯8 ›å.[ºÅ]Ûã3mÍ·ìS´iv”ÿ_ùwš(ßh6@@@�XˆÁ¶«“šµWöhf½÷‰³ì ϸÐz¬«O;}û�€-tºÖ‚Îsmj{®\)¶6¤‚@¾rùßYʹÎÝ)}Î5–æØ+r–.TþþG®Òz©T ¬opµ³:;·•‚Ñ+°h•ÒÙÆÅÙÁå›,{pìî”eÆØÁÉ×6Ý–IvŽÖqÃ:júÁl ûlg7HkdG‘u¹Öeß2ÃÆ"5·�µ-î]Tœá›î¢b}ï'^o㡎îbýíß?–#��ó?VÙthùp^mÖºoMÇÖÖzkßP[@@@Â.£#¶âèÜ5à‰Ë­ïè‰2‹Þ¬G‡>^:«â]‚9ôôêü¹Ê¯±» TRþ²Î¯³^ªðŒ?]³*œ¦Za1f €€7fÌ[§ŠßóÞßÊÃر¢ Èú­×:�ÑÍ[?¶[œÛøzµ²±î™íîü¾íS4±Æ:ÈK^{h?[ÏsŸÏSŽjÍÝýÛ×l\Qöû“ôª±“ÿRêŸî¢2øDå#gÛ{ù6\ê™k¯²´Ç›Ëš:&d–{�€ÍO—N$X­NºÔ®°k†ÓO´ õ~úàåO;Ø1ïÜ!Í”ÎsÚ°?5ýÜMÓ”%ÅoWIèsôÙÊ;GØU¦?õ”òç�uK4½Ô 0~”�ü×.ô“-®­ærõuÊ!« ®8Á¶«©s?—¤–c4ýò‹AåºE&°`­34KSªÈv)áñoÙ~9ã<[s§ÐÆó8«U«.�•­�ñš  € €@� ,XWò}¡Ü»$Ù`A_�]ø¿Lq¿=´Í¼åKË7ìµJJUk®dѨ˜ú¥&*6ˆ�@@@@�ªBûMª^*Öž‰³³^O¿ãZå‰Î]¾žt¥¦Ÿíj÷»¾ý°öÊÀOÖ—uô�ŠÍÅú”Ö¯²ÓM z[£Ó7ï§,éA ,Õôë×LP~¶‡­mâ�ö.%-1ù?kúÎÑO+) ­w¾=_›vôNÖ§½[×�Ê`ÐZµ“,ó�«Ù7JJÒtû ;ž„ŽÐC•Õ¹ÖgŸä¹Ý–ï¡ÝÜsÛmù—¾²õïÑ«Ÿ2Ñi×ÄVKó]ŽÑ2wt·ë,þÄŽlw® yQœ]#à¤íèwL[æ»oR¾”yŽò¦ƒ¬¿½øçÿ)G? (SÊÜE¥k¦žër•9i¶Õi­;(»wo¥Üt<´1MË4SÛÆd´ïb\«\’n¯uG¤÷é­é·Ü¯<çÔU¢m˱WÛ¶Œnº”]ÛåÏ·RÞø{Oå¾½m|–ßg í?XáËúæK›Ôå–(¾üÒÆ{ëÊCÛ—©®æP@@ .ì@Ù’è|O?ÃæÞò…åÓö§•Ï�ÿÂH›þÉþó]û±eU¥â÷®ª–ŒŽù|w‰ŽýÈV € € € P-�ØÈÒÒ%–…+—Ùt®õYUYŠé©W®°Þ°û~³¥Úîsª²]IÏ[�¦çÏ™§Œï²»²eÅ+Í¥ €@¬ tk�¬MOŒ·>m·øýÖ“¿}{ëçŸ9Ï«÷î¤LITTRÞœaËôw–w_ë.”œ`ëéÐÌFüåÜ©¤Ks›“‘â>¿¥LjÖNOwwï¢2ÛÖàà¼4èÜ?Ž[J™»¨[¯xÉ|gÉ2Ql'êºwQYø·¦K®Ðë\#`iŽÕ0g™WÿüÓÎÞ/9dØ6®qNÕo¬©­–8q|åÏÛ;žpÉ!ÊÒ%eì·45þãèÙÁÙÆMO•ÿ?Á>“œAUƒEvÐ÷û�*–=�@@ :9wSš½¢ôSºÐù@vÇùÃ:¾ÿXnÓCzÛýœNz_Ö*{íìµÛTœ»L¹fœV2%tEŸÝ®GG?]:«â]‚¹¶u«óÿP>rÃ¥‹†Ne=®Gç¿:Ë™öÛ¶Wav%3üvUÿ.©üç··)§Î³ûÃŽè¨L*´#ó«�g)[Ž8S9нs�¦*+i™6²`øîí•Uµ”×ü¤gýü÷ÊVÀ<@¨C�ý»Ú€Ù+J†do~'÷ºéö§›Ï½.€Ûÿ¿Çã6g¥ýa·•â®y+ EÑÓU}ω¢MdS@@@@`“@ŒŽX7úŸþûugåOTîš±Q9ÿ›Ï”o}ð†ò_O<ªÜ°åSI|¸Ë¹W+/ŒOùzŽ]¯û²­ß¯ôÌ=(Sœ3c—Î×¼Åël:®ÈΉ]°v™²×ÊÖ D‰À?v±{…ìÔÅúº¿uΊŸüåMŸµ‡�QºlËg¦[;÷ù�­T¶jbG˜•ì¼÷ÖM,Ï¾ÆæäX+øä/›*÷ëocvëkã2Û9ðnidCÂQâZi-c&Úˆ€ãºæ+¿½ïzå ].PN<ØÞ=ðóóÊîQl.vdÛ°Ú¶¨ çÊÉÿÙ[ÙÑm|Ø5YÞºáVåC/UŽ?ÀÞ¥¤e:ÿMß3ö9åÖŠY­ýãWåÊ6Û)÷:~˜òíŸR>•9Z9è´ðTήÊkí¦l¤•«óª¯ÞRNœµÅÇbû¼XVduÞKÿ( € P_§î`߈îýÞ¾ Ù�2å¾éöаÂ.@ä›nC·Rœ¯ îš·²h=]ò½+жˆMA@@@�*¶ØéQå«<ÿDú@롺µƒõ u*é‚·³L3w¡<ÛɳЬï+7×N(ÉÍ·æ&¼µ›$ÄZ‚seéøk‹JL°e~|t�²ïqvžêàJÎAµñ‰ÉÖ_—â¬Ç¿ðSMÿû¶™Êøt»6vËÁû)Oîlë¤ €@ô ÄÇÙq [;Ú¤¤Xþú|»ÎÈ·ó­‡ùØ�íÌÿsö\¥\•cG›ìhÐ4ÕŽ?îˆM¨<ÿ½½v÷íZ*ûfZ¿tÅ’^uÇwÅ…mŽs•eÙ9š,\¹\¹,Ï®uRe)¶± ¯_c½ú͵¾ô6ÃOV¶-i^¶«¥ÌŸ›¥LÈ¢la›¶tn]°ôK‰0î=±ãe62ëÌv ¿èè?•ÿš`u{%©³rÌõ‡*û7Ùr%ìÙôí‡*Ofª%›¢©²%¸nŽfÏ?˜Wå'öVßý€n6îrüp[[¬•Ú«ÅšÛ‹ € € €@TÒu[Õ0›WÅX€†© ïŠ-àwº¤ÓYkìÜ¥ÖÓþáoví€ù«l:{½�âß·£uñ¿1Ëú½§ÿmW-éÚÜzªg/¶>í®íJ[r[7Ñ _ëÆ6 ¦eýoé%w|ÛIyÉŽUî’aïõ÷w_(ß�úŽrÜ”§”9Õ¸‹ÊÀ3/Ó’çÆ¨|3·¯òâéʪzà}>«sβ¿•ÙëmÚ_¸L¹Æ¹‹JFé&jž•ַܹÿÑÒÊÏ?MylÚtå—Þ¯üz��SÈÜÃF1Ü|‘õÿ7Ÿ7MyÿÃÿS^ü®Ý¦ë΃•'žrˆ²Óô»”ç<¹H¹©/à#MßaoR­rï6&âÞ¤í•WÜ{ºrxÓª·µZ«d!@ØŠ@¢ó áå‘6ŽïÊiö'íý3ìo±êŒ×sïpÎ@ûÎpã^öùïÎÑDL• _²bjëÙX@@@bLÀŸ••¥MÎÌÌŒ± gs@ !òó­Ï¹¦%9Ù®ÜQ?¥v5¬]Ý~YhçÕ¿>Ý®B_l§ªùF ꦌ÷[[mqÐf½3ý/e‘ÓÐ=¼Ÿ]à¤Y“4¥[:ÙeO|­j5"ÀW¼F¯]°Ôl;¶OQVìÑÛH„¼»CJ®suŸ;ʹJB¼3ʹ‹JB‚]M`æ“Ö?ÿJëQÊk±ÚÚ8‡Í%`çí¿7ñå·»ž§¼¨Ùʳ&ý¢Œw¶«E·!š>û̽”Ý­R›J`¥¦~ÿËÚþ»öÈPÆ-µO}�£ì»ÇNÊ;Û„Ä�Í(εwüí{ëèŸö‡�³8ê”Ý”mƒ¶]…E6ÁþÕº8{*1ÉFjć¼o­×Ç @@ F¿®°àÇgÚw’³ìÔüµ¥É™ö9¿WûNuê ÐÛ¹û€&ÂXêó›ª[íÚ}_Íζk91" Œ»žU!€ € € 錈ô=DýˆJ�Úµ_Ög;kíj¸-;ke޵[Ï_U~Éε\2œ^ñµÖ%ïËßt:ûæE»Ø)󾿩ÛÔ«½yma˜X[{‘{œÃÊ*@@ Òêó›ªkQ»ï«ŒˆôŸ$ê‡ € € €@Øœž¦°¯•"€ÔP Ešõç'Ú©m¾eëmt€{g�.Ím~¼Ó¯ÞÎN~÷e­²gƒN÷ë&ö_ºÝd ’ wQ‰¤½A]@@�r Ù,ÂC@@@¢Y€ѼwÙ6ðœ€Û·ŸÞÈéî¯P{w\@÷–•?[aqf € € P‰#*Aa € € €Ñ*@C@´îY¶ @@@�Jh¨…Y € € €D«×ˆÖ=Ëv!€À6 ø�KöÝKóoÓšx1 € €@4 ¸ß½µ…ŒðÖþ¢¶ € € €l“#¶‰�#€@´ ÄÅY;iqqq´n Û… € ÷{cXVUo+aD@½QóF € € €4¼#~Pˆ@�øøxÕŠ¸k¨ € Qî÷ƈªÒV+È€­± € € €Ñ#Àˆ€èÙ—l „QÀ½ú+ãÂHʪ@@�(p¿+r×€(Û­l € € €Ñ&Àˆ€hÛ£l„Q !Á’Á`P¸fV… € à]÷NîwE/n×ðâ^£Î € € €ÔR€µ„ãe ;‰‰‰ÚØ¢¢"%÷ˆ�ýΖ"€ €Üëxw,€»EŒ¨¸g™ƒ € € €@Ô 0" jw-†ápÛ}Cï#à^5À½‚@xß‹µ!€ €D‚€{G÷ŠÞ½G@EIFT4a € € €Q+Àˆ€¨ÝµlÔ…€Û*ìõ³ÂêB†u"€ €xE€^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A€†€0 ² @@@¼"@C€WöõD@@@ 4„‘U € € € ༲§¨' € € €a ! ˆ¬@@@¯Ðà•=E=@@@ƒ a@d € € €xE€†¯ì)ê‰ € € €@h"«@@@@À+4xeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € €È*@@@ðŠ ^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A€†€0 ² @@@¼"@C€WöõD@@@ 4„‘U € € € ༲§¨' € € €a ! ˆ¬@@@¯Ðà•=E=@@@ƒ a@d € € €xE€†¯ì)ê‰ € € €@h"«@@@@À+4xeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € €È*@@@ðŠ ^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A€†€0 ² @@@¼"@C€WöõD@@@ 4„‘U € € € ༲§¨' € € €a ! ˆ¬@@@¯Ðà•=E=@@@ƒ a@d € € €xE€†¯ì)ê‰ € € €@h"«@@@@À+4xeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € €È*@@@ðŠ ^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A ! ë` €@̃Amkqq±2(Ý91À†"€ €1$à÷ûµµqqÖƒ¯tçx�€^߃Ô@@@�0" X,б,PTT¤ÍwÇIJÛŽ €ÄŽ@èhP÷{ ;. !ÁÛJ3" v~†ÙR@@@|ÞnÆ`"€õ PXX¨wq¯PoÇ[ € €D¬€;.À)�˜˜±õÜrŰežE@@@ ªU»“�A�ð ¸×`,@xUY € àu÷û¡û]Ñ‹× `D€×©? € € €5`D@ °XbG ô ±±³Õl) € €@õBï#à÷û«ÿÂ_’ ¾ ¨ € € €õ'Àˆ€ú³æ�@ÀCnû®‡*LU@@DÀýÞè­+0" A~TxS@@@F€ ãλ"€@„ p§€ßAT@ˆ/~odD@„üðP @@@êC€õ¡Ì{ €€çÜ»x®ÚT@ ŠÜó�7lØ m,((P*ÝÞH>¹¢x׳i5p¯Þg}Þ‰‰‰Ê¤¤$eãÆ�•ñññÊð/þö1" ¼?¬ @@@�ˆ`D@Dï*‡ € ËnOcNNŽÖ®]«tû3Ý>O·ŸÓíùŒe%¶�ŠîHwMnn®p�ÒÓÓ5�––¦t�*¾6æ0" ö2Ûˆ € € €@‰#øQ@@@ âܱî(€õë׫~)))Júÿ#nWQ¡ˆpSB_ÜÑ«W¯V}‹ŠŠ”ÊØÀˆ€ˆü±¥R € € €Ô�#êÆ•µ"€ € ° îùÌîX÷|æmX/E�’ëk¸¿MîoVB‚ý9ìÞM Ö€k{œíE@@ˆiFÄôîgã@@"MÀ=“Ù½:€{]€H«!õAÀë�5Ò&¬[·Néþ–¹÷ãðúvU¿þŒ¨¾K"€ € € àyFx~² € €Ñ$àöRºW;w¯gîÞA š¶‘mA aB¿Ü߸fÍš5l•êùÝPÏ༠€ € € )Àˆ€†Ôç½@@('PPP 9¡÷?/·@ ,îo™û–zh%ŒðÐ΢ª € € €l«#¶U�×#€ € F�ÂÂB­-999ŒëdU PQÀ�ŸŸ_ñ©¨ŸÃˆ€¨ßÅl  € € €¥Œ(µ` @@�pïÀ5|GP�¨pËb󮌈úo6@@@�RF”Z0… € €@ƒ Äfÿdƒ³S�˜ˆÍß8FÄì<Ž € € ‹ŒˆÅ½Î6#€@´ sµE3_~^ùIó•gïÝN¯Õ--ø×Û)Ÿ�;TyÅ�•5YƒßJ ¬š­%žŸò‹²ã G+÷hI{ôVÐx¨•@P¯Zûã{ʧþÌTd¥º¹ÙªçÏÚ}Ú÷ê¤láÞø‡õ´×®Äw8@/¼ó¶ƒ•=Bºæ ²çhÎWYÖE²Ã®]”M}Öã±vþ¯Ê ÷RV¯XË‚o¿°l;XÙtµÕü¯x›ï–ÀŠ/5qÃù/(¿)�]òlÉ Ý4qÞç*ÊX«\´r£ÒúYÊ•"ëÏY;÷kåÔ×ìUG´WVòQäo¤ù-Ú5S¦Òd-  P#�À*->}ê å/é-•–-WVu ×S¥ÅoŸ/M[¥+SêõìôÏÿø‘Þ÷®ìcï´ëŽSIv:è —júÓç^Rþµ÷éÊË÷²íª¬‚öÉ»ôǯ”¯ÿj=üƒQTZì רgßÏ ZÛt¥K1�h¨ìw'·“mB@@@ TÒ ƒ  €@8ì»Ã±§(OÝ1­F+Ì�õ––ÿÏ'•¿(¾õrLzº…rÂ.]”MKu­gcÉKw)µ.“2%u_ë?™òvž¤õ¶«­çcÑ7ï+?¸£ò0§Ó¬¦å!c”·Ü:Ny†¯Xù×›(ïÍ;P9á˜îÊ$ç£$½…U¢èW[Ûÿ±æêßÊ»OéɳíÄÌÊJ£Aš{ÃC')wÙâY •½˜y €@¬ äÍýFoýaÇíõ�w”WO¯¶IR_-zÑÍv%—�©öɲaálå—ߨ^>ÿúwå’#•wŸÜ[Yò™¢)•€õÛ¿3ñaå”ùÇÄÙ'ã�ÓÏWž=È>ËœŒ_°Xs>Ÿ6_Ùx·c•;4 y>¹³æì;®0õ�Ï”?ìüåÀô�eôXnëç*ßù`‘2oÕBå¥g¨t¯{3`ÔY6gqVþ•¶ �X`D@¬ìi¶@@@ X³@ ¬§!½�õ`d¶±sø×m´¾ë[©ºø“ëÉví-kÞRkïØbo;£òçÜ{;ÃrSñ§Ù¹”I›Vñ¿­¡Õˆ1Ê ‡[¯Kb£&ÊfNŸ|QÑJMÿ´´@¹ý°^ʶÍíÙ¸xû(IJTøü¬é�vPnì²�²äªÎA»jÀìgoW^÷÷^Ê»/¶Ñsßû[Ùe¿]”�¬iú÷¶dïÁ™Ê&5'Ы( €@L 8çÒüæL!4>ô4åăÛ+�ƒt-`lLÁ’Yß+¿›g×yYŸ¿Åϱ }Fän°O“Ž»ÛØ±ãØ'…=¶b‡õôŽÉÊMsl®èßÒ¯?R¾¹´ƒò„3º)Sõ¯´Øk[î²�òðÏžP>ýº]1§ç(û¬)\¯é/Û`³OÓ+/>k€²•½TÅyÏÕ6¢á¹V(í]5ÞáïÕÊü&öÊ öI”ê,ßÁ>ËŽfõ±SêR ´Ÿ«�>µŸ´½wßIú-fKï]\l?¥Ó>ÿA¹ïž•~ÙŸ¯-½:vŸ+ùµˆ]¶@@@�X`D@,ím¶@ÀÆüñÚmÊË^ÏQn±'Å—²×©Zæ~kήeIjÞV¯ìÑÝzÔ«Û–^ö­ghF›Ö-l ÁµÊ�o¯œøm¡²¤Ì´9GÝo� >QùÈ¿¬ï¥ÙÆ,å;“íìÐw› ¼ö‚ý•]×|¡|ò]ÛúõTæ~öšòþwmŒÂ9»ÙY¦ë>zRyãGM•çu³^¬}ZÓZ-  PM;J/üÔ®ðò’ŽÊ‘ÿ°cìªe+•[+ÖƒŸjw hÙ8ô›îyà)Ê«°û¼}‰#a2gIDATëdå‹úWiqFääØÚÚ÷²¾úËŒ¨ô5¾ü…_é‰Ç^Y¢ì~ÄåUÿÛéÙ}�ÝUùÍo*ëjãÝÎf™X´F™•eýw·O–¶‰öIXÒ;ì·mIÈ_¤œú‰�&HLKTúòm$Z x™òÇïW)ƒmNÁŽ]”‡1"@ u_–¯´}÷âkÓ”?ÏþKyþØ£•[àŽ˜ôÐKZò·ßç+lß]Ùºe3%eË|ÇÚ²Ï"€ € € U¡ ~Qµal  v˜Ýþä•oŸ\Ý­ÿÆÎsÛTìÆÅïNRþß#YÊ�~yßÇÛ•eË]zXñ®î2þ&»kâ–‡öW®¸c¼²¤ŸÿÓë4ý±þY)]C|+;CrŸŽ¶{]t�rLʷʯãvR[û?åÙß(JŠ?¥‡¦N¼æteü]ÖÃݹʽ×|®œ™gã#~ºÉ4^J±1 c®ù§²í×�)Ç}ÒÄæ\>J¹wU}AzŽ‚ P™@Μ©š}ϫ֧=àZ6w’ ÜzÊNÛßj±^óÆûد{�í¦¬Ý˜2_�õ¥çlmMY�㆕VŸ¢kÐ4Õ>MJúç5¥O´å?+Ÿžü‰r^·ý”×o£tzêõå¥QWû,{ÄßÊž{A9%õåI;Ù8ˆN·gŸø¤ò²Ð¡ í5gäÁ6î,®ý0å¸q–‰Ÿ<®ü÷Ïöywýyöé–÷ÞCÊÿ,VPêIÀíÿò"{2áΧ”·ßo{ö¢ÿ³ûG$$”ÿy,Ø·£»'ÛX€_çf)¯¸à$%c„PÍb¿Ÿ@@@ˆk–£ €Ô­@°Hëß°z½2/`çÉW,~²f¦7·û*—-ÖbÛbð1Ê[»[·ŽûúÀšlM/¶Pff¬S~òàsÊ™;X¯È¹C›+Ý^—`^ž¦ó“íÒÿ) v?‚ñ–]Oý—rò Ö¦îóÙ™ŸïÝú´Mzžòä¾vf©ÏŸ¯øé©¹ÊŸ�w^õÛ—šþ(ÕνÚLQIIhfç…žxÅ…Ê�~±5oL±ž–¡+¾SN~âOe³]­g¦x¹Õ­E»¾ÀØÞ;*÷íaõ í/ÒC  €ÀVÒºíªeF�í§ìØÊzËïzÃÆ^�~£�´ð×ËÊë_±QZ»q€òˆÁ픩~û„šõÌmÊ«}�v-\i æÛ§F®ó©÷õCwjzj‘ó)—ªé>û¬<ãˆ>ÊVq«•_¿ðŽòK_†²ùœ÷•—žûž²òOJ=RüMzéÑA»Ú}õùÊýí4í: Qž7É>S†>jãé^i?ZyÃ�v �‚™¯*ßùAA‰8�ÌNmT§qž¬tÇÜñ@ùqîuܱ³çdiIw,@·.ö½‚R}FTߊ%@@@ð¼#<¿ Ùð€@`¡*ùÚ¿­_âé¥n|ùZ—œ½?y¤ž°œ²%¹yÍèeÝüº´ñJÅÔÛ'+.>\yÏ%]”mS­m÷Ï6�”½z¶VÆ­ŸdÆ#·*ï÷­¼í´®Ê4·Ã½¥�&Xðì•�¤î¥”dkÈki¯M]ð†ò�Å]”ýJºfì¿â"ë;JŒ¯¢9`=ü‹™®|çõ©–Y�”{îmWñ]ôá÷ʸa‡Øœ&¿('ßm×#ø¬«�;ºzéWʬÓNPŽÒN™ÂÀ)P@ öÜ{ª»Yƒ­O°ciïí-‹þøY™×TÙ¢±±› :RùŸV?)ÿ÷ôåíëNR^¶Ÿ-SP ð%;Kœ³¯Ý;±—9 ;wzw?œI_I=í¥›Jãnš:ðø•ûu³žÿ^Ím«~ýDyÿ#¯+omŸ2ïniÃÆüSÙ£ÐÆ –Û§Ûzç 6þþ©¦ïzÏþT9æÿ†*»•üÕbOoøÅ>_îû¡•r·císðð€}Ö¤ÅÛ³nÝÜQnmK¦Cê_fNÉBîk�ÔZ¬TœãÎ'ëV sGû qûùo¾ëiMß~ÿóÊsO?JùÐöS: k¦}g¨ñï‹^³©lËk7­Ã{ÿÛq�‚ € € €1"PÒ¶#[Ëf"€ *`W8òÚñʱýJ¯[4ûeÍ9å¶ÊG ”­p¡.üèʇ~¶1§N¤l·BY±äÎýP3›Z¬ÜéÒ.Ê&¡�;… 4çûo­‡¿ÿÖšžð…B�êÖ«?÷{;�ri{ëÏÙ%¤Ñ8àœí™–bÛº2=TYÿ£�{9î�lå�‘Ö·ïë”O\jçø-jÚD™ðõ4å[}lÍ#†æ(ß[;PyÅÙ6~áÅïPŽ[0VyÓ±=”©ßFs) €¥Öw½ìÓ'•—?kÇv;²o*/°Q•”…6²ìŸ/…>ó¸œú¶}Bõyºòê}­×=äC@�¶Xìlÿ>Cí¨ZÚ ¦‡öýQùð÷)W³­R[(íÜ}• ûŒÐÈý[”•¯ŒÏì­Ü¹we›’Jس˖؟0q©öI”ïŒpo3Ü 9ßL¾GyÏ¡kÎèWm­[7V8wEX8±¦WÚ{å®V.˜¿H¹q•3@BS”†p¯pÙy'ª 'Ù–ýû^eq±ý ¸ãܱzH©…@ ~¯k±v^‚ € € €%`Íi@�HZïÄÂO¬EüšG¬·§ßØó”ûµwãÖ8¾¹X¿Pþ¢o”Ümçdæî5FyÂiÊM�ë¶ÌÊo§*ßN´17t³Îë©Q_ÌŠYʩӭ¯f¯ëœ‘¿Û|ëAñùrrìÍš6¶ç–ú¿´4ÙÑÎA½ï.;Û3-Åmk¶>™óØQ™œ´PùÌ÷)ç :@yÊnV£ƒó¬n­3l[úNÜY¹<Ñú‡   P ;–6ßù0å�=íX½`êsÊ‡× Q^5Òzݧ?òŠò‡Õ'�è©láþ´q[ß>iËÝíÊ3wk¦Ljl¶>CçÎ8i�­ž�5Ö_`D¥KÎ'‚6RlþŸ«”éÝì3¨E…Jl̵‘k>glZÒ¦6›ã·{lԩʛިüåUÛ®©­ìÚ4çìÞRøóSåøgíï¾[ÜÏ=MªØØºÛ'~íL[4¼y’‰pûü¯¸`”jp÷dAyÞG)»t¶Ÿ ʶTøÅÚ–•ñZ@@@ˆl·%0²ëHí@�(°î�ܵvâò¥í°Åk­g#´s«*Á‚l=õõ‡*Û{šò¢½Û(­¿´Øú×ϱ~þ[^ýNùk‡•ÿÕ_Ù¬ô uë�YeÝ-¾=FÚy›Ý’Ö+ô*?î-e£�Ç+ÏêhgŠ–ô˜[Í—,±³+Ûµl¤ô/Rl.v%‚_Ÿ½Iyɫֿävöl~ºüÄÝ×iÎ!w—Ÿ]ò8±‡&.¼óåˆÖ¡Ý=U,Ïl@ æ7—AûÆÖž]`ÇùFmí“¢c›ÎÊ–'î©\öÈGʇŠìÓãÒSvR¶‹·q[‰;Ò6mc£±:´ËPÖîÈ›·x¾^»<ÃÞ±sÉ-j4éó.SÌ›P¦u³ë4ýTÒãM¥(ûgMNýÕ®°ûˆöʲ®ØgËÆ\»¦Œ¯IŠ¢ìØ1[iã–¶Õ�}yÊeN’›ÚX€Nlë Ö¥+[÷ÙOyÞ¹Öé÷ÉÊkg PÞx®™~i=ÏO®°Ïå*ª©g(õ'àöÿßrÝYzËøªî[TÕ‰’wâg;Jv$›� € € €@uÊ6±Uç,ƒ PK;oó½;Ç[VXƒ¿Éîæ•Îð'[ïÊQãÆ)N±3ê7õ�XßHÞ²¥Ê•NNÖÓ5�¿ÛÊñc­ÿ§‡-^¶ø­?¿ça6²ÀÎU ÚYý;ïÓKùêóÖcsÊ16Ž ©ßÆô<ÀÎÇk’?OùüëGjñÝWÊE;W^t°�}šæ\�¹Ëˆ35}ïP[ƒÕ¬\ ,ÖŒ7oyQ¹hÿ*Ç´>ŸJú�üVŸæÍ*yFó) €U lLÖòev ÎhfÇðËl<—?µ‡òˆm¤À”G?T>ÿ…õÌŸÐÇF„-_ç³7Úô²åÖS˜ÑÒŽÏ� ×*³²V*óŠ×(—äÚ’Åk–(ç̱?%’S­¿½GG›ÿÃv„l©}f�ؽ·²›}DøOÿ\ùÆ›Êþݕ֛_®äÙ0³÷žµ%—ô³mgw±õ—-¶EÖY&§Û’Ë>]Å#³¶aá/ÊYñÔ7�ï~úاU¶þ•ÛövÃF*//�ÉTD0 ¼»�áõdm € € €D´@Åf¶ˆ®.•C¼,`ýG^;^9¶Ÿ�{_U±™ÊJ\šsfþJëWŸ=ÏÎÜýý×ÊW¦ý­Ìk³�ò„óR1Ìz]Ò«ÓØ[¼AKþ1íÊ Sì²Ã.ø?å^­Ý[�Ûv·^£ï&½¦ÌÝw„rèBëMºþÇþÊËÿu¤2Ùí¼oÙAÓ]­s¨²Rl}2-mÍëZÛ™ŸÝº6UÒï/  �b°l™oçg=¯¼´â 4÷�ž\ÿïN»ù¢Íùñµ¾Ê‹&ØX°�6þ¡|éžwl¾uÃo*ÙŸiêÖÙö0i§Ã•wœ1@9ôÔS•)SíÙ÷?·ë|¸ÎþÜhß«�rì%{(·ý´•®úã'å›/OSN˱ϲóNí§lî·­ÈÏsÞ8ÁFŠ%Ù'àïó¾.Ø'H•tÁ"=›ŸïôùbŸqãÞ°µu;þån½Ü𤠣UþîĨ›� € € €@T 0" ªw/‡"ßQ9ê¦+•Á”О·~Ö_±n‘õð/αs,óY/} Þ®oç·g—}ó’òö§¦+g-³3<‹�;´êi}òG\p´ò€A�•Míþ­[çÊYÖWóø–ÓVÚ5–�¹ä,åI;:},í Ïß¾ó®rÊ?*Wm÷åŽÛC™éë®L½ïAåM7[�¯ºÒê0¨ªË@ë9  €@=8w]9ù¶«ôV'WñvÅíŠúƒÎK>×ôÍ“ìüüý¯¥Ü³EÈ8­Ô�šsÉ$Ëj•¤Zl§íób§·üŠb=½ä“g•×=oïž±Ã0å%§Uö+¹Õ�}ÞýùÆʉӜOFMiYãnʱ½ÒmÚfTR6þõ­æ¾ý‹½KRçžÊÆWébΡ/T”à· ÆØ|@@@�Ø`D@lío¶HÀ¶)évFbeÅú3ó?Vþç1ФY3åðƒ­·¿ƒßZl{ØÙ•ƒö°ž–{YOH¯î”íÒm@Uý!zªŠbël’fçÿ74R9é �”ÝÒCF+8gòç­µ9»�z�ò ¡™Ê¦%‹ØþûŸcWˆÑÆ $&T£~{Ç6}{)}|¨�¬izÓqwÏP®qîÓy;Ï¿ójÉÃV]û8i·Ë¾Ê³Z5Rn×Ç>ã•©‚}jô<ÈF6Ü8´@YìÜ'¥…]ЦuÚ–z4µï¡eö=²«rÇáö¹Ù¬äóK“›‹½YBjSeçæV‡JÙ¼,D—À–~¢kKÙ@@@ðù³²²Ä�™iý<@ ~òóí¬¿š–äd먟R»†Ö- :­·Á_¦#t)¦@(/ð÷ßkVjjjù'Âû8h׋ í#*.Žªðâ²6/ äææªº�;Ûµ–¶¥Ôç7U·žµû¾š��­—3"`[ö5¯E@@@Àcœ¢é±Fu@À+~†xeWQO@ ÂÜO�@Àzìãâê¬ßι C"lçS�zpËbó;[�Yêuòf € € € P-FT‹‰…@@¨�„ûŠ^ç#êgcx"XÀý-sã"¸šuR5FÔ ++E@@@ 2™û…Z!€ €Ĩ€Û?é^<>ž{ÛÇè�›]EEEz—ú¿Ú=lÚVß‚[%b@@@¢G€ѳ/Ù@@�(HKKÓVlܸQY\\¬d\@ìV6!¢Ü߬`0¨Z¹¿qU½z¨ #ê™·@@@@ R){‚z € € �F�)Ý^ÊuëÖmžÂ%àŽ¸IOO× Ý߸p­Ù+ëaD€WöõD@@@ Œ"«@@@ \qqÖW—ššªtÏdÎÉÉÑ´ÛoÉõÂåÌzbMÀýmrǸ#nÜß2÷7.Ö4k{œíE@@ˆiFÄôîgã@@"SÀíÿªž; Ààöjº}˜¡™[A­h(÷wÇÍÐ{„^ 6¯àîF4ÔO&ï‹ € € €@0" ÐyK@@ª#àžÃìŽHH°¯îîÎEEEšÎÏÏWº÷Bw³:ëd¢[Àï÷kÝtk’’’4ÇíÿONNÖ´›Ñí°å­cDÀ–}x@@@�¨`D@TíN6Â%à¶"Ó».OÖƒ °-nïebb¢VâN‡žó̧նØòÚhàŽ©qƒêâî{yK’ÞÚ_Ô@@@�m`DÀ6ññbˆV·µØío‰Ömd»@¼%à~6qn³·öµ��ºeP×nŒ¨kaÖ� € € €@ 0" ‚vUA�ÈpÏ%cD@äìj‚ €D¦€û½12ëVU­P• ó@@@ˆBFDáNe“@`ÛÜ«¿2.`Û%Y € ­îwEî­û—íB@@@ J%;’Í@�ºHH°ƒ¤{æ@ PoÁ:@@<'àÞ)Àý®è¹Ê«Â\#À‹{�:#€ € € PKFÔŽ—!€@ì$&&jc‹ŠŠ”ÜG vö;[Š €Tp¯ àݱî1" âže € € €Q+Àˆ€¨Ýµl„WÀm÷ ½�€{Õ÷ á}/Ö† €  îÜ+x÷%PÑ„9 € € €D­#¢vײa Pn«°×Ï « Ö‰ € àFxeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € €È*@@@ðŠ ^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A€†€0 ² @@@¼"@C€WöõD@@@ 4„‘U € € € ༲§¨' € € €a ! ˆ¬@@@¯Ðà•=E=@@@ƒ a@d € € €xE€†¯ì)ê‰ € € €@h"«@@@@À+4xeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € €È*@@@ðŠ ^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A€†€0 ² @@@¼"@C€WöõD@@@ 4„‘U € € € ༲§¨' € € €a ! ˆ¬@@@¯Ðà•=E=@@@ƒ a@d € € €xE€†¯ì)ê‰ € € €@h"«@@@@À+4xeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € €È*@@@ðŠ ^ÙSÔ@@@�0ÐDV� € € €€WhðÊž¢ž € € €„A€†€0 ² @@@¼"@C€WöõD@@@ 4„‘U € € € ༲§¨' € € €a ! ˆ¬@@@¯Ðà•=E=@@@ƒ a@d € € €xE€†¯ì)ê‰ € € €@h"«@@@@À+4xeOQO@@@ @C@Y € € €^ !À+{Šz"€ € € �„0¬ƒU €1# µ­ÅÅÅÊ@  tçÄ Š €Ä�€ßï×ÖÆÅYz||¼Ò�ãuFx}R@@@j Àˆ€`±(IJ@QQ‘6ß Ël; € ;¡£AÝï�„oÿ)͈€ØùfK@@@ðy»ƒˆÔƒ@aa¡ÞŽ"@=¼o� € ±î¸w¤@bbbÄÖsËcDÀ–}x@@@�¨`D@TíN6Â+à^€±áUem € €€×Üï‡îwE/^/€^ÿ ¤þ € € €Ô@€5ÀbQˆ�Ð+ÄÆÎV³¥ € €Õ½�€ßï¯þ |IF4ø.  € € €ÔŸ#êÏšwB ¸í»ª0UE@h÷{£·®Àˆ€ùQáM@@@hF4Œ;ïŠ.À�"|Q=@@ B¼ø½‘òÃC5@@@¨FÔ‡2ï�žpïà¹jSa@@�zðâ÷FFÔó o‡ € € €@C ÐÐ�ú¼7 € € €õ,@C@=ƒóv € € €4¤×hH}Þ@Às7lØ š( •x– çvFêHÀï÷kÍqqÖWš˜˜¨LJJR6nÜX¯¤ ŒˆŽýÈV € € € P-FT‹‰…@bYÀíçÏÉÉÂÚµk•n¿�Ûwäö¹=H±¬Ä¶#€Ñ!àŽðrÇåææj£Üãzzº¦ÓÒÒ”îñ?:¶—­ˆMFÄæ~g«@@@bT€1ºãÙl@�ê¸cÜQëׯ×KRRR”ôÿWG�e@/ ü{÷#Wu|gí}xm¼61¬——Í#\B @š4P „–6<ÚD¨MiÕ¨I› E¥/¢¶ŠhT•V¥ D¤N›ä�¢6$Pš%�4(áal^ƒÍ®÷1ý¾¹6ÞõÚëÙõ.;3÷w$ž¹sçüÎà;ÜóÝs‹áÇþ;_dlÞ¼9š3<<±··7¢¼€fì_u.dø& @€ @€� È(Qgk*LU ¸/´È(î �ê¬O€Í.PÌ SœŠ3Âüùù¿QÅÓš½uê_Nåìw­&@€ @€�’ È(iÇk6L.PÜZÌPÌ 0ùú>%@€�2twwG3·lÙ±8;ùeh»6¶’€Œ€VêMm!@€ @€û�°  @€@9ŠÑžbÖèb^èâ åÔÐj(ÆžŠ3ÅÒ¥Káh:M×e*L€ @€¦/ #`úv¶$@€�ؾ}{´nìs¤[¸±šF€S(ÎÅ™bJZ™@ƒÈh�ŽP  @€ ðNÈx'”ƒšN`hh(êÜÕÕÕt5Wa˜m�"#`ppp¶dÿfI@FÀ,ÁÚ- @€hD�Ø+êD€s.P<#ÀsÞ*@€�(Ξ&Ó€]£Ju ȨÊj @€ @ d´B/j̸€qž'µC´˜€3E‹uh©š## TÝ­± @€ Pveÿh? ÐèƒÏF o_sWÄÊ9Fü…Ãæ5z�g¬~oÅžþÞ-ïZrFÄË~îàˆÆ²A!@€À´ü+:m: @€ @€�æ�Ð|}¦Æ @€@¹:D{Û_[ñ‡½ñìÃúrIü™¬ŒÆ‡O}ç"~þ»¯EÌ÷»•ÎbÁ_<)âÚ¿Xñ–-ÕÝViïû`,ùË«>qe奈·^}CÄo¬ßÃþby=eÜ>Ç$7 mÊ6Þ³¡+âê÷±·m$â–gsùCC§Gܽ~±H!@€�) ìë 2ÅÝY� @€hd�Ü;êF€ˆ¡ÿ¥¡pÌq½oy~SÄ׫™°´¡®Ò¹ú¬XïÊ‹ßqam‹ÑgrÆ�kþyì¨~þ,<å’�Eü•còõ[�üwÄ¿Éw+9ˆüùGüõz"Ö]‘¶mksŸ×Þaeû3÷Åүݜíýã÷Ö2v ZeÀK·Þñ·FW|à×âýßÿƪˆÝã>ñ†ö, #`Ï.– @€ @€�–�ВݪQ @€@s l‹êþä«×F¼öžáI«~s|ú™gœX:V$þõgNޏlÌ0}¥'³ 9$çÛ_ÚÚF23`^å�Ú»"ä½}‡F,ÂÈà`¼íÌm;rŶJwŽ�/®½Î÷;Ëà=™Að{µ¸sYíïÚSÆ-™Â›Ìx궯FüÂ÷ߊ8yF@÷é9§Àßaš¥cÉA±åÊ™³°g‘iîØf(�€Œ€Òu¹ @€ @€@™d”¹÷µ�h�áî=teƶœ/àþ5_‰xÓ‚�F¼æ¢•ó®ý]%GãŸü÷ë"^½ö”ˆW]ñþˆ‡îeˆ§¾§Ä¦Tòg䪋¯ˆøO9Ø_WÙzïCcÖËgl¼ãƈŸûÖsÇÎŽpÕïÿ(–Œ/7ÆÛ‰O (Ö©,L‡?½æ¼ˆÇI(PDìE`/§‹½¬m1 @€ ÐÔ2šºûTžh=�îhÒ²ƒDÜrÿó7�®ŒxÈØá›êë±äé'rÎÿù‡ç�óËÆ~ïÇ—úž0~›zßå(þÖ×¶FÝó,•JÎè¿hi>5`|ÉJxR>éકC‹íG_߯Ÿ«æ|‡-~3âÝk¾ñáã9âe?»$bÑÜÑ��x½½3ÅÌÏç,ŸÔ!VP @ ücék@€ @€J$ # D�­© P¿@µšc“E¬+k˜ �œôÿ #�ØõÝg"nx#ï¥ïû0€mcÉãrDgõ‡–Gì(¾±ñjW©}‡ko'jÀØïyµ6*¿ãû¿cW»þ[(>ݹ¸¶|ø…x{Û—oŠxó˹db©,<9þÉÕy÷~¶*Ë®}vôöÅû#{k‹G7Ç_wÞð͈ß9;â_}ò°ˆ-È–ö,Ë–µrYÄö¶|NÁOÿ%ŸYðõ¶s"~þc¹æ‚{Ž— �YûßάĮ̀€Œ€å´3 @€ ÐØ2»ÔŽ(¥@Gÿ¡ÑîãÚþ+âºò§-Þõ³mø…œcíHÄ Vä½÷™E°÷Ò¹úÃñᕽ;bOmÕZA[¥½+–ØùZÄGãÏôKÎpîåŸ�xéª]Sö�<~[,ùÃë÷œ)0þh9GÀ wÞñk3Gà’Ͻ'â²öW#N,o­»3~û®”9¡–5°hr‚‰»°„%�PâÎ×t @€(ŸÀ®KËåk» @€T ²(ï„?|Éöˆ�lÌgŒ®zWÄö¶œ/`ãº'#¾Þ¿:â1Ö1¾ oÁïïÏ}=üýˆkÖevÀï^ppÄî‘̘»’¹Ïÿèß"~ù[9÷Á±ÿ͈ê«edsÇ•íï�÷_¿ñ'ß:í£õg&>�`Ü&Þ @€Àn2vñ– @€´²€Œ€Vî]m#@€šU ½6†Ÿ´ýÇóyŸüP[ft�æëGȸü½GGì¯X§’¹Õ7_‰øà2Ëà�3WFyWÄënÿiÄ'–ÿ|Ä+.<.bo)±šB€o Ôêx{/ @€ @€�f±µY[¡Þ @€�Ö¨ä}ï-ÏÁúÁÇ^ŽøêhÞÕ¿üÕ§#Þ÷ÌO¹8ïðß5þo&/ռᾳEÄc†~ñ?ïÉ=ŸrF„·KŽÏßqýíÿ¯3�râ�‰ØW M¸c?>ª•œËà‡_».c±`L¬,¾.ÂÛ%Çxõå{ÿ¢¼ÏÛ›9V?´>çØÿÊ—rœÿÁçòýµ\ƒï¸7^?vÚªˆ;JO¾þÄNØù¾Î¿s€s/ÿlÄKWM–£�-ÜSi_Ћ+›_ŒøØ3Ïe| ŸpÛÝ/D|×Q/ø­L]8ç”C"`0+LWÀ?¢Ó•³ @€hBMØiªL€´–Àð†»£A_ú»¨»ik®}bº±äÌO_ñwŽÎ ‚ÿ¹7gþïêYqùiçF¼ð}9×ÀŠŽ'#ÞtÍ]×o::â4˼þØð#W~:buÁÄ\€Ì>xccŽð¿¸­vÏ‘õОϨTòÓ—ï»-âõÿš÷ÿ?úJæ/ŒÖžpàÊcãõ/^vNÄ3Ṅ^¿[CA!@€ÀLȘ Eû @€ @€M"àÊj“t”j @€­+Ðqü/EãnøÇŒ3WVÆ®ÎûÔoG¼èˆ·_ó.ý³Œ�íyþ÷úrÞ�޼ÙJ%wÚ}@>Ý`O%gû¯>ûãˆûíÌ X´¤7âig±¿=G¤:Vf>‰§.‰xæ‘GD&@ ‘Š+£cŸ#PÌPÌ ÐÈ5W7 @€Š'3ÌÔ3&EFÀDK @€ @€@Ë ÈhÙ®Õ0å(®›Îì}SåÑÓR @€�² È([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”ZÀ…€Rw¿Æ @€ @€@Ù\([�k/ @€”Z`~Ñúõë×—šAã  @€ @€@9d”£Ÿµ’ @€ÔþÛfï£ ×�¿IEND®B`‚p_calendar.md000066400000000000000000000305461523260663500335240ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_CN# 日历|dde-calendar| ## 概述 日历是一款查看日期ã€�管ç�†æ—¥ç¨‹çš„å°�工具,支æŒ�查看农历ã€�黄历ã€�节气和常è§�的节日信æ�¯ç­‰ï¼Œå†…置日程æ��醒功能帮您更好地规划时间。 ![0|main](fig/main.png) ## 使用入门 通过以下方å¼�è¿�行或关闭日历,或者创建日历的快æ�·æ–¹å¼�。 ### è¿�行日历 1. å�•击任务æ �上的å�¯åŠ¨å™¨å›¾æ ‡ ![deepin_launcher](../common/deepin_launcher.svg) ,进入å�¯åŠ¨å™¨ç•Œé�¢ã€‚ 2. 上下滚动鼠标滚轮æµ�览或通过æ�œç´¢ï¼Œæ‰¾åˆ°æ—¥åŽ†å›¾æ ‡ ![draw](../common/dde_calendar.svg),å�•击è¿�行。 3. å�³é”®å�•击 ![draw](../common/dde_calendar.svg) ,您å�¯ä»¥ï¼š - å�•击 **å�‘é€�到桌é�¢**,在桌é�¢åˆ›å»ºå¿«æ�·æ–¹å¼�。 - å�•击 **å�‘é€�到任务æ �**,将应用程åº�固定到任务æ �。 - å�•击 **开机自动å�¯åЍ**,将应用程åº�添加到开机å�¯åŠ¨é¡¹ï¼Œåœ¨ç”µè„‘å¼€æœºæ—¶è‡ªåŠ¨è¿�行该应用。 ### 关闭日历 - 在日历界é�¢å�•击 ![close_icon](../common/close_icon.svg) ,退出日历。 - 在任务æ �å�³é”®å�•击 ![draw](../common/dde_calendar.svg) ,选择 **关闭所有**,退出日历。 - 在日历界é�¢å�•击 ![icon_menu](../common/icon_menu.svg) ,选择 **退出** ,退出日历。 ### 查看快æ�·é”® 在日历界é�¢ï¼Œä½¿ç”¨å¿«æ�·é”® **Ctrl + Shift + ?** 打开快æ�·é”®é¢„览界é�¢ã€‚熟练地使用快æ�·é”®ï¼Œå°†å¤§å¤§æ��å�‡æ‚¨çš„æ“�作效率。 ![0|view](fig/hotkey.png) ## æ“�作介ç»� 日历分为年ã€�月ã€�周ã€�日视图,通过ä¸�å�Œçš„视图方å¼�展示日期属性。 系统默认显示月视图,å�¯ä»¥é€šè¿‡é¼ æ ‡ç‚¹å‡»åˆ‡æ�¢å¹´ã€�月ã€�周ã€�日视图。 - 仅在中文系统中,日历会显示日期所对应的农历日期ã€�黄历和节日信æ�¯ã€‚ - 日期以 **1900** 年为起点,在日期切æ�¢æ—¶ï¼Œä¸�能查看早于 **1900** 年的日期。 - 在月视图ã€�周视图中,周六ã€�周日的日期显示会区别于周一至周五。 日历视图中的侧边æ �展示日历å¸�户以å�Šå°�日历视图。 1. å�•击 ![side_menu](../common/side_menu.svg)å�¯åˆ‡æ�¢çª—å�£ä¸­ä¾§è¾¹æ �的展示和éš�è—�。 2. 在日历å¸�户中勾选相应的日历类型,则该类型下的日程在日历视图中展示;若å�–消勾选,则在视图中éš�è—�。 3. 在侧边æ �下方的å°�日历中点选日期,å�¯è�”动控制å�³ä¾§å¤§æ—¥åŽ†è§†å›¾çš„æ—¥æœŸå±•ç¤ºã€‚
视图 说明
年 显示全年的月份�天数。
月 显示节日信��日程安排。
周 显示这一周�天的日程安排。
日 显示节日信��详细的日程安排和黄历。
### 新建日程 1. 通过以下方法之一新建日程。 - 在日历界�,�击���上的添加按钮 plus。 - 在月�周或日视图中,�击日期空白处或�击鼠标�键选择 **新建日程**。 - 在月�周或日视图中,�击鼠标拖拽新建日程。 2. 弹出“新建日程�窗�,选择日历�户�设置日程类型�内容�时间��醒等信�。 pic
�数 说明
日历�户 默认本地�户,�选UOS ID等网络账户。
类型 系统默认�供“工作��“生活��“其他�三�日程类型,您也�以自定义日程类型。
  1. 在类型下拉列表中,选择 新增日程类型。
  2. 类型框呈�编辑状�,输入类型�称,设置颜色。
您也�以通过主��中的管�功能新增�编辑或删除日程类型,具体�作步骤请�考“管��章节。
内容 日程的�述信�。
日程时间 设置全天或�全天�公历或农历日程的日期和时间。
  • 全天
    • 勾选全天:开始时间和结æ�Ÿæ—¶é—´å�ªèƒ½è®¾ç½®æ—¥æœŸã€‚
    • å�–消勾选全天:开始时间和结æ�Ÿæ—¶é—´æ—¢èƒ½è®¾ç½®æ—¥æœŸã€�也能设置å°�时和分钟。
  • æ—¶é—´
    • 公历:开始时间和结æ�Ÿæ—¶é—´ä»…显示公历日期。
    • 农历:开始时间和结æ�Ÿæ—¶é—´æ˜¾ç¤ºå…¬åŽ†å’Œå†œåŽ†æ—¥æœŸã€‚
�醒 勾选全天,则�醒设置的选项包�:从��日程�生当天(上�9点)�1天�� 2天�或1周�。
�消勾选全天,则�醒设置的选项包�:从��日程开始时�15分钟��30分钟��1�时��1天�� 2天�或1周�。
�� 选择公历日程,则��设置的选项包�:从���天�工作日��周��月或�年。
选择农历日程,则��设置的选项包�:从���月或�年。
结��� �有设置了��功能,结��� �会出现。结���的选项包�:从��于n次�或于日期。
3. �击 **�存**,创建日程。日程创建完��,会以标签形�呈现在日历视图中。 ### 编辑日程 1. 在月�周或日视图中,�击或�键�击日程标签。 2. 选择 **编辑**。 3. 弹出“编辑日程�窗�,设置编辑日程的相关属性,�击 **�存**。 4. 如果设置了全天或��,则弹出�示框,确认�示信��,完�日程编辑。 > ![notes](../common/notes.svg) 说明:已创建的日程�以通过拖拽日程标签�修改日程的开始时间和结�时间。 编辑日程时,系统会根�所更改内容的��显示��的�示信�。�示信�中按钮说明如下表。
按钮 说明
全部日程 修改所有与此相关的��日程。
仅此日程 �修改当�日程。
所有将�日程 修改选中日期�以�日期的日程,选中的日期之�的日程�然�留。
全部更改 修改所有��日程。
### 设置全天或多天日程 在创建或编辑日程时,设置 **开始时间**�**结�时间**,�以设置全天或多天�续的日程。 ### 设置��日程 1. 在创建或编辑日程时,在 **��** 的下拉列表中选择���醒日程的周期,例如,�月。 2. 在 **结���** 的下拉列表中设置结���的次数或�止日期。 pic ### �索日程 1. 在日历界�顶部�索框中,�击 ![search](../common/search.svg),输入关键字。 2. 按下键盘上的 **Enter** 键进行�索。 3. 在�索框中�击 ![0|close](../common/close_icon.svg) 或删除输入的信�,清除当�输入的关键字或�消�索。 ### 查看日程 在月�周或日视图中,�击日程标签,弹出“我的日程�窗�,此时既�以查看日程,也�以 [编辑日程](#编辑日程) 或 [删除日程](#删除日程)。 ### 查看日程�醒详情 当系统�出通知�,�击通知�示框,查看日程详情。 日程�醒时,�示信�按钮说明如下表。
按钮 说明
���醒 �醒设置为当天,首次�醒�,�击 ���醒,10分钟��次�醒,此��次�击“���醒�增加5分钟的时间间隔。
您也�以在"���醒"下拉列表中,选择15分钟��1�时��4�时�或明天。
明天�醒 当�醒设置为1天�或2天�时,出现该按钮。
��1天�醒 当�醒设置为1周�时,出现该按钮。
关闭 关闭�示信�。
### 删除日程 1. 在月�周或日视图中,�击或�键�击日程标签。 2. 选择 **删除**。 3. 弹出“您正在删除日程��示框,�击 **删除**,删除该日程。 删除日程时,��与���日程�示信�中的按钮说明如下表。
按钮 说明
删除日程 删除���日程。
全部删除 删除所有��日程。
仅删除此日程 针对��日程,仅删除当�所选的日程。
删除所有将�日程 针对��日程,删除当�选中日期�以�日期的日程,选中的日期之�的日程�然�留。
## 主�� 在主��中,您�以打开管�设置�查看��政策�切�窗�主题�查看帮助手册�了解日历的更多信�。 ### 管� �击 ![icon_menu](../common/icon_menu.svg) > **管�**,进入日历管�界�,您�以管�日历�户的日程类型�登录UOS ID将日程数�和日历�置�步至云端,�时也�以对通用�置进行设置。 #### 日历云�步 日历支�通过UOS ID将日程数��设置�步至云端。 > ![notes](../common/notes.svg) 说明:该功能暂�对�版本UOS系统开放。 **登录和登出UOS ID** 1. 在�户设置界�,点击 **登录** 按钮。 2. 弹出UOS ID登录弹窗,在弹窗中通过账�密��手机验��或微信扫�等方�完�UOS ID登录。 3. 登录�显示账户��头�和相关�步设置,点击 **退出登录** 按钮�将UOS ID账�登出。 **日历�步设置** 1. UOS ID登录状�下,点击 **日程** � **通用设置** �的�选框,设置是��步至云端。 2. 点击 **�步频率** �的下拉框,�选择系统自动�步的频率,您也�以选中 **手动�步** ,关闭自动�步模�。 3. 点击 **立��步** 按钮,立�和云端数�进行�步。 > ![notes](../common/notes.svg) 说明:需在控制中心开� **UOS Cloud�步**,�能使用云�步功能。 #### 管�日程类型 **新增日程类型** 1. 在日历管�界�,�击添加按钮 ![icon](../common/add1.svg)。 2. 弹出“新增日程类型�窗�,输入类型�称,设置颜色。 3. �击 **�存**。 **编辑日程类型** 1. 在日历管�界�,选择�一个自定义类型。 2. �击编辑按钮 ![icon](../common/edit.svg)。 3. 弹出“编辑日程类型�窗�,输入类型�称,设置颜色。 4. �击 **�存**。 **删除日程类型** 1. 在�户设置界�,选择�一个自定义类型。 2. �击删除按钮 ![icon](../common/delete.svg),删除该日程类型。 #### 通用设置 **一周首日** 点击 **�星期开始于** �的下拉框,�选中 **周日** 或 **周一** 设置为�周的第一天。 **时间格�** 点击 **时间** �的下拉框,选中 **24�时制** 或 **12�时制** ,则日历中的时间格�将按选中项进行展示。 ### 主题 窗�主题包�浅色主题�深色主题和系统主题。 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **主题**,选择一个主题颜色。 ### 帮助 查看帮助手册,进一步了解和使用日历。 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **帮助**。 3. 查看日历的帮助手册。 ### 关于 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **关于**。 3. 查看日历的版本和介�。 ### 退出 1. 在日历界�,�击 ![icon_menu](../common/icon_menu.svg)。 2. 选择 **退出**。 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/000077500000000000000000000000001523260663500311635ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/calendar.md000066400000000000000000000277741523260663500332770ustar00rootroot00000000000000# 日曆|dde-calendar| ## 概述 日曆是一款查看日期�管�日程的�工具,支�查看農曆�黃曆�節氣和常見的節日資訊等,內置日程�醒功能幫您更好地�劃時間。 ![0|main](fig/main.png) ## 使用入門 ��以下方�執行或關閉日曆,或者建立日曆的�徑。 ### 執行日曆 1. 按一下工作列上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器介�。 2. 滾動滑鼠或�尋,找到日曆圖示 ![draw](../common/dde_calendar.svg),按一下執行。 3. ��按一下 ![draw](../common/dde_calendar.svg),您�以: - 按一下 **傳�到桌�**,在桌�建立�徑。 - 按一下 **釘�到工作列**,將應用程�固定到工作列。 - 按一下 **開機自動啟動**,將應用程�加入到開機啟動項,在電腦開機時自動執行該應用。 ### 關閉日曆 - 在日曆介�按一下 ![close_icon](../common/close_icon.svg),退出日曆。 - 在工作列��按一下 ![draw](../common/dde_calendar.svg),�擇 **全部關閉**,退出日曆。 - 在日曆介�按一下 ![icon_menu](../common/icon_menu.svg),�擇 **退出**,退出日曆。 ### 查看快速� 在日曆介�,使用快速� **Ctrl + Shift + ?** 開啟快速��覽介�。熟練地使用快速�,將大大��您的�作效率。 ![0|view](fig/hotkey.png) ## �作介紹 日曆分為年�月�周�日視圖,����的視圖方�展示日期屬性。 系統�設顯示月視圖,�以��滑鼠點擊切�年�月�周�日視圖。 - 僅在中文系統中,日曆會顯示日期所�應的農曆日期�黃曆和節日資訊。 - 日期以 **1900** 年為起點,在日期切�時,�能查看早於 **1900** 年的日期。 - 在月視圖�周視圖中,周六�周日的日期顯示會�別於周一至周五。 日曆視圖中的�邊欄展示日曆帳戶以��日曆視圖。 1. 按一下 ![side_menu](../common/side_menu.svg)�切�視窗中�邊欄的展示和隱�。 2. 在日曆帳戶中勾�相應的日曆類型,則該類型下的日程在日曆視圖中展示;若�消勾�,則在視圖中隱�。 3. 在�邊欄下方的�日曆中點�日期,��動控制��大日曆視圖的日期展示。
視圖 說明
年 顯示全年的月份�天數。
月 顯示節日資訊�日程安排。
周 顯示這一周�天的日程安排。
日 顯示節日資訊�詳細的日程安排和黃曆。
### 新建日程 1. ��以下方法之一新建日程。 - 在日曆介�,按一下�單欄上的新增按鈕 plus。 - 在月�周或日視圖中,雙擊日期空白處或按一下滑鼠���擇 **新建日程**。 - 在月�周或日視圖中,按一下滑鼠拖拽新建日程。 2. 彈出「新建日程�視窗,�擇日曆帳戶�設定日程類型�內容�時間��醒等資訊。 pic
�數 說明
日曆帳戶 �設本地帳戶,��UOS ID等網絡賬戶。
類型 系統�設�供「工作��「生活��「其他�三種日程類型,您也�以自訂日程類型。
  1. 在類型下拉列表中,�擇 新增日程類型。
  2. 類型框呈�編輯狀態,輸入類型�稱,設定�色。
您也�以��主�單中的管�功能新增�編輯或刪除日程類型,具體�作步驟請�考「管��章節。
內容 日程的�述資訊。
日程時間 設定全天或�全天�公曆或農曆日程的日期和時間。
  • 全天
    • 勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚é–“å�ªèƒ½è¨­å®šæ—¥æœŸã€‚
    • å�–消勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚間既能設定日期ã€�也能設定å°�時和分é�˜ã€‚
  • 時間
    • 公曆:開始時間和çµ�æ�Ÿæ™‚間僅顯示公曆日期。
    • 農曆:開始時間和çµ�æ�Ÿæ™‚間顯示公曆和農曆日期。
�醒 勾�全天,則�醒設定的�項包�:從��日程發生當天(上�9點)�1天�� 2天�或1周�。
�消勾�全天,則�醒設定的�項包�:從��日程開始時�15分���30分���1�時��1天�� 2天�或1周�。
�複 �擇公曆日程,則�複設定的�項包�:從���天�工作日��周��月或�年。
�擇農曆日程,則�複設定的�項包�:從���月或�年。
���複 �有設定了�複功能,���複 �會出�。���複的�項包�:從��於n次後或於日期。
3. 按一下 **�存**,創建日程。日程創建完�後,會以標籤形�呈�在日曆視圖中。 ### 編輯日程 1. 在月�周或日視圖中,雙擊或��按一下日程標籤。 2. �擇 **編輯**。 3. 彈出「編輯日程�視窗,設定編輯日程的相關屬性,按一下 **�存**。 4. 如果設定了全天或�複,則彈出�示框,確��示資訊後,完�日程編輯。 > ![notes](../common/notes.svg) 說明:已創建的日程�以��拖拽日程標籤來修改日程的開始時間和��時間。 編輯日程時,系統會根據所更改內容的��顯示��的�示資訊。�示資訊中按鈕說明如下表。
按鈕 說明
全部日程 修改所有與此相關的�複日程。
僅此日程 �修改當�日程。
所有將來日程 修改�中日期�以後日期的日程,�中的日期之�的日程�然�留。
全部更改 修改所有�複日程。
### 設定全天或多天日程 在創建或編輯日程時,設定 **開始時間**�**��時間**,�以設定全天或多天�續的日程。 ### 設定�複日程 1. 在創建或編輯日程時,在 **�複** 的下拉列表中�擇�複�醒日程的週期,例如,�月。 2. 在 **���複** 的下拉列表中設定���複的次數或�止日期。 pic ### �尋日程 1. 在日曆介�頂部�尋框中,按一下 ![search](../common/search.svg),輸入關�字。 2. 按下�盤上的 **Enter** �進行�尋。 3. 在�尋框中按一下 ![0|close](../common/close_icon.svg) 或刪除輸入的資訊,清除當�輸入的關�字或�消�尋。 ### 查看日程 在月�周或日視圖中,雙擊日程標籤,彈出「我的日程�視窗,此時既�以查看日程,也�以 [編輯日程](#編輯日程) 或 [刪除日程](#刪除日程)。 ### 查看日程�醒詳情 當系統發出通知後,按一下通知�示框,查看日程詳情。 日程�醒時,�示資訊按鈕說明如下表。
按鈕 說明
�後�醒 �醒設定為當天,首次�醒後,按一下 �後�醒,10分�後�次�醒,此後�次按一下「�後�醒�增加5分�的時間間隔。
您也�以在"�後�醒"下拉列表中,�擇15分�後�1�時後�4�時後或明天。
明天�醒 當�醒設定為1天�或2天�時,出�該按鈕。
��1天�醒 當�醒設定為1周�時,出�該按鈕。
關閉 關閉�示資訊。
### 刪除日程 1. 在月�周或日視圖中,雙擊或��按一下日程標籤。 2. �擇 **刪除**。 3. 彈出「您正在刪除日程��示框,按一下 **刪除**,刪除該日程。 刪除日程時,�複與��複日程�示資訊中的按鈕說明如下表。
按鈕 說明
刪除日程 刪除��複日程。
全部刪除 刪除所有�複日程。
僅刪除此日程 ���複日程,僅刪除當�所�的日程。
刪除所有將來日程 ���複日程,刪除當��中日期�以後日期的日程,�中的日期之�的日程�然�留。
## 主�單 在主�單中,您�以開啟管�設定�查看隱�政策�切�視窗主題�查看說明手冊�了解日曆的更多資訊。 ### 管� 按一下 ![icon_menu](../common/icon_menu.svg) > **管�**,進入日曆管�介�,您�以管�日曆帳戶的日程類型�登錄UOS ID將日程數據和日曆�置�步至雲端,�時也�以�通用�置進行設定。 #### 日曆雲�步 日曆支���UOS ID將日程數據�設定�步至雲端。 > ![notes](../common/notes.svg) 說明:該功能暫���版本UOS系統開放。 **登錄和登出UOS ID** 1. 在帳戶設定介�,點擊 **登錄** 按鈕。 2. 彈出UOS ID登錄彈窗,在彈窗中通�賬號密碼�手機驗證碼或微信掃碼等方�完�UOS ID登錄。 3. 登錄後顯示賬戶��頭�和相關�步設定,點擊 **退出登錄** 按鈕�將UOS ID賬號登出。 **日曆�步設定** 1. UOS ID登錄狀態下,點擊 **日程** � **通用設定** 後的複�框,設定是��步至雲端。 2. 點擊 **�步頻率** 後的下拉框,��擇系統自動�步的頻率,您也�以�中 **手動�步** ,關閉自動�步模�。 3. 點擊 **立��步** 按鈕,立�和雲端數據進行�步。 > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **UOS Cloud�步**,�能使用雲�步功能。 #### 管�日程類型 **新增日程類型** 1. 在日曆管�介�,按一下新增按鈕 ![icon](../common/add1.svg)。 2. 彈出「新增日程類型�視窗,輸入類型�稱,設定�色。 3. 按一下 **�存**。 **編輯日程類型** 1. 在日曆管�介�,�擇�一個自訂類型。 2. 按一下編輯按鈕 ![icon](../common/edit.svg)。 3. 彈出「編輯日程類型�視窗,輸入類型�稱,設定�色。 4. 按一下 **�存**。 **刪除日程類型** 1. 在帳戶設定介�,�擇�一個自訂類型。 2. 按一下刪除按鈕 ![icon](../common/delete.svg),刪除該日程類型。 #### 通用設定 **一周首日** 點擊 **�星期開始於** 後的下拉框,��中 **周日** 或 **周一** 設定為�周的第一天。 **時間格�** 點擊 **時間** 後的下拉框,�中 **24�時制** 或 **12�時制** ,則日曆中的時間格�將按�中項進行展示。 ### 主題 視窗主題包�淺色主題�深色主題和系統主題。 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **主題**,�擇一個主題�色。 ### 說明 查看說明手冊,進一步了解和使用日曆。 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **說明**。 3. 查看日曆的說明手冊。 ### 關於 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **關於**。 3. 查看日曆的版本和介紹。 ### 退出 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **退出**。d_calendar.md000066400000000000000000000300271523260663500335040ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK# 日曆|dde-calendar| ## 概述 日曆是一款查看日期�管�日程的�工具,支�查看農曆�黃曆�節氣和常見的節日資訊等,內置日程�醒功能幫您更好地�劃時間。 ![0|main](fig/main.png) ## 使用入門 ��以下方�執行或關閉日曆,或者建立日曆的�徑。 ### 執行日曆 1. 按一下工作列上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器介�。 2. 滾動滑鼠或�尋,找到日曆圖示 ![draw](../common/dde_calendar.svg),按一下執行。 3. ��按一下 ![draw](../common/dde_calendar.svg),您�以: - 按一下 **傳�到桌�**,在桌�建立�徑。 - 按一下 **釘�到工作列**,將應用程�固定到工作列。 - 按一下 **開機自動啟動**,將應用程�加入到開機啟動項,在電腦開機時自動執行該應用。 ### 關閉日曆 - 在日曆介�按一下 ![close_icon](../common/close_icon.svg),退出日曆。 - 在工作列��按一下 ![draw](../common/dde_calendar.svg),�擇 **全部關閉**,退出日曆。 - 在日曆介�按一下 ![icon_menu](../common/icon_menu.svg),�擇 **退出**,退出日曆。 ### 查看快速� 在日曆介�,使用快速� **Ctrl + Shift + ?** 開啟快速��覽介�。熟練地使用快速�,將大大��您的�作效率。 ![0|view](fig/hotkey.png) ## �作介紹 日曆分為年�月�周�日視圖,����的視圖方�展示日期屬性。 系統�設顯示月視圖,�以��滑鼠點擊切�年�月�周�日視圖。 - 僅在中文系統中,日曆會顯示日期所�應的農曆日期�黃曆和節日資訊。 - 日期以 **1900** 年為起點,在日期切�時,�能查看早於 **1900** 年的日期。 - 在月視圖�周視圖中,周六�周日的日期顯示會�別於周一至周五。 日曆視圖中的�邊欄展示日曆帳戶以��日曆視圖。 1. 按一下 ![side_menu](../common/side_menu.svg)�切�視窗中�邊欄的展示和隱�。 2. 在日曆帳戶中勾�相應的日曆類型,則該類型下的日程在日曆視圖中展示;若�消勾�,則在視圖中隱�。 3. 在�邊欄下方的�日曆中點�日期,��動控制��大日曆視圖的日期展示。
視圖 說明
年 顯示全年的月份�天數。
月 顯示節日資訊�日程安排。
周 顯示這一周�天的日程安排。
日 顯示節日資訊�詳細的日程安排和黃曆。
### 新建日程 1. ��以下方法之一新建日程。 - 在日曆介�,按一下�單欄上的新增按鈕 plus。 - 在月�周或日視圖中,雙擊日期空白處或按一下滑鼠���擇 **新建日程**。 - 在月�周或日視圖中,按一下滑鼠拖拽新建日程。 2. 彈出「新建日程�視窗,�擇日曆帳戶�設定日程類型�內容�時間��醒等資訊。 pic
�數 說明
日曆帳戶 �設本地帳戶,��UOS ID等網絡賬戶。
類型 系統�設�供「工作��「生活��「其他�三種日程類型,您也�以自訂日程類型。
  1. 在類型下拉列表中,�擇 新增日程類型。
  2. 類型框呈�編輯狀態,輸入類型�稱,設定�色。
您也�以��主�單中的管�功能新增�編輯或刪除日程類型,具體�作步驟請�考「管��章節。
內容 日程的�述資訊。
日程時間 設定全天或�全天�公曆或農曆日程的日期和時間。
  • 全天
    • 勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚é–“å�ªèƒ½è¨­å®šæ—¥æœŸã€‚
    • å�–消勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚間既能設定日期ã€�也能設定å°�時和分é�˜ã€‚
  • 時間
    • 公曆:開始時間和çµ�æ�Ÿæ™‚間僅顯示公曆日期。
    • 農曆:開始時間和çµ�æ�Ÿæ™‚間顯示公曆和農曆日期。
�醒 勾�全天,則�醒設定的�項包�:從��日程發生當天(上�9點)�1天�� 2天�或1周�。
�消勾�全天,則�醒設定的�項包�:從��日程開始時�15分���30分���1�時��1天�� 2天�或1周�。
�複 �擇公曆日程,則�複設定的�項包�:從���天�工作日��周��月或�年。
�擇農曆日程,則�複設定的�項包�:從���月或�年。
���複 �有設定了�複功能,���複 �會出�。���複的�項包�:從��於n次後或於日期。
3. 按一下 **�存**,創建日程。日程創建完�後,會以標籤形�呈�在日曆視圖中。 ### 編輯日程 1. 在月�周或日視圖中,雙擊或��按一下日程標籤。 2. �擇 **編輯**。 3. 彈出「編輯日程�視窗,設定編輯日程的相關屬性,按一下 **�存**。 4. 如果設定了全天或�複,則彈出�示框,確��示資訊後,完�日程編輯。 > ![notes](../common/notes.svg) 說明:已創建的日程�以��拖拽日程標籤來修改日程的開始時間和��時間。 編輯日程時,系統會根據所更改內容的��顯示��的�示資訊。�示資訊中按鈕說明如下表。
按鈕 說明
全部日程 修改所有與此相關的�複日程。
僅此日程 �修改當�日程。
所有將來日程 修改�中日期�以後日期的日程,�中的日期之�的日程�然�留。
全部更改 修改所有�複日程。
### 設定全天或多天日程 在創建或編輯日程時,設定 **開始時間**�**��時間**,�以設定全天或多天�續的日程。 ### 設定�複日程 1. 在創建或編輯日程時,在 **�複** 的下拉列表中�擇�複�醒日程的週期,例如,�月。 2. 在 **���複** 的下拉列表中設定���複的次數或�止日期。 pic ### �尋日程 1. 在日曆介�頂部�尋框中,按一下 ![search](../common/search.svg),輸入關�字。 2. 按下�盤上的 **Enter** �進行�尋。 3. 在�尋框中按一下 ![0|close](../common/close_icon.svg) 或刪除輸入的資訊,清除當�輸入的關�字或�消�尋。 ### 查看日程 在月�周或日視圖中,雙擊日程標籤,彈出「我的日程�視窗,此時既�以查看日程,也�以 [編輯日程](#編輯日程) 或 [刪除日程](#刪除日程)。 ### 查看日程�醒詳情 當系統發出通知後,按一下通知�示框,查看日程詳情。 日程�醒時,�示資訊按鈕說明如下表。
按鈕 說明
�後�醒 �醒設定為當天,首次�醒後,按一下 �後�醒,10分�後�次�醒,此後�次按一下「�後�醒�增加5分�的時間間隔。
您也�以在"�後�醒"下拉列表中,�擇15分�後�1�時後�4�時後或明天。
明天�醒 當�醒設定為1天�或2天�時,出�該按鈕。
��1天�醒 當�醒設定為1周�時,出�該按鈕。
關閉 關閉�示資訊。
### 刪除日程 1. 在月�周或日視圖中,雙擊或��按一下日程標籤。 2. �擇 **刪除**。 3. 彈出「您正在刪除日程��示框,按一下 **刪除**,刪除該日程。 刪除日程時,�複與��複日程�示資訊中的按鈕說明如下表。
按鈕 說明
刪除日程 刪除��複日程。
全部刪除 刪除所有�複日程。
僅刪除此日程 ���複日程,僅刪除當�所�的日程。
刪除所有將來日程 ���複日程,刪除當��中日期�以後日期的日程,�中的日期之�的日程�然�留。
## 主é�¸å–® 在主é�¸å–®ä¸­ï¼Œæ‚¨å�¯ä»¥é–‹å•Ÿç®¡ç�†è¨­å®šã€�查看隱ç§�政策ã€�切æ�›è¦–窗主題ã€�查看說明手冊ã€�了解日曆的更多資訊。 ### 管ç�† 按一下 ![icon_menu](../common/icon_menu.svg) > **管ç�†**,進入日曆管ç�†ä»‹é�¢ï¼Œæ‚¨å�¯ä»¥ç®¡ç�†æ—¥æ›†å¸³æˆ¶çš„æ—¥ç¨‹é¡žåž‹ã€�登錄deepin ID將日程數據和日曆é…�ç½®å�Œæ­¥è‡³é›²ç«¯ï¼Œå�Œæ™‚也å�¯ä»¥å°�通用é…�置進行設定。 #### 日曆雲å�Œæ­¥ 日曆支æ�´é€�é�Ždeepin ID將日程數據å�Šè¨­å®šå�Œæ­¥è‡³é›²ç«¯ã€‚ > ![notes](../common/notes.svg) 說明:該功能暫ä¸�å°�è€�版本deepin系統開放。 **登錄和登出deepin ID** 1. 在帳戶設定介é�¢ï¼Œé»žæ“Š **登錄** 按鈕。 2. 彈出deepin ID登錄彈窗,在彈窗中通é�Žè³¬è™Ÿå¯†ç¢¼ã€�手機驗證碼或微信掃碼等方å¼�完æˆ�deepin ID登錄。 3. 登錄後顯示賬戶å��ã€�é ­åƒ�和相關å�Œæ­¥è¨­å®šï¼Œé»žæ“Š **退出登錄** 按鈕å�¯å°‡deepin ID賬號登出。 **日曆å�Œæ­¥è¨­å®š** 1. deepin ID登錄狀態下,點擊 **日程** ã€� **通用設定** 後的複é�¸æ¡†ï¼Œè¨­å®šæ˜¯å�¦å�Œæ­¥è‡³é›²ç«¯ã€‚ 2. 點擊 **å�Œæ­¥é »çއ** 後的下拉框,å�¯é�¸æ“‡ç³»çµ±è‡ªå‹•å�Œæ­¥çš„頻率,您也å�¯ä»¥é�¸ä¸­ **手動å�Œæ­¥** ,關閉自動å�Œæ­¥æ¨¡å¼�。 3. 點擊 **ç«‹å�³å�Œæ­¥** 按鈕,立å�³å’Œé›²ç«¯æ•¸æ“šé€²è¡Œå�Œæ­¥ã€‚ > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **deepin Cloudå�Œæ­¥**,æ‰�能使用雲å�Œæ­¥åŠŸèƒ½ã€‚ #### 管ç�†æ—¥ç¨‹é¡žåž‹ **新增日程類型** 1. 在日曆管ç�†ä»‹é�¢ï¼ŒæŒ‰ä¸€ä¸‹æ–°å¢žæŒ‰éˆ• ![icon](../common/add1.svg)。 2. 彈出「新增日程類型ã€�視窗,輸入類型å��稱,設定é¡�色。 3. 按一下 **ä¿�å­˜**。 **編輯日程類型** 1. 在日曆管ç�†ä»‹é�¢ï¼Œé�¸æ“‡æŸ�一個自訂類型。 2. 按一下編輯按鈕 ![icon](../common/edit.svg)。 3. 彈出「編輯日程類型ã€�視窗,輸入類型å��稱,設定é¡�色。 4. 按一下 **ä¿�å­˜**。 **刪除日程類型** 1. 在帳戶設定介é�¢ï¼Œé�¸æ“‡æŸ�一個自訂類型。 2. 按一下刪除按鈕 ![icon](../common/delete.svg),刪除該日程類型。 #### 通用設定 **一周首日** 點擊 **æ¯�星期開始於** 後的下拉框,å�¯é�¸ä¸­ **周日** 或 **周一** 設定為æ¯�周的第一天。 **時間格å¼�** 點擊 **時間** 後的下拉框,é�¸ä¸­ **24å°�時制** 或 **12å°�時制** ,則日曆中的時間格å¼�將按é�¸ä¸­é …進行展示。 ### 主題 視窗主題包å�«æ·ºè‰²ä¸»é¡Œã€�深色主題和系統主題。 1. 在日曆介é�¢ï¼ŒæŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **主題**,é�¸æ“‡ä¸€å€‹ä¸»é¡Œé¡�色。 ### 說明 查看說明手冊,進一步了解和使用日曆。 1. 在日曆介é�¢ï¼ŒæŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **說明**。 3. 查看日曆的說明手冊。 ### 關於 1. 在日曆介é�¢ï¼ŒæŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **關於**。 3. 查看日曆的版本和介紹。 ### 退出 1. 在日曆介é�¢ï¼ŒæŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **退出**。linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/000077500000000000000000000000001523260663500317305ustar00rootroot00000000000000create.png000066400000000000000000001064461523260663500336350ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/fig‰PNG  IHDRÖ?EÛoÚ pHYsÄÄ•+ IDATxœìÝwt×ù7ðgf{ת÷^B!½ƒÁ4p·qÃ&�8Ží8qüÆvœØ?“Øã^€ØôjzïMB„zïu»vwfÞ?F,‹$„¤]i<ŸÃáÌܽsçÎ }™½sg–(**„B\à€F£áº!ôÀQ*•$×}@¡F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`Ôs ÃpÝ„îmÁ¨'Ò3s¿øvÛŽ½'Û¿Ä0Lqiå‘—)Šê¼‘CÇ.¾ûÑgΧ;±cf³åjFÎáã—œØ&B½‡ÏuÐ=©ÅlÉί,(©�6)I,€Áh*-«.,®LË*¨¬i€êÚ†GçN2Œÿúüûm'ŒŽ«¨ª€’òÚÆfý© Y…%UìKS'wwua—Ï_ÊÚ°íxçݘ91qÊ„P×Д“[RP\™y£Äh²@h°ï·öktÆö[½ôäôè¨ß„œ#uCc“öÝ�²­š-Ö7þþ5ŒEÑô¹+¹l¹\*Jˆ ��¡išaûŒ÷ øÒòl%åU�åU�ìòØQƒ{Ö±ÚÚÆ_vžb—Õ*ÙÄ”x•¢uU)åóy­ýoÖ[)ºg»@¬o¯ùôƒe={õ®0‚Q7ðxd°¿{iEúº™­ÖòªF¡€¯RÉ50uìàáCº©UA°›(2öè¿¿øµ¨¬.%).&:tTR<ì=pfÿñ´yÓ“ÆŽòý†½©YEí÷èãéò䣓ۗÿøËAö\›ðìâÉUuûަF„ø¤Œ¼åËŸŸëæªb—?[·%¿¸ÚIozP|úÁ²;嬃ù Á¨[” Ù³Kf¼óÑ�‘!>¯,�›“W²ú»Ý‘!ÞS'ŒØ¸å ø{ÚFì•”U•Õ¹«å:½qÅÛkì_ÚúÛ¹­¿�c—?^½ù¯Xâîv«±PàëíѾA±P`¿*ðãc#¬Ö»Œ>#Ô3¦°ãù Á¨»T*¹·‡ª¬²Þb±^»QÃÜu«s—®ÀÄ1 ®jEBL0[XVY_Û õñtñöpÉ/®Ö茑!>AOþM~óóîôë%ìò…´¼ iy“RâØÕ5ßî° DÔ5h{Ð8BÐ.…�’¿€Œºåjfî·²Ë|w»ðÝ/‡d;O Š€¯×8`«Ï2Ô74Ÿ¹tvî?àãž44:;·x<H’ø$IÀœ£TJ¹sû\רsnƒè�eKagå/`£n �¾n`±RìP¬¿·+I¢Û‡Ú8zò ;ƒØh²TÕ6Õ74ßér\{…eµm.:ôÄ#Sõãß?YOÓŒ�§Ë«K犄‚‡¦�Š¢4Z}m}SyEíõœ’„Aá8õ˜só0‚Q· ˆ  ÍÝ;ÿúV¾¼@ÀçÀúMàÙÅ“å2Ég_…ÿï�§ØóÜsÆ/˜3¾²ªîŸŸÿê鮜2a;“Ìþrœƒ Ù¹Å4Í@eMÓùKYÇݼãHNAEM½Öþ’ÂÒšˆð€¬º+< F\Ê/,ûìë�ö%üÛ:Hm±X@©�òx<  @Ótæõ‚–³\&?o·_·>}醭ûËqO?:1!.ʾ}_/—gOkß“ï6n²/IËȵ-ï:x1,ØW*7k�îjy³Öh¶X㣃â½<\U '�u „-y�˜ÂÁ¨x<ž‡«¬Ýج79IR‰¨¡I b‘ÈbµÚoB’ä¾#›5†aƒ# (À‹¦öš[^aeYUCH€G�¿'[ÙU­l³G‘@àéáÚ¾'"ÁmCU5õ—3 Ùewµ¼®Qw9=gþCãfLN€¯~Ø™™S6h`H›|G¨ëÚd®³RoPFÝèóÒÓ Kˆ|tζä‘9cý<¦NJª©k±XÔ~«”¤X�¡åè™L 2-#¯®¾¹®¾Ù`j½¡…]­«o>tìrÏ:¶ïÐy¡AÞ)ã'�úîG?°²ó+`ËžÓìê…ËY=Û z`u˜¶l ;Ø2ž£î9v*õä…ëófŒdW Š*.g^­mЀX,Ôêôm6I½ÿè•Æf} ¯›X,ÌÌ)³µ¦^SS¯a—ù¼žžàç¥xñj>Ì}h,Iìyº�Ñdaï]fÇLê¢NÎv?ÆFÝÐØ¤9})[)—Ä Ùº÷,$�tìlæ–=gÀÛC%éè,˜Ïã©’Æf}ieƒVg°ý{íÊå¸.Έ¥3m·äñHl;b"Ÿ?nØ��Ý;`„ìþ!õàÕ»Â�Ô ù…å4ÍÌš<Üv…L&Y2oÜà˜`ˆŽèp«´ŒEeuÀ0Ìú­ÇW½íjFN]}“—§ë¤”8_ŸÖ›ßhš±Z©žÝáèÞƒ ➣nš-—I"Âtú[OÞ‰��8xì ÄÇv‚¹ù%ë·€1#¢àÄùë9…•9…•¶ ‡NÞö°ÊgM<(Ò¶ÚÅgDÈåÒ6>úlcyõmÓ�Þrìç-ÇØåw^{Ìöà„8„Œº‡�Ìã‘Ñá¾@AÄòçç#bÒ˜½ÞèïçÙˇ‹Pï"ŠŠŠ4 ×Ý@÷3«•âñHÛ@mï1MZ�A(ØžT‰P¦T*ñ,õ:ÛSrz›D"–HÄ}³/„œ/Ç!„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœásÝ�{ŸÏçñx|>Ÿa`ÿFÝ‚`ÿ¶Z­EY­V'6ŽÜR©” �ÇþM’øa¡ûMÓE‘$É0 MÓƒÁY-cvt›B¡`F$ …B�@€ù‹Ð}�$I�@ ‰Ã0 …Âi-;«¡„T*µZ­2™ “¡�Ç“ÉdV«U*•:¥AÌ‘nàóùAH$®;‚â’X,&I’ÏwÂ@.ŽwA$I�ßz�±9À^¦s´)Ç›xpðù|@€³Î‚1Pº#!΋ ”îÁFF0'p!dã”@è¿|ú|zƵ¼l¨Õ²s‹wï?}âtªÓ{ÕuŸÝwèô�^ݹ÷xEe­}ÉùKÿÛ²¿}Í#'.\I»Þƒh4ºÌky›¶rDü¥+YÿY·•}å§M‡ß\±Ž�ÍŸçæª*,nÍ÷Éc/š?ÕÖ`›a–/Üóå�{Úwcîô‘óçLräºÿÔÖ7mÚq4ãZÁï^˜ß&…)ŠúlÝ–ìÜ⸘0Owuïõ¡¯#8=+ß–•+Þ^î{=¯‚]=r:S)—¼÷Ö3 •Š|¾‹RV×Ð̾zêbö©‹Ù¶v^{y^ ¿·muÚ¸„A1amöµkß™;uC©�½¾|‘3¨•—§ÛÏkÿÊ.ç–¾ûÑQa¾--æÂÒÚÿû/{{¹ÛjJ%âÄÁѾqîÌÑÑQ!5µ �Íú?üåó†&]H€Çk¯,ù~Ãn…¢õÄV.“|µ‹¢º¶�-9x"íà‰4[kï½õlH�ŸmuÞŒäÄ„[ÿ“±~ÙzȉGŠÐ}ÃÓ]ýçß?ùá~Zõů¿é>¿5…)šþü«-×sŠÞ\ñx¯æ/81‚5:Caqy›ÂÆ&­ý*Ã0ñ±a3&'}´z3�$ž>"eäàK©×ÞrL$ä?¹pbìÀ¶1j3jØ€ÙÓFÙVíÏþ`\ÕJ_Ï6›È¤âž�¶î:6zx´P( )ÚÃÍåèÉK‹L³½êáîêáî*àóü|=³omÞu‚f˜‡¦ŽÔé …%•..Êf­^.»ã@&¥ ~tÞdÛªHtë"àá® ðm³‰Bîœç‰ tÿ ðzkåþ积mMaŠ¢>ÿj˵Eo®x<4¸ío“Ó9-‚s «þ³nGûò¸è@Û2EÑ× ÷½ütÃØÑ‰>v'ÂÀ>æ�/à ‰ Ë+¬˜4nÄ¡£ç€†ašt ¹ŒaZwÆ0 0ÐÔ¤Ñé� ÕÝzV©VgpsUÝ|¬<¯£2 NjFèý=ß\ñø??ýyÕ¿¼ºtÞºv²ùäÓùo�S~§œÁ‰ƒBŸ\4­Má®}§ì/ÇMæ°`ŸIc5Z½Éd^øð„_·~õÙÙYÙ…zƒqѼ‰Û÷œ é¶¹þ·ý„•¢àBÚmÓ„ßó)…B-fkS³®¬¢¦Í†zƒÉÝõîS#œˆ¢è-»Ž�ìüt*DE‹ÿé{_{õqï¶YØ ‘aA*¥<¯°ÂVhµZëun®ªö�½~ŸÕJÀÉó×ìËÿû¯•ì4>£ÉÜØ¤)¾ýª huF�^þ0…Ð=-(ÀëOË—üë³õ|g5EÑlþöÍ®ût,X«7ÆF‡TU7°ÃÁì ‡ó©­ÁššYøîŸž²¯O3 ¼ðÄô5ßïYùœÃ'®øy»�5xÓŽ£ ƒ"Øü5[¬�qç� pàBû=ù·�èUÛ÷­¬nxeéûÂGæNúË_ÿºõÀâ…­ÿE±ÞÿúçÝÍZãKOͲ¯Ü¬Ñ€Úå¶ÿ9Øÿkÿ¸lá??ûß;|bÏ�3�þ^S&$ý¸qÏðÄ�lþšÍ–&�aã¶c°íXûŽõÁç)„îi!A>o®xìó¯¶.~^p`å/ôe›ZÌF“E.“ÔÕ7ûy«W¾x[N¥gåí>Ø6C·ï;OļYcÙÕñ£>ûzç™KÙ<’˜2~[ØÐØ ï½ù”R!k³ùo‡Î¶/diµúu?î>>%ÑñCcí;tfûogçLKª«o¬«o´Ÿ”6nTÜÞ×H9ö„+i×·ï=¥Ñ™&ŒŽ›9etYÅm÷ªH%¢gM1[n»£dý–#A<öÈtvuú¤‘ï¯úùè©4�|hzë,‘ºúFøüŸ+\TmŸç¿mבö…¡6‚}>z÷å6ŸV{[ßEpS“Ô.Ê¢’ªòªÆ·ÞÿÆþUšaT7§„ùzy¨O�˘1aȘäÁIëUµ°ÿ¤„ˆKéù^¹ØöQ='·ÄÏ[ÝaÔNŸ4²}!«¡QSRQ/ �ÁW®^߸íè«ÏÎþyó¡ûÎÙÊÓ®€B&~õÙÙ_ü°;Àϳ´¼&,Äwù‹ ÙÑa[.‘ˆ'ŒþÖß×¼øÔœˆÐ@/�#'..˜5zòøRië<計àq#cO]¼þÑß^ôpwe ³®çû{tµsšà”cDè¾×Çù NŒàË—3Ö´/·]Ž+¯¬óöP±'w�¾n¯½ò¨}µ«™¹Ûö¶Î!S*dl¤ŠEB‰DÌŽy›-ÖìÜâÀ¯âòÚ]ûN?:o¢D,²X­§/^ÞÝÞú¼¾l¾«ºƒ!מIˆðþ[Ïø{�Ç–|¿~EÓÏ=1ÇV'0ÀÇÇÛƒ¢(ûˆ"¡Àh²X­”J¥P�t:CyU£T*Q©*•Äb¡T*i}ÌÖÌky¡Á~ùE•¿n;ôìã³%±Åb=r*uäÐ�Î:„Pßè»”¯çÌ.—TÔ¯x»m^«U•TÀÚöºªd³§�|ñ©‡Ö~¿ó_Ÿn\þüÜ+WoÔ7ê’ºs_œ�¿ŸW¶º‚ ìæ)wÈÇÛÚÌ ò“J„Ï,ÿоpDB¤§‡k›Íó Jà£ÿþÏÃU¹hÞ„×^]òÿ]ÿÖ{kßþÃSç.¦W×5�å´A„PßpNŒ  ökƒ²@Àoi±°Ë£F " \\ä“FÇM�xÛä³âÒª¬ìBûw•BJ…|`„ß„”„°�’$à//LÏÊssUyyº.zx {=ª¿qU+húîsV¤RÉ?þúRC£Æbm}�PÀws½õl/OWvxÁE¥<0xƔ䨈`vÚßþôÜå´kîj_�¥�ÍÀ_„î9DQQ‘F£áº÷±X쬯MEÝë ƒÉdº{½;S*•ý÷yÁýSûiË¡�³¢#¸{0‚Bà¼(À/±ï†––’$;|®Bè�bµZ[ZZoÏ‚»�¢(†a¨ÛB�zÐ81 0‚»Çjµ:8�º×™L&ëÍ)LÂî’$õz=û7ž #ô¢(ÊNù{ î¡PØÜÜ,—Ë- EQäM\÷ !Ô‹hš¦iš`¦¹¹Y$rÎ×Nbw›H$ÒëõA¡PÈ~¯>�¡û•íwÜl6[,†aœ•¿€Ü3B¡�¦i³Ùl2™ºòw„Ð=� ‚ H’äóùÎýÔ‹ÜC$I …»×C¡;ÃAL„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0BqoPî!>ŸÏãñø|>û€|LB÷+ö1=AX­VŠ¢œõ¤`FpOH¥R‚ x<û7>¬¡ûû¤J’$†¡iÚ`08«eÌŽnS(ìÓê„B¡@ ÀüEè¾G’¤@ ‰D�€a…Bá´–�ÕÐB*•Z­V™L†É‹ÐˆÇãÉd2«Õ*•J�Ò æH7ðù|‚ $ ×AqI,³Ïv¼) îö™ÍAàÅ7„dl°—émÊñ&N`>Bè嬳` ”îÁF�ó¢¥{0‚Bà¼(À±ànè|X�SÃÛr�ªÕ ´#b` =”ôüa–H¯^ì%B¨O8åš�"¸¥Å, ÷:äíå. îT³¾¡¹M§E"¡BÞ:·cË®cÃú{;Þ¥¾'È©¡×"hpHøÙ~œža+C7×jèu‡/N²Dx:·×oèõÆ¡CbÌfËåÔk ƒ£Å"üvQ„ú;G#˜¢è?ݸôñéÙ¹¥~¾î'ϦMæÌ¥mª-˜™œ’<ø?_nÕèŒöåFź»ª KªdjÆõâ�ö‡+¼-Ü„²;]$%B@ðÜ„²z³žÜrÑòæLçv`óΣ�þ^C‡Ä¤gæ|ùÓž/⢜Û>B¨78Á<9jXôÅ+× Y£OÍ,|cù£sgðÕO{E' �©D ï½õÌŽ½'`ÎŒ1~ÿë§�tòLšÕJu¾—ŠªZµ‹R"9ØÛÞCÕj\’»NR!B%�4×jîÚàÆÍûöºØI…1I1/<=�].(,½‘_ñèÜIpääå¤!‘‰¸Ë}GqÆÑ6›->Þn�WX©ÓSF ”JDßJQ M:©T 7#¸gŠK+W­Ýê³ì¹¹ö¶÷ ð‰. Ïó ’¡é»V“œ0(&ܶºm÷q¡€?sê([‰m»æTYU›~½N]xϾµ·ÿXtThWº‡Ðƒƒa˜Ã'.��ÀãñÚ¿JQÔÑS©Ç$:eþï�8Á×sоÝx�].«j€’òZ¥ìrF|÷Ë!àóÈOþþÒÕÌ\[Í#§3`Í÷{Ô*ÙÄÑñ�ïBí¢ô÷và`W{A@NA�]¨éçëåç{ëªÝ±“W$baltxûšiéÙ'Ï_{zÑdš¦×oÚ—8(là€àŸ6þÛëO‘d뎼½Ü»v=@jë›6í8šq­àw/Ìo“ÂE}¶nKvnq\L˜§»º÷úàhÇÇF|ô·à{N•Õxº«EÄÇFüø¿}O1zd<äå—~½~?D†þy墯Ú›<,:f@È'_lyxzRDhÀõE�ïB©�½¾|‘ƒý¼_U×Ô¯þf;�yàÈÙ¼ÂÊßy©¼²ÂCzõo„îužîê?ÿþÉÿóÓª/~ýýK�ðù­)LÑôç_m¹žSôæŠÇ{5Á)3"9/ „|~€¯Ç¶½gôz#³}ßùíûηîƒG€D,jnÖÕÔkâ"]T I¸º(ÝÝ\<Ü]ïÃkÏþSžî*£Él¶XOŸÏxþ‰Yj%ÁO¼ü¾­ÚÏkÿÊ]ê¿‚¼ÞZùćÿùéßk[S˜¢¨Ï¿ÚríFÑ›+ öíí8Ág/f\Í*\ùâü�Wÿ*“IRFÄTTÕ1LëÈÍ/YûÃ^hnÖýôëÁaña.ªÛžó6 2X­n¨®m (º+ŸÐ9Ä0Œ³žÑýv¦£­Æ§$N›œüÕ;ÞŸÿð´X,bÞ{óâæìq|¨BwèïùæŠÇÿùéÏ«¾øåÕ¥óÖý°“Íß� ŸÎqúżàÁ±¡r¹T,üãWs–ÌŸxôdêæ=g6ï9Óº ÍZ�H$˜;k [8ylšï÷°I}èØ¥Ëé�¾n~xÏB÷ùÙ–Å·Ï ôÅ�„º"(ÀëOË—üë³õ|g5EÑlþöÍ®�àìÜâï9Ì.ÿðëø¿5[…Ι:btRä”~³áú{¿ºtžíÑø”Ä«™ìòc §<¶ÐÁŽ ¶ŠK*lgÁ>ÞîBÁo™A…ù¼¹â±Ï¿ÚºüùyÁ�}”¿àxGG…¼óÚc‹åÃÏ~}fѤ?/‚€ÝûÏÒ4m¥( ¨[°ªjêþõù&ûÍ Ëjm'Ë 1ÁO/™Ñ~Z­~Ý�»‡Ä…�OIt°·½‡a€a˜®œu2 C÷ɰÀ_ÿù�mù£w_òÁIu*8Ðç£w_æñúô90ŽF°X$‹„W3s`ûÞ3/<5Ó×Ûv¼¸ë`ë�ü›‡äîêòÆò[§»?þrp`dÀЄìªHØñ µ �š’Šz±Hد#˜+C ˆf¶aeè!Ñ ~\ó6D Ô-}œ¿à”Å¥•·{|þ¸’²êÕßì\ùâ¼S’ Jª£B}}½Ýö¾ôÜ’©lM¡PÀ4K,¨U û’ú¼¾l¾«ZåxW{é¡l®Õtrƒ2‹a˜f‹‘çy—cI˸ñÉšMíË��ɰ_]þÜœáCõ ·¡~ÂÑNËÈùþ—ÃÓÇ' 2phB´H$ܾçdNaUx°×üÙã„BEÓkÜ»ô±©Y× O_ºÑfsû�ÖÛ+yz¸¶©æßï/ÓQó†2_©7ëU�?¦Çb¤H ç í¼µÐ`ÿ¿üáñ»îÔËÓ­ç=FõŽFph°ß²gfF†A³¦Žªª©ÏÎ)NIÌ#I˜0f¨@ÀwsUM“˜4,æ® º¸(ì',‘^‚&’[/5×jºƒÙu4ÃAð(#¸Ûd2™X,溡>E�ÇcO¿L&“^¯wJ³8Ñ=*• ó¡œX,V©TNi #¸d2Ÿ�ŸBÀçóe2™ãí`wû„ë^ „ú ±Xìø—ùbwæ/B¨ ÇŸÝŽÜU�€ë. „úÇŽÜUøq¡6�Œ•®ê|þ/MÓç.eU×4´I£Õ×54ÝiÖóÕÌ\‹Å¡/Äf¨­oÊÉ+q¤„Pw9~[^ßwMÓ¦3X¬Öì¼b…B >¿®¡©¾AS]ÛЬыEÂñ)C*«êÒ2óØ­B½c¢C�½Á”_TäË~�@À·ýP½ Ó;ÜiÌ€à¨ð ¨­k,(®¨«o6[¬^j·†æãgÒÚTŽÐ;G�rF°£š5ú£§®ØV÷>CG]J»¡vQx¹«c„z¸»�$éïëéæªÒé ç¯\ô9~:M«3°[:~‰]˜:a¸L*±µàíçëÑf�—ÓnØ–I’”JD*¥ŒÏã% ‹ÕŒ06y°HØ:r}æb¦ó�!ä$Ήà´ôœf�nìè!pýFáÅÔì'M€ó—²ªjæÌHa«åä—ùüà _Û†­~Ï�3MUX\$Þ{—¼Ô.Š±ÉƒÏ]Κ1)v8=lð‰D)Iñ|þ­9+B¡@(TTÕ©”2©T2:)ôz㉳W'¤ !âð‰Ë&“Y*ÛN„• ©—‡k›=Ú·éæªrsUe^Ï·?_–É$bQëUa#Ô�9'‚kê«jÙeƒ±¥¼ªuHT«3Ô54Ûªå–WÕ4>cÁf³åÜ•ÜIc‡ž»týø™ô¥O̲eÇ=D!—¶´X´:=A‹ÕU­4šZ:¬É0P\Vpñʵšº[ÄGN¶žG?“6}R’DÜÕ™.Z�Áb±Mf³ÙÚШ¡hÚÁcAõ%gDÔÕ7}ôß_)жRô_þñmx°wjV¬x{ÍC“‡M7,*<ðÀñ4£©¥MÄ…‚§Oÿæ§Ý9y%q1áí[®¨ªU»(»L}Éb±Z¬V¨oh6[,J…Ôbm-ihÒðoÎÜ–ˆE‰¨²ºÎ`0)äÒ¤¡±E1z½ñø™´‰c ‚8tüÒÔ Ã»u˜YÙUõìò±Ó©A^°÷àY'$B¨wEEE�¦ÇÛku­Nú\F}£fÚ„á&³¥°¸âü•œgO•JÅÇN¥VÖ4Ì�™¢�KUJ¹ÕJ5i´î®.Ÿ¬þ¥¤¢¾Ã?þÛóm†#ŠK+W­Ýê³ì¹¹=î§ãÜÜÜ:,/(*·]d³ ò)(®´/|ää¥f�Fçæ—Z¬mŸ·d?|àè7•Ÿ¯g›:—R³ÃB|ÙËq@Qôî§eRÉÄ1C†ÖÛ�HÐ £Ñê½<\ïÅ„î õõGYW(•JGÏ‚ÓÒs6ï9Ã._ÏÛþ‡çù{UÕ4x€¿¯ŸÏó÷õ€ï7ìeOŠgNL\2"{žØØ¤ývãÁŸ˜&—KÙFÚ?„Aí¢ô÷vÑO¯é‡û…û@Ƶ<�Î8rø hjÖWΙ>º®¡ùôùŒy³Æ²•'Ž �]TÈ¥Ó'��Þpää•)㇉E"h7Ͱ°¤ª°¤ªóÔÔ5P­ÑêKʪý½‚ÐŒ:½±±I[]ÛhµZ'�†ŒPÿäh§$NI|àÈùªšÆ'M3M2ƒä¡©ÉuõMêê_Wßäîæ2{úè )CV}¹m@d��·»F«ÏÍ/ ð?_Ï«™¹q1á.*Eû](²×—/r°Ÿ½§´¼úbj¶muëîãD’D›ûÇ�¦–32ÆŒ¬Õ$báÎ}§l/8z‘]HŒ�dßV‡óɽ`¿ZQYÇ.d^/ðtW=u…ÏçÑ4Ã0LD˜¿Z¥aþ"Ô_9s,˜¢¨3ç3v¼Øþ¥O?XæªV646+dbö¤¸±Q³ý·s+^h[8r*=8ЧÃîç¼=Ý&¤$š-–Ò²j½Ñâ/•е:ƒ¨Ý�‹±Èj¥®Ý(‰j%{j¬Ó»8còÈž]‡lÖèJ+j|½Ý�a‚ hú¡i£ '¿¤¬¢Ö6X�ꟜÁ4ÍäV¾óÏï]”²„˜à§—̸œ–}úBÖï^˜_X\þŸu;Øj×nE†ú46i]ÕJS‹YÀwô!Cý�@À×é ٹŞj�™w#¯$(À›Ïç‰Dœ{F„ú§eæ…û¦eäØ�0Ø.  üYSGu}ïW³òý¼„B¾NožS[ßhŽÌž’úyMˆîáá!„z“£œq-ïØé«yEÕ2‰0%)Æd2³—›Ú3[¬g.eM–Kéo¯\TSÛèåáœgs® ¤"8Л�ˆâ—•]èëí.—IÚ×tws­Þ˜0("*"ôzãÉséãG'ˆDB  {÷;º©•aÁ~y…e@àꢜiäésW��ÍJ}{ ûꊛ ðÿù×ç3¯åoÙsÊÍÕåJƑĸÛ«<’šfHòû*¶ªšz�F?rhlvnøùx—V—VÅF‡¶©IÓôÕ¬<•RÆÆnxˆŸZ¥W…L*éðŠYúµ‚ôk�ì}`Tˆý]ê|>O¡�€H$äñHv!Ôo9Áñƒ"€½Ç–D‡û.˜=.ãZþ嫹O/žVRVõïGlõ¯fåÇ ÙùÛÉÚzÍЄ¶{ºâcB>ùb+üí��¹ªo;;Öjõë~Ü=$.||J¢ƒ½í žîê‘Ãb‚Öw’$Éðÿ³—²¼=ÛNbKÍÈilÒŽ=D,æ•Wf iš€ÝÎØª�=DíÒ:&~×”íó×b±îÚÚ¾&;c“»¹Þ'Ÿ9ºŸ8ÿ#ªX$twsQ*dB¡ÀÝÍE«»5.Ñb¶¤f._:ûÄ™«Ï,ž"‹l<{zÊıC ¤Ò¶OFohÔ”TÔ‹EÂþÁ$I²é&—IÙ)*•½ ¸jÖ¤¡Ÿ½kÈ �!q‘r¹D(ŒOI¨oh®ª®7LZ½1,Ø×«ÝGx?/û‰Bý�£LÑô'k6‹EÂÅsÇ€\.�:vðŒ)ɶ U5õ‡�_€f­îá£"Ããc#Ò2rö½Ø¬1ht&àñHŸ ± :§²"„Ž>#¢ë(š¾§œx§gD „d>#¢ï2ñžÎ_„ê ‹!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â FpW1 ÃuBý‹ã±€ÜU4MsÝ„Pÿâx,`w•ÅbẠ¡þÅl6;ØFpW™L&®»€ê_0‚ûEQ˜Â!“ÉdµZl#¸ôz½ãï8Bè>`±Xôz½ãí`wOss3ž #ô€3™L�Æ)Mñ�ÒÊE¯×›L&‘H$ I’$‚ë!„zÃ04M›Íæ––Š¢œÕ,FpOPe0 ×AÝÛp !„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3ø¤´žûíÈż‚ŠN*„‡úNŸ0¬ÏúƒºçàYp}ðéÆSg3‚éäÏÉséþg#×=Eõ_N; ®ª©·Z[c, ÝÝ\œÕr?ôÛ‘‹�ჷŸ»kÍ?ÿãÛ}‡/N›ˆç¡8-‚×o:TRQÏ. ø¼?.[àíåÖ¦NQqEÓ�4âé®V(dÎêRïÉ+¨ðñn{tòñtË+*ÀFuÀiüÚ+� ¦Ï¿ÞèÍ0Ìw÷½ºt®B.µ¯óý/›;û»¥�M40¼}yEU­ÚE)‹œÕ[„êœÁƒé›õ{äRÉÜ™c†Yóíöµßí|é™Ùö)ü²-3 ³ò/_¼ôäôè¨�Î[..­\µv[T¨Ï²çæ:«·!Ô8çr\uMýêo¶@<÷ø �€/ ^xò!�€·ê‹M¥åÕnÂ0LW»(ý½]D8¥«!Ô8Á4MŸ:{õ£ÿnòötyþÉYâ›cR©ø¥§g‡yÿ{í¶ý‡Ï™L-m6´X¬Àçóîº ¥BöúòEÆ u°«!Ôß8:‘ž•·í·³3' Û±ÿü¥ô‚öæLqøÔUow†a¾Ýx°Í«ÿývw›’O?Xæ`—Bè^áhÇÇFú{»ª•£‚Ù’]ûN‹DÂ)ã[çxz¨G�$ ›5ºWŸ�eÛðzNñáS®ŠGë`BèåháªV€m šT*–JDö3ÒD"!¨”r•Rn+<ùºJ!©mÐ*2/Ï.MðB¡ûŒs.Çiu†ºú&ö�ÑÔ¢7˜l«:�¡}ýêÚ†Ë JIˆ >v:Í)}@¡{Žs&¥9qéÈéLû’‹WóÙ…I)qMmÿ’ÕJmÝu<Äßc`t¨«Zùñš-±Bb¢CïÔ¸V«_÷ãî!qáãS�Ò[„ê'œÁsfŒ™3c »¼~Ó©D4wVÇ#¼f‹õ§_ö”Ô¾¶l>�$ý|=gOþã¦ÃKãG„v¸IC£¦¤¢^,öŸõ=y6£+5+ªëÆ'Ç÷vB÷¨>}RZIYÕÖ]'+k›^}ö!ï›ã¿cG'ÔÖ7­þnÏì)ÃG�m \P ÏëËæ»ªU}ÙÕÎMŸ0,-=ïÏ|ëÓî&l{Õuj¥|ÊxœN‡êQTT¤Ñhz¼=EÑxgí]«}ðçg.^¹¶}ßù@?·Åó&øz{Ø¿Ê0Ì�£~;rE$ä¯xþa_�;µÓ¯ì;|1¯¨¼“ ‘¡þ˜¿¡;Q*•ŽF0TTÕÞµŽ—§[uM}aQEÒ°A<^Ç×këÓ2r'�F„#ýA¡{‚s"!„P(•J|d;Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq¦O¿¾ó¾”«o-r=S#¯2À[jIöÔÍ nˆPš¸îZo±Z©Êê†ÒŠZôóðötåóy\w ¡{~qQÏ™iâ£tŸM…nL»—€…!õŠ«’í_¼·?›~)õàë%åµ$A •’4ˆë®!t�éÅïŽ+-¯Þ¶çÔï^˜o_h2µØ¯ …«•¢iÚVB’¤P(pzgzƒ™&–� ¹P+ë¤Îpýšä®§°F«WÈ¥UÕõcëtXˆ¿£uª/¾ßå实7kt›òÍ»N66iŸbF·ZÓhõ«¾Ø¼|éÃR‰è_ŸÿòÒS³¼½Üœ×Y„ú;'Dp›/±ý•þ¾ž�_XöÙ×;?ý`™í%ƒÑôÖûßÚoûÚËóö¾�™Sf+I±xþäw¦/½ŸæûkáÝóâÑ�ú·Wt¥AS‹ùýO~—<¨º¶ñBZ[¸ò…9!A~¶:Ÿ­Û’_\Ýy;ãI•RÞ•=v×ßïŠ� K6°ÃWO�ËÌÊ)~ñÉ™wmÇbµ¾ù÷¯€a€¢iI´.°ß�ýês³C‚|�ëãE¨·)•JçŒ?³h’«‹ò“µ[?^½Ù¾|ÅÛkØ…3“ÀÍŒ¶î3“S’À¶ÝÇM-æÛ¯¨ªU»(%b‘Szë¸\�x“]þ&zYžmu@A�yÉajMëûk¡Û#¡]>1³ÅlI#—K[8>ûróɳö ÓljÚШÉÉ+­ªiœ;+…¢¨†M~qEN~ù’ùä2‰3õ¦ãgÓ½ÜÕwÊ_�[UÛpò\fJRì][³RôËʤ’wþõãŸW.’JÅo½ÿí_™ïãå¾ò/_ÜúÜÀÕñ"Ô7œÁžjw5<õÈ_o()«Z¿õø[¿{”­ —·þž´ÉhؼçÌæ=gØå¤!í/.­\µv[T¨Ï²çæ:¥·ŽÛZäj ‰Oë¹¥Ÿ'eWøð/ V*dì5I®Ž¡>㜮«k¢(\]Uû�\°Z©žšM„ý@„íŽ/Ö'k·Ú–ã†vÒ¸V«_÷ãî!qáãS�Ò[ÇE(M Cêm·f¤ÖðmóÚ¼¥�„Ô‡wía©é7Ò³K–?7[ àÀ ˜ð�×~Ý~låK Ù'0˜ZÌF“E.“ÔÕ7ûy«W¾¸À~óô¬¼Ý/8z`w–’4諟öž:—1ú7"?“¡ÕêGÍsצ ÆXýÝîNê¼ðÄ´°�¡¾áœþfãAÛòô‰#þoÍ–ÔôCât²É˲3ˆ¿úagç�74jJ*êÅ"aÿ‰`øS\e‘N|·”u¯ßmF0«®¡éÛOL5(<´õŽd‹Å:qLâçßì0jÄ öþ]ù¤ÑqS'ް¯V\Z••]Øã>t �Çó÷qïÊýíñyää1ñ¾Þ5µ�ã“c£#ƒ‚¼Åb<¹húôI�9y%E¥Õn®ªþs¼õ|^0BqC©Tâ!„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0BqÆÉ߇r:Š¢Ìf³Åb¡išë¾< H’B¡�ÇsòwÅb#Ô>ŸÏãñø|>ûí­ßñÑ#ì—<aµZ)вZ­]ß–a£Ñh6›{¼÷�H$’H$b±˜ ‚ üÙ1 Ã0ŒÉd2�Z­V(J$û/îrF0BmI¥R‚ x<û7Ùå﹚¦)Š"I’aš¦ CW¶bF¯×w+²pA¸¹¹‰D"§ÿì�\.7™Lõõõ4MËd2g¥0Ž#t…BÁ0ŒH$ …�Àñßa¸ù1V$ †a EW¶2�˜¿]G„——û>÷ÒÏN xyyQe4o¹µ}g5„Ð}@*•Z­V™Læ”ßÞöx<žL&³Z­Ré]¾þ™ÿí�>ܯÜÜÜ‚Uɬ5 IDATèíŸ{¢m6›)ŠrJ³ÁµâóùAH$’ÞÞ‘X,&I’Ïïló·[D";ÜÛ;‹Åb±X$9ë„cÁµ"‚$I/àt»—Î-K¯öá>#‰úòg'‹µZ­SÏ‚jÅçó{é3l{w= ÆùgÝ"‘Húòg'‹�õÂFè–¾ü5î›= ØO0}³/öDØi­9«!„îÁ÷(Œ`„îy½=ŒÈíîîo÷îÏÎ —ãÌ+ØuˆÇ#€¢n( ìÂþÃç¢"‚‚}l/]¸œ% ãb#ó—²jëšfMe_h2µ´Ù‘ÕJÙÓ�$iÛ;Bõ+NˆàÏ×m)©¨·­.˜™l±R;öŸ·•È$Âüe)»|ìLfXˆŸí%Š¢w¼0yl‚}ƒÅ%•«¾Üf[ýôƒeì‚Vg¨kh¶¯i0šÞzÿ[û’×^ž·ÿð…Ìœ2[IÒ�ˆÅó'÷øèB¨÷8gRÚ’¹cG �€o~ÞÍ–$Ä?½dde¬ß|„-Ôë�“Y©�Ÿ¿”5h`˜T*ÎÎ)2šÌ‰ñtzƒD"æÝÍá‘ä_™_V^³~ëño¯±ßWêÍÕ×^žçîæ¯¿²Àßד¢è?¼³–}iÁÌä”äÁ°m÷qSKÇÓ÷*ªjÕ.J‰Xä”w �’²ª“gÓ³óʽÜUÓ&õgË[Ì–ÝûN¥_/ö÷q›=}”—‡+X­Ô‰3©éY…MZC⠰Ɇ‹EBÐhõGN\ÎÌ. ø£“bG‹m3õáÖ?2gì÷ÿ;¨ÑÝv¯N\tàs�ϲ­îØ{B&•L7,-=çbÚ�¢²Ú¨PŸ™S’Ý\Ul…Ôô‡Ž§š-Öá ‘ÇÅaÊ{ŽNgÈ)(¿|5¯¾I÷æò…¶r�ÖpøÄ•ÜÂ*µJ6fdlTx@ûmó ÊOœËÔꌉqa£FÜú7vöbÖ¥«ùb‘`LRLTD`ɃÇ9¼aÛñ ÛŽ³Ë‘¡þ�šUdËJ™D �šÒ²*0šL¶U­ õ?tâʘ¤‰DôÉê_F�•ÏnBàëíÑÒb€·~÷([xæBFumãÜ™cØUWµÒJQðñêÍmú³yÏ™Í{ΰËIC:â(.­\µv[T¨Ï²çæ:å°—_X¶úÛÝ)#¢�3&;·xõw»Þxõo/7ذù`C“vÁ¬Ñ×n}þÕö·V.–JÄß®ßÓØ¬—Ïç“»öŸ×é�‹LÖhõ«¾Øìïã:kʈ¦fݦ]§|Þ°!m{©©mllÖø<64ª¼²nö“/>>Å×ÇݾNEeÝú­'Æ'Ǹªå{]!HbÔðX¸p%û虬Y“µzãÆ§ž]41Ðß«Oé�áœ~tNʈÄønö$~`ÐS‹¦Àµì‚�ÛŽÀæ�DzrÊàß_n€ÝÎN—XVÙðÌ’éAÌž–üÕÏ¿EG…¸ª•mgà ” ™Fk°­€ÕHÀï_œëçëAY©7Þû†-xÚˆÑ#ã`Çžk÷ª]”þÞ®":8)p\ ¿÷ OL ‘Aç®ä^ÍÊóör«©mHË*bÏÙ½–ûãÕ̼äáƒ&�Kôtw•É$ Ó·þvîáYc” ÙÂÙ)Ñ‘Áì9in~ÙÙ‹×ì#8'¯dÈ P>ŸÇîˆu15;6Ò?~ЭÿuÊ+kÀÏÇS.“FEùùx€R![õå¶¢ÒÊȰÀ#'SG�N .*Ū/·�Il;AFmÔ74¯ß|péI%m??Œ-_ÿ´ë±“ûþÝ‹ó�ó?|âÊÅ«ù¶Â¦fmYUãs‹'ú{…ù\Ï-Ë-(oÁRoD‡ûŽIŽ‹•:xüêˆ!ÑAœ<mrJ\\LÔÔ6�¿rã>ˆàþù³sNÿ²ãä/;N²ËQapõZ±mX€= ~îñY;;)àóǧ ùó?¾›6aØÆmÇ¢Ãýò J�&³ÑØÂçñö9ÏŽÛ2 ÔÕ756iàrZö�›ŽØöÅž\G†ø¼²´õößvǬíûÎoß×:ÝáY°R!{}ù"§{{ß‹BßÓM©× ¯°\,øz{�GŒ ¸v£(yø � [ƒãîî.`2µHÄ¢˜¡¶ro/×´Ìû½¤eå�g_RX\žšYôÖŠGíÇ+näF’„ÚE¡vi}: ûÿœÑ`€’òº!q­oQ`€·HÈ/*©À¾©T\ß ùÇ¿zkÅcìÿš,£©å_Ÿ®§hšDêä2)�Gê &v•$ ¥B ¥å5;÷ŸdNЇ›KFv錉CØ �~^z£¹º¦�Ççit¦ÀO¶<,ØgëoççQ4{¥ýÞÕ?vΉà…�~ó�Ç#’‡Ç²«×omÚu’-ÏÎ+›3md‹ÙÅeÕ�©¼ª^o4©R…\:fdÌþciãGЦß[µ�ma`TðÛ+oÅå¶=']]Ç&ÚJV¾0ÇϧõŸ ŸÏjñtÛŒˆ�ûN;ëi=cj1WÔ4¥$Å€F«wQJI²5U YQiu›ú•u"!_¥lû$­âÒš OÛªV«Ï/®~ö1û:¯dG„x{{ºÙ^ÉÈxúmsH º¶<<ÔàîªÐhõl¹Ùl‘üÿöî;>Š2}ø3mûnz#½R „!TE)" ÕŽåÀ£xžŠå~zžê�=xŠRÀß§¢²F*¡‡''�JéKÓ7LAäçî¦)-«¢)ò“÷þ”WPüùÒ�r¹L~íl¹LªV)ÜÝ®WÓ†azáÛߨnjú#ÉûÅ34åØ|âd&M‘qÑa Óå6?³ ]WCã�ÁhÚ4cøàxk˜–æä—Íyz¬5%'÷jLd€ÂæÏb4™SÓ.OŸ8ÔvŪêºÊê†�ànÍJµïpZh —Ÿ�' HŠÞ±ït`7o©T²çàéÚz�¹«ÎN NÎ}Ûl2©äõ3?Z²zñ’U‹æÏ$)ò£%«9ž_4¦B!»ó£�0”58ÐçÀñ‹{�dšÌìˆA±*¥âcÂB‚|Õ*E]}#0×¾ƒâ—Ñ`43g]†¡Àh2;s¾w��ݦéIÒ+1>bñk^}iŠÞ`üê‡-ï¾ú„L&ÉÍ/3”–UQ^Q}%¿$!:X*aÞÿdEeÍ ®GìoÛ²)j6"B´mß™7æOÓh”¶‰ _xD +?®Þf¯ÏÕ•Uµ[÷œzpX/µZ *…Ì`3<Ãd¶¸ºÜpNoß}\„!×ú$Ef³eýÖCQa~Q×{¥3.äÅÇ„Úf+-«²°œØÔkuéraϘ sÃQNÏÌÉ̾:oöx±½bÈ€³Ù²nëaµR>lpBiE�›kóæxÔŒ\&}mþÌ—¬üè˦kµ7>~s £c•UÔ,ÿuïSS‡{{ºžJ¿´ûP†«‹ªg\8¨U ¯»­�%¬…¹L"Æ\öZºÙÂZ3ßœíØÙ-›ÍžozÄ‹À Àó¼Ùt½>Õ£{ÈÃ#zÿç‡-r3eÜ1qêøÁá¡MWÓ¶lqËo-œ^RZååé*žbCDÊàD77�ÅrÄÖIQ4Íj‘¡7¿_ùG°¿×ˆ¡Mm&�²¶^Çó‚X¼†�§Mß㱓û��ŸóôXµM]C„µ÷UÕh_ýóTk ¯Él9w±`ü�·¨””U!ŽÒ³J?Ÿ;°oŒmJQIÅŠµ{Þ;"¬©+’¢¨ÑÃû�ÞŒFÓOköº»ÞÑ„â]œB.]´àñ—¬€E œ.þ@Zæ_7±mHÿøÆFÃÞ#bÉd†¦ÄŽ ÐŒ RÉÅú¯^oOE�ÎH PÈZØÇ½É©Ž�ÝBð÷+¶Š7hüûëubÊ{Ÿ¬rsQ>6!Ùšç�ýÍfvסtë½sînëÛ!º‚eåÕUÕõàâ¢^²tÃÈäž#†ö�k Þ^îÐ,òízë넘0¸5­V·ôç-½"†''µ’í® ÆVþÁóÂÓ°>ï/"4ÀdfKÊ*ÅQÌç/]}hdñ­´ŒK¿n<<é¡="ƒ­aã‡Îdä¾ôìxW—ëa17¯¨›�[³¡#•µî.JƦÂÛ¨Ógç–>1íkJYyÕw?m�‹ ®u/‚Ðô£uîüe�Jâèˆßdñ…£ËҞ盆>š¦¬ß�Þ(6'D^É/KJŒ€Ââ ¥BêãåN’„«Z^XTáãí¹¥ñQ�÷Ùhqç9vv Á¯¼4íjqù7?n~ÿÍÙ•5‹¿øõó÷çq>ëz?>Ërs®º¨åk6òóõhekÏ/þâWñµTÂŒ°ÿš�‡ãc½<ÝZYëõy�‰ã –ý´©õÒÖÔ6–Tˤ’ŽÁ:�aÙÏ[òŠ*§Ž|µ¸©Ã-,ÄßËÓ­w\èšß÷?8¼Ïù¬©gwШÞj±‘ÁÏ×ãñÉC÷ÍhÔõ�Ч©ÙªO¯(–ãöÉ”I™™“ý½o±gÔ^v Á•µ;öŸ™=sŒ5¥®¾±®^[V^-vmØràØéì9O�Ó¨•SÁs\fVÁÿ~?d»‘îá�àåéö“Ù¦1sÊÈF�¡´¬Jo0¶8>‘¦È9O�»Ö¬!^-»’WTS§u½±ËÎ*À¿£†š'Jo�¾™DÂLž0|²Mü$Â: F3-¦–24ÕÍ׳YúŸŸŸd»h¶°éòÇŒìoM±½eÙ–›«fÆœCãÞöçÙÍ’EA>�Oi~žø¼ôìxëbx¨¿í´-VúÄX#2ê8v Á9¹WGé CÇuÐë K–mTȘ1Ó {D`ïžQâi††Ž õ{bê¨àÀ¦YÓö<åé®…BÜlûîn.;ö¤žL¿â塎½VÃ%"4À‹¡)‚ lkÍp*-ûìù|O7õÈ¡ÒÚë(s ’"n;]i^A±§»ºYïBÈÙùùù íÙËr$Ùyó%wqKÚ4*%é¶=f»÷Ÿd:ep¯Ö³![2™ì¶6¶#½^o4oõn]]]§•ä>àëëÛÉÇ®¬¬ÌÕµ½U�Fc‡Zp³Û+P‡zá©–/9›5¬oG—ä¾Äó|çT&ðÑpö%Bg;;Þš�UW„®ë´Èˆ!ؾxžïÌcgÇ}áCìjb2™H’´ŽãîP,ËšL¦V2�$‰aúÎéõz†a:íØéõz{Õ¸±ŒPŽãAè„IEîdG ƒ£³ÛÀ`0tæ±#¾]6ˆ!¡ëX–m¥‹Ì^ŒF#˲­ç‘Hî“9:‡X3íœc§×ë9Ž“Jísg†`„š�$©ÓéÄÿ;¨>Åqœu­_ÉR…QøÎ‘$Y]]Íó|G;žç«««e2™½"°-¡ë$I}}½J¥²X,Ǒ״s³bŽx +B}}ý�Ô¡är9Ïó·­/#MÓ%%%^^^Euб3™L••• …B.·ÛÌ‚º�T*ÕétA0 #‘HÄ»`Ú3ɺ³Ùl±XA¸ÃkX‚ ”J¥Á`0›[~-jF"‘TUUQ¥V«år9I’A´ó؉ÃÝ ƒV«å8N¥RÙw²nÍ@èþ#V?Å íJA$IÒ4}õ2ŽãÄð�c$î„Xi›#ìrì€a™L&“Éì;èÂ>·f tÿ!IÒyšb)Š’Ëåv¼øEλãBÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈaðî8„œÞ ìp$IŠs†Ø}Vx Áµ€¦iŠ¢hš'hÿ4=A°,Ëq\›f>§éi+©T*—Ëe2™85Gû§éÁh4Š3õH$¹\~ÛG˜ß9 Á5§P(‚ (Jüß.ŠÓ'ŠÓnéõú;YK�N‡“UÞ9‚ <<<¤R©Ý�Ã0*•Êh4г+•J{Eal FèjµZœOR"‘0 c—™¹ÅËX©TÊ0Œ jµúNÖ2 ïA>>>âß¹ƒŽÃ0>>>Ç †öo¹iûöÚB÷…BÁ²¬R©ì Ç¡S¥T*Y–½íœ³bûoG”á~åáá!ΰܡÇN¬h›Íf{=›C0BMhš&¢æ„{CÓ­5büm©T*6wôŽÄYƒ¥R©½¶#ÔDœU½�8wBÜKë�‰‹¥CËpŸ‘J¥�yìd2™V«µKÄÇZ0BMîî‘wç¶µ`Ö&âcŠ:g_$IÊd2{ Á]×™_ãÎÙQ!^ÁtξĊ°Ý¶f¯ !tÀ|�ÂŒÐ=¯£›»»ûÛ½{ìì‚�FÓÒŸ6ÕÖ]sUMÝÇ_ü¢ÕêZYkÕÚ�9W®Þù^Nœ:¿eû‘›wmû�çy³Ùb›b6c·BÈIÙgDÄé´¬Šªz�ZiMá9¾¸¼–oõ·"ërqLTðÍé…¥Ÿ~·Áº¸äƒ¹â m£¾ª¦Þ6§Þ`|ãýlS^™3iÇžÔÌKEÖ”½#gLÝ–OƒB�Ä!Ølaw8;vt¿sç/s¿â·}Ö·þÅOOéê¢ú|éÆfë.ÿuÏò_÷Xƒºy¼òÒ4 Hò¯/M.*®XµþÀ‚·¾¶]åìµÅWæLòôp€W_šÐÍ›ãø¿üß·â[SÆJ”¶0šZ¾WRVéæª‘ˤíøè·TXTvèØ¹¬ËÅ>ž.cFö‹ ÓMfË–í‡Ï],ðó˜ðÐ`/w`YîàѳçÎçÕiõIñá£Gô“I%РÕí=x:3«@ÂÐCÄ ì׬jñ竦>’²ü»o¸W'!:höã㬋ÿ8¨TÈG ë›vîÒÉ´ìü¢Ê¨0¿± òpw3œ=—½ûÀY³…í׫ûÈ”>ØLyÏilÔ_Ê->�~¹º®qѼǬé¥åÕ;÷Ÿ©¬nˆ õ=,I!oál¿œ[|ðx¦¶Ñ�”>¸ÿõsìØÉó§Ò¯È¤ÌбQ‘A�ôIº;„àSg/@�î!ïºjÆ£)¯Ì™55 ?þºûÅ'ƨT pwÓÐ4ýêKSlWüú‡M#†$ôèr½4tÓ,DÝ|½L&3¼1š˜x45£¼²öѱCÅEw7 Ëqð¯¯~kV¤ß¶ýmëQñõ€Þ‘7—¹àjé§ßnˆ ó›;ûÑö}ú\É+úê‡-Éý£§=24+§à«7¿þ穾>°ú·]5uÚ)ã†\ÈÎÿrÙïo,œ¡�Ë~Xµµ¶¾qØ ž4MnÞq¢Qg˜1etƒV÷é7¿ø¹�{ ]}ãÚ͇šêÛ;ƺ—ŠÊÚÚz]p ß¬ÉùkãcÊ+j6îHMJènÍÆóÂésWžâá½OíØvÌðÞ’¢;÷Í�›^›7]"aÎgå®Z·ʸÁ ¹tóÎ�:ããRìþ7Aª´¼&-3·^{ÃÔõ ºÿ®ÞÝ¿WÄ >ѧÒs–ÿo׋O>LQ7ü¾–”V­Zpø Xw7ÕÖÝg’Ü/RÏdí;z~ܨ$­ÎðËÆÃÏNàÓ©©Ëho6™-;÷�Ü/æLZ–¿�[b|Ó—_¬ÇùwóvѨ¬™½<\ëmW§(JÂ4•�$I±VÛŒ¼@£V6hõÖE` ¼üâ£þݼ8–{ýÿÓ'Žé?d`Oظõ …má>B7WM€¯{�ÈÀ»üØ­ ð}á‰1âOK÷ÈàãgrÒÏ_öõñ¨¨¬I;Ÿ/ÖÙcz„]Èù9=óò ~ñ£‡%y{º+•rhl4¬ßv|⸡µò± ÉÑÝCÄ:iΕ¢c'/؆àK— {LJÑ4eûvòlV\÷€žñ×uŠK+ÀßÏ[¥TDEûûy€F­üô» ùWK»‡í=tvH¿è}ãÀÕEýéw†J´V�Q3Õ5õ«~ÛõÜão®Qê ¦ïWlž5etçÿõ"Ã"Ãö*¥7AÁ�>Ÿ|»!+§ ¶G¨íŠ©g³£#º ”–Ûu ½ïh‚ �¸0:9!!6**ëNœÉ¾B°s»ö†à“§/Ô6è·ì>sŸÛzæÂ¢²ÿü°Å6å÷í'~ß~B|íå®~û•'ÄׂUÕuµuZ8�–õóÚ½ÖUĆˆî¡~/=×T�ýÌ¦áøæÍ¶X Ö¨•¯Î›~GŸ°í†¶†E C{{ht:\Î+–I™n¾^@QdL÷À ÙùƒúŇû[×õôt£Ñ$—Ic{„YÓ}}ÜÓ2sm÷’vþJÊÀÛ”¼‚â³™ùo,˜fÛ^‘�SÐ;>œ$ 7Wµ›kÓì0în0è�PX\Õ;¡éOè+•Ðù…%‚oE¡�U×4üó³o,˜%þjŠ FÓGKVq
œAeuƒ·§‹x2H$LT˜ß•üÒØ¡W‹+6í81õ‘d/׌¬«�ì-æò÷ÑÌå5M54ƒ½Åôð¿õÛNLâøf5è{Žs»ö†à„¸ˆÐ�n{ž6š,™YyÝü¼–þ´¹°¤Z|×Úüé{�M‘Ÿ¼÷'1ño‹œ4vP¯„(8yæÂŽ}§­›åxþŸ®_ÇD…¼µðz¸Ü°õ�»«zdJ’5eá �øû5�.4M?5ã!ë�+›¶±×lwÇh2—TÔ%ˆ€­ÎU£ ɦøè¢Væ_-o–¿¤´J*¡]4ÍgÒ*¸Zàm]ÔjuW ÊŸ�`›ç䙬ÈP__oÛÄ3W&>4¸ÙÖÊ+kÀËË <ÝÕ ×®˜Í¹LRS«½«ÏÚ%ÈeÒE g}øùªÅKVY¿É£éÃÏWq<ßì»íXj•¼ ¨Òº(P]Ûuõ�ÕÚ­^­”³¯TÈÄ …uš¡@!oJW*d‚ƒQlT¼w9ç±koÖ¨•å5ç.¾±`úÖ�Gs®Îzl{Óµ[?ÅH�WPüùÒ�r¹L~íl¹LªV)ÜÝ®WÓ†azáÛߨnaú#ÉûÅ34åØ|âd&M‘qÑa Óå6?³ ]WCã�ÁhÚ4cøàxk˜–æä—ͱ¹ÈÈɽ °ù³MæÔ´ËÓ'µ]±ªº®²º!$¸[³Rí;œèåçã ’¢wì;ØÍ[*•ì9xº¶^gˆ“sß6›L*y}ÁÌ�–¬^¼dÕ¢ù3IŠühÉjŽçÍŸ©PÈî|ÄhGe�‰ >rêÒñSüý<3³òÏe]õóv€ø˜°� _µJQWß̵±'Æ`4363 C€Ñdvæ|ï»ö†à’²Êkwó<ÿã/ÛŠJk‚ˆ Ôë�¶yä6-/,ÇÛŽp°áåÞò$ªÍFDˆ¶í;óÆüi�Ò6qá �ˆaåÇÕÛîöÙSeUíÖ=§ÖK­V€J!3Ø Ï0™-®.7œÓÛwaÈ€ž¶‰f³eýÖCQa~Q×{¥3.äÅÇÜШWZVea9±©×êÒåž1!ÖÖvQzfNföÕy³Ç‹—¨C$˜Í–u[«•òaƒJ+êÜ\5íýä÷;¹LúÚü™.YùÑ—M×jo,|¼ÅñÐÍkÚ„AŽ�?vÙ§4U IDATúR¯¸�Ę –kº:T«p­ÃÆÚYÂZ8�Ë$b̵V¤ÌÖšù>àlÇ®½!X§3vóq ôñötã8îHêùc'3ÿØsÚ6ψÁq�<<|Åá F£éÇÿí¬kЋïöOŠ…[ß²ùÖÂé%¥U^ž®â™!6D¤ NtsÓX,7LhM‘ESЬézƒñû•û{�ÚÔf¢Ñ(këu*ð>-î<Ç®½!Øl¶lßw68À÷è©‹=cB³r ZÏŸWP¼fã¥\öü“ãþùÙꤞÝ÷‹[ºr{AQùÈ”>ªkÍáÏ/þâWñµTÂŒ°ÿš�‡ãc½<ÝZÙøëóÇ,ûiSëŨ©m(,©–I%‚u:òŸ·äUN?øjqS‡[Xˆ¿—§[ï¸Ð5¿ïpxŸóYy‚ ±pòÌ…•ëöuóðör;Ÿ• j•" ›÷úÍû¥f ím4šÄt_ow— Ùù½âÛíTÛ¨W«n¨§\¾Ræ§R6Õ©‹J*¾þa“ÙÂõîÙ=+'H‚ˆŽ ÝøLn~i¿Þ=jë´›v¦N�0D"aìþ7¹_9ü ,*,*ç8¾¦®‘ㄼ‚R ö+,*ß¼35¹ ì;’‘äëã™óÖn9öÔcÃÂBºõMŒZºrçáãn®ê]Ò“ûG‹Uàäþ1»¥Ëåm£!ýbáì£û;‚“»ö†àêšz¥\âïçU^Õä»çÀ™‘�z½©¬¼iPD£Þàæ¢±at×±³™ù½ãB§=:Bví¶´è¨Ð?=õðŠ5{ŽžÊzxdŸ�}ãàÆ�Ð?)öÔÙKGNdL;ô¦"\÷Ñ—k­¯ã¢C[Éä÷êÜɶ}zvt&=;¯¨Öl¾>£Åó§ÉeÒ“GmÞ~xͦƒ~óž{D©� ‚°rÝ~(,©þöç¦&ì~‰É¥fÀÁž¸(¦Ï|4ÅÕU}&#wí´AkPÝx©˜™•×3öú¥À޽©:ƒþ»z§˜"•пóBb|dYyÍÚ͇<ÜÔOLÞ3þ†ËtOØ´ãDeMÓˆûåköÀ»�áëípðøyA€^qaCĉ4j…·‡Zldðóõx|òÐýG3uÆA}£ôij¶êÓ+Šå¸}G2eRfæÄä@ï–v‹ì ½!8¿°4:2@¥’K%´Ÿ�çÌ)£Î¤gŸË*<—UhÍ3bp¤eääV¼ðø˜ØèæMQÁo¾/=;ÞºêÚBÓÓ€>1ÖˆŒ:N{Cp|LxP /EQ‹ßž-¶yy¸N;pè ¦òÌ1bŽHé3d`OÛ9B½­ÃªrÙıCG¥ô¾DE4Ÿ¾ÇÝÍeÇžÔ“éW¼<Ô±×j¸A„x14E„m­N¥eŸ=Ÿïé¦9´CZ{åbNARBÄm§+Í+(ötW·x·!BÈyùùù ·ÏˆœÃÒŸ6�JIºm�Ùîý'†Nܼ„Z!“Énû`c;ÒëõF£ñVïÖÕÕuZIî¾¾¾�|ìÊÊÊ\]Û[ÅÑh4øøÎ{Ì OµpÉy³QÃúvtIîKÖ!�°£NØK×!Bg;§›²¡ûC§EF ÁöÅó|g;;î kÁ51™L$IZÇqw(–eM&S+H’Ä0}çôz=Ã0�vìôz½½jÜX F¨ Çq‚ t¤"w²#†ÁÑÙm`0:ó؉ß.ÄŒÐu,˶ÒEf/F£‘eÙÖóH$÷Éœ �C¬™vαÓëõÇI¥ö¹³C0BMH’ÔétâÿTŸâ8κ‹Ö¯d)ŠÂ(|çH’¬®®æy¾£�ÏóÕÕÕ2™Ì^ ØŒÐu‰¤¾¾^¥RY,ŽãÈkÚ¹Y±G¼†¡¾¾þNêPr¹œçùÛÖ—‘ˆ¦é’’///Š¢:èØ™L¦ÊÊJ…B!—Ûmfa ÁÝ@*•êt:‚ †‘H$â]0í„dÝ‚Ùl¶X,‚ Üá5,AJ¥Ò`0˜Í-?‚5#‘Hªªª(ŠR«Õr¹œ$I‚ ÚyìÄánƒA«Õr§R©ì;oÍ@¨bõSÚþA AA’$MÓwQ/ã8N ß8FâNˆ•V±9Â.dž‘Éd2™Ì¾ƒ.ðÖ „ZF’¤ó4ÅR%—Ëíxñ‹œvÇ!„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡Á”ïMÓEÑ4-Þ„nÇgI¡ûŒ8ÉA,Ër‡3Ÿ![‚ï†B¡ ‚¢(ñÿÎyh ºw‰Ç�$)N»¥×ë]"ä,0v´™Z­ç”H$ Ã`üE·E’$Ã0R©”aAÔjµ£K„œ†�¶Q(,Ë*•JŒ¼è.P¥T*Y–µïœ³èÞ…q¤ hš&ç Dí$>ö†¦±a[p[ˆ³n·s~„ijHì¦C]Ö‚Ûàîy€ÐͰŒDPÚC0² <‘�σ¶Áo² <‘�σ6À&`dGx:!°WwÜþÃgý½ÃCx^àx®Ù»I’$©×Mf‹mºTÂÀ�4EI$Œ]Što1ŒU5âk_OéMŽ\·qw|lD÷ˆqQ„u÷$%ö h–3ëRޥ˅N±Mܲý «‹jÈÀÞRz„ÐݲO>ŸU —IÃCÎg]ù~ÕÎfïN$y`¿ø=Oí>tÎ6=¹_ô¡Ô‹¶)#Ç=òðP»é^ñÓ/[$ Ý»g�|²BLyñɱɃnˆ•EÅå¶3[ØÈð`“ÉlaY(¯¬Ù¾çøãÓ’$•Ц¡r …líæC¡!Ýâc"Å”šÚúµ›Íyz|ç}*„Ð�±Ÿ¬¿�ÛkógX¿ú~ƒøbü˜!ãÇ ùb麕Õõ³{ º¦þPêŽó¼XóýcçQË-nŸ/)«tsÕÈeR»—ÖŽêëµçÎçì=tº¬¢î›O^µ¦¿ù�o ‹«¬‹óž›Ø¿O¼øºº¦nÏ¡´W_š²òÛ¿À–íwîK< ÑÚVh¶XVüº-e`Ü©´K<Ï lßwÚºµ#'/@÷P¿ÿ{ý¹òŠj–å(’êÓ3ü«ï7üí¯O‹yö<éªQtóó*.© (Ò×dzcÿ¡;ÖÞ¬Õê´:½Ñd®­Ó–”U@qyí‚·¾¶ÍÓ;!,,ÛØh°°¬Þ`óó<¯þ}™5çˆÁq7ï¢àjé§ßnˆ ó›;ûÑv–¶C\-=x4­ªFÛ,½¡A?rHÏ^ ÝÅÅÀ_ë[ûž ôóˆ�·¦$ìµá�#Gާ‰ažç\¹©º¶aáœé:½ñÃÏžÿÂcɃÿõÅ/Ÿ~0Ÿ ˆ7ÞûzÚÄ}“âà»7\Ê+µnêõ÷¾³-Æ›ï¾î¾û’�?yW%žƒ§‡éEQÔÍïr·ïðÙ‘C“pü/jE{Cð™ôìõÛŽ@aIõ¶}gž›õÀ­jÁ%%•Ÿ~· ‹«àÜÅyñQøàÍg¤R¶ï:Î üÍ»psÕøº÷ˆ lgQ;ZB\÷„¸îë6îÞ}ð¬5Q„úFC�ÈàÄ„ÍòçoÛ{ò…'ÇÙvŽ»¸¨gNñÓÿv†u ð!-3W«3>ÿò¿ Wlè›|/æ|vþ‡â‹%Ë6À² Kþ9ïÿ^®•â�¦­ÎÛËÝ.@euÝÚ�û2.äÎar³(ÌqÜK×eå$Ć{{º9ª„Èùµ7§ é�2¤÷Wßoè“Ø½ŸØŒ —oU €ð`ŸÀnž4M)ò�;Nˆ‰oýóGkÎkÁµòÕyÓÛYNG1™Ì‚ H$LYy•F­T\k±-*.ÿpɪ„˜�~IÍ?ò°!}/dçüåê¿Ì™ðÑ»s Óß­ytìÐȈà[íH­RÀÂ7?·­†Ï{nb�È�õ[ö͘2&ëRÞw?m¶m!AíäíéöæËO.þ|ŧ߬yùOSiº) s<ÿå²u/å/Zð8Æ_Ô:;·ÇD…}ô·ÙÍ÷as�ÙlQ)›Â�››föÌ\]TUÕu.•�·C·pAwO3šÌ°dÙzž`쨾Ó&=ÀóÂ’ïÖxyhN¦]~bÎû-®˜ò¯ÿüï“÷çiÔ*�Z%•0®.ÕÕ¢²~¶¢Y槦?8 o‚øzÞs»GÀŸ, °çPúÔGGwØGìÒ‚}ÞXøÄâÏW|ömSæ8îËeë.dç/ZðxXH7G9;û„`ŽçÏ]È͸˜›‘uµÅ ¯¾4xž/*«îX[ßAlÚ~ìѱƒO§]Š‹ m>¾ÊÙ‚pÛ±œÂµœâ¢J)nÖ˜îÁ®²r?ùz­Ÿ�gÊ�¤/NÕ¨•eUPYUûÍò-~v‚»» œ;ùౌšQZ^)“J>ülyföUøÛâàÝמ²°Ü²Ï_ß¶ëH}CãôÉþûË•,ËY÷È0´8¦� ¸V`k¹q,ªÝx/Zðø‡KV~úͯ~nÒÒŸ6‰ñ74دõ¿6 íÁé—þØs²¬²ÞÝU9|PÂØÑ‹J*‚}I3šÌ�(fsѨŠK*ò®V>˜’è³ëà(¸ZZY£]ºb;d^*ú߯CR ýñ;/´³HN…¢¨”!}Ä׉ñQ½ãÂÎf\J’äßÍÔj%�f‚ z'Æ0 %¥U ¹„¦©@_˜5uŒAoüéÛÞWÜ Ñd™û×ÍA€ƒÇ2tÓÀ¾×[3>ýæ·Îÿ˜]\p Ïkóf~ôŪ¿þßWÇ‹ñ×Ñ…B÷†ö†àF�Áß×�e¹†%õï›_P²rÝþÿ6[©�™-¬„¡€‘0b3™�§føÐ$¹LúÊÜiù¿o7ï8>*9aè Ä•kvõˆ èÓ+Úȹi4Êâ’Êf‰…Ee!^bü“Ù¬R\ŸóÒå–å$Fo0e^Ì êÆ0Ô‚§M=§ÓGï·jíõ�ØÇ¿õò¬ÝC`Ñß¿ÔYBƒý-˜õå²õ󞟄ñÝ©ö†àÁzÐóú°‡òjµR&àMM»œšvÆŽLz`D )jÑ?þ n.JPÊ¥=ã"(Š" I’¢(Šjá†i­V·ôç-½"†''µ³´�ïjQ™‡»‹Ø DzܥËE ±¡¶AØ$mTÊõ�¦×Õªë!Ø×Ûãб4È/,‰íªTÈGI¦Ù6kj KªeR‰“‡àËW -,[QYka¹‹Ù¹¶nÓ޲ʺ‘ɽ<=\��̬ªÕŽ>Àv­ÔSe•õ}{ÇZS´�z•uÑËÓ­ªºô“§‡kƒ¶ñæ]7hu ×Ìöÿ½ Ñ(à½�蘊n ã/j+{†`ƒÑt63ohÿè­;�jÔJŽçy^ ÉëãÒ9ž7[Xà8‚XòÁ\XöÓ¦¸èÐ�ýâ[Ülp�ß«s'»»¹Ø±¨áû•[ŠËšæyøçç«àç¯ßšûÜc{¤žÍÈ)(ªˆ xoѳ¶#s K¾[±uÆ£Ãl?]EU]dØõžI‚ F¥$­^¿·¬¢ölfÞâ·Ÿ�Š €šÚ�Þ(¾öôt€âÒ •B*¶2€8RÕÍUóîkOɤN}c!B]V{C°Þ`¬¯o4™-$Iì;xZ­’=:nXn~Ѷ=©—óË�žÊ³=˜’Û#4¿¨ÊvðÊ5;.^._‹Ýq0÷é±Q‘ÍG¿øû´³œ�àÃwæÞœ(‘0�üÐèÁÍÒÍfËÑé+ÖîîÛ3r̨Ap%÷*MSf‹åÂ¥«)ƒ­9?ùê—Ú:]Rψø˜ð ß×ß[j»�󗚆 |ý¯—ÏžËNŒ €ú†F–eÍf A ãáîZ\R^QYCßwcþº×µ7ët†O¿]ççíæéáràè¹§¦?H’DDX༰@ƒÑd0Åñ°*•¢²ª616ä™™€ ¹ùÅžî®üMãr”Ê.ñd¶Üü¢�Û�¼øÔ¸¾½cÅXÓÏçløã(DGÄöˆ°æ|奙n®ëîÒO[¾·B&“TTÖ=4z ¤�Ëúñ;|ÝÃ຺îïÿþY¥�Nxp`G.„P›ùùù vÙV³f‡û�L&³ãƒoY–kV-å8Nà®ëª<ÏãDà÷½^o4] äH�ÆžmÁ÷wüÙ1ÌÝj[œíåÎaü½‡ˆsT!„_Ú¶Áo² <‘�ŸáÚ&“I¿ìè‚ {˲&“ÉÑ¥@އµà6à8NqDBw O$d…!¸mX–Å.ÔNF£‘½ÅbPWƒ!¸ H’ÔétâÿX…Aw�ã8ë)„ݧ°-¸­$I}}½J¥²X,Ç‘×8º\È©ñ<Ïó¼Øþ B}}½ïWD€!ø.H¥R�NGÃ0‰D¼±ç~E·b=CÌf³Åbã/²Â|7$ Ïóf³Ùh4ÞÉ<#‚ ’$išÆk&d Cð]"IR"‘8º¡{þ #„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡Á”ïMÓEÑ4-N�ÓD [§é!‚eYŽãp¦`d CðÝP(AP%þ�¯ Ö‰3U’$)Ïóz½ÞÑ%BÎcG›©Õjq¾A‰DÂ0 Æ_t[$I2 #•J†A­V;ºDÈY`øh…BÁ²¬R©ÄÈ‹îEQJ¥’eY…Báè² §€q¤ hš&B.—;º èÞ&“ÉĹƒ]äxx´�8ë6AØù†ÚC<‹Än:ÔÅa-¸ ð‘È^°ŒDPÚC0² <‘�σ¶Áo² <‘�σ6À&`dGx:!°WwÏóf k6[Ì‹ÅÌŒ¦F�¡¡AWY]çïçÙ/)V̦ÓN¥e¥ î%.æ”d\Èûà`’¼¯ú%¶í:à‚�}¡ÖÙ!FÔÔ6üýß+Å׆æy^©�†ûz¸i¼<]UÊÆ?nÙ•êçãÑ="?W]£­oh´Íàꢺ§{Šuú#'2V­Û«QÉG í5,¹�»›‹m­VWVQÕúFhš öïÈb"„œ‘ŸŸßÐÐÐέ Fš¦iš"â—u»TJùø1CZ̹edž¡Ñ¿¦¶þ½OVß|-¶øígrY³Ä’²J7W�\&mg9ÛI&“)•Ê;ÉYPXrìdÆŽý§y^˜=sÌÐÁIÖ·ÒÎeýûëµ­¯àëþá»/µ«¬Èéét:£ÑèèR GÒh4í ÁyÅŸ/ÝxÛl~v\ꙬԴËâb�¿‡F)¯mн6oÆm×-¸Zúé·¢ÂüæÎ~ô®Ëi· Áµu 5µõÖE“Éœqþr|lDL�ðVÖÚ¸ußÖ]©ÿúû\¼oõ^"žƒ§‡éEQÔÍïr·ïðÙ‘C“nuU‡!i4šö6Dúû¾÷ú“,ËYS6n;¬TÈF¥ô±¦Ð¥PÊÜÝ\†'÷€µäVˆo-xëkÛ­ÍnBxh@³]¸¹j|Ý{D¶³¨�àlzÖ¿ì°.öïÝ}Þ ÓÄ×,˲/“Jš­rµ¸ì·-G¦OLÁø{Ï©¬®[»q_Æ…Üù/Ln…9Žûb麬œ‚„ØpoO7G•9?û4D,þ|UYeý­Þýüý9ÖŠ€Øp<ÿ¹ y%›w�zÑSjµAXøö7-†`çqç ðËoÛOœÉúìƒâÝtËWm.,.ë•glûè´�ïÿ{yIyíÌIà ‚5¬?Ã`Þ½¤àjùâÏW„‡ú¿ü§©4Ý…9žÿréo²ó-x<,¤Û­ÖÅZ0²C-ØêÉÇF$%öÛ¶à윂¯—oµÍ¶m÷ñ˜HÿF�!4¸¼óñ 18ßëãsôzcyeµøZ„€n>PU£½Z\èï»~ÓžýÇ2þúÒTÛøk0ÿ³t-IP\Z™ž™{:={îìÉͺï�3 ôycá‹?_ñÙ·kÄ(ÌqÜ—ËÖÝ6þ"$²[^¹nßêõû€ãØ4ø#ë±ÔŒÔ´Ë¡^ë·™:a(<<2I.“€ ÀÚ-GìU˜"­Ær•¾ÿéJëâ“SG‰/öì?I’Ä�c™¯¾4-6:ܺz]½vÉ·¿Ö7èÞzå©¿ýóûèî!“ÆÿϲßÞþ`éÂ?=ÜÑŸÙKP€÷¢�¸då§ßüúçç&-ýi“CƒýZù‹ã‚P .4™LíÜÊáãøôŒ1 ïS[[î?ïùI ïàu*=g̈¾A?™ù¿�‡ ®Aß#(*2H&¡O§çÔÔjºy‘$è+sô°‡VÐ4-‘4oÌyz¸N7tÒ¸¡‰±aû�¤Íœ2ºàjéÕâÊœ¼’ú†Æ7Ί ²f¾˜�ûÙ׿šL–×ÌòötߺóhBLXTdÈ€¾ñ%¥å¿lØèíëãÙY µ—«‹*6*tóŽ#»œª¨ªãïmײX,ÇÝ6º�I¥R»Õ‚Wü¶oÅoû¬‹{gؾ+±S¦OL>yöRlTpúùÜôŒË©i9�:cUmã•  Hr�Ÿ—ë=Þ+µuç‘° ïn¾^� F£ÙßÏÇšaÏþËÝ5¸o�ǧ=ÜlдTÂ<ÿÔ£ ³å‹eë?{ž‹FÕÉ…Gw-4ØoÑ‚Y_.[?ïùI!A·�¿‰ì‚9Ž›÷ü$ëâúÍû• Ùƒ#XS,V"ažbœJ¥8yö’«‹êŧÆoÝy´Qg ò~júƒ‚ ü°jCS�>7o_«Õ-ýyKáÉI7¿ëT ¯–¦¦å¼2÷1kÊÔGG¿ù�¥[¶|dì01%1¡ÇŸd’Ázµ¸Š¢žš1nØàÞï9!A~¿;‡¢ð¦ÔvÁù…¥_|¿©YâÁ­¯'=4 eHo•êz�¯¸´2#«ðÙé£6n?¾ú·ÝEjuÆyÏMlqچ’j™Tâä!¸®^ûÝò�ñ=‚zÆu·&zyºÍ~ü¡¯~ؤ�KG¤ô§(ÒÃÝåVñWDÓTxØ=0Ý ã/j+;„àðЀ%̵.¶~wœ¨{DÐÛ¯<α\ÏØ²½G2`Äà8…¼åVàà ¿Wç:û8�Úº†�–¬Ô6þ:of³¡øú& ¦~ÙqòlÖ3³Æùùz9ª�!gÓÞ|1;ïÛŸ·Ýœ¾ûÐ9ÛÅggŒîi]<›ž}2-;ûJ‰Z)›6aˆÁhÞ¾ïÌ�c¢Âý;ÔÛ«ùPöÿ(œJQq¹Å¾ù—'Ü\5¹yEPSÛ`(:|h_o/·å¿lklÄGç"„®kï­ «7Ü~x¹\&•HØøÇ¡èîÁç/æEwŽdht:CVNþÕâÊ %;íÄiR©´•[3Ì‹„aàç_¶ì9œîé¦~vÖñÑÖ ,ËYƒ²­/¿û5ep¯›æ ÔètºöFB÷4;ÌÑ¥Èd2|ð-²½^�wÇuq�{Ú†çyGÝðDB" Ámƒßdx"!N Ó&“‰$Ég&D¨MX–ņ`X nŽãAÀ›JQ;ቄ¬0· ˲؅‚ÚÉh4²,ëèRÈ‰š¾ ¨IDAT §€!¸ H’ÔétâÿX…Aw�ã8ë)„ϱG€mÁm%‘HêëëU*•8Íy�£Ë…œÏó<Ï‹í‚ Ô××K¥Î;# êL‚ÛL*•êt:‚ †‘H$âíÈ8÷+ºëb6›-‹ ‘†à»!‘Hxž7›ÍF£±•yÜAI’4Mã5²…!ø.‘$y«éÛBèá2B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈaèÜ4MSEÓ´  þ�º ‚ ÄÿY–å8ŽeYG—¨ey�²?®ªOW+*õ¤�OØ®J @N�—‚OòÐ?¨ U;n_D~~~CCƒÝ·«P(‚ (JüŸ$±ºÝ¥ñ<ÏqÏó‚ ð<¯×ë]¢Xxâ›lßÍù  hH ù° Ý9g8[œ èžÑg‹ã㺔’ÒJžçü}@Û¨S«”°eûA…\6"¥˲ Z�»›‹£‹Ù…B—ˆ¶¸/4˜`ñ¹6¯¸c2σwÎt@™î‚�È�«6í9”Þ,qÞsû÷‰oe­ã'Ïý¾ýØÌIÇ èõÊÛÿyyÎcÑQaå5jµÒ2²¿[¾ùË�^–ɤXtd£‹…_–“aG&Ôüµ…w> ޶¼b²ô …»Ü_ÌVG|v Áwi܃É/Ô7è&M_.ý­wB$E‘9W Ä ‚J…Ì¿›�íZ“&ŒôñöX¶òµJùÀ°¤_Öíúû/ˆoñ<¿uçÑ1#ú`üíL]ívŒy½€¦à§4˜Ø¾Ùå×ßZ<àÆŠÞÔX:ã†Õß~Þ~¸ù6_YÿÍí ò: ÁNÄËÓÍÍU-Bp`7�J–å>ÿn½mž° ï÷Þ|±ÙŠƒ$†ùùx{ÔÕ7þ¾ýØ•¼"1ýLúÅ¢’ê—çÌ„:†š„‰‰pèé.VÂêÂëïþƒožÿl5¼³@ÎÀ_GÉ\Ø™ÕÂf�•uPy» Áí¢ÓË+ªÀÂr‘á�—®�ÙÈÀ^ðËoÛu†fù�F“L&«ÆÇM�0T"¡uAÜ]5�OmqôÝb]M—j þpx¨àh®Ð¼qS¸1å’.]ørP$üû ì­¾!¿+u0HÀia[°ÓIMËIM˱.ÆG‡ææ‹!8ûòÕ}bl3ŸI¿øß•[›�2d`oš¦¾ûqÃ¥¼Ò5›Šïî?– ÃÅÏ~rb'~‚®®Ë„_˜âSûð×>óSá‹›²Ýü “Á¤Þpâ „º@ýìæï~»^KµsQ�6D8kÄ|ëß@Dxàš {Àh4])(Ÿõض™{%ô˜1ɸü—y…¥ÏÌšsŸß3®»RÙtËͺ�»ëê;û3 .€&àã P\!^Å&x~5€Œ†/§ÂOGàpÀåúÖýxÈø`?ëaþš¦Äx_x~(\)‡¯›÷I£¶±sÁ{v­N_TRf +Ô­¸¼¶¸¤¼¢²FÊÐ�~Íþƒ$F„ZXVü3¥gæ|³|K¯ØÐ!zõŒ¯‰»ÎÐ>iiˆ°°? –§Á¦ÙÀ�ðh@S:MP0$@´Ô›!Çf„¥)ð@Tka5@NÀ¼(xrœÍ‡g6B^Îfît°!ÂéœJ¿r*ýŠuÑÝÍ%16ôØÉŒü²¡ã¤ææU|¼=jj›*=ã"'O™ž‘½ò·Ý§Ó³½<];©Üèš.~›<½·é…Z_ß8ªáñAðø ¦×¯­‡KךÖþÙf hj¸°ýC%‡A•F¯c×ùó6D8¡aƒâg?ñ¼ýþ·bÊÈ¡I_~ÿ»Ù¾·è™[­µì§ßG$'qG‘¤—§Û¨áâb"ŽŸÌ8wþŠ7¯N*:ÝÔ%uß«Ñ�òCp§`Q¬¹^‚÷·€œ�¯2 üÆÎ`� eCQ-< Ÿ€Rnx·êµ¦ëOÁ»;©ð†µ`§#��úªêZ�Á$&DG…ñ‚êìßâWò®ff_}zæ8ƒÑœµ´ ¨,-ãJaI•F%—Ë$-¯ƒ�½½7¦÷‡ß³42xjÄúÁä?nÈóþ9€sðu2Àú‹p¹ª)}joðwƒÏö4-æÔvZ©ïC‚ïÒow§žÉ*­¨G2XmÚv€e¹œ¼ÒÌ —ãb"n^ñ�]G÷�öñöÐéM•Uu5uÚ!⣣Bƒ|7lÙ‡Ýq�¬‹´7Ó_ SûÁo'áJ#@�o‡Å“`áøìæ‘¿ÀÁZ8x-Ô�wüçRçØY`-Øy˜Læž±acG{ûùzùx¹üÅ*Žã6o;°ilj—_œ|îüåÿ|¿aþ “cz„Ù®uùJaêÙœ÷=SW¯mh4Lž0Â×ÇÓQAW ¿@ðŸG Áï\»YX’ ^€…#á×+Plia-á¦Å.ø§ë‚ïÒ¬©7ôh|÷óVŠ"ç<=®wbt\l„Þ`\¼dõ+s¦$&ôó‚°æ÷=ƒûö ö?yæ¼R.õörߪ¨¬1™Íuõ�”sLáˆîc®2PÊàÝ­PÊ‚ŸMxg/|?"UP|놅çB� ÀSÜM·Ò¡»ƒ!Ø>‚ýõ‹‹‰ ö ÃÌ™=¥g\Zlôõ¶A¢"ƒ÷ï ,ËÒÓ:gnÖ¥¼ÿ®Þîæ¢|þ‰q)—ÕÕ"rÊàr5ôZz€ ¸� �Ú ?ÞrE±ÓòɾÐ' fX~¤ËuctÈ©Bäçç744Øks2™L¡°ÿ³=îK,ËÑ´ý'ῇèõz£±]ÃJ´:�º]Ïêî³.$ªölu!æÆS“óì¸=�FcÿZ0ÏóNò@'×Åã/Ï;Å¥¬”#Ï�g,º�—uÀWÖþgž“|µ�“s’óÄ[Îß•fšAw�ç¼åö?Uì\ 6™L$IRT—®ß¡;Á²¬Édrt) �‡¶ QÖUtßḾžZ»oÕÎ!˜ã8A8ŽÃ(ŒZa=OÞf5)´a]¾‡Às@â‹n�ç&…Ú­ÛÌÊþ_–eÛÙÇ‚î{F£‘uŽ™‘£Ü,CêÁÒ|fg„nÀ ­ïîÚÒ�éö±s-˜$I�N§Ñht:�L&ú0j†ã8£ÑH’dCCƒD"qtq€$ɿĕä7†�©hZŽuaÔÏ�Å�äþ[B’-L¼ÕNv”&2™L*•ЦiÒ†}w�î-<Ïópà@KK —Ëe³Ù„�úúzf?URR þí·ßNŸ>-“ÂÃ{Ä’uºâp8#GŽTSS£(JEEEUUÕÜÜœÇãõíÛWUUUII‰¢  �’’BÿŸK—.©¨¨ÈËË�9R]]]Ö5€·CQÔ‚ (Š:yòdLLŒ–––§§çŠ+V¬XaaaÁÄp8777mmí–––/^ˆÅâo¾ù¦_¿~—.]ª©©éù2<ØÄÄäèÑ£L#Aiii‘——OOO×ÓÓóòòÊËË›9s¦™™Yvv¶­­íÁƒ_n?X,s…İ··çóù—/_–.‘a#AQTTŒ��-ùO»wïVSSSSSãr¹ .TSS333»zõjIIIqqññãÇ™vå‹/¾ððð˜4iRïϽ_l6{×®]³gÏ–uAÞ§^w=!Åår³²² ļ¬ªª"„äååM�:õùóç4M‡……ÅÄĸ¹¹�?žBQ!„9/û ±X¬Ã‡›˜˜H—<~üxúôéfffóæÍ³¶¶¾páB``  Kø~™˜˜,Y²¤²²rÅŠyyy7nܘ>}ú“'O(ŠÚ»w¯††!D"‘�9sÆÆÆÆÚÚÚÑѱOŸ>�àðáÃééé***AAA=Vf}}}BŸÏï¼P(®Y³&$$$###55µ¼¼\KK‹Ífûûû'%%•””H;Óäååutt(ŠRSSSTT400 iúñãÇúúú|>_,÷XEþ–D" øì³ÏN�:ekk[\\l``°fÍMMÍÎ}kµµµNNN›7oÎÎÎ~þü¹��ͺuë80cÆŒêêê���^U©·"Ý%IUUUAAADDDeeå_ÅS5tèÐâââž,dwë½íDUU•‘‘ÑàÁƒO�:µvíÚ3gÎ|ûí·3gÎlmm%„Ð4][[[XXXSSÓ§OŸáÇ÷íÛ—ÙåFŽÙÑÑñðáC&ò•ŸŸÇü¿½½]$ 2¤_¿~Lsø�¡¬¬hdd4hР;vܹsÇÅÅ¥¾¾^$1Çý¤¤$BˆP(ôöö&„”——Ÿ8qBAA!11ÑÄÄäÂ… Ò“úóÊoA"‘ܺuK, ‚üü|Bˆ––EQÑÑÑÇ�'„˜™™1‘ººº LG ù¿:nذáƒþry<—ËMOO·¶¶>tèPJJН¯ovvöž={ƒƒƒ?èý1//ïСCºººNNNñññ+W®ÌËË{·M±X¬ÿ&‰%½¨�`οûî;Š¢ÒÒÒ.\¸àããÃ;rrr”””ÌÍÍ«««[[[åååY,ÖÖ­[·nÝJihhøí·ß˜.©�;wBšššœœœ²²²d\¥ÿBCCCvvvç%'OžLNNNHH�U‘Þ;Š¢¾ýö[¡P(‰lll„Báºuëüüü–/_žœœÌ„I$’Å‹GDDté·IOO—þ_"‘øøøìÝ»·gJΜN>xðàõ‘4M¿|îÉçó--- !K—.µ°°X¾|9MÓEMž<™ÇãÉÉÉ}ˆgßÖÖÖ�à“O>Ù¼yó•+Wbbbttt®]»±zõjuuõÕ«W÷ä5ßûõøñcfàYrròÞ½{W®\9þüwûšÞ6‰Õô¢üMÓ?ýôÓ”)SJKK===SRR.^¼X[[»lÙ²‰'644Ì›7/%%…¹x§i:$$ÄÌÌì§Ÿ~ºsçÎÀ�‡zÿþ}›¡C‡ ‚qOû_#''7pàÀ¨¨¨œœœ¸¸8>Ÿ?zôèíÛ·ëèèœ8q‚¹¤ˆŠŠ’——?|ø0—ËÕÕÕ]¸paaaaAAAlllAAÁرc§M›v÷îÝýû÷÷äÙYIIIYYÙܹsååå™%JJJººº„æˆÿÛ¤iúÂ… FFFL?*cðàÁ�½‹Å266~þüù½{÷âââlllnß¾ÍçóKKKýýýÃÃ㢢>ÜF¢³ŽŽŽÓ§O4ÈÐÐ�ÂãñÂÂÂ.^¼øË/¿Œ3æåø.ÊÊÊ]’X„KK˸¸¸‹/îܹ“Ëåöl…ÞH/ºž „ÔÔÔÈÉɵµµ•——ß¾}ÛÕÕ5>>þÉ“'gΜٺukkkkJJ IÓt}}ýƒ˜¡„�þýûB9EQú�òóÏ?ÿüóÏ !4MÿðÃôµÑ_‰Dëׯçp8 >ÌÈÈ a±XGŽYµjÕÂ… ===#"":::F�5oÞ¼éÓ§9r„ tâĉèèhmmícÇŽmܸ±¥¥¥'K¾}ûöÐÐÐðððóçÏs8ggçÆÆFooo�@0vìØ”——wY«½½�¦iCCÃÜÜ\&‘ÖÔÔT__/ øí·ß¦L™tìØ±²²2 ‹3føøø\»v­Çª&EQÔöíÛ§M›æàà@±µµ•¾EÓtlllç`‰D¨¢¢²jÕªU«V 0 ###(((11±§‹Þͪªª(ŠÒÑÑyòäIDDD^^^@@À°aƒƒçÏŸßù ÕÐÐèðõ×_wIb�=zÇŽ¸w£cpp°‡‡Go;|õ®vBй(c³ÙÌí¸,ËÀÀ ¹¹YYY™1ٹ߉2pà@‘HôôéSæ´®·}ÐoKšŸ iúÞ½{².NwimmeΗišnjj:xðàåË—£¢¢ ÚÚÚ¾ùææÉårGŒ?wîÜ?ÿüSOOÏÆÆ&..nÅŠ���§OŸ~úôi—>^UUÕÚÚº­­­½½�¹‹uùòåË—/?pàÓïôïÿû«¯¾²¶¶f±X}ôÑ£G�šššŒŒŒ(ŠböÃ×Ëù‰66›ÝÞÞÞÞÞ¤¯¯_\\lbb²{÷î´´´„„„ääääää±cÇzyy…††Ò4}óæÍ•+W:88¦¥¥UVVnÞ¼Yšùï|>õêÕ]^¿~ÝÅÅEú’ÉC0D"“� ‰DÿËùÎêëëŸ={ÖÐÐðâÅ‹ÚÚÚ–––Ç�«¨¨466jjjv ¦išÏçoÛ¶mÁ‚Ò…L¾P"‘mذá0‘¢¯¯OÓtuuµ‹‹Ë€¤‰4BHß¾};G½>@NNÎÀÀ@]]}Ò¤ỈDÒ冕ޠ—¶™™™111IIIaaaË—/wwwß¹sgbbâôéÓ™ s¿SÿþýÇ�omm}éÒ%¡PÈáp$ sÙ½MÓ Ïž=›1c†••Uzzº‡‡ÇÇ�ŒŒ¾úê«É“'3Cc !mmm999)))ÕÕÕÌÂo¾ùfûöíÓ§O¿zõªì*ñ¿N]]=''GNNÎËËëÆ�›6mÚ´iSDDĉ',--}}} d]Æ÷ƒÃáÌš5«´´´¼¼¼¦¦¦¢¢bÞ¼y�ÏJ¥)+BÈ+8Ž4‰%‹ëêêrrr6lØÐ“µx[½´� „èééutt455utt(++khhTVVÊËË3�С(jܸqöööúúúÛ·oWUUõ÷÷§iºOŸ>b±øC¿žè‚¢¨‘#GÊËË÷éÓGSSóã�?®©©².×{  ¿þúë——?|øð§Ÿ~úé§Ÿ¤Knݺåêêúräýû÷ïß¿ß�E„N$I`` MÓ#GŽ”.|úôé‚ nܸÑÚÚÙÔÔÄü8ËÊÊtuuƒƒƒÝÜÜz2�ôÞ©««�;VWW×ÙÙ™ÇãýðÃb±8>>þ³Ï>Û¸qã™3g(Š5jTlllGGG{{;—ËUPPxe@[[[ç$VTTÔÏ?ÿ\]]�——§®®®­­ßÛ.¼zéP Š¢¬­­KKK[ZZÚÛÛG�%‹‹‹‹Ùlvkkëúõë?ÿüóY³fÍ™3çêÕ«ÞÞÞW¯^½yó&!D]]ýÅ‹ô`í—ÉËËïÞ½{ÿþý:::ÖÖÖQQQÌH €ž÷âÅ‹.Oüõ×_GGG³X¬þýû3mÞ›X¼xñîÝ»¥µHHHxúô©‡‡ÇÀ����<ØÜÜÜm•ø{rrrßÿ=3+-EQrrrrrr¯üÌUUUþùç�?þøo·©  `jj:|øðáÇ›ššöéÓç•aJJJ!!!�'ó‘ÂÄ=¯wµŠŠŠ±±±%ÿi÷îÝjjjjjj\.wáÂ…jjjfffW¯^-)))..>~ü¸²²2!ä‹/¾ððð˜4iR罊ŠÊ¥K—^Ù£}ÿþ}BÈG}têÔ©G�9rdüøñ>>>]ºÂÿøã555™}(‡ÍfïÚµköìÙ².È»›0aBAAÁƒ¦N�ú†«hhh$&&ÆÄÄèêêvkÙ^iðàÁ&&&G�mkkc–´´´ÈË˧§§ëééyyyåååÍœ9ÓÌÌ,;;ÛÖÖöàÁƒ‰‰‰/·,«óÈ®çÏŸGGGÛÛÛûúúÖ××'''÷\•^E,+))-Y²ÄØØ8//¯¡¡¡±±ñÁƒ7oÞ|öì3 ö°aÃ!ŠŠŠöööºººcÆŒ©¯¯ïèè‹ÅÒŸ!„Ïçw^( ׬Y# OŸ>½téÒììlB›Íö÷÷ÏÉÉÙ¿¿D"a"åååy<ž���ššš¢¢¢������’’!$--­¼¼ÜÚÚúßÿþ·´’¡_ýUEEÅÈȨ££#99ùÌ™3b±˜¦ésçÎ:t蕳 ———Ïš5+//oÊ”)Ì¿ÅÅÅÒwïܹÃår}||Ahhèœ9s-ZÔùë355ÌÀ—ÖÖV‘Hôå—_¶´´,X°à»ï¾kjjªªªê‰ÊwÂår·lÙ’šššœœ¼råJæÜô5^Ÿ‹’òðð¸víÚŒ3Þ_I»ÅœŸàñx\.7==ÝÚÚúСC)))¾¾¾ÙÙÙ{öìQTT ffr§iº¢¢â�?þè¼.3G#£ªª*22ÒÈÈÈÈȈYÒÞÞ^]]ýôéSBHSS“L&õÍËË;tè�®®®““S||üÊ•+óòòÞmS,ë�;Í»›’’Ò§Ÿ~š•••œœÌápFŽIÓôÞ½{###»LpÛEGGGLLLbbbddä±cÇÖ­[ÖcßÔ+›%‰DrëÖ-±X,òóó !ZZZEEGG?~œbffÆDêêê&$$H;Ö’’’!ëÖ­KKKSQQéß¿?EQššš=S—×PWWoii™7oóÁ>þüáÇEEEöööíííååå¡¡¡uuu6lX¿~=‹ÅJNN¾~ýú Aƒ9NZZš‚‚BZZZç�¢¨¯¿þzýúõ›7oÞ·o_mmí–-[ÚÚÚââ☿RVVö¯ýkË–-+V¬¨¨¨Ø¾}{GGGFF†››ŸÏŸ9sæíÛ·‹ŠŠzòsxï¹(‹ÅšÝÉÉIQQ±ººšI%š››÷íÛ·‡¿ënÊEB&Ož\]]�œœ,‰¬­­{¨>ï¤]OPµ}ûöiÓ¦988Blmm¥oÑ4Û9X"‘DFFª¨¨¬ZµjÕªU ÈÈÈ JLLìÉb±»ü9é¥kMM �ÇÓÔÔäñxúúúûöí;wîÜСC-,,ìííG�}öìÙ¦¦¦n©ó›©ªª¢(JGGçÉ“'yyyÆ ž?~}}½4RCC£KÀ×_½fÍš���ŒŒŒÔÔÔòòòÑ£GïØ±ãÀ�÷îÝstt öððx“6µ;ðx¼¬¬,¦»ÿe‰äÇüùçŸ{¸TK$mß¾=444<<üüùóÇÙÙ¹±±ÑÛÛ[ Œ;öÁƒååå]Öjoo§iÚÐÐ077—9©ljj’~}EyzzVWWŸ?¾½½ýðáÃK–,9yòd—,HOb±Xyyy>œ4iÒøñã !ׯ_gÞ½~ýú½{÷ììì¤Y%999¦Swâĉ»wïvvv.++£iZ$Í�;W[[{ï޽˗/ïr­/‰BBB†nbbbiiÊR™|uFFFff&säUTTäñx�Ýí5¹¨Î»•––“‹JJJ*))霋ÒÑÑ¡(Jš‹¢iº¾¾¾µµÕÖÖ677·¥¥%??¿—w=õ¢v‚¦émÛ¶™››çååM˜0á×_7nŸÏçr¹�àås4>ŸŸ••5wîÜ’’š¦û÷ﯠ ÀårMMMišnlllll$ÿ—ÇŽ‹‹ë¼®““sfM¡(jÚ´iêêêE­ZµJ^^>,,¬££C]]=777 ++‹¢(™…4M»¹¹B"##;::ÊÊʦN�úé§Ÿvbÿr€��]BB‚´ÓœÅb_½zõìÙ³„�Ç”¥IDATGGG›™™Ý¹sG&•*//çñxÌÿ'NœxðàÁo¾ù†9aÔÔÔLMM}}¿“ åçç»»»ÿý÷žžžB¡ðÊ•+ááá"‘(,,líÚµ7nŒŒŒ¼}ûvçU***®]»æææ–””ÔÞÞN9vì˜ô] [[ÛuëÖ1o%&&ºººzyyùùùÉê·Çãñ¦N�:xð`•iÓ¦>|ØÃÃiÆ<<<®_¿ÞÑÑ¡¬¬Ÿ¿mÛ¶ Hîܹ“"‘H‚‚‚6lØ@Þ �mbb2{öì;wî<}úT \½zUKKKSS3--�éè¾ú¾!}}}𦫫«]\\ Ðy¸d—' ½>@NNÎÀÀ@]]}Ò¤ỈDò·ƒ7ºU¿~ýFŒ1cÆ 77·={öüñÇššš&&&jjj/Ÿ•÷|>ÿåØõë×;�úgò ‘HäííýW[»uë–•••ôå‹/d> ¦ººúÓO? njjbZ¯.˜›*Ö­[÷ÝwßÉÉÉùûûïÛ·OYYùäÉ“ñññX¹r¥½½½««+s”H$ÚÚÚÌ=ÚÚÚl6[GGÇÀÀ€" ëëëiš–——OHHèüVVV.\¸�"‹�?>cÆŒ!C†Ü¼y³g>„nÊE-Z´H^^^ú{ iÚÚÚ:%%åýWà}è]íÄ›SWWÏÉÉ‘““óòòºqãÆ¦M›6mÚqâÄ KKK__ß‚‚‚7Ù‹Åúî»ïÁǵ´´¾ùæ___fð!$66666öÑ£G666²:`q8œY³f•–––——×ÔÔTTTÌ›7¯óNÛyøù+8Ž´Ó\,×ÕÕåää0�¨Ì9;;ÇÆÆVWW_¸paúôéwîÜa±X+V¬hkkKHH(,,|y­ÆÆÆ’’’wËêÛkkkkiiÑ××WWWöìÓóà ¯`þ#‘H|}}·lÙqêÔ©ââb{{ûcÇŽq8œ‰'JŸ8rûöm[[Ûââb•ÄÄD齄準rùòe''§––BMÓ111;vì izüøñþþþÒøÚÚZ‘H¤££Ócí„4uñâE¦{VIII]]�iÕÞ-Åb±lmmÏœ9³iÓ&æedd¤��]¯ízúò؉$00ÐÇǧóqáéÓ§3fÌàr¹±±±Ì�j�@@)++{ôèQppðߎ\–nüêÕ«¡¡¡ÌT$íܹsРA}ôÑ�;wV¯^mhhheeõòiBwSWW;v¬³³sttô�!CBBBÄbq|||ß¾}7nÜhee5~üx///EEEæay\.WAAá•"‘ˆé4·±±ÑÓÓ‹ŠŠúì³Ï<==?ùä“Ï>ûlþüù2LÔ'''ëèè :ÔÛÛ›éû’H$?üðƒ¼¼|ß¾}-ZÄ|/]=zÔÕÕ•éW„nõñÇ«««/_¾\UUÕÏϯ¬¬ÌÕÕÕÉÉ©¬¬lýúõjjj!!!ÍÍÍÌtBHrr²’’›Íž2eʽ{÷LLLØl6�Çcž¾ÕÜÜP�@àé驨¨äïﯢ¢ÂápD"QJJŠ•••‘‘Ñ+$IXX˜––ÖÆ�---/_¾ìççgeeºdÉ‹%ÃvB"‘¼rŒ£X,Æå‚Ì)((,Z´HUUuܸqiii..._~ùåÉ“'Ïž=ëêê:uêÔ³gÏ2#‘}úôaFïtïÔÑѱ~ýú·úÓýúõcn?ÔÖÖ–þ>}}}ùå—ÌÌÌ[·n½Ïzþ&ÕÔÔäéééæævóæÍ5kÖ0¹(énÕei.Jz¹ìرM›61mÞäÉ“ÛÚÚ:ß•““Ãápzù¨§ÞBIIéܹsþþþ¿ÿþûòåË«««‹‹‹cbbúöíûñÇ/^¼¸°°pРA#FŒ¸uëÖ°aÃØlöþýû÷íÛgllleeUPP0gÎ99¹�;w®]»–¢¨7yn!„¢¨mÛ¶%%%ÙÛÛ777w‰”H$!!!xª ü¯™={6ŸÏOKKkll „�7� ;0óA*+++)))**BD"‘²²r||¼¶¶öŸþùʵ¾üòËÉ“'߸qC:»$t³�¦é°°°˜˜˜Þ9ù‡œœœ¯¯oEE…§§g[[!$99¹­­�ÅbõïßÿÍ;Ä/^laaáããCÓtqq±@ ?~üÅ‹ !jjjC‡eæˆîÆš¼\O€ŒýU¿SmmmAAAaaauuõËk988…B鄃»víêÉkŽÁƒ›˜˜=z”i$!---òòòééézzz^^^yyy3gÎ433ËÎζµµ=xð`bbâËí‹Å’^E‰D¢ìììqãÆ1S>|òÉ',+77·Ç*ðWp=2Ö¯_?æ Z"‘¿áZW®\Ù°a3#!MÓUUU=yÞ­¯¯Oáóù� …Â5kÖ„„„ddd¤¦¦–——kii±Ùlÿ¤¤¤’’éè,yyyf¬—¢¢¢��3ß{ffæœ9s† RXX8a„‚‚‚†††«À_A;2ÖÒÒ2mÚ´ÜÜÜC‡ 0àÖ­[̈ )S¦lݺµ¬¬ÌÆÆ¦ªªªËZ�?ÎÊÊjmm•E‘É+¯]$É­[·Äb±@ ÈÏÏ'„hiiQ}üøqBˆ™™©««›�� �4))‰²nݺßÿýéÓ§–––%%%cÆŒ9räþBo€vdŒ¦éÖÖÖ/^0s)‹D¢eË–�?ž2yòäU«Vɺ€¯PYYI144|ðàÁë#išf‚;ãóù–––„�¥K—ZXX,_¾\z1tåÊ++«ëׯ«©©eggwCÙÞò cL¿S{{»³³3!„¦éšššÒÒÒÒÒÒšššÞ™Å-)))++›;w®túh%%%]]]BMÓÿM¦äòåËfff|>¿¢¢âý࿃vd©ªªjõêÕgÏžõðð8yòdXXXïlº‰DÛ·o766wqq™7o^llìÚµk%‰@ ;v¬�� �Çë²V{{;MÓ†††Ò†¤©©©¾¾¾sÌõë×E"‘‹‹KVV:� —@¿È›Í¶··ohhÈÏÏ_³f�­­í+Ãttt Ä^)ŠÒÑÑÑÐа²²bòØ„š¦ËËË_NctŸüü|ww÷ï¿ÿÞÓÓS(^¹r%<<\$………­]»vãÆ�‘‘‘·oßî¼JEEŵk×ÜÜÜ’’’˜’;v¬ËfŸ={–——7qâÄÌÌÌ« @ïåêêúèÑ#;;;‹µuëÖÜÜÜÐ�<|øPWW×ÇÇG,ÓM,ûùùɺ6ð^Q5gÎfä�ŠŠŠ��ÁéÓ§-ZdjjjjjúÅ_$&&0@Ö%xkÿÊŠ‚ „šáIEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/main.png000066400000000000000000004572261523260663500334020ustar00rootroot00000000000000‰PNG  IHDR"p¾ˆÐsRGB®ÎéDeXIfMM*‡i  " pwÞÔ†@IDATxìÝ`ÕÖÀñô!Ô@èDPPQŠ€‚ŠØ°Š`ÃÞ‚ Ø±!v±¡bAô‰ Š‚Ÿ€€Ò;��ÒËwîX†mÙ’M6Ùÿ<ßáî�;í·›ÝÍäÌ™Èõë×G0!€ € € € €ø+åï‚,‡ € € € € `b”¡yóæx € € € € €ø$°aÃO6«Oh F@@@@8Íê(Âc@@@@@À'N³úÄÅ`@@@@@ÀQ€Ó¬Ž"ªªU«f�e±VÖ\}ÿÏÎΖÍäååIÔÏ‚’’’àn˜µ#€”‘@dd¤¬)::Zb||¼Dý,Ž��-£-°@ªšÙ¬Uíåx@@@@@ œÈf ¼°°P–ÏÈÈ�˜››+1??_bqq±Ä`çìè_˜£¢Ì¹ò¸¸8‰ kÖ¬)Qó¿¤QnÓîÝ»e[šµTn Ù �ŸK6«·OÎè¶d³zkµcÇo‡V¡qú^§¤ï«ú.תU«*t”UáPôÙÉÌÌ”ƒ ÏÌëªð,r  €ÀA}W×ßw4ê{{õêÕeHrr²DëgôÁåø·bøÍ´bÜÙ* p¸Ù¬‡{ð@@@@ðQ€lVÁæ¨jëž={dy­X¤ËÕ¬RÍ0õyÕ~- ™³Zó.+Ëdj&QíÚµ¥­9_Áû;³æ®j«_»ÏB €@)ÎWè;ð_ý%K¶mÛV¢fÖ”²"fM@Ÿ#ýL䚆 1³b@ $4§Us'ëÔ©#û¼ß5Bâ€Cx'ôó—ßLCø)b×@ ìÈf »§œF@@@@�² ›ÕOýkaZZš,£3LLL”vyæ®:ï®nݺšÙªû©÷z®W¯ž,X¶gÖ|%Í]rÞ+z@�` è{òš5kdCmÚ´‘HNk°ÍÝ­_¯¢ �Õ�ý €@ÕÐ÷|}ÿ×ëçªÞ1†òñ›i(?;섳٬áüìsì € € € € Pd³ú€¨¬C9gJkÅêêÞÆÆÆÊqÖªUˇ£-m(õXKb>”‡€Ö§^½zµl¬sçÎå±I¶aÐk&´NŸ¥›& €@XèûµjÕähõ7ް8ì8H~3 �'�]@\�Íê….@@@@@À{²Y½²Ò;ijR­ÇêÕb!0(!!Aö"==]bRR’Ę˜@ŸtòXCà‰e@à0­P¶víZémÕªÕaóxL�ììì`®žu#€Tý, BkùÎlðO Ð3nÞoµXnÁTXQ\TRTQâý‚~Œ,‘»=EGEDE—ÄÈ?L € € € € €@Êã4kIQQÉÚu‘«×oÚ‘™™—W\TÄc’ó¹ÑÑÅññÉÉQM·mÙª¥ô²EÍ�Š2çl###%jæT ë,Ÿe­û¬G‘’’হ—t€€,ŽAÐûiå¬Ö¥Ÿ.YèDÂJ€Ï‚ò|ºùÍ´<µÙ à«@ÐO³ïÞSòÕ×Qÿ·$² 0:/_îURäTV!�\ÙȈHs†qùŠˆï,>ö˜È�§GÕ­ã«ã@@@@@�R‚{šµ0-­dúŒØU« óò\— (‘ëûe'Íÿ%AT2Eìñ¡öÁ³²öY:Â>ÀÞ°­âÀªlí¢¢âˆì9ß3ÿ÷‚=éÅ—\S¯Þ�õûøOnn®,¡™¡>.ÃuÏõ(Ù!½£t k`Y@ xz�ANNŽl¢rÕÑžI°×\äËS‚½ÿ¬@ p> 7ô~ üfê½#@�òâiÖ¢üü‚™³W®4W‘8œ$=t ‘’Þ*'Wål©$ŸK׃mùÍÍ,%§IÍìYITt„\û/ý28>ÎôÈCûRz®6¶†Cë7­¢ìýñ+VæÎœyùð踸Ãgò@@@@H ˆ§YóW¬Œ]ºLþÚ&çQÍyÒƒ‰¦ÒZKŠ#“’â†_V¸à÷¢…¿G6j?ì’‚YŸý»:ú¨N±g ÌÿtVɪ5ÑÇu‹éÛKΫïI/üúÛ’Í["7Š9s�T(úo]áwßÅôïWôÛüâÍ[búôŠÈÉ)œ¿0Âv"UÓbí)´¹9¹1K—É.%v>Æ0Í⌫´§h5›5??ß�c·.B6«Uƒ6„¦€Þï˜lÖòyv*K¥òòÑ`+ €@x ðYPžÏ;¿™–§6ÛB|0÷t ÆTXXX°diTN®\¹_"õXmÿIaVS›Uÿ“þ˜è¨cŽŽîÕSN†Fu>Fþ+IN.ÎË�:®kdë–QÇWT�Ѥ‘Ü/+ï»ï#lgW‹££c.¹0"!>ÿ‡ŸŠö¦—Gu8¢$6¶8;[NÔF¤6(ÎÏw±­ââ¢ââ¨ì\Ù%Ù±`/ëD@@@@�°V6kAvvñÚuùyyrNõ®æ—Êí�lV9çºcGdJ½ˆÍ£;Q¼kWIQaDr�¨ÔÔ¼�gÆ×­$1±¤°°x箢VÅôØ-õJä6VÉɹ�?U²g�Üã*²Z5©Ý­‹œc�lÞ´ø¯¥²ÊHSmààªÛ²=Ì—ûo­]';“œ|p¶·ÿÊjehe¯ÍªGáí1»GÝ%W*ô!€@h ž¹ZÇÃÞ € €øÍô ÿ"€¡(¬Ó¬R˜µd÷I•«obeʬŠÁ�‡’^*­ŒŒâýûãÎ9»Dj´nÙZRPÙ²ydƒú¦‘Ú ²y³â윸޽Û·‹¬^}ÿ¤Ç"¥kA~qnnIddd‰$ÆɹÖÈ6­£êÕ�ª[·ÐdÊEÉVÛ–í¡d±–ìÞ-;ŠÏû„ € € € €•V (E¤:OqAAQVfa‘\ñ/×ëÛ&[ÛúPzK¢£ó�slçÂ+åŒj±ä‹v<²xß¾¨Æ�Kró$Å5"6&ÁÂì7Þ4‰®ÑÑE{öDVOŠ>¶sIBbd˦\@~~δw²&L’a%QrŠÕõ¶d»…òÿ¬}Å…~’EüX*Ô^Uã(BM•ýA@ ²öeËù…ò_8/Lj„¦@Õø�®jEh¾BØ+¨X� �f•³�yy˰•hË©UiÛ–äæ¬Z•óÁŒ¼ß•dg—ÄÅÆ´k›óÞû^x1çã™ÑíÚÉyØ’œœü¿–þ»*öôþ…{vçÌú<þÜ!Iãî‹¿hhIµÄ’¬}%rñq%ù…&ËUR\]më@ÁÖ¼\Iw­'L+öEÃÖ@@@@@À*¬¢&§4¿@ê²Ú+X·jÚR5uOú¾W^+Nß»ÿ½"cãö¿?£$/¯pÍZS¤5&&oÞü‚Wɹ×9-µïµiQII%1±¹ßÍÉ_²$*¹fqZZqfæ¾7¦IåŸóÕWrG,iÈUÇmÙK�b)Ïêf®ËEüèLÛ“!KM�ö©Dmû±’R©W§¦Œ¹îŠs$j»ÔEªÀ€å+×ÈQÌû}™Ä+.,1&&º ‡Pþ»÷ì•�nÛž&±Ó‘m$J²»Ä̬ý½™bcÍ›gRõjÞ f  Pé¶ïÜ#ûü³j�´«WK”8õõ™¯v¦ÄvmZHôozë½ÿÉ‚Çu9Râ‘G´öo%e¸”f¬]¿YÖ¹~ÃV‰§ö>¡ ×ï¼*ý|ü}ñr™Õ·×qããâ†ý:ÿOéi˜š"±u˦syˆ €„³@PN³š/…%r•ALT´´õ6T¢¬7¦²?ŒÈ/*ÞºM¾˜GÄÅI§Ü+"2²hï^Ó‘“S´q£iÈ$=fÉÈí;ä‰;°†ÈÈâÝæ÷Ói;‘ê°-óPV.gRÌÚ³ € € € € €@PN³šý‘«÷óó‹bãJ?§iM/Õ Î=¶D3³Zû,9ýj;™{X§<°�43›ä¦YÅùf©`N.3Û·”xÞ™½\nê«ïØûžÚÝÞö¾ñÉse°nk€-×Àûe+ïÈÙßΓ�OªnòVÈcu÷<^m^z/ s7ßuÿÏ+M¯�\Ï­z½›6o—ƒzåí/$>ÿØ-wî2§¹cüK½™úô8J†]9|ˆ7ƒ«À˜�>ž%Gñþdz}:–^'™L·›n¸Ú§¥Œ+°äosíÈ ¶üÐ>'›Ò‰÷Œ’˜Z¿ŽÄü|“ÓºtÅZ‰Ÿüï'‰‹—ü+ñæ«/�¨™þÒ(Ãiß¾Y[A¡)«¹–OÒó°*9÷ÅïÍaíÌòtpW¹N¹ö´H˜×®Ms9Ьý¹×®ß"Q³¤õÐ^}úi$&&HÔì¤á™œ öm[HüüËŸ$îJÛ+1ܦ®�M½ÂóÏ=«ÔŸóÃ\SÈíÈK•b¡$ õX5�uÌ•çʮө�ÃÆÙrH»u6yŽGw4ÕK'O�!ñí¿‘ì¼§}û³e+i»ÍÛkÏÝ-Q§×ßýR§œØYâ° I\¸ÈTr_¿Ñ\» “^Ç0î±7v¸ý÷½™?Ê<�΃Ž9²…tÞq£ëËF�j²G»ÚjÈ:/kíyùÍϬíí˜óå¼Nm“-ÛªyªÄ„xSõê+Γ¨ù¼Ò�iâ=æ»�s•ðg_2ψç)}o¦ ¸ù¾ç%¾ôäm‹lWŒ}óã"Ó.2÷9¸}œÉϵN}O2¬™¶üâÿ}»PÚ­c¬ÄÖþ¨(ùqß-—Y;]¶W­1ß÷f|fê3!€ €@x ô|­øŸ;~ñF#�e½Y¿ç1Á:Í•_}èÐ`­Ýó1¹Ÿ+×›íÏÈp?Ÿ9 € € € € €€ÏA<*w¿:p+Ÿ÷*X ˜]*ÇiÑ_¦ÕÛ™ü�†=ý`“½Т³f›Ì¸.�ZIõhÖªf\æäå˲i»Í5ZÕ]¡Îê¶êíZYµfò¡Ú ºéÖ-›JãÝ—ÆêC—ñæ{Ÿ‘þ › =Nê~¬Ë1ž;¥¦È½úÁóÈÄ“£ê<µhÖH:5êõšeì<²^ÝZÒY#©ºÃ,}^:®øg­ôt;Úä#k†ò³/~ íúõÌûü-×^ qêë³$Ž»ËäÌÖH2Wƒ=üä4‰ú Ø«gWi?ûÒ‡¸ÓŒQyi¸œ¢ä.µÞÉäääº\� €@ù hNœ÷Ûõ/óÎûõ3�ðП&_óR} Oó�‡ @@@@@Ào� f³úºOùùùIII‰‰‰¾.šã»u>BvL£u¿ú~�õ!ms55Â~ÿˤeNºo”ÄfM:Œ×Ü–&�êKÛÖÍæ†óÃ^-ÌÑ·­íÉ ZpË{Út…Ìûaîï²Ý7Þ?”cÞ®¥yE�q¶}^xüiW³Õf}à‘W¤}éù$jvÒÿ¾2¹Õé{³$2!€UC@¯Y¼t•ÎÄ{̧­÷Sr “MÙõèvÿ\bÖpÆs}I Óò•ÿÉâÏ¿f²)uzÿÓŸ¤ÑªY‰9y/»ÆTi?®s‰:-Xdòè~zúÁŽ­ªý¹\ϼ2Ó>×]ãÅ7¿�Y�Çè·Ž7§Üë<«LzvîÚ#ëÉÉ5�{ÒÍgMV–©H»aÓV‰…¶{H#ÀéÏ%披.ǘoª¹¶|áí»Ò¥}íC$¦¤Ô‘¨™­ó.‘v‹fæ³rÝfs�ÌÈËL…îZµjHlÝÂô/øc©Ä¾½Ž—¨ŸžrãYi3!€•]€ìÔÊþ †æþûš%í|áóÊô>§5òXõ™ ‰Ó¬+V¬˜2eʼyó²³³:vìxÅW `Îkاɓ'ôÑGö‡Î�úõë¿þúëõêÕsžE € € € € <�Š?Í:{öìk®¹fóæÍöƒ\¶lÙ§Ÿ~:~üø;ï¼S 9ɬ5kÖ,Xà) TN³J>¬}%4*»ÀÖm»äÞœñ�ĽL}´ùßÁliØ'½î[ö‡æzØgI£VMs¯^çmÖ1U©m­rËéÞÙaSBó¸®EóR_~ÓäIuïfz ‹ŠìXcî|ÚÞÖÆ£¶ú¿ÖÎð¬Íj �UI`ßþ9œü|“%Ú ÅãEn»aªù;÷Î4“øtB·£d%'<öš´O;Õ”OµU}�ðÄ[Ò~|üµccÌWÙÛÆN‘xL§¶]´Ôä _vá ‰ÕmõÊ/¿x ´Ç>jª¯Z§å«6ÙÞ1f¨´ïžøŠ½Gº¶Ÿý,Ÿ�tƒÄºuj9Œá! €XüËH <Öº•¥í9§5tòXÕ³‚O³J«$®îÚe¾àV¯^½qãÆ’Ð*§\óòòî¹ç9s:räÈ;jû-í5jHÆ«^Ý&W$ìÝ»Wúccc¹@I­ˆ € € € € Pž|šõ…^Ðs¬ÇüOt@ýŸ7í9S‹V�>4>ZzGæ’b“½n“©1wÍæÕ¥•éôO5¯=s§ôØSé¥m�¹6kúÞ ¡X³ÆÜŸÚó´+ÍÔdB�Ê"'»Zl{oÔ,N½û¼÷ûŸ››'ƒããb½_$À‘ÎUJ‹‹‹K]glŒù˜¬UÓÔÕŠ¢|j¾? ÚOâIÝMè†M&öµwþ'±Ž­ém×›ìW­F* Ó¶i2wõ<ŒÑY9¹®¯ÁºêòseÀ—–8控$6J5ßoÇÝ5J¢c¿Þ&·×yÒ|ä»vˬí[9�ÍÉmÓ"UÚµk%ÛÇèk :Ú\óÊä;ìýšÏ{ó}&_Ø*pÿ­—IOƒúu%fddI¼ÿ‘7$º›tϽ‘Ù¼Õ|:3!€@ð^Ÿ>ÛÃÊÿ]½Ñ>×óÈ+/=Ã>’ lçœÖPËcU�Š<Íš““óÍ7æ¤ä±>þøã§œrŠ´k×®=nܸåË—öÙg6lX´h‘œT•~M_•FëÖ­;uê$ ™¤ó�?þÐöÅ_fwóÑ#'"€ € € € €@… TäiÖ­[·Ê_¶¥@çÎ�%›ÕîwòÉ'ËiVéY»v­öK¡€¤¤$ûmüøã�rã,iË�¯Î>ÛÒ Ò¤'yí§z½ÜJ×cÚËH�ÖE¾þa¡ý¡¯ë´/hox¿ïGÚW^��ØXóâìsÊqÓ÷fÚ÷ä‰ñ×H»ajнçÚÛž�öèagJìÒ¹ƒ½?< –D¢í¦Ô“ �e+VKo­‰%)^¢æaiÏšµæoøO¼ð¡Dë¤õXkÛ2›¬ýáÓ^ô+ä`5zsÔ½NêæÍ0Æ €@… ÄÙ>s›6®/{²t…ùêÕ­³ùãý´Ì¶Ôà�=½_ħ‘+þ]'ãWÿ·Ib^¾©šzÛS%¶kiît¯ÓÏóþ’Æ3/Ï<Øѽˡ£8ú¨vÒß¾] ‰“_˜.qÙ?‡2¶^}×T\ÕX;¹š´/<§�Äj‰æ“Bë™¶oÓBÚÏNºQ¢»iöóç�îÆxÓ¯YŸÙ¶Œ×5ë·Ë" -“¨õjõz‹´Ýær­‡»j�9–…‹ÿ•XTR,ñ‰ñ×IÔº«Ò°O-3Ÿ€'t9ÒÞcmh½û+ozÌÚé²­Uï­ù°.‡Ù;5WúÁ'Þ¶÷Ð@ÿôwº@~³ó~YÏ#=Ïõ|t�,ëyÍe;7�:˜þUÞ,ÛýgmT=çœÖP;ÆŠ<ÍÚ¢E‹¥K—Ê;lLLL¢í[¬]gÏž=Ú¶÷˱î¾ûné´žl}ç�w´z@ß¾}[µje_œ € € € € PnyšU’ȬçLíÇüï¿ÿNŸn² d@×®]µ_ Èd#�õë×ÿðÃÒ�›_]xá…î )Z¡�@•¨oÉù>·­9Ü!¦ ©Û©z‚ÛYUxÆ‚?–ËÑ¥gfKÔ|¨Ózw‘¶fª*X�nGH�ÖÈ[ô§¿l¥¹/s8Oýûœ(‡íÕ#KEøèãY2fë¶¥Žd„Ž@¿^&ý“Ï’xtGS·Z³\¥áaúm¡É²ÌÚo. èr´É |Ú¹Ëü¹}îo‹%nزKâö]æ~§ƒO7ïBO?t½Dët÷„—äa÷n%»p�DÍ“Ò:ï:2.6V/¹à4iÿ½|�Äß~ÿ[â¾ì\‰gŸ~’ÄîÇ-QëÌNÿÐd¹Îüb®Ä[Ç\,±NíšÝM£.(³zŸ\z.ÿ}_t·é_l«ïoðî‡ßÉÃöm[H|à‘×$VKŒ—Xh»]AQ¡É`½ðœÞ›75uW«W7y¸ÖI«Ù.X¼R:ÇÞ>Â:ËÞŽ±Õ®}sʽö­Ízíí“í=þ5œ×ìn=-ýGf=9õ#wèG�<×TµÖcõ<2Àݨ‹“‘êýÓHæ¯nmïµÃy¤µ«µ:&Q¡³+º'YYY7Ýt“Te•‡C† 9âs¦Ãåôý÷ßoܸQfµoß^ë·ºF' € € € € T�ŠÌfuy`'NÔûb5oÞ\Úîîj%µÞ|óM]ÃðáÃíµ\®ÓÚ)Õ`eÒjŒÖþ`´/1²Þþè‰Ã‡ž.±keycoYgÕhnnG|`z𜃭Òþ]³½´Ukþm7\&ôß:Sãï©fHlPßÀíµÝ+YL €@ ô>©³µ~{™<Õ¼7^{…)|¯U8�A4�Uóž† ê)4cÑy¤¯=Ûw¤É"[·™X½Z‚ÄKÏï'1:ÊäÜrÿ‰ÎÓÔiÿsè¼ë†‹¤ç¨Ž¶‹;lófÌüVþýe¾ÉÀÝ›e®iÐIk¼~7w‘<œ9û‰™ûL~®V­a»ôãñçÞ•žûo¿BbRuS¿5Ó¶í&{wáb“Ñ9°oW‰ûl™ÂzÙ–Ëzñ©;ì›þaîïÒžÿ‡ÉÉíß§»½ß¹±výféTÏÆ�8�Íx½ìš‰.çÒ‰ €€;rQÝÉÐ_Vι«¡Y§5´²Y_~ùåÉ“ÍEIrëçž{®C‡îž�¹sçþþ»ùZ™’’2xð`wÃèG@@@@‚-BÙ¬óçÏ;v¬þ•þÆoôpòTêm}ðÁùùù¢Ó«W¯¶m%)”êUXXXPP å\Kø€®Ç˜ûÛj |mᶆù¿/‘C~á�ÏüŽñ/9ôèÃÉ/}ì²_;¯~†4NîaêoVíéˆFæø~1…×"Nñ¢¬ÙªÑfdxN.1¹B=�ï(1-ÍTýkÛº™ÄHùDļEfî¼E“l�LèÓã({› Põ4_òæ«/�C{ûCs-ÎíL•ØõSqµaj=‰¹yæÛײå¦VµÖcÕ<Öÿ}=Ozš7I•xL§6™Žîd¶¨qÂc¦©Nݺ˜wì)�™÷걓^•8 ·É÷<óôS$Èô|ãiË¥K­y¬òP¦<Ûþ7k’"ícë˜*«M×—˜R·¶Ä5Õ`Û·n"ñ‚!ý$™õ$%™ÜÕÇžy[âw?,�xÎY}%czÿ“o;øôsóò$î·Õ�5|ˆ´×¬Ý(ñæû\çóZ³Pô:VF¿øL‰:-[¾Z=Ž;ò`‡‹££MÆ”Çn–¨yµßýhÒ†]4H¢fKƒ @(7ç[âU#L’¶­›K´Þg9'×äíÛgªøÍùi¡Äò©ï,bBÊY 6Ö|9Ô»Kê×]ÚZ­5mw†´ãls4•X5ËUß5�uÊk3¥ÿúQçJ <§UVârªU³†ôß~ýEŸ°}ضc·´wìJ—¨{xÃUC¥í5ẽrÕÅÂ%Òþ¿e&Sųóíý ñqö¶6æý±BW_~¶C¿õ¡n¥FRué,¨[(ñÏe&sùÄãM5óíZJÔI?7lÚ*³lŸ�ÚOöà þA@�€<ç±ZW:9­!‘Íúä“O~ü±¹â»fÍšS§N•›_Y±ÚR1À~ó«aÆy>!ë°,@@@@@�2¨ølÖ™3gNš4IL²!~øá>}úx>ÈŸþyÑ¢E2¦^½zgœq†çÁÎs%Aʳ:÷—UOtL´¬*3sY­ÐåzöçäJr “kPU'ÍUÑèùõ¾ÆM™Újš‡èy|U�{‹I-а‘‹øàŸªz”es\¿/6wdNÏ0?§›·˜<¦º˜î5mœ*ÑyÚ»7S:Ç=ú†Ä:µMÓ¥ pVå{¾ûq¾£Fo¶×IݼÆY�† êʾ�9ÀÔ õÎÜuÀÚ`¶íŸ-[Í'ݾýæÛc«M¬³ìíl[X½Úã—yJÿšµ›%ÆD›o¶ïÌøVâV«’éyÄ&S#)QÚ½Nì$±v­d‰ÎSaa‘tZ«Ç:�¡5ͤóo¯4·Î¿eY*yu…��¯?G¡�ÓZÁ٬˗/—»]åääÈ9Ön¸a̘1¥¾\f̘±oŸùzݳgÏÌ™&@@@@@ *2›UήÞzë­r?+9þ„„„úõë¿úê«RÀÎ!í£Ž:ªG�C9;wîüúk“€ “T ðµ<¢¬PjNiÙ)]I™Çc;µ•u¾øæ,‰?ßoªeyž¾úa¡ç.ç¦Ô­%ý׌ðT]Ëå‚tVI�›Ì‹.â¬.&~ú‡‰›„Óý&Ñ$¢šIy‰(´Õ(N6 (ÿí01&Íè™öžy¹hˆÉúôËß$j>Tã¥ÿH[3•4c¨¸Ä0åÚj³Ž¹ÒTqÕjt»lÿ^±Fz:ÙFb8L];)‡yþ¹¦:¡çiÎse@aA/ð¼ÌE� 8ºckÙ®ÖfÕ:­7_s�ôt<âPMOovlÓæí2잇^•¨_ÛΩ– í›îyZâîtóçöÔ”šûõ2Yó×]i²hÓöì•8ç'óAøà“oKÔo•W^rº´;v0ûöÒ´O%nݾG¢Vw�Ž69zeƒÖà®QÝÜ!@s`¯¸l°´¦Ö“8ù¥�%ŽºÔ¬­÷ÉÇItž�jö§kçÒó^~ó3çÅ¥Ç]kŽíJ¦Ñ·<ár)ítÎ�xÏH™µj͉ݻ!Q¯ÒñÖøûŸ¦rkq±ù>ãÓ%ö8Þ¼çßtµ±ý`æ‰Z�\2%&šgä¥ÉwÚ•¢¢"eÐ}·\VêPÝÛŸý\êH €@0´6w0Ö\×ék&]e”Vn-²åõ$Ä™·Ê8[廄x“ ¬w²¾àì>Ò‡éè£Í‹¦}{“8ݾ]›RYs�sóܤU—º<@ 2 h�VÍcÝo«øéëÑ4il>ÙŸšp�ÄZµjHÔwͱÒkRØ>ü,«®e« Ú¦U3éq±yÿѼÈG´’¶ÖmÝ¢‘´¯mrlµþûç_Εö·?.²õT—8hÀIuÒ/�û›žT[EÔœ\×ïlgžf®¾jl«߬IÃË»ÿgÄE&+¶^ÝÚî‡D4nhêÎ'%™ìÚøxó=ç±®ö0ÞyV½zæú§wg|-ñ¬Ó—óÈ3Oë)�½{šKcZ6o,ÑšW;f”YOBB¼ÄUk6IŒ‰ñö—ˆ†©)2þŠ‹N“¨o¥áaªg»fKŸå ~i÷°ÌB@üðö’Ok÷ò+‘œ'7n\ff¦õkœuCR†¿[7sí•NRd`èСŒ��=ÿüóvûð¯^;æåîù°^†"€ € € € €@ D®_¿^¿yóæeˆ §G³²²’’’|­�Z†ûàrU{÷î•KL´¤t9ÈUçêÕ«¥»Z5“MPy§ììlÙù¶mM>š“<­² FÿÖ>K5~ÍäË”çT×—‹Øm«¸ZžÛ |[[Fm |%>­ARãe|¨½Ays;v„M]o8ÜŒIMM•9 –žMæftû °ukyÿüú°s E ì2³ö‰Á¤§Þ’øÀ�WJ¬f«rö0E Q£òþö”Ãù•ò›iÈ?Eì „©À† äÈm'fÊZ@“FådkY¯8Ðõšû±èîº.–G@@@@lÁ* æË9M¹º?¤œe—¤Øk|¼),åÓ¤uôı»>­°œëž^-A³ÿ¨½PÎOŸ—›«Œy¬^Z™«Œy¬eŽP…Wh-ê]…“CCJH®‘$c?¦Ô‘ @�Ê"Ào¦•å™b?@ <‚’Í*”òî/WèköhˆÈÊþäåå~ª1D‡Ý@@@@@�V6«$‹É9M™ä8½¿iðPäk~~¾$¢ÊÎø‘Žªi¹•=›5ðäb]§ªƒ÷BeÍ ¸@e¯£¸@y®A?¨ÆSžæl 5~;(Ïg„ßLËS›m!€¾ ë4«\³)çXåä¦üê%Ÿ2ùqrÓ׃q9^îu£y¬úK ìß\Bщ € € € €þ å4«ìŠœÊ”S«r~S&9Ñ)Õ$¿UδJ¿L:À¿=.u)Í9•“ª2I[¶.“vú}ŽU+ýeggËÖ+cUG­Þx†—<§¥ú3¨(ý|ILL¬¨ÃíêgbHÕ Ãg�CF*V 2þ~T±b�l�ßLÑcY@ ØA<Í*ò{—œë”(':õÓWÒQÙO°êúeÓrbW6-õ ¯ß§Yƒ´Ã¬@@@@ª€@O³ÊyÕ„„„œœ=µ*§;å¼g9“ɉWû‰]ÙÙ%ûCŸö$99YÆïß¿_¢ž·­,³Õ½Uy= ŸÜå`ý ªÔºu9—N@ ¢jÔ¨QQ›ÛíÆÇÇ˱“Ͷ/ý,€¢|øÍ´|œÙ  àŸ@”‹•º”œÍ”R=Ó* 9Í'“vJ”©Ô5ø=@ׯ髺]ië9Víô{Í,ˆ € € € €8 +›U¶$§;cbb$ÊÉMÉ©”äG=é)Ñy?ʰǾ~Ý´¤^ÊÙ^�¤Ç¿ i¥?ýËazzº¬¤zõêþ­ªœ—ÊÍÍ•-Ö®][bYÕ+¬S§Ž¬mûöíå|,lð,вeKϘ[æZõ[¯ö(ó•³B@�J!PY~3ª˜¥î$¿™–JÄ@ ‚xšUŽÊz¦UNt–ÏiVÕ”Më$'ye’­W 2›F@@@@�*,ÜÓ¬ '§8åD§´õ4k¹iêiVÙœ4ܨî¿f³jº¬¬,Y§Ô"�jçpµ«æ±j¥BÝs=Š)dq«Ffffà+d  €€ßú¯y¬eõ.ç÷΄Ⴑ±±rÔšÇDNk¾8ds}ÿ—KÃÜ¡<ßú»¿™–§<ÛB¼(§ODý58ðÓ�Þc@@@@@�ò(§Ó¬åyHÁÛ–æ®ÖªUK6¡³Õ\NÍÕ¿+Zcðöĺæââby¨Q÷D«Ój=Ö¤¤$™«{n]*ð¶®Y·«Löª¸�¯œ5 €^ 4oÞ\FÖ¬YÓËñ †€õj�¼¼¼`l‚u"€„”@||¼ì�¾ÿ‡ÔŽ…ÉÎð›i˜<Ñ&T:s-? € € € € €€ßd³úL§wUÖz¬úW\ÍåÌÏÏ—ui�æu;»ÓZŠA«ãé}'µF’þ…S÷Ðçƒôzý ¶n%##C–Ó Aº X„ל D�RôýDßåš5k&£ƒý.WÊ1Û& ÏK�:uä‘^çA�V^ €@UÐOaý-€ïùû,ó›iÅú³u@ÀY€lVgz@@@@@ÈfõË:Tó§4‡TóF­uQƒ�ÇjÝý²Fͱս*Ï;n«F½zõdÇ $jn¯f¶jýVë>‡CûžMv3“7d#z£¤c4[ÐûñUc¤5[_³6Êÿ]®jHû(ô“Hëäê3•��-Õë<¬Ÿ’ÁÞÖ� ¸€õ÷ ý¶fý|ý¬¡¬øÍ´¬$Y ¸Ù¬�²@@@@k�Èõë× €Þ©9¬%8x@@@@@ÀG� 6Èd³úÈÆp@@@@@àpN³îÁ#@@@@@ÀGN³úÆp@@@@@àpN³îÁ#@@@@@ÀGN³úÆp@@@@@àpN³îÁ#@@@@@ÀGN³úÆp@@@@@àpN³îÁ#@@@@@ÀGN³úÆp@@@@@àpN³îÁ#@@@@@ÀGN³úÆp@@@@@àpN³îÁ#@@@@@ÀGN³úÆp@@@@@àp�}˜™™yx?�@@@@@¼ ›Õ+&!€ € € € €î8ÍêN†~@@@@@À+N³zÅÄ @@@@@À�§YÝÉÐ� € € € €x%ÀiV¯˜„ € € € €¸ˆÑ‘‘‘îFÐ� € € € € àA€lV8ÌB@@@@Jà4kéFŒ@@@@@<pšÕ³@@@@@�Ò8ÍZº#@@@@@œfõ€Ã,@@@@@ t�YúXF € € € € €8 �ÍêDB € € € € à‹§Y}Ñb, € € € € à$ÀiV':@@@@@_¨Íê‹c@@@@@'²Y�Hè@@@@@|à4«/ZŒE@@@@œ8ÍêDB € € € € à‹À�Ú¬¾,âíØÈÈH-1*ÊœÏÕo—gT]�¼¼¼ª{p € € €„�Ù¬a÷”sÀ € € € € P¶²YË6Ï4&ƬVóXËvwYT �²}Ï©& € € €T^²Y+ïsÇž#€ € € € €@H”qmÖØØX9,­ÄÇÇN € € € € €A ›5ÈÀ¬@@@@ªº@™Õf¥kU©p|”¥µYËR“u!€ € € €@E �ÍZÑÏÛG@@@@�J.PµY5+-::º’S°û € € € € €€?d³ú£Æ2 € € € € €€]  ²YÉcµkÒ@@@@@�0 ›5 Ÿt@@@@ÊRà@6k wýÖlÖ@ÖP–ĺ@ 2ðŽQž%ö@@@¼ ›Õ[)Æ!€ € € € €.Ê 6+Yi.eéD@@@@�0 ›5Lžh@@@@‚%ÀiÖ`ɲ^@@@@N³†ÉÍa"€ € € € €@°Ôf ¤¾j Ëë°X/„¶ï¡ýü°w € € € à›Ù¬¾y1@@@@pà4«@@@@@ß8Íꛣ@@@@@N³:€ð@@@@ðM€Ó¬¾y1@@@@pà4«@@@@@ß8Íꛣ@@@@@N³:€ð@@@@ðM€Ó¬¾y1@@@@pà4«@@@@@ß8Íꛣ@@@@@�‡ÇÏE(lÅZ¹8;;[vI_ÉÉÉÒ®^½ºÄ`ÜÕ€lÖPxöÙ@@@@¨Äd³Vâ'�]G@�ðÐz¬da„Ï3Α"€ à«€~OÐï áS§UóX5ƒ5++KÐ%ò­É××OU¯Ï¾õ5 {ÓÓÓå0õ§£fÍšÒ.ÛœV²Y«Ò«ˆcA@@@@� ÓlÖYÿ›#ØZ©áܳøÿþG³e|Ï»HlÚ¤¡Ëeþõé_µf½ÄQ—_àrŒµsö×?ÉÃ:µÍyôO8Ö:+Hí´ÝæüýªÕë$.[±Zbƒ”º‡œÕO" €„Ž€þ�=Ø÷E �ãeO@@ ýΠ¹{šéÈÚBY­¹©y¬Zs3ô÷™=,ý¹ÐWˆ¾Z4ï;))© w†lÖ2ÄdU € € € € ŽašÍºqÓ6y¶ ‹ŠýxÎ?�=W–jß¶…DÍfMO7÷°Ûº}§ÄŽÚJÜ›‘)qãæí½™ÖoØ*Ãòó ¿ôÚÒóáçf‹î¦¾=;ˬûï¼ÚaÀ¿«ÖJϦ-f¶lÝ!qÃ&ÓþgÍF‰ÛwZ¿–Äî];J¬Y³†Äܼ<‰ ññ™@@ Èc …g�}@@ r è÷‡ª]¡U3vµ*«Öc­\Ï{[Q ²éÌLsîN_9eõ}›lÖŠzNÙ. € € € €T�0Íf-Ûgï[ÞèKo|"«}ëå‡Êvå²¶3ûŸ qÄ¥g»\slL¬ËþÉ/¼+ý%%ff×cÚKìvì‘ì%±QÃSlõX##¥É„ €!*`½Gjˆî"»… €!&ß4Q�TkÙ‡C-Ú{¡UÊݱ¾fôUT»ví29²YË„‘• € € € € €@ø TÁlV­.ºví&ÏjÚS™´ÈV›uÅÊ5F¶hÑDæVK4U|�4“Tk¤Îšý£,~\Sµo¯î�¿Xâ�¼&Ñ:=ÿÚLyøä„ëí�_|·PÚí�öÆ»/?(íU{å4@IDATäd×wF;ÿì¾2wÀ©=íãi €ÁÐ;6¦§§Ë&š41ïŸáðWôày²fT@³3Ð@�P(°Ýèá§õf¿>ÿ×Äù›MÜšebZ¶‰õª™ØÈÜ!âDóÁ1Ø\fÑ»…‰±$½&Š@8|ÈÏÏ;~ãÊ ( Vª¯}•ÕáòÁ^V’¬@@@@ÂT $²Yóó „ûÎÝ›5I-õ©Ø¸y»ŒI­_Wb\œceÒ={2¤ÿú»ž*u=:`þâ<Œ|õ™{dîÜ_ÿ�øîÇsì#o`Š´;´5’¾lè {AA¡´·íH“8oÑJ‰ l믖'íF©õ$Z§Sºw’‡±±æ‰h�RGâ¿«7ZHûœA'I}ùýú0>Þ¬ÙÝôè³Óe–Fwc¬ý#. G\z޵“6 à¥À�?šÌýgŸ}VâàÁƒ%ÞtÓM^.Ë0@B_ Øvçƒ�V˜=½÷ךK8ÜNÛö™Yo3í)拈V¶p“Ì…gCÍoÜ.Á(0!€¾˜³Iñññ¾,ÄXh6k^^^Š�ÍZ†˜¬ @@@@ÂQ $²Yÿ]½Aì|üU‰�Œ35IÛ¶jêòÙXm«¸zσ&“tÜ�£%Õ±�ÃÈF ëKÏŸ¿èпv�©Ö:úæG$sd ‰9¹¦ŠÇ¿ÿm‘øîËã%6jØ@¢óT½z¢töè~¬Ä»Ç›­�¸h ÄcŽ:Bâ¶í;%îÚ“)qØÕ÷KÜ™–!±}ëÆkŽhòóoI¬YÓV–IZ§äIÒŒ·åäÖ­SKÚII»Î<ðï§_þ&-�³äáK“ï’Ø®M çYÒsùE§K<ɶç.Ø;_{ÛÔ„eBüÐ{zþïÿ³/Þ³gO{› €•] Ó–ìr‰í+óìÕ��æÀ^ô‰YÏ»ËLœ~މɤd&@À+ý„Ú¬^a1ÈI@_9ú*ršégÙ¬~± € € € €  !‘ͪ©wÜ0LöIsE'�½NÚíÛ6·?OkÖn–ö½¾ ñæk/‘èœÇjì²ñÅW?Iÿi}ºJLˆ3õL ‹ÌÍA605^¿üæg‰£ÜÔ?Mm�"s5ÆÅ´æÍI\ú·¹¥èÓgKÔóß—œ×_Ú™¦Óêÿ6JÔÕ»LÑ&Í]•†OÓ��'ÉøQ#Îs¹”»*$%¶ºQ©¶£kݪ™Ëe­�5kT·>¤�@•ПÙ?þøCŽtΜ9W®4õ”õ>ƒ�:™ºÉ'žx¢Ä>}úHŒŽŽ–èÍ´téRöÙgŸI\²d‰ÄØØX‰Ýºu“xÞyæg¹E‹=Oiii2@÷í·ßLVûÆ�æ]¥eË–�8ÂdÓŸ}öÙ6l(Ñó”››+æÎ�+Q+¨®Y³FÚµj™<ú:Hìßß¼ƒ}ôÑ}�ô¨×®]+ Ö­kÞWý[�¯Ûe< €ÁØn¾ÚGœúމ+/<3�N_¬2+8ñ nb¾˜&@ �²ÍC,ecÌ®¢eû*"›µŠ¾L8,@@@@(/��ÈfÕƒ=¡›É»óF“ÓzïÄ©5§U3Èî~ðyéÑ<ÖžÝ�‘¶÷Óú &ö³oæK|ñÉ;$~ýݯöÅÏ9ëTißvÿsOï²Ä&�Sís=7âl5UO:ÁìùŠÖI|†YÛ糿·/¨Y¥[¶ï–žZNµYíÃ{Ò3¤'k_¶½?3k¿½}XÃÖŸR¯ŽtFG:ožŸ_ =šCwØx öYYYbðÌ3ÏHüé§Ÿ$FFFJlÓ¦�Ä¢¢"‰Ú¯ñÛo¿•ž &HLHH�ènúâ‹/dÖÓO?mФIik&é—_~)m]Û#�˜:Ñ]ºt±�´6æÍ›'{ì1‰ûö™Í9mÚ´©´5ëvÙ²eÒþüóÏ%Þÿý{ôè!ÑyÚ°aƒt>üðÃÿûï?‰šߺukik†ìºuæL÷ðÒK/•öÈ‘#%z3˰7ß|Ó>x÷nóŽwúé¦6tÙNš#œ””T¶«­bkÓ×̯¿šO:}U$''xŒú:ÙµË$quíÚÕïµýþûïöe�?þx{› šyæKAĹšŒ ;×Ü 5--]âk7ÚûÝ52lY± Së¹@?U@@«®h&éÂ… åˆN=Õüõ磌®’X¯Þ¡×¿f}>ôÐCÒ¿xñb‰ü±ÄË.»L¢ó¤uN5�Uscu+Z�U·ûÕW_É‚“'O–8~üx‰o¿ý¶DÍT•†LË—/—8vìX‰‰‰‰5‹¶{÷îÒÖ÷%­;c†ygÓRÍ{�6mšôÔ©sè}&33Szn½õV‰{÷î•8zôh‰ZÑUׯ¹¨óç›|ÿ‰'Jœ>}ºÄÎ�;Kt—o+³ì“.«µYëׯ/ýº¬}€CCm5¶kgÞ�½©T«+ñæ�Ùas!ò0=ݼk^³»”’’" ÆÄ˜î‚s½BF†¹îÁyÒÏ>­“[£F о}{çaÒ£k³¾]“NÍPþ÷_S‘\ë;�Ôµ¹«®Ç¾hÑ"YP«;¯�@ ÔîùÞìÑüÍå·_º-Ýîäå·]¶„ úÛ¶›kË^›n®’Œ²]‘Ùý8s.«i“Ò¯ÉÞºÍ,›µÏÍuÒ2¯´)ÙvGŸ†©æ·&wd³º“¡@@@@ðJÀ$Å„à¤Y«¶Sóöñc?ßýàsYjíúmïºe¤‡5Œq®Ì½ê¦I_ëÓ9Ôa|qq‰ôš*„O<ÿ®Ä={M…Ç{o±ÝTZ®¦¬,SWQ§ºujlºøWóÝdÛ�½VFÜþÀ‰S»Mâ3¿–ئeS‰ClõdŸÉdœõêÙM¢5�5//_zÒö˜}{ñÍÏ$JeZ[,=Ѷyéƒ�@¥Ð<Ó«¯¾ZŽ mÛ¶‡ &Q³ð¬‡¥uK¯¿þzé¼óÎ;%jÞèСæ�!..Î:XÚ~h+Ûfë½òÊ+åßãŽ;Î>F·{ÆgH�f}Ι3GÚ_m~®/ºè"ûÈ:HûòË/—¨Z1Ö>@ºuÍ«ýóÏ?¥Gש•dÏ=×¼›é¤9oºé&y¨ù�š½{p¾ùWëøœtÒIÒÖª¬z¤3gΔÏÙ¬iii2Fós¥!“V‰íر£>t?úè#é×lÖAƒIû¬³Îr9²*uþñÇr8ÿüó�ߥ¯ }N5·Ôúªs·ZÍÅÖè<¦Y³fÒ9dÈçY.{ôýõ×]ÎÕçÝù5¦ƒµ¦pa¡¹¶ã—_~±G—«rèÔ¬pwÕ‡ó°Ì4/þÕW_•5ò‰ùޤYð”öu×]'Q³­¥Q!“î¡fâë;¡þ¬õîÝ[öG¯Wðü¾Tþ»½iÓ&Ùè±Ç+Q®5½ü÷D·¨ŸJýû÷÷°Ï?ÿ¼ÌÕOFÂ:K_{úî§ÕºÕ­_¿~²]}®›7/›o³kö˜Cyþ÷Òè‘.fÌÝg–>RGÜó±ù÷ÑžÆO±mwŒí«DkO¿@xZ‰Ëyúyôâ‹/Ê\½E+eë·£Š}§Õ«1ôú!ý‰ÖjãúmA÷P¯Òpyheعy³I`þá‡$êõCZ¿~çÎ�ÒãîO?ãô{”EµjÕd¼~{¼ð ¥­ß ¥àäßú·”»êß¶´²¼~â,X°@6­á‡7¿qŸvÚiËÊÐÝqéwfݺ~W×+Æn»ÍüV®Ñݲô#<�]iæcéñçÞ“xÔæ“®víd‰O6×GÞ}³¹æ²E³FÝMs~Z(³¾�ûî”ÚF?ó±tñùeŽR7]‰�ÍZ‰ž,v@@@@BQ D³Y•Ê¿ Ö“rñéçßJ|k†‰#.4e�vîÜm�i{L�¢¢b‰+V®‘¨Ó™N”Ƴ~”mÎA�¸ÄäøÌ_hÎ÷¿3ãK‰{³²%éÙCâùCÌßÓÖo0ít7Õ¨‘$³n½ÖdÀíÛ¿_b|¼cœ.;åõO¥e¶;rØ9Úi�œmò nº÷‰_|û›Äø¸X‰—^èø§ó;Ó¤_§�ßzDuj×:ØáößwÞ7¯uj×t;‚TÍs¹âŠ+J= kö“fšïرC–jÚÔä•ë¤yš?¥=ž3Azõê%ì٬ÖìÍ-ÕÛpó�þ%_·¥Ù¬ëÖ­s9ö”SNqÙïÜ©yUš…ñ÷ßË=jç¬ý;¿æ±jÕWÍ®µŠ9¯?œ{ 0ŸD�¦N�*�úÚðÕpäÈ‘²¬fx9¯Ù¹GëÛþßÿ™Ï5ÍNµŽÑLœ¼4‰w.¦¨HÓyVWm—œEÌÙ`Úž§ókJ„îÃ+Ž_ö=/êv®^£¹«ZM~Ô¨Q2Z«fëu-šÁw '¸]K0g<÷Üs²úgŸ}V¢Ö¦×÷½ŠBßmôù ö»Ío¼!û0nÜ8Ÿ÷ᇖñú¤?ãú ¨ïœú}éšk®ñi�îû·‡þ-ån<÷ûº-Í`Õœô{î¹GV>iÒ$‰š­×Oè³o½rËó>ø7wûvó#íý÷gÿ¶ÂRx/°qó6üôÔ%6nXGⵣΗk»gƒ4dš4ù‰·�1YóíÛ¶�è< ¿Ø|œhtžûìKæ[S“†)Ï;»Ÿóz¼ ›ÕK(†!€ € € € €®b\wWæÞ¿› �§™ÜÌî0ÙjS_ÿX¢f¶JÃaš¿øP¥¼š5Lõ]j’­ÂEËæ�¥g݆-�lßBâƒ÷š¿@6jØ@¢NÎÙ¬'÷0õR»ÛIbõj‰ÏØGâÃï�øÐý×JìxD‰M§Jü⫹G]v†Ä Î9]bl¬ãSsT§öÒfó·åo~Z$ñíÇKlP¿žDëôç’ò°]+S•ÛÞôÅÛ¾Ú?ö…i/Úo¢7Ó,Û¯)/š_"¢#½YÂÓÍÔŸS­Ûn½2fÙ²e²°Ö½-ÿlVý,»õÖ[eœ3ûô1¿Iéõ³fÍ’¶æ­K#HÓ< kÖ8eÊißpà ¶¥ßÇ�/c>ÿüs‰Ö÷Cý~u÷ÝwK¿Vä¯U«ôk e°‡É×=ÔUù·”‡Ýð0Ë×méý ôÓDŸq]¹¾Oê·eÍ/>çœsd–óµVvƧYzÕš~o ä[ºOe0z¥Ú/óÿOúßxïk‰Ú4‘xýè¡ã-w vá éÑiâS&§õô>]%9³·Ä¤êæ—7S‰í^DÞŒdŒg²Y=û0@@@@(EÀ1e²”á•av÷ãM^Õ+Ϙ¿¶laê'ö>ÙöGdËÎ?7Õœã/´Õf½õ“�á<µni–mÒØd@hžZLL´ó0éÑZ«éæÓ¹¹ykÛ*œjÔE22³¤±{ï>‰ÉÉI.Ç$&ÄK¿æ±ê_Ïä¡Lyùùÿük¹D­²±r•É6zõMs·ß[®.Qsfóó ¤ýÅ׿Jì{J7‰L ˆ€ÖfÒŒN]�fÛY×iÍ!Õª¯žÿº^³fMYÜš!«kð/›õ¿ÿþ³ïLÛ¶mímÿš‹¡ËjÖ­5ëPû·l1ÙýZÙSsÇ4[áÇ”~oî”­wœ×µi΂fõj�»xÜqÇÉ,�îÆT«f²qwîJ—xÏ„©'Ýo®?¨Qñ֧tÊ´?Ûä±ÞÿÐK‹ŠM¼7µ³eVHMZ3Q+Nꎵk×Îa5ç´gÏžÒß¾½¹ÂûI3­9õ××›ÖÁÔzsZ3>Þ|~½÷Þ{­Ù‚ZáW—ÒüV­DiÝëOЮ]»d–sθæT:¿­ë¡ Ígtwgyk�]̓Æ>x³Î£�>Úå0ëkF+_»Vn�šuûí·Ëµn£æª„B6«þ$jæo¨å±ê¤ù¿ZÍܚǪs5[ÐzMF Oëb[vê®ì@Öa–íl» âÊ^¦ý‡íãzÜRÓö~Ò}Ðý9Þ\ŠÐgË~ÒW�ów­¾­5èÚŒ_ [¿?hV£u5úIsêß~ûm™ìlVëÖ½ië÷©Ÿ¼Ö¥z÷î-wîÜ)QëDŸyæ™Ö´EÀÙÍÊ¢×O¼üòËÒ©ïW�g[×O�ÐX·~³ìÌÛ3ÌU8«×m—xVsF«V­GÝü¸Dçé´Þ]¤sÔ¥§Kœö�¹nfþ¢¯9Db§m$zžrrÍy'çëª=/Å\g²Y�MèA@@@@|¨‚Ù¬ú·YÍcõAÂihÓ&&�U'wy¬:·]›Ò¨]ÓdK z³vºŒ}O2uô¦Öw9×Ú¹òŸCjwŽ{Af5H1p×\q®ÄI˜Ú@÷<øœÄQ7L�øô¤Û$þø³©“¸eûn‰§õ3LL ˆ€5·BóX�<žnr'uòæïêú•’’"‹lÛ¶M¢5›ïÀмøGsÞ­9P-Z´ðb9OCþý÷_ûlç\�¥[yé%“ªy¾šŸ»|¹É¸ÿòË/íkð¦±t©IìÑèy|ƒ d€çlVÍëx¬É`½o¢ÙÃ{m™ªÎ9­šÇªc4�ÕyŒçýñ~îž={d°f}º[JŸM¹y³ù ¶»I¬9zï¼c®Ï°¾­Ë~óÍ7òP£µ¿oß¾ò°S§NÖN‡öâÅ‹¥Gëåiž©Vì}ñÅ¥_3Xõ'B3Ë´zšV(ÖUi¶£nK³¨´êŸÃ†ì¿øâ {ÛÚ:t¨|ß•ò°yÓFÖNÚv²Yí4@@@@@ª`6«7 õlw‘ÖÊDÞŒ÷<&)Éä±¾6e¼Ä]i&kÉZÉQÊ+±~J]Û#ÇиQ}éªSÇä«ê¤ínÇ´•‡—œoêkÕÉüC³ tÌóOÜ-�ßü)±Aýz›75¸wÜp‰ÄºujIdBÿ´"ó|`_üüóÏ··­ Í@Ôk.†uŒs[+ i6«»©u»ú*Õmiµ>Í%4ÈÜÏÔšC¤?/ε/õžïšK¸jÕ*YJsZ¯¹Ædë¤ÕZ§OŸ.µ¬÷?G×Á¿#ðÓO?Ù7¬Uóì+¤¡?eÖw}åûí·²?Íš5«�½Ò�êÏõرcå¡î�çwÑòßU­-®ï§�všìÀ�!C$êç‚V‚Ö=ïß¿9ïžÖ´ÕÏ;ͺÕOä™3gÚ÷äôÓÍ·eÍÖºáöY~4¶š„¡2˜mV²Ù\fñâ:ý›¶dú·œãRúüj•Û‘#GÊlÍøÖ\KUö¹²ìƒ~OþôÓOe‡µ&¯ó÷�Êr,ìg0ôú�ÁXù¯³™í¬ÎS¯—M'ØîߣG§÷øÑèn¯td“Ææ*À ÷^%Q^ô.>÷ÞlÎ9O»wï•ΗßùÒ>릫Α¶þVeï´7RêÖ–vU2/Ûc!›ÕþR¡� € € € €ø#¦Ù¬— -û{;êÙ54y©¾NCÎêç°HjS·ñ± ·JŒŒt˜yàabb‚´úõéaŸÝ£{{›"ðóÏ?Ëâÿüó�D½Ëù€\®Ð¿¿¨[ÿbæ|·_—²wæççK[ﵪ�—_~¹44sP{|�šù¨•Îô~¸¾Þ›Þ×-{¼þõõ¡ûMÖä}™Z¢÷OzÙa£�=ü믿d¼¾f¬ jÖgŸ>}¤S£u®µ­ùDš/Ö±cGë,/ÛZ‘Pë¥ê"úºr×ïnµz5†®G3‰t¤Ö„ÕükÍ<µ¾†õJ ­Iwê©§º[y™ôkýVkÝd]í•Wš*Q�ü”Éî…ÉJ4ëþûï—ã�8q¢Dë«¥¢´:ç×_-; ucõ�Msôôê͘+Ï=ÌËË“ÍÝsÏ=o¸ÁÔÖï×Ïñ[_yî�»mi¦ü°aÃd€õSI?Ö¬Y#ýãÆ�“XþÙ¬™™‡’9URë´êç5ÓíÆo”}»õVóÍù“O>‘XVuZeU~L52 5ªc⇠L …I?­ž}öYÙ™wß}Wâ¦M›$>úè£öÝÓŸ­Goï,‡FµjÕd+šÇzÕU&ËZéû²Ë.“žûî»O¢æ,k]xyX‰&wW~T¢C¨�]ÕükýÜÑÏú Ù 6Š@9 hë¸G^‘í®Ý¸Ó§­·jfÎJ�½Ã|7޲¥VêÕÕÚ·r¹žŸ3÷cˆ��–˜`»;7×ü¾ÙíX~+q¹‰°ê$›5¬žn@@@@Ê^ L³YË28kt—Çœ­±V0ZkUó)TDï°œ˜h»U°’µ¾ž5ãÆiàaiiiöÇÖ5Ø;=4fÍš%sõž¶Mš4‘v ¹QZÍPï/¬9‰šÍäa*Ñ,ÍT}øþkeŸ5§Uw^{ÏcÕµiýGÍ÷´â8WPµÎ-Û¶VÉ´ÖÊÔõÿý÷ÒÐèÍõ~ÓIIIöÁšßª¹lšŸ«? 6l�1šõæ®�}%eØèÑ£‡¬­k×®ëÔÊw�<,s½¸VUÖ ˜×]g²ÂCaÒŸ8­+ªûsÁHãœsL}±»ï6í5ÏQç–OÔŒÚo¾ùF6§wuŸ;w®}Óëׯ—¶ªêÏoË–-¥§¢²ƒ­y¬º“šªŸ2·ß~»tj¥Ôò|³~Jj¦õSOsØõ“Zߣ4ë-�÷¥F5ôèý�=,¥€—oó=ºdãä@× ßOôxË-·Èê´Æ¥®W¯‰1b„<ÔÙ³gÏ–vùgkmeýYÐO}~õÛÎøñãe¯ºwï.Ñz¿ yXá“fÓÿòË/.÷$77Wúµ¹VÂu9ŒNÍ[¿ë®»¤_³×ÕÙa¨Â—_¬2ÑšÓªUVy¬ÖfËý´f€–?ÝÉ'Ÿ,µVÔÕ ªz×fÍ·Õ½š1c†‡ÝÓlÖ5¥réÏ…VžµÞ¿[ó[µ6±»¬1½/¹Ö8¶nô¹çž³>´·§M›fo;7.¹äé¬W¯žó,zÊA@k7ß{ï½²-ÍÇÔŒ³Ð¹Ó·3‚V{<å”Sd–V’ÕW¸ö;�F�5wUsÝmE+8¿ÿþû2 ¢²YÝí›æâ©›Ÿ8îÖìMr²IæÔêÏúÉå¼”õ]KïAï<ÆûžÖæÊM�Z|ÁæCmÿZ­jù·Ü¡¥V®\)ôÝø¤“N:4ÃÖJMM•¯½Ö\ù¡ÙßšIj}ÏwX$¨õ5fýDÓë*æÌ™#Ûõü­,¨;æaåú9¨ÂÎßÖ×mãÆ–‡‡5†÷¬?ÿüS4ÿúÎ;ï”¶5ÿ:¼m8úðhÙÂ\¹èyÊÈÈ’S^›)±w�£$ßÍDo¦Ùߘü½™û%žvªÉ�Mˆ�—¨Ù¬³fÿ(í¡ç¸¾C‰Ìbr)@6«K:@@@@@oÈfõVŠq P…Š‹‹åèôÞµz^½õ˜1c¤ß¹V�•ÂZŸN«ìéÚ4ËÏ:RÛšã yÚ£y:Î#­=ÿý÷Ÿ<œ0a‚½Sÿ¶ï_¦‰fúè=£u,k¶Ö4´o¨Ê4Ê6ƒ5ÔX´œsU8Í7ÔèÍ>kS§N¦“NZ5R_Ïî*kþýòË/%j­VP=òÈ#­ÚÒ£Õcõ¨•ø†ÉCo~Rœ—¢'p�œœY‰Ö6Õ,é/¾øBz:tèøÊ\ƒ^ û£÷"·V“ÔwÚ?þøC¶¢|å™Çª‡öæ›oJC£öX£^‘ õF×®]k�Uní]»vɶôgpèСҶ~~iMÏ�?þXú/¼ðB‰åŸÍ*•I+Š>ÿüóÒÖ¼Kë{Åßÿ-ýuëÖ•è.¿^fy9umd¦T3qW¶‰¾N mù§%%f¹…{}]úÐøúÕM[÷çP¯ï-ëw•;vÈ :vìè°}·×N«­Ã° >Ԭϔ”ÙŠõgY_Ÿ¿ýö›ô{¾î!¨»çaå}ûöµÏ�7ož´µR°vê!õë×—‡ÎÙÄöiˆ€^¹uî¹çJ[ßs|ðAi[ß—€BÐß:_÷sy˜+ñâóOóGóXg~iÞ¯®»Âü&X»V²}Ùk®8[Úž|GbÍdsφÓN5wG`òF€lVo”ƒ € € € €¸ ›Õ- 3@ ´Rê;ÔižæÂŒ;Vz¼É{Ò{žêo5¯jãÆ�²¬» §+V¬°Ãjõ=kމ}–½±eËiëþh•L­NeÍ›°.µ¡Yi�>ú¨ŒÔ Ù.]ºHûꫯ–è9oWW®•a?üðC}è2jΑËY�Ï<óŒôht˜åáá[o½%sõ¾Ã†…ɬóÎ;OŽtñâÅ—,Y"ñÔSO•¨™†EEEÒÖj�ú*ÕgÜZ­UȤ÷æÖ×°¾z5pÑ¢E2WÇ[s‹Ü½Z´®±f�X+Û6â"X3d52)dÖ‹. «4óý¦›n’mjÙÍ7ß,ííÛ·Küè£�öEk&zó¼;,è÷ÃÕ«W˲Z1vÖ¬YÒÖœh­ûÕW_IÏgŸ}&Q«:JƒÉA@ó@¯¿þzéÿôÓO%ê{ˆ~êû­æ?j}[‡ÅËí¡fÚê»ÙèÑ£e»Ã† “¨ï9ºoO?ý´ôþýÿìÝœ\e½ÿñ$»›²I6½‘^)  �@(¡·€QP½è *¢^½W/zÿX�+ WTŠ „¦jH @z©„„ôºÙÍÿ÷;_÷ìLfgvfgf?'¯×/Ï<§¿çÙ33çüÎsZún}bO�7¿î±¡C§(vËŸo}”ÓÚÐ%hzmƒ¶'³%h.Ý£sùå—Û˯~õ«õ½BG{Ý‹£šÿøÇ6V½µjÞüDõÿ«wyÈ�!¶Rõ�¿t©wm«~äþóŸ[Yû’»­Ò=áÝ!o¾ùfbuês\½êësV÷éÛ ôô×ô“ŸüÄæÒ~©ïû_üâV“ú[_bE) ™mafs¥ØŒ£2[—ŽÒŸüä'mÉê |„ VÖý úÆ®•öéÓÇ ‡~¸^6zÔ=:îmÚ´)±|}‡×öè[Щ§žšK�ü <>uš­tÆ[‹-þèŠ ,V¶kk1Ù°vÝõ—ÉS->÷â[/ú´g¿zÈ~ÃaøÐ�öòâÏžbñÿîxÄâÒe«,~âÔ£,vï–uæ¶”ÒÈf-Ý÷–=C@@@@�¼´ÔÕËl®X¶‰žD–—­e% P"ÊÊlÚ�ùg_6·Üb›q×]wYT~Á5×\cå†>åùg?û™Í¥‡/|á VÖSÑ­Pg¸êª«¬FWì•CªÜ�:“ÙKõ’©>X•cxöÙg[ýÅ_l±¡}Téj¼ú·Òó[÷Ûϯ[*ó¢Cïs'�á±Ç³É”5™Îôñi”E«8bÄ› Yæo|^ÕH¸¸ž8¿hÑ"Ûø‡z(ÙN¥¨WOˆzß5™>»ßxã {©v¢ì-evÄ3U•M£|½ûÊl=z´-AñÁ´²þ zõêeeõ‚§úÎ8ã « {ëÓ;8eÊ«ûV&£zÉL–ñj³$†5kÖXY=~^xá…VÎ>-±ð’)4Õw-ÓÒïµyîܹfžë\³øÛª¿/åÛj›•‡{ÔQžsqÑEY3fL|Æ&¯)„¾Y… ¼`ªLý]Ÿp 6Á%—\bQùzM‹¶víZÛ€n¸Á¢îAѯ=&NœhõéyÒÙ‹¾ª{ûªZT{î 6]á+›µç¯0cbÒŠ(æ�K½bh#¥ éÛ—ò¾ï¿ÿ~[²ú£×]êSÙyÞÇ_þ‡9sæØJo‰¾›©*cTŽŸøÄ'llc½¿ÉöN½$§Ó÷ý}÷Ýg Q/¢Zšþjôw¤±ú—í¹çžÛ(ÛŸÙf6W2¥Ôõ™­ë°Ã¼çÇiÓ<;/õðíoÛ&Pvsê)3«;$ô�=ÙÔÓ®2^“MS8õ…ðË+wú&~GÍݺ gÉ .±�ùï«ÿ`ñÓ“&X<ùøñ“ ³çú/‘_Þp�Å6Q/®~æ$+4zŸd³$ê_c¶•oºÍÅlÙæ·i|és§X?î‹¥1¨wò†žˆï»î÷"›5.C  € € € € вY€Å¤ ÐXM{MU¹¿ýíomw”Ó¡ì9õé6xðà vS¹Tê-N³«®ð«|êOJyª×Õç�zø W:þ|{©kõzÊó¤I“¬FùD Íc]·n�ÍûÃþТúàÓsäÕkXþ3ÕŸã�7ÞhÛ£~O;í4+—ö°eËÛAe%7tOõއ}ÑêYÌê#LÁ}ûöµÅ¦Ó6vìð«Ðo½õ–Eý%Ž7ÎÊÊwV﫪×óÇõ¡ìW›¬Î ¾_•-«Qêk5�-ÑôjŸêCóôÓO·Êæ–�P‡´Þ—M•ÍZïÆP‰@³øæã¾»ÿûb¾wú~`nq�'3 €Y 4í/¯¬6=�™›g6ëœy‹Íæ¥WgY<ïÏ--+K•C¹mÛv›æ±'_°xüÑþÓ¾};‹é›6ûo™§Ÿóg6L8â ‹;´OöŸ’lÖƒØ<@@@@h^d³6¯÷›½E @šêšª²J¯¾újsP£Ñ3mõ”se�†Ï�£]yå•V©çœ†cµL嫪^½dnݺÕ^.[¶Ì¢²Õ—«úÄ — Þñ¾õ­oY¥®ªiì‘Gi-GÏo {à —p衇ÚKõE¨}Qï®Z²¦Ôz•u¨¥…ÙˆáÒô¤ék¯½6¬Ì²Ü<³Y³Dcöf.@6k3oì~ l¯ñ•}»ÇiþÐûœ‡õ÷U<õ9�mÊ<2 €Ù4Õ/¯l¶9ýyß{ï=›X¿YÒŸ‹)tßá€ÂÊ ÊôÍš³ € € € € €uÊëVð(]e³†y¬ÚW=U1�½W”ñ)O:ɟب^2Õ뫞᫠ÖSNñ~sÎ:ë,‹ƒ ²fÏžm•a«¦yî¹çâ×[3räÈD½žæ±j”¶*1YŠ‚ž;ŸbF!€ PÂÊ'½ÿßÅcïðøös1ìÓתu‘Çš a–‰¥'вeKÛ©ÚÚZ‹é? ôØ£ÌÔrÔŠ2[B|®T½äƧ¦@@@@@ ŽÙ¬u@x‰¥, +œS§NÍéNî»ï¾¶|ņ®è´ÓN³Y:o|úáÇ[e®÷7¾^j@(%�Þ|o¦]äñ¼¿z|x®ÇÆ&Žð%ýq’Ǫ6@ÒÐ]ƒd³¦cÅ4qµµ¢øØÌjÈfÍÌ�¹@@@@@� �ÍJS@@ Z@ýJ7n¿Q½Ãl) <ÓÏõ�»÷m�ß‹n�Y¸ÖË †tñ9®:ÖãÙûxôþ@�ÆÐ÷‡Æ[^!.IyˆÛ·o·�++++ÄMd› X`çÎ�¶umÚ4æ�$d³ðΦ!€ € € € €@1´\¼x±mgïÞ½3ÞÚÆ=ï›ñf0#‘€®7ѳ©�(°páB[Ú{ï½gqðàÁ؈ËgQ”ž€25ÈÑ(½w–=*v�j´u‹g{|0ê­uÚR//ßèqõ�Ý+=îÑÑã¡ý<žõÄzÔ /W�ôâ  ��šš[®òõr²‚Xè–-~¨]³f�ÅŠŠ ‹|_*€·¥6AÕÕÕ¶­Ýºu³XY}`g±í+W®´¹ù`Ï‚�Y@@@@@ëˆlVšä_€lÖü›³F(^õÊÚºuëâݶ@ò,°cÇ[ci÷Ъ'ů[·ÎötÆ Û·oŸggVWŒ›7o¶Í®ªª²Ø¹sg‹­Ze›‡J6k1¶¶@@@@ N ¼à¶ˆ B@”‡¢>¤èq,€¡ˆ €õè;Ciç±j·•�¨^5µ×ÊRlÛ¶­MÀ·¦zG3®R Ù¶m›(ëY-'û<Ö5ÛœØpY”@@@@@�f(@6k3|ÓÙe@(>=)Xý´6îU÷â³`‹@@ >õUªï õ�/Í:å®jß•ÁªœVe/ê[SKS�½úWµÅ0¿[ý±ªÍ(þë|Ù¾"›5[AæG@@@@�f.@6k3oì> €“@uuµmny¹…£Ç±bzçØV@r) |½æ–ÇŠªŸM};Ò7%õÂ)“íÛ·ÛÄ꯶9ôZÊ4·²îýRTKhݺµ!(wµM›6VVÌ… Ù¬¹Pe™ € € € € ÐŒÈfmFo6»Š €¥! ¼ å­(kC=Žéº}iì#{� €É”�ïw2Ùôͧ^YжË*‡ýr’ÇÚ|ZB˜ÓªoËj¹~Â٬ͧ�±§ € € € € �²YsÂÊB@@�\ (#£9÷–ka–� €Å( ŒÅÜõ¿YŒ&ls~ÈfÍ�3kA@@@@�’à4kɾµì € € € €äG€Ó¬ùqf- € € € € P²œf-Ù·–C@@@@�üpš5?ά@@@@JV€Ó¬%ûÖ²c € € € € �N³æÇ™µ € € € € €@É ”—ìž5tÇÖmö9nxÂãàž?s˜G@@@@@ ¥Ù¬)y‰ € € € €ìN ø³YwE»X½Óÿ[±Îcm­ÇÔCËèür÷>U› �×Nñ¸p•ÇU<’Íê  € € € € °²YwÄh@@@@@ µ@1g³îˆ2Xÿø‚ïáßg{¬I#�Õ§ûh(‹Î2Ÿy°¿~oµÇ–Zœ2:ú¯iÂÌ7}_6nò¾b?ô ‹Û·ï°øü‹Ó-:ö‹íÚ¶±È€ € € € €… @6k!¼ l € € € €±@qf³ª?Ö;ŸwøgßÉœô@Ÿwì0�›¶yÜây£-ÆE5^j‚á¶?>hk¹×`‹Êf}eú›VþÙuwZ¼ÿŽý-2 € € € € €@á�ÍZ8ï[‚ € € € €E)PœÙ¬Û¢œSõÇš{¿®>ßYQ¯¬�Úy¹{G�{÷õØ¡­Ç$Ãïn½×Æüù¯O%¿ûê“�ñõ~û²‹êL:gîB«™ùö"‹ß¸ôüÄØ‡{ÎÊÇŒ÷cÛWF[›G@@@@šZ€lÖ¦~X? € € € €¹@±e³ªWÖå뜽V/øTEÙ ç�÷ÙzTy\¶ÖãÝ/züîé[¥:û|±‡Ù$°�Oî¸ëoV׺u…ÅO�yBl¼WtªŠ2gcã&?ò´Õ�;h/‹úïaqÉÒ_~}®E Sžyí£b=ÿÿïÿ|Ýj÷ß×—À€ € € € €ùHu>1?[ÀZ@@@@@�¢(¶lÖQëŽêLÐË£sÊçŒõy÷ð¸5ZÎõ�{yÇÎ(jÉÊ“mé5±aà€¾V§Ùâ‘Çÿa••í¼w×G�ŒOPoÍK¯Ì´úÇžzÕâe_>ÛbMM­Åo¹Çâác}9ì»§Å_ß|¿Åëþ-‹­bY·ýöèeõ  € € € € �O²Yó©Íº@@@@@ Š.›5z2ꔵũøÌ£z,‹Î/ßð¨—Woô¨!³%4wÿ/_ñ¾Íõã«oMÌ«ÕÉ?i5oÍy×â-×ÿ§Åwß[ž˜f¯C­ÜªUýù¶‰É( € € € € €@ÈfÍ2«@@@@@�R(ÎlÖðQBg×^÷á&�ñŒÔC<÷³Å„},Xø®íA¼oÖþýÜ¡uëÖE¾l>™ÔÔz—ÌÛwz†{u­Ç¨¢Å®]êª9“e2 € € €£@Ë–~¸n¯h噦mÊ=–åìîp²Y‹±�°Í € € € € P@Å™ÍZ;;ü§µS¥Çƒ{¬jçQIl¿~ÜË룜V/%âKN>mŽùÒ7VïÚÿðÛZ}¿¾Qno½SP‰@i èO|ËŽ�¶[Êc-­ýco@@@@ ÝÛZ�8¨©õ»Û·E÷¸+§µ²µŸmܧÅÎWf²Ù̃ € € € €4_�âÌfíÕÉß1õ¤ Îÿï)¯ÿæ)÷ìãñæg<.Zå1õ s\¹®^û¯CY”°Ú½£×vSìàe-ÙKõ �;UY­b=£³®>´¿-£kg_K|¨¬lg•cöE ÍJ€<Öfõv³³ € € €äT@ç*[—e¹²Y³dv@@@@hî-/^l½{÷ÎX¢M›6ϛՌÊT­�zbUkõN_`² Öpeê}µ"JæUÏ ÊcMÒ+k8+eÈ^`ûöí/dý¶j›W=´f¼fD@@@L@½²vj[‘±ÆÊ•+m^²Y3dF@@@@@ÀгoV½wÊ<-‹Î«ó„ŠlûP Q €@á „Ý/þÖ²… € € € PÈ�už�lÖB~—Ù6@@@@(�bÎf-^6_`×®t:`nüõ²D@@@(=�Æ:Ï@6kéµ ö@@@@ò*ÀiÖ¼r³2@@@@(=N³–Þ{Ê!€ € € € €@^8ÍšWnV† € € € €¥'ÀiÖÒ{OÙ#@@@@È«§YóÊÍÊ@@@@@ ô8ÍZzï){„ € € € €yà4k^¹Y € € € €”ž§YKï=e�@@@@@ ¯œfÍ+7+C@@@@�Òà4ké½§ì € € € €äU€Ó¬yåfe € € € € Pzœf-½÷”=B@@@@�¼ pš5¯Ü¬ @@@@JO€Ó¬¥÷ž²G € € € € �WN³æ•›•!€ € € € €@é pšµôÞSö@@@@ò*ÀiÖ¼r³2@@@@(=N³–Þ{Ê!€ € € € €@^8ÍšWnV† € € € €¥'ÀiÖÒ{OÙ#@@@@È«§žR/@IDATYóÊÍÊ@@@@@ ô8ÍZzï){„ € € € €yà4k^¹Y € € € €”ž§YKï=e�@@@@@ ¯œfÍ+7+C@@@@�Òà4ké½§ì € € € €äU€Ó¬yåfe € € € € Pzœf-½÷”=B@@@@�¼ pš5¯Ü¬ @@@@JO€Ó¬¥÷ž²G € € € € �WN³æ•›•!€ € € € €@é pšµôÞSö@@@@ò*ÀiÖ¼r³2@@@@(=N³–Þ{Ê!€ € € € €@^8ÍšWnV† € € € €¥'ÀiÖÒ{OÙ#@@@@È«§YóÊÍÊ@@@@@ ô8ÍZzï){„ € € € €y(ÏëÚX €@L ºÆ«f/÷ò^}üEEù.¯b@ �š�;mî¥K޳طÿ‹åå|ègʬ‘튆� ÚU.TY&íŠ6� ÚU.TYfÓþ\öa™½Ÿç¿Î9d»ÅV-yO2 ›5s;æD@@@@L€Ä–6ƒµzá†_z<Ôãyyd@r-°a‹_ñ:ñ�v'ŸºÍâÁCª->2³µÅ/>ׯbúíü ä‰ûî¨3ËÆ­~QòÍ¥™ö‡öôLÛ^�jë,™—…)°eËfÛ°»þp«Å³Î=Ïâ°=÷²8ý•—,>ñÈÃÓN˜xºM|ÀA§? S–¤íª$ßÖ&ß)ÚU“¿%¹¹nW+—/7· Ö7Š^§Î�m9½z÷i”¥±�Ü äº]ånËYr! äç÷`2�5›üwâ7_ößžC{øo=ýM6=õ©ÈfMíÃX@@@@@`7™§5ífÁù½+êÀ°:JÛZá[ÔD½¦^«èôr÷>U›¶¯ý™Ç…ó<®Zé‘lVW`@�Ü tëè× Ïëë¯Çß©°^?]釹NÛjQÃï_ôüÖÎm½þÌÑg­^ú�çÃ&Vmðß'‹yÉ&JYÿçã=Ó–lÖ”H4²cU'Ûšƒ‡XœõÆ ‹ÊfÕ&¶ïÐÁ gŸ÷9½´ø÷§¦ZlWYiq̸Cõ÷þñ‰2òÓ®Þ~ó £VÆPfæmÛúñpÔþ£3›�¹ò,�ëvµe³g÷ÿúêŸ6Ê~]üÕoØrºtíÚ(Kc!¹Èu»šùúk¶ñ3^}¹Qva̸Ãl9d³6 fN’ëvµ~Ý:Ûþ¯�n³ÍzO¾vÅ÷líÚù·;†BÈÏïÁd£úû&tò_—xÕsZÃ_£Éæ¢>™@tº1ÙHê@@@@@v'PÄÙ¬;¼ûÁ¼Õãsž‚“V«O÷ÑPæ�Skqæ¹ß[ä±eô<µS'y9�aêÓ/ØdC‡ °8h`?‹÷=0Åâ¦Í[,^p^º zå5ÏÚ2Ø—Ó­«÷Ë“zX±ò›àíÙó-Ξã›~þ¹§YìÔ©£E(F�¯åµöQŽj¸ý3¶ø�iüÝõ_…þåœLãÏÊ�Qƒ£¾VÃuÅË룵ï}‹g>2£Àñ'Ÿj›­Ì¾pû7oÚd/o»é7ae¢�·¯Å%Ë|,Ù¬†À€@ ¼0Ï{b�÷—úà©Þ ª†ƒÛG½äœž¢ªžñ¿ý®QŸ­Ÿ>$Jì�ê?wù52kîqöÛoÁä{ïªqÖ§ÏOÔt¬ª²òç/¾$QóÄ£[¹²½g.�?rB¢þ¶ÿ«?ã51…f"�ÏvõÙ/\ÜLTÙÍü´«òrÿ´¹ßþ€7�ü´«d˜ÕÕÕ6ŠÞ0“ùo}~ÚUëÖþ †½GùoüøðÆŒéVÙ{�¾“MŸ‹šBÈõïÁ-;ã'?ã±S�Ý{zÜ{”ÇitpúêkžgZQáçøGí=ÜgËh(+ó3Ý?ùϯY|ô ïÁç·¿ÿ«Å¡ƒû[üËdït¶ß^öïcqV”ñzÉ…Ÿ°ò§g±¼¼(ßDÛrØ{ïïfÊ~P{e±ÿ-ÿþ-�û ð«ˆ�Ïúøªct¨°:Ô‹´úÐ ë5–ˆ@¿þ áÜÏ]hqÁ¼¹gNÕâÀÁC¢òk5´T3úè•ýß2j^ÿZÿÏÑü×ÌhWͼäh÷iW9‚mæ‹mÚvU½Ãû7lÛÎ{Ød(%�¦mW’üàý•V¹ßèR‚mæû’ë߃›·yŽêçžö,é ³w–iZÔskU;ÿ=Ë �ÍjPF@@@@,°ûSÔ ^d.gP¯¬Ë—ú:j½SÓU�|–ó.òØÃ“D[,óÎN[Üõ�ßûo�­Rž|Ö6<ú¤?ArÛvï�â”s.óÙbãOùsãà Gy¿«ßýÖ¿%F)§uâI¬æ¨Ã¶Ø±ƒ÷±xÓµÿe1^|u–½ìÙ£›EòXCÊ£@—ö~ S¼¦? ôÜ~=°u¹÷q³c§_{|e³Ç¿ó3ãÃ�Þø8ã5>–šæ)С£ß”¡øÚK/ZyŸQûY¬¨ðÖ²s§rmÜà=‰_÷ó«,Ƈ×^𝤦™ ЮšyÈÑîÓ®rÛÌÛ´íjí‡kÌ¿KWÿ½ÆPJùlW›£GÇ,y÷Ý`ÍN¿×mó&¤Ì–è‘2ê+61�ô¯Wo¿ ¶GÏèdG8šrA äú÷`�*ÿ½¹ü« rïKs£RžP,Í]f¯@@@@@�Æ(²lVízÔÝMƒÔ…é9Ÿõõ¸u‹Ç_ÿÜãŽèaÝé,yÚK¯Ûô¯ÏZhñ'ÿá©;~œe6ù᧬fãfïiñüO�j1>tìP™¨Ü´ÉŸ¾³Æó×:wòç>+�uþ¿r¥z+$†­[½¯Ÿ%˼O–Ùs}Âa@?¿rUYIO@¡ e ]`ÝÏWýÓbïëù/Ÿð£‡ž×¸Õ“[œÙ˯@^w¶Ž>e|¨(ó9>yûÇÇ¢ø4aÍø»?> …õ”KI@ùóçζ�úÔg?ŸØµêÞ°öè×ßây~Ñbm­Ň²2ÿ’pãu×Ô5Ž/ó¾»þX§>û—'�v†-dÿÊ~Q,!G¹kW9Ú`[ùiW;£\°9o¿•�IYôCb¯}Ff0/³4•@~ÚU|ïV,_f•ãÆEM ä§]­]ó¡YM¾÷®zÅfÍð3Šñ Ž9ñd«$›5.SÈ5ùÿ=¸½ÚWn‹~ovªÔ¯ÏºBóWúïÓ¡½ü—‚žRw ^×'@6k}*Ô!€ € € € €i e6kf½²ž:ÉUã1JÐiqýÿóòêñá–?>b•Šáدù޽1lPXI \ॶ…£‹ˆ'>àÙè'v­µxø¿rØ3ºº8ã]?\O|¨þ\õéŸõ\×ô‡kÇz^|ŸN¾–Ôæí~�ó¢gølÊÔ el^æÎyÇÖ³+ú`»ë·ZYy ƒ†³rûžû¼hÁ|‹ùÓãÃÅ_ýF¼ÒjÔßÜÇWïØl*{öî�ÍìÌ›�ܵ«5 Pt#ûú•çÎò^Y¯‰òF�è5ïoòLÒnA_9Ÿëçõ?�äÇ" {üÚŸ)ßÐaÌ Véàž¾´ÔÃú¨ßØd³¦f*ȱ ²í:ï³øäc³8d˜ßc±a½gÙ´ïðqË4d˜Õ|ê³XÔð³ÿþÏ�Šõüß­G«=¬ÇQõŒ£ªÔr×®J]ŽýK%�ŸvÕ®�÷Kf‡¥Ú&Æ¿@~Ú•œÖF?D§>öˆ½Üw´ßïöŒÙºµç‹õ8ÈâÝwÜf1> îŸÑ …/�Ïvj¬‰n­¨ð¶Ô¡ãÇßâ4ÍÖ­þ;BC»JžÁð‘EñüŸÏ߃›·ùoÌ_½â÷SžÛ߆y¬2Û³�ÿZüò`ûãçü¾ÆzMU»Øé6«eøW²YÿÕƒW € € € € €@Š>›uÜá¾ÇÇ{Jh‹é/{üÛ•—:x¨—'}Ê£º.ynª—§>污C�]m–ë¯þ‹K—­°¸zÍÚ: ù ªÙå½Îž»°ÎX½4 ¯Ú¶õkeeþì¶OŸí½²ŽÜÛó‰ôëc‘š�@¿®~�pÍ&¿î5u�Çÿ<Á{ÀùÑ”¶OîW5ÔF—wúä ìF@9§7l°éV­ôϬ‰“βøà}Þ«×Þ£öµ¨Aý·Ö½Å}4†ÿ¨+@»ª+ÂëÆ ]5†"˨+�Ÿv¥Ã[oü�­¾G¯^�<ö¸º›½þäg>kÿ+ïUŸ¼ååžMvߟï¬wz* S ?í*¾ï¬zß*{õñsêç7œfÛÖ�ïuSæ~8–rá äó÷àC3='zîÏi½eœ÷ê›løÒþ›ô¯ôÞ~o{Þ™~í¸�ó¦“ÍE=Ù¬´@@@@@ +�¢ÌfU¬Úo%ßôè¯ÔCë¦M^žùšÇÏ\豇_Vl±p¾Ç;nñ˜ÍP^îù§¿¹ù‹¯Îœ—bQ/MÿE½co»á?­~@ÿ=êŒÝoÔžV³e«_1аd©çí R×¶móg¤®\µÚâ¢ÅK5™Åž=»Yl_YÿSÈ“Q@�‚xv¶g4œØ£ÖbǶž¶ú̇~%ìkQª5Që�ËüøsçoêöÇd• Ô+ çÒöêãŸ8mÛùgÄê(¢wïa¼¶ÖS£ß]´ÀâÕ?ù‘EÒ ]¥£Ä4  ]5TŒéÓÈu»êÖÝû+3î0‹ƒ‡³X^^ÿOìŠ ÿ¦×³Wo‹áPÕ‡5” _ ×í*.ð~tgÒШŸýøØ-[>Î1lÇ9�8P‘Ôäú÷ îžüÕtÏf½t¨ß19´—ÿH6ôêä¿L¿7ÆÏA]ö’Ïuì^~|Ùïã»-í%C²Yë€ð@@@@h˜@ý—Ú¶Œ&�úå|õ#ööx̉O÷®çZŒïqà�Ö{üu”Zº³ÚËÙ?ÿñ7ë]Èïnõ>ïÖ­ßhñÛ—]Tï4É*?Xý¡�úúw}CóËïYüÑU7Z\´d•Åp¸ñ¶í¥¢ê¯¾ò+V8pôÈp2Ê P›¢§=þáMÏq8$º¢¸`•g­iã)¬{÷õkŒ­Ë½¼ü«~l ‡_LñüÄ_Lõ¾ræmövztô«Ž l‹ž9ûÚË/Eßþý-¾¿Âï�PNk¿¬¬Ìšøs·ºÿ/6öч¼³óM½ÕUUu²È€@îÚÕÖ¨_¹™Ó£Û‘z¿è©ß•íÛ7êRYXc ä®]5æV²¬bÈO»ÚÝJ©¾VÎOu§c2?mg²±Ôš@~ÚU¸×;¶{ï™Ö­³¨žañ*oݺ9Q©oz‰—ŠB ׿k¢ˆWEOþØÝ%yá¡©ze Ñ>q€g³Þû¶ÿVýéÓm,Þòé�Ÿ†SR–Ù¬´@@@@@ +�¢Ìf-ó4¯þt«¿ìÜÅãAc=Vuö¸+:gÿëŸ{y½_þÙÍ�¤#�ÝÌÕX£ï¼ë![Tÿ=zZìTU•XìUÿõe+�³¢&,L:ï[áKÊ PDÛ«=ÿô¿þæ©{wñÖ¼µ~õkÎóÞ÷Í#½×›µQŽj•OòÏœV/µh¡yÇôiVmô¹Žæåv~¡±ÅŠu^Ó§stôŠÆß]ù/¯yQZÕÕ~ãÆýwÿÉ¢²Ö|ð�•Ÿ~bŠÅÑbqó&ÏQ­¬ôü¾°W¸ê~½zÈðá7¬÷›AöÜÛï“hÝÚ¯]ëùÈ]Ôº½fhN¹nWöädã|öÉÇu؈=m™d³6:l£,0×íªª“ÿ$ÈEßÓ—ÿàG¶ä²øÏ’Fqa!Ù äº]…ŸƒkVû'ì_£ÏÜì¶š¹ ] ×íª}ûF°pÁü:‚룜ÖÙo¿UgšÅ $jÍ÷%´lõqFÝÀÁƒ­¦];¾ÿ'� ¨�Ÿßƒ÷¼ìßäÿ´ÜO¥Ý|¤ç±îýöL¢M…§¿~'šëô¿ù=”“£Þ]Ï>$Ý|ØtÖRJÓ|ü·WJ{ž € € € € €y(ÊlÖ^}ÜG—gj£T-Å›®õúo~ßã^ž|Óâw¿õ¸°î!¯¬3èR´–\gT^Î�·ÈÖòÐãÞƒÞo®þ¶Å–žÒÁ€%.ðÚ"?¿e°>x�÷©Ôª•_-||–g³>õ€sÅkžoØÐaò©Ûl–d٬׎õŒÅ>ѳ#S/yÓv?]ô¬_ÿd(�sçØ¦*¿æË_÷;ZE*3¢^/ßxÝû¾œö÷g,6t8ëÜól–0‹§¡K`úâÈu»¶ç^†ï)¸xÅØòtrÝ®:wéj›qÊ'ÎLgc4M« S¬A32qrÝ®ÂÏÁƒFétëáå¨Kº¤½²nÚäÏoÉ Ÿ4ëa�=|õ�;y?w³ÞžgqÔ>Ãë,õÆ›ý9ƒGyˆÅ=G ©3V/o¹ý/V8öèC- 2aë�˜J D€lÖy#Ø @@@0²Yi € € € € €@ e6«Ì”©ªþX«£Ç�'Ë` ¥[úƒÑZTDS­Šª§¤Œ¹ ›5ª,@@@2 ›537æB@@@@M ¼Ñ–”÷)ó´,êeU±¢"ïÁ @@@@@ Ù ´jö € € € € €Y pš5+>fF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•§Y³âcf@@@@@€Ó¬´@@@@@ +N³fÅÇÌ € € € € €§Yi € € € € €@VœfÍŠ�™@@@@@N³Ò@@@@@�¬8Íš3#€ € € € €œf¥ € € € € €Y pš5+>fF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•§Y³âcf@@@@@€Ó¬´@@@@@ +N³fÅÇÌ € € € € €§Yi € € € € €@VœfÍŠ�™@@@@@N³Ò@@@@@�¬8Íš3#€ € € € €œf¥ € € € € €Y pš5+>fF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•§Y³âcf@@@@@€Ó¬´@@@@@ +�ò¬æ.¡™×Öl´½¹þý¿XÜf‹çw;±„ö�]A@@@ {üºcþVÆšš�Àò¯úÙ S€lÖÂ|_Ø*@@@@(�¢ÏfÝQW襁ÿ—ïXc±ÖþínhÕ¢¥MÒ½¼³Å6­*,þjåÝl_fñýê-’Íj  € € € € °[²YwKÄ € € € € €@*�"ÎfÝe°Þ¹fŠíß³_·X³k÷y¬!FYK?Ë|V—£-¾»c¥EÏqmÑbbçñÑÿ»·ÝùW›¨¿Þ��ph½3L}fšÕ¿ûÞr‹}î¬z§ +xøI{9bØ ‹ûì5,eå;þ<ÙâÐÁý-6îÀ:cy‰@sèÖ¾�ífYYYsØYö1;wîL¬¥¼¼ˆ?{A¡jký;IuµßmÓ¦�µh,�mÛ¶Ù¢Ú¶mÛX d9˜íŠf� �µ_[g‹mݺµE¾½çB¸y.sݺ-¶ã:t°È·÷æÙr±×;vìh”Å’ÍÚ(Œ,@@@@š¯@Q¦í¨?Ö?¬~ÌÞ·g6NÏøÝ]9Âæ=´Ã(‹›k¶z¬õìÕXa·Ã»KVØ4íÚ¥Ê&X½Æ¯à-޲YS/p͇km‚nö Ù_]uY4—÷Û±C¥Ån]»X|w‰gÝvéÒÉ"ÍS@W¹Þ<ßý\ìõ®]þ©¢H»Ê…pó\fË–~‡ŒrZiWͳ än¯[µò< ÚUî„›ç’iWÍó}Ïõ^ëH¥»:8jåZ»ù,_ùÑjWd³6Ÿ÷=×{ªoïúU˜ÍºÈfÍF�y@@@@@�E™Íº­v»½uÏEý±fööoÝÓf<»Ë1;•y�Ý+:[<²í ‹Zyöh²áœÏ_a£V¸11Á³ÓÞ´òM·?˜¨IV8æôOŒzò�ßX¹U+õëÕSž|Þâð!{XT¯¬ß¿ò:+6v‹Oš`1>TW{¯‚º6.->%5 € € € € � ²Ys¡Ê2@@@@@  Y6«ze]^½ÚÞ¢ÚzÕ°w«ª¬½ÍðÙn'YìYá½�.Û±ÊâŸ×1ŸÛÁº@@@@@�"(²lV{´Ao¯­Î€»¼e™Íun×ã,nãýŸn�úx½öý{¬¼c—/ó£%+Oöã^SmTb:d@¢\ÕÑscÛµkk±K§ªD}XÐØªŽÞßëˆaƒÂQ‰òïnû‹•7nÞfqÏáƒõaa鲕örérϽ}ê3,vëõ*Û­“•[·®°È€ € € € €ù ›5ÿæ¬@@@@JJ è²Y]WF½²Nì<Þæ]9ÂbY”ÙzÝÊ?YyõÎõ?”ÇúÑ«ôþÿÓ}Þ;ªb²9?dŸzG=û�—­þÁ)Ó‚±žE[SSkqëÖíÿp×#¯ùÍÝ5|ê¬págÏ´øç¿üÍâÎê�@@@@@ ÿd³æßœ5"€ € € € €@I e6kø¨ÿÔ®åÞ?é‡Q^j<ulû‘6ö˜ŽYlßÊûQ½cÍ£çl{Ïb8Äç Ç&+é‚ÓmÔ§Î:¹Þ î¾Ï×õÖ;ó댭©©±šën¼Çâ1ã÷·øÔó3-Îxã‹÷>à²ï.ûÀâØ÷´øãÿðµÜó×)ûöíeQý±nÛæ¯�ª¼ŸV@@@@ȿ٬ù7g� € € € € PREŸÍzh‡}í 9¾ê‹Ó·Ì¶øðºç-*/up›=¬|V× ;–µ·øìÆ×->¹áU‹�5lÜ´ÙõÁÖ»@���*++³Ê¯^|¶Å‘{·¨lV奞rüaVóÌó¯Y?n´Å=G ±Ø²eÝ3ã꿵Oï6–@@@@ò/P÷œ]þ·€5"€ € € € €E-P”Ù¬ê�Uî5»¼‡Óm¼¯Ò®åU7Õlµ8cË<‹çw;Ñb�òÎn_fQ½²Z¡‡?Ýçý¨*&[ìá‡ìSï¨ G޵úõ6&ÆÔßÊãõžd_sN¢>YakÔ7kûvÞç, € € € €ä_€lÖü›³F@@@@()�¢Ìf ß�—6¿m/Gl`ñت1Oïr„űFZغ·Å 5Þwêuïßc±:Ê~µB#_ºàt[Ú§Î:¹ÞeÞ}ߣVÿÖ;óë›}åÖ­Ûl!íÚµË~Q,�صË{lž7ÏóÜçÎ�kñý?åÚÚZ‹]»vµ8pà@‹ûîë=>·jÕ°«P+W®´¹Þ|óM‹*ïØ±ÃÊíÛ{¯ÐZòAy–zëÖ­-ËP]]m›ª=ÚcïíZýJ‡Û¿dÉ{Ù½{w‹é‹$_Sãw$´léw)”—ëGÒòåËmûß~Û?�V­ZeqÛ6?2wîì÷Rôêå÷[èÝoÛ¶þ;fÏö¾ÅŸ{î9‹™ ={ö´Ï8ãŒÌfo’¹–.]jëíÖ­›ÅxË‘¤þ^$™z#?øà› M›6«ªüî–b²oWq�-[¶XåôéÓ-êïzÆ VîØ±£Å=¼Ÿ÷1cüÛT‡,2H`ófÿ&¹nÝ:‹}ûö-j–õë×ÛöÏš5Ë¢ŽÞjzÇõixà�ÚX•ÓÙÙwß}×&{ç�w,ê/WŸ¹jQ£F�²úü»zÓ›6m² ЧOúG í‹>­ÒÙ~}ˆ‹�¼ÖÞ¥K—tUDÓÈGíjáÂ…¶åÚ_}¾wêÔÉj dQí!�O|Y雕¾¹éx¥ã|ÿþ~ÿŸŽWú®e/‹h(íöÐToÄöíÛmÕj‡·Ýv›•¯¿þz‹\p�EÕX¡„‡Õ«WÛÞé[åøñã­¬¿ÁÞåœîš>Ñ&OžlkyôQ?«£#Ò`e}VžþùVîׯŸÅRô«öÿø‡íàa‡ù3„’ý¢)U�†îWÃÎ#4téL� € € € €”¼@Q¦µjY÷ìð×L±·ªs¹çbŒ©ÜËb§2ÏÂØeÿZ´¸6Êc]å´ÚËCYlÉáÄ3ßôl£o|ÿÚ°ÒÊÏNóüµ›n°N}üå1§ÿ{¢òê+¿båG{Öm6ÃÙ“¼ÿY]iÏf9Ì‹@© (OçÉ'Ÿ´Tö–öT™;a¶¦Æ*ãõôÓ=K=�ÌÓW_}Õ¦Tv˜–¬ëÆ•••öR™ºò¹xñb«9ñDÿ›M?KÈ&nÂ!�,žôs|¤±uëVÛ#åžèª»Ä”óÛ„;Û U+Ëæ…^°¹”Ǫٕ•©k¼Ú;Å Ø'Ÿì÷=(ÃKÓ+VTTXA…a}ê²2³ô¥“ï™ziù«–#ÉøÚUŸll|ú�;wZ¥$ãc‹¥¦qÛU¸×j‡=ô�Uê¸fñ+»_ùbÊD;å”SlÊÞ½{‡ )ØòÆ�mÛÖ¬YÓ -T¾a:Y–ú+K¿56h3ò6±ò›tÔ ÿ^ôi¥Ü:eìêÓJ™P{ï½wŠ-ÔÒ”;¦ÉÔ®”ù¢ŒuÅýöÛÏ&7n\Š¥åz”Ž9aw:y^²Z¶ÌŸñ�Π£qü˜,g-Gß@¤­\édKÖgŠîŠH6MÓÖëN‚§Ÿ~Ú6C{¤íÑ>JXaŠúÄœ4i’M¿�AóêoM¹c¡¼>%%6gŽ?ÁB™ÔúÎ7×Ò 3–j{h*í;î¸ÃV}ùå—[TKkª-iÚõ*S^¿}ôס¿¦™3g¦Ø0e—ŸvÚi‰iô×§{³•»-èŽÀaÆívÊŸ@Ç´‹/¾Ø6uþüù÷Ùg‹#GúÙ›§žzÊâ½÷Þkñºë®³xç�wZ<æ˜c,–Þ _Ä:ëĈ¶›S§NÝíÎN˜0Á¦Ñ'ÂÃ?¼Ûé“M ã|ü®ÊdÓ7m}Ýó•M»5¬@@@@(:�¢Ìfí]áý¸µjá}ùÕFùªŠ7®ú«Õ\Þû3÷jë},þß“-.Üî½æ¥”Ǫ%'›rØP_æï~õ½Ä5Q¯Ž�LyÎjt…üý FËhÛþÕ÷éÕÝjí¹ª·‚ ½£z•Ó�—ýó6qY«²Ä,ûŽô+ g|æ›þß_µ8bøàÄX  ðØc�‚2¹Ô»èGa5ê)L>+V¬°‚®È)«ë¥—^²M©iâQýÐ)�Uù‡z¨M¶×^žS¯+ÃÊÜÔÒtu½{‹ï{f5Ê Ò¼ºª©¬Oå:il:ýµe¶öÆ�K全rôž}ôѶ µ1­KÙ¦jWï¿ÿ¾U>ûì³Ï<óL‹aÏ}C‡µE+ìvÐÒÔW” ›6Gl·Ìi 4n»ÒJ•‰©Œ~屪71õinØŒ3ìåË/¿lñ™gž±xÎ9çX Ûª½,ÀAƒê±1ýÍK'“1ý¥ò”ÊiRïÏÊѧ۞{îi›­÷WG`e§*ïuÚ´i6V}ÑÆ{2]´h‘�UV‹ŽB'�t’Õ¨Ÿh+Ø þ…üq+¿ñÆ•i¥õúùô¹³víZ[­²½ú‰¬þ@“eÓ„wÌ„{¦Ï¸°FS*óW&Ê •¤2†”ª¿ßpÞB+ësP[«,6õE~ËÒ÷Ÿ)SüîC}2êÓPm&¾G¯¿þºU*�U×'N´õå­\i}¶ªaßÎ:ë,›¦ðÿ®·=¼÷Þ{¶×éçÚ˧¸î²Üí Œï+®¸"1å+¯¼bå»ï¾;QSÚÝ]§ß;úõñÖ[oÙ.ë½>þøã­¬»Ut Ôß©îÑ”¡Ïá‡n/züÑ,\N1–uü9&ÊK•žŽ0ÊÊÔñ_½ß|óͶƒ_ùŠß£ü¥/}É¢>Cãw­£ƒ¶YŸõº{ ÌnVYíJǵ@Õè̘ŽÒñ_vú½¬Od}ÛÜÿýmuú\Ö‘ÿ�C±Ýg£ï¥ÅeH6kq½_l- € € € €œ@Ñe³zke+Róí=‹óµÍÞ/�†ê]Þ/ÛÏWz¿Zµ³˜N¬š÷€J_š–ìY§õ í+}™Cûs-ßží=tÜþ'ïãìµ7¼üÙ³ýÑ€~þ$n]',+ó³Ø¿½Í3j3×âùçú•ؽF ±˜ÎоÒ÷tõj¿ê®«”m£g(‡ó®^ãc7lò¾«ª:„£(#€€ ¨w9ež*'ž‡Ò§O›Rù€êmGÓ«&ÞÛ£®a*ïLÈGu”ÔO�jÕ*ÿ"�þ^Ã%俬k’ŠáÚ•3Ö„eåWª&YÏtº¶^ÕTYÇÌâÊf=z´í¬²r«²¡‰®Ó{ì±Vy×]wYT®´2YÒé2\šÊÊ,г>U£µ~�®{dz½”Ã¥ß_Í¥¾µ�ê-TÙyñ< ýmÆ[¯žp_~¡Õä¢])oE†Ê SK|ßµvõÐ*Cå¹~^†ò1 ÿè7ÏO�r0u§…ò ü{mƒŽÆú”Ôߩڀ> ÇŽ[gSÃO@µ¨0�Uk-Gy¤½T6�rR†n5¹Ë’VÖvüø ­Ò‘DŸ8ú\V½¢>�âŸû«O±dKN–Q¨LÍ¥5*CGßä ±zUŸl™á67mYmFmlÈ�úã¨m¨�èóKŸƒÚ»°%è½Sî³öKË—¡jô—®\³ð³U} <¸iAv»öÆmÊâLÖ&㣯/öšN8ÁvAQûrûí·[¡ùd³ê¯O÷èH¥ûíô ®o¤z÷uäQ�¾è˜¶�†>- œ·ØËʬ¼þúëmGtœ‰÷Q®oS—\r‰M£;Eî¹ç+«OÛÏ}îsÅŽ�Ø~µŸðW†î`Ðo=µ"õ�¯#³î ?[ã­K=Sk^} ¨¬v«ßéª —“ؤ¢(�ÍZo‰ € € € €…+PdÙ¬Ê2-³~Y[´8«ËÑwírÜ[)~øÓ[,þážÇ“MfõÇu ÅÞ½z¤˜†Q4O]çOç)½ñìBe�Å3tæÍ›g˜ºÂ¦ë”›“Z¸X2­t;¼©LCeÆs�Õ‡Žú˜ ssâÊRÑõÉp¬ò†ä^/ §)´²öT=¥Þ6í¯zßSn ÚU¼½¥^ŽÆê²–£ì¡tÚ^:KÎõ4ºò¯< ­Ký6JFžá6¨Õé¯F}ü…98ñ\<åßéïQ×ɕ٪~ÊÂ%r9í*ÌíÕßu(×èÞÝû”×\j«…ŸÍß‹†Ö(LǨø¼Ê| ³ãÓ(#/žµŸ2ÿ5Ú6e•¦^»Ú†Ž-jÊÁçÒ_–r TŸ:Pcu$ÔêM2w9æ:(/&Üò°¬Lyµð°^Éz®ÔQ+œ>^Öñ'¬�orÓ笶0ÌZ ó:ÕÞšp™…SÖ&Ëc ·SÇÕ(ƒIÊŠR½î›Ñ_¢¾$k'úLQ[ÕsÀÕïdêÖnOS•·=È¡©ö…õŽ€¾‡k{Ô¿¶Ž3a{Ó_VØfÂüÁÂÙ—¦ÝÓ.½ôÒÝn†>/N<ñD›RÙ¬êÃt·3ÑúìVÔ7êÍ›7ÛöëWaøÝ)ü�~þÆ9j÷5�b8oá¤ØT²YSà0 @@@@ؽ@‘e³j‡Zµô³Ã}*ºYüt7ïõ„Nžõ¹zç:‹µJpµ’åºÚ¿ú†²h ÝË;ÛÈîå�,v‹¢–\ß^ׯoo‹‡침߹ìB‹ƒõ³˜ze¹þè?üzȳ¼'ÙùQVl×.¾v íÚz¬?ºâ"‹�:uüg­­kìV¾ÿŽŸY\»nƒE]1HL`…6mZ[ìÑÝ5@ e!éʤþÖ”³_¦úÿR½úëÑ\ñ)‹±FWÃcŽòJ’]“ÔXÅø^'»Ú©)u SÏE�?Ï:¾´b¬ e’µ«Ôû¥l_=9WSvØa©g)¨±ú ´yjQñze(ÆÇ†5j]º®lh� ¯¥E#nLè�¬]…=¬)?1u?Èa–béä*&›FK‹çY§³%…6Mêv¥~EµÍú MÝNô·¯Ìe*Û4Y–böÊpÌ~9ZBø9¨,×dŸøÚ¯dëU�²huÜSf�dÔzÃlhå{ªFcS÷�žl½a}¿~þË%\K86×eå2k-2T†T¸ÞU«V%^êîµ±De�‚öHí*ì#¾Îdø2›öP€»Ã&ˆ€Ú•úXד'Ôs¨î¾Ò7í°§ãø‘G;¢ãOø7›z•!æÉ¦ž¾”Æê>!í‘î6+¥½Ó¾¨�¨×låMë÷ÈøÙ*µ«ð~Dµͫϻ°Fõj]ú• þ%êSϹ~÷ÝwëÒgnâeŽ Z»>‹•É¥-×êTVqµåáÝšRê'4õ½+W®¬³/ÊúÑ_Ÿ–¬uÉJ½×éó1¾^)…ù­u^€/µG·Ýv[½Û6zôh«?ðÀ-†™ÅáÄÙd³j9ò,ÌlÖæÖÂw–r® `«Ð�s�>ú¨•u/�î\Y²d‰Õè8mô7«–™ë-,½å?ûì³¶SúŒ5j”•“åéï¾ëÓ³oß¾¶ ê…VŸ_ú„Ò[÷,ª—Uíiêv¥ïGu”M¬ûc4—~ žp ziQ¿}䜨,ŠÙ¬Eñ6±‘ € € € € P¸d³î{Ö!€@ÞÔ÷ª‡Çý÷߿޵‡ÙpšàÕW_µ‚®È 6ÌÊa¾Œž¯^{^ýu«Ì †æ3j]Mµïêm'ý-‘ª®yê*e²y•~tu4õôÉ–S8õÊœ7o^b“>øàD9ý‚úÕÒôÊS(¥¼]ñŽç‰+S5µ’òÔÔºÒy&µÚ°ú�Ò3¾S/¿0ÇfÖ®ÔÖÓO?m;¥Œ¼‘#GZY}þ†}qªF>a–Aaj¨�Ä�Ìéo­þšJéo*ý}§Ô_¢>ÑT¯'&'Ë 3fŒM¦{5Ôçæ½÷Þk5Ê|‘§ŽçÊÝgŸ}l¬raô9«µä"ªUè/EÛŸìÓD=Íéè±fÍÛµ|å�†Ù:گ̶V=!*+VKÐzµõ^?"©UWËÔ÷í‹ò•”[ª#¼¾ké[Ä!‡b¹Ø»ð;XfïW®çj¬ö >ŽÓù¬L¶GÉþº“MO}! :´ÎæéŽý6™:uª�U9œLßÒût¤Š+ çJ]ÖµðÿSïEê±úë»òÊ+“ýà?°rákJlpš݇N¬cŽ>Óõ�AÇüðx¢vÖ„KÐ� Ša})•Éf-¥w“}A@@@@�& ›µ ÐY%~g.¡@IDATŽ€²á¦OŸžØ$õ>»61Ê ñþÕסzD §TYOœT6¢úERÏwzºw|úB®‰÷:—zku¥W™ƒz²pê>æ”ߤëÀÊîéÓ§�­"×yO©÷"³±ÊÖùÇ?þ‘˜]Y¨ñ|¥Ä) ê›U${vŠÙ |”òà㛚ì/QRáóÁãYQa&…2õ”ÿ+ޝ·0k2kWê R™,UUU¶k§�všEýe©j�^xá«×_úC=då3Î8ÃbØ�›½,¨Aù†ÊšÌlÃd¢cTfK(�¹Ô¿ªî$Ð;®~ý’í�ÚÏ™gžiè^ µ"µå°¨u©Gò0O6×Guå±êï%�,TÝ_¢}×±Hßú$Ò#ž•£¶§c‹”T“ú“.œRYäÊ´U_¥ÚfE-­¸ŽW:Oœ81Ñl´ê™÷•W^±ú7ß|Ó¢ö]Ç¢PLúæ o‰EÕ[s„5A²Ìåzg/�J)5´=è»�æmèŽèóqàÀ� �‘é‹N@Çge ª‡Mešë¯UOD�“ú�²páÂŒ÷ôÔSOµys}œÏxóeÆ;ï¼Ó–£;„Ž<òH+Ÿ~úé�²äbYˆî‘Z¶l™m°îéÔg¨>Ëôý<Ì’÷K=ئ“ù«ö©ï'á ¿L6ká¿Gl! € € € €´Ù¬ýö°q �;õ:ôØc�Ù*”1¡|Ãd½²jKâ¹uéô²ª¬Leú(G#wû•»%ëÉãñœÁðùÑáÚ•9¨¼’túÍÔ¼Ê!Ò¼z_Šñz¸ž:ªÌ]Ë=úè£Cœ4ËÊiR��š¥ô²YõdÒøoé…©Ð_®²Õ¤‘ìz¸ZŽrÐÔƒ¤–> 5Í7¢@&ˬ]M›6Ͷ_OÊ£�ÿMé¯[¹“'O¶éÕ¯–2ýÇ�_ ñÍÐiРAñQ�X£vo��¸Š&\”zã�5k–mƒò �=öX+ÇÛI|#•·¢^§S÷=­{G´„Üå+cKï”>M’=Ñ>Üíµ¶JŸ;aþ»ò¼âホÏʤÖ´®t²¿µ-SÇ1Õ„÷.h9ŕͪª,™ÁƒÛK{ï»ï>+kOßyç+«ŸhM~Ä3U5Må¦ âyÇáô…Yά=$»�ª0÷‘­Ê¿€²VõRŸþú{œ2eŠmŒŽ`ú‹ ïµÒï Ô¿†ò¿/…³F=oã‹_ü¢m’>nºé&+§sä/œ½È~KÔ³ªîUÓÏ>û¬-Vy¬ú4;vlbEªQ«>�Óùt“ê1ÇcËQëM,°À d³øÄæ!€ € € € €@¡ �ÍZèïÛ‡�. lõT¨^Ø” §keñŒ•ptUMQW‰•�š:[3Ì­PÏ5á2 ¹¬l&õÞ•L&Yß^RM–i˜l¯µåÿ&›¦�ëÕÖ¼yól#uÝU½÷fv•[9›aÏkº\Èéo›2q’µ«°§°p™j“ʾL}e[KîÝ»w8{‘–3kWÊS+’•rö“!¨•êùòÏ?ÿ¼M¶xñb‹…œÍšl_·^ù>až]ã.¿©–¦L̰i=ÿ=ÌlÊ~Ûô™›Ÿ¬|ýÕg–õ—Õ�a²c”2qÒϤÖÝ0á}!áç‚Êé/-û÷%ÿKÐ÷“uŒúõ ³YÞUà èd[NΛlú©§=Î{Qz[rÒI'ÙNéû’Žçá½hºs%Ìý/=�\ì‘îüøÌg>“Xøïÿ{+«òDe ô Aß'õô‘°]©‡Vµ+!„Ÿž™}'×ò;uêTtªd³Ý[Æ#€ € € € €@a �ÍZXï[ƒ9ж¿ÿýï¶õ”ª+½'œp‚Õ„9§©7CW†,X`“)Cù)ÉæÚ´iSb”ú¯I¼,ŠBx5²(6¸I6rîܹ¶^=IYpøá‡[¡W¯^oO˜ÿ¥öï8ã…7ùŒÙ´«Ôy¬M¾k�¸Ù´«0w^b阇ýfj ä¼4âZ ‹RŽóOú¨ÕìØ±Ãâ�!C,ªWµÄdiª««mÊdÏ Ö'ïÌ™3KÓ§§Úd¢’BQ ¼üò˶ýú¼«ªªJ±/jo: i²xþ©2�•3¥éÕ‹«Zi¸p�]ºti¢2>Mb@ ýÖ;çœslÞéÓ§[¼êª«,~ýë_Ï`iÌÒ|Èfm>ï5{Š € € € €9 ›5'¬, G@½zM�:Õ6IY¥Ê£Qk<“"�-WO¬z±ú›2eŠÍxâ‰'Z ózÔSç‡~hõ;v´¸÷Þ{[d( �3fØŽ(—G{4nÜ8+Œ5ªQvpëÖ­‰å¤Ó#Rbb E-ÐXíJý±*ËlÖ¬Yf¢Œ~õFÏâ_µj•MóÚk¯%ô²ÏÈN,ŠB“ ,_¾Ü¶á±Ç³¨ìf=×þ˜cޱš†æ,+ÇP-jüøñ¶åªÕ)ÿÙgŸµze/¶k×ÎÊcÆŒ±ÈPóæÍ³ÑñJÙ÷ú6l˜Õ‡9Ë6l°õŒ¯Ï5}¢ >¼…æÚÿý­^ß 4—2ë•¡¯ÖûÔSOÙ4Û·o·Ø­[7‹jÏV`@²xç�wl gžy¦ÅÙ³g[¼òÊ+-^qÅ›Ïlg2 ›54fA@@@@>h©Ü®Þ½{\×ÀR)=õ¸�»Îä �¡€²2›Y™Éž9_æ#�© `å“N:)¾(j P@½RêØ’þ7¥\´+m‰ž)¯ Då-ªŸè:˜žŽTÊf¦ZæGQ€¶l’ò•šŽ†îºP«îðÐ\ºŸCÇ@¯ÔZâËÔÝ&LHŒR�«Êå×QNŸ€Ú*µ(M¬O@=‘YGÈÄB(”@CÛ•ZË´iÓl/”Ͷ}ËRë û×gåqÇgséÞ 8‚–¬~ëÒ¥‹M¼qãF‹Z²Z×é§Ÿn5Êu�/�š¦ÐûUYYi›‘þ·÷ô·Y=ãß|óÍufÑ“žþy«W†µòîÃɾõ­oÙË}÷Ý7¬¤\úå¥;ÃÜùì7^G³‰'Ú¢-Z”Xॗ^je}º­^½ÚÊÉ~?ê—ãe—]–˜—B±¤þí–Î^¬\¹Ò&#›5+¦A@@@@’ Ð7kRF €@± («"̃Ð)ÏT1�}L–Ý£ŠI“&ÙBÞxã ‹ºr®+œº¾ªž Õ�®ä§³F¦)|�%K–ÔÙH]ÓÖ5Ì:£ê}™ìx8±2¦UC߬¡L©–sѮԃ˜zŽÖò•©¡Lõ­œÖÁƒ¬òzÈ»/¥6¦ÞQÃfF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•@yVs33 € € € иÛÖùò¶­÷¸s›Ç]»<6éP[ûñ6´jÕ²I·¥WÞ2+oë›Þ¶S;án°É¤ ›5•ã@@@@@�Ý �ͺ["&@@@@� ÔîôlXî±z‹Ç´‡šÚZ›¶ºº¦ÎåeVSVæfë6ø2/þÿìݼUÙ8`ÒH¡$Jè¡H/Ò•® €| "Š"¢|*,  þÅ.‚¢ˆ4EA•ò�H‘¢H)RD� -!�éáÿÎ}u³¹77÷Þ°;sŸá÷{9{vÊ9ÏLf÷ž}÷ì—ωø³cˆ8lá!›—ÌZ=éçWÇSoßqãˆ+/¿TÄ3/ücÄAƒŠ¬Ì¼cÛˆ�=õlÄŸ^xCÄÃÜ5âða Gl^λ얨\bñwÞvÃÆ Wþñî(?;éňûî¾U£¾†…ÌGž1¥èZÆ©/åÅ—/â@ÃSƒ¥ê²Y«~µŸ @€ @€� ø¸ Å'Àá  @€ @€�…&÷$�5Ýîüë¸(|îû—6uÌ�zàž[DÍ9¿½#â+Ù”S¦9³ïüÔ�"è˜-tÏí×�òAïÞ!b.9ïê¦ë­�þa±ÏS¾¼ß¿ŸûÏÿro§œ÷û¨Øxí#–óX§NŸ5S¦L�˜Ëãã'FaÊÔ¢fâó/ý»v¡…ž|º˜…öéçŠlÖrýðáEVlgù¶�Í«]ÈœåÌ_µrµû¢õ:d³º @€ @€ Ð+�ãÆ�‹Œ3¦Ç»:th�·µ!ýS`Ú´i=îøàÁEþ AÅ,K½˜9³ÈhÈ|„!Cæ>?Wï�býM`ö¿gˆ+2Y¼SêogA÷wÊ”bV»áÇ/èÙ¿p]õ«ÓýšuvòäÉq¬#ŠÙHçñî}j‘ѹÐäñEìõò‹KoŠ}Lš\Ü-ÙwÇÆþ2Wô�Ÿ9=j~{ò!¯ûÓ}}¢˜_õ#ï}sÄG:â�GŸ±gË©ÿïݱácOûüÆO®éÙNb«#(ÚóÖm6èñ*¶áb£RÃFͳÙ'yÁ‹-¶XÄüÛpž›X�À<¦O/2Íó¯Ây®<ׯ�/î`²Y犣’ @€ @€Ý07kw¥¬G€ @€ô½ÀÔçûdŸ™¯zéõEŽê¾5â›=) Ë-=2âª+.ýïÚ…Zy¹¥¢üóc>ñþ‡ŸŒ¸þjųßüÔ^›—Ïû«FåYßü@”G /rQs9à‹gGáù—¦ý§¢[ÿÿÞa{Æz­³J·Ö®ÍJ}t ÔÆCG** ›µ¢'N³  @€ @€h�Êg³fæiÆž¡6g­6×ôlÏå­þþÀÃñðÞûŒøÎ=w.?Õ(OŸ^|¶vì÷Έ¸ß{w�8våÏN~±˜Õå„“ŠOÃ>zð{"Ž^rTãÙÎ UÙggíïMý “_ŒÍŸ~úÙˆ«Ž]1âÔi…ðW�95âûsô¬½æjï»ÿÓsÙeŠO/{¶L™RÌøsÙ¿�¸ó[¶�¸Ø¢Å ; @€XpӦψ�_só}W^nɈ«-_ü½<ñ…—#>õÌó§NŸ1— Ͼ…Á¹®/O-þN|Ãë׈˜Ù¯#‘«E2xPÄEÖ¨)~5wmñE‡—ŸŠòE?øÈ5ŸûN‘ýºë6ëE|ÓÖ�ãÙ}?}Ž ¨–À«w„jµ[k  @€ @€ Ð&Îfí«<ÖæÜÕæšòÙzâÉ ñ°9vxÇ ,£—,~%°yyü‰ñQùÛßݱ³lÖÇ:Ö¹öÆ»b��´Ï;ùÛýEÍõ·Üñ°OÍù)Ù+7VeŸ>ô«ÑæyªÑòî>õá½cµ=v+~#²y¹ñæÛ£ò´3ÿ/â¯ÎúvÄ þñÏy â�û¿úÃ¥—¿5ùècÅ9úÎ7>qÄðW?«|éå)ų�>±y0°ø5ÉuÖZ=âC�<ñäŸGÜéM[EìÎò•o�«ýáæ{º³rc�“¿sx”3·QÙ(´ó>gÌ(>g¶ @€ @ ¯^xHìêw7ÿ-â Ëy¬¯]|£qÝ5Šoˆ®°lñwú󓋿쮾µøËúvØ0âÐŽ­*òU;[î| ø;ñÍžÐÙ ê  Ðxu¤©Q¥@€ @€ @€Ý¨|6k÷»Ú¼fsÖjsMóV?üب|~r1ÃKyÙs—"{ñ“‡¼¿\9Ïò¬Y³b� ó‡Þu÷ýQ»â2§wÌ,óäSOGyù劚;ï.>—[}예O=õLÄò2dHq*W\¡x¶*û,·?Ëûì¹C¶Úrãæ§æ¨9ö„³æ¨i~xín‹Ê]wÜ2â�!Åg›O�/»î…g  @€¨¹À€ŽlÎWšþ�žÏn�ZlDc‹-þÖûÝ�?1ÿÊ›øü‹Q~×g‹üÖßüð#‡ [8b.Í£ƒ­ßvOñ·ä²K.q½5WŠ8áÙâ/î!Ï.ºÈ°(çréµÅßìcW(þÜ`­â/ô®—)S§Ç oÿäigΚqñE{V³dÄ~·ä5ÐﺭÃu�ÍZ·3ª? @€ @€¼Æ•ÌfÍÌÓžIå'TåÏ©fÏ.>5Êe~sZÿ³Ý«ÿÿôQEæéŒÅŒ«�-9ËçÁûí+¼u§­«ýêÌoFy‰QE–ë#ãŠy^þÔ·"þþú?Eœ5³Øçe¿,ö?|ØÐˆ¹üpÍõ·þ§â¿þ_•}þW£{ýà†›noìã‡?¹¨Q.>vøwÊç(¯²ÂÒQóÓS¾:G}g_˜\|.ú§;‹lÙ<ûyîš×ÿÅ�¿•å™as�ÓÎ*r¢36oÕ³šªì³g½³ @€5Ü‘:cJ�»3}úÌØöÌ‹oŽø¦MW�xù ů›<üx1�ê;v|}Ä%F.qÓµ‹ïNëXvGþlŽ Xd¡ [¸˜euÜů¡\}Ó}¯¸©ø+ïÛŸ~{ÄÁƒŠu2ËuZÇï©”µåŸO=Ï.µDq”î,Ã;riñíÆÊ™;¢£&y¥;{¨Õ:y ÔªK:Ód³ödz®Ï @€ @€ô¡@%³Y{Öÿ®óX{¶Ïæ­®¼à‡Qùò”©G u––k®»)j~ñë+#þ䤯DÌåÙç&þ§¸P~z6p`1+M–ó©3~þ›(¼Ÿ]"–óXóÙ©ÓŠù\ñê±²>cUöYnsïË;l·Eìdç�¶‰8räâ_xarĽöÿ|ÄÿwØ#î°m±Nw–™yÄ<øÈ+�{ôÉFÍ5ןšfë—? ʹÿœö�ÃŽ‹š‹Ï)ââ‹ÏùÙæ!½'êܯˆÝ_–Zj‰.V®Ê>»è‚§ @€è/ÃF=íE6ëU7Þ;Ø1¿çg?Tüíœ)_{s‘‘zå�E|ê_Åœª�M(~ïä�Ÿ9=byùä{‹¿—]üýxâ/þq§-׌xúW÷‹8zÔ«Çm¸V1Cë¥×ÝñŸúqÄ\V^¶Øö}»¿ñ?sùÿâs¹æo´äÓK-±Ø\Öë‡Uy ôÃŽër½d³Öë|ê  @€ @€¯¹@¿ÈfmÎcíÍì®yŽ>}Ô sœ¬=wÙ*jø”ìø“~ñÇ?øRÄa¥yTãa–wï¹clµì2KE¼ðÿ®Š¸×ÛßÚØÏÔ©Ó¢¼Èˆá�šîÚsŸ�?1!ßßþ1Ï.¼<¥èugKZ•Ÿ½ý/÷ÆÃ<ï³fÎŒræ™–×™ÝñÛŽcWY!*G”<§N-r“sFÝòúåò�Ͼ4®¾Ê˜ˆ¸á¶ˆ™Íú÷ŠØõ×Z%b9�õ…^ŒšIÏŸ¦ölyúébÞŸ¼¶WZq¹(WeŸ=믭 @€¨­À°âJšÚñ÷ÑŒ—{ÐÍÝÞ´qlµó¶F,Ïsº÷.[Ì×Þ^éX{ËׯÿÏÜØæÍ3ÿô{GßJœßå‹Ý}~7©ÿúCF}Ìk þ½ÕÚ Èf­ù Ö= @€ @€´@å³YË™ª™«Øœ©šë$egëÌ/ôç?±ol²ÎÚ«G¼ø7×›wüFáúë¾.Šƒ:~£ð’ßõïÞk×âÙn,ïÜÿˆ¹®µ×Eîêý(âIg\qÃõ׊¸ÆêEŽäÔiE^gyØxØXª²Ïlð¹b]èe¡ã´,tùU75öó�ï�Ý(7>qÐ^QùŽ=ÞÒüTÔüøûGF\}µ•Ïæìº?ùÙ…Qóη[ýï§Ž‰øüóÅl°7Üü—ˆ[lºnÄòrËŸ‹úcN(²ž{³,µd1�Ï/Ï<6bUöÙ›þÚ– @€�Ú ,¾|ѵž,â|æ´¿pòŸ<ÖŽbCî§<†ÐÃÙ¬;™Çšç½;ë[‡@Û ÈfmûS¤� @€ @€´·@å³Y˼åOœ2ku`GViy�æ\×ò³Ý/�³t¬¼òJŧmK.QüžàsÏ¿W8dÈ�ˆ}`ψ_ûÎO#î°Mwç‚ùÁ1Ÿ‰õG�,ò{ü©ˆG}ãGsYw�bv˜·wÌ{üIçDù„o>┎YJ‡�–«Í«²Ïlöáov}ëvsô¢ùá‡ýjså\kî¼ë¯Qû=¯Î÷ú£ïYÃk¬VäçrÛ�ÅÌ­G}ýÔˆoÚnË×v\"V<üÐ#æÕµÜ2£¢ü닯Œ˜Ç=äàwG¹¼¼uÇmâaƬÿôEFêÆyÊûïûö¬œ¯X•}ÎW§¬L€ @€@Ø1@1ªã»ƒS'½žZü•½ÐÌ©EÌ/*%K5tä î»6²èƒùX«y&µº Ù¬]àxŠ @€ @€ó¨|6k9;µçÚx• @€ôw�Ìs”íØß¯ý'P1Ù¬;ašK€ @€ @€@» T2›5sËy¬årsNk÷óXsÛñ㟉ՖèÈ||nâ sl’sÂ~æãï�úÑK3uÞ~G1ûgï—̵<îkE&檫¬ñÖÛ‹¹GW»b�w^•}v¿ƒy=œxj1ƒíãO=ñkG},böô–?çâ´3~qÚ´é§N-âûÞ³{Äî/�Œ{,V¾æŠxÐönl¸Öcå­ß°Q£ÜYa©ÑÅì®?þþ‘�­Ð¨ÿûƒEÆëwN:/b×Y·UÙg£k  @€ @€�J Èf­ôéÓx @€ @€Z/PÉlÖÎØšsZË5�mÕ³úoŸø‹96Üs—­æ¨Y}ÕŽ_Hœ£¶ó‡O<ùt<ùÒKS"ŽŸPdËv¶¬Ù‘/™½»ëÞ‡bµ�vØr®+WeŸsm|*g̘[ýèŒ_E¼òºÛ#~íȃ#.½ô’sùØÁïŽÂG;î? �ð­OGyÑEF4jÊ…Ù¥_´¼ñ–;ã©S~RdÂÞqO!¿îšÅ¼«9—Å/`ÒÏ#X|†ñó_]qûm6�¸ì2KEl^2/µëìÔÜjÜ£�Gaô¨E#.¶è"Í»jÔTeŸ�+ @€ @àU�©“ŠòÔç‹8³ø;k¡ÒßeÅCKåò'M+>ldG,¾ûk!P'Ù¬u:›úB€ @€ @€@ *œÍÚq“ׯ1çç½­c†Üt~Ô,³TñéÙÀ�"~óøŸFüè{E|ã–G2äÕ ˜5—3Ï»" ÛlYì3¯� ×_+ÊO<9!âq'œqæ¬YzÒÿ‹ø­ãñËß:5â/òjWX~Ùˆ=[þùøøØp�5ç/KºëcUeŸ]÷³ @€T^`öÌ¢ /—ü»{Ú´â;Ž/M)r`_|iZÄÉ/å=WüªÊcã'F|äñE\l‘"³òãûíqÈàAsyø±â›¦+-7:b¹þ´ó®‹š­6Y#âßküÍuwF9ÿBËÖëG9—Ù³‹¶<;iò*æûÿKŽ,¾Å8hМ¹q?½àú¨_¸ã/Ö÷í1çwjçû0¯å9¨1£ÓX(ãÔŽß¹Y|ù¢fૃ-ª)0ç¿ØjöB«  @€ @€ Ð2� \PÎ �ßÜÕ²wî§¼·ò³Íå‹~þÝæÊ9jž_|öµÿG¾1÷9¡øÜ2�ò¾}v�rž�sù›(ùØ3".:¢ø<óÍÛ9­ïÞkç¢fÑbÎÖÍ6z]Ä�XÌëºêØWµo»óÞ¨9êëE¾ê ËŸv~ëèOD\q…1�þüG"~ñë'E<øÐoD<é¸Ã#®ÚѶ(Ìuyéåâó½>V|Š»Èˆá�u.»êæ(ð}»5jº_hŸ}¦Ì´iŧÊ @€ü[`rÏóXs·Üù`¾tòåG�,þ’=²økîÙç‹ÜØ,ï¼õ:Q~û›_q…1KF\ÊcÍ|Ø“~Qd­f&éa]æß‰s–3yT_~k³e=rà~/ ›µß_ @€ @€è�À€qãÆÅÆŒ)2ïz¶ :´göáV½ÏfíÃÆ4võÀƒ�DyÈ�âs­áà ¥e–.²vü}b™>}zÄ{ï+>sÛ`½5#æúQ˜ëòìsE>æäÉÅ|¬¹ŸåÆ,åò\¢UÙg¹ƒ×]ÿ§x¸ÊJÅœ,«­Zd¡v½ÜzÛݱ˜ŽiWîØª³õ/¼äwñÔìŽùR·Ûzó(/³Lqš—=[ØÞòç»"Þ}ïûä#\$}çg†Í3ãäVþ_q”÷¿w�ˆÃ‡ù°åååŽY�®¸ª˜Cçíÿ³SÄæý”ן>}F<|Œ˜sïæ³ëvÌþsìW?G”²\óÙ®c»í³7Ù¬yF zuûîY] ÌœYÌ–¯#]ß�»Þ�g ”rNð3Šûy;¼S*·M¹êS:fê>üÕï»T½GÚß®«v8 õkÃäÉ“£S#Fù¤óx÷>uRÑýÉã‹Ø‹¥<2PþÆê¿.þ4h@ļcÛyaÊÔâïôÿò÷y⹈wýcBÄî,Ç~ªøÞäê+¯ïüÌé/úþÁG.V8t½ä\®ïúlñ=ËÌfݑͺÓA?ˆšs¾µÄ+®¿'âÂCŠ¿†öØq“ˆ3:ÞÍF¡±<õÌóQþä1DlëlÖF‹£°XǨ԰Q庹–'N,þr_l±"Ï7ÿ6œëj* Ì—@ޤ•ï!óµy¬<~|q“Í:¿nÖ'@€ @€ @€À Ô$›õ¿úä�ZdþììÙ³¢7ù;•åœåžu±}ö)›µggÐV B@6ë‚PµOÙ¬®�' ëpÁÙöç=»®úóÙ_p}Ÿ�lÖI�ÍÈ_ŸïQƒ®ÿóý±Ý—O½²G[uàŽwØr݈y¯ñåŽÌÖüzãÿûÁÅQ³ÛöD|ÃF«GüÙÅ7F̹Yß½ëQ8¨Èf›2¥È‡-g³Žèø†ëŒÅ÷¨š—ü[ï…‹9d»ŸÍºßÛ·nÞUÔ<ùt‘ï¹ß‘?‹X™lÖ!ßÒµÊ\{T®”ÍZÖPî+Ù¬}%i? @€ @€è•@1餅�6èøèôßsõÕ4¤UÙgžM"@€ @`A ÌœÚË=¿ñõkÄ.ùÁØÆ~îäÉ(í´"¿uÆÌâ;‚c–\4â¸ñż¥ûî¼QÄwî\üzÇ�ÁÅ<§C.†G®¾éÞˆ—]_Äß¹MÄc~rUÄ Ï¿�’Ë�ä²Åïs”—Ÿ]vG<üŸmÖŠxÀ^sÎ{å‹ß9þœb–ØæåˆÞ•›®?¶ù©9j^Yè•9jjò°××@Mt£âE6»… @€ @€z, ›µÇt6$@€ @€z-�?"Ñ‹Ýäܦ™çyÍM�=ýàÜ?FüÜ‹,ÑGÿWÄAƒŠ¹V�ظÈ{ýú©—G¼ïá"/õ Þ-⢋ ‹ø–mŠyWs®ÕK¯ýK”Ï9æCŸzfRÄC¾~^ÄŸ~}ÿˆ£G¹±wÝÿψǟuuÄ“¾¸oÄÜÏÄç_Í~�ÊÆ²çöëDù“û¿µQóõS.m”»S˜9sv¬¶Èð"÷æ;ŒxÔÛ� Û}�^_íÞAíë²YûÇyÖK @€ @€˜€lÖFkÇ @€ @€À‚¸íž‡ã ß?ûºˆ‹ _8â1ŸÚ#âFk¯ñÉKnŠ8p`‘ͺæØå"þð‹ï�øƒŸó«~â›çGüÖ¡o�8vÅ¥#n¿E‘sú†Žù^§Í˜åãÏ,fh}qÊŒˆ}霈¹¼Ò‘ƒùÂËÓãá×:òR?ð®Qÿ-˜eÚô¢ Ã^,âÆëŽ�xþqD,/ã;ro=ö¢r¥2¯�€lÖ×Ù! @€ @€¨³€lÖ:Ÿ]}#@€ @€µXi¹ÑÑÇ÷zcÄ¿ÜÿXÄÏ|ç∃;æc�Bc9óÒÛ¢<{v1�ëjË/ñ½»l1s]£ˬYÅü§þr‘µúü‹Ó"nóúU"þåÁ Ï=îÀˆ9ë=Ç:ï²[#.¿Ì¨ˆWwÌ û–­Ö�rórñþ•ËÏn±ÁØòÃ9ÊC¿š!÷Ø„b–Ø�×-²t³ ˛̘9«üP™�×LàÕ«¯Ù!ˆ @€ @€u�ÍZ§³©/ @€ @ ß ,»ÔÈèsÆûz2Êßg«ˆïxËfsµ¸ùΣþœßY¨{ìXd³–—»ÿþÏx8p@1¿êW?¾[ÄÕWZ&âe7>ñ=‡�q@dz3:ò^7_g…¨ùÈ{ß1·šôÂËQ./;o»a<|óÖ-W6ÊC†ƒ3/¼8çV¹·+OûD<›³²Þ÷È3Q>ä½K6¶U @ }d³¶Ï¹Ð @€ @€*) ›µ’§M£  @€ @€@M:2Cz¥˜/µ¯–Ó/úSìêÜËï˜ë§NŸõ+-[äÀ6/WÝø×¨üŸí׋¸Áš+Eœ>£X?—ó¾sPšgDýÂ÷.ˆú£?¶Ç¿×ûïÿ <(*2þ÷3Ý}tÓEîr£�¸ÊòKG|vÒä¹nüÜó/ÍQ?uÚŒ¨ùÒ‰Å|µûïñ†ˆëwôë”_\åå:f•Ýs§M£üû?³ÇÞxç?"~áÃÿ1óv£°`—¼ì1ì�À�ͺÀ‰€ @€ @€�z Èf­÷ùÕ; @€ ÐÞƒ‡í›1¥[yÐ;¶Œ½ugnÖòA'vä�^}ëCQù�=·n<5pà«9j9Gê ¿:œ2­#Wôá'ž‹õ^xHÄ—§LolûŽOý¸QîYበŞO>ÿ�?öží"XÌ»ïçÏŒ8cæìˆ]/³fëL~iZĩӋÌÖ\&¿\ÔŒšújk§N+ʹf¦¿Fi¦y ü»]þG ª¯Þ)ªÚí&@€ @€ @€@K^ýø¥¥Ípp @€ @ _ ë˜#µO³YO<ïÆ ÌØ™é:c—šã©Ìú|ïί�ú1K�j<;xP‘£ö�ÿÙ$âÿ~ù矙ôrãÙ!ƒ‹g?´Çæ‹,Óÿd›®º\±‡/¬˜átѻœ�.“&sª~ýÔË#f¾j®zcǬ¬»w̻Öë4¶¿ò´O4ÊåÂ3Ͻ�;ãʈ9³ê"ÇFù”£÷+¯åÏô¶9jvÙn£¨É8ÇS öa^ ööN`� Èf]àÄ@€ @€ @€@½Œ7.z8f̘÷sèÐâS º/0mZ1PÏ–Áƒ‹4üAƒŠ_ê´è½ÀÌ™ÅïÆ¾Ò1õÔ�!Å\Z½˜Ý1ÚŒÅÜgÞ)õÞÓÊS¦s>¼\©L —®«^Ú|®“'OŽú#FDìÖ»÷Iÿ,ö3ãÕ,Ñâáü/O?[är\ü½°ÄÈE溃—:æ$}~rq¬å—]b®ë´[e¾_ÍìÔvk[¯Ú3¤¸Bµr7w2qâÄXs±Å‹˜vsC«èB`úôbVâüWÖÅj]<5~üøxV6kDž"@€ @€ @€À¼ÌÍ:o#k @€ @€ V`ñå‹ý¿ðd{‘ÓºÌèÅ‹=t¹,2¢øVnÆ.Wl£'k›Çšç½�¤5…@Ïd³öÜΖ @€ @€Ù¬. @€ @ Õ;(rŽÎ©“ŠÖL}¾ˆ3§±c&ý¢`©¨À€EÃ+â°‘qT-j$ ›µF'SW @€ @€h…€lÖV¨;& @€ ЙÀ°Ž<ÇŒ�­£žm& ›µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U\µk/ý]`Ò¤IA0hРþ¡ÿ}$0cÆŒØÓ+¯¼qá…ÚM˜5kVLŸ>=âðáÃû;‡þ÷©ÀË/¿û›6mZŸîÕÎú»ÀK/½‹,²H‡Ðÿ>˜sæÌØßK,Ñ˽ºÓõÐæ @€ @€ôwÿýý ЕXtÑE£ÍC‡­\Ë5¸=òóðDód¶ç9ªb«2�5ó [l±*vA›ÛP`öìÙѪ̾5jT¶P“ª+�9ø#GŽŒ.äkbuû¢åí#�÷«Å_<šä»hís^ªÞ’‰'Fòý•lÖªŸÍöi¾{Ï»VoZ%›µ7z¶%@€ @€ @€ÀB†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€†Y] @€ @€è•€aÖ^ñÙ˜ @€ @€ƒ @€@Y`ÆŒñðòË/�ø›ßü&âŸÿüçˆ /¼pÄ�7Þ8â.»ìq×]w�8tèЈõ[¦OŸ�ºá†"nµÕV‡ V¿n¶¼G³gÏŽ6|ðÁÏ8ãŒF{^~ùå(>¼QS§ÂM7ÝÝY}õÕ#.»ì²}ص»îº+ö¶Â +D\j©¥úpÏí¹« .¸ ¶÷Þ{ÏWóþú׿Æúë®»î|mÕþ+/ˆëê/ùKt|¥•VŠ8zôèöGèó¾òÊ+±Ïo¼1b^o×_}”ó•¯yæyŽ¡@IDAT+ã€ú¼ ­Ýáƒ> ˜6mZÄõ×_¿ÏóÒK/Å>óµ _g‡ ÒçGií¿ûÝïF;ì°7ãœsΉmß÷¾÷õxí¿áÌ™3£‘7ß|sÄ|·¹è¢‹Î³ÙùõÙgŸ�皹ª«®…µÖZ«›ëWkµG}4|öÙgGL™‡~8Êo|ã#¾ùÍoޏ×^{EÌwõQ¨Ùò¯ý+ztÿý÷GÜzë­#öí=ùºë®‹}æU4vìØ(×{ÉWÀßþö·ÑÍ«®º*âÕW_1ß»¾ímo‹ò¾ûîqùå—�Øß–|×=kÖ¬èø&›lÒߺßEe³v�ã) @€ @€Ì[@6ë¼�¬A€@?7n\ôôˆ#Žˆxþùç7z�:ƒ ŠšÓN;­³þ—¿üeÔ,¶Øb�õëQÈÏù³_÷Þ{otjÍ5׌xÍ5×̳ƒ;ì°C¬³ÄKD¼å–[">õÔS»¿¬¼òʱò¦›nÚýM*ºfæM—óX+Ú‘ùjv~æŸy‚oyË[bÛtÈêÎv•yd¯{Ýë:[!ê3/,³WúC6ëäÉ“™�š9&�ʹê—+—Ý\×UÞ»2�µ¿e³æw;¾ô¥/ï1ÇÓ¸–òµ`™e–‰š¼weüìg?5_ûÚ×"Ö)̘1Ñ£ÌáZe•U¢ü·¿ý-âO<±³%·ÊºæuòŽ·Ùf›ÅSwÜqGÄÌ^o½õ¢œÂÍ[U·&ßì¶ÛnÝìBægÖXn’ï º¹yEWËŒæÌFÌ}ÝéHZ­¶Új±r×Wέ·ÞëtÏÝ9zû¬síµ×Fc2S5ûø¿ÿû¿Q³Å[DÌ¿?þñ�£¼ûî»G<÷Üs#.²È"ë´ä¿µ¼Ÿdno^W™uØYO.…R¦³u²>ß§å>»^³êÏN�:5ºð¹Ï}.â‰'ž1ïÿ;í´S”ï¼óΈ‡~xÄN8!â…^qóÍ7�Ø–ÌÁÏlÖþÓëîôT6kw”¬C€ @€ @€�Nd³vJã ú›À%—\]Î<Öc�=6Êûï¿ÄòÜ‘=ôPÔ|ðƒŒxÅWDÌ53'Ö`yä‘G¢ÿûß#æg¹Ù©,gîá¤I“¢ò¶Ûn‹˜5ùIfæºæ§â¹ÕFm…ÌÐÉš§Ÿ~: ÷Ýw_ÄÌ{Íúr¬k¶]¹�9“ZÎU—óeNSy�:•óšÉìæœë*¯¨¼f2ç+s¨3ƒ)ó¼F�™ƒ“å]›äš·ß~{¬–û¯÷œÂÏ?ÿ|ä3ŸùL”<ðÀFM(¼6×U�lîãñÇ•™ÇšÿBô£EMæMXäj<ùä“¿üå/G\zé¥#Öé_Üï~÷»èQ¾ºeÌ9jó-òn³ä’KÆš™Kžs¹v–3˜¹`ywÊWº�wÞ9¶Í×Ó_|1Êõ[>ô¡E§2v§w_|q¬–¯ŸúÔ§¢¼Í6ÛtgÃ~»N^uùþ­3„rÞkgëT±~„ ÑìòÕ•ï46Ø`ƒFw2'ñ›ßüfÔäýêÔSO�ræà7V«t!ï!™ =eÊ”èKÎÞ9˜ù^=¿ë3qâÄx6¿1–ïEsÍJw¿ÏŸ3üfëAûÏ×Äüž_¾�Íï%¼ë]ïŠg3“:gÎo3ôy“ì°B²Y+t²4• @€ @€�v�ÍÚŽgE›h‰À!‡Ç}ÃÞ1çrjnFþ6úÑGOå'Ãgžyf”³¦œÅÙ¼mUjš3’2ó4ó ówosFÈÌ=Ì™­Ê³j–šgè˼ƒ#FHýæ´íþYÎOÅó×`3‡zŸ}öéþæ•[3Ïxf7gãüñ(älª™ –ù_™#0räÈx¶ü;Ëy]eNYnÕŒ�ëgÌ|�æ™×r?Ùžæ=T«¦œÍš3²U«ý½om_]WÝoIÎDö /Ä&å˜wÎå–[®û»jÛ53³)g*ÏL¨‹.º(Z[þnG6>çÃ=ùä“}éÛ_µnì¶%…œ:�ç:¿ç‘óÒ:4žÊ9 ó>“wžÌ»ÏûXs³3£0ëË™¿ùj˜¯�Í[õŸš¼oyä‘ÑåÌÎr�®«<›Ï=÷\ò;R�ýBw¾³ÊŒé�7Þ8Ö/_3¹ŸŒyæëf¹¾\ÎïÕoVÍœ%3ç!ÍLÕrk dæxfFç·ÐN?ýôx*¿R�«+çç]a…¢_ùN)¿#•¯MywÊžæ;ó¬É;[ù}{ùšéŸåü·™ó®æ{Œü+¯ü7KJ¾ímo ¢ï~÷»?úÑ�FÌï|äœæýSO¯S@6«+� @€ @€½�ÍÚ+> P'�ü,·³<ÖrOË¿å�y9R=æâÉÏ·3f¿2s0{—:™u˜Ù¬)“Ÿœg¹ë94sƨæ\ÂÜs=r ÊWKs9g Ë9ÂöØc�Xa»í¶k^­f5yµd®_fèdžEÎr˜5™'˜/_]YŸ×U^�9£k×DéܼNfämµÕVÍOU®&3¿²Ùý3›µ¯®«4ÌûXf÷dÎ~^{™Ã˜yýù Îy§ÊûØâ‹/›×éÞ•¿˜œ&Ÿþô§£ÐœÇšÏf¬k&T979³óÕ?ïW™Íš¯†YN�¼Š:{ÌÙW3·®¼UæI=ðÀ±“þójX¾Š²œ™Ñù=�œ¡5s‡›×¬zMf.ç7òj)¿�ÊÞåý-ß5ýãÿˆÊr†u^'ùÞ,¯ÉÜ*ïWY_ÎoÍÜóÜO–—Zj©ª3Fû3�5;²âŠ+vÑ£ÔÈ™¦ó]Dæ-Ž=º‹­ªòT~+([›ÿ‚ò®RþVYwîWy½åšÍ}Ïlèœ]:_+›×É#V÷WrŽãü·ùÎw¾3:Øõu•³²f6ëI'�ëg–tþ%ÕìS­š¼·äony^'å÷NÍëä}¬³LüæõëQ#›µçQ/ @€ @€h™€lÖ–Ñ;0ÕÈßåÌöçgãåÏ�«Û¯rËó“É»ï¾;*³wùë™9;X~Ö]þd²<ÛW9‹'÷sÉ%—”wÞ(ç|�‡QȵÖXc�remÊ™÷ùϾѣœG¬œÅÙxªÆ…œù1³ÿžxâ‰èiæ¨fîXþ‚y9›5¯®Ì˜ËÌÁw¼ã5öé~ךïEÝß¶~kö溚4iR€üþ÷¿o°d¦j^{™“’ù_yf–Pù^ר°Ò…¼ýä'?iô"3îûaá±Ç‹^?óÌ33ÿ43ñó[™ãSÎKÍW½ò¬Œ–WZ¾s(g@çëlúg–zýÞW”šË™÷Å/~1žÚe—]"î¾ûîͫզ&¿-ÔužxvvÍ5׌B^uùî(ß}e6ëSO=5‡IÞ—òýFf¢eÎffn¶Ùf±~=òX³ãygÎrÎÓ:HãaþkýË_þ5™Áš÷óÆ 5(仩̋Ï÷T×_}ô+O"ß½—³wó~UþFBúŒ?¾ �Ì˜ÎØ¼ZþÊEùÛÍë´sMÞó³…åï/vÖæÌ¸ßi§�b…«¯¾:b挿þõ¯ïl“ Õg¶ø½÷Þ;Ï6wö=³ü]“¼_=üðÃóÜOg+¬´ÒJñTÞÁ:[§}êe³¶Ï¹Ð @€ @€*) ›µ’§M£ h•@fšäïHf¾ð…/D¡³¼•Vµ³7ÇÍì­[o½5vRþóü½éœí+g¤-Ïù•2™›SÎðÊÌÄüŒ7[uà 7D!?Î_DÍú?þñ�Q(çe}�bæˆefÁ1Ç]Ëìàò'çuêos_2÷aܸq�§2·"çJûç?ÿõÍ3]f¶Eùºjl…ÌåÉÏÛsnå¼êroùì–[nYÞ¤6å̰Ëîä\¢™!þä“OFefÃ�;6Ê›o¾yÄrÆJ<¬ÍÒûë*³S·ß~û0ÉrZ]~ùåQ“wªÌ¤¨ Ú\;’Ùåù¯)óyûC¯çJ•ùï+³s�ôɼ°ÌËWÌò«a×÷«|UmžI9óóî—ÇíoÙ¬¿þõ¯'â ƒŠrÞÉ•µ)ä•“¦k¯½ö<û•÷Ÿœ:_=s«{î¹'¶íì]SÞÁ¦M›ÖØþ‹Î×Ä<úFmÔx¶º…¼ogÎoÎŒ™yÐ;ï¼ó�Êohå·@¾ñ�oijÕ�?tŽ®ÅÃÌÕ½ñÆ£œw¡|¯¾é¦›FM^'9›êj«­Öؼù~•ïÇ+ÌQ¸òÊ+£æu¯{]Äò~æX­ÒË÷çòw†ºîÔ&›l+d6k¾†Ö#›5ÏuÆf�Ûo¿=*ó*êú×Mò¾Wþ»¯yo]×tv¯ëz«V=+›µUòŽK€ @€ @€@Md³ÖäDê B ?ÎÏüsž�SN9%tÞyçE|ÿûßñ#ùÈ‚8t ÷™óf¯ó“ÃÌ"Ìü¸Ì¡ÈÙåÖZk­F;ó“Ìæ\¹ÌoÍì°ÌxMÕ¥—^:¶ÍúÜI>[­Ï*ÝŸg!³íŽ8âˆX33+9ä�ynU§2ƒæoû[t*gºÌ3žóÇå,`y]�5jŽŽwvuåLO9cTÎ4WÎ~ÊÙÇr–±Ìl]yå•çØsÕf®Jöb‡vè¢;9ÃfæP¯³Î:]¬Y­§úêºÊ»\9‡¥Z}ÕÚ¼ÏçÞ23%ïêù-„ŸýìgñÔþð‡ˆ9�vÎ’vÀDMwf™Ì=·Ìש[n¹%šºÈ"‹DÌlñ¼wåìryµä³åœ¸ÎîW9KæÓO?{ël¾¿4Ìï7dv^yþÖöwëY 3ÃîÄOŒÍó¾ýæ7¿¹g»ªÄV™—š¯tù^¨ëfç5�3�–߉åÜ—yeN˜0!v’1÷–ßÉlôò+cþ‹n~�íº íül怟}öÙÑÈÌc͹}¿ùÍoFMÞ�ò_è'?ùɨÉïWÕïÝûÍ7ß½+ß‹2ù¡‡Šúœ?4ïlå³ßÙý*6é·ËŠ+®Øè{ÎØžÿÊʳ4VˆB>›=e}Ö”×QÎ×ÊŒýAC6k8ËúH€ @€ @€À�ͺqíš�ê älVÇŸkÎ9眨ß{ï½#Ö/û2?ñ.Ï–y‚9]æ¾øâ‹Ñ÷rFf&v6{f2–gz-&œÛæ'êõóÌÞuÔQ��zÇ|”ËéS_n¸atsÆŒ3«+¯´ÌËß.Ïf•WEÆæ«+g©Ëœ�æ Íü̼<‡]^Û9b=´>øàèÈe—]1s¥S8ï]™s—=çž{n¬“Ù¯ùk°å|–êj,ˆëªº½oyΞ–ûÉìïþð‡ñðŸøDÄ̉ÞgŸ}¢œ™SGyd”s¾ò‹/¾8ÊyF¡ÒK¾寺ç+]Ξ³ïå='sä˯ƒÙ弿5߯ò__Îäž÷¢f¢œI9¿=“™‰9zóšuª¹öÚk£;ùŠð¥/})ÊuÍ+Ï+'gøÝzë­çë$fîêƒ>[å÷�ò›åwVyW/¿w-gÕå;·|ìl¦ÅùjR[­œÙ÷?øÁ¢UïyÏ{"æo'|ýë_�òúë¯1.¼ðÂ(×oîã¼cg&fÎ*žwãÌÏù|çY¾Bºóî=¸úÕ’ß6øÀ>½>묳"朿‡vX”ËßÛËobe}¾K¨|ȲØ?d³öÏó®× @€ @€ô™€lÖ>£´#ê$�óX}ö³Ÿ�NeÞAÎ¥•¿RšófÆkÎÐZž ©êÍóëå ˜ë®»ntí¶Ûn‹˜s„•³óÓòrM³Cæ\ä:™Ñ“ë” ·~Ù¬\pAt3cæVlµÕVÍ8µ¯Éóž¿K›3Õf—³&óRóß]æìä³åLœrþEÖg.OÎ`ØÙµ—9;™G–ó´¾á o¨�vÎ4—™†Ís8fþÎgœýÍL–œa3k>ó™ÏÔÀ¡o¯«f�¼·gzó³™g�wÈr†KóšU©Él»lmÎÄš3&çì~åß•Îï7œzꩱòÇ>ö±ˆ_üâ#潮ꯉù¯)säË¿4�pyÿÉlÓæYDóÙò)geÍ<ÄUVY%”šÿµFe,™×Ÿ¬9“uæ½–çÖÌ5ë3»0{ÔõÓUïu¾Ší¸ãŽÑ‘ùýFK^{o¼ql;räȈù®,÷Sþ}ù¼Þš­2o±¹¾5ù=³øÃÑ�|—ž>§�vZÔ”3 óz˹YëqßÎ3¸úê«Ïq*ó>œYùù-–,—WËwïýgÆÌrß;+çý63ëó[Vù½�4ÜvÛmcÃü‹&s]=ôШɿ¿ûÝïF9ïä�í_}�ÍÚβ> @€ @€ °d³.@\»&@ ºù ðw¾ó�F2sçŽ;¬?ðÀ£|ûí·GÌ_È­w¾É#�<=ÍÜÞí·ß>ʙᕹ9SXùóðœ]îž{î‰5›—‹.º¨¹2jr>©|*3ÖZk­¹®Ùþ•ù‹À9gSæf¹ý[þZ¶0såò:É3ž™8™í•yd™ãœWZÎxõ§?ý)™¿/Üõ’ûÉù^¯¿þúØ*¯áœöµìé‚;Vg™qyÄ̪˼×Ìfͼ§zd³v¦:¿×UgûÉÜŸ»îº+VÈï44¯™9Dõ˜“´œ3¾å–[Fg3÷9ÿ½Ü÷|½Ë×ÁÌ{½ôÒKc…Ì1Ïœ»òúõ(—ï?™wŸÿ¾ò÷»3æ:™Í”™ÎùÎ!gkíΜ˜ë­·^på/\g.Õ¦›nZÀ9z‘b—\rI£>gEl<¬e¡œÇšßæ)_9Ùåæ÷“yŸÏÙ{s�æy{ó~•ß7j¦Ëweùn­ùÙêÖä¬ÐùݲÌcýüç?ßèÎn»íå«®º*bÖç÷?r.à¯|å+QßõkhcW-ä=$ïEùÎ'¿µ�w¤ÌÊìl¶èŠv¹Oš�ßÞÈûð™gžû¼å–["ž}öÙóõ1s¨wÞyç¨É¹\£KùßxÖˆýM@6k;ãúK€ @€ @€@ ÈfícP»#@ ®™Y°Ùf›EO9唈9WÝÉ'Ÿåüýåü<³®ù«Ê™˜¿fû‡?ü!:›™™i˜Ÿî¦@þæióL¯Ý÷©ú<­'œpBt6gÍùø¾öµ¯ÍµûåHs…̹HÕü„|£�6šë¶U¯LŸÌ¾É¬ÀÌÌù[óßÝÚk¯ÝèffŠeÎ]^�ÝÉCÉYír×Ìéhì°ŸÊ9P9¿Xf —gI®Åü^W�õ=ÝVZi¥X¡<‹t®Ÿ×gÕïTå¾—sp2ƒµ9�µ¼~öýMozSTfŽyÊ×5›5óëó¼o²É&Ñë‰'FÌ ñ”ÉÔÌÙ0óÊÙ|óÍc…¼«çš�ÅÜ6÷ÿÀÄjuýךߒ)çÓÕé{��ßr}~+è�ücTæµ±ôÒKG9¿«Q^³;å¿þõ¯±Úý÷ß?וóÕs‰%–˜ë³U¬ÌyEóýRfòrÈ!st$ÿµî²Ë.QŸï1ò½z¾Û}÷Ý£>ÿmαa fÖjÞµrVúÔ¸òÊ+£w9·x~ ­³ èf„Ì�Íý4?[¿šü÷òéOzž]Ëo½äjùÐ<7©Á y=ôÏ÷Õ]Ÿ>Ù¬]ûx– @€ @€ó�Í: O @ Y ?ÛÌùžn»í¶X!³xê—ͺÅ[DïòSëÌÌÏ-Ó$gh-†YÎ+Ì,¹ºæÊ5_Í5ãÆ�kTf®S9ã©ñÔ\ 9Ûo>•¹Òs]­¢•™Q’sðå<Èå«(ghÍßøÎ–¯«#FDåÖ[o݃¾çž{°aÍ6ÉܱœoºN]ëÍuÕµCÞ÷òÚëzͪ?›y÷Ù‹œ“.31»ÎØÍlñܪ~3?æ+þ®»îÌ™X3ß0¯ŠœÓpÏ=÷lœúòý*ó·Ûn»x¶\ßX¹‹Bæuf–ÙünÛÅnÛê©rÞe¾ƒÊW„¶jämL^]½•Ï_?O½Î2¦3'ºNwþ¼~2ã;ó ËùøÍ'.gF>蠃⩣Ž:*bÎØ^¿lÖÌÞÍwày)¿{Ïë-ßwÍï½e§�vj†íç5Ï<óLÜ}÷ÝGޱüJZoœüVY½ûسÞÉfí™›­ @€ @€ ðoÙ¬.ôP œÝ“³kõpGm¼YwrQç÷“ð6în7íüóÏ�=fìz×�=öX¬PžË)¯¨ò¯~w½‡j=ÛœkÓ|5×T«�íÖÚ‡~¸Ñ¤m¶Ù&Ê™—ר¬AÁuÕû“˜³iç\«×]w]ì0óźž:ï`yôò}¬÷íi‡=ä÷9Êÿ^ÊyaÙ®ïW]?Ûu{³m×{n‡gËÙ¬å9¸Û¡mÕjCwÞ-tç]µz�3#g›»Ÿ�ßÍÊ­žxâ‰ju¹›­-߯:Û¤Þ÷–Îz½ êûÛß6v{ðÁG9g¼mT*ôCÙ¬ýð¤ë2 @€ @€}) ›µ/5í‹�Š äüD¿øÅ/¢ýo}ë[#æÌk�u'»óŠ+®h¬�¿Üx¨@€�*�Ù«­¶Z¥ë,°¼_ýð‡?l´çý@ ,�ùMúЇ¢2³YþóŸG¹³lÖI“&ų—\rIc'ù{ß�‡ º?~|ãÙœ¥´ñP�À<Êw›«¯¾:ÖÏou=�ö}÷Ýרóúë¯ß(+( ä߆9£qùû‹åur¦û“O>¹Qùîw¿»QVèϲYûóÙ×w @€ @€ú@@6k ÚU¸é¦›¢ ûí·_ÄüÍÄï}ï{QÞj«­"–g³Ê_“<öØc£>Ÿ4óXs&»¨´ @`� dþ×¾ûîGÉÙHO=õÔ(ç/¡—gË5¿úկƳ7ÜpCÄü-oÙ¬AaéB`¯½öŠgóº:î¸ã¢¼á†F|ßûÞ13^§M›åoûÛ}ôшßúÖ·"®´ÒJ-º#ðÔSO5V[|ñÅeÝ;vl¬vÐAE<ýôÓ#~å+_‰xÔQGEl¾¢2Cÿè£�ŽgW\qň;î¸cD �f�³Ï>;*ó»ùJ—ßÊWÀœ‘üãÿx¬së­·FüÜç>qóÍ7�h! ›Õ5@€ @€ @€�^ ÈfíŸ� ¨‡ÀßøÆèÈ�~ô£ˆ‡~xÄÌN]e•U¢œù­/¾øb”¯¹æšˆ¹äŒNgžyf<ìz.×oàèµÀ˜1cb¿üå/#zè¡ßõ®wE=ztÄ-·Ü2bf–ïW9ëôI'�Ïvç7©c5K¿È™ Ï:ë¬ÈÌÖÌ€>á„¢&_1o¼ñÆ(ßqÇ÷ßÿˆ‡rHD �î <òÈ#�•›sO)˜«À Aƒ¢>3îŸ{î¹(ç·Í~ó›ßDy—]v‰¸ä’KF¼ë®»"þêW¿Š˜ïí3W1ËQi!И5kV”3_õ‚ .ˆrÆÍ6Û,Ê9Ok¾æ&|p2K:kD²Y] @€ @€è•À€qãÆÅ23¢g{êì—×z¶7[ Ð2Óª7=]pwžüôòÊ+¯Œæe.Øý÷ßßhjι³õÖ[GMæø,¶Øb�gª(�¿K›s-µ*Ë/¯º•W^¹˜­jU{ÍPè±@þ:mÞëÜ]bâĉÑÂßýîw¯ºêªˆùÊ“'OŽòvÛm1ç˜Þ{ï½£¼àsËk 0{öì8JþºñkóËìy��{î¹qÜÿû¿ÿ‹øðÃGÌï|ì´ÓNQÎWÜ)8Z**ðì³ÏFË3û/_\G2_¬|Í\{íµq83Ý/8óVí9ï!™­œù§ ¢%yEåUtÅWÄ!2ƒu„ QÞb‹-"f6bþ|~ÿcA´Ä>_�¼®òýUùNÒ·GϬÕóÎ;/v›sÜç·ó/Á¼–rÖûwm÷m�ì­k�|÷þÊ+¯t½ZÏæï"Èfí‚ÈS @€ @€˜·€lÖyYƒ�>hçlÖ>זּ¹@;d³¶9‘æõ@àµÉfíAÃlRi�×>›µÒ\?_¯e6ë|5ÌÊ•xm²Y+M¤ñ=xm²Y{Ð0›TZ@6k¥OŸÆ @€ @€ P“Ôç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >ƒëÓ=!@ ¼øâ‹ÑÑ3fô�îêåxùå—ǘ5kV£¬@ 7Ó§O�ͧM›qÀ€½Ù•m 4fÏžå|2dH£^�@ï^z饨É /Ñ]«÷žö�y¿8°Èî4h}"�÷«¼S lP«OPíd¡|÷¾È"‹ôÒB6k/mN€ @€ @€@0ðß߯ý'P9�Ìß‘ÅS¹×¶ Îk)?w]µíiª\Ã^yå•hs溮*wúÚ¶ÁyEe¾¡ëªmOSE–WTFÙ¬=‰mØìòýJ6kž Š6©|¿’ÍZѓ؆ÍÎwï½o˜lÖÞÚ @€ @€ýZ@6k¿>ý:O ŠC‡�fg¬bûµ¹Ýr>ÖÌÜq]µÛÙ©n{ʹ`®«êžÇvky9›ÕuÕng§êíɬü®Êw°ª÷Kû[+P¾®d³¶ö\ÔéèåëJ6k�Îlkû’¯}½Ïi•ÍÚÚóèè @€ @€T^À0kåO¡ @€ @€ ÐZì­õwt @€ @€*/`˜µò§P @€ @€h­€aÖÖú;: @€ @€•0ÌZùS¨ @€ @€´VÀ0kký� @€ @€�Ê f­ü)Ô @€ @€Z+`˜µµþŽN€ @€ @€@å ³Vþê @€ @€­0ÌÚZG'@€ @€ @ ò†Y+ u€ @€ @€�Ö fm­¿£ @€ @€ Pyì•?…:@€ @€ @€@k ³¶ÖßÑ  @€ @€¨¼ÀàÊ÷@ 0ŸãÇ��-®¾úêˆÇw\Ä»ï¾;âí·ßq“M6‰Øýå±Ç‹•Ï:묈W\qEÄgžy&âöÛoñýïÄm·Ý6b=–»îº+:2kÖ¬ˆÿŸ½û ”¤(,ÉaÉH’´’“ ˆHF„ ˆ¨€$Y¼ˆá¢ˆH¼¼ˆJQ@0�AA$ ‚’ó’Ó Àva Ë÷Þk;ß™�³sBï™é~æGmMMuuÕÓ½=sjÞ©î¯U5Z�âå—_Ž—nºé¦H�;î¸H/¾øâHO=õÔHwÝu×HÛLœ81*ßsÏ=‘ž~úé‘f›;í´SQ™Ê<ÆŽc¹ÿþû#Ýpà +3®Ád¨Î«×^{-:“ר /¼0òyÅ›o¾ù"ÿ‘�|$Ò­¶Ú*ÒUW]5Òj<œW­ŽãP]aÞ|óÍØÅïÿûH/¹ä’Ho¾ùæHßûÞ÷FºòÊ+GºÉ&›Dºé¦›F:bĈH»ý1a„ÂÕW_é:ë¬éÈ‘#»}PCÒÿI“&E;�<òH¤çŸ~¤GuT¤Ï?ÿ|¤é6ÓL3E~0�|WÝm·ÝŠFöù­Ø¼C2Cu^=þøã1¢üœöÁ~°CF7˜n Õyuî¹çF7¶Ùf›~uæÞ{ï�úË,³L¿¶ê´Êy½Zl±Å¢c‹.ºh¿º—×ä_OË/¿|¿¶íüÊCûWá;ï¼C¾á†"Íóíºë®‹|þïþèG?ù<ó�qši¦‰’î} Õ_…o½õV ä'Õ4™e–Yº—%z.šµ«ŸÎ @€ @€ 0ü¢Y‡ÿèSAà…^ˆ½ä÷‡ù�îàwz÷ÝwG#›o¾y¤O<ñD¤K-µT¤ù-ñ)§œùLò“ŸD~÷Ýw�´Ûù}cFItûX†ªÿ_ùÊW¢©ã�?~H<ãŒ3¢�o|ã‘þýï’6;¿‘ŒUyã�7Úìêc�=5ï¸ãŽ6ëgµf˜!2ŸúÔ§úµÕpUªó*#ËöÜsÏÈå—_éüóÏék¬i^Ç2ºÿðÃ�’cŽ9&Ò½öÚ+Ònô÷¼ºêª«bÈ/½ôÒžQ*óÎ;ï¶�š› Õ&#æöÛo¿èü¯~õ«b¡3ÝtÓEI¾÷ešå¿þõ¯£¼±Ÿy½ÊØ¥bø“Íä•g×d+ôQ¸ñÆÇ«ï{ßûú¨Ó /e<éÎ;ï�Éßa”Ñ«¼òï³Ï>e4Þ!m¶^µêp¶�WþQ£FEµî�˜Úóê•W^)Ð2:5£;‹ÂÉfò“Ãd_ê¢Â<+ò=±¿Ý~õÕWc“gŸ}6ÒjD³–ñWaþ¶ãÀ ¥ï}ï{ò’K.ù÷¿ÿý‘žvÚiEš×±Ã;,Jã� Ëc0>ôÐCÑ猕þÀ>ùüÿžŸòïëî½v‰f–ÒN  @€ @€¨Ž€hÖêK#!@ �üfl³Í6‹:™æ·Žßþö·ûتÕK¹ÂN®¶™q¬'�tRTÎ’üÞ;W«Ùh£�¢üK_úR¤+­´R¤¹bdjòxøá‡c¤1×þ�—[n¹¨¼ÄK´¿É0Ö\a…bïßÿþ÷‹>dÄÖ_ÿú×¢¤ýLFÃ}ó›ß,6ɵãÅŠ—j›YpÁcìsÍ5W¿ºë[ñÁŸWãÆ� Ÿ-¶Ø"Òûî»/Ò“O>9Òí·ß>ÒŒ�ËØ–Œ³Ëò½÷Þ;^]sÍ5#͈×ÈÔê±ôÒKÇx3¶"#¦3úr�ˆò믿>Ò 6Ø Ò<£®¼òÊÈwËc¨®0]tQ 9¯K¹þæŽ;î%�ñ¼O—޹.pÖÌø�n|?s�¹8ÉÏoù™ª¿¿iLºeÛ…Z(ºš×ügžy&òùŽÙ-ýoìçОW�¿TÈwº/~ñ‹�»“¯‰ÀÐþU˜hùK ŒcÍOPù‰+㦧�¶'º1ÿ?æulžy扒gœ±&æÍÃÌ•XS&ßçœsΨvÅWDš¯vþ/9šÇ•%¢Y[É('@€ @€ @€@[¢YÛbR‰�n˜m¶Ùb�ëyå}–Íz饗Fk·ÜrK¤¿3zôèÈç7r‘‰ÇŠ+®iÞ~Ûm·�ü�~ô£HÏ<óÌHëóȈ°9昣_Cî®o/›WÝ3fLŒw`Ѭ�i¢ýüç?�ŒhÖÆS(ïcžicy•òƒ?¯fŸ}öÉ‹\—-׺jTÊ«VÆÙåšb¹&l® VÏhÖ<¯21}òŠÔW˜%Ó]QÒCu…ùò—¿'Rž!­~¥‘w9?è ƒ¢æ†néé§Ÿi–L?}]þ Éó¤yEÚ×_=4òÿió«ñR=2<Óìvþ¦g¨¢Y/¹ä’hö¿øE¤¹Šô]wÝù:G³æJ£­Vž{î¹Ã'#Â^~ùåÈ7>òªÕùgÝОW�Ѭýý\Ú¨'Ÿg]þ¶/Ï®LÇ�8«¬²J‡ í_…÷Þ{oŒ7W*_d‘E"þùçGÚøÛŽÉß.œp ù4ÒîúüPt{H2ùØÏ;óÌ3GËùŽ™+w×߃�,¢Y5ä  @€ @€ Ðo�º|�Üo @ µÀyç�W¼¸ÕV[E¾1޵x)2묳Nñô¬³ÎŠ|®à9ß|óå�–ɨ·üޱ¹o¹&ÚÛo¿/5ÇGdýŒËï'ÓæÖ”ÔG Ï™ŒthuFÜd|D«ó*ÿ—eŒas JZ ä�Ê[½ÚXž«‰eɵ×^™<"�mQöy•W¼jÇM7žíç3µUkc;�÷ò;vl¼ôÏþ3ÒN~Ìþ·Šl|luMË2Z°ùPžWy�ææh�Îÿ—£›:iÞ‡:�”wëÎuð×��:=ª½ ÕyuÝu×E—ò3[«¾¥^ó«/–+w7¿ZÕ’_|±Zõ¢YósT^[Ša™\Ý8¯]­>eå/6òÚž­å¹šWìÜöꫯŽ6³<ßóŽy­›uÖYãÕÜW«¿ŒŠ.U&ÓøWá^{íãjŽcmlwý’chÿ*ltÈxÕ\K:Ëó½2?çgìy^ó·ê–¼hÖn9RúI€ @€ @€@‡ ˆfíУ[t¦@®èzÎ9çÝûð‡?\ä›3ù}f®‡xñÅG…|0ÒNŽâyâ‰'¢‡÷ÜsOópz•´º¿v®Ç—÷I﵉§µÈè‰k®¹fŠ­Î«\Kk½õÖ+Zè;v£¨Vd2΢x*ÓK qíÑŒ:ìüXÎ2ΫF–Œ¶Ès¯±\¾}�矾¨œ’y7ᢰc3y½Ê˜ÓV�¼é¦›Z½åŸúÔ§"Íh¯\¿/?4nÒ|UÌú¹mcÍzæó7@?üp ÿg?ûY¤ùÉê…^èR�¡:¯6Ûl³.®n7_‹†«'eì7×)~î¹çúhü�ˆW3m®–kmç_Ï>ûlTÈkQF_ftjÞq!?MeÚøÉ¡¹Íj—ä»Ã©§žZ ³zâeüU˜ñÎÝWž%‰¿ÄK¶Ý•ÍÚ]ÇKo  @€ @€è8ѬwHtˆ�Nh¼Kiö3ïåÚwŸ—\rÉ¢BãwéEaGeò›ÃVßÞzë­ÑÛ\�©�Uù:jh:3Œùít®eÜÜ�'Ÿ|2 ï¾ûîHÛ�йï¾û¢~nÛÜfsI«½7׬gÉ£�>Z |“M6‰|ç¯IZÆy•�kf f㊜Y'£}3.£ “)2Òçä“O.JößÿÈwþy•Î_¢�/2yíË/¿ö±HóñôÓOG¦ýkÚ¿¶«æ¿7ÜpC ì¨£ŽŠ4cĶÛn»b¨}GÕ:03´çU0ÛqóÍ7ÇÓ•W^9Ò\+3?µÞ~ûíQ²ÖZkEšñ‰‘©á£ñªž‘tyGøüÿ˜Qö‹.ºhȬ¶Új‘vך�««7ܼ^ågûQ£F5W(JreÌüEZFª>þøãñêC=i«¿ŠÍk•É+vÆ{æ*Û�+�Vƒ¢Œ¿ ówH¹ ùì³ÏÞ *×c½í¶Û¢¼{×ùÍÚë°zJ€ @€ @€�þ ˆfퟗÚÔ\ ñ.¥sÍ5WhÌ8ãŒS4i\‡®ñ»ô)n¨}äÊÈ}¯�ÜÇæ^ê%p×]w%«®ºj‘¯[fܸq1äŒ4\n¹å"Ÿw¿Í¸žyæ™'J.ºè¢HónÝ‘OkþÈhß\13WÒ<ñÄÃ$W3ÿ¾ùÿüÏÿ¬­Òˆ#bì™æ½›3J:£“%W?Ì:µ…Š��?>Ò}÷Ý·@8âˆ#"ß-qÐE·§Zæþûï�}åy•ш¹ëŒ³Îˆ°ü½È*«¬2ÕzÕi;Ê5dzWë®»nÝËèéï}ï{Qg饗î£fõ^j¼"UotC;¢ŒƒÎ6ó~}ýõ×Gá/~ñ‹H¯½öÚH—_~ùHó“Õ.»ìù\c:25|äÿÄü5RsÌxF³æï&S8Wî.(ѬÝu¼ô– @€ @€�ŽÍÚq‡D‡èd�ÆhÖ\g-£œúîs~_—uú¾hßíx•eäuéØc�-‚0aI@IDAToµz`Q¡Â™W_}5F·ÒJ+Eš±«�ƒ]{íµŸF>#[{Öêéĉc¼­î7}æ™gÆ«Ûl³M¤â4óÄÈ33š5K2MIJ§œrJ€Üxã�‘þøÇ?Žt™e–I"i/�<—r=ßÕW_=^mü\šù¼š]wÝuñê‚ .i=#éF�c¿ôÒK#Ýo¿ý"m\�4W'?üðãüì³ÏŽ4còÊÈ7¯ …5ȸûDÈu·�;î¸xúÕ¯~5ÒŒ‰þìg?ù¼š}ûÛߎ|®W~ÁD>ÏÀÈÔä‘¿þyê©§b¼­âÄsýèŒ`Í_ƈf­Ééa˜ @€ @€ø·€hÖ[È @`Š�1S¬\Th\¹/W^+^ªp&×ékü¦·¿ƒÍ»v¶Š�êokêWC ÿ7å=‚6¢\ݯ�U•Ö~7nuÒI'E·ÿþ÷¿Gúµ¯}-Ò\“´Ç2ø>?ÿüóÑH®­6øÖêÐB¾¯í³Ï>1ؼóò}÷Ýù\í7×7Ì8Í\¡µÎ÷:Ïó!ï³Ü¡#š5Ïœ½öÚ+ >ñ‰ODºë®»&š´—@®]xë­·FùÜsÏéüóÏß«N>Í;,ºè¢ñôöÛo�týõ×�´nÿóÝ-# ›?Ïç»Þi§�2m—ïY²÷Þ{Gy=ù©)Wþ}óÍ7¡ñÌÉOeùjÝ"ñ_{íµâ”È•X×v5jTñj®�œŸµöÜsÏ(?à€"=÷Üs#mô,6©d&W½ë­·btYßj˜K,±D¼tÕUWEš+´.°À­*w`¹µY;ð è @€ @€Ý$ šµ›Ž–¾ 0ì�«¬Ž3&ú“ßâ6+ÞØÕÆ]ë³V®i•w¶mÔh?¿ì²ËFå%—\²ýMÔ¬¼@FRäZilƬ¸âŠÛ¼b[e$Ô!‡ãÊ•"3Ò§bÃì×pr½°æHÃV� ællÕfw•g$Î÷¿ÿý¢Û¹sÛm·EI–ñ‹_Œ|žo¹Úf}~ÛqÉ%—ÄØóÚUE&ã 3m,Ïüã�?™üt±å–[6W¨XIúd„Wíè£�ŽLþ®¥bƒ’á䙓ñtk®¹æÛÌÏTÏ>ûlǪ̂áz¾öý‰=é’q¯Ízà 7„X�£YóÎïù?1¯f­N¶Í6Û,^Êè×VuªTÞø{»\9cŸçšk®^ÃÌ÷»|̸׋/¾8êÜsÏ=‘®¼òʽêWïé /¼ƒº÷Þ{#Í+Oß1¼ù‰t‘E‰úùÉaæ™gŽ|óšæQØ�ѬxPt‰ @€ @€�nÍÚMGK_ v�ÆhÖ¼»kÆôm‘ßàeç›ï[=ìƒêW¦›nº¨ß¸Úl«Í_|ñx)ÓVu”H�Œ.™~ú),É(‰­¶Ú Ý rí¹wܱh'£0ªô¶ýó*òž¿y=ïûª^ EfÝu×�´ýú�ÛV5Ÿ‘;«®ºj ðÄOŒ4Wd;á„"Ÿ÷_Þxã�»tø�çUß‘q9ÀÓæ]ä/f²ü˜cމLÆÜ}ìc‹|7¾G´^e´xÖÏ8¸Æ¨ºf«,ÉØ±¼Ê寬Úù=V«Öª]žëØæó÷ ¹öh÷Æiæ§÷�ý† Ïœ\+9×�Î30}ÏÛ¾ã«wÎŒ9²TF°6DZ"“kצä_þò—(ÉëX÷F³¶ÿWaÞS!×cmüÿÕèӜϸ×Ü6×½ÍÚ¬¤„ @€ @€˜rØHmH¨@ówhÿøÇ?¢±\;¦U«<ð@ñRßßsÕ:6³ÒJ+ulßt¬{Zh¡è|¦Ý;ŠnéyÞå|ôèÑÑá\¡ïÀŒ|7ÆõmÞßó*ïÖÝw›Í¯6¿/4שsIþ $×ì»å–[‚"£xº7š5#7ß|ó6ë,³ÌÒfÍ:W{î¹çŠáçú¡?øÁŠ’¾3�¯}ß½ºïv†÷ÕöÏ«ŒIüð‡?<€§O÷* `ȃÜ$»Ö¿9ȇeó 6Ø`�ûͨÕ\»v�MUfóÆ¿þ®¹æšWFûfÔj«aÎ9çœÅK�¿w, »(Óþ_…iµð ÷kt-»Î:ëÄVyökóa¬lmÖaÄ·k @€ @€ª šµ Gјj¹*Ó¾ð…ØãgœiÞý°ñûÌÆÎdtÆ¥—^Z.¹ä’E^†SS`„ ±»¼còå—_ùvØ!ÒýöÛ/Ò{t‘@ctOž‡]Ôy]� {ì±Gì%Óvv—±œ·Ýv[TÎOb«¬²J;ªC`Š�>úhQgíµ×޼(ÎD¦˜wÞy#Ÿk­^}õÕ‘3fL¤¹¢hQ­W&WÆÏÂþFwöjªëžìsæÀ¶^ѬÃëoï @€ @€t½€hÖ®?„@€ÀÔØrË-c§Ízá…F>Kšïàù§?ý©è^ÞÑ;¿ù, e 0r=Ö=÷Ü3öuæ™gFúÙÏ~6Ò¼ó{;w©ž �´‹®È»“ÿò—¿ŒÞn´ÑF‘Î3Ï<}ôüµ×^‹W/»ì²¢Ž¨Ã‚B†�© ð»ßý.ö2jÔ¨H—Zj©>ö˜×«ãŽ;®¨“¿`+žÊ(2Êr×]w�’ŒfÍu¢[E³Ž7.j^tÑEE ‹/¾x‘—©’€hÖ*Mc!@€ @€ @`D³º] Ðí›nºi aõÕW�ô¿øE¤yÄ�wÞ9òyWļ÷׿þõ(ÉÇ×¾öµeýK€�©$ðâ‹/ÆžF�é¹çžé§?ýéHO>ùäHGŽ©�öþüç?Gå\Õ7ï2œw„ÿèG?幂y¶ö�ü#2GuT¤×]w]¤Çš+Ùe)ÊÈ{$l·Ýv±‹é§ï™ú8餓"ÍOò3Ï£SYd‘Èg|뫯¾ù+¯¼2Ò|,·Ür‘9ýôÓ#í{-׬/í�gžy&ººÿþû÷êð /¼Ð«d÷Ýw�’üÅO¾´Å[D&cÁzUö´æCu^Í7ß|!ùë_ÿ:Òü…Ùg>ó™ÈÏ5×\‘æïÒ2Ò°ñz•«Nçç4k—TÅCûWáûÞ÷¾ðùùÏi^Í2ú‡?üa”ä;f~z¿í¶Û¢$ïÕñå/9òUÍZÕ#k\ @€ @€L%�iüñØU~Ï3°}Ž1b`ÚŠ�Ú ä÷ƃ~¯<Ë.»lì.×Km¿Ûn»mTþÕ¯~ÕÇ&cÇŽ�W3B'ãÅ2:,WkÝi§�âÕµ×^»�¼4¼&LˆäÚIý�YÈHçÃ;lCx饗b«Yg�µØö’K.‰|ÆG…mfn¼ñƨ¹Æk´Y_µ²Þxã�ØE^ëú»þéP�WyÅË«ßÀÆ»Ì2ËĆ÷Þ{ïÀ6·Õ� Lš4)ÚÌ«ÇsÌѯö˸Â<õÔSчË/¿<ÒŒ3fLÑ«ÕV[-òk­µV¤ãÓßÿ ES2SA ?½äozò=±��æ:ƒ‹.ºh;•{Õ9á„¢d�=öèUÞÎÓü…PF‡Ýzë­±I®üÛζêLM�\úh¤ù›� 6Ø òùnØß>džSA ?½¿óÎ;ÞW®ò,šuÀ€6$@€ @€ @€@�€hVçà 0õ£Y‡a�vÙ%ƒ‰fí’!êæ0 &šuºk—]"0˜hÖ.¢n›ÀÀ¢Y‡­»vÜ%‹fí’Áéæ° &šuØ:mÇ/ šµã‘ @€ @€ P‹Ôã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=L³Öã8% @€ @€¥ ˜f-�Và @€ @€ÔCÀ4k=޳Q @€ @€ Pš€iÖÒh5L€ @€ @€@=¦¯Ç0�’�ê¼øâ‹1˜é§wùªÎ1Þ‘¼ñÆÑ�wÞy'Ò#F ogì½2o¿ývŒeâĉEZ™¡Ȱ L˜0!ú�çØ°wF*#ðꫯÆXòݰ2ƒ2�aÈóêÍ7ߌžL;­¯a? é@¾æ§,Vä vÀ0Þzë­èÅsÌ1Ⱦ¸Ò Ðæ @€ @€Ô]@8XÝÏã'Ðuùý’¨Ã®;pÛáü>|ši¦‰Î4ÓLÛOë.�Œ’Î8‹‘#GvWçõ¶c&Mš}›nºé"|´EÇSdžE ßçœsÎØ{懥vZ1�¼^Í:ë¬1®ÌWl€†3,ùëÆü|%šuXA%wÚøÇÁ P4ë`ôlK€ @€ @€�÷˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€˜fu @€ @€ @`P¦YÅgc @€ @€L�€uxî¹çbÈüã#=úè£#½ë®»"½õÖ[#]e•U"mõ¸æškâ¥O|â­*L±|�=öˆ:'œpÂkvf…;ï¼3:ööÛoGÚ·Usÿßyç�(üÃþé‡?üáHçž{îæj]ZòòË/GÏoºé¦H�;î¸H/¾øâHO=õÔHwÝu×HÛ<ñÄQùŒ3Έôæ›oŽôÑG�tÍ5׌t½õÖ‹të­·Žô½ï}o¤)0vìØÈÜÿý‘n¸á†`ÚóêöÛo“sÏ=7Ò«®º*Ò7ß|3Òõ×_?ÒÏþ󑮸⊑vïãòË/�ί°Â ‘Î?ÿü½’ÿCg›m¶(_zé¥{½Z‡§ÿûßc˜^xa¤¿ÿýï#½ûî»#]yå•#Í«ú;ìù|à‘¶óxõÕW£Ú/ùËHÏ;ï¼HÇŒi¶öÙÏ~6òy½ša†"ß��¼¿ï}ï‹Î/»ì²½†ðÐCEIÚ®µÖZ½^­ÃÓ×^{-†yÙe—EšgW~¦šo¾ù¢ä#ùH¤[mµU¤«®ºj¤í?ó™­ý½ WMçUßòC{^å§Ð믿>vzþùçGú׿þ5ÒÜËÚk¯ù|7Ül³Í"?ÝtÓEÚ��Ç{,ºýÔSOEºÎ:ëô /¼%7Þxc¤o¼q¤ÓO_¯I¡2΄ü”žï€ù7æƒ>¶+­´R¤ùn¸ÝvÛE~Ô¨Q‘VãqÇwÄ@¦™fšHÛùôøâ‹/FÍ¿üå/ý~~žï®ÿ�¢YûuˆU&@€ @€ @€@o�z}qÑ{ôž P�üæv›m¶‰_}õÕ÷Œ3ÎÛæ·Üí7’ñSÏ?ÿ|lò¡}¨ý ;°æ[o½½ÊhÖþvoÒ¤I±É„ "Ío’ûÛBgÖÿÊW¾;þøã‡¤{c˜‘_i¸ûî»GË ”gï)§œ%›o¾y¤gŸ}v¤3Ïòèç™ÐÜÿü?5°+XskÝU’W�¼ž<üðÃÑùe–Y&ÒŒÍÌ+Ïo~ó›(ùÑ�~é™gžiÆÎGf²�ŒLÙvÛmãՌߙk®¹"Ÿqa/–éèÑ££<#ý»1?ßû2m¦Èòj\yšG×wÉ#�<öÜsÏH3–<£È×Xc�(ÉXé<7?üð(9æ˜c"Ýk¯½"mõªÏl­ÚïœòÁœW¯¼òJ $mû;¢ü�qýýÝvêÔÚó*rÀDçüãGšïƒë®»näó}!¯{™~á _ˆò“N:©¨™.zäy•ãjîvߟ”ž}öÙØ$ÿriÞ¶ï’9çœ3*|üãï»Ú0¾:´gB:ÿêW¿Š}ýë_�4ÿÖËß‚äÙ•Óù>øÝï~7êd~Ë-·F‡¡Úõ믿M�1¢ÍϽ-¶Ø¢�­òH]yå•Q§ÿfÍÚÇÁõ @€ @€¦, šuÊFj P�\Ï%£P3Íïx¿ýío÷kt�qÉ%—´¹U~Ÿ«®¾úê±U×èlsG]W-×ñéºnO¶Ãy|¿ÿýï¯þú׿Ž|~ƒ]N1ó·¿ý-ê4ž!M°üòËÛ~ó›ßŒ|Æ|ðÁ‘Ïh‹}öÙ§¨ÓÉ™—^z)º—qsí÷3W÷ËuiÛߪÛkÕy•kÿekžuÖY�³Øb‹D¹’æöÛo%»ì²Kñj'Ǥ�—™¢@®É›ñk‹,²HÔϸŒµÉ÷lj'FùOúÓH3’úK_úRäÿüç?G:Ï<óDÚü8ôÐC£0[ËxÕŒUœe–Y¢üÿøG¤¹ÒkÆàçªÜÙrskÕ.ÉO­â˚Ǟ«%毚_í„’qãÆE72"é¾ûî‹üÉ'Ÿi^I2Z0c—òšŸå{ï½wÔÉkQ~¦Š§½Cõ™­W³{š¿bɵDû;´NþÌОW—ÑÓ§�vZ@e~¿ýö‹üûßÿþ‚î�ˆ|ÞA!WÆÏ³4KŠj5Éäoò3@ÆMç'Ò\%óž{î ‡ü…ßâ‹/ùÇ<ÒŒåŒL>Ê8r=îüL¾ä’KƨðƒDšk�§a^óó0£þó×B·Ýv[ÔìöuZó·Aý]Û7ßò×­N•¬ÓêÕÎ/ÍÚùÇH  @€ @€èh�iò›‡ŒXOÛ_‹a`íÛŠ�ê dÔÌ`Æ5ø+Oö!¿‰Ížä]qó^�ƒé[n›ßÂedâÏþó(Ì{›vû=ˆS)¿½ÌÕB[YåwÚ×]w]« ½Êçž{î(ùØÇ>Ö«¼ì§¹VlF×Î4ÓLC²»Œêʸ°\³1FµÕ.òÍ›nºiTÈHÕƒ:h²•3&t�ˆW^xáH3’¨óc„s«ìÿd‡6ÙÂŒ9räd_m,|òÉ'ãi®Øß5”Û|>WiÌëL;=og�;¯r�ß\ ,c6Úh£Éî.ïýšñe¹¶æ5×\5;ùî®ý½Î4<×m¾ssÍN(Éw–ü4Çs´Ù¥ÜêÄOŒúÓºôÒKOvÛŒ÷ùÜç>¯fT~¾í¸ã޽êgä×RK-å¹]þ¿›}öÙ§X3#¡:y]ÈÂ\™Á¬ —«ïå•9×m¿µÜ*×:ìEZÒÓüß”{lÿÝ$¯*yÅë;ö6W0ÏX鼚eôk;Ã)û3[;}ª:C{^ U¯Êk'WpžuÖYcí¿› íy•¿-ˈòŒ(l—ñûùY=#²óîàÿî(O8[ο2ò7ÛWŽ:?ág¬e~ŽJ�n¸!šÍÿã·ÜrKäó3s®îýàƒFI®ë:u~“çU~¾ju4›Ê8ò÷@óÎ;oì®Õûrªn²É&Q'ÿ‘ï°ŸùÌgš;ÙQ%�ûÚk¯M¶WùWa¾ïðƒœl�ü[;?Éç»ÌŸþô§¨™¿­™ì&Q˜ï)Ï<óLäó<ÌZÕªòÜoûïÔÍû}î¹ç¢P4k³Œ @€ @€ôCÀÚ¬ýÀR•í \qÅQ9ã€rØn‰cÍïñòÞ‘ÍãÍo5ó[Ù¼ ds�ü¾1¿ÛÜ`ƒ Š ãÇ��ü�7ÞiF­ftÀ£�>%­Z+6¯|æ‰'ž(ƘÑaÅÓ^™ŒËUÃò.œk�qy½*wÔÓŒ8L?óÜËs©yhù}{~ ÝꌚvÚžï˜síÈæªT’‘ÚÇšãÊ¢[�qµÕV‹—2Ú"c«ï¼óÎ(ªÿVûLyþ_ÈÍlçÚk¯�LFk6®»—¯f„NÆUåŠríGÁ ¦ŸÃ»mžóÃÕwO2†qã�7Žjk“Q«Í[e¤s–çš›Íq¬ùê‡>ô¡Èä ’y½Êõ‚ßšÛï„’O|âE7îºë®ÈgTN®ÁW¼™Ç{,ÒþóŸ‘æÿ£|µ1&tjÆ¥æÞ§NšgK;ûÊ÷¬¬™ÿOóZݨÔN;Ý^ghÏ«n×hÕÿ¡=¯2Î.ïßj�Yž«jf>ßC3ž®q5ó¾[®WWZi¥Øu~FÊ_ödT]ó/Ï24×ìÎÈÓŒ2Î{›ãaó“ÿÔ‰%,[¯Œ3!ÕÑwÏSxÕUW�jÍšqµ}oÕ ¯f„rF­¶êO®§œ¿’o®“w˜hüÄÕøš¿ä»gcyƒ繚¿µÊ_YuËû…hÖæ3A  @€ @€ú! šµXª @ �üö{ÿý÷�Êù]\;ߟ·ÓòÔ©“1•¹v^ß{̸¤æ:ù]qÞ'½qUʔɸªŒgÌï$«ñ y³CKr­ÕÜ*£ Zµ�±ÆwÜqGTHÉŒÎkU¿Jå£ÚI×jt­ÎÏæøÇV-t{yÆ ä(2®³ïÕ0óÿfFf4k®¶ÙÉѬ‹Ú8®¼ªäµ·±<²~ÆÑ7¾úôÓOG…¿þõ¯>è¹J]Ƹ‘Ù°ñ.ä¹’ZsÇrm¾,ogeÛ\Ñ/ÿWæûKçG³6ž!yæä»Ucy ä•ñJͯ6ëÕ³¤qõó±cÇB•¢äÚ?¦�gÈàÏ«¾WNlîUþïn�Ôæ:­dhÏ«ü?žŸ¬òê÷ꫯvÚ�'ÛŸÆßèdÜ}¾§7žo¹až3™ÏO�yN¶Ù(L�ævZÕ¯FygBc¼çB -ÔPyˆL;œÓåÊY¾á†F¦ñn¼óoî7ë4®Ý÷Zl¹Uã:ÝO=õTyCÐrÇ äï0²{¹Ö^Çvµ‹:ÖjåÄ. »:´çÕƒ>Xôg­µÖŠüì³Ï^”Ô'3iÒ¤l®£�«g.ºè¢ÅðçŸþÈç Ý�bsÎ9gQ§Û3�ãjÿLH·\]4ã7¯¸âŠ 8âˆ#"ÍUãÏ>ûìÈ7Þ�¡»¬rŒ�<òHt;¯?ùþž¿ãÌ˜Óæ_MåØ3&:eò¯ÂñãÇÃÏØÕ}èCEIfò3Fãªñ½*tàSѬxPt‰ @€ @€�nÍÚMGK_ èp�üfדּΊ~®¾úꑊ×ÈC–w)͵®š¿¥l>¬y'Êüv´ïûŸ6oÛí%¹âí�~ô£Èç>÷¹H÷ßÿHÿû¿ÿ;Òå–[.Òô<ï¼ó"_¥Ø�ŽÇ ä ÈyþŒ=:Z>ꨣ"=ñÄ#mŒÐÉ;Æþð‡?ŒòC=4Ò|Toµµ�Ì¿“¸öÚkã…ë®».Ò¼Ú¬¹æš½ª¾òÊ+QÒ¸va;1&­ŸMÕgÍß^tµ}š«ø{ì±…@þb£x*C`C{^åŠ�Çw\Ñ“=öØ£È×-“ù;�\E´q=Ö\�ûSŸúTÁ’±ŸÕXw{0gBþ"mç�w.d2³õÖ[G&?ƒ5®€ß«ZW<3fLô3•_|ñÈç_j¹Jrþ"*ÿ n¼G®ð›ïþ¹mžQ�oŒÎ’ü?ž+JÏ4ÓLYØ©hÖ®8L:I€ @€ @€@ç ˆfíÜc£gt�@ãzvŸþô§£ÿu‹ÄluÈrå¬\)2ïèݪf–çwžù­æ +¬Ðw劽zæ™gƈ¾ô¥/Eú½ï}/Ò¼kçO~ò“È_z饑æ#£YsmÖÎ?Óò»ë\¯ê_#èß¿¹.mcL\ÿ¶¯kíí¶Û.†þ‡?ü!Ò¼ËmÞGþ“Ÿüd”äý^Ï=÷ÜÈ/»ì²‘žtÒI‘æyÕñ…]ôxíµ×¢·/¿ür¯>7ÞÓ¶×K5š«ï5Æ2pÀaÒ¼îjc|Jûh¹¢kÖïüëU«q½ùæ›ñRóy•z­¶Ê5ŽZÕl.OínÿÕB^UòÓ¹¶xÆJ7�·ž%;¯rMÃ�]Ó2ެ�8ôN>"C{^å»äE]C^i¥•"Ýj«­:yøSì[žÍ׫üýÊ7� ÷Þ{o‘¶S¿Û¯T9ÆÁœ ¹Véî»ïM=ùä“‘Þxã�‘æ'ö9æ˜#òûî»o¤íü¶/ªuÔ㡇ŠþdúÑ�~4ò�ïæ«¬²J”äß¹Nk–仨>ð�xu¶Ùf‹4ÏÀüÛ°ï_M ì}3v1ìѬÃ~t€ @€ @€�îÍÚÝÇOï è(�¿üå/E–Zj©"_ÏL~™w)Í{J®»îº“¥ÈïB3v5¿áÌôýïÿdëWµð‚ .ˆ¡}á _ˆ4ãX¿õ­oƒÝl³Í"Ÿß±gùW¿úÕ(Éø C9$ò‹2+vQj&ãnrÍÇ�íhÞyç� óûó�µPÏ­òfô–[nW]uU¤y¾å½ƒ÷Úk¯(ɸ׬™Vy‘ùîJï¾ûî>:<÷Üs÷ñj=_Ê8ú«¯¾:†¿Î:ëDºÅ[L–"ã[óúœ×Ÿ\-z²•‹Âƈª%–X¢(ï®ÌSO=δ¹ç­¢¿ÿüç?GåŒXlު:lu,úÞ¶^½õÖ[£ù•qLùÎÕ }ëœ> 켺馛b�ÿ³ÚQþ.dýõ×o“Žª9´çU~F=è ƒŠ1|ðÁ‘ÏwÏ¢°ë2ù¹ëÊ+¯@ÏsUÖ�üãmnûøã�GÍÆ5»Ûܰ£ª þLÈul3Í¡¥ÉÅ_OwÙe—H3Ùe—E~å•WÎj›æûû�wÞ=̱ä}Gš›˜Ññù)ýúë¯�úù ¶W\1òù‹Æ\_5¯x3Î8c”¯±Æ‘¶züîw¿kõR‡—‹fíð¤{ @€ @€tº€hÖN?BúG€@Wd”Ê%—\Rô6ï½X<­L&#kÚY+'¿Ù;vlŒ=c£Z­ª™QŠ�=öXÔ¼üòË#ÍoÑsMÒÊÐõ1�ŒFÉÕ\pÁ{ 3WIËÿM½^ªíÓ\Im·Ýv �ŒQÍ• [ÝÕ7ÿ—åÚ…_ßN4ë+¯¼RçmÅÓ.ÊŒ5*z›±9�Ýλ'glocyæïÇÝüjUKòJ²ãŽ;<í´Ó"_ÕOGÅ0�ØyÕ½±¨ *6Úóêõ×_�–s½à[n¹%òùI¬{ãÇ ¨È´ŠYΘȲo¬ŸùüK~žl^›»¹~–ä§…ü}L«:�\^Þ™�Qœ;ï¼s ?ß=3¿÷Þ{GÉÿøÇHóo«Ètà#ßßóï¾õÖ[/zØ÷Y‘çO^�n¿ýö¨ßêoÆüåbþ¾ªÕÀ[mÛª~甋fíœc¡' @€ @€t¥€hÖ®ø`¤¹JæÈ‘#ûuF dôÙw¾ó�¨™kžvr4k×Zh¡h-Ó!l¶&MeÔ@ãÓÝÍÚwäàšk®Y“£ÙÎ0óÊÓÝœñ†í¬-ÞµôÜsÏMqwO?ýtQgþùç/òÝ’é{ý¸¼gt7Þ9º ÿü}ÆèÑ££ñûî»/Ò<0Ò²ÍPÆXÊnÓyÕ¾ðОWy?€C=4:pöÙgGúÉO~2Òï~÷»‘vòJ÷ѽ)>2f¼UäxÆW毠š›Ê33m~µUɈ#â¥L[ÕéÌò©y&4®Ùš¿#yæ™g‚¥“?µÎ7ß|ÑÃLÛ?‚¹®ñZk­5ÙMò3@þ&¯ÕïfrÃŒ¥í»Îdw1ì…¢Y‡ýè @€ @€Ý- šµ»�ŸÞ Ð!¹®hv&£¥ò~‹Ò½aìFßq¬ÃرŽÚõ‹/¾Xô§}±%—\²Øª1R¬(”!Ð/�»îº+êçÝo—[n¹È/¿üòýj¡*w{ÒÔ1|òÉ'cG;í´S¤ù;ŒcŽ9&ò›m¶Y›ÈÕoO>ùä¨íµ×NqÛ /¼°hÙyUPT,“kí嚃¹Òú;ìcÜo¿ý"õ³ùp3i6i.Úó*·qüñÇÇŽŽ8âˆHówZ'žxbä«ñéÝyÕ|5—Lý3¡ùÎo¼ñFsÇ*_’ÍÍï{Øæú�S"šµsŽ…ž @€ @€ Е¢Y»ò°é4�&ð /]êÞ{(C�™Ê�ëgå]G3v#×6jÕ™\ó._ÍØÃV5•È»è¶Zmíí·ß¢ŸýìgÔW¿úÕÈ¿÷½ï-Jdª!ðÈ#�Ä@¶ÝvÛHo»í¶H3žëë_ÿz¿¸Î:ëõseÃý÷ß?JfŸ}ö¢<3<ð@d®¾úêHóýqÕUWíUÇÓnÈu3÷ÜsÏÈ™gžég?ûÙHO8á„H»qe½è¶Ç° íy•«pfäþ¾ûî£[f™e"ýíoiUï©0ì±;0Tg£�>£ËOã}¯ Ÿ7ß|s¡‘,²HQ"S%ѬU:šÆB€ @€ @€À0ˆft»$@ z�ѬsÏ=wõhD¥ ä=»wÛm·ØËOúÓH9ä�H¿ó�ïD:묳FÚøÈ¸°ƒ:( óûðõ×_¿±‚<�BàöÛo�üî»ïéøÃHsUÍ\+c…Ž<òÈâÕŒRÜ~ûí£Ä£J÷ß gë­·Žt̘1‘æ]¶¿ùÍoF~Úiû{±ÄKÄVvôÑGG>£Yÿ÷ÿ7ò½˜«Nÿ×ýW”äãàƒŽLó5íÿ^öO äQ=ztôýÜsÏ�ôÓŸþt¤¹nïÈ‘#»pLº<üC{^½õÖ[1¤Ã?<Òü씫۟þùQòÁ~pø¬SE`¨Î„\×5ß=óºwà�Æò³Ö‚ .XŒ&#gsóÆ_�dývÖ'-š’é"�þ}¢ê¢�é* @€ @€¦Ž€hÖ©ãl/ ³@®6~üø¢¹añ42e3çœs…£F�Š|~ßXN6óÏþ³(ol¡(”©¤@Fž^ýõ½Fwà 7%§�vZ䯻$3y—Û¼§ítÓM…–‘ÑGuT”\rÉ%‘n²É&‘æyuç�wFþ7¿ùM¤¹¢ÓgœQä#ãQ�¡:¯’bìØ±‘yì±Ç"]k­µ"]l±Å"]zé¥#ýÝï~i>òÕ\W±w[þ×ÈêþoãÊqy&¤Èßþö·Èìºë®‘æ»Ø›o¾9Y¬M7Ý4ÊãR³ZF°Þ}÷Ýñ4ïÓ}ÁD~½õÖ‹4¯`/½ôRä3ÆgÇwŒ¼G5Æ�Ùa‡"m¼’äšÎûì³O”?ÿüó‘6~úЧÅ#c]seÌ¢02efkÜ—|§ íy•Q‡p@ 3·‘ãÍ_{ì±ñ4ÏÒÜo+�SO=5^r÷…V>�_^Æ™�gT¾oæ¯C2ÍOS ,°@°ÜrË-‘6¾óæûf¾óv¾›L`Ú�mf+ @€ @€H�iüñÈÍ7ß|1bÄ€·µ!õ˜8qâ Þß+ϲË.{l¼3{;È{1ÿêW¿šbå¼+÷qÇ53&ñßøÆ·R¡&L˜ݘfši"íïÝ�3Òù°ÃÀ@2«y�ÂŒ³¾êª«¢ÍË.»,ÒŒ`͸³\U3ïÓ�çç\sÍ5€½Û¤l�7Þx#v‘׺þ®NXÆy•÷—ÏHÕ?þñ�Ñ·ü¸Ê*«D~Ë-·Œô3ŸùL¤³Ì2K¤�)�«¼åÕcŽ9æh³“çœsNÔüüç?ßfýæjßýîw£0ãtš_ÍXÅ_þò—ñR®R—k¿æÙ•wœÏ5ag˜a†æÍ•tˆ@Æôå/'ò=±ïŽågªü|ÕwÍV¯æ}Þï½÷Þ^ÊþÌÖkwž–*�«¬æ§�üíNß»Úó*¯™íì·ï^å;¦ûÂ÷­45_Íó*?_µ³ÂiygBF³æ/ÛòsûwÜ<ð@¤+®¸b¤+¬°B¤¹nõJ+­y�ÎÈOïû<°>÷Üs±¡hÖ�éÙŠ @€ @€ÿ' šÕ©@€À0LýhÖa¤]v‰À`¢Y»dˆº9 ƒ‰f†îÚe— ,šµK§›Ã,ÐßhÖaî®Ýw‰@£Y»dXº9Ìý�fæîÚ}—ˆfí’¥› @€ @€Tà2Yþ@IDAT]À¢U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ PuÓ¬U?ÂÆG€ @€ @€@ɦYKÖ< @€ @€U0ÍZõ#l| @€ @€”,`šµd`Í @€ @€ Pu�é‡j€ãÆ�‹¦Æ�é;ï¼é´ÓöÌáN3Í4EIs>^ò @ «òÿ{óÿî,Ÿ4iRŒ._�yæ™#?ûì³wõxuž @€ Ð, šµÙD  @€ @€ú!0dѬ¡&N­öª @€ @€ P Ѭ•8ŒA€ @€ @€Àð ˜f>{{&@€ @€ @ ¦Y+q ‚ @€ @€�á0Í:|ööL€ @€ @€@%L³Vâ0 @€ @€Ã'`šuøìí™ @€ @€�J˜f­Äa4 @€ @€†OÀ4ëðÙÛ3 @€ @€•0ÍZ‰Ãh @€ @€ Ÿ€iÖá³·g @€ @€*!`šµ‡Ñ  @€ @€>Ó¬ÃgoÏ @€ @€TBÀ4k%£A @€ @€ 0|¦Y‡ÏÞž  @€ @€¨„€iÖJFƒ @€ @€ @`øL³Ÿ½= @€ @€ P Ó¬•8ŒA€ @€ @€Àð ˜f>{{&@€ @€ @ ¦Y+q ‚ @€ @€�á0Í:|ööL€ @€ @€@%L³Vâ0 @€ @€Ã'`šuøìí™ @€ @€�J˜f­Äa4 @€ @€†OÀ4ëðÙÛ3 @€ @€•0ÍZ‰Ãh @€ @€ Ÿ€iÖá³·g @€ @€*!`šµ‡Ñ  @€ @€>Ó¬ÃgoÏ @€ @€TBÀ4k%£A @€ @€ 0|Óß®í¹jºá–Òƒ?éwÚ¦C†÷â‹/EO&½3iŠý™aú¢Î¬³Î2Åš* @€ @€hÍÚ¨!O€ @€ @€�~ ˆfí7Yóo½õVÞsÿ£‘®´ü’Í*_òÎ;=C<ç¼Ë#]qÙ%"}q\O iß�gœ1*Ì4㈾« òÕÿÚïèhá©gŸŸb;}|•¨³ß>£§Xs`î¼ç¡ØpÙ¥GE:ýtÓ ¬[ @€ @€t €hÖ<(ºD€ @€ @€@7 ˆfÔÑÊ8ÖCŽüi´2Ýt=sÖCÍ:iRO˜èïþpm¤¸ò¦H_÷r¤[lú±H·ÙrãH§�ößså—\vM”üú¼?F:ÏܳEºÇ·�tñ.i>n¿ó¾ÈœwÑ•‘ŽyèÉH×^c…HwÝqëHGÎ2s¤^{=Òs~si¤×\{¤3ÏÜyºóv›Gºúj+FÚø¸ÌÃñôþ‡Æé9\ÝXa²ùÿúRÏú­[l¶~ñjßý¿ïþž½|å[ÿ[ÔoÎ|ë«ÛEáÆöø4>~ð?_�§+.¿Tca‘¿èÒ�ûÆôÄ#—÷8÷â«¢ñ .½&Ò¾ñÅH󜉌 @€ @€@W ü{†®«‡¡ó @€ @€.Ѭ”ëí·cËC�ê‰cÍü�ßÜm€mµÞìú?ß/^yÍ_#Ým§­"�vÚi"ÍýÎ5çì‘_Ý5#ýË-wFzιˆô;ïFJŽû\ä÷9àØHyêᑾüò+‘~ïØŸGúÕÑŸ‰tçþ#ÒŸþü¼žôôßFº×WvŠôg¿è)yóÝ5gØ·'îrì3‹tÿÿþI¤§ÿÝHúÀü‘¾öúÄHô“³#ÝcçžÖ>³õ&‘æ#£Sï¹·gMÒ¾×UV?°à¼ÅÎîðÉÈoñÉu‹’Ì,¾Ø"óÔÓ=ë´æ£1Ž5K^ye|dZpžÿ«ñž÷¼÷½ÿŽœÍ·ß]‹ö…q=+œÎ1Çl‘f”èrK÷DÎn²AO<ìv£Œ´ÕãÚ¿Ùë¥Sô�(YlÑž¶ßÿÆF2J7KÖøÈŠ�/ù‰oöÄÒwÔ>‘.³ÔâEycæ¢K¯Œ§÷�é‰Ò-û‘gËÁß;Úï�ã"=愞8â½ß�ÆÓZ¶¿ö  @€ @€eˆf-CU› @€ @€ÔH@4k—ì±ïÆ¥^sÃ]Ñï“�Ý/Ò·ßžéóïÆ™ŽñïWs`ï›iÆÈŒ×ýÚüȵMϽèêxé3[®ß\¡(¹öú›#?r–™"]né%"ÍHÛõ?ñÑÈO˜ðZ¤ùøÍé‡Gf®9çˆô’Ë®‰ôž{Št¿}zâ7›ƒéÿ﮸>ü�O®é´ÓöþÎà�wn_~eB¼úúë#}þ…#m~¼òjO�©ùxãÍ·bwÞ]»v¶‘³D^ëÔô·/ @€ @€ÀÐ ôž™ÚÖµF€ @€ @€�Ê ˆfíÇ!ÎU5Ú¯'*óÐ#O‰4ïè·{Vh�a†r1_yµgÕ£Ž==Òí>ÝyºØ¢ Eš�¹ç™‰{b6^{=žÎ1Ǭ�…‘Ÿ4©'öäŸý:Ò9çèÙvýu׌´ùñècOEá�OþM¤ûíµc¤¹ºk®Í:¢$£2#�ŒœÍØÒñã{¢\_ŸøF¤/Žë©Ùü˜}¶ž•^ûÛÿŒN½åŽž8Ù?¿ys³Qò‹ã"�øFOÜè7ìYµïÇF_¥ï CòjZ}ëàGk+,×¼ÛŽÿ1$-k„ @€ @`¸D³—¼ý @€ @€ P�r0+‚ôÿcú馋‚ß½S|Æ´xÄO¢¤¼˜Ö—_y5Ú?àОxÌ…|¤;m¿e¤��¥–øìÝ|ÕÚÇñ@ $�Bï ]@Dì]±"^ èkÁ®„kÁÞ±‹ŠÝkoXPlˆØëUQ@¥H¯!”� ïsæ/˘%Ë&»Iv³¿ãLJ³SÏ|g2[æ™3míå‚EK-îÚ»G`ÔsXý˜÷ Qëý»§Ûÿ4ýO‹wÜp©Å””Ú�iTQë¥cÆÙ˳†ºŒË¾»ö LSXXhõcOuýÃúËð‹nò¿ Ô§~YrJ�zçE·üðÛ¯¹þZ°Ø*Å^Nn«–Í4°Dœ9kŽ éÚ©µÅî]b¬ÿåÄ·?´—¿Î˜íõº2p¯¼î[r·.í-ž7ìø¨¯…"€ € € €T¾Ù¬•oÎ@@@@@ Z �ÍZÎÝùwNëÃlþkoyÔâ w. µ¸x£Åqy¬¯½ó™ÅÛ®=Ïâêœ5�X¿¾ëÅuùŠU/¹ò.‹}wéfq‡n�,þ5‘Å5jXlÓº…Å�&>h±´òÖ»SlÔ/Ó]ª#/^Úd6<œöûg_µÊõ»ª–¤×«çeuõûÖ{ŸZýÀ}û–[U/Õ“ïvmš[ÎNkù÷úuîïBùÔå_ s"°Y 77wsÕΓÅ�:"((pý’«Ït½[E²4æE@º'Ik—¼ %"X¿Þ}×HII±ÈY+Iæõ è|¥çv${w…úÇRG |:_éL¥'è”o9Ì…€_@ŸÞëý¾äŸ&œ:Ù¬á(1  € € € € PªÙ¬¥Ò„3BWN®þ·Ëiýå·ÙáÌR¦iÞðú �>ë¯À\Á=Ÿ>õàÕ6¶Ï.;Y<á—…:öæG,6näòRï¸þ"‹uë¦YüþÇé•Çj+—_}¿*�8úâS¬þÆ;S-®]Ÿgñƒ©?¢U¬deÔµøÚ³wx¯¢Âi¿M9^žoÃ,—ÇZ³¦Ë®õ—÷?šf/úÕõÍzÙCý£¬^XXdqÙò•ueuuŽËެ]»bÿÎ9ãX[KûíZZ$GÀÊ]”¿CO¹™±„€Ž%ýUr\•Àáe¹6y7V(÷�ãªÜŒÌXB@G”ò 9®Jàð2BQŠ|R�“ÙþóÙ¬* øÏWd³FˆÉì}z¼,w…lÖrÓ1# € € € € àjÌ�;×þiÞÜõY¾R§N�òÍÈ\Õ^à½÷]ï¨Óg¸<ßKF”Ì*­ˆÍW¯¬W]ïz³=ä€þ÷è׻ĊÔ÷âðcmøú .c·AVºÅÿ;ã8‹½vr}ÑR*Z@ýF²Î<‘è1¯_@}³*s'-ÍåþSˆ\Àß7kFFFä d ˜€²Ysrr¬Þ ALˆ¢ÀÊ•îN¯† Z$›5а ¾¨ììlÈÌt÷Y’ÍšàC7_Ç•>_‘ÍEØ_”>½G’Óºd‰{BÙ¬ ~ ±ù € € € € ©Ù¬‘ 2 (_•ë¥1¸kM"›5@A¥ÊÈf­ò]P-@6kµÜ­U¾Qd³Vù.¨Æ ›µïÜ*Ü4²Y«¿¯šlÖj¼s«pÓÈf­B|V� € € € €l¨ØG«oY5*Q€<ÖJÄfU € € € €ôÍÊ1€ € € € €D&@6kd~Ì� € € €•(�WäVöá'ÎtñK]\´ÖÅ¥ë]LOq±e†‹Ûe¹xp'�ÚÞÅ6™.R@�è ÔŒîâX € € € € �hd³&Úg{@@@ˆ3�u®Áw~éâퟻ¸Öâj[+«6¸¡Š¿,sõ·wqÄ$êèâÍû¹Ø«¹‹@ r²Y#7d  € € € € �Ðd³&ôîgã@@@ˆe�7g¹Ö�õ–‹KÖ¹yyïO·ŒÉ^x^ÿ�ÂÂB{/çÿo¾ùÆZ[·®KlÛa‡übõßÿÝ¢lû÷ï_blðKM¿jÕ*Õ·oßà ânˆ>M½ûî»Ör]ß}÷�Õ›7onq·Ýv³xôÑG[Üu×]-†SŠŠŠl²·ÞzË¢–üÅ_X]Gæ.»ìbu�©:wîluŠrss­òñÇ[Ü{ï½-fdÄ_'£Ïýⶦ2óXÝú6—9«]í¸—\œìN‡I)åÿZàf/SÑ9vÉ’%6W�=Ê4¯&Ö1°qãÆmΫ3pjjj‰)W¬XaCô9Dç´5j”˜&Þ_êsæë¯¿nòÙgŸYÔVëÍ{ìaCvÝô6hÐÀb8åÛo¿µÉžzê)‹ú”í�hCN?ýt‹�:u²_¥  À¬ïƒ’ >fâk‹*ºµñ÷é°¢EX> € € € € P&�øN *Ó¦21$¦Àš5klÃÇŒcñÞ{ﵨl”�Z]Ù4ÊTTfÄC=˜Ò*e*ãÆ�³é•ÇZ¦cpb] ×5ÌÒš§±á\3×j×®meýüõ×_VW]iË�ÍáÚÞñãÇ[óÎ=÷Ü@#•ÁÚ¾}{òØc�âã�?nõgŸ}Ö¢ÆZ¥DQž¯?�UW¿%VbâÀKå ^ÆQ%ô‘£¿Íâââ0·hñâÅ6¥òXã7›µ"Ž+? r~•�1kÖ¬À¨ý÷ßßêÊiUþÅ„ lÈ“O>iQÙ�‰c¼­ãJ™†_}õ•m¯þ®?øàƒÀ¶0Àê 6 ‰ýŠöìYg�eMýã�?,vïÞÝ¢r3?úÈ=Æ[9Îz7|æ™glȾûîkÑ_”ë;?üÃC×ÿüóO›@¹QGu”Õ#¹k$ôº*b¬2+ƒ—¯á¡ß+ýsiÊð§÷ÏkuíÙóÎ;Ϧ\reÁ뼡\iýíÜxã�6Í�wÞiñâ‹/±!z7<í´Ólš^xÁ¢ÎQ:w)ËOGéwÜac_|ñE‹e=&m–*)k×®µõúÏ'á7C�ºÏ#ô\:º”‰zÊX»À}lO:sbÕ·ë“y® 7|êâµ]¬œ¢;'ô©¦|Ù¬Ÿ|ò‰5UG¡ÛܤI›@ïqþ)•¿©¬Øyó„>ŸüïÿóOV¢®ÜØ#Ž8¢ÄðØy©o…:oŒ;6Ð0ÝÉÑ«W/¢óØÓO?mõ›o¾90dûí·L\Ñ™êÄO ŒR.¹ö¦Î~úÖ  ýøúd¥{•ÿË/.Õ¼K—.?üðÃÀö–VÑ7îð3‚K[N| ¯_Í¥µ € € € € €@¬ �Ík{„ö €@Ôt _Ê+T}äÈ‘¶¿r3gδ!çœsŽE]½Ü}÷ÝC¬fQßmº:ªë¢ßÿ}˜ó&ÎdÊ`jÕª•m²ú0�ÇlVeù)�U9§Êbö÷"ª¼Ô«®ºÊ¶ô�°øŸÿüÇ¢æ ÎäRÖ€M(êGXù×��Tª±@EWâZ°`�U”c¢ºŽØ3Î8Æ+C!??ßêÊjÔñ›+­­Ž$*HùÔòQÏ’ê#Rù)ñ’ÍúÃ?…òà¶Ûn;«+“N9&:iï?úè£6öüóÏ·xöÙg[üüóÏ-*ãÉ*V”-®| Õk§úüU6ëM7Ýd³T¿žþB;øÇêóI¼ ¬^í:°<òÈ#-ꞇ~Øêÿú׿,ê�Kp:«hø%—\bcõ)«´|.å|);ìßÿþ·M¯OVþÞáõþ«^ãÿïÿþϦQŸû±ß£´zvÖó¬Ùe*š·L³ÄÝÄWMqMÞPT²á»ä¹¤ÓÜÇó¤Í\¬YÃÅù+]|þk¯ùÉÅÒJ_¯{ü›rã{´q1ÅÝ^•ôûbÿÂÅû]Úý?ÊÞðs¼.…›{KøÇè~¡>‘õy;¸™ú›Õ}þ±ê]T½”êì=}út›@ïú‹›={¶ ѳ(ÔK²>ñjJÿÒb­®»vt>QO©£F�²FvìØÑ¢îÕÐvéS�>½ë.�É“'Û4uêÔ)±Q¿ýö› Q«Î{ʇUŸ¶:Û¿üòË6�òñO:é$««÷êØÏñÔ75}SöçG«®ãAï:r4DŸ�”ëêï�]wÒè.‡Œ!^î¸ãŽ66¾úà&›5Äe € € € € °m²Y·mÄ §Ê¹òÊ+­ýzš¹úó_UÓ¦©·�믿Þ^êÚãe—]fuåy_·Ô\þ¨ë½Ê¹PŸY—_~¹M çËû§Œýº®X÷-ûöÛo‡h¼žÿ« ä©'iú¯|úg×õ[õP¦« ÁÏìÖS,ýÙ+þ%TmýØc�µ,Z´È¢rj‚¯H+çK×Ì•—ª¾YulôìÙ³Ä&¬_¿>0Dù8iii�!ñ^Q¦ÃÔ©SKlˆò�J ¼T>…žÊ-Oõu˜ DE½%ª.T^^lfk¡rZýy÷j¶ö¾Îfú;U—“&M² N=õÔro�Î{Z¦úÓ ^{¹^¡3ê ÔÁ½[*“«´Uël¯±ƒ ²Šža­§‡ÏåŸ^c÷Úk/«4nÜ8xâ˜R¿~}k�úZUO Á}2ê�]=«êÞåJë£Ò²Yÿûßÿ¶TŸÜ‚? tíÚÕ¦Ñg<·Ê¥ nC`Q1R‘IfffŒ´'vš1ÓËK}âÇ’-zb rŠû³HZŸçâs\LMqq§¶.^íþÔ’¶oêâ�-Ýh»—Vöq‡jÒ«gº˜U×ů\÷ÔI¹îޤÞí]7ÄÅï¹xé7.ª¬/tÿÞìDŸ4î +¿è,¤{žüŸgô¹Q÷Ï·JïbÁwJiJõ€<—î0S¬rugž>;¥§»„^}ÃÒgT Q«‚¿a/¿j‡¨Z}òTO¬ÁÏ?Ðçy6«Þ¿æÎ�k�î¡õ‘G lÔ]wÝeu_·²:á„l¸z{×9Sù­Ã‡Ì›íwÿg!}CÔù_{_ßæt–Vƽ¿çqÿQѺukÛÌàoL¡·=ïê#›5ô>e, € € € € ° ²Y·Ähˆwõ¶sá…nsCvÞyçÀ4ºö«\ÅÒž ˜Ø*O<ñ„E=ÇYW)c3WÎßæÒêê}I}2êú¤úœU~MðU_õ¹¦|aeß(+Jys¡ŸIª6È-¸=zþµže<¶j‡(eôèÑÛl†r0Õ«zÞÔ3[Cg³ê àñÞsŸGYÞʤÓp= Wymþ¾’5VÙrVf´ÿz¸2,”=¡£T¹«þ\lýËPWµ´XV­ˆãJ‰ÊdÔ^'ËÞŸ¹àß�±V�îqåß:WÁ=!*›U9øþéc¹®ì9e†n§þ::È¥l)›US¡ç*mìüùóm”úCW~ô™gzéd¥ÍcÃÕf5J=úéï"ø]I½×)û¾OŸ>�í�§rÍtÖÒ(õL§sš?··|OŸ¬®J*:ZÂYµúcÕ”:ÿ÷Q«¿;ÿ]z-mùÊiÕØÐYÆ¥-!~‡Ë*8ÛÚ‘ÿ.™à-ÕÙ,vÞ_úÕµq“¯¡ý3܋ý�ç³ÜíCIƒ½DçŸ6¸ºÊñÍÝ¿Ïz§–ãû¹úsÿsqârUn9Ôý[¿ž‹x¹®ç}îê*³Ü¿/žîây¸øò ¿Xë¢Ê ÓÝ¿wè¢ú„uµhíAݧ}ª3‰ö£>!k¸Î!ú®}§Ï ê9øž0}ý9Üßï¶¶Æßç¸zÓÖºü÷W)Ö·ŸÚüÔ�hEþ³tiK×÷8}Ô^ïhþlV} Un¾–ºÏåÃ;Ì&Ó÷Dåì6̆ÄÎß`°†òUudꬢï‰:zu<øï9ð¿ßù� ½‡ÆË'Ì`�ð‡�;S"€ € € € €[ ›u+( B�ÄÐU8åM¨¿¿pzßS¯‘êËU�§�všús1âËÓ¥QWÈÕ~]3÷_«ôo—r¾”Y¦áêÝIÑ?ebÖý2ºúìàÏ:QïEÁÓÄïåmùtõ^y¦þáÚFM¯\ ÿXeN™2%@¡%èXÕõö–-[ÚX±ÊÂð_KÌX *~™ÒŽ+¿ÉÊg Î^‰_ŠhWÁ99960ØJ}Šýõ×_668/x9ñ8ğëwÃòm…rv´„ÿüç?¶�øêaÍÿ÷¥#Mï€þá’Ñ™Jç™à±Á[­Üe�éU>áøšËŸ §,ûà(�Ãu?‡zT™în Þ^-GÃÿZƒ§��!Úvå0†Ó*ýUúßËô>¨;9J[—_~YÚ(~øá‡[ ¾K)Ä,:êu/‡Ô¿ŠÏ¼|ÒÁ�»a³½îëçx=¥ú§yi‰{uélûvvq ×ת²YÛ×vCvéà¢úu½*ˆdŠ;Ù'½üµ‹çìïâ{ºx´ë˜úï²d�«|¹ÀÅ=Ú¸­¢þ:/^l Ô¾ÐÙFÙ©ú4¨Ï3Šþ¿£ÒÚ OD{챇MЬY³­N¦¿¯U«Vmu¬>‘Κ5ËÆ*¯Sý“ê9ò:ný™æÊ^T˵@=e¾´O&[]i‰�ºË°]»v%†WÎK}ÔùGk –ÔX}ZØu×]m²ÐßzÔ¬–¦¿_ùû%+gëʺí_ÝÕ¡w.Ýé¨}¤ãÁŸ£êÿþè?k•u½ñ;=Ù¬ñ»ïh9 € € € €Ą٬1±hÄ‚€r"ü™;mÚ„º`­ eè¨Heî(×É/¶.Ú +çj‰rUTÿñG÷XYejtîì¥"ÄBs£Ôå»ù³/K»ÖíÏžÖ<•‡¢¾u­X=çöèÑÃZWý2^Ã!Wæ×€lbÕ•=¡ç¡ëÙ¸¡ÿrÃYKìOþq¥^ µE¥e„ÅþöVf e«ü”à3’úÖù?;;ÛæïÉ®2ÛYqëòŸ«u¶)ëºô~:nÜ8›qÇw´¨¼ª².§úM¯£K=-ª×éê·�¥m‘¿ïÔƒ>Ø& ¾?Fw9\~ùå6öôÓ]g™×^{­Eõ~¨\W{iEŸ²&Ožluå ë}ÁAÙ‹ß}÷]˜mUÿøê_³qÄ[�WŸHß{ï=«ž"•¹Õ‰cd`®—£ú�KèÜJùpõV–´:wË€f™[ê[¸zM/µl™—µºrã–±þÚó¿¸WÊfUö«¬êSÝm QÎfÕû²î‡S¦ªžh¯»å‚߃‚[å¢3ŒÞ¡”1íÿléŸÒÿ,xÿpõ ûÙgŸÙ@å0ê|¾Ë.»Øeî+GÕÿiVSúó5}èlkÿzƒëþ¿÷à±=ä¹çž ¬B}ªúûÑÖ(.°öcè^Võ Ñߤ>EÄr6«Î´ºGSŸ‹´íþ'yèñßÉ¡ý. ÿQ ­ö²Y«ý.f@@@@@ bÈf­X_–Žq$ ˆÔàþýû[E…¥mÂ믿n£^xá‹]t‘EÿSÔK›+1‡ëZº®Ìë™Ë~egèÉòzreuê«N+êÏH[]Z?SþŒƒ»ï¾Û&Vô[©®+Æ7Þx£½>|¸ÅØé[-¸µÑ¢«âʈî’ãkiáWþÌDõ,¦þmŸzê)Ûä×^{Í¢2StÞ;ä�ClˆrÍBçeÄ—Xø­]¶l™M¬ ŽàÁ꡵:e³gIwéÒ%|ºÀ”Ê.×ËsÏ=×*r L�°Ý1£LŸøêK4ò]æT?†¥-ó_ÿú—�RþÔƒ>hõ¥K—Z;v¬E�©ž}öY«?óÌ3Ÿþy‹º›Á*qQÚ¶mkíTŒ‹Wh#{=ŸF²Šío™ûw ÿ»¬ÎÛ\³OJ!ù˜ºÆM™›ïb“ ƒË"¯¯Øàá‘ ‰î'^õ©ª÷/õžºmÁg!õçîÿT©lñ?ÿüÓ¥û9”ñêÿ–Ü7«lè6TíXåü*«TŸ¬ôÍn²†é;‹>�û{žU›ýw@ú3ÍKÛ"}¦Ò»ªœµÞÒ¦�…áÓ§O·f(o×ß ù¢E‹lx×®]-êSåöÛohpðñ• ²YdG³™ € € € € PQ!¯éTÔJY. [Ê+¹ï¾ûÍ:çœsõàÊ’%Klàe—]fQ}«�5Êꉙùìúh{9oÞ<‹Ç{¬Eå¿(³õÞ{ïµ!—\r‰ÅÛo¿Ýb¢�Ù$£g+û3zŒ"PÚ·ooueç©¿¶ê‘­ùÉ'ŸØvé‰ÒêSu÷Ýwlu8e=ôÐC�‰uN ¼LðŠÞé”%Ü3©G™ÅÊ– 'OÊ?o¬Õõ©I}õªm¥õ+ª±ú»»å–[ì¥zo×19pà@Ò·o_‹z>»–9xð`B‰_�Åd‰öJsÛݾ©‹›6¹øé|U¦®pÿ»Ø¼¾‹ý½LÕÏ‚ÖxE776Åûu¤V²«ïVÏů׻¨yÖíæ%UÔ¿+V¸ V¯¦p@ˆÕ蓹¿wQM¬ k}2×} ê7Vw½ÌŸïp•�«žd5—¾IÅc/œúdþè£�–°=z´ Ñg¡ÒîYY¾|y`®ðï²òÒþ ,$+Ê_Ö73z?RÆ´z‚ÖÝxþÌèø=¢µ Èf�–$ËA@@@@� ›5Aw<›�~=©vâĉ6°W¯^•íåŸFue—Ü|óÍöROšK×ú‚§¯NCôdäÒr»JÛR]÷V>{î¹§MVZf\Ïž=mì‡~hQÏ#îØ±ci‹�‹á:B®ºêª@kÏ?ÿü@=¸¢Ìè·ÞzËF+©×Ú“N:ÉÆ*ƒuРAV¿ð -ª?Íx<7lØ`íW–„UEý:^n³¢#S×Õƒ'ÖÒô÷Ü»Vðô±<¤¬Ç•?WBÇÏ“O>ixâ‰'ZôçÓýûßÿ¶!C† ±xç�wZT¢žUm/㨔ï¸ò÷ζÇ{„ØÞ6mÚØØß~ûÍâÌ™3-*ß'Ä,1>*??ßZ¨¾/ÕÔ1cÆX¥¬ÏzV†¯îKБ£çÇøæ‡Ù<å꟯¤z!ÊS6«Þ CO¯\¡O?ýÔ&;üðÃ-–õý7ôò+s¬²›•M¯»1”+]Z”ý:lØ0›@|ð�Õ¿üòK‹wÝuW`FeÛ©/iÏ€� b°¢»Êú§ Q¶ >Äà¦UI“ÆîëV[§¶‹Óf¸øA¶‹*+7ºßúÞÅ£û¸ø »…#éšI.®p@’Nìáâ°.*�ÕÕ,gÓ[¦ê•õ¾\PP`+Õ9Çÿ·¯O2ë¿‹BÃçÌ™csEÒOqðgo­]ŸQõ)]u¿‰ÎŠñxdöéã 9«ÿÙiÓ¦Ù�µô‰QŸ´ƒóUƒ?«ûMJ«ëœ¦±5kÆzÖ£úô÷o‹Ž´îÝ»ÛÀo¿ýÖ¢îÒKMM L¦ãÁ?Dýùê올LõìÏ¡.Óì•ñÄFqê©§ãØe*§U¹ÒÿýïmxòÈ#­^Ö¢§k®²öëZÖuUþôº?C1xí¥=Y[ï†:º”íÿ«ô/GÇ•²~4—²�ü¹lþéc¿®¿Žk¯½Öšª¿‘#F„h¶r�N>ùd›F™ûÊžS‘:éÓ—2îo»í6›R÷s¼ûî»V×S¼C¬¢ÊG)'78':œ†©�ûx<'‡Þº^©¡§ {l37ìwZR‘—µzëG®\®p7J%5Nwq/¯ÖWÎvu•ü"÷ï�îðIºð@SS\\èåººÚæÒÂ[ÂæWõ¯>Ë雈îp*mMú¢ì×ßÿÝ&Ó�g»í¶[‰Y”=­±úœ©üð³)õy^™Œz—Ô]#:ké|�ŸBÏ:ë,³RšrZõyIç.Ýõ¨}áï§Õÿ9!¸—Û» ðrÁ‚�ºi��qQÑ·�… Zk p©àú¾£ü_iø¿Ái«C6 ½áúÄûgxmÙ¬¡÷&c@@@@@�m�ͺ F#€@uP¶ˆúSÏ2Êá*-GW}¯¸âŠˆzñ»ì²ËCü•¹sç^~óÍ7V×Ó*5Pýu––ù˜1¦*þkæþ†½ùæ›ö28SýéJ¯zðñÏUZ]9‰«W¯¶ ”_æ¿ZÚ\±6üž{î±&�?ÞâþûïoqÔ¨QQl¤2›Ôw¤®'+†îM2Š ˆâ¢”sÜ�Ø_|ak ?Ï¢]»v6½2Å‚ûIÔrü½˜Eq*mQå;®ü¶Ê€Ý`Ÿ‰Êº =}lŽ-ëq¥¬eª‡îp¶KvÊÚÐáã1›Uwi¨Lå"éÜU¾Д½(=ÿ±ŽgìOÓ¡Ck¤z÷·VýóªïQÿpe�}õÕW6P÷gÏëŸ^ç1*kLkôO/uåüúsç{ì1k|p¯Žþ-z饗ì¥2X•M¦¿2ÿ4’T/ùú„ û�®»î:›ì©§ž²ü™Ä¿„ª­Wt.ª¶]9e±ìàß eÍí]×Í}ß`Õ›êC^¾ê›+Ü�àò‡ëæ4iowp%�ÐÜÅÞ-]\™ëâ˺ØÈË`ý÷ᮾÖËc�á:¬þGiY®¬Û,"ŒúŒ·Ï>ûØ´ú<ãïÍÓ¿5¥Î‹/¶éu¿Nð'gÍ¥÷t�—4¯2C7Jï�z�ëׯŸM¬ÏTï½÷žÕµ4­Q}t†^Zì�Õ�O:«èýý�°f?øàƒG�Ø„F�êþ~ðKT´§tÿ™FÅo6«ú×ç%}Ÿýä“Ol£$¦óOß¾}:ó‡>ÿ&®²Y«ÁNd@@@@@ *j(ßJWË×�xÏ )ßV3D"œkVÖ¥EræÑ5a=CY½gª§Ë_|Ñš|XmS/ZêY¬¬­ ž^9/þ>}‚§‰�!ºú/9euS_BÚºòeoù×øÚk¯ÙËcŽ9Æb‹-,ê9ÑÁOnõÏU¾ºžÿÜsÏÙì�?þ¸ÅÓN;­|‹ª’¹t\iÕÕïèR.¶Îu‘&ÀDr\)çKùÔÊó:å”SBìq��üÏ–Uî$gÝ«‹ú¨HŽ«ò�ëÊ7Wù6\ï_ê/ø©Çe]æŒ3l–}÷Ý×¢2¡Ô÷\ùúWÛô´weëèN‘]vÙ¥¬ ‹Áé#9®t6Pÿ‰1¸i�&)[MÙU‘œ“õyé„N°%+ßMwð(;,ô’‡ bs=ÿüóu|êˆ 4²DeÑ¢E6ÄŸ³_Ÿ¯JlNµ|©{¿Ô«¬úñ,m3w}Ä�ùÎ%e–Zš&»Qu±{k?ýÍEeªºZyË%]Üœwœèâ�s]ÜÙ%Fÿ£|vº{¹G› Œ‘:‡P8ÍÖ»¿Î]:ïÁÊ|ô·YÇ•>_)wÒ?6ZõwÞyÇ¥÷ÄÞ½{[ÝÇÆO?ýdCt�‚ÆêþÅÒö‚αþ¾¹•ëÏŠ�VË+b9z/ÓÖéL^Úñ µ‡>ÛWD #_¦¶ÑÿŽ_Öe.Y²Äf!›µ¬nL� € € € €üC€¾YÿÁÁ ¨Þº6uÿý÷Ûf*�U}ʨ·�ÒòXe¢ëðá_Ýš4i’ͨ<Ù¡CÝewõ2¦¥ÅWŒÇ«‘•/jõ+®¸ÂbiÙŸ}ö™f´¸çž{êTª‡€rmÔo¦²otoÇ…^áªÇXÿBÒÓ½0ÿ êÕT@ïbç�wžmß3Ϩe‹@@@@@ Rª ›õÏÙÙ&¿è¦07´s{÷¤æñw_æôLV™=êžúâÄOÊ´ÒAïaÓ_pn¨'—i�%&~á×'æø']fYˈaÇØ,Gy@Yg sú�§~eS^wûaN¯Éªê¯ nÝTkÀ”Ï~°Øc×ËÌÞ{öQ“â(ªËo¼ÑÚ|õÕW[ìÒ¥‹E=¹»"úÍŒ#š¡Ào¼aKP«¥<Óƒ:¨LK?~¼M¯Cõ¸zå•WÚ«ZTqq±UÔÛÝE]¤�ï»ï>‹‘?s<°@*U.­ãJ¢^§o¾ùf{yÜqÇY1b„EõݼysMfQ½†Ýpà VW®Ç™gžK%Þ~ûí7Û„cŽqŸsô ÷±cÇZ]g†Nù¶48›UÙ…å[sÅ‹€ž÷=|øpkð+¯¼bñØcÝýO?ü°E=Ü*a–ã�?Þ¦¼å–[,^|ñÅ·ÛÎ¥/öë×Ï¢¿¬^½Ú^^wÝu��zßä¨ €Ä]eûF®É§õrñq/Ÿ´»û"’ôêÉ.nßÒÅ�]ük…‹÷æbJ)¿gÜ÷©ûÒGíïb?÷U&é .þî o^ßÕ»xKÎÍsõ¿êâ‚"UêÕvÿŽìÿ÷Kþ‰S�•+WZËO<ñD‹ùùùõùùÈ#�´ºžÀa+yyîPxöÙg-êû£š”tÒI'©R"êì§'¨gêž={Ú4:ké©úÖ©»*õÙ^ïÅ%ÅËj#@6kµÙ•l € € € €T�@)W*¾1µ’“m%Ï>쮢—V¾úî'õ椩¥M� Ã-^f[zòÙ. /ürøîªï%#††?K9¦r¼»Œ8èïaØó§ÖI {ÚòOxȾ.ïòŒS�¶8ís÷쿯¿ûÅâ%#NuqÔÏ9Óåõtî䮓ßÿðó+ºôëã®n½0á†ÀŠÖçæZýŒnÈ]7\h±eó¦�±ªÔL®š+"µj¹SÄ»¾ù^ûc‹ñ•ͪë‡cÆŒ±–+3Â*VÚµkgqܸqumS9ör«e„ 6<Ÿä¾ÕÍa`Tt]Ú-Z½ý*Ûô¹çž³µèèR¿ÀÁ+U™ž4:lØ0›`þüùï½÷^‹O>ù¤Å^½\R‡r®¿ýö[«Ï›7Ï¢Š¦<ä�C6à߸ˆîqåçбª^8G�e£ºvíjQy:[¾úªKãQ_cO=õ”Õ9ïB5(¿þê›}øá‡[œ3gN`‹–.]jõ3Î8ÃâŠ.=¬°pëÝê<ãÏ£,$Pñ¿“*[GŸ"P©fÚã'ŸìR ý}êiÔ—^z© ×ûàúõë·ºíÊuU/ùš@ýŒëL¨wFõ.­,Wåˆi½'º»ÖfÍšeQÙdZãVWÄÀ8;Ð5öy÷¥-é@¯£]屺×Ö;ª÷•è€�ô*T|͡Mò²V�zÑMyÇwëàbßN.®Xëâ‡?»xÛ'g»è/—îî^5O÷£�5²F¿ð uOÏ)§¸;k³²²,öíÛ×bjjªEõP¯s—Æê›`Ÿ>[¿§S=±êS“îÒYëàƒ¶¥­[·Îâ´iÓ,ª š’»Ð ¤ïDU�·�MC@@@@*XÀ¥ªUI©áýÀÛ¤IÃk¯Ÿ•blâŒjܨ�mì„{F—i“Õ«f™f)ÇÄYÞ>R,Çì:KÝ4w=ªQC§—šZÇ«»x4¤V-—O]¿~f`Hš7�½¬Ð’æµJQ+Ê_XXcçŽ.¯¶nÝ´À�Ê©änp}ЬYã®¶—ÎÛÚÀÙsXœ¿`±Åàg gdÔ³áõ*½å¶ÒEùYþ{öl¢,Ô�wÞÙêê˵U«VV]Ô'µî<Ói~ø¡Í¢ Yõ}úé§Û�N�:…^c«�Ù¬Õ`'²  € € € € P•U–ÍZ•oëNIq8lß®u¼5<†Ú››»ÁZ“™Q7†Ú´¹)ÙÙ9VÍòÚæÏcU&¦]›·±5\¨Àòíw®S¢kn}l›ë˜ú¥×URÐt#/ü— ;p?—!;EÏMÞ,YÙíROvUµöÊÞÚÄ[ß=÷Üc­­­W&Žz¦SŒÖ’YN¼TÄq¼íÊfU Ë�ê' |ÅŠÛº!C†ØÂ+n-,9v”‹ZqŸsZ´haºGàØÑ %Ѳ£[ÞÏî%I7Ms±2K{wdÒËÇ»˜ân€¤T+�ÌL—2­üSÅhmŸá£%ïË!›5Þ÷ íG@@@@�*¨²lÖÂB×EʾGž³M€Îíݕ̊+Ês<üÄK"\ÅKOÜhKP¿Ÿ.*îf_¾b•µ¹¸xã6[^ÇËÌmÐÀ=ѯ2Ëü…Kmu;tëX™+ ±®«®¿×ÆNûÚ=ù×_‚ÿ"¼‡MpÁ¹§ø'‹z}ï=Ý“?òbÔÎ@@@�2 ܰ¯›<Ó=b#éJ×ÑeÒ&*°ôq•'½>ØÅƱx¤kb\€lÖßA4@@@@b] Ê²Yk%»nNž}xl¡¯¾sÏE}sÒÔÓD>JÏ dܨ••™áâwö1×Ýg�ÿ}Ž{}è²ïž½l‚1Wœz²(ŽÍÝ�gKûô‹ÿY<ö¨KNMM±ú¦�îšhQ‘Ë­^·ÞõßZ9åâóOµ�ðrºŸ}ñ-«oôZrʉGðôóoZ=++=0¤2+o¼å]2öVyÔáûVýôsoX½y³ÆØ×=ו‚ € €DW@§é}áØ¡‰[öYîkSÒ’u.F«h-gºË'Ýsˆ‹iUö‰[;â]€lÖx߃´@@@@ªX Ê®ÔÔð~àmÒ¤a€úY•‘ªg‘wìÐ6DKZ`üÝW…ž JÆ®ÌαõÞ7þY‹í××b«–Í-9d×çé%cÆY,*r½Êot±W�.+º4¨¿¥wÚ%ËVÚêôïmÑÿQT\dC²*å¯À¿½+WeÛˇžxÝâuWžåeõºu²xÕM�XìÕ£›E›í%@@ˆ¢ÀÞW´?F¸EÞù…‹·{qM¾«—¯ä=¶ã–ýÝÜ=·|M,ߘ ø[€lV@@@@@ "�*Ëf�¨ÕÌŒ@‹—º,ÑSjq÷¾^w;¾¹?d{¥¨Á·�{Ì7¾2ªê�õ—óleÿ:ÞµÓ_V®Zc/+¿Ïßç_ždëÝ©{‹»ìÜÃß$«÷Å»ïdñ¾‡Ÿ³xÍ•çZ¬QCýY•‚ € €DY ^m·ÀÿìíâåîÖĤ�æ¸øÆLZæâ¢µ.ªÿÖ ÷0ޤ–.nWßѽ Ö#·wõ6™.R@�è �Í]O–† € € € € 'PeÙ¬›\7˜Iê²4õ5k¢úÁÒVÃà ­u --wÓÒRm^=¾Ü ÙêŒyù®#œÕ«½Ë…[�b[ë×wSëÔÙÖ„å?óÏ…6ç˜]/¢á—Ú„?q„S®X±Ê–�»ÁI¶hÑ´ÄÒ–¯XmC23ê•^q/¿ùîg[ø«oO³øð]#-––¢zæÐclìéç^kñ“O¿¶8po×û-@@¨h�Tï—ŒC;»õ(VôY> ŽÙ¬á(1  € € € € Pª@•e³[£Ž?íÊR›¶yDçö-6Wîß+Ý3ßϼà†roù!ûö±y/¿èŒr/¡´gÎrá\<úîÒ&Øæð»n¸Ð¦éÙ£ë6§,ßÚö3N=:ÌÙïøù0§,ßd‹»î‚N>ûê­Î~Âé[ÿ[¸üêûÓ8 ·ÕG^:<0$Z•ÅK\Û®¿ÝõN{Þƒ,vìÐ6ÄÂ6p��?ì8‹ãzÁb�]G�z�Y�‚ € €”[`]ž›u­ Š\}Ó&)ñ+ ›%S¼Ÿ¡2Ü}·Ié^Œß-¢å �ÍDÂ@@@@@ ,U�Íš’RÛZ¸ËN�,Þvý¥!ZûóôY6vê´oCLS½Gµôúëühâƒ1¸™ÊB�Ͷ ÜËåðºkž�6Sï¼³†Ø”µkWÔEÓ&�lù/L(nrm]÷ s{Ê2Yn®»J<`�^�:|ÿ0gÝoŸÝmÊ?æÌ·¸aƒw�9Ì9™ @@(!Pì=Âeù78Ï=§¤ú•?,´�záý©G�v¢Å¥=£úm¼ò‘ó½=«¨œå&™n[“ɬ~»<·ˆã8÷:ÛŒ € € € €Q¨1wî\[\óæÍ˽Ð:ö¤ør7‰@ Æòóó#l!gž™= �››ku夥¥†SA �‚‚›]續ŒŒHż6nty^9994÷~�ÀìT!°råJÛ°aC‹ ”[B„QÑÈÎvÏÉÌt¹ŠÉÉÉÛ^äw~KÊsï¡Õµè)5#nww¬ž|ð@‹ÅÞsk®yâ•›œU×õaúÚÍ[žGˆãcTª»ã9©y¸ÏùÐq¥ÏWµjUÔݨñAG+£' Oï›"èzÉ’%Ö²Y£·OX € € € €$¤?ü'äng£@@@ˆõÑAë˺ÞNxãƒôØÈsml»–å¿—7Ä·9ê‘×Þ±i¾üõw‹s–ºüñû_}×â1Þ“E^ºî2«¿ÿÕw›»Àâƒ�²8ë/Wà•I£[Ö¬wwt uóV{ù‰‡ÛðCöØm«c£jëy}γï^V§ €@ød³†oÅ” € € € € €ÀVÈfÝ ƒ@@@@ f/\dÍ.,.¶Ø®e‹›°wo×룓>±¸zí:‹ßþæúi=x77<¹fÙrѯXesåæ»ìÔï¸ÁbpQ–è]Ï¿f£ê§× Lйe«¿2ås‹Û·sY´-϶ئ™®’ïõ›VÇeÚª´iÖts5 ÿÚ¿o`)Í“ZýÈþ.ÛwÚO®oY²Y8TS lg�0Êd € € € € €@â�Íš8ûš-E@@@ š Ì^°Ø¶°këæSj—üÑ£UÓÆ6|—Nm-~çå±~üÃt«�z¼Eõ¯ªzž—©šêõŽZXT´y’¿ÿm”•iµ¬º©_¾q¤ÅÒòaî·‹�íÓ½‹ÅcFßjñü㳸`ér‹_ýì²G{¶oe1+=ݢʆ|×ÏlZ�Ú›Dí_mKíZ%} ¼mLOs[DA�² �ÍZV1¦G@@@@þ!PòÂÅ?Fò@@@¨P�5Üâ7mŠÊJ–eçØrš6py¦¥•C÷p=�>øÚ{7ÙII]¶s½£ª´lÒhs5éÝ/¾±z»Í,ÞûòÛ�áªôèÔÞ*ͼuMxc’ÕÝc7‹E…ç/q™ªvéiq ­(uS]�«ôs-9ÿö-žtÀ^�±ªÌ]¼Ì*-»^S£U6yÎW>ð„-p·î�-öîÚÉâêµë-¾<å+‹ï2mU|ùM«´ðÚ0h`«Ï]´Äâ½/¹ácN?Ñ¢z�½êá§­~ê!ûZÜÑ“±J¸EÇ@¸S31*@6kŒîš… € € € €ñ"@6k¼ì)Ú‰ € € €@uHñ~šÈw ‘—UkÖÚB2ëÖ ±¨Ývèjco{n¢Åcörù¤þ>U›6l`C.:ö`‹Ï¼ÿ©ÅŽ-šZ~ä¯|äy‹*)µ]¯©7þß©Ÿ|û‹ß3Áb£L׿ê�»¹4p™V¢%°råJ[TÆ®ÿG½'FkÉ,'‘²³³mó33]©ÉÉÉ¡(Öå¹±+\jå” Þ÷‘ãÇÜf«»ãü¡·÷õÍZÑm8è’km×lñ‘7Þ·xíð“,6ð>37æV«çæ»ÏÝÚ¸ßjn>÷4‹õBåçÚñ]{Ÿ—ÒS·¹:®ôùªV-nÑÞ&„% Oïê¹8¬‚&Z²d‰ #›5† € € € € €@Yøá¿,ZL‹ € € €ÑP£rZó¢ÓCki œ³p±�šüÕ÷ûuë`±2óXÕªW®¿Â*i©îÎà¶ïl±–/Û÷­ÛÆØeÕ%Dvyªë6)ŒÏbñF—c»ÑËÄóàV¿ô_ÇZ,,.v±ÈEJ9´¯•¿Ü¼~9ÂlÄ’Ù¬±´7h  € € € €ġ٬q¸Óh2 € € €ÕF@}tæ”{ƒò \�ŸkÖ¯ßêÖmp=¨ª,Ï^½¹ú�3êյש))ÿúÏ_Θc ‹Šƒ‹½þdœù‡ ™9o¾Å£÷ÙËbJm~l m«¢œVé©ÛššñÄ´Ù¬1½{h € € € €ľ@¥^`)òú.™÷×bsÉÎq½®Ô¬é~çmݲ©Å¦�Xô—5kÝ•¨yó—XÜà=¿/#Ý]_jß¶•ÅÔÔPW™l‚0K8­ÚèõÆòÕwÓC,³~Vº�íÖ¥}ˆiÊ:*œ¶i™›¼žbæÍw¶+VæX¬Y³†ÅV-œm³¦ -F·„ß6]ë›3o‘5`µ·ßëyOiìØNû±NtfK+òúÇ‘†Ž4­¢yÓFVÑñæ_éü…KíåÒå«,Ö®åþ(Úo×ÒbfF=‹]~þe¦­bâ¤)§|ö“Åûo¿Üb—Ní,VUQoDïLþÄ0ùÃ/-®Zížøyä!îÚìqƒ²¨¿_«P@@@�ò ¬Ý’mZ¾…LŸ=×f¼ì�§·9ûëŸ}¿Õin:kˆ _ží¾MßùÒ;�i޾ò«_sšë�Ue]î«Ì[¼Ìâ»ßþbñ£ÜoËrÖYvéØÖê:¢Ô’Ô:îÈiÜÈ=ÇpùJ×/�ô:wpSænpW&uìõî¹½Õ•ßj• *Ù^–hÃY¶|=Ų‚VT¦ÅNûü[›þÃ)_[6ôh‹Ê�{ë£VoÔÐéí7pw‹@@@ "�‚-½�–o9½»v¶?ºgl`öU9îÛñð›ï·Ø¹u3‹ú†8ß»‹ñ‘‘çÛ�¬ô’÷/nð¾ãï¼½ûîÊõ÷Xœðïs,¦Ô®mQåìÛ¶J�ZÉ�ܽ—Å#öêgñÚ Ï[¬•ì†SÊ,ñ1Pæ52 @6k ²H@@@@H$�Z•¹±Û»¾8ÕŸc /}1+ÓõgºÐëÓ$g�ëÇD— /·zÙ[6obQ¥"úÊ ¿Uéõ\N¨¿¨å�º<Äõ]k£[Âo[ž÷LFµP=Øf$¹~lç/týÅl𲆣›ÍNÛ”œ½ÚõÃÛÉË_V4|ñ’6|¥×÷McÏÐ^F¥´lÞØ–£¨êÈYäWyù[ž_¹ÔËnÖ¤¡M¦Þu—.wù°êå¶E3×£kÅ•½÷ìc ï±c‹/Mt}¡ÆBÙ«¿kUß>=-ÖñòÕª{¸«µ?þ4Ã"Ù¬2!"€ € €@DÞ³F"ZBÐÌ&¾gÃŽÞÛ}¯)(Ü’-Û½]kòÄ›“-^8ÄÝ·ç/iuܳCem¹Ý² ÈÍûw¸ V•ëÎ<Á*ó—¸ïÚë½;qÕ[k« çÍü=ÿ„#PÇ@8«e¢+@6kt=Y € € € €$œ@¥f³&õQ¢~Zõ\x_'¹Þ“ûR½ëH?MÿÃvK¾—�ب‘Ëm×¶¥ÅšQêÎ3üVù�ŽÜ îIˆ«¼¾P{õpyˆQÂo›zUo§Ê­çåÞyWíêgeD½yá´m“w=J1¹æ–ë�ÊeVîíOÒzʼnz µ^õʺ¹Wßb[‹?sVû1¸_Ý´Tw Sc£Þ°¸X þ¼üy¬j¶$[·r}Q@@@�Xøzº»÷î›™³->~Ü…_xŠE•ã÷ßÛ*§^w·Åþ=»[ܵ»{&Gi¥YÃ6êÞ Ï°øwÄb=憎©™õêÙËѧcñ?�>oñºá'ZܵÛÖsZ_˜<ÅÆ¶kê~¾ÕëÜ“fšÔ�þ=š¶X đ٬q´³h* € € € €Ä¢@•e³®õú.™¿p©©´ßÎõµªüA!Õ®íÖ¤q}‹ÊÕð¬Ìt«¬^ã®UD6kèV© ŠkÖ¸¾WÔÿðŠ«‡nÛÌ?\žoV†óÙ®Ms‹ê7öϹ ­^·®Ë!mÖ¤¡ÅŠ(¡ÛÖ¹ƒËGþsî‹?MÿÝbýL×Wl]ïºb�”ÚV¯ˆ¢#g·Þ;ØÂ×{½ýþ9ǵA½Ž¶mí””ç»q£Ëiõe¹ê8ôO̺öï­ãž°Í?éØý,¶o×&1)Øj@@ˆA�i?ül­ûÔ+wô~a¸äþ§¶ÚÎg>ø<0¼G;÷[ĨñÿµxÙàÃ-öèÔÞâÄ©_XTY²jµUÚ}×Ͷòoc/�µ^ªûÞMA�D ›5‘÷>ÛŽ € € € €Q¨‚lVeÆý6Ëe_¶ôúWmô<>e_®Yëúîlé’ÿ.zv¼úiÝ<,:ÿ†Ó*­ImÐ3èÕþè´ ô¥„n›21׬uÙµ­Z4µXÃK×lÔÐõ ³2;Çböêµ+"›5tÛl¥VÔcì];è¥Eµù»gX]=·FE¥²Ñëxµ¦ç ,ie¶ªÿßì§¡lVõi«½é_õ†¼|{Y™ÙÊþµÇN}ÍZ—9>fì}Û´rG×Ð Š�æÑ@@¨ºåPÐ(×öìèe¡Þqî©6w§¶­,æxwÐja/Lþ$°ÔÁÔ³Ò]?­s¹§P´jÚØâ{_|kqö¢eï»èL‹Ý;lgQß1­(»uw}¹[ìÒ¶µÅIŸmñ¥ܺŽßËZì%eÛ:¶=S Ód³Æôî¡q € € € € û•šÍª'¿ÿ:s®¹d¤×µX?Ëõѹný‹II›ìÿôzn¸²Dùm¶ÕÕǨzÉÌñzemßÖõŸ­~«´Æü‚B«(§5¥ÂúÕºÂo[½ºi6Ëâ¥Ë-Ö®•l±ØëoTY®-š¹ërÑ-á·mñ’¶jõ‚ššZÇê‹—º!uê¤XÔ1`•(–_~ýÓ––•é®L*ƒµÀÛk«¼Ü^åùjuÊð�·À]½TKÔ‹«¦oܨbŸ¹q£;æ—-_i1'g�šdqÅŠl‹™^O»Í¼kª•ao�÷·6zì½®m^OÄžs’Õ,tV*Í›5±JEÿl^ÿ"€ € €@5Hñ~šÈwßµËWê{ßžµ„´:î»§JF=÷}Y¥y£’Ï,éÖÞ嫪±÷îV9ÎËE­±y ý«{%ëzßa—g»ÞZ;¶Þò»Äú y6d�÷=·Q}÷+¥Ì:Ê<3 [d³ÆÖþ 5 € € € € w•šÍªç¼«_Nå¥þüë²äd—ƒ¹[ïî•›Ù©ƒëßdÞ‚Åõäwee6êËÕ&(w ¿UZEaaQ`]µ¼6^F½~Ûºvq×ßæÌ[dqúL—,Ϧ�X½"ú� ¿mµ½œß…^ï6…îú¤ú<í¾}{«WDÑ‘3áR[ø¬?ÿ ¬B½«WV lâùä妬]ËýQtëÒ΢êV© ’—ç®yž4ü?%–?æÆ‡C&¿êúEU.p``%TÞxûC[ËôY[ô†_tS‰õ>õàÕ6¤u+_÷É%¦à% € € °M�ŒT7IÙ¬¡×�éÝ5z�MMq÷\–V†6ÐFýçÑç-®Éußæü¥[÷ÍhìY'ûRW@Ç@¸S31*@6kŒîš… € € € €ñ"PcîܹÖÖæÍËŸ�VÇ×ãI¼l6íD�ªÈÏÏ�°œy"dö€@nn®Õkx] §¥mé·+0Ê!PPàî“й.#ƒ>ÚÊAÈ,[øûž°œ× �»c‰‚@´V®tO hØÐõY©÷Äh-™å$²@v¶÷̉ÌLCÐÝ–ÛÐXâú£cS µ¶kWóúa¶NÇ•>_ÕòîF sF&C „€>½ë9L!& 1jÉ÷$²YC1 @@@@ض@¥öͺíæ0 € € €$ @—÷š´|�‹ä´:…ê^”Ǫý^Ý·•íK²YdG³™ € € € € PQd³V”,ËE@@@�p’½<0õѹ.Ï͵֋E®¾i“‹”øðž…�”âý •‘ê¶#Ý‹ñ»E´� ²YƒH€ € € € €”E€lÖ²h1- € € €T´€òÉv¬hg–�Q ›5ªœ, @@@@O€ŸYoŸ³Å € € € € U~f�*' C@@@@�ÄàgÖÄÛçl1 € € € €DU€ŸY£ÊÉÂ@@@@@ ñø™5ñö9[Œ € € € €QàgÖ¨r²0@@@@H<~fM¼}Î#€ € € € €@Tø™5ªœ, @@@@O€ŸYoŸ³Å € € € € U~f�*' C@@@@�ÄàgÖÄÛçl1 € € € €DU€ŸY£ÊÉÂ@@@@@ ñø™5ñö9[Œ € € € €QàgÖ¨r²0@@@@H<~fM¼}Î#€ € € € €@Tø™5ªœ, @@@@O€ŸYoŸ³Å € € € € U~f�*' C@@@@�ÄàgÖÄÛçl1 € € € €DU€ŸY£ÊÉÂ@@@@@ ñø™5ñö9[Œ € € € €QàgÖ¨r²0@@@@H<~fM¼}Î#€ € € € €@Tø™5ªœ, @@@@O VÕnrqñFkÀ¤÷§Zœüá——,_eq¿½w±xêIƒ,¦¥Ö±Xµå]¯…·Þûœ5ã‘q£,vìж ›4â²›líÓgýU¢ èmCF^:¼ÄðÊ|YTTd«{ùõ÷,Nzÿ ‹uë¦Z<æð},î¿o‹5jX¨Ô¢ö<ðØë!ÖúØ}cll»¶­BLS£þš¿Èûà„-Îø}¾Åþ»íhqøéÇYÌḚ̂XUåû§Ûª~âU‹……nÏž0h‹°—E  € € € €€ÈfåH@@@@@"¨âlÖ [ó?™ö�ÅaC�¶X»–kÒm÷öZ•¬½´•®\½ÆF]ü'XìÙcûÀd©uêêUUyâY—1:wžËÐ}Ù™ó -Θ9ÛâÆ�.99¹²ßßàî¶ÞÝvéaÑ_ž{y’½\»v½Å¶­[úGUB]£¯»ßÖ5èн-Ž8{ˆÅg_xÛâãO»£î¢óNµXùeÑ⥶ґ×>hñæ«Ï±˜™‘nñ–qOXLO¯k±ÿî.뜂 € € € PÙ¿v!Ž € € € €T3�*ÎfÝÎëóÖë.5V�{öÛɆ,^¼¼Ê¹ŸúïDkÀ=zY|ë}×{lÕ–M›ÜúW¬\k±SǶÛ¶©ìLׂ­••«VÛàç^ýÈâó®·Ø¤qÃÀ„=vè¨W~¥~ýL[©¢Ö¾`á«|úåÏ'Üëze­Y³²»ŒÍËË·õ.Zšmq�~;[lѼ©Å}ìfññgÞ°XUåÛ¦Ûª»unm±w¯Í8Ê˺}ñµ÷mÙ¬* € € € �àd³&øÀæ#€ € € € €@¤UœÍªæ+�uùŠUöR9†ïò­Õ/=ï¤H·/‚ù§ÿö»Íýѧß[|ðÎQc!›5?ßå?[÷À³W¬tý´öÛµ»Å3‡c±aƒú+¿,\äzóL¯ëú‡ýàã/,N|wšÅ–Í\Në¹Ã[ìØÞeàÆB™øÎÇÖŒÃèg±YÓÆUÒ¤ºuÓ\öïkñáÇ_¶xúɃ,~þå�÷÷rZ­R%¥ÐëQWý#ûйS;{y÷x×Úbï8LNNöO@@@@H@²Yp§³É € € € € M�˜ÈfÕ >ct`ËöÛ«—Õ{öèR™•ÂÂ"[ݽ㟷xþ°ã,6l�U™ ±®ÚµkÛØËÏwÏ£ïÚ¥ƒÅÔÔ‹�>ùŠÅ;ï}ÊâõW]`±òËêÕ.¯víú<‹µk¹ Ç{n¾Üâ'Ó¾¶xÍMã->vÿµk×®Ê/wƒká[“]¾í¸/¶Xµ¥ÿîîh÷ ;Þξø&‹µk9Ÿ§Æ;«ª*Ý»u²U�òM‹³þ˜k1½žË½}ôÉW-oÜhqýú 33Ó-R@@@@�D ›5‘÷>ÛŽ € € € €Q¨Ê¤ÂÍï•{mȪìÕŸ~ÎåÐ]wËCÇŽa±2ˤɟØêŠŠ\ÿ§Ê¨]¹ÊµJ%;ÇålêñÁ=Wnžª¢þMNv¿ŒràÞ%VpÜQÚ�ó®¸Ýâú\—cXÏë÷³Ädú2++ÖŸ•Q×ⱃ²XÃëvwŸ®ïÑÃâ’¥Ë-¶iÝÂbU•ÙsæÛª Ýþm·]ëªj†­wÖïs,Þ:îi‹î¿Ê¢Äž~n¢Õ¯¼ÖýEÜsëH‹µ¼ì`«TZé¶}G[×Åçoqì-[làíß]wv9æÓgγ˜ž^Ï"@@@@€lVŽ@@@@@ "�*Îf-.v=<*CSýuê™ïí·‡ ¿ðÊq7äå[LK­c±rÊÄIŸÚŠfÿµÔâ‰ÃÆ”XéWßoC®¹â ‹{ïÙ§ÄØŠ~YTäú�MNv;ÎKý{……ÞðZÞ3ßÕ³gE·$xù­Z6³�kÖ¹\Ú…‹œ^ëVÍ-ª¯[«X©åõ:ªzUÅÙsþ²UwíäòXSR\_·UU~ž>ËV½C·vëgeš1ø˜C¬>øL×[±ò%˜ Ò*‡8ÀÖ¥¨•¾÷¾ûëèµ£Ëu­Y³†@@@@� ›5Á6@@@@"¨âlÖ—_{×¶`áâeÚ¿¿Åš5Ý/¿'M±Ø§W‹•™Çj«³òè}×xÿn ê‰õÐ.²A�Œe±c‡¶[FWbíù—ß±µ-[žmñ`O¬Vm·Ÿü¯ëÍóèÃö´XUš�5°µ~€ë‰õÕ‰X½oÚ´©ÜÍX²d‰ÍK6k¹™@@@@püÌÊq€ € € € €D$ÀϬñ13 € € € € ÀϬ € € € € €@DüÌ3#€ € € € €üÌÊ1€ € € € €D$ÀϬñ13 € € € € ÀϬ € € € € €@DüÌ3#€ € € € €üÌÊ1€ € € € €D$ÀϬñ13 € € € € ÀϬ € € € € €@DüÌ3#€ € € € €üÌÊ1€ € € € €D$ÀϬñ13 € € € € ÀϬ € € € € €@DüÌ3#€ € € € €üÌÊ1€ € € € €D$ÀϬñ13 € € € € ÀϬ € € € € €@DüÌ3#€ € € € €üÌÊ1€ € € € €D$ÀϬñ13 € € € € ÀϬ € € € € €@DüÌ3#€ € € € €µ @âK ;;Û\«§¯øÚo±ÛÚÂÂÂ@ã u*D"PTTd³ëˆÚ¸qc$‹b^JäååÙ�œœœÃy‰@$:®Ö¬YÉB˜�6l°!zäÓ{ ^–[@ç«ââb[Bíڵ˽fDÀ/ Oïéééþ�娓ÍZ4fA@@@@¶�¶Å‚Ä…@ƒ ¬�uêÔ‰‹ÖÒÈØÈÏÏ·FnÚ´Ébjjjì7˜Æ…€2w”+Íù*.vY52%%ÅZ›––Gm¦©±/Àqûû([¨w@]5k’ã�û0Û¬wÀäädkœb,¶’6Å›€ÿÓ{$mçL‰ó"€ € € € €IüÌÊA€ € € € €D$ÀϬñ13 € € € € P}³¾÷Á4sïÃÏ-þ8}ŽÅ^ÀbÍš5,úË[ïN±—/¾ú�Å&�³,žsæ ;uÜÎbtK8­Ú°Á=×õõ·>´øî_XìЮ¥Å«G�k±âJ8m[´x™5àÙÞ²øõ÷¿YìÒ±µÅ³Ï8ÞbÛ6®�QÂiÛÂEKmÕϾèÚöÍ÷3,¶lÞÈâ§ ²Ø³GW‹QÂi›½þ¿½û€“¢¾ÿ?Gï½#R삈ØE[T¬�Ýø�c4FÍÏ’bbš‰-¶¨ÑhÔˆ½F숤¨ˆHçŽÞ¹Fù>ó–u¼½;çîv÷¶¼¾�‡¿;;;óý>ç{3Ëîg¿Sâó3ž{Ñõ èmñêËÏ ¯��z”V}4yºíë²kn­t�÷üý*[Þ¯¯ßÄ–(mÓçÌ]`•»ïoqæ— -êÇñÌŽµØ©c{‹@@@@ wÈfÍ�cMO@@@@@ )õ�ͺrÕëJ»¶­ªéÐ{~bÏþçñ—-^õó³,.\XdñÒ«o²øÐ=¿³Ø¢y"ﯥU¥ee¶ß² ¶jÕÜê©)Õ·­¼|“5ãÚþañ°ƒ÷²xü1£-¾öæ{¯þµg ßsë5óóó-&¶Tß6íë¿OúqÜ.Ⱦ“lÑ’å{õì{6Q•êÛ¦½\ôãZ¥ahêÝ6m<—ù®Ÿ³¸zõ:‹ÉÈf�Ò6Ûµ•…‹뫬[ïÙ¬ŸÏò6üàœ+-6 ò”O=ñ0«¸ÿ‹õUf~1ÏvÝ·�gF_qÍ_-Ιï¹ÀGº·Åq'e1/0´ @@@ȲYsä@ÓM@@@@H–@Úe³jÎÓ«×[�›6ýf¦Q4oV`Íæ™,’lÙî³Á<¶£jjݺe½wkÂ듬 ¹ÍóFUn¹ñR«4 OÚºí©”ýâ»Û¾.^fñW¿8ßâSÏùÜ£õ[Fì±³5 Kçw<ÀâWsX¼ò7wXì,ß!XnS\óü*^ÿKkÚ´‰Å«®¿Õb÷®>ŸìÁyf+@@@ȲYsçXÓS@@@@HŠ@Úe³æåù'¿Ûû\¢¥¥>›g¸l,.±‡íÚµ/¤^AàÕ7ß¼y3«ë˜î0Ð�òÔ ÿ1õÙ¬S§{Þå²k-þáæ‡,Æ—Ù—ýÁ>t÷ ñO%uIyù&Û~~~Å?ÏÒÒr[Þ¬ âœÅImL…�à¬Ó?õ|äÑ£ö‰=[Zæù¿MšäÇ–PA@@@rG€lÖÜ9Öô@@@@’"P1].);Ù¶Ñ’`®ÕÕ«×Ù‚•+×l[Ü h‰ßç]÷+ïÐÞçÁüÞaû[¼ùŸ7s§¶·¸`a‘ÇE¾æ^Ã}ÈD•è­Z»n½ítãFŸvÝzŸÁsc±Ï[Ü{½e ÏÓlÙ²…ÅD•èm›ðÚ;¶Óßþõ‹Ÿ{‚EyÎ_°ØêÍ ,j~O«$¤Di[~c`ÿâF‹?üþû³ŽÎ™çYÉÓ?Ÿkñôqß³˜Ø¥m#÷ÜÍvúêÓ·WØõ#�¿`KfÍžoñêËÏ«ðl]FiU^#ÿæã¢Ë]쌸L¿¾>OëgÁl¶3¾˜gõŸ]øC‹‰-QÚ¦¿ÍÃFïk»¾ðò?Zu€ÏÛ²es‹oNúÄâ/.>Íb:—wß}ך÷ä“OZœ8q¢ÅåË—[>|¸Å½÷ÞÛâÉ'Ÿl±]»v£Í"=}út[ù¾ûî³xË-·X<ýôÓcK¬’q¥,ÈP~ûí·­å’)Î$ב´jð–-[¬=K—.µøé§ŸZœ={¶Å­[·ZüÑ�~d±I“&³»,Yâ¿ViÝÚgZoÖ̯ž”Ú häÌš5Ë^þÅ_X\¹r¥E�´öí}^ï>}üW;ïì¿ j\e¬’•…q•ØÃª3•®nEEþ>¼¸ØçµoÑÂßëvèàsµïº«¿'ïܹ³Ål-kÖø¿Yô7ý½A�õëý_ڲ·Q^•­ëÌ�;׺öòË/Ç:¨³ÖÈ‘~?€ì+ÉWk×ú¯ôtžoÙ²eö¡UÓ£»îºËžÕ5±šÕbOuíÚÕêG}tlIvTJJü“ŠÕ«W[TÛ/ýJUg-�4ýb5±{IÏ­é:8mÚ4kžêú·’®‰z¯5lØ0{6ûÞÉ눫×]ºt±>Öý¸ë¯uÑ¢E¶µN�üØM›Öçov­ ,d³&“M!€ € € € €@. 4Ô7‡uù®#ú§ÎŸLóÜ·K®ú[¥Òû-¿þê cÏ>ûâëVtü+;v𜗠Îö,³ðýÍíaKôV=üè³¶¯»|®Ò=^xöq¶|ìÑ£+}¶v £´íçŸa?öÔ˪ÙÅQ£÷²gv¡çÖ%ªDi›Žæ´ž_óôó¯Yœ<ÕçôìÚÅóÇ�p˜Å½÷j1±%zÛâ÷›¼lÖè­šò‰ç¸=ûÒ[§Ls±~}ü׳NkqðÀþ[¢·MûU ïyà){¸z­çbŒ;aŒÅÃõ<ô(E QÖ¬j�èg}·ÿç?ÿÙ6uýõ×Ç68t¨�½�Z|õÕW-*sGßF¾ôÒK¶dРA«*<àùã?ÿùÏ-êµá53=›U}ùàƒ¬Ò°aC‹²š0aB¸›•Ö<ð@[®¬maáBÏa�^ºuëf+ïµ—Ÿ»’]4õ�jò2vuµ}í5?–—û<Ëñ%w²Y•Ã¥l‹=z…Fˆ²$âe´D¹™ÊùZ¼Ø«¡<‚ªÖ¯j¹¾‡Ov­¾ù×±Ž~¾ªªÍñË7nô_Õ¼òŠ¿GR~�ÖQ“ö>ÓJO™;Ù—g¡¾×}\éz¡Œ`m3Jlüv§gÏžQVNÈ:Ê*MÆÖ¸ýðí�Ÿ|ò‰E�•µÔ¶­ÿæLJ›6mŠõeÏ=÷´ún»ù¯è¯I7:_éܵaÆj:«££³MU«)ŸQž?ºÚVµ~²—'o\Ußr�É{ì1[-¬šÝÙ¬ÉWË–-3Cýµ*ß¼zùÔ<«üJ]wÔ¶ÄîW’÷Þ{ol³Ê.¬~_Êž;ä�Cb¯ÊŽJ8CPgl-Y±bE5Ô™GÿŠ_MÿÆÑÔ™_WÛ(g¹ø­%j‰ÎÊ©¬{feõ­Ò5ñã�?Ž­&±æÍý7�á³V«V­lɘ1þïb½ïн$ *:è#mÚ´±ŠÞ�WßµîÝ»Û ñï<52çÍó_ëêÓÈäý+¬ú†Ÿ ¿{/�^×{r²Y£‹±& € € € € P‰@J³Y+Ù?‹@ 'Â9Vµˆž¦ÙE÷Ûo?ÛÑgxö÷/ùK‹Ûm·�E}×½jÕ*«_}õÕo»í6‹ûïš#¬ª}éYÍÑc+[Qææ#�ê,§ó˜±TZ4º,X`ÏjMeáUºr &o\UßxÍ•?cÆ [MOú»ÎÖlÖä�«ÜÌfUfåC=fzžŒ+oliXÑÑ×{ÚðùJgýH¹óúûÒû.ýÕë̯ó||×ôŽKÛÑ{Œuëü^;ÊÇOå/9ÂmS/tNV ?›¨º®qo½å¿1Õ•N³E<Ø–èš(Ã÷Þ{Ï–è]®®†Ù1ÃÇ:üîH½Ó(Ò¨Ó;R½ëÖ»)�-‰ïÎfÕ¯ÓA,üî½v£ˆlÖÚ¹ñ*@@@@@à[�¿õˆ €@Ö (çý÷ß·ž)3þû4Í"Îf}óÍ7m}ͧYÕ ­‡z¨­£(¶ûï¿ß*ÊfÕ’LŒÊ© Ï�óé§>_°æxRæ ¾ÛTÖ‰¾ßÖ·Êêo8«K9ƒÉÎLgå*ªµóçÏ·J8›5ý{Q—jT„gªR>¯r.ô ¶¾CÖ^4ºô*e(†Û ü…ðxS=¼$þï=¼…Ì­ï³Ï>ÖxåY(;5>›#<DZf Öúšõ8;dt¬5®ôû†ðŒ~ʶÐ8Ñ(�wÎÜQßr] 5¯œ²–âó+e®¨ó˜þ–••™MÙ¬šÝRc@×8eo銦q¢gÃg-ŸÍô{ŽðX Ëëj«3aøJªutÞËŽ¿Öp¯UWæ—ÞcèÝ…òžÂ¿üˆU¦/IÔ¸Šâ Q§ŽWá_?DÙZz®þ…œþúÒ!'.õVÊWU¾¡Ž»² u¾Ò9JÇ=üÞIõê¯k:;i ê—ÎHZ®}Å¿CK½@b÷¨q¥Umù€°ŠîTÞ—„u_ �Ããç! ¯ŸYuõ.›U¹ÕáïÉ5†µ}½63”®ÖÍVö�´eÔzƒiøÂÄŽ+åÖILseªž‰Lªñçº4ÄIR“ôËùè¯/ʼuIjL’6«,-å®jºŠiîZ]õ46Â:Z>ƒ…›§3^8H¯UÖX8O6;2zÂ}W]­ü±=Tuÿn‰I/þUÙ´$QãJ¿¸RÞ´ÎEWRÍÖìòø‘þå�2.gÏžm«IC§z�¡¿Üð™<~k™»DçÍt©¿#½§Òûj� �g”鬞V¾’møüöQî°Æsø_áu2·>ógß»¦èÇE#déÒ¥ö’pæ¸Î0ʘÖßZ8£9ü>¼ª«¡~…þÅUôV¥ÿšd³¦ÿ1¢… € € € € �Öd³¦õá¡q � }{¦ÍÁ÷È#�ØŽn¸á‹C‡µø·¿ýÍbxn5{˜#eÆŒÖÓðü;Ê’X¼x±-�i|J,>£'[ó ÃCB}rVºî¿;LWÏø+fxtéú«´Œf¬´ño½õ–-—€Þqekva|÷;®â¯•ñ{Ì…%álV½«WŒï»Þ!è}ìÞ{ïm+dÓ/”Ç~§¤³ÓÚµk­§zG¤>ÛT¾Rþ~U3Þj¹Î‡ºV†¯žñþ™²D½gn¶lÙÒ/aeâ«.I]ûvÙe[GsàfJO£´S×,ý•éJ§¨\ie1Ë*üÞRã*|eŒßWõ£+~ýÌZB6kf/Z‹ € € € €i'@6kÚ„É¸à‚ lwß}w…]uÕU¶äg?û™ÅÜÉ­¨€`u×ì=zXýÓO?µ¨œå4é»GÝ^3j ú;›òÔ/b¢4cZøž¤šÏ«E‹¶ e@htUõ×ÎÑP«4ê4>•§n­æ­ /ɵÌVýÍN�:5† ,žØÃ,¨$c\‰E¹Êa ßaYÏ*'(Îxš§;<Š$ –ƒ:ÈꪡåÙudÕGel)?Ng�y”˟祿»ø,åû(óKbásšê:Cj_:7Æo?s…¿øâ k¼~£ü/e³fn�jÚòdŒ«š¶!ûÖ×µ^ù†ªï¼óÎÖM�1ý�*Ê”)¶ü³Ï>³¨<ĽöÚ+k@$ ¸`Áë—ÞMéÌ£÷íêu8ç´úó•r«Ê¬×û.�jåÌVõþ-³�Ãy¬jùüù󭢫¡ u§ �Ïu¿ ÅaÃ†ÙšŠ™ÕëªZþ”2[•G¯÷Hz/¤kbø}¸ÆUøÞ¾Ö×èÒ¼ÉágãëZSïĪÚfü«êw Ù¬õëÏÞ@@@@@ ãÈfÍøCH@ ¦Ç·—(GIw#}ûí·mÉ?þñ‹úŽ÷â‹/¶z6Í4g݉Xâsõ�å;ì`[øðÃ-ên­áï-õ=vx‰¾«T~bÄ]WXM³ü„¿u¯°3H@ùº3©¾WãµDyZžÝ)œS -„»¬|Ø¢¢¢ðBê1ͳ¬¿Meìºë®±g³£’Œq%�ÁtöËålVeš(ûRçse‡iNd]=GŽihݺuËŽAë…ú®óŒ*‹G™ªº·²®†±—XEï.Âç+�"Ý·:œ~Uxû:+®X±Âjûñ¹±ñ¯Mç%2|÷Ýw­‘ÊE:à€¬žéýª�y¢ÆUüÞå>w…3¿4•eŸñÛɬ%z×zÊ)§X³ÃýU/¤­wþÊCTNâ´iÓl…!C†XTÞºÖÏÜØºuë �×x�À¢E‹ìÙøut¾’Løåá¼Åøgµ¦´µM­¯z¦¿o—IXCÿöÑYkÀ€öTx¤)Oÿõ×_·å“'O¶Ø¿‹Ùñ¯Èª~Q¡Þé:¨÷í᳊޽‡—H¬èê¦ëiø_ޱ*TÂï=2%cšlÖ ‘‡ € € € € €@ÍÈf­™k#€@œ{î¹Ö EuG9­÷ÝwŸ=¼îºë,¾üòËŸ}öY‹™ò½™55©eΜ9¶}}®otõí¢¾µÖ�‘5—œš¡»p*k v ÛsÏ=í…š%¶v[àUé/ o¼õͶ¾Ïè¤(edÄç=)GC3‘Eé©Fo”53}ͦûáª/»í¶›UrçÎÔ5WÊ^©j„hεøQ¡<Ee|Äÿ þU™µDóù†gõÕèR®´æl}î¹ç¬S£G�¶Ø§OŸÌê`�Z«³ÓÒ¥KíUáß[h~:E­ÎÿR«ž�2�­Î„ºÂ®ZµÊö¥9[kÔÔ´Zù�wÞ±öè|®y3£8¤U’Ú˜Ú�«ø&)Zᆰš‹\¹ùñYØñ[ˬ%áìªZ®±÷ÑGÙ ú{ÔÙ;;²Y«êµú¨\f½KW¾³Ät­ g,ê0ÅÅŶÁ(¿Qÿ&IçFÍ[ÿž­ª¦ÛòðÙ[m;ä�C¬Ò»wïJ›:pà@[®KjVÜ™3gÚ’lšù7¾ãz' ë”ÆIü¸Š—Ô¿u-¨jtiähÄj›ŠáQßžt[B6kºÚƒ € € € €&@6k†0š‹ÉØn»íl³×^{­E}ÏvÛm·YýöÛo·xÕUWY¤è>›Ê‰Sáo¼a,SNëˆ#bPÊB;vll â4Ï£2,4«—²·4ó£²-4Þ¯Un—f}Š> ˜¾9�¾~x�™RWfÊ‹/¾h Ö½Y{öìiõ웕µú#RÓq¥œ‹ºäÎGÉ¥ª¾Í™ò¬r—Ây:Êi}ë­·¬ ½zõ²˜¹yLÕýMéXëîÛZ¢üA½V7QÊÇÑú:kE9ÿHO¿¤Ñö«oU:?+™/¿ü2ÖHͦ­_ ÅÆ*zG¡‡_}õ•Uô[Íß§œ²ØÊYS©é¸ªªãÊTÕ9_Ùšá55³õo3ÜÓªêzÏ ÜU�´ðx«êU™»\c@£+œ?®ßmèì¤3Rüœø:_ÅÏK¯¡q¥íëï]¹‡Q^¿µtXÿ»Ÿ(³¬ê¦²YÃw H‡%£ º§‚®S:Ö………¶#�7�g£NÙ¯zo&«ªFˆÎöʪÖo‰ô—å($£§µÛ&Ù¬µsãU € € € € €À×d³2@�¯ô]Ù‘Gi�•Í:~üx«çr6«fGÕw’š{HJ"Ó ­ú>\Kô�¶êDªP.‰rW5ºÂ£HßWWÿ­u|®AUû /¯ê›óð:™[—á„ ¬ ÊÖ¬µ£F�²%¹ð·Y÷q?�X掇Դ\÷\V6k6Í%ÖÓÙFYºº†gˆS½oß¾á—Äêú»SÞklaÄŠrüÃ3žG|aZ­¦Œ§p“4SdxIUuå=…3Ó«Z3—×e\Uß_�º(yÓÕo'[Ÿ ¿ßЬ¸Ù×Se4ëýUü9¤ú´kw¾Òx«Ë/BÒç(謮¨9j•�ª_rTÕNå`êY] «Z3s—wêÔɯ3Lüï̪škUý•žF£FfUz¯®1\Õ:鿜lÖô?F´@@@@ÒZ€lÖ´><4R/ÎfR†¾ë®þ›·Ô·35{Œ’ý— Yr©ÑÎ�½hÌ„GN¸ž;‰ê©rs43¦æÓ_j»gX$j�鹯Uê�Kø÷ Ú»fåK}K’·G�«øž&o�Ù´eÍ}¯¥_/¿ü²­6wî\‹º/üÈ‘#£¼0ãÖa\¥þ�i®RÍü®½ëW5©oI²÷ÈùªîÂÝ»w·�Ìž=Û¢f³ÕoªÚr8s?>Ó³ªWeÖòºÿ[¸î[È1²Y3åHÑN@@@@HS²YÓôÀÐ,H”Àk¯½f›Ò½wÜqÇïÜì믿[çˆ#ްzî|óë8ÈåÚ묥{y+ÿð÷ö×n†µŒè8�L’ÀÒ¥Km˺ü.»ìò�{™7o^l]+u1* �TÍ›9yòdÛ‹î%PýŒ´Ó¦M³5uÝT¾gõ³”&µñl<ÍtG e³Îœ9ÓZ;lØ0‹á_=†» |-Ѧág©çšÙ¬¹vÄé/ € € € €$X€lÖƒ²9H�+VXc¾ÿýï[,--µxË-·X<úè£-†çc*))±%ÿþ÷¿-þîw¿³¨2nܸmUþ�¤‘€æ˜›0a‚µI9ÊâQk—.]Ò¨­4%4ï~ÿ¡¹ ­áǷؾ}ûX'´¦²{>úè£Øò!C†X�9c T@ ©“&M²íë—:_í³Ï>¶¤k×®±ý*wuÆŒ¶$|¾Rö«î{[™ 1ÍÄÚ£G[¢¹Y_zé%«�3Æb8§õƒ>°%+W®´ØªU+‹ºZ…’³d³æì¡§ã € € € € ��†Ê€çSÓ 7mÚ´¦/a}Èqå–Ö!ú™G³^xá…¶»éÓ§[lÓ¦�Å#FXÔ=¸'Nœhue¿êÙ{î¹Ç–üñãËÛo¿m ï¾ûî OéummÀ€ö¬¾W¯v饗ÚCÝ?7¼œz} h4*?+÷d_µj•uíÕW_­ÐÁ²²2[²nݺØrå‹éîÃZØ¿«ì¾ûî±u¨dŠ€2hÊËË­ÁÑÏWÑ{÷üóÏÛÊ .Œ½DY9Š]Ú{l… 彆³+¬ÀôÐŒ„Íš5Kx 57«ÎWk×®�m_çFE�µ”O­”õ£f3�¡e\%yã*:ÅË/¿l+ëß§z§4räÈè/gÍ4Ð/Æš4ibmKìùaÆ ¶MýªC3J«ûÚ—Î�ºÿ{ø|5xð`[mÿý÷×ÊÄ Ðûý~"y¿¢Ðè}æ™gLIïçµ/ÍB®¨1¦ë㡇jkÖå³µ =YÓìð»÷ÚuJç"²Yk§Ç«@@@@@�¯R:7ka‘ß½ôÉg=£çÅ ïY<ëGY<úȃ-ªü÷IŸóâ¶>¹mA%ÿÿç-WÛÒ¾½}¦ŒD•(mÓ¾æ/Xl•ÛïyÔâç³XÜgÏ�,žsÆ Û´öù8U¢·êã)>ãÌ�÷�·X^¾ÉâIÇbqÌèý,&£LþäSÛìø§}V¸ÏgÍ·¸ï^~GÚ3O;Îb«–-,ª,[î3•Ü|ÇC¿˜íy7‡�ò,žr´Åd|û½mӦϴ6<ýÂë_Ÿ8Õâ­ºÌâÀ}-&£DiÛ–-[m×Ï¿ü†Å—'¼kqåjÏ(9úp?š'ë3Â$öÛà(­Ú¼y‹í÷…ÿ½iQ­*ZæGöàý‡YÊš¬“;�;w¶Îžxâ‰gÍšeQWIeñ(�UÓmÛ¶µgwØa‹½{÷¶HAR) s‘ h½ë^¶l™5C9†Í›7·z‡,î´“ÿ›½{÷î)DPŽêرcmå©Sý³�±åË—[]3±*?z�=ö°%oV¡ä¸Ù¬9>è> € € € €ÔU ¥Ù¬ëÖùü)Í›y¾[U¹x‡èóïì9lç ={ø¿/Øm¡wÏÄ¥mÊû¸ê×·ZKŽ=b‹žwŠÅ?òœÅ{xÂâOÿßiU¢´jqáÛÝ×Ýnñ÷×üØbëV--þá¦û,¶léßàí3Òó U”cûû›<�ïÂsN´ø£cñîûÇ{¼ï¿/ùÉé•qsÍï¼m#‡û÷‡§¬Ê~êYÏ„=îŸÁ$Q%zÛ´ÇUA–hûv>Sçæ-[ÕŒJ·½mo¿ó¡maÂëï[<ûtÿö¬Q£†¯¿ÑgíÐÞóGþR¬RǽU Ú¾Þxû#‹jU~c?�üñïÿ²X䱞ä´ÚÃ4,­[·¶Vi®Õªf\�Þ죎:ÊVÖ�þ*ÖÌMÍßtî¹çæf÷éuÂ4{/#*á°l0& _)CG1ö’* ™ “º 6ž•}ûöµ~)feéT= 4þÍ;tèPkƒb=6†]g„Ù¬q˜h$ € € € €¤¯@J³YnßÏ$ßyZ¥*mÛzÆ™¢VX¸¨È*o½ëëßs³ÏʪÌ>=›¨¥m%%¥¶»ÅKüžÑ{ïå÷}îÖÕg°:è€=-ÞûàS[¢´êÃÉ3l§C¶ïiqèn;ÆpL�oûè>eb³YÕëûo¿Þ¶¬FíôðÑûXåÏ·ø¬Êf�9kŽÕç.ð|Û›~™EÝùñû'ø<˜üûÇ=ÚbøÎÚö°Ö%zÛ´‹ý÷n•�whñ±§ß¨õ~£¼0zÛöÛÇ[5bø®›6mÛø{ïfõ)S?·˜¨lÖè­ê̆|ã¯/µ½7ôäÚ¯‹æä-,ôY�( € € € €@n �Íš›Ç�^#€ € € € €@ÂRšÍZ»V?ýüköÂ#Gïe±K玵ÛHB^Õ¼y3oÉ!#,Þy¯Ï@zÆ޵øÎ»S,ä´Z%Å¥¼¬ÜöÎ*U¶Ð×*»ÃÛ©û\k¦-=[÷¿GÍ$Û«G§ØÆ.µz¿Þ],*�UOuëâë,[±Ö¢^ÕºuK=•�¥m ÙQ-6¥mÊ ç±jG«×¬³JÏî™Ø¥UÚ£Ú¶lùJ{¨Lóÿ½ñ¡Õ/ýãÛ$¶† € € €d�Ù¬t°h* € € € €¤£@Zg³n,.1³g_ždñ¦ß]’&~ûŒôù1oºý?ϻ䋺ßú¿î¸®^Z¸Ã�¶ß;îÆâ_εز…gÝÞ}ÿx‹›·l±¸aC±ÅÄfŒÚc¥,Ȩ}üiÏ;>ñ؃cË×®[oõApl¡UÂyšë7l°%©o[¸=õU¯Ê-¾=Ê}}âT{êΛ®ˆ_!�K¢´êä3¯Šíñàýü/b×�Ç–PA@@@rM€lÖ\;âô@@@@,�ÖÙ¬_ÍY`Ý-/ßl±oŸž îzÍ7÷Ŭ9ö¢ozÀâ=·þŸÅ†ÁD•<ü´Õ¯¼îf‹¿Ñ3 7γ˜š2dÐv¶£K~|¢Åëÿp§ÅvmZYÜcwÏ.œ1sžÅ–-[XLFÙdËÞyñöí|¿82¶£6­}Ɇ�žK.¥¥e±‡-[ÔOÛb ¨—Jõná&­[ïÙ¾7ÞtŸÅqÇl±_ß^“Q¢·ê¥Ç}´¯\µÚâ{&õ¯ÿð‹×_}¡E  € € € �kd³æÚ§¿ € € € € �`�4Ïf�oÝ<ÀóX›4ÉOp×k¾¹i3¾°í8¤¯Å¶mZÇ6pòq‡[ýä³|¶Ê¢%Ë,öìÑ5ölj*‡z€íHQ{|éoYe·�<×µQ£†Z˜À¨ÌÇ[ï|ȶ9uÆl‹þí¥ÃGª{×N¶dÎü%5ã§ž- ”:wlcË[µJ|6k”¶Ù®ë¥Do›f¶½úú[¬�½zt¶xú©Ç&©ÍQZµy³Ïó›—çßÍäçû©£KçŽÇ¼·Å‹¯¼ÉbqI©ÅfM-RÈ!�ÏìnP²Æã¦�[·z¤d®@ðk•� ¼~µjPÐÖ#@ ^€ë`¼I¦/á:˜éG�ö#€@= �ÍZOðì@@@@²E ¥Ù¬ËW¬2·M›|®Õ²²MW¯ñ;Ñ-Yn±};ÏmÒ¤‰E•¥Ë}ýÎ�R‘?¥mƒö·öÜq¿ÏDùÁGÓ,öíÝÃâ+¯½cQ¹™�:¶·z¢J”ViæÓ—_™h;1|‹+Vz^Õ½?gñ꟟e1±EY�·Ýåy¬O<ïûýãuÿÏâê5kc±m[?š·ïg±_ï.êe‹ûìµ»ÅGÇ{ý¤c}¦QÍok•„”èmÓœ°K—­°ý® Z®,F]ëV-í¡²5õUnÝ›½m ‚4¸«®¿ÙÛ¶Öçf½øÇã,.\TkF×.ž)ÎŽ=U£JôV½ðÒ›¶åE…K-Ž9d‹�ù÷4O¿ðºÅá» ´H«!PrE`‹_Ŭ]ì±|£ÇÈes0«µf¿(?˜×[9ã«×ú6ϽöA‹ÿúý â~Õ±%È™Õõ4¼�èõ&Müm@£¸ÓÜž{×–·kÝÜâ˜ýüÊ¢òÒ[S­²bµ_»Ç}Ï3Ù³¶(¹<˜[\±Ä¯q Zw÷Ø(¥oŸ|�@ ÝêpŒïÊÚõ~¾}è™IO»¯ÅæMâW‹¸¤¼Ü¯Ñ¿üËãÏ9i‹ƒúu‹øZ­Æuðëßåp¬Ñ¸ae@Àþ¡ € € € € €@]Î�;×^ßµkíçmÚ4ê<Œ—^ùGÛ×äé_UÚâÛþt™-dŒj…oºÇ*MƒüÖ‹/øa¥¯JÔÂèm›ôÞdÛéC�½hqÁbŸ‰u÷�X<ó‡c-öêY³oJí%Õ”(­ÒüÏÓ¶�×Þö¶uj߯âi§eqø°�-&¶|ƪ*ÿºý{ªî³GoÕÞ#‡Ùò%‹ï~8Ýâ’¥žo¾ßÈ]-ž6Î�fxÎb{XM)-õY\ëR¢Ÿyê²^› �[ƒìÅ‚‚`.Î(Ý^3ß×*«Y«6üá4¿^~“ÿ6B%/˜Aû¬c÷´‡>ÿ±Eµ§¸Ôóqš5õÜIåþ{ÀV?û¤-Î_ì¿ùѯþm±vå¾_Ÿj/Ô¯1Š‹Ëb¹ç¿ž½Þ¡m ‹Çâû*O¾ò‘U–®\oñÜ“|Np•fÍ<ç(>ßvÛóYôÿ|Ïðmж÷wvIs^———Ûšœ¯¾“‹j$P\ìyÍš5«Ñ«X�êj<®êpŒoɲ•þ‹�“/»×â7�c±M«à|¿j„%&ù¿Vîzü‹÷ÿîG›Æý"ÄÆJI™Ÿ«¹Æ@ª«D¾j#%%%VÑ/VõK¸ê6ÎsD(+ów­ú$!±Ÿ'DÛ?ke§@øÝ{ízXTä¿?&›µvz¼ @@@@øZ ¥Ù¬¨#€ ›•‘�>5ÎfÕý”×}3Wr]úòÐ3žk³z�ç¦]0Îg¬VYµfƒUŽÿÙÝŸ¿í‹¯½÷©Åy‹|FéóOeQÙ¬ç\÷°Õ_ºãB‹šõõW{Âê§é¹±;ìe1¾Œ:ëo¶PÙ¬³æz_~{Ï„øÕ".¹â oÏ¡û&þ÷�êÕZuõ=T7w|øûp²YS}€²}5Î:Ìvú—�Œ«„^ÕøDe³jöð³ÿïAÛìš Õývꄃw²utå�ðŽÿN‹ë ŽE¤á:¨í�ÍÉ“•j(@6k ÁX=’@øÝ{¤Ä­D6k @@@@@�š p«Üš›ñ @�\(Y“�Þ+_õ™7=Gõгµ¨ Óø�qÁmöéÑÁ–ŒÞÛ3q¼át‹cλÙbù¦-UÞ�¾p[õ[ÿoÓÂgTä�gXl×Úg_íݽ£Åƒƒ­YÅÊ­ÿ~ÅbÇv­,ž|Ä_”GžÏþ¿d¹ \tš·9G‹Æ@µÙ¬9*C·@ tŒBµ~ƒÏì¹x™ß`ñ�óû]Ž<Ðï  ë”U¬”ó«þéŸ~oƒ½vö´Ï<~_"T¶lÙj�.ùÃcûõðkŸŠ®€\·yDø?×ÁH¬‚¹)Àܬ¹yÜé5 € € € €$L€lÖ„Q²!@�œØä™5u/÷ŽË6²d¥ÏÁzåߟ±ø—K�±¸6ÈÜYÄ??ð†-ùå™>gë´/<;µyA‹‡ïïY<*�Ú·¶Êø›ÎµxÅŸ·xô�>Gê�=,>5ác‹§�õŒžF ZTiÞÌsZÃeõZoÉVOôi0¸ŸÏ=Ú,Ø—²n}iƒ½º¶³Ø¾�çÀjyËæ¾�üü{;‘ 1`t@ ótÜXìs§¿�ø|öâ˜ÃïñŒÔÙ‹ƒêã¯Î°øãqžÎfµ‡ÊW?`Kª¿/s…—ØÃ¿þüX‹»éÿT6/IÐÈf"ú†Y,Pçsà„I~múíÝ>xA“<‹}»µ��í6¸§ÕO3Ìb÷.þ+ŠÁ\áñW±â �õ’±uôƒ�ÓŽjõËþò¤Å+Ïmqß=YTöëžÿÀêÇ´£Åm}þñpá:ÖøŽz�ÇÀwlŸ§@�Œ ›5c G@@@@�ô ›5=Ž­@ÈÝ y¤O­Ç½»µ·Ø¿»gñ¬Zë³Å.ó,Ô’²MU–¬Xk•ÆA®«f Ûk·Ûžüúÿ÷=ùŽÕ¯XoqÌù·Vxö�³ÿ^aÉ߃yëvÚÞ3†TžøûùÛª_ÿÿò?ù½˜ß׳~Úk‡ ÏŽ»ìî Kxˆ €@�=vêg«=ü‡YÔ ª+V¯³úÉ—Ýkqô>;YlÓª¹Åê‹æÿɸlµþ½ºXlÌ>d»nV¿þŽ—,ûU¡Åî�ý:;íKÿåÇ%§j1¾pŒ7a  €@MÈf­©ë#€ € € € €ß ›õ[<@@ ÙMšäÛ.þ7é3‹=‚üšÝƒyèvÐ×óЭY糬¾òþl‹G¸‹Å¦Á«çùvñå'§Ž²…íÛ´°¨u.ñ{4_ð[ÏH}â¦s,æ5úæ»Õ‚‚&¶„‚ €@ꔩڦâ䨵lÈ΃zWxåˆ]ý7·_í¬Wýí)‹‹–û¯=~û“#,¶ ®•V¡ € �p�oþÅ•ðM³A@@@@@ ÈfÍ…£L@ÒH aЖÇøÝ�¯¹ÝgŽ»æ<Ÿ'ÿ3x¦bøÉ �WXôןkK”¿³±¸Ôê�Û·®°NõK‚»3+§U³¾V¿¾žÝüOí�²>ë € �z]­fÎ)²]/_ã¿ùé©ûY¹ûöul ×Á:òr@ ëÈfÍúCL@@@@@ ¹d³&×—­#PA t³/˜ð•Ç'gzüp±ÇBŸ0ªÁ ¿ÍxƒÁ�U»µôúÝ=;ÈãÁý=6­|bFŠ‚©hdsnUFKíwØ6tåYó–Ú†þw×…Û_µÆO '^êù­ÏÞr¾ÅðlªZgQÑ [~ÚUZ¬¾Œýé]•®ð·_gËwØ«Ògà ‹ƒì×c.ºÃnÚ¼Åbëæ>»k�®íëåJ]c WzK?@�o $è:Þh󂦱‡+VûPó·ÆZ¥¸´Ìb~cÿlU¿ÃX¶r­={ÿ-NüdžÅßüäH‹Ãvêg±.…ëà·ô¸~‹ƒ €À7d³~cA @@@@¨…Ù¬µ@ã%ÔL`“'~5øç�×¼î±(È]õZeEÏ*NöI¥Üõ±Gå·^{ ×ÏÜÍcc¾(q ©h\àû+÷¹ÞjWÊÊ6Ù ï{r’цy~Í ofñ«…Ë-Ž=Øÿ¼Ûµñ„öaƒ»Y, ÖßäÏn b£FþÇß³k‹¯Þs±Åø²0”ëúÊÝÙ �ê�{Ò¬ÀsWúÃ�,æ7ö¤úæÁ’üüœ|#¡1` @ ê|Œ7kÑܳYpøîϾöáøbKþzÙX«ï:¸wlɇӾ²ú oM·øÚGs,?{çµã,vªáÜåö’J ×Áo±pü@�oø�æ j € € € € €@-r2 ¥N¼�Z Ì[ã/ûˆGå¥z­¶Eó·ž÷¬¿þz|âd�}Úx¤ €@Š ‚?¹:d³¾[»…ÑÛ¦íÏ™»À*wß?ÞâÌ/Z>t°Å38Öb§Ží-&ªDi[YY¹íî°.ªf§cÚÞýÅ%gU³NMŸŠÒ6msË–­Vyì‰->ùü›[6÷1yú¸£,î;r˜Å(åə߽֞-|�?áq·¾K�§ÁC“<þô=�*#Zúÿo>ÆãN½<Î_îñ—O{|b©ÇêËŸûóѳY7lØhë?òø ߘè› 6´xÂ1£,uøAÃåÙ_·‡�ŽÅb§Žm,þø¬“,Ø®�E  € € € �kd³æÚ§¿ € € € € �`�”f³Þû/ϲ,ß´ÉâÕ—yöâÂÅK,^ù›;,Þwë¯,öêÙÍb¸Œêe{¸¨h¥Ee³†Ÿ­{=z«6l(¶ÝõéÑÉâuWž_a×]:w¬°¤î£·mÙ2÷¹øŠ¿X¼ðÜ,ž}úñ?™æi�ëÖm°˜ØlÖ(mëÙ£«íWGÖ*±²båj«_äuØþ±å‰ªDi›FÚ›o¿o;}ñO(ýý5?±¸rÕ‹¿¸ö6‹ÿ¼¥‡EõÂ*Õ”Wóä×OÝd§6Îó‡¿yÆãà./ãqz‘Ç»çyÔš-šzý'y±'Ö¬]oñW—ŸcqÙrQWýöN‹]»ú˜ßc÷�,¾÷¡¯ùŸÇý¯òªŸÅ ½é—^}“Ňîù�ÅÍ›Y¤ € € € €¹#@6kîkzŠ € € € €IHi6ë9gx–e~~¾EÍü8pû~V¿÷ßžÚ÷ù~³öp6ëÂEž%÷àcž7wä!{Z,.)³˜Ø½Uëƒù+{v÷̾޽º'¶•n-zÛžzþUÛ‘‡îeqô¨}b[Kì\±±ÍZ%zÛâ­žxf‚máÄ£°¸ã�íÛMH=zÛ —ø¤§»ï2ÐbŸÞž»ª8p;?¾EK–YŒ’ÍZèi ßQ~4ÞWXäS 7XãSÂÚ ÷p¢íûõ÷ø¿E‡úŸEƒŸ÷øÏù_ ²S¿ØÕëñ—{½ªR¸®ªg*_~ð�#í E­¡YV·ïçÙåÊ•Öòç^|Ó*š³uÈ í¬®øÔ oXý½ +vÔ>) € € € €@î�Íš;Çšž"€ € € € €@RRšÍÚ¤I“ �ؼÙ'˜\¹ÚSÛµóû•«lÝêÉ~·ßýˆÅÓNò©+åù”–³f©}VK\‰Þªuë7Ún?ŸåmøÁ9WZlVàÓgžzâaÜ„ÅÄ–èm›ù…OêÙ·�ç^qÍ_-Ιï¹ÀGº·Åq'e1/0´JBJô¶…w·d©g�>ýÒ$‹ßõëðS ¬GoÛÈ»Ù~zÅŸ-î8¸¿Å¾}zZ\¶ÂghUž¦U¾³¬ð¡ñåÓ’Š+ô þþšK‚üÓf>Ì4 ¾þ()ÿfý9A}®'×6Øù›åUÕ–GhOük7mò¿Çå+|VÖ©ÓgZ\ºÜ†ÛÙ¢”¦~:”IDATÊg_øø?úˆ¿~¼íú¹Û‚ }Û2þ� € € €äŠ@ðqN®t–~"€ € € € €‰Hi6k|óßxû[ت¥ß—|§Ð�ßõ‰'.öä½_ýâ|‹O=çs�¦¦TÕª{xN_—Î,î8x€Å¯æ.°xåoî°Ø9X¾C°Ü&©TÕ¶EÁ£Š×ÿÒÅš6õ$É«®¿Õb÷àNñä™­É+Uµ-¼Ç·&~h÷±£E‰…ŸM^½ª¶uéÜÑv:p;ÏÄ|ðÑ-Î[ä£îœi±E‹æ£”ÁŠEfh oíº`ÝÒM¾ì¡?/õ8g‰Ç£vñøq0+ë÷†x}@W� Vx¬¾tŒÚðomfÞ|ŸöœŸÞ[ú“³�³z‡öí,nÞ¼Å⊠÷¼iSÏã—æÍ ìáêÕ5œ6¼ ê € € € €@Æ �Íš±‡Ž†#€ € € € €@zÔ[6ëWs<ôæ;³xÅ%§Y,æ9ݰ±8Xþ¨Å3ÇùŒ¢6ú4“6x,--³¸rÕj‹íÛµµ˜ØRU«´ÍÚ©¨%�:µ·ÊÈaƒ-N™ú¹Åäe³Vß¶î]<ÇvÌÁ#-êñV±²ßH¿-ý”i>Ïfò²Y«o›·c[ùpÊgVÝsØNÛ$ýÿÕ·íÆ¿Þc-ºë ‹'„EÍIzíïï²zß>=,ޱ»ÅêK·–þ|ôlÖ‹<ºÁ©Azñí¼>Åþ×åò'½rÃÑ9ÛãtŸµÁbŸ4µÁŸ.õ;J·Vß±B¥Oo׿·-þ±›,.µøû¿Þk±¡ý× ÁØ£G[ìØÞ7]Z¤Ýúâ¯ËÆbŸz¶]»ÖÛð@@@@ ‡ÈfÍ¡ƒMW@@@@@ õ�ͪìÂK¯öŒ¹sO?Æâˆ=<ãRE¹„ËV¬µ‡¸ù¡m‹¿õÿÙ—ýÁ?t÷73H~ëéZ=¨¾UÚdy¹O¢™Ÿ_­´Ôoß,ÈÆ­ÕοãEQÚ6h@ÛÊôO¿´8zT0åg°ÕÒ2ÏÿmÒ$?x”ø¥mÚ«îb?yúl{xⱞ™ìR}ÛÊËý¨½1išÅï˜Å† =ks×�=7yÌAÃ-¾ûÁT‹Q²Y÷èn+6˜\ä±ú¢<ÖOôµÆàñ’÷=†ËãÁܬ�ßõͲ�>ÑnƒÉ—xœa/úùšÑËæÍ›må¼¼<‹Á¼«ýúö²ú¨ýö°øÎûî lÖÁÛ{ÆëÂÅÞÄ=†úlÅ*_ÎYh•ãvµmÿG@@@rH€lÖ:Øt@@@@’!P113ûˆmsöŸ`ògWþÕâˆa~ëô‡ °8Áb‹Ê%¹çnVõéÛ-†Ë#�¿`gÍö-\}ùyá§êX�ÒªV-[Ø^.ºüF‹güà{ûõõ{Óö¹g�ÎøbžÅŸ]øC‹‰-QÚÖ«§'.6z_‹^þG‹£ðYb[¶lnñÍIŸXüÅÅ>ûmbKô¶i¿k×ù=èËË=k²MëZM¹ÑÛ¶çîm«O?ÿºÅqÁQ.æ�ø¾g¹žzâ‹Qʱ>¹kƒ»>®nÝ‹·÷g•Ç:;ÈH}݇OƒóúyܲÕã]s=Þw Ç•>qƒYË<ž¶—ÇežäÝà/3Ós?ãK›Vž}ùÄ¿ÿÿ”-I^6kôVMùäSkɳ/½eqÊ4ODì×ÇÝÎ:m¬ÅÁû[Ll‰Þ6íW-¼ç�§ìáêµë-Ž;Áó1?Ô3[jÚ¶yóYÎøÉo,>xǵ»wëb1%zÛ”³ù¯‡]ìÍw<ó·e‹f�9ÂÅŽ>ò`‹�5´X})õ$Ýýþæ±Ðá+)…ù®m+yÊü6(¸ÁŸ½a¨Çîí±] �3|âÓ—<íq¢§™VYºµô§æ\챩Oµ©,YºÜÖ{äñ-~4åóØkŽãóüwô¡7þfsϾøº-ytü+;vhmñ‚³O¶8`;Ÿ#8J)--�²Z5ëD?óT³žBÀ4·©Ý˜ ��-[¶Øv48ç«„�²‘˜@qq±Õ›5ów,%À¸J”$Û ”””ØÃ&MüF�‘ã¶¡^{�²à4º³ˆbí·Å+Ø&~÷¾mYÍþ_Tä¿ôåLW35ÖF@@@@*¤4›µÂ¾yˆ@– ÜÌÍzÞ³õÙ­;�ò½ŸäÃÖg;¾kßd³~—ϧN€lÖÔYçÒžÂ߇“ÍšKG>}%ë0ʹ·ÆUîóTô˜lÖT(çÞ>ÈfͽcžŠ‡ß½×nd³ÖÎ�W!€ € € € €ßhü­G<@�:œ¹›¿øzœì“r¤´ íæ»;#hCJwÌÎ@@@@�œ`nÖœ € € € € €@ÝÈf­›¯F $Ð8øÚ≓}Ñð»<.Ûè1Ù¥SsßÃ'yT¼FA@@@H•Ù¬©’f? € € € € �¥d³fé�¥[õ'Ч�ïû™S<~ïa�ÉËiU«öÕ;دï�‚ € € € �Z²YSëÍÞ@@@@@ ëÈfͺCJ‡ÒC`DoÇçx<îQ�zLTÚÍ·¤ùXÉcM”*ÛA@@@j'@6kíÜx € € € € ðµÙ¬ ’( yZß;Ëwqï�ÿ÷ºÇ¢õkZºµôW\w Ç3vóؘ/Jœ�‚ € € €Ô³ÒÔó`÷ € € € € �éd³fú¤ý  œÓs†zSOÛÕã«s<>ñ¹Ç�‚9[ ×y}ùF�›{ìÖÊã°`Ö±ƒ½>ªŸÇ¦y) € € € €é#@6kú Z‚ € € € €)@6kF6�¹ÊE=|€÷@1sûBË@@@@$@6+#@@@@¨“³Ö‰�#€ € € € €|ÌÊ@@@@@ê$ÀǬuâãÅ € € € € €³2@@@@@�: ð1k�øx1 € € € € ÀǬŒ@@@@@ N|ÌZ'>^Œ € € € €ð1+c@@@@¨“³Ö‰�#€ € € € €|ÌÊ@@@@@ê$ÀǬuâãÅ € € € € €³2@@@@@�: ð1k�øx1 € € € € ÀǬŒ@@@@@ N|ÌZ'>^Œ € € € €ð1+c@@@@¨“@ã:½º†/Þ°a£½â‘Ç_°øÆÄÉ6lhñ„cFY<êðƒ,ª—XåÉg'X|ñ•Iû÷ínñš_^`15e媵¶£Â%Ë-®[ï-2°¯Å6­[Z¬¯²uëVÛõÂÅK-®X¹Æbù¦M;wlg±wÏ®¥j•— iÖ¶%¶ßpÛÚ¶ieKúõö#ظq^Š[UÕî.³§æ/,²¸ãàþ[·jQÕÊI]>yÚLÛ~IIY…½h¤í0¨_…å©|¨ñ6o�+-_¹Úb£FþÝL×Îí-vïÚÉ"@@@@€lVÆ € € € € P'�”f³¾ûÁ'ÖØ5k×[üÕåçX\¶|¥Å«~{§Å®AfÜ»ïdõÒ2Ïì+ b«VÍ­žúRV^n;m’ïDÊéK}â÷¸d™‹)Óv[õ圅óóó-vïÚÑ¥¼¬²•W®ö,à¯ÛÖȳ•¿š»Èâ¼ ot»¾=RÞ®Š;,-ó#«ŒàŠÏÕÇãÍ›¶Øn{õèbQ™¿jE^^ý 2;8vÊ.ß¾/kØæÍÞÚuë7XTþr�’®&@@@@�¨ÿÏqržn#€ € € € €@¶¤4›õàGš›¢l×Ç*Û÷ëfqY�§©åmÛ´¶Êé§Žµ¨ì¹‹|ÆÏT–®�;ØîÚµõ–,fAMåÞ«Ú—ZÕ©ƒÏÄÎvlÓÊgŒU¦p}e³¶jéyÇ»î¸}…Æ· f³--­8÷h…ÕRöpîüŶ/Í|º*ȽMÙ®+ÝѦ͛myˮײE³J×IýB¯eËWÙ®wßy�Å‚‚&±f´oç@@@@ �ÍÊH@@@@@ê$�ÒlVµtÓ&ÏÝ[¾Âç�:Ýï±¾tù‹Ã‡íl‘E œÇªõË7m²JAAÓ(/OÁ:%%ž»º~ãF‹«V¯³Ø··ç,×oQîêê5>;ðÎC¶³X¿Ù¬ÊÔÖÌ¿sæù ¶:ŽÊ î×Çç±-húM©=LYÙ°±ÄöÕ¨‘S¸d¹ÅANw~0[qÿ`Ž]µ3eMbG € € € €@Ú �Íš¶‡††!€ € € € €@fÔC6ë¼ùžµwÎOoˆ ýäìã¬Þ¡½Ï7J©©À†�Åö’uë=oTw«¯é’±þäiž§¬ÒºU «Ôïlž[¶l±6Ì�_h±W�ΛÖS–¨í:V”+ª£&¥¼¼<{V™­³fÏ·úÎ; ˆ­ŸÊJYy¹íNn 5´úŽCú[\Ì¡<óËyVº‹ÏÙª^X…‚ € € €ä¬Ù¬9{èé8 € € € €$F ²Y·ëßÛÚþüc7Y,,\jñ÷½×¢çË5h0öèÑÁÿ ß-P^îó±Îš½Àb§m-*#ò»_™ü5F ÛÑvRRê3´Î_PdñÓ™s,î̈j•—E…Ël�šµ]ÛÖV/))�µ¡¬Ì375Sjü¼·±Õ^i úžÝ=»6\zK>ÿb®-Ôl­ù�Sý§Ú$?ßö®ìÚ>=»Z½aÐÜn�;X½°ÈgkÝXìó·¶lÑÜ"@@@Èe²YsùèÓw@@@@H€@JSä6oÞlMV~\AÓ¦Vï×·—ÅQûíañ�÷§Z$›Õ¾³(�uÆç_ÙšM›zÖ¡îüþ�/Lê [·úæ•¡©ù:›7+°%�;µ·¨Ù<7mò1и±Ï@šÊ²lù*Û]i�µ:eÚv=ë+Ïî×§»Å®A¶f…’ôPÙµÊ ïbë§Ôò¼Fõó]Hófþª¿Ye­¶hÞÌ—³ÜªµÌÊ*" € € € P?ŸààŽ € € € €d�@вY•çxõ¯o6¸Ýƒ»“Ým«¯Y³Îâ+o|`qôA{ZTY»n½U6nô™×­ßèõbŸI³h‰ÏÙ²…gÕµlé÷¯OFQŽaq0wgY™Ïª¢™Fóƒù(•§¹í™Ôý_³ˆÎ˜éy¬šK´·VßX©ÊCL}¦á¼…Ö¹uíì¬ úçø…ÁQkµÔç±Êd讃U‰Eé½ÿñ [²ãàþS?³íœù‹m¿cÛÄ|ºÖ‹–XìÐÎç�Mýq´�Z)(ðlVÍc»p±Ï¡Ü«{‹…KWXÔøo¬c) € € € €@Ž �Íšã€î#€ € € € €@]Î�;׶ѵ«ßI¼v¥i0Ëj”×.Y깨�<þ¢Å�¦|{É‘cö±úqGjQÙŽ?ú¬Õïzð¹Ø:áÊ…gg“7‹«îíþáäÏÂ;­Pßk��lIü¬šVKøÃ¯æ-²m.Yº²š-ï²ã{V3iV³ZŸҼ«óٖ׬Ý`±¼¼Üb›Ö--öíí3Ÿ6mâ3ɦCI‡lV�´ù =wuÍZÏàÞÌ]Û¾}«÷íÕÍb^^}~"¥Ùsz ƒóf>ßî€~=-4±X»RZêùéu)ÑÏ»® @6k&D ü}8Ù¬ !e#1²cT(À¸J &›Š �Í£ ’@²YˆÉ¦báwï±…5ª�ÍZ#.VF@@@@*`Ò€Ê]XŠ € € € €DàcÖˆP¬† € € € €T.иòÅ,E@@@@²]`ëÖ­ é"Ù¬ ad# € € € € �»|Ìš»Çžž#€ € € € €@Bø˜5!Œl@@@@rW€¹Ys÷ØÓs@@@@r\€¹Ys|Ð}@@@@H²YÓåHÐ@@@@H±À–-[²GæfM#A@@@@�Ü ›5w�==G@@@@ ǘ›5ÇÝG@@@@�t ›5]Ží@� lÞ¼ÙÖÏË˫ѫX@@@�€>[H”s³&J’í € € € € €@Ž �Íš£žn#�éd³fú¤ý € € €Ô¯Ù¬õëÏÞ@@@@@�o �Íú- €@¦è>€ä´fÊñ¢� € € €¤�€>OÐg ‰js³&J’í € € € € €@Ž $ ›UŸû6lØ0G é6ÔŸÀ¦M›lç:ÿ4jÄ÷Fõw$Ø3 € € €™ °eËk¦>OHl{ùT"±žl @@@@rN Ù¬ú 8///çðè0¤‡€¾ƒÊÏÏ·æ�YŸÇ„V € € € �^úE~2òXÕO²YÓëxÓ@@@@È8�d³r§ïŒ;ê4�,Ð÷QåååÖ/rZ³ìàÒ@@@ê(þÜ@õ:n°Ò—“ÍZ) @@@@@�¨ ÈfÕgÀä´F%g=HŽ@ø»©Æ�ýäÖ¨ß$%Çš­"€ € € � º§”æcM^«$ø "FmD@@@@�4H@6«z§O…u�o2ÈÒøˆÓ4²\ >§5///ËûL÷@@@@àÛúå½>±üö3ÉzD6k²dÙ. € € € €äˆ@²Yå¥;}kVD2Èrd ÑMÒV@ßY…gŽæ¼”¶‹†!€ € € PG} ˜ì™Xã›J6k¼ K@@@@@�$8›U{ŽÏ Ól­š¹µ­cU@ ÎúþJç¥ðœ,œ‘êL›%(++³žè:¥{PfIÇèF½ h,é[tÆU½Š,ܹFã* m½v‰qU¯üY»sÆUÖÚzí˜Æ•þ5Ç¿éêõPÔÛÎÃ9ªªkT„—×WãÈf­/yö‹ € € € €Y"�”lVÙ„3ȲD‹n €@ ¤Ã7]YÄ™Á]iÒ¤I¬õša<ö� uÐ|ÐŒ«:2òò º 㪠ë(À¸ª# /¯T@×Áð<‰•®ÆBj$  Vr¥k„ÆÊ) ›5eÔì@@@@²S€�Y³ó¸Ò+@@@@H™³¦Œš!€ € € € €@v ð1kvWz… € € € €)àcÖ”Q³#@@@@ÈN>fÍÎãJ¯@@@@@ e|Ìš2jv„ € € € €Ù)ÀǬÙy\é € € € €¤L€�YSFÍŽ@@@@@ ;ø˜5;�+½B@@@@�” ð1kʨÙ € € € €d§³fçq¥W € € € € �2>fM5;B@@@@�ìàcÖì<®ô @@@@R&ÀǬ)£fG € € € € ��|Ìš�Ç•^!€ € € € €@Êø˜5eÔì@@@@²S€�Y³ó¸Ò+@@@@H™³¦Œš!€ € € € €@v 4V·ŠŠŠ²³ô @@@@H²Ù¬Ifó € € € € �íÿ~lµD€ïL£IEND®B`‚repeat.png000066400000000000000000001076641523260663500336550ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/fig‰PNG  IHDRÖm�Æ& pHYsÄÄ•+ IDATxœìÝw|uþ?ð÷ÌÎlßM6½÷J $¡Cè)JQ좢œžg»ö;½ÓÓ¯žåD{ÃCzD�Þk %½÷º›í;3¿?&,kÒv“ ð~>îq�ÙÏ~泟‰ä•Ï~æ33DQQ „Z­Vèn „ÐG­V“B÷!„î\Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0ÁH0啵ï~¼~ÃÖ,˹ªM‹Åz)3gÿ¡³®j¡>E Ýt+±X¬/þ¿O»_ÿ�¿>!Ó¯¾ñ™Þhq,Ÿ91uÆ”‘…Å%õ4%"I¢ý¾§Îf¯Ûr¨óögON›6iÔ54åä–Wf]+1š¬ðź½Úcû½žzpf|lx÷�¡¾ƒ£`$˜œü2ˆ‰ r¾©ÚÚÆõÛ�ž¹”o4Y5nŠ…sF»»©ø·4j¹·‡Šÿ%Âð¨ÇV¾¶º×ïv GÁ¨Äbúƒ¬0™-V‹Õ^xä䥽/F„ø<ºt¦ce•JÁo<¿b!\ŸiسÿÔ™Kù`³1WrËà§ç:pÞ¾×£K¦NŒ¶¿ô÷qpÑÔö=ùfý¾Êš&û˨ˆàG—L­¨ªÛóë…èpÿôQCìo=÷Īªëßüp}ûú³&§¥ Žå·�&óW?ìMIŒÜwäÒÙK9á!~ìï!“I{×±˜¾š[Ì�Ç+kšN�Íž<~èÆmr *jêuwc`^XZì8=�P÷á( GOe_Î)€†F—×~¸v˜ÍÖë«•r/ÏÁ÷‡gY,Ö}G.]º\|-¿†§Æ¶ß+À×ý‘%3Ú—ùÞŠê&Ç’‹™7Æà;ö�‰ �Ë¥Í:£—FÙ¬3Z¬¶Áñ¡)ÉQ¾Þn*e/Ž!{òº0…1‚Q/5j �Zƒý¥ÙbëÑz/™T"“J’â‚3¯–šÌV’$R’bÚW“д�·G‡åŽ/«jêÏeòÛ^e]c˹ŒœwM˜5u4\ŸŒNž’ÜAÊ#Ôm2×U)ŒŒzlÔð¤ÒòÚ˹e¿{|®B!{ãß?p÷ÄÓã»^Ì`4™/_- Ò†ÄÀ˜á‰™WK`ØàHû:â^ØóË)¾‘3—ò#Býâ£é)ã‡þííÖErº#lÚul×/g`Öä¡ÃÓzýYèÔaÚº$…1‚Q�)äÒƒÉưk¿ÝäÍqœ˜¦"ÃoVŸå8()¯)Ýzàô…\«�?rPÚ�8›�9uþ _§´¢N¯7*²^ö‰€@_M\tÝǼ»Æ“ÑØ¬w¬b4YùÓ€V«­—Ÿ‚îH�ä¬ó)ŒŒzŒ$É%ó'½ûɦƒ™_m6iLÒÍÎ¤é Æòª8~ö_¢VÊý½õz㦇.dñ…ÕM_¬ÛýÐâêߎ…»¹"bèàØƒ‘¿ø•mö_ ~"â�†¥êùá¢;]ç ‹£`Ô¯X–««oºr­HLS¦ëgÞ~>|±¼ª.2,ÀËÃM©”‰ÅbšAÓ”ÅbmÖµÞ+':ÌoüèäøØð¬Ëùÿ|]‹Á F%øûyþ°åp^Qõ?ß_wÿ‚‰Iƒ¢zÚ«°RD^¹VäºE¨?`£¨«ozwõFƒ©õ¶gbZ4$!<¯¨²¡IŸyµ”ŸÕu´láÄ¡)ñaA^n*Å” i!A~|9˱|þNŸ0dæ”QA0 »aÇ1›�µßÏ�×Í{D(•ò6Þþð‡òêFÇ’ï6ünÓA~û//ÜßæƒF0ê/O÷©ãSö<<8!Z.—rW^QSY]_QU¯ÕéõS‹Þ¤Ó›LfkrB,[4­Í:ܔ䨬+EãF ñçKÆŒH ò­©m°ßÂß×söä4¥RÞá="¦ŒKÑë�A�>}|Äõ-¢¨¨H«Õ Ý tË`Y–»>Ù:Ð�&]‹A,¦íwªDh S«Õ8 F=CÈðåÉdÒ^__‡� î¯BÝö0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚¡„îÀ­Š¦i¹\.•JE"˲$‰Ìº=ñ¿à ØL&ƒÁ`µZ]Ø8Fp�áîî.—Ë ‚à_Rþº�qG’$MÓJ¥Ò`0455qç’–1;z† ‘HD’$Á¡ÛAüï;Çq2™Œ¦éÚÚZ—¤0~}îwww‘HDQæ/Bw þ[/EQîîî.i#¸øù_‘H$tGBB‰Dr¹œ¦iç›Âî™Lfÿ>‚ºcñ! —Ë�o #¸d2™Ð]@ AH¥RçÛÁî‘H„C`„á’9IŒà`Y#!A°,ë|;Á=€×_ „ì\w]ð±Sj•kÇžã7ë†Z¥xñ¹Å®8 V ¹lRz*¿Ýؤ»�™«TÈX–5ÍÃSãgWhŠòñÖd\Î ôõШ F“Õf;v:ËjµÉe’!‰Ñ—sŠÄ×/|¤hŠ$ ‰Xl¤Z§‰«k«kí­¥&Ǹ»)í/ƒ¼}½5mú–[PîÂ#Eè¶!“JR“c.dæf])LŒ¿‘Â,Çñù;$1ª¯ç*]ÁÚCaqÛ_õÆ&�ãKŽã'FΚ:òí�7ŠHòž™#ÒG 9{áÊw›JÄÔƒ÷NNÔ6FíÆ ‹»{ÆûKÇoßpuP@Û/à ¹03¡Å^n$IrÀI$â²òš¸˜ëär©\.% B©”54jKʪ9‚¼-V[K‹Q*[­61}Óÿ.¾Þ𨍣`‘è7ºeR 2ÓMã‰8„:¦TÈR’¢SØ>þ’¥V)úº.‹àܪ÷×nk_ž#/†Í¼R¸÷×sF%”–׿Vhu†ç® i0š·í9QVY;mâˆ6-huzƒÑ zƒÉ^¨7˜4î*þ¯–ÕÊt:Áê2Çuy{ºú†æf­>%)º¼²8.8Ð'órA`€wûӌǑ$áî®li1†û•VñŸ`±Úh1ÕúYÁ˜L›�³ÅâØŽL*áçªø+G:è!tÝs„îL ¹tHbÔŬ¼ŒË‰qá—sŠšš['Dª”òÎk\ò;å²NKŠxpñŒ6…;öu<g4Y"Ãü§ŒOÓêô&“åÞ{&ý¸uÿ³�Þ�}µPo0.ž?yë®Ãí/8ùßÖÃ6†€Ó3¯úÆË©T 0[lMÍ-e5mvÔL^]/�p!Žã Š+½=ÝÜݔ啵à©QkÜ”×òJR“cÚOêkÜUb1Ýr}žX–µZm²ësÁŽò ËùÿäöÉÞèa ‰˜ß×l¶´9+V›M 4ˆâ)²Á ‘³òNžÍf9nHb”ãšý>Õ¯sÁ:½11>¼ªº�ŸæW8œºÐ¬² ÿöLJë³Ë—Í\ýÕ®UËçî?|>ÐÏkܘ!¶ýš’Íç¯ÅjÓ¶·ÿ|~>ÝþCƒúuy@nA™ÉdIŠw,ŒŽ:{ñÚµ¼ûeü÷Z^©ÍÆÄDþf‰Ùb©ä·ÓO@B\XÖ•ÂÁ‰‘Å¥ÕJ¹,4Ä÷ʵbo Ÿ¿ ÃZmLqYuqY+¯ûíßB·(•R>$1*ûjQr\Xþ¾ô_›Ì£ÉªTÈêê›ý4«ž\èønFvÞÎ}m3tëžSAÌŸ3ž9qlʇŸm?~öªˆ$¦MÆ646Àë/?Ô~Öæ§_NÜl*G§Ó¯ýfgjrÔÄô4ç�WX\Y^Yèïe0™ &³Åbåš´àãí^YÝ@DtDPUMCqYµ�a|4îa!þºƒc#%ŠõgXÆq’·¨´ ì !B‚|3²ó«k€ ÂC[/{3M0jX‚TÒvÀ›[P&èú„n!*¥|DZ|?ߦÿ"¸©I wuQIUyUã+o|îø.ËqnªÖ¿<᡾ޚ£'3gMJ7zˆìúõ‘áA#S¢Ïf俺j‰§‡_˜“[è§é0jgNÕ¾�×Ш-©¨—JÄ®Šàªš†âÒªØ¨à‚¢ŠòÊ:{ù¥¬|‰Èبàœü2¥BÖ¢7ª²¤ø~vØÁþ>Þn4E…û�8“êá®R*d¥å5ÁÞ¡Á~öuxžµ·§[]ƒvxJœüú)Çú†f™TÒ>ÀñR„P'úÿ>\.‹às™ç2W·/·ŸŽ+¯¬óóvãW2„x¾ðÌ"Çj—²r·ìn]C¦V)øH•JÄ2™”ŸµXmWs‹C‚}‹Ëkwì9¶hþd™TbµÙŽ�¹œšÜãûH„†ø¿¸b�‡Æ­§;ÞŒŸ�‡\&Q«~^|IöÕBŽãã#ìuÔ*…R!cYÎñ’6‘ˆdX–e9‰DÌO?X,V“ÙBS”D"æ'D”Èž¿,ÃÖÖ7©U �Þ˜[P6(.Œ¦(†e+«¼½\ó$„P¿é¿ ”¯ä'Å…ñÛ%õ+_k›×·Ž' ŠJ*`Í×»=ÜwÏõäCw­ùjû¿>øá¹'æ�¿t­¾±edO®‹³ ôíÅ^�èrý ?ìuÌ_pW+E$yèøEÇB�»ªýŠ:~N#ëJ!-¦#Bý‡$F]ÌÌ;uîJjrteU½Ùb ðvÁa „ú‘k"xPlXdX`û ”iš2›­üö˜I$A€»»rÊØä铳ø¬¸´*ûj¡c‰·—»›Jj•rPtà¤ô”Èð`>¿žúÞŒì¾s"¢±±‘¢(‰Dø@{„î4Ç1 c±X]’8 î‚ jkk�F#˲ Ãà :„îüÉ7þWÞh4ÖÕÕ¹j†£à#¢¡¡A«Õ* ™L&‰X–uÉò„ÐÄÿ‚3 c4õz½Ífsáï;Fpoðÿ=š›››››ÁEwnF Xö1/A®oa÷A8Œr~}F!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`ðå^¢(J$QÅß o�Ð튿A6›�a—Ü&Ø#¸7är9Aü-ƒE"Þ& ¡Û§Jþ¾,Ë WµŒÙÑc*•Šã8‰D"‹išÆüEè¶G’$MÓ‰„¦iŽãT*•ËZvUCw¹\n³Ù &/Bw ‘H¤P(l6›\.wIƒ˜#=@QA2™LèŽ „„$•JI’äŸaæ$œ îþnÍAàÉ7„îd|à³ãúEQ8ÿ€W�‚1Pz#!®‹ ”žÁF�ë¢ç‚{ ó)`:§F´é4S«%8h?GÄqÀ@z«Ùì1¾}ØK„P¿pÉ9!D°Ùl‘HÄ{~9êçë%Ó7«YßÐܦÓ‰X¥l]Û±iÇÁa)q!A~Îw©ÿÑ95ìÚ_ÜiE�íçé9޳qls­–]»Ÿ~rŠ5Úǵ¸r­@¯7MM°X¬ç.\N/•ˆ]û!—s6‚†}óƒ`æÕÜÒÀ¯#'2Œ&KÖµÒ6ÕÎ�>zÈûÿݬm1:–O“èåáVXRõÀ}Ó3¯ÇE‡8Ù¡ˆ6�&Xð+nv’” šyŠõ=¹éŒõåÙ®íÀÆí¿†ùMMÈÈÊùï·»>IŽumû¡¾àl‹Dä˜añgÎ_€f­þBVáKÏ-š7›€O¿Ý•6rhÈeRxý•G¶í> sg�{õ�ÏZ456:ôÈñ‹6Óù§TTÕjÜÕ2©ÄÉÞö¦VëN˺\¤B„-k®ÕvÙà÷ìúåL'Æ�LXþð|~» °ôZ~Å¢ySàÀ‘s#Scd2i·ûŽŒ³l±Xýý< ¯°²¥Å˜>b�\&¡iÊÆ0 M-AþÞr¹®Gpï—V¾·fKl„ÿŠÇæ9ÙÛ¾Cp@Ýšž§’cÙ.«��’”e¹eç!1MÍž>Æ^bŸÀ€}OÇFÄD…VVÕf\)€£§_wlíµßßÑ�î!tçà8nÿásǦˆD¢öï2 óëÑ “Ç¥¹dýïÍ8ÁWrоøa¿]VÕ%åµîjŹÌørý/@‰ÈwÿþÔ¥¬\{ÍDz`õW»4nŠÉcwþwu�ŸG\t°“]íSÝüïDÙ�š�¾�7ÎÚútÓåkE/¯| ", ¯;àlŸ8“y)»pÕ“ ÞùøG…B–>"¡¢ªŽãZ—@@n~Éš¯w@ssË·?î68ÒÝí7÷y‹‹ Óhªk†íÎ7tq窻Cô¼Žëh¯‰éi3¦Žþôëm4-zõù‡¥R ÇqÀqðúË�×W�ãM-º™� Ÿ—W>ðÖß½÷ÉúgŸ¿öëí|þ†‡úwþ‹3 ÖIŒŽŽV*åR -¦©C—r–.˜üë‘ w߸ëxëgˆHhÖµH$ô¼9ãøÂ©ãSVµ‹Oê_ž=—Qàˆ×,ôLXh }[úÛ#¡!8�Pw„ûþñ¹¥ÿúðû?üåc†aùüíŸ�v6‚¯æµ~?¿ýõ�àÿVoJKŠ˜;}ÄØ‘É�WPúùºŸ $ÈïÙÇçÛOMLO»”UÀoßï´ûïu²#¨­â’ û(ØßÏKLßô’„Px¨ÿË+ïÿèÓÍÏ=1?,¤Ÿòœ�àøØð¿¼p¿Õj}óÃY<%8З `çÞ,ËÚæÆ¬ªšº}´Áq÷²Zû`9%!ìᥳÚ„N§_ûÍÎÔ䨉éiNö¶ïpp×�Q'Çql¿L üù­/íÛoÿí)\�P§ÂBüßþÛÓ"Q¿ÞÆÙ–JÄR‰øRV.lÝ}|ùC³ü¼`Ǿ3;öµ^Y@]?$/÷—ž»1Üýfý¾A1ÁCSâø—qÇÔ64jK*ê¥ñ€Ž`lK¬.lÃÆ±ÜB¢|³ú5œˆ@¨Gú9Á%+"ŠK+Ørð�Jʪ?þ|ûª'çÏš6² ¤:6" ÀÏs×þ³�-�Î׋i> yR1­qS9–t(4ÄÿÅ <4nÎwµï�ÞêæZm'(ó8Žk¶E>]ËÅÌkï®ÞоüàñLÇ—Ï=6wøÐ¤^ô!4@8Á3s¾Z¿æÄ”a©ƒ†¦ÄK$â­»ŽäVE…ù.¸{‚XL3,»æ›Ý�ß?=ûJá±³×Úìî8Á{mÕbo�6Õ‚üi:fþPîÓõ½[ç·é±ØùC;o-",èOÏ?Ðå‡úúxö¾Ç¡ÀÙŽ \ñÈì˜È bÎô1U5õWsŠÓG‘$L7”¦)O·IãÒFKè²Awwµ“]„5Æ—^>™Ü|¶¹V˱¬®c9BäãÆÎÚåmÒÔ*…Z¥èþ§‡ûº©•ö—R©$1v@_LˆâEEEZm×w�A •J]õØT„ЭÎ`0˜L&gZP«Õø ˆža»q‡„ÐmÏUQ€Ü3Á!p]àƒ‹zÀl6“$Ùá}íBw›Íf6›�oGÁ=À0 Çq ÓÅ æB·7FFpÏØl6''àB·:“Éd³Ù\ÒFp�$©×ëùÿDZ0Bw †aì!à’çØã\pψÅâææf¥RiµZ†!¯º_¡>IJ,˲üüÇqÍÍ͉ke‰Üc‰D¯×AÓ´X,æ/„Ãò"t»²ÿŽ[,«ÕÊqœ«ò0‚{G,³,k±XL&“ ï㎘‚ ‚$IŠ¢\û­#¸—H’ßäÖn!ÔM8‰‰B‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚Á«ãzC$I¥Rš¦I²ƒ‡%#„n?DZ,kµZM&“ o”ˆÜc …B*• Ý „P¿"> m IDATB$ñÃ/“ɤ×ë]Ò,NDôŒ››æ/Bw8©Têæææ’¦0‚{@¡PP~o@EQ …Âùv0‚»‹ÿ"t/B…T*uþa¾ÁÝ…ù‹jÃù{·cwMÓBw!4°8ÓpŒàîÂÄ!„Úp>0Vº«ûëwÿ|tçžÃ]V+.­Ø´í—›½Ë0챓šµ-PV^ýÑÿg³µ.E¼”yíüÅ+Ýì B¨ï8YF°ëU×6T×4tY­¶¶qËO'nö.Iç.^ûnýnðòÒäTœ9Ÿ‹õ«öT×Ô»°Ã!¡à+0MeÕö—�M:–esó‹í%¾Þžjµ²û Z¬Öúú¦ñcRÞùøÇiÙ�>CGoÙu$,$àØÉKV«mP|Dm]ƒ·—‡+!Ô¢"­Vëd+3ršµ-ãǦÀ•k…g.\}pñL8u6»ª¦aî¬t¾ZN~‰˜¢ÂBì;juú]?¿kƘÂâŠØ¨P±xàžòòôô¼Ù[…Åå~ó‹Nö]µ|þÐÔ„6…gÏg¿¿vówkþܾ~iyÕ+¯Úy"B|ÿþêòÎë „úZ}}ï¿’ªÕj׌‚kê«jùmƒÑ\^Õú5\×b¨kh¶WË/,¯ªi|Ä!‚-ëÉó¹SÆ=yöÊ¡ã�/›#•Üz�% tLÒ/¿ßÎ2ìcÞãd³Ÿð’ä&?�#ÇÏï;xÖÉöB‚såDD]}ÓÛÿù‘aXÃþéŸ_D…ù]È.€•¯­¾kê°)†ÅF…ü|è¢Ñd–I³˜N,¦Z2óóowæä•$'Dµo¹¢ªVã®n³×íá�§^w|ùÎßžò÷óæ·m6[S³®M}ŽãÜÜTýÔ9„Ps6‚u-]‹¾Y«7M--†G—N/,®8u>çÑ%Óår©R!«¬i˜7;]¥”@H�ßk¿_"“JÞýx}IÅ�Ñû_þõ ¿q5¿â�¿¶�Ž(.­|oÍ–Øÿ�Ís²·}A×¢¯ª®s,i? Þ^îEçŸ_XæøR£qwµêÉgkuúÿ¶¦ý. f�ž–p÷ŒÛðBwg#øbFÎÆ]Çùí+y[Ÿr^h�oUMcH°xS”((À¾Z·›Ïžœ¶tÁd«Í�Mº/~Ø÷ä²J¥¼µCín qWùyÄE;ÙÕ>RXTþöÖ·/¿˜]äøò™Gï5|pûj±Ñaí U*EúèT°ÏoT×ÔïþùØÉsW¸w ÿV`€¯³]G Í5§ã~>pªª¦ñÁÅ3 F“Á`j_ÁËÓ½¡QÛÒbxï¿[žj^H�ŸV§ÏÍ/ öý½uéÁKY¹É QŽˆNNÇÙ]Í)|ã½ïþò‡c¢B­V[m]c€¿÷Í*wr:®½çþøî�ÄÈûæOU)]pg„�« ˆÓq<†aŽŸÊܱïLû·>øÇ �º¡±Y¥�òƒâÆFíÖŸN®\Þ:·pàhFXˆÿ@Žà.1 »nãÏãF&ÄD…ÀÉ3ßoüåŸ~ÒCÓã›Úíûõä×ë÷µ)üõxæ¯Ç3K>ù¿ç1‘º¥¹&‚Y–Ë-¬üË[_¹«) a/�uîâÕc§³·|Aaqùûk·ñÕ._+ЉðolÒyhÔ&³…¦œ½ÉЀrôÄùÊêÆUO/æ_Ž9äÔ¹ìÏ¿Ýþ³÷÷ô*Æá© 1Q!Ž%o½ÿýœi#E:Êe2'ûŒ–³œy9ïà±KyEÕ ™8}d‚ÉdiÖv|3y‹ÕvüìU£Éz6£àµU‹kj}½]sÏã� ªºî›÷=±l¶}ÌK’ä’Ó_ycíácç&¤ëQknnª6Ë(éëíp³]B·"g#˜eØ„Ø0wð3§Œ:vòÒÁÙ^[Í¿»òúˆiê­??‘u9Ó®£žîç3¤%GÛß‘°,G’·Þ£Ø›?þl#DaqEFv^³VߨÜRß ÓͰ~ëÁa© …¼º¦^«k±ïU^YmN@XH MãU‹ÝœýUœ×OÇñ%ñQ ïž�y9ÿܥ܇—Ì()«úúÇöú—²ó ßþÓ‘ÚzíД¸½±µ�„ðw?Ù ýÃým&Ou:ýÚov¦&GMLOs²·}¤¹YWXZ+—Нä”x{ªý}=ãcBÕ*…J©P(dÿùlóÞý'æß=ùбsÛ÷žj³ïÿ{ç›6%üó9Ow~»®¾Q¯7rVãüÍ¡B�ëG[R‰ØËÓ]­RˆÅ´—§»®åƼ„Ùb½�UøÜãw>~é‘%Ó¤R‰=‚ïž™>yüP¹¼í�ѵ%õR‰xÀFphHÀ‡oþîf§ÝžX6‡¿Úâ¾yÓî›7­G-W×Ô¿õáÿ$4Òõ¡[Šë#Ød¶ÔÕ7iuz‹ÅZWßÔØÔz}Ër;~:jµ1,ËÞït~Â�¦©áC¢(J yÇ'—BCü_\± ë ú I’�t/)!úfou)!>êÛOþÔëÝBœ³l±Xš´:½Q$j=é%¯âõ÷ÖñÛö 8~*£ ¸jΔ¡}¶#5)<59F©”‰izbzJ}CsUu½Á`Òé�‘a¾>mWàâe¡Û�³̰컫7J%â%ó&€R)Ÿ>~Ȭi£íªjê÷:ͺ–{f�‰‰ œ}13gï¯gšµm‹ D"’¦H±˜–Iéø˜P'»„B· ×\× ËŠnågÿtçê8„Ð�ÆÉ«ãú/oéüE¡¾€±ˆB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`wÇqBw!4°8 ÁÝŲ¬Ð]@ ,ÎÇFpwY­V¡»€X,‹“-`w—Édº ¡�#¸ÿ0 ƒ)Œ²3™L6›ÍÉF0‚{@¯×;ÿGݬV«^¯w¾ŒàžinnƱ0Bw8“ɤÕj]Òå’Vî(z½Þd2I$±XL’$AB÷!Ôç8ŽcYÖb±˜Íf†a\Õ,Fpo0 c0 ƒÐAÝÚp"!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚ûV­‰~èpÄÛþBw!4á�Òz�03dQ‹ÄÖî ~"ü噈]y2$«Q^¦—ü1¹Rˆ>"„4Œà^21äÛþ[Š5 ×ñý‚E÷L|õµfðHLm?w!tKpYWÕÔÛl­·1–JÄ^žî®jyâ޺俹أ“:ãýu3ƒ›µVJk!g6õ[ßB·—Eð÷~)©¨ç·iJô‡ ý|=ÛÔ)*®`Øv_ÚøxiT*…«ºÔwôVrk±¦“ ÑjÓsƒª½¤¶¹enH‹»Äe÷ØGÝN\Á/<³È`0}ôÙæð?Žã¾üaϳ�ÏS)åŽu¾Z¿¯±¹³Þ=~ÿ´¤AQíË+ªj5îj™TâªÞ:ƒ(l‘²pÓçyHl/%W),yÍ’÷²ü>O/\ö!t«pY ¦Ï¿ß¥”ËæÍÇqÜê/¶®ùrûS�Üí˜ÂûãCömŽãVýé“§œÞyËÅ¥•ï­Ùá¿â±y®ê­38Œ¶›æ/Mr«ª¹Z¬ä §CM i´ø„9„P{®Y”V]Sÿñç[ {`MSb1½üÁ»hZôÞ'JË«;Ü…ãº;0Ô¸«ƒü<⢃]ÒU—àn>~4¦v¼¿ŽÁ §B* 4ÀÍ+#„îpÎF0˲GO\zû?ü|ÜŸxpŽôú\�\.}êá»#Cýþ½fËÞý'M&s›­VP”¨Ë�P«/>·xÒ¸¡NvÕå¹Õ1_§6/ kPÑÌ;~çë['µq!t3ÎNDddçmùéÄì)öí=u6£ }…¹ÓGì?zÉßÏ‹ã¸/~Ø×æÝÿ|±³MÉÿXád—úÍÌ ¦%‘õ¿Vª¿Ìñæ4Ƨã«5ÛÖbÍ�…mOE"„P{ÎFðàÄè� ?�zPl_²cÏ1‰Dpøì�cYŽ%g.åóSÒ“ïš1Öñ-›�Ù¼ãPx�÷ ø�ú�Õ›ãÂâ#nÖ¸N§_ûÍÎÔ䨉éi.é­óB”f8ˆ×λ‰‹Ò¼ôÿï|PV£¬MMÁ…(ÛžŠD!žk"xî¬qsg�ã·¿ßð³\&™7§ã^‹Õöíú=%µ/¬X "ÉÀŸ»§ ÿfÃþÇï§¢#C:Ü¥¡Q[RQ/•ˆH¨Åìxݯ•j03ÄSÇÂÜÅLûñ/LðשÅ,. FuH´jÕ*³Ù•ôÌËù4MÅÇ„µ«¤¬ê›ÿí-.¯{æ‘»‚|øÂ�`¿ÆÆæÍ»OŠ)ÒÏד¦Ú™»›*).dôðDš7"€Hµ©ÖD—´ˆ9 8 ŒLÛå}$püuOÇW{Im$F0B¨‰DBiµÚ^7Á0ìóYÓeµ¼úÈ™ó—·î9è¹dþ¤?oÇw9Žûù×Ó?8/S+Ÿ¸'Àßûfí €…!*�â*]a3lk¡EB€Ìâ/·úÉ,bÑMº³©Õjg#*ªº¾£¯�guM}aQÅÈaI"QÇ׃ÔÖ5^ÌÌ�2aq+|oçXް±`aIÀñZ?‚@L² $�ù‹ê˜k"!„P/¨Õj|pB #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B f@<ó––«•n.ò8^£¬2Ðà'·Žöi™Ö­6 ݵ¾b³1•Õ ¥µèíçãAQ"¡;…Ð- \Ô{–x;ÃC¡'×î-àÞðú?&WŠÉöoÞÚ�È8{áà %åµ$A O�M™$t׺Åôá³ãJË«·ì:ú»å  M&³ãK±˜¶Ù–eí%$IŠÅ´Ë;Ó,,±âxøéZE'u†{ëW�.ì~ kuz•R^U]o0¶Ž #Üí¨K}òÕ_/Íü9cÛ”oÜq¤±I÷IJY=jM«Ó¿÷ÉÆç¿G.“üë£õO=4ÇÏ×Óu�Eh sA·yˆý‹Ï, ð€ü²?ÛþÁ?VØß2M¯¼ñ…ã¾/<=ïþÓY9eö’‘©ÑKLíugúÓ~,ì:/…׿6¤¢; šÌ–7ÞýnÂè¤êÚÆÓóøÂUË熇Úë|¸vS~quçíüý¥ÝÔÊî|bO}òÕŽÁ ‘£‡ êðÝ£'³²sŠŸ|pv—íXm¶—ÿþp0,+"I€Ö þÙÙÏ>vwxh}¼õ5µZíš¹àGOñpW¿»fó;ot,_ùÚj~cáìÑi)qp=£ƒ{áìÑ飇À–�‡LfK‡íWTÕjÜÕ2©Ä%½u^®VºÁ!Ó|mßÝm‰ð@A�eé6ñ…šÖì�…ž÷Etk^øÔ™,³Å:rh‚R)¿ÿÞiðá79‘éÁ0sbjâ ˆ†FmN^iUMã¼9é Ã44hó‹+ròË—.˜¤TÈ\y¨×:‘á륹YþÀØ‘‰Uµ GNf¥�Lì²5þôܽ ¹ì/ÿúæÕU‹åré+o|ñ‡gøûz­úÓ'7¾7u¼õ×D°�·ÆÛKÝ7)ÀÏJʪ¾ß|è•ß-â+(•­¿'m26î:¾q×q~{djtûÆ‹K+ß[³%6ÂÅcó\Ò[çm.ò°‡DŠ�íäã%’ó/ãü©ÓO0Ã?µñ)Ìl.Ò¼”\Ùyƒ£iϯ秌¢TÊ텓ǧ®ývϬiM^îöBš¦>þ|;)"Å´hö”áŒ�ùä«�7å´ ©>Þ"‘ëÏŒÙlÌÙ ×^XqoçÕÌIoͦÑÃâ»Ó‡ÖnåǼï|¼�ßø`íÖÖa°AŽ¡~ãâ>ÞütžÞ`Ç©=~~ó÷OÎ ðflÌK¯Ηß3cÄØQƒ`Û®ÃVÓ¾M�»:ÈÏ#.:ص]uÆñšß|×͵Øó—G‰Dëæâ?¥®WVtÁ»ögXv̈d`Y–$Iˆ� óõRïùåÔ÷M·×T*dÿxíÑKY¹ç3r‡¦ÄÀ›~ü—ƒgôcÚ�x_[•Õ Ý™Ï&‚eØÊ凵.+¯\~? ~ñ™{ùQðÊå÷\ß Èñ"Ôo\Á��:¨®ipçÚ'"ÞùëüÆ¿ÿ»¥Í¾[÷œÚºç¿Ýá(X­R¼øÜb—ôÓUøõg<~þ¡ ÇBÇÊ:|üÂÑ3WïŸ?žÿN½kïqm‹aé©$IΙ6òóu?‡‡\3r0_9#;Ý–CüöÊ×VÇG\Ék�k>p,K­”½þÊ#NYÇJ+jùõ] ò)-«éNÿë£ üÆëï­kSâH�ãE¨ß¸&‚×~·‡ßðÔ¨_[u#.Ïgä\Ê.xdÉ š¦l «–Ï ô÷iýlŠzhÉLûŠˆí{Ž1L£àÛÛµ¼âM»N Ž–:t-†C'³§�B$'D�ZüãŽcE�šÀqÜàÄÈYSG¾ýñFIÞ3sDú¨!g/\ùnÓA‰˜zðÞɉƒ"…> ®Y­¶ÅsÓ;©PUÝä/‘·Çñ"Ô ×DðKÏÝëí¥ùÃ_×R4åãía/wS)$4íXBÓ4MSm¾l.ž›>jxM‰n•ö“[ u­ç ê,qþmŒuûÏÖOní¤)oOMR\ð’…SøÌ=t삘¥�l¯°à® ‹54ĆͼR¸÷×sF%”–׿Vhu†ç® i0š·í9QVY;mâ’l;£ê¤�@ïc§³»S³´¼fìð.NÇ ¦ÿm;2mü`‰¸ƒ/×q Üñ"Ôo\<Üþl¬|mõÒyã“~3`Yµ|®¿¯|¹î'×ö¡Œöi±GðÒmâÓO0”ÃI!Ã,Ý&v¨¬ë¤)�úñewñÛuõMû�f,˜=Z&“Z,ÖÂâŠØèPŠ-[4ƒ¯`4Y"Ãü§ŒOÓêô&“åÞ{&ý¸uÿ³�Þ�}µPo0.ž?yë®Ã,Ë’¤‹ÏPùùxðKÇ:Çq%¢üý<º¬Å¥5ôM®©›˜žÂŸdêxê7.ŽàÇ–LU*åf³ÅÓà &"” y›š"R$¢Dp+aæ‡5¬Ëo½(îB 5üSÛº¹†¥ »Ùì¶ÝG½=T#ÒàjNÑç?ì{áéù!A~ö :½11>¼ªº�Ÿ=y!N]h]D|!«ðo|ÈE‡ø%–³qÇ‘…wu6�°aÇ‘á)1]†µÑd€)ãÓ¤ÒŽGÁj•‚?')Ôñ"Ôo\ÁuuM À‡‡ÛÞ§m6fùCwá8a¿â‹÷îšÍöíäA�4®Óé×~³359jbzšKzë¼hµéÞðzû¥j(ûú‡6?ÒûÂ룺w³ˆ ×2®–<÷ØÝ4M@RBÔ èË?n=¸ê©{ù;0˜Ì£ÉªTÈêê›ý4«ž\è¸{FvÞÎ}§�=°›K™ôé·»�žÌ{“ ‘ÏÔéôcî×eS£>þrg'u–/›$àñ"Ô?\ÁŸÿ°Ï¾=sòˆÿ[½éBƵÔÁq�ìòÒs÷ò+ˆ?ýz{ç�74jK*ê¥ñÀ‰`øcreQ‹´« ”[^ìjE0¯®¡é[O“ÑzE²Õj›<.í£Ï·Ÿ<“Å/ÚkjÒ€Æ]]TRU^ÕøÊŸ;¶Àrœ›ªíW ×zbÙ¬ÿ~³«ª¶qÁœtÂa/ÇqvÑéô�Ý?³;í45é"B|ž}|þóYóÂÓó}}<ß[ýãøQIÑ‘ÁŽœ?{)ù²™Ñ‘ÁUÕu èñ"Ô\v:ŽÏSÞô‰)?<Ÿ’ÛÉ.Ž+�ãÃ;©âÿâŠ7çûéBb’[=ºð� ÿor›žûÂëÿ˜\IwãZ�þ“/¶›ÌÖü¢Êw>ú_‹Á¤m1²l뎻~9“28F!—•WÖùy»ñ÷Ð ð|á™EŽ�\ÊÊݲû¸K­O>8ûÈɬ¯ÙÄ0lp�”–×P"Ñð”ØîŒyÙ׊¢#øaà ¥Å�öÓ�së·MKŠøÛ—)ä2Ç‹P_s6‚I’Xñðl�»Ú±pÜè!1‘AUÕõ�Í:ÕÁÌ %"Ÿ~Ø~O®¤´*¿°¬¡Iç®îxPèëd?û‚˜ä^Rq_DÃæ"Íñ•ÃÍ*uóû³J¹Ljcب0_w•Z)W(d ¹T!—Êdš¢>þrÇácgNu%§8).Œß¥¤¢Þ¾æÚNãÖÙ�ÜUÒG&Ž_YÓXZVc‡'úûuëd¯¼²6ãJÉÌ)#®åÀ¾Øn±2‰±A/¬X¸ý§£ç2 ê´á!¾ƒ£Èñ"Ô§œ�`‚ b£CÛʤ’ºúæu[©•²¹3FÚk†yÓ”ˆ ˆwÿþ”cý³¯]È.òÒ¨&�@S Ý­6½”\Ùåõo� (Ñ__|èf§%ÍMô÷€1#’øëwÝÝ•SÆ&OŸ<±ZqiUöÕÂ^÷¡GD"Q�¿Ww®¿h�‘SÇ ðó®©mœ8:1>&44ØO*•Àƒ‹gΜҘ“WRTZíéá6pŽ¡¾ƒ÷ F!a¨Õj|pB #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0.~|'B·Š¢D"EQüÓ=ZŸñÑ+üCž‚°Ùl ÃØl6—õÝú0‚jK.—!‰øÿ'»ýL�›aY–a’$9ŽcYÖ`0¸¤Ÿè6€ý†J¥â8N"‘ˆÅbš¦�Ï_ I’¦i‰DBÓ4Çq*•Êù6Ñí#¡är¹ÍfS(.IÞöD"‘B¡°Ùlr9>þ`#dGQA2™¬¯?H*•’$IQ8 ˆp.¡ë‚ I’ gN¾uÿ)üi:t‡ÃQ0B­(Šê£ù‡öpŒxÁÝПÜ?„8üw€Ð Á¨Ÿá¿„Zõõ°°‡&ÌFY¬6pøÇ$‘À0¬c±˜æ7öî?âoëô¹l©DœœÝå�:›][×4gÆÇB“ÉÜæƒl6†eo|:I’öOG¡ÅüÑÚM%õö— g�¶Ú˜m{OÙK2ñ?ÿô8¿}ðxVdx ý-†awî;=u|ŠcƒÅ%•ïýw‹ýåÿXÁoèZ u ÍŽ5 FÓ+o|áXòÂÓó÷î?�•Sf/™½dÁÔ^Bõל“]:oüˆ¡ ðùw;ù’”„°‡—΀ì«ßo<ÀêõFƒÉ¢V)O�ÍN)—K¯æM–´Áq-zƒL&]Ÿ ‘äžYPV^óýæC+_[íøY®¿|áéù^žîðâ3 ƒ|†}þ/kø·Î�>zlÙyÈd¶tØçŠªZ�»Z&•¸ä'ÐFIYÕ‘WóÊ}½ÜfLÄ—›-Ö�{Žf\)ò÷¼{æ_o°Ù˜ÃÇ/dd6é iI‘S' —JÄ Õé>—uµXLScG&Ž–ØfÓ›ïßÜñ_ýoŸ¶ÅèXžòØsì/·í>¬�˦LVU]wùZñ¡™qQ�íÿ,åæ—üç‹�ÓÇ™5mt_üLBí¹&‚×m9´nË!~;&".dÙ³R!@C£¶´¬ Œ&Óº-‡žÕ¨£"‚~9|~ÜÈ™LòîÇëG �3r0¿ A@€Ÿ·Ùl€W~·ˆ/<~:³º¶qÞìqüK�ÚÆ0ðÎÇÛôgã®ãwç·G¦v0ÅQ\ZùÞš-±þ+›ç’Ÿ€£ü²�¿Ø™>"~ÑÜqWs‹?þrÇKÏÞççë +ië’ IDATë6îkhÒ-œ3öòµ¢�>Ýúʪ%r™ô‹ïw56·L=˜¢È{Oµè�KNÕêôï}²1ÈßcδMÍ-v¥)ѰÔAöO©©mllÖ‡ûß¿`"s}⥺¦aÛÞÓiÉ1öj,Ë�ËÈbÙ,ȼ\p%·Ô`4C;«mÃöÃ.ÿQ „:çš^47}DZ|¹n_2xPèC‹gÀå«?l9·ÌÎ)€ÿw+ìüùÄÔ ie• �,�IÄÝ3FúÝOñ±áu›ÆùðµJ¡Õì/Àfdà÷OÎ ðflÌK¯Ηß3cÄØQƒ`Û®ÃVÓ¾Ãwu�ŸG\t°K¿�� ¿åËfÄÅ„@LtèÉó¹—²óü|=kj.fñcöAq—s¿¹”•7zxÒÔ i>^ … ZZŒ›:yÏœqj•âÞ»ÓãcÂøSç¹ùe'Î\vŒàœ¼’Ô¤ŠñÄ;sájbLÐà¤uÊ+k ÐߦN>uâðw?^߾χ�]`YÎßǽ/~ ·“ú†æï7î{|Ù]rYÛïO£ù³owÜ¿pª§‡› }C·"×DðúmGÖo;ÂoÇFÀ¥ËÅöi~üØs¶ÿt„¦¨‰é©¯þóË“†ý°å`|T`^A©Ñd1Í”H´÷À)þ 2ÇA]}Sc“Î]¼ú͆öÏâ×1áþÏ<Þ:€ý·ÃÄ1oëžS[÷´NFw8 V«/>·Ø%ÇÞMSöXÓ”�§Z¯7@^a¹TBøy€HDŠ ¾|­hôð¤ðГã^^î`2™eRIB\„½ÜÏ×ãbV�ã§\ÌÎ?*Ù±¤°¸üBVÑ++9ÎW\Ë-NMŠ$ÉÎ.Ī­kܽÿÜ£K¦îþåtoúN!—Kë´ÿü÷·¯¬¼Ÿÿ«É3šÌÿúà{†eùI$„ºÉ5|ï]c†_ ‰D$ÇÁèá‰üË+׊6ì8—_Í+›;c”Ùb€â²jm‹©¼ª^o4¹©ä*¥|ܨ„½/N› ˾þÞ:¾…A±a¯­º—[vñpWMŸf/Yµ|.?ÊŠ¢Z2Ó¾"bûžc ÓÁ(¸ß˜Ì–Šš¦ô‘‰ ÕéÝÕr{º©E¥ÕmêWTÖIÄ”›ºí�´ŠKkBƒ|ì/u:}~qõ£÷9Ö9sþjt¸ŸŸ�§cáùÌü{fþf IÇmÞy8)>$qP$Fp—dRÉË«îëýïßüà{{ Mæ·ÞÿžaÙ6¹ŒP—\Á4E8|î§_Ï·)Ÿ>~Hhˆ¿Ý¬m©ªm ô­©m�ˆ©‰éiSÆ£(‘cýð�º²ªŽ‘ïþý©Ââò÷×n“ɤ2™Ô^G&•¨”rÍ�ïz4MÓ4µêOŸ86µxnú¨áI4%6‚O�É¢Ddb|è &™ÃI,¦ššsßX£É|ðxæÄ1Im­Å%•¹EUO?<Û^’[P:(:Hîðc1™-§/æ-¾gœãŽuõMµõڰЀNzx)37¯¨úÕUKzu|·Žãº³VW*¿´ré¿>X÷æß¿ü»¥¤ˆü×ë–}ùwKåri÷Wûâº`.¼MÏø±)C’¢ÞüðÇŸYh0š>þbçß^\&•Š ŠÊù •UuAT×ÔçU$LJJÄôï~[Û sldîôŽ3›¼6+"x?ýzþ•ß-R«Ž…«–Ïõ÷õ€/×ýäªãrFm]ã®ýg§OHQ© ”K�Ë3Ì«»ÛoîX¸ç—“Ç�½~N’g±X7ï:áb/̼\˜4(ܱZeU�ÕÆú{;æä• &¦oú_Ù`0mÜy4%1¬©YÛÔ¬5™­ Mº¢âŠÎSɤ’?þné[|÷¯�Z¿«½²ê�ö³ÃuÉel±XY¶õ/Ë˲³Õ^!.&lÖ¤Ôÿ|±S&¥ÎËÞwטÈðÖoÓ[vu|FþµU‹+*ë¼½Üiš‚ëãÇ ÑhÔVëož#"E"J�O}öƒÑôÙw»C½'�k�3Q«�Íz–åøîiµz/‡s�'Îd<‘ýôóUʹÌq܆m¿Ö5è^|ö>û ¯Ùb͸R|×o/Q©¨ª#‚_¥gw)»`Ô°Aps¥åÕ:½éÔ…¼Sòø’ú¦–Œ+Åoÿuyï�üÎ —I^^ùÀ[|/¯ÄüE½ä²þìÛ]üÿ·z_ò÷w¿×¸)î½;Ý^gÚ¤‹mß‘Kökç<4jû Ç%ºUÕõuõÍàæ¦ú`í–Ééƒ'� ×'"|¼= M¿»f³};yPÜœN§_ûÍÎÔ䨉éi�Të5£ÑôÅw»Y–[¶hšHÔ:Ùd¶Ø*ªjùUÌÙ9¥3'åߺ˜™³~ÛÑù3GÆE‡Úá8nÛî#ç3 žyô.w·³Ã…e¾š6KGjj=ܴÀ·Eo¸VP¹lÑ´Núj¿òÞþð‡Ä¸P\ÜM| óB÷ݪ\Á/<³¨´¼ú“/w¼ñêc5µ o~¸þý7ž&"ûê�óø6s%·ÔM%ûqû?ÏNZcXöÍ[×NIÄô]ÓGü¸íhÒ Ho/M'{½ôܽüzƒO¿ÞÞyoµ%õR‰¸/"X¯7~úÍβÚûîSZÞzÂ-",ÐÛK“šþãÖƒÓ';ZÈq�œgÎ_þnÓÁ�Oo ÿãR)åA>›w±X4u°©ùI„eW€¥×geç‹hÊÛÓµÎú×^œbùÐhb®ÞÌ=¢�y�ƒZy¿™½½ÇE Ôª¬Á)é·G ìÚ1ØD":"ÔW§«ùòû¹T4zX4„†øõè&Ì‘&Ñ ¢;zÍ›>2À¯vÖ´c§.¹:«@.—†…ÔÙ¾³“ᣱ¯¦¹¹¨Âï´p ‚ôuÑA–­f¸Ÿ|åF¦«“jÄàéíµ•Ä”¬è¨�Þó&#+×ÕYUçìBÈÞ™™™•••ÍÙð$IàÔ­cÝÆÝ#‡Duði¼Ø‘E"zÈ€î�C–¤RikÞØX§ÓéõúVÛ²CjµÚ ŒPÛ •J…{·Â¾8ŽÓëõÁíœZ­Æ¦+BwYNöß6v„ìÞáZƒ�$Ió8îÅ0ŒÁÐÀ¬¡¨½ÁV0BµX–åy¾&iµ!û‡ŒÐ] ôBÿ¬^¯gæÁåP;€ŒP-’$µZ­ð³…š¨,Ëšw�ƒˆ`_0B–Äb±F£Q*•&“‰eYòŽfn–ã8Žã„þžç5�D‚W6#Œ`„ê�H$Z­– ‘H$‹…«`š3·¯y F£Ñd2ñ<�ù‹Ì0‚ªK,sg4õzýCÎãÞ8‚ ‚ I’¦iì@–0‚jI’b1Þµ8üƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒ(#Ôš¦)Š¢iZ˜ ¢ùÓôÁ0 ˲8S0²„ŒP]r¹œ Š¢„ŸV™¬R˜ú’çyŽãt:�Uê‰Úìˆ@è*•J˜OR,‹D"«LlF’¤H$’H$"‘ˆçy•JÕüm¢¶#¡»är9Ã0 …¢…¦”¤(J¡P0 #—Ë[bû豃ŒP-𦠂�Éd-½#©T*ÌÜÒ;Bö„j ³ªÑü9Ú'ìE8M‡Ú9l#T«5oi�­`$ÀFè®ÖŒàÖÙ²sx tF0jex T«¥»€m»;dŸ¬Áz½aÝÆÝ啿5%eŸ}õkU•¶‘WmùýÏ”´Û¿— —nì=x¦þ®-ÿqg4š,×�¦&½„j5Ö9!p9>©¨D£V)Ìk8–Ë-,çý;Ÿ”šÛ%, þú¬ìüUßí2?üòãEÂBUµ®¤LcYRW£ç£õ–kÞX8åÐÑØë·rÌkúöè8kꨦ¼„j%Vˆ`£‰9|òÊØQ½¯ÝHeYnÓöãæ§þùéϳ3F8:(W¯‹©óÚŸ¶ýiëQóCo—7^�I¾ùêԜܢ-;O.}ïË—\¹óð�…S\]à­W§ùz»³,÷·~+<5mlÿAý»À®½'õcƒÕÎ+(vrTˤ’f¼õûÊÎ)8}îZRj®‡«Ãè½C‚|…õ£iïÁ¿®%fùz¹Lxj€‡›30 {êì•k72*ªtÑ‘Á£†÷–JÄPY¥=vêòõ¤,±ˆØ7¢_¯ˆ:ØV®Þ2}â�Ÿ~;\Y]c¹>ª³ÿ‚¹ãÌcöŸRÈe#‡ö*(,¹™œuò\B§Ÿú–RÒ²¿^¿÷É!ÝÆ<Ñ¿%~'¡ú¬Á—®$@§Ð­Ú2kò�7N€²²Ê [�¼eõ_B¨qÍ�`ƒÑôçñËzw‰‹OòñpêYûáÚq>Þîj¥¹°›‹£¦²ÚòåE‰Eµu IRhÕÖ!„¨UŠÊ*�ù!05,¼þòdo7–aÿþï…õ“F÷د+Äì;ebØúÛtrTûz:wêè÷ˆo»Qþ¾ž/Í-üi íp>.åê�TO—¢â²ø™B›½K§ ›)?_½žÚ¿w䨡Ñî®Î … ª«kv8?iÜ`µJñô„A�C;§ÎSÒrÎ]¼iÁ·R³{DÑ4eù7ì╤ˆPß®‘wÿê俀�—;ŒÖ{Ô°ÞŸÿoký:Ÿ:s…ãx/÷~ÿÈRi™fËöÃ/Ì/—Õýþ¤«1ü°iÏœi£\œlR7ô8jn_¼|³¼R·÷È%XôìØÆ gç|½~¯åš?^øãàaÙÍYµâ�yÂ2ÏCIiEyE\ŽOúù÷cæ—¡�^¯¾PÛ€ý¢ã¸þfl«UŠ·Ï|¨wØt"mŽE±ˆvwQkµ5�š‘+•ˆ¼=Ý€¢È.¡~7“3û÷Ž ð1¿ÖÕÕôzƒL* ïd^ïéá=Ýr/ñ7Ò†ô‹²\“‘•{åzæ;KgXöW$§dõˆ &ÉÆ.Ä*.)ßôòó³Fí?û¨oº½�Ë¥¥e•ÿùbÓ;Kç55zç_na9Nh| ô�šÁQ!�¼��º¬7˜®'ex{¹­Û¸';¯TxÖܼêÃW(Šš"?ÿðaå?Vn˜2¶÷¨0¸wóÐñËæÍ²÷ïU¿Ë]Â:¼·ìn\îÚwÚÙQ5bH´yͲ—& ­< iú™YOqw¾˜ï>x†eh·½Á˜WT1¨oTViÕrs:¨™· ë”ÏË/‘ˆiuÝ™´²nøº›VUiÓ² ŸŸãkYæb\RÇ@OOwË•q i“žÐH yžß¹÷Tdgÿˆ.ÁÁ$“J–/›óÉê-+¿ÜbNá½á“Õ[XŽ«“Ë=Ps#X­R•]KÌ~géÌ}žMIËžóôH¦Þw!›P-ŠüüÃW2²rW¯‹‘ɤ2™Ôü”L*Q)åÎNw¿ë‰D"‘ˆ^¶b­åfNÔ¯w¤ˆ¦lÁ.^§)2¢shuz™EI,¦+4÷Ì[£7œ8›0l@d�FkVv~JfÁB‹/)é·»tô•[üZôcl|êÌIƒ-_XRZQ\ZÙ!À»‘^MHIÍ,|wÙ¬Gzm Ïó3VW*ÿ}éìO¿üeå—[–/™MRä§_þÂrÜò%³åréÃ�öÅqÁšÁyÅ›~?Âq܆_ää—ä§Óé-ËÈ,zÍ–³á`9"Â͹áIT댈8÷Î’jµÂrå²—&zy¸À†_<겦â’ò}G/=9´»J¥¥\Zc1<Ã`49:Ü3cáÁ#çyžØ·«åJ£Ñ´sßé° ¯°óÊ„›‘]-‹å”˜ÖÇËÍrå­Ôì®]:˜{ÛëÓéôÛ÷þÕ=¢C…¦²BS©7˜Ê*ª2³òOm$“JÞ^2û“/7º¦ö»Ú;ËæÖïFè�šÁZ­ÞÛÃ)ÀÏÃÝÕ‰eÙ3±7Î]¼¾ÿèeË2ÃDL3ü|=…á z½aÃoVTê„gûD‡Ãý/Ù|oÙ̼ü7WG‘ˆ†;CtsrR›L÷܆")Ц ñ®ÏÖ¡«Ñÿ°y€�ÛðÁµ}&jµ¢\£å8^¨^e¥ÖÕIm.îb‰s7>;V¥¼›Ë<Ïÿs¼¤¬ê­×¦›{x FӵĬñ£ïé^È+(!¢ÎùÌ«7Òûõê÷w;·°J«¿p%õ•TaMiEõµÄ¬ÏÞéÑßyû —I–/�ûÉ—›`ùRÌ_ôˆšÁƒýR3r:ùææ'$e>=aÈÍäLË«!¶ÇÜ&,•ˆ==\jô†Ýϸ8©**u‘�üN_H ðõìf1Ž x KKJ5àà úrÝ®ƒºÜîtD¸»9@�þüÛ�æå¨.ApUUÚu?ïí2lPt#ÅYM�~ýæýÇÏ›ñEÕŽ´ ô5™¼‚baó�[·ŸÑSx*>áÖÖ˜¿¦<Õ·Sǻתð<³ÿt\Bú«Ï�wt¸û!=#ÇÛÃÉÙ"¾ ¨¸ÜÙA!²hðVkuÉéùóf<ÑH=Ã:˜¯|€Ï¾ú5¢SŽ ~HB ¶® z\57‚�FÓÁãW|=Ï^JìÚ%0)%«ñòY¹ÛbN*dÒç�ûÏ¿Dw Ð;bÝæƒY9…#†ôTÞ9•ÁrÜʯjÇNIÄ¢ñOöÙóWd—`7W§F6þ÷ÅO 㠾߸»ñj”•Wfç•J%â–ˆ`­¶æûŸ÷fäO?àvní · >n®N="·ýqâÉa=o$eðVûí †/j¦æFpi™F!ûx¹–Tø{=ש£ŸNg((¬Q­«qrP‚Ð1zøÜ•ë™="gL.½sYZç°ÀWž³iÛѳ—’ÆŒèÙ¯WÜ;púD‡_ºrëÌ…„Ic׫Â]Ÿ®ùݼÑ9°‘’þ^o-šjyNÏŠâ®&gäÀ¶=wg´xgÉ ™T2kêÈ=ÿÚ¶û”¯—Ëâ&*ä2žç7ï8Ùy¥ßþ\Û…Ý»[È ~Q§c“àÔ…ÄS…õ³'qtTÅ%¤/z~B��VVÕ(å÷Dðõ¤Œ®áw¿ ètzóˆÀⲪ¤´¼:Ñ!„Z_s#83;¿sG_¥R&Ó^®³§�Œ»š|-)ûZR¶¹ÌðŸ�’™]ôÒÜÑá�ëv„…¼ûúì?�Åî=Û)4ÀÍÕé¥ùOY bö´ÕÚšü‚]�¾Áñ4E.|vÜ� 7øìÛi9eUŽ÷ž²3k¹à þ݄ˣë‹ES' ›j‘ŸAXvXjp}Vv¾ˆ¦¼=]ë¬íÅ)–�&æêÍÌÑ#ú˜×8¨•÷Û‘ÙÛKp\B­ª¹Ù%ØßÏ“¢¨•+çÓÜ\§Ží7¸w¡ÀŸ›BbÒs`¿®–s2ú¹›‡UÉeÒIc�ÒS¸ 9,¤îô=ÎN‡ŽÆ^¼šææ¢ ¿ÓÂ%"Ð×MDSAX¶šàR|ò•™®Nªƒ[¤·×VS²¢£BxÏ›Œ¬\WgUƒW"„ì‘™™YYYùà‚È>¬Û¸{ä�è >�;râ¢HDнujÕ6H¥ÒÖ¼±±N§Óëõ.‡Ú.µZ�ŒP-©T*ÜÛ¸öÅqœ^¯ÇnçÔj5Þ5¡»Ì—¶·™!;‡÷pE¨–Á` IÒ<Ž»E1 c040k(jo°ŒP-–eyžo…IEZmGÈþa#tÃ0­Ð?«×ë†yp9Ô`#T‹$I­V+ül¡&*˲æ]à}ì`_0B–Äb±F£Q*•&“‰eYòŽfn–ã8Žã„þžç5�D‚W6#Œ`„ê�H$Z­– ‘H$‹…«`š3·¯y F£Ñd2ñ<�ù‹Ì0‚ªK,sg4õzýCÎãÞ8‚ ‚ I’¦iì@–0‚jI’b1Þµ8üƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒ(?"š¦)Š¢iZ˜@ ùÓ ¶J˜¦‡ †aX–Å™‚‘%ŒàG!—Ë ‚ (Jø‰¯ Æ 3U’$Éó<Çq:�ÎÖ5Bö³£ÉT*•0ß X,‰D˜¿è�H’‰D‰D$ñ<¯R©l]#d/0>šF.—3 £P(0yÑ# (J¡P0 #—Ëm]d0Gš€¦i‚ d2™­+‚oR©T˜;ØÖA¶‡A³n�'ßPsG‘pšµsØ n¼å²l#JÓ`#«À ð8hüä «À ð8hìFV„‡k�Ž;ñWœŸ�{p /Çñ,ÇÖy–"I’$u:½Áh²\/‹àÞ4E‰Å"«Té1UT\vøøùi“FJ,îy5!ùVZöäqÃiš²aÝBVg�¾‘”%“J‚}o$¥ý°åÏ:ÏΜ8¨_ïÈ£§.9}Írý Þ�OÇ&Z®> bâ˜ÁV©’ýHMÏfY®‘ž®j¥°¬RÊ㮥ʤ’)Fk8Žû=æxH æ/Bm�õÏÉúx8½½d–ùáÿ~Ø%,Œ=püè�_­ÛÑ)Ä·¸T3çé'JË4§cÿûþ‹BËwÿŸgM÷¹|>¯ ØÉQ-“J¬^[+Òhª®ÝH9vúrAQÅÚÏß2¯ÿú‡�%eU�¼ðo¯LëÑ­s…¦J«­€¡ºn�9ÞQ.“@ZÆíÌœâ铆çæ€§‡ Ea#ÔF47‚«ª´UZ�Þ`,¯¨Ê+(€ÜÂò¥ï}cY¦GT˜¦ººÆÄ0ºƒPžã8xë_ß›KQY·óW}»+,ÈkÑ‚Éͬm‹Êº�êl|ý´]ýŸeæežçç-üèí×fDE„Ö)vüÔÅûΘþë¿-Ÿýìë­ÂšO–:9ª­Yoô¨xž?zêò°�Ýü£È²ìñ¿®Œ�ãQ#šÁqW“w8Ùy¥ŽÇ½0ç‰ûµ‚óòŠW}· ²sKàZ⦿½<>~÷9‰DŸçø¾°;9ª}=�;uôkfU[ZTDhTD莘#GN]¹_™FÎÀL?|òøá÷{–ã¸â’rgLj?ŠK+~�9žp3}ÉKSë¤0˲_­Û‘”’ìîêd«"û×ÜÏó��=† ìñ¿võìÚ§gxÂÍÔûµ‚ 8ÀÃÏÛ•¦)…\sè‚°ò½ÿl0—l°¬V)ÞZ<³™õ´F£ D¢†í?ÿº÷Ï“wãû‰!ÝçÏ÷ëöƒûvS«•oüó›ÿ~ðŠ—§[+Õ=ˆ»«Ó»¯Ï_¹zÓªµÛ^eº¹³žå¸5ßïH¼•¹|é\Ì_Ô8+7©º„}ú�u÷aÑp3MJEí NN곟ptP–”V8¨•î.¢6wÆéRÜ�ÕëvÖYùñ[ê¬Ùüí?„…±#{�ÙþØ{BXs6öFdxˆúÎù:dWü<ÞY6oåêM_|[›Â,Ë®ù~ÇÍäÌåKçuð¶u‘½³N³wífzBbzB >ˆ� IDATÒí ¼õê4à8.§ 44د\S Aì>xnòØ—ãoEt ôµJeZÏóËÉß))< ò{wÙló³×n¤î=ëéæðüœ±u¶,,Ð4% G£(²v�wv,l“Ú_÷åKç~òåæUk·¾ö”uw ùàÕøþW"h~_M¸µÿèÅ‚b�³£bXÿ¨±£úåäùûyž:¯7ÇŒê'sP+sóŠ2n?9¤›ŸŸÇáSq�u;¿¸¬jݦƒpýVÎo1§%bú³÷_jf•슣ƒÊÑáîä°§ÏÆ;9( Š5*bž�9x^X~bH÷Vª%jž?�·Ïþô«-oþó,Ë ùkëJ¡ÇCs¯Ž«ÖÖøx:»:)Gë9x@wƒÁ¸yÇ µJ¡�KI’‹h±ˆV(dB7™‡«zØàhWgÇ7Í€=‡Î�õáßç‡zMx¢×‡ŸÿÞë³´ÃÇX~Añ™K‰ÏÎÝ/:ìÐÑsõ p7câàMkWlZ»bìÈ^­_Côȼ–/�#•H–/�ƒù‹^s[ÁúvзëÝa…¥*…TÀŸŸ cGD?1¼Ðµüß?€“ƒ2I׈Š¢H’¤(Jøö]GU•vÝÏ{{D… ÝÌÚÚ�‰a6m=èÝ52ÌÕÅqÅÊõÝ#C»Eu²,S£7n�9µ5æ”ð[Á�—þ^Ÿ}°°Ác¡û±ò鸜ܢ*­¾´Lƒzwž6q˜å³R‰è¿ï¿,Ë.ÿhýssƬXù“ðTrzþ/DGÍŸ9ºÎ6ËÊ+³óJ¥±�GpjZ¶‰aŠŠËM ›˜œ�„§ŒFÓ·ëw¤¤çÿkùsEúûyÍš 5HÈ #¸i†ÁS(¨™ôz=sŸÄ ö#¸ H’ÔjµÂOl GÀ²¬ù³¯°/¸©Äb±F£Q*•&“‰eYò[× Ù5Žã8Žúxž×h4‰]ßµŒà&“H$Z­– ‘H$‹…;ƒáܯè~ÌGˆÑh4™L<Ïcþ"3ŒàG!‹9Ž3�z½þaæqGíAA�$IÓ4~gB–0‚I’b±ØÖµ@=Þð2BÙÌZÁ”V/MËm�ª „P‹Òû° ©­kq�D°4-7hùºÖ© Bµ¨ôO^ÒFÛº÷ÀŽ„²™‡=W4gTud`‹V!„Z‚2!Ã}Ëa[×¢aÁÕ‘�öÖ€G¡‡änë ÜvD „�Í`#„�Í`#„�Í`#„�ÍàÊ�ˆ¦iŠ¢hš&ˆÀi"ÐýÓôÁ0 ˲8S0²„ü(är9AE ?qâÔ8a¦J’$yžç8N§ÓÙºFÈ^`v4™J¥æ‹Å"‘ó=I’"‘H"‘ˆD"žçU*•­k„ìÆGÓÈår†a &/zE) †aär¹­ë‚ìæHÐ4M„L&³uEÐãM*• sÛº"Èöð haÖm‚ ðäjá(NÓ¡v[ÁM€·<@Ö‚­`$À@iŒ`dx !MƒŸdx !M€]ÀÈŠðpB`­ÓqÇMŒÑh2šL&#S£7Tkk*+µÅ¥>^®½£Ã…bZmÍ¥ø¤!º 3³òn¦�}rI¶�ó±—¯§¦ßžýôS�”ÉÌÎ#ðóÖŒ55úúd2©T‚÷E¨í³B—•Wþëÿ6 ËbÍqœB. ðtqR»¹:*÷ŒÜ{8ÖËÃ%4ÄNŸ¿VZV¥©¬¶,àè ||Ïs·sïI?o·ü‚â xz¸qáÒõÒ2Í¢ž¾|åÆÚŸöÖ/¶ðÙqúvoáÊ"„lÏ ìì¤þdÅó4MÓ4Eį;+²ñ£Ö/©PȆô‹ÈÈÎ ñ/+×\NÈàyþƒÿn²,³rÅórYÝûëå;9ªeRIókÛ¢n¤ää—åä—�»œÜ`�¿ü»D"ŽìüÙ×[Ÿ× sˆÏ{o>¯©¬~õí/„g?þ¿õ­[k„�Í47‚3²rW¯‹©¿þÈék–_{~\l\Rl|ªððzR¦Z!óöp|{ñ¬î"ëvþªow…y-Z0¹™µmQ,ËîÚwjú„ÁÆ i¼dH�ÿ?Þ˜'‹ 15wî+ÿÖ/Xú©°0t 6�<Ï=uyØÀîEÕ–eÙã]18úñýV‡ZAs#ØÏÇóÿÏgÖ¼&æÀ_ ¹tä�žw÷AQr…ÔÙÉaØ îð{ÌÉôì"á©¥ï}c¹µ%/Lô­³ 'Gµ¯§s§Ž~ͬjK;|ü|n~éÜé�…E¥õŸ•Ë¥*¥¾^·í|\2L7ÐÕÅ1,È{ùëÏh*«–½÷õÚÿû›T"ùä‹�­]uôHŠK+~�9žp3}ÉKSë¤0˲_­Û‘”’ìîêd«"û×ܦiÊA­\¹zKA±ÆrýÙKw¿‰¯þh!A.ÎPV^™ž]´ä… Yy{_úhù3*•xž_¶bmƒ»P«o-žÙÌz¶´¤[›·{væ¨>k8@G‹ž;c ÌœúÄØ'úÿóÓŸ¢ÂC²s “Óóž[¼R(³ðÍUÂÂðÁ=Z§Ú¨9Ü]�Þ}}þÊÕ›V­Ýöú+Óiº6…YŽ[óýŽÄ[™Ë—ÎÅüE�³Úõ9óŸÝ­Xö'§d}óÓ>ËbŽœïÒѧZ[à ï¶Iø–ö¸�Ï ô{cáÓÞ^n‡¿Z¹$%-{óï‡gMÞ¿O7ØøËóçÓÕű´¬ÂA)ëà“š‘Ó3*øÕ§[n [Á�‘?�w–Í[¹zÓßÖ¦0˲k¾ßq39sùÒ¹A¼m]Adï¬Á›wÿeç `9Nœ½ܽÉz.6!6>5Ð×mç¾3Ó' €1#¢eR1ð<ü¾÷Œµ*ÓBxž¿ßXNš¦ºF†&§d’$¡V){GG¸»9¿q·FS=zԃѤTÈ8Ž‚ â’Ã;ù—•kŒF“ƒZ¹ïÐé?ž¶óòü±$Ið<}løûº/_:÷“/7¯Z»õµ¦¬Û¸[ÈßÀ¯Æÿñ¿�#xΔ¡ ¶‚×nÜ/8ñúo1§ #§¸W×`µZ1|@ä¹K‰*y¯îa0cÂ@¡³âqtìTì†_ÿ–Ÿ}í?æõ[vß²ó¸°¼ëÀ¹¹Ó†ÔëØé«ÚùËɃûF8:(yž~Ö“ƒú÷زí~*G~o/žýéW[ÞüçÿX–ò×Ö•B�«Eð¦íÇ7m?n~xô¯Ëgyž?wéæÌIƒ.^¹põFúÕ„ÔØø”j­¾¤¼:-»(’\êåæèðXÎfÝ«GxXLJ�](-ÓÌ›9æƒO×w ÿÔ a*–o7ì öد›J©‹Eß®zëÐѳ7’2JË4ü<«ªñ �½À¯åKç¬ù~çâ§tðÇüEË ̲ì⧘îÜsB!—>9¢¯y�ÉĈŢç�S*å¯ÜrtP¾üÌø}ž­ÖêƒüÝŸ™ù$Ïóë·Ñ”Ÿ¯GýíWUi×ý¼·GTȰAÑͯm Q)*¥ÂÄ0Þž®înÎo½6sÍ÷;L{Ž¿ôÜMsïéîâãån.æBÂÐ�Ý7o?:uü°ë‰ië=´þ×Cðr �íÞj–þ^Ÿ}°�¢ð¢ÔVˆàÌìü¯~Ø]gå© ‰æå)Oõ2°‡Ry÷2¹ÜüℤìçgŽŒ9xþ—íG(ЬÒê¿0©Á¹KÊÊ+³óJ¥±=G° ¯ ´KX@aQ©\.{aÞ¸•_þÚ©ãåˆ.!eÕzƒ¡°¨ÔÝÍ™ ˆüÂ’¬ÜoO7–å|}<‚ƒü&Ž UUZ£‰9xô~ŒSø‡šÊ èûåNj̹:Î,4ÄÅsY†í^pìÌu> B.køâ·¯·Muv²÷nbŽã2sŠS3 vº`^ùÓÖÇ`óöc›·ûaõÛ"½ïà_b­ÕÕL3@b1ĵ·ÖmÚïãáÜ1Øßo!ÔêšÁ‰Éßþ| þú:WÇ=?kT×ˆŽæ‡W®&_ŒONNËS)¤3& ¬Ñ�;yîfX°×䱃ÝÝê¥ôõi ƒÂÞ�$¹aÍ;–kô#A9¹|¶ñ«•KœÕpäøùÌÛG÷ûúǘ>ÝC¯&$«ÕJ±XÄqœ·§Û»Ëæhµ5 7RC;x{ºÙè­ „ZIs#8$ÈïÿÏ`1óô¾î*¥œÞÕY=¨odH°Ÿˆ¦ oÏð¤”Ì۹Ů.ŽÍ¬’ýHº•ñù7¿“$1qt_! ²Z7{Ú¨.�‚{öè{éFÌþÓå•Úr�D%Q‰H.•D†‡Ø´î¡Ö@dffVVVÞïiŵ´ åë ý“—´QÁ­X1{$•J›zã[–åàÞ.B–å°Ç€N§Ó똪Y�Ýæ˜Z­Æ»W5 ÇqMºßAý´ÅüE \§ƒÆAÓà'YHH€­à&0 $I683!BMÂ0ŒÁ`°u-�ía+¸ X–åyžeÙEèþð@BfÁMÃ0 žBAͤ×놱u-�]Àn’$µZ­ð›0è°,k>„ð>ö°/¸©Äb±F£Q*•&“‰eYò[× Ù5Žã8Žúxž×h4‰½ßµŒà&“H$Z­– ‘H$‹…;ƒáܯè~ÌGˆÑh4™L<Ïcþ"3ŒàG!‹9Ž3�z½¾‘yÜAI’4Mãw&d #ø‘$)‹\!„îÿ #„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�ÍàÕqÙ;Š¢¤R©H$"IR˜qÂÎñ<ÏqœÉdÒëõ8§`ã0‚MÓEÑ4-L�ÓD ûB“ †aX–mêLÁ …B*•¶LÕZ AE 9ôz½V«µu�ìFð£�ËåÂA&üĉWPã„™*I’š‡:�î!_èàà@Ó�÷‡T*•Ò4­Ñhl];…ÙÑd*•J˜oP, ß m]#dïH’‰D‰D$ñ<¯R©æU …âqÏ_MÓ …ÂÖµ°SM#—ˆQ(˜¼èP¥P(†‘Ëå,ùØõ?4B*•â}o„9Ò4M!“Él]ôx“J¥ÂÜÁ�—iµú´œ¨¾AmákN«fÝ&O¾¡æŽ¢ÆÇ6ˆD¢V«Oë‹Åß Þ~`+¸ ð–ÈZØ n{GZÛ{GV�¿”¦ÁÃYŤÇbüo“´½wd(MƒŒ¬$$Àã  ° YN¬Áz½aÝÆÝ啿5%eŸ}õkUUcWÅlùýÏ”´Û÷{–aØš½¦²º¸¤<7¯(%-ûÊÕäã§/oÝu4ûv�¹˜V[sòÌóÃ̬¼=þâ8ÛÜ—ãoî=xªÎÊþ#éV†Mêƒ��Ûølbò}?5zÃÑ“kôáaIiE~AIkU­•XgDÄåø¤¢�Zuwô5Çr¹…å\£ç“Rs»„4øT|­ ¿‚ ¤ºFoòrwô÷quvTøyä=�J{Çzy¸„†øÀéó×J˪4•Õ–”­Óåä¨þâÛÝ"Ã|}<„5·s ŽŸMïÔ {Gèñb4šŸº:mì}¯Ú8rüâ�[ÙƒûwƒÑ´á—ƒ"šZüÒTŠj;_ß­ÁFsøä•±£z_»‘ʲܦíÇÍOýóÓŸ……ggŒptP®^Sçµ?m=úÓÖ£æ‡þÞ.o¼:"»„|ò�MÓ4ï~ôÃø'û†wj È Ù�~Ùù¡!þeåšË <ÏðßM–eV®x^.«;Ê2¯ ØÉQ-“Zg¬¢VWSV®‰h‘ˆ:~úÒÐAÑ*¥ÂÑAuâ¯Ëð{̉n‘aR+í !KMÕµ)ÇN_.(ªXûù[æõzƒñ÷]‡/Æß ôó˜9u”—§› +)`9.'§PX¦iÊhb8Ž÷õq·,Ãó¼Ð`JI»}ôL²'ŠD4ÇqÛcŽWV×¼±hšÁhܰåÀà~‘‘á!6xÖf…¾t%:…vøhÕ–Y“‡¼±p ”•UnØzäåy£•J98;©iš~ëÕi–/üfýîá£:…v¸[š€c§.ǺPg/ë6¬³æÓ,رçdl|ªððzR¦Z!óöp|{ñ¬Ö9ëvþªow…y-Z0¹‰o·aÉ·2W}»]X>t"îЉ¸™“†ôìÞåè_W—¾8yç¾S1ûOΘò„Uö…ìÏóGO]6°{ƒ×}±,{ü¯+#G·ô7°¬Ûù§ÎÆ—”UÕYÿýÆ]%¥šgf>y5!åãÏþ䃅JÅ.ÉkiƒqÕw»„e§Þ=Â`Õ·»,Ëxº9¼±hzQqÙºM&�îããã^­Õí>ðWBRÖÂgÇÀ›ö€¿Ÿg«W¿E47‚ FÓŸÇ/èÝ%.>ÉÇé[d¨°^*€�·»ƒZi.ìæâX§‹€¢(±¨¶$Iºº8@ÿÞ=º†²,g.öÙ×Û&�î+t5AEQ‰xôˆ>Ãu€ßcN¦g Ï.}ïË],yaBp o�j;9ª}=�;uôkæÛ7ëÑ­ó¦µ+æ-üèoÌ ëØJË*>ú¿�Q�zEG899|ðÙOr™düSC¬µGdsÅ¥¿ÇO¸™¾ä¥©uR˜eÙ¯ÖíHJÉŠ vwujÑjDE„FE„îˆ9räÔÝ“"ùÅân}üÞ‚?ïn‘añ7¾ºwcè ^-Z“’ˤ_~¼HXfYîÓ¯~éÓ=$$Ð'%=·w�N$Iž>MS©‹EE%åcGöìÝ3üÓ/‹éÜ‚r¸Ö{uêÖA!o#©67‚/^¾Y^©Û{ä,zvlã…³s ¾^¿×rÍ/üq°¶Áëæ¬ZñÆ<�J%£éÃÏ·X–ü-æ´y9ª³ÿ‚¹ãÀÅÙÊÊ+Ó³‹–¼0!#+oÏáK-F¥RÏóËV¬m°&j•â­Å3›ø^@ø›!|uºšÿ~µE&/˜7B‚ü^ž?ö»Ÿ÷Ñ4ýÔ¨ÖÝ/²wW§w_Ÿ¿rõ¦Uk·½þÊtá;°·æû‰·2—/�ÛÒù{?É)™r©ØÏÇ(ŠêŸ�bó¶tõú­Â’Ê—æ�+,*‹�O�9e$I¿ì86¤$ôèÚ ~Ý~ØA-_0glÖíü —K+ª&�èíå¶~ó¾ëIÓ' oc�›ÁQ!�¼��º¬7˜®'ex{¹­Û¸';¯TxÖܼêÃW„tš"?ÿðaå?Vn˜2¶÷¨0¸wóÐñËu6þ�¿ÍÚÅï~ôÜiÃ…¾àƒGÎçÞ{VôÀ‘ó]:úTkk¼àýÏ6 ÿ/­<æ‡åXøà³Ÿ„‡SÆô>¤÷µë·$qïèˆAý{ˆÅ¢ >­Z'ÔÂü<ÞY6oåêM_|[›Â,Ë®ù~ÇÍäÌåKçuð¶UÅ*4ÕÎNJóècGeJF®­*SÏóžˆëÝ-ÄÕÅ17OøþÊgß.,­Ðv�è(Øwèìù+) f?±}÷‰Ë é RH×þ´Ïhb€Ê,ôñrØ·«-߆547‚Õ*EaQÙµÄìw–ÎÜ÷çÙ”´ì9O�d˜ºóä?ÚÌÿ¬þMS†å~Ørˆ$`9>²ÓÝ„s± ±ñ©�¾n;÷�™>a0Œ-“Š€çá÷½gõ�5€çùFÆrêõFxóÕéU•ÕßmÚ?iÜ0‚ $bÑÚŸv'ÝÊœ5mtïèÀÑ mŽ¿¯ûò¥s?ùróªµ[_{aʺ�»…ü ðjüÿºE�„ªj�Üâô¯D".+¯ÛYlCA{:ö&ôïÝ-´´T³cÿ¹Å Æûz»K$âìÛ[víÝ£‹XüxO¦ÑÜÎ+(ÞôûŽã6üz '¿Œ ˆ� ?�NoYF&»{(0,gÙWk9"Â͹î$ªË—Lwsu€w?úqÎÔaÂЮƒGÎçÖ¶²Ï_¼.tPdä÷ê¬V+†ˆ”²òÊì¼R©DlÅNNÍö÷õ€jm�£Z×n¤lÜz¸w·Ž³¦=)œWDm›Mò7%-›a˜Ââr†a“Ó sX�‡»Kÿž�6lÙ7iÌ + ·€ç£»wiýºÕ¡V),¯¡-.)ß¶û¯á"ü|<&>Ùç·]'¼<\ÜîCBQä¨!=|}Üó J¾ß|èìÅ›&†]öòq›hCó#¸´L£�‰}¼Ü K*ü=�žŒëÔÑO§3Üé®­ÖÕ89( ¸¤|ßásW®göˆœ1y¸ùR±Îa�¯<3fÓ¶£g/%�ѳ_¯±X4rh¯‘Cï ±q?¡!þ+Þ˜Ë2l×ð‚cg®ÀðrYäø{½µhª³“Õº‰ ‹JÏÇÝzûµ<Ïgçzz8ÀÈ¡}‚:ø¬ß¼÷½�Ö-|nB·¨NÖÚBf?nÚ“SP&,üÅØ´vA æMܶëðú_úy¼û·ù6¿.£Žü‚’ï6îõrw|rxèÓ+âÚÍôï6î�3mx`À=‡"ÃC´ºš¢ârM—U¹»¨³² ” 9vDdfçwîè«TÊ$bÚËÃuö´‘qW“¯%e_KÊ6—> âR2³‹^š;ºþ„ a!ï¾>ûÏc±{Çv ¸|%éÐÉø:eê_÷Á[óœïvò^¹š|1>99-O¥�Θ0°Fo‰¨·_«tÔÁwÅ[ÏoÙº?öòMŒ`Ô>ùàÕ×K$ây3ÇΛù€Ñú6íÖ¦íÇü¼\Ì+‘ˆ€"Égg=õÃæ}«×Å<3}¸0.²s Ï_J¼™’#“ˆ&ŽîÓ)4à䙸 [�ˆETT瀓G´÷‘]‚ýý<)ŠZ¹b�ð•ßÍÅqêØ~æ3›ãn ßΆé9°_WË9ýÜÍS7ÈeÒIc�ÒS©”= oÔw­ºÓ àë®RÊyà]�ÕƒúF†û‰húö OJɼ�[Ü �#‡ö ëØÁß×óÓ÷_V«–-©D¼`þ$£ÉÔÒu@èqáëë>b`Ô¨á½E·‘J% ŸŸtñòMó÷]'?o÷òŠêg§� í \s;uüÐáƒz\OLçXîqÏ_ 233+++ï÷´âZZÐòu�þÉKÚ¨àV¬˜=’J¥¼ñ-BI§Óéõúû=ëââÒš•i¥¥¥6Ù¯Ýæ˜Z­¶‹³·�Žã\¡Á 0‚›?9È*x µ½«(ÛÞ;²Š¶pJ±Õ ’$œ™¡&aÆ`04R€ã¸6v¤aó¥AØ n–eyžgÙº3` Ô$s ™ÚÜù[£Ñhë*Ø#Œà¦a¦‘S(= ½^Ï0ÌË´NeZ Fpƒ0‚›€$I­V+üĶ0z,Ëš¡Æïcϲl[Já‡ù«Ó>a7�X,Öh4<Ï›L&£ÑÈ0 öp¡â8Nèü5™L<Ïk4±XüÀWiµÚ¶[&“I«mìfê힎k2‰D¢Õj ‚‰Dbqí¤”x¶Ý�ù1�BK${#W�F£P(¤Òº7Ÿ}ŒèõzÌßF`? ±XÌqœÑhÔëõ�ÏãŽAI’4M7ÞÿPŸV«Õëõ‰D,“$ùXܪ‡çyáb0°Ë®qÁ�ˆ$ɇù.‰Pó±,«Óét:�­+‚¬û‚BÈf0‚BÈf0‚BÈf0‚BÈf0‚BÈf0‚BÈf0‚BÈfv\°2!£Eë�B-Äžãëa#Ø}Ëa÷­Bµ?Ø�B6ó€ÛwRZ½4-·5+„B-DìÃ*ìhÎ#µZý€ŽV!µ«Ž"„P[‚!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3{ï¸GÙ4MSEÓ4Ïó üDíAÂO†aX–eÆÖ5jXFµtÿmÕåRy±Ž¬a�À¶½â �Qà&ç¢]tcüª•ú–Û×n\ôÈär9AE ?I›ÛíÇq,ËrÇó<Çq:�ÎÖ5º‡‰#Ö&{îÉ”E@R@àÛ¾ñp,ððÜøí°iý¿ÉjµºEŽ3•JÅó¼D"‹Å"‘ó‘$)‰$‰H$ây^¥RYe³•UÚæoÄÄï^ Ø�!‘(1P"Ì_ ”h PâÝÒw¯˜8¢%öcý޹\Î0ŒB¡°ú–Q@Q”B¡Ðjµr¹ÜNÚÂß${Æ„DÉv> : Äʸ‚êµÉžK:ç[}óVŽ`𦠂�Jíè¥ÈI¥R“ÉDÓ´Íû…3ª¥»3ä –bö¢Æˆd1™Ôx?©Õû…­ÁA�$Iž|C�á4�míÎRò$ @bû5† È=ÙÊ%]¬ÁVîó¢i{~Ñà I’¦[p@ÎCº\"°ý_ô ÈKÅr«oÕúŸŒ`ô0ìä8)ÒQ=#yÕù‹×þ8xnö”aûvcÅׯ/|ºsXPaQ™J%€ø„äï~Ú³æÓ×¥RI VYhgñ ˜ß]‡²7xöç³°ôlÃ/ä½áPb»û�Yj‰÷ŽüˆÆ=9ˆçxM¥vÊ„¡°fÝöQ)ŠLIË ð<(äRoËWM™0ÂÃÝåûÍûUJÅC£Ýqø_ï¼$<Åqܾ?ÏŽÞó·5µ·Ë1wš‚�ñ0©¬= …wŸZ9àÞ†Þt_X7ëž—¯+ÆÔÝæ;àÇôª¯}Á¶#n®NNŽ*žçü¼@"1 »ú»�–e‚üÝ?|÷å:/з[/w— MõÏ¥eäëã®&æä•¾¾p Ô2T$Lê§oAŽ ±~ɾû쿹ºå¯”Âû{d"xs\H‡?“Øì¹‚ªo»€Ü,Z�¾°¨L Û1ØïVZÎè}öë¿n?X­­©S^¯7H¥¡i̲ìô ƒÅbºZ[Ãó¼³£zîôQ&[_-ÖÞ´«¾àOúƒ‹Φßiêòu;7ù{×ÜÒÁ­D€5�"áÿNÁ±Ò{Ê;RPуìöÛ�Øø”ØøóÃÈÎ�陹B'§ÞîÛ³‹eḫ‰?nÞ÷ô„!ûõ iê» »neäoÛ}JxöĹë0¬ä‚ù“Zñ´wí&~ašLï ÀÝyÏ_M‡¯ê«ÿ ’”p! @³ î³ßž€·c­\U»…vÇœ˜ïý{-„ûmÛu ôzCZVᜧŸ°,Ü=ªÓ¬)úŸ~=”‘�ÿÜœ °è¹ñ]#BŠÚKnvÄ©ÐT·ö{@íMÀg · :¸äàÅ_¤4¬™ÏÀ_Y©š^ûÙp�Šàã�«ƒ%ÛjWFz‹ƒ!­¾©{N5�•#˜çy{ìÙjª´ºœ¼B0šž‡þÞ¹…å¹y…EÅeíçëUç·1 o·� ?ÿ¦«×SÖþ´·{xàÀ¾QÝ»v¾·Ÿ_ =¼ÓvÒaâáDü»€ˆ„ɾµëi€"@Dtv�R,fAX7žˆ€Ò*8Q �’°8 æ÷‡+™ð\ d´àlæv;"ìÎ¥«i—®¦™:;9t Ú 2ü/ ï=¬5ÀédÈ)‡'ÂaU_xiÈ=Ï–¼]»°óÌ;ÒJ•·1lÛž¯®Ö•”–kk ŠÎaAÏw ô ðiði·¯'ß~vö¸½1óv~VNA|BZv^‰Z)“IÅ ¿!kû°/Ìì$¨¥ðL÷‚©ûï)óÑ5€kðÍ €�‰�ZR»~zðq‚/ŽÖ>L)oµZ·AÁ�h{̑ظ¤ü¢ a$ƒÙî'†MÉÈ¿~35¢KHýî?|v@¯Îî.Z�¡¸¤¢¬¢j`ßÈÎa�þ¾ž»öÇÓq­¬�ô×ÑGÓ{Ãö‹�V PQ+ÂÊ)°, ¾¨?ò—8U§îDí°p–Ã×·Z¯Âö[ÁöÃ`0v ;ÊÝËÓÍÃÍù³¯¶°,»çÀÉ݇.¼þòÔk7R¿þa×’—¦védùªÔ´ìØ+).®BSUY]3uÂpOW[½í1~� àë‰PYïß¹™ø2ž¼ ËFÀÖ4È55ð*¾ÞÃvø«k Á�hÎô{Îh|÷ó>Š">;®G·Îá!ºýÊ/ycá´nQ�„2<Ïoûãè€^�|.ÆÝPÈ$înÎÂSEÅe£±BSMÙÇލ s”‚B ìƒ|¼,àýcðÃT訄Üûw,¼®J`ë]J‡ F°uxõïÑ%,°C€ˆE¢… ¦u�ˆï|·/‚çù°Žþút†a† ìjž37éVÆ�¿trP¼8oœMêßnµ·Žˆ”H-…î߃Ž`xÈ-ƒj=ð<ÄVBÔ†û¾P8i9¿ô ‚#üt¦Ý�Æh‘C…ÈÌ̬¬¬´Öæ¤R©\ný{{´I ÃÒ´õ'áŒèt:½¾YÃJ+«´jU³îÕÝsG ˆ•ÍÙjGŒÕ—¦fXq{jµÚú­`Žãìä†v®�ç/ÇÙÅWY zŽ�Xô <'m��¬õ�<;ùh!;g'lj»Œ®=Í4ƒǺˬ¨X¹l0H’¤¨vݾCƒaƒÁ`ëZ@O—ª¬ji 4EP›Ã²½\«¬¾U+G0˲<ϳ,‹)Œa>NlÞg5%°rG¦ ϱ@â‹î�c à§Zí´™™õ? Ã4ó jóôz=c3#‡9™&uЀ©îÌÎ݃©™¨ ulhÈtóX¹L’¤V«U«ÕZ­V*•b[ÕÁ²¬^¯'I²²²R,Ûº:@’äß"ò2«ƒâŠª�–a[Õű`ª‰ö`^Ï#É&Þj&+J ¥RIÓ4iÁº»@�Žã8Žú†©®®–HìèyU5Æ/nøìÌpà H ÇH´w<{§ÿAó·ð\¥Ìú-µZÝ" F£‘ ‘H$‹ ‚û˜Ù„ù0�&“‰çy{hÿÖa4“+Äd9^(V×Ð5vÑM‚lFFƒ›ŒéãV5) "ÌÑØBGl F0pÇ0 ÇqímwTAA�$)|7²uu†G,2k�#¶E.Í0#IÒ;ݱ¨õÙi{!„ÚŒ`„²Œ`„²Œ`„²Œ`„²Œ`„²Œ`„²Œ`„²Œ`„²Ôjµ­«�BíÑÿ\ÑaýŸ–§IEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK/fig/type.png000066400000000000000000002401351523260663500334240ustar00rootroot00000000000000‰PNG  IHDRXø§TRsRGB®ÎéDeXIfMM*‡i  X øõÉÄÏ@IDATxìÝ|ÕÞÆñÝôÐB M MD¥X@P@lWl`÷ÅV+öÞörmˆW¼vŵl(ŠJ Šô^Rv÷}þ3!l’M² )›ÝßùȓٙÙ)ß�5{Ι3ÞÌÌL@@@bC .6N“³D@@@Hp222ð@@@@�(X¼x±ÎŽQ|‰95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±Q|q95@@@Š PP\„× € € €D±@B��›ßãñæû<~_Àç÷zպ߀Çë��óÄÅôƒ‚ € € €5Qðù yçÍ÷ÿý�gãFoNŽßç«Ö+à��÷''{5Šk×Ö¿KgoÇšS­{dã € € €Ô �j¯ð¯Yøàø3½yùñ9¹~¿?PÍÝä®þ^�7..ÎóÛÏ'Ÿù÷ÜÃ{è!qÍšÖ‰KÂA"€ € € P}Õ[�¿zu`ÒäĹóòsrBß P/~��ýñØ´3Qdz[½Aá"[5håàw¹5î uDð{²òT#�ðíyk×ùO:>¡yó‚…ü@@@@ &ª±"À—››÷Æ[©¿ÿž““³ý~qe¯G]ôõ_ßçÕ€ï×HÛ¦uû€}ù×y[ìÑFââ=êá¯ùZ99Éæèeá»ÜÚ�³…¢{ñemIžóûÖ7ÞòŽ:->)©èB^!€ € € CñcÇŽÕé6nܸÊO:gö¯‰|”›•m78Åýáw_ø}žzõÏåÏÏ÷e.ö¤§'�}†Ùrßò•qݺ%žz²oÙ²ÀŠUq{öJÞ®]üË—Ö®ó´n•pˆ„zZµöýýwüa‡èîÿÚuñö÷6oæ[´8§=ÙWÀãËÏOX¿.¯]»ÄV­ªüLÙ  € € €‘/°aÃdu�©ŸŸŸŸ7sV\öVõÏh\ç? `c¸ÿi¾†ôߣgüÀþºk ®×ú/Ш‘?'7®ÏÞÞNâúöñååzvj£‘sþ÷‰§m›„#óÇÇ'œt¼'%9÷ÓÏ}ë×éqݺýYYÞ6­=­ZússCìËï÷ùýqY[uH:°È¿6! € € €Õ$P]·äeeù.ÊÕÔÀ-Ûnÿ/+0à÷ªV`Å o‹æžöñݺúW­ øò=�Ƶj•óÚ‰}zRSùùþ•«|ÌMØo�îhÀ¿F�¶Þ}_`íZ�è­WOmÿñ½÷R-€7£�ÿ—YÚ¤×î)ØÆåîÜy™«‘ .Ò�%4j´m1?@@@ˆ-�êªÐ�5kÕü®¶ ÷g·ûK·à¥šè5µaƒË–¤£‡4VÀ?KyùÞÞ–é6Ѫ¥7cgVvÒ �©]võÖ¯¿åö»ì)€y¹þ­[^¯7 Î>Õx;wŠkÞ,®Y³|ëmàóê¦gh�íûr^ª'@`ÍXl]aÎ@@@� �j¹5@·èûóò|›6æûÔ¯_½ò�âL¿ÔÜ@||î×Óöì•?çw}ç÷뉻ïæß¼9®mÛÀÖuð$&ä~÷}Ö³Ï[g�øxßÚµÞú â÷ìHIõvho7äæf?7qÓÍ·kµ@œ*BïKûÍןM›ýyù6‚@@@�˜¨¶Š}×# †ðéQ~Óš£iç¥ß—غ5oîÜìW&çü0=�•HJLØu—ì—_ÙüèãÙ¯½¿ë®ª)dgçþ23ÿϹ‰‡ Í_»&û­w’�9ªÁ ×$Ÿ02P/5°is@'‘œÈÍ·žê&j_älU—*bò¯:'� € € `ÞÌÌLýÈÈȰWUTT °þŸr/—h·”Òü®Ù,°i�ù¯*obR\‹æ�œœ8�¨Áró¼)Éêí¯Eÿß¿~½·aø |«VyòòâÒ[Ä5Jó¯^í߸QÓº¿  !§iìÀÀÆ�ö@ÁPE7&äy=IÝ׸m[õ<µ ó@@@ˆZ�Å‹ëܪeŒkr¨/^B\¼¦ kÜ!ü _zr}þ¥Ëì{{R’fjà@�×ë[¿Þæx½žìlß_Ù„ŠælØP°Hk._áY¶Ü]­` ^¯* Öôû5Ql_öR×8‚v@ÛÁÞBA@@@ fª¥"ÀôÔŒŸ›ëKL*ÿ[·ó½½ÜýŠ^r޾À»¥p‘*œê›]8SÓ…kºë¥†ôëy„Ô™0‰ € € kÕXàËÎÒø|åWÔ¹*òss¨¨)oöƒ € € ‰ÕUàM­—vþ{@`ÄœµîðëOj½ˆ9"@@@�š¨®Š€¸”äú#GV×Ö+«”ïñlÙ°¡²ïæ} € € €Ôy�j<_ãFOR¤q< € € €átäýΚ%×Ù‘÷–ÜZEçTcE@E…õ@@@@ º"¨ó~nnî† 4h�ššZݧÍö@@@Ø�Oßy\ow;¸Óál­¢ë‡³ÍŠ®sæÌyä‘G¦M›–•••’’²û~úé|pðÉÜÿýÿýïƒç›NOOÿ÷¿ÿݼyóbóy‰ € € €…µ_0eʔѣG/Y²¤ð˜fÏžýæ›oÞxã�W\qE\\ÁÍ óçÏÿî»ï ×)9¡Šõ)(9Ÿ9 € € €T“@øý"¡/€‹PËê  ÆÿU«Véhêׯ߶m[u P¥@NNÎÕW_­ïögœqFÁ�&jÆ Õk àŒDèõzóòòÖ¯_¯uõÒ]™D@@@��µ\ðè£�ºµ}ûö½çž{zôè±nÝ:õð¿ãŽ;ôUÿæ›oþ׿þÕ¢E‹àC¿îºë=ôPŸÏ§™ñññÏ=÷œîÐt«V­š6m¼&Ó € € €Ô€@Ùý"§/€KQ›ÙÙÙ}ô‘ŽC}î¾ûî8@ÓMš4¹á†~ûí··ß~{ñâÅÓ§O××~Íw»h¢S§NÝ»wׄŠfþøã�îô‰'ž˜œœìN“ € € € R 6+–.]ê÷ûÕÕ¿W¯^êPx|III PE€æ,\¸Ð�¯Ûô@�Âu܉Ï>ûLC jZc>¼ØR^"€ € € Pc%ûDZ_—¢6+Ú·o?kÖ,µê'$${dàÚµkÝã+œ¯±¯ºê*Í ®˜8q¢{�ÀAÔ±cÇ»ºì@@@�:*P›ºÃ?ø[}¡àŸþ9iÒ$½Ô {ï½·;_·¨®£‰ÌÌÌO?ýT&ðøã�/|¾@ð:L#€ € € P“%ûÔäÞÃÙWÁÃùÂYµfÖÙ´iÓÅ_¬Ñ´»£Ž:ªk×®¥í÷“O>ù믿´´K—.î8¥­É|@@@pj³G@ÈkpË-·¸#fddhº´ñÿtGÀóÏ?ïná´ÓN+¼ƒ ä6™‰ € € €@Í� <]3{g/‘Õ#àÉ'ŸtŸ¨¡'L˜Ð­[·ÒÎá‹/¾øá‡´T<òÈ#K[�ù € € € ,A=¾ýöÛë®»Îü.*ãë½Æ|å•Wrssu&Üe—]‚O©ìi=§@E£”½K@@@¨�@ÉöÿÈ/ RzèQ‚£G�^µj•”�=öØn¸¡ îþùǽ}@ßçO9å† ,ÊE € € € DD�€­[·j€@=JPG¦Ñï»ï¾zõêe±éÂaµòСC‹--ûe~~~^^ž4Pöj,E@@@ L�’}‚ßiý"¢GÀ½÷ÞûÚk¯‰)--í±ÇÓ0�ÁdŦu_@á0�§žzjÙUÅÞËK@@@b\ ö{¼ñÆ·ß~».ƒúùßvÛmx`Ù—äË/¿œ>}ºÖiÞ¼ùá‡^öÊ%—ºc”œÏ@@@**Pv_€à­EN¿€ZîðÛo¿i\ÀììlÕ\xá…çŸ~0SÈéÉ“'oÞ¼Y‹ú÷ï_ÆcB¾—™ € € €ĸ@möÐ÷ÿK/½T#ÿéèy�éééO?ý´zþ^M÷èÑc¿ýö+œ³råÊ?üÐ}©û*1ø¿žJ a 7È € € €•¿/@ðÆ#¡_@mV¬[·Î P([¶l?~|°Ž;}öÙgW|üñÇ‹-Ò¢îÝ»2¤äúÌA@@@�2j³"Àëõ–qd¤¤ÂuÔ˜¯.îKuhÔ¨Qá¢0'ÔÅ@; g¿an�Õ@@@bSÀmۯܹïÈ{+·ÇàwUKE@˜ß´õMþ†nظqc\\è¡ 4°_ïÞ½ W·Œ9òÐCÕÃÿŽ;î¸Âù�óð*ºYÖG@@@ ò¼™™™:ʲŸØWÑÓÐøM›65hР÷ðWt_Z?77wÍš5:°† Vè�¬Œ € € €@]X¼x±N!tSüž›;àŸªvp;Uþö¼¼÷�…Ú‘vçÖ8Þ• —ê N5VÉW�cC@@ˆY�j,Pšú¾­Nøn]€&T âÎTªT‡¸»7µ}M¨j@E *‰Â{ªc×l@@@�:!P]=tòú¶ï¶Àë{¸Zéõô¾Â/êÕDãÞ}à¦SÛ`¡Û4Ç-zYM»f³ € € €Ô �j¬Ðùë‹wa]€¾ŠWwE@°¸Õ8EÕ*Ú{ðR¦@@@ˆM�ê­pMõ%\_Å5]Øi¿f¬ÝŠíK5³Gö‚ € € €@„ ÔDE€ܯâ|!�ð¿  € € €@Ô T×`�QÇ "€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’TTŽ·!€ € € P¨¨‹W�cF@@@ ’ •|oCv@ ''gÞÍ[@@@ òô¨¼ïD@@@ Î T{�€Ù+Í䙟-§.´ü{ƒå–1Ý2`AA�:#àuŽttoûñÀ0Ëäx˪*ŒPU’l@@�ð–/_®•é¾k"€ € € PçªxŒ·/À¡“Ìå³Ì:¯Ã ³n/žÇ�=¬6†N¶¬Ú~¶E  € €Ô¬=jÖ›½!€ € € P«UÜ#À€¾µzMÙ9U,àþ‹¾ÔõãÑêxãl@@jX€5 Îî@@@¨M�*ë0{¥�†ûŒ€ÚG Gzõ샭"€ € €@õ Ð# ú�Ù € € €#Pe=žùÙÎÉi>^gõ›îœšRa? € €T�@ `OëòûýJŸÏ§tçTÍÖ·m…Û$ø‰ € € €@ TY�€°â@ âìCÌí qÇ!€ € PA�ྮîo¹n¿€üüü n©¬ÕéP–Ë@@@ˆ2zDÙåtˆ�ÄÄD�ª;"@¬œ3ç‰ € {n¿·§@^^Õ ÎG�€Øû{Ä#€ € €İ=bøâsêÔMw\úÔÍ«ÇQ#€ €TFÀýí×ýMxÇÇ  G@e®ïA@@@ Ž Ð# Ž^8�XC5ÏŸsF@ˆm�àç�JcÐ# Òt¼@@@�º'q=ÒÒ ñŠ.–+æ[NXk¡%ÞŽëè Ë[[~ó£åä\ËrJ²-¿u�åîË-GÍ´Ü`AA�n hˆÌB@@ fÜߊwd¤zÄÌ_N@@@�'âzÔki—eÌ0Ëß·Z–ì°[s›H3Ëðk26¬±õŸ^mYÑÒ¡�½cÿV–}�öÿ½w¶énΜÆö8s�ǹAã¨&6¹`Šåô²oÙÈ·uÚ··<²‡åU‹,¯Þh\ÒšÚ«ïγìZÚ ;ûúä5[gÈï–!Šsµ§]nKöu�9ÄJ•Ÿ•¿ØÞÛÿEËïË>w[…‚@…xR@…Éx € €@Ô ìøoÅ¥}­Œ:*N@@@"°G@8eï½l­{ö± ¿&cñ4[ÿ��-�Î6QXŽÜÕ&ik™áô5hç´í·nlsš¦Zºûr‡fÜèŒ\ðû›ÿ‹ÓþÅB›~ÇiÏϲÉòŠÏV¸ý+ËÃŽµ<­¿å£ï[.±Q²–ÙÌ7Xº�î©ÎØGw´9á—ü¥¶î˜w,WYxÒ�^ �ígÓß`yÏ_–n9~¸ý<¾¡åÝ/[~ç·ô8= ne“]-(T£€ûÔ€jÜ›F@@ âvü·âð¿GG<ˆ € € €å DÜåpÐr§Eúí—lÎQ™Aó+:éµ75Ðr”sÏÿf§U‰Óæ?ã7›ŸéŒ,0w¥MÏpFøÿd«Mïx™ó§mãMç®þåÓm:D_§ºÆy@�g‹Ó#àòOmMgÒ³¯Ó3bx{xòl ³�Îîýüûn±9nÙâ¼íœ¯ÇñêŒhàqÌÿqÞõ¶Ó£Á“l︶à}ü@@@ˆtzDúâø@@@¨B�ˆè0b7;£�,ã�'8ÍÌžVN+÷„z6?�kùæ Ë‚âTb ?Í^•=D}Þ|[§‹sgû"›,½8{¹÷Q[áf· ¼ôu+±¤w_{Ó·‡X† wÆÛ‚2ÿK›â´óàÏ–l›ã¦MTº$dØ[¿».ô>Áæ—¦úð5¶ôa‹"¥ÀŠlŸ € € €;.@�€7d  € € €Ô�ÍÒ5zìÎýçûÙ>ÏoW|Ï{Úœ �ôo¶éE3- Æüw¬¿øÀæ<ëÜ·oS¡ŠßiE_jQ Ïûk®íðç\©ƒYëtÏÝí]-«¯œ�J>õÀÖ(·8wõ_õ´­×¤Ìݧ:ÏPxþ [sÙ–ã~¶t‡°©P%�csÿ(­#A¨·0@@@ †Êü:XÃÇÂî@@@@ šj»G@Ðéå-²9íÏéßß¶|¦�åSÎýó6UXœ–çõÎxþ/.)œ»C^gp‚›œÛôoÚ�-m˜moîþ¦eð¡­\osÞq0¸±M;Íü6Q¬ä9½^wx£·-ŒsFõŸº ØŠž Î:ÎpþžV¶ôÖTËN?ˆ[~·é5ÎnkkÓ­ÝÇØd©¥¹3 AÁs œí7q¶YêÜ)ö£¿³þgïå¬Ïbê”@`ãBïôYÖ)m÷}•»6)í_pœ˜/K±2óåœEöqÙeàÞÊÖ‰ŠòJŽ�ã�o½¦œÛùTåI{§)#ølut@@�pè®ë!€ € € Ô# ÂšN%F8O ð9wÚ�tî�Ãm:/eggàûϧÙâ…e®YrqN+úQÖäæ)»~eß>¶Îç ¥­™ïó Îâõmý_>²|ܹߦ¶•Lç™_8à r¶<ÞY´i®ýxÖíà4î_q’Íè´ÛÛTxe÷þ¶Þ3N†óŽ¯Þ°µ¦üꬃ@]ðÿó±÷Ú£ì‰C§Ú#L.küj­î9«3• WZ—§Ó’~–]¬•=µeGe‡fîóRÊ^?x©í!oËZ劥‹•ó³aT¦÷•òï¾£üzŽóÑ�ÖUÓ#²œ��ÖMY¯ìÆýäŸÏR^ü„uFêüöÊ~�Š¿-°Î>˜ÆõDŠÖÎæiΪ?léÌy)ÿÊ\¨œ?׺úü:ã{å´Öùg�Óˆ^/ÍøÑï_ÿR<ö åå½z(wëÚQÙº¡ Vsx|[­yèù—({x«òÁwG*'žÜAêöaÑûÂ;”× ¶³p÷²õ׉š¾èž5ÊðËNcßÒÊ_]½Ÿ²¾×T7s»ò€QÖßaìûÿQž¶‹ÓÍ)°IÓ_9íüç̽\ÓSž?QÙÑYèÉ1·ûú¦|E( € €ÛŠþιm.?@@@@ *B5íÔ•uz¬uÝþ½xÚiºŠw«Dœm:Ýv`ƒå½µk3[£ì§øsl�/X¦Ú-ºž3:iQzqÎe•5zqÞ[ÌévK¯ç™¾–e×Ý7ÞÖ¹Ï"Tq°n¿Ë]C¯�PBÌ‹E�ô:ë‰ßY;ô)ÊþV&OÀ4òã£Ö?bbŠrÏÁöAЯçÊÃÇ­Ø}�re®µÕ·Hk t>ô³òeñíƒôæ6,@ˆrînvòç†Xr†æíš`Y²d”œÅ@@ †èßSG@@ˆ=�jhWª&D§íú“/mëý‡Y¶_cù¸ó¼ú£Ùt§ë9NÛã4ÿ4Nµ°[\=«œÑõ¿tÚüíuaq°R ¯“`Ëz–Ý–^øöm^k ó”xÌö¶ÅA?Ãyj@Áêv¬ç}§ñkà›>æEË�JÛ™ŽÉÎ=ÿ³fÛ:_–XÇæ+NEБNÛþáá¬ôö8§E˜�Jz“Ô�@¶ô÷I§)º«xùôs‡hþ“Ω4;äiýüæ½JçÃÆãif#Õ?øÎcÊcÚ•Ußê­×\ëDÂqJ�³t$SfÙèÎÇ­~–V쌴i¤\ÿÃÊorº(¯ìdß”u¶Z\Z‰ï®%£¿ÈTž^ægQÞ/k�ÁG=£ìÿÌgÊÛ†4U:äúYJqF¨WÎJ¥¼—Ù € €@Ô Tòw¶¨sà„@@@ˆ �Hhˆªô/Nûÿ®64µgçÍ–�c™�a9Γö,qÚÃïϵéñ6èµçk¬ò¼úªåû]lº 8•!ÍRí•7ÙrØË)Nã}©s„-zd/ËÒjb¶ÚÍÈž®“-ß]`9ÌYÿêÝmú+Ç!Ë&=iÖ è¹tOK¯Ý®ëyj†¥»Ô¦Ê(NÃßkÏÛ'.-c½¢‹œVµGFÙÌóí‘á¢\ Ãõ_é gž0GyÜk‘:uºräÜÓ•û¿ (Zâ­g@³Öí”íÊìPôme½Êúyœï•hYÙ’¦7øØ4åÔ1»)ƒÿר޶³ó™ð÷šM‡j˜·üñ�Z+3’Mãá 6ÄHv¿›”w åÀÖLL1‡d�uÇZ4ÛÄ~ÜìSfÕßE9 {º2.°U¹fÉ åærº"ØmZ½ÚÖtú^4©gŸ ÙYa|ÚeÙ^Ö&ÚèÍRíØ( € €@, ”ö=4–M8w@@@¢V ¸A(âN²‰5;y4qÌi)*yƒ¿Ûhõøw¶Îÿ�hyÁ@Kw\€K»ÛôjgÔ€÷–ÙtÉÒÌn/õ´qš²6Y—§Çk–‹-*Pš9mã?Ÿao±v·r‹sFïM±õ¾·áÉ ºœ`7{:Y”¬1ÒsºÓ`À›¾z‰åu6x¹ç�#-»9Çÿå6ýR&›¢8AÇœjK6…jþ ñ–m³“œ© ¾kÛ»ù‰@T „ýÔ€Öç¾#ˆ_³ÎKéeVÌÖë|¶Ö¹û�£•Ý:4^ ¬ýF+>tñ#J÷Ã&ÔûìóŠ©W)÷?ñ?Ê•!Vª§y;�¹IyEÎ$å ßîªûîIÊîN�*M–¤ÝìãìÒcìcî® +õ´Tö¾Ú:;}äôHñÍÕôK#PŽý¾ìÞTZ¥H¹ç(Ûû=Eæ•ò¢^o-xà›o•c{EôÿøJ9f#€ €U)Pæ/žU¹#¶… € € €µ/Ù #Î3êOjkL‹±œf·—z¬í©hY´Ð^?ú‡å ûX^é´·ÏtÚÒÏtÚÉ.¥íºóζ~[§JdþR›^eQá²ÆnqõœdMnžÄ\K§ÙÞ&BçxþtŽùVž¼à†Ý!‡Ød'‹‚’e7Øz®þŸå«GXŽaÙÑi<i7½zVÿjy¥“aÜ/k+[q”Þ˜h“Œ` ªDÀyjÀoÙÇÁÑe��l]žš†S%Û¨«ÖÜï�C•{Vð“Û¿Ô>^szñdj*t±ƒØù„—•+œ ½–Ç“3Ï>2ÎfËG<ô”òÒþv^›Q¤xí©×ç>;ͲȒ  =õââïÖ[Í1X§™SÇÙ6Oš3^ùÕ{ç(»UPCo¡ € €1.ίŸ1NÄé#€ € € =µÝ’â´ŠOzß@r¦—7ÞŽ»n†M§¼°}N‘A®ƒf»#Üû‘Íì´ð÷wª8¦9íí¥õp°ŽëbïJrúü0Ϧ+Тn«o+ξ±f­j)Ÿ8}"ntÆM¸¯·íâ$g:뛾ü=ËïKéõ`Ë( PcÎSš·ÍÐ32v ¾5`ÿ¤}>ûpILŒWîÀ¶ôí+gíßʲŸ—jmòÇŽ>U™Ý4SùåËrJÀŽ¿i·}•};Û}¨ÿýX'¥¿^9EÙ§Ôq ´PÅzì–Xj?[¥ÃíŠæ^­ìjg¶@ˆI�êü­2&A9i@@@"Y "ZI¾uî®ÿÖqjÔ# T¸·¢öneëžæŒ«ÿ®Ó6Þö›3ÚNÀûŠMŸ·Ô2¸¤ÛðÕž£­ÑΓ·Ìòu{@u„–½œ±þÕÎÏZÖ¶•$çÇ8ÏGøÉéCñ«5ì…WœŠ cO³•·„ÿ.gÛ ‰Î� ¾Ëy�@t lýRçsÛ�«”?_Sxn§vü¯¦­Ý¼ÜÒá­òíï×*÷I^ÛÆøÏu:)%¤¥j:©Ä§_ðÚ;6mÿ˜ÃyjÀ®ãíL�ùÏõÊ;…¿O{â@çqo)¿¿g¨²iÙç’nr/O{\yT›°ë¬›´þç×í­<ìM@@ „@Ø¿]…x/³@@@@ Ž DD�€ðÍÒ[غ­œê‹øæ6ýÊy–Ýœi¿3ºþÍߨœS­ÙÉ3Ùí0ʦ{gyõ–Ÿ8íØ×lÓ�­}2ͦ§Ôdû¶Ó¬?îrÛï8‹"e«ÓVÖ·³Í¼ËnÈõ ëb™æá¯ÓmzŠ5}yN´[n=ÿrž&0ÀšÁ<Ÿþfùί–/:&î͸G¦ÛœúžÎÖ8WðÔ€O�1^¿7„slGná\‘ÖmlúÄ|KŽåÇN³èö¶Q›GA J’vÓ‰�¼á@eÃS.P¾9ø~夑֞ÿÜ7*—žù¤òƃ[+ ê_ýöxÍzëЬ¹ýÚÅíe£©í%W“ÙY>eþ†ß•_¿o]ž8ÿ5f ¬ùIkþm+£Øq…óÔ€‚M\¬&:Ÿ<\ùD×§•So¤lRäØìCañä3•ýϵ�¤ÓŽÞ§Ä:šªl¶¦+뫼µÿ§²Q²W¯µ-ºv6EA@("Pði‘y¼@@@@�(¨@;K$d o÷±ÜÞ6Ýx±ås_Z>5Çrº5y<X9ÑòÁ#-÷sÞ»‡Ó/`³Óº~z†Í_ï<)àÎ?mºF‹sœïM±}~o ‡EJKç_>ÉfÆ[s ç¯–�|fyÇrË, Ï3-od9¼›å1C,�ÜÃÒó”Å”tˇϰܹDåϰ£lþ0‹J–ÓGÙOwÞ�ÿ·ýü¼å—5ÙÃÂvHA 6â¬KÒ.{õTαù=);Ûô~Cº+“GÛÇÐÑ?Xu³«­½[’uÔ™õìEÊ1Ï7UÞúÒ�Êf%þmz|ë5å‚ÍÊ ??¨<çHËÊ–4½ñÀRßl4 ^¡ì7Ên¯գǺõ¼÷kåOãìì ·nHã/±ãŸ8ÂZï/ÜÃÖq»VÛÖ#·¿¦ôfF§ôkX¸Te•´#µôÁÏžQ[�1Ìö³«Íÿ W@@�%ñ ±³@@@@ :"®G@îƒýb¶åbkB+RÞùÁ^¾gÍZž¯?·¼¯Ä:6w[ùÅi�d·¯z†[3•çm·ÝiE¿ÓÙΦïm¾;j€MUùÞn×õ\¿Ðò{§'ÂÇN›¿½ÞVÒœ#Oqšä¾ŸasŸqd¶-ßþs¥3 ÀyïØœóÞ·<Ëê<�™Ý-/µ9·ZR@`Çì¾÷åóìCä×LçŸe’}�ƹ�àÁ›öZëwŸ‘c”ý'ܦ|àmk3?sÍ=ÊÓ®¶‚½o²ï>m’”%‹­}Ì]fƒôŸ0KùÙ…=”ýàö/}]ï:«÷™ÊLý)·ìt®Vyþu;ò^ÉÎÚ¾¹úñòég+?tfxÛU˜Å>ò6ü½ÊÖ®À»ÂÜ8«!€ €Q"@�€(¹�œ € € €á„ß:ÎÖª`�5+l#G¿zSY›œ¥o„^ZêÜ\[ò¶“ë8÷çßþyÁ«þñó2Û¡›¥ízƒÓÐxöç¥-/e¾5Uzžù¥”¥ÌF�*Ìú�¶tùkÙÊ#¯ï§lçv7*¾ƒÄÎÇiÖµã'+‡ž¾ŸrRÚå¸IÖ�çªÃ:(ë•ìMà±6²çý¬üjCSåá»í¬Œ×ŸŠ—¸Vö��‡æd*I ”å|ô'¶Ò:�{î¡Ü#E¡‡Ø!~žêL…·Ñ¾zuþƒ×(¿>ì&åÙ×ÙÑ^ßÑ:)]ô˜õhtÏSʳzÙ~Cœ¨æ†,ivÌ·¿m=&# ¤3@@�J Ð# Òt¼@@@�º'PN³PÝ;!ލçÁ$}.ýRûÜÛL™²z޳aûØl}¬ÝçÿÛmA¡ùvψâl§×™·kÑuUÞ’c=í½“2T_ÍVý=)`ægï*ÿiq„rPÏFÊ ´¨kíÂgÍú »�û…s«dÂŽ¨qŸ •üMyع£”ÇdÙ,½/™¨|ølëYP¿’‡®·R@@ªX€U Êæ@@@ˆd� æ¬H>LŽ ¨i«'m�nwæÛÝí�oµó£ìpÆÙ¶Š½ÈZþ»ò‡ï¬…è�)çžxŽòÄQöñûò³W(·q‡æ×dAñ¯ø\S“žûCÙò¸;”ýšGf“º�e�µÄèòé´ùÊ�úc%OVýþµòóŸ{+Gôm­L ÿ$6Ø(—ÚGy{þOeæ›—9O ¨ŽÚ:@¨ûô¨û×�3@@@@ l� ´³„½MVDbNÀ¿ÊFÈŸ¿!K¹åÇ—•7žq•ò?“g*“‡Ü©|uò¹Ê»^Ú¢ÜrÜÊ#ÏVŽ¿ë&åù‡wS6ö®Q~õ˜õ˜´ñ@å�§T6 ¿-]kï`YdÇÓ?Õ²h©§—=�µg%¬žk­ýß|ðŠòñ{ŸS~›8HyÑS6ªÂQÍg(Ÿ¾áfåèƒì‰ /�9VyÆp;£ýúì®l×ÈùP¾õ•XµÒzäy¬=ź­J_ƒ!ÊñÏÝ«<¬UØuÖ{´Ì×wØ{�϶¹jéRåRgWÞäÆšnÙÌÎ"ì-j]  € mü.mW”óA@@@  §•¤Œåa/ªŸh«n±ÛB) µî¿ô¨=½Jž˜µc/ÿ~ŠrêÛÄæÖ¾ô¬3•ON¦У�²ž[õºû(M?>µ½rÏk.U>òêwÊc†tQ&þú´òš s•ýÆÛ6OØ-YY£e§sµ»ç_£ìUdçv¦k¿º[ÙgOë °¶Å å‰ç[�€;G WîÝÊÞàõ PöÙïp副ÚÒ?eï:ãák”-ÏxAùÅSÇ)Û®üHyeo›~n™¢H9{oëMPÙr§Þxx†¥[2®üT³î°^ �¼3ù� €Ä =bð¢sÊ € € €±+àÍÌÌÔÙgddì A7 ÛóG8£jïàžx;Ôž@׿¶ïßÏÛÑ#ÈÉÉ©Ä&’“‹4OWb ;òÿ k·ÿÏ[s”;6J9°ÝöºÔÀ¦Ÿ4çå‰+”{�8TÙ­‰ÓQJSe”¼uZ¸jKCe‹ÆN-ÿzMÏzÿGeê`»×}—Ôši¼h_YËþTÎ[�¢Ìؽ½²ñöSÔ++��6®ÁÔ/m¤€.ì¥lïÞí¯©2J¾u–Èœaçµ<Ýú ì“Q›W³Œ#e € P'*÷õòåËuv%~Å«gÌA"€ € € €@¥ª¬GÀÅÚþ'üP©£àM PG.îgúà°=ÜÊÕ_Ön�€=gÞ� € €@Õ Tî7jzTÝ`K € € €Ô�*{jÀYv£¨ça§G€ÝiJA�èpïS?kÏè:+Î@@�Ø`Œ€Ø»æœ1 € € €@ TY�€é¦8º·åãÓ-) McœÝÝ�éÑt^œ  € €±&@�€X»âœ/ € € €@L TY�Wñg,ñ?VÛ«Ï2Ýy$Ôm�ƒ:Øñß¿ÃO ¨Û = € €Ñ"@�€h¹’œ € € €aTq�€äxÛç'[^ú‘¥;^Ï0 uGÀ}F€;.€ÛÓ'Éù×]w΀#E@@�ÐôíÂ\@@@¢R Š{¸Fn¿€G³Wîsþ=æ?Z`ù÷Ë-y–ˆ�ú‰víÒ,‡u²¦|Û^R@@@¨F�¢ß^«qGl@@@j_ ¶{„áßn˜Öšp—eÑ1¬�ß# HmJ àlÕ–6HokïêXæSÖý`E£Ò{ 8›#@@@¨�"ßa«d‹l@@@"V€!.Mþf{ŽÀÊu[•>_®rË&k·ß¢ÚÄæ§¤Y›ã·U߯éü<…')ÑF  ­ß,( € € €‘!â«mdG� € € €U/@�€b¦v‡ÿêÿ­“ëS<¿)¯>÷3e¨’¤™G\—òÒÞ)Î ùÊœ­¶�ìÕË• nP–Þ/Àž°t£3²@º&) € € €T£=ª—M#€ € € iôØvEœÑþNË}«cÎÑÜ“–>§|½ó%Ê+&+/ýq/åýWZ®›òŠò�­(GíåöФ'�cíÿ+×ÙÈß?ÿ ¥þ”_¬F¦mçò×c ¨e�€�!òã+o*í8\ùýÊ|2HunÀ†$Ù¸|‰rÞ¼…Ê[wV“ŸU^vÞÊõY�•G�m¡lT�X³JsþòZ[ܸ§¬7Áá­J@‹6FÀÌÉÏ(ßkl#P@ ¢œøUsfê ©ˆòÿ‚×·@¯ž;ç~åÄUþà%!§S<[ó'�µ~F Jù¨ðçeiéºÕk”+V¬V._¾Bù×BÛ×O?ý©œ³Ê}TICMïÚ«—2­s;åÁ­¿R)Ö  € €@, }…�ÅÓçœ@@@ˆ-�íàmÜC×ùìqv'òŠ·•‰½ŽS>1n€r§Tk¥ÿz†¢ xÓ¬…í´3vSN{h±rØ•*Ç웦ÜV›b#ÿ¯þsŽrA3»Ý—æa´ÃySµæ'ØÖöÐ Dƒ€ýÛï0ü,åøÁ-•Û>%ŠŸ›7µ‰f¥–ø¨ð-üX󯽪rÖ’ÍÊl¿}Âxã¬ßPóvm•]:í¤ìsÔ‰ÊÓºtPîÒÞöÕ8©Äæ4—‚ € €À6�Ò~;ݶœŸ € € € E±Ú# ÙFùî´«µ°mXi×ÓŸ¬¬—j#x=6ßyŒ€ÇãÏÑôš³•?o±'²Á^xù]eßö#”ZÛ{=9‹ÿ{ßîÚm3ÐÆï£º:u Ñ%Ø¢óYòÇßÊ5¹ë”‹7ú”›þ±ï3goP&4l¥ìf�ô%>¥ž¦5ª¯ Uçjmû ›ØRûÜ)ZÙk5cî?ö!2hÌÅÊ£»§+[¶°ÑIÒæ/  € €@eBývZÙmñ>@@@ˆpÚ¬C\ ÀÆEšûË<A`î7÷)ONµ§ì¤�#pÁèó•M}TyÇÅw*g_qžòàL{îÀK˺*/œ¡´'P@ ü6Jÿ'<¬|ayгMÒœqØŒÿaš½pzÍŸÇê§µ¾Q@ ÖìÉ#¿?{«rè³¥X$Ùx"W>~‘rX‹R>hâìù&‡ž5By@ËRÖѲ¢eó,´àngä‚¢Kx… € €€ Ð#€¿ € € €Ä�=J¿Øá6¿•¾– €@Œ ØÇG§ãìÞþ›†µR†¨sõÚÇoæ¥|ЬO�'®ž¢C�žÊ~;‡Ø†­S¤Ø»ÖeMSVrT‚"[ã € €@t „ó›etž9g… € € €@ Ð# /:§ŒU/ÈZ£�.š·I¹2×¶ŸŸ½Y¹~ÃFeiu®ë7Ø:ÍwÞÉÒJPP>Ÿ¦ò§·±ð@@ JJûí´J6ÎF@@@@ ²hiЬëÁÑ €@È_ö�Žü¡ñK• ­9ßã™ò‚â‚)Îti‘ØYK.}äå­·×ÌæåæhŽÏ¿Uù÷œYÊï—–2š€–-›çoÐ Ÿ§IÑÙ¼B@@ @`ûï�� € € € €@Ô Ð# ê/1'ˆ5!�Øé0íæÎÓç(GÝi#\úäÉÊäoU>^”òɳvWÖÏ[¥üúuÛßwÀ!Ê‚úx<~ÍY¿ÊFÈ÷Yÿ‚×'©Ê¦Sÿ­¼ïçÆÊ» ìßÖ¯?Vl€�UKWØä.G)ž½{˜²ý¶Å6¿ÔbGµþëg”g=iÇC]o©T,@@bX€ßcøâsê € € €±'@�€Ø»æœ1T�€µýÇÿeO xiM¢ràñm•©Þ_•Á%©ÓAzyÎ�•W_{¯2©Såµw«àô(Ò� ™æÏ™•­Lë¹³²UX}´¢Šm©qÿ³•¯ÙN( € €„ G@f!€ € € ­ôˆÖ+Ëy!€@Õ ÄµÓ¶Ž½ó:¥¿^žòkgÛ©½GêçG¶Vºµª9?; ‚ÃÛ@¯ö:áDå±3Sþ/­™²Uã$e‘¾zíñäÎÿI9õoM ÿé”6~@@�ª G@ÕY²%@@@"^€‰8@¨u¯�Рi;ÿª2'??_K�åŠy¿(§ÌŸ¡ülVså©W�¬\Ë$å·¬W^2æ_Êõ”q>Ûòg¯}©üg§AÊ+wKQ–ì5 ™@@*-@�€JÓñF@@@êž=êÞ5ãˆ@ üëtT?~fO Øš›¥|接ʮû﫽à[›LÚUqÙ=*×mi lYßm¶÷–Wl4�…/Ù}þC_ ^×ÚÞ�^¼Íþ²ã¾ ZÉ# èµÇ¿Q¯~yéIå}ߨ‘ö<'åÚwŸWNøÍŽóºçÎQjjíü³Þ|C9sgkÿ?yO»YÊõÖZþÓÐý”œlÿªŸ5ýÀ“”ßÜÏoϸrÌÇJOêþŠ{þ½�röWÖ!矩Ê+/¶ .‰»ÙSþ}û`e[w�ׯ5hÝÁú´M±[òÝeeRÆZœÓÌ©“*ÚL_ÖÛ –Ùui>Äú Ü|˜É×lÅ5h¡9ÖÃÁŠ���1ì<åûX�€oŸ~Zùq‡S”ㇶV6hÖRÙ,Å®²?`ž¹›,vÎP¶olÇYÐ Îþá$Ûå¢ € € €uL ø{S;t@@@**ƒ=¬ ¹Év÷øû”ÆemÂ~°^/&uQ^ÑÆ­1±ë8gdþ¯m'àÏSæ¬�81`ët?ýåëÿg[(R6[ïƒ ã>R¶¹jœò¸%kal›qIN«³Ó"ýûkOhÎõo-Uæê¾uí1×Z³ͳ¦öA£V¶Ì´öü¿Ó•«þ°ÖþI*™a½~jb½Nܧ‰ÒÝŸõXPI´‘ù¯~ü|åàf¶e¿3rÁyרö×ÏøJ9eK_å/ÿŸ²ŸuŒP±óZó™ÝÏÆÎYÛ̢ŷB¯?¸ÕFUxbAÙMüö×o¿‹¯SZï‚Ê–äfmôÖ]:·WZ»é%µ¹õ]èÔ´žra}óHin}:ul§ô®úZyÝ™“”ÛúJhRÅÎwø»Î¤É}¬ÁÄköW6/y·¯È € € q|‰‰¸KÂ!€ € € P}1Ø#ÀÁô[«õ;×Yëýƒ³ƒ[­­m<¹ëîʽ×ÎU¶>ú e{t€ŠÕ›´ìÐ^¹ùÁ{•¿fmË#o½Kyòæ‰ÊîøI™­?e”ÆkáJYa[k³Ý¥ß¬Må‘ã¬U¿ùGvOû÷IÖú}ðe—+.˜¢¼øÆ¿”#')'ìbûr7à_·TÓ‹víÚ7¶> Ÿ?b½0fìyšrì€fJÕŸ•¥éœÓ®—`]ÚÆ+Â+ùó´Þý£/²,åÉ}ö/e ³@@@�Hþ2éÇÊñ!€ € € €À ”lŒÝÁ Ö‘·;mìÝ~‹·èV3’Þ®¹rë’iÊ“?|V¢x­-¼ý±ç+=µQÐ v?ûüwSÞ4wWåЮiÊ8�µWj7þ{2§ÙÝû™6é d[+÷×_[«û‰]¦Þ¶ìÚk_ý­õYx~u_å ãìžöT¯µ�—øô½õrÄ!*¯ýø7å‰={+ Ž5ÏæÜ~úy–úSXR­­{ôC•»ý5EùîkuŸÔé åÙ=¬OA~®Û#ÀJŽ ¹zÁ Ó»ù¢×”3�$DI=ðlÍ�øûãW”�þb}κ¯Ÿ2=ÎÆM(Y¶ü1U3ŸùØžD°÷Õ” �³.¹¦;ò@îº%Z4ãó_•³—[¿ƒ¼ü¹Ê{ζ¾÷èO¨Â¡T˜‡ € €uC ´ï§uãè9J@@@¨�@¬öð¯Ó7[»ô„ß­õx[±öùާ\®|ü¸C”ÿû�òï”Ô}ÚYãòÒÞPήo÷Ûߨ»‰²´&çúºké�Û*m»¡J`]’fÿöÅŸ¡n›ç4÷ïyÚ¹zÝÆgíÿ+6Z€”ï(Ï"K9ê–Ó•ûþŸÝÙÞ9ÕŽÊ“³N±$ËîêoתÄ1zS4¿YëVÊ�šÙR_n#e’g­² x­Í¿Ó¡G*�˜ú¤ò…/­Ĉ-v �šØJlWóª¨r´¡¿?}Qyõ‹•=ϧÖÖùK[¤ …�›àŽéðÈŸh:ë ëƒpꞦTò}YvŽ«6ÙuÏüѶ…×®O‹=¬—D³øÎʱ�] <$=¸¦Ìv¹ôƒ•ÍRP@@@�:)ü=§Nž� € € €á Äj�€¡Dýzɵʳº[›ð¯Þ­|A4þ|zåI‡|¦¼ö‰�•]N5®‰/.QîyºÝ]ï49ëgÉbmÔk¾~[yÛ¬2‘�þ•>kà ’›ñØvÖ}ó’òúm4ûÞPÞÚÈî`eÔqÊ«çܯ¼æ�ÿ);Üf÷ðwMuÚ®?|NÓç½ßYyß=ÖªßÅø+\¼õ»é=Ç_}±2¿�Ýè?÷;ªÆ;…Ñ#ÀiÕ_¿z�Ö_µÕm›·c[³yûHz²r—iþ´©ó”­N£¼bˆõ_°k¶½Ø‘lüÃÎýŽ×¿WþºÓáÊ;ÿoe“àj®€�ûðóËO+ï}k�r…·©rŸ Rq�õïØ«¡�pËEÖÄŸoýòóƒ;Øt¾ÏöH‰e�@Àþø|ö7Äï·¿îœX6áÜ@@�hðzí[L\œ}µˆ�·ïŒîœº~¾Á_•êú¹pü € € € PŽ@™�Õå¼7 [íN½4knÑÂjwVÔ³š·åÚãµ»ë»�8IyÔU)Ç^e-�©{ŽP>vPKeé|¶�´ž”§°ÖþÒj\×ÒIÏ/W†(þuš9ý‹ß”¾Nû+[ØííÛŠ×Úç÷8þxåQ3þ£übîe»¸¯”omj¯ì½ùså¿?@yÍ�•%`÷ù¯Yfû]â´ÕûWlÔ´�Ñ_¼Ø¹4íÐÑfû—*¾¶¦zOúþ¡ïÀ·e…%ÏŽüþ‹­ÏEÉ’z`ÉyÛçx“ÛëňëoP‘Z_Y¿àÂØUÈ^iG¾Úg®‹¾´¾¹û£¼ë<Ûè®¶zÑâµ£Mß©½ò�sU¸oe»vÝÝâ_åüÌ_ .²ñ&¸ Jdr»²”XÈÏ·ž,n_€X;wÎ@ˆM�àÞ îï�n¿€„„Ò¿ Ö©Ò¾ŸÖ…cç@@@@ ‚u»£‚'[ru§myãz-X³ÖZ†7d;wü´'çiΊY?)§¯°ù>¿5I×OÈV®^gKwjQôŽuÍ *þ|k_ßšc£ß—VãÈqÚí@B”œùÖ¶ÿê,»7þˆÿk¯LyOá ¸w&Û¤Ç[¿«òÿî½F™�lg±ô=»×ý£y}•W±^·}»Di-éVl«wÿèL†�9_k=”ÜCyíSç*»¯·#ÜiØPå�í¬>o7»³Ýû€�Y0ÌJªÄ5ÒÜa—Ûvz·µK<²¾µá{­[ö’hmé㟴=iVpóý¶eÛ~6kjÚó¹mšõn8=ö°»ñÏØ¹¬Z¤¸VýµÎMOì«L©¯(ZYz½l¾ 6°Þéݰx�\\3w›6½òÛÉÊ»žûA9k…�hàsž�ÞeMsÙHå!}Û+›ìH5œ“¶ðç§)'½ñµòÛMm•Ç_x¶òäîvèñÞ^Ê3FÛÑÞ÷ÐÊÑ? S^6Ʋwz’’­î¸ôˆÖëËy!€ €•p?tW¬‹ã”õ]®r"¼ @øöμŠâíâwoMz€Ò{SA”¢bEÅ‚½þETüì],X°wÅÞÀŽ�"v±€ R¤÷ÒH¿å;g6�R -îyŸçžÌÎÎîÎþvïîͼï̈€ˆ€ˆ€ˆ@µ%`-_¾•KIaÿê23ÿ¯ïÓ¼åàaÐcšÙÁ!¤S�/úéj#Ý糖¡7§G½Èñì§yùÜÙЙ?Ðÿßðdz§û×£»ÀÏ=ì–Yl�ñ˜>ù®2\õÜnÚ&è¦ úÉ Ãýüf[o|-ä7¨µÏ ‰mÊOEzÑ"žE­ÖM¡u*tiç¥q|þ YŒrYì±_«>É$„ùáC©?"çŽ+èQïþÐÿAOH®°�ÉÌYðÇ ÷ äØ_Ø­¿výðÎ=¥ kÚ<úÞW uZ³O~ë�  YÝ2À wWŒçµö[W|¶µ5ôØ#ÛA™ù#�ØÁ 7s„É“-’rÒè¡uÃ@ìPZ‹åÈ7cg”¿¾ì5>Ÿ¯ì{!×î÷UPÀX™ˆ€ˆ€ˆ€ˆ€”GÀë5ÿ¡X{î”òŽT2×~Q¯_Ïÿï*üo­äa´$" " " " " " "°¿ˆÔˆ€ýýºUËúÛT‡i «êÖ°j D•ª€À®µ_VeD€Ýã˶‚Ñ*�'àr1ƹêG ص_ÔŠˆðÛU§/" " " " " "‰Jw!�D :ç=BÀªò^1{¤ÚÚ‰”I`wf èsÂõاeFúp:Hçfr´‹­éó Q^ÎFQ¯g£88î†e±¹€ƒ~8V.ÔâèŽ�1$°ÉÄÎ’ãJ‚ø92…UÈ2þ ç †8–A0ÀX—‹%ƒ�k98ˆH”—û‰‹á±òs2¡ö˜'Á_~î¡0dâxLMÜöÞ¬‰;Še\îsÚûCe" " " " ávçwcø~ª2­1ª’¶Ž%" " " " " " û˜€"öñÐáE@ª'�¢1/v©rN=ö� ½ñ–Å™>|QqPoB+hjÚ_МÜÕPËÙZhåC££éu÷:ͬtç;üùüãòÓ“_3†{Øš¹•ù!îßëâ<6škÝjN.×üôä; ¹·�ÃÄÐÛ¿ÅŽ (dì€×ÃV`{­ÇË’ˆ ÀÇib¼fŽ”‚|nÈ¡M¤2ØïØ#þlÝÊ·¤=Pa¡‰§3oêÝyãïw("¤Âvœ²ÓÉ_;ó«ÌÕ?.Ž¿¦ìþü{Åþx)"`ÏÞÚ›ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€TkЍ֗G•Ø/ ˜¶çPA*o–›û�¯4*f-tË–•Ð “¡ùùŒÈ+̆ZA>–½Nzé£}MÀUš³5Z§Ók3XÒ_È­ü&îÀÉtA!ÓÑÑœÉÖíc:è¤??dÆïÈ7±,ÇXæ# ’—ÏX»Œ;Èm=.®u:¹¯�õɘ¤d" " "°?°=´ÙÙ|cfdd@m?°í+¶ýöÇx8ÕqWØýöíx�œþ*³ï‡„„¤ccù++’Ç8SDÀ®ÜUÚFD@D@D@D@D@D@öSŠØO/œª-"P} ØÞs�‡Þu>[ Ý¦~ÀG|\Bè– ³ ¹Ùó¡µk ÍÎcßþ€É¿0@o|¾Ÿ §“Ó ¸³³ 5c8k€ÇÉ6ì ÇîßÈ£ÙóÀÛ�t¡  ÐÁ£cøXKÆFqd_,[Áór™oG]l6`?¨íŸwš¾ý!?ýùùnŽs»9‹#‡BœY±øx¢ØŸß㤷ßeÆöÏÞÊ8‚�™} húö[ÆŸ_�Ë€üÆ—?F.@­àŒ#pº¹·˜(ƸÜ,YàgŽ?` …XF&" " ÕŸ€ÝÜŽ°û�Wÿ:«†UCÀ'¾+ì;Äíæï{6�ª©Cõ9Š"ªÏµPMD@D@D@D@D@D@D`¯PDÀ^G¬ˆ€D��í‡7Nôè(úÿsòà1s]ôðGÅׄäÓÏŸž¶S³.süôðôð{œÜE´‡1V5'ŸÞ~“tä°%7/Ÿ=Üüf,g�Þ~GÈŒöo¼úA3ƒ®Ûmöfö°>™Y™P§‹¯€PˆG šãæ›yBNŽV�à±¼Ž)€ªLD@D@ª1»¸=:€=.@5®¬ª¶� DEqF§ÌLþ"²ï;^`W« ¯ßvU[‡�}M@ûú èø" �}þN'}øñ ôÀçnaN0ÈG®åbü á¿FR¤7¯Y�NÜuº)`99†­=@~ã CfÄýÿ>}þöHþVˆÞ~·‰p»˜.,ä<ù–´Ì8þ¤óÌlQ^úÿcc9Ê€?ÄšØöø‹uvyYO—‰p…�5€L™ˆ€ˆ€T[¶w×%ÞÞžA ÚVXÛ‡ÂïûΩY“¿Á"Ç9×Zg*" " " " " " Eè&�=LÀ À/=cBVêòÐï÷³ï½Ëxï­P-¤�¦LLû§mÍ\ ­Ýˆ}ò CÜ*d,€×øä] ÀxþôØçfsVä`�ã „œ|Œç¸:`zûL~·‡ÑöüfЇˌà1cäädcmÐÌBÜãA 5 FxÌøN3e" " "Pm 0.|Þøj[UU¬š°ïûΩ&Uª²j(" ÊPë@" " " " " " "°ï ("`ß_Õ@Dà#à2sÒÚ½¶§Ý²½îŒÀŒø¸œŒðÓïˆK¨Ý´Žcx¶l†ú¢k@ ,öá÷;èßðúø¸ÎÍå‰ÑAÀïgt€Ù�ƒå8¾ÿ:ÍH.ãç·ÇOö3¼Àápm €3 øý³ÀÅ‘‚&ŽÀeÂ|^G`Ï&`Žå4�c1n/JÊD@D@D :(,äÛÍçãûQ&•!`Gä›Ù�*Sþ@*£ˆ€éjê\D@D@D@D@D@D@Dà?("à?iµˆ€ì,� E¿zl,{ø§n¢‡ßò±?¿ÏEEÀŒÞïð0:ÀžAÀïˆG:®NShvÆh|g(4ýóC!3 €ñä»,–LÏâ¶nã½™ÙBfËÏ‘ü&Àãb�å¤'ßãa ‚ÓÝëa@®#y\kâÜ.ÖÖ eà(ÈÛŠtM/�Çš×­%ï 0ÈD@D@ª5{Ž�P­/R5«œ}·DæìЍf7£ª#" " " " " " {“€"ö&]í[D 2 ÿ¼ÛküÿÆën…Ø??!Ž3¤¥¥A-‹Þ{·›~x¿ç?.®)Òù™©Ð¬ü¿¡ ±‡AC.¶Ø:�Œ2ˆ2ÞûÜ,zû]±ÉNçÿ¿ñð›1 ‚ùÈð˜9f‚@€q3,�å`/ʺµXŸæ)  u9fAR#|^nÛªEcha÷Ü0% *�êL 2ýºÕùŠì/u‹Ì;GûËý©zŠ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀ  ˆ€=Q»�p.3ÚÐŒÛïò˜¸€î÷zèÕ÷š¾ýyzõÝf|~—‹=ùýf´ÿø`KÚlhL4çð[µ¡.'ÛmcâÙÃ?g+£¢LLA(×xþƒ&ÀÉøËÉc%z˜nP¿&´I“úÔÆôüò6AósÒ¡ýŽèu†��ŸM-`Ô€ËÉ1~›=ºyc4í#qܸǡ2�Ò 3×!sáF¾÷[·`œßú{Ëøö_øÅЯœ|›_z4?TfŽŸ‚­|³gØ3!¹Íø["*†ó-ù–‘‰�]“ø;aÍì ™Í:BÛÖàoŒ’ƽeýÃ_¦¶‚žÚ§!”¿'`!F.˜ñ#tm“àGµ`X#gT’í;ŠØwìud¨rЍrä: ˆÀ�N düÿ.ÓŸßé¢? h¼îöøü–ñí[A¶¸[¦1ÜîÿŸWHo|t4ûíÇæ¦@3Ó–Bk5 Wßaæ(4sÄÆðÑ];ŽÚ¦U hÓ¦ôöתÃþ=.Ž>а{õ׭ͽ°íÑ¢yÐY ÿ„¶kÏýŸfÛüüù ¡+W¬†nظº)�Q9…Œ,°ÜÑP·ÑqHU/£ÿaÓŸ3 ÓVÖ…5¤´^õlâ.\†ºM~t>´ÕÈÁÐDû_àˆ¼ÿ.ô¥é« ùÉôÏ\sý h»"W ’2�}L pù,Ôàé·på�|J·ñ2úïÏ׆>øýêåš· V]5îTèÁö@vÑãõÖ.Ù ÕãØ=ÉñöKŽïú­k—CçzºB¹\l¡­|�/ZkÆjFÏ|Í¢àæ,üèièýß•®”ÔîwôÄô_ _dÕ�Æ$1JñÉ2¡‡^r´u�xh‰—mÞJä|ñÞЩýÿ]:1±c¢)å߈ôì/ƒn9©;´gC{k¾ÇƒæNL,£JG S¶—”¸‚{éÚ­ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@5!@‡’LD@D`O(ÌÃÞ\.úŠF p²�»Ð¿uÛQì± ý,ãb˺Ûâ¹ÀÅöø¸¤–ÐÔußAý…) ÖÛ :bxhû¦ôóûóé±obÆüÏÍe;}V&½ÇË—/‡þ»–}ù~LÝ�g|þ›Lzcj*rÞùðKh®Ÿ-ñ.]^ëEoCb£öÐZщP§'†Z©^‡(XÅFÿGÆ"úÞ˜Þ Úe°‰ØËµÒב‘Ë–ô¸:åË}•†ò±vÕ¼Ð4ý3sÿZ -œÏœl'™wìœ �áe/òæLAîCòÊö¾ø4h3÷DC:œd" " Õˆ@L‹Ö¨M·B¾aÿ\ÙÚ¦ÅöêÕèsn;†ÏüpOlp}xµ½hxÊ¿K_?þ>Ôá5Ð ;ý÷ ¸îw”œðß#î=,Ñ~Í00 Ý ¾M®;‚‘�ó-V¸ê[è˜3Ø¡{;èaæ�õùCï1?Šu>ùг ƒk,�¾;™gpÔq¡õ<|'.ü‚g=#¾'ô¬d¾éž~žûý¿¾ÐæY<‹ÅÙ…Ð…¯<ý Ÿb³bÑpÃ8F"tàÏ%Y¿«è�:Œˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀ¾"P®c_UHÇ�ý�@L ½è›6²GœÃÁ–{§‹½ÞüAz°C!¶Êû|l•÷˜gp €ù^/›Ásýô![fd�„DF¤o\mѹ)ô�.t.s6C?øì#h¶‰2X³–ÇJK£?ÁiæHÍàˆ©éÆÃàdgtoTÔçcKí&Œ)pû à0Ñ !�`÷γœ¬[0Ä:‡Ì0–ÅèxBÆ/o@/x»>ô¾ C¡­ˆª, ñ*l^ø+ô…Ï8óÒîaÖ„IÐßmÞ‰ž–²"xWl\¾šU“ñýúR[—w,¬“‰€ˆ€ìC1|GŸygs¨/–oRÄù¥¤÷ôÚï¶e”L˜1Jfí�%¾Y6Íÿú܇«è˜K@¿þºö £ W4㯟Eßþ)Ý#ðlF[èÁµéÕŸôäçÐÙMCûYüŲb£&|Ë_Ãn8Ú/©4~âkÐÇ'ñ]y]«ÐUõ0îæ# ��|¦ÿò6ô†ŸY¦ž )YUPD@U‘ÖqD@D@D@D@D@D@D 0Þ¨jPUAD@q±ô·oʲ#ìÓ²}þ1X2 1.>~ ,æ?³ÓÌ&à6ÞxËbKyl½ þ\úÿÓRÿ…:ƒì‰—�Xº~S:töÂåPËÇq}=žÚPR€‚éíOªi:ÛYŒJp?‚˜¶Ø \h�Îë´_ŒSà˜Xiêã2upÚÙå÷‚7[EŽðºälåU`ê?ÍÉ+ÕõzþO^Ê~•Ï/â6þf} ç k­Snƒ<�P�GKÈË«f®þÊD@D@ª>«7Μ½þ­UPúÙñFn=úÀU�Í_¥5û�7´4üy\órîyb tï_9õ{ƒ^_8:~Â+ÐôP<´ß…M¡®tþºHÅsõêM~rtÌÖ:®c®;“ju=Œw˜ŸÁ_5ùyÔ—îGÅZ2¦`ôŽD°qÊÇÐÜÕü%sÓÿfB‹�d’Žî­É¤¬J ”û¤Jk¡ƒ‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€T ET fDD ’ø|ôü»²ÙÝ­°€¾o=ó…ú Ü.úçÝÆÿ4žù�s{|;ßb˺ÓML�ƒ +V/€þþÛïÐÁBÛ·ï]�Áèƒ4?ýÿyÑåa£zÐÅv^§Ù¿eÆ'¶Loÿ�é•ç0Þ~—­ d|ÛvC¼e±½ßÄP´°û­ÆÜ[ú‚o¡¯¿CïÇÏ«xÖõ[·ƒöÒŸÚ®&ÔÄ08 6ýƒô§ïOƒN�³lÐ:ð¤ã C;ׂÚ%‘(ÇH>m�õÎdö~üi9½ëuÛt…ž4ühèafðý"'„áÍoÓ‘ÿîçs ³×°ÎÉXþø“éÙp~òô�™™Ð|ÿ2èUÃYC+¾7óŸ§�¥–°àæ¥Xžã< zÏC<ß…/} ýkÃáÐ䆥60þ¤¿ß¸koÿ„£<ø_A¯4ÇjÞuHßÛx&ô̇Y÷ïi ]øîÐ/þm½öÑÓ ]¬MÐߦ°?çßѳÊÁÈ‘n}X“3w„Ö7Á"ˆSAzñ{c¡7¬½¯�ûù'³ ³Ö°Pס'A/êÏûmÑkò7Üç–ÚÜÏ𠎇Ùˆ%Y'™ˆ€D >ójuç3pl‹-Ð_^gŸù¿:óiœd^žkÍ{6dfÊÎÎE~ø;5˜[ˆ¾oªÌ̈E36�×S‡mŸ�öü3ÔRÕpÕ¯�¼”,ž�#Šç0¿g¾‡[ô¡¾[¡ÿ~ùt’�ÑWh ­[ƒe O }jY�ÑŽÓŸà+ñ�^ú]XTRö�ðûp¯D;¨P=®ƒj!"pðy�OÔb+¸ ÀããÃÖïg‹¿åæZËöÌØë¶›dCô Xön ѧíò±%ÞÍÙ€?üt ´I#ö¸ÛêgËzF!÷\hFpx¸#Ëôçw™ý;�wÖq X=¦Lx+°©�;`G(  qÿ–‰\0Ë»%¡´ÙØþ¹éIÞÒ÷èU'ÄA³3Æá×EôEôm[êÞœÇo£GeM÷c g_^êÜ8úÎ#ÏCóo¹zFËò^a¬yÖÜ 7�_ m5Œ^î+‡Ð_�>oôɱB£ÆÑsÞ-žþðÕ_½½æú(:Ÿ8zé1dµîWÎðü늃¡g> zaÁ«Ð§þj ½b{66ñ$Páb¹ØœuAòZ:ò‹¬åè ‹“eþ¥_¤ñ‘ìMzÁ¦W O/àˆÍ#GmQ�”¬ut¸œyòþ%Ж‡±†gtO�¦¸S¡ß<úô‘å͘?ìdèqnöÍû¯@¯YÂsŸ0š‘uÃj^ð+Éß¼šGÄJ‡fäóM2oöZGó¹úð |ž/™½šÔ™Ïù$7Ÿä˾boùG&~m6’ï¾f|aâ_2`äÙО<¹b3ÏÿS&cù#×áÐk5�½éìRwQ�U(ªƒ³0é@Ë£¡wMƒ¾ü0£á®ªÐa�4oÈè1—A�ž7šÝˆo‡ùoܽÿ»Bh±ñ=~Û·¶šoÞ” �ŽbÚë¡6äàèÁ>3‚@~6›úƒ&jÀåæÃ9döàñ1¿qŽ �ŸN¿kÓ”Ð[èÁöxÖBýfŒ§À4þꢈßef°½ú!Û·o¯ ß½Èó�ÒÛÌ®¿Q °-{×®¦ôW\2ttü}÷@çÜ zò�ÞÐÞ­jB½!òY²€~ƒ¼eôr\0œZÚ¢z° Ù•eÁôÕÈ^°žŽ%ï<=á�ÒåèXo›É}ä¯X ý#¯tXÇPÛ{ŽDu7½+ÝÚÖ†¿Îyï­YHÎQôÞtHÙñl¼Mxÿt‰™ ýnázhÐŒ,€ÍGIñÛ¯¸E¿M¼9@|mÆSĹüù':–>+¸š•kÜUŠ ™ˆ@Deátÿšõ/4k3}ã�ÜÅõ]G\í‡O±Ó—!9}ò§Ðe ûôÝŸøüì=¼ ´AQ�V鎿®tìeŒêªUôæûkë|V»ÜŒhÙ²)4 XˆcøÿòâÓÐLJQOm�mÁ7ï| 8‚~æwSÈÅw�=¢x×H‡[ÁßcñŠçXËŒ‰Ó²WOS€uÞjÆýÕ…±�¡9“ “½¡gÔã{!¿úÍ‹¿Bë^p.ôÔZüäòðÍR§uËäw¡/ä“Ó=g3bBV5¶¿é«æx:Šˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀ>$`Zø÷áñuh8à¬\»çµ{�Y.ze]nz¡ÑžŽ�ÛÍ�™ƒ·Ècozò› ÝLÀ2ûúyl‡®éaؾ]GäÔªEÿ9ö��ÓÌ2`…تkïÀã4=M3¯½§Ya™(‡=¿€ñðÛk¹'»NÔ"GsìäŠp8éIîvæ(è G.€~óõ7зƌ…¾ß÷è˜óèßöùxà¨CN�>t6}#ÑÛ+…%šå#Û&Ÿ‡’f™|iw>órè¨ÃxôR»qxâIÒZ@’!3^rÑYcyÿ0žSéó*êëhV”^koaŸiå{E–O¦¬#ìôTKØC,¾•½ähÏŒ¹Ð'îúÚö ¨µRdÎZ|�_pß;¯>ùôåôdèY7°/ý1 íW>’E Ñ_HÙy °MÐŒ›PîÆf~¢ìÌLH³'”*Z°µÀä•ýo£ßÌ&ðÎêƒQæ"3k€×Ã÷–¹ó iCqæIŒ•¸ûõ/ M›sô3nbÓŸÓ ïþÁ¸¶S¯k�Ó+ªÊPU¤u¨ÊnÚ©SD@D`%à1}ª6àÛ³Xf";?TÀ–u�qô»Œ??hæ °½ñññô*dç²ïŸÓöZ¿Ÿ-úÍøÇõ뎴å¢'¡°�­é–íÇ6^a»Ñßé¡'Ür±QÝiܸN§É±ûù›ØËŽ@‰b³�^ÜÏ¿E`ó'X†×¹xËJþ ñ,üAÖ$¦a;èàsÛBoùôü'¾�Îz´uÇZÐÀÌõÐÌ„>Ðæì„^¦qŸ¥ÍJh‚ÌŽÍy¯¯È€F�À‘µÊiú6n†µܳ¡³l‚kÎþ–Å/HÒ¹7§ñ–¸=\cM>RÕËH8¹uKhü§K óWñ>éÔ|»—©p5óÿÌŽ‚voÍ3- ÖÈD@D@vŽ@Îr>cÔ£ûäÚ|¾n¶w`|û¹©k°´t)ŸÌ‡Œ8êyóè7ß-‡z*ŸÞ‰UùP¬Æß¼ÿq*>˜™5 äz¾ÔƒFÿ²šÚ˜ëCæŒWol„t—ú^h½Æƒ¡¥} �ùÍ|hN* <öR ´÷CKªÊÓÆezûë�H"Pìðˆ¤sֹЀˆÀ^%`yÙþíÈ@,‹mÞQfÖ€�ÅX—Eo0”u˜HŸéÕŸ`=¯�cärÄ{8ô!A‹êìÜ4èA-šC=¦Ãv2@IDAT¼ÓÅ’¶çßd;ºw`Š#Ÿžaäá,}à2±Î2f°Kno�/šGÀî1hVrW»j¿{›Þò%�ûÇ émO2Ëþ ç?P—ãÛ7I ×ú C ýg¾ÿ0k~Π6ÐzNòùwÖB¨oð™Ð¡)¬­'Šžm+�žüÅk8›@ë&ôNô~8ô‹±ïCǾ”=¹½ß¾œµÐ_g‘ŸKé£h_‡=Ï9ùGèµo0BaBáhïd2Üüó¿õ ½ãŒƒ µÑË•Æqž¿ž–ÍJäy5éÑZÏ�Ô¾³„®¬í…]‚>þØëP×0Æ’4‘öw“§A7v=zsWÖܲ‡¦@J&" "°ËÌXýÍbD@rÏ#  ©Ð9ëø{ mÕÛБSƒPG<ßç^ÃwÙ2rmÂ#BŸ­}6tTÎ_ÃwÛÞ4g½C±û[ïãX9/ß;sÞEÐÓ[MZ€tþæßñ �œ|㺔ª–Uƒq|ÉÙŒÈà‰:B|½;b»ó�ØØì,o-™üü ß›+Í™9c‘n›]ðÇ"èÚ|O%o?8–d{—Àöß|{÷8Ú»ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@5 à®uPD@Dà€"`÷üw{éßó¡–Åþä.ÓWßg¢2·æ Çizì»ÍXöÌ>³U”éç_�Ïm=QŒ/ð˜2 ê&!í7cí"i¯��óÁË8Ý|¤;]Ì/ÀD¸\f­9º `÷u·‡°�ýöøA37�=:@QD@ÑPØånY�ƒ‡bûKÒg@¿ülôíõÜaÃÝ 7]?Ú6š9Vtèc8#ñ—“¾†NyùWèfçèЭthyâ,ñIîA¯Ë‘3>†Nž± :àÜ6Ðøöô]ŒÃ(€÷&ý}ñ zfœõš@»ÞZ4e²E>-Núôá¤/¡oýtÂ&:÷S:v…žxr#h´¡Ó�qWûôÕ÷Þƒþ•L?ÆÅ­/PϞ̩}h.ŽÀÜÿªk qŸN�~øþ»TGh×ÞgC>®3´~5ˆ_@5d" "°Ÿð£þëý úþŸ|CÕk^Í3¿²søzkѵ#´oÏöЮf|–„¢ÿÃz"çâsùÆŸî§C¼ôƒ9´•ã ,[²šZôÚæþ×d2¾ à¢7~ÉnË÷,ÄØÃµYæ]YÃä”'±Í°æ°îtåOø~1tpKÖ0Þ‘ýó›9ÐÀ¡§@;%ØFr›qÿ…V2ôØa<ú¼©,ŸY˜Ýê�}åͥМÙAó9z}[åÎI±Ðs®à;ú‡§?‚>ð Ïåºó£×ˆ;“íuŠØëˆu¨>¬åË—£6)))Õ§NS¶{­ÿþ5èç[Ø?vÐ1ô)5¨° ,oÁ'(óÚlï;|}híÊëd"P] ä_÷ÎÖÎgúÏïìV»V~×jhëø‘Ï á°¥Üí¡ç«ñÿ»}ì‰ë1í÷NjÖÖf½DD@D@ª#�+è3��¥·¹*-où78ÜýO°'|ó�M gþ]•ĵ#z¶†¶ON€FûøFvÙ�>/�Q¹¶æšt.ßïÁºm¡}ÛÄCðôž¯¶B�+oôáÇuô‰Óšs³åÓ!7>ø#t½ýÊgîΛEÂCG_mþíSÐÇ~ç±ê4å¹wlEmÑ”ãõĬú:-H?ÿY‡3Z͹˜u¸ã‹$èM· mœÎØ�7'R[�˨�žUþßM¶ùݵûÿWå/U€‚íÚïÕõë–©ˆƒP"" " " " " " ‘A ¢Çå¬ÂUþãŽT™¾;­bÞ+έ°þÐn�¡Ñá�kòþFΤ1×Bï«Ï¶´þDz'j°TMŠzê:Ø»õÛn„^7mô“㎆îY e“ÉÜ¿Ö@sw¶áÑb¨ä¼qlø©"C&D dè!ãi�2cÚgm¥‡ßarââ騔ÁtÅýù¹Òr{¡…&V ±·^\ûÉgÿ@“ä†H;Íèîn3 6fŽeÀ²èa°ç°\üêzŒÏß2ã8ÍÜE£˜HØÁìˆ;3|t€âçÏŵ(" " "|çæ›·|b¿AHŸ~ ûÌ»zqD€¿æð×þ¬?~€¾j¼úé¹Hg‡è‹õyù�X‘zø·gêrR¤-ã¯myÒÕH¿zdg,Äù“9:Ìñüua›+¹'7ÜÉ1bLØbQþNÿ1¿1¢³à9‰qÎdÌcͨR>æNŒDèjñWÍâ�žƒ>ú ‰txh=SÜU‹g_Åè Ëž«)ÙÞ'PêjíýCê" " " " " " " ûŠ@µŠ +|ÙìÇrèÙlÁ☻g)7°ÊÜqGAKuÊüùÏžÅF¶ç×AöŠ5¸”cYÏy*<"€ý‚–M}ð;úùWçœM™)Ã�ü¹SNœ½÷… wC�H¤–g‰žÆªŸ>¿š<“q�<]�O™–òÈþâ½vЧ‡\ýˆUÛK:¥_ùyôÜôUÊD 2 xMKyÈÃ6o——ýèbb9žp^6[èÝNF„ÌHõ/¿)yyŒp™˜š(Ó³1#c r3€`—,Vщmf甈ä)Š)(‘·­¼" " "PÝØQlU[+¾%;0`d[¾a‹þ¹Š¯�tç>¶"YµfÅàx�N9�~d“Ô®³GÇPð²·?£‚Ë4û·„¡Òò„ÿ¡È“üw¡ Û·±ûâÎ)Bg)" Š�ëp" " " " " " "°/ T«ˆ€01l½ºèž ýî\kE(‹žó‰7Ý]€ÏÛ±†¾øôƒ Z@CyYд͛ Ö,ƒþ»€~øÅ~Îw=âœÞÐúnãßÛš�tzz:4uãjèŠÅÿB,¡Ï¿Ë9Bû5ÚÞ3‡£€;[~ž½êÿ>ƒ6û?Æ |p4�õÔ¨'¡®‘tT/Ž«é2åÓæLDúºóž�fžþ2ô‡«ÙÃÇùç ЛË…Žxà h¯:aÔ;:�Íxã®VŒzxüÃ^Ð`�õüòÎë¡ï6æ�\Ôšàªmm3k„ôè/çBÇÍýXA†L|x)K^�ô´8΂g´á£Ë¡]/Ü•‰€äò[EÏ€×Ã'€eFõ÷F1FÀazʹŒßÞ²Œ÷ÀîäZ§ñä»ÌxA“ãq³L�:IШ˜(hvn´ €ÏgÑ(|NºÌ~ì±Bf�¢(»=¾(‚€{cL@I³—-SA{Mé‘Jn¡%¨^ì7WÐ ¸eGÉUUýÌÛÜ~ÁVÕ!uœ=BÀ¾[°G`j'" " " " " " " Õ—@˜¹ZUÒÃ5{:t¸éoSùÚ…RÙÿö§»+`ï;æ>Á>g¾Ì‘-[ÕÉ€þü3=oÃzú¿Ac³¶{+ôû{@¯øš>º±ë¡Ó~¦GnÄøû ç�ÚÚ¦~x,2þ•ìíÃùc õa ?ºî8hǘ4èÅ##pÚ=CÛ¼ó<ôòfŒØXȾÁ-/xúðÿ ‡¶‹§÷®0q(tà›# ·Œ©}ñÙ› ƒRè3,áïk|(r†r˜Tb>dÝS›ô“fÌtÂ`h³A`ñB¤e" »CÀ2‘8–áßc¼ô–“ß8·�÷ 3_€ÛŒ`¹8 €Ó”æs—‰p»Ykøqr«¸¸h“æÕí¶ÝL—ôÛÛå©Á°þ%Æ0φð­Pf?1œ%ŸÌ7û1E$" " "P­ ØïÇ}P­±¨r°ï–â_V<Wñ÷¢LD@D@D@D@D@D@D BT׈€}€Ÿ^ôŽW|ýg$}c�y�C�ð)´s/ö®oŸ¼½ëOïÛFΟ·C?ß msܯÐG í^ΘùîFý°öŠ1ôö_rä)ÐŽq¶®Ò‡\ù,ô݆ß@]Í×àÚú9ô©kŸ‚:Æiib¸ˆÅ ½þ•¡u&| õù!‘ÜMcLDêJFüókb…›°2�ù¡åÐ…ÿpÜ„XÓ¥xó*Ž’Àu2ŒË‘5œü^˜þ§yÖCôó'˜µ6oA:&‘O—)äñð ã÷›žÿ¦‡¿Ç͵!OÔrr<޼¼\h¡ŸÏ�ÂB»$Ûs‹}þÌ/òö›ìüpÿél­Ìèöó¨(',  <À^-�jFÀöëæçç£^v„]5« ªSíøý÷Íçc„f¤AÊD@D@D@D@D@D@D@"„€"Š/tþH=С ô–ØS7Ü~jGP—:8–þ富�Fßqôá�v^K–<¯(¯.þžóîïЗOå¶N'ý„Z=¬ ½¿íx(ä•cç´ÀŠ·Ï)g­�}÷hþmÀY:?žÃq †Ö ÷ðqeåŒsL¼ø0j\€¼C^,µ"©œ‰AKT†ØœŸ>ýùÖ­…º£Y2�¶z£8ǯÇDñØÞv§‡­Ñþ€íçç7×mâòóíæÚ(/5¯�1A3‚€=ïn‘ŸßìÍl„Ç Šl›GÀD ˜ Šæé AÀŽ(òù›y J `!j3&M™ˆ€ˆ@õ&‹ æåñ-0VUqÕûŠíËÚÙwˆýûǾsöemöűõën_P×1E@D@D@D@D@D@D` Û*r͸áŠz¾ú‡‘?ÒWyú/ЇÎ:zïlŽÆƸW ãÎn­eæñ¶N ÷û†eïCGŸrô� ôùŸõÀËбg¶ƒ&OšËxËjqi€2ç¿øôúÃM?|¤vÝüØôŸ—†AÏ~m×÷R¼%Ïeô—s¡ã�fƒdŒÀ‡—v‡^�ôt  û-oøèrh× 7@e" .¿5ùÝIÝhzõpþ‘Ø8>rCªÓkúÿX²À¨ÇÃyÜn>“f¤€ EoFls¢ÍNÄ8^3¦€âsŲÌÓÅ´;49ò‹‚˜ÞY³b±I“ºÞ27 .{ùÃåY¼·1¬ÈÔ!X¨ËÁ .ýúÛh¦e" »CÀå´¿õliõEÅC s·�ðï1ãù»�WßëæC8=u ´†‰ †Ý2q¹œw 6EŽ€Å˜ËÄàq8M@ñ|,cGØ}þmW~qމ0ÇÅP%¦$ˇ[øÌ¥óÕfÎDi�êIÀ~'ÆÄðÅi÷ÏÎÎFÚö÷j¼€êyÕª²Vö]aÇØ‘#öÝbß9UY“êp,ýº«WAu�*"P]#2¾€K‹Æêßu)oj"ü p¸óW@¿óô²8wÀ#OÐóÿð%_BÏ|áhÆ+ŸCÿ˜í�NzôjèK wB'_µz©5 7¼ÎüôG·{Á(è3]í›Ì±¾m³â›#1tä9Ð&î¡c�°²‹ÖìöØòî'CGžÇþõ‚¬ZŒY¸ü…¡gùy˜/ï¼únãk¡�\Äžÿ5jw€Æ[ßBÑgŸu 8ßÁ/ qÌ¥Bnd~A>£!~û…ý™c cزhÔ€Ä_™D:»g~(ȸ€�Å'†7–O€BÓAFÙx§›k=Qæëêb,€ÓÄ(ù|& €Ã 8ê&1¦Àíb™‚|~óòÙc?´ûíooÏušH„¢yìtØìöE£ØÑØKYV4ƒ€YU)ਮ/‹²ê¯<�H&`ûÿí·¤`ÇØÞàâH:¾=#Ó9÷†}Ø>G@ø¸‘9:€}lÿ9÷„ÎTD@D@D@D@D@D@"–@uuòÄtÂ%¹èúáû7ܹ֊PÖl5ñ¦û¡ ð©ÀüùXIZWþ}ï;úÒïyó^è Ž‰Ð‡ÍdÜÞä#‘¾é•®ÐŸ8úPÒÍÐ÷<ÚzÁ8(<|øD%½îåÉÐW] }ò«ã ‡�ß j;é]�ôí÷SCiŒ8˜ ϺÃÑæ¾™Ðy7Ð{_© “Ç:ßÙ®7ôU³E‹ï@úþ!%ÌJlƒå£†Rþù�uOy Ÿ4;:è„ÁÐ:¬¾#°ø[þqlÄç­«R¹¸ƒ�ÄrÿÒs$1†B&"àqó©å73;ÝŒ°LìLŒ�q4[R__ êöð›è‰6ñ>‘\Žxì ™±K,¦ ³mÅq@Ü^î!˜Ï�ù~FX&â xB~�‹ç`Â{þ§ÍÕž; Ĉžp³÷Ãú›G`™'aqžþŠ€ˆ€ˆ@u'`÷ý¶#ÜfD»g¸ßÏø»ü|¾sí¸ð8¸ê~Vª_åÿæáïûê{½ü?Ìöÿû|üÝekåöw`–2¿ÌSÓY‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ìH RŽç7ª‚eÇÒ?øØÓ¡ÃÛÒ3Vy ¥& ðOwÿwD@0g+J¦æÓÃÖãöä¿ûfz棢ØJÚØ zýcM¡Më°ÅÄéN‚6úèT�’hf4: éq�u‚¶©eJÖì†ô%ÏL…žæ¬µc�¨Àü°vÕªUÐJ]˜<úí39ù3W‹s±¯7SK˜‰#xæØÃ�yGÒ“Ð_Þ< ÚTMI%0iáÀ!`·%ïš— *ÈÎýq5éÃߜɴÇtÍ·½ën3�@Àøó½.úüN>!¢]ôÏçlÍ‚zãc¡yãá÷2jÀ�ïIŒ`ò�—ÞåæH–Åç¤í··G`l¶23 8,n2“ Ø9&Ãl)2³k¹€#rÿÎâ Š 믈€ˆ€ìl¯¯ÇÄßÙéð¾â»ö–ßN[U4ÂãìØûNØcCØÇÚ¿Àë߸ýëz©¶" " " " " " "°[*åxÞ­#Tã�C¹™¨ÝúBzÛjÄÑÿíË€N¹’þü!O¬†î¢¥Üˆ §Ï =*†¾»ÿ2ŽT°xGh>î¿Ê–µ¾YY™ÊØevk±í7ØÙ�<~×…;»I%ËÛ^û„xÆÝ|IÃJn¥b" " "Éìwºú„Gò=°·Ï}oDìõ:ïíhÿ" " " " " " " Õ‡@ÄFЯ–�¶ ºÕ“­•°c/‰˜nw"ÿƒI@+7LAJþúp?è)F`§Œcìô¬;u„ ¤aå²ù¡ gåÐA'p€ò#"8WB³w¨%­.ÏxëWèëÛ@wdZ²´–D :°û’íZD@u>/ÕMD@D@D@D`ϰ7îÙ}îí½é?µ½MXû�jD b#8ö¦U‹ ¹ñí )u9Âv¸yÜ5 fRmhíJqâØà‰Ñ;î'|Ÿ§ýiëP`ÅŠÐJ°Ôî¬hÎkШn´2m€�3}îêáÔÝ8|y]õC[Øã}]éŽÎw´†&ÙM"!æØVXÈx��ëÖB×Vj*!lÎbßû]³]œ5ÀÏ膴r;/óÄê: úáï÷@;µª � o nBÎß3É|}R–W"wá®Ê÷ÿ ýaú4è’ÒqÎä·èÙšSz5²e"°_°Û}Ãç°G °GØ/OI•¨�€=#€="Àþ;G@éS ÿw°ôZ刀ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€PªkD@"G¤ö§)ÐKÚVÊ¿í²„R¹ÕU]†@?Þ–»=A§ÿ–ß§B?ËjÕ�q¥Aäüq;ò6¡î´•ŠPîŽr°fñîÏPÎþ�uÛcÍ! (˂ˑûñ 7/+«ÀŽyã�qö7Ô2¬ÁùÈ|ÿ· Š(ƒ�²ösv«ðþÞ+l?¿ª¾ˆ€ˆ€ˆ€ˆÀnPDÀnáÓÆ" " " " " " "°(í߇õgòºGÜýp »¼×OÞ•v +¡'¶½æ öx¿4®´dGu¥F¯‘Ð_mØ> Zl>$z9ôîfÝ¡ç\} 4¥R)@ÉEŸ<ýàßæÐú•ˆßÛ%9ú`GŽçÍ`n»QÆŸÿõÓa«…)Ü›Ÿ�2÷Á(~ÓRÆJÜ´Sª°ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀþF Rÿàîo'¥úŠ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€”MÀZ¾|9Ö¤¤ìt§ö²÷§\¨�üüüJ”Ú±ˆÏǘ™ˆ€ˆ€ˆ€ˆ€ˆÀ®ý¢^¿~=Ð)"@÷�ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€D5DÐÅÖ©Š€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€tˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ@PC@]l�ªˆ€ˆ€ˆ€ˆ€ˆ€ˆ€¨!@÷€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€Dw�«NUD@v›@ })ö1uÚh«¡‡A›yw{§ûv¡ ÿ��¿…nj}t`›hÚŸ3 3Ó›Aûõ¡ÖØ�¦cÿ’o°‡§¦gC;áXèÁuwÜ�éLSÆíwj?h‡D º¿˜ñ4Tõ�Ië ‡ž}&´_òŽç¸¿œ‹ê)" " "p`Ðo”ûúêìD@D@D@D@D@D@D E”À¡¨˜€LE�Ù½ ý&¶9tÌ zP>Å–ýËKHžvï¯ÐÜâÌí£z"=nâyОÑÛ³íTáœ7�8éöï¡9;®Üùå �eï.矯‘x⵿¡}îµë¡ß½ýô�B0P | …°.dÑ{_–?ˆüõógA?ŸIV=Ï,ÝÍ2kæþýìÛ¦Ð>g—µ'¬·à&,M¹ãnèø?G°'ŒÇÝ~?tt�¨w*@Κ?ÿ€.t4…öê\e*ÚJn?þô/´é0È´öµà�Û¡W¾³ÊåJš'G>z=ô䯥ÉWr/*&" " "p@Ðo‚êrêdD@D@D@D@D@D@D bЍ˜�ÖŠ€ˆ@ ÎZݱ|Þ¹¿Aoûy>tõz¹SJ?M=͑֨ÐvƵœ·p*Ò| ù/ó¶@‰+¸Ú¯6 §}ÿ2ôò‰5 ·>}2´ƒ›~øM3žƒŽú¤1ôîC[º˜¿ùÛ #_…”k¡ì…X÷æ33¡yýx¬SÚø ™¿~ }k>}ìi? =‘/ß,ÆC4|)ôéK:BãÃÝù¡Lä,œ»Û‹£tˆ�”4ãÛÿsÖZäFu7gÁŠì„ùºƒÒ7"‡ðèŒÊï"”ñ ¿ö,¯lù–‡Uÿ~ù&t|à èkvD@øÁ�Xzáš+¨áùvºÿ|áæeX?oåV(£#ʲü–<âc㉯p>Ò½ý4ôé;AGßÔzP‰»Ñƒœ¤:j÷™ˆ€ˆ€ˆ@ý2Э " " " " " " D „× ‚Î[§*" •&XÈÞò#nø º¾„»v.rÎ?ù³'ú]û_?zy�~Ú�/Ú½WWh®td;fC�•‰0_§“mµ.Ó`ë,ró�U”OÏ¿ezæ#‹{ËwÙùÈ-Ó Ø›}ú3¡ï¬ª =÷ªöÐèõ?Aïš^q_Ž{ÿÈ€P�ƒžð�˹ÕÖ8öŠoV›AÁu,ÿГ ¡½o �³ëÜ€ôÇ·Ý}t^xö§�3ô ª >–½ñ/L$Éi Y2ë¯g¡ÇOƒì`<Ǻî�¾qN h¸çßÕ°r?¬t×^lÁM¹Øö WÅ(ò_æäœ ýÏ; Ú¯�¹xá[XäÖ¨Vx>¯cÎÞ]·>0JÖ;Ë79ó:è‹Ã›B‹Î=ÈŠ2ySÆõèíÛ¶9ÓEw ’2(ƒ@øo‘2V+KD@D@D@D@D@D@Dà@"°kŽ“‰ÀÞ9ãÜ´xöþã²8hߣÛ@kì´—†ž¢¼¼B¨7¸úñk‹¡M‡ më£ÈEWãNìØŒz�±)[e‡;ê°\ҜщȨWƒ]u‹öoú¾~ûÊ—ÈÉìs:ô¸–^¨LlΔ#q‚÷M8à—²Lã·$:‰ßÇÕïñÛêhÁþðõÃÝÖÌ­œpäù £èžPj‹[Ï¡¾¤ñÉð#¦—ÌD‡ûž;æÐW?ý©' ÷› 8@Ýþ•Ðɽ ý6êpè¸s{C;'˜o`9Ò<þôûþþÉ>u¡  º©mèqméë.zV Ec[s½~§@¯=’å‹Úž3ÿAú¥ ¿@¡|ÈÂßAÔè½ò’C  ù9Nþ÷/N‚ÎóVôÚ ¦þˆ2·_ÊZ}_©”E÷¿åÞ9£R…+Qˆšuì =ì Ê´¶“YboÖa ‘;+2qåÕ|Òv¼{<ôòŽGˆÏíécGAÇüÌ÷B [ô,KFRp«ŽÝ}äøÐÊÔÅd" " " <ý*8à/±NPD@D@D@D@D@D@¶¨Èµ²½Ô›¢CüŸWé-¹òý h¹®¾R¢?yo^OÏU ‹Ûeýû=ôý/ÿ„þ1ç_è‚4úÒÛôêMIY}ëÖw ¿–ë§âåè9òè½G׆†VM…Þ4–ó–�¸µô¯™‹ Ñƒ™þmÌ[ÐåÉôùÌúmÔ�O™æLBöùÞÑ|5ôÃ[‚N,ÙÝ9Åf!Që$ú�nð9ôúG@ŸÉý¬üíèÆN§Be" ¬¨š8͵ƒ³y+Ÿ¥ŸVTòkçþ}f*{›w8§-´nXs«ÇËWh tõ’eÐD¿¿µ[4¡Z9Ð̆Ç@_xžZ–±ÿøìW€>š>úÐU| ÕæW¶\sìg ­øüeèý3Y¸ßÑà·é¬�åkÈœ³è½o�ÄÞæI¿¼ }"‡é³†ø ÅFgý4£ôþkzA§5;XlÃæÈéÚ%j ¥òykw“läódÒç¬CËa—@‡öl-ñr ¬Dβ׉r‰¯Ää„›•À1.s-txé‹^4,mÅ×ÃR”ŧwi ¥¯@毋XÃ@�×há&Þ �óû…þ;l¿tóMÿeó8ÄO›Ã.?–Kš3‘×½[>WÍ %WW¸Ý÷l¬æìÖeoàÝõÖõ¡Ëñ‘‰€ˆ€ˆ€ˆ@IýF)YRK" " " " " " " û=�Š\+ûýÉíÌ ø:Fñ;N§w%Æ*oKz�–}þôYºÄ¶7ˆ¶ýTµ¹‡­‚.‹a—ÓûFuáÚ�3¡o¹[AGŽ¥'§WbØaB›‘3uü3пñ)6WrW$�®{?ô«9&FÀ¬Êš; §Æ ½ëJú¯Èc…‚ôA=vÛthòÕWC‡5783¢xl-“v5Gþ¹Ï=íþò�лCß:‡k_»ä hö•ô7Žìœ5Ÿ} ÍõWÚ¹†Ò28Ðð»¿v¿¡¿Ä˜©ô´êŒ¼¾�Ð_êõ‡>Þ+Þ”÷4ç7úø”—¡ÏÝò ÔY«;ôæ‡/€žÇ>ó÷�|ú{©àÈ,eŸ gÔ%Ôò�ßâð^âMúŸ†œ[qì’ ?A/3¶OºN׾ȩmž$½ö3Òk†�·  ÅÆ}ÆÇ�ÉÒS¡Sºò,ÚõòAÞkXªÐBŒ›˜ñ:Ÿ0é>îáÎ~Éв^Kä�ŸÁ“¶¢QQ,O ”iÚ†º³¤;¿ ¬áu¹ÿÞдB>ÕïK-mÓ^z™ÓJ¯ˉ:âB,½Ý: êÙ pf.ròŒ3ÙÁ\ëÞÙ}î°-Š€ˆ€ˆ€¸pà^[�™ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€”"P–ë¥T¡HÈpÖ¢'ª}{zìËŸ�™^w×ïÚº©¸›†¬ó›ÐK¶øÝ “L™.‹³uèÛ¯_3lM�{Nð…å`Ùá(ÈaKMÃÃè£óÕ¡+jz�~¹ô`<´o?Ö¶¶—ž½X/÷�ŸF[ª³ôÈ–Iˆ7ûtó¸±e¸��-øOü&¦œx ô«Ë.L›‡_ç“dÜYŒ0jÍÎã%ÌJdŸü‹Æsø �oÙ*ñ¥? ùN¢: %ôÏŸ« |¨[þR¤&=6êr&ô´vÑл1K¾-�ßµ Ÿ%ÖÆ5GN:à�©%,˜ŽÅYoN†~ÅgÚ¸~ ¡nÇrh¸E·:‹#�gÒµ/M�öït´;X9³Xó#/¼ÚÝt²wMaDÒÝq'Ao<žÏ±¢‡VÈDðñVÀTùXøVޏá+h¹¡˜Í}ÝÉpâm} |.—eîöŒ¡˜ô5ÜrÖ-Çâ:/GãožÄšn™ñtÄ“¼´£Ÿ½: )Œ}�'�™Ë’ ±ŒªØË�þ 6?czÅûàQ:V\DkE@D@D@"’€""ò²ë¤E@D@D@D@D@D@"•€"öÈ•§Ãnë†5Ð Ùô̯J-„2Ùåt鲕Єü¨qâoeŒû™ÿöèè�éG ßöÇçé´ûŸþžv,R]¦|�œµ½Ôƒÿã äâÚQà�«9Gwègö\>Žc›þ>‚ÏÑt¡Ûí£�ú¨Ñ1Ð(2ˆpüޝøp´¼1¢ºÑÛßùoŽòñÚ×ô�WlV4=íçÝy=tD[ß…C¹üŽO~àUè².½ ×ÛÞnÛbPo–7céÏe B±…2�š;•Y§ð 𬉨œ÷™O�¬ÙŸ@™Æ~ø§Þy´«íá穤~»ÁŒ 8tÊÛÐ÷~äâ«™ñ¤¸®ä¶ôõû _‡”4+ËÃk4…ölÏ£¯YËò¿¿ðtRÛÑÐá-IÆ ñ‰j¢Ž(/_[a~v,•cîd¬8óZúü�¨S\#–åÉ,úàqè“9\ÞY eýƒM^½ç)è O‡>}¯HQüR;Ï.ã·w —>ÆÙÎËgìñMvýsìØÃäË;@Ë8®ÿ_ä¿pÑhø ‚E™ˆ€ˆ€ˆ€€@øo#8À ìº;â³S§ÊGñ¿Þ½y=ÿÅÆ~¶£~¥7®Ëúôœ…ôÍŒ9÷T|v4^Žž}í\nÕù¢‡¡Ÿ˜ }iú2èâ/¨ñý»Cû ¡ÿí¨úË¡Ï}Q :â¾[¡gµ°ýô­-™4zÃzH‘Åv>©çždïß鞇Î9ôrèÕ‡°oð¤[ß‚æŒø?è9é ÌÿmT&‘M€m¦ ŽºúÒÁþ²Q¸égNŸÍ±96<Ïozòi§A7¥w½Ø¸íò©œà¥ù� -’éñ®Øâj×E�F�*ñ¸ò»¿ÂÜTñNËXK/{|7>x Z¯=öûÞ�I|]rwChLsö²/ٺ̥zý‡A¯ïWÛÚPÆ_H¿øÈÏÐbc¥“ûŸý߯Œ xô™©Ðc‡@[ò›b]b¢éÿ®¸V(@31 õ›6E²UƒðzñJåÖ499HîŒÒPú§W^‡NÎl½î>Û˜‡n*ReY(s>²ßžø4ë Òè‘\‰«YÖ®¶å…òy�ÒÒRFD@`+òsKÇqlÛ^ �È&þÛ(²IèìE@D@D@D@D@D@D ì®Sâ€AL[‹sY° SîY™þ®›Jù�ßéЫØsúåôŸ?Óï×ãðâ/Ü3ÚØAÇÓ¦@ C�̧—i…ñÛ7ïPi»…&”· éO_þ šaBÜô95®Gïý·?M¿Ž¾ý@p ôµ¯¡âSÒ¢�Ú¾ìŒáþën᮪í5ª%´q2c ÍdÖî:ÌoTŸ·Gjr{è '·Òí²ˆ$Àïþš©OC/�ÈgE©§€#º?ãÞ9zÚ/³¡O-È…^~Ê!ІæËØð=ÒŸÿÍü6Ã@{ð‘S�ÑóíöÐãí«Ä÷/È’•Ÿ‘ÞJl†òC‡ñ™×ÜŒÛï°˜nTc1ôù[^…zϸznûDhç“øL«×ˆ•.jE63¡$·jŠœò,¶�Ò©c Ô8ΡT>¯l—|‰­ÜŒ}èwÎ1ÐÏGO�>?�÷Bb[C<»”˜ð dT•nÆ‘~|é)è˜i|ˆ¸n8´½¢sBº +Ø€ÌéÏó©<)�OÚQ7mho„TEƣ䦮‚þ1ƒcOü´„÷C´ñókÖ �‰€ˆ€ˆ€ì2Eì2:m(" " " " " " û�J¸˜ö¿“Ú•çÏù ›]o´2ÛGÑ©S†ùW.@î/iô¦~ �øcèͽégó: ¡[6г´~==EK°¯ìÌè[åh½þQz�Äf@zöIèû 'AÇ÷ èÙ×éK:¨ôØn?@—¯b_P·Å1Îè.舖¶³‰uXüîÝÐÑk EæßÌÞËýºº×9Ð~�M{‹ï`ô>%u¡ßò´:¬ó¦Õk¡é< ‡UrtfÉD ¸[Ó_=æ2ÎÁ‘dñ[9ÿ½G Œ€9ë@úžÚúî-“¡÷¿×zÏP~Ë>›0 ú{2÷ðРÆP>÷ÿÏÔO «¼ü>þ—±|6 Ž5ó ,\ÊZ2¸3tÝ—Óþ…}¡ç÷n=´Mô¦qÏCï½zÒÀþÐŽø8Á-ó¡ï½Á؇¤SO‡ö¯_)77JVlžÆ}PàœAB?ñç@sr�切ÆGW† bŠnµ~ùrè¢ló”CŠFJ«ÌSÚ,þ—˜Q`æ¿Ë§ñ�ŸsŸ}þ7 :ªŸºáûÅ¢1zòƒÙôä9‘q[ýÈçöÐù¼ܸìkÌKÃÚ¥ÿü �5“[«ƒaáãŒAX~8#¿ŽíÛšÇW‡C³�‚LD@D@D`W ”õfW÷¥íD@D@D@D@D@D@D@ª9E] è£.Fêí«éå‹+×ád¼s¯Þ‚2×­+Ú0ì½7 ~˜]Á‚ËÜ_û ú{öt�}+}kS Ðøûù¯ 5ƒžzöh§æ�¡%B°1ÿtvôþZM¡õ·~õ›ñ¡Ý¹+‘ž¹¤6ôì³8÷¬‰[ /_;’ŠOI #  �Û.Ž= zËù]¡5íóµj Ýù„.Зï¹:ú‚Û ã³&+>§WêÞŸX4©}S6£�K&‘FÀŠKÂ)7mÖZ×ɱ²j˜UºÏ‹,º-Ǻ¿î´EÐÑï< ½b¿;òZBÿïþc¡m$ôŸÆoÙ ÿ»zU·J|ãKQrâåC¿Ã§| n˜�•/�ÿš8òhËŸø„ù¢Ÿ�çõií|ÆEÐ+WÜ}ì±Ï¡mîåí¼ òÇDS—ü}îݶÐîWòyRÃ~ž µËfÆ)èzÁÿa]œd\0ºÁD$ÄTúþ5ØêÍqRñ)Ë||0ÿ—™qZŽr×5�ƒöîÅ(�¨á‚·ïŠv 3¡/Þ>º9·ôô›ÿ½ {M¨¹Wð7Ü °°à=^µ«ÞO‡&µåU8mi÷éÁ(€&‰|Y[!®�þ%Ä‘ó9#ñ²T`ŒÑ°#8*(¤U" " " H ¬ß$ˆA§," " " " " " ‘A€NÙ!Üøöóî zéIïÐLëè%>z¥2ƒ­˜~Ž>ŸKìAºî ¦/ý¡ tè`úØë—h–¡§qÁ§�BG– ·ŸÆÌÙ¶¸àE:"�p°·êÙco†žÙÂî©DzédÎÈ}ãH‘Å´ŒÔØ;XCãl+^᤟³Ûqƒ «Í˜çߨk¬(æ_LŸä¤‹í,©ˆ@…Œ¹ÉᇣP¯ÏÞ�ÎXÏòqéi¯iæ™Y8ø=¬Èè+þb<£�~¨ütW0FŸ-Ëø:7ŠÏŸ»»Ö€®`p@IóЛ=ð¢S K>àSÈ2SžÖÐ }í |ò é× êŸ8úåñLŸÞÔ~þ YdÙë–!5w^.Ô~È…2Ö"mwÒoTTjÇ?–yäÀÓåG?v ô¸%¯È)m|b–oÎôÌä%-iþl,¯žÏgò´O~…þ“Ê3�i$ô®+އžìƒ–­½XÛf¯úñIÞ*™qe¼ž-Ž’ÐóÒ[¡O^ ý'•Qíš3ßæ^˜ÊpµÍѼv bxÖž8îó¿Ï…d" " " C@¿ "æRëDE@D@D@D@D@D@D L—ƒ°ì4Óoóû×>Ɔ«úž=9ö=èÌuô_uÙ¨oá$èé—Nƒnb@À6[ŒÔ™'¾½m9fÈ•Hxi;h›áì¥ÿæ‰ÜÀÿïgЫŸ ¯éÂûè£ëjFÏvºV#ýþœEÐ` õûíпå”8rl¿Th=x—Œþº˜•eóîDî€gw\uÄ…ÈzûÚP{êñKhY\…¿³¿ùð©áÕ+‹ ~ž �5õ;è”ߘÓu ô†Þluýî­¯¡7ޤߏûÀÞÐ�=;@»¶m­Uºe–¾â=;F@(�¾ë÷>¤ß¸Ñ±ì÷Þ%޾ä5Æ¡ì/` B¡qŽ»MuÜ èÉNî0>,6Ï^]ºÌ�»¶´ßäg Sf.…žØ´%”pw´ac"®�ÆåfÅb±c‰,.„ÌC«hZ’@&rþž½„ù)ŒWªËÃþ‡YµZ¡Äð3ëBŠ-ßÿ»)±:THÏÿ¦5ö¹¯DzÑ"Öê�_ÿ†ÎÛÄ£4êÁkzåÝG@�èHŸ|léKŠÜ²ÌY« ²ùܯÀŒÂØüïOÐçžç½ô‡÷èm÷œ í•ÈЯ)/¾}bU3è¹—œ =¡[±È—‰€ˆ€ˆ€D2�JÿH‰dH:w8PÈQ°'®¤ñkÕoÑûºèˆÖÐ8ºjŠÌ2Ž-Wó£±<áYzŠ‚!zÉ6Î|zËïô޽šÛÖ1Í2V4Gé7Î9‡;‘ýöë'äBÿüì_hFNôå‰)ДkèkC¯£+Äü7o»žŠOI Ÿ5À^ãlH?Þm�šþ½áA!îmÆc/Bgu¹z]_ŽzÞbdE³Wêr³aO2ØŸ¸[ƒê޹¬4©ÈÙ̯PîߟBo¾�þaý6ÐSFótjo~[ÌWz`Ï®Hû1K¾ö õ¾ió¡W>< :$õ-èI·ÍÁg›Ýy’m[¬dâõûPp ÝÃwÊqЧMNgoÿ¨Ö䌣›C}Næ´êħMΤ'¡C>ƒ”oŸõ�¹Ú±6ýÿI§öeNöl†?OÌ“£ùÙ×!ÿÙÓÈÁ~²!Q¶,Gþ›×�‡¾¸4°½Œ3飮æóªaøÃh{‰)g�öX>þÿÙ»ð(ª¶�ã»éHèBG¤‰X@Q|±ìTP_ úY_ì ÅŽ½7ì¨Ø°SDQ¤XBï„@zÛï~flHÙ° »Ùÿ¹.n&³³S~³›sΜ9¾ÄÌíð™ñâYv¾g;'2ÝZøWÚ>¶ˆÝ¶§yÿN֜뮷3ð{¶sx^ûèlÔ®£²ï�Ç(O9ÈZæû´³ý´×‚X|›µ²ù“�3ïMÓôô´ºÊÇ�«|ê8ûwئøI Í5=ôúÿS¶ûú}åÃ÷Þ¡ü¢¯�÷Qç¢Ü«Á¶ãÒ�@ˆX� |¥ŠX@@@�'䦋ðõÉž2A;Ì”ŠAÂÿ%í¦ÕNGgéT­X»RÉâ�·–¢fÍ,u¯«þxëÙÝ¿Ñ 6§ió&Ê’O Ð -h}R¿|Eyß ”—Œµ{z³Þ|^yÃ}¶±ûÇX;ωW¬œu÷ e³ç+ûÿüœòñtkù¿åœ}”uŠ[/5éñÆ×S¶N±,QŠìXþpÆš®ÝÈÚ—Úµmª¤Æ¨„?Dœ€ýh>ÐÚ`égí±)­’•ö¿eKñ5?F“ÿ×ÄÚÞ;훢¬ïÿ²³XT]»|àvÃý�Ç®TÎþÛúíÑÊ�ir¬ò…gÿ£´kDKt‚VVÏi Žmk¯Qcý/aöj÷3oP¾zàåò�våÉsFñ߯s%ˆO²ëU»veHr. ÉGÓtWýÙVìÚÒ÷œ‹•í++t ‰3Ÿ¡£/SvÝX ôùì}µ·VvjeòZ�–ÛiqžìP´ø+-øÈG™Ê† ìœ6b †vÞvòâR¬µÿœóMiS;³Û·T6O²eü.«ú© ŠÓã¬iÓúZu—cíÚ>âI mR9ß1v]?[ù@+aâT;ñõj;§_S@@ ˆß©ÀD@@@�Ð𦦦j/SR¬•#òJ¡yÞK7*ÿ»ÈÚÇn9¥‹²øvKMm_¬íîßOŸQ>Ux²òÕk­¥¨äc­m™¿Þº]yÕJë#ðú¹Ö®õÈÏ*¿°!ŸwV¢ìNÝsï½F¹ç÷*ÿï«ZÊ㮼Py^{5:ó_å{�¿¥ü9ËZìÍZ£l{ªµ¿Ý|²µÕÍúGùö}�+Ÿ_··rÌM')ß³v¿k>µ»‚w©ÄÚ¿™ËÆ]«<¡uÐZévi—xsøäæVæ_`|||ø"{ZM>÷1NÛ|ñ³ªiËl@Ø�•ûF½jÕ*í4¿¿íÎ3Ƕ@@@¨f�ï`méëæþ¤ü9§ƒòÐ^Í”vï~ÙÅ–Oûë7åÜ»G´ïžM”q%nµ«¦Ùø\:º!@IDATÒï¥÷Tž7Ø–I_¹Q™c+Øi±;9ë4±ûoãÿªœ_×FÀîÝÜÚBKlÊy¦÷꩟iþwqý”ÇîÛHé¿?¾¬%š3ùcëÐnèAÊ–K•+2*´+Z²üb÷Ç6hm�h¦-Ÿ‰Wʨ\ý%=ÊÄd& € €@ Tî5="🠇Œ € € éÞ# ÒO?Ç�Àî¨\ý%=v×ùb» € €¡&P¹oÔôµóÈþ € € € På XåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• PPåÄl@@@�Р" tÎ{‚ € € €@• ÄTùØ Pƒ|>ŸŽ¦°°PYTT¤tçÔ CäP@@м^¯¦¢¢¬=::ZéÎ)~9lÿ¢G@Øž:v@@@�Àè¸ï@�ˆ(((Ðq»}"€ƒF@"NÀ¿7¨û=ÐíÞ¿JÓ# âþ)sÀ € € €‘,ÞÕ‘|æ8v¨6�üü|mË Ú6ʆ@@BPÀíàöˆ�� Á=¬È.Ñ# "J,ƒ € € €@  G@ 9‘T…€;.}ªÂ–u"€ €á+à~?t¿+†ãxôß{ì9 € € € Ð# `2Þ€‘ à?Bl$/Lj € ¨€ÿs¼^o oß�ËÓ#`7â³i@@@ª[ 4zmÐqÏÿæå û)OÚ¿…2µ>­§¨Hቊ ±šÜUÚ«ŸßG¹°ãYÊÓ{%+Cl/µG"QÀ­ß�Ä#ç˜@@p¿7†×HÁø];#–E@@@�Ý(=<é"øõÉK”WݧìÕïle‡h…ô—+&ž×GyÒ‹+mN¥¶–m2èå›oÞ¬Ø8dê>b µ?˧<¬õd¦²ã×*û%mß'À—6Yó¯ÞûåCËe•ä�šûø�_(/Ù³œÓZð‹^½wŸƒ”×ÍËR·¤Üð�V8wìÁÊÄí"¸›bmT¹O ¨rb6€ €Ô�püÞ2¿׈ € € €!.PNÓq5ïuTkmpßC{( oþD9mé™Êm�zŠ¨ÆštÛ7Ê?ÇØ=ÿžÂ ŦìZʤ:n·›í–¢ôÙšxéÆQÊGfuQž{å9Ê~�Ê®õ(˜û„^=lÀ¥Êo¬kBPJC­eÈÓ?(']¸‡rû½´Y-ÿy¥²÷ ±Êq�¬|ùŒvʲNŒ� Ðûò»”7jc(¸�î9s^Öô÷­WV¼´ý¾þ~ÌþÊD¯©füx§ò á¿+GòºòìNÎ^û6kú{§�ÄBë[1é…Ó”íÝCÊ�©éª|C(Ô÷©5åh8@@�ªÇï�eÿn\UB¬@@@v«@Y Ï»a‡l7Ú÷9\Ù1÷Iå¬E•§·m ôzâ” R:[úìÎö¹Ïž«<}¼ÝcêU#•gÓ_Ùpù$å¸Û­ÕzÂæ£•MúŸòÜ~M”±ú³£bmø‡_¯rDŸzÊ7¹ç/Ôœ·¯£üzÀmÊÏì®´> %‹/mšfùg¢ŸRÞwçQÊÇXß�ät»›½ýëS0åå“”{Õ¯øZ¿ƒ¶û©<þئÊu$¹ÖÎ?Ï:x¦v>Pyôñƒ”¥ø÷­°VúI7Y�€úS²d}oO.èv�õSX\ò%ûéŠá~ó¬wÀÈ�~UŽëž¦\“g{Ø8¹Ž²DoýxY|ç@½©Î�e¿ó¢nævQ/ž§y�c,K—”Ò³˜ƒ € € b%~Û ±}cw@@@@ Èo0ò†ÝÕùr–iâ·é)Ó­)½¸,[b÷¢·ë½¯2%±@¹iõjezž»�Ýïß~ðeÊGz¤üèÉ»•÷¼bíçs~ø\ùõ »‡?©›�´å´ '4h®éƉνîšÚ%a¯ ´ÙI³‡)‹v²VGS§E’rãŒÊs»(¯ë`cT²þ&ÚL.þ6Uy®Ÿ¶~Ü®äÿ6^s=îåÏLQÞ1دa»KþèŒ P{×»+”\+?!€ € €Q ’¿QqX € € €T›ÀnîàÙ4K‡úÌiÇ(_¹í¨a÷ÿÿa/›U´Jñé{+O}e�ÍÙq™ù¼^}„“ÅKÚýöWMž­¼ÿp徬Fë<Í_2ó å¤èR#,Ðü9 Oö_S•ŸMÊTÚˆ%‹oý/š±ÔV¦ø·/QõZkVG§3ÀÒõ¹š.«aÞö.:Éú/¤ÄÏSŽäUev¿Û”wöú�-›`Oˆ÷lRþûÇLåÏö”�¬ÄNʻۢ|¶ëë—Y¯ŠŒ�tE°=Ú¼n�-é±5ׯmµEÙYö¼†�”,ÛʆXÓnX«,ã�¼Ÿ—¨á³Rm“§¿\¢Ü�iÿOw½ÔO´ÿ¡ NQölk}©( € €@¤ ¤9¿©-Xo¿ƒ,ßl™áüFæ:Ô±ÁÖ<-ëÚo:]ZÖO°9‘\èÉgŸcG@@ˆ8�ÝÜ#ÀÛäh‘?挴ÿèúÉšþï~g+Ÿv¨²“ÛøíׂÝäÌ74æ‹§([;•¾4{×Õ{Û»–ß=Mùúí”n GÁÜ'4}Ø€rÇ×kÛÊzM~6ö,Ëm3Ëššx£æž2±¬—¶Í³;ù‡lûqë”Õ?­þüzå€Ó^W–ÕÃÁú´ºä6åµ¹Öà–©�•£?:]Ù=^Q¢ÄuªŸ¯:a’òžËÌí1�=õ ÷˜7•“� … 5ýʰƒ”£§§++^î;ζ~_EÞPÛzm<ô£õ˜Ýc7ÿÓªÈþ² Õ,ðÔ—‹µÅ£º[ÿ�=›[Ÿ ]/sVX·»æ'/°q@B®Ù‘®ýÛú7MOµ~F ¶«J=«¬§ € €•(´_­<Ó—ÛWŠùN_Ÿ3§ôêÜþi9¶äÜu–ÝÙ¢}[XFGäwzèÔS@@@ˆ�i¶µFÿ•ß¼¥|}“µ£�ÔNYÆÎe[KÚºµk• n�€�Ö¾�UhwÛælÚ \³¶ŽÒ½?¿0Í–Ïן�—æZdÄû6fÁÇZ‹z‰:’\ëk0¶kå3'­œ}× eR©Ú£¢ÖUà‚Þ)WèÏöÅÖÚæÔ×”«�Üþõ-?ç.zY“†gØÃO+¯: ìÑ ¼I=õêEÏýd©?e–˜½5{Ô´�–e.°u¦/M“Ÿ_më<}Þ Êï?¡ìZÆÉÐl  �–i׺.Mó”µãÊ©²`}¶èMí ÷ê [óœ•vIj]ÏÖœ\KP±«èüWoS^ý¾]9+¾ ýÏÔòÏ_i}‚êyí}›�±TÞûòMÿ6ûoå´8eçþ+Û¤¬RÞë»Ê_ʽ@ÛE§ÏÅc”·j}¬J\“õ3@"UÀí 0ùoûæ³"£Ô¯d;dq{ Ì]kïÚèŒ,0¤½}{‰ l5;ÜF8¼È7«p8Kì# € € €A�vÞ‚t8_¼ö±2úø ʃ[Z…Œ[[ã_5³f¢µNïë¤&¶/—Z{Ô‡—n?[wÜkV¿Ò³Ý9>kI+p¦£«¼"Èj›r7,Uîø©Qµ¬MþÄ‹mÌ‚ì©Êï&Yî¤ø¬'D§çBߎö샲N°ï’7¬¯O¹ãèEëaÐ-¶Ü~¶H»;3Z«]Ÿ²6fËP@ÀO 'ß®j1AºÚä8WKgýyÎ…lIšÍÙ«–]m*Wâ÷:\o¼á${òˆ�YRv±+Iêç/*ŸµÉ­Å¶^+Þ.Þ†¶†}Û-S.Þs˜rì¥Ö;)aíÊ·b;*/¾ýTå~IŠ-¥ÈFlùúág•ó·Ìão@@`«€;.@ }Ü·G;Má…η÷ùÓWØ+ý[Vþ»ÓÖ £ z„ÑÉbW@@@ØUk´Ùí%wÞ§Ú‡—¿Z£\–~¬²ÙËÉÊ—8ãÞßÝMÓn©’§Øýº9ùÖ–žg*°ö¬ª*VÏT‘§t¾Áž,pÂë7+ïþ·â{c­w¯~_9ý¾Ã” v|0M¬ÇÁk?=¡<®E…k…|ö,ôonê¥úž‚‚ŒýÔÆû¨º’_¸«ëŽªßB«èÚÕÚóë”{ ±ÍDÍr>DVo¿Å˜Ö}5ë¬ÖVÙþ÷Dcå} dñÆëçz�ìþÿ¦þ�(²w%Å—»á’ká'@ˆ wü÷•;ìÁíí÷¾M¹öî©KíûÌ<ç9{4´ßÔê'ØüH(þÝ/08F@@@jºÀnï`õ.ùÉ(oÿäGåm›g(ÇŸ}«ry›æÊúþ•™vï芥v�}ñÒ×ir³óÔ€Ìõ+5½t©”û¦ÂU6¾SÝ£¿Ë.¾|{}“Çú,þy²òÜRÃm,Ðü?�Q%³Ù~~ò¡�ª]j9�oÃÏš¿ÄVVæýù¶_yj€½_åæϰ^Oîa£'|þ¿�Êú%šÊì¶àÅož¯<à¢9ʳ�߯Ô2šQVÉøDs¯jmwcø·`íuÙë6Øí¡à¨�À›£ìy·üº´Äã-³kÀßv}ÈXc7Û­É´ZöeìÁE›íZýoª]½“òìiW  € ˆÀŸëí”;–\ ï³e{4·ßÅZ׳|{Ž3´’Í.^ÛgÍûEÌHîïË� € € €5] €Vડ°�:)6Bþþ)¶…üß­E}Ynså¡ûvPÆxœ–gM©}齑Êýœtf”ŒQôó¤Q%gÚO­ô§éÙN‹Ô¦õvëjV–�PðîM§Y–±¤ß¬woÒ§íd!»ëuˆß›¶LZûØß/ÚèÙý†ÛíõÖÃaûb÷ùï}ÿÊ_®î®x¬Ý�Õw+_f­÷—ïc˸퉾uS4ýè�ï( ‡>­<³_Ý­¯jbG%ù½:nÊ3Ê#ÀzCL³·ò�·¨�À)Ï®Ðr•]èºö©ì[ƒ÷>_®Ö5ïíG”·|ãtŽ*^÷‡úû¿¿D+÷>žââÍ›«¼ûÂ+-õgûbO}Ü~.?#€ €@$ ¬Ø\™>•-êÚ»ökmßC>[d¿‘¥çlß7Ñ}‚@äôY¤G@$ÿ?âØ@@@"N`·÷ð·;K—ýawà/j|”òÖ=Ývï [ öSl‹i«þUf7?GùöŒç”'µ*U?’;MóÇvµ^Ïœüµrö]ƒ”I¥*¤ŠVLÔü z_¤tH©¿Ë)­l™&^¢ìï,S¸P½vî…ÊÏœO¬þnìÊ+žª¼ã¦§”û¿4ZÙ;q¹òÓ{þO9aù@åm/Øhm+~VÓ'iùŽ=@ù€mª‚Å©E[ºÖ–à]\9‹!PÃþï?i:Â:ñvýÙõ’‘k×+÷Iû¶Þ¾n»rë/Ú¸Ro\¸ÀúÕ*u•Û²NÛÿ×lùqËß^;¥ïÈ{•ŸŽX¤|îr{.ÉûMìªþø-‡([ù²”뎴«¨�P²ånÔŒ%«mn»nõ”¥®Èö@"P £ôWG!ÚùÆRXê«Pbœ½0¤“ý‚4k…}{IM+û;XykvV_ƒïW5ð¤rH € € €”'Pñ¶ãòÖ¼ù…©Z×ï«l0ì e÷ÉÒ¥êuôÒŠÏDÒçu*…|VßãÖùxÝ9þïôeê§¥ ÿPf7¡Li\�5#±Í´ÅŽ{Û=½û$(<žÛçoJ=ŠÀ›d=FŽ»QùÃÐÛ”ÞÔ@ys{»çöŠÇmî�÷Ùèô¨£tŽ\W $©…îü€1*`Å"I !Ö.jµã»´½úéžzW‡ÖÖ›`¿îÛúm[�ÿ“v¥w@îìÉÚÊ�Njb§%Á.Qe”‚%Ö#`æF»çoøRùê4æšþ‰ÊØh«ÒO[c#¥¬Z½F™º`žò»iÿ(—{:+¯¼×zN5³ @(C ÊùågXw§Í¥}ëX°ÎÒ�?¤£� °.˾/ÍXfýšË+üUÞ*Âj~5þÞV.ì, € € €5R „zä/üBÄo|c-EÇ\b­FÅwàokîÚé)°E7|~µ²Ï )Û�¨žÚÝÏW^Þ±TkyÎÍŸñ•�AÐô0™¿cœ"‹ÕOÕës¹ò‘q6ÎöЋ†+OÈJVö¾òeåø ­gAb¤Udé˜)Ô�ekìžü¼|«·nßÒî“wËÇ?tÔDê ûÿ¾w/de¦u"jž˜£¬ŠRë áZí‹—õPÖ)÷ªbuêó_½My£s?¿&üŠ=/`ÁÔ™Ê%Nå»7ÆæL{ÕúüÚÙ®ð¿ßö‚rŠÇŽºN¡ïr_[åñ§ž¦Ü«]Ke»$@(¨ãŒP–æ×´ïvŽœåôÔÞ¾Gå9¯¶r~™¬ãü~÷ÖÕhÇ¿VºKF4="ç\s¤ € € €xB¢G@Ášt*¸ÎZ–¾YŸ®œyë-ÊnÉ7*OïÕD9øß)¿ó4R6ñk¡ò&¨97Íœ­,J´;çx¯U~þó…J_œõhÔ¢…²am«ÚR¬>hó,›ÿ�6*õЛ¬EÝ”@!Vlo³–ÍP~ýÓ_ÊMÅûgwØ®�ozßüÚ[9¬ose‚Ÿ�~ÜQI·Q®ùOå�ü[°»n2V®µ5»£ØvIÀí 0þMë�tÖ16vI^¶Uzÿð[+å'ü®ÌöÙï&µs•¡\ŠÖþ¢Ý{÷»†Êô}þÞ;@y^¼�n°¹¨£òüGï²tjçW}>^Ó—MÛKyä�¾Ê¦TSK�‚ €%Z%ÙoFi9ÛÿÂ㎠ëüÂ7¤“ó—-èywžõȱØIiU×yÃN–ª9/óU«æœKŽ@@@�� Ð ¼ÓuUf�¼T½ë½ÏW>Tt�ò‹E‡(×¼~›òšÁÖ‚ôÖW)GgÓÝÛÙ 雕…µlxý„X»í£vÝÚÊìì4åêlk+‹qîÉÊ´‘¨ÿù}±ò�Ìleb—ƒ”}šÙS²?~ÒFÚ_ÔÁÙúA�5½}Í’f•[¬Æ¨¨À*—ŠÑövÝBkíÿñS{†Â÷?¯œ;PyÅÓÖ?â¸F³”n¹]yñ!o*_9´ò¼c)÷ïccŒ·NrNqA†¦×®±žùÎSV§ÙÝÅ…u+oxþ~åÐf®ò™ÿwÙ{OùØÖ¹v…µò­p6å�·MÚQTx�Z–‚@¤ ¸ã¸}ž{ßú(ÅFYï›s‡ý¦ÜäüêÓØ®rÑÞ®±öY¯®Ÿ^ÿD¹ìÀÓ•#k¿§ü~•õç:ø»:Å/ü@yÖåß(ו8”4gø)•n©}ÄÅšxóü=”Φx>!€ €@d ti`_æ®õ*ý�TŒ1gµ}wŠs~ s{¬É,ñU£x¹’¹ÏèÒpçK–|_xÿÄojá}þØ{@@@ØÍM,˧jw?øÂê#Ξp¶²G»§Ôû¯({bíH/LxRyå�ÿ*ÿÍÊRV²49Yo|eÚ!ÊöSUÞ>Ѻ ãl·_ñ# 4£‚ÅúüùÌÑʃ.™¬\ï÷¾Ú͇è§;öi®,·®¥ÕEzõ…‰—({Ä+¶«ÇÚðý½Ê>=­/À†Æ•§�|^y÷ðc•½šÙ¼¡ÏþG*O{Ë^}öi{×yãoT6=ïEå·OŸ¤l¹ÆöðºÞ6ýüJE‰ra/ëMPÙr·ÞxdŠ¥[R®ûZ³ï²v¿€Q‹×Á_D®À¾×èà£Oœ¥ügS¢r£SMÝ«ñFMÇ9}4ºÅk½�š¶·‘G†è¤L´KBqñz­þ>ºÝ¡Êû±~^EN¥µß¿¬é[ëf9ÒÞÛØ¹tzì±;ì[¥×) € )õìH»5²Öû9N¿€ÒGþë û}ªâeÏÆ¶¶ä¿‘UüÝáºd¹¿¥†ë±ß € € € P¾ÀnîÓÎÚ¨ïzÞîÏÏèïôp÷ÕiSj=à ýtÓ»ËôúñÖJ¶r�µ‰edfZfd(³r­¾'Ê) 6ÖZøãâ,c�AbÝig~l¬ó�–Ö¶”Øb”ò±gŽPv<©½-¯?;(±ôâ /LQTe-¯½£óÑÿS¾Ðr¤Òçµ5Ç×µciÙÑ–éÚÒ¶hí_ÛŠÕ¼4?üNåWûZuVÊžm•õJUÈøÚÝ ùÏ´½RÙå }•mÝ»ý5U²DÕµ};ôü±–ç\£L�õ³rUë/ÐÚvÊãiq¢â¹V×õœýLA�Ý P?Ñþ«ÿ¹Ê®Ý[äí`:µ´>FMÛî5Ä볡G²òJ^Q<žùÎÚ$ºÿÕw°Ê^Êþî-=컊¾%¡¿ÿ’vt‡eé\ÙþñÑ™öÆ×ÕßM›YºÏôõ&Ûh/QÅóí*ÊS̆‚ €e ôma¿×l´AÏ<Ë6oÿí¨¬w”=Ï}AŸæ¶¶H+¥~�4Ž@@@�H𦦦êxSRR"é¨9VØÍ¹¹¹•؃øøê»y«r{¸ãƒúm±=qã©/+7dv÷ZykvûÝ×®áÍê»mì¶ì¾­­Û¶ó_½MyÃßûYžÔIiwü—]lÿS?QùlÑ Êç®ì­¬W¢RÞ–ù{âÝÊëVY�϶­<~©½ëk§_;*Q ôêYwظ'§w f¯‡m”×@@ ܧÌXa_>æ­³,ý�ÒÇá>#ÀÀí àÎ)½d sªó›ª»o•û¾ºjÕ*½��ž_–G@@@ ŒèÆ'�]G |*WY�õ¬•ÛÊŸ‘9+­Þ:Ï?äçŒýÒ=à»Ý¬ÁºyÓ”¿æ¶WìÙTi÷î—]lù�ÏVÎËi¡ìÝÍîí�³ÃÚZ¬GÀê“”¤ï­<ç[fÓªteN…º,X/€:�›(ëW_wm�‚ €á$�æô4\¸Á¾ˆ,Ûd™‘¿mÿëØFwD€. ì+ˆûô�mKcª:¿©ºû[¹ï«ôÆÙf € € €„•=Âêt±³Ô�ÊÕ_Vg=kåö°âç'=Û–]º1˜ýܾmê[=w’=–„‚ € PMÕùMÕ=¤Ê}_¥G@5ýƒ`3 € € €„Ž€s/ièì{‚D†@r-;ÎäZºQ>2H8J@@�jà©ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@*Bá,° € € €T“ÕÍf@@@�˜PØ ö5�øøøPÛ%ö@@� Ð# (Œ¬@@@�ð G@xœ'öªY 77·š·Èæ@@ÂW ¼ú“Ò# |ÿ¥±ç € € €,@E@Àd¼@@@�ð " |Ï{Ž € € €@ÀTLÆ@@@_*Â÷ܱç € € €,@E@Àd¼@@@�ð " |Ï{Ž € € €@ÀTLÆ@@@_*Â÷ܱç € € €,@E@Àd¼@@@�ð " |Ï{Ž € € €@ÀTLÆ@@@_*Â÷ܱç € € €,@E@Àd¼@@@�ð " |Ï{Ž € € €@ÀTLÆ@@@_*Â÷ܱç € € €,@E@Àd¼@@@�ð " |Ï{Ž € € €@À1¿ƒ7 €T™Àª�yZ÷Ío/RnÊ.TÖŽ³Û;Ní¤l^/^IA@@`Wè°+z¼@@@�0ˆØE:Qëæ|¯ü1wOåѽ)£|Êœ¬\e�O±ƒb/GÅÕQÖŽÛÁb¼„ ðñ¬5ZºK“lå‘Ý3•“æ$*?þe­òÂC[)) € €þi9öÓ‚õ^åòÍ–Öɲ¸Ôq~_kY×~ƒëÒв~–×"õozDê™ç¸@@@"R b{ØÙÎ]2C9aªM÷ëy°²Yþ|å“ç=®üÐävP¬¥éá*ŸÙCYÏ*ž<¾Ü4åâ¥éJ¿J({©Å֙ܢ�²ií ,Î" ¶ÿj-ÿ‹VZ›—–u•3ò•?þ¹Ayõ`›_¿¶�ðŸ=3”÷~a×oT´²Y½X墕›•Ý[%)Û»¡²²Åé!5ïG½}Zn7åО¶¶-=¤ìJV¡RñÖs¡¶íZ_öR­ý‹WSÖv”²O²sñu¶éËÛ¤¿—¯p®ÀVÝ¿µØ2‰�[(›ÖÙ¾ÜWdÎ…%–ßúÆ MD9ç%jÛŽTè],„ €»"à~vO_nÀó�¾¾r>ÍÝþi9¶äÜu–ÝÙ¢}[XFGä'øö߇AA@@@�š*±=¬¤Ùž{)Û¼ø»ò� ÙœF6gô›�*OŸþ®òé©vûHÿÃöU¶Ï¶6¨—&|¥\ÞýDå çoë  U|kf*¼ÎÞ;Çš÷)^kÙ;ãî;•çwµv? Ô<�9K­…âôÕÊA]lzNªµöÇDY�ômNã:ÖFí–†‰ÖbÅ  Ê) ¬}~mšU\·L¶é×~t–O¶[ßz¤Xςʕ¼%¿è�Ï[7)OŸ}T6Í_ |æ’ ÊIè!ÕäÐáZò‘‹öVº�ô¾Ü�š^²ÜÚçóË©¡×Ke¯]¥“šµV6ñë!å�·ëdíŒéÊç'Yÿ…î§uPÖrêò}ë~Õô#cÞWþaC¾l-æóŸëoW^ÑËï¦@ŸØÏOÜ¢¼åó ¼Øš¿ö6åè>µ”Ù¨8ï@@`ܾ“ÿ¶OÝ�}öº½段wmtFÒÞ¾¦DZÏ>zìÂ?@ÞŠ € € €@¸ Dl�;QÑ­û+o¸w?eã†þ5IÖß «½:xÕå›÷Ý¥œm�vžöÇ\¢¼ÿ<{ր߭©öÒ¶k¯ÞðôHå`wÍEÖú÷áM¶žï¼AyÏM”Å51¹hzÜ9¯() P³^øÖîrÒÕZòuq›Ú-ó�NSZó÷‹Ó-7:/6ªcµÔýÛÚ¨gôµÖuÿ«U|¬½úâ·Ë•-Oèªlì,¯‰ »5ífW­V¯ÍQÎI;Àæ4´9—½ô€ò”Ÿ?P>;ÝÚÒûb=¡ÚåØUëÕç¿Q®ìv¬òšs¶õÐ�*¾µNûü�jz^‰öyçå‡×z7œrû­Êá{Ø59?ÓîÿÏÌ·£ï´Ÿí[ìO+•ËÒ+ÇXË|mŸõž(Š·=¼iÂpåþµMû­kS®ÒŸ²‹­³Ý©W)ÇŸh}Ö~>^yùœý•®ì­¬»x²rÔ­ö1pþ„S•=£R•¯ŽzB¹F( € P]î¸�öp÷.Úù¬Ð¾2?_`ú ›îßÒ¾SEN¡G@äœkŽ@@@Oö°šž´ïžTžqÿleŽÓ*ßâÄÑš~îä,å£çØ«ç(Ê(ð¨æoÍcoƒC”?3LÙ=-Í€‚� èÒPoøý_»Ä¸=ò ­Eúñïê+£¢•‡÷l¦LJŒW¦m¶%¿žmmþsVÙôˆÖ.íÞÉöç*k¥ïÙÎÖ¹ÔéµgÍçžd»]=€ݪŸ–¾vl_e£þ}luõ÷°WYý�ò�q÷+çltZÑ�¼@Ówžm=Êí!g¯^óØå!îš‹¬}Òí¶ž÷¿F9öpkÕ/®™Î�«éGG¼¡ÜRlÀ•9¯�UÞð¹ÿ�üÓ5犩ï(cÚ¡¼ÿü\åzǰŽáU°Øç¿o<¨<ʳž4ç´©¯l·–NŸæ7Çz"î÷3“ € Puîøÿî3*·•Áíí»Í&ûÊà™ºÔ:dÎsž#°GCû>P?ÁæGB¡G@$œeŽ@@@�b�lŶV¬¤}OV>ùÀÊnúTÙ¨Ge¬çO¥'Êڦξë:åÉí¬õiÆ·+ßN¹ByÏPk©+œý–òŒ'e•|kѺóÜK-K¿þÇ-š7øñR/¸O (5› P“Ù³�çÍŸV) ‹ìŠ4yžõˆ‰±<¶'¥×o€ÚñÖ´}Æ $åÛß/PNY`ýv¶œ¿Òjµ‡ô¶uºeEº­3¹–ÕjW¤lüÁž pîÃvÕr{H5;ή]O��­|bijÊÏlSe”>~JsOýØ^òÖ?XyÿÇ+»9½lnpJ¬VÓóÂ{•Ÿ^XÎ}¶‹ó^·VýŒ=­…¾�ûùæ3�(§Ò;ÊéDQ”oÃÅØËÑE¶£ÝÎú?åëg(J_¦�˜ðø˜/•ͯ²ëÿ mË®=�г=¤ € €@U ü¹Þ>ÙÝ‘ÿÝV�æö9ÞºžåÛs¶ _ä®m�³æý"f¤€²¿ÓjÊò € € € Ø#ÀÎKt»Ÿ¶y¡ÝPûWŒ�>}D'¿ÛI‹ÖjÎKcþk©?ÛŠµGã7Ë#`Ûë[§¢Ûirø˜aÊýêY­•§h½âÛÇ_TÎê9\9j€µà9¯yÿWŒï¯�ÞQ~}î9Êa]¬‡EñÚ¼ÖA¢÷ù¶ÿ/oV±6§ž…'¶ßpå»oÛê6-·g,Mw+¬) ÿõ•rì$;/^Þ_ÙÚÿ*eJ�ÛÚø2Mlƒ@¨r�Œü²7í|ð–ø†`K&ÆÙ C:Ù¯½³Vا|jÚ¶Ïzý¸µ”·æ­ Ô° ÿ/55ìÐ8@@@Ø^ R{ä¥JâÇ)k•Ù+'*/iwÃþß8kóq‹Û¶_Td5FîH’>ç/wNQ‘U7•Q›Th} òЬÁÚ%©Ê…Îø“î«3홫—)ýe�z[ZÀViÚ­œ ¬-Oo£ €@˜Œûd±öôÄžÖh¿vvW¿ÏÓ>.Æ®¹ùVÅ�g´H¶+Œ_ý¨’–eËÄ9Wî8gdþýÛ»÷¶Ûò§ÚúìÜ]À¸ývÕZüûeZ{»&eZËy¾ÓfîŽpæ×hΰ¶veûù©;•SF*ïüO3eáÖΓŠ¥D©v)z­£_©‰vÔ‰MZ*;th¬,®™Îµ­;úêïmÅ·éwý0¾Œ1ì}mZÛ¨++–Þ§üê)EÅ�¬¹G\}µòò>Ö·bK1�¿?yZyÇ¢NÊC»Ø3¼[ça}žÔé³,mÒ>6?ýd×ó“ï¥<ªµêb  € °œ‡y†uwÚüWÚ§ó‚u–îü!í+Ѻ,û¦4c™�P^±ï%‘TøîIg›cE@@ˆx�Hí×Q§þܧS›ö¬òÌwì¾ýöÉV3ò›óÔ€¯»JÓ/ê϶r·&�zaÛÏ¥ŸàsZÒÒr­ÁS7ÙSÊ(ÿLÐÌK¬#BÉâµ6¨3JÎã'¨1í›Ø]å±Ñé[�Èëµúé=[X;ÿìW+ûvi­¬eƒÜ—Q>þÕ–ÙËYÞ}¯»P|Œ­§e}ëMð�Ó ©m›“ìßìí.Z:ó¬ÁOßÙXÙ«>PŽý—òºûœ¦pM©ç‚Ó7Êí U¢‡T¡Õ¸Ïw–,…Vïžïö�Z¶DÓmp^wÆX�i{˜¹f¹òï¿ý{HÙ1n´{êX—òǰ 3í(>zø匮§)¯8ÀžãÖvç:wûßñ¢�ƒÐ¶…­µÜZÿûXŒs:]”·Œ¯ÀÚ¼^g5EA@�ê¨ã|GJókÚw:j{f9}µ·Ïè<çÕVIöI^ǾyÞšc½ÿì›GùÅ]²ü×kÚ+ô¨ig”ãA@@@`‘Ú# ˜ÄZáRü£¬×c ²E´Ý›ê‰j¢¸à¡[”§;O ˜öÈ š~½�Ý%ûàÑ-”E¿¿ª¼é.å÷ÚÚî9¶R\“û‡¦Ç�óŠ’‚5U`¯6v�ú;¿Ú�ö¿.µšéA�ìšst÷Íʾ² ²×kW…ö�š+ëÕ²šì|gÜ�µ1M¦-²Þ×fËÿµÆªÄ¿ýËnåÿk­M÷ïbcŒ8�ôžÔ öÞ}Zî¸î[‹¨ù»ƒâìñ*O˜ñ’ò¼÷ì*×.Éöä÷"ë)ðêMc,õgkùÞ–?Ñï¢Uú©¾,;º´\ë_ðìím}k‰‰ÔôãÖ¡dñÚ±œâ7Ï—nwé?4ò5åy~/xmÈþão«<åøîÊÉo.Sž²¯²s¼‰ýðÑ"e^Ïã”û7/¾îjºtIL骙`å-çÛø»^�ÿƒ­“‚ €Õ)Ð*ɾۤålßoÏÀ#iH'ëàvxwž}ãʱØIiU·ßšv²Žpz¹¼ï9át ì+ € € €TPÀ "·8wÆþ<Õê“ÕFë™·#�Âåzõ½ëmÄìÇÿ´›r®²¹Så¤Ö&M/^ð¯2ºíÊFÛWTi"Wà¸>Ö¨g[këžáÜ?á'þ’Ó”×fùÚL»óüŠç×+×µKôú »Ñ­I]Ë‘Û]îë3í¢3á§zÊÁ{Yß�ýºY¿€ä:Û†H°.«*_²È®`É{¨l^ÜCÊÆó~�õ8¥]®rÆã·)ßj;JyÏPÛzÑo*O{T±µX�zFšQ^§c•þ7HÙÊ­|.Z£éI·ß¯üqëi5öpÛJqÍtî\M?:â e%¶“f^rû©Êþu­§Õ'w½¬ÌuîúOÞ÷PMŸøÑxåcmÉÑ­§*ŸúÙÖêØžÊFåV€Û>o˜:IyÏœ~8æh™5¶Î�úCA@�êè⌂4w­ý¢åŽà¿å9«í{”ûd%·ÀgL"ÿeJO»ÏèÒо DN)÷ Qäp¤ € € €DŽÀ=j2ƒµÞ/ýf²ò“ÕÖζÏbk—ËìÒMyñÓ•Q‰N-‰×ZØúŽ´ñÿ{y­Î7Ä–92Öæ'ÄÚ2Å ÿ¹‹5=óg[s�3ZÛ«Å/h’‚x¢� çöMkË¢V-kÃßœk#•ÌXl-Ì'ïkwþ�<ÈÆÙ�i×–uvÍ©WÛê¶ÝšPyó{ï{4RvK±véÒ%Énœ¤8=¤fN·ËÖ€K[)c=NǧòÖQh×Ìo²Vý§Z zÓƒÏR6+®^vzH-LÕœ˜”þʆÁºzmðßä† ”�“ÌÍ=Øú*¨ÄÚž5â0åô1”£ l‡:�|¹Íoë ¬©²‹íbÒžû+Ï`ªÅ‡Rjaߦš÷æ«Ö�‚ €Õ)PÏù†Ó­‘}÷˜ãô (½õ_WØw§Š—=ÛÚ’ã+þŽš°dyßsj±q  € € € °�@„öÈ^d}î~ÑÚßžÕG¹òmk׺àÛ^Êã†ØXÓÝ›Û}¼µjY RL‘µÚåd[ëSfV¶2ËIw:·áš³oº­óÃL³úÚÉÊòÀ¬Î)sõbåŠM6U`-KiEV/S�Ê)P¨éÍœ‘i›%Ù­üóÓ·ý·÷ùìʱ8Í.ÎK6Ø«mØÝû��1Ü«Jn¡-ß8a[û¶{o[ 4@Ï˵«J-{k‹]ß–}÷•ròšBåÞKV)³:wUŽx´½Ò[ÛÙC§‡Tï‹ÇjNO§½Ü7Ø®~GÄZå|‰RyK5gÖ/Ö/`¯S¬•>h=¤|¶·›Ól¬„ v Ï2ž-¥Ðžðç4íeq¾µz¬z?>׿opº ´°�-·:Wû\Ûómge»Åól“�56l· ~D@�Ê ômaßv6Ú/gže›Ëÿ­kg[pŸAЧ¹­-ÒJ¹ßs" ‚ãE@@@ "°G€Õ÷äfd*}²ò‚¬½+fp?å¯Óf*¿ûöcå×+¬i}š={s¡Ý©›oío NC[Bœ5·%ÄÛHÝOî¤lþÏ&e·SŽWöM.]/esb�åkE[ý‹wÙwÊ›˜­ŒNª£lÔw°ò¬6¶- Ôl¯s‘HL°«ÁÂÕvmùòO;`ñ›^µÙš­»µ²&þ�æØØû3—Xsv»ÖR=o…]Ú5·÷º¥‰u`ò4©S™ú윿¾Ð{ïÍZ×:ÍzE­|ïå%?ôP=ز[3»FÕvzHEûõ�ÊrúI¹=¤²²¬Z>·Age�M_*?βU®Ú;IYúš¨™N±}Î\³D¹j³M{ó×(7:=¤’·¢æ9%¡þzìÚÛ,Ý9^û Ûç'»nßÿÊ å·KíÊ<àôs”ƒëý«œøÚ Ê‘?´Qx@OåàÃ÷WÖ›:Îæ¿´\¹¥c�õŒxèE…Êc£®Òr�Åí©¼þ± ”×+ÿX+´JB@��¸}!ooßf¬°…ç­³ÏßÒϰ×J÷½î¸n_wNÉ¥jþO¥¿dÕücæ@@@ˆXojjª>%%%Âì>Ø‚k{� V¯ˆ"g�g�T°DØ¿'7P�Ü\çvíß_}ùVn< âÅç.³žGδ±B �;χôn¯éh¯]J }6ëÓ™ÿ( œÓîÞRÓõëÚ³ÜÒº¾ýݸR=6þö¶Þ;~‘�–rí°¶Ê˜MVµþÛϳ”?L›¯\´Êz<­ßhû™Q`Íø§W”“ñN©ZqÖßíDëiÕoþkÊ÷›œ¡¼éHÛÛ8ýÙZŠÖjrò=�*gô³ñü¯¬o½.yd®2Ú9®†íûkúÒ‹*;ØŠ=¾Ì¿”½½TÙqØ e7À—¥éßßz]ùcÂ>ÊCì­ìÒȶé¶ÎfZ/ƒ¹¿üªü~¾ý+rŽ­¡}Œõ°È/°öûSé✩XÇ!ÚÝd¥WÅ@@ p�4g¼€…ìcxÙ&ËŒümkqŸ1äŽÐ¥�}æ»OضD0¦ªó›ª»¿•û¾ºjÕ*½�_XƒqÎY € € €a"±=Âäü°›ÔP�ÊÕ_Vg=kåöpWN×úL«½^¼aûuÄ;½–’�Vñt{h‰'wËíì[mÛÐ&Ô®\«¶Ó›É %ƺ4£ÐC*Ь@ÂH :¿©º,•û¾J�€0úGÅ®"€ € € �`Ýœ½a- €@Ä 4L´öüX§M~�óD\÷Ém�;Ùœ‡�xšÛüžTçþ7ŸÓüߤ®ý•d¨tqF6 V_w/¢œuVz�x# € €@U 0F@Uê²n@@@BL€!vB؈l·m?)¡ì»ýÝ~•ýjdËqô € € G@E¥X@@@� @E@ 8‰ € € € " ¢R,‡ € € €@ `Œ€p9¾€×²ßçÍüÕ³F@@�"à~o ¯ƒ¡G@x�/ö@@@�] GÀ.ññf¨©QQVOZXXXS�ãB@Š€û½1(«ª¶•Ð# Ú¨Ù € € €»_€»ÿ° ‚ÑÑÑÚ+z„à©a—@@��p¿7†Ô.ít¾ªt?—IDATgè°S"@@@@ æÐ# æœKŽ‚(àŽþJ¿€ ’²*@@ † ¸ßyj@ ;­ € € €5M€5íŒr< D�˜»Hú|>eQQQ×̪@@ÂWÀ}R€û]1�‚1Âñ¬±Ï € € €TR€•„ãm 9±±±:Ø‚‚%ψœóΑ"€ €¥Üq·/€{Dô(}f™ƒ € € €@� G@�=µWÀ­÷õŽ€;j€;‚@p·ÅÚ@@BAÀ}"€;"@ø># ´$=J›0@@@�+@�€{j90¨ ·V8Üï « Ö‰ € .ô—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A€Š€ ² @@@ÂE€Š€p9Sì' € € €A " ˆ¬@@@�p " \Îû‰ € € €@¨"«@@@@ \¨—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A€Š€ ² @@@ÂE€Š€p9Sì' € € €A " ˆ¬@@@�p " \Îû‰ € € €@¨"«@@@@ \¨—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A€Š€ ² @@@ÂE€Š€p9Sì' € € €A " ˆ¬@@@�p " \Îû‰ € € €@¨"«@@@@ \¨—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A€Š€ ² @@@ÂE€Š€p9Sì' € € €A " ˆ¬@@@�p " \Îû‰ € € €@¨"«@@@@ \¨—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A€Š€ ² @@@ÂE€Š€p9Sì' € € €A " ˆ¬@@@�p " \Îû‰ € € €@¨"«@@@@ \¨—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A€Š€ ² @@@ÂE€Š€p9Sì' € € €A " ˆ¬@@@�p " \Îû‰ € € €@¨"«@@@@ \¨—3Å~"€ € € *‚€È*@@@*ÂåL±Ÿ € € €A &ë` €@Äø|>kaa¡²¨¨HéΉ@ˆ ¯×«£�вôèèh¥;'Ü èîg�ýG@@@ z€Å¢ É:|·/@$;pì € €@äø÷u¿ºýbbÂûWizDοaŽ@@@OxWcp@�jÈÏÏ×Vܪasl@@ dÜ~nO�ØØØ�ÝÏï=vìë € € €Ô(zÔ¨ÓÉÁ €@pÜqè \UÖ† €„»€ûýÐý®ŽãÐ# Üÿ²ÿ € € € @�€°X"GÀ„ØÈ9jŽ@@ âþÏðz½ãn_’»ý° € € €TŸ=ªÏš-!€@ ¸õ»a´Ãì* € €Ànp¿7†×HôØ-ÿTØ( € € €»G€»Ç�­"€@ˆ ð¤€?Aì € "áø½‘!ò�‡Ý@@@@ :èPÊlÂNÀ}j@Øí6;Œ PƒÜû�322tŒyyyÊüü|¥ÛÉ'W >õZ@îèýQQÖæ«Œ‹‹SÖ©SG­ n Çÿ}ôî¿Ö† € € €@H Ð# ¤O;‡ € ÉnKcff¦ÒÓÓ•n{¦Ûæé¶sº-Ÿ‘¬Ä±#PZÀí)ãö£ÉÊÊÒîÿ£¤¤$M'&&*ÝÿG¥ß sè g™cD@@@ X€üS@@@ äܾn/€Í›7kÿjÕª¥¤ý?äN;’îÿÿÿ/n´4íoAA�299Y™ýè’ÿlÙ)@@@ªF€UãÊZ@@Ø÷~f·/€{?ó.¬Œ·"€@ñøîÿ&÷VLŒý:ì>M Ò€èigœãE@@ˆhzDôéçà@@BMÀ½“ÙÀ Ôö�ýA Üt›6mRºÿËÜçq„ûqU|ÿéPq+–D@@@ ìèö§�@@¨In+¥;Ú¹;ž¹û�štŒ »WÀÿÿ—û?®~ýú»w—ªyëô¨fp6‡ € € €Àî GÀîÔgÛ € €l'�——§9þÏ?ßn~D� ¸ÿËÜÿqAYa­„at²ØU@@@vU€»*Èû@@¢@~~¾ÖÄu²*(-àöÈÍÍ-ýR�ŸC�€Š9@@@@¶ Ð#`›S € €ìv÷Œ°ÛO;PãÜÿe‘ùTzÔøÞ  € € €Ûè°Í‚)@@v»@d¶Oîvvv b"ó="ö<Ž € € ‰ôˆÄ³Î1#€@Mðeéˆf¿û¦òÛG(/Ô\­?,¾MZpÚsÏ+çô8_y~¯:J¯þ¯m˜§•½ùê\e«ÓNT؈úèàù²&@ �B)}ãê•ÊE Smºyoåà.~×_‘æäåd+³²r”™Yö‰³)-M¹zÍzË<ûÄ9ôˆ=” 7þ©üðë å>ÇØÚÚÆ)( r| ¹SÂ!€ € € Puô¨:[ÖŒ‘*Pd­+ïßxŸò©¿¬-¥r%ºåáz㸆*;ú5îç­Z 9SSíùÒûôk«¬ç)P¦/ž¯œ•?PY±’§ÅRüF¹¸ù^Êüµ«”k²·ísÁœ·5ç´ÛTføe•覚{þÝ×)Olš®\¾ÞZ�ÊX¼ÀÚ”ÒNS~ýA{e«!-”e|y4¿aóúÊÚTYK�‚TL  ÃZé—¯±~^›32•›6[¦§[+ýÆt»J¯YaWû¿o°9yÎÕ:¦¶¦Söµ¾ÝÚ[K~ËX›¿öû—•×¾¾L]ˮ̱Ε¼¨±]Ãûïi×ðö!àÉɱå}Yk”3~\§ls¤Ó#@S=¾^…Þ9a�@@@¨2�2šaªl[¬ˆ(»ÀîsòÙÊs{$täYs&iùÿ}[ö›rOÕ �¼ÒPyWŸ¶ÊzÅ•ºÖ³râÃÊ£&*J”Ú‡^ Ÿ_½¸»ÒÚtT|Ö�`Õ¯ß(§í»‡²—'_ùýÃ7;i�ö:ýåøG)½Î«s^§é·ž¥¼eH3e”×–¬íìDÁüÏ5=궇véÊgÖÊtégå,‘`íH·?}¦²O­r–a6 €@)�Â¥Ó4ïÁ§ì^ý¨dûô©—d™\×.¦y+*çÅ[/°³Î>TÙ²qe³fö™R/Þ¿�ÐF‰©ßw˜ò‘Þ6?Ækc üþÚSÊÏ[ T;ÈÞåŒ'«I�;úz‘æéS#¸ÃÌØê) 4ÿÿíA[)+B@@@�РG@hžö j€€5…$5o£Lijmï›rŠ”Î½˜ú»ìâ�·û3›·° ¼¦Ö¶ØpÐ)Ê›œ{ï­¥~Kñ&6ÒäÎo¶…>Ã/S^Ú§®-Ÿ˜¤¬e=ò 6*s3l¿Úík}êÔ¶{J£¢ì] N[PôÞö,€'oßG™ÓÖz´vÛó}9šž÷úƒÊ[— TŽ¿ªƒráä%ʶƒû([ǬVÎüÅ–ìÒ7EY7p½‹‚D²@|×#uø�³,Y õã‚wR.Êî¬л‹2AÊ.Ö¯kÖ+ÖËìá™ö)V¢üü¬~¼è=wž]¬S·ëÿˆ”ÍÊÜ"»’¯_mã,w>¼Î�šØ§ÛÎ>‰´%âܾ$_}÷‹Ž|Ð=•ÑÑþßbvRXhÿ¶§ü0KyèA½”^º£ì¬ø5¾dU‰E@@@¨)ô¨)g’ã@�°V”¿>x@yí‡6nóŽ{Ôx®–yª³+YâX[}ÇÖ¢^Ѻôm›²> ÉvÏgÓ&ÖÀë³ñ¥¿¹¬òžÖ/ ¸üns¾q~ˆi7T�¿ûpeJnªòÓ Ï(?k`snu˜²ÝÆ•/}fG?äÊNʬï?P>ñ™µ �ÜÏZ¥6}õ’òޝê)/o¾ò�&ÔV‹�‚ �¿i­–^ž–§,ù‰c½ÒV¤[å¬W.^¼\iWá’%ª¶} ´il}¾z�t¦rtëVèŒóϔɚþµñÁÊ»[ß1o‘õçúöå·•7ú}P<×"Íq‹·¶}°ÝxŸ}^ìø‡SñZø«æ ¬]oÿÆÞþ`Šò�yÿ(¯q¢rÇýܾ�<=QKþ¹h±rï=;(›4ª¯¤ìX€ïX;öáU@@@j”€755U”’’R£‹ƒA�ÐÈ͵‘‡-ñññ�¾¥ÒËWn‹7W´Rïß8N9ïÈ•cpZ׋_Þù_›§¿ …Î}½‰òîŽPÖþâåÅϦ*ýš[ôS`Å[÷½áÞ§­•~ÝC¥ÚùK­,º±ÝíH«Êô~ÿUþß@«e÷:íLÓ_Öôï·TÞïôhëT/¤ý©9o>l-ü'öUÚøƒòý…Ö?Âm¡òÖ²Ï�á7�§ìõç Ê1ŸØù=ã곕Çt´–(ëŸ@A"O`É’%:èÄÄÄÝ®¯~zUyõKÿ*+÷yQëàÓõÞ'N³–Ußü�•#Ÿ°g Ôolã änØ Ük½·šÕµþÖÄ*�¼î"å²?WŽz>F9úƒ•mÿ²çàŒ|Öæ\}×egzH�R–Àâ¥Ö»ä®qöí¢C;ûvqåÅ'+cb¶ÿGSXdÿöÆ?ýŽrÞ‚Tåõ£¬÷Jû¶-”�–ÌLë³Ù¦M›@߸ÝòÕùMÕÝt徯®ZµJow¾²mwüˆ € € €5TÀ*ç( €U+à³–ðŒ´ÍÊì"·E|û z½ÖžÔ tû�ÕØ6tžä|‡õ†rö>§)/Ûßîðt[Ô}ÙÙšÎ�·áûkÅØˆÍ-£-Û�k-üO�d½3 £Ó”_?híHk�º\yV7ç¾Q÷©Ñ/ÏÓœñOŽUó¤¢D‰qêìýgÅÔßC?ž~ýheϹv·jN-ëY°ÿºŸ•^ü[Y¿ŸÕÙ®µ}kØÕz ŒèÒCyhGÛOú�‚(`×Îû[»èóû—~«�¬î>5àþì£5=þ¬.Ê„Ò úÍqûÄtS ’lì€ZÎ¥¼0߶답ϸí[u5‹‚€Ÿ@Jë¦úiÌè³”n¿€‡ž|KÓþýÜqÆO°qv½/€V±…{ê9p@@@�H G@$žuŽª[ h™¶øÁÍÖŠòÊj»«­t)¾{ÂIz)¥ÔËñ ìN¹ÎÖ̯áž×+¾~p‚ò™Âc”�^ÝVÙ¬¶ÕíþÝ´µ²s§&Ê(ŸµÕüúìýÊ'<6úîç·S&º î�luK&ߥ|8j òàX[C�F�•Þ¿>T¾›ßMÙÉiÅéwé š¾y��àÖ"�e`•ò[J‘µð¯˜;Sùé‡_[¦ZkÓAƒ:(—ù‹2jÀ‘6§î\å„ñ+¿ogc(¤­žªL=ßz4œÑ¿¹ÒmMÒˆ(÷™ênïÀ­?™Û§ÌçüU¼•nÀ]&ïÏÉZêú+¿PX·Â™Ï(G¼o+Ê/°ñNòÙ§[¶s¯µ§Ž}%8[+ÈwzÄZo€hgŽ»uýHA L�6­ì;Œ{ÏÿÝ¿¢éŸxSyÙ'(Ÿ~ѾŸø÷h—bßvåÿË®¼W›ÓB�€0=qì6 € € €• G@eÔx P)»Còø[Æ*Gtßv§dÁ¼w5çìÊî)PrCÖ®²ì«w”OÿÑRyî]½•M¢Ö)K—¬…_jæó_Ûý™=¯i«¬ëöДJÞÅŒéÖž³ßk½‰›¥P�ƒ�Šy?Zëýòž=•ݼ¶†é�ߦ<òqE‰ÓÎîöwËæßÞ×Ę'W)ûŸdmû�]¸Iùâ5v�ßòzu•1Ó¦('uíª²¿�Ó;9½—òúK­ÿÂÛO=¤³t„òΓ;*kûï³~¦ €”%�9Ë:h�~z¾2§¬üæÙ5ùŸüf”˜´_z�s©òÒd{!n�Õ·�ì®\úò#ÊOÚœ«ãŽpË'šv{¤o°Oo½:ÊD¯}¾äæ[O¬­sÛ'ŸÍ¢ °#w¼€k/?] Ýóˆ�aôß›SÚ÷%·¿€Û@?R*!@�€J ñ@@@ÂUÀ*ç( €¡.àËÓ.ûÖjÄozv©²ûˆË•ƒ[8—ñ� œ˜åÓõê“ã¿Uf ®þW9æ »Ô]OÆÏ¯húâ�Å¥n�ã5õøÃöÄ�ÄZn]³µ]ñde|Ü2åk£¬SÁ¿½­}éìýlMC³mßš$Û±t»g_åÚØfJú�‚TP ¡ÃZòš«¬�•}l_ìÊ¿dŠõx#·Ÿrôm”v½Þ¾Ø•¹VãÚJïJ{-oÞ§Ê+GZ—iö™s¬c�úí“â_®rýê eó6öIaŸ+O¦;F@‚ýäÎqfTHÀmó¿~ÔZzüëAyù…'(Û¶±q(»"@�€]Ñã½ € € €„™€Ó”fûÌî"€a*`-4Yéiʵë¶ÕægkN‘ÏF(¯øòì®ûi_þ­lzòùÊ+5U–l]±õo^ðµòÞ÷VÎoy„òg쥬¿mƒj*²±r¼õ•CO ì¿Yù»ÇæýƗʆ‡ WhjoûE´‡EÖ¶_P`ãxݱ  ýÛœlþü×ïT^ý¾� àÿš~ܾŒ¿UsŽ¿ýìâŸc;jbô¸‘Ê!MÜþå,Él@G :É>:ÛcXÊ,v•ö̶«zT–õºêÔ©­Òžì²ƒ’dŸ#�޳>\ºß_~Õú|ÖúLå55TFyí*í[¦|{¡­¯ë�öùâ~ì8Oð&Xσ8.çR .à¶ÿß{ë%zkt´ÿšÀ×Å;¶à¸E‚¿@@@ˆzDÀIæ@ Tì>ÿÉãÆZ–Ú%o]»·³¼â�·;9O3F9´–ÝQ¿åþykwÏ^³Z¹¾ÈšZRœ©ÌÝïXåØ);Úâ%‹×z´xŠòl÷§ù>¥£ÝÕé[g-EçßMY×kmû£W~yö>åÉÏÚÏþ%¦�í›;tÛ!iê±ý‹”eô(Z¡ùßû¶rùaç)Gôª«,£‰ÈkmG ê—ñŠæS@ªG gî$mèòÇÿPæøoògû0a·l«éß-pøÚ+gÇî¡ÑÆýÃ> òsí³Ï“`Ÿ;ô0 Jeè PY¹²ßG�€²]˜‹ € € €@� G@�<­„¦€µ‡‹õÑÝÆá/¯Øýúe•¨D»÷Ò»ÞÚÕçý»Øò—iÊ÷¦,Qf7µv˜Ó.ÿ�òØÖJŸT‘ÊÞBÛÚÂ/lèçG¿·vøc®¦<°¡Ûo7›ö=ÅžpزO•ù'�VÏGyÕ${õ¢Q+SœmyµÔt;@º¬Rh= ÆÚ¢›š´P¶og}h÷A�„îGi¯{ð0evvºò—7_V~ŸbŸý{÷$ÙU|{Þ3»™É†$»›„ì’„$D$FÁ$†’$ ($(å#Z>ðI!Rø‚RÊHQâK $(ð‡”&‚ŠZ!†Â#awóZò ìfg³³3ÓãwúäÑ“Ù�홽=Ó§ïïVåÛîÛ÷qÎïôtwÎùïµý{ï‹øé¿ÿdÄ.¹:â�N`“2ÃöïKß2#SÓÖzC “‰½QR¥ @€ @€ŽY@FÀ1:Ž*0xZlòòßÿ�ˆ ãKsÒU”ûîN#ü÷L§ñ“GîN÷an¦kõéÕû>�îüüö÷§ëÿo¹/ÍÛ<ߺcÀIOOwø�_¹2â‹.LYÇ/¾‘@¬9ܒβ÷¶‹øž÷¤1œO=xrÄ«^û³ô‚4J?ØL#?·|,�üÿ釾qòòWFüÕç<%âÉ i‚Ÿúü»"¾íÍ×Dœ{ÓOD¼tÛÒÚÅj ¬±@ë›åžÝqÖ{§Ó©­o“ݦ̬ÁãÒXàÑÆÓµý7à�#¾íútO™�±4ª¿åäô}±eøÿ"^{W𡿯›ˆØ<ãóyãïßywÄC­YfnúRÚ÷´ç§ 2ß�`!Ð#Gûè‘b* @€ P…€Œ€*ƒGH¶ã“i†üÃ-éùæ®�øæ¿NyÇmÞñâ§ÑþS©Çvø¬gD¼ðùi4þò³Ïˆxö™§FÜ6™Òþ+[Ò›NHã3O9?�í¿ýûŸñìãÛ¾Zç�y$ÝràÅoøµˆW|ë Ó,iIÙ —þÜ/DÜtí­§¦:éiÝ­`ËygÇö¦ÚΕž[ @ B�Ö7Ã×?Gü³÷-âà¦4V?9ufÄ+_”òÔû<�‡‡]Òëç¾ìÕÿìÊ´ï¦ñô¹½hñ‘{bÍi“·EÜrÙwFÜ1–Ònøä‡"¾ï )û`ìÔó#^ý¬ô½¶òo«ØÉB€@Wý-wå J€ @€ôŒ@cçÎ�Q˜íÛ·÷L‘„�þ˜™IW¹¯t]»ù†WWÂö-,¤ëðóøGà H;�Ç °¬ÀîÝ»ãõ‰‰tM¾…�n 8p Nqúéi®¥cYÖò—j.çê~¯îÙ³'v—p,mm_ @€ P˜€K4 k0Å%@ �†4€RšJ9  Ðcù¤ÙL3ÿ ·ë±æQœ>ÈeõüÍæ“¥�ÞȪB€ @€Ž& #àhB^'@€ °†CCé'ºŒ€5$wªš 俲üW7ukqõ%@€ @€�Z Ȩuó«< @€@¯ äñÉ<øàà`¯Oyô�ÀÜÜ\Ôeígûï@½Ð Ê@€ @€ÖH@FÀA;  @€�N6nÜ›W·kTíñeTëéh @€ @ §dôtó(ë%�{‹óxËz•Áy  @€@»@þnrms»‰ÇzA YÝ®—Œ€n ;> @€è!=ÔŠB€@ïäkÉdôN‹(  @ 7òïÆÞ,Û‘J%#àH2Ö @€ @€�>�Ї�ªJ»@žýU^À±K: @ _òoEw è×öU/ @€ Ð'2ú¤!Uƒ�n ¥É|æf³Ù�S8& @€@qùNù·bq…�›# ÄVSf @€ °J«„³õŽÊÎÍÍEt�ú´»š @€– äyÊÍÈ5’°´e­!@€ @€}+ # o›VŨV ÷û¶ßG Ï�g¨ö\ŽF€ Ð ùŽyF€rï°TRFÀRk @€ @€@ß ÈèÛ¦U1º!�{…K¿*¬2ŽI€ PŠ€Œ€RZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@:*@t @€ PЀހRZJ9  @€ @€@CÃ! P�………¨ëüü|Äf³1¯© €Š @€j$Ðh4¢¶i}pp0b^S:�Œ€Ò[Pù  @€ @€À d¬Ë¦ÔY`nn.ªŸsêì î @€�ú´gƒæß�9/`h¨ìÿ•–PŸ÷°š @€ @€� ewch@¬�Àììlœ%ϰ§s  @€�žÈy9S`xx¸g˹|Ád,ïãU @€ ÐW2úª9U†�jò¼rªUu4 @€@éù÷aþ­Xâ|2J*? @€X�€Œ€`Ù”�ú´Ï[ŸZ«) @€@çí÷h4�ï¸î[ÊX÷&P @€ °v2ÖÎÚ™(H ÷ïT`E%@€X�ü»±¬™d¬Ë[ÅI  @€ @€ÀúÈXwg%@ ÇÜ) ÇHñ @€="PâïF=òæQ  @€ °2ÖBÙ9(N ß5 ¸b+0 @€À ”ø»QFÀ¿IœŽ @€¬§€Ž€õÔwn @€ °Æ:ÖÜé @€ @€Àz ˜#`=õ�›ŠÈ÷ Þ¿”üСCggg#æƒK¼J°¸&P`tI ÑhÄ‘ÒXéððpÄ‘‘‘ˆ›6mŠ888ÑB ?dôG;ª @€èH@F@GL6"@€�: äqþééé@Ø»woÄ<.”ÇŽòxQAª³’º @ ?r†WÎÿ:pà@T*þONNÆã�7FÌŸÿýQ_µ¨§€Œ€z¶»Z @€ @€@MdÔ´áU›:ȹ9 àᇎ]ÆÇÇ#ÿïDÏ6(Q ·Îç쀇z(ª377qjj*¢¼€ÛW™³€Œï @€ P#5jlU%@€�• äëBs.@¾.t¥G°=”.�ç…Éßùah(ýoT¾›@éµSþz Ȩg»«5 @€ÔT@F@M^µ  @`y�|Ehž Ï °üö^%@€�:Œ��E5÷íÛ1;ä|�:Ô]ûI@F@?µ¦º @€ @€�£È8 �—  @ žy´'Ï�ç…Îw¨§†Z @€@hÿ^Èß›7o†C 8Å5™ @€ @€�Õ ÈX½�=  @ �:µk¿�tWVÕ @`EùÛ!S¬hGè=ÒŠA€ @€ÖB@FÀZ(;'0;;e-®ä L€ÝÈ333Ý>‘ãè’€Œ€.Á:, @€èE½Ø*ÊD€ë.�ï`Ž€uo @€@ äow“éÁ¦Q¤dte3 @€ Ð2ú¡Õ�*0ÎS9© @ Ï|SôYƒÖª:2jÕÜ*K€ @€u�P÷w€ú @€½.0sW”ð×ܱqÙË#~ïiƒ½^æÊÊ÷Hé ÿô±ˆ7qÄ«¿óäˆÆ²ÁB€�U ø]5�  @€ @€@y2Êk3%&@€ê%0<õøæíÿóÖ"¾ð´-iMü·ÜÒŒ¿öÑ?�ø¦�3bzþ¤eä™±âupAÄÛ~皈Û·ð¤M¶|w¬ùÝ7~OÄ�û"^û–wGüÀ®Ã/Öw²,:f[rÃìý©ŽŸÙ=ñ¼o?-âÔ†ùˆûîJëo�}^Ä'—/VY @`…GûYáálN€ @€ô²€Œ€^ne#@€ÄÐÿæP8ëÜ©ˆ»çþˆ{RFÀæF„Ž–‘ó.�í^ÕÓ#nlíѼ3Í8ðÖ¿mÕO? /|Å+#þÀYéñ#_ü·ˆoO>iIƒøÏxÉUø™;.Ȇ·¥c¾ãƇYÝù¹XûWIõýõoke<:h•òî»ö½üÚ‹–ñïú¡xþ§?zNıE¯xB€‡�pxk  @€ @€@_ ÈèËfU) @ ,�QÜÿyÏ;"¾ã3sËý#ñê/}:Å¥Ëðy/Ž•ôKÏŽxbÛ0}c"eœrJšoSü·aÃüÁ”0Øx¸õ,‡´ÃÔ–S#>mûpÄéÓhÿáF�Ò–Çm9%âSOJ×ð?|0�Ø/õ~c$íä-鼇;f¬^fIgÜü/‰øšKž�>K£øÓßœŽx°yøY�4£ÿ¦Í鮋—Tè.Hw:xãŽÙˆyÿæÞûãñÝ i¾ƒÓ&÷G¼ñš�FüÂ3¾?âÕÏ9>b®nóàÁx|h$‰�¥ûl]Ö!6° @€@ø°ô6 @€ @€5�P£ÆVUè\`a!�MæØù^¶$P…@šôÿ¤ÓŸqôãwFÜýpº–~[ûÍì‰5_Ù�FtÎ{ÁÖˆÃù�žXZïáÖÓåïÐþ>_h�Ê?úþôPOü-äW[ÝZ?wo<½îmï‹ø‘Òš¥Kcã³cåo¼%]½Ÿj•–'Ž9<µ%ž?mªµºùPüsý»?ñƒó/ŒøæŸ9-âI㩦'¦šž±ãĈÒ} >ÿw鞳ᲈozeÚrüÑ#ÇC �® ´ÿítýdN@ R•r: @€èm½Ý>JG€ÔR`xÛ©Qïs7ükÄÛïM÷¸hò‰Ÿms÷¦9öo›ßñ¥ÛÓµ÷)‹àÈËÈyß/¾þʧGœhmÚJ ØÐ�5'Œ|3â—â¿Õ/i€Ë_óÚˆ¯:ç‰)ûç¿r]¬ùåw>S`ñÙÒ÷^mÄÜ–r^ñ†gErÑË"þà·,½Á¢]/Ö\½=Ͱÿk»"Þü¥[#Þ6˜Öœð®ˆ_¹=ÂãKãÙ´%�±oÛ”®ó?°?�ÕÏîJsìÿå¦qþ[îNgØÖÊ5øú§>�¿|Ñ9]&Òãÿ½g>ö¼ÃÓ,—¿æµ_uÎr9 ©†‡[ÆGcu㡯Güò�w§xsº;Àu7Þqæ)gD|éO¤Ô…Ë.<%âq³BÁB€�Õ ø]­œý @€ @€@�2 l4E&@€úK`n÷�Q¡?ü“4~°ãª]óޝ.Ùv8Ö\ò󝉸Sg¦ ‚ÿþlšùtbkÄ­]ñåßžæØ>|GÄ÷½õ†ˆ»î?3â*—Ám±ã‹_ÿóÆ—æ¤ìƒ‡÷¤þ¯h]óŸ³Ò}�ôꟻ.â»þ>]ÿÿ¥SþB³uÇ€vœ�_tõe/>?å8LùÝ T! #  EÇ @€ @€…èY-¤¡“è_�ág|_TîÝ‘buËŽ8Ô¯þɈWžžÆí' ا¼€WýVŠ#é:üÚ’æNû¯hI;.ÝÝàpKšíá®OGüã§¼€MÇOE¼èÒs#nH#RÃ;R>ÂùÏ=>â%O;=âÛ·DÜrÜpÄ´¿…ª�Pµ¨ã @€ @€�hìܹ3Š·}ûö.¤¢ Ðo333«¨Òèèè*öZÝ.«+áêÎe¯Þؽ{wlb"ÝËÝB€À"�…tµÿB#�Ö±_$ãIÍ85>ýô”Éb!°–¿T³öê~¯îÙ³'v—àK€ @€j$`Ž€5¶ª @€@ç�Öhg³™f5h]ÉÜù¾¶$Ðçrú¼�UïèùÛ!S}k[è=½×&JD€ @€º& # k´L€% ¥¯H%·¡² @ [ùÛ!StëŽK ›2º©ëØ @€ @ ÇdôXƒ(ô†@çÉóñ.ºýzoP) @`ÝæææâÜk?KüºU؉ûN@F@ß5©  @€ @€�# È8²�W @ Æ7nŒÚm­¦ @ ¿dôwûª @€X$ #`‡' @€ @ ¿tôwûª @€X$ #`‡' @€ @ ¿tôwûª @€X$஋8vCG @€ @€ÅÈ(¦©”�v�ÙÙÙx:4”>ÄÜG ]Æc @€�~ÈóT• �edôÓ;D] @€ @€ÀQdÈËô²@îm¿�@ž5 Ï ÐË%W6 @€KòòŒUÝ#`éYd,5±† @€ô­€Œ€¾mZ#P�ÜoZíuSõÑSS @€�º Ȩ[‹«/ @€ÔZ@G@­›_å  @€ @ n:êÖâêK€ @€µÐPëæWy @€¨›€Ž€ºµ¸ú @€ @€@­tÔºùUž @€ê& # n-®¾ @€ Pkµn~•'@€ @€�º è¨[‹«/ @€ÔZ@G@­›_å  @€ @ n:êÖâêK€ @€µÐPëæWy @€¨›€Ž€ºµ¸ú @€ @€@­tÔºùUž @€ê& # n-®¾ @€ Pkµn~•'@€ @€�º è¨[‹«/ @€ÔZ`(×~×®]µfPy @€ Põhgµ$@€ @€-�ÿƒaß#ÀWŸIEND®B`‚p_calendar.md000066400000000000000000000277741523260663500335370ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_HK# 日曆|dde-calendar| ## 概述 日曆是一款查看日期ã€�管ç�†æ—¥ç¨‹çš„å°�工具,支æ�´æŸ¥çœ‹è¾²æ›†ã€�黃曆ã€�節氣和常見的節日資訊等,內置日程æ��醒功能幫您更好地è¦�劃時間。 ![0|main](fig/main.png) ## 使用入門 é€�é�Žä»¥ä¸‹æ–¹å¼�執行或關閉日曆,或者建立日曆的æ�·å¾‘。 ### 執行日曆 1. 按一下工作列上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器介é�¢ã€‚ 2. 滾動滑鼠或æ�œå°‹ï¼Œæ‰¾åˆ°æ—¥æ›†åœ–示 ![draw](../common/dde_calendar.svg),按一下執行。 3. å�³é�µæŒ‰ä¸€ä¸‹ ![draw](../common/dde_calendar.svg),您å�¯ä»¥ï¼š - 按一下 **傳é€�到桌é�¢**,在桌é�¢å»ºç«‹æ�·å¾‘。 - 按一下 **釘é�¸åˆ°å·¥ä½œåˆ—**,將應用程å¼�固定到工作列。 - 按一下 **開機自動啟動**,將應用程å¼�加入到開機啟動項,在電腦開機時自動執行該應用。 ### 關閉日曆 - 在日曆介é�¢æŒ‰ä¸€ä¸‹ ![close_icon](../common/close_icon.svg),退出日曆。 - 在工作列å�³é�µæŒ‰ä¸€ä¸‹ ![draw](../common/dde_calendar.svg),é�¸æ“‡ **全部關閉**,退出日曆。 - 在日曆介é�¢æŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg),é�¸æ“‡ **退出**,退出日曆。 ### 查看快速é�µ 在日曆介é�¢ï¼Œä½¿ç”¨å¿«é€Ÿé�µ **Ctrl + Shift + ?** 開啟快速é�µé �覽介é�¢ã€‚熟練地使用快速é�µï¼Œå°‡å¤§å¤§æ��å�‡æ‚¨çš„æ“�作效率。 ![0|view](fig/hotkey.png) ## æ“�作介紹 日曆分為年ã€�月ã€�周ã€�日視圖,é€�é�Žä¸�å�Œçš„視圖方å¼�展示日期屬性。 系統é �設顯示月視圖,å�¯ä»¥é€�é�Žæ»‘鼠點擊切æ�›å¹´ã€�月ã€�周ã€�日視圖。 - 僅在中文系統中,日曆會顯示日期所å°�應的農曆日期ã€�黃曆和節日資訊。 - 日期以 **1900** 年為起點,在日期切æ�›æ™‚,ä¸�能查看早於 **1900** 年的日期。 - 在月視圖ã€�周視圖中,周六ã€�周日的日期顯示會å�€åˆ¥æ–¼å‘¨ä¸€è‡³å‘¨äº”。 日曆視圖中的å�´é‚Šæ¬„展示日曆帳戶以å�Šå°�日曆視圖。 1. 按一下 ![side_menu](../common/side_menu.svg)å�¯åˆ‡æ�›è¦–窗中å�´é‚Šæ¬„的展示和隱è—�。 2. 在日曆帳戶中勾é�¸ç›¸æ‡‰çš„æ—¥æ›†é¡žåž‹ï¼Œå‰‡è©²é¡žåž‹ä¸‹çš„æ—¥ç¨‹åœ¨æ—¥æ›†è¦–圖中展示;若å�–消勾é�¸ï¼Œå‰‡åœ¨è¦–圖中隱è—�。 3. 在å�´é‚Šæ¬„下方的å°�日曆中點é�¸æ—¥æœŸï¼Œå�¯è�¯å‹•控制å�³å�´å¤§æ—¥æ›†è¦–圖的日期展示。
視圖 說明
年 顯示全年的月份�天數。
月 顯示節日資訊�日程安排。
周 顯示這一周�天的日程安排。
日 顯示節日資訊�詳細的日程安排和黃曆。
### 新建日程 1. ��以下方法之一新建日程。 - 在日曆介�,按一下�單欄上的新增按鈕 plus。 - 在月�周或日視圖中,雙擊日期空白處或按一下滑鼠���擇 **新建日程**。 - 在月�周或日視圖中,按一下滑鼠拖拽新建日程。 2. 彈出「新建日程�視窗,�擇日曆帳戶�設定日程類型�內容�時間��醒等資訊。 pic
�數 說明
日曆帳戶 �設本地帳戶,��UOS ID等網絡賬戶。
類型 系統�設�供「工作��「生活��「其他�三種日程類型,您也�以自訂日程類型。
  1. 在類型下拉列表中,�擇 新增日程類型。
  2. 類型框呈�編輯狀態,輸入類型�稱,設定�色。
您也�以��主�單中的管�功能新增�編輯或刪除日程類型,具體�作步驟請�考「管��章節。
內容 日程的�述資訊。
日程時間 設定全天或�全天�公曆或農曆日程的日期和時間。
  • 全天
    • 勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚é–“å�ªèƒ½è¨­å®šæ—¥æœŸã€‚
    • å�–消勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚間既能設定日期ã€�也能設定å°�時和分é�˜ã€‚
  • 時間
    • 公曆:開始時間和çµ�æ�Ÿæ™‚間僅顯示公曆日期。
    • 農曆:開始時間和çµ�æ�Ÿæ™‚間顯示公曆和農曆日期。
�醒 勾�全天,則�醒設定的�項包�:從��日程發生當天(上�9點)�1天�� 2天�或1周�。
�消勾�全天,則�醒設定的�項包�:從��日程開始時�15分���30分���1�時��1天�� 2天�或1周�。
�複 �擇公曆日程,則�複設定的�項包�:從���天�工作日��周��月或�年。
�擇農曆日程,則�複設定的�項包�:從���月或�年。
���複 �有設定了�複功能,���複 �會出�。���複的�項包�:從��於n次後或於日期。
3. 按一下 **�存**,創建日程。日程創建完�後,會以標籤形�呈�在日曆視圖中。 ### 編輯日程 1. 在月�周或日視圖中,雙擊或��按一下日程標籤。 2. �擇 **編輯**。 3. 彈出「編輯日程�視窗,設定編輯日程的相關屬性,按一下 **�存**。 4. 如果設定了全天或�複,則彈出�示框,確��示資訊後,完�日程編輯。 > ![notes](../common/notes.svg) 說明:已創建的日程�以��拖拽日程標籤來修改日程的開始時間和��時間。 編輯日程時,系統會根據所更改內容的��顯示��的�示資訊。�示資訊中按鈕說明如下表。
按鈕 說明
全部日程 修改所有與此相關的�複日程。
僅此日程 �修改當�日程。
所有將來日程 修改�中日期�以後日期的日程,�中的日期之�的日程�然�留。
全部更改 修改所有�複日程。
### 設定全天或多天日程 在創建或編輯日程時,設定 **開始時間**�**��時間**,�以設定全天或多天�續的日程。 ### 設定�複日程 1. 在創建或編輯日程時,在 **�複** 的下拉列表中�擇�複�醒日程的週期,例如,�月。 2. 在 **���複** 的下拉列表中設定���複的次數或�止日期。 pic ### �尋日程 1. 在日曆介�頂部�尋框中,按一下 ![search](../common/search.svg),輸入關�字。 2. 按下�盤上的 **Enter** �進行�尋。 3. 在�尋框中按一下 ![0|close](../common/close_icon.svg) 或刪除輸入的資訊,清除當�輸入的關�字或�消�尋。 ### 查看日程 在月�周或日視圖中,雙擊日程標籤,彈出「我的日程�視窗,此時既�以查看日程,也�以 [編輯日程](#編輯日程) 或 [刪除日程](#刪除日程)。 ### 查看日程�醒詳情 當系統發出通知後,按一下通知�示框,查看日程詳情。 日程�醒時,�示資訊按鈕說明如下表。
按鈕 說明
�後�醒 �醒設定為當天,首次�醒後,按一下 �後�醒,10分�後�次�醒,此後�次按一下「�後�醒�增加5分�的時間間隔。
您也�以在"�後�醒"下拉列表中,�擇15分�後�1�時後�4�時後或明天。
明天�醒 當�醒設定為1天�或2天�時,出�該按鈕。
��1天�醒 當�醒設定為1周�時,出�該按鈕。
關閉 關閉�示資訊。
### 刪除日程 1. 在月�周或日視圖中,雙擊或��按一下日程標籤。 2. �擇 **刪除**。 3. 彈出「您正在刪除日程��示框,按一下 **刪除**,刪除該日程。 刪除日程時,�複與��複日程�示資訊中的按鈕說明如下表。
按鈕 說明
刪除日程 刪除��複日程。
全部刪除 刪除所有�複日程。
僅刪除此日程 ���複日程,僅刪除當�所�的日程。
刪除所有將來日程 ���複日程,刪除當��中日期�以後日期的日程,�中的日期之�的日程�然�留。
## 主�單 在主�單中,您�以開啟管�設定�查看隱�政策�切�視窗主題�查看說明手冊�了解日曆的更多資訊。 ### 管� 按一下 ![icon_menu](../common/icon_menu.svg) > **管�**,進入日曆管�介�,您�以管�日曆帳戶的日程類型�登錄UOS ID將日程數據和日曆�置�步至雲端,�時也�以�通用�置進行設定。 #### 日曆雲�步 日曆支���UOS ID將日程數據�設定�步至雲端。 > ![notes](../common/notes.svg) 說明:該功能暫���版本UOS系統開放。 **登錄和登出UOS ID** 1. 在帳戶設定介�,點擊 **登錄** 按鈕。 2. 彈出UOS ID登錄彈窗,在彈窗中通�賬號密碼�手機驗證碼或微信掃碼等方�完�UOS ID登錄。 3. 登錄後顯示賬戶��頭�和相關�步設定,點擊 **退出登錄** 按鈕�將UOS ID賬號登出。 **日曆�步設定** 1. UOS ID登錄狀態下,點擊 **日程** � **通用設定** 後的複�框,設定是��步至雲端。 2. 點擊 **�步頻率** 後的下拉框,��擇系統自動�步的頻率,您也�以�中 **手動�步** ,關閉自動�步模�。 3. 點擊 **立��步** 按鈕,立�和雲端數據進行�步。 > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **UOS Cloud�步**,�能使用雲�步功能。 #### 管�日程類型 **新增日程類型** 1. 在日曆管�介�,按一下新增按鈕 ![icon](../common/add1.svg)。 2. 彈出「新增日程類型�視窗,輸入類型�稱,設定�色。 3. 按一下 **�存**。 **編輯日程類型** 1. 在日曆管�介�,�擇�一個自訂類型。 2. 按一下編輯按鈕 ![icon](../common/edit.svg)。 3. 彈出「編輯日程類型�視窗,輸入類型�稱,設定�色。 4. 按一下 **�存**。 **刪除日程類型** 1. 在帳戶設定介�,�擇�一個自訂類型。 2. 按一下刪除按鈕 ![icon](../common/delete.svg),刪除該日程類型。 #### 通用設定 **一周首日** 點擊 **�星期開始於** 後的下拉框,��中 **周日** 或 **周一** 設定為�周的第一天。 **時間格�** 點擊 **時間** 後的下拉框,�中 **24�時制** 或 **12�時制** ,則日曆中的時間格�將按�中項進行展示。 ### 主題 視窗主題包�淺色主題�深色主題和系統主題。 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **主題**,�擇一個主題�色。 ### 說明 查看說明手冊,進一步了解和使用日曆。 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **說明**。 3. 查看日曆的說明手冊。 ### 關於 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **關於**。 3. 查看日曆的版本和介紹。 ### 退出 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **退出**。linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/000077500000000000000000000000001523260663500312135ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/calendar.md000066400000000000000000000271321523260663500333130ustar00rootroot00000000000000# 日曆|dde-calendar| ## 概述 日曆是一款檢視日期�管�行程的�工具,支�檢視農曆�黃曆�節氣和常見的節日資訊等,內建行程�醒功能幫您更好地�劃時間。 ![0|main](fig/main.png) ## 使用入門 ��以下方�執行或關閉日曆,或者建立日曆的�徑。 ### 執行日曆 1. 按一下工作列上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器介�。 2. 滾動滑鼠或�尋,找到日曆圖示 ![draw](../common/dde_calendar.svg),按一下執行。 3. ��按一下 ![draw](../common/dde_calendar.svg),您�以: - 按一下 **傳�到桌�**,在桌�建立�徑。 - 按一下 **釘�到工作列**,將應用程�固定到工作列。 - 按一下 **開機自動啟動**,將應用程�加入到開機啟動項,在電腦開機時自動執行該應用。 ### 關閉日曆 - 在日曆介�按一下 ![close_icon](../common/close_icon.svg),退出日曆。 - 在工作列��按一下 ![draw](../common/dde_calendar.svg),�擇 **全部關閉**,退出日曆。 - 在日曆介�按一下 ![icon_menu](../common/icon_menu.svg),�擇 **��**,退出日曆。 ### 檢視快速� 在日曆介�,使用快速� **Ctrl + Shift + ?** 開啟快速��覽介�。熟練地使用快速�,將大大��您的�作效率。 ![0|view](fig/hotkey.png) ## �作介紹 日曆分為年�月�週�日檢視,����的檢視方�展示日期屬性。 系統�設顯示月檢視,�以��滑鼠點擊切�年�月�週�日檢視。 - 僅在中文系統中:日曆會顯示日期所�應的農曆日期�黃曆和節日資訊。 - 日期以 **1900** 年為起點,在日期切�時,�能檢視早於 **1900** 年的日期。 - 在月檢視�週檢視中,週六�週日的日期顯示會�別於週一至週五。 日曆檢視中的�邊欄展示日曆帳號以��日曆檢視。 1. 按一下 ![side_menu](../common/side_menu.svg)�切�視窗中�邊欄的展示和隱�。 2. 在日曆帳號中勾�相應的日曆類型,則該類型下的行程在日曆檢視中展示;若�消勾�,則在檢視中隱�。 3. 在�邊欄下方的�日曆中點�日期,��動控制��大日曆檢視的日期展示。
檢視 說明
年 顯示全年的月份�天數。
月 顯示節日資訊�行程安排。
週 顯示這一週�天的行程安排。
日 顯示節日資訊�詳細的行程安排和黃曆。
### 新增行程 1. ��以下方法之一新增行程。 - 在日曆介�,按一下�單欄上的新增按鈕 plus。 - 在月�週或日檢視中,雙擊日期空白處或按一下滑鼠���擇 **新增行程**。 - 在月�週或日檢視中,按一下滑鼠拖曳新增行程。 2. 彈出「新增行程�視窗,�擇日曆帳號�設定行程類型�內容�時間��醒等資訊。 pic
�數 說明
日曆帳號 �設本地帳號,��UOS ID等網路帳號。
類型 系統�設�供「工作��「生活��「其他�三種行程類型,您也�以自訂行程類型。
  1. 在類型下拉清單中,�擇 新增行程類型。
  2. 類型框呈�編輯狀態,輸入類型�稱,設定�色。
您也�以��主�單中的管�功能新增�編輯或刪除行程類型,具體�作步驟請�考「管��章節。
內容 行程的�述資訊。
行程時間 設定全天或�全天�國曆或農曆行程的日期和時間。
  • 全天
    • 勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚é–“å�ªèƒ½è¨­å®šæ—¥æœŸã€‚
    • å�–消勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚間既能設定日期ã€�也能設定å°�時和分é�˜ã€‚
  • 時間
    • 國曆:開始時間和çµ�æ�Ÿæ™‚間僅顯示國曆日期。
    • 農曆:開始時間和çµ�æ�Ÿæ™‚間顯示國曆和農曆日期。
�醒 勾�全天,則�醒設定的�項包�:永��行程發生當天(上�9點)�1天�� 2天�或1週�。
�消勾�全天,則�醒設定的�項包�:永��行程開始時�15分���30分���1�時��1天�� 2天�或1週�。
�複 �擇國曆行程,則�複設定的�項包�:永���天�工作日��週��月或�年。
�擇農曆行程,則�複設定的�項包�:永���月或�年。
���複 �有設定了�複功能,���複 �會出�。���複的�項包�:永��於n次後或於日期。
3. 按一下 **儲存**,建立行程。行程建立完�後,會以標籤形�呈�在日曆檢視中。 ### 編輯行程 1. 在月�週或日檢視中,雙擊或��按一下行程標籤。 2. �擇 **編輯**。 3. 彈出「編輯行程�視窗,設定編輯行程的相關屬性,按一下 **儲存**。 4. 如果設定了全天或�複,則彈出�示框,確��示資訊後,完�行程編輯。 > ![notes](../common/notes.svg) 說明:已建立的行程�以��拖曳行程標籤來修改行程的開始時間和��時間。 編輯行程時,系統會根據所更改內容的��顯示��的�示資訊。�示資訊中按鈕說明如下表。
按鈕 說明
所有行程 修改所有與此相關的�複行程。
僅此行程 �修改當�行程。
所有將來行程 修改�中日期�以後日期的行程,�中的日期之�的行程�然�留。
全部變更 修改所有�複行程。
### 設定全天或多天行程 在建立或編輯行程時,設定 **開始時間**�**��時間**,�以設定全天或多天�續的行程。 ### 設定�複行程 1. 在建立或編輯行程時,在 **�複** 的下拉清單中�擇�複�醒行程的週期,例如,�月。 2. 在 **���複** 的下拉清單中設定���複的次數或�止日期。 pic ### �尋行程 1. 在日曆介�頂部�尋框中,按一下 ![search](../common/search.svg),輸入關�字。 2. 按下�盤上的 **Enter** �進行�尋。 3. 在�尋框中按一下 ![0|close](../common/close_icon.svg) 或刪除輸入的資訊,清除當�輸入的關�字或�消�尋。 ### 檢視行程 在月�週或日檢視中,雙擊行程標籤,彈出「我的行程�視窗,此時既�以檢視行程,也�以 [編輯行程](#編輯行程) 或 [刪除行程](#刪除行程)。 ### 檢視行程�醒詳情 當系統發出通知後,按一下通知�示框,檢視行程詳情。 行程�醒時,�示資訊按鈕說明如下表。
按鈕 說明
�後�醒 �醒設定為當天,首次�醒後,按一下 �後�醒,10分�後�次�醒,此後�次按一下「�後�醒�增加5分�的時間間隔。
您也�以在"�後�醒"下拉清單中,�擇15分�後�1�時後�4�時後或明天。
明天�醒 當�醒設定為1天�或2天�時,出�該按鈕。
��1天�醒 當�醒設定為1週�時,出�該按鈕。
關閉 關閉�示資訊。
### 刪除行程 1. 在月�週或日檢視中,雙擊或��按一下行程標籤。 2. �擇 **刪除**。 3. 彈出「您正在刪除行程��示框,按一下 **刪除**,刪除該行程。 刪除行程時,�複與��複行程�示資訊中的按鈕說明如下表。
按鈕 說明
刪除行程 刪除��複行程。
全部刪除 刪除所有�複行程。
僅刪除此行程 ���複行程,僅刪除當�所�的行程。
刪除所有將來行程 ���複行程,刪除當��中日期�以後日期的行程,�中的日期之�的行程�然�留。
## 主�單 在主�單中,您�以開啟管�設定�檢視隱�政策�切�視窗主題�檢視說明手冊�了解日曆的更多資訊。 ### 管� 按一下 ![icon_menu](../common/icon_menu.svg) > **管�**,進入日曆管�介�,您�以管�日曆帳號的行程類型�登入UOS ID將行程資料和日曆設定�步至雲端,�時也�以�通用設定進行設定。 #### 日曆雲�步 日曆支���UOS ID將行程資料�設定�步至雲端。 > ![notes](../common/notes.svg) 說明:該功能暫��舊版本UOS系統開放。 **登入和登出UOS ID** 1. 在帳號設定介�,點擊 **登入** 按鈕。 2. 彈出UOS ID登入視窗,在視窗中��帳號密碼�手機驗證碼或微信掃碼等方�完�UOS ID登入。 3. 登入後顯示帳戶��頭�和相關�步設定,點擊 **登出** 按鈕�將UOS ID帳號登出。 **日曆�步設定** 1. UOS ID登入狀態下,點擊 **行程** � **通用設定** 後的核�方塊,設定是��步至雲端。 2. 點擊 **�步頻率** 後的下拉方塊,��擇系統自動�步的頻率,您也�以�中 **手動�步** ,關閉自動�步模�。 3. 點擊 **立��步** 按鈕,立�和雲端資料進行�步。 > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **UOS Cloud�步**,�能使用雲�步功能。 #### 管�行程類型 **新增類型** 1. 在日曆管�介�,按一下新增按鈕 ![icon](../common/add1.svg)。 2. 彈出「新增行程類型�視窗,輸入類型�稱,設定�色。 3. 按一下 **儲存**。 **編輯類型** 1. �擇一個自訂類型。 2. 按一下編輯按鈕 ![icon](../common/edit.svg)。 3. 修改�稱/�色。 4. 按一下 **儲存**。 **刪除類型** 1. �擇一個自訂類型。 2. 按一下刪除按鈕 ![icon](../common/delete.svg)。 #### 通用設定 **�週開始於** 設定 **週日** 或 **週一** 為�週的第一天。 **時間格�** �擇 **24�時制** 或 **12�時制** 格�。 ### 主題 視窗主題包�淺色主題�深色主題和系統主題。 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **主題** > �擇一個主題。 ### 說明 檢視說明手冊了解日曆使用方�。 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **說明**。 ### 關於 檢視日曆版本和資訊。 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **關於**。 ### �� 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **��**。d_calendar.md000066400000000000000000000271651523260663500335450ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW# 日曆|dde-calendar| ## 概述 日曆是一款檢視日期�管�行程的�工具,支�檢視農曆�黃曆�節氣和常見的節日資訊等,內建行程�醒功能幫您更好地�劃時間。 ![0|main](fig/main.png) ## 使用入門 ��以下方�執行或關閉日曆,或者建立日曆的�徑。 ### 執行日曆 1. 按一下工作列上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器介�。 2. 滾動滑鼠或�尋,找到日曆圖示 ![draw](../common/dde_calendar.svg),按一下執行。 3. ��按一下 ![draw](../common/dde_calendar.svg),您�以: - 按一下 **傳�到桌�**,在桌�建立�徑。 - 按一下 **釘�到工作列**,將應用程�固定到工作列。 - 按一下 **開機自動啟動**,將應用程�加入到開機啟動項,在電腦開機時自動執行該應用。 ### 關閉日曆 - 在日曆介�按一下 ![close_icon](../common/close_icon.svg),退出日曆。 - 在工作列��按一下 ![draw](../common/dde_calendar.svg),�擇 **全部關閉**,退出日曆。 - 在日曆介�按一下 ![icon_menu](../common/icon_menu.svg),�擇 **��**,退出日曆。 ### 檢視快速� 在日曆介�,使用快速� **Ctrl + Shift + ?** 開啟快速��覽介�。熟練地使用快速�,將大大��您的�作效率。 ![0|view](fig/hotkey.png) ## �作介紹 日曆分為年�月�週�日檢視,����的檢視方�展示日期屬性。 系統�設顯示月檢視,�以��滑鼠點擊切�年�月�週�日檢視。 - 僅在中文系統中:日曆會顯示日期所�應的農曆日期�黃曆和節日資訊。 - 日期以 **1900** 年為起點,在日期切�時,�能檢視早於 **1900** 年的日期。 - 在月檢視�週檢視中,週六�週日的日期顯示會�別於週一至週五。 日曆檢視中的�邊欄展示日曆帳號以��日曆檢視。 1. 按一下 ![side_menu](../common/side_menu.svg)�切�視窗中�邊欄的展示和隱�。 2. 在日曆帳號中勾�相應的日曆類型,則該類型下的行程在日曆檢視中展示;若�消勾�,則在檢視中隱�。 3. 在�邊欄下方的�日曆中點�日期,��動控制��大日曆檢視的日期展示。
檢視 說明
年 顯示全年的月份�天數。
月 顯示節日資訊�行程安排。
週 顯示這一週�天的行程安排。
日 顯示節日資訊�詳細的行程安排和黃曆。
### 新增行程 1. ��以下方法之一新增行程。 - 在日曆介�,按一下�單欄上的新增按鈕 plus。 - 在月�週或日檢視中,雙擊日期空白處或按一下滑鼠���擇 **新增行程**。 - 在月�週或日檢視中,按一下滑鼠拖曳新增行程。 2. 彈出「新增行程�視窗,�擇日曆帳號�設定行程類型�內容�時間��醒等資訊。 pic
�數 說明
日曆帳號 �設本地帳號,��UOS ID等網路帳號。
類型 系統�設�供「工作��「生活��「其他�三種行程類型,您也�以自訂行程類型。
  1. 在類型下拉清單中,�擇 新增行程類型。
  2. 類型框呈�編輯狀態,輸入類型�稱,設定�色。
您也�以��主�單中的管�功能新增�編輯或刪除行程類型,具體�作步驟請�考「管��章節。
內容 行程的�述資訊。
行程時間 設定全天或�全天�國曆或農曆行程的日期和時間。
  • 全天
    • 勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚é–“å�ªèƒ½è¨­å®šæ—¥æœŸã€‚
    • å�–消勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚間既能設定日期ã€�也能設定å°�時和分é�˜ã€‚
  • 時間
    • 國曆:開始時間和çµ�æ�Ÿæ™‚間僅顯示國曆日期。
    • 農曆:開始時間和çµ�æ�Ÿæ™‚間顯示國曆和農曆日期。
�醒 勾�全天,則�醒設定的�項包�:永��行程發生當天(上�9點)�1天�� 2天�或1週�。
�消勾�全天,則�醒設定的�項包�:永��行程開始時�15分���30分���1�時��1天�� 2天�或1週�。
�複 �擇國曆行程,則�複設定的�項包�:永���天�工作日��週��月或�年。
�擇農曆行程,則�複設定的�項包�:永���月或�年。
���複 �有設定了�複功能,���複 �會出�。���複的�項包�:永��於n次後或於日期。
3. 按一下 **儲存**,建立行程。行程建立完�後,會以標籤形�呈�在日曆檢視中。 ### 編輯行程 1. 在月�週或日檢視中,雙擊或��按一下行程標籤。 2. �擇 **編輯**。 3. 彈出「編輯行程�視窗,設定編輯行程的相關屬性,按一下 **儲存**。 4. 如果設定了全天或�複,則彈出�示框,確��示資訊後,完�行程編輯。 > ![notes](../common/notes.svg) 說明:已建立的行程�以��拖曳行程標籤來修改行程的開始時間和��時間。 編輯行程時,系統會根據所更改內容的��顯示��的�示資訊。�示資訊中按鈕說明如下表。
按鈕 說明
所有行程 修改所有與此相關的�複行程。
僅此行程 �修改當�行程。
所有將來行程 修改�中日期�以後日期的行程,�中的日期之�的行程�然�留。
全部變更 修改所有�複行程。
### 設定全天或多天行程 在建立或編輯行程時,設定 **開始時間**�**��時間**,�以設定全天或多天�續的行程。 ### 設定�複行程 1. 在建立或編輯行程時,在 **�複** 的下拉清單中�擇�複�醒行程的週期,例如,�月。 2. 在 **���複** 的下拉清單中設定���複的次數或�止日期。 pic ### �尋行程 1. 在日曆介�頂部�尋框中,按一下 ![search](../common/search.svg),輸入關�字。 2. 按下�盤上的 **Enter** �進行�尋。 3. 在�尋框中按一下 ![0|close](../common/close_icon.svg) 或刪除輸入的資訊,清除當�輸入的關�字或�消�尋。 ### 檢視行程 在月�週或日檢視中,雙擊行程標籤,彈出「我的行程�視窗,此時既�以檢視行程,也�以 [編輯行程](#編輯行程) 或 [刪除行程](#刪除行程)。 ### 檢視行程�醒詳情 當系統發出通知後,按一下通知�示框,檢視行程詳情。 行程�醒時,�示資訊按鈕說明如下表。
按鈕 說明
�後�醒 �醒設定為當天,首次�醒後,按一下 �後�醒,10分�後�次�醒,此後�次按一下「�後�醒�增加5分�的時間間隔。
您也�以在"�後�醒"下拉清單中,�擇15分�後�1�時後�4�時後或明天。
明天�醒 當�醒設定為1天�或2天�時,出�該按鈕。
��1天�醒 當�醒設定為1週�時,出�該按鈕。
關閉 關閉�示資訊。
### 刪除行程 1. 在月�週或日檢視中,雙擊或��按一下行程標籤。 2. �擇 **刪除**。 3. 彈出「您正在刪除行程��示框,按一下 **刪除**,刪除該行程。 刪除行程時,�複與��複行程�示資訊中的按鈕說明如下表。
按鈕 說明
刪除行程 刪除��複行程。
全部刪除 刪除所有�複行程。
僅刪除此行程 ���複行程,僅刪除當�所�的行程。
刪除所有將來行程 ���複行程,刪除當��中日期�以後日期的行程,�中的日期之�的行程�然�留。
## 主é�¸å–® 在主é�¸å–®ä¸­ï¼Œæ‚¨å�¯ä»¥é–‹å•Ÿç®¡ç�†è¨­å®šã€�檢視隱ç§�政策ã€�切æ�›è¦–窗主題ã€�檢視說明手冊ã€�了解日曆的更多資訊。 ### 管ç�† 按一下 ![icon_menu](../common/icon_menu.svg) > **管ç�†**,進入日曆管ç�†ä»‹é�¢ï¼Œæ‚¨å�¯ä»¥ç®¡ç�†æ—¥æ›†å¸³è™Ÿçš„行程類型ã€�登入deepin ID將行程資料和日曆設定å�Œæ­¥è‡³é›²ç«¯ï¼Œå�Œæ™‚也å�¯ä»¥å°�通用設定進行設定。 #### 日曆雲å�Œæ­¥ 日曆支æ�´é€�é�Ždeepin ID將行程資料å�Šè¨­å®šå�Œæ­¥è‡³é›²ç«¯ã€‚ > ![notes](../common/notes.svg) 說明:該功能暫ä¸�å°�舊版本deepin系統開放。 **登入和登出deepin ID** 1. 在帳號設定介é�¢ï¼Œé»žæ“Š **登入** 按鈕。 2. 彈出deepin ID登入視窗,在視窗中é€�é�Žå¸³è™Ÿå¯†ç¢¼ã€�手機驗證碼或微信掃碼等方å¼�完æˆ�deepin ID登入。 3. 登入後顯示帳戶å��ã€�é ­åƒ�和相關å�Œæ­¥è¨­å®šï¼Œé»žæ“Š **登出** 按鈕å�¯å°‡deepin ID帳號登出。 **日曆å�Œæ­¥è¨­å®š** 1. deepin ID登入狀態下,點擊 **行程** ã€� **通用設定** 後的核å�–方塊,設定是å�¦å�Œæ­¥è‡³é›²ç«¯ã€‚ 2. 點擊 **å�Œæ­¥é »çއ** 後的下拉方塊,å�¯é�¸æ“‡ç³»çµ±è‡ªå‹•å�Œæ­¥çš„頻率,您也å�¯ä»¥é�¸ä¸­ **手動å�Œæ­¥** ,關閉自動å�Œæ­¥æ¨¡å¼�。 3. 點擊 **ç«‹å�³å�Œæ­¥** 按鈕,立å�³å’Œé›²ç«¯è³‡æ–™é€²è¡Œå�Œæ­¥ã€‚ > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **deepin Cloudå�Œæ­¥**,æ‰�能使用雲å�Œæ­¥åŠŸèƒ½ã€‚ #### 管ç�†è¡Œç¨‹é¡žåž‹ **新增類型** 1. 在日曆管ç�†ä»‹é�¢ï¼ŒæŒ‰ä¸€ä¸‹æ–°å¢žæŒ‰éˆ• ![icon](../common/add1.svg)。 2. 彈出「新增行程類型ã€�視窗,輸入類型å��稱,設定é¡�色。 3. 按一下 **儲存**。 **編輯類型** 1. é�¸æ“‡ä¸€å€‹è‡ªè¨‚類型。 2. 按一下編輯按鈕 ![icon](../common/edit.svg)。 3. 修改å��稱/é¡�色。 4. 按一下 **儲存**。 **刪除類型** 1. é�¸æ“‡ä¸€å€‹è‡ªè¨‚類型。 2. 按一下刪除按鈕 ![icon](../common/delete.svg)。 #### 通用設定 **æ¯�週開始於** 設定 **週日** 或 **週一** 為æ¯�週的第一天。 **時間格å¼�** é�¸æ“‡ **24å°�時制** 或 **12å°�時制** æ ¼å¼�。 ### 主題 視窗主題包å�«æ·ºè‰²ä¸»é¡Œã€�深色主題和系統主題。 1. 在日曆介é�¢ï¼ŒæŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **主題** > é�¸æ“‡ä¸€å€‹ä¸»é¡Œã€‚ ### 說明 檢視說明手冊了解日曆使用方å¼�。 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **說明**。 ### 關於 檢視日曆版本和資訊。 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **關於**。 ### çµ�æ�Ÿ 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. é�¸æ“‡ **çµ�æ�Ÿ**。linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/000077500000000000000000000000001523260663500317605ustar00rootroot00000000000000create.png000066400000000000000000001064461523260663500336650ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/fig‰PNG  IHDRÖ?EÛoÚ pHYsÄÄ•+ IDATxœìÝwt×ù7ðgf{ת÷^B!½ƒÁ4p·qÃ&�8Ží8qüÆvœØ?“Øã^€ØôjzïMB„zïu»vwfÞ?F,‹$„¤]i<ŸÃáÌܽsçÎ }™½sg–(**„B\à€F£áº!ôÀQ*•$×}@¡F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`Ôs ÃpÝ„îmÁ¨'Ò3s¿øvÛŽ½'Û¿Ä0Lqiå‘—)Šê¼‘CÇ.¾ûÑgΧ;±cf³åjFÎáã—œØ&B½‡ÏuÐ=©ÅlÉί,(©�6)I,€Áh*-«.,®LË*¨¬i€êÚ†GçN2Œÿúüûm'ŒŽ«¨ª€’òÚÆfý© Y…%UìKS'wwua—Ï_ÊÚ°íxçݘ91qÊ„P×Д“[RP\™y£Äh²@h°ï·öktÆö[½ôäôè¨ß„œ#uCc“öÝ�²­š-Ö7þþ5ŒEÑô¹+¹l¹\*Jˆ ��¡išaûŒ÷ øÒòl%åU�åU�ìòØQƒ{Ö±ÚÚÆ_vžb—Õ*ÙÄ”x•¢uU)åóy­ýoÖ[)ºg»@¬o¯ùôƒe={õ®0‚Q7ðxd°¿{iEúº™­ÖòªF¡€¯RÉ50uìàáCº©UA°›(2öè¿¿øµ¨¬.%).&:tTR<ì=pfÿñ´yÓ“ÆŽòý†½©YEí÷èãéò䣓ۗÿøËAö\›ðìâÉUuûަF„ø¤Œ¼åËŸŸëæªb—?[·%¿¸ÚIozP|úÁ²;嬃ù Á¨[” Ù³Kf¼óÑ�‘!>¯,�›“W²ú»Ý‘!ÞS'ŒØ¸å ø{ÚFì•”U•Õ¹«å:½qÅÛkì_ÚúÛ¹­¿�c—?^½ù¯Xâîv«±PàëíѾA±P`¿*ðãc#¬Ö»Œ>#Ô3¦°ãù Á¨»T*¹·‡ª¬²Þb±^»QÃÜu«s—®ÀÄ1 ®jEBL0[XVY_Û õñtñöpÉ/®Ö茑!>AOþM~óóîôë%ìò…´¼ iy“RâØÕ5ßî° DÔ5h{Ð8BÐ.…�’¿€Œºåjfî·²Ë|w»ðÝ/‡d;O Š€¯×8`«Ï2Ô74Ÿ¹tvî?àãž44:;·x<H’ø$IÀœ£TJ¹sû\רsnƒè�eKagå/`£n �¾n`±RìP¬¿·+I¢Û‡Ú8zò ;ƒØh²TÕ6Õ74ßér\{…eµm.:ôÄ#Sõãß?YOÓŒ�§Ë«K犄‚‡¦�Š¢4Z}m}SyEíõœ’„Aá8õ˜só0‚Q· ˆ  ÍÝ;ÿúV¾¼@ÀçÀúMàÙÅ“å2Ég_…ÿï�§ØóÜsÆ/˜3¾²ªîŸŸÿê鮜2a;“Ìþrœƒ Ù¹Å4Í@eMÓùKYÇݼãHNAEM½Öþ’ÂÒšˆð€¬º+< F\Ê/,ûìë�ö%üÛ:Hm±X@©�òx<  @Ótæõ‚–³\&?o·_·>}醭ûËqO?:1!.ʾ}_/—gOkß“ï6n²/IËȵ-ï:x1,ØW*7k�îjy³Öh¶X㣃â½<\U '�u „-y�˜ÂÁ¨x<ž‡«¬Ýج79IR‰¨¡I b‘ÈbµÚoB’ä¾#›5†aƒ# (À‹¦öš[^aeYUCH€G�¿'[ÙU­l³G‘@àéáÚ¾'"ÁmCU5õ—3 Ùewµ¼®Qw9=gþCãfLN€¯~Ø™™S6h`H›|G¨ëÚd®³RoPFÝèóÒÓ Kˆ|tζä‘9cý<¦NJª©k±XÔ~«”¤X�¡åè™L 2-#¯®¾¹®¾Ù`j½¡…]­«o>tìrÏ:¶ïÐy¡AÞ)ã'�úîG?°²ó+`ËžÓìê…ËY=Û z`u˜¶l ;Ø2ž£î9v*õä…ëófŒdW Š*.g^­mЀX,Ôêôm6I½ÿè•Æf} ¯›X,ÌÌ)³µ¦^SS¯a—ù¼žžàç¥xñj>Ì}h,Iìyº�Ñdaï]fÇLê¢NÎv?ÆFÝÐØ¤9})[)—Ä Ùº÷,$�tìlæ–=gÀÛC%éè,˜Ïã©’Æf}ieƒVg°ý{íÊå¸.Έ¥3m·äñHl;b"Ÿ?nØ��Ý;`„ìþ!õàÕ»Â�Ô ù…å4ÍÌš<Üv…L&Y2oÜà˜`ˆŽèp«´ŒEeuÀ0Ìú­ÇW½íjFN]}“—§ë¤”8_ŸÖ›ßhš±Z©žÝáèÞƒ ➣nš-—I"Âtú[OÞ‰��8xì ÄÇv‚¹ù%ë·€1#¢àÄùë9…•9…•¶ ‡NÞö°ÊgM<(Ò¶ÚÅgDÈåÒ6>úlcyõmÓ�Þrìç-ÇØåw^{Ìöà„8„Œº‡�Ìã‘Ñá¾@AÄòçç#bÒ˜½ÞèïçÙˇ‹Pï"ŠŠŠ4 ×Ý@÷3«•âñHÛ@mï1MZ�A(ØžT‰P¦T*ñ,õ:ÛSrz›D"–HÄ}³/„œ/Ç!„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœásÝ�{ŸÏçñx|>Ÿa`ÿFÝ‚`ÿ¶Z­EY­V'6ŽÜR©” �ÇþM’øa¡ûMÓE‘$É0 MÓƒÁY-cvt›B¡`F$ …B�@€ù‹Ð}�$I�@ ‰Ã0 …Âi-;«¡„T*µZ­2™ “¡�Ç“ÉdV«U*•:¥AÌ‘nàóùAH$®;‚â’X,&I’ÏwÂ@.ŽwA$I�ßz�±9À^¦s´)Ç›xpðù|@€³Î‚1Pº#!΋ ”îÁFF0'p!dã”@è¿|ú|zƵ¼l¨Õ²s‹wï?}âtªÓ{ÕuŸÝwèô�^ݹ÷xEe­}ÉùKÿÛ²¿}Í#'.\I»Þƒh4ºÌky›¶rDü¥+YÿY·•}å§M‡ß\±Ž�ÍŸçæª*,nÍ÷Éc/š?ÕÖ`›a–/Üóå�{Úwcîô‘óçLräºÿÔÖ7mÚq4ãZÁï^˜ß&…)ŠúlÝ–ìÜ⸘0Owuïõ¡¯#8=+ß–•+Þ^î{=¯‚]=r:S)—¼÷Ö3 •Š|¾‹RV×Ð̾zêbö©‹Ù¶v^{y^ ¿·muÚ¸„A1amöµkß™;uC©�½¾|‘3¨•—§ÛÏkÿÊ.ç–¾ûÑQa¾--æÂÒÚÿû/{{¹ÛjJ%âÄÁѾqîÌÑÑQ!5µ �Íú?üåó†&]H€Çk¯,ù~Ãn…¢õÄV.“|µ‹¢º¶�-9x"íà‰4[kï½õlH�ŸmuÞŒäÄ„[ÿ“±~ÙzȉGŠÐ}ÃÓ]ýçß?ùá~Zõů¿é>¿5…)šþü«-×sŠÞ\ñx¯æ/81‚5:Caqy›ÂÆ&­ý*Ã0ñ±a3&'}´z3�$ž>"eäàK©×ÞrL$ä?¹pbìÀ¶1j3jØ€ÙÓFÙVíÏþ`\ÕJ_Ï6›È¤âž�¶î:6zx´P( )ÚÃÍåèÉK‹L³½êáîêáî*àóü|=³omÞu‚f˜‡¦ŽÔé …%•..Êf­^.»ã@&¥ ~tÞdÛªHtë"àá® ðm³‰Bîœç‰ tÿ ðzkåþ积mMaŠ¢>ÿj˵Eo®x<4¸ío“Ó9-‚s «þ³nGûò¸è@Û2EÑ× ÷½ütÃØÑ‰>v'ÂÀ>æ�/à ‰ Ë+¬˜4nÄ¡£ç€†ašt ¹ŒaZwÆ0 0ÐÔ¤Ñé� ÕÝzV©VgpsUÝ|¬<¯£2 NjFèý=ß\ñø??ýyÕ¿¼ºtÞºv²ùäÓùo�S~§œÁ‰ƒBŸ\4­Má®}§ì/ÇMæ°`ŸIc5Z½Éd^øð„_·~õÙÙYÙ…zƒqѼ‰Û÷œ é¶¹þ·ý„•¢àBÚmÓ„ßó)…B-fkS³®¬¢¦Í†zƒÉÝõîS#œˆ¢è-»Ž�ìüt*DE‹ÿé{_{õqï¶YØ ‘aA*¥<¯°ÂVhµZëun®ªö�½~ŸÕJÀÉó×ìËÿû¯•ì4>£ÉÜØ¤)¾ýª huF�^þ0…Ð=-(ÀëOË—üë³õ|g5EÑlþöÍ®ût,X«7ÆF‡TU7°ÃÁì ‡ó©­ÁššYøîŸž²¯O3 ¼ðÄô5ßïYùœÃ'®øy»�5xÓŽ£ ƒ"Øü5[¬�qç� pàBû=ù·�èUÛ÷­¬nxeéûÂGæNúË_ÿºõÀâ…­ÿE±ÞÿúçÝÍZãKOͲ¯Ü¬Ñ€Úå¶ÿ9Øÿkÿ¸lá??ûß;|bÏ�3�þ^S&$ý¸qÏðÄ�lþšÍ–&�aã¶c°íXûŽõÁç)„îi!A>o®xìó¯¶.~^p`å/ôe›ZÌF“E.“ÔÕ7ûy«W¾x[N¥gåí>Ø6C·ï;OļYcÙÕñ£>ûzç™KÙ<’˜2~[ØÐØ ï½ù”R!k³ùo‡Î¶/diµúu?î>>%ÑñCcí;tfûogçLKª«o¬«o´Ÿ”6nTÜÞ×H9ö„+i×·ï=¥Ñ™&ŒŽ›9etYÅm÷ªH%¢gM1[n»£dý–#A<öÈtvuú¤‘ï¯úùè©4�|hzë,‘ºúFøüŸ+\TmŸç¿mבö…¡6‚}>z÷å6ŸV{[ßEpS“Ô.Ê¢’ªòªÆ·ÞÿÆþUšaT7§„ùzy¨O�˘1aȘäÁIëUµ°ÿ¤„ˆKéù^¹ØöQ='·ÄÏ[ÝaÔNŸ4²}!«¡QSRQ/ �ÁW®^߸íè«ÏÎþyó¡ûÎÙÊÓ®€B&~õÙÙ_ü°;Àϳ´¼&,Äwù‹ ÙÑa[.‘ˆ'ŒþÖß×¼øÔœˆÐ@/�#'..˜5zòøRië<計àq#cO]¼þÑß^ôpwe ³®çû{tµsšà”cDè¾×Çù NŒàË—3Ö´/·]Ž+¯¬óöP±'w�¾n¯½ò¨}µ«™¹Ûö¶Î!S*dl¤ŠEB‰DÌŽy›-ÖìÜâÀ¯âòÚ]ûN?:o¢D,²X­§/^ÞÝÞú¼¾l¾«ºƒ!מIˆðþ[Ïø{�Ç–|¿~EÓÏ=1ÇV'0ÀÇÇÛƒ¢(ûˆ"¡Àh²X­”J¥P�t:CyU£T*Q©*•Äb¡T*i}ÌÖÌky¡Á~ùE•¿n;ôìã³%±Åb=r*uäÐ�Î:„Pßè»”¯çÌ.—TÔ¯x»m^«U•TÀÚöºªd³§�|ñ©‡Ö~¿ó_Ÿn\þüÜ+WoÔ7ê’ºs_œ�¿ŸW¶º‚ ìæ)wÈÇÛÚÌ ò“J„Ï,ÿоpDB¤§‡k›Íó Jà£ÿþÏÃU¹hÞ„×^]òÿ]ÿÖ{kßþÃSç.¦W×5�å´A„PßpNŒ  ökƒ²@Àoi±°Ë£F " \\ä“FÇM�xÛä³âÒª¬ìBûw•BJ…|`„ß„”„°�’$à//LÏÊssUyyº.zx {=ª¿qU+húîsV¤RÉ?þúRC£Æbm}�PÀws½õl/OWvxÁE¥<0xƔ䨈`vÚßþôÜå´kîj_�¥�ÍÀ_„î9DQQ‘F£áº÷±X쬯MEÝë ƒÉdº{½;S*•ý÷yÁýSûiË¡�³¢#¸{0‚Bà¼(À/±ï†––’$;|®Bè�bµZ[ZZoÏ‚»�¢(†a¨ÛB�zÐ81 0‚»Çjµ:8�º×™L&ëÍ)LÂî’$õz=û7ž #ô¢(ÊNù{ î¡PØÜÜ,—Ë- EQäM\÷ !Ô‹hš¦iš`¦¹¹Y$rÎ×Nbw›H$ÒëõA¡PÈ~¯>�¡û•íwÜl6[,†aœ•¿€Ü3B¡�¦i³Ùl2™ºòw„Ð=� ‚ H’äóùÎýÔ‹ÜC$I …»×C¡;ÃAL„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0BqoPî!>ŸÏãñø|>û€|LB÷+ö1=AX­VŠ¢œõ¤`FpOH¥R‚ x<û7>¬¡ûû¤J’$†¡iÚ`08«eÌŽnS(ìÓê„B¡@ ÀüEè¾G’¤@ ‰D�€a…Bá´–�ÕÐB*•Z­V™L†É‹ÐˆÇãÉd2«Õ*•J�Ò æH7ðù|‚ $ ×AqI,³Ïv¼) îö™ÍAàÅ7„dl°—émÊñ&N`>Bè嬳` ”îÁF�ó¢¥{0‚Bà¼(À±ànè|X�SÃÛr�ªÕ ´#b` =”ôüa–H¯^ì%B¨O8åš�"¸¥Å, ÷:äíå. îT³¾¡¹M§E"¡BÞ:·cË®cÃú{;Þ¥¾'È©¡×"hpHøÙ~œža+C7×jèu‡/N²Dx:·×oèõÆ¡CbÌfËåÔk ƒ£Å"üvQ„ú;G#˜¢è?ݸôñéÙ¹¥~¾î'ϦMæÌ¥mª-˜™œ’<ø?_nÕèŒöåFź»ª KªdjÆõâ�ö‡+¼-Ü„²;]$%B@ðÜ„²z³žÜrÑòæLçv`óΣ�þ^C‡Ä¤gæ|ùÓž/⢜Û>B¨78Á<9jXôÅ+× Y£OÍ,|cù£sgðÕO{E' �©D ï½õÌŽ½'`ÎŒ1~ÿë§�tòLšÕJu¾—ŠªZµ‹R"9ØÛÞCÕj\’»NR!B%�4×jîÚàÆÍûöºØI…1I1/<=�].(,½‘_ñèÜIpääå¤!‘‰¸Ë}GqÆÑ6›->Þn�WX©ÓSF ”JDßJQ M:©T 7#¸gŠK+W­Ýê³ì¹¹ö¶÷ ð‰. Ïó ’¡é»V“œ0(&ܶºm÷q¡€?sê([‰m»æTYU›~½N]xϾµ·ÿXtThWº‡Ðƒƒa˜Ã'.��ÀãñÚ¿JQÔÑS©Ç$:eþï�8Á×sоÝx�].«j€’òZ¥ìrF|÷Ë!àóÈOþþÒÕÌ\[Í#§3`Í÷{Ô*ÙÄÑñ�ïBí¢ô÷và`W{A@NA�]¨éçëåç{ëªÝ±“W$baltxûšiéÙ'Ï_{zÑdš¦×oÚ—8(là€àŸ6þÛëO‘d뎼½Ü»v=@jë›6í8šq­àw/Ìo“ÂE}¶nKvnq\L˜§»º÷úàhÇÇF|ô·à{N•Õxº«EÄÇFüø¿}O1zd<äå—~½~?D†þy墯Ú›<,:f@È'_lyxzRDhÀõE�ïB©�½¾|‘ƒý¼_U×Ô¯þf;�yàÈÙ¼ÂÊßy©¼²ÂCzõo„îužîê?ÿþÉÿóÓª/~ýýK�ðù­)LÑôç_m¹žSôæŠÇ{5Á)3"9/ „|~€¯Ç¶½gôz#³}ßùíûηîƒG€D,jnÖÕÔkâ"]T I¸º(ÝÝ\<Ü]ïÃkÏþSžî*£Él¶XOŸÏxþ‰Yj%ÁO¼ü¾­ÚÏkÿÊ]ê¿‚¼ÞZùćÿùéßk[S˜¢¨Ï¿ÚríFÑ›+ öíí8Ág/f\Í*\ùâü�Wÿ*“IRFÄTTÕ1LëÈÍ/YûÃ^hnÖýôëÁaña.ªÛžó6 2X­n¨®m (º+ŸÐ9Ä0Œ³žÑýv¦£­Æ§$N›œüÕ;ÞŸÿð´X,bÞ{óâæìq|¨BwèïùæŠÇÿùéÏ«¾øåÕ¥óÖý°“Íß� ŸÎqúżàÁ±¡r¹T,üãWs–ÌŸxôdêæ=g6ï9Óº ÍZ�H$˜;k [8ylšï÷°I}èØ¥Ëé�¾n~xÏB÷ùÙ–Å·Ï ôÅ�„º"(ÀëOË—üë³õ|g5EÑlþöÍ®�àìÜâï9Ì.ÿðëø¿5[…Ι:btRä”~³áú{¿ºtžíÑø”Ä«™ìòc §<¶ÐÁŽ ¶ŠK*lgÁ>ÞîBÁo™A…ù¼¹â±Ï¿ÚºüùyÁ�}”¿àxGG…¼óÚc‹åÃÏ~}fѤ?/‚€ÝûÏÒ4m¥( ¨[°ªjêþõù&ûÍ Ëjm'Ë 1ÁO/™Ñ~Z­~Ý�»‡Ä…�OIt°·½‡a€a˜®œu2 C÷ɰÀ_ÿù�mù£w_òÁIu*8Ðç£w_æñúô90ŽF°X$‹„W3s`ûÞ3/<5Ó×Ûv¼¸ë`ë�ü›‡äîêòÆò[§»?þrp`dÀЄìªHØñ µ �š’Šz±Hد#˜+C ˆf¶aeè!Ñ ~\ó6D Ô-}œ¿à”Å¥•·{|þ¸’²êÕßì\ùâ¼S’ Jª£B}}½Ýö¾ôÜ’©lM¡PÀ4K,¨U û’ú¼¾l¾«ZåxW{é¡l®Õtrƒ2‹a˜f‹‘çy—cI˸ñÉšMíË��ɰ_]þÜœáCõ ·¡~ÂÑNËÈùþ—ÃÓÇ' 2phB´H$ܾçdNaUx°×üÙã„BEÓkÜ»ô±©Y× O_ºÑfsû�ÖÛ+yz¸¶©æßï/ÓQó†2_©7ëU�?¦Çb¤H ç í¼µÐ`ÿ¿üáñ»îÔËÓ­ç=FõŽFph°ß²gfF†A³¦Žªª©ÏÎ)NIÌ#I˜0f¨@ÀwsUM“˜4,æ® º¸(ì',‘^‚&’[/5×jºƒÙu4ÃAð(#¸Ûd2™X,溡>E�ÇcO¿L&“^¯wJ³8Ñ=*• ó¡œX,V©TNi #¸d2Ÿ�ŸBÀçóe2™ãí`wû„ë^ „ú ±Xìø—ùbwæ/B¨ ÇŸÝŽÜU�€ë. „úÇŽÜUøq¡6�Œ•®ê|þ/MÓç.eU×4´I£Õ×54ÝiÖóÕÌ\‹Å¡/Äf¨­oÊÉ+q¤„Pw9~[^ßwMÓ¦3X¬Öì¼b…B >¿®¡©¾AS]ÛЬыEÂñ)C*«êÒ2óØ­B½c¢C�½Á”_TäË~�@À·ýP½ Ó;ÜiÌ€à¨ð ¨­k,(®¨«o6[¬^j·†æãgÒÚTŽÐ;G�rF°£š5ú£§®ØV÷>CG]J»¡vQx¹«c„z¸»�$éïëéæªÒé ç¯\ô9~:M«3°[:~‰]˜:a¸L*±µàíçëÑf�—ÓnØ–I’”JD*¥ŒÏã% ‹ÕŒ06y°HØ:r}æb¦ó�!ä$Ήà´ôœf�nìè!pýFáÅÔì'M€ó—²ªjæÌHa«åä—ùüà _Û†­~Ï�3MUX\$Þ{—¼Ô.Š±ÉƒÏ]Κ1)v8=lð‰D)Iñ|þ­9+B¡@(TTÕ©”2©T2:)ôz㉳W'¤ !âð‰Ë&“Y*ÛN„• ©—‡k›=Ú·éæªrsUe^Ï·?_–É$bQëUa#Ô�9'‚kê«jÙeƒ±¥¼ªuHT«3Ô54Ûªå–WÕ4>cÁf³åÜ•ÜIc‡ž»týø™ô¥O̲eÇ=D!—¶´X´:=A‹ÕU­4šZ:¬É0P\Vpñʵšº[ÄGN¶žG?“6}R’DÜÕ™.Z�Áb±Mf³ÙÚШ¡hÚÁcAõ%gDÔÕ7}ôß_)жRô_þñmx°wjV¬x{ÍC“‡M7,*<ðÀñ4£©¥MÄ…‚§Oÿæ§Ý9y%q1áí[®¨ªU»(»L}Éb±Z¬V¨oh6[,J…Ôbm-ihÒðoÎÜ–ˆE‰¨²ºÎ`0)äÒ¤¡±E1z½ñø™´‰c ‚8tüÒÔ Ã»u˜YÙUõìò±Ó©A^°÷àY'$B¨wEEE�¦ÇÛku­Nú\F}£fÚ„á&³¥°¸âü•œgO•JÅÇN¥VÖ4Ì�™¢�KUJ¹ÕJ5i´î®.Ÿ¬þ¥¤¢¾Ã?þÛóm†#ŠK+W­Ýê³ì¹¹=î§ãÜÜÜ:,/(*·]d³ ò)(®´/|ää¥f�Fçæ—Z¬mŸ·d?|àè7•Ÿ¯g›:—R³ÃB|ÙËq@Qôî§eRÉÄ1C†ÖÛ�HÐ £Ñê½<\ïÅ„î õõGYW(•JGÏ‚ÓÒs6ï9Ã._ÏÛþ‡çù{UÕ4x€¿¯ŸÏó÷õ€ï7ìeOŠgNL\2"{žØØ¤ývãÁŸ˜&—KÙFÚ?„Aí¢ô÷vÑO¯é‡û…û@Ƶ<�Î8rø hjÖWΙ>º®¡ùôùŒy³Æ²•'Ž �]TÈ¥Ó'��Þpää•)㇉E"h7Ͱ°¤ª°¤ªóÔÔ5P­ÑêKʪý½‚ÐŒ:½±±I[]ÛhµZ'�†ŒPÿäh§$NI|àÈùªšÆ'M3M2ƒä¡©ÉuõMêê_Wßäîæ2{úè )CV}¹m@d��·»F«ÏÍ/ ð?_Ï«™¹q1á.*Eû](²×—/r°Ÿ½§´¼úbj¶muëîãD’D›ûÇ�¦–32ÆŒ¬Õ$báÎ}§l/8z‘]HŒ�dßV‡óɽ`¿ZQYÇ.d^/ðtW=u…ÏçÑ4Ã0LD˜¿Z¥aþ"Ô_9s,˜¢¨3ç3v¼Øþ¥O?XæªV646+dbö¤¸±Q³ý·s+^h[8r*=8ЧÃîç¼=Ý&¤$š-–Ò²j½Ñâ/•е:ƒ¨Ý�‹±Èj¥®Ý(‰j%{j¬Ó»8còÈž]‡lÖèJ+j|½Ý�a‚ hú¡i£ '¿¤¬¢Ö6X�ꟜÁ4ÍäV¾óÏï]”²„˜à§—̸œ–}úBÖï^˜_X\þŸu;Øj×nE†ú46i]ÕJS‹YÀwô!Cý�@À×é ٹŞj�™w#¯$(À›Ïç‰Dœ{F„ú§eæ…û¦eäØ�0Ø.  üYSGu}ïW³òý¼„B¾NožS[ßhŽÌž’úyMˆîáá!„z“£œq-ïØé«yEÕ2‰0%)Æd2³—›Ú3[¬g.eM–Kéo¯\TSÛèåáœgs® ¤"8Л�ˆâ—•]èëí.—IÚ×tws­Þ˜0("*"ôzãÉséãG'ˆDB  {÷;º©•aÁ~y…e@àꢜiäésW��ÍJ}{ ûꊛ ðÿù×ç3¯åoÙsÊÍÕåJƑĸÛ«<’šfHòû*¶ªšz�F?rhlvnøùx—V—VÅF‡¶©IÓôÕ¬<•RÆÆnxˆŸZ¥W…L*éðŠYúµ‚ôk�ì}`Tˆý]ê|>O¡�€H$äñHv!Ôo9Áñƒ"€½Ç–D‡û.˜=.ãZþ嫹O/žVRVõïGlõ¯fåÇ ÙùÛÉÚzÍЄ¶{ºâcB>ùb+üí��¹ªo;;Öjõë~Ü=$.||J¢ƒ½í žîê‘Ãb‚Öw’$Éðÿ³—²¼=ÛNbKÍÈilÒŽ=D,æ•Wf iš€ÝÎØª�=DíÒ:&~×”íó×b±îÚÚ¾&;c“»¹Þ'Ÿ9ºŸ8ÿ#ªX$twsQ*dB¡ÀÝÍE«»5.Ñb¶¤f._:ûÄ™«Ï,ž"‹l<{zÊıC ¤Ò¶OFohÔ”TÔ‹EÂþÁ$I²é&—IÙ)*•½ ¸jÖ¤¡Ÿ½kÈ �!q‘r¹D(ŒOI¨oh®ª®7LZ½1,Ø×«ÝGx?/û‰Bý�£LÑô'k6‹EÂÅsÇ€\.�:vðŒ)ɶ U5õ‡�_€f­îá£"Ããc#Ò2rö½Ø¬1ht&àñHŸ ± :§²"„Ž>#¢ë(š¾§œx§gD „d>#¢ï2ñžÎ_„ê ‹!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â FpW1 ÃuBý‹ã±€ÜU4MsÝ„Pÿâx,`w•ÅbẠ¡þÅl6;ØFpW™L&®»€ê_0‚ûEQ˜Â!“ÉdµZl#¸ôz½ãï8Bè>`±Xôz½ãí`wOss3ž #ô€3™L�Æ)Mñ�ÒÊE¯×›L&‘H$ I’$‚ë!„zÃ04M›Íæ––Š¢œÕ,FpOPe0 ×AÝÛp !„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3ø¤´žûíÈż‚ŠN*„‡úNŸ0¬ÏúƒºçàYp}ðéÆSg3‚éäÏÉséþg#×=Eõ_N; ®ª©·Z[c, ÝÝ\œÕr?ôÛ‘‹�ჷŸ»kÍ?ÿãÛ}‡/N›ˆç¡8-‚×o:TRQÏ. ø¼?.[àíåÖ¦NQqEÓ�4âé®V(dÎêRïÉ+¨ðñn{tòñtË+*ÀFuÀiüÚ+� ¦Ï¿ÞèÍ0Ìw÷½ºt®B.µ¯óý/›;û»¥�M40¼}yEU­ÚE)‹œÕ[„êœÁƒé›õ{äRÉÜ™c†Yóíöµßí|é™Ùö)ü²-3 ³ò/_¼ôäôè¨�Î[..­\µv[T¨Ï²çæ:«·!Ô8çr\uMýêo¶@<÷ø �€/ ^xò!�€·ê‹M¥åÕnÂ0LW»(ý½]D8¥«!Ô8Á4MŸ:{õ£ÿnòötyþÉYâ›cR©ø¥§g‡yÿ{í¶ý‡Ï™L-m6´X¬Àçóîº ¥BöúòEÆ u°«!Ôß8:‘ž•·í·³3' Û±ÿü¥ô‚öæLqøÔUow†a¾Ýx°Í«ÿývw›’O?Xæ`—Bè^áhÇÇFú{»ª•£‚Ù’]ûN‹DÂ)ã[çxz¨G�$ ›5ºWŸ�eÛðzNñáS®ŠGë`BèåháªV€m šT*–JDö3ÒD"!¨”r•Rn+<ùºJ!©mÐ*2/Ï.MðB¡ûŒs.Çiu†ºú&ö�ÑÔ¢7˜l«:�¡}ýêÚ†Ë JIˆ >v:Í)}@¡{Žs&¥9qéÈéLû’‹WóÙ…I)qMmÿ’ÕJmÝu<Äßc`t¨«Zùñš-±Bb¢CïÔ¸V«_÷ãî!qáãS�Ò[„ê'œÁsfŒ™3c »¼~Ó©D4wVÇ#¼f‹õ§_ö”Ô¾¶l>�$ý|=gOþã¦ÃKãG„v¸IC£¦¤¢^,öŸõ=y6£+5+ªëÆ'Ç÷vB÷¨>}RZIYÕÖ]'+k›^}ö!ï›ã¿cG'ÔÖ7­þnÏì)ÃG�m \P ÏëËæ»ªU}ÙÕÎMŸ0,-=ïÏ|ëÓî&l{Õuj¥|ÊxœN‡êQTT¤Ñhz¼=EÑxgí]«}ðçg.^¹¶}ßù@?·Åó&øz{Ø¿Ê0Ì�£~;rE$ä¯xþa_�;µÓ¯ì;|1¯¨¼“ ‘¡þ˜¿¡;Q*•ŽF0TTÕÞµŽ—§[uM}aQEÒ°A<^Ç×këÓ2r'�F„#ýA¡{‚s"!„P(•J|d;Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0Bq¦O¿¾ó¾”«o-r=S#¯2À[jIöÔÍ nˆPš¸îZo±Z©Êê†ÒŠZôóðötåóy\w ¡{~qQÏ™iâ£tŸM…nL»—€…!õŠ«’í_¼·?›~)õàë%åµ$A •’4ˆë®!t�éÅïŽ+-¯Þ¶çÔï^˜o_h2µØ¯ …«•¢iÚVB’¤P(pzgzƒ™&–� ¹P+ë¤Îpýšä®§°F«WÈ¥UÕõcëtXˆ¿£uª/¾ßå实7kt›òÍ»N66iŸbF·ZÓhõ«¾Ø¼|éÃR‰è_ŸÿòÒS³¼½Üœ×Y„ú;'Dp›/±ý•þ¾ž�_XöÙ×;?ý`™í%ƒÑôÖûßÚoûÚËóö¾�™Sf+I±xþäw¦/½ŸæûkáÝóâÑ�ú·Wt¥AS‹ùýO~—<¨º¶ñBZ[¸ò…9!A~¶:Ÿ­Û’_\Ýy;ãI•RÞ•=v×ßïŠ� K6°ÃWO�ËÌÊ)~ñÉ™wmÇbµ¾ù÷¯€a€¢iI´.°ß�ýês³C‚|�ëãE¨·)•JçŒ?³h’«‹ò“µ[?^½Ù¾|ÅÛkØ…3“ÀÍŒ¶î3“S’À¶ÝÇM-æÛ¯¨ªU»(%b‘Szë¸\�x“]þ&zYžmu@A�yÉajMëûk¡Û#¡]>1³ÅlI#—K[8>ûróɳö ÓljÚШÉÉ+­ªiœ;+…¢¨†M~qEN~ù’ùä2‰3õ¦ãgÓ½ÜÕwÊ_�[UÛpò\fJRì][³RôËʤ’wþõãŸW.’JÅo½ÿí_™ïãå¾ò/_ÜúÜÀÕñ"Ô7œÁžjw5<õÈ_o()«Z¿õø[¿{”­ —·þž´ÉhؼçÌæ=gØå¤!í/.­\µv[T¨Ï²çæ:¥·ŽÛZäj ‰Oë¹¥Ÿ'eWøð/ V*dì5I®Ž¡>㜮«k¢(\]Uû�\°Z©žšM„ý@„íŽ/Ö'k·Ú–ã†vÒ¸V«_÷ãî!qáãS�Ò[ÇE(M Cêm·f¤ÖðmóÚ¼¥�„Ô‡wía©é7Ò³K–?7[ àÀ ˜ð�×~Ý~låK Ù'0˜ZÌF“E.“ÔÕ7ûy«W¾¸À~óô¬¼Ý/8z`w–’4諟öž:—1ú7"?“¡ÕêGÍsצ ÆXýÝîNê¼ðÄ´°�¡¾áœþfãAÛòô‰#þoÍ–ÔôCât²É˲3ˆ¿úagç�74jJ*êÅ"aÿ‰`øS\e‘N|·”u¯ßmF0«®¡éÛOL5(<´õŽd‹Å:qLâçßì0jÄ öþ]ù¤ÑqS'ް¯V\Z••]Øã>t �Çó÷qïÊýíñyää1ñ¾Þ5µ�ã“c£#ƒ‚¼Åb<¹húôI�9y%E¥Õn®ªþs¼õ|^0BqC©Tâ!„g0‚Bˆ3Á!ÄŒ`„â F0Bq#!„8ƒŒBœÁF!Î`#„g0‚Bˆ3Á!ÄŒ`„â F0BqÆÉ߇r:Š¢Ìf³Åb¡išë¾< H’B¡�ÇsòwÅb#Ô>ŸÏãñø|>ûí­ßñÑ#ì—<aµZ)вZ­]ß–a£Ñh6›{¼÷�H$’H$b±˜ ‚ üÙ1 Ã0ŒÉd2�Z­V(J$û/îrF0BmI¥R‚ x<û7Ùå﹚¦)Š"I’aš¦ CW¶bF¯×w+²pA¸¹¹‰D"§ÿì�\.7™Lõõõ4MËd2g¥0Ž#t…BÁ0ŒH$ …�Àñßa¸ù1V$ †a EW¶2�˜¿]G„——û>÷ÒÏN xyyQe4o¹µ}g5„Ð}@*•Z­V™Læ”ßÞöx<žL&³Z­Ré]¾þ™ÿí�>ܯÜÜÜ‚Uɬ5 IDATèíŸ{¢m6›)ŠrJ³ÁµâóùAH$’ÞÞ‘X,&I’Ïïló·[D";ÜÛ;‹Åb±X$9ë„cÁµ"‚$I/àt»—Î-K¯öá>#‰úòg'‹µZ­SÏ‚jÅçó{é3l{w= ÆùgÝ"‘Húòg'‹�õÂFè–¾ü5î›= ØO0}³/öDØi­9«!„îÁ÷(Œ`„îy½=ŒÈíîîo÷îÏÎ —ãÌ+ØuˆÇ#€¢n( ìÂþÃç¢"‚‚}l/]¸œ% ãb#ó—²jëšfMe_h2µ´Ù‘ÕJÙÓ�$iÛ;Bõ+NˆàÏ×m)©¨·­.˜™l±R;öŸ·•È$Âüe)»|ìLfXˆŸí%Š¢w¼0yl‚}ƒÅ%•«¾Üf[ýôƒeì‚Vg¨kh¶¯i0šÞzÿ[û’×^ž·ÿð…Ìœ2[IÒ�ˆÅó'÷øèB¨÷8gRÚ’¹cG �€o~ÞÍ–$Ä?½dde¬ß|„-Ôë�“Y©�Ÿ¿”5h`˜T*ÎÎ)2šÌ‰ñtzƒD"æÝÍá‘ä_™_V^³~ëño¯±ßWêÍÕ×^žçîæ¯¿²Àßד¢è?¼³–}iÁÌä”äÁ°m÷qSKÇÓ÷*ªjÕ.J‰Xä”w �’²ª“gÓ³óʽÜUÓ&õgË[Ì–ÝûN¥_/ö÷q›=}”—‡+X­Ô‰3©éY…MZC⠰Ɇ‹EBÐhõGN\ÎÌ. ø£“bG‹m3õáÖ?2gì÷ÿ;¨ÑÝv¯N\tàs�ϲ­îØ{B&•L7,-=çbÚ�¢²Ú¨PŸ™S’Ý\Ul…Ôô‡Ž§š-Öá ‘ÇÅaÊ{ŽNgÈ)(¿|5¯¾I÷æò…¶r�ÖpøÄ•ÜÂ*µJ6fdlTx@ûmó ÊOœËÔꌉqa£FÜú7vöbÖ¥«ùb‘`LRLTD`ɃÇ9¼aÛñ ÛŽ³Ë‘¡þ�šUdËJ™D �šÒ²*0šL¶U­ õ?tâʘ¤‰DôÉê_F�•ÏnBàëíÑÒb€·~÷([xæBFumãÜ™cØUWµÒJQðñêÍmú³yÏ™Í{ΰËIC:â(.­\µv[T¨Ï²çæ:å°—_X¶úÛÝ)#¢�3&;·xõw»Þxõo/7ذù`C“vÁ¬Ñ×n}þÕö·V.–JÄß®ßÓØ¬—Ïç“»öŸ×é�‹LÖhõ«¾Øìïã:kʈ¦fݦ]§|Þ°!m{©©mllÖø<64ª¼²nö“/>>Å×ÇݾNEeÝú­'Æ'Ǹªå{]!HbÔðX¸p%û虬Y“µzãÆ§ž]41Ðß«Oé�áœ~tNʈÄønö$~`ÐS‹¦Àµì‚�ÛŽÀæ�DzrÊàß_n€ÝÎN—XVÙðÌ’éAÌž–üÕÏ¿EG…¸ª•mgà ” ™Fk°­€ÕHÀï_œëçëAY©7Þû†-xÚˆÑ#ã`Çžk÷ª]”þÞ®":8)p\ ¿÷ OL ‘Aç®ä^ÍÊóör«©mHË*bÏÙ½–ûãÕ̼äáƒ&�Kôtw•É$ Ó·þvîáYc” ÙÂÙ)Ñ‘Áì9in~ÙÙ‹×ì#8'¯dÈ P>ŸÇîˆu15;6Ò?~ЭÿuÊ+kÀÏÇS.“FEùùx€R![õå¶¢ÒÊȰÀ#'SG�N .*Ū/·�Il;AFmÔ74¯ß|péI%m??Œ-_ÿ´ë±“ûþÝ‹ó�ó?|âÊÅ«ù¶Â¦fmYUãs‹'ú{…ù\Ï-Ë-(oÁRoD‡ûŽIŽ‹•:xüêˆ!ÑAœ<mrJ\\LÔÔ6�¿rã>ˆàþù³sNÿ²ãä/;N²ËQapõZ±mX€= ~îñY;;)àóǧ ùó?¾›6aØÆmÇ¢Ãýò J�&³ÑØÂçñö9ÏŽÛ2 ÔÕ756iàrZö�›ŽØöÅž\G†ø¼²´õößvǬíûÎoß×:ÝáY°R!{}ù"§{{ß‹BßÓM©× ¯°\,øz{�GŒ ¸v£(yø � [ƒãîî.`2µHÄ¢˜¡¶ro/×´Ìû½¤eå�g_RX\žšYôÖŠGíÇ+näF’„ÚE¡vi}: ûÿœÑ`€’òº!q­oQ`€·HÈ/*©À¾©T\ß ùÇ¿zkÅcìÿš,£©å_Ÿ®§hšDêä2)�Gê &v•$ ¥B ¥å5;÷ŸdNЇ›KFv錉CØ �~^z£¹º¦�Ççit¦ÀO¶<,ØgëoççQ4{¥ýÞÕ?vΉà…�~ó�Ç#’‡Ç²«×omÚu’-ÏÎ+›3md‹ÙÅeÕ�©¼ª^o4©R…\:fdÌþciãGЦß[µ�ma`TðÛ+oÅå¶=']]Ç&ÚJV¾0ÇϧõŸ ŸÏjñtÛŒˆ�ûN;ëi=cj1WÔ4¥$Å€F«wQJI²5U YQiu›ú•u"!_¥lû$­âÒš OÛªV«Ï/®~ö1û:¯dG„x{{ºÙ^ÉÈxúmsH º¶<<ÔàîªÐhõl¹Ùl‘üÿöî;>Š2}ø3mûnz#½R „!TE)" ÕŽåÀ£xžŠå~zžê�=xŠRÀß§¢²F*¡‡''�JéKÓ7LAäçî¦)-«¢)ò“÷þ”WPüùÒ�r¹L~íl¹LªV)ÜÝ®WÓ†azáÛߨnjú#ÉûÅ34åØ|âd&M‘qÑa Óå6?³ ]WCã�ÁhÚ4cøàxk˜–æä—Íyz¬5%'÷jLd€ÂæÏb4™SÓ.OŸ8ÔvŪêºÊê†�ànÍJµïpZh —Ÿ�' HŠÞ±ït`7o©T²çàéÚz�¹«ÎN NÎ}Ûl2©äõ3?Z²zñ’U‹æÏ$)ò£%«9ž_4¦B!»ó£�0”58ÐçÀñ‹{�dšÌìˆA±*¥âcÂB‚|Õ*E]}#0×¾ƒâ—Ñ`43g]†¡Àh2;s¾w��ݦéIÒ+1>bñk^}iŠÞ`üê‡-ï¾ú„L&ÉÍ/3”–UQ^Q}%¿$!:X*aÞÿdEeÍ ®GìoÛ²)j6"B´mß™7æOÓh”¶‰ _xD +?®Þf¯ÏÕ•Uµ[÷œzpX/µZ *…Ì`3<Ãd¶¸ºÜpNoß}\„!×ú$Ef³eýÖCQa~Q×{¥3.äÅÇ„Úf+-«²°œØÔkuéraϘ sÃQNÏÌÉ̾:oöx±½bÈ€³Ù²nëaµR>lpBiE�›kóæxÔŒ\&}mþÌ—¬üè˦kµ7>~s £c•UÔ,ÿuïSS‡{{ºžJ¿´ûP†«‹ªg\8¨U ¯»­�%¬…¹L"Æ\öZºÙÂZ3ßœíØÙ-›ÍžozÄ‹À Àó¼Ùt½>Õ£{ÈÃ#zÿç‡-r3eÜ1qêøÁá¡MWÓ¶lqËo-œ^RZååé*žbCDÊàD77�ÅrÄÖIQ4Íj‘¡7¿_ùG°¿×ˆ¡Mm&�²¶^Çó‚X¼†�§Mß㱓û��ŸóôXµM]C„µ÷UÕh_ýóTk ¯Él9w±`ü�·¨””U!ŽÒ³J?Ÿ;°oŒmJQIÅŠµ{Þ;"¬©+’¢¨ÑÃû�ÞŒFÓOköº»ÞÑ„â]œB.]´àñ—¬€E œ.þ@Zæ_7±mHÿøÆFÃÞ#bÉd†¦ÄŽ ÐŒ RÉÅú¯^oOE�ÎH PÈZØÇ½É©Ž�ÝBð÷+¶Š7hüûëubÊ{Ÿ¬rsQ>6!Ùšç�ýÍfvסtë½sînëÛ!º‚eåÕUÕõàâ¢^²tÃÈäž#†ö�k Þ^îÐ,òízë넘0¸5­V·ôç-½"†''µ’í® ÆVþÁóÂÓ°>ï/"4ÀdfKÊ*ÅQÌç/]}hdñ­´ŒK¿n<<é¡="ƒ­aã‡Îdä¾ôìxW—ëa17¯¨›�[³¡#•µî.JƦÂÛ¨Ógç–>1íkJYyÕw?m�‹ ®u/‚Ðô£uîüe�Jâèˆßdñ…£ËҞ盆>š¦¬ß�Þ(6'D^É/KJŒ€Ââ ¥BêãåN’„«Z^XTáãí¹¥ñQ�÷Ùhqç9vv Á¯¼4íjqù7?n~ÿÍÙ•5‹¿øõó÷çq>ëz?>Ërs®º¨åk6òóõhekÏ/þâWñµTÂŒ°ÿš�‡ãc½<ÝZYëõy�‰ã –ý´©õÒÖÔ6–Tˤ’ŽÁ:�aÙÏ[òŠ*§Ž|µ¸©Ã-,ÄßËÓ­w\èšß÷?8¼Ïù¬©gwШÞj±‘ÁÏ×ãñÉC÷ÍhÔõ�Ч©ÙªO¯(–ãöÉ”I™™“ý½o±gÔ^v Á•µ;öŸ™=sŒ5¥®¾±®^[V^-vmØràØéì9O�Ó¨•SÁs\fVÁÿ~?d»‘îá�àåéö“Ù¦1sÊÈF�¡´¬Jo0¶8>‘¦È9O�»Ö¬!^-»’WTS§u½±ËÎ*À¿£†š'Jo�¾™DÂLž0|²Mü$Â: F3-¦–24ÕÍ׳YúŸŸŸd»h¶°éòÇŒìoM±½eÙ–›«fÆœCãÞöçÙÍ’EA>�Oi~žø¼ôìxëbx¨¿í´-VúÄX#2ê8v Á9¹WGé CÇuÐë K–mTȘ1Ó {D`ïžQâi††Ž õ{bê¨àÀ¦YÓö<åé®…BÜlûîn.;ö¤žL¿â塎½VÃ%"4À‹¡)‚ lkÍp*-ûìù|O7õÈ¡ÒÚë(s ’"n;]i^A±§»ºYïBÈÙùùù íÙËr$Ùyó%wqKÚ4*%é¶=f»÷Ÿd:ep¯Ö³![2™ì¶6¶#½^o4oõn]]]§•ä>àëëÛÉÇ®¬¬ÌÕµ½U�Fc‡Zp³Û+P‡zá©–/9›5¬oG—ä¾Äó|çT&ðÑpö%Bg;;Þš�UW„®ë´Èˆ!ؾxžïÌcgÇ}áCìjb2™H’´ŽãîP,ËšL¦V2�$‰aúÎéõz†a:íØéõz{Õ¸±ŒPŽãAè„IEîdG ƒ£³ÛÀ`0tæ±#¾]6ˆ!¡ëX–m¥‹Ì^ŒF#˲­ç‘Hî“9:‡X3íœc§×ë9Ž“Jísg†`„š�$©ÓéÄÿ;¨>Åqœu­_ÉR…QøÎ‘$Y]]Íó|G;žç«««e2™½"°-¡ë$I}}½J¥²X,Ǒ״s³bŽx +B}}ý�Ô¡är9Ïó·­/#MÓ%%%^^^Euб3™L••• …B.·ÛÌ‚º�T*ÕétA0 #‘HÄ»`Ú3ɺ³Ùl±XA¸ÃkX‚ ”J¥Á`0›[~-jF"‘TUUQ¥V«år9I’A´ó؉ÃÝ ƒV«å8N¥RÙw²nÍ@èþ#V?Å íJA$IÒ4}õ2ŽãÄð�c$î„Xi›#ìrì€a™L&“Éì;èÂ>·f tÿ!IÒyšb)Š’Ëåv¼øEλãBÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈaðî8„œÞ ìp$IŠs†Ø}Vx Áµ€¦iŠ¢hš'hÿ4=A°,Ëq\›f>§éi+©T*—Ëe2™85Gû§éÁh4Š3õH$¹\~ÛG˜ß9 Á5§P(‚ (Jüß.ŠÓ'ŠÓnéõú;YK�N‡“UÞ9‚ <<<¤R©Ý�Ã0*•Êh4г+•J{Eal FèjµZœOR"‘0 c—™¹ÅËX©TÊ0Œ jµúNÖ2 ïA>>>âß¹ƒŽÃ0>>>Ç †öo¹iûöÚB÷…BÁ²¬R©ì Ç¡S¥T*Y–½íœ³bûoG”á~åáá!ΰܡÇN¬h›Íf{=›C0BMhš&¢æ„{CÓ­5büm©T*6wôŽÄYƒ¥R©½¶#ÔDœU½�8wBÜKë�‰‹¥CËpŸ‘J¥�yìd2™V«µKÄÇZ0BMîî‘wç¶µ`Ö&âcŠ:g_$IÊd2{ Á]×™_ãÎÙQ!^ÁtξĊ°Ý¶f¯ !tÀ|�ÂŒÐ=¯£›»»ûÛ½{ìì‚�FÓÒŸ6ÕÖ]sUMÝÇ_ü¢ÕêZYkÕÚ�9W®Þù^Nœ:¿eû‘›wmû�çy³Ùb›b6c·BÈIÙgDÄé´¬Šªz�ZiMá9¾¸¼–oõ·"ërqLTðÍé…¥Ÿ~·Áº¸äƒ¹â m£¾ª¦Þ6§Þ`|ãýlS^™3iÇžÔÌKEÖ”½#gLÝ–OƒB�Ä!Ølaw8;vt¿sç/s¿â·}Ö·þÅOOéê¢ú|éÆfë.ÿuÏò_÷Xƒºy¼òÒ4 Hò¯/M.*®XµþÀ‚·¾¶]åìµÅWæLòôp€W_šÐÍ›ãø¿üß·â[SÆJ”¶0šZ¾WRVéæª‘ˤíøè·TXTvèØ¹¬ËÅ>ž.cFö‹ ÓMfË–í‡Ï],ðó˜ðÐ`/w`YîàѳçÎçÕiõIñá£Gô“I%РÕí=x:3«@ÂÐCÄ ì׬jñ竦>’²ü»o¸W'!:höã㬋ÿ8¨TÈG ë›vîÒÉ´ìü¢Ê¨0¿± òpw3œ=—½ûÀY³…í׫ûÈ”>ØLyÏilÔ_Ê->�~¹º®qѼǬé¥åÕ;÷Ÿ©¬nˆ õ=,I!oál¿œ[|ðx¦¶Ñ�”>¸ÿõsìØÉó§Ò¯È¤ÌбQ‘A�ôIº;„àSg/@�î!ïºjÆ£)¯Ì™55 ?þºûÅ'ƨT pwÓÐ4ýêKSlWüú‡M#†$ôèr½4tÓ,DÝ|½L&3¼1š˜x45£¼²öѱCÅEw7 Ëqð¯¯~kV¤ß¶ýmëQñõ€Þ‘7—¹àjé§ßnˆ ó›;ûÑö}ú\É+úê‡-Éý£§=24+§à«7¿þ穾>°ú·]5uÚ)ã†\ÈÎÿrÙïo,œ¡�Ë~Xµµ¶¾qØ ž4MnÞq¢Qg˜1etƒV÷é7¿ø¹�{ ]}ãÚ͇šêÛ;ƺ—ŠÊÚÚz]p ß¬ÉùkãcÊ+j6îHMJènÍÆóÂésWžâá½OíØvÌðÞ’¢;÷Í�›^›7]"aÎgå®Z·ʸÁ ¹tóÎ�:ããRìþ7Aª´¼&-3·^{ÃÔõ ºÿ®ÞÝ¿WÄ >ѧÒs–ÿo׋O>LQ7ü¾–”V­Zpø Xw7ÕÖÝg’Ü/RÏdí;z~ܨ$­ÎðËÆÃÏNàÓ©©Ëho6™-;÷�Ü/æLZ–¿�[b|Ó—_¬ÇùwóvѨ¬™½<\ëmW§(JÂ4•�$I±VÛŒ¼@£V6hõÖE` ¼üâ£þݼ8–{ýÿÓ'Žé?d`Oظõ …má>B7WM€¯{�ÈÀ»üØ­ ð}á‰1âOK÷ÈàãgrÒÏ_öõñ¨¨¬I;Ÿ/ÖÙcz„]Èù9=óò ~ñ£‡%y{º+•rhl4¬ßv|⸡µò± ÉÑÝCÄ:iΕ¢c'/؆àK— {LJÑ4eûvòlV\÷€žñ×uŠK+ÀßÏ[¥TDEûûy€F­üô» ùWK»‡í=tvH¿è}ãÀÕEýéw†J´V�Q3Õ5õ«~ÛõÜão®Qê ¦ïWlž5etçÿõ"Ã"Ãö*¥7AÁ�>Ÿ|»!+§ ¶G¨íŠ©g³£#º ”–Ûu ½ïh‚ �¸0:9!!6**ëNœÉ¾B°s»ö†à“§/Ô6è·ì>sŸÛzæÂ¢²ÿü°Å6å÷í'~ß~B|íå®~û•'ÄׂUÕuµuZ8�–õóÚ½ÖUĆˆî¡~/=×T�ýÌ¦áøæÍ¶X Ö¨•¯Î›~GŸ°í†¶†E C{{ht:\Î+–I™n¾^@QdL÷À ÙùƒúŇû[×õôt£Ñ$—Ic{„YÓ}}ÜÓ2sm÷’vþJÊÀÛ”¼‚â³™ùo,˜fÛ^‘�SÐ;>œ$ 7Wµ›kÓì0în0è�PX\Õ;¡éOè+•Ðù…%‚oE¡�U×4üó³o,˜%þjŠ FÓGKVq
œAeuƒ·§‹x2H$LT˜ß•üÒØ¡W‹+6í81õ‘d/׌¬«�ì-æò÷ÑÌå5M54ƒ½Åôð¿õÛNLâøf5è{Žs»ö†à„¸ˆÐ�n{ž6š,™YyÝü¼–þ´¹°¤Z|×Úüé{�M‘Ÿ¼÷'1ño‹œ4vP¯„(8yæÂŽ}§­›åxþŸ®_ÇD…¼µðz¸Ü°õ�»«zdJ’5eá �øû5�.4M?5ã!ë�+›¶±×lwÇh2—TÔ%ˆ€­ÎU£ ɦøè¢Væ_-o–¿¤´J*¡]4ÍgÒ*¸Zàm]ÔjuW ÊŸ�`›ç䙬ÈP__oÛÄ3W&>4¸ÙÖÊ+kÀËË <ÝÕ ×®˜Í¹LRS«½«ÏÚ%ÈeÒE g}øùªÅKVY¿É£éÃÏWq<ßì»íXj•¼ ¨Òº(P]Ûuõ�ÕÚ­^­”³¯TÈÄ …uš¡@!oJW*d‚ƒQlT¼w9ç±koÖ¨•å5ç.¾±`úÖ�Gs®Îzl{Óµ[?ÅH�WPüùÒ�r¹L~íl¹LªV)ÜÝ®WÓ†azáÛߨnaú#ÉûÅ34åØ|âd&M‘qÑa Óå6?³ ]WCã�ÁhÚ4cøàxk˜–æä—ͱ¹ÈÈɽ °ù³MæÔ´ËÓ'µ]±ªº®²º!$¸[³Rí;œèåçã ’¢wì;ØÍ[*•ì9xº¶^gˆ“sß6›L*y}ÁÌ�–¬^¼dÕ¢ù3IŠühÉjŽçÍŸ©PÈî|ÄhGe�‰ >rêÒñSüý<3³òÏe]õóv€ø˜°� _µJQWß̵±'Æ`4363 C€Ñdvæ|ï»ö†à’²Êkwó<ÿã/ÛŠJk‚ˆ Ôë�¶yä6-/,ÇÛŽp°áåÞò$ªÍFDˆ¶í;óÆüi�Ò6qá �ˆaåÇÕÛîöÙSeUíÖ=§ÖK­V€J!3Ø Ï0™-®.7œÓÛwaÈ€ž¶‰f³eýÖCQa~Q×{¥3.äÅÇÜШWZVea9±©×êÒåž1!ÖÖvQzfNföÕy³Ç‹—¨C$˜Í–u[«•òaƒJ+êÜ\5íýä÷;¹LúÚü™.YùÑ—M×jo,|¼ÅñÐÍkÚ„AŽ�?vÙ§4U IDATúR¯¸�Ę –kº:T«p­ÃÆÚYÂZ8�Ë$b̵V¤ÌÖšù>àlÇ®½!X§3vóq ôñötã8îHêùc'3ÿØsÚ6ψÁq�<<|Åá F£éÇÿí¬kЋïöOŠ…[ß²ùÖÂé%¥U^ž®â™!6D¤ NtsÓX,7LhM‘ESЬézƒñû•û{�ÚÔf¢Ñ(këu*ð>-î<Ç®½!Øl¶lßw68À÷è©‹=cB³r ZÏŸWP¼fã¥\öü“ãþùÙꤞÝ÷‹[ºr{AQùÈ”>ªkÍáÏ/þâWñµTÂŒ°ÿš�‡ãc½<ÝZÙøëóÇ,ûiSëŨ©m(,©–I%‚u:òŸ·äUN?øjqS‡[Xˆ¿—§[ï¸Ð5¿ïpxŸóYy‚ ±pòÌ…•ëöuóðör;Ÿ• j•" ›÷úÍû¥f ím4šÄt_ow— Ùù½âÛíTÛ¨W«n¨§\¾Ræ§R6Õ©‹J*¾þa“ÙÂõîÙ=+'H‚ˆŽ ÝøLn~i¿Þ=jë´›v¦N�0D"aìþ7¹_9ü ,*,*ç8¾¦®‘ㄼ‚R ö+,*ß¼35¹ ì;’‘äëã™óÖn9öÔcÃÂBºõMŒZºrçáãn®ê]Ò“ûG‹Uàäþ1»¥Ëåm£!ýbáì£û;‚“»ö†àêšz¥\âïçU^Õä»çÀ™‘�z½©¬¼iPD£Þàæ¢±at×±³™ù½ãB§=:Bví¶´è¨Ð?=õðŠ5{ŽžÊzxdŸ�}ãàÆ�Ð?)öÔÙKGNdL;ô¦"\÷Ñ—k­¯ã¢C[Éä÷êÜɶ}zvt&=;¯¨Öl¾>£Åó§ÉeÒ“GmÞ~xͦƒ~óž{D©� ‚°rÝ~(,©þöç¦&ì~‰É¥fÀÁž¸(¦Ï|4ÅÕU}&#wí´AkPÝx©˜™•×3öú¥À޽©:ƒþ»z§˜"•пóBb|dYyÍÚ͇<ÜÔOLÞ3þ†ËtOØ´ãDeMÓˆûåköÀ»�áëípðøyA€^qaCĉ4j…·‡Zldðóõx|òÐýG3uÆA}£ôij¶êÓ+Šå¸}G2eRfæÄä@ï–v‹ì ½!8¿°4:2@¥’K%´Ÿ�çÌ)£Î¤gŸË*<—UhÍ3bp¤eääV¼ðø˜ØèæMQÁo¾/=;ÞºêÚBÓÓ€>1ÖˆŒ:N{Cp|LxP /EQ‹ßž-¶yy¸N;pè ¦òÌ1bŽHé3d`OÛ9B½­ÃªrÙıCG¥ô¾DE4Ÿ¾ÇÝÍeÇžÔ“éW¼<Ô±×j¸A„x14E„m­N¥eŸ=Ÿïé¦9´CZ{åbNARBÄm§+Í+(ötW·x·!BÈyùùù ·ÏˆœÃÒŸ6�JIºm�Ùîý'†Nܼ„Z!“Énû`c;ÒëõF£ñVïÖÕÕuZIî¾¾¾�|ìÊÊÊ\]Û[ÅÑh4øøÎ{Ì OµpÉy³QÃúvtIîKÖ!�°£NØK×!Bg;§›²¡ûC§EF ÁöÅó|g;;î kÁ51™L$IZÇqw(–eM&S+H’Ä0}çôz=Ã0�vìôz½½jÜX F¨ Çq‚ t¤"w²#†ÁÑÙm`0:ó؉ß.ÄŒÐu,˶ÒEf/F£‘eÙÖóH$÷Éœ �C¬™vαÓëõÇI¥ö¹³C0BMH’ÔétâÿTŸâ8κ‹Ö¯d)ŠÂ(|çH’¬®®æy¾£�ÏóÕÕÕ2™Ì^ ØŒÐu‰¤¾¾^¥RY,ŽãÈkÚ¹Y±G¼†¡¾¾þNêPr¹œçùÛÖ—‘ˆ¦é’’///Š¢:èØ™L¦ÊÊJ…B!—Ûmfa ÁÝ@*•êt:‚ †‘H$â]0í„dÝ‚Ùl¶X,‚ Üá5,AJ¥Ò`0˜Í-?‚5#‘Hªªª(ŠR«Õr¹œ$I‚ ÚyìÄánƒA«Õr§R©ì;oÍ@¨bõSÚþA AA’$MÓwQ/ã8N ß8FâNˆ•V±9Â.dž‘Éd2™Ì¾ƒ.ðÖ „ZF’¤ó4ÅR%—Ëíxñ‹œvÇ!„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡Á”ïMÓEÑ4-Þ„nÇgI¡ûŒ8ÉA,Ër‡3Ÿ![‚ï†B¡ ‚¢(ñÿÎyh ºw‰Ç�$)N»¥×ë]"ä,0v´™Z­ç”H$ Ã`üE·E’$Ã0R©”aAÔjµ£K„œ†�¶Q(,Ë*•JŒ¼è.P¥T*Y–µïœ³èÞ…q¤ hš&ç Dí$>ö†¦±a[p[ˆ³n·s~„ijHì¦C]Ö‚Ûàîy€ÐͰŒDPÚC0² <‘�σ¶Áo² <‘�σ6À&`dGx:!°WwÜþÃgý½ÃCx^àx®Ù»I’$©×Mf‹mºTÂÀ�4EI$Œ]Što1ŒU5âk_OéMŽ\·qw|lD÷ˆqQ„u÷$%ö h–3ëRޥ˅N±Mܲý «‹jÈÀÞRz„ÐݲO>ŸU —IÃCÎg]ù~ÕÎfïN$y`¿ø=Oí>tÎ6=¹_ô¡Ô‹¶)#Ç=òðP»é^ñÓ/[$ Ý»g�|²BLyñɱɃnˆ•EÅå¶3[ØÈð`“ÉlaY(¯¬Ù¾çøãÓ’$•Ц¡r …líæC¡!Ýâc"Å”šÚúµ›Íyz|ç}*„Ð�±Ÿ¬¿�ÛkógX¿ú~ƒøbü˜!ãÇ ùb麕Õõ³{ º¦þPêŽó¼XóýcçQË-nŸ/)«tsÕÈeR»—ÖŽêëµçÎçì=tº¬¢î›O^µ¦¿ù�o ‹«¬‹óž›Ø¿O¼øºº¦nÏ¡´W_š²òÛ¿À–íwîK< ÑÚVh¶XVüº-e`Ü©´K<Ï lßwÚºµ#'/@÷P¿ÿ{ý¹òŠj–å(’êÓ3ü«ï7üí¯O‹yö<éªQtóó*.© (Ò×dzcÿ¡;ÖÞ¬Õê´:½Ñd®­Ó–”U@qyí‚·¾¶ÍÓ;!,,ÛØh°°¬Þ`óó<¯þ}™5çˆÁq7ï¢àjé§ßnˆ ó›;ûÑv–¶C\-=x4­ªFÛ,½¡A?rHÏ^ ÝÅÅÀ_ë[ûž ôóˆ�·¦$ìµá�#Gާ‰ažç\¹©º¶aáœé:½ñÃÏžÿÂcɃÿõÅ/Ÿ~0Ÿ ˆ7ÞûzÚÄ}“âà»7\Ê+µnêõ÷¾³-Æ›ï¾î¾û’�?yW%žƒ§‡éEQÔÍïr·ïðÙ‘C“pü/jE{Cð™ôìõÛŽ@aIõ¶}gž›õÀ­jÁ%%•Ÿ~· ‹«àÜÅyñQøàÍg¤R¶ï:Î üÍ»psÕøº÷ˆ lgQ;ZB\÷„¸îë6îÞ}ð¬5Q„úFC�ÈàÄ„ÍòçoÛ{ò…'ÇÙvŽ»¸¨gNñÓÿv†u ð!-3W«3>ÿò¿ Wlè›|/æ|vþ‡â‹%Ë6À² Kþ9ïÿ^®•â�¦­ÎÛËÝ.@euÝÚ�û2.äÎar³(ÌqÜK×eå$Ć{{º9ª„Èùµ7§ é�2¤÷Wßoè“Ø½ŸØŒ —oU €ð`ŸÀnž4M)ò�;Nˆ‰oýóGkÎkÁµòÕyÓÛYNG1™Ì‚ H$LYy•F­T\k±-*.ÿpɪ„˜�~IÍ?ò°!}/dçüåê¿Ì™ðÑ»s Óß­ytìÐȈà[íH­RÀÂ7?·­†Ï{nb�È�õ[ö͘2&ëRÞw?m¶m!AíäíéöæËO.þ|ŧ߬yùOSiº) s<ÿå²u/å/Zð8Æ_Ô:;·ÇD…}ô·ÙÍ÷as�ÙlQ)›Â�››föÌ\]TUÕu.•�·C·pAwO3šÌ°dÙzž`쨾Ó&=ÀóÂ’ïÖxyhN¦]~bÎû-®˜ò¯ÿüï“÷çiÔ*�Z%•0®.ÕÕ¢²~¶¢Y槦?8 o‚øzÞs»GÀŸ, °çPúÔGGwØGìÒ‚}ÞXøÄâÏW|ömSæ8îËeë.dç/ZðxXH7G9;û„`ŽçÏ]È͸˜›‘uµÅ ¯¾4xž/*«îX[ßAlÚ~ìѱƒO§]Š‹ m>¾ÊÙ‚pÛ±œÂµœâ¢J)nÖ˜îÁ®²r?ùz­Ÿ�gÊ�¤/NÕ¨•eUPYUûÍò-~v‚»» œ;ùౌšQZ^)“J>ülyföUøÛâàÝמ²°Ü²Ï_ß¶ëH}CãôÉþûË•,ËY÷È0´8¦� ¸V`k¹q,ªÝx/Zðø‡KV~úͯ~nÒÒŸ6‰ñ74دõ¿6 íÁé—þØs²¬²ÞÝU9|PÂØÑ‹J*‚}I3šÌ�(fsѨŠK*ò®V>˜’è³ëà(¸ZZY£]ºb;d^*ú߯CR ýñ;/´³HN…¢¨”!}Ä׉ñQ½ãÂÎf\J’äßÍÔj%�f‚ z'Æ0 %¥U ¹„¦©@_˜5uŒAoüéÛÞWÜ Ñd™û×ÍA€ƒÇ2tÓÀ¾×[3>ýæ·Îÿ˜]\p Ïkóf~ôŪ¿þßWÇ‹ñ×Ñ…B÷†ö†àF�Áß×�e¹†%õï›_P²rÝþÿ6[©�™-¬„¡€‘0b3™�§føÐ$¹LúÊÜiù¿o7ï8>*9aè Ä•kvõˆ èÓ+Úȹi4Êâ’Êf‰…Ee!^bü“Ù¬R\ŸóÒå–å$Fo0e^Ì êÆ0Ô‚§M=§ÓGï·jíõ�ØÇ¿õò¬ÝC`Ñß¿ÔYBƒý-˜õå²õ󞟄ñÝ©ö†àÁzÐóú°‡òjµR&àMM»œšvÆŽLz`D )jÑ?þ n.JPÊ¥=ã"(Š" I’¢(Šjá†i­V·ôç-½"†''µ³´�ïjQ™‡»‹Ø DzܥËE ±¡¶AØ$mTÊõ�¦×Õªë!Ø×Ûãб4È/,‰íªTÈGI¦Ù6kj KªeR‰“‡àËW -,[QYka¹‹Ù¹¶nÓ޲ʺ‘ɽ<=\��̬ªÕŽ>Àv­ÔSe•õ}{ÇZS´�z•uÑËÓ­ªºô“§‡kƒ¶ñæ]7hu ×Ìöÿ½ Ñ(à½�蘊n ã/j+{†`ƒÑt63ohÿè­;�jÔJŽçy^ ÉëãÒ9ž7[Xà8‚XòÁ\XöÓ¦¸èÐ�ýâ[Ülp�ß«s'»»¹Ø±¨áû•[ŠËšæyøçç«àç¯ßšûÜc{¤žÍÈ)(ªˆ xoѳ¶#s K¾[±uÆ£Ãl?]EU]dØõžI‚ F¥$­^¿·¬¢ölfÞâ·Ÿ�Š €šÚ�Þ(¾öôt€âÒ •B*¶2€8RÕÍUóîkOɤN}c!B]V{C°Þ`¬¯o4™-$Iì;xZ­’=:nXn~Ѷ=©—óË�žÊ³=˜’Û#4¿¨ÊvðÊ5;.^._‹Ýq0÷é±Q‘ÍG¿øû´³œ�àÃwæÞœ(‘0�üÐèÁÍÒÍfËÑé+ÖîîÛ3r̨Ap%÷*MSf‹åÂ¥«)ƒ­9?ùê—Ú:]Rψø˜ð ß×ß[j»�󗚆 |ý¯—ÏžËNŒ €ú†F–eÍf A ãáîZ\R^QYCßwcþº×µ7ët†O¿]ççíæéáràè¹§¦?H’DDX༰@ƒÑd0Åñ°*•¢²ª616ä™™€ ¹ùÅžî®üMãr”Ê.ñd¶Üü¢�Û�¼øÔ¸¾½cÅXÓÏçløã(DGÄöˆ°æ|奙n®ëîÒO[¾·B&“TTÖ=4z ¤�Ëúñ;|ÝÃ຺îïÿþY¥�Nxp`G.„P›ùùù vÙV³f‡û�L&³ãƒoY–kV-å8Nà®ëª<ÏãDà÷½^o4] äH�ÆžmÁ÷wüÙ1ÌÝj[œíåÎaü½‡ˆsT!„_Ú¶Áo² <‘�ŸáÚ&“I¿ìè‚ {˲&“ÉÑ¥@އµà6à8NqDBw O$d…!¸mX–Å.ÔNF£‘½ÅbPWƒ!¸ H’ÔétâÿX…Aw�ã8ë)„ݧ°-¸­$I}}½J¥²X,Ç‘×8º\È©ñ<Ïó¼Øþ B}}½ïWD€!ø.H¥R�NGÃ0‰D¼±ç~E·b=CÌf³Åbã/²Â|7$ Ïóf³Ùh4ÞÉ<#‚ ’$išÆk&d Cð]"IR"‘8º¡{þ #„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡Á”ïMÓEÑ4-N�ÓD [§é!‚eYŽãp¦`d CðÝP(AP%þ�¯ Ö‰3U’$)Ïóz½ÞÑ%BÎcG›©Õjq¾A‰DÂ0 Æ_t[$I2 #•J†A­V;ºDÈY`øh…BÁ²¬R©ÄÈ‹îEQJ¥’eY…Báè² §€q¤ hš&B.—;º èÞ&“ÉĹƒ]äxx´�8ë6AØù†ÚC<‹Än:ÔÅa-¸ ð‘È^°ŒDPÚC0² <‘�σ¶Áo² <‘�σ6À&`dGx:!°WwÏóf k6[Ì‹ÅÌŒ¦F�¡¡AWY]çïçÙ/)V̦ÓN¥e¥ î%.æ”d\Èûà`’¼¯ú%¶í:à‚�}¡ÖÙ!FÔÔ6üýß+Å׆æy^©�†ûz¸i¼<]UÊÆ?nÙ•êçãÑ="?W]£­oh´Íàꢺ§{Šuú#'2V­Û«QÉG í5,¹�»›‹m­VWVQÕúFhš öïÈb"„œ‘ŸŸßÐÐÐέ Fš¦iš"â—u»TJùø1CZ̹edž¡Ñ¿¦¶þ½OVß|-¶øígrY³Ä’²J7W�\&mg9ÛI&“)•Ê;ÉYPXrìdÆŽý§y^˜=sÌÐÁIÖ·ÒÎeýûëµ­¯àëþá»/µ«¬Èéét:£ÑèèR GÒh4í ÁyÅŸ/ÝxÛl~v\ꙬԴËâb�¿‡F)¯mн6oÆm×-¸Zúé·¢ÂüæÎ~ô®Ëi· Áµu 5µõÖE“Éœqþr|lDL�ðVÖÚ¸ußÖ]©ÿúû\¼oõ^"žƒ§‡éEQÔÍïr·ïðÙ‘C“nuU‡!i4šö6Dúû¾÷ú“,ËYS6n;¬TÈF¥ô±¦Ð¥PÊÜÝ\†'÷€µäVˆo-xëkÛ­ÍnBxh@³]¸¹j|Ý{D¶³¨�àlzÖ¿ì°.öïÝ}Þ ÓÄ×,˲/“Jš­rµ¸ì·-G¦OLÁø{Ï©¬®[»q_Æ…Üù/Ln…9Žûb麬œ‚„ØpoO7G•9?û4D,þ|UYeý­Þýüý9ÖŠ€Øp<ÿ¹ y%›w�zÑSjµAXøö7-†`çqç ðËoÛOœÉúìƒâÝtËWm.,.ë•glûè´�ïÿ{yIyíÌIà ‚5¬?Ã`Þ½¤àjùâÏW„‡ú¿ü§©4Ý…9žÿréo²ó-x<,¤Û­ÖÅZ0²C-ØêÉÇF$%öÛ¶à윂¯—oµÍ¶m÷ñ˜HÿF�!4¸¼óñ 18ßëãsôzcyeµøZ„€n>PU£½Z\èï»~ÓžýÇ2þúÒTÛøk0ÿ³t-IP\Z™ž™{:={îìÉͺï�3 ôycá‹?_ñÙ·kÄ(ÌqÜ—ËÖÝ6þ"$²[^¹nßêõû€ãØ4ø#ë±ÔŒÔ´Ë¡^ë·™:a(<<2I.“€ ÀÚ-GìU˜"­Ær•¾ÿéJëâ“SG‰/öì?I’Ä�c™¯¾4-6:ܺz]½vÉ·¿Ö7èÞzå©¿ýóûèî!“ÆÿϲßÞþ`éÂ?=ÜÑŸÙKP€÷¢�¸då§ßüúçç&-ýi“CƒýZù‹ã‚P .4™LíÜÊáãøôŒ1 ïS[[î?ïùI ïàu*=g̈¾A?™ù¿�‡ ®Aß#(*2H&¡O§çÔÔjºy‘$è+sô°‡VÐ4-‘4oÌyz¸N7tÒ¸¡‰±aû�¤Íœ2ºàjéÕâÊœ¼’ú†Æ7Ί ²f¾˜�ûÙ׿šL–×ÌòötߺóhBLXTdÈ€¾ñ%¥å¿lØèíëãÙY µ—«‹*6*tóŽ#»œª¨ªãïmײX,ÇÝ6º�I¥R»Õ‚Wü¶oÅoû¬‹{gؾ+±S¦OL>yöRlTpúùÜôŒË©i9�:cUmã•  Hr�Ÿ—ë=Þ+µuç‘° ïn¾^� F£ÙßÏÇšaÏþËÝ5¸o�ǧ=ÜlдTÂ<ÿÔ£ ³å‹eë?{ž‹FÕÉ…Gw-4ØoÑ‚Y_.[?ïùI!A·�¿‰ì‚9Ž›÷ü$ëâúÍû• Ùƒ#XS,V"ažbœJ¥8yö’«‹êŧÆoÝy´Qg ò~júƒ‚ ü°jCS�>7o_«Õ-ýyKáÉI7¿ëT ¯–¦¦å¼2÷1kÊÔGG¿ù�¥[¶|dì01%1¡ÇŸd’Ázµ¸Š¢žš1nØàÞï9!A~¿;‡¢ð¦ÔvÁù…¥_|¿©YâÁ­¯'=4 eHo•êz�¯¸´2#«ðÙé£6n?¾ú·ÝEjuÆyÏMlqچ’j™Tâä!¸®^ûÝò�ñ=‚zÆu·&zyºÍ~ü¡¯~ؤ�KG¤ô§(ÒÃÝåVñWDÓTxØ=0Ý ã/j+;„àðЀ%̵.¶~wœ¨{DÐÛ¯<α\ÏØ²½G2`Äà8…¼åVàà ¿Wç:û8�Úº†�–¬Ô6þ:of³¡øú& ¦~ÙqòlÖ3³Æùùz9ª�!gÓÞ|1;ïÛŸ·Ýœ¾ûÐ9ÛÅggŒîi]<›ž}2-;ûJ‰Z)›6aˆÁhÞ¾ïÌ�c¢Âý;ÔÛ«ùPöÿ(œJQq¹Å¾ù—'Ü\5¹yEPSÛ`(:|h_o/·å¿lklÄGç"„®kï­ «7Ü~x¹\&•HØøÇ¡èîÁç/æEwŽdht:CVNþÕâÊ %;íÄiR©´•[3Ì‹„aàç_¶ì9œîé¦~vÖñÑÖ ,ËYƒ²­/¿û5ep¯›æ ÔètºöFB÷4;ÌÑ¥Èd2|ð-²½^�wÇuq�{Ú†çyGÝðDB" Ámƒßdx"!N Ó&“‰$Ég&D¨MX–ņ`X nŽãAÀ›JQ;ቄ¬0· ˲؅‚ÚÉh4²,ëèRÈ‰š¾ ¨IDAT §€!¸ H’ÔétâÿX…Aw�ã8ë)„ϱG€mÁm%‘HêëëU*•8Íy�£Ë…œÏó<Ï‹í‚ Ô××K¥Î;# êL‚ÛL*•êt:‚ †‘H$âíÈ8÷+ºëb6›-‹ ‘†à»!‘Hxž7›ÍF£±•yÜAI’4Mã5²…!ø.‘$y«éÛBèá2B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈa0#„�Ã`F!‡ÁŒBƒ!!„C0B9 †`„r Á!ä0‚BÈaèÜ4MSEÓ´  þ�º ‚ ÄÿY–å8ŽeYG—¨ey�²?®ªOW+*õ¤�OØ®J @N�—‚OòÐ?¨ U;n_D~~~CCƒÝ·«P(‚ (JüŸ$±ºÝ¥ñ<ÏqÏó‚ ð<¯×ë]¢Xxâ›lßÍù  hH ù° Ý9g8[œ èžÑg‹ã㺔’ÒJžçü}@Û¨S«”°eûA…\6"¥˲ Z�»›‹£‹Ù…B—ˆ¶¸/4˜`ñ¹6¯¸c2σwÎt@™î‚�È�«6í9”Þ,qÞsû÷‰oe­ã'Ïý¾ýØÌIÇ èõÊÛÿyyÎcÑQaå5jµÒ2²¿[¾ùË�^–ɤXtd£‹…_–“aG&Ôüµ…w> ޶¼b²ô …»Ü_ÌVG|v Áwi܃É/Ô7è&M_.ý­wB$E‘9W Ä ‚J…Ì¿›�íZ“&ŒôñöX¶òµJùÀ°¤_Öíúû/ˆoñ<¿uçÑ1#ú`üíL]ívŒy½€¦à§4˜Ø¾Ùå×ßZ<àÆŠÞÔX:ã†Õß~Þ~¸ù6_YÿÍí ò: ÁNÄËÓÍÍU-Bp`7�J–å>ÿn½mž° ï÷Þ|±ÙŠƒ$†ùùx{ÔÕ7þ¾ýØ•¼"1ýLúÅ¢’ê—çÌ„:†š„‰‰pèé.VÂêÂëïþƒožÿl5¼³@ÎÀ_GÉ\Ø™ÕÂf�•uPy» Áí¢ÓË+ªÀÂr‘á�—®�ÙÈÀ^ðËoÛu†fù�F“L&«ÆÇM�0T"¡uAÜ]5�OmqôÝb]M—j þpx¨àh®Ð¼qS¸1å’.]ørP$üû ì­¾!¿+u0HÀia[°ÓIMËIM˱.ÆG‡ææ‹!8ûòÕ}bl3ŸI¿øß•[›�2d`oš¦¾ûqÃ¥¼Ò5›Šïî?– ÃÅÏ~rb'~‚®®Ë„_˜âSûð×>óSá‹›²Ýü “Á¤Þpâ „º@ýìæï~»^KµsQ�6D8kÄ|ëß@Dxàš {Àh4])(Ÿõض™{%ô˜1ɸü—y…¥ÏÌšsŸß3®»RÙtËͺ�»ëê;û3 .€&àã P\!^Å&x~5€Œ†/§ÂOGàpÀåúÖýxÈø`?ëaþš¦Äx_x~(\)‡¯›÷I£¶±sÁ{v­N_TRf +Ô­¸¼¶¸¤¼¢²FÊÐ�~Íþƒ$F„ZXVü3¥gæ|³|K¯ØÐ!zõŒ¯‰»ÎÐ>iiˆ°°? –§Á¦ÙÀ�ðh@S:MP0$@´Ô›!Çf„¥)ð@Tka5@NÀ¼(xrœÍ‡g6B^Îfît°!ÂéœJ¿r*ýŠuÑÝÍ%16ôØÉŒü²¡ã¤ææU|¼=jj›*=ã"'O™ž‘½ò·Ý§Ó³½<];©Üèš.~›<½·é…Z_ß8ªáñAðø ¦×¯­‡KךÖþÙf hj¸°ýC%‡A•F¯c×ùó6D8¡aƒâg?ñ¼ýþ·bÊÈ¡I_~ÿ»Ù¾·è™[­µì§ßG$'qG‘¤—§Û¨áâb"ŽŸÌ8wþŠ7¯N*:ÝÔ%uß«Ñ�òCp§`Q¬¹^‚÷·€œ�¯2 üÆÎ`� eCQ-< Ÿ€Rnx·êµ¦ëOÁ»;©ð†µ`§#��úªêZ�Á$&DG…ñ‚êìßâWò®ff_}zæ8ƒÑœµ´ ¨,-ãJaI•F%—Ë$-¯ƒ�½½7¦÷‡ß³42xjÄúÁä?nÈóþ9€sðu2Àú‹p¹ª)}joðwƒÏö4-æÔvZ©ïC‚ïÒow§žÉ*­¨G2XmÚv€e¹œ¼ÒÌ —ãb"n^ñ�]G÷�öñöÐéM•Uu5uÚ!⣣Bƒ|7lÙ‡Ýq�¬‹´7Ó_ SûÁo'áJ#@�o‡Å“`áøìæ‘¿ÀÁZ8x-Ô�wüçRçØY`-Øy˜Læž±acG{ûùzùx¹üÅ*Žã6o;°ilj—_œ|îüåÿ|¿aþ “cz„Ù®uùJaêÙœ÷=SW¯mh4Lž0Â×ÇÓQAW ¿@ðŸG Áï\»YX’ ^€…#á×+Plia-á¦Å.ø§ë‚ïÒ¬©7ôh|÷óVŠ"ç<=®wbt\l„Þ`\¼dõ+s¦$&ôó‚°æ÷=ƒûö ö?yæ¼R.õörߪ¨¬1™Íuõ�”sLáˆîc®2PÊàÝ­PÊ‚ŸMxg/|?"UP|놅çB� ÀSÜM·Ò¡»ƒ!Ø>‚ýõ‹‹‰ ö ÃÌ™=¥g\Zlôõ¶A¢"ƒ÷ï ,ËÒÓ:gnÖ¥¼ÿ®Þîæ¢|þ‰q)—ÕÕ"rÊàr5ôZz€ ¸� �Ú ?ÞrE±ÓòɾÐ' fX~¤ËuctÈ©Bäçç744Øks2™L¡°ÿ³=îK,ËÑ´ý'ῇèõz£±]ÃJ´:�º]Ïêî³.$ªölu!æÆS“óì¸=�FcÿZ0ÏóNò@'×Åã/Ï;Å¥¬”#Ï�g,º�—uÀWÖþgž“|µ�“s’óÄ[Îß•fšAw�ç¼åö?Uì\ 6™L$IRT—®ß¡;Á²¬Édrt) �‡¶ QÖUtßḾžZ»oÕÎ!˜ã8A8ŽÃ(ŒZa=OÞf5)´a]¾‡Às@â‹n�ç&…Ú­ÛÌÊþ_–eÛÙÇ‚î{F£‘uŽ™‘£Ü,CêÁÒ|fg„nÀ ­ïîÚÒ�éö±s-˜$I�N§Ñht:�L&ú0j†ã8£ÑH’dCCƒD"qtq€$ɿĕä7†�©hZŽuaÔÏ�Å�äþ[B’-L¼ÕNv”&2™L*•ЦiÒ†}w�î-<Ïó T¯{�*ƒIDATxœíÝ{ Tùÿ?ð÷ƒ(…HÆ5 µÔv-]´}*Ý]èS«‹úÚ¶‹ÝŠhûIŸtSºa•K)EEwµ›Štq)2ĸWLŒËÌ9ß?Îï3?µmÛ·ŒvŸ�¿Ì™÷9^ï™9ïsÎëý>çMÀÇDÉ:ø»ÓÔÔttt<~üxCCEQ+V¬‰D‡¦iº}±iÓ¦�7®¡¡ASSsõêÕ4Ms¹\SSÓòòòo¾ùÆÌÌì§Ÿ~‹Å²ªüýû÷üøñìÙ³ !}ûö}ðàÁ®]»´þ£OŸ>JJJJJJ§OŸnnn‰D---/_¾¼s玅…Ezzú´iÓ6lØpúôiYW儇‡[XXÈ:øëãÊ:ø[ÓÐÐPPPÈÊÊš;wîÍ›7çÌ™3hР!C†üðÃl‰D²bÅŠ»wïêêêZXX,X° _¿~®®®4M÷éÓG¶Áóx¼+V|ùå—mmm7oÞ ill|Gy%%%sss•w”áp8ŽŽŽÓ¦MÓ××ÏËË;räÈíÛ·?vàðׇ–d†¢¨üÑËË‹ÃáB&NœÈápîß¿/MÅäåå]¸paÕªUC‡ÍÍÍeK:;;K$’ŸþY†Á›››ïÙ³§¬¬,::šËå:99‰D¢���°°°”””¨¨¨Ø&‡Ãñóó›0a©S§NŸ>=tèP—ººº�?üµu¹–][[ûÛo¿�ŒŒ¬ªª"„èêê:;;Ÿ;wnâĉ eeeo]«oß¾êêêõÿº ÚÚÚø|~kkkçÅ Ã0>>>>>><ïüùóÆÆÆÚÚÚ½zõ‰D„�éÓ§_ºtéàÁƒ ýû÷;v¬ªªjbb¢P(¼xñ¢ƒƒƒL"—““óôô,--uwwoii!„$&&¶´´p8œÞ½{ËÉɽçvÜÜܼzõj†a!cÇŽ�4i’··÷µk×!gÏžUWWñâŧ«È»Q¥¥¥Õ½{÷ö …Bauu5!ÄÐÐpÖ¬Y‡ …<�ËåBjjj!ÊÊÊ���¿ýö[BB‚,bÿ»ãÈ:€Ž†™={öôéÓ !E¹¹¹9;;ËÉÉ988øûû+**B TQQÁ0 Ã0¯^½;v¬··÷ãvnܸall,ëªÀ{¡(jÁ‚E�>}úСCšššîîîƒfË(((¸¸¸hii …¦¦&‰D²dÉ’ž={^¿~½²²²ócîß¿¿‰‰ÉñãÇÙf�" ååå“’’tuu—/_ž‘‘1sæL33³ÔÔÔñãÇGFFÆÅŽÙâs8ö*„5yòd>ŸãÆ é6ë„%%¥ˆˆˆÂÿ¬ªªªªªÊãñ\]]UUUÍÌÌîÞ½[XXXPPpòäIöH0wîÜÅ‹�;¶ë÷p¹Ü={öÌš5KÖ�|L]«eïÖ­[ssó½{÷lmmÕÕÕ‡:þüÈÈÈÜÜ\OOϱcÇÎ�;—-ÙÐÐ0oÞ<{{{öô�Çår)Š3f {Öð™âp8ÇŽËhçÊ•+òòò7nÜøé§ŸdãÇdbb²téÒúúz��Þ¿À€ššš}úô‰ˆˆ`ËÐ4�ŸŸ—™™ÙÔÔ4mÚ´nݺ ‚£G�ž?ÞÇÇ'##£­­­ÓbÖÓÓ#„ðùüö E"ÑúõëE"QBB²eËRSS !\.×ÛÛ;--íàÁƒÒ“¼¼¼¾¾¾���ªªª’’’������ŠŠŠžžŸÏ—H$�V‘?DÓ´��OrròªU«Îœ9³mÛ6BÈúõëwìØÑþ@UUUeii™”””’’ÒØØhkkëëë{øðá3fxxx¼ÿEÌG!݃îÝ»wæÌ™Í›7ëêê¾£>ž"‰V­ZE)))9uꔢ¢b\\œ‰‰ÉÕ«W ¤'Î�æ­ßMÓÙÙÙ‰D deeB455)Š ?yò$!ÄÌÌŒ-©££˦/Èê¸iÓ¦ÏúËÕ××çñxIII666QQQgÏžõôôLMMÝ»w¯’’R```sssgÆ“‘‘¥££3}úô˜˜˜5kÖddd|ئ8Îÿ¥ûD&ºÐ9;Ã0«W¯VTTìÖ­[·nݬ­­³³³G�ýòåK6ñrðàA �É“'Bäää úõë'Ý=fÏž-‹†¹yófÏž=eZ•� ¶¶6õ?îÝ»Ç0ÌéÓ§=<<Øî‡¿Š¢þçþÇÞÞ^$½~ýÚÖÖÖØØØ××·ªªjÞ¼yì%¿››MÓnnnì—›ŸŸÿàÁƒ»wïêëë'%%Ñ4ÝÜÜÌ0 ;„¦Ó"gû{ ÿ°$Ã0ovñù|++«#F„……ݹsgäÈ‘#FŒ¸xñbYY™¾¾~'Ÿá~,666�`Ĉ§OŸ~üøñ¡C‡´µµÓÓÓCBBÖ­[·uëVyyùÎŒçÅ‹·oߎ��wssËËË[³fͰ¶û¤+èB-;!ÄÔÔ´¤¤¤¹¹¹¹¹yË–-‹-*--]¼x±™™™��MAA�§§ç/¿üBéÙ³ç‰'’’’¤Cß’’’† bnnîêêúúõk™ÖÞ‹œœ\ß¾}ÃÂÂÒÒÒ¢££ù|þðá÷oß®­­}êÔ)ö´=,,L^^þèÑ£<OGGÇÕÕ5777'''"""''ÇÒÒrÊ”)�?>xð`gžOÏ™3GÚZ)++ëèèB†ù°So†a®^½jdd4zôhéÂþýû·OÄwYÇØØ¸±±ñÉ“'ÑÑѶ¶¶>äóùEEEÞÞÞû÷ï ëÌtY{mmm ýúõc�ÄúúúAAAÉÉÉGŽ9rä›å;èÞ½{‡îBˆ••UtttrròîÝ»y<^'×è}t­M~~¾��{Î>iÒ$¡PHÓtYYY~~~QQQû±./_¾´²²211„…—/_>~ü8''§¸¸¸Ã틟£üãl’===ÝÖÖVÖá|b±xãÆ�›6mjkk{öìÙñãÇMMMÙ$©¶¶öúõëKJJBBBÚÚÚ,,,¼¼¼®]»vøðáÌÌL[[Ûü±ªª*<<<22òÚµk¾¾¾B¡°3#ß¾}»±±ñþýû���#""6lØ@Ó´@ °´´´µµÕ××ï°Vkk+Ã0†††Ò¦¿¾¾¾¦¦FZà·ß~»~ýz@@À÷ßooo¿~ýú#GŽ >¼ÓêÕEQÛ·oŸ2eÊ–-[Æ�ìàààéé9wî\OOÏG/š¦CCC���UTTÖ®]«¦¦¦¥¥•��Íü¼¼¼rsseR Vyy9EQÚÚÚêêê!!!B¡ÐÇÇçúõë���Úå7 ¨©©uè>>|øŽ;®_¿îããÓØØØÉ—#ï£ åÙ !¦¦¦ÉÉÉÚÚÚ„�k×®­X±‚¢( MMMiâåMŠŠŠ±1ŽÒ<;Ã0Ož<‘u8ŸJss3{NÊ0L}}}ddä�7ÂÂÂrrrZZZ–,Y’žžNáñx111sæÌ¹wïž®®®­­mtt´‡‡G]]]BB«W¯:9ò¬¬¬… ~ÿý÷îîî"‘èÎ�;û÷ï‹ÅAAA6lðóó }øðaûUJKKÓÓÓ]\\âããÙŸë‰'Ú�H$ÞÞÞ...ööö³fÍ*((ðööf?�ÎÇ0̶mÛÌÍÍ322¾úê«_ýuÔ¨Q|>ŸÇã ‚7¯Kø|~JJÊœ9s †éÝ»·¢¢"�Ç355e¦®®Næ£ò†qqq!„„††¶µµOš4é믿>~ü¸´Ì›ìììbcc¥Ý''00ðîÝ»çÏŸ'„=z4<<ÜÌÌìÑ£G²ª×[u­–½  à‹/¾`wu±XÜ«W/eeåcÇŽ±ï¶ï,•““322RWWçr¹ŠŠŠ}úô™:uª««+û®LFÂ}\lž]ÖQt.—ÛÚÚÚÚÚ §§WPP`bb|é񴯯ØÄÄÄÄÄDKKËåË—ïÚµ‹a˜¬Y³ÆÞÞ~óæÍ—.]*++ûù知}Î�ƒÏç¯[·®ÃÂÌÌLGGGéK+++éßb±˜í~š¦cbbbbb>bœ¬¦¦æõë×µµµMMMUUUB¡ðÅ‹***uuu 3 Ãçó·mÛ¶`ÁéÂÝ»wBhšØ´i;l¿óééé1 SQQáèèØ§OŸÄÄDé[=zôh_ÒÈÈèÝØ>55µ±cDzKhšî0ä¿+èZ-û_|qõêU---BHvvöĉmmm/\¸°{÷n�€€€¸¸8¶dÏž=Ù¿¾¾¾G�<oãÆ�§OŸ&„ >Ü××W†µ€?…a˜ÚÚÚׯ_Ϙ1ÃÚÚ:))iñâÅÏž=322úç?ÿ9nÜ8uuu¶dKKKZZÚÙ³g¯\¹RQQÁ.\²dÉöíÛ§N�z÷î]ÙUâïNMM---MNNnùòå÷ïß÷÷÷÷÷÷ 9uꔕ••§§gNNެbSPPøæ›oŠŠŠJJJ*++KKK���Û_â·Ï¥¼µ€‚‚‚´ûD"‘TWW§¥¥mÚ´©3kñgu­–�RUUegg§££ãïïOÑÕÕ‹Åùùù„š¦---Ùkº—/_~óÍ7ìΟÏ3V­Z%¼½½‹ŠŠ!òòòÿüç?ËÊÊ?~,ëØ?!yyùàààƒjkkÛØØ„……±}ô�¯©©©Ã³Ï†aŸ+`gg7a„°°0vôzKKKppð€ììì:9È‘#GîÛ·oáÂ…eeeóçÏgï0îîîJJJÞÞÞ*** b±øìÙ³ÖÖÖFFFo-@ÓtPP�¦¦¦ŸŸŸ••Õ�7¼¼¼¬­­wíÚµtéR‡óY߈Ð,,,*++ÙÑë|>ÿðáÃéé醆†=zô8wîMÓ���nvvv®©©™7o!DKKËÒÒréÒ¥Ò»BàÃ(++_¸p�}ŽÍÊ•++** :Ô£G�aƹ¹¹åææöë×ÏÂÂ";;{РA\.÷àÁƒ066¶¶¶ÎÉÉ™={¶œœÜîÝ»7lØ€æïï‹IÊÞ ¬§§ennξÅår�ŒŒôôôÚÿ>ºuëvèСààànݺB¬¬¬ÊÊÊž?Ú¡ßþ,¶e÷ðððôôìÛ·ï_|áããcjjª¡¡qûöíòòòƒ*++›››gee 8�¢¨¨Ø£G�€€€ºººÔÔTSSSBûØY×>+rrrŸÅ­Ÿ#.—‹ý àïésšÙþÂ(Šj:î{ø¼©ªª&&&nܸ‘�DXAAáÀ�qqqxøÀçgêÔ©MMMÌïkmmurrrss‹Åï(&‘HV¬X!ëÚüƒððp Y}]næ ø[¹|ù²††Æ[¨¬¬|xÆŒíK2 fóߥ'ÕÕÕIII·oßNJJZ´hQeeeffæ Aƒtuuuuuúé§N>õàp8ÇŽËÈȸwïÞ™3g6oÞÌN2õ{(Š8p`ß¾};-Â�KUUµººúâÅ‹.\hŸry·üü|{{û[·nM›6­“§ìÑÓÓ#„ðùüö E"ÑúõëE"QBB²eËRSS !\.×ÛÛ;--íàÁƒÒ‰×åååõõõ TUU•”” ”•• !—.]*))±±±ùå—_¤‡ Ùzôè�Ç[½zµ@ صk×ìÙ³-ZÔáÿõ×_UTTŒŒŒÚÚÚÏ�;'‘H†¹páBTTTSSSç‡Íãñ¶lÙrñâÅÄÄÄ5kÖtȼéݽ R‹/NOOŸ1cÆÇ‹ô“èZÙ˜?E__ŸÇã%%%ÙØØDEE�={ÖÓÓ355uïÞ½JJJ���ì5#Ã0¥¥¥·nÝj¿.;³«¼¼<44ÔÈÈÈÈȈ]ÒÚÚZQQñêÕ+BH}}½L.*322¢¢¢ttt¦OŸ³fÍšŒŒŒÛ‡Ãùàä罹¬¬üõ×_§¤¤$&&*(( 2„a˜}ûö…††òx¼w¬ØÖÖvèС¸¸¸ÐÐÐ'NøúúuÚ7õÖ MÓÙÙÙ‰D °ó)kjjR~òäIBˆtn^�ØØX6¿A‰��'„øúú^ºtIEE¥wïÞEihhtN]þEQß~ûíÆ�þùçTUUmÙ²¥¥¥%::šýÀÕÔÔ„B¡³³3û²±±ñÙ³gùùù“'Onmm-))ÙµkW'÷ˆ|ô^‡Ã7n\ssó„ Î�;וÓMŸqËncc#FŒñóÏ?ß¹sçСCÚÚÚééé!!!ëÖ­SSS[·nÝn„¢¨€€///ö¢X$%''+((hkk³ù^½zÉd Ç/^ܾ}›’˜˜¸oß¾5kÖÌŸ?_"‘|À¦þlò·3ñx<--­­[·fddìܹ“Ë妧§B† S]]]TTôŽÕ }||î߿ߙ»YYY!ÄÐÐðéÓ§ï.É0 [¸=>ŸoeeEY¶lÙàÁƒW®\) ÞÕÕµ¡¡áòåË .¼|ùò‹/>Aø‚‚‚ÂòåË}||víÚuàÀ±X¼gÏž=zìÙ³ÇÐÐ�=ZµjÕÆ�Ù·ôôô´µµÕÕÕããã“’’V­ZåääÔÐÐðøñã›7ovNÌŸ¨„b``пÿ���¥K—ª©©ÉüÛy‡.—�yOÇØØ¸±±ñÉ“'ÑÑѶ¶¶>äóùEEEÞÞÞû÷ï kkkûÃí0 ¤ µìEmß¾}Ê”)[¶l?~|pp°ƒƒƒ§§çܹs===;ì-4M‡††«¨¨¬]»VMMMKK+;;›ÝÙ¼¼¼rssÙ’góæÍºOùåé+++›šš444¾øâ ==½˜ššNŸ>}Æ )))MMMçÏŸ¯¯¯ïì�£�òòrŠ¢ØS¡��¡PèããsýúõÀÀÀíò›ÔÔÔ:$‡¾cÇŽëׯûøø466vèëLúúú·nÝzùòå«·yùòå?ü «ØÞA,oß¾ÝØØxÿþýŽŽŽÎÎÎ6l iZ XZZÚÚÚêëëwX«µµ•aCCCéo¯¾¾¾¦¦†ý›¢(ww÷ŠŠ öTýèÑ£ŽŽŽìá\V¦M›¦¥¥µoß¾•+WæççK5äååýðÃÁÁÁB¡ÐÄÄ„ÃáØÛÛgdd<{ölìØ±~~~FFF™™™>4hPfffnnngö}¢^‡3~üøÛ·o …¬¬¬ &ÈöœïݺP6†a˜mÛ¶™››gdd|õÕW¿þúë¨Q£ø|>�Ço~ˆ|>?%%eΜ9……… ÃôîÝ[QQ‘Ç㙚š2 SWWWWWGþÓƒÝ~ÝéÓ§³g¯„Š¢¦L™¢¦¦FQÔÚµkåå僂‚ÚÚÚÔÔÔnß¾íãã“’’BQ”Ìsj ø¸¸BBCCÛÚÚŠ‹‹'Mšôõ×_·òüf;;»ØØXiò—ÃáÞ½{÷üùó„�£G�†‡‡›™™=zôH&•*))‘¶€cÆŒ‰ŒŒ\²d {®¡¡qñâÅwgcd(++káÂ…ßÿ½»»»H$ºsçÎþýûÅbqPPІ üüüBCC>|Ø~•ÒÒÒôôt—øøxvdí‰'¤ïÐË'êÉËË0`À¯¿þ:xðàòòr‡®œ�éB-;!¤¦¦æõë×µµµMMMUUUB¡ðÅ‹***uuuov(1 Ãçó·mÛ¶`ÁéÂÝ»wBhšØ´iy�T“Y³f=zôèÕ«W�àîÝ»ššš—.]b¯‹?Yuß—žžÃ0ŽŽŽ}úôi?®Ã“UŒŒŒÞ]@NNÎÀÀ@MMmìØ±ìš¦ÿpØÀ'Õ³gO ‹3f¸¸¸ìÝ»÷Ö­[mmm&&&ªªª%%%2ŒíÝø|þ›}9™™™ŽŽŽÒ—l>�%‹W­Zõ{[ËÎζ¶¶–¾ljj’ù †ahšÖÒÒêÖ­!DKK‹ËåjkkBD"QMM ûËüúë¯ëëëßz/;È]zRü©}¢^�E‹ÉËËK¿A†alllΞ=ûñ+ð1t­–ýý©©©¥¥¥ÉÉÉ-_¾üþýûþþþþþþ!!!§N�²²²òôôÌÉÉyŸíp8œï¾ûN <{öLSSsÉ’%žžž7ndókÏŸ?·µµ•U£  ðÍ7ß•””TVV–––:;;·ßÚçRÞZ@AAAšü•H$ÕÕÕiiiìaOæ"""***®^½:uêÔG�q8�–––ØØXiV­½ºººÂÂÂëO†?EEE%..ÎÖÖVº„½Ú#„ܸqcúôéB¡°¥¥E(êéé©©©½~ýšMX³ýÿì4M{zzîܹ³sb–ö‚$''³× ÊÊÊjjjìqèÃR(l*æÜ¹sþþþìËÐÐP;;».;B¦ åÙMÓ›7o^½zuû=ùÕ«W3fÌàñxß}÷{7!¤¸¸øùóç���8.Uºñ»wïîÚµK(BÄbñîÝ»ûõë7tèÐG�­[·ÎÐÐÐÚÚúÍû§¦¦¦fiiéàà>`À€�;wJ$’˜˜˜=zøùùY[[�=zùòåJJJìc³x<ž¢¢â[ ˆÅbiòWWW7,,lâĉîîî#FŒ˜8qâüùóe˜.LLLÔÖÖ8pàªU«ØŒMÓ?þø£¼¼|�=-ZÄ~/?~ÜÉɉͶÁ'ÕÐÐ0fÌöËcÆŒ)**>|8ûrܸqÒogذajjj+W®ìÕ«———Wqq±““ÓôéÓ‹‹‹7nܨªªÚiÍ:ù4½ úúú HIIa_Ò4�ššÊÖºÓêõ§|-;!¤©©©Ã³–†aŸ+`gg7a„°°0vôzKKKppð€ìììØ’EéêêŽúoÒ¡ë„�“'O^½zUú²¾¾¾´´´¬¬¬¥¥¥¶¶¶¤¤¤¼¼¼óOG޹oß¾… –••ÍŸ?ŸÍ www%%¥€€ooo±X|öìYkkk##£· i:((HSSÓÏÏÏÊÊêÆ�^^^ÖÖÖ»víZºt)‡Ã‘aËNÓ´H$zs¹D"Á)ùçBQQqÑ¢E½zõ5jÔ¥K—çÍ›wúôéóçÏ;99Mš4éüùóìýÞ�†í©¯¯wwwwqqyðàÁúõëÙ^éŽÐai/ˆô"øÄ‰þþþì)ù¸qãZZZÚßS’––¦  ÐÅGÈtÊÊÊ.\ðöö¾víÚÊ•++** :Ô£G�aƹ¹¹åææöë×ÏÂÂ";;{РA\.÷àÁƒ066¶¶¶ÎÉÉ™={¶œœÜîÝ»7lØ@QÔû<]€BQÔ¶mÛâãã'OžÜÐÐС$MÓ;wîìÊýàŸÂ�!Cª««ßºû°^½zekk;kÖ,>ŸéÒ¥ººº .888|ùå—fff£F�š)ŠÚºu+ûæÐÐÐ.øp|ssó#GŽèèèDGGÇÅÅÙØØ¸ººr8œððpWWר`JJŠ‚‚ÂðáÃÙ—gôèÑYYYo�U àݺâóÙáoEEEåÊ•+„š¦óòòØ… Ã:t¨k>_NNÎÓÓ“}4yKK !$11±¥¥…ÃáôîÝûýÓDnnnƒ^½z5Ã0�`ôèÑÉÉÉ„UUÕ�îØ±£«Õ> 8gû½lLUUUNNNnnnEEÅ›kÙÛÛ‹D"é¤W{öìéÌóúþýû›˜˜?~œmÖ !B¡P^^>))IWWwùòå3gÎ433KMM?~|ddd\\Ü›->‡Ã‘^©ˆÅâÔÔÔQ£F±Ï:1b‡Ã‘Î ð§àœd¬gÏžìY*MÓ���ï¹Ö�;w6mÚÄΊÅ0LyyygžÛêééBø|~û…"‘hýúõ;wî¼råÊÅ‹KJJ455¹\®··w|||aa¡t$�¼¼¼¶¶6;.HIIÉÀÀ€�×÷æÍ›³gÏ0`@nnîW_}•““S[[Ûi•‚¿´ì cB¡pÊ”)·oßŽŠŠêÓ§Ovv6;zd„ [·n-..¶µµ-//ï°Ö‹/RRRØiÍ;ß[¯hšÎÎΖH$�€�‘\SS“¢¨ððð“'OBÌÌÌØ’:::±±±ÒYèâãã !¾¾¾×®]{õê•••UaaáÈ‘#�;†a�ðaвƒŒ1 ÓÜÜÜÔÔ$‹ !b±xÅŠ—/_&„Œ7níÚµ²ð-ÊÊÊ!†††OŸ>}wI†aØÂíñù|+++BȲe˼råJéÇ�;w¬­­333UUUSSS?Aìð·€<;È›�immupp „0 SYYYTTTTTTYYÙ5û ‹‹‹çÌ™#�ÿSYYYGG‡Â0Ìÿ%ããÆ 333{{{>Ÿ_ZZúqÂ…¿´ì KåååëÖ­;þüâÅ‹OŸ>Ô5›òÄbñöíÛ���÷ïßïèèèìì±aÚ¦�¥¥¥­­­¾¾~‡µZ[[†144”6ýõõõ555íËdffŠÅbGGÇ””¤bàƒ!²Äår'Ož\[[›••µ~ýúñãÇ¿µ˜¶¶v¿~ýØ‘¢(mmmuuukkk¶•Â0LIIÉ›éøO'++káÂ…ßÿ½»»»H$ºsçÎþýûÅbqPPІ üüüBCC>|Ø~•ÒÒÒôôt—øøx6ò'NtØìëׯ322ÆŒsóæÍN« ÀÇäääôüùs;;;‡³uëÖÛ·o?}ú”içÙ³g:::«W¯–H$Ìï“H$^^^²® ÀßEQ³gÏöööfG‰¨¨¨$$$,Z´ÈÔÔÔÔÔtîܹqqq}úô‘u¤ðÉý/ZÚ¹õ·Qˆ²IEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/main.png000066400000000000000000004573101523260663500334240ustar00rootroot00000000000000‰PNG  IHDR"p¾ˆÐsRGB®ÎéDeXIfMM*‡i  " pwÞÔ†@IDATxìÝ`ÕÖÀñô!Ô@èDPPQŠ€‚ŠØ°ƒ"ذ÷† (vlˆ]l¨X}bÅ‚…¢à'  €ôN �@zùÎÝ˰-ÛSö?ïy¸{çNûífw39s&zíÚµQL € € € € €þ Äø» Ë!€ € € € €�8ehÞ¼9 € € € € €> ¬[·NÆ“Íêƒ@@@@@GN³:Šð@@@@ðI€Ó¬>q1@@@@pà4«£�@@@@@Ÿ8Íêƒ@@@@@GN³:Šð@@@@ðI€Ó¬>q1@@@@pà4«£�@@@@@Ÿ8Íêƒ@@@@@GN³:Šð@@@@ðI€Ó¬>q1@@@@pà4«£�@@@@@Ÿ8Íêƒ@@@@@G�8Ç# �ÂÂBY�Æâââ`¬²’­câŸ5*Ù—ßîÞÒ%»ü6^ɶ¼oß¾J¶ÇÁØÝ¸8óQU­Z5{ ÆZYGhôý?''G6“ŸŸ/Q? JKKC»aÖŽ $�èèhYSll¬ÄÄÄD‰úY¤-°@ªšÙ¬Uíåx@@@@@ Ìd³^TT$ËïÙ³Gb^^žÄ‚‚‰%%%C�³£aމ1çÊ$&%%I¬Y³¦DÍÿ’Fئ�;wʶ4k)l­°7›lVoŸœQmÉfõÖjÛ¶mÞ­Bãô½NHßWõ]®U«VUè(«Â¡è³“••%™™×UáYä@�ú®®¿ïhÔ÷öêÕ«Ë�ÔÔT‰ÖÏèËñoùð›iù¸³U@àP²Yõà € € € € à£Ù¬>‚ÈQÕ Ö]»vÉòZ±Hÿ–«Y¥šaêóªýZ@3gµæ]v¶É ÔL¢ÚµkK[s¾B÷wfÍ]ÕGú™È5 !cfÅ €@…МVÍ�¬S§ŽìSè~ר\�wB?ùÍ´?EìDœÙ¬÷”sÀ € € € € \²Y}ðÔ¿fddÈ2ú7Ãäädi‡3wÕywuëÖ}ÐÌVÝO½×s½zõdÁàþ�Yó•4wÉy¯èAB- ïÉ«V­’ µiÓF"9­¡6w·~½Š‚ô#€UO@ßóõý_¯Ÿ«zÇX‘�ˆßL+ò³Ã¾!€@$ �ÍÉÏ>ÇŽ € € € €A ›ÕDÍ`ÕX‘s¦´V¬î¡îm||¼g­Zµ|8Ú²†R�µ,!æ#€@8´>õÊ•+ec�;wÇ&Ù†E@¯™Ð:}–nš €! ïÿÕªU“£Õß8"â°+ÀAò›ixØ@À…@øN³–ÈEëEÅQ%Å¥Å%ÑQ¥.ö%x]¥r}|lLTLliœüÄ € € € €„P §YK‹‹KW¯‰^¹ªd樬¬èüü’âⓜÏ��-ILŒJM�iÚ¸¤m›èV-¥'�-ê�4µ©Öc dmá\6))I6—™™)1%%Eb\\ O:y¬á|Ùx# ÊV¯^-ƒ[µjåÍ"Œ Š@NNNPÖÃJ@*¯€~P¡5<Ï ¿™†Ç™­ €þ zÆ­Ì­–ìÜUúÕ×1ÿ·(º°(6¿@®î, q*«ì’äÊFGE›»B-]õý�%G=ðÔ˜ºuÊÜ[ € € € € €¾ „ö4kQFFéÔiñ+Våç».P*×÷Ë>›ÿ¢LÛÖ8¤}ବ}–jl]Jϯê€(I¢-‰Ê)”ó­qs/Ü•YrÑùqõêíŸéã?š jÎÛʾÚöD3§|\M9 ·î³EZZZ€ûÁ½¤dq‘€Þï8D+gµ.øDpÉB' Q|„óéæ7Ópj³-@ÀW�žf-.((œ>#yùró¹ëp’ôànFGIz«œ\•³¥r³D*¸hKa³”œ&5³£d%1±Qrí¿ôËàÄÓ#íKé¹Ú(ۮߴŠsö%.[ž7}FôeÃb�É#@@@@@ �žf-X¶<~ñ’¼¼<9�jΓîÏYµµLGItJJ°KŠæý^<ÿ÷èF /½¨pÆçÅÿ®Œ=¢Süi >�QºbUì1Ýâúö’óª%»2‹¾þ¶tã¦èÆ�âN$Šÿ[SôÝwqýûÿ6·d㦸>½¢rs‹æÎ�²�HÕ´X{ m^n^Üâ%²KÉ��òLŽB–ÒÌP?/÷EtÏõ(Ù½£t k`Y@ tz�Ann®l¢rÕÑ�I¨×\âbë¡ÞÖ� ¸Ÿ�z¿~3õÞŠ‘ €@øÌU𡘤2wá¢Å1¹yrå~©Ôcµý_ ³šÚ¬úé�‹�9êÈØ^=ådhLç£äÿ¥©©%ù1Çt�nÝ2æØcŠ ¢š4’ûeå÷}”íìjIllÜEçG%%üðSñîÌÒâ’˜‡•ÆÇ—ääȉڨô%.¶URR\R““'»¤%ÃCqȬ@@@@"S TÙ¬…99%«×äçË9Õý²š_*´C²Yåœë¶mÑiõ¢Z4�ípXÉŽ¥ÅEQ©5bÒÓó?žL·ÒääÒ¢¢’í;ŠÿY×c§d“–Êm¬RSóªt×.¹ÇUtµjR? ¶[9ÇݼiÉ_‹e•ѦÚÀ�gS·e{X ÷ßZ½Fv,.5õÀloÿÕ,΄J[p@³Y ¼=`7ãÈfuC7T ½ß1Ù¬áyJ*K¥òðh°@ 2ø,çóÎo¦áÔf[ €€¯¡:Í*…YKwî’ÔQ)¼zà&V¦Ìªìßþ‡’^*­={JöíK8ëÌR©ÑºisiaQt辄 ê›FzƒèæÍJrrz÷Jnß.ºzõ}‹–b¬…%yy¥r#ªRIŒ-–s­ÑmZÇÔ«S·n‘É”-Ž.)–­²-ÛÃ"ÙôÎ�²c¾1@@@@ð ’¢ò÷Ì’ÂÂâ쬢b¹â_®×·M¶¶õ¡ô–ÆÆü:'îèÎEË–ËÕɺìxxÉÞ½1�—æåKŠkT|\Á¼ù9o¼i]cc‹w튮ž{tçÒ¤äè–-L¹€‚‚Ü)ïd?8A†•ÆÈ)V×Û’íÉÙ{K ‹üøs«�ì�L4+ì,Ýs=Š@vRe d ,‹„Z@2÷OÞõN²~@@À~3õ�E@�° „䤡9Í*S~þ�2¬Å¥ÅÅûÛrjUÚ¶‡%ÅE¥yy…+Vä~0-ÿ÷¥99¥ ñqíÚæ¾÷ÁÞ^Ìýxzl»vr¶47·à¯EEÿ®ˆ?µÑ®�¹3>O<{HÊØ{/ZZ-¹4{o©DbBiA‘Ér•WWÛÒ­—äçIº«§YÃö|°!@@@@¨t¡*`N³J]V{ÅG©šº+sï+¯•dîÞ÷ÞÑñ ûÞŸVšŸ_´jµ)Ò—?gná¿+äÜk”œ�‰ÙûÚ”˜””Ò¸ø¼ïf,Z“Z³$#£$+kïS¤ò€ŒÏýê+¹#–4䌪ã¶l�¥Œ@‰”gu3×å"öΪqf¶j…ýI¡� €aÈÞ›#ÛJLL�(ÛvÙ €€U jüNW5ŽÂú¼ÐFT $ß’Í›f©\å_+í÷ÀÚc*ûè‚â’Í[äÆVQ Ò)·ÃŠŠŽ.Þ½ÛôDGG忝_o2IÏž=ûgÉÈ­Û¢¶lÕaû×]²s×þ‘¶©z,û¶ÌCY¹\ðnvÈÞm–`B@@@@ÉiV³Crõ~AAq|BÙç4­é¥zÔ¹Ç^Ô>KN¿ÚNæšmÙ;¥mif2ÉM³J ÌR¡œ2ví‘ÕOžò©Dm‡bkõêÔ”Õ^{ùYµŠ­T´u.]¾JviÎïK$^~ñ`‰qq±m'ÙŸJ!°s×nÙÏ-[3$v:¼�D-:œ•½ÏËý�·er¥T¯æåx†!€•K`ëvó×ë3–¸pñ ‰ùù…õª fMH»_¯n{ŸÐYbèŠ×O|aªm+]$véÜA¢îÃ?+ÖH»zµd‰“_Ÿ.ñŠKO—Ø®M ‰þMo½÷?Yð˜.‡K<ü°Öþ­$ˆKé·èÕk7Ê:×®Û,ñäÞÇqýΫÒÏÇß.•Y}{#11Áä/[§_çþ)¦§Ilݲ©um@@ ÂBxšµ87Gî:UöiÖp=r𵍠?Ô§YÃu4l@@@@*Š@¨N³F'W«9úš·•YËáø¥n@‰ü—Úì³?—˜Œ�Ží[J<çô^.�ó«ïçÙûžÜÝÞö¾ñɳe°nk€-×Àûe+ïÈ™ßΑ�O©nòVÈcu÷<^e^zQ/]ên¾ëþŸ—›þ^¹ž[õz7lÜ*õÊÛ_H|þ±›%nßaò¶n÷’Do¦>=Ž�aW âÍà*0æ£�gÈQ¼ÿñLŸŽ¥× &ÓíÆë¯òi)#€@ù ,úÛ\;ò‚-?´Ï‰&‡tüÝ#%¦×¯#± Àä´.^¶Zâ'ÿûIâÂEÿJ¼éªó$j¦¿4‚8íÝ›+k+,*’¨¹–O‰z,­Z6‘ö˜GÞ�èyyñ@ÐûDó>ìýôëÜ¿dðô/�äÑG=ësšœ”(=ï}òƒÄ^=Ž”X«f ‰ÖIǧÖH±wþµøi?9ÙŸ/ï¼xŸ,+©öµÑ@�P ¼>õà÷½+.>-Ô›cý €@ÕiÖ˜¤ÄêC‡†jíþ> ò }ßsQ? € € € € ,�ž•»_í¿�U°v6àõ˜] ñT\T,[¨–lþÚºI×¯Û ÝV*Κ×oØ";³xù:û.ÍY0ÞÞöÜèЦ± ¸÷¶ž‡Uɹ/~ok{¶§ƒ»Òuʵ§EªÀ¼vmšËQdïË“¸zí&‰š%­‡öêÓ·K#99I¢f' »ÀäµoÛBâç_þ$qGÆn‰‘6uílêž{öeø¬LÆ}Q¡É>cB�Ê" õX5�uôgËnÕ©�ÃÎ'ØrH»u6yŽGv4ÕK'Nž&ñí¿‘ê¼§½ûrd+;ÍÛkÏÝ%Q§×ßýR'ßYâ¥ç’8�©ä¾v½¹vA'½Žaìcoèpûï{Ó”y�ux é¼ý×—� :Ùd�vµÕ�u^ÖÚóò›ŸYÚÛqqæËy�Ú&[¶Uót‰I‰¦:êU—Ÿ#Qóy¥!Óø»Íwç*áϾdžÏSæî,pÓ½ÏK|éÉ[%ÛnuðÍ� L»¸DâmcM~®uê{‚É`ͲåÿïÛùÒÖhcÍ ¶öÇĘŒÔ{o¾ÄÚé²½b•ù¾7í3S˜ @"S ïàkäÀøÜñÛˆ7�,ëÍú=�‰ñ<›¹ € € € € €žB˜ÍêyÃÎs öìÙ“’’’œœì<·2ö,øËÔ¢zû#“ߡӰ¡§hò¯Wz µ3Mf\—N­$ž1°§Ã’�?÷¾é?åx‰Ú·p˜ë|‡\‡Uøá7+ÍÁ}¶ÝÓ!^tœ§¹Uu^5Û�©ï¿m˜`³¦&Wh×®ƒåDFÝü„Ã��ê`¥?�¥µY†Uù‡uj×”clßÎ1»ÍùÀ/þ[:7oÙæ<‹¨°3fšüA­ÇêœÇê¼Û ñækäµ#†H¼õþ$²UJmØ ®ó`Ÿz4kU3.só dÙŒ�æ­‹ê®Pgu[õv­¬Z3õ`mPÝtë–M¥ñîKcô¡ËxÓ=ÏHÿyƒÍ…'t?ÚåÏ��ÒÓd€^ýàydr’ÉQužZ4k$�õú Í2vY¯n-鬑RÝa–>/�—ý³Zzºiò‘5CùÙ?�výzæ}þækΓ8ùõÇÞ9Bb�soƒ‡Ÿœ"Q?{õì*íg_úPâýw˜1*/ —SLLŒô{#“››çr t"€áМ8ï·ë_æ�÷ëg$‘# ?M¾æ¥ú:>žâ4ë²eË&Mš4gΜœœœ¤¤¤Ž;^~ùå °ðĉ?úè#k�C»~ýú¯¿þz½zõúyˆ € € € €„T üO³Îœ9óꫯ޸q£ý8—,Yòé§ŸŽ7îŽ;îÐ?}ˬU«VÍ›7Ï>ƹ!§Y%Ö¹¿{ºu>L¶®Ñº_}ïé@¬#iÏþÕÔûý/“–9áÞ‘›5mèÀ¢¹-MÕ—þ¶­MÍM&èÕÂüÛ¶¶>r«…¶Œ°ë�–cï³—­¿ñþÁóv-Í+jÔð3í{õÂã7K»š­6ëý�¼"í‹Ï5õÑœÿ}er«3wgKdBª†€^;²pñ 9œñw›O[ï§Ô&›²ë‘í$þ¹È¬á´æú’@¦¥Ëÿ“ÅŸÍdSêôþ§?I£U³só %^rµ©Ò~Lç6uš·ÀäÑ?üôÔQZ'T.øs©4žyeº}®»Æ‹o~!³4:�ÑooNºÇyVPz¶ïØ%ëÉÍ3�»2ÍgMv¶©H»nÃf‰E¶{H#ÀéÏE披.G™oªy¶|á­;2¥}ÍåC$¦¥Õ‘¨™­sæ/’v‹fæ³rÍFs�̈KL…îZµjHlÝÂôÏûc±Ä¾½Ž•¨ŸžÑîRŽe PyÈN­<ÏUeÚS_³¤��-r^™Þç´V„xÆg¤¥™*Wöi̘1,..–žØØØ)S¦H=i§§§×©cþöÎT56o1'ßßœö�ĽL}´Rùß�liØ'½î6[ö‡æzØgI£VÍT‰Î5Ú¬cªRÛT>;0Ý|ê�VYÿþ1%4�éÚQ04/õå7MžT÷n¦§Èö–¢N£ïxZöø¨­þ¯ý¡4"³6«U€6T%�½ûråp L–hƒ4�A¸9ì†é¦jÓö “øt\·#d%|ì5iŸr²)%žn«úúàoIûñq×HŒ�3_eo3IâQ�ÚJ<ð$‰óþX"qͺ-­S£æèn¿þb{ç–­æûÆs¶,×ÍÌ•1£†™ë ‹$fïÝ'±^]³Ô¿+×J|mêWC7͘ù“¬üçy&÷Ö:ýßÒ×åáÀ¾]í�×Üf¾»›NêÑÙå,­|º`±É¾äüA«Ûê•_vá@i�yÔT_µNKWl°?¼}ôPiß5Þ\ça�tmÓ>ûY:Ÿ�p½ÄºujYÐF@ÿ2RÏ„uØ�JñÐsNkÅÉcUÌò<Íš››ûÍ7ßÈ~Hëã�?~ÒIækqíڵǎ»téÒÏ>ûlݺu ,�“ªÒ¯é«Òhݺu§N�¤!“tþñÇÚ¾ð #ìúg=r" € € € €”«@yžfݼysII‰èܹ³d³ÚN<ñD9Í*=«W›¡Ê$…RRoûã�?Ê�³d®ÜùêÌ3MêA…šüeê^½ý‘9•¬Ó°¡^§X$bÿÕûÕÚ_:v0w½eÌ 4¦~òƒË¹#.öàõÞ´gyL-Z1êàøHhé™KKLfô𠦯ÜÕ—›W—V¦ÓÂ#¯=s‡ôØ CKÛ:ErmÖÌÝ{„bÕªýoËV‡öŽ S[� *‹@bb‚ìj‰í½Q³8õîóÞï^^¾ NLˆ÷~‘G:W)•o•e®3>Î|LÖªiêŠjEÑ>5ß.ÚOâ ÝMèº &öµwþ'±Ž­é­×™ìW­F* Ó–m2wåë<ŒÑY¹y.Ç\yÙÙÒùŃ%޾ý)‰�ÒÍÕZcï)Q�±_o“Ûëò¶;eV‡ö­œH�æä¶i‘.íÚµÌ?:ék 6Ö\óÊÄÛtïÏç½é^“/l¸ï–K¤§Aýº÷ìÉ–xß#oHt7éž{#³q³ùtfB�Ð ¼>u¦‡•ÿ»r½}®ç‘W\|š}$ @ ÔÎ9­-�UÊó4k‹-/^,©Rw599Ùú”ìÚµÿWt{¿Üë®»î’1Ö“­ï¼óŽVèÛ·o«V®¿MZWK@@@@º@yžf•ʪÖs¦öcû÷ß§N�*e@×®]µ_ Èd#�µk×þðƒI@�›_�þùîRϬ‹øÝÖ’öÂ^®§ëQíe¤Fë"_ÿ0ßþÐ×uÚ´7¼_ƒ÷#í+/ÇF|¼yqö9鉙»³ì{òĸ«¥Ý0=ÍÞsÍ­OH{Ô¥§KìÒ¹ƒ½?2I–D¢­¦Ô“ �%ËVJo­æ¯;ò>#Qó°´gÕjó7ü'^øP¢uÒz¬µm™MÖþÈi/ø¿er°½9ê^'tófc@ ÜlŸ¹M×—=Y¼lµÄn�Íwï§%¶¥ìéý">�\öï¿ò¿ ó LÕÔ[ïŸ,±]Ks§{�~žó—4žyyú�ލî]Å‘G´“þöíZHœø‚ùž¹äŸƒ[¯¾k*®j¬�ZMÚçŸÕGb5[€Ö3mߦ…ô<;á‰î¦™³L1+�îÆxÓ¯YŸ9¶Œ×Uk·Ê"ó,‘¨õjõKoÆNs¹ŠÖÃ]±ÊËü…ÿJ,.-‘øÄ¸k%jÝUiا¿–˜OÀãºnï±6´Þý7>fítÙÖª÷Ö|X—Ãì�š+ýÀoÛ{h €€ú;] ¿Ùy¿¬ç‘žçz>º@–õ¼æàÎ ¤¦•7ƒ»ÿ¬ �ª'àœÓZÑŽ1¦¢íPvvö�7Þ(UYedž rØa‡¹ÛÃï¿ÿ~ýzó�²}ûöZ¿ÕÝHú@@@@@�Ð ”g6«Ë£?~¼Þ«yóæÒvwW+©ðæ›oê† f¯-àr�t"9õ-ŒÏnkŽ{ˆ)CêvªžävVž1ï�¥rt™Y95ê”Þ]¤­™ª Ö£›ù�ÖÈ[ð§¿d¹¹/s$Oýû/‡ÍU#ÊDøèã2fó–meŽdT�~½Lú'Ÿÿ$ñÈŽ¦nµf¹JÃÃôÛ|“e™½Ï\@ÑåH“1ø´}‡)5û·…×mÚ!qëŽÝŸjÞ…ž~è:‰Öé®_’‡Ý»u”xéùƒ$jž”Öyב ññÒÐxÑy§Hû參$þöûß÷æäI<óÔ$v?öH‰Zgvê‡&Ëuú³%Þ2úB‰uj×”ènyñ@™ÕûIJsùïÿ¢»•HÿB[}ë€w?üN¶oÛBâý�¼&±Zr¢Ä¢âb‰ÅE&ƒõü³zKlÞÔÔ]­^Ý\±a�´ší¼…Ë¥sÌmí³ìí8[íÚ7'ÝcïÉÞ»OÚ×Ü6ÑÞã_ÃyÍîÖó×âdÖ““?r7€~PÀsMUk=VÏ#Ü�J±8©Þ?M�dþêVÐö^;’GZë±ZÛǤbe³¾üòË'š¯qrëçž{®C‡î¤fÏžýûï¿ËÜ´´´Áƒ»F? € € € € j� ”Í:wîÜ1cÆè-­n¸á'O%Cáƒ>((0whíÕ«WÛ¶¶œ=ï¨ä>§2i5Fï–ðÔÂE¦BÖÛ}#qØÐS%v R–‡ÿûÄ’U] ¹¹ñþé�³´ÊúwÕÖ²FT­ù·^‰ÐkL�¿§^˜&±A}·Ûv¯di0!€(Ðû„ÎrÔúíeâdóÞxÍågJÔ*œÎ šÇªyOCõ”š±è<Òמ­Û2d‘Í[L¬^Í\vqñ¹ý$ÆÆ˜ü€›ï›$Ñyš<å�w^�ôÑñàÅiÓ¿•ž_æš ÜÝÙæš�´Æëw³ÈÃé3‘˜µ×äçjEѶK?î]é¹ï¶Ë%¦T¯&1Ó–­&{wþB“Ñ9°oW‰{m™ÂZ�U¿'¿øÔíöMÿ0Û¤ÌýÃääöïÓÝÞïÜX½v£tªgãF œH�f¼^rõx—séD@À�¹¨îdè–€sîjŬÓZQ²Y7oÞ|õÕWïØa¾YžsÎ9cÇŽõðLlÚ´I ÈÙÒK.¹$¤7¿ò°ÌB@@@@D Bd³æååÉm¯/^,;$÷¼zê©§ªUó”#`¿ù• îß¿¿OOdQQQaaa¼­>—O ú1¸ëQæþ¶ýX<™ûû"xá�Ïn÷’C�>œøÒÇ.ûµóªa§IãÄ]<Œ©³kdŽãSx-ê$/Êš­eFFæôç"“+ÔóØŽ32LÕ¿¶­›IŒ–ÿ¢¢æ,0sç,˜`{dBŸGØÛ4@�ª' ·¾éªóäÐÞþÐ\‹sÛý“%v=ÊT\m˜^Ob^¾¹–hÉRS«Zë±jëÿ¾ž#=Í›¤K<ªS‰�LGv2[Ôøàc¦©Nݺ˜wìI�™÷ê1^•8 ·É÷<ýÔ“$îÏô|ãiË¥K­y¬òP¦|Ûþ7k’&í£ë˜*«M×—˜V·¶Ä5Õ`Û·n"ñ¼!ý$›õ¤¤˜ï¥�=ó¶Äï~˜'ñ¬3úJ Åôþ'&ßvð©=$æåçKÜg«;rØi¯Z½^âM÷ºÎçµf¡èu´ŒváéuZ²t¥4zsø�ÿÆÆš ŒI�Ý$Qój¿ûÑdË^zÁ ‰šM, &@@ lÎy¬ÖMW´œVó]ªÜ§'Ÿ|òã�Í9²š5kNžþÜû2æŒSŽ—Ø¡} —ãëÙ²T\Ϊ2�½m·>>ܤàD=âXž®ÊepD³œ~¶Õæ»v„ÉzcêL‰W7÷ÓkÛÚü¥ÇzŸåÜ<“O´w¯©â7ë§ùÃSßY6Ä„„Y >Þ|9Ô»Kê×]ÚZ­5cçi'Øæh*±j–«¾jë¤×¦Kÿu#Ï–xN«¬ÄåT«f é¿íº $>aû°eÛNioÛ‘)Q÷ðú+‡JÛyÒìNÍ{}áUsÑdž�Û$èk¾Eüõ÷ ‰Éɉÿ³U2�ôê§Ò¾uôùG\r†Äš5S$†njÕ¼‘¬üÄ&õ»Mæ¬NÑÑæZ‹fMJ|êÁk÷÷ÊUóIûÿ–˜LÕÑ#ϵ÷'%&ØÛÚ˜óÇ2i\uÙ™ýÖ‡º•)Õ¥³°n‘Ä?—˜Ìåã�5ÕÌ;´k)Q'ýd\·a³<̶}>j?µ¼öñ €,à9�ÕºúŠ“ÓZÎÙ¬K—.•»]åææÊwô믿~ôèÑV&—íiÓ¦íÝ»WfõìÙ³C‡.ÇЉ € € € €„M <³Yåìê-·Ü"÷³’£MJJª_¿þ«¯¾*5ì/í#Ž8¢GS�J§íÛ·ýõ×Ú–Š~$”Iþ‚”g=°¾àÿ++ÍÊÚüU[Ö¸/7O¥Ö0¹UuÒ\�ž�Qïkܤ‘©­¦yˆžÇWÕ¹7›Ô¢([¹¨þ©ªGœãú}áß²¢Ì=æçtã&“Çt\ó7›¦�Ó%:O»wgIçØGß�X§¶Écºø¼Îê|Ïw?ΕcÔèÍÁö:¡›7ÃV aƒº²o§8øMÌÝ®jîêõ£Î‘Ï¿ú‰D½Vàè#Û¹[Äïþ¬,óçö�¶ìÚFéu¤ýó¼¥öµiMÒ­Û2¤§‰­Vl‚¥"¿~ œú‘ù2¹dùZ‰cï¸\¢óÔ¾m é<®‹©³ÿðÓïJ¼q”ÉÒ­Ÿf¶ènzmêW2K£»1žûê%Üå„&&˜ÕõÍó¢SÍT󩔘/ÑÚ¿¶íŸM›Í'ÝÞ}æÛc«M¬³ìí[X½Úã—9JÿªÕ%ÆÅšo¶ïLûVâýV+Û7öGl25R’en¯ã;I¬]+U¢óTTT,�Öê±ÎcèA*š€fÒù·Wš[çß², �¼º"ÇÇן£Š�ÓZž§Y333õ¶WòÙ·oß=÷ÜãüZ5j”õ4ë¬Y³Ö¬Y#Ã:uêÔ¯_?çñô € € € € €a(ÏÓ¬ZþÉó'Øþh¯c$UÒ]µ-©¬©©®ÿZîa…’+õf»VâyÖÑ�Úʀߜ!ñçûLµ,ÏÓW?Ì÷<ÀåÜ´ºµ¤ÿêឪk¹\�Î*)p£yÑE�ÑÅÄOÿ0ño“°âbºÏ$šDU3)/QE¶Å©&%ê?“æ“fôLyÏä1]0Äd }úåo5ªñ⤭™Jš1TRj˜òlµYG_aª¸j5º¶ €/[%=�o#1¦®�Íý©Ï=ÛT'ô<Íúa¶ (* ᥞw€¹ P.Gvl-ÛÕÚ¬Z§õ¦«Ï“žŽ‡¬ééÍŽmظU†Ýý�ùÖ§_ÛΪ–$íï~ZâÎL“ÍšžVSb¿^&kþÚ+LmÆ®Ýgýd>xòm‰z�Ô�*íŽ̾½4åS‰›·î’¨Õ]ccM-½²Akpר^Mz4öòKK»az=‰_úXâÈ‹ÍÚzŸxŒDçiÐÉfºvîà<Ë¡çå7?sèчîòXsmW2�ºù —Ki§s®èø»GȬ«ÖIìÞí0‰z �Ž·Æßÿ4•[KJÌUeÓ>ýQb�cÍ{þ�Wۦϒ¨ÕÉ¥!Sr²yF^šx‡íQÙ!&&ZÝ{ó%eÕ½�öÙÏeŽd„B@ks‡bÍ•q�¾fÒUÆcdŸÃ/ÀëÊó@”YÖ›}ó<&$§Y½<�)çIÇŽ›••åî ¥\¸Ô­›ù¶ª“:tèÀ�ãããÏ=÷ÜÝ>ÿëåîù¼^@@@@@�ˆÉiV•”“¤žk§V¯^ýꫯöž=%%åšk®ñ~¼óH-ÈÒÓ¬õê˜ÜŠ1· wÞ:=!hÙ¬�¬9)ÉT+‹Ì©­I²‰Z±ÅÄÛ¾7ÑÝÔÝ–NÔÏ–Óš“oFeåšøÞŸ&F´ËVeuP?“…tú©'IìÕ³«Ä…ÿg²x~™k2зg˜|(­ÜZlËëIJ0o• ¶ÊwI‰&Xïd}Þ™}¤ Ó‘GšMûö&qº}»²³w58/ßMZu$�qŒD°€ÖiÕ<Ö}¶ŠŸ¾b4il>ÙŸzðZ‰µjÕ�¨ï*šc¥×¤7°}øYV]ËV´M«fÒ7üBóþ£y‘k%m­=ÚºE#i_7ÊäØjý÷Ï¿œ-ío\`ë1Uï 8A¢Nú¥q`Ó“n«ˆš›çú�íôSLÛÆ¶JñÍš4Ü¿¼û†_`²bëÕ­í~HTㆦî|JŠÉ®ML4ßs»ÿ*ã�gÕ«g®zwÚ×Ï8õàq9�<ý”žÒÙ»§¹4¦eóÆ­i£Gšõ$%%J\±jƒÄ¸8o‰h˜ž&ã/¿à‰ZñV¦z¶k¶ôYé—vûÀ,@@À?s�TÐ'½DK‹è}å�¬°°°P×Ý d=,‹ € € € €Ø¢×®]+š7onï ¼!'X÷îÝ+—ö''Ûê>¾Æ ­Anº%^%‹Ö×[¹r¥ìBµj&› òN999²ómÛš|4ÿ¦ììlYP£kˆœ¥¿fòeÂ9ÕµýÑd§­âj8·ø¶6�ÜøJ|Zƒ¼ÈxÏéö>­0lƒ·m‹˜2º˜¦§§ËÒ –�MÀFXt¿ÀæÍáþù…¼ÈÊÞ+ƒ'<õ–Äûï¸Bb5[•[ï×ÀH¼hÔ(Üß~½ß·ª4’ßL«Ò³É± €@UX·n�NH²Ye½r��¤ŽêEúD­  @ª»V��a7@@@@@ Êx[Vɧ–s¬’&–o›dAï‹7ù´Ÿ˾äååÉŽIkb¢),åÓ¤•¡´ ‚µR•O+)ÇÁºçz�ì†fÿiÕ…À×Èž°¬³@eÌcu>ŠðôTÆ<ÖðÈT�­$$Dn¥æªñ r ,�Ô)²ªGÇ�Ö Y”»¿™–ûSÀ €BušU~Ë•3›’Ð*§ä¤z€LåuvR®–¬ûöí9Û(;ÆùA/f!€ € € € €€¯!9Í*;!§2åÔªœf•INtJõI“3­Ò/“ðu_½o¿—œT•­Ë¦µG’j%•U÷ÁËUهɱH»²g³êQØÊ�†®AŸA?g@ •½Žvˆ‚¸ ýDÐÏÙ ®–U!€T"~;ç“Åo¦áÔf[ €€¯!<Í*y£zŠS¢œiÕ«tÃö,ÕÓ¬r¦U/ •M“Êêëëƒñ € € € € P¦@O³ÊyÕ¤¤$¹ë”žZ•3­¡ÎvÑlSÙ�¶nTþÖ'“f°J*«$´úwžWOÔæääÈš+cUG9é,{x†—`–ù’b P^ú/ïö嵸]ýLÔO™<|@@*ãïG•÷‰ã7ÓÊûܱç  1!:Hù]WNnê™ViÈ V™´S¢L¡Ø®nE£¬_râU&Ù9á+;£ç[C±iÖ‰ € € € €+ªlV•s©š=*'7%ô  À~4DÜúwT�¶s¹&ÈŸû¤G'yèߦSSSeA½�–fËÊ ý[U˜—Ò½yÙ®Eà; A•'4ðU±@ ˆ5jÔâÚX•7‰‰‰2ŒlVo¬ƒTUý,¨ªGWÑŽ‹ßL+Ú3Âþ €V�žf•ÍÈiMû™V9/êÓ¬Ö3gXm“œä•©²œµm@@@@¨¡=ͪrŠSNtJ[O³†ÍEO³Êæ¤àFµÒŸþå033SÖV½zõמÅóòòdCµk×–¬z…uêÔ‘µmݺ5<‡ÀV@/Z¶léåH†K@«~ëÕÁZ'ëA¨\•å7£Ê¥ênoùÍÔ� ý €@EÇiV9N=ÑøéΊ@Æ> € € € € €V�0�fµn²2¶5W³Yµ]vv¶ˆÜYKbE«H õX5�U+êžëQîoÕÈÊÊ |…¬ð[@ÿ€§y¬Áz—ó{g"pÁøøx9jÍc"§5_2D¸€¾ÿK™¸wçá[ã7Ópʳ-@Às-? € € € € €€ßüáÑ:Í]­U«–,£³Õ\NÍÕ¿+Z£«`hII‰,­Q÷DjàJ�ÖcMII‘¶îyq±¨®Y·«Lº]CéBB&мysYwÍš5C¶V\¶€õj�üüü²` €@%HLL”#Ð÷ÿJ~(•r÷ùÍ´R>mì4D€Ù¬ð$sˆ € € € € J²Y}ÖÕ»*k=Vý+®ærȺ4‹Gó:C�Ýi½±˜VÇÓûNj�$ý §î¡ÏéõúlÝÊž={d9­¤+Pn}æ5'@  }?Ñw¹fÍšÉèP¿Ë•±C̶ èóR§Ny¤×yP§•— PUôSX à{~ù>ËüfZ¾þlp ›ÕÙ„@@@@@À²Y}À²Õü)Í!Õ¼Qk]ÔPç±Z÷Dÿ†¬Qslu¯ÂyÇmÕ¨W¯žìXaa¡DÍíÕÌV­ßjÝçHhß}¼ÉnfòF€lDo”tŒf z?¾jŒ´fëkÖFøß媆d¨�B?‰´N®>S999²Q½ÎÃú)ê=aý €� X¿ÐokÖOáÀ×Ï‚%Ào¦Á’d= €@àd³nÈ@@@@@ ¢¢×®]+z§æˆ–àà@@@@@Ö­['K�Íê#Ã@@@@@�C8Íz¨�@@@@@8Íê#Ã@@@@@�C8Íz¨�@@@@@8Íê#Ã@@@@@�C8Íz¨�@@@@@8Íê#Ã@@@@@�C8Íz¨�@@@@@8Íê#Ã@@@@@�C8Íz¨�@@@@@8Íê#Ã@@@@@�C8Íz¨�@@@@@8Íê#Ã@@@@@�CâôaVVÖ¡ýW{¼]žq Puòóó«îÁqd € € € qd³FÜSÎ#€ € € € €@pög³7Ï4.άVóXƒ»»¬ ª†@pßsª† G� € € €•W€lÖÊûܱç € € € € P!‚\›5>>^K+±Vˆãc'@@@@@� �Íb`V� € € € €U] hµY©ÇZÕ_*Á 6k05Y € € €”·Ù¬åý °}@@@@¨äA¨ÍªYi±±±•œ‚ÝG@@@@ü ›Õ5–A@@@@ìAÈf%�Õ®I@@@@"P€lÖ|Ò9d@@@@¦ÀþlÖ@îú­Ù¬�¬!˜ĺ@ 2ðŽQž%ö@@@¼ ›Õ[)Æ!€ € € € €.‚P›•¬4—²t"€ € € € €@„�Í!O4‡‰ € € € €¡à4k¨dY/ € € € €Dˆ§Y#䉿0@@@@@ Tûk³R_5�eCuX¬*¶ïûùaï@@@@À7²Y}ób4 € € € € à ÀiV"€ € € € €¾ pšÕ7/F#€ € € € €œfuá! € € € € à›§Y}ób4 € € € € à ÀiV"€ € € € €¾ pšÕ7/F#€ € € € €œfuá! € € € € à›§Y}ób4 € € € € à ÀiV"€ € € € €¾ pšÕ7/F#€ € € € €q�yˆ € P)¢££e?ccc%ÆÄ˜¿�kO¥Øyv@ü(--•eKJJ$KÔ¿WÈ‚ ²YƒÂÈJ@@@@@ rÈf�Üçž#G@�J*g¾Âik%=v@ü°^Ñ¢ß4§µ¨¨ÈïuV¥UcïÞ½rP %jþ/™¿Ué¹v>ýéÐ+½âããe@BB‚Ä””‰¡þþL6«ó3B € € € € àƒÙ¬>`1@(_ý›¼þ}¾|÷„­#€ €@ÅÐ=ÍãÓÌÍŠ³oáÙÍQÝ·oŸlnÏž=­&šÏÈ7¨ð<a+ÖÊÅ999²KúÚHMM•võêÕ%†â®d³V„gŸ}@@@@@�J,@6k%~òØu@ˆ­ÇJFä<ã) €¾ è÷ýÎ9uZ5�U3X³³³-99Y"ßš|}ýT¥ñúì[_Z±733SS:jÖ¬)íàæ´’ÍZ•^E  € € € €”ƒ@„f³Îøß,ÁÖJ gŸ9À'ø÷?š)ã{ßEbÓ& ].ûó¯HÿŠUk%޼ì<—c¬�3¿þIÖ©mΣÜÑÖY!jgì4çïW¬\#qɲ•¤Õ•8äŒ~™@@ âèߨC}_ÔŠs¼ì  €" ß4wO3=Y[Å_Vknj«Öܬøû̆_@.ô¢¯ÍûNII âÎ�ÍDLV… € € € €‘(¡Ù¬ë7l‘g»¨¸Ä�çüÓ™³e©öm[HÔlÖÌLs»Í[·KìØ¡­ÄÝ{²$®ß¸U¢7ÓÚu›eXAA¡Ãà—^û@z>üÜlÑÝÔ·gg™ußW9 øwÅjéÙ°ÉìæÍÛ$®Û`Úÿ¬Z/qëöÝÓëגؽkG‰5kÖ�˜—Ÿ/1)1Q" €TòX+³À> € P¹ôûCծЪ»Z•Uë±V®çˆ½-/�¤¤$ÙtV–9w§¯œ`}ß&›µ¼žS¶‹ € € € €UD B³YƒûìýcË}é�Odµo½üPpW.k;½ÿq‡_|¦Ë5ÇÇÅ»ìŸøÂ»Ò_Zjfv=ª½ÄnG.qðÀ^5l 1ÍV�5:ZšL € PA¬÷H­ »Èn!€ €@ˆ„ïš�¨Gªµì#¡m{¡UÊݱ¾fôUT»ví  Ù¬Aad% € € € € ¹U0›U«‹®^½Áóš±ËT&-¶Õf]¶|•‡‘-Z4‘¹Õ’MÕ_'Í$Õ©3fþ(‹4í¹C@IDATÓÅTAíÛ«»Ä_ç.”xÿ#¯I´NÏ¿6]>ùàuöÎ/¾›/m�öN{ãÝ—�vjªë;£�{f_™;àäžöñ4@�Ð è333eMš˜÷ÏHø+zèÿ×ĹMÜœmbFމõª™ØÈÜ!êxóÁ5Ø\fÕ»…‰ñ$½&‰@$|(((;~ãÉ (Vª¯}ëpù`–$ëA@@@@�¨Ù¬…¿uûN‰Íš¤—ùT¬ß¸UƤׯ+1!Á±2é®]{¤ÿº;Ÿ*s=:`îÂ<Œ|õ™»eîì_ÿ�øîdzì#o»’´;´5’¾dè {aa‘´·lË�8gÁr‰ól믖œ íFéõ$Z§“ºw’‡ññæ‰h�VGâ¿+×[Hû¬A'HuÙyýú01ѬÙÝôè³Se–Fwc¬ýÃÏ ‡_|–µ“6 à¥À�?šÌýgŸ}VâàÁƒ%Þxã�^.Ë0@*¾@‰íÎ-3{zÏ&®6—p¸�¶ì5³4.ÜbÚ“Ì/Q­l%à&˜ Ï¢†š Þ¢¸]‚Q`B|(,4g“}Yˆ±ìÐlÖüüü Š�ÍDLV… € € € €‘(P!²Yÿ]¹NìxüU‰�Œ55IÛ¶jêòÙXi«¸z÷&“tì£$ѱ�ÃÈF ëKÏŸ¿èпz�©Ö:ê¦G$ux ‰¹y¦ŠÇ¿ÿm’øîËã$6jØ@¢óT½z²töè~´Ä»Æ™­¿` Ä£Ž8Lâ–­Û%îØ•%ñҫ=c�Äö­K|hŒ9¢‰Ï¿%±fM[Y&i˜Rk¤H3Ñ–“[·N-i§¤ì80sÿ¿Ÿ~ù›´4:Ì’‡/M¼Sb»6-œgIÏeœ*ñÛž»`ï|ímS– ðO@ïéù¿ÿýϾxÏž=ím €Tv�,[²ËE¶¯Ì3Wz4š{Á'f=ï.1qêY&¦’’e˜@¯ôwj³z…Å '}åè«Èi¦Ÿd³ú Çb € € € € €€ TˆlVÍH½ýúKeŸ4Wt˜k¥Ý¾msûó´jõFißóÀ oºæ"‰Îy¬öÁ._|õ“ôŸÒ§«Ä¤SÏ´¨ØÜ´aSãõËo~–8ÒMýÓôi2WcB‚AkÞ¬‘ÄÅ›[о1u¦D=ÿ}Ñ9ý¥½'ËaZùßz‰š£ºm‡)Ú¤¹«Òði2ð?rø9.—rW…¤ÔV7*Ývt­[5s¹¬µ³f�êÖ‡´¨òú3ûÇȑΚ5Kâò妞²Þg°S'S7ùøã�—اO‰±±±½™/^,Ã>ûì3‰‹-’/±[·nÏ9Çü,·hÑB¢ç)##Cè¾ýö›Éj_¿Þ¼«´lÙRâa‡™lú3ÏŸù½}AÍ*Ý´u§ôÔrªÍjæÐØ•¹Gz²÷æØû³²÷ÙÛ‡4lýiõêHglìÁóæ…Ò£9t‡Œç/���-Ï<óŒÄŸ~úIbtt´Ä6mÚH,..–¨ý¿ýö[éyðÁ%&%%It7}ñÅ2ëé§Ÿ¶hÒ¤‰´5“ôË/¿”¶®í‘GL�è.]ºØGZsæÌ‘‡�=ö˜Ä½{M �æœ6mÚTÚšu»dÉiþùçï»ï>‰=zô�è<­[·N:~øa‰ÿý÷ŸDÍ‚oݺµ´5CvÍó¦{xñÅK{Ĉ½™JJJdØ›o¾i¼s§yÇ;õTS:¸“槤¤wµUlmúšùõWóI§¯ŠÔÔÔ�Q_';v˜$®®]»ú½¶ßÿݾì±ÇkoÓ@*¦@¾ùRuö‡&†"�Õ¬÷À¤ë?kšyüãpcMdB@À*0w¾¹brãfs— sÎ4ç ¨Nkõ)ßöÁ³rå»l@@@@¨¤qm¿5§õæk/’ÓœVÝCíñ5�U³Ò^xÕüQø´~&k¦][SÓКÍzDÇvÒsÒñGH|þå÷%N{ƒDoê0vì`rßj×2YBšÍ* ‡)'7Wzò Š$ÖO39§ÞLOLzO†Úþ€n[à«LIwÓ'o?*³jתi�“gn†š‘‘)ñ¿Õëíýî{lY± Óë¹@?U@@«®h&éüùóåˆN>ÙüõïÊ+¯”X¯ÞÁ׿f}>ôÐCÒ¿páB‰ü±ÄK.¹D¢ó¤uN5�Uscu+Z�U·ûÕW_É‚'N”8nÜ8‰o¿ý¶DÍT•†LK—.•8f̉ÉÉÉ5‹¶{÷îÒÖ÷%­;mšygÓRÍ{�2eŠôÔ©sð}&++Kzn¹å‰»wï–8jÔ(‰ZÑUׯ¹¨sçš|ÿñãÇKœ:uªÄÎ�;Kt—o+³ì“.«µYëׯ/ýº¬}€CCm5¶kgÞ�½©T«+ñæ�Ùasäaf¦y7Ö¼fÿv)--MŒ‹3Ü……æz…={ÌuΓ~öi�Ü5jÈ€öíÛ;“]›õèr˜tj†ò¿ÿšŠäZØy¤®Í]Åp=ö È‚ZõØy ô €MàîïÍÍݾýÒmév'ßvÙ €@ÅزÕ\[öÚTs•dŒíŠÌîǘsYM›”}Möæ-fÙì½n®“–yeM©¶;ú4L7¿•0¹ ›Õ� ý € € € € €€W&)¦Nšµj;5¿ïN8î(?öóÝ>—¥V¯Ý"ñΛGxXÃÈágËÜ+oœ ñõ·>1íCÆ—””JOq‘©BøÄóïJܵÛTx¼çfÛ A¥åjÊÎ6uuª[§ö�¦‹5ßm¶Ý˜kdÄm÷O’8é±[%~0ýk‰mZ6•8ÄVOöù—LÆY¯žÝ$ZóXóó ¤'c—Ù·ßüL¢T¦µÅ²Ãam›—=ˆTZÍ3½êª«äÚ¶m+ñÒK/•¨YxÖÃÒº¥×]w�tÞqÇ5otèPóÎ���`,í?´•m³õ^qÅòï1Çc£Û=í´Ó¤G³>gÍš%í¯¿6?×\p�}d‡¤}Ùe—IÔŒ?­k ݺæÕþùçŸÒ£ëÔJ²gŸmÞÍtÒŠœ7Þx£<ÔüGÍÞ=0ßü«u|N8áikUV=ÒéÓ§K�çlÖŒŒ £ù¹Ò�I«ÄvìØQºŒ}ô‘ôk6ë Aƒ¤}Æg¸Y•:ÿøã9œþùÇïƒÒW…>§š[j}Õ¹[­æbktÓ¬Y3é2dˆó,—=úŒ¿þúë.çêóîüÓÁZS¸¨È\ÛñË/¿Ø£ËU9tjV¸»êÃytÍ‹õÕWeÍŸ|b¾#iüÀ�¥}íµ×JÔlki”ˤ{¨™øúN¨?k½{÷–ýÑë<¿/…·7lØ =úè£%êϵf ‡Ot‹ú©Ô¿;ðüóÏË\ýdô0,¤³ôµ§ï~Z­[Ýúõë'ÛÕçºyóà|›]µËÊó¿—}@�t1cî:½ì‘:âî�Í¿�.ó4~’m»£m_%Z{úÂÓJ\ÎÓÏ£_|Qæêõ(Z)[¿•ï;­^�¡×éO´V×o º‡z•†ËC bçÆ�&�ù‡~�¨×iýúíÛ·K�»w<ýŒÓïQzÕªU“ñúíñüóÏ—¶~'”F€“{èßRþíªÛÒÊòú‰3oÞ<Ù´V„6ÌüÆ}Ê)§H –¡»ãÒï̺uý®®WŒÝz«ù­\£»eéG t;2ÌÇÒãϽ'ñˆÃÌ']íÚ©žh®�¼ë&sÍe‹f�$º›fý4_f};ûÿÜ (³ÿ´~æcéÂsƒŽ27]‰�ÍZ‰ž,v@@@@*¢@ÍfU*ÿ2XKMÊiÔ§Ÿ+ñ­i&?ß”5Ú¾}§=fì25 ‹‹K$.[¾J¢N§8^ÌøQbL¬9=ü"“ã3w¾9ßÿδ/%îÎΑ8¤g‰ç1O[»ÎüµÓÝT£FŠÌºå“·wß>‰‰‰Žypºì¤×?•FlŒÙîˆKÏÒN{<ïL“_pã=ÏHüâÛß$&&ÄK¼ø|Ç?�oÛž!ý:}üÖ#Ò¨S»Ö�·ÿ¾ó¾Éx­S»¦ÛÌ@ ªhžËå—_^æY³Ÿ4Ó|Û¶m²TÓ¦&¯\'ͳÐü)íñœ Ò«W/fÍfµf7hn©æØî߀›ô/ùº-Íf]³f�˱'�t’Ë~çNÍ«Ò,Œ¿ÿþ[èQ;g èßù5�U«¾jv­UÌyý‘Ü3`€ù$Òèì0yòdéÔ׆¯†#FŒ�e5ÃËyÍÎ=ZßöÿþÏ|®ivªuŒfâäç›êÞÖI{´~±ÖöµÎÕ¶¾Zt Ö ñ\[�rͨÕ×XË–¦NºNZaöûï¿—‡š¥R½zõ3÷ÿ›’b>I™Â/ —ÖwKÍÖ��7ß@4·ÑúnæüÜ…zŸsrÌ·2}Mê;•fåkŽüûï¿/sõ'K3¤ÜUõ~Zׯ?)Z [3Ó5›Õ:&üíìls”N¯½öš4œ÷ÊùêŠK„ã_u»óÎ;ecšY¦mÍsÔÌÖn¸Aæjεõ]È¿ý{Ì|ÝŽ²]ÆVÆ o5>4‰w.¦˜hÓyFWm—œEÍZgÚž§BókJ”îÃ+Ž_ö=/êv®^£¹«ZM~äÈ‘2Z«fëu-šÁwÜqǹ]K(g<÷Üs²úgŸ}V¢Ö¦×÷½ŠBßmôù õ»Ío¼!û0vìXŸ÷ᇖñú¤?ãú ¨ïœú}éꫯöi�îû·‡þ-ån<÷ûº-Í`Õœô»ï¾[V>a‰š­×Oè³o½rËó>ø7wëVó#íý÷gÿ¶ÂRx/°~ãüôä%6nXGâ5#Ï•o»gƒ4dš0ñ‰·Ž6YóíÛ¶�è< »Ð|œhtžûìKæ[S“†iÏ9³Ÿóz¼ ›ÕK(†!€ € € € €®â\wWæÞy¿› �§˜ÜÌûo7Ùj“_ÿX¢f¶JÃaš»ð`¥¼š5Lõ]j‚­ÂEËæ�¥gͺMoßBâ÷˜¿@6jØ@¢NÎÙ¬'ö0õR»ÝIbõjÉOØGâyÃn—øÐ}×HìxX‰M§Küâ«ÙG^ršÄóÎ:Ub|¼ãSsD§öÒzó·åo~Z ñíÇIlP¿žDëôç¢eò°]+S•ÛõÔSòpþüù;wî,ñ¢‹.ÒåwddÊÖ_}Û¼ÿßp•ù[nJõƒ>îvlï¾\™õÜËÓ$ŽfÞ Óêùó\¸[(úµÖÛQG%+ß¼y³D­æÍ¶76Ÿkº¬s…»uëL’ÕÌ™3=¬Ê]mV]D_Ö­m§™hÝ»w—aÖW”õ5ܨ‘ùärÞ+;ì� Ô­[WÖ¯Õ{‡.m볣ϵ¾–ôY�eýYÐÜ7­©mÍqÓz� 6”=ÿꫯ$V„lÖo¿ýVöDó¶Î9çikŽ¡4ÊqÒú¶º^x¡4Ô¶wÉaÓšeùä“OJ¿VÕ÷vÞyçIC�"ð<ÖâR³ÖÏþÕu—ß7oÃQ�G?}¬éK´}µì Ó^°ÏDo¦¶_S^4¿"DÅF{³„§1š ¨?§Z·ÝzeÌ’%Kda­{þlVý,»å–[dœ3ûô1¿Iéõ3fÌ�¶æ­K#DÓý÷ß/kÖ8iÒ$i_ýõ¶¥ßÇ�'c>ÿüs‰Ö÷Cý~u×]wI¿Vä¯U«ìk e°‡É×=ÔUù·”‡Ýð0Ë×méý ôÓDŸq]¹¾Oê·eÍ/>묳d–óµVvƧYzÕš~o ä[ºOe0z¥Ú/sÿOúßxïk‰Ú4‘xݨ¡-w ¹ôüAÒ£Óø§LNë©}ºJrzo‰)ÕÍ9.o¦RÛ½ˆ¼ÉÏd³zöa. € € € € P†€cÊdÃ+ÃìîÇš¼ªWž1-lÙÂÔOì}¢í�È–�n²9Ç_d«ÍzËõ&;ÃyjÝÒ,Û¤±É€Ð<µ¸¸XçaÒ£µV3÷˜?LçååK¬m«pªQÙ“•-��»÷JLMMq9&9)Qú5�Uÿz&eÊ/(�øç_K%j•�å+L¶Ñ«oš»ýÞ|Ý0‰š3[PP(í/¾þUbß“ºIdB�@´6“ftêz4ÛκNk©V}õü×õš5kÊâÖ Y]ƒÙ¬ÿý÷Ÿ}gÚ¶mkoû×Ð\ ]V³n­Y‡Ú¿i“Éî×Êžš;¦Ù ?þø£ô{s§l½ã¼®Ms4«W{ÜÅcŽ9Ffit7¦Z5“�»}G¦Ä»œ,qÂ}æúƒ5k}J§LûrLë}½$±¸Ä”ÁKrS;[fU¨Ik&jÅIݱvíÚ9ì¡æœöìÙSúÛ·7×Cx?iÆ¢µ"§>ãúzÓ:˜ZoN+c&&šÏ¯÷Þ{O¢5[P+üêRšßª•(­{bý Ú±c‡ÌrÎלJçW£u=´C! ùŒîî,o­±«yСØoÖyä‘Gºf}Íhåk—ÃÂÖ©YQ·Ýv›lQë6j®JEÈfÕŸDÍü­hy¬úiþ¯V3·æ±ê\Í´^“ÈӺЖ�º#'�u˜e;Û.¨¸¢—iÿaû¸»Ø´½ŸttŽ5—"4%زŸôUçü]E«ok ú€6ã×ÂÖïšÕh]�~GÒœú·ß~[f…:›ÕºuoÚú}FGê'¯u©Þ½{ËÃíÛ·KÔ:ѧŸ~ºumpv³²èõ/¿ü²têûUàÁÖõÓF â¬Y»Qvæíiæ*œ•k¶J<£¿9£U«V ‰#oz\¢ótJï.Ò9òâS%NùÀ\73wÁ2‰×Œ"±S‡6=O¹y漓óuÕž—b®³Ù¬Î&ô € € € € €>TÁlVýÛ¬æ±ú á4´i“Ǫ“»|ïò°yÓFÖNÚv²Yí4@@@@@ª`6«7 õlw‘ÖÊDÞŒ÷<&%Åä±¾6iœÄ&kÉZÉQÊ”�/±~Z]Û#ÇиQ}éªSÇä«ê¤ínGµ•‡�kêkÑÉüC³ tÌóOÜ%�ßæý)±Aýz›75¸·_‘ĺujIdBÿ´"ó|`_üÜsϵ·­ Í@Ôk.†uŒs[+ i6«»"­ªÑÝÈaÃL=nç¼iç¬Z)õØc�•ñmÚ¬Çä9ŸÔº]}•ê¶´ZŸæ’ dîgjÍ!ÒŸçÚ—zÏwÍ%\±b…,¥9­W_m2ŽuÒj­S§N•‡Z ÖûŸ£ëàßòøé§ŸìÖªyö‡åÒП2ë;�¾ò¿ýö[ÙŸfÍš•Ë^éFõçz̘1òP÷Çó»høwUk‹ë;Æ)§œ";0dȉú¹ • uÏû÷ïæÝÓš¶úy§Y·ú‰<}útûžœzªù¶¬ùÂZ7Ü>Ë�Æf“0„ià‘f%ÍefQ/®1Ñ¿iS–Ë9.¥Ï¯V¹1b„ÌÖŒo͵TÕÁƒ;.–ÇZ_þ¸ãŽ“­½òÊ+õ5©õvgÍš%=Ö:ÑÙÙæIªSÇämU„I_ŸîÞgô(4Wsí+Â>W–}ÐïÉŸ~ú©ì°Öäuþ¾QYŽ…ý …€^ß 1ëÿ:›ÙÎê<5þ:Ùt’íþ=ztz��îöJG6il®|ðž+%êÏ‹ÞÅ瞛̙"çiçÎÝÒùò;_ÚgÝxåYÒÖߪì�öFZÝÚÒ®JæÁ=²Yí/ € € € € €€?šÍzÑÐàßÛQïÈÖ¨¡ÉKõurF?‡EÒ˜º��=x‹Äèh‡™û&''I«_ŸöÙ=ºw±·i €@ ?ÿü³,þÏ?ÿHÔ»œ0Àå ýû‹ºõ/fÎwûu¹!{gAA�´õ^«ÚyÙe—IC3µÇר™�ZéLï‡ëë½é}Ýb¨Çë__ºÏdMÞû�©%zß„—6úÈý×J�V2r˜åÓÿþúKÆëkƺ f}öéÓG:5ZçZÛšO¤ùb;v´Îò²­ µ^ª.¢¯+wýîV«Wcèz4“HGjMXÍ¿ÖÌSëkX¯´Ðšt'Ÿ|²»•¥_ë·Zë&ëj¯¸ÂT‰ ä§ (»!+Ñl¬ûî»OŽwüøñ­¯–òBÐêœ_ýµì€Ö�Õw6ÍÑÓ«4c.œ{˜ŸŸ/›»ûî»%^½©­ß¯Ÿã·¾pî�»mi¦ü¥—^*¬ŸJú‰°jÕ*é;v¬Äðg³feLæTI­Óªwœ×L·n¸Aöí–[Ì7çO>ùDb°ê´Êªü˜.hdjTÇÄç™X&ý´zöÙgegÞ}÷]‰6l�øè£�ÚwOv´½½3 �jÕªÉV4�õÊ+M–µÒ÷%—\"=÷Þ{¯DÍYÖºðò°Mî®ü¨D‡P.»ªù×ú¹£Ÿõå²l�0 hëØG^‘í®^¿Ý§­·jfÎJ�¹Ý|7ޱ¥VêÕÕÚ·r¹žŸ3÷cˆ��•˜d»;/Ïü¾Ùíh~+q¹‰ˆê$›5¢žn@@@@‚/¡Ù¬Á‡ ÍÝ屆fk¬Œ€ÖZÕ| Ñ;,''Ûnì„d­¯g͸qxHGFF†ý±u öN�3fÈ\½§m“&M¤Hn”V3Ôû kN¢f3yØ�J4K3U¾ïÙgÍiÕ�מÀóXumZÿQó=­8ÎT­sƒÛÖ*™ÖZ™ºþï¿ÿ^½Ù¢Þo:%%Å>Xó[5—Mósõgaݺu2F³ÞÜU£³¯$ˆ�=zÈÚºvíê°N­|çÐÉà èÀµª²VÀ¼öZ“^&ý‰Óº¢º?ç�wž4Î:ËÔ»ë.SÑ^óunx¢fÔ~óÍ7²9½«ûìÙ³í›^»v­´UU~[¶l)=å•lÍcÕ�ÔœPý”¹í¶Û¤S+¥†óýÍú)©9˜ÖO=Ía×Oj}�Ò¬·@Þ—ÕУ÷?ö°”^ºÅÿõè’�S]ƒ~?ÑWàÍ7ß,«Ó—º^½&føðáòPkdÏœ9SÚáÏÖÚÊú³ Ÿ2úüê·�qãÆÉ^uïÞ]¢õ~ò°Ü'ͦÿå—_\îI^^žôk-r­„ër�š·~ç�wJ¿f¯«³Ã0"P….»p�]AaQ™Ç¸d©¹îä³o̧õ?^b\œÉNõoãÁ¶­Vµü[îàRË—/—ún| 'œak¥§§Ë¿×\c®üÐìoÍ$µ¾ç;,Ò‡ú³~¢éu³fÍ’ízþVÒó°rýTaçŒoëë¶qcË‹ÃÃ#{ÖŸþ)š}ÇwHÛšÙ6}d ´la®\ô<íÙ“-&½6]bïGH<¶›‰ÞL3¿19ø»³öI<åd“›”˜(Q³YgÌüQÚCÏr}‡™ÅäR€lV—,t"€ € € € €Þ �Íê­ã@  ”””ÈÑé½kõ>¼z7êÑ£GK¿s­:+…µ>�VÙÓµi–Ÿu¤¶5ÇAó2´GótœGZ{þûï?yøàƒÚ;õoûþešh¦�Þ3Z÷gðàÁ²fkMCû†ªL#¸¬�EëÁ9W…Ó|C�Þì³f0uêd*1é¤U#õõì®Bñ�±æß/¿üR¢fÑjÕÃ?Ü:À¡½gÏéÑê±ú ÔJ|Ãä¡7?)ÎKѸ@nn®¬Dk›j–ô_|!=:t|å®A¯ ÐýÑ{‘[«Iê;íü![Ñ ¾pæ±ê¡½ùæ›ÒШ=Ö¨W$h½ÑÕ«W[g…­½cÇÙ–þ :TÚÖÏ/­éùñÇKÿùçŸ/1üÙ¬²Q™´¢èóÏ?/mÍ»´¾Wüý÷ßÒ_·n]‰îòëe–—S×Ff`Z5wä˜èëÔЖZZj–›¿Û×¥ޝ_Ý´uöúÞ²~WÙ¶m›¬ cÇŽ«Ñw{í´Ú: éCÍúLKK“­X–õõùÛo¿I¿çëBº{VÞ·o_ûÜ9sæH[+k§^R¿~}yèœMl_�†è•[gŸ}¶´õ=ç��¶õ} (Pý­óõw?—‡I‰ñ/<÷/q4�uú—æýêÚËÍo‚µk¥Ú—½úò3¥ýà“ïH¬™jîÙpÊÉæîLÞ�Íê�c@@@@@·d³º¥aD‚€VJ}çó—:ÍÂÓ\˜1cÆH�7yOzÏS½ã­æU­_¿^–uWátÙ²evX­¾gÍ1±Ï²76mÚ$mÝ­’©Õ©¬yöÁe64+íÑG•‘š!Û¥Ki_uÕU=çíêʵ2ì‡~¨]FÍ9r9Ë¡ó™gž‘�³<<|ë­·d®ÞwØÃ°™uÎ9çÈ‘.\¸Pâ¢E‹$ž|òÉ5Ó°¸¸XÚZíQ_¥úŒ[«µÊ™ôÞÜúÖW¯f.X°@æêxkn‘»W‹Ö5Ö¬kåbÛF\k†l£F&…ÌZcÑÅt…Q@3ßo¼ñFÙ¦f�ÝtÓMÒÞºu«Ä�>úÈa_´f¢7ϻÂ~?\¹r¥,«cg̘!m͉֊±_}õ•ô|öÙgµª£4˜4ôºë®“þO?ýT¢¾‡è' ¾ßjþ£Ö·uXá„l‚K/½Ô¢òõmíÚµ¶7Þx£E݃¢_1:zL˜0ÁêÓ9ò¤³ |UÍööU5«ò.Üë1lºÒ'V6k�ßÔcÆÄ¤åQ2Ì;—yÅ�JÒ·/å}?ðÀ¶dõG¯»Ô¦²óÊ˽�¿üsæÌ±•Þ}7S;Tƨ2?õ©OÙØ†z“í�zIN§ïûûï¿ß¢^Dµ4ýÕèïHcõ .ÛsÏ=·A¶?³-Ìl®dJ©ë3[×a‡yÏ�Ó¦yv^êá;ßùŽM ìæÔSf6VwHè{²%¨§]e¼&›¦pê á—Wî4ôM8üŽš»uÎ’,\bó¿×üÉâg'Ž·xòñã,&fÏõ_"¿ºñ^‹­£^\/úÜIV>hÔ>ÉfIÔ¿þÆl+ß|»ÿŠÙ²ÍoÓøòçO±8nìKcPïäõ=ßwÝïE6k\†@@@@@ d³Ö‹I@ ¡÷šªr ~ÿûßÛî(§CÙsêÓmРAì¦r©Ô[œfW\àWùÔŸ”òþT¯5ªÏ;õð®tþüùöR×êõ”ç‰'Z�ò‰ê›ÇºnÝ:›÷G?ú‘EõÁ§çȫװügª?Ç›nºÉ¶Gý<žvÚiV.íaË–-¶ƒÊJ®ïžêû¢Õ³˜ÕG˜2‚ûôéc‹M§mìØáW¡ßzë-‹úK;v¬••ï¬ÞWU¯ç�ë/BÙ¯6Y­A}¿*[V£Ô×j:[¢éÕ>Õ‡æé§Ÿn•M-¡i�/+›µÎ�¡�&%ð­'|wýb¾wú›~`nv­'3 €Y 4î/¯¬6=�™›f6ëœy‹Íæ¥WgY<ïÏ--+K•C¹mÛv›æñ§^°xüÑþÓ®][‹é›6ûo™gžóg6Œ?â ‹Ú·KöŸ’lÖƒØ<@@@@hZd³6­÷›½E @뚪²J¯¹æsP£Ñ3mõ”se�†Ï�£]uÕUV©çœ†cµL嫪^½dnݺÕ^.[¶Ì¢²Õ—«úÄ — Þñ¾ýío[¥®ªiì‘Gi-GÏo {à —p衇ÚKõE¨}Qï®Z²¦Ôz•u¨¥…ÙˆáÒô¤éë®».¬Ì²Ü4³Y³Dcö&.@6koì~# l¯ö•}‡ÇiþÐûœ‡õóU<ýy�­Ë<2 €Ù4Ö/¯l¶9ýyß{ï=›X¿YÒŸ‹)tßaÿþýÃÊ ÊôÍš³ € € € € €µZÖ®à5 PºÊf óXµ¯z"ªb:{¯þ(ãSžt’?±Q½dª×W=ÃW¬§œâýæœuÖYh1>Ìž=Û*ÃÅŒB@ „”OúÀ9¾‹ÇÞéñí<æbا»/Uë"�5Â,JO yóæ¶S555Ó6@é9°G™ ¨å¨e¶„ø\©zÉ�OM  € € € € €@-²Yk�ðJY@W8§L™’Ó�Üwß}mùŠõ]Ñi§�f³(ÖwÞøôÆ ³Ê\ïo|½Ô € PJ½ÚûÞL»Øãy÷øÈ\� 5LîKúóD�•­=2 €¤# »ÉfMÇŠiâj9jEñ±™Õ�Íš™s!€ € € € €ÿ ›•¦€ €´€ú•nØ~£ z‡Ù8 R@y¦�ëwßۿݳp­—ë; îìs\}¬Ç³÷ñèý 2 € ' ï ·¼B\’ò·oßnWVVVˆ›È6°ÀÎ�;mëZ·nÈIÈf-à7œMC@@@@�bh¾xñbÛÎ^½ze¼µ {Þ7ãÍ`F("]o,¢ fSP`áÂ…¶´÷Þ{Ïâ Aƒ,0 —Ï¢(=ej�£Qzï,{TìUþhëfS{|(ê­uÚR//ßèqõ�Ý*<îÑÁã¡}=žõÄzÔ@/—“ôâ  ��êêj[®òõr²‚Xè–-~¨]³f�Åòòr‹|_*€·¥6AUUU¶­]»vµXQ}`g±í+W®´¹ù`Ï‚�Y@@@@@ëˆlVšä_€lÖü›³F(^õÊÚªU«âݶ@ò,°cÇ[ci÷Ъ'ů[·ÎötÆ Ûµk—ggVWŒ›7o¶Í®¬¬´Ø©S'‹-Zd›‡J6k1¶¶@@@@ N eÁm„ € (E}HÑãXC@êÐw†ÒÎcÕn+Q½jj¯•¥Ø¦M›€oMu4Ž&\¥²mÛ63PÖ³ZNöy¬!j¶9±á²(#€ € € € €MP€lÖ&ø¦³Ë € P|zR°úimØ«îÅgÁ#€ €@]ê«Tßê_šuÊ]Õ¾+ƒU9­Ê^Ô·¦0–¦{õIµÅ0¿[ý±ªÍ(~r¾l_‘Íš­ ó#€ € € € €@ ›µ‰7v@ŠI ªªÊ6·eKÿ G�cÅôα­ €äR@ùzM-�5U?›úv¤oJê…S&Û·o·‰Õ_mSèµ6”ijeÝû¥¨–ЪU+CPîjëÖ­­¬˜ ²Ys¡Ê2@@@@@  �ÍÚ„Þlv@JC@yÊ[QÖ†zÓuûÒØGö@’ (3Þïd²é›N½²ËËËm—Uûå$�µé´„0§Uß–Õ*rý„²Y›NcO@@@@@ 'd³æ„•…"€ €¹PFFSî…-×Â,@ŠQ@‹¹ë³MØæü�ÍšgÖ‚ € € € €%+ÀiÖ’}kÙ1@@@@È�§YóãÌZ@@@@@ d8ÍZ²o-;† € € € €ùà4k~œY  € € € €”¬§YKö­eÇ@@@@@ ?œfÍ�3kA@@@@�’hY²{Vß[·Ùç¸ñI�ƒzxüÜa@@@@@�”d³¦äa$ € € € € °;�âÏfÝíbÕNÿoÅ:�55SÍ£óËÝÚûT­Ë=^7ÙãÂUWmðH6«+0 € € € € €ÀnÈfÝ £@@@@@�ÔŜͺ#Ê`ýó ¾‡ÿœí±:�7mó¸ÅóF›��j¼ÔÃí~ÈÖ:b¯A•ÍúÊô7­üóëï²øÀ�û[d@@@@@� ›µpÞ ¶@@@@ŠR 8³Y·E9§ê�53ö¾]|¾³¢^Y;¶õr·÷îã±}�I†?ÜvŸ�ùëߟN2~÷Õ'ãëýÎåךtÎÜ…V3óíE¿yÙù‰±�<þœ•�ç=ƶ«ˆ¶61Ž € € € €4¶Ù¬�ý°~@@@@(r�bËfU¯¬Ë×9{�^Ô󨌲AÏç³u¯ô¸l­Ç{^ôø½Ó=¶Huöù„c³I:`Ÿ26Üy÷?¬®U«r‹Ÿ9ó„Øx¯èXeÎÆÆMzô«{Ð^û÷ÛÃâ’¥+,¾üú\‹&?ûÚGÅ:þÿõÿû†Õ/�@@@@ò#�ê|b~¶€µ € € € € €E-Pl٬͢ ÖU™ ·ŒÎ)Ÿ3ÆçÔÝãÖh97<áå;£¨%+O¶¹×ĆýûX�bld³GŸø—UV´õÞ]5">A�5/½2ÓêúU‹—ål‹ÕÕ5oºõ^‹‡�ñå°ïž{ËoøÅ·-¶ˆeÝöÝ£§Õ3 € € € € €@>Èfͧ6ëB@@@@�(ºlÖè=ȨSÖf§à3�à±,:¿|ãc^^½Ñ£†Ì–üÑÜü¿|Åû6×O®¹-1¯rT'=ò”Õ¼5ç]‹·Þðßß}oyb𽆱r‹uçÛ&&£€ € € € €y ›5Ȭ@@@@JY 8³YÃwD �]Ú{݇›<Æ3RñÜÏfã÷ñXÑÚã]Ï{œ³Âc£wÝóˆ­¿O¯.·lÝnqGÔóì“Ͼlå+¿~¾Å®]:[ ³Y�;ãR«‰O?ôûx%5 € € € € �S²YsÊËÂ@@@@@ ôŠ?›uì0—Žéqúb��¾îQ9­ƒº{yâh�•m<þs¶Ç§ßòXÃ)'a[Ñ©c¥Å_^w»ÅV­Ê-þêÿ»ÂbEÛh›­ôÉáæk¿kêÅõ“cx… € € € €ù ›5ßâ¬@@@@JL ø³Y«kü-é×Õc—v7oó8ã=�Ÿ=ÌcwÏm¶ð�wF½²z© †‘û ¯s;’å±jâ!ƒX¡E uL[ç¨D@@@@�< �Íš'hVƒ € € € €¥*PüÙ¬//ð÷fx/�G�ðxÚ�âq@7�¶z¼a²Ç�Õ‹|X°ð]Ûƒx߬ýúºC«V­Š|ÿØ|2¨®ñ.™·ïô ÷ª�QE³]»ÔUs&Ëd@@@(F�æÍý.pÝ ^ÞÂ3M[·ôX–³»ÃÉf-ÆvÂ6#€ € € € €@ g6kYììð_^pÔŽä±²­G%±ýö /¯�rZ½”|ˆ/9ù´�8æËßúy�kÿÓïdõ}ûD¹½uNA%¥% ?ñ-;vÚn)�µ´ö�½A@@@�Ltokutâ ºÆïnßÝ㮜֊V~R´aŸz;_™Éf3 € € € € ÐtŠ3›µgGÇÔ“‚:_Tü¿§½þ[§xܳ·Ç[žõ¸h•ÇÔƒòXµäÔSÀاü�mE‹œõ%Q»È& °å±nÜVeÓíÔ`7s0@@@šº€î…­®ñó Ú”[l¨œV²Y›zÛbÿ@@@@@ K�¢Ëf�Î/W´òÝ5ÀãôÅ5Ty? Í®ù‡Çö­=¦Ó«O÷ÑÒ´ä$g±_zu¦Møý«nŠfØ}xäÉSLôã+/¶±G~pŠi…ÉÔ+y¬É|¨G@@@�d:Ÿ s í¢~Z“M™~=Ù¬é[1% € € € € P‡@±e³ª³õ£:1ÊU�3ßõ�SÿŒÕ5^N'�U}›*+öŒÑ>—–œ¤K†=‡ ²I®»ú›>eÖCŸ=zd½ €@S¨ŽþÒÕ—JSÜö@@@B@çÚ´ôÓ‹eY?‰lÖ†xOX € € € €4a�bËfÕ[Õ":;Ü»“¿úÌX�Ç�ô¸z£Çð™ãÊuõÚOeQÂj·^ÛU±½—µd/Õ1têXiµŠuŒÎºjØ�~¶Œ.�|-ñ¡¢¢­UŽÞX|54)òX›ÔÛÍÎ"€ € € �S�g¨hU–åZÈfÍ�Ù@@@@@ © 4_¼x±ôêÕ+c‰Ö­[gúˆÅô‡&œnpÐÁéÏ”%)@»*É·µÑwŠvÕèoAIn@®ÛÕÊåËÍmÆõ ¢×±S'[NÏ^½di,$w¹nW¹Ûr–\Èùù=˜L`Í&ÿ�ø­—ý·ç�îþ[O¿F“MO}j²YSû0@@@@Ø�@æiM»Yp¾FïŠ:0¬ŠÒ¶VøÅfÕQ/‡©×ß":½Ü­»OÕº�Çë~îqá<�«Vz$›Õ@ ÷];ø5ÃóúøÁë‰wÊ-†×GUøaîÆÓ¶ZÔðÇ=¿µS¯?sÔÇY«—=ìù°É†UüÀ÷éÇ£C^²‰RÖÿõxÏ´%›5%R�ìPÙѶ¦ÿ Ág½1â²Yµ‰íÚ··ÂÙç}^/-þóé)ÛVTX=öÐDý}þS¢L�ü´«·ß|è•1”™y›6~<¹ÿ¨Ìfg®< äº]mÙìÙý¿½æg ²_—|í›¶œÎ]º4ÈÒXHîrÝ®f¾þšmüŒW_n�]=ö0[Ù¬ ‚™Ó…äº]­_·Î¶ÿ¦ë¢Ûl³Þ“¯_ù}[FÛ¶þ펡�òó{0™ÀÈ~þD‡ñý×åŸ^õœÖð×h²¹¨O&�nL6’z@@@@@�Ý q6ëï~°ÙŸoóøœ§à¤•ÇêÓ}4”ùãÔš�y®Ç÷yl=OíÔ‰^Ng˜òÌ 6Ù�Áý-Ð×âýN¶¸ió‹ž—î‚^yͳ6òåtíâýò¤V¬üÀ&x{ö|‹³çø¦Ÿîi;vì`‘ŠQàGùA­]”£nÿŒ-~`wOÝW¡5'“ÃøóŸñcÔ ¨¯Õp]ñòúhí{ßê™� Å(püɧÚf+³/ÜþÍ›6ÙËÛoþ]X™(Ïšùz¢L�¸@®ÛÕk/¿h+]¾tI|ÕiÖtïÙ˦$›5M®™,wíªUkÏÍ™0ñÓ ²§íÚ5ÈrXH~r×®´ýý²Âg/¼8±;¯¼è¿_ü×s¿vÅ÷,†ùÔŸý­¦ÿ€�5üñ¦?*òÑä®]µ­ð»1N?ëœ:-f¼öŠÕ¯YígŽ=ñ”:§ +[•ûÑ�¡Xòù{04i�»`¿Kò‹ÑsA¾¾ÒO– ë•Æ­âá‚(Gd³Ò@@@@@�¬2IƒÊj… 1³úc½ëV_Ö³Oe¾ÄQ£}Þ±‡{Üìi=v¥Ñ£j¼”|X¿a£�üÙu¶xõ�þÓ¢²Y?\»ÁÊëÖûØt†êê›ì�‡Ÿ¶øæ;‹-~å¢3,>ö@‹¯LÓâÒeï[|wÉ ‹³ç{fǪÕþDËöÞÇâc÷µ¸d™�%›Õ("�æyO¬ñþR:Õ{AÕpp»¨—œs£ÃSTuã³þ·ß%ê³õ³‡D‰ýQýçï&¿FfM=Î~û-#˜tßݵ Îúìù‰š••VþÂ%—&jž|ì+W´óÌåqGŽOÔßþug¼&& ÐDòÙ®.øâ%MD•ÝÌO»jÙÒ?mGì·?àMD ?í*fUU•�¢7Ìd>Å[ŸŸvÕª•?ƒaï‘þ?>¼1cºUöÚ£�ÅdÓÄ碦�rý{pËOU}a®¦¶Vù”WîµÓââÕžÍún“ÍuÈ?ÖU¶õߪ ¡Ù¬¡e@@@@@ ÞE™Íº-zàösžšáÐo€ÏøéÏyìØÙc·÷é±}œ¾úšç™–—û9þ‘{óÙ2ÊÊüL÷Oÿûë{Ò{ðùýÿnqÈ ~ÿ6É;�í×§§Åýz[œe¼^zѧ¬|ÆiÇYlÙ²(ßDÛrØ{ïïfò~P{e±ÿ-ÿñ-�ûõ÷«ˆOÌúøªct¨°:Ô‹´úÐ ë5–ˆ@ß~ý áÜÏ_dqÁ¼¹gNÕâ€Aƒ£òk54W3úè•ýßËy{ìîI¢Í–yg§Íîþ“Çïÿ¯Ç)O>k{ÊŸ ¹m»÷FqÊ9—ûl±á±§ý9€ñá„£¼ßÕï}û?£”Ó:á¤ñVsÔá[ìÐÞûX¼ùºÿ±/¾:Ë^öèÞÕ"y¬¡ eŠQ s;?�)>0ÓŸzîp¿ت¥÷q³c§_{|e³Çáð3ãÃ�ßø8ã5>–š¦)оƒß”¡øÚK/ZyŸ‘ûY,/÷Ö²s§rmÜà=‰_ÿ‹«-Ƈ×^𝤦‰ ЮšxÈÑîÓ®rÛÄÛ¸íjí‡kÌ¿sÿ½ÆPJùlW›£GÇ,y÷Ý`õN¿×mó&¤Ì–è‘2ê+61�ô¯g/¿ ¶{�èdG8šrA äú÷`÷Jÿ½¹ük rïKs£RžP,Í]f¯@@@@@�†(²lVízÔÝM½Ô…é9øŒƒ†xܺÅãoáqGô°ît–<í¥×mú×g-´øÓÿòŒÔ>Î2›ôÈÓV³q³÷´xþgNµ:´¯HTnÚäOßYíùk�:úsŸ•Ç:�_¹R½ÃÖ­Þ×Ï’eÞ'Ëì¹¾ áп¯_¹ª¨ ' P…2….°n‹ç«þe±÷õü·OùÑCÏkÜêI‡ÍÎìéW ¯?[Ç Ÿ2>”—ùŸ¾ããcQ|š°fÜ=…ÂzÊ¥$ |‡ùsgÛN}æ‚/$v­j‡7¬=úö³xÞE_²XSãŸAñ¡¬Ì¿$ÜtýµµFÍŸã˼ÿî?תÏþåI§�a ÙÿÀƒ²_KÈ‘@îÚUŽ6˜Å…@~ÚÕÎ(lÎÛoe`Rý�ØkŸÌË,�%�Ÿv߻˗YåØqGÆGQSùiWk×|hV“î»»N±Y3üŒ„b|‚cN<Ù*Éf�ËrMþn¯òߕۢߛ+ôë³¶Ðü•þûtHOÿ¥ §ƒÔž‚×u �ÍZ— u € € € € €@ÚE™ÍšY¯¬§Nt•F{ŒtšÝðÿyyõ5¨ßÕ�^ÕþëÖmVuÃ-÷Z‹—~ó;;TúqIÃŽí~sî¯öS‹íþ]ËÅ#�ÿ߃�½éÏùö Ÿ9×oôîßíãûÛæ¬ðßžGÿÍ{þõx?vÔ^Qâ«•v'@6ëî„� € € € €¤ðSÔE=¨‡=È1z¨£eîÔÞ¡1ã¼æè<êÒÎ]·zyÎÛÃ!>o8vÓ&?Ç_õ¬zΙ'…£2.ŸûéSlÞ-ü|÷õÿw¿ÅQ¯ywÜìW¢â׿q•Užw¶÷·räáÇ' ŠN`D¿røôYÞ+ëµQÞ葼æýMžIÚ5è+çó}½þgýX¤a�ßú3åë;ŒèÏ*Ô×–zXõÛŒlÖÔL9¶ÿ�¶]ç]ôŸzüõ{,6¬÷,›ví?n9µšÏ\p¡E ?ÿßÿþ¨XÇÿ]»w·ÚúUÇ8ªJ] wíªÔåØ¿TùiWmÛz¿äavXªmb\ñ ä§]ÉimôCtÊã�ÚË}GùýŽaϘ­Zy¾X¿-ÞsçíãÃàaþÍPøùlW¡Æšè&ÜòroKí;|ü-NÓlÝê¿#4´­à YÏÿùü=¸y›ÿÆüÍ+~?å¹ýü÷`˜Ç*³={û¯Å¯ ò±?yÎïk<`€×T¶��n³Z†O �ÍúI^!€ € € € €õ(úlÖ±‡ûï)¡Í¦¿ìñzT^ê !^žø�êºä¹)^žò¸ÇúÝ»w±Yn¸æ¿,.]¶Ââê5kk-䃨fc”÷:{îÂZcõr`ÿ>VhÓÆ¯ ”•ù³Û>{¶÷Ê:boÏ'êß··Eh:}»øuÂ5›üº×”5ÿûïçÇ“ÛXÜé“3 °åœnܰÁ¦[µÒ?³&L<ËâC÷{¯^{�Ü×¢õßZô÷ÑþG ¶íª¶¯B€vÕŠ,£¶@~Ú•r o»éw¶úî={Z<òØãjoJôúÓŸ»ÀþWÞ«>y[¶ôl²ûÿzW�ÓSY˜ùiWñ}ÿ`ÕûVÙ³·Ÿ+P?¿á4Û¶~|¯›2÷ñ” _ Ÿ¿žé9ÑswxNë­c½Wßd×�ðߤÿ³÷ö{ûóþËôëÇ}œ7�l.êÉf¥ € € € € €Y e6«úcÕ~+ù¦ß¥Z7mòòÌ×<~î"�Ýý²b³…ó=Þy«Çl†–-=ÿôw·ÜkñÕ™óR,ê¥é¿¬sìí7þ·Õ÷ï·G­±û�ÜÓj¶lõ+–,õü£�AêÚ¶mþŒÔ•«V[\´x©&³Ø£GW‹í*ê~ yb2  P°Sg{FÉÝk,vhãi«Ï~èW¾õ Zå±ÞµÌ�?wý®vLVÉ€@�z.mÏÞþ‰Ó¦­F¬Ž²!zõöÆkj<5úÝE ,^óÓ[d@ ÚU:JLS_ÚU}Ř>�\·«®Ý¼¿òÑc³8hÈP‹-[Öý»¼Ü¿éõèÙËb8´ŒêÃÊ…/�ëvx?º3iHÔÏ~|ì–-ç¶åœ@¨Hjrý{PwOþfºg³^6Äï˜ÒÓ $zvô_¦ßíç .Éç:v/?¾�èûñÝ–ö’¡–Ù¬µ@x‰ € € € €ÔO îKmõ[F£Nýò ¾úá{{<æD�§{×sÍÆŒó8`°Ç ë=þ6J-ÝYååì‡_üä[u.ä·yŸwëÖo´ø�Ë/®sšd•¬þÐF}ã{¾¡¿ûÕ÷-þøê›,.Z²Êb8ÜtûCöRQõ×\õU+8jD8e( �MÑÓÿô¦ç8]Q\°Ê³V·öÖ½ûø5ÆV-½¼ük~l ‡_NöüÄ_Nñ¾ræmövºw𫎠l‹ž9ûÚË/EŸ~ý,¾¿Âï�PNkßþý­¬Ìšøs·~ào6ö±‡½³óM½ÕUVv´È€@îÚÕÖ¨_¹™Ó£Û‘z¿è©ßíÚ5èRYXC ä®]5äV²¬bÈO»ÚÝJ©¾VÎOu§c2?mg²±Ôš@~ÚU¸×;¶{ï™Ö­³¨žañ*oݺ9Q©oz‰—ŠB ׿«£ˆWGOþØÝ%yÑ¡©ze Ñ>u€g³Þ÷¶ÿVýÙ3­-ÞúÙ�Ÿ†SR–Ù¬´@@@@@ +�¢Ìf-ó4¯O ¹Í_vêìñ 1+;yÜ�³ÿí/¼¼Þ/ÿìfHÒ‘Înæj¨ÑwÝý°-ªß=,v¬¬L,öêÿùŠ•ÇŒÞ?Q&ž÷íð%e("�íUžú?ÿðŒÔ½;ûkÞZ¿ú5çyïûæÂÞëÍÚ(GµÒ'ùwN«—š5Ó¼cø4«6ú\Ç õr[¿ÐØlÅ:¯éÝ):zÅ'†q÷T|â5/JK ªÊoÜxàž¿XTÖÚ>°ò3ON¶8ê C,nÞä9ªžßö WµÃ¯W6Ìâ†õ~3Èž{û}­Zùµk=¹³ºB·× MI ×íÊžœlœSŸz¢ÁQ‡ßÓ–I6kƒÃ6ÈsÝ®*;úO‚\ô=}ÅlK.‹ÿ,i’�@®ÛUø9¸fµÂþ=úÌÍn«™»Ðrݮڵko ̯±!8‘±>Êi�ýö[µ¦Y¼`A¢fÑ|_BógÔ 4ÈjÚ¶åû©€ ùù=xïËþMþ/ËýTÚ-GzëÑoÏt Z—{úëw£¹Nÿ‡ßC9)êÝõìCÒ͇Mg-¥4ÍÇ{¥´Wì  € € € € �7�¢ÌfíÙÛ}ty¦&JÕR¼ù:¯ÿÖ<îåÉ7Íþð{� k_òÊZƒ.EkɵFåáåÜy‹l-?á=èýîšïXlî)  Pâ¯-òƒð[QëCzŸJ-ZøÕÂ'fy6ëƒQ8W¾æù†õ&�ºÍfI–ÍzÝÏXì=;2õ’7m÷ƒÑÅSýú'C±,˜;Ç6Uù5_ù†ßñÐ"úP™õzùÆëÞ÷å´>k±¾ÃYçžg³„Y<õ]Ó¯@®ÛÕÐ=÷2œxOÁÅ+Æ–§#�ëvÕ©sÛŒS>uf:S¯iZ™bõš‘‰ó �ëv~öèy‚Ÿ½ðâŒ÷ë�7ݘñ¼Ì˜O�\·+ÝÕ1é¾»SìÔ+ÓžO1V£ºÿÞZÓ|áË—Z Ù¬µX äe®VWû¯¹o¿â¿.Ï�žùqÒ~þK°¾ÃèÁ~·Ü—ø�“?‰–vü¯éÔ®î»'ë»üRšžlÖRz7Ù@@@@h�æ‹/¶ÕöêÕ+ã•·n�¿,§]žæÕ,êt®Ùï®õòô—=†ƒòRÛw𺠓p’:ÊêÑõ?¿é£Êý}†ù¤¸í>›wÝzïóî;—ïþªfM�ïÒw~x�ÅÎ}£øÝ¯XÔðÅË~d…ÓN>Ââþ#=Ë#>|ã{¿²ÊïK%ñÆ'¢�Ø=13³�úpK&×ß2[W®çŠÍf¼ë9­ôžUãÇ›üzØæ(«TQOŠ,�z©nYæÇ�x¹st]±,¸”¶&ZÎÓQ†ìqûøµÇÎíwíQ½M‰æÚ·¯?S²_W� …,>ïxȰáunêÆ�¬~ÛVÏzÞ¾ÍcM�¿³eQ'å-£�R•Õó bûÞo89\†ÐÚU|Óó°Ë´«< 7ÁUä§]©—ÌêjÿþÖ¥k·Œ�·nÙbóês¶UYg¼ÁMvÆü´«&ËÛdwªHúÿ5W}ÕÆ‘Íšˆ&@6k�½!l € € €MZ€lÖ&ýö³ó € € € € PE™ÍªZwFÝ®Ž=?\ã˜Då]AN«¦ŒC·ˆú4ìÞÃǨ#�®Ý½uI—´WÖM›ü9àï-Yá“f=챇¯¾SGïçnÖÛó,ŽÜgX­¥Þt‹?gðè#±¸çðÁµÆêå­wüÍ Ç}¨Å�A&l�S‰@��ÍZ o›� € € €&@6+Í@@@@hd�¢Ìf•™2UÕ«bUôøñd¬¡ts0Z³òèbê¡UQõá””@ d³æB•e"€ € € €@fd³fæÆ\ € € € € €@ƒ ´l°%å}AÊ<-‹zYU,/ÏûF°B@@@@hò-š¼ € € € € €@VœfÍŠ�™@@@@@N³Ò@@@@@�¬8Íš3#€ € € € €œf¥ € € € € €Y pš5+>fF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•§Y³âcf@@@@@€Ó¬´@@@@@ +N³fÅÇÌ € € € € €§Yi € € € € €@VœfÍŠ�™@@@@@N³Ò@@@@@�¬8Íš3#€ € € € €œf¥ € € € € €Y pš5+>fF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•§Y³âcf@@@@@€Ó¬´@@@@@ +N³fÅÇÌ € € € € €§Yi € € € € €@VœfÍŠ�™@@@@@N³Ò@@@@@�¬8Íš3#€ € € € €œf¥ € € € € €Y pš5+>fF@@@@8ÍJ@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ eVs—ÐÌk«7ÚÞÜðþß,j½‡Åó»žXBûÇ® € € € �?�=~Û!+cMMF`ù×üì …)@6ka¾/l € € € €�@Ñg³îЍ«vUÙÿËw¬±Xcÿv7´hÖÜ&éÖ²“ÅÖ-Ê-þfå=l_fñýª-’Íj  € € € € °[²YwKÄ € € € € €@*�"ÎfÝe°Þµf²íßÔ�¯[¬Þµû<Ö£¬¹Ÿe>«óÑßݱҢç¸6k6¡Ó¸èÿ݇Ûïú»MÔ¯o/‹ÇŽ?´Î¦<;Íêß}o¹Å‹?V�Ó„•>ò”½>t Å}ö޲ò��dqÈ ~{`­±¼D )tm×Úv³¬¬¬)ì,û˜��;w&ÖÒ²e,&ö‚B!ÔÔøw’ª*¿Û¦uk?j1 ÐPÛ¶m³EµiÓ¦¡Èr0ÚÍ k¿¾ÎÛªU+‹|{Ï…pÓ\æºu[lÇÛ·oo‘oïM³ äb¯wìØÑ ‹%›µAY € € € €4]�¢LÛQ¬Zý¸½oÏnœžñ»7ªb¸Í{hû‘7WoõXãÙª±Ân‡w—¬°iÚ¶M•M°z�_Á[e³¦^àš×Ú7Þⲿ¹úòh.ï+¶Cû ‹]»t¶øîϺíܹ£E𦀮„s=¼i¾û¹Øë]»üSE‘v• á¦¹ÌæÍýå´Ò®šfÈÝ^·háy´«Ü 7Í%Ó®šæûžë½Ö‘JwupÔʵvÓY¾ò£Õ®Èfm:ï{®÷TßÞõ«0›u‘Íš�ó"€ € € € €ÍŠ2›u[Ív{ëž‹úcÍì=ìת‡Íxvçc,v,ó=º•w²xd›�Û·ðìÑdÃ9_¸ÒF­þpcb‚©ÓÞ´òÍw<”¨IV8æôÿLŒzêÁßY¹E õëÕ“ŸzÞâ°Á{XT¯¬?¸êz+6f‹No1>TUy¯‚º6.->%5 € € € € � ²Ys¡Ê2@@@@@  Y6«ze]^µÚÞ¢šfzU¿w«²¬�ÍpAד,ö(÷ÞN—íXeñ¯kž´øƒ=.´Ø¢yª³ÏWÿÏWmšêè Â7ÿñ>+ìßÛâ‰Çn1>L~ê_V¹`‘÷²zé|&1�ú}ÐËÍ›ýIy÷ü}ŠÅËÿó\‹áXMÆõë=—öñ'Ÿ³x߃>×^ÃXüÎå[d@@@@@�| ¤:Ÿ˜Ïí`] € € € € €@‘ Y6«= Ú ·×TeÀݲy™Íun—ã,jíýŸn�úx½îý{­¼c—/ó£%+Oöã^SmTb2¸¢\ÙÁscÛ¶mc±sÇÊD}XÐØÊÞßëð¡ÃQ‰ònÿ›•7nÞfqÏaõaa鲕örérϽ}ú_3,víõ*Ûµ£•[µ*·È€ € € € €ù ›5ÿæ¬@@@@JJ è²Y]WF½²Nè4ÎæU1ÜbY”ÙzýÊ¿XyõÎõ?”ÇúÑ«ôþÿËýÞ;ªb²9?dŸ:GMý×ËVÿÐäiÁXÏ¢­®®±¸uëv‹ºûQ‹×þî‹>ó©ñV¸è‚3-þõoÿ°¸³j§E@@@@ȿ٬ù7g� € € € € PRE™Í¾ê?µKKïŸôÃ(/5ž�:¦Ý{L‡ƒ,¶káý¨Þ¹æ1‹s¶½g1âó†c“•¿|áé6ê3g�\ç÷Üïëzë�ùµÆVWW[Íõ7Ýkñ˜qû[|úù™g¼ñŽÅûô Ùw—}`qÌ�{ZüÉùZîýûd‹}úô´¨þX·móŒ×Ž•ÞO+ € € € €ä_€lÖü›³F@@@@()�¢Ïf=´ý¾ö†_yˆÅé[f[|dÝó•—:¨õV>«Ëx‹ÊÚYœºñu‹OmxÕbC 7m¶E}ðÁ‡u.Pcã£ÊÊʬòk—œmqÄÞÃ,*›Uy©§˜Õ<ûükÇ�eqÏáƒ-6o^û̸úoíÝ«»�e@@@@@�ü Ô>g—ÿ-`� € € € € €@Q e6«úc•{õ.ïá´kï«´KËJ‹›ª·Zœ±ežÅó»žh±{ËNn_fQ½²Z¡‡¿Üïý¨*&[ìá‡ìSç¨ñGޱúõ6&ÆØÏÊãõžd_sN¢>YakÔ7k»¶Þç, € € € €ä_€lÖü›³F@@@@()�¢Ìf ß�—6¿m/‡oèoñØÊÑOï|„Å1íGXЪ—Å ÕÞwêõïßk±*Ê~µB_¾ðt[ÚgÎ:¹ÎeÞsÿcVÿÖ;óë›}åÖ­Ûl!mÛ¶Í~Q,�صË{lž7ÏóÜçÎ�kñý?åšš‹]ºt±8`À‹ûîë=>·hQ¿«P+W®´¹Þ|óM‹*ïØ±ÃÊíÚy¯ÐZòAy–z«V­,ËPUUe›ª=ÚcïíZýJ‡Û¿dÉ{Ù­[7‹é‹$_]íw$4oîw)´lY¬IË—/·íûmÿé%´/ú´Jgûõý!þ-BòZ{çÎ�ÓYTM#µ«… Ú–kõùÞ±cG«8p Eµ‡t>ñe¥oVúæ¦ã•Žóýúùý:^é»–½,¢¡´ÛCc½Û·o·U«Þ~ûíV¾á†,^xá…Uc…V¯^m{§o•ãÆ�³²þKx—sºkúD›4i’­å±Çü¬ŽŽHp€•õYyþùç[¹oß¾KuЯÚýë_¶ƒ‡æÏJö‹¦Tê»_õ;�Pߥ3= € € € € PòE™:Ô¢yí³Ã^3ÙÞªN-=ctÅ^;–yÆ.û׬ÙuQëú(§Õ^¦ÊbK'žù¦g}ó×…•Vž:Íó×n¾ã¡Zõñ—ÇœþŸ‰Êk®úª•åY·Ù gOôþgu¥=›å0/¥* <�§žzÊvPÙ[ÚSeî„Ùš«Œ×ÓO÷,õt2O_}õU›RÙaZ²®WTTØKe^èÊçâÅ‹­æÄýo6ý,!›¸‡t²xÒÏñ‘ÆÖ­[m�”{¢«îSÎo#îl½V­,›^xÁæR«fWV¦®ñjï,X`œ|²ß÷  /M¯X^^ne†õ©ËÊÌÒ{”N¾gê¥å¬ZŽ$ãkW}²±ñéwîÜi•’Œ�-–š†mWá^«>üðÃV©ã^˜Å¯ì~å‹)í”SN±){õê.¤`Ë7n´m[³fM½¶Pù†édYê¯,ýÖX¯ÍÈÛÄÊoÒQ+ü{ѧ•rë”±«O+eBí½÷Þ)¶PKSî˜&S»Ræ‹2Ö÷Ûo?›`ìØ±)––ëQ:æ„ÜéäyÉjÙ2ÆC:ƒŽÆñc²œµ}‘¶r¥“-YŸ)º+"Ù4�[¯; žyæÛ í‘¶Gû(ae„)êsâĉ6Yü>Í«¿5厅òú””Øœ9þ eRë;[Ü\K+ÌXªí¡±´ï¼óN[õW\aQ-­±¶¤q׫LyýöÑ_‡þšfΜ™bÔ]~Úi§%¦Ñ_ŸîÍJTî¶ ;‡ºÛ) Ó.¹äÛÔùóç[ÜgŸ},Žágož~úi‹÷ÝwŸÅ믿Þâ]wÝeñ˜cޱXzƒ~ë¬OüáÇÛnN™2e·;;~üx›FŸ�<òÈn§O6�Žóñ»*“M߸õµÏW6îÖ°v@@@@@ èŠ2›µW¹÷ãÖ¢™÷åWå«*Þ´êïVsE¯ÏYÜ«�÷±øL²¸p»÷š—zP«–œlÊ¡C|™øÍ÷TG½:>:ù9«ÑòOMð+Í£mûGTß»g7«9`”ç¨Þ 6ôŠêUN?^ñ�/ØÄe-ʳì;¯$œñ¹oYüÅÿ~Íâðaƒc) €Àã�?nÊäRï¢Gq„Õ¨§0ù¬X±Â º"§¬®—^zÉj4¥¦‰GõC§•뤱éô×–ÙÚv.½§ÊÊÑ{zôÑGÛ*ÔÆ´.e›ª]½ÿþûV9uêT‹gžy¦Å°ç¾!C†X�¢v;hiê+J†�›#¶Û f‚4¶]i¥ÊÄTF¿òXÕ›˜ú4 7lÆŒöòå—_¶øì³ÏZ<çœs,†mÕ^à ¿Aõؘþ楓ɘþÒ yJå4©÷ge‚èÓmÏ=÷´ÍÖû«#°²S•÷:mÚ4«¾hã=™.Z´ÈÆ*«EG¡“N:ÉjÔO´lPÿÂO<ñ„•ßxã ‹Ê´Òz}ŠüúÜY»v­­VÙ^õýDV É²iÂ;fÂ=Óg\X£)•ù+å„JRCÊ Õßo8o¡•õ9¨­U›ú"¿eéûÏäÉ~÷¡>õi¨6ߣ×_Ý*•Ǫ¿ë &X�úòV®´>[Õ¿°Žog�u–MSø× ÛÞ{ï=ÛëôsíåS\÷ÙîvPÆ÷•W^™˜ò•W^±ò=÷Ü“¨)í‚î®Óïýúxë­·l—õ^üñVÖÝ*:êïTw�hÊÐçð÷—õ=þè.§Ë:þå¥JOGeeêø¯^€o¹åÛÁ¯~ÕïQþò—¿lQŸ¡ñ»ÖŠÑAÛ¬ÏzÝ=f7«¬v¥ã¿Z jtfLGéø/;ý^Ö'²¾mî¿ÿþ¶:}.ëÈÈ!‡X�î³Ñ÷Òâ2$›µ¸Þ/¶@@@@ N è²Y=ƒµ¢…?©ù€vžÅùÚfï—GCÕ.ï—í+½_Œö-ÚZL§?VÍ{@…/MKö¬Óº†v¾ÌÁƒü¹–oÏö:îø‹÷qöÚ^¾àl¿FÔ¿¯?‰[× ËÊü,öïo÷ŒÚÃFϵxþ¹~%v¯áƒ-¦3´«ð=]½Ú¯ºë*e›èÊá¼«×øØ ›¼¯ÃÊÊöá(Ê `ê]N™§Ê߉ç¡ôîÝÛ¦T> zÛÑôª‰÷ö¨k˜Ê;òQGeõS£Eõ;¦ëŸÊ¿H§¿×p ù/뚤b¸v匄5aYù•ªIÖ3�®m†W5UÖ1³¸²YG�e;«¬œðªlh¢ë´Ç{¬UÞ}÷Ý•+­L–tz„ —¦²2 ô¬OÕhí…ŸA ëÞñl/åp)Æ÷Ws©/Eí£z Uv^<ÏB›ñÖ«'\Ç—_h5¹hWÊ[‘¡ò”Ãßw­]=´ÊPy.…Ÿ—¡|ÌÂ?ºÆÍóS£LÝi¡|Ã0ï^Û £±>%õwª6 OÃ1cÆÔÚÔðP-*ÌcÕÄZË‘Gi/• ¤œ”aÆYM•µ?>h«t$Ñ'Ž>—U¯¨Ï£øç¾ÆêS,Ù’“e*Ssi�ÊÐÑ79h¬ÞEÕ'[f¸Í�[V›Q<¸îß8jj'úüÒç ö.l zï”û¬ýÒòe¨ý¥+×,ülUŸÂƒ j\�Ý®½aÛƒ²8“µÉøÆ¨…Ç닽æ„N°]PÔ¾ÜqÇVh:Ù¬úëÓý:Ré~;}‚ë©Þ}yT£ï:æ„m ¾O ç-ö²2+o¸áÛgâ}”ëÛÔ¥—^jÓèN‘{ï½×ÊêÓöóŸÿ|±#$¶_í'ü•¡;ô[O­HýãëȬ{DÂÏÖxëRÏÔšWŸ*«ÝêwºjÂå$6©( d³ÅÛÄF"€ € € € €@á Y6«²Lˬ_ÖfÍÎê|´Å]»wÆÏU­Õ»j¬œN«zwUVì™�ÇÛ\Z²Öb/k ¾g5¿¼Þ¯ŒÍ]¸ÜâcFZ¼õ·?°8°‹ápÙ%Ÿ³—Nò·ÛîzÐâ¥WüÒâ‘c}®¯~ÙÇvëÚÙb²á˜#½OŠýìV‹º÷‰d“YýñGh±WÏî)¦aMS@×ùÓyJo<»PY`ñ �y󿦮°©Ç:忤.–L+]Á¯F*ÓPY„ñ\`õ¡£>æÂÜœ¸†²Tt}2«¼!y†×KÃi ­¬=UD©·Mû«Þ÷”¨voo©—£±º†¬å({(�¶—Î’s=�®ü+ÏBëR¿�’‘g¸ juú«QaN<Oùwú{Ôure¶ªŸ²pÉ…\ÎE» s{õwJÆ5ºuó>å5—Újág³Æ÷¢¾5ÊÓ1*>¯2ÃlÄø4ÊÈ‹gmħÌ�¶MY¥©×®¶¡c‹Ú€rðùô—¥(Õ§ÎÔX u€z“Ì]޹ŽÊ‹ ·<,+S^-<¬—@²ž+uÔ §�—uü ëÃã›Üô9«- ³VüNµ·°&\fᔵ…ÉòXÃíÔ±E5Ê`’†²¢T¯ûfô—¨ïÉÚ‰>SÔVõpõ;™º5†ÛÓXå†mrh¬}a½…# ïáÚõ¯­ãLØÞô—¶™0°pö¥q·DÇ´Ë.»l·›¡Ï‹O<ѦT6«ú0ÝíŒE4�>»õ�zóæÍ¶ýúU~w 熟¿ñ_ŽÚ}M£Î[D8)6•lÖ8ŒB@@@@v/PdÙ¬Ú¡Íýìpïò®?ÛÕ{D=¡£g}®Þ¹Îb�\­d¹®ö¯®¡,ZB·–�ld·–-v�¢–\×^×·O/‹‡침߽ü"‹ƒöµ˜ze¹þø¿üzȳ¼'ÙùQVl—ξv mÛx¬?¾òb‹;vøw­­kÌV~àΟ[\»nƒE]1HL`…Ö­[YìÞÍ5@ e!éʤþÖ”³_¦úÿR½úëÑ\ñ)‹±FWÃcŽòJ’]“ÔXÅø^'»Ú©)u SÏE�?Ï:¾´b¬ e’µ«Ôû¥l_=9WSvØa©g)¨±ú ´yjQñze(ÆÇ†5j]º®lh� ¯¥EnLè�¬]…=¬)?1u?Èa–béä*&›FK‹çY§³%…6Mêv¥~EµÍú MÝNô·¯Ìe*Û4Y–böÊpÌ~9ZBø9¨,×dŸøÚ¯dëU�²huÜSf�dÔzÃlhå{ªFcS÷�žl½a}ß¾þË%\K86×eå2k-2T†T¸ÞU«V%^êîµ±De­‚öHí*ì#¾Ödø2›öP€»Ã&ˆ€Ú•úXד'Ôs¨î¾Ò7í°§ãø‘G;¢ãOø7›z•!æÉ¦ž¾”Æê>!í‘î6+¥½Ó¾¨�¨×låMë÷ÈøÙ*µ«ð~Dµͫϻ°Fõj]ú·–P-¡EÔÓ«òXUoÔ9(oôÂó&Ö96�ÊýFîi“)†Ó·jUn/�<üà°2Qnß¾�••@ ÁÔ]˜·^ï Wöö˜lšpzÊÊ“m˜A&õ%UM“,W¨x%Ãþ Ãþ³Òß#å&(§Usê±4ý%”ê”j]Ú»ÆÊÒj,ÛtÚ•zVU¯ˆú+{öÙgmƒ�=öX‹áßÚ–-[¬FÓ(;£¸r3ÕÏfúÙ7a6¥ŽKa�Q$-SËoØLÉÄ* ªæãÄ�WaOÊOÑq)~lwJ½0«&Þ#j8eÖ•ƒ£¾žõy­\]m³Z»òI“eM†ŸJZZ²-ŒgëhJe°j]ªÑßšþ¾ÂžÃ<âp½Ú6mg²µ§SŸì~”tæÍfÉ̘1#±�!C†X9~Ä–Œ& 3ñ3Ö*„wÀ„óÖš¬ ^fß jwؘP»zþùçm{t¤Zºt©•:è ‹Ê3ÕÝ*aOÊš2~dÐÒ¦L™’æÞíµ×^6¥îðKs–’™LOMÐîì»ï¾%³_Ú½_~ùe{ÞË¢{;ô©¤–þ*Ñçš¾a&ËfÕ³=ô5œRëÕ' >©‹‘”lÖb|רf@@@@( �¢Ìf•Ÿ2OÕËjY”‘ªìÔÒeS@ ¨ÂÁÔ¿L¼§åJ„×ÖÔ³˜z›>}ºí±ÊÊIQþÎ~ûígõêA¬¨Hlc• ¦kéñŒ¡07JÂa?G ¶�´ åm…m&³ h=7V;Ñ4ó’½�j3ʤ‹gd$›«ØëëÛ®”»:iÒ$Ûq=�[Y-cÇŽµå#<ùä“ =•>þך˜  ÊØ Ÿf^€Yà›¤ü‘ðÓ0î©O=ý­)jÅŠ¶_Êm‰ï`|™ÉúŽÏ›}�ú#Öv†¹“aÞ¨²Âã{ªµëè­½PÎNê­ ¿9h½úV µ+û^å�7Ú¢ôɨšð/NkTŽ�bØó]êmhܱS‘Ê#ž9s¦m’ŽZÊ�>ôÐCëÜÈ0#5�~Ãi”u¥,¼Â´j¨öP'•M\`Ú´i&Ùt,Z°`�Õ÷èÑâþ::uúø 1ñc£5ïĉ™ßÅ«å”vÔQZwiO‡^b»üÖ[oÙéSRÇ[}ú«Ÿze1ësvÏ=ý¾m ÉÚ•Æê“tÑ¢EöRß6U¯ßGï¼ó޽|ðÁUY¤‘lÖ"}ãØl@@@@(�"Îf-B¶Š_@z~¢öFWçâ{æ$jì{ï½gõY£kÈÊ S–Š®×)ªw$Åø’KµFWz•ÕöÍî¯òwtå\ýþ”R6kØ]Ïž=mÇ“9„&aY™Pº’¬ �d=H†s5…rغÒi3a/®aÆG1ZÕ·]©Ï¬ãŽ;Îvö‘G±¨ž"UV»RžËøñãmlSè�Ôv“¡–Àœ9s¬FO ÖßHØ‹Ÿ&Vf¥rêgÍše•úT6hø—¨OL=çúÝwßM¬KŸ¹‰—9*híú,V&—¶\«SY¹3ÊÆÕ–‡wWhJý]¨ŸÐÔ÷"¬\¹²Ö¾(ëG}Z²Ö%+õ^§ÏÇøz¥æ·ÖZx¾ÔÝ~ûíunÛ¨Q£¬þÀ´f‡g“ͪåȳ0³Y›Z{ßYʹèß¿¿­BwÎ=öØcVÖ½tºseÉ’%V£ãXx´Ñ߬Zf®·°ô–?uêTÛ)}Æ�9ÒÊÉòô‹wßõéÙ§OÛõB«Ï/}B鈭{Õ˪ö4u»ÒwŒ£Ž:Ê&Öý1šK¿O8á½´¨ß>rNTE�lÖ¢x›ØH@@@@(\²Y ÷½aË@ oêwF×{ÕÃãþûï_çÚÃl8MðꫯZAWä†jå0_FO‡W¯=¯¿þº�UfP}󵮯�Úwõ¶“þ–HU×þ8U#Ÿ0Ë 05ÔNâGæô·VM¥ô7•þ¾‡Sê/QŸhª×““eŽ=Ú&Ó½êsó¾ûî³e¾ÈSÇse‰î³Ï>6V¹0úœÕZrÕ*ô—¢íOöi¢žætôX³f�mŒZ¾rHÃlíWf[«ž•«%h½Z‹z/�‘Ôª‹«eêû�öEùJÊ-Õ^ßµô-â�C1Š\ì]ø,³÷+×s5T{PÇé|V&Û£dÝɦ§¾�† RkótG‚~›L™2ÅÆªN¦oéá]:RÅ¿•…s¥.ëˆZø‰©÷"õXýõ]uÕU‰É~øÃZ¹ð¿5%68Í‚îà 'Ö1GŸéúΠc~x}!×Ä{�K½µºÒ«ÌA=Y8usÊoÒu`e÷ôîÝÛV‘ë¼§Ô{‘ÙXeëüë_ÿJÌ®,Ôx¾Rb‚õͪ ’= ;Åì>JypŠñMMö—¨ ©ðùàñ¬¨0“B™zÊ‹ÿÇ×[˜5™µ+õ©L–ÊÊJÛµÓN;Í¢þ²ÔµŽN/¼ð‚Õë/ýᇶògœa1ìÇÍ^Ô |CeMf¶a2Ñ1*³%”Æ\ê_UwèW¿~ÉöNíçÌ3Ï´ t¯†Z‘Ú�rXÔºÔ#y˜'›ë£ºòXõ÷’Nªî/ѾëX¤Œo}éˆÏÊQÛÓ±EJªIýIN©,reÚª¯Rm³¢–V\Ç+‡'L˜�h6Ú õÌûÊ+¯Xý›o¾iQû®cQ(& }sзˆÄ¢ê,„9š Yær�³H¥”êÛôÝ@óÖwGôù8`À€úÎÈôE' ã³2Õæ2Íõת'"„ÇIýNY¸paÆ{zê©§Ú¼¹>Îg¼y 2ã]wÝeËÑBGy¤•O?ýôYr±,D÷H-[¶Ì6X÷tê3TŸeú~fI‡û¥lÓÉüUûÔ÷“p …_&›µðß#¶@@@@ Z€lÖ‚~{Ø8È�€zzüñÇmʘP¾a²^Yµ%ñܺtzYUV¦2}”£‘»ýÊÝ’õäñxÎ`øüèpíÊT^I:ýfj^åi^½/Åx=\OUfŠ®å}ôÑ!Nšeå4©Ç@ÍRzÙ¬z2iüŠ·ôÂŒT è/WÙjÒHv=\-G9hêARKŸ…šæQ “eÖ®¦M›fÛ¯Œ'åÑÇÿ¦ô×­\ŒI“&ÙôêWK™þãÆ�+�øfèˆ4pàÀø¨¬Q;Œ·Æ\E#.J½ñΚ5˶Ay…Ç{¬•ãí$¾‘Ê[Q¯Ó©ûžÖ½#ZBîr‡•±¥wJŸ&Éžhî‹öZ[¥Ï�0ÿ]y^ñw_ÇgeRk ZW:ÙßZ‹–©ã˜jÂ{´œâÊf UU–Ì Aƒì¥Ž½÷ß¿•µ§ï¼óŽ•ÕO´¦? ♪š&ŒrS�Žñ¼ãpúÂ,gÖ’ÝGU˜ûÈVå_@Y«ú©Oý=Nž<Ù6FG0ýÅ…÷ZéwPê_Cùß—ÂY£ž·ñ¥/}É6IŸ7ß|³•Ó9òÎ^d¿%êYU÷€ª¿é©S§Úb•ǪOÃ1cÆ$V¤å±êÓ9�O7©sÌ1¶µÞÄ ¼@6k�¿Al € € € €ºÙ¬…þ±} ÐàÊvQO…ê…MÙpºVÏX 7@WÕu•XÙ©©³5ÃÜ õ\.³�ËÊfRï]Éd’õí%Õd™†ÉöZkQþo²i ¹^}`Í›7Ï6R×]Õ{ofW¹•³ö¼¦+À…,�þ¶)'Y» { —©6©ìËÔW¶µä^½z…³i9³v¥\0µ"Y)g?‚Z©ž/ÿüóÏÛd‹/¶XÈÙ¬Éö¥aë•ïæÙ5ìòkiÊÄ {‘ÖóßÃ̦ì·MŸ¹ùÉÊ×_}fYÿñwYý&;F)'ýLjÝ Þ~.¨œþÒ²_ò¿}Ð1Y÷Á¨_¿0›5ìY5Ì€N¶µá4á¼É¦/œzÚCá¼¥·%'�t’픾/éxÞ‹¦;WÂÜÿÒÈÅéÎ�Ï}îs‰…ÿñ�´²z!OT–pAßô}RO Û•zhU»Bøé™Ùwr-¿cÇŽE§J6kѽel0 € € € €–Ù¬…õ~°5 �S]aûç?ÿikQO©ºÒ{ 'XM˜sšz3texÁ‚6™r1”Ÿ’l®M›6%F©ÿšÄË¢(„W#‹bƒe#çÎ�këÕ“”µ‡~¸zöì™ñö„ù_jŸñÞ�3^x£Ï˜M»J�ÇÚè»Ö€�M» sç%–ŽyØo¦–@ÎK¾¡²(å8?ùä“¶=Ê—WfÊ~ûí×à[¨O[}*4uVuƒo@Æ Lçï%ý…kiaîOúó–Ò”¡€úÀ ÷.üÄÔ÷+õ ÎN¯Ö¥špÞpšÂ,Ó ó})�­JçMÃßJÃ-Ù^¨Ò /¼Ð&X±b…Åk¯½Öâ©§žšl–’¬×¯æÔ»F»’Ù¬©Û c@@@@@�Ý�ͺ F#€@i([GO‡œ?¾í”rjN>ùd+×·7eý(›uΜ9¶„ƒ:(±L+ÔÔ¿¡*‹÷)çµvŠ— �·ß~ÛÊaÿ†‡v˜Õdß[S˜�˜NnBb“(”€@öíJ¹ózº«²Æ”…‘ºçÍ0‡Z™­ä&”@sJ삞ðþØc�YÍŽ;,<Ø¢zUKL–f¡ªªÊ¦Lö¼`}òΜ93±4}zªM&*)µÀË/¿lۯϻÊÊÊû¢ö¦£�&‹çŸ*ÓY9Sš^½¸ª•† ר¥K—&*ãÓ$FQ@2Ðo½sÎ9Çæ�>}ºÅ«¯¾Úâ7¾ñ� –Æ,MG€lÖ¦ó^³§ € € € € �²YsÂÊB@ pÔ«×”)Sl“”Uª<屯3)ÒÙrõĪg«ï°É“'ÛŒ'žx¢Å0¯G=u~øá‡Vß¡C‹{ï½·E†Ò˜1c†íˆry´GcÇŽµÂÈ‘#d·nÝšXN:="%&¦PÔ Õ®Ô«²ÌfÍše&ÊèWoÔñ,þU«VÙ4¯½öZB/ûŒìÄ¢(4ºÀòåËmüq‹ÊnÖsí�9æ«©oβr Õ¢Æ�gKP.¡Z�2ñ§N�jõÊ^lÛ¶­•G�m‘¡4æÍ›g;¢ã•²ïõ 8tèP«s–7lØ`5ê_ŸkúD6lX- ͵ÿþû[½¾Ai.eÖ+C_­÷é§Ÿ¶i¶oßn±k×®Õž­À€d)ðÎ;ïØÎ<óL‹³g϶xÕUWY¼òÊ+-6�'ØÎ2d @6khÌ‚ € € € €|,Ð\¹]½zõú¸®ž¥Rzêq=w�É@ Ced6³2’=s6¾ÌG}Ô*ÃÞ»Úµkg5ŠêÛK½ËÅçU�ò^ço«~Û¶mVxøá‡-®]»Ö¢¶J9b›7o¶=[Y½j*ƒ,›ã­-�¡Á”£g©‡™È©Wôúë¯ÛʵєšW95jWŠZr|ix U¦În~â‰'l}R÷ïßßÊ'�tR|QÔ €z¥Ô±%ýoJ¹hWÚ=S^ˆÊ[T?ÑíÛ·7=©”Í*LµÌ#Ž8¢mÙ$å*?4 Ýu¡µUjQšXŸ€z"³Ž�‰…P((�ú¶+µ–iÓ¦Ù^(›5l ú–¥Öö3®ÏÊãŽ;ÎæÒ½Aq-Y-6üþÖ¹sg›xãÆ�µdµ®ÓO?Ýj”ë_5�+ ÷«¢¢Â6#ýoïéo³zÆ¿å–[jÍ¢'1<ÿüóV¯ kå݇“}ûÛß¶—ûî»oXI¹(ôËKw †¹óÙo¼Žf&L°E-Z´(±ÀË.»ÌÊút[½zµ•“ý~Ô/ÇË/¿<1/…bHýÛ-�½X¹r¥MF6k:VLƒ € € € €$ oÖ¤4Œ@�bPVE˜¡=Rž©b:û˜,»G9'N´…¼ñÆuå\W8u}U=ª7:]ÉOg�LSøK–,©µ‘º¦­k˜µFÕù2Ù5ðpbeL«†¾YC™R-ç¢]©1õ­å+SC™ ê9Z9­ƒ 2Xåõ�w_JmL½£†y¬Ú»÷ß?ÍÝ �EšE½göîÝÛ^ªwN-My‹zâü€lì`QŸ˜š—X:¶(CPßvæÌ™c»¦ìéð[–rçÕZF�eÓ¤nZ²îÞP¿ÒZ²úxÕýC† ±åèû•2gKC•½¨¯Àºuël–;î¸#ÅŒú~®Nö•¯|%|IÐoº0�U,7Þxcš>cÆŒIsJ&+U²YKõ�e¿@@@@@ OôÍš'hVƒ¡@>ûf ×K�¸@f}³Æ—C ¡€²àëÛ7k¸Ê$¨ošÉ–C=¡í*Ô ÜP¹î›µ¡¶“å—@îúf-.¶¶a蛵a=Y € € € € �¡�dÇl € € € € €€8ÍJK@@@@@²à4kV|ÌŒ € € € €pš•6€ € € € €d%ÀiÖ¬ø˜@@@@à4+m@@@@ÈJ€Ó¬Yñ13 € € € € ÀiVÚ € € € € �•§Y³âcf@@@@@€Ó¬´@@@@@ +�–YÍÍÌ € € € €@à l[çËÛ¶ÞãÎmwíòبCMÍÇÛТEóFÝ–"\yóH¬eßô6£Ø©wƒMF •Ù¬©t‡ € € € €ìV€lÖÝ1 € € €äX f§¯`Ãr�U[<¦=T×ÔØ´Uÿ?{wwÙ\?Ülf3fËØÇ’} ¡ŠB~$)%)áWiÑB‘þiO”’l%…Êò#Y²”lÉ’%‰0² b†Áìãÿ9ϧ®ÓÜyžyæyžqï9Ïûx½>¾÷{Ïòý¾Ï™sïó½Ÿû½3gϵÅ�Áƒ¢fР"ÃlòóÅ>ÿ÷ËgEüÙQûE¶è�ˆÍKf­žðó+ã©·o¿qÄ•—_*âéçÿ1â AEVæÞñƈ�<ñLÄŸž]ÄC÷ß9âða‹Fl^ι䦨\bñw|ã†�.ÿã�Q~fò ÷ÞuËF} ™�üX1¿êGÞûæˆ=úTÄý�<;bÏ–“ÿß»cÃG/öù�Ÿ\Õ³�ÄV‡íW´ç­[oÐã=TlÃQ£RÃÆÌ·Ù“&yÁ£F�Š˜Îw+˜¯ÀŒE¦yþU8ß•ç¹ÂĉÅL6ë¹oÑæ~ºä5Ð�lÖ~ê£Û�ÍZ‘¥™ @€ @€´«€lÖÿ:39“ZþÚ`ÆÿzÚ @€ @ ofMë“ýýôü?Æ~ž|öň_øÁÅ�ýìÛ#>ÿb±ÿ)ñ»gþ!ʇ¨˜³õ®û�8bØ¢wÞf£ˆ97kŽüõų‡ÿà’ˆ]/_=h§Xaà€s­6ùù¢%/¿\T¯½j1÷èðŽceÖmQ»È"+�["â’£GFÌúÅF¿3dH?®é£k è,Z( ›µ…øM€ @€ @€@úÙÇ#�Ÿ²ÌcÍçó—Åd³v®å @€ ÐG™ðÙë�}ä=oŠ}¼k§Í"îä/"Tä–=ödñÛô/N-~I<—ÇŸš…å–qÕ—þwí"‹¬¼ÜRQþùQŒxïƒ�G\µâÙo~j�ˆÍËg�þU£òŒo~ Ê#†¹¨¹ì÷Å3£ðÜ‹ÓÿSÑ­ÿï�Ýc½�ÖY¥[k×f¥>ºjã¡#�ÍZѧ٠@€ @€´‹@å³Y3ó4cÏP›³V›kz¶çòV¿ïÁxx÷=÷G|çî;–Ÿj”gÌ(>[;ú{§EÜç½»F¿ò �g§¼PÌêrÜ Å§a=ð=Ç.9¦ñlg…ªì³³ö÷¦þù)/ÄæO=õLÄUǯqÚôBø«G�q¿}Š9zÖ^sµˆ÷Üû�ˆé¹ì2ŧ—=[¦N-fü¹ä²ßGÜñ-oŒ8j±b†  @€,<�é3fÆÎ¯ºñžˆ+/·dÄÕ–/þ^žôüKŸxú¹ˆÓfÌŠ˜Ë“Ï<…Á¹®/M+þN|ýk׈˜Ù¯£G�ÈÕ"<(âb#‡5jÊ…Áƒ_É][|±áå§¢|Á>2WÍç¾Sd¿î¼õzßôúuçzvïCO�«ÆCª%ðÊ¡ZíÖZ @€ @€´‰@…³Yû*�µ9wµ¹¦|¶{üÉxØœ?;¼c–±K¿ؼ<úØÄ¨üíïnˆØY6ë#ë\}ý±ÎGØk®�üíÞ¢æÚ›îŽxȧæþ”l®•«²ÏüÕhóý=Ñhyw Ÿúðž±Ún»¿Ù¼\ã­QyÊéÿñWg|;â“Oþ+âŸÿr_Äý÷}å3†‹/-~kòáGŠsô�o|6âˆá¯|VùâKS‹g~,bó2``ñk’묵zÄz$â‰?-Ž¸Ã›¶ŒØ�å+ß:1VûÃ�wugåÆ:'~çÐ(g6n£²Qhç}ΜY|Îl!@€ @€@_ ,ºè�ØÕïnü[Ä–)òX7^»øFãºkß]aÙâïôç¦Ù]ysñ—õÿl·aÄ¡[ Tä«v¶Ü~_ñwâ›÷?®³Ô @ !ðÊHS£J� @€ @€º/PùlÖîwµyÍæ¬Õæšæ­>~èÑQùÜ”b†—ò²ûNEöâ'z¹r¾åÙ³gÇ:OvÌzÇ�÷FyüŠËDœÑ1³ÌãO<åå—+jn¿³ø\nõñã">ñÄÓËË�!Å©\q…âÙªì³Üþ,ïµûvQØr‹�›Ÿš«æèãΘ«¦ùáÕ¸%*wÞ~‹ˆC†Ÿm>1±ðÌeܲ¯ÌÁúñ<ô¨ˆ'ŸzNÄÏ|âƒsÉüå�þ»ÿ©ø¯ÿç¬=ü¼x6gà]zìâQ3¦ˆÝ_ÞµÛ¶±ò.;nÓÅ&/¼X\uÿܼ[Ò¼a{î3¯ö¥—*>O¶ @€ @ ÷Åw Yä];nñÈ“./â‡ßñ݇¿}Ò¼|ü[çÍUù½Cv�š�ÖY¥Q¿éz«FùWßÝ?â>‡�ñ¨ƒw�8á±â[’·ý­ø.ã¡Ú)âСÅß›=[^îØ,Ûß³=ØŠ�ö�ÍÚ>çBK @€ @€¨¤@…³Y{ãÝœµšs­6×wv”ï}ãàxj£ ÖŽxÖ9E|öÙç"æoÖ/’HÅãÿ,ÿ|tbó ïù[ñ»öK.YÌ3dH1 Ì>>2by)×üöWß�§®¹îöˆOý«8ÊþŸüFyå(¯·æÊ�ÿÎá'?Wüfbyñp®švØg¶ªW^q¹x¸Ázk–+çYÑ1î<ŸŠÊÌ?½õ®Âù ›oñÞûŒø—»þqXÇ'�¹Îã^ÉoÝc×7ųy üã�‡£¼ÆêÅ'™k®1>âÕ�±¼üé–;âáQßûY£òŽ»‹Y_W76âþ³Q_.¬¼RÑÇÌ®-×/¹Äèx¸òJË—+ç*¿ð‹sÕtý°*û캞%@€ @ æ:²9_núCz»=fÔˆÆ÷?\ü­÷»"bþ•7é¹¢ü®Ïù­¿ùáG"¶hÄ\šG.þZ¿å®âoÉe—q½5WŠøä3Å_ÜC:ž]lä°(çrñÕÅßìãW(þÜ`­â/ô®—©ÓfÄ oÿä)gÍžqñE{V·dÄ~·ä5ÐﺭÃu�ÍZ·3ª? @€ @€¼Ê•ÌfÍÌÓžIå'TåÏ©æÌ)>5ÊeAsZÿ³Ý+ÿÿôEæé̙Ō«�-9Ëç�ûì+¼u‡­«ýêôoFy‰1E–ëCŠy^üÔ·"þþÚ?Eœ=«Øç%¿,ö?|ØÐˆ¹üîªë£pÕµ7ÿ§â¿þ_•}þW£{ýàºnmìã‡?¹ Q.>vèwÊç*¯²ÂÒQóÓ“¾:W}gŸŸR|.ú§Û‹lÙ<ûyîš×ÿÅ�¿•å™as�SÎ(r¢36oÕ³šªì³g½³ @€5Ü‘:sj�»3cƬØöô oŒø¦MW�xéuů›<øh1�ê;¶mÄ%F/qÓµ‹ïNïXNGþlŽ Xd¡ [´˜euÂců¡\yÃ=/»¡ø+ïÛŸ~{ÄÁƒŠu2ËuzÇï©”µåŸO<Ï.µDq”î,Ã;riñíÆÊ™;¢£&y¥;{¨Õ:y ÔªK:Ód³ödz®Ï @€ @€ô¡@%³Y{Öÿ®óX{¶Ïæ­.?ï‡QùÒÔiG e––«®¹!j~ñëË#þ䄯DÌå™g'ý§¸H~z6p`1+M–ó©Ó~þ›(¼¯�"–óXóÙiÓ‹ù\FŽxåXYŸ±*û,·¹÷åí¶Ùâÿ;䃷{c±Nw–YyÄ÷ÝÿÐ\+OxøñFÍUןšfë—Ý/ʹÿœö Cމš Ï*ââ‹ÏýÙæA¼'ê÷ßw�ˆÝ_–Zj‰.V®Ê>»è‚§ @€è/ÃF=íE6ë×ß;Ø1¿çg?Tüíœ)_}c‘‘zùõE|â_Åœª�õ㈹¬¼l±íûv}Ã*æñÿÅ;ærÍßhɧ—ZbÔ<Öë‡Uy ôÃŽër½d³Öë|ê  @€ @€¯º@¿ÈfmÎcíÍì®yŽ>}Äqs�¬ÝwÚ2jn¿£ø”ìØ~ñÇ?øRÄa¥yTãa–wï¾}lµì2KE<ÿÿ®ˆ¸ÇÛßÚØÏ´iÓ£ë�]ä'>òè�øÆ�"æ²î:Åì0oï˜öØΊòqßþ|Ä©³”1,W›+VeŸÙìC?þÞ(ìüÖmæêEóÃüÕæÊyÖÜ~Ç_£þÖ»^™ïõGß/²†×X­ÈÎå–Û‹™[�øúÉß´Íÿ®íÞÿÆ.¹D¬xèÁûGÌ«k¹eÆDù×^1�{Ð�ïŽryyëö[ÇÃŒYÿéÊŒÔ�7,ò”÷ÝûíY¹@±*û\ NY™ @€�þ"0°c€bLÇw§M.z=­ø+{‘YÓŠ˜_T,J–j èÈÜ1v1ltÑó±VóLju²Y»Àñ @€ @€æ/PùlÖrvjyžÖæ®Ï™3§¹r!Õl¹Eñ+‡kŒ¿,â¹ç_qݵV›ï±VX~™Xg‰1ŧ:3gΚçúû¾w·¨ÿÀG�ŒxÕï‹ùF§N+æf3¦È�m^ª²Ïæ–÷¾&e~tz1kêÖ›³£®½æªO9í׿õåƒ#Ξ]\§žqAÄ=ÞöƈcÆ¹É ºäÇryî¾Ë¶±ù‰³èn°v‘3»êø•ºØá?x8ž½ãž‡ñôsŠ+§ë匿+¬´âró\­*ûœgãU @€ Ðß2ÏQ¶c¿ôŸ@Åd³Vì„i. @€ @€í&PÉlÖÌ,ç±–ËÍ9­ÝÏcÍm»s’&N|:V[¢#óñÙIÏϵIÎ û™�¿?êÇ.YÌÔyëmÅ쟽_2×ò˜¯™˜«®²BÄ›o-æ]müŠ=ÞyUöÙýæõpüÉÅ ¶�>ñLįñ±ˆÙÓ›þ\œ‹SNûeÄéÓgDœ6­ˆï{Ï®»¿<4á‘Xùª?ü)âس±áZkŒo”·zýF�rg…¥Æ³»þøû‡w¶B£þï÷¯ß9ᜈ]gÝVeŸ�®) @€ @€*- ›µÒ§Oã  @€ @€h½@%³Y;ckÎi-×t¶UÏê¿}ü/æÚp÷�¶œ«fõU;~!q®ÚÎ>öøSñä‹/N�8ñÉ"[¶³eÍŽ|ÉìÝw?«í°Ýó\¹*ûœgã{P9sæÌØêG§ý*âå×Üñk‡q饗Œ˜ËÇ|w>zÈ1ÿ©Xä¸o}:Ê‹�Ѩ)æ”~Ñòú›n�§NúI‘ {Û]…üºkó®æ\ºS§¿€yì ?�8h`ñÆÏuEÄm·Þ,â²Ë,±yɼԮ³Ss« ?…±c‹8j±‘Í»jÔTeŸ�+ @€ @à�i“‹ò´çŠ8«ø;k‘ÒßeÅCKåò'M+>ltG,¾ûk!P'Ù¬u:›úB€ @€ @€@ *œÍÚq“×®1çç½¥c†ÜãtnÔ,³TñéÙÀ�"~óØŸFüè~{D|ÃG2ä•¿¯˜5—ÓϹ, [oQì3¯� ×_+Ê�=þdÄcŽ;=â¬Ù³#þô„ÿñ[Çþ$â—¿urÄ/ZäÕ®°ü²{¶üóщ±á:k.X–t×ǪÊ>»î…g  @€¨¼ÀœYEž¼ˆ3_*â.ùw÷ôéÅw_œZäÀ¾ðâôˆS^*Êÿz¶øU•G&NŠøÐ£ÿŠ8jd‘Yùñ}vˆ8d𠈹<øHñMÓ•–±\Ê9×DÍ–›¬qƒŽï5þæšÛ£œ¡¿e«õ£œËœ9E[ž™<å? üÿ%Gßb4hîܸŸžwmÔ/Úñëûv›û;µ |˜WsƒÔ˜YŒi,’qZÇïÜ,¾|Q3ð•¿Á‹‡Õ˜û_l5{¡Õ @€ @€h™@…?.(g†.hîjÙ;÷SÞ[ùÙæò?ÿnså\5OL,>ûÚ÷#_‰˜{ž=gN”ß³û›æZ³ü𼟗SdYv¶|áËÇÅSwÝûpc… Ö^%Ê«®²b£¦\¨Ê>³Í{í¾]¶ìÈ'-÷¢¹|ôqg4WFÍ^{îqÏw¼5âjã‹YSÏùõ%sùõ²øÜ2�ò¾½v�rž�³ù›(ùèÓ".6¢ø<óÍo,rZ߽ǎEÍbÅœ­¯Ûè5?º1¯ëªã_Ѿåö»£æˆ¯ùª+,[|Úù­#?qÅÆE<òó‰øÅ¯ŸñÀƒ¿ñ„c�¸jGÛ¢0ÏåÅ—ŠÏ÷þùHñ)îÈÃë\rÅ�QþàûviÔt¿Ð>ûL™éÓ‹O•- @€ø·À”žç±ænºýþ(|éÄK#Ž]ü%5vtñ×Ü3Ϲ±YÞq«u¢üö7¿6â ã–Œ8¸”Çšù°'ü¢ÈZÍLÒCö+þºÌ¿ï{¸øKÿ5ã‹o(¾4µø‹æÑŽÜØaC‡4jíøî锊¿éö:ô§{¶œ{Ì~±áRKŒŠxÎ%7E|Û¶EÌ”ÐùúIGÍÕ·<±³å²“‹oyfökgë´¬>s–3yL_~k³e=rà~/ ›µß_ @€ @€è�À€ &ÄÆ�+2ïz¶ :´göáV½ÏfíÃÆ4vußýEyÈ�âs­áà ¥e–.²vü}b™1cFÄ»ï)>sÛ`½5#æúQ˜çò̳E>æ”)Å|¬¹ŸåÆ-åò\¢UÙg¹ƒ×\û§x¸ÊJÅœ,«­Zd¡v½Ü|Ë�±Â¸ŽiWîØª³õÏ¿èwñÔœŽùR·Ùj³(/³Lqš—=SØÞôç;"Þy÷}ùä#\$}çg†Í3ãäVçÿ_q”÷¿w·ˆÃ‡ù°å奎Y�.»¢˜Cçíÿ³CÄæý”ן1cf<|ï‡�˜sïæ³ëvÌþsôW?G”²\óÙ®c»í³7Ù¬yF zeûîY] ÌšUÌ–¯#]ß�»Þ�g ”rNð™3‹ûy;¼S*·M¹êS;fê>ü•ï»T½GÚß®«v8 õkÔ)S¢S#Fù¤óy÷>mrÑý)‹Ø‹¥<2PþÆêi¿.þ4h@ļã�ó=ÂÔiÅßé?þåï#>ôسïøÇ“»³ý©â{“«¯\d¼¾ó3§F¼àûF=ªpèzɹ\ßõÙâ{–™Í:¶#›u‡~5g}k߈—]{WÄE‡ í¶ý&gv¼›�Bcyâéç¢üɣ΋ØÖÙ¬�GaTǨ԰1åºy–'M*þr5ªÈóÍ¿ 繚J $�#iå{Èm+OœXÜÁd³.¨›õ  @€ @€ ð_5Éfý¯>y@ ™?;gÎìèMþNe9g¹g]lŸ}ÊfíÙ´ÕÂ�ͺ0TíS6«k`á È:\x¶ýyÏ®«þ|ö^ß ›uòÃE3ò×ç{Ô kÿ|ol÷å“/ïÑÖÅFGì¿}Äí¶X7â€�EÞëÀE|©#³5¿Þøÿ~paÔì²í_¿ÑêváõsnÖwï¼y”*²Ù¦N-òaËÙ¬#:¾á:sfñ=ªæ%ÿÖ{þ…bÙîg³îóö­šw5�?Uä{îsøÏ"V&›uHÇ·4Ƭ2Ï•+e³–5”ûJ@6k_IÚ @€ @€z%PL:i!@  :>:ý÷F}5 iUöÙ†§C“ @€XX³¦õrÏoxí±‡‹~0¾±Ÿ{z<Ê_;¥Èo�9«øŽà¸%‹8ab1oéÞ;nñ�;¿Þ1dp1ÏéÐE‹á‘+o¸;â%×qÿwnñ¨Ÿ\ñÉg‹ßGÉåöûrÙâ÷9ÊËÏ.¹-þÏÖkEÜo�¹g€½ü�Åï‹{V1KlórØ~oŽÊM×ßüÔ\5//òò\55yØëk &ºQq�"›ÝB€ @€ @€=�ÍÚc: @€ @€½È‘èÅnrnÓÌó¼ê†¿Æž~pö#~îƒE–èC�þ+â AÅ\«‡m\ä½~ýäK#Þó`‘—ú…ïq±‘Ã"¾eëbÞÕœkõâ«ÿ峎úPÄ'žžñ ¯Ÿñ§_ß7âØ1Enì÷þ3â±g\ñ„/î1÷3é¹W²_£²±ì¾í:Qþä¾omÔ|ý¤‹åîfÍš«�^dàÞxûý�øáo»³a»¯Óëk Ý;¨}ýC@6kÿ8ÏzI€ @€ @€ÀB�ͺÐhí˜ @€Xø·Üõ`äûg^qäðE#õ©Ý"n´öʿ膈٬kŽ_.â¿øÞˆ?øY1¿ê'¾ynÄoüöˆãW\:â¶›9§¯ï˜ïuúÌYQ>öôb†Ö¦ÎŒxÀ—Ί˜ËË9˜Ï¿4#~­#/õóîåñßÂY¦Ï(Ú0lÑQ7^w|Äs�Ù/by™Ø‘{{ðÑ”+• xd³¾ ÈA€ @€ @€@�d³Öùìê @€¨½ÀJË��>î¿Ç"þåÞG"~æ;FÜ1kËéßå9sŠy\W[~‰ˆïÝi“ˆ™ë…XfÏ.æ?ý𗋬Õç^˜që×®ñ/÷?ñìcö�˜ó·Þu_q¬s.¹9âòËŒ‰xeÇ̰oÙrý(7/þáoQ™±üìæŒ/?œ«òÞ7EÌ­&?ÿR”ËËŽoÜ0¾ùõë–+å!CŠÁ™ç_˜{«ÜÛå§|"žÍYYïyèé(ôÞ%Û* Ð>²YÛç\h  @€ @€•�ÍZÉÓ¦Ñ @€ @ &™¡‹¼\Ì—ÚWË©ü)vuö¥·Ís‡ÓfÌŠú•–-r`›—+®ÿkTþ϶ëEÜ`Í•"ΘY¬ŸË9ß9 Í3¢~á{çEý‘Ûíßëý÷ÿ† ÿû™î>ºá¶"w¹±‹E\eù¥#>3yÊ<7~ö¹窟6}fÔ|éøb¾Ú}w{}Äõ;úuÒ/®Šòr³Êî¾Ã¦QþýŸŠÙc¯¿ý¿ðáÿ‰˜y»QX¸K^ ÷öN`¡ Èf]èÄ@€ @€ @€@½d³Öûüê @€ho�ÁÊö͜ڇ­<à[ÄÞº37kù “:ò@¯¼ù�¨üÀî[5ž8𕵜#uÑE_N™Þ‘+úàcÏÆú‹.:$âKSg4¶}ǧ~Ü(÷¬ðؓŞO<÷�?öžm"XÌ»÷çO�8sÖœˆ]/³çëLyqzÄi3ŠÌÖ\¦¼TÔŒ™öJk§M/ʹf¦¿Ji¦y ü»]þG ª¯Ü)ªÚí&@€ @€ @€@K^ùø¥¥Ípp @€ @ _ ë˜#µO³Y�?çú ÌØ™é:ã—šë©Ìú|�úqK�i<;xP‘£ö�ÿÙ$âÿ~ù矞üRãÙ!ƒ‹g?´Ûf‹,Óÿd›®º\±‡/¬˜át±»Å“�.“§sª~ýäK#f¾j®z}Ǭ¬»vÌ»Ýë4¶¿ü”O4ÊåÂÓÏ>�9íòˆ9³êÈáC£|Ò‘û”W‹òçxÛ\5;m³QÔdœë©…û0¯�…{ {'°Ðd³.tb @€ @€ @ Þ&L˜=7n\�û9thñ©ˆ…ݘ>½˜¨gËàÁEþ AÅ/uZô^`Ö¬âwc_î˜zjÈ�b.- �Þ Ìé˜mæÌbî3ï”zïie�©S‹¹ ‡^®T&ÐK×U/m>O�)S¦Dýˆ#"vëÝûäû™ùJ–hñpÁ—§ž)r9‡ .þ^XbôÈyîàÅŽ9IŸ›Rkùe—˜ç:íV™ïW3;µÝÚÖ«ö )®�EƬÜÍ�Lš4)Ö5jTÄüÛ°›Z�@3f³翲.Vë⩉'Ƴ²Y» ò @€ @€æ/`nÖùYƒ @€X¸‹/_ìÿùNj؋œÖeÆ.^ì¡Ëeäˆâ[¹»\±�ž¬mkž÷6’Ö=�ÍÚs;[ @€ @€ @ d³º  @€ @€�V ì È9:§M.Z3í¹"ΚVÄŽ™ô‹‚¥¢ <¬ˆÃFwÄ1E´¨‘€lÖ�L]!@€ @€ @ ²Y[¡î˜ @€ @€@gÃ:ò3v¶Žz´™€lÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TMÀ0kÕΘö @€ @€ Ðf†YÛì„h @€ @€U0ÌZµ3¦½ @€ @€´™€aÖ6;!šC€ @€ @€@Õ ³VíŒi/ @€ @€m&`˜µÍNˆæ @€ @€ P5ìU;cÚK€ @€ @€@› fm³¢9 @€ @€TM`pÕ¬½ôw�É“'Á Aƒú;„þ÷‘ÀÌ™3cO/¿ürÄE]´�öj7ý]`öìÙA0cÆŒˆÃ‡ïïúß§/½ôRìoúôé}ºW;ëï/¾øbŒ9²¿CèŸ L™2%ö7uêÔˆÊñêSÜ~¼³òëààÁµúñ¥Ð§]Ÿ5kVìo‰%–èå^Ýéz hs @€ @€ú»€�ÿþ~è?�Ê ,¶ØbÑæ¡C‡V®åÜžùyø€¢y²ÛóU±U™Çšù†£F�ªb´¹ æÌ™­Êìû1cÆ´a 5©º™ƒ?zôèèB¾&V·/ZÞ>y¿Z|ñÅ£I¾‹Ö>ç¥ê-™4iRt!ß_Éf­úÙlŸöç»÷¼kõ¦U²Y{£g[ @€ @€,b˜ÕE@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ `˜Õ5@€ @€ @€�^ fíŸ�  @€ @€ 0”fΜ/½ôÒˆ¿ùÍo"þùÏŽ¸è¢‹FÜxã�#î´ÓNwÞyçˆC‡�X¿eÆŒѩ뮻.â–[nqذaõëfË{4gΜhÃ�ñ´ÓNk´ç¥—^ŠòðáÃ5u*Üpà Ñ�ÕW_=â²Ë.Û‡]»ãŽ;bo+¬°BÄ¥–Zª÷Üž»:ï¼ó¢a{î¹ç5ï¯ýk¬¿îºë.ÐVí¿ò‹¥Éˆ@IDAT¸®þò—¿DÇWZi¥ˆcÇŽm„>oáË/¿û¼þúë#æõvíµ×F9ïQùê�W`¾20 ÏÛÐÚÞÿýÑ€éÓ§G\ýõû¼1/¾øbì3_ òuvÈ�!}~”Öîð»ßýn4à�Céq3Î:ë¬Øö}ï{_�÷ÐþΚ5+yã�7FÌw›‹-¶Ø|›�ïQŸyæ™ù®™+¬ºêªQXk­µº¹~µV{øá‡£ÁgžyfÄ”yðÁ£ü†7¼!â›ßüæˆ{ì±GÄ|W…š-ÿú׿¢G÷Þ{oÄ­¶Ú*bßÞ“¯¹æšØg^EãÇ��r½—|üíoݼâŠ+"^yå•ó½ëÛÞö¶(ï½÷Þ—_~ùˆýmÉwݳgÏŽŽo²É&ý­û]ôW6k8ž"@€ @€ @€Àüd³ÎßÈô� &DO;ì°ˆçž{n£×™¡3hР¨9å”S1ëùË_FͨQ£ë×£�Ÿóg¿î¾ûîèÔšk®ñª«®šo·Ûn»Xg‰%–ˆxÓM7E|â‰'"vYyå•cåM7Ý´û›TtÍÌ›.ç±V´# ÔìüÌ?óßò–·Ä¶é�9Ô�í*óÈ^óš×t¶BÔg^Xf¯ô‡lÖ)S¦442;5sL•ó,Ô/W.»¹0®«¼wekËfÍïv|éK_ Þ£Ž:ªq-åkÁ2Ë,5yïÊøÙÏ~6j¾öµ¯E¬S&þ¸qã¢G™ÃµÊ*«Dùoû[ÄÇ{,bgKn•9tÍëäïu¯{];âÈ‘##ÖiÉky?ÉÜÞ¼®2ë°³ž\ ¥Lgëd}¾OË}v½fÕŸ�6mZtásŸû\Äã�?>bÞÿwØa‡(ß~ûí=ôЈÇw\ÄóÏ??âf›m±ÿ,™ƒŸÙ¬ý§×Ýé©lÖî(Y‡ @€ @€� Èfí”Æô7�‹.º(ºœy¬G}t”÷Ýw߈å¹#xà�¨ùà?ñ²Ë.‹˜kfþN<¬ÁòÐCE/þþ÷¿GÌÏr³SYÎÜÃÉ“'Gå-·Ü1kò“ÌÌuÍOÅs«�6Ú( ™¡“5O=õTî¹çžˆ™÷šõåX×l»rs&µœ«.ç3Êœ¦ò:u*ç5“ÙÍ9×U^QyÍdÎWæPgSæy�3&2'3Ê»6É94o½õÖX-÷_ï9…Ÿ{î¹Èg>ó™(ï¿ÿþ�šþPxu®«þ ÙÜÇc�=6*3�5ÿ…þèG?ŠšÌ›8°ÈÕxüñÇ#~ùË_ޏôÒKG¬Ó¿¸ßýîwÑ£|u˘sÔæ+Z:äÝfÉ%—Œ53—<çrí,g0sÁòt;î¸cl›¯§/¼ðB”ë·|èCŠNeìNï.¼ðÂX-_ >õ©OEyë­·îΆýv�¼êòý[gå¼×ÎÖ©bý“O>Í._]ùNcƒ 6ht's¿ùÍoFMÞ¯N>ùä(g~cµJò’ÙÐS§N�¾ä<왃™ïÕó»>“&MŠgócù^4׬t÷û¼ñ9Ãoæ±pÀ±ÿ|MÌïùåûØü^»Þõ®x63©sFàü6CŸ7É+$ ›µB'KS  @€ @€hGÙ¬íxV´‰�–tÐAqÜ׿þõs.§æfäo£yä‘ñT~2|úé§G9kÊYœÍÛV¥¦9#)3O3¯0÷6g„ÌÜÜ٪<«fÙ¡y†¾Ì;1bD€ÔoNÛîŸåüT< 6s¨÷Úk¯îo^¹5óŒgvs6þÑG�BΦš¹`™ÿ•9£G�ŽgË¿³œ×Uæ”åV͹~ÆÌ×hžy-÷“íiÞCµjÊÙ¬9#[µÚßûÖöÕuÕý–äLdÏ?ÿ|lRŽyç\n¹åº¿«¶]33›r¦òÌ„ºà‚ ¢µåïvdãs>ÜO<±Ñ—¾ýUëÆn[RÈù óÐy®ó{9/íСC㩜£0ï3yçɼû¼�57;3 ³¾œù›¯†ùúؼUÿ©Éûöá‡]Îìà,×éºÊ³ùì³ÏF!¿#ÕÙ/tç;«Ì˜Þxã�cýò5“ûɘW`¾n–ëËåü.QýfÕÌY2sÒÌT-籦@fŽgft~ íÔSO�§ò[ õ¸ºr~ÞVX!ú•ï”ò;RùÚ”w§ìi¾3Ïš¼³•ß·—¯™þYΛ9ïj¾ÇÈ¿òʳ¤äÛÞö¶ úîw¿ñ£ýhÄüÎGÎiÞ?õô:d³º @€ @€ Ð+Ù¬½â³1uÈÏr;Ëc-÷´ü[Þ™‘—s!Õc.žü|;cö+3³w™¡“Y‡™Íš2ùÉy–»žC3gŒjÎ%Ì=×#§ |µ4—sÖ°œ#l·Ýv‹¶Ùf›æÕjV“WKæúe†NæYä,‡Y“y‚ÙñòÕ•õy]åÕ˜3ºvM”ÎÍëdFÞ–[nÙüTåj2ó+›Ý?³YûêºJü�evOæìçµ—9Œ™×Ÿ¿àœwª¼�-¾øâ±y�î]ù‹ÉiòéO: Íy¬ùlƺfB•s“3ë0_ýó~•Ù¬ùj˜åÔÈ«¨³×Áœ}5sëÊ[ežÔ}÷Ý;é?¯†å«(Ë™�ßóÈZ3w¸yͪ×dær~#!¯–òû¨ì]Þßò]Ó?þñ�¨,gXçu’ïÍòšÌ­ò~•õåüÖÌ=Ïýdy©¥–ª:c´?óX³#+®¸b=J�œi:ßEdÞâØ±c»Øª*Oå·‚²µù/(ï*åo•uç~•×[®ÙÜ÷̆ÎÙ¥óµ²y�ÕªÉ{Kžñæ–çuR~ïÔ¼NÞÇ:ËÄo^¿5²Yëqõ‚ @€ @€�– Èfm½ P]�ü]Îl~6^þ ¹ºý*·å¼Ô|Õ+ßÁÊhy¥å;‡rt¾Î¦f©×ï}EÙ¡¹œùw_üâã©�vÚ)â®»îÚ¼ZmjòÛB]ç‰gg×\sÍ(äU—ïŽòÝWf³>ñÄs™ä})ßod&Zælfváë^÷ºX¿y¬Ùñ¼3g9çi� ¤ñ0ÿµþå/‰šÌ`Íûyc…òÝTæÅç{ªk¯½6ú•¿'‘ïÞËÙ»y¿*#!}&NœØ…FfLgl^-å¢üm€æuÚ¹&ïùÙÂò÷;ksfÜï°Ã±Â•W^1sÆ_ûÚ×v¶I…ê3[üî»ïžo›;ûžYþ®IÞ¯|ðÁùî§³VZi¥x*ï`�­Ó>õ²YÛç\h  @€ @€•�ÍZÉӦѴJ 3Mòw$³ _øÂ¢ÐYÞJ«ÚÙ›ãföÖÍ7ß;)ÿŽyþÞtÎö•3Ò–çüJ™ÌÍ)gxefb~Æ›­ºîºë¢�Ÿç/¢fýÿøÇ(”s‚²¾N1sÄ2³à¨£ŽŠ®evpù“ó:õ·¹/™û0a„ÆS™[‘s¥ýóŸÿŒúæ™.3Û¢|]56�Bæòäçí9·r^u¹·|v‹-¶(oR›rfØewr.ÑÌüñÇ£2³áÆ�åÍ6Û,b9c%Öféýu•Ù©Ûn»m˜d9­.½ôÒ¨É;UfRÔmžÉìòü×”ù¼ý¡×ó¤ˆÊü÷•Y„¹Núd^Xf�å+fùÕ°ëûU¾ª6Ϥœù‰y÷Ëãö·lÖ_ÿú×�qÀD9ïä�ÊÚòÊÉ Óµ×^{¾ýÊûOÎ �¯ž¹Õ]wÝÛvö®)ï`Ó§Ooì?ÿEçkb}£�6j<[ÝBÞ·3ç7gÆÌ<èwÜq®Nå7´ò[ ßøÆ7âÙêÎ:W×âaæê^ýõQλP¾WßtÓM£&¯“œMuµÕVklÞ|¿Ê÷c�æ*\~ùåQóš×¼&by?s­Vé‡åûsù;C]wj“M6‰2›5_Cë‘Íšç:c³À­·Þ•yuýë&yß+ÿÝ×¼·®k:»×u½U«ž•ÍÚ*yÇ%@€ @€ @ &²Ykr"uƒ�…!�Ÿ çgþ9ÏÎI'�:çœs"¾ÿýï�ø‘�|daº…ûÌù ³×ùÉaff~\æPäìrk­µV£�ùIfs®\æ·fvXf¼¦êÒK/Ûf}î$Ÿ­Ög•�îÏ·�Ùv‡vX¬™™•tÐ|·ªÓ ™Aó·¿ý-:•3]æÏùãr°¼®ÆŒ3WÇ;»ºr¦§œ1*gš+g?åìc9ËXf¶®¼òÊsí¹ê3W%{±ÝvÛuÑ�œa3s¨×Yg�.Ö¬ÖS}u]å]®œÃR-‡¾jmÞçso™™’wõüÂÏ~ö³xêøCÄœG;gIÛo¿ý¢¦;³LæžÛ?æëÔM7ÝM9rdÄÌÏ{WÎ.—WK>[Ήëì~•³d>õÔS±·ÎæûKÃü~Cfç•çom·žµ03ìŽ?þøØ<ïÛo~ó›{¶«Jl•y©ùJ—ï…ºnv^9iù�XÎ}™Wæ“O>;ɘ{ËoŠd6zù•1ÿE7¿Îv݆v~6sÀÏ<óÌhdæ±æÜ¾ßüæ7£&ïNù/ô“ŸüdÔä÷«ê÷îýÆoŒÞ•ïE™¿üÀD}Κw¶òÙïì~›ôÛeÅWlô=glÏeå¿Y+D!ŸÍ¿ž²>kÊë(çkeÆþ !›µ?œe}$@€ @€ @`! Èf]ˆ¸vM€@ur6«áÇϳ g�uVÔï¹çžë—}™Ÿx—çË<Áœ�.s_xá…è{9 #3;›=3Ë3½–?ÎmóõúyfïŽ8âˆ@H½c�=6Êe�ô©wÌ̯ 7Ü0º9sæÌˆ™Õ•WZæˆåo—g³Ê«"cóÕ•³ÔeÎNs†f~f^žÃ.¯íœ±Úx`tä’K.‰˜¹Ò)œ÷®Ì¹ËŒž³Ï>;ÖÉì×ü5Ør>Ku5ÆuU]�޷߉%T¾ dY쟲Yûçy×k @€ @€úL@6kŸQÚuÈy¬>ûÙÏF§2ï çÒÊ_)Íù 3ã5gh-Ï…Tu‡æùõrÌu×]7ºvË-·DÌ9ÂÊY�ùiy¹¦Ù!s.r�ÌèÉuÊ¿„[¿lÖóÎ;/º™1s+¶ÜrËfœÚ×äyÏߥ͙j³ËY“y©ùï.svòÙr&N9ÿ"ë3—'g0ììÚËœ�Ì#ËyZ_ÿú××F;gšËLÃæ93ç´ÓN‹þf&Kΰ™5ŸùÌgjàз×U3HÞÛ3½ùÙ̳Î;d9Ã¥yͪÔd¶]¶6gbÍ“sv¿òïJç÷N>ùäXùcûXÄ/~ñ‹ó^Wõ×Äü×”9òå_šÎ ¸¼ÿd¶ió,¢ùlùŽ”³²fâ*«¬JÍÿZ£2–ÌëÏ ÖœÉ:ó^ËskæšuŠ™]˜=êzŽéª÷:_Ŷß~ûèÈ‚~£%¯½�7Þ8¶=ztÄ|W–û)ÿ¾|^oÍV™·Ø\_�šüžÙ‡?üáèN¾KOŸSN9%jÊ™†y½åܬõ¸oç\}õÕç:•yάüüK–Ë«å»÷þ3cf¹ï�•ó~›™õù-«üÞF¾ñ�oŒ ó/šÌu=øàƒ£&ÿfüîw¿弓w¶õýA@6k8ËúH€ @€ @€ÀB�ͺqíš�ê ä'ÀßùÎw]ÈÌ�Ûn»-j²~ÿý÷�ò­·Þ1!·Þù&=ôPô4s{·ÝvÛ(g†WæäLaåÏÃsv¹»îº+Öl^.¸à‚æÊ¨Éù¤ò©ÌDXk­µæ¹fûWæ/çœM™W˜åöoù«ÙÂÌ•Ëë$Ïxfâd¶Wæ‘eŽs^i9ãÕŸþô§hdþ¾p×WHî'ç{½öÚkc«¼†sNØW³§ ïX�eÆå3«.ó^3›5óžê‘ÍÚ™ê‚^W�í'sî¸ãŽX!¿ÓмfæÕcNÒrÎø[l�ÍÜçüý÷rßóõ._3ïõâ‹/Ž2ÇgïÍušçíÍûU~ߨ™.ߕ廵æg«[“³BçwË2�õóŸÿ|£;»ì²K”¯¸âŠˆYŸßÿȹ€¿ò•¯D}ׯ¡�]U´�÷�¼å;ŸüÖBÞ‘2+³³Ù¢+Úå>iv~{#ïçŸ~zìó¦›nŠxæ™gFÌ×ÇÌ¡ÞqÇ£&çr�B,åãY#ö7Ù¬ýíŒë/ @€ @€}, ›µ�AíŽ�º dfÁë^÷ºèàI'�1çª;ñÄ£œ¿¿œŸgÖU U9³ó×lÿð‡?Dg33"3 óÓÝÈßUŸ§õ¸ãŽ‹Îæ¬ 9ß×¾öµyv¿<i®�9©šŸ�o´ÑFóܶê•é“Ù7™˜9ƒ9kþ»[{íµÝÌL±Ì¹Ë«±;y(9«]Îâš9�ö“B9*çˬáò,Éu¢XÐ몳¾§ÛJ+­+”g‘Îõóú¬ú�ªÜ÷rNf°6ç±–×Ͼ¿éMoŠÊÌ1Oùºf³f~}ž÷M6Ù$z=iÒ¤ˆ™!ž2™c˜’9f^9›m¶Y¬�wõ\³³˜Ûæþï»ï¾X­®ÿZó[2å|º:}Ï ³ó[®Ïoýñ�ŒÊ¼6–^zé(çw5Êkv§ü׿þ5V»÷Þ{ç¹r¾z.±Äó|¶Š•9¯h¾_ÊLÞƒ:h®Žä¿Ö�vÚ)êó=F¾WÏ÷c»îºkÔç¿Í¹6¬ÁÃÌZÍ»VÎJŸ—_~yô.çÏo¡u–ÝŒ�9°¹ŸægëW“ÿ^>ýéOÏ·kù­—\-ÿšï&5X!¯‡þù¾ºëÓ'›µkÏ @€ @€ @`>²Yçäi4 äg›9ßÓ-·Ü+dOý²Y7ß|óè]~j�™€ù¹ešä ­åÏ0Ëy…™%W×\¹æ«¢¹f„ �ÊÌu*g<5žšg!gûͧ2Wzž«U´23Jr¾œ¹|å ­ùßÙÁòu5bĈ¨Üj«­zÐ÷Üs6¬Ù&™;–óMשk½¹®ºvÈû^^{]¯Yõg3ï>{‘sÒe&f×»™-ž[ÕoæÇ|Åßyç�£ƒ9kææU‘sî¾ûî�S_¾_e~â6ÛlÏ–ë+wQȼÎÌ2[Ðm»Øm[=UλÌwPùŠÐV�\¨�É««÷¯òùëç©×YÆtæD×éΟ×Of|g¾a9¿ùÄåÌÈp@GùßK9/,[Øõýªëg»îco¶ízÏíðl9›µ<w;´­Zmèλ…î¼£«V¯sfäls÷ó ó»Y¹Õc�=V­.w³µåûUg›ÔûÞÒY¯FýoûÛÆn<ðÀ(猷�J…~( ›µžt]&@€ @€ @ /d³ö¥¦} PQ�œŸè¿øE´ÿ­o}kÄœy­³îäow^vÙe�ò� °P2{bµÕV‹£t�–÷«þð‡�ö¼ÿýïo””2¿éCúPTf6ëÏþó(w–Í:yòäxö¢‹.jì$ï»ñP�@'Nl<›³”6*˜¯@ùnså•WÆúùM ®çѾçž{{^ýõee�üÛ0g4.±¼NÎtâ‰'6*ßýîw7Ê ýY@6k>ûúN€ @€ @€@ÈfíD» @ ê7ÜpCtaŸ}ö‰˜¿™ø½ï}/Ê[n¹eÄòlVùk’G}tÔçï“fkÎd•,T�ÌÿÚ{ï½ã(9éÉ'Ÿåü%ôòŒ`¹æW¿úÕxöºë®‹˜¿å-›5(,]ì±Çñl^WÇsL”7ÜpÈï{ßû"fÆëôéÓ£üío;âÃ?ñ[ßúVÄ•VZ)¢…@wžxâ‰Æj‹/¾x£¬@ ;ãÇ��Õ8à€ˆ§žzjį|å+�8∈ÍWTfèyä‘ñìŠ+®qûí·�h!Ð,pæ™gFe~W#_éòûCù ˜3’üã�un¾ù戟ûÜç"n¶Ùf-d³º @€ @€ Ð+Ù¬½â³1õxÃÞùÑ�~ñÐC�˜Ù©«¬²J”3¿õ…^ˆòUW]1—œÑéôÓO�‡]Ïåúï ü�½7n\ìã—¿üeă>8â»Þõ®ˆcÇŽ�¸Å[DÌLÃòý*g�>á„âÙîü&u¬fé·9³ágœ™ÙšÐÇw\Ôä+æõ×_åÛn»-â¾ûîñ ƒŠh!Ð}�‡z¨±rsîaã)ó4hPÔgÆý³Ï>åü¶Ùo~ó›(ï´ÓN—\rɈwÜqGÄ_ýêWó½}æ*f9*-³gÏŽr櫞wÞyQÎøº×½.Ê9Ok¾æ&x`2K:kD²Y] @€ @€è•À€ &Ä23¢g{êì—×z¶7[ Ð2Óª7=]xwžüôòòË/�æe.ؽ÷ÞÛhjι³ÕV[EMæøŒ5ªñ¬Bòwis®¥VeùåU·òÊ+7³U­jO£ =È_§Í{Ý»KLš4)Zø»ßý.âW\1CyÊ”)QÞf›m"æÓ{î¹g”Þ�3vnyæÌ™GÉ_7~u~™=¯±³Ï>;Žûÿ÷|ðÁˆù��vØ!Êùj˜3ÇCKEžyæ™hyfÿåkâÂëHæ‹•¯™«¯¾:g¦û…gÞª=ç=$³•3ÿta´$¯¨¼Š.»ì²8Df°>ùä“QÞ|óÍ#f6bþ|~ÿca´Ä>_�¼®òýUùNÒ·GϬÕsÎ9'v›sÜç·ó/Á¼–rÖû…wm÷m�ì­k�|÷þòË/w½ZÏæï"Èfí‚ÈS @€ @€˜¿€lÖùYƒ�>hçlÖ>זּ¹@;d³¶9‘æõ@àÕÉfíAÃlRi�W?›µÒ\¿@¯f6ë5ÌÊ•xu²Y+M¤ñ=xu²Y{Ð0›TZ@6k¥OŸÆ @€ @€ P“Ôç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >†Yës.õ„ @€ @€�–fm »ƒ @€ @€ Pìõ9—zB€ @€ @€@K ³¶„ÝA  @€ @€¨�€aÖúœK=!@€ @€ @ %†Y[Âî  @€ @€ÔGÀ0k}Î¥ž @€ @€ Ðì-awP @€ @€ê#`˜µ>çRO @€ @€h‰€aÖ–°;( @€ @€õ0ÌZŸs©' @€ @€´DÀ0kKØ” @€ @€�úf­Ï¹Ô @€ @€Z"`˜µ%ìJ€ @€ @€@} ³Öç\ê  @€ @€-0ÌÚv%@€ @€ @ >ƒëÓ=!@ ¼ð ÑÑ™3gö�îêåBx饗ǘ={v£¬@ 73f̈ͧOŸqÀ€½Ù•m 4æÌ™å|2dH£^�@ï^|ñÅØÉ¢‹.Ñ]«÷žö�y¿8°Èî4h}"�÷«¼S lP«OPíd‘|÷>räÈ^ZÈfí% Í  @€ @€èïþûû ÿ*'�ù;²x*wâÚ¶Áy-åç᮫¶=M•kØË/¿mÎÜC×UåN_Û68¯¨Ì7t]µíiªhÃòŠÊ(›µ¢'± ›]¾_ÉfmÃTÑ&•ïW²Y+zÛ°Ùùî½÷ “ÍÚ{C{ @€ @€ @ _ Èfí×§_ç TQ`èСÑìŒUl¿6·›@ÎÇš™;®«v;;ÕmO9ÌuUÝóØn-/g³º®ÚíìT½=™u˜×UùVõ~ikÊוlÖÖž‹:½|]Éf­Ó™mm_òµ¯÷9­²Y[{� @€ @€�Ê f­ü)Ô @€ @€Z+`˜µµþŽN€ @€ @€@å ³Vþê @€ @€­0ÌÚZG'@€ @€ @ ò†Y+ u€ @€ @€�Ö fm­¿£ @€ @€ Pyì•?…:@€ @€ @€@k ³¶ÖßÑ  @€ @€¨¼€aÖÊŸB @€ @€ @ µ†Y[ëïè @€ @€T^À0kåO¡ @€ @€ ÐZì­õwt @€ @€*/`˜µò§P @€ @€h­€aÖÖú;: @€ @€•\ùèP`âĉ±Å•W^ñ˜cމxç�wF¼õÖ[#n²É&»¿<òÈ#±ògœñ²Ë.‹øôÓOGÜvÛm#¾ÿýïÿÿìÝw $E�8pI.KX@’¤�œ "ñDD@1 ŠˆÄ;ð•$¢€` ƒ‚H%ç%§%€%ì–ß÷ñ=ûæ÷fçí¼Ðûfº?óGmMMuuÕ§{{æÕ|§:Òu×]7Òj<î¼óÎÈÛo¿i­ª!Ðj/¿ür¼tÓM7EzÜqÇEzñÅGzê©§Fºë®»FÚþcÒ¤IQùž{î‰ôôÓO�4Ûü¾P”D¦2�qãÆÅXî¿ÿþH7ÞxãÊŒkðªóêµ×^‹Îä5ê /Œ|^ñæŸþÈä#‰t›m¶‰tµÕV‹´çU«ã8TW˜7ß|3vñûßÿ>ÒK.¹$Ò›o¾9Ò÷¾÷½‘®²Ê*‘n¶Ùf‘n¾ù摎1"ÒnLœ81†põÕWGºÞzëE:räÈnÔ�ôòäÉÑÎ#�<éùçŸéQGéóÏ?iºÍ2Ë,‘Ì#ßUwÛm·¢‘�}~+6ï�ÌP�W�?þxŒ(?§}ðƒì�Ñ ¦Cu^�{î¹Ñ�í¶Û®_�¹÷Þ{£þ²Ë.Û¯­:­r^¯_|ñèØb‹-Ö¯îåß5ù×Ó +¬Ð¯m;¿òÐþUøÎ;ïÄ�o¸á†Hó|»îºë"Ÿÿ»?úÑ�F>ÏÀ|gœnºé¢¤{CõWá[o½ùI5Mf›m¶îe‰ž‹fíêçó @€ @€ ¿€hÖá?z@€À4xá…b/ùýa~£;ø�Þ}÷ÝÑÈ–[néO<éÒK/i~K|Ê)§D>ÓŸüä'‘ß}÷Ý#íöG~ߘQÝ>–¡êÿW¾ò•hêøã�’Ï8ãŒhçßøF¤ÿû߇¤ÍÎo$cUÞxã�6»úØc�EÍ;ÍúYm¦™fŠÌ'?ùÉ~m5\•‡ê¼ÊȲ=÷Ü3rùå—GºÀ DºæškFš×±Œî?üðãä˜cމt¯½öŠ´Ûý=¯®ºêªòK/½4€�g”Ê|óÍ7€m§å&Cu…Ɉ¹ýöÛ/:ÿ«_ýªBFèÌ0à Q’ï}™fù¯ýë(¯Fìg^¯2v©þ3yFåÙ5Å }nºé¦ñêûÞ÷¾>êtÂKOºóÎ;Ggòweô*¯üûì³O�wH›íŸW­:œ-ä•ôèÑQ­{#æ†ö¼zå•W ´ŒNÍè΢pŠ™üä0Å—º¨0ÏŠ|Oìo·_}õÕØäÙgŸ�´ѬeüU˜¿í8ðÀCé{ßû^�¼ÔRKEþý蠟�vZ‘æuì°Ã‹’ÁÇøG#ÃòÌ_…=ôPô9c¥?ð�D>ÿ¿çç‡üûº{¯]¢Y‡å„´S @€ @€ª# šµ:ÇÒHèC ¿Ûb‹-¢N¦ù­ã·¿ýí>¶jõR®°“«mfëI'�•³$¿÷ÎÕj6Ùd“(ÿÒ—¾éÊ+¯i®�™š<~øáiF̵?äå—_>*/¹ä’ío2Œ5W\qÅØû÷¿ÿý¢±õ׿þµ(i?“Ñpßüæ7‹Mr­ÃÆx±â¥ÚfZh¡ûÜsÏÝ/�îúV|ðçÕøñãÃg«­¶Šô¾ûî‹ôä“OŽôsŸû\¤—±-g—å{ï½w¼ºÖZkE𝑩Õc™e–‰ñflEFLgôå‚ .å×_}¤m´Q¤yF]yå•‘ï–ÇP]a.ºè¢r^—rýÍ�vÚ)Jãy3ž.#s]ଙñ;Ý"6ø~æsyÎ4¶–kyçyµÈ"‹4¾Tä»%Ê)¯'y¬³óO?ýtd~ðƒcL&¯T|p4’Ÿßò3UÓ0˜>t˶ /¼pt5¯ùÏ<óLäó³[úßØÏ¡=¯©�ït_üâw'_�¡ý«0Ñò—@ÇšŸ òWÆMO?}OtcþÌëØ¼óÎ%3Ï�´»>?Ý’L¾6ÆóÎ:ë¬Ñr¾cæŠÀÝõ÷`#‹hÖF y @€ @€ô[ ._#÷Æh-pÞyç/n³Í6‘oŒc-^ŠÌzë­W<=묳"Ÿ+xÎ?ÿüEy§e2ê-¿clî[®‰ööÛoÇKÍñY?cÁòûÉÆ´¹5%õÈs&#šG�7Ñê¼ÊÿecØÜ‚’Vy§òV¯6–çjbYríµ×F&�H'G[”}^å¯ÚqÓ�ç@ûùŒEmÇÚØNã½¼Ç�/ýóŸÿŒ´“ß³ÿ­¢ß[]Ó²…Œlþ”çUÞ£¹9Z§óÿßåè¦Mš÷¡Î_#åݺsüÆu`§MO†j/Cu^]wÝuÑ¥üÌÖªo©×üjÆ‹åÊÝͯVµäÅ_,†V½hÖü•×–b˜E&W7ÎkW«OYù‹�¼¶gky®æ;·½úê«£Í,Ï÷ß¼#E^ëfŸ}öx5÷Õê/£¢K•É4þU¸×^{ŸšãXÛ]¿äÚ¿ 2^5×’Îò|¯ÌÏù{ž×üÆ­º%/šµ[Ž”~ @€ @€ С¢Y;ôÀè�)�+ºžsÎ9E÷>üáùæL~Ÿ™ë!^|ñÅQáÁŒ´“£xžxâ‰èá=÷ÜÓ<œ^%­î¯�ëñå}Ò{mâim2zâšk®™ª@«ó*×ÒÚ`ƒ ŠúŽÝ(ª™Œ³(žÊôh\{4£;?–³Œóª‘%£-òÜk,—o_àùçŸ/*§dÞM¸(ìØL^¯2æ´U'oºé¦V/Eù'?ùÉH3Ú+×ïËÏ�›4_³~nÛX³žùü ÐÃ?ÃÿÙÏ~i~²zá…ºd¨Î«-¶Ø¢K†«ÛÍ×¢áêIûÍuŠŸ{î¹>à�âÕL›«åZÛùWÀ³Ï>òZ”Ñ—�šw\ÈOS™6~rhn³Ú%ùîpê©§ì^„xf¼sÆD7Ç•gIFâ/¹ä’…mweD³v×ñÒ[ @€ @€:N@4kÇ"@ “ïRšýÌ{¹öÝ祖Zª¨Ðø]zQØQ™üæ°Õ÷‡·Þzkô6×cjgU¾ŽšÎ £@~;�k7wãÉ'ŸŒÂ»ï¾;Òö#tî»ï¾¨ŸÛ6·Ù\ÒjïÍ5ëYòè£�ßl³Í"ßùk’–q^%B㚆ƒÙ¸"gÖÉhߌË(èd �Œô9ùä“‹’ý÷ß?ò�^e‡ó—(Eç‹LÞ_ûòË/�’ 7Ü0Òv"å—Xb‰¨¹È"‹DúÌ3ÏDúÈ#�DºîºëFš�§Ÿ~:2í_Óþµ]5ÿ½á†b`GuT¤#¶Ã;Cí;ʸ¨Ö�™¡=¯r€ùÛŽ›o¾9ž®²Ê*‘æZ™ù©õöÛo�’µ×^;ÒŒOŒL �WõŒ¤Ë;ÂçÿÇŒ²_l±ÅBfõÕW�´»ÖÐl\]½ùàæõ*?Û�=º¹BQ’+cæ/Ò2RõñÇ�Wzè¡H[ýuPl^«L^±3Þ3WÙn\i´eüU˜¿CÊUÈçœsÎ^P¹ëm·ÝåݻίhÖ^‡ÕS @€ @€ôO@4kÿ¼Ô&@ æ�w)�{î¹Ccæ™gžªIã:t�ߥOuCèC WFî{}ä>6÷R/�»îº«(YmµÕŠ|Ý2ãÇ��!g¤áòË/ù¼ûmÆõÌ;ï¼QrÑEEšwëΈŒxZóGFû抙¹’æ‰'ž&¹šùç?ÿùÈÿÇüGm•FŒcÏ4ïÝœQÒu˜,¹úaÖ©-T |„ ‘î»ï¾ÂGùn‰ƒ.º=Í2÷ßì+Ï«ŒFÌ]gœuF„åïEV]uÕiÖ«NÛQ®9ž½Zýõûè^FOï{ß‹:Ë,³L5«÷Rã©z£Úet¶™¿ðËè믿> ñ‹_Dzíµ×FºÂ +DšŸ¬vÙe—ÈçÓ‘©á#ÿ'毑šcÆ3š57™Â¹"pwA‰fí®ã¥· @€ @€_—j‰@IDATtœ€hÖŽ;$:D€@' 4F³æ:kåÔwŸóûº¬Ó÷=@ûnÇ«(C ¯KÇ{lÑx«Õ‹ μúê«1º•W^9ÒŒ]mì:ë¬Óø4òÙÚ«°VO'Mšãmu¿é3Ï<3^Ýn»í"§™'F®˜™Ñ¬Y’iJR:å”SäÆoŒôÇ?þq¤Ë.»lI{ ä¹”ëù®±ÆñjãçÒÌçÕìºë®‹WZh¡HëI7f̘û¥—^é~ûíiã ¤¹:ùá‡ågŸ}v¤swå•WF¾yÉ(ô¨¹@ÆÝ'B®»}ÜqÇÅÓ¯~õ«‘fLôg>ó™ÈçÕìÛßþväs½ò .¸ òyF¦&�üõÏSO=ãm'žëGgkþ2F4kMNÃ$@€ @€ @€Àÿ ˆfý? 9LU 1F`ª•‹ �+÷åÊkÅKÎä:}�ßôöw°y×ÎVRýmMýjäÿ¦¼GðÀF”«ûµ³ªòÀÚïÆ­N:é¤èößÿþ÷H¿öµ¯Ešk’vãXßççŸ>ɵÕßZZÈ÷µ}öÙ'›w^¾ï¾û"Ÿ«ýæú†§™+´Öù^çy>ä}–›#tD³æ™³×^{ÔÇ?þñHwÝu×D“öȵ o½õÖ(Ÿgžy"]`�zÕɧy‡€Å[,žÞ~ûí‘n¸á†‘Öíb¾»e¤aóçù|×;í´ÓB&£íò] KöÞ{ï(¯ç#?5åÊ¿o¾ùf 4ž9ù©,_­[$þk¯½Vœ¹kãÚî£G�.^Íõ‘ó³Öž{îåp@¤çž{n¤�žÅ&•Ìäª÷o½õVŒ.#ë[ sÉ%—Œ—®ºêªHs…Ö\°Uå,·6k]"@€ @€ @ ›D³vÓÑÒW†] q•Õ±cÇFò[ÜæoŻڸ¢k}ÖÃÊ5­òζ�íç—[n¹¨¼ÔRKµ¿‰š•ÈHŠ\+m`ƒÍø‚•VZi`›Wl«Œ„:ä�Cb\¹RdFúTl˜ýN®Öiت‘Áœ�­Úì®òŒÄùþ÷¿_t;#wn»í¶(Éò/~ñ‹‘Ïó-WÛ¬Ïo;.¹ä’{^» ¢Èd\a¦�å™üñÇ#“Ÿ.¶Þzëæ +IŸŒðÊ¡}ôÑ‘ÉßµTl°C2œã^sÛ\÷V4k³’ @€ @€TP`êa#´! @` Íß¡ýãÿˆÆrí˜V­>ðÀÅK}ÏYTëØÌÊ+¯Ü±}Ó±îXxá…£ó™vï(º¥çy—ó1cÆD‡s…¾<0òÝÿÕ·yÏ«¼[wßm6¿Úü¾Ð\§Î%ù+�\³ï–[n ŠŒâéÞhÖŒÜrË-Û<¬³Í6[›5ë\í¹çž+†Ÿë‡þà?(JúÎ4F¼ö}÷ê¾ÛÞWÛ?¯2&ñÃþð:œ>Ý«4€!r“üíZcüæ –Í7Úh£Aî7£VsíÚA6U™Íÿú»æškb\í›Q«­†9jÔ¨â¥Æß;…]”iÿ¯Â´Zd‘Eú5ºŒ–]o½õb«<ûµù0V¶6ë0âÛ5 @€ @€UÍZ…£h L3�\•éóŸÿ|ìñŒ3Έ4ï~Øø}fcg2:ãÒK/- —Zj©"/C€�i)0qâÄØ]Þ1ùòË/�üŽ;îé~ûíiwE D‡=ºH 1º'ÏÃ.ê¼®N�=öØ#ö’i;»ËXÎÛn»-*ç'±UW]µ� Õ!0U�G}´¨³Î:ëD^g"SÌ7ß|‘ϵV¯¾úêÈ�;6Ò\Q´¨Ö+“+ãga£;{5ÕuOö9s`[ /ŽhÖáõ·w @€ @€º^@4k×B @`Ú l½õÖ±ÓŒf½ð #Ÿ%ÍwðüÓŸþTt/ïè�ß|…2˜¹ëž{îû:óÌ3#ýÌg>iÞù½�»TOƒNÚEWäÝÉùË_Fo7Ùd“Hç�wÞ>zþÚk¯Å«—]vYQGÔaA!C€À4øÝï~{=zt¤K/½t{ÌëÕqÇWÔÉ_°Oee¹ë®»FIF³æ:Ñ­¢YÇ�5/ºè¢¢…%–X¢ÈËTI@4k•ަ± @€ @€ 0 ¢Y‡Ý. èv�Í7ß<†°ÆkDú‹_ü"Ò¼âÎ;ïù¼+bÞ¿ûë_ÿz”äãk_ûÚ¿²þ%@€À4xñÅcOcÆŒ‰ôÜsÏ�ôSŸúT¤'Ÿ|r¤#GŽŒÔƒ@ûþóŸ£r®ê›wÎ;Âô£�ò\Á<[ûÇ?þ™£Ž:*Òë®».ÒŒc͕첎”å ä=vØa‡ØÅŒ3öL}œtÒI‘æ'ùYg�µØuÖ<ôÐC£äúë¯�tÓM7�T4kA$3E�m·Ý6Êó¼:úè£#¿âŠ+Fú¹Ï}.ÒŒx�4iRä�<òÈHŸxâ‰H�8âˆH^xáH=ª' šµzÇÔˆ @€ @€˜¦¢Y§)·� 0\¹"á„ Š¼ýöÛE>3|pdF�U”ç*Nx`Q’™\ÇðÔSO�§[n¹e¤»í¶[¤¹–Óâ‹/ùóÏ??Ò|œrÊ)‘É»âþ«Ì¿UøéOÃȨ‡ÆñÜpà ÅÓÓN;-òÉUFæøã��´1’"ÛÉ6k>üðÃÅÓl9㦋ÂÈì³Ï>‘®°Â �…ò]*0TçU®–Q‡¹2]‚d¼až3Ï?ÿ|6^Ñ2Öõ·¿ýmc¡|— Õf­µÖ �Œ†Þwß}#ŸÑ©‹.ºhä3¾õÕW_�ü•W^i>–_~ùÈœ~úé‘ö½–kÖ—v‹À3Ï<]Ýÿý{uø…^èU²ûî»GIþâ'_Új«­"“±`½*{Zs�¡:¯æŸþ�üõ¯iþÂìÓŸþtäçž{îHówiiØx½ÊU§ósšµËªb�¡ý«ð}ï{_øüüç?�4¯fýÃþ0Jò3?½ßvÛmQ’÷êøò—¿y�ª ˆf­ê‘5. @€ @€¦‘Àt�?þxì*¿çØ>GŒ1° mE€@mò{ãÁ ¿¿Wžå–[.v—륶¿ßí·ß>*ÿêW¿êc“qãÆÅ«¡“ñb–«µ~á _ˆW×Yg�>ZðÒð Lœ81:�k'õ7f!#�;ì° ᥗ^Š­fŸ}öbÛK.¹$ò]¶™¹ñÆ£æšk®Ùf}ÕÊxã�7by­ëïú§Cu^å/¯~ï²Ë.Þ{ï½ÛÜVC.0yòäh3¯sÍ5W¿Ú/ã óÔSOE.¿üòH3lìØ±E¯V_}õȯ½öÚ‘fŒOÿ/MÉL�üô’¿éÉ÷Ävvšë .¶ØbíTîUç„Nˆ’=öØ£Wy;OóBvë­·Æ&¹òo;Ûª3-r}ðü´ÓËÜwÊ8¯²'W\qEìúøC¤ù.ùÊ+¯D>?·çÓÛm·]”ô÷o�ØÄcš äÑÌ÷”\u·ý]—÷Waöêì³ÏŽÎ\xá…‘>ú裑æo>6Úh£Èç»aûzL�üôþÎ;ï x_¹Ê³hÖÚ� @€ @€=¢Y� ƒÀ´�f†AÚe— &šµK†¨›Ã 0˜hÖaè®]v‰À`¢Y»dˆº9l‹f¶îÚq— ,šµK§›Ã&0˜hÖaë´w¼€hÖŽ?D:H€ @€ @€@=,P�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ0ÍZ�ãl” @€ @€”&`šµ4Z  @€ @€ PÓ¬õ8ÎFI€ @€ @€@i¦YK£Õ0 @€ @€õ˜±Ã4Jª#ðâ‹/Æ`fœÑå«:ÇtxGòÆoDÞyç�HGŒ1¼�±÷ʼýöÛ1–I“&ie†f Ã.0qâÄèCžcÃÞ¨ŒÀ«¯¾cÉwÃÊ Ê@†] Ï«7ß|3z2ýôb¼†ý€T¤ù>˜Ÿ²üUX‘ƒÚÃxë­·¢sÍ5× ûâJ7H@› @€ @€ Pwá`u?ŒŸ@× ä÷K¢»îÀul‡óûð馛.z8Ë,³tl?u¬»2J:ã,FŽÙ]�×ÛŽ˜ð�HÛy¼úê«Qí—¿üe¤ç�w^¤cÇŽ�4[ûÌg>ù¼^Í4ÓL‘ïÆG^‡ß÷¾÷Eç—[n¹^Cx衇¢$m×^{í^¯Öáék¯½üì²Ë"ͳ+?SÍ?ÿüQò‘�|$Òm¶Ù&ÒÕV[-ÒöƒùÌÖþ^†«¦óªoù¡=¯òSèõ×_;=ÿüó#ýë_ÿiîe�uÖ‰|¾n±Å‘Ÿa†"íÆÇc�=Ý~ê©§"]o½õz á…^ˆ’o¼1ÒM7Ý4Òg¬×¤PgB~JÏwÀüóÁ Û•W^9Ò|7Üa‡"?zôèH«ñ¸ãŽ;b ÓM7]¤í|z|ñÅ£æ_þò—~ ??Ïw×ÿGѬý:Ä* @€ @€ @ ·@½¾¸è=zÏ ¨�@~s»ÝvÛň¯¾úê�{æ™gŽmó[îöÉø©çŸ>6ùЇ>Ôþ†Xó­·ÞŠ^e4k»7yòäØdâĉ‘æ7Éým¡3ëå+_‰ŽüñCÒ½Œ1ÌȯŒ4Ü}÷Ý£åŒʳ÷”SN‰’-·Ü2Ò³Ï>;ÒYg�5R�<ÇÞxã� P íy•QÕ»í¶[ÈdD^F–ýóŸÿŒ’#�<²Hö³ŸE~ç�wŽ´yôóLhîþŸØ¬¹µî*É«G^O~øáèü²Ë.iÆfæ•ç7¿ùM”üèG?ŠôÌ3ÏŒ4cç#3ÅGF¦l¿ýöñjÆïÌ=÷ܑϸ°ŒËt̘1Qž‘þ݃Ÿï}™6Sdy5®<Í£ë»ä‘G‰ {î¹g¤KžQäk®¹f”d¬tž‡~x”sÌ1‘îµ×^‘¶z Õg¶VíwNù`ΫW^y%’¶ýQþ¿Î¸þþn;mêíy•¿ 9à€¢ó?þñ�#Í÷Áõ×_?òù¾�×½L?ÿùÏGùI'�TÔŒL=ò¼Êq5w»ïOJÏ>ûll’¹4oÛwɨQ£¢ÂÇ>ö±¾« ã«C{&¤ó¯~õ«Ñ׿þõHóo½ü-Hž]1�ïƒßýîw£Næ·Þzëatª]¿þúëÑÔˆ#Úl°ñÜÛj«­úØ*�Ô•W^uºñoFѬ}\/ @€ @€ @`ê¢Y§n¤Èõ\2 5ÓüŽ÷Ûßþv¿F—Ñ—\rI›[å·ñ¹Jàk¬[õw�Î6wÔuÕrŸ®ëö;œÇ÷ûßÿ~ñê¯ýëÈç7ØEáT3ûÛߢNã’Ñ+¬°B±í7¿ùÍÈgLÐÁùŒ¶ØgŸ}Š:�œy饗¢{7×~?su¿\—¶ý­º½æP�W¹ö_Ʊ¦áYg�8‹/¾xA”+i~îsŸ‹’]vÙ¥xµ“cRŠÎËLU ×äÍøµE]4êg\ÆÚäûã¤I“¢ü§?ýi¤Iý¥/})òþóŸ#�wÞy#m~zè¡Q˜­e¼jÆ*Î6ÛlQþ�ü#Ò\é5cðsUîl¹¹µj—ä'‡VñeÍcÏÕóW ͯvBÉøñ㣑tß}÷Eþä“OŽ4¯$-˜±KyÍÏò½÷Þ;êäµ(?SÅÓ^�¡úÌÖ«ÙŠ=Í_±äZ¢ýZ'ÿfhÏ«ŒƒËèéÓN;- 2¿ß~ûEþýïA÷ÀD>ï �+ãçYš%Eµšdò7ù ã¦ói®’yÏ=÷„CþÂo‰%–ˆüã�?iÆrF¦eœ ¹w~&_j©¥bÔ?øÁ"͵ÎÓ0¯ùù˜Qÿùk¡Ûn»-jvû:­ùÛ þ®í›ï ùë‡V§JÖiõjç—‹fíüc¤‡ @€ @€t´ÀtùÍCƉ ¬§í¯Å0°ömE€@õ2jf0ãü•'û�ßÄfOò®¸y/ÈÁô-·Íoá22ñç?ÿyæ½M»ýÄ©”ß^æj¡­¬ò;íë®»®U…^åóÌ3O”¬»îº½ÊË~škÅftí,³Ì2$»Ë¨®Œ Ë51cT[í"ïѼùæ›G…ŒT=è ƒ¦X9cB\pÁxu‘E‰4#‰:?F8×±ÊþOqhS,̈€‘#GNñÕÆÂ'Ÿ|2žæj€ý]C¹±�Áçs•ƼδÓóvö8°ó*×ù͵À2v`“M6™âîòÞ¯_–kk^sÍ5Q³“ïîÚßëLóÀs-Ñæ{17×ì„’|gÉÿAsÍ5W›]Ê­N<ñĨŸ1­Ë,³Ì·ÍxŸÿ÷�W3*?ß¿vÚi§^õ3òk饗Žò\‡.ÿßÍ9çœS­™‘P�¼.dá‚ .ˆÌ`V…ËÕ÷òÊœë�¶ßZn•kö"-éiþoÊ=¶ÿn’W•¼âõ{›+˜g¬t^Í2úµ�á”ý™­�> U�¡=¯†ªW嵓+8Ï>û챋ößM†ö¼Êß–eDyF¶Š¿Ëøýü¬žÙù?wðw”'œ-ç_ù‚�í+G�Ÿð3Ö2?G¥À 7ÜÍæÿñ[n¹%òù™9W÷~ðÁ£$×u�6¿ƒÉó*?_µ:šÍeœ ù{ ùæ›/v×ê}9U7Ûl³¨“¿ÿÈwØOúÓÍ�쨒ŒÆ}íµ×¦Ø«ü«0ß÷?øÁN±Nþ­�Ÿäó]æOúSÔÌßÖLq“(Ì÷”gžy&òyf ­êUyî·ýwêæý>÷ÜsQ(šµYF  @€ @€ú!`mÖ~`©J€�ö®¸âЍœq@¹l·Ä±æ÷xyïÈæñæ·šù­lÞ²¹N~ߘßmn´ÑFE… &DþÆoŒ4£V3:àÑG�’V­›W>óÄOcÌè°âi¯LF�åªayÎŒ5ȸ¼^•;êiF ¦Ÿyîå¹Ô<´ü¾=¿…nuFM?}Ïw̹vds U*ÉHíŒcÍqå ѭƸúê«ÇKm‘±ÕwÞyg” UŒ«ý¦<ÿ/d„f¶síµ×F&£5×ÝËW3B'ãªrE¹ö£`ÓÏáÝ6ÏùŒáê»'ø馛FµŒµÉ¨Õæ­2Ò9ËsÍÍæ8Ö|õCúPdrɼ^åzÁ�ïÍíwBÉÇ?þñ¢wÝuWä3*'×à+^ŠÌc�=é?ÿùÏHóÿQ¾Ú:-ãRsïÓ&ͳ¥�}å{VÖÌÿ§y­nTj§�n¯3´çU·k´êÿОWg—÷‚oµÇ,ÏU53Ÿï¡O׸šyß- ׫+¯¼rì:?#å/{2ª®ù—gškvgäiF犽Íñ°ùÉÚÄ–­WÆ™�¿êè»ç)¼Új«EµŒf͸ھ·ê„W3B9£V[õ'×SÎ_É7×É;L4~âj|Í¿_òݳ±ßÓÏ·Ü0Ï™Ìç§Ç<§Øl¦@s;­êW£¼Œ3¡1Þsá…î ¨¼D¦�οér å,ßxã�#Óx6ÖÏ|F§6~®Èu·óŠ”å¹ú|ž¥¹âmFwKkŽT4kóÑWB€ @€ @€�~ˆfí–ªhG +î³Ï>±I~×ζ�PgÉ%—ŒndÚÜŸ\�'×~j^啕~cIÆ!f$Ew}'Ù8Šòò¹BV®L”wdÎø¯æÊr•ÀüÖ÷¿ÿû¿£K3Í4Sy먖ó.®Ûl³Í{•ë‘e fÞ™tŠÕjRØ{ò÷¿ÿ=F�qÐçÒ ¡ñ^±­Öålµm÷–Ï;ï¼Ñù\3z`£È¸¡�mÛi[Ýwß}E—rUµâi‘iŒÊ™þù‹òV™Æõ¦ã¬[ÕW^=�\‡=Ç•qß~Ë2ø£ÜÎʉ�{É«Ü<óÌÓXØÕù¡=¯2κ1Ú®[¢Ë;ˆùk�…Z¨ØEc4t®°œ÷u(*T 3´gB®H~Î9ç„LÆJ7®ÑÜ�\¹òoþM—¿çÈOàË.»ì‡“«¯ægѬŸÕò/ÊÌgTõ[o½U´�gZþzoôèÑQÞ-×.ѬÅA”!@€ @€ @€À@D³DÍ6èCàŒ3Î(^Ýn»íмÌßþö·@h¾÷7™È²òüÉ8ÖŒ÷9üðãÂ.»ìiF­~ík_‹|®løÿñ¹¹”@/�Œ˜Èû#ç�Ðï¿ÿþ¨Óx'åÆM2&%£²<ïÛX§ªùŒªë–(‰òŽBž�k7Þù7÷›u×�î{-¶Üªq�î§žzª¼!h¹còwÙ½\k¯c»ÚEkµrb a�]ÚóêÁ,ú³öÚkG~Î9ç,Jê“™T”d&?c4®ß«B>ÍÚ�E— @€ @€è&ѬÝt´ô•�ÈoöÎ:ë¬èçk¬©x�ª·ÚÚ¿Fæß) \{íµñÂu×]i^mÖZk­^U_yå•(i\»°�“ŒÖÏ¦ê³æo/ºÚ>ÍUüŽ=öØB ±Q<•!0�¡=¯rEÈãŽ;®èÉ{ìQäë–I�ü�G®"Ú¸k®ÇýÉO~²`ÉØÏj¬»=˜3!‘¶óÎ;2™ÙvÛm#“ŸÁWÀïU­+žŽ;6ú™JK,±Däó/µ\%9•7Þ‡#WøÍwÿÜ6ϨŒŒÎ�7ÆgIþÏ¥g™e–,ìŠT4kW&�$@€ @€ @ sD³vî±Ñ3ºN q=»O}êSÑÿºEb¶:d¹rV®™wônU3Ëó;ÏüVsÅWì»rÅ^=óÌ3cD_úÒ—"ýÞ÷¾iÞµó'?ùIä/½ôÒHó‘Ѭ¹6kçŸiùÝu®Wõ¯ôïß\—¶1&®Û×µö;ìCÿÃþiÞå6ï#ÿ‰O|"Jò~¯çž{nä—[n¹HO:é¤Hó¼jŒx�Â.z¼öÚkÑÛ—_~¹WŸïiÛ륚?ÍÕ÷c™8à€0i^wµ1>¥}´\Ñ5ëwþõªÕ¸Þ|óÍx©ù¼J½V[åÇ�­j6—§v·ÿj!¯*y�é\[ÿùÏGšq¬ßúÖ·ŠÁn±Å‘ÏïØ³ü«_ýj”d|Ð!‡ù�E™»(5“q7¹æãÀv4ß|óņùýùÀZ¨çVyw×\3zë­·„«®º*Ò<ßòÞÁ{íµW”dÜkÖL«Œ¼È|w¥wß}wžgžyúxµž/eýÕW_Ã_o½õ"Ýj«­¦H‘ñ­y}ÎëO®=ÅÊEacDÕ’K.Y”wWæ©§žŠgÚÜóVÑßþóŸ£rF,6oÕwIF¶:}oÛ ¯Þzë­Ñ�|‡Ê8¦|çꄾuNv^ÝtÓM1„ÆÿYí�(²á†¶¿IGÕÚó*?£tÐAÅ>øàÈç»gQØu™üÜuå•W ç¹*ëÇ>ö±6·}üñÇ£fãšÝmnØQÕ&ä:¶™æÐÒäâ‹/ާ»ì²K¤™¿ì²Ë"¿Ê*«dµŽMóýýÎ;ïŒæXò¾#Í¿MÌèøü”~ýõ×GýüÛJ+­ùüEc®¯šW¼™gž9Ê×\sÍH[=~÷»ßµz©ÃËE³vøÒ= @€ @€:]@4k§!ý#@ +2Jå’K.)z›÷^,žV&“‘5í¬•“ßl�7.Æž±Q­VÕÌ(ÅÇ{,j^~ù呿·è¹&ieèúHF£dŒjž9_þò—{ÕŸ~úžoF7Ûl³Hó.¥›nºiä;ì°Hó®Í«¯¾zä;ó‘qLe¯t–ñ¼�kEu¦Æ´ïU®l›ñª™¶êCc¤^÷F~ä#‰.´ÐB½†™«¤åÿ¦^/Õöi®¤¶Ûn»…@ƨæJЭîê›ÿËríÂŒ¯o'šõ•W^)„s�¶âieF�½ÍØœÆnçÝ“3¶·±<ó�÷ãn~µª%y%Ùi§�ŠžvÚi‘¯ê§£b˜È ì¼êÞXÔ› íyõúë¯G˹^ð-·Üùü$Ö½ñãTdZÅ,gLbFÙ7ÖÏ|þŠ%?O6¯ÍÝ\?KòÓBþ>¦U�N./ïLÈ(Î�wÞ9†Ÿïž™ß{ï½£ä�üc¤ù·Ud:ð‘ïïùwßl=ìû¬Èó'¯N·ß~{Ôoõ7cþr1_Õjà­¶mU¿sÊE³vαÐ @€ @€ºR@4kW6�&@ Óžxâ‰èÒ³Ï>[t,ï5Y<­L&#˜ÚÎâ‹/Õ2j)#éZm•ß·o²É&­*T¾|ìØ±1Æ|0Ò\%säÈ‘}Œ:£2úì;ßùNÔÌ5O;9šµ�á áK /¼p´–é6[“¦2j q�énŒfí;rp­µÖªÉÑlg˜yåiŒnÎxÃvÖoŒZzî¹ç¦º»§Ÿ~º¨³À ùnÉô½~\Þ3ºï]†þ>c̘1Ñø}÷Ýé�iÙ¿f(c,e·é¼j_xhÏ«¼À¡‡8ûì³#ýÄ'>éw¿ûÝH;y¥ûèÞT3Þ*r<ã+óWPÍM劙™6¿ÚªdĈñR¦­êtfù´<×lÍß‘<óÌ3ÁÒÉŸZçŸþèa¦íÁ\×xíµ×žâ&ù “×êw3¹aÆÒö]gŠ»öBѬÃ~t€ @€ @€�îÍÚÝÇOï è�\W4;“ÑRy¿ÅéÞ0v£ï8ÖaìXGíúÅ_,úÓ¾ØRK-UlÕ)VÊè—À]wÝõóî·Ë/¿|äWXa…~µÐ •»= iÚ>ù䓱£/|á ‘æï0Ž9æ˜Èo±Åmv W¿=ùä“£þµ×^;Õm/¼ð¢eçUAQ±L®µ—kæJë;î¸cŒq¿ýö‹ÔÿÍæÃͤ٤¹dhÏ«üÝÆñÇ;:âˆ#"Íßi�x≑¯Æ§wçUóYÔ\2íÏ„æ;¼ñÆÍ«|I:4k4¼ïu`›ëwN‰hÖÎ9zB€ @€ @€@W ˆfíÊæÓtšÀ /¼Pt©{ï¡\ Af 4®Ÿ•wÍØ�\Û¨UgrÍ»|5c[ÕTN ï¢Ûjµµ·ß~;ˆ~ö³ŸP_ýêW#ÿÞ÷¾·(‘©†À#�<Ù~ûí#½í¶Û"Íx®¯ýëýàzë­WÔÏ• ÷ßÿ(™sÎ9‹òÌ<ðÀ‘¹úê«#Í÷ÇÕV[­WO»] ×ÍÜsÏ=c gžyf¤ŸùÌg"=á„"íÆ•õ¢ÛÃ.0´çU®Â™‘ûûî»oŒnÙe—�ô·¿ým¤U½§Â°ÄìÀP� �>úhŒ.?�÷½.|"Ü|óÍ…F¾.ºè¢E‰L•D³Véh  @€ @€à šuÐí’�ê 4F³Î3Ï<Õ •*�÷ìÞm·Ýb/?ýéO#=ä�C"ýÎw¾éì³Ïiã#ãÂ:è (ÌïÃ7ÜpÃÆ ò �Ûo¿=ò»ï¾{¤?üá#ÍU5sU¬Œ:òÈ#‹W3JñsŸû\”xTIàþûï�ál»í¶‘Ž;6Ò¼Ëö7¿ùÍÈO?}ÿb/–\rÉØ*#ÂŽ>úèÈg4ëÿüÏÿD>£sÕéÿüÏÿŒ’||ðÁ‘i¾¦ýïËþéB�<ÊcÆŒ‰¾Ÿ{~êSŸŠ4×í9rdŽI—‡_`hÏ«·Þz+†tøá‡GšŸ�ruûóÏ??J>øÁÿ€õ`š Õ™�ëºæ»g^÷<ðÀA~ÖZh¡…ŠÑdäl®`Þø«‘¬ßÎú¤ES2]$пOT]40]%@€ @€ @€À´Í:mœí…�aÈõÂ&L˜Pô#×",žF&£lF�UŽ=:òù}cQ8ÅÌ?ÿùÏ¢¼±…¢P¦’yzýõ×÷Ý 7ÜP”œvÚi‘¿îºëŠ’Ìä]nóž¶3Ì0CfDXFFuÔQQrÉ%—DºÙf›EšçÕ�wÞùßüæ7‘æŠNgœqF‘�ŒG†ê¼JŠqãÆEæ±Ç‹tíµ×ŽtñÅ�t™e–‰ôw¿û]¤ùÈWs]ÅjÜmù_#«û¿�+Çå™�"ûÛß"³ë®»Fšïbo¾ùæ±6ß|ó(oŒKÍjÁz÷ÝwÇÓ¼O÷\ù 6Ø Ò¼‚½ôÒK‘ÏŸ�vÚ)òÕ?~| dÇwŒ´ñJ’k:ï³Ï>QþüóÏGÚøé+ž�ŒuÍ•1‹ÂÈ”ý™­q_ò�&0´çUFpÀ1ÌüÝFŽ7Etì±ÇÆÓ#UÿøÇ?Fßòફ®ù­·Þ:ÒOúÓ‘Î6Ûl‘zt¦@®ò–W�¹æš«ÍNžsÎ9Qó³Ÿýl›õ›«}÷»ß�ÂŒÓi~5cùË_ÆK¹J]®ýšgWÞq>ׄ�i¦™š7WÒ!Ó—¿œÈ÷ľ;–Ÿ©òóUß5[½š÷y¿÷Þ{{U(û3[¯ÝyZª@®²šŸvò·;}ïnhÏ«¼f¶³ß¾{•ï˜î ß·Ò´|5Ï«ü|ÕÎ §å� Íš¿lËÏíwÜqGP<ðÀ‘®´ÒJ‘®¸âŠ‘æºÕ+¯¼rä=:S ?½gìóÀzøÜsÏņ¢Y¦g+ @€ @€ü¯€hV§à 0í£Y‡a�vÙ%ƒ‰fí’!êæ0 &šuºk—]"0°hÖ.œn³@£Y‡¹»ºIõ@IDATvß%ý�fí’aéæ0 ô7šu˜»k÷]" šµK”n @€ @€ Pu‹Tý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕL³Vý @€ @€% ˜f-Xó @€ @€T]À4kÕ�°ñ @€ @€ P²€iÖ’�5O€ @€ @€@ÕfªŽ?>šš0aB¤ï¼óN¤ÓOß3‡;ÝtÓ%ÍùxɃ�®ÈÿïÍÿ»³|òäÉ1º|uÖYg�üœsÎÙÕãÕy @€ @€@³€hÖf% @€ @€è‡À�E³f„š8µ~Ø«J€ @€ @€@%D³Vâ0 @€ @€Ã'`šuøìí™ @€ @€�J˜f­Äa4 @€ @€†OÀ4ëðÙÛ3 @€ @€•0ÍZ‰Ãh @€ @€ Ÿ€iÖá³·g @€ @€*!`šµ‡Ñ  @€ @€>Ó¬ÃgoÏ @€ @€TBÀ4k%£A @€ @€ 0|¦Y‡ÏÞž  @€ @€¨„€iÖJFƒ @€ @€ @`øL³Ÿ½= @€ @€ P Ó¬•8ŒA€ @€ @€Àð ˜f>{{&@€ @€ @ ¦Y+q ‚ @€ @€�á0Í:|ööL€ @€ @€@%L³Vâ0 @€ @€Ã'`šuøìí™ @€ @€�J˜f­Äa4 @€ @€†OÀ4ëðÙÛ3 @€ @€•0ÍZ‰Ãh @€ @€ Ÿ€iÖá³·g @€ @€*!`šµ‡Ñ  @€ @€>Ó¬ÃgoÏ @€ @€TBÀ4k%£A @€ @€ 0|¦Y‡ÏÞž  @€ @€¨„€iÖJFƒ @€ @€ @`øL³Ÿ½= @€ @€ P Ó¬•8ŒA€ @€ @€Àð Ì8|»¶çª üé†[bH>üx¤_üÂv2¼_|)z2ù�ÉSíÏL3ÎufŸ}¶©ÖT� @€ @€@£€hÖF y @€ @€ô[@4k¿Éš7xë­·¢ðžû�tå–j®Pù’wÞéâ9ç]éJË-é‹ã{bHû~Ì<óÌQa–™Gô]m�¯þç~GG O=ûüTÛÙäc«F�ýö3Õš«pç=ņË-3:Òg˜a`�ØŠ @€ @ D³vàAÑ% @€ @€ºI@4ë ŽVƱräO£•f虳ÚhÖÉ“{ÂD÷‡k#ýÕ7EúÂø—#Ýjóu#ÝnëM#�~úÿ›+¿ä²k¢ä×çý1Òyç™#Ò=¾¸}¤K|pÑHóqû�÷E漋®ŒtìCOFºÎš+FºëNÛF:r¶Y#�øÚ둞ó›K#½æúÛ#�uÖžÈÓ�wØ2Ò5V_)ÒÆÇýcާ÷?4®HϹàêÆ SÌÿç—zÖoÝj‹ ‹Wûîÿ}÷÷ìå+ßúŸ¢~sæ[_Ý! 7ݸǧññƒÿþz<]i…¥ ‹üE—öhÜ7¶'¹¼Ç¹_�_pé5‘ð�/FšçLd< @€ @€ºZàÿfèºz:O€ @€ @€�áÍ:@ù·Þ~;¶<ô¨ž8ÖÌøÍÝØVëÍ®ÿó-ñâ•×ü5Òݾ°M¤ÓO?]¤¹ß¹GÍù ×_+Ò¿Ürg¤çœû‡H¿ón¤ä¸qÏE~ŸŽ�ô—§éË/¿é÷Žýy¤_óéHwÞñß"ýéÏÏëIOÿm¤{}å ‘þì=%o¾»æìûöÄ]Ž{æo‘îÿ_?‰ôôã¿éÂX Ò×^Ÿé�~rv¤{ìÜÓÚ§·Ý,Ò|dtê=÷ö¬IÚ÷š§íôñÅŽvrïÿ»ƒwÿ¹õö{ãß_þ¶gìk®±rãKEþå—_�|«c'Lx­¨Y^æÀw%:âäØÅ}ÿÔHÅ´–§­e @€ @€À´Í:-µí‹ @€ @€� ˆfí÷Aýß8Ö#O‰-ß|ëݘÖo)ò3Í4ô˜ë®½z´œk¡ŽñÞ¢¯ûhOÌæw��4£Y/½ìºÈo÷oDºÌ‡>X¤þ¾g]׿ÜÜëºÁÇÖŒôç'éÌ3�ˆ4›o¼vdþç¸_FšÑ¬cvéY5u¦™fŠtºézâg—ZrñHvÖÅ‘Ž}°g ÓŒf=ù´_Gþõ×߈tݵ?éKïÆÌF&¯MìYãuÒoFÚXÞóÚ{Þ3Û¬ï‹t†fˆ´ýþ/²ð‚=¿ûxãÝ–/¾ìúx¶×—wˆtŽÙGæKEúNÏò¶ï9èÈžèѾ›|lÕ¾+ òÕgì9Cùöî‘~÷ðž¸àïÿøŒH¿ùõ�"MçÈx @€ @€t�€hÖ®;d:L€ @€ @€@g }fg�oH{óÖ»k•rdÏz¬ù8lÿž8ÖŒRüWÙPþûn é{ãX³õñ/õ¬²ú�…æ+vvÿƒOF~«O¬_”df‰Å?™§žîY§5�q¬YòÊ+"³ðBóþo�÷¼ç½ïý¿ÈÙ,|ûݵh_ß³Âé\sÍiF‰.¿LOäìfõÄÃî0æÀH[=®½ñ›½^:õG߉’Åëéaûýol$£t³dÍ�¬ÔøR‘ŸôfO,íqGíé²K/Q”7f.ºôÊxzߨž(ݲy¶ü­1±£ý9.ÒcNè‰#ÞûÝh\1­eûkŸ @€ P†€hÖ2TµI€ @€ @€@�D³vÙÁ÷n\ê57Üý>ùØý"}ûíÉ‘>ÿnœéˆÿ·âjì}³Ì™ñã{¢_›¹¶é¹]/}zë ›+%×^säGÎ6K¤Ë/³d¤i»áÇ?ù‰_‹4¿9ýðÈÌ=j®H/¹ìšHï¹÷¡H÷Û§'~³ù1˜þÿîŠë£ÁûÄz‘N?}ïï Þy7àöåW&Æ«¯¿>)Òç_x1ÒæÇ+¯öÔ™–�7Þ|+v7ñݵkç9[äűNKû"@€ @€ ­@¡m]k @€ @€¨¼€hÖ~â\Uó ýz¢2=ò”Hó~ñ‡~»g…Ö™f*ó•W{VP=êØÓ#ÝáS=‘§‹/¶p¤ù˜gÔÈÈLšÔ³Ùø˜øÚëñt®¹fo,ŒüäÉ=1°'ÿì×‘Žš«gÛ ×_+񾂣�=…?>ù7‘î·×N‘æê®¹6ëø—^Š’ŒÊŒL<2r6cK'Lè‰r}}Ò‘¾8¾§fócÎ9zVzíoÿ3:õ–;zâdwúì–ÍÍFÉ /Ž�tÒ=q£ß8°gÔ¾›|lÕ¾+ É«iõ­ƒ­­¸|O\ðn;ýÛ�´¬ @€ @€�áÍ:\òöK€ @€ @€@EÊ À¬Òÿ?Œg˜! |÷NñÓzà?‰’òbZ_~åÕhÿÿ±wðQTkÇ��@ ½ƒt)¢ˆ"(ì]±"6, ¯»^®ûµa»{Á‚bCÄ^¯Š*Ez ¡„TxŸ3YÆ,Y6ÙM²›ý?>œ�zæ;“Ù2Ïœ=Æåc¶iÕÔâ�SZô—®�ÛÚË‹–ZܵwÏÀ¨?æ,°ú±;ì¢<ÖqO·ÿiúŸï¼ér‹))µÓ¨¢<ÖËG�µ—ç q—}wÝ)0Maa¡Õ�;Ýõë/Ã.¹Åÿ2PŸúeÉ)5ê�ÝòÃo¿æúkÁb«{9¹­Z6ÓÀqæ¬96¤k§Ö¼kT‰±þ—ßþÐ^þ:c¶`ÔëÊÀ½ú†mÉݺ´·xÁТ¾ˆ € € € Pùd³V¾9kD@@@@�j%@6k9wçß9­W µù¯¿í1‹7Ýù¸ÅëFœSÎ%nm¶5k\ë¨1®Ïœ5®oÖ‹Ï;Ùâ‚…K,ª4oÖÄ*G²·Åûƹ¾Vwèîzüœ¿ÀM3ár‹ýú¸,Ôââ�|Ôå±¾öÎgo¿þ‹«sÖbýú®×å+VY¼ìê»-öÝ¥›ÅÝ:Yükþ"‹5j԰ئu ‹M|Èbiå­w§Ø¨_¦»TG\>¬´Élx8í÷Ͼj•ëwU-I¯WÏ?Êêê7ö­÷>µúAûõ-1¶ª^ª'ßíÚ4·\8Œ<Öòï‡uëÜß…ò©Ë¿æD`³@nnîæª�'‹u*D"PPàú%WŸéz·ŠdiÌ‹€tO’Þk×.yJD"°~½û®‘’’b‘³V$’ÌëÐùJÏíHöî õ�¥Ž@ùt¾Ò™JOÐ)ßr˜ ¿€>½× ú}É?M8u²YÃQb@@@@@ T²YK¥ g„®œ\û/—ÓúËo³Ã™¥LÓ¼áõ:}Ö_�¹‚{>}ú¡kmlŸ]v´xâ±. uÌ­�ZlÜÈå¥Þyã%ëÖM³øý�Ó-*�Õ*V®¼öUqÔ¥§Yý�w¦Z\»>ÏâSD«XÉʨkñµçîô^E'„Ó~ÿšr¼<߆Y.�µfM—]ë/ï4Í^þô«ë›õŠ‹†øGY½°°Èâ²å+-êÊêê—Y»vÅþ9œwÖq¶–öÛµ´HŽ€!”»(‡,žr2c Kú«ä¸*�ÃËr lòn¬Pî!ÇU¹™±„€Ž(år\•Àáe„:¢ù¤!&³üç+²Y,T"ðŸ¯Èf�“ÙúôxYî Ù¬å¦cF@@@@@À Ô˜;w®ýÓ¼¹ë/²|¥N�:囑¹ª½À{ï»ÞQ§Ïpy¾— /™UZ›¯^Y¯¹Ñõf{è�ý-îѯw‰©ïÅaÃÇØðõ\Ænƒ¬t‹ÿwÖñ{íèú¢¥T´€ú+Œd-œy"Ñc^¿€úfUæNZšËý§ ¹€¿oÖŒŒŒÈÈ0e³æääX½Aƒ˜ E�•+Ý�^ 6´H6ka|QÙÙÙ&�™éî³$›5Á†(n¾Ž+}¾"›5а ¾(}z�$§uÉ÷„$²Yü@bó@@@@@ R²Y#dþP¾*×KcpךD6k€‚J• �ÍZå» Z6€lÖj¹[«|£Èf­ò]P�@6k5Þ¹U¸id³V!~5^5Ù¬ÕxçVᦑÍZ…ø¬@@@@Ø"P±�Vß²jT¢y¬•ˆÍª@@@@蛕c@@@@ˆL€lÖÈü˜@@@*Q ¯È­ìÃ9.Nœéâÿ–º¸h­‹K×»˜žâbË ·Ërñ�N.½½‹m2]¤ €Ñ¨Ýű4@@@@@ ÑÈfM´=Îö"€ € € gë \ƒïúÒÅ;>wq­7ÄÕ¶VVmpCYæêoÿîâðI.ÜÑÅ[÷w±Ws) €@äd³FnÈ@@@@@ ¡ÈfMèÝÏÆ#€ € € ËoÎr­;ç-—¬s1òòÞŸn“½xÖή~ß¡.¦ñ‰c  €@9Èf-'³!€ € € € €àJ G € € €Ä�À&¯-·NsÿŒúÈE qµè-sün‰?-uñõA.¶Ìp‘‚”U€lÖ²Š1= € € € € ð²YÿÁÁ @@@¨Ze°Þâe³VNK¾YäÖ³ç.~=ÔÅÆu]¤ €á �;S"€ € € € €[ ›u+( B�ê'°i“ëyiÚ4wAüµ×^³øõ×_[ܰaƒÅ=÷ÜÓâþûïoñð÷˜œœl±|%;;ÛfÔ2ýõW«2Äâ“O>i1¾JNNŽ5Xnx ÕSRRJlÂÛo¿mCúôéc±iÓ¦%Æ¿ÌË˳�?ýô“ÅÞ½{[¬U+¾ßŒf̘a[ñꫯZœ:uªÅ9sæXÔ1Я_?«<ØbzzºÅÐ¥qãÆ6ÁÊ•+CO;|øp«ß{ï½�!ñRyï½÷¬©;Å-Z”hö—_~iC²²²,vëÖ­ÄØà—?þø£ lÓ¦�ÅF�OwC¢{\ù7_G×K/½dßyç‹ú{ìСƒÕ9ä‹§�všÅàýbc¼D÷¸ÒÆêdݺ-·®W¯ž�ªY3þò–-[f-ã�7,Nš4ÉâÏ?ÿlqç�Ýc¶uN>õÔS­Þºuk‹Áeùòå60œ³}ð¼þ!………ö2^Îÿß|ó�µ¶n]—ØÖ£Gÿ†Xý÷ß·(Ûþýû—üRÓ¯ZµÊFõíÛ7x‚¸¢OSï¾û®µ\G×wß}gõæÍ›[Üm·Ý,sÌ1wÝuW‹á”¢¢"›ì­·Þ²¨%ñÅVב¹Ë.»X]gªÎ�;[�"�ÜÜ\«|üñÇ÷Þ{o‹ñ×Éè„_ÜÖTf«[ßæ2gµ«ÿ’‹“Ýé0)¥ü_ Üìe*:Ç.Y²ÄæêÙ³g™æÕÄ:6nܸÍyuNMM-1åŠ+lˆ>‡èœV£F�ÓÄûK}Î|ýõ×mC>ûì3‹Új}£Ùc�=lÈ A®›Þ X §|ûí·6ÙÓO?mQƒ²=è ƒlÈ™gži±S§Nã«Xƒõ}P2ÁÇL|mQE·6þ>V´ËG@@@@Ê$ß DeÚT&F�ÄX³f�møèÑ£-Þwß}•�2`À«+›F™€ŠÊŒxøá‡SZ¥LeìØ±6½òXË4c N¬+ẆYZó46œkæZBíÚµ­¢¬Ÿ¿þúËêÊ¡+mù±9\Û;nÜ8kÞùçŸh¤2XÛ·ooCüñ@|â‰'¬þÜsÏYÔX«”(Êóõç±êê·ÄJLx©\¡ÀË8ª„>rô·Y\\æ-^¼Ø¦Tküf³VÄqåTί²3fÍšuÀX]9­Ê¿?~¼ yê©§,*#;0qŒW¢u\)Ó𫯾²íÕßõ|Øö}öÙÇê 6 ‰ýŠöì9çœcMýã�?,vïÞÝ¢r3?úÈ=Æ[9Îz7|öÙgmÈ~ûígÑ_”ë;?üÃC×ÿüóO›@¹QG}´Õ#¹k$ôº*b¬2+ƒ—¯á¡ß+ýsiÊð§÷ÏkuíÙ .¸À¦\reÁ뼡\iýíÜ|óÍ6Í]wÝeñÒK/ ±!z7<ãŒ3lš^xÁ¢ÎQ:w)ËOGé�wÞic_|ñE‹e=&m–*)k×®µõúÏ'á7C�ºÏ#ô\:º”‰zÊX»À}lO:{bÕ·ë“y® 7}êâõ\¬œ¢;'ô©¦|Ù¬Ÿ|ò‰5UG¡ÛܤI›@ïqþ)•¿©¬Øyó„>ŸüïÿóOV¢®ÜØ#�<²ÄðØy©o…:oŒ3&Ð0ÝÉÑ«W/¢óØ3Ïe•–Ï¥œ/e‡ýë_ÿ²éõÉÊß;¼ÞÕküÿýßÿÙ4ês?ö{”VÏÎz€5»LEó–i–¸›øš)®ÉŠJ6üR—<—t†ûxžÔ¡™‹5k¸8¥‹Ïíâu?¹XZéëu�ËÁn|Ï6.¦¸Û«’~_ìâ_¸ø€K»ÿG¹Ó~ž×¥pso ÿÃ/Ô'²>o7S³ºoÃ?V½‹ª—R�½§OŸnè½Cq³g϶!z…zIÖ'^Mé_Z¬Õu׎Î'ê)uäÈ‘ÖÈŽ;ZÔ½Ú.} Ò§wÝ2yòd›¦N�:%6ê·ß~³!ÊcÕyOù°êÓVgû—_~Ù¦Q>þÉ'Ÿluõ^û9žú¦¦oÊþühÕu<è½@GŽ†è³“r]ý=°ëNÝåP‚1ÄËvØÁÆÆWÜd³†Ø¡ŒB@@@@¶-@6ë¶�˜âT@y"W_}µµ_O3Wßaþ«jÚ4õ¶sã�7ÚK]{¼âŠ+¬®<¯àë–šËu½W9ê3ëÊ+¯´ ô|yÿ”±_×Ëà¾eß~ûí�×ó5�<õ$Mÿ•Oÿìº~«Êt4ø™ÝzŠ¥?{Å¿„ª­wÜqÖ€E‹YTNMðiå|éš¹òRÕ7«Ž��vÚ©Ä&¬_¿>0Dù8iii�!ñ^Q¦ÃÔ©SKlˆò�J ¼T>…žÊ-Oõu˜ DE½%ª.T^^lf;¥§»„^}ÃÒgT Q«‚¿a/¿j‡¨Z}òTO¬ÁÏ?Ðçy6«Þ¿æÎ�k�î¡õÑG lÔÝwßmu_·²:ñÄm¸z{×9Sù­Ã† Ì›íwÿg!}CÔù_{_ßæt–Vƽ¿çqÿQѺukÛÌàoL¡·=ïê#›5ô>e, € € € € ° ²Y·Ähˆwõ¶sñÅosCvÞyçÀ4ºö«\ÅÒž ˜Ø*O>ù¤E=ÇYW)c3WÎßæÒêê}I}2êú¤úœU~MðU_õ¹¦|aeß(+Jys¡ŸIª6È-¸=zþµže<¶j‡(eÔ¨QÛl†r0Õ«zÞÔ3[Cg³ê àñÞsŸGYÞʤÓp= Wymþ¾’5VÙrVf´ÿz¸2,”=¡£T¹«þ\lýËPWµ´XV­ˆãJ‰ÊdÔ^'ËÞŸ¹àß�±V�îqåß:WÁ=!*›U9øþéc¹®ì9e†n§þ:>Ø¥l)›US¡ç*mìüùóm”úCW~ôÙg{éd¥ÍcÃÕf5J=úéï"ø]I½×)û¾OŸ>�í�§rÍtÖÒ(õL§sš?··|OŸ¬®J*:ZÂYµúcÕ”:ÿ÷Q«¿;ÿ]z-mùÊiÕØÐYÆ¥-!~‡Ë*8ÛÚ‘ÿ.™à-ÕÙ,vÞ_úÕµq“¯¡ý3Ü‹#¼�ç³ÜíCIƒ¼DçŸ6¸ºÊ ÍÝ¿Ïy§–ú¹ú„ÿ¹8q¹‹*·æþ­_ÏŽ\× >wu•YîßÏtñ‚]|y†‹_¬uQå…éîß»rQ}ºZ4Šö îŠÓ>Õ™DûQŸ�5\ç}×¾Ógõ€|O˜>�‡þîïw[[ãïs\½ik]þû«” ë¿ÛOm ~ê@4„¢¿ ÿYº´¥ë{œ¾ê ¯w46«>…*7_Ë Ýçòá‡n“é{¢rö‡jCbço0XCùªŠ:2uVÑ÷D½:ü÷øßïüG…ÞCãåf°FøCÈf ߊ)@@@@@�­�ͺ!€@b è*œò&Ôß_8½ï©×Hõ媌Î3Î8Ãý¹ñåé¿Ò¨+äj¿®™û¯Uú·K9_Ê,Ópõî¤èŸ21ë~]ývðg�¨÷¢àiâwˆò¶üºz¯Åþúë/œ‹¼œxâÏáÕ»aù¶B9;Z¿ÿýo[H|õ°æÿûÒ‘¦w@ÿpÉèL¥óLðØà­Vî�²ÆtŽ*Ÿp|ÍåφS–}p”ÎẟC=*�Lw·o¯–£áÁ­ÁÓÇÎm»rÃi•þ*ýïezÔ�¥-áË/¿,m” ?âˆ#,ߥb– õº—Cê_Åg^>é 'ܰÙ^÷õs¼žRýÓ¼´Ä½º|¶‹};»8ÀëkUÙ¬ík»!»tpQýº^D2Å�ì“^þÚÅópñª=]<ÆuLýwY²ÎU¾\àâm\ŒVQ�‹/¶j_èl£ìT}ÔçEÿßQimÐ'¢=öØÃ&hÖ¬ÙV'ÓßתU«¶:VŸHgÍšec•שþIõy·þLse/ªåZ ž2_Ú'“­®´Ä@ÝeØ®]»Ã+祾êü£5Kj¬>-ìºë®6Yèo=ê VKÓ߯üý’•³ue]‹ö¯îêÐ;—îtÔ>ÒñàÏQõôŸµÊºÞø�žlÖøÝw´@@@@bB€lÖ˜Ø 4bA@9þÌ�6mB]°V�2tÔ ¤2w”ë俎 [ mЕsµD¹*ªÿø£{¬¬25:wöRb¡¹QjƒòÝüÙ—¥]ëögOë žÊCQ߈ºV¬žs{öìi­«~¯á�+ókŸ}ö±‰UWö„ž‡®gã†þË g-±?MøÇ•z�Ô•–ûÛ[™-”­òS‚ÏHêGXçÿììlk˜¿'»ÊlgÅ­Ë®ÖÙ¦¬ëÒû騱cmÆvØÁ¢òªÊºœê7½Ž.õ´¨^§«ß6–¶Eþ¾S9ä›,øþÝåpå•WÚØ3Ït�e^ýõÕû¡r]í¥}ÊšUýýhk”?Xû1t/«ú†è¿oRŸ"b9›UgZÝ£©ÏEÚvÿ“]`Je—ëåùçŸo¹&HØŠî˜Q¦O|õ%ù.ó¿ªÃÒ–yÊ)§Ø(åO=ôÐCV_ºt©Å1cÆXÔ™ê¹çž³ú³Ï>kñù矷¨»¬¥mÛ¶ÖNŸhp…6r±×ói$«Ø®ñ–¹ÿp§ð¿Ëê¼Í5û¤ò—�©kÜ”¹ù.6Ép1¸,òúŠ É�è~âUŸªzÿRÛ|RîþO•ÊÿóÏ?mQºŸC¯þoIÁ}³údžnCÕŽUί²JõÉJßìn¹åk˜¾³èÓ¸¿çYµÙ¤?Ó¼´-Òg*½«ÊYë-múX>}útk†òvý½�/Z´È†wíÚÕ¢>Un¿ýö��Q R!›5Av4›‰ € € € €%òšNE­”å"€±% ¼’ûï¿?ЬóÎ;/P®,Y²Ä^qÅÕ·ÚÈ‘#­ž˜™_Á>ÁC”O§ÞÁ‚{Õå…)§uï½÷®6žþÞ�”ÕÕ²eË`"¢ëÀ‡v˜Õ%püñÇ[]:ºVüÑGÙ�‹.ºÈ¢ž¯>m‡ bC(‰#þq¥,0É(Oó˜cޱ—óæÍ³xÜqÇYTþ‹2[ï»ï>rÙe—Y¼ãŽ;,&Ú™M2z¶²?£Ç(¥}ûöVWvžúk«ÙšŸ|ò‰m—ž(­>Uwß}÷ÀV‡SQfÐÃ?˜Xç´À˯è�NYÒÁ=“úq”Y¬l©pò¤üóÆZ]ŸšÔW¯ÚVZ¿¢«¿»Ûn»Í^ª÷v“ °!}ûöµ¨ç³k™ƒ ²!”øXA–h¯4·Ý훺¸i“‹ŸÎwQeê ÷oa±‹Íë»ØßËTý,h�WuscS¼_Gj%»únõ\üz½‹*‘gÝn^REý»b…Û`õjzà�†X�>™û{ÕÄʰÖ'sÝ— ~cu×ËüùW¸êIVsé›T<ö©Oæ�=öX «Q£FÙ}*íž•åË—æ ÿ.+ÿ÷ í¯ÀBb°¢üe}Ñ1£÷#eL«'hÝ�çÏŒŽßã!Z»€lÖhI²@@@@HP²YtdzÙ àГj'Nœh{õêeQÙ^þiTWvÉ­·Þj/•ñ¤¹t­/xúê4DOF.-·«´-Õuoõà³çž{Úd¥eÆí´ÓN6öÃ?´¨çwìØ±´ÅÆÅp!×\sM µ^xa \Qfô[o½e£‚•ÔkíÉ'Ÿlc•Á:pà@«_|ñÅÕŸf<‡6l°ö+KÂ*�¢~�/·YÑ‘©ëêÁkiúû î]+xúXRÖãÊŸ+¡ãç©§ž² <餓,úóéþõ¯Ù�Áƒ[¼ë®»,*QϪ¶—qTÊw\ù{gÛc�=Blo›6mlìo¿ýfqæÌ™•ïb–•ŸŸo-Tß—jêèÑ£­RÖg=+ÃW÷%èÈÑóˆc|óÃlžruƒÏWÒ ½e�)›U§W®Ð§Ÿ~j“qÄËúþzù•9VÙÍʦ×ÝÊ•.­ Ê~:t¨M ‡>øÀê_~ù¥Å»ï¾;0£²íÔ—´¿gÀÀ1XÑÝe}�Ó†([PŸbpÓª¤Icös«­SÛÅi3\ü ÛE••Ý¿o}ïâ1}\|ÈÝ‘tÝ$W¸ I'õtqè>.*�ÕÕ,gÓ[¦ê•õ¾\PP`+Õ9Çÿ·¯O2ë¿‹BÃçÌ™csEÒOqðgo­]ŸQõ)]u¿‰ÎŠñxdöéã 9«ÿÙiÓ¦Ù�µô‰QŸ´ƒóUƒ?«ûMJ«ëœ¦±5kÆzÖ£úô÷o‹Ž´îÝ»ÛÀo¿ýÖ¢îÒKMM L¦ãÁ?Dýùê올LõìÏ¡.Óì•ùä“Fqúé§ãØe*§U¹ÒÿýïmxÈÅÔz¹®®¶¹´ð–°ùUEý«Ïrú&¢;œJ[“¾ƒ(ûõ÷ß·ÉtçÙn»íVbeOk¬>g*?ülJ}žW&£Þ%u׈ÎZ:_Åã§ÐsÎ9Ǭ…¦œV}^Ò¹Kw=j_øûiõNîå¶Ä.¼\°`A î_Z``\TôícáÂ…ÖÚ}öq©àú¾£ü_iø¿Ái«C6 ½áúÄûgxmÙ¬¡÷&c@@@@@�m�ͺ F#€@uP¶ˆúSÏ2Êá*-GW}¯ºêªˆzñ»âŠ+Cü•¹sç^~óÍ7V×Ó*5Pýu––ù˜1¦*þkæþ†½ùæ›ö28SýéJ¯zðñÏUZ]9‰«W¯¶ ”_æ¿ZÚ\±6üÞ{ïµ&�7Îâ`qäÈ‘Ql¤2›Ôw¤®'+†îM2Š ˆâ¢”sÜ�Ø_|ak ?Ï¢]»v6½2Å‚ûIÔrü½˜Eq*mQå;®ü¶Ê€Ý`Ÿ‰Êº =}lŽ-ëq¥¬eª‡îp¶KvÊÚÐáã1›Uwi¨Lå"éÜU¾Д½(=ÿ±ŽgìOÓ¡Ck¤z÷·VýóªïQÿpe�}õÕW6P÷gÏëŸ^ç1*kLkôO/uåüúsçüqk|p¯Žþ-z饗ì¥2X•M¦¿2ÿ4’T/ùú„ û�n¸á›ìé§Ÿ¶ü™Ä¿„ª­Wt.ª¶]9e±ìàß eÍí]×Í}ÿ Õ›êÃ^¾ê›+Ü�àò‡ëæ4iowp%�ØÜÅÞ-]\™ëâ˺ØÈË`ý×®¾ÖËc�á:¬þGiY®¬Û,"ŒúŒ·ï¾ûÚ´ú<ãïÍÓ¿5¥Î‹/¶éu¿Nð'gÍ¥÷t�—4¯2C7Jï�z�ëׯŸM¬ÏTï½÷žÕµ4­Q}t†^Zì�Õ�O:«èýýÁ´f?ôÐCG�Ø„F�êþ~ðKT´§tÿ™FÅo6«ú×ç%}Ÿýä“Ol£$¦óOß¾}:ó‡>ÿ&®²Y«ÁNd@@@@@ *j(ßJWË×�xÏ )ßV3D"œkVÖ¥EræÑ5a=CY½gª§Ë_|Ñš|XmS/ZêY¬¬­ ž^9/þ>}‚§‰�!ºú/9euS_BÚºòeoù×øÚk¯ÙËc�=Öb‹-,ê9ÑÁOnõÏU¾ºž?a›ý‰'ž°xÆg”oQU2—Ž+­ºú]ÊÅÖ¹.##Ò˜HŽ+å|)ŸZy^§�vZˆ=®³“ÿÙ²Êý�ä¬buQÉqU¾s]ùæ*߆ëýK½à?õ¸¬Ëœ1c†Í²ß~ûYT&”úž+_Ÿãj›žö®lÝ)²Ë.»”µa18}$Ç•Îê?17-Ð$e«)»*’s²>/�x≶då»ée‡…^òàÁƒm®çŸÞ¢ŽOQ�F–¨,Z´È†øsöãëóU‰Í©–/uï—z•U?ž¥mæ®�º1ß¹¤ÌRKÓd7êã!.voíâ§¿¹¨LUW+o¹¬‹›óΓ\üq®‹;»Äè”ÏÎt/÷hó��1òBgàðï §Ùz÷×¹KçÀà=X™ï€þ6ë¸Òç+åNúÇF«þÎ;ïØ¢ôžØ»wo«ûïØøé§ŸlˆîQÐXÝ¿XÚ^Ð9Öß7·r`ýY±ÑjyE,GïeÚ:�ÉK;´öÐgûŠhaäËÔ6úßñ˺Ì%K–Ø,d³–Õ�é@@@@@�Ð7ë?8x�Õ[@צxàÛL屪Oõ¶SZ«Lt>ü«[“&M²•';dˆ»ì®^Æ´´øŠñx5²ò…§N�j+Õó‘õ|X=¥½"òXõÄyåÉjK[·ö’:*³#X#ÇU8x‘W»îºk`EZZèlVÿbêY8^òXµ™‘Wå›·|svJ•TÔ«šÞ›”Ǫ綗/�U›  ¯sÊ诒 ŒúJ#Ù˱ŸÇ-.Ý¢žè•Ǫ÷Ä#FØ*Â1œ={v 1ÁyR�Q�ŠŽ1õ)¬ÈM£<Ö_½¶yÝ ‰¼œèK»ÿ×’Ëkžî†ô‹á�Z¥eP–Ü’²¼Vå¡ççï:ôby¬z°U ×­[gÖ°úÎÖ�Žßÿ½�ýóO×ÑoçÎ�5K‰øã�?†¨�æøê›5œ÷²ê}<vß6+d³n“ˆ @@@@@�Pd³†Òa .°f�»j÷Ì„‰Ï>ã8‹©uêÄ©‰®=*[çÊ+¯´­èÞ½»Å—_~Ùbðslãt3iv•¼ÿþû¶Þ�ZT.Ï»ï¾kõX §¨';=aYÏeö_?^‚úO\°À%rèÙñÕ£÷Ãà-Mä!‘WÒÛ}÷Ý­¢§»>öØcV¿êª«,––mñÙgŸiF‹{î¹g N¥z(×Fýf*ûF÷v\|ñÅn zŒõ/$=ÝKó¢^Mô.vÁØö=ûì³ ri‡zBwøýžëéê_ýµÍ«>C?™ZïƒÊcÕ}$mÚÄdÇ™¶=kÆ©@IDAT”m œà>˜']󱋛\ø»tJq•—]·½I;mçâL×%oÒ1î@KšSèbèrT7~ ·ü Ý­GI¹¾ÜêºÜLêÓÑÅEÙ.Þ»%éн´2¨‡‹5k¸H‰_��?v‡—òß{ôðvjÈ�™2eJ`¼îPôg ë=îœsαin¿ýv‹}ô‘ÅÒ>_©§W-PýP“û)�êÉf­~û”-B@@@@�J¨‚lÖ?gÿe›8ì’[ÂÜÐÎíÝ“šÇÝsM˜Ó3Ye <ü˜{è‹?)ÓJ²‡MÑù¡žt\¦–˜ø…W\Ÿ˜ãžr9˜e-Çk³sÔ�e�1Ìé?žú•MyÃO†9½&«ª¿‚ºuS­S>ûÁbÏ®—™½÷ì£&ÅQT/–7ß|³µùÚk¯µØ¥K‹zrwEô›G845B�7ÞxÖ ;0–J¼ üöÛo¶ Çë>çèîcÆŒ±ºÎ<þ �òmip6«² Ë·4æŠ=ï{ذaÖàW^yÅâqǹûŸyä‹z¸UÂ,'œp‚MyÛm·Y¼ôÒK-n·�K_ìׯŸEY½zµ½¼á†õ¾ÉQ‰»Êö�\“Ïèåâ^>iw÷E$éÕS]ܾ¥‹7ºø× 8ÜÅ”R~ϸÿS7ö¥%.Ž<ÀÅ~î«LÒÁ=]üÝÞ¼¾«wñ–œ›çêÿzÕÅE.ªÔ«íþÑÿï—ü§+W®´–ŸtÒIóóó-êóóQGeu=�Ã*VòòÜ¡ðÜsÏYÔ÷G74)éä“OV¥DÔÙOOþPÏÔ;í´“M£³–žê¡o�º«RŸíõ^\bQ¼¬6d³V›]Ɇ € € € € €@Õ”rõ§âS+9ÙVòÜ#î*ziå«ï~²QoNšZÚ 2|Ñâe¶¥§žë²ðÂ/Gè®ú^6|Hø³”cÊÁ'¸Ëˆ�ô.†=j�”°§-ÿ„‡îçò.Ï:ý‹Ó>wÏþûú»_,^6ütGÞiñ¼³]^OçNî:ù�îêÖ ão ¬h}n®ÕÏî†Ü}ÓÅ[6o«JÍ䪹"R«–;Eyˆë›ïõ·?¶_Ù¬º~8zôhk¹2#¬b¥]»vÇŽkQ×6•a/·ZÆ�oÃãñIî[ÝFE@×¥ý×¢ÕÛ¯²M'L˜`kÑÑ¥~�ƒWª 2=itèС6Áüùó-Þwß}Ÿzê)‹½z¹¤å\ûí·VŸ7ožEMy衇nÀ¿q/ÝãÊÏ¡cU½pŽ9ÒFuíÚÕ¢ò8t¶|õU—Æ£¾Æž~úi«sÞ3„jP~ýÕ=6ûˆ#ް8gΜÀ-]ºÔêg�u–Å+\zXaáÖ»9ÔyÆŸGXH â'U¶Ž>E& RÍ´ÇO=Õ¥úûÔÓ¨/¿ür®÷Áõë×ouÛ•ëª^ò5�ú×™PïŒê]ZY®ÊÓz'Ntw­Íš5Ë¢²É´Æ­®ˆ�q$0f€kìóîK[ÒA^G»Êcu¯­wTï+Ñ�;êU¨øš—›äe­ý¢›òÎ}\Ü­ƒ‹};¹¸b­‹þìâíS\œœí¢¿\¾»{Õ<Ý?Œzü 4jÔÈý /XÔ==§�æî¬ÍÊʲطo_‹©©©ÕC½Î]«o‚}úlýžNõĪOMºgHg­C9Ä–¶nÝ:‹Ó¦M³¨6hJîB3�j\¼U5Þ>6 @@@@¨`—ªV%¥†÷o“& C¬½~VFˆ±‰3ªq£¶±ãïU¦MV¯šeš¥gyûH±³Wè,uÓÜõ¨F �^jj¯î:àÑ�Zµ\>uýú™�!iÞ4ö²BKš×*E­(aA`��;º¼ÚºuÓC*§’»ÁõA³f�»Ú\:wlkgÏ]`qþ‚ŃŸ�ž‘Qφ׫ô–ÛJCågùóX5ñäÉ“CÌ©uç™îHûðÃmeȪçè3Ï<Ó†têÔ)ô¢[ Èf­;‘M@@@@@�ª¨²lÖªÜèx[wJŠ{Àaûv­ã­á1ÔÞÜÜ ÖšÌŒº1Ô¦ÍMÉÎαj–×6«21íÚ¼�­áB–o¿s�]÷ŸÇ·¹Ž©_z]%M7ââSlØAû» ©Ø)znòfÉÊn—z²«ªµWöÖ&Þúî½÷^ÛhÅhm½2qÔ3�b´–ÌrâE "Ž«àmW6«bðX†T?åã(VÜÖ <Ø®Xqkaɱ# \ÔŠûœÓ¢E ÛØÐ=ÇŽ-‰®ÀàÜò~v(Iºeš‹•YÚ» “^>ÁÅw$¥Z dfº”iåŸ*Fkóø -Éx_Ù¬ñ¾i? € € € €T±@•e³º.Rö;ê¼mtnï®dV\Qžã']á*^zòf[‚úýŒpQq7ûò«¬ÍÅÅ·Ùò:^fnƒî‰~•Yæ/\j«ëÑ­ce®4ĺ®¹ñ>;ík÷ä_ þ‹xÈ6ÁEçŸæŸ,êõ½÷tONüÈ‹Q_8 D@@Ê$pÓ~nòL÷ˆ�¤«]G—I›\¨ÀÒÇuTžôú Çâm�®aˆq²Yc|Ñ<@@@@ˆu�*Ëf­•ìº9yî‘1!„¾úÎ=õÍISCLù(=ƒþѱ##\TVfF„KˆßÙGßp¿5þ÷9îô¡Ë~{ö² F_unèÉ¢86wCž-íÓ/þgñ¸£ ,955Åê›6ºk¢EE.·zÝz×kå”K/<ÝV4ÜËé~îÅ·¬¾ÑkÉi'hÀ3Ï¿iõ¬¬ôÀ�ʬ¼ñ–wÉØ[åÑGìXõ3Þ°zóf�-¸Ÿ{®+@@ˆ®€N1ÂûÂÑ£‰[ö9îkSÒ’u.F«h-g»Ë'Ý{¨‹iUö‰[;â]€lÖx߃´@@@@ªX Ê®ÔÔð~àmÒ¤a€úY•‘ªg‘wìÐ6DKZ`Ü=ׄž JÆ®ÌαõÞ?î9‹ïß×b«–Í-9ô×çée£ÇZ,*r½Êot±WÏ.+º4¨¿¥wÚ%ËVÚêöéßÛ¢ÿ/¢¨¸È†dUÊ_�{W®Ê¶—?ùºÅ®>Ç?Êê=ºu²xÍ-�ZìÕ³›E›í%@@ˆ¢À‘ÞW´?†»EÞõ…‹wxqM¾«—¯ì=¶ã¶ÜÜ;mùšX¾…1 ð·Ù¬  € € € € €@DU–ÍQ«™�0/uY¢§ :Ìâî}½îv|sqè¾öJQƒoû¸o|eTÕë/3æÙÊN9ÁµÓ_V®Zc/+¿Ïßç_ždëݱ{‹»ìÜÓß$«÷îÕÃâ>»ïhñþG&X¼îêó-Ö¨¡~�¬JA@@¢,P¯¶[à¿÷vñJwkbÒGs\|c¦‹?-sqÑZÕk†{GRË ·«ïâ!^ëQÛ»z›L) €@tÈf�®'KC@@@@�„¨²lÖM®Ì$õYšúš5Q}ˆ`i«‰áá…Öº…‹––»�ii©6¯ž _î…luƼ|×ÎêÕÞå­N±­�õë» ‹©uêlkÂrŽŸùçB›sôÍ®ÑðËðmŸ8Â)W¬XeKÈÝà$[´hZbiËW¬¶!™õJ ¯¸—ß|÷³-üÕ·§Y|äîKKQ={ȱ6öÌ󝷸ɧ_[°·ëý–‚ € €T´@ª÷KÆa�Ýz+z�,G€lÖp”˜@@@@(U Ê²Y‹Š‹­Q'œqu©MÛ<¢sû›« ÷î™ïg_tS¹·üÐýúؼW^rV¹—PÚŒ3g¹Žp.uOilsøÝ7]lÓìÔ³ë6§,ßÚö³N?&ÌÙxäù0§,ßd‹»î‚N=÷Ú­Î~â™[ÿ[¸òÚÓ´Oo«�¸|X`H´*‹—¸¶Ýx‡ë�ö‚³ZìØ¡mˆ…7là:7ºpèñÇ>ü‚Åž;¸.Ž5ô:=²@@(·Àº<7ëZ/¹ú¦M.RâW@7K¦x?Ce¸ûn“Ò½¿[DË ›5ˆ„ € € € € €@Yª ›5%¥¶µp—;Y¼ýÆËC´öçé³lìÔi߆˜¦z�jéõ×ùÑćbp3•…›m°—Ëá-,t×<5l¦Þç ¶)k×®¨?ЦMÙò__þÜäÚºîæö”e²Ü\w•xŸ=zY<úˆœuÿ}w·)ÿ˜3ß↠Þuæ0çd2@@@ „@±÷—åkÜà<÷œ’êWþ\°Ð6ê…÷§ZyÆIk”ö@Œê·ñÊGÎ÷ö¬¢r–›dºmM& °úíòDÜ"ŽãDÜël3 € € € €DQ ÆÜ¹smqÍ›7/÷BëTØ“âËÝ$fD�ÈÏÏ�°…œy"dö€@nn®Õ•G�––N�H lv�ë222"Yó"ظÑåyåääXlÐ Üûu³SA „ÀÊ•+mlÆ -&Pn]FEC ;Û=k$3Óå*&''o{‘KÜù-)Ͻ‡V×¢§Ô ¿Ãݱzê!,{Ï­¹îÉWBlrV]ׇék·nýy!fŒ�Q©îŽç¤æá>çCÇ•>_ÕªUQw£Æ­Œž€>½oŠ è%K–XsÈf�Þ>aI € € € € ��üðŸ�»��F@@@ FÔGgy¬/èz;}ð�BlÐã#η±íZ–ÿ^Þ ßæ¨G_{Ǧùò×ß-ÎYêòÇxõ]‹ÇzOyé†+¬þþWßYümî‹ :Ú⬿\ýÁW&YŒnY³ÞÝÑ5pä­[]ì•'aÃÝc·­Ž�ò@õëc ÝåíRˆ_²YãwßÑr@@@@ˆ ²Ycb7Ð@@@T`m^„~Àn½m »uß¾Är&¼ÿ‰ Y»~ƒÅ¶-š•[™/ìëZدgW‹…EE¯{üE‹Ý;´³Ø(ËëÁ¶¦Ë„kÖ0+0¤^j«×Ks1º%7o‹ù=�a ϪW/°Š¬Œô@½’*:Èf­$nVSQd³V”,ËE@@@@� ›5Av4›‰ € € €@L ¸ìÎHJ}/ûRQËY°l¹U>ýy–Åñ#.°øãÌ?,Ž|ä¿_½é_ë¥mé ôög^²!M껬Ò:¶³xÕÃÏYüèÞ1UfÌýË*çßõ˜Å·þsµÅº©n 9ëÖ[||â{?ŸîÖØ£]+‹çëz8mÖ¨�EŸ°oOûÒ†tß®¥Å†™UÖmp¦™õên�TPèd”Ó•Š?›µk»¶¶ÌÚµªô¢ˆ��¨°°" ›5B@fG@@@@�D¨Ò‹‰ŽÏö#€ € € �ð›6E�`âÔ/l™‡÷ÝÉ¢òIy™ªõë¦Ù�ïg¸œÓ½vÞÑbAa¡Å)ÿ›añŽ N·¸ÞË*µÊ6KñÆ�6Íõ�¹¼×ž\Nè]�eñ«Ÿ³xËS®÷Õ».=ÇbÍ5,®X�cqÜÄ,æµmøÝ�Xý‰Q[\–íÆöì¸�E•¯׺uR6HºüžG­þßóCÊZ¹iè ›%Ýs¨áµêâ»ÆÙ�ìu¹ë×ËâIík±Ró[+à°M  PÉd³V28«C@@@@�ê&@6kuÛ£l € € € +�›—oÛþÖ?Z{Ñ™‡ZÉÉV¸ç®?þîg‹ÊfýmŽëq5=µŽÅ.Ûµ±øÃŒß-†S~�=×&›µp™ÅÿoˆE­eÿÝz[ý¡7?²¸|Õj‹i©.#uô¸g,®Ë+°øâ'ßX¼íÜ“-*·ô·y ­~xÿ>U \¦mš/›õ’“޶!ÊÀý{¢2þÓ´�ë+v£—=zù‰‡Y½÷ö�-®ÍuÙ¬7=åú¨­çõ9{ì~{Y�‚á �;S"€ € € € €[ ›u+( B@@@�x˜½p‘5»°¸Øb»–-JlÂÞ½]¬�MúÄâêµë,~û›ë§õ�ÝÜðäšeËE[¼b•Í•›ï²S�¸ê&‹ÁEY¢w?ÿš�ªŸ^70Aç–M¬þÊ”Ï-nßÎeÑþµ<Ûb›fn¸J¾×olZ—i«Ò¦YÓÍÕ(ü{Xÿ¾�¥4Ojhõ£ú»lßi?¹¾eÉf àPA L�²�AÂ\(“!€ € € € €‰#@6kâìk¶@@@�j.0{ÁbÛ®­›[L©]òG�VMÛð]:µµø�—ÇúñÓ­>jÈ UÔ¿ªêy^¦jª×;jaQÑæIþþ·QV¦Õ²ê¦Z|ùæKˇ=¤ß.6¶O÷.�õ‹¸ÅK—[üêg—=ºSûV³ÒÓ-ªlÈwý̦թ½y@ÔþÕ¶Ô®UÒ§ÀÛÆô4·E(«Ù¬ecz@@@@@à%/\üc$/@@@@� ¨QÃ-~Ó¦¨¬dYvŽ-§i—gZZ9l×éC¯½gq“ý—”Ôe;×;ªJË&�6W“Þýâ«·kÑÌâ}/¿®JÏNí­ÒÌ[×ø7&Yý°=v³XPThqþ—©ºÏ.;YàE«JÝT×ãê�ý\K.¼ã!‹'¸W`¬*s/³JËÆ®×Ôh•MžóÕ>i Ü­{g‹½»v²¸zíz‹/OùÊâ%'¸L[•‡^~Ó*-¼6 Ðßês-±xßKnøè3O²¨Þc¯y䫟~è~wðd¬nÑ1îÔL‡@Œ �Í£;†f!€ € € € €@¼�Í/{Šv"€ € € PR¼Ÿ&ò]häeÕšµ¶�̺uC,j·]mìí&Zp[7qšÛ¢Ô·-ç <Èâž;÷´¨²6wƒUêç¹^bUÔëšõnxQq±Åâ�-jʼÂMV¶¨c ló051'@6kÌí„ € € € €ñ%PcîܹÖâæÍÝ3øÊWêÔqý‰P@�ðò½'f†?}ð”œy‚MR>�ÜÜ\›QWõÓÒÒÊ·æB „@A�Ëãй.##£ÄX^"P>��^®PNŽës°A—iEA Z+W®´E5lèúÔ{b´–ÌrY ;;Û6?3Óõ‘šœœŠb]ž»Âe¡VNÙà}9aôí¶º;/bq{_݆߬ƒ/»ÞVqãÐA}ã}‹×;Ùbï3Ãñ£ÿcõÜ|÷Y¢[÷[Í­çŸa1£^¨ü\› ¾KcïóRzê6·BÇ•>_ÕªÅ-ÚÛc‚°ôé]=‡5CÐDK–,±ad³Á0@@@@(‹?ü—E‹i@@@@ ºÊaTNk^tzh-­�s.¶Q“¿úÞb¿n,Vf«ZõÊ�WY%-ÕÝüàö�-Öòeû¾uûh¢¬º„È.Ou}Â&…‘Çê&£ Ûd³Æöþ¡u € € € € ód³Æü.¢� € € €T{�&®פåk\¬€œÖu¹lÁW=ø”Å.­]Ÿ§—>Æbå—ôºÛ~@å±j¿Wþn`�T€Ù¬€Ê"@@@@@ ‘ÈfM¤½Í¶"€ € € ›É^Xóú®uê§umž«¹¸i“‹å�¾tÓˆ–Á¬Ô¨áfNñ~†ÊHuuúcu ”j%@6kµÚ�l  € € € €T¾Ù¬•oÎ@@@@ tå9’íXºc@ Èf�Á�B“@@@@@ žø™5žömE@@@@�àgÖÜ)4 @@@@âI€¾YãioÑV@@@ª¿Àº<·�k½XPäê›6¹H‰_�5\ÛS¼Ÿ¡2R]�¾w�¥Z �ÍZ­v'ƒ € € € €•/@6k図F@@@ø§@ñF÷zùó ]ŒRyaòÇ�% :hß@½´JA¡[û臟¶xÍÙ'[L¯›VbâW?úÔ†¬Ïsù¶§v`‰±¼ÜŠ€ò‘ó½=«¨œå&™nâd²·bÆ ¸à8Ž»]Fƒ@@@@@ ¶Èf�­ýAk@@@HD�åkÝVG5�UŒëóòËä¹q£ëöÛßçY,Þèrl7z™˜£zÒê—ŸrœÅÂâb‹\¤”S@ûZùËÍë—s!̆@, �ÍK{ƒ¶ € € € € €@ �͇;�&#€ € € PmÔGg^A¹7(¿Àõø¹fýú­.aÝ׃ªÊòìÕ›«ÿø7£^]{�š’ò�¡ÿ|ñåŒ96 °¨(0¸ØëOöÇ™Ø�™óæ[:âB’•^òþÅ Þwü�·wßýO»ñ^‹ãÿužÅ”Úµ-ªœ{Ç#V©S+ÙâQ»÷²xä^ý,^?þy‹µ’ÝpJ™">ʼFf@ Èf­T‰ € € € €‰$P«27¶c{×§ús¬á¥/feºþLz}šä¬qý˜(ãráâåVoØ ÓbËæM,ªTD_™á·*½žË õµ¼QC—‡Ø ¾kmtKømËóžÉ¨ªÛŒ$×�íü…®¿˜ ^Öpt³YÃi›²€³W»~x;yùËjƒ†/^²Â†¯ôú¾iìÚ˨”–ÍÛrµ@9‹¼ã*/Ëó+—zYÀÍš4´ÉÔ»®âÒå.V½Ü¶hæzt­¸²÷ž}lá=wèbñ¥‰®/ÔX({õw­êÛg'‹u¼ü_µjŸ=ÜÕÚša‘lV™@@@ "ïY#-!hæñß³aÇìí¾×nÉ–íÞ®µ yòÍÉ/ìîÛó—´:îÙ!�²¶ÜnYPäæý¿;]«Ê gŸh•ùKÜwíõÞ�¸ê­µUÐófþž�¨€c œÕ2 Ñ ›5ºž, @@@@N R³Y“ƒú(Q?­z.¼¿¯“\ïÉ}©Þu¤Ÿ¦ÿa»%ßË@lÔÈå�¶kÛÒbÍ(uç~«üGGî÷$ÄU^_¨½zº<ÄŠ(á·M=�ª·Se‰Öóro‹¼«võ³2¢Þ¼pÚ¶É»¥˜\sËõ@å2+÷vƒ'i½âD½…Z¯zeÝÜ«o±­ÅŸ9«ýܯnZª»†©±QoX\,P^þj±C«ç/u÷àªä¬[o•Þó?6ã_HD²Yq¯³Í € € € € E�JÍf n÷Òe«l`rM÷k¯¿oÓïsŠ]:¹ç¿ë)ç3~Ÿguõ–ÒÂëÓ^F½”Ö*ÿŠô,{õø©ÌGÿØŠ«—Ö6µ!55ÅV½h©ë󴠠Тò4kyÏ@¬¸ViÉÁmS?¼ÊZ•XZZªM¬ŒÈµër­®!Ñ6-ú w SEýü¦z™ªêø¥¸x£�R;7OåþMNvÇd‘× �x"×,\b›?峟,>2vD"S°í € € ƒ?ÿá¾ý]ÿÄKo6Øb=憎©™õêÙËQ§kñß�=oñ†a'YܵÛÖsZ_˜<ÅÆ¶kê~¾ÕëÜ“fšÔ�þ=š¶X đ٬q´³h* € € € €Ä¢@•e³®õú.™¿p©©´ßÎõµªüA!Õ®íÖ¤q}‹ÊÕð¬Ìt«¬^ã®UD6kèV© ŠkÖ¸¾WÔÿðŠ«‡nÛÌ?\žoV†óÙ®Ms‹ê7öϹ ­^·®Ë!mÖ¤¡ÅŠ(¡ÛÖ¹ƒËGþsî‹?MÿÝbýL×Wl]ïºb�”ÚV¯ˆ¢#g·Þ=láë½Þ~ÿœãÚ ^GÛ¶vJÊóݸÑå´ú‹²\uú‡'f]û÷?cŸ´Í?ù¸ý-¶o×&1)Øj@@ˆA�i?ül­óô+wð~a¸ì�§·ÚÎg?ø<0¼g;÷[ÄÈqÿµxÅ #,öìÔÞâÄ©_XTY²jµUÞ}×Ͷòoc/�µ^ªûÞMA�D ›5‘÷>ÛŽ € € € €Q¨‚lVeÆý6Ëe_¶ôúWmô<>e_®Yëúîlé’ÿ.zv¼úiÝ<,:ÿ†Ó*­ImÐ3èÕþè´ ô¥„n›21׬uÙµ­Z4µXÃK×lÔÐõ ³2;Çböêµ+"›5tÛl¥VÔcl�®ôÒ¢ÚüÝ�3¬®ž[£¢RÙèu¼ZÓsP–´2[ÕÿovŽÓP6«ú´ÕÞô¯zC^¾½¬ÌleÿÚc§¾f­Ë=æ~‹mZ¹£kÈ)c§y´@@ªƒ€n9Ô4ʵ=;xY¨wžºÍÝ©m+‹9Þ´ZØ “? ,uÐAûêY鮟ֹ‹ÜS(Z5mlñ½/¾µ8{Ñ2‹÷_r¶Åî¶³¨ï˜V ”ݺ»¾\ ‹‹-viÛÚâ¤Ï¿¶øÒn]'°e-ö’²mÛžŽ)ˆi²Ycz÷Ð8@@@@ˆ}�JÍfÕ“ß�9×\2ÒëZ¬Ÿåúè\·~ƒÅ¤¤Möz=7\Y¢¿ü6ÛêêcT½dæx½²¶oëúO‰V ¿UZc~A¡U”ÓšRaýŠj]á·­^Ý4›eñÒåk×J¶Xìõ7ª,×ÍÜu¹è–ðÛ¶xÉ [µzAMM­cõÅKÝ�:uR,ê°JË/¿þiKËÊtW&•ÁZàíµU^n¯ò|µ:eøÎ[à®^ª%êÅUÓ7nT±OŠÜ¸ÑóË–¯´˜“³FM²¸bE¶ÅL¯§ÝfÞ5ÕÊ¿°·Æû[5æ>×6¯'â‹Ï;Ùê :+•æÍšX¥¢ÿ 6¯�@@@ š ¤x?Mä»ïÚå+õ½oOŠZBZ÷ÝS%£žû¾¬Ò¼QÉg–tkïòUUŽÜ{w«ïå¢ÖØ<ÐþÕ½’u½ï°Ë³]o­[où]bý†<²ÀûžÛ¨¾û•ƒRfež�ˆ-²YckÐ@@@@ˆ;�JÍfÕsÞÕ/§òRþõ�Yr²ËÁÜ­ww‹ÊÍìÔÁõo2oÁb‹zò»²2õåj”»„ß*­¢°°(°®Z^›/£^ ¿m]»¸ëosæ-²8}¦Ë–gÓÆ ¬^}Ȇ߶Ú^ÎïB¯w›‚Bw}R}žvß¾½Õ+¢èÈ™¿p©-|ÖŸV¡^€Õ+«6ñ|òò SÖ®åþ(ºuigQu«TPÉËs×g‹@@@@@ ªüÌUN† € € € €‰'ÀϬ‰·ÏÙb@@@@ˆª?³F•“…!€ € € € €@â ð3kâís¶@@@@¢*ÀϬQåda € € € € �xüÌšxûœ-F@@@@�¨ ð3kT9Y € € € €$ž?³&Þ>g‹@@@@@ ªüÌUN† € € € €‰'ÀϬ‰·ÏÙb@@@@ˆª?³F•“…!€ € € € €@â ð3kâís¶@@@@¢*ÀϬQåda € € € € �xüÌšxûœ-F@@@@�¨ ð3kT9Y € € € €$ž?³&Þ>g‹@@@@@ ªüÌUN† € € € €‰'P«j7¹¸x£5`ÒûS-NþðK‹K–¯²¸ÿÞ»X<ýä�ÓRëX¬Úò®×ÂÿÜ7ÁšñèØ‘;vh[…M~Å-¶öé³þ*цƒöémCF\>¬ÄðÊ|YTTd«{ùõ÷,Nzÿ ‹uë¦Z<öˆ}-°_‹5jX¨Ô¢ö<øøë!Öúøý£ml»¶­BLS£þš¿ÈûÐø-Îø}¾Åþ»í`qØ™Ç[ÌḚ̂XUåû§ÛªyòU‹……nÏž8ð‹¸—E  € € € €€ÈfåH@@@@@"¨âlÖ [ó?™ö�Å¡CޱX»–kÒí÷>m1ÕËcâå´ÚË*)Ù«sl½=þZ•¬½´•®\½ÆF]ú'ZÜ©çö�ÉRëÔ Ô«ªòäs.ctî<—¡9ꊳ-æZœ1s¶Å�]þrrreÿ¾À€Ým½»íÒÓ¢¿Lxy’½\»v½Å¶­[úGUB]£nxÀÖ5ð°½-?w°Åç^xÛâϸ£î’ N·XùeÑ⥶Ò×?dñÖkϳ˜™‘nñ¶±OZLO¯k±ÿî.뜂 € € € PÙ¿v!Ž € € € €T3�*ÎfÝÎëó?7\n¬þþ:÷ì·£ Y¼xy•s?ý߉ֆ}öèeñ­÷]ï±U[6mrë_±r­ÅNÛZlÛ¦²s0] ¶VV®Zmƒ'¼ú‘ÅçÇßh±Iã†� {öè¨W~¥~ýL[©¢Ö¾`á«|úåÏÇßçze­Y³²»ŒÍËË·õ.Zšmq�~;[lѼ©Å}÷ÙÍâϾa±ªÊ·?L·UwëÜÚbï^=Í8Ú˺}ñµ÷mÙ¬* € € € �àd³&øÀæ#€ € € € €@¤UœÍªæ+�uùŠUöR9†ïò­Õ/¿àäH·/‚ù§ÿö»Íýѧß[|讑c!›5?ßå?[ûàsW¬tý´öÛµ»Å³‡k±aƒú+¿,\äzóL¯ëú‡ýàã/,N|wšÅ–Í\NëùÃYìØÞeàÆB™øÎÇÖŒÃìg±YÓÆUÒ¤ºuÓ\èkñ‘'^¶xæ©-~þå�ðrZ­R%¥ÐëQWý#ûйS;{yÏ8×Úbï8LNNöO@@@@H@²Yp§³É € € € € M�˜ÈfÕ :kT`Ëöß«—ÕwêÙ50¤2+……E¶ºûÆ=oñ¡Ç[lØ «2b]µk×¶±W^èžGßµK‹©©){ê‹wÝ÷´Å¯¹Èbå—Õ«]^íÚõyk×rŽ÷Þz¥ÅO¦}mñº[ÆY|ü�ë-Ö®]•^î×·&»|Û±7_j±jKÿÝÝÑ>ö!w¼�{é-k×r>O�sVUUºwëd«÷Ô›gý1×bz=—{ûØS¯Z,Þ¸Ñâúõ,ff¦[¤ € € € €‰,@6k"ï}¶@@@@¢ P•I…%šÿÞ+÷Ù�UÙ«->3ÁåÐÝpÛÃÇŒn±2ˤɟØêŠŠ\ÿ§Ê¨]¹ÊµJ%;ÇålêñÁ=Wnžª¢þMNv¿ŒzÐÞ%VpüÑÙ� ®ºÃâú\—cXÏë÷³Ädú2++ÖŸ•Q×âq¶XÃëvwß}\ߣ>ñ†Å%K—[lÓº…Ū*³çÌ·UºýÛn»ÖUÕ [ï¬ßçXüÏØg,Žà‹{fÂD«_}½û‹¸÷?#,Öò²ƒ­Ri¥Ûöm]—žw‚Å1·=b±�·wÝÙå˜OŸ9Ïbzz=‹@@@@²Y9@@@@@�ˆª8›µ¸Øõð¨ Mõשg¾¼ÿ6üâ«ÇZÜ�—o1-µŽÅÊ)'}j+šý×R‹' ]b¥W]û€ ¹îª³,î½gŸc+úeQ‘ë769Ùí8/UôïzÃkyÏ|WϞݒàå·jÙÌ®Yçri.rz­[5·¨¾n­b¥–×ë¨êUgÏùËVݵ“ËcMIq}ÝVUùyú,[u�ní,ÖÏÊ 4cб‡Z}ÐÙ®·båÿJ20A¥U=h[—¢VúÞû×.×µfÍHD@@@\€lÖ?Ø|@@@@ˆT Š³Y_~í]Û‚…‹—Y<ø€þkÖt¿üNœ4ÅbŸ^],Vf«­ÎÊc÷_çý»%¨'ÖÃN¼Ä=:v¤ÅŽÚn]‰µç_~ÇÖ¶ly¶ÅC<±ZµÝN|ê¿®7ÏcßÓbUeh6nÔÀÖ~Ä�®'ÖW'~`ñø�®ÇØ÷?þÜâNÝÛ[T¶²Uª°,[áôš6©_…mЪ·ïÒÁ*ãžr=óÝÏÛµmeñO¬iã,«7iÜÐbå—ìÕ9¶ÒÉ|f±oŸ-ª‡â'&¼mõÑWœm‘‚ € € € ²Y9@@@@@�ˆª8›õ¨#ö·æ¿òú{ÿ’Å¥Ë\¦á^»ïdñ‚s[¤øŽ=ê@{ù’'vÿ£/X}Õêµ;`w‹ƒŽs}zVm9oèIÖ€ñO½bñ’‘wXÜ¡«Ëc½úŠ¡c¡7ÏUÙ.O33#ÝbÕ–ºw¶\?Âe†>=á-‹ó-·¸sÏNos±Å:uR,V~IIqë]½Æ]#®¿ßb“†.»öò N±¨–[…‚ € € € `d³r € € € € € Ô˜;w®- ys÷Døò•:uê”oFæB�„ÈÏÏ�pÛ9óDÈì�ÜÜ\«×¨QÃbZZZ`8"(((°Ùu®ËÈȈdQÌ‹@@`ãÆ�VÏÉq÷å4hàúħ -�•+WÚ¢6tOÐ{b´–ÌrY ;ÛÝ«š™™i1999‘)Øö( è¸Òç«Zµªøí(n‹ªZ}zß´iS¹›±dÉ›—lÖr2# € € € € àø™•ã@@@@ˆH€ŸY#âcf@@@@@€ŸY9@@@@@�ˆø™5">fF@@@@ø™•c@@@@ˆH€ŸY#âcf@@@@@€ŸY9@@@@@�ˆø™5">fF@@@@ø™•c@@@@ˆH€ŸY#âcf@@@@@€ŸY9@@@@@�ˆø™5">fF@@@@ø™•c@@@@ˆH€ŸY#âcf@@@@@€ŸY9@@@@@�ˆø™5">fF@@@@ø™•c@@@@ˆH€ŸY#âcf@@@@@€ŸY9@@@@@�ˆø™5">fF@@@@ø™•c@@@@ˆH€ŸY#âcf@@@@@€ŸY9@@@@@�ˆø™5">fF@@@@jA€Ä—@vv¶5¸V-N_ñµßb·µ………�ÆêTˆD ¨¨Èf×µqãÆHż”ÈË˳!999%†ó�Ht\­Y³&’…0/%6lØ`Cô>ȧ÷8¼,·€ÎWÅÅŶ„Úµk—{9̈€_@ŸÞÓÓÓýËQ'›µhÌ‚ € € € €l l‹5ˆ � X;ëÔ©­¥‘±/�ŸŸo�Ü´i“ÅÔÔÔØo0-Œ eî(WšóU\ì²8jdJJе6---ŽÚLSc_€ã*ö÷Q<¶Pï€:ºjÖ$Ç+÷a,¶Yï€ÉÉÉÖ8ÅXl%mŠ7ÿ§÷HÚΙ.=æE@@@@’ø™•ƒ@@@@ˆH€ŸY#âcf@@@@@  úf}ïƒiæþÞ‡Ÿ[üqú‹¼þ Åš5kXô—·Þ�b/_|õ‹MgY<ïì-vê¸�Åè–pZµaƒ{®ëëo}hñݾ°Ø¡]K‹×Ž<ßbÅ•pÚ¶hñ2kÀs/¼eñëï³Ø¥ck‹çžu‚Ŷm\;+¢„Ó¶…‹–ÚªŸ{ѵí›ïgXlÙüÿÛ»8)êûÿãÀqpôÞ;"Å.ˆˆ]±EÅ1jìÆÔ£1j~FSLL3±Å5�±×ˆ±ƒéÜÑ;×(ÿÏgÞ²Ž·wçÜÝîÞ–×÷ñðãwggg¾ßç|ofÙýìw:X<ë´c-îºó`‹É(QÚÞoq‰ÏÏxÞÅ×[4 ·Åk®8?¼BBêQZõÑä鶯˯½µÒ=Þó÷«my¿¾~|[¢´M{œ3w�Uř_.´8|¨dzNk±SÇö) € € € €@î�Íš;Çšž"€ € € € €@Rê!›uåª5Ö•vm[UÓ¡÷>üÄžýÏã/[¼úgg[\¸°Èâe×Üdñ¡{~g±EóDÞ_5J«JËÊl¿eAlÕª¹ÕSSªo[yù&kƯnø‡ÅÃÞËâñÇŒ¶øÚ›ïY¼æ×ž)|Ï­×ZÌÏÏ·˜ØR}Û´¯ÿ>éÇq» ûò¤±c¬>é½)¯¼Î³5ºû7ÛµõlåÄ–(m ïqüSÞÎEE+-*›5ül¢êQZµaC±í®O�N¯»ê‚ »îÒ¹c…%‰z¥mË–¹Ï%WþÅâEç�`ñœ3Ž·øÉ4ÏS^·nƒE²Y �‚ € € €9%@6kNn:‹ € € € €‰¨‡lÖSN<Òú¡|Õ×&N­´OϽø¦-?á˜Q‡ Ú.Ÿzá «¿÷�纎:À37U¢´ªm›Ö¶»3NõÙ'7oÞbqÁ"Ÿu4Ù¥ú¶åçûAüû�?·XPÐ4Ö˜-<Û÷ß�ûL²EK–[ìÕ³[ìÙDUªo›örñ�N³JÃÐÔ»mÚx.ó]>gqõêu“‘Í¥m¶k+ y®ôƒ�y6둇ìi±¸Ä3—“Q¢´jý†�¶ëžÝ=›5yóêÆ÷.JÛžzþU{ᑇú_ßèQûÄ6’¡·Ôü@IDATŒ¹bc§‚ € € €¤¹Ù¬i~€h € € € €¤»@=d³F!ùì‹ù¶ÚÑGXaåýüîê ‚Üà OåøÃp«(”©z›ÖÕÍ„›l:å±—”ÚŽ–/÷™=_xù-‹; êc±oŸë«lݺÕv}ûÝ�X<ý$Ÿ7¶Q^žÅY³}ÖWY·Þ³Y?ŸåmøÁ¹WYlä)ŸzâaV?pÿë«ÌübžíºoÏŒ¾òÚ¿Zœ3ßs��:to‹ãN:Êb^`h  € € € �#d³æÈ�¦› € € € € �,�´ËfÕœ§+V¯·7múÍL£hÞ¬À*šÍ3Y$Ù²ÝgƒylG0Ô:ÔºuËzïÖ„×'Yþr›ç�ªÜrãeViž´uÛS)ûÿÄw?¶}-\¼Ìâ/~�ŧžó¹Gë·ŒØcgk@—Î,î8x€Å¯æ.°xÕoî°Ø9X¾C°Ü¦¸, æùU¼þ.Ö´i‹W_«Åî]}>ÙƒòÌV  € € € �;d³æÎ±¦§ € € € € ��´ËfÍËóO~;¶÷¹DKK}6ÏpÙX\bÛµk^H½‚À«oxÞè[“¦Z¼åOWTx¶¾9æÛõ¨`^ÑO?ÿÒê—ÿßÍÿôë‹-´�ÅT– ‹mw7ßù¨Å³ÆùŒ¢6úŒ¨6x,--³¸rÕj‹íÛµµ˜ÊÒ·�ÏA¬¨ývêÔÞ*#‡ ¶8eêçë+›µ{ϱsðH‹¶óÙuUö¹«U¦L›i‘lÖ¯Qø € € €äŒÙ¬9s¨é( € € € €$G í²YÕÍÁÛ÷¶ÊÂÅK,î1Ôç©TùrÎB«·Ó¨m øÿ·¶Íú[zÓï.µØµ‹Ï•Y¿eóæÍÖÝ}¾yófV×1Ýa å©Aþcê³Y§N÷¼Ëe+ÖZüÃÍYŒ/³/ÿƒ-|èîâŸJê’òòM¶ýüüŠž¥¥å¶¼YAÅ9‹“Ú˜ 4À3X§êùÈ£Gí{¶´Ìó›4É�-¡‚ € € €äŽÙ¬¹s¬é) € € € €$E bº\Rv²m£%Á\««W¯³+W®Ù¶¸AѿϻîWÞ¡½Ïƒù½Ãö·xó>oæN;loqÁÂ"�‹|ͽ†û,�‰*Ñ[µvÝzÛéÆ�>?ìºõ>ƒçÆbŸ=¶(¸÷zËž§Ù²e ‹‰*ÑÛ6áµwl§¿ýë/9ï‹òœ¿`±Õ›XÔüžVIH‰Ò¶üÆ>À.ùù�Oûþû³ŽÎ™çYÉÓ?ŸkñŒqß³˜Ø¥m#÷ÜÍvúêÓ·WØõ#�¿`KfÍžoñš+ίðl]FiU^#ÿæãâ+\ì̸L¿¾>OëgÁl¶3¾˜gõŸ^tšÅÄ–(mÓßæa£÷µ]_tÅ-Ž:Àg‰mÙ²¹Å7'}bñç—œn1�Ë»ï¾kÍ{òÉ'-Nœ8ÑâòåË->ÜâÞ{ïmñä“O¶Ø®];‹QŠf‘ž>}º­|ß}÷Y¼å–[,žqƱ%VɸRd(¿ýöÛÖrÉg’ŒëHZ5xË–-Öž¥K—ZüôÓO-Ξ=ÛâÖ­[-þð‡?´Ø¤I‹Ù]–,ñ_«´ní3­7kæWOJí4rfÍše/ÿâ‹/,®\¹Ò¢FZûö>¯wŸ>þ+„�wöß5 ®2VÉʸJìaÕ™JW·¢"^\ìóÚ·háïu;tð¹ÚwÝÕß“wîÜÙb¶–5küß,ú›ŠþÞ ŠÆúõþ/ mYçÃ(¯ÊÖuæÎ�k]{ùå—cÔYkäH¿@ö•dŒ«µkýWz:Ï·lÙ2ûЪéÑ]wÝeÏêšXÍj±§ºvíjõ£�>:¶$;*%%þIÅêÕ«-ª�‰í—~¥ª³–Fš~±šØ½¤çÖtœ6mš5Ouý[I×D½×6l˜=›}ïäuÄÕë.]ºXë~Üõ׺hÑ"ÛZ§Nþ ì¦Mëó7»Ö€²YˆÉ¦@@@@@ ê›Ãº|×ýSçO¦yîÛ¥Wÿ­Ré}÷ÜÁ–_ÍE±gŸ}ñu«?:þ‹;xÎË…çx–Yøþæö°Ž%z«~ôYÛ×]>Wé/:ç8[>öèÑ•>[»…QÚö³Kδ�{êåÕìâ¨Ñ{Ù³?½ÈsëU¢´MGsÚ Ï¯yúù×,Nžêszvíây‚ãN8ÌâÞ{ µ˜Ø½mñûM^6kôVMùÄsÜž}é-‹S¦¹X¿>þ�ëÙ§�µ8x`‹‰-ÑÛ¦ýª…÷<ð”=\½Ös1Æ�0Æâá‡zz”¢ Ð(kVµNô3�¾ÛÿóŸÿl›ºþúëc:ÔÇÞÀ�-¾úê«•¹£o#_zé%[2hÐ ‹U•ðüñŸýìgõÚ𚙞ͪ¾|ðÁViذ¡EYM˜0!ÜÍJëx -WÖ�¶°p¡ç°G/ݺu³•÷ÚËÏ]É.�úN5y»ºÚ¾öšŸ ËË}žåø’;Ù¬ÊáR¶E�=ŒB#DYñ2Z¢ÜLå|-^ì¿ÕPAUëWµ\ßÃ';‹VßüëXG?_UÕæøå7ú¯j^yÅß#)¿@ë(ƒIû Ÿi¥§Ì�ì˳Pßë>®t½PF°¶%6~»Ó³gÏ(+'de•&c kÜ~øá‡ÖÎO>ùÄ¢Î�ÊZjÛÖs&¥M›6Åú²çž{Z}·ÝüwBÙWôפŒ�¯tîÚ°aC5�ÕÑÑÙ¦ªÕ”Ï(O�]m«Z?ÙË“7®ªo¹Îä�=ö˜­VÍîlÖdŒ«eË–™¡þZ•o^½|jžU~¥®;j[b÷+É{ï½7¶YeV¿/eÏrÈ!±WeG%œ!¨3¶–¬X±¢šêÌ£ů¦ãèê̯«m”³\üÖµDç åTÖ=³²úVéšøñÇÇV“Xóæþ›ÎðY«U«V¶dÌÿw±ÞwÅ^’�aÔ‘6mÚXEïÆ«ïZ÷îÝm…øwž™óæù¯uõidòþV} Ãφ߽‡—G¯ë=9Ù¬ÑÅX@@@@¨D ¥Ù¬•ìŸE �“á«ÚDÏÓì¢ûí·ŸíèÌ3=ûû¿ø…Åí¶Û΢¾ë^µj•Õ¯¹æ‹·Ýv›Åý÷÷Ì\ÍVÕ¾ô¬æè±•­(só‘G±zæf³Î™3ÇÚ?sæL‹ÊA°Š•Ž;ZT¾’ryôíîèўů*›iÒ¤I¶ä³Ï>³(�cŽ9ÆêÙ4OkøwêµL”£¤¿ke÷(Gg']u–ÓyÌX*-] ,°gµ¦²ð*]9 “7®ªo¼æÊŸ1c†­¦Œ'ý]gk6kòÆUnf³*³ò¡‡Š 3½OÆ•7¶‹4¬èèë=mø|¥³Š~ ¤Üyý}é}—þêuæ×y>¾kzÇ¥íè=ƺu~¯åã§ò—á¶©:'+†ŸMT]׸·ÞòߘêJ§Ù¢lKtM”á{ï½gKô.WWÃì�ác~w¤ÞiiÔé©ÞuëÝ”FŽ–Ä¿w g³êWŒé ~÷^»QD6kíÜx € € € € ð-�ÆßzÄ@ 딉óþûï[Ï”‰ÿ}šf g³¾ùæ›¶¾æÓ¬j†ÖC=ÔÖQÛý÷ßoe³jI&FåÔ„çÇùôSŸ/Xs<)sPßm*ëDßoë[eõ7œÕ¥œÁdg¦¿³ò ÕÚùóç[%œÍšþ½¨K 5*Â3U)ŸW9ú[ß!k/]z•2ÃmPþBx¼©^ÿ÷ÞBæÖ÷Ùgk¼ò,”�ŸÍžãX3Pk}Ízœ2:Ö‰Wú}CxF?e[hœh”Æ;gî(Šo¹®†šWNYKñù•2×ÔyLËÊÊ̦lVÍn©1 kœ²·tEÓ8ѳá3�–‡Ïfú=Gx,…åuµÕ™0|%Õ::ïeÇ_k¸×ª+óKï1ôîByOá_~Ä¿*Ó—$j\EqШÓ G�«ð¯¢l-=× ÿBN}é�—z+å«*ßPÇ]Ù…:_é¥ã~ï¤zõ×5��´õKg$-×¾âß¡¥^ ±{Ô¸RŽª¶|ÀXEwªïKº/…Îáñó�†×Ϭºz!úÅFø]ºÎ-'á+ –ë÷‘ÊôŒЯ¯ÂËue¬Ë¤Â[K}�¹YSoÎ@@@@@ «ÈfͪÃIg@ *�áÇWõTl¹2¿úõëgK4?©rsªÊf�½0Ë*Ê(QÔ7áÊTÒ7Šá̈ð·µáùzÂßyfÝ©µ€rL4kªF‹fSUö\8ÿB»�"}+^}®D”ujÝø4|¡î`^ý}ÌÕìøÙÖ4 [vd&{\)[Gc/<&ÓpH$°Iá¼ûª6+yýýê¡ —ªÖÏÄåÊâQË5§¡f_ÕùJ:ó¨®5u• /QþNø*¯¡Lým†ŸÕØ«êàá53«.7ýrHbÆ ³.Äç4eV¿¢´6QãJná%ŸÑ“­ù†á!¡¿>9+]÷_ž9sflµ}öÙÇêúŒ-ÌèJ8/Lã!œw#�©ôlx$TŸ¦«gü3<ºtýUZF3VÚø·ÞzË–K@︲5»0¾û‰Wñ×Êø=æÂ’p6«ÞÕ+Æ÷]ïô>vï½÷¶²é Êc ¿SÒÙiíÚµÖS½#Ò Ÿmª?_)¿ªoµ\çC]+ÃWÏxÿLY¢^‡37[¶li�—°2ñU—¤®}»ì²‹­£9p3¥§QÚ©k–þÊt¥ST®´²˜e~o©q¾2Æï«úÑ¿~f-!›5³Ž­E@@@@�´ ›5í B�d \xá…¶‹»ï¾»ÂŽ®¾új[òÓŸþÔbîäVT@°‡ºkv�=¬þé§ŸZTN�ršôÝ£î¯ µ}��Myê1Qš1-|ORÍçÕ¢E Û…2 4ºªúë çh¨UuŸÊÓ ·VóÖ…—äZf«þf§N�CPOìaT’1®Ä¢\ å0†ï°¬g•” g<ÍÓEPËAduÕÐòìˆ:²ê£2¶”§³�Î<Êå‰ÏóÒß]|�ò}”ù%±ð9Mu�!µ/�ã·Ÿ¹Â_|ñ…5^¿ŒQþ—²Y3·G5my2ÆUMÛ�}ëëZ¯|CÕwÞygë¦Æ˜þN•ƒ?eÊ[þÙgŸYTâ^{í•5 P\°`�õKï¦tæÑûvõ:œsZýùJ9ŒUeÖë}—Fµrf«zÿ–YÈá\ã*|� o_ëktiÞäð³ñu­©wbUm3þUõ»„lÖúõgï € € € € �ñd³fü!¤ PS�áÇÛK”£¤»‘¾ýöÛ¶äÿø‡E}Ç{É%—X=›fš³îD,ñ9€úÆr‡v°-|øá‡u·Öð÷–ú;¼DßU*?1â®+¬¦Y~ÂߺWX�‡$ |Ý™T߇«ñZ¢< - ÏîÎ)ÐÂ]V>lQQQx!õ˜€æYÖߦ²vÝuר³ÙQIƸ’ŒÎ`:ûår6«2M”}©ó¹²Ã4'²®ž#GŽ4´nݺeÇ ŠõB}×yF •Å£LUÝ[YWÃØK¬¢wáó•F‘î[Î ¿*¼}�W¬Xa µýøÜØø×¦ó¾ûî»ÖHå"pÀVÏô~ÕÎû¬ÅLùÞÌššÔ2gÎÛ¾¾×7ºúvQßZëÎÈšKNÍÐ]8•5P»†í¹çžöBÍ[»-ðªôÐ7Þúf[ß�‡gtR”22â󞔣¡™È¢ôT£7Êš™¾Žæ ÓýpÕ—ÝvÛÍ*¹sgꚎ+e¯T5B4çZü¨P‡¢2>â ÿªÌZ¢ù|óújt)WZs¶>÷ÜsÖ©Ñ£G[ìÓ§Ofu°F­ÕÙiéÒ¥öªðï-4?�¢Ö ç)�UÏF™ÇVgB]aW­ZeûÒœ­5jjZ­üÎ;ïX{t>×¼™QÒª ImLíÆU|“”­w_UÍE®Üüø,ìø­eÖ’pvaU-רûè£�lý=êì�Ù¬UõZ}T.³Þ¥+ßYbºV†3õ ˜ââbÛ`”ß(„“¤s£æ-�ÏVU Ómyøì­¶rÈ!VéÝ»w¥M8p -׿%5+îÌ™3mI6Íüßq½ÐuJã$~\ÅKê_‹ºT5º4r4bµMÅð(�oOº-!›5ÝŽíA@@@@�  ›5ÃÍE�dl·Ýv¶Ù_ýêWõ=Ûm·ÝfõÛo¿ÝâÕW_m‘¢ûl*'NY„o¼ñ†±HL9­#FŒˆA) uìØ±±%TˆÐ<�ʰЬ^ÊÞÒÌ�ʶÐx ¿V¹]šõ)ú,`úæ<úúá=fJ]™)/¾ø¢5X÷fíÙ³§Õ³oVÖê�HMÇ•r.ê’;%—ªú6gʳÊ] çé(§õ­·Þ².ôêÕËbææ1Uô7¥c­»ok‰òõZeÜhD)Gëë¬åü#=ý’FÛ¯¾Uéü¬d¾üòËX#5›¶~-[«è…~õÕWVÑo4ŸrÊb+gM¥¦ãªªŽ+SUç|ek†×Ô8ÌÖ¿ÍpO«ªë=ƒrW5ÒÂã­ªWeîr��®pþ¸~·¡³“ÎHñsâë|?/y¼†Æ•¶¯¿wåFymüÖÒaIüï~¢Ì²ªw˜Êf ß� z”Œ6èž ºNéXÚŽ4Þtž �:e¿ê½™¬ª!:Û+«Z¿%Ò_n”£�ŒžÖn›d³ÖÎ�W!€ € € € €_ �ÍÊP@¾ÐweGy¤=V6ëøñã­žËÙ¬šUßIjî!)‰L3´êûp-ÑwÚª¨J@¹$Ê]Õè �"}_]ý·Öñ¹Uí+¼¼ªoÎÃëdn]†&L°.(#X³ÖŽ5Ê–äÂßfÝÇUüÜbûöíc�КÊîùè£�bˇ buæŒ�PA�¤ Lš4ɶ¯_rè|µÏ>ûØ’®]»Æö«ÜÕ3fØ’ðùJÙ¯ºïyle*Ä4k�=l‰æf}饗¬>fÌ‹áœÖ>øÀ–¬\¹Òb«V­,êjhJÎ �Íš³‡žŽ#€ € € € €@b*"ü�OM7Ü´iÓš¾„õ@ Ç”[Z„ègÍZxÑEÙî¦OŸn±M›6GŒaQ÷àž8q¢Õ•ýªgï¹ç[rüñÇ[Œ/o¿ý¶-¼ûî»+<¥oÔµµسú^=¼Úe—]fuÿÜðrêõ% Ñ¨ü¬dÜ“}ÕªUÖµW_}µBËÊÊlɺuëbË•/¦»kaÿþý­²ûî»ÇÖ¡’)Ê )//·G?_EïÝóÏ?o+/\¸0öeå(jtiï±*T”÷ÎR¬°ÓV@36kÖ,á-Ôܬ:_­]»6¶}�uÖR>µVPÖ�r|˜Í<†–q•ä�«è/¿ü²­¬Ÿê�ÒÈ‘#£¿œ5ÓP@¿kÒ¤‰µ-±ç‡ 6Ø6õ«Í(­îk_:CêþïáóÕàÁƒmµý÷ß_+3T@ïsôû‰äýŠB£÷™gž1%½Ÿ×¾4 ¹F Æ˜®�‡z¨­Y—ÏÖ2ôpdM³ÃïÞk×)�‹Èf­�¯B@@@@¾Héܬ…E~÷Ò'ŸõŒž'¼gñìeñè#¶¨òß'}΋Ûþùä¶•üÿŸ·\cKûöö™2U¢´Mûš¿`±Un¿çQ‹ŸÏZ`qŸ=w²xî™'XlÓÚçãHT‰Þª�§øŒ3wÞ7Þbyù&‹'{ˆÅ1£÷³˜Œ2ù“Om³ãŸöYá>Ÿ5ßâ¾{ùiÏ:ý8‹­Z¶°¨²l¹ÏTróYüb¶çÝ6ʳO;åh‹Éøö)zÛ¦MŸimxú…×-¾>qªÅ[ÿt¹Å�úZLF‰Ò¶-[¶Ú®Ÿù ‹/Ox×âÊÕžQrôá~4O8Ög„Iì·ÁQZµyóÛï ÿ{Ó¢ZU´Ì�ìÁû³xú¸c-6+HÇÜö<ÐÚ¦ ÓÿýïVW®Ä§Ÿúþꫯ,vØa•3¨¹\5�-¬´¬^½Ú–ßÿý•>«…ÊlU ¯vÁ„RÏzåP(WºúÎj^§ð:̰Ö .e^‡óXµ\YŠQ¬ô�}”5Y'w:wîl�=ñÄ-Κ5Ë¢®’ÊâQ«2¦Û¶mkÏî°Ã{÷îm‘‚¤R@ç"ÝqAÐz×½lÙ2k†r ›7onõ:XÜi'ÿ7{÷îÝ-Rˆ" Õ±cÇÚÊS§úgcË—/·ºfbU~ô{ìaK4Þ¬BÉq²Ys|Ð}@@@@¨«@J³Y×­óùSš7ó|·ªrñ9ÐçßÙsØÎzöð_°%ÚBÿ*JÛ”÷qõ¯oµ–{Äþ/:ÿ‹ÿ~ä9‹÷>ð„ÅŸü¿Ó-&ªDiÕâÂ%¶»+¯»Ýâï¯ý‘ÅÖ­ZZüÃM÷YlÙÒ¿ÁÛg¤ç&ª(Çö÷7yßEçžhñ‡?8ÆâÝ÷�÷xß-^úã3,*ãæÚßyÛF÷ïÏ2X• üÔ³ž {Ü1>ƒI¢Jô¶i�«‚,Ñöí|¦ÎÍ[¶$ª•n'zÛÞ~çCÛ„×ß·xÎþíY£F -^£ÏÚ¡½ç�ü¥X¥Ž%z«.*´}½ñöGÕªüÆ~ùãßÿe± Èc=#Èiµ‡iXZ·nm­Ò\«U͸½ÙGu”­¬ýU¬™›š¿é¼óÎËÍîÓë„ hö^FTÂaÙ`L@¿4R†Žbì)*$U@3&ul<+úöíkýRÌÊÒ©zhü›wèСÖÅzl »Î²Y3â0ÑH@@@@H_�”f³ܾŸI(¾óþ´JUÚ¶õŒ3E­°pQ‘UÞz×׿çfŸ•U™}z6Q1JÛJJJmw‹—ø=£÷ÞËïûÜ­«Ï`uÐ{Z¼÷Á§,&¶DiÕ‡“gØN‡lßÓâÐÝvŒ5à˜ ßöÑ'|&ÊÄf³ª×÷ß~½mY9ŒÚéá£÷±ÊŸoñ9X•Í:sÖ«Ï]àù¶7ýþr‹ºóã÷Oðy0ÿø÷,Ž=z´Åð�µía­Kô¶iûï;Ü*;ï4ÐâcO¿QëýFyaô¶í·�·jÄð]-6mÚ$¶ñöÞÍêS¦~n1QÙ¬Ñ[Õ'˜ ùÆ__f{oèɵ_ÍÉ[Xè³ Q@@@@�Ü ›57�;½F@@@@�„ ¤4›µv­~úù×ì…GŽÞËb—Îk·‘„¼ªyófÞ’CFX¼ó^Ÿ�ôÌkñ�w§X<$ÈiµJŠKyY¹í1œUªl? ¯Uþv‡·S÷¹ÖL[z¶î1~�šI¶W�N±�/.\jõ~½»XT«žêÖÅ×Y¶b­E½ªuë–z*!1JÛ²£Zl$JÛ”+ÎcÕŽV¯Yg•ž=Ü3±%J«´GµmÙò•öP™æÿ{ãC«_öÿÆ%¶Il @@@È ²Y3è`ÑT@@@@HG�´ÎfÝX\bfϾ<ÉâM¿»4MüöéócÞtû,žé u¿õÝq]½´p‡!l¿wÜÿŒÅ/¾œk±e Ϻ½ûþñ7oÙbqÆb‹‰Íµ ÆJY�QûøÓžw|â±Ç–¯]·Þê-‚,àØB«„ó4×oØ`KRß¶p{ê«^•[|{”7úúÄ©öÔ�7]¿B—DiÕÉg]ÛãÁûù_Ä®;Ž-¡‚ € € €äšÙ¬¹vÄé/ € € € €$X ­³Y¿š³Àº[^¾Ùbß>=Üõšoî‹YsìE7Þô€Å{ný?‹ ƒ‰*xøi«_uÝÍÿ~£g6nœg15eÈ ílG—þèD‹×ÿáN‹íÚ´²¸Çîž]8cæ<‹-[¶°˜Œ²%È–½óÞGmãíÛù~>pdlGmZû’ =—6\JKËb[¶¨Ÿ¶ÅP/•êÝÂMZ·Þ³}o¼é>‹ãŽ?Øb¿¾½,&£DoÕK�ûh_¹jµÅöLê_ÿ᯿æ"‹@@@@ ×Èf͵#N@@@@@ ÁižÍ:ߺ;x€ç±6i’Ÿà®×|sÓf|a/ÚqH_‹mÛ´Žmàäã·úÉgûl•EK–YìÙ£kìÙÔT?ôÛ‘¢öøÒÿÞ²Ên;y®k£F µ0�Q™�·Þù�msêŒÙÿüÛË,†�T÷®�lÉœùK,jÆO=[(uîØÆ–·j•ølÖ(m³]×K‰Þ6Íl{Íõ·X;{õèlñŒS�MR›£´jófŸç7/Ï¿›ÉÏ÷SG—Î-Ž9xo‹—\u“Åâ’R‹Í šZ¤ �C%žÙÝ d�ÇM%·nõHÉ\�à×* x üjÕ  ­G  €@¼×Áx“L_Âu0Ó� íG�z ›µžàÙ- € € € €d‹@J³Y—¯Xen›6ù\«ee›,®^ãw¢/Z²ÜbûvžÚ¤I‹*K—ûú�;¥"$JÛ ìoí¹ã~Ÿ‰òƒ�¦YìÛ»‡ÅW^{Ç¢r3;uloõD•(­Ò̧/¿2Ñv:bø.W¬ô¼ª{~Îâ5?;Ûbb‹²o»ËóXŸxÞ÷ûÇëþŸÅÕkÖÆbÛ¶~4nßÏb¿Þ],>þÔË÷Ùkw‹�Ž÷úIÇúL£šßÖ* )ÑÛ¦9a—.[aû]´\ XŒºÖ­ZÚCekê«Üº7/zÛipW_³·m­ÏÍzÉ�ÆY\¸¨(ÖŒ®]5òïiž~áu‹Ãwh‘ëî;°xÖic-öêY³oJí%Õ”(­ÒüÏÓ¶�×Þö¶uj߯âé§eqø°�-&¶|'¸J³fžsŸo»íù,ú¾gø6hÛû;»¤9¯ËËËmMÎWßÉÅ 5(.ö¼¿fÍšÕèU¬Œ@õ5Wu¸Æ·dÙJÿÅÀÉ—ßkñ‰›ÎµØ¦Up¾�_5Â’ “ü_+w=þŽÅû÷C‹Mã~b c¥¤ÌÏÕ\c ÕU"_µ‘’’«è«ú%\uç9¢ ”•ù»V}’�ØÏ¢íŸµ²S üî½v=,*òß“ÍZ;=^… € € € €|-�ÒlVÔ@ �ÍÊHH�g³ê~Êë¾™+¹.}yèϵY½ÎsÓ.ç3V«¬Z³Á*Çÿôn‹Ïßv¡Å×ÞûÔâ¼E>£ô§Œ²¨lÖs¯{Øê/Ýq‘EÍúúË¿=aõSŽôÜØ�ö²_F�ý7[¨lÖYs½/¿½gBüj—\y¦·çÐ}ÿû‰ˆ Hõj­ºú ª›;>ü}8Ù¬©>@Ù¾¿gf;ýKˆ@ ÆUB¯ƒj|¢²Y5{ø9ÿ÷ mv͆ê~;uÂÁ;Ù:ºòNxǧÅuPÇ"RŒpÔvÈf�äÉJ5 ›µ†`¬I üî=Ò âV"›5Ž„ € € € € €@͸UnÍÍx €@. ”¬IHúÌ›ž£zåÙ‡ZT†iüÆ�¸ð¶ ûôè`KFïí™8Þp†Å1çßl±|Ó‹*ïN_¸­ú­ÿ·iá3ª?òÇ3-¶kí³¯öîÞÑâÁÁÖ¬båÖ¿b±c»VO>b„/ Ê#Ï¿gÿ_²Ü.>ÝÛœ£Ec ÚlÖ•¡Û �  ºF¡Z¿Ágö\¼Ìï°x‰Çy‹ý®Gè÷ÐuÊ*VJƒùUÿôO¿·Á^;û Úg¿¯?*[¶lµG—þá1‹ýzøµOEW@®ƒÛ<"üŸë`$VA�Ü`nÖÜ<îô@@@@&@6kÂ(Ù €@NlòÌšº—{Ç¿eY²Òç`½êïÏXüËeÇX\dî¬ âŸxÖüâ,Ÿ³uÚž�Ú¼ ‰ÅÃ÷÷,•Ní[[eüMçY¼òÏ�[<ú@Ÿ#uÈ€Ÿšð±Å3ÆzFO£† -ª4oæ9­á²z­·d«'ú4ÜÏçmìKY·¾´Aƒ^]ÛYl߯s`µ¼esßN~~޽�HÐ0:  �y :n,ö¹S‹‚_H|>{qÌá�÷xFêìEžµª«d³¦~•Ù¡_'‹Û÷ö¸U—+«5h°±Äï9þÇ»_°øÞŒEo¾òx‹º>Z%V>ýÒ¯¤ËVo´¸ç®ýcËUá:X¤º‡ Õí‚ç@�Ì ›53�­F@@@@�´ȱô“´q§! €™*Ê ©K.øþAöònñìk²˜—çß}. æžÛPì¹9*‹—®¶J·Nm,öëéY<ñeö¼%¶pÕÚb‹ŽbqÉ ŸAõñWgXüÑ8χ g³Úà åÌk°%Õß—¹ÂKìá_v¬Å]‡ô‰*›—$h d3}C�,¨ó9pÂ$¿6ýönŸ¼ IžÅ¾ÝÚÆÀvÜÓê'Žf±{ÿE‡`®ðø«Xq�Çzé �Ø:úÁÆéGµúåyÒâUg�¶¸ïƒ,*ûõ?Ï`õãÚÑb‡¶>ÿx¸p k|G½Îcà;¶ÏÓ €@Æ �Íš±‡Ž†#€ € € € €@z�ÍšÇ�V €䌀î†qÓ¹ó}óÝjAA[BA@ õÊTmSqrÔZ6dçA½+¼rÄ®þ›�Û¯ñ Ö«ÿö”ÅEËý׿ýñÛ×J«P@H¸À7ÿâJø¦Ù  € € € € � d³æÂQ¦� €i$Ð0hˉcünÈ×Þî3Ç]{¾ÏwÒÏþ1£?EA�T4 ²9·*£¥ö;lº‡ò¬yKmCÿ»ë"‹ ƒí¯Zã'…/óüÖgo¹Àbx6U­³¨h…-?ýê-V_Æþä®JWøÛÏ�³å;ìUé³á…ÅAöë1ßa 7mÞb±usŸÝµG×öáÕr¥®1�+½¥Ÿ €À·t o´yAÓØÃ«ý ¨ù[c ­R\Zf1¿±ÿ¶ªßa,[¹Öž½ÿ‰‰'~2Ïâo~|¤Åa;õ³X—Âuð[z\¿ÅÁ@à²Y¿± † € € € €ÔB€lÖZ ñj&°É¿üsŠÇk_÷Xä®z­²¢g'û¤R îúØ£ò[u ×ÏÚÍcc¾(q ©h\àû+÷¹ÞjWÊÊ6Ù ï{r’цy~Í ofñ«…Ë-Ž=Øÿ¼Ûµñ„öaƒ»Y, ÖßäÏn b£FþÇß³k‹¯Þs‰Åø²0”ëúÊÝÛ �ê�{Ò¬ÀsWúÃ-æ7ö¤úæÁ’üüœ|#¡1` @ ê|Œ7kÑܳYpøîÏùÕÃñ+Ä–üõò±VßupïØ’§}eõÞšnñµ�æXÜwWöÎ_�³Ø©†s—ÛK*-\¿ÅÂuð[<@¾àCšo,¨!€ € € € €µÈÉ$”Z8ñj%0o�¿lì#•—êµÚÍßzþ³þú|èñ‰“=öiã‘‚)(þäê�ÍúòÄiÖTå–^vÖaV/ æ›{uÒ§Vi¢ÇÂå>»Ü‚%~9þ§w[ —‹OÙ×{ȰðÂJëùuHzoÝÂóvó󿙺c»V•î%çj ä\·é0 Ôù:X•ãY'ìoO�rÔ^KJË+¬Ö´i¾-QViø©/æú�¿:¶mañŸ×ykßž�Â+ÔºÎu°J:®ƒUÒðäºÙ¬¹>è? € € € €ÔQ áܹsm]»v­õ†š6õ™t( xo‘?ú^0µÔ²�ágYïÔÜ·öÌ)Gôð˜)¥´´´ŽMåÌSG@^ÐhÔœ§Á¼«±çª©¬žïO–׿Ï{k°ÙM›6Ûÿ5Ïi°€� ùÁi·í7sVÕè-[¶ØSååž�Åùª*%–×N ¸Øç†nÖ¬Yí^Ϋ¨T Æãª×ÁJÀÂ̈|TwJJJ¬Ò¤‰Ïð®™å3£›´2½ÊÊʬ�yyþ‹+Åôn/­Ë �ð»÷Úµ¸¨È]A6kíôx € € € € ðµs³2H°€æc=*Èc]^›D·´Gy²Ê™ýà\!ó´Ö€�U¨‹@ëîþ굋=Ö0§µ¡¿†<Ö@!ƒ‚òwtÜ3¨Ù4H’@®ƒIj›M®×Áäú²uȲY³ä@Ò @@@@¨/²YëKžýf¡À&Ÿˆ¯ÁØG<&;�Õ÷±­(§õ¸Gýñ{g{¬Ã­Åýåøn�FÁTst–¬öõKÖxÜäs�5تùW½JÉH�†AÎqã`®^ÝO¹ mFv„F#€Ià:˜$Ø4Ù,×Á4942M€lÖL;b´@@@@ÒL€lÖ4; 4'“þ9Å[?Ùo.WåãBßé½AÎZ `—䮀òÉvÌÝ@Ï@�Üà:˜ÛÇŸÞ#€ÄÈf�QPA@@@@j#@6kmÔx J7û‚k_¯°¸ª §ïê»nšW `— € € € €@ �Íšƒ�.#€ € € € €@"ÈfM¤&ÛÊY� _y׋Ö×?@aІWçxKPÿí¡ € € € €@.�Íš G™>"€ € € € €@RšÍº±¸ÄºòŸÇž³øúÛ“-¶hQ`ñ‡ã¾gqÄð`:I«}»—”Ú‚ó.¾Þâ ½-^sÅùß^¥N�¢·ê£ÉÓmO—_{k¥û»çïWÛò~}{VúlíFo›¶?gî«Ü}ÿx‹3¿\hqøÐÁÏ:m¬ÅNÛ[LT‰Ò¶²²rÛÝa'\\ÍNÇ´‡=ûóKÏ®f�š>¥mÚæ–-[­òØ/Z|òù7-¶lîcòŒqGYÜwä0‹QÊ“3¿{­=[ø:<Âãn}=–:Oƒ‡&yüÉ{UF´ôÿß|ŒÇ�zyœ¿Üã/žöøÄR�Õ—'>÷ç£g³nذÑÖäñ,¾1Ñÿ66lhñ„cFY<êðƒ,†Ë³/¾nÿŠÅNÛXüÑÙ'Y°]‹@@@@ ×Èf͵#N@@@@@ Á)Íf½÷_žeY¾i“Åk.÷ìÅ…‹—X¼ê7wX¼ïÖ_ZìÕ³›ÅpÿÔËöpQÑJ‹Êf ?[÷zôVmØPl»ëÓ£“Å뮺 Â®»tîXaIÝFoÛ²eîsÉ•±xÑy'X<çŒã-~2ÍÓ×­Û`1±Ù¬QÚÖ³GWÛ¯Ž¬UbeÅÊÕV¿"È >ê°ýcËU‰Ò6�´7ß~ßvúâ+žPúûklqåª5þ«Û,þó–Õ «TS>\\Í“_?uK��Ú8Ïþæ�ƒ»x¼xŒÇéEïžçQk¶hêõ?äñØ]<ÞuªÇwÿî±p³ÇªÊG…U=Sùòw?øÄžX³v½Å_^q®ÅeË}D]ýÛ;-víêc~�Ýw²øÞ‡¾æ÷¿Ê«ü/ô¦_vÍMºçw[4of‘‚ € € €äŽÙ¬¹s¬é) € € € €$E ¥Ù¬çžéY–ùùù5óãÀíûYýÞ{jßç_øÍÚÃÙ¬ y–܃�yÞÜ‘‡ìi±¸¤ÌbbKôV­æ¯ìÙÝ3ûz÷êžØfTºµèm{êùWm Gº—ÅÑ£ö‰m-±sÅÆ6k•èm‹·zâ™ ¶…�>ÀâŽC¶o6!õèm+\ⓞî¾Ë@‹}z{îªâÀíüø-Yf1J6k¡§�~Gùáx_a‘O5Ü`�O kƒÞÉ>´ì×ßãÿyê n|Þã?ç{|-ÈNýbW¯_Ä_|ìõªJẪž©|ùÁŽ´'µ†fYݾŸg—+WZËŸ{ñM«hÎÖ!ƒ¶³ºâS/¼aõ÷‚¬ØQø8¤ € € € €¹#@6kîkzŠ € € € €IHi6k“&M*tbófŸ`råjOl×ÎïW®²u«'ûÝ~÷#O?ɧ®l”çSZΚ¤öY-q%z«Ö­ßh»ý|–·áç^e±Y�OŸyꉇY©gß>ž{xåµµ8g¾çuèÞÇ�t”żÀÐ* )ÑÛÞÝ’¥ž=úôK“,>|ׯÃO%°½m#GìfûýÉ•¶¸ãàþûöéiqÙ Ÿ¡UyšVùβ‡Æw”OK*®Ð3øûküY, òO›ù0oÐ0«à{ÆIDATøú£¤ü›õçõ¹ž\Û``ço–WU[¡=ñ¯Ý´Éÿ—¯ðYY§NŸiqérw>lg‹*Ÿ}áãÿè#üúñ¶ÿ èçn ‚ ômËø? € € € �+ÁÇ9¹ÒYú‰ € € € €$^ ¥Ù¬ñÍãíla«–~_ò�BstN|×'ž\¸Ø“÷~ùó ,>õœÏ=ššRU«Fìá9}]:w°¸ã࿚»ÀâU¿¹Ãbç`ùÁr{˜¤RUÛsŒ*^ÿ kÚÔ“$¯¾þV‹Ýƒ;Å|�g¶&¯TÕ¶ðßšø¡=ÜoÄŽ%~6yõªÚÖ¥sGÛéÀí<óÁG_´8o‘�ºsp¤Å-š[ŒR:+E˜¡5¼µë‚ItK7ù²‡fxü¼Ôãœ%�ÚÅãÇÁ¬¬ßâõ]=.Xá±úÒ1jÿµ™yó}jØsrClé�Ï9ÎêÚ·³¸yó‹+‚Üó¦M=�;\š7+°‡«W×pRØð&¨#€ € € €+@6kÆ:Ž € € € €é!PoÙ¬_Íñ<Лï|Ìâ•—žn± ˜çtÃÆâ`ù£Ïç3ŠnØèÓLnØà±´´ÌâÊU«-¶o×ÖbbKU­Ò^4k§¢–têÔÞ*#‡ ¶8eêç“—ÍZ}ÛºwñÛ1�´¨{Ä[ÅÊ~#ý¶ôS¦ù<›ÉËf­¾mÞŽmåÃ)ŸYuÏa;m[�ôÿWß¶ÿz�µ`讃,ž|ü5'é¯~—ÕûöéaqäˆÝ-V_ºµôç£g³^ìÉÐ N Ò‹oŸàõ)>ð¿.W<镎öøÈ9§û„¨ û¤© –øt©ßQºµúŽ*}z»þ½mùó�Ýd±°p©Åßÿõ^‹ í¿ Æ=ÚbÇö¾éÒÒ íÖ]6ûÔ³íÚµÞ¶€ÿ#€ € € €9$@6klºŠ € € € €É¨‡lVe^v�gÌ�wÆ1Gìá—*Ê%\¶b­=üÃÍm[ü­ÿϾüöø¡»¿™Aò[O×êAõ­Ò&ËË}ÍüüŠh¥¥~øfA6n­vþ/ŠÒ¶AúØV¦ú¥ÅÑ£‚)?ƒ­––yþo“&ùÁ£Ä‡(mÓ^uûÉÓgÛÃ�õ¼Èd—êÛV^îGí�IÓ,~ÿøÃ,6lèY›»îì¹ÉcnñݦZŒ’ͺGw[±Áä"�Õå±Þx¢¯5þ�—¾ï1\æf}ü®o– ô‰vL¾ÔãŒ{ÖÍ׌^6oÞl+çååY,æ]í×·—ÕGí·‡ÅwÞwe³ÞÞ3^.ö&î1Ôg+VùrÎB«·Ó¨m ø? € € € �Cd³æÐÁ¦« € € € € � �Љ™ÉØGl›³çø“?½ê¯G ó[§ï8d€Åù [T.áÈ=w³ú«Oßn1\yü{8k¶oáš+Î?UÇz”VµjÙÂörñ7Z<ó߳د¯ß›þ³Ï={tÆó,þô¢Ó,&¶Di[¯žž¸xØè}-^tÅ-Ž:Àg‰mÙ²¹Å7'}bñç—øì·‰-ÑÛ¦ý®]ç÷ //÷¬É6­k5uhäDoÛž»´­>ýüëÇG¹8˜ctâûžåzê‰c,F)Çúä® îú¸ºu/ÙÞŸUëì #õu> ÎïçqËV�wÍõxß�WútÄ f-óxú^—y’wƒ¿ÌðX}ë)¹‘ÊÖ`¿×üúf[{÷]¼CwÛÁâš5~¼^yÃnG´§E•ï¶¿Un¾ãQ‹;íà]Z°Ð;³`‘7t¯áßd¦ÛC  € € € �#d³æÈ�¦› € € € € �,�†sçεmwíÚµÖ{hÌäåå_þ{[múLÏýŒ/mZyöåÿþsüS¶$yÙ¬Ñ[5å“O­%Ͼô–Å)Ó<±_w;ûô±ìo1±%zÛ´_µðžž²‡«×®·8îÏÇ<üPÏ@Ll©iÛæÍ_d 8óÇ¿±øà¿²Ø½[‹É(ÑÛ¦œÍ=ìbo¾ã™¿-[4³xÌ.vô‘[lÔ¨¡ÅêK©'é6è÷7�…_I)¼Øvm[ÉS¶(˜à·AÁ þì C=ž¶·Çv-<Îð‰O\ú´Ç‰žfZeéÖÒŸšs‰Ç¦>Õj¤²dér[ï‘Ç_´øÑ”Ïc¯9rŒÏó{ÜчZlÜø›Í=ûâë¶äÑñ¯XìØ¡µÅ Ï9Ùâ€í|Žà(¥´´4ÊjÕ¬ýÌSÍFx Ðhܤv`‚@B¶lÙbÛÑ<àœ¯BÊFbÅÅÅVoÖÌß±PH”ã*Q’l',PRRb›4ñM4jDŽW؆zíÊ‚;ÐèÎ"е߯D`›@øÝû¶e5ûQ‘ÿÒ—3]ÍÔX@@@@¨ �ÒlÖ ûæ!Y&pg07ëùÏÖg·î<Ê÷~n�[Ÿíø®}“Íú]B<Ÿ:²YSg�K{ N6k.ùTô•¬ÃT(çÞ>W¹wÌSÑc²YS¡œ{û ›5÷Žy*z~÷^»ý‘ÍZ;7^… € € € €|K ñ·ñê pÖnþâ|èq²OÊ‘Ò2´›ïîÌ  )Ý1;C@@@r^€¹Ys~€ € € € €u ›µn~¼��@ãàk‹'NöEÃïò¸l£Çd—NÍ}OœäQmð@@@@ Ud³¦Jšý € € € € €@– �Íš¥–nÕŸ@Ÿ6¾ïgNñø½‡=&/§Uy¬ÚWï`¿¾?  € € € €@jÈfM­7{C@@@@�¬ ›5ë)J�=¼œëñ¸G=~\è1Qeh7ß’æc%�5Qªl@@@¨�Ù¬µsãU € € € € €À×d³2H¢€æi}ïlߎS<þßë‹Ö{¬iéÖÒ_qÝ�ÏÜÍcc¾(q  € € € PÏ|HSÏ€Ý#€ € € € €@¦ �ÍšéG�ög€€rNÏêM=}W�¯ÎñøÄç? æl-\çõå=vlî±[+�Â9XÇöú¨~›æy¤ € € € €¤�Ù¬és,h  € € € €d¤Ù¬yØhtæ (õðÞÅÌí -G@@@�Ù¬Œ@@@@@ N|ÌZ'>^Œ € € € €ð1+c@@@@¨“³Ö‰�#€ € € € €|ÌÊ@@@@@ê$ÀǬuâãÅ € € € € €³2@@@@@�: ð1k�øx1 € € € € ÀǬŒ@@@@@ N|ÌZ'>^Œ € € € €ð1+c@@@@¨“³Ö‰�#€ € € € €|ÌÊ@@@@@ê$ÀǬuâãÅ € € € € €³2@@@@@�: ð1k�øx1 € € € € ÀǬŒ@@@@@ N�ëôê¾xÆ�öŠGÁâ'[lذ¡ÅŽeñ¨Ã²¨R\\b•'Ÿ�`ñÅW&Yìß·»Åkq¡ÅÔ”•«ÖÚŽ —,·¸n½·|ÈÀ¾Û´ni±¾ÊÖ­[m× /µ¸bå‹å›6Yìܱ�ÅÞ=»Z”ªUR\‚¦YÛ–Ø~ÃmkÛ¦•-é×Û�`ãÆy)nUU»[T¸Ìžš¿°È⎃û[lݪEU+'uùäi3mû%%eö¢‘¶Ã ~–§ò¡ÆÛ¼®´|åj‹�ùw3];··Ø½k'‹@@@@²Y € € € € €@�RšÍúîŸXc׬]oñ—WœkqÙò•¯þí�»™q{쾓ÕKË<³¯,ˆ­Z5·zêKYy¹í´I¾)§/õmˆßã’e.¦LÛm¹«¾Ö—sZÌÏϷؽkG_”ò²>ÈV^¹Ú³€¿n[#ÏVþjî"‹ó‚¼ÑíúöHy»*î°´Ì�¬2‚+>W�7oÚb»íÕ£‹Eeþªyyõÿ-ÈìàØ)»|ûþ½¬a›7{k×­ß`QùËAJºšLD@@@rT þ?ÇÉQxº� € € € €Ù"�ÒlÖƒinа]«l߯›ÅeAž¦–·mÓÚ*gœ:Ö¢²ç,ò?SYºvî`»k×Ö[²<˜5•{¯j_jU§>k8Û±M+Ÿ1V™Âõ•ÍÚª¥çïºãöß6˜Í¶´´âÜ£VKÙùóÛ¾4óéª ÷6e»®tG›6o¶å-[¸^ËÍ*]'õ u¼–-_e»Þ}çA šÄšÑ¾�ÿ]P@@@@$@6+#@@@@¨“@J³YÕÒM›ß(¥¦6ÛKÖ­÷¼QÝ­¾¦[HÆú“§yž²JëV-¬R¿³ynÙ²ÅÚ0w~¡Å^=:[lZOY¢¶ëXQ®¨Žš”òòòìYe¶Îš=ßê;ï0 ¶~*+eåå¶;¹5lÔÐê;éoqI0‡òÌ/çY}è.>g«za  € € € �³d³æì¡§ã € € € € ��zÈfÝ®okûó�Ýd±°p©Åßÿõ^‹ž/× ÁØ£Gÿ'|·@y¹ÏÇ:kö‹�:´µ¨ŒÈï~eò×1lGÛII©ÏÐ:A‘ÅOgα¸S0#ªUR\.³=jÔvm[[½¤¤4Ö†²2ÏÜÔL©ñóÞÆVKx¥a0è{v÷ìÚpé,ùü‹¹¶P³µæ7NõŸj“ü|Û»²kûôìjõ†As»uî`õÂ"Ÿ­uc±ÏßÚ²Es‹@@@@ —ÈfÍå£Oß@@@@@ )M‘Û¼y³5YùqM›Z½_ß^Gí·‡ÅwÞŸj‘lVCøÎ¢<ÖŸek6mêY‡ºóûw¾0©+lÝê›W†¦æëlÞ¬À–tîÔÞ¢fóÜ´ÉÇ@ãÆ>i*˲å«lw¥AÖê”i_TØõ¬¯<#¸_Ÿî»ÙšVHÒCe×*K4¼‹­[œRËóÕÏw!Í›ù_¨þf•µÚ¢y3_Ìr«Ö2+«ˆ € € € €@ý|‚ƒ; € € € € �5)ÊfUžã5¿¾ÙàvîN>t·¬¾fÍ:‹¯¼ñ�ÅÑíiQeíºõVÙ¸Ñg~\·~£×‹}&Í¢%>#dËžUײ¥ß¿>E9†ÅÁÜ�ee>ÿ©ŠfÍæ£Tžæ¶gR÷Í":c¦ç±j.ÑþÝzX}C`¥v(1õ™†óZäÖµ³g°6lèŸãG­EpÔRŸÇ*“¡»V%¥÷þÇ3lÉŽƒû[Lý̶sæ/¶ýjŒmóéZ,Zb±C;ŸC6õÇÑvj¥ À³Y5�íÂÅ>‡r¯î],.]aQã¿Y°Ž=¤ € € € €9.@6kŽº� € € € €uh8wî\ÛF×®~'ñÚ•¦Á,«Q^»d©ç¢>òø‹?šòyì%GŽÙÇêÇ}¨Ee;>üè³V¿ëÁçbë„+�sœ=LÞ,®º·û‡“? ï´B}¯=v²%ñ³jVX-Ὶ·È¶¹déÊj¶¼ËŽìYͤYÍj Jó®Î_Td[^³vƒÅòòr‹mZ·´Ø··Ï|Ú´‰Ï$›%²Y5Òæ/ôÜÕ5k=ƒ{s0wmûöm¬Þ·W7‹yyõù]ˆ”fÏYè- rÌ›ø|»úõ´XPÐÄbíJi©ç§×¥D?óÔe/¼64õ;†‚`„çB¯éc²¶3Yë:Èù*ÙÚ¹¶ýââbër³fþë. ‰`\%J’í„JJü÷©Mšø¿êëWzáöPÏ�²²2ëˆîú£˜ý¢õ+~÷^»–ù§aõù NíÚÍ«@@@@@�´Hi6kZõœÆ €@= �ÍZ�øìº‚Ù¬@x˜�ð÷ád³&„”�ÄÈ:ŒQPI ã*�˜l*&@6kŒ‚JÈfM &›Š „ß½ÇÖ¨B6k�¸X@@@@¨\€I*wa) € € € € Q€�Y#B± € € € € P¹@ãʳ@@@@Èv�­[·&¤‹d³&„‘� € € € € €@î ð1kî{zŽ € € € € àcÖ„0²@@@@È]æfÍÝcOÏ@@@@ÈqæfÍñ@÷@@@@@ ]ÈfM—#A;@@@@@ Å[¶lIÈ™›5!Œl@@@@rW€lÖÜ=öô@@@@�`nÖt@@@@ÒE€lÖt9´j$°yóf[?//¯F¯be@@@@@úl!QÌÍš(I¶ƒ € € € €9*@6kŽxº�@¦ �ÍšéG�ö#€ € € P¿d³Ö¯?{G@@@@¾%@6ë·8x€™" û’Óš)Ç‹v"€ € € �>úÖ=¾É Kã#NÓÈr�øœÖ¼¼¼,ï3ÝC@@@�o è—÷úÄòÛÏ$ë٬ɒe» € € € € �# Ëf•—îô­YÉ Ë‘1D7H[}gž9šóRÚ,† € € €@ô €b²gb�o*Ù¬ñ&,A@@@@j �àlVí9>ƒL³µjæÖ´ŽU@�: èû+�—Âs²pFª3m–l ¬¬Ìz¢ë”îA™%£õ* ±¤oÑWõz(²pçQŒ«,<´õÚ%ÆU½ògíÎWY{hëµcWú×ÿ¦«×CQo;稪®Q^^_�#›µ¾äÙ/ € € € €d‰@R²YeÎ Ë-º�Y$�ßtegw¥I“&±Ök†ñØC*ÔQ@óA3®êÈÈË+è.Œ« ,<¬£ãªŽ€¼¼R]Ãó$Vº ¨‘€2XÉ•®+§L€lÖ”Q³#@@@@ÈN>fÍÎãJ¯@@@@@ e|Ìš2jv„ € € € €Ù)ÀǬÙy\é € € € €¤L€�YSFÍŽ@@@@@ ;ø˜5;�+½B@@@@�” ð1kʨÙ € € € €d§³fçq¥W € € € € �2>fM5;B@@@@�ìàcÖì<®ô @@@@R&ÀǬ)£fG € € € € ��|Ìš�Ç•^!€ € € € €@Êø˜5eÔì@@@@²S€�Y³ó¸Ò+@@@@H™³¦Œš!€ € € € €@v ð1kvWz… € € € €)àcÖ”Q³#@@@@ÈN>fÍÎãJ¯@@@@@ e|Ìš2jv„ € € € €Ù)ÐXÝ***ÊÎþÑ+@@@@@ Éd³&˜Í#€ € € € €@¶ üîs¾'€h ÇIEND®B`‚repeat.png000066400000000000000000001076641523260663500337050ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/fig‰PNG  IHDRÖm�Æ& pHYsÄÄ•+ IDATxœìÝw|uþ?ð÷ÌÎlßM6½÷J $¡Cè)JQ좢œžg»ö;½ÓÓ¯žåD{ÃCzD�Þk %½÷º›í;3¿?&,kÒv“ ð~>îq�ÙÏ~泟‰ä•Ï~æ33DQQ „Z­Vèn „ÐG­V“B÷!„î\Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0ÁH0啵ï~¼~ÃÖ,˹ªM‹Åz)3gÿ¡³®j¡>E Ýt+±X¬/þ¿O»_ÿ�¿>!Ó¯¾ñ™Þhq,Ÿ91uÆ”‘…Å%õ4%"I¢ý¾§Îf¯Ûr¨óögON›6iÔ54åä–Wf]+1š¬ðź½Úcû½žzpf|lx÷�¡¾ƒ£`$˜œü2ˆ‰ r¾©ÚÚÆõÛ�ž¹”o4Y5nŠ…sF»»©ø·4j¹·‡Šÿ%Âð¨ÇV¾¶º×ïv GÁ¨Äbúƒ¬0™-V‹Õ^xä䥽/F„ø<ºt¦ce•JÁo<¿b!\ŸiسÿÔ™Kù`³1WrËà§ç:pÞ¾×£K¦NŒ¶¿ô÷qpÑÔö=ùfý¾Êš&û˨ˆàG—L­¨ªÛóë…èpÿôQCìo=÷Īªëßüp}ûú³&§¥ Žå·�&óW?ìMIŒÜwäÒÙK9á!~ìï!“I{×±˜¾š[Ì�Ç+kšN�Íž<~èÆmr *jêuwc`^XZì8=�P÷á( GOe_Î)€†F—×~¸v˜ÍÖë«•r/ÏÁ÷‡gY,Ö}G.]º\|-¿†§Æ¶ß+À×ý‘%3Ú—ùÞŠê&Ç’‹™7Æà;ö�‰ �Ë¥Í:£—FÙ¬3Z¬¶Áñ¡)ÉQ¾Þn*e/Ž!{òº0…1‚Q/5j �Zƒý¥ÙbëÑz/™T"“J’â‚3¯–šÌV’$R’bÚW“д�·G‡åŽ/«jêÏeòÛ^e]c˹ŒœwM˜5u4\ŸŒNž’ÜAÊ#Ôm2×U)ŒŒzlÔð¤ÒòÚ˹e¿{|®B!{ãß?p÷ÄÓã»^Ì`4™/_- Ò†ÄÀ˜á‰™WK`ØàHû:â^ØóË)¾‘3—ò#Býâ£é)ã‡þííÖErº#lÚul×/g`Öä¡ÃÓzýYèÔaÚº$…1‚Q�)äÒƒÉưk¿ÝäÍqœ˜¦"ÃoVŸå8()¯)Ýzàô…\«�?rPÚ�8›�9uþ _§´¢N¯7*²^ö‰€@_M\tÝǼ»Æ“ÑØ¬w¬b4YùÓ€V«­—Ÿ‚îH�ä¬ó)ŒŒzŒ$É%ó'½ûɦƒ™_m6iLÒÍÎ¤é Æòª8~ö_¢VÊý½õz㦇.dñ…ÕM_¬ÛýÐâêߎ…»¹"bèàØƒ‘¿ø•mö_ ~"â�†¥êùá¢;]ç ‹£`Ô¯X–««oºr­HLS¦ëgÞ~>|±¼ª.2,ÀËÃM©”‰ÅbšAÓ”ÅbmÖµÞ+':ÌoüèäøØð¬Ëùÿ|]‹Á F%øûyþ°åp^Qõ?ß_wÿ‚‰Iƒ¢zÚ«°RD^¹VäºE¨?`£¨«ozwõFƒ©õ¶gbZ4$!<¯¨²¡IŸyµ”ŸÕu´láÄ¡)ñaA^n*Å” i!A~|9˱|þNŸ0dæ”QA0 »aÇ1›�µßÏ�×Í{D(•ò6Þþð‡òêFÇ’ï6ünÓA~û//ÜßæƒF0ê/O÷©ãSö<<8!Z.—rW^QSY]_QU¯ÕéõS‹Þ¤Ó›LfkrB,[4­Í:ܔ䨬+EãF ñçKÆŒH ò­©m°ßÂß×söä4¥RÞá="¦ŒKÑë�A�>}|Äõ-¢¨¨H«Õ Ý tË`Y–»>Ù:Ð�&]‹A,¦íwªDh S«Õ8 F=CÈðåÉdÒ^__‡� î¯BÝö0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚¡„îÀ­Š¦i¹\.•JE"˲$‰Ìº=ñ¿à ØL&ƒÁ`µZ]Ø8Fp�áîî.—Ë ‚à_Rþº�qG’$MÓJ¥Ò`0455qç’–1;z† ‘HD’$Á¡ÛAüï;Çq2™Œ¦éÚÚZ—¤0~}îwww‘HDQæ/Bw þ[/EQîîî.i#¸øù_‘H$tGBB‰Dr¹œ¦iç›Âî™Lfÿ>‚ºcñ! —Ë�o #¸d2™Ð]@ AH¥RçÛÁî‘H„C`„á’9IŒà`Y#!A°,ë|;Á=€×_ „ì\w]ð±Sj•kÇžã7ë†Z¥xñ¹Å®8 V ¹lRz*¿Ýؤ»�™«TÈX–5ÍÃSãgWhŠòñÖd\Î ôõШ F“Õf;v:ËjµÉe’!‰Ñ—sŠÄ×/|¤hŠ$ ‰Xl¤Z§‰«k«kí­¥&Ǹ»)í/ƒ¼}½5mú–[PîÂ#Eè¶!“JR“c.dæf])LŒ¿‘Â,Çñù;$1ª¯ç*]ÁÚCaqÛ_õÆ&�ãKŽã'FΚ:òí�7ŠHòž™#ÒG 9{áÊw›JÄÔƒ÷NNÔ6FíÆ ‹»{ÆûKÇoßpuP@Û/à ¹03¡Å^n$IrÀI$â²òš¸˜ëär©\.% B©”54jKʪ9‚¼-V[K‹Q*[­61}Óÿ.¾Þ𨍣`‘è7ºeR 2ÓMã‰8„:¦TÈR’¢SØ>þ’¥V)úº.‹àܪ÷×nk_ž#/†Í¼R¸÷×sF%”–׿Vhu†ç® i0š·í9QVY;mâˆ6-huzƒÑ zƒÉ^¨7˜4î*þ¯–ÕÊt:Áê2Çuy{ºú†æf­>%)º¼²8.8Ð'órA`€wûӌǑ$áî®li1†û•VñŸ`±Úh1ÕúYÁ˜L›�³ÅâØŽL*áçªø+G:è!tÝs„îL ¹tHbÔŬ¼ŒË‰qá—sŠšš['Dª”òÎk\ò;å²NKŠxpñŒ6…;öu<g4Y"Ãü§ŒOÓêô&“åÞ{&ý¸uÿ³�Þ�}µPo0.ž?yë®Ãí/8ùßÖÃ6†€Ó3¯úÆË©T 0[lMÍ-e5mvÔL^]/�p!Žã Š+½=ÝÜݔ啵à©QkÜ”×òJR“cÚOêkÜUb1Ýr}žX–µZm²ësÁŽò ËùÿäöÉÞèa ‰˜ß×l¶´9+V›M 4ˆâ)²Á ‘³òNžÍf9nHb”ãšý>Õ¯sÁ:½11>¼ªº�ŸæW8œºÐ¬² ÿöLJë³Ë—Í\ýÕ®UËçî?|>ÐÏkܘ!¶ýš’Íç¯ÅjÓ¶·ÿ|~>ÝþCƒúuy@nA™ÉdIŠw,ŒŽ:{ñÚµ¼ûeü÷Z^©ÍÆÄDþf‰Ùb©ä·ÓO@B\XÖ•ÂÁ‰‘Å¥ÕJ¹,4Ä÷ʵbo Ÿ¿ ÃZmLqYuqY+¯ûíßB·(•R>$1*ûjQr\Xþ¾ô_›Ì£ÉªTÈêê›ý4«ž\èønFvÞÎ}m3tëžSAÌŸ3ž9qlʇŸm?~öªˆ$¦MÆ646Àë/?Ô~Öæ§_NÜl*G§Ó¯ýfgjrÔÄô4ç�WX\Y^Yèïe0™ &³Åbåš´àãí^YÝ@DtDPUMCqYµ�a|4îa!þºƒc#%ŠõgXÆq’·¨´ ì !B‚|3²ó«k€ ÂC[/{3M0jX‚TÒvÀ›[P&èú„n!*¥|DZ|?ߦÿ"¸©I wuQIUyUã+o|îø.ËqnªÖ¿<᡾ޚ£'3gMJ7zˆìúõ‘áA#S¢Ïf俺j‰§‡_˜“[è§é0jgNÕ¾�×Ш-©¨—JÄ®Šàªš†âÒªØ¨à‚¢ŠòÊ:{ù¥¬|‰Èبàœü2¥BÖ¢7ª²¤ø~vØÁþ>Þn4E…û�8“êá®R*d¥å5ÁÞ¡Á~öuxžµ·§[]ƒvxJœüú)Çú†f™TÒ>ÀñR„P'úÿ>\.‹às™ç2W·/·ŸŽ+¯¬óóvãW2„x¾ðÌ"Çj—²r·ìn]C¦V)øH•JÄ2™”ŸµXmWs‹C‚}‹Ëkwì9¶hþd™TbµÙŽ�¹œšÜãûH„†ø¿¸b�‡Æ­§;ÞŒŸ�‡\&Q«~^|IöÕBŽãã#ìuÔ*…R!cYÎñ’6‘ˆdX–e9‰DÌO?X,V“ÙBS”D"æ'D”Èž¿,ÃÖÖ7©U �Þ˜[P6(.Œ¦(†e+«¼½\ó$„P¿é¿ ”¯ä'Å…ñÛ%õ+_k›×·Ž' ŠJ*`Í×»=ÜwÏõäCw­ùjû¿>øá¹'æ�¿t­¾±edO®‹³ ôíÅ^�èrý ?ìuÌ_pW+E$yèøEÇB�»ªýŠ:~N#ëJ!-¦#Bý‡$F]ÌÌ;uîJjrteU½Ùb ðvÁa „ú‘k"xPlXdX`û ”iš2›­üö˜I$A€»»rÊØä铳ø¬¸´*ûj¡c‰·—»›Jj•rPtà¤ô”Èð`>¿žúÞŒì¾s"¢±±‘¢(‰Dø@{„î4Ç1 c±X]’8 î‚ jkk�F#˲ Ãà :„îüÉ7þWÞh4ÖÕÕ¹j†£à#¢¡¡A«Õ* ™L&‰X–uÉò„ÐÄÿ‚3 c4õz½Ífsáï;Fpoðÿ=š›››››ÁEwnF Xö1/A®oa÷A8Œr~}F!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`ðå^¢(J$QÅß o�Ð튿A6›�a—Ü&Ø#¸7är9Aü-ƒE"Þ& ¡Û§Jþ¾,Ë WµŒÙÑc*•Šã8‰D"‹išÆüEè¶G’$MÓ‰„¦iŽãT*•ËZvUCw¹\n³Ù &/Bw ‘H¤P(l6›\.wIƒ˜#=@QA2™LèŽ „„$•JI’äŸaæ$œ îþnÍAàÉ7„îd|à³ãúEQ8ÿ€W�‚1Pz#!®‹ ”žÁF�ë¢ç‚{ ó)`:§F´é4S«%8h?GÄqÀ@z«Ùì1¾}ØK„P¿pÉ9!D°Ùl‘HÄ{~9êçë%Ó7«YßÐܦÓ‰X¥l]Û±iÇÁa)q!A~Îw©ÿÑ95ìÚ_ÜiE�íçé9޳qls­–]»Ÿ~rŠ5Úǵ¸r­@¯7MM°X¬ç.\N/•ˆ]û!—s6‚†}óƒ`æÕÜÒÀ¯#'2Œ&KÖµÒ6ÕÎ�>zÈûÿݬm1:–O“èåáVXRõÀ}Ó3¯ÇE‡8Ù¡ˆ6�&Xð+nv’” šyŠõ=¹éŒõåÙ®íÀÆí¿†ùMMÈÈÊùï·»>IŽumû¡¾àl‹Dä˜añgÎ_€f­þBVáKÏ-š7›€O¿Ý•6rhÈeRxý•G¶í> sg�{õ�ÏZ456:ôÈñ‹6Óù§TTÕjÜÕ2©ÄÉÞö¦VëN˺\¤B„-k®ÕvÙà÷ìúåL'Æ�LXþð|~» °ôZ~Å¢ySàÀ‘s#Scd2i·ûŽŒ³l±Xýý< ¯°²¥Å˜>b�\&¡iÊÆ0 M-AþÞr¹®Gpï—V¾·fKl„ÿŠÇæ9ÙÛ¾Cp@Ýšž§’cÙ.«��’”e¹eç!1MÍž>Æ^bŸÀ€}OÇFÄD…VVÕf\)€£§_wlíµßßÑ�î!tçà8nÿásǦˆD¢öï2 óëÑ “Ç¥¹dýïÍ8ÁWrоøa¿]VÕ%åµîjŹÌørý/@‰ÈwÿþÔ¥¬\{ÍDz`õW»4nŠÉcwþwu�ŸG\t°“]íSÝüïDÙ�š�¾�7ÎÚútÓåkE/¯| ", ¯;àlŸ8“y)»pÕ“ ÞùøG…B–>"¡¢ªŽãZ—@@n~Éš¯w@ssË·?î68ÒÝí7÷y‹‹ Óhªk†íÎ7tq窻Cô¼Žëh¯‰éi3¦Žþôëm4-zõù‡¥R ÇqÀqðúË�×W�ãM-º™� Ÿ—W>ðÖß½÷ÉúgŸ¿öëí|þ†‡úwþ‹3 ÖIŒŽŽV*åR -¦©C—r–.˜üë‘ w߸ëxëgˆHhÖµH$ô¼9ãøÂ©ãSVµ‹Oê_ž=—Qàˆ×,ôLXh }[úÛ#¡!8�Pw„ûþñ¹¥ÿúðû?üåc†aùüíŸ�v6‚¯æµ~?¿ýõ�àÿVoJKŠ˜;}ÄØ‘É�WPúùºŸ $ÈïÙÇçÛOMLO»”UÀoßï´ûïu²#¨­â’ û(ØßÏKLßô’„Px¨ÿË+ïÿèÓÍÏ=1?,¤Ÿòœ�àøØð¿¼p¿Õj}óÃY<%8З `çÞ,ËÚæÆ¬ªšº}´Áq÷²Zû`9%!ìᥳÚ„N§_ûÍÎÔ䨉éiNö¶ïpp×�Q'Çql¿L üù­/íÛoÿí)\�P§ÂBüßþÛÓ"Q¿ÞÆÙ–JÄR‰øRV.lÝ}|ùC³ü¼`Ǿ3;öµ^Y@]?$/÷—ž»1Üýfý¾A1ÁCSâø—qÇÔ64jK*ê¥ñ€Ž`lK¬.lÃÆ±ÜB¢|³ú5œˆ@¨Gú9Á%+"ŠK+Ørð�Jʪ?þ|ûª'çÏš6² ¤:6" ÀÏs×þ³�-�Î׋i> yR1­qS9–t(4ÄÿÅ <4nÎwµï�ÞêæZm'(ó8Žk¶E>]ËÅÌkï®ÞоüàñLÇ—Ï=6wøÐ¤^ô!4@8Á3s¾Z¿æÄ”a©ƒ†¦ÄK$â­»ŽäVE…ù.¸{‚XL3,»æ›Ý�ß?=ûJá±³×Úìî8Á{mÕbo�6Õ‚üi:fþPîÓõ½[ç·é±ØùC;o-",èOÏ?Ðå‡úúxö¾Ç¡ÀÙŽ \ñÈì˜È bÎô1U5õWsŠÓG‘$L7”¦)O·IãÒFKè²Awwµ“]„5Æ—^>™Ü|¶¹V˱¬®c9BäãÆÎÚåmÒÔ*…Z¥èþ§‡ûº©•ö—R©$1v@_LˆâEEEZm×w�A •J]õØT„ЭÎ`0˜L&gZP«Õø ˆža»q‡„ÐmÏUQ€Ü3Á!p]àƒ‹zÀl6“$Ùá}íBw›Íf6›�oGÁ=À0 Çq ÓÅ æB·7FFpÏØl6''àB·:“Éd³Ù\ÒFp�$©×ëùÿDZ0Bw †aì!à’çØã\pψÅâææf¥RiµZ†!¯º_¡>IJ,˲üüÇqÍÍ͉ke‰Üc‰D¯×AÓ´X,æ/„Ãò"t»²ÿŽ[,«ÕÊqœ«ò0‚{G,³,k±XL&“ ï㎘‚ ‚$IŠ¢\û­#¸—H’ßäÖn!ÔM8‰‰B‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚Á«ãzC$I¥Rš¦I²ƒ‡%#„n?DZ,kµZM&“ o”ˆÜc …B*• Ý „P¿"> m IDATB$ñÃ/“ɤ×ë]Ò,NDôŒ››æ/Bw8©Têæææ’¦0‚{@¡PP~o@EQ …Âùv0‚»‹ÿ"t/B…T*uþa¾ÁÝ…ù‹jÃù{·cwMÓBw!4°8ÓpŒàîÂÄ!„Úp>0Vº«ûëwÿ|tçžÃ]V+.­Ø´í—›½Ë0챓šµ-PV^ýÑÿg³µ.E¼”yíüÅ+Ýì B¨ï8YF°ëU×6T×4tY­¶¶qËO'nö.Iç.^ûnýnðòÒäTœ9Ÿ‹õ«öT×Ô»°Ã!¡à+0MeÕö—�M:–esó‹í%¾Þžjµ²û Z¬Öúú¦ñcRÞùøÇiÙ�>CGoÙu$,$àØÉKV«mP|Dm]ƒ·—‡+!Ô¢"­Vëd+3ršµ-ãǦÀ•k…g.\}pñL8u6»ª¦aî¬t¾ZN~‰˜¢ÂBì;juú]?¿kƘÂâŠØ¨P±xàžòòôô¼Ù[…Åå~ó‹Nö]µ|þÐÔ„6…gÏg¿¿vówkþܾ~iyÕ+¯Úy"B|ÿþêòÎë „úZ}}ï¿’ªÕj׌‚kê«jùmƒÑ\^Õú5\×b¨kh¶WË/,¯ªi|Ä!‚-ëÉó¹SÆ=yöÊ¡ã�/›#•Üz�% tLÒ/¿ßÎ2ìcÞãd³Ÿð’ä&?�#ÇÏï;xÖÉöB‚såDD]}ÓÛÿù‘aXÃþéŸ_D…ù]È.€•¯­¾kê°)†ÅF…ü|è¢Ñd–I³˜N,¦Z2óóowæä•$'Dµo¹¢ªVã®n³×íá�§^w|ùÎßžò÷óæ·m6[S³®M}ŽãÜÜTýÔ9„Ps6‚u-]‹¾Y«7M--†G—N/,®8u>çÑ%Óår©R!«¬i˜7;]¥”@H�ßk¿_"“JÞýx}IÅ�Ñû_þõ ¿q5¿â�¿¶�Ž(.­|oÍ–Øÿ�Ís²·}A×¢¯ª®s,i? Þ^îEçŸ_XæøR£qwµêÉgkuúÿ¶¦ý. f�ž–p÷ŒÛðBwg#øbFÎÆ]Çùí+y[Ÿr^h�oUMcH°xS”((À¾Z·›Ïžœ¶tÁd«Í�Mº/~Ø÷ä²J¥¼µCín qWùyÄE;ÙÕ>RXTþöÖ·/¿˜]äøò™Gï5|pûj±Ñaí U*EúèT°ÏoT×ÔïþùØÉsW¸w ÿV`€¯³]G Í5§ã~>pªª¦ñÁÅ3 F“Á`j_ÁËÓ½¡QÛÒbxï¿[žj^H�ŸV§ÏÍ/ öý½uéÁKY¹É QŽˆNNÇÙ]Í)|ã½ïþò‡c¢B­V[m]c€¿÷Í*wr:®½çþøî�ÄÈûæOU)]pg„�« ˆÓq<†aŽŸÊܱïLû·>øÇ �º¡±Y¥�òƒâÆFíÖŸN®\Þ:·pàhFXˆÿ@Žà.1 »nãÏãF&ÄD…ÀÉ3ßoüåŸ~ÒCÓã›Úíûõä×ë÷µ)üõxæ¯Ç3K>ù¿ç1‘º¥¹&‚Y–Ë-¬üË[_¹«) a/�uîâÕc§³·|Aaqùûk·ñÕ._+ЉðolÒyhÔ&³…¦œ½ÉЀrôÄùÊêÆUO/æ_Ž9äÔ¹ìÏ¿Ýþ³÷÷ô*Æá© 1Q!Ž%o½ÿýœi#E:Êe2'ûŒ–³œy9ïà±KyEÕ ™8}d‚ÉdiÖv|3y‹ÕvüìU£Éz6£àµU‹kj}½]sÏã� ªºî›÷=±l¶}ÌK’ä’Ó_ycíácç&¤ëQknnª6Ë(éëíp³]B·"g#˜eØ„Ø0wð3§Œ:vòÒÁÙ^[Í¿»òúˆiê­??‘u9Ó®£žîç3¤%GÛß‘°,G’·Þ£Ø›?þl#DaqEFv^³VߨÜRß ÓͰ~ëÁa© …¼º¦^«k±ïU^YmN@XH MãU‹ÝœýUœ×OÇñ%ñQ ïž�y9ÿܥ܇—Ì()«úúÇöú—²ó ßþÓ‘ÚzíД¸½±µ�„ðw?Ù ýÃým&Ou:ýÚov¦&GMLOs²·}¤¹YWXZ+—Нä”x{ªý}=ãcBÕ*…J©P(dÿùlóÞý'æß=ùбsÛ÷žj³ïÿ{ç›6%üó9Ow~»®¾Q¯7rVãüÍ¡B�ëG[R‰ØËÓ]­RˆÅ´—§»®åƼ„Ùb½�UøÜãw>~é‘%Ó¤R‰=‚ïž™>yüP¹¼í�ѵ%õR‰xÀFphHÀ‡oþîf§ÝžX6‡¿Úâ¾yÓî›7­G-W×Ô¿õáÿ$4Òõ¡[Šë#Ød¶ÔÕ7iuz‹ÅZWßÔØÔz}Ër;~:jµ1,ËÞït~Â�¦©áC¢(J yÇ'—BCü_\± ë ú I’�t/)!úfou)!>êÛOþÔëÝBœ³l±Xš´:½Q$j=é%¯âõ÷ÖñÛö 8~*£ ¸jΔ¡}¶#5)<59F©”‰izbzJ}CsUu½Á`Òé�‘a¾>mWàâe¡Û�³̰컫7J%â%ó&€R)Ÿ>~Ȭi£íªjê÷:ͺ–{f�‰‰ œ}13gï¯gšµm‹ D"’¦H±˜–Iéø˜P'»„B· ×\× ËŠnågÿtçê8„Ð�ÆÉ«ãú/oéüE¡¾€±ˆB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`wÇqBw!4°8 ÁÝŲ¬Ð]@ ,ÎÇFpwY­V¡»€X,‹“-`w—Édº ¡�#¸ÿ0 ƒ)Œ²3™L6›ÍÉF0‚{@¯×;ÿGݬV«^¯w¾ŒàžinnƱ0Bw8“ɤÕj]Òå’Vî(z½Þd2I$±XL’$AB÷!Ôç8ŽcYÖb±˜Íf†a\Õ,Fpo0 c0 ƒÐAÝÚp"!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚ûV­‰~èpÄÛþBw!4á�Òz�03dQ‹ÄÖî ~"ü噈]y2$«Q^¦—ü1¹Rˆ>"„4Œà^21äÛþ[Š5 ×ñý‚E÷L|õµfðHLm?w!tKpYWÕÔÛl­·1–JÄ^žî®jyâ޺俹أ“:ãýu3ƒ›µVJk!g6õ[ßB·—Eð÷~)©¨ç·iJô‡ ý|=ÛÔ)*®`Øv_ÚøxiT*…«ºÔwôVrk±¦“ ÑjÓsƒª½¤¶¹enH‹»Äe÷ØGÝN\Á/<³È`0}ôÙæð?Žã¾üaϳ�ÏS)åŽu¾Z¿¯±¹³Þ=~ÿ´¤AQíË+ªj5îj™TâªÞ:ƒ(l‘²pÓçyHl/%W),yÍ’÷²ü>O/\ö!t«pY ¦Ï¿ß¥”ËæÍÇqÜê/¶®ùrûS�Üí˜ÂûãCömŽãVýé“§œÞyËÅ¥•ï­Ùá¿â±y®ê­38Œ¶›æ/Mr«ª¹Z¬ä §CM i´ø„9„P{®Y”V]Sÿñç[ {`MSb1½üÁ»hZôÞ'JË«;Ü…ãº;0Ô¸«ƒü<⢃]ÒU—àn>~4¦v¼¿ŽÁ §B* 4ÀÍ+#„îpÎF0˲GO\zû?ü|ÜŸxpŽôú\�\.}êá»#Cýþ½fËÞý'M&s›­VP”¨Ë�P«/>·xÒ¸¡NvÕå¹Õ1_§6/ kPÑÌ;~çë['µq!t3ÎNDddçmùéÄì)öí=u6£ }…¹ÓGì?zÉßÏ‹ã¸/~Ø×æÝÿ|±³MÉÿXád—úÍÌ ¦%‘õ¿Vª¿Ìñæ4Ƨã«5ÛÖbÍ�…mOE"„P{ÎFðàÄè� ?�zPl_²cÏ1‰Dpøì�cYŽ%g.åóSÒ“ïš1Öñ-›�Ù¼ãPx�÷ ø�ú�Õ›ãÂâ#nÖ¸N§_ûÍÎÔ䨉éi.é­óB”f8ˆ×λ‰‹Ò¼ôÿï|PV£¬MMÁ…(ÛžŠD!žk"xî¬qsg�ã·¿ßð³\&™7§ã^‹Õöíú=%µ/¬X "ÉÀŸ»§ ÿfÃþÇï§¢#C:Ü¥¡Q[RQ/•ˆH¨Åìxݯ•j03ÄSÇÂÜÅLûñ/LðשÅ,. FuH´jÕ*³Ù•ôÌËù4MÅÇ„µ«¤¬ê›ÿí-.¯{æ‘»‚|øÂ�`¿ÆÆæÍ»OŠ)ÒÏד¦Ú™»›*).dôðDš7"€Hµ©ÖD—´ˆ9 8 ŒLÛå}$püuOÇW{Im$F0B¨‰DBiµÚ^7Á0ìóYÓeµ¼úÈ™ó—·î9è¹dþ¤?oÇw9Žûù×Ó?8/S+Ÿ¸'Àßûfí €…!*�â*]a3lk¡EB€Ìâ/·úÉ,bÑMº³©Õjg#*ªº¾£¯�guM}aQÅÈaI"QÇ׃ÔÖ5^ÌÌ�2aq+|oçXް±`aIÀñZ?‚@L² $�ù‹ê˜k"!„P/¨Õj|pB #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B f@<ó––«•n.ò8^£¬2Ðà'·Žöi™Ö­6 ݵ¾b³1•Õ ¥µèíçãAQ"¡;…Ð- \Ô{–x;ÃC¡'×î-àÞðú?&WŠÉöoÞÚ�È8{áà %åµ$A O�M™$t׺Åôá³ãJË«·ì:ú»å  M&³ãK±˜¶Ù–eí%$IŠÅ´Ë;Ó,,±âxøéZE'u†{ëW�.ì~ kuz•R^U]o0¶Ž #Üí¨K}òÕ_/Íü9cÛ”oÜq¤±I÷IJY=jM«Ó¿÷ÉÆç¿G.“üë£õO=4ÇÏ×Óu�Eh sA·yˆý‹Ï, ð€ü²?ÛþÁ?VØß2M¯¼ñ…ã¾/<=ïþÓY9eö’‘©ÑKLíugúÓ~,ì:/…׿6¤¢; šÌ–7ÞýnÂè¤êÚÆÓóøÂUË熇Úë|¸vS~quçíüý¥ÝÔÊî|bO}òÕŽÁ ‘£‡ êðÝ£'³²sŠŸ|pv—íXm¶—ÿþp0,+"I€Ö þÙÙÏ>vwxh}¼õ5µZíš¹àGOñpW¿»fó;ot,_ùÚj~cáìÑi)qp=£ƒ{áìÑ飇À–�‡LfK‡íWTÕjÜÕ2©Ä%½u^®VºÁ!Ó|mßÝm‰ð@A�eé6ñ…šÖì�…ž÷Etk^øÔ™,³Å:rh‚R)¿ÿÞiðá79‘éÁ0sbjâ ˆ†FmN^iUMã¼9é Ã44hó‹+ròË—.˜¤TÈ\y¨×:‘á륹YþÀØ‘‰Uµ GNf¥�Lì²5þôܽ ¹ì/ÿúæÕU‹åré+o|ñ‡gøûz­úÓ'7¾7u¼õ×D°�·ÆÛKÝ7)ÀÏJʪ¾ß|è•ß-â+(•­¿'m26î:¾q×q~{djtûÆ‹K+ß[³%6ÂÅcó\Ò[çm.ò°‡DŠ�íäã%’ó/ãü©ÓO0Ã?µñ)Ìl.Ò¼”\Ùyƒ£iϯ秌¢TÊ텓ǧ®ývϬiM^îöBš¦>þ|;)"Å´hö”áŒ�ùä«�7å´ ©>Þ"‘ëÏŒÙlÌÙ ×^XqoçÕÌIoͦÑÃâ»Ó‡ÖnåǼï|¼�ßø`íÖÖa°AŽ¡~ãâ>ÞütžÞ`Ç©=~~ó÷OÎ ðflÌK¯Ηß3cÄØQƒ`Û®ÃVÓ¾M�»:ÈÏ#.:ص]uÆñšß|×͵Øó—G‰Dëæâ?¥®WVtÁ»ögXv̈d`Y–$Iˆ� óõRïùåÔ÷M·×T*dÿxíÑKY¹ç3r‡¦ÄÀ›~ü—ƒgôcÚ�x_[•Õ Ý™Ï&‚eØÊ凵.+¯\~? ~ñ™{ùQðÊå÷\ß Èñ"Ôo\Á��:¨®ipçÚ'"ÞùëüÆ¿ÿ»¥Í¾[÷œÚºç¿Ýá(X­R¼øÜb—ôÓUøõg<~þ¡ ÇBÇÊ:|üÂÑ3WïŸ?žÿN½kïqm‹aé©$IΙ6òóu?‡‡\3r0_9#;Ý–CüöÊ×VÇG\Ék�k>p,K­”½þÊ#NYÇJ+jùõ] ò)-«éNÿë£ üÆëï­kSâH�ãE¨ß¸&‚×~·‡ßðÔ¨_[u#.Ïgä\Ê.xdÉ š¦l «–Ï ô÷iýlŠzhÉLûŠˆí{Ž1L£àÛÛµ¼âM»N Ž–:t-†C'³§�B$'D�ZüãŽcE�šÀqÜàÄÈYSG¾ýñFIÞ3sDú¨!g/\ùnÓA‰˜zðÞɉƒ"…> ®Y­¶ÅsÓ;©PUÝä/‘·Çñ"Ô ×DðKÏÝëí¥ùÃ_×R4åãía/wS)$4íXBÓ4MSm¾l.ž›>jxM‰n•ö“[ u­ç ê,qþmŒuûÏÖOní¤)oOMR\ð’…SøÌ=t삘¥�l¯°à® ‹54ĆͼR¸÷×sF%”–׿Vhu†ç® i0š·í9QVY;mâ’l;£ê¤�@ïc§³»S³´¼fìð.NÇ ¦ÿm;2mü`‰¸ƒ/×q Üñ"Ôo\<Üþl¬|mõÒyã“~3`Yµ|®¿¯|¹î'×ö¡Œöi±GðÒmâÓO0”ÃI!Ã,Ý&v¨¬ë¤)�úñewñÛuõMû�f,˜=Z&“Z,ÖÂâŠØèPŠ-[4ƒ¯`4Y"Ãü§ŒOÓêô&“åÞ{&ý¸uÿ³�Þ�}µPo0.ž?yë®Ã,Ë’¤‹ÏPùùxðKÇ:Çq%¢üý<º¬Å¥5ôM®©›˜žÂŸdêxê7.ŽàÇ–LU*åf³ÅÓà &"” y›š"R$¢Dp+aæ‡5¬Ëo½(îB 5üSÛº¹†¥ »Ùì¶ÝG½=T#ÒàjNÑç?ì{áéù!A~ö :½11>¼ªº�Ÿ=y!N]h]D|!«ðo|ÈE‡ø%–³qÇ‘…wu6�°aÇ‘á)1]†µÑd€)ãÓ¤ÒŽGÁj•‚?')Ôñ"Ôo\ÁuuM À‡‡ÛÞ§m6fùCwá8a¿â‹÷îšÍöíäA�4®Óé×~³359jbzšKzë¼hµéÞðzû¥j(ûú‡6?ÒûÂ룺w³ˆ ×2®–<÷ØÝ4M@RBÔ èË?n=¸ê©{ù;0˜Ì£ÉªTÈêê›ý4«ž\è¸{FvÞÎ}§�=°›K™ôé·»�žÌ{“ ‘ÏÔéôcî×eS£>þrg'u–/›$àñ"Ô?\ÁŸÿ°Ï¾=sòˆÿ[½éBƵÔÁq�ìòÒs÷ò+ˆ?ýz{ç�74jK*ê¥ñÀ‰`øcreQ‹´« ”[^ìjE0¯®¡é[O“ÑzE²Õj›<.í£Ï·Ÿ<“Å/ÚkjÒ€Æ]]TRU^ÕøÊŸ;¶Àrœ›ªíW ×zbÙ¬ÿ~³«ª¶qÁœtÂa/ÇqvÑéô�Ý?³;í45é"B|ž}|þóYóÂÓó}}<ß[ýãøQIÑ‘ÁŽœ?{)ù²™Ñ‘ÁUÕu èñ"Ô\v:ŽÏSÞô‰)?<Ÿ’ÛÉ.Ž+�ãÃ;©âÿâŠ7çûéBb’[=ºð� ÿor›žûÂëÿ˜\IwãZ�þ“/¶›ÌÖü¢Êw>ú_‹Á¤m1²l뎻~9“28F!—•WÖùy»ñ÷Ð ð|á™EŽ�\ÊÊݲû¸K­O>8ûÈɬ¯ÙÄ0lp�”–×P"Ñð”ØîŒyÙ׊¢#øaà ¥Å�öÓ�së·MKŠøÛ—)ä2Ç‹P_s6‚I’Xñðl�»Ú±pÜè!1‘AUÕõ�Í:ÕÁÌ %"Ÿ~Ø~O®¤´*¿°¬¡Iç®îxPèëd?û‚˜ä^Rq_DÃæ"Íñ•ÃÍ*uóû³J¹Ljcب0_w•Z)W(d ¹T!—Êdš¢>þrÇácgNu%§8).Œß¥¤¢Þ¾æÚNãÖÙ�ÜUÒG&Ž_YÓXZVc‡'úûuëd¯¼²6ãJÉÌ)#®åÀ¾Øn±2‰±A/¬X¸ý§£ç2 ê´á!¾ƒ£Èñ"Ô§œ�`‚ b£CÛʤ’ºúæu[©•²¹3FÚk†yÓ”ˆ ˆwÿþ”cý³¯]È.òÒ¨&�@S Ý­6½”\Ùåõo� (Ñ__|èf§%ÍMô÷€1#’øëwÝÝ•SÆ&OŸ<±ZqiUöÕÂ^÷¡GD"Q�¿Ww®¿h�‘SÇ ðó®©mœ8:1>&44ØO*•Àƒ‹gΜҘ“WRTZíéá6pŽ¡¾ƒ÷ F!a¨Õj|pB #!„ƒŒB‚ÁF!Á`#„�`0‚BH0Á!$Œ`„ F0B #!„ƒŒB‚ÁF!Á`#„�`0‚BH0.~|'B·Š¢D"EQüÓ=ZŸñÑ+üCž‚°Ùl ÃØl6—õÝú0‚jK.—!‰øÿ'»ýL�›aY–a’$9ŽcYÖ`0¸¤Ÿè6€ý†J¥â8N"‘ˆÅbš¦�Ï_ I’¦i‰DBÓ4Çq*•Êù6Ñí#¡är¹ÍfS(.IÞöD"‘B¡°Ùlr9>þ`#dGQA2™¬¯?H*•’$IQ8 ˆp.¡ë‚ I’ gN¾uÿ)üi:t‡ÃQ0B­(Šê£ù‡öpŒxÁÝПÜ?„8üw€Ð Á¨Ÿá¿„Zõõ°°‡&ÌFY¬6pøÇ$‘À0¬c±˜æ7öî?âoëô¹l©DœœÝå�:›][×4gÆÇB“ÉÜæƒl6†eo|:I’öOG¡ÅüÑÚM%õö— g�¶Ú˜m{OÙK2ñ?ÿô8¿}ðxVdx ý-†awî;=u|ŠcƒÅ%•ïýw‹ýåÿXÁoèZ u ÍŽ5 FÓ+o|áXòÂÓó÷î?�•Sf/™½dÁÔ^Bõל“]:oüˆ¡ ðùw;ù’”„°‡—΀ì«ßo<ÀêõFƒÉ¢V)O�ÍN)—K¯æM–´Áq-zƒL&]Ÿ ‘äžYPV^óýæC+_[íøY®¿|áéù^žîðâ3 ƒ|†}þ/kø·Î�>zlÙyÈd¶tØçŠªZ�»Z&•¸ä'ÐFIYÕ‘WóÊ}½ÜfLÄ—›-Ö�{Žf\)ò÷¼{æ_o°Ù˜ÃÇ/dd6é iI‘S' —JÄ Õé>—uµXLScG&Ž–ØfÓ›ïßÜñ_ýoŸ¶ÅèXžòØsì/·í>¬�˦LVU]wùZñ¡™qQ�íÿ,åæ—üç‹�ÓÇ™5mt_üLBí¹&‚×m9´nË!~;&".dÙ³R!@C£¶´¬ Œ&Óº-‡žÕ¨£"‚~9|~ÜÈ™LòîÇëG �3r0¿ A@€Ÿ·Ùl€W~·ˆ/<~:³º¶qÞìqüK�ÚÆ0ðÎÇÛôgã®ãwç·G¦v0ÅQ\ZùÞš-±þ+›ç’Ÿ€£ü²�¿Ø™>"~ÑÜqWs‹?þrÇKÏÞççë +ië’ IDATë6îkhÒ-œ3öòµ¢�>Ýúʪ%r™ô‹ïw56·L=˜¢È{Oµè�KNÕêôï}²1ÈßcδMÍ-v¥)ѰÔAöO©©mllÖ‡ûß¿`"s}⥺¦aÛÞÓiÉ1öj,Ë�ËÈbÙ,ȼ\p%·Ô`4C;«mÃöÃ.ÿQ „:çš^47}DZ|¹n_2xPèC‹gÀå«?l9·ÌÎ)€ÿw+ìüùÄÔ ie• �,�IÄÝ3FúÝOñ±áu›ÆùðµJ¡Õì/Àfdà÷OÎ ðflÌK¯Ηß3cÄØQƒ`Û®ÃVÓ¾Ãwu�ŸG\t°K¿�� ¿åËfÄÅ„@LtèÉó¹—²óü|=kj.fñcöAq—s¿¹”•7zxÒÔ i>^ … ZZŒ›:yÏœqj•âÞ»ÓãcÂøSç¹ùe'Î\vŒàœ¼’Ô¤ŠñÄ;sájbLÐà¤uÊ+k ÐߦN>uâðw?^߾χ�]`YÎßǽ/~ ·“ú†æï7î{|Ù]rYÛïO£ù³owÜ¿pª§‡› }C·"×DðúmGÖo;ÂoÇFÀ¥ËÅöi~üØs¶ÿt„¦¨‰é©¯þóË“†ý°å`|T`^A©Ñd1Í”H´÷À)þ 2ÇA]}Sc“Î]¼ú͆öÏâ×1áþÏ<Þ:€ý·ÃÄ1oëžS[÷´NFw8 V«/>·Ø%ÇÞMSöXÓ”�§Z¯7@^a¹TBøy€HDŠ ¾|­hôð¤ðГã^^î`2™eRIB\„½ÜÏ×ãbV�ã§\ÌÎ?*Ù±¤°¸üBVÑ++9ÎW\Ë-NMŠ$ÉÎ.Ī­kܽÿÜ£K¦îþåtoúN!—Kë´ÿü÷·¯¬¼Ÿÿ«É3šÌÿúà{†eùI$„ºÉ5|ï]c†_ ‰D$ÇÁèá‰üË+׊6ì8—_Í+›;c”Ùb€â²jm‹©¼ª^o4¹©ä*¥|ܨ„½/N› ˾þÞ:¾…A±a¯­º—[vñpWMŸf/Yµ|.?ÊŠ¢Z2Ó¾"bûžc ÓÁ(¸ß˜Ì–Šš¦ô‘‰ ÕéÝÕr{º©E¥ÕmêWTÖIÄ”›ºí�´ŠKkBƒ|ì/u:}~qõ£÷9Ö9sþjt¸ŸŸ�§cáùÌü{fþf IÇmÞy8)>$qP$Fp—dRÉË«îëýïßüà{{ Mæ·ÞÿžaÙ6¹ŒP—\Á4E8|î§_Ï·)Ÿ>~Hhˆ¿Ý¬m©ªm ô­©m�ˆ©‰éiSÆ£(‘cýð�º²ªŽ‘ïþý©Ââò÷×n“ɤ2™Ô^G&•¨”rÍ�ïz4MÓ4µêOŸ86µxnú¨áI4%6‚O�É¢Ddb|è &™ÃI,¦ššsßX£É|ðxæÄ1Im­Å%•¹EUO?<Û^’[P:(:Hîðc1™-§/æ-¾gœãŽuõMµõڰЀNzx)37¯¨úÕUKzu|·Žãº³VW*¿´ré¿>X÷æß¿ü»¥¤ˆü×ë–}ùwKåri÷Wûâº`.¼MÏø±)C’¢ÞüðÇŸYh0š>þbçß^\&•Š ŠÊù •UuAT×ÔçU$LJJÄôï~[Û sldîôŽ3›¼6+"x?ýzþ•ß-R«Ž…«–Ïõ÷õ€/×ýäªãrFm]ã®ýg§OHQ© ”K�Ë3Ì«»ÛoîX¸ç—“Ç�½~N’g±X7ï:áb/̼\˜4(ܱZeU�ÕÆú{;æä• &¦oú_Ù`0mÜy4%1¬©YÛÔ¬5™­ Mº¢âŠÎSɤ’?þné[|÷¯�Z¿«½²ê�ö³ÃuÉel±XY¶õ/Ë˲³Õ^!.&lÖ¤Ôÿ|±S&¥ÎËÞwטÈðÖoÓ[vu|FþµU‹+*ë¼½Üiš‚ëãÇ ÑhÔVëož#"E"J�O}öƒÑôÙw»C½'�k�3Q«�Íz–åøîiµz/‡s�'Îd<‘ýôóUʹÌq܆m¿Ö5è^|ö>û ¯Ùb͸R|×o/Q©¨ª#‚_¥gw)»`Ô°Aps¥åÕ:½éÔ…¼Sòø’ú¦–Œ+Åoÿuyï�üÎ —I^^ùÀ[|/¯ÄüE½ä²þìÛ]üÿ·z_ò÷w¿×¸)î½;Ý^gÚ¤‹mß‘Kökç<4jû Ç%ºUÕõuõÍàæ¦ú`í–Ééƒ'� ×'"|¼= M¿»f³};yPÜœN§_ûÍÎÔ䨉éi�Të5£ÑôÅw»Y–[¶hšHÔ:Ùd¶Ø*ªjùUÌÙ9¥3'åߺ˜™³~ÛÑù3GÆE‡Úá8nÛî#ç3 žyô.w·³Ã…e¾š6KGjj=ܴÀ·Eo¸VP¹lÑ´Núj¿òÞþð‡Ä¸P\ÜM| óB÷ݪ\Á/<³¨´¼ú“/w¼ñêc5µ o~¸þý7ž&"ûê�óø6s%·ÔM%ûqû?ÏNZcXöÍ[×NIÄô]ÓGü¸íhÒ Ho/M'{½ôܽüzƒO¿ÞÞyoµ%õR‰¸/"X¯7~úÍβÚûîSZÞzÂ-",ÐÛK“šþãÖƒÓ';ZÈq�œgÎ_þnÓÁ�Oo ÿãR)åA>›w±X4u°©ùI„eW€¥×geç‹hÊÛÓµÎú×^œbùÐhb®ÞÌ=¢�y�ƒZy¿™½½ÇE Ôª¬Á)é·G ìÚ1ØD":"ÔW§«ùòû¹T4zX4„†øõè&Ì‘&Ñ ¢;zÍ›>2À¯vÖ´c§.¹:«@.—†…ÔÙ¾³“ᣱ¯¦¹¹¨Âï´p ‚ôuÑA–­f¸Ÿ|åF¦«“jÄàéíµ•Ä”¬è¨�Þó&#+×ÕYUçìBÈÞ™™™•••ÍÙð$IàÔ­cÝÆÝ#‡Duði¼Ø‘E"zÈ€î�C–¤RikÞØX§ÓéõúVÛ²CjµÚ ŒPÛ •J…{·Â¾8ŽÓëõÁíœZ­Æ¦+BwYNöß6v„ìÞáZƒ�$Ió8îÅ0ŒÁÐÀ¬¡¨½ÁV0BµX–åy¾&iµ!û‡ŒÐ] ôBÿ¬^¯gæÁåP;€ŒP-’$µZ­ð³…š¨,Ëšw�ƒˆ`_0B–Äb±F£Q*•&“‰eYòŽfn–ã8Žã„þžç5�D‚W6#Œ`„ê�H$Z­– ‘H$‹…«`š3·¯y F£Ñd2ñ<�ù‹Ì0‚ªK,sg4õzýCÎãÞ8‚ ‚ I’¦iì@–0‚jI’b1Þµ8üƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒ(#Ôš¦)Š¢iZ˜ ¢ùÓôÁ0 ˲8S0²„ŒP]r¹œ Š¢„ŸV™¬R˜ú’çyŽãt:�Uê‰Úìˆ@è*•J˜OR,‹D"«LlF’¤H$’H$"‘ˆçy•JÕüm¢¶#¡»är9Ã0 …¢…¦”¤(J¡P0 #—Ë[bû豃ŒP-𦠂�Éd-½#©T*ÌÜÒ;Bö„j ³ªÑü9Ú'ìE8M‡Ú9l#T«5oi�­`$ÀFè®ÖŒàÖÙ²sx tF0jex T«¥»€m»;dŸ¬Áz½aÝÆÝ啿5%eŸ}õkU•¶‘WmùýÏ”´Û¿— —nì=x¦þ®-ÿqg4š,×�¦&½„j5Ö9!p9>©¨D£V)Ìk8–Ë-,çý;Ÿ”šÛ%, þú¬ìüUßí2?üòãEÂBUµ®¤LcYRW£ç£õ–kÞX8åÐÑØë·rÌkúöè8kꨦ¼„j%Vˆ`£‰9|òÊØQ½¯ÝHeYnÓöãæ§þùéϳ3F8:(W¯‹©óÚŸ¶ýiëQóCo—7^�I¾ùêԜܢ-;O.}ïË—\¹óð�…S\]à­W§ùz»³,÷·~+<5mlÿAý»À®½'õcƒÕÎ+(vrTˤ’f¼õûÊÎ)8}îZRj®‡«Ãè½C‚|…õ£iïÁ¿®%fùz¹Lxj€‡›30 {êì•k72*ªtÑ‘Á£†÷–JÄPY¥=vêòõ¤,±ˆØ7¢_¯ˆ:ØV®Þ2}â�Ÿ~;\Y]c¹>ª³ÿ‚¹ãÌcöŸRÈe#‡ö*(,¹™œuò\B§Ÿú–RÒ²¿^¿÷É!ÝÆ<Ñ¿%~'¡ú¬Á—®$@§Ð­Ú2kò�7N€²²Ê [�¼eõ_B¨qÍ�`ƒÑôçñËzw‰‹OòñpêYûáÚq>Þîj¥¹°›‹£¦²ÚòåE‰Eµu IRhÕÖ!„¨UŠÊ*�ù!05,¼þòdo7–aÿþï…õ“F÷د+Äì;ebØúÛtrTûz:wêè÷ˆo»Qþ¾ž/Í-üi íp>.åê�TO—¢â²ø™B›½K§ ›)?_½žÚ¿w䨡Ñî®Î … ª«kv8?iÜ`µJñô„A�C;§ÎSÒrÎ]¼iÁ·R³{DÑ4eù7ì╤ˆPß®‘wÿê俀�—;ŒÖ{Ô°ÞŸÿoký:Ÿ:s…ãx/÷~ÿÈRi™fËöÃ/Ì/—Õýþ¤«1ü°iÏœi£\œlR7ô8jn_¼|³¼R·÷È%XôìØÆ gç|½~¯åš?^øãàaÙÍYµâ�yÂ2ÏCIiEyE\ŽOúù÷cæ—¡�^¯¾PÛ€ý¢ã¸þfl«UŠ·Ï|¨wØt"mŽE±ˆvwQkµ5�š‘+•ˆ¼=Ý€¢È.¡~7“3û÷Ž ð1¿ÖÕÕôzƒL* ïd^ïéá=Ýr/ñ7Ò†ô‹²\“‘•{åzæ;KgXöW$§dõˆ &ÉÆ.Ä*.)ßôòó³Fí?û¨oº½�Ë¥¥e•ÿùbÓ;Kç55zç_na9Nh| ô�šÁQ!�¼��º¬7˜®'ex{¹­Û¸';¯TxÖܼêÃW(Šš"?ÿðaå?Vn˜2¶÷¨0¸wóÐñËæÍ²÷ïU¿Ë]Â:¼·ìn\îÚwÚÙQ5bH´yͲ—& ­< iú™YOqw¾˜ï>x†eh·½Á˜WT1¨oTViÕrs:¨™· ë”ÏË/‘ˆiuÝ™´²nøº›VUiÓ² ŸŸãkYæb\RÇ@OOwË•q i“žÐH yžß¹÷Tdgÿˆ.ÁÁ$“J–/›óÉê-+¿ÜbNá½á“Õ[XŽ«“Ë=Ps#X­R•]KÌ~géÌ}žMIËžóôH¦Þw!›P-ŠüüÃW2²rW¯‹‘ɤ2™Ôü”L*Q)åÎNw¿ë‰D"‘ˆ^¶b­åfNÔ¯w¤ˆ¦lÁ.^§)2¢shuz™EI,¦+4÷Ì[£7œ8›0l@d�FkVv~JfÁB‹/)é·»tô•[üZôcl|êÌIƒ-_XRZQ\ZÙ!À»‘^MHIÍ,|wÙ¬Gzm Ïó3VW*ÿ}éìO¿üeå—[–/™MRä§_þÂrÜò%³åréÃ�öÅqÁšÁyÅ›~?Âq܆_ää—ä§Óé-ËÈ,zÍ–³á`9"Â͹áIT댈8÷Î’jµÂrå²—&zy¸À†_<겦â’ò}G/=9´»J¥¥\Zc1<Ã`49:Ü3cáÁ#çyžØ·«åJ£Ñ´sßé° ¯°óÊ„›‘]-‹å”˜ÖÇËÍrå­Ôì®]:˜{ÛëÓéôÛ÷þÕ=¢C…¦²BS©7˜Ê*ª2³òOm$“JÞ^2û“/7º¦ö»Ú;ËæÖïFè�šÁZ­ÞÛÃ)ÀÏÃÝÕ‰eÙ3±7Î]¼¾ÿèeË2ÃDL3ü|=…á z½aÃoVTê„gûD‡Ãý/Ù|oÙ̼ü7WG‘ˆ†;CtsrR›L÷܆")Ц ñ®ÏÖ¡«Ñÿ°y€�ÛðÁµ}&jµ¢\£å8^¨^e¥ÖÕIm.îb‰s7>;V¥¼›Ë<Ïÿs¼¤¬ê­×¦›{x FӵĬñ£ïé^È+(!¢ÎùÌ«7Òûõê÷w;·°J«¿p%õ•TaMiEõµÄ¬ÏÞéÑßyû —I–/�ûÉ—›`ùRÌ_ôˆšÁƒýR3r:ùææ'$e>=aÈÍäLË«!¶ÇÜ&,•ˆ==\jô†Ýϸ8©**u‘�üN_H ðõìf1Ž x KKJ5àà úrÝ®ƒºÜîtD¸»9@�þüÛ�æå¨.ApUUÚu?ïí2lPt#ÅYM�~ýæýÇÏ›ñEÕŽ´ ô5™¼‚baó�[·ŸÑSx*>áÖÖ˜¿¦<Õ·Sǻתð<³ÿt\Bú«Ï�wt¸û!=#ÇÛÃÉÙ"¾ ¨¸ÜÙA!²hðVkuÉéùóf<ÑH=Ã:˜¯|€Ï¾ú5¢SŽ ~HB ¶® z\57‚�FÓÁãW|=Ï^JìÚ%0)%«ñòY¹ÛbN*dÒç�ûÏ¿Dw Ð;bÝæƒY9…#†ôTÞ9•ÁrÜʯjÇNIÄ¢ñOöÙóWd—`7W§F6þ÷ÅO 㠾߸»ñj”•Wfç•J%â–ˆ`­¶æûŸ÷fäO?àvní · >n®N="·ýqâÉa=o$eðVûí †/j¦æFpi™F!ûx¹–Tø{=ש£ŸNg((¬Q­«qrP‚Ð1zøÜ•ë™="gL.½sYZç°ÀWž³iÛѳ—’ÆŒèÙ¯WÜ;púD‡_ºrëÌ…„Ic׫Â]Ÿ®ùݼÑ9°‘’þ^o-šjyNÏŠâ®&gäÀ¶=wg´xgÉ ™T2kêÈ=ÿÚ¶û”¯—Ëâ&*ä2žç7ï8Ùy¥ßþ\Û…Ý»[È ~Q§c“àÔ…ÄS…õ³'qtTÅ%¤/z~B��VVÕ(å÷Dðõ¤Œ®áw¿ ètzóˆÀⲪ¤´¼:Ñ!„Z_s#83;¿sG_¥R&Ó^®³§�Œ»š|-)ûZR¶¹ÌðŸ�’™]ôÒÜÑá�ëv„…¼ûúì?�Åî=Û)4ÀÍÕé¥ùOY bö´ÕÚšü‚]�¾Áñ4E.|vÜ� 7øìÛi9eUŽ÷ž²3k¹à þ݄ˣë‹ES' ›j‘ŸAXvXjp}Vv¾ˆ¦¼=]ë¬íÅ)–�&æêÍÌÑ#ú˜×8¨•÷Û‘ÙÛKp\B­ª¹Ù%ØßÏ“¢¨•+çÓÜ\§Ží7¸w¡ÀŸ›BbÒs`¿®–s2ú¹›‡UÉeÒIc�ÒS¸ 9,¤îô=ÎN‡ŽÆ^¼šææ¢ ¿ÓÂ%"Ð×MDSAX¶šàR|ò•™®Nªƒ[¤·×VS²¢£BxÏ›Œ¬\WgUƒW"„ì‘™™YYYùà‚È>¬Û¸{ä�è >�;râ¢HDнujÕ6H¥ÒÖ¼±±N§Óëõ.‡Ú.µZ�ŒP-©T*ÜÛ¸öÅqœ^¯ÇnçÔj5Þ5¡»Ì—¶·™!;‡÷pE¨–Á` IÒ<Ž»E1 c040k(jo°ŒP-–eyžo…IEZmGÈþa#tÃ0­Ð?«×ë†yp9Ô`#T‹$I­V+ül¡&*˲æ]à}ì`_0B–Äb±F£Q*•&“‰eYòŽfn–ã8Žã„þžç5�D‚W6#Œ`„ê�H$Z­– ‘H$‹…«`š3·¯y F£Ñd2ñ<�ù‹Ì0‚ªK,sg4õzýCÎãÞ8‚ ‚ I’¦iì@–0‚jI’b1Þµ8üƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒŒB6ƒ(?"š¦)Š¢iZ˜@ ùÓ ¶J˜¦‡ †aX–Å™‚‘%ŒàG!—Ë ‚ (Jø‰¯ Æ 3U’$Éó<Çq:�ÎÖ5Bö³£ÉT*•0ß X,‰D˜¿è�H’‰D‰D$ñ<¯R©l]#d/0>šF.—3 £P(0yÑ# (J¡P0 #—Ëm]d0Gš€¦i‚ d2™­+‚oR©T˜;ØÖA¶‡A³n�'ßPsG‘pšµsØ n¼å²l#JÓ`#«À ð8hüä «À ð8hìFV„‡k�Ž;ñWœŸ�{p /Çñ,ÇÖy–"I’$u:½Áh²\/‹àÞ4E‰Å"«Té1UT\vøøùi“FJ,îy5!ùVZöäqÃiš²aÝBVg�¾‘”%“J‚}o$¥ý°åÏ:ÏΜ8¨_ïÈ£§.9}Írý Þ�OÇ&Z®> bâ˜ÁV©’ýHMÏfY®‘ž®j¥°¬RÊ㮥ʤ’)Fk8Žû=æxH æ/Bm�õÏÉúx8½½d–ùáÿ~Ø%,Œ=püè�_­ÛÑ)Ä·¸T3çé'JË4§cÿûþ‹BËwÿŸgM÷¹|>¯ ØÉQ-“J¬^[+Òhª®ÝH9vúrAQÅÚÏß2¯ÿú‡�%eU�¼ðo¯LëÑ­s…¦J«­€¡ºn�9ÞQ.“@ZÆíÌœâ铆çæ€§‡ Ea#ÔF47‚«ª´UZ�Þ`,¯¨Ê+(€ÜÂò¥ï}cY¦GT˜¦ººÆÄ0ºƒPžã8xë_ß›KQY·óW}»+,ÈkÑ‚Éͬm‹Êº�êl|ý´]ýŸeæežçç-üèí×fDE„Ö)vüÔÅûΘþë¿-Ÿýìë­ÂšO–:9ª­Yoô¨xž?zêò°�Ýü£È²ìñ¿®Œ�ãQ#šÁqW“w8Ùy¥ŽÇ½0ç‰ûµ‚óòŠW}· ²sKàZ⦿½<>~÷9‰DŸçø¾°;9ª}=�;uôkfU[ZTDhTD莘#GN]¹_™FÎÀL?|òøá÷{–ã¸â’rgLj?ŠK+~�9žp3}ÉKSë¤0˲_­Û‘”’ìîêd«"û×ÜÏó��=† ìñ¿võìÚ§gxÂÍÔûµ‚ 8ÀÃÏÛ•¦)…\sè‚°ò½ÿl0—l°¬V)ÞZ<³™õ´F£ D¢†í?ÿº÷Ï“wãû‰!ÝçÏ÷ëöƒûvS«•oüó›ÿ~ðŠ—§[+Õ=ˆ»«Ó»¯Ï_¹zÓªµÛ^eº¹³žå¸5ßïH¼•¹|é\Ì_Ô8+7©º„}ú�u÷aÑp3MJEí NN곟ptP–”V8¨•î.¢6wÆéRÜ�ÕëvÖYùñ[ê¬Ùüí?„…±#{�ÙþØ{BXs6öFdxˆúÎù:dWü<ÞY6oåêM_|[›Â,Ë®ù~ÇÍäÌåKçuð¶u‘½³N³wífzBbzB >ˆ� IDATÒí ¼õê4à8.§ 44د\S Aì>xnòØ—ãoEt ôµJeZÏóËÉß))< ò{wÙló³×n¤î=ëéæðüœ±u¶,,Ð4% G£(²v�wv,l“Ú_÷åKç~òåæUk·¾ö”uw ùàÕøþW"h~_M¸µÿèÅ‚b�³£bXÿ¨±£úåäùûyž:¯7ÇŒê'sP+sóŠ2n?9¤›ŸŸÇáSq�u;¿¸¬jݦƒpýVÎo1§%bú³÷_jf•슣ƒÊÑáîä°§ÏÆ;9( Š5*bž�9x^X~bH÷Vª%jž?�·Ïþô«-oþó,Ë ùkëJ¡ÇCs¯Ž«ÖÖøx:»:)Gë9x@wƒÁ¸yÇ µJ¡�KI’‹h±ˆV(dB7™‡«zØàhWgÇ7Í€=‡Î�õáßç‡zMx¢×‡ŸÿÞë³´ÃÇX~Añ™K‰ÏÎÝ/:ìÐÑsõ p7câàMkWlZ»bìÈ^­_Côȼ–/�#•H–/�ƒù‹^s[ÁúvзëÝa…¥*…TÀŸŸ cGD?1¼Ðµüß?€“ƒ2I׈Š¢H’¤(Jøö]GU•vÝÏ{{D… ÝÌÚÚ�‰a6m=èÝ52ÌÕÅqÅÊõÝ#C»Eu²,S£7n�9µ5æ”ð[Á�—þ^Ÿ}°°Ác¡û±ò鸜ܢ*­¾´Lƒzwž6q˜å³R‰è¿ï¿,Ë.ÿhýssƬXù“ðTrzþ/DGÍŸ9ºÎ6ËÊ+³óJ¥±�GpjZ¶‰aŠŠËM ›˜œ�„§ŒFÓ·ëw¤¤çÿkùsEúûyÍš 5HÈ #¸i†ÁS(¨™ôz=sŸÄ ö#¸ H’ÔjµÂOl GÀ²¬ù³¯°/¸©Äb±F£Q*•&“‰eYò[× Ù5Žã8Žúxž×h4‰]ßµŒà&“H$Z­– ‘H$‹…;ƒáܯè~ÌGˆÑh4™L<Ïcþ"3ŒàG!‹9Ž3�z½þaæqGíAA�$IÓ4~gB–0‚I’b±ØÖµ@=Þð2BÙÌZÁ”V/MËm�ª „P‹Òû° ©­kq�D°4-7hùºÖ© Bµ¨ôO^ÒFÛº÷ÀŽ„²™‡=W4gTud`‹V!„Z‚2!Ã}Ëa[×¢aÁÕ‘�öÖ€G¡‡änë ÜvD „�Í`#„�Í`#„�Í`#„�ÍàÊ�ˆ¦iŠ¢hš&ˆÀi"ÐýÓôÁ0 ˲8S0²„ü(är9AE ?qâÔ8a¦J’$yžç8N§ÓÙºFÈ^`v4™J¥æ‹Å"‘ó=I’"‘H"‘ˆD"žçU*•­k„ìÆGÓÈår†a &/zE) †aär¹­ë‚ìæHÐ4M„L&³uEÐãM*• sÛº"Èöð haÖm‚ ðäjá(NÓ¡v[ÁM€·<@Ö‚­`$À@iŒ`dx !MƒŸdx !M€]ÀÈŠðpB`­ÓqÇMŒÑh2šL&#S£7Tkk*+µÅ¥>^®½£Ã…bZmÍ¥ø¤!º 3³òn¦�}rI¶�ó±—¯§¦ßžýôS�”ÉÌÎ#ðóÖŒ55úúd2©T‚÷E¨í³B—•Wþëÿ6 ËbÍqœB. ðtqR»¹:*÷ŒÜ{8ÖËÃ%4ÄNŸ¿VZV¥©¬¶,àè ||Ïs·sïI?o·ü‚â xz¸qáÒõÒ2Í¢ž¾|åÆÚŸöÖ/¶ðÙqúvoáÊ"„lÏ ìì¤þdÅó4MÓ4Eį;+²ñ£Ö/©PȆô‹ÈÈÎ ñ/+×\NÈàyþƒÿn²,³rÅórYÝûëå;9ªeRIókÛ¢n¤ää—åä—�»œÜ`�¿ü»D"ŽìüÙ×[Ÿ× sˆÏ{o>¯©¬~õí/„g?þ¿õ­[k„�Í47‚3²rW¯‹©¿þÈék–_{~\l\Rl|ªððzR¦Z!óöp|{ñ¬î"ëvþªow…y-Z0¹™µmQ,ËîÚwjú„ÁÆ i¼dH�ÿ?Þ˜'‹ 15wî+ÿÖ/Xú©°0t 6�<Ï=uyØÀîEÕ–eÙã]18úñýV‡ZAs#ØÏÇóÿÏgÖ¼&æÀ_ ¹tä�žw÷AQr…ÔÙÉaØ îð{ÌÉôì"á©¥ï}c¹µ%/Lô­³ 'Gµ¯§s§Ž~ͬjK;|ü|n~éÜé�…E¥õŸ•Ë¥*¥¾^·í|\2L7ÐÕÅ1,È{ùëÏh*«–½÷õÚÿû›T"ùä‹�­]uôHŠK+~�9žp3}ÉKSë¤0˲_­Û‘”’ìîêd«"û×ܦiÊA­\¹zKA±ÆrýÙKw¿‰¯þh!A.ÎPV^™ž]´ä… Yy{_úhù3*•xž_¶bmƒ»P«o-žÙÌz¶´¤[›·{væ¨>k8@G‹ž;c ÌœúÄØ'úÿóÓŸ¢ÂC²s “Óóž[¼R(³ðÍUÂÂðÁ=Z§Ú¨9Ü]�Þ}}þÊÕ›V­Ýöú+Óiº6…YŽ[óýŽÄ[™Ë—ÎÅüE�³Úõ9óŸÝ­Xö'§d}óÓ>ËbŽœïÒѧZ[à ï¶Iø–ö¸�Ï ô{cáÓÞ^n‡¿Z¹$%-{óï‡gMÞ¿O7ØøËóçÓÕű´¬ÂA)ëà“š‘Ó3*øÕ§[n [Á�‘?�w–Í[¹zÓßÖ¦0˲k¾ßq39sùÒ¹A¼m]Adï¬Á›wÿeç `9Nœ½ܽÉz.6!6>5Ð×mç¾3Ó' €1#¢eR1ð<ü¾÷Œµ*ÓBxž¿ßXNš¦ºF†&§d’$¡V){GG¸»9¿q·FS=zԃѤTÈ8Ž‚ â’Ã;ù—•kŒF“ƒZ¹ïÐé?ž¶óòü±$Ið<}løûº/_:÷“/7¯Z»õµ¦¬Û¸[ÈßÀ¯Æÿñ¿�#xΔ¡ ¶‚×nÜ/8ñúo1§ #§¸W×`µZ1|@ä¹K‰*y¯îa0cÂ@¡³âqtìTì†_ÿ–Ÿ}í?æõ[vß²ó¸°¼ëÀ¹¹Ó†ÔëØé«ÚùËɃûF8:(yž~Ö“ƒú÷زí~*G~o/žýéW[ÞüçÿX–ò×Ö•B�«Eð¦íÇ7m?n~xô¯Ëgyž?wéæÌIƒ.^¹põFúÕ„ÔØø”j­¾¤¼:-»(’\êåæèðXÎfÝ«GxXLJ�](-ÓÌ›9æƒO×w ÿÔ a*–o7ì öد›J©‹Eß®zëÐѳ7’2JË4ü<«ªñ �½À¯åKç¬ù~çâ§tðÇüEË ̲ì⧘îÜsB!—>9¢¯y�ÉĈŢç�S*å¯ÜrtP¾üÌø}ž­ÖêƒüÝŸ™ù$Ïóë·Ñ”Ÿ¯GýíWUi×ý¼·GTȰAÑͯm Q)*¥ÂÄ0Þž®înÎo½6sÍ÷;L{Ž¿ôÜMsïéîâãån.æBÂÐ�Ý7o?:uü°ë‰ië=´þ×Cðr �íÞj–þ^Ÿ}°�¢ð¢ÔVˆàÌìü¯~Ø]gå© ‰æå)Oõ2°‡Ry÷2¹ÜüℤìçgŽŒ9xþ—íG(ЬÒê¿0©Á¹KÊÊ+³óJ¥±=G° ¯ ´KX@aQ©\.{aÞ¸•_þÚ©ãåˆ.!eÕzƒ¡°¨ÔÝÍ™ ˆüÂ’¬ÜoO7–å|}<‚ƒü&Ž UUZ£‰9xô~ŒSø‡šÊ èûåNj̹:Î,4ÄÅsY†í^pìÌu> B.køâ·¯·Muv²÷nbŽã2sŠS3 vº`^ùÓÖÇ`óöc›·ûaõÛ"½ïà_b­ÕÕL3@b1ĵ·ÖmÚïãáÜ1Øßo!ÔêšÁ‰Éßþ| þú:WÇ=?kT×ˆŽæ‡W®&_ŒONNËS)¤3& ¬Ñ�;yîfX°×䱃ÝÝê¥ôõi ƒÂÞ�$¹aÍ;–kô#A9¹|¶ñ«•KœÕpäøùÌÛG÷ûúǘ>ÝC¯&$«ÕJ±XÄqœ·§Û»Ëæhµ5 7RC;x{ºÙè­ „ZIs#8$ÈïÿÏ`1óô¾î*¥œÞÕY=¨odH°Ÿˆ¦ oÏð¤”Ì۹Ů.ŽÍ¬’ýHº•ñù7¿“$1qt_! ²Z7{Ú¨.�‚{öè{éFÌþÓå•Úr�D%Q‰H.•D†‡Ø´î¡Ö@dffVVVÞïiŵ´ åë ý“—´QÁ­X1{$•J›zã[–åàÞ.B–å°Ç€N§Ó똪Y�Ýæ˜Z­Æ»W5 ÇqMºßAý´ÅüE \§ƒÆAÓà'YHH€­à&0 $I683!BMÂ0ŒÁ`°u-�ía+¸ X–åyžeÙEèþð@BfÁMÃ0 žBAͤ×놱u-�]Àn’$µZ­ð›0è°,k>„ð>ö°/¸©Äb±F£Q*•&“‰eYò[× Ù5Žã8Žúxž×h4‰½ßµŒà&“H$Z­– ‘H$‹…;ƒáܯè~ÌGˆÑh4™L<Ïcþ"3ŒàG!‹9Ž3�z½¾‘yÜAI’4Mãw&d #ø‘$)‹\!„îÿ #„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�Í`#„�ÍàÕqÙ;Š¢¤R©H$"IR˜qÂÎñ<ÏqœÉdÒëõ8§`ã0‚MÓEÑ4-L�ÓD ûB“ †aX–mêLÁ …B*•¶LÕZ AE 9ôz½V«µu�ìFð£�ËåÂA&üĉWPã„™*I’š‡:�î!_èàà@Ó�÷‡T*•Ò4­Ñhl];…ÙÑd*•J˜oP, ß m]#dïH’‰D‰D$ñ<¯R©æU …âqÏ_MÓ …ÂÖµ°SM#—ˆQ(˜¼èP¥P(†‘Ëå,ùØõ?4B*•â}o„9Ò4M!“Él]ôx“J¥ÂÜÁ�—iµú´œ¨¾AmákN«fÝ&O¾¡æŽ¢ÆÇ6ˆD¢V«Oë‹Åß Þ~`+¸ ð–ÈZØ n{GZÛ{GV�¿”¦ÁÃYŤÇbüo“´½wd(MƒŒ¬$$Àã  ° YN¬Áz½aÝÆÝ啿5%eŸ}õkUUcWÅlùýÏ”´Û÷{–aØš½¦²º¸¤<7¯(%-ûÊÕäã§/oÝu4ûv�¹˜V[sòÌóÃ̬¼=þâ8ÛÜ—ãoî=xªÎÊþ#éV†Mêƒ��Ûølbò}?5zÃÑ“kôáaIiE~AIkU­•XgDÄåø¤¢�Zuwô5Çr¹…å\£ç“Rs»„4øT|­ ¿‚ ¤ºFoòrwô÷quvTøyä=�J{Çzy¸„†øÀéó×J˪4•Õ–”­Óåä¨þâÛÝ"Ã|}<„5·s ŽŸMïÔ {Gèñb4šŸº:mì}¯Ú8rüâ�[ÙƒûwƒÑ´á—ƒ"šZüÒTŠj;_ß­ÁFsøä•±£z_»‘ʲܦíÇÍOýóÓŸ……ggŒptP®^Sçµ?m=úÓÖ£æ‡þÞ.o¼:"»„|ò�MÓ4ï~ôÃø'û†wj È Ù�~Ùù¡!þeåšË <ÏðßM–eV®x^.«;Ê2¯ ØÉQ-“Zg¬¢VWSV®‰h‘ˆ:~úÒÐAÑ*¥ÂÑAuâ¯Ëð{̉n‘aR+í !KMÕµ)ÇN_.(ªXûù[æõzƒñ÷]‡/Æß ôó˜9u”—§› +)`9.'§PX¦iÊhb8Ž÷õq·,Ãó¼Ð`JI»}ôL²'ŠD4ÇqÛcŽWV×¼±hšÁhܰåÀà~‘‘á!6xÖf…¾t%:…vøhÕ–Y“‡¼±p ”•UnØzäåy£•J98;©iš~ëÕi–/üfýîá£:…v¸[š€c§.ǺPg/ë6¬³æÓ,رçdl|ªððzR¦Z!óöp|{ñ¬Ö9ëvþªow…y-Z0¹‰o·aÉ·2W}»]X>t"îЉ¸™“†ôìÞåè_W—¾8yç¾S1ûOΘò„Uö…ìÏóGO]6°{ƒ×}±,{ü¯+#G·ô7°¬Ûù§ÎÆ—”UÕYÿýÆ]%¥šgf>y5!åãÏþ䃅JÅ.ÉkiƒqÕw»„e§Þ=Â`Õ·»,Ëxº9¼±hzQqÙºM&�îããã^­Õí>ðWBRÖÂgÇÀ›ö€¿Ÿg«W¿E47‚ FÓŸÇ/èÝ%.>ÉÇé[d¨°^*€�·»ƒZi.ìæâX§‹€¢(±¨¶$Iºº8@ÿÞ=º†²,g.öÙ×Û&�î+t5AEQ‰xôˆ>Ãu€ßcN¦g Ï.}ïË],yaBp o�j;9ª}=�;uôkæÛ7ëÑ­ó¦µ+æ-üèoÌ ëØJË*>ú¿�Q�zEG899|ðÙOr™düSC¬µGdsÅ¥¿ÇO¸™¾ä¥©uR˜eÙ¯ÖíHJÉŠ vwujÑjDE„FE„îˆ9räÔÝ“"ùÅân}üÞ‚?ïn‘añ7¾ºwcè ^-Z“’ˤ_~¼HXfYîÓ¯~éÓ=$$Ð'%=·w�N$Iž>MS©‹EE%åcGöìÝ3üÓ/‹éÜ‚r¸Ö{uêÖA!o#©67‚/^¾Y^©Û{ä,zvlã…³s ¾^¿×rÍ/üq°¶Áëæ¬ZñÆ<�J%£éÃÏ·X–ü-æ´y9ª³ÿ‚¹ãÀÅÙÊÊ+Ó³‹–¼0!#+oÏáK-F¥RÏóËV¬m°&j•â­Å3›ø^@ø›!|uºšÿ~µE&/˜7B‚ü^ž?ö»Ÿ÷Ñ4ýÔ¨ÖÝ/²wW§w_Ÿ¿rõ¦Uk·½þÊtá;°·æû‰·2—/�ÛÒù{?É)™r©ØÏÇ(ŠêŸ�bó¶tõú­Â’Ê—æ�+,*‹�O�9e$I¿ì86¤$ôèÚ ~Ý~ØA-_0glÖíü —K+ª&�èíå¶~ó¾ëIÓ' oc�›ÁQ!�¼��º¬7˜®'ex{¹­Û¸';¯TxÖܼêÃW„tš"?ÿðaå?Vn˜2¶÷¨0¸wóÐñËu6þ�¿ÍÚÅï~ôÜiÃ…¾àƒGÎçÞ{VôÀ‘ó]:úTkk¼àýÏ6 ÿ/­<æ‡åXøà³Ÿ„‡SÆô>¤÷µë·$qïèˆAý{ˆÅ¢ >­Z'ÔÂü<ÞY6oåêM_|[›Â,Ë®ù~ÇÍäÌåKçuð¶UÅ*4ÕÎNJóècGeJF®­*SÏóžˆëÝ-ÄÕÅ17OøþÊgß.,­Ðv�è(Øwèìù+) f?±}÷‰Ë é RH×þ´Ïhb€Ê,ôñrØ·«-߆547‚Õ*EaQÙµÄìw–ÎÜ÷çÙ”´ì9O�d˜ºóä?ÚÌÿ¬þMS†å~Ørˆ$`9>²ÓÝ„s± ±ñ©�¾n;÷�™>a0Œ-“Š€çá÷½gõ�5€çùFÆrêõFxóÕéU•ÕßmÚ?iÜ0‚ $bÑÚŸv'ÝÊœ5mtïèÀÑ mŽ¿¯ûò¥s?ùróªµ[_{aʺ�»…ü ðjüÿºE�„ªj�Üâô¯D".+¯ÛYlCA{:ö&ôïÝ-´´T³cÿ¹Å Æûz»K$âìÛ[víÝ£‹XüxO¦ÑÜÎ+(ÞôûŽã6üz '¿Œ ˆ� ?�NoYF&»{(0,gÙWk9"Â͹î$ªË—Lwsu€w?úqÎÔaÂЮƒGÎçÖ¶²Ï_¼.tPdä÷ê¬V+†ˆ”²òÊì¼R©DlÅNNÍö÷õ€jm�£Z×n¤lÜz¸w·Ž³¦=)œWDm›Mò7%-›a˜Ââr†a“Ó sX�‡»Kÿž�6lÙ7iÌ + ·€ç£»wiýºÕ¡V),¯¡-.)ß¶û¯á"ü|<&>Ùç·]'¼<\ÜîCBQä¨!=|}Üó J¾ß|èìÅ›&†]öòq›hCó#¸´L£�‰}¼Ü K*ü=�žŒëÔÑO§3Üé®­ÖÕ89( ¸¤|ßásW®göˆœ1y¸ùR±Îa�¯<3fÓ¶£g/%�ѳ_¯±X4rh¯‘Cï ±q?¡!þ+Þ˜Ë2l×ð‚cg®ÀðrYäø{½µhª³“Õº‰ ‹JÏÇÝzûµ<Ïgçzz8ÀÈ¡}‚:ø¬ß¼÷½�Ö-|nB·¨NÖÚBf?nÚ“SP&,üÅØ´vA æMܶëðú_úy¼û·ù6¿.£Žü‚’ï6îõrw|rxèÓ+âÚÍôï6î�3mx`À=‡"ÃC´ºš¢ârM—U¹»¨³² ” 9vDdfçwîè«TÊ$bÚËÃuö´‘qW“¯%e_KÊ6—> âR2³‹^š;ºþ„ a!ï¾>ûÏc±{Çv ¸|%éÐÉø:eê_÷Á[óœïvò^¹š|1>99-O¥�Θ0°Fo‰¨·_«tÔÁwÅ[ÏoÙº?öòMŒ`Ô>ùàÕ×K$ây3ÇΛù€Ñú6íÖ¦íÇü¼\Ì+‘ˆ€"Égg=õÃæ}«×Å<3}¸0.²s Ï_J¼™’#“ˆ&ŽîÓ)4à䙸 [�ˆETT瀓G´÷‘]‚ýý<)ŠZ¹b�ð•ßÍÅqêØ~æ3›ãn ßΆé9°_WË9ýÜÍS7ÈeÒIc�ÒS©”= oÔw­ºÓ àë®RÊyà]�ÕƒúF†û‰húö OJɼ�[Ü �#‡ö ëØÁß×óÓ÷_V«–-©D¼`þ$£ÉÔÒu@èqáëë>b`Ô¨á½E·‘J% ŸŸtñòMó÷]'?o÷òŠêg§� í \s;uüÐáƒz\OLçXîqÏ_ 233+++ï÷´âZZÐòu�þÉKÚ¨àV¬˜=’J¥¼ñ-BI§Óéõúû=ëââÒš•i¥¥¥6Ù¯Ýæ˜Z­¶‹³·�Žã\¡Á 0‚›?9È*x µ½«(ÛÞ;²Š¶pJ±Õ ’$œ™¡&aÆ`04R€ã¸6v¤aó¥AØ n–eyžgÙº3` Ô$s ™ÚÜù[£Ñhë*Ø#Œà¦a¦‘S(= ½^Ï0ÌË´NeZ Fpƒ0‚›€$I­V+üĶ0z,Ëš¡Æïcϲl[Já‡ù«Ó>a7�X,Öh4<Ï›L&£ÑÈ0 öp¡â8Nèü5™L<Ïk4±XüÀWiµÚ¶[&“I«mìfê힎k2‰D¢Õj ‚‰Dbqí¤”x¶Ý�ù1�BK${#W�F£P(¤Òº7Ÿ}ŒèõzÌßF`? ±XÌqœÑhÔëõ�ÏãŽAI’4M7ÞÿPŸV«Õëõ‰D,“$ùXܪ‡çyáb0°Ë®qÁ�ˆ$ɇù.‰Pó±,«Óét:�­+‚¬û‚BÈf0‚BÈf0‚BÈf0‚BÈf0‚BÈf0‚BÈf0‚BÈfv\°2!£Eë�B-Äžãëa#Ø}Ëa÷­Bµ?Ø�B6ó€ÛwRZ½4-·5+„B-DìÃ*ìhÎ#µZý€ŽV!µ«Ž"„P[‚!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3Á!d3{ï¸GÙ4MSEÓ4Ïó üDíAÂO†aX–eÆÖ5jXFµtÿmÕåRy±Ž¬a�À¶½â �Qà&ç¢]tcüª•ú–Û×n\ôÈär9AE ?I›ÛíÇq,ËrÇó<Çq:�ÎÖ5º‡‰#Ö&{îÉ”E@R@àÛ¾ñp,ððÜøí°iý¿ÉjµºEŽ3•JÅó¼D"‹Å"‘ó‘$)‰$‰H$ây^¥RYe³•UÚæoÄÄï^ Ø�!‘(1P"Ì_ ”h PâÝÒw¯˜8¢%öcý޹\Î0ŒB¡°ú–Q@Q”B¡Ðjµr¹ÜNÚÂß${Æ„DÉv> : Äʸ‚êµÉžK:ç[}óVŽ`𦠂�Jíè¥ÈI¥R“ÉDÓ´Íû…3ª¥»3ä –bö¢Æˆd1™Ôx?©Õû…­ÁA�$Iž|C�á4�míÎRò$ @bû5† È=ÙÊ%]¬ÁVîó¢i{~Ñà I’¦[p@ÎCº\"°ý_ô ÈKÅr«oÕúŸŒ`ô0ìä8)ÒQ=#yÕù‹×þ8xnö”aûvcÅׯ/|ºsXPaQ™J%€ø„äï~Ú³æÓ×¥RI VYhgñ ˜ß]‡²7xöç³°ôlÃ/ä½áPb»û�Yj‰÷ŽüˆÆ=9ˆçxM¥vÊ„¡°fÝöQ)ŠLIË ð<(äRoËWM™0ÂÃÝåûÍûUJÅC£Ýqø_ï¼$<Åqܾ?ÏŽÞó·5µ·Ë1wš‚�ñ0©¬= …wŸZ9àÞ†Þt_X7ëž—¯+ÆÔÝæ;àÇôª¯}Á¶#n®NNŽ*žçü¼@"1 »ú»�–e‚üÝ?|÷å:/з[/w— MõÏ¥eäëã®&æä•¾¾p Ô2T$Lê§oAŽ ±~ɾû쿹ºå¯”Âû{d"xs\H‡?“Øì¹‚ªo»€Ü,Z�¾°¨L Û1ØïVZÎè}öë¿n?X­­©S^¯7H¥¡i̲ìô ƒÅbºZ[Ãó¼³£zîôQ&[_-ÖÞ´«¾àOúƒ‹Φßiêòu;7ù{×ÜÒÁ­D€5�"áÿNÁ±Ò{Ê;RPуìöÛ�Øø”ØøóÃÈÎ�陹B'§ÞîÛ³‹eḫ‰?nÞ÷ô„!ûõ iê» »neäoÛ}JxöĹë0¬ä‚ù“Zñ´wí&~ašLï ÀÝyÏ_M‡¯ê«ÿ ’”p! @³ î³ßž€·c­\U»…vÇœ˜ïý{-„ûmÛu ôzCZVᜧŸ°,Ü=ªÓ¬)úŸ~=”‘�ÿÜœ °è¹ñ]#BŠÚKnvÄ©ÐT·ö{@íMÀg · :¸äàÅ_¤4¬™ÏÀ_Y©š^ûÙp�Šàã�«ƒ%ÛjWFz‹ƒ!­¾©{N5�•#˜çy{ìÙjª´ºœ¼B0šž‡þÞ¹…å¹y…EÅeíçëUç·1 o·� ?ÿ¦«×SÖþ´·{xàÀ¾QÝ»v¾·Ÿ_ =¼ÓvÒaâáDü»€ˆ„ɾµëi€"@Dtv�R,fAX7žˆ€Ò*8Q �’°8 æ÷‡+™ð\ d´àlæv;"ìÎ¥«i—®¦™:;9t Ú 2ü/ ï=¬5ÀédÈ)‡'ÂaU_xiÈ=Ï–¼]»°óÌ;ÒJ•·1lÛž¯®Ö•”–kk ŠÎaAÏw ô ðiði·¯'ß~vö¸½1óv~VNA|BZv^‰Z)“IÅ ¿!kû°/Ìì$¨¥ðL÷‚©ûï)óÑ5€kðÍ €�‰�ZR»~zðq‚/ŽÖ>L)oµZ·AÁ�h{̑ظ¤ü¢ a$ƒÙî'†MÉÈ¿~35¢KHýî?|v@¯Îî.Z�¡¸¤¢¬¢j`ßÈÎa�þ¾ž»öÇÓq­¬�ô×ÑGÓ{Ãö‹�V PQ+ÂÊ)°, ¾¨?ò—8U§îDí°p–Ã×·Z¯Âö[ÁöÃ`0v ;ÊÝËÓÍÃÍù³¯¶°,»çÀÉ݇.¼þòÔk7R¿þa×’—¦védùªÔ´ìØ+).®BSUY]3uÂpOW[½í1~� àë‰PYïß¹™ø2ž¼ ËFÀÖ4È55ð*¾ÞÃvø«k Á�hÎô{Îh|÷ó>Š">;®G·Îá!ºýÊ/ycá´nQ�„2<Ïoûãè€^�|.ÆÝPÈ$înÎÂSEÅe£±BSMÙÇލ s”‚B ìƒ|¼,àýcðÃT訄Üûw,¼®J`ë]J‡ F°uxõïÑ%,°C€ˆE¢… ¦u�ˆï|·/‚çù°Žþút†a† ìjž37éVÆ�¿trP¼8oœMêßnµ·Žˆ”H-…î߃Ž`xÈ-ƒj=ð<ÄVBÔ†û¾P8i9¿ô ‚#üt¦Ý�Æh‘C…ÈÌ̬¬¬´Öæ¤R©\ný{{´I ÃÒ´õ'áŒèt:½¾YÃJ+«´jU³îÕÝsG ˆ•ÍÙjGŒÕ—¦fXq{jµÚú­`Žãìä†v®�ç/ÇÙÅWY zŽ�Xô <'m��¬õ�<;ùh!;g'lj»Œ®=Í4ƒǺˬ¨X¹l0H’¤¨vݾCƒaƒÁ`ëZ@O—ª¬ji 4EP›Ã²½\«¬¾U+G0˲<ϳ,‹)Œa>NlÞg5%°rG¦ ϱ@â‹î�c à§Zí´™™õ? Ã4ó jóôz=c3#‡9™&uЀ©îÌÎ݃©™¨ ulhÈtóX¹L’¤V«U«ÕZ­V*•b[ÕÁ²¬^¯'I²²²R,Ûº:@’äß"ò2«ƒâŠª�–a[Õű`ª‰ö`^Ï#É&Þj&+J ¥RIÓ4iÁº»@�Žã8Žú†©®®–HìèyU5Æ/nøìÌpà H ÇH´w<{§ÿAó·ð\¥Ìú-µZÝ" F£‘ ‘H$‹ ‚û˜Ù„ù0�&“‰çy{hÿÖa4“+Äd9^(V×Ð5vÑM‚lFFƒ›ŒéãV5) "ÌÑØBGl F0pÇ0 ÇqímwTAA�$)|7²uu†G,2k�#¶E.Í0#IÒ;ݱ¨õÙi{!„ÚŒ`„²Œ`„²Œ`„²Œ`„²Œ`„²Œ`„²Œ`„²Œ`„²Ôjµ­«�BíÑÿ\ÑaýŸ–§IEND®B`‚linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW/fig/type.png000066400000000000000000002400111523260663500334450ustar00rootroot00000000000000‰PNG  IHDRXø§TRsRGB®ÎéDeXIfMM*‡i  X øõÉÄÏ@IDATxìÝ|ÕÞÆñÝôÐB M MD¥X@P@lWl`÷ÅV+öÞörmˆW¼vŵl(ŠJ ŠôJBÊî¾Ï& ›dSIÙìþÎGžÌÎÌNù¬ÙsΜñ¦§§{( € € € 1Ñqšœ% € € €˜@œË�––† € € €D°ÀÒ¥KuvôˆàKÌ©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚¨ˆà‹Ë©!€ € € P\€Š€â"¼F@@@ ‚âêäÜü�7Ïçñû>¿×¨Ñcx¼ÞØOLl N?( € € €Dµ@mW|¾Àâ%Þ ýÿãÙ´É›�í÷ù*tN}�×[¡•ƒVòÆÆú=MšÄthïߥ«·s'Í ZÎ$ € € €Q$P«þuë|3k¶77/6;Çï÷j¸;€®¤ê¼oLLŒç·yžO>ó﹇÷ÐCbZ4�¢‹Ì©"€ € € P P{ykצL�Ÿ¿ /;;ôÍjó·ö~§Íߦ ÿ·OÔ.rO£p… ›ïÔ¸+xÔÁïÉÌU�@Ü·?ä®ßà?éø¸–-óò@@@�¨¨¥Š_NNîo%ÿþ{vvööoøÅ•½uÐ×}ŸW¾_# Lëöûò¯/ò¶Ø£�ÄÄzÔÃ_óµrb‚ÍÑËÂw¹µ g E÷âËÜš8ï÷mo¼åsZlBBÑ…¼B@@@ ÂbÇ�¯SlÚ´i�žhöÜ_ã?ø('3ËnpŠûÃï¾ðû< ÄŸ1ÆŸ—çK_êIMM8û ÿŠ•¾•«czôˆ?õdߊ�Ukböì¨Øþý¼Ý»ùW® ¬ßàiÛ&î„Qqö´iëûûïØÃÑÝþõbíïmÙ·di &F{(²¯€Ç——·qCn‡ñmÚÔèY³q@@@ÂG ##CSãèçåååΞ“µMýóÀùOØîš¯!ý÷è;x :ôÇôÙCÿš4ñgçÄôÛÛÛ¥SLÿ~¾ÜÏNí4²`öÿ>ñ´owÄaþØØ¸“Ž÷$%æ|ú¹oã=€ ¦G÷@|¼?3ÓÛ®­§MkNNˆ}ùý>¿?&s›I>׃#A@@@ jãÖ€ÜÌLÿâ%9z@€ú¸¥àöÿü±~¯jV­ò¶jéé˜Û£»Íš€/ÏÓ¤qL›6Ù¯½߯o 99�—ç_½Æ÷Çü¸ýÖé.€€ükÒdÛÝ÷Ö¯×h€Þ ÔöÛw/ÕxÓ:ø™£Mzíž‚FwçÎË�T¸x‰,®I“‚ÅüD@@@ òj£"@Ö­Wó»(îÏn÷—nþK5Ñk*#ÿukÂÑ#+àŸå�ÜóÙç­³@l¬oýzoÃF±{ö $%{;u´›rr²ž›¼ùæÛµZ F•¡÷¥ýæéÏæ-þÜ<A€‚ € € €@ÔÔJE€¾�ë‘�ùÃøô(¿üiÍÑ´óÒïË lÛ–;~Ö+S³˜ÈÌ $ÄÇíºKÖ˯lyôñ¬×ÞˆÝuWÕ²²r~™�÷çüøC†ç­_—õÖ;‰ÇÕè†kOh�ؼ% JLääYOuµ¯ü�²·©ËQóW�E@@0ozzº~¤¥¥Ù«(ªØøÏ?9Oˆ·ÛJi~×l ؼ™ÆüW€7>!¦UË@vvŒÆ Ô`9¹Þ¤Dõö×"�ÿï߸ÑÛ¸qL£F¾5k<¹¹1©­bš¤ø×®õoÚ¤iÝ_ЃMS4v``Ó&{ `¨¢r½ž„‡îkÚ¾½z„Z…y € € €D”ÀÒ¥Ku>5>F€5¹Ô—?7.&VÓ…5î~…/=9>ÿòö½=!A35p ÇëõmÜhs¼^OV–ﯿlBEs22òiÍ•«<+Vº«åoÁëU…Bþš~¿&ŠíË^jãGÐhû!Ø[( € € €D´@�W˜žšñsr|ñ åëv¾·çƒ»_ÑKÎÑx·.R�SÝ`³ gjºpMwý Ôð‚~=��Z€ &@@@*.pБã´ò§ï<^ñ·®¹#ï-ÜH•'j©"À—•©ñùʯ¨òyTò�ªÈËɦ" ’l¬Ž € € Pïj£"À›Ü åüqö€À°áÒÝ~ýIn6GÄ� € € €Ô'·/@eÛö+»~MˆÔFE@LRbÃÑ£kcO•Êóx¶fdT欋 € € €@½¨¥¯ç'0¨¿°³C¢ € € € °ï}ÜåÉy;pÁy+ € € €õM –zT–%'''##£Q£FÉÉÉ•}/ë#€ € € P›e÷ Ÿ¾®IØUÌ›7ï‘G™1cFfffRRÒî»ï~úé§|ðÁÁ—ðþûïÿïÿ<§Øtjjê¿ÿýï–-[›ÏK@@@¢\ ¼*¦M›6vìØeË–^•¹sç¾ùæ›7ÞxãW\“#ÃÂ… ¿ûî»ÂuJN¨"@} JÎg € € €5$P²_@¸õpO<Œ*Ô@�ÿk֬ё5lذ}ûöê J�ìì쫯¾ZßíÏ8ãŒüƒŽË?ìÆ�«×@ÀöÏëõææænܸQëÄÇÇ륻2‰ € € €…aTðè£�ºµýû÷¿çž{zõêµaÃõð¿ãŽ;ôUÿæ›oþ׿þÕªU«ÂC×Äu×]w衇ú|>MÇÆÆ>÷Üsºk@ÓmÚ´iÞ¼yðšL#€ € € P %ûÔÂN+µ‹p©ÈÊÊúè£�tèê p÷ÝwpÀšnÖ¬Ù 7ÜðÛo¿½ýöÛK—.�9s¦¾ök¾Û@]ºtéÙ³§&T4óÇt§O<ñÄÄÄDwšD@@@�B�p©X¾|¹ßïWWÿ>}ú¨G@áñ%$$ 4Hš³xñbw¾nÐ ×q'>ûì3 1¨i�8räÈbKy‰ € € €@-� <] »®à.Â¥" cÇŽsæÌQ«~\\\±G®_¿Þ=™Âù;𪫮ÒÌàê€É“'»÷tÐA�;w®àù³ € € €Q%.ºÃ?ø[}á5øóÏ?§L™¢—Zaï½÷vçëö•Âu4‘žžþé§ŸjBÃüñ…Ï^‡i@@@jN dûxŽ�ÿ@¾šƒØ‘-oÞ¼ùâ‹/ÖèÚÈQGÕ½{÷Ò¶öÉ'Ÿüõ×_ZÚ­[7w�ÒÖd> € € €Ñ,.=B^ƒ[n¹ÅA0--MÓ¥�ÿ§;žþyw §�vZá!·ÉL@@@ªW d_€àí‡[¿€ðíðä“OºÏÔЀ“&MêÑ£G°cðô_|ñÃ?hŽ.xä‘G/b@@@‚´GÀ·ß~{Ýu×¹ƒÿ]tÑEe|½×ø‚¯¼òJNNŽÎjðàÁ»ì²Kðé1� € € €@Í ”Ý x¿áÓ/ {èQ‚cÇŽ]³f�ÈŽ=öØn¸!Ø®Øô?ÿüãÞ> ÑO9å† ,æÃK@@@‚®GÀ¶mÛ4@ %¨£Ôè€÷Ýw_ƒ ‚�¸Øtá0�ZyøðáÅ–ò@@@�š¨x_€à½‡C¿€°ëpï½÷¾öÚkbJIIyì±Ç4L`0Y±iÝP8Là©§žZv•A±÷ò@@@�(¯o¼ñÆí·ß®Ë ~þ·ÝvÛ�Xö%ùòË/gΜ©uZ¶lyøá‡—½2K@@@¨.·m¿j[Û‘÷Vm�Áï £¿ýö›ÆÌÊÊR-À…^xþùçhÈé©S§nÙ²E‹XÆcB¾—™ € € €D¡@¸ôÐ÷ÿK/½T#ÿéèy�©©©O?ý´zþ^M÷êÕk¿ýö+œ³zõê?üÐ}©ûT}P¸ˆ @@@).6lpÔQnݺuâĉ%÷ì³Ï®øøã�—,Y¢Õzöì9lذ’ë3@@@Š „Ë­^¯·Ø‘•|™��P8Óçó©Ë€ûRÝš4iR¸ˆ @@@(M Æ{Tä¾Nßäo¸á†M›6ÅÄ„®›ðûý}ûö-< ÝJ0zôèC=4>>þ¸ãŽ+œ_Ù‰ ^e7Ëú € € €„§€7==]GVöSúväÐõ~óæÍ�5 ·{øÕ§@ 6nܸ´ª‡9kÞ‹ € € €@¸ ,]ºT‡ºù½�ÕðOÕÕ¸ÍjÙ”{HÁãVËfÙ € € €á,Pãê{¯’——n :$÷ØÂíÀ8@@@jN Æ+tèú¾�››Vu:’¬ædÙ2 € € €a(Pãú²­ÑtC~vvv˜Ôè0t0:$uaø—’CB@@¨9�Úxj€û§/Þj�× ùä_¥®ÆçÓ¸: ·JBFE@ÍýÝbË € € €a(Pã:g}ÙÖ—÷¸Úáõ%\Mñª Ð|w…¢qÇTª¨ÀÝ»;L ÉÝ{ íšÍ"€ € € †µT ¶w}ÿ×·q¥Û'_µù=\»ÖµkM¸utÿŽ € € €@M ÔRE€º$%%eee¹_þÝ/ä5}nŶÜû@ÃÅ|x‰ € €  5>X õ \�ðn]€&Ô&¯âÎTªÔ´»}· €»_M»µîÌšÛ5[F@@@ j£G€N[_Èãââ”úú­î999î×re�¢nßݵnP}„[4§FwÍÆ@@@C�ZªЙ×è«xíT¸âÚµ[T ¡¢½‡á•à�@@@¨�Ú«pOF_ÂõU\ÓnE@-œ¡» ·"@Óš¨µ�²#@@@ÂM ¶+tþîWq¾�‡Û_Ž@@@ jc°Àhpä@@@¨TÔ‹ËÄA"€ € € P=TT�#[A@@@ ^PP/.‰ € € €@õPP=Žl@@@�z!@E@½¸L$ € € €Õ#@E@õ8²@@@ê…õâ2q� € € €T�ÕãÈV@@@¨TÔ‹ËÄA"€ € € P=TT�#[A@@@ ^PP/.‰ € € €@õPP=Žl@@@�z!@E@½¸L$ € € €Õ#@E@õ8²@@@ê…õâ2q� € € €T�ÕãÈV@@@¨TÔ‹ËÄA"€ € € P=qÕ³¶‚TF ;;»2«³. € €T›=ª�’ !€ € € þ5Þ#`îjCxægËé‹-ÿΰܚkIA�phoGÑ!ÅòàΖgíeÙ+Õ’‚ € €‘$@�€Hºšœ  € € €åxÓÓÓµJZZZ9+Vfq¶ÏÖ¾ä#Ë'fZ,( Po¼Î‘Žík?a™kY]…1ªK’í € € Pq�•+WjezT\Œ5@@@¨÷ÕZT;ûa/ € € PSô¨)Y¶‹ € € €@ T[�€¿3Âðì8$¨fþ¥W3(›C@@ ÖèPëäì@@@�º¨¶[sëî$Ø3Ô–@xþK÷z½ˆ��UÆÄXý¦;§¶TØ € €Õ#ØÓºü~¿Òçó)Ý9Õ³õ‚­Ð# @‚Ÿ € € €D�@µõˆ+NÂN .Î>Äܾawp € €•îëêþ–ëö ÈËË«ä–ÊZ�eé° @@@� G@„]PN�hˆ��שº#DË9sž € €Ñ'àö p{ äæVÏà|ôˆ¾¿Gœ1 € € €@ Ð# Š/>§Ž@ýpÇ /@ý¼z5 € €@UÜß~Ýß„w|¼zTåð@@@ê©=êé…ã°ˆF�à1T£ñü9g@@�è~Ž@ ¨2=ªLÇ@@@¨a×# %ůèf¹j¡å¤õ–aZbí¸ŽN³<°­å7?ZNͱ,§$Úò[‡Xî¾ÒrÌlË „pk@C,` € €Q#àþV¼##Ð# jþ²p¢ € € €x5 wÀ¦@@{�ÿ­¸âߣÃD@@@�òÂnŒ€ò8h¹Ó"ýöK6ç¨ô ù•�ôÚŽl9ƹç‹Óª¿ÌióŸõ›ÍOwF˜¿Ú¦g9#ü²Í¦w¼ÌûÓ¶ñ¦sWÿÊ™6¢/€S]ã< À³Õépù§¶¦3éÙ×é1²’=<¹¶…¹Ng÷~þ}·Ú·luÞvÎ×ãø wF4ð8æÿ8ïzÛéÑàI´w\›ÿ>~ € € €„»=Âý q| € € €T£@Xôµ›�Ñ &–±ÎœffO§•{R›ȱ|s–e~q*1Fžf¯Ê¢>w¡­Ó͹³}‰M–^œ½Üû¨­p³Û^úºUXÒ·¿½éÛC,CÐ;ma~Yø¥M sÚyp�gk–ÍqÓ&ª\âÒì­ß]zŸ`óKS}ø[ú°E‘R`E¶Ï @@@� GÀ޲@@@ê�@ˆféZ=vçþóÁlŸçw(¾çνmÎ…Nú·Øô’Ù–ùcþ; Ö_|`sžuîÛ·©PÅï´¢¯ µ¨–çý5ßvx�s.©ƒYïtïÝí]­«¯œ�J>õÀÖ(·8wõ_õ´­×¬ÌÝ';ÏPxþ [sÅ–~¶t‡°©P%�msÿ(­#A¨·0@@@ –Êü:XËÇÂî@@@@ †êºG@Ðéå.±9íÏéßß¶|¦�åSÎýó6UXœ–ç�Îxþ/.+œ»C^gp‚›œÛôoÚ�-e̵7÷|Ó2øÐVo´9ï8ÚÔ¦�f~›(Vr�^¯;ƒ¼Ñׯ8£úO_TlEO†³Ž3œ¿§Mš-½5Ù²‘Óâ–ßmz�³›ÃÚÛt[÷ñ6Yjié H�ÿœgûÍœm–úwA’ýè¬?ÍÙ{9ë³�z%Ø´XÇ;sŽu@JÙ}_å®ÍJû'æËÔA¬NÿC9o‰}\v¼·²m¼¢¼’mçøã[¯)çw=UyÒÞ)Ê0>[@@ ¢ô¨¨ë!€ € € aÔ# ÒšN%FEžàsî´íÜÿ†Ût^ÊÎÎÀ÷ŸÏ°Å‹Ë\³äbœVô£¬ÉÍSvýʾýl�IÎJ[3Ï9æœÅƒÚú¿|dù¸s¾M”tç™_8à q¶<ÑY´y¾ýxÖíà4î_q’Íì´ÛÛTÅÊîm½gœ¬È;¾zÃÖšökEÖeê“€ÿŸ�u¸×eOÌ>ÝarY³à�PkuÏ^›®\¼ÚºÄ8�–ô³ìb­ìÉ­;+;µpŸ—RöúÁKm¹[×+W-_ª\ø› £2󻯔ÿ{÷å×óœ�†”îšõ�ýã|ì´Êe7îÇÙx ÿ|ö�òâ'¬3R×·¯PhRüm� öÁ4¡÷!Ê‚»?éuaI¢ÉǾùŸrÜîÁb…kxSùÔ1ö!R´v6WsÖüaKg/øKùWúbåÂùÖÕç×Yß+g̲Î?ëœFô)öÀ�ÿú—òàñO(/ïÓK¹[÷Îʶ�mx€ 5‡Ç¶×š‡ž‰²ï�·*|w´ròÉ�”¡þ·a}/¼CyÍP; w/Û~�¬é‹îY§¬xÙiü[Zù««÷S6ôšê–onW0Æú;Œÿ?ÊÓvqº96kú+§�ÿœù—kzÚó'*;; =ÙævßÀÔ¯è@@ @ èïœsù‰ € € €)ªi§¾œ¨Ó#`½Óèöï¥;pÐNÓU¬[%âlÓé°,ï­Ý[Øe?5ÀŸmë|±È2ÙnÑõœ1ØI‹Ò‹s.k¬áÐóˆóÞÒ`N·[z=Ïô·,»6辉¶Î}¡Šƒuû]¶èz „b^4 ¤ŽÒYOþÎÚ¡OéTö¿°2yö ‘µÖøQ““”{µ‚½÷P>îhåùi;+;´·6üvmS•M“v`�zAIÜÝz\tƒ RÒjøNÊÿÃðÙG@ž³¤ýÞÃ5ý¯‘]•±Î [R¬Ï•÷|«¬x‰m`�TiÕª•Òí�Ü´�¦c= ÊÆÍl~«Vn�U¡Yg:±±¦›;ïrz²›iN£êÁЖ( € €@äð+Rä\KÎ@@@�rB4ð”ûžºYÁ©²˜`·¬zv²Æ¡üR‘§ä¯ê´]ßu¯½ºÊioÏŸïüHt›—œ6í,§_@ðÒê�®ÈSrœ¦ü?­ÎÓËnû­DÉ]f+b·{––}.θ oL±5oYiY¡âô;¸ÀnÅõœÙ¦Bï`%ꡀݟ¿r®µfÿ±Îþ©ø—þ©\Ÿg]tÎüBùù&ûàð&uPî9 “2¿¬þ¯&NíìdÁ¼�?;ÝfmæN´Î9v¥Ë8-|xê¥Ê=kà“;ó«ëµåݸEé|üègP¹hLÐ û`:ÿÝŸ•öÜ \�cmõ­R)��ý¬zYzû½¹‘ ¢œ»›�ü¹!–œ¡y»ÆY–,i%g1@ˆbzDñÅçÔ@@@¢O Ú•jÑi»þäKÛúÀ–×Y>î<¯þ¨!6ÝÈiÆzΆÓö8Íÿù�S­ìWÏgtý/�6{]Xœ¬$GÂëäÁزÞe·¥¾½`Âk�až�Ù.Xô³"O È_Ýn€õ¼ï4~ ΰéc^´ü¨Ä±�é˜<áÜó?g®­óe‰uln±âTé´í^‘õƒÞãô¡¨à£ÒƒÞÇ$õD �¥ý}Êiʃî*ÞF>óÜašÿ¤s*-yZ?¿y¯“Òù°ñxZØHõ¾ó˜ò˜eÕ·z´Ô:áðAœÔë,É´96º�óq«Ÿ¥;£Fíš(7þðƒò›ìnÊ+»Øð'e�­—Vb{jÉØ/Ò•§—ùY”ûËÃZgèQÏ(>ó™ò¶a͕ι~–Rœ”³R)ïe6 € qUü�-â8!@@@¢B ¢*ý‹Óþ¿« MíÙy‹åãßXf¥YN°Á¤=Ëœöðûslz¢ zí¹À«<¯¾jù~~W›Î/NeH‹d{åM´1ÈrGŠÓx_êÆa‹Ù˲´š˜mv3²§ûTËwYŽpÖ¿zw›þÊqÈ´IOŠ5(z.ÝÓÒk·ëzžšeé.µ©2ŠÓð÷Ú󶯉ËËX¯è"§Uí‘16ó|{d8�ètýW:ÃÙ'ÌS7ÈZ¤‡OŸ©=ÿtåþ/(Š–XëТme‡2{}[Y¯2ž Å{Å[Vµ¤è�>6C9}ÜnÊàÿÄ4µ£íê|&ü½.[Ó¡æíl“¶Ê´DÓxx’ 1’5à&åà]ƒG9°5ã“Ì!Ñcݱ–Ì5±·ø”™ wQꙪŒ lS®[¶J¹¥œ®vD›×®µ5�¾ÍØ'hVf>í2m/ëãmtƒÉvl@@ šJûÍ&œ; € € €+Ü v'ÙÌš�<ƒš9æ´•¼Áßm´zü;[çÿN´¼`°¥;.À¥=mz­3jÀ{+lºdia·—zÚ9MY›­‰ËÓë5Ë¥•(-œ¶ñŸÏ°·X»[¹Å9£÷¦ÙzßÛðäùÝN°›‹=],òË Öé9Ýé 0h˜M_½Ìò:¼ÜóÀ‘–=œãÿò ›~)“ÍQœŠ cNµ%›C5ÿ…xKÁ¬øgª’ï*x7?ˆh� ?5 í¹ïâ—ǬóRj™³ ºž­uî~àhegw„MU¬Ö£ºø¥ûaê}ö�yÕô«”ûŸøåê+5м�ÆÝ¤¼"{Šò†owUŽ÷$eO§G•& KÂnöqvé1ö1w×C•�zZ+û^m��>rz$ùækú¥Q(Ç_vo*­R¤Üs”íýž"óJyÑ ¯<ðÍ·Êñ}Âú|¥œ³@@�ê(óÏêÜÛB@@@�ºï†çõ'µ7¦¥¿XΰÛK=ÖöT´,Yl¯ýÃò†},¯tÚÛg;még:íä?—ÒvÝug[¿½S%²p¹M¯±¨tYg·¸zN²&7O|Ž¥Ólo¡‹s<:Ç|« OžÃî°Cl²‹E~É´l=WÿÏòÕ#,'Œ²ìì4ž�¶›^=kµ¼ÒÉ Ü/k+[q”Þ˜l“Œ` ªEÀyjÀoÙÇÁÑe��h]žšW¤J¶Iw­¹ß!‡*÷¬ä'·¹}*¼æôâI×Tèb±ó /+W9z-�'{�}dœ5–�zè)å¥í,¼6£Hñ6ÙS¯Ï}v†e‘%A/âzëÅÅßm´ šb2°A3§O°mž4o¢ò«÷ÎQö¨¤†ÞBA@¢\ "¿~F9§� € € €@äÔuKŠÓ*>å}ýÉ™^Ùt;î†Y6�ôÂö9E¹šíŽpïG6k¨ÓÂ?Щâ˜á´·—ÖÀmÀ:®›½+ÁékðÛ®D‹º­^Pœ-|cÍZ5R>qúDÜ茛p__ÛÅIÎtæ?6}ù{–ß—ÒëÁ–Q@ Öœ§´lŸ¦¦¥í@}kÀþIû|öá«Ü�méÝeÛWöú¿•e?5 &ÙÚä�{ª2«yºòËi–唀óû*ûwµúPÿû±NJ½rв_©ãh¡Šõ0Ø-¾Ô~¶J§Û?Ì¿ZÙ/ÔÎl  € •5ù[eT‚rÒ € € €„³@X´’|ëÜ]ÿ­ãÔ6¨G@©p%nEíÛÆÖ=ÍWÿ]§m¼ý16g¬3œ€÷›>o¹epIµá«=G[£�'w…åëö€ê0-{9cü«ƒžµ¬”çÇ8ÏGøÉéCñ«5ìU¬8AÇžf+o­ø»œmÇÅ;?*ù.ç=‘%°íK�ÏmîRNþ|]á¹�Úù¿š¶vórK§[´Ê·¿_«Ü'1xmã?Ç餗’¬é„Ÿ~ÁkïØ´ýc®ÈSv�hgzÌ®WÞ¹¤âû´'t�ð–òû{†+›—}.©&÷òŒÇ•Gµ«p�u`³Öÿüº½•‡½©  € €„¨ðoW!ÞË,@@@¨gaÑ# âf©­lÝ6NõElK›~å<Ëδß]ÿæolΩÖìä™êö cÓ}¿³¼ú ËOœvìk¶éÎÎÖ>™aÓÓj³}ÛiÖŸp¹íw‚E‘²Íi+ëßÕfÞe7äzFt³LqŽð×™6=Íš¾<'Ú-·ž9OdÍ`žO³|çWË÷fÜ#SmNC OWkœËjÀ§Î /T¼7„slGnå\‘¶ílúÄe^Æïʯ߷.O‹œƒš¨` ¬ûIkþm+£ØqUä©ù›¸þXMt=y¤ò‰îO+§ß2D٬ȱهÂÒ©g*žkI§½O‰u4#TÙbLWÖ_yk%þOe£ d­]o[t?ìlŠ‚ € PD ÿ7Ò"óx� € € €*P‰v–p8ÈÞ<îc¹½�lºéRËç¾´|jžåLkòxþ°8r²åƒGZîç¼w§_À§uýô4›¿ÑyRÀ�Út­ç8ß›fûüÞ‹”Öξ|’ÍŒµæ@Ï_‹,ùÌòŽ•–™žf[Þ8ÄrdËc†Y¹‡¥ç)‹i©–Ÿa¹s‰ÊŸGÙüU,§�±7žî¼;ïoû1ôyË/k³‡…í�‚@]ÄX—¤]öê­œg7ò{’v¶éý†õT&޵�¡£°6êW[+z�ë¨3çÙ‹”ãžo®¼õ¥;•-JüÛôø6jþêE[”??¨<çH˪–½ñÀRßl4‹^¥0Æn¯գǺõ¾÷kåOì소´nH/±ãŸ<ÊZï/ÜÃÖq»ÖÚÖ#·¿¦ôfF§ h\¸Te•”#µôÁÏžQ[‰1Ìö³«Íÿ W@@�%ñ ±³@@@@ 2®G@N†Á~1×r©5¡)ïü`/ß³f-Ïן[ÞWb›[P~qZ§‡Øí«ž‘ÖLåyÛmFwZÑït¶³ù{›ïŽ`S5_¾·Ûu=×/¶üÞé‰ð±Óæo¯ JŠsäIN“Ü÷³lî3ŽLÁòí?W;£œ÷ŽÍ9ï}˳¬¡ÎÓÅ‘yÑÝòr›“v«%vLÀî{_¹À>D~MwþY&ØiŒÛ¼i¯µ~÷=N9pÒmÊÞ¶6ó3×Ý£<íjû Øû&kñî×.AY²ø×ÛÁü6xÀÀIs”Ÿ]ØKYÙnÿò×õ®³úž©LןrËNçj•ç_·#ï“è¬í›¯/Ÿ~¶òCg†ÇcGÕyäEÊ‹?LyÛu6Â~/ŽWömø�òƒ»®U>ýÏåMÏ�Tv¬ø¡gXw©‰#*ï³]U°ØG^ÆßklíJ¼«‚g5@@ Bè!’Ó@@@@ "o�©ÈÖªa�u«l#G¿zS™›�¥o„^ZêÜ[ò¶“ùë8÷çßþyþ«Zþñó Û¡›¥í:Ãih<ûóÒ–—2ßš*=ÏüRÊRf#€@5 æüG[ºüµ,å‘×P¶�q»ßA|×ã4ëÚ‰S•ÃOßO9%e�rÂëÀsÕa�” Jö&ðØY ~V~•Ñ\yøn;+cõ§ò%¦�=äã¡yéÊ@B#e9ýñm´N×Þ{(÷HRè¡vˆŸ';ÓAám²¯^�ÿà5ʯ»Iyöuv´×w¶NJ=f=†Üó”ò¬>¶ß'ª¹!KŠóío[� Æ)ÄL@@ Êô¨2oD@@@ þ ”Ó,TÿNˆ#FªEÀy0I¿K¿ÔÆ>÷¶P&­�çlØ>6Ûk÷ùÿv[ÐGhžÝó¢8ÛésæíZt݇Õ·d[‚!{ï¤ Õ@³ÕpoO ˜ýÙ»ÊZ¡Ò»‰²-êZ»°ÄX³~ã¦nã~áÜj™°#jÚïBå¤Svîå1™6KßK&+>Ûz4¬â¡ë­@@�j G@5ƒ²9@@@ÂY ¨9+œ“cCj[ÀêI¥Ú�ùvw»Çã[ëü(;œñG V±™+Wþð�µðà1åüÏQž8Æ>~_~ö åÐvîÐüšÌ/þUŸkjÊs([w‡r@ËðlR·± 2—Ù]>�±P¹I¬äêÏšß¿V~þs_å¨þm•I?‰ eàòCû)o¯Äÿ©Ì|Ë ç©5ÑB[§ € €õ_€õÿr € € €TX í,Þ&+"€Q'à_c#ä/ÌÈTnýñeå�g\¥üÏÔÙÊÄaw*_�z®ò®—¶*·w�òÈ¡s•ïºIyþá=”M½ë”_=f½¦l:Pyç郕-*Þ–®µw°,±ã˜lY´4ÐËÞÇÚ³ÖηÖþo>xEùø½Ï)¿�¢¼è)Uᨖ³”Oßp³rìAöÄ„—ίNÙ§ÈÎíL×u·²ßžÖ`}«!ÊÏ·wީܻ�½Áë¤ì·ßáÊ_µ¥ÿ~ÊÞuÆÃ×([Ÿñ‚ò‹§ŽS¶_ý‘òʾ6ýÜ E‘röÞÖ› ªåN½ñð4K·¤]ù©&æÜa½šxógò@ˆBzDáEç”@@@¢WÀ›žž®³OKKÛAƒ6¶ç�ŠŒª½ƒ{âí PwÝ[Ú¾?oG� ;;» ›HL,Ò<]…-ìÈ[ü«¬Ýþ?oÍSîtØåàÛëR›Òœ—'¯Rîuâpe�fNG)M•Qr7háš­�•­š:]´ü5=çý•ÉCí^÷]’k§ñ: }e®øS¹`m’2m÷ŽÊ¦ÛOQ¯¬6Ù¸Ó¿´‘º°—²£{·¿¦Ê(yÖY"}–�×ÊTë/°OZ]^Í2Ž”E € €@½¨ÚoÔ+W®ÔÙ•ø¯^œ1‰ € € €U¨¶hûŸôC•Ž‚7!€@=¸x€èƒ#vôp«VY·=vôœy? € €Õ'Pµß¨éP}W€-!€ € € POªí©gÙ�¢ž‡�v§)"KÀ½Oý¬=#ë¬8@@¢O€1¢ïšsÆ € € €Q,Pm=z¥šâؾ–�Ï´¤ €@$ Œsþu÷tþ¥GÒyq. € €D›=¢íŠs¾ € € €Q-Pm=\Åœ±ÄÿXk¯>Kwç‘ P¿êdÇÿ?) ~+pô € €DŠ="åJr € € €T@ š{$ÆÚ>?8ÙòÒ�,ÝñxŽ€YP¨?î3ÜqÜž> οîús) € €„ G@hæ"€ € € ‘ÕÜ#À5rûÈxãÁ(L#€ € € PGô¨#xv‹ € € €@]PPêì@@@�: " ŽàÙ- € € €u!@E@]¨³O@@@êH€Š€:‚g· € € €Ô…u¡Î>@@@¨#*êžÝ"€ € € PTÔ…:ûD@@@ Ž¨¨#xv‹ € € €@]PPêì@@@�: " ŽàÙ- € € €u!@E@]¨³O@@@êH€Š€:‚g· € € €Ô…u¡Î>@@@¨#*êžÝ"€ € € PTÔ…:ûD@@@ Ž¨¨#xv‹ € € €@]PPêì@@@�: " ŽàÙ- € € €u!@E@]¨³O@@@êH€Š€:‚g· € € €Ô…u¡Î>@@@¨#*êžÝ"€ € € PTÔ…:ûD@@@ Ž¨¨#xv‹ € € €@]ÄÕÅNÃkŸ[ç}¤zj^šòÌc»+›xkî}ÚtæºÊE +çÍ[¤\ÝzˆòôÃ:)ÕàÞµy  € € €@T Ð# ª/?'� € € mQÞ#  ë�·>]ùåü&ÊÓô§ lþöMžpÇOʬ‚™Å&Òœû§œ¤ìãZ²5½záåüek”Ë—¯Rþ½Ìz,^ô—rÁ*['¾ÕÎÊþ{÷Pöiœ£Üb³=�’,) € € €Ô„=jB•m"€ € € ¦QÞ# ü«Û~¨VºçfËŽ±%Ö÷&hVãàù�ušóÕ“O('çvS°‡µüw쳟r¿CG*ÛµmmÙ²¡2ž¤@A@@¨-zÔ–4ûA@@@ ¢´G€Õ¿úüW”?Úíù*¿èϨ‘/)w>é2åƒö�ïŸO”—ŸiY´Äëå�ËnQ^w@Ñ%öÊ`{y²rüÐæJj\„@A@@¨s¾ŸÖù%à@@@¨=�(íà{ShâÂC7*Ÿ›ÕUyþ®³•¯êOA‰ípˆ&¹Ç²s‰j“˜øDÍu›žæÏxèå°‡åÛtûã'(Ÿ?¹³2xØ�rßÌ  € € €TP ÄWÛ ¾�Õ@@@@  Du�O\#]²Ö-³•± ›)Û4wZø·n¿’¾¿?Ô‹ N°,Z¬Í¾Ï¹×)ï=ÜžP´NÅ–ö>ñ\åR”¡z h¶J–þÌšü˜òm{IA@@@ Š~{­Á±i@@@¨{�èîPÿØ#´Ö¤»,‹Ž`müîEjSg«¶´Qj{{Wç2Ÿ°î«š”ÞcÀÙ� € € €@µù[-[d# € € € ¶ôqiò¶ØsVoئôùr”[7[»ý¦Õ&6?)ÅÚü›&¹­ú~Mçå*< ñ6RmýfAA@@�_mÃãÀ8 @@@¨~z3µ;ü×~øo帟2àùMyõ¹Ÿ)C•Í<âú»”—öMrVÈSfo³íd­]©\´8CYz¿{jÀòMÎÈ©š¤ € € € Pƒô¨A\6� € € €@¸ Ð# àŠ8£ýœ–û6Çœ£¹'-Nùz×K”WÄMU^úã^Êû¯´Ü0íåÛPŽÙËí  IO ÛÚÿWo°‘¾þAKý)¿X�Lû®å¯Ç PÇCäÇWÞTþÚy¤òÿ”ùd�š>Ü€ I²iå2å‚‹•‹¶í¬«¼ì¼”3›*�ßJÙ(¨:%°n�æüåµ¶¸ OYo‚ÃÛ$¹q^@IDAT”>>€lŒ€ÙSŸQ¾×ÔF  €@X 8-ðkæÍÖAþÒðåÿ®o‘^=wÎýÊÉküÁKBN'x¶æOoýŒ•òQáÏÍÔÒ k×)W­Z«\¹r•ò¯Å¶¯Ÿ~úS9o�û¨’ÆšÞµOeJ×ʃ;[¥R6¬%@@�hú �§Ï9#€ € € ]QÚ#ÀÛ´—®óÙìNþÄUo+ãû§|b åNÉÖJÿõ,E~ñ¦X Ûig즜ñÐRåˆ+/TŽÛ7EYP›b#ÿ¯ýsžrQ »Ý—–h‡ó&kÍ=N°­í¡?ˆû·ßiäYʉC[+ >%ŠŸ›7¹™f%—ø¨ð-þX󯽺rβ-Ê,¿}Âxc¬ßPËí•ݺì¤ìwÔ‰ÊÓºuRîÒÑöÕ4¡Äæ4—‚ € €@�@i¿�,ç' € € €D�@´öH´Q¾»ìj-l«ízzc• ’mD¯Çæ;�ðxüÙš^·h®òç­Ö#àÄ!6xÀ /¿«ìßq”rP[{¯'{©âïÛ]»íÛXâ�¢TW§NA ²[u>Ëþø[¹.gƒré&Ÿró?öï}öÜ e\ã6ÊÖHŸ_b“hªI“†ÊPu®Ö¶ß¸™-µÏ�¢%�µ^3æÿc"CÆ]¬<ºgª²u+�¤1mþR  € €TU Ôo§UÝïC@@@�0 Í:Ä lZ¢¹¿,°æsŸòäd{:ÀþGÚ8Œ=_ÙìÑG•w\|§rîç)N·ç¼´¢»ò²¡iJ{"@Ào£ôòÀÃÊV= `ÉÍ™ð��aþøÿ¦Ø §WÑ©“4uüTgFÉHÞWóîzñ4e?§SQÉU<1Ö_ Sw{ I×öÔÛ†b € €@øÍ² h¼@@@�ú*å=llíØ»oÇ&J· ßÛÐÚÿ;îÒSyêÉÔ÷ï¢l“¼½Þdø%WÙ:3~WzظßMò¬Õîè±(WäyZ�‚õIÀîGÝ|¹2íõ»”õ³éˬ7ÐöaPXì³¥Ç×*'eŸ0%G(\µ¬‰¼eZúØ…Ö é±²Ö µ,ÑžurÃ3ç(§ð�PDÌC@¢U`û7Ûhà¼@@@ˆ"�(ï`WºQ¯#”×ô ºêqmõâÈËÆÙ¬ÒÒbiá.ûÙ:nÙçXý´Ö7 D»€=yä÷goU¶‹OäÊÇ/RŽhUÊMŒ=ßäгF)h]Ê:ZV´l™cƒÜíŒ\Pt ¯@@0zð÷@@@�( G@黢Ío¥o�% ¥öñÑå8»·ÿ¦m”!ê\½öñÛ¸y)4ëSà‰i èÔ«·rÀÎ!¶aë)ö® ™3”U• ÈÖx� € ™ùÍ22Ïœ³B@@@ è…�SF�êd®ÓF—,ج\�cÛÏËڢܘ±IYZ�ëÆ [§åÎ;YÚC òKÀçÓT®'A™Àçt ?@@ªE ´ßN«eãl@@@ÂK€–¦ðº ÔS�¼ßéÈš¸\¹Øšó=ži/(.˜æL—ñ]µäÒG.QÑv{ÍlnN¶æøü۔ϛ£ü~y)£ hYѲea†fø<ÍŠÎæ € €ùÛï„@@@"^€‰9A¨ �ø.‡i7wž>O9æN)àÒ'OV&¾x«òñ†c”Ožµ»²aîå×¯ÛØþ¾QÔÀãñkÎÆ56â@žÏú¼>éIKý©TI¤G@¥¼X@ˆ"zDÑÅæT@@@ G@�*ôž-«—)ÓìNþ€×êU‹ÜÇïm¢9ýޤ|qâ;ÊwöIV6Ÿþoå}?7UžØýåÀööÀ€Xý±b ¬Y¾Ê&w9JñìÝ#” ÛüR‹ÕƯŸQžõ¤u½¥R±@ˆb~KŒâ‹Ï©#€ € €DŸ=¢ïšsÆ P Ööû—=)à¥uñÊÁÇ·W&{U—„.éå9Ã~T^}í½Ê„.•×Þ}¬r�Ó H?‚¼š?oN–2¥÷ÎÊ6ê  UlKMž­|ÍvBA@@ „=B 0 @@@�H G@¤^YÎ ªO ¦ƒ¶uì�×)ý r•_;ÛNî;Z?8²­Ò­UÍþÙYÞFzµ× '*��ý˜ò)-”mš&(‹ôÐk�'gáOÊéÛhO老ñ( € €TŸ=ªÏ’-!€ € € öôûKÄ"€@� xm€FÍ›Ù�ø×”q8yyyZd+W-øE9má,ågsZ*O½êdåÆ[¦(¯¸e£ò’qÿRJk ŒñÙ–?{íKå?; Q^¹[’²d¯ͤ € € PezT™Ž7"€ € € PÿèPÿ®GŒá(àß £úñ3{jÀ¶œLå3w,Wvß_å£û+»îÔF9þFë_�òД·NXªwÿxå>ÚœÇgÚØî¬ìÆðR  € €T·=ª[”í!€ € € Æôã‹Ã¡!€@ 8ã´ìÞK‡Ö+5¨É>¦©æôܯ¯òÐ]º+�>pweçf%žÐÎÖ{Kgåà…9ÊNl�øÆ+Çœ¥ð¸�m�ÑÌ‚‚ € PÝô¨nQ¶‡ € € €@ xÓÓÓuxiiia|�Dš@v¶�«_Ù’˜Ô_Ù7³> € €$Pµß¨W®\)zDÐ_N@@@�ò¨(Oˆå € € €D�t19@@@Ê " ¿ó¢J«÷Åo4;9ú¹pú;ÊŸZ¤<®w®rÆë?+ Sh¯¬x dý©•_}¶ÐòØã”CwÞ¾…À湚3ù™%ÊÝNû—²o‹‡¥ùuP[µÓ_þ;EùY‹#” m§4;  € € €@éô(݆% € € €Dœ@t÷ð6Ðm–´Fùò‹_*ûß2BÙÑm÷/×ôû·Þ§|aep¿µŠ§w©rÊi]•ù­Ð�,MÿðUʉŸXë}åK‚Þrè5w*/Ô7ÁÙ�ÍLý|éyk½O½â0¥oÉ76ç¿s”»ï­L‹)Y³Ð|OBcE«fÖ!¸ÍÜ¿b�æüï[ëõ0ê”âr—þ®ùïÿ˜©ìvnY}ëfh�Î�¬üºj§®wz< ¿PùÖ¹»)ƒ�&g¥É7‹ìøûì×IÙÌc=/6.ùMùsî0åÿ:½ý£[nTÞõS‰î!6�¨yÇÜ|�ò‚>ÛûP„X‘Y € € €@˜ ”üÞfÈá € € € €@õ 7»VßVÃ~Kþl»Ã|S–µý6èimé}§§+—®Ø¨Libm¼É ¬-=°VèÑ·Ý­ÛKá™ýÌÊ;l2d±º•ΧX¿€'Gï¬\ýáýʱ³)_¸¢¿²qúûÊq×ÛüNQî»Xù¸‡•Ö:_¬ø¬½úóçÞTþºÇ±ÊÇw·Vú/ïû\¹0Û¦\{ƒò9ý UâºØ]ô�ß}¸²‹×Ö_»v³rͯ •+ÛtP6ϱžËWZ[w³Ö •KçüªÌh·§2fÕ2å’ n^§—A»¶)šŸß&ÛFÓ£¯8Y9$µâuLÖ¶?ÿÍG•ÏèO¨’íô}¸ï…–Zxß>N�€üÍÛ5úgê=ÊáS‹¿³ÁÁã4ë¿ôV&;=þ˜r½¦/œjò¶×íÅþ!ô?ëå”±M”^gùâ·Ôô-‹*ï¾d€²U¾€ýHjJ_1P@@@ ž TüÛZ=;1@@@J Da�kCÎøþEåÉ÷ÚÝõöl€‚òéßÚd®ŠËî9P¹ak#eë†nC°½·¼b£ ,~ÉîóþRðºÖö~ÌÈâmö—÷MÐJÎA¯=þMzõËKO*ïûÆŽ´÷ù;)׿û¼rÒovœ×=wŽrHskçŸóæÊÙ;[ûÿÉ{ÚÍúÓ®·ÖòŸ†ï§ìä4`û×ü¬é.˜¢ü6ÿ~~{vÀ•ã>Vz’÷WÜóï}”s¿²žÙÿLW^y±ep‰ßÍž2ðïÛ‡*Û» ¼6®AÛNÖ¿ }’õ8Øšç.(+7ÖâìN�TÑfú²Þ–¿Ì®KËaÖáæÃL&¸f+¦Q+ͱVll„´ç)ŸØÇz|ûôÓÊ�;�¢œ8¼­²Q‹ÖÊIv•ýóÌÙlÙ¸kš²cS;Îü>1ö'Ñ.@@¨gÁß›êÙ¡s¸ € € € PY�(ì`mÈͰ»Çß? 4.kÎøÁz ¼˜ÐMyE;·ÆÄ¬cœ‘ùã¼¶�€?W™°vâø€­Óóô[”¯ÿŸm¡HÙb½&MøHÙîª Êã:•¬…±mÆ$8­ÎN‹ôï¯=¡9׿µ\™£ûÖµÇkÍ^²ÀšÚ‡Œ=XÙ:ÝÚóÿŽOU®ùÃZûg%¨ù}4™_rssmÊé¹o(Zbí^ýÑФÇ3ÐÚóÏò¯Q¾Üî[©9Ó_þB™s°Ïþ-íØlT•˜æŠýN©üì’7•¯Îµ>c÷HV–Sbmäü�‡ V¦¥ZŸˆçÞ²–ðSGvU6ôÚåfç(ÝAó dlF‘’g½"6l´ÌÛÎPdOBC½n‘Rò/¡Ñ´Üç$å¤]l_îü–kziÀ®]ǦÖgáóG¬Ƭ=OSŽÔBé¢ú335��dÚ â¬KCûXEÅJÞ­wÿØ‹,KyGb¿ýKYÂl@@@ Ü‚¿Œ†û±r| € € € °ƒ%cwpƒõäíNûG·ß¢Ã-:F€ÕŒ¤vh©Ü¶l†òäŸU†(^k ïxìùÊGOm´‚ÝϾðÝÇ”7ÍßU9¼{Š2ÆcíÕ‡Ú�ÿžôv÷~ºMzYÖÊýõ×Öê~âC—)G¶/»vÆZÇ×~k}ž_Û_yû§=Ùk-äÁ%6uo½uȇÊk?þMybï¾Êüc͵9·Ÿ~ž¥þ–dkë{ÄpånMS¾;ÉZݧt¹Byv/ëS�—ãö0�¸’ch®žA°Êôn¾è5ål# Q’<[s§Žß#Ä2u8hac t36�Ç·Vññ=¦ú¤ïhåSWvV¶uFþ_ÐfgMwßÕú2Ķ*g>y‡òaïñ–çØš�J9N-*^âìª]þèxå¡­ƒßf×ȹ`ÜÏÅßÄk@@@ ¾”ý�³¾œlj € € €ˆÖ¥Ž`-ÀÞÜMÊ™¯Ø¸÷÷-·FüÇôV¦¸ÍÃ[æiúÙÛí–ý¤�S-ƒ›�õº°Äo‚3º~i5.�<»yÝëµÖæŠÛYËAc”OïfwàçnÛ¦ Ø�ðÅJ¢^÷y‘òÉxkXoêgþžâºhι7ž¬Ü¿™-ðÿý¹òú‡ò”nIê2L�ž«¼ø);ß�wÛ¸Þ,ÛoBÛ¾õ (£$쥅7?o-ÿ»ëÙþ—¼~›òâ¿Ü9e§õ>øûãW”�þb}κo€25ÆÆM(Y¶þ1]3ŸùØžD°÷Õ�”��³.¹¦;ò@ΆeZ4ëó_•sWZ¿ƒÜ¼ùÊ{ζ¾÷èO¨Â¡T˜‡ € €õC ´ï§õãè9J@@@¨”@´öð¯Ó7[»ô¤ß­õ¸ Xû|çS.W>~Ü!Êÿ�ÿNùwÒaÊ~¬qyùo(ç6´ûíoìÛLYZ“sÃN=µôÀÁí•¶ÝP%°!A³ûâÏP æ9Íý{žv®^·óYûÿªMÖ iÑ;ÊóŸÈT޹åtå¾ÿgw¶wM¶£òdoP,Ë´»ú;´)qŒÞ$ÍoѶ�r§¶Ô—ÓD™àY¯Ì/^kóïrè‘Ê#¦?©|áKë1j«C“f¶…ÛÕ¼j*�lmèïO_T^ýÄReïó&(G´wþÒéBaã&¸c:<òÀ'šÎ<Èú œº§)•µŸò¤C>S^ûÄÇÊn§×ä—)÷<Ýî®wšœõ³d±6êu_¿­¼mN™ÈN ÿjŸ�5pPÉÍxl;¾yIyý�6šýaqO(ombw°¿2æ8åÕóîW^óÀÿ”�n³{ø»';m×>§éóÞ謁ïkÕïf ü•.Þ†=ôžã¯¾X™×ÎnôŸÿˆUÓ�*Ð#ÀiÕ߸v�Ö_³Ím›·c[·eûHz²rVhþŒé ”mN§¼b˜õ_°k¶½Ø‘lúÃÎýŽ×¿WþºÓáÊ;ÿoe³àj®€�ûðóËO+ï}k‘r•·¹rŸ Qq�õïØ«±�pËEÖÄŸgýòò‚;ØtžÏöH‰f�@Àþø|ö7Äï·¿îœh6áÜ@@�Hðzí[LLŒ}µˆ�µïŒîœú~¾Á_•êû¹pü € € € PŽ@™�Õå¼7[íNƒknÕÊjwV5°š·åÚãµ»ë{Ž:IyÔU)Ç_e-�É{ŽR>vPkeé|¶�”Þƒ”§²ÖþÒj\›~×Ò)ϯT†(þ š9ó‹ß”¾.û+[ÙííÅkíó{¼ò¨YÿQ~1˜²CÌWÊ·6wTöÝò¹ò¿ß ¼æ€¦Êü°ûü×­°ý.sÚêý«6iÚÆè/^ì\šwêl³ýË_[S½'uÿÐwà۲’kG~ÿÅÖç¢dI>°ä¼ís¼‰õbÔõ7(�Hn¨l˜aì*d­¶#_ë3×%_Z_€œý�QÞužmtW[½hñÚѦîÔQyÈ9‡*Ü·›²C#»înñ¯q~æ-Ò�IÙx“Ü%2±Ÿ]YJ´ äåYO·/@´�;ç‹ €D§@poP÷÷@·_@\\éßëƒTißOëñsŒ € € € PI�ú]�QÉ“-¹ºÓ¶¼i£¬[o-ÃYοùíɹš³jÎOÊ™«l¾ÏoMÒ ã²”k7ØÒ�Z½c]³‚Š?ÏÚ×·eÛè÷¥Õ¸²�6F;�%{¡µí¿:Çî�?âÿ:*“ÞSxî�É6éñ6ì®ü¿{¯QÆ%ÚY,ÏîuÿhAå•ì×ÀmÏV®8XiýTœvï''Þ¬I{@aI¶~ù%`Ƕ-˧ŒI°3õ®]¨üeYвGªõ˜péK9|=„`/­sóóg+Ú�„,¶ýÒJLÃ$-ò®ûGùë¢tåo?~£|íc›Îl³»òÔK�P=0M™²½�_¯‚‹]��«<-xvÐtL³ÞzuÊ(W¼h}ö»ÆúœÞfžòÞkßWzŽ:EqîÁ]”MK»¨¶%¢rsíß»;"@D�'ƒ € PI·_€ÛS >Þ¾%ÕÇÂW™úxÕ8f@@@ª(å=¬•oúý7XæZÍHË~ÖæüÌ ”ïoýÚ µ–äÛØÒ^}Wyù¶Î^­Õ}èÁ(wùýQå¹Ï.SZKºÛêÝ?:“ˆ‡Æ�¯µJ쥼ö©s•=7Úî4b¸òÀÖŸ»›ÝÙî}ÀÆ,a%UbšhîˆËm;}ÛÛ%ÝÐÚð½Ö­¡ Ä[[úÄ'm�ÃZäß|_°¬àg`‹¦fL2ŸÛfXÓ q/»ÿŒ�˪EŠi3PëÜôľʤ†Š¢%�©×+Ú`�Þ K×ÙÁÅ´p·iÓ«¿�ª¼ë¹”sVÙˆ>物ÝöÐô1—�VÒ¿£²ÙŽTÃù7k ~ú‘rÊ_+¿ÝÜ^yü…g+Oîi‡ëí£ÿ¦LF9„,öدQ—dÂüð¡”�sÇ•ô¨w{èÿ '%—ÛÆdæ,øý…{PrÜÏìÖ_3‰~øþŒ€žÚš5m�}ïËMÐZ­Ø'¿UóÐú‰¬n)`�»;ÆóZÿ ƒ+>ÛÞ züÑm¡ ÌüHìd[9”ɌiéìÓ2#}8�¤s28ÚÅö´Ð(/g£¨S�³Qwò؊œÏA?+êqô GȌ،db ç Év%Aóý™Â*`�s‹CË `,ŽËÅ’A‹ÇµD$ÊËýÄÅðXyÙP{Ì“`ˆ¯€|?÷P2q<¦&n{oÖÄÅ2®÷9ãý‡¡2�p{ò»1|?•™Ö•I[Ç�ýL@ûùèð" U“@ᘻU9§‡û@�ÞxËâL¾¨8¨7¡%4%õOhvÎZ¨ål-°ò ÑÑôº{�fÖ ºóþ<þqùéɯÃ=lÏØÎü÷ïuñ͵n5;‡k~zò�Ü[Èab òéíßfG0vÀëa+°½ÖãeIDàã4±^3GJ~· dSƒ&R ™ˆ€ˆ€pì¶oç[Òž¨ ÀÄÓ™7õž¼ñ8Ra;NÙéä¯�ùUf�êÇ_Svþ½‹â@¼‹°wïíMD@D@D@D@D@D@ª4ETéˣʉ€�LÛs(?•7ËM�}ÈW³ºmÛjh½úÉмŽ&à‹ª ÍÞž­U�éõé,é/àVþ|wàd:¿€éèhÎdëö1tÒŸ2ãwä™X–c,ó�ÉÍc,€]Æä¶×:�܃×ÇúäLˆR28ØÚ¬,¾1ÓÓÓ¡¶ØöÛþaÛc| œ�ê¸;ì~ûv.¡=tÛ¦9М¬…КÕ…få²oÀŒä_ 7>ÏO†ÓÉéÜY™Ðê1œ5ÀãdvÐc÷oäÑìùàí@ºÀŒPààѱ?|,‹%c£8²€/–­à¹9Ì·£‚.¶› °7ßô™ÌÏg·“¯‰�™¿ ™ˆ€ˆ€Tqv,€�™É·§= �üÿUüÂíõêÙW<üºÛÑ©©©8–ßÏÙ—¡‘ ˆ€½~Ëi‡" " " " " " "Pu (" ê^ÕLDà%`™¾÷Nç°Œ‡?dî.Ó÷>`™þÿqM°6uë2hœw%Ôíæx®(ÔöÏ;Mßþ�Ÿþü<7ǹݚÉ�C!Î,€X|4}û-ãÏÏÏa@^6ã ŒË# ‰VpÆ8ÝÜ[Lc \n–Ì÷3Ç0…B,#�ªOÀînÇØýÀ«~�UÃÊ!`�aßöâvówŽ=›@åÔ¡êEUçZ¨&" " " " " " "°Ï ("`Ÿ#ÖD@"�@ÈöÃ'ztýÿÙyŒ𘹂.zø£â«CóóèçOKÝ �©^›9~zøzø=Nî"ÚÃ+Žš�Go¿I:òòÙ’››Çn~3€3Ho¿#dFû7^ý ™A×í6{3û XŸŒÌ ¨ÓÅW@(Ä#Íqó̼!'G+È ðX^Ç@€U&" " U˜€ÝÜÀ  WVUÛÏ¢¢8£SFÙw‹/°Ÿ«U‰‡×o»J„­C‰€ˆ€ˆ€ˆ€ˆ€ˆ€ˆÀþ& ˆ€ý}t|�ƒ�@€>§“>üøzàs¶1'ä#×r±~ÐŒð_-©Ò[×­‚F'n‚:ÝŒ°œÃÖž /Ÿq!3​þŸ�>{$+Do¿Ûĸ]Lpž‚¼KZfA>Ò¹f6�(/ýÿ±±eÀbMìˆ{|�Å:»¼¬§ËD¸ÂÆ@¦LD@D@ª,Û»k�o�oÏ Pe+¬ŠíGá÷‰}çT¯Îß`‘cŠˆœk­3‡"tˆ€ˆÀ^&`à‡—ž±!+uyè‡÷ûÙ÷Þe¼÷V¨ÒNS&&�ýÓ¶g¬†ÖlÀ>ù!n 2Àk|ò.`<zìs²8+r0ÈñBN>Æó\0½ý¦?¿ÛÃè{þ3h€ÃeF𘱲³³°6hæ !n€qŒ �šˆ†ü# o|•­ª*VEØw‹}çT‘*UZ5Pi¨u Øÿ°ÿ¯�j "p�p™9iíÞ‰ÛÓnÙ^wF`Æ|\NFøé€wÄ%Ô�nÙÀ1<Û¶B}ÑÕ ùûðûôox}|\çäpƒÄhŽ à÷3:ÀìÀÁr_€�f$—ñóÛã'û^àð¸6�Ï™ü~ŽYà�âHAGà2a >¯‰#°g0ÇršÀ±·%e" " "P• ðíæóñý(�а#òÌìN)0•QDÀÁt5u." " " " " " "ðð€´ZD@v•@Т_=6–=üS¶ÐÃoùØŸßç¢�"`Fïwx`Ï àwÄ#W« 4+}4>г ˜þù¡�Àxò]K¦er[·ñÞ‡Ìì!3 €åçH~àq1ŽÀrÒ“ïñ0ÁiŽîõ0 ÇŒ€<®5ñ nkk†2päçnGºº‰HˆcÍk×�wd" " Uš€=G€Æ¨Ò©ŠUξ["sv ET±›QÕ�}I@û’®ö-"™ŒÞí5þãu·B쟟ÇRSS¡–Eï½ÛM?¼ßŒó×鼌hfÞ_ЄØ# ![l�NFDï}N&½ý®X€d¥q„‡ßxøÍùÁ÷\¿qT&" " U™@dúu«ò9Pê™wŽ"”ûSõ�½@@{¢v!" á\f´ÿ ·ßå1qÜïõЫï5}ûsôê»Íøü.{òûÍhÿñÕ8:À¶Ô¹Ð˜hÎ#à·jB]N¶ÛÆÄ³‡övF D™˜‚PŽñüM,€“ñ–“ÇJô0]¯nuh£Fu© éùän�æe§AûÕê 1: +/‹šÏ¨—“c ü:w6tëæthêG<âøñ�Ce" " " % dl@æâÍ|ï·jÎ8;¾õ÷•ñí¿ø‹ _:ù6¿ìXþ~¨È?ùÛùfÏÌ·gBò_ão‰¨ÎG´ìF&ºõ‚vIâï„usÿ†f4ímS�¿1Š÷–ù79|˜ÒzZïúPþž€…]¸hÖÐõ�Ž€Óœa�œQI¶ÿ("`ÿ±×‘E@D@D@D@D@D@D Ò (" Ò‘ë€" ;��ñÿ»L~§‹þ€ ñºÛãó[Æ·oÙân™Æp»ÿn½ñÑÑì·›Óš‘ºZ£½ú3w@�™; 6†�îšqÔÖ-›C›4¡·¿F-Žðïqqô�úÕØ«¿vMî-?ŸmÿK–,€ÎYü´m;¶èÿôÛæ.\ ]½j-tÓæ�Ð-©ŒÈ.`d�历º�ŽGªjý[þ˜�±º6ô˜Áí¡uªfwÁ ÔmÊ£ ¡-G‚¶'Úÿ²G”øýýw¡/Í\ÍK¦æÚBÛºZ�”‰€ˆ€ìg+ç O¿Íˆ€«îäSºµ—Ѽö0ôÁïéW/Ó¼­±êêñ§AµÇ²‹†¯·~ÙVh¨ÇîIŽ·_r|×o_¿:ßÓÊå" mç{|Éz3PSzæ«'0gñGOCïÿ¶d}ø£¤fß '§ý ý"³4&‰QŠO~�=üÒC ­ªÅC‹½lsW#ç‹÷¾‡N·èÿïܑшM)ÿf¤çNûºmh7h�úöÖ|�Í/œ˜XF3”Œ4@¦l(v÷Ñ1´[�*B€%™ˆ€ˆÀÞ$P�‹½¹\ôŽàd;w�û¿G±Ç(ð³dŒ‹-ën‹ä|Ûãã’Z@S6| õp¤€XoSèˆá½¡íšÐÏïϣǾ‘ó?'‡íô™ô¯\¹úÏzöåû!et�ñùo1éÍ))ÈyçÃiÐ?[â]º¼Ö!*ŠÞ†Äí 5¢¡NO µB½Q°’�þ�ô%ô?¼1³#´ó °�k* ¯#=‡-éq tÊ—ù* åaíš‹ ©úgæÿ¹Z°�9YN2ïÐ)ÃË^ŠeΛŠÜ‡>ä•íuÉéÐÎfî‰út8ÉD@D@ª�˜æ­P›®|Ãþ±º´uóÕ«Ö{(n;ŽÏüpOlp}x¹£hxÊ¿K_=þ>ÔѵЋ:þ÷ ¸á7”œøß#î="Ñ~Í00 í@¾M®?Š‘�ò-V°æèØ3ؾ[[èæ�õùCï1?Šu>åʳ¡ƒª-ƒ¾;…gpÌ  u<|'.þ‚g=+¾ôìd¾éž~žûý¿>Ðf™<‹¥YÐů<ýŸ"³bÑ0f<#Úóç’¬’„߇•tHFD@D@D@D@D@D@D`(Ó�±¿*¤ãŠ€ˆÀ�N &†^ô-›Ù#Îá`˽ÓÅ^oþ =Ø¡[å}>¶Ê{Ì38�Ï|¯—Íà9~ú�-3²@B"£Ò6¯„6ïÔzXg:‚Ù[¡|ö4ËD¬[Ïc¥¦ÒŸà4s¤¤sÄ�”4ãap²3º7*ê󱥿f#Ƹ}Œp˜h…�‰G°{çYNÖ-b�CfËbô� <!ýç7 ¾]zßÄ!ЖDUš…x¶.þúÂg�yy6÷0gâd葃N†6ëHOKi¼+6¯\ ͬÎx‡¾}¨­Ê:ÖÉD@D@ö#�¾£Ïº³ÔË7)âüŒRÒ¾ýzÝ·ÿfO˜1Šgí‹%¾Y¶,üú܇«è¸KûC¿ú ºþ�c W6察Eßþ©Ý#ðlzè¡5éÕŸüäçй�AûZüŲj£&~Ã_ÃÆ í›Ô?é5èã“ù®¼¾å*蚺ŒóQІN¾ Ó~~:æ'–©cCJVYPY¤u¨Œ7ª ÔCU�ƒ†@\,ýí[2íˆû´lŸ �thŒ‹�ß|‹ùÆÏì4³ ¸�7Þ²ØR›@¯‚?‡þÿÔ” Î {â%$VƒnÜ’�»x%Ôòq\_�§&Ô„`€`zû“ª›Îv£ÆÃ�à¦-¶Ø£ó:íã8¦Všú¸LœvvÙ½àÍV‘#¼.ÙÛy˜úOsòJu9•žÿS–³_åóK¸�¿ioèùÃÚAk•Ù Ï#äçÒßòòª™+‡¿2�ªC€Ïêͳ'Aoxk ”~v¼‘[ „>pu'³ÄWiõ¾gBÇi ž×}�œ{žØÝ÷ÆWNÝ^à7L�N˜ø 4-í{Q¨+�¿.RðÁœD=;C“Ÿœ;–µŽëÈX€ëÏb„Zmã¦óWM^.õ¥;ÆSñ�Œ)=‚#lžú14g-ÉÜô¿ÙÐ"#™¤c{B«3)«Teþ©ÔZè`" " " " " " " •B@•‚Yˆ$>=ÿ®,vw+ȧoÀEÏ|A€~·‹þy·ñÿ�g>äÜÑßÎ÷‡Ø²îtÓÃSí誵‹ ¿ýútЀÐvíºCצ3ú ÕOÿn€Gtyبt±�×iöo™ñ‰-ÓÛ?dzå9Œ·ßeF+ß¶ÝoYlï7ñÇD.ìy«1÷–¶èèëïÐûñÓžuÝVm¡ý÷£¶­51 Žü-#ýéû3 Óçm†ëµ€ztH§P»$eɧ.â±Þ™ÂÞ�?®¤w½vë.СÃ�…aß/tB˜þ×ý:ùï~>:wëœÜžåO<…ž ç'�A˜�Íó¯€^=œ5´â{1ÿyúXÚa1 n]ŽåyÎc ÷<Äó]üÒ4èŸ›Ž„&×/±�ñ'ýõƽX{û'åÁøz•9V»ó¯GúÞ†³¡g=̺ßxO+èâw¿€~ñOSèu�žílm�þ:•ý9?ø–~˜5FŽtíÍšœ9¨´® Aœ ÒKß³fô¾¾<îçŸÌ�ÎYÇB]† …^Ü�÷Û’©<Ö”¯¹Ïm5¹Ÿáž=ºK²N2ˆ|æÕèÆgà¸æÛ ?¿Î>óvâÓ8ɼ<×›÷lÈÌ(”••ƒüðwj0§9|ßTš™‹fl ¯§Û >:ãùg¨%ªáª[y�3yvŽ(žoÀüžqxønyâÅЇúl‡þ3í èd£!®éßZ»Ëœ>úÔ0þ *´ £g>Á1V5à;½ä»°°¤þì3á÷á>;ˆv," " " " " " "P5(" j\ÕBDà "àóŸ¨ÅVp3€#ÆÇ‡­ßÏË͵–í™°5Öm7Ɇè°ì Ü6¢OÛåcK¼'š³øéTh£ìq·ÝÏ–õôî¹ÀŒ,àðpG–éÏï2ûwï¬=â@‘zL™ðV`S;vÀŽP@ âþ-¹`–÷HB©s±ýsÒ“¼­ÏIЫOŠƒf.eŒÃ/Kè‹èÓ¦:Ô½�9�ßF�ʺnÇAϹ¢6Ô¹y>ô�Gž‡æÝr ôÌe½ÂXóÌù@oš°Úr½ÜW ¦¿:mÁ,è“ã>„F�§ç¼k<ýák¿|zí+ôQt:¹?ô²ãÈjÃ/œáù—U‡BÏt6ô¢üW¡OýÙzå(ölläI †CÅr‘9k†äutäZ‹Ñ%KýK¿HãٛôÂ-¯@Ÿ^Ä›GŽ<Ú¼)Y èp¹òäýË -Ž` ÏìÖÚØ�ýúÑG �¬lÊüa§@Opp³¯ßzí2žûÄÑŒt¨Vóü_Hþæµ<âÐ�}¡ÃWÿ}ùÕ— K¾$“¨‡C ­]ô¯é£Ï1Ö å�GC“Ãö†E™ˆ€ôÜqôi×w¬‡nÜÄt÷ÖTgáˆHþ׬žF(“‘Å÷‘#¶¤wœ¿f=õ•%v²w±|ñ÷;e"p®yX�d¬üúùG³¡_­�‡ö=çTèqÍWXþÃ;g-·�òÁTè-wý=öô §uI‚V«É7l�8î#˜ÍÚædn„~ùú[Ð×ÿäï™2í¥G±jÄ+‰ÐSo Ú¤üº”¹'­Ø%¢¼K¸TXD@D@D@D@D@D@le¹Sì³RíE@D`?°‡á·ô�º�ÿßi±�¿ÀôÊÃÐÿHÛ=ós²ó�öEÇA­Ëä›~ûn7ÛéCþ|¨ÛÍ耚µ“¡+Vσ¦eæBýÎ(hÐ u¹y,Ûçï1�áLŽI¯¾=F€=w@aš+±KÚ勆`†möZËD åíÎß`ê&l¶<›uîÒ©´[§¨³sh_|`!ž×¼�è«ÿ®ÞñЧ.< Z¯Ð5BÏFôº» ÷Îü:´9½Ö¥˜ 2?{åg¨ûÄ« #O¤ŸœaíésHùý èÔ¹ÇA;µ[ �ôærhƒ3®…Ž9¹Ôpt8zП_dôðRÛÐöšt›ÈiYÒyS´ÁnýåIH>Ú¬_ÓÖJú[š·!�ææXtíƒïŸF'ñÇ ¨ µ_ꙿ½�ô ¿ñ.:ãžó¡g6·Ï¦ ÒÝB£oýúî\ò¿²=9…Íœkn=²½¡¬hè’Ù¯Bçw8 :á"ÎwobFu-Cúëg©Ë3û@“Í…”LD@*—@(Âm­Ü#óhÛÿáÛdA ßׇYiÐô<¾éBæÍ^ãX>W>‰Ïóes7A“:ñ9Ÿäæ“|Å—ì-ÿȤï MGòÝ×”/L¼àëBú�<Úƒ'Wdæù¿hê,ä:zíÀFÐÂ7�]Êâ.ê° …upd#hq,ôÎ!©Ð—f4ÜÕå:ìQ€æm=örè± B³ðí°ð�û ÷[-2¾Çoû†î{þ™ÐQ]³ 5›š÷Ô²YHß=•k/ɨ´¦VYNF%Ô®Í7Hå_ÁÊ?"Ns¿›"öû%PD@D@D@D@D@D@D òØÎƒÊ;žŽ$" =�œüÏÑxÚmߨÛÇVó­[R ÑQL{=ôÁ†=ØgFÈËbSÐD ¸Ü|8‡Ì<>æ7¬ÇqòÒèwmÒ¸9tÕ6z°=žõP¿#ÀiÆp�¿º0"€Çw™l¯~ÈöíÛkÃÆw/ôü£ô¿f×ß(† ø7{÷®&ôW\:d tÂ}÷@ÚzÊà^Ð^-«C½!òY¶ˆ~ƒÜôr\8œZÒ¢º³ Ù•fÁ´µÈ^´‘Žeï<=é�’åèXo“Á}ä­Z ý=·tX‡zPÛ{ŽDU7½+]ÛÔ„½Îyï­[LÎéQôÞ´o¼óÙxñþé3úíâ�РY š�’âw\q+Š~›xs€øšŒ§ˆ)tùóOt,}8Vp43Ǹ«2�ˆ"ÊÄéþ9çhæVúƹ‹=껌¸ÚŸ" ¦­@ræ”O¡+þ<:0öoè»?òùÙkxkh½Â ­ ÒK?z:aCoè¸ËÕU£ð Ì÷×öïù¬v¹5ТEh>°Çðÿùŧ¡�%£žÖÛœoÞ3ùp7ýÄ?î&�Kî:zTÑ®‘·ü¿>Æâ•ϱ>–§EϦë¼ÝŒû3ª3cCó&C§x@ϬÃ÷B0~3ôë�Ö¾ð<èi5ø+ÈåᛥV-ê¶)ïB_È#§{ÎaÄ„¬rìxÓWÎñt�ýHÀ´ðïÇãëÐ" "pÐX½~Î)::j÷:³\ôʺÜôB£=·› þ3o¡ÇÞôä7º#˜€e<>öõóØ]Óð]ÛÈ©Qƒþsì§™eÀ ±U×Þ�Çizšf^{?N³Â2Q{~ãá·×rOv�¨…ŽæØÉ½àpÒ“Üõ¬QÐŽ^ýú«¯¡o�}¿Ï¹Ð±çÓ¿íóñÀQ‡� }èúF¢wT K4ËG¶ÕL>=ÅÍ2#&ø,ÒîtÖÐQGðè%vãðÄ“¤µˆ$Cf¼ä³Æò�a<§’çUØ×Ѭ(¹ÖÞÂ>ÓŠ÷Š,›LiG80è©–" "°—X|+~éh�ôùÐ'îú Úæ�¨µ RhÎ|�_x5ß;¯>ùôå´dèÙcØ—þ¸úö+ÉB …è‡/ ìºØ&hÆM(sc3?QVF ¤Ú¿JÍßžoòJÿ·Ñofxgí¡(s±™5Àëá{aÛüÐÔÁŒ‰8k(c%î~ý h“AæýŒ›ØòÇ è»¿3®í´ë[BãôJ…Ê2ETiGD@D@D@D@D@D@ª�Ò›vª@ÅT8P xLŸê@€ øö¬–™HÀÎå³eÝcý.ãÏšùlo||<½ Y9ìûçô°­Öïg‹þf3¾À }»!m¹èI((`kºeû±�WØnôwzè ·\lTw7®Óirì~þ&6Á²cP¢Èì£5Äóo¡Øü –âu.Ú²‚C< �5‰©ß:è¼6Ð#[¼½à‰¯¡s†\mÕ¡40{#4#¡7´;¡—jÜgI³!³C3žÅë«Ò¡Q'±Cd�2š¾ƒ ›bm{÷\èÜE[ Ãš±¿eÑ ’´ƒAîÍi¼%n×XA“�TÕ2NnÕÿé2èÂ5¼O:6Ûáe*XËü?²¢ ÝZñL˃52�]#�½’ÏØEuèß>¥&Ÿ¯[íß~NÊ:,-_Î'óa#N‚zÞüúõ·+¡‡ŸÆ§wbe>”kqÄ7O9ff (¾žoÆ„zu Ñ?o†¦4äú�9ãµ› ݹ®Z§á èÅ©ß@g½š�B�½íuá%Ð#’*ó´q@™ÞþºD@D@D@D@D@D@D ’9<"éœu®" "°O X^¶;òËb›w”™5 d1ÀeÑÛ åB&RÀgzõçØCÏëãØ¹ñ}HÐâƒ:+'zHófP�éït±¤íùwÙŽnǘâȧgyF¸ËD¸L,€³”Yì’;Úã ç°{ š•ÜÕîÚæo_Ʀ·L£sÿ„Á¡ÍâIfÅïôüjs|ûóÍ›1@IDATF ôZÒ0´ßì× fÍÏØZÇI>ÿÌY õ : :¤1k뉢gÛÊ¥'é:Î&Ъ½}† ýbÜûÐq/eBOéNï·/{=ô—9äßû2ú(ÚÕbÏÆsOùzÝŒP˜XÐÚ+™ ·þÉüo¼ÇCï8óhÍôrD¥rœç¯f4†f&ò¼uo­cƒGjÿYBÖö¢ÎAìu¨kcI†HûÛ)3 ›»œ½¹ knÙCS %Ømf¬þ?ç0" ¹ÇQÐz�è¼ ü=�ºæmèÈéA¨#žïŽó®å»ìÌ‹¹6ñ‘¡ÏÖ<:ªç¯á»m_š³ÎáØý­÷q¬œ—ï��9ÿbè- '-@:oóïx†¿@N¹�ñ �KT˪Æ8¾ä,F¤óD!¾Þ±ÝøNlhv–»žL~ú™ïÍÕæÌœ±‰H7ŠMƒ.ú} t}{¾§’wK²}K`Ço¾}{í]D@D@D@D@D@D@D  pW�:¨ " "pP°{þ»½ôo‚yPËbr—é«ï3ÑÛ³‘ã4=öÝf,{fŸÙ*ÊôóÏÏã¶ž(ÆxL™zµ“�ö›±v€´×ÇÆù`ˆeœn>Ò�.æŽ `"\.³ÖÝŽ°ûºÛÃØÎ~{|� ™›À 0" p¨ìr�¬Ö¡C°ý¥i³ Ó>› }{#wX¿}WèM7 €¶‰fŽÝzåXÎHÉÝéu9zÖÇÐ)³Ö@ûŸ×ߎ¾‹ñcðÞä¡/>AÏŒ³N#h·#{A §L¶È§ùÐÿANš}û«/ ·Ð¹ß¸Cèɧ4€F1]GpÍñï@_}ï=èŸÉôc\ÒŠñuìÉ �Ú�æâÌý®¾÷éTè‡ï¿KuÔ‚véuôá:AëV�øTC&" 8?ê¿ñ—/¡ïÿÁ7T�fùÐ\ó +›¯·æ]:@ûôhíbÆgI(ü?¬r.9�oü™~:ÄK>˜CÛ9ÎÀŠe« )…¯mî]ã .zã—-ã¶|ŸÁBŒ=\ŸiÞ•ÕLNYÛkŽèFWþÄï–Bµ` ã™Ð?¾ž ~*´c‚}`$ÿ5î¿ÀJ†?ŒG_0�å3 R¡Û½ ¡¯¼¹š=÷Ohîa'CohãÜ99zî•|GÿôGÐ^á¹\>côpg²}N@û± " " " " " " U‡€µråJÔ¦qãÆU§NS¶{müî5èçÛØ?vàqô)Õ+· ,wÑ'(óÚïlï;r }hmËëd"PU ä_÷®ÖÎgúÏïêV»W~÷jhëÄ‘Ï á°¥Üí¡ç»ñÿ»}ì‰ë1í÷Njæö\h½êì)—’É’ ñ1М,öu�wÈŒÿ_?Ž%'Þ= Z�Ïô+ÿýá/z ã,Ûçox�ac8�ŒM°c\öØá~~ 2±¬öcÒöì¸(àxòÚÞf½DD@D@ª"�U«è3��¥·¹2-wå×8ÜýO°'|³� ›gÿ]“ĵ£z´‚¶KN€FûøFvÙ�>7—Q9¶æ˜tßïÁÚm }ZÇC—~ðôž/·C�+nôáÇs&ô‰Ó›q³•3!7>øt£ýÊgî®›EÂCF_ möÍSÐÇ~ã±j5á¹whImÞ„ãõĬù:#H?ÿÙG2Z͹”u¸ã‹$èM· m˜ÆØ�7'Q[žÇ¨�•þßM–ùݵçÿWæ/U€‚íÞïÕ�–©ˆƒP"" " " " " " ‘A ¢Çe¯ÁUþýgŽT™¶'­båÞ+Îj-±þð® ¡Ñá�krÿBÎä±×Aï«Ë¶´~dz'j°DM {ê:Ø»õ›n„^?cô“Ž…î] e‘Éü?×AsvµáÑb¨äö¼alø©"C&D dè!ãi�2cÚgn§‡ßarââ騒ÎtEýù¹Òr{¡&V ±·^\ûÉgÿ@£äúH;Íèîn3 6fŽeÀ²èa°ç°\üêzŒÏß2ã8ÍÜ…£˜HØÉìˆ;3|t€¢çÏNŵ(" " "|çæ™·|bß�HŸqûÌ»zrD€?çñ×þœß¿‡¾j¼úié9Hg…è‹õyù�X¡zø·gê<´3Ò–ñ×¶z Ò¯…슅c8 G‡ù"ž¿.ls%÷@bÌ�#Æ„-æïòó#:‘1 ž¡Œ ˜xc«G•ð1wd$B‹¿j–~ôôÑŸIì�#»Cë˜â®Œ€8çjFOXö\EHÉö=�WkßRGØ_ªTD]á+Þ`?–ÃÏa GÀÜ3k<†½Pæ�?Zr¨ËPÆoÈöl6²=¿²O¬ÞeËzÞSáì´bÊèƒßÒÏ¿6û hãI�R¬ÁÈ�;õäyÐ{_øšž~7ô¨DjY–Øÿi¬úñóˠɳGбÿÐUø”j�ÿÙ_¼×úôà ¡±j»bI'¡ô+?M†ž×œ¾J™D&¯i)yØæíò²]L,ÇÎÍb ½ÛɈ€�©Þãå7%7—ñ.Sez6¦§oCŽ'ŠC†xsùlLªÎ耼\Ó{Ðøù-ãÛ/œÀ±p\Ûçoư#ì’EÊ#Ú£ ñ¯Ù9Å"y c Šåý[^ ¨jì(¶Ê­ß’‰í 0² ß°…ÿ\Å×EºSo[‘¬\³bp¼Ž§žO ?²‡¿IjÖÚ«c(xÙÛŸQÁ¥šý[ÂPiqÒÿPäIþ»PŠíßX€ýq甡’³PÉÀu8ØŸªTD@ˆ¶^]|Ïh¿ú»ÖZʤç|ÒM÷Cáó߯v¬!/þýàÂæÐPn&4uëè¦u+ ÿ,¢~©Ÿó]�8·´®Ûø÷¶§#�––MÙ¼ºjé?ÐEËèóï|îEо vôÌá(àǶŸ&B¯þ¿Ï Mÿ�ñËc=5êI¨k$GÕ“ãjºLùÔy“�¾þüg g¼ ýþöðqþñôæÇr #¸Ú³VØu³¯NC3Þ¸«%£ÿ°'4d=§Ýyô݆¡à‘‹»A\u -£mf �=m>t±Ü�dÈć—±ä5Io@‹â,xF›>ºÚå¢MP™ˆ@^¿•ÑQô x=|XfToc¦§œËøí-ËxìqA®uO¾ËŒ497ËÔª•�Љ‚fåäCóóùœqŽÀç¤ËìÇ dF(Œ°Ûã #¸7Æ7{Ù2´×”) øZ�ªEÀ~sÍ€[v”\eÕϼÍíleRÇÙ+ì»E{¦v"" " " " " " "Pu „9�«T%=ìQsèñg@‡›þ6¯](…ýo¼»âö¾sñgþìásÖËÙ²e­tèO?Ñó6ì¡' ÿÈ16kº·C¿»§?ôʯè£k»:ã'zäFL¸zþií¡­ë†Ç Ãá_ÍÞþc. ý³7køÑõ'@;ĤB/Á�ÓïyÚú�ç¡W4e¤Àæö nqáÓЇÿo8´m<½w‰C Þ½el-è‹ÏÞؘ>Ãbþ¾†‡#g‡)@%B6<űI?iÊü�' ‚Ö2–.FZ&"°',‰c™þ=ÆKo9ù�sûèpO7ó¸Íˆ–‹£8Mù`Gp™ˆ·›å±†'·Š‹‹6i~QÝnûÑÍtq¿½]ž ëá_lìólß …aöÃYüÉÁ|³SD"" " Uš€ý~ÜU‹*Wûn)úeUNÁƒp/ÊD@D@D@D@D@D@D@"„@U�ØøéEïpåпGÒ7Xð8ô¨þŸB;õdïúvÉ;ºþôºý'äüq;Ä‘ÿÓ½ÐÖ'üí~ôÑÐneŒ™ïnÐk¯Koÿ¥GŸ ígûáj }ØUÏBß­ÿ5ÔÕ”q ®íŸCŸºî)¨c·�&€‹Q¼þÑÐ^ùZkâ7P_¡É=4ÆD¤¬ftÀß³&Vˆ± «S™ŸZ ]ü7ÇMˆ5]Š·®á( \'Àè±YÙÏï…éàïpšgm0D?‚Y»ië6¤cùäq™BŸ0~¿éùozø{Ü\òäB-'ÇãÈÍÍ�øùÜ((°K²=·ÈçÏüBo¿ÀÎ÷ÿ—ÌÁ&ÜÊŒ`?� sÂbB¡°ÁìÕR¨bl¿n^^êeGØU± ª:UŽ€ßÏqß|>FhFšñ¤LD@D@D@D@D@D@D B(" èBç}�Ôí;Coù›=uÃíǶu™ƒcé_ñÊXhôçC^)fç·`Éó ójãï¹ïþ}ù4nëtÒOØþ�uÐ#Ñû÷ë·B^vns¬xûÜ2ÖÚÙw�æßzœ¥óãy×`HípWVÌ8GÀ¤KŽ –²Á…È;ìÅ+’ʘ´DAeˆÀÁMÀiñ9àóÑŸ¿iÃz¨;Š‘5!`«7ŠsüzL�ímwzØíØ~~~sÝ&. /�QÑn®�òRs #4#ØóîúùÍÞÌFxÜ È¿ó˜¨3CAá<½a#Øñ…>3OA±�Ì#DmƤ)¨ÚbccQÁÜ\¾%ƪ*. j_±ýY;û±ÿØwÎþ¬Íþ8¶~Ýíê:¦ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€ì't[E®7\aÏWß¡à0òúê¯HûúÐÙg@ï�ËÑøÏÿ tü9í 5Ì<ÞÖIô~�Yñ>tô©WCߨDŸÿÙ¼ wV[h‚ñ¤¹Œ'°´—z(sÁ‹Ao8ÒôÃGj÷Í�Mÿ~iôœ×v/E[ò\FO›�p,£¬ c>¼¬ôš¤7 óÇM°ØoyÓGW@»\´ *p¹ø½¨–ÈïNÊfÓ«?Ÿó�ÄÆñ‘òP�^Óÿ?À’ùF=Î àvó™0#-z3b£˜mFp"Àáðš1¬Ÿ+–ež.æiS˜4³ Øs 8ÍÈ. à´ûü Ùåû‚™]ÚI욉Â�B<®LD@D@ª2�¨(¾[mïnFFÆ¿éª\gÕm°#Gø_˜}ç쯚ì¯ã–öÿéþª‹Ž+" " " " " " "°� DvD@�Þ¶€ƒ}õ½ÆÇÞ¹ß<4úú*öà�q°5ñ‡‡G@/ßü0tâÆ´prÌü—î]Ó¬;4iÓ?ÐÙ÷�¹í)èc×meÜjHílÜÂg(™¯6ãp&J‹€ˆ€TMö;1&†/N»xVVÒ¶¿WãTÍ«V™µ²ï ;ÀޱïûΩ̚T…cé×]U¸ ªƒˆ€ˆ€ˆ€ˆ€ˆ€ˆ€T�ª�þ%\V8Vÿî³h\þ¦&"Àϰ‡;oô‹±@/ÿ€s<ò=ÿ_: zÖ c é¯|ý}®:ùÑk /%Ü �rõjèI§UƒŽy�ùi�\=þÂQÐgºÚ'™c}ÛfÅ7CbÈÈs¡�Ü?@Ç1:q-d7­éí³°å‡]N�Ž<Ÿ=üë„X5³pÅ BÏöó0Óî¼únÃë �\ÌžÿÕj¶‡Æ[ß@ÑgŸ ‹8ßÁÏ qÌ¥@of~~£!~ý™ý™c cضd Ô€Ä_™D:»g~(ȸ€�Å'†7–O€6ÓAFÙx§›k=Qæëêb,€ÓÄ(ù|& €Ã 8j'1¦Àíb™ü<~sóØc?´ûíïhÏušH„ÂyìtØìö…£ØÑØKiV8ƒ€YU)ਪ/‹Òê¯<�H&`ûÿí·¤`ÇØÞà¢H:¾=#Ó9÷†}Ø>G@ø¸‘9:€}ìø9÷„ÎTD@D@D@D@D@D@"–@UuòÄtÄ%¹øúáûÕßµÖŠPæþî²µbû;8K™_„ç©é¬D@D@D@D@D@D@D@v&P!ÇóÎU²‡cézüÐám諸…RPøÇ»ÿ;" ˜½%Sòèaë~{òß}3=óQQl% mî ½á±&Ð&µØbât'A�ýtºƒGI43ƒôøÇ:B[×0%«wEúÒg¦COwVƒÚ±H”cþôMX»fÍh….L.ýöŒ|¯™«ùyØ×‡[©ÅÌÄcvd" " " " " »÷‹zãÆ�@§ˆÝ?" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÔA[§*" " " " " " jÐ= " " " " " " D@ t±uª" " " " " " " †Ý" " " " " " "AÜt®:UØc�´åØÇô› -‡mêÝã�îß„Òqüß?þº¥ÕQЭ ©Ì‚ÎNk íÛ›ZmšŽý˾Æžš™=â¤ã¡‡ÖÞywþå³M?´ïi}¡í-è�bþ¥3PÕ&o€~ÎYоÉ;Ÿã�r.ª§ˆ€ˆ€ˆÀÁM@¿Qî뫳�bP ‡D@D |V0æ~ô.ôëØfбë@]øYÖÏ/!yú½¿@sŠ2wü�ê�ôøIçC{DïȶSóÞ@bèíßA³w^¹ëËåËÞ]öß_!ñÄkA{ß3j6B¿}ûèõ.‚ög @Ù a]È¢÷¾4~ùÎ�~>›¬zœU² šeÖÍÿúÙ7M ½Ï)mOXnÁ-XšzÇÝÐ 0Ž`oZ+" Å8ktÃòùçý ½í§…еýéån\òiêi†ü³Gõ‡¶5®åÜÅÓ‘~àSÈ™·9J\õÀ%о5Y8õ»—¡WLª½õéS íÝôÃo™õtÔ' ¡w?8ÚÂÅü­ß¼ù*¤L e-ƺ7Ÿ™ ÍíËc�ÚÚÍøeô­…ô±§þõ,ôdV¼l³QÐeЧ/í�wç‡2�³xþZhlOŽÐ>RÜŒoÿ�9ë‘ÕÍœ+² æërJß8�£3*¾‹Púß(üÚ³¼²e[.Vý3íMè„À™Ð×숀𠂛±ôµWRÃóítþù‚­+°~ÁêíPFG”fy-xÄÇ&_à<¤ÿ|ûièÓÿt„޾©/ô�bw£9IµÔî 2�Búe [AD@D@D@D@D@D@"ˆ@1¯A�·NUD@*L °˜½åGŒùº±˜»v>r.8å³'ú]ûÝ0zE�~Ú�/Ú­ghg®td9æB�‰0_§“mµ.Ó`ë,tó�U˜OÏ¿ezæ#‹{ËwÙùÈ-ÕòÙ›}æ3“ ï¬©=ïêvÐè�?Bïš^q_?Ž{ÿHÿzP�ƒžðÍ+¹Õö8öŠoZ“AÁ ,ÿГ‹¡=�l�³ëÜ„ôÇ·Ý}tAxö§�3ä ª >޽ñ/J$É‹Y2óÏg¡'΀ìd<ÇÚî…¾qnsh¸çßU¿%rŽ<¢-t÷^lÁ-9Øö Wù(ò_æäœ ýÎ?Ú·ž¹xá[XäÖ Fx>¯cö"Þ]·>0JÖ;Ë7:ëzè‹Ã›@ Ï=ÈŠ¿3xSÆuïíÓ¦Ó…w ’2(…@øo‘RV+KD@D@D@D@D@D@Dà`"°{Ž“ƒ‰À¾9ãܲtöþÊ8hŸc[C«í²—†ž¢Üܨ7¸ úñkK¡M† mã£ÈEWã.ìØŒz�¾% [e…;ê°\ܜщȨS�]u ÷oú¾~óÊ4ädô>zB /T&7gã£q‚÷M<à—²Tã·$:‰ßǵïñÛêhÎþðuÃÝÖÌ­˜åsäù‰£èžXb‹[Ï¥¾¸ñÉð#fÏD‡û;çäÓW?ó©' ÷“ 8ëAÝþÕÐ)½ ý&êHèøózA;%˜o`%Ò¿?þô»~þÉÞµ¡‹{ º¥M?è mèë.|V Ec[s�¾§B¯;šå Ûž3þFú¥‰?C¡<ÈâYßBUë ½êÒàõù9Nþw/N†.ð–÷Ú ¦ü€2·_ÆZ}—©�E÷» åÞ9³B…+Pˆšvè=â�Š´¶“Yb/Öa*‘;«2qÕ5|Òv¸{ôŠGˆÏí™ãFAÇþÄ÷B1[ò,‹GRp«ß}äÄzЊÔÅd" " " =ý*8è/±NPD@D@D@D@D@D@v(ϵ²£ÔA›¢CüïWé-¹êýth™®¾¢Ž¼yoÞ@ÏU5‹Ûeþóôýi@Ÿ÷tQ*}é­{ö…6n¼úÖ­ï@)ÓOÅËÑcäÐ{�­ ­™½iç-qkS蟳—@£1ýëØ· +“éó™ó먟RÍ™„ì ¼ :¢ÙZ臷>�T¼»3rŠÌB¢ÆPú�®÷9ô†EGAŸÉý¬þõwèæŽ§Ae" ¬¨ê8Íz5ƒ³u;Ÿ%ŸVTòkæü}f:{›·?· ´vXs«ÇËWhtí²ÐD¿¿5›7¢ZÙÐŒúÇA_xžZš±ÿøÜW€>š6úÐÕ| ÕäW¶Lsìg ­úüeèý³Y¸ï±à×™¬�å«Ïœ³é½¯—ÄÞæI?¿ }"›é³û EF›ç~ ý4½7ôþk{Bë§5;YlýfÈéÒ¹1Ô.JáóÖî&ØÌçÉäÏY‡Ã.…éÑZìåX�œ¯å2_±5È 7+�c\8ö:èð’)¼hXÚŠ¯ƒ¥(‹Oï’J[…Ì_–°†� ¯Ñâ-¼!æÿú3ýÿvØ„ùæ›>þ+p<ˆ·†]~,7g"¯{×Ö|®šA$Н.w)ºÏ9XÿÌ9­Jß6À»ë­&AWâ#�âÊû�R¼¤–D@D@D@D@D@D@D@xå¹Vø“Û•ðu„âwœAïJŒUÖ–ô­øüè³t‰ýkÜ ÚöSÕ亲º"†]NïÕ™k7φ¾ån 9Žžœž‰a‡ mEÎô Ï@ÿ§È\É]�<¶öýÐ/癳*sþü�8ô®«è¼2— ¦ÓõØm3¡É×\ÖÌxà̈â±5LÚÕ ùç=÷´ÛË7Bïr\}ë\®}íÒ' YWÑß8²3sÖ}ö14Ç_açJËDà`#Àïþúü†^òcjü%NÐÓ²òúA®Óúhx¯xSÞÓŒßè¿ }î–¡ÎÝ 7?|!ôÈ\ö™¿oä»ÐßJtGf û9£.¥–mü‡÷oÔïtäÜÚ€c—tOøz¹‰°}ÒµºôANMó$y赟�^7ìh¼•-2î3>†L–Ïš�Ú…gѶ§ö\ÃR¹bÜĬ×ù„IóqwöM†–öZ"ï¼\ž´å�Šbyª¡L“ÖÔ]µ Ýù¥X`¯Ëý÷΂¦{ò©~ÿ8jI›ñÒ ÈœQrEXNÔQaéíVIPÏ.€3»p‘“×Ð`œÉNàZ÷®îs§�hQD@D@Dàà% ˆ€ƒ÷ÚêÌD@D@D@D@D@D@D �Ò\/% EB†³=QíÚÑc_ö Ìôº»~3Ð6ìLÅÝèd]Ј^²¥ï~�lÊsÉXô˜U«Eß~Ýêak‚Üs‚/,ËG~6[jêA�¯]Q3ƒôË¥ã¡}ú²¶5½ôìÅz¹‡¼TzØRœ  G7f™„x³O7�[ŠÛÙ2�ÿ$Àobã“o�~yré…ƒ© °bÒë|’Œ?›F­Øy¼˜Y‰ì“ñŽ‘ñ-[žôÇ ÿÁÉTG>£„þþc 4�•"Ë[ŽÔäÇfAýƒÏ‚žÞ6Zl7fÉW¯9ò»4âó¡ØÚ¸fÈéM¼#ðµ˜Ó°8çÍ)Я¢øLß·>ÔíX ·è–Çbq䉌Bºî¥©Ð~φvã+fk~ôE—A»™Nö®©ŒHº;n(ôÆù+|h…LDo…L•m�Å`åˆ1_BËÅlîëF†“në ås¹4s·c Åä�¨á–½a%7x9³$ÖtÛ¬§ #žä¥ýì•ÐþIaìƒ<�Œ–LˆeTÅžXÎÌW°ù™3Ëß�Ò¡ü"Z+" " "‘‘—]'-" " " " " "©°W®<vÛ7­ƒnÊ¢g~MJ4�Á.§ËW¬†&äåC� +bÜÏ·ÇBGL?Rø¶?å�W¡+:÷„ZgG»mó�½XÞŒ¥?Ÿ�EJGjþtfåŸÊ'À³&" bÞg>=2ç~}dûáŸvçIÐ.¶‡Ÿ¤âfüùm1.àð©oCßû�‹.fÆ“¢º’Ûò×ïƒxRܬX,¯ÖÚ£�¾n=ËÿöÂkÐÉmFC‡· +Ä'ªyˆ:¢¼|m…ùÙ±T†¹“±â¬ëèó?ªVQ�X–'³äƒÇ¡OfsyW-”ù76yõž§ _Ô?úôM¼"…ñ Híl<»ô_ß�^ög8kŸ±'6ÚýWpÌñWbS®h-å¸þ�ÿÂÅ¡á7e" " " "á¿�DD@D@D@D@D@D@Dà '°ûÌ.�^(Åÿ|{ôæôüûÙŽú…޸΃éÓsÐ73ö¼ÿQñÙÙx9zô±s¹U§‹†~Þ6ô¥™+ K¿ Æ÷ëí=˜þ·cꮄ>÷E èˆûn…žÝÜöÿÑ·¶lò8è˜��B‹ít*RÏ=ÉÞ¿3'>�wøÐkcßàÉ·¾ÍñÐs;И÷ë¨L"›ÛLësô¥Cý¥£pÓÏœ6—cslzžßôäÓO‡jBïz‘qÛ•Ó9/ÀK @›'Óã]¾ÅÕ¬� Tàqäw•)¸¥ü�–²–^öø®|><ð@´NSzìË÷½;“ø,ºôîúИfìe_¼u™Kuú ƒÞзî¿kCé"ýâ#?A‹Œ•Nîw&ô¿0‚àÑg¦C»� m^Àglvˆu‰‰¦ÿ»üZ¡ÍÄ,ÔmÒÉ–õÂëÅ+•SÝäd#¹+HEé_y:%£-ôú;øl¯gº)H•f¡Œ…È~{Ò¯ÐÌCH£{r®fi»ú7/”Çk”šÆ�R"Û‘ŸS2Žãß핈lá¿�"›„Î^D@D@D@D@D@D@"€Àž:%DÁÔõ8—E‹ 1ež•éﺥ„?Ðø�¿š½1g^Aÿùó—3ý~/þÂ=  tÅ-ú˜ËÎî¿ö6ŽðÇš:О£Z@&3Ö ÑLfí®Åüuy{¤$·ƒtr+Ý.€ ‹Hüþ4ô²I|V”x 8¢û1^དƒ §ÿ<úԢ觭o¾<�Mß!ýù_Ìo=¬?´;9å=ßn=¾Ñ¾ |ÿ‚,Yñé­Ä¦(?dŸyÍ̸ý‹éÕ–BŸ¿åU¨÷ÌK¡çµK„vÊgZ�¬ta+²™ %¹eä”e±õx”ŽC�ãÜJáóÊvÉÛÊÍØ‡¾çý|ôTèó3qpïa$¶=ijka�ŒÊ²‚­8Ò/=;ƒñþׇö«SxNH—bù›�9óy>•'§òI;êÆ#¡õí��*Ïx”œ”5Ðßgq쉗ñ~ˆ6~~Í2�Ý& ˆ€ÝF§ E@D@D@D@D@D@DàÀ#PÓ�wR»Sã¼yŸa³ŒVdû(:uJ1ÿêEÈý9•þ”iÐI?t‡ÞÜ‹~6¯³ºm=K7ÒS´|ûÊÎþžþ·5ŽÖХר^l:ôÇgŸ„¾Ÿ0:¡;Ý@ϾNŸXÒ!¡Çwýºr û‚º-ŽpÁCwAG´°�M¬ÃÒw^)4ÿVö^žôè§Ðµ=Ï…ömhÚƒX|'£÷)©3ý–§×b�·¬]MãI8¬â 3K&@ÀÝŠþê±—sŽ$‹ßÊ…ï=e´ÌY Òç´^Ðwo™½ÿ½úÐ{†ð[öÙÄÉÐß’¹‡‡6„zð)ϸÿ¿§]ãå÷ñ¿Œå³øHpÔ+¿¨™_`ñrÖê°A� ¦qLûêõ�^ЫôðֹЛÆ?M¼÷JèÐý ðq8‚ÛBß{ƒ±I§�íW·Bnn”,ß< {£À¹ÿ€~âφfç0" Ó��®Ä)ÜjãÊ•Ð%Yæ)‡�”Ö˜§´Yü/1£À,|—Oã;?ç>{ÿotTO>uÃ÷‹Ecôä³èÉŸ6‰q[ýÀçö�ù¼Ô°ôkÌMÅÚåÿ�3›[kƒañãŒAXy$#¿ŽïÓ šËW‡C³�‚LD@D@D`w ”öfw÷¥íD@D@D@D@D@D@D@ª8E^ èc.Aêíkèå‹+Óád¼s¯Þ‚2×o(Ü0ì½7‹¾Ÿ]Å‚ËÜ^û ú[köt�{+}kÓ Ðøûù¯ 5…žvÎhÇf ¡‡$B°1ÿtv9ôþM u·õ›ñ¡Ý9«‘ž½¬&ôœ³9÷œIÛ /_7’ŠOq # ?•Û.�=zË] Õíóµª!Ýé¤ÎЗï¹:úÂÛ ±&«>§WêÞY4©}S5¥�K&‘FÀŠKÂ)7iÚZÛɱ2«™UºÏ -º Ǻ¿þô%ÐÑï< ½r¿;›r[@ÿïþã¡­$ôŸÆoÙÀÿ»zu× |ãËQrÒC¿Å§l nš‹•/Møš8òBh‹ù„ù¢#Ÿ�ç÷®ítæÅЫVÝ}ì±Ï¡­ïåm½ òÇDS—ý}îÝ6ÐnWñyRÍ~ž µÛfÆ)èráÿa��d\4ºÉD$ÄTøþuØêÍñRñ)Í||0ÿ—™qZ Žr×7‰ƒöêÉ(�¨bá‚· ³¡/Þ>º5§ôŒ›ÿ½°[u¨¹Wð7Üò±°è=^µ«ßOƒ&µáU8}i÷îÎ(€F‰|Y[!®�9 âÈþœ yYÊ1ÆhØåÒ*�$PÚo’Ä S�È @'ƒl¯nþûyw½ô�¦wh¶uôR½RÁ–L?GŸÏ¥ö ÝðÓ—}ß:d}ìu‹5ËÐÓ¸èÓG¡£?˃†Û�cçý»¸èE:"�r°·ê9ãn†žÕÜî©DzùÎÈ}ã&H¡Å´„Ô¸;XCãl+Z᤟³ë ¡k͘ç_Ûk¬(æ_BŸääKì,©ˆ@¹Œ¹Ñ‘G¢PÏÏÞ�ÎÚÈòqèi¯næ™Y8ø=,Ïè+þb£�¾¯øt—3FŸ-+¿ÿ:?ŠÏŸ»»Tƒ®bp@qóЛ=àâS¡Ë>àSÈ2SžÖÑ }Ý |ò îÛêŸ4:íD¦Ïhb?�,´¬ +�š¿ j?äBéë‘¶;é7(,µóË<ž,ó´Ìز«Ó=µ u*ràiŽò£»zB½b�Wä”4>1Ë6g5zæð’7–×.ä3yÆ'¿@ÿNá™Æ´;zו'B�LöA˾Ö^¬m=˜�׉}ù$o™Ì¸ƒR^ÏGIèqÙ­ÐI§¬†þ�Â(ƒ¶Í˜os/Ha¸ÚÖh^»z1¤ß¸Áñì÷Þ9޾äuÆ¡ìÏg B�qŽ»MuÜõèÉNî0>,¶Î]]¾Â�»®'´ï”g Sg/‡žÜ¤”pw´ic"®›ÁåbfÅb±C±,.„ÌC«pZ’@rþš»Œù�¯T›‡ý³j´D‰ágÕ†[¶'þ?vSlu¨€žÿ-ëìs_�ô’%¬Õï¿ü]°…GiÐ�×ôª»�‚Õ�>ùØ’—¹¥™³F#dó¹_Ž…±õŸ¡Ï=Ï{éwïaÐÛî9Ú3‘¡_S_|úÄš¦Ðó.= zR×Rb �/ˆdþ‘É�tî" " " " " " "p°�£`o\IãתۼöuñQ­ qtÕše[®fÇbyâ³ôCô’mžý2ô–ßèw ·­eše¬hŽÒoœsw"ûí×MÈ�þñÙ?ÐôìTèË“C_KÿXÛz]!æ¿yÛ T|Š[ø¬ög}úñn{Ôôï qo³{:§ó…ÐëûpÔƒð#+š½R÷’› {’‰À�DÀÝê8Twìå]¡I…Îf~…rþúzó}ôû붆ž:šß ÓzñÛš`¾ÒztAú›�YòµO¨÷ÍX½êáQÐÁ)oA‡Þþ4ŸíΫ‘üèßÅ &^¿Ð=ìp7>úô£ƒ¡ÉiìíÕ˜59óØfPŸ“9-;òi“=ùIèàÏ e›ÅçAÝã.ƒv¨IÿÒi}˜S‹=ÛƒáÏóähvÎõÈötr°ŸlH”nù+‘ÿæ  /.ì(ãL@ú˜kø¼ªþ0ÚQ¢XÊY«–OZ,sç…¯šËëµ*Ç\Ètzø7XÇúž5Í_1 9cnäø#ÇœžÅWgͦ͡ÿÏÞ}€GQµmßM‡@Bï:‚¨ MDÅ{Á^°aAõµ ŸõÅŽŠbÇÞvTlØ)¢(R,¡wB éûÝÏL€ I 6a7û?×ÅÍdvvÊo`vsΙ3½>Vyjk™ïÕÆöÓ^ bñmÖÊæOvþͼ7MÓÓÓj+ûžò©ãíßa«¢')4Õô�þOÙæë÷•ßw§ò‹ÞvÞGžw¨rŸzÛ�K?R@@ bÊñ•*bm8p@@@ª�@�›.Â×gË” Úùc§”÷úù/i7­v8æxK§jÅÚ•Šo¼µ5ib©{]õÇ[Çîþ�N°9�›6Rj€fhAë �úå+Êû¿¨§¼tŒÝÓ›õæóÊï·��mí<']}ˆrÖ=3”M†_ ìûósÊÇÓ­åÿÖs÷SÖ*j½Ô¤Ç_GÙ2ŲX)´cùÃkºfk_jÓº±’£bJüqö? ékƒ}¤�µÇ¦´HVÚÿ–­Å×ôXMþ_#k{ï°в®ÿËÎbQµí>ðgÚ ÷·R9ûoë´W [4¦ÑqÊžý�Ò®A,Ñ ZY§18¶µ]¼FŽñ¿„Ù«]ϺQùêÁK”Ë7Ú•'×aÄO¼Î• >É®WmÚÙ•!ɹ4$5TÓ�õg{±kKïs/Q¶Ml¨,×5$Î|†Œº\Ùyc¾Òç³÷ÕhØRÙ¡…É—k=Zn—Åy²Cá⯴à#e*ë׳sÚt°u$ÒqûÉ‹K±Öþs/0¥M�ì̶oÛ\Ù4É–ñ»¬ê§J(N�³Æ�ëjÕ�޳kûðƒl$�ÖIe||ÇØQt>âå�l¬„‰SíÄשéœ~MQ@@� ~§@@@B_À›ššª½LI±VŽÈ+:äy/ݤüï"k»õÔNÊ¢Û-5µc±¶»?}FùTÁ)ÊW¯³–¢â�µ¶eþzëåÕ+­�ÀëçY»Ö#>«ü†|ÞU‰²;uÏ»ïZåÞß?¨ü¿¯j(�¿ê"åù½ìÕèÌ•ï=þ–òç,k±[4k�²õiÖþvË)Ö T;ëåÛ÷?®|~ݾÊÑ7Ÿ¬L|ÏÚý®ýÔî Þ­kÿf.w�òÄ–Ak¥Û­]âÍá#�“S‘�ñññásˆìi øÜÇ 8móEϨ¢-³@@`O TìõªU«´Óüþ¶'ÏÛF@@@ Š"¼G€µ¥¯›û“òçìvÊÃz4QÚ½û¥[>í¯ß”s³íÑÞ{7RÆ»IÔz¬šfãK¿—Þ]yþ [&}åFe¶­`—Åîä¬ÕÈî¿�[ü«r~m»gSk -¶)ç™Þ«§~¦ùßÅõQ·¥ÿþø²–hÎä�­w@›!ý•Í3–*÷áõ@IDATWd”kW´dÙÅî�­×ÒÐL[6¯”*P±úKz”ŠÉL@@�¨Ø7jzDà?@@@ Ò"¼G@¤Ÿ~Ž�=%P±úKzì©óÅv@@BM bߨéjç‘ýA@@@ Ò,°Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�J " Ò‰Ù € € €¡#@E@èœ ö@@@�Jˆ©ô-°@  ø|>MAA�²°°PéΩF‡È¡ € € x½^MEEY ztt´Ò�SôrØþE�€°=uì8 € € €� Ð# p3Þ�)�ŸŸ¯ãvûD$� €Dœ€oP÷{ Û/ &&¼•¦G@ÄýSæ€@@@"Y ¼«1"ùÌqì PeyyyÚ–;"@•m” !€ €„ €Û/Àí)‚{Xž]¢G@y”X@@@�j"@�€jr"9 ¨ w\úT†-ëD@ÂWÀý~è~W Çñè¾ÿöØs@@@ G@Àd¼"AÀ„ØH8^Ž@@ Pÿçx½Þ@ß¾—§GÀÄgÓ € € €Tµ@hô(Ü ãžÿÍ7Ê?Pž|`3e0j)|ZOa¡Âb549«´W?¿ÿŽraû³•gôHV†Ø^j�(D¢€[¿‰GÎ1#€ €"à~o ¯‘‚ñ»v F,‹ € € €{P 4zxÒEðë“—*¯.¼_Ù£Ï9ÊvÑ 5è/WL<¿—òäWÚœJM-ÛhàµÊ7ß¼E9 aÈÔ}Äh–OyX9òÉLeû®SöIÚ±O€/m²æ_³ï‘ʇ–)J+É4÷ñ¿P^ºw§5ÿ½zß~ý•×ÏËR·¤Üø�V8wÌ!ÊÄ"¸›bmTºO ¨tb6€ €T �püÞ2¿W‹ € € €!.PFÓqïuTKmpÿú) nùD9méYÊv­�zЍ†šxû7Ê?GÛ=ÿž‚ Ŧ-5”IµÜn6Û-…é³5ñÒM#•�Ìê¤<ïªs•}”^ë‘?÷ ½zx¿Ë”ßXׄ ”úZËà§PNºh/åŽ{i³š+þ3â*eÏ�c”ã>:Eùò™m”¥�A çw+o:ÌÆPpݳ缬é+ï_¯,i1ê}-üý蕉^SÍøñ.eÿa¿+G}òºòœÎ^û6kú{§�øBë[1é…Ó•mÝCÊ™©é¢|C(T÷©Õåh8@@�ÊÇï�¥ÿn\YB¬@@@ö¨@i Ï{`‡l7Úö:BÙ>çIå¬E•g´®§ôzâ”õR:ZúìÎö¹Ïž§�”±ú³³bmøGÜpŸrx¯:Êb7¹ç-Ôœ·¯­üºßíÊÏꪴ> Å‹/mšfùg¢ŸRÞ×ÑÊG[ß�ät»›½ípëS0åå“•ûÔ-ÿZ¿ƒÖ¥<á¸ÆÊbu$9ÖÎ?Ï:x¦vW~=ÃîáOêb#íG9-è õšjºa¢s¯»¦öDIØçBmvÒì¡ÊÂ]ì€ÕÑÔj–¤Ü8c†òÇœNÊëÛÙX¬¿‰6“K¾MUžç§­w(y¿�לÎFyÐ3S”wrÇkØaÁâ?:#ÔÜýî Å×ÊO € € €A¨ào”AÜV… € € €U&°‡{x6ÍÒ¡>sú±ÊÇWn?êúGÚýÿߨÃf®R|úßžÊÓ^Ycsv^f>¯×GédÑ’v¿ýÕ“g+Ça£Ü—Öh�«ùKf~¡œ]b„‚üš¿ [áÙò×Tåg“2•6bAñâ[ÿ‹f,µ•iþKT�–šÕÞé °t}ަKk˜·½‹N²þ )ñó”ãyU¹¥ÏíÊC:ú?ýÀ–ŒM°'Ä{6)ÿýc¦òç {Ê@VbåÁ]í‰ Q>ÛõõˬWEÆ.º"Øm^·Î–ôØšëÖ´Ú¢-Yö¼†]”,ÛʆXÓ®_£4ã]¼Ÿ—¨æ³Rm“§¿\¢Ü�iÿOw¿ÔM´ÿ¡JQvom}©( € €@¤ ¤9¿©-Xo¿ƒ,ßl™áüFæ:Ô²ÁÖ<ÍkÛo:�ê[ÖM°9‘\èÉgŸcG@@ˆ8�=Ü#ÀÛè‘?挴ÿèúÉšþïç(Ÿ~˜²ƒÛøíׂÝè¬74æ‹§*[:•¾4{×5ûÚ»–ß3Mùú™m”n GþÜ'4}x¿2Ç×kÛËzM~6ælËí3K›šx“æž:±´—¶Ï³;ùoÿqÛ”Õ?­þüe¿Ó_W–ÖÃÁú´¸ôvåu9ÖàÖ©•£>:CÙ5^Q¬Äu¢Ÿ¯>q’òÞËÍí1�=õ çè7•“�  5ýÊÐþÊQÓÓ•å/÷o[¿¿¨ôÑ ¼IÝõêÅÏýd©?¥–˜}5{ä´�–¥.°m¦/M“Ÿ_cëVÅ®Éú™‚ €‘*àö˜ü·}óY‘QâW²�²¸½段wmtFÜÖ¾½D¶š�n#^ä›U8œ%ö@@@� „F;oþ?:œ/^ûX}Âå!Í­BÆ­­ñ¯šY3ÑZ§÷wR;–ˬ=êÃËvœ­;î5«OÉÙ¤å;ÓÑ•^dµM9–*wþÔ€¨Ö&Ò%6fÁ–z©Êï&Yî¢ø¬'D=§çBïööìƒÒN°ï’7¬¯W™ãèEëaÐ%¶Ì~¶H›»3Z«]¯Ò6fËP@ÀO ;Ï®j1AºÚdç;WKgý¹Î…lIšÍÙ§†]m*Vâ÷9Bo¼ñd{òˆ�YRz±+Iêç/*ŸµÉmŶ^#Þ.Þú¶†ýÛ,S.Þ{¨rÌeÖ;)aíÊ·bÛ+/¹ã4åIŠ­¥ÐFlùúág•ó·Îão@@`›€;.@ }Ü·G;Máη÷ùÓWØ+}›Wü»Ó¶ £ z„ÑÉbW@@@Ø]k´Ùã%gÞ§Ú‡—¿Z£\–~œ²ÉËÉÊn—:ãÞßÓEÓn©”§äÛýºÙyÖ–žg*°ö¬Ê*VÏTž§t¼Ñž,pâë·(ïù·ü{c­wí¯y_9ýþÕõv~0�¬ÇÁk?=¡<¾Y¹k…|ö,ôonî¡òž‚‚ŒùÔÆû¨¼’W°»ëŽªÛL«èÜÙÚók•y ±ÍDÍr>DVï¸Å˜–½5ëì–VÙþ÷Dcå} xñÆëç: ìþÿÆþ�(´w%Å—¹áâká'@ˆ wü÷;ìAmí÷¾M9öî©KíûÌ<ç9{Õ·ßÔê&ØüH(åþÝ/08F@@@ª»Àï`õ.yÉ)ïøäGåí›g(ÇŸs›ry«¦Êºþ•™vï芥v�}ÑÒ×ir³óÔ€Ìõ+5½t©”û¦‚U6¾SÝ£¿K/¾<{}“Çú,þy²òÃìÃmç/Ðü?�Q%·,²ýüäCU»Är߆Ÿ5‰­¬Ôûóm¿ÊóÔ{¿Ê-')ÚŸi½$žÜËFOøü”u‹5•ÙmÁ‹ß¼@yÐÅs”çœp@‰e4£´’ñ‰æ^7ÄÚîÆðoÁÚ붬Û`k´‡‚S@ \oŽ´;äÝòëÒbÿ�·Î®Ûõ!c�Ýl·&ÓjÙ—m°n¶kõ¿©võNʵK¤]ý) € €@ ®·oPîXr�¼Ï–íÖÔ~kYÇòí9ÎÐJ6»hm œ51#¸¿/; € € €Tw�Z�+‡Âjtj¥Øù¦Øò~·õe9M•‡íßNãqZž5¥ö¥÷F(pÒ™Qžz¼ã\~F@�HX±¹"}*›Õ¶wÐÒ¾‡|¶È~#KÏÞ±o¢û�Èé³H�€Hþı#€ € €DœÀïà/nw–.ûÃîÀ_Ôðhåm{»íÞ¶-ì§ØÓVý«ÜÒô\åÛ3žSžÜ¢DýHÎ4ÍÓÙzgIŸ×©òY}�[çãuçø¿Ó—©Ÿ–.üC¹¥ápeJÃ*¬‰m¢-¶ß×îéÝ/AáñäÛ>SâQÞ$ë‰0bÜMʆܮ¼èæzÊ[ÚÚ=·W>n£p¸ßF¸°[-¥säú»%ù(-t׌P+A H ±vQ«Ø¥íÕO÷Ö»Úµ´ÞtÝÞß(¿pûzüŸD°;½rfOÖVnrR», v‰*¥ä/±37Ú58o×ÊW§Ùˆ0×öMTÆF[•~Ú)eÕê5ÊÔó”ßMûG¹ÜÓQyÕ}Ösª‰]Ø( € €@)QÎ/?C»:mþ+í[Ç‚u–îüÁím\€uYö}iÆ2ë×\V àw¨²VVó«ð÷Þ°rag@@@¨–!Ô# oá"~ãk):öRk5*º{s×.O�-ºáók”½N|H¹ØnDõÔìz�òŠö%Z˳hþŒ¯l ‚ƇÛÈüíã!X¬~ªN¯+”�Œ³q¶‡\þ¡½&RWØÿ÷}{ØÈ +3­QÓÄlee”ý‡iµ/^ÞMY«Ì«ŠÕ©ÏõvåMÎýüšð+ö¼€Sg*—8•ïÞ›3íUëkðkG»Âÿ~û Ê);êZv¼Ë}­•'œvºrŸ6Í•m’@@ H –3BYš_Ó¾Û9r–Ó``[û•ë¼ÚÂùe²–óûÝ[slT£�ÿZé.9ÐôˆœsÍ‘"€ € € à ‰ùk~ЩxàzkYúf}ºræm·*»$ߤ<£G#å ÿ}§üÎÓ@Ùȯ…Ê›|°æÜúqg%ÝF¸ö?½”wðoÁîºÉX¹ÖÖìŽn`SØ-·/Àø7­wÒÙÇÚØ%¹[¬Òû‡ßZ(Ï<ñwåŸý÷nT3GÊ¥pí/Ú½w¿«¯<ü`Ûçï½ý”çÇÛè› Û+/xônK§v~Õçã5}ù´}”G î­lL5µ( € P\ E’ýf”–½ã/<Î/|ƒ;8Ù‚žwçY_€l‹]”µ�7ìb©êó2_µªÏ¹äH@@@Ø¥@­À»\WEÈMÕ»Þ»éåC…×*¿Xt¨rÍë·+¯d-Ho]xµrøñ6ݵ�Ýð‘‘¾YYPÆ×OˆµÛ>jÖ®©Ü²%M¹z‹µ•Å8w�deÚHÔÿü¾XùGæeb§þÊ^Mì)Ù?i#í/jçl½CMïX³¤Ye«1*Ì·Ê¥B�Õ9E9¯,̵­g;÷¥ÄD;uQú¹Ôò¯ãA5,‹;–}O²½]·ÐZûüÔž¡ðÄØç•Sc(¯|ÚúGß`–r­w(/9ôMå+ŒRžÜ@å�½lŒñ–IÎ)ÎÏÐôÚ5Ö“ ÏyŠÂê4»»¸ Ö å�Ï�UiRîZ!Ÿùÿp·½÷Ô�m�kWX+ß gSÞxëaѸ¾E¹×¨e)Dº€;.€Ûà¹÷­�Rl”õ¾9oèoÊMÎÿ§^ í*í ákŸõêúéõO”Ë>C9¢æ{ÊïWY®C.´«Sü”g_ñ�r]±CùGs†�:Qé–šG^¢‰7/ØKé\`Šæó €D¦@§zöÕaîZ¯ÒïÑIEsVÛw§8ç—0·ÀšÌb_5Š–+þ—û|�Nõw½dñ÷…÷Oü¦Þç�½G@@@ �=ÜÄ’¿|ªv÷ƒ/¬>✠ç(û¶·{J½ÿ÷Š²Ç¡ÖŽô„'•W þ¯ò߬,eK£SôÆW¦ªl;åQå­ÛÀ±Îvû=¢@3ÊY¬/ÀŸÏ£ìédåz¿÷Õl:X?ݹ_Se™u--.Ö«/L¼TÙ-^±­X=Ö†ïïSöên}64 <}ÄóÊ{†§ìÑÄÞàõØø½F�Úî5Ä볡G²r‹_Q<žùÎÚê%ºÿÕw²Ê^ÚòÝ Zzèwå}KB_ÿ%íèÚ9ÚÒ¹²ýãÿ¢3í�¯­¿7±tŸéëM¶Ñ^¢ŠæÛU”§˜ @JèÝÌ~¯Ùhƒžy–mÞñÛQiï(}žû ‚^Mmm‘VJüi/ € € €‘$àMMMÕñ¦¤¤DÒQs¬ °‡rrr*°ññUwóVÅöpçõÛb{âÆS_,VnÈ ìîµ²Öìö8¦·]ÛÔuÛØmÙý[Z·m=æ¿z»òÆ¿°<¹ƒÒîø/½Øþ§~þ¢òÙ•Ï]ÕSY§X¥¼-ó÷Ä{”ׯ²>/žc[yü2{××N-¾&vV¢êéÕ³ï´qOÎhÌ^;Û(¯!€ €@8¸O ˜±Â¾|Ì[gYò9%�Ã}F€;.€ÛÀ�SrÉ@çTå7Uwß*ö}uÕªUz;==¿,� € € €@ Ð# ŒO»Ž@ø T¬þ²*ëY+¶‡å?#sVZ½u®=~$È%Îû¥kÀw»Y‚uó¦)Íi«н±ÒîÝ/½Øòÿž­œ—ÝLÙ³‹ÝÛg‡µ­X�€Õ3&)?HßWy̦UéÊìruY°^µ6RÖ­ºî Ú@ÂI Íéi¸pƒ}Y¶É2#oûþײ!Œ<îˆ�êÙW÷éÛ—ÆTU~Su÷·bßW錳Í:@@@+z„Õébg¨.«¿¬ÊzÖŠíaùÏOú[véÆ`ö pû´ªkõÜIöX  € €@ Tå7U÷�*ö}•Uô‚Í € € € :ν¤¡³;ì  É5ì8“k”ëFùÈ á(@@ªH€§T4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ ¨…³À> € € € PETT4›A@@@ bBa'Ø@ ÔâããCm—Ø@@‚"@�€ 0²@@@ÂC€áqžØK¨b�œœœ*Þ"›C@_�ðêOJ�€ðý—Æž#€ € € °“ñ@@@ÂW€Š€ð=wì9 € € € P0o@@@@ |¨ßsÇž#€ € € °“ñ@@@ÂW€Š€ð=wì9 € € € P0o@@@@ |¨ßsÇž#€ € € °“ñ@@@ÂW€Š€ð=wì9 € € € P0o@@@@ |¨ßsÇž#€ € € °“ñ@@@ÂW€Š€ð=wì9 € € € P0o@@@@ |¨ßsÇž#€ € € °“ñ@@@ÂW€Š€ð=wì9 € € € ÄüÞ€ Pi«6æjÝ·¼½H¹iK�²fœÕØÞyZeÓ:ñJ  € €»#@�€ÝÑã½ € € €„™@Äö(Ô‰Z7ç{å�9{+�éÑ@åËWfgå(ó}Š�{9*®–²fÜNã%@ ��g­ÑÒ�mQÕ5S9iN¢òã_Ö*/:¬…’‚ € à/�–m?-XïU.ßl™a�,‹J-ç÷µæµí7¸Nõ-ë&l}-Rÿ¦G@¤žyŽ@@@ ""¶G€�íœ%3”¦ÚtŸî‡(›äÍW>yþãÊ­An'ÅêPq‘ò‰Ý”u¬âÉãËIS.^š®ô«„²—ÊQl�ÉÍZ)×,Çâ,‚a+ðñ¯Öò¿h¥µùwj^[¹1#OùãŸ”× ²ùukÚÿÙ;CyßvmñFE+›Ô‰U.Z¹YÙµE’òð}ë++ZœRó~ÔÛ§åtQénkÛÚCÊ®dåê!o=jÚ®UbñmYªµñêoʺC�VöJv.¾Î6}¹›ô÷òÎتû·[&±a3eãZ;Ö€û ͹ ØòÛÞX®‰(ç¼Dmß‘r½‹…@@`wÜÏîéËíx¾ÓÀWƧ¹Û_ -Û–œ»Î²K[´w3Ëèˆüßñû� ( € € € P]"¶G€Õ€4Ù{e«Wþ±¡¿Íi`sF½ù¨òŒéï*Ÿžj·�ô=|eÛ-ÖõÒ„¯”Ë»ž¤¼ñ‚í}ô£ŠoÍLåƒ×Û{çXó^ Åk-{gÞs—ò‚ÎÖîGA�ê'0g©µðOœ¾Z9°“MÏIµÖþ˜(«“¾r€ÍiXËÚ¨ÝR?ÑZ쯸A9e�µÏ¯M³ŠëæÉ6ýÚ�ÎòÉvë[·ëYP±’»ä½ñyë&åéµßÁÊÆy ”Ï\:A9©=¤6LK>rñ¾J·‘Þ—³QÓK–[û|^5ôz©ô⵫tR“–ÊF~=¤¼ñv�¬™1]ùü$ë¿ÐõôvÊN]¾oݯš~dôûÊ?lÈ—mÅ|þsÃÊ+{øÝè³ûù‰[•·~cž�[ó×ݮի†2"gã €솀Û`òßö©»"#°Ï^·×Àܵö®�ÎȃÛÚ×”HëÙG�€ÝøÈ[@@@7�ˆí`'*ºe_å�÷ lXß¿&ÉZãëu¶W­š¢|óþ»•³­ÑÎÓöØK•cÏ·g øÝšj/m/±öê�O�Pr×\h­Þlëùþà•÷ÙHYT“ó‡¦Ç�ûŠ’‚Õ[à…oí.÷Á�­%`'·©Ý2Ïé0e¡5¿8Ýr£óbƒZVKÝ·µ�pfok]÷¿ZÅÇÚ«/~»\ÙüÄÎʆÎòš(w±ëPã.vÕjñÚ圴ƒlN}›sùK(Oýùå³Ó­-½Ï¡ÖªM¶]µ^}þåÊ.Ç)¯=w{_ý¨â[ë´Ïßô¡¦çkŸw^Þyx­wéwܦ¶—]“ó2íþÿÌ<;úؾÅþ´R¹,­¡²aŒµÌ×ôYï‰ÂxÛÛ' SXӴߺö1å*ý)½Ø:ÛœvµrüIÖaíçã•WÌ9P9᪞ÊÚ‹'+GÞfL8MÙ=*UùêÈ'”kô‡‚ €U%àŽ h_wï¢�_À ì+CÑ󦯰é¾Íí;UäzDιæH@@@ðD`�«éIûîIå™cg+³�Vùf'�Òôs§d)=×^ý8[QJùûƒG5÷kóxëª|ø™¡Ê®hiL _§úzÃïÿÚ%Æí�W`-Ò�WW�¨<¢{eRb¼2m³-ùõlkóŸ³Ê¦‡÷³vi÷N¶?WY+}÷6¶Î¥N¯¥8k>÷$Ûíê”è}´ôucz+Ôóïs`««»—½zèêï”œ³ÑiE?êBMßuŽõD(³‡Tœ½zícÕ‡ºk.´ôIwØz~<ðZå˜#¬U¿¨f:g®¦þ†rk±Wæ¼6FyãçþwòOל+§¾£Œiu¤rì9ÊõŽa-Ã+g±Ï…ßxPy´ÿf=ÿhÎéS_Ùa-7ž1ÍoŽõD8Âïg&@@ òÜñÿÝgTl+ƒÚÚw›Mö•Á3u©uÈœçS?ÝwÙ+ÊolG¶£Ùïà®Ê�6h€ç˜›mzë˜6òBëÖbÿÂ]ÖÏkR‚óL�'†izŸ¹¯)Ïû›Ò4wRî¼M/¾]Æq=NÓ+Ï^w€²ìe(1@�ÝX±¹è÷§€VÕ¬¶½ë€–Öð³E6.@zöŽ}'—­yÇùm(Œæ K�,v@@@�݈Ð�Ýòïo³•ë;¤LÎÈPæYsZÑÃî»I“§µµ–·é�ݪ|«µÓ¢uTSMÌ~Cyú£ŠbÅç<ź ÊVÔ¢]keǺN­Ua Mÿ™h5/‰�­M¯C{kI+ª‰ÉÙ¬éºTËH�‚@õøõßM:¸G'/Q»¯]sróíú�î4F×­USÓnqàéØÐꤽ~ß]šÙ•dc–-å¾÷è®¶ž7~øWyò�)Ê}šÕV–¿¸=¤šnÔ[þŽé¬<¢�©ušóÚ­v=´Öóíå!Mõ›åްýõmS1¶Wg]{‚²�ÛLï³ÞXß=õªò÷ýÎT^Þ×Úí‹4÷oM¿q×¥ñ&í§¯xr/å¥>ÿWŒï¯�ÞQ~}޹ʡ�¬‡EÑÚ¼ÖA¢ç¶ÿ/Ÿ`Vù±6§Ž…'¶Ï0å»oÛê6-·g,Mw+¬) ÿõ•rÌ$;/]ÑWÙÒÿ*eJ [Ûø2�lƒ@¨t�Œ¼Ò7í|ðû†`K&ÆÙ ƒ;د½³Vا|jÚöÏzý¸­”µæm T³ ÿ/5ÕìÐ8@@@ØQ R{ä¦JâÇ)k•[VNT^:Âî†ý¿qÖæã·m¿°ÐjŒÜ‘$}Î_îœÂB«n*¥6©ÀúäZ?‚µKR• �ñ'Ý1VgÚ;2W/S.úËõ¶¶€­Ò´[9X[žÞFA�0÷ÉbíéIÝ­Ðmì®~Ÿ3¦}\Œ] rò¬Š;!Îh–lWÿ¾úQ%-Ë–‰s®ÜqÎÈü¶uïm·å'Nµõܱ«26€qûíªµø÷9Ê´¶v LÊ´–ó<§ÍÜ#à¬;¯Õœ¡­íÊöóSw)'¦ŒPÞõŸ&Ê‚?¬5þÜ'ÅJ±RmRôZ{¿R í¨5W¶k×PYT3�c[wôÕßÛ‹oÓïúa|)cØûZµ´QWV,½_ùÕSŠRŠ7:Ys�¼æå½¬oÅÖbò´òÎE”‡u²g4x=¶ÎÃ{+<©ÓgYÚ¤}l(~úɮ秌©<ºµêb  € °œ‡y†vuÚüWÚ§ó‚u–îüÁíí+Ѻ,û¦4c™�PV±ï%‘TøîIg›cE@@ˆx�Hí×^§þ¼§S�ö¬ò¬wì¾ý¶ÉV3ò›óÔ€¯¿ZÓ/êÏör�&�~aûÏ%ŸàsZÒÒr¬ÁS7ÛSJ)ÿLÐÌK­#Bñâµ6¨3‹Ïã'¨6mÙ]å±ÑéÛŽÈëµúé½›Y;ÿìW+{wj©¬aƒÜ—R>þÕ–ÙÇYÞ}¯»P|Œ­§y]ëMð�Ó ©u=›“ìßìí.Z2s­ÁOßÙX[V} 9ê/åõ÷;MášRϧo”ÛªX©«q/šï,Y, ¬Þ=Ïí!µl‰¦ÿÚà¼îŒ°:Óö0sÍråßû÷�²cÜh+öÔ²(*e�` dÚQ|ôð Ê�OW^y�=Æ­íÎqîö¿óE¡u3[k™µþ1ö±çtº(k_¾µ-x½Î.jŠ‚ €U%PËùŽ”æ×´ïtÔöÌrú lkŸÑ¹Î«-’쓼–}9ò¼5ÇzÿÙ7�²‹»dÙ¯W·WèPÝÎ(ǃ € € €ÀN"µG@‰µÂ¥.øGY§Ûe³h»7ÕÕHqáC·*Ïpž0í‘5ýz»KöÁcš) UyÒ8ŶbuL›7XƒWn§“”/Þ3HY4Êt¡µq}xóÝÊï¶µÝ{¤m¥¨&&çM�;÷%ª«À>­ìõw~µ;í]j5Ó;Ø5瘮›•|ed¯×® m4UÖ©a5ÙyθÿjcšL[d½ n8Ü–ÿk�U‰û—ÝÊÿ×Z›îÛÉÆqé=©ì½û5ßyÝ·Qów;Å9ãTž8ã%åùïÙU®M’íÉï…ÖSàÕ›G[ê϶ò½-’ßE«äS|Yvti9Ö¿àÙ;ÚöÖb©/èÇ+­#Bñâµc9Õož/ÝîÒhÄkÊrý^ðÚ�ý'Ü2Fyê ]•“ß\¦,8ueÇxûá£EÊÜîÇ+lZtÝÕtÉ’˜ÒY39ÈÊZηñw½:ÿ['@ªR E’}·IËޱߞ;.€;FÒàÖ/Àíðî<ûÆ•m±‹Ò¢v9¾5íbáôrYßsÂéØW@@@(§€5@EnqîŒýyªÕ'<²•2Ö3ogËõê{7؈Ù�ÿi 69ôo˜:Iyïœ�~8dk™5ù¶ÎúCA@�ªè䌂4w­ý¢åŽà¿å9«í{”ûd%·ÀgL"ÿeJN»ÏèTß¾ DN)ó Qäp¤ € € €DŽÀN=ª3ƒµÞ/ýf²ò“ÕÖζßbk—ËìÔEyÉÓí•Q‰N-‰×ZØz�°ñÿ{x­Î7Ø–9*Öæ'ÄÚ2E ÿ9‹5=óg[s·3[Ú«E/h’‚x¢� ç¶�kÊ¢F kÃßœc#•ÌXl-̧ìowþ�èoãŒlÈ´k˺ »æÔ©iuÛn�M¨¼ù‹½÷ ½(»¤X»tÉ’d7ÎRœR3§Ûe«ße-”±§ãSYë(°kæ‡7[«þÓ ­½ñ!g+›U/;=¤¦jNLJ_eý`]½6øorýzʆIææŽl}TbmÏ�~¸rúè ÊQù¶CN¹Âæ·vÖTéÅv1iï•g÷3Õ¢C)±°oÓÍ{óUë�@A@�ª¨ã|ÃéÒÀ¾{Ìqú”Üú¯+ì»SùËÞ mmÉñåGuX²¬ï9ÕáØ8@@@ØA B{lYd}îyÑÚßœÝK¹òmk׺ðÛÊãÛXÓ]›Ú}¼5jX RL¡µÚeo±Ö§Ì¬-Ê,'Ýéœú{iÎþé¶Î3mÌêëº%+Ën³:§ÌÕ‹•+6ÙtT¾µ,¥Z½L*g¤@A º 4qF¦m’d·òÏOßþßÞç³+Çâ4»8/Ù`¯¶®gwï7tÆp¯*9¶|ÄííÛî½mÍlÐ=/×®*5ì­å,v}[öÝWÊÉk ”û.Y¥ÌêØY9üѶJoMg�R=/£9Ý�örß »úk•óÅzHå.ÕœY¿X¿€}NµVú õ�òÙÞnN³±6äÛ5<Ëx¶–{FÀŸÓl´—ÅyÖPà±êýø›¿Áé6ÐÌv¶ÌRXà\íslÏ·Ÿ•ϵMæÖذÃ*ø@*.л™}ÛÙh¿œy–m.û·®]mÁ}A¯¦¶¶H+e~ω4Ž@@@�HˆÀVß““‘©¬Ì)Ê O´ö®˜A}”¿N›©üîÛ�•_¯°¤õiöìÍv§nB¼µ¿%8 m qÖÜ–o#t=¥ƒ²é?›”]N=AÙ;¹d½”͉u–¯mõ/Þeß)oy`¶2:©–²AïAʳ[Ù¶( P½¼ÎE"1Á® WÛµåË?mì€ÅlzÕfk¶îÒšø?šccïÏ\bÍÙmêYKõ¼výiÓÔÞë–FÖ�ÉÓ¨VEê³³ÿúBïûšµ®÷?ÝzE­|ïå¥?tS3ȲK»FÕtzHEûõ�ÊrúI¹=¤²²¬Z>§^Ge·M_*?βU®Þ7IYòš¨™N±}Î\³D¹j³M{óÖ(7:=¤’·¢æ9%o¡þzìºÛ-Ý9^û Ûï'»n�}e†òÛ¥veîwƹÊAuþUN|íåˆZ)>¨»rÐ*ëLgó_Z®ÜÚ±ÀzF<ô‹¢\屑Wk¹ÇâöVÞðØ…ÊCê”}¬åZ% !€ €À.ܾ�G´µo3VØÂóÖÙçoÉçØkÅ‹û^w\·/€;§øRÕÿ§’_²ªÿ1s„ € € €D¬€755UŸ’’avl~¾µ½Ç«WD¡³N�³N*X"ì߇¨@NŽs»v€o‹�¯ºá\+¶‡PÑâs—YÏ£gÚX!Î�çƒ{¶Õt´×.%>›õéÌ”ùÎ�é‡tm®éºµíÙniY×þnX¡{[ï¿ÈFK¹nhkeÌ&«ZÿíçYʦÍW.Ze=žÖo´ýÌÈ·‹f|‚Ó+ÊÉx§‡T�8k‡ïr’õ´ê3ÿ5åû�ÎTÞ|”ímœþl+…k59ùÞG•3úØxþWÕµ^ —>2WíWý¶}5}ÙÅ”ílÅ_æ_Ê�Þ^ªl?t ²‹ àËÒôïo½®ü1a?å¡ýöUvj`Ût[ç 2­—ÁÜ_~U~?ßþ >×ÖÐ6ÆzXäå[{‚ý©pqÎT¬ãín²Â«â� € ¸@š3^À ö1¼l“eFÞöµ¸ÏrGèTÏ>óݧl_"SUùMÕÝߊ}_]µj•ÞÎ/¬Á8ç¬@@@�0ˆØar~ØMª©@Åê/«²žµb{¸;§k}¦Õ^/Þ°ã:â�^KÉN«xº=´Ä“³õvöm‹¶®o“õjV¬UÛéÍ䌄c]š‚Qè! EÖ� €a$P•ßT]–Š}_¥G@ý£bW@@@Ž@°î�ÎÞ°@ bê'Z{~¬Ó&¿Æy"®ûd�ÖÎ�lÎÃFŸ²°°0ˆkfU € €á+à>)Àý®ŽGÁáxÖØg@@@*(@�€ Âñ6ˆ�ØØXl~~¾’çDÎyçH@@�’î¸áÛÀ="z”<³ÌA@@@ Ú Ð# ÚžZ ‚+àÖûú?GÀ5ÀA ¸Ûbm € €¡ à>À |ŸPR’%M˜ƒ € € €@µ G@µ=µT†€[+îw…U† ëD@z„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ @E@Y € € €á"@E@¸œ)ö@@@� PDV� € € €@¸P.gŠýD@@@ T‘U € € € .T„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ @E@Y € € €á"@E@¸œ)ö@@@� PDV� € € €@¸P.gŠýD@@@ T‘U € € € .T„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ @E@Y € € €á"@E@¸œ)ö@@@� PDV� € € €@¸P.gŠýD@@@ T‘U € € € .T„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ @E@Y € € €á"@E@¸œ)ö@@@� PDV� € € €@¸P.gŠýD@@@ T‘U € € € .T„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ @E@Y € € €á"@E@¸œ)ö@@@� PDV� € € €@¸P.gŠýD@@@ T‘U € € € .T„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ @E@Y € € €á"@E@¸œ)ö@@@� PDV� € € €@¸P.gŠýD@@@ T‘U € € € .T„Ë™b?@@@‚A@d € € €„‹ár¦ØO@@@‚ „u° @ b|>ŸŽµ  @YXX¨tçD Š €D�€×ëÕÑFEY ztt´Ò�îô÷3Èþ#€ € € €=ÀbQˆd�üü|¾Û ’8v@@ rü{ƒºßÝ~11áý«4="çß0GŠ € € €€'¼«18� €@äååi+îˆU°96� € ²n¿·§@lllÈîçÎwŒ;÷áU@@@ª•=ªÕéä`@ ¸î¸ô®*kC@Â]Àý~è~W ÇñèîÿÙ@@@ G@X,Š‘#à?Blä5GŠ € P~ÿçx½Þò¿q�/I�€=~ Ø@@@ªN€UgÍ–@ ŒÜúÝ0Úav@@`�¸ßÃk¤zì‘*l@@@�=#@�€=ãÎV@ ÄxR@ˆŸ v@�püÞH�€ùÇÃn € € € Pô¨ e¶�a'à>5 ìv›F¨Æî}È:ÆÜÜ\e^^žÒm�ä“«Ÿz- wôþ¨(kóŽ��UÆÅÅ)kÕª¥ŒŽŽV·„ãÿ>z÷ßkC@@@ ¤èÒ§‡�C@ˆd·¥133SéééJ·=ÓmótÛ9Ý–ÏHVâØ()àö”qûÑdeei÷ÿQRR’¦•îÿ£’ï�„9ôˆ„³Ì1"€ € € P$@�þ) € € rn_·ÀæÍ›µ5jÔPÒþr§Š I÷Šÿÿ·w@ZZšö7??_™œœ¬ŒÌ~ôÉ¶ì € € €•#@�€Êqe­ € €솀{?³ÛÀ½Ÿy7VÆ[@ h| ÷“û?+&Æ~vŸ&i@ôˆ´3Îñ"€ € €D´="úôsð € €¡&àÞÉìŽàŽ j{Èþ î :„M›6)Ýÿeîó8Âý¸Ê¿ÿô(¿K"€ € € öôûSÈ € €T'·•ÒíÜÏÜ}‚@u:FŽ�=+àÿÿËýW·nÝ=»KU¼uzT18›C@@@`O Ð#`Oê³m@@vÈÍÍÕÿçŸï°?"€@PÜÿeîÿ¸ ¬0ŒVB�€0:Yì* € € €»+@�€Ýäý € €Q //Ok‹��â:Y”p{äää”|©ÚÏ¡G@µ?Å  € € €Ûè°Ý‚)@@ö¸€ûŒÆØã'‚¨öîÿ²È|*=ªý?o@@@�íôØnÁ € €{\ 2Û'÷8;;±‘ù?ŽûžG@@ˆDzDâYç˜@ º ø²tD³ß}Sùm½#•— lªŒÖŸrß&-8í¹ç•sº] ¼ G-¥W‚W 7ÌÓÊÞ|u®²Åé')n@}tð|Y �@��”¾qõJ墅©6Ý´§rP'¿ë¿¯Psr³·(³²²•™Yö‰³)-M¹zÍzË\ûÄ9ìȽ”õ7þ©üðë å~ÇÚÚZÇ)( r| ¹SÂ!€ € € Pyô¨<[ÖŒ‘*Ph­+ïßt¿ò©¿¬-¥b%ºùz㸆(Ûû5îç®Z 9SSíùÒûõi­¬ãÉW¦/ž¯œ•7@Y¾’«ÅRüF¹¸é>ʼµ«”k¶lßçü9okÎéwü¨Ìð)J+Ñ�5÷‚{®WžÔ8]¹|½µ•²x¾µ)¥/œ¦üúƒ¶Êƒ›)Kù(ò&h~ý¦u•5©²–(Ÿ@~†µÒ/_cý¼6gd*7m¶LO·Vú�év•^³Â®ö-Þ`sr�«uLMM§ìo}º´µ–üæ±6í÷/+¯{}™2º†]™c�+yaC»†÷ÝÛ®áÍìCÀ“�mËû²Ö(gü¸NÙê(§G€¦( z|½ ½sÂ!€ € € Pi¥4ÃTÚ¶X1 Qv�Ýï”s”çuK èȳæLÒòÿû¶ô7å,žªy¥¾òî^­•uŠ*u­5fåć•GOT+5»P?¿zIW¥µé¨ø¬Áª_¿QNÛ/eOžòû‡oqÒ:!ìsÆ¥Êñ�Tz�Wç¼6NÓo×?[yëà&Ê(¯-YÓÙ‰üùŸkzäÿlí.Ò�”Ϭ•é²ÏÊX"ÁÚ‘îxú,e¯e,Ãl@�K§iÞƒOÙ½úQÉöéS'É2¹¶]LsW,T΋·^`gŸs˜²yÃzÊ&Mì3¥N¼¡�S·÷På#=m~Œ×Æøýµ§”Ÿ· ÚßÞåŒ'«I�;úz¡æéS#¸ÃÌØê) 4ÿÿíA[)+B@@@�РG@hžö ª�€5…$5m¥Lilm •ν˜ú»ôâ�·û3›6³ ¼¦Ö¶Xà©Ê›�{ï­¥~kñ&6Ðä®o¶…^Ã.W^Ö«¶-Ÿ˜¤¬e=ró7*s2l¿Úìo}jÕ´{J£¢ì] N[Pô¾ö,€'ïØO™ÝÚz´tÛó}Ùšž÷úƒÊÛ– PŽ¿º�ráä%ÊÖƒz)[ƬVÎüÅ–ìÔ;EY;p½‹‚D²@|ç£tø�³,^ ôã‚wR.ÚÒQÙ¯g'e‚þ”^¬_׬W¬—ÙÃ3íS¬XùùYýxñ{î<»X§a×ÿá)›•9…v%_¿ÚÆ Xî|:x�14²O·]}iJÄ ¸}I¾úîùÀƒº+££ý¿Åì ¤ ÀþmOùa–ò°þ=”^º£ì ¬è5¾d•‰E@@@¨.ô¨.g’ã@�°V”¿>x@y݇6nóÎ{Ôpž–yª³+XâêY[}ûvÖ¢^Þºô훲> ÉvÏgãFÖÀë³ñ¥¿;Fyï ëPT~·9ß8?Ä´¢¿Çßs„2%'Uùé„g”ŸÕ³9·Ž<\Ùfã�Ê—>³£|UeÖ÷(ŸøÌZ†F`­R›¾zIyçWu”W´½@yh#j«Å@AÈÛ´VK/OËUÿı^i+Ò- ³×+/^®´«pñUÓ>Z5´>_=N>K9ª›õ+pFŠùgÊdMÿÚðåI]­ï˜·Ðús}ûòÛÊ›ü>(ž¿{‘æ¸Å[Ó>Ønºß>/ö üéh-üU}Ö®·co0EùǼ”W?I¹ó~n_€Gžž¨%ÿ\´X¹ïÞí”�ÔURv.Àw¬�ûð* € € €ÕJÀ›ššªJII©V‡ÅÁ €@h ääØÈÃ�–øøø@ßRáå+¶‡E›+\©‰÷o§œwÔMÊÑ9­ëE/ïú¯ÍÓ_ÐBç½ÞHyÏG*k~ñˆò’gS•~Í-ú)°â­}�ÞpßÓÖJ¿î¡íü%VÝÐîö?´ÅezŸÿ*ÿo€Õ²{�v¦Œé/kúÂ÷›+Ç:=Z;ÕËùijΛ[ ÿlj½•7þ |¡õ�p[¨¼5ìsgØÍç+{üù‚rô'v~ϼæå±í­%Êú'P@�ÈX²d‰:111ÀC·ë놟^U^óÒ¿ÊŠ}^Ô8ä ½÷‰Ó­eÕ7ÿcåˆ'ìYuÚx96(7ÇZï­&µ­Á†5±Ê£®¿XùŸ-Ÿ+G>£õ¿AÊÖÙspFSò“lì€Î¥¼ ϶답ϸ[u5‹‚€Ÿ@JËÆúiô¨³•n¿€‡ž|KÓþýÜqÆO°qv¿/€V±…{ê9p@@@�H G@$žuŽªZ p™¶øÁ-ÖŠòÊj»«­d)º{ÂÉz)¥ÄËñõìN¹ŽÖ̯áž×+¾~p‚ò™‚c•�^ÓZÙ¤¦Õíþݸ¥²c‡FÊ(ŸµÕüúìXå}÷� Ú(Ý÷¶º%“ïV>5@yH¬­¡Vƒ†Jï_*ßÍë¢ìà´âô¹ìFMß2ÐÆpk‘‹Æ2°Jù­¥ÐZøWÌ�©üôï-S­µ©ÿÀvÊå_þ¢Œêw”Í©=W9aüÃÊïÛØ i«§*S/° gömªt[“4AA"JÀ}¦º›Á;pëOæö)ó9me§p—Éýs²–ºáª/”ùÖÇ­`æ3ÊáïÛŠòòm¼€“}öé¶Å¹×ÚSË>‰œ­åç9½ b­7@´3Çݺ~¤ Pª@«öƽçÿž‡_ÑôƒO¼©¼ü•O¿hßOüû´I±ï »óÿewÞ«M‡i¡G@˜ž8v@@@�ŠÐ# "j¼¨�€Ý!y­c”ûn¿S2Þ»šsÎ¥÷(¾!kWYöÕ;ʧÿh®<ïîžÊFQë”%KÖÂ/5óù¯íþÌî×¶VÖvûhJ%w‰bÆtkÏ9`¸µÞÄÍR¨ÇÁFż­õ~y÷îÊ.^[ÃôÇoWõ¸¢X‰icwû»eóoïkbô“«”}O¶¶ýÇ.Ú¤|ñZ»Çoy�ÚʘiS”“:wV>ÐÆé�œÞCyÃeÖáí§RŽ^:\y×)í•5ý÷Y?S@JÈœe´F==_™]Ú~óìš|ÑO~3ŠMÚ/=νLyY²½·×ÊÛGtU.}ùå'­ÎSŽvǸõM»½ Ò7Ø'ˆ·N-e¢×>_rò¬�'ÖÖ¹ý“ÏfQØ™€;^ÀuWœ¡…î}ÄÆ0úï-�) ìû’Û_Àí  ) G@Ðx  € € €á*`•s@�Pðåj—}k5â7?»TÙuøÊAÍœËx±ÎN ÌòézõÉñß*³ Sž¾_¢rk㺽aÍ�v·ç§ ½•cÚÙS ×�ö¼Ìþþr~ å€a ”QX+N¯‹þ«Ýßîuדñó+š¾ä#EQ©ÝíM=þ°=q ±†[×lmAW>ÙM·LùÚHëTðoOk_:ç[Ó�-¶o�’íXºÜ»¿rml%}„@AÊ)�Ðî -yíÕÖÇÊ> v,vå_2Åz ¼‘ÓG9êÈVJ»^ïXìÊ\£aM¥w¥½–;ïSåU#,‹Ê4{„ֱ̹@ ýöIqª/G¹~u†²i+û¤°Ï�'Ó# Á~rç8³ Ê%à¶ùß0òL-=~‚õ ¼â¢•­[Ù¸”Ý GÀîèñ^@@@ÂLÀiJ ³}fw@�0°š¬ô4åÚuÛëa Ò·hN¡ÏF(«ørí®ûi_þ­l|ÊÊ«6Vo]±õo^ðµò¾÷VÎo~¤òg»}ƒj*²±²½u•CNé§l¿Yù»ÇæýÆ—Êú‡SökloûE´‡…Ö¶ŸŸoãxݱ  üÛœlþü×ïR^ó¾� àÿš~ܱŒ¿MsŽ¿ã좟cÛkbÔ¸ÊÁ�Üþe,Él@G :É>:ÚcXJ-v•ö̶«zT–õºêСµÒžì²“’dŸ#�޳>\ºß_~Õú|Öò,åµýë+£¼v•Žö-S¾½ÐÖ×ù`û|q?vò�§ x¬çA—s)PpÛÿï»íR½5:Úÿ Màëâ[pÜ*Áß € € €D€="à$sˆ *vŸÿäqc,Kì’·¶ÝÛYVñÆÛ�œ'Ž­RÃî¨ßzÿ¼µ»oY³Z¹¾ÐšZRœ©Ì9à8å˜áý•ímñâÅk½Z 8UyŽûŠÓ|ŸÒÞîêô­³–¢sOè¢¬íµ¶}�Ñ«?¿<{¿ò”gígÿÓÆöÍ ºõà‹5õØ�…ÊRz®Ðü�ï{[¹üðó•Ã{ÔV–ÒDäµ¶£zuKyEó) €U#�=w’6tÅã(³ý7ù³} ·[¶Õôo�8â?m•³c÷RoåþŠaŸy9öÙçI°Ïz¥¢ô¨¨\éï£G@é.ÌE@@@ Z Ð# ZžV BSÀÚCN¸Õz ïjãð—Uì~ýÒJT¢Ý{é]oíêóþ]lùË4å{S–(·4¶v˜Ó¯ø�ò¸~ÖJŸTžÊÞÛÚÂ/lèçG¿·vøc¯ª<¸¾Ûo7›ö>Õžpø²O•y§ŒRË{Gyõ${õ⑇(Sœmy4×t@º´R`= êÇÚ¢›5S¶mc}h÷A�„®Gk¯{ðpå–-éÊ_Þ|Yù}Š}R\ÜÝ>×2Ò×(§¿û…²Þ€ó”m‹°±ža›ìS&.¹¦Ò–¦ €@h”çKbhì){�ü{÷$YU|{Þ3»Ì²ì. »#1¢˜‡b°" ‰FÁDË2J¬<ÌÓ2Æ2/­ÄJŒÆ²bbL‰”ñ�Iô�X‰ˆ1­B0EŸ»¼V" ³ììÌôä;}xô0»³=³·gúôýÝ*¾í¾}çüNOwsÎwÏ%@€ @€Àa È8lB @€À!OˆM^ô—q~|q.@ºŠrÏ­i„ÿ¶©4~òÀ­é>ÌÍÁt­þ@#½zÇÓ�Ÿßñ¡týÿuw¤y›çZw 8æñéŽ/ø½ #>笔pä Ě-é,÷Þ𙈗^šÆp>{÷±/zí¯G|ù“Ó(ý`3�ü\÷‰4òÿwùnÄÉó_ñ÷Ÿú˜ˆÇΧ9^õõK"¾ýÍ—Eœ}Ó+#ž»uqíbµ…VY õÍrÛ®8ëíSéÔ�Ö·É®»SfÖài,ðPã�éÚþk?ü7ß~eº§ÌÀXÕß|lú¾Ø<üµˆ—ß’f¨¹úš»"6OzfÄ?~úxÄ;wÜqk–™k¾•ö=á)ƒÌ7D XôˆÀ¡>z¤˜ŠA€ @€T! #  EÇ @€À!Ò‡íødš!ÿ@KºF¾¹ó"¾ùS^À›6E<ç¹i´ÿøFê±>å ÏzF�?ÿÔ“"žzòñ·N¦€´ÿò–´Ç†£ÒøÌcÎLcûïøù§F<õȶ/…Öy§H·xîþ â?zTÄ4‹@ZR¶Â¹¿ñ[7\~}Ä�;éiÝ­`ó§Æöë6¶�+=· @€@…­o†ï%Žø®}/âà†4V?¹ñäˆ>'å©=ôy¸¤×Oá«#¾ë´ï†ñô¹½`ñ�ÛbÍ “7DÜ|ÞOFÜ>–Ò®ú¯�DüÀ7RöÁØñgF¼øIé{mùßV±“…�®,ø[îÊ” @€è�ÆŽ;¢0Û¶më™")ý/0=�®r_î2:ºzó ¯¬„í5šŸO×áçñ�†A�v�  @`I�]»vÅëéš| ÝØ»woœâÄÓ\K‡³¬æ/Õ\Εý^ݽ{wì.#àpÚÚ¾ @€ @ 0—hÖ`ŠK€@) i¥4•r @ Çò7H³™fþ0n×cÍ£8}$�ÿÊêù›Í'K½‘U… @€J@FÀ¡„¼N€ @`††ÒOt«HîT5Èeù/®n2êÖâêK€ @€µ�PëæWy @€�^Èã“y>ðÁÁÁ^+žòè�ÙÙÙ¨ËêÏöß €2z¡”� @€¬’€Œ€U‚v @€�¬_¿>6Û·o_Ĺ¹¹ˆò:q³ �Îò_Öüü|ì’ÿâ:ß·?¶”Ðí¨ @€ @ #1Ùˆ @€ÀêŒ��ʼnò(åž={~¼:gwuÈ7“““QÙüW‡Z·×QF@»†Ç @€ @ Ïdôy« @€@Yi¬nbb"b¾’yjj*çqKó”ÕšJÛ;ù¯)ç䌛üW–ÿâz§œ«S«ãì, @€ @ 'dôD3( @€�v�<þßl6ceÎÈyyT3�a¶Çö}=&@ ÿíäØ~�€öyê9;@~oÈð7B€ @€j$ # F�­ª @€e äk˜sFÀÐPú鞯pž���ÇÓÓÓó½Ðs,«vJK �F#›cþ«‰5yütt4çØ�³—rL¥´”r @€ @€� dT€èôŸ@îE6ºÒ-«F(Q �^Gáóãökž}[•ئÊÜm�ö¼€œS“ÿ‚ºq�€|®nרÚã˨ÖÓÑ @€ @€@O ÈèéæQ8ÖJ ÷çñ–µ*ƒó @€�v�üÝäÚæv� ô‚@7² º]/Ýv| @€ ÐC2z¨1…�ÞÈ×’Éè�Q @€@o äß�½Y¶ƒ•JFÀÁd¬'@€ @€}( # U•8|�<û«¼€Ã—t @€@¿ äߊîЯí«^ @€ @ OdôICªÝJ’ùþÌÍf³§pL @€�âò�òoÅâ 6G@‰­¦Ì @€ @`…2Vg7ê#0<<•����è>õiw5%@€,Èó”› �k$#`qËZC€ @€úV@F@ß6­Š P­@î÷m¿�@ž5 Ï Pí¹� @ òòŒåÞ#`±¤Œ€Å&Ö @€ @€�¾�зM«btC ÷ —~UX7d“ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� tT€è @€ @ ¥´”r @€ @€� †*8†C @ 6óóóQ×¹¹¹ˆÍf3b^S%@€ÔH ÑhDmÒúàà`ļ¦t¥· ò @€ @€�eÈX–M ¨³ÀììlT?çÔÙAÝ  @€õhÏÍ¿s^ÀÐPÙÿ+-# >ïa5%@€ @€ëÊîÆÐ€X�™™™8Kž`Nç @€=+�ór¦ÀððpÏ–sé‚ÉXÚÇ« @€ @ ¯dôUsª Õ äyäT«êh @€�ÒòïÃü[±Äùd”þT~ @€ ° ËÀ²)õhŸ!¶>µVS @€�ÎÚï#Ðh4:ßqÍ·”°æM  @€ @`õd¬žµ3 P�@îß-¨ÀŠJ€ °&ùwcY3ÈX“·Š“ @€ @€�µ�°6îÎJ€@� ¸S@�7�â @€zD Äß�2zäÍ£ @€ @`5d¬†²s Pœ@¾k@qÅV` @€�U(ñw£Œ€U~“8 @€XKk©ïÜ @€ @`•t¬2¸Ó @€ @€�µ0GÀZê;7'�ï|ÿý÷GÉ÷ïßqff&bž1¸Ä«‹k&@€@—�Fy` �•G‰¸aƈƒƒƒ-úC@F@´£Z @€ @€�ŽdtÄd#¨³@矚š „{ï½7bÊcGy¼(� ÕYIÝ  Ð9Ã+çíÝ»7*•?ÿ'''ãñúõë#æÏÿþ¨¯ZÔS@F@=Û]­  @€ @ ¦2jÚðªM€�ä\€œpß}÷Å.ããã�ÿw¢g”(�?áÛ?çsvÀ=÷ÜÕ™���¸qãÆˆòJl_eÎ2¼ @€ @€@�dÔ¨±U•–+�¯ ͹ùºÐåÁö Pº@ž& äo„¡¡ô¿Qùn¥×Nùë) # ží®Ö @€ PS5mxÕ&@€�¥ò¡yv€Ø¿Ô®ý>Ò}\YU#@€�e äo‡üM±¬mL GdôHC( @€X «¡ì PœÀÌÌL”ytt´¸’+0t[ gLOOwûDŽO K2ºë° @€ @ dôb«(¬¹@¾G€9Ö¼!€=(�¿ÜM¦›F‘:�Ð!”Í @€ @€@?Èè‡VT¨\À8Oå¤H€�>ðMÑg Z«êȨUs«, @€Ô]@F@ÝßêO€ôºÀô-QÂO]vUÄÆy/Šø³' öz™++ßq¤oüÇ'"^uä9/þÉc#Ë  V,àStÅtv$@€ @€å È(¯Í”˜¨—ÀðxÔwà‡7FüüõwE|ö ›Óšøo©¥/~ïãñMŸüaÄôüQËÈcÅëÞòäˆ7üÙe?±gþQ› lþéXóçoü™ˆÛwD¼ü­ï�øá�8^¬ïdYp̶䆙;S¿¼k4â?~BÄ�ëæ"î¹%­¿~æé]¾Xe!@€�e êd™‡³9 @€ ÐË2z¹u”� Cÿ›Bá”Ó7FüÄmwF¼w>eljDèh9ãÜØîõ=>âúÖ͛ӌoû§öQýô³ð¬¿$â NI�øæg"¾#mø¨% â?áyEü¥'NDì¸ ëöÞ�ŽùΫ#`ÙóWcíû>–êû‡?ÖÊxpÐ*åÜqùû#¾âò –ñŸúÅxþw/?-âØ‚Wã¹±ò¯ç)�n¦oL¤l‚ãŽKóíoˆÿÖ­›Û—2÷µžå�vظùøˆ�Û6qêî4Ú Q£´å›�‹øØcÒ5ü÷íK#öK_½ßIG;vs:ï�Ž«—XÒ7ýÄó"¾æY�ž¡1‘2F–ØÛK °P`ùŸÃ ÷÷Œ @€(H@F@A�¥¨ @€@¿ ¤yòO½à¥ÿôœVçS^Àôþ4>:Ú6±~ëÅ榧ãAs$í;œ6\×Kcã“­ÇéùCËô—SÁo´âCëZÿ¶î°`Í2ž¤\€ï]qiÄ¿øô—Î{zšSà-OаÂeøÈcbÏíÛRÎÂ�EVx`» @ v2j×ä*L€ @€u�PçÖWw @ GÒ÷Æã·§¸.ÍpÍeï‰ø�ñF|Û…Û#¦«öYÒhüMÿþîˆo½á¬ˆo|ÝOD<þ C<�Ý5 °¬%ýŒ<í¢×EüPìïh™úÊõmÛ¥{ìþìû#¾á#·FlŸá�¿õ…X³py<]|×€¼Mc}røã·]ñt E$@€ÀAòuq�­­&@€ @€Š�Ptó)< ÐcQ¥£��¸çšÛ"ÞÙÜñ¸öá›ù{cÍŽï¦9ÿ‡›®œ?ºýÕx¾péì® ÷éôYÅŸúáTÄ}ÍÏÐh¤ý7lJw X¸¤Bõät§ƒ7nŸ‰˜÷oÞ{g<¾u>ÍwpÂäý¯¾ìã¿ñ„Ÿ�xñS�Œ˜«ÛÜ·/ïIbãCé~[–tˆ , >,½  @€ @€@�dÔ¨±U•:˜ŸOc“9v¾—- T!�&ý?æÄÇFýäÍwÝ—®¥ßÚ~3€½»cÍwv¥�3ž¹%âp~ÇÆ£G–Ö{¸õté»´¿Ïç[£ò¾ÿ<Ô# ùÕ‡V·ÖÏÞO¯xû"~ì®´fñÒXÿ”XùGoMWï§Z¥å‘coÜÏ·±µºyOüså{ÿ%â¿Ì=;â›턈nj§šN�jzÒö£#¬K÷)øú?§{|pÝyßô’´åøƒGއ]hÿÛéúÉœ€@¥2*åt0 @€ ÐÛ2z»}”ލ¥ÀðÖã£Þ§¯ûïˆ7Þžîpöä#?ÛfoOsìß0·5âó·¥kïSÁÁ—‘3~&^|ý…��8ÑÚ´•@°®10kŽùaÄoÅ+_Ò,ç¿æµ_vÚ#SöÏ}çŠXó»—8S`áÙÒ·_yyÄß�r^ü†'E„5¨±€Œ€7¾ª @€ @€@ýéZ®_ÝÕ˜ У� éJøÇ¹?â7w§{4O{LÄ�ui¾€Ý7ÞñÞ­gD<娆ÂÇÓ%ø[·¦cÎ|ãÓ/»1eüêó��86—2ÖnI¹·}áß"¾ý#iîƒS_úËŸ¹¹•Y�ª»`Ù¿ûšxþÁ÷)âg¿0â/üÈâû,ØÅx”€Œ€G�xJ€ @€úY@F@?·®º @€¥ ´ÆðÓDëþó¶t�ü̺”0ÚL�¿ymŠ[~ìäˆ[;Öi¤Ü�ùûïŽxÝçR–ÁµÏÚñië#<´ìMóöïÚ™Fé§îL3ó7Ò Z»Æ¿K-{÷¤cÞýƒ¶9öLÇšùù4ƒÀA—ýwÄK_½rWÄ£Ÿ÷∿öS)saá�Ô4ËÀý7]ñÝŸúzÄïnyFÄ×½èôˆ;H‰ˆÍ, ð°@ç_ïâ @€ PªÀÂÎÖRk¡Ü @€�þh¤ëÞ�Ù’ë§¿}WÄ4ÓUý[~°#âWo>"âY¥+ü�'K/óé‚û‘­Û"ž2ó¹ˆÿõåtä³Î‰ðð’Æç?{ɧ"~m$�åÌŸ>%âæÿ¾w§˜W´ÅÆú§´=[ôp$¥=\ðÛ¯ŽxîØxÄô_ZRÀ¾»S ïi¦Aÿ[ÿﺈ3O~vÄ?xÙÓ">î¡Mã±…:�й•-  @€ @€@ñ2ŠoB @€J˜ŸJãÞ7힊Ø>è¾oËÓcÍÅÛÒì÷ogÄk¿u}ÄÓš3÷Ýñ;7FxxIc<6§1ö­Òuþ{ïOcõ3;Óûïù«4ÎÝ­é [[¹ßÿìWâñ·Ï>-âƒËDzüŠ¿xâCÏ;ü7Ípþk^ñe§-•£�jx e`|4V7îù~Äoß|kŠ×¦»\qõí§sRÄç¿2¥.œwÖq�0˜ ¬TÀ‡èJåìG€ @€ �P`£)2 Ð_³»®Ž ýÕߦ1ð}Wí²w~wѶñæY¿ùšˆ¯:9eüïWÒÌÿ£["n9ûüˆ/úñ4×À¶á›"~àmWEÜyçÉW¸ n�Ÿûúߌ8?¾8 eÜ·;�ðoëšÿœõ0�î Ðh¤Wïúê/ù×týÿ·îNù ÍÖŽÚ~j<~ÎÅçE<çÌ”ã°ÑïÖP° @  U(: @€(D@Ïj! ¥˜ @€@ÿ ?áç¢rïý‡«[¶Ç¡.xõ¯D¼ðÄ4n?¹`À>å¼ìORH×áÿÇæ4ïÀpºØYK:èØéîZÒlÿó·|1âß|4ål8rcijÏ==âÖ�4"5¼=å#œù´##>ëq'FÞÁÁ·_ï�*¬™Àììlœ{õg‰_³ ;qß Èè»&U! @€ pp·ñ ÔX`ýúõQû}ûöEœ››‹(/ ÆoU'@€Àƒùa~~>žço 4J�Pb«)3 @€X¡€Œ€ÂÙ�ú[`ll,*˜G{öìÙóðãþ®µÚ @€ÀÒ9Slrr26ËßKoïU½) # 7ÛE© @€ @€@Wdt…ÕA  @ t���ÔW>111_:55�óø�ùJo_å'@€@çù[ çäL±üí�¿):?Ž- ôŽ€Œ€Þi %!@€ @€]�Ðub' @€�ròø³ÙŒ*ä,€œ�G‡òXP{,·¦JN€Y æçØ~�€öyÌàÝRº€Œ€Ò[Pù  @€ @€À2d,˦ PO�|-hÎJ_�ùJÑÙÙÙx<==1ßS:Çz*©5Jh4Q…ó§ýÈÈH¬Éãÿ£££ñ8ÇÒkªüdx @€ @€� ȨQc«*� èïïܪ>[zWÔ§­Õ”ô·€Œ€þn_µ#@€ @€ t,àð„ @€ô·€Ž€þn_µ#@€ @€ t,àð„ @€ô·€Ž€þn_µ#@€ @€ Ü5`‡'ô²@¾C{¾»o/—SÙ @€tO ÿ*>œãË8=û @€ @€�ÂdÖ`ŠK ÎÍf3ª?88Xgu'@€¨¹@þU|82GϾ @€ @ 0…5˜â¨³ÀÜÜ\T_F@�ßêN€ �ŽƒŒ€Ãѳ/ @€(L@F@a ¦¸ê,�çG•Pç÷€º @€ê,� »k@�ßêN€ @€–- #`Ùdv @`mfgg£�F#âÀ€ë›Ö¶5œ� @`5ò�ò/áÃ?ŸßЇoè @€ @ Å4•‚ Ð.033O‡†Ò‡˜û´ËxL€ ÐOy^€ªr²ŒŒ€~z‡¨  @€8„€Œ€Cy™�^È=£í÷ȳäz¹äÊF€ @`±@¾#@ž ª{,>‹Œ€Å&Ö @€ @€�¾�зM«bê#�ûM«½nª>zjJ€ P7ukqõ%@€ @€�Z è¨uó«< @€ÔM@G@ÝZ\}  @€ @ Ö:jÝü*O€ @€uÐP·W_ @€¨µ€Ž€Z7¿Ê @€ @€@ÝtÔ­ÅÕ— @€j- # Öͯò @€ P7ukqõ%@€ @€�Z è¨uó«< @€ÔM@G@ÝZ\}  @€ @ Ö:jÝü*O€ @€uÐP·W_ @€¨µ€Ž€Z7¿Ê @€ @€@ÝtÔ­ÅÕ— @€j- # Öͯò @€ P7ukqõ%@€ @€�Z åÚïܹ³Ö *O€ @€ê! # í¬– @€ @ %ðÿ[¹_ƒNØÕIEND®B`‚p_calendar.md000066400000000000000000000271321523260663500335530ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/dde-calendar/calendar/zh_TW# 日曆|dde-calendar| ## 概述 日曆是一款檢視日期ã€�管ç�†è¡Œç¨‹çš„å°�工具,支æ�´æª¢è¦–農曆ã€�黃曆ã€�節氣和常見的節日資訊等,內建行程æ��醒功能幫您更好地è¦�劃時間。 ![0|main](fig/main.png) ## 使用入門 é€�é�Žä»¥ä¸‹æ–¹å¼�執行或關閉日曆,或者建立日曆的æ�·å¾‘。 ### 執行日曆 1. 按一下工作列上的啟動器圖示 ![deepin_launcher](../common/deepin_launcher.svg),進入啟動器介é�¢ã€‚ 2. 滾動滑鼠或æ�œå°‹ï¼Œæ‰¾åˆ°æ—¥æ›†åœ–示 ![draw](../common/dde_calendar.svg),按一下執行。 3. å�³é�µæŒ‰ä¸€ä¸‹ ![draw](../common/dde_calendar.svg),您å�¯ä»¥ï¼š - 按一下 **傳é€�到桌é�¢**,在桌é�¢å»ºç«‹æ�·å¾‘。 - 按一下 **釘é�¸åˆ°å·¥ä½œåˆ—**,將應用程å¼�固定到工作列。 - 按一下 **開機自動啟動**,將應用程å¼�加入到開機啟動項,在電腦開機時自動執行該應用。 ### 關閉日曆 - 在日曆介é�¢æŒ‰ä¸€ä¸‹ ![close_icon](../common/close_icon.svg),退出日曆。 - 在工作列å�³é�µæŒ‰ä¸€ä¸‹ ![draw](../common/dde_calendar.svg),é�¸æ“‡ **全部關閉**,退出日曆。 - 在日曆介é�¢æŒ‰ä¸€ä¸‹ ![icon_menu](../common/icon_menu.svg),é�¸æ“‡ **çµ�æ�Ÿ**,退出日曆。 ### 檢視快速é�µ 在日曆介é�¢ï¼Œä½¿ç”¨å¿«é€Ÿé�µ **Ctrl + Shift + ?** 開啟快速é�µé �覽介é�¢ã€‚熟練地使用快速é�µï¼Œå°‡å¤§å¤§æ��å�‡æ‚¨çš„æ“�作效率。 ![0|view](fig/hotkey.png) ## æ“�作介紹 日曆分為年ã€�月ã€�週ã€�日檢視,é€�é�Žä¸�å�Œçš„æª¢è¦–æ–¹å¼�展示日期屬性。 系統é �設顯示月檢視,å�¯ä»¥é€�é�Žæ»‘鼠點擊切æ�›å¹´ã€�月ã€�週ã€�日檢視。 - 僅在中文系統中:日曆會顯示日期所å°�應的農曆日期ã€�黃曆和節日資訊。 - 日期以 **1900** 年為起點,在日期切æ�›æ™‚,ä¸�能檢視早於 **1900** 年的日期。 - 在月檢視ã€�週檢視中,週六ã€�週日的日期顯示會å�€åˆ¥æ–¼é€±ä¸€è‡³é€±äº”。 日曆檢視中的å�´é‚Šæ¬„展示日曆帳號以å�Šå°�日曆檢視。 1. 按一下 ![side_menu](../common/side_menu.svg)å�¯åˆ‡æ�›è¦–窗中å�´é‚Šæ¬„的展示和隱è—�。 2. 在日曆帳號中勾é�¸ç›¸æ‡‰çš„æ—¥æ›†é¡žåž‹ï¼Œå‰‡è©²é¡žåž‹ä¸‹çš„行程在日曆檢視中展示;若å�–消勾é�¸ï¼Œå‰‡åœ¨æª¢è¦–中隱è—�。 3. 在å�´é‚Šæ¬„下方的å°�日曆中點é�¸æ—¥æœŸï¼Œå�¯è�¯å‹•控制å�³å�´å¤§æ—¥æ›†æª¢è¦–的日期展示。
檢視 說明
年 顯示全年的月份�天數。
月 顯示節日資訊�行程安排。
週 顯示這一週�天的行程安排。
日 顯示節日資訊�詳細的行程安排和黃曆。
### 新增行程 1. ��以下方法之一新增行程。 - 在日曆介�,按一下�單欄上的新增按鈕 plus。 - 在月�週或日檢視中,雙擊日期空白處或按一下滑鼠���擇 **新增行程**。 - 在月�週或日檢視中,按一下滑鼠拖曳新增行程。 2. 彈出「新增行程�視窗,�擇日曆帳號�設定行程類型�內容�時間��醒等資訊。 pic
�數 說明
日曆帳號 �設本地帳號,��UOS ID等網路帳號。
類型 系統�設�供「工作��「生活��「其他�三種行程類型,您也�以自訂行程類型。
  1. 在類型下拉清單中,�擇 新增行程類型。
  2. 類型框呈�編輯狀態,輸入類型�稱,設定�色。
您也�以��主�單中的管�功能新增�編輯或刪除行程類型,具體�作步驟請�考「管��章節。
內容 行程的�述資訊。
行程時間 設定全天或�全天�國曆或農曆行程的日期和時間。
  • 全天
    • 勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚é–“å�ªèƒ½è¨­å®šæ—¥æœŸã€‚
    • å�–消勾é�¸å…¨å¤©ï¼šé–‹å§‹æ™‚é–“å’Œçµ�æ�Ÿæ™‚間既能設定日期ã€�也能設定å°�時和分é�˜ã€‚
  • 時間
    • 國曆:開始時間和çµ�æ�Ÿæ™‚間僅顯示國曆日期。
    • 農曆:開始時間和çµ�æ�Ÿæ™‚間顯示國曆和農曆日期。
�醒 勾�全天,則�醒設定的�項包�:永��行程發生當天(上�9點)�1天�� 2天�或1週�。
�消勾�全天,則�醒設定的�項包�:永��行程開始時�15分���30分���1�時��1天�� 2天�或1週�。
�複 �擇國曆行程,則�複設定的�項包�:永���天�工作日��週��月或�年。
�擇農曆行程,則�複設定的�項包�:永���月或�年。
���複 �有設定了�複功能,���複 �會出�。���複的�項包�:永��於n次後或於日期。
3. 按一下 **儲存**,建立行程。行程建立完�後,會以標籤形�呈�在日曆檢視中。 ### 編輯行程 1. 在月�週或日檢視中,雙擊或��按一下行程標籤。 2. �擇 **編輯**。 3. 彈出「編輯行程�視窗,設定編輯行程的相關屬性,按一下 **儲存**。 4. 如果設定了全天或�複,則彈出�示框,確��示資訊後,完�行程編輯。 > ![notes](../common/notes.svg) 說明:已建立的行程�以��拖曳行程標籤來修改行程的開始時間和��時間。 編輯行程時,系統會根據所更改內容的��顯示��的�示資訊。�示資訊中按鈕說明如下表。
按鈕 說明
所有行程 修改所有與此相關的�複行程。
僅此行程 �修改當�行程。
所有將來行程 修改�中日期�以後日期的行程,�中的日期之�的行程�然�留。
全部變更 修改所有�複行程。
### 設定全天或多天行程 在建立或編輯行程時,設定 **開始時間**�**��時間**,�以設定全天或多天�續的行程。 ### 設定�複行程 1. 在建立或編輯行程時,在 **�複** 的下拉清單中�擇�複�醒行程的週期,例如,�月。 2. 在 **���複** 的下拉清單中設定���複的次數或�止日期。 pic ### �尋行程 1. 在日曆介�頂部�尋框中,按一下 ![search](../common/search.svg),輸入關�字。 2. 按下�盤上的 **Enter** �進行�尋。 3. 在�尋框中按一下 ![0|close](../common/close_icon.svg) 或刪除輸入的資訊,清除當�輸入的關�字或�消�尋。 ### 檢視行程 在月�週或日檢視中,雙擊行程標籤,彈出「我的行程�視窗,此時既�以檢視行程,也�以 [編輯行程](#編輯行程) 或 [刪除行程](#刪除行程)。 ### 檢視行程�醒詳情 當系統發出通知後,按一下通知�示框,檢視行程詳情。 行程�醒時,�示資訊按鈕說明如下表。
按鈕 說明
�後�醒 �醒設定為當天,首次�醒後,按一下 �後�醒,10分�後�次�醒,此後�次按一下「�後�醒�增加5分�的時間間隔。
您也�以在"�後�醒"下拉清單中,�擇15分�後�1�時後�4�時後或明天。
明天�醒 當�醒設定為1天�或2天�時,出�該按鈕。
��1天�醒 當�醒設定為1週�時,出�該按鈕。
關閉 關閉�示資訊。
### 刪除行程 1. 在月�週或日檢視中,雙擊或��按一下行程標籤。 2. �擇 **刪除**。 3. 彈出「您正在刪除行程��示框,按一下 **刪除**,刪除該行程。 刪除行程時,�複與��複行程�示資訊中的按鈕說明如下表。
按鈕 說明
刪除行程 刪除��複行程。
全部刪除 刪除所有�複行程。
僅刪除此行程 ���複行程,僅刪除當�所�的行程。
刪除所有將來行程 ���複行程,刪除當��中日期�以後日期的行程,�中的日期之�的行程�然�留。
## 主�單 在主�單中,您�以開啟管�設定�檢視隱�政策�切�視窗主題�檢視說明手冊�了解日曆的更多資訊。 ### 管� 按一下 ![icon_menu](../common/icon_menu.svg) > **管�**,進入日曆管�介�,您�以管�日曆帳號的行程類型�登入UOS ID將行程資料和日曆設定�步至雲端,�時也�以�通用設定進行設定。 #### 日曆雲�步 日曆支���UOS ID將行程資料�設定�步至雲端。 > ![notes](../common/notes.svg) 說明:該功能暫��舊版本UOS系統開放。 **登入和登出UOS ID** 1. 在帳號設定介�,點擊 **登入** 按鈕。 2. 彈出UOS ID登入視窗,在視窗中��帳號密碼�手機驗證碼或微信掃碼等方�完�UOS ID登入。 3. 登入後顯示帳戶��頭�和相關�步設定,點擊 **登出** 按鈕�將UOS ID帳號登出。 **日曆�步設定** 1. UOS ID登入狀態下,點擊 **行程** � **通用設定** 後的核�方塊,設定是��步至雲端。 2. 點擊 **�步頻率** 後的下拉方塊,��擇系統自動�步的頻率,您也�以�中 **手動�步** ,關閉自動�步模�。 3. 點擊 **立��步** 按鈕,立�和雲端資料進行�步。 > ![notes](../common/notes.svg) 說明:需在控制中心開啟 **UOS Cloud�步**,�能使用雲�步功能。 #### 管�行程類型 **新增類型** 1. 在日曆管�介�,按一下新增按鈕 ![icon](../common/add1.svg)。 2. 彈出「新增行程類型�視窗,輸入類型�稱,設定�色。 3. 按一下 **儲存**。 **編輯類型** 1. �擇一個自訂類型。 2. 按一下編輯按鈕 ![icon](../common/edit.svg)。 3. 修改�稱/�色。 4. 按一下 **儲存**。 **刪除類型** 1. �擇一個自訂類型。 2. 按一下刪除按鈕 ![icon](../common/delete.svg)。 #### 通用設定 **�週開始於** 設定 **週日** 或 **週一** 為�週的第一天。 **時間格�** �擇 **24�時制** 或 **12�時制** 格�。 ### 主題 視窗主題包�淺色主題�深色主題和系統主題。 1. 在日曆介�,按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **主題** > �擇一個主題。 ### 說明 檢視說明手冊了解日曆使用方�。 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **說明**。 ### 關於 檢視日曆版本和資訊。 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **關於**。 ### �� 1. 按一下 ![icon_menu](../common/icon_menu.svg)。 2. �擇 **��**。linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/environments.h.in000066400000000000000000000001651523260663500274130ustar00rootroot00000000000000#ifndef __ENVIRONMENTS_H_ #define __ENVIRONMENTS_H_ #define VERSION "@VERSION@" #endif // __ENVIRONMENTS_H_ linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/org.deepin.calendar.metainfo.xml000066400000000000000000000026401523260663500322330ustar00rootroot00000000000000 org.deepin.calendar dde-calendar.desktop DDE DDE CC0-1.0 GPL-3.0+ DDE Qt Deepin Calendar 深度日历 Calendar is a smart daily planner to schedule all things in life. 深度日历是一款简�易用的日历工具。 deepin-calendar

Calendar is a small management tool for personal life that combines time and events and integrates the function of memorizing and scheduling.

深度日历是深度科技打造的一款简�易用的日历工具,主�是当�日期�节气�农历日期�世界节日。

https://github.com/linuxdeepin/developer-center/issues/ https://github.com/linuxdeepin/developer-center/issues/ https://bbs.deepin.org/
linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources.qrc000066400000000000000000000100421523260663500266220ustar00rootroot00000000000000 resources/DynamicIcon/day5.svg resources/DynamicIcon/calendar_bg.svg resources/DynamicIcon/day1.svg resources/DynamicIcon/day2.svg resources/DynamicIcon/day3.svg resources/DynamicIcon/day4.svg resources/DynamicIcon/day6.svg resources/DynamicIcon/day7.svg resources/DynamicIcon/day8.svg resources/DynamicIcon/day9.svg resources/DynamicIcon/day10.svg resources/DynamicIcon/day11.svg resources/DynamicIcon/day12.svg resources/DynamicIcon/day13.svg resources/DynamicIcon/day14.svg resources/DynamicIcon/day15.svg resources/DynamicIcon/day16.svg resources/DynamicIcon/day17.svg resources/DynamicIcon/day18.svg resources/DynamicIcon/day19.svg resources/DynamicIcon/day20.svg resources/DynamicIcon/day21.svg resources/DynamicIcon/day22.svg resources/DynamicIcon/day23.svg resources/DynamicIcon/day24.svg resources/DynamicIcon/day25.svg resources/DynamicIcon/day26.svg resources/DynamicIcon/day27.svg resources/DynamicIcon/day28.svg resources/DynamicIcon/day29.svg resources/DynamicIcon/day30.svg resources/DynamicIcon/day31.svg resources/DynamicIcon/month1.svg resources/DynamicIcon/month2.svg resources/DynamicIcon/month3.svg resources/DynamicIcon/month4.svg resources/DynamicIcon/month5.svg resources/DynamicIcon/month6.svg resources/DynamicIcon/month7.svg resources/DynamicIcon/month8.svg resources/DynamicIcon/month9.svg resources/DynamicIcon/month10.svg resources/DynamicIcon/month11.svg resources/DynamicIcon/month12.svg resources/DynamicIcon/week1.svg resources/DynamicIcon/week2.svg resources/DynamicIcon/week3.svg resources/DynamicIcon/week4.svg resources/DynamicIcon/week5.svg resources/DynamicIcon/week6.svg resources/DynamicIcon/week7.svg builtin/icons/dde_calendar_ban_32px.svg builtin/icons/dde_calendar_delete_32px.svg builtin/icons/dde_calendar_edit_32px.svg builtin/icons/dde_calendar_fail_200px.png builtin/icons/dde_calendar_ji_32px.svg builtin/icons/dde_calendar_spinner_32px.svg builtin/icons/dde_calendar_success_200px.png builtin/icons/dde_calendar_sync_schedule_32px.svg builtin/icons/dde_calendar_sync_setting_32px.svg builtin/icons/dde_calendar_warning_light_32px.svg builtin/icons/dde_calendar_warning.svg builtin/icons/dde_calendar_xiu.svg builtin/icons/dde_calendar_yi_32px.svg builtin/icons/icon_refresh.svg builtin/dark/icons/dde_calendar_account_32px.svg builtin/dark/icons/dde_calendar_create_32px.svg builtin/dark/icons/dde_calendar_sidebar_32px.svg builtin/light/icons/dde_calendar_account_32px.svg builtin/light/icons/dde_calendar_create_32px.svg builtin/light/icons/dde_calendar_sidebar_32px.svg linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/000077500000000000000000000000001523260663500261165ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/000077500000000000000000000000001523260663500303135ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/calendar_bg.svg000066400000000000000000000050401523260663500332540ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day1.svg000066400000000000000000000016271523260663500317000ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day10.svg000066400000000000000000000035761523260663500317650ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day11.svg000066400000000000000000000022031523260663500317500ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day12.svg000066400000000000000000000035601523260663500317600ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day13.svg000066400000000000000000000052501523260663500317570ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day14.svg000066400000000000000000000024701523260663500317610ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day15.svg000066400000000000000000000050551523260663500317640ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day16.svg000066400000000000000000000120511523260663500317570ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day17.svg000066400000000000000000000022561523260663500317660ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day18.svg000066400000000000000000000057751523260663500320000ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day19.svg000066400000000000000000000117071523260663500317710ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day2.svg000066400000000000000000000032621523260663500316760ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day20.svg000066400000000000000000000051461523260663500317610ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day21.svg000066400000000000000000000035631523260663500317630ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day22.svg000066400000000000000000000051421523260663500317570ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day23.svg000066400000000000000000000066141523260663500317650ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day24.svg000066400000000000000000000040651523260663500317640ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day25.svg000066400000000000000000000065111523260663500317630ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day26.svg000066400000000000000000000134361523260663500317700ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day27.svg000066400000000000000000000036651523260663500317740ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day28.svg000066400000000000000000000073441523260663500317730ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day29.svg000066400000000000000000000131771523260663500317750ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day3.svg000066400000000000000000000047641523260663500317070ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day30.svg000066400000000000000000000066571523260663500317720ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day31.svg000066400000000000000000000052721523260663500317630ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day4.svg000066400000000000000000000020001523260663500316650ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day5.svg000066400000000000000000000046251523260663500317050ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day6.svg000066400000000000000000000115761523260663500317110ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day7.svg000066400000000000000000000016521523260663500317040ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day8.svg000066400000000000000000000055111523260663500317030ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/day9.svg000066400000000000000000000114041523260663500317020ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month1.svg000066400000000000000000000022621523260663500322440ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month10.svg000066400000000000000000000022471523260663500323270ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month11.svg000066400000000000000000000023611523260663500323250ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month12.svg000066400000000000000000000027601523260663500323310ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month2.svg000066400000000000000000000023761523260663500322530ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month3.svg000066400000000000000000000035501523260663500322470ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month4.svg000066400000000000000000000032311523260663500322440ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month5.svg000066400000000000000000000032571523260663500322550ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month6.svg000066400000000000000000000026551523260663500322570ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month7.svg000066400000000000000000000021551523260663500322530ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month8.svg000066400000000000000000000033221523260663500322510ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/month9.svg000066400000000000000000000034731523260663500322610ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week1.svg000066400000000000000000000027011523260663500320500ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week2.svg000066400000000000000000000037371523260663500320630ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week3.svg000066400000000000000000000031751523260663500320600ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week4.svg000066400000000000000000000030411523260663500320510ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week5.svg000066400000000000000000000021101523260663500320460ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week6.svg000066400000000000000000000033171523260663500320610ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/DynamicIcon/week7.svg000066400000000000000000000030211523260663500320520ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/000077500000000000000000000000001523260663500275645ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/dark/000077500000000000000000000000001523260663500305055ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/dark/account_dark.svg000066400000000000000000000024671523260663500336740ustar00rootroot00000000000000 账户- dark linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/dark/create_white.svg000066400000000000000000000017671523260663500337040ustar00rootroot00000000000000 编组 21 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons/000077500000000000000000000000001523260663500306775ustar00rootroot00000000000000dde_calendar_ban_32px.svg000066400000000000000000000015021523260663500354200ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons 类型 Created with Sketch. ç�­ dde_calendar_delete_32px.svg000066400000000000000000000064111523260663500361260ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons icon/schedule/delete dde_calendar_edit_32px.svg000066400000000000000000000043171523260663500356140ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons 编组 18 dde_calendar_fail_200px.png000066400000000000000000000334441523260663500356470ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons‰PNG  IHDRÈÈ­X®žsRGB®Îé IDATx^í} ¸$WYöwN-½Ý{çÎ’™ 3A˜! F¢”@ˆÎ �!~•$ y²@&;~P'¿1õ�eÏBÈ„ A%L2™™;s·^j9ÿóÕé¯ûtuUŸªêåö½]õ<÷é¾]UgùÎyëý¶sŠA~äÈ%+–Ë&—@.�x äÉgG.�È’O�\9@ò9�K ›rÉ&·ü® ‘@� è¼›Ù$�$›Üò»&D9@&d ónf“@�lrËïš ä™��λ™M9@²É-¿kB$�dB:ïf6 äÉ&·ü® ‘@� è¼›Ù$�$›Üò»&D9@&d ónf“@�lrËïš ä™��λ™M9@²É-¿kB$�dB:ïf6 äÉ&·ü® ‘@� è¼›Ù$�$›Ü2Ý%Þrú&0½ãÀa›€ûA°M `ØÀ™ >|àêà‹hƒy`â øüXâ ¸ÆOÙ5·ÌÔ€ü¦ÔÈ’Zd½oo9É~ì“�ñ§ƒ'ˆí à‰° „˜¡ÛÃw^ý�1¶‚€Ÿˆ}pp¶üG~Ä®¹Ûp—&º¸ }¿8ïŒY¨yÏ!ž ž ¿*„(õY,ÐÀ„½Î0V€;Ø7�±oAÑø»ô–#ý¶e’ïÏ’bô…R^o=ý™â4`p<[0S3ºK¸ àÛ à6v\}ë=X9c¬w£kÕªª)ˆf¸TPøBìb vÀ «j”Û�ý/Á`lO–d#˜$BN-Pœ»k4j¯B¼ž"/MúðMj]Ä Tk¤× ÷®Ÿ{»ìâ�pùžÀèÏ™¥[ž9@š2i�ÿû+žBœ+„8ìdÏšU{UC0q gÆå°û‹ß¢^ä`‘’˜h€t€â¦]¾Z;|ñ^ðìU;Ýûh8ömàð—ðÂâ-°szœå$™`›e"ÒŒ‹.bðÈÝ;…`�€§t)6q¡+YÌ…­ëšç5š×8ÔÏ<À˜¸Ž=é&¸è¢V“&(�`à£ñ­/…ñ!v"=-ãæ½q¦IHºrÆ©~ÆØ} Äáê/}Q%¦IÊD¤ o;ýéàó�û ^§‘!„'l¯8DÚM×­ãT?öUÇóßc]ëÞIÊšH0Þñ²Yß5þÞ Æ 'ôZ/‹xàZnzÿ®üûŽàãZf”5 �.p¼ååg àW[×údfÿÀ~â]pÍ—nž6Ys鯛_±Y0¶[€xeçÄÑu}¸q½q¼ëgÀþŽ ñv¸ö‹Ö2Pt³d˜£�–Ý ôN=üýӇ녀cZY^XÓý+a>{#<þ—nS½]kÉ5¼&ÒŽ7¼¡öÜ_øÞ5鱞`YpW@cý§?]_kl²ªÉû÷'„³Gì ñ�ô�†ÄUw\ï½Õùu³Õ¾k-×Ï»„¿xןÀý÷ËçŃd¬ïŸÿæ÷@°«ƒ8Ǥ?‚×@ÿƒ8 o5^üªÆ$c�8pÀ?í9Åcìÿ ÑŒ�뼪Iu¤¤ú¤„1¬€à­#î†/…ߨõµqÉX$ÿxó\Óý.Ø q)±(c¤U^̦ ]‹Æ›HëZ“ž×ßù ê~r1 ×xüæ™ÿ3® O€ìØÁàÖ[‹n¡öUð¿’>ìóëV¡ÜaÖ‹/„ÓO¯ 3{dÅÒÅŽÛoçž8úqáûï\…Cž79¥À' cý{àÔSýqÉŠ$÷ßϼŸ=pšðý/aÆ[|uÖ*�RÒëäõɯNzeÒë&¹~!ç/7÷”Û`Ç1N Y1€DeåÂöí¬úèm±œúÝÄ5Þ‘nšÅ?Âtå$µñ³ .¯¿sl9>êXÅ“J[Nxöíã’œuœS’hÈ\£×H8ƒ}û‚öíãî:¾GñЬq€¤N]òú£M‡êGþŒ±/šGý]°}»?. €�ÝáÏŸé ñ׺É;ˆóý d^ÿˆ“?gìÕŸ¹y\ì‘‘$Î(^]ï6÷ –ï@Òÿô[½%0�˜¶ý ðKsã’‘$ÎîÀ÷V:ÿè ð–ÖÐ&Þ¤6&6ï»ö u½+lÑg$¯?¬W‡P/ÎàãñOÆiV\ÕZ€ Ý!Žv‡3m<¾¹h¿º�.^§{ØæõÇ#:ÉÉóÙäïÀÉÖ‚·7°GB‰�£Üêtd‰U­ î.?v›pJ2‰çWM‚c_3Ë›NƒzÝ_IUkôAöhåP(p¯zøtß÷o¢A×¹AÛ“#é•qªRô4KZjòˆI^‡¤[)Czùœï4Jn�ɨXd$i±GHµ‚õëMÇ]ø.UX‡ˆSý{EýšL4ã"ÎØïå�{VJÕ@Ô€ çKK–søgw €''FÛ/ÔDÊÚ¤¼þd¶?cð#kýãN‚J—évyµ†­j  iì�× *Þ0œ3AˆÏg�`ù}$ÆÎ¶=ëfXZò[ªÖˆ²~G��aõºá¸Kÿ" W*{Rk n¢èü‹º®çõ'³FF"ÿ;lsêP(x£6Øu³$óc*’=PµàîO|®ï»·÷,g¯_¤7�¼Zõ?T˜š}:Ôën‹Eææ0€ØÚ2h� @е{ÓMlߎi%†{äÈ/{^#P¯VÓ!Aò¾ É®n SÆkÎóÅÝ9Õ)œ(p ³Eý—mö¯›³³ßƒJŃ}û|عÓSwB€ìÚŃM s˜�5�=z�ñÇý‹gô%$ÉU»ü„Þ­¡wƒ�Ç‹ckZ�àÀÎ0`j³å£p䈰Ȇ {ö�œ±H¤qÞh°i“†a6ö4ð<ôÀ¶½ð¢ªA�d`*V¬kwfƨ=úè&V¯þ˜q[ÛÆáE·%¯öAêa?õó’‚䪶á>ÀúC“$¶ëÆYI˜ã ð÷îÕ®ˆ'ùS‡WJO*nÙræç‡êò,@(¥�Œó� 8tÈl,.þ–/ü/h'³rAüëÈGä‡oV?m’óµ6‰s•’4o^›©ÿ ™C¯VIpô:2ÕŸá5ñqmÐÕÏ;ËžšúظхC‡d£b¬�ƒDªW[·èÚÛ6�ù#z>œõÔi8æV¢[ÒúdÔB&9ÿ}ÀÊåØº¼»îÕ­ -¥ûè§þ¸Íל•÷Ŧz%Þ.ê·ÿŒÃ¥…™Ù‹¡Ñp—ïþýCQ³ ±ê•e™À¹ÙxôÑð…xöä:6ELrþù @Ò“$í°yVp|RËIë[éë8cß¶·lù-ð}ÇVd}p‰Q¯ÀóÊõåê ÅÞBMìO86ºòÂÅè®ï~æ±N{` I_¿ì_“€9tàÈZ¬’:¡ÓÒÕÏj…rù0ŒåaªY}D§^¹ËËOsÎ×ÎêUw;a[B�\=”ˆ{"p\ñIðï»oÕÉV×`Ó¶~Í,—0L5k°¡ÔLLlªWõ‡^%|w·®³«ù|b�ì¾z q©V�+º αFÁ��6 ëmÖ1ö SÍ@ÂÁÁBÁß·êËÕ !Îm�bÚ*“®Šu؇&ÐpêÇ`¢ý¾÷&°I�I¢ ÷è™ÝÉ:p| üŽô©’¥;ÆWþŒ±Ë åÒ‡€s§•z2à aZiuÉ6P±Ôuè½ZZ ‚ƒàºVýÐ‘Ï ­\‡´q³8oGÖ†³~ &ê@âÞ‰Þ­kZêV×¾1pV§©•ÝjÕ0ûŸxƒ¬ŸûraãìÙ`šN4ÄÔ“�7«_woÖyÖ’E ªz…é%øVÚJŪ<ü¯BÀS’O½&6@Ÿ {ãýçéZ�µ~t§ITË"ëgÖÙg�yê‹4jÕ•àé"äqdíÿ(åÏP±,ˆ»·/iDµ?šÑs[]¬ý íœ_ ×'‰T·®Õ{·²‚c-RÓcªø4à‘$U Ò?@TûCINDûÃ=ºøLÇñ¾,û8X?¸~ìu~õp ºëÓÆ~H�¼»7“Üy74›$l¸“¼˜g¿, s4®¸ü½ªÍ¡ëÏðûßYÃpÆß²Ì—˜ë¦îiÙ!É‹ý¨YƒÈý÷´îÓKÀó¬ÆríEž+þJ?™×îHÞ÷îÞÞ­X� Íñj­ZÕ¸bwkWžáž&{�].~ à â!´^}ÇŽÖ‘•HDüªU»¾¸üÛ¾+>59ÃÝÓäLÒ©n%cŽÉJ››ì÷ Så¿…R©€Ðâ(Œ˜¦ õºÝ¨úoô|÷O;§MZÒ_?|²~Éö§‰ßT«^ØÓ[Õ¸|·!_Ù8Púõ’>6{�¿ÁùÛ%óz(àºnG<¤¹ûâŠ$Ò@Gp ‹ t˲kG« |ÿUQ$Ý—ªå¶m~ÑÝׯ¸éþ~áØ«')¼ï¼ž6‰{çÝ ŽÎƒuê zƒãŠ«2©U:9³ÿQ–¨ÎRÒÅÁçQ\Wº §êrÿ^wP« Ó>Î[ƒÖ\ÿ2БAªK�ó…/2íb¢LœÉ—֔ޛ…êŸ'I/�aúHãò«À‹É­÷þ'}�%•?ã쥊ý±€A(`H†:®ésn GЛë?Ð@Ó´«sËBü~”Kó&®x9踒õóŽ×2I”ZàØ«xÎ3>‚W²ÿ�ÊIߤˆ‰¡xÆÙ§JëË—€ë6Z†zÄú�¬jÖ`¢z°0‚Ž6ˆiÚµ¹å }!Þ�ÄrIúHLúÈI\qóÂ!ÕŸ$Ž:Ú{ï�ñhtQ�—5-•†¯_!ùsή-®/_m5¢>OVÿ‰ò`¹®…*VmÁù ï7’4ÒtܦÓáßc&†vµuÌ�°þ¤ ‘ภüûîˆ[Tßµ¬|ÿ;[ÐloJùs“_[¬Xj©X1 ¨VŽAÂi¦˜€aØÕ#Ëï®xGÚ‡ö$]o¿ý�`žü«=»ì=ðïPÿè¥)³€'CŠŒ³+KÊÏ“FzLÊÉÊdÿ~wO$o`ƒÌ7Þ#|ñ“1T){$¾ ¬Ç{«ÔÑ»ÕØ}ƒ>-%e3Vû匳ËJ3öÇKuõnÝÚÞšô¢‹ÄÊD�� ‹·\T¬ê‚ó.áùçGRiâ‘é×ñ¨³êu Bý8v%µ° ’ˆ÷“Ä®óÃþëDÞq¾·ü™Á?Vš¶®À±¼ìt­ é32$ µE÷÷|׿PíoÖáÊz_x,²–“õ¾¨úíצG$߃úî’¿Ÿ$Ô€¬ýÈzß°åÏM~qqʼa<¢fñ¢z5?oÂÆ�&¦™  R?R=ÃuüKS=04Î#�SIw>i[²:etõÛ¯Eµê”Øf AŽÓ3w˽S‚d%ÞO¢ëŸîü åoZü¼Âlé–ÀÁt“C‡p‡QW²zWFÅB€Ð&q�éi+ˆƒ†];R;ÅsüÏD eP‚L*ðŸ�Ö·–µü¨ûì×îì©VIoÕ5 æ xÁ¹šˆ;�$ÍòÝv«ÖŠü ‹¿¾8[üZLX\XpZ¡ÍäöìñÇ Íe¶�ÆÑÚ/9 ÿ–AN²ÕZ–T«z3‚ÃkÆ9ø¶ŸK’+oèÜ xµ (c»-›Ÿa¯+~¿Ц#ƒŒ @Âi&M�š{ìÒ‚ó� ïº¥ƒ]‹³ûŒƒèÊ뢔�9·x:iB©_2GopÔ.¿ü½ûÚ­0NR¼à]z&¹òÓÝêÖõ˜ã_™±O†¢ùH@Bé&+Ë yXèæÎíåƒÕ{°öÚÓ´Ý~u�´ñ²Aêb 8ê—!s(àPÚÀO@&Ñ€äŽ{ ¾;$XÎJöÈõ3&–Ë›JÏßÇ(ºtóÆäc�-@–Öþ<)#ƒ®ÞÛgïë%æ¸,Ä=NçÎ{ Å$«W‚Ú–sÿQÚT|Ùê©XBª‡êWù¾P¢ai=ËCˆChE¯^�¡þ€9~G¯V]vm§ZÙ.Y:�¨†{¿Ú ýïèÇðêçœýKicámÀX}¼U,|!z±BF:Q¨nœïy”�Õ½2=)\ú3�YÖrÒÜ€CË×jUšþ#HJ¼³§MâÜq4u+Ú»•¦I©ž5;¤é¿ZÞgìÚâûc‘+#�‚qÅÍ‹6HõPí Ïñ?šV�ÊC$mGÖú )ÀÑ«-qõ�M¢I}÷gúJKÉÚÿ~MF’I’ú-‹_PØX¼%P±ÆÖÍKï"Œ"@¼ùúöêr·«wP‚L:ái{ÇÕ)ÁñüØ&aœ£vÙuÌ‘Ög!Õ­'$b ’½Ÿ$å@ büí2?Þ)ìkdì…¸` ³ycRM ¦Y^z¬ñ]�ß×𑃃T·~_«nÕwߨ“ ¢­Ã(ƒÔ+ÇØÏ×]€úx¦šèb6‚dé ûYâ—{ Jç�LûÌÑ•Ç):k¥[‹·_ûÛ`'dŽxèÚÛÝÿd ù>Ô¯üL‚]åÓ×ßßxö'ð½Ê&ëwp z5ÖÉŠÈ"éî˜nÄB9ïñ=ñƞΠ�¼’>†’Z¡:Ý&¡õ˜ ×wÇ9T¿É;4LB Qß¾«hÂþw•2"ùsƒ]_Þh}¼¥^�uº;„Þ ¢,˜Ç‘I‹óþ©NC\žtŽ×鬴paI½‘I‘ þÄà¸7:س) ê§ûS�$Å^ÀAùY'|ZÂOj$6˵,vna†ß°‡eI#}¬L)/ÍÁmGq=HÀ ·áo¬Í‹¯¡g.ýjý¤3?î‘—²’)õqŽ3¨U׃GêÝ ’õŸ?1)“Ü(s·t ÖO²úï‹5�þ ¯8ÃN1m~¨CÅÂ(úØ-¹Ý±ƒA̦  @âºöÒœøŒðá™IHI "é4×YºrÔvÎA›ã×co‘Þ*Ç3k YúÏŸˆÞ-½ºU» w©n%Õ¤²Ž[–~D V­Ÿs¸§²ž½LS2 ÇvÓÈí·sP^ûLÛþ�ŠØ!sÞ[=ä@ �†÷ì—Ù©iqåèÁáàp³¨UŠ\²öã$¥?|»Ö&©]ùÙžÞ­¬õ[þ�ÛÔ„O•×W·ìT±ÆrÛPZÒ#a¤Qç'Ö—Ät0vrI–�,œƒjU/æp¡ÃIUìAtã$eHîü>Ô?õÙäï'DÃ<’TS¨°³ì‚_À ¦d,±R©¶!)Ãv« øê5ˆ,T¶m1ªYŒÙKý[}_<>‰Æíš$à¨]vCßÌ1¨~'ÉßÉ$Ù] ª­iÊáŒ=\9†ŸBHõŠŒôqÛz;ÕñúµˆÍ«ƒ”÷¦«<Ï^:çù®x]´@ÆÕÏ pÎ+0Ç !ƒ\ן8N¡ß“ÇqÓ‹wÉ$¥Ø9èÜy/Ô>’þëï¬T÷×ÉKžç&ÜX™…KÁ0${ @Â.^ÜŸ—Ûö¹aCÀóuå%—¿]`T\çßÞ RVÜ�}ûD¿¯^£Öõ T$ЍGÙ!œ›™½MC½É"……ƒÆç…€ãS`ʽŠR¯È½K{ñnßÞwüc`*VŸj–U]´žïTSþÚSÒIDATÅ%º‡JÚiW^ÒøZ¿0Ëë�–@ù[%ö�Ò”ó¯ÆùÕ«�¨X]‰["ß~k«kDW0cæâ!ërÏëÜÔ!Ö8l!^s^D]9qíÒÝ—´^]9“R¿a°ïMmtÎ!ä›k)1‘Ö~àoèâm4\ˆxíó Ô«�$‘š…`(eò"®Uo Á0,g~±º`\'´ƒIg”ιs^7Ñ’V»v>ÌÑq+u�®!k°ÿŒ�WšöÞd•áßÁó2s—ƒµšŒ{`’âÕ«ÁK {³ff 8p 4lnä@ñ�àYä1~¾çÂ+tó!?¿ö%`˜ðÅ©cü�ì�À37ov`~Þƒ™™ÚÞ Š=†�¨äEtùª)ð ƒ ªåUýõKóö�BÀF9Æs=ÂÊÄaÔ¡JJ9ƒ‹CÈñÐQU¸Ùêg Uf¯3J|.†Ê ´s ¥¶{ž ô%88–é°EÂAÃÙYÂ1t÷Z¦¢`¤ÓQ¬Úþ‚zÝÈݾkŸ$b{X(xgý ÀáºR½r§• ¨Æ>Žñ€G 08¨6®ï@¡ZXGÐY䦛 ؾ�ƒšzB¯F UKê�𤠴>ìyÐ�%8Á“fRºnðõ©MΟà@õ ]»’EÚöªWô’L-ٷχ�;=Jm${ TÅê`�pL„ROLSÆEh¥!ìø½™Ÿ¨Z Ø´4g]'6DOŒÑùáóú£$0ù3€Ã•õ�76 @AvâäÚÅïøçºò-¶È¡ØÇX¤ $˜þN�=f®4ÄwˆhX¤ºh�ÜXd—k' ,ó¤š×ß)¸¤r C,RŽB{ 0æñ-{ ÝA®]2̇`œS»³ö3–õ»Ô,Ü3 ßf‘BA¦Ÿ„YU-ÆÌ…ƹ¾ ¯Lkª§5%ã:¢{Nf]�‘T]š¤ú þnz³wyS­jÇ=ˆ=0­¤^�f�!çCH,‹àÖ¤’(!cÝ0c=°G\·´p°ø O°§vL*Ý£• ‡M›¤WK ª;² EQµÀgöÂáÒ»9µnù¶ fAà@õŠ˜ƒ‚Ä"*s,-yÁ:óô;¼V#V­H#c�[„X$ìÕ2 °¾gDêÁ"ª O+ìöE �¤ºX~F­j~|˜mvZÇ®Ž*tþ­ð4› ú)–ÝKJSË÷F‚C¹u¥�.íÛF�x¿•NòZ�’=FÎ ‘ Q½Zª=‚à�Y½ÝvÅF"@â5¬c�–þÈ÷á)QOÄ´Ó•ÊÈz_¿pY-õsL­«þ™a;�õGØþ@{ƒ!U‹\¿¶ÍÑh/—1@(Õ-UíBƒ½Ñ�kG¢@¯ͥZµÞ-[?hÛ»_}}-ÄAs¥’ó‰âLí.BF¸U›ƒâ¶Ývç’:EY^öZFy£Ñ¶;VXµZ$Ò`�²GzˆíËËr7”¥¥6›‹ ]"U°v¾V˜I8g�º¹¾v´ðN×ãÏéwRç÷·%`ð­âº¥OÚ| µÛ GÕ ½Vø‰i$d”S”¼R‘ÁÀrÙ Œòã�— p¬ƒ´ôjZXE ‘oË•©(”õ‹*z¶ Õj'‹�OñÕ&Áû“åÁ–�–Ÿ[¯šo×oÑl]ê—éÅÁ')W„ü%cZ?n®P¨¸»ËÓËßùj3¿ƒ=È[¥Æ;ª1^*IÐ Ç ƒ�j–îŽBÝ¡d¥T«g�ž Áuì[·2ÀeºèÙ¢¤ÆbÑè‰ 2Ü‘EPåB›¿#H8gàyÜs­©¥#Å×y.?M»Í©.~çÿKjÍ'u–¥µÒ‡T?ðLÓ¿­<[»Ñ0�E0 ?`T­d^•Œ’«îÜv»d ù>sj5/ˆw 8Ècµ¿W+Î Z�à2]ôlE�$l“„YÓR,‹.cbü4 ¨5ŸX]*¼Ù÷Ù3bÕ&�•žÔ=¥BZâI ÌÔϹ¸·T©_[Xçþ<WuJU?Ñ5ë8~+‘˜CåQàˆ‰”�8Æ ز°ûW‰ëÊw "H(Õ&A‘*–üTT.d•å#Å“ëUëá³míyª›Q}"G»[ÄøÔÏ8 À‚o°õ¯-þZ­fœ%|ö�À&á<ãâŠEï ¥uµ¯ƒ!ükpÞV©Hµ¢äC•9,KÚ Õ '›ÕªUޱa�XUKÇ‘^.C£!?éòp5Sä@“D° xÀ—JÏ®WÍ3}Ÿ=EÇk1 x Ptn.OW¿ H#ÌmÆð[©ë*k ¶Ý‰eáb'i�¯"pŒ@°AZ&Ù°�kÚ9ç­8I¡ �wR¹*›DîÏ“^.4âÑ£†Ÿ¾ÏªK•§Ö—Í—û?Y°†ÁI}[è[xÆÀ1 ÿ;VÙýR©²ôC@– `�û r²9¢ rD˜5ÐÞ¨×= 8‡ïû�·êðaÑ‘�;†j•*ó±Q±ÔFõ z·ˆ0N‚Fx©dÀò2fKwp½Þf©VÉì_rG± ª]! 4ܺú¼ý"×1^âûì¸aMÖ•(—sñSÓò¾\˜i|Å6ëG»€Aêm’ ³q¥ÇJàò“þGæ($k 0ÊeªU/0â1ÎA†½ê­spŒ%ƒ$R·$LĈ;¦¥Ôj(h¸£OLâymŒ€BÁDT½h®+™DÚ)�@Á¬Rø…Fµø<ßåÏó›|R'å �_9y��W¶ëç á¦ÿ »TûF©Rÿq Ù?©Já§ ÓlÇ8dÊHÛ�«Ã0¼–½�†8¦Ž 0ŠE/HÁ9W8Æ =Õ- &HÐŒ ®p‚£ñŽñ’Z 7Ë–AûÄ4)."Ù$ÊxG  ‹ô ž¯/žØ¨Ú'¹.ûáOxÉÆîÀØpÿG–)î²K�» SõŸ´@  C‚@²„XÃu‘¤Þh d|£ãx&¢!Nà@&¢ à*`̱T±bÕ-)X¸€$˜»u챬#V‚ ‚ù[ø‰*1 ‚IJŒÀ6!°P@1ì & úNQP“UÀ4Á«±©ú’½Ýqͧz.ß.|ö$°W- ÆÅ¦·Ï2½*�}FQ,‚ëB[�Æ&c έÛ\—o>û9_ð-B°Í D º–ö†çFxËÑðù`ȪŒ‰œù�2.þÛ4ýÍ‚÷`¡Òø)0Õ Ñ œ„àSÕ(ÕC¥ªU •9ä*@©^‘:E¬�€@æ@• ïA{ãèQ¬_.•ݺUDåV­pŒ½Š¥eÉÎ�”š¢ª\XÄx º‚U6Qmb’°Ê¥º�ÉÓE¶ ² ~Wml(1 ± ~hšñ|ÆmX›<�Ïx›a˜ö}(ã•ÀÑ\ ÉÀeî<È9, æ-†˜7 Þ´�ƒ†íÏ·dC`�mh£Kz :A�ç‰-äµo{¨TO•js8H½RYƒ\¸ä¾ Û7Ýê6=-ÕeÌ™cÕ¨X]Ï×p‚#^§r¡+˜RMˆM,h› “�Úì’ÒŒ¸“ñN1T±a#>`‹¶k¸Í B²²Ê0*h¨Cž¨ßæI�j’z¨` † @¨ BLAî[•-,¨V‘*…Ÿ üŽŒAê2²‚ƒXƒRMÐ…K «T’ñÇ*:q¯ÿW…ŠÕ$rБ›Ò‘ʵ°À/år!0fgy‹Q Ú'*P(ꮲ‰j“�!¯2 1†ªrQã Ø�ó,ø¤“==qQU" PÙ* 軪N(ÈÎ@`¨Y¸j¡ R©2Æ‘#$lý�5¦§e|c•«Tá¹–n�Ò@oÈ×vÄJ$Ä&¤r>Ü6à‘MpRã©]ø�@B¶ þÖöxµÓS(*›„ øf�±¥zâT¯$ì¡¿‹„U)¹iÃÁ>2Ä%C´Y£×�l�ªý†€ ÖÀßøÿTÖØ°AôráJ<�·17]W-@äü =…å»H ƒMÔ˜ÉÌ Æ8$HPõÂïÈ,ø¿Ê(�y[ò¼šŒ`¡|.FØ5¬²H/F¡‘!•‹þ«Tê‹b ü-Ë  ÈIßÍa€àÿ ü$` ÈÇïóó¢#¶¡²FH¥ZÍàÚ>äýHŠïÉ&ª;ÓTöïo«]hÈËõ"�@!€”JrUc±ˆ€j3� R±T€�O=J�¢ôÄYlb‚,WÞø¶3Â�?zúKÛÁ‡ZMz�ªUŠ�K€¨ÀÀïh_��±u«¤‹hl�Õ š¸k ©Ø„Ô®¥¥¶ú¥':± …ìb,Ç‘†|$a€H·±t[–üTú_U¡ŽÓöRÂQ� ±,©R0*HÈÞ ßP�"õ) ŒJEºnI�Zì¡ÉšuJË&hÄ£Ú”rYNr²S–—%»Ðoø] Å4å=žG)ôm0NxÕ-¬ñØà(�„9Á€à 0„Õ+bÂ0$0\WlA @P š¤Úå²ßôÛò2²’LI�FLD|­°ÆšH& �ê¥Ú(óóŠEŒ¤cD¾ œjµ­–ÉŒ`y�B€!Pà9úfb’$J¨š3f ‚�T-~J›BÚŠR© Žz v ô ˜™ißhc�*¥2ÆcÍ©XQó¬‹M¤)Y“b'*£¨@©T�eär_Ê‚d Ų$8\WÿüNŒ‚ÿ#HèëU�‚ÿãy;&3¥ÑÀëÛÁ?�,U ú”¶ƒü�ßñ7Ç@À@Pà¹éi´A$SlØ€ÛíˆÀøN ŒµÈÁ j'en޹]CY¿×�H;ejŠAµŠlÐ ‚Fªb8Áñ¼Œ úB`P¿ ²™’¨ƒÀQ¯·�B`Àëñ;‚@*ý�€h4Б A0¨ (•,.J»Õ¨¹9Q}B»‚@±y³äKÍ̈À#¥ªQX&íK%·+™pµÆ4Òc"B�Öó»Ð=Œ@Á# d´W–—Y‹]0õºd!S„A!û'Ù‚ò¦r`´FeÍy±Ò<%"�"'G;ਠ^�ì²¸Ø ü�@ƒÀY·'´,ÁƒÇÌLû{\ÃóÍÜDüŽàèQùI`À߉!SSx�¼¾Pàí“Äáa˜h€¨ÂèÉ*x!eËÅZm5 ¿£Ë˜ìù¤— ƒ² hÇà�¶ ˜õ][Ë+ææä'‚€h?à�`ÀƒBÞ'í T�d[¥M�G˜)ð· W£Z²�ø’$B(©Á"'¡´[ð@Àà� 9þxœ¼m9#xè õ!šüt ªIíû<ô`À# 9(tÒíy>ˆF|Z5 ï'vÁïÄ0ü$àP] µn“zФW#ÐoÈ ²ü6h�!ðPí ü?‚%ðçIVŸ’ 'H)5¯‰‹œ€�²TAŽZ'9âÚ¡N~õBz"EŠ_+ÉŠéº<Ø«{‚& 8jõ¢$Çöíñë¶c˜�ŠÍ"‰€ã¯I6@ýÕ1‘wk�3`©ä@°@›ÅåŽ\óR׈r€¬‘�Ì»1 äŽ\óR׈r€¬‘�Ì»1 ü¶• 3ŠÙIEND®B`‚dde_calendar_ji_32px.svg000066400000000000000000000025111523260663500352630ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons icon_ji Created with Sketch. 忌 dde_calendar_spinner_32.svg000066400000000000000000000147701523260663500360010ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons -mockplus- dde_calendar_spinner_32px.svg000066400000000000000000000147701523260663500363510ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons -mockplus- dde_calendar_success_200px.png000066400000000000000000000377771523260663500364210ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons‰PNG  IHDRÈÈ­X®žsRGB®Îé IDATx^í} ¼U•þwkëî·æ%yY0’`Ùƒ‘qÑÄEDEPÔ™Y\õ¯ˆˆ+ˆŠã�Äm!,!!$�@�’¼loï®íþçVUwuuWWõö^¿÷ªù…î×}ëÞºçÞïžó�sî-†ä•H ‘@¨X"›D‰Â%�$™‰*H H2= $Iæ@"�Ú$�h�Úä–\5E$�dŠ tÒÍÚ$�¤6¹%WM $™"�t³6 $©MnÉUSD @¦È@'ݬM @j“[rÕ‘@�)2ÐI7k“@�Úä–\5E$�dŠ tÒÍÚ$�¤6¹%WM $™"�t³6 $©MnÉUSD @¦È@'ݬM @j“[rÕ‘@�)2ÐI7k“@�Úä–\5E$�dŠ tÒÍÚ$�¤6¹ÕtÕ»ÁLÓÆ8a¿?Ķq†g9g9Øzέ'þžÂæuGÃhp—¦tu @êþÓ›6MÑOgÇ3›¿šƒ¿Š™ ¸íxÏÏ÷’/œ‚ÌýžÇ Dq†Qö0“Ø_Áøý¦ÖyßmG8Pg§ôå @ª~Î…¼Þ±V;J?�sœðã(ùjbNhgF×ðªF1˜ ì0ÜnƒÝ~ëjý1}ÁZj¸‘©qI­Ã45¤C½ô�6;“1~&ç|-×ÎË™ká+¾§ <‘…Ìð|u�ßC4L-í3†ç8g·@â·$`‰7…€”““ Š3ëœif�2ðs,ñá¡pUÉÄ®Q¤µqN<`ÅlŸa»AI«7­9jÐ!ýŒ%š%0bJ3Ú&t)Ž Õv<çüB€Ÿîz—cl= ]vÛq¿.êÛÊÔHoy¨g¥b™WsŽ×…µÊ‰ÝpÀ·PûŒáO¦¥|æw'ìbªer$Œ7¯Ÿ6MâÿÎ8? 2 vI ®Ê™å| «.Ô-Ü¢í3ÀâŒ]ou°Ïÿ~E ø8‰5ÊäHo}pÚ;$Ëþ›[åLŠKà%.³ ~{ì�[§‚6™| ãõΞÕnëß眿=ÎL¯veo´%4QÚg ¿–R¿ëØ]»'3P&@À ïÔ[¼ö4fãp>§a]¯&—£äâBf´ÏØN.áœß{áíEÞ.áU›AÇÉ�8NÚ¶ Õ±sàkàüÜ?îlnv—£"�“¬}ξ38§ë_ï9ô9JÓ/¼&Hš=Zq¬šÚ˔ѧÜ÷£yiY¿Ç:W™‚pÚÖ/ )Ò>ÃYK;óÎ>º}2i“úÇ¿öé]ß•eÀñ÷_wƒôŸ |–Wy\ƒ§¾› ¿z*µÏÛÍ%~Öï�=ÿÞÉ’‰ �2àxÓÚ|ÜþãPýÓ5*û<ÌM%˜(¦âÝÃTkŸ3`Ò'þwõÇnœ ‰šÍZXk¯7�&ldozàÏ_øÅÅ|£ÖEí·V|ånŸ�Û`_½ý¸×~XÊ'rºÊÄH­±ôÉ5Ê¡ý{oàÀûÂM™ò] /W7눤ýbÆ'YÀÏ·uÏ8gã²3̉ªM&@Ê€ã¸nHMãÖ/PJzÍd¼Qú¢VgÀdoŸ1ܶò{8îœÜDI뤼æh;xàÀƒã�Q¬VC§Öë‚÷Sk=µ^×’í3üáù®iïܸ쌑‰’ÖH ßV­»>Ý«K·‚óHpD�'ù} %ÀØú4ûëV�›uZ�iô­ �2à8ì™›ÕE}¹_‚‹�~!¯ÊkoóÝ®IûÅããtŒÝ¶µ7uÖ3‡½×=š¨õAÒš)à^é´ûŸý ouÞ¢(H„‰ ÊAŒ´ÄuìFAÕÖeŒµVÿ9ØÍw¿ðlàDwÇbkƒ¤õRÙ©<ü%p~ÉISÍ’cWÝqÜ«\pk›[­�pœ²öÑKÜúai^UéÖºî7j.$í—×ïErat˜’|Þ�«_y£'i]�´@BÀqòëNR€ÿçEòFM褞q’c üÃ�;òžVIk$«×®Ÿßaë˜fIÇeq§AT;qÈQ9½Q.†z5Ñi÷�¤»võŠZ$- ��lå›Ó½C#bÀ1¡^‘²³,Š”†‘ë(rö{鎚¢q¡EÂ'vûxhCGÛëv­<<ÛŠi)ã�2¹UX÷¬tŠ1x5·ù'ã®ü…rq×øêkŽwEÒ~e/cÞÈØuÒ:?ƒU íVÉø¤8ÐÇNzhçi²iÿ¦1ÛÕ¶#â”JÚw¤TqªqK‘þñžcæÜôòVÉø$Ž5zûØ‘©ý³g ·œÏŽ3ý¢ÊÄ5¸¢ê©õ÷¤}GrQ'Àvíe©U�çzv¡¯—ãŒÖÈ€„€½½ÒÉýnøÛÆçÆ’”ÃñÔwœ±_ßݵüLôõÙ­’ñ™‡eyG�ôZãþwȶõËò6lØFb«%·Õú•ÂÈ~Ø‹^CËßA”š\ý·$ù¬?«ÇߊUû[‚�Œ=@BÀ±R]Û3cÐzÌ9�¤0Íœ[ Ÿ^Î/…iTÜ¥¸Ó'Hò“ö=æ0¶òç;÷uÊG>a¬Þß [€”3­Îècx²W:q`ãwg­ÕÖO®›<àŒýèÞ®%`YŸ�5ãËGÆ W8íÞs¯D¼ã˜ágV¶™æZç8Ðr>�(%*ÀçÕUOÒþøËŸqX#ª²ú¡öÞ|ä¤@bã'4v 1­Ðý‚tbß‹·ƒó“&Ϙô¤n 0vϽ½�†þùöxšZãÒÑ=K:~ïη*_äA—rŒjI{ñÊX¸:™OÚwä| C)*˳TÓ‡—7eéŒûgÌù-úwÛ%AÄ1Ò"c�¼ö(6­�Í*¯Í½ð À–— ºÖl¤¨HvÔïaÆX­F\Æ é?€ NÍ?é´9^¦VóRÁ´:~wß™2ìŸÖ­Ž“ &­,H¸Vï-ãej�!@®` h¹ëµÂÌ~õ„­ûÖ1ðÃÇrtÇ3æ˜(åIðXÉ`¢µÏ�Í÷-š± {º�²^­&›ZÍHP{¸^+´÷Iǽ4ò™Û7�ÕÄHÚ™¸°˜ôÞæ¶ÝŠá^»`j�ÍVÝ1H11G¿"ŸÛy·?•½ÄR˜à…Ç{�«âaÔðG¹w“ö‹%Xòtß¼€Æ^þœá¡ûSsNF·i�5ao@*h�Wõå^­éö�EC’¿“(ñ{þg÷C``óm†V“´_ •*� M’¿®J§<Ü›úëXk‘1ˆ§=z$Šy�ö8NïûãxGÔªïú+ŽW©o)¨Y¢R%"î"/“½ý£»ŽÆkg¼ÓÔ¼˜}è»Ï�>—ÚXõŸK¸õ­÷ýŽ)ii@´ÇÀvy KÍžnç6ÐÊNͨ<Ê ¬4n}ͪw‚¶¯J*.=ìR¼¡÷Ô"‰ZÜŸÿnÞ �Õz«ÃÖ¥pyéû3™ÅOeGw£kž5V\¤É h�vE>æùŸ–-ë+%KP”:©r¢…ŽW•õD›dåo|"·/AÂ_‰×Í Jöç7}÷ì»7tÔšÑK–/}è�i×`xì´Hóây®¶ËèJÉ«ûÍuŒóÅtt±4jBWOkTù(�Ó¨vÆ¡ÿÿ¼èsxûœ ‡WØ<´zâÃ¥iÖQñÔ:äÂÛ²¶[Y…�œUV‹4ÁÌj<@Š¢æ”Râr�vE^ùÂÀª6Ãú3Í­üÓ\£4‡/‘½<' t!ï~q¿ÏXñÈ$í;‚Î×s矃Ï?;rT8ç8ií)й{Šh~ÁDZ,ÿE~íó»Ö�•i.@|q C9f€Q²ùEe¥_"Èà�0ZÃf|ØŠ¬.iïœóv|vá§#Á!€%r*tÛ}nçÉß–Ø·êb—¡fY�VƒµHcâ×5_Xð\¡ÛTŽÝ=ò8©�F™.±†ÙW(®73®‰0ÁÚ?eæÉøââ/@bR¬;ß4´g?þQÿNµX×Å&-á¦åóÎj[‰~ÅÌ{´žÝoíao HšÊØ}2EÍ‘Ñä•;¬Wf²Žyå×ía¼`ø"¸*QM‘WôÞ•¤}à˜i«põW�²þ³Ø£ï«S�•?gì�G;å7C“M´§Ìf™Y Hyóª=7Ú¶ä@ú9¤ýmØý!t?w ”�Ĉá‹bùË'iû”ºpåaŸÅ›g½>öD'Pœ³þs �ä} -"€g7MË.NeFšifÕ�ój¡•^>-+æ‘Ã5•£~�l N(MÌö/:ô#xßËÞ[8ƒæ0>ºá_±e¸�Ú^Þ¨ ßT”| ¿¥ùk¶ÈÙ Í4³êï]%ó*c)K_äïJ[ìûQ#7@vÃQb�ÊíhÞøä!ŒAþw"âç?ù<6ðd‰AÜJò7Tþ±õsØ-mž™Õ8€øƒƒ®÷ ¦®®<�¹L¶paЄI¨HìùZWÁ·Íz.;ì°@œ(¬Rrá~nÓU¸w=ù® ¯RKƵOLý"ÍÈ›Y 6 ¾}^p°ÃV`fÔ#÷àf‰£x×�OîQ”5Lžõßxyƒ!8%&rû'M?ÿoÉÅ�YþD׊3ž¯|æ;øõîÂnèVî¿ÍpÇã3ñ^(£†B‚†uz²êŸgÂĺ‚yçìb2ºúdØí*¸¡9”¾—q,©}-jà’SÓMLÌö_Ùµ ß[vRRù�›åDqͶ›pÓŽ[?µnÿ9æÇ;²'‚©¤a½ºAÃqH%þaæTpS=²¿c+ÀÚƒî]/…¤Tƒö䇫2Ë( c¼ë)ku^jd&a{v'Œ|t8ÞõÁGŠUÛ~3ûxûüxù—Ñ©´Ç^nÚq¾µí¦ 'w5Vþ�é?~¼{h˜b@IÍp÷Ö§A<€þ±”ᙇdøøÇœÁ¶9³ueCìQÃ&huµT*ýÎ٧⼃ÏD¯6]ë7ñó—~‡¶ÿ7lîä»Eaû<˜â§>×e>–ç!ût ��äÅ:̬Æ„ö~xü£}š3§.Ú›~}»)ýg¬‘jp¡rëð¶yøïW\-̪°×ÿì¼_Üúƒºï¦>=P}órnX~%–t,ˆ}ñºþ§ðñ�_jJ~ÕXõX1Þ½u†q—0±†˜yâß#2îñgïRzIÆR0�Õèþ§ —¾oÄ‚X�òoÅ«Õ_ê¼ùïÄù¿+ò·ÿ×<ÿóÈr�-P{ÿS’Šï-½¯ê^û–6?�o¸,oR6^þ•o®¶þç˜}þ–®þÿAWZ�‡Œ;@p¯”ßÕm*ÈÙ k‡¶Ÿ£Yørùp¾�¢Äábóöxb� a1\¶è\¼sÎ)±&ÑÕÛ~ŽÿØñÛ’§{¦Mõí—k¸ÞþË�ðÍ%áõ3Ž�Õ/*´=» XöèÆTþÍè¿!Ûÿ¶¹sôÀÒ‘’ÌüV\Ї€žLu¯gUí&V9‚>b)h“e ‚+Úáý�ŸR-ù_‹Ólå^ÿyóÞ�Orf¬‰D1�+¶þ·îº;VùB¡¨þEý^]s— ÐW“_uX9^È¡Ø¥£úõ{ì†DAC¶¾¶¹{ðÛ`¦.ˆúˆe¡M6qXcˆzcBû?ÃYmI¶çs²-�bôª‡iˆj½ïQúƒ„¹ 3·õ�ŠÄ?UÒÈþê�wáÜy•ϯòßø�9‚mø6 o‹­9âZãÑê›%ÙßÚ”Þÿ ´§õ¢.ö‡Ô· ·N€"è´ÿ£"‚Žáœ¶ddÖ%²ÍÎ�œ]cXàcB‹¼3v‹ºmà㿎ûŸŒ}ÍX|ßÜÓpñÂÄnŠò«Î{òkxdà©Ø×L„‚†Ä¿»¥m÷UhO9v÷‡·áÖÈC¿‹"è[��Óï›u¹bIç:‚.^;«ÕQƒ]ŸS‚þÅ¢sðÎ9'GU™ÿ}ØŇ7ü;6 =zMÜö=Ö]>üöÞ2óx\µø�ªÈ¯ºhÓµ¸kߺ<ë«§ýrw]_sÆß”ùõ[¦ïºRJǨdEÔàɪ åtà)œûÔ· Û¦{M´ñ»r_µGéÀÏW\‚Emžüî}Û® œ_ûrQ0­Ïå­_þåî,nûºl^ùlçÎÑ®éȺñŽw€ø³x)HhØ Ú¹BABÀÐ:èô”®^Syh¢õ{Xíq¯sÊš™�›—_ŒZWì™t×ÞGqáæï…$úU×~¹Ó^Ú¤~²üŸ±²saì{Z7ð4Îyò›ÈÚÞc ¢€uŸQ¿7Fþá§ÝTn?§ŸÞÖõâm€ª‹`á03ʼn‹Á`á¸pˆwHDdñš®‰%k/ì9©ÃHÿÄY‘Ê“¯Rñ¯q‡×«§ÐNÁ­·ý#ÚÆO—ÿ3:•øçÔÞºë¯øü3ÿ‘ïF=í;•8=V„ἦ 'Âæáíx߆¯c@äWUßûÞõc)ÿZÚV³gïèÜ� éÂÄRœÝ…z–¡,l€dTXºJ^¬ÙÃ�¯èÎuÞ{ùk�‚¯êZŒ/ûÒUìÄ»qÇøÚ¶5 »{òÜ}cñ9xKo5ùU{ðîõ_Ãný@Ãîc"TÔŸ<}Wûà߀hF>šÞR ¦™¸é2Ô9³g­­FÐQœ#ÌŽZéâÞµÿºéGâ;K>:h-îëêç…lÿ¿¸ÅCËQû—.x>pPüüª½úÎZÿu<ŸÝÝ�ö z¬P]µãRë�TÛήÎÝ«Tcg @¼}!-¡A‚áY £²†´¡¶wÑc h«U`ãuÝ齫ñÕ—Ÿ;ZM¹Ë·þ¿ÜUxJ-÷þ‰yo§y[ìK‡ÌQ¼oÃÕØ8ü÷Ø×L–‚yfÆÖ£�Uud(R!k\M¬ Y´ÿ°ß1/�”êCJÅuÖJ&½ZJÛ?{îëqéÂò»Ëõ‡’?³ùüï^Jé¨öÅpÖìðÅEï‰}DOÎ6pÎÆïàÁþ- xPGëÉ?J‚œñ§·Nßú–‰×ÄË¥î[ô‰K'W»Ç;:):ÜñX,ØèšÊ „wÕE¿çÏÿ‡¨±ÊÿNnßóžú>î;à%Ækÿ�3^�oþ‘ª2�/Øt=þ¸ïonÛaûxí;}ÕØÈ?<Áa3~÷³ÓŸùx*×Ú&V÷ ò^¬I‡žK2ºðsª¥žÛ(Ž=S‹‡¶^½Bí]¹ð,¼wîk¢›vKŒX9|`õøÛжX`Zݵ7,ûhg`œ™sÿ¶õø¯]÷—)Þøþǹ§B™±kß”�ëŸÏ<û heÒR$½ 7/ÅBœzÚÈ|=Ì�©~år®¨výª§}ò*}kñÙxKïªØså€1Œwo¸[F¼äFçÒàŠ¸´}~±üÓèPŠÎö®ØÎ7žÿ ¾¿½ø,Œ(ýQOÿ+iبz㎓WO´æ*ŒVý—;_pb -ëæõŽû)($WïŒá¹K»s]ÊÕ[nB¨LÆ�ø(Nì‰ÿ\�]¹8sý5Ø’ÜxHº·¬¸3µÎØÀ»qÇÝøÊ¶àán±/ŸTûS§ïmi£GK éDE/«Lª $–‚�j[°Áƒ`ÌMAuÖˆ‚éS/9,^™KM¹òõ×Ò~FÒð³eçã•]ñOÙ6Ú‡3×{òÉ�ÎÎR»±få§1?=#ö¤ýÕî‡ñ¹§^t-–g°ºÆõ¿Ò�†›²MjŸ#÷\ÏsÇBÊ�Àæ¹ÖL5ñ„žfKÙ¼¾dEÒ 0‘:døå?•¸üÊÊÆQ˜r­7òÀàÐV.ß­´á—Ë/Àáíñs£6íÀ¹O]�—D�c®Öƒ–~Kª¨ãî}Oâ¼M7ÀÌŸÙ—Õ5¶ÿÕïiNû6³}¾ýé@�CÐ[6Y±Bº»LmÞÀáŸQmíœrÜ¡tUò4L±`ãN‡ 9 nº‹®'ºýYjÖ¬¼W±ú˜£¸{ÿFÑÝ“{–¢«Št–uÏáýO~£ùüª ky ƒÍèE•7Fí›’~Ãö®ÍWŠÃ?Z6Ý=¸£Ð·aʈ¡õŽ,8¥Ýè¸6¶-1 ’ž�5+.@oÉ�µtkóðKx׆ëÐoŽÖrù¤½fTºpWÛswæ zËo˜¢G>{‡Æ¹[nÁt�¸GÚêœ1{pÁ=`�#Ý®qÝq˦H#Û?¢}.þkÅùUiƒjfìöì>üÓúë°KïS´…ïÃE×6²ÿe+Žè`CÚçÜÚÕ¹í¤¬<¸œçÀ5½u·Üb#CÈ¡ È1—50I›7pÄOd.íŸ�aµS¾¸|$°ªkÿèÎøÙ²s‘!eÙÀ×^cï|â»x.ÛWï”kjÿ«æ$ �?göcïzêlpz&5Çs­{hd]�zpNàØ0Ú"i`¦vÐÐç)vê|¸�Ì�ZµÙi¡œÏ•|¾¾@Å%ß»wЀöOîY‚ë�ø T)~rc¥Y?dfqÖ†býðŽè€O~Â�_ÿ‹œ/c SÊ~÷ÅŽ§~NüÃÖÁM½E�ýàí )spiCƒ&k=Ã/[Ñ‘�ù ob„?,"T±Q”Ùy9#å‘ÔÂ÷GæÔÖþÛf¾×,>+vrc@r¶‰³Ÿ¼÷l-_¤EûïÝìXÈ0Ý÷žýí;ÖC·tpU·ô=8Έ?Xè;zYCCZÖÀis…¥Í?pÔoÁ%gów\ IØ­IDATïmÔ œF‘*ܽ  í¿gö1øÊ¢ÓcçSo�vž¿éøã>ßán¨ÿÇ5î8E�‹dïxaÚcodÌÖ‘µt¤ÝÝ„-uô¨˜äîã×B¯FVwS˜Zs–Z±Re·Z⎠q†??=`jG¹ßƒL&P>¬�¨öß0})®;ü,däxyUÞm0GpÎÆŸááÁmÎ<› ýÏk’&Éß�s7íìÜp�0­ÈÅ+¢¹\¤•¯ö$äñ°5i]ƒÎRdnu�´¢KŸó³²+Mp…)py®w¥m`û‡ezñ…oÂë¦^‰j¸@àøõž'pÕ¶ÛñbÎç­šÀý/êt˜w-* ÒÿáÔKïßßöâzaVi<‡¬¦CÒ�üAÀ“å>@‡ÎçEZÑ #f -rÐÀÑk˜-ZbˆÍÏÜïc›LÅÉk¤’j–¶À÷ hÿØ®øÇ™+ðÆG`v ^òBv?nß»¿ê{O í(Mcl@ûþ…¨ Ʊë£Ûçßöb×#g8Ä\Ö¡!‡¬GÐ[ù:ž'+Œ¨§ œL-¦õ,û f¶ž›µ’„®Á!Ûkt?¹£JÕ®ªk¿CN �ØàØ©¢âS¤ÿywpòוákûº7ÞpŒ‰«@ÐWí·�¥|üž’7±DÝŸ´è ƒL,‡¨§0}Ö̡ſåœ9Fz‹´_|^,Ï)P2“öä-ŽTã— ×äÅëV¾Æ�ƒ1nìéØòÖöí�b *Ïå`åÏÃj̳AÊMÏø=÷Äÿœt/¢^”râ�táö…©Íî?æ*ÙV+ŸJP]¼®pßµ^ÆAª]á“öIV+·ù[’q×®î‡.Äœø‡GÒ£RLÄ,÷ìÕê¦wýɃä �¨{ò¤Ç pCEÚT u‡‡t닎j�ý£f²DQä½Á™´�@ƒä?Ò¶ë£ýÚÖÇòüË gL5Š{Ð×gã¤ú¿ÖX€ø#ê…GAÓ“¦òC¡A˜…«³ócÉV–Wkc(}yÉ—rú(*ê÷òˆwê|p©LÚ/–WANyR‚ °ß.™vN{è#0™!øi�rÂ.ÝBƒœãÝM˜.¾.*zVaó,ÇCÜÔwaj™’Ö“[rJJŸþ•€”ÌûˆŠÐ%;¬ n±¤ý€‰4þòÏiû.ÝŸÚt'Š}¸ñ�àÿy¼kzy½�^k<@Êñz´?³×M\$²¦¤f÷¯¾¶tH¹5:¸òDYB1�—Q\Ð÷¦â“ö+¯™Í’?—ìçwu¯}/¸™Ë“sGœ Þ:ùGM,ªÊ}^!z$ls (àm¦ê¸y]w¯Á„GkÚèŠSSÆŒ+ã««¤äT“@NÝ{ù�Ìú;8T×½+öŸ[:FˆŒPÝçºØ|îÝ–ˆŸ¨¯ÙÈò‡YÇ0³ 0­·ÿøŸ0[}‚Mu Á�ùòk~!y1ÞTKÚ/ÏÁÂ¥WÙ�W•ü%këîîûφÉõXæUþ°êúã�3±òqµH0íD·áÍæ•®yûC„™Åmµ[_ybj´÷ª‚À«õ“V[> ÕÖWmù¤ýxÆG.³÷’~ío÷‚IF‰y%Ü»ªM6Ñž2Ñ ~ïU´GcL¬ @È›UÎÌ‚©{³(6¢¨�¹2sàÄk™¥¸‡:DM jÉwÜ\•ZÛõ®‹JCmìšTz·“«}.›�îéº÷BXÌL#ÿð¼Wh¾yÕ8€D™Yûtí– ®9š„¸ˆ4—Õv}áâ¶‘? —>Û¨Ú‰’ÛåVSùWÑ·d­¾¤}G€åå-]*Á¬‘¶g>2¬=¿Ì*€Ã; Žé†eÓ5ž÷ª æURÆÌê‡ {Ä rÒ"…]†Pd†¥A†Ò3ðšÏÉV&þ±æÕâ&)?a$`É£¿Þßõ—oÀ‚ UÖaZFÑîAzš­¶è†Õ,óªy  ý�f³-W‹Pn™Y6y¸TÙìî™6|ôMŒKâ$µ(Ã(z%*žµºià £¤ýJz"Ú –È39fï=ÐþÈ-¥¿£=ˆ¸[k‰wH²Qô¨µrÁÁñ�ÆÄÏEij Ý !(×ÁdYo3T ûȺj«0$AÖYíÊ-?YÍÍ qû6š ‡QÈJ›´ï&j©©UQ9ò5R/^>�Úp7`‚œ«¶ƒ@â‹}Œ¸ä|ˆ[è6-ÐÃ:ô÷ VC»¼¼¨º¡ÓNÚû$d4ÃþçrÎi'Pl•"ëDÖÁ¹Ú3xò—˜�~ s"|8œ[/�¶ÎáîÙx]NÚwä8–òçRö/û;ïþ39§È¹)"s7åž¿ë=‡°]21ª[îµ± V>µ½�Ú£y„â�‰�1Mç!ŸÄCh§¡çò h™÷ÌìzÕ�—â?¼â¢U­1Të v]Ò~,cŒÙûú;þˆÅöï Õ´s�ø=¤SQL¡=‚ä¼¥â7³ü©'¤EèH Ь·u*ÎC> '&¢—j‘výÈÕZvþUΞ÷x¯¸›k DßkÒ~Yq=³ý’aíñµ%ÚCsϾ"=¤sdÐÌGÎI{4!öÑ<+�¬ÓóC¼Èz.B‹ÈP +J÷þ×\(Yo�žrI‰‰.[üUÏ}×Â2Má¹*Ç=<í‘’Ì"×®ç`ƒµGãM,o¤ü\$¿Od»Œ®”\¢Eˆ‹¨Šê÷h‘Ûºšé~Ý·˜­gTK¡«-uÕÖWmùÉÚ¾-™Oõ·ßu4cÔ‡Ïse˜F�{ø´Ç@ÎB×¼¦D΃rŽk™D�OñïA²N'/zZäï.’²Tä$ ÄEh¯çªðjq(šuÐì¶¡£¿ÎzJo î‹Ê¦Šú=¬ëIûŽd¢ŒÆpùrÆ÷�v<òq]~q˜«9ˆ Óžò\¥l9Ù§–xÜã`ÅİË=š¬=Æ@ƒPþ݆®ÉÒ®‚ö¬{qn9©(²HA!�dF–¿RË-ø*À”Ê(MÈp,2\ÝRWEéjåÏM=õÜÅ£mà ¯i2¯hC“×.Å=<ÏÕ¨i!L{4Á¼j@*q/.B{E¸Ñõ¥ tÙqû@(€harûðê7)úÜÏTCÚ«®¼uè~¨Wµ&íW€+cÜÔ^ºz¸}íÿÂâ$˜" H!·®æºts®æ˜¦•Mxqò\��ö#€´ˆ?.¢sEhrý’G‹´ñÃt4 q®P|Di>ùC²Ùýž*–´¤h‹JÀRöÿb¸ýÞÿ#­á'æŠâžö ³Š´‡ÆLøãAÏU“´GsRV‹<+¡{–t=c+°(6¢ªÈ.a'>bj°UÅ3µ$ƒ§ý ³ÚNñ�{éJ_§¨Ý‚[!“ö„´èO[¹s¨óö¯;àpM+É0�tÉI©:$À¬•L‘Òž×»m¬ZX8óª‰àC€”Ñ"t°tíwûú »ÇE|¦¸¢u œúoÌʼº õ¸d9îrV_µßÇm/X®Úv&Nÿ¹<úס®;¾,r©‚¦q�rĜܺ#–ʹ*÷˜Ð jŠ®SŽÖ“½èü¬þ>ÇíkAAºMG�L-af‘¹ÅdÁI¬Tª}ð�W2;}t-S0îtŠ[®Ú{ˆ[oÜr¥}.eîüÃå�s9Á9  ‘±ë3­2tb¢b ;bB¦ß`¢»×ÉØ]Ög;9WîŽÁ&ƒ£ù¤ ®ñÃL-áÙ¢l_"ìÞ?E�ÆdäÝêÈ´�|Y­ ©vR%åë“€G×]W‚�d¡2:�Ãt‚b· ý³�U¨iU†˜O €”p Èö ©¥eñØÍRa+@Ü”xrûBb2$ȤIÚßp ³Ú„¹Õ¬7îÔHÚw$ät\ùëH篚Æ›Àá @$Ó€.â1ú¨)b¡¦•XhÝŒÔÚOL¬v\ã–¯½\IðÐ%ìéI˜ZÙoªÂÔ"¯y´4U…íiY%¢îx¶ À† )¥dúßðYÉê¨|Œiíw]÷þÂ:š.špõº�k½�ZÝÕÔž-Ý5ÚýÇoÂΙ�àCDË}1I2 ŽçŠ€A¦U‘sÓ¦UvÈFÿØs¿¬ÆNîE‰‡îA^„Ýoj™¶‚´­ˆ"WUG“¸±eç a’”<ålÉšù.'NRëZEŽ=±Åõ{E•«–œO öã¶Ü÷_ÙÎ;nÛ)à`NÌC€ƒ€a¼ÊR–nÐk5>¦•'í±H”©•ê”0l*Ð$YSÒ 7>Bæ–SË’ÔÐ §IÆüO\DÜÃ;V]— Ó<¸Ï¤¸žðra@ˆ·¦O¼öaÚê ×å:ži¥¹¼Ã‹wx¼#ÇLP@P·-‘Œ˜´‹½VckZ�3@\Âî÷j l—±°SÂvÒ ²,Ì,�@¢9!>â‘vÛ5µ@˜LÏ_‡-IÚèQGÊÙÃ/¤i…éWl$Ôª_âMçr¥¦RûÖ+½å*=óØã�lzЉ;ÚƒL+‰´‡Kʉw�YEyV:}Oæ•eaždâÙA[$#–óZ�1+o!ø÷xL-?¡({ ) …øˆ …2}Éíë7µ ‘͹½êð —2[[RˤÛ µG¾–¶*Á)¸‚µzû\Ò7í÷}ÅR^ê+‡pë2¤=LŠKÊ!èÔ ä`Šhyï_Ój|4H�9xPÂ_|„´‰*ÒN\“˦¿ äM­'-ÕÿÆ�0{ú[Qò`öFMå¤GŒsißosÝø1`ÒƒmÎái2­<`�•8tÁAÅ#åïxLü½ÓÎï æZ�±æh-€�©ÕÛÇÐÛ+‰=ìÄGè ‡} R=²Ø�hQüƒ¸HÊ%ð®û—{9�ض¤dW­ä^~‡Üt@6ÚÔ*­¯rÊÉdhŸ1{¿©=ý-3½öH’]ùDDFΦ•ÌL±C0·ß‚6ÝD·ŠxG_ 8¥RDØ}|¤,H,žg‹8‰e©ÈªqSâóæñ‘†9#UkI=ÌÚg§žý¾Ùö—¿‚3.´†LÚƒÛ‚Œ{Þ*AÈÝMP&38 f K¥I$Û*ʳ"RŽ^^tBÉ8iŽñ5±üR/yVBz!y¶Ú;%‘ÔØg+è•ä"�Ø®¹åñáÝ¢H»ëÝq‰Ì`“F™Ù¡ �øAXÓNsŽ9M^UHÀ‚|àv½ãÞ›€=CŽIåÓÄ9"Þá'ää©Ê™Eàè³-ôºIˆÃ®Ç*û,/ÉÒgpŒ¿©HÚÝH{ßI¸ !skÄÏI(xèz¶¤MTI‚mÉ mbÓg›’T e—.”³G� ;sddꕲ�[éG¯·ÓŸ¥¨8„—Û�d †m m!ȹ·;�þ– çhsÍ*Ò8:-K¸s{§•�”·8Z tk¼H{ú€Õ’´$‹h;wáݲTXš"L.Ò"DÜEÄ�ÉÐlɉ•›\°$¦d_½šé‹ÞϹzhÞ0rMú|ô¢j‹©¶ý ­Ø>“Œm\Ûú33ý×µ�m^bR‘ÖÐ ,”_Eæ“ë “JÖ2NÞ*"äÄ9²®æ pƒ6²¿;WðÑ©ªãé´�ZͪþF5\RO‰©U$ÄI<âN !@/¡Ïô_ ôÙ5¹$Ò “‹Œ,¦JÊà ¯aÆ‚÷p®ÌOU©5%p]¤ ª�¨ ""9Q—ƒQ&È \}þfçŸÿnPŠ¡£5ü&•mÛ¤"p0<€Pœƒ!ø†”BBœc�£u4H¨©U$û\NB I'±`iz'`øH;i"ë,ÄI\mBf£À%g(ÙׇÜÁïàvz‰÷$¤°!?ÏÜù•& î÷Áé_«æhJûRv“�úû­vúÏ`€H8ãœòˆ¸íj "ç ?)§xƒBž*zWe9ÛÊòéCs´I/q#í�(£L¤È§Ò’ˆ“芌鲳OÄJû@â„€âÅI,ÓIM!m"È;q×L@±$F€‘rGÁr‡ÿ#ìŽÕ¤bŠn1jnv(¾áísÒÐZžÚü;õÈSž9Eî[¡9¸-ܸ¤5HcÈŠCÆ…q½UžÖñ�¬)ö}ì³,h¦çÈem±+ÐÌðV7«üãÝ:&VEÏ–×»å&ŽÈ"wˤ\†éòâ&¤Iä” [w¼[9×Ë%´‰åÅb.XdW“€>»[9æõ0fŸ ®Î+J@rÕþBË×°jÛŒíPwÝa·=tØ®þb`�æp=T2w�![Â¥KÀH1gG ¤™°r–ØùG\ƒÀ¢�ye“äM‘[•鲊‚€EÞªÖãÁõº5BwÊI Q% *2FeÙ1±˜óî¥ÄçM.rýºÚDhÓÕ$®w+Oâý@á ŠLq0†Ñ•‡1sñ Ìš~¸2'/È(Ê�7#Ø[·�j'ŽfaæN.ï»�+[îCæ‰g 3Ó¢xªcJ “ÊâysÊ‹Ž ¾¡8|ÃÓB“¸&•—Ê.´}ÏLd, �¦³ÓÎGÈ'8Z�ƒÄ5·üÁĽ�Òƒ²ŠŒÞ”„½¶³5·,®æQv½@Ü=Òî™]XT%æ] Ø.Gñ€B|%÷Š…’¹p7{ކ�9\ÄTò¸x&¹L�;„­MÞf¹b+˜IGØR—·PŤÑÍLÙÿˆ­<»©¿=+@àƒ>K`¶Ïœò"äyBNZÃïðƒ‚¶ÒÎ WnÎFÚ´�í´1ÃM[/ ¶¾æh]R$B°L¸€ïqs·RC ”¬ö;±’ÑAYð’”, “KaŽù5ê‚„â#"˜H)ò¦ Ëå$ÂlKŽÙå…Ààq y½ˆ§ÐŽÒ*ô·>³沥̘}¬Î¥àé—ƒ3-|ßV€­‡i˜(�Q"'òÈÙ:Xöiȹºû)(On„¶gHx¡(èݦ$t8Àp9Å  ÒDÎÉ”R,±]V´à¸�!sŠrs9ÅA,ä\¾‘ét=UÝ¶Ø ˜ëàÎ ìe"äb‰nþ¶ÙÝ]ñçÖ5±B9‰ /Á±s1çþR@ñЙL$9ª#’0¹ÈË• hE—aRΖä˜\ /±œ´ÝA܉£xž.ŸV)�”’‘}ùNæ¹o+q� ¬5üs}r$–6dbÅs ï”@Þ®!(9 2iÚoHÂ3%òtI ­"› ,–ûN 0- šKä=À“Ëf0‘Íe;¤ÞK(~^RbR¹Àðƒ‡AZÄ�DÀu‹CqM*ƒÇ5Tˆ¥ØB[ ªãâµtFÊ£#c ïÔôN;ïº%`�95ØésßN.­19âõª’6¡à"ÅMÈì@é�ph–�€B¥×`&�â’yY— «P$‚³¸`1MG£,šgr)L€AÄå&B{Ø ´•Þð4‰{ÃP^4áó}c*õè1~R�€ oħ=t2©,Šmp¡!ªj Aàš‚ÒÙ5‡cùnÏÙèS¹ÐiŽ^7àç™Sù ßä†'òÉ£A‚s¬ x¦—ÇQ†F$h) ’É K2º,†¬"A1$ä\°î»à²„´Í„vñL,anÑo÷3G˜dbÑ3‚4ƫЅ; �ierñ›÷Y¼K¤%² yµÈtrA‘2m˜*¥‚Ø�94ÁA8tÒm6üÃ3¥¦ 0&?@Êš]bÅ+x»‚ÅŠšc�»IË8æ—Ü΄VÕ¤.öjŽáz¦*™R“SCƒDš]> x®á“(uÅÇSH«”‹äò2Ãd“�CŸ³º$C`ÉÚÎ{@ÖýÎÏ9HÒ…»Ì¹ Iù€�,ÄäÏóÒ2G:Ç1*ž1À‘v¿#@¤5JMç½+\ð [%S«2(Vmá¸(äN•áSS ùIV.½Ã5½Ä�Úô�—Яð¤Kêý`é#3Lgð´ Fê`¥ÇËC>ÐŒ�f0êjºïo?ˆ=­âýž‘9†Ý‚ïï6Ò .:Ž~ª7cÃâE€°4ŽÞ/ÑËz8Ö"ŽAÚ"Ÿ7•cj¤"PZ¥X^êe˜O±ˆ,C0ÂŒ"И ƒíL€fÐtÌ*Ò8Þ‹4 :ƒºÎý{ÐÑÞ‹4½:]0t»QÝ|-WCøñ€¹>ó©ZPL1�ˆ©ÁAB¦_Ñ×y ¿fñ›aT ¹Œ·�2¤\ÀìÊ2Ñ`ÐÝèy—û·Q�y¿ÁÐqsût» ¢d&Ñ‹øƒø[sÞ‰`ÏNs r}ó\>A¿‰ÌZ×|*щ¶¨4 @ÊI§°Ðõ'�¬{ɉ¯x€¡wÍ¡¼É/Àç+ä¡,Äý�q(\œ€"ö¨'‰-ª�‚AS8þjDq^g, Ÿì•€@u'`ˆ#áÐ2ñ¨®&¦èÅ‘Ài°\ 4X Nu @š"Ö¤ÒÉ"� “e$“~4E @š"Ö¤ÒÉ"� “e$“~4EÿîßôÛýÏhIEND®B`‚dde_calendar_sync_schedule_32px.svg000066400000000000000000000072501523260663500375160ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons icon/unionID/日程类型 dde_calendar_sync_setting_32px.svg000066400000000000000000000133371523260663500374020ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons icon/unionID/设置 dde_calendar_warning.svg000066400000000000000000000065321523260663500354610ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons deepin-cloudprint-config-helper Created with Sketch. dde_calendar_warning_light_32px.svg000066400000000000000000000051671523260663500375270ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons 形状结å�ˆ dde_calendar_xiu.svg000066400000000000000000000015021523260663500346110ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons 类型 Created with Sketch. 休 dde_calendar_yi_32px.svg000066400000000000000000000025111523260663500353020ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons icon_yi Created with Sketch. 宜 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/icons/icon_refresh.svg000066400000000000000000000035501523260663500340710ustar00rootroot00000000000000 路径 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/light/000077500000000000000000000000001523260663500306735ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/light/create_black.svg000066400000000000000000000017671523260663500340260ustar00rootroot00000000000000 编组 21 dde_calaendar_sidebar_32px.svg000066400000000000000000000024151523260663500364320ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/light 日历 dde_calendar_account_32px.svg000066400000000000000000000024451523260663500363170ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/builtin/light 账户- light linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/icon/000077500000000000000000000000001523260663500270465ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/resources/icon/account_dark.svg000066400000000000000000000024671523260663500322350ustar00rootroot00000000000000 账户- dark linuxdeepin-dde-calendar-f6d670a/src/calendar-client/assets/translate_generation.sh000066400000000000000000000003501523260663500306460ustar00rootroot00000000000000#!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com ts_list=(`ls translations/*.ts`) for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" done linuxdeepin-dde-calendar-f6d670a/src/calendar-client/config/000077500000000000000000000000001523260663500240475ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/config/dbus/000077500000000000000000000000001523260663500250045ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/config/dbus/ControlCenterAdaptor.cpp000066400000000000000000000015031523260663500316030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "ControlCenterAdaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class ControlCenterAdaptor */ ControlCenterAdaptor::ControlCenterAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } ControlCenterAdaptor::~ControlCenterAdaptor() { // destructor } void ControlCenterAdaptor::ShowPage(const QString &url) { // handle method call org.deepin.dde.ControlCenter1.ShowPage QMetaObject::invokeMethod(parent(), "ShowPage", Q_ARG(QString, url)); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/config/dbus/ControlCenterAdaptor.h000066400000000000000000000020711523260663500312510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef CONTROLCENTERADAPTOR_H #define CONTROLCENTERADAPTOR_H #include #include QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface org.deepin.dde.ControlCenter1 */ class ControlCenterAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.deepin.dde.ControlCenter1") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" "") public: ControlCenterAdaptor(QObject *parent); virtual ~ControlCenterAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS void ShowPage(const QString &url); Q_SIGNALS: // SIGNALS }; #endif linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/000077500000000000000000000000001523260663500233715ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/accessible/000077500000000000000000000000001523260663500254665ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/accessible/accessible.h000066400000000000000000000137331523260663500277430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCESSIBLE_H #define ACCESSIBLE_H #include "accessibledefine.h" #include "../widget/yearWidget/yearwindow.h" #include "../widget/monthWidget/monthwindow.h" #include "../widget/weekWidget/weekwindow.h" #include "../widget/dayWidget/daywindow.h" #include "../customWidget/scheduleRemindWidget.h" #include "../view/alldayeventview.h" #include "../view/monthgraphiview.h" #include "../view/graphicsview.h" #include "../customWidget/customframe.h" #include "../customWidget/animationstackedwidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE //using namespace DCC_NAMESPACE; SET_FORM_ACCESSIBLE(CYearWindow, "YearWidget"); SET_FORM_ACCESSIBLE(CMonthWindow, "MonthWidget"); SET_FORM_ACCESSIBLE(CWeekWindow, "WeekWidget"); SET_FORM_ACCESSIBLE(CDayWindow, "DayWidget"); SET_FORM_ACCESSIBLE(ScheduleRemindWidget, "ScheduleRemindWidget"); SET_FORM_ACCESSIBLE(CAllDayEventWeekView, "CAllDayEventWeekView"); SET_FORM_ACCESSIBLE(CMonthGraphicsview, "CMonthGraphicsview"); SET_FORM_ACCESSIBLE(CGraphicsView, "CGraphicsView"); SET_FORM_ACCESSIBLE(CustomFrame, "CustomFrame"); SET_FORM_ACCESSIBLE(AnimationStackedWidget, "AnimationStackedWidget"); // Qt控件 SET_FORM_ACCESSIBLE(QFrame, m_w->objectName().isEmpty() ? "frame" : m_w->objectName()) SET_FORM_ACCESSIBLE(QWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(QPushButton, m_w->text().isEmpty() ? "qpushbutton" : m_w->text()) SET_SLIDER_ACCESSIBLE(QSlider, "qslider") SET_FORM_ACCESSIBLE(QMenu, "qmenu") //SET_LABEL_ACCESSIBLE(QLabel, m_w->text().isEmpty() ? "qlabel" : m_w->text()) // Dtk控件 SET_FORM_ACCESSIBLE(DFrame, m_w->objectName().isEmpty() ? "frame" : m_w->objectName()) SET_FORM_ACCESSIBLE(DWidget, m_w->objectName().isEmpty() ? "widget" : m_w->objectName()) SET_FORM_ACCESSIBLE(DBackgroundGroup, m_w->objectName().isEmpty() ? "dbackgroundgroup" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DSwitchButton, m_w->text().isEmpty() ? "switchbutton" : m_w->text()) SET_BUTTON_ACCESSIBLE(DFloatingButton, m_w->toolTip().isEmpty() ? "DFloatingButton" : m_w->toolTip()) SET_FORM_ACCESSIBLE(DSearchEdit, m_w->objectName().isEmpty() ? "DSearchEdit" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DPushButton, m_w->objectName().isEmpty() ? "DPushButton" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DIconButton, m_w->objectName().isEmpty() ? "DIconButton" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DCheckBox, m_w->objectName().isEmpty() ? "DCheckBox" : m_w->objectName()) SET_BUTTON_ACCESSIBLE(DCommandLinkButton, "DCommandLinkButton") SET_FORM_ACCESSIBLE(DTitlebar, m_w->objectName().isEmpty() ? "DTitlebar" : m_w->objectName()) //SET_LABEL_ACCESSIBLE(DLabel, m_w->text().isEmpty() ? "DLabel" : m_w->text()) SET_BUTTON_ACCESSIBLE(DToolButton, m_w->objectName().isEmpty() ? "DToolButton" : m_w->objectName()) SET_FORM_ACCESSIBLE(DDialog, m_w->objectName().isEmpty() ? "DDialog" : m_w->objectName()) SET_FORM_ACCESSIBLE(DFileDialog, m_w->objectName().isEmpty() ? "DFileDialog" : m_w->objectName()) QAccessibleInterface *accessibleFactory(const QString &classname, QObject *object) { QAccessibleInterface *interface = nullptr; USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CYearWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CMonthWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CWeekWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CDayWindow); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), ScheduleRemindWidget); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CAllDayEventWeekView); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CMonthGraphicsview); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CGraphicsView); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), CustomFrame); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), AnimationStackedWidget); // Qt 控件 USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QFrame); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QWidget); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QPushButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QSlider); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QMenu); // USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), QLabel); // dtk 控件 USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFrame); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DWidget); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DBackgroundGroup); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DSwitchButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFloatingButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DSearchEdit); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DPushButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DIconButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DCheckBox); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DCommandLinkButton); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DTitlebar); // USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DLabel); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DDialog); USE_ACCESSIBLE(QString(classname).replace("dccV20::", ""), DFileDialog); return interface; } #endif // ACCESSIBLE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/accessible/accessibledefine.h000066400000000000000000000343351523260663500311170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCESSIBLEDEFINE_H #define ACCESSIBLEDEFINE_H #include #include #include #include #include #include #include #include #include #include #define SEPARATOR "_" inline QString getAccessibleName(QWidget *w, QAccessible::Role r, const QString &fallback) { const QString lowerFallback = fallback.toLower(); // é�¿å…�é‡�å¤�生æˆ� static QMap objnameMap; if (!objnameMap[w].isEmpty()) return objnameMap[w]; static QMap> accessibleMap; QString oldAccessName = w->accessibleName().toLower(); oldAccessName.replace(SEPARATOR, ""); // 按照类型添加固定å‰�ç¼€ QMetaEnum metaEnum = QMetaEnum::fromType(); QByteArray prefix = metaEnum.valueToKeys(r); switch (r) { case QAccessible::Form: prefix = "Form"; break; case QAccessible::Button: prefix = "Btn"; break; case QAccessible::StaticText: prefix = "Label"; break; case QAccessible::EditableText: prefix = "Editable"; break; case QAccessible::Slider: prefix = "Slider"; break; default: break; } // å†�加上标识 QString accessibleName = QString::fromLatin1(prefix) + SEPARATOR; accessibleName += oldAccessName.isEmpty() ? lowerFallback : oldAccessName; // 检查å��称是å�¦å”¯ä¸€ if (accessibleMap[r].contains(accessibleName)) { // 获å�–ç¼–å�·ï¼Œç„¶å�Ž+1 int pos = accessibleName.indexOf(SEPARATOR); int id = accessibleName.mid(pos + 1).toInt(); QString newAccessibleName; do { // 一直找到一个ä¸�é‡�å¤�çš„å��å­— newAccessibleName = accessibleName + SEPARATOR + QString::number(++id); } while (accessibleMap[r].contains(newAccessibleName)); accessibleMap[r].append(newAccessibleName); objnameMap.insert(w, newAccessibleName); QObject::connect(w, &QWidget::destroyed, [=](QObject *obj) { // 对象销æ¯�å�Žç§»é™¤å� ç”¨å��ç§° objnameMap.remove(obj); accessibleMap[r].removeOne(newAccessibleName); }); return newAccessibleName; } else { accessibleMap[r].append(accessibleName); objnameMap.insert(w, accessibleName); QObject::connect(w, &QWidget::destroyed, [=](QObject *obj) { // 对象销æ¯�å�Žç§»é™¤å� ç”¨å��ç§° objnameMap.remove(obj); accessibleMap[r].removeOne(accessibleName); }); return accessibleName; } } // 公共的功能 #define FUNC_CREATE(classname, accessibletype, accessdescription) \ explicit Accessible##classname(classname *w) \ : QAccessibleWidget(w, accessibletype, #classname) \ , m_w(w) \ , m_description(accessdescription) \ { \ } #define FUNC_TEXT(classname, accessiblename) \ QString Accessible##classname::text(QAccessible::Text t) const \ { \ switch (t) { \ case QAccessible::Name: \ return getAccessibleName(m_w, this->role(), accessiblename); \ case QAccessible::Description: \ return m_description; \ default: \ return QString(); \ } \ } // button控件特有功能 #define FUNC_ACTIONNAMES(classname) \ QStringList Accessible##classname::actionNames() const \ { \ if (!m_w->isEnabled()) \ return QStringList(); \ return QStringList() << pressAction() << showMenuAction(); \ } #define FUNC_DOACTION(classname) \ void Accessible##classname::doAction(const QString &actionName) \ { \ if (actionName == pressAction()) { \ QPointF localPos = m_w->geometry().center(); \ QMouseEvent event(QEvent::MouseButtonPress, localPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); \ qApp->sendEvent(m_w, &event); \ } else if (actionName == showMenuAction()) { \ QPointF localPos = m_w->geometry().center(); \ QMouseEvent event(QEvent::MouseButtonPress, localPos, Qt::RightButton, Qt::RightButton, Qt::NoModifier); \ qApp->sendEvent(m_w, &event); \ } \ } // Label控件特有功能 #define FUNC_TEXT_(classname) \ QString Accessible##classname::text(int startOffset, int endOffset) const \ { \ Q_UNUSED(startOffset) \ Q_UNUSED(endOffset) \ return m_w->text(); \ } // Slider控件特有功能 #define FUNC_CURRENTVALUE(classname) \ QVariant Accessible##classname::currentValue() const \ { \ return m_w->value(); \ } #define FUNC_SETCURRENTVALUE(classname) \ void Accessible##classname::setCurrentValue(const QVariant &value) \ { \ return m_w->setValue(value.toInt()); \ } #define FUNC_MAXMUMVALUE(classname) \ QVariant Accessible##classname::maximumValue() const \ { \ return QVariant(m_w->maximum()); \ } #define FUNC_FUNC_MINIMUMVALUE(classname) \ QVariant Accessible##classname::minimumValue() const \ { \ return QVariant(m_w->minimum()); \ } #define FUNC_FUNC_MINIMUMSTEPSIZE(classname) \ QVariant Accessible##classname::minimumStepSize() const \ { \ return QVariant(m_w->singleStep()); \ } #define SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ { \ public: \ FUNC_CREATE(classname, QAccessible::Form, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) #define SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ { \ public: \ FUNC_CREATE(classname, QAccessible::Button, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QStringList actionNames() const override; \ void doAction(const QString &actionName) override; \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_ACTIONNAMES(classname) \ FUNC_DOACTION(classname) #define SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ , public QAccessibleTextInterface \ { \ public: \ FUNC_CREATE(classname, QAccessible::StaticText, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ case QAccessible::TextInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QString text(int startOffset, int endOffset) const override; \ void selection(int selectionIndex, int *startOffset, int *endOffset) const override {} \ int selectionCount() const override { return 0; } \ void addSelection(int startOffset, int endOffset) override {} \ void removeSelection(int selectionIndex) override {} \ void setSelection(int selectionIndex, int startOffset, int endOffset) override {} \ int cursorPosition() const override { return 0; } \ void setCursorPosition(int position) override {} \ int characterCount() const override { return 0; } \ QRect characterRect(int offset) const override { return QRect(); } \ int offsetAtPoint(const QPoint &point) const override { return 0; } \ void scrollToSubstring(int startIndex, int endIndex) override {} \ QString attributes(int offset, int *startOffset, int *endOffset) const override { return QString(); } \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_TEXT_(classname) #define SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ , public QAccessibleValueInterface \ { \ public: \ FUNC_CREATE(classname, QAccessible::Slider, accessdescription) \ QString text(QAccessible::Text t) const override; \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ case QAccessible::ValueInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QVariant currentValue() const override; \ void setCurrentValue(const QVariant &value) override; \ QVariant maximumValue() const override; \ QVariant minimumValue() const override; \ QVariant minimumStepSize() const override; \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_CURRENTVALUE(classname) \ FUNC_SETCURRENTVALUE(classname) \ FUNC_MAXMUMVALUE(classname) \ FUNC_FUNC_MINIMUMVALUE(classname) \ FUNC_FUNC_MINIMUMSTEPSIZE(classname) #define SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, accessdescription) \ class Accessible##classname : public QAccessibleWidget \ , public QAccessibleEditableTextInterface \ , public QAccessibleTextInterface \ { \ public: \ FUNC_CREATE(classname, QAccessible::EditableText, accessdescription) \ QString text(QAccessible::Text t) const override; \ QAccessibleInterface *child(int index) const override { return nullptr; } \ void *interface_cast(QAccessible::InterfaceType t) override \ { \ switch (t) { \ case QAccessible::ActionInterface: \ return static_cast(this); \ case QAccessible::TextInterface: \ return static_cast(this); \ case QAccessible::EditableTextInterface: \ return static_cast(this); \ default: \ return nullptr; \ } \ } \ QString text(int startOffset, int endOffset) const override; \ void selection(int selectionIndex, int *startOffset, int *endOffset) const override {} \ int selectionCount() const override { return 0; } \ void addSelection(int startOffset, int endOffset) override {} \ void removeSelection(int selectionIndex) override {} \ void setSelection(int selectionIndex, int startOffset, int endOffset) override {} \ int cursorPosition() const override { return 0; } \ void setCursorPosition(int position) override {} \ int characterCount() const override { return 0; } \ QRect characterRect(int offset) const override { return QRect(); } \ int offsetAtPoint(const QPoint &point) const override { return 0; } \ void scrollToSubstring(int startIndex, int endIndex) override {} \ QString attributes(int offset, int *startOffset, int *endOffset) const override { return QString(); } \ void insertText(int offset, const QString &text) override {} \ void deleteText(int startOffset, int endOffset) override {}; \ void replaceText(int startOffset, int endOffset, const QString &text) override {} \ \ private: \ classname *m_w; \ QString m_description; \ }; \ FUNC_TEXT(classname, accessiblename) \ FUNC_TEXT_(classname) #define USE_ACCESSIBLE(classnamestring, classname) \ if (classnamestring == QLatin1String(#classname) && object && object->isWidgetType()) { \ interface = new Accessible##classname(static_cast(object)); \ } // [指定objectname]---适用å�Œä¸€ä¸ªç±»ï¼Œä½†objectnameä¸�å�Œçš„æƒ…况 #define USE_ACCESSIBLE_BY_OBJECTNAME(classnamestring, classname, objectname) \ if (classnamestring == QLatin1String(#classname) && object && (object->objectName() == objectname) && object->isWidgetType()) { \ interface = new Accessible##classname(static_cast(object)); \ } /*******************************************简化使用*******************************************/ #define SET_FORM_ACCESSIBLE(classname, accessiblename) SET_FORM_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_BUTTON_ACCESSIBLE(classname, accessiblename) SET_BUTTON_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_LABEL_ACCESSIBLE(classname, accessiblename) SET_LABEL_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_SLIDER_ACCESSIBLE(classname, accessiblename) SET_SLIDER_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_EDITABLE_ACCESSIBLE(classname, accessiblename) SET_EDITABLE_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") #define SET_PROGRESSBAR_ACCESSIBLE(classname, accessiblename) SET_PROGRESSBAR_ACCESSIBLE_WITH_DESCRIPTION(classname, accessiblename, "") /************************************************************************************************/ #endif // ACCESSIBLEDEFINE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/calendarglobalenv.cpp000066400000000000000000000045171523260663500275470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarglobalenv.h" #include "commondef.h" CalendarGlobalEnv *CalendarGlobalEnv::getGlobalEnv() { static CalendarGlobalEnv globalEnv; return &globalEnv; } CalendarGlobalEnv *CalendarGlobalEnv::operator->() const { return getGlobalEnv(); } //注册关键字 bool CalendarGlobalEnv::registerKey(const QString &key, const QVariant &variant) { qCDebug(ClientLogger) << "CalendarGlobalEnv::registerKey - Registering key:" << key; //如果ä¸�包å�«åˆ™æ·»åŠ  if (!m_GlobalEnv.contains(key)) { m_GlobalEnv[key] = variant; qCDebug(ClientLogger) << "Key registered successfully"; return true; } qCDebug(ClientLogger) << "Key already exists, registration failed"; return false; } //修改值 bool CalendarGlobalEnv::reviseValue(const QString &key, const QVariant &variant) { qCDebug(ClientLogger) << "CalendarGlobalEnv::reviseValue - Revising value for key:" << key; //如果包å�«ï¼Œåˆ™ä¿®æ”¹ if (m_GlobalEnv.contains(key)) { m_GlobalEnv[key] = variant; qCDebug(ClientLogger) << "Value revised successfully"; return true; } qCDebug(ClientLogger) << "Key not found, revision failed"; return false; } //移除注册的关键字 bool CalendarGlobalEnv::removeKey(const QString &key) { qCDebug(ClientLogger) << "CalendarGlobalEnv::removeKey - Removing key:" << key; //如果包å�«åˆ™ç§»é™¤ if (m_GlobalEnv.contains(key)) { m_GlobalEnv.remove(key); qCDebug(ClientLogger) << "Key removed successfully"; return true; } qCDebug(ClientLogger) << "Key not found, removal failed"; return false; } //æ ¹æ�®å…³é”®å­—获å�–对应的值 bool CalendarGlobalEnv::getValueByKey(const QString &key, QVariant &variant) { qCDebug(ClientLogger) << "CalendarGlobalEnv::getValueByKey - Getting value for key:" << key; if (m_GlobalEnv.contains(key)) { variant = m_GlobalEnv.value(key); qCDebug(ClientLogger) << "Value retrieved successfully"; return true; } qCDebug(ClientLogger) << "Key not found, retrieval failed"; return false; } CalendarGlobalEnv::CalendarGlobalEnv() : m_GlobalEnv{} { qCDebug(ClientLogger) << "CalendarGlobalEnv constructor initialized"; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/calendarglobalenv.h000066400000000000000000000037061523260663500272130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARGLOBALENV_H #define CALENDARGLOBALENV_H #include /** * @brief The CalendarGlobalEnv class 日历全局环境å�˜é‡�类,用æ�¥ä¿�存一些全局唯一的å�˜é‡� */ class CalendarGlobalEnv { public: /** * @brief getGlobalEnv * @return */ static CalendarGlobalEnv *getGlobalEnv(); CalendarGlobalEnv *operator->() const; /** * @brief registerKey 注册关键字 * @param key 关键字 * @param variant 值 * @return 是å�¦æˆ�功,若keyå·²ç»�被注册返回false,å�¦åˆ™è¿”回true */ bool registerKey(const QString &key, const QVariant &variant); /** * @brief reviseValue 修改值 * @param key 关键字 * @param variant 值 * @return 是å�¦æˆ�功,若key没有被注册则返回false,å�¦åˆ™è¿”回true */ bool reviseValue(const QString &key, const QVariant &variant); /** * @brief removeKey 移除注册的关键字 * @param key 关键字 * @return è‹¥key没有被注册则返回false,å�¦åˆ™è¿”回true */ bool removeKey(const QString &key); /** * @brief getValueByKey æ ¹æ�®å…³é”®å­—获å�–对应的值 * @param key 关键字 * @param variant 获å�–到的值 * @return è‹¥key没有被注册则返回false,å�¦åˆ™è¿”回true */ bool getValueByKey(const QString &key, QVariant &variant); private: CalendarGlobalEnv(); CalendarGlobalEnv(CalendarGlobalEnv &) = delete; CalendarGlobalEnv &operator=(const CalendarGlobalEnv &) = delete; private: QMap m_GlobalEnv; }; #endif // CALENDARGLOBALENV_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/configsettings.cpp000066400000000000000000000062621523260663500271310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "configsettings.h" #include "commondef.h" #include #include DCORE_USE_NAMESPACE; CConfigSettings::CConfigSettings() { qCDebug(ClientLogger) << "CConfigSettings constructor initialized"; init(); } CConfigSettings::~CConfigSettings() { qCDebug(ClientLogger) << "CConfigSettings destructor called"; releaseInstance(); } void CConfigSettings::init() { qCDebug(ClientLogger) << "CConfigSettings::init - Initializing settings"; //如果为空则创建 if (m_settings == nullptr) { auto configFilepath = DStandardPaths::standardLocations(QStandardPaths::AppConfigLocation).value(0) + "/config.ini"; qCDebug(ClientLogger) << "Creating settings with config file:" << configFilepath; m_settings = new QSettings(configFilepath, QSettings::IniFormat); } initSetting(); } void CConfigSettings::initSetting() { qCDebug(ClientLogger) << "CConfigSettings::initSetting - Loading initial settings"; m_userSidebarStatus = value("userSidebarStatus", true).toBool(); } /** * @brief CConfigSettings::releaseInstance 释放é…�置指针 */ void CConfigSettings::releaseInstance() { qCDebug(ClientLogger) << "CConfigSettings::releaseInstance - Releasing settings instance"; delete m_settings; m_settings = nullptr; } CConfigSettings *CConfigSettings::getInstance() { static CConfigSettings configSettings; return &configSettings; } void CConfigSettings::sync() { // qCDebug(ClientLogger) << "CConfigSettings::sync - Syncing settings to disk"; m_settings->sync(); } QVariant CConfigSettings::value(const QString &key, const QVariant &defaultValue) { QVariant result = m_settings->value(key, defaultValue); // qCDebug(ClientLogger) << "CConfigSettings::value - Getting value for key:" << key << "Result:" << result; return result; } //设置对应key的值 void CConfigSettings::setOption(const QString &key, const QVariant &value) { // qCDebug(ClientLogger) << "CConfigSettings::setOption - Setting key:" << key << "to value:" << value; m_settings->setValue(key, value); } //移除对应的é…�置信æ�¯ void CConfigSettings::remove(const QString &key) { // qCDebug(ClientLogger) << "CConfigSettings::remove - Removing key:" << key; m_settings->remove(key); } //判断是å�¦åŒ…å�«å¯¹åº”çš„key bool CConfigSettings::contains(const QString &key) const { bool result = m_settings->contains(key); // qCDebug(ClientLogger) << "CConfigSettings::contains - Checking if contains key:" << key << "Result:" << result; return result; } CConfigSettings *CConfigSettings::operator->() const { return getInstance(); } bool CConfigSettings::getUserSidebarStatus() { // qCDebug(ClientLogger) << "CConfigSettings::getUserSidebarStatus - Current status:" << m_userSidebarStatus; return m_userSidebarStatus; } void CConfigSettings::setUserSidebarStatus(bool status) { // qCDebug(ClientLogger) << "CConfigSettings::setUserSidebarStatus - Setting status to:" << status; m_userSidebarStatus = status; setOption("userSidebarStatus", m_userSidebarStatus); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/configsettings.h000066400000000000000000000030231523260663500265660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2016 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CCONFIGSETTINGS_H #define CCONFIGSETTINGS_H #include #include class CConfigSettings : QObject { Q_OBJECT public: static CConfigSettings *getInstance(); void sync(); /** * @brief value æ ¹æ�®key获å�–对应值 * @param key 对应的key * @return */ QVariant value(const QString &key, const QVariant &defaultValue = QVariant()); /** * @brief setOption 设置对应key的值 * @param key * @param value */ void setOption(const QString &key, const QVariant &value); /** * @brief remove 移除对应的é…�置信æ�¯ * @param key */ void remove(const QString &key); /** * @brief contains 判断是å�¦åŒ…å�«å¯¹åº”çš„key * @param key * @return */ bool contains(const QString &key) const; CConfigSettings *operator->() const ; void initSetting(); //å¸�户侧边æ �显示状æ€� bool getUserSidebarStatus(); void setUserSidebarStatus(bool); signals: void signalFirstDayOfWeekChange(); public slots: protected: CConfigSettings(); ~CConfigSettings(); void init(); //释放é…�置指针 void releaseInstance(); private: QPointer m_settings; bool m_userSidebarStatus = true; //å¸�户侧边æ �显示状æ€� }; #define gSetting CConfigSettings::getInstance() #endif // CCONFIGSETTINGS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/constants.h000066400000000000000000000114741523260663500255650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CONSTANTS_H #define CONSTANTS_H #include namespace DDECalendar { //光标å��标关键字 const QString CursorPointKey = "CursorPoint"; static const int HeaderItemWidth = 80; static const int HeaderItemHeight = 40; static const int CellWidth = 106; static const int CellHeight = 70; static const int CellHighlightWidth = 80; static const int CellHighlightHeight = 70; static const int QueryEarliestYear = 1900; static const int QueryLatestYear = 2100; static const int FestivalTypeID = 4; static const int FontSizeEleven = 11; static const int FontSizeTwelve = 12; static const int FontSizeFourteen = 14; static const int FontSizeSixteen = 16; static const int FontSizeTwentyfour = 24; static const int FontSizeTwenty = 20; static const int FontSizeTen = 10; static const int FontSizeOneHundred = 100; static const int CalendarYearWindow = 0; static const int CalendarMonthWindow = 1; static const int CalendarWeekWindow = 2; static const int CalendarDayWindow = 3; static const int ThirtyMinutesWithSec = 1800; static const int AtTimeOfEvent = 0; static const int OnStartDay = 0; static const int FifteenMinutesBefore = 15; static const int ThirtyMinutesBefore = 30; static const int OneHourBefore = 60; static const int OneDayBeforeWithDay = 1; static const int OneDayBeforeWithMinutes = 1440; static const int TwoDayBeforeWithDay = 2; static const int TwoDayBeforeWithMinutes = 2880; static const int OneWeekBeforeWithDay = 7; static const int OneWeekBeforeWithMinutes = 10080; static const int NewScheduleLabelWidth = 70; static const int QuarterOfAnhourWithMinute = 15; } // namespace DDECalendar namespace DDEYearCalendar { static const int RectSizeOfEveryMonth = 42; static const int FrameSizeOfEveryYear = 12; static const int YearScheduleListMaxcount = 5; static const int YHeaderItemWidth = 20; static const int YHeaderItemHeight = 16; static const int YCellWidth = 26; static const int YCellHeight = 20; static const int YCellHighlightWidth = 26; static const int YCellHighlightHeight = 20; static const int Y_MLabelHeight = 36; static const int Y_YLabelHeight = 45; static const int Y_MWindowWidth = 202; static const int Y_MWindowHeight = 159; } // namespace DDEYearCalendar namespace DDEMonthCalendar { static const int ItemSizeOfMonthDay = 42; static const int AFewDaysOfWeek = 7; static const int LinesNumOfMonth = 6; static const int MonthNumOfYear = 12; static const int MHeaderItemWidth = 60; static const int MHeaderItemHeight = 33; static const int MEventsItemHeight = 36; static const int MCellWidth = 120; static const int MCellHeight = 74; static const int MCellHighlightWidth = 120; static const int MCellHighlightHeight = 74; static const int MWeekCellWidth = 120; static const int MWeekCellHeight = 54; static const int MDayCellWidth = 36; static const int MDayCellHeight = 36; static const int M_YTopHeight = 66; static const int M_YLabelHeight = 36; static const int M_YLunaLabelWindth = 66; static const int M_YLunaLabelHeight = 20; static const int MTodayWindth = 100; static const int MTodayHeight = 36; static const int M_MWindowWidth = 202; static const int M_MWindowHeight = 162; } namespace DDEWeekCalendar { static const int FirstDayOfWeekend = 6; static const int AFewDaysofWeek = 7; static const int NumWeeksDisplayed = 10; static const int WCellHeaderItemWidth = 109; static const int WCellHeaderItemHeight = 54; static const int WMCellHeaderWidth = 80; static const int MCellHighlightWidth = 120; static const int MCellHighlightHeight = 74; static const int WWeekCellWidth = 36; static const int WWeekCellHeight = 36; static const int W_YLabelHeight = 36; static const int W_YLunatLabelWindth = 66; static const int W_YLunatLabelHeight = 20; static const int WTodayWindth = 100; static const int WTodayHeight = 36; static const int W_MWindowWidth = 202; static const int W_MWindowHeight = 162; } namespace DDEDayCalendar { static const int PainterCellNum = 42; static const int DCellWidth = 35; static const int DCellHeight = 28; static const int DCellHighlightWidth = 33; static const int DCellHighlightHeight = 26; static const int D_MLabelHeight = 36; static const int D_YLabelHeight = 36; static const int DDLabelHeight = 117; static const int DWLabelHeight = 22; static const int DHuangLiInfoLabelHeight = 17; static const int DHuangLiLabelHeight = 56; static const int DHuangLiLabelMaxHeight = 96; static const int DHuangLiLabelWidth = 330; static const int D_MWindowWidth = 350; static const int D_MWindowHeight = 564; } namespace DARROWRECT { //æ��示框圆角 static const int DRADIUS = 10; } // namespace DARROWRECT enum Week { Monday = 6, Tuesday = 5, Wednesday = 4, Thursday = 3, Friday = 2, Saturday = 1, Sunday = 0, }; #endif // CONSTANTS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/000077500000000000000000000000001523260663500260475ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/animationstackedwidget.cpp000066400000000000000000000270651523260663500333070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "animationstackedwidget.h" #include "commondef.h" #include #include AnimationStackedWidget::AnimationStackedWidget(const AnimationOri ori, QWidget *parent) : QStackedWidget(parent) , m_animationOri(ori) , m_Animation(new QPropertyAnimation(this, "offset", this)) { qCDebug(ClientLogger) << "AnimationStackedWidget constructor initialized with orientation:" << ori; setDuration(1000); connect(m_Animation, &QPropertyAnimation::finished, this, &AnimationStackedWidget::animationFinished); } AnimationStackedWidget::~AnimationStackedWidget() { qCDebug(ClientLogger) << "AnimationStackedWidget destructor called"; delete m_Animation; } /** * @brief setDuration 设置动画æŒ�ç»­æ—¶é—´ * @param duration 动画时间 */ void AnimationStackedWidget::setDuration(int duration) { qCDebug(ClientLogger) << "Setting animation duration to:" << duration << "ms"; m_Duration = duration; m_Animation->setEasingCurve(QEasingCurve::InOutQuad); } /** * @brief paintEvent 窗å�£ç»˜åˆ¶äº‹ä»¶ * @param e 绘制事件 */ void AnimationStackedWidget::paintEvent(QPaintEvent *e) { Q_UNUSED(e); if (m_IsAnimation) { QPainter paint(this); paintCurrentWidget(paint, currentIndex()); paintNextWidget(paint, m_NextIndex); } } void AnimationStackedWidget::mouseMoveEvent(QMouseEvent *e) { Q_UNUSED(e); } /** * @brief animationFinished 动画切æ�¢å®Œæˆ� */ void AnimationStackedWidget::animationFinished() { qCDebug(ClientLogger) << "Animation finished, current index:" << currentIndex() << "next index:" << m_NextIndex; m_IsAnimation = false; setCurrentIndex(m_NextIndex); //如果有需è¦�跳转的页é�¢ if (m_nextGotoIndex != -1) { qCDebug(ClientLogger) << "Queued animation to index:" << m_nextGotoIndex; setCurrent(m_nextGotoIndex); m_nextGotoIndex = -1; return; } emit signalIsFinished(); } /** * @brief setCurrent 设置当å‰�窗å�£ * @param index 索引 */ void AnimationStackedWidget::setCurrent(int index) { //设置移动方å�‘ m_moveOri = getMoveOrientation(currentIndex(), index); setCurrentWidget(index, getBeginValue()); } /** * @brief AnimationStackedWidget::setPre设置上一个索引的窗å�£ */ void AnimationStackedWidget::setPre() { qCDebug(ClientLogger) << "AnimationStackedWidget::setPre - Setting previous widget"; //获å�–堆窗å�£æ•° const int count = this->count(); switch (m_animationOri) { case LR: { m_moveOri = LeftToRight; qCDebug(ClientLogger) << "Animation direction: LeftToRight"; } break; case TB: { m_moveOri = TopToBottom; qCDebug(ClientLogger) << "Animation direction: TopToBottom"; } break; } //获å�–下一个窗å�£ç¼–å�· int nextIndex = currentIndex() - 1; if (nextIndex < 0) { nextIndex = nextIndex + count; } qCDebug(ClientLogger) << "Current index:" << currentIndex() << "Next index:" << nextIndex; setCurrentWidget(nextIndex, getBeginValue()); } /** * @brief setNext 设置下一个索引的窗å�£ */ void AnimationStackedWidget::setNext() { qCDebug(ClientLogger) << "AnimationStackedWidget::setNext - Setting next widget"; //获å�–堆窗å�£æ•° const int count = this->count(); switch (m_animationOri) { case LR: { m_moveOri = RightToLeft; qCDebug(ClientLogger) << "Animation direction: RightToLeft"; } break; case TB: { m_moveOri = BottomToTop; qCDebug(ClientLogger) << "Animation direction: BottomToTop"; } break; } //获å�–下一个窗å�£ç¼–å�· int nextIndex = (currentIndex() + 1) % count; qCDebug(ClientLogger) << "Current index:" << currentIndex() << "Next index:" << nextIndex; setCurrentWidget(nextIndex, getBeginValue()); } /** * @brief setCurrentWidget æ ¹æ�®ç´¢å¼•设置当å‰�窗å�£ï¼Œå¼€å�¯åŠ¨ç”»ç»˜åˆ¶ * @param index 索引 * @param beginWidth 动画起始值 */ void AnimationStackedWidget::setCurrentWidget(int &index, int beginWidth) { qCDebug(ClientLogger) << "AnimationStackedWidget::setCurrentWidget - Setting widget index:" << index << "with begin width:" << beginWidth; //如果正在动画,那么退出 if (m_IsAnimation) { qCDebug(ClientLogger) << "Animation in progress, queueing index:" << index; m_nextGotoIndex = index; return; } //如果索引为当å‰�索引则退出 if (index == currentIndex()) { qCDebug(ClientLogger) << "Requested index is same as current:" << index; emit signalIsFinished(); return; } m_IsAnimation = true; m_NextIndex = index; //éš�è—�当å‰�çš„widget this->widget(currentIndex())->hide(); m_Animation->setStartValue(beginWidth); m_Animation->setEndValue(0); m_Animation->setDuration(m_Duration); qCDebug(ClientLogger) << "Starting animation from" << beginWidth << "to 0 with duration:" << m_Duration; m_Animation->start(); } /** * @brief getBeginValue 获å�–动画起始值 * @return 返回动画起始值 */ int AnimationStackedWidget::getBeginValue() { // qCDebug(ClientLogger) << "AnimationStackedWidget::getBeginValue - Getting begin value"; //存储窗å�£é«˜åº¦æˆ–宽度 int value {0}; //获å�–窗å�£çŸ©é˜µ QRect widgetRect = this->rect(); switch (m_animationOri) { case LR: { value = widgetRect.width(); } break; case TB: { value = widgetRect.height(); } } return value; } /** * @brief getMoveOrientation æ ¹æ�®å½“å‰�索引和下一个索引获å�–动画方å�‘ * @param currIndex 当å‰�索引 * @param nextIndex 设置的索引 * @return 动画绘制方å�‘ */ AnimationStackedWidget::MoveOrientation AnimationStackedWidget::getMoveOrientation(const int currIndex, const int nextIndex) { qCDebug(ClientLogger) << "AnimationStackedWidget::getMoveOrientation - Current index:" << currIndex << "Next index:" << nextIndex; MoveOrientation moveOri{LeftToRight}; if (nextIndex < currIndex) { switch (m_animationOri) { case LR: { moveOri = LeftToRight; qCDebug(ClientLogger) << "Selected orientation: LeftToRight"; } break; case TB: { moveOri = TopToBottom; qCDebug(ClientLogger) << "Selected orientation: TopToBottom"; } break; } } else if (nextIndex > currIndex) { switch (m_animationOri) { case LR: { moveOri = RightToLeft; qCDebug(ClientLogger) << "Selected orientation: RightToLeft"; } break; case TB: { moveOri = BottomToTop; qCDebug(ClientLogger) << "Selected orientation: BottomToTop"; } break; } } return moveOri; } /** * @brief paintCurrentWidget 获å�–当å‰�窗å�£çš„图片动æ€�绘制 * @param paint 绘制对象 * @param nextIndex 窗å�£ç´¢å¼• */ void AnimationStackedWidget::paintCurrentWidget(QPainter &paint, int currentIndex) { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintCurrentWidget - Painting current widget"; //获得当å‰�页é�¢çš„Widget QWidget *currentWidget = widget(currentIndex); QPixmap currentPixmap(currentWidget->size()); //将当å‰�窗å�£ç»˜åˆ¶åˆ°pixmap中 currentWidget->render(¤tPixmap); QRect widgetRect = this->rect(); //绘制当å‰�çš„Widget double value = m_offset; //窗å�£å®½åº¦ const int widgetWidth = widgetRect.width(); //窗å�£é«˜åº¦ const int widgetHeight = widgetRect.height(); QRectF targetRect; QRectF sourceRect; switch (m_moveOri) { case LeftToRight: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintCurrentWidget - Painting current widget"; targetRect = QRectF(widgetWidth - value, 0, value, widgetHeight); sourceRect = QRectF(0.0, 0.0, value, widgetHeight); } break; case RightToLeft: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintCurrentWidget - Painting current widget"; targetRect = QRectF(0.0, 0.0, value, widgetHeight); sourceRect = QRectF(widgetWidth - value, 0, value, widgetHeight); } break; case TopToBottom: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintCurrentWidget - Painting current widget"; targetRect = QRectF(0.0, widgetHeight - value, widgetWidth, value); sourceRect = QRectF(0.0, 0.0, widgetWidth, value); } break; case BottomToTop: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintCurrentWidget - Painting current widget"; targetRect = QRectF(0.0, 0.0, widgetWidth, value); sourceRect = QRectF(0, widgetHeight - value, widgetWidth, value); } } paint.drawPixmap(targetRect, currentPixmap, sourceRect); } /** * @brief paintNextWidget 获å�–下一个窗å�£çš„图片动æ€�绘制 * @param paint 绘制对象 * @param nextIndex 窗å�£ç´¢å¼• */ void AnimationStackedWidget::paintNextWidget(QPainter &paint, int nextIndex) { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintNextWidget - Painting next widget"; QWidget *nextWidget = widget(nextIndex); QRect widgetRect = this->rect(); //设置下一个窗å�£çš„大å°� nextWidget->resize(widgetRect.width(), widgetRect.height()); QPixmap nextPixmap(nextWidget->size()); nextWidget->render(&nextPixmap); double value = m_offset; //窗å�£å®½åº¦ const int widgetWidth = widgetRect.width(); //窗å�£é«˜åº¦ const int widgetHeight = widgetRect.height(); QRectF targetRect; QRectF sourceRect; switch (m_moveOri) { case LeftToRight: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintNextWidget - Painting next widget"; targetRect = QRectF(0.0, 0.0, widgetWidth - value, widgetHeight); sourceRect = QRectF(value, 0.0, widgetWidth - value, widgetHeight); } break; case RightToLeft: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintNextWidget - Painting next widget"; targetRect = QRectF(value, 0.0, widgetWidth - value, widgetHeight); sourceRect = QRectF(0.0, 0.0, widgetWidth - value, widgetHeight); } break; case TopToBottom: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintNextWidget - Painting next widget"; targetRect = QRectF(0.0, 0.0, widgetWidth, widgetHeight - value); sourceRect = QRectF(0.0, value, widgetWidth, widgetHeight - value); } break; case BottomToTop: { // qCDebug(ClientLogger) << "AnimationStackedWidget::paintNextWidget - Painting next widget"; targetRect = QRectF(0.0, value, widgetWidth, widgetHeight - value); sourceRect = QRectF(0.0, 0.0, widgetWidth, widgetHeight - value); } } paint.drawPixmap(targetRect, nextPixmap, sourceRect); } /** * @brief offset 获å�–移动å��ç§»é‡� * @return 移动å��ç§»é‡� */ double AnimationStackedWidget::offset() const { // qCDebug(ClientLogger) << "AnimationStackedWidget::offset - Getting offset"; return m_offset; } /** * @brief setOffset 设置移动å��ç§»é‡� * @param offset 移动å��ç§»é‡� */ void AnimationStackedWidget::setOffset(double offset) { // qCDebug(ClientLogger) << "AnimationStackedWidget::setOffset - Setting offset to:" << offset; m_offset = offset; update(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/animationstackedwidget.h000066400000000000000000000057201523260663500327460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef AnimationStackedWidget_H #define AnimationStackedWidget_H #include #include #include /** * @brief The AnimationStackedWidget class * 动画切æ�¢ç•Œé�¢ */ class AnimationStackedWidget : public QStackedWidget { Q_OBJECT Q_PROPERTY(double offset READ offset WRITE setOffset) public: enum MoveOrientation {LeftToRight, RightToLeft, TopToBottom, BottomToTop}; enum AnimationOri {LR, TB}; //LR:Left Right ,TB:Top Bottom public: explicit AnimationStackedWidget(const AnimationOri ori = LR, QWidget *parent = nullptr); ~AnimationStackedWidget() override; //设置动画æŒ�ç»­æ—¶é—´ void setDuration(int duration = 500); /** * @brief IsRunning 动画是å�¦æ­£åœ¨è¿�行 * @return 动画师傅正在è¿�行 */ bool IsRunning()const { return m_IsAnimation; } //获å�–移动å��ç§»é‡� double offset() const; //设置移动å��ç§»é‡� void setOffset(double offset); protected: //窗å�£ç»˜åˆ¶äº‹ä»¶ void paintEvent(QPaintEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; signals: /** * @brief signalIsFinished 动画结æ�Ÿä¿¡å�· */ void signalIsFinished(); public slots: //动画切æ�¢å®Œæˆ� void animationFinished(); //设置当å‰�窗å�£ void setCurrent(int index); //setPre设置上一个索引的窗å�£ void setPre(); //设置下一个索引的窗å�£ void setNext(); private: //æ ¹æ�®ç´¢å¼•设置当å‰�窗å�£ï¼Œå¼€å�¯åŠ¨ç”»ç»˜åˆ¶ void setCurrentWidget(int &index, int beginWidth); //获å�–动画起始值 int getBeginValue(); //æ ¹æ�®å½“å‰�索引和下一个索引获å�–动画方å�‘ MoveOrientation getMoveOrientation(const int currIndex, const int nextIndex); //获å�–当å‰�窗å�£çš„图片动æ€�绘制 void paintCurrentWidget(QPainter &paint, int currentIndex); //获å�–下一个窗å�£çš„图片动æ€�绘制 void paintNextWidget(QPainter &paint, int nextIndex); private: /** * @brief m_animationOri 动画方å�‘--å·¦å�³è¿˜æ˜¯ä¸Šä¸‹ */ AnimationOri m_animationOri{LR}; /** * @brief m_Animation 动画对象 */ QPropertyAnimation *m_Animation = nullptr; /** * @brief m_Duration 动画时间(ms) */ int m_Duration{0}; /** * @brief m_IsAnimation 是å�¦ä¸ºåŠ¨ç”»çŠ¶æ€� */ bool m_IsAnimation = false; /** * @brief m_offset 移动å��ç§»é‡� */ double m_offset = 0; /** * @brief paintNext */ int m_WidgetCount{0}; /** * @brief m_NextIndex 下一个索引 */ int m_NextIndex{0}; /** * @brief m_moveOri 移动方å�‘ */ MoveOrientation m_moveOri = MoveOrientation::LeftToRight; int m_nextGotoIndex = -1; //在动画过程中,下次需è¦�跳转的页é�¢ }; #endif // AnimationStackedWidget_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cbuttonbox.cpp000066400000000000000000000026061523260663500307460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cbuttonbox.h" #include "commondef.h" #include CButtonBox::CButtonBox(QWidget *parent) : DButtonBox(parent) { // qCDebug(ClientLogger) << "CButtonBox constructor initialized"; //设置接å�—tab焦点切æ�¢ this->setFocusPolicy(Qt::TabFocus); } void CButtonBox::focusInEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CButtonBox::focusInEvent - Focus reason:" << event->reason(); DButtonBox::focusInEvent(event); //窗å�£æ¿€æ´»æ—¶ï¼Œä¸�设置Button焦点显示 if (event->reason() != Qt::ActiveWindowFocusReason) { // qCDebug(ClientLogger) << "Setting focus to button with checked ID:" << checkedId(); //设置当å‰�选中项为焦点 this->button(checkedId())->setFocus(); } } void CButtonBox::focusOutEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CButtonBox::focusOutEvent - Focus reason:" << event->reason(); DButtonBox::focusOutEvent(event); //当tab离开当å‰�buttonbox窗å�£æ—¶ï¼Œè®¾ç½®é€‰ä¸­é¡¹ä¸ºç„¦ç‚¹ if (event->reason() == Qt::TabFocusReason) { // qCDebug(ClientLogger) << "TabFocusReason, setting focus to button with checked ID:" << checkedId(); //设置当å‰�选中项为焦点 this->button(checkedId())->setFocus(); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cbuttonbox.h000066400000000000000000000007621523260663500304140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CBUTTONBOX_H #define CBUTTONBOX_H #include DWIDGET_USE_NAMESPACE class CButtonBox : public DButtonBox { Q_OBJECT public: explicit CButtonBox(QWidget *parent = nullptr); protected: void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; signals: public slots: }; #endif // CBUTTONBOX_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/ccustomtimeedit.cpp000066400000000000000000000052411523260663500317570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ccustomtimeedit.h" #include "commondef.h" #include #include #include CCustomTimeEdit::CCustomTimeEdit(QWidget *parent) : QTimeEdit(parent) { qCDebug(ClientLogger) << "CCustomTimeEdit constructor initialized"; //设置edit最大宽度,ä¸�å½±å“�其他控件使用 setMaximumWidth(80); setButtonSymbols(QTimeEdit::NoButtons); } /** * @brief CCustomTimeEdit::getLineEdit 获å�–编辑框 * @return */ QLineEdit *CCustomTimeEdit::getLineEdit() { // qCDebug(ClientLogger) << "CCustomTimeEdit::getLineEdit - Returning line edit"; return lineEdit(); } void CCustomTimeEdit::focusInEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CCustomTimeEdit::focusInEvent - Focus reason:" << event->reason(); QTimeEdit::focusInEvent(event); emit signalUpdateFocus(true); } void CCustomTimeEdit::focusOutEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CCustomTimeEdit::focusOutEvent - Focus reason:" << event->reason(); QTimeEdit::focusOutEvent(event); emit signalUpdateFocus(false); } void CCustomTimeEdit::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CCustomTimeEdit::mousePressEvent - Position:" << event->pos(); //设置父类widget焦点 if (parentWidget() != nullptr) { // qCDebug(ClientLogger) << "Setting focus to parent widget"; parentWidget()->setFocus(Qt::TabFocusReason); } //设置点击ä½�置的光标 lineEdit()->setCursorPosition(lineEdit()->cursorPositionAt(event->pos())); QAbstractSpinBox::mousePressEvent(event); } void CCustomTimeEdit::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "CCustomTimeEdit::keyPressEvent - Key:" << event->key(); QTimeEdit::keyPressEvent(event); //鼠标左å�³é”®,切æ�¢å…‰æ ‡ä½�ç½® if (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right) { // qCDebug(ClientLogger) << "Left/Right key pressed, setting focus to parent and updating cursor position"; if (parentWidget() != nullptr) { parentWidget()->setFocus(Qt::TabFocusReason); } lineEdit()->setCursorPosition(currentSectionIndex()); } } void CCustomTimeEdit::mouseDoubleClickEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CCustomTimeEdit::mouseDoubleClickEvent - Position:" << event->pos(); QTimeEdit::mouseDoubleClickEvent(event); //é¼ æ ‡å�Œå‡»,选中section // qCDebug(ClientLogger) << "Double click detected, selecting section:" << currentSection(); setSelectedSection(currentSection()); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/ccustomtimeedit.h000066400000000000000000000014311523260663500314210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CCUSTOMTIMEEDIT_H #define CCUSTOMTIMEEDIT_H #include /** * @brief The CCustomTimeEdit class */ class CCustomTimeEdit : public QTimeEdit { Q_OBJECT public: explicit CCustomTimeEdit(QWidget *parent = nullptr); //获å�–编辑框 QLineEdit *getLineEdit(); protected: void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; signals: void signalUpdateFocus(bool showFocus); }; #endif // CCUSTOMTIMEEDIT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cdateedit.cpp000066400000000000000000000256621523260663500305140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdateedit.h" #include "lunarcalendarwidget.h" #include "lunarmanager.h" #include "commondef.h" #include #include #include CDateEdit::CDateEdit(QWidget *parent) : QDateEdit(parent) { qCDebug(ClientLogger) << "Creating CDateEdit widget"; connect(this, &QDateEdit::userDateChanged, this, &CDateEdit::slotDateEidtInfo); connect(lineEdit(), &QLineEdit::textChanged, this, &CDateEdit::slotRefreshLineEditTextFormat); connect(lineEdit(), &QLineEdit::cursorPositionChanged, this, &CDateEdit::slotCursorPositionChanged); connect(lineEdit(), &QLineEdit::selectionChanged, this, &CDateEdit::slotSelectionChanged); connect(lineEdit(), &QLineEdit::editingFinished, this, [this]() { qCDebug(ClientLogger) << "Date edit finished, refreshing text format"; //监å�¬å®Œæˆ�输入信å�·ï¼Œè§¦å�‘文本改å�˜äº‹ä»¶ï¼Œä¿�è¯�退出文本编辑的情况下ä¾�旧能刷新文本样å¼� //当é�žæ‰‹åŠ¨è¾“å…¥æ—¶é—´æ—¶ä¸�会触å�‘文本改å�˜ä¿¡å�· slotRefreshLineEditTextFormat(text()); }); } void CDateEdit::setDate(QDate date) { qCDebug(ClientLogger) << "CDateEdit::setDate - Setting date to:" << date; QDateEdit::setDate(date); //å�ªæœ‰åœ¨å†œåŽ†æ—¥ç¨‹æ—¶ï¼Œæ‰�需è¦�获å�–农历信æ�¯ QString dtFormat = m_showLunarCalendar ? m_format + getLunarName(date) : m_format; m_strCurrrentDate = date.toString(dtFormat); qCDebug(ClientLogger) << "Updated current date string:" << m_strCurrrentDate; } void CDateEdit::setDisplayFormat(QString format) { qCDebug(ClientLogger) << "Setting display format to:" << format; this->m_format = format; //刷新时间显示信æ�¯ slotDateEidtInfo(date()); } QString CDateEdit::displayFormat() { qCDebug(ClientLogger) << "CDateEdit::displayFormat - Returning format:" << m_format; return m_format; } void CDateEdit::setLunarCalendarStatus(bool status) { qCDebug(ClientLogger) << "Setting lunar calendar status to:" << status; m_showLunarCalendar = status; //刷新时间显示信æ�¯ slotDateEidtInfo(date()); //更新日历显示类型 updateCalendarWidget(); } void CDateEdit::setLunarTextFormat(QTextCharFormat format) { qCDebug(ClientLogger) << "CDateEdit::setLunarTextFormat - Setting lunar text format"; m_lunarTextFormat = format; //刷新文本样å¼� slotRefreshLineEditTextFormat(text()); } QTextCharFormat CDateEdit::getsetLunarTextFormat() { // qCDebug(ClientLogger) << "CDateEdit::getsetLunarTextFormat - Returning lunar text format"; return m_lunarTextFormat; } void CDateEdit::setCalendarPopup(bool enable) { qCDebug(ClientLogger) << "Setting calendar popup to:" << enable; QDateEdit::setCalendarPopup(enable); //更新日历显示类型 updateCalendarWidget(); } void CDateEdit::slotDateEidtInfo(const QDate &date) { qCDebug(ClientLogger) << "CDateEdit::slotDateEidtInfo - Setting date edit info for date:" << date; QString format = m_format; if (m_showLunarCalendar) { qCDebug(ClientLogger) << "CDateEdit::slotDateEidtInfo - Showing lunar calendar"; if (!showGongli()) { qCDebug(ClientLogger) << "Hiding Gregorian calendar due to space constraints"; format = "yyyy/"; } m_lunarName = getLunarName(date); format += m_lunarName; qCDebug(ClientLogger) << "Updated lunar calendar format:" << format << "lunar name:" << m_lunarName; } //当当å‰�显示格å¼�与应该显示格å¼�一致时ä¸�å†�é‡�新设置 if (QDateEdit::displayFormat() == format) { qCDebug(ClientLogger) << "Display format unchanged, skipping update"; return; } //记录刷新格å¼�å‰�的状æ€� bool hasSelected = lineEdit()->hasSelectedText(); //是å�¦é€‰æ‹©çжæ€� int cPos = 0; QDateTimeEdit::Section section = QDateTimeEdit::NoSection; if (hasSelected) { section = currentSection(); //选择节 qCDebug(ClientLogger) << "Preserving selection state, section:" << section; } else { cPos = lineEdit()->cursorPosition(); //光标所在ä½�ç½® qCDebug(ClientLogger) << "Preserving cursor position:" << cPos; } QDateEdit::setDisplayFormat(format); //æ�¢å¤�原状 if (hasSelected) { qCDebug(ClientLogger) << "Restoring selection state, section:" << section; setSelectedSection(section); //设置选中节 } else { qCDebug(ClientLogger) << "Restoring cursor position:" << cPos; lineEdit()->setCursorPosition(cPos); //设置光标ä½�ç½® } //刷新文本样å¼� //当é�žæ‰‹åŠ¨è¾“å…¥æ—¶é—´æ—¶ä¸�会触å�‘文本改å�˜ä¿¡å�· slotRefreshLineEditTextFormat(date.toString(format)); } void CDateEdit::slotRefreshLineEditTextFormat(const QString &text) { qCDebug(ClientLogger) << "CDateEdit::slotRefreshLineEditTextFormat - Refreshing line edit text format for text:" << text; QFont font = lineEdit()->font(); QFontMetrics fm(font); int textWidth = fm.horizontalAdvance(text); int maxWidth = lineEdit()->width() - 25; //文本能正常显示的最大宽度 if (textWidth > maxWidth) { setToolTip(text); } else { setToolTip(""); } //ä¸�显示农历时无需处ç�† if (!m_showLunarCalendar) { qCDebug(ClientLogger) << "CDateEdit::slotRefreshLineEditTextFormat - Not showing lunar calendar, returning"; return; } QList formats; QTextLayout::FormatRange fr_tracker; fr_tracker.start = text.size() - m_lunarName.size(); //æ ·å¼�èµ·å§‹ä½�ç½® fr_tracker.length = m_lunarName.size(); //æ ·å¼�长度 fr_tracker.format = m_lunarTextFormat; //æ ·å¼� formats.append(fr_tracker); //更改农历文本样å¼� setLineEditTextFormat(lineEdit(), formats); } void CDateEdit::slotCursorPositionChanged(int oldPos, int newPos) { qCDebug(ClientLogger) << "CDateEdit::slotCursorPositionChanged - Cursor position changed from:" << oldPos << "to:" << newPos; //ä¸�显示农历时无需处ç�† if (!m_showLunarCalendar) { qCDebug(ClientLogger) << "CDateEdit::slotCursorPositionChanged - Not showing lunar calendar, returning"; return; } Q_UNUSED(oldPos); //光标最大ä½�ç½®ä¸�能超过时间长度ä¸�能覆盖农历信æ�¯ int maxPos = text().length() - m_lunarName.length(); bool hasSelected = lineEdit()->hasSelectedText(); if (hasSelected) { int startPos = lineEdit()->selectionStart(); int endPos = lineEdit()->selectionEnd(); //新的光标ä½�置与选择区域末尾ä½�置相等则是å�‘å�Žé€‰æ‹©ï¼Œå�‘å‰�选择无需处ç�† if (newPos == endPos) { newPos = newPos > maxPos ? maxPos : newPos; lineEdit()->setSelection(startPos, newPos - startPos); //é‡�新设置选择区域 } } else { //é�žé€‰æ‹©æƒ…况当新光标ä½�置大于最大ä½�置时设置到最大ä½�置处,é‡�新设置选中节ä½�最å�Žä¸€èŠ‚ if (newPos > maxPos) { setCurrentSectionIndex(sectionCount() - 1); lineEdit()->setCursorPosition(maxPos); } } } void CDateEdit::slotSelectionChanged() { qCDebug(ClientLogger) << "CDateEdit::slotSelectionChanged - Selection changed"; //ä¸�显示农历时无需处ç�† if (!m_showLunarCalendar) { qCDebug(ClientLogger) << "CDateEdit::slotSelectionChanged - Not showing lunar calendar, returning"; return; } //全选时é‡�新设置为å�ªé€‰æ‹©æ—¶é—´ä¸�选择农历 if (lineEdit()->hasSelectedText() && lineEdit()->selectionEnd() == text().length()) { int startPos = lineEdit()->selectionStart(); lineEdit()->setSelection(startPos, text().length() - m_lunarName.length() - startPos); } } QString CDateEdit::getLunarName(const QDate &date) { QString lunarName = gLunarManager->getHuangLiShortName(date); // qCDebug(ClientLogger) << "CDateEdit::getLunarName - Date:" << date << "Lunar name:" << lunarName; return lunarName; } void CDateEdit::setLineEditTextFormat(QLineEdit *lineEdit, const QList &formats) { qCDebug(ClientLogger) << "CDateEdit::setLineEditTextFormat - Setting text format for line edit"; if (!lineEdit) { qCDebug(ClientLogger) << "Line edit is null, returning"; return; } QList attributes; for (const QTextLayout::FormatRange &fr : formats) { QInputMethodEvent::AttributeType type = QInputMethodEvent::TextFormat; int start = fr.start - lineEdit->cursorPosition(); int length = fr.length; QVariant value = fr.format; attributes.append(QInputMethodEvent::Attribute(type, start, length, value)); } QInputMethodEvent event(QString(), attributes); qCDebug(ClientLogger) << "Sending input method event with" << attributes.size() << "attributes"; QCoreApplication::sendEvent(lineEdit, &event); } void CDateEdit::changeEvent(QEvent *e) { // qCDebug(ClientLogger) << "CDateEdit::changeEvent - Change event detected"; QDateEdit::changeEvent(e); if (e->type() == QEvent::FontChange && m_showLunarCalendar) { qCDebug(ClientLogger) << "CDateEdit::changeEvent - Font change detected, refreshing date info"; slotDateEidtInfo(date()); } } bool CDateEdit::showGongli() { qCDebug(ClientLogger) << "CDateEdit::showGongli - Current date:" << m_strCurrrentDate; QString str = m_strCurrrentDate; QFontMetrics fontMetrice(lineEdit()->font()); if (fontMetrice.horizontalAdvance(str) > lineEdit()->width() - 20) { qCDebug(ClientLogger) << "CDateEdit::showGongli - Current date width is greater than line edit width, returning false"; return false; } qCDebug(ClientLogger) << "CDateEdit::showGongli - Current date width is less than line edit width, returning true"; return true; } void CDateEdit::updateCalendarWidget() { qCDebug(ClientLogger) << "CDateEdit::updateCalendarWidget - Calendar popup:" << calendarPopup() << "Show lunar calendar:" << m_showLunarCalendar; if (calendarPopup()) { //setCalendarWidget: //The editor does not automatically take ownership of the calendar widget. if (m_showLunarCalendar) { qCDebug(ClientLogger) << "Creating and setting lunar calendar widget"; setCalendarWidget(new LunarCalendarWidget(this)); } else { qCDebug(ClientLogger) << "Creating and setting standard calendar widget"; setCalendarWidget(new QCalendarWidget(this)); } } } void CDateEdit::setEditCursorPos(int pos) { qCDebug(ClientLogger) << "CDateEdit::setEditCursorPos - Setting cursor position to:" << pos; QLineEdit *edit = lineEdit(); if (nullptr != edit) { qCDebug(ClientLogger) << "CDateEdit::setEditCursorPos - Line edit is not null, setting cursor position to:" << pos; edit->setCursorPosition(pos); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cdateedit.h000066400000000000000000000047731523260663500301610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDATEEDIT_H #define CDATEEDIT_H #include #include class CDateEdit : public QDateEdit { Q_OBJECT public: explicit CDateEdit(QWidget *parent = nullptr); /** * @brief setData * 设置显示时间(覆盖父类方法) */ void setDate(QDate); /** * @brief setDisplayFormat * 设置时间显示格å¼�(覆盖父类方法) * @param format æ—¶é—´æ ¼å¼� */ void setDisplayFormat(QString format); /** * @brief displayFormat * 获å�–当å‰�æ—¶é—´æ ¼å¼�(覆盖父类方法) * @return */ QString displayFormat(); /** * @brief setLunarCalendarStatus * 设置农历状æ€� * @param status true:显示农历 false:ä¸�显示农历 */ void setLunarCalendarStatus(bool status); /** * @brief setLunarTextFormat * 设置农历文本样å¼� * @param format */ void setLunarTextFormat(QTextCharFormat format); /** * @brief getsetLunarTextFormat * 获å�–农历文本样å¼� * @return */ QTextCharFormat getsetLunarTextFormat(); /** * @brief setCalendarPopup * 是å�¦å¼¹å‡ºæ—¥åŽ†é€‰æ‹©ç•Œé�¢ * @param enable */ void setCalendarPopup(bool enable); void setEditCursorPos(int pos); signals: protected: void changeEvent(QEvent *e) override; private slots: //连接时间改å�˜ä¿¡å�·ï¼Œå¡«å……农历信æ�¯ void slotDateEidtInfo(const QDate &date); //连接输入框文本改å�˜ä¿¡å�·ï¼Œåˆ·æ–°æ–‡æœ¬æ ·å¼� void slotRefreshLineEditTextFormat(const QString &); //连接光标ä½�置改å�˜ä¿¡å�·ï¼Œé™�制光标ä½�ç½® void slotCursorPositionChanged(int, int); //连接文本选择改å�˜ä¿¡å�·ï¼Œå¤„ç�†é”®ç›˜å…¨é€‰æ—¶æƒ…况 void slotSelectionChanged(); private: //获å�–农历信æ�¯ QString getLunarName(const QDate &); //设置文本样å¼� void setLineEditTextFormat(QLineEdit *lineEdit, const QList &formats); //更新日历显示类型 void updateCalendarWidget(); bool showGongli(); private: QString m_format = ""; //æ—¶é—´æ ¼å¼�化格å¼� bool m_showLunarCalendar = false; //农历显示状æ€� true:显示 false:ä¸�显示 QString m_lunarName = ""; //农历字符串 QTextCharFormat m_lunarTextFormat; //农历文本样å¼� QString m_strCurrrentDate = ""; }; #endif // CDATEEDIT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cdialogiconbutton.cpp000066400000000000000000000017701523260663500322670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdialogiconbutton.h" #include "cschedulebasewidget.h" #include "commondef.h" CDialogIconButton::CDialogIconButton(QWidget *parent) : DIconButton(parent) { qCDebug(ClientLogger) << "CDialogIconButton constructor initialized"; initView(); connect(this, &DIconButton::clicked, this, &CDialogIconButton::slotIconClicked); } void CDialogIconButton::initView() { qCDebug(ClientLogger) << "CDialogIconButton::initView - Setting up button and dialog"; setIcon(DStyle::SP_ArrowDown); m_dialog = new TimeJumpDialog(DArrowRectangle::ArrowTop, this); setFlat(true); } void CDialogIconButton::slotIconClicked() { qCDebug(ClientLogger) << "CDialogIconButton::slotIconClicked - Button clicked, showing popup"; //获å�–全局时间并显示弹窗 m_dialog->showPopup(CScheduleBaseWidget::getSelectDate(), mapToGlobal(QPoint(width()/2, height()))); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cdialogiconbutton.h000066400000000000000000000011271523260663500317300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDIALOGICON_H #define CDIALOGICON_H #include "timejumpdialog.h" #include DWIDGET_USE_NAMESPACE //时间跳转控件 class CDialogIconButton : public DIconButton { Q_OBJECT public: explicit CDialogIconButton(QWidget *parent = nullptr); signals: public slots: //点击事件 void slotIconClicked(); private: void initView(); private: TimeJumpDialog *m_dialog = nullptr; //时间跳转弹窗 }; #endif // CDIALOGICON_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cdynamicicon.cpp000066400000000000000000000124321523260663500312150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdynamicicon.h" #include "commondef.h" #include #include #include #include #define BackgroundRatio 0.9394 #define Month_X_Ratio 0.3203 #define Month_Y_Ratio 0.1690 #define Month_W_Ratio 0.3125 #define Month_H_Ratio 0.15625 #define Day_X_Ratio 0.28125 #define Day_Y_Ratio 0.33333 #define Day_W_Ratio 0.4375 #define Day_H_Ratio 0.4160 #define Week_X_Ratio 0.4375 #define Week_Y_Ratio 0.728515625 #define Week_W_Ratio 0.21875 #define Week_H_Ratio 0.09375 CDynamicIcon *CDynamicIcon::m_Icon = nullptr; CDynamicIcon::CDynamicIcon(int width, int height) : m_pixmap(new QPixmap(QSize(width, height))) , m_Date() , m_Dayrenderer(new QSvgRenderer()) , m_Weekrenderer(new QSvgRenderer()) , m_Monthrenderer(new QSvgRenderer()) , m_backgroundrenderer(new QSvgRenderer()) { qCDebug(ClientLogger) << "CDynamicIcon constructor initialized with size:" << width << "x" << height; m_pixmap->fill(Qt::transparent); m_Date = QDate::currentDate(); setDate(m_Date); } CDynamicIcon::~CDynamicIcon() { qCDebug(ClientLogger) << "CDynamicIcon destructor called"; delete m_pixmap; m_pixmap = nullptr; delete m_Dayrenderer; m_Dayrenderer = nullptr; delete m_Weekrenderer; m_Weekrenderer = nullptr; delete m_Monthrenderer; m_Monthrenderer = nullptr; delete m_backgroundrenderer; m_backgroundrenderer = nullptr; } CDynamicIcon *CDynamicIcon::getInstance() { qCDebug(ClientLogger) << "CDynamicIcon::getInstance - Getting singleton instance"; if (nullptr == m_Icon) { qCDebug(ClientLogger) << "Creating new CDynamicIcon instance"; m_Icon = new CDynamicIcon(512, 512); } return m_Icon; } void CDynamicIcon::releaseInstance() { qCDebug(ClientLogger) << "CDynamicIcon::releaseInstance - Releasing singleton instance"; if (m_Icon != nullptr) { delete m_Icon; m_Icon = nullptr; } } void CDynamicIcon::setDate(const QDate &date) { // qCDebug(ClientLogger) << "CDynamicIcon::setDate - Setting date to:" << date; m_Date = date; QString dayfile = QString(":/resources/DynamicIcon/day%1.svg").arg(date.day()); m_Dayrenderer->load(dayfile); QString weekfile = QString(":/resources/DynamicIcon/week%1.svg").arg(date.dayOfWeek()); // qCDebug(ClientLogger) << "Loading week SVG:" << weekfile; m_Weekrenderer->load(weekfile); QString monthfile = QString(":/resources/DynamicIcon/month%1.svg").arg(date.month()); // qCDebug(ClientLogger) << "Loading month SVG:" << monthfile; m_Monthrenderer->load(monthfile); QString backgroundfile(":/resources/DynamicIcon/calendar_bg.svg"); // qCDebug(ClientLogger) << "Loading background SVG:" << backgroundfile; m_backgroundrenderer->load(backgroundfile); //draw pixmap paintPixmap(m_pixmap); } void CDynamicIcon::setIcon() { // qCDebug(ClientLogger) << "CDynamicIcon::setIcon - Setting application icon"; QIcon icon(this->getPixmap()); qApp->setProductIcon(icon); qApp->setWindowIcon(icon); if (qApp->aboutDialog() != nullptr) { // qCDebug(ClientLogger) << "Setting about dialog icon"; qApp->aboutDialog()->setProductIcon(icon); } if (m_Titlebar != nullptr) { m_Titlebar->setIcon(icon); } } void CDynamicIcon::setTitlebar(DTitlebar *titlebar) { // qCDebug(ClientLogger) << "CDynamicIcon::setTitlebar - Setting titlebar"; m_Titlebar = titlebar; } void CDynamicIcon::paintPixmap(QPixmap *pixmap) { // qCDebug(ClientLogger) << "CDynamicIcon::paintPixmap - Painting icon with size:" << pixmap->size(); QPainter painter(pixmap); //draw background qreal backgroundwidget = pixmap->size().width() * BackgroundRatio; qreal backgroundHeight = pixmap->size().height() * BackgroundRatio; QRectF backgroundRect = QRectF((pixmap->size().width() - backgroundwidget) / 2, (pixmap->size().height() - backgroundHeight) / 2, backgroundwidget, backgroundHeight); m_backgroundrenderer->render(&painter, backgroundRect); //draw month qreal month_x = pixmap->size().width() * Month_X_Ratio; qreal month_y = pixmap->size().width() * Month_Y_Ratio; qreal month_w = pixmap->size().width() * Month_W_Ratio; qreal month_h = pixmap->size().width() * Month_H_Ratio; m_Monthrenderer->render(&painter, QRectF(month_x, month_y, month_w, month_h)); //draw day qreal day_x = pixmap->size().width() * Day_X_Ratio; qreal day_y = pixmap->size().width() * Day_Y_Ratio; qreal day_w = pixmap->size().width() * Day_W_Ratio; qreal day_h = pixmap->size().width() * Day_H_Ratio; m_Dayrenderer->render(&painter, QRectF(day_x, day_y, day_w, day_h)); //draw week qreal week_x = pixmap->size().width() * Week_X_Ratio; qreal week_y = pixmap->size().width() * Week_Y_Ratio; qreal week_w = pixmap->size().width() * Week_W_Ratio; qreal week_h = pixmap->size().width() * Week_H_Ratio; m_Weekrenderer->render(&painter, QRectF(week_x, week_y, week_w, week_h)); painter.end(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cdynamicicon.h000066400000000000000000000024511523260663500306620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDYNAMICICON_H #define CDYNAMICICON_H #include #include #include #include #include #include DWIDGET_USE_NAMESPACE DCORE_USE_NAMESPACE class CDynamicIcon { private: explicit CDynamicIcon(int width, int height); ~CDynamicIcon(); //ç¦�用拷è´�构造,拷è´�赋值 CDynamicIcon(const CDynamicIcon &) = delete; CDynamicIcon &operator=(const CDynamicIcon &) = delete; public: static CDynamicIcon *getInstance(); static void releaseInstance(); public: void setDate(const QDate &date); QDate getDate() const { return m_Date; } void setIcon(); void setTitlebar(DTitlebar *titlebar); QPixmap getPixmap() const { return *m_pixmap; } public: static CDynamicIcon *m_Icon; private: void paintPixmap(QPixmap *pixmap); private: QPixmap *m_pixmap = nullptr; QDate m_Date; QSvgRenderer *m_Dayrenderer = nullptr; QSvgRenderer *m_Weekrenderer = nullptr; QSvgRenderer *m_Monthrenderer = nullptr; QSvgRenderer *m_backgroundrenderer = nullptr; DTitlebar *m_Titlebar {nullptr}; }; #endif // CDYNAMICICON_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget/000077500000000000000000000000001523260663500303315ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget/colorlabel.cpp000066400000000000000000000145311523260663500331570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorlabel.h" #include "commondef.h" #include #include #include #include ColorLabel::ColorLabel(DWidget *parent) : DLabel(parent) , m_pressed(false) { qCDebug(ClientLogger) << "ColorLabel constructor initialized"; setMouseTracking(true); m_dotCursor = pickColorCursor(); } //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor ColorLabel::getColor(qreal h, qreal s, qreal v) { // qCDebug(ClientLogger) << "ColorLabel::getColor - h:" << h << "s:" << s << "v:" << v; int hi = int(h / 60) % 6; qreal f = h / 60 - hi; qreal p = v * (1 - s); qreal q = v * (1 - f * s); qreal t = v * (1 - (1 - f) * s); QColor result; if (hi == 0) { result = QColor(std::min(int(255 * p), 255), std::min(int(255 * q), 255), std::min(int(255 * v), 255)); } else if (hi == 1) { result = QColor(std::min(int(255 * t), 255), std::min(int(255 * p), 255), std::min(int(255 * v), 255)); } else if (hi == 2) { result = QColor(std::min(int(255 * v), 255), std::min(int(255 * p), 255), int(255 * q)); } else if (hi == 3) { result = QColor(std::min(int(255 * v), 255), std::min(int(255 * t), 255), std::min(int(255 * p), 255)); } else if (hi == 4) { result = QColor(std::min(int(255 * q), 255), std::min(int(255 * v), 255), std::min(int(255 * p), 255)); } else { result = QColor(std::min(int(255 * p), 255), std::min(int(255 * v), 255), std::min(int(255 * t), 255)); } qCDebug(ClientLogger) << "Calculated color:" << result; return result; } void ColorLabel::setHue(int hue) { qCDebug(ClientLogger) << "ColorLabel::setHue - Setting hue to:" << hue; m_hue = hue; update(); } void ColorLabel::pickColor(QPoint pos, bool picked) { qCDebug(ClientLogger) << "ColorLabel::pickColor - Position:" << pos << "Picked:" << picked; if (!rect().contains(pos)) { qCDebug(ClientLogger) << "Position outside label bounds, ignoring"; return; } QPixmap pickPixmap; pickPixmap = this->grab(QRect(0, 0, this->width(), this->height())); QImage pickImg = pickPixmap.toImage(); if (!pickImg.isNull()) { QRgb pickRgb = pickImg.pixel(pos); m_pickedColor = QColor(qRed(pickRgb), qGreen(pickRgb), qBlue(pickRgb)); qCDebug(ClientLogger) << "Picked color:" << m_pickedColor; } else { qCDebug(ClientLogger) << "Image is null, defaulting to black"; m_pickedColor = QColor(0, 0, 0); } if (picked) { qCDebug(ClientLogger) << "Emitting picked color signal"; emit signalpickedColor(m_pickedColor); } else { qCDebug(ClientLogger) << "Emitting preview color signal"; emit signalPreViewColor(m_pickedColor); } } void ColorLabel::paintEvent(QPaintEvent *) { // qCDebug(ClientLogger) << "ColorLabel::paintEvent - Entered:" << m_entered; if (m_entered) { // qCDebug(ClientLogger) << "ColorLabel::paintEvent - Setting cursor to dot cursor"; setCursor(m_dotCursor); } else { // qCDebug(ClientLogger) << "ColorLabel::paintEvent - Setting cursor to default cursor"; setCursor(QCursor()); } QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); QImage backgroundImage(this->width(), this->height(), QImage::Format_ARGB32); QColor penColor; for (qreal s = 0; s < this->width(); s++) { for (qreal v = 0; v < this->height(); v++) { penColor = getColor(m_hue, s / this->width(), v / this->height()); if (!penColor.isValid()) { continue; } backgroundImage.setPixelColor(int(s), this->height() - 1 - int(v), penColor); } } QPixmap pm = QPixmap::fromImage(backgroundImage); QSize size(this->width(), this->height()); QBitmap mask(size); QPainter painterMask(&mask); painterMask.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); painterMask.fillRect(0, 0, size.width(), size.height(), Qt::white); painterMask.setBrush(QColor(0, 0, 0)); painterMask.drawRoundedRect(0, 0, size.width(), size.height(), 5, 5); QPixmap image = pm.scaled(size); image.setMask(mask); painter.drawPixmap(this->rect(),image); } void ColorLabel::mousePressEvent(QMouseEvent *e) { // qCDebug(ClientLogger) << "ColorLabel::mousePressEvent - Position:" << e->pos(); m_pressed = true; pickColor(e->pos(), m_pressed); QLabel::mousePressEvent(e); } void ColorLabel::mouseMoveEvent(QMouseEvent *e) { // qCDebug(ClientLogger) << "ColorLabel::mouseMoveEvent - Position:" << e->pos(); if (rect().contains(e->pos())) { m_entered = true; } else { m_entered = false; } update(); pickColor(e->pos(), m_pressed); //移动事件ä¸�传递到父控件中 e->accept(); } void ColorLabel::mouseReleaseEvent(QMouseEvent *e) { // qCDebug(ClientLogger) << "ColorLabel::mouseReleaseEvent - Position:" << e->pos(); if (m_pressed && rect().contains(e->pos())) { qCDebug(ClientLogger) << "Click detected, emitting clicked signal"; emit clicked(); } m_pressed = false; QLabel::mouseReleaseEvent(e); } QCursor ColorLabel::pickColorCursor() { // qCDebug(ClientLogger) << "ColorLabel::pickColorCursor - Creating custom cursor"; int tipWidth = 11; QPixmap cursorPix = QPixmap(QSize(tipWidth, tipWidth)); cursorPix.fill(QColor(Qt::transparent)); QPen whitePen; whitePen.setWidth(1); whitePen.setCapStyle(Qt::FlatCap); whitePen.setJoinStyle(Qt::RoundJoin); whitePen.setColor(QColor(255, 255, 255, 255)); QPen blackPen; blackPen.setWidth(1); blackPen.setCapStyle(Qt::FlatCap); blackPen.setJoinStyle(Qt::RoundJoin); blackPen.setColor(QColor(0, 0, 0, 125)); QPainter painter(&cursorPix); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); painter.setPen(blackPen); painter.drawEllipse(cursorPix.rect().center(), tipWidth / 2 - 1, tipWidth / 2 - 1); painter.drawEllipse(cursorPix.rect().center(), tipWidth / 2 - 3, tipWidth / 2 - 3); painter.setPen(whitePen); painter.drawEllipse(cursorPix.rect().center(), tipWidth / 2 - 2, tipWidth / 2 - 2); return QCursor(cursorPix, -1, -1); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget/colorlabel.h000066400000000000000000000036731523260663500326310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORLABEL_H #define COLORLABEL_H #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class ColorLabel : public DLabel { Q_OBJECT public: explicit ColorLabel(DWidget *parent = nullptr); //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor getColor(qreal h, qreal s, qreal v); void setHue(int hue); /** * @brief pickColor 获å�–é¼ æ ‡ä½�置颜色 * @param pos ä½�ç½® * @param picked 是å�¦èŽ·å�– */ void pickColor(QPoint pos, bool picked = false); signals: /** * @brief clicked 鼠标点击信å�· */ void clicked(); /** * @brief pickedColor 获å�–颜色信å�· * @param color 颜色 */ void signalpickedColor(QColor color); /** * @brief signalPreViewColor 颜色预览信å�· * @param color 颜色 */ void signalPreViewColor(QColor color); protected: void paintEvent(QPaintEvent *); /** * @brief mousePressEvent 鼠标点击事件 * @param e 鼠标事件 */ void mousePressEvent(QMouseEvent *e); /** * @brief mouseMoveEvent 鼠标移动事件 * @param e 鼠标事件 */ void mouseMoveEvent(QMouseEvent *e); /** * @brief mouseReleaseEvent 鼠标弹起事件 * @param e 鼠标事件 */ void mouseReleaseEvent(QMouseEvent *e); private: /** * @brief pickColorCursor * @return 返回自定义光标 */ QCursor pickColorCursor(); private: QCursor m_dotCursor; // 圆点光标 int m_hue = 0; bool m_pressed = false; //鼠标按下状æ€�,用于判断是å�¦å�‘é€�颜色值 bool m_entered = false; //鼠标移入状æ€�,用于判断光标显示类型 QColor m_pickedColor; }; #endif // COLORLABEL_H colorpickerWidget.cpp000066400000000000000000000161371523260663500344460ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorpickerWidget.h" #include "tabletconfig.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CColorPickerWidget::CColorPickerWidget(QWidget *parent) : DAbstractDialog(parent) , m_colorLabel(new ColorLabel(this)) , m_colorSlider(new ColorSlider(this)) , m_colHexLineEdit(new DLineEdit(this)) , m_wordLabel(new DLabel(this)) , m_cancelBtn(new DPushButton(this)) , m_enterBtn(new DSuggestButton(this)) { qCDebug(ClientLogger) << "CColorPickerWidget constructor initialized"; initUI(); setColorHexLineEdit(); moveToCenter(); connect(m_cancelBtn, &DPushButton::clicked, this, &CColorPickerWidget::slotCancelBtnClicked); connect(m_enterBtn, &DPushButton::clicked, this, &CColorPickerWidget::slotEnterBtnClicked); connect(m_colorLabel, &ColorLabel::signalpickedColor, this, &CColorPickerWidget::slotUpdateColor); connect(m_colHexLineEdit, &DLineEdit::textChanged, this, &CColorPickerWidget::slotHexLineEditChange); connect(m_colorSlider, &ColorSlider::valueChanged, this, [this](int val) { qCDebug(ClientLogger) << "Color slider value changed to:" << val; m_colorLabel->setHue(val); }); } CColorPickerWidget::~CColorPickerWidget() { qCDebug(ClientLogger) << "CColorPickerWidget destructor called"; } void CColorPickerWidget::setColorHexLineEdit() { qCDebug(ClientLogger) << "CColorPickerWidget::setColorHexLineEdit - Setting up hex line edit"; m_colHexLineEdit->setText(""); //确认按钮åˆ�å§‹ç½®ç�° m_enterBtn->setDisabled(true); //输入框输入é™�制 QRegularExpression reg("^[0-9A-Fa-f]{6}$"); QValidator *validator = new QRegularExpressionValidator(reg, m_colHexLineEdit->lineEdit()); m_colHexLineEdit->lineEdit()->setValidator(validator); setFocusProxy(m_colHexLineEdit); } /** * @brief CColorPickerDlg::initUI åˆ�始化 */ void CColorPickerWidget::initUI() { qCDebug(ClientLogger) << "CColorPickerWidget::initUI - Initializing UI components"; QFont mlabelTitle; QFont mlabelContext; mlabelTitle.setWeight(QFont::Bold); mlabelContext.setWeight(QFont::Medium); setFixedSize(314, 276); m_colorLabel->setFixedSize(294, 136); m_colorSlider->setFixedSize(294, 14); QVBoxLayout *mLayout = new QVBoxLayout(this); mLayout->setSpacing(12); mLayout->setContentsMargins(10, 10, 10, 8); mLayout->addWidget(m_colorLabel); mLayout->addWidget(m_colorSlider); m_wordLabel->setText(tr("Color")); m_strColorLabel = m_wordLabel->text(); m_wordLabel->setFixedWidth(40); m_wordLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); m_colHexLineEdit->setClearButtonEnabled(false); //ä¸�显示清空按钮 QHBoxLayout *inputLayout = new QHBoxLayout; inputLayout->setContentsMargins(0, 0, 0, 0); inputLayout->setSpacing(6); inputLayout->addWidget(m_wordLabel); inputLayout->addWidget(m_colHexLineEdit, 1); mLayout->addLayout(inputLayout); mLayout->addSpacing(4); m_cancelBtn->setText(tr("Cancel", "button")); m_cancelBtn->setFixedSize(140, 36); m_enterBtn->setText(tr("Save", "button")); m_enterBtn->setFixedSize(140, 36); QHBoxLayout *btnLayout = new QHBoxLayout; btnLayout->setContentsMargins(0, 0, 0, 0); btnLayout->setSpacing(5); btnLayout->addWidget(m_cancelBtn); DVerticalLine *line = new DVerticalLine(this); line->setObjectName("VLine"); line->setFixedSize(3, 28); btnLayout->addWidget(line); line->show(); btnLayout->addWidget(m_enterBtn); mLayout->addLayout(btnLayout); this->setLayout(mLayout); setLabelText(); this->setFocusPolicy(Qt::TabFocus); setTabOrder(m_colHexLineEdit, m_cancelBtn); setTabOrder(m_cancelBtn, m_enterBtn); setTabOrder(m_enterBtn, m_colorSlider); qCDebug(ClientLogger) << "UI initialization completed"; } void CColorPickerWidget::setLabelText() { qCDebug(ClientLogger) << "CColorPickerWidget::setLabelText - Setting label text based on locale"; QLocale local; if(local.language() == QLocale::Chinese) { qCDebug(ClientLogger) << "Chinese locale detected, keeping original text"; return; } QString str = m_strColorLabel; QFontMetrics fontMetrice(m_wordLabel->font()); if(fontMetrice.horizontalAdvance(str) > (m_wordLabel->width()+4)) { qCDebug(ClientLogger) << "Text too long, applying elision"; str = fontMetrice.elidedText(str, Qt::ElideRight, m_wordLabel->width()); } m_wordLabel->setText(str); } void CColorPickerWidget::changeEvent(QEvent *e) { // qCDebug(ClientLogger) << "CColorPickerWidget::changeEvent"; QWidget::changeEvent(e); if(e->type() == QEvent::FontChange) { // qCDebug(ClientLogger) << "CColorPickerWidget::changeEvent - Font changed, updating label text"; setLabelText(); } } void CColorPickerWidget::slotHexLineEditChange(const QString &text) { qCDebug(ClientLogger) << "CColorPickerWidget::slotHexLineEditChange - Text changed to:" << text; QString lowerText = text.toLower(); if (lowerText == text) { #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QRegularExpression rx("^[0-9a-f]{6}$"); m_enterBtn->setDisabled(!rx.match(lowerText).hasMatch()); #else QRegExp rx("^[0-9a-f]{6}$"); m_enterBtn->setDisabled(rx.indexIn(lowerText) == -1); #endif } else { qCDebug(ClientLogger) << "Converting text to lowercase"; m_colHexLineEdit->setText(lowerText); } } QColor CColorPickerWidget::getSelectedColor() { // qCDebug(ClientLogger) << "CColorPickerWidget::getSelectedColor"; return QColor("#" + m_colHexLineEdit->text()); } void CColorPickerWidget::slotUpdateColor(const QColor &color) { qCDebug(ClientLogger) << "CColorPickerWidget::slotUpdateColor - Updating color to:" << color; if (color.isValid()) { QString colorName = color.name().remove("#"); qCDebug(ClientLogger) << "Setting hex edit text to:" << colorName; this->m_colHexLineEdit->setText(colorName); } else { qCDebug(ClientLogger) << "Invalid color provided"; } } void CColorPickerWidget::slotCancelBtnClicked() { qCDebug(ClientLogger) << "CColorPickerWidget::slotCancelBtnClicked - Cancel button clicked, rejecting dialog"; reject(); } void CColorPickerWidget::slotEnterBtnClicked() { qCDebug(ClientLogger) << "CColorPickerWidget::slotEnterBtnClicked - Enter button clicked, accepting dialog"; accept(); } void CColorPickerWidget::keyPressEvent(QKeyEvent *e) { // qCDebug(ClientLogger) << "CColorPickerWidget::keyPressEvent - Key pressed:" << e->key(); //键盘有两个Enter按键,一个为Enter一个为Return if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return) { // qCDebug(ClientLogger) << "Enter/Return key pressed, not handling"; //暂时ä¸�处ç�†å›žè½¦äº‹ä»¶ } else { DAbstractDialog::keyPressEvent(e); } } colorpickerWidget.h000066400000000000000000000025461523260663500341120ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORPICKERWIDGET_H #define COLORPICKERWIDGET_H #include "colorlabel.h" #include "colorslider.h" #include #include #include #include DWIDGET_USE_NAMESPACE class CColorPickerWidget : public DAbstractDialog { Q_OBJECT public: explicit CColorPickerWidget(QWidget *parent = nullptr); ~CColorPickerWidget(); QColor getSelectedColor(); private: void initUI(); void setColorHexLineEdit(); void setLabelText(); public slots: /** * @brief slotUpdateColor 画æ�¿é¢œè‰²æ›´æ–°äº‹ä»¶ */ void slotUpdateColor(const QColor &color = QColor()); /** * @brief slotHexLineEditChange * 颜色输入框文本更改事件 * @param text */ void slotHexLineEditChange(const QString &text); void slotCancelBtnClicked(); void slotEnterBtnClicked(); protected: void keyPressEvent(QKeyEvent *e) override; void changeEvent(QEvent *e) override; private: ColorLabel *m_colorLabel; ColorSlider *m_colorSlider; DLineEdit *m_colHexLineEdit; DLabel *m_wordLabel; DPushButton *m_cancelBtn; DPushButton *m_enterBtn; QString m_strColorLabel; QColor curColor; }; #endif // COLORPICKERWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget/colorslider.cpp000066400000000000000000000064521523260663500333650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorslider.h" #include "commondef.h" #include #include #include #include const int IMAGE_HEIGHT = 10; ColorSlider::ColorSlider(QWidget *parent) : QSlider(parent) { qCDebug(ClientLogger) << "ColorSlider constructor initialized"; setMinimum(0); setMaximum(359); setOrientation(Qt::Horizontal); QRect rect = this->rect(); m_backgroundImage = QImage(rect.width(), IMAGE_HEIGHT, QImage::Format_ARGB32); qCDebug(ClientLogger) << "Creating background image with dimensions:" << rect.width() << "x" << IMAGE_HEIGHT; for (qreal s = 0; s < m_backgroundImage.width(); s++) { for (qreal v = 1; v <= m_backgroundImage.height() ; v++) { QColor penColor = getColor(qreal(s / rect.width() * maximum()), 1, 1); if (!penColor.isValid()) { continue; } m_backgroundImage.setPixelColor(std::min(int(s), rect.width()), m_backgroundImage.height() - int(v), penColor); } } } ColorSlider::~ColorSlider() { qCDebug(ClientLogger) << "ColorSlider destructor called"; } //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor ColorSlider::getColor(qreal h, qreal s, qreal v) { // qCDebug(ClientLogger) << "ColorSlider::getColor - h:" << h << "s:" << s << "v:" << v; int hi = int(h / 60) % 6; qreal f = h / 60 - hi; qreal p = v * (1 - s); qreal q = v * (1 - f * s); qreal t = v * (1 - (1 - f) * s); if (q < 0) { q = 0; } QColor color; if (hi == 0) { color = QColor(std::min(int(255 * p), 255), std::min(int(255 * q), 255), std::min(int(255 * v), 255)); } else if (hi == 1) { color = QColor(std::min(int(255 * t), 255), std::min(int(255 * p), 255), std::min(int(255 * v), 255)); } else if (hi == 2) { color = QColor(std::min(int(255 * v), 255), std::min(int(255 * p), 255), int(255 * q)); } else if (hi == 3) { color = QColor(std::min(int(255 * v), 255), std::min(int(255 * t), 255), std::min(int(255 * p), 255)); } else if (hi == 4) { color = QColor(std::min(int(255 * q), 255), std::min(int(255 * v), 255), std::min(int(255 * p), 255)); } else { color = QColor(std::min(int(255 * p), 255), std::min(int(255 * v), 255), std::min(int(255 * t), 255)); } qCDebug(ClientLogger) << "Calculated color:" << color; return color; } void ColorSlider::paintEvent(QPaintEvent *ev) { // qCDebug(ClientLogger) << "ColorSlider::paintEvent"; Q_UNUSED(ev) QRect rect = this->rect(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.drawImage(QRect(rect.x(), rect.y() + 2, rect.width(), IMAGE_HEIGHT), m_backgroundImage); const int offset = 2; const qreal k = qreal(value() - minimum()) / qreal(maximum() - minimum()); qreal x = ((rect.width() - 2 * offset) * k) + offset; QPen pen; pen.setWidth(1); pen.setColor(QColor(0, 0, 0, 51)); painter.setPen(pen); painter.setBrush(QBrush(Qt::white)); painter.drawRect(QRectF(QPointF(x - offset, rect.top()), QPointF(x + offset, rect.bottom()))); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorWidget/colorslider.h000066400000000000000000000011251523260663500330220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2020 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORSLIDER_H #define COLORSLIDER_H //#include #include #include class ColorSlider : public QSlider { Q_OBJECT public: explicit ColorSlider(QWidget *parent = nullptr); ~ColorSlider(); //h∈(0, 360), s∈(0, 1), v∈(0, 1) QColor getColor(qreal h, qreal s, qreal v); protected: void paintEvent(QPaintEvent *ev); private: int m_value; QImage m_backgroundImage; }; #endif // COLORSLIDER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorseletorwidget.cpp000066400000000000000000000237051523260663500325020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "colorseletorwidget.h" #include "configsettings.h" #include "units.h" #include "commondef.h" #include ColorSeletorWidget::ColorSeletorWidget(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "ColorSeletorWidget constructor initialized"; init(); } void ColorSeletorWidget::init() { qCDebug(ClientLogger) << "ColorSeletorWidget::init - Initializing widget"; initView(); m_colorGroup = new QButtonGroup(this); m_colorGroup->setExclusive(true); #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) connect(m_colorGroup, &QButtonGroup::idClicked, this, &ColorSeletorWidget::slotButtonClicked); #else // Qt5.11.3 兼容:使用 buttonClicked ä¿¡å�· connect(m_colorGroup, QOverload::of(&QButtonGroup::buttonClicked), this, &ColorSeletorWidget::slotButtonClickedCompat); #endif m_colorInfo.reset(new DTypeColor()); qCDebug(ClientLogger) << "ColorSeletorWidget initialization completed"; } void ColorSeletorWidget::resetColorButton(const AccountItem::Ptr &account) { qCDebug(ClientLogger) << "ColorSeletorWidget::resetColorButton - Resetting color buttons"; reset(); if (nullptr == account) { qCDebug(ClientLogger) << "Account is null, returning"; return; } DTypeColor::List colorList = account->getColorTypeList(); qCDebug(ClientLogger) << "Got color list with" << colorList.size() << "colors"; //添加默认颜色控件 for (DTypeColor::Ptr &var : colorList) { if (DTypeColor::PriSystem == var->privilege()) { // qCDebug(ClientLogger) << "Adding system color:" << var->colorCode(); addColor(var); } } //自定义控件å�•独添加 qCDebug(ClientLogger) << "Adding user color button with ID:" << m_userColorBtnId; m_colorGroup->addButton(m_userColorBtn, m_userColorBtnId); m_colorLayout->addWidget(m_userColorBtn); if (m_colorGroup->buttons().size() > 0) { qCDebug(ClientLogger) << "Clicking first button"; m_colorGroup->buttons().at(0)->click(); } } void ColorSeletorWidget::reset() { qCDebug(ClientLogger) << "ColorSeletorWidget::reset - Clearing color entities and widgets"; //清空所有的色彩实体和控件 m_colorEntityMap.clear(); QList buttons = m_colorGroup->buttons(); for (QAbstractButton *btn : buttons) { m_colorGroup->removeButton(btn); m_colorLayout->removeWidget(btn); //自定义控件内存ä¸�释放 if (btn == m_userColorBtn) { // qCDebug(ClientLogger) << "Skipping user color button"; continue; } delete btn; btn = nullptr; } if (nullptr == m_userColorBtn) { qCDebug(ClientLogger) << "Creating new user color button"; m_userColorBtn = new CRadioButton(this); m_userColorBtn->setFixedSize(18, 18); } m_userColorBtn->hide(); qCDebug(ClientLogger) << "Reset completed"; } void ColorSeletorWidget::addColor(const DTypeColor::Ptr &cInfo) { static int count = 0; //é�™æ€�å�˜é‡�,充当色彩控件id count++; qCDebug(ClientLogger) << "ColorSeletorWidget::addColor - Adding color with ID:" << count << "Color:" << cInfo->colorCode(); m_colorEntityMap.insert(count, cInfo); //映射id与控件,从1开始 CRadioButton *radio = new CRadioButton(this); radio->setColor(QColor(cInfo->colorCode())); //设置控件颜色 radio->setFixedSize(18, 18); m_colorGroup->addButton(radio, count); m_colorLayout->addWidget(radio); } DTypeColor::Ptr ColorSeletorWidget::getSelectedColorInfo() { qCDebug(ClientLogger) << "ColorSeletorWidget::getSelectedColorInfo - Getting selected color info"; if (m_colorInfo->privilege() == DTypeColor::PriSystem) { qCDebug(ClientLogger) << "System color selected, saving color ID:" << m_colorInfo->colorID(); CConfigSettings::getInstance()->setOption("LastSysColorTypeNo", m_colorInfo->colorID()); } else if (!m_colorInfo->colorCode().isEmpty()) { qCDebug(ClientLogger) << "User color selected, saving color code:" << m_colorInfo->colorCode(); CConfigSettings::getInstance()->setOption("LastUserColor", m_colorInfo->colorCode()); CConfigSettings::getInstance()->setOption("LastSysColorTypeNo", ""); } return m_colorInfo; } void ColorSeletorWidget::setSelectedColorByIndex(int index) { qCDebug(ClientLogger) << "ColorSeletorWidget::setSelectedColorByIndex - Setting color by index:" << index; if (index >= 0 && index < m_colorGroup->buttons().size()) { QAbstractButton *but = m_colorGroup->buttons().at(index); if (nullptr != but) { qCDebug(ClientLogger) << "Clicking button at index:" << index; but->click(); } } else { qCDebug(ClientLogger) << "Index out of range"; } } void ColorSeletorWidget::setSelectedColorById(int colorId) { qCDebug(ClientLogger) << "ColorSeletorWidget::setSelectedColorById - Setting color by ID:" << colorId; //默认选择第一个 if (colorId < 0) { qCDebug(ClientLogger) << "Invalid color ID, selecting first button"; if (m_colorGroup->buttons().size() > 0) { m_colorGroup->buttons().at(0)->click(); } return; } else if (colorId == 9) { qCDebug(ClientLogger) << "User color ID detected, clicking user color button"; m_userColorBtn->click(); return; } //系统颜色则å�‘å�Žç§»ä¸€ä½� if (colorId == 8) { colorId = 0; } else { ++colorId; } qCDebug(ClientLogger) << "Adjusted color ID:" << colorId; if (m_colorGroup->buttons().size() > colorId) { qCDebug(ClientLogger) << "Clicking button at adjusted ID"; m_colorGroup->buttons().at(colorId)->click(); } else { qCDebug(ClientLogger) << "Adjusted ID out of range"; } } void ColorSeletorWidget::setSelectedColor(const DTypeColor &colorInfo) { qCDebug(ClientLogger) << "ColorSeletorWidget::setSelectedColor - Setting color with ID:" << colorInfo.colorID(); bool finding = false; auto iterator = m_colorEntityMap.begin(); while (iterator != m_colorEntityMap.end()) { if (iterator.value()->colorID() == colorInfo.colorID()) { QAbstractButton *btn = m_colorGroup->button(iterator.key()); if (btn) { qCDebug(ClientLogger) << "Found matching color, clicking button with key:" << iterator.key(); btn->click(); finding = true; } break; } iterator++; } if (!finding) { qCDebug(ClientLogger) << "Color not found, creating user color"; DTypeColor::Ptr ptr; ptr.reset(new DTypeColor(colorInfo)); setUserColor(ptr); } } void ColorSeletorWidget::initView() { qCDebug(ClientLogger) << "ColorSeletorWidget::initView - Initializing view"; m_colorLayout = new QHBoxLayout(); QHBoxLayout *hLayout = new QHBoxLayout(); hLayout->addLayout(m_colorLayout); QPushButton *addColorBut = new QPushButton(); addColorBut->setIcon(DStyle().standardIcon(DStyle::SP_IncreaseElement)); addColorBut->setFixedSize(18, 18); addColorBut->setIconSize(QSize(10, 10)); hLayout->addWidget(addColorBut); hLayout->addStretch(1); m_colorLayout->setContentsMargins(0, 0, 0, 0); m_colorLayout->setSpacing(3); hLayout->setContentsMargins(0, 0, 0, 0); hLayout->setSpacing(3); this->setLayout(hLayout); connect(addColorBut, &QPushButton::clicked, this, &ColorSeletorWidget::slotAddColorButClicked); qCDebug(ClientLogger) << "View initialization completed"; } void ColorSeletorWidget::slotButtonClicked(int butId) { qCDebug(ClientLogger) << "ColorSeletorWidget::slotButtonClicked - Button clicked with ID:" << butId; auto it = m_colorEntityMap.find(butId); if (m_colorEntityMap.end() == it) { qCDebug(ClientLogger) << "Button ID not found in color map"; return; } DTypeColor::Ptr info = it.value(); if (info->colorCode() != m_colorInfo->colorCode()) { qCDebug(ClientLogger) << "Color changed from" << m_colorInfo->colorCode() << "to" << info->colorCode(); m_colorInfo = info; emit signalColorChange(info); } else { qCDebug(ClientLogger) << "Color unchanged"; } } #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) void ColorSeletorWidget::slotButtonClickedCompat(QAbstractButton *button) { // Qt5.11.3 兼容:从 button 获å�– id 并调用原函数 int butId = m_colorGroup->id(button); slotButtonClicked(butId); } #endif void ColorSeletorWidget::slotAddColorButClicked() { qCDebug(ClientLogger) << "ColorSeletorWidget::slotAddColorButClicked - Add color button clicked"; CColorPickerWidget colorPicker; if (colorPicker.exec()) { qCDebug(ClientLogger) << "Color picker returned color:" << colorPicker.getSelectedColor().name(); DTypeColor::Ptr typeColor; typeColor.reset(new DTypeColor()); typeColor->setColorCode(colorPicker.getSelectedColor().name()); typeColor->setPrivilege(DTypeColor::PriUser); setUserColor(typeColor); m_userColorBtn->click(); } else { qCDebug(ClientLogger) << "Color picker cancelled"; } } void ColorSeletorWidget::setUserColor(const DTypeColor::Ptr &colorInfo) { // qCDebug(ClientLogger) << "ColorSeletorWidget::setUserColor - Setting user color:" << colorInfo->colorCode(); if (nullptr == m_userColorBtn || DTypeColor::PriUser != colorInfo->privilege()) { qCDebug(ClientLogger) << "Invalid user color button or privilege"; return; } if (!m_userColorBtn->isVisible()) { qCDebug(ClientLogger) << "Showing user color button"; m_userColorBtn->show(); } m_userColorBtn->setColor(colorInfo->colorCode()); m_colorEntityMap[m_userColorBtnId] = colorInfo; qCDebug(ClientLogger) << "Clicking user color button"; m_userColorBtn->click(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/colorseletorwidget.h000066400000000000000000000047421523260663500321470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COLORSELETOR_H #define COLORSELETOR_H #include "cradiobutton.h" #include "colorWidget/colorpickerWidget.h" #include "scheduledatamanage.h" #include "dschedule.h" #include "dtypecolor.h" #include "accountmanager.h" #include #include #include #include #include //色彩控件选择类 class ColorSeletorWidget : public QWidget { Q_OBJECT public: explicit ColorSeletorWidget(QWidget *parent = nullptr); /** * @brief reset * é‡�ç½® */ void reset(); /** * @brief getSelectColor * @return 当å‰�已选在的色彩 */ DTypeColor::Ptr getSelectedColorInfo(); /** * @brief setUserColor 设置用户自定义的色彩 */ void setUserColor(const DTypeColor::Ptr &); /** * @brief setSelectedColorByIndex 设置选择的色彩控件 * @param index 色彩控件ä½�ç½® */ void setSelectedColorByIndex(int index); /** * @brief setSelectedColorById 设置选择的色彩控件 * @param colorId 色彩id */ void setSelectedColorById(int colorId); /** * @brief setSelectedColor 设置选择的色彩控件 * @param color 色彩实例 */ void setSelectedColor(const DTypeColor&); /** * @brief resetColorButton * é‡�置色彩控件 * @param account å¸�户 */ void resetColorButton(const AccountItem::Ptr& account); signals: //选择的色彩改å�˜ä¿¡å�· void signalColorChange(DTypeColor::Ptr); public slots: //色彩控件点击信å�· void slotButtonClicked(int butId); #if QT_VERSION < QT_VERSION_CHECK(5, 15, 0) // Qt5.11.3 兼容槽函数 void slotButtonClickedCompat(QAbstractButton *button); #endif //添加自定义色彩控件点击信å�· void slotAddColorButClicked(); private: void init(); void initView(); //添加色彩控件 void addColor(const DTypeColor::Ptr &); private: QMap m_colorEntityMap; //所有色彩实体 QHBoxLayout *m_colorLayout = nullptr; //色彩控件布局类 QButtonGroup *m_colorGroup = nullptr; //所有色彩控件 DTypeColor::Ptr m_colorInfo; //当å‰�已选择的色彩 CRadioButton *m_userColorBtn = nullptr; //用户自定义的色彩控件 const int m_userColorBtnId = 999; //用户自定义的色彩控件id }; #endif // COLORSELETOR_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cpushbutton.cpp000066400000000000000000000076031523260663500311370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cpushbutton.h" #include "commondef.h" #include #include #include #include #include #include CPushButton::CPushButton(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "CPushButton constructor initialized"; QHBoxLayout *layoutAddType = new QHBoxLayout(); m_textLabel = new QLabel(tr("New event type")); m_textLabel->setFixedSize(100,34); m_textLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_textLabel->setFixedSize(200,34); layoutAddType->setSpacing(0); layoutAddType->setContentsMargins(0, 0, 0, 0); layoutAddType->setAlignment(Qt::AlignLeft); m_iconButton = new DIconButton(this); m_iconButton->setFocusPolicy(Qt::NoFocus); m_iconButton->setFixedSize(16, 16); m_iconButton->setFlat(true); DPalette palette = DPaletteHelper::instance()->palette(this); QPalette pa = m_textLabel->palette(); //设置深浅色主题下正常状æ€�时的文本颜色,与下拉框颜色对其 if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::DarkType) { qCDebug(ClientLogger) << "Dark theme detected, setting text color to white"; pa.setBrush(QPalette::WindowText, QColor("#FFFFFF")); } else { qCDebug(ClientLogger) << "Light theme detected, setting text color to black"; pa.setBrush(QPalette::WindowText, QColor("#000000")); } m_textLabel->setPalette(pa); layoutAddType->setContentsMargins(33,0,0,0); layoutAddType->addWidget(m_iconButton); layoutAddType->addSpacing(5); layoutAddType->addWidget(m_textLabel); setFixedHeight(34); setLayout(layoutAddType); qCDebug(ClientLogger) << "CPushButton initialization completed"; } void CPushButton::setHighlight(bool status) { qCDebug(ClientLogger) << "CPushButton::setHighlight - Setting highlight status to:" << status; if (status == m_Highlighted) { qCDebug(ClientLogger) << "Highlight status unchanged, returning"; return; } m_Highlighted = status; update(); } bool CPushButton::isHighlight() { qCDebug(ClientLogger) << "CPushButton::isHighlight - Current status:" << m_Highlighted; return m_Highlighted; } void CPushButton::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CPushButton::mousePressEvent - Position:" << event->pos(); Q_UNUSED(event); m_pressed = true; } void CPushButton::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CPushButton::mouseReleaseEvent - Position:" << event->pos(); if (m_pressed && rect().contains(event->pos())){ qCDebug(ClientLogger) << "Mouse released within button bounds, emitting clicked signal"; emit clicked(); } m_pressed = false; } void CPushButton::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); DPalette palette = DPaletteHelper::instance()->palette(this); QPainter painter(this); // å��èµ°æ · painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); m_iconButton->setIcon(QIcon::fromTheme("dde_calendar_create")); if (m_Highlighted) { // qCDebug(ClientLogger) << "Button is highlighted, setting highlight appearance"; //背景设置为高亮色 m_iconButton->setIcon(QIcon(":/icons/deepin/builtin/dark/icons/dde_calendar_create_32px.svg")); painter.setBrush(palette.highlight()); m_textLabel->setBackgroundRole(QPalette::Highlight); } else { // qCDebug(ClientLogger) << "Button is not highlighted, setting normal appearance"; //背景é€�明 painter.setBrush(QBrush("#00000000")); m_textLabel->setBackgroundRole(QPalette::Window); } //绘制背景 painter.drawRect(this->rect()); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cpushbutton.h000066400000000000000000000016471523260663500306060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CPUSHBUTTON_H #define CPUSHBUTTON_H #include #include DWIDGET_USE_NAMESPACE class CPushButton : public QWidget { Q_OBJECT public: explicit CPushButton(QWidget *parent = nullptr); //设置高亮状æ€� void setHighlight(bool status); //返回高亮状æ€� bool isHighlight(); signals: void clicked(); protected: void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *event) override; private: bool m_Highlighted = false; //记录当å‰�是å�¦å¤„于高亮状æ€� bool m_pressed = false; //记录鼠标是å�¦æŒ‰ä¸‹ QLabel *m_textLabel = nullptr; //文字控件 DIconButton *m_iconButton = nullptr; //icon控件 }; #endif // CPUSHBUTTON_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cradiobutton.cpp000066400000000000000000000040531523260663500312520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cradiobutton.h" #include "commondef.h" #include #include #include DWIDGET_USE_NAMESPACE CRadioButton::CRadioButton(QWidget *parent) : QRadioButton(parent) { qCDebug(ClientLogger) << "CRadioButton constructor initialized"; } void CRadioButton::setColor(const QColor &color) { // qCDebug(ClientLogger) << "CRadioButton::setColor - Setting color to:" << color; m_color = color; } QColor CRadioButton::getColor() { // qCDebug(ClientLogger) << "CRadioButton::getColor - Returning color:" << m_color; return m_color; } void CRadioButton::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "CRadioButton::paintEvent"; Q_UNUSED(event); QPainter painter(this); // å��èµ°æ · painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); int w = width(); int h = height(); if (!isChecked()) { // qCDebug(ClientLogger) << "CRadioButton::paintEvent - Drawing unchecked state"; // 设置画刷颜色 painter.setBrush(m_color); // 绘制圆 painter.drawEllipse(QPointF(w / 2, h / 2), w / 2 - 1, h / 2 - 1); //绘制黑色æ��è¾¹ QPainterPath path; path.addEllipse(0, 0, w, h); path.addEllipse(2, 2, w - 4, h - 4); QColor c = QColor("#000000"); c.setAlphaF(0.1); painter.setBrush(c); painter.drawPath(path); } else { // qCDebug(ClientLogger) << "CRadioButton::paintEvent - Drawing checked state"; DPalette palette = DPaletteHelper::instance()->palette(this); QPainterPath path; path.addEllipse(0, 0, w, h); path.addEllipse(2, 2, w - 4, h - 4); painter.setBrush(palette.highlight()); painter.drawPath(path); // 设置画刷颜色 painter.setBrush(m_color); // 绘制圆 painter.drawEllipse(QPointF(w / 2, h / 2), w / 2 - 3, h / 2 - 3); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cradiobutton.h000066400000000000000000000010511523260663500307120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CRADIOBUTTON_H #define CRADIOBUTTON_H #include //自定义颜色å�•选按钮 class CRadioButton : public QRadioButton { Q_OBJECT public: explicit CRadioButton(QWidget *parent = nullptr); void setColor(const QColor&); QColor getColor(); signals: public slots: protected: void paintEvent(QPaintEvent *event) override; private: QColor m_color; }; #endif // CRADIOBUTTON_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/ctimelineedit.cpp000066400000000000000000000110531523260663500313720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ctimelineedit.h" #include #include #include "commondef.h" CTimeLineEdit::CTimeLineEdit(int id, QWidget *parent) : DSpinBox(parent) , m_id(id) { qCDebug(ClientLogger) << "CTimeLineEdit constructor, id:" << id; initView(); connect(this, &CTimeLineEdit::editingFinished, this, &CTimeLineEdit::slotEditingFinished); connect(this->lineEdit(), &QLineEdit::textEdited, this, &CTimeLineEdit::slotTextEdited); } void CTimeLineEdit::initView() { qCDebug(ClientLogger) << "CTimeLineEdit::initView"; //å�¯ç”¨åµŒå…¥å¼�的样å¼� setEnabledEmbedStyle(true); // QString str = this->styleSheet(); // this->setStyleSheet("QSpinBox:{background:transpaarent} QSpinBox::up-button{width:35px;}QSpinBox::down-button{width:35px;}"); // this->setAlignment(Qt::AlignLeft); // this->setFocusPolicy(Qt::FocusPolicy::NoFocus); // this->lineEdit()->setStyleSheet("border:none;border-style:outset"); } /** * @brief CTimeLineEdit::setNumberRange * 设置数字显示范围 * @param min 最å°�大å°� * @param max 最大大å°� */ void CTimeLineEdit::setRange(int min, int max) { qCDebug(ClientLogger) << "CTimeLineEdit::setRange min:" << min << "max:" << max; DSpinBox::setRange(min, max); } /** * @brief CTimeLineEdit::setStepEnabled * 设置步状æ€� * @param enable 状æ€� */ void CTimeLineEdit::setStepEnabled(CTimeLineEdit::StepEnabled enable) { qCDebug(ClientLogger) << "CTimeLineEdit::setStepEnabled enable:" << enable; m_stepEnable = enable; } /** * @brief CTimeLineEdit::setNum * 设置显示的值 * @param num 带显示的值 */ void CTimeLineEdit::setNum(int num) { qCDebug(ClientLogger) << "CTimeLineEdit::setNum num:" << num; m_num = num; m_num = m_num > minimum()? m_num:minimum(); m_num = m_num < maximum()? m_num:maximum(); setValue(num); emit signalNumChange(m_id, m_num); } /** * @brief CTimeLineEdit::setNum * 设置显示的值 * @param num 带显示的数字 * @param canCarry true: å�¯ä»¥è·³è½¬ï¼Œ false: ä¸�å�¯ä»¥è·³è½¬ */ void CTimeLineEdit::setNum(int num, bool canCarry) { qCDebug(ClientLogger) << "CTimeLineEdit::setNum num:" << num << "canCarry:" << canCarry; if (!canCarry) { setNum(num); return; } //若没有超过é™�制范围则ä¸�å¿…å�‘é€�时间跳转事件 if (num >= minimum() && num <= maximum()) { m_num = num; setValue(m_num); emit signalNumChange(m_id, m_num); return; } //å�‘é€�时间跳转信å�·ï¼Œ num-m_num: æ—¶é—´å·® qCDebug(ClientLogger) << "CTimeLineEdit: Emitting date jump signal, jump value:" << (num - m_num); emit signalDateJump(m_id, num - m_num); } void CTimeLineEdit::slotEditingFinished() { qCDebug(ClientLogger) << "CTimeLineEdit::slotEditingFinished value:" << value(); setNum(value()); } void CTimeLineEdit::slotTextEdited(const QString &text) { qCDebug(ClientLogger) << "CTimeLineEdit::slotTextEdited text:" << text; //过滤掉é�žæ•°å­—字符 QString value = ""; for (QChar c : text) { if ('0' <= c && c <= '9') { value.append(c); } } //借用字符串转整数策略使其剩余字符都符å�ˆæ•°å­—规范,包括无å‰�ç½®0ç­‰ int v = value.toInt(); //ä¿�存光标ä½�置,因为存在删å‡�字符,且被删å‡�的字符å�ªèƒ½æ˜¯åœ¨é¦–ä½�,因此ä¸�直接记录光标ç»�对ä½�置,而是ä¿�存当å‰�光标ä½�置与最å�Žä½�置的相对ä½�ç½® int len = text.length() - lineEdit()->cursorPosition(); lineEdit()->setText(v == 0 ? "" : QString::number(v)); //æ�¢å¤�光标ä½�ç½® lineEdit()->setCursorPosition(lineEdit()->text().length() - len); } /** * @brief CTimeLineEdit::stepEnabled * 因考虑到数字å�¯ä»¥è¿›ä½�和退ä½�,ä¸�存在真实的数字å�˜åŒ–é™�制,因此返回upå’Œdown状æ€�都å�¯ç”¨ * @return */ CTimeLineEdit::StepEnabled CTimeLineEdit::stepEnabled() const { // qCDebug(ClientLogger) << "CTimeLineEdit::stepEnabled returning:" << m_stepEnable; return m_stepEnable; } /** * @brief CTimeLineEdit::stepBy * æ�•æ�‰æ­¥é•¿è·³è½¬äº‹ä»¶ï¼Œè¿›è¡Œå¯¹æ•°å­—å�˜åŒ–的自定义 * @param steps 步长(数字å�˜åŒ–å�Žåº”为的值与å�˜åŒ–å‰�的值的差值) */ void CTimeLineEdit::stepBy(int steps) { qCDebug(ClientLogger) << "CTimeLineEdit::stepBy steps:" << steps; setNum(value() + steps, true); //因为已自定义处ç�†æ­¥é•¿ï¼Œå› æ­¤å†�次调用父类的方法实现默认效果,并将其步长传入0 DSpinBox::stepBy(0); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/ctimelineedit.h000066400000000000000000000026331523260663500310430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CTIMELINEEDIT_H #define CTIMELINEEDIT_H #include DWIDGET_USE_NAMESPACE //时间数字编辑器 class CTimeLineEdit : public DSpinBox { Q_OBJECT public: explicit CTimeLineEdit(int id = 0, QWidget *parent = nullptr); //设置控件数字,值将被é™�制在临界值范围内 void setNum(int num); //设置控件数字,如果canCaryy为true且超过临界值将进行自动跳转时间 void setNum(int num, bool canCarry); //设置数字显示范围 void setRange(int min, int max); //设置步状æ€� void setStepEnabled(CTimeLineEdit::StepEnabled); signals: //数字改å�˜ä¿¡å�· void signalNumChange(int id, int num); //时间跳转信å�· void signalDateJump(int id, int num); public slots: //编辑完æˆ�事件 void slotEditingFinished(); //编辑框编辑事件 void slotTextEdited(const QString &value); protected: //é‡�写步状æ€� StepEnabled stepEnabled() const override; //é‡�写步事件 void stepBy(int steps) override; private: void initView(); private: int m_num = 0; //当å‰�显示的数字 const int m_id = 0; //控件id CTimeLineEdit::StepEnabled m_stepEnable = CTimeLineEdit::StepUpEnabled|CTimeLineEdit::StepDownEnabled; }; #endif // CTIMELINEEDIT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/ctitlewidget.cpp000066400000000000000000000305411523260663500312460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ctitlewidget.h" #include "constants.h" #include "configsettings.h" #include "commondef.h" #include #include #include #include #include CTitleWidget::CTitleWidget(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "CTitleWidget constructor"; m_sidebarIcon = new DIconButton(this); m_sidebarIcon->setFixedSize(QSize(36, 36)); m_sidebarIcon->setIconSize(QSize(16, 16)); connect(m_sidebarIcon, &DIconButton::clicked, this, &CTitleWidget::slotSidebarIconClicked); m_buttonBox = new CButtonBox(this); m_buttonBox->setObjectName("ButtonBox"); m_buttonBox->setAccessibleName("ButtonBox"); m_buttonBox->setAccessibleDescription("Year, month, week, day button box"); DButtonBoxButton *m_yearButton = new DButtonBoxButton(tr("Y"), this); //设置年辅助技术显示å��ç§° m_yearButton->setObjectName("YearButton"); m_yearButton->setAccessibleName("YearButton"); m_yearButton->setFocusPolicy(Qt::TabFocus); m_yearButton->installEventFilter(this); QFont viewfont; viewfont.setWeight(QFont::Medium); viewfont.setPixelSize(DDECalendar::FontSizeFourteen); m_yearButton->setFixedSize(50, 36); DButtonBoxButton *m_monthButton = new DButtonBoxButton(tr("M"), this); //设置月辅助技术显示å��ç§° m_monthButton->setObjectName("MonthButton"); m_monthButton->setAccessibleName("MonthButton"); m_monthButton->setFixedSize(50, 36); m_monthButton->setFocusPolicy(Qt::TabFocus); m_monthButton->installEventFilter(this); DButtonBoxButton *m_weekButton = new DButtonBoxButton(tr("W"), this); //设置周辅助技术显示å��ç§° m_weekButton->setObjectName("WeekButton"); m_weekButton->setAccessibleName("WeekButton"); m_weekButton->setFixedSize(50, 36); m_weekButton->setFocusPolicy(Qt::TabFocus); m_weekButton->installEventFilter(this); DButtonBoxButton *m_dayButton = new DButtonBoxButton(tr("D"), this); //设置日辅助技术显示å��ç§° m_dayButton->setObjectName("DayButton"); m_dayButton->setAccessibleName("DayButton"); m_dayButton->setFixedSize(50, 36); m_dayButton->setFocusPolicy(Qt::TabFocus); m_dayButton->installEventFilter(this); m_yearButton->setFont(viewfont); m_monthButton->setFont(viewfont); m_weekButton->setFont(viewfont); m_dayButton->setFont(viewfont); QList btlist; btlist.append(m_yearButton); btlist.append(m_monthButton); btlist.append(m_weekButton); btlist.append(m_dayButton); m_buttonBox->setButtonList(btlist, true); m_buttonBox->setId(m_yearButton, DDECalendar::CalendarYearWindow); m_buttonBox->setId(m_monthButton, DDECalendar::CalendarMonthWindow); m_buttonBox->setId(m_weekButton, DDECalendar::CalendarWeekWindow); m_buttonBox->setId(m_dayButton, DDECalendar::CalendarDayWindow); m_buttonBox->setFixedSize(200, 36); m_searchEdit = new DSearchEdit(this); //设置æ�œç´¢æ¡†è¾…助技术显示å��ç§° m_searchEdit->setObjectName("SearchEdit"); m_searchEdit->setAccessibleName("SearchEdit"); DFontSizeManager::instance()->bind(m_searchEdit, DFontSizeManager::T6); m_searchEdit->setFixedHeight(36); m_searchEdit->setFont(viewfont); m_searchEdit->lineEdit()->installEventFilter(this); m_searchEdit->setPlaceHolder(tr("Search events and festivals")); m_searchEdit->setPlaceholderText(tr("Search events and festivals")); m_strPlaceHolder = m_searchEdit->placeholderText(); connect(m_searchEdit, &DSearchEdit::searchAborted, [&] { //æ�œç´¢æ¡†å…³é—­æŒ‰é’®ï¼Œæ¸…空数æ�® slotSearchEditFocusChanged(false); }); //æ�œç´¢æŒ‰é’®ï¼Œåœ¨çª—å�£æ¯”较å°�的时候,显示æ�œç´¢æŒ‰é’®éš�è—�æ�œç´¢æ¡† m_searchPush = new DIconButton(this); m_searchPush->setFixedSize(36, 36); m_searchPush->setIcon(QIcon::fromTheme("search")); connect(m_searchPush, &DIconButton::clicked, this, &CTitleWidget::slotShowSearchEdit); //新建日程快æ�·æŒ‰é’® m_newScheduleBtn = new DIconButton(this); DStyle style; m_newScheduleBtn->setFixedSize(36, 36); //设置+ m_newScheduleBtn->setIcon(style.standardIcon(DStyle::SP_IncreaseElement)); //除新建日程按钮外的控件放在这个widget内,因为这些控件会根æ�®çª—å�£çš„大å°�显示å�˜åŒ–而å�˜åŒ– QWidget *leftWidget = new QWidget(this); { QHBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->addSpacing(10); layout->addWidget(m_sidebarIcon, Qt::AlignLeft); layout->addSpacing(4); layout->addWidget(m_buttonBox, Qt::AlignLeft); layout->addStretch(); layout->addWidget(m_searchEdit, Qt::AlignCenter); layout->addStretch(); layout->addWidget(m_searchPush, Qt::AlignRight); leftWidget->setLayout(layout); } QHBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(leftWidget); layout->addWidget(m_newScheduleBtn, Qt::AlignRight); this->setLayout(layout); //设置焦点代ç�†ä¸ºm_sidebarIcon setFocusProxy(m_sidebarIcon); } void CTitleWidget::setShowState(CTitleWidget::Title_State state) { qCDebug(ClientLogger) << "CTitleWidget::setShowState state:" << state; m_showState = state; stateUpdate(); } void CTitleWidget::setSidebarStatus(bool status) { qCDebug(ClientLogger) << "CTitleWidget::setSidebarStatus status:" << status; m_sidebarstatus = status; updateSidebarIconStatus(); m_clickShowLeft = status; emit signalSidebarStatusChange(m_sidebarstatus & m_sidebarCanDisplay); //将状æ€�ä¿�存在é…�置文件中 gSetting->setUserSidebarStatus(status); } void CTitleWidget::setSidebarCanDisplay(bool can) { qCDebug(ClientLogger) << "CTitleWidget::setSidebarCanDisplay can:" << can; m_sidebarCanDisplay = can; } bool CTitleWidget::getSidevarStatus() { qCDebug(ClientLogger) << "CTitleWidget::getSidevarStatus returning:" << m_sidebarstatus; return m_sidebarstatus; } DButtonBox *CTitleWidget::buttonBox() const { return m_buttonBox; } DSearchEdit *CTitleWidget::searchEdit() const { return m_searchEdit; } DIconButton *CTitleWidget::newScheduleBtn() const { return m_newScheduleBtn; } void CTitleWidget::stateUpdate() { qCDebug(ClientLogger) << "CTitleWidget::stateUpdate showState:" << m_showState; switch (m_showState) { case Title_State_Mini: { //如果æ�œç´¢æ¡†æ²¡æœ‰ç„¦ç‚¹ä¸”æ�œç´¢æ¡†å†…没有内容则éš�è—�æ�œç´¢æ¡†æ˜¾ç¤ºæ�œç´¢å›¾æ ‡æŒ‰é’® if (m_searchEdit->text().isEmpty() && !m_searchEdit->lineEdit()->hasFocus()) { m_searchPush->show(); m_searchEdit->hide(); } else { miniStateShowSearchEdit(); } } break; default: { m_searchEdit->show(); if (m_searchPush->hasFocus()) { m_searchEdit->setFocus(); } m_buttonBox->show(); m_searchPush->hide(); normalStateUpdateSearchEditWidth(); } break; } } void CTitleWidget::miniStateShowSearchEdit() { qCDebug(ClientLogger) << "CTitleWidget::miniStateShowSearchEdit"; m_buttonBox->hide(); m_searchPush->hide(); m_searchEdit->setMaximumWidth(width()); m_searchEdit->show(); m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); } void CTitleWidget::normalStateUpdateSearchEditWidth() { qCDebug(ClientLogger) << "CTitleWidget::normalStateUpdateSearchEditWidth"; int padding = qMax(m_buttonBox->width(), m_newScheduleBtn->width()); //更加widget宽度设置æ�œç´¢æ¡†å®½åº¦ int searchWidth = width() - 2 * padding; //å�‚考其他应用设置宽度范围为 240~354 if (searchWidth < 240) { searchWidth = 240; } else if (searchWidth > 354) { searchWidth = 354; } m_searchEdit->setMaximumWidth(searchWidth); m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); } void CTitleWidget::updateSidebarIconStatus() { qCDebug(ClientLogger) << "CTitleWidget::updateSidebarIconStatus"; m_sidebarIcon->setIcon(QIcon::fromTheme("dde_calendar_sidebar")); } void CTitleWidget::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CTitleWidget::resizeEvent"; QWidget::resizeEvent(event); if (m_showState == Title_State_Normal) { normalStateUpdateSearchEditWidth(); } QString str = m_strPlaceHolder; QFontMetrics fontMetrice(m_searchEdit->font()); if (fontMetrice.horizontalAdvance(str) > (m_searchEdit->width() - 30) && m_clickShowLeft == false && !m_buttonBox->isHidden()) { str = fontMetrice.elidedText(str, Qt::ElideRight, m_searchEdit->width() - 30); m_searchEdit->setPlaceHolder(str); m_searchEdit->setPlaceholderText(str); } else { m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); m_clickShowLeft = false; } } void CTitleWidget::changeEvent(QEvent *e) { // qCDebug(ClientLogger) << "CTitleWidget::changeEvent"; QWidget::changeEvent(e); if (e->type() == QEvent::FontChange) { updateSearchEditPlaceHolder(); } } void CTitleWidget::updateSearchEditPlaceHolder() { qCDebug(ClientLogger) << "CTitleWidget::updateSearchEditPlaceHolder"; QString str = m_strPlaceHolder; QFontMetrics fontMetrice(m_searchEdit->font()); if (fontMetrice.horizontalAdvance(str) > (m_searchEdit->width() - 30)) { str = fontMetrice.elidedText(str, Qt::ElideRight, m_searchEdit->width() - 30); m_searchEdit->setPlaceHolder(str); m_searchEdit->setPlaceholderText(str); } else { m_searchEdit->setPlaceHolder(m_strPlaceHolder); m_searchEdit->setPlaceholderText(m_strPlaceHolder); } } bool CTitleWidget::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "CTitleWidget::eventFilter"; DButtonBoxButton *btn = qobject_cast(o); if (btn != nullptr && e->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(e); if (keyEvent != nullptr && (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Space)) { qCDebug(ClientLogger) << "CTitleWidget::eventFilter button key press:" << keyEvent->key(); emit signalSetButtonFocus(); } } if (m_searchEdit != nullptr && m_searchEdit->lineEdit() == o) { if (e->type() == QEvent::FocusOut) { QFocusEvent *focusOutEvent = dynamic_cast(e); //如果为tab切æ�¢ç„¦ç‚¹åˆ™å�‘é€�焦点切æ�¢ä¿¡å�· if (focusOutEvent->reason() == Qt::TabFocusReason) { qCDebug(ClientLogger) << "CTitleWidget::eventFilter search edit tab focus out"; emit signalSearchFocusSwitch(); } //æ ¹æ�®ç„¦ç‚¹ç¦»å¼€åŽŸå› ï¼Œå†³å®šæ˜¯å�¦éš�è—�æ�œç´¢æ¡† if (focusOutEvent->reason() == Qt::TabFocusReason || focusOutEvent->reason() == Qt::MouseFocusReason) { slotSearchEditFocusChanged(false); } } } return QWidget::eventFilter(o, e); } void CTitleWidget::slotShowSearchEdit() { qCDebug(ClientLogger) << "CTitleWidget::slotShowSearchEdit"; miniStateShowSearchEdit(); m_searchEdit->setFocus(); } void CTitleWidget::slotSearchEditFocusChanged(bool onFocus) { qCDebug(ClientLogger) << "CTitleWidget::slotSearchEditFocusChanged onFocus:" << onFocus; //如果获å�–焦点,或者æ�œç´¢ç¼–辑框内容ä¸�为空则ä¸�处ç�† if (onFocus || !m_searchEdit->text().isEmpty()) { qCDebug(ClientLogger) << "CTitleWidget::slotSearchEditFocusChanged onFocus or search edit text is not empty, returning"; return; } //如果为å°�窗å�£æ¨¡å¼�则éš�è—�部分控件 if (m_showState == Title_State_Mini) { m_buttonBox->show(); m_searchEdit->hide(); m_searchPush->show(); } } void CTitleWidget::slotSidebarIconClicked() { qCDebug(ClientLogger) << "CTitleWidget::slotSidebarIconClicked"; //获å�–当å‰�ä¾§è¾¹æ �显示状æ€� bool display = m_sidebarCanDisplay & m_sidebarstatus; //点击按钮å�Žä¾§è¾¹æ �状æ€�é‡�æ–°æ�¢å¤�为å�¯æ˜¾ç¤ºçжæ€� m_sidebarCanDisplay = true; setSidebarStatus(!display); //切æ�¢æ˜¾ç¤ºçжæ€� } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/ctitlewidget.h000066400000000000000000000053201523260663500307100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CTITLEWIDGET_H #define CTITLEWIDGET_H #include "cbuttonbox.h" #include #include #include DWIDGET_USE_NAMESPACE class CTitleWidget : public QWidget { Q_OBJECT public: enum Title_State { Title_State_Mini, //最å°�状æ€�显示 Title_State_Normal //正常状æ€�显示 }; explicit CTitleWidget(QWidget *parent = nullptr); /** * @brief setShowState 设置显示状æ€� * @param state */ void setShowState(Title_State state); //设置侧边æ �状æ€�,status:显示状æ€� void setSidebarStatus(bool status); void setSidebarCanDisplay(bool can); bool getSidevarStatus(); DButtonBox *buttonBox() const; DSearchEdit *searchEdit() const; DIconButton *newScheduleBtn() const; private: /** * @brief stateUpdate 切æ�¢æ˜¾ç¤ºçжæ€� */ void stateUpdate(); /** * @brief miniStateShowSearchEdit 最å°�状æ€�下æ�œç´¢æ¡†æ˜¾ç¤º */ void miniStateShowSearchEdit(); /** * @brief normalStateUpdateSearchEditWidth 正常状æ€�下æ�œç´¢æ˜¾ç¤º */ void normalStateUpdateSearchEditWidth(); /** * @brief updateSidebarIconStatus * æ›´æ–°ä¾§è¾¹æ �控制图标按钮的状æ€� */ void updateSidebarIconStatus(); void updateSearchEditPlaceHolder(); protected: void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE; bool eventFilter(QObject *o, QEvent *e) override; void changeEvent(QEvent *e) override; signals: void signalSetButtonFocus(); void signalSearchFocusSwitch(); //ä¾§è¾¹æ �状æ€�å�‘生改å�˜ void signalSidebarStatusChange(bool); public slots: /** * @brief slotShowSearchEdit æ�œç´¢æŒ‰é’®ç‚¹å‡»ä¸‹åˆ‡æ�¢æ�œç´¢æ¡† */ void slotShowSearchEdit(); /** * @brief slotSearchEditFocusChanged 状æ€�切æ�¢ä¸‹ï¼Œæ ¹æ�®æ�œç´¢æ¡†æ˜¯å�¦æœ‰å†…容或焦点切æ�¢æ˜¾ç¤ºçжæ€� * @param onFocus æ�œç´¢æ¡†æ˜¯å�¦æœ‰ç„¦ç‚¹ */ void slotSearchEditFocusChanged(bool onFocus); void slotSidebarIconClicked(); private: bool m_sidebarstatus = true; //ä¾§è¾¹æ �状æ€� bool m_sidebarCanDisplay = true; //ä¾§è¾¹æ �状æ€� DIconButton *m_sidebarIcon {nullptr}; //ä¾§è¾¹æ �状æ€�控制按钮 CButtonBox *m_buttonBox {nullptr}; DSearchEdit *m_searchEdit {nullptr}; DIconButton *m_newScheduleBtn {nullptr}; //全局的新建日程按钮 DIconButton *m_searchPush {nullptr}; QString m_strPlaceHolder; Title_State m_showState {Title_State_Normal}; bool m_clickShowLeft = false; }; #endif // CTITLEWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/customframe.cpp000066400000000000000000000125301523260663500311010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "customframe.h" #include "constants.h" #include "commondef.h" #include #include #include #include DGUI_USE_NAMESPACE CustomFrame::CustomFrame(QWidget *parent) : QFrame(parent) { // qCDebug(ClientLogger) << "CustomFrame constructor"; m_font.setWeight(QFont::Medium); m_font.setPixelSize(DDECalendar::FontSizeFourteen); this->setAttribute(Qt::WA_TranslucentBackground);//设置窗å�£èƒŒæ™¯é€�明 this->setWindowFlags(Qt::FramelessWindowHint); //设置无边框窗å�£ setContentsMargins(0, 0, 0, 0); } void CustomFrame::setBColor(QColor normalC) { // qCDebug(ClientLogger) << "CustomFrame::setBColor"; m_bnormalColor = normalC; m_bflag = true; update(); } void CustomFrame::setRoundState(bool lstate, bool tstate, bool rstate, bool bstate) { // qCDebug(ClientLogger) << "CustomFrame::setRoundState lstate:" << lstate << "tstate:" << tstate // << "rstate:" << rstate << "bstate:" << bstate; m_lstate = lstate; m_tstate = tstate; m_rstate = rstate; m_bstate = bstate; } void CustomFrame::setTextStr(const QFont &font, const QColor &tc, const QString &strc, int flag) { // qCDebug(ClientLogger) << "CustomFrame::setTextStr text:" << strc << "flag:" << flag; m_font = font; m_tnormalColor = tc; m_text = strc; m_textflag = flag; } void CustomFrame::setTextStr(const QString &strc) { // qCDebug(ClientLogger) << "CustomFrame::setTextStr text:" << strc; m_text = strc; if (!m_fixsizeflag) { QFontMetrics fm(m_font); int w = fm.horizontalAdvance(m_text); setMinimumWidth(w); } update(); } void CustomFrame::setTextColor(QColor tc) { // qCDebug(ClientLogger) << "CustomFrame::setTextColor"; m_tnormalColor = tc; update(); } void CustomFrame::setTextFont(const QFont &font) { // qCDebug(ClientLogger) << "CustomFrame::setTextFont"; m_font = font; if (!m_fixsizeflag) { QFontMetrics fm(m_font); int w = fm.horizontalAdvance(m_text); setMinimumWidth(w); } } void CustomFrame::setTextAlign(int flag) { // qCDebug(ClientLogger) << "CustomFrame::setTextAlign flag:" << flag; m_textflag = flag; } void CustomFrame::setRadius(int radius) { // qCDebug(ClientLogger) << "CustomFrame::setRadius radius:" << radius; m_radius = radius; } void CustomFrame::setboreder(int framew) { // qCDebug(ClientLogger) << "CustomFrame::setboreder framew:" << framew; m_borderframew = framew; } void CustomFrame::setFixedSize(int w, int h) { // qCDebug(ClientLogger) << "CustomFrame::setFixedSize w:" << w << "h:" << h; m_fixsizeflag = true; QFrame::setFixedSize(w, h); } void CustomFrame::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "CustomFrame::paintEvent"; int labelwidth = width() - 2 * m_borderframew; int labelheight = height() - 2 * m_borderframew; QPainter painter(this); QRect fillRect = QRect(m_borderframew, m_borderframew, labelwidth, labelheight); if (m_bflag) { // qCDebug(ClientLogger) << "CustomFrame::paintEvent - Drawing background"; painter.save(); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; painter.setBrush(QBrush(m_bnormalColor)); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(m_radius, m_borderframew); if (m_lstate) { painterPath.arcTo(QRect(m_borderframew, m_borderframew, m_radius * 2, m_radius * 2), 90, 90); } else { painterPath.lineTo(m_borderframew, m_borderframew); painterPath.lineTo(m_borderframew, m_radius); } painterPath.lineTo(0, labelheight - m_radius); if (m_bstate) { painterPath.arcTo(QRect(m_borderframew, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 180, 90); } else { painterPath.lineTo(m_borderframew, labelheight); painterPath.lineTo(m_radius, labelheight); } painterPath.lineTo(labelwidth - m_radius, labelheight); if (m_rstate) { painterPath.arcTo(QRect(labelwidth - m_radius * 2, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); } else { painterPath.lineTo(labelwidth, labelheight); painterPath.lineTo(labelwidth, labelheight - m_radius); } painterPath.lineTo(labelwidth, m_radius); if (m_tstate) { painterPath.arcTo(QRect(labelwidth - m_radius * 2, m_borderframew, m_radius * 2, m_radius * 2), 0, 90); } else { painterPath.lineTo(labelwidth, m_borderframew); painterPath.lineTo(labelwidth - m_radius, m_borderframew); } painterPath.lineTo(m_radius, m_borderframew); painterPath.closeSubpath(); painter.drawPath(painterPath); painter.restore(); } if (!m_text.isEmpty()) { // qCDebug(ClientLogger) << "CustomFrame::paintEvent - Drawing text"; painter.save(); painter.setRenderHints(QPainter::Antialiasing); painter.setFont(m_font); painter.setPen(m_tnormalColor); painter.drawText(fillRect, m_textflag, m_text); painter.restore(); } QFrame::paintEvent(e); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/customframe.h000066400000000000000000000030711523260663500305460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CustomFrame_H #define CustomFrame_H #include class CustomFrame : public QFrame { Q_OBJECT public: explicit CustomFrame(QWidget *parent = nullptr); void setBColor(QColor normalC); void setRoundState(bool lstate, bool tstate, bool rstate, bool bstate); void setTextStr(const QFont &font, const QColor &tc, const QString &strc, int flag = Qt::AlignCenter); void setTextStr(const QString &strc); void setTextColor(QColor tc); void setTextFont(const QFont &font); void setTextAlign(int flag = Qt::AlignCenter); void setRadius(int radius = 8); void setboreder(int framew = 0); QString getTextStr() { return m_text; } void setFixedSize(int w, int h); protected: void paintEvent(QPaintEvent *e) override; private: QColor m_bnormalColor = "#FFFFFF"; QColor m_tnormalColor = "#000000"; QFont m_font; bool m_bflag = false; bool m_fixsizeflag = false; int m_textflag = Qt::AlignCenter;//对é½�æ–¹å¼� QString m_text; int m_radius = 8; int m_borderframew = 0; bool m_lstate = false; bool m_tstate = false; bool m_rstate = false; bool m_bstate = false; }; #endif // TODYBUTTON_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cweekwidget.cpp000066400000000000000000000055011523260663500310560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekwidget.h" #include "calendarmanage.h" #include "constants.h" #include "commondef.h" #include #include #include CWeekWidget::CWeekWidget(QWidget *parent) : QPushButton(parent) , m_firstDay(CalendarManager::getInstance()->getFirstDayOfWeek()) { // qCDebug(ClientLogger) << "CWeekWidget constructor"; setMinimumHeight(10); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setFocusPolicy(Qt::NoFocus); } void CWeekWidget::setFirstDay(Qt::DayOfWeek first) { // qCDebug(ClientLogger) << "CWeekWidget::setFirstDay first:" << first; m_firstDay = first; setAutoFirstDay(true); } void CWeekWidget::setAutoFirstDay(bool is) { // qCDebug(ClientLogger) << "CWeekWidget::setAutoFirstDay is:" << is; m_autoFirstDay = is; } void CWeekWidget::setAutoFontSizeByWindow(bool is) { // qCDebug(ClientLogger) << "CWeekWidget::setAutoFontSizeByWindow is:" << is; m_autoFontSizeByWindow = is; } void CWeekWidget::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "CWeekWidget::paintEvent"; QWidget::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QFont font; if (m_autoFontSizeByWindow) { // qCDebug(ClientLogger) << "CWeekWidget::paintEvent - Auto font size by window"; //字体跟éš�界é�¢å¤§å°� qreal w = this->width() / 7; qreal h = this->height(); qreal r = w > h ? h : w ; if (QLocale::system().language() == QLocale::English) { // qCDebug(ClientLogger) << "CWeekWidget::paintEvent - English locale, reducing font size"; r*=0.8; } //æ ¹æ�®é«˜åº¦å’Œå®½åº¦è®¾ç½®æ—¶é—´å­—体的大å°� font.setPixelSize(int(r/20.0*12)); } else { // qCDebug(ClientLogger) << "CWeekWidget::paintEvent - Fixed font size"; font.setPixelSize(DDECalendar::FontSizeTwelve); } painter.setFont(font); QLocale locale; qreal setp = (width())/7.0; //获å�–一周首日 int firstDay = m_firstDay; if (m_autoFirstDay) { // qCDebug(ClientLogger) << "CWeekWidget::paintEvent - Auto first day"; firstDay = CalendarManager::getInstance()->getFirstDayOfWeek(); } QStringList weekStr; for (auto i : { 7, 1, 2, 3, 4, 5, 6 }) { QString weekDayName = locale.dayName(i, QLocale::NarrowFormat); weekStr << weekDayName; } //绘制周一到周日 for (int i = Qt::Monday; i <= Qt::Sunday; ++i) { int index = (firstDay + i - Qt::Monday) % Qt::Sunday; QString text = weekStr[index]; QRectF rect((i-Qt::Monday)*setp, 0, setp, height()); painter.drawText(rect, Qt::AlignCenter, text); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/cweekwidget.h000066400000000000000000000015451523260663500305270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKWIDGET_H #define CWEEKWIDGET_H #include class CWeekWidget : public QPushButton { Q_OBJECT public: explicit CWeekWidget(QWidget *parent = nullptr); //设置一周首日 void setFirstDay(Qt::DayOfWeek); //设置是å�¦æ ¹æ�®é…�置自动设置 void setAutoFirstDay(bool); //设置字体大å°�是å�¦è·Ÿéš�界é�¢å¤§å°� void setAutoFontSizeByWindow(bool); signals: public slots: protected: void paintEvent(QPaintEvent *event) override; private: bool m_autoFirstDay = true; //是å�¦æ ¹æ�®é…�置自动设置 bool m_autoFontSizeByWindow = true; //字体大å°�是å�¦è·Ÿéš�界é�¢å¤§å°� Qt::DayOfWeek m_firstDay = Qt::Monday; //一周首日 }; #endif // CWEEKWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/jobtypecombobox.cpp000066400000000000000000000345761523260663500317770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "jobtypecombobox.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include JobTypeComboBox::JobTypeComboBox(QWidget *parent) : DComboBox(parent) { qCDebug(ClientLogger) << "JobTypeComboBox::JobTypeComboBox"; initUI(); //ä¸�å�¯ç”¨è‡ªåŠ¨åŒ¹é…� setCompleter(nullptr); //设置ä¸�接å�—回车键æ�’å…¥ setInsertPolicy(QComboBox::NoInsert); this->view()->setTextElideMode(Qt::ElideRight); connect(this, QOverload::of(&QComboBox::highlighted), [this](int index) { view()->setFocus(); m_hoverSelectedIndex = index; }); } JobTypeComboBox::~JobTypeComboBox() { qCDebug(ClientLogger) << "JobTypeComboBox::~JobTypeComboBox"; return; } QString JobTypeComboBox::getCurrentJobTypeNo() { qCDebug(ClientLogger) << "JobTypeComboBox::getCurrentJobTypeNo"; if (this->currentIndex() < 0 || this->currentIndex() >= m_lstJobType.size()) { qCDebug(ClientLogger) << "Current index is out of bounds"; return QString(); } return m_lstJobType[this->currentIndex()]->typeID(); } void JobTypeComboBox::setCurrentJobTypeNo(const QString &strJobTypeNo) { qCDebug(ClientLogger) << "JobTypeComboBox::setCurrentJobTypeNo, jobTypeNo:" << strJobTypeNo; for (int i = 0; i < m_lstJobType.size(); i++) { if (strJobTypeNo == m_lstJobType[i]->typeID()) { // qCDebug(ClientLogger) << "Found job type at index:" << i; this->setCurrentIndex(i); break; } } return; } void JobTypeComboBox::setAlert(bool isAlert) { qCDebug(ClientLogger) << "JobTypeComboBox::setAlert, isAlert:" << isAlert; if (m_control) { qCDebug(ClientLogger) << "m_control is valid, setting alert"; //输入框未显示警告色? m_control->setAlert(isAlert); } } bool JobTypeComboBox::isAlert() const { qCDebug(ClientLogger) << "JobTypeComboBox::isAlert"; if (m_control) { qCDebug(ClientLogger) << "m_control is valid, returning alert status"; return m_control->isAlert(); } qCDebug(ClientLogger) << "m_control is null, returning false"; return false; } void JobTypeComboBox::showAlertMessage(const QString &text, int duration) { qCDebug(ClientLogger) << "JobTypeComboBox::showAlertMessage, text:" << text << "duration:" << duration; showAlertMessage(text, nullptr, duration); } void JobTypeComboBox::showAlertMessage(const QString &text, QWidget *follower, int duration) { qCDebug(ClientLogger) << "JobTypeComboBox::showAlertMessage, text:" << text << "duration:" << duration; if (m_control) { qCDebug(ClientLogger) << "m_control is valid, showing alert message"; m_control->showAlertMessage(text, follower ? follower : this, duration); } } void JobTypeComboBox::setAlertMessageAlignment(Qt::Alignment alignment) { qCDebug(ClientLogger) << "JobTypeComboBox::setAlertMessageAlignment"; if (m_control) { qCDebug(ClientLogger) << "m_control is valid, setting message alignment"; m_control->setMessageAlignment(alignment); } } void JobTypeComboBox::hideAlertMessage() { qCDebug(ClientLogger) << "JobTypeComboBox::hideAlertMessage"; if (m_control) { qCDebug(ClientLogger) << "m_control is valid, hiding alert message"; m_control->hideAlertMessage(); } } int JobTypeComboBox::getCurrentEditPosition() const { qCDebug(ClientLogger) << "JobTypeComboBox::getCurrentEditPosition"; return m_newPos; } void JobTypeComboBox::updateJobType(const AccountItem::Ptr& account) { qCDebug(ClientLogger) << "JobTypeComboBox::updateJobType"; if (nullptr == account) { qCDebug(ClientLogger) << "account is null, returning"; return; } //将自定义控件内存是å�¦å¹¶ç½®ç©ºï¼Œä¿�å­˜åˆ�始展示时能够进入高度调整 if (m_customWidget) { qCDebug(ClientLogger) << "m_customWidget is valid, deleting it"; m_addBtn->deleteLater(); m_customWidget->deleteLater(); m_addBtn = nullptr; m_customWidget = nullptr; } //切æ�¢è´¦å�·é‡�置选项å�Žéœ€é‡�ç½®view的高度é™�制和大å°�策略,使其在åˆ�次显示时能跟éš�列表项数é‡�动æ€�调整高度 QFrame *viewContainer = findChild(); if (viewContainer) { qCDebug(ClientLogger) << "viewContainer is valid, resetting height and size policy"; viewContainer->setMinimumHeight(0); viewContainer->setMaximumHeight(16777215); viewContainer->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); } //ä¿�存现场 bool isEnit = isEditable(); QString text = currentText(); m_lstJobType = account->getScheduleTypeList(); clear(); //æ›´æ–°å‰�先清空原有列表 qCDebug(ClientLogger) << "Updating job types, count:" << m_lstJobType.size(); for (m_itemNumIndex = 0; m_itemNumIndex < m_lstJobType.size(); m_itemNumIndex++) { addJobTypeItem(m_itemNumIndex, m_lstJobType[m_itemNumIndex]->getColorCode(), m_lstJobType[m_itemNumIndex]->displayName()); } //æ•°æ�®é‡�ç½®å�Žhover标识é‡�置为-1 m_hoverSelectedIndex = -1; //æ�¢å¤�原状 setEditable(isEnit); setCurrentText(text); } void JobTypeComboBox::addJobTypeItem(int idx, QString strColorHex, QString strJobType) { // qCDebug(ClientLogger) << "JobTypeComboBox::addJobTypeItem, idx:" << idx << "color:" << strColorHex << "type:" << strJobType; //绘制的pixmap为基准大å°�çš„4å€�,防止缩放时出现齿è·� QSize size(64, 64); QPixmap pixmap(size); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); painter.setRenderHints(QPainter::Antialiasing); painter.setBrush(QColor(strColorHex)); painter.setPen(QColor(strColorHex)); painter.drawRoundedRect(0, 0, 64, 64, 16, 16); //æ��è¾¹ QPainterPath path; path.addRoundedRect(0, 0, 64, 64, 16, 16); path.addRoundedRect(4, 4, 56, 56, 16, 16); painter.setBrush(QColor(0, 0, 0, 255 / 10)); painter.drawPath(path); insertItem(idx, QIcon(pixmap), tr(strJobType.toLocal8Bit())); } void JobTypeComboBox::initUI() { qCDebug(ClientLogger) << "JobTypeComboBox::initUI"; setEditable(false); setIconSize(QSize(16, 16)); } void JobTypeComboBox::setItemSelectable(bool status) { qCDebug(ClientLogger) << "JobTypeComboBox::setItemSelectable, status:" << status; if (-1 == m_hoverSelectedIndex) { qCDebug(ClientLogger) << "m_hoverSelectedIndex is -1, returning"; return; } //更改当å‰�列表框里的高亮项的å�¯é€‰æ‹©çжæ€�设置,将其设置为ä¸�å�¯é€‰ä¸­çжæ€�å�¯å®žçŽ°å¤±åŽ»é€‰ä¸­æ•ˆæžœï¼Œå¾…è�šç„¦å�Žå†�æ�¢å¤�过æ�¥ QStandardItemModel *pItemModel = qobject_cast(model()); pItemModel->item(m_hoverSelectedIndex)->setSelectable(status); //设置“添加按键â€�按钮的高亮状æ€� if (nullptr != m_addBtn) { qCDebug(ClientLogger) << "m_addBtn is valid, setting highlight"; m_addBtn->setHighlight(!status); } } void JobTypeComboBox::addCustomWidget(QFrame *viewContainer) { qCDebug(ClientLogger) << "JobTypeComboBox::addCustomWidget"; if (viewContainer) { qCDebug(ClientLogger) << "viewContainer is valid"; if (nullptr == m_customWidget) { qCDebug(ClientLogger) << "m_customWidget is null, creating it"; //获å�–原控件布局 QBoxLayout *layout = qobject_cast(viewContainer->layout()); //自定义控件 QVBoxLayout *hLayout = new QVBoxLayout; DPushButton *splitter = new DPushButton(this); m_addBtn = new CPushButton(); splitter->setFixedHeight(2); splitter->setFocusPolicy(Qt::NoFocus); hLayout->addWidget(splitter); hLayout->addWidget(m_addBtn); hLayout->setContentsMargins(0, 0, 0, 0); hLayout->setSpacing(0); m_customWidget = new QWidget(this); m_customWidget->setFixedHeight(35); m_customWidget->setLayout(hLayout); //添加自定义控件到最å�Ž layout->insertWidget(-1, m_customWidget); viewContainer->setFixedHeight(viewContainer->height() + m_customWidget->height()); //设置å�¯æŽ¥å�—tab焦点 m_addBtn->setFocusPolicy(Qt::TabFocus); setTabOrder(view(), m_addBtn); //注册事件监å�¬ m_addBtn->installEventFilter(this); view()->installEventFilter(this); connect(m_addBtn, &CPushButton::clicked, this, &JobTypeComboBox::slotBtnAddItemClicked); } } } void JobTypeComboBox::showPopup() { qCDebug(ClientLogger) << "JobTypeComboBox::showPopup"; //é‡�ç½®icon大å°� setIconSize(QSize(16, 16)); setItemSelectable(true); if (currentIndex() < 0) { qCDebug(ClientLogger) << "Current index < 0, setting to 0"; setCurrentIndex(0); } //设置为ä¸�å�¯ç¼–辑模å¼� setEditable(false); //下拉模å¼�å�–消信å�·å…³è�”,并释放警报控制 if (m_control) { qCDebug(ClientLogger) << "m_control is valid, disconnecting and deleting"; disconnect(m_control, &DAlertControl::alertChanged, this, &JobTypeComboBox::alertChanged); delete m_control; m_control = nullptr; } emit activated(0); DComboBox::showPopup(); //获å�–下拉视图容器 QFrame *viewContainer = findChild(); if (nullptr == m_customWidget) { qCDebug(ClientLogger) << "m_customWidget is null, adding custom widget"; //添加自定义布局 addCustomWidget(viewContainer); } if (m_customWidget && m_lstJobType.size() >= 20) { qCDebug(ClientLogger) << "Hiding custom widget, too many items"; m_customWidget->hide(); } //设置最大高度为400 if (viewContainer && viewContainer->height() > 400) { qCDebug(ClientLogger) << "View container height > 400, setting to 400"; viewContainer->setFixedHeight(400); } //é‡�新调整选中项的ä½�ç½® view()->scrollTo(view()->currentIndex(), QAbstractItemView::PositionAtCenter); } bool JobTypeComboBox::eventFilter(QObject *obj, QEvent *event) { // qCDebug(ClientLogger) << "JobTypeComboBox::eventFilter, obj:" << (obj ? obj->objectName() : "null") << "event type:" << event->type(); if (view() == obj && (event->type() == QEvent::Enter)) { // qCDebug(ClientLogger) << "Mouse enter view"; view()->setFocus(); } else if (m_addBtn == obj && (event->type() == QEvent::Enter)) { // qCDebug(ClientLogger) << "Mouse enter add button"; m_addBtn->setFocus(); } else if (view() == obj && event->type() == QEvent::FocusIn) { // qCDebug(ClientLogger) << "View focus in"; //列表框控件焦点进入事件 setItemSelectable(true); } else if (m_addBtn == obj && event->type() == QEvent::FocusIn) { // qCDebug(ClientLogger) << "Add button focus in"; //“添加按键â€�控件焦点进入事件 setItemSelectable(false); } else if (event->type() == QEvent::KeyPress) { // qCDebug(ClientLogger) << "KeyPress event"; QKeyEvent *kEvent = dynamic_cast(event); if (view() == obj && kEvent->key() == Qt::Key_Down) { // qCDebug(ClientLogger) << "Key_Down on view"; //焦点在列表框时的下方å�‘按键按下事件 if (m_addBtn && m_addBtn->isHighlight()) { // qCDebug(ClientLogger) << "Add button is highlighted, returning true"; return true; } if (m_hoverSelectedIndex == m_itemNumIndex - 1) { qCDebug(ClientLogger) << "Reached last item, moving focus to add button"; //列表框到达最å�Žä¸€é¡¹æ—¶çš„下方å�‘按键按下事件 //将焦点转移到“添加按键â€�控件上 m_addBtn->setFocus(); } } else if (m_addBtn == obj && kEvent->key() == Qt::Key_Up) { // qCDebug(ClientLogger) << "Key_Up on add button"; //焦点在m_addBtn时的上方å�‘按键按下事件 if (m_addBtn->isHighlight()) { qCDebug(ClientLogger) << "Add button is highlighted, moving focus to view"; //将焦点转移到列表控件上 view()->setFocus(); } } else if (m_addBtn && m_addBtn->isHighlight() && kEvent->key() == Qt::Key_Return) { qCDebug(ClientLogger) << "Key_Return on highlighted add button"; //回车事件 slotBtnAddItemClicked(); } //过滤掉m_addBtn的所有按键事件 if (m_addBtn == obj) { qCDebug(ClientLogger) << "Filtering key event for add button"; return true; } } return DComboBox::eventFilter(obj, event); } void JobTypeComboBox::slotBtnAddItemClicked() { qCDebug(ClientLogger) << "JobTypeComboBox::slotBtnAddItemClicked"; JobTypeComboBox::hidePopup(); setIconSize(QSize(0, 0)); //设置没有选中, // setCurrentIndex(-1); setEditable(true); setCurrentText(""); //设置为编辑模å¼�å�Žæ‰�会创建lineEdit m_control = new DAlertControl(this->lineEdit(), this); connect(m_control, &DAlertControl::alertChanged, this, &JobTypeComboBox::alertChanged); connect(lineEdit(), &QLineEdit::editingFinished, this, &JobTypeComboBox::slotEditingFinished); connect(lineEdit(), &QLineEdit::cursorPositionChanged, this, &JobTypeComboBox::slotEditCursorPositionChanged); emit signalAddTypeBtnClicked(); return; } void JobTypeComboBox::slotEditingFinished() { qCDebug(ClientLogger) << "JobTypeComboBox::slotEditingFinished"; //TODO:待优化,由于上下按键会匹é…�下拉列表内容,导致会调整lineEdit显示ä½�ç½® //当å‰�先改回设置显示图标的方法 // int oldPos = m_newPos; // QString str = lineEdit()->text(); // setCurrentIndex(-1); // setCurrentText(str); // lineEdit()->setCursorPosition(oldPos); emit editingFinished(); } void JobTypeComboBox::slotEditCursorPositionChanged(int oldPos, int newPos) { qCDebug(ClientLogger) << "JobTypeComboBox::slotEditCursorPositionChanged, oldPos:" << oldPos << "newPos:" << newPos; m_oldPos = oldPos; m_newPos = newPos; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/jobtypecombobox.h000066400000000000000000000036251523260663500314330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef JOBTYPECOMBOBOX_H #define JOBTYPECOMBOBOX_H #include "dschedule.h" #include "scheduledatamanage.h" #include "cpushbutton.h" #include "accountmanager.h" #include #include DWIDGET_USE_NAMESPACE class JobTypeComboBox : public DComboBox { Q_OBJECT public: explicit JobTypeComboBox(QWidget *parent = nullptr); ~JobTypeComboBox() override; void updateJobType(const AccountItem::Ptr&); QString getCurrentJobTypeNo(); void setCurrentJobTypeNo(const QString &strJobTypeNo); void setAlert(bool isAlert); bool isAlert() const; void showAlertMessage(const QString &text, int duration = 3000); void showAlertMessage(const QString &text, QWidget *follower, int duration = 3000); void setAlertMessageAlignment(Qt::Alignment alignment); void hideAlertMessage(); int getCurrentEditPosition() const; signals: void signalAddTypeBtnClicked(); void alertChanged(bool alert) const; void editingFinished(); public slots: protected slots: void slotBtnAddItemClicked(); void slotEditingFinished(); void slotEditCursorPositionChanged(int oldPos, int newPos); protected: void showPopup() override; bool eventFilter(QObject *, QEvent *) override; private: void initUI(); void addJobTypeItem(int idx, QString strColorHex, QString strJobType); void addCustomWidget(QFrame *); void setItemSelectable(bool status); private: QWidget *m_customWidget {nullptr}; CPushButton *m_addBtn {nullptr}; DScheduleType::List m_lstJobType; int m_hoverSelectedIndex = -1; //鼠标悬å�œçš„选项下标 int m_itemNumIndex = 0; //itemæ•°é‡� DAlertControl *m_control {nullptr}; QLineEdit *m_lineEdit {nullptr}; int m_oldPos = 0; int m_newPos = 0; }; #endif // JOBTYPECOMBOBOX_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/jobtypelistview.cpp000066400000000000000000000535731523260663500320330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "jobtypelistview.h" #include "cscheduleoperation.h" #include "commondef.h" #include "scheduletypeeditdlg.h" #include "schedulectrldlg.h" #include "accountmanager.h" #include "icalformat.h" #include "memorycalendar.h" #include #include #include #include #include #include #include #include #include #include #include //Qt::UserRole + 1,会影å“�item的高度 static const int RoleJobTypeInfo = Qt::UserRole + 2; static const int RoleJobTypeEditable = Qt::UserRole + 3; static const int RoleJobTypeLine = Qt::UserRole + 4; JobTypeListView::JobTypeListView(QWidget *parent) : QTableView(parent) { qCDebug(ClientLogger) << "JobTypeListView constructor"; initUI(); } JobTypeListView::~JobTypeListView() { qCDebug(ClientLogger) << "JobTypeListView destructor"; // JobTypeInfoManager::instance()->removeFromNoticeBill(this); } void JobTypeListView::initUI() { qCDebug(ClientLogger) << "JobTypeListView::initUI"; m_modelJobType = new QStandardItemModel(this); setModel(m_modelJobType); setFrameStyle(QFrame::NoFrame); setEditTriggers(QListView::NoEditTriggers); setSelectionMode(QListView::NoSelection); setFocusPolicy(Qt::NoFocus); setItemDelegate(new JobTypeListViewStyle(this)); setShowGrid(false); setMouseTracking(true); verticalHeader()->setMinimumSectionSize(0); horizontalHeader()->setStretchLastSection(true); horizontalHeader()->hide(); verticalHeader()->hide(); // updateJobType(); // åˆ�始化等待对è¯�框 m_waitDialog = new DDialog(this); m_waitDialog->setFixedSize(400, 280); m_waitDialog->setModal(true); m_waitDialog->setCloseButtonVisible(false); auto progress = new DSpinner(m_waitDialog); progress->setFixedSize(100, 100); progress->start(); m_waitDialog->addContent(progress, Qt::AlignCenter); connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, this, &JobTypeListView::updateJobType); connect(this, &QTableView::entered, this, [&](const QModelIndex & index) { if (!index.isValid()) return; DScheduleType info = index.data(RoleJobTypeInfo).value(); QString displayName = info.displayName(); if (!displayName.isEmpty()) { qCDebug(ClientLogger) << "Showing tooltip for schedule type:" << displayName; QToolTip::showText(QCursor::pos(), info.displayName()); } }); } bool JobTypeListView::viewportEvent(QEvent *event) { QTableView::viewportEvent(event); int indexCurrentHover; if (QEvent::HoverLeave == event->type()) { qCDebug(ClientLogger) << "JobTypeListView::viewportEvent HoverLeave"; QStandardItemModel *itemModel = qobject_cast(model()); if (nullptr == itemModel) { return true; } DStandardItem *itemJobType = dynamic_cast(itemModel->item(m_iIndexCurrentHover)); if (nullptr == itemJobType) { return true; } //typedef QList DViewItemActionList; for (DViewItemAction *a : itemJobType->actionList(Qt::Edge::RightEdge)) { a->setVisible(false); } m_iIndexCurrentHover = -1; } else if (QEvent::HoverEnter == event->type() || QEvent::HoverMove == event->type()) { QStandardItemModel *itemModel = qobject_cast(model()); if (nullptr == itemModel) { return true; } indexCurrentHover = indexAt(static_cast(event)->pos()).row(); if (indexCurrentHover != m_iIndexCurrentHover) { qCDebug(ClientLogger) << "JobTypeListView::viewportEvent hover index changed to:" << indexCurrentHover; DStandardItem *itemJobType; //éš�è—�æ­¤å‰�鼠标悬浮行的图标 if (m_iIndexCurrentHover >= 0) { itemJobType = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (nullptr != itemJobType) { for (DViewItemAction *a : itemJobType->actionList(Qt::Edge::RightEdge)) { a->setVisible(false); } } //typedef QList DViewItemActionList; } if (indexCurrentHover < 0) { return true; } //展示此å‰�鼠标悬浮行的图标 m_iIndexCurrentHover = indexCurrentHover; itemJobType = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (nullptr == itemJobType) { return true; } if (itemJobType->actionList(Qt::Edge::RightEdge).size() > 0) { for (DViewItemAction *a : itemJobType->actionList(Qt::Edge::RightEdge)) { a->setVisible(true); } } else { // 设置其他style时,转æ�¢æŒ‡é’ˆä¸ºç©º if (DStyle *ds = qobject_cast(style())) { Q_UNUSED(ds) auto actionExport = new DViewItemAction(Qt::AlignRight, QSize(30, 0), QSize(30, 0), true); actionExport->setIconVisibleInMenu(false); actionExport->setText(tr("export")); actionExport->setParent(this); connect(actionExport, &QAction::triggered, this, &JobTypeListView::slotExportScheduleType); if (!itemJobType->data(RoleJobTypeEditable).toBool()) { if (!itemJobType->data(RoleJobTypeLine).toBool()) { qCDebug(ClientLogger) << "JobTypeListView: Adding export action to non-editable item"; itemJobType->setActionList(Qt::Edge::RightEdge, { actionExport }); } return true; } auto actionEdit = new DViewItemAction(Qt::AlignVCenter, QSize(20, 20), QSize(20, 20), true); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) actionEdit->setIcon(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_edit_32px.svg")); #else // Qt5.11.3 兼容:旧版 DTK ä¸�支æŒ� loadNxPixmap,使用 QIcon 直接加载 actionEdit->setIcon(QIcon(":/icons/deepin/builtin/icons/dde_calendar_edit_32px.svg")); #endif actionEdit->setParent(this); connect(actionEdit, &QAction::triggered, this, &JobTypeListView::slotUpdateJobType); auto actionDelete = new DViewItemAction(Qt::AlignVCenter, QSize(20, 20), QSize(20, 20), true); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) actionDelete->setIcon(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_delete_32px.svg")); #else // Qt5.11.3 兼容:旧版 DTK ä¸�支æŒ� loadNxPixmap,使用 QIcon 直接加载 actionDelete->setIcon(QIcon(":/icons/deepin/builtin/icons/dde_calendar_delete_32px.svg")); #endif actionDelete->setParent(this); connect(actionDelete, &QAction::triggered, this, &JobTypeListView::slotDeleteJobType); qCDebug(ClientLogger) << "JobTypeListView: Adding edit, delete, and export actions to editable item"; itemJobType->setActionList(Qt::Edge::RightEdge, {actionEdit, actionDelete, actionExport}); } } } } return true; } bool JobTypeListView::updateJobType() { qCDebug(ClientLogger) << "JobTypeListView::updateJobType for account:" << m_account_id; AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) { qCWarning(ClientLogger) << "Failed to update job types: Account not found for id" << m_account_id; return false; } m_modelJobType->removeRows(0, m_modelJobType->rowCount());//先清ç�† m_iIndexCurrentHover = -1; DScheduleType::List lstJobType = account->getScheduleTypeList(); qCDebug(ClientLogger) << "JobTypeListView::updateJobType found" << lstJobType.size() << "schedule types"; int viewHeight = 0; for (int i = 0; i < lstJobType.size(); i++) { viewHeight += addJobTypeItem(*lstJobType[i]); } setFixedHeight(viewHeight); emit signalAddStatusChanged(canAdd()); return true; } void JobTypeListView::updateCalendarAccount(QString account_id) { qCDebug(ClientLogger) << "JobTypeListView::updateCalendarAccount account_id:" << account_id; m_account_id = account_id; updateJobType(); } void JobTypeListView::slotAddScheduleType() { qCDebug(ClientLogger) << "JobTypeListView::slotAddScheduleType"; AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) { qCWarning(ClientLogger) << "Failed to add schedule type: Account not found for id" << m_account_id; return; } ScheduleTypeEditDlg dialog(this); dialog.setAccount(account); //按ä¿�存键退出则触å�‘ä¿�存数æ�® if (QDialog::Accepted == dialog.exec()) { DScheduleType::Ptr type(new DScheduleType(dialog.newJsonType())); qCDebug(ClientLogger) << "Creating new schedule type:" << type->displayName(); account->createJobType(type); } } void JobTypeListView::slotImportScheduleType() { qCDebug(ClientLogger) << "JobTypeListView::slotImportScheduleType"; // 选择ICS文件 auto docDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); auto filename = QFileDialog::getOpenFileName(nullptr, tr("import ICS file"), docDir, "ICS (*.ics)"); if (filename.isEmpty()) { qCDebug(ClientLogger) << "Import cancelled: No file selected"; return; } auto fileinfo = QFileInfo(filename); if (!fileinfo.exists()) { qCWarning(ClientLogger) << "Import failed: ICS file does not exist:" << filename; return; } AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) { qCWarning(ClientLogger) << "Import failed: Account not found for id" << m_account_id; return; } // 从ics文件读å�–内置的基本信æ�¯ KCalendarCore::ICalFormat icalformat; QTimeZone timezone = QDateTime::currentDateTime().timeZone(); KCalendarCore::MemoryCalendar::Ptr cal(new KCalendarCore::MemoryCalendar(timezone)); // 先加载ICS文件内容,æ‰�能读å�–到自定义属性 auto ok = icalformat.load(cal, filename); if (!ok) { qCWarning(ClientLogger) << "can not load ics file from" << filename; return; } auto typeID = cal->nonKDECustomProperty("X-DDE-CALENDAR-TYPE-ID"); auto typeName = cal->nonKDECustomProperty("X-DDE-CALENDAR-TYPE-NAME"); auto typeColor = cal->nonKDECustomProperty("X-DDE-CALENDAR-TYPE-COLOR"); // 如果没有颜色,使用éš�机颜色 if (typeColor.isEmpty()) { auto colorList = account->getColorTypeList(); auto rindex = QRandomGenerator::global()->generate() % colorList.length(); typeColor = colorList[rindex]->colorCode(); qCDebug(ClientLogger) << "Using random color for import:" << typeColor; } // 如果没有显示å��,使用推è��的显示å�� if (typeName.isEmpty()) { typeName = cal->nonKDECustomProperty("X-WR-CALNAME"); } // 如果没有推è��显示å��,使用文件å�� if (typeName.isEmpty()) { typeName = fileinfo.baseName(); } // 仅使用å‰�二å��个字符,é�¿å…�显示å��过长 typeName = typeName.mid(0, 20); qCDebug(ClientLogger) << "Importing schedule type:" << typeName << "with color:" << typeColor; // 显示等待对è¯�框 m_waitDialog->show(); DScheduleType::Ptr type(new DScheduleType()); type->setColorCode(typeColor); type->setDisplayName(typeName); QEventLoop event; // 创建日程类型 account->createJobType(type, [&event, &typeID](CallMessge msg) { if (msg.code == 0) { // 记录创建的类型ID typeID = msg.msg.toString(); qCDebug(ClientLogger) << "Created schedule type with ID:" << typeID; } else { qCWarning(ClientLogger) << "Failed to create schedule type:" << msg.msg.toString(); } // 延迟一秒å�Žå†�退出 // 一æ�¥å�¯ä»¥é�¿å…�导入å°�文件时,进度过快引起等待对è¯�框闪çƒ� // 二æ�¥åœ¨å¯¼å…¥å¤§æ–‡ä»¶æ—¶å µå¡ždbus调用,延迟å�¯ä»¥é�¿å…�客户端在日程类型更新信å�·æ‰§è¡Œçš„æ§½å‡½æ•°è¢«å µå¡žã€‚ QTimer::singleShot(1000, &event, &QEventLoop::quit); }); // 等待日程创建完毕 event.exec(); // 导入ics文件 if (!typeID.isEmpty()) { qCDebug(ClientLogger) << "Importing ICS file:" << filename << "to type:" << typeID; account->importSchedule(filename, typeID, true, [&event](CallMessge msg) { event.quit(); }); // 等待导入完毕 event.exec(); m_waitDialog->hide(); } } void JobTypeListView::slotExportScheduleType() { qCDebug(ClientLogger) << "JobTypeListView::slotExportScheduleType"; DStandardItem *item = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (!item) { qCWarning(ClientLogger) << "Export failed: No item selected"; return; } AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) { qCWarning(ClientLogger) << "Export failed: Account not found for id" << m_account_id; return; } auto docDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); DScheduleType info = item->data(RoleJobTypeInfo).value(); auto filename = QFileDialog::getSaveFileName(nullptr, "", docDir + "/" + info.displayName() + ".ics", ""); if (filename.isEmpty()) { qCDebug(ClientLogger) << "Export cancelled: No file selected"; return; } QEventLoop event; m_waitDialog->show(); auto typeID = info.typeID(); qCDebug(ClientLogger) << "Exporting schedule type:" << info.displayName() << "to file:" << filename; account->exportSchedule(filename, typeID, [&filename, &event](CallMessge msg) { if (msg.code == 0) { qCDebug(ClientLogger) << "Export successful, showing file:" << filename; DDesktopServices::showFileItem(filename); } else { qCWarning(ClientLogger) << "Export failed:" << msg.msg.toString(); } QTimer::singleShot(1000, &event, &QEventLoop::quit); }); event.exec(); m_waitDialog->hide(); } bool JobTypeListView::canAdd() { AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) return false; //最多20个类型 int count = account->getScheduleTypeList().count(); qCDebug(ClientLogger) << "JobTypeListView::canAdd checking if can add more types, current count:" << count; return count < 20; } void JobTypeListView::setItemEnabled(bool b) { qCDebug(ClientLogger) << "JobTypeListView::setItemEnabled enabled:" << b; if (!m_modelJobType) return; for (int i = 0; i < m_modelJobType->rowCount(); ++i) { QStandardItem *item = m_modelJobType->item(i); item->setEnabled(b); } } int JobTypeListView::addJobTypeItem(const DScheduleType &info) { qCDebug(ClientLogger) << "JobTypeListView::addJobTypeItem adding type:" << info.displayName() << "ID:" << info.typeID(); int itemHeight = 0; DStandardItem *item = new DStandardItem; item->setData(QVariant::fromValue(info), RoleJobTypeInfo); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹æ�ƒé™�设置显示数æ�® item->setData(info.privilege() > 1, RoleJobTypeEditable); item->setData(false, RoleJobTypeLine); //首个 é�žé»˜è®¤æ—¥ç¨‹ç±»åž‹ï¼Œå‰�é�¢ 添加分割线 if (m_modelJobType->rowCount() > 1 && !m_modelJobType->item(m_modelJobType->rowCount() - 1)->data(RoleJobTypeEditable).toBool() && item->data(RoleJobTypeEditable).toBool()) { DStandardItem *itemLine = new DStandardItem; itemLine->setData(QVariant(), RoleJobTypeInfo); itemLine->setData(false, RoleJobTypeEditable); itemLine->setData(true, RoleJobTypeLine); m_modelJobType->appendRow(itemLine); setRowHeight(m_modelJobType->rowCount() - 1, 19); itemHeight += 19; } m_modelJobType->appendRow(item); setRowHeight(m_modelJobType->rowCount() - 1, 46); itemHeight += 46; return itemHeight; } void JobTypeListView::slotUpdateJobType() { qCDebug(ClientLogger) << "JobTypeListView::slotUpdateJobType"; int index = indexAt(mapFromGlobal(QCursor::pos())).row(); if (index < 0 || index >= m_modelJobType->rowCount()) { qCWarning(ClientLogger) << "Update failed: Invalid index" << index; return; } QStandardItem *item = m_modelJobType->item(index); if (!item) { qCWarning(ClientLogger) << "Update failed: Item not found at index" << index; return; } AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) { qCWarning(ClientLogger) << "Update failed: Account not found for id" << m_account_id; return; } DScheduleType info = item->data(RoleJobTypeInfo).value(); qCDebug(ClientLogger) << "Updating schedule type:" << info.displayName(); ScheduleTypeEditDlg dialog(info, this); dialog.setAccount(account); if (QDialog::Accepted == dialog.exec()) { DScheduleType::Ptr type(new DScheduleType(dialog.newJsonType())); if (type->typeID() == "0") { qCDebug(ClientLogger) << "Creating new schedule type from update"; account->createJobType(type); } else { qCDebug(ClientLogger) << "Updating existing schedule type:" << type->typeID(); account->updateScheduleType(type); } } } void JobTypeListView::slotDeleteJobType() { qCDebug(ClientLogger) << "JobTypeListView::slotDeleteJobType"; DStandardItem *item = dynamic_cast(m_modelJobType->item(m_iIndexCurrentHover)); if (!item) { qCWarning(ClientLogger) << "Delete failed: No item selected"; return; } AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_account_id); if (!account) { qCWarning(ClientLogger) << "Delete failed: Account not found for id" << m_account_id; return; } DScheduleType info = item->data(RoleJobTypeInfo).value(); //TODO:获å�–日程编å�· QString typeNo = info.typeID(); qCDebug(ClientLogger) << "Deleting schedule type:" << info.displayName() << "ID:" << typeNo; //TODO:æ ¹æ�®å¸�户获å�–对应信æ�¯ if (account->scheduleTypeIsUsed(typeNo)) { qCDebug(ClientLogger) << "Schedule type is in use, showing confirmation dialog"; CScheduleCtrlDlg msgBox(this); msgBox.setText(tr("You are deleting an event type.")); msgBox.setInformativeText(tr("All events under this type will be deleted and cannot be recovered.")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Delete", "button"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "Delete cancelled by user"; return; } else if (msgBox.clickButton() == 1) { //删除日程类型时,å�Žç«¯ä¼šåˆ é™¤å…³è�”日程 qCDebug(ClientLogger) << "User confirmed deletion of schedule type and associated events"; account->deleteScheduleTypeByID(typeNo); } } else { qCDebug(ClientLogger) << "Schedule type not in use, deleting directly"; account->deleteScheduleTypeByID(typeNo); } } void JobTypeListViewStyle::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { // qCDebug(ClientLogger) << "JobTypeListViewStyle::paint"; QStyleOptionViewItem opt = option; //draw line bool isDrawLine = index.data(RoleJobTypeLine).toBool(); if (isDrawLine) { // qCDebug(ClientLogger) << "JobTypeListViewStyle::paint draw line"; int y = opt.rect.y() + opt.rect.height() / 2; int x = opt.rect.x(); int w = x + opt.rect.width(); painter->fillRect(x, y, w, 1, qApp->palette().color(QPalette::Button)); return; } opt.rect.adjust(0, 5, 0, -5); DStyledItemDelegate::paint(painter, opt, index); DScheduleType info = index.data(RoleJobTypeInfo).value(); //draw icon painter->save(); painter->setPen(QPen(QColor(0, 0, 0, int(255 * 0.1)), 2)); painter->setBrush(QColor(info.typeColor().colorCode())); painter->drawEllipse(QRect(opt.rect.x() + 12, opt.rect.y() + 10, 16, 16)); //draw text painter->setPen(qApp->palette().color(QPalette::Text)); QFontMetrics fontMetr(painter->font()); //如果为焦点,且ä¸�为系统自带颜色 if (opt.state & QStyle::State_HasFocus && !info.typeColor().isSysColorInfo()) { } JobTypeListView *view = qobject_cast(parent()); //如果当å‰�çš„index为hover状æ€�则空出图标ä½�ç½® QString displayName = info.displayName(); // 获å�–当å‰�字体的信æ�¯ QFontMetrics fontMetrics(opt.font); // 当å‰�文字长度是å�¦å¤§äºŽæ˜¾ç¤ºæ¡†é•¿åº¦ if (fontMetrics.horizontalAdvance(displayName) > (opt.rect.width() - 90)) { displayName = fontMetrics.elidedText(displayName, Qt::ElideRight, opt.rect.width() - 90); // 截å�–字符串长度用...代替 } if (view && view->m_iIndexCurrentHover == index.row()) { painter->drawText(opt.rect.adjusted(38, 0, -10, 0), Qt::AlignVCenter | Qt::AlignLeft, displayName); } else { painter->drawText(opt.rect.adjusted(38, 0, -10, 0), Qt::AlignVCenter | Qt::AlignLeft, displayName); } painter->restore(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/jobtypelistview.h000066400000000000000000000037411523260663500314700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef JOBTYPELISTVIEW_H #define JOBTYPELISTVIEW_H #include "scheduledatamanage.h" #include "daccount.h" #include "accountitem.h" #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class JobTypeListViewStyle; class JobTypeListView : public QTableView { Q_OBJECT public: explicit JobTypeListView(QWidget *parent = nullptr); ~JobTypeListView(); /** * @brief canAdd 是å�¦å�¯ä»¥ç»§ç»­æ–°å¢žç±»åž‹ */ bool canAdd(); void setItemEnabled(bool b); protected: bool viewportEvent(QEvent *event) override; private: void initUI();//åˆ�始化 /** * @brief addJobTypeItem 添加item * @return 返回item的高度 */ int addJobTypeItem(const DScheduleType &info); //新增一行ã€�日程类型】数æ�® signals: /** * @brief signalAddStatusChanged ä¿¡å�·ï¼šæ˜¯å�¦å�¯ä»¥ç»§ç»­æ–°å¢žç±»åž‹ */ void signalAddStatusChanged(bool); public slots: void slotUpdateJobType(); void slotDeleteJobType(); void slotAddScheduleType(); // 导入ics文件 void slotImportScheduleType(); // 导出ics文件 void slotExportScheduleType(); bool updateJobType(); void updateCalendarAccount(QString account_id); private: QStandardItemModel *m_modelJobType {nullptr}; int m_iIndexCurrentHover = -1; friend JobTypeListViewStyle; QString m_account_id; DDialog *m_waitDialog = nullptr; }; class JobTypeListViewStyle : public DStyledItemDelegate { Q_OBJECT public: explicit JobTypeListViewStyle(QAbstractItemView *parent = nullptr) : DStyledItemDelegate(parent) {} protected: // painting void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; }; #endif // JOBTYPELISTVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/labelwidget.cpp000066400000000000000000000017621523260663500310440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "labelwidget.h" #include "commondef.h" #include #include LabelWidget::LabelWidget(QWidget *parent) : QLabel(parent) { // qCDebug(ClientLogger) << "LabelWidget constructor"; //设置焦点选中类型 setFocusPolicy(Qt::FocusPolicy::TabFocus); } LabelWidget::~LabelWidget() { // qCDebug(ClientLogger) << "LabelWidget destructor"; } void LabelWidget::paintEvent(QPaintEvent *ev) { QPainter painter(this); if (hasFocus()) { // qCDebug(ClientLogger) << "LabelWidget paintEvent: has focus, drawing focus rect"; //有焦点,绘制焦点 QStyleOptionFocusRect option; option.initFrom(this); option.backgroundColor = palette().color(QPalette::Window); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } QLabel::paintEvent(ev); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/labelwidget.h000066400000000000000000000006251523260663500305060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LABELWIDGET_H #define LABELWIDGET_H #include class LabelWidget : public QLabel { public: explicit LabelWidget(QWidget *parent = nullptr); ~LabelWidget() override; protected: void paintEvent(QPaintEvent *ev) override; }; #endif // LABELWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/lunarcalendarwidget.cpp000066400000000000000000000422531523260663500326000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarcalendarwidget.h" #include "lunarmanager.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include /** * 实现的效果:ä¿�è¯�原本日历ä¸�å�˜çš„å‰�æ��下,1.增加阴历年ã€�2.增加阴历日ã€�3.增加控件底部留白 * 1.增加阴历年 * 添加QLabel * * 2.增加阴历日 * é‡�新绘制item * 相关算法:item.height = 2px空心圆 + 1.5px空白 + 实心圆.直径 + 2px空心圆 + 1.5px空白 + 阴历日.font.height * 实心圆.直径 = 阳历日.font.height = 阴历日.font.height * 实心圆.直径 = (item.height - 7) / 2 * * 如下é�¢ä»£ç �: * int d = (rect.height() - 7) / 2;//阳历日.font.height * int h = d + 7;//阳历日在的rect的高度 * * 3.增加控件底部留白 * 添加固定高度的QWidget **/ //底部留空10px static const int BottomSpacing = 10; DWIDGET_USE_NAMESPACE class CalenderStyle : public QProxyStyle { public: CalenderStyle() {} /** * @brief getColor 获å�–对应palette的颜色 */ QColor getColor(const QStyleOption *option, DPalette::ColorType type, const QWidget *widget) const; QColor getColor(const QStyleOption *option, QPalette::ColorRole role) const; /** * @brief drawCalenderEllipse 绘制圆 */ void drawCalenderEllipse(QPainter *p, const QRect &rect, int offset) const; /** * @brief drawItemViewSelected 绘制选中样å¼� */ void drawItemViewSelected(QPainter *p, const QStyleOption *opt) const; /** * @brief drawItemViewFocus 绘制焦点样å¼� */ void drawItemViewFocus(QPainter *p, const QStyleOption *opt, const QWidget *w) const; /** * @brief getLunarYearDesc 获å�–阴历年æ��è¿° */ QString getLunarYearDesc(const QDate &date) const; /** * @brief getLunarDayName 获å�–阴历日 */ QString getLunarDayName(const QDate &date) const; /** * @brief updateLunarInfo 更新阴历信æ�¯ */ void updateLunarInfo(const QDate &date) const; protected: void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = nullptr) const override; private: mutable QMap m_caHuangLiDayMap; }; QColor CalenderStyle::getColor(const QStyleOption *option, DPalette::ColorType type, const QWidget *widget) const { // qCDebug(ClientLogger) << "CalenderStyle::getColor - DPalette::ColorType" << type; const DPalette &pa = DPaletteHelper::instance()->palette(widget, option->palette); return pa.brush(type).color(); } QColor CalenderStyle::getColor(const QStyleOption *option, QPalette::ColorRole role) const { // qCDebug(ClientLogger) << "CalenderStyle::getColor - QPalette::ColorRole" << role; return option->palette.brush(role).color(); } void CalenderStyle::drawCalenderEllipse(QPainter *p, const QRect &rect, int offset) const { // qCDebug(ClientLogger) << "CalenderStyle::drawCalenderEllipse with offset:" << offset; int d = (rect.height() - 7) / 2; int h = d + 7; QRect r = rect.adjusted(0, 0, 0, -(rect.height() - h)); QRect ellipese = r; ellipese.setWidth(ellipese.height()); ellipese.moveCenter(r.center()); p->drawEllipse(ellipese.adjusted(offset, offset, -offset, -offset)); } void CalenderStyle::drawItemViewSelected(QPainter *p, const QStyleOption *opt) const { // qCDebug(ClientLogger) << "CalenderStyle::drawItemViewSelected"; if (opt->state & QStyle::State_Selected) { // qCDebug(ClientLogger) << "Drawing selected item view"; QRect rect = opt->rect; int d = (rect.height() - 7) / 2; int h = d + 7; QRect r = rect.adjusted(0, 0, 0, -(rect.height() - h)); QRect ellipese = r; ellipese.setWidth(ellipese.height()); ellipese.moveCenter(r.center()); p->setBrush(opt->palette.brush(QPalette::Highlight)); p->setPen(Qt::NoPen); p->setRenderHint(QPainter::Antialiasing); p->drawEllipse(ellipese.adjusted(1, 1, -1, -1)); } } void CalenderStyle::drawItemViewFocus(QPainter *p, const QStyleOption *opt, const QWidget *w) const { // qCDebug(ClientLogger) << "CalenderStyle::drawItemViewFocus"; const QColor &focus_color = getColor(opt, QPalette::Highlight); if (!focus_color.isValid() || focus_color.alpha() == 0) { qCDebug(ClientLogger) << "Focus color invalid or transparent, returning"; return; } p->setRenderHint(QPainter::Antialiasing); QPen pen; pen.setWidth(2); pen.setColor(focus_color); p->setPen(pen); p->setBrush(Qt::NoBrush); bool calendar = w && (w->objectName() == "qt_calendar_calendarview"); // qCDebug(ClientLogger) << "Is calendar view:" << calendar; pen.setWidth(2); int offset = 1; // 先画内框(黑or白) pen.setColor(getColor(opt, QPalette::Base)); p->setPen(pen); if (calendar) { // qCDebug(ClientLogger) << "Drawing inner frame for calendar"; pen.setWidth(3); p->setPen(pen); offset = 2; drawCalenderEllipse(p, opt->rect, offset); } // å†�画外框(活动色å�³ç„¦ç‚¹ï¼‰ pen.setColor(focus_color); p->setPen(pen); if (calendar) { // qCDebug(ClientLogger) << "Drawing outer frame for calendar"; pen.setWidth(2); p->setPen(pen); offset = 1; drawCalenderEllipse(p, opt->rect, offset); } } QString CalenderStyle::getLunarDayName(const QDate &date) const { qCDebug(ClientLogger) << "CalenderStyle::getLunarDayName for date:" << date.toString(); updateLunarInfo(date); CaHuangLiDayInfo &info = m_caHuangLiDayMap[date]; return info.mLunarDayName; } QString CalenderStyle::getLunarYearDesc(const QDate &date) const { qCDebug(ClientLogger) << "CalenderStyle::getLunarYearDesc for date:" << date.toString(); updateLunarInfo(date); CaHuangLiDayInfo &info = m_caHuangLiDayMap[date]; return info.mGanZhiYear + info.mZodiac + "å¹´ " + info.mLunarMonthName; } void CalenderStyle::updateLunarInfo(const QDate &date) const { qCDebug(ClientLogger) << "CalenderStyle::updateLunarInfo for date:" << date.toString(); if (m_caHuangLiDayMap.count() > 100) { qCDebug(ClientLogger) << "Map size exceeds 100, clearing cache"; m_caHuangLiDayMap.clear(); } if (!m_caHuangLiDayMap.contains(date)) { qCDebug(ClientLogger) << "Date not in cache, fetching lunar info"; CaHuangLiDayInfo info = gLunarManager->getHuangLiDay(date); m_caHuangLiDayMap[date] = info; } } void CalenderStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const { qCDebug(ClientLogger) << "CalenderStyle::drawControl element:" << element; const QWidget *w = widget; const QStyleOption *opt = option; QPainter *p = painter; while (element == CE_ItemViewItem) { if (w && w->objectName() == "qt_calendar_calendarview") { // qCDebug(ClientLogger) << "Drawing calendar view item"; if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { LunarCalendarWidget *calendar = qobject_cast(w->parent()); if (!calendar) { qCDebug(ClientLogger) << "Calendar widget not found, breaking"; break; } const QAbstractTableModel *model = qobject_cast(vopt->index.model()); if (!model) { qCDebug(ClientLogger) << "Model not found, breaking"; break; } //获å�–阳历和阴历 QString dayName; QString dayNumber = vopt->index.data().toString(); //获å�–该item的显示天。若为周x则为0 int day = vopt->index.data().toInt(); //该item的时间 QDate curDate = QDate(calendar->yearShown(), calendar->monthShown(), 1); // qCDebug(ClientLogger) << "Processing item with day:" << day << "initial date:" << curDate.toString(); //显示天的item需è¦�获å�–æ¯�个item的显示时间 if (day > 0) { //如果是第一行会显示上个月的日期 if (vopt->index.row() < 2 && day > 20) { // qCDebug(ClientLogger) << "Adjusting to previous month"; curDate = curDate.addMonths(-1); } else if (vopt->index.row() > 3 && day < 15) { //如果显示行数大于3且显示的天å°�于15则表示是下个月 // qCDebug(ClientLogger) << "Adjusting to next month"; curDate = curDate.addMonths(1); } curDate.setDate(curDate.year(), curDate.month(), day); dayName = getLunarDayName(curDate); // qCDebug(ClientLogger) << "Final date:" << curDate.toString() << "lunar day:" << dayName; //更新阴历年æ��è¿° int selectedYear = calendar->yearShown(); int selectedMonth = calendar->monthShown(); //如果为焦点状æ€�,则根æ�®è¯¥item的日期设置年份时间 if (vopt->state & QStyle::State_HasFocus) { // qCDebug(ClientLogger) << "Item has focus, updating lunar year text"; QDate selectedDate = QDate(selectedYear, selectedMonth, day); calendar->setLunarYearText(getLunarYearDesc(selectedDate)); } } p->save(); p->setClipRect(vopt->rect); //绘制ç¦�用项 if (!(vopt->state & QStyle::State_Enabled)) { // qCDebug(ClientLogger) << "Drawing disabled item"; p->save(); p->setPen(Qt::NoPen); p->setBrush(getColor(vopt, DPalette::Window)); p->drawRect(vopt->rect); p->restore(); } // 绘制当å‰�选中项 drawItemViewSelected(p, vopt); // draw the text if (!vopt->text.isEmpty()) { // qCDebug(ClientLogger) << "Drawing text:" << vopt->text; QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled; if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; QColor colorOrg; QColor colorDisable = qApp->palette().brush(QPalette::Disabled, QPalette::Text).color(); if (vopt->state & QStyle::State_Selected) { colorOrg = vopt->palette.color(cg, QPalette::HighlightedText); } else { colorOrg = vopt->palette.color(cg, QPalette::Text); } p->save(); const QRect rect = vopt->rect; int d = (rect.height() - 7) / 2; if (vopt->index.row() == 0) { // qCDebug(ClientLogger) << "Drawing header row text"; p->setPen(colorOrg); p->drawText(vopt->rect, Qt::AlignCenter, dayNumber); } else { // qCDebug(ClientLogger) << "Drawing day number and lunar day"; int h = d + 7; p->setPen(colorOrg); p->drawText(rect.adjusted(0, 0, 0, -(rect.height() - h)), Qt::AlignCenter, dayNumber); p->setPen(colorDisable); p->drawText(rect.adjusted(0, h, 0, 0), Qt::AlignCenter, dayName); } p->restore(); } //绘制日历分割线 if (vopt->index.row() == 0) { // qCDebug(ClientLogger) << "Drawing calendar separator line for column:" << vopt->index.column(); p->save(); QColor color = getColor(vopt, DPalette::FrameBorder, w); color.setAlpha(static_cast(255 * 0.05)); QPen pen(color, 2); p->setPen(pen); int margins = DStyle::pixelMetric(proxy(), DStyle::PM_ContentsMargins); if (vopt->index.column() == 0) p->drawLine(vopt->rect.bottomLeft() + QPoint(margins, 0), vopt->rect.bottomRight()); else if (vopt->index.column() == model->columnCount() - 1) { p->drawLine(vopt->rect.bottomLeft(), vopt->rect.bottomRight() - QPoint(margins, 0)); } else { p->drawLine(vopt->rect.bottomLeft(), vopt->rect.bottomRight()); } p->restore(); } // draw the focus rect if (vopt->state & QStyle::State_HasFocus) { // qCDebug(ClientLogger) << "Drawing focus rectangle"; QStyleOptionFocusRect o; o.QStyleOption::operator=(*vopt); o.rect = proxy()->subElementRect(SE_ItemViewItemFocusRect, vopt, w); o.state |= QStyle::State_KeyboardFocusChange; o.state |= QStyle::State_Item; QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) ? QPalette::Normal : QPalette::Disabled; o.backgroundColor = vopt->palette.color(cg, (vopt->state & QStyle::State_Selected) ? QPalette::Highlight : QPalette::Window); drawItemViewFocus(p, vopt, w); } p->restore(); return; } } break; } //while QProxyStyle::drawControl(element, option, painter, widget); } LunarCalendarWidget::LunarCalendarWidget(QWidget *parent) : QCalendarWidget(parent) , m_style(new CalenderStyle) { qCDebug(ClientLogger) << "LunarCalendarWidget constructor"; QWidget *w = findChild("qt_calendar_calendarview"); if (w) w->setStyle(m_style); QVBoxLayout *layoutV = qobject_cast(layout()); m_lunarLabel = new QLabel(this); m_lunarLabel->setObjectName("lunarLabel"); m_lunarLabel->setAutoFillBackground(true); m_lunarLabel->setBackgroundRole(QPalette::Base); m_lunarLabel->setAlignment(Qt::AlignCenter); layoutV->insertWidget(1, m_lunarLabel); //底部留空10px QLabel *label = new QLabel(this); m_lunarLabel->setObjectName("BottomSpacingLabel"); label->setAutoFillBackground(true); label->setBackgroundRole(QPalette::Base); label->setFixedHeight(BottomSpacing); layoutV->insertWidget(3, label); } LunarCalendarWidget::~LunarCalendarWidget() { qCDebug(ClientLogger) << "LunarCalendarWidget destructor"; //Sets the widget's GUI style to style. The ownership of the style object is not transferred. //需手动删除 delete m_style; } void LunarCalendarWidget::setLunarYearText(const QString &text) { qCDebug(ClientLogger) << "LunarCalendarWidget::setLunarYearText:" << text; if (m_lunarLabel->text() != text) m_lunarLabel->setText(text); } QString LunarCalendarWidget::lunarYearText() { qCDebug(ClientLogger) << "LunarCalendarWidget::lunarYearText"; return m_lunarLabel->text(); } QSize LunarCalendarWidget::minimumSizeHint() const { qCDebug(ClientLogger) << "LunarCalendarWidget::minimumSizeHint"; QTableView *view = findChild("qt_calendar_calendarview"); if (!view) { qCDebug(ClientLogger) << "Calendar view not found, returning empty size"; return QSize(); } QAbstractItemModel *model = view->model(); if (!model) { qCDebug(ClientLogger) << "Model not found, returning empty size"; return QSize(); } QWidget *navigationbar = findChild("qt_calendar_navigationbar"); if (!navigationbar) { qCDebug(ClientLogger) << "Navigation bar not found, returning empty size"; return QSize(); } int rowcount = model->rowCount(); int hf = QFontMetrics(this->font()).height(); //原生日历的宽度 QSize old = QCalendarWidget::minimumSizeHint(); int w = old.width(); //navigationbar的高度 int h = navigationbar->minimumSizeHint().height(); //m_lunarLabel的高度 h += m_lunarLabel->minimumSizeHint().height(); //CalendarView的高度 h += (hf * 2 + 7) * rowcount; //底部留空 h += BottomSpacing; qCDebug(ClientLogger) << "Calculated minimum size:" << QSize(w, h); return QSize(w, h); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/lunarcalendarwidget.h000066400000000000000000000016061523260663500322420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARCALENDARWIDGET_H #define LUNARCALENDARWIDGET_H #include class QLabel; class CalenderStyle; class LunarCalendarWidget : public QCalendarWidget { Q_OBJECT public: explicit LunarCalendarWidget(QWidget *parent = nullptr); virtual ~LunarCalendarWidget(); /** * @brief setLunarYearText 设置阴历年æ��述语 * @param text */ void setLunarYearText(const QString &text); /** * @brief lunarYearText 返回阴历年æ��述语 * @return */ QString lunarYearText(); protected: virtual QSize minimumSizeHint() const override; private: QLabel *m_lunarLabel = nullptr;//阴历年的label CalenderStyle *m_style = nullptr;//阴历相关样å¼� }; #endif // LUNARCALENDARWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/monthbrefwidget.cpp000066400000000000000000000330711523260663500317470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthbrefwidget.h" #include "constants.h" #include "scheduledatamanage.h" #include "calendarglobalenv.h" #include "commondef.h" #include #include #include #include #include #include QDate MonthBrefWidget::GlobalData::m_selectedMonth = QDate(); QDate MonthBrefWidget::GlobalData::m_selectedDate = QDate(); MonthBrefWidget::MonthBrefWidget(QWidget *parent) : QWidget(parent) , m_globalData(new GlobalData) { // qCDebug(ClientLogger) << "MonthBrefWidget constructor"; QGridLayout *gridLayout = new QGridLayout(this); gridLayout->setSpacing(0); gridLayout->setContentsMargins(0, 0, 0, 0); for (int i = 0; i < DDEYearCalendar::RectSizeOfEveryMonth; ++i) { CMonthDayRectWidget *item = new CMonthDayRectWidget(m_globalData, this); m_DayItem.append(item); gridLayout->addWidget(item, i/7, i%7, 1, 1, Qt::AlignCenter); connect(item, &CMonthDayRectWidget::signalClicked, this, &MonthBrefWidget::signalPressDate); connect(item, &CMonthDayRectWidget::signalDoubleClick, this, &MonthBrefWidget::signalDoubleClickDate); } this->setLayout(gridLayout); } MonthBrefWidget::~MonthBrefWidget() { // qCDebug(ClientLogger) << "MonthBrefWidget destructor"; delete m_globalData; } /** * @brief MonthBrefWidget::setDate * 设置显示的月 * @param monthDate 待显示的月日期 */ void MonthBrefWidget::setShowMonthDate(const QDate& monthDate) { qCDebug(ClientLogger) << "MonthBrefWidget::setShowMonthDate:" << monthDate.toString(); //获å�–当月第一天 QDate date = QDate(monthDate.year(), monthDate.month(), 1); int firstday = CalendarManager::getInstance()->getFirstDayOfWeek(); int day = date.dayOfWeek(); //计算当å‰�月日历第一天该显示的时间 date = date.addDays(-(day-firstday+7)%7); qCDebug(ClientLogger) << "First day to display:" << date.toString(); for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setDate(date); date = date.addDays(1); } //设置显示的月 m_globalData->m_showMonthDate = monthDate; update(); } /** * @brief MonthBrefWidget::setHasScheduleDateSet * 设置å�«æœ‰æ—¥ç¨‹çš„æ—¥æœŸé›†å�ˆ * @param hasScheduleSet */ void MonthBrefWidget::setHasScheduleDateSet(const QSet &hasScheduleSet) { qCDebug(ClientLogger) << "MonthBrefWidget::setHasScheduleDateSet, size:" << hasScheduleSet.size(); //清空原有标识 for (int i = 0; i < 32; ++i) { m_globalData->m_scheduleDateFlag[i] = false; } //æ ¹æ�®æ—¥ç¨‹æ‰€åœ¨å¤©è®¾ç½®æ ‡è¯† for (QDate date:hasScheduleSet) { if (m_globalData->isBelongMonth(date)) { // qCDebug(ClientLogger) << "Setting schedule flag for date:" << date.toString(); m_globalData->m_scheduleDateFlag[date.day()] = true; } } update(); } /** * @brief MonthBrefWidget::setHasSearchScheduleSet * 设置å�«æœ‰æ�œç´¢æ—¥ç¨‹çš„æ—¥æœŸé›†å�ˆ * @param hasScheduleSet */ void MonthBrefWidget::setHasSearchScheduleSet(const QSet &hasScheduleSet) { // qCDebug(ClientLogger) << "MonthBrefWidget::setHasSearchScheduleSet, size:" << hasScheduleSet.size(); //清空原有标识 for (int i = 0; i < 32; ++i) { m_globalData->m_searchedDateFlag[i] = false; } //æ ¹æ�®æ—¥ç¨‹æ‰€åœ¨å¤©è®¾ç½®æ ‡è¯† for (QDate date:hasScheduleSet) { if (m_globalData->isBelongMonth(date)) { // qCDebug(ClientLogger) << "Setting search flag for date:" << date.toString(); m_globalData->m_searchedDateFlag[date.day()] = true; } } update(); } /** * @brief MonthBrefWidget::mousePressEvent * 鼠标按下事件 * @param event */ void MonthBrefWidget::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "MonthBrefWidget::mousePressEvent"; if (event->source() == Qt::MouseEventSynthesizedByQt) { qCDebug(ClientLogger) << "MonthBrefWidget::mousePressEvent - touch event detected"; //如果为触摸转æ�¢åˆ™è®¾ç½®è§¦æ‘¸çжæ€�和触摸开始å��æ ‡ m_touchState = 1; m_touchBeginPoint = event->pos(); QWidget::mousePressEvent(event); } } /** * @brief MonthBrefWidget::mouseReleaseEvent 鼠标释放事件 * @param event */ void MonthBrefWidget::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "MonthBrefWidget::mouseReleaseEvent"; if (event->source() == Qt::MouseEventSynthesizedByQt) { qCDebug(ClientLogger) << "MonthBrefWidget::mouseReleaseEvent - touch event released"; m_touchState = 0; QWidget::mouseReleaseEvent(event); } mouseMoveEvent(event); } /** * @brief MonthBrefWidget::mouseMoveEvent 鼠标移动事件,设置hover状æ€� * @param event */ void MonthBrefWidget::mouseMoveEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "MonthBrefWidget::mouseMoveEvent"; if (event->source() == Qt::MouseEventSynthesizedByQt) { QPoint currentPoint = event->pos(); //如果移动è·�离大与5则为触摸移动状æ€� if (QLineF(m_touchBeginPoint, currentPoint).length() > 5) { qCDebug(ClientLogger) << "MonthBrefWidget::mouseMoveEvent - touch movement detected"; m_touchState = 2; } QWidget::mouseMoveEvent(event); } } CMonthDayRectWidget::CMonthDayRectWidget(MonthBrefWidget::GlobalData* globalData, QWidget *parent) : QPushButton(parent) , m_globaldata(globalData) { // qCDebug(ClientLogger) << "CMonthDayRectWidget constructor"; setMinimumSize(10, 10); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); setFocusPolicy(Qt::NoFocus); setTheMe(DGuiApplicationHelper::instance()->themeType()); //系统主题切æ�¢ä¿¡å�· QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this,&CMonthDayRectWidget::setTheMe); } /** * @brief CMonthDayRectWidget::setTheMe * 系统主题å�˜åŒ– * @param type */ void CMonthDayRectWidget::setTheMe(int type) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::setTheMe with type:" << type; CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Setting light theme color"; m_ceventColor = QColor(255, 93, 0); } else if (type == 2) { // qCDebug(ClientLogger) << "Setting dark theme color"; m_ceventColor = QColor(204, 77, 3); } update(); } /** * @brief CMonthDayRect::setDate * 设置当天的时间 * @param date */ void CMonthDayRectWidget::setDate(const QDate &date) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::setDate:" << date.toString(); m_date = date; } /** * @brief CMonthDayRect::getDate * 获å�–当天的时间 * @return */ QDate CMonthDayRectWidget::getDate() const { // qCDebug(ClientLogger) << "CMonthDayRectWidget::getDate:" << m_date.toString(); return m_date; } /** * @brief CMonthDayRectWidget::mousePressEvent * 鼠标按下事件 * @param event */ void CMonthDayRectWidget::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::mousePressEvent for date:" << m_date.toString(); //å› å�Œå‡»ä¼šäº§ç”Ÿä¸¤æ¬¡æŒ‰ä¸‹äº‹ä»¶ï¼Œç¬¬äºŒæ¬¡æŒ‰ä¸‹äº‹ä»¶è§¦å�‘在å�Œå‡»äº‹ä»¶è§¦å�‘å�Žï¼Œå�Œå‡»å�Žè¦�跳转页é�¢ï¼Œå› æ­¤åœ¨æŒ‰ä¸‹æ—¶åˆ¤æ–­æœ¬æŽ§ä»¶æ˜¯å�¦å‡ºçŽ°æ˜¾ç¤ºçŠ¶æ€�å†�进行处ç�† if (event->button() == Qt::LeftButton && isVisible()) { qCDebug(ClientLogger) << "Left button clicked and widget visible"; m_pressed = true; //ä¿�存日程悬浮框显示ä½�ç½® CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, mapToGlobal(QPoint(width()/2,height()/2))); m_globaldata->setSelectedDate(m_date); emit signalClicked(m_date); } QWidget::mousePressEvent(event); } /** * @brief CMonthDayRectWidget::mouseDoubleClickEvent * é¼ æ ‡å�Œå‡»äº‹ä»¶ * @param event */ void CMonthDayRectWidget::mouseDoubleClickEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::mouseDoubleClickEvent for date:" << m_date.toString(); if (event->button() == Qt::LeftButton) { qCDebug(ClientLogger) << "Double click with left button, emitting signal"; emit signalDoubleClick(m_date); } QWidget::mouseDoubleClickEvent(event); } /** * @brief CMonthDayRectWidget::mouseReleaseEvent * 鼠标释放事件 * @param event */ void CMonthDayRectWidget::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::mouseReleaseEvent for date:" << m_date.toString(); if (event->button() == Qt::LeftButton) { qCDebug(ClientLogger) << "Left button released"; m_pressed = false; } update(); QWidget::mouseReleaseEvent(event); } /** * @brief CMonthDayRectWidget::paintEvent * 绘制日期以å�Šå½“天状æ€� * @param event */ void CMonthDayRectWidget::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::paintEvent for date:" << m_date.toString(); //获å�–待绘制的文字 QString text = QString::number(m_date.day()); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); //字体跟éš�界é�¢å¤§å°� qreal w = this->width(); qreal h = this->height(); const qreal r = w > h ? h: w; QRectF rectf(qRound((w-r)/2), qRound((h-r)/2), r, r); //æ ¹æ�®é«˜åº¦å’Œå®½åº¦è®¾ç½®æ—¶é—´å­—体的大å°� QFont font; font.setPixelSize(int(r/20.0*12)); painter.setFont(font); QColor highColor = DPaletteHelper::instance()->palette(this).highlight().color(); if (m_date == QDate::currentDate() && m_globaldata->isBelongMonth(m_date)) { // qCDebug(ClientLogger) << "Painting current date"; //当天日期 painter.setBrush(highColor); painter.setPen(Qt::NoPen); painter.drawEllipse(rectf); painter.setPen(DPaletteHelper::instance()->palette(this).highlightedText().color()); painter.drawText(rectf, Qt::AlignCenter, text); } else if (m_globaldata->isSelectedDate(m_date)) { // qCDebug(ClientLogger) << "Painting selected date"; //被选中的日期 painter.setBrush(highColor); painter.setPen(Qt::NoPen); painter.setOpacity(0.3); painter.drawEllipse(rectf); painter.setPen(highColor); painter.setOpacity(1); painter.drawText(rectf, Qt::AlignCenter, text); } else if (m_globaldata->isHasSearchedByDate(m_date)) { // qCDebug(ClientLogger) << "Painting date with search results"; //有被æ�œç´¢æ—¥ç¨‹ï¼Œç»˜åˆ¶æ–‡å­— painter.setPen(highColor); painter.setOpacity(1); painter.drawText(rectf, Qt::AlignCenter, text); } else { // qCDebug(ClientLogger) << "Painting normal date"; //绘制默认文字 if (!m_globaldata->isBelongMonth(m_date)) { // qCDebug(ClientLogger) << "Date not in current month, setting opacity"; //ç½®ç�°æ—¥æœŸ painter.setOpacity(0.3); } painter.drawText(rectf, Qt::AlignCenter, text); } if (m_globaldata->isHasSearchedByDate(m_date)) { // qCDebug(ClientLogger) << "Drawing search indicator circle"; //有被æ�œç´¢æ—¥ç¨‹ï¼Œç»˜åˆ¶åœ†åœˆ QPainterPath path; path.addEllipse(rectf); path.addEllipse(rectf.x()+1, rectf.y()+1, rectf.width()-2, rectf.height()-2); painter.setBrush(highColor); painter.setPen(Qt::NoPen); painter.drawPath(path); } if (m_globaldata->isHasScheduleByDate(m_date)) { // qCDebug(ClientLogger) << "Drawing schedule indicator dot"; //有日程,绘制日程圆点 painter.setBrush(QBrush(m_ceventColor)); painter.setPen(Qt::NoPen); painter.setOpacity(1); qreal ellipse_r = r * (4.0 / 25); if (ellipse_r < 4) { // qCDebug(ClientLogger) << "Adjusting dot size to minimum"; ellipse_r = 4; } else if (ellipse_r > 7) { // qCDebug(ClientLogger) << "Adjusting dot size to maximum"; ellipse_r = 7; } painter.drawEllipse(QRectF(rectf.x() + rectf.width() - ellipse_r, rectf.y() + rect().y(), ellipse_r, ellipse_r)); } if (m_pressed) { // qCDebug(ClientLogger) << "Drawing pressed state"; //按下状æ€�,绘制点击效果 painter.setBrush(DPaletteHelper::instance()->palette(this).text()); painter.setPen(Qt::NoPen); painter.setOpacity(0.3); painter.drawEllipse(rectf); } else if (m_hovered) { // qCDebug(ClientLogger) << "Drawing hover state"; //悬浮状æ€�,绘制悬浮效果 painter.setBrush(DPaletteHelper::instance()->palette(this).text()); painter.setOpacity(0.2); painter.setPen(Qt::NoPen); painter.drawEllipse(rectf); } QWidget::paintEvent(event); } /** * @brief CMonthDayRectWidget::enterEvent * 鼠标进入事件 * @param event */ #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) void CMonthDayRectWidget::enterEvent(QEnterEvent *event) #else void CMonthDayRectWidget::enterEvent(QEvent *event) #endif { // qCDebug(ClientLogger) << "CMonthDayRectWidget::enterEvent for date:" << m_date.toString(); m_hovered = true; QWidget::enterEvent(event); } /** * 离开事件,设置当å‰�选中的日期为空 * */ void CMonthDayRectWidget::leaveEvent(QEvent *event) { // qCDebug(ClientLogger) << "CMonthDayRectWidget::leaveEvent for date:" << m_date.toString(); m_hovered = false; QWidget::leaveEvent(event); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/monthbrefwidget.h000066400000000000000000000120671523260663500314160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHBREFWIDGET_H #define MONTHBREFWIDGET_H #include "cschedulebasewidget.h" #include #include #include #include class CMonthDayRectWidget; class MonthBrefWidget : public QWidget { Q_OBJECT public: explicit MonthBrefWidget(QWidget *parent = nullptr); ~MonthBrefWidget() override; //当月所有日期共有数æ�® struct GlobalData { private: QDate m_showMonthDate; static QDate m_selectedMonth; //选中的月 static QDate m_selectedDate; //选中的日期 bool m_scheduleDateFlag[32] = {false}; //是å�¦æœ‰æ—¥ç¨‹ bool m_searchedDateFlag[32] = {false}; //是å�¦æœ‰é€‰ä¸­æ—¥ç¨‹ public: //设置选中的日期 void setSelectedDate(const QDate& date) { m_selectedDate = date; m_selectedMonth = m_showMonthDate; } //判断是å�¦æ˜¯é€‰ä¸­çš„æ—¥æœŸ bool isSelectedDate(const QDate& date) { //当全局日期ä¸�等于此类é�™æ€�日期时(其他界é�¢æ›´æ”¹æ—¥æœŸçš„æƒ…况下),采用全局时间å�šåˆ¤æ–­ if (CScheduleBaseWidget::getSelectDate() != m_selectedDate) { return (isBelongMonth(date) && date == CScheduleBaseWidget::getSelectDate()); } //用此类é�™æ€�日期å�šåˆ¤æ–­ï¼ˆå†…部界é�¢æ“�作) return m_showMonthDate == m_selectedMonth && date == m_selectedDate; } //判断日期是å�¦æ˜¯æœ¬æœˆå†…的日期 bool isBelongMonth(const QDate& date) { return (m_showMonthDate.year() == date.year() && m_showMonthDate.month() == date.month()); } //判断该日期是å�¦å�«æœ‰æ—¥ç¨‹ bool isHasScheduleByDate(const QDate& date) { if (isBelongMonth(date)) { return m_scheduleDateFlag[date.day()]; } return false; } //判断该日期是å�¦å�«æœ‰è¢«æ�œç´¢çš„æ—¥ç¨‹ bool isHasSearchedByDate(const QDate& date) { if (isBelongMonth(date)) { return m_searchedDateFlag[date.day()]; } return false; } friend MonthBrefWidget; }; //设置显示的月 void setShowMonthDate(const QDate& monthDate); //设置å�«æœ‰æ—¥ç¨‹çš„æ—¥æœŸé›†å�ˆ void setHasScheduleDateSet(const QSet &hasScheduleSet); //设置å�«æœ‰æ�œç´¢æ—¥ç¨‹çš„æ—¥æœŸé›†å�ˆ void setHasSearchScheduleSet(const QSet &hasScheduleSet); protected: //鼠标按下事件 void mousePressEvent(QMouseEvent *event) override; //鼠标释放事件 void mouseReleaseEvent(QMouseEvent *event) override; //鼠标移动事件,设置hover状æ€� void mouseMoveEvent(QMouseEvent *event) override; signals: /** * @brief signalPressDate 鼠标点击日期的信å�· * @param date 传递时间å�‚æ•° */ void signalPressDate(const QDate &date); /** * @brief signalDoubleClickDate é¼ æ ‡å�Œå‡»æ—¥æœŸçš„ä¿¡å�· * @param date 传递时间å�‚æ•° */ void signalDoubleClickDate(const QDate &date); private: QVector m_DayItem; GlobalData *m_globalData = nullptr; //触摸状æ€� 0:原始 1:点击 2:移动 int m_touchState{0}; //触摸点击å��æ ‡ QPoint m_touchBeginPoint; }; /** * @brief The CMonthDayRectWidget class * å�•个日期显示控件 */ class CMonthDayRectWidget : public QPushButton { Q_OBJECT public: explicit CMonthDayRectWidget(MonthBrefWidget::GlobalData* globalData, QWidget *parent = nullptr); //设置当天的时间 void setDate(const QDate &date); //获å�–当天的时间 QDate getDate()const; //系统主题å�˜åŒ– void setTheMe(int type = 0); signals: /** * @brief signalPressDate 鼠标点击日期的信å�· * @param date 传递时间å�‚æ•° */ void signalClicked(const QDate &date); /** * @brief signalDoubleClick é¼ æ ‡å�Œå‡»æ—¥æœŸçš„ä¿¡å�· * @param date 传递时间å�‚æ•° */ void signalDoubleClick(const QDate &date); protected: //鼠标按下事件 void mousePressEvent(QMouseEvent *event) override; //é¼ æ ‡å�Œå‡»äº‹ä»¶ void mouseDoubleClickEvent(QMouseEvent *event) override; //鼠标释放事件 void mouseReleaseEvent(QMouseEvent *event) override; //绘制日期以å�Šå½“天状æ€� void paintEvent(QPaintEvent *event) override; //鼠标进入事件 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) void enterEvent(QEnterEvent *event) override; #else void enterEvent(QEvent *event) override; #endif //离开事件,设置当å‰�选中的日期为空 void leaveEvent(QEvent *event) override; private: QDate m_date; //当å‰�ä½�置显示的日期 bool m_pressed = false; //按下状æ€� bool m_hovered = false; //悬浮状æ€� QColor m_ceventColor = "#FF5D00"; //日程圆点颜色 MonthBrefWidget::GlobalData* m_globaldata = nullptr; }; #endif // MONTHBREFWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/scheduleRemindWidget.cpp000066400000000000000000000157121523260663500326600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleRemindWidget.h" #include "constants.h" #include "commondef.h" #include #include #include DGUI_USE_NAMESPACE ScheduleRemindWidget::ScheduleRemindWidget(QWidget *parent) : DArrowRectangle(DArrowRectangle::ArrowLeft, DArrowRectangle::FloatWidget, parent) , m_centerWidget(new CenterWidget(this)) { qCDebug(ClientLogger) << "ScheduleRemindWidget constructor"; //如果dtk版本为5.3以上则使用新接å�£ #if (DTK_VERSION > DTK_VERSION_CHECK(5, 3, 0, 0)) //设置显示圆角 setRadiusArrowStyleEnable(true); //设置圆角 setRadius(DARROWRECT::DRADIUS); #endif m_centerWidget->setFixedWidth(207); m_centerWidget->setFixedHeight(57); setContent(m_centerWidget); this->resizeWithContent(); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, m_centerWidget, &CenterWidget::setTheMe); m_centerWidget->setTheMe(DGuiApplicationHelper::instance()->themeType()); } ScheduleRemindWidget::~ScheduleRemindWidget() { qCDebug(ClientLogger) << "ScheduleRemindWidget destructor"; } void ScheduleRemindWidget::setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor) { qCDebug(ClientLogger) << "ScheduleRemindWidget::setData for schedule:" << vScheduleInfo->uid(); m_centerWidget->setData(vScheduleInfo, gcolor); m_ScheduleInfo = vScheduleInfo; gdcolor = gcolor; this->setHeight(m_centerWidget->height() + 10); } /** * @brief ScheduleRemindWidget::setDirection 设置箭头方å�‘ * @param value */ void ScheduleRemindWidget::setDirection(DArrowRectangle::ArrowDirection value) { qCDebug(ClientLogger) << "ScheduleRemindWidget::setDirection:" << value; //设置箭头方å�‘ this->setArrowDirection(value); //设置内容窗å�£ this->setContent(m_centerWidget); } /** * @brief ScheduleRemindWidget::setTimeFormat 设置日期显示格å¼� * @param timeformat 日期格å¼� */ void ScheduleRemindWidget::setTimeFormat(QString timeformat) { qCDebug(ClientLogger) << "ScheduleRemindWidget::setTimeFormat:" << timeformat; m_centerWidget->setTimeFormat(timeformat); } CenterWidget::CenterWidget(DWidget *parent) : DFrame(parent) , textwidth(0) , textheight(0) { qCDebug(ClientLogger) << "CenterWidget constructor"; textfont.setWeight(QFont::Medium); } CenterWidget::~CenterWidget() { qCDebug(ClientLogger) << "CenterWidget destructor"; } void CenterWidget::setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor) { qCDebug(ClientLogger) << "CenterWidget::setData for schedule:" << vScheduleInfo->uid(); m_ScheduleInfo = vScheduleInfo; gdcolor = gcolor; textfont.setPixelSize(DDECalendar::FontSizeTwelve); UpdateTextList(); update(); } void CenterWidget::setTheMe(const int type) { qCDebug(ClientLogger) << "CenterWidget::setTheMe with type:" << type; if (type == 2) { timeColor = QColor("#FFFFFF"); timeColor.setAlphaF(0.6); textColor = QColor("#FFFFFF"); textColor.setAlphaF(0.7); } else { timeColor = QColor("#000000"); timeColor.setAlphaF(0.6); textColor = QColor("#000000"); textColor.setAlphaF(0.7); } update(); } /** * @brief CenterWidget::setTimeFormat 设置日期显示格å¼� * @param timeFormat 日期格å¼� */ void CenterWidget::setTimeFormat(QString timeFormat) { qCDebug(ClientLogger) << "CenterWidget::setTimeFormat:" << timeFormat; m_timeFormat = timeFormat; update(); } void CenterWidget::UpdateTextList() { qCDebug(ClientLogger) << "CenterWidget::UpdateTextList"; testList.clear(); QFontMetrics metrics(textfont); textwidth = metrics.horizontalAdvance(m_ScheduleInfo->summary()); textheight = metrics.height(); const int h_count = qCeil(textwidth / textRectWidth); QString text; if (h_count < 1) { qCDebug(ClientLogger) << "Text fits in one line"; testList.append(m_ScheduleInfo->summary()); } else { qCDebug(ClientLogger) << "Text needs multiple lines, h_count:" << h_count; const int text_Max_Height = 108; const int text_HeightMaxCount = qFloor(text_Max_Height / textheight); for (int i = 0; i < m_ScheduleInfo->summary().count(); ++i) { text += m_ScheduleInfo->summary().at(i); if (metrics.horizontalAdvance(text) > textRectWidth) { text.remove(text.count() - 1, 1); testList.append(text); text = ""; if (testList.count() == (text_HeightMaxCount - 1)) { qCDebug(ClientLogger) << "Reached maximum line count, adding elided text"; text = m_ScheduleInfo->summary().right(m_ScheduleInfo->summary().count() - i); testList.append(metrics.elidedText(text, Qt::ElideRight, textRectWidth)); break; } --i; } else { if (i + 1 == m_ScheduleInfo->summary().count()) { // qCDebug(ClientLogger) << "Adding final line of text"; testList.append(text); } } } } qCDebug(ClientLogger) << "Final text list has" << testList.count() << "lines"; this->setFixedHeight(testList.count() * textheight + 30 + 8); } void CenterWidget::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "CenterWidget::paintEvent"; Q_UNUSED(e); int diam = 8; int x = 40 - 13; QFont timeFont; timeFont.setPixelSize(DDECalendar::FontSizeTwelve); timeFont.setWeight(QFont::Normal); QPainter painter(this); //draw time QPen pen; pen.setColor(timeColor); painter.setPen(pen); painter.setFont(timeFont); QString timestr; timestr = m_ScheduleInfo->dtStart().time().toString(m_timeFormat); QFontMetrics metrics(timeFont); if (m_ScheduleInfo->allDay()) { // qCDebug(ClientLogger) << "All day event"; timestr = tr("All Day"); } else { // qCDebug(ClientLogger) << "Time-specific event:" << timestr; } int timewidth = metrics.horizontalAdvance(timestr); int timeheight = metrics.height(); painter.drawText(QRect(x + 13, 7, timewidth, timeheight), Qt::AlignLeft | Qt::AlignTop, timestr); painter.setRenderHints(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(QBrush(gdcolor.orginalColor)); painter.drawEllipse(x, 7 + (timeheight - diam) / 2, diam, diam); pen.setColor(textColor); painter.setPen(pen); painter.setFont(textfont); // qCDebug(ClientLogger) << "Drawing" << testList.count() << "lines of text"; for (int i = 0; i < testList.count(); i++) { painter.drawText( QRect(x, 30 + i * textheight, textRectWidth, textheight), Qt::AlignLeft, testList.at(i)); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/scheduleRemindWidget.h000066400000000000000000000031361523260663500323220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ScheduleRemindWidget_H #define ScheduleRemindWidget_H #include "dschedule.h" #include "scheduledatamanage.h" #include #include #include DWIDGET_USE_NAMESPACE class CenterWidget; class ScheduleRemindWidget : public DArrowRectangle { Q_OBJECT Q_DISABLE_COPY(ScheduleRemindWidget) public: explicit ScheduleRemindWidget(QWidget *parent = nullptr); ~ScheduleRemindWidget() override; void setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor); //设置箭头方å�‘ void setDirection(ArrowDirection value); void setTimeFormat(QString timeformat); signals: public slots: private: CenterWidget *m_centerWidget = nullptr; DSchedule::Ptr m_ScheduleInfo; CSchedulesColor gdcolor; }; class CenterWidget : public DFrame { Q_OBJECT public: explicit CenterWidget(DWidget *parent = nullptr); ~CenterWidget() override; void setData(const DSchedule::Ptr &vScheduleInfo, const CSchedulesColor &gcolor); void setTheMe(const int type = 0); void setTimeFormat(QString timeFormat = "h:mm"); private: void UpdateTextList(); protected: void paintEvent(QPaintEvent *e) override; private: QStringList testList; QFont textfont; int textwidth; int textheight; const int textRectWidth = 165; DSchedule::Ptr m_ScheduleInfo; CSchedulesColor gdcolor; QColor textColor; QColor timeColor; QString m_timeFormat; }; #endif // ScheduleRemindWidget_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/scheduleview.cpp000066400000000000000000000606351523260663500312540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleview.h" #include "alldayeventview.h" #include "graphicsview.h" #include "scheduledlg.h" #include "schedulecoormanage.h" #include "scheduledatamanage.h" #include "constants.h" #include "calendarmanage.h" #include "calendarglobalenv.h" #include "commondef.h" #include #include #include #include #include #include #include DGUI_USE_NAMESPACE static int hourTextWidth = 50; static int hourTextHeight = 20; CScheduleView::CScheduleView(QWidget *parent, ScheduleViewPos viewType) : DFrame(parent) , m_viewPos(viewType) , m_touchGesture(this) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) { qCDebug(ClientLogger) << "Creating CScheduleView with viewType:" << viewType; initUI(); initConnection(); setLineWidth(0); setFocusPolicy(Qt::TabFocus); } CScheduleView::~CScheduleView() { qCDebug(ClientLogger) << "Destroying CScheduleView"; } void CScheduleView::setviewMargin(int left, int top, int right, int bottom) { qCDebug(ClientLogger) << "Setting view margins:" << left << top << right << bottom; m_leftMargin = left; m_topMargin = top; m_rightMargin = right; m_layout->setContentsMargins(left, 0, 0, 0); m_graphicsView->setMargins(0, 0, right, bottom); m_alldaylist->setMargins(0, 0, 0, 0); } void CScheduleView::setRange(int w, int h, QDate begin, QDate end) { Q_UNUSED(h); qCDebug(ClientLogger) << "Setting range with width:" << w << "begin date:" << begin << "end date:" << end; if (!(w > 0)) { qCDebug(ClientLogger) << "Invalid width, returning"; return; } m_beginDate = begin; m_endDate = end; m_TotalDay = begin.daysTo(end) + 1; m_graphicsView->setRange(w, scheduleViewHeight(), begin, end, m_rightMargin); m_alldaylist->setRange(w, 22, m_beginDate, m_endDate, m_rightMargin); if (m_viewPos == ScheduleViewPos::DayPos) m_currteDate = begin; update(); } void CScheduleView::setRange(QDate begin, QDate end) { qCDebug(ClientLogger) << "Setting date range:" << begin << "to" << end; m_TotalDay = begin.daysTo(end) + 1; m_graphicsView->setRange(begin, end); m_alldaylist->setRange(begin, end); m_beginDate = begin; m_endDate = end; updateSchedule(); } void CScheduleView::setTheMe(int type) { qCDebug(ClientLogger) << "Setting theme type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Setting light theme colors"; m_linecolor = "#000000"; m_linecolor.setAlphaF(0.1); m_ALLDayColor = "#303030"; m_timeColor = "#7D7D7D"; } else if (type == 2) { qCDebug(ClientLogger) << "Setting dark theme colors"; m_linecolor = "#000000"; m_linecolor.setAlphaF(0.1); m_ALLDayColor = "#7D7D7D"; m_timeColor = "#7D7D7D"; } DPalette _painte; //获å�–外框背景色 m_outerBorderColor = _painte.color(QPalette::Active, QPalette::Window); m_graphicsView->setTheMe(type); m_alldaylist->setTheMe(type); update(); } void CScheduleView::setLunarVisible(bool state) { // qCDebug(ClientLogger) << "Setting lunar visible:" << state; Q_UNUSED(state); } void CScheduleView::setTime(QTime time) { // qCDebug(ClientLogger) << "Setting time:" << time; m_graphicsView->setTime(time); } void CScheduleView::setSelectSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "Setting selected schedule ID:" << scheduleInfo->uid(); if (scheduleInfo->allDay()) { qCDebug(ClientLogger) << "Schedule is all day event"; m_alldaylist->setSelectSearchSchedule(scheduleInfo); } else { qCDebug(ClientLogger) << "Schedule is not all day event"; m_graphicsView->setSelectSearchSchedule(scheduleInfo); } } void CScheduleView::updateHeight() { qCDebug(ClientLogger) << "Updating height"; m_graphicsView->updateHeight(); m_alldaylist->updateHeight(); } bool CScheduleView::IsDragging() { bool isDragging = (m_graphicsView->getDragStatus() != 4) || (m_alldaylist->getDragStatus() != 4); qCDebug(ClientLogger) << "Checking drag status:" << isDragging; return isDragging; } void CScheduleView::setCurrentDate(const QDateTime ¤tDate) { qCDebug(ClientLogger) << "Setting current date:" << currentDate; m_graphicsView->setCurrentDate(currentDate); } /** * @brief CScheduleView::setShowScheduleInfo 设置显示日程 * @param scheduleInfo */ void CScheduleView::setShowScheduleInfo(const QMap &scheduleInfo) { qCDebug(ClientLogger) << "Setting show schedule info with" << scheduleInfo.size() << "dates"; m_showSchedule = scheduleInfo; updateSchedule(); } /** * @brief CScheduleView::setTimeFormat 设置日期显示格å¼� * @param timeformat 日期格å¼� */ void CScheduleView::setTimeFormat(QString timeformat) { qCDebug(ClientLogger) << "Setting time format:" << timeformat; m_timeFormat = timeformat; m_ScheduleRemindWidget->setTimeFormat(timeformat); } void CScheduleView::setDate(QDate date) { qCDebug(ClientLogger) << "Setting date:" << date; m_currteDate = date; updateAllday(); } void CScheduleView::slotupdateSchedule() { qCDebug(ClientLogger) << "Slot update schedule called"; updateSchedule(); } void CScheduleView::slotPosHours(QVector vPos, QVector vHours, int currentTimeType) { qCDebug(ClientLogger) << "Setting position hours, time type:" << currentTimeType; m_vHours = vHours; m_vPos = vPos; m_currentTimeType = currentTimeType; update(); } void CScheduleView::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "Paint event triggered"; DFrame::paintEvent(event); QPainter painter(this); font.setWeight(QFont::Normal); font.setPixelSize(DDECalendar::FontSizeEleven); if (m_vPos.isEmpty()) return; QLocale locale; if (locale.language() == QLocale::Chinese) { // qDebug() << "Chinese"; QRect tinrect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth, hourTextHeight); if (m_currentTimeType == 0) { // qDebug() << "Chinese current time type 0"; painter.save(); painter.setFont(font); painter.setPen(m_timeColor); for (int i = 0; i < m_vPos.size(); i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat.contains("AP") ? "AP h æ—¶" : m_timeFormat)); } painter.restore(); } else { // qDebug() << "Chinese current time type 1"; painter.save(); painter.setFont(font); painter.setPen(m_timeColor); for (int i = 0; i < m_vPos.size() - 1; i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; QRect rr((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth, hourTextHeight); if (rr.intersects(tinrect) && m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) { continue; } painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat.contains("AP") ? "AP h æ—¶" : m_timeFormat)); } painter.restore(); if (m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) { // qDebug() << "Chinese current time type 1 draw current time"; painter.save(); painter.setFont(font); painter.setPen(m_currenttimecolor); QString str = QTime::currentTime().toString(m_timeFormat); painter.drawText(QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth + 1, hourTextHeight), Qt::AlignCenter, str); painter.restore(); } } } else { // qDebug() << "English"; if (m_currentTimeType == 0) { painter.save(); painter.setFont(font); painter.setPen(m_timeColor); for (int i = 0; i < m_vPos.size(); i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth + 2, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat)); } painter.restore(); } else { // qDebug() << "English current time type 1"; painter.save(); painter.setFont(font); painter.setPen(m_timeColor); QRect tinrect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth + 2, hourTextHeight); for (int i = 0; i < m_vPos.size() - 1; i++) { if (m_vHours[i] == 0) continue; if (m_vHours[i] == 24) continue; if (m_topMargin - 8 + m_vPos[i] < m_topMargin) continue; QRect rr((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth + 2, hourTextHeight); if (rr.intersects(tinrect) && m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) continue; painter.drawText( QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[i], hourTextWidth + 2, hourTextHeight), Qt::AlignCenter, QTime(m_vHours[i], 0).toString(m_timeFormat)); } painter.restore(); if (m_viewPos == ScheduleViewPos::DayPos && m_beginDate == QDate::currentDate()) { painter.save(); painter.setFont(font); painter.setPen(m_currenttimecolor); QString str = QTime::currentTime().toString(m_timeFormat); if (m_topMargin - 8 + m_vPos[m_vPos.count() - 1] >= m_topMargin) painter.drawText(QRect((m_leftMargin - hourTextWidth) / 2 - 5, m_topMargin - 8 + m_vPos[m_vPos.count() - 1], hourTextWidth + 2, hourTextHeight), Qt::AlignCenter, str); painter.restore(); } } } painter.save(); QFont alldayfont; alldayfont.setWeight(QFont::Medium); alldayfont.setPixelSize(DDECalendar::FontSizeFourteen); painter.setFont(alldayfont); painter.setPen(m_ALLDayColor); painter.drawText(QRect(0, 0, m_leftMargin - 2, m_topMargin - 2), Qt::AlignCenter, tr("ALL DAY")); painter.restore(); //绘制全天与é�žå…¨å¤©ä¹‹é—´çš„直线 painter.save(); painter.setPen(Qt::NoPen); //分割线yå��标点 const int point_y = m_alldaylist->height() + m_alldaylist->y(); //设置间隔线颜色 painter.setBrush(m_linecolor); //绘制间隔线矩阵 painter.drawRect(QRectF(0, point_y, this->width() - m_rightMargin - 2, 1)); painter.restore(); if (m_viewPos == ScheduleViewPos::WeekPos) { // qDebug() << "WeekPos"; //如果为周视图绘制å�³ä¾§èƒŒæ™¯è‰²ï¼ˆå�¦åˆ™ä¼šæœ‰ä¸€ä¸ªç«–线的白色背景,ä¸�å��调) painter.setPen(Qt::NoPen); painter.setBrush(m_outerBorderColor); painter.drawRect(QRectF(this->width() - 1, 0, this->width(), this->height())); //绘制个三角é�®ä½�左上角圆角 QPainterPath path; path.moveTo(0,0); path.lineTo(m_radius, 0); path.lineTo(0, m_radius); path.lineTo(0, 0); painter.fillPath(path, palette().color(backgroundRole())); } // qDebug() << "Paint event end"; } void CScheduleView::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "Resize event triggered, new size:" << width() << "x" << height(); if (m_viewPos == ScheduleViewPos::WeekPos) { m_sMaxNum = ((width() - m_leftMargin) / 7) / 27; if (m_sMaxNum < 4) { // qCDebug(ClientLogger) << "Adjusting m_sMaxNum to minimum value 4"; m_sMaxNum = 4; } } m_graphicsView->setMaxNum(m_sMaxNum); m_graphicsView->setRange(width() - m_leftMargin, scheduleViewHeight(), m_beginDate, m_endDate, m_rightMargin); m_alldaylist->setRange(width() - m_leftMargin, 22, m_beginDate, m_endDate, m_rightMargin); update(); QFrame::resizeEvent(event); updateAllday(); m_graphicsView->updateInfo(); m_graphicsView->keepCenterOnScene(); } void CScheduleView::wheelEvent(QWheelEvent *e) { // qCDebug(ClientLogger) << "Wheel event, delta x:" << e->angleDelta().x(); if (e->angleDelta().x() != 0) { emit signalAngleDelta(e->angleDelta().x()); } } bool CScheduleView::event(QEvent *e) { // qDebug() << "Event"; if (m_touchGesture.event(e)) { // qCDebug(ClientLogger) << "Touch gesture event detected"; //获å�–触摸状æ€� switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { qCDebug(ClientLogger) << "Touch slide state detected"; //在滑动状æ€�如果å�¯ä»¥æ›´æ–°æ•°æ�®åˆ™åˆ‡æ�¢æœˆä»½ if (m_touchGesture.isUpdate()) { qCDebug(ClientLogger) << "Touch gesture update is true"; m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: qCDebug(ClientLogger) << "Touch moving left"; emit signalAngleDelta(-1); break; case touchGestureOperation::T_RIGHT: qCDebug(ClientLogger) << "Touch moving right"; emit signalAngleDelta(1); break; default: qCDebug(ClientLogger) << "Touch moving in other direction"; break; } } break; } default: // qCDebug(ClientLogger) << "Other touch state detected"; break; } return true; } else { return DFrame::event(e); } } void CScheduleView::initUI() { qCDebug(ClientLogger) << "Initializing UI"; m_layout = new QVBoxLayout; m_layout->setSpacing(0); m_layout->setContentsMargins(0, 0, 0, 0); m_alldaylist = new CAllDayEventWeekView(this, m_viewPos); m_layout->addWidget(m_alldaylist); m_layout->addSpacing(1); m_graphicsView = new CGraphicsView(this, m_viewPos); const int miniHeight = m_viewPos == ScheduleViewPos::WeekPos ? 300 : 380; qCDebug(ClientLogger) << "Setting minimum height:" << miniHeight; m_graphicsView->setMinimumHeight(miniHeight); connect(m_graphicsView, SIGNAL(signalsPosHours(QVector, QVector, int)), this, SLOT(slotPosHours(QVector, QVector, int))); m_layout->addWidget(m_graphicsView); setLayout(m_layout); m_graphicsView->scrollBarValueChangedSlot(); m_ScheduleRemindWidget = new ScheduleRemindWidget(this); // move focus to m_graphicsView setFocusProxy(m_graphicsView); } void CScheduleView::initConnection() { qCDebug(ClientLogger) << "Initializing connections"; connect(m_graphicsView, &CGraphicsView::signalsUpdateSchedule, this, &CScheduleView::slotupdateSchedule); connect(m_alldaylist, &CAllDayEventWeekView::signalsUpdateSchedule, this, &CScheduleView::slotupdateSchedule); connect(m_graphicsView, &CGraphicsView::signalsCurrentScheduleDate, this, &CScheduleView::slotCurrentScheduleDate); connect(m_graphicsView, &CGraphicsView::signalGotoDayView, this, &CScheduleView::slotCurrentScheduleDate); //切æ�¢å‰�å�Žæ—¶é—´ä¿¡å�·å…³è�” connect(m_graphicsView, &CAllDayEventWeekView::signalAngleDelta, this, &CScheduleView::signalAngleDelta); connect(m_alldaylist, &CAllDayEventWeekView::signalAngleDelta, this, &CScheduleView::signalAngleDelta); connect(m_graphicsView, &CGraphicsView::signalScheduleShow, this, &CScheduleView::slotScheduleShow); connect(m_alldaylist, &CAllDayEventWeekView::signalScheduleShow, this, &CScheduleView::slotScheduleShow); connect(m_alldaylist, &CAllDayEventWeekView::signalUpdatePaint, this, &CScheduleView::slotUpdatePaint); connect(m_alldaylist, &CAllDayEventWeekView::signalSceneUpdate, this, &CScheduleView::slotUpdateScene); connect(m_graphicsView, &CGraphicsView::signalSceneUpdate, this, &CScheduleView::slotUpdateScene); connect(m_alldaylist, &CAllDayEventWeekView::signaleSwitchToView, this, &CScheduleView::slotSwitchView); connect(m_graphicsView, &CGraphicsView::signaleSwitchToView, this, &CScheduleView::slotSwitchView); connect(m_alldaylist, &CAllDayEventWeekView::signalViewFocusInit, m_graphicsView, &CGraphicsView::slotViewInit); connect(m_alldaylist, &CAllDayEventWeekView::signalSwitchPrePage, this, &CScheduleView::signalSwitchPrePage); connect(m_alldaylist, &CAllDayEventWeekView::signalSwitchNextPage, this, &CScheduleView::signalSwitchNextPage); connect(m_graphicsView, &CAllDayEventWeekView::signalSwitchPrePage, this, &CScheduleView::signalSwitchPrePage); connect(m_graphicsView, &CAllDayEventWeekView::signalSwitchNextPage, this, &CScheduleView::signalSwitchNextPage); } /** * @brief CScheduleView::slotDeleteitem å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ */ void CScheduleView::slotDeleteitem() { qCDebug(ClientLogger) << "Delete item slot called"; //"delete"å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ï¼Œå› ä¸ºå�ªæœ‰ä¸€ä¸ªç‚¹å‡»é€‰ä¸­æ—¥ç¨‹æ‰€ä»¥å…¨å¤©æˆ–é�žå…¨å¤©å�ªéœ€è¦�有一个删除就å�¯ä»¥äº† m_graphicsView->slotDeleteItem(); //因添加了对焦点选中item的快æ�·åˆ é™¤ï¼Œæ·»åŠ å¯¹å…¨å¤©é€‰ä¸­æ—¥ç¨‹çš„åˆ é™¤ m_alldaylist->slotDeleteItem(); } void CScheduleView::slotCurrentScheduleDate(QDate date) { qCDebug(ClientLogger) << "Current schedule date slot called with date:" << date; if (m_viewPos == ScheduleViewPos::DayPos) { qCDebug(ClientLogger) << "In day position, returning"; return; } emit signalsCurrentScheduleDate(date); } void CScheduleView::slotScheduleShow(const bool isShow, const DSchedule::Ptr &out) { // qCDebug(ClientLogger) << "Schedule show slot called, isShow:" << isShow; if (isShow) { qCDebug(ClientLogger) << "Showing schedule with ID:" << out->uid(); QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey(DDECalendar::CursorPointKey, variant); QPoint pos22 = variant.value(); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹èŽ·å�–颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType( out->scheduleTypeID()); m_ScheduleRemindWidget->setData(out, gdColor); // pos22: 全局å±�幕å��æ ‡; rPos: 转æ�¢å�Žçš„æŽ§ä»¶é€»è¾‘å��æ ‡ const auto rPos = this->mapFromGlobal(pos22); const int offsetPx = 15; // 逻辑åƒ�ç´ å��移,与 rPos å�Œä¸€å��标系 if ((rPos.x() + m_ScheduleRemindWidget->width() + offsetPx) > this->window()->width()) { qCDebug(ClientLogger) << "Positioning widget to the right"; m_ScheduleRemindWidget->setDirection(DArrowRectangle::ArrowRight); m_ScheduleRemindWidget->show(rPos.x() - offsetPx, rPos.y()); } else { qCDebug(ClientLogger) << "Positioning widget to the left"; m_ScheduleRemindWidget->setDirection(DArrowRectangle::ArrowLeft); m_ScheduleRemindWidget->show(rPos.x() + offsetPx, rPos.y()); } } else { // qCDebug(ClientLogger) << "Hiding schedule widget"; m_ScheduleRemindWidget->hide(); } } void CScheduleView::slotUpdatePaint(const int topM) { qCDebug(ClientLogger) << "Update paint slot called with topMargin:" << topM; m_topMargin = topM; update(); } void CScheduleView::slotUpdateScene() { qCDebug(ClientLogger) << "Update scene slot called"; m_graphicsView->slotUpdateScene(); m_alldaylist->slotUpdateScene(); } /** * @brief CScheduleView::slotSwitchView 焦点切æ�¢åˆ°æŸ�个视图 * @param viewtype */ void CScheduleView::slotSwitchView(const QDate &focusDate, CWeekDayGraphicsview::ViewType viewtype, bool setItemFocus) { qCDebug(ClientLogger) << "Switch view slot called with date:" << focusDate << "viewtype:" << viewtype << "setItemFocus:" << setItemFocus; if (viewtype == CWeekDayGraphicsview::ALLDayView) { qCDebug(ClientLogger) << "Switching to all day view"; m_alldaylist->setCurrentFocusItem(focusDate, setItemFocus); m_alldaylist->setFocus(Qt::TabFocusReason); } else { qCDebug(ClientLogger) << "Switching to regular view"; m_graphicsView->setCurrentFocusItem(focusDate, setItemFocus); m_graphicsView->setFocus(Qt::TabFocusReason); } } /** * @brief CScheduleView::updateSchedule 更新日程显示 */ void CScheduleView::updateSchedule() { qCDebug(ClientLogger) << "Updating schedule"; //获å�–一个月的日程信æ�¯ m_graphicsView->clearSchedule(); DSchedule::List allInfo; DSchedule::List nonAllInfo; QMap::const_iterator _iterator = m_showSchedule.constBegin(); for (; _iterator != m_showSchedule.constEnd(); ++_iterator) { for (int i = 0; i < _iterator->size(); ++i) { if (_iterator.value().at(i)->allDay()) { //过滤 if (!allInfo.contains(_iterator.value().at(i))) { // qCDebug(ClientLogger) << "Adding all-day schedule with ID:" << _iterator.value().at(i)->uid(); allInfo.append(_iterator.value().at(i)); } } else { //过滤 if (!nonAllInfo.contains(_iterator.value().at(i))) { // qCDebug(ClientLogger) << "Adding non-all-day schedule with ID:" << _iterator.value().at(i)->uid(); nonAllInfo.append(_iterator.value().at(i)); } } } } qCDebug(ClientLogger) << "Setting all-day info with" << allInfo.size() << "schedules"; m_alldaylist->setInfo(allInfo); qCDebug(ClientLogger) << "Setting non-all-day info with" << nonAllInfo.size() << "schedules"; m_graphicsView->setInfo(nonAllInfo); updateAllday(); m_graphicsView->updateInfo(); m_graphicsView->update(); m_graphicsView->scene()->update(); } void CScheduleView::updateAllday() { qCDebug(ClientLogger) << "Updating all day view"; m_alldaylist->updateInfo(); update(); m_graphicsView->resize(m_graphicsView->width(), this->height() - m_alldaylist->height()); } int CScheduleView::scheduleViewHeight() { qCDebug(ClientLogger) << "Calculating schedule view height"; qreal mHeight = 0; if (m_viewPos == ScheduleViewPos::DayPos) { mHeight = 24 * (0.0968 * height() + 0.5); } else { mHeight = 24 * (0.083 * height() + 0.5); } //现在最å°�高度为20; mHeight = mHeight < 500 ? 1035 : mHeight; int m_minTime = qRound((20.0 / mHeight) * 86400); m_graphicsView->setMinTime(m_minTime); qCDebug(ClientLogger) << "Calculated height:" << qRound(mHeight) << "minTime:" << m_minTime; return qRound(mHeight); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/scheduleview.h000066400000000000000000000067161523260663500307210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEVIEW_H #define SCHEDULEVIEW_H #include "dschedule.h" #include "scheduleRemindWidget.h" #include "../widget/touchgestureoperation.h" #include "graphicsview.h" #include #include DWIDGET_USE_NAMESPACE #define ScheduleViewPos CWeekDayGraphicsview::ViewPosition class CAllDayEventWeekView; class QVBoxLayout; class CScheduleView : public DFrame { Q_OBJECT public: CScheduleView(QWidget *parent = nullptr, ScheduleViewPos viewType = ScheduleViewPos::WeekPos); ~CScheduleView() override; void setviewMargin(int left, int top, int right, int bottom); void setRange(int w, int h, QDate begin, QDate end); void setRange(QDate begin, QDate end); void setTheMe(int type = 0); void setLunarVisible(bool state); void setTime(QTime time); void setSelectSchedule(const DSchedule::Ptr &scheduleInfo); void updateHeight(); bool IsDragging(); void setCurrentDate(const QDateTime ¤tDate); //设置显示日程 void setShowScheduleInfo(const QMap &scheduleInfo); void setTimeFormat(QString timeformat); signals: void signalsCurrentScheduleDate(QDate date); /** * @brief signalAngleDelta å�‘é€�滚动信å�·æ»šåŠ¨ç›¸å¯¹é‡� * @param delta 滚动相对é‡� */ void signalAngleDelta(int delta); void signalSwitchPrePage(); void signalSwitchNextPage(); public slots: void slotPosHours(QVector vPos, QVector vHours, int currentTimeType = 0); void setDate(QDate date); void slotupdateSchedule(); //å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ void slotDeleteitem(); void slotCurrentScheduleDate(QDate date); void slotScheduleShow(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); void slotUpdatePaint(const int topM); void slotUpdateScene(); //焦点切æ�¢åˆ°æŸ�个视图 void slotSwitchView(const QDate &focusDate, CWeekDayGraphicsview::ViewType viewtype, bool setItemFocus); protected: void paintEvent(QPaintEvent *event) override; void resizeEvent(QResizeEvent *event) override; void wheelEvent(QWheelEvent *e) override; bool event(QEvent *e) override; private: void initUI(); void initConnection(); void updateSchedule(); void updateAllday(); int scheduleViewHeight(); private: CGraphicsView *m_graphicsView = nullptr; QVector m_vPos; QVector m_vHours; CAllDayEventWeekView *m_alldaylist = nullptr; QMap m_showSchedule {}; int m_leftMargin; int m_topMargin; int m_rightMargin = 0; qint64 m_TotalDay; QDate m_currteDate; QDate m_beginDate; QDate m_endDate; // 0: 周 1:æ—¥ // int m_viewType = 0; ScheduleViewPos m_viewPos; int m_sMaxNum = 4; QColor m_linecolor = Qt::lightGray; QColor m_ALLDayColor = "#303030"; QColor m_timeColor = "#7D7D7D"; QColor m_currenttimecolor = "#F74444"; int m_currentTimeType = 0; QVBoxLayout *m_layout = nullptr; ScheduleRemindWidget *m_ScheduleRemindWidget = nullptr; int m_minTime; //最å°�高度对应的最å°�æ—¶é—´ QFont font; const int m_radius = 8; /** * @brief m_touchGesture 触摸手势处ç�† */ touchGestureOperation m_touchGesture; QColor m_outerBorderColor; //外边框背景色 QString m_timeFormat; }; #endif // SCHEDULEVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/timeedit.cpp000066400000000000000000000237631523260663500303720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "timeedit.h" #include "commondef.h" #include #include #include #include #include "calendarmanage.h" //视图容器最大高度 const int viewContainerMaxHeight = 305; CTimeEdit::CTimeEdit(QWidget *parent) : DComboBox(parent) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) , m_timeEdit(new CCustomTimeEdit()) , m_hasFocus(false) , m_miniTime(QTime(0, 0, 0)) { qCDebug(ClientLogger) << "Creating CTimeEdit"; initUI(); initConnection(); } CTimeEdit::~CTimeEdit() { qCDebug(ClientLogger) << "Destroying CTimeEdit"; delete m_timeEdit; } void CTimeEdit::setMineTime(const QTime &mineTime) { qCDebug(ClientLogger) << "Setting minimum time:" << mineTime.toString(); m_miniTime = mineTime; } void CTimeEdit::setTime(const QTime &time) { qCDebug(ClientLogger) << "Setting time:" << time.toString(); m_time = time; setSelectItem(m_time); m_timeEdit->getLineEdit()->setText(time.toString(m_timeFormat)); } QTime CTimeEdit::getTime() { //获å�–显示的text QString timetext = m_timeEdit->getLineEdit()->displayText(); //å°†text转æ�¢ä¸ºæ—¶é—´ m_time = QTime::fromString(timetext, m_timeFormat); qCDebug(ClientLogger) << "Getting time:" << m_time.toString(); return m_time; } void CTimeEdit::updateListItem(bool isShowTimeInterval) { qCDebug(ClientLogger) << "Updating list items, show time interval:" << isShowTimeInterval; m_isShowTimeInterval = isShowTimeInterval; QTime topTimer(m_miniTime); if (!m_isShowTimeInterval) { qCDebug(ClientLogger) << "Time interval not shown, setting top timer"; // æ ¹æ�®å¼€å§‹æ—¶é—´çš„分钟数设置结æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表的分钟数,当å‰�默认为0,故先注释 // int m = m_miniTime.minute() >= 30 ? m_miniTime.minute() - 30 : m_miniTime.minute(); int m = 0; topTimer = QTime(0, m); } //清除列表 clear(); for (int i = 0; i < 48; ++i) { qreal timeInterval = i * 0.5; QString timeIntervalStr; if (m_isShowTimeInterval) { if (timeInterval < 1) { timeIntervalStr = tr("(%1 mins)").arg(i * 30); } else if (qFuzzyCompare(timeInterval, 1)) { timeIntervalStr = tr("(%1 hour)").arg(timeInterval); } else { timeIntervalStr = tr("(%1 hours)").arg(timeInterval); } } else { timeIntervalStr = ""; } QString userData = topTimer.addSecs(i * 30 * 60).toString(m_timeFormat); QString showStr = userData + timeIntervalStr; addItem(showStr, userData); } qCDebug(ClientLogger) << "Added" << count() << "time items to list"; } void CTimeEdit::setTimeFormat(int value) { qCDebug(ClientLogger) << "Setting time format value:" << value; //获å�–edit的当å‰�æ—¶é—´ QTime editCurrentTime = getTime(); //æ ¹æ�®value值,设置时间显示格å¼� if (value) { qCDebug(ClientLogger) << "Setting 24-hour format"; m_timeFormat = "hh:mm"; } else { qCDebug(ClientLogger) << "Setting 12-hour format"; m_timeFormat = "h:mm"; } //先更新列表信æ�¯ï¼Œæ›´æ–°åˆ—表信æ�¯å�Žå†�设置编辑框显示时间 updateListItem(m_isShowTimeInterval); m_timeEdit->setDisplayFormat(m_timeFormat); //设置改å�˜æ ¼å¼�å�Žçš„æ—¶é—´ setTime(editCurrentTime); } void CTimeEdit::slotFocusDraw(bool showFocus) { qCDebug(ClientLogger) << "Focus draw slot called, show focus:" << showFocus; m_hasFocus = showFocus; update(); } void CTimeEdit::setSelectItem(const QTime &time) { qCDebug(ClientLogger) << "Setting select item for time:" << time.toString(); //若有则设置选中,若没有则å�–消选中设置定ä½�到相近值附近 int similarNumber = -1; int diff = 24 * 60 * 60 * 1000; for (int i = 0 ; i < count(); ++i) { QVariant &&userData = itemData(i); QTime &&listTime = QTime::fromString(userData.toString(), m_timeFormat); int &&timeDiff = qAbs(listTime.msecsTo(time)); //获å�–时间差较å°�的值 //如果时间å°�于第一项的时间则ä¸�算统计, //比如 第一项时间ä½�01:00 比对时间为00:59,时间差应该为23:59 而ä¸�是00:01,所以应该定ä½�到最å�Žä¸€é¡¹ if (timeDiff < diff && (!(time < listTime && 0 == i))) { diff = timeDiff; similarNumber = i; } } if (diff == 0) { qCDebug(ClientLogger) << "Exact time match found at index:" << similarNumber; setCurrentIndex(similarNumber); } else { qCDebug(ClientLogger) << "No exact match, closest time at index:" << similarNumber << "with diff:" << diff; setCurrentIndex(-1); } scrollPosition = this->model()->index(similarNumber, 0); } void CTimeEdit::slotSetPlainText(const QString &arg) { qCDebug(ClientLogger) << "Setting plain text:" << arg; QString userData = currentData().toString(); if (userData.isEmpty()) { qCDebug(ClientLogger) << "User data is empty, using arg text"; this->lineEdit()->setText(arg); } else { qCDebug(ClientLogger) << "Using user data text:" << userData; this->lineEdit()->setText(userData); } } void CTimeEdit::slotActivated(const QString &arg) { qCDebug(ClientLogger) << "Activated slot called with:" << arg; slotSetPlainText(arg); emit signaleditingFinished(); } void CTimeEdit::slotEditingFinished() { qCDebug(ClientLogger) << "Editing finished slot called"; setTime(m_timeEdit->time()); emit signaleditingFinished(); } void CTimeEdit::initUI() { qCDebug(ClientLogger) << "Initializing UI"; //关闭自动补全 this->setCompleter(nullptr); //设置edit的宽度 m_timeEdit->getLineEdit()->setFixedWidth(100); m_timeEdit->setDisplayFormat(m_timeFormat); updateListItem(m_isShowTimeInterval); setLineEdit(m_timeEdit->getLineEdit()); m_timeEdit->setParent(this); setInsertPolicy(QComboBox::NoInsert); } void CTimeEdit::initConnection() { qCDebug(ClientLogger) << "Initializing connections"; connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &CTimeEdit::setTimeFormat); connect(m_timeEdit, &CCustomTimeEdit::signalUpdateFocus, this, &CTimeEdit::slotFocusDraw); connect(m_timeEdit->getLineEdit(), &QLineEdit::editingFinished, this, &CTimeEdit::slotEditingFinished); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) // Qt5.14+: 使用 textActivated ä¿¡å�· connect(this, &CTimeEdit::textActivated, this, &CTimeEdit::slotActivated); #else // Qt5.11.3 兼容:使用 activated ä¿¡å�· // 注æ„�:需è¦�强制转æ�¢ä¸º void (QComboBox::*)(const QString &) 以解决é‡�载歧义 void (QComboBox::*activatedSignal)(const QString &) = &QComboBox::activated; connect(this, activatedSignal, this, &CTimeEdit::slotActivated); #endif } void CTimeEdit::showPopup() { qCDebug(ClientLogger) << "Showing popup"; DComboBox::showPopup(); //获å�–下拉视图容器 QFrame *viewContainer = this->findChild(); if (viewContainer) { qCDebug(ClientLogger) << "View container found, configuring"; //移动å‰�å…ˆéš�è—� viewContainer->hide(); //如果显示视图容器则设置高度 viewContainer->setFixedHeight(viewContainerMaxHeight); //设置最大高度 viewContainer->setMaximumHeight(viewContainerMaxHeight + 1); //获å�–combobox底部å��æ ‡ QPoint showPoint = mapToGlobal(this->rect().bottomLeft()); //控制视图容器宽度 ,根æ�®å­—体大å°�调整宽度 int maxLen = 0; QFontMetrics fontMet(view()->font()); for (int i = 0 ; i < count() ; ++i) { int &&itemWidth = fontMet.horizontalAdvance(this->itemText(i)); maxLen = qMax(maxLen, itemWidth); } maxLen += 45; //选项å‰�√å� ç”¨çš„大å°� //如果宽度å°�于box宽度则设置ä½�box宽度 maxLen = qMax(maxLen, this->width()); viewContainer->setFixedWidth(maxLen); //将视图容器移动到combobox的底部 viewContainer->move(showPoint.x(), showPoint.y()); //显示 viewContainer->show(); qCDebug(ClientLogger) << "View container positioned at:" << showPoint << "with size:" << viewContainer->size(); } else { qCDebug(ClientLogger) << "View container not found"; } //因改å�˜äº†å®¹å™¨çš„高度,所以需è¦�é‡�新定ä½�当å‰�ä½�ç½® if (this->view()->currentIndex() == scrollPosition) { qCDebug(ClientLogger) << "Scrolling to current position at center"; this->view()->scrollTo(scrollPosition, QAbstractItemView::PositionAtCenter); } else { qCDebug(ClientLogger) << "Scrolling to position at top"; this->view()->scrollTo(scrollPosition, QAbstractItemView::PositionAtTop); } } void CTimeEdit::focusInEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "Focus in event, reason:" << event->reason(); DComboBox::focusInEvent(event); // 如果为tab焦点进入则选中时间 if (event->reason() == Qt::TabFocusReason) { // qCDebug(ClientLogger) << "Tab focus, setting focus to line edit"; lineEdit()->setFocus(Qt::TabFocusReason); } } void CTimeEdit::paintEvent(QPaintEvent *e) { DComboBox::paintEvent(e); //如果有焦点则设置焦点显示效果 if (m_hasFocus) { // qCDebug(ClientLogger) << "Painting focus rectangle"; QPainter painter(this); QStyleOptionFocusRect option; option.initFrom(this); option.backgroundColor = palette().color(QPalette::Window); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } } void CTimeEdit::resizeEvent(QResizeEvent *e) { // qCDebug(ClientLogger) << "Resize event, new size:" << size(); DComboBox::resizeEvent(e); m_timeEdit->setFixedHeight(this->height()); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/timeedit.h000066400000000000000000000043171523260663500300310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once #include "ccustomtimeedit.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CTimeEdit : public DComboBox { Q_OBJECT public: explicit CTimeEdit(QWidget *parent = nullptr); ~CTimeEdit() override; /** * @brief setMineTime 设置下拉列表顶端时间 * @param mineTime */ void setMineTime(const QTime &mineTime); /** * @brief setTime 设置显示时间 * @param time */ void setTime(const QTime &time); /** * @brief getTime 获å�–æ—¶é—´ * @return */ QTime getTime(); /** * @brief updateListItem 更新列表项 * @param isShowTimeInterval 是å�¦æ˜¾ç¤ºæ—¶é—´é—´éš” */ void updateListItem(bool isShowTimeInterval = false); /** * @brief setSelectItem 设置选中项目和scroll定ä½�ä½�ç½® * @param time */ void setSelectItem(const QTime &time); public slots: void setTimeFormat(int value); //焦点获å�–效果绘制 void slotFocusDraw(bool showFocus); /** * @brief slotSetPlainText 设置当å‰�编辑框显示文本 * @param arg */ void slotSetPlainText(const QString &arg); /** * @brief slotActivated Combobox选择项处ç�†æ§½ * @param arg */ void slotActivated(const QString &arg); /** * @brief slotEditingFinished 编辑框编辑结æ�Ÿæ—¶ï¼Œå¤„ç�†æ§½ */ void slotEditingFinished(); signals: void signalFocusOut(); void signaleditingFinished(); private: void initUI(); void initConnection(); protected: void showPopup() override; void focusInEvent(QFocusEvent *event) override; void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *e) override; private: QString m_timeFormat = "hh:mm"; QTime m_time; CCustomTimeEdit *m_timeEdit = nullptr; bool m_hasFocus; QTime m_miniTime; bool m_isShowTimeInterval = false; QModelIndex scrollPosition; //下拉列表需è¦�滚动到的ä½�ç½® }; linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/todaybutton.cpp000066400000000000000000000013621523260663500311310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "todaybutton.h" #include "constants.h" #include "commondef.h" #include #include #include DGUI_USE_NAMESPACE CTodayButton::CTodayButton(QWidget *parent) : DPushButton(parent) { qCDebug(ClientLogger) << "Creating CTodayButton"; } void CTodayButton::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "Key press event, key:" << event->key(); //添加回车点击效果处ç�† if (event->key() == Qt::Key_Return) { qCDebug(ClientLogger) << "Return key pressed, emitting click"; click(); } DPushButton::keyPressEvent(event); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/customWidget/todaybutton.h000066400000000000000000000006621523260663500306000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TODYBUTTON_H #define TODYBUTTON_H #include DWIDGET_USE_NAMESPACE class CTodayButton : public DPushButton { Q_OBJECT public: explicit CTodayButton(QWidget *parent = nullptr); protected: void keyPressEvent(QKeyEvent *event) override; private: }; #endif // TODYBUTTON_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/000077500000000000000000000000001523260663500254135ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/accountitem.cpp000066400000000000000000000524021523260663500304350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountitem.h" #include "doanetworkdbus.h" #include "commondef.h" AccountItem::AccountItem(const DAccount::Ptr &account, QObject *parent) : QObject(parent) , m_account(account) , m_dbusRequest(new DbusAccountRequest(account->dbusPath(), account->dbusInterface(), this)) { qCDebug(ClientLogger) << "Creating AccountItem for account:" << account->accountName() << "type:" << account->accountType(); initConnect(); } void AccountItem::initConnect() { qCDebug(ClientLogger) << "Initializing connections for account:" << m_account->accountName(); connect(m_dbusRequest, &DbusAccountRequest::signalGetAccountInfoFinish, this, &AccountItem::slotGetAccountInfoFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleTypeListFinish, this, &AccountItem::slotGetScheduleTypeListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleListFinish, this, &AccountItem::slotGetScheduleListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetSysColorsFinish, this, &AccountItem::slotGetSysColorsFinish); connect(m_dbusRequest, &DbusAccountRequest::signalSearchScheduleListFinish, this, &AccountItem::slotSearchScheduleListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalDtLastUpdate, this, &AccountItem::signalDtLastUpdate); connect(m_dbusRequest, &DbusAccountRequest::signalAccountStateChange, this, &AccountItem::signalAccountStateChange); connect(m_dbusRequest, &DbusAccountRequest::signalSyncStateChange, this, &AccountItem::slotSyncStateChange); connect(m_dbusRequest, &DbusAccountRequest::signalAccountStateChange, this, &AccountItem::slotAccountStateChange); connect(m_dbusRequest, &DbusAccountRequest::signalSearchUpdate, this, &AccountItem::slotSearchUpdata); } /** * @brief AccountItem::getSyncMsg * å�Œæ­¥çжæ€�ç �转状æ€�说明 * @param code 状æ€�ç � * @return */ QString AccountItem::getSyncMsg(DAccount::AccountSyncState code) { qCDebug(ClientLogger) << "Getting sync message for state code:" << code; QString msg = ""; switch (code) { case DAccount::Sync_Normal: qCDebug(ClientLogger) << "Sync state: Normal"; msg = tr("Sync successful"); break; case DAccount::Sync_NetworkAnomaly: qCDebug(ClientLogger) << "Sync state: Network anomaly"; msg = tr("Network error"); break; case DAccount::Sync_ServerException: qCDebug(ClientLogger) << "Sync state: Server exception"; msg = tr("Server exception"); break; case DAccount::Sync_StorageFull: qCDebug(ClientLogger) << "Sync state: Storage full"; msg = tr("Storage full"); break; } return msg; } /** * @brief AccountItem::resetAccount * é‡�新获å�–å¸�户相关数æ�® */ void AccountItem::resetAccount() { qCDebug(ClientLogger) << "Resetting account data for:" << m_account->accountName(); // Optimization: Load only 3 months before and after the current month instead of the entire year // Use symmetric range: first day of month -3 to last day of month +3 QDate currentDate = QDate::currentDate(); if (!currentDate.isValid()) { qCWarning(ClientLogger) << "Current system date is invalid, aborting data load"; return; } QDate startMonth = currentDate.addMonths(-3); QDate endMonth = currentDate.addMonths(3); QDate startDate(startMonth.year(), startMonth.month(), 1); QDate endDate(endMonth.year(), endMonth.month(), endMonth.daysInMonth()); QDateTime start(startDate, QTime(0, 0, 0)); QDateTime end(endDate, QTime(23, 59, 59)); qCDebug(ClientLogger) << "Loading schedules from" << start.toString() << "to" << end.toString(); querySchedulesWithParameter(start, end); m_dbusRequest->getScheduleTypeList(); m_dbusRequest->getSysColors(); } /** * @brief AccountItem::getAccount * 获å�–å¸�户数æ�® * @return */ DAccount::Ptr AccountItem::getAccount() { return m_account; } //获å�–日程 QMap AccountItem::getScheduleMap() { // qCDebug(ClientLogger) << "Getting schedule map with" << m_scheduleMap.size() << "dates for account:" << m_account->accountName(); return m_scheduleMap; } QMap AccountItem::getSearchScheduleMap() { // qCDebug(ClientLogger) << "Getting search schedule map with" << m_searchedScheduleMap.size() << "dates for account:" << m_account->accountName(); return m_searchedScheduleMap; } /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ DScheduleType::List AccountItem::getScheduleTypeList() { qCDebug(ClientLogger) << "Getting schedule type list for account:" << m_account->accountName(); DScheduleType::List list; for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->privilege() != DScheduleType::None) { list.push_back(p); } } qCDebug(ClientLogger) << "Returning" << list.size() << "schedule types"; return list; } //æ ¹æ�®ç±»åž‹ID获å�–日程类型 DScheduleType::Ptr AccountItem::getScheduleTypeByID(const QString &typeID) { qCDebug(ClientLogger) << "Getting schedule type by ID:" << typeID; for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeID() == typeID) { qCDebug(ClientLogger) << "Found schedule type:" << p->displayName(); return p; } } qCDebug(ClientLogger) << "Schedule type not found for ID:" << typeID; return nullptr; } DScheduleType::Ptr AccountItem::getScheduleTypeByName(const QString &typeName) { qCDebug(ClientLogger) << "Getting schedule type by name:" << typeName; for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeName() == typeName || p->displayName() == typeName) { qCDebug(ClientLogger) << "Found schedule type with ID:" << p->typeID(); return p; } } qCDebug(ClientLogger) << "Schedule type not found for name:" << typeName; return nullptr; } DTypeColor::List AccountItem::getColorTypeList() { // qCDebug(ClientLogger) << "Getting color type list with" << m_typeColorList.size() << "colors"; return m_typeColorList; } /** * @brief AccountItem::isCanSyncShedule * 获å�–日程是å�¦å�¯ä»¥å�Œæ­¥ * @return */ bool AccountItem::isCanSyncShedule() { qCDebug(ClientLogger) << "Checking if can sync schedule for account:" << m_account->accountName(); if (getAccount()->accountType() != DAccount::Account_UnionID) { qCDebug(ClientLogger) << "Not a UnionID account, can sync schedule"; return true; } DOANetWorkDBus netManger; bool canSync = getAccount()->accountState().testFlag(DAccount::Account_Calendar) && getAccount()->accountState().testFlag(DAccount::Account_Open) && netManger.getNetWorkState() == DOANetWorkDBus::Active; qCDebug(ClientLogger) << "Can sync schedule:" << canSync; return canSync; } /** * @brief AccountItem::isCanSyncSetting * 获å�–通用设置是å�¦å�¯ä»¥å�Œæ­¥ * @return */ bool AccountItem::isCanSyncSetting() { qCDebug(ClientLogger) << "Checking if can sync settings for account:" << m_account->accountName(); if (!getAccount().isNull() && getAccount()->accountType() != DAccount::Account_UnionID) { qCDebug(ClientLogger) << "Not a UnionID account, can sync settings"; return true; } DOANetWorkDBus netManger; bool canSync = getAccount()->accountState().testFlag(DAccount::Account_Setting) && getAccount()->accountState().testFlag(DAccount::Account_Open) && netManger.getNetWorkState() == DOANetWorkDBus::Active; qCDebug(ClientLogger) << "Can sync settings:" << canSync; return canSync; } bool AccountItem::isEnableForUosAccount() { qCDebug(ClientLogger) << "Checking if account is enabled for UOS account:" << m_account->accountName(); if (getAccount()->accountType() != DAccount::Account_UnionID) { qCDebug(ClientLogger) << "Not a UnionID account, not enabled for UOS"; return false; } DOANetWorkDBus netManger; bool isEnabled = getAccount()->accountState().testFlag(DAccount::Account_Open) && netManger.getNetWorkState() == DOANetWorkDBus::Active; qCDebug(ClientLogger) << "Is enabled for UOS account:" << isEnabled; return isEnabled; } /** * @brief AccountItem::setAccountExpandStatus * æ›´æ–°å¸�户列表展开状æ€� * @param expandStatus 展开状æ€� */ void AccountItem::setAccountExpandStatus(bool expandStatus) { qCDebug(ClientLogger) << "Setting account expand status to:" << expandStatus << "for account:" << m_account->accountName(); m_account->setIsExpandDisplay(expandStatus); m_dbusRequest->setAccountExpandStatus(expandStatus); } void AccountItem::setAccountState(DAccount::AccountStates state) { qCDebug(ClientLogger) << "Setting account state to:" << state << "for account:" << m_account->accountName(); m_account->setAccountState(state); m_dbusRequest->setAccountState(state); emit signalAccountStateChange(); } void AccountItem::setSyncFreq(DAccount::SyncFreqType freq) { qCDebug(ClientLogger) << "Setting sync frequency to:" << freq << "for account:" << m_account->accountName(); m_account->setSyncFreq(freq); QString syncFreq = DAccount::syncFreqToJsonString(m_account); m_dbusRequest->setSyncFreq(syncFreq); } DAccount::AccountStates AccountItem::getAccountState() { DAccount::AccountStates state = m_dbusRequest->getAccountState(); // qCDebug(ClientLogger) << "Getting account state:" << state << "for account:" << m_account->accountName(); return state; } bool AccountItem::getSyncState() { bool syncState = m_dbusRequest->getSyncState(); // qCDebug(ClientLogger) << "Getting sync state:" << syncState << "for account:" << m_account->accountName(); return syncState; } DAccount::SyncFreqType AccountItem::getSyncFreq() { qCDebug(ClientLogger) << "Getting sync frequency for account:" << m_account->accountName(); QString syncFreq = m_dbusRequest->getSyncFreq(); DAccount::syncFreqFromJsonString(m_account, syncFreq); qCDebug(ClientLogger) << "Sync frequency:" << m_account->syncFreq(); return m_account->syncFreq(); } /** * @brief AccountItem::createJobType * 创建日程类型 * @param typeInfo 日程类型数æ�® * @param callback */ void AccountItem::createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { qCDebug(ClientLogger) << "Creating job type:" << typeInfo->displayName() << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); typeInfo->setPrivilege(DScheduleType::User); m_dbusRequest->createScheduleType(typeInfo); } /** * @brief AccountItem::updateScheduleType * 更新类型信æ�¯ * @param typeInfo 新的日程类型数æ�® * @param callback */ void AccountItem::updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { qCDebug(ClientLogger) << "Updating schedule type:" << typeInfo->displayName() << "ID:" << typeInfo->typeID() << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateScheduleType(typeInfo); } /** * @brief AccountItem::updateScheduleTypeShowState * 更新类型显示状æ€� * @param scheduleInfo * @param callback */ void AccountItem::updateScheduleTypeShowState(const DScheduleType::Ptr &scheduleInfo, CallbackFunc callback) { qCDebug(ClientLogger) << "Updating schedule type show state for type:" << scheduleInfo->displayName() << "ID:" << scheduleInfo->typeID(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateScheduleTypeShowState(scheduleInfo); } /** * @brief AccountItem::deleteScheduleTypeByID * æ ¹æ�®ç±»åž‹ID删除日程类型 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback) { qCDebug(ClientLogger) << "Deleting schedule type ID:" << typeID << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleTypeByID(typeID); } /** * @brief AccountItem::scheduleTypeIsUsed * 类型是å�¦è¢«æ—¥ç¨‹ä½¿ç”¨ * @param typeID 日程类型id * @param callback 回调函数 */ bool AccountItem::scheduleTypeIsUsed(const QString &typeID) { qCDebug(ClientLogger) << "Checking if schedule type is used, ID:" << typeID; bool isUsed = m_dbusRequest->scheduleTypeByUsed(typeID); qCDebug(ClientLogger) << "Schedule type is used:" << isUsed; return isUsed; } /** * @brief AccountItem::createSchedule * 创建日程 * @param scheduleInfo 日程数æ�® * @param callback 回调函数 */ void AccountItem::createSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback) { qCDebug(ClientLogger) << "Creating schedule:" << scheduleInfo->summary() << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->createSchedule(scheduleInfo); } /** * @brief AccountItem::updateSchedule * 更新日程 * @param scheduleInfo 新的日程数æ�® * @param callback 回调函数 */ void AccountItem::updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback) { qCDebug(ClientLogger) << "Updating schedule:" << scheduleInfo->summary() << "ID:" << scheduleInfo->scheduleTypeID() << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateSchedule(scheduleInfo); } DSchedule::Ptr AccountItem::getScheduleByScheduleID(const QString &scheduleID) { // qCDebug(ClientLogger) << "Getting schedule by ID:" << scheduleID; return m_dbusRequest->getScheduleByScheduleID(scheduleID); } /** * @brief AccountItem::deleteScheduleByID * æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param schedule ID日程id * @param callback 回调函数 */ void AccountItem::deleteScheduleByID(const QString &scheduleID, CallbackFunc callback) { qCDebug(ClientLogger) << "Deleting schedule ID:" << scheduleID << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleByScheduleID(scheduleID); } /** * @brief AccountItem::deleteSchedulesByTypeID * æ ¹æ�®ç±»åž‹ID删除日程 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback) { qCDebug(ClientLogger) << "Deleting all schedules for type ID:" << typeID << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteSchedulesByScheduleTypeID(typeID); } void AccountItem::querySchedulesWithParameter(const int year, CallbackFunc callback) { qCDebug(ClientLogger) << "Querying schedules for year:" << year << "account:" << m_account->accountName(); QDateTime start(QDate(year, 1, 1), QTime(0, 0, 0)); QDateTime end(QDate(year, 12, 31), QTime(23, 59, 59)); querySchedulesWithParameter(start, end, callback); } void AccountItem::querySchedulesWithParameter(const QDateTime &start, const QDateTime &end, CallbackFunc callback) { qCDebug(ClientLogger) << "Querying schedules from" << start.toString() << "to" << end.toString() << "for account:" << m_account->accountName(); querySchedulesWithParameter("", start, end, callback); } void AccountItem::querySchedulesWithParameter(const QString &key, const QDateTime &start, const QDateTime &end, CallbackFunc callback) { qCDebug(ClientLogger) << "Querying schedules with key:" << key << "from" << start.toString() << "to" << end.toString() << "for account:" << m_account->accountName(); DScheduleQueryPar::Ptr ptr; ptr.reset(new DScheduleQueryPar); ptr->setKey(key); ptr->setDtStart(start); ptr->setDtEnd(end); querySchedulesWithParameter(ptr, callback); } /** * @brief AccountItem::querySchedulesWithParameter * æ ¹æ�®æŸ¥è¯¢æ�¡ä»¶æŸ¥è¯¢æ•°æ�® * @param params 查询æ�¡ä»¶ * @param callback 回调函数 */ void AccountItem::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms, CallbackFunc callback) { qCDebug(ClientLogger) << "Querying schedules with parameters for account:" << m_account->accountName() << "key:" << params->key() << "start:" << params->dtStart().toString() << "end:" << params->dtEnd().toString(); m_preQuery = params; m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->querySchedulesWithParameter(params); } QString AccountItem::querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end) { qCDebug(ClientLogger) << "Querying schedules by external with key:" << key << "from" << start.toString() << "to" << end.toString() << "for account:" << m_account->accountName(); DScheduleQueryPar::Ptr ptr; ptr.reset(new DScheduleQueryPar); ptr->setKey(key); ptr->setDtStart(start); ptr->setDtEnd(end); QString json; m_dbusRequest->querySchedulesByExternal(ptr, json); return json; } bool AccountItem::querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end, QMap &out) { qCDebug(ClientLogger) << "Querying schedules by external with key:" << key << "from" << start.toString() << "to" << end.toString() << "for account:" << m_account->accountName(); DScheduleQueryPar::Ptr ptr; ptr.reset(new DScheduleQueryPar); ptr->setKey(key); ptr->setDtStart(start); ptr->setDtEnd(end); QString json; if (m_dbusRequest->querySchedulesByExternal(ptr, json)) { out = DSchedule::fromMapString(json); qCDebug(ClientLogger) << "Successfully queried external schedules, got" << out.size() << "dates"; return true; } qCDebug(ClientLogger) << "Failed to query external schedules"; return false; } /** * @brief AccountItem::slotGetAccountInfoFinish * 获å�–å¸�户信æ�¯å®Œæˆ�事件 * @param account å¸�户数æ�® */ void AccountItem::slotGetAccountInfoFinish(DAccount::Ptr account) { qCDebug(ClientLogger) << "Received account info update for:" << account->accountName() << "type:" << account->accountType(); m_account = account; emit signalAccountDataUpdate(); } /** * @brief AccountItem::slotGetScheduleTypeListFinish * 获å�–日程类型数æ�®å®Œæˆ�事件 * @param scheduleTypeList 日程类型数æ�® */ void AccountItem::slotGetScheduleTypeListFinish(DScheduleType::List scheduleTypeList) { qCDebug(ClientLogger) << "Received" << scheduleTypeList.size() << "schedule types for account:" << m_account->accountName(); m_scheduleTypeList = scheduleTypeList; emit signalScheduleTypeUpdate(); } /** * @brief AccountItem::slotGetScheduleListFinish * 获å�–日程数æ�®å®Œæˆ�事件 * @param map 日程数æ�® */ void AccountItem::slotGetScheduleListFinish(QMap map) { qCDebug(ClientLogger) << "Received schedule list with" << map.size() << "dates for account:" << m_account->accountName(); m_scheduleMap = map; emit signalScheduleUpdate(); } /** * @brief AccountItem::slotSearchScheduleListFinish * æ�œç´¢æ—¥ç¨‹æ•°æ�®å®Œæˆ�事件 * @param map 日程数æ�® */ void AccountItem::slotSearchScheduleListFinish(QMap map) { qCDebug(ClientLogger) << "Received search schedule list with" << map.size() << "dates for account:" << m_account->accountName(); m_searchedScheduleMap = map; emit signalSearchScheduleUpdate(); } /** * @brief AccountItem::slotGetSysColorsFinish * 获å�–系统颜色完æˆ�事件 */ void AccountItem::slotGetSysColorsFinish(DTypeColor::List typeColorList) { qCDebug(ClientLogger) << "Received" << typeColorList.size() << "system colors for account:" << m_account->accountName(); m_typeColorList = typeColorList; } void AccountItem::slotAccountStateChange(DAccount::AccountStates state) { qCDebug(ClientLogger) << "Account state changed to" << state << "for account:" << m_account->accountName(); getAccount()->setAccountState(state); emit signalAccountStateChange(); } void AccountItem::slotSyncStateChange(DAccount::AccountSyncState state) { qCDebug(ClientLogger) << "Sync state changed to:" << state << "for account:" << m_account->accountName(); getAccount()->setSyncState(state); emit signalSyncStateChange(state); } QString AccountItem::getDtLastUpdate() { QString lastUpdate = m_dbusRequest->getDtLastUpdate(); // qCDebug(ClientLogger) << "Getting last update time:" << lastUpdate << "for account:" << m_account->accountName(); return lastUpdate; } void AccountItem::slotSearchUpdata() { //如果存在查询则更新查询 if (nullptr != m_preQuery) { qCDebug(ClientLogger) << "Updating search results for account:" << m_account->accountName(); querySchedulesWithParameter(m_preQuery); } } void AccountItem::importSchedule(QString icsFilePath, QString typeID, bool cleanExists, CallbackFunc func) { qCDebug(ClientLogger) << "Importing schedule from file:" << icsFilePath << "to type:" << typeID << "clean exists:" << cleanExists << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(func); m_dbusRequest->importSchedule(icsFilePath, typeID, cleanExists); } void AccountItem::exportSchedule(QString icsFilePath, QString typeID, CallbackFunc func) { qCDebug(ClientLogger) << "Exporting schedule to file:" << icsFilePath << "from type:" << typeID << "for account:" << m_account->accountName(); m_dbusRequest->setCallbackFunc(func); m_dbusRequest->exportSchedule(icsFilePath, typeID); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/accountitem.h000066400000000000000000000127471523260663500301120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTITEM_H #define ACCOUNTITEM_H #include "dbus/dbusaccountrequest.h" #include //å�•项å¸�户信æ�¯ç®¡ç�†ç±» class AccountItem : public QObject { Q_OBJECT public: explicit AccountItem(const DAccount::Ptr &account, QObject *parent = nullptr); typedef QSharedPointer Ptr; //å�Œæ­¥çжæ€�ç �转状æ€�说明 static QString getSyncMsg(DAccount::AccountSyncState code); void resetAccount(); //获å�–å¸�户数æ�® DAccount::Ptr getAccount(); //获å�–日程 QMap getScheduleMap(); QMap getSearchScheduleMap(); // 获å�–日程类型信æ�¯é›† DScheduleType::List getScheduleTypeList(); //æ ¹æ�®ç±»åž‹ID获å�–日程类型 DScheduleType::Ptr getScheduleTypeByID(const QString &typeID); DScheduleType::Ptr getScheduleTypeByName(const QString &typeName); //获å�–颜色类型列表 DTypeColor::List getColorTypeList(); //获å�–日程是å�¦å�¯ä»¥å�Œæ­¥ bool isCanSyncShedule(); //获å�–通用设置是å�¦å�¯ä»¥å�Œæ­¥ bool isCanSyncSetting(); //获å�–uosè´¦å�·æ˜¯å�¦enable bool isEnableForUosAccount(); //æ›´æ–°å¸�户列表展开状æ€� void setAccountExpandStatus(bool expandStatus); //设置å¸�å�·çжæ€� void setAccountState(DAccount::AccountStates state); //设置å�Œæ­¥é¢‘率 void setSyncFreq(DAccount::SyncFreqType freq); //获å�–å¸�å�·çжæ€� DAccount::AccountStates getAccountState(); //获å�–å�Œæ­¥çжæ€� bool getSyncState(); //获å�–å�Œæ­¥é¢‘率 DAccount::SyncFreqType getSyncFreq(); //创建日程类型 void createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //更新类型信æ�¯ void updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //更新类型显示状æ€� void updateScheduleTypeShowState(const DScheduleType::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //æ ¹æ�®ç±»åž‹ID删除日程类型 void deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback = nullptr); //类型是å�¦è¢«æ—¥ç¨‹ä½¿ç”¨ bool scheduleTypeIsUsed(const QString &typeID); //创建日程 void createSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //更新日程 void updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //æ ¹æ�®æ—¥ç¨‹ID获å�–日程 DSchedule::Ptr getScheduleByScheduleID(const QString &scheduleID); //æ ¹æ�®æ—¥ç¨‹ID删除日程 void deleteScheduleByID(const QString &scheduleID, CallbackFunc callback = nullptr); //æ ¹æ�®ç±»åž‹ID删除日程 void deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback = nullptr); //æ ¹æ�®æŸ¥è¯¢æ�¡ä»¶æŸ¥è¯¢æ•°æ�® void querySchedulesWithParameter(const int year, CallbackFunc callback = nullptr); void querySchedulesWithParameter(const QDateTime &start, const QDateTime &end, CallbackFunc callback = nullptr); void querySchedulesWithParameter(const QString &key, const QDateTime &start, const QDateTime &end, CallbackFunc callback = nullptr); void querySchedulesWithParameter(const DScheduleQueryPar::Ptr &, CallbackFunc callback = nullptr); //对外请求接å�£ï¼Œå�Œæ­¥ QString querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end); bool querySchedulesByExternal(const QString &key, const QDateTime &start, const QDateTime &end, QMap& out); // 导入日程 void importSchedule(QString icsFilePath, QString TypeID, bool cleanExists, CallbackFunc func); // 导出日程 void exportSchedule(QString icsFilePath, QString TypeID, CallbackFunc func); signals: void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); void signalLogout(DAccount::Type); void signalDtLastUpdate(QString); void signalAccountStateChange(); void signalSyncStateChange(DAccount::AccountSyncState); public slots: //获å�–å¸�户信æ�¯å®Œæˆ�事件 void slotGetAccountInfoFinish(DAccount::Ptr); //获å�–日程类型数æ�®å®Œæˆ�事件 void slotGetScheduleTypeListFinish(DScheduleType::List); //获å�–日程数æ�®å®Œæˆ�事件 void slotGetScheduleListFinish(QMap); //æ�œç´¢æ—¥ç¨‹æ•°æ�®å®Œæˆ�事件 void slotSearchScheduleListFinish(QMap); //获å�–系统颜色完æˆ� void slotGetSysColorsFinish(DTypeColor::List); //å¸�户状æ€�改å�˜äº‹ä»¶ void slotAccountStateChange(DAccount::AccountStates); //å�Œæ­¥çжæ€�改å�˜äº‹ä»¶ void slotSyncStateChange(DAccount::AccountSyncState); //获å�–最å�Žä¸€æ¬¡å�Œæ­¥æ—¶é—´ QString getDtLastUpdate(); void slotSearchUpdata(); private: void initConnect(); private: DAccount::Ptr m_account; //å¸�户数æ�® DScheduleType::List m_scheduleTypeList; //日程类型数æ�® DTypeColor::List m_typeColorList; //颜色数æ�® DbusAccountRequest *m_dbusRequest = nullptr; //dbus请求实例 //一年的日程信æ�¯ QMap m_scheduleMap{}; //æ�œç´¢çš„æ—¥ç¨‹ä¿¡æ�¯ QMap m_searchedScheduleMap{}; QMap m_dataStatus; //æ•°æ�®çжæ€� DScheduleQueryPar::Ptr m_preQuery = nullptr; //上一次查询 }; #endif // ACCOUNTITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/accountmanager.cpp000066400000000000000000000305071523260663500311130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountmanager.h" #include "commondef.h" #include "units.h" AccountManager *AccountManager::m_accountManager = nullptr; AccountManager::AccountManager(QObject *parent) : QObject(parent) , m_dbusRequest(new DbusAccountManagerRequest(this)) { qCDebug(ClientLogger) << "Creating AccountManager"; initConnect(); m_dbusRequest->clientIsShow(true); if (isCommunityEdition()) { m_isSupportUid = false; m_isSupportUidLoaded = true; } else { m_isSupportUid = true; m_isSupportUidLoaded = false; m_dbusRequest->getIsSupportUidAsync(); } } void AccountManager::initConnect() { qCDebug(ClientLogger) << "Initializing connections"; connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetAccountListFinish, this, &AccountManager::slotGetAccountListFinish); connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetGeneralSettingsFinish, this, &AccountManager::slotGetGeneralSettingsFinish); connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetIsSupportUidFinish, this, &AccountManager::slotGetIsSupportUidFinish); } bool AccountManager::getIsSupportUid() const { qCDebug(ClientLogger) << "Getting isSupportUid:" << m_isSupportUid; return m_isSupportUid; } void AccountManager::slotGetIsSupportUidFinish(bool supported) { m_isSupportUid = supported; m_isSupportUidLoaded = true; if (m_localAccountItem) { auto account = m_localAccountItem->getAccount(); if (account) { const QString expectedName = m_isSupportUid ? tr("Local account") : tr("Event types"); if (account->accountName() != expectedName) { account->setAccountName(expectedName); emit signalAccountUpdate(); } } } } AccountManager::~AccountManager() { qCDebug(ClientLogger) << "Destroying AccountManager"; m_dbusRequest->clientIsShow(false); } AccountManager *AccountManager::getInstance() { // qCDebug(ClientLogger) << "Getting AccountManager instance"; static AccountManager m_accountManager; return &m_accountManager; } /** * @brief AccountManager::getAccountList * 获å�–å¸�户列表 * @return å¸�户列表 */ QList AccountManager::getAccountList() { qCDebug(ClientLogger) << "Getting account list"; QList> accountList; if (nullptr != m_localAccountItem.data()) { qCDebug(ClientLogger) << "Adding local account to list"; accountList.append(m_localAccountItem); } if (nullptr != m_unionAccountItem.data()) { qCDebug(ClientLogger) << "Adding union account to list"; accountList.append(m_unionAccountItem); } qCDebug(ClientLogger) << "Returning" << accountList.size() << "accounts"; return accountList; } /** * @brief AccountManager::getLocalAccountItem * 获å�–本地å¸�户 * @return */ AccountItem::Ptr AccountManager::getLocalAccountItem() { // qCDebug(ClientLogger) << "Getting local account item"; return m_localAccountItem; } /** * @brief AccountManager::getUnionAccountItem * 获å�–unionIDå¸�户 * @return */ AccountItem::Ptr AccountManager::getUnionAccountItem() { // qCDebug(ClientLogger) << "Getting union account item"; return m_unionAccountItem; } DScheduleType::Ptr AccountManager::getScheduleTypeByScheduleTypeId(const QString &schduleTypeId) { qCDebug(ClientLogger) << "Getting schedule type by ID:" << schduleTypeId; DScheduleType::Ptr type = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { type = p->getScheduleTypeByID(schduleTypeId); if (nullptr != type) { qCDebug(ClientLogger) << "Found schedule type:" << type->displayName() << "in account:" << p->getAccount()->accountName(); break; } } if (type == nullptr) { qCDebug(ClientLogger) << "Schedule type not found for ID:" << schduleTypeId; } return type; } AccountItem::Ptr AccountManager::getAccountItemByScheduleTypeId(const QString &schduleTypeId) { qCDebug(ClientLogger) << "Getting account item by schedule type ID:" << schduleTypeId; DScheduleType::Ptr type = getScheduleTypeByScheduleTypeId(schduleTypeId); if (nullptr == type) { qCDebug(ClientLogger) << "Schedule type not found for ID:" << schduleTypeId; return nullptr; } qCDebug(ClientLogger) << "Getting account by account ID:" << type->accountID(); return getAccountItemByAccountId(type->accountID()); } AccountItem::Ptr AccountManager::getAccountItemByAccountId(const QString &accountId) { qCDebug(ClientLogger) << "Getting account item by account ID:" << accountId; AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { if (p->getAccount()->accountID() == accountId) { qCDebug(ClientLogger) << "Found account:" << p->getAccount()->accountName(); account = p; break; } } if (account == nullptr) { qCDebug(ClientLogger) << "Account not found for ID:" << accountId; } return account; } AccountItem::Ptr AccountManager::getAccountItemByAccountName(const QString &accountName) { qCDebug(ClientLogger) << "Getting account item by account name:" << accountName; AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { if (p->getAccount()->accountName() == accountName) { qCDebug(ClientLogger) << "Found account with ID:" << p->getAccount()->accountID(); account = p; break; } } if (account == nullptr) { qCDebug(ClientLogger) << "Account not found for name:" << accountName; } return account; } DCalendarGeneralSettings::Ptr AccountManager::getGeneralSettings() { qCDebug(ClientLogger) << "Getting general settings"; return m_settings; } /** * @brief AccountManager::resetAccount * é‡�ç½®å¸�户信æ�¯ */ void AccountManager::resetAccount() { qCDebug(ClientLogger) << "Resetting account information"; m_localAccountItem.clear(); m_unionAccountItem.clear(); m_dbusRequest->getAccountList(); m_dbusRequest->getCalendarGeneralSettings(); } /** * @brief AccountManager::downloadByAccountID * æ ¹æ�®å¸�户ID下拉数æ�® * @param accountID å¸�户id * @param callback 回调函数 */ void AccountManager::downloadByAccountID(const QString &accountID, CallbackFunc callback) { qCDebug(ClientLogger) << "Downloading data for account ID:" << accountID; emit signalSyncNum(); m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->downloadByAccountID(accountID); } /** * @brief AccountManager::uploadNetWorkAccountData * 更新网络å¸�户数æ�® * @param callback 回调函数 */ void AccountManager::uploadNetWorkAccountData(CallbackFunc callback) { qCDebug(ClientLogger) << "Uploading network account data"; m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->uploadNetWorkAccountData(); } void AccountManager::setFirstDayofWeek(int value) { qCDebug(ClientLogger) << "Setting first day of week to:" << value; m_settings->setFirstDayOfWeek(static_cast(value)); m_dbusRequest->setFirstDayofWeek(value); } void AccountManager::setTimeFormatType(int value) { qCDebug(ClientLogger) << "Setting time format type to:" << value; m_settings->setTimeShowType(static_cast(value)); m_dbusRequest->setTimeFormatType(value); } // 设置一周首日æ�¥æº� void AccountManager::setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource value) { // qCDebug(ClientLogger) << "Setting first day of week source to:" << value; m_dbusRequest->setFirstDayofWeekSource(value); } // 设置时间显示格å¼�æ�¥æº� void AccountManager::setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource value) { // qCDebug(ClientLogger) << "Setting time format type source to:" << value; m_dbusRequest->setTimeFormatTypeSource(value); } // 获å�–一周首日æ�¥æº� DCalendarGeneralSettings::GeneralSettingSource AccountManager::getFirstDayofWeekSource() { DCalendarGeneralSettings::GeneralSettingSource source = m_dbusRequest->getFirstDayofWeekSource(); // qCDebug(ClientLogger) << "Getting first day of week source:" << source; return source; } // 获å�–时间显示格å¼�æ�¥æº� DCalendarGeneralSettings::GeneralSettingSource AccountManager::getTimeFormatTypeSource() { DCalendarGeneralSettings::GeneralSettingSource source = m_dbusRequest->getTimeFormatTypeSource(); // qCDebug(ClientLogger) << "Getting time format type source:" << source; return source; } /** * @brief login * å¸�户登录 */ void AccountManager::login() { qCDebug(ClientLogger) << "Logging in"; m_dbusRequest->login(); } /** * @brief loginout * å¸�户登出 */ void AccountManager::loginout() { qCDebug(ClientLogger) << "Logging out"; m_dbusRequest->logout(); } /** * @brief AccountManager::slotGetAccountListFinish * 获å�–å¸�户信æ�¯å®Œæˆ�事件 * @param accountList å¸�户列表 */ void AccountManager::slotGetAccountListFinish(DAccount::List accountList) { qCDebug(ClientLogger) << "Received account list with" << accountList.size() << "accounts"; bool hasUnionAccount = false; for (DAccount::Ptr account : accountList) { if (account->accountType() == DAccount::Account_Local) { qCDebug(ClientLogger) << "Processing local account"; QString localName = tr("Local account"); if (!gAccountManager->getIsSupportUid()) { qCDebug(ClientLogger) << "UID not supported, using 'Event types' as local name"; localName = tr("Event types"); } account->setAccountName(localName); if (!m_localAccountItem) { qCDebug(ClientLogger) << "Creating new local account item"; m_localAccountItem.reset(new AccountItem(account, this)); } m_localAccountItem->resetAccount(); } else if (account->accountType() == DAccount::Account_UnionID && !isCommunityEdition()) { qCDebug(ClientLogger) << "Processing UnionID account:" << account->accountName(); hasUnionAccount = true; if (!m_unionAccountItem) { qCDebug(ClientLogger) << "Creating new union account item"; m_unionAccountItem.reset(new AccountItem(account, this)); m_unionAccountItem->resetAccount(); } else if (m_unionAccountItem && m_unionAccountItem->getAccount()->accountID() != account->accountID()) { qCDebug(ClientLogger) << "Union account ID changed, creating new union account item"; emit m_unionAccountItem->signalLogout(m_unionAccountItem->getAccount()->accountType()); m_unionAccountItem.reset(new AccountItem(account, this)); m_unionAccountItem->resetAccount(); } } } if (!hasUnionAccount && m_unionAccountItem) { qCDebug(ClientLogger) << "No union account in list but union account item exists, clearing it"; emit m_unionAccountItem->signalLogout(m_unionAccountItem->getAccount()->accountType()); m_unionAccountItem.reset(nullptr); } for (AccountItem::Ptr p : getAccountList()) { qCDebug(ClientLogger) << "Setting up connections for account:" << p->getAccount()->accountName(); connect(p.data(), &AccountItem::signalScheduleUpdate, this, &AccountManager::signalScheduleUpdate); connect(p.data(), &AccountItem::signalSearchScheduleUpdate, this, &AccountManager::signalSearchScheduleUpdate); connect(p.data(), &AccountItem::signalScheduleTypeUpdate, this, &AccountManager::signalScheduleTypeUpdate); connect(p.data(), &AccountItem::signalLogout, this, &AccountManager::signalLogout); connect(p.data(), &AccountItem::signalAccountStateChange, this, &AccountManager::signalAccountStateChange); } emit signalAccountUpdate(); } /** * @brief AccountManager::slotGetGeneralSettingsFinish * 获å�–通用设置完æˆ�事件 * @param ptr 通用设置数æ�® */ void AccountManager::slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr) { qCDebug(ClientLogger) << "Received general settings"; m_settings = ptr; emit signalDataInitFinished(); emit signalGeneralSettingsUpdate(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/accountmanager.h000066400000000000000000000063441523260663500305620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTMANAGER_H #define ACCOUNTMANAGER_H #include "dbus/dbusaccountmanagerrequest.h" #include "accountitem.h" #include "dcalendargeneralsettings.h" //所有å¸�户管ç�†ç±» class AccountManager : public QObject { Q_OBJECT public: ~AccountManager() override; static AccountManager *getInstance(); QList getAccountList(); AccountItem::Ptr getLocalAccountItem(); AccountItem::Ptr getUnionAccountItem(); DScheduleType::Ptr getScheduleTypeByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByAccountId(const QString &accountId); AccountItem::Ptr getAccountItemByAccountName(const QString &accountName); DCalendarGeneralSettings::Ptr getGeneralSettings(); //é‡�新获å�–å¸�户信æ�¯ void resetAccount(); //æ ¹æ�®å¸�户ID下拉数æ�® void downloadByAccountID(const QString &accountID, CallbackFunc callback = nullptr); //更新网络å¸�户数æ�® void uploadNetWorkAccountData(CallbackFunc callback = nullptr); //设置一周首日 void setFirstDayofWeek(int); //设置时间显示格å¼� void setTimeFormatType(int); // 设置一周首日æ�¥æº� void setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource); // 设置时间显示格å¼�æ�¥æº� void setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource); // 获å�–一周首日æ�¥æº� DCalendarGeneralSettings::GeneralSettingSource getFirstDayofWeekSource(); // 获å�–时间显示格å¼�æ�¥æº� DCalendarGeneralSettings::GeneralSettingSource getTimeFormatTypeSource(); //å¸�户登录 void login(); //å¸�户登出 void loginout(); bool getIsSupportUid() const; signals: void signalDataInitFinished(); void signalAccountUpdate(); void signalGeneralSettingsUpdate(); void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); void signalAccountStateChange(); //正在å�Œæ­¥ void signalSyncNum(const int num = -1); //å¸�户登出信å�· void signalLogout(DAccount::Type); public slots: //获å�–å¸�户信æ�¯å®Œæˆ�事件 void slotGetAccountListFinish(DAccount::List accountList); //获å�–通用设置完æˆ�事件 void slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); //获å�–是å�¦æ”¯æŒ�UID完æˆ�事件 void slotGetIsSupportUidFinish(bool supported); protected: explicit AccountManager(QObject *parent = nullptr); private: void initConnect(); private: static AccountManager *m_accountManager; AccountItem::Ptr m_localAccountItem; AccountItem::Ptr m_unionAccountItem; DCalendarGeneralSettings::Ptr m_settings; DbusAccountManagerRequest *m_dbusRequest; bool m_isSupportUid = false; bool m_isSupportUidLoaded = false; }; #define gAccountManager AccountManager::getInstance() #define gLocalAccountItem gAccountManager->getLocalAccountItem() #define gUosAccountItem gAccountManager->getUnionAccountItem() #endif // ACCOUNTMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/calendarmanage.cpp000066400000000000000000000345661523260663500310570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarmanage.h" #include "cschedulebasewidget.h" #include "scheduledatamanage.h" #include "commondef.h" #include CalendarManager *CalendarManager::m_scheduleManager = nullptr; CalendarManager *CalendarManager::getInstance() { // qCDebug(ClientLogger) << "Getting CalendarManager instance"; CaHuangLiDayInfo::registerMetaType(); if (m_scheduleManager == nullptr) { m_scheduleManager = new CalendarManager; qRegisterMetaType>("QMap"); qRegisterMetaType >("QMap"); qRegisterMetaType>("QMap"); } return m_scheduleManager; } void CalendarManager::releaseInstance() { // qCDebug(ClientLogger) << "Releasing CalendarManager instance"; if (m_scheduleManager != nullptr) { delete m_scheduleManager; m_scheduleManager = nullptr; } } //设置选择时间 void CalendarManager::setSelectDate(const QDate &selectDate, bool isSwitchYear) { qCDebug(ClientLogger) << "Setting select date to:" << selectDate.toString() << "switch year:" << isSwitchYear; m_selectDate = selectDate; if (isSwitchYear || m_showDateRange.startDate > m_selectDate || m_showDateRange.stopDate < m_selectDate) { qCDebug(ClientLogger) << "Selected date outside display range, updating year to:" << selectDate.year(); //如果选择时间ä¸�在显示范围内则修改显示年份,开始和结æ�Ÿæ—¶é—´ setYearBeginAndEndDate(m_selectDate.year()); } } //获å�–选择时间 QDate CalendarManager::getSelectDate() const { // qCDebug(ClientLogger) << "Getting select date:" << m_selectDate.toString(); return m_selectDate; } //设置当å‰�æ—¶é—´ void CalendarManager::setCurrentDateTime(const QDateTime ¤tDateTime) { // qCDebug(ClientLogger) << "Setting current date time to:" << currentDateTime.toString(); m_currentDateTime = currentDateTime; } //获å�–当å‰�æ—¶é—´ QDateTime CalendarManager::getCurrentDate() const { // qCDebug(ClientLogger) << "Getting current date time:" << m_currentDateTime.toString(); return m_currentDateTime; } QVector CalendarManager::getMonthDate(const int &year, const int &month) { qCDebug(ClientLogger) << "Getting month dates for year:" << year << "month:" << month; QVector _resultDate; //自然月的第一天 const QDate _monthFirstDay{year, month, 1}; //获å�–显示月的第一天 const QDate _firstShowDayOfMonth = getFirstDayOfWeek(_monthFirstDay); //获å�–该月所有显示时间 for (int i = 0; i < 42; ++i) { _resultDate.append(_firstShowDayOfMonth.addDays(i)); } return _resultDate; } QVector CalendarManager::getWeekDate(const QDate &date) { qCDebug(ClientLogger) << "Getting week dates starting from:" << date.toString(); QVector _resultDate; //获å�–这个周的第一天日期 const QDate _firstDayofWeek = getFirstDayOfWeek(date); //获å�–该周所有显示时间 for (int i = 0; i < 7; ++i) { _resultDate.append(_firstDayofWeek.addDays(i)); } return _resultDate; } //设置周显示格å¼� void CalendarManager::setWeekDayFormatByID(const int &weekDayFormatID) { qCDebug(ClientLogger) << "Setting week day format to ID:" << weekDayFormatID; switch (weekDayFormatID) { case 0: m_weekDayFormat = "dddd"; break; default: m_weekDayFormat = "ddd"; break; } } //获å�–周显示格å¼� QString CalendarManager::getWeekDayFormat() const { // qCDebug(ClientLogger) << "Getting week day format:" << m_weekDayFormat; return m_weekDayFormat; } //返回显示的年份,开始和结æ�Ÿæ—¶é—´ ShowDateRange CalendarManager::getShowDateRange() const { // qCDebug(ClientLogger) << "Getting show date range for year:" << m_showDateRange.showYear // << "from" << m_showDateRange.startDate.toString() // << "to" << m_showDateRange.stopDate.toString(); return m_showDateRange; } //æ ¹æ�®æ—¥æœŸèŽ·å�–当å‰�周第一天的日期 QDate CalendarManager::getFirstDayOfWeek(const QDate &date) { qCDebug(ClientLogger) << "Calculating first day of week for date:" << date.toString(); //æ ¹æ�®é€‰æ‹©æ—¶é—´å‘¨å·¥ä½œæ—¥å’Œæ¯�周第一天的周工作日得到å��ç§»é‡� int _offset = date.dayOfWeek() - getFirstDayOfWeek(); //æ ¹æ�®å��ç§»é‡�获å�–需è¦�添加还有å‡�去的å��移天数 const int _offsetDay = (_offset + 7) % 7; //返回这周第一天的日期 QDate firstDay = date.addDays(-_offsetDay); qCDebug(ClientLogger) << "First day of week is:" << firstDay.toString(); return firstDay; } //æ ¹æ�®æ—¥æœŸèŽ·å�–该日期处于该年第多少周 int CalendarManager::getWeekNumOfYear(const QDate &date) { qCDebug(ClientLogger) << "Calculating week number of year for date:" << date.toString(); int _weekNum {0}; //获å�–选择时间所在周的最å�Žä¸€å¤© const QDate _laseDateInWeekBySelectDate = getInstance()->getFirstDayOfWeek(date).addDays(6); //该年第一天 const QDate _firstDayOfYear{_laseDateInWeekBySelectDate.year(), 1, 1}; //该年显示的第一天日期 const QDate _firstShowDayOfYear = getInstance()->getFirstDayOfWeek(_firstDayOfYear); //处于该年显示第多少天,0为第一天 const qint64 _dayOfShowYear = _firstShowDayOfYear.daysTo(_firstDayOfYear) + _laseDateInWeekBySelectDate.dayOfYear() - 1; _weekNum = qFloor(_dayOfShowYear / 7) + 1; qCDebug(ClientLogger) << "Week number is:" << _weekNum; return _weekNum; } void CalendarManager::setTimeFormatChanged(int value) { qCDebug(ClientLogger) << "Setting time format to value:" << value; // value = 0/1,对应的时间格å¼�ä¸�对 if (value == 0) { m_timeFormat = "h:mm"; } else { m_timeFormat = "hh:mm"; } updateData(); } void CalendarManager::setDateFormatChanged(int value) { qCDebug(ClientLogger) << "Setting date format to value:" << value; switch (value) { case 0: { m_dateFormat = "yyyy/M/d"; } break; case 1: { m_dateFormat = "yyyy-M-d"; } break; case 2: { m_dateFormat = "yyyy.M.d"; } break; case 3: { m_dateFormat = "yyyy/MM/dd"; } break; case 4: { m_dateFormat = "yyyy-MM-dd"; } break; case 5: { m_dateFormat = "yyyy.MM.dd"; } break; case 6: { m_dateFormat = "yy/M/d"; } break; case 7: { m_dateFormat = "yy-M-d"; } break; case 8: { m_dateFormat = "yy.M.d"; } break; default: { m_dateFormat = "yyyy-MM-dd"; } break; } } QString CalendarManager::getTimeFormat() const { // qCDebug(ClientLogger) << "Getting time format:" << m_timeFormat; return m_timeFormat; } void CalendarManager::setTimeShowType(int value, bool update) { qCDebug(ClientLogger) << "Setting time show type to:" << value << "update:" << update; m_timeShowType = value; if (update) { updateData(); } } int CalendarManager::getTimeShowType() const { // qCDebug(ClientLogger) << "Getting time show type:" << m_timeShowType; return m_timeShowType; } QString CalendarManager::getDateFormat() const { // qCDebug(ClientLogger) << "Getting date format:" << m_dateFormat; return m_dateFormat; } void CalendarManager::setYearBeginAndEndDate(const int year) { qCDebug(ClientLogger) << "Setting year begin and end dates for year:" << year; m_showDateRange.showYear = year; QDate _firstDayOfJan(year, 1, 1); m_showDateRange.startDate = getFirstDayOfWeek(_firstDayOfJan); QDate _firstDayOfDec(year, 12, 1); m_showDateRange.stopDate = getFirstDayOfWeek(_firstDayOfDec).addDays(42 - 1); qCDebug(ClientLogger) << "Date range set to:" << m_showDateRange.startDate.toString() << "to" << m_showDateRange.stopDate.toString(); //更新日程 #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) // Qt5.12+: QDate 有 startOfDay() 方法 gScheduleManager->resetSchedule(m_showDateRange.startDate.startOfDay(), m_showDateRange.stopDate.startOfDay()); #else // Qt5.11.3 兼容:使用 QDateTime 构造函数将 QDate 转为 QDateTime(时间设为 00:00:00) gScheduleManager->resetSchedule(QDateTime(m_showDateRange.startDate), QDateTime(m_showDateRange.stopDate)); #endif // No longer query the entire year's lunar data here; each view queries on demand instead // This reduces DBus queries at startup and improves launch speed } /** * @brief CalendarManager::addShowWidget 添加显示界é�¢ * @param showWidget */ void CalendarManager::addShowWidget(CScheduleBaseWidget *showWidget) { // qCDebug(ClientLogger) << "Adding show widget:" << showWidget; m_showWidget.append(showWidget); } /** * @brief CalendarManager::removeShowWidget 移除显示界é�¢ * @param showWidget */ void CalendarManager::removeShowWidget(CScheduleBaseWidget *showWidget) { // qCDebug(ClientLogger) << "Removing show widget:" << showWidget; m_showWidget.removeOne(showWidget); } /** * @brief CalendarManager::getShowWidget æ ¹æ�®ç¼–å�·èŽ·å�–显示界é�¢ * @param index * @return */ CScheduleBaseWidget *CalendarManager::getShowWidget(const int index) { qCDebug(ClientLogger) << "Getting show widget at index:" << index; if (index < 0 || index >= m_showWidget.size()) { qCDebug(ClientLogger) << "Invalid index, returning nullptr"; return nullptr; } return m_showWidget.at(index); } /** * @brief CalendarManager::getShowWidgetSize 获å�–显示窗å�£çš„æ•°ç›® * @return */ int CalendarManager::getShowWidgetSize() { // qCDebug(ClientLogger) << "Getting show widget size:" << m_showWidget.size(); return m_showWidget.size(); } /** * @brief CalendarManager::getShowLunar 获å�–农历信æ�¯ * @return */ bool CalendarManager::getShowLunar() const { // qCDebug(ClientLogger) << "Getting show lunar flag:" << m_showLunar; return m_showLunar; } /** * @brief getFirstDayOfWeek * @return 一周首日 */ Qt::DayOfWeek CalendarManager::getFirstDayOfWeek() { // qCDebug(ClientLogger) << "Getting first day of week:" << m_firstDayOfWeek; return Qt::DayOfWeek(m_firstDayOfWeek); } void CalendarManager::setFirstDayOfWeek(int day, bool update) { qCDebug(ClientLogger) << "Setting first day of week to:" << day << "update:" << update; m_firstDayOfWeek = day; //更新显示界é�¢ if (update) { updateData(); } } void CalendarManager::updateData() { qCDebug(ClientLogger) << "Updating calendar data for" << m_showWidget.size() << "widgets"; // 为了跟之å‰�的代ç �一致,在这里å�‘é€�ä¿¡å�·å‡ºæ�¥ï¼› emit sigNotifySidebarFirstDayChanged(getFirstDayOfWeek()); for (int i = 0; i < m_showWidget.size(); ++i) { m_showWidget.at(i)->updateData(); } } CalendarManager::CalendarManager(QObject *parent) : QObject(parent) , m_timeDateDbus(new DaemonTimeDate(this)) , m_currentDateTime(QDateTime::currentDateTime()) , m_selectDate(m_currentDateTime.date()) , m_weekDayFormat("ddd") { qCDebug(ClientLogger) << "Creating CalendarManager"; initConnection(); initData(); } CalendarManager::~CalendarManager() { qCDebug(ClientLogger) << "Destroying CalendarManager"; } /** * @brief CalendarManager::initData åˆ�始化数æ�® */ void CalendarManager::initData() { qCDebug(ClientLogger) << "Initializing calendar data"; //获å�–本地语言判断是å�¦ä¸ºä¸­æ–‡ m_showLunar = QLocale::system().language() == QLocale::Chinese; qCDebug(ClientLogger) << "Show lunar set to:" << m_showLunar << "based on system language"; //获å�–时间日期格å¼� const int _timeFormat = m_timeDateDbus->shortTimeFormat(); const int _dateFormat = m_timeDateDbus->shortDateFormat(); qCDebug(ClientLogger) << "System time format:" << _timeFormat << "date format:" << _dateFormat; setYearBeginAndEndDate(m_selectDate.year()); //设置时间日期格å¼� setTimeFormatChanged(_timeFormat); setDateFormatChanged(_dateFormat); slotGeneralSettingsUpdate(); } /** * @brief CalendarManager::initConnection åˆ�始化关è�” */ void CalendarManager::initConnection() { qCDebug(ClientLogger) << "Initializing calendar connections"; connect(gAccountManager, &AccountManager::signalGeneralSettingsUpdate, this, &CalendarManager::slotGeneralSettingsUpdate); connect(m_timeDateDbus, &DaemonTimeDate::ShortTimeFormatChanged, this, &CalendarManager::signalTimeFormatChanged); connect(m_timeDateDbus, &DaemonTimeDate::ShortTimeFormatChanged, this, &CalendarManager::slotTimeFormatChanged); // add time format slot. connect(m_timeDateDbus, &DaemonTimeDate::ShortDateFormatChanged, this, &CalendarManager::slotDateFormatChanged); connect(m_timeDateDbus, &DaemonTimeDate::ShortDateFormatChanged, this, &CalendarManager::signalDateFormatChanged); } /** * @brief CalendarManager::WeekBeginsChanged å…³è�”dbusä¿¡å�·ï¼Œæ¯�周首日改å�˜äº‹è§¦å�‘ * @param value */ void CalendarManager::weekBeginsChanged(int value) { qCDebug(ClientLogger) << "Week begins changed to:" << value; setFirstDayOfWeek(value); } /** * @brief CalendarManager::slotGetLunarSuccess 农历更新æˆ�功刷新界é�¢ */ void CalendarManager::slotGetLunarSuccess() { qCDebug(ClientLogger) << "Lunar data updated successfully"; //更新显示界é�¢ for (int i = 0; i < m_showWidget.size(); ++i) { m_showWidget.at(i)->updateShowLunar(); } } void CalendarManager::slotGeneralSettingsUpdate() { qCDebug(ClientLogger) << "Updating from general settings"; DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); if (!setting) { qCWarning(ClientLogger) << "Failed to get general settings"; return; } qCDebug(ClientLogger) << "Setting first day of week to:" << setting->firstDayOfWeek() << "and time show type to:" << setting->timeShowType(); setFirstDayOfWeek(setting->firstDayOfWeek()); setTimeShowType(setting->timeShowType()); } /** * @brief CalendarManager::slotDateFormatChanged 更新日期显示格å¼� * @param value */ void CalendarManager::slotDateFormatChanged(int value) { qCDebug(ClientLogger) << "Date format changed to:" << value; setDateFormatChanged(value); } void CalendarManager::slotTimeFormatChanged(int value) { qCDebug(ClientLogger) << "Time format changed to:" << value; setTimeFormatChanged(value); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/calendarmanage.h000066400000000000000000000077451523260663500305230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEMANAGE_H #define CSCHEDULEMANAGE_H #include "lunarmanager.h" #include "dbustimedate.h" #include struct ShowDateRange { int showYear{0}; QDate startDate; QDate stopDate; }; typedef DBusTimedate DaemonTimeDate; class CScheduleBaseWidget; /** * @brief The CalendarManage class * 日历数æ�®ç®¡ç�†ç±» */ class CalendarManager : public QObject { Q_OBJECT public: static CalendarManager *getInstance(); static void releaseInstance(); //设置选择时间 void setSelectDate(const QDate &selectDate, bool isSwitchYear = false); //获å�–选择时间 QDate getSelectDate() const; //设置当å‰�æ—¶é—´ void setCurrentDateTime(const QDateTime ¤tDateTime = QDateTime::currentDateTime()); //获å�–当å‰�æ—¶é—´ QDateTime getCurrentDate() const; //获å�–月份的所有时间 QVector getMonthDate(const int &year, const int &month); //获å�–一周的所有时间 QVector getWeekDate(const QDate &date); //设置周显示格å¼� void setWeekDayFormatByID(const int &weekDayFormatID); //获å�–周显示格å¼� QString getWeekDayFormat() const; //返回显示的年份,开始和结æ�Ÿæ—¶é—´ ShowDateRange getShowDateRange() const; //æ ¹æ�®æ—¥æœŸèŽ·å�–当å‰�周第一天的日期 QDate getFirstDayOfWeek(const QDate &date); //æ ¹æ�®æ—¥æœŸèŽ·å�–该日期处于该年第多少周 static int getWeekNumOfYear(const QDate &date); void setTimeFormatChanged(int value); void setDateFormatChanged(int value); QString getTimeFormat() const; void setTimeShowType(int value, bool update = true); int getTimeShowType() const; QString getDateFormat() const; //添加显示界é�¢ void addShowWidget(CScheduleBaseWidget *showWidget); //移除显示界é�¢ void removeShowWidget(CScheduleBaseWidget *showWidget); //æ ¹æ�®ç¼–å�·èŽ·å�–显示界é�¢ CScheduleBaseWidget *getShowWidget(const int index); //获å�–显示窗å�£çš„æ•°ç›® int getShowWidgetSize(); //获å�–是å�¦æ˜¾ç¤ºå†œåŽ†ä¿¡æ�¯ bool getShowLunar() const; //获å�–一周首日 Qt::DayOfWeek getFirstDayOfWeek(); //设置一周首日 void setFirstDayOfWeek(int, bool update = true); void updateData(); signals: void signalTimeFormatChanged(int value); void signalDateFormatChanged(int value); void sigNotifySidebarFirstDayChanged(int value); public slots: //å…³è�”dbusä¿¡å�·ï¼Œæ¯�周首日改å�˜äº‹è§¦å�‘ void weekBeginsChanged(int value); //农历更新æˆ�功刷新界é�¢ void slotGetLunarSuccess(); void slotGeneralSettingsUpdate(); void slotDateFormatChanged(int value); void slotTimeFormatChanged(int value); private: explicit CalendarManager(QObject *parent = nullptr); ~CalendarManager(); void setYearBeginAndEndDate(const int year); private: //åˆ�始化数æ�® void initData(); //åˆ�始化关è�” void initConnection(); private: static CalendarManager *m_scheduleManager; DaemonTimeDate *m_timeDateDbus; //控制中心dbus QList m_showWidget; //日历主视图 bool m_showLunar; //显示农历 int m_firstDayOfWeek = Qt::Sunday; //一周首日 QDateTime m_currentDateTime; //当å‰�æ—¶é—´ QDate m_selectDate; //当å‰�选择的时间 QString m_weekDayFormat{"ddd"}; //周显示格å¼�, ddd: 周一, dddd: 星期一 ShowDateRange m_showDateRange; //时间范围 QString m_timeFormat = "h:mm"; //时间显示格å¼� QString m_dateFormat = "yyyy-MM-dd"; //日期显示格å¼� int m_timeShowType = 0; }; #define gCalendarManager CalendarManager::getInstance() #endif // CSCHEDULEMANAGE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/lunarmanager.cpp000066400000000000000000000324011523260663500305730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarmanager.h" #include "commondef.h" #include #include #include static constexpr int MAX_CACHED_RANGES = 10; LunarManager::LunarManager(QObject *parent) : QObject(parent) , m_dbusRequest(new DbusHuangLiRequest) { qCDebug(ClientLogger) << "Creating LunarManager"; } LunarManager* LunarManager::getInstace() { // qCDebug(ClientLogger) << "Getting LunarManager instance"; static LunarManager lunarManager; return &lunarManager; } /** * @brief LunarManager::getFestivalMonth * 按月获å�–节å�‡æ—¥ä¿¡æ�¯ * @param year å¹´ * @param month 月 * @param festivalInfo æ•°æ�®ä¿�å­˜ä½�ç½® * @return */ bool LunarManager::getFestivalMonth(quint32 year, quint32 month, FestivalInfo& festivalInfo) { // qCDebug(ClientLogger) << "Getting festival month for year:" << year << "month:" << month; bool result = m_dbusRequest->getFestivalMonth(year, month, festivalInfo); // qCDebug(ClientLogger) << "Get festival month result:" << result << "with" << festivalInfo.listHoliday.size() << "holidays"; return result; } /** * @brief LunarManager::getFestivalMonth * 按月获å�–节å�‡æ—¥ä¿¡æ�¯ * @param date 月所在日期 * @param festivalInfo æ•°æ�®å‚¨å­˜ä½�ç½® * @return 请求æˆ�功状æ€� */ bool LunarManager::getFestivalMonth(const QDate &date, FestivalInfo& festivalInfo) { // qCDebug(ClientLogger) << "Getting festival month for date:" << date.toString(); return m_dbusRequest->getFestivalMonth(quint32(date.year()), quint32(date.month()), festivalInfo); } /** * @brief LunarManager::getHuangLiDay * 按天获å�–黄历信æ�¯ * @param year å¹´ * @param month 月 * @param day æ—¥ * @param info æ•°æ�®å‚¨å­˜ä½�ç½® * @return 请求æˆ�功状æ€� */ bool LunarManager::getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &info) { // qCDebug(ClientLogger) << "Getting HuangLi day for year:" << year << "month:" << month << "day:" << day; bool result = m_dbusRequest->getHuangLiDay(year, month, day, info); // qCDebug(ClientLogger) << "Get HuangLi day result:" << result; return result; } /** * @brief LunarManager::getHuangLiDay * 按天获å�–农历信æ�¯ * @param date 请求日期 * @param info æ•°æ�®å‚¨å­˜ä½�ç½® * @return 请求æˆ�功状æ€� */ bool LunarManager::getHuangLiDay(const QDate &date, CaHuangLiDayInfo &info) { // qCDebug(ClientLogger) << "Getting HuangLi day for date:" << date.toString(); return getHuangLiDay(quint32(date.year()), quint32(date.month()), quint32(date.day()), info); } /** * @brief LunarManager::getHuangLiMonth * 按月获å�–农历信æ�¯ * @param year å¹´ * @param month 月 * @param info æ—¥ * @param fill * @return 请求æˆ�功状æ€� */ bool LunarManager::getHuangLiMonth(quint32 year, quint32 month, CaHuangLiMonthInfo &info, bool fill) { // qCDebug(ClientLogger) << "Getting HuangLi month for year:" << year << "month:" << month << "fill:" << fill; bool result = m_dbusRequest->getHuangLiMonth(year, month, fill, info); // qCDebug(ClientLogger) << "Get HuangLi month result:" << result << "with" << info.mDays << "days"; return result; } /** * @brief LunarManager::getHuangLiMonth * 按月获å�–农历信æ�¯ * @param date 请求日期 * @param info æ•°æ�®å‚¨å­˜ä½�ç½® * @return 请求æˆ�功状æ€� */ bool LunarManager::getHuangLiMonth(const QDate &date, CaHuangLiMonthInfo &info, bool fill) { // qCDebug(ClientLogger) << "Getting HuangLi month for date:" << date.toString() << "fill:" << fill; return getHuangLiMonth(quint32(date.year()), quint32(date.month()), info, fill); } /** * @brief LunarManager::getHuangLiShortName * 获å�–当天的农历月日期和日日期å�� * @param date 请求日期 * @return 农历å�� */ QString LunarManager::getHuangLiShortName(const QDate &date) { qCDebug(ClientLogger) << "Getting HuangLi short name for date:" << date.toString(); CaHuangLiDayInfo info = getHuangLiDay(date); QString shortName = info.mLunarMonthName + info.mLunarDayName; qCDebug(ClientLogger) << "HuangLi short name:" << shortName; return shortName; } /** * @brief LunarManager::queryLunarInfo * 查询农历信æ�¯ * @param startDate 开始时间 * @param stopDate 结æ�Ÿæ—¶é—´ */ void LunarManager::queryLunarInfo(const QDate &startDate, const QDate &stopDate) { qCDebug(ClientLogger) << "Querying lunar info from" << startDate.toString() << "to" << stopDate.toString(); const int offsetMonth = (stopDate.year() - startDate.year()) * 12 + stopDate.month() - startDate.month(); QFutureWatcher> *w = new QFutureWatcher>(this); QFuture> future = QtConcurrent::run([offsetMonth, startDate]() -> QMap { auto dbus = new DbusHuangLiRequest(); QMap lunarInfoMap; CaHuangLiMonthInfo monthInfo; //获å�–开始时间至结æ�Ÿæ—¶é—´æ‰€åœ¨æœˆçš„农历和节å�‡æ—¥ä¿¡æ�¯ for (int i = 0; i <= offsetMonth; ++i) { monthInfo.clear(); QDate beginDate = startDate.addMonths(i); dbus->getHuangLiMonth(beginDate.year(), beginDate.month(), false, monthInfo); QDate getDate(beginDate.year(), beginDate.month(), 1); for (int j = 0; j < monthInfo.mDays; ++j) { lunarInfoMap[getDate.addDays(j)] = monthInfo.mCaLunarDayInfo.at(j); } } delete dbus; return lunarInfoMap; }); connect(w, &QFutureWatcher>::finished, this, [this, w, startDate, stopDate]() { auto result = w->result(); for (auto it = result.constBegin(); it != result.constEnd(); ++it) { m_lunarInfoMap[it.key()] = it.value(); } m_pendingQueries.remove(qMakePair(startDate, stopDate)); qCDebug(ClientLogger) << "Lunar info query completed, total cached:" << m_lunarInfoMap.size() << "days"; w->deleteLater(); emit lunarInfoReady(); }); w->setFuture(future); } /** * @brief LunarManager::queryFestivalInfo * 查询节å�‡æ—¥ä¿¡æ�¯ï¼ˆå¼‚步) * @param startDate 开始时间 * @param stopDate 结æ�Ÿæ—¶é—´ */ void LunarManager::queryFestivalInfo(const QDate &startDate, const QDate &stopDate) { qCDebug(ClientLogger) << "Querying festival info from" << startDate.toString() << "to" << stopDate.toString(); const int offsetMonth = (stopDate.year() - startDate.year()) * 12 + stopDate.month() - startDate.month(); QFutureWatcher> *w = new QFutureWatcher>(this); QFuture> future = QtConcurrent::run([offsetMonth, startDate]() -> QVector { auto dbus = new DbusHuangLiRequest(); QVector festivallist{}; for (int i = 0; i <= offsetMonth; ++i) { FestivalInfo info; QDate beginDate = startDate.addMonths(i); if (dbus->getFestivalMonth(quint32(beginDate.year()), quint32(beginDate.month()), info)) { festivallist.push_back(info); } } delete dbus; return festivallist; }); connect(w, &QFutureWatcher>::finished, this, [this, w, startDate, stopDate]() { auto festivallist = w->result(); for (const FestivalInfo &info : festivallist) { for (const HolidayInfo &h : info.listHoliday) { m_festivalDateMap[h.date] = h.status; } } m_pendingQueries.remove(qMakePair(startDate, stopDate)); qCDebug(ClientLogger) << "Festival date map updated with" << m_festivalDateMap.size() << "days"; w->deleteLater(); emit festivalInfoReady(); }); w->setFuture(future); } /** * @brief LunarManager::getHuangLiDay * 获å�–农历信æ�¯ * @param date 获å�–日期 * @return */ CaHuangLiDayInfo LunarManager::getHuangLiDay(const QDate &date) { qCDebug(ClientLogger) << "Getting HuangLi day info for date:" << date.toString(); //首先在缓存中查找是å�¦å­˜åœ¨è¯¥æ—¥æœŸçš„农历信æ�¯ï¼Œæ²¡æœ‰åˆ™é€šè¿‡dbus获å�– CaHuangLiDayInfo info; if (m_lunarInfoMap.contains(date)) { qCDebug(ClientLogger) << "Found HuangLi day info in cache"; info = m_lunarInfoMap[date]; } else { qCDebug(ClientLogger) << "HuangLi day info not in cache, fetching via dbus"; getHuangLiDay(date, info); } return info; } /** * @brief LunarManager::getHuangLiDayAsync * 异步获å�–农历信æ�¯ï¼Œé�¿å…�阻塞 UI * @param date 获å�–日期 */ void LunarManager::getHuangLiDayAsync(const QDate &date) { qCDebug(ClientLogger) << "Getting HuangLi day info async for date:" << date.toString(); if (m_lunarInfoMap.contains(date)) { qCDebug(ClientLogger) << "Found HuangLi day info in cache, emitting directly"; emit huangLiDayReady(date, m_lunarInfoMap[date]); return; } //异步获å�–农历数æ�® QFutureWatcher *w = new QFutureWatcher(this); QFuture future = QtConcurrent::run([date]() -> CaHuangLiDayInfo { auto dbus = new DbusHuangLiRequest(); CaHuangLiDayInfo info; dbus->getHuangLiDay(date.year(), date.month(), date.day(), info); delete dbus; return info; }); connect(w, &QFutureWatcher::finished, this, [this, w, date]() { CaHuangLiDayInfo info = w->result(); //缓存结果 m_lunarInfoMap[date] = info; qCDebug(ClientLogger) << "Async HuangLi day info ready for date:" << date.toString(); emit huangLiDayReady(date, info); w->deleteLater(); }); w->setFuture(future); } /** * @brief LunarManager::getHuangLiDayMap * 获å�–一定时间范围内的农历数æ�® * @param startDate 开始时间 * @param stopDate 结æ�Ÿæ—¶é—´ * @return 农历信æ�¯ */ QMap LunarManager::getHuangLiDayMap(const QDate &startDate, const QDate &stopDate) { qCDebug(ClientLogger) << "Getting HuangLi day map from" << startDate.toString() << "to" << stopDate.toString(); QMap lunarInfoMap; auto iterator = m_lunarInfoMap.begin(); while(iterator != m_lunarInfoMap.end()) { if (iterator.key() >= startDate && iterator.key() <= stopDate) { iterator.value(); lunarInfoMap[iterator.key()] = iterator.value(); } iterator++; } qCDebug(ClientLogger) << "HuangLi day map contains" << lunarInfoMap.size() << "days"; return lunarInfoMap; } /** * @brief LunarManager::getFestivalInfoDateMap * 获å�–节å�‡æ—¥æ—¥æœŸä¿¡æ�¯ * @param startDate 开始时间 * @param stopDate 结æ�Ÿæ—¶é—´ * @return 节å�‡æ—¥æ—¥æœŸä¿¡æ�¯ */ QMap LunarManager::getFestivalInfoDateMap(const QDate &startDate, const QDate &stopDate) { qCDebug(ClientLogger) << "Getting festival info date map from" << startDate.toString() << "to" << stopDate.toString(); QMap festivalDateMap; auto iterator = m_festivalDateMap.begin(); while(iterator != m_festivalDateMap.end()) { if (iterator.key() >= startDate && iterator.key() <= stopDate) { iterator.value(); festivalDateMap[iterator.key()] = iterator.value(); } iterator++; } qCDebug(ClientLogger) << "Festival date map contains" << festivalDateMap.size() << "days"; return festivalDateMap; } /** * @brief LunarManager::ensureLunarDataLoaded * ç¡®ä¿�农历数æ�®å·²åŠ è½½ï¼ˆå¸¦ç¼“å­˜æœºåˆ¶ï¼Œé�¿å…�é‡�å¤�查询) * @param startDate 开始日期 * @param endDate 结æ�Ÿæ—¥æœŸ */ void LunarManager::ensureLunarDataLoaded(const QDate &startDate, const QDate &endDate) { // Input validation if (!startDate.isValid() || !endDate.isValid() || startDate > endDate) { qCWarning(ClientLogger) << "Invalid date range:" << startDate.toString() << "to" << endDate.toString(); return; } // Prevent re-entrant queries for the same range while DBus call is in flight auto key = qMakePair(startDate, endDate); if (m_pendingQueries.contains(key)) { return; } // Check if this range (or a superset) has already been queried for (const auto &range : m_queriedRanges) { if (startDate >= range.first && endDate <= range.second) { // Range is already covered by a previous query return; } } // Verify data completeness from the cache using QMap's ordered iteration int expectedDays = startDate.daysTo(endDate) + 1; auto startIt = m_lunarInfoMap.lowerBound(startDate); auto endIt = m_lunarInfoMap.upperBound(endDate); int cachedDays = std::distance(startIt, endIt); if (cachedDays < expectedDays) { qCDebug(ClientLogger) << "Querying lunar data for range" << startDate.toString() << "to" << endDate.toString() << "expected:" << expectedDays << "cached:" << cachedDays; m_pendingQueries.insert(key); queryLunarInfo(startDate, endDate); queryFestivalInfo(startDate, endDate); } // Cache this range (limit cache size to prevent memory growth) if (m_queriedRanges.size() >= MAX_CACHED_RANGES) { m_queriedRanges.removeFirst(); } m_queriedRanges.append({startDate, endDate}); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/lunarmanager.h000066400000000000000000000053761523260663500302530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARMANAGER_H #define LUNARMANAGER_H #include "dbushuanglirequest.h" #include "huangliData/dbusdatastruct.h" #include "huangliData/lunardatastruct.h" #include class LunarManager : public QObject { Q_OBJECT public: explicit LunarManager(QObject *parent = nullptr); static LunarManager* getInstace(); //按月获å�–节å�‡æ—¥ä¿¡æ�¯ bool getFestivalMonth(quint32 year, quint32 month, FestivalInfo& festivalInfo); //按月获å�–节å�‡æ—¥ä¿¡æ�¯ bool getFestivalMonth(const QDate &date, FestivalInfo& festivalInfo); //按天获å�–黄历信æ�¯ bool getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &info); //按天获å�–农历信æ�¯ bool getHuangLiDay(const QDate &date, CaHuangLiDayInfo &out); //按月获å�–黄历信æ�¯ bool getHuangLiMonth(quint32 year, quint32 month, CaHuangLiMonthInfo &info, bool fill = false); //按月获å�–黄历信æ�¯ bool getHuangLiMonth(const QDate &date, CaHuangLiMonthInfo &info, bool fill = false); //获å�–当天的农历月日期和日日期å�� QString getHuangLiShortName(const QDate &date); //查询农历信æ�¯ void queryLunarInfo(const QDate &startDate, const QDate &stopDate); //查询节å�‡æ—¥ä¿¡æ�¯ void queryFestivalInfo(const QDate &startDate, const QDate &stopDate); //获å�–节å�‡æ—¥æ—¥æœŸä¿¡æ�¯ QMap getFestivalInfoDateMap(const QDate &startDate, const QDate &stopDate); //获å�–当天农历数æ�® CaHuangLiDayInfo getHuangLiDay(const QDate &date); //获å�–一定时间范围内的农历数æ�® QMap getHuangLiDayMap(const QDate &startDate, const QDate &stopDate); //异步获å�–当天农历数æ�® void getHuangLiDayAsync(const QDate &date); //ç¡®ä¿�农历数æ�®å·²åŠ è½½ï¼ˆå¸¦ç¼“å­˜ï¼Œé�¿å…�é‡�å¤�查询) void ensureLunarDataLoaded(const QDate &startDate, const QDate &endDate); signals: //异步获å�–农历数æ�®å®Œæˆ�ä¿¡å�· void huangLiDayReady(const QDate &date, const CaHuangLiDayInfo &info); //农历信æ�¯æŸ¥è¯¢å®Œæˆ�ä¿¡å�· void lunarInfoReady(); //节å�‡æ—¥ä¿¡æ�¯æŸ¥è¯¢å®Œæˆ�ä¿¡å�· void festivalInfoReady(); public slots: private: DbusHuangLiRequest* m_dbusRequest = nullptr; //dbus请求实例 QMap m_lunarInfoMap; //缓存的农历数æ�® QMap m_festivalDateMap; //缓存的节å�‡æ—¥æ•°æ�® QList> m_queriedRanges; //已查询的日期范围缓存 QSet> m_pendingQueries; //正在查询中的范围,防止é‡�å…¥ }; #define gLunarManager LunarManager::getInstace() #endif // LUNARMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/schedulecoormanage.cpp000066400000000000000000000264071523260663500317600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulecoormanage.h" #include "commondef.h" #include CScheduleCoorManage::CScheduleCoorManage() { qCDebug(ClientLogger) << "Creating CScheduleCoorManage"; } CScheduleCoorManage::~CScheduleCoorManage() { qCDebug(ClientLogger) << "Destroying CScheduleCoorManage"; } void CScheduleCoorManage::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) { qCDebug(ClientLogger) << "Setting range with width:" << w << "height:" << h << "begin date:" << begindate.toString() << "end date:" << enddate.toString() << "right margin:" << rightmagin; m_width = w; m_height = h; m_rightmagin = rightmagin; m_begindate = begindate; m_enddate = enddate; m_totalDay = begindate.daysTo(enddate) + 1; qCDebug(ClientLogger) << "Total days:" << m_totalDay; } void CScheduleCoorManage::setDateRange(QDate begindate, QDate enddate) { qCDebug(ClientLogger) << "Setting date range from:" << begindate.toString() << "to:" << enddate.toString(); m_begindate = begindate; m_enddate = enddate; m_totalDay = begindate.daysTo(enddate) + 1; qCDebug(ClientLogger) << "Total days:" << m_totalDay; } QRectF CScheduleCoorManage::getDrawRegion(QDateTime begintime, QDateTime endtime) { qCDebug(ClientLogger) << "Getting draw region from:" << begintime.toString() << "to:" << endtime.toString(); QRectF rect; QString bb = begintime.toString("yyyyMMddhhmmsszzz"); QString ee = endtime.toString("yyyyMMddhhmmsszzz"); if (begintime > endtime) { qCDebug(ClientLogger) << "Begin time is after end time, returning empty rect"; return rect; } QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < m_begindate || enddate > m_enddate) { qCDebug(ClientLogger) << "Date out of range, returning empty rect"; return rect; } qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay); qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay); qreal posY = m_height * (ScheduleBT / 86400.0); rect = QRectF(posX, posY, rWidth, rHeight); qCDebug(ClientLogger) << "Draw region calculated:" << rect; return rect; } QRectF CScheduleCoorManage::getDrawRegion(QDateTime begintime, QDateTime endtime, int index, int coount) { qCDebug(ClientLogger) << "Getting draw region from:" << begintime.toString() << "to:" << endtime.toString() << "index:" << index << "count:" << coount; QRectF rect; QString bb = begintime.toString("yyyyMMddhhmmsszzz"); QString ee = endtime.toString("yyyyMMddhhmmsszzz"); if (begintime > endtime) { qCDebug(ClientLogger) << "Begin time is after end time, returning empty rect"; return rect; } QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < m_begindate || enddate > m_enddate) { qCDebug(ClientLogger) << "Date out of range, returning empty rect"; return rect; } qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay) / coount; qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * rWidth; qreal posY = m_height * (ScheduleBT / 86400.0); rect = QRectF(posX, posY, rWidth, rHeight); qCDebug(ClientLogger) << "Draw region calculated:" << rect; return rect; } QRectF CScheduleCoorManage::getDrawRegion(QDate date, QDateTime begintime, QDateTime endtime, int index, int coount, int maxNum, int type) { qCDebug(ClientLogger) << "Getting draw region for date:" << date.toString() << "from:" << begintime.toString() << "to:" << endtime.toString() << "index:" << index << "count:" << coount << "maxNum:" << maxNum << "type:" << type; QRectF rect; QString bb = begintime.toString("yyyyMMddhhmmsszzz"); QString ee = endtime.toString("yyyyMMddhhmmsszzz"); if (begintime > endtime) { qCDebug(ClientLogger) << "Begin time is after end time, returning empty rect"; return rect; } QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < date) { qCDebug(ClientLogger) << "Begin date is before target date, adjusting"; begindate = date; beginScheduleT = beginzero; } if (enddate > date) { qCDebug(ClientLogger) << "End date is after target date, adjusting"; enddate = date; endScheduleT = QTime(23, 59, 59); } qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay) / coount; qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * rWidth; qreal posY = m_height * (ScheduleBT / 86400.0); if (coount > maxNum && type == 0) { qCDebug(ClientLogger) << "Count exceeds maxNum, adjusting width"; qreal sscale = 27.0 / (m_width * (1.0 * day / m_totalDay)); if (index < maxNum + 1) { qCDebug(ClientLogger) << "Index within maxNum range"; rWidth = m_width * (1.0 * day / m_totalDay) * sscale + 0.5; posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * rWidth; } else { qCDebug(ClientLogger) << "Index outside maxNum range"; qreal trWidth = m_width * (1.0 * day / m_totalDay) * sscale + 0.5; rWidth = m_width * (1.0 * day / m_totalDay) - (index - 1) * trWidth; posX = m_width * (1.0 * (beginday - 1) / m_totalDay) + (index - 1) * trWidth; } } if (rHeight < 20) { qCDebug(ClientLogger) << "Height too small, adjusting to minimum"; if (posY + 20 > m_height) posY = m_height - 20; rHeight = 20; } if (posX < 1) { qCDebug(ClientLogger) << "X position too small, adjusting to minimum"; posX = 1; rWidth = rWidth - posX; } rect = QRectF(posX, posY, rWidth, rHeight); qCDebug(ClientLogger) << "Draw region calculated:" << rect; return rect; } QRectF CScheduleCoorManage::getDrawRegionF(QDateTime begintime, QDateTime endtime) { qCDebug(ClientLogger) << "Getting draw region F from:" << begintime.toString() << "to:" << endtime.toString(); QRectF rectf; if (begintime > endtime) { qCDebug(ClientLogger) << "Begin time is after end time, returning empty rect"; return rectf; } QDate begindate = begintime.date(); QDate enddate = endtime.date(); QTime beginzero(0, 0, 0); QTime beginScheduleT = begintime.time(); QTime endScheduleT = endtime.time(); if (begindate < m_begindate || enddate > m_enddate) { qCDebug(ClientLogger) << "Date out of range, returning empty rect"; return rectf; } qint64 beginday = m_begindate.daysTo(begindate) + 1; qint64 day = begindate.daysTo(enddate) + 1; int ScheduleBT = beginzero.secsTo(beginScheduleT); int ScheduleET = beginzero.secsTo(endScheduleT); qreal rWidth = m_width * (1.0 * day / m_totalDay); qreal rHeight = m_height * ((ScheduleET - ScheduleBT) / 86400.0); qreal posX = m_width * (1.0 * (beginday - 1) / m_totalDay); qreal posY = m_height * (ScheduleBT / 86400.0); rectf = QRectF(posX, posY, rWidth, rHeight); qCDebug(ClientLogger) << "Draw region F calculated:" << rectf; return rectf; } QRectF CScheduleCoorManage::getAllDayDrawRegion(QDate begin, QDate end) { qCDebug(ClientLogger) << "Getting all day draw region from:" << begin.toString() << "to:" << end.toString(); QRectF rect; if (begin > end) { qCDebug(ClientLogger) << "Begin date is after end date, returning empty rect"; return rect; } QDate begindate = begin; QDate enddate = end; if (begindate < m_begindate) { qCDebug(ClientLogger) << "Begin date is before range, adjusting"; begindate = m_begindate; } if (enddate > m_enddate) { qCDebug(ClientLogger) << "End date is after range, adjusting"; enddate = m_enddate; } qint64 beginday = m_begindate.daysTo(begindate); qint64 day = begindate.daysTo(enddate) + 1; qreal rWidth = m_width * (1.0 * day / m_totalDay) - 12; qreal rHeight = m_height; qreal posX = m_width * (1.0 * beginday / m_totalDay); qreal posY = 0; rect = QRectF(posX + 6, posY, rWidth - m_rightmagin, rHeight); qCDebug(ClientLogger) << "All day draw region calculated:" << rect; return rect; } QDateTime CScheduleCoorManage::getDate(QPointF pos) { qCDebug(ClientLogger) << "Getting date from position:" << pos; QDateTime begintime; qint64 day = static_cast((1.0 * pos.x() / m_width) * m_totalDay); if (day < 0) { qCDebug(ClientLogger) << "Day out of range (negative), adjusting to 0"; day = 0; } else if (day >= m_totalDay) { qCDebug(ClientLogger) << "Day out of range (too large), adjusting to max"; day = m_totalDay - 1; } int time = static_cast((1.0 * pos.y() / m_height) * 86400.0); int hours = time / 3600; int minutes = (time - 3600 * hours) / 60; int secss = time - 3600 * hours - 60 * minutes; QDate date = m_begindate.addDays(day); begintime.setDate(date); begintime.setTime(QTime(hours, minutes, secss)); qCDebug(ClientLogger) << "Calculated date time:" << begintime.toString(); return begintime; } QDate CScheduleCoorManage::getsDate(QPointF pos) { qCDebug(ClientLogger) << "Getting date from position:" << pos; qint64 day = static_cast((1.0 * pos.x() / m_width) * m_totalDay); if (day < 0) { qCDebug(ClientLogger) << "Day out of range (negative), adjusting to 0"; day = 0; } else if (day >= m_totalDay) { qCDebug(ClientLogger) << "Day out of range (too large), adjusting to max"; day = m_totalDay - 1; } QDate date = m_begindate.addDays(day); qCDebug(ClientLogger) << "Calculated date:" << date.toString(); return date; } float CScheduleCoorManage::getHeight(const QTime &time) const { qCDebug(ClientLogger) << "Getting height for time:" << time.toString(); QTime beginzero(0, 0, 0); int ScheduleBT = beginzero.secsTo(time); float posY = static_cast(m_height * (ScheduleBT / 86400.0)); qCDebug(ClientLogger) << "Calculated height:" << posY; return posY; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/schedulecoormanage.h000066400000000000000000000024461523260663500314220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULECOORMANAGE_H #define SCHEDULECOORMANAGE_H #include #include #include class CScheduleCoorManage { public: CScheduleCoorManage(); ~CScheduleCoorManage(); void setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin); void setDateRange(QDate begindate, QDate enddate); int getRightMagin() const { return m_rightmagin; } QRectF getDrawRegion(QDateTime begintime, QDateTime endtime); QRectF getDrawRegion(QDateTime begintime, QDateTime endtime, int index, int coount); QRectF getDrawRegion(QDate date, QDateTime begintime, QDateTime endtime, int index, int coount, int maxNum, int type = 0); QRectF getDrawRegionF(QDateTime begintime, QDateTime endtime); QRectF getAllDayDrawRegion(QDate begin, QDate end); QDateTime getDate(QPointF pos); QDate getsDate(QPointF pos); float getHeight(const QTime &time) const; QDate getBegindate() const { return m_begindate; } private: int m_width {0}; int m_height {0}; QDate m_begindate; QDate m_enddate; qint64 m_totalDay {0}; int m_rightmagin = 0; }; #endif // SCHEDULECOORMANAGE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/scheduledatamanage.cpp000066400000000000000000000054101523260663500317160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduledatamanage.h" #include "accountmanager.h" #include "cscheduleoperation.h" #include "accountmanager.h" #include "commondef.h" #include #include CScheduleDataManage *CScheduleDataManage::m_vscheduleDataManage = nullptr; // CSchedulesColor CScheduleDataManage::getScheduleColorByType(const QString &typeId) { qCDebug(ClientLogger) << "Getting schedule color for type ID:" << typeId; CSchedulesColor color; DScheduleType::Ptr type = gAccountManager->getScheduleTypeByScheduleTypeId(typeId); QColor typeColor; if (nullptr != type) { typeColor = type->typeColor().colorCode(); qCDebug(ClientLogger) << "Found type color:" << typeColor.name(); } else if (typeId =="other"){ //如果类型ä¸�存在则设置一个默认颜色 typeColor = QColor("#BA60FA"); qCDebug(ClientLogger) << "Using default color for 'other' type:" << typeColor.name(); } color.orginalColor = typeColor; color.normalColor = color.orginalColor; color.normalColor.setAlphaF(0.2); color.pressColor = color.orginalColor; color.pressColor.setAlphaF(0.35); color.hoverColor = color.orginalColor; color.hoverColor.setAlphaF(0.3); color.hightColor = color.orginalColor; color.hightColor.setAlphaF(0.35); qCDebug(ClientLogger) << "Returning schedule colors with original color:" << color.orginalColor.name(); return color; } QColor CScheduleDataManage::getSystemActiveColor() { QColor color = DGuiApplicationHelper::instance()->applicationPalette().highlight().color(); // qCDebug(ClientLogger) << "Getting system active color:" << color.name(); return color; } QColor CScheduleDataManage::getTextColor() { QColor color = DGuiApplicationHelper::instance()->applicationPalette().text().color(); // qCDebug(ClientLogger) << "Getting text color:" << color.name(); return color; } void CScheduleDataManage::setTheMe(int type) { // qCDebug(ClientLogger) << "Setting theme to:" << type; m_theme = type; } CScheduleDataManage *CScheduleDataManage::getScheduleDataManage() { // qCDebug(ClientLogger) << "Getting schedule data manage instance"; if (nullptr == m_vscheduleDataManage) { qCDebug(ClientLogger) << "Creating new schedule data manage instance"; m_vscheduleDataManage = new CScheduleDataManage(); } return m_vscheduleDataManage; } CScheduleDataManage::CScheduleDataManage(QObject *parent) : QObject(parent) { qCDebug(ClientLogger) << "CScheduleDataManage constructor"; } CScheduleDataManage::~CScheduleDataManage() { qCDebug(ClientLogger) << "CScheduleDataManage destructor"; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/scheduledatamanage.h000066400000000000000000000022601523260663500313630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDATAMANAGE_H #define SCHEDULEDATAMANAGE_H #include "dschedule.h" #include "dscheduletype.h" #include #include #include #include DGUI_USE_NAMESPACE struct CSchedulesColor { QColor normalColor; //正常状æ€�颜色 QColor hoverColor; //鼠标悬浮颜色 QColor pressColor; //鼠标点击颜色 QColor hightColor; //高亮色 QColor orginalColor; //最åˆ�的颜色 }; class CScheduleDataManage : public QObject { Q_OBJECT public: static CScheduleDataManage *getScheduleDataManage(); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–颜色信æ�¯ CSchedulesColor getScheduleColorByType(const QString &type); static QColor getSystemActiveColor(); static QColor getTextColor(); void setTheMe(int type = 0); int getTheme() const { return m_theme; } private: explicit CScheduleDataManage(QObject *parent = nullptr); ~CScheduleDataManage(); private: int m_theme = 0; static CScheduleDataManage *m_vscheduleDataManage; }; #endif // SCHEDULEVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/scheduledaterangeinfo.h000066400000000000000000000020671523260663500321140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDATERANGEINFO_H #define SCHEDULEDATERANGEINFO_H #include "dschedule.h" typedef struct _tagMScheduleDateRangeInfo { QDate bdate; QDate edate; bool state; int num; DSchedule::Ptr tData; bool operator <(const _tagMScheduleDateRangeInfo &info)const { if (bdate == info.bdate) { if (bdate.daysTo(edate) == info.bdate.daysTo(info.edate)) { return tData < info.tData; } else { return bdate.daysTo(edate) > info.bdate.daysTo(info.edate); } } else { return bdate < info.bdate; } } bool operator ==(const _tagMScheduleDateRangeInfo &info)const { return bdate == info.bdate && edate == info.edate && tData == info.tData && state == info.state && num == info.num; } } MScheduleDateRangeInfo; #endif // SCHEDULEDATERANGEINFO_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/schedulemanager.cpp000066400000000000000000000227411523260663500312540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulemanager.h" #include "commondef.h" ScheduleManager::ScheduleManager(QObject *parent) : QObject(parent) { qCDebug(ClientLogger) << "ScheduleManager constructor"; initconnect(); } ScheduleManager *ScheduleManager::getInstace() { qCDebug(ClientLogger) << "Getting ScheduleManager instance"; static ScheduleManager manager; return &manager; } void ScheduleManager::initconnect() { qCDebug(ClientLogger) << "Initializing ScheduleManager connections"; connect(gAccountManager, &AccountManager::signalScheduleUpdate, this, &ScheduleManager::slotScheduleUpdate); connect(gAccountManager, &AccountManager::signalSearchScheduleUpdate, this, &ScheduleManager::slotSearchUpdate); } /** * @brief ScheduleManager::resetSchedule * é‡�新读å�–日程数æ�® * @param year å¹´ */ void ScheduleManager::resetSchedule(int year) { qCDebug(ClientLogger) << "Resetting schedule for year:" << year; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { p->querySchedulesWithParameter(year); } } void ScheduleManager::resetSchedule(const QDateTime &start, const QDateTime &end) { qCDebug(ClientLogger) << "Resetting schedule from" << start << "to" << end; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { p->querySchedulesWithParameter(start, end); } } /** * @brief ScheduleManager::updateSchedule * 更新日程数æ�® */ void ScheduleManager::updateSchedule() { qCDebug(ClientLogger) << "Updating schedule data"; m_scheduleMap.clear(); if (nullptr != gAccountManager->getLocalAccountItem()) { qCDebug(ClientLogger) << "Getting schedule map from local account"; m_scheduleMap = gAccountManager->getLocalAccountItem()->getScheduleMap(); } if (nullptr != gAccountManager->getUnionAccountItem()) { qCDebug(ClientLogger) << "Getting schedule map from union account"; QMap scheduleMap = gAccountManager->getUnionAccountItem()->getScheduleMap(); if (m_scheduleMap.size() == 0) { m_scheduleMap = scheduleMap; } else { auto iterator = scheduleMap.begin(); while (iterator != scheduleMap.end()) { DSchedule::List list = m_scheduleMap[iterator.key()]; list.append(iterator.value()); m_scheduleMap[iterator.key()] = list; iterator++; } } } qCDebug(ClientLogger) << "Schedule update complete with" << m_scheduleMap.size() << "dates"; emit signalScheduleUpdate(); } /** * @brief ScheduleManager::updateSearchSchedule * 更新被æ�œç´¢çš„æ—¥ç¨‹æ•°æ�® */ void ScheduleManager::updateSearchSchedule() { qCDebug(ClientLogger) << "Updating search schedule data"; m_searchScheduleMap.clear(); if (nullptr != gLocalAccountItem) { qCDebug(ClientLogger) << "Getting search schedule map from local account"; m_searchScheduleMap = gLocalAccountItem->getSearchScheduleMap(); } if (nullptr != gUosAccountItem) { qCDebug(ClientLogger) << "Getting search schedule map from UOS account"; QMap scheduleMap = gUosAccountItem->getSearchScheduleMap(); if (m_searchScheduleMap.size() == 0) { m_searchScheduleMap = scheduleMap; } else { auto iterator = scheduleMap.begin(); while (iterator != scheduleMap.end()) { DSchedule::List list = m_searchScheduleMap[iterator.key()]; list.append(iterator.value()); m_searchScheduleMap[iterator.key()] = list; iterator++; } } } qCDebug(ClientLogger) << "Search schedule update complete with" << m_searchScheduleMap.size() << "dates"; emit signalSearchScheduleUpdate(); } /** * @brief ScheduleManager::slotScheduleUpdate * 日程数æ�®æ›´æ–°äº‹ä»¶ */ void ScheduleManager::slotScheduleUpdate() { qCDebug(ClientLogger) << "Schedule update slot triggered"; updateSchedule(); } void ScheduleManager::slotSearchUpdate() { qCDebug(ClientLogger) << "Search update slot triggered"; updateSearchSchedule(); } /** * @brief ScheduleManager::getAllScheduleMap * 获å�–所有的日程数æ�® * @return */ QMap ScheduleManager::getAllScheduleMap() { qCDebug(ClientLogger) << "Getting all schedule map with" << m_scheduleMap.size() << "dates"; return m_scheduleMap; } /** * @brief ScheduleManager::getScheduleMap * 获å�–一定时间范围内的日程 * @param startDate 开始时间 * @param stopDate 结æ�Ÿæ—¶é—´ * @return */ QMap ScheduleManager::getScheduleMap(const QDate &startDate, const QDate &stopDate) const { qCDebug(ClientLogger) << "Getting schedule map from" << startDate << "to" << stopDate; QMap map; QDate date = startDate; while (date != stopDate) { if (m_scheduleMap.contains(date)) { map[date] = m_scheduleMap[date]; } date = date.addDays(1); } if (m_scheduleMap.contains(date)) { map[date] = m_scheduleMap[date]; } qCDebug(ClientLogger) << "Found schedules for" << map.size() << "dates in the requested range"; return map; } /** * @brief ScheduleManager::getAllSearchedScheduleMap * 获å�–所有的被æ�œç´¢çš„æ—¥ç¨‹æ•°æ�® * @return */ QMap ScheduleManager::getAllSearchedScheduleMap() { qCDebug(ClientLogger) << "Getting all searched schedule map with" << m_searchScheduleMap.size() << "dates"; return m_searchScheduleMap; } /** * @brief ScheduleManager::getAllSearchedScheduleList * 获å�–所有的被æ�œç´¢çš„æ—¥ç¨‹æ•°æ�® * @return */ DSchedule::List ScheduleManager::getAllSearchedScheduleList() { qCDebug(ClientLogger) << "Getting all searched schedule list"; DSchedule::List list; for (DSchedule::List l : m_searchScheduleMap.values()) { list.append(l); } qCDebug(ClientLogger) << "Found" << list.size() << "searched schedules"; return list; } /** * @brief ScheduleManager::getAllScheduleDate * 获å�–所有的有日程的时间 * @return */ QSet ScheduleManager::getAllScheduleDate() { qCDebug(ClientLogger) << "Getting all schedule dates"; QSet set; for (QDate date : m_scheduleMap.keys()) { set.insert(date); } qCDebug(ClientLogger) << "Found" << set.size() << "dates with schedules"; return set; } /** * @brief ScheduleManager::getAllSearchedScheduleDate * 获å�–所有有被æ�œç´¢æ—¥ç¨‹çš„æ—¶é—´ * @return */ QSet ScheduleManager::getAllSearchedScheduleDate() { qCDebug(ClientLogger) << "Getting all searched schedule dates"; QSet set; for (QDate date : m_searchScheduleMap.keys()) { set.insert(date); } qCDebug(ClientLogger) << "Found" << set.size() << "dates with searched schedules"; return set; } /** * @brief ScheduleManager::getScheduleByDay * 获å�–æŸ�天的日程 * @param date 需è¦�获å�–日程的日期 * @return */ DSchedule::List ScheduleManager::getScheduleByDay(QDate date) { qCDebug(ClientLogger) << "Getting schedules for date:" << date; if (m_scheduleMap.contains(date)) { qCDebug(ClientLogger) << "Found" << m_scheduleMap[date].size() << "schedules for" << date; return m_scheduleMap[date]; } qCDebug(ClientLogger) << "No schedules found for" << date; return DSchedule::List(); } /** * @brief ScheduleManager::getScheduleTypeByScheduleId * æ ¹æ�®æ—¥ç¨‹ç±»åž‹id获å�–日程类型 * @param id * @return */ DScheduleType::Ptr ScheduleManager::getScheduleTypeByScheduleId(const QString &id) { qCDebug(ClientLogger) << "Getting schedule type by schedule ID:" << id; DScheduleType::Ptr type = nullptr; for (AccountItem::Ptr p : gAccountManager->getAccountList()) { type = p->getScheduleTypeByID(id); if (nullptr != type) { qCDebug(ClientLogger) << "Found schedule type for ID:" << id; break; } } if (type == nullptr) { qCDebug(ClientLogger) << "No schedule type found for ID:" << id; } return type; } /** * @brief ScheduleManager::searchSchedule * æ�œç´¢æ—¥ç¨‹ * @param key æ�œç´¢å…³é”®å­— * @param startTime 开始时间 * @param endTime 结æ�Ÿæ—¶é—´ */ void ScheduleManager::searchSchedule(const QString &key, const QDateTime &startTime, const QDateTime &endTime) { qCDebug(ClientLogger) << "Searching schedules with key:" << key << "from" << startTime << "to" << endTime; m_searchScheduleMap.clear(); static int count = 0; count = 0; m_searchQuery.reset(new DScheduleQueryPar); m_searchQuery->setKey(key); m_searchQuery->setDtStart(startTime); m_searchQuery->setDtEnd(endTime); for (AccountItem::Ptr p : gAccountManager->getAccountList()) { count++; // qCDebug(ClientLogger) << "Querying account for schedules"; p->querySchedulesWithParameter(m_searchQuery, [&](CallMessge) { count--; if (count == 0) { // qCDebug(ClientLogger) << "All account queries completed, updating search schedule"; updateSearchSchedule(); } }); } } /** * @brief ScheduleManager::clearSearchSchedule * 情况已æ�œç´¢çš„如此数æ�® */ void ScheduleManager::clearSearchSchedule() { qCDebug(ClientLogger) << "Clearing search schedule"; m_searchScheduleMap.clear(); m_searchQuery.reset(nullptr); emit signalSearchScheduleUpdate(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dataManage/schedulemanager.h000066400000000000000000000045071523260663500307210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEMANAGER_H #define SCHEDULEMANAGER_H #include "accountmanager.h" #include "lunarmanager.h" #include class ScheduleManager : public QObject { Q_OBJECT public: explicit ScheduleManager(QObject *parent = nullptr); static ScheduleManager* getInstace(); //获å�–一年的所有日程 QMap getAllScheduleMap(); //æ ¹æ�®èµ·å§‹æ—¶é—´å’Œç»“æ�Ÿæ—¶é—´èŽ·å�–日程 QMap getScheduleMap(const QDate &startDate, const QDate &stopDate) const; //获å�–所有的æ�œç´¢åˆ°çš„æ—¥ç¨‹ï¼ˆæŒ‰æ—¥æœŸåˆ†ç±»ï¼‰ QMap getAllSearchedScheduleMap(); //获å�–所有æ�œç´¢åˆ°çš„æ—¥ç¨‹ DSchedule::List getAllSearchedScheduleList(); //获å�–所有有日程的时间 QSet getAllScheduleDate(); //获å�–所有有被æ�œç´¢æ—¥ç¨‹çš„æ—¶é—´ QSet getAllSearchedScheduleDate(); //获å�–æŸ�一天的日程 DSchedule::List getScheduleByDay(QDate); //æ ¹æ�®æ—¥ç¨‹id获å�–日程类型 DScheduleType::Ptr getAccountByScheduleId(const QString& id); DScheduleType::Ptr getScheduleTypeByScheduleId(const QString& id); //æ�œç´¢æ—¥ç¨‹ void searchSchedule(const QString &key, const QDateTime &startTime, const QDateTime &endTime); //清空æ�œç´¢çš„æ—¥ç¨‹ void clearSearchSchedule(); //é‡�置一年的日程信æ�¯ void resetSchedule(int year); void resetSchedule(const QDateTime& start, const QDateTime& end); signals: //日程数æ�®æ›´æ–°ä¿¡å�· void signalScheduleUpdate(); //被æ�œç´¢æ—¥ç¨‹æ•°æ�®æ›´æ–°ä¿¡å�· void signalSearchScheduleUpdate(); public slots: //日程数æ�®æ›´æ–°äº‹ä»¶ void slotScheduleUpdate(); void slotSearchUpdate(); private: void initconnect(); //更新日程 void updateSchedule(); //更新被æ�œç´¢çš„æ—¥ç¨‹ void updateSearchSchedule(); private: QMap m_scheduleMap; //一年的日程数æ�® QMap m_searchScheduleMap; //被æ�œç´¢çš„æ—¥ç¨‹æ•°æ�® DScheduleQueryPar::Ptr m_searchQuery; //上一次æ�œç´¢çš„æ�¡ä»¶ LunarManager m_lunarManager; }; #define gScheduleManager ScheduleManager::getInstace() #endif // SCHEDULEMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/000077500000000000000000000000001523260663500243265ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/cdbuspendingcallwatcher.cpp000066400000000000000000000020451523260663500317120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdbuspendingcallwatcher.h" CDBusPendingCallWatcher::CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent) : QDBusPendingCallWatcher(call, parent) , m_member(member) { connect(this, &QDBusPendingCallWatcher::finished, this, [this](){ //转å�‘调用完æˆ�事件 emit this->signalCallFinished(this); }); } /** * @brief CDBusPendingCallWatcher::setCallbackFunc * 设置回调函数 * @param func 回调函数 */ void CDBusPendingCallWatcher::setCallbackFunc(CallbackFunc func) { m_func = func; } /** * @brief CDBusPendingCallWatcher::getCallbackFunc * 获å�–回调函数 * @return 回调函数 */ CallbackFunc CDBusPendingCallWatcher::getCallbackFunc() { return m_func; } /** * @brief CDBusPendingCallWatcher::getmember * 设置调用方法å�� * @return 方法å�� */ QString CDBusPendingCallWatcher::getmember() { return m_member; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/cdbuspendingcallwatcher.h000066400000000000000000000024131523260663500313560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDBUSPENDINGCALLWATCHER_H #define CDBUSPENDINGCALLWATCHER_H #include /** * @brief The CallMessge struct * dbus请求回调数æ�® */ struct CallMessge{ int code; //返回ç �,0:请求æˆ�功,大于0:请求失败 QVariant msg; //返回值,根æ�®å®žé™…需求å�¯è¿”回任æ„�æ•°æ�® }; /** * @brief CallbackFunc * dbus请求回调函数类型 */ typedef std::function CallbackFunc; //继承QDbus回调观察者,将部分自定义的数æ�®åŒ…装在回调类中 class CDBusPendingCallWatcher : public QDBusPendingCallWatcher { Q_OBJECT public: explicit CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); //获å�–回调函数 CallbackFunc getCallbackFunc(); //设置调用方法å�� QString getmember(); signals: void signalCallFinished(CDBusPendingCallWatcher*); public slots: private: QString m_member; //调用的dbus方法å�� CallbackFunc m_func = nullptr; //回调函数指针 }; #endif // CDBUSPENDINGCALLWATCHER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbusaccountmanagerrequest.cpp000066400000000000000000000260431523260663500323150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountmanagerrequest.h" #include "commondef.h" #include "dcalendargeneralsettings.h" #include #include #include DbusAccountManagerRequest::DbusAccountManagerRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/AccountManager", "com.deepin.dataserver.Calendar.AccountManager", QDBusConnection::sessionBus(), parent) { } /** * @brief setFirstDayofWeek * 设置一周首日 */ void DbusAccountManagerRequest::setFirstDayofWeek(int value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("firstDayOfWeek", QVariant(value)); } /** * @brief DbusAccountManagerRequest::setTimeFormatType * 设置时间显示格å¼� */ void DbusAccountManagerRequest::setTimeFormatType(int value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("timeFormatType", QVariant(value)); } /** * @brief setFirstDayofWeekSource * 设置一周首日æ�¥æº� */ void DbusAccountManagerRequest::setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("firstDayOfWeekSource", QVariant(value)); } /** * @brief setTimeFormatTypeSource * 设置时间显示格å¼�æ�¥æº� */ void DbusAccountManagerRequest::setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource value) { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("timeFormatTypeSource", QVariant(value)); } /** * @brief getFirstDayofWeekSource * 获å�–一周首日æ�¥æº� */ DCalendarGeneralSettings::GeneralSettingSource DbusAccountManagerRequest::getFirstDayofWeekSource() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); bool ok; auto val = interface.property("firstDayOfWeekSource").toInt(&ok); if (ok) { qCDebug(ClientLogger) << "First day of week source:" << val; return static_cast(val); } else { qCWarning(ClientLogger) << "Failed to get first day of week source, using default Source_Database"; return DCalendarGeneralSettings::Source_Database; } } /** * @brief getTimeFormatTypeSource * 获å�–时间显示格å¼�æ�¥æº� */ DCalendarGeneralSettings::GeneralSettingSource DbusAccountManagerRequest::getTimeFormatTypeSource() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); bool ok; auto val = interface.property("timeFormatTypeSource").toInt(&ok); if (ok) { qCDebug(ClientLogger) << "Time format type source:" << val; return static_cast(val); } else { qCWarning(ClientLogger) << "Failed to get time format type source, using default Source_Database"; return DCalendarGeneralSettings::Source_Database; } } /** * @brief DbusAccountManagerRequest::getAccountList * 请求å¸�户列表 */ void DbusAccountManagerRequest::getAccountList() { asyncCall("getAccountList"); } /** * @brief DbusAccountManagerRequest::downloadByAccountID * æ ¹æ�®å¸�户id下拉数æ�® * @param accountID å¸�户id */ void DbusAccountManagerRequest::downloadByAccountID(const QString &accountID) { asyncCall("downloadByAccountID", {QVariant(accountID)}); } /** * @brief DbusAccountManagerRequest::uploadNetWorkAccountData * 更新网络å¸�户数æ�® */ void DbusAccountManagerRequest::uploadNetWorkAccountData() { asyncCall("uploadNetWorkAccountData"); } /** * @brief DbusAccountManagerRequest::getCalendarGeneralSettings * 获å�–通用设置 */ void DbusAccountManagerRequest::getCalendarGeneralSettings() { asyncCall("getCalendarGeneralSettings"); } /** * @brief DbusAccountManagerRequest::login * å¸�户登录 */ void DbusAccountManagerRequest::login() { asyncCall("login"); } /** * @brief DbusAccountManagerRequest::loginout * å¸�户登出 */ void DbusAccountManagerRequest::logout() { asyncCall("logout"); } void DbusAccountManagerRequest::clientIsShow(bool isShow) { QList argumentList; argumentList << isShow; //ä¸�需è¦�返回结果,å�‘é€�完直接结æ�Ÿ callWithArgumentList(QDBus::NoBlock, QStringLiteral("calendarIsShow"), argumentList); } bool DbusAccountManagerRequest::getIsSupportUid() { qCDebug(ClientLogger) << "Checking UID support"; QList argumentList; QDBusMessage msg = callWithArgumentList(QDBus::Block, QStringLiteral("isSupportUid"), argumentList); if (msg.type() == QDBusMessage::ReplyMessage) { QVariant variant = msg.arguments().first(); return variant.toBool(); } else { qCWarning(ClientLogger) << "Failed to get UID support status, defaulting to false"; return false; } } void DbusAccountManagerRequest::getIsSupportUidAsync() { asyncCall("isSupportUid"); } /** * @brief DbusAccountManagerRequest::slotCallFinished * dbus调用完æˆ�事件 * @param call 回调类 */ void DbusAccountManagerRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; //错误处ç�† if (call->isError()) { qCWarning(ClientLogger) << "DBus call error - Method:" << call->reply().member() << "Error:" << call->error().message(); // Retry critical calls synchronously on failure if (call->getmember() == "getAccountList") { qCInfo(ClientLogger) << "Retrying getAccountList synchronously"; QDBusReply reply = callWithArgumentList(QDBus::Block, "getAccountList", QList()); if (reply.isValid()) { DAccount::List accountList; if (DAccount::fromJsonListString(accountList, reply.value())) { emit signalGetAccountListFinish(accountList); canCall = false; } } if (canCall) ret = 1; } else if (call->getmember() == "getCalendarGeneralSettings") { qCInfo(ClientLogger) << "Retrying getCalendarGeneralSettings synchronously"; QDBusReply reply = callWithArgumentList(QDBus::Block, "getCalendarGeneralSettings", QList()); if (reply.isValid()) { DCalendarGeneralSettings::Ptr ptr; ptr.reset(new DCalendarGeneralSettings()); if (DCalendarGeneralSettings::fromJsonString(ptr, reply.value())) { emit signalGetGeneralSettingsFinish(ptr); canCall = false; } } if (canCall) ret = 1; } else if (call->getmember() == "isSupportUid") { qCInfo(ClientLogger) << "Retrying isSupportUid synchronously"; QDBusReply reply = callWithArgumentList(QDBus::Block, "isSupportUid", QList()); if (reply.isValid()) { emit signalGetIsSupportUidFinish(reply.value()); canCall = false; } if (canCall) ret = 1; } else { ret = 1; } } else if (call->getmember() == "getAccountList") { qCDebug(ClientLogger) << "Processing getAccountList response"; QDBusPendingReply reply = *call; //获å�–返回值 QString str = reply.argumentAt<0>(); DAccount::List accountList; //è§£æž�字符串 if (DAccount::fromJsonListString(accountList, str)) { qCDebug(ClientLogger) << "Successfully parsed" << accountList.size() << "accounts"; emit signalGetAccountListFinish(accountList); } else { qCWarning(ClientLogger) << "Failed to parse account list JSON"; ret = 2; } } else if (call->getmember() == "getCalendarGeneralSettings") { qCDebug(ClientLogger) << "Processing getCalendarGeneralSettings response"; QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DCalendarGeneralSettings::Ptr ptr; ptr.reset(new DCalendarGeneralSettings()); if (DCalendarGeneralSettings::fromJsonString(ptr, str)) { qCDebug(ClientLogger) << "Successfully parsed calendar general settings"; emit signalGetGeneralSettingsFinish(ptr); } else { qCWarning(ClientLogger) << "Failed to parse calendar general settings JSON"; ret = 2; } } else if (call->getmember() == "isSupportUid") { QDBusPendingReply reply = *call; const bool supported = reply.argumentAt<0>(); emit signalGetIsSupportUidFinish(supported); } else if (call->getmember() == "setCalendarGeneralSettings") { qCDebug(ClientLogger) << "Processing setCalendarGeneralSettings response"; canCall = false; setCallbackFunc(call->getCallbackFunc()); getCalendarGeneralSettings(); } //执行回调函数 if (canCall && call->getCallbackFunc() != nullptr) { qCDebug(ClientLogger) << "Executing callback for method:" << call->getmember() << "with ret:" << ret; call->getCallbackFunc()({ret, ""}); } //释放内存 call->deleteLater(); } void DbusAccountManagerRequest::slotDbusCall(const QDBusMessage &msg) { qCDebug(ClientLogger) << "Received DBus signal:" << msg.member(); if (msg.member() == "accountUpdate") { qCDebug(ClientLogger) << "Account update signal received, refreshing account list"; getAccountList(); } else if (msg.member() == "PropertiesChanged") { qCDebug(ClientLogger) << "Properties changed signal received"; QDBusPendingReply reply = msg; onPropertiesChanged(reply.argumentAt<0>(), reply.argumentAt<1>(), reply.argumentAt<2>()); } } void DbusAccountManagerRequest::onPropertiesChanged(const QString &, const QVariantMap &changedProperties, const QStringList &) { qCDebug(ClientLogger) << "Processing properties changed with" << changedProperties.size() << "changes"; for (QVariantMap::const_iterator it = changedProperties.cbegin(), end = changedProperties.cend(); it != end; ++it) { if (it.key() == "firstDayOfWeek") { qCDebug(ClientLogger) << "First day of week property changed, refreshing general settings"; getCalendarGeneralSettings(); } else if (it.key() == "timeFormatType") { qCDebug(ClientLogger) << "Time format type property changed, refreshing general settings"; getCalendarGeneralSettings(); } } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbusaccountmanagerrequest.h000066400000000000000000000044561523260663500317660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTMANAGERREQUEST_H #define DBUSACCOUNTMANAGERREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dcalendargeneralsettings.h" //所有å¸�户信æ�¯ç®¡ç�†ç±» class DbusAccountManagerRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountManagerRequest(QObject *parent = nullptr); //设置一周首日 void setFirstDayofWeek(int); //设置时间显示格å¼� void setTimeFormatType(int); // 设置一周首日æ�¥æº� void setFirstDayofWeekSource(DCalendarGeneralSettings::GeneralSettingSource); // 设置时间显示格å¼�æ�¥æº� void setTimeFormatTypeSource(DCalendarGeneralSettings::GeneralSettingSource); // 获å�–一周首日æ�¥æº� DCalendarGeneralSettings::GeneralSettingSource getFirstDayofWeekSource(); // 获å�–时间显示格å¼�æ�¥æº� DCalendarGeneralSettings::GeneralSettingSource getTimeFormatTypeSource(); //获å�–å¸�户列表 void getAccountList(); //æ ¹æ�®å¸�户id下拉数æ�® void downloadByAccountID(const QString &accountID); //更新网络å¸�户数æ�® void uploadNetWorkAccountData(); //获å�–通用设置 void getCalendarGeneralSettings(); // void clientIsShow(bool isShow); //获å�–是å�¦æ”¯æŒ�云å�Œæ­¥ bool getIsSupportUid(); //异步获å�–是å�¦æ”¯æŒ�云å�Œæ­¥ void getIsSupportUidAsync(); //å¸�户登录 void login(); //å¸�户登出 void logout(); signals: //获å�–å¸�户列表数æ�®å®Œæˆ�ä¿¡å�· void signalGetAccountListFinish(DAccount::List accountList); //获å�–通用设置完æˆ�ä¿¡å�· void signalGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); //获å�–是å�¦æ”¯æŒ�UID完æˆ�ä¿¡å�· void signalGetIsSupportUidFinish(bool supported); public slots: //dbus调用完æˆ�事件 void slotCallFinished(CDBusPendingCallWatcher *) override; //å�Žç«¯å�‘é€�ä¿¡å�·äº‹ä»¶ void slotDbusCall(const QDBusMessage &msg) override; private: void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); }; #endif // DBUSACCOUNTMANAGERREQUEST_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbusaccountrequest.cpp000066400000000000000000000421021523260663500307540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountrequest.h" #include "commondef.h" #include #include #include #include DbusAccountRequest::DbusAccountRequest(const QString &path, const QString &interface, QObject *parent) : DbusRequestBase(path, interface, QDBusConnection::sessionBus(), parent) { } /** * @brief getAccountInfo 获å�–å¸�户信æ�¯ * @return */ void DbusAccountRequest::getAccountInfo() { asyncCall("getAccountInfo"); } /** * @brief DbusAccountRequest::setAccountExpandStatus * 设置å¸�户列表展开状æ€� * @param expandStatus 展开状æ€� */ void DbusAccountRequest::setAccountExpandStatus(bool expandStatus) { qCDebug(ClientLogger) << "Setting account expand status to:" << expandStatus << "for path:" << this->path(); QDBusMessage msg = QDBusMessage::createMethodCall( this->service(), this->path(), "org.freedesktop.DBus.Properties", "Set" ); msg << this->interface() << "isExpand" << QVariant::fromValue(QDBusVariant(expandStatus)); QDBusConnection::sessionBus().asyncCall(msg); } void DbusAccountRequest::setAccountState(DAccount::AccountStates state) { qCDebug(ClientLogger) << "Setting account state to:" << state << "for path:" << this->path(); QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("accountState", QVariant(state)); } void DbusAccountRequest::setSyncFreq(const QString &freq) { qCDebug(ClientLogger) << "Setting sync frequency to:" << freq << "for path:" << this->path(); QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); interface.setProperty("syncFreq", QVariant(freq)); } DAccount::AccountStates DbusAccountRequest::getAccountState() { qCDebug(ClientLogger) << "Getting account state for path:" << this->path(); QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return static_cast(interface.property("accountState").toInt()); } DAccount::AccountSyncState DbusAccountRequest::getSyncState() { qCDebug(ClientLogger) << "Getting sync state for path:" << this->path(); QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return static_cast(interface.property("syncState").toInt()); } QString DbusAccountRequest::getSyncFreq() { QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return interface.property("syncFreq").toString(); } /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ void DbusAccountRequest::getScheduleTypeList() { asyncCall("getScheduleTypeList"); } /** * @brief getScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–日程类型信æ�¯ * @param typeID 日程类型ID * @return */ void DbusAccountRequest::getScheduleTypeByID(const QString &typeID) { qCDebug(ClientLogger) << "Requesting schedule type by ID:" << typeID << "for path:" << this->path(); asyncCall("getScheduleTypeByID", {QVariant(typeID)}); } /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信æ�¯ * @return 日程类型ID */ void DbusAccountRequest::createScheduleType(const DScheduleType::Ptr &typeInfo) { qCDebug(ClientLogger) << "Creating schedule type:" << typeInfo->displayName() << "for path:" << this->path(); QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("createScheduleType", {QVariant(jsonStr)}); } /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void DbusAccountRequest::updateScheduleType(const DScheduleType::Ptr &typeInfo) { qCDebug(ClientLogger) << "Updating schedule type:" << typeInfo->displayName() << "ID:" << typeInfo->typeID() << "for path:" << this->path(); QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("updateScheduleType", {QVariant(jsonStr)}); } /** * @brief DbusAccountRequest::updateScheduleTypeShowState * 更新类型显示状æ€� * @param typeInfo */ void DbusAccountRequest::updateScheduleTypeShowState(const DScheduleType::Ptr &typeInfo) { qCDebug(ClientLogger) << "Updating schedule type show state for type:" << typeInfo->displayName() << "ID:" << typeInfo->typeID() << "for path:" << this->path(); QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); QString callName = "updateScheduleTypeShowState"; asyncCall("updateScheduleType", callName, {QVariant(jsonStr)}); } /** * @brief deleteScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程类型 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void DbusAccountRequest::deleteScheduleTypeByID(const QString &typeID) { qCDebug(ClientLogger) << "Deleting schedule type ID:" << typeID << "for path:" << this->path(); QList argumentList; asyncCall("deleteScheduleTypeByID", {QVariant(typeID)}); } /** * @brief scheduleTypeByUsed 日程类型是å�¦è¢«ä½¿ç”¨ * @param typeID 日程类型ID * @return */ bool DbusAccountRequest::scheduleTypeByUsed(const QString &typeID) { qCDebug(ClientLogger) << "Checking if schedule type ID:" << typeID << "is in use for path:" << this->path(); QDBusMessage ret = call("scheduleTypeByUsed", QVariant(typeID)); return ret.arguments().value(0).toBool(); } /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信æ�¯ * @return 返回日程ID */ void DbusAccountRequest::createSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "Creating schedule:" << scheduleInfo->summary() << "for path:" << this->path(); QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); asyncCall("createSchedule", {QVariant(jsonStr)}); } /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void DbusAccountRequest::updateSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "Updating schedule:" << scheduleInfo->summary() << "ID:" << scheduleInfo->schedulingID() << "for path:" << this->path(); QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); asyncCall("updateSchedule", {QVariant(jsonStr)}); } DSchedule::Ptr DbusAccountRequest::getScheduleByScheduleID(const QString &scheduleID) { qCDebug(ClientLogger) << "Getting schedule by ID:" << scheduleID << "for path:" << this->path(); QList argumentList; argumentList << QVariant::fromValue(scheduleID); QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getScheduleByScheduleID"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(ClientLogger) << "Failed to get schedule by ID:" << scheduleID << "Error:" << reply.errorMessage(); return nullptr; } QDBusReply scheduleReply = reply; QString scheduleStr = scheduleReply.value(); DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleStr); return schedule; } /** * @brief deleteScheduleByScheduleID æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param ScheduleID 日程ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void DbusAccountRequest::deleteScheduleByScheduleID(const QString &scheduleID) { qCDebug(ClientLogger) << "Deleting schedule ID:" << scheduleID << "for path:" << this->path(); QList argumentList; asyncCall("deleteScheduleByScheduleID", {QVariant(scheduleID)}); } /** * @brief deleteSchedulesByScheduleTypeID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void DbusAccountRequest::deleteSchedulesByScheduleTypeID(const QString &typeID) { qCDebug(ClientLogger) << "Deleting all schedules for type ID:" << typeID << "for path:" << this->path(); QList argumentList; asyncCall("deleteSchedulesByScheduleTypeID", {QVariant(typeID)}); } /** * @brief querySchedulesWithParameter æ ¹æ�®æŸ¥è¯¢å�‚数查询日程 * @param params 具体的查询å�‚æ•° * @return 查询到的日程集 */ void DbusAccountRequest::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { //key为空为正常日程获å�–,ä¸�为空则为æ�œç´¢æ—¥ç¨‹ QString callName = "searchSchedulesWithParameter"; if (params->key().isEmpty()) { callName = "querySchedulesWithParameter"; m_priParams = params; } QString jsonStr = DScheduleQueryPar::toJsonString(params); asyncCall("querySchedulesWithParameter", callName, {QVariant(jsonStr)}); } bool DbusAccountRequest::querySchedulesByExternal(const DScheduleQueryPar::Ptr ¶ms, QString &json) { QDBusPendingReply reply = call("querySchedulesWithParameter", QVariant::fromValue(params)); if (reply.isError()) { qCWarning(ClientLogger) << "External schedule query failed:" << reply.error().message(); return false; } json = reply.argumentAt<0>(); return true; } void DbusAccountRequest::getSysColors() { asyncCall("getSysColors"); } QString DbusAccountRequest::getDtLastUpdate() { qCDebug(ClientLogger) << "Getting last update time for path:" << this->path(); QDBusInterface interface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); QString datetime = interface.property("dtLastUpdate").toString(); return datetime; } void DbusAccountRequest::slotCallFinished(CDBusPendingCallWatcher *call) { qCDebug(ClientLogger) << "DBus call finished for method:" << call->getmember() << "path:" << this->path(); int ret = 0; bool canCall = true; QVariant msg; if (call->isError()) { qCWarning(ClientLogger) << "DBus call error - Method:" << call->reply().member() << "Error:" << call->error().message() << "Path:" << this->path(); ret = 1; } else { if (call->getmember() == "getAccountInfo") { qCDebug(ClientLogger) << "Processing account info response for path:" << this->path(); QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DAccount::Ptr ptr; ptr.reset(new DAccount()); if (DAccount::fromJsonString(ptr, str)) { qCDebug(ClientLogger) << "Successfully parsed account info for:" << ptr->accountName(); emit signalGetAccountInfoFinish(ptr); } else { qCWarning(ClientLogger) << "Failed to parse account info JSON for path:" << this->path(); ret = 2; } } else if (call->getmember() == "getScheduleTypeList") { qCDebug(ClientLogger) << "Processing schedule type list response for path:" << this->path(); QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DScheduleType::List stList; if (DScheduleType::fromJsonListString(stList, str)) { qCDebug(ClientLogger) << "Successfully parsed" << stList.size() << "schedule types"; emit signalGetScheduleTypeListFinish(stList); } else { qCWarning(ClientLogger) << "Failed to parse schedule type list JSON for path:" << this->path(); ret = 2; } } else if (call->getmember() == "querySchedulesWithParameter") { qCDebug(ClientLogger) << "Processing schedule query response for path:" << this->path(); QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); QMap map = DSchedule::fromQueryResult(str); qCDebug(ClientLogger) << "Query returned schedules for" << map.size() << "dates"; emit signalGetScheduleListFinish(map); } else if (call->getmember() == "searchSchedulesWithParameter") { qCDebug(ClientLogger) << "Processing schedule search response for path:" << this->path(); QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); QMap map = DSchedule::fromQueryResult(str); qCDebug(ClientLogger) << "Search returned schedules for" << map.size() << "dates"; emit signalSearchScheduleListFinish(map); } else if (call->getmember() == "getSysColors") { qCDebug(ClientLogger) << "Processing system colors response for path:" << this->path(); QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DTypeColor::List list = DTypeColor::fromJsonString(str); qCDebug(ClientLogger) << "Successfully parsed" << list.size() << "system colors"; emit signalGetSysColorsFinish(list); } else if (call->getmember() == "createScheduleType") { //创建日程类型结æ�Ÿ qCDebug(ClientLogger) << "Processing create schedule type response for path:" << this->path(); QDBusPendingReply reply = *call; QString scheduleTypeId = reply.argumentAt<0>(); qCDebug(ClientLogger) << "Created schedule type with ID:" << scheduleTypeId; msg = scheduleTypeId; } else if (call->getmember() == "updateScheduleTypeShowState") { //更新日程类型显示状æ€�结æ�Ÿ qCDebug(ClientLogger) << "Processing update schedule type show state response for path:" << this->path(); canCall = false; //é‡�新读å�–日程数æ�® setCallbackFunc(call->getCallbackFunc()); querySchedulesWithParameter(m_priParams); } } if (canCall && call->getCallbackFunc() != nullptr) { qCDebug(ClientLogger) << "Executing callback for method:" << call->getmember() << "with ret:" << ret; call->getCallbackFunc()({ret, msg}); } call->deleteLater(); } void DbusAccountRequest::slotDbusCall(const QDBusMessage &msg) { qCDebug(ClientLogger) << "Received DBus signal:" << msg.member() << "for path:" << this->path(); if (msg.member() == "PropertiesChanged") { qCDebug(ClientLogger) << "Processing properties changed signal"; QDBusPendingReply reply = msg; onPropertiesChanged(reply.argumentAt<0>(), reply.argumentAt<1>(), reply.argumentAt<2>()); } else if (msg.member() == "scheduleTypeUpdate") { qCDebug(ClientLogger) << "Schedule type update signal received, refreshing type list"; getScheduleTypeList(); } else if (msg.member() == "scheduleUpdate") { //更新全局数æ�® qCDebug(ClientLogger) << "Schedule update signal received, refreshing data"; querySchedulesWithParameter(m_priParams); //æ›´æ–°æ�œç´¢æ•°æ�® emit signalSearchUpdate(); } } void DbusAccountRequest::onPropertiesChanged(const QString &, const QVariantMap &changedProperties, const QStringList &) { qCDebug(ClientLogger) << "Processing" << changedProperties.size() << "property changes for path:" << this->path(); for (QVariantMap::const_iterator it = changedProperties.cbegin(), end = changedProperties.cend(); it != end; ++it) { if (it.key() == "syncState") { int state = it.value().toInt(); qCDebug(ClientLogger) << "Sync state changed to:" << state; emit signalSyncStateChange(static_cast(state)); } else if (it.key() == "accountState") { int state = it.value().toInt(); qCDebug(ClientLogger) << "Account state changed to:" << state; emit signalAccountStateChange(static_cast(state)); } if (it.key() == "dtLastUpdate") { qCDebug(ClientLogger) << "Last update time changed"; emit signalDtLastUpdate(getDtLastUpdate()); } if (it.key() == "accountState") { emit signalAccountStateChange(getAccountState()); } if (it.key() == "dtLastUpdate") { emit signalDtLastUpdate(getDtLastUpdate()); } if (it.key() == "accountState") { emit signalAccountStateChange(getAccountState()); } } } void DbusAccountRequest::importSchedule(QString icsFilePath, QString typeID, bool cleanExists) { asyncCall("importSchedule", {QVariant(icsFilePath), QVariant(typeID), QVariant(cleanExists)}); } void DbusAccountRequest::exportSchedule(QString icsFilePath, QString typeID) { asyncCall("exportSchedule", {QVariant(icsFilePath), QVariant(typeID)}); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbusaccountrequest.h000066400000000000000000000123721523260663500304270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTREQUEST_H #define DBUSACCOUNTREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dschedule.h" #include "dscheduletype.h" #include "dtypecolor.h" #include "dschedulequerypar.h" //å�•项å¸�户信æ�¯è¯·æ±‚ç±» class DbusAccountRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountRequest(const QString &path, const QString &interface, QObject *parent = nullptr); /** * @brief setAccountExpandStatus * 设置å¸�户列表展开状æ€� * @param expandStatus 展开状æ€� */ void setAccountExpandStatus(bool expandStatus); void setAccountState(DAccount::AccountStates state); void setSyncFreq(const QString &freq); DAccount::AccountStates getAccountState(); DAccount::AccountSyncState getSyncState(); QString getSyncFreq(); /** * @brief getAccountInfo 获å�–å¸�户信æ�¯ * @return */ void getAccountInfo(); /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ void getScheduleTypeList(); /** * @brief getScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–日程类型信æ�¯ * @param typeID 日程类型ID * @return */ void getScheduleTypeByID(const QString &typeID); /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信æ�¯ * @return 日程类型ID */ void createScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void updateScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief updateScheduleTypeShowState * 更新类型显示状æ€� * @param typeInfo */ void updateScheduleTypeShowState(const DScheduleType::Ptr &typeInfo); /** * @brief deleteScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程类型 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void deleteScheduleTypeByID(const QString &typeID); /** * @brief scheduleTypeByUsed 日程类型是å�¦è¢«ä½¿ç”¨ * @param typeID 日程类型ID * @return */ bool scheduleTypeByUsed(const QString &typeID); /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信æ�¯ * @return 返回日程ID */ void createSchedule(const DSchedule::Ptr &scheduleInfo); /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void updateSchedule(const DSchedule::Ptr &scheduleInfo); DSchedule::Ptr getScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteScheduleByScheduleID æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param ScheduleID 日程ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void deleteScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteSchedulesByScheduleTypeID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void deleteSchedulesByScheduleTypeID(const QString &typeID); /** * @brief querySchedulesWithParameter æ ¹æ�®æŸ¥è¯¢å�‚数查询日程 * @param params 具体的查询å�‚æ•° * @return 查询到的日程集 */ void querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms); //对外查询接å�£ï¼Œå�Œæ­¥ bool querySchedulesByExternal(const DScheduleQueryPar::Ptr ¶ms, QString &json); void getSysColors(); //获å�–最å�Žä¸€æ¬¡å�Œæ­¥æ—¶é—´ QString getDtLastUpdate(); void importSchedule(QString icsFilePath, QString TypeID, bool cleanExists); void exportSchedule(QString icsFilePath, QString TypeID); signals: void signalGetAccountInfoFinish(DAccount::Ptr); void signalGetScheduleTypeListFinish(DScheduleType::List); void signalGetScheduleListFinish(QMap); void signalSearchScheduleListFinish(QMap); void signalGetSysColorsFinish(DTypeColor::List); void signalDtLastUpdate(QString); void signalSyncStateChange(DAccount::AccountSyncState); void signalAccountStateChange(DAccount::AccountStates); void signalSearchUpdate(); public slots: //dbusæœ�务端调用 void slotDbusCall(const QDBusMessage &msg) override; void slotCallFinished(CDBusPendingCallWatcher *) override; private: void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); private: DScheduleQueryPar::Ptr m_priParams; //上一次查询日程的数æ�® }; #endif // DBUSACCOUNTREQUEST_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbuscalendar_adaptor.cpp000066400000000000000000000726731523260663500312120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbuscalendar_adaptor.h" #include "accountmanager.h" #include "calendarmainwindow.h" #include "lunarmanager.h" #include "scheduledatamanage.h" #include "schedulemanager.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* * Implementation of adaptor class CalendarAdaptor */ CalendarAdaptor::CalendarAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } CalendarAdaptor::~CalendarAdaptor() { // destructor } void CalendarAdaptor::ActiveWindow() { // handle method call com.deepin.Calendar.RaiseWindow QMetaObject::invokeMethod(parent(), "ActiveWindow"); } void CalendarAdaptor::RaiseWindow() { QWidget *pp = qobject_cast(parent()); // å�–消最å°�化状æ€� pp->setWindowState(pp->windowState() & ~Qt::WindowState::WindowMinimized); pp->activateWindow(); pp->raise(); } void CalendarAdaptor::OpenSchedule(QString job) { // 更新对应的槽函数 QMetaObject::invokeMethod(parent(), "slotOpenSchedule", Q_ARG(QString, job)); } // Pick the first visible schedule type (privilege != None), skip hidden types like Holiday. // Note: default types (Work/Life/Other) have Read privilege (0x1) — they are visible and // schedules created in them are editable. Only None (0x0) types are hidden system types. static QString pickUserScheduleType(const DScheduleType::List &types) { for (const auto &t : types) { if (t->privilege() != DScheduleType::None) { return t->typeID(); } } return types.isEmpty() ? QString() : types.first()->typeID(); } // Get a QDBusInterface for the local account service. // Re-checks client cache first (safe against races: account may become // available between the caller's earlier check and now), then falls back // to a synchronous call to AccountManager to get account list. // Returns an invalid interface (isValid() == false) if unavailable. static QDBusInterface getLocalAccountInterface() { auto item = gAccountManager->getLocalAccountItem(); if (item) { return QDBusInterface( "com.deepin.dataserver.Calendar", item->getAccount()->dbusPath(), item->getAccount()->dbusInterface(), QDBusConnection::sessionBus()); } qCWarning(ClientLogger) << "Client cache not ready, querying backend for account info"; QDBusInterface mgrIface( "com.deepin.dataserver.Calendar", "/com/deepin/dataserver/Calendar/AccountManager", "com.deepin.dataserver.Calendar.AccountManager", QDBusConnection::sessionBus()); QDBusReply reply = mgrIface.call("getAccountList"); if (!reply.isValid()) { qCWarning(ClientLogger) << "Failed to get account list:" << reply.error().message(); return QDBusInterface("", "", "", QDBusConnection::sessionBus()); } DAccount::List accountList; if (!DAccount::fromJsonListString(accountList, reply.value())) { qCWarning(ClientLogger) << "Failed to parse account list"; return QDBusInterface("", "", "", QDBusConnection::sessionBus()); } for (const auto &acc : accountList) { if (acc->accountType() == DAccount::Account_Local) { return QDBusInterface( "com.deepin.dataserver.Calendar", acc->dbusPath(), acc->dbusInterface(), QDBusConnection::sessionBus()); } } qCWarning(ClientLogger) << "No local account found"; return QDBusInterface("", "", "", QDBusConnection::sessionBus()); } // Apply JSON update fields to an existing schedule. // Shared by both cache fast-path and backend fallback-path. static void applyScheduleUpdates(const DSchedule::Ptr &schedule, const QJsonObject &updateData) { if (updateData.contains("title")) { schedule->setSummary(updateData["title"].toString()); } if (updateData.contains("description")) { schedule->setDescription(updateData["description"].toString()); } if (updateData.contains("location")) { schedule->setLocation(updateData["location"].toString()); } if (updateData.contains("allDay")) { schedule->setAllDay(updateData["allDay"].toBool()); } if (updateData.contains("startTime")) { QString str = updateData["startTime"].toString(); QDateTime dt = QDateTime::fromString(str, Qt::ISODate); if (!dt.isValid()) dt = QDateTime::fromString(str, "yyyy-MM-ddThh:mm:ss"); if (dt.isValid()) schedule->setDtStart(dt); } if (updateData.contains("endTime")) { QString str = updateData["endTime"].toString(); QDateTime dt = QDateTime::fromString(str, Qt::ISODate); if (!dt.isValid()) dt = QDateTime::fromString(str, "yyyy-MM-ddThh:mm:ss"); if (dt.isValid()) schedule->setDtEnd(dt); } if (updateData.contains("reminder")) { int reminderMinutes = updateData["reminder"].toInt(); schedule->clearAlarms(); if (reminderMinutes > 0) { KCalendarCore::Alarm::Ptr alarm = schedule->newAlarm(); alarm->setStartOffset(KCalendarCore::Duration(-reminderMinutes * 60)); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); } } } // Helper function to convert DSchedule to JSON format static QJsonObject scheduleToJson(const DSchedule::Ptr &schedule) { QJsonObject obj; if (!schedule) return obj; obj["id"] = schedule->uid(); obj["title"] = schedule->summary(); obj["description"] = schedule->description(); obj["startTime"] = schedule->dtStart().toString(Qt::ISODate); obj["endTime"] = schedule->dtEnd().toString(Qt::ISODate); obj["allDay"] = schedule->allDay(); obj["location"] = schedule->location(); // Determine schedule type for easy identification QString scheduleType = "user"; // Default to user schedule try { AccountItem::Ptr account = gAccountManager->getAccountItemByScheduleTypeId(schedule->scheduleTypeID()); if (!account.isNull()) { DScheduleType::Ptr scheduleTypePtr = gAccountManager->getScheduleTypeByScheduleTypeId(schedule->scheduleTypeID()); if (!scheduleTypePtr.isNull()) { // Use the exact same logic as CScheduleOperation::isFestival() bool isFestival = (account->getAccount()->accountType() == DAccount::Account_Local) && (scheduleTypePtr->privilege() == 0); scheduleType = isFestival ? "system" : "user"; } } } catch (...) { // If any error occurs, default to user schedule (safer) scheduleType = "user"; } obj["scheduleType"] = scheduleType; // Add reminder info auto alarms = schedule->alarms(); if (!alarms.isEmpty()) { auto alarm = alarms.first(); obj["reminderMinutes"] = -alarm->startOffset().asSeconds() / 60; } else { obj["reminderMinutes"] = 0; } // Add recurrence info if exists if (schedule->recurs()) { QJsonObject recurrence; auto rrule = schedule->recurrence(); recurrence["type"] = static_cast(rrule->recurrenceType()); recurrence["frequency"] = rrule->frequency(); if (rrule->duration() != -1) { recurrence["duration"] = rrule->duration(); } if (rrule->endDateTime().isValid()) { recurrence["endDate"] = rrule->endDateTime().toString(Qt::ISODate); } obj["recurrence"] = recurrence; } return obj; } // Helper function to parse date from string static QDate parseDateString(const QString &dateStr) { if (dateStr.isEmpty() || dateStr == "today" || dateStr == "day") { return QDate::currentDate(); } QDate date = QDate::fromString(dateStr, "yyyy-MM-dd"); // Validate the date - QDate::fromString may create invalid dates for impossible dates if (!date.isValid()) { return QDate(); // Return invalid date } // Additional validation for impossible dates like "2025-02-30" QStringList parts = dateStr.split("-"); if (parts.size() == 3) { bool yearOk, monthOk, dayOk; int year = parts[0].toInt(&yearOk); int month = parts[1].toInt(&monthOk); int day = parts[2].toInt(&dayOk); if (yearOk && monthOk && dayOk) { // Check if the parsed date matches the input values if (date.year() != year || date.month() != month || date.day() != day) { return QDate(); // Invalid date } } } return date; } QString CalendarAdaptor::QuerySchedules(const QString &query) { QJsonObject result; QJsonArray schedules; try { if (query == "day" || query == "today") { // Get today's schedules QDate today = QDate::currentDate(); DSchedule::List daySchedules = gScheduleManager->getScheduleByDay(today); for (const auto &schedule : daySchedules) { schedules.append(scheduleToJson(schedule)); } result["date"] = today.toString("yyyy-MM-dd"); result["type"] = "single_day"; } else if (query.startsWith("search:")) { // Search schedules by keyword QString keyword = query.mid(7); // Remove "search:" prefix if (!keyword.isEmpty()) { // Get all schedules from a wide date range QDate startDate = QDate::currentDate().addMonths(-6); QDate endDate = QDate::currentDate().addMonths(6); QMap scheduleMap = gScheduleManager->getScheduleMap(startDate, endDate); // Search through all schedules for keyword for (auto it = scheduleMap.begin(); it != scheduleMap.end(); ++it) { for (const auto &schedule : it.value()) { QString title = schedule->summary(); QString description = schedule->description(); QString location = schedule->location(); // Case-insensitive search in title, description, and location if (title.contains(keyword, Qt::CaseInsensitive) || description.contains(keyword, Qt::CaseInsensitive) || location.contains(keyword, Qt::CaseInsensitive)) { schedules.append(scheduleToJson(schedule)); } } } } result["keyword"] = keyword; result["type"] = "search"; } else if (query.contains(",")) { // Date range query: "2024-01-15,2024-01-20" QStringList dates = query.split(","); if (dates.size() == 2) { QDate startDate = parseDateString(dates[0]); QDate endDate = parseDateString(dates[1]); if (startDate.isValid() && endDate.isValid()) { QMap scheduleMap = gScheduleManager->getScheduleMap(startDate, endDate); for (auto it = scheduleMap.constBegin(); it != scheduleMap.constEnd(); ++it) { for (const auto &schedule : it.value()) { schedules.append(scheduleToJson(schedule)); } } result["startDate"] = startDate.toString("yyyy-MM-dd"); result["endDate"] = endDate.toString("yyyy-MM-dd"); result["type"] = "date_range"; } } } else { // Single date query QDate queryDate = parseDateString(query); if (queryDate.isValid()) { DSchedule::List daySchedules = gScheduleManager->getScheduleByDay(queryDate); for (const auto &schedule : daySchedules) { schedules.append(scheduleToJson(schedule)); } result["date"] = queryDate.toString("yyyy-MM-dd"); result["type"] = "single_day"; } } } catch (...) { result["error"] = "Failed to query schedules"; result["schedules"] = QJsonArray(); QJsonDocument doc(result); return doc.toJson(QJsonDocument::Compact); } result["schedules"] = schedules; result["count"] = schedules.size(); result["success"] = true; QJsonDocument doc(result); return QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); } QString CalendarAdaptor::CreateSchedule(const QString &scheduleData) { QJsonParseError error; QJsonDocument doc = QJsonDocument::fromJson(scheduleData.toUtf8(), &error); if (error.error != QJsonParseError::NoError || !doc.isObject()) { return QString(); // Invalid JSON } QJsonObject data = doc.object(); try { DSchedule::Ptr schedule(new DSchedule()); // Set basic information QString title = data["title"].toString(); QString description = data["description"].toString(); QString startTimeStr = data["startTime"].toString(); QString endTimeStr = data["endTime"].toString(); bool allDay = data["allDay"].toBool(false); QString location = data["location"].toString(); if (title.isEmpty() || startTimeStr.isEmpty()) { return QString(); // Missing required fields } schedule->setSummary(title); schedule->setDescription(description); schedule->setLocation(location); schedule->setAllDay(allDay); // Parse dates QDateTime startTime = QDateTime::fromString(startTimeStr, Qt::ISODate); if (!startTime.isValid()) { startTime = QDateTime::fromString(startTimeStr, "yyyy-MM-dd hh:mm"); } QDateTime endTime; if (!endTimeStr.isEmpty()) { endTime = QDateTime::fromString(endTimeStr, Qt::ISODate); if (!endTime.isValid()) { endTime = QDateTime::fromString(endTimeStr, "yyyy-MM-dd hh:mm"); } } else { endTime = startTime.addSecs(3600); } schedule->setDtStart(startTime); schedule->setDtEnd(endTime); // Set reminder if provided int reminderMinutes = data["reminder"].toInt(0); if (reminderMinutes > 0) { KCalendarCore::Alarm::Ptr alarm = schedule->newAlarm(); alarm->setStartOffset(KCalendarCore::Duration(-reminderMinutes * 60)); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); } // Generate unique ID schedule->setUid(QUuid::createUuid().toString()); // Fast path: use client cache if available AccountItem::Ptr account = gAccountManager->getLocalAccountItem(); if (account && !account->getScheduleTypeList().isEmpty()) { QString typeId = pickUserScheduleType(account->getScheduleTypeList()); if (!typeId.isEmpty()) { schedule->setScheduleTypeID(typeId); } account->createSchedule(schedule); return schedule->uid(); } // Fallback: directly call backend service synchronously QDBusInterface accountIface = getLocalAccountInterface(); if (!accountIface.isValid()) { return QString(); } // Get schedule type list QDBusReply typeListReply = accountIface.call("getScheduleTypeList"); if (!typeListReply.isValid()) { qCWarning(ClientLogger) << "Failed to get schedule type list:" << typeListReply.error().message(); return QString(); } DScheduleType::List typeList; if (!DScheduleType::fromJsonListString(typeList, typeListReply.value()) || typeList.isEmpty()) { qCWarning(ClientLogger) << "No schedule types available"; return QString(); } schedule->setScheduleTypeID(pickUserScheduleType(typeList)); // Create the schedule QString scheduleJson; DSchedule::toJsonString(schedule, scheduleJson); QDBusReply createReply = accountIface.call("createSchedule", QVariant(scheduleJson)); if (!createReply.isValid()) { qCWarning(ClientLogger) << "Failed to create schedule:" << createReply.error().message(); return QString(); } QString createdId = createReply.value(); qCWarning(ClientLogger) << "Schedule created via backend fallback, uid:" << createdId; // Trigger client data refresh so the UI shows the new schedule QMetaObject::invokeMethod(gAccountManager, &AccountManager::resetAccount, Qt::QueuedConnection); return createdId; } catch (...) { qCWarning(ClientLogger) << "Exception in CreateSchedule"; } return QString(); // Failed to create } bool CalendarAdaptor::ModifySchedule(const QString &scheduleId, const QString &operation, const QString &data) { if (scheduleId.isEmpty() || operation.isEmpty()) { return false; } try { if (operation == "delete") { AccountItem::Ptr account = gAccountManager->getLocalAccountItem(); if (account) { DSchedule::Ptr schedule = account->getScheduleByScheduleID(scheduleId); if (schedule) { account->deleteScheduleByID(scheduleId); return true; } } // Fallback: directly call backend QDBusInterface accountIface = getLocalAccountInterface(); if (!accountIface.isValid()) { return false; } QDBusReply delReply = accountIface.call("deleteScheduleByScheduleID", QVariant(scheduleId)); return delReply.isValid() && delReply.value(); } else if (operation == "update") { QJsonParseError error; QJsonDocument doc = QJsonDocument::fromJson(data.toUtf8(), &error); if (error.error != QJsonParseError::NoError || !doc.isObject()) { return false; } AccountItem::Ptr account = gAccountManager->getLocalAccountItem(); if (account) { DSchedule::Ptr schedule = account->getScheduleByScheduleID(scheduleId); if (schedule) { applyScheduleUpdates(schedule, doc.object()); account->updateSchedule(schedule); return true; } } // Fallback: directly call backend // (reached when account is null OR schedule not in cache) QDBusInterface accountIface = getLocalAccountInterface(); if (!accountIface.isValid()) { return false; } // Fetch existing schedule, merge updates, then save QDBusReply getReply = accountIface.call("getScheduleByScheduleID", QVariant(scheduleId)); if (!getReply.isValid()) { return false; } DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, getReply.value()); if (!schedule) { return false; } applyScheduleUpdates(schedule, doc.object()); QString scheduleJson; DSchedule::toJsonString(schedule, scheduleJson); QDBusReply updReply = accountIface.call("updateSchedule", QVariant(scheduleJson)); return updReply.isValid() && updReply.value(); } else if (operation == "snooze") { int snoozeMinutes = data.toInt(); if (snoozeMinutes > 0) { return true; } } } catch (...) { } return false; } QString CalendarAdaptor::GetCalendarView(const QString &viewType, const QString &date) { QJsonObject result; QJsonArray schedules; try { QDate targetDate = parseDateString(date); if (!targetDate.isValid()) { targetDate = QDate::currentDate(); } if (viewType == "day") { DSchedule::List daySchedules = gScheduleManager->getScheduleByDay(targetDate); for (const auto &schedule : daySchedules) { schedules.append(scheduleToJson(schedule)); } result["viewType"] = "day"; result["date"] = targetDate.toString("yyyy-MM-dd"); } else if (viewType == "week") { // Get week range (Monday to Sunday) QDate startOfWeek = targetDate.addDays(-(targetDate.dayOfWeek() - 1)); QDate endOfWeek = startOfWeek.addDays(6); QMap weekSchedules = gScheduleManager->getScheduleMap(startOfWeek, endOfWeek); QJsonArray days; for (int i = 0; i < 7; i++) { QDate dayDate = startOfWeek.addDays(i); QJsonObject dayObj; dayObj["date"] = dayDate.toString("yyyy-MM-dd"); dayObj["dayOfWeek"] = dayDate.dayOfWeek(); QJsonArray daySchedules; if (weekSchedules.contains(dayDate)) { for (const auto &schedule : weekSchedules[dayDate]) { daySchedules.append(scheduleToJson(schedule)); } } dayObj["schedules"] = daySchedules; days.append(dayObj); } result["viewType"] = "week"; result["startDate"] = startOfWeek.toString("yyyy-MM-dd"); result["endDate"] = endOfWeek.toString("yyyy-MM-dd"); result["days"] = days; } else if (viewType == "month") { QDate startOfMonth(targetDate.year(), targetDate.month(), 1); QDate endOfMonth = startOfMonth.addMonths(1).addDays(-1); QMap monthSchedules = gScheduleManager->getScheduleMap(startOfMonth, endOfMonth); for (auto it = monthSchedules.constBegin(); it != monthSchedules.constEnd(); ++it) { for (const auto &schedule : it.value()) { QJsonObject scheduleObj = scheduleToJson(schedule); scheduleObj["date"] = it.key().toString("yyyy-MM-dd"); schedules.append(scheduleObj); } } result["viewType"] = "month"; result["year"] = targetDate.year(); result["month"] = targetDate.month(); result["startDate"] = startOfMonth.toString("yyyy-MM-dd"); result["endDate"] = endOfMonth.toString("yyyy-MM-dd"); } // Add basic lunar info for the target date QJsonObject lunarInfo; // This would connect to the lunar service, simplified for now lunarInfo["date"] = targetDate.toString("yyyy-MM-dd"); lunarInfo["lunarDate"] = ""; // Would be filled by lunar service if (viewType != "week") { result["schedules"] = schedules; } result["lunarInfo"] = lunarInfo; result["success"] = true; } catch (...) { result["error"] = "Failed to get calendar view"; result["success"] = false; } QJsonDocument doc(result); return QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); } QString CalendarAdaptor::GetLunarInfo(const QString &date) { QJsonObject result; try { QDate queryDate = parseDateString(date); if (!queryDate.isValid()) { // Return error for invalid dates instead of using current date result["error"] = "Invalid date format or impossible date: " + date; result["success"] = false; QJsonDocument doc(result); return QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); } result["solarDate"] = queryDate.toString("yyyy-MM-dd"); // Integrate with existing HuangLi service CaHuangLiDayInfo huangLiInfo = gLunarManager->getHuangLiDay(queryDate); // Populate lunar information result["lunarDate"] = QString("%1%2%3").arg(huangLiInfo.mGanZhiYear).arg(huangLiInfo.mZodiac).arg("å¹´"); result["lunarMonthDay"] = QString("%1%2").arg(huangLiInfo.mLunarMonthName).arg(huangLiInfo.mLunarDayName); // Combine solar and lunar festivals QString festivals; if (!huangLiInfo.mSolarFestival.isEmpty()) { festivals = huangLiInfo.mSolarFestival; } if (!huangLiInfo.mLunarFestival.isEmpty()) { if (!festivals.isEmpty()) festivals += " "; festivals += huangLiInfo.mLunarFestival; } result["festival"] = festivals; result["jieqi"] = huangLiInfo.mTerm; // Solar terms // HuangLi details QJsonObject huangLi; // Parse mSuit and mAvoid strings (they might be single strings or comma-separated) QJsonArray yiArray; if (!huangLiInfo.mSuit.isEmpty()) { QStringList suitList = huangLiInfo.mSuit.split(QRegularExpression("[,,ã€�\\s]+"), QT_SKIP_EMPTY_PARTS); for (const QString &yi : suitList) { if (!yi.trimmed().isEmpty()) { yiArray.append(yi.trimmed()); } } } QJsonArray jiArray; if (!huangLiInfo.mAvoid.isEmpty()) { QStringList avoidList = huangLiInfo.mAvoid.split(QRegularExpression("[,,ã€�\\s]+"), QT_SKIP_EMPTY_PARTS); for (const QString &ji : avoidList) { if (!ji.trimmed().isEmpty()) { jiArray.append(ji.trimmed()); } } } huangLi["yi"] = yiArray; // Auspicious activities huangLi["ji"] = jiArray; // Inauspicious activities huangLi["ganZhiYear"] = huangLiInfo.mGanZhiYear; huangLi["ganZhiMonth"] = huangLiInfo.mGanZhiMonth; huangLi["ganZhiDay"] = huangLiInfo.mGanZhiDay; result["huangLi"] = huangLi; result["success"] = true; } catch (...) { // Fallback with basic info if HuangLi service fails result["solarDate"] = parseDateString(date).toString("yyyy-MM-dd"); result["lunarDate"] = "农历信æ�¯èŽ·å�–失败"; result["lunarMonthDay"] = ""; result["festival"] = ""; result["jieqi"] = ""; QJsonObject huangLi; huangLi["yi"] = QJsonArray(); huangLi["ji"] = QJsonArray(); huangLi["chongSha"] = ""; huangLi["wuxing"] = ""; result["huangLi"] = huangLi; result["error"] = "Failed to get lunar information from HuangLi service"; result["success"] = true; // Still return success with fallback data } QJsonDocument doc(result); return QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); } QString CalendarAdaptor::GetReminders(int hours) { QJsonObject result; QJsonArray reminders; try { if (hours <= 0) { hours = 24; // Default to 24 hours } QDateTime now = QDateTime::currentDateTime(); QDateTime endTime = now.addSecs(hours * 3600); // Convert hours to seconds // Get schedules in the time range that have reminders QMap scheduleMap = gScheduleManager->getScheduleMap(now.date(), endTime.date()); for (auto it = scheduleMap.constBegin(); it != scheduleMap.constEnd(); ++it) { for (const auto &schedule : it.value()) { // Check if schedule has alarms and is within time range auto alarms = schedule->alarms(); if (!alarms.isEmpty()) { for (const auto &alarm : alarms) { QDateTime alarmTime = schedule->dtStart().addSecs(alarm->startOffset().asSeconds()); if (alarmTime >= now && alarmTime <= endTime) { QJsonObject reminder; reminder["scheduleId"] = schedule->uid(); reminder["title"] = schedule->summary(); reminder["alarmTime"] = alarmTime.toString(Qt::ISODate); reminder["scheduleTime"] = schedule->dtStart().toString(Qt::ISODate); reminder["minutesToAlarm"] = static_cast(now.secsTo(alarmTime) / 60); reminders.append(reminder); } } } } } // Sort by alarm time // Note: This is a simplified sort, in practice you might want a more sophisticated approach result["reminders"] = reminders; result["count"] = reminders.size(); result["timeRange"] = hours; // Keep original field name for backward compatibility but use new parameter result["success"] = true; } catch (...) { result["error"] = "Failed to get reminders"; result["success"] = false; } QJsonDocument doc(result); return QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbuscalendar_adaptor.h000066400000000000000000000115761523260663500306520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSCALENDAR_ADAPTOR_H #define DBUSCALENDAR_ADAPTOR_H #include #include QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface com.deepin.Calendar */ class CalendarAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.Calendar") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: explicit CalendarAdaptor(QObject *parent); virtual ~CalendarAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS void ActiveWindow(); void RaiseWindow(); void OpenSchedule(QString job); // DBus APIs for AI Integration /** * @brief QuerySchedules Query schedules by various criteria * @param query Query string in formats: * - "today" - today's schedules * - "YYYY-MM-DD" - specific date * - "YYYY-MM-DD,YYYY-MM-DD" - date range * - "search:keyword" - keyword search * @return JSON string containing schedule list */ QString QuerySchedules(const QString &query); /** * @brief CreateSchedule Create a new schedule * @param scheduleData JSON string containing schedule information * @return Created schedule ID */ QString CreateSchedule(const QString &scheduleData); /** * @brief ModifySchedule Modify, delete or snooze a schedule * @param scheduleId Schedule ID to modify * @param operation Operation type: "delete", "update", "snooze" * @param data Additional data (JSON for update, minutes for snooze) * @return Operation success status */ bool ModifySchedule(const QString &scheduleId, const QString &operation, const QString &data); /** * @brief GetCalendarView Get calendar view data including schedules and lunar info * @param viewType View type: "day", "week", "month" * @param date Target date (optional, defaults to current date) * @return JSON string containing complete calendar view data */ QString GetCalendarView(const QString &viewType, const QString &date); /** * @brief GetLunarInfo Get detailed lunar calendar information * @param date Date in "YYYY-MM-DD" format * @return JSON string containing lunar and huangli information */ QString GetLunarInfo(const QString &date); /** * @brief GetReminders Get upcoming reminders * @param hours Time range in hours (default 24) * @return JSON string containing reminder list */ QString GetReminders(int hours); Q_SIGNALS: // SIGNALS }; #endif linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbushuanglirequest.cpp000066400000000000000000000117301523260663500307520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbushuanglirequest.h" #include "commondef.h" #include DbusHuangLiRequest::DbusHuangLiRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/HuangLi", "com.deepin.dataserver.Calendar.HuangLi", QDBusConnection::sessionBus(), parent) { } /** * @brief DbusHuangLiRequest::getFestivalMonth * 按月获å�–节å�‡æ—¥ä¿¡æ�¯ * @param year * @param month */ bool DbusHuangLiRequest::getFestivalMonth(quint32 year, quint32 month, FestivalInfo &festivalInfo) { qCDebug(ClientLogger) << "Requesting festival info for" << year << "month" << month; QDBusPendingReply reply = call("getFestivalMonth", QVariant(year), QVariant(month)); if (reply.isError()) { qCWarning(ClientLogger) << "Failed to get festival month info:" << reply.error().message(); return false; } QString json = reply.argumentAt<0>(); QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { qCWarning(ClientLogger) << "Failed to parse festival month JSON:" << json_error.errorString(); return false; } // è§£æž�æ•°æ�® QJsonArray rootarry = jsonDoc.array(); for (int i = 0; i < rootarry.size(); i++) { QJsonObject hsubObj = rootarry.at(i).toObject(); QJsonArray subOnjArry = hsubObj.value("list").toArray(); // é��历内部的节日列表数组 for (int j = 0; j < subOnjArry.size(); j++) { QJsonObject dayObj = subOnjArry.at(j).toObject(); HolidayInfo dayinfo; if (dayObj.contains("status")) { dayinfo.status = static_cast(dayObj.value("status").toInt()); } if (dayObj.contains("date")) { dayinfo.date = QDate::fromString(dayObj.value("date").toString(), "yyyy-MM-dd"); } festivalInfo.listHoliday.append(dayinfo); } } return true; } /** * @brief DbusHuangLiRequest::getHuangLiDay * 按天获å�–黄历信æ�¯ * @param year * @param month * @param day */ bool DbusHuangLiRequest::getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &info) { qCDebug(ClientLogger) << "Requesting HuangLi day info for" << year << month << day; QDBusPendingReply reply = call("getHuangLiDay", QVariant(year), QVariant(month), QVariant(day)); if (reply.isError()) { qCWarning(ClientLogger) << "Failed to get HuangLi day info:" << reply.error().message(); return false; } QString json = reply.argumentAt<0>(); bool isVoild; info.strJsonToInfo(json, isVoild); return isVoild; } /** * @brief DbusHuangLiRequest::getHuangLiMonth * 按月获å�–黄历信æ�¯ * @param year * @param month * @param fill */ bool DbusHuangLiRequest::getHuangLiMonth(quint32 year, quint32 month, bool fill, CaHuangLiMonthInfo &info) { // qCDebug(ClientLogger) << "Requesting HuangLi month info for" << year << month << "fill:" << fill; QDBusPendingReply reply = call("getHuangLiMonth", QVariant(year), QVariant(month), QVariant(fill)); if (reply.isError()) { qCWarning(ClientLogger) << "Failed to get HuangLi month info:" << reply.error().message(); return false; } QString json = reply.argumentAt<0>(); bool infoIsVaild; info.strJsonToInfo(json, infoIsVaild); return infoIsVaild; } /** * @brief DbusHuangLiRequest::getLunarInfoBySolar * 获å�–农历信æ�¯ * @param year * @param month * @param day */ void DbusHuangLiRequest::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { qCDebug(ClientLogger) << "Requesting lunar info for solar date" << year << month << day; asyncCall("getLunarInfoBySolar", {QVariant(year), QVariant(month), QVariant(day)}); } /** * @brief DbusHuangLiRequest::getLunarMonthCalendar * 获å�–农历月日程 * @param year * @param month * @param fill */ void DbusHuangLiRequest::getLunarMonthCalendar(quint32 year, quint32 month, bool fill) { qCDebug(ClientLogger) << "Requesting lunar month calendar for" << year << month << "fill:" << fill; asyncCall("getLunarMonthCalendar", {QVariant(year), QVariant(month), QVariant(fill)}); } void DbusHuangLiRequest::slotCallFinished(CDBusPendingCallWatcher *call) { if (call->isError()) { qCWarning(ClientLogger) << "Async call failed:" << call->reply().member() << call->error().message(); return; } qCDebug(ClientLogger) << "Async call completed successfully:" << call->reply().member(); call->deleteLater(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbushuanglirequest.h000066400000000000000000000021361523260663500304170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSHUANGLIREQUEST_H #define DBUSHUANGLIREQUEST_H #include "dbusrequestbase.h" #include "huangliData/lunardatastruct.h" #include "huangliData/dbusdatastruct.h" //黄历数æ�®è¯·æ±‚ç±» class DbusHuangLiRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusHuangLiRequest(QObject *parent = nullptr); //按月获å�–节å�‡æ—¥ä¿¡æ�¯ bool getFestivalMonth(quint32 year, quint32 month, FestivalInfo&); //按天获å�–黄历信æ�¯ bool getHuangLiDay(quint32 year, quint32 month, quint32 day, CaHuangLiDayInfo &); //按月获å�–黄历信æ�¯ bool getHuangLiMonth(quint32 year, quint32 month, bool fill, CaHuangLiMonthInfo &); //获å�–农历信æ�¯ void getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); //获å�–农历月日程 void getLunarMonthCalendar(quint32 year, quint32 month, bool fill); signals: public slots: void slotCallFinished(CDBusPendingCallWatcher*) override; }; #endif // DBUSHUANGLIREQUEST_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbusrequestbase.cpp000066400000000000000000000054711523260663500302420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusrequestbase.h" #include "commondef.h" #include DbusRequestBase::DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(DBUS_SERVER_NAME, path, interface.toStdString().c_str(), connection, parent) { //å…³è�”å�Žç«¯dbus触å�‘ä¿¡å�· if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), this->interface(), "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(ClientLogger) << "Failed to connect DBus signal:" << "service:" << this->service() << "path:" << this->path() << "interface:" << this->interface(); }; //å…³è�”å�Žç«¯dbus触å�‘ä¿¡å�· if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(ClientLogger) << "Failed to connect DBus Properties signal:" << "service:" << this->service() << "path:" << this->path(); }; } void DbusRequestBase::setCallbackFunc(CallbackFunc func) { m_callbackFunc = func; } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接å�£ * @param method dbus方法å�� * @param args å�‚æ•° */ void DbusRequestBase::asyncCall(const QString &method, const QList &args) { QDBusPendingCall async = QDBusAbstractInterface::asyncCallWithArgumentList(method, args); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, method, this); //将回调函数放进CallWatcher中,éš�CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } void DbusRequestBase::asyncCall(const QString &method, const QString &callName, const QList &args) { QDBusPendingCall async = QDBusAbstractInterface::asyncCallWithArgumentList(method, args); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, callName, this); //将回调函数放进CallWatcher中,éš�CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } /** * @brief slotDbusCall * dbusæœ�务端调用 * @param msg 调用消æ�¯ */ void DbusRequestBase::slotDbusCall(const QDBusMessage &msg) { } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/dbusrequestbase.h000066400000000000000000000024361523260663500277050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSREQUESTBASE_H #define DBUSREQUESTBASE_H #include "cdbuspendingcallwatcher.h" #include #include #define DBUS_SERVER_NAME "com.deepin.dataserver.Calendar" //继承QDbus接å�£ç±»ï¼ŒåŒ…装自定义接å�£è®¿é—® class DbusRequestBase : public QDBusAbstractInterface { Q_OBJECT public: explicit DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); signals: public slots: //dbusæœ�务端调用 virtual void slotDbusCall(const QDBusMessage &msg); //dbus调用完æˆ�事件 virtual void slotCallFinished(CDBusPendingCallWatcher*) = 0; protected: //异步调用,包装异步调用事件 void asyncCall(const QString &method, const QList &args = {}); void asyncCall(const QString &method, const QString &callName, const QList &args = {}); private: CallbackFunc m_callbackFunc = nullptr; //回调函数 }; #endif // DBUSREQUESTBASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/doanetworkdbus.cpp000066400000000000000000000073371523260663500300770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "doanetworkdbus.h" #include "commondef.h" #include #include #include #include /* include dsysinfo for different OS version #include DCORE_USE_NAMESPACE inline const QString getNetworkService() { auto ver = DSysInfo::majorVersion().toInt(); if (ver > 20) { return QString("org.deepin.dde.Network1"); } return QString("com.deepin.daemon.Network"); } inline const QString getNetworkPath() { auto ver = DSysInfo::majorVersion().toInt(); if (ver > 20) { return QString("/org/deepin/dde/Network1"); } return QString("com/deepin/daemon/Network"); } inline const char *getNetworkInterface() { auto ver = DSysInfo::majorVersion().toInt(); if (ver > 20) { return "org.deepin.dde.Network1"; } return "com.deepin.daemon.Network"; } #define NETWORK_DBUS_INTERFACE getNetworkInterface() #define NETWORK_DBUS_SERVICE getNetworkService() #define NETWORK_DBUS_PATH getNetworkPath() */ // 使用系统统一的DBus获å�–网络状æ€� #define NETWORK_DBUS_INTERFACE "org.freedesktop.NetworkManager" #define NETWORK_DBUS_SERVICE "org.freedesktop.NetworkManager" #define NETWORK_DBUS_PATH "/org/freedesktop/NetworkManager" DOANetWorkDBus::DOANetWorkDBus(QObject *parent) : QDBusAbstractInterface(NETWORK_DBUS_SERVICE, NETWORK_DBUS_PATH, NETWORK_DBUS_INTERFACE, QDBusConnection::systemBus(), parent) { // Register NetWorkState enum with Qt meta type system // This must be done before any signal/slot connections that use this type static bool metaTypeRegistered = false; if (!metaTypeRegistered) { qRegisterMetaType("DOANetWorkDBus::NetWorkState"); metaTypeRegistered = true; } if (!this->isValid()) { qCWarning(ClientLogger) << "Error connecting remote object, service:" << this->service() << ",path:" << this->path() << ",interface" << this->interface(); } //å…³è�”å�Žç«¯dbus触å�‘ä¿¡å�· if (!QDBusConnection::systemBus().connect(this->service(), this->path(), "org.freedesktop.DBus.Properties", "PropertiesChanged", "sa{sv}as", this, SLOT(propertiesChanged(QDBusMessage)))) { qCWarning(ClientLogger) << "the connection was fail!"; } } /** * @brief getNetWorkState 获å�–网络状æ€� * @return */ DOANetWorkDBus::NetWorkState DOANetWorkDBus::getNetWorkState() { int state = getPropertyByName("State").toInt(); return (state == 70) ? DOANetWorkDBus::Active : DOANetWorkDBus::Disconnect; } //æ ¹æ�®å±žæ€§å��称获å�–对应属性值 QVariant DOANetWorkDBus::getPropertyByName(const char *porpertyName) { QDBusInterface dbusinterface(this->service(), this->path(), this->interface(), QDBusConnection::systemBus(), this); return dbusinterface.property(porpertyName); } //监å�¬æœ�务对象信å�· void DOANetWorkDBus::propertiesChanged(const QDBusMessage &msg) { QList arguments = msg.arguments(); // å�‚数固定长度 if (3 != arguments.count()) return; QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName != this->interface()) return; QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); foreach (const QString &prop, keys) { if (prop == "State") { int state = changedProps[prop].toInt(); if(70 == state){ emit sign_NetWorkChange(DOANetWorkDBus::Active); }else if(20 == state){ emit sign_NetWorkChange(DOANetWorkDBus::Disconnect); } } } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/doanetworkdbus.h000066400000000000000000000020351523260663500275320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DOANETWORKDBUS_H #define DOANETWORKDBUS_H #include #include class DOANetWorkDBus : public QDBusAbstractInterface { Q_OBJECT public: explicit DOANetWorkDBus(QObject *parent = nullptr); enum NetWorkState { Active = 1, //已连接 Disconnect, //已断开 Connecting, //连接中 unknow //未知 }; Q_ENUM(NetWorkState) /** * @brief getNetWorkState 获å�–网络状æ€� * @return */ DOANetWorkDBus::NetWorkState getNetWorkState(); signals: void sign_NetWorkChange(DOANetWorkDBus::NetWorkState); public slots: void propertiesChanged(const QDBusMessage &msg); private: QVariant getPropertyByName(const char *porpertyName); }; // Declare the enum as a meta type for use in Qt signal/slot connections Q_DECLARE_METATYPE(DOANetWorkDBus::NetWorkState) #endif // DOANETWORKDBUS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/exportedinterface.cpp000066400000000000000000000122331523260663500305460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "exportedinterface.h" #include "scheduledatamanage.h" #include "calendarmainwindow.h" #include "cscheduleoperation.h" #include "accountmanager.h" #include "units.h" #include "compatibledata.h" #include "commondef.h" #include #include #include #include ExportedInterface::ExportedInterface(QObject *parent) : Dtk::Core::DUtil::DExportedInterface(parent) { m_object = parent; } QVariant ExportedInterface::invoke(const QString &action, const QString ¶meters) const { //对外接å�£æ•°æ�®è®¾ç½® DSchedule::Ptr info; Exportpara para; QString tstr = parameters; CScheduleOperation _scheduleOperation; if (!analysispara(tstr, info, para)) { qCWarning(ClientLogger) << "Failed to parse parameters for action:" << action; return QVariant(false); } if (action == "CREATE") { // 创建日程 if (info.isNull()) { qCWarning(ClientLogger) << "Invalid schedule info for CREATE action"; return QVariant(false); } qCDebug(ClientLogger) << "Creating schedule"; bool _createSucc = _scheduleOperation.createSchedule(info); //如果创建失败 if (!_createSucc) { qCWarning(ClientLogger) << "Failed to create schedule"; return QVariant(false); } } else if (action == "VIEW") { qCDebug(ClientLogger) << "Viewing calendar with type:" << para.viewType; dynamic_cast(m_object)->viewWindow(para.viewType); } else if (action == "QUERY") { if (gLocalAccountItem) { qCDebug(ClientLogger) << "Querying schedules with title:" << para.ADTitleName << "from" << para.ADStartTime.toString() << "to" << para.ADEndTime.toString(); DSchedule::Map scheduleMap = DSchedule::fromMapString(gLocalAccountItem->querySchedulesByExternal(para.ADTitleName, para.ADStartTime, para.ADEndTime)); QString qstr = DDE_Calendar::getExternalSchedule(scheduleMap); qCDebug(ClientLogger) << "Found" << scheduleMap.size() << "schedules"; return QVariant(qstr); } else { qCWarning(ClientLogger) << "Local account not available for QUERY action"; return ""; } } else if (action == "CANCEL") { qCDebug(ClientLogger) << "Canceling schedules with title:" << para.ADTitleName << "from" << para.ADStartTime.toString() << "to" << para.ADEndTime.toString(); //对外接å�£åˆ é™¤æ—¥ç¨‹ QMap out; //å�£æŸ¥è¯¢æ—¥ç¨‹ if (gLocalAccountItem && gLocalAccountItem->querySchedulesByExternal(para.ADTitleName, para.ADStartTime, para.ADEndTime, out)) { //删除查询到的日程 QMap::const_iterator _iterator; for (_iterator = out.constBegin(); _iterator != out.constEnd(); ++_iterator) { for (int i = 0 ; i < _iterator.value().size(); ++i) { _scheduleOperation.deleteOnlyInfo(_iterator.value().at(i)); } } } else { qCWarning(ClientLogger) << "No schedules found to cancel or local account not available"; return QVariant(false); } } return QVariant(true); } bool ExportedInterface::analysispara(QString ¶meters, DSchedule::Ptr &info, Exportpara ¶) const { //如果是创建则info有效 //如果是其他则para有效 QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(parameters.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { qCWarning(ClientLogger) << "Failed to parse JSON parameters:" << json_error.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); //æ•°æ�®å��åº�列化 info = DDE_Calendar::getScheduleByExported(parameters); if (rootObj.contains("ViewName")) { para.viewType = rootObj.value("ViewName").toInt(); qCDebug(ClientLogger) << "View type:" << para.viewType; } if (rootObj.contains("ViewTime")) { para.viewTime = QDateTime::fromString(rootObj.value("ViewTime").toString(), "yyyy-MM-ddThh:mm:ss"); qCDebug(ClientLogger) << "View time:" << para.viewTime.toString(); } if (rootObj.contains("ADTitleName")) { para.ADTitleName = rootObj.value("ADTitleName").toString(); qCDebug(ClientLogger) << "Title:" << para.ADTitleName; } if (rootObj.contains("ADStartTime")) { para.ADStartTime = QDateTime::fromString(rootObj.value("ADStartTime").toString(), "yyyy-MM-ddThh:mm:ss"); qCDebug(ClientLogger) << "Start time:" << para.ADStartTime.toString(); } if (rootObj.contains("ADEndTime")) { para.ADEndTime = QDateTime::fromString(rootObj.value("ADEndTime").toString(), "yyyy-MM-ddThh:mm:ss"); qCDebug(ClientLogger) << "End time:" << para.ADEndTime.toString(); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/exportedinterface.h000066400000000000000000000016571523260663500302230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef EXPORTEDINTERFACE_H #define EXPORTEDINTERFACE_H #include "dschedule.h" #include #include DCORE_USE_NAMESPACE struct Exportpara { int viewType; //视图å��ç§°:year,month,week,day对应年ã€�月ã€�周ã€�日视图类型 QDateTime viewTime; //表示需è¦�查看视图上æŸ�个时间 QString ADTitleName; QDateTime ADStartTime; QDateTime ADEndTime; }; class ExportedInterface : public Dtk::Core::DUtil::DExportedInterface { public: explicit ExportedInterface(QObject *parent = nullptr); QVariant invoke(const QString &action, const QString ¶meters) const override; private: bool analysispara(QString ¶meters, DSchedule::Ptr &info, Exportpara ¶) const; private: QObject *m_object = nullptr; }; #endif // EXPORTEDINTERFACE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dbus/org.deepin.dde.ControlCenter.xml000066400000000000000000000002531523260663500324150ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/000077500000000000000000000000001523260663500246305ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/dcalendarddialog.cpp000066400000000000000000000100211523260663500305670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dcalendarddialog.h" #include "commondef.h" #include "constants.h" #include "calendarmanage.h" #include "tabletconfig.h" #include DCalendarDDialog::DCalendarDDialog(QWidget *parent) : DDialog(parent) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) , m_dateFormat(CalendarManager::getInstance()->getDateFormat()) { qCDebug(ClientLogger) << "DCalendarDDialog constructor"; connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &DCalendarDDialog::setTimeFormat); connect(CalendarManager::getInstance(), &CalendarManager::signalDateFormatChanged, this, &DCalendarDDialog::setDateFormat); //获å�–ddialog的标题æ � DTitlebar *titlebar = findChild(); if (titlebar != nullptr) { qCDebug(ClientLogger) << "Setting focus proxy to titlebar"; //设置ddialog的焦点代ç�†ä¸ºæ ‡é¢˜æ � this->setFocusProxy(titlebar); } else { qCDebug(ClientLogger) << "Titlebar not found"; } } void DCalendarDDialog::mouseMoveEvent(QMouseEvent *event) { //如果为平æ�¿æ¨¡å¼�使其ä¸�å�¯ç§»åЍ if (TabletConfig::isTablet()) { // qCDebug(ClientLogger) << "Mouse move event ignored in tablet mode"; Q_UNUSED(event); } else { // qCDebug(ClientLogger) << "Processing mouse move event in desktop mode"; DDialog::mouseMoveEvent(event); } } void DCalendarDDialog::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "Key press event with key:" << event->key(); //如果dtk版本在5.3.0以下调用QDialog 以上调用DDialog #if (DTK_VERSION < DTK_VERSION_CHECK(5, 3, 0, 0)) // qCDebug(ClientLogger) << "Using QDialog::keyPressEvent for DTK < 5.3.0"; return QDialog::keyPressEvent(event); #else // qCDebug(ClientLogger) << "Using DDialog::keyPressEvent for DTK >= 5.3.0"; return DDialog::keyPressEvent(event); #endif } bool DCalendarDDialog::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "Event filter for event type:" << e->type(); //如果dtk版本在5.3.0以下调用QDialog 以上调用DDialog #if (DTK_VERSION < DTK_VERSION_CHECK(5, 3, 0, 0)) // qCDebug(ClientLogger) << "Using QDialog::eventFilter for DTK < 5.3.0"; return QDialog::eventFilter(o, e); #else // qCDebug(ClientLogger) << "Using DDialog::eventFilter for DTK >= 5.3.0"; return DDialog::eventFilter(o, e); #endif } void DCalendarDDialog::updateDateTimeFormat() { qCDebug(ClientLogger) << "Updating date time format, date format:" << m_dateFormat << "time format:" << m_timeFormat; } /** * @brief DCalendarDDialog::setTimeFormat 设置短时间格å¼�,并更新显示 */ void DCalendarDDialog::setTimeFormat(int value) { qCDebug(ClientLogger) << "Setting time format with value:" << value; if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } qCDebug(ClientLogger) << "Time format set to:" << m_timeFormat; updateDateTimeFormat(); } /** * @brief DCalendarDDialog::setTimeFormat 设置短日期格å¼�,并更新显示 */ void DCalendarDDialog::setDateFormat(int value) { qCDebug(ClientLogger) << "Setting date format with value:" << value; switch (value) { case 0: { m_dateFormat = "yyyy/M/d"; } break; case 1: { m_dateFormat = "yyyy-M-d"; } break; case 2: { m_dateFormat = "yyyy.M.d"; } break; case 3: { m_dateFormat = "yyyy/MM/dd"; } break; case 4: { m_dateFormat = "yyyy-MM-dd"; } break; case 5: { m_dateFormat = "yyyy.MM.dd"; } break; case 6: { m_dateFormat = "yy/M/d"; } break; case 7: { m_dateFormat = "yy-M-d"; } break; case 8: { m_dateFormat = "yy.M.d"; } break; default: { m_dateFormat = "yyyy-MM-dd"; } break; } qCDebug(ClientLogger) << "Date format set to:" << m_dateFormat; updateDateTimeFormat(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/dcalendarddialog.h000066400000000000000000000014071523260663500302440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DCALENDARDDIALOG_H #define DCALENDARDDIALOG_H #include DWIDGET_USE_NAMESPACE class DCalendarDDialog : public DDialog { Q_OBJECT public: explicit DCalendarDDialog(QWidget *parent = nullptr); protected: void mouseMoveEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; bool eventFilter(QObject *o, QEvent *e) override; virtual void updateDateTimeFormat(); signals: public slots: void setTimeFormat(int value); void setDateFormat(int value); protected: QString m_timeFormat = "hh:mm"; QString m_dateFormat = "yyyy-MM-dd"; }; #endif // DCALENDARDDIALOG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/myscheduleview.cpp000066400000000000000000000350231523260663500303740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "myscheduleview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "cdynamicicon.h" #include "constants.h" #include "cscheduleoperation.h" #include "lunarmanager.h" #include "commondef.h" #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CMyScheduleView::CMyScheduleView(const DSchedule::Ptr &schduleInfo, QWidget *parent) : DCalendarDDialog(parent) { qCDebug(ClientLogger) << "CMyScheduleView constructor with schedule:" << schduleInfo->summary(); setContentsMargins(0, 0, 0, 0); m_scheduleInfo = schduleInfo; initUI(); initConnection(); //æ ¹æ�®ä¸»é¢˜type设置颜色 setLabelTextColor(DGuiApplicationHelper::instance()->themeType()); setFixedSize(400, 160); //设置åˆ�始化弹窗内容 updateDateTimeFormat(); focusNextPrevChild(false); slotAccountStateChange(); } void CMyScheduleView::setSchedules(const DSchedule::Ptr &schduleInfo) { qCDebug(ClientLogger) << "Setting schedule to:" << schduleInfo->summary(); m_scheduleInfo = schduleInfo; } void CMyScheduleView::updateFormat() { qCDebug(ClientLogger) << "Updating format for schedule:" << m_scheduleInfo->summary(); updateDateTimeFormat(); slotAccountStateChange(); } /** * @brief CMyScheduleView::AutoFeed 字体改å�˜æ›´æ”¹ç•Œé�¢æ˜¾ç¤º * @param text */ void CMyScheduleView::slotAutoFeed(const QFont &font) { qCDebug(ClientLogger) << "Auto-adjusting text layout for schedule:" << m_scheduleInfo->summary(); Q_UNUSED(font) if (nullptr == m_timeLabel || nullptr == m_scheduleLabel) { qCWarning(ClientLogger) << "Time label or schedule label is null"; return; } QString strText = m_scheduleInfo->summary(); QString resultStr = nullptr; QFont labelF; labelF.setWeight(QFont::Medium); labelF = DFontSizeManager::instance()->get(DFontSizeManager::T6, labelF); QFontMetrics fm(labelF); int titlewidth = fm.horizontalAdvance(strText); QStringList strList; QString str; int h = fm.height(); strList.clear(); if (titlewidth < 330) { strList.append(strText); resultStr += strText; } else { for (int i = 0; i < strText.count(); i++) { str += strText.at(i); if (fm.horizontalAdvance(str) > 330) { str.remove(str.count() - 1, 1); strList.append(str); resultStr += str + "\n"; str.clear(); --i; } } strList.append(str); resultStr += str; } if (strList.count() * h > 100) { m_scheduleLabelH = 100; } else { int minH = 17; m_scheduleLabelH = strList.count() * h; m_scheduleLabelH = m_scheduleLabelH >= minH ? m_scheduleLabelH : minH; } //更新控件高度 area->setFixedHeight(m_scheduleLabelH); m_scheduleLabel->setText(resultStr); m_timeLabelH = 26; if (m_scheduleInfo->lunnar()) { QString timeName = m_timeLabel->text(); int index = timeName.indexOf("~"); //é‡�新计算法字符串åƒ�素长度 if (index != -1) { timeName[index - 1] = ' '; QFontMetrics fm(m_timeLabel->font()); int textWidth = fm.horizontalAdvance(m_timeLabel->text()); if (textWidth > m_timeLabel->width()) { timeName[index - 1] = '\n'; m_timeLabelH = 58; qCDebug(ClientLogger) << "Adjusting time label height to 58 for lunar calendar"; } else { m_timeLabelH = 26; qCDebug(ClientLogger) << "Setting time label height to 26 for lunar calendar"; } } m_timeLabel->setText(timeName); } else { m_timeLabelH = 26; qCDebug(ClientLogger) << "Setting time label height to 26 for standard calendar"; } //更新控件高度 m_timeLabel->setFixedHeight(m_timeLabelH); //更新界é�¢é«˜åº¦ setFixedHeight(m_defaultH + m_timeLabelH + m_scheduleLabelH); qCDebug(ClientLogger) << "Updated view height to:" << (m_defaultH + m_timeLabelH + m_scheduleLabelH); } void CMyScheduleView::slotAccountStateChange() { qCDebug(ClientLogger) << "Account state changed for schedule:" << m_scheduleInfo->summary(); AccountItem::Ptr item = gAccountManager->getAccountItemByScheduleTypeId(m_scheduleInfo->scheduleTypeID()); if (!item) { qCWarning(ClientLogger) << "No account found for schedule type ID:" << m_scheduleInfo->scheduleTypeID(); return; } bool canSync = item->isCanSyncShedule(); qCDebug(ClientLogger) << "Account sync state changed for schedule:" << m_scheduleInfo->summary() << "can sync:" << canSync; //æ ¹æ�®å�¯å�Œæ­¥çжæ€�设置删除按钮是å�¦å�¯ç”¨ getButtons()[0]->setEnabled(canSync); } /** * @brief setLabelTextColor 设置label文字颜色 * @param type 主题type */ void CMyScheduleView::setLabelTextColor(const int type) { qCDebug(ClientLogger) << "Setting label text colors for theme type:" << type; //标题显示颜色 QColor titleColor; //日程显示颜色 QColor scheduleTitleColor; //时间显示颜色 QColor timeColor; if (type == 2) { titleColor = "#FFFFFF"; titleColor.setAlphaF(0.85); scheduleTitleColor = "#FFFFFF"; timeColor = "#FFFFFF"; timeColor.setAlphaF(0.7); qCDebug(ClientLogger) << "Using dark theme colors"; } else { titleColor = "#000000"; titleColor.setAlphaF(0.85); scheduleTitleColor = "#000000"; scheduleTitleColor.setAlphaF(0.9); timeColor = "#000000"; timeColor.setAlphaF(0.6); qCDebug(ClientLogger) << "Using light theme colors"; } //设置颜色 setPaletteTextColor(m_Title, titleColor); setPaletteTextColor(m_scheduleLabel, scheduleTitleColor); setPaletteTextColor(m_timeLabel, timeColor); } /** * @brief setPaletteTextColor 设置调色æ�¿é¢œè‰² * @param widget 需è¦�设置的widget * @param textColor 显示颜色 */ void CMyScheduleView::setPaletteTextColor(QWidget *widget, QColor textColor) { qCDebug(ClientLogger) << "Setting palette text color:" << textColor.name(); //如果为空指针则退出 if (nullptr == widget) { qCWarning(ClientLogger) << "Widget is null, cannot set palette color"; return; } DPalette palette = widget->palette(); //设置文字显示颜色 palette.setColor(DPalette::WindowText, textColor); widget->setPalette(palette); } /** * @brief CMyScheduleView::updateDateTimeFormat 更新显示时间格å¼� */ void CMyScheduleView::updateDateTimeFormat() { qCDebug(ClientLogger) << "Updating date time format for schedule:" << m_scheduleInfo->summary(); //如果为节å�‡æ—¥ if (CScheduleOperation::isFestival(m_scheduleInfo)) { m_timeLabel->setText(m_scheduleInfo->dtStart().toString(m_dateFormat)); qCDebug(ClientLogger) << "Festival schedule date format:" << m_scheduleInfo->dtStart().toString(m_dateFormat); } else { QString showTime; QString beginName, endName; if (m_scheduleInfo->allDay()) { if (m_scheduleInfo->isMultiDay()) { beginName = getDataByFormat(m_scheduleInfo->dtStart().date(), m_dateFormat); endName = getDataByFormat(m_scheduleInfo->dtEnd().date(), m_dateFormat); showTime = beginName + " ~ " + endName; qCDebug(ClientLogger) << "Multi-day all-day schedule:" << showTime; } else { showTime = getDataByFormat(m_scheduleInfo->dtStart().date(), m_dateFormat); qCDebug(ClientLogger) << "Single-day all-day schedule:" << showTime; } } else { beginName = getDataByFormat(m_scheduleInfo->dtStart().date(), m_dateFormat) + " " + m_scheduleInfo->dtStart().time().toString(m_timeFormat); endName = getDataByFormat(m_scheduleInfo->dtEnd().date(), m_dateFormat) + " " + m_scheduleInfo->dtEnd().time().toString(m_timeFormat); showTime = beginName + " ~ " + endName; qCDebug(ClientLogger) << "Time-specific schedule:" << showTime; } m_timeLabel->setText(showTime); } slotAutoFeed(); } QString CMyScheduleView::getDataByFormat(const QDate &date, QString format) { qCDebug(ClientLogger) << "Getting formatted date for:" << date << "with format:" << format; QString name = date.toString(format); if (m_scheduleInfo->lunnar()) { //接入农历时间 name += gLunarManager->getHuangLiShortName(date); qCDebug(ClientLogger) << "Added lunar calendar info to date:" << name; } return name; } /** * @brief CMyScheduleView::slotBtClick 按钮点击事件 * @param buttonIndex * @param buttonName */ void CMyScheduleView::slotBtClick(int buttonIndex, const QString &buttonName) { qCDebug(ClientLogger) << "Button clicked: index=" << buttonIndex << "name=" << buttonName; Q_UNUSED(buttonName); if (buttonIndex == 0) { qCDebug(ClientLogger) << "Delete button clicked for schedule:" << m_scheduleInfo->summary(); //删除日程 if (CScheduleOperation(m_scheduleInfo->scheduleTypeID(), this).deleteSchedule(m_scheduleInfo)) { qCDebug(ClientLogger) << "Schedule deleted successfully"; accept(); } else { qCWarning(ClientLogger) << "Failed to delete schedule"; } return; } if (buttonIndex == 1) { qCDebug(ClientLogger) << "Edit button clicked for schedule:" << m_scheduleInfo->summary(); //编辑日程 CScheduleDlg dlg(0, this); dlg.setData(m_scheduleInfo); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "Schedule edited successfully"; accept(); } else { qCDebug(ClientLogger) << "Schedule edit cancelled"; close(); } return; } } /** * @brief CMyScheduleView::initUI 界é�¢åˆ�始化 */ void CMyScheduleView::initUI() { qCDebug(ClientLogger) << "Initializing UI for schedule view"; //在点击任何对è¯�框上的按钮å�Žä¸�关闭对è¯�框,ä¿�è¯�关闭å­�窗å�£æ—¶ä¸�被一起关掉 setOnButtonClickedClose(false); m_Title = new QLabel(this); m_Title->setFixedSize(220, 51); m_Title->setAlignment(Qt::AlignCenter); DFontSizeManager::instance()->bind(m_Title, DFontSizeManager::T5, QFont::DemiBold); //设置日期图标 QIcon t_icon(CDynamicIcon::getInstance()->getPixmap()); setIcon(t_icon); m_Title->setText(tr("My Event")); m_Title->move(90, 0); // center x: (400-220)/2 QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setContentsMargins(0, 0, 0, 0); mainLayout->setSpacing(0); area = new QScrollArea(this); //设置日程显示区域ä¸�能选中 area->setFocusPolicy(Qt::FocusPolicy::NoFocus); area->setFrameShape(QFrame::NoFrame); area->setFixedWidth(363); area->setBackgroundRole(QPalette::Window); area->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); area->setWidgetResizable(true); area->setAlignment(Qt::AlignCenter); m_scheduleLabel = new QLabel(this); m_scheduleLabel->setTextFormat(Qt::PlainText); //纯文本格å¼� m_scheduleLabel->installEventFilter(this); m_scheduleLabel->setFixedWidth(330); m_scheduleLabel->setAlignment(Qt::AlignCenter); DFontSizeManager::instance()->bind(m_scheduleLabel, DFontSizeManager::T6); labelF.setWeight(QFont::Medium); m_scheduleLabel->setFont(labelF); area->setWidget(m_scheduleLabel); mainLayout->addWidget(area); m_timeLabel = new DLabel(this); m_timeLabel->setFixedHeight(26); m_timeLabel->setAlignment(Qt::AlignCenter); QFont timeFont; timeFont.setWeight(QFont::Normal); m_timeLabel->setFont(timeFont); m_timeLabel->setFixedWidth(363); mainLayout->addSpacing(5); mainLayout->addWidget(m_timeLabel); //如果为节å�‡æ—¥æ—¥ç¨‹ if (CScheduleOperation::isFestival(m_scheduleInfo)) { qCDebug(ClientLogger) << "Adding OK button for festival schedule"; addButton(tr("OK", "button"), false, DDialog::ButtonNormal); QAbstractButton *button_ok = getButton(0); button_ok->setFixedSize(380, 36); } else { qCDebug(ClientLogger) << "Adding Delete and Edit buttons for regular schedule"; addButton(tr("Delete", "button"), false, DDialog::ButtonNormal); addButton(tr("Edit", "button"), false, DDialog::ButtonRecommend); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); button->setFixedSize(165, 36); } //TODO:如果为ä¸�å�¯ä¿®æ”¹æ—¥ç¨‹åˆ™è®¾ç½®åˆ é™¤æŒ‰é’®æ— æ•ˆ } //è¿™ç§�中心铺满的weiget,显示日程标题和时间的控件 DWidget *centerWidget = new DWidget(this); centerWidget->setLayout(mainLayout); //获å�–widget的调色æ�¿ DPalette centerWidgetPalette = centerWidget->palette(); //设置背景色为é€�明 centerWidgetPalette.setColor(DPalette::Window, Qt::transparent); centerWidget->setPalette(centerWidgetPalette); //添加窗å�£ä¸ºå‰§ä¸­å¯¹é½� addContent(centerWidget, Qt::AlignCenter); qCDebug(ClientLogger) << "UI initialization complete"; } void CMyScheduleView::initConnection() { qCDebug(ClientLogger) << "Initializing connections for schedule view"; //å…³è�”主题改å�˜äº‹ä»¶ QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &CMyScheduleView::setLabelTextColor); //如果为节å�‡æ—¥æ—¥ç¨‹ if (CScheduleOperation::isFestival(m_scheduleInfo)) { qCDebug(ClientLogger) << "Adding close button for festival schedule"; connect(this, &DDialog::buttonClicked, this, &CMyScheduleView::close); } else { qCDebug(ClientLogger) << "Adding delete and edit buttons for regular schedule"; connect(this, &DDialog::buttonClicked, this, &CMyScheduleView::slotBtClick); } QObject::connect(qGuiApp, &DApplication::fontChanged, this, &CMyScheduleView::slotAutoFeed); QShortcut *shortcut = new QShortcut(this); shortcut->setKey(QKeySequence(QLatin1String("ESC"))); connect(shortcut, SIGNAL(activated()), this, SLOT(close())); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CMyScheduleView::slotAccountStateChange); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/myscheduleview.h000066400000000000000000000036661523260663500300510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MYSCHEDULEVIEW_H #define MYSCHEDULEVIEW_H #include "dschedule.h" #include "dcalendarddialog.h" #include #include #include #include #include #include DWIDGET_USE_NAMESPACE /** * @brief The CMyScheduleView class * 日程概括对è¯�框 */ class CMyScheduleView : public DCalendarDDialog { Q_OBJECT public: explicit CMyScheduleView(const DSchedule::Ptr &schduleInfo, QWidget *parent = nullptr); DSchedule::Ptr getSchedules() { return m_scheduleInfo; } void setSchedules(const DSchedule::Ptr &schduleInfo); void updateFormat(); signals: void signalsEditorDelete(int type = 0); public slots: //按钮点击事件 void slotBtClick(int buttonIndex, const QString &buttonName); void slotAutoFeed(const QFont &font = QFont()); //å¸�户状æ€�æ›´æ–° void slotAccountStateChange(); private: //界é�¢åˆ�始化 void initUI(); void initConnection(); //设置label文字颜色 void setLabelTextColor(const int type); //设置调色æ�¿é¢œè‰² void setPaletteTextColor(QWidget *widget, QColor textColor); protected: void updateDateTimeFormat() override; private: /** * @brief getDataByFormat * 获å�–æ ¼å¼�化å�Žçš„事件字符串 * @param format æ ¼å¼�化规则 * @return æ ¼å¼�化å�Žçš„字符串 */ QString getDataByFormat(const QDate &, QString format); private: QLabel *m_scheduleLabel = nullptr; QLabel *m_timeLabel = nullptr; QLabel *m_Title = nullptr; DSchedule::Ptr m_scheduleInfo; //日程 QScrollArea *area = nullptr; QFont labelF; int m_defaultH = 117; //时间显示高度 int m_timeLabelH = 0; //时间显示高度 int m_scheduleLabelH = 0; //日程详情显示高度 }; #endif // MYSCHEDULEVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/schedulectrldlg.cpp000066400000000000000000000202511523260663500305040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulectrldlg.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "cdynamicicon.h" #include "constants.h" #include "commondef.h" #include #include #include #include #include #include DGUI_USE_NAMESPACE CScheduleCtrlDlg::CScheduleCtrlDlg(QWidget *parent) : DCalendarDDialog(parent) { qCDebug(ClientLogger) << "CScheduleCtrlDlg constructor"; setContentsMargins(0, 0, 0, 0); initUI(); initConnection(); setTheMe(DGuiApplicationHelper::instance()->themeType()); resize(380, 260); } void CScheduleCtrlDlg::initUI() { qCDebug(ClientLogger) << "Initializing UI for schedule control dialog"; //在点击任何对è¯�框上的按钮å�Žä¸�关闭对è¯�框,ä¿�è¯�关闭å­�窗å�£æ—¶ä¸�被一起关掉 setOnButtonClickedClose(false); QIcon t_icon(CDynamicIcon::getInstance()->getPixmap());// = QIcon::fromTheme("dde-calendar"); setIcon(t_icon); m_mainBoxLayout = new QVBoxLayout(); m_mainBoxLayout->setContentsMargins(0, 0, 0, 0); m_mainBoxLayout->setSpacing(0); m_firstLabel = new QLabel(); m_firstLabel->setAlignment(Qt::AlignCenter); m_firstLabel->setFixedWidth(350); m_firstLabel->setWordWrap(true); labelF.setWeight(QFont::DemiBold); DFontSizeManager::instance()->bind(m_firstLabel, DFontSizeManager::T6); m_firstLabel->setForegroundRole(DPalette::WindowText); m_firstLabel->setFont(labelF); m_mainBoxLayout->addWidget(m_firstLabel); m_seconLabel = new QLabel(); m_seconLabel->setFixedWidth(350); m_seconLabel->setAlignment(Qt::AlignCenter); DFontSizeManager::instance()->bind(m_seconLabel, DFontSizeManager::T6); m_seconLabel->setForegroundRole(DPalette::WindowText); //设置字é‡� labelT.setWeight(QFont::Normal); m_seconLabel->setFont(labelT); m_seconLabel->setWordWrap(true); m_mainBoxLayout->addSpacing(3); m_mainBoxLayout->addWidget(m_seconLabel); gwi = new DFrame(this); gwi->setContentsMargins(0, 0, 0, 0); gwi->setLayout(m_mainBoxLayout); DPalette anipa = gwi->palette(); QColor color = "#F8F8F8"; color.setAlphaF(0.0); anipa.setColor(DPalette::Window, color); gwi->setAutoFillBackground(true); gwi->setPalette(anipa); gwi->setBackgroundRole(DPalette::Window); addContent(gwi, Qt::AlignCenter); qCDebug(ClientLogger) << "UI initialization complete"; } void CScheduleCtrlDlg::initConnection() { qCDebug(ClientLogger) << "Initializing connections for schedule control dialog"; //å…³è�”主题信å�· QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &CScheduleCtrlDlg::setTheMe); connect(this, &DDialog::buttonClicked, this, &CScheduleCtrlDlg::buttonJudge); //连接信å�·å’Œæ§½ } void CScheduleCtrlDlg::setTheMe(const int type) { qCDebug(ClientLogger) << "Setting theme for schedule control dialog with type:" << type; //标题文字颜色 QColor titleColor; //æ��示内容文字颜色 QColor contentColor; if (type == 2) { titleColor = "#FFFFFF"; titleColor.setAlphaF(0.9); contentColor = "#FFFFFF"; contentColor.setAlphaF(0.7); qCDebug(ClientLogger) << "Using dark theme colors"; } else { titleColor = "#000000"; titleColor.setAlphaF(0.9); contentColor = "#000000"; contentColor.setAlphaF(0.7); qCDebug(ClientLogger) << "Using light theme colors"; } setPaletteTextColor(m_firstLabel, titleColor); setPaletteTextColor(m_seconLabel, contentColor); } void CScheduleCtrlDlg::setPaletteTextColor(QWidget *widget, QColor textColor) { qCDebug(ClientLogger) << "Setting palette text color:" << textColor.name(); //如果为空指针则退出 if (nullptr == widget) { qCWarning(ClientLogger) << "Widget is null, cannot set palette color"; return; } DPalette palette = widget->palette(); //设置文字显示颜色 palette.setColor(DPalette::WindowText, textColor); widget->setPalette(palette); } void CScheduleCtrlDlg::changeEvent(QEvent *event) { qCDebug(ClientLogger) << "Change event with type:" << event->type(); Q_UNUSED(event) QFont font; QFontMetrics font_button(font); QFontMetrics font_firstLabel(font); QFontMetrics font_seconLabel(font); int height_firstLabel = (font_firstLabel.horizontalAdvance(m_firstLabel->text()) / 300 + 1) * font_firstLabel.height(); int height_seconLabel = (font_seconLabel.horizontalAdvance(m_seconLabel->text()) / 300 + 1) * font_seconLabel.height(); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); QString str = str_btName.at(i); QString text_button = font_button.elidedText(str, Qt::ElideRight, 112); if (str.count() == 2) { button->setText(QString().append(str.at(0)).append(QChar::Nbsp).append(str.at(1))); } else { button->setText(text_button); } } // 在changeEvent里使用setFixedHeight会导致弹出的确认对è¯�框会显示在左上角 // 推测是窗å�£çš„问题, 先通过延迟在应用层临时解决 QTimer::singleShot(10, this, [this, height_firstLabel, height_seconLabel]{ qCDebug(ClientLogger) << "Adjusting dialog height to:" << (36 + 48 + height_firstLabel + height_seconLabel + 30); setFixedHeight(36 + 48 + height_firstLabel + height_seconLabel + 30); gwi->setFixedHeight(height_firstLabel + height_seconLabel); }); } void CScheduleCtrlDlg::buttonJudge(int id) { qCDebug(ClientLogger) << "Button clicked with id:" << id; m_id = id; accept(); } QAbstractButton *CScheduleCtrlDlg::addPushButton(QString btName, bool type) { qCDebug(ClientLogger) << "Adding push button:" << btName << "with type:" << type; addButton(btName, false, DDialog::ButtonNormal); int button_index = getButtonIndexByText(btName); QAbstractButton *button = getButton(button_index); if (type) { button->setFixedHeight(36); button->setFixedWidth(165); } else { button->setFixedHeight(36); button->setFixedWidth(129); } button->setToolTip(btName); str_btName.append(btName); return button; } QAbstractButton *CScheduleCtrlDlg::addsuggestButton(QString btName, bool type) { qCDebug(ClientLogger) << "Adding suggest button:" << btName << "with type:" << type; addButton(btName, false, DDialog::ButtonRecommend); int button_index = getButtonIndexByText(btName); QAbstractButton *suggestButton = getButton(button_index); if (type) { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(165); } else { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(129); } suggestButton->setToolTip(btName); str_btName.append(btName); return suggestButton; } QAbstractButton *CScheduleCtrlDlg::addWaringButton(QString btName, bool type) { qCDebug(ClientLogger) << "Adding warning button:" << btName << "with type:" << type; addButton(btName, false, DDialog::ButtonWarning); int button_index = getButtonIndexByText(btName); QAbstractButton *suggestButton = getButton(button_index); if (type) { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(165); } else { suggestButton->setFixedHeight(36); suggestButton->setFixedWidth(129); } suggestButton->setToolTip(btName); str_btName.append(btName); return suggestButton; } void CScheduleCtrlDlg::setText(QString str) { qCDebug(ClientLogger) << "Setting text:" << str; m_firstLabel->setText(str); m_firstLabel->setToolTip(str); } void CScheduleCtrlDlg::setInformativeText(QString str) { qCDebug(ClientLogger) << "Setting informative text:" << str; m_seconLabel->setText(str); m_seconLabel->setToolTip(str); } int CScheduleCtrlDlg::clickButton() { qCDebug(ClientLogger) << "Getting clicked button id:" << m_id; if (m_id < 0 || m_id > buttonCount() - 1) return buttonCount(); return m_id; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/schedulectrldlg.h000066400000000000000000000031711523260663500301530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULECTRLDLG_H #define CSCHEDULECTRLDLG_H #include "dcalendarddialog.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CScheduleCtrlDlg : public DCalendarDDialog { Q_OBJECT public: explicit CScheduleCtrlDlg(QWidget *parent = nullptr); QAbstractButton *addPushButton(QString btName, bool type = false); QAbstractButton *addsuggestButton(QString btName, bool type = false); QAbstractButton *addWaringButton(QString btName, bool type = false); void setText(QString str); void setInformativeText(QString str); int clickButton(); private: void initUI(); void initConnection(); /** * @brief setTheMe æ ¹æ�®ä¸»é¢˜type设置颜色 * @param type 主题type */ void setTheMe(const int type); /** * @brief setPaletteTextColor 设置调色æ�¿é¢œè‰² * @param widget 需è¦�设置的widget * @param textColor 显示颜色 */ void setPaletteTextColor(QWidget *widget, QColor textColor); protected: void changeEvent(QEvent *event) override; private slots: void buttonJudge(int id); private: QLabel *m_firstLabel = nullptr; QLabel *m_seconLabel = nullptr; int m_id = -1; QVBoxLayout *m_mainBoxLayout = nullptr; DFrame *gwi = nullptr; QFont labelF; QFont labelT; QVector str_btName; }; #endif // CSCHEDULECTRLDLG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/scheduledlg.cpp000066400000000000000000002173451523260663500276330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduledlg.h" #include "schedulectrldlg.h" #include "scheduledatamanage.h" #include "timeedit.h" #include "constants.h" #include "cscheduleoperation.h" #include "cdynamicicon.h" #include "configsettings.h" #include "accountmanager.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include const int dialog_width = 468; //对è¯�框宽度 DGUI_USE_NAMESPACE CScheduleDlg::CScheduleDlg(int type, QWidget *parent, const bool isAllDay) : DCalendarDDialog(parent) , m_createAllDay(isAllDay) { qCDebug(ClientLogger) << "CScheduleDlg::CScheduleDlg, type:" << type << "isAllDay:" << isAllDay; setContentsMargins(0, 0, 0, 0); m_type = type; initUI(); initConnection(); setTabFouseOrder(); slotAccountUpdate(); if (type == 1) { qCDebug(ClientLogger) << "Setting up new event dialog"; m_titleLabel->setText(tr("New Event")); m_beginDateEdit->setDate(QDate::currentDate()); int hours = QTime::currentTime().hour(); int minnutes = QTime::currentTime().minute() % DDECalendar::QuarterOfAnhourWithMinute; if (minnutes != 0) { minnutes = QTime::currentTime().minute() / DDECalendar::QuarterOfAnhourWithMinute * DDECalendar::QuarterOfAnhourWithMinute + DDECalendar::QuarterOfAnhourWithMinute; } m_beginTimeEdit->setTime(QTime(hours, minnutes)); m_endDateEdit->setDate(QDate::currentDate()); m_endTimeEdit->setTime(QTime(hours, minnutes).addSecs(3600)); } else { qCDebug(ClientLogger) << "Setting up edit event dialog"; m_titleLabel->setText(tr("Edit Event")); } setFixedSize(dialog_width, 561); if (!gAccountManager->getIsSupportUid()) { qCDebug(ClientLogger) << "UID not supported, adjusting dialog size"; setFixedSize(dialog_width, 561 - 36); } //焦点设置到输入框 m_textEdit->setFocus(); } CScheduleDlg::~CScheduleDlg() { qCDebug(ClientLogger) << "CScheduleDlg::~CScheduleDlg"; } void CScheduleDlg::setData(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "Setting schedule data for editing:" << (info ? info->summary() : "null"); m_scheduleDataInfo = info; if (m_type == 1) { //如果为新建则设置为æ��示信æ�¯ m_textEdit->setPlaceholderText(info->summary()); m_accountItem = gAccountManager->getLocalAccountItem(); qCDebug(ClientLogger) << "New schedule mode, using local account"; } else { //如果为编辑则显示 m_textEdit->setPlainText(info->summary()); //光标移动到文末 m_textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); m_accountItem = gAccountManager->getAccountItemByScheduleTypeId(info->scheduleTypeID()); qCDebug(ClientLogger) << "Edit mode, using account type:" << info->scheduleTypeID(); //编辑状æ€�下å¸�户ä¸�å�¯åˆ‡æ�¢ï¼Œå› æ­¤å°†å¸�户选择框置ç�° m_accountComBox->setEnabled(false); } if (nullptr != m_accountItem) { qCDebug(ClientLogger) << "Updating account and type selection for account:" << m_accountItem->getAccount()->accountName(); //æ›´æ–°å¸�户下拉框和类型选择框 m_accountComBox->setCurrentText(m_accountItem->getAccount()->accountName()); m_typeComBox->updateJobType(m_accountItem); } else { qCWarning(ClientLogger) << "No account found, falling back to local account"; m_accountItem = gAccountManager->getLocalAccountItem(); } if (m_scheduleDataInfo) { qCDebug(ClientLogger) << "Setting job type number from schedule data"; m_typeComBox->setCurrentJobTypeNo(m_scheduleDataInfo->scheduleTypeID()); } m_beginDateEdit->setDate(info->dtStart().date()); m_beginTimeEdit->setTime(info->dtStart().time()); m_endDateEdit->setDate(info->dtEnd().date()); m_endTimeEdit->setTime(info->dtEnd().time()); m_allDayCheckbox->setChecked(info->allDay()); m_endRepeatDate->setMinimumDate(info->dtStart().date()); m_currentDate = info->dtStart(); m_EndDate = info->dtEnd(); if (info->lunnar()) { qCDebug(ClientLogger) << "Setting lunar calendar mode"; m_lunarRadioBtn->click(); } else { qCDebug(ClientLogger) << "Setting solar calendar mode"; m_solarRadioBtn->click(); } updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); slotallDayStateChanged(info->allDay()); //æ ¹æ�®æ˜¯å�¦ä¸ºå†œåŽ†æ›´æ–°é‡�å¤�选项 updateRepeatCombox(info->lunnar()); initRmindRpeatUI(); setShowState(info->lunnar()); } void CScheduleDlg::setDate(const QDateTime &date) { qCDebug(ClientLogger) << "CScheduleDlg::setDate, date:" << date; m_currentDate = date; int hours = date.time().hour(); int minnutes = 0; //å�–15的整数å€� minnutes = date.time().minute() / DDECalendar::QuarterOfAnhourWithMinute * DDECalendar::QuarterOfAnhourWithMinute; //如果有余数则添加15分钟 minnutes = minnutes + (date.time().minute() % DDECalendar::QuarterOfAnhourWithMinute == 0 ? 0 : 15); if (minnutes == 60) { if (hours + 1 == 24) { qCDebug(ClientLogger) << "Minute is 60, hour is 23, rolling over to next day"; m_currentDate.setTime(QTime(0, 0)); m_currentDate = m_currentDate.addDays(1); } else { qCDebug(ClientLogger) << "Minute is 60, incrementing hour"; m_currentDate.setTime(QTime(hours + 1, 0)); } } else { m_currentDate.setTime(QTime(hours, minnutes)); } m_beginDateEdit->setDate(m_currentDate.date()); m_beginTimeEdit->setTime(m_currentDate.time()); QDateTime datetime = m_currentDate.addSecs(3600); m_EndDate = datetime; m_endDateEdit->setDate(datetime.date()); m_endTimeEdit->setTime(m_EndDate.time()); m_endRepeatDate->setMinimumDate(date.date()); updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); setShowState(false); } void CScheduleDlg::setAllDay(bool flag) { qCDebug(ClientLogger) << "CScheduleDlg::setAllDay, flag:" << flag; m_allDayCheckbox->setChecked(flag); } /** * @brief CScheduleDlg::clickOkBtn 对è¯�框确定按钮处ç�† * @return 返回true表示éš�è—�对è¯�框 false表示ä¸�éš�è—�对è¯�框 */ bool CScheduleDlg::clickOkBtn() { qCDebug(ClientLogger) << "CScheduleDlg::clickOkBtn"; return selectScheduleType(); } /** * @brief CScheduleDlg::selectScheduleType * 选择日程类型 * @return 是å�¦å�¯å…³é—­å¼¹çª— */ bool CScheduleDlg::selectScheduleType() { qCDebug(ClientLogger) << "CScheduleDlg::selectScheduleType"; //编辑状æ€�,需è¦�创建日程 if (m_typeComBox->isEditable()) { qCDebug(ClientLogger) << "Type combobox is editable, creating new schedule type"; DScheduleType::Ptr type; type.reset(new DScheduleType()); type->setTypeID("0"); type->setDisplayName(m_typeComBox->lineEdit()->text()); type->setTypeColor(*m_colorSeletorWideget->getSelectedColorInfo().data()); if (m_bCanCreateType) { m_bCanCreateType = false; //创建日程类型,等待回调 m_accountItem->createJobType(type, [&](CallMessge call) { if (call.code == 0) { qCDebug(ClientLogger) << "Successfully created job type, creating schedule with new type"; //返回值为日程类型id createSchedule(call.msg.toString()); } else { qCWarning(ClientLogger) << "Failed to create job type, error code:" << call.code; m_bCanCreateType = true; } //关闭本弹窗 this->close(); }); } } else if (m_typeComBox->currentIndex() >= 0) { qCDebug(ClientLogger) << "Type combobox is not editable, using existing schedule type"; //选择已有日程,直接创建日程 return createSchedule(m_typeComBox->getCurrentJobTypeNo()); } qCWarning(ClientLogger) << "No schedule type selected, cannot create schedule"; return false; } /** * @brief CScheduleDlg::createSchedule * 创建日程 * @param scheduleTypeId 日程所属日程类型的id * @return */ bool CScheduleDlg::createSchedule(const QString &scheduleTypeId) { qCDebug(ClientLogger) << "Creating schedule with type:" << scheduleTypeId; //创建新的日程实例 DSchedule::Ptr schedule; schedule.reset(new DSchedule()); //设置所属日程类型id schedule->setScheduleTypeID(scheduleTypeId); QDateTime beginDateTime, endDateTime; beginDateTime.setDate(m_beginDateEdit->date()); beginDateTime.setTime(m_beginTimeEdit->getTime()); endDateTime.setDate(m_endDateEdit->date()); endDateTime.setTime(m_endTimeEdit->getTime()); schedule->setDtStart(beginDateTime); schedule->setDtEnd(endDateTime); //设置是å�¦ä¸ºå†œåŽ†æ—¥ç¨‹ switch (m_calendarCategoryRadioGroup->checkedId()) { case 1: //农历日程 schedule->setLunnar(true); qCDebug(ClientLogger) << "Setting lunar calendar schedule"; break; default: //公历日程 schedule->setLunnar(false); qCDebug(ClientLogger) << "Setting solar calendar schedule"; break; } if (m_textEdit->toPlainText().isEmpty()) { qCDebug(ClientLogger) << "Using placeholder text for summary"; schedule->setSummary(m_textEdit->placeholderText()); } else { qCDebug(ClientLogger) << "Using user-entered text for summary"; schedule->setSummary(m_textEdit->toPlainText().trimmed()); } if (schedule->summary().isEmpty()) { qCWarning(ClientLogger) << "Schedule summary is empty"; return false; } if (beginDateTime > endDateTime) { qCWarning(ClientLogger) << "Invalid schedule time: end time" << endDateTime << "is before start time" << beginDateTime; DCalendarDDialog *prompt = new DCalendarDDialog(this); prompt->setIcon(QIcon(":/icons/deepin/builtin/icons/dde_calendar_warning.svg")); prompt->setMessage(tr("End time must be greater than start time")); prompt->addButton(tr("OK", "button"), true, DDialog::ButtonNormal); prompt->exec(); return false; } schedule->setAllDay(m_allDayCheckbox->isChecked()); //设置æ��醒规则 DSchedule::AlarmType alarmType; if (schedule->allDay()) { alarmType = static_cast(m_rmindCombox->currentIndex() + 8); } else { alarmType = static_cast(m_rmindCombox->currentIndex()); } schedule->setAlarmType(alarmType); qCDebug(ClientLogger) << "Setting alarm type:" << alarmType; //设置é‡�å¤�规则 DSchedule::RRuleType rruleType; if (schedule->lunnar()) { //0:从ä¸� 1:æ¯�月 2:æ¯�å¹´ if (m_beginrepeatCombox->currentIndex() == 1) { rruleType = DSchedule::RRule_Month; } else if (m_beginrepeatCombox->currentIndex() == 2) { rruleType = DSchedule::RRule_Year; } else { rruleType = DSchedule::RRule_None; } } else { //0:从ä¸� 1:æ¯�天 2:æ¯�个工作日 3:æ¯�周 4:æ¯�月 5:æ¯�å¹´ rruleType = static_cast(m_beginrepeatCombox->currentIndex()); } schedule->setRRuleType(rruleType); qCDebug(ClientLogger) << "Setting repeat rule type:" << rruleType; if (m_endrepeatCombox->currentIndex() == 1) { //结æ�Ÿä¸Žæ¬¡æ•° if (m_endrepeattimes->text().isEmpty()) { qCWarning(ClientLogger) << "Repeat count is empty"; return false; } schedule->recurrence()->setDuration(m_endrepeattimes->text().toInt() + 1); } else if (m_endrepeatCombox->currentIndex() == 2) { //结æ�Ÿä¸Žæ—¥æœŸ QDateTime endrpeattime = beginDateTime; endrpeattime.setDate(m_endRepeatDate->date()); if (beginDateTime > endrpeattime) { qCWarning(ClientLogger) << "Invalid repeat end date:" << endrpeattime << "is before start time" << beginDateTime; return false; } schedule->recurrence()->setDuration(0); schedule->recurrence()->setEndDateTime(endrpeattime); qCDebug(ClientLogger) << "Setting repeat end date:" << endrpeattime; } else { //æ°¸ä¸� schedule->recurrence()->setDuration(-1); qCDebug(ClientLogger) << "Setting infinite repeat"; } CScheduleOperation _scheduleOperation(m_accountItem, this); bool res = false; if (m_type == 1) { //创建日程 schedule->setUid("0"); qCDebug(ClientLogger) << "Creating new schedule:" << schedule->summary(); res = _scheduleOperation.createSchedule(schedule); } else if (m_type == 0) { schedule->setUid(m_scheduleDataInfo->uid()); qCDebug(ClientLogger) << "Updating existing schedule:" << schedule->summary(); //如果有é‡�å¤�规则则将原æ�¥æ•°æ�®çš„忽略列表添加进æ�¥ if (schedule->recurs() && m_scheduleDataInfo->recurs()) { qCDebug(ClientLogger) << "Copying exDates from old schedule"; schedule->recurrence()->setExDateTimes(m_scheduleDataInfo->recurrence()->exDateTimes()); } res = _scheduleOperation.changeSchedule(schedule, m_scheduleDataInfo); } return res; } void CScheduleDlg::updateEndTimeListAndTimeDiff(const QDateTime &begin, const QDateTime &end) { qCDebug(ClientLogger) << "CScheduleDlg::updateEndTimeListAndTimeDiff, begin:" << begin << "end:" << end; //更新是å�¦è¶…过一天标识 updateIsOneMoreDay(begin, end); m_timeDiff = begin.msecsTo(end); updateEndTimeList(begin.time(), !m_isMoreThenOneDay); m_endTimeEdit->setTime(end.time()); m_endTimeEdit->setCurrentText(m_endTimeEdit->lineEdit()->text()); } void CScheduleDlg::updateEndTimeList(const QTime &begin, bool isShowTimeInterval) { qCDebug(ClientLogger) << "CScheduleDlg::updateEndTimeList, begin time:" << begin << "show interval:" << isShowTimeInterval; m_endTimeEdit->setMineTime(begin); m_endTimeEdit->updateListItem(isShowTimeInterval); } void CScheduleDlg::slotBeginTimeChange() { qCDebug(ClientLogger) << "CScheduleDlg::slotBeginTimeChange"; if (m_currentDate.time() == m_beginTimeEdit->getTime()) { qCDebug(ClientLogger) << "Begin time not changed, returning"; return; } //æ ¹æ�®è�”动修改结æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表内容和结æ�Ÿæ—¶é—´ m_currentDate.setTime(m_beginTimeEdit->getTime()); m_EndDate = m_currentDate.addMSecs(m_timeDiff); //开始时间改å�˜éœ€è¦�更新是å�¦è¶…过一天标识,根æ�®è¯¥æ ‡è¯†åˆ¤æ–­ç»“æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表是å�¦å±•示(xxx:xxx hours) //由于结æ�Ÿæ—¶é—´ï¼ˆendTimeEdit)自己ä¸�å�‚加è�”动,所以该标识需è¦�在开始时间中更新 updateIsOneMoreDay(m_currentDate, m_EndDate); updateEndTimeList(m_currentDate.time(), !m_isMoreThenOneDay); m_endTimeEdit->setTime(m_EndDate.time()); m_endDateEdit->setDate(m_EndDate.date()); } void CScheduleDlg::slotEndTimeChange() { qCDebug(ClientLogger) << "CScheduleDlg::slotEndTimeChange"; if (m_EndDate.time() == m_endTimeEdit->getTime()) { qCDebug(ClientLogger) << "End time not changed, returning"; return; } m_EndDate.setTime(m_endTimeEdit->getTime()); //æ ¹æ�®ç»“æ�Ÿæ—¶é—´ä¿®æ”¹è�”动时间和结æ�Ÿæ—¥æœŸ //如果时间没有超过一天 if (!m_isMoreThenOneDay) { //如果时间å°�于一天则需è¦�æ ¹æ�®ç»“æ�Ÿæ—¶é—´ï¼ˆtime)是å�¦å¤§äºŽå¼€å§‹æ—¶é—´åˆ¤æ–­è®¡ç®—结æ�Ÿæ—¥æœŸ QTime endTime = m_endTimeEdit->getTime(); if (endTime < m_currentDate.time()) { qCDebug(ClientLogger) << "End time is earlier than start time, setting end date to next day"; m_EndDate.setDate(m_currentDate.date().addDays(1)); } else { qCDebug(ClientLogger) << "End time is on the same day as start time"; m_EndDate.setDate(m_currentDate.date()); } m_endDateEdit->setDate(m_EndDate.date()); } m_timeDiff = m_currentDate.msecsTo(m_EndDate); } void CScheduleDlg::slotEndDateChange(const QDate &date) { qCDebug(ClientLogger) << "CScheduleDlg::slotEndDateChange, date:" << date; if (m_EndDate.date() == date) { qCDebug(ClientLogger) << "End date not changed, returning"; return; } //修改è�”动时间和结æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表内容 m_EndDate.setDate(date); // 如果开始时间晚于结æ�Ÿæ—¶é—´ï¼Œåˆ™å°†ç»“æ�Ÿæ—¶é—´ä¿®æ”¹ä¸ºå¼€å§‹æ—¶é—´ if (m_currentDate.msecsTo(m_EndDate) < 0) { qCDebug(ClientLogger) << "End date is before start date, adjusting end datetime"; m_EndDate = m_currentDate; } updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); } void CScheduleDlg::slotBtClick(int buttonIndex, const QString &buttonName) { qCDebug(ClientLogger) << "CScheduleDlg::slotBtClick, buttonIndex:" << buttonIndex << "buttonName:" << buttonName; Q_UNUSED(buttonName) //是å�¦éš�è—�对è¯�框 switch (buttonIndex) { case 0: { //å�–消 qCDebug(ClientLogger) << "Cancel button clicked"; close(); break; } case 1: { //确定 //自动化测试会出现短时间内按钮click2次的情况。添加第一次触å�‘å�Žå°†ä¿�存按钮置ç�°çš„设置。 //è‹¥ä¿�存按钮ä¸�å�¯ç”¨åˆ™ä¸�处ç�† if (getButton(1)->isEnabled() && !this->isHidden()) { qCDebug(ClientLogger) << "OK button clicked"; m_setAccept = clickOkBtn(); //若新建或编辑æˆ�功则将ä¿�存按钮置ç�° getButton(1)->setEnabled(!m_setAccept); //如果确定创建(修改)æˆ�功则关闭对è¯�框 if (m_setAccept) { qCDebug(ClientLogger) << "Schedule saved successfully, closing dialog"; close(); } else { qCDebug(ClientLogger) << "Schedule save failed, keeping dialog open"; setFocusProxy(getButton(1)); } } break; } default: break; } } void CScheduleDlg::slotTextChange() { qCDebug(ClientLogger) << "Text content changed"; QString textContent = m_textEdit->toPlainText(); int length = textContent.count(); QString tStitlename = textContent; int maxLength = 256; // 最大字符数 //去除回车字符 if (tStitlename.contains("\n")) { qCDebug(ClientLogger) << "Removing newline characters from text"; //设置纯文本显示原始内容 tStitlename.replace("\n", ""); m_textEdit->setPlainText(tStitlename); //将焦点移动到最å�Ž m_textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); //因设置text会å†�次触å�‘textchangeä¿¡å�·,在此直接return return; } //如果长度大于最大长度则显示原æ�¥çš„字符 if (length > maxLength) { qCWarning(ClientLogger) << "Text exceeds maximum length:" << length << ">" << maxLength; m_textEdit->setPlainText(m_context); //将焦点移动到最å�Ž m_textEdit->moveCursor(QTextCursor::End, QTextCursor::MoveAnchor); return; } setOkBtnEnabled(); m_context = m_textEdit->toPlainText().trimmed(); } void CScheduleDlg::slotendrepeatTextchange() { qCDebug(ClientLogger) << "Repeat end text changed"; setOkBtnEnabled(); } void CScheduleDlg::slotBDateEidtInfo(const QDate &date) { qCDebug(ClientLogger) << "Begin date changed to:" << date; m_endRepeatDate->setMinimumDate(date); m_endDateEdit->setMinimumDate(date); m_currentDate.setDate(m_beginDateEdit->date()); m_EndDate.setDate(m_endDateEdit->date()); if (m_EndDate < m_currentDate) { qCDebug(ClientLogger) << "End date < begin date, adjusting end time"; m_endTimeEdit->setTime(m_beginTimeEdit->getTime().addSecs(3600)); m_EndDate.setTime(m_endTimeEdit->getTime()); } //修改è�”动时间和结æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表内容 updateEndTimeListAndTimeDiff(m_currentDate, m_EndDate); } void CScheduleDlg::slotallDayStateChanged(int state) { qCDebug(ClientLogger) << "All day state changed to:" << state; m_rmindCombox->clear(); if (!state) { qCDebug(ClientLogger) << "Setting up time-specific reminder options"; m_rmindCombox->addItem(tr("Never")); m_rmindCombox->addItem(tr("At time of event")); m_rmindCombox->addItem(tr("15 minutes before")); m_rmindCombox->addItem(tr("30 minutes before")); m_rmindCombox->addItem(tr("1 hour before")); m_rmindCombox->addItem(tr("1 day before")); m_rmindCombox->addItem(tr("2 days before")); m_rmindCombox->addItem(tr("1 week before")); m_rmindCombox->setCurrentIndex(2); m_beginTimeEdit->setVisible(true); m_endTimeEdit->setVisible(true); if (m_type == 0) { qCDebug(ClientLogger) << "Restoring edit mode time values"; m_beginDateEdit->setDate(m_scheduleDataInfo->dtStart().date()); m_beginTimeEdit->setTime(m_scheduleDataInfo->dtStart().time()); m_endDateEdit->setDate(m_scheduleDataInfo->dtEnd().date()); m_endTimeEdit->setTime(m_scheduleDataInfo->dtEnd().time()); if (m_scheduleDataInfo->dtStart().time() == m_scheduleDataInfo->dtEnd().time() && m_scheduleDataInfo->dtEnd().time().toString() == "00:00:00") { qCDebug(ClientLogger) << "Adjusting end time to end of day for zero time"; m_endTimeEdit->setTime(QTime(23, 59, 59)); } } else { qCDebug(ClientLogger) << "Setting new mode time values"; m_beginDateEdit->setDate(m_currentDate.date()); m_beginTimeEdit->setTime(m_currentDate.time()); m_endDateEdit->setDate(m_EndDate.date()); m_endTimeEdit->setTime(m_EndDate.time()); } } else { qCDebug(ClientLogger) << "Setting up all-day reminder options"; m_rmindCombox->addItem(tr("Never")); m_rmindCombox->addItem(tr("On start day (9:00 AM)")); m_rmindCombox->addItem(tr("1 day before")); m_rmindCombox->addItem(tr("2 days before")); m_rmindCombox->addItem(tr("1 week before")); m_rmindCombox->setCurrentIndex(2); m_beginTimeEdit->setVisible(false); m_endTimeEdit->setVisible(false); if (m_type == 0) { qCDebug(ClientLogger) << "Setting edit mode all-day time values"; m_beginDateEdit->setDate(m_scheduleDataInfo->dtStart().date()); m_beginTimeEdit->setTime(QTime(0, 0)); m_endDateEdit->setDate(m_scheduleDataInfo->dtEnd().date()); m_endTimeEdit->setTime(QTime(23, 59)); } else { qCDebug(ClientLogger) << "Setting new mode all-day time values"; m_beginDateEdit->setDate(m_currentDate.date()); m_endDateEdit->setDate(m_EndDate.date()); m_beginTimeEdit->setTime(QTime(0, 0)); m_endTimeEdit->setTime(QTime(23, 59)); } } } void CScheduleDlg::slotbRpeatactivated(int index) { qCDebug(ClientLogger) << "Begin repeat activated with index:" << index; if (index > 0) { qCDebug(ClientLogger) << "Showing end repeat widget for repeat mode"; m_endrepeatWidget->setVisible(true); } else { qCDebug(ClientLogger) << "Hiding end repeat widget for no-repeat mode"; m_endrepeatWidget->setVisible(false); } //ä¸�论é‡�å¤�日程选哪ç§�模å¼�,结æ�Ÿé‡�å¤�都是从ä¸� m_endrepeatCombox->setCurrentIndex(0); sloteRpeatactivated(0); setOkBtnEnabled(); resize(); } void CScheduleDlg::sloteRpeatactivated(int index) { qCDebug(ClientLogger) << "End repeat activated with index:" << index; if (index == 0) { qCDebug(ClientLogger) << "Hiding repeat time settings for never-end mode"; m_endrepeattimesWidget->setVisible(false); m_endRepeatDate->setVisible(false); } else if (index == 1) { qCDebug(ClientLogger) << "Showing repeat count settings for count-based end mode"; m_endrepeattimesWidget->setVisible(true); m_endRepeatDate->setVisible(false); QFont mlabelF; mlabelF.setWeight(QFont::Medium); QFontMetrics fontWidth_endrepeattimesLabel(mlabelF); QString endrepeattimesStr = fontWidth_endrepeattimesLabel.elidedText(tr("time(s)"), Qt::ElideRight, m_endrepeattimesLabel->width()); m_endrepeattimesLabel->setText(endrepeattimesStr); } else { qCDebug(ClientLogger) << "Showing date picker for date-based end mode"; m_endrepeattimesWidget->setVisible(false); m_endRepeatDate->setVisible(true); m_endRepeatDate->setEditCursorPos(0); } setOkBtnEnabled(); } void CScheduleDlg::slotJobComboBoxEditingFinished() { qCDebug(ClientLogger) << "Job combo box editing finished"; if (m_typeComBox->lineEdit()->text().isEmpty()) { //å��称为空 qCDebug(ClientLogger) << "Empty job name, showing alert"; m_typeComBox->showAlertMessage(tr("Enter a name please")); m_typeComBox->setAlert(true); } } void CScheduleDlg::slotAccoutBoxActivated(const QString &text) { qCDebug(ClientLogger) << "Account selected:" << text; m_accountItem = gAccountManager->getAccountItemByAccountName(text); m_typeComBox->updateJobType(m_accountItem); resetColor(m_accountItem); getButtons()[1]->setEnabled(true); //将焦点转移到类型选择框上 m_typeComBox->setFocus(); setShowState(m_lunarRadioBtn->isChecked()); } void CScheduleDlg::signalLogout(DAccount::Type type) { if (DAccount::Account_UnionID == type && gUosAccountItem == m_accountItem) { if (m_type) { qCInfo(ClientLogger) << "Account" << m_accountComBox->currentText() << "logged out"; getButtons()[1]->setEnabled(false); m_accountItem.reset(nullptr); } else { qCDebug(ClientLogger) << "Switching to new event mode after account logout"; m_accountComBox->setEnabled(true); m_type = 1; m_titleLabel->setText(tr("New Event")); } } } void CScheduleDlg::slotTypeRpeatactivated(int index) { qCDebug(ClientLogger) << "CScheduleDlg::slotTypeRpeatactivated, index:" << index; Q_UNUSED(index); if (m_typeComBox->isEditable()) { qCDebug(ClientLogger) << "Type combobox is editable, showing color selector"; m_typeComBox->setIconSize(QSize(0, 0)); m_colorSeletorWideget->show(); } else { //若下拉选择éš�è—�æ��醒消æ�¯ qCDebug(ClientLogger) << "Type combobox is not editable, hiding color selector"; m_typeComBox->hideAlertMessage(); m_typeComBox->setIconSize(QSize(16, 16)); m_typeEditStatus = false; m_colorSeletorWideget->hide(); } //设置ä¿�存按钮状æ€� setOkBtnEnabled(); resize(); } void CScheduleDlg::slotRadioBtnClicked(int btnId) { qCDebug(ClientLogger) << "CScheduleDlg::slotRadioBtnClicked, btnId:" << btnId; //与上一次选项一致ä¸�å�šé‡�置处ç�† if (m_prevCheckRadioID == btnId) { qCDebug(ClientLogger) << "Radio button not changed, returning"; return; } m_prevCheckRadioID = btnId; bool jobIsLunar = RadioLunarId == btnId; setShowState(jobIsLunar); //æ›´æ–°é‡�å¤�规则下拉显示和ä¿�存按钮的显示状æ€� updateRepeatCombox(jobIsLunar); } void CScheduleDlg::slotBtnAddItemClicked() { qCDebug(ClientLogger) << "CScheduleDlg::slotBtnAddItemClicked"; m_colorSeletorWideget->show(); m_typeEditStatus = true; //添加日程类型的时候需è¦�判断ä¿�存按钮是å�¦å�¯ç”¨ setOkBtnEnabled(); resize(); } void CScheduleDlg::slotTypeEditTextChanged(const QString &text) { qCDebug(ClientLogger) << "CScheduleDlg::slotTypeEditTextChanged, text:" << text; if (!m_typeEditStatus) { qCDebug(ClientLogger) << "Type edit not active, returning"; return; } QString tStitlename = text; //去除回车字符 if (tStitlename.contains("\n")) { qCDebug(ClientLogger) << "Removing newline from type text"; //设置纯文本显示原始内容 tStitlename.replace("\n", ""); m_typeComBox->setEditText(tStitlename); return; } //最大é™�制20个字符,超出å�Žè¿‡æ»¤æŽ‰ if (tStitlename.length() > 20) { qCWarning(ClientLogger) << "Type text exceeds max length, reverting"; m_typeComBox->setEditText(m_TypeContext); return; } else { m_TypeContext = tStitlename; } //如果内容ä¸�为空且去除空格内容为空表示为全空格 if (!tStitlename.isEmpty() && tStitlename.trimmed().isEmpty()) { qCDebug(ClientLogger) << "Type text contains only whitespace, showing alert"; //å��称为全空格,返回 m_typeComBox->showAlertMessage(tr("The name can not only contain whitespaces")); m_typeComBox->setAlert(true); } else { //如果日程类型编辑框存在焦点(没有编辑结æ�Ÿï¼‰ä¸”有警告则å�–消警告和æ��示信æ�¯ if (m_typeComBox->hasFocus() && m_typeComBox->isAlert()) { qCDebug(ClientLogger) << "Hiding type combobox alert"; m_typeComBox->hideAlertMessage(); m_typeComBox->setAlert(false); } } setOkBtnEnabled(); m_TypeContext = tStitlename; } bool CScheduleDlg::eventFilter(QObject *obj, QEvent *pEvent) { if (obj == m_textEdit) { if (pEvent->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(pEvent); if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) { return true; } if (keyEvent->key() == Qt::Key_Tab) { //如果为tab则切æ�¢åˆ°å…¨å¤©checkbox m_allDayCheckbox->setFocus(Qt::TabFocusReason); return true; } } } return DCalendarDDialog::eventFilter(obj, pEvent); } void CScheduleDlg::showEvent(QShowEvent *event) { // qCDebug(ClientLogger) << "CScheduleDlg::showEvent"; DDialog::showEvent(event); //更新窗å�£å¤§å°� resize(); } void CScheduleDlg::closeEvent(QCloseEvent *event) { // qCDebug(ClientLogger) << "CScheduleDlg::closeEvent"; DDialog::closeEvent(event); //如果为true 这设置返回值为Accepted å�¦åˆ™è®¾ç½®ä¸ºRejected if (m_setAccept) { qCDebug(ClientLogger) << "Dialog accepted"; accept(); } else { qCDebug(ClientLogger) << "Dialog rejected"; reject(); } } void CScheduleDlg::changeEvent(QEvent *event) { // qCDebug(ClientLogger) << "CScheduleDlg::changeEvent, type:" << event->type(); Q_UNUSED(event); QFont mlabelF; mlabelF.setWeight(QFont::Medium); QFontMetrics fontWidth_typeLabel(mlabelF); QString str_typelabel = fontWidth_typeLabel.elidedText(tr("Type:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_typeLabel->setText(str_typelabel); QFontMetrics fontWidth_contentlabel(mlabelF); QString str_contentlabel = fontWidth_contentlabel.elidedText(tr("Description:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_contentLabel->setText(str_contentlabel); QFontMetrics fontWidth_allDayLabel(mlabelF); QString str_allDayLabel = fontWidth_allDayLabel.elidedText(tr("All Day:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_adllDayLabel->setText(str_allDayLabel); QFontMetrics fontWidth_beginTimeLabel(mlabelF); QString str_beginTimeLabel = fontWidth_beginTimeLabel.elidedText(tr("Starts:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginTimeLabel->setText(str_beginTimeLabel); QFontMetrics fontWidth_endTimeLabel(mlabelF); QString str_endTimeLabel = fontWidth_endTimeLabel.elidedText(tr("Ends:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endTimeLabel->setText(str_endTimeLabel); QFontMetrics fontWidth_remindSetLabel(mlabelF); QString str_remindSetLabel = fontWidth_remindSetLabel.elidedText(tr("Remind Me:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_remindSetLabel->setText(str_remindSetLabel); QFontMetrics fontWidth_beginRepeatLabel(mlabelF); QString str_beginRepeatLabel = fontWidth_beginRepeatLabel.elidedText(tr("Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginrepeatLabel->setText(str_beginRepeatLabel); QFontMetrics fontWidth_endrepeatLabel(mlabelF); QString str_endrepeatLabel = fontWidth_endrepeatLabel.elidedText(tr("End Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endrepeatLabel->setText(str_endrepeatLabel); if (m_endrepeattimesWidget->isVisible()) { //如果结æ�Ÿä¸Žæ¬¡æ•°æ˜¾ç¤º,则根æ�®label大å°�设置显示内容 QFontMetrics fontWidth_endrepeattimesLabel(mlabelF); QString endrepeattimesStr = fontWidth_endrepeattimesLabel.elidedText(tr("time(s)"), Qt::ElideRight, m_endrepeattimesLabel->width()); m_endrepeattimesLabel->setText(endrepeattimesStr); } } /** * @brief CScheduleDlg::updateDateTimeFormat 更新日期显示格å¼� */ void CScheduleDlg::updateDateTimeFormat() { qCDebug(ClientLogger) << "CScheduleDlg::updateDateTimeFormat"; m_beginDateEdit->setDisplayFormat(m_dateFormat); m_endDateEdit->setDisplayFormat(m_dateFormat); m_endRepeatDate->setDisplayFormat(m_dateFormat); } void CScheduleDlg::initUI() { qCDebug(ClientLogger) << "CScheduleDlg::initUI"; const int label_Fixed_Width = 78; const int item_Fixed_Height = 36; //设置对象å��称和辅助显示å��ç§° this->setObjectName("ScheduleEditDialog"); this->setAccessibleName("ScheduleEditDialog"); //在点击任何对è¯�框上的按钮å�Žä¸�关闭对è¯�框,ä¿�è¯�关闭å­�窗å�£æ—¶ä¸�被一起关掉 setOnButtonClickedClose(false); m_titleLabel = new QLabel(this); QFont titlelabelF; titlelabelF.setWeight(QFont::DemiBold); titlelabelF.setPixelSize(17); m_titleLabel->setFixedSize(148, 51); m_titleLabel->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); m_titleLabel->move(145, 0); m_titleLabel->setFont(titlelabelF); setSpacing(0); QFont mlabelF; mlabelF.setWeight(QFont::Medium); QVBoxLayout *maintlayout = new QVBoxLayout; maintlayout->setContentsMargins(0, 0, 0, 0); maintlayout->setSpacing(10); //å¸�户 { QHBoxLayout *hlayout = new QHBoxLayout; hlayout->setSpacing(0); hlayout->setContentsMargins(0, 0, 0, 0); DLabel *aLabel = new DLabel(tr("Calendar account:")); aLabel->setToolTip(tr("Calendar account")); DFontSizeManager::instance()->bind(aLabel, DFontSizeManager::T6); aLabel->setElideMode(Qt::ElideRight); aLabel->setFont(mlabelF); aLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); aLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_accountComBox = new DComboBox(this); m_accountComBox->setFixedSize(350, item_Fixed_Height); hlayout->addWidget(aLabel); hlayout->addWidget(m_accountComBox); QWidget *widget = new QWidget; widget->setLayout(hlayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); if (!gAccountManager->getIsSupportUid()) { qCDebug(ClientLogger) << "UID not supported, hiding account widget"; widget->hide(); } } //类型 { //使用网格布局 QGridLayout *typelayout = new QGridLayout; typelayout->setSpacing(0); typelayout->setContentsMargins(0, 0, 0, 0); m_typeLabel = new QLabel(); m_typeLabel->setToolTip(tr("Type")); DFontSizeManager::instance()->bind(m_typeLabel, DFontSizeManager::T6); QFontMetrics fontWidth_typeLabel(mlabelF); QString str_typelabel = fontWidth_typeLabel.elidedText(tr("Type:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_typeLabel->setText(str_typelabel); m_typeLabel->setFont(mlabelF); m_typeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_typeLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); //m_typeComBox = new DComboBox(this); m_typeComBox = new JobTypeComboBox(this); //设置对象å��称和辅助显示å��ç§° m_typeComBox->setObjectName("ScheduleTypeCombobox"); m_typeComBox->setAccessibleName("ScheduleTypeCombobox"); m_typeComBox->setFixedSize(350, item_Fixed_Height); m_colorSeletorWideget = new ColorSeletorWidget(); m_colorSeletorWideget->hide(); typelayout->addWidget(m_typeLabel, 0, 0); typelayout->addWidget(m_typeComBox, 0, 1); typelayout->addWidget(m_colorSeletorWideget, 1, 1); //添加垂直间隔 typelayout->setVerticalSpacing(10); QWidget *widget = new QWidget; widget->setLayout(typelayout); maintlayout->addWidget(widget); } //内容 { QHBoxLayout *contentLabellayout = new QHBoxLayout; contentLabellayout->setSpacing(0); contentLabellayout->setContentsMargins(0, 0, 0, 0); m_contentLabel = new QLabel(this); DFontSizeManager::instance()->bind(m_contentLabel, DFontSizeManager::T6); QFontMetrics fontWidth_contentlabel(mlabelF); QString str_contentlabel = fontWidth_contentlabel.elidedText(tr("Description:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_contentLabel->setText(str_contentlabel); m_contentLabel->setFont(mlabelF); m_contentLabel->setToolTip(tr("Description")); m_contentLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_contentLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_textEdit = new DTextEdit(this); //设置对象å��称和辅助显示å��ç§° m_textEdit->setObjectName("ScheduleTitleEdit"); m_textEdit->setAccessibleName("ScheduleTitleEdit"); m_textEdit->setFixedSize(350, 86); m_textEdit->setAcceptRichText(false); m_textEdit->setPlaceholderText(tr("New Event")); //设置关è�”控件,用于QTextEdit控件æ�•获MouseButtonPress等事件 QWidget *mpContentWidget = m_textEdit->viewport(); //设置事件过滤器 m_textEdit->installEventFilter(this); mpContentWidget->installEventFilter(this); contentLabellayout->addWidget(m_contentLabel, 0, Qt::AlignTop); contentLabellayout->addWidget(m_textEdit); contentLabellayout->addStretch(); maintlayout->addLayout(contentLabellayout); } //全天 { QHBoxLayout *alldayLabellayout = new QHBoxLayout; alldayLabellayout->setSpacing(0); alldayLabellayout->setContentsMargins(0, 0, 0, 0); m_adllDayLabel = new QLabel(this); m_adllDayLabel->setToolTip(tr("All Day")); DFontSizeManager::instance()->bind(m_adllDayLabel, DFontSizeManager::T6); QFontMetrics fontWidth_allDayLabel(mlabelF); QString str_allDayLabel = fontWidth_allDayLabel.elidedText(tr("All Day:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_adllDayLabel->setText(str_allDayLabel); m_adllDayLabel->setFont(mlabelF); m_adllDayLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_adllDayLabel->setFixedSize(label_Fixed_Width, 25); m_allDayCheckbox = new DCheckBox(this); m_allDayCheckbox->setFixedHeight(25); //设置对象å��称和辅助显示å��ç§° m_allDayCheckbox->setObjectName("AllDayCheckBox"); m_allDayCheckbox->setAccessibleName("AllDayCheckBox"); alldayLabellayout->addWidget(m_adllDayLabel); alldayLabellayout->addWidget(m_allDayCheckbox); QWidget *widget = new QWidget; widget->setLayout(alldayLabellayout); widget->setFixedHeight(25); maintlayout->addWidget(widget); } //æ—¶é—´ { DLabel *tLabel = new DLabel(tr("Time:")); tLabel->setToolTip(tr("Time")); DFontSizeManager::instance()->bind(tLabel, DFontSizeManager::T6); tLabel->setElideMode(Qt::ElideRight); tLabel->setFont(mlabelF); tLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); tLabel->setFixedSize(DDECalendar::NewScheduleLabelWidth, 25); m_solarRadioBtn = new DRadioButton(tr("Solar")); m_lunarRadioBtn = new DRadioButton(tr("Lunar")); m_solarRadioBtn->setMinimumWidth(72); m_lunarRadioBtn->setMinimumWidth(72); m_solarRadioBtn->setFixedHeight(25); m_lunarRadioBtn->setFixedHeight(25); m_calendarCategoryRadioGroup = new QButtonGroup(this); m_calendarCategoryRadioGroup->setExclusive(true); m_calendarCategoryRadioGroup->addButton(m_solarRadioBtn, RadioSolarId); m_calendarCategoryRadioGroup->addButton(m_lunarRadioBtn, RadioLunarId); QHBoxLayout *tLayout = new QHBoxLayout; tLayout->setSpacing(8); tLayout->setContentsMargins(0, 0, 0, 0); tLayout->addWidget(tLabel); tLayout->addWidget(m_solarRadioBtn); tLayout->addWidget(m_lunarRadioBtn); tLayout->addStretch(1); tLayout->setAlignment(m_solarRadioBtn, Qt::AlignVCenter); tLayout->setAlignment(m_lunarRadioBtn, Qt::AlignVCenter); QWidget *widget = new QWidget; widget->setLayout(tLayout); widget->setFixedHeight(25); maintlayout->addWidget(widget); } //开始时间 { QHBoxLayout *beginLabellayout = new QHBoxLayout; beginLabellayout->setSpacing(0); beginLabellayout->setContentsMargins(0, 0, 0, 0); m_beginTimeLabel = new QLabel(this); m_beginTimeLabel->setToolTip(tr("Starts")); DFontSizeManager::instance()->bind(m_beginTimeLabel, DFontSizeManager::T6); QFontMetrics fontWidth_beginTimeLabel(mlabelF); QString str_beginTimeLabel = fontWidth_beginTimeLabel.elidedText(tr("Starts:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginTimeLabel->setText(str_beginTimeLabel); m_beginTimeLabel->setFont(mlabelF); m_beginTimeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_beginTimeLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_beginDateEdit = new CDateEdit(this); m_beginDateEdit->setDisplayFormat(m_dateFormat); //设置对象å��称和辅助显示å��ç§° m_beginDateEdit->setObjectName("ScheduleBeginDateEdit"); m_beginDateEdit->setAccessibleName("ScheduleBeginDateEdit"); m_beginDateEdit->setFixedSize(200, item_Fixed_Height); m_beginDateEdit->setCalendarPopup(true); m_beginTimeEdit = new CTimeEdit(this); //设置对象å��称和辅助显示å��ç§° m_beginTimeEdit->setObjectName("ScheduleBeginTimeEdit"); m_beginTimeEdit->setAccessibleName("ScheduleBeginTimeEdit"); m_beginTimeEdit->setFixedSize(140, item_Fixed_Height); beginLabellayout->addWidget(m_beginTimeLabel); beginLabellayout->addWidget(m_beginDateEdit); beginLabellayout->addSpacing(8); beginLabellayout->addWidget(m_beginTimeEdit); beginLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(beginLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //结æ�Ÿæ—¶é—´ { QHBoxLayout *enQLabellayout = new QHBoxLayout; enQLabellayout->setSpacing(0); enQLabellayout->setContentsMargins(0, 0, 0, 0); m_endTimeLabel = new QLabel(this); m_endTimeLabel->setToolTip(tr("Ends")); DFontSizeManager::instance()->bind(m_endTimeLabel, DFontSizeManager::T6); QFontMetrics fontWidth_endTimeLabel(mlabelF); QString str_endTimeLabel = fontWidth_endTimeLabel.elidedText(tr("Ends:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endTimeLabel->setText(str_endTimeLabel); m_endTimeLabel->setFont(mlabelF); m_endTimeLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_endTimeLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_endDateEdit = new CDateEdit(this); m_endDateEdit->setDisplayFormat(m_dateFormat); //设置对象å��称和辅助显示å��ç§° m_endDateEdit->setObjectName("ScheduleEndDateEdit"); m_endDateEdit->setAccessibleName("ScheduleEndDateEdit"); m_endDateEdit->setFixedSize(200, item_Fixed_Height); m_endDateEdit->setCalendarPopup(true); m_endTimeEdit = new CTimeEdit(this); //设置对象å��称和辅助显示å��ç§° m_endTimeEdit->setObjectName("ScheduleEndTimeEdit"); m_endTimeEdit->setAccessibleName("ScheduleEndTimeEdit"); m_endTimeEdit->setFixedSize(140, item_Fixed_Height); enQLabellayout->addWidget(m_endTimeLabel); enQLabellayout->addWidget(m_endDateEdit); enQLabellayout->addSpacing(8); enQLabellayout->addWidget(m_endTimeEdit); enQLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(enQLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //æ��醒 { QHBoxLayout *rminQLabellayout = new QHBoxLayout; rminQLabellayout->setSpacing(0); rminQLabellayout->setContentsMargins(0, 0, 0, 0); m_remindSetLabel = new QLabel(); DFontSizeManager::instance()->bind(m_remindSetLabel, DFontSizeManager::T6); QFontMetrics fontWidth_remindSetLabel(mlabelF); QString str_remindSetLabel = fontWidth_remindSetLabel.elidedText(tr("Remind Me:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_remindSetLabel->setToolTip(tr("Remind Me")); m_remindSetLabel->setText(str_remindSetLabel); m_remindSetLabel->setFont(mlabelF); m_remindSetLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_remindSetLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_rmindCombox = new DComboBox(this); //设置对象å��称和辅助显示å��ç§° m_rmindCombox->setObjectName("RmindComboBox"); m_rmindCombox->setAccessibleName("RmindComboBox"); m_rmindCombox->setFixedSize(200, item_Fixed_Height); m_rmindCombox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); rminQLabellayout->addWidget(m_remindSetLabel); rminQLabellayout->addWidget(m_rmindCombox); rminQLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(rminQLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //é‡�å¤� { QHBoxLayout *repeatLabellayout = new QHBoxLayout; repeatLabellayout->setSpacing(0); repeatLabellayout->setContentsMargins(0, 0, 0, 0); m_beginrepeatLabel = new QLabel(); m_beginrepeatLabel->setToolTip(tr("Repeat")); DFontSizeManager::instance()->bind(m_beginrepeatLabel, DFontSizeManager::T6); QFontMetrics fontWidth_beginRepeatLabel(mlabelF); QString str_beginRepeatLabel = fontWidth_beginRepeatLabel.elidedText(tr("Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_beginrepeatLabel->setText(str_beginRepeatLabel); m_beginrepeatLabel->setFont(mlabelF); m_beginrepeatLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_beginrepeatLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_beginrepeatCombox = new DComboBox(this); //设置对象å��称和辅助显示å��ç§° m_beginrepeatCombox->setObjectName("BeginRepeatComboBox"); m_beginrepeatCombox->setAccessibleName("BeginRepeatComboBox"); m_beginrepeatCombox->setFixedSize(200, item_Fixed_Height); m_beginrepeatCombox->addItem(tr("Never")); m_beginrepeatCombox->addItem(tr("Daily")); m_beginrepeatCombox->addItem(tr("Weekdays")); m_beginrepeatCombox->addItem(tr("Weekly")); m_beginrepeatCombox->addItem(tr("Monthly")); m_beginrepeatCombox->addItem(tr("Yearly")); repeatLabellayout->addWidget(m_beginrepeatLabel); repeatLabellayout->addWidget(m_beginrepeatCombox); repeatLabellayout->addStretch(); QWidget *widget = new QWidget; widget->setLayout(repeatLabellayout); widget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(widget); } //结æ�Ÿé‡�å¤� { QHBoxLayout *endrepeatLabellayout = new QHBoxLayout; endrepeatLabellayout->setSpacing(0); endrepeatLabellayout->setContentsMargins(0, 0, 0, 0); m_endrepeatLabel = new QLabel(); DFontSizeManager::instance()->bind(m_endrepeatLabel, DFontSizeManager::T6); QFontMetrics fontWidth_endrepeatLabel(mlabelF); QString str_endrepeatLabel = fontWidth_endrepeatLabel.elidedText(tr("End Repeat:"), Qt::ElideRight, DDECalendar::NewScheduleLabelWidth); m_endrepeatLabel->setToolTip(tr("End Repeat")); m_endrepeatLabel->setText(str_endrepeatLabel); m_endrepeatLabel->setFont(mlabelF); m_endrepeatLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_endrepeatLabel->setFixedSize(label_Fixed_Width, item_Fixed_Height); m_endrepeatCombox = new DComboBox(this); //设置对象å��称和辅助显示å��ç§° m_endrepeatCombox->setObjectName("EndRepeatComboBox"); m_endrepeatCombox->setAccessibleName("EndRepeatComboBox"); m_endrepeatCombox->setFixedSize(200, item_Fixed_Height); m_endrepeatCombox->addItem(tr("Never")); m_endrepeatCombox->addItem(tr("After")); m_endrepeatCombox->addItem(tr("On")); endrepeatLabellayout->addWidget(m_endrepeatLabel); endrepeatLabellayout->addWidget(m_endrepeatCombox); endrepeatLabellayout->addSpacing(8); QHBoxLayout *endrepeattimeslayout = new QHBoxLayout; endrepeattimeslayout->setSpacing(0); endrepeattimeslayout->setContentsMargins(0, 0, 0, 0); endrepeattimeslayout->setContentsMargins(0, 0, 0, 0); m_endrepeattimes = new DLineEdit(this); //设置对象å��称和辅助显示å��ç§° m_endrepeattimes->setObjectName("EndRepeatTimeEidt"); m_endrepeattimes->setAccessibleName("EndRepeatTimeEidt"); m_endrepeattimes->setFixedSize(71, item_Fixed_Height); m_endrepeattimes->setText(QString::number(10)); m_endrepeattimes->setClearButtonEnabled(false); QRegularExpression rx("^[1-9]\\d{0,2}$"); QValidator *validator = new QRegularExpressionValidator(rx, this); m_endrepeattimes->lineEdit()->setValidator(validator); m_endrepeattimesLabel = new QLabel(tr("time(s)")); m_endrepeattimesLabel->setToolTip(tr("time(s)")); m_endrepeattimesLabel->setFont(mlabelF); m_endrepeattimesLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_endrepeattimesLabel->setFixedHeight(item_Fixed_Height); endrepeattimeslayout->addWidget(m_endrepeattimes); endrepeattimeslayout->addWidget(m_endrepeattimesLabel); m_endrepeattimesWidget = new DWidget; //设置对象å��称和辅助显示å��ç§° m_endrepeattimesWidget->setObjectName("EndRepeatTimeWidget"); m_endrepeattimesWidget->setAccessibleName("EndRepeatTimeWidget"); m_endrepeattimesWidget->setLayout(endrepeattimeslayout); m_endrepeattimesWidget->setVisible(false); m_endrepeattimesWidget->setFixedSize(140, item_Fixed_Height); endrepeatLabellayout->addWidget(m_endrepeattimesWidget); m_endRepeatDate = new CDateEdit; //设置对象å��称和辅助显示å��ç§° m_endRepeatDate->setObjectName("EndRepeatDateEdit"); m_endRepeatDate->setAccessibleName("EndRepeatDateEdit"); m_endRepeatDate->setCalendarPopup(true); m_endRepeatDate->setFixedSize(140, item_Fixed_Height); m_endRepeatDate->setDate(QDate::currentDate()); m_endRepeatDate->setDisplayFormat(m_dateFormat); m_endRepeatDate->setCurrentSectionIndex(2); QFont enddatefont; enddatefont.setWeight(QFont::Medium); m_endRepeatDate->setFont(enddatefont); endrepeatLabellayout->addWidget(m_endRepeatDate); endrepeatLabellayout->addStretch(); m_endRepeatDate->setVisible(false); //设置最大日期 m_endRepeatDate->setMaximumDate(QDate(2100, 12, 31)); m_endrepeatWidget = new DWidget; //设置对象å��称和辅助显示å��ç§° m_endrepeatWidget->setObjectName("EndRepeatDateWidget"); m_endrepeatWidget->setAccessibleName("EndRepeatDateWidget"); m_endrepeatWidget->setLayout(endrepeatLabellayout); m_endrepeatWidget->setFixedHeight(item_Fixed_Height); maintlayout->addWidget(m_endrepeatWidget); m_endrepeatWidget->setVisible(false); } m_gwi = new DFrame(this); m_gwi->setFrameShape(QFrame::NoFrame); m_gwi->setLayout(maintlayout); addContent(m_gwi, Qt::AlignCenter); initDateEdit(); if (m_type == 1) slotallDayStateChanged(0); //添加按钮 addButton(tr("Cancel", "button")); addButton(tr("Save", "button"), false, DDialog::ButtonRecommend); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); button->setFixedSize(189, 36); } } void CScheduleDlg::initConnection() { qCDebug(ClientLogger) << "CScheduleDlg::initConnection"; QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &CScheduleDlg::setTheMe); connect(this, &DDialog::buttonClicked, this, &CScheduleDlg::slotBtClick); connect(m_textEdit, &DTextEdit::textChanged, this, &CScheduleDlg::slotTextChange); connect(m_endrepeattimes, &DLineEdit::textChanged, this, &CScheduleDlg::slotendrepeatTextchange); connect(m_allDayCheckbox, &DCheckBox::stateChanged, this, &CScheduleDlg::slotallDayStateChanged); connect(m_beginrepeatCombox, QOverload::of(&QComboBox::activated), this, &CScheduleDlg::slotbRpeatactivated); connect(m_endrepeatCombox, QOverload::of(&QComboBox::activated), this, &CScheduleDlg::sloteRpeatactivated); connect(m_typeComBox, QOverload::of(&QComboBox::activated), this, &CScheduleDlg::slotTypeRpeatactivated); #if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) // Qt5.14+: 使用 textActivated ä¿¡å�· connect(m_accountComBox, &QComboBox::textActivated, this, &CScheduleDlg::slotAccoutBoxActivated); #else // Qt5.11.3 兼容:使用 activated ä¿¡å�·ï¼Œéœ€æŒ‡å®š const QString& 版本 void (QComboBox::*activatedSignal)(const QString &) = &QComboBox::activated; connect(m_accountComBox, activatedSignal, this, &CScheduleDlg::slotAccoutBoxActivated); #endif connect(m_beginDateEdit, &DDateEdit::userDateChanged, this, &CScheduleDlg::slotBDateEidtInfo); QShortcut *shortcut = new QShortcut(this); shortcut->setKey(QKeySequence(QLatin1String("ESC"))); connect(shortcut, SIGNAL(activated()), this, SLOT(close())); connect(m_beginTimeEdit, &CTimeEdit::signaleditingFinished, this, &CScheduleDlg::slotBeginTimeChange); connect(m_endTimeEdit, &CTimeEdit::signaleditingFinished, this, &CScheduleDlg::slotEndTimeChange); connect(m_endDateEdit, &QDateEdit::userDateChanged, this, &CScheduleDlg::slotEndDateChange); #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) // Qt5.15+: 使用 idClicked ä¿¡å�·ï¼ˆæŽ¨è��æ–¹å¼�) connect(m_calendarCategoryRadioGroup, &QButtonGroup::idClicked, this, &CScheduleDlg::slotRadioBtnClicked); #else // Qt5.11.3 兼容:使用 buttonClicked ä¿¡å�·ï¼Œæ‰‹åŠ¨èŽ·å�–按钮ID void (QButtonGroup::*buttonClickedSignal)(QAbstractButton *) = &QButtonGroup::buttonClicked; connect(m_calendarCategoryRadioGroup, buttonClickedSignal, this, [this](QAbstractButton *button) { slotRadioBtnClicked(m_calendarCategoryRadioGroup->id(button)); }); #endif connect(m_typeComBox, &JobTypeComboBox::signalAddTypeBtnClicked, this, &CScheduleDlg::slotBtnAddItemClicked); connect(m_typeComBox, &JobTypeComboBox::editTextChanged, this, &CScheduleDlg::slotTypeEditTextChanged); connect(m_typeComBox, &JobTypeComboBox::editingFinished, this, &CScheduleDlg::slotJobComboBoxEditingFinished); connect(gAccountManager, &AccountManager::signalLogout, this, &CScheduleDlg::signalLogout); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &CScheduleDlg::slotAccountUpdate); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CScheduleDlg::slotAccountStateChange); } void CScheduleDlg::slotAccountUpdate() { qCDebug(ClientLogger) << "CScheduleDlg::slotAccountUpdate"; m_accountComBox->clear(); QList accountList = gAccountManager->getAccountList(); for (AccountItem::Ptr p : accountList) { m_accountComBox->addItem(p->getAccount()->accountName()); } initJobTypeComboBox(); } /** * @brief CScheduleDlg::slotAccountStateChange * å¸�户状æ€�å�‘生改å�˜ï¼Œåˆ·æ–°ç•Œé�¢æ˜¾ç¤º */ void CScheduleDlg::slotAccountStateChange() { qCDebug(ClientLogger) << "CScheduleDlg::slotAccountStateChange"; setShowState(m_lunarRadioBtn->isChecked()); } void CScheduleDlg::initDateEdit() { qCDebug(ClientLogger) << "CScheduleDlg::initDateEdit"; m_beginDateEdit->setMinimumDate(QDate(DDECalendar::QueryEarliestYear, 1, 1)); // 0天 m_beginDateEdit->setMaximumDate(QDate(DDECalendar::QueryLatestYear, 12, 31)); m_endDateEdit->setMinimumDate(QDate(DDECalendar::QueryEarliestYear, 1, 1)); // 0天 m_endDateEdit->setMaximumDate(QDate(DDECalendar::QueryLatestYear, 12, 31)); return; } void CScheduleDlg::initJobTypeComboBox() { qCDebug(ClientLogger) << "CScheduleDlg::initJobTypeComboBox"; m_accountItem = gAccountManager->getAccountItemByAccountName(m_accountComBox->currentText()); m_typeComBox->updateJobType(m_accountItem); resetColor(m_accountItem); } void CScheduleDlg::initRmindRpeatUI() { qCDebug(ClientLogger) << "CScheduleDlg::initRmindRpeatUI"; //æ��醒规则 if (m_scheduleDataInfo->allDay()) { qCDebug(ClientLogger) << "Setting reminder for all-day event"; m_rmindCombox->setCurrentIndex(m_scheduleDataInfo->getAlarmType() - 8); } else { qCDebug(ClientLogger) << "Setting reminder for timed event"; m_rmindCombox->setCurrentIndex(m_scheduleDataInfo->getAlarmType()); } //é‡�å¤�规则 if (m_scheduleDataInfo->lunnar()) { qCDebug(ClientLogger) << "Setting repeat rule for lunar event"; //如果为农历 switch (m_scheduleDataInfo->getRRuleType()) { case DSchedule::RRule_Month: m_beginrepeatCombox->setCurrentIndex(1); break; case DSchedule::RRule_Year: m_beginrepeatCombox->setCurrentIndex(2); break; default: m_beginrepeatCombox->setCurrentIndex(0); break; } } else { qCDebug(ClientLogger) << "Setting repeat rule for solar event"; //如果为公历 m_beginrepeatCombox->setCurrentIndex(m_scheduleDataInfo->getRRuleType()); } slotbRpeatactivated(m_beginrepeatCombox->currentIndex()); if (m_scheduleDataInfo->recurrence()->duration() < 0) { qCDebug(ClientLogger) << "Setting repeat end to 'Never'"; //æ°¸ä¸� m_endrepeatCombox->setCurrentIndex(0); } else if (m_scheduleDataInfo->recurrence()->duration() == 0) { qCDebug(ClientLogger) << "Setting repeat end to date"; //结æ�ŸäºŽæ—¥æœŸ m_endrepeatCombox->setCurrentIndex(2); m_endRepeatDate->setDate(m_scheduleDataInfo->recurrence()->endDateTime().date()); } else { qCDebug(ClientLogger) << "Setting repeat end to count"; //结æ�Ÿä¸Žæ¬¡æ•° m_endrepeatCombox->setCurrentIndex(1); m_endrepeattimes->setText(QString::number(m_scheduleDataInfo->recurrence()->duration() - 1)); } sloteRpeatactivated(m_endrepeatCombox->currentIndex()); } void CScheduleDlg::setTheMe(const int type) { qCDebug(ClientLogger) << "CScheduleDlg::setTheMe, theme type:" << type; //日程标题编辑框文字颜色 QColor titleColor; if (type == 2) { qCDebug(ClientLogger) << "Using dark theme text color"; titleColor = "#C0C6D4"; } else { qCDebug(ClientLogger) << "Using light theme text color"; titleColor = "#414D68"; } DPalette pa = m_textEdit->palette(); //设置颜色 pa.setColor(DPalette::Text, titleColor); m_textEdit->setPalette(pa); } /** * @brief CScheduleDlg::setTabFouseOrder * 设置tab顺åº� */ void CScheduleDlg::setTabFouseOrder() { qCDebug(ClientLogger) << "CScheduleDlg::setTabFouseOrder"; setTabOrder(m_typeComBox, m_textEdit); setTabOrder(m_textEdit, m_allDayCheckbox); setTabOrder(m_allDayCheckbox, m_solarRadioBtn); setTabOrder(m_solarRadioBtn, m_lunarRadioBtn); setTabOrder(m_lunarRadioBtn, m_beginDateEdit); setTabOrder(m_beginDateEdit, m_beginTimeEdit); // setTabOrder(m_beginTimeEdit, m_endDateEdit); setTabOrder(m_endDateEdit, m_endTimeEdit); // setTabOrder(m_endTimeEdit, m_rmindCombox); setTabOrder(m_rmindCombox, m_beginrepeatCombox); setTabOrder(m_beginrepeatCombox, m_endrepeatCombox); //结æ�ŸäºŽæ¬¡æ•°ï¼Œè®¾ç½®tab顺åº� //如果为é‡�å¤�日程 if (!m_scheduleDataInfo.isNull() && m_scheduleDataInfo->getRRuleType() != DSchedule::RRule_None) { qCDebug(ClientLogger) << "Setting tab order for repeat schedule"; //如果为结æ�ŸäºŽæ¬¡æ•° if (m_scheduleDataInfo->recurrence()->duration() > 0) { qCDebug(ClientLogger) << "Setting tab order for repeat count"; setTabOrder(m_endrepeatCombox, m_endrepeattimes); } else if (m_scheduleDataInfo->recurrence()->duration() == 0) { qCDebug(ClientLogger) << "Setting tab order for repeat end date"; setTabOrder(m_endrepeatCombox, m_endRepeatDate); } } } void CScheduleDlg::updateIsOneMoreDay(const QDateTime &begin, const QDateTime &end) { qCDebug(ClientLogger) << "Checking if event spans more than one day"; // 一天毫秒数 static qint64 oneDayMses = 24 * 60 * 60 * 1000; m_isMoreThenOneDay = begin.msecsTo(end) >= oneDayMses; qCDebug(ClientLogger) << "Event spans more than one day:" << m_isMoreThenOneDay; } void CScheduleDlg::updateRepeatCombox(bool isLunar) { qCDebug(ClientLogger) << "Updating repeat combo box for lunar mode:" << isLunar; if (nullptr == m_beginrepeatCombox) { qCWarning(ClientLogger) << "Repeat combo box is null, cannot update"; return; } m_beginrepeatCombox->clear(); if (isLunar) { qCDebug(ClientLogger) << "Setting lunar repeat options"; m_beginrepeatCombox->addItem(tr("Never")); m_beginrepeatCombox->addItem(tr("Monthly")); m_beginrepeatCombox->addItem(tr("Yearly")); } else { qCDebug(ClientLogger) << "Setting solar repeat options"; m_beginrepeatCombox->addItem(tr("Never")); m_beginrepeatCombox->addItem(tr("Daily")); m_beginrepeatCombox->addItem(tr("Weekdays")); m_beginrepeatCombox->addItem(tr("Weekly")); m_beginrepeatCombox->addItem(tr("Monthly")); m_beginrepeatCombox->addItem(tr("Yearly")); } //é‡�ç½®é‡�å¤�规则 m_beginrepeatCombox->setCurrentIndex(0); //默认选择第一个 slotbRpeatactivated(0); //æ›´æ–°"结æ�Ÿé‡�å¤�"状æ€� } /** * @brief CScheduleDlg::isShowLunar * 系统语言检查,根æ�®è¯­è¨€ç±»åž‹æ›´æ”¹æŽ§ä»¶çжæ€�和显示状æ€�,规则如下 * 中文环境下所有功能正常显示 */ bool CScheduleDlg::isShowLunar() { bool result = QLocale::system().name().startsWith("zh_"); // qCDebug(ClientLogger) << "Checking if lunar calendar should be shown based on locale:" << result; return result; } /** * @brief CScheduleDlg::setShowState * @param jobIsLunar * é�žä¸­æ–‡çŽ¯å¢ƒä¸‹è‹¥æ–°å»ºæ—¥ç¨‹åˆ™ä¸�农历按钮置ç�°ä¸�å�¯é€‰ * é�žä¸­æ–‡çŽ¯å¢ƒä¸‹è‹¥ç¼–è¾‘å†œåŽ†æ—¥ç¨‹åˆ™ä»…å…¬åŽ†æŒ‰é’®å�¯é€‰ï¼Œå…¶ä»–的都置ç�°,当选择公历å�Ž,控件都å�¯ä½¿ç”¨ */ void CScheduleDlg::setShowState(bool jobIsLunar) { qCDebug(ClientLogger) << "Setting show state for lunar mode:" << jobIsLunar; m_solarRadioBtn->setEnabled(true); m_lunarRadioBtn->setEnabled(true); setWidgetEnabled(true); getButton(1)->setEnabled(true); if (!m_accountItem || !m_accountItem->isCanSyncShedule()) { //ä¸�å�¯å�Œæ­¥æ—¥ç¨‹ï¼Œé™¤å¸�户选择外其他的控件都置ç�° qCDebug(ClientLogger) << "Account cannot sync schedule, disabling controls"; m_solarRadioBtn->setEnabled(false); m_lunarRadioBtn->setEnabled(false); setWidgetEnabled(false); getButton(1)->setEnabled(false); } else if (isShowLunar()) { //如果ä¸�显示农历 qCDebug(ClientLogger) << "Locale supports lunar calendar, enabling lunar radio button"; m_lunarRadioBtn->setEnabled(true); m_beginDateEdit->setLunarCalendarStatus(jobIsLunar); m_endDateEdit->setLunarCalendarStatus(jobIsLunar); m_endRepeatDate->setLunarCalendarStatus(jobIsLunar); } else { //在ä¸�显示农历环境下,å�–消农历显示 qCDebug(ClientLogger) << "Locale doesn't support lunar calendar, disabling lunar features"; m_beginDateEdit->setLunarCalendarStatus(false); m_endDateEdit->setLunarCalendarStatus(false); m_endRepeatDate->setLunarCalendarStatus(false); m_lunarRadioBtn->setEnabled(false); //在ä¸�显示农历情况下,需è¦�æ ¹æ�®ç¼–辑日程是å�¦ä¸ºå†œåŽ†æ—¥ç¨‹æ�¥åˆ¤æ–­æ˜¾ç¤ºçжæ€� setWidgetEnabled(!jobIsLunar); //å�ªæœ‰åœ¨ä¸�显示农历情况下æ‰�会根æ�®æ˜¯å�¦æ˜¾ç¤ºå†œåކæ�¥è®¾ç½®æŒ‰é’®çжæ€� //在ä¸�显示农历情况下是无法切æ�¢åˆ°å†œåŽ†çš„ï¼Œæ‰€ä»¥å�ªæœ‰åœ¨åˆ‡æ�¢å…¬åŽ†å’Œç¼–è¾‘æ—¥ç¨‹æ—¶æ‰�会设置 getButton(1)->setEnabled(!jobIsLunar); } if (jobIsLunar) { //为农历日程 qCDebug(ClientLogger) << "Setting lunar radio button checked"; m_lunarRadioBtn->setChecked(true); } else { //公历日程 qCDebug(ClientLogger) << "Setting solar radio button checked"; m_solarRadioBtn->setChecked(true); } } void CScheduleDlg::setWidgetEnabled(bool isEnabled) { qCDebug(ClientLogger) << "Setting all form widgets enabled:" << isEnabled; m_typeComBox->setEnabled(isEnabled); m_textEdit->setEnabled(isEnabled); m_allDayCheckbox->setEnabled(isEnabled); m_beginDateEdit->setEnabled(isEnabled); m_beginTimeEdit->setEnabled(isEnabled); m_endDateEdit->setEnabled(isEnabled); m_endTimeEdit->setEnabled(isEnabled); m_rmindCombox->setEnabled(isEnabled); m_beginrepeatCombox->setEnabled(isEnabled); m_endrepeatCombox->setEnabled(isEnabled); m_endrepeattimes->setEnabled(isEnabled); m_endRepeatDate->setEnabled(isEnabled); } void CScheduleDlg::resetColor(const AccountItem::Ptr &account) { qCDebug(ClientLogger) << "Resetting color selector for account"; m_colorSeletorWideget->resetColorButton(account); //将用户上一次选择的自定义颜色添加进去 QString colorName = CConfigSettings::getInstance()->value("LastUserColor", "").toString(); if (!colorName.isEmpty()) { qCDebug(ClientLogger) << "Setting last user custom color:" << colorName; //设置颜色 DTypeColor::Ptr typeColor; typeColor.reset(new DTypeColor); typeColor->setColorCode(colorName); typeColor->setPrivilege(DTypeColor::PriUser); m_colorSeletorWideget->setUserColor(typeColor); } //选中上一次选中的颜色 QVariant colorId = CConfigSettings::getInstance()->value("LastSysColorTypeNo", -1); int colorNum = 0; if (colorId.type() == QVariant::Int) { //如果是int型表示为旧颜色编å�· colorNum = colorId.toInt(); qCDebug(ClientLogger) << "Using legacy color number:" << colorNum; } else { QString &&colorIdStr = colorId.toString(); //如果都为空表示为åˆ�始状æ€�,则选中第一个 if (colorName.isEmpty() && colorIdStr.isEmpty()) { qCDebug(ClientLogger) << "No saved color preferences, using default color"; colorNum = -1; } else if (!colorIdStr.isEmpty()) { //如果颜色idä¸�为空则表示颜色为内置颜色 colorNum = GTypeColor.keys().indexOf(colorIdStr); qCDebug(ClientLogger) << "Using built-in color with ID:" << colorIdStr << "index:" << colorNum; } else { qCDebug(ClientLogger) << "Using user custom color (index 9)"; colorNum = 9; } } m_colorSeletorWideget->setSelectedColorById(colorNum); } void CScheduleDlg::resize() { qCDebug(ClientLogger) << "Resizing dialog based on visible widgets"; int h = 0; if (m_endrepeatWidget->isVisible()) { qCDebug(ClientLogger) << "End repeat widget visible, adding height"; h += 36 + 10; } if (m_colorSeletorWideget->isVisible()) { qCDebug(ClientLogger) << "Color selector widget visible, adding height"; h += 18 + 10; } if (!gAccountManager->getIsSupportUid()) { qCDebug(ClientLogger) << "UID not supported, reducing height"; h -= 36; } //573: 默认界é�¢é«˜åº¦, h: 新增控件高度 qCDebug(ClientLogger) << "Setting dialog size:" << dialog_width << "x" << (573 + h); setFixedSize(dialog_width, 573 + h); } void CScheduleDlg::setOkBtnEnabled() { qCDebug(ClientLogger) << "Checking if OK button should be enabled"; QAbstractButton *m_OkBt = getButton(1); //æ ¹æ�®ç±»åž‹è¾“入框的内容判断ä¿�存按钮是å�¦æœ‰æ•ˆ if (m_OkBt != nullptr && m_typeComBox->lineEdit() != nullptr) { const QString &typeStr = m_typeComBox->lineEdit()->text(); if (typeStr.isEmpty() || typeStr.trimmed().isEmpty()) { qCDebug(ClientLogger) << "Type text is empty, disabling OK button"; m_OkBt->setEnabled(false); //若内容无效直接退出,ä¸�判断结æ�Ÿæ¬¡æ•°æ˜¯å�¦ä¸ºç©º return; } else { m_OkBt->setEnabled(true); } } //如果结æ�Ÿä¸Žæ¬¡æ•°ä¸ºç©ºï¼Œåˆ™ä¿�存按钮置ç�° if (m_beginrepeatCombox->currentIndex() > 0 && m_endrepeatCombox->currentIndex() == 1) { bool enabled = !m_endrepeattimes->text().isEmpty(); qCDebug(ClientLogger) << "Repeat count mode, setting OK button enabled:" << enabled; m_OkBt->setEnabled(enabled); } else { //日期 //æ°¸ä¸� qCDebug(ClientLogger) << "Repeat date/never mode, enabling OK button"; m_OkBt->setEnabled(true); } if (!m_textEdit->toPlainText().isEmpty() && m_textEdit->toPlainText().trimmed().isEmpty()) { qCDebug(ClientLogger) << "Description text contains only whitespace, disabling OK button"; m_OkBt->setEnabled(false); } else { qCDebug(ClientLogger) << "Description text valid, enabling OK button"; m_OkBt->setEnabled(true); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/scheduledlg.h000066400000000000000000000155431523260663500272740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDLG_H #define SCHEDULEDLG_H #include "dschedule.h" #include "dcalendarddialog.h" #include "cdateedit.h" #include "jobtypecombobox.h" #include "colorseletorwidget.h" #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CTimeEdit; class CScheduleDlg : public DCalendarDDialog { Q_OBJECT public: enum ButtonId { RadioSolarId = 0, //公历选择按钮id RadioLunarId //农历选择按钮id }; CScheduleDlg(int type, QWidget *parent = nullptr, const bool isAllDay = true); ~CScheduleDlg() override; void setData(const DSchedule::Ptr &info); void setDate(const QDateTime &date); void setAllDay(bool flag); private: //确定按钮处ç�† bool clickOkBtn(); //选择日程类型 bool selectScheduleType(); //创建日程 bool createSchedule(const QString& scheduleTypeId); /** * @brief updateEndTimeListAndTimeDiff 更新结æ�Ÿæ—¶é—´ï¼ˆtime),结æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表和开始时间和结æ�Ÿæ—¶é—´å·® * @param begin 开始时间(DateTime) * @param end 结æ�Ÿæ—¶é—´ (DateTime) */ void updateEndTimeListAndTimeDiff(const QDateTime &begin, const QDateTime &end); /** * @brief updateEndTimeList 更新结æ�Ÿæ—¶é—´ä¸‹æ‹‰åˆ—表 * @param begin 开始时间(time) * @param isShowTimeInterval 是å�¦æ˜¾ç¤ºæ—¶é—´å��ç§» */ void updateEndTimeList(const QTime &begin, bool isShowTimeInterval); signals: void signalScheduleUpdate(int id = 0); public slots: /** * @brief 开始时间改å�˜ * */ void slotBeginTimeChange(); /** * @brief 结æ�Ÿæ—¶é—´æ”¹å�˜ * */ void slotEndTimeChange(); /** * @brief 结æ�Ÿæ—¥æœŸæ”¹å�˜ * */ void slotEndDateChange(const QDate &date); /** * @brief slotRadioBtnClicked * 选择按钮控件点击时间 * @param btnId 控件id */ void slotRadioBtnClicked(int btnId); /** * @brief slotBtnAddItemClicked * 添加类型事件 */ void slotBtnAddItemClicked(); /** * @brief slotTypeEditTextChanged * 类型下拉选择框文本改å�˜äº‹ä»¶ */ void slotTypeEditTextChanged(const QString &); void slotTypeRpeatactivated(int index); //对è¯�框按钮点击处ç�† void slotBtClick(int buttonIndex, const QString &buttonName); void slotTextChange(); void slotendrepeatTextchange(); void slotBDateEidtInfo(const QDate &date); void slotallDayStateChanged(int state); void slotbRpeatactivated(int index); void sloteRpeatactivated(int index); void slotJobComboBoxEditingFinished(); void slotAccoutBoxActivated(const QString &text); //å¸�户登出信å�· void signalLogout(DAccount::Type); //å¸�户信æ�¯æ›´æ–° void slotAccountUpdate(); //å¸�户状æ€� void slotAccountStateChange(); protected: bool eventFilter(QObject *obj, QEvent *pEvent) override; void showEvent(QShowEvent *event) override; void closeEvent(QCloseEvent *event) override; void changeEvent(QEvent *event) override; void updateDateTimeFormat() override; private: void initUI(); void resetColor(const AccountItem::Ptr&); void initConnection(); void initDateEdit(); void initJobTypeComboBox(); void initRmindRpeatUI(); /** * @brief setTheMe æ ¹æ�®ä¸»é¢˜type设置颜色 * @param type 主题type */ void setTheMe(const int type); //设置tab顺åº� void setTabFouseOrder(); /** * @brief updateIsOneMoreDay 更新开始时间与结æ�Ÿæ—¶é—´æ ‡è¯†æ˜¯å�¦è¶…过一天 * @param begin 开始时间(datetime) * @param end 结æ�Ÿæ—¶é—´(datetime) */ void updateIsOneMoreDay(const QDateTime &begin, const QDateTime &end); /** * @brief updateRepeatCombox * æ›´æ–°é‡�å¤�下拉列表 * @param isLunar 是å�¦æ˜¯å†œåކ true:是 false:ä¸�是 */ void updateRepeatCombox(bool isLunar = false); /** * @brief isShowLunar * 系统语言检查,根æ�®è¯­è¨€ç±»åž‹åˆ¤æ–­æ˜¯å�¦æ˜¾ç¤ºå†œåŽ†ä¿¡æ�¯ */ bool isShowLunar(); /** * @brief setShowState 设置显示状æ€� * @param jobIsLunar 日程是å�¦ä¸ºå†œåކ */ void setShowState(bool jobIsLunar); void setWidgetEnabled(bool isEnabled); void resize(); /** * @brief setOkBtnEnabled æ ¹æ�®é€‰é¡¹è®¾ç½®ä¿�存按钮是å�¦æœ‰æ•ˆ */ void setOkBtnEnabled(); private: DComboBox *m_accountComBox = nullptr; //å¸�户下拉选择框 QLabel *m_typeLabel = nullptr; //DComboBox *m_typeComBox = nullptr; JobTypeComboBox *m_typeComBox = nullptr; ColorSeletorWidget *m_colorSeletorWideget = nullptr; //颜色选择器 QLabel *m_contentLabel = nullptr; DTextEdit *m_textEdit = nullptr; QLabel *m_beginTimeLabel = nullptr; CDateEdit *m_beginDateEdit = nullptr; CTimeEdit *m_beginTimeEdit = nullptr; QLabel *m_endTimeLabel = nullptr; CDateEdit *m_endDateEdit = nullptr; CTimeEdit *m_endTimeEdit = nullptr; QLabel *m_adllDayLabel = nullptr; DCheckBox *m_allDayCheckbox = nullptr; QLabel *m_remindSetLabel = nullptr; DComboBox *m_rmindCombox = nullptr; QLabel *m_beginrepeatLabel = nullptr; DComboBox *m_beginrepeatCombox = nullptr; QLabel *m_endrepeatLabel = nullptr; DComboBox *m_endrepeatCombox = nullptr; DLineEdit *m_endrepeattimes = nullptr; QLabel *m_endrepeattimesLabel = nullptr; DWidget *m_endrepeattimesWidget; CDateEdit *m_endRepeatDate = nullptr; DWidget *m_endrepeatWidget = nullptr; DFrame *m_gwi = nullptr; QLabel *m_titleLabel = nullptr; QButtonGroup *m_calendarCategoryRadioGroup = nullptr; //日历类别选择控件组 DRadioButton *m_solarRadioBtn = nullptr; //公历选择按钮 DRadioButton *m_lunarRadioBtn = nullptr; //农历选择按钮 QString m_context; QString m_TypeContext; //类型输入框上一次输入å�Žçš„字符 const bool m_createAllDay; bool m_setAccept {false}; //是å�¦è®¾ç½®è¿”回代ç �为Rejected qint64 m_timeDiff = 0; //开始时间和结æ�Ÿæ—¶é—´å·®ï¼Œä¸�算日期 bool m_isMoreThenOneDay = false; private: //日程 DSchedule::Ptr m_scheduleDataInfo; AccountItem::Ptr m_accountItem; int m_type; // 1新建 0 编辑日程 QDateTime m_currentDate; QDateTime m_EndDate; bool m_typeEditStatus = false; //日程类型编辑状æ€� int m_prevCheckRadioID = -1; //上一次点击Radioçš„idç¼–å�· bool m_bCanCreateType = true;; }; #endif // SCHEDULEDLG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/scheduletypeeditdlg.cpp000066400000000000000000000260011523260663500313660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduletypeeditdlg.h" #include "scheduledatamanage.h" #include "cscheduleoperation.h" #include "configsettings.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include ScheduleTypeEditDlg::ScheduleTypeEditDlg(QWidget *parent) : DDialog(parent) , m_title(tr("New event type")) , m_dialogType(DialogNewType) { qCDebug(ClientLogger) << "Creating new schedule type dialog"; init(); } ScheduleTypeEditDlg::ScheduleTypeEditDlg(const DScheduleType &jobTypeOld, QWidget *parent) : DDialog(parent) , m_jobTypeOld(jobTypeOld) , m_jobTypeNew(jobTypeOld) , m_title(tr("Edit event type")) , m_dialogType(DialogEditType) { qCDebug(ClientLogger) << "Creating edit schedule type dialog for:" << jobTypeOld.displayName(); init(); } ScheduleTypeEditDlg::ScheduleTypeEditDlg(const DialogType &type, QWidget *parent) : DDialog(parent) { switch (type) { case DialogImportType: m_title = tr("Import ICS file"); m_dialogType = DialogImportType; qCDebug(ClientLogger) << "Initializing import ICS dialog"; break; default: m_title = tr("New event type"); m_dialogType = DialogNewType; qCDebug(ClientLogger) << "Initializing new schedule type dialog (default)"; break; } init(); } DScheduleType ScheduleTypeEditDlg::newJsonType() { qCDebug(ClientLogger) << "Getting new schedule type with color:" << m_colorSeletor->getSelectedColorInfo()->colorCode(); m_jobTypeNew.setTypeColor(*m_colorSeletor->getSelectedColorInfo()); return m_jobTypeNew; } void ScheduleTypeEditDlg::setAccount(AccountItem::Ptr account) { qCDebug(ClientLogger) << "Setting account for schedule type dialog"; m_colorSeletor->resetColorButton(account); //将用户上一次选择的自定义颜色添加进去 QString colorName = CConfigSettings::getInstance()->value("LastUserColor", "").toString(); if (!colorName.isEmpty()) { qCDebug(ClientLogger) << "Restoring last user color:" << colorName; //设置颜色 DTypeColor::Ptr typeColor; typeColor.reset(new DTypeColor); typeColor->setColorID(0); typeColor->setColorCode(colorName); typeColor->setPrivilege(DTypeColor::PriUser); m_colorSeletor->setUserColor(typeColor); } switch (m_dialogType) { case DialogEditType: { qCDebug(ClientLogger) << "Setting color for edit mode:" << m_jobTypeOld.typeColor().colorCode(); //编辑日程类型 //设置颜色 m_colorSeletor->setSelectedColor(m_jobTypeOld.typeColor()); } break; default: { qCDebug(ClientLogger) << "Setting color for new type mode"; //默认新建日程,选中上一次选中的颜色 //选中上一次选中的颜色 QVariant colorId = CConfigSettings::getInstance()->value("LastSysColorTypeNo", -1); int colorNum = 0; if (colorId.type() == QVariant::Int) { //如果是int型表示为旧颜色编å�· colorNum = colorId.toInt(); qCDebug(ClientLogger) << "Using legacy color number:" << colorNum; } else { QString &&colorIdStr = colorId.toString(); if(colorName.isEmpty() && colorIdStr.isEmpty()){ colorNum = -1; qCDebug(ClientLogger) << "No previous color selected"; } else if (!colorIdStr.isEmpty()) { colorNum = GTypeColor.keys().indexOf(colorIdStr); qCDebug(ClientLogger) << "Using system color:" << colorIdStr << "at index" << colorNum; } else { colorNum = 9; qCDebug(ClientLogger) << "Using default color index:" << colorNum; } } m_colorSeletor->setSelectedColorById(colorNum); } break; } } void ScheduleTypeEditDlg::init() { qCDebug(ClientLogger) << "Initializing schedule type dialog"; initView(); initData(); //默认焦点在日程å��称输入框中 m_lineEdit->setFocus(); //å…ˆåˆ�始化数æ�®å†�å…³è�”ä¿¡å�·ï¼Œåˆ�始状æ€�下ä¸�æ��示 connect(m_lineEdit, &DLineEdit::textChanged, this, &ScheduleTypeEditDlg::slotEditTextChanged); connect(m_lineEdit, &DLineEdit::focusChanged, this, &ScheduleTypeEditDlg::slotFocusChanged); connect(m_lineEdit, &DLineEdit::editingFinished, this, &ScheduleTypeEditDlg::slotEditingFinished); // 在编辑框å�˜åŠ¨æ—¶ï¼Œè®¾ç½®ç¡®è®¤æŒ‰é’®çŠ¶æ€� connect(m_lineEdit, &DLineEdit::textChanged, this, &ScheduleTypeEditDlg::slotCheckConfirmBtn); connect(m_fileEdit, &DLineEdit::textChanged, this, &ScheduleTypeEditDlg::slotCheckConfirmBtn); qCDebug(ClientLogger) << "Schedule type dialog initialized"; } void ScheduleTypeEditDlg::initView() { qCDebug(ClientLogger) << "Initializing schedule type dialog view"; setFixedSize(QSize(400, 220)); m_titleLabel = new QLabel(this); QFont titlelabelF; titlelabelF.setWeight(QFont::DemiBold); titlelabelF.setPixelSize(17); m_titleLabel->setFixedSize(400, 25); m_titleLabel->setAlignment(Qt::AlignCenter); m_titleLabel->move(0, 19); m_titleLabel->setFont(titlelabelF); m_lineEdit = new DLineEdit(); m_lineEdit->setClearButtonEnabled(false); //ä¸�显示按钮 m_colorSeletor = new ColorSeletorWidget(); m_fileEdit = new DFileChooserEdit; QFormLayout *formLayout = new QFormLayout(this); formLayout->setHorizontalSpacing(10); formLayout->setVerticalSpacing(20); formLayout->addRow(tr("Name:"), m_lineEdit); formLayout->addRow(tr("Color:"), m_colorSeletor); if (m_dialogType == DialogImportType){ qCDebug(ClientLogger) << "Setting up ICS import form"; setFixedSize(QSize(400, 300)); auto icsLabel = new QLabel(tr("ICS File:"), this); icsLabel->setOpenExternalLinks(true); formLayout->addRow(icsLabel, m_fileEdit); } DFrame *gwi = new DFrame(this); gwi->setFrameShape(QFrame::NoFrame); gwi->setLayout(formLayout); gwi->setMinimumWidth(360); addContent(gwi, Qt::AlignCenter); //添加按钮 addButton(tr("Cancel", "button")); addButton(tr("Save", "button"), false, DDialog::ButtonRecommend); for (int i = 0; i < buttonCount(); i++) { QAbstractButton *button = getButton(i); button->setFixedSize(170, 36); } connect(this->getButton(0), &QPushButton::clicked, this, &ScheduleTypeEditDlg::slotBtnCancel); connect(this->getButton(1), &QPushButton::clicked, this, &ScheduleTypeEditDlg::slotBtnNext); qCDebug(ClientLogger) << "Schedule type dialog view initialized"; } void ScheduleTypeEditDlg::initData() { qCDebug(ClientLogger) << "Initializing schedule type dialog data"; m_titleLabel->setText(m_title); m_lineEdit->setText(m_jobTypeOld.displayName()); m_typeText = m_jobTypeOld.displayName(); //编辑时è¦�åˆ�始化数æ�® bool saveEnabled = !m_jobTypeOld.displayName().isEmpty(); this->getButton(1)->setEnabled(saveEnabled); //如果是新增,则ä¿�存按钮默认ä¸�å�¯ç”¨ qCDebug(ClientLogger) << "Save button initial state:" << (saveEnabled ? "enabled" : "disabled"); } void ScheduleTypeEditDlg::slotEditTextChanged(const QString &strName) { QString tStitlename = strName; //去除回车字符 if (tStitlename.contains("\n")) { qCDebug(ClientLogger) << "Removing newline from type name"; //设置纯文本显示原始内容 tStitlename.replace("\n", ""); m_lineEdit->setText(tStitlename); return; } //最大é™�制20个字符,超出å�Žè¿‡æ»¤æŽ‰ if (tStitlename.length() > 20) { qCDebug(ClientLogger) << "Type name exceeds 20 characters, truncating"; m_lineEdit->setText(m_typeText); return; } else { m_typeText = tStitlename; } //文本编辑框中文本改å�˜äº‹ä»¶ //1ä¸�能为空,2ä¸�能全空格,3ä¸�能é‡�å�� if (m_lineEdit->text().isEmpty()) { qCDebug(ClientLogger) << "Type name is empty, clearing alert"; //å��称为空,返回 //内容清空时,消除警告色和æ��示信æ�¯ m_lineEdit->setAlert(false); m_lineEdit->hideAlertMessage(); return; } if (tStitlename.trimmed().isEmpty()) { qCWarning(ClientLogger) << "Type name contains only whitespace"; //å��称为全空格,返回 m_lineEdit->showAlertMessage(tr("The name can not only contain whitespaces")); m_lineEdit->setAlert(true); return; } qCDebug(ClientLogger) << "Setting new type name:" << tStitlename; m_jobTypeNew.setDisplayName(tStitlename); m_lineEdit->setAlert(false); m_lineEdit->hideAlertMessage(); return; } void ScheduleTypeEditDlg::slotFocusChanged(bool onFocus) { qCDebug(ClientLogger) << "Focus changed, has focus:" << onFocus; //如果焦点移出,且输入内容为空 if (!onFocus && m_lineEdit->text().isEmpty()) { qCDebug(ClientLogger) << "Focus lost with empty text, triggering editing finished"; // emit m_lineEdit->textChanged(""); emit m_lineEdit->editingFinished(); } } void ScheduleTypeEditDlg::slotBtnCancel() { qCDebug(ClientLogger) << "Cancel button clicked, rejecting dialog"; this->reject(); } void ScheduleTypeEditDlg::slotBtnNext() { qCDebug(ClientLogger) << "Save button clicked, setting color and accepting dialog"; m_jobTypeNew.setTypeColor(*m_colorSeletor->getSelectedColorInfo()); this->accept(); } void ScheduleTypeEditDlg::slotEditingFinished() { qCDebug(ClientLogger) << "Editing finished, checking content"; //如果编辑结æ�Ÿå�Žå†…容为空则æ��示 if (m_lineEdit->text().isEmpty()) { qCDebug(ClientLogger) << "Empty name after editing finished, showing alert"; //å��称为空,返回 m_lineEdit->showAlertMessage(tr("Enter a name please")); m_lineEdit->setAlert(true); } } // 获å�–ICS文件路径 QString ScheduleTypeEditDlg::getIcsFile() { qCDebug(ClientLogger) << "Getting selected ICS file path:" << m_fileEdit->text(); return m_fileEdit->text(); } // 检查并设置‘确认按钮’的状æ€� void ScheduleTypeEditDlg::slotCheckConfirmBtn() { qCDebug(ClientLogger) << "Checking confirm button state"; auto confirmBtn = this->getButton(1); if (m_lineEdit->text().isEmpty() || m_lineEdit->isAlert()) { qCDebug(ClientLogger) << "Name field empty or has alert, disabling confirm button"; confirmBtn->setEnabled(false); return; } if (m_dialogType == DialogType::DialogImportType) { if (m_fileEdit->text().isEmpty() || m_fileEdit->isAlert()) { qCDebug(ClientLogger) << "File field empty or has alert, disabling confirm button"; confirmBtn->setEnabled(false); return; } } qCDebug(ClientLogger) << "All validations passed, enabling confirm button"; confirmBtn->setEnabled(true); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/scheduletypeeditdlg.h000066400000000000000000000047271523260663500310460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULETYPEEDITDLG_H #define SCHEDULETYPEEDITDLG_H #include "colorseletorwidget.h" #include "dschedule.h" #include "dscheduletype.h" #include "daccount.h" #include "accountitem.h" #include #include #include DWIDGET_USE_NAMESPACE class ScheduleTypeEditDlg : public DDialog { Q_OBJECT public: enum DialogType { // 对è¯�框类型 DialogNewType, // 新建日程类型 DialogEditType, // 编辑日程类型 DialogImportType // 导入日程类型 }; //新增 explicit ScheduleTypeEditDlg(QWidget *parent = nullptr); //iJobTypeNo==0 ? 新增 or 修改 explicit ScheduleTypeEditDlg(const DScheduleType &jobTypeOld, QWidget *parent = nullptr); // 新增 or 导入 explicit ScheduleTypeEditDlg(const DialogType &type, QWidget *parent = nullptr); DScheduleType newJsonType(); void setAccount(AccountItem::Ptr account); private: signals: /** * @brief refreshInfo:刷新信æ�¯ä¿¡å�· */ void signalRefreshScheduleType(); public slots: //编辑器文本改å�˜äº‹ä»¶ void slotEditTextChanged(const QString &); /** * @brief slotFocusChanged 输入框焦点改å�˜å¤„ç�† * @param onFocus */ void slotFocusChanged(bool onFocus); /** * @brief slotBtnCancel å�–消按钮 */ void slotBtnCancel(); /** * @brief slotBtnNext ä¿�存按钮,检查输入,ä¿�å­˜ã€�更新日程类型信æ�¯ */ void slotBtnNext(); /** * @brief slotEditingFinished 编辑框编辑结æ�Ÿå�Žå¤„ç�† */ void slotEditingFinished(); // 获å�–ICS文件 QString getIcsFile(); // 检查确认按钮是å�¦éœ€è¦�ç¦�用 void slotCheckConfirmBtn(); private: void init(); void initView(); void initData(); private: DScheduleType m_jobTypeOld; //被修改的日程类型 DScheduleType m_jobTypeNew; //修改å�Žçš„æ—¥ç¨‹ç±»åž‹ QString m_title = ""; //弹窗å�� DLineEdit *m_lineEdit = nullptr; // 类型å��编辑框 DFileChooserEdit *m_fileEdit = nullptr; // ics文件编辑框 QLabel *m_titleLabel = nullptr; //弹窗å��控件 ColorSeletorWidget *m_colorSeletor = nullptr; //颜色选择器 DialogType m_dialogType; QString m_typeText; //输入框上一次输入å�Žçš„æ–‡æœ¬ }; #endif // SCHEDULETYPEEDITDLG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/settingdialog.cpp000066400000000000000000001034501523260663500301740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "settingdialog.h" #include "cdynamicicon.h" #include "accountmanager.h" #include "commondef.h" #include "dcalendargeneralsettings.h" #include "settingWidget/userloginwidget.h" #include "accountmanager.h" #include "calendarmanage.h" #include "units.h" #include #include #include #include #include #include #include #include #include #include const QString ControlCenterDBusName = "org.deepin.dde.ControlCenter1"; const QString ControlCenterDBusPath = "/org/deepin/dde/ControlCenter1"; const QString ControlCenterPage = "datetime/region"; using namespace SettingWidget; //é�™æ€�的翻译ä¸�会真的翻译,但是会更新ts文件 //åƒ�static QString a = QObject::tr("hello"), a实际等于hello,但是ts会有hello这个è¯�æ�¡ //调用DSetingDialog时会用到上述场景 static CalendarSettingSetting setting_account = { "setting_account", QObject::tr("Account settings"), { { "account", QObject::tr("Account"), {{ "login", //key "", //name "login", //type "" //default } } }, { "account_sync_items", QObject::tr("Select items to be synced"), {{ "Account_Calendar", //key QObject::tr("Events"), //name "SyncTagRadioButton", //type "" //default }, { "Account_Setting", //key QObject::tr("General settings"), //name "SyncTagRadioButton", //type "" //default } } }, { "sync_interval", "", { { "Sync_interval", //key QObject::tr("Sync interval"), //name "SyncTimeCombobox", //type "" } } }, { "manual_sync", "", {{ "manual_sync", //key "", //name "ManualSyncButton", //type "" //default } } }, } }; static CalendarSettingSetting setting_base = { "setting_base", QObject::tr("Manage calendar"), { { "acccount_items", "", { { "AccountCombobox", //key QObject::tr("Calendar account"), //name "AccountCombobox", //type "" } } }, { "event_types", QObject::tr("Event types"), { { "JobTypeListView", //key "", //name "JobTypeListView", //type "" //default } } } } }; static CalendarSettingSetting setting_base_noaccount = { "setting_base", QObject::tr("Manage calendar"), { { "event_types", QObject::tr("Event types"), { { "JobTypeListView", //key "", //name "JobTypeListView", //type "" //default } } } } }; static CalendarSettingSetting setting_general = { "setting_general", QObject::tr("General settings"), { { "general", QObject::tr("General"), { { "firstday", QObject::tr("First day of week"), "FirstDayofWeek", "", "Sunday" }, { "time", QObject::tr("Time"), "Time", "" }, { "control-center-button", "", "ControlCenterLink", "" }, }, }, } }; CSettingDialog::CSettingDialog(QWidget *parent) : DSettingsDialog(parent) { qCDebug(ClientLogger) << "Creating settings dialog"; m_controlCenterProxy = new ControlCenterProxy(ControlCenterDBusName, ControlCenterDBusPath, QDBusConnection::sessionBus(), this); initWidget(); initConnect(); initData(); initWidgetDisplayStatus(); initView(); qCDebug(ClientLogger) << "Settings dialog initialization complete"; } void CSettingDialog::initView() { qCDebug(ClientLogger) << "Initializing settings dialog view"; setIcon(CDynamicIcon::getInstance()->getPixmap()); setFixedSize(682, 506); widgetFactory()->registerWidget("login", UserloginWidget::createloginButton); widgetFactory()->registerWidget("FirstDayofWeek", std::bind(&CSettingDialog::createFirstDayofWeekWidget, this, std::placeholders::_1)); widgetFactory()->registerWidget("Time", std::bind(&CSettingDialog::createTimeTypeWidget, this, std::placeholders::_1)); widgetFactory()->registerWidget("ControlCenterLink", std::bind(&CSettingDialog::createControlCenterLink, this, std::placeholders::_1)); widgetFactory()->registerWidget("AccountCombobox", std::bind(&CSettingDialog::createAccountCombobox, this, std::placeholders::_1)); widgetFactory()->registerWidget("JobTypeListView", std::bind(&CSettingDialog::createJobTypeListView, this, std::placeholders::_1)); widgetFactory()->registerWidget("SyncTagRadioButton", std::bind(&CSettingDialog::createSyncTagRadioButton, this, std::placeholders::_1)); widgetFactory()->registerWidget("SyncTimeCombobox", std::bind(&CSettingDialog::createSyncFreqCombobox, this, std::placeholders::_1)); widgetFactory()->registerWidget("ManualSyncButton", std::bind(&CSettingDialog::createManualSyncButton, this, std::placeholders::_1)); qCDebug(ClientLogger) << "Registered all custom widgets"; QString strJson; CalendarSettingSettings calendarSettings; if (gAccountManager->getIsSupportUid()) { calendarSettings.append(setting_account); calendarSettings.append(setting_base); } else { calendarSettings.append(setting_base_noaccount); } calendarSettings.append(setting_general); QJsonObject obj; obj.insert("groups", calendarSettings.toJson()); strJson = QJsonDocument(obj).toJson(QJsonDocument::Compact); auto settings = Dtk::Core::DSettings::fromJson(strJson.toLatin1()); setObjectName("SettingDialog"); updateSettings(settings); //æ�¢å¤�默认设置按钮ä¸�显示 setResetVisible(false); //QList QList lstwidget = findChildren(); if (lstwidget.size() > 0) { //accessibleName for (QWidget *wid : lstwidget) { if ("ContentWidgetForsetting_base.event_types" == wid->accessibleName() || ("ContentSubTitleText" == wid->objectName() && "setting_base.event_types" == wid->property("key").toString())) { QSpacerItem *spaceitem = new QSpacerItem(1, 1, QSizePolicy::Policy::Expanding); wid->layout()->addItem(spaceitem); DIconButton *addButton = this->createTypeAddButton(); wid->layout()->addWidget(addButton); wid->layout()->addWidget(m_typeImportBtn); //使addButtonçš„å�³è¾¹è·�等于viewçš„å�³è¾¹è·� int leftMargin = wid->layout()->contentsMargins().left(); wid->layout()->setContentsMargins(leftMargin, 0, leftMargin, 0); } if (wid->accessibleName().contains("DefaultWidgetAtContentRow")) { //DefaultWidgetAtContentRow是设置对è¯�框å�³è¾¹æ¯�一个optionæ�¡ç›®å¯¹åº”widgetçš„accessibleNameçš„å‰�缀,所以如果å�Žç»­æœ‰æ›´å¤šæ�¡ç›®ï¼Œéœ€è¦�å�šä¿®æ”¹ wid->layout()->setContentsMargins(0, 0, 0, 0); } } } //未登录uoså¸�å�·æ—¶ï¼Œç§»é™¤éƒ¨åˆ†é€‰é¡¹ if (!gUosAccountItem) { setGroupVisible("setting_account.account_sync_items", false); setGroupVisible("setting_account.sync_interval", false); setGroupVisible("setting_account.manual_sync", false); } //移除立刻å�Œæ­¥æŒ‰é’®çš„背景色 QWidget *ManualSyncWidget = this->findChild("ManualSyncWidget"); ManualSyncWidget = ManualSyncWidget == nullptr ? nullptr : ManualSyncWidget->parentWidget(); ManualSyncWidget = ManualSyncWidget == nullptr ? nullptr : ManualSyncWidget->parentWidget(); DBackgroundGroup *bk = ManualSyncWidget == nullptr ? nullptr : qobject_cast(ManualSyncWidget); if (bk) { bk->setBackgroundRole(QPalette::Base); } //首次显示JobTypeListView时,更新日程类型 if (m_scheduleTypeWidget && m_accountComboBox) { m_scheduleTypeWidget->updateCalendarAccount(m_accountComboBox->currentData().toString()); } //账户登出登入时,éš�è—�显示相关界é�¢ connect(gAccountManager, &AccountManager::signalAccountUpdate, this, [ = ]() { if (!this->groupIsVisible("setting_account")) return; setGroupVisible("setting_account.account_sync_items", gUosAccountItem != nullptr); setGroupVisible("setting_account.sync_interval", gUosAccountItem != nullptr); setGroupVisible("setting_account.manual_sync", gUosAccountItem != nullptr); }); //å�Œæ­¥é¡¹ m_radiobuttonAccountCalendar = qobject_cast(this->findChild("Account_Calendar")); m_radiobuttonAccountSetting = qobject_cast(this->findChild("Account_Setting")); // Q_ASSERT(m_radiobuttonAccountSetting); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CSettingDialog::slotSyncTagButtonUpdate); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &CSettingDialog::slotSyncTagButtonUpdate); if (m_radiobuttonAccountCalendar) connect(m_radiobuttonAccountCalendar, &SyncTagRadioButton::clicked, this, &CSettingDialog::slotSyncAccountStateUpdate); if (m_radiobuttonAccountSetting) connect(m_radiobuttonAccountSetting, &SyncTagRadioButton::clicked, this, &CSettingDialog::slotSyncAccountStateUpdate); slotSyncTagButtonUpdate(); } void CSettingDialog::initWidget() { qCDebug(ClientLogger) << "Initializing settings dialog widgets"; initFirstDayofWeekWidget(); initTimeTypeWidget(); initAccountComboBoxWidget(); initScheduleTypeWidget(); initTypeAddWidget(); initSyncFreqWidget(); initManualSyncButton(); qCDebug(ClientLogger) << "Settings dialog widgets initialized"; } void CSettingDialog::initConnect() { qCDebug(ClientLogger) << "Initializing settings dialog connections"; connect(gAccountManager, &AccountManager::signalGeneralSettingsUpdate, this, &CSettingDialog::slotGeneralSettingsUpdate); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &CSettingDialog::slotAccountUpdate); connect(gAccountManager, &AccountManager::signalLogout, this, &CSettingDialog::slotLogout); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &CSettingDialog::slotAccountStateChange); connect(m_firstDayofWeekCombobox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotFirstDayofWeekCurrentChanged); connect(m_timeTypeCombobox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotTimeTypeCurrentChanged); connect(m_accountComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotAccountCurrentChanged); connect(m_typeAddBtn, &DIconButton::clicked, this, &CSettingDialog::slotTypeAddBtnClickded); connect(m_typeImportBtn, &DIconButton::clicked, this, &CSettingDialog::slotTypeImportBtnClickded); //当日常类型超过上é™�时,更新button的状æ€� connect(m_scheduleTypeWidget, &JobTypeListView::signalAddStatusChanged, m_typeAddBtn, &DIconButton::setEnabled); connect(m_scheduleTypeWidget, &JobTypeListView::signalAddStatusChanged, m_typeImportBtn, &DIconButton::setEnabled); //TODO:æ›´æ–°unionå¸�户的的å�Œæ­¥é¢‘率 connect(m_syncFreqComboBox, QOverload::of(&QComboBox::currentIndexChanged), this, &CSettingDialog::slotSetUosSyncFreq); connect(m_syncBtn, &QPushButton::clicked, this, &CSettingDialog::slotUosManualSync); connect(m_ptrNetworkState, &DOANetWorkDBus::sign_NetWorkChange, this, &CSettingDialog::slotNetworkStateChange); qCDebug(ClientLogger) << "Settings dialog connections initialized"; } void CSettingDialog::slotNetworkStateChange(DOANetWorkDBus::NetWorkState state) { if (DOANetWorkDBus::NetWorkState::Active == state) { if (!gUosAccountItem.isNull() && (gUosAccountItem->isCanSyncSetting() || gUosAccountItem->isCanSyncShedule())) { m_syncBtn->setEnabled(true); } } else if (DOANetWorkDBus::NetWorkState::Disconnect == state) { m_syncBtn->setEnabled(false); } } void CSettingDialog::initData() { qCDebug(ClientLogger) << "Initializing settings dialog data"; //通用设置数æ�®åˆ�始化 slotGeneralSettingsUpdate(); //åˆ�始化账户信æ�¯ slotAccountUpdate(); //日程类型添加按钮åˆ�始化 m_typeAddBtn->setEnabled(m_scheduleTypeWidget->canAdd()); m_typeImportBtn->setEnabled(m_scheduleTypeWidget->canAdd()); qCDebug(ClientLogger) << "Schedule type add button enabled:" << m_scheduleTypeWidget->canAdd(); //å�Œæ­¥é¢‘率数æ�®åˆ�始化 { int index = 0; if (gUosAccountItem) { index = m_syncFreqComboBox->findData(gUosAccountItem->getAccount()->syncFreq()); qCDebug(ClientLogger) << "Setting sync frequency index to:" << index << "for account ID:" << gUosAccountItem->getAccount()->accountID(); } m_syncFreqComboBox->setCurrentIndex(index); } slotAccountStateChange(); qCDebug(ClientLogger) << "Settings dialog data initialized"; } void CSettingDialog::initWidgetDisplayStatus() { } void CSettingDialog::initFirstDayofWeekWidget() { m_firstDayofWeekWidget = new QWidget(); m_firstDayofWeekCombobox = new QComboBox(m_firstDayofWeekWidget); m_firstDayofWeekCombobox->setFixedSize(150, 36); m_firstDayofWeekCombobox->addItem(tr("Sunday")); m_firstDayofWeekCombobox->addItem(tr("Monday")); m_firstDayofWeekCombobox->addItem(tr("Use System Setting")); QHBoxLayout *layout = new QHBoxLayout(m_firstDayofWeekWidget); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addStretch(10); layout->addWidget(m_firstDayofWeekCombobox, 1); m_firstDayofWeekWidget->setLayout(layout); } void CSettingDialog::initTimeTypeWidget() { m_timeTypeWidget = new QWidget(); m_timeTypeCombobox = new QComboBox(m_timeTypeWidget); m_timeTypeCombobox->setFixedSize(150, 36); m_timeTypeCombobox->addItem(tr("24-hour clock")); m_timeTypeCombobox->addItem(tr("12-hour clock")); m_timeTypeCombobox->addItem(tr("Use System Setting")); QHBoxLayout *layout = new QHBoxLayout(m_timeTypeWidget); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->addStretch(10); layout->addWidget(m_timeTypeCombobox, 1); m_timeTypeWidget->setLayout(layout); } void CSettingDialog::initAccountComboBoxWidget() { m_accountComboBox = new QComboBox(); m_accountComboBox->setFixedSize(150, 36); } void CSettingDialog::initTypeAddWidget() { m_typeAddBtn = new DIconButton(DStyle::SP_IncreaseElement, nullptr); m_typeAddBtn->setFixedSize(20, 20); m_typeImportBtn = new DIconButton(DStyle::SP_SelectElement, nullptr); m_typeImportBtn->setToolTip(tr("import ICS file")); m_typeImportBtn->setFixedSize(20, 20); } void CSettingDialog::initScheduleTypeWidget() { m_scheduleTypeWidget = new JobTypeListView; m_scheduleTypeWidget->setObjectName("JobTypeListView"); } void CSettingDialog::initSyncFreqWidget() { m_syncFreqComboBox = new QComboBox; m_syncFreqComboBox->setMaximumWidth(150); m_syncFreqComboBox->addItem(tr("Manual"), DAccount::SyncFreq_Maunal); m_syncFreqComboBox->addItem(tr("15 mins"), DAccount::SyncFreq_15Mins); m_syncFreqComboBox->addItem(tr("30 mins"), DAccount::SyncFreq_30Mins); m_syncFreqComboBox->addItem(tr("1 hour"), DAccount::SyncFreq_1hour); m_syncFreqComboBox->addItem(tr("24 hours"), DAccount::SyncFreq_24hour); m_syncFreqComboBox->setCurrentIndex(1); // 默认15分钟 } void CSettingDialog::initManualSyncButton() { m_manualSyncWidget = new QWidget; m_ptrNetworkState = new DOANetWorkDBus(this); m_manualSyncWidget->setObjectName("ManualSyncWidget"); m_syncBtn = new QPushButton(m_manualSyncWidget); m_syncBtn->setFixedSize(266, 36); m_syncBtn->setText(tr("Sync Now")); m_syncTimeLabel = new QLabel; QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(m_syncBtn, 0, Qt::AlignCenter); layout->addWidget(m_syncTimeLabel, 0, Qt::AlignCenter); m_manualSyncWidget->setLayout(layout); } void CSettingDialog::slotGeneralSettingsUpdate() { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); if (!setting) { return; } setFirstDayofWeek(setting->firstDayOfWeek()); setTimeType(setting->timeShowType()); } void CSettingDialog::slotAccountUpdate() { accountUpdate(); //判断账户是å�¦ä¸ºç™»å½•状æ€�,并建立连接 if (gUosAccountItem) { slotLastSyncTimeUpdate(gUosAccountItem->getDtLastUpdate()); connect(gUosAccountItem.get(), &AccountItem::signalDtLastUpdate, this, &CSettingDialog::slotLastSyncTimeUpdate); } } void CSettingDialog::slotLogout(DAccount::Type type) { if (DAccount::Account_UnionID == type) { } } void CSettingDialog::slotFirstDayofWeekCurrentChanged(int index) { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); //此次å�ªè®¾ç½®ä¸€å‘¨é¦–日,ä¸�刷新界é�¢ if (index == 0) { qCDebug(ClientLogger) << "Setting first day of week to Sunday"; gAccountManager->setFirstDayofWeek(7); gCalendarManager->setFirstDayOfWeek(7, false); } else if (index == 1) { qCDebug(ClientLogger) << "Setting first day of week to Monday"; gAccountManager->setFirstDayofWeek(1); gCalendarManager->setFirstDayOfWeek(1, false); } else { if (gAccountManager->getFirstDayofWeekSource() != DCalendarGeneralSettings::Source_System) { qCDebug(ClientLogger) << "Setting first day of week to system default"; gAccountManager->setFirstDayofWeekSource(DCalendarGeneralSettings::Source_System); } } } void CSettingDialog::slotTimeTypeCurrentChanged(int index) { DCalendarGeneralSettings::Ptr setting = gAccountManager->getGeneralSettings(); if (index == 0) { qCDebug(ClientLogger) << "Setting time format to 24-hour"; gAccountManager->setTimeFormatType(DCalendarGeneralSettings::TwentyFour); gCalendarManager->setTimeShowType(DCalendarGeneralSettings::TwentyFour, false); } else if (index == 1) { qCDebug(ClientLogger) << "Setting time format to 12-hour"; gAccountManager->setTimeFormatType(DCalendarGeneralSettings::Twelve); gCalendarManager->setTimeShowType(DCalendarGeneralSettings::Twelve, false); } else { if (gAccountManager->getTimeFormatTypeSource() != DCalendarGeneralSettings::Source_System) { qCDebug(ClientLogger) << "Setting time format to system default"; gAccountManager->setTimeFormatTypeSource(DCalendarGeneralSettings::Source_System); } } } void CSettingDialog::slotAccountCurrentChanged(int index) { qCDebug(ClientLogger) << "Account changed to index:" << index; if (m_scheduleTypeWidget) { QString accountId = m_accountComboBox->itemData(index).toString(); qCDebug(ClientLogger) << "Updating calendar account to ID:" << accountId; m_scheduleTypeWidget->updateCalendarAccount(accountId); setTypeEnable(index); } } void CSettingDialog::slotTypeAddBtnClickded() { qCDebug(ClientLogger) << "Add schedule type button clicked"; if (m_scheduleTypeWidget) { m_scheduleTypeWidget->slotAddScheduleType(); } } void CSettingDialog::slotTypeImportBtnClickded() { qCDebug(ClientLogger) << "Import schedule type button clicked"; if (m_scheduleTypeWidget) { m_scheduleTypeWidget->slotImportScheduleType(); } } void CSettingDialog::slotSetUosSyncFreq(int freq) { qCDebug(ClientLogger) << "Setting UOS sync frequency to:" << freq; QComboBox *com = qobject_cast(sender()); if (!com || !gUosAccountItem) { qCDebug(ClientLogger) << "No combo box or UOS account item, skipping sync frequency update"; return; } qCDebug(ClientLogger) << "Setting UOS sync frequency to:" << freq; gUosAccountItem->setSyncFreq(DAccount::SyncFreqType(com->itemData(freq).toInt())); } void CSettingDialog::slotUosManualSync() { qCDebug(ClientLogger) << "Manual sync requested"; if (!gUosAccountItem) { qCDebug(ClientLogger) << "No UOS account item, skipping manual sync"; return; } qCDebug(ClientLogger) << "Manual sync requested for account:" << gUosAccountItem->getAccount()->accountID(); gAccountManager->downloadByAccountID(gUosAccountItem->getAccount()->accountID()); } void CSettingDialog::slotSyncTagButtonUpdate() { qCDebug(ClientLogger) << "Updating sync tag buttons"; if (!gUosAccountItem) { qCDebug(ClientLogger) << "No UOS account item, skipping sync tag button update"; return; } auto state = gUosAccountItem->getAccount()->accountState(); qCDebug(ClientLogger) << "Updating sync tag buttons for account state:" << state; m_radiobuttonAccountCalendar->setChecked(state & DAccount::Account_Calendar); m_radiobuttonAccountSetting->setChecked(state & DAccount::Account_Setting); m_radiobuttonAccountCalendar->setEnabled(gUosAccountItem->isEnableForUosAccount()); m_radiobuttonAccountSetting->setEnabled(gUosAccountItem->isEnableForUosAccount()); } void CSettingDialog::slotSyncAccountStateUpdate(bool status) { qCDebug(ClientLogger) << "Updating sync account state"; if (!gUosAccountItem) { qCDebug(ClientLogger) << "No UOS account item, skipping sync account state update"; return; } auto state = gUosAccountItem->getAccountState(); if (m_radiobuttonAccountSetting->isChecked()) state = state | DAccount::Account_Setting; else state = state & ~DAccount::Account_Setting; if (m_radiobuttonAccountCalendar->isChecked()) state = state | DAccount::Account_Calendar; else state = state & ~DAccount::Account_Calendar; gUosAccountItem->setAccountState(state); if (status) { qCDebug(ClientLogger) << "Manual sync requested"; slotUosManualSync(); } } void CSettingDialog::slotLastSyncTimeUpdate(const QString &datetime) { qCDebug(ClientLogger) << "Last sync time updated:" << datetime; QString dtstr; if (gCalendarManager->getTimeShowType()) { dtstr = dtFromString(datetime).toString("yyyy/MM/dd ap hh:mm"); } else { dtstr = dtFromString(datetime).toString("yyyy/MM/dd hh:mm"); } if (m_syncTimeLabel && gUosAccountItem && !dtstr.isEmpty()) { m_syncTimeLabel->setText(tr("Last sync") + ":" + dtstr); } } void CSettingDialog::slotAccountStateChange() { qCDebug(ClientLogger) << "Updating account state change"; if (!gUosAccountItem) { qCDebug(ClientLogger) << "No UOS account item, skipping account state change"; return; } if (m_syncBtn) { if (gUosAccountItem->isCanSyncSetting() || gUosAccountItem->isCanSyncShedule()) { m_syncBtn->setEnabled(true); } else { m_syncBtn->setEnabled(false); } } if (m_syncFreqComboBox) { if (gUosAccountItem->isCanSyncSetting() || gUosAccountItem->isCanSyncShedule()) { m_syncFreqComboBox->setEnabled(true); } else { m_syncFreqComboBox->setEnabled(false); } } if (m_accountComboBox && m_typeAddBtn) { qCDebug(ClientLogger) << "Updating type enable"; setTypeEnable(m_accountComboBox->currentIndex()); } } void CSettingDialog::setFirstDayofWeek(int value) { qCDebug(ClientLogger) << "Setting first day of week"; if (!m_firstDayofWeekCombobox) { qCDebug(ClientLogger) << "No first day of week combobox, skipping"; return; } auto sourceSystem = gAccountManager->getFirstDayofWeekSource() == DCalendarGeneralSettings::Source_System; if (sourceSystem) { qCDebug(ClientLogger) << "Setting first day of week to system default"; m_firstDayofWeekCombobox->setCurrentIndex(m_firstDayofWeekCombobox->count() - 1); } else { qCDebug(ClientLogger) << "Setting first day of week to:" << value; if (value == 1) { qCDebug(ClientLogger) << "Setting first day of week to Monday"; m_firstDayofWeekCombobox->setCurrentIndex(1); } else { qCDebug(ClientLogger) << "Setting first day of week to Sunday"; m_firstDayofWeekCombobox->setCurrentIndex(0); } } // 设置一周首日并刷新界é�¢ gCalendarManager->setFirstDayOfWeek(value, true); } void CSettingDialog::setTimeType(int value) { qCDebug(ClientLogger) << "Setting time type"; if (!m_timeTypeCombobox) { qCDebug(ClientLogger) << "No time type combobox, skipping"; return; } if (value > 1 || value < 0) { qCDebug(ClientLogger) << "Invalid time type, setting to 0"; value = 0; } auto sourceSystem = gAccountManager->getTimeFormatTypeSource() == DCalendarGeneralSettings::Source_System; // 设置时间显示格å¼�并刷新界é�¢ if (sourceSystem) { qCDebug(ClientLogger) << "Setting time type to system default"; m_timeTypeCombobox->setCurrentIndex(m_firstDayofWeekCombobox->count() - 1); } else { qCDebug(ClientLogger) << "Setting time type to:" << value; m_timeTypeCombobox->setCurrentIndex(value); } gCalendarManager->setTimeShowType(value, true); } void CSettingDialog::accountUpdate() { qCDebug(ClientLogger) << "Updating account list in settings dialog"; if (nullptr == m_accountComboBox) { qCWarning(ClientLogger) << "Account combo box is null, cannot update"; return; } QVariant oldAccountID = m_accountComboBox->currentData(); qCDebug(ClientLogger) << "Current account ID:" << oldAccountID; m_accountComboBox->blockSignals(true); m_accountComboBox->clear(); for (auto account : gAccountManager->getAccountList()) { // qCDebug(ClientLogger) << "Adding account:" << account->getAccount()->accountName() << "ID:" << account->getAccount()->accountID(); m_accountComboBox->addItem(account->getAccount()->accountName(), account->getAccount()->accountID()); } m_accountComboBox->setCurrentIndex(m_accountComboBox->findData(oldAccountID)); if (m_accountComboBox->currentIndex() < 0) { qCDebug(ClientLogger) << "Previous account not found, resetting to first account"; m_accountComboBox->setCurrentIndex(0); } m_accountComboBox->blockSignals(false); m_syncFreqComboBox->setCurrentIndex(1); //æ¯�次登录的时候 默认15分钟 slotAccountCurrentChanged(m_accountComboBox->currentIndex()); qCDebug(ClientLogger) << "Account list updated successfully"; } void CSettingDialog::setTypeEnable(int index) { qCDebug(ClientLogger) << "Setting type enable for account index:" << index; if (!gUosAccountItem) { qCDebug(ClientLogger) << "No UOS account item, cannot enable type editing"; return; } QString accountId = m_accountComboBox->itemData(index).toString(); qCDebug(ClientLogger) << "Account ID:" << accountId; AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(accountId); if (account->getAccount()->accountType() == DAccount::Account_Local || gUosAccountItem->isCanSyncShedule()) { if (account->getScheduleTypeList().count() < 20) { qCDebug(ClientLogger) << "Schedule type count below limit, enabling editing"; m_typeAddBtn->setEnabled(true); m_typeImportBtn->setEnabled(true); m_scheduleTypeWidget->setItemEnabled(true); } } else { qCDebug(ClientLogger) << "Non-local account or sync disabled, disabling type editing"; m_typeAddBtn->setEnabled(false); m_typeImportBtn->setEnabled(false); m_scheduleTypeWidget->setItemEnabled(false); } } QPair CSettingDialog::createFirstDayofWeekWidget(QObject *obj) { qCDebug(ClientLogger) << "Creating first day of week widget"; auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_firstDayofWeekWidget); // 获å�–åˆ�始值 option->setValue(option->defaultValue()); return optionWidget; } QPair CSettingDialog::createTimeTypeWidget(QObject *obj) { qCDebug(ClientLogger) << "Creating time type widget"; auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_timeTypeWidget); // 获å�–åˆ�始值 option->setValue(option->defaultValue()); return optionWidget; } QPair CSettingDialog::createAccountCombobox(QObject *obj) { qCDebug(ClientLogger) << "Creating account combobox"; auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_accountComboBox); return optionWidget; } QPair CSettingDialog::createSyncFreqCombobox(QObject *obj) { qCDebug(ClientLogger) << "Creating sync frequency combobox"; auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, m_syncFreqComboBox); return optionWidget; } QPair CSettingDialog::createSyncTagRadioButton(QObject *obj) { qCDebug(ClientLogger) << "Creating sync tag radio button"; auto option = qobject_cast(obj); DAccount::AccountState type = DAccount::Account_Calendar; if (option->key().endsWith("Account_Calendar")) type = DAccount::Account_Calendar; if (option->key().endsWith("Account_Setting")) type = DAccount::Account_Setting; SyncTagRadioButton *widget = new SyncTagRadioButton; widget->setObjectName(option->key().section('.', -1));//设置objectname为Account_Calendar 或 Account_Setting widget->setFixedWidth(16); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, widget); //iconLabel QLabel *iconLabel = new QLabel; iconLabel->setFixedSize(24, 24); #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) if (DAccount::Account_Calendar == type) iconLabel->setPixmap(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_sync_schedule_32px.svg")); if (DAccount::Account_Setting == type) iconLabel->setPixmap(DIcon::loadNxPixmap(":/icons/deepin/builtin/icons/dde_calendar_sync_setting_32px.svg")); #else // Qt5.11.3 兼容:使用 QIcon 直接加载(DTK5.4 å�Šä»¥ä¸‹ç‰ˆæœ¬ï¼‰ QIcon icon; if (DAccount::Account_Calendar == type) icon = QIcon(":/icons/deepin/builtin/icons/dde_calendar_sync_schedule_32px.svg"); if (DAccount::Account_Setting == type) icon = QIcon(":/icons/deepin/builtin/icons/dde_calendar_sync_setting_32px.svg"); iconLabel->setPixmap(icon.pixmap(24, 24)); #endif //iconWidget QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(iconLabel); layout->addWidget(optionWidget.first); layout->setContentsMargins(0, 1, 0, 1); QWidget *iconWidget = new QWidget; iconWidget->setLayout(layout); optionWidget.first = iconWidget; return optionWidget; } QWidget *CSettingDialog::createManualSyncButton(QObject *obj) { // qCDebug(ClientLogger) << "Creating manual sync button"; return m_manualSyncWidget; } QWidget *CSettingDialog::createJobTypeListView(QObject *) { // qCDebug(ClientLogger) << "Creating job type list view"; return m_scheduleTypeWidget; } DIconButton *CSettingDialog::createTypeAddButton() { // qCDebug(ClientLogger) << "Creating type add button"; return m_typeAddBtn; } QWidget *CSettingDialog::createControlCenterLink(QObject *obj) { qCDebug(ClientLogger) << "Creating control center link"; DLabel *myLabel = new DLabel(tr("Please go to the Control Center to change system settings"), this); myLabel->setTextFormat(Qt::RichText); myLabel->setFixedHeight(36); connect(myLabel, &DLabel::linkActivated, this, [this]{ qCDebug(ClientLogger) << "Opening control center"; QString datePage = ControlCenterPage; auto ver = DSysInfo::majorVersion().toInt(); if (ver > 23) { // v25 control center has changed the datetime page. datePage = "system/datetime"; qCDebug(ClientLogger) << "Using v25+ control center page:" << datePage; } this->m_controlCenterProxy->ShowPage(datePage); }); auto w = new QWidget(this); QHBoxLayout *layout = new QHBoxLayout(w); layout->setContentsMargins(0, 0, 10, 0); layout->setSpacing(0); layout->addStretch(10); layout->addWidget(myLabel, 1); w->setLayout(layout); return w; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/settingdialog.h000066400000000000000000000063141523260663500276420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SETTINGDIALOG_H #define SETTINGDIALOG_H #include "settingWidget/settingwidgets.h" #include "doanetworkdbus.h" #include "controlCenterProxy.h" #include #include #include DWIDGET_USE_NAMESPACE class CSettingDialog : public DSettingsDialog { Q_OBJECT public: explicit CSettingDialog(QWidget *parent = nullptr); private: QPair createFirstDayofWeekWidget(QObject *obj); QPair createTimeTypeWidget(QObject *obj); QPair createAccountCombobox(QObject *obj); QPair createSyncFreqCombobox(QObject *obj); QPair createSyncTagRadioButton(QObject *obj); QWidget *createManualSyncButton(QObject *obj); QWidget *createJobTypeListView(QObject *obj); DIconButton *createTypeAddButton(); QWidget *createControlCenterLink(QObject *obj); public slots: void slotGeneralSettingsUpdate(); void slotAccountUpdate(); void slotLogout(DAccount::Type); void slotLastSyncTimeUpdate(const QString &datetime); //å¸�户状æ€�å�‘é€�改å�˜ void slotAccountStateChange(); void slotFirstDayofWeekCurrentChanged(int index); void slotTimeTypeCurrentChanged(int index); void slotAccountCurrentChanged(int index); void slotTypeAddBtnClickded(); void slotTypeImportBtnClickded(); void slotSetUosSyncFreq(int freq); void slotUosManualSync(); void slotNetworkStateChange(DOANetWorkDBus::NetWorkState state); //æ›´æ–°å�Œæ­¥é¡¹æŒ‰é’®çжæ€� void slotSyncTagButtonUpdate(); //点击å�Œæ­¥é¡¹æ—¶ï¼Œæ›´æ–°uos账户状æ€� void slotSyncAccountStateUpdate(bool); private: void initFirstDayofWeekWidget(); void initTimeTypeWidget(); void initAccountComboBoxWidget(); void initTypeAddWidget(); void initScheduleTypeWidget(); void initSyncFreqWidget(); void initManualSyncButton(); void setFirstDayofWeek(int value); void setTimeType(int value); void accountUpdate(); void setTypeEnable(int index); private: void initWidget(); void initConnect(); void initData(); void initWidgetDisplayStatus(); void initView(); private: //一周首日 QWidget *m_firstDayofWeekWidget = nullptr; QComboBox *m_firstDayofWeekCombobox= nullptr; //æ—¶é—´æ ¼å¼� QWidget *m_timeTypeWidget = nullptr; QComboBox *m_timeTypeCombobox = nullptr; //å¸�户选择 QComboBox *m_accountComboBox = nullptr; //å�Œæ­¥é¢‘率 QComboBox *m_syncFreqComboBox = nullptr; DIconButton *m_typeAddBtn = nullptr; DIconButton *m_typeImportBtn = nullptr; JobTypeListView *m_scheduleTypeWidget = nullptr; //手动å�Œæ­¥æŒ‰é’®å’Œå�Œæ­¥æ—¶é—´æ˜¾ç¤º QLabel *m_syncTimeLabel = nullptr; QPushButton *m_syncBtn = nullptr; QWidget *m_manualSyncWidget = nullptr; DOANetWorkDBus *m_ptrNetworkState; SettingWidget::SyncTagRadioButton *m_radiobuttonAccountCalendar = nullptr; SettingWidget::SyncTagRadioButton *m_radiobuttonAccountSetting = nullptr; ControlCenterProxy *m_controlCenterProxy; }; #endif // SETTINGDIALOG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/timejumpdialog.cpp000066400000000000000000000207751523260663500303610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "timejumpdialog.h" #include "cschedulebasewidget.h" #include "commondef.h" #include #include TimeJumpDialog::TimeJumpDialog(ArrowDirection direction, QWidget *parent) : DArrowRectangle(direction, DArrowRectangle::FloatWindow, parent) { qCDebug(ClientLogger) << "Creating time jump dialog"; setWindowFlags(Qt::Popup); initView(); initConnect(); } void TimeJumpDialog::initView() { qCDebug(ClientLogger) << "Initializing time jump dialog view"; setRadius(16); //设置圆角大å°� setArrowWidth(60); //设置箭头宽度 setArrowHeight(30); //设置箭头高度 setRadiusArrowStyleEnable(true); //设置箭头圆角样å¼� setBackgroundColor(DBlurEffectWidget::AutoColor); //设置背景样å¼� setMargin(10); //设置边è·� m_yearEdit = new CTimeLineEdit(EditYear, this); m_monthEdit = new CTimeLineEdit(EditMonth, this); m_dayEdit = new CTimeLineEdit(EditDay, this); m_jumpButton = new DSuggestButton(tr("Go", "button"), this); m_yearEdit->setFixedSize(98, 36); m_monthEdit->setFixedSize(88, 36); m_dayEdit->setFixedSize(88, 36); m_jumpButton->setFixedSize(82, 36); QHBoxLayout *hLayout = new QHBoxLayout(this); hLayout->setContentsMargins(0, 0, 0, 0); hLayout->setSpacing(10); hLayout->addWidget(m_yearEdit); hLayout->addWidget(m_monthEdit); hLayout->addWidget(m_dayEdit); hLayout->addWidget(m_jumpButton); QWidget *wgt = new QWidget(); wgt->setLayout(hLayout); setContent(wgt); qCDebug(ClientLogger) << "Time jump dialog view initialized"; } void TimeJumpDialog::initConnect() { qCDebug(ClientLogger) << "Initializing time jump dialog connections"; connect(m_yearEdit, &CTimeLineEdit::signalNumChange, this, &TimeJumpDialog::slotEditNumChange); connect(m_monthEdit, &CTimeLineEdit::signalNumChange, this, &TimeJumpDialog::slotEditNumChange); connect(m_dayEdit, &CTimeLineEdit::signalNumChange, this, &TimeJumpDialog::slotEditNumChange); connect(m_yearEdit, &CTimeLineEdit::signalDateJump, this, &TimeJumpDialog::slotDateJump); connect(m_monthEdit, &CTimeLineEdit::signalDateJump, this, &TimeJumpDialog::slotDateJump); connect(m_dayEdit, &CTimeLineEdit::signalDateJump, this, &TimeJumpDialog::slotDateJump); connect(m_jumpButton, &QPushButton::clicked, this, &TimeJumpDialog::slotJumpButtonClicked); qCDebug(ClientLogger) << "Time jump dialog connections initialized"; } void TimeJumpDialog::initData() { qCDebug(ClientLogger) << "Initializing time jump dialog data"; m_yearEdit->setRange(1900, 2100); m_monthEdit->setRange(1, 12); //设置天编辑器é™�制范围 m_dayEdit->setRange(1, getMaxDayNum()); m_yearEdit->setNum(m_date.year()); m_monthEdit->setNum(m_date.month()); m_dayEdit->setNum(m_date.day()); resetEdietStepEnable(); } /** * @brief TimeJumpDialog::showPopup * 显示函数 * @param date åˆ�始显示的日期 * @param pos 显示ä½�ç½® */ void TimeJumpDialog::showPopup(const QDate &date, const QPoint &pos) { qCDebug(ClientLogger) << "Showing time jump dialog"; showPopup(date, pos.x(), pos.y()); } /** * @brief TimeJumpDialog::showPopup * 显示函数 * @param date åˆ�始显示事件 * @param x 显示ä½�ç½®xå��æ ‡ * @param y 显示ä½�ç½®yå��æ ‡ */ void TimeJumpDialog::showPopup(const QDate &date, int x, int y) { qCDebug(ClientLogger) << "Showing time jump dialog at position:" << x << "," << y; //ä¿�存时间 m_date = date; //åˆ�始化数æ�® initData(); //将焦点转移到年编辑器 m_yearEdit->clearFocus(); m_monthEdit->clearFocus(); m_dayEdit->clearFocus(); //m_yearEdit->selectAll(); //显示 show(x, y); } /** * @brief TimeJumpDialog::getMaxDayNum * 获å�–当月最大天数 */ int TimeJumpDialog::getMaxDayNum() { qCDebug(ClientLogger) << "Getting maximum day number for month:" << m_date.month(); static int dayNum[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int maxDay = dayNum[m_date.month() - 1]; if (m_date.month() == 2 && QDate::isLeapYear(m_date.year())) { qCDebug(ClientLogger) << "Leap year"; maxDay = 29; } return maxDay; } /** * @brief TimeJumpDialog::resetEdietStepEnable * é‡�置编辑器状æ€� */ void TimeJumpDialog::resetEdietStepEnable() { qCDebug(ClientLogger) << "Resetting editor step enable"; //将所有编辑器调整为å�¯ä¸Šä¸‹ç¼–辑状æ€� m_yearEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled | CTimeLineEdit::StepDownEnabled); m_monthEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled | CTimeLineEdit::StepDownEnabled); m_dayEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled | CTimeLineEdit::StepDownEnabled); //æ ¹æ�®æ¯�一级当å‰�值设置上下编辑状æ€� if (m_yearEdit->value() == m_yearEdit->minimum()) { qCDebug(ClientLogger) << "Year edit minimum"; m_yearEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled); if (m_monthEdit->value() == m_monthEdit->minimum()) { qCDebug(ClientLogger) << "Month edit minimum"; m_monthEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled); if (m_dayEdit->value() == m_dayEdit->minimum()) { m_dayEdit->setStepEnabled(CTimeLineEdit::StepUpEnabled); } } } else if (m_yearEdit->value() == m_yearEdit->maximum()) { qCDebug(ClientLogger) << "Year edit maximum"; m_yearEdit->setStepEnabled(CTimeLineEdit::StepDownEnabled); if (m_monthEdit->value() == m_monthEdit->maximum()) { qCDebug(ClientLogger) << "Month edit maximum"; m_monthEdit->setStepEnabled(CTimeLineEdit::StepDownEnabled); if (m_dayEdit->value() == m_dayEdit->maximum()) { m_dayEdit->setStepEnabled(CTimeLineEdit::StepDownEnabled); } } } } /** * @brief TimeJumpDialog::slotEditNumChange * 编辑器数字改å�˜äº‹ä»¶ * @param id 编辑器id * @param num 编辑器内容改å�˜å�Žçš„æ•°å­— */ void TimeJumpDialog::slotEditNumChange(int id, int num) { qCDebug(ClientLogger) << "Editing number changed:" << id << "," << num; switch (id) { case EditYear: //更改年 { qCDebug(ClientLogger) << "Year changed:" << num; //因直接设置一年的年月日å�¯èƒ½ä¼šé€ æˆ�更改月或年å�Žè¯¥æ—¥æœŸä¸�存在导致的日期错误, //所以å�˜åŒ–年或者月时先将日å�˜ä¸º1,å�Žç»­å†�æ ¹æ�®å®žé™…情况更改日日期 int day = m_date.day(); m_date.setDate(num, m_date.month(), 1); int maxDay = getMaxDayNum(); day = day > maxDay ? maxDay : day; m_date.setDate(m_date.year(), m_date.month(), day); m_dayEdit->setRange(1, maxDay); } break; case EditMonth: //更改月 { qCDebug(ClientLogger) << "Month changed:" << num; int day = m_date.day(); m_date.setDate(m_date.year(), num, 1); int maxDay = getMaxDayNum(); day = day > maxDay ? maxDay : day; m_date.setDate(m_date.year(), m_date.month(), day); m_dayEdit->setRange(1, maxDay); } break; case EditDay: //更改日 qCDebug(ClientLogger) << "Day changed:" << num; m_date.setDate(m_date.year(), m_date.month(), num); break; } qCDebug(ClientLogger) << "Resetting editor step enable"; resetEdietStepEnable(); } /** * @brief TimeJumpDialog::slotDateJump * 编辑器事件跳转事件 * @param id 编辑器id * @param num 跳转é‡� */ void TimeJumpDialog::slotDateJump(int id, int num) { qCDebug(ClientLogger) << "Date jump:" << id << "," << num; switch (id) { case EditYear: qCDebug(ClientLogger) << "Year jump:" << num; m_date = m_date.addYears(num); break; case EditMonth: qCDebug(ClientLogger) << "Month jump:" << num; m_date = m_date.addMonths(num); break; case EditDay: qCDebug(ClientLogger) << "Day jump:" << num; m_date = m_date.addDays(num); break; } //åˆ�始化数æ�® initData(); } /** * @brief TimeJumpDialog::slotJumpButtonClicked * 跳转按钮点击事件 */ void TimeJumpDialog::slotJumpButtonClicked() { qCDebug(ClientLogger) << "Jump button clicked"; //将焦点转移到button控件上,使在跳转时间å‰�正在编辑的edit控件触å�‘finished事件 m_jumpButton->setFocus(); //设置全局时间 CScheduleBaseWidget::setSelectDate(m_date); //éš�è—�控件 hide(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/dialog/timejumpdialog.h000066400000000000000000000026701523260663500300200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TIMEJUMPDIALOG_H #define TIMEJUMPDIALOG_H #include "ctimelineedit.h" #include #include #include DWIDGET_USE_NAMESPACE //时间跳转弹窗 class TimeJumpDialog : public DArrowRectangle { Q_OBJECT public: //时间编辑控件类型 enum EditType{ EditYear = 1, EditMonth, EditDay, }; explicit TimeJumpDialog(ArrowDirection direction, QWidget *parent = nullptr); //显示控件 void showPopup(const QDate& date, const QPoint& pos); void showPopup(const QDate& date, int x, int y); signals: public slots: //时间编辑器数字改å�˜äº‹ä»¶ void slotEditNumChange(int id, int num); //时间编辑器时间跳转时间 void slotDateJump(int id, int num); //跳转控件点击事件 void slotJumpButtonClicked(); private: void initView(); void initConnect(); void initData(); //获å�–当月最大天数 int getMaxDayNum(); //é‡�置编辑器状æ€� void resetEdietStepEnable(); private: QDate m_date; CTimeLineEdit *m_yearEdit = nullptr; //年编辑器 CTimeLineEdit *m_monthEdit = nullptr; //月编辑器 CTimeLineEdit *m_dayEdit = nullptr; //天编辑器 DSuggestButton *m_jumpButton = nullptr; //跳转控件 }; #endif // TIMEJUMPDIALOG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/000077500000000000000000000000001523260663500252365ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/calldaykeyleftdeal.cpp000066400000000000000000000023271523260663500315710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calldaykeyleftdeal.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" CAllDayKeyLeftDeal::CAllDayKeyLeftDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Left, scene) { qCDebug(ClientLogger) << "CAllDayKeyLeftDeal constructor initialized"; } bool CAllDayKeyLeftDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CAllDayKeyLeftDeal::focusItemDeal - Processing left key for date:" << item->getDate(); CWeekDayBackgroundItem *backgroundItem = dynamic_cast(item); backgroundItem->initState(); //如果是第一个则切æ�¢æ—¶é—´ scene->setActiveSwitching(true); if (backgroundItem->getLeftItem() == nullptr) { qCDebug(ClientLogger) << "Left item is null, switching to previous page"; scene->setPrePage(item->getDate().addDays(-1), true); } else { qCDebug(ClientLogger) << "Switching view to previous day"; scene->signalSwitchView(backgroundItem->getDate().addDays(-1), true); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/calldaykeyleftdeal.h000066400000000000000000000010521523260663500312300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALLDAYKEYLEFTDEAL_H #define CALLDAYKEYLEFTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CAllDayKeyLeftDeal class * 全体左方å�‘键处ç�† */ class CAllDayKeyLeftDeal : public CKeyPressDealBase { public: explicit CAllDayKeyLeftDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CALLDAYKEYLEFTDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/calldaykeyrightdeal.cpp000066400000000000000000000023331523260663500317510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calldaykeyrightdeal.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" CAllDayKeyRightDeal::CAllDayKeyRightDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Right, scene) { qCDebug(ClientLogger) << "CAllDayKeyRightDeal constructor initialized"; } bool CAllDayKeyRightDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CAllDayKeyRightDeal::focusItemDeal - Processing right key for date:" << item->getDate(); CWeekDayBackgroundItem *backgroundItem = dynamic_cast(item); backgroundItem->initState(); //如果没有下一个则切æ�¢æ—¶é—´ scene->setActiveSwitching(true); if (backgroundItem->getRightItem() == nullptr) { qCDebug(ClientLogger) << "Right item is null, switching to next page"; scene->setNextPage(item->getDate().addDays(1), true); } else { qCDebug(ClientLogger) << "Switching view to next day"; scene->signalSwitchView(backgroundItem->getDate().addDays(1), true); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/calldaykeyrightdeal.h000066400000000000000000000010271523260663500314150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALLDAYKEYRIGHTDEAL_H #define CALLDAYKEYRIGHTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CAllDayKeyRightDeal class * */ class CAllDayKeyRightDeal : public CKeyPressDealBase { public: explicit CAllDayKeyRightDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CALLDAYKEYRIGHTDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeydowndeal.cpp000066400000000000000000000020501523260663500304100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeydowndeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" #include CKeyDownDeal::CKeyDownDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Down, scene) { qCDebug(ClientLogger) << "CKeyDownDeal constructor initialized"; } bool CKeyDownDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CKeyDownDeal::focusItemDeal - Processing down key for date:" << item->getDate(); item->initState(); if (item->getDownItem() != nullptr) { qCDebug(ClientLogger) << "Down item exists, setting focus to down item"; scene->setCurrentFocusItem(item->getDownItem()); item->getDownItem()->setItemFocus(true); } else { qCDebug(ClientLogger) << "Down item is null, switching to next week"; scene->setNextPage(item->getDate().addDays(7)); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeydowndeal.h000066400000000000000000000010011523260663500300500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYDOWNDEAL_H #define CKEYDOWNDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyDownDeal class * 下方å�‘键处ç�† */ class CKeyDownDeal : public CKeyPressDealBase { public: explicit CKeyDownDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYDOWNDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyenabledeal.cpp000066400000000000000000000071051523260663500306750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyenabledeal.h" #include "cgraphicsscene.h" #include "scheduledlg.h" #include "graphicsItem/cscenebackgrounditem.h" #include "graphicsItem/draginfoitem.h" #include "myscheduleview.h" #include "commondef.h" #include CKeyEnableDeal::CKeyEnableDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Return, scene) { qCDebug(ClientLogger) << "CKeyEnableDeal constructor initialized"; } /** * @brief CKeyEnableDeal::focusItemDeal 焦点项处ç�† * @param item * @param scene * @return */ bool CKeyEnableDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CKeyEnableDeal::focusItemDeal - Processing return key for date:" << item->getDate(); bool result = false; CFocusItem *focusItem = item->getFocusItem(); if (focusItem != nullptr) { qCDebug(ClientLogger) << "Focus item exists, type:" << focusItem->getItemType(); result = true; QWidget *parentWidget = scene->views().at(0); switch (focusItem->getItemType()) { case CFocusItem::CBACK: { qCDebug(ClientLogger) << "Processing background item type"; CSceneBackgroundItem *backgroundItem = dynamic_cast(focusItem); if (backgroundItem != nullptr) { QDateTime createDateTime; //设置创建时间 createDateTime.setDate(backgroundItem->getDate()); createDateTime.setTime(QTime(0, 0, 0)); //如果为月视图背景则根æ�®æ˜¯å�¦ä¸ºå½“å‰�时间设置ä¸�一样的创建时间 if (backgroundItem->getItemOfView() == CSceneBackgroundItem::OnMonthView) { qCDebug(ClientLogger) << "Month view background item detected"; QDateTime currentDateTime = QDateTime::currentDateTime(); //如果为当å‰�时间则设置创建开始时间为当å‰�æ—¶é—´ if (backgroundItem->getDate() == currentDateTime.date()) { qCDebug(ClientLogger) << "Setting create time to current time"; createDateTime.setTime(currentDateTime.time()); } else { qCDebug(ClientLogger) << "Setting create time to 8:00"; createDateTime.setTime(QTime(8, 0, 0)); } } createSchedule(createDateTime, parentWidget); } } break; case CFocusItem::CITEM: { qCDebug(ClientLogger) << "Processing schedule item type"; DragInfoItem *scheduleItem = dynamic_cast(focusItem); CMyScheduleView dlg(scheduleItem->getData(), parentWidget); dlg.exec(); } break; default: { qCDebug(ClientLogger) << "Processing default item type, going to day view for date:" << focusItem->getDate(); scene->signalGotoDayView(focusItem->getDate()); } break; } } else { qCDebug(ClientLogger) << "No focus item found"; } return result; } /** * @brief CKeyEnableDeal::createSchedule 创建日程 * @param createDate * @param parent */ void CKeyEnableDeal::createSchedule(const QDateTime &createDate, QWidget *parent) { qCDebug(ClientLogger) << "CKeyEnableDeal::createSchedule - Creating schedule for datetime:" << createDate; CScheduleDlg dlg(1, parent); dlg.setDate(createDate); dlg.setAllDay(true); dlg.exec(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyenabledeal.h000066400000000000000000000012551523260663500303420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYENABLEDEAL_H #define CKEYENABLEDEAL_H #include "ckeypressdealbase.h" #include #include /** * @brief The CKeyEnableDeal class * 回车键处ç�† */ class CKeyEnableDeal : public CKeyPressDealBase { public: explicit CKeyEnableDeal(QGraphicsScene *scene = nullptr); protected: //焦点项处ç�† bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; private: //创建日程 static void createSchedule(const QDateTime &createDate, QWidget *parent); }; #endif // CKEYENABLEDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyleftdeal.cpp000066400000000000000000000020531523260663500303760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyleftdeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" #include CKeyLeftDeal::CKeyLeftDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Left, scene) { qCDebug(ClientLogger) << "CKeyLeftDeal constructor initialized"; } bool CKeyLeftDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CKeyLeftDeal::focusItemDeal - Processing left key for date:" << item->getDate(); item->initState(); if (item->getLeftItem() != nullptr) { qCDebug(ClientLogger) << "Left item exists, setting focus to left item"; scene->setCurrentFocusItem(item->getLeftItem()); item->getLeftItem()->setItemFocus(true); } else { qCDebug(ClientLogger) << "Left item is null, switching to previous day"; scene->setPrePage(item->getDate().addDays(-1)); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyleftdeal.h000066400000000000000000000010011523260663500300330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYLEFTDEAL_H #define CKEYLEFTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyLeftDeal class * 左方å�‘键处ç�† */ class CKeyLeftDeal : public CKeyPressDealBase { public: explicit CKeyLeftDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYLEFTDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeypressdealbase.cpp000066400000000000000000000027031523260663500314350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeypressdealbase.h" #include "cgraphicsscene.h" #include "graphicsItem/cscenebackgrounditem.h" #include "commondef.h" CKeyPressDealBase::CKeyPressDealBase(Qt::Key key, QGraphicsScene *scene) : m_key(key) , m_scene(scene) { // qCDebug(ClientLogger) << "CKeyPressDealBase constructor initialized with key:" << key; } CKeyPressDealBase::~CKeyPressDealBase() { // qCDebug(ClientLogger) << "CKeyPressDealBase destructor called for key:" << m_key; } /** * @brief CKeyPressDealBase::getKey 获å�–注册的key * @return */ Qt::Key CKeyPressDealBase::getKey() const { return m_key; } bool CKeyPressDealBase::dealEvent() { // qCDebug(ClientLogger) << "CKeyPressDealBase::dealEvent - Processing key event for key:" << m_key; CGraphicsScene *scene = qobject_cast(m_scene); if (scene != nullptr) { CSceneBackgroundItem *item = dynamic_cast(scene->getCurrentFocusItem()); if (item != nullptr) { // qCDebug(ClientLogger) << "Found focus item, delegating to focusItemDeal for date:" << item->getDate(); return focusItemDeal(item, scene); } else { // qCDebug(ClientLogger) << "No focus item found"; return false; } } // qCDebug(ClientLogger) << "Scene is null"; return false; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeypressdealbase.h000066400000000000000000000013021523260663500310740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYPRESSDEALBASE_H #define CKEYPRESSDEALBASE_H #include class QGraphicsScene; class CSceneBackgroundItem; class CGraphicsScene; class CKeyPressDealBase { public: explicit CKeyPressDealBase(Qt::Key key, QGraphicsScene *scene = nullptr); virtual ~CKeyPressDealBase(); //获å�–注册的key Qt::Key getKey() const; bool dealEvent(); protected: virtual bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) = 0; private: Qt::Key m_key; protected: QGraphicsScene *m_scene; }; #endif // CKEYPRESSDEALBASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeypressprxy.cpp000066400000000000000000000045751523260663500307100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeypressprxy.h" #include "commondef.h" #include CKeyPressPrxy::CKeyPressPrxy() { qCDebug(ClientLogger) << "CKeyPressPrxy constructor initialized"; } CKeyPressPrxy::~CKeyPressPrxy() { qCDebug(ClientLogger) << "CKeyPressPrxy destructor called, cleaning up" << m_keyEventMap.size() << "key handlers"; QMap::iterator iter = m_keyEventMap.begin(); for (; iter != m_keyEventMap.end(); ++iter) { delete iter.value(); } m_keyEventMap.clear(); } /** * @brief CKeyPressPrxy::keyPressDeal 键盘事件处ç�† * @param event * @return */ bool CKeyPressPrxy::keyPressDeal(int key) { qCDebug(ClientLogger) << "CKeyPressPrxy::keyPressDeal - Processing key:" << key; bool result = m_keyEventMap.contains(key); if (result) { //如果有注册对应的key事件 开始处ç�† qCDebug(ClientLogger) << "Found registered handler for key, delegating to handler"; result = m_keyEventMap[key]->dealEvent(); } else { qCDebug(ClientLogger) << "No handler registered for key:" << key; } return result; } /** * @brief CKeyPressPrxy::addkeyPressDeal 添加需è¦�处ç�†çš„键盘事件 * @param deal */ void CKeyPressPrxy::addkeyPressDeal(CKeyPressDealBase *deal) { if (deal != nullptr) { qCDebug(ClientLogger) << "CKeyPressPrxy::addkeyPressDeal - Adding handler for key:" << deal->getKey(); m_keyEventMap[deal->getKey()] = deal; } else { qCDebug(ClientLogger) << "CKeyPressPrxy::addkeyPressDeal - Attempted to add null handler"; } } /** * @brief CKeyPressPrxy::removeDeal 移除添加的键盘事件 * @param deal */ void CKeyPressPrxy::removeDeal(CKeyPressDealBase *deal) { if (deal != nullptr) { qCDebug(ClientLogger) << "CKeyPressPrxy::removeDeal - Removing handler for key:" << deal->getKey(); if (m_keyEventMap.contains(deal->getKey())) { m_keyEventMap.remove(deal->getKey()); delete deal; qCDebug(ClientLogger) << "Handler removed and deleted"; } else { qCDebug(ClientLogger) << "No handler found for key:" << deal->getKey(); } } else { qCDebug(ClientLogger) << "CKeyPressPrxy::removeDeal - Attempted to remove null handler"; } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeypressprxy.h000066400000000000000000000012131523260663500303370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYPRESSPRXY_H #define CKEYPRESSPRXY_H #include "ckeypressdealbase.h" #include #include class CKeyPressPrxy { public: explicit CKeyPressPrxy(); ~CKeyPressPrxy(); //键盘事件处ç�† bool keyPressDeal(int key); //添加需è¦�处ç�†çš„键盘事件 void addkeyPressDeal(CKeyPressDealBase *deal); //移除添加的键盘事件 void removeDeal(CKeyPressDealBase *deal); private: QMap m_keyEventMap {}; }; #endif // CKEYPRESSPRXY_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyrightdeal.cpp000066400000000000000000000020651523260663500305640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyrightdeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" #include CKeyRightDeal::CKeyRightDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Right, scene) { qCDebug(ClientLogger) << "CKeyRightDeal constructor initialized"; } bool CKeyRightDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CKeyRightDeal::focusItemDeal - Processing right key for date:" << item->getDate(); item->initState(); if (item->getRightItem() != nullptr) { qCDebug(ClientLogger) << "Right item exists, setting focus to right item"; scene->setCurrentFocusItem(item->getRightItem()); item->getRightItem()->setItemFocus(true); } else { qCDebug(ClientLogger) << "Right item is null, switching to next day"; scene->setNextPage(item->getDate().addDays(1)); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyrightdeal.h000066400000000000000000000010071523260663500302240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYRIGHTDEAL_H #define CKEYRIGHTDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyRightDeal class * å�³æ–¹å�‘键处ç�† */ class CKeyRightDeal : public CKeyPressDealBase { public: explicit CKeyRightDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYRIGHTDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyupdeal.cpp000066400000000000000000000020201523260663500300620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ckeyupdeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" #include CKeyUpDeal::CKeyUpDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Up, scene) { qCDebug(ClientLogger) << "CKeyUpDeal constructor initialized"; } bool CKeyUpDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CKeyUpDeal::focusItemDeal - Processing up key for date:" << item->getDate(); item->initState(); if (item->getUpItem() != nullptr) { qCDebug(ClientLogger) << "Up item exists, setting focus to up item"; scene->setCurrentFocusItem(item->getUpItem()); item->getUpItem()->setItemFocus(true); } else { qCDebug(ClientLogger) << "Up item is null, switching to previous week"; scene->setPrePage(item->getDate().addDays(-7)); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/ckeyupdeal.h000066400000000000000000000007641523260663500275440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CKEYUPDEAL_H #define CKEYUPDEAL_H #include "ckeypressdealbase.h" /** * @brief The CKeyUpDeal class * 上方å�‘键处ç�† */ class CKeyUpDeal : public CKeyPressDealBase { public: explicit CKeyUpDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CKEYUPDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/cscenetabkeydeal.cpp000066400000000000000000000031531523260663500312320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cscenetabkeydeal.h" #include "graphicsItem/cscenebackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" #include #include CSceneTabKeyDeal::CSceneTabKeyDeal(QGraphicsScene *scene) : CKeyPressDealBase(Qt::Key_Tab, scene) { qCDebug(ClientLogger) << "CSceneTabKeyDeal constructor initialized"; } bool CSceneTabKeyDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CSceneTabKeyDeal::focusItemDeal - Processing tab key for date:" << item->getDate(); CSceneBackgroundItem *nextItem = qobject_cast(item->setNextItemFocusAndGetNextItem()); if (nextItem == nullptr) { qCDebug(ClientLogger) << "No next item found, clearing focus"; scene->setCurrentFocusItem(nullptr); item->setItemFocus(false); return false; } else { qCDebug(ClientLogger) << "Found next item for date:" << nextItem->getDate(); CFocusItem *focusItem = nextItem->getFocusItem(); //如果当å‰�焦点显示ä¸�为背景则定ä½�到当å‰�焦点itemä½�ç½® if (focusItem->getItemType() != CFocusItem::CBACK) { qCDebug(ClientLogger) << "Focus item is not background, centering view on item"; QGraphicsView *view = scene->views().at(0); QPointF point(scene->width() / 2, focusItem->rect().y()); view->centerOn(point); } scene->setCurrentFocusItem(nextItem); return true; } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/cscenetabkeydeal.h000066400000000000000000000010631523260663500306750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCENETABKEYDEAL_H #define CSCENETABKEYDEAL_H #include "ckeypressdealbase.h" /** * @brief The CSceneTabKeyDeal class * 场景tab切æ�¢å¤„ç�† */ class CSceneTabKeyDeal : public CKeyPressDealBase { public: explicit CSceneTabKeyDeal(QGraphicsScene *scene = nullptr); protected: //焦点切æ�¢å¤„ç�† bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CSCENETABKEYDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/cweekdayscenetabkeydeal.cpp000066400000000000000000000036201523260663500326030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekdayscenetabkeydeal.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cgraphicsscene.h" #include "commondef.h" CWeekDaySceneTabKeyDeal::CWeekDaySceneTabKeyDeal(QGraphicsScene *scene) : CSceneTabKeyDeal(scene) { qCDebug(ClientLogger) << "CWeekDaySceneTabKeyDeal constructor initialized"; } bool CWeekDaySceneTabKeyDeal::focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) { qCDebug(ClientLogger) << "CWeekDaySceneTabKeyDeal::focusItemDeal - Processing tab key for date:" << item->getDate(); CWeekDayBackgroundItem *focusItem = dynamic_cast(item); if (focusItem != nullptr) { //如果当å‰�背景是焦点显示则切æ�¢åˆ°å�¦ä¸€ä¸ªè§†å›¾ if (focusItem->getItemFocus()) { qCDebug(ClientLogger) << "Background item has focus, switching to another view"; focusItem->setItemFocus(false); scene->setActiveSwitching(true); scene->signalSwitchView(focusItem->getDate()); return true; } else { //如果该背景上还有切æ�¢æ˜¾ç¤ºçš„æ—¥ç¨‹æ ‡ç­¾ if (focusItem->hasNextSubItem() || focusItem->showFocus()) { qCDebug(ClientLogger) << "Background item has sub-items, delegating to parent handler"; return CSceneTabKeyDeal::focusItemDeal(item, scene); } else { qCDebug(ClientLogger) << "No sub-items, initializing state and switching view"; focusItem->initState(); scene->setActiveSwitching(true); scene->signalSwitchView(focusItem->getDate()); return true; } } } else { qCDebug(ClientLogger) << "Failed to cast to CWeekDayBackgroundItem"; } return false; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/keypress/cweekdayscenetabkeydeal.h000066400000000000000000000012771523260663500322560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKDAYSCENETABKEYDEAL_H #define CWEEKDAYSCENETABKEYDEAL_H #include "cscenetabkeydeal.h" /** * @brief The CWeekDaySceneTabKeyDeal class * 周/日场景tab切æ�¢ */ class CWeekDaySceneTabKeyDeal : public CSceneTabKeyDeal { public: enum TabKeyType { ALLDayDeal, PartTimeDeal }; //全体视图处ç�†,é�žå…¨å¤©è§†å›¾å¤„ç�† public: explicit CWeekDaySceneTabKeyDeal(QGraphicsScene *scene = nullptr); protected: bool focusItemDeal(CSceneBackgroundItem *item, CGraphicsScene *scene) override; }; #endif // CWEEKDAYSCENETABKEYDEAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/main.cpp000066400000000000000000000121231523260663500250200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "environments.h" #include "calendarmainwindow.h" #include "exportedinterface.h" #include "configsettings.h" #include "accessible/accessible.h" #include "tabletconfig.h" #include "schedulemanager.h" #include "commondef.h" #include "logger.h" #include #include #include #include DWIDGET_USE_NAMESPACE DCORE_USE_NAMESPACE int main(int argc, char *argv[]) { // 日志处ç�†è¦�放在app之å‰�,å�¦åˆ™QApplication内部å�¯èƒ½è¿›è¡Œäº†æ—¥å¿—打å�°ï¼Œå¯¼è‡´çŽ¯å¢ƒå�˜é‡�设置ä¸�生效 CalendarLogger("org.deepin.dde.calendar.client"); // qCDebug(ClientLogger) << "Starting dde-calendar application"; //在root下或者é�ždeepin/uos环境下è¿�行ä¸�会å�‘生异常,需è¦�加上XDG_CURRENT_DESKTOP=Deepin环境å�˜é‡�ï¼› if (!QString(qgetenv("XDG_CURRENT_DESKTOP")).toLower().startsWith("deepin")) { // qCInfo(ClientLogger) << "Setting XDG_CURRENT_DESKTOP to Deepin environment"; setenv("XDG_CURRENT_DESKTOP", "Deepin", 1); } QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps); QApplication::setAttribute(Qt::AA_ForceRasterWidgets, true); //适é…�deepin-turboå�¯åŠ¨åŠ é€Ÿ DApplication *app = nullptr; #if(DTK_VERSION < DTK_VERSION_CHECK(5,4,0,0)) app = new DApplication(argc, argv); #else app = DApplication::globalApplication(argc, argv); #endif app->setAutoActivateWindows(true); //如果dtk版本为5.2.0.1以上则使用新的dtk接å�£ #if (DTK_VERSION > DTK_VERSION_CHECK(5, 2, 0, 1)) //设置为-1将永久等待 DGuiApplicationHelper::setSingleInstanceInterval(-1); #endif if (DGuiApplicationHelper::setSingleInstance(app->applicationName(), DGuiApplicationHelper::UserScope)) { // qCDebug(ClientLogger) << "Initializing application as single instance"; app->setOrganizationName("deepin"); app->setApplicationName("dde-calendar"); app->loadTranslator(); qCInfo(ClientLogger) << "Application initialized with name: dde-calendar, version:" << VERSION; #ifdef QT_DEBUG // 在开å�‘调试时使用项目内的翻译文件 auto tf = "../translations/dde-calendar_zh_CN"; // qCDebug(ClientLogger) << "load translate" << tf; QTranslator translator; translator.load(tf); app->installTranslator(&translator); #endif app->setApplicationVersion(VERSION); // meta information that necessary to create the about dialog. app->setProductName(QApplication::translate("CalendarWindow", "Calendar")); QIcon t_icon = QIcon::fromTheme("dde-calendar"); app->setProductIcon(t_icon); app->setApplicationDescription(QApplication::translate("CalendarWindow", "Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ")); app->setApplicationAcknowledgementPage("https://www.deepin.org/acknowledgments/dde-calendar"); //命令行å�‚æ•° QCommandLineParser _commandLine; //建立命令行解æž� _commandLine.addHelpOption(); //增加-h/-helpè§£æž�命令 _commandLine.addVersionOption(); //增加-v è§£æž�命令 _commandLine.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); _commandLine.process(*app); app->setAutoActivateWindows(true); // Initialize logging system CalendarLogger::initLogger(); bool isOk = false; int viewtype = CConfigSettings::getInstance()->value("base.view").toInt(&isOk); if (!isOk) viewtype = 2; //为了与è€�版本é…�置兼容 Calendarmainwindow ww(viewtype - 1); ExportedInterface einterface(&ww); einterface.registerAction("CREATE", "create a new schedule"); einterface.registerAction("VIEW", "check a date on calendar"); einterface.registerAction("QUERY", "find a schedule information"); einterface.registerAction("CANCEL", "cancel a schedule"); qCDebug(ClientLogger) << "DBus actions registered: CREATE, VIEW, QUERY, CANCEL"; QDBusConnection dbus = QDBusConnection::sessionBus(); //如果注册失败打å�°å‡ºå¤±è´¥ä¿¡æ�¯ if (!dbus.registerService("com.deepin.Calendar")) { qCWarning(ClientLogger) << "Failed to register DBus service:" << dbus.lastError().message(); } if (!dbus.registerObject("/com/deepin/Calendar", &ww)) { qCWarning(ClientLogger) << "Failed to register DBus object:" << dbus.lastError().message(); } ww.slotTheme(DGuiApplicationHelper::instance()->themeType()); ww.show(); // Defer account data loading to event loop for faster startup QMetaObject::invokeMethod(gAccountManager, &AccountManager::resetAccount, Qt::QueuedConnection); qCInfo(ClientLogger) << "dde-calendar application started successfully"; return app->exec(); } qCWarning(ClientLogger) << "Application startup failed: Another instance is already running"; return 0; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/scheduleTask/000077500000000000000000000000001523260663500260105ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/scheduleTask/cscheduleoperation.cpp000066400000000000000000000526461523260663500324110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cscheduleoperation.h" #include "commondef.h" #include "schedulectrldlg.h" #include "configsettings.h" #include "dcalendarddialog.h" #include "cdynamicicon.h" #include "accountmanager.h" #include "lunarmanager.h" #include "doanetworkdbus.h" CScheduleOperation::CScheduleOperation(const AccountItem::Ptr &accountItem, QWidget *parent) : QObject(parent) , m_accountItem(accountItem) , m_widget(parent) { //如果为空默认设置为本地å¸�户 if (m_accountItem.isNull()) { m_accountItem = gAccountManager->getLocalAccountItem(); } } CScheduleOperation::CScheduleOperation(const QString &scheduleTypeID, QWidget *parent) : QObject(parent) , m_accountItem(gAccountManager->getAccountItemByScheduleTypeId(scheduleTypeID)) , m_widget(parent) { //如果为空默认设置为本地å¸�户 if (m_accountItem.isNull()) { qCWarning(ClientLogger) << "Cannot get account by schedule type, scheduleTypeID:" << scheduleTypeID << "using local account"; m_accountItem = gAccountManager->getLocalAccountItem(); } } /** * @brief CScheduleOperation::createSchedule 创建日程 * @param scheduleInfo */ bool CScheduleOperation::createSchedule(const DSchedule::Ptr &scheduleInfo) { //如果为农历且é‡�å¤�类型为æ¯�å¹´ if (scheduleInfo->lunnar() && scheduleInfo->getRRuleType() == DSchedule::RRule_Year) { qCDebug(ClientLogger) << "Showing lunar message dialog for yearly lunar schedule"; lunarMessageDialogShow(scheduleInfo); } m_accountItem->createSchedule(scheduleInfo); return true; } /** * @brief CScheduleOperation::changeSchedule 修改日程 * @param newInfo * @param oldInfo */ bool CScheduleOperation::changeSchedule(const DSchedule::Ptr &newInfo, const DSchedule::Ptr &oldInfo) { bool _result {false}; if (newInfo->getRRuleType() == DSchedule::RRule_None && newInfo->getRRuleType() == oldInfo->getRRuleType()) { qCDebug(ClientLogger) << "Updating non-recurring schedule"; m_accountItem->updateSchedule(newInfo); _result = true; } else { //如果切æ�¢äº†å…¨å¤©çжæ€�则æ��醒是å�¦ä¿®æ”¹å…¨éƒ¨ if (newInfo->allDay() != oldInfo->allDay()) { qCDebug(ClientLogger) << "All-day status changed from" << oldInfo->allDay() << "to" << newInfo->allDay(); CScheduleCtrlDlg msgBox(m_widget); msgBox.setText( tr("All occurrences of a repeating event must have the same all-day status.")); msgBox.setInformativeText(tr("Do you want to change all occurrences?")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Change All"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled all-day status change"; _result = false; } else if (msgBox.clickButton() == 1) { //更新日程 qCDebug(ClientLogger) << "User confirmed changing all occurrences"; showLunarMessageDialog(newInfo, oldInfo); m_accountItem->updateSchedule(newInfo); _result = true; } } else if (newInfo->getRRuleType() != oldInfo->getRRuleType()) { //修改é‡�å¤�规则 qCDebug(ClientLogger) << "Recurrence rule changed from" << oldInfo->getRRuleType() << "to" << newInfo->getRRuleType(); CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are changing the repeating rule of this event.")); msgBox.setInformativeText(tr("Do you want to change all occurrences?")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Change All"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled recurrence rule change"; _result = false; } else if (msgBox.clickButton() == 1) { //更新日程 qCDebug(ClientLogger) << "User confirmed changing all occurrences"; showLunarMessageDialog(newInfo, oldInfo); m_accountItem->updateSchedule(newInfo); _result = true; } } else { _result = changeRecurInfo(newInfo, oldInfo); } } return _result; } /** * @brief CScheduleOperation::deleteSchedule 删除日程 * @param scheduleInfo */ bool CScheduleOperation::deleteSchedule(const DSchedule::Ptr &scheduleInfo) { bool _restuleBool {false}; //如果为普通日程 if (scheduleInfo->getRRuleType() == DSchedule::RRule_None) { qCDebug(ClientLogger) << "Deleting non-recurring schedule"; CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are deleting an event.")); msgBox.setInformativeText(tr("Are you sure you want to delete this event?")); msgBox.addPushButton(tr("Cancel", "button"), true); msgBox.addWaringButton(tr("Delete", "button"), true); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled schedule deletion"; return false; } else if (msgBox.clickButton() == 1) { qCDebug(ClientLogger) << "User confirmed schedule deletion"; m_accountItem->deleteScheduleByID(scheduleInfo->uid()); _restuleBool = true; } } else { //获å�–原始日程 DSchedule::Ptr primevalSchedule = m_accountItem->getScheduleByScheduleID(scheduleInfo->uid()); //如果为é‡�å¤�日程的第一个 int num = DSchedule::numberOfRepetitions(primevalSchedule, scheduleInfo->dtStart()); qCDebug(ClientLogger) << "Deleting recurring schedule, occurrence number:" << num; if (num == 1) { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are deleting an event.")); msgBox.setInformativeText(tr("Do you want to delete all occurrences of this event, or only the selected occurrence?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("Delete All")); msgBox.addWaringButton(tr("Delete Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled recurring schedule deletion"; return false; } else if (msgBox.clickButton() == 1) { //删除所有日程 qCDebug(ClientLogger) << "User confirmed deleting all occurrences"; m_accountItem->deleteScheduleByID(scheduleInfo->uid()); _restuleBool = true; } else if (msgBox.clickButton() == 2) { //仅删除此日程 qCDebug(ClientLogger) << "User confirmed deleting only this occurrence"; primevalSchedule->recurrence()->addExDateTime(scheduleInfo->dtStart()); m_accountItem->updateSchedule(primevalSchedule); _restuleBool = true; } } else { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are deleting an event.")); msgBox.setInformativeText(tr("Do you want to delete this and all future occurrences of this event, or only the selected occurrence?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("Delete All Future Events")); msgBox.addWaringButton(tr("Delete Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled recurring schedule deletion"; return false; } else if (msgBox.clickButton() == 1) { //删除选中日程å�Šä¹‹å�Žçš„æ—¥ç¨‹ //修改é‡�å¤�规则 qCDebug(ClientLogger) << "User confirmed deleting this and future occurrences"; QList &&exDt = primevalSchedule->recurrence()->exDateTimes(); changeRepetitionRule(primevalSchedule, scheduleInfo); //如果修改å�Žçš„æ—¥ç¨‹ä¸ºæ™®é€šæ—¥ç¨‹ä¸”忽略列表内包å�«æ—¥ç¨‹å¼€å§‹æ—¶é—´åˆ™åˆ é™¤è¯¥æ—¥ç¨‹ if (primevalSchedule->getRRuleType() == DSchedule::RRule_None && exDt.contains(primevalSchedule->dtStart())) { //删除日程 qCDebug(ClientLogger) << "Deleting modified schedule as it became non-recurring"; m_accountItem->deleteScheduleByID(primevalSchedule->uid()); } else { //更新日程 qCDebug(ClientLogger) << "Updating modified recurring schedule"; m_accountItem->updateSchedule(primevalSchedule); } _restuleBool = true; } else if (msgBox.clickButton() == 2) { qCDebug(ClientLogger) << "User confirmed deleting only this occurrence"; primevalSchedule->recurrence()->addExDateTime(scheduleInfo->dtStart()); m_accountItem->updateSchedule(primevalSchedule); _restuleBool = true; } } } return _restuleBool; } /** * @brief CScheduleOperation::deleteOnlyInfo 删除日程 仅删除此日程 ä¸�弹框æ��醒 * @param scheduleInfo */ void CScheduleOperation::deleteOnlyInfo(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "Deleting single occurrence of schedule:" << scheduleInfo->uid(); //如果为纪念日或节日则ä¸�处ç�† if (isFestival(scheduleInfo)) { qCDebug(ClientLogger) << "Skipping deletion of festival schedule"; return; } //如果为普通日程则删除 if (scheduleInfo->recurs()) { //仅删除此日程 qCDebug(ClientLogger) << "Adding exception date for recurring schedule"; DSchedule::Ptr newschedule = m_accountItem->getScheduleByScheduleID(scheduleInfo->uid()); newschedule->recurrence()->addExDateTime(scheduleInfo->dtStart()); m_accountItem->updateSchedule(newschedule); } else { qCDebug(ClientLogger) << "Deleting non-recurring schedule"; m_accountItem->deleteScheduleByID(scheduleInfo->uid()); } } /** * @brief CScheduleOperation::ChangeRecurInfo 修改é‡�å¤�日程 * @param newinfo * @param oldinfo */ bool CScheduleOperation::changeRecurInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { bool _result{false}; //如果为é‡�å¤�类型第一个 // 获å�–原始数æ�® DSchedule::Ptr primevalScheduleData = m_accountItem->getScheduleByScheduleID(oldinfo->uid()); int primevalDuration = primevalScheduleData->recurrence()->duration(); int num = DSchedule::numberOfRepetitions(primevalScheduleData, oldinfo->dtStart()); qCDebug(ClientLogger) << "Recurring schedule occurrence number:" << num << "duration:" << primevalDuration; if (num == 1) { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are changing a repeating event.")); msgBox.setInformativeText( tr("Do you want to change only this occurrence of the event, or all " "occurrences?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("All")); msgBox.addsuggestButton(tr("Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled recurring schedule change"; _result = false; } else if (msgBox.clickButton() == 1) { //修改所有日程 //如果此é‡�å¤�日程å�ªæœ‰å®ƒä¸€ä¸ªåˆ™å°†ä¿®æ”¹ä¸ºæ™®é€šæ—¥ç¨‹ qCDebug(ClientLogger) << "User confirmed changing all occurrences"; DSchedule::Ptr _scheduleDataInfo(newinfo->clone()); //更新日程 showLunarMessageDialog(_scheduleDataInfo, oldinfo); //如果为é�žå…¨å¤©ä¸”结æ�ŸäºŽæ—¥æœŸåˆ™æ›´æ–°ç»“æ�Ÿæ—¶é—´ if(!_scheduleDataInfo->allDay() && _scheduleDataInfo->recurrence()->duration() ==0){ QDateTime dtEnd(_scheduleDataInfo->recurrence()->endDateTime().date(),_scheduleDataInfo->dtStart().time()); _scheduleDataInfo->recurrence()->setEndDateTime(dtEnd); } m_accountItem->updateSchedule(_scheduleDataInfo); _result = true; } else if (msgBox.clickButton() == 2) { //仅修改此日程 qCDebug(ClientLogger) << "User confirmed changing only this occurrence"; _result = changeOnlyInfo(newinfo, oldinfo); } } else { CScheduleCtrlDlg msgBox(m_widget); msgBox.setText(tr("You are changing a repeating event.")); msgBox.setInformativeText( tr("Do you want to change only this occurrence of the event, or this and " "all future occurrences?")); msgBox.addPushButton(tr("Cancel", "button")); msgBox.addPushButton(tr("All Future Events")); msgBox.addsuggestButton(tr("Only This Event")); msgBox.exec(); if (msgBox.clickButton() == 0) { qCDebug(ClientLogger) << "User cancelled recurring schedule change"; _result = false; } else if (msgBox.clickButton() == 1) { // æ ¹æ�®id获å�–日程并修改 //修改é‡�å¤�规则 qCDebug(ClientLogger) << "User confirmed changing this and future occurrences"; QList &&exDt = primevalScheduleData->recurrence()->exDateTimes(); changeRepetitionRule(primevalScheduleData, oldinfo); //如果修改å�Žçš„æ—¥ç¨‹ä¸ºæ™®é€šæ—¥ç¨‹ä¸”忽略列表内包å�«æ—¥ç¨‹å¼€å§‹æ—¶é—´åˆ™åˆ é™¤è¯¥æ—¥ç¨‹ if (primevalScheduleData->getRRuleType() == DSchedule::RRule_None &&exDt.contains(primevalScheduleData->dtStart())) { //删除日程 qCDebug(ClientLogger) << "Deleting modified schedule as it became non-recurring"; m_accountItem->deleteScheduleByID(primevalScheduleData->uid()); } else { //更新日程 qCDebug(ClientLogger) << "Updating modified recurring schedule"; m_accountItem->updateSchedule(primevalScheduleData); } //创建日程 DSchedule::Ptr newschedule(newinfo->clone()); if (primevalDuration > 0) { //如果结æ�Ÿä¸Žæ¬¡æ•° int newDuration = primevalDuration - num + 1; //如果é‡�å¤�次数大于1 if (newDuration > 1) { qCDebug(ClientLogger) << "Setting new recurrence duration:" << newDuration; newschedule->recurrence()->setDuration(newDuration); } else { qCDebug(ClientLogger) << "Converting to non-recurring schedule"; newschedule->setRRuleType(DSchedule::RRule_None); } newschedule->setRecurrenceId(QDateTime()); } else if (primevalDuration ==0) { //结æ�ŸäºŽæ—¥æœŸ QDateTime dtEnd(newschedule->recurrence()->endDateTime().date(),newschedule->dtStart().time()); newschedule->recurrence()->setEndDateTime(dtEnd); } //如果结æ�Ÿä¸ºæ°¸ä¸�和时间则ä¸�需è¦�修改 //创建新日程 //如果为农历且é‡�å¤�类型为æ¯�å¹´ if (newschedule->lunnar() && DSchedule::RRule_Year == newschedule->getRRuleType()) { qCDebug(ClientLogger) << "Showing lunar message dialog for yearly lunar schedule"; lunarMessageDialogShow(newschedule); } m_accountItem->createSchedule(newschedule); _result = true; } else if (msgBox.clickButton() == 2) { qCDebug(ClientLogger) << "User confirmed changing only this occurrence"; _result = changeOnlyInfo(newinfo, oldinfo); } } return _result; } /** * @brief CScheduleOperation::ChangeOnlyInfo 修改é‡�å¤�日程,仅修改此日程 * @param newinfo * @param oldinfo */ bool CScheduleOperation::changeOnlyInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { qCDebug(ClientLogger) << "Changing only this occurrence of schedule:" << oldinfo->uid(); //修改日程 DSchedule::Ptr newschedule(newinfo->clone()); newschedule->setRRuleType(DSchedule::RRule_None); newschedule->setRecurrenceId(QDateTime()); //创建日程 m_accountItem->createSchedule(newschedule); //获å�–原始信æ�¯ DSchedule::Ptr updatescheduleData = m_accountItem->getScheduleByScheduleID(oldinfo->uid()); updatescheduleData->recurrence()->addExDateTime(oldinfo->dtStart()); //更新原始信æ�¯ m_accountItem->updateSchedule(updatescheduleData); return true; } /** * @brief CScheduleOperation::changeRepetitionRule 修改日程é‡�å¤�规则 * @param newinfo * @param oldinfo */ void CScheduleOperation::changeRepetitionRule(DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { int num = DSchedule::numberOfRepetitions(newinfo, oldinfo->dtStart()); //修改é‡�å¤�规则 if (newinfo->recurrence()->duration() > 0) { //如果为结æ�Ÿä¸Žæ¬¡æ•°åˆ™ä¿®æ”¹ç»“æ�Ÿæ¬¡æ•° int duration = num - 1; if (duration > 1) { qCDebug(ClientLogger) << "Setting new recurrence duration:" << duration; newinfo->recurrence()->setDuration(duration); } else { //结æ�Ÿæ¬¡æ•°å°�于等于0表示ä¸�é‡�å¤�,设置为普通日程 qCDebug(ClientLogger) << "Converting to non-recurring schedule"; newinfo->setRRuleType(DSchedule::RRule_None); } } else { //如果该日程结æ�Ÿç±»åž‹ä¸ºæ°¸ä¸�和结æ�ŸäºŽæ—¥æœŸåˆ™ä¿®æ”¹ç»“æ�Ÿæ—¥æœŸ qCDebug(ClientLogger) << "Setting end date to:" << oldinfo->dtStart().addDays(-1); newinfo->recurrence()->setDuration(0); QDateTime dtEnd(oldinfo->dtStart().addDays(-1)); newinfo->recurrence()->setEndDateTime(dtEnd); } } void CScheduleOperation::lunarMessageDialogShow(const DSchedule::Ptr &newinfo) { //如果该日程为闰月日程,因为对应的闰月需è¦�间隔好多年,所以添加对应的æ��示信æ�¯ CaHuangLiDayInfo huangLiInfo = gLunarManager->getHuangLiDay(newinfo->dtStart().date());; if (huangLiInfo.mLunarMonthName.contains("é—°")) { qCDebug(ClientLogger) << "Showing leap month warning for lunar schedule:" << newinfo->summary(); DCalendarDDialog prompt(m_widget); prompt.setIcon(QIcon(CDynamicIcon::getInstance()->getPixmap())); prompt.setDisplayPosition(DAbstractDialog::Center); prompt.setMessage(tr("You have selected a leap month, and will be reminded according to the rules of the lunar calendar.")); prompt.addButton(tr("OK", "button"), true, DDialog::ButtonNormal); if (m_widget) { //获å�–父窗å�£çš„中心å��æ ‡ const QPoint global = m_widget->mapToGlobal(m_widget->rect().center()); //相对父窗å�£å±…中显示 prompt.move(global.x() - prompt.width() / 2, global.y() - prompt.height() / 2); } prompt.exec(); } } void CScheduleOperation::showLunarMessageDialog(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo) { //在阴历æ¯�å¹´é‡�å¤�情况下如果修改了开始时间或é‡�å¤�规则 //农历日程é‡�å¤�æ¯�年闰月是å�¦æ��示 if (newinfo->lunnar() && DSchedule::RRule_Year == newinfo->getRRuleType()) { if (oldinfo->dtStart().date() != newinfo->dtStart().date() || oldinfo->getRRuleType() != newinfo->getRRuleType() || oldinfo->lunnar() != newinfo->lunnar()) { //判断是å�¦ä¸ºé—°æœˆ lunarMessageDialogShow(newinfo); } } } bool CScheduleOperation::isFestival(const DSchedule::Ptr &schedule) { //判断是å�¦ä¸ºèŠ‚å�‡æ—¥æ—¥ç¨‹ AccountItem::Ptr account = gAccountManager->getAccountItemByScheduleTypeId(schedule->scheduleTypeID()); if (account.isNull()) { qCWarning(ClientLogger) << "Cannot get account by schedule type, scheduleTypeID:" << schedule->scheduleTypeID(); return false; } DScheduleType::Ptr scheduleType = gAccountManager->getScheduleTypeByScheduleTypeId(schedule->scheduleTypeID()); //如果为本地日程且日程类型为None则表示为节å�‡æ—¥æ—¥ç¨‹ return account->getAccount()->accountType() == DAccount::Account_Local && scheduleType->privilege() == 0; } bool CScheduleOperation::scheduleIsInvariant(const DSchedule::Ptr &schedule) { //如果为网络å¸�户,且没有网络或者å¸�户开关关闭 AccountItem::Ptr accountItem = gAccountManager->getAccountItemByScheduleTypeId(schedule->scheduleTypeID()); if (accountItem.isNull()) { qCWarning(ClientLogger) << "Cannot get account by schedule type, scheduleTypeID:" << schedule->scheduleTypeID(); return false; } DAccount::Ptr account = accountItem->getAccount(); if (account->accountType() == DAccount::Account_UnionID) { DOANetWorkDBus netManger; //网络判断 //如果uid日历å�Œæ­¥å…³é—­åˆ™æ—¥ç¨‹ä¸�å�¯ä¿®æ”¹ if (netManger.getNetWorkState() != DOANetWorkDBus::Active || !account->accountState().testFlag(DAccount::Account_Open) || !account->accountState().testFlag(DAccount::Account_Calendar)) { return true; } } return false; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/scheduleTask/cscheduleoperation.h000066400000000000000000000037711523260663500320510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEOPERATION_H #define CSCHEDULEOPERATION_H #include "scheduledatamanage.h" #include "accountitem.h" #include #include class CScheduleDBus; /** * @brief The CScheduleOperation class * 日程æ“�作类,创建,修改和删除日程 */ class CScheduleOperation : public QObject { Q_OBJECT public: explicit CScheduleOperation(const AccountItem::Ptr &accountItem = nullptr, QWidget *parent = nullptr); explicit CScheduleOperation(const QString &scheduleTypeID, QWidget *parent = nullptr); //创建日程 bool createSchedule(const DSchedule::Ptr &scheduleInfo); //修改日程 bool changeSchedule(const DSchedule::Ptr &newInfo, const DSchedule::Ptr &oldInfo); //删除日程 false :å�–消删除 true: 确定删除 bool deleteSchedule(const DSchedule::Ptr &scheduleInfo); //删除日程 仅删除此日程 ä¸�弹框æ��醒 void deleteOnlyInfo(const DSchedule::Ptr &scheduleInfo); //是å�¦ä¸ºèŠ‚å�‡æ—¥æ—¥ç¨‹ static bool isFestival(const DSchedule::Ptr &schedule); //日程是ä¸�å�¯ä¿®æ”¹çš„ static bool scheduleIsInvariant(const DSchedule::Ptr &schedule); private: //修改é‡�å¤�日程 bool changeRecurInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); //修改é‡�å¤�日程,仅修改此日程 bool changeOnlyInfo(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); //修改é‡�å¤�规则 void changeRepetitionRule(DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); //农历æ¯�年闰月æ��示信æ�¯ void lunarMessageDialogShow(const DSchedule::Ptr &newinfo); //æ ¹æ�®æ–°æ—§æ—¥ç¨‹ä¿¡æ�¯åˆ¤æ–­æ˜¯å�¦æ��示 void showLunarMessageDialog(const DSchedule::Ptr &newinfo, const DSchedule::Ptr &oldinfo); signals: public slots: private: AccountItem::Ptr m_accountItem; QWidget *m_widget; }; #endif // CSCHEDULEOPERATION_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/shortcut.cpp000066400000000000000000000033321523260663500257510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "shortcut.h" #include "commondef.h" Shortcut::Shortcut(QObject *parent) : QObject(parent) { qCDebug(ClientLogger) << "Shortcut constructor start"; ShortcutGroup group1; ShortcutGroup group2; ShortcutGroup group3; ShortcutGroup group4; group1.groupName = ""; group1.groupItems << ShortcutItem(tr("Help"), "F1") << ShortcutItem(tr("Delete event"), "Delete"); group2.groupName = ""; group2.groupItems << ShortcutItem(tr("Copy"), "Ctrl+C") << ShortcutItem(tr("Cut"), "Ctrl+X") << ShortcutItem(tr("Paste"), "Ctrl+V") ; group3.groupName = ""; group3.groupItems << ShortcutItem(tr("Delete"), "Delete") << ShortcutItem(tr("Select all"), "Ctrl+A"); m_shortcutGroups << group1 << group2 << group3; //convert to json object QJsonArray jsonGroups; for (auto scg : m_shortcutGroups) { QJsonObject jsonGroup; QJsonArray jsonGroupItems; for (auto sci : scg.groupItems) { QJsonObject jsonItem; jsonItem.insert("name", sci.name); jsonItem.insert("value", sci.value); jsonGroupItems.append(jsonItem); } jsonGroup.insert("groupItems", jsonGroupItems); jsonGroups.append(jsonGroup); } m_shortcutObj.insert("shortcut", jsonGroups); qCDebug(ClientLogger) << "Shortcut constructor end"; } QString Shortcut::toStr() { // qCDebug(ClientLogger) << "Converting shortcut object to JSON string"; QJsonDocument doc(m_shortcutObj); return doc.toJson().data(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/shortcut.h000066400000000000000000000012711523260663500254160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SHORTCUT_H #define SHORTCUT_H #include #include #include #include struct ShortcutItem { QString name; QString value; ShortcutItem(QString n, QString v): name(n), value(v) {} }; struct ShortcutGroup { QString groupName; QList groupItems; }; class Shortcut : public QObject { Q_OBJECT public: explicit Shortcut(QObject *parent = 0); QString toStr(); private: QJsonObject m_shortcutObj; QList m_shortcutGroups; }; #endif // SHORTCUT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/singleton.h000066400000000000000000000010671523260663500255500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2016 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once #include using namespace std; namespace DCalendar { template class DSingleton { public: static inline T *instance() { static T *_instance = new T; return _instance; } protected: DSingleton(void) {} ~DSingleton(void) {} DSingleton(const DSingleton &) {} DSingleton &operator= (const DSingleton &) { return *this; } }; } // namespace DCalendar linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/tabletconfig.cpp000066400000000000000000000013301523260663500265330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "tabletconfig.h" #include "commondef.h" //默认ä¸�为平æ�¿æ¨¡å¼� bool TabletConfig::m_isTablet = false; TabletConfig::TabletConfig(QObject *parent) : QObject(parent) { // qCDebug(ClientLogger) << "TabletConfig constructor"; } bool TabletConfig::isTablet() { // qCDebug(ClientLogger) << "TabletConfig::isTablet called, current state:" << m_isTablet; return m_isTablet; } void TabletConfig::setIsTablet(bool isTablet) { // qCDebug(ClientLogger) << "TabletConfig::setIsTablet called, old state:" << m_isTablet << "new state:" << isTablet; m_isTablet = isTablet; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/tabletconfig.h000066400000000000000000000010551523260663500262040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TABLETCONFIG_H #define TABLETCONFIG_H #include /** * @brief The TabletConfig class * å¹³æ�¿é…�置类 */ class TabletConfig : public QObject { Q_OBJECT public: explicit TabletConfig(QObject *parent = nullptr); static bool isTablet(); static void setIsTablet(bool isTablet); signals: public slots: private: static bool m_isTablet; //是å�¦ä¸ºå¹³æ�¿æ¨¡å¼� }; #endif // TABLETCONFIG_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/000077500000000000000000000000001523260663500243435ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/alldayeventview.cpp000066400000000000000000000432301523260663500302540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "alldayeventview.h" #include "schedulecoormanage.h" #include "schedulectrldlg.h" #include "scheduledlg.h" #include "myscheduleview.h" #include "scheduledatamanage.h" #include "constants.h" #include "scheduledaterangeinfo.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE DWIDGET_USE_NAMESPACE void CAllDayEventWeekView::setTheMe(int type) { qCDebug(ClientLogger) << "CAllDayEventWeekView::setTheMe called with type:" << type; CWeekDayGraphicsview::setTheMe(type); } void CAllDayEventWeekView::changeEvent(QEvent *event) { // qCDebug(ClientLogger) << "CAllDayEventWeekView::changeEvent called with event type:" << event->type(); if (event->type() == QEvent::FontChange) { qCDebug(ClientLogger) << "Font change event received, updating item height"; updateItemHeightByFontSize(); updateInfo(); } } bool CAllDayEventWeekView::MeetCreationConditions(const QDateTime &date) { bool result = qAbs(date.daysTo(m_PressDate)) < 7; // qCDebug(ClientLogger) << "CAllDayEventWeekView::MeetCreationConditions called, date:" << date // << "m_PressDate:" << m_PressDate << "result:" << result; return result; } void CAllDayEventWeekView::slotCreate(const QDateTime &date) { qCDebug(ClientLogger) << "CAllDayEventWeekView::slotCreate called with date:" << date; CScheduleDlg dlg(1, this); dlg.setDate(date); dlg.setAllDay(true); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "Schedule creation accepted, updating schedule"; emit signalsUpdateSchedule(); slotStateChange(true); } else { qCDebug(ClientLogger) << "Schedule creation cancelled"; } } bool CAllDayEventWeekView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) { bool result = timeFirst.date() == timeSecond.date(); // qCDebug(ClientLogger) << "CAllDayEventWeekView::IsEqualtime called, comparing dates:" // << timeFirst.date() << "and" << timeSecond.date() << "result:" << result; return result; } bool CAllDayEventWeekView::JudgeIsCreate(const QPointF &pos) { bool result = qAbs(pos.x() - m_PressPos.x()) > 20 || qAbs(m_PressDate.date().daysTo(m_coorManage->getsDate(mapFrom(this, pos.toPoint())))) > 0; // qCDebug(ClientLogger) << "CAllDayEventWeekView::JudgeIsCreate called, result:" << result; return result; } void CAllDayEventWeekView::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) { qCDebug(ClientLogger) << "CAllDayEventWeekView::RightClickToCreate called at position:" << pos; Q_UNUSED(listItem); m_rightMenu->clear(); m_rightMenu->addAction(m_createAction); m_createDate.setDate(m_coorManage->getsDate(mapFrom(this, pos))); m_createDate.setTime(QTime::currentTime()); qCDebug(ClientLogger) << "Right click menu prepared with create date:" << m_createDate; m_rightMenu->exec(QCursor::pos()); } void CAllDayEventWeekView::MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) { // qCDebug(ClientLogger) << "CAllDayEventWeekView::MoveInfoProcess called"; Q_UNUSED(pos); if (info->allDay()) { qint64 offset = m_PressDate.daysTo(m_MoveDate); qCDebug(ClientLogger) << "Processing all-day schedule move with offset days:" << offset; info->setDtStart(info->dtStart().addDays(offset)); info->setDtEnd(info->dtEnd().addDays(offset)); } else { qint64 offset = info->dtStart().daysTo(info->dtEnd()); qCDebug(ClientLogger) << "Converting non-all-day schedule to all-day with day span:" << offset; info->setAllDay(true); info->setAlarmType(DSchedule::Alarm_15Hour_Front); m_DragScheduleInfo->setDtStart(QDateTime(m_MoveDate.date(), QTime(0, 0, 0))); m_DragScheduleInfo->setDtEnd(QDateTime(m_MoveDate.addDays(offset).date(), QTime(23, 59, 59))); } upDateInfoShow(ChangeWhole, info); } QDateTime CAllDayEventWeekView::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) { QDateTime result = moveDateTime.daysTo(m_InfoEndTime) < 0 ? QDateTime(m_InfoEndTime.date(), QTime(0, 0, 0)) : QDateTime(moveDateTime.date(), QTime(0, 0, 0)); // qCDebug(ClientLogger) << "CAllDayEventWeekView::getDragScheduleInfoBeginTime called, result:" << result; return result; } QDateTime CAllDayEventWeekView::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) { QDateTime result = m_InfoBeginTime.daysTo(m_MoveDate) < 0 ? QDateTime(m_InfoBeginTime.date(), QTime(23, 59, 0)) : QDateTime(moveDateTime.date(), QTime(23, 59, 0)); // qCDebug(ClientLogger) << "CAllDayEventWeekView::getDragScheduleInfoEndTime called, result:" << result; return result; } void CAllDayEventWeekView::updateHeight() { qCDebug(ClientLogger) << "CAllDayEventWeekView::updateHeight called for" << m_baseShowItem.count() << "items"; for (int i = 0; i < m_baseShowItem.count(); i++) { m_baseShowItem.at(i)->update(); } } /** * @brief CAllDayEventWeekView::setSelectSearchSchedule 设置æ�œç´¢é€‰ä¸­æ—¥ç¨‹ * @param info */ void CAllDayEventWeekView::setSelectSearchSchedule(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CAllDayEventWeekView::setSelectSearchSchedule called for schedule"; DragInfoGraphicsView::setSelectSearchSchedule(info); for (int i = 0; i < m_baseShowItem.size(); ++i) { CAllDayScheduleItem *item = m_baseShowItem.at(i); if (item->hasSelectSchedule(info)) { qCDebug(ClientLogger) << "Found matching schedule item, starting animation"; QRectF rect = item->rect(); centerOn(0, rect.y()); setTransformationAnchor(QGraphicsView::AnchorViewCenter); item->setStartValue(0); item->setEndValue(4); item->startAnimation(); } } } void CAllDayEventWeekView::setMargins(int left, int top, int right, int bottom) { qCDebug(ClientLogger) << "CAllDayEventWeekView::setMargins called with:" << left << top << right << bottom; setViewportMargins(QMargins(left, top, right, bottom)); } /** * @brief CAllDayEventWeekView::updateInfo 更新日程显示 */ void CAllDayEventWeekView::updateInfo() { qCDebug(ClientLogger) << "CAllDayEventWeekView::updateInfo called, drag status:" << m_DragStatus; DragInfoGraphicsView::updateInfo(); switch (m_DragStatus) { case IsCreate: qCDebug(ClientLogger) << "Updating info in IsCreate mode"; upDateInfoShow(IsCreate, m_DragScheduleInfo); break; default: qCDebug(ClientLogger) << "Updating info in default mode"; upDateInfoShow(); break; } } void CAllDayEventWeekView::upDateInfoShow(const DragStatus &status, const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CAllDayEventWeekView::upDateInfoShow called with status:" << status; DSchedule::List vListData; vListData = m_scheduleInfo; switch (status) { case NONE: qCDebug(ClientLogger) << "Status: NONE"; Q_UNUSED(info); break; case ChangeBegin: case ChangeEnd: { qCDebug(ClientLogger) << "Status: ChangeBegin/ChangeEnd for schedule"; int index = vListData.indexOf(info); if (index >= 0) vListData[index] = info; } break; case ChangeWhole: qCDebug(ClientLogger) << "Status: ChangeWhole, adding schedule to list"; vListData.append(info); break; case IsCreate: qCDebug(ClientLogger) << "Status: IsCreate, adding schedule to list"; vListData.append(info); break; } std::sort(vListData.begin(), vListData.end()); QVector vMDaySchedule; for (int i = 0; i < vListData.count(); i++) { DSchedule::Ptr ptr = vListData.at(i); if (ptr.isNull()) { continue; } QDate tbegindate = ptr->dtStart().date(); QDate tenddate = ptr->dtEnd().date(); if (tbegindate < m_beginDate) tbegindate = m_beginDate; if (tenddate > m_endDate) tenddate = m_endDate; MScheduleDateRangeInfo sinfo; sinfo.bdate = tbegindate; sinfo.edate = tenddate; sinfo.tData = ptr; sinfo.state = false; vMDaySchedule.append(sinfo); } QVector> vCfillSchedule; vCfillSchedule.resize(vListData.count()); int tNum = static_cast(m_beginDate.daysTo(m_endDate) + 1); for (int i = 0; i < vListData.count(); i++) { vCfillSchedule[i].resize(tNum); vCfillSchedule[i].fill(-1); } //首先填充跨天日程 for (int i = 0; i < vMDaySchedule.count(); i++) { if (vMDaySchedule[i].state) continue; int bindex = static_cast(m_beginDate.daysTo(vMDaySchedule[i].bdate)); int eindex = static_cast(m_beginDate.daysTo(vMDaySchedule[i].edate)); int c = -1; for (int k = 0; k < vListData.count(); k++) { int t = 0; for (t = bindex; t <= eindex; t++) { if (vCfillSchedule[k][t] != -1) { break; } } if (t == eindex + 1) { c = k; break; } } if (c == -1) continue; bool flag = false; for (int sd = bindex; sd <= eindex; sd++) { if (vCfillSchedule[c][sd] != -1) continue; vCfillSchedule[c][sd] = i; flag = true; } if (flag) vMDaySchedule[i].state = true; } QVector vResultData; for (int i = 0; i < vListData.count(); i++) { QVector vId; for (int j = 0; j < tNum; j++) { if (vCfillSchedule[i][j] != -1) { int k = 0; for (; k < vId.count(); k++) { if (vId[k] == vCfillSchedule[i][j]) break; } if (k == vId.count()) vId.append(vCfillSchedule[i][j]); } } DSchedule::List tData; for (int j = 0; j < vId.count(); j++) { tData.append(vMDaySchedule[vId[j]].tData); } if (!tData.isEmpty()) vResultData.append(tData); } int m_topMagin; if (vResultData.count() < 2) { m_topMagin = 32; } else if (vResultData.count() < 6) { m_topMagin = 31 + (vResultData.count() - 1) * (itemHeight + 1); } else { m_topMagin = 123; } qCDebug(ClientLogger) << "Setting view height based on result data count:" << vResultData.count() << "top margin:" << m_topMagin; setFixedHeight(m_topMagin - 3); setDayData(vResultData); update(); emit signalUpdatePaint(m_topMagin); } CAllDayEventWeekView::CAllDayEventWeekView(QWidget *parent, ViewPosition type) : CWeekDayGraphicsview(parent, type, ViewType::ALLDayView) { qCDebug(ClientLogger) << "CAllDayEventWeekView constructor called with view position type:" << type; updateItemHeightByFontSize(); connect(this, &CAllDayEventWeekView::sigStateChange, this, &CAllDayEventWeekView::slotStateChange, Qt::DirectConnection); } CAllDayEventWeekView::~CAllDayEventWeekView() { // qCDebug(ClientLogger) << "CAllDayEventWeekView destructor called"; } void CAllDayEventWeekView::setDayData(const QVector &vlistData) { qCDebug(ClientLogger) << "CAllDayEventWeekView::setDayData called with" << vlistData.size() << "schedule lists"; m_vlistData = vlistData; updateDateShow(); } void CAllDayEventWeekView::setInfo(const DSchedule::List &info) { // qCDebug(ClientLogger) << "CAllDayEventWeekView::setInfo called with" << info.size() << "schedules"; m_scheduleInfo = info; } void CAllDayEventWeekView::slotDoubleEvent() { qCDebug(ClientLogger) << "CAllDayEventWeekView::slotDoubleEvent called"; m_updateDflag = true; emit signalsUpdateSchedule(); } void CAllDayEventWeekView::mouseDoubleClickEvent(QMouseEvent *event) { qCDebug(ClientLogger) << "CAllDayEventWeekView::mouseDoubleClickEvent at position:" << event->pos(); if (event->button() == Qt::RightButton) { qCDebug(ClientLogger) << "Right button double click ignored"; return; } emit signalScheduleShow(false); DGraphicsView::mouseDoubleClickEvent(event); CAllDayScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item == nullptr) { qCDebug(ClientLogger) << "No item at position, creating new schedule"; m_createDate.setDate(m_coorManage->getsDate(mapFrom(this, event->pos()))); m_createDate.setTime(QTime::currentTime()); slotCreate(m_createDate); } else { qCDebug(ClientLogger) << "Item found, showing schedule view dialog"; m_updateDflag = false; CMyScheduleView dlg(item->getData(), this); connect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CAllDayEventWeekView::slotDoubleEvent); if (dlg.exec() == DDialog::Accepted){ qCDebug(ClientLogger) << "Schedule view dialog accepted"; slotStateChange(true); } else { qCDebug(ClientLogger) << "Schedule view dialog cancelled"; } disconnect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CAllDayEventWeekView::slotDoubleEvent); } } void CAllDayEventWeekView::wheelEvent(QWheelEvent *event) { // qCDebug(ClientLogger) << "CAllDayEventWeekView::wheelEvent with angle delta:" << event->angleDelta(); //若滚轮事件为左å�³æ–¹å�‘则退出 if (event->angleDelta().x() != 0 ) { qCDebug(ClientLogger) << "Horizontal wheel event, ignoring"; return; } emit signalScheduleShow(false); DGraphicsView::wheelEvent(event); } void CAllDayEventWeekView::updateDateShow() { qCDebug(ClientLogger) << "CAllDayEventWeekView::updateDateShow called"; qreal sceneHeight; qreal itemsHeight = (itemHeight + 2) * m_vlistData.size(); if (itemsHeight < 32) { sceneHeight = 29; } else { sceneHeight = itemsHeight + 6; } //如果设置场景的高度å°�于viewport的高度则设置场景的高度为viewport的高度 sceneHeight = sceneHeight < viewport()->height() ? viewport()->height() : sceneHeight; qCDebug(ClientLogger) << "Setting scene rect with height:" << sceneHeight; setSceneRect(0, 0, m_Scene->width(), sceneHeight); for (int i = 0; i < m_baseShowItem.count(); i++) { delete m_baseShowItem[i]; } m_baseShowItem.clear(); qCDebug(ClientLogger) << "Creating" << m_vlistData.size() << "item widgets"; for (int i = 0; i < m_vlistData.size(); ++i) { createItemWidget(i); } //æ›´æ–°æ¯�个背景上的日程标签 updateBackgroundShowItem(); } void CAllDayEventWeekView::createItemWidget(int index, bool average) { qCDebug(ClientLogger) << "CAllDayEventWeekView::createItemWidget called for index:" << index; Q_UNUSED(average) for (int i = 0; i < m_vlistData[index].size(); ++i) { const DSchedule::Ptr &info = m_vlistData[index].at(i); QRectF drawrect = m_coorManage->getAllDayDrawRegion(info->dtStart().date(), info->dtEnd().date()); drawrect.setY(2 + (itemHeight + 1) * index); drawrect.setHeight(itemHeight + 1); CAllDayScheduleItem *gwi = new CAllDayScheduleItem(drawrect, nullptr); gwi->setData(m_vlistData[index].at(i)); m_Scene->addItem(gwi); m_baseShowItem.append(gwi); } qCDebug(ClientLogger) << "Created" << m_vlistData[index].size() << "schedule items for index" << index; } void CAllDayEventWeekView::slotStateChange(bool bState) { qCDebug(ClientLogger) << "CAllDayEventWeekView::slotStateChange called with state:" << bState; if(bState) { qCDebug(ClientLogger) << "Hiding" << m_baseShowItem.count() << "schedule items"; for (int i = 0; i < m_baseShowItem.count(); i++) { m_baseShowItem[i]->setVisible(false); } } } void CAllDayEventWeekView::updateItemHeightByFontSize() { qCDebug(ClientLogger) << "CAllDayEventWeekView::updateItemHeightByFontSize called"; QFont font; DFontSizeManager::instance()->setFontGenericPixelSize( static_cast(DFontSizeManager::instance()->fontPixelSize(qGuiApp->font()))); font = DFontSizeManager::instance()->t8(font); QFontMetrics fm(font); int h = fm.height() + 1; if (itemHeight != h) { qCDebug(ClientLogger) << "Item height updated from" << itemHeight << "to" << h; itemHeight = h; } } CAllDayEventWeekView::PosInItem CAllDayEventWeekView::getPosInItem(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); QPointF itemPos = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); double bottomy = itemRect.width() - itemPos.x(); PosInItem result; if (itemPos.x() < 5) { result = LEFT; } else if (bottomy < 5) { result = RIGHT; } else { result = MIDDLE; } // qCDebug(ClientLogger) << "CAllDayEventWeekView::getPosInItem result:" << result; return result; } QDateTime CAllDayEventWeekView::getPosDate(const QPoint &p) { QDateTime result = QDateTime(m_coorManage->getsDate(mapFrom(this, p)), QTime(0, 0, 0)); // qCDebug(ClientLogger) << "CAllDayEventWeekView::getPosDate called, result:" << result; return result; } void CAllDayEventWeekView::slotUpdateScene() { // qCDebug(ClientLogger) << "CAllDayEventWeekView::slotUpdateScene called"; this->scene()->update(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/alldayeventview.h000066400000000000000000000053671523260663500277320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ALLDAYEVENTVIEW_H #define ALLDAYEVENTVIEW_H #include "graphicsItem/calldayscheduleitem.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cweekdaygraphicsview.h" #include #include #include DWIDGET_USE_NAMESPACE class CScheduleCoorManage; class CAllDayEventWeekView : public CWeekDayGraphicsview { Q_OBJECT public: CAllDayEventWeekView(QWidget *parent = nullptr, ViewPosition type = WeekPos); ~CAllDayEventWeekView() override; void setDayData(const QVector &vlistData); void setInfo(const DSchedule::List &info); QVector &getListData() { return m_vlistData; } void updateHeight(); //获å�–æ�œç´¢é€‰ä¸­æ—¥ç¨‹ void setSelectSearchSchedule(const DSchedule::Ptr &info) override; void setMargins(int left, int top, int right, int bottom); //更新日程显示 void updateInfo() override; signals: void signalUpdatePaint(const int topM); void signalSceneUpdate(); public slots: void slotUpdateScene(); void slotStateChange(bool bState); private slots: void slotDoubleEvent(); public: void setTheMe(int type = 0) override; private: void changeEvent(QEvent *event) override; bool MeetCreationConditions(const QDateTime &date) override; void slotCreate(const QDateTime &date) override; //判断时间是å�¦ç›¸ç­‰ bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) override; //æ ¹æ�®é¼ æ ‡ç§»åŠ¨çš„è·�离判断是å�¦åˆ›å»ºæ—¥ç¨‹ bool JudgeIsCreate(const QPointF &pos) override; void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) override; void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) override; QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) override; QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) override; PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect) override; QDateTime getPosDate(const QPoint &p) override; void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) override; protected: void mouseDoubleClickEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; private: void updateDateShow(); void createItemWidget(int index, bool average = false); void updateItemHeightByFontSize(); private: int itemHeight = 22; QVector m_vlistData; QVector m_scheduleInfo; QVector m_baseShowItem; bool m_updateDflag = false; }; #endif // CSCHEDULEDAYVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/cgraphicsscene.cpp000066400000000000000000000224101523260663500300270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cgraphicsscene.h" #include "commondef.h" #include "graphicsItem/cscenebackgrounditem.h" #include #include #include #include CGraphicsScene::CGraphicsScene(QObject *parent) : QGraphicsScene(parent) , firstfocusItem(nullptr) , currentFocusItem(nullptr) , m_keyPrxy(nullptr) , m_activeSwitching(false) , m_isContextMenu(false) , m_isShowCurrentItem(false) { // qCDebug(ClientLogger) << "CGraphicsScene constructor"; } CGraphicsScene::~CGraphicsScene() { // qCDebug(ClientLogger) << "CGraphicsScene destructor"; if (m_keyPrxy != nullptr) delete m_keyPrxy; } void CGraphicsScene::setFirstFocusItem(QGraphicsItem *item) { // qCDebug(ClientLogger) << "CGraphicsScene::setFirstFocusItem called, item:" << (item ? "set" : "nullptr"); firstfocusItem = item; } QGraphicsItem *CGraphicsScene::getFirstFocusItem() const { // qCDebug(ClientLogger) << "CGraphicsScene::getFirstFocusItem called, returning:" << (firstfocusItem ? "item" : "nullptr"); return firstfocusItem; } void CGraphicsScene::setCurrentFocusItem(QGraphicsItem *item) { // qCDebug(ClientLogger) << "CGraphicsScene::setCurrentFocusItem called, item:" << (item ? "set" : "nullptr"); currentFocusItem = item; } QGraphicsItem *CGraphicsScene::getCurrentFocusItem() const { // qCDebug(ClientLogger) << "CGraphicsScene::getCurrentFocusItem called, returning:" << (currentFocusItem ? "item" : "nullptr"); return currentFocusItem; } void CGraphicsScene::setKeyPressPrxy(CKeyPressPrxy *keyPrxy) { // qCDebug(ClientLogger) << "CGraphicsScene::setKeyPressPrxy called, keyPrxy:" << (keyPrxy ? "set" : "nullptr"); m_keyPrxy = keyPrxy; } void CGraphicsScene::currentFocusItemUpdate() { // qCDebug(ClientLogger) << "CGraphicsScene::currentFocusItemUpdate called"; if (currentFocusItem != nullptr) { CFocusItem *item = dynamic_cast(currentFocusItem); // qCDebug(ClientLogger) << "Updating focus state for current item"; item->setItemFocus(true); } } /** * @brief CGraphicsScene::setPrePage 切æ�¢ä¸Šä¸€é¡µ * @param focusDate 切æ�¢ç„¦ç‚¹æ—¶é—´ * @param isSwitchView 是å�¦åˆ‡æ�¢è§†å›¾ */ void CGraphicsScene::setPrePage(const QDate &focusDate, bool isSwitchView) { qCDebug(ClientLogger) << "CGraphicsScene::setPrePage called with date:" << focusDate << "switchView:" << isSwitchView; emit signalSwitchPrePage(focusDate, isSwitchView); } /** * @brief CGraphicsScene::setPrePage 切æ�¢ä¸‹ä¸€é¡µ * @param focusDate 切æ�¢ç„¦ç‚¹æ—¶é—´ * @param isSwitchView 是å�¦åˆ‡æ�¢è§†å›¾ */ void CGraphicsScene::setNextPage(const QDate &focusDate, bool isSwitchView) { qCDebug(ClientLogger) << "CGraphicsScene::setNextPage called with date:" << focusDate << "switchView:" << isSwitchView; emit signalSwitchNextPage(focusDate, isSwitchView); } bool CGraphicsScene::event(QEvent *event) { // qCDebug(ClientLogger) << "CGraphicsScene::event called with event type:" << event->type(); bool dealResult = false; if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(event); qCDebug(ClientLogger) << "CGraphicsScene::event - KeyPress event with key:" << keyEvent->key(); if (m_keyPrxy != nullptr && m_keyPrxy->keyPressDeal(keyEvent->key())) { qCDebug(ClientLogger) << "Key press handled by proxy"; dealResult = true; } //如果为左å�³é”®å¤„ç�†åˆ™è®¾ç½®ä¸ºtrue if (dealResult == false && (keyEvent->key() == Qt::Key_Left || keyEvent->key() == Qt::Key_Right)) { qCDebug(ClientLogger) << "Left/Right key press detected, marking as handled"; dealResult = true; } if (keyEvent->modifiers() == Qt::ALT && keyEvent->key() == Qt::Key_M) { qCDebug(ClientLogger) << "Alt+M key combination detected"; CSceneBackgroundItem *item = dynamic_cast(currentFocusItem); if (item != nullptr && item->getFocusItem()->getItemType() == CFocusItem::CITEM) { qCDebug(ClientLogger) << "Emitting context menu signal for focus item"; dealResult = true; emit signalContextMenu(item->getFocusItem()); } } } if (event->type() == QEvent::FocusIn) { // qCDebug(ClientLogger) << "CGraphicsScene::event - FocusIn event"; dealResult = focusInDeal(event); } if (event->type() == QEvent::FocusOut) { // qCDebug(ClientLogger) << "CGraphicsScene::event - FocusOut event"; dealResult = focusOutDeal(event); } return dealResult ? true : QGraphicsScene::event(event); } bool CGraphicsScene::focusInDeal(QEvent *event) { qCDebug(ClientLogger) << "CGraphicsScene::focusInDeal called"; bool dealResult = true; QFocusEvent *focusEvent = dynamic_cast(event); if (firstfocusItem != nullptr && (Qt::TabFocusReason == focusEvent->reason() || Qt::BacktabFocusReason == focusEvent->reason())) { qCDebug(ClientLogger) << "Focus in with Tab/Backtab reason, showCurrentItem:" << m_isShowCurrentItem; if (m_isShowCurrentItem || currentFocusItem == nullptr) { if (currentFocusItem == nullptr) { qCDebug(ClientLogger) << "No current focus item, using first focus item"; currentFocusItem = firstfocusItem; } CFocusItem *item = dynamic_cast(currentFocusItem); item->setItemFocus(true); } else { qCDebug(ClientLogger) << "Handling Tab key press via proxy"; dealResult = m_keyPrxy->keyPressDeal(Qt::Key_Tab); //如果切æ�¢è¿‡æ�¥éœ€è¦�设置下一个item焦点,但是已ç»�没有下一个item时,å�‘é€�焦点切æ�¢ä¿¡å�· if (currentFocusItem == nullptr) { qCDebug(ClientLogger) << "No more items, emitting next focus signal"; emit signalsetNextFocus(); } } } if (currentFocusItem != nullptr && Qt::ActiveWindowFocusReason == focusEvent->reason()) { qCDebug(ClientLogger) << "Focus in with ActiveWindow reason"; CFocusItem *item = dynamic_cast(currentFocusItem); item->setItemFocus(true); } return dealResult; } bool CGraphicsScene::focusOutDeal(QEvent *event) { qCDebug(ClientLogger) << "CGraphicsScene::focusOutDeal called"; QFocusEvent *focusEvent = dynamic_cast(event); if (currentFocusItem != nullptr) { CSceneBackgroundItem *item = dynamic_cast(currentFocusItem); if (Qt::ActiveWindowFocusReason == focusEvent->reason()) { qCDebug(ClientLogger) << "Focus out with ActiveWindow reason, setting item focus to false"; item->setItemFocus(false); } else { //如果为å�³å‡»è�œå�•则更新焦点显示效果 if (m_isContextMenu) { qCDebug(ClientLogger) << "Focus out with context menu active, setting item focus to false"; item->setItemFocus(false); } else { qCDebug(ClientLogger) << "Focus out, initializing item state"; item->initState(); //如果为被动切æ�¢ç„¦ç‚¹åˆ™åˆ�始化当å‰�焦点item if (getActiveSwitching() == false) { qCDebug(ClientLogger) << "Passive focus switching, clearing current focus item"; currentFocusItem = nullptr; //通知å�¦å¤–一个视图åˆ�始化状æ€�,因为全天和é�žå…¨å¤©ä¹‹é—´tab切æ�¢ä¿�存了当å‰�itemä¿¡æ�¯ emit signalViewFocusInit(); } else { qCDebug(ClientLogger) << "Active focus switching, resetting active switching flag"; setActiveSwitching(false); } } } } return true; } void CGraphicsScene::setIsContextMenu(bool isContextMenu) { // qCDebug(ClientLogger) << "CGraphicsScene::setIsContextMenu called with value:" << isContextMenu; m_isContextMenu = isContextMenu; } void CGraphicsScene::setIsShowCurrentItem(bool isShowCurrentItem) { // qCDebug(ClientLogger) << "CGraphicsScene::setIsShowCurrentItem called with value:" << isShowCurrentItem; m_isShowCurrentItem = isShowCurrentItem; } void CGraphicsScene::currentItemInit() { // qCDebug(ClientLogger) << "CGraphicsScene::currentItemInit called"; if (currentFocusItem != nullptr) { CSceneBackgroundItem *item = dynamic_cast(currentFocusItem); if (item != nullptr) { // qCDebug(ClientLogger) << "Initializing current item state"; item->initState(); } currentFocusItem = nullptr; } } bool CGraphicsScene::getActiveSwitching() const { // qCDebug(ClientLogger) << "CGraphicsScene::getActiveSwitching called, returning:" << m_activeSwitching; return m_activeSwitching; } void CGraphicsScene::setActiveSwitching(bool activeSwitching) { // qCDebug(ClientLogger) << "CGraphicsScene::setActiveSwitching called with value:" << activeSwitching; m_activeSwitching = activeSwitching; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/cgraphicsscene.h000066400000000000000000000046551523260663500275070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CGRAPHICSSCENE_H #define CGRAPHICSSCENE_H #include "ckeypressprxy.h" #include /** * @brief The CGraphicsScene class * */ class CFocusItem; class CGraphicsScene : public QGraphicsScene { Q_OBJECT public: explicit CGraphicsScene(QObject *parent = nullptr); ~CGraphicsScene() override; //设置Scene的第一个focus item void setFirstFocusItem(QGraphicsItem *item); //获å�–Scene的第一个focus item QGraphicsItem *getFirstFocusItem() const; //设置Scene当å‰�focus item void setCurrentFocusItem(QGraphicsItem *item); //获å�–Scene当å‰�focus item QGraphicsItem *getCurrentFocusItem() const; //设置keypress处ç�† void setKeyPressPrxy(CKeyPressPrxy *keyPrxy); //更新当å‰�item焦点效果显示 void currentFocusItemUpdate(); //设置上一页时间 void setPrePage(const QDate &focusDate, bool isSwitchView = false); //设置下一页时间 void setNextPage(const QDate &focusDate, bool isSwitchView = false); //获å�–是å�¦ä¸ºä¸»åŠ¨åˆ‡æ�¢ bool getActiveSwitching() const; //设置是å�¦ä¸ºä¸»åŠ¨åˆ‡æ�¢ void setActiveSwitching(bool activeSwitching); void currentItemInit(); void setIsShowCurrentItem(bool isShowCurrentItem); void setIsContextMenu(bool isContextMenu); protected: bool event(QEvent *event) override; private: bool focusInDeal(QEvent *event); bool focusOutDeal(QEvent *event); signals: void signalSwitchPrePage(const QDate &focusDate, bool isSwitchView = false); void signalSwitchNextPage(const QDate &focusDate, bool isSwitchView = false); void signalSwitchView(const QDate &focusDate, bool setItemFocus = false); //通知å�¦ä¸€ä¸ªè§†å›¾åˆ�始化 void signalViewFocusInit(); //切æ�¢åˆ°æ—¥è§†å›¾ void signalGotoDayView(const QDate &date); //å¿«æ�·é”®è§¦å�‘å�³å‡» void signalContextMenu(CFocusItem *item); //切æ�¢ç„¦ç‚¹åˆ°ä¸‹ä¸€ä¸ªwidget void signalsetNextFocus(); private: QGraphicsItem *firstfocusItem; QGraphicsItem *currentFocusItem; CKeyPressPrxy *m_keyPrxy; bool m_activeSwitching; //是å�¦ä¸ºä¸»åŠ¨åˆ‡æ�¢ç„¦ç‚¹ bool m_isContextMenu; //是å�¦ä¸ºå�³å‡»è�œå�•切æ�¢ç„¦ç‚¹ bool m_isShowCurrentItem; //true 当å‰�item获å�–焦点 false 当å‰�item的下一个item获å�–焦点 }; #endif // CGRAPHICSSCENE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/cweekdaygraphicsview.cpp000066400000000000000000000237541523260663500312720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekdaygraphicsview.h" #include "commondef.h" #include "constants.h" #include "schedulecoormanage.h" #include "cweekdayscenetabkeydeal.h" #include "ckeyenabledeal.h" #include "ckeyleftdeal.h" #include "ckeyrightdeal.h" #include "calldaykeyleftdeal.h" #include "calldaykeyrightdeal.h" #include CWeekDayGraphicsview::CWeekDayGraphicsview(QWidget *parent, ViewPosition viewPos, ViewType viewtype) : DragInfoGraphicsView(parent) , m_viewPos(viewPos) , m_viewType(viewtype) , m_coorManage(new CScheduleCoorManage) , m_rightmagin(0) { qCDebug(ClientLogger) << "CWeekDayGraphicsview constructor - viewPos:" << viewPos << "viewType:" << viewtype; createBackgroundItem(); m_Scene->setFirstFocusItem(m_backgroundItem.first()); //添加键盘事件处ç�† CKeyPressPrxy *m_keyPrxy = new CKeyPressPrxy(); m_keyPrxy->addkeyPressDeal(new CWeekDaySceneTabKeyDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyEnableDeal(m_Scene)); if (m_viewType == ALLDayView) { qCDebug(ClientLogger) << "Adding ALL day key handlers"; m_keyPrxy->addkeyPressDeal(new CAllDayKeyLeftDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CAllDayKeyRightDeal(m_Scene)); } else { qCDebug(ClientLogger) << "Adding part time key handlers"; m_keyPrxy->addkeyPressDeal(new CKeyLeftDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyRightDeal(m_Scene)); } m_Scene->setKeyPressPrxy(m_keyPrxy); connect(m_Scene, &CGraphicsScene::signalSwitchView, this, &CWeekDayGraphicsview::slotSwitchView); connect(m_Scene, &CGraphicsScene::signalViewFocusInit, this, &CWeekDayGraphicsview::signalViewFocusInit); } CWeekDayGraphicsview::~CWeekDayGraphicsview() { qCDebug(ClientLogger) << "CWeekDayGraphicsview destructor"; delete m_coorManage; m_coorManage = nullptr; } void CWeekDayGraphicsview::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) { qCDebug(ClientLogger) << "CWeekDayGraphicsview::setRange - w:" << w << "h:" << h << "begindate:" << begindate << "enddate:" << enddate << "rightmagin:" << rightmagin; m_MoveDate.setDate(begindate.addMonths(-2)); m_beginDate = begindate; m_endDate = enddate; //如果为全天区域 if (m_viewType == ALLDayView) { qCDebug(ClientLogger) << "Adjusting width for ALL day view"; w -= 2; } else { qCDebug(ClientLogger) << "Adjusting width for part time view"; w = w - rightmagin - 2; } setBackgroundDate(); m_coorManage->setRange(w, h, begindate, enddate, rightmagin); setSceneRect(0, 0, w, h); m_rightmagin = rightmagin; } void CWeekDayGraphicsview::setRange(QDate begin, QDate end) { qCDebug(ClientLogger) << "CWeekDayGraphicsview::setRange - begin:" << begin << "end:" << end; m_MoveDate.setDate(begin.addMonths(-2)); m_beginDate = begin; m_endDate = end; setBackgroundDate(); getCoorManage()->setDateRange(begin, end); this->scene()->update(); } void CWeekDayGraphicsview::setTheMe(int type) { qCDebug(ClientLogger) << "CWeekDayGraphicsview::setTheMe - type:" << type; for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->setTheMe(type); } DragInfoGraphicsView::setTheMe(type); this->viewport()->update(); } CScheduleCoorManage *CWeekDayGraphicsview::getCoorManage() const { qCDebug(ClientLogger) << "CWeekDayGraphicsview::getCoorManage called"; return m_coorManage; } void CWeekDayGraphicsview::setCurrentFocusItem(const QDate &focusDate, bool setItemFocus) { // qCDebug(ClientLogger) << "CWeekDayGraphicsview::setCurrentFocusItem - focusDate:" << focusDate // << "setItemFocus:" << setItemFocus; qint64 offset = m_backgroundItem.first()->getDate().daysTo(focusDate); if (offset >= 0 && offset < m_backgroundItem.size()) { qCDebug(ClientLogger) << "Setting current focus item at offset:" << offset; m_Scene->setCurrentFocusItem(m_backgroundItem.at(static_cast(offset))); m_Scene->setIsShowCurrentItem(setItemFocus); } else { qCWarning(ClientLogger) << "Failed to set current focus item" << "offset:" << offset << "focus date:" << focusDate << "first item date:" << m_backgroundItem.first()->getDate(); } } void CWeekDayGraphicsview::setSceneRect(qreal x, qreal y, qreal w, qreal h) { // qCDebug(ClientLogger) << "CWeekDayGraphicsview::setSceneRect - x:" << x << "y:" << y << "w:" << w << "h:" << h; m_Scene->setSceneRect(x, y, w, h); const qreal backgroundItemHeight = h; const qreal backgroundItemWidth = w / m_backgroundItem.size(); // qCDebug(ClientLogger) << "Setting background item dimensions - width:" << backgroundItemWidth // << "height:" << backgroundItemHeight; for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->setDate(m_beginDate.addDays(i)); m_backgroundItem.at(i)->setRect(x + backgroundItemWidth * i, 0, backgroundItemWidth, backgroundItemHeight); } } void CWeekDayGraphicsview::createBackgroundItem() { qCDebug(ClientLogger) << "CWeekDayGraphicsview::createBackgroundItem called - viewPos:" << m_viewPos; if (m_viewPos == DayPos) { //日视图 qCDebug(ClientLogger) << "Creating day view background item"; CWeekDayBackgroundItem *backgroundItem = new CWeekDayBackgroundItem(); connect(backgroundItem, &CWeekDayBackgroundItem::signalPosOnView, this, &CWeekDayGraphicsview::slotPosOnView); backgroundItem->setZValue(-1); m_backgroundItem.append(backgroundItem); m_Scene->addItem(backgroundItem); //如果为é�žå…¨å¤©åˆ™è®¾ç½®èƒŒæ™¯ç„¦ç‚¹èŽ·å�–显示 if (m_viewType == PartTimeView) { qCDebug(ClientLogger) << "Setting part time view focus for day view"; backgroundItem->setShowFocus(true); } //设置编å�· backgroundItem->setBackgroundNum(0); } else { //周视图 qCDebug(ClientLogger) << "Creating week view background items"; for (int i = 0; i < DDEWeekCalendar::AFewDaysofWeek; ++i) { CWeekDayBackgroundItem *item = new CWeekDayBackgroundItem(); connect(item, &CWeekDayBackgroundItem::signalPosOnView, this, &CWeekDayGraphicsview::slotPosOnView); item->setZValue(-1); if (m_backgroundItem.size() > 0) { //设置对应左å�³å’Œä¸‹ä¸€ä¸ªå…³ç³» // qCDebug(ClientLogger) << "Setting navigation relationships for background item" << i; m_backgroundItem.last()->setNextFocusItem(item); m_backgroundItem.last()->setRightItem(item); item->setLeftItem(m_backgroundItem.last()); } //设置背景直接分隔符 item->setDrawDividingLine(true); //如果为é�žå…¨å¤©åˆ™è®¾ç½®èƒŒæ™¯ç„¦ç‚¹èŽ·å�–显示 if (m_viewType == PartTimeView) { // qCDebug(ClientLogger) << "Setting part time view focus for week item" << i; item->setShowFocus(true); } //设置编å�· item->setBackgroundNum(i); m_backgroundItem.append(item); m_Scene->addItem(item); } } qCDebug(ClientLogger) << "Created" << m_backgroundItem.size() << "background items"; } void CWeekDayGraphicsview::setSceneCurrentItemFocus(const QDate &focusDate) { qCDebug(ClientLogger) << "CWeekDayGraphicsview::setSceneCurrentItemFocus - focusDate:" << focusDate; int offset = static_cast(m_backgroundItem.first()->getDate().daysTo(focusDate)); if (offset >= 0 && offset < m_backgroundItem.size()) { qCDebug(ClientLogger) << "Setting scene current focus item at offset:" << offset; m_Scene->setCurrentFocusItem(m_backgroundItem.at(offset)); m_Scene->currentFocusItemUpdate(); } else { qCWarning(ClientLogger) << "Failed to set scene current item focus" << "focus date:" << focusDate << "first item date:" << m_backgroundItem.first()->getDate() << "offset:" << offset; } } /** * @brief CWeekDayGraphicsview::updateBackgroundShowItem 更新背景上显示的item */ void CWeekDayGraphicsview::updateBackgroundShowItem() { qCDebug(ClientLogger) << "CWeekDayGraphicsview::updateBackgroundShowItem called"; for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->updateShowItem(); } } /** * @brief CWeekDayGraphicsview::setBackgroundDate 设置背景时间 */ void CWeekDayGraphicsview::setBackgroundDate() { qCDebug(ClientLogger) << "CWeekDayGraphicsview::setBackgroundDate called"; for (int i = 0; i < m_backgroundItem.size(); ++i) { m_backgroundItem.at(i)->setDate(m_beginDate.addDays(i)); } } void CWeekDayGraphicsview::slotSwitchView(const QDate &focusDate, bool setItemFocus) { qCDebug(ClientLogger) << "CWeekDayGraphicsview::slotSwitchView - focusDate:" << focusDate << "setItemFocus:" << setItemFocus << "current viewType:" << m_viewType; if (m_viewType == ALLDayView) { qCDebug(ClientLogger) << "Switching from ALLDayView to PartTimeView"; emit signaleSwitchToView(focusDate, PartTimeView, setItemFocus); } else { qCDebug(ClientLogger) << "Switching from PartTimeView to ALLDayView"; emit signaleSwitchToView(focusDate, ALLDayView, setItemFocus); } } void CWeekDayGraphicsview::slotViewInit() { qCDebug(ClientLogger) << "CWeekDayGraphicsview::slotViewInit called"; m_Scene->currentItemInit(); } void CWeekDayGraphicsview::slotPosOnView(const qreal y) { qCDebug(ClientLogger) << "CWeekDayGraphicsview::slotPosOnView - y:" << y; //定ä½�到当å‰�焦点的item QPointF point(m_Scene->width() / 2, y); centerOn(point); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/cweekdaygraphicsview.h000066400000000000000000000040351523260663500307260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKDAYGRAPHICSVIEW_H #define CWEEKDAYGRAPHICSVIEW_H #include "draginfographicsview.h" #include "graphicsItem/cweekdaybackgrounditem.h" /** * @brief The CWeekDayGraphicsview class * 周/日全天和é�žå…¨å¤©è§†å›¾ */ class CScheduleCoorManage; class CWeekDayGraphicsview : public DragInfoGraphicsView { Q_OBJECT public: enum ViewPosition { WeekPos //周视图 , DayPos //日视图 }; enum ViewType { ALLDayView //全天 , PartTimeView //é�žå…¨å¤© }; public: explicit CWeekDayGraphicsview(QWidget *parent = nullptr, ViewPosition viewPos = WeekPos, ViewType viewtype = ALLDayView); ~CWeekDayGraphicsview() override; void setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin); void setRange(QDate begin, QDate end); void setTheMe(int type = 0) override; CScheduleCoorManage *getCoorManage() const; //设置当å‰�焦点背景item void setCurrentFocusItem(const QDate &focusDate, bool setItemFocus = false); protected: //设置场景的矩阵 void setSceneRect(qreal x, qreal y, qreal w, qreal h); //创建背景显示项 void createBackgroundItem(); void setSceneCurrentItemFocus(const QDate &focusDate) override; //更新背景上显示的item void updateBackgroundShowItem() override; private: //设置背景时间 void setBackgroundDate(); signals: void signaleSwitchToView(const QDate &focusDate, ViewType type, bool setItemFocus); void signalViewFocusInit(); public slots: void slotSwitchView(const QDate &focusDate, bool setItemFocus); void slotViewInit(); void slotPosOnView(const qreal y); protected: ViewPosition m_viewPos; ViewType m_viewType; QDate m_beginDate; QDate m_endDate; CScheduleCoorManage *m_coorManage; int m_rightmagin; QVector m_backgroundItem; }; #endif // CWEEKDAYGRAPHICSVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/draginfographicsview.cpp000066400000000000000000001266731523260663500312730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "draginfographicsview.h" #include "scheduledlg.h" #include "schedulectrldlg.h" #include "myscheduleview.h" #include "constants.h" #include "cscheduleoperation.h" #include "graphicsItem/cscenebackgrounditem.h" #include "calendarglobalenv.h" #include "scheduledatamanage.h" #include "graphicsItem/scheduleitem.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //定义拖拽日程 DSchedule::Ptr DragInfoGraphicsView::m_DragScheduleInfo; bool DragInfoGraphicsView::m_hasUpdateMark = false; DragInfoGraphicsView::DragInfoGraphicsView(DWidget *parent) : DGraphicsView(parent) , m_Scene(new CGraphicsScene(this)) , m_rightMenu(new DMenu(this)) , m_MoveDate(QDateTime::currentDateTime()) { qCDebug(ClientLogger) << "DragInfoGraphicsView constructor"; setFrameShape(QFrame::NoFrame); setScene(m_Scene); setContentsMargins(0, 0, 0, 0); m_editAction = new QAction(tr("Edit"), this); m_deleteAction = new QAction(tr("Delete"), this); m_createAction = new QAction(tr("New event"), this); connect(m_createAction, &QAction::triggered, this, static_cast(&DragInfoGraphicsView::slotCreate)); this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); this->setViewportMargins(0, 0, 0, 0); setMouseTracking(true); viewport()->setMouseTracking(true); setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); setAlignment(Qt::AlignLeft | Qt::AlignTop); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); m_Drag = new QDrag(this); //设置接å�—触摸事件 setAttribute(Qt::WA_AcceptTouchEvents); grabGesture(Qt::TapAndHoldGesture); grabGesture(Qt::PanGesture); grabGesture(Qt::TapGesture); grabGesture(Qt::SwipeGesture); m_touchAnimation = new QPropertyAnimation(this, "touchSlidePos", this); //设置动画时间 m_touchAnimation->setDuration(1000); //设置动画曲线 m_touchAnimation->setEasingCurve(QEasingCurve::OutQuart); connect(m_Scene, &CGraphicsScene::signalSwitchPrePage, this, &DragInfoGraphicsView::slotSwitchPrePage); connect(m_Scene, &CGraphicsScene::signalSwitchNextPage, this, &DragInfoGraphicsView::slotSwitchNextPage); connect(m_Scene, &CGraphicsScene::signalGotoDayView, this, &DragInfoGraphicsView::signalGotoDayView); connect(m_Scene, &CGraphicsScene::signalContextMenu, this, &DragInfoGraphicsView::slotContextMenu); connect(m_Scene, &CGraphicsScene::signalsetNextFocus, this, &DragInfoGraphicsView::slotsetNextFocus); setFocusPolicy(Qt::StrongFocus); //日程类型å�‘生改å�˜ï¼Œåˆ·æ–°ç•Œé�¢ connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, [&]() { // qCDebug(ClientLogger) << "Schedule type updated, refreshing view"; this->viewport()->update(); }); } DragInfoGraphicsView::~DragInfoGraphicsView() { qCDebug(ClientLogger) << "DragInfoGraphicsView destructor"; } void DragInfoGraphicsView::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mousePressEvent at" << event->pos(); if (event->button() != Qt::LeftButton) { qCDebug(ClientLogger) << "Not left button, ignoring press event"; return; } stopTouchAnimation(); if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸点击则记录相关状æ€�并改å�˜è§¦æ‘¸çжæ€� qCDebug(ClientLogger) << "Touch event detected"; DGraphicsView::mousePressEvent(event); m_TouchBeginPoint = event->pos(); m_TouchBeginTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); m_touchState = TS_PRESS; return; } mousePress(event->pos()); m_Scene->currentItemInit(); //更新其它view中item状æ€�显示 emit signalSceneUpdate(); } void DragInfoGraphicsView::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseReleaseEvent at" << event->pos(); if (event->button() == Qt::RightButton) { qCDebug(ClientLogger) << "Right button release, ignoring"; return; } if (event->source() == Qt::MouseEventSynthesizedByQt) { qCDebug(ClientLogger) << "Touch event release, current state:" << m_touchState; //如果为触摸点击状æ€�则调用左击事件处ç�† if (m_touchState == TS_PRESS) { qCDebug(ClientLogger) << "Processing touch press as mouse press"; mousePress(m_TouchBeginPoint.toPoint()); } if (m_touchState == TS_SLIDE) { stopTouchAnimation(); const qint64 timeOffset = QDateTime::currentDateTime().toMSecsSinceEpoch() - m_TouchBeginTime; //如果为快速滑动则开å�¯æ»‘动动画效果 if (timeOffset < 150) { qCDebug(ClientLogger) << "Fast slide detected, starting animation"; m_touchAnimation->setStartValue(verticalScrollBar()->sliderPosition()); m_touchAnimation->setEndValue(verticalScrollBar()->minimum()); switch (m_touchMovingDir) { case touchGestureOperation::T_TOP: { //如果手势往上 qCDebug(ClientLogger) << "Gesture direction: UP"; m_touchAnimation->setStartValue(verticalScrollBar()->sliderPosition()); m_touchAnimation->setEndValue(verticalScrollBar()->maximum()); m_touchAnimation->start(); break; } case touchGestureOperation::T_BOTTOM: { //如果手势往下 qCDebug(ClientLogger) << "Gesture direction: DOWN"; m_touchAnimation->setStartValue(verticalScrollBar()->sliderPosition()); m_touchAnimation->setEndValue(verticalScrollBar()->minimum()); m_touchAnimation->start(); break; } default: break; } } } } m_touchState = TS_NONE; mouseReleaseScheduleUpdate(); //update scene this->scene()->update(); } void DragInfoGraphicsView::mouseMoveEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseMoveEvent at" << event->pos(); //移动å��ç§» const int lengthOffset = 5; if (event->source() == Qt::MouseEventSynthesizedByQt) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseMoveEvent - Touch move event, current state:" << m_touchState; m_touchMovingDir = touchGestureOperation::T_MOVE_NONE; switch (m_touchState) { case TS_NONE: { break; } case TS_PRESS: { //1 点击 qint64 currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); qint64 timeOffset = currentTime - m_TouchBeginTime; //获å�–移动è·�离 qreal movingLength = QLineF(m_TouchBeginPoint, event->pos()).length(); //如果移动è·�离å°�于5且点击时间大于250毫秒å°�于900毫秒则为拖拽移动状æ€� if (movingLength < lengthOffset && (timeOffset > 250 && timeOffset < 900)) { qCDebug(ClientLogger) << "Changing touch state to drag move"; m_touchState = TS_DRAG_MOVE; m_touchDragMoveState = 1; } //如果移动è·�离大于5则为滑动状æ€� if (movingLength > lengthOffset) { qCDebug(ClientLogger) << "Changing touch state to slide"; m_touchState = TS_SLIDE; } break; } case TS_DRAG_MOVE: { //2 拖拽移动 qint64 currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); qint64 timeOffset = currentTime - m_TouchBeginTime; qreal movingLength = QLineF(m_TouchBeginPoint, event->pos()).length(); //如果移动è·�离å°�于5且点击时间大于900毫秒则为长按状æ€� if (movingLength < lengthOffset && (timeOffset > 900)) { qCDebug(ClientLogger) << "Changing touch state to long press"; m_touchState = TS_LONG_PRESS; } if (movingLength > lengthOffset) { if (m_touchDragMoveState == 1) { qCDebug(ClientLogger) << "Processing touch drag as mouse press"; mousePress(m_TouchBeginPoint.toPoint()); } m_touchDragMoveState = 2; } break; } case TS_SLIDE: { //3 滑动 QPointF _currentPoint = event->pos(); qCDebug(ClientLogger) << "Processing slide event"; slideEvent(m_TouchBeginPoint, _currentPoint); break; } default: break; } } if (m_press) { qCDebug(ClientLogger) << "Mouse moved while pressed, hiding schedule and resetting press state"; emit signalScheduleShow(false); m_press = false; DragInfoItem::setPressFlag(false); } if (m_DragStatus == NONE) { DragInfoItem *item = dynamic_cast(itemAt(event->pos())); if (item != nullptr) { if (isCanDragge(item->getData())) { if (m_DragStatus == NONE) { PosInItem position = getPosInItem(event->pos(), item->rect()); qCDebug(ClientLogger) << "Mouse over draggable item, position:" << position; switch (position) { case LEFT: case RIGHT: setCursor(Qt::SplitHCursor); break; case TOP: case BOTTOM: setCursor(Qt::SplitVCursor); break; default: setCursor(Qt::ArrowCursor); break; } } } } else { if (m_DragStatus == NONE) { setCursor(Qt::ArrowCursor); } } } else { QDateTime gDate = getPosDate(event->pos()); qCDebug(ClientLogger) << "Mouse move with drag status:" << m_DragStatus << "at date:" << gDate; switch (m_DragStatus) { case IsCreate: if (gDate.date().year() >= DDECalendar::QueryEarliestYear && gDate.date().year() <= DDECalendar::QueryLatestYear) { if (m_PressDate.date().year() >= DDECalendar::QueryEarliestYear && m_PressDate.date().year() <= DDECalendar::QueryLatestYear) { //如果拖拽创建为false则判断是å�¦å�¯è¢«åˆ›å»ºã€‚如果为true则ä¸�需è¦�判断 m_isCreate = m_isCreate ? m_isCreate : JudgeIsCreate(event->pos()); if (m_isCreate) { qCDebug(ClientLogger) << "Creating schedule via drag"; if (!IsEqualtime(m_MoveDate, gDate)) { m_MoveDate = gDate; m_DragScheduleInfo = getScheduleInfo(m_PressDate, m_MoveDate); upDateInfoShow(IsCreate, m_DragScheduleInfo); //更新背景上显示的item updateBackgroundShowItem(); setPressSelectInfo(m_DragScheduleInfo); } } } } break; case ChangeBegin: if (!IsEqualtime(m_MoveDate, gDate)) { qCDebug(ClientLogger) << "Changing schedule begin time to:" << gDate; m_MoveDate = gDate; //获å�–日程开始时间 QDateTime _beginTime = getDragScheduleInfoBeginTime(m_MoveDate); m_DragScheduleInfo->setDtStart(_beginTime); m_DragScheduleInfo->setDtEnd(m_InfoEndTime); upDateInfoShow(ChangeBegin, m_DragScheduleInfo); } break; case ChangeEnd: if (!IsEqualtime(m_MoveDate, gDate)) { qCDebug(ClientLogger) << "Changing schedule end time to:" << gDate; m_MoveDate = gDate; m_DragScheduleInfo->setDtStart(m_InfoBeginTime); //获å�–结æ�Ÿæ—¶é—´ QDateTime _endTime = getDragScheduleInfoEndTime(m_MoveDate); m_DragScheduleInfo->setDtEnd(_endTime); upDateInfoShow(ChangeEnd, m_DragScheduleInfo); } break; case ChangeWhole: { if (!m_PressRect.contains(event->pos())) { qCDebug(ClientLogger) << "Schedule dragged outside press rect, executing drag operation"; //拖拽å‰�设置是å�¦å·²ç»�更新日程界é�¢æ ‡å¿—为å�¦ m_hasUpdateMark = false; m_Drag->exec(Qt::MoveAction); m_Drag = nullptr; m_DragStatus = NONE; setCursor(Qt::ArrowCursor); //如果拖拽结æ�Ÿå�Žæ²¡æœ‰ä¿®æ”¹æ—¥ç¨‹åˆ™æ›´æ–°ä¸‹ç•Œé�¢æ—¥ç¨‹æ˜¾ç¤º if (!m_hasUpdateMark) { qCDebug(ClientLogger) << "No update mark after drag, updating info display"; updateInfo(); } } } break; default: break; } } DGraphicsView::mouseMoveEvent(event); } void DragInfoGraphicsView::wheelEvent(QWheelEvent *event) { qCDebug(ClientLogger) << "DragInfoGraphicsView::wheelEvent - angle delta:" << event->angleDelta(); stopTouchAnimation(); DGraphicsView::wheelEvent(event); } void DragInfoGraphicsView::contextMenuEvent(QContextMenuEvent *event) { qCDebug(ClientLogger) << "DragInfoGraphicsView::contextMenuEvent at" << event->pos(); DGraphicsView::contextMenuEvent(event); //如果ä¸�为默认状æ€�则ä¸�执行å�³å‡»äº‹ä»¶ if (m_DragStatus != NONE) { qCDebug(ClientLogger) << "Not in NONE drag status, ignoring context menu event"; return; } emit signalScheduleShow(false); m_press = false; m_DragStatus = NONE; //触摸状æ€�æ�¢å¤�为默认状æ€� m_touchState = TS_NONE; QGraphicsItem *listItem = itemAt(event->pos()); DragInfoItem *infoitem = dynamic_cast(listItem); CScheduleItem *tt = dynamic_cast(listItem); if (tt != nullptr && tt->getType() != 0) { qCDebug(ClientLogger) << "Schedule item with non-zero type, ignoring context menu"; return; } if (infoitem != nullptr && infoitem->isVisible()) { DSchedule::Ptr schData = infoitem->getData(); qCDebug(ClientLogger) << "Context menu for schedule" << "summary:" << schData->summary() << "is festival:" << CScheduleOperation::isFestival(schData); //是å�¦ä¸ºèŠ‚å�‡æ—¥æ—¥ç¨‹åˆ¤æ–­ if (!CScheduleOperation::isFestival(schData)) { m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //如果日程是ä¸�å�¯ä¿®æ”¹çš„则设置删除按钮无效 bool canDelete = !CScheduleOperation::scheduleIsInvariant(schData); qCDebug(ClientLogger) << "Schedule can be deleted:" << canDelete; m_deleteAction->setEnabled(canDelete); QAction *action_t = m_rightMenu->exec(QCursor::pos()); if (action_t == m_editAction) { qCDebug(ClientLogger) << "Editing schedule:" << schData->summary(); CScheduleDlg dlg(0, this); dlg.setData(schData); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "Schedule edit accepted, updating"; emit signalsUpdateSchedule(); emit sigStateChange(true); } else { qCDebug(ClientLogger) << "Schedule edit cancelled"; } } else if (action_t == m_deleteAction) { qCDebug(ClientLogger) << "Deleting schedule:" << schData->summary(); if(DeleteItem(schData)) { qCDebug(ClientLogger) << "Schedule deleted, updating state"; emit sigStateChange(true); } else { qCDebug(ClientLogger) << "Schedule delete failed or cancelled"; } } } else { qCDebug(ClientLogger) << "Showing festival schedule view"; CMyScheduleView dlg(schData, this); dlg.exec(); } } else { qCDebug(ClientLogger) << "No info item at position, creating context menu for background"; RightClickToCreate(listItem, event->pos()); } } void DragInfoGraphicsView::dragEnterEvent(QDragEnterEvent *event) { qCDebug(ClientLogger) << "DragInfoGraphicsView::dragEnterEvent with mime types:" << event->mimeData()->formats(); if (event->mimeData()->hasFormat("Info")) { QString str = event->mimeData()->data("Info"); DSchedule::Ptr info; DSchedule::fromJsonString(info, str); if (info.isNull()) { qCDebug(ClientLogger) << "Invalid schedule info in drag data, ignoring"; event->ignore(); } //如果该日程是ä¸�能被拖拽的则忽略ä¸�接å�— //é‡�å¤�日程ä¸�能被切æ�¢å…¨å¤©å’Œé�žå…¨å¤© if ((event->source() != this && info->recurs()) || !isCanDragge(info)) { qCDebug(ClientLogger) << "Schedule cannot be dragged (recurring or non-draggable)"; event->ignore(); } else { qCDebug(ClientLogger) << "Accepting drag for schedule"; event->accept(); //设置被修改的日程原始信æ�¯ m_PressScheduleInfo = info; } } else { qCDebug(ClientLogger) << "Drag data does not have Info format, ignoring"; event->ignore(); } } void DragInfoGraphicsView::dragLeaveEvent(QDragLeaveEvent *event) { qCDebug(ClientLogger) << "DragInfoGraphicsView::dragLeaveEvent"; Q_UNUSED(event); upDateInfoShow(); m_MoveDate = m_MoveDate.addMonths(-2); } void DragInfoGraphicsView::dragMoveEvent(QDragMoveEvent *event) { qCDebug(ClientLogger) << "DragInfoGraphicsView::dragMoveEvent at" << event->pos(); QString str = event->mimeData()->data("Info"); QDateTime gDate = getPosDate(event->pos()); QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(str.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { qCWarning(ClientLogger) << "Failed to parse schedule JSON:" << json_error.errorString(); return; } if (!IsEqualtime(m_MoveDate, gDate)) { qCDebug(ClientLogger) << "Move date changed to:" << gDate; m_MoveDate = gDate; QJsonObject rootobj = jsonDoc.object(); DSchedule::fromJsonString(m_DragScheduleInfo, str); m_DragScheduleInfo->setMoved(true); MoveInfoProcess(m_DragScheduleInfo, event->posF()); DragInfoItem::setPressSchedule(m_DragScheduleInfo); } } void DragInfoGraphicsView::dropEvent(QDropEvent *event) { qCDebug(ClientLogger) << "DragInfoGraphicsView::dropEvent at" << event->pos(); if (event->mimeData()->hasFormat("Info")) { if (event->source() != this || m_MoveDate != m_PressDate) { qCDebug(ClientLogger) << "Schedule dropped, source:" << event->source() << "move date:" << m_MoveDate << "press date:" << m_PressDate; //å�Žé�¢æ–¹æ³•出现模æ€�框,阻塞,导致拖拽图片ä¸�消失,手动先调用å�–消接å�£è§£å†³ QDrag::cancel(); auto startDate = m_DragScheduleInfo->dtStart(); auto endDate = m_DragScheduleInfo->dtEnd(); if (startDate.date().year() >= DDECalendar::QueryEarliestYear && endDate.date().year() <= DDECalendar::QueryLatestYear) { qCDebug(ClientLogger) << "Schedule dates within valid range, updating schedule"; emit sigStateChange(true); updateScheduleInfo(m_DragScheduleInfo); } else { qCDebug(ClientLogger) << "Schedule dates outside valid range, just updating display"; emit signalsUpdateSchedule(); } m_DragStatus = NONE; m_MoveDate = m_MoveDate.addMonths(-2); } } } bool DragInfoGraphicsView::event(QEvent *e) { if (e->type() == QEvent::Leave) { // qCDebug(ClientLogger) << "Mouse left view area, checking for schedule update"; if (m_DragStatus == IsCreate || m_DragStatus == ChangeBegin || m_DragStatus == ChangeEnd) mouseReleaseScheduleUpdate(); } return DGraphicsView::event(e); } void DragInfoGraphicsView::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::keyPressEvent with key:" << event->key(); DGraphicsView::keyPressEvent(event); } void DragInfoGraphicsView::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::paintEvent"; DGraphicsView::paintEvent(event); //绘制圆角效果 QPainter painter(viewport()); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(m_outerBorderColor); //左下角绘制圆角补角,颜色与外框背景色一致 if (m_leftShowRadius) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::paintEvent - Left show radius"; QPainterPath _leftPath; _leftPath.moveTo(0, this->height() - m_radius); _leftPath.arcTo(0, this->height() - m_radius * 2, m_radius * 2, m_radius * 2, 180, 90); _leftPath.lineTo(0, this->height()); _leftPath.lineTo(0, this->height() - m_radius); painter.drawPath(_leftPath); } //å�³ä¸‹è§’绘制圆角补角 if (m_rightShowRadius) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::paintEvent - Right show radius"; QPainterPath _rightPath; _rightPath.moveTo(this->width() - m_radius, this->height()); _rightPath.arcTo(this->width() - m_radius * 2, this->height() - m_radius * 2, m_radius * 2, m_radius * 2, 270, 90); _rightPath.lineTo(this->width(), this->height()); _rightPath.lineTo(this->width() - m_radius, this->height()); painter.drawPath(_rightPath); painter.end(); } } void DragInfoGraphicsView::showEvent(QShowEvent *event) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::showEvent"; //显示时é‡�置大å°� resize(this->width(), this->height()); DGraphicsView::showEvent(event); } void DragInfoGraphicsView::slotCreate() { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotCreate"; slotCreate(m_createDate); } /** * @brief DragInfoGraphicsView::setPressSelectInfo 设置点击选中日程 * @param info */ void DragInfoGraphicsView::setPressSelectInfo(const DSchedule::Ptr &info) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setPressSelectInfo with info"; DragInfoItem::setPressSchedule(info); } /** * @brief DragInfoGraphicsView::updateScheduleInfo 拖拽更新日程信æ�¯ * @param info */ void DragInfoGraphicsView::updateScheduleInfo(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "DragInfoGraphicsView::updateScheduleInfo with info"; QVariant variant; //获å�–主窗å�£æŒ‡é’ˆ CalendarGlobalEnv::getGlobalEnv()->getValueByKey("MainWindow", variant); QObject *parent = static_cast(variant.value()); //设置父类为主窗å�£ CScheduleOperation _scheduleOperation(info->scheduleTypeID(), qobject_cast(parent)); if (_scheduleOperation.changeSchedule(info, m_PressScheduleInfo)) { qCDebug(ClientLogger) << "DragInfoGraphicsView::updateScheduleInfo - Schedule changed successfully"; //如果日程修改æˆ�功则更新更新标志 m_hasUpdateMark = true; } else { //如果å�–消更新则主动更新显示 updateInfo(); } } void DragInfoGraphicsView::DragPressEvent(const QPoint &pos, DragInfoItem *item) { qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent with pos:" << pos; m_PressPos = pos; m_PressDate = getPosDate(pos); m_MoveDate = m_PressDate.addMonths(-2); CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, mapToGlobal(pos)); if (item != nullptr) { PosInItem mpressstatus = getPosInItem(pos, item->boundingRect()); if (mpressstatus != MIDDLE && !isCanDragge(item->getData())) { qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent - Item cannot be dragged"; return; } //拖拽使用副本,ä¸�更改原始日程 m_DragScheduleInfo.reset(item->getData()->clone()); m_PressScheduleInfo = item->getData(); m_InfoBeginTime = m_DragScheduleInfo->dtStart(); m_InfoEndTime = m_DragScheduleInfo->dtEnd(); switch (mpressstatus) { case TOP: qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent - Top"; m_DragStatus = ChangeBegin; setCursor(Qt::SplitVCursor); break; case BOTTOM: qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent - Bottom"; m_DragStatus = ChangeEnd; setCursor(Qt::SplitVCursor); break; case LEFT: qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent - Left"; m_DragStatus = ChangeBegin; setCursor(Qt::SplitHCursor); break; case RIGHT: qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent - Right"; m_DragStatus = ChangeEnd; setCursor(Qt::SplitHCursor); break; default: qCDebug(ClientLogger) << "DragInfoGraphicsView::DragPressEvent - Default"; ShowSchedule(item); m_DragStatus = ChangeWhole; QMimeData *mimeData = new QMimeData(); mimeData->setText(m_DragScheduleInfo->summary()); QString strData; DSchedule::toJsonString(m_DragScheduleInfo, strData); //æ•°æ�®è½¬æ�¢ mimeData->setData("Info", strData.toUtf8()); if (m_Drag == nullptr) { m_Drag = new QDrag(this); } m_Drag->setMimeData(mimeData); QPointF itemPos = QPointF(pos.x() - item->boundingRect().x(), pos.y() - item->boundingRect().y()); m_Drag->setHotSpot(itemPos.toPoint()); setDragPixmap(m_Drag, item); break; } } else { m_DragStatus = IsCreate; m_isCreate = false; } } /** * @brief DragInfoGraphicsView::mouseReleaseScheduleUpdate 鼠标左击释放数æ�®å¤„ç�† */ void DragInfoGraphicsView::mouseReleaseScheduleUpdate() { qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseReleaseScheduleUpdate"; setCursor(Qt::ArrowCursor); m_press = false; DragInfoItem::setPressFlag(false); switch (m_DragStatus) { case IsCreate: qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseReleaseScheduleUpdate - IsCreate"; if (MeetCreationConditions(m_MoveDate)) { //如果ä¸�添加会进入leaveEvent事件内的æ�¡ä»¶ m_DragStatus = NONE; CScheduleDlg dlg(1, this); dlg.setData(m_DragScheduleInfo); //如果å�–消新建则主动刷新日程信æ�¯ dlg.exec(); //å› dtk override了exec函数,这里使用result判断返回值类型,如果ä¸�为Accepted则刷新界é�¢ if (dlg.result() != DDialog::Accepted) { updateInfo(); } //设置选中日程为无效日程 setPressSelectInfo(DSchedule::Ptr()); } break; case ChangeBegin: qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseReleaseScheduleUpdate - ChangeBegin"; if (!IsEqualtime(m_MoveDate, m_InfoBeginTime)) { //如果ä¸�添加会进入leaveEvent事件内的æ�¡ä»¶ m_DragStatus = NONE; updateScheduleInfo(m_DragScheduleInfo); } break; case ChangeEnd: qCDebug(ClientLogger) << "DragInfoGraphicsView::mouseReleaseScheduleUpdate - ChangeEnd"; if (!IsEqualtime(m_MoveDate, m_InfoEndTime)) { //如果ä¸�添加会进入leaveEvent事件内的æ�¡ä»¶ m_DragStatus = NONE; updateScheduleInfo(m_DragScheduleInfo); } break; default: break; } m_DragStatus = NONE; update(); } void DragInfoGraphicsView::mousePress(const QPoint &point) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mousePress with point:" << point; setPressSelectInfo(DSchedule::Ptr()); //设置拖拽日程为无效日程 m_DragScheduleInfo = DSchedule::Ptr(); pressScheduleInit(); QGraphicsItem *listItem = itemAt(point); DragInfoItem *infoitem = dynamic_cast(listItem); //ä¸�满足拖拽æ�¡ä»¶çš„æ—¥ç¨‹ä¸�进行拖拽事件 if (infoitem) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mousePress - Infoitem found"; setPressSelectInfo(infoitem->getData()); m_PressScheduleInfo = infoitem->getData(); m_press = true; if (isCanDragge(infoitem->getData())) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mousePress - Can drag"; //满足拖拽æ�¡ä»¶ DragInfoItem::setPressFlag(true); DragPressEvent(point, infoitem); } else { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mousePress - Cannot drag"; //ä¸�满足拖拽æ�¡ä»¶ï¼Œå�ªå±•示信æ�¯å¼¹çª— m_PressPos = point; m_PressDate = getPosDate(point); CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, mapToGlobal(point)); ShowSchedule(infoitem); } } else { // qCDebug(ClientLogger) << "DragInfoGraphicsView::mousePress - No infoitem"; //没有日程信æ�¯ï¼Œå�¯æ»‘动 emit signalScheduleShow(false); DragPressEvent(point, infoitem); } this->scene()->update(); update(); } int DragInfoGraphicsView::getSlidePos() const { // qCDebug(ClientLogger) << "DragInfoGraphicsView::getSlidePos"; return m_touchSlidePos; } void DragInfoGraphicsView::setSlidePos(int pos) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setSlidePos with pos:" << pos; m_touchSlidePos = pos; verticalScrollBar()->setValue(m_touchSlidePos); } void DragInfoGraphicsView::stopTouchAnimation() { // qCDebug(ClientLogger) << "DragInfoGraphicsView::stopTouchAnimation"; m_touchAnimation->stop(); } /** * @brief DragInfoGraphicsView::DeleteItem 删除日程 * @param info */ bool DragInfoGraphicsView::DeleteItem(const DSchedule::Ptr &info) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::DeleteItem with info"; if (info.isNull()) { qCWarning(ClientLogger) << "Cannot delete null schedule"; return false; } qCDebug(ClientLogger) << "Deleting schedule"; CScheduleOperation _scheduleOperation(info->scheduleTypeID(), this); return _scheduleOperation.deleteSchedule(info); } /** * @brief DragInfoGraphicsView::setSelectSearchSchedule 设置选中æ�œç´¢æ—¥ç¨‹ * @param scheduleInfo */ void DragInfoGraphicsView::setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setSelectSearchSchedule with scheduleInfo:" << scheduleInfo->summary(); setPressSelectInfo(scheduleInfo); } void DragInfoGraphicsView::setDragPixmap(QDrag *drag, DragInfoItem *item) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setDragPixmap with item:" << item->getData()->summary(); Q_UNUSED(item); //设置一个1*1çš„é€�明图片,è¦�ä¸�然关闭窗å�£ç‰¹æ•ˆä¼šæœ‰ä¸€ä¸ªå°�黑点 QPixmap pixmap(1, 1); pixmap.fill(Qt::transparent); drag->setPixmap(pixmap); //设置图标ä½�置为鼠标ä½�ç½® drag->setHotSpot(QPoint(0, 0)); } void DragInfoGraphicsView::slotCreate(const QDateTime &date) { qCDebug(ClientLogger) << "Creating new schedule" << "date:" << date; CScheduleDlg dlg(1, this); QDateTime tDatatime; tDatatime.setDate(date.date()); if (date.date() == QDate::currentDate()) { tDatatime.setTime(QTime::currentTime()); } else { tDatatime.setTime(QTime(8, 0)); } dlg.setDate(tDatatime); dlg.setAllDay(true); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "New schedule created successfully"; emit sigStateChange(true); emit signalsUpdateSchedule(); } else { qCDebug(ClientLogger) << "New schedule creation cancelled"; } } DSchedule::Ptr DragInfoGraphicsView::getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::getScheduleInfo with beginDate:" << beginDate << "endDate:" << endDate; DSchedule::Ptr info; info.reset(new DSchedule()); if (beginDate.daysTo(endDate) > 0) { info->setDtStart(QDateTime(beginDate.date(), QTime(0, 0, 0))); info->setDtEnd(QDateTime(endDate.date(), QTime(23, 59, 59))); } else { info->setDtStart(QDateTime(endDate.date(), QTime(0, 0, 0))); info->setDtEnd(QDateTime(beginDate.date(), QTime(23, 59, 00))); } info->setSummary(tr("New Event")); info->setAllDay(true); //设置默认日程类型为工作 info->setScheduleTypeID("107c369e-b13a-4d45-9ff3-de4eb3c0475b"); //设置æ��醒规则 info->setAlarmType(DSchedule::Alarm_15Hour_Front); return info; } void DragInfoGraphicsView::ShowSchedule(DragInfoItem *infoitem) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::ShowSchedule with infoitem:" << infoitem->getData()->summary(); if (infoitem == nullptr) return; emit signalScheduleShow(true, infoitem->getData()); } void DragInfoGraphicsView::setTheMe(int type) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setTheMe with type:" << type; Q_UNUSED(type); DPalette _painte; //获å�–外框背景色 m_outerBorderColor = _painte.color(QPalette::Active, QPalette::Window); } void DragInfoGraphicsView::slideEvent(QPointF &startPoint, QPointF &stopPort) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slideEvent with startPoint:" << startPoint << "stopPort:" << stopPort; qreal _movingLine {0}; //获å�–滑动方å�‘ touchGestureOperation::TouchMovingDirection _touchMovingDir = touchGestureOperation::getTouchMovingDir(startPoint, stopPort, _movingLine); m_touchMovingDir = _touchMovingDir; //切æ�¢æ ‡å¿— 0 ä¸�切æ�¢ 1 下一页 -1 上一页 int delta {0}; //移动å��ç§» 25则切æ�¢ const int moveOffset = 25; switch (_touchMovingDir) { case touchGestureOperation::T_TOP: case touchGestureOperation::T_BOTTOM: { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slideEvent - Top or Bottom"; const int pos_Diff_Y = qFloor(stopPort.y() - startPoint.y()); verticalScrollBar()->setValue(verticalScrollBar()->sliderPosition() - pos_Diff_Y); startPoint = stopPort; break; } case touchGestureOperation::T_LEFT: { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slideEvent - Left"; if (_movingLine > moveOffset) { delta = 1; startPoint = stopPort; } break; } case touchGestureOperation::T_RIGHT: { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slideEvent - Right"; if (_movingLine > moveOffset) { delta = -1; startPoint = stopPort; } break; } default: break; } if (delta != 0) { emit signalAngleDelta(delta); } } /** * @brief DragInfoGraphicsView::updateInfo 更新日程数æ�®æ˜¾ç¤º */ void DragInfoGraphicsView::updateInfo() { // qCDebug(ClientLogger) << "DragInfoGraphicsView::updateInfo"; //如果拖拽日程有效则更新为ä¸�是移动日程 if (m_DragScheduleInfo && m_DragScheduleInfo->isValid() && m_DragScheduleInfo->uid() != "0") { qCDebug(ClientLogger) << "DragInfoGraphicsView::updateInfo - Update schedule data"; m_DragScheduleInfo->setMoved(false); //设置选择日程状æ€� setPressSelectInfo(m_DragScheduleInfo); } } int DragInfoGraphicsView::getDragStatus() const { // qCDebug(ClientLogger) << "DragInfoGraphicsView::getDragStatus"; return m_DragStatus; } void DragInfoGraphicsView::setShowRadius(bool leftShow, bool rightShow) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setShowRadius with leftShow:" << leftShow << "rightShow:" << rightShow; m_leftShowRadius = leftShow; m_rightShowRadius = rightShow; } bool DragInfoGraphicsView::isCanDragge(const DSchedule::Ptr &info) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::isCanDragge with info"; if (info.isNull() || info->scheduleTypeID().isEmpty()) return false; //是å�¦ä¸ºèŠ‚å�‡æ—¥æ—¥ç¨‹åˆ¤æ–­ if (CScheduleOperation::isFestival(info)) return false; if (info->lunnar() && !QLocale::system().name().startsWith("zh_")) return false; //日程ä¸�å�¯è¢«ä¿®æ”¹ if (CScheduleOperation::scheduleIsInvariant(info)) { return false; } return true; } /** * @brief DragInfoGraphicsView::slotDeleteItem 删除日程 */ void DragInfoGraphicsView::slotDeleteItem() { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slotDeleteItem"; //获å�–选中日程 DSchedule::Ptr _pressSchedule = DragInfoItem::getPressSchedule(); //æ ¹æ�®ç„¦ç‚¹çжæ€�获å�–当å‰�焦点的item CSceneBackgroundItem *backgroundItem = dynamic_cast(m_Scene->getCurrentFocusItem()); if (backgroundItem != nullptr) { DragInfoItem *dFocusItem = dynamic_cast(backgroundItem->getFocusItem()); if (dFocusItem != nullptr && dFocusItem->getItemType() == CFocusItem::CITEM) { if (dFocusItem->getItemFocus()) { _pressSchedule = dFocusItem->getData(); } } } //判断是å�¦æœ‰æ•ˆ,如果为有效日程且日程类型ä¸�为节日或纪念日或ä¸�å�¯æ›´æ”¹æ—¥ç¨‹åˆ™åˆ é™¤ //判断日程信æ�¯ if (!_pressSchedule.isNull() && _pressSchedule->isValid() && !CScheduleOperation::isFestival(_pressSchedule) && !CScheduleOperation::scheduleIsInvariant(_pressSchedule)) { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotDeleteItem - Delete schedule"; CScheduleOperation _scheduleOperation(_pressSchedule->scheduleTypeID(), this); _scheduleOperation.deleteSchedule(_pressSchedule); //设置选择日程为无效日程 setPressSelectInfo(DSchedule::Ptr()); //设置拖拽日程为无效日程 m_DragScheduleInfo = DragInfoItem::getPressSchedule(); } } void DragInfoGraphicsView::slotSwitchPrePage(const QDate &focusDate, bool isSwitchView) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slotSwitchPrePage with focusDate:" << focusDate << "isSwitchView:" << isSwitchView; emit signalSwitchPrePage(); if (isSwitchView) { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotSwitchPrePage - Switch view"; m_Scene->signalSwitchView(focusDate, true); } else { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotSwitchPrePage - Set scene current item focus"; setSceneCurrentItemFocus(focusDate); } } void DragInfoGraphicsView::slotSwitchNextPage(const QDate &focusDate, bool isSwitchView) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slotSwitchNextPage with focusDate:" << focusDate << "isSwitchView:" << isSwitchView; emit signalSwitchNextPage(); //如果需è¦�切æ�¢è§†å›¾åˆ™ if (isSwitchView) { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotSwitchNextPage - Switch view"; m_Scene->signalSwitchView(focusDate, true); } else { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotSwitchNextPage - Set scene current item focus"; setSceneCurrentItemFocus(focusDate); } } void DragInfoGraphicsView::slotContextMenu(CFocusItem *item) { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotContextMenu"; DragInfoItem *infoitem = dynamic_cast(item); if (infoitem != nullptr && infoitem->isVisible()) { DSchedule::Ptr schData = infoitem->getData(); qCDebug(ClientLogger) << "Context menu for focused schedule" << "summary:" << schData->summary() << "is festival:" << CScheduleOperation::isFestival(schData); //如果为节å�‡æ—¥åˆ™é€€å‡ºä¸�展示å�³å‡»è�œå�• if (CScheduleOperation::isFestival(schData)) return; //å¿«æ�·é”®è°ƒå‡ºå�³å‡»è�œå�• m_Scene->setIsContextMenu(true); m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //如果日程ä¸�å�¯ä¿®æ”¹åˆ™è®¾ç½®åˆ é™¤æ— æ•ˆ m_deleteAction->setEnabled(!CScheduleOperation::scheduleIsInvariant(schData)); QPointF itemPos = QPointF(infoitem->rect().x() + infoitem->rect().width() / 2, infoitem->rect().y() + infoitem->rect().height() / 2); QPointF scene_pos = infoitem->mapToScene(itemPos); QPointF view_pos = mapFromScene(scene_pos); QPoint screen_pos = mapToGlobal(view_pos.toPoint()); QAction *action_t = m_rightMenu->exec(screen_pos); if (action_t == m_editAction) { qCDebug(ClientLogger) << "Editing focused schedule:" << schData->summary(); CScheduleDlg dlg(0, this); dlg.setData(schData); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotContextMenu - Edit schedule successfully"; emit signalsUpdateSchedule(); emit sigStateChange(true); } } else if (action_t == m_deleteAction) { qCDebug(ClientLogger) << "Deleting focused schedule:" << schData->summary(); if(DeleteItem(schData)) { qCDebug(ClientLogger) << "DragInfoGraphicsView::slotContextMenu - Delete schedule successfully"; emit sigStateChange(true); } } m_Scene->setIsContextMenu(false); m_Scene->currentFocusItemUpdate(); } } /** * @brief DragInfoGraphicsView::slotsetNextFocus 切æ�¢åˆ°ä¸‹ä¸€ä¸ªç„¦ç‚¹ */ void DragInfoGraphicsView::slotsetNextFocus() { // qCDebug(ClientLogger) << "DragInfoGraphicsView::slotsetNextFocus"; focusNextPrevChild(true); } void DragInfoGraphicsView::setSceneCurrentItemFocus(const QDate &focusDate) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setSceneCurrentItemFocus with focusDate:" << focusDate; Q_UNUSED(focusDate); } /** * @brief DragInfoGraphicsView::pressScheduleInit åˆ�始化点击日程 */ void DragInfoGraphicsView::pressScheduleInit() { // qCDebug(ClientLogger) << "DragInfoGraphicsView::pressScheduleInit"; m_PressScheduleInfo = DSchedule::Ptr(); } QDate DragInfoGraphicsView::getCurrentDate() const { // qCDebug(ClientLogger) << "DragInfoGraphicsView::getCurrentDate"; return m_currentDate; } void DragInfoGraphicsView::setCurrentDate(const QDate ¤tDate) { // qCDebug(ClientLogger) << "DragInfoGraphicsView::setCurrentDate with currentDate:" << currentDate; m_currentDate = currentDate; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/draginfographicsview.h000066400000000000000000000212561523260663500307270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DRAGINFOGRAPHICSVIEW_H #define DRAGINFOGRAPHICSVIEW_H #include "graphicsItem/draginfoitem.h" #include "../widget/touchgestureoperation.h" #include "dschedule.h" #include "cgraphicsscene.h" #include #include #include #include DWIDGET_USE_NAMESPACE class CScheduleDataManage; class QPropertyAnimation; class DragInfoGraphicsView : public DGraphicsView { Q_OBJECT Q_PROPERTY(int touchSlidePos READ getSlidePos WRITE setSlidePos) public: explicit DragInfoGraphicsView(DWidget *parent = nullptr); ~DragInfoGraphicsView() override; public: //é¼ æ ‡ä½�ç½® enum PosInItem {LEFT, MIDDLE, RIGHT, TOP, BOTTOM}; //鼠标移动状æ€� enum DragStatus {IsCreate = 0, ChangeBegin = 1, ChangeEnd = 2, ChangeWhole = 3, NONE = 4}; /** * @brief The TouchState enum 触摸状æ€� */ enum TouchState { TS_NONE //默认状æ€� , TS_PRESS //点击 , TS_DRAG_MOVE //拖拽移动 , TS_SLIDE //滑动 , TS_LONG_PRESS //长按 }; int getDragStatus() const; void setShowRadius(bool leftShow = false, bool rightShow = false); //判断是å�¦æ»¡è¶³æ‹–拽æ�¡ä»¶ bool isCanDragge(const DSchedule::Ptr &info); protected: void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void wheelEvent(QWheelEvent *event) override; void contextMenuEvent(QContextMenuEvent *event) override; void dragEnterEvent(QDragEnterEvent *event) override; void dragLeaveEvent(QDragLeaveEvent *event) override; void dragMoveEvent(QDragMoveEvent *event) override; void dropEvent(QDropEvent *event) override; bool event(QEvent *e) override; void keyPressEvent(QKeyEvent *event) override; void paintEvent(QPaintEvent *event) override; void showEvent(QShowEvent *event) override; private: void slotCreate(); //设置点击选中日程 void setPressSelectInfo(const DSchedule::Ptr &info); //拖拽更新日程信æ�¯ void updateScheduleInfo(const DSchedule::Ptr &info); void DragPressEvent(const QPoint &pos, DragInfoItem *item); //鼠标左击释放数æ�®å¤„ç�† void mouseReleaseScheduleUpdate(); /** * @brief mousePress 鼠标左击事件处ç�† * @param point 左击å��æ ‡ */ void mousePress(const QPoint &point); /** * @brief getSlidePos 获å�–滑动ä½�ç½® * @return */ int getSlidePos() const; /** * @brief setSlidePos 设置滑动ä½�ç½® * @param pos */ void setSlidePos(int pos); /** * @brief stopTouchAnimation å�œæ­¢è§¦æ‘¸æ»‘动动画效果 */ void stopTouchAnimation(); protected: //删除日程 bool DeleteItem(const DSchedule::Ptr &info); public: //设置æ�œç´¢é€‰ä¸­æ—¥ç¨‹ virtual void setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo); //åˆ�始化点击日程 void pressScheduleInit(); QDate getCurrentDate() const; void setCurrentDate(const QDate ¤tDate); protected: virtual void setDragPixmap(QDrag *drag, DragInfoItem *item); virtual void slotCreate(const QDateTime &date); //符å�ˆåˆ›å»ºæ�¡ä»¶ virtual bool MeetCreationConditions(const QDateTime &date) = 0; virtual void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) = 0; virtual QDateTime getPosDate(const QPoint &p) = 0; virtual void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) = 0; virtual PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect) = 0; virtual DSchedule::Ptr getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate); virtual void ShowSchedule(DragInfoItem *infoitem); //设置主题 virtual void setTheMe(int type = 0); //判断时间是å�¦ç›¸ç­‰ virtual bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) = 0; //æ ¹æ�®é¼ æ ‡ç§»åŠ¨çš„è·�离判断是å�¦åˆ›å»ºæ—¥ç¨‹ virtual bool JudgeIsCreate(const QPointF &pos) = 0; virtual void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) = 0; /** * @brief getDragScheduleInfoBeginTime 获å�–拖拽日程开始时间 * @param moveDateTime 当å‰�鼠标移动å��标对应的时间 * @return */ virtual QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) = 0; /** * @brief getDragScheduleInfoEndTime 获å�–拖拽日程结æ�Ÿæ—¶é—´ * @param moveDateTime 当å‰�鼠标移动å��标对应的时间 * @return */ virtual QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) = 0; /** * @brief slideEvent 触摸滑动事件处ç�† * @param startPoint 触摸开始å��æ ‡ * @param stopPort 触摸结æ�Ÿå��æ ‡ */ virtual void slideEvent(QPointF &startPoint, QPointF &stopPort); //更新日程显示 virtual void updateInfo(); //更新背景上显示的item virtual void updateBackgroundShowItem() = 0; signals: /** * @brief signalAngleDelta å�‘é€�滚动信å�·æ»šåŠ¨ç›¸å¯¹é‡� * @param delta 滚动相对é‡� */ void signalAngleDelta(int delta); //更新获å�–日程信æ�¯ void signalsUpdateSchedule(); /** * @brief signalScheduleShow å�‘é€�日程æ��示框信å�· * @param isShow 是å�¦æ˜¾ç¤º * @param out 显示的日程信æ�¯ */ void signalScheduleShow(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); //sceneæ›´æ–° void signalSceneUpdate(); void signalSwitchPrePage(); void signalSwitchNextPage(); void signalGotoDayView(const QDate &date); void sigStateChange(bool bState); public slots: //删除日程 void slotDeleteItem(); void slotSwitchPrePage(const QDate &focusDate, bool isSwitchView = false); void slotSwitchNextPage(const QDate &focusDate, bool isSwitchView = false); void slotContextMenu(CFocusItem *item); //切æ�¢ç„¦ç‚¹åˆ°ä¸‹ä¸€ä¸ª void slotsetNextFocus(); protected: //设置场景数æ�®åˆ‡æ�¢å�Žå½“å‰�item焦点 virtual void setSceneCurrentItemFocus(const QDate &focusDate); protected: int m_themetype = 0; CGraphicsScene *m_Scene = nullptr; bool m_press = false; QAction *m_createAction = nullptr; // 创建日程 QAction *m_editAction = nullptr; QAction *m_deleteAction = nullptr; DMenu *m_rightMenu = nullptr; QDateTime m_createDate; DragStatus m_DragStatus = NONE; bool m_isCreate; QDateTime m_PressDate; QDateTime m_MoveDate; QPoint m_PressPos; //ä¿�è¯�月,周/日全天和é�žå…¨å¤©çš„æ‹–拽日程为å�Œä¸€ä¸ª static DSchedule::Ptr m_DragScheduleInfo; static bool m_hasUpdateMark; //拖拽å�Žæ˜¯å�¦éœ€è¦�更新显示标志 QDateTime m_InfoBeginTime; QDateTime m_InfoEndTime; QDrag *m_Drag = nullptr; //点击的原始info DSchedule::Ptr m_PressScheduleInfo; QRectF m_PressRect; /** * @brief m_TouchBeginPoint 触摸开始å��æ ‡ */ QPointF m_TouchBeginPoint; /** * @brief m_TouchBeginTime 触摸点击å±�幕的事件 */ qint64 m_TouchBeginTime; /** * @brief m_touchState 触摸状æ€� */ TouchState m_touchState = TS_NONE; /** * @brief m_touchDragMoveState 触摸拖拽移动状æ€� * 0 原始状æ€� * 1 拖拽确认,移动的时候触å�‘点击事件 * 2 拖拽移动 */ int m_touchDragMoveState = 0; /** * @brief m_touchState 触摸滑动ä½�ç½® */ int m_touchSlidePos {0}; /** * @brief m_touchAnimation 触摸滑动动画 */ QPropertyAnimation *m_touchAnimation; /** * @brief m_touchMovingDir 记录快速滑动方å�‘ */ touchGestureOperation::TouchMovingDirection m_touchMovingDir {touchGestureOperation::T_MOVE_NONE}; qreal m_radius{16}; //圆角å�Šå¾„ bool m_leftShowRadius{false}; //左下角显示圆角 bool m_rightShowRadius{false}; //å�³ä¸‹è§’显示圆角 QColor m_outerBorderColor; //外边框背景色 QDate m_currentDate; }; #endif // DRAGINFOGRAPHICSVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/000077500000000000000000000000001523260663500267625ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/calldayscheduleitem.cpp000066400000000000000000000131141523260663500334730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calldayscheduleitem.h" #include "commondef.h" #include CAllDayScheduleItem::CAllDayScheduleItem(QRectF rect, QGraphicsItem *parent) : DragInfoItem(rect, parent) { qCDebug(ClientLogger) << "CAllDayScheduleItem constructor - rect:" << rect; } bool CAllDayScheduleItem::hasSelectSchedule(const DSchedule::Ptr &info) { // qCDebug(ClientLogger) << "CAllDayScheduleItem::hasSelectSchedule"; return info == m_vScheduleInfo; } void CAllDayScheduleItem::paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap) { // qCDebug(ClientLogger) << "CAllDayScheduleItem::paintBackground - rect:" << rect; Q_UNUSED(isPixMap); m_font = DFontSizeManager::instance()->get(m_sizeType, m_font); painter->setRenderHints(QPainter::Antialiasing); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹èŽ·å�–类型颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_vScheduleInfo->scheduleTypeID()); QRectF drawrect = rect; QColor textcolor = CScheduleDataManage::getScheduleDataManage()->getTextColor(); //判断是å�¦ä¸ºé€‰ä¸­æ—¥ç¨‹ if (m_vScheduleInfo == m_pressInfo) { // qCDebug(ClientLogger) << "Schedule is pressed schedule"; //判断当å‰�日程是å�¦ä¸ºæ‹–拽移动日程 if (m_vScheduleInfo->isMoved() == m_pressInfo->isMoved()) { // qCDebug(ClientLogger) << "Setting high flag to true"; m_vHighflag = true; } else { // qCDebug(ClientLogger) << "Setting opacity to 0.4"; painter->setOpacity(0.4); textcolor.setAlphaF(0.4); } m_vSelectflag = m_press; } int themetype = CScheduleDataManage::getScheduleDataManage()->getTheme(); // qCDebug(ClientLogger) << "Current theme type:" << themetype; QColor brushColor = gdColor.normalColor; if (m_vHoverflag) { // qCDebug(ClientLogger) << "Schedule is hovered, using hover color"; brushColor = gdColor.hoverColor; } else if (m_vHighflag) { // qCDebug(ClientLogger) << "Schedule is highlighted, using press color"; brushColor = gdColor.pressColor; } else if (m_vSelectflag) { // qCDebug(ClientLogger) << "Schedule is selected, using press color with reduced opacity"; brushColor = gdColor.pressColor; textcolor.setAlphaF(0.4); } QRectF fillRect = QRectF(drawrect.x(), drawrect.y(), drawrect.width(), drawrect.height() - 2); //将直线开始点设为0,终点设为1,然å�Žåˆ†æ®µè®¾ç½®é¢œè‰² painter->setBrush(brushColor); if (getItemFocus() && isPixMap == false) { // qCDebug(ClientLogger) << "Item has focus, drawing frame with system active color"; QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); } else { painter->setPen(Qt::NoPen); } painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); painter->setFont(m_font); painter->setPen(textcolor); QFontMetrics fm = painter->fontMetrics(); QString tSTitleName = m_vScheduleInfo->summary(); tSTitleName.replace("\n", ""); QString str = tSTitleName; //左侧å��ç§»13å�³ä¾§å��ç§»8 qreal textWidth = fillRect.width() - 13 - 8 - m_offset * 2; QString tStr; int _rightOffset = fm.horizontalAdvance("..."); //显示宽度 qreal _showWidth = textWidth; // qCDebug(ClientLogger) << "Schedule title:" << str << "available width:" << _showWidth; //如果标题总长度大于显示长度则显示长度须å‡�去"..."的长度 if (fm.horizontalAdvance(str) > _showWidth) { // qCDebug(ClientLogger) << "Title too long, truncating"; _showWidth -= _rightOffset; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr); //如果宽度大于显示长度则去除最å�Žæ·»åŠ çš„å­—ç¬¦ if (widthT > _showWidth) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } } else { tStr = str; } // qCDebug(ClientLogger) << "Final display text:" << tStr; painter->drawText(QRectF(fillRect.topLeft().x() + 13, fillRect.y() - 1, textWidth, fillRect.height() - 1), Qt::AlignLeft | Qt::AlignVCenter, tStr); if (m_vHoverflag && !m_vSelectflag) { // qCDebug(ClientLogger) << "Drawing hover effect"; QRectF tRect = QRectF(fillRect.x() + 0.5, fillRect.y() + 0.5, fillRect.width() - 1, fillRect.height() - 1); painter->save(); QPen pen; QColor selcolor; if (themetype == 2) { selcolor = "#FFFFFF"; } else { selcolor = "#000000"; } selcolor.setAlphaF(0.08); pen.setColor(selcolor); pen.setWidthF(1); pen.setStyle(Qt::SolidLine); painter->setBrush(Qt::NoBrush); painter->setPen(pen); painter->drawRoundedRect(tRect, rect.height() / 3, rect.height() / 3); painter->restore(); } if (m_vSelectflag) { // qCDebug(ClientLogger) << "Drawing selection effect"; QColor selcolor = "#000000"; selcolor.setAlphaF(0.05); painter->setBrush(selcolor); painter->setPen(Qt::NoPen); painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/calldayscheduleitem.h000066400000000000000000000011261523260663500331400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALLDAYSCHEDULEITEM_H #define CALLDAYSCHEDULEITEM_H #include "draginfoitem.h" #include "dschedule.h" class CAllDayScheduleItem : public DragInfoItem { Q_OBJECT public: explicit CAllDayScheduleItem(QRectF rect, QGraphicsItem *parent = nullptr); bool hasSelectSchedule(const DSchedule::Ptr &info); protected: void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) override; }; #endif // CALLDAYSCHEDULEITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cfocusitem.cpp000066400000000000000000000054041523260663500316320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cfocusitem.h" #include "commondef.h" #include "scheduledatamanage.h" #include #include CFocusItem::CFocusItem(QGraphicsItem *parent) : QGraphicsRectItem(parent) , m_NextFocusItem(nullptr) , m_itemType(CITEM) , m_isFocus(false) { // qCDebug(ClientLogger) << "CFocusItem constructor"; } /** * @brief CFocusItem::setNextFocusItem 设置下一个FocusItem * @param nextFocusItem */ void CFocusItem::setNextFocusItem(CFocusItem *nextFocusItem) { // qCDebug(ClientLogger) << "CFocusItem::setNextFocusItem - next item:" << (nextFocusItem ? "set" : "null"); m_NextFocusItem = nextFocusItem; } /** * @brief CFocusItem::setItemFocus 设置item是å�¦èŽ·å�–focus * @param isFocus */ void CFocusItem::setItemFocus(bool isFocus) { // qCDebug(ClientLogger) << "CFocusItem::setItemFocus - isFocus:" << isFocus; m_isFocus = isFocus; this->scene()->update(); } /** * @brief CFocusItem::getItemFocus 获å�–该item是å�¦focus * @return */ bool CFocusItem::getItemFocus() const { // qCDebug(ClientLogger) << "CFocusItem::getItemFocus - returning:" << m_isFocus; return m_isFocus; } /** * @brief CFocusItem::setItemType 设置item类型 * @param itemType */ void CFocusItem::setItemType(CFocusItem::CItemType itemType) { // qCDebug(ClientLogger) << "CFocusItem::setItemType - itemType:" << itemType; m_itemType = itemType; } /** * @brief CFocusItem::getItemType 获å�–item类型 * @return */ CFocusItem::CItemType CFocusItem::getItemType() const { // qCDebug(ClientLogger) << "CFocusItem::getItemType - returning:" << m_itemType; return m_itemType; } /** * @brief CFocusItem::setNextItemFocusAndGetNextItem 设置下一个item focus状æ€�并获å�–下一个Item * @return */ CFocusItem *CFocusItem::setNextItemFocusAndGetNextItem() { qCDebug(ClientLogger) << "CFocusItem::setNextItemFocusAndGetNextItem called"; if (m_NextFocusItem != nullptr) { qCDebug(ClientLogger) << "Setting focus to next item"; m_isFocus = false; m_NextFocusItem->setItemFocus(true); } else { qCDebug(ClientLogger) << "No next focus item available"; } return m_NextFocusItem; } /** * @brief CFocusItem::getSystemActiveColor 获å�–系统活动色 * @return */ QColor CFocusItem::getSystemActiveColor() { QColor color = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); // qCDebug(ClientLogger) << "CFocusItem::getSystemActiveColor - returning:" << color; return color; } void CFocusItem::setDate(const QDate &date) { // qCDebug(ClientLogger) << "CFocusItem::setDate - date:" << date; m_Date = date; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cfocusitem.h000066400000000000000000000024321523260663500312750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CFOCUSITEM_H #define CFOCUSITEM_H #include #include #include #include class CFocusItem : public QObject , public QGraphicsRectItem { Q_OBJECT public: enum CItemType { CBACK, CITEM, COTHER }; public: explicit CFocusItem(QGraphicsItem *parent = nullptr); //设置下一个FocusItem void setNextFocusItem(CFocusItem *nextFocusItem); //设置item是å�¦èŽ·å�–focus virtual void setItemFocus(bool isFocus); //获å�–该item是å�¦focus bool getItemFocus() const; //设置item类型 void setItemType(CItemType itemType); //获å�–item类型 CItemType getItemType() const; //设置下一个item focus状æ€�并获å�–下一个Item virtual CFocusItem *setNextItemFocusAndGetNextItem(); //获å�–系统活动色 QColor getSystemActiveColor(); //设置显示日期 void setDate(const QDate &date); //获å�–显示日期 QDate getDate() const { return m_Date; } protected: QDate m_Date; private: CFocusItem *m_NextFocusItem; CItemType m_itemType; bool m_isFocus; }; #endif // CFOCUSITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cmonthdayitem.cpp000066400000000000000000000263611523260663500323430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cmonthdayitem.h" #include "constants.h" #include "scheduledatamanage.h" #include "commondef.h" #include #include #include bool CMonthDayItem::m_LunarVisible = false; CMonthDayItem::CMonthDayItem(QGraphicsItem *parent) : CSceneBackgroundItem(CSceneBackgroundItem::OnMonthView, parent) , m_DayLunar("") , m_DayStatus(H_NONE) { // qCDebug(ClientLogger) << "CMonthDayItem constructor"; //设置字体 m_dayNumFont.setPixelSize(DDECalendar::FontSizeTwentyfour); m_dayNumFont.setWeight(QFont::Light); m_LunerFont.setPixelSize(DDECalendar::FontSizeTwelve); m_LunerFont.setWeight(QFont::Normal); } CMonthDayItem::~CMonthDayItem() { // qCDebug(ClientLogger) << "CMonthDayItem destructor"; } /** * @brief CMonthDayItem::setLunar 设置农历信æ�¯ * @param lunar */ void CMonthDayItem::setLunar(const QString &lunar) { // qCDebug(ClientLogger) << "CMonthDayItem::setLunar - lunar:" << lunar; m_DayLunar = lunar; } /** * @brief CMonthDayItem::setStatus 设置ç�­ä¼‘状æ€� * @param status */ void CMonthDayItem::setStatus(const CMonthDayItem::HolidayStatus &status) { // qCDebug(ClientLogger) << "CMonthDayItem::setStatus - status:" << status; m_DayStatus = status; } /** * @brief CMonthDayItem::setTheMe 设置主题 * @param type */ void CMonthDayItem::setTheMe(int type) { // qCDebug(ClientLogger) << "CMonthDayItem::setTheMe - type:" << type; m_themetype = type; if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Setting light theme colors"; m_dayNumColor = "#000000"; m_dayNumCurrentColor = "#FFFFFF"; m_LunerColor = "#5E5E5E"; m_LunerColor.setAlphaF(0.5); m_fillColor = Qt::white; m_banColor = "#FF7171"; m_banColor.setAlphaF(0.1); m_xiuColor = "#ADFF71"; m_xiuColor.setAlphaF(0.1); m_BorderColor = "#000000"; m_BorderColor.setAlphaF(0.05); } else if (type == 2) { // qCDebug(ClientLogger) << "Setting dark theme colors"; m_dayNumColor = "#C0C6D4"; m_dayNumCurrentColor = "#B8D3FF"; m_LunerColor = "#ABDAFF"; m_LunerColor.setAlphaF(0.5); m_fillColor = "#000000"; m_fillColor.setAlphaF(0.05); m_banColor = "#FF7171"; m_banColor.setAlphaF(0.1); m_xiuColor = "#ADFF71"; m_xiuColor.setAlphaF(0.1); m_BorderColor = "#000000"; m_BorderColor.setAlphaF(0.05); } update(); } void CMonthDayItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { // qCDebug(ClientLogger) << "CMonthDayItem::paint - date:" << m_Date << "isCurrentMonth:" << m_IsCurrentMonth; Q_UNUSED(option) Q_UNUSED(widget) const int hh = 36; m_currentColor = getSystemActiveColor(); painter->setRenderHints(QPainter::Antialiasing); //绘制背景 if (m_LunarVisible) { switch (m_DayStatus) { case H_WORK: // qCDebug(ClientLogger) << "Drawing work day background"; painter->setBrush(QBrush(m_banColor)); break; case H_REST: // qCDebug(ClientLogger) << "Drawing rest day background"; painter->setBrush(QBrush(m_xiuColor)); break; default: // qCDebug(ClientLogger) << "Drawing normal day background"; painter->setBrush(QBrush(m_fillColor)); break; } } else { // qCDebug(ClientLogger) << "Lunar not visible, drawing normal background"; painter->setBrush(QBrush(m_fillColor)); } if (!m_IsCurrentMonth) { // qCDebug(ClientLogger) << "Not current month, setting opacity to 0.4"; painter->setOpacity(0.4); } QPen pen; pen.setWidth(1); pen.setColor(m_BorderColor); painter->setPen(pen); painter->drawRect(this->rect()); painter->save(); //绘制日期 painter->setFont(m_dayNumFont); QRectF fillRect; if (m_LunarVisible) { fillRect.setRect(this->rect().x() + 3, this->rect().y() + 4, hh, hh); } else { fillRect.setRect(this->rect().x(), this->rect().y() + 4, this->rect().width(), hh); } //如果为当å‰�æ—¶é—´ if (m_Date == QDate::currentDate()) { // qCDebug(ClientLogger) << "Drawing current date highlight"; //设置ä¸�é€�明度为1 painter->setOpacity(1); QFont tFont = m_dayNumFont; tFont.setPixelSize(DDECalendar::FontSizeTwenty); painter->setFont(tFont); painter->setPen(m_dayNumCurrentColor); painter->save(); painter->setBrush(QBrush(m_currentColor)); painter->setPen(Qt::NoPen); if (m_LunarVisible) painter->drawEllipse(QRectF(this->rect().x() + 6, this->rect().y() + 4, hh - 8, hh - 8)); else painter->drawEllipse(QRectF((this->rect().width() - hh + 8) / 2 + this->rect().x(), this->rect().y() + 4, hh - 8, hh - 8)); painter->restore(); } else { painter->setPen(m_dayNumColor); } fillRect.setY(fillRect.y() - 10); fillRect.setX(fillRect.x() - 1); painter->drawText(fillRect, Qt::AlignCenter, QString::number(m_Date.day())); painter->restore(); //绘制农历 if (m_LunarVisible) { QFontMetrics metrics(m_LunerFont); int Lunarwidth = metrics.horizontalAdvance(m_DayLunar); // 判断是å�¦éœ€è¦�æ�¢è¡Œæ˜¾ç¤ºï¼ˆå››ä¸ªå­—的农历且有补ç�­/休状æ€�) bool needWrap = (m_DayLunar.length() >= 4 && m_DayStatus != H_NONE); if (needWrap) { // æ�¢è¡Œæ˜¾ç¤ºæ¨¡å¼�:补ç�­/休图标和å‰�两个字在第一行,å�Žä¸¤ä¸ªå­—在第二行 // 绘制补ç�­/休图标(与数字日期顶部对é½�) QRectF fillRectT(this->rect().x() + this->rect().width() - 55, this->rect().y() + 10, 12, 12); painter->setRenderHint(QPainter::Antialiasing); switch (m_DayStatus) { case H_WORK: { const QSize iconSize = QSize(12, 12); QPixmap pixmap = QIcon(":/icons/deepin/builtin/icons/dde_calendar_ban_32px.svg").pixmap(iconSize); painter->drawPixmap(fillRectT.toRect(), pixmap); } break; case H_REST: { const QSize iconSize = QSize(12, 12); QPixmap pixmap = QIcon(":/icons/deepin/builtin/icons/dde_calendar_xiu.svg").pixmap(iconSize); painter->drawPixmap(fillRectT.toRect(), pixmap); } break; default: break; } // 绘制农历文本(拆分为两行) painter->setFont(m_LunerFont); painter->setPen(m_LunerColor); QString firstLine = m_DayLunar.mid(0, 2); // å‰�两个字 QString secondLine = m_DayLunar.mid(2); // å�Žé�¢çš„å­— // 第一行:补ç�­/休图标å�³ä¾§æ˜¾ç¤ºå‰�两个字(与数字日期顶部对é½�) painter->drawText(QRectF(this->rect().x() + this->rect().width() - 38, this->rect().y() + 6, 40, 18), Qt::AlignLeft | Qt::AlignVCenter, firstLine); // 第二行:显示剩余的字 painter->drawText(QRectF(this->rect().x() + this->rect().width() - 56, this->rect().y() + 22, 58, 18), Qt::AlignCenter, secondLine); } else { // 原有的å�•行显示模å¼� qreal filleRectX = this->rect().width() - 12 - 3 - (58 + Lunarwidth) / 2; const QSize iconSize = QSize(14, 14); QRect fillRectT(QPoint(this->rect().x() + filleRectX, this->rect().y() + 9), iconSize); if (filleRectX > hh) { painter->setRenderHint(QPainter::Antialiasing); // Use QIcon replace DIcon in order to fix image non-clear issue switch (m_DayStatus) { case H_WORK: { // qCDebug(ClientLogger) << "Drawing work day icon"; QPixmap pixmap = QIcon(":/icons/deepin/builtin/icons/dde_calendar_ban_32px.svg").pixmap(iconSize); painter->drawPixmap(fillRectT, pixmap); } break; case H_REST: { // qCDebug(ClientLogger) << "Drawing rest day icon"; QPixmap pixmap = QIcon(":/icons/deepin/builtin/icons/dde_calendar_xiu.svg").pixmap(iconSize); painter->drawPixmap(fillRectT, pixmap); } break; default: break; } } painter->setFont(m_LunerFont); painter->setPen(m_LunerColor); painter->drawText(QRectF(this->rect().x() + this->rect().width() - 58, this->rect().y() + 6, 58, 18), Qt::AlignCenter, m_DayLunar); } } //如果有焦点则绘制焦点效果 if (getItemFocus()) { // qCDebug(ClientLogger) << "Drawing focus effect for day item at position:" << getBackgroundNum(); const int offset = 1; //获å�–tab图形 QRectF drawRect(rect().x() + offset, rect().y() + offset, rect().width() - offset * 2, rect().height() - offset * 2); QPen framePen; //设置边框宽度 framePen.setWidth(2); //设置边框颜色 framePen.setColor(m_currentColor); painter->setPen(framePen); painter->setBrush(Qt::NoBrush); painter->setOpacity(1); //å�Šå¾„ qreal radius = 16; //直径 qreal diameter = radius * 2; //绘制的路径 QPainterPath path; path.moveTo(drawRect.x(), drawRect.y()); //如果为左下角则绘制圆角 if (this->getBackgroundNum() == 35) { // qCDebug(ClientLogger) << "Drawing bottom-left corner with rounded edge"; path.lineTo(drawRect.x(), drawRect.y() + drawRect.height() - radius); QRectF arcRect(drawRect.x(), drawRect.y() + drawRect.height() - diameter, diameter, diameter); path.arcTo(arcRect, 180, 90); } else { path.lineTo(drawRect.x(), drawRect.y() + drawRect.height()); } //如果为å�³ä¸‹è§’则绘制圆角 if (this->getBackgroundNum() == 41) { // qCDebug(ClientLogger) << "Drawing bottom-right corner with rounded edge"; path.lineTo(drawRect.x() + drawRect.width() - radius, drawRect.y() + drawRect.height()); QRectF arcRect(drawRect.x() + drawRect.width() - diameter, drawRect.y() + drawRect.height() - diameter, diameter, diameter); path.arcTo(arcRect, 270, 90); } else { path.lineTo(drawRect.x() + drawRect.width(), drawRect.y() + drawRect.height()); } path.lineTo(drawRect.x() + drawRect.width(), drawRect.y()); path.lineTo(drawRect.x(), drawRect.y()); painter->drawPath(path); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cmonthdayitem.h000066400000000000000000000030351523260663500320010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CMONTHDAYITEM_H #define CMONTHDAYITEM_H #include "cscenebackgrounditem.h" #include #include /** * @brief The CMonthDayItem class * 月视图绘制天item */ class CMonthDayItem : public CSceneBackgroundItem { Q_OBJECT public: enum HolidayStatus { H_NONE = 0x00, H_REST = 0x01, H_WORK = 0x02 }; explicit CMonthDayItem(QGraphicsItem *parent = nullptr); ~CMonthDayItem() override; //设置农历信æ�¯ void setLunar(const QString &lunar); //设置ç�­ä¼‘状æ€� void setStatus(const HolidayStatus &status); //设置是å�¦ä¸ºå½“å‰�选择月份 void setCurrentMonth(bool isCurrent) { m_IsCurrentMonth = isCurrent; } //设置主题 void setTheMe(int type = 0); protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; private: QString m_DayLunar; HolidayStatus m_DayStatus; QFont m_dayNumFont; QColor m_dayNumColor; QColor m_dayNumCurrentColor; QFont m_LunerFont; QColor m_LunerColor; QColor m_BorderColor; bool m_IsCurrentMonth = false; QColor m_fillColor = Qt::white; QColor m_banColor = "#FBE9B7"; QColor m_xiuColor = "#D4FFB3"; int m_themetype = 0; QColor m_currentColor; const int m_radius = 18; public: static bool m_LunarVisible; }; #endif // CMONTHDAYITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cmonthscheduleitem.cpp000066400000000000000000000152501523260663500333550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cmonthscheduleitem.h" #include "commondef.h" #include CMonthScheduleItem::CMonthScheduleItem(QRect rect, QGraphicsItem *parent, int edittype) : DragInfoItem(rect, parent) , m_pos(13, 5) { qCDebug(ClientLogger) << "CMonthScheduleItem constructor - rect:" << rect << "edittype:" << edittype; Q_UNUSED(edittype); } CMonthScheduleItem::~CMonthScheduleItem() { qCDebug(ClientLogger) << "CMonthScheduleItem destructor"; } QPixmap CMonthScheduleItem::getPixmap() { // qCDebug(ClientLogger) << "CMonthScheduleItem::getPixmap called"; QPixmap pixmap(this->rect().size().toSize()); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); paintBackground(&painter, pixmap.rect(), true); return pixmap; } void CMonthScheduleItem::paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap) { // qCDebug(ClientLogger) << "CMonthScheduleItem::paintBackground - rect:" << rect // << "isPixMap:" << isPixMap // << "schedule:" << (m_vScheduleInfo ? m_vScheduleInfo->summary() : "null"); qreal labelwidth = rect.width(); qreal labelheight = rect.height(); m_font = DFontSizeManager::instance()->get(m_sizeType, m_font); int themetype = CScheduleDataManage::getScheduleDataManage()->getTheme(); //æ ¹æ�®ç±»åž‹èŽ·å�–颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_vScheduleInfo->scheduleTypeID()); QColor brushColor = gdColor.normalColor; QColor textcolor = CScheduleDataManage::getScheduleDataManage()->getTextColor(); //判断是å�¦ä¸ºé€‰ä¸­æ—¥ç¨‹ if (!m_vScheduleInfo.isNull() && m_vScheduleInfo == m_pressInfo) { // qCDebug(ClientLogger) << "Schedule is pressed schedule"; //判断当å‰�日程是å�¦ä¸ºæ‹–拽移动日程 if (m_vScheduleInfo->isMoved() == m_pressInfo->isMoved()) { // qCDebug(ClientLogger) << "Setting high flag to true"; m_vHighflag = true; } else { // qCDebug(ClientLogger) << "Setting opacity to 0.4"; painter->setOpacity(0.4); textcolor.setAlphaF(0.4); } m_vSelectflag = m_press; } if (isPixMap) { // qCDebug(ClientLogger) << "Drawing as pixmap, setting opacity to 0.6"; painter->setOpacity(0.6); textcolor.setAlphaF(0.8); } if (m_vSelectflag) { // qCDebug(ClientLogger) << "Schedule is selected, using press color with reduced opacity"; brushColor = gdColor.pressColor; textcolor.setAlphaF(0.4); } else if (m_vHoverflag) { // qCDebug(ClientLogger) << "Schedule is hovered, using hover color"; brushColor = gdColor.hoverColor; } else if (m_vHighflag) { // qCDebug(ClientLogger) << "Schedule is highlighted, using press color"; brushColor = gdColor.pressColor; } // increase the height of the rectangle to make it look better QFontMetrics fm = painter->fontMetrics(); if (fm.height() > labelheight) { // qCDebug(ClientLogger) << "Adjusting height for text - new height:" << (fm.height() + 2); labelheight = fm.height() + 2; } QRectF fillRect = QRectF(rect.x() + 2, rect.y() + 2, labelwidth - 2, labelheight - 2); // qCDebug(ClientLogger) << "Fill rect for schedule:" << fillRect; painter->save(); //将直线开始点设为0,终点设为1,然å�Žåˆ†æ®µè®¾ç½®é¢œè‰² painter->setBrush(brushColor); if (getItemFocus() && isPixMap == false) { // qCDebug(ClientLogger) << "Item has focus, drawing frame with system active color"; QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); } else { painter->setPen(Qt::NoPen); } painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); painter->restore(); painter->setFont(m_font); painter->setPen(textcolor); QString tSTitleName = m_vScheduleInfo->summary(); tSTitleName.replace("\n", ""); QString str = tSTitleName; //å�³ä¾§å��ç§»8 qreal textWidth = labelwidth - m_pos.x() - m_offset * 2 - 8; QString tStr; int _rightOffset = fm.horizontalAdvance("..."); //显示宽度 左侧å��ç§»13å�³ä¾§å��ç§»8 qreal _showWidth = textWidth; // qCDebug(ClientLogger) << "Schedule title:" << str << "available width:" << _showWidth; //如果标题总长度大于显示长度则显示长度须å‡�去"..."的长度 if (fm.horizontalAdvance(str) > _showWidth) { // qCDebug(ClientLogger) << "Title too long, truncating"; _showWidth -= _rightOffset; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr); //如果宽度大于显示长度则去除最å�Žæ·»åŠ çš„å­—ç¬¦ if (widthT > _showWidth) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } } else { tStr = str; } // qCDebug(ClientLogger) << "Final display text:" << tStr; painter->drawText(QRectF(rect.x() + m_pos.x(), rect.y() + 1, textWidth, labelheight - m_pos.y() + 3), Qt::AlignLeft | Qt::AlignVCenter, tStr); if (m_vHoverflag && !m_vSelectflag) { // qCDebug(ClientLogger) << "Drawing hover effect"; QRectF tRect = QRectF(rect.x() + 2.5, rect.y() + 2.5, labelwidth - 3, labelheight - 3); painter->save(); painter->setRenderHints(QPainter::Antialiasing); QPen pen; QColor selcolor; if (themetype == 2) { selcolor = "#FFFFFF"; } else { selcolor = "#000000"; } selcolor.setAlphaF(0.08); pen.setColor(selcolor); pen.setWidthF(1); pen.setStyle(Qt::SolidLine); painter->setBrush(Qt::NoBrush); painter->setPen(pen); painter->drawRoundedRect(tRect, rect.height() / 3, rect.height() / 3); painter->restore(); } if (m_vSelectflag) { // qCDebug(ClientLogger) << "Drawing selection effect"; QColor selcolor = "#000000"; selcolor.setAlphaF(0.05); painter->setBrush(selcolor); painter->setPen(Qt::NoPen); painter->drawRoundedRect(fillRect, rect.height() / 3, rect.height() / 3); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cmonthscheduleitem.h000066400000000000000000000012621523260663500330200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CMONTHSCHEDULEITEM_H #define CMONTHSCHEDULEITEM_H #include "draginfoitem.h" /** * @brief The CMonthScheduleItem class * 月视图日程标签 */ class CMonthScheduleItem : public DragInfoItem { Q_OBJECT public: explicit CMonthScheduleItem(QRect rect, QGraphicsItem *parent = nullptr, int edittype = 0); ~CMonthScheduleItem() override; QPixmap getPixmap(); private: void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) override; private: QPoint m_pos; }; #endif // CMONTHSCHEDULEITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cmonthschedulenumitem.cpp000066400000000000000000000065601523260663500341010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cmonthschedulenumitem.h" #include "commondef.h" #include CMonthScheduleNumItem::CMonthScheduleNumItem(QGraphicsItem *parent) : CFocusItem(parent) , m_num(0) { qCDebug(ClientLogger) << "CMonthScheduleNumItem constructor"; setItemType(COTHER); } CMonthScheduleNumItem::~CMonthScheduleNumItem() { qCDebug(ClientLogger) << "CMonthScheduleNumItem destructor"; } /** * @brief CMonthScheduleNumItem::setColor 设置背景色 * @param color1 * @param color2 */ void CMonthScheduleNumItem::setColor(QColor color1, QColor color2) { qCDebug(ClientLogger) << "CMonthScheduleNumItem::setColor - color1:" << color1 << "color2:" << color2; m_color1 = color1; m_color2 = color2; } /** * @brief CMonthScheduleNumItem::setText 这是字体颜色 * @param tColor * @param font */ void CMonthScheduleNumItem::setText(QColor tColor, QFont font) { qCDebug(ClientLogger) << "CMonthScheduleNumItem::setText - textColor:" << tColor << "font family:" << font.family(); m_textcolor = tColor; m_font = font; } /** * @brief CMonthScheduleNumItem::setSizeType 设置字体大å°� * @param sizeType */ void CMonthScheduleNumItem::setSizeType(DFontSizeManager::SizeType sizeType) { qCDebug(ClientLogger) << "CMonthScheduleNumItem::setSizeType - sizeType:" << sizeType; m_SizeType = sizeType; } void CMonthScheduleNumItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { // qCDebug(ClientLogger) << "CMonthScheduleNumItem::paint - num:" << m_num << "focus:" << getItemFocus(); Q_UNUSED(option); Q_UNUSED(widget); qreal labelwidth = this->rect().width(); qreal labelheight = this->rect().height() - 6; qreal rectX = this->rect().x(); qreal rectY = this->rect().y(); //绘制背景 m_font = DFontSizeManager::instance()->get(m_SizeType, m_font); //将直线开始点设为0,终点设为1,然å�Žåˆ†æ®µè®¾ç½®é¢œè‰² QLinearGradient linearGradient(0, 0, labelwidth, 0); linearGradient.setColorAt(0, m_color1); linearGradient.setColorAt(1, m_color2); painter->setRenderHints(QPainter::Antialiasing); painter->setBrush(linearGradient); if (getItemFocus()) { // qCDebug(ClientLogger) << "Item has focus, drawing frame with system active color"; QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); } else { painter->setPen(Qt::NoPen); } painter->drawRoundedRect(rect(), rect().height() / 3, rect().height() / 3); //绘制文字 painter->setFont(m_font); painter->setPen(m_textcolor); QString str = QString(tr("%1 more")).arg(m_num) + "..."; // qCDebug(ClientLogger) << "Original text:" << str; QFontMetrics fm = painter->fontMetrics(); QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr) + 5; if (widthT >= labelwidth) { tStr.chop(2); break; } } if (tStr != str) { tStr = tStr + "..."; } // qCDebug(ClientLogger) << "Final display text:" << tStr; painter->drawText(QRectF(rectX, rectY, labelwidth, labelheight + 4), Qt::AlignCenter, tStr); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cmonthschedulenumitem.h000066400000000000000000000023151523260663500335400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CMONTHSCHEDULENUMITEM_H #define CMONTHSCHEDULENUMITEM_H #include "cfocusitem.h" #include "dschedule.h" #include "scheduledaterangeinfo.h" #include DWIDGET_USE_NAMESPACE /** * @brief The CMonthScheduleNumItem class * 月视图 还有N项 标签 */ class CMonthScheduleNumItem : public CFocusItem { Q_OBJECT public: explicit CMonthScheduleNumItem(QGraphicsItem *parent = nullptr); ~CMonthScheduleNumItem() override; //背景色 void setColor(QColor color1, QColor color2); //设置字体颜色 void setText(QColor tColor, QFont font); //设置字体大å°� void setSizeType(DFontSizeManager::SizeType sizeType); //设置显示多少项 void setData(int num) { m_num = num; } protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; private: QColor m_color1; QColor m_color2; QColor m_textcolor; QFont m_font; int m_num; DFontSizeManager::SizeType m_SizeType = DFontSizeManager::T8; }; #endif // CMONTHSCHEDULENUMITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cscenebackgrounditem.cpp000066400000000000000000000243471523260663500336570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cscenebackgrounditem.h" #include "commondef.h" #include #include #include #include CSceneBackgroundItem::CSceneBackgroundItem(ItemOnView view, QGraphicsItem *parent) : CFocusItem(parent) , m_backgroundNum(0) , m_leftItem(nullptr) , m_rightItem(nullptr) , m_upItem(nullptr) , m_downItem(nullptr) , m_showItemIndex(-1) , m_itemOfView(view) { // qCDebug(ClientLogger) << "CSceneBackgroundItem constructor - view:" << view; //设置item类型为背景显示 setItemType(CBACK); } /** * @brief CSceneBackgroundItem::setNextItemFocusAndGetNextItem 设置下一个item focus状æ€�并获å�–下一个Item * @return */ CFocusItem *CSceneBackgroundItem::setNextItemFocusAndGetNextItem() { qCDebug(ClientLogger) << "CSceneBackgroundItem::setNextItemFocusAndGetNextItem - current showItemIndex:" << m_showItemIndex << "items count:" << m_item.size(); CFocusItem *NextFocus = this; //若该区域没有item if (m_showItemIndex < 0 && m_item.size() == 0) { qCDebug(ClientLogger) << "No items in this area, moving focus to next background item"; NextFocus = CFocusItem::setNextItemFocusAndGetNextItem(); } else if (m_showItemIndex == m_item.size() - 1) { //若切æ�¢åˆ°æœ€å�Žä¸€ä¸ªitem qCDebug(ClientLogger) << "At last item, resetting showItemIndex and moving focus to next background item"; m_item.at(m_showItemIndex)->setItemFocus(false); m_showItemIndex = -1; NextFocus = CFocusItem::setNextItemFocusAndGetNextItem(); } else { //若该背景上有显示的item //若显示的item未设置focus则å�–消背景focus效果 if (m_showItemIndex == -1 && getItemFocus()) { qCDebug(ClientLogger) << "No item has focus but background does, removing background focus"; this->setItemFocus(false); } //若显示的item有设置focus则å�–消该item focus效果 if (m_showItemIndex >= 0) { qCDebug(ClientLogger) << "Removing focus from current item at index:" << m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(false); } //当å‰�显示的itemç¼–å�·+1并这是focus效果 ++m_showItemIndex; qCDebug(ClientLogger) << "Setting focus to next item at index:" << m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(true); } return NextFocus; } /** * @brief compareItemData 对现实的日程标签进行排åº� * @param itemfirst * @param itemsecond * @return */ bool compareItemData(const CFocusItem *itemfirst, const CFocusItem *itemsecond) { qCDebug(ClientLogger) << "CSceneBackgroundItem::compareItemData - itemfirst:" << itemfirst->rect() << "itemsecond:" << itemsecond->rect(); if (itemfirst->rect() == itemsecond->rect()) { qCDebug(ClientLogger) << "CSceneBackgroundItem::compareItemData - itemfirst and itemsecond have the same rect"; return false; } //æ ¹æ�®ä»Žä¸Šå€’下从左至å�³çš„规则对矩阵的x,yå��标进行对比排åº� if (qAbs(itemfirst->rect().y() - itemsecond->rect().y()) < 0.01) { if (itemfirst->rect().x() < itemsecond->rect().x()) { qCDebug(ClientLogger) << "CSceneBackgroundItem::compareItemData - itemfirst is left of itemsecond"; return true; } else { qCDebug(ClientLogger) << "CSceneBackgroundItem::compareItemData - itemfirst is right of itemsecond"; return false; } } else if (itemfirst->rect().y() < itemsecond->rect().y()) { qCDebug(ClientLogger) << "CSceneBackgroundItem::compareItemData - itemfirst is above itemsecond"; return true; } else { qCDebug(ClientLogger) << "CSceneBackgroundItem::compareItemData - itemfirst is below itemsecond"; return false; } } /** * @brief CSceneBackgroundItem::updateShowItem 更新在此背景上显示的item */ void CSceneBackgroundItem::updateShowItem() { // qCDebug(ClientLogger) << "CSceneBackgroundItem::updateShowItem for background:" << m_backgroundNum; m_item.clear(); //缩å°�背景矩阵,防止获å�–到其他背景上的item QRectF offsetRect = this->rect().marginsRemoved(QMarginsF(1, 1, 1, 1)); QList mlistitem = this->scene()->items(offsetRect); // qCDebug(ClientLogger) << "Found" << mlistitem.count() << "items in background area"; for (int i = 0; i < mlistitem.count(); ++i) { CFocusItem *item = dynamic_cast(mlistitem.at(i)); if (item != nullptr && item->getItemType() != CBACK) { m_item.append(item); } } // qCDebug(ClientLogger) << "Added" << m_item.size() << "focus items to background"; std::sort(m_item.begin(), m_item.end(), compareItemData); updateCurrentItemShow(); } int CSceneBackgroundItem::getShowItemCount() { qCDebug(ClientLogger) << "CSceneBackgroundItem::getShowItemCount returning:" << m_item.size(); return m_item.size(); } /** * @brief CSceneBackgroundItem::setBackgroundNum 设置背景编å�· * @param num */ void CSceneBackgroundItem::setBackgroundNum(int num) { // qCDebug(ClientLogger) << "CSceneBackgroundItem::setBackgroundNum - num:" << num; m_backgroundNum = num; } /** * @brief CSceneBackgroundItem::getBackgroundNum 获å�–背景编å�· * @return */ int CSceneBackgroundItem::getBackgroundNum() const { // qCDebug(ClientLogger) << "CSceneBackgroundItem::getBackgroundNum - returning:" << m_backgroundNum; return m_backgroundNum; } /** * @brief CSceneBackgroundItem::setItemFocus 设置item是å�¦èŽ·å�–focus * @param isFocus */ void CSceneBackgroundItem::setItemFocus(bool isFocus) { qCDebug(ClientLogger) << "CSceneBackgroundItem::setItemFocus - isFocus:" << isFocus << "showItemIndex:" << m_showItemIndex; if (m_showItemIndex < 0) { qCDebug(ClientLogger) << "Setting focus on background item itself"; CFocusItem::setItemFocus(isFocus); } else { if (m_showItemIndex < m_item.size()) { qCDebug(ClientLogger) << "Setting focus on child item at index:" << m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(isFocus); } } } /** * @brief CSceneBackgroundItem::initState æ�¢å¤�åˆ�始状æ€� */ void CSceneBackgroundItem::initState() { qCDebug(ClientLogger) << "CSceneBackgroundItem::initState called"; if (getItemFocus()) { qCDebug(ClientLogger) << "Removing focus from background item"; setItemFocus(false); } if (m_showItemIndex > -1 && m_showItemIndex < m_item.size()) { qCDebug(ClientLogger) << "Removing focus from child item at index:" << m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(false); } m_showItemIndex = -1; } /** * @brief CSceneBackgroundItem::getFocusItem 获å�–当å‰�焦点的item * @return */ CFocusItem *CSceneBackgroundItem::getFocusItem() { qCDebug(ClientLogger) << "CSceneBackgroundItem::getFocusItem - showItemIndex:" << m_showItemIndex; if (m_showItemIndex < 0) { qCDebug(ClientLogger) << "CSceneBackgroundItem::getFocusItem - returning background item"; return this; } else { qCDebug(ClientLogger) << "CSceneBackgroundItem::getFocusItem - returning child item at index:" << m_showItemIndex; return m_item.at(m_showItemIndex); } } CSceneBackgroundItem *CSceneBackgroundItem::getLeftItem() const { // qCDebug(ClientLogger) << "CSceneBackgroundItem::getLeftItem - returning:" // << (m_leftItem ? "item" : "nullptr"); return m_leftItem; } void CSceneBackgroundItem::setLeftItem(CSceneBackgroundItem *leftItem) { // qCDebug(ClientLogger) << "CSceneBackgroundItem::setLeftItem - item:" // << (leftItem ? "set" : "nullptr"); m_leftItem = leftItem; } CSceneBackgroundItem *CSceneBackgroundItem::getRightItem() const { // qCDebug(ClientLogger) << "CSceneBackgroundItem::getRightItem - returning:" // << (m_rightItem ? "item" : "nullptr"); return m_rightItem; } void CSceneBackgroundItem::setRightItem(CSceneBackgroundItem *rightItem) { // qCDebug(ClientLogger) << "CSceneBackgroundItem::setRightItem - item:" // << (rightItem ? "set" : "nullptr"); m_rightItem = rightItem; } CSceneBackgroundItem *CSceneBackgroundItem::getUpItem() const { // qCDebug(ClientLogger) << "CSceneBackgroundItem::getUpItem - returning:" // << (m_upItem ? "item" : "nullptr"); return m_upItem; } void CSceneBackgroundItem::setUpItem(CSceneBackgroundItem *upItem) { // qCDebug(ClientLogger) << "CSceneBackgroundItem::setUpItem - item:" // << (upItem ? "set" : "nullptr"); m_upItem = upItem; } CSceneBackgroundItem *CSceneBackgroundItem::getDownItem() const { // qCDebug(ClientLogger) << "CSceneBackgroundItem::getDownItem - returning:" // << (m_downItem ? "item" : "nullptr"); return m_downItem; } void CSceneBackgroundItem::setDownItem(CSceneBackgroundItem *downItem) { // qCDebug(ClientLogger) << "CSceneBackgroundItem::setDownItem - item:" // << (downItem ? "set" : "nullptr"); m_downItem = downItem; } void CSceneBackgroundItem::updateCurrentItemShow() { // qCDebug(ClientLogger) << "CSceneBackgroundItem::updateCurrentItemShow - showItemIndex:" << m_showItemIndex // << "items count:" << m_item.size(); if (m_showItemIndex >= 0) { if (m_item.size() > 0) { qCDebug(ClientLogger) << "Setting focus to item at index:" << m_showItemIndex; m_showItemIndex = m_showItemIndex < m_item.size() ? m_showItemIndex : 0; m_item.at(m_showItemIndex)->setItemFocus(true); } else { qCDebug(ClientLogger) << "No items available, setting focus to background"; m_showItemIndex = -1; setItemFocus(true); } } } CSceneBackgroundItem::ItemOnView CSceneBackgroundItem::getItemOfView() const { // qCDebug(ClientLogger) << "CSceneBackgroundItem::getItemOfView - returning:" << m_itemOfView; return m_itemOfView; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cscenebackgrounditem.h000066400000000000000000000037101523260663500333130ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCENEBACKGROUNDITEM_H #define CSCENEBACKGROUNDITEM_H #include "cfocusitem.h" #include class CSceneBackgroundItem : public CFocusItem { Q_OBJECT public: //属于哪个视图的背景 enum ItemOnView { OnMonthView, OnWeekView, OnDayView }; public: explicit CSceneBackgroundItem(ItemOnView view, QGraphicsItem *parent = nullptr); //设置下一个item focus状æ€�并获å�–下一个Item CFocusItem *setNextItemFocusAndGetNextItem() override; //更新在此背景上显示的item void updateShowItem(); //获å�–在此背景上显示item的数目 int getShowItemCount(); //设置背景编å�· void setBackgroundNum(int num); //获å�–背景编å�· int getBackgroundNum() const; //设置item是å�¦èŽ·å�–focus void setItemFocus(bool isFocus) override; //æ�¢å¤�åˆ�始状æ€� void initState(); //获å�–当å‰�焦点的item CFocusItem *getFocusItem(); CSceneBackgroundItem *getLeftItem() const; void setLeftItem(CSceneBackgroundItem *leftItem); CSceneBackgroundItem *getRightItem() const; void setRightItem(CSceneBackgroundItem *rightItem); CSceneBackgroundItem *getUpItem() const; void setUpItem(CSceneBackgroundItem *upItem); CSceneBackgroundItem *getDownItem() const; void setDownItem(CSceneBackgroundItem *downItem); //获å�–该背景属于哪个视图 ItemOnView getItemOfView() const; protected: virtual void updateCurrentItemShow(); signals: void setChangeFocus(); private: int m_backgroundNum; CSceneBackgroundItem *m_leftItem; CSceneBackgroundItem *m_rightItem; CSceneBackgroundItem *m_upItem; CSceneBackgroundItem *m_downItem; protected: QVector m_item {}; int m_showItemIndex; ItemOnView m_itemOfView; }; #endif // CSCENEBACKGROUNDITEM_H cweekdaybackgrounditem.cpp000066400000000000000000000131331523260663500341230ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cweekdaybackgrounditem.h" #include "commondef.h" #include #include #include CWeekDayBackgroundItem::CWeekDayBackgroundItem(QGraphicsItem *parent) : CSceneBackgroundItem(CSceneBackgroundItem::OnWeekView, parent) , m_drawDividingLine(false) , m_showFocus(false) { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem constructor"; } void CWeekDayBackgroundItem::setTheMe(int type) { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::setTheMe - type:" << type; if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Setting light theme colors"; m_weekColor = "#00429A"; m_weekColor.setAlphaF(0.05); } else { // qCDebug(ClientLogger) << "Setting dark theme colors"; m_weekColor = "#4F9BFF"; m_weekColor.setAlphaF(0.1); } } void CWeekDayBackgroundItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::paint - date:" << m_Date // << "backgroundNum:" << getBackgroundNum() // << "showFocus:" << m_showFocus // << "hasFocus:" << getItemFocus(); Q_UNUSED(option) Q_UNUSED(widget) painter->setRenderHint(QPainter::Antialiasing); if (m_drawDividingLine) { //绘制分割线 if (this->getBackgroundNum() != 6) { // qCDebug(ClientLogger) << "Drawing dividing line for day column"; // 分割线颜色 QColor m_linecolor = "#000000"; m_linecolor.setAlphaF(0.05); painter->setPen(Qt::SolidLine); painter->setPen(m_linecolor); painter->drawLine(this->rect().topRight(), this->rect().bottomRight()); } //绘制周六周日背景 if (m_Date.dayOfWeek() > 5) { // qCDebug(ClientLogger) << "Drawing weekend background for day:" << m_Date.dayOfWeek(); painter->setBrush(m_weekColor); painter->setPen(Qt::NoPen); painter->drawRect(this->rect()); } } if (m_showFocus && getItemFocus()) { // qCDebug(ClientLogger) << "Drawing focus frame for background item"; QPen framePen; //设置边框宽度 framePen.setWidth(2); //设置边框颜色 framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); painter->setBrush(Qt::NoBrush); QRectF drawrect = this->rect().marginsRemoved(QMarginsF(1, 1, 1, 1)); painter->drawRect(drawrect); } } void CWeekDayBackgroundItem::updateCurrentItemShow() { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::updateCurrentItemShow - showItemIndex:" << m_showItemIndex // << "items count:" << m_item.size(); if (m_showItemIndex >= 0) { if (m_item.size() > 0) { m_showItemIndex = m_showItemIndex < m_item.size() ? m_showItemIndex : 0; m_item.at(m_showItemIndex)->setItemFocus(true); //定ä½�到当å‰�焦点item // qCDebug(ClientLogger) << "Emitting signalPosOnView with position:" << m_item.at(m_showItemIndex)->rect().y(); emit signalPosOnView(m_item.at(m_showItemIndex)->rect().y()); } else { // qCDebug(ClientLogger) << "No items available, setting focus to background"; m_showItemIndex = -1; setItemFocus(true); } } } bool CWeekDayBackgroundItem::showFocus() const { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::showFocus returning:" << m_showFocus; return m_showFocus; } void CWeekDayBackgroundItem::setShowFocus(bool showFocus) { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::setShowFocus - showFocus:" << showFocus; m_showFocus = showFocus; } void CWeekDayBackgroundItem::setItemFocus(bool isFocus) { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::setItemFocus - isFocus:" << isFocus // << "showFocus:" << m_showFocus // << "showItemIndex:" << m_showItemIndex; //如果改背景ä¸�接å�—焦点切第一次设置进入该背景则设置该背景上第一个item接收focus if (m_showFocus == false && m_showItemIndex < 0) { if (hasNextSubItem()) { ++m_showItemIndex; qCDebug(ClientLogger) << "Background doesn't accept focus, setting focus to first item at index:" << m_showItemIndex; m_item.at(m_showItemIndex)->setItemFocus(isFocus); } } else { qCDebug(ClientLogger) << "Delegating focus setting to parent class"; CSceneBackgroundItem::setItemFocus(isFocus); } } bool CWeekDayBackgroundItem::hasNextSubItem() { bool result = true; if (m_showItemIndex < 0 && getShowItemCount() == 0) { qCDebug(ClientLogger) << "No sub items available"; return false; } if (m_showItemIndex == getShowItemCount() - 1) { qCDebug(ClientLogger) << "At last sub item"; return false; } qCDebug(ClientLogger) << "Has next sub item"; return result; } bool CWeekDayBackgroundItem::drawDividingLine() const { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::drawDividingLine returning:" << m_drawDividingLine; return m_drawDividingLine; } void CWeekDayBackgroundItem::setDrawDividingLine(bool drawDividingLine) { // qCDebug(ClientLogger) << "CWeekDayBackgroundItem::setDrawDividingLine - drawDividingLine:" << drawDividingLine; m_drawDividingLine = drawDividingLine; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/cweekdaybackgrounditem.h000066400000000000000000000026551523260663500336560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CWEEKDAYBACKGROUNDITEM_H #define CWEEKDAYBACKGROUNDITEM_H #include "cscenebackgrounditem.h" #include /** * @brief The CWeekDayBackgroundItem class * 周和天的全天/é�žå…¨å¤©èƒŒæ™¯ç»˜åˆ¶ */ class CWeekDayBackgroundItem : public CSceneBackgroundItem { Q_OBJECT public: explicit CWeekDayBackgroundItem(QGraphicsItem *parent = nullptr); //设置主题 void setTheMe(int type = 0); //是å�¦ç»˜åˆ¶åˆ†å‰²çº¿ bool drawDividingLine() const; //设置是å�¦ç»˜åˆ¶åˆ†å‰²çº¿ void setDrawDividingLine(bool drawDividingLine); //获å�–改背景是å�¦ç„¦ç‚¹æ˜¾ç¤º bool showFocus() const; //设置该背景是å�¦ç„¦ç‚¹æ˜¾ç¤º void setShowFocus(bool showFocus); //设置item是å�¦èŽ·å�–focus void setItemFocus(bool isFocus) override; //在该背景上是å�¦è¿˜æœ‰ä¸‹ä¸€ä¸ªéœ€è¦�焦点切æ�¢çš„item bool hasNextSubItem(); protected: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; void updateCurrentItemShow() override; signals: void signalPosOnView(const qreal y); public slots: private: bool m_drawDividingLine; //是å�¦ç»˜åˆ¶åˆ†å‰²çº¿ bool m_showFocus; //背景是å�¦æ˜¾ç¤ºç„¦ç‚¹æ•ˆæžœ QColor m_weekColor; //周六周日背景色 }; #endif // CWEEKDAYBACKGROUNDITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/draginfoitem.cpp000066400000000000000000000131331523260663500321370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "draginfoitem.h" #include "commondef.h" #include #include #include #include bool DragInfoItem::m_press = false; DSchedule::Ptr DragInfoItem::m_HoverInfo; DSchedule::Ptr DragInfoItem::m_pressInfo; DSchedule::List DragInfoItem::m_searchScheduleInfo; DragInfoItem::DragInfoItem(QRectF rect, QGraphicsItem *parent) : CFocusItem(parent) , m_rect(rect) { qCDebug(ClientLogger) << "DragInfoItem constructor - rect:" << rect; setRect(m_rect); setAcceptHoverEvents(true); const int duration = 200; m_properAnimationFirst = new QPropertyAnimation(this, "offset", this); m_properAnimationFirst->setObjectName("First"); m_properAnimationSecond = new QPropertyAnimation(this, "offset", this); m_properAnimationSecond->setObjectName("Second"); m_properAnimationFirst->setDuration(duration); m_properAnimationSecond->setDuration(duration); m_properAnimationFirst->setEasingCurve(QEasingCurve::InOutQuad); m_properAnimationSecond->setEasingCurve(QEasingCurve::InOutQuad); m_Group = new QSequentialAnimationGroup(this); m_Group->addAnimation(m_properAnimationFirst); m_Group->addAnimation(m_properAnimationSecond); connect(m_Group , &QPropertyAnimation::finished , this , &DragInfoItem::animationFinished); setItemType(CITEM); } DragInfoItem::~DragInfoItem() { qCDebug(ClientLogger) << "DragInfoItem destructor"; } void DragInfoItem::setData(const DSchedule::Ptr &vScheduleInfo) { // qCDebug(ClientLogger) << "DragInfoItem::setData - schedule:" << (vScheduleInfo ? vScheduleInfo->summary() : "null"); QMutexLocker locker(&m_Mutex); m_vScheduleInfo = vScheduleInfo; } DSchedule::Ptr DragInfoItem::getData() { QMutexLocker locker(&m_Mutex); // qCDebug(ClientLogger) << "DragInfoItem::getData - returning schedule:" << (m_vScheduleInfo ? m_vScheduleInfo->summary() : "null"); return m_vScheduleInfo; } void DragInfoItem::setPressFlag(const bool flag) { // qCDebug(ClientLogger) << "DragInfoItem::setPressFlag - flag:" << flag; m_press = flag; } /** * @brief DragInfoItem::setPressSchedule 记录选中日程 * @param pressSchedule */ void DragInfoItem::setPressSchedule(const DSchedule::Ptr &pressSchedule) { // qCDebug(ClientLogger) << "DragInfoItem::setPressSchedule - schedule:" << (pressSchedule ? pressSchedule->summary() : "null"); m_pressInfo = pressSchedule; } /** * @brief DragInfoItem::getPressSchedule 获å�–选中日程 * @return */ DSchedule::Ptr DragInfoItem::getPressSchedule() { // qCDebug(ClientLogger) << "DragInfoItem::getPressSchedule - returning schedule:" << (m_pressInfo ? m_pressInfo->summary() : "null"); return m_pressInfo; } /** * @brief DragInfoItem::setSearchScheduleInfo 设置æ�œç´¢æ—¥ç¨‹æ–° * @param searchScheduleInfo */ void DragInfoItem::setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo) { // qCDebug(ClientLogger) << "DragInfoItem::setSearchScheduleInfo - count:" << searchScheduleInfo.size(); m_searchScheduleInfo = searchScheduleInfo; } void DragInfoItem::setFont(DFontSizeManager::SizeType type) { // qCDebug(ClientLogger) << "DragInfoItem::setFont - type:" << type; m_sizeType = type; } void DragInfoItem::setOffset(const int &offset) { qCDebug(ClientLogger) << "DragInfoItem::setOffset - offset:" << offset; m_offset = offset; setRect(QRectF(m_rect.x() - offset, m_rect.y() - offset / 2, m_rect.width() + offset * 2, m_rect.height() + offset)); setZValue(offset); } void DragInfoItem::setStartValue(const int value) { qCDebug(ClientLogger) << "DragInfoItem::setStartValue - value:" << value; m_properAnimationFirst->setStartValue(value); m_properAnimationSecond->setEndValue(value); } void DragInfoItem::setEndValue(const int value) { qCDebug(ClientLogger) << "DragInfoItem::setEndValue - value:" << value; m_properAnimationFirst->setEndValue(value); m_properAnimationSecond->setStartValue(value); } void DragInfoItem::startAnimation() { qCDebug(ClientLogger) << "DragInfoItem::startAnimation - current state:" << m_Group->state(); if (m_Group->state() != QAnimationGroup::Running) { qCDebug(ClientLogger) << "Starting animation"; m_Group->start(); } } void DragInfoItem::animationFinished() { // qCDebug(ClientLogger) << "DragInfoItem::animationFinished"; m_isAnimation = false; } void DragInfoItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { // qCDebug(ClientLogger) << "DragInfoItem::hoverEnterEvent"; QMutexLocker locker(&m_Mutex); Q_UNUSED(event); m_HoverInfo = m_vScheduleInfo; update(); } void DragInfoItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { // qCDebug(ClientLogger) << "DragInfoItem::hoverLeaveEvent"; QMutexLocker locker(&m_Mutex); Q_UNUSED(event); m_HoverInfo = DSchedule::Ptr(); update(); } void DragInfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { // qCDebug(ClientLogger) << "DragInfoItem::paint - schedule:" // << (m_vScheduleInfo ? m_vScheduleInfo->summary() : "null"); QMutexLocker locker(&m_Mutex); Q_UNUSED(option); Q_UNUSED(widget); m_vHoverflag = m_HoverInfo == m_vScheduleInfo; m_vHighflag = false; m_vSelectflag = false; m_vHighflag = m_searchScheduleInfo.contains(m_vScheduleInfo); paintBackground(painter, this->rect()); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/draginfoitem.h000066400000000000000000000052761523260663500316150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DRAGINFOITEM_H #define DRAGINFOITEM_H #include "scheduledatamanage.h" #include "dschedule.h" #include "cfocusitem.h" #include DWIDGET_USE_NAMESPACE class QPropertyAnimation; class QSequentialAnimationGroup; class QMutex; /** * @brief The DragInfoItem class * 显示项 支æŒ�拖拽 */ class DragInfoItem : public CFocusItem { Q_OBJECT Q_PROPERTY(int offset READ readOffset WRITE setOffset) public: explicit DragInfoItem(QRectF rect, QGraphicsItem *parent = nullptr); ~DragInfoItem() override; void setData(const DSchedule::Ptr &vScheduleInfo); DSchedule::Ptr getData(); void setFont(DFontSizeManager::SizeType type); void setOffset(const int &offset); int readOffset() const { return m_offset; } void setStartValue(const int value); void setEndValue(const int value); void startAnimation(); bool isRunning()const { return m_isAnimation; } public: static void setPressFlag(const bool flag); //设置选中日程 static void setPressSchedule(const DSchedule::Ptr &pressSchedule); //获å�–选中日程 static DSchedule::Ptr getPressSchedule(); //设置æ�œç´¢æ—¥ç¨‹ static void setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo); public slots: void animationFinished(); protected: void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; protected: virtual void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) = 0; protected: DSchedule::Ptr m_vScheduleInfo; QFont m_font; bool m_vSelectflag = false; bool m_vHoverflag = false; bool m_vHighflag = false; QRectF m_rect; bool m_isAnimation = false; int m_offset = 0; DFontSizeManager::SizeType m_sizeType = DFontSizeManager::T8; QPropertyAnimation *m_properAnimationFirst = nullptr; QPropertyAnimation *m_properAnimationSecond = nullptr; QSequentialAnimationGroup *m_Group = nullptr; static bool m_press; static DSchedule::Ptr m_HoverInfo; static DSchedule::Ptr m_pressInfo; static DSchedule::List m_searchScheduleInfo; QMutex m_Mutex; }; #endif // DRAGINFOITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/scheduleitem.cpp000066400000000000000000000316701523260663500321500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleitem.h" #include "schedulecoormanage.h" #include "scheduledatamanage.h" #include "calendarmanage.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE CScheduleItem::CScheduleItem(QRectF rect, QGraphicsItem *parent, int type) : DragInfoItem(rect, parent) , m_type(type) , m_totalNum(0) , m_transparentcolor("#000000") , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) { qCDebug(ClientLogger) << "CScheduleItem constructor - rect:" << rect << "type:" << type; m_transparentcolor.setAlphaF(0.05); connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &CScheduleItem::timeFormatChanged); } CScheduleItem::~CScheduleItem() { qCDebug(ClientLogger) << "CScheduleItem destructor"; } /** * @brief CScheduleItem::setData 设置显示数æ�® * @param info * @param date * @param totalNum */ void CScheduleItem::setData(const DSchedule::Ptr &info, QDate date, int totalNum) { // qCDebug(ClientLogger) << "CScheduleItem::setData - schedule:" << (info ? info->summary() : "null") // << "date:" << date << "totalNum:" << totalNum; m_vScheduleInfo = info; m_totalNum = totalNum; setDate(date); update(); } /** * @brief CScheduleItem::hasSelectSchedule 是å�¦å�«æœ‰é€‰ä¸­æ—¥ç¨‹ * @param info * @return */ bool CScheduleItem::hasSelectSchedule(const DSchedule::Ptr &info) { bool result = (info == m_vScheduleInfo); // qCDebug(ClientLogger) << "CScheduleItem::hasSelectSchedule - schedule:" << (info ? info->summary() : "null") // << "result:" << result; return result; } /** * @brief CScheduleItem::splitText æ ¹æ�®å­—体大å°�,宽度和高度将标题切æ�¢ä¸ºå¤šè¡Œ * @param font * @param w * @param h * @param str * @param listStr * @param fontM */ void CScheduleItem::splitText(QFont font, int w, int h, QString str, QStringList &listStr, QFontMetrics &fontM) { // qCDebug(ClientLogger) << "CScheduleItem::splitText - width:" << w << "height:" << h // << "text:" << str; if (str.isEmpty()) { qCDebug(ClientLogger) << "CScheduleItem::splitText - Text is empty, returning"; return; } QFontMetrics fontMetrics(font); int heightT = fontM.height(); QString tStr; QStringList tListStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fontMetrics.horizontalAdvance(tStr) + 5; if (widthT >= w) { tStr.chop(1); if (tStr.isEmpty()) break; tListStr.append(tStr); tStr.clear(); i--; } } tListStr.append(tStr); if (w < 30) { qCDebug(ClientLogger) << "Width too small (< 30), special handling for text"; QFontMetrics fm_s(fontM); QFontMetrics f_st(font); QString s = tListStr.at(0) + "..."; if (h < 23) { tListStr.append(""); } else { if (tListStr.isEmpty()) { listStr.append(""); } else { QString c = str.at(0); QString str = c + "..."; QFontMetrics fm(font); while (f_st.horizontalAdvance(str) > w && f_st.horizontalAdvance(str) > 24) { str.chop(1); } listStr.append(str); } } } else { qCDebug(ClientLogger) << "Normal width handling for text"; for (int i = 0; i < tListStr.count(); i++) { if ((i + 1) * heightT <= h - 1) { listStr.append(tListStr.at(i)); } else { if (i == 0) { break; } else { QString s; QFontMetrics fm_str(fontM); if (i == tListStr.count()) s = fontM.elidedText(tListStr.at(i - 1), Qt::ElideRight, w); else { s = fontM.elidedText(tListStr.at(i - 1) + "...", Qt::ElideRight, w); } listStr.removeAt(i - 1); listStr.append(s); break; } } } } qCDebug(ClientLogger) << "Final text split into" << listStr.count() << "lines"; } /** * @brief CScheduleItem::timeFormatChanged 更新时间显示格å¼� */ void CScheduleItem::timeFormatChanged(int value) { qCDebug(ClientLogger) << "CScheduleItem::timeFormatChanged - value:" << value; if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } update(); } /** * @brief CScheduleItem::paintBackground 绘制item显示效果 * @param painter * @param rect * @param isPixMap */ void CScheduleItem::paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap) { // qCDebug(ClientLogger) << "CScheduleItem::paintBackground - rect:" << rect // << "isPixMap:" << isPixMap // << "schedule:" << (m_vScheduleInfo ? m_vScheduleInfo->summary() : "null"); Q_UNUSED(isPixMap); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹èŽ·å�–颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_vScheduleInfo->scheduleTypeID()); QColor textPenColor = CScheduleDataManage::getScheduleDataManage()->getTextColor(); //判断是å�¦ä¸ºé€‰ä¸­æ—¥ç¨‹ if (m_vScheduleInfo == m_pressInfo) { // qCDebug(ClientLogger) << "Schedule is selected"; //判断当å‰�日程是å�¦ä¸ºæ‹–拽移动日程 if (m_vScheduleInfo->isMoved() == m_pressInfo->isMoved()) { // qCDebug(ClientLogger) << "Schedule is highlighted"; m_vHighflag = true; } else { // qCDebug(ClientLogger) << "Schedule is dimmed (opacity 0.4)"; painter->setOpacity(0.4); textPenColor.setAlphaF(0.4); gdColor.orginalColor.setAlphaF(0.4); m_vHighflag = false; } m_vSelectflag = m_press; } int themetype = CScheduleDataManage::getScheduleDataManage()->getTheme(); QColor bColor = gdColor.normalColor; QFontMetrics fm = painter->fontMetrics(); int h = fm.height(); if (m_vHoverflag) { // qCDebug(ClientLogger) << "Schedule is hovered"; bColor = gdColor.hoverColor; } else if (m_vHighflag) { // qCDebug(ClientLogger) << "Schedule is highlighted"; bColor = gdColor.hightColor; } else if (m_vSelectflag) { // qCDebug(ClientLogger) << "Schedule is selected"; bColor = gdColor.pressColor; } painter->setBrush(bColor); painter->setPen(Qt::NoPen); painter->drawRect(rect); if (m_vHoverflag && !m_vSelectflag) { // qCDebug(ClientLogger) << "Drawing hover effect"; painter->save(); QRectF tRect = QRectF(rect.x() + 0.5, rect.y() + 0.5, rect.width() - 1, rect.height() - 1); QPen tPen; QColor cc = "#FFFFFF"; if (themetype == 2) { cc = "#FFFFFF"; } else { cc = "#000000"; } cc.setAlphaF(0.08); tPen.setColor(cc); tPen.setWidthF(1); tPen.setStyle(Qt::SolidLine); painter->setBrush(Qt::NoBrush); painter->setPen(tPen); painter->drawRect(tRect); painter->restore(); } if (m_vSelectflag) { // qCDebug(ClientLogger) << "Adjusting opacity for selected schedule"; if (themetype == 0 || themetype == 1) { textPenColor.setAlphaF(0.4); gdColor.orginalColor.setAlphaF(0.4); } else if (themetype == 2) { textPenColor.setAlphaF(0.6); gdColor.orginalColor.setAlphaF(0.6); } } painter->save(); QPen pen(gdColor.orginalColor); pen.setWidth(2); painter->setPen(pen); //左侧绘制竖线 QPointF top(rect.topLeft().x(), rect.topLeft().y() + 1); QPointF bottom(rect.bottomLeft().x(), rect.bottomLeft().y() - 1); painter->drawLine(top, bottom); painter->restore(); int tMargin = 10; if (m_totalNum > 1) tMargin = 5; if (m_type == 0) { // qCDebug(ClientLogger) << "Drawing normal schedule item"; int timeTextHight = 0; QFont font; font.setWeight(QFont::Normal); font = DFontSizeManager::instance()->get(DFontSizeManager::T8, font); //绘制日程起始时间 if (m_vScheduleInfo->dtStart().date() == getDate()) { // qCDebug(ClientLogger) << "Drawing start time for schedule"; painter->save(); painter->setFont(font); painter->setPen(gdColor.orginalColor); QTime stime = m_vScheduleInfo->dtStart().time(); QString str = stime.toString((CalendarManager::getInstance()->getTimeShowType() ? "AP " : "") + m_timeFormat); // qCDebug(ClientLogger) << "Start time text:" << str; QFontMetrics fontMetrics(font); qreal drawTextWidth = rect.width() - m_offset * 2; if (fm.horizontalAdvance(str) > drawTextWidth - 5) { // qCDebug(ClientLogger) << "Time text too long, truncating"; QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr) - 5; if (widthT >= drawTextWidth) { if (i < 1) { tStr.chop(1); } else { tStr.chop(2); } tStr = tStr + "..."; break; } } QString tStrs = fontMetrics.elidedText(str, Qt::ElideRight, qRound(drawTextWidth - 5)); // qCDebug(ClientLogger) << "Final time text:" << tStrs; painter->drawText( QRectF(rect.topLeft().x() + tMargin, rect.topLeft().y() + 3, drawTextWidth - 5, h), Qt::AlignLeft, tStrs); } else { painter->drawText( QRectF(rect.topLeft().x() + tMargin, rect.topLeft().y() + 3, drawTextWidth - 5, h), Qt::AlignLeft, str); } painter->restore(); } else { // qCDebug(ClientLogger) << "Not drawing start time (different date)"; timeTextHight = -20; } painter->save(); //绘制日程标题 // qCDebug(ClientLogger) << "Drawing schedule title"; font = DFontSizeManager::instance()->get(DFontSizeManager::T6, font); font.setLetterSpacing(QFont::PercentageSpacing, 105); painter->setFont(font); painter->setPen(textPenColor); QStringList liststr; QRect textRect = rect.toRect(); textRect.setWidth(textRect.width() - m_offset * 2); splitText(font, textRect.width() - tMargin - 8, textRect.height() - 20, m_vScheduleInfo->summary(), liststr, fm); for (int i = 0; i < liststr.count(); i++) { if ((20 + timeTextHight + (i + 1) * (h - 3)) > rect.height()) return; // qCDebug(ClientLogger) << "Drawing title line" << i+1 << ":" << liststr.at(i); painter->drawText( QRect(textRect.topLeft().x() + tMargin, textRect.topLeft().y() + 20 + timeTextHight + i * (h - 3), textRect.width() - 2, h), Qt::AlignLeft, liststr.at(i)); } painter->restore(); } else { // qCDebug(ClientLogger) << "Drawing more item indicator"; painter->save(); QFont font; font.setWeight(QFont::Normal); font = DFontSizeManager::instance()->get(DFontSizeManager::T8, font); painter->setFont(font); painter->setPen(textPenColor); painter->drawText(rect, Qt::AlignCenter | Qt::AlignVCenter, "..."); painter->restore(); } if (m_vSelectflag) { // qCDebug(ClientLogger) << "Drawing selection overlay"; QColor selcolor = m_transparentcolor; selcolor.setAlphaF(0.05); painter->setBrush(selcolor); painter->setPen(Qt::NoPen); painter->drawRect(rect); } if (getItemFocus()) { // qCDebug(ClientLogger) << "Drawing focus frame"; //获å�–tab图形 QRectF drawRect = rect.marginsRemoved(QMarginsF(1, 1, 1, 1)); painter->setBrush(Qt::NoBrush); QPen framePen; framePen.setWidth(2); framePen.setColor(getSystemActiveColor()); painter->setPen(framePen); painter->drawRect(drawRect); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsItem/scheduleitem.h000066400000000000000000000025051523260663500316100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEITEM_H #define SCHEDULEITEM_H #include "dschedule.h" #include "draginfoitem.h" #include #include #include #include class CScheduleCoorManage; class CScheduleItem : public DragInfoItem { Q_OBJECT public: CScheduleItem(QRectF rect, QGraphicsItem *parent = nullptr, int type = 0); ~CScheduleItem() override; //设置显示数æ�® void setData(const DSchedule::Ptr &info, QDate date, int totalNum); //是å�¦å�«æœ‰é€‰ä¸­æ—¥ç¨‹ bool hasSelectSchedule(const DSchedule::Ptr &info); int getType() { return m_type; } DSchedule::Ptr getData() const { return m_vScheduleInfo; } private: //æ ¹æ�®å­—体大å°�,宽度和高度将标题切æ�¢ä¸ºå¤šè¡Œ void splitText(QFont font, int w, int h, QString str, QStringList &listStr, QFontMetrics &fontM); private slots: void timeFormatChanged(int value); private: //绘制item显示效果 void paintBackground(QPainter *painter, const QRectF &rect, const bool isPixMap = false) override; private: int m_type = 0; int m_totalNum; QColor m_transparentcolor; QString m_timeFormat = "h:mm"; }; #endif // SCHEDULEITEM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsview.cpp000066400000000000000000000724601523260663500275530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "graphicsview.h" #include "graphicsItem/scheduleitem.h" #include "schedulecoormanage.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "schedulectrldlg.h" #include "commondef.h" #include "myscheduleview.h" #include "constants.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CGraphicsView::CGraphicsView(QWidget *parent, ViewPosition Type) : CWeekDayGraphicsview(parent, Type, ViewType::PartTimeView) { qCDebug(ClientLogger) << "CGraphicsView constructor - Type:" << Type; setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_timeInterval = height() / 24.0; setSceneRect(0, 0, width(), height()); m_LRPen.setColor(QColor(255, 255, 255)); m_LRPen.setStyle(Qt::SolidLine); m_TBPen.setColor(QColor(255, 255, 255)); m_TBPen.setStyle(Qt::SolidLine); m_LRFlag = true; m_TBFlag = true; m_margins = QMargins(0, 0, 0, 0); setLineWidth(0); //TODO 界é�¢åˆ·æ–°? m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(scrollBarValueChangedSlot())); m_timer->start(60000); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); connect(this->verticalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(scrollBarValueChangedSlot())); connect(this->verticalScrollBar(), &QScrollBar::sliderPressed, this, &CGraphicsView::slotScrollBar); connect(this, &CGraphicsView::sigStateChange, this, &CGraphicsView::slotStateChange, Qt::DirectConnection); //如果为周视图 if (m_viewPos == WeekPos) { qCDebug(ClientLogger) << "Week view detected, setting corner radius"; //设置显示å�³ä¸‹è§’圆角 setShowRadius(false, true); } } CGraphicsView::~CGraphicsView() { // qCDebug(ClientLogger) << "CGraphicsView destructor"; m_timer->stop(); m_timer->deleteLater(); clearSchedule(); } void CGraphicsView::setMargins(int left, int top, int right, int bottom) { // qCDebug(ClientLogger) << "CGraphicsView::setMargins - left:" << left << "top:" << top // << "right:" << right << "bottom:" << bottom; Q_UNUSED(top) m_margins = QMargins(left, 0, right, bottom); setViewportMargins(m_margins); } void CGraphicsView::setTheMe(int type) { qCDebug(ClientLogger) << "Setting theme" << "type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Setting light theme colors"; m_weekcolor = "#00429A"; m_weekcolor.setAlphaF(0.05); QColor linecolor = "#000000"; //ui图é€�明度为5% linecolor.setAlphaF(0.05); m_LRPen.setColor(linecolor); m_TBPen.setColor(linecolor); m_LRPen.setStyle(Qt::SolidLine); m_TBPen.setStyle(Qt::SolidLine); } else if (type == 2) { qCDebug(ClientLogger) << "Setting dark theme colors"; m_weekcolor = "#4F9BFF"; m_weekcolor.setAlphaF(0.1); QColor linecolor = "#000000"; //ui图é€�明度为5% linecolor.setAlphaF(0.05); m_LRPen.setColor(linecolor); m_TBPen.setColor(linecolor); } CWeekDayGraphicsview::setTheMe(type); } void CGraphicsView::slotCreate(const QDateTime &date) { qCDebug(ClientLogger) << "Creating new schedule" << "date:" << date; CScheduleDlg dlg(1, this); dlg.setDate(date); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "New schedule created successfully"; emit signalsUpdateSchedule(); slotStateChange(true); } } bool CGraphicsView::MeetCreationConditions(const QDateTime &date) { // qCDebug(ClientLogger) << "CGraphicsView::MeetCreationConditions - date:" << date; return qAbs(date.daysTo(m_PressDate)) < 7; } void CGraphicsView::updateHeight() { // qCDebug(ClientLogger) << "CGraphicsView::updateHeight"; scene()->update(); update(); } void CGraphicsView::setCurrentDate(const QDateTime ¤tDate) { qCDebug(ClientLogger) << "CGraphicsView::setCurrentDate - date:" << currentDate; m_currentDateTime = currentDate; scrollBarValueChangedSlot(); } void CGraphicsView::setInfo(const DSchedule::List &info) { // qCDebug(ClientLogger) << "CGraphicsView::setInfo - count:" << info.size(); m_scheduleInfo = info; } void CGraphicsView::upDateInfoShow(const CGraphicsView::DragStatus &status, const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "Updating info show" << "status:" << status; clearSchedule(); DSchedule::List vListData; vListData = m_scheduleInfo; switch (status) { case NONE: Q_UNUSED(info); qCDebug(ClientLogger) << "Status: NONE, no action needed"; break; case ChangeBegin: case ChangeEnd: { int index = vListData.indexOf(info); if (index >= 0) { qCDebug(ClientLogger) << "Updating existing schedule at index" << index; vListData[index] = info; } } break; case ChangeWhole: qCDebug(ClientLogger) << "Adding whole schedule"; vListData.append(info); break; case IsCreate: qCDebug(ClientLogger) << "Adding new schedule"; vListData.append(info); break; } QMap m_InfoMap; QDate currentDate; qint64 count = m_beginDate.daysTo(m_endDate); qint64 beginoffset = 0, endoffset = 0; DSchedule::List currentInfo; // qCDebug(ClientLogger) << "Processing date range from" << m_beginDate << "to" << m_endDate // << "(" << count << "days)"; for (int i = 0; i <= count; ++i) { currentDate = m_beginDate.addDays(i); currentInfo.clear(); for (int j = 0; j < vListData.size(); ++j) { DSchedule::Ptr ptr = vListData.at(j); if (ptr.isNull()) { continue; } beginoffset = ptr->dtStart().date().daysTo(currentDate); endoffset = currentDate.daysTo(ptr->dtEnd().date()); if (beginoffset < 0 || endoffset < 0) { continue; } if (ptr->dtEnd().date() == currentDate && ptr->dtStart().daysTo(ptr->dtEnd()) > 0 && ptr->dtEnd().time() == QTime(0, 0, 0)) { continue; } currentInfo.append(ptr); } std::sort(currentInfo.begin(), currentInfo.end()); if (currentInfo.size() > 0) { qCDebug(ClientLogger) << "Found" << currentInfo.size() << "schedules for date" << currentDate; m_InfoMap[currentDate] = currentInfo; QList info; scheduleClassificationType(currentInfo, info); for (int m = 0; m < info.count(); m++) { int tNum = info.at(m).vData.count(); //如果为周视图则è¦�显示一个ä½�置显示日程的数目 if (m_viewPos == WeekPos) { if (tNum > m_sMaxNum) { // qCDebug(ClientLogger) << "Week view: too many schedules (" << tNum // << "), showing only" << m_sMaxNum; tNum = m_sMaxNum; for (int n = 0; n < tNum - 1; n++) { addScheduleItem(info.at(m).vData.at(n), currentDate, n + 1, tNum, 0, m_viewType, m_sMaxNum); } //添加"..."item int index = tNum - 2; if (index < 0) { qCWarning(ClientLogger) << "week view create error,tNum -2 :" << index; index = 1; } DSchedule::Ptr tdetaliinfo(info.at(m).vData.at(index)->clone()); tdetaliinfo->setSummary("1"); //如果为"..."则设置类型为other,在获å�–颜色时会对其进行判断 tdetaliinfo->setScheduleTypeID("other"); addScheduleItem(tdetaliinfo, currentDate, tNum, tNum, 1, m_viewType, m_sMaxNum); } else { qCDebug(ClientLogger) << "Week view: adding" << tNum << "schedules"; for (int n = 0; n < tNum; n++) { addScheduleItem(info.at(m).vData.at(n), currentDate, n + 1, tNum, 0, m_viewType, m_sMaxNum); } } } else { qCDebug(ClientLogger) << "Day view: adding" << tNum << "schedules"; for (int n = 0; n < tNum; n++) { addScheduleItem(info.at(m).vData.at(n), currentDate, n + 1, tNum, 0, m_viewType, m_sMaxNum); } } } } } //æ›´æ–°æ¯�个背景上的日程标签 qCDebug(ClientLogger) << "Updating background show items"; updateBackgroundShowItem(); } QDateTime CGraphicsView::getPosDate(const QPoint &p) { QDateTime result = TimeRounding(m_coorManage->getDate(mapToScene(p))); // qCDebug(ClientLogger) << "CGraphicsView::getPosDate - point:" << p << "date:" << result; return result; } void CGraphicsView::ShowSchedule(DragInfoItem *infoitem) { qCDebug(ClientLogger) << "CGraphicsView::ShowSchedule - checking schedule type"; CScheduleItem *scheduleitem = dynamic_cast(infoitem); if (scheduleitem->getType() == 1) { qCDebug(ClientLogger) << "Schedule is type 1, skipping show"; return; } qCDebug(ClientLogger) << "Showing schedule in parent view"; DragInfoGraphicsView::ShowSchedule(infoitem); } void CGraphicsView::MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) { qCDebug(ClientLogger) << "CGraphicsView::MoveInfoProcess - pos:" << pos; Q_UNUSED(pos); if (!info->allDay()) { qint64 offset = m_PressDate.secsTo(m_MoveDate); qCDebug(ClientLogger) << "Moving schedule by" << offset << "seconds"; info->setDtStart(info->dtStart().addSecs(offset)); info->setDtEnd(info->dtEnd().addSecs(offset)); } else { qCDebug(ClientLogger) << "Converting all-day schedule to timed schedule"; info->setAllDay(false); //æ��醒规则 info->setRRuleType(DSchedule::RRule_None); info->setDtStart(m_MoveDate); info->setDtEnd(m_MoveDate.addSecs(3600)); } upDateInfoShow(ChangeWhole, info); } void CGraphicsView::addScheduleItem(const DSchedule::Ptr &info, QDate date, int index, int totalNum, int type, int viewtype, int maxnum) { qCDebug(ClientLogger) << "Adding schedule item" << "date:" << date << "index:" << index << "total:" << totalNum << "type:" << type; CScheduleItem *item = new CScheduleItem( m_coorManage->getDrawRegion(date, info->dtStart(), info->dtEnd(), index, totalNum, maxnum, viewtype), nullptr, type); if (type == 1) { qCDebug(ClientLogger) << "Setting item type to COTHER"; item->setItemType(CFocusItem::COTHER); } m_Scene->addItem(item); item->setData(info, date, totalNum); m_vScheduleItem.append(item); } /** * @brief CGraphicsView::setSelectSearchSchedule 设置æ�œç´¢é€‰ä¸­æ—¥ç¨‹ * @param info */ void CGraphicsView::setSelectSearchSchedule(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "Setting selected search schedule"; DragInfoGraphicsView::setSelectSearchSchedule(info); setTime(info->dtStart().time()); int animatedCount = 0; for (int i = 0; i < m_vScheduleItem.size(); ++i) { if (m_vScheduleItem.at(i)->getType() == 1) continue; //判断是å�¦ä¸ºé€‰ä¸­æ—¥ç¨‹ if (m_vScheduleItem.at(i)->hasSelectSchedule(info)) { // qCDebug(ClientLogger) << "Found matching schedule item at index" << i << ", starting animation"; m_vScheduleItem.at(i)->setStartValue(0); m_vScheduleItem.at(i)->setEndValue(10); m_vScheduleItem.at(i)->startAnimation(); animatedCount++; } } qCDebug(ClientLogger) << "Started animations for" << animatedCount << "matching schedule items"; } void CGraphicsView::clearSchedule() { // qCDebug(ClientLogger) << "Clearing schedule items" << "count:" << m_vScheduleItem.size(); for (int i = 0; i < m_vScheduleItem.size(); i++) { m_Scene->removeItem(m_vScheduleItem.at(i)); delete m_vScheduleItem[i]; m_vScheduleItem[i] = nullptr; } m_vScheduleItem.clear(); m_updateDflag = true; } void CGraphicsView::scheduleClassificationType(DSchedule::List &scheduleInfolist, QList &info) { qCDebug(ClientLogger) << "CGraphicsView::scheduleClassificationType - count:" << scheduleInfolist.size(); DSchedule::List schedulelist = scheduleInfolist; if (schedulelist.isEmpty()) return; info.clear(); std::sort(schedulelist.begin(), schedulelist.end()); QVector containIndex; for (int k = 0; k < schedulelist.count(); k++) { QDateTime endTime = schedulelist.at(k)->dtEnd(); QDateTime begTime = schedulelist.at(k)->dtStart(); if (begTime.date().daysTo(endTime.date()) == 0 && begTime.time().secsTo(endTime.time()) < m_minTime) { qCDebug(ClientLogger) << "Schedule too short, extending end time"; endTime = begTime.addSecs(m_minTime); } if (endTime.time().hour() == 0 && endTime.time().second() == 0) { qCDebug(ClientLogger) << "End time is midnight, subtracting 1 second"; endTime = endTime.addSecs(-1); } containIndex.clear(); for (int i = 0; i < info.count(); i++) { if ((schedulelist.at(k)->dtStart() >= info.at(i).begindate && schedulelist.at(k)->dtStart() <= info.at(i).enddate) || (endTime >= info.at(i).begindate && endTime <= info.at(i).enddate)) { containIndex.append(i); } } if (containIndex.count() == 0) { qCDebug(ClientLogger) << "Creating new classification group for schedule" << k; ScheduleclassificationInfo firstschedule; firstschedule.begindate = schedulelist.at(k)->dtStart(); firstschedule.enddate = endTime; firstschedule.vData.append(schedulelist.at(k)); info.append(firstschedule); } else { qCDebug(ClientLogger) << "Adding schedule" << k << "to existing classification group" << containIndex.at(0); ScheduleclassificationInfo &scheduleInfo = info[containIndex.at(0)]; int index = 0; for (int i = 1; i < containIndex.count(); ++i) { index = containIndex.at(i); if (info.at(index).begindate < scheduleInfo.begindate) scheduleInfo.begindate = info.at(index).begindate; if (info.at(index).enddate > scheduleInfo.enddate) scheduleInfo.enddate = info.at(index).enddate; scheduleInfo.vData.append(info.at(index).vData); } for (int i = containIndex.count() - 1; i > 0; --i) { info.removeAt(containIndex.at(i)); } if (schedulelist.at(k)->dtStart() < scheduleInfo.begindate) scheduleInfo.begindate = schedulelist.at(k)->dtStart(); if (endTime > scheduleInfo.enddate) scheduleInfo.enddate = endTime; scheduleInfo.vData.append(schedulelist.at(k)); } } qCDebug(ClientLogger) << "Classification complete, created" << info.size() << "groups"; } void CGraphicsView::mouseDoubleClickEvent(QMouseEvent *event) { qCDebug(ClientLogger) << "CGraphicsView::mouseDoubleClickEvent"; emit signalScheduleShow(false); DGraphicsView::mouseDoubleClickEvent(event); CScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item == nullptr) { qCDebug(ClientLogger) << "Double click on empty area, creating new schedule"; QPointF scenePoss = mapToScene(event->pos()); CScheduleDlg dlg(1, this); QDateTime tDatatime = m_coorManage->getDate(scenePoss); dlg.setDate(tDatatime); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "New schedule created from double click"; emit signalsUpdateSchedule(); emit sigStateChange(true); } return; } if (item->getType() == 1) { qCDebug(ClientLogger) << "Double click on schedule date"; emit signalsCurrentScheduleDate(item->getDate()); return; } m_updateDflag = false; qCDebug(ClientLogger) << "Opening schedule view for editing"; CMyScheduleView dlg(item->getData(), this); connect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CGraphicsView::slotDoubleEvent); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "Schedule edited successfully"; emit sigStateChange(true); } disconnect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CGraphicsView::slotDoubleEvent); } void CGraphicsView::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CGraphicsView::mousePressEvent - pos:" << event->pos(); CScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item != nullptr && item->getType() == 1) { // qCDebug(ClientLogger) << "Clicked on '...' item, hiding schedule"; emit signalScheduleShow(false); return; } DragInfoGraphicsView::mousePressEvent(event); } void CGraphicsView::mouseMoveEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CGraphicsView::mouseMoveEvent - pos:" << event->pos(); if (m_DragStatus == NONE) { CScheduleItem *item = dynamic_cast(itemAt(event->pos())); if (item != nullptr && item->getType() == 1) { // qCDebug(ClientLogger) << "Mouse over '...' item, showing arrow cursor"; setCursor(Qt::ArrowCursor); DGraphicsView::mouseMoveEvent(event); return; } } DragInfoGraphicsView::mouseMoveEvent(event); } void CGraphicsView::slotDoubleEvent(int type) { qCDebug(ClientLogger) << "CGraphicsView::slotDoubleEvent - type:" << type; Q_UNUSED(type); m_updateDflag = true; emit signalsUpdateSchedule(); } void CGraphicsView::slotScrollBar() { // qCDebug(ClientLogger) << "CGraphicsView::slotScrollBar"; emit signalScheduleShow(false); } void CGraphicsView::slotUpdateScene() { // qCDebug(ClientLogger) << "CGraphicsView::slotUpdateScene"; this->scene()->update(); } void CGraphicsView::slotStateChange(bool bState) { qCDebug(ClientLogger) << "State change" << "state:" << bState; if(bState) { // qCDebug(ClientLogger) << "State change to true, hiding all schedule items"; for (int i = 0; i < m_vScheduleItem.size(); i++) { m_vScheduleItem[i]->setVisible(false); } } } #ifndef QT_NO_WHEELEVENT /************************************************************************ Function: wheelEvent() Description: 鼠标滚轮事件 Input: event 滚轮事件 Output: æ—  Return: æ—  Others: æ—  ************************************************************************/ void CGraphicsView::wheelEvent(QWheelEvent *event) { // qCDebug(ClientLogger) << "CGraphicsView::wheelEvent"; emit signalScheduleShow(false); //é�žå…¨å¤©éƒ¨åˆ†å¦‚果滚动为左å�³åˆ™é€€å‡º if (event->angleDelta().x() != 0 ) { return; } int test = event->angleDelta().y(); int viewWidth = viewport()->width(); int viewHeight = viewport()->height(); QPoint newCenter(viewWidth / 2, viewHeight / 2 - test); QPointF centerpos = mapToScene(newCenter); centerOnScene(centerpos); } #endif /************************************************************************ Function: resizeEvent() Description: 窗å�£å¤§å°�改å�˜äº‹ä»¶ Input: event 窗å�£å¤§å°�改å�˜äº‹ä»¶ Output: æ—  Return: æ—  Others: æ—  ************************************************************************/ void CGraphicsView::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CGraphicsView::resizeEvent"; scrollBarValueChangedSlot(); QGraphicsView::resizeEvent(event); viewport()->update(); update(); } /************************************************************************ Function: paintEvent() Description: 绘制事件 Input: event 事件 Output: æ—  Return: æ—  Others: æ—  ************************************************************************/ void CGraphicsView::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "CGraphicsView::paintEvent"; QPainter t_painter(viewport()); int t_width = viewport()->width() + 2; //绘制水平线 if (m_LRFlag) { // qCDebug(ClientLogger) << "Drawing horizontal lines"; if (m_currentTimeType == 0) { // qCDebug(ClientLogger) << "Drawing horizontal lines for current time type 0"; t_painter.save(); t_painter.setPen(m_LRPen); for (int i = 0; i < m_vLRLarge.size(); ++i) t_painter.drawLine(QPoint(0, m_vLRLarge[i] - 1), QPoint(t_width, m_vLRLarge[i] - 1)); t_painter.restore(); } else { // qCDebug(ClientLogger) << "Drawing horizontal lines for current time type 1"; t_painter.save(); t_painter.setPen(m_LRPen); for (int i = 0; i < m_vLRLarge.size() - 1; ++i) t_painter.drawLine(QPoint(0, m_vLRLarge[i] - 1), QPoint(t_width, m_vLRLarge[i] - 1)); t_painter.restore(); if (m_viewType == 1 && m_coorManage->getBegindate() == m_currentDateTime.date()) { t_painter.save(); QPen pen = m_LRPen; pen.setColor(m_currenttimecolor); t_painter.setPen(pen); int index = m_vLRLarge.count() - 1; t_painter.drawLine(QPoint(0, m_vLRLarge[index] - 1), QPoint(t_width, m_vLRLarge[index] - 1)); t_painter.restore(); } } } DragInfoGraphicsView::paintEvent(event); } void CGraphicsView::scrollBarValueChangedSlot() { // qCDebug(ClientLogger) << "CGraphicsView::scrollBarValueChangedSlot"; QMutexLocker locker(&m_Mutex); int viewHeight = viewport()->height(); m_vLRLarge.clear(); QPointF leftToprealPos = mapToScene(QPoint(0, 0)); QPointF leftbottomrealPos = mapToScene(QPoint(0, viewHeight)); m_timeInterval = m_Scene->height() / 24.0; qreal beginpos = static_cast(qFloor(leftToprealPos.y() / m_timeInterval) * m_timeInterval); if (beginpos < leftToprealPos.y()) { beginpos = (beginpos / m_timeInterval + 1) * m_timeInterval; } QVector vHours; for (qreal i = beginpos; i < leftbottomrealPos.y(); i = i + m_timeInterval) { QPoint point = mapFromScene(leftbottomrealPos.x(), i); m_vLRLarge.append(point.y()); vHours.append(qFloor(i / m_timeInterval + 0.5)); } qreal currentTime = static_cast(m_coorManage->getHeight(m_currentDateTime.time())); if (currentTime > beginpos && currentTime < leftbottomrealPos.y()) { m_currentTimeType = 1; QPoint point = mapFromScene(leftbottomrealPos.x(), currentTime); m_vLRLarge.append(point.y()); vHours.append(qFloor(currentTime / m_timeInterval + 0.5)); emit signalsPosHours(m_vLRLarge, vHours, m_currentTimeType); } else { m_currentTimeType = 0; emit signalsPosHours(m_vLRLarge, vHours, m_currentTimeType); } scene()->update(); update(); } CGraphicsView::PosInItem CGraphicsView::getPosInItem(const QPoint &p, const QRectF &itemRect) { // qCDebug(ClientLogger) << "CGraphicsView::getPosInItem - pos:" << p << "itemRect:" << itemRect; QPointF scenePos = this->mapToScene(p); QPointF itemPos = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); qreal bottomY = itemRect.height() - itemPos.y(); if (itemPos.y() < 5) { return TOP; } if (bottomY < 5) { return BOTTOM; } return MIDDLE; } DSchedule::Ptr CGraphicsView::getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) { // qCDebug(ClientLogger) << "CGraphicsView::getScheduleInfo - beginDate:" << beginDate << "endDate:" << endDate; DSchedule::Ptr info(new DSchedule); if (beginDate.secsTo(endDate) > 0) { info->setDtStart(beginDate); if (beginDate.secsTo(endDate) < DDECalendar::ThirtyMinutesWithSec) { info->setDtEnd(beginDate.addSecs(DDECalendar::ThirtyMinutesWithSec)); } else { info->setDtEnd(endDate); } } else { if (endDate.secsTo(beginDate) < DDECalendar::ThirtyMinutesWithSec) { info->setDtStart(beginDate.addSecs(-DDECalendar::ThirtyMinutesWithSec)); } else { info->setDtStart(endDate); } info->setDtEnd(beginDate); } info->setSummary(tr("New Event")); info->setAllDay(false); //设置默认日程类型为工作 info->setScheduleTypeID("107c369e-b13a-4d45-9ff3-de4eb3c0475b"); info->setAlarmType(DSchedule::Alarm_15Min_Front); return info; } bool CGraphicsView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) { // qCDebug(ClientLogger) << "CGraphicsView::IsEqualtime - timeFirst:" << timeFirst << "timeSecond:" << timeSecond; return !(qAbs(timeFirst.secsTo(timeSecond)) > 100); } bool CGraphicsView::JudgeIsCreate(const QPointF &pos) { // qCDebug(ClientLogger) << "CGraphicsView::JudgeIsCreate - pos:" << pos; return qAbs(pos.x() - m_PressPos.x()) > 20 || qAbs(m_PressDate.secsTo(m_coorManage->getDate(mapToScene(pos.toPoint())))) > 300; } void CGraphicsView::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) { // qCDebug(ClientLogger) << "CGraphicsView::RightClickToCreate - listItem:" << listItem << "pos:" << pos; Q_UNUSED(listItem); m_rightMenu->clear(); m_rightMenu->addAction(m_createAction); QPointF scenePoss = mapToScene(pos); m_createDate = m_coorManage->getDate(scenePoss); m_rightMenu->exec(QCursor::pos()); } QDateTime CGraphicsView::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) { // qCDebug(ClientLogger) << "CGraphicsView::getDragScheduleInfoBeginTime - moveDateTime:" << moveDateTime; return moveDateTime.secsTo(m_InfoEndTime) < DDECalendar::ThirtyMinutesWithSec ? m_InfoEndTime.addSecs(-DDECalendar::ThirtyMinutesWithSec) : moveDateTime; } QDateTime CGraphicsView::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) { // qCDebug(ClientLogger) << "CGraphicsView::getDragScheduleInfoEndTime - moveDateTime:" << moveDateTime; return m_InfoBeginTime.secsTo(moveDateTime) < DDECalendar::ThirtyMinutesWithSec ? m_InfoBeginTime.addSecs(DDECalendar::ThirtyMinutesWithSec) : moveDateTime; } QDateTime CGraphicsView::TimeRounding(const QDateTime &time) { // qCDebug(ClientLogger) << "CGraphicsView::TimeRounding - time:" << time; int hours = time.time().hour(); int minnutes = 0; minnutes = time.time().minute() / 15; return QDateTime(time.date(), QTime(hours, minnutes * 15, 0)); } void CGraphicsView::centerOnScene(const QPointF &pos) { // qCDebug(ClientLogger) << "CGraphicsView::centerOnScene - pos:" << pos; // view æ ¹æ�®é¼ æ ‡ä¸‹çš„点作为锚点æ�¥å®šä½� scene setTransformationAnchor(QGraphicsView::AnchorUnderMouse); centerOn(pos); // scene 在 view 的中心点作为锚点 setTransformationAnchor(QGraphicsView::AnchorViewCenter); scrollBarValueChangedSlot(); setSceneHeightScale(pos); } void CGraphicsView::setSceneHeightScale(const QPointF &pos) { // qCDebug(ClientLogger) << "CGraphicsView::setSceneHeightScale - pos:" << pos; m_sceneHeightScale = pos.y() / this->scene()->height(); } void CGraphicsView::keepCenterOnScene() { // qCDebug(ClientLogger) << "CGraphicsView::keepCenterOnScene"; QPointF pos; pos.setX(this->viewport()->width() / 2); pos.setY(this->scene()->height() * m_sceneHeightScale); centerOnScene(pos); } void CGraphicsView::setTime(QTime time) { // qCDebug(ClientLogger) << "CGraphicsView::setTime - time:" << time; int viewWidth = viewport()->width(); int viewHeight = viewport()->height(); QPoint newCenter(viewWidth / 2, viewHeight / 2); QPointF centerpos = mapToScene(newCenter); centerpos = QPointF(centerpos.x(), static_cast(m_coorManage->getHeight(time))); centerOnScene(centerpos); } /** * @brief CGraphicsView::updateInfo 更新日程数æ�®æ˜¾ç¤º */ void CGraphicsView::updateInfo() { // qCDebug(ClientLogger) << "CGraphicsView::updateInfo"; //更新选择日程状æ€� DragInfoGraphicsView::updateInfo(); switch (m_DragStatus) { case IsCreate: // qCDebug(ClientLogger) << "Updating info show for create"; upDateInfoShow(IsCreate, m_DragScheduleInfo); break; default: // qCDebug(ClientLogger) << "Updating info show for default"; upDateInfoShow(); break; } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/graphicsview.h000066400000000000000000000103631523260663500272120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef GRAPHICSVIEW_H #define GRAPHICSVIEW_H #include "dschedule.h" #include "draginfographicsview.h" #include "graphicsItem/cweekdaybackgrounditem.h" #include "cweekdaygraphicsview.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE typedef struct _tagScheduleclassificationInfo { QDateTime begindate; QDateTime enddate; DSchedule::List vData; } ScheduleclassificationInfo; class CScheduleCoorManage; class CScheduleItem; class CGraphicsView : public CWeekDayGraphicsview { Q_OBJECT public: explicit CGraphicsView(QWidget *parent, ViewPosition Type = WeekPos); ~CGraphicsView() override; void setMargins(int left, int top, int right, int bottom); QMargins getMargins() { return m_margins; } void updateHeight(); void setCurrentDate(const QDateTime ¤tDate); void setInfo(const DSchedule::List &info); void addScheduleItem(const DSchedule::Ptr &info, QDate date, int index, int totalNum, int type, int viewtype, int maxnum); //设置æ�œç´¢é€‰ä¸­æ—¥ç¨‹ void setSelectSearchSchedule(const DSchedule::Ptr &info) override; void clearSchedule(); void setMinTime(const int &minTime) { m_minTime = minTime; } void setMaxNum(const int maxnum) { m_sMaxNum = maxnum; } void keepCenterOnScene(); void scheduleClassificationType(DSchedule::List &scheduleInfolist, QList &info); void mouseDoubleClickEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; #ifndef QT_NO_WHEELEVENT void wheelEvent(QWheelEvent *event) override; #endif void resizeEvent(QResizeEvent *event) override; void setTime(QTime time); void updateInfo() override; protected: void paintEvent(QPaintEvent *event) override; public slots: void scrollBarValueChangedSlot(); void slotDoubleEvent(int type); void slotScrollBar(); void slotUpdateScene(); void slotStateChange(bool bState); signals: void signalsPosHours(QVector vPos, QVector vHours, int currentTimeType = 0); void signalsCurrentScheduleDate(QDate date); private: void TimeRound(QDateTime &dtime); QDateTime TimeRounding(const QDateTime &time); void centerOnScene(const QPointF &pos); void setSceneHeightScale(const QPointF &pos); public: void setTheMe(int type = 0) override; protected: void slotCreate(const QDateTime &date) override; bool MeetCreationConditions(const QDateTime &date) override; void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) override; QDateTime getPosDate(const QPoint &p) override; void ShowSchedule(DragInfoItem *infoitem) override; void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) override; PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect) override; DSchedule::Ptr getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) override; bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) override; bool JudgeIsCreate(const QPointF &pos) override; void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) override; QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) override; QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) override; private: QVector m_vScheduleItem; QMargins m_margins; //四周空白 bool m_LRFlag; //水平线 QPen m_LRPen; //水平线画笔 bool m_TBFlag; //垂直线 QPen m_TBPen; //垂直线画笔 QVector m_vLRLarge; //大刻度åƒ�ç´ ä½�ç½® qreal m_timeInterval; qreal m_sceneHeightScale = 0; QColor m_weekcolor = "#4F9BFF"; QColor m_currenttimecolor = "#F74444"; int m_currentTimeType = 0; QTimer *m_timer = nullptr; QMutex m_Mutex; bool m_updateDflag = false; DSchedule::List m_scheduleInfo; QDateTime m_currentDateTime; int m_minTime; //最å°�高度对应的最å°�æ—¶é—´ int m_sMaxNum = 4; }; #endif // GRAPHICSVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/monthgraphiview.cpp000066400000000000000000000556701523260663500302770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthgraphiview.h" #include "../widget/monthWidget/monthscheduleview.h" #include "../dialog/scheduledlg.h" #include "../dialog/myscheduleview.h" #include "../widget/touchgestureoperation.h" #include "constants.h" #include "commondef.h" #include "graphicsItem/cmonthschedulenumitem.h" #include "cscenetabkeydeal.h" #include "ckeyenabledeal.h" #include "ckeyleftdeal.h" #include "ckeyrightdeal.h" #include "ckeyupdeal.h" #include "ckeydowndeal.h" #include "commondef.h" #include #include CMonthGraphicsview::CMonthGraphicsview(QWidget *parent) : DragInfoGraphicsView(parent) { qCDebug(ClientLogger) << "CMonthGraphicsview constructor"; //设置显示左å�³ä¸‹è§’圆角 setShowRadius(true, true); m_MonthScheduleView = new CMonthScheduleView(this, m_Scene); connect(this, &CMonthGraphicsview::sigStateChange, m_MonthScheduleView, &CMonthScheduleView::slotStateChange, Qt::DirectConnection); connect(this, &CMonthGraphicsview::signalFontChange, m_MonthScheduleView, &CMonthScheduleView::slotFontChange); qCDebug(ClientLogger) << "Creating month day items"; for (int i = 0; i < DDEMonthCalendar::ItemSizeOfMonthDay; ++i) { CMonthDayItem *item = new CMonthDayItem(); item->setZValue(-1); if (m_DayItem.size() > 0) { //设置对应左å�³å’Œä¸‹ä¸€ä¸ª 关系 m_DayItem.last()->setNextFocusItem(item); m_DayItem.last()->setRightItem(item); item->setLeftItem(m_DayItem.last()); } int upNum = i - 7; //如果对应的上一排编å�·å¤§äºŽé›¶åˆ™è®¾ç½®å¯¹åº”的上下关系 if (upNum >= 0) { m_DayItem.at(upNum)->setDownItem(item); item->setUpItem(m_DayItem.at(upNum)); } //设置编å�· item->setBackgroundNum(i); m_DayItem.append(item); m_Scene->addItem(item); } updateSize(); m_Scene->setFirstFocusItem(m_DayItem.first()); qCDebug(ClientLogger) << "Setting up keyboard event handling"; //添加键盘事件处ç�† CKeyPressPrxy *m_keyPrxy = new CKeyPressPrxy(); m_keyPrxy->addkeyPressDeal(new CSceneTabKeyDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyEnableDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyLeftDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyRightDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyUpDeal(m_Scene)); m_keyPrxy->addkeyPressDeal(new CKeyDownDeal(m_Scene)); m_Scene->setKeyPressPrxy(m_keyPrxy); } CMonthGraphicsview::~CMonthGraphicsview() { qCDebug(ClientLogger) << "CMonthGraphicsview destructor"; m_DayItem.clear(); } void CMonthGraphicsview::setTheMe(int type) { qCDebug(ClientLogger) << "Setting month view theme" << "type:" << type; m_themetype = type; DragInfoGraphicsView::setTheMe(type); for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setTheMe(type); } } void CMonthGraphicsview::setDate(const QVector &showDate) { qCDebug(ClientLogger) << "Setting month view dates" << "first date:" << showDate.at(0); Q_ASSERT(showDate.size() == 42); if (showDate.at(0).day() != 1) { m_currentMonth = showDate.at(0).addMonths(1).month(); } else { m_currentMonth = showDate.at(0).month(); } //æ ¹æ�®å½“å‰�时间设置当å‰�场景的第一个焦点item int currentIndex = 0; for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setDate(showDate.at(i)); m_DayItem.at(i)->setCurrentMonth(showDate.at(i).month() == m_currentMonth); if (showDate.at(i) == getCurrentDate()) { currentIndex = i; } } qCDebug(ClientLogger) << "Setting focus to current date at index" << currentIndex; m_Scene->setFirstFocusItem(m_DayItem.at(currentIndex)); m_schedulelistdata.clear(); this->scene()->update(); } void CMonthGraphicsview::setFestival(const QMap &festivalInfo) { qCDebug(ClientLogger) << "Setting festival info" << "count:" << festivalInfo.size(); m_festivallist = festivalInfo; for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->setStatus(static_cast(m_festivallist[m_DayItem.at(i)->getDate()])); } this->scene()->update(); } void CMonthGraphicsview::setLunarInfo(const QMap &lunarCache) { qCDebug(ClientLogger) << "Setting lunar info" << "count:" << lunarCache.size(); m_lunarCache = lunarCache; updateLunar(); } void CMonthGraphicsview::setLunarVisible(bool visible) { qCDebug(ClientLogger) << "Setting lunar visibility" << "visible:" << visible; CMonthDayItem::m_LunarVisible = visible; } /** * @brief CMonthGraphicsview::setScheduleInfo 设置日程信æ�¯ * @param info */ void CMonthGraphicsview::setScheduleInfo(const QMap &info) { qCDebug(ClientLogger) << "Setting schedule info" << "date count:" << info.size(); m_schedulelistdata = info; updateInfo(); } /** * @brief CMonthGraphicsview::setSelectSearchSchedule 设置选择æ�œç´¢æ—¥ç¨‹ * @param scheduleInfo */ void CMonthGraphicsview::setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "Setting selected search schedule" << "summary:" << scheduleInfo->summary() << "start:" << scheduleInfo->dtStart(); DragInfoGraphicsView::setSelectSearchSchedule(scheduleInfo); //获å�–所有的日程item QVector mScheduleShowBtn = m_MonthScheduleView->getScheduleShowItem(); int animatedCount = 0; for (int i = 0; i < mScheduleShowBtn.size(); ++i) { CMonthScheduleItem *item = dynamic_cast(mScheduleShowBtn.at(i)); if (item == nullptr) continue; if (scheduleInfo == item->getData()) { qCDebug(ClientLogger) << "Found matching schedule item at index" << i; item->setStartValue(0); item->setEndValue(4); item->startAnimation(); animatedCount++; } } qCDebug(ClientLogger) << "Started animations for" << animatedCount << "matching schedule items"; } /** * @brief CMonthGraphicsview::setSearchScheduleInfo 设置æ�œç´¢æ—¥ç¨‹ä¿¡æ�¯ * @param searchScheduleInfo */ void CMonthGraphicsview::setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo) { qCDebug(ClientLogger) << "Setting search schedule info" << "count:" << searchScheduleInfo.size(); DragInfoItem::setSearchScheduleInfo(searchScheduleInfo); this->scene()->update(); } void CMonthGraphicsview::updateSize() { qCDebug(ClientLogger) << "Updating month view size" << "width:" << viewport()->rect().width() << "height:" << viewport()->rect().height(); //场景的大å°�å’Œä½�ç½® QRectF sceneRect(0, 0, viewport()->rect().width(), viewport()->rect().height()); m_Scene->setSceneRect(sceneRect); qreal w = m_Scene->width() / DDEMonthCalendar::AFewDaysOfWeek; qreal h = m_Scene->height() / DDEMonthCalendar::LinesNumOfMonth; QRectF rect; int w_offset = 0; int h_offset = 0; for (int i = 0; i < m_DayItem.size(); ++i) { h_offset = i / DDEMonthCalendar::AFewDaysOfWeek; w_offset = i % DDEMonthCalendar::AFewDaysOfWeek; rect.setRect(w * w_offset, h * h_offset, w, h); m_DayItem.at(i)->setRect(rect); } } void CMonthGraphicsview::updateLunar() { qCDebug(ClientLogger) << "Updating lunar info"; QDate date; CaHuangLiDayInfo info; QString lunarStr(""); for (int i = 0; i < m_DayItem.size(); ++i) { date = m_DayItem.at(i)->getDate(); if (m_lunarCache.contains(date)) { info = m_lunarCache.value(date); if (info.mLunarDayName == "åˆ�一") { //如果为闰月å�ªæ˜¾ç¤ºæœˆä»½ä¸�显示天 if (info.mLunarMonthName.contains("é—°")) { info.mLunarDayName = info.mLunarMonthName; } else { info.mLunarDayName = info.mLunarMonthName + info.mLunarDayName; } } if (info.mTerm.isEmpty()) { lunarStr = info.mLunarDayName; } else { lunarStr = info.mTerm; } } else { lunarStr = ""; } m_DayItem.at(i)->setLunar(lunarStr); } } /** * @brief CMonthGraphicsview::updateInfo 更新日程数æ�®æ˜¾ç¤º */ void CMonthGraphicsview::updateInfo() { qCDebug(ClientLogger) << "Updating month view info"; DragInfoGraphicsView::updateInfo(); int h = m_MonthScheduleView->getScheduleHeight(); m_MonthScheduleView->setallsize(this->viewport()->width(), this->viewport()->height(), 0, 0, 0, h); // Only update schedule data when it's valid (42 days for month view) if (m_schedulelistdata.count() == DDEMonthCalendar::ItemSizeOfMonthDay) { m_MonthScheduleView->setData(m_schedulelistdata, 1); } switch (m_DragStatus) { case IsCreate: qCDebug(ClientLogger) << "Updating info for new schedule creation"; upDateInfoShow(IsCreate, m_DragScheduleInfo); break; case ChangeWhole: qCDebug(ClientLogger) << "Updating info for whole schedule change"; upDateInfoShow(ChangeWhole, m_DragScheduleInfo); break; default: qCDebug(ClientLogger) << "No drag operation in progress"; break; } viewport()->update(); update(); //更新背景上显示的item updateBackgroundShowItem(); } QPointF CMonthGraphicsview::getItemPos(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); QPointF result = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); // qCDebug(ClientLogger) << "CMonthGraphicsview::getItemPos - point:" << p << "item rect:" << itemRect << "result:" << result; return result; } CMonthGraphicsview::PosInItem CMonthGraphicsview::getPosInItem(const QPoint &p, const QRectF &itemRect) { QPointF scenePos = this->mapToScene(p); QPointF itemPos = QPointF(scenePos.x() - itemRect.x(), scenePos.y() - itemRect.y()); qreal bottomY = itemRect.width() - itemPos.x(); PosInItem result; if (itemPos.x() < 5) { result = LEFT; } else if (bottomY < 5) { result = RIGHT; } else { result = MIDDLE; } // qCDebug(ClientLogger) << "CMonthGraphicsview::getPosInItem - point:" << p // << "item rect:" << itemRect // << "item pos:" << itemPos // << "result:" << result; return result; } QDateTime CMonthGraphicsview::getPosDate(const QPoint &p) { if (!this->sceneRect().contains(p)) { qCDebug(ClientLogger) << "Point outside scene rect, returning move date:" << m_MoveDate; return m_MoveDate; } QRectF rect = this->sceneRect(); qreal x = 0; qreal y = 0; if (p.x() < 0) { x = 0; } else if (p.x() > (rect.width() - 10)) { x = rect.width() - 10; } else { x = p.x(); } if (p.y() < 0) { y = 0; } else if (p.y() > (rect.height() - 10)) { y = rect.height() - 10; } else { y = p.y(); } int xoffset = qFloor(x / (rect.width() / DDEMonthCalendar::AFewDaysOfWeek)) % DDEMonthCalendar::AFewDaysOfWeek; int yoffset = qFloor(y / (rect.height() / DDEMonthCalendar::LinesNumOfMonth)) % DDEMonthCalendar::LinesNumOfMonth; QDateTime result = QDateTime(m_DayItem[xoffset + yoffset * 7]->getDate(), QTime(0, 0, 0)); qCDebug(ClientLogger) << "CMonthGraphicsview::getPosDate - point:" << p << "x:" << x << "y:" << y << "offsets:" << xoffset << yoffset << "result:" << result; return result; } void CMonthGraphicsview::upDateInfoShow(const CMonthGraphicsview::DragStatus &status, const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CMonthGraphicsview::upDateInfoShow - status:" << status << "schedule:" << (info ? info->summary() : "null"); switch (status) { case NONE: Q_UNUSED(info); qCDebug(ClientLogger) << "Status: NONE, no action needed"; break; case ChangeBegin: case ChangeEnd: { qCDebug(ClientLogger) << "Changing date in month schedule view"; m_MonthScheduleView->changeDate(info); } break; case ChangeWhole: { qCDebug(ClientLogger) << "Handling whole schedule change"; } break; case IsCreate: qCDebug(ClientLogger) << "Updating date for new schedule"; m_MonthScheduleView->updateDate(info); break; } } void CMonthGraphicsview::slideEvent(QPointF &startPoint, QPointF &stopPort) { qCDebug(ClientLogger) << "CMonthGraphicsview::slideEvent - start:" << startPoint << "stop:" << stopPort; qreal _movingLine {0}; touchGestureOperation::TouchMovingDirection _touchMovingDir = touchGestureOperation::getTouchMovingDir(startPoint, stopPort, _movingLine); //切æ�¢æœˆä»½ 0 ä¸�切æ�¢ 1 下一个 -1 上个月 int delta {0}; //移动å��ç§» 25则切æ�¢æœˆä»½ const int moveOffset = 25; switch (_touchMovingDir) { case touchGestureOperation::T_TOP: { if (_movingLine > moveOffset) { qCDebug(ClientLogger) << "Slide up detected, moving to previous month"; delta = -1; startPoint = stopPort; } break; } case touchGestureOperation::T_BOTTOM: { if (_movingLine > moveOffset) { qCDebug(ClientLogger) << "Slide down detected, moving to next month"; delta = 1; startPoint = stopPort; } break; } default: break; } if (delta != 0) { qCDebug(ClientLogger) << "Emitting angle delta signal:" << delta; emit signalAngleDelta(delta); } } void CMonthGraphicsview::mouseDoubleClickEvent(QMouseEvent *event) { qCDebug(ClientLogger) << "CMonthGraphicsview::mouseDoubleClickEvent - pos:" << event->pos() << "button:" << event->button(); if (event->button() != Qt::LeftButton) { qCDebug(ClientLogger) << "Mouse double click event, but not left button"; return; } QGraphicsItem *listItem = itemAt(event->pos()); CMonthScheduleNumItem *item = dynamic_cast(listItem); if (item != nullptr) { // qCDebug(ClientLogger) << "Double click on schedule num item, switching view to date:" << item->getDate(); //å�Œå‡»åˆ‡æ�¢è§†å›¾ if (item->getDate().year() > DDECalendar::QueryEarliestYear) { qCDebug(ClientLogger) << "Double click on schedule num item, switching view to date:" << item->getDate(); emit signalsViewSelectDate(item->getDate()); } return; } CMonthScheduleItem *infoitem = dynamic_cast(listItem); if (infoitem != nullptr) { qCDebug(ClientLogger) << "Double click on schedule item, opening edit dialog"; CMyScheduleView dlg(infoitem->getData(), this); connect(&dlg, &CMyScheduleView::signalsEditorDelete, this, &CMonthGraphicsview::signalsUpdateSchedule); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "Schedule edited successfully"; emit sigStateChange(true); } return; } CMonthDayItem *Dayitem = dynamic_cast(listItem); if (Dayitem != nullptr) { // qCDebug(ClientLogger) << "Double click on day item, getting item pos"; QPointF point = getItemPos(event->pos(), Dayitem->rect()); if (point.y() < 38) { //å�Œå‡»åˆ‡æ�¢è§†å›¾ if (Dayitem->getDate().year() > DDECalendar::QueryEarliestYear) { qCDebug(ClientLogger) << "Double click on day item header, switching view to date:" << Dayitem->getDate(); emit signalsViewSelectDate(Dayitem->getDate()); } } else { //å�Œå‡»æ–°å»ºæ—¥ç¨‹ if (Dayitem->getDate().year() >= DDECalendar::QueryEarliestYear) { if (Dayitem->getDate().year() <= DDECalendar::QueryLatestYear) { qCDebug(ClientLogger) << "Double click on day item body, creating new schedule for date:" << Dayitem->getDate(); slotCreate(QDateTime(Dayitem->getDate(), QTime(0, 0, 0))); } } } } } void CMonthGraphicsview::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CMonthGraphicsview::resizeEvent - size:" << event->size(); DragInfoGraphicsView::resizeEvent(event); updateSize(); updateInfo(); } void CMonthGraphicsview::changeEvent(QEvent *event) { // qCDebug(ClientLogger) << "CMonthGraphicsview::changeEvent - type:" << event->type(); if (event->type() == QEvent::FontChange) { // qCDebug(ClientLogger) << "Font changed, emitting signalFontChange"; emit signalFontChange(); } } void CMonthGraphicsview::wheelEvent(QWheelEvent *e) { // qCDebug(ClientLogger) << "CMonthGraphicsview::wheelEvent - angle delta:" << e->angleDelta(); //如果滚动为上下则å�‘é€�ä¿¡å�· if (e->angleDelta().y() != 0) { emit signalAngleDelta(e->angleDelta().y()); } } /** * @brief CMonthGraphicsview::updateBackgroundShowItem 更新背景上显示的item */ void CMonthGraphicsview::updateBackgroundShowItem() { // qCDebug(ClientLogger) << "CMonthGraphicsview::updateBackgroundShowItem"; for (int i = 0; i < m_DayItem.size(); ++i) { m_DayItem.at(i)->updateShowItem(); } } void CMonthGraphicsview::setSceneCurrentItemFocus(const QDate &focusDate) { // qCDebug(ClientLogger) << "CMonthGraphicsview::setSceneCurrentItemFocus - focus date:" << focusDate; int offset = static_cast(m_DayItem.first()->getDate().daysTo(focusDate)); if (offset >= 0 && offset < m_DayItem.size()) { qCDebug(ClientLogger) << "Setting scene current item focus" << "focus date:" << focusDate << "offset:" << offset; m_Scene->setCurrentFocusItem(m_DayItem.at(offset)); m_Scene->currentFocusItemUpdate(); } else { qCWarning(ClientLogger) << "Invalid focus date offset" << "focus date:" << focusDate << "first item date:" << m_DayItem.first()->getDate() << "offset:" << offset; } } void CMonthGraphicsview::setDragPixmap(QDrag *drag, DragInfoItem *item) { // qCDebug(ClientLogger) << "CMonthGraphicsview::setDragPixmap - item:" << item; CMonthScheduleItem *infoitem = dynamic_cast(item); drag->setPixmap(infoitem->getPixmap()); } bool CMonthGraphicsview::MeetCreationConditions(const QDateTime &date) { // qCDebug(ClientLogger) << "CMonthGraphicsview::MeetCreationConditions - date:" << date; return qAbs(date.daysTo(m_PressDate)) < 43; } bool CMonthGraphicsview::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) { // qCDebug(ClientLogger) << "CMonthGraphicsview::IsEqualtime - timeFirst:" << timeFirst << "timeSecond:" << timeSecond; return timeFirst.date() == timeSecond.date(); } bool CMonthGraphicsview::JudgeIsCreate(const QPointF &pos) { // qCDebug(ClientLogger) << "CMonthGraphicsview::JudgeIsCreate - pos:" << pos; return qAbs(pos.x() - m_PressPos.x()) > 20 || qAbs(m_PressDate.daysTo(getPosDate(pos.toPoint()))) > 0; } void CMonthGraphicsview::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) { // qCDebug(ClientLogger) << "CMonthGraphicsview::RightClickToCreate - listItem:" << listItem << "pos:" << pos; Q_UNUSED(pos); CMonthDayItem *Dayitem = dynamic_cast(listItem); if (Dayitem != nullptr) { // qCDebug(ClientLogger) << "Right click on day item, showing create action"; m_rightMenu->clear(); m_rightMenu->addAction(m_createAction); m_createDate.setDate(Dayitem->getDate()); m_rightMenu->exec(QCursor::pos()); } } void CMonthGraphicsview::MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) { // qCDebug(ClientLogger) << "CMonthGraphicsview::MoveInfoProcess - info:" << info << "pos:" << pos; qint64 offset = m_PressDate.daysTo(m_MoveDate); info->setDtStart(info->dtStart().addDays(offset)); info->setDtEnd(info->dtEnd().addDays(offset)); qreal y = 0; QRectF rect = this->sceneRect(); if (pos.y() < 0) { y = 0; } else if (pos.y() > rect.height()) { y = rect.height(); } else { y = pos.y(); } int yoffset = qFloor(y / (rect.height() / DDEMonthCalendar::LinesNumOfMonth)) % DDEMonthCalendar::LinesNumOfMonth; m_MonthScheduleView->updateDate(yoffset, info); } /** * @brief CMonthGraphicsview::getDragScheduleInfoBeginTime 获å�–移动开始时间 * @param moveDateTime * @return */ QDateTime CMonthGraphicsview::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) { // qCDebug(ClientLogger) << "CMonthGraphicsview::getDragScheduleInfoBeginTime - moveDateTime:" << moveDateTime; //获å�–移动开始时间 QDateTime _beginTime = moveDateTime.daysTo(m_InfoEndTime) < 0 ? QDateTime(m_InfoEndTime.date(), m_InfoBeginTime.time()) : QDateTime(moveDateTime.date(), m_InfoBeginTime.time()); //如果开始时间晚与结æ�Ÿæ—¶é—´åˆ™å‡�少一天 _beginTime = _beginTime > m_InfoEndTime ? _beginTime.addDays(-1) : _beginTime; return _beginTime; } /** * @brief CMonthGraphicsview::getDragScheduleInfoEndTime 获å�–结æ�Ÿæ—¶é—´ * @param moveDateTime * @return */ QDateTime CMonthGraphicsview::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) { // qCDebug(ClientLogger) << "CMonthGraphicsview::getDragScheduleInfoEndTime - moveDateTime:" << moveDateTime; //获å�–结æ�Ÿæ—¶é—´ QDateTime _endTime = m_InfoBeginTime.daysTo(moveDateTime) < 0 ? QDateTime(m_InfoBeginTime.date(), m_InfoEndTime.time()) : QDateTime(moveDateTime.date(), m_InfoEndTime.time()); //如果结æ�Ÿæ—¶é—´å°�于开始时间则添加一天 _endTime = _endTime < m_InfoBeginTime ? _endTime.addDays(1) : _endTime; return _endTime; } void CMonthGraphicsview::slotCreate(const QDateTime &date) { qCDebug(ClientLogger) << "Creating new schedule" << "date:" << date; CScheduleDlg dlg(1, this); QDateTime tDatatime; tDatatime.setDate(date.date()); if (date.date() == QDate::currentDate()) { tDatatime.setTime(QTime::currentTime()); } else { tDatatime.setTime(QTime(8, 0)); } dlg.setDate(tDatatime); dlg.setAllDay(true); if (dlg.exec() == DDialog::Accepted) { qCDebug(ClientLogger) << "New schedule created successfully"; emit signalsUpdateSchedule(); emit signalsScheduleUpdate(0); emit sigStateChange(true); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/view/monthgraphiview.h000066400000000000000000000072371523260663500277400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHGRAPHIVIEW_H #define MONTHGRAPHIVIEW_H #include "dschedule.h" #include "huangliData/lunardatastruct.h" #include "huangliData/dbusdatastruct.h" #include "draginfographicsview.h" #include "view/graphicsItem/cmonthdayitem.h" #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CMonthScheduleView; class CMonthGraphicsview : public DragInfoGraphicsView { Q_OBJECT public: explicit CMonthGraphicsview(QWidget *parent = nullptr); ~CMonthGraphicsview() override; void setTheMe(int type = 0) override; public: void setDate(const QVector &showDate); //设置ç�­ä¼‘ä¿¡æ�¯ void setFestival(const QMap &festivalInfo); //设置农历信æ�¯ void setLunarInfo(const QMap &lunarCache); //设置是å�¦æ˜¾ç¤ºå†œåŽ†ä¿¡æ�¯ void setLunarVisible(bool visible); //设置日程信æ�¯ void setScheduleInfo(const QMap &info); //设置æ�œç´¢é€‰ä¸­æ—¥ç¨‹ void setSelectSearchSchedule(const DSchedule::Ptr &scheduleInfo) override; //设置æ�œç´¢æ—¥ç¨‹ä¿¡æ�¯ void setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo); private: void updateSize(); void updateLunar(); //更新日程数æ�®æ˜¾ç¤º void updateInfo() override; QPointF getItemPos(const QPoint &p, const QRectF &itemRect); protected: void mouseDoubleClickEvent(QMouseEvent *event) override; void resizeEvent(QResizeEvent *event) override; void changeEvent(QEvent *event) override; void wheelEvent(QWheelEvent *) override; //更新背景上显示的item void updateBackgroundShowItem() override; protected: void setSceneCurrentItemFocus(const QDate &focusDate) override; private: void setDragPixmap(QDrag *drag, DragInfoItem *item) override; bool MeetCreationConditions(const QDateTime &date) override; //判断时间是å�¦ç›¸ç­‰ bool IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) override; //æ ¹æ�®é¼ æ ‡ç§»åŠ¨çš„è·�离判断是å�¦åˆ›å»ºæ—¥ç¨‹ bool JudgeIsCreate(const QPointF &pos) override; void RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) override; void MoveInfoProcess(DSchedule::Ptr &info, const QPointF &pos) override; QDateTime getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) override; QDateTime getDragScheduleInfoEndTime(const QDateTime &moveDateTime) override; PosInItem getPosInItem(const QPoint &p, const QRectF &itemRect)override; QDateTime getPosDate(const QPoint &p)override; void upDateInfoShow(const DragStatus &status = NONE, const DSchedule::Ptr &info = DSchedule::Ptr()) override; /** * @brief slideEvent 触摸滑动事件处ç�† * @param startPoint 触摸开始å��æ ‡ * @param stopPort 触摸结æ�Ÿå��æ ‡ */ void slideEvent(QPointF &startPoint, QPointF &stopPort) override; signals: void signalFontChange(); void signalsViewSelectDate(QDate date); void signalsScheduleUpdate(const int id = 0); public slots: void slotCreate(const QDateTime &date) override; private: QVector m_DayItem; QMap m_lunarCache; QMap m_festivallist; int m_currentMonth; CMonthScheduleView *m_MonthScheduleView = nullptr; QMap m_schedulelistdata; }; #endif // MONTHGRAPHIVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/000077500000000000000000000000001523260663500246545ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/calendarmainwindow.cpp000066400000000000000000001331431523260663500312330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarmainwindow.h" #include "widget/yearWidget/yearwindow.h" #include "widget/monthWidget/monthwindow.h" #include "dbuscalendar_adaptor.h" #include "widget/weekWidget/weekwindow.h" #include "widget/dayWidget/daywindow.h" #include "sidebarWidget/sidebarview.h" #include "colorWidget/colorpickerWidget.h" #include "scheduledatamanage.h" #include "myscheduleview.h" #include "configsettings.h" #include "shortcut.h" #include "schedulesearchview.h" #include "cdynamicicon.h" #include "constants.h" #include "scheduledlg.h" #include "ctitlewidget.h" #include "tabletconfig.h" #include "calendarglobalenv.h" #include "settingWidget/userloginwidget.h" #include "settingWidget/settingwidgets.h" #include "scheduletypeeditdlg.h" #include "accountmanager.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE DWIDGET_USE_NAMESPACE static const int CalendarMWidth = 646; static const int CalendarMHeight = 634; const int CalendarSwitchWidth = 647; //当宽度å°�于这个尺寸时,标题æ �需è¦�切æ�¢æ˜¾ç¤ºé€»è¾‘ const int CalendarViewSwitchWidth = 804; //当宽度å°�于这个尺寸时,视图部分需è¦�切æ�¢æ˜¾ç¤ºé€»è¾‘ const int Calendar_Default_Width = 860; //默认宽度 const int Calendar_Default_Height = 634; //默认高度 //é�™æ€�的翻译ä¸�会真的翻译,但是会更新ts文件 //åƒ�static QString a = QObject::tr("hello"), a实际等于hello,但是ts会有hello这个è¯�æ�¡ //调用DSetingDialog时会用到上述场景 Calendarmainwindow::Calendarmainwindow(int index, QWidget *w) : DMainWindow(w) , m_defaultIndex(index) { qCDebug(ClientLogger) << "Calendarmainwindow::Calendarmainwindow, index:" << index; setContentsMargins(QMargins(0, 0, 0, 0)); setMinimumSize(CalendarMWidth, CalendarMHeight); setWindowTitle(tr("Calendar")); new CalendarAdaptor(this); resize(CalendarMWidth, CalendarMHeight); //接收点击焦点 setFocusPolicy(Qt::ClickFocus); QShortcut *shortcut = new QShortcut(this); shortcut->setKey(QKeySequence(QLatin1String("Ctrl+F"))); connect(shortcut, SIGNAL(activated()), this, SLOT(slotSearchEdit())); QShortcut *viewshortcut = new QShortcut(this); viewshortcut->setKey(QKeySequence(QLatin1String("Ctrl+Shift+/"))); connect(viewshortcut, SIGNAL(activated()), this, SLOT(slotViewShortcut())); setTitlebarShadowEnabled(true); //若分辨率改å�˜åˆ™é‡�新设置最大尺寸 const auto screens = QGuiApplication::screens(); for (QScreen *screen : screens) { connect(screen, &QScreen::geometryChanged, this, &Calendarmainwindow::slotSetMaxSize); } //兼容以å‰�çš„é…�置信æ�¯ if (CConfigSettings::getInstance()->contains("base.geometry")) { qCDebug(ClientLogger) << "Restoring window geometry from legacy config"; QByteArray arrayByte = CConfigSettings::getInstance()->value("base.geometry").toByteArray(); bool isOk = false; int state = CConfigSettings::getInstance()->value("base.state").toInt(&isOk); Qt::WindowStates winStates = static_cast(state); if (winStates.testFlag(Qt::WindowMaximized)) { qCDebug(ClientLogger) << "Window was maximized"; showMaximized(); } else { qCDebug(ClientLogger) << "Restoring window geometry"; restoreGeometry(arrayByte); Dtk::Widget::moveToCenter(this); } //移除旧的é…�置信æ�¯ CConfigSettings::getInstance()->remove("base.geometry"); CConfigSettings::getInstance()->remove("base.state"); } else if (CConfigSettings::getInstance()->contains("base.windowWidth")) { qCDebug(ClientLogger) << "Restoring window size from config"; //获å�–窗å�£çš„宽度和高度 int width = CConfigSettings::getInstance()->value("base.windowWidth").toInt(); int height = CConfigSettings::getInstance()->value("base.windowHeight").toInt(); QRect rect(0, 0, width, height); this->setGeometry(rect); } else { qCDebug(ClientLogger) << "Using default window size"; //如果没有相关é…�置则设置为默认尺寸 QRect rect(0, 0, Calendar_Default_Width, Calendar_Default_Height); this->setGeometry(rect); } //在å±�幕中央显示 Dtk::Widget::moveToCenter(this); //注册光标ä½�ç½® CalendarGlobalEnv::getGlobalEnv()->registerKey(DDECalendar::CursorPointKey, QPoint()); //ä¿�存主窗å�£æŒ‡é’ˆ CalendarGlobalEnv::getGlobalEnv()->registerKey("MainWindow", QVariant::fromValue(static_cast(this))); // Initialize UI immediately to avoid showing blank window initUI(); initConnection(); initData(); m_hasInit = true; resizeView(); slotTheme(DGuiApplicationHelper::instance()->themeType()); // Load default view data immediately to avoid blank display startDeferredViewDataInit(); // Defer timer start and dynamic icon generation QTimer::singleShot(100, this, [this]() { if (m_currentDateUpdateTimer) { m_currentDateUpdateTimer->start(1500); } // Defer dynamic icon generation to avoid blocking startup CDynamicIcon::getInstance()->setDate(QDate::currentDate()); CDynamicIcon::getInstance()->setIcon(); }); } void Calendarmainwindow::initLater() { // This method is deprecated; initialization logic has been moved to the constructor // Kept for backward compatibility in case of external calls } Calendarmainwindow::~Calendarmainwindow() { qCDebug(ClientLogger) << "Calendarmainwindow::~Calendarmainwindow"; CDynamicIcon::releaseInstance(); } void Calendarmainwindow::slotViewShortcut() { qCDebug(ClientLogger) << "Calendarmainwindow::slotViewShortcut"; QRect rect = window()->geometry(); QPoint pos(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); Shortcut sc; QStringList shortcutString; QString param1 = "-j=" + sc.toStr(); QString param2 = "-p=" + QString::number(pos.x()) + "," + QString::number(pos.y()); shortcutString << param1 << param2; QProcess *shortcutViewProc = new QProcess(this); shortcutViewProc->startDetached("deepin-shortcut-viewer", shortcutString); connect(shortcutViewProc, SIGNAL(finished(int)), shortcutViewProc, SLOT(deleteLater())); } /** * @brief Calendarmainwindow::slotCurrentDateUpdate 更新当å‰�æ—¶é—´ */ void Calendarmainwindow::slotCurrentDateUpdate() { // qCDebug(ClientLogger) << "Calendarmainwindow::slotCurrentDateUpdate"; //获å�–当å‰�æ—¶é—´ const QDateTime _currentDate = QDateTime::currentDateTime(); //å�ªå¯¹æ—¥è§†å›¾æ›´æ–°å½“å‰�时间(用于时间线绘制),仅当日视图å�¯è§�æ—¶ if (m_DayWindow && m_stackWidget->currentIndex() == DDECalendar::CalendarDayWindow) m_DayWindow->setCurrentDateTime(_currentDate); //如果当å‰�日期与动æ€�图标日期ä¸�一样则é‡�新生æˆ�动æ€�图标 if (_currentDate.date() != CDynamicIcon::getInstance()->getDate()) { qCDebug(ClientLogger) << "Updating dynamic icon date" << "new date:" << QDate::currentDate(); CDynamicIcon::getInstance()->setDate(QDate::currentDate()); CDynamicIcon::getInstance()->setIcon(); //更新当å‰�å�¯è§�视图数æ�®æ˜¾ç¤º CScheduleBaseWidget *currentWidget = qobject_cast(m_stackWidget->currentWidget()); if (currentWidget) currentWidget->updateData(); //设置年视图年数æ�®æ—¶é—´æ˜¾ç¤º if (m_yearwindow) m_yearwindow->setYearData(); //更新月视图当å‰�周横线绘制 if (m_monthWindow) m_monthWindow->setCurrentDateTime(_currentDate); //日期å�˜åŒ–时也è¦�更新日视图时间 if (m_DayWindow) m_DayWindow->setCurrentDateTime(_currentDate); } } /** * @brief Calendarmainwindow::slotSetSearchFocus 设置æ�œç´¢æ¡†ç„¦ç‚¹ */ void Calendarmainwindow::slotSetSearchFocus() { qCDebug(ClientLogger) << "Calendarmainwindow::slotSetSearchFocus"; //设置输入框获å�–焦点 slotSearchEdit(); } /** * @brief Calendarmainwindow::viewWindow 切æ�¢è§†å›¾ * @param type 视图索引 * @param showAnimation 是å�¦æ˜¾ç¤ºåŠ¨ç”» */ void Calendarmainwindow::viewWindow(int type, const bool showAnimation) { qCDebug(ClientLogger) << "Switching view window" << "type:" << type << "show animation:" << showAnimation; if (type < 0 || type >= m_stackWidget->count()) { qCWarning(ClientLogger) << "Invalid view type:" << type; return; } // Ensure the target view is created createViewByIndex(type); if (showAnimation) { m_stackWidget->setCurrent(type); } else { m_stackWidget->setCurrentIndex(type); } if (m_buttonBox->checkedId() != type) { //设置选中 qCDebug(ClientLogger) << "Setting button box checked to:" << type; m_buttonBox->button(type)->setChecked(true); } switch (type) { case DDECalendar::CalendarYearWindow: { qCDebug(ClientLogger) << "Updating year window display"; ensureYearWindow()->updateData(); } break; case DDECalendar::CalendarMonthWindow: { qCDebug(ClientLogger) << "Switching to month window"; ensureMonthWindow()->updateData(); } break; case DDECalendar::CalendarWeekWindow: { qCDebug(ClientLogger) << "Switching to week window"; ensureWeekWindow()->updateData(); } break; case DDECalendar::CalendarDayWindow: { qCDebug(ClientLogger) << "Switching to day window"; ensureDayWindow()->setTime(); ensureDayWindow()->updateData(); m_searchflag = true; } break; } m_priindex = type == 0 ? m_priindex : type; //为了与è€�版本é…�置兼容 CConfigSettings::getInstance()->setOption("base.view", type + 1); } void Calendarmainwindow::updateHeight() { // qCDebug(ClientLogger) << "Calendarmainwindow::updateHeight"; int index = m_stackWidget->currentIndex(); if (index < 0 || index > m_stackWidget->count() - 1) { return; } switch (index) { case DDECalendar::CalendarYearWindow: { } break; case DDECalendar::CalendarMonthWindow: { } break; case DDECalendar::CalendarWeekWindow: { if (m_weekWindow) m_weekWindow->updateHeight(); } break; case DDECalendar::CalendarDayWindow: { if (m_DayWindow) m_DayWindow->updateHeight(); } break; } } void Calendarmainwindow::setSearchWidth(int w) { // qCDebug(ClientLogger) << "Calendarmainwindow::setSearchWidth, width:" << w; m_contentBackground->setFixedWidth(w); } void Calendarmainwindow::slotTheme(int type) { qCDebug(ClientLogger) << "Setting application theme" << "type:" << type; if (!m_contentBackground || !m_transparentFrame) { return; } if (type == 0) { type = DGuiApplicationHelper::instance()->themeType(); } if (type == 1) { qCDebug(ClientLogger) << "Applying light theme"; DPalette anipa = m_contentBackground->palette(); anipa.setColor(DPalette::Window, "#F8F8F8"); m_contentBackground->setPalette(anipa); m_contentBackground->setBackgroundRole(DPalette::Window); DPalette tframepa = m_transparentFrame->palette(); QColor tColor = "#FFFFFF"; tColor.setAlphaF(0.3); tframepa.setColor(DPalette::Window, tColor); m_transparentFrame->setPalette(tframepa); m_transparentFrame->setBackgroundRole(DPalette::Window); } else { qCDebug(ClientLogger) << "Applying dark theme"; DPalette anipa = m_contentBackground->palette(); anipa.setColor(DPalette::Window, "#252525"); m_contentBackground->setPalette(anipa); m_contentBackground->setBackgroundRole(DPalette::Window); DPalette tframepa = m_transparentFrame->palette(); QColor tColor = "#000000"; tColor.setAlphaF(0.3); tframepa.setColor(DPalette::Window, tColor); m_transparentFrame->setPalette(tframepa); m_transparentFrame->setBackgroundRole(DPalette::Window); } CScheduleDataManage::getScheduleDataManage()->setTheMe(type); if (m_yearwindow) m_yearwindow->setTheMe(type); if (m_monthWindow) m_monthWindow->setTheMe(type); if (m_weekWindow) m_weekWindow->setTheMe(type); if (m_DayWindow) m_DayWindow->setTheMe(type); if (m_scheduleSearchView) m_scheduleSearchView->setTheMe(type); } void Calendarmainwindow::slotOpenSchedule(QString job) { if (job.isEmpty()) { qCWarning(ClientLogger) << "Attempted to open empty schedule"; return; } qCDebug(ClientLogger) << "Opening schedule" << "job:" << job; DSchedule::Ptr out; DSchedule::fromJsonString(out, job); //设置被选中 m_buttonBox->button(DDECalendar::CalendarDayWindow)->setChecked(true); //设置获å�–焦点 m_buttonBox->button(DDECalendar::CalendarDayWindow)->setFocus(); //切æ�¢åˆ°æ—¥è§†å›¾ m_stackWidget->setCurrentIndex(DDECalendar::CalendarDayWindow); // Ensure day window exists before using it ensureDayWindow(); //设置选择时间 m_DayWindow->setSelectDate(out->dtStart().date()); //更新界é�¢æ˜¾ç¤º m_DayWindow->updateData(); //设置é�žå…¨å¤©æ—¶é—´å®šä½�ä½�ç½® m_DayWindow->setTime(out->dtStart().time()); //弹出编辑对è¯�框 if (m_dlg == Q_NULLPTR) { qCDebug(ClientLogger) << "Creating new CMyScheduleView dialog"; m_dlg = new CMyScheduleView(out, this); } else { qCDebug(ClientLogger) << "Updating existing CMyScheduleView dialog"; m_dlg->setSchedules(out); m_dlg->updateFormat(); } if (m_dlg->isHidden()) { qCDebug(ClientLogger) << "Showing schedule view dialog"; m_dlg->exec(); } slotWUpdateSchedule(); } void Calendarmainwindow::initUI() { qCDebug(ClientLogger) << "Calendarmainwindow::initUI"; //设置主窗å�£è¾…助技术显示å��ç§°å’Œæ��è¿° this->setObjectName("MainWindow"); this->setAccessibleName("MainWindow"); this->setAccessibleDescription("This is the main window"); m_currentDateUpdateTimer = new QTimer(this); // Timer is started later; deferred startup in constructor auto titleBar = this->titlebar(); // Dynamic icon generation is deferred to avoid blocking startup // CDynamicIcon::getInstance()->setTitlebar(titleBar); // CDynamicIcon::getInstance()->setIcon(); // Use static icon; defer dynamic icon generation titleBar->setIcon(QIcon::fromTheme("dde-calendar")); m_titleWidget = new CTitleWidget(this); m_titleWidget->setFocusPolicy(Qt::TabFocus); titleBar->setCustomWidget(m_titleWidget); setTabOrder(titleBar, m_titleWidget); //设置状æ€�æ �焦点代ç�†ä¸ºæ ‡é¢˜çª—å�£ titleBar->setFocusProxy(m_titleWidget); titleBar->setIcon(QIcon::fromTheme("dde-calendar")); titleBar->setQuitMenuVisible(true);//先设置å�Žï¼Œæ‰�å�¯ä»¥èŽ·å�–menu内容。因为setQuitMenuVisible接å�£ä¸­è¿›è¡Œäº†action的添加æ“�作 QMenu *menuTitleBar = titleBar->menu(); QAction *pSetting = new QAction(tr("Manage"), menuTitleBar); //menuTitleBar->addAction(pSetting); menuTitleBar->insertSeparator(menuTitleBar->actions()[0]); menuTitleBar->insertAction(menuTitleBar->actions()[0], pSetting); connect(pSetting, &QAction::triggered, this, &Calendarmainwindow::slotOpenSettingDialog); //添加éš�ç§�政策 QAction *pPrivacy = new QAction(tr("Privacy Policy"), menuTitleBar); menuTitleBar->insertSeparator(menuTitleBar->actions()[1]); menuTitleBar->insertAction(menuTitleBar->actions()[1], pPrivacy); connect(pPrivacy, &QAction::triggered, this, &Calendarmainwindow::slotShowPrivacy); //接收设置按键焦点 connect(m_titleWidget, &CTitleWidget::signalSetButtonFocus, [ = ] { m_setButtonFocus = true; }); connect(m_titleWidget, &CTitleWidget::signalSearchFocusSwitch, this, &Calendarmainwindow::slotSearchFocusSwitch); m_searchEdit = m_titleWidget->searchEdit(); m_buttonBox = m_titleWidget->buttonBox(); m_newScheduleBtn = m_titleWidget->newScheduleBtn(); QHBoxLayout *tMainLayout = new QHBoxLayout; tMainLayout->setContentsMargins(10, 10, 10, 10); tMainLayout->setSpacing(10); m_sidebarView = new SidebarView(this); tMainLayout->addWidget(m_sidebarView, 1); m_stackWidget = new AnimationStackedWidget(); m_stackWidget->setObjectName("StackedWidget"); m_stackWidget->setAccessibleName("StackedWidget"); m_stackWidget->setAccessibleDescription("Container for year window, month window, week window and day window"); m_stackWidget->setContentsMargins(0, 0, 0, 0); m_stackWidget->setDuration(250); createview(); tMainLayout->addWidget(m_stackWidget, 4); m_contentBackground = new DFrame; m_contentBackground->setAccessibleName("ScheduleSearchWidgetBackgroundFrame"); m_contentBackground->setObjectName("ScheduleSearchWidgetBackgroundFrame"); m_contentBackground->setContentsMargins(0, 0, 0, 0); DPalette anipa = m_contentBackground->palette(); anipa.setColor(DPalette::Window, "#F8F8F8"); m_contentBackground->setAutoFillBackground(true); m_contentBackground->setPalette(anipa); m_scheduleSearchView = new CScheduleSearchView(this); m_scheduleSearchView->setObjectName("ScheduleSearchWidget"); m_scheduleSearchView->setAccessibleName("ScheduleSearchWidget"); m_scheduleSearchView->setAccessibleDescription("Window showing search results"); QVBoxLayout *ssLayout = new QVBoxLayout; ssLayout->setContentsMargins(0, 0, 0, 0); ssLayout->setSpacing(0); ssLayout->addWidget(m_scheduleSearchView, 1); m_contentBackground->setLayout(ssLayout); m_contentBackground->setVisible(false); tMainLayout->addWidget(m_contentBackground); DWidget *maincentralWidget = new DWidget(this); maincentralWidget->setAccessibleName("mainCentralWidget"); maincentralWidget->setLayout(tMainLayout); setCentralWidget(maincentralWidget); m_transparentFrame = new DFrame(this); m_transparentFrame->setAutoFillBackground(true); m_transparentFrame->hide(); m_animation = new QPropertyAnimation(this); //deleteå¿«æ�·é”® QShortcut *dShortcut = new QShortcut(this); dShortcut->setKey(QKeySequence(QLatin1String("Delete"))); connect(dShortcut, &QShortcut::activated, this, &Calendarmainwindow::slotDeleteitem); } void Calendarmainwindow::initConnection() { qCDebug(ClientLogger) << "Calendarmainwindow::initConnection"; connect(m_stackWidget, &AnimationStackedWidget::signalIsFinished, this, &Calendarmainwindow::slotSetButtonBox); connect(m_buttonBox, &DButtonBox::buttonClicked, this, &Calendarmainwindow::slotstackWClicked); connect(m_searchEdit, &DSearchEdit::returnPressed, this, &Calendarmainwindow::slotSreturnPressed); connect(m_searchEdit, &DSearchEdit::textChanged, this, &Calendarmainwindow::slotStextChanged); connect(m_searchEdit, &DSearchEdit::focusChanged, this, &Calendarmainwindow::slotStextfocusChanged); //监å�¬å½“å‰�应用主题切æ�¢äº‹ä»¶ connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &Calendarmainwindow::slotTheme); //编辑æ�œç´¢æ—¥ç¨‹åˆ·æ–°ç•Œé�¢ connect(m_scheduleSearchView, &CScheduleSearchView::signalSelectSchedule, this, &Calendarmainwindow::slotSearchSelectSchedule); connect(m_scheduleSearchView, &CScheduleSearchView::signalScheduleHide, this, &Calendarmainwindow::setScheduleHide); connect(m_sidebarView, &SidebarView::signalScheduleHide, this, &Calendarmainwindow::setScheduleHide); connect(m_scheduleSearchView, &CScheduleSearchView::signalSelectCurrentItem, this, &Calendarmainwindow::slotSetSearchFocus); //更新当å‰�æ—¶é—´ connect(m_currentDateUpdateTimer, &QTimer::timeout, this, &Calendarmainwindow::slotCurrentDateUpdate); //切æ�¢è§†å›¾ connect(m_yearwindow, &CYearWindow::signalSwitchView, this, &Calendarmainwindow::slotSwitchView); connect(m_monthWindow, &CMonthWindow::signalSwitchView, this, &Calendarmainwindow::slotSwitchView); connect(m_weekWindow, &CWeekWindow::signalSwitchView, this, &Calendarmainwindow::slotSwitchView); //按钮关è�”新建日程 connect(m_newScheduleBtn, &DToolButton::clicked, this, &Calendarmainwindow::slotNewSchedule); connect(qApp, &QGuiApplication::applicationStateChanged, this, &Calendarmainwindow::slotapplicationStateChanged); connect(m_titleWidget, &CTitleWidget::signalSidebarStatusChange, this, &Calendarmainwindow::slotSidebarStatusChange); //signalAccountUpdate connect(gAccountManager, &AccountManager::signalSyncNum, this, &Calendarmainwindow::slotShowSyncToast); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &Calendarmainwindow::slotAccountUpdate); } void Calendarmainwindow::initData() { qCDebug(ClientLogger) << "Calendarmainwindow::initData"; //æ ¹æ�®é…�置设置侧边æ �状æ€� m_titleWidget->setSidebarStatus(gSetting->getUserSidebarStatus()); } /** * @brief Calendarmainwindow::createview 创建视图 */ void Calendarmainwindow::createview() { qCDebug(ClientLogger) << "Calendarmainwindow::createview"; // Startup optimization: Create only the default view; defer others // Reserve space for all view positions for (int i = 0; i < 4; ++i) { if (i == m_defaultIndex) { // Create default view immediately createViewByIndex(i); } else { // Add empty widget placeholders for other view positions m_stackWidget->addWidget(new QWidget()); } } //如果默认视图ä¸�在范围内则设置为月窗å�£æ˜¾ç¤º if (m_defaultIndex < 0 || m_defaultIndex >= m_stackWidget->count()) { m_defaultIndex = 1; qCWarning(ClientLogger) << "set default view index beyond,index:" << m_defaultIndex; } m_stackWidget->setCurrentIndex(m_defaultIndex); m_buttonBox->button(m_defaultIndex)->setChecked(true); // Defer creation of other views to avoid blocking startup QTimer::singleShot(200, this, [this]() { for (int i = 0; i < 4; ++i) { if (i != m_defaultIndex) { createViewByIndex(i); } } }); } /** * @brief Calendarmainwindow::createViewByIndex Create a single view by index * @param index View index */ void Calendarmainwindow::createViewByIndex(int index) { qCDebug(ClientLogger) << "Creating view at index:" << index; // Helper lambda to create and setup a view with common initialization logic auto setupView = [this, index](auto *&viewPtr, auto creator, const QString &objName = QString(), const QString &accName = QString()) { if (viewPtr) return; viewPtr = creator(); if (!objName.isEmpty()) viewPtr->setObjectName(objName); if (!accName.isEmpty()) viewPtr->setAccessibleName(accName); if (QWidget *oldWidget = m_stackWidget->widget(index)) { m_stackWidget->removeWidget(oldWidget); oldWidget->deleteLater(); // Safe deletion in Qt event loop } m_stackWidget->insertWidget(index, viewPtr); if (m_hasInit) { viewPtr->setTheMe(DGuiApplicationHelper::instance()->themeType()); } }; switch (index) { case DDECalendar::CalendarYearWindow: setupView(m_yearwindow, [this]() { return new CYearWindow(this); }, "yearwindow", "yearwindow"); break; case DDECalendar::CalendarMonthWindow: setupView(m_monthWindow, [this]() { return new CMonthWindow(this); }, "monthWindow", "monthWindow"); break; case DDECalendar::CalendarWeekWindow: setupView(m_weekWindow, [this]() { return new CWeekWindow(this); }); break; case DDECalendar::CalendarDayWindow: setupView(m_DayWindow, []() { return new CDayWindow; }); break; default: qCWarning(ClientLogger) << "Invalid view index:" << index; break; } } CYearWindow* Calendarmainwindow::ensureYearWindow() { if (!m_yearwindow) { createViewByIndex(DDECalendar::CalendarYearWindow); } return m_yearwindow; } CMonthWindow* Calendarmainwindow::ensureMonthWindow() { if (!m_monthWindow) { createViewByIndex(DDECalendar::CalendarMonthWindow); } return m_monthWindow; } CWeekWindow* Calendarmainwindow::ensureWeekWindow() { if (!m_weekWindow) { createViewByIndex(DDECalendar::CalendarWeekWindow); } return m_weekWindow; } CDayWindow* Calendarmainwindow::ensureDayWindow() { if (!m_DayWindow) { createViewByIndex(DDECalendar::CalendarDayWindow); } return m_DayWindow; } void Calendarmainwindow::startDeferredViewDataInit() { if (m_deferredViewDataInitDone) { return; } m_deferredViewDataInitDone = true; // Startup responsiveness optimization: Update only the current (default) view's data // Other views are created and loaded on-demand during switching auto updateCurrentView = [this] { const int idx = m_stackWidget ? m_stackWidget->currentIndex() : -1; switch (idx) { case DDECalendar::CalendarYearWindow: if (m_yearwindow) m_yearwindow->updateData(); break; case DDECalendar::CalendarMonthWindow: if (m_monthWindow) m_monthWindow->updateData(); break; case DDECalendar::CalendarWeekWindow: if (m_weekWindow) m_weekWindow->updateData(); break; case DDECalendar::CalendarDayWindow: if (m_DayWindow) { m_DayWindow->updateData(); // Day view requires time positioning after data is ready m_DayWindow->setTime(); } break; default: break; } }; // Update current view immediately updateCurrentView(); // No longer defer updates for other views since they are not created yet // Other views will be created and loaded on-demand during view switching } void Calendarmainwindow::resizeView() { if (!m_titleWidget) { return; } // qCDebug(ClientLogger) << "Calendarmainwindow::resizeView"; //å¸�户列表窗å�£ï¼ˆA),视图窗å�£(B),æ�œç´¢ç»“果窗å�£(C) //窗å�£ç”±å¤§å�˜å°�å…ˆéš�è—�A,在éš�è—�B //窗å�£ç”±å°�å�˜å¤§å…ˆæ˜¾ç¤ºB,在显示A //ä¸�能出现å�ªæ˜¾ç¤ºAå’ŒC的情况 //æ ¹æ�®ç•Œé�¢å¤§å°�改å�˜è¶‹åŠ¿è®¾ç½®ä¾§è¾¹æ �å�¯æ˜¾ç¤ºçжæ€� //如果å¸�户列表窗å�£ä¸ºæ˜¾ç¤ºçжæ€� if (m_titleWidget->getSidevarStatus()) { //如果显示æ�œç´¢çª—å�£ï¼Œè‹¥éœ€è¦�显示å¸�户列表则界é�¢çš„æœ€å°�尺寸需è¦�984,å�¦åˆ™ä¸º826 int minWidth = m_opensearchflag ? 984 : 826 ; if (width() < minWidth) { // qCDebug(ClientLogger) << "Window too narrow, hiding sidebar"; m_titleWidget->setSidebarCanDisplay(false); m_sidebarView->setVisible(false); } else if (width() > minWidth) { // qCDebug(ClientLogger) << "Window wide enough, showing sidebar"; m_titleWidget->setSidebarCanDisplay(true); m_sidebarView->setVisible(true); } } m_transparentFrame->resize(width(), height() - 50); if (width() < CalendarSwitchWidth) { // qCDebug(ClientLogger) << "Switching to mini title state"; m_titleWidget->setShowState(CTitleWidget::Title_State_Mini); } else { // qCDebug(ClientLogger) << "Switching to normal title state"; m_titleWidget->setShowState(CTitleWidget::Title_State_Normal); } int sidWidth = 0; if (!m_sidebarView->isHidden()) { sidWidth = m_sidebarView->width(); } if (width() < CalendarViewSwitchWidth + sidWidth) { // qCDebug(ClientLogger) << "Switching to narrow view layout"; m_isNormalStateShow = false; m_stackWidget->setVisible(!m_contentBackground->isVisible()); // 如果是éš�è—�的状æ€�,ä¸�需è¦�多å‡�去sidewidth sidWidth = sidWidth == 0 ? 0 : sidWidth + 10; m_scheduleSearchViewMaxWidth = this->width() - sidWidth; } else { // qCDebug(ClientLogger) << "Switching to normal view layout"; m_scheduleSearchViewMaxWidth = qRound(0.2325 * (width()) + 0.5); m_isNormalStateShow = true; m_stackWidget->setVisible(true); m_contentBackground->setVisible(m_opensearchflag); } // é¢�外å‡�去20 是因为ui走查控件之间的space=10,两个间隔 if (m_scheduleSearchView) { m_scheduleSearchView->setMaxWidth(m_scheduleSearchViewMaxWidth - 20); } setSearchWidth(m_scheduleSearchViewMaxWidth - 20); setScheduleHide(); } /** * @brief Calendarmainwindow::setScheduleHide éš�è—�æ��示框 */ void Calendarmainwindow::setScheduleHide() { // qCDebug(ClientLogger) << "Calendarmainwindow::setScheduleHide"; if (m_yearwindow) m_yearwindow->slotSetScheduleHide(); if (m_monthWindow) m_monthWindow->slotScheduleHide(); if (m_weekWindow) m_weekWindow->slotScheduleHide(); if (m_DayWindow) m_DayWindow->slotScheduleHide(); } void Calendarmainwindow::resizeEvent(QResizeEvent *event) { DMainWindow::resizeEvent(event); resizeView(); //ä¿�存窗å�£å¤§å°� CConfigSettings::getInstance()->setOption("base.windowWidth", event->size().width()); CConfigSettings::getInstance()->setOption("base.windowHeight", event->size().height()); } /** * @brief Calendarmainwindow::slotstackWClicked 点击按钮切æ�¢è§†å›¾ * @param bt */ void Calendarmainwindow::slotstackWClicked(QAbstractButton *bt) { qCDebug(ClientLogger) << "Calendarmainwindow::slotstackWClicked"; setScheduleHide(); int index = m_buttonBox->id(bt); viewWindow(index, true); } void Calendarmainwindow::slotWUpdateSchedule() { qCDebug(ClientLogger) << "Calendarmainwindow::slotWUpdateSchedule"; if (m_opensearchflag && !m_searchEdit->text().isEmpty() && m_scheduleSearchView) { m_scheduleSearchView->slotsetSearch(m_searchEdit->text()); } updateHeight(); return; } void Calendarmainwindow::slotSreturnPressed() { qCDebug(ClientLogger) << "Calendarmainwindow::slotSreturnPressed"; if (!m_opensearchflag && !m_searchEdit->text().isEmpty()) { qCDebug(ClientLogger) << "Entering search mode"; m_opensearchflag = true; } //如果为æ�œç´¢çжæ€� m_contentBackground->setVisible(m_opensearchflag); if (m_scheduleSearchView) { m_scheduleSearchView->slotsetSearch(m_searchEdit->text()); } updateHeight(); resizeView(); } void Calendarmainwindow::slotStextChanged() { qCDebug(ClientLogger) << "Calendarmainwindow::slotStextChanged"; if (!m_searchEdit->text().isEmpty()) { qCDebug(ClientLogger) << "Search text not empty, enabling search flags"; if (m_yearwindow) m_yearwindow->setSearchWFlag(true); if (m_weekWindow) m_weekWindow->setSearchWFlag(true); if (m_monthWindow) m_monthWindow->setSearchWFlag(true); if (m_DayWindow) m_DayWindow->setSearchWFlag(true); } else { qCDebug(ClientLogger) << "Search text empty, clearing search"; if (m_scheduleSearchView) m_scheduleSearchView->clearSearch(); if (m_yearwindow) m_yearwindow->setSearchWFlag(false); if (m_monthWindow) m_monthWindow->setSearchWFlag(false); if (m_weekWindow) m_weekWindow->setSearchWFlag(false); if (m_DayWindow) m_DayWindow->setSearchWFlag(false); m_contentBackground->setVisible(false); m_stackWidget->setVisible(true); m_opensearchflag = false; resizeView(); } updateHeight(); } /** * @brief Calendarmainwindow::slotStextfocusChanged æ�œç´¢æ¡†æœ‰ç„¦ç‚¹æ—¶éš�è—�æ��示框并设置æ�œç´¢æ—¥ç¨‹ç„¦ç‚¹ * @param onFocus */ void Calendarmainwindow::slotStextfocusChanged(bool onFocus) { qCDebug(ClientLogger) << "Calendarmainwindow::slotStextfocusChanged, onFocus:" << onFocus; if (onFocus) { setScheduleHide(); } } void Calendarmainwindow::slotSearchEdit() { qCDebug(ClientLogger) << "Calendarmainwindow::slotSearchEdit"; m_searchEdit->lineEdit()->setFocus(); } /** * @brief Calendarmainwindow::slotSearchSelectSchedule å�•击æ�œç´¢æ—¥ç¨‹åŠ¨ç”»è®¾ç½® * @param scheduleInfo */ void Calendarmainwindow::slotSearchSelectSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "Calendarmainwindow::slotSearchSelectSchedule"; //如果å°�尺寸显示模å¼�,在显示æ�œç´¢çª—å�£çš„æ—¶å€™ï¼Œå·¦ä¾§è§†å›¾ä¼šè¢«éš�è—� //如果点击一个æ�œç´¢ç»“果则éš�è—�æ�œç´¢çª—å�£ï¼Œå±•示左侧视图 if (!m_isNormalStateShow) { qCDebug(ClientLogger) << "In narrow mode, handling search selection"; QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey("SearchItemEvent", variant); QString searchItemEvent = variant.toString(); //如果为鼠标点击æ“�作 if (searchItemEvent == "MousePress") { qCDebug(ClientLogger) << "Search item clicked, showing stack widget and hiding search results"; m_stackWidget->setVisible(true); m_contentBackground->setVisible(false); } } //获å�–当å‰�视图编å�· CScheduleBaseWidget *_showWidget = dynamic_cast(m_stackWidget->currentWidget()); if (_showWidget) { qCDebug(ClientLogger) << "Updating view with selected schedule"; //如果日程开始时间年份与选择时间年份ä¸�一样则切æ�¢å¹´ä»½æ˜¾ç¤º bool changeYear = _showWidget->getSelectDate().year() != scheduleInfo->dtStart().date().year(); //设置选择时间 if (_showWidget->setSelectDate(scheduleInfo->dtStart().date(), changeYear)) { //更新显示数æ�® qCDebug(ClientLogger) << "Date changed, updating data and setting animation"; _showWidget->updateData(); //设置年份信æ�¯æ˜¾ç¤º _showWidget->setYearData(); //延迟150毫秒设置选中动画 QTimer::singleShot(150, this, [ = ] { _showWidget->setSelectSearchScheduleInfo(scheduleInfo); }); } //如果当å‰�界é�¢ä¸�为年试图则更新年视图数æ�® if (_showWidget != m_yearwindow && m_yearwindow) { qCDebug(ClientLogger) << "Current view is not year view, updating year window data"; m_yearwindow->updateData(); } } } /** * @brief Calendarmainwindow::slotViewtransparentFrame 添加视图阴影 * @param isShow */ void Calendarmainwindow::slotViewtransparentFrame(const bool isShow) { qCDebug(ClientLogger) << "Calendarmainwindow::slotViewtransparentFrame, isShow:" << isShow; if (!m_transparentFrame) { qCWarning(ClientLogger) << "Calendarmainwindow's not inited,be careful!" << isShow; return; } if (isShow) { m_transparentFrame->resize(width(), height() - 50); m_transparentFrame->move(0, 50); m_transparentFrame->show(); } else { m_transparentFrame->hide(); } } /** * @brief Calendarmainwindow::slotSetButtonBox å�¯ç”¨buttonbox */ void Calendarmainwindow::slotSetButtonBox() { qCDebug(ClientLogger) << "Calendarmainwindow::slotSetButtonBox"; //如果为键盘æ“�作则切æ�¢å�Žè®¾ç½®ç„¦ç‚¹ if (m_setButtonFocus) { qCDebug(ClientLogger) << "Setting focus on button box"; //获å�–焦点 m_buttonBox->button(m_buttonBox->checkedId())->setFocus(); } m_setButtonFocus = false; } /** * @brief Calendarmainwindow::slotSwitchView 切æ�¢è§†å›¾ * @param viewIndex 切æ�¢ç±»åž‹ */ void Calendarmainwindow::slotSwitchView(const int viewIndex) { qCDebug(ClientLogger) << "Calendarmainwindow::slotSwitchView, viewIndex:" << viewIndex; // 0:跳转上一个视图 1:月视图 2:周视图 3:日视图 switch (viewIndex) { case 0: { if (m_priindex == DDECalendar::CalendarYearWindow) m_priindex = DDECalendar::CalendarDayWindow; viewWindow(m_priindex); break; } case 1: { viewWindow(DDECalendar::CalendarMonthWindow); break; } case 2: { viewWindow(DDECalendar::CalendarWeekWindow); break; } case 3: { viewWindow(DDECalendar::CalendarDayWindow); break; } default: break; } } /** * @brief Calendarmainwindow::slotNewSchedule 全局新建日程 */ void Calendarmainwindow::slotNewSchedule() { qCDebug(ClientLogger) << "Calendarmainwindow::slotNewSchedule"; //设置日程开始时间 QDate selectDate = m_yearwindow ? m_yearwindow->getSelectDate() : QDate::currentDate(); QDateTime _beginTime(selectDate, QTime::currentTime()); //新建日程对è¯�框 CScheduleDlg _scheduleDig(1, this, false); //设置开始时间 _scheduleDig.setDate(_beginTime); _scheduleDig.exec(); } void Calendarmainwindow::slotDeleteitem() { qCDebug(ClientLogger) << "Deleting selected item"; if (m_scheduleSearchView && m_scheduleSearchView->getHasScheduleShow() && m_scheduleSearchView->getScheduleStatus()) { qCDebug(ClientLogger) << "Deleting selected schedule from search view"; //删除选中的schedule m_scheduleSearchView->deleteSchedule(); } else { //获å�–当å‰�çš„ qCDebug(ClientLogger) << "Deleting selected schedule from current view"; CScheduleBaseWidget *widget = qobject_cast(m_stackWidget->currentWidget()); if (widget) { widget->deleteselectSchedule(); } } } /** * @brief Calendarmainwindow::slotSetMaxSize æ ¹æ�®å±�幕分辨率调整窗å�£æœ€å¤§å°ºå¯¸ * @param size */ void Calendarmainwindow::slotSetMaxSize() { qCDebug(ClientLogger) << "Setting maximum window size based on screen resolution"; //获å�–å±�幕大å°� #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QSize deskSize = QGuiApplication::primaryScreen()->size(); #else QSize deskSize = QApplication::desktop()->size(); #endif //设置最大尺寸为å±�幕尺寸 setMaximumSize(deskSize); if (TabletConfig::isTablet()) { qCDebug(ClientLogger) << "Tablet mode detected, setting fixed size"; setFixedSize(deskSize); } } void Calendarmainwindow::slotSearchFocusSwitch() { qCDebug(ClientLogger) << "Calendarmainwindow::slotSearchFocusSwitch"; //设置æ�œç´¢æ—¥ç¨‹å±•示列表焦点 if (m_contentBackground->isVisible() && m_scheduleSearchView->getHasScheduleShow()) { qCDebug(ClientLogger) << "Setting focus on search view"; m_scheduleSearchView->setFocus(Qt::TabFocusReason); } } void Calendarmainwindow::slotSidebarStatusChange(bool status) { qCDebug(ClientLogger) << "Calendarmainwindow::slotSidebarStatusChange, status:" << status; //先显示å†�调整窗å�£å¤§å°� m_sidebarView->setVisible(status); if (status) { qCDebug(ClientLogger) << "Sidebar is visible, resizing window if necessary"; //如果显示æ�œç´¢çª—å�£ï¼Œè‹¥éœ€è¦�显示å¸�户列表则界é�¢çš„æœ€å°�尺寸需è¦�984,å�¦åˆ™ä¸º826 int minWidth = m_opensearchflag ? 984 : 826 ; if (width() < minWidth) { qCDebug(ClientLogger) << "Resizing window to accommodate sidebar"; resize(minWidth, height()); } } } void Calendarmainwindow::mouseMoveEvent(QMouseEvent *event) { //如果为平æ�¿æ¨¡å¼�则ä¸�å�¯ç§»åЍ if (TabletConfig::isTablet()) { Q_UNUSED(event); } else { DMainWindow::mouseMoveEvent(event); setScheduleHide(); } } void Calendarmainwindow::changeEvent(QEvent *event) { DMainWindow::changeEvent(event); if (event->type() == QEvent::ActivationChange) { setScheduleHide(); } } void Calendarmainwindow::mousePressEvent(QMouseEvent *event) { setScheduleHide(); if (event->button() & Qt::LeftButton) m_startPos = event->pos(); } bool Calendarmainwindow::event(QEvent *event) { //如果窗å�£ç§»åŠ¨ï¼Œéš�è—�日程悬浮框 if (event->type() == QEvent::Move) { setScheduleHide(); } //如果为活动窗å�£åˆ™æ˜¾ç¤ºè§†å›¾é˜´å½± if (event->type() == QEvent::WindowActivate) { slotViewtransparentFrame(false); } //如果ä¸�为活动窗å�£åˆ™éš�è—�视图阴影 if (event->type() == QEvent::WindowDeactivate) { slotViewtransparentFrame(true); } return DMainWindow::event(event); } void Calendarmainwindow::slotapplicationStateChanged(Qt::ApplicationState state) { qCDebug(ClientLogger) << "Calendarmainwindow::slotapplicationStateChanged, state:" << state; static QDateTime currentDateTime = QDateTime::currentDateTime(); //TODO:ç›®å‰�没有找到窗å�£æ˜¾ç¤ºä¸�是激活状æ€�的原因(会先激活然å�Žä¸ºé�žæ¿€æ´»çжæ€�)。 //当间隔时间少于10毫秒且状æ€�为é�žæ¿€æ´»æ—¶ï¼Œå°†çª—å�£è®¾ç½®æ˜¾ç¤ºåœ¨æœ€é¡¶ç«¯å¹¶è®¾ç½®æ¿€æ´»çжæ€� if (state == Qt::ApplicationInactive) { //获å�–当å‰�æ—¶é—´ QDateTime currentTime = QDateTime::currentDateTime(); //考虑到会修改系统时间的情况,时间差在0~30毫秒内æ‰�会设置 if (currentDateTime.msecsTo(currentTime) < 30 && currentDateTime.msecsTo(currentTime) >= 0) { qCDebug(ClientLogger) << "Re-activating window due to quick inactive state change"; activateWindow(); raise(); } //断开信å�·è¿žæŽ¥ qCDebug(ClientLogger) << "Disconnecting applicationStateChanged signal"; disconnect(qApp, &QGuiApplication::applicationStateChanged, this, &Calendarmainwindow::slotapplicationStateChanged); } } void Calendarmainwindow::slotOpenSettingDialog() { qCDebug(ClientLogger) << "Calendarmainwindow::slotOpenSettingDialog"; m_dsdSetting = new CSettingDialog(this); //内容定ä½�到顶端 m_dsdSetting->exec(); //使用完å�Žé‡Šæ”¾ delete m_dsdSetting; m_dsdSetting = nullptr; gCalendarManager->updateData(); } void Calendarmainwindow::slotShowPrivacy() { qCDebug(ClientLogger) << "Calendarmainwindow::slotShowPrivacy"; QString url = ""; QLocale locale; QLocale::Country country = locale.country(); bool isCommunity = isCommunityEdition(); if (country == QLocale::China) { if (isCommunity) { url = "https://www.deepin.org/zh/agreement/privacy/"; } else { url = "https://www.uniontech.com/agreement/privacy-cn"; } } else { if (isCommunity) { url = "https://www.deepin.org/en/agreement/privacy/"; } else { url = "https://www.uniontech.com/agreement/privacy-en"; } } qCDebug(ClientLogger) << "Opening privacy policy URL:" << url; QDesktopServices::openUrl(url); } void Calendarmainwindow::removeSyncToast() { qCDebug(ClientLogger) << "Calendarmainwindow::removeSyncToast"; QWidget *content = this->window()->findChild("_d_message_manager_content", Qt::FindDirectChildrenOnly); if (nullptr == content) return; for (DFloatingMessage *message : content->findChildren(QString(), Qt::FindDirectChildrenOnly)) { content->layout()->removeWidget(message); message->hide(); message->deleteLater(); } } void Calendarmainwindow::slotShowSyncToast(int syncNum) { qCDebug(ClientLogger) << "Showing sync toast" << "sync number:" << syncNum; //-1:正在刷新 0:正常 1:网络异常 2:æœ�务器异常 3:存储已ç»�满 static int preSyncNum = -2; if (preSyncNum != syncNum && syncNum == -1) { preSyncNum = -1; //å�Œæ­¥ä¸­ qCDebug(ClientLogger) << "Showing 'Syncing...' toast"; removeSyncToast(); DMessageManager::instance()->sendMessage(this->window(), QIcon::fromTheme(":/icons/deepin/builtin/icons/dde_calendar_spinner_32px.svg"), tr("Syncing...")); return; } // if (preSyncNum == -1 && syncNum != -1) { preSyncNum = -2; switch (syncNum) { case 0: { qCDebug(ClientLogger) << "Sync completed successfully"; //å�Œæ­¥æˆ�功 removeSyncToast(); DMessageManager::instance()->sendMessage(this->window(), QIcon::fromTheme(":/icons/deepin/builtin/icons/dde_calendar_success_200px.png"), tr("Sync successful")); break; } case 1: case 2: case 3: { qCWarning(ClientLogger) << "Sync failed with error code:" << syncNum; //å�Œæ­¥å¤±è´¥ removeSyncToast(); DMessageManager::instance()->sendMessage(this->window(), QIcon::fromTheme(":/icons/deepin/builtin/icons/dde_calendar_fail_200px.png"), tr("Sync failed, please try later")); break; } default: break; } } } void Calendarmainwindow::slotAccountUpdate() { qCDebug(ClientLogger) << "Updating account information"; AccountItem::Ptr uidAccount = gUosAccountItem; if (!uidAccount.isNull()) { connect(uidAccount.get(), &AccountItem::signalSyncStateChange, this, &Calendarmainwindow::slotShowSyncToast); } } void Calendarmainwindow::paintEvent(QPaintEvent *event) { DMainWindow::paintEvent(event); if (!m_firstPaintDone) { m_firstPaintDone = true; QTimer::singleShot(0, this, &Calendarmainwindow::startDeferredViewDataInit); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/calendarmainwindow.h000066400000000000000000000113721523260663500306770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARMAINWINDOW_H #define CALENDARMAINWINDOW_H #include "dschedule.h" #include "jobtypelistview.h" #include "settingdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CYearWindow; class CMonthWindow; class CWeekWindow; class CDayWindow; class SidebarView; class CScheduleSearchView; class AnimationStackedWidget; class CScheduleDataManage; class CTitleWidget; class CMyScheduleView; class Calendarmainwindow : public DMainWindow { Q_OBJECT public: explicit Calendarmainwindow(int index, QWidget *w = nullptr); ~Calendarmainwindow() override; void viewWindow(int type, const bool showAnimation = false); void updateHeight(); void setSearchWidth(int w); public slots: void slotTheme(int type); void slotOpenSchedule(QString job); void slotViewShortcut(); //更新当å‰�æ—¶é—´ void slotCurrentDateUpdate(); void slotSetSearchFocus(); private: void initUI(); void initConnection(); void initData(); // [[deprecated("Use constructor initialization instead")]] void initLater(); void startDeferredViewDataInit(); //创建视图 void createview(); //Create a single view by index void createViewByIndex(int index); //Ensure helpers - create view if not exists and return pointer CYearWindow* ensureYearWindow(); CMonthWindow* ensureMonthWindow(); CWeekWindow* ensureWeekWindow(); CDayWindow* ensureDayWindow(); //é‡�置界é�¢å¤§å°� void resizeView(); void removeSyncToast(); protected: void resizeEvent(QResizeEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void changeEvent(QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; bool event(QEvent *event) override; void paintEvent(QPaintEvent *event) override; private slots: //获å�–程åº�状æ€� void slotapplicationStateChanged(Qt::ApplicationState state); //éš�è—�æ��示框 void setScheduleHide(); //点击按钮切æ�¢è§†å›¾ void slotstackWClicked(QAbstractButton *bt); void slotWUpdateSchedule(); void slotSreturnPressed(); void slotStextChanged(); //æ�œç´¢æ¡†æœ‰ç„¦ç‚¹æ—¶éš�è—�æ��示框 void slotStextfocusChanged(bool onFocus); void slotSearchEdit(); //å�•击æ�œç´¢æ—¥ç¨‹åŠ¨ç”»è®¾ç½® void slotSearchSelectSchedule(const DSchedule::Ptr &scheduleInfo); //添加视图阴影 void slotViewtransparentFrame(const bool isShow); //å�¯ç”¨buttonbox void slotSetButtonBox(); //切æ�¢è§†å›¾ void slotSwitchView(const int viewIndex); //新建日程 void slotNewSchedule(); void slotOpenSettingDialog(); //触å�‘éš�è—�政策 void slotShowPrivacy(); //å¿«æ�·é”®åˆ é™¤é€‰ä¸­æ—¥ç¨‹ void slotDeleteitem(); //设置最大大å°� void slotSetMaxSize(); void slotSearchFocusSwitch(); //å¸�户侧边æ �状æ€�å�‘生改å�˜äº‹ä»¶ void slotSidebarStatusChange(bool); //显示å�Œæ­¥æ��示 void slotShowSyncToast(int syncNum); void slotAccountUpdate(); private: DLabel *m_icon = nullptr; AnimationStackedWidget *m_stackWidget = nullptr; DButtonBox *m_buttonBox = nullptr; DSearchEdit *m_searchEdit = nullptr; CYearWindow *m_yearwindow = nullptr; CMonthWindow *m_monthWindow = nullptr; CWeekWindow *m_weekWindow = nullptr; CDayWindow *m_DayWindow = nullptr; CTitleWidget *m_titleWidget = nullptr; SidebarView *m_sidebarView = nullptr; bool m_searchflag = false; CScheduleSearchView *m_scheduleSearchView = nullptr; DFrame *m_contentBackground = nullptr; int m_priindex = 3; //默认打开日视图å�Œå‡» DFrame *m_transparentFrame = nullptr; bool m_opensearchflag = false; int m_scheduleSearchViewMaxWidth; QPropertyAnimation *m_animation = nullptr; QTimer *m_currentDateUpdateTimer = nullptr; DIconButton *m_newScheduleBtn {nullptr}; //全局的新建日程按钮 CSettingDialog *m_dsdSetting {nullptr}; JobTypeListView *m_jobTypeListView {nullptr}; //日历打开默认显示视图 int m_defaultIndex; bool m_setButtonFocus {false}; bool m_isNormalStateShow {true}; //是å�¦ä¸ºæ­£å¸¸çжæ€�显示 QPoint m_startPos; CMyScheduleView *m_dlg = Q_NULLPTR; bool m_firstPaintDone = false; bool m_deferredViewDataInitDone = false; bool m_hasInit = false; }; #endif // CALENDARMAINWINDOW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/cschedulebasewidget.cpp000066400000000000000000000201231523260663500313540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cschedulebasewidget.h" #include "monthbrefwidget.h" #include "commondef.h" CalendarManager *CScheduleBaseWidget::m_calendarManager = nullptr; CScheduleBaseWidget::CScheduleBaseWidget(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "CScheduleBaseWidget::CScheduleBaseWidget"; m_dialogIconButton = new CDialogIconButton(this); m_dialogIconButton->setFixedSize(QSize(16, 16)); initConnect(); if (m_calendarManager == nullptr) { qCDebug(ClientLogger) << "CalendarManager is null, creating new instance"; m_calendarManager = CalendarManager::getInstance(); //获å�–一年的日程信æ�¯ updateDBusData(); } m_calendarManager->addShowWidget(this); } CScheduleBaseWidget::~CScheduleBaseWidget() { qCDebug(ClientLogger) << "CScheduleBaseWidget::~CScheduleBaseWidget"; m_calendarManager->removeShowWidget(this); if (m_calendarManager->getShowWidgetSize() == 0) { qCDebug(ClientLogger) << "No more show widgets, releasing CalendarManager instance"; CalendarManager::releaseInstance(); m_calendarManager = nullptr; } } void CScheduleBaseWidget::initConnect() { qCDebug(ClientLogger) << "CScheduleBaseWidget::initConnect"; connect(ScheduleManager::getInstace(), &ScheduleManager::signalScheduleUpdate, this, &CScheduleBaseWidget::slotScheduleUpdate); connect(ScheduleManager::getInstace(), &ScheduleManager::signalSearchScheduleUpdate, this, &CScheduleBaseWidget::slotSearchedScheduleUpdate); connect(gLunarManager, &LunarManager::lunarInfoReady, this, &CScheduleBaseWidget::slotLunarInfoReady); connect(gLunarManager, &LunarManager::festivalInfoReady, this, &CScheduleBaseWidget::slotFestivalInfoReady); } /** * @brief CScheduleBaseWidget::setSelectDate 设置选择时间 * @param selectDate */ bool CScheduleBaseWidget::setSelectDate(const QDate &selectDate, const bool isSwitchYear, const QWidget *widget) { qCDebug(ClientLogger) << "CScheduleBaseWidget::setSelectDate, date:" << selectDate << "switchYear:" << isSwitchYear; bool _result = false; //选择时间必须大于等于1900å¹´å°�于2100å¹´ if (selectDate.year() >= 1900 && selectDate.year() <=2100) { qCDebug(ClientLogger) << "Selected date is valid"; m_calendarManager->setSelectDate(selectDate, isSwitchYear); _result = true; //更新其它视图界é�¢æ˜¾ç¤º for (int i = 0; i < m_calendarManager->getShowWidgetSize(); ++i) { //如果为当å‰�视图则ä¸�æ›´æ–° if (m_calendarManager->getShowWidget(i) == nullptr || m_calendarManager->getShowWidget(i) == widget) { // qCDebug(ClientLogger) << "Skipping update for current or null widget"; continue; } m_calendarManager->getShowWidget(i)->setYearData(); m_calendarManager->getShowWidget(i)->updateShowDate(); } } else { qCWarning(ClientLogger) << "Selected date is out of range:" << selectDate; } return _result; } bool CScheduleBaseWidget::setSelectDate(const QDate &selectDate, const QWidget *widget) { qCDebug(ClientLogger) << "CScheduleBaseWidget::setSelectDate (without switchYear), date:" << selectDate; return setSelectDate(selectDate, false, widget); } /** * @brief CScheduleBaseWidget::getSelectDate 获å�–选择时间 * @return */ QDate CScheduleBaseWidget::getSelectDate() { // qCDebug(ClientLogger) << "CScheduleBaseWidget::getSelectDate"; return m_calendarManager->getSelectDate(); } /** * @brief CScheduleBaseWidget::setCurrentDateTime 设置当å‰�æ—¶é—´ * @param currentDate */ void CScheduleBaseWidget::setCurrentDateTime(const QDateTime ¤tDate) { qCDebug(ClientLogger) << "CScheduleBaseWidget::setCurrentDateTime, date:" << currentDate; m_calendarManager->setCurrentDateTime(currentDate); } /** * @brief CScheduleBaseWidget::getCurrendDateTime 获å�–当å‰�æ—¶é—´ * @return */ QDateTime CScheduleBaseWidget::getCurrendDateTime() const { qCDebug(ClientLogger) << "CScheduleBaseWidget::getCurrendDateTime"; return m_calendarManager->getCurrentDate(); } /** * @brief CScheduleBaseWidget::getShowLunar 获å�–是å�¦æ˜¾ç¤ºå†œåŽ†ä¿¡æ�¯ * @return */ bool CScheduleBaseWidget::getShowLunar() { qCDebug(ClientLogger) << "CScheduleBaseWidget::getShowLunar"; return m_calendarManager->getShowLunar(); } /** * @brief CScheduleBaseWidget::updateData æ›´æ–°æ•°æ�®æ˜¾ç¤º */ void CScheduleBaseWidget::updateData() { qCDebug(ClientLogger) << "CScheduleBaseWidget::updateData"; updateShowDate(); updateShowSchedule(); //如果为中å�ˆçŽ¯å¢ƒåˆ™æ›´æ–°å†œåŽ†ä¿¡æ�¯ if ( getShowLunar() ) { qCDebug(ClientLogger) << "Updating lunar data"; updateShowLunar(); } updateSearchScheduleInfo(); } /** * @brief CScheduleBaseWidget::ensureLunarDataLoaded ç¡®ä¿�农历数æ�®å·²åŠ è½½ * @param startDate 开始日期 * @param endDate 结æ�Ÿæ—¥æœŸ * * Delegates to LunarManager which maintains a global query cache. */ void CScheduleBaseWidget::ensureLunarDataLoaded(const QDate &startDate, const QDate &endDate) { if (!getShowLunar()) { return; } gLunarManager->ensureLunarDataLoaded(startDate, endDate); } /** * @brief CScheduleBaseWidget::updateDBusData 更新一年的dbusæ•°æ�® */ void CScheduleBaseWidget::updateDBusData() { qCDebug(ClientLogger) << "CScheduleBaseWidget::updateDBusData"; // ShowDateRange _showDateRange = m_calendarManager->getShowDateRange(); // //如果缓存中ä¸�包å�«å¼€å§‹æˆ–结æ�Ÿæ—¶é—´åˆ™æ›´æ–°dbusæ•°æ�® // if (!m_calendarManager->getScheduleTask()->hasScheduleInfo(_showDateRange.startDate, _showDateRange.stopDate)) { // //获å�–日程开始和结æ�Ÿæ—¶é—´ï¼Œè€ƒè™‘切æ�¢æ—¥è§†å›¾ä¼šæ˜¾ç¤ºæ˜¾ç¤ºæ—¶é—´ä¹‹å¤–的时间所以å‰�å�Žå¤šèŽ·å�–2个月日程数æ�®ã€‚ // QDate _startDate = _showDateRange.startDate.addDays(-42); // QDate _stopDate = _showDateRange.stopDate.addDays(42); //getShowLunar() // if (_startDate.isValid() && _stopDate.isValid()) { // //更新日程信æ�¯ //// _task->updateInfo(_startDate, _stopDate, getShowLunar()); // } else { // qCWarning(ClientLogger) << "startDate or stopDate Err!"; // } // } } /** * @brief CScheduleBaseWidget::updateSearchScheduleInfo æ›´æ–°æ�œç´¢æ—¥ç¨‹ * ç”±å­�类完æˆ� */ void CScheduleBaseWidget::updateSearchScheduleInfo() { qCDebug(ClientLogger) << "CScheduleBaseWidget::updateSearchScheduleInfo (empty base implementation)"; } void CScheduleBaseWidget::deleteselectSchedule() { qCDebug(ClientLogger) << "CScheduleBaseWidget::deleteselectSchedule (empty base implementation)"; } /** * @brief CScheduleBaseWidget::getLunarInfo 获å�–选择时间的农历信æ�¯ * @return */ CaHuangLiDayInfo CScheduleBaseWidget::getLunarInfo() { qCDebug(ClientLogger) << "CScheduleBaseWidget::getLunarInfo"; CaHuangLiDayInfo huangLiInfo = gLunarManager->getHuangLiDay(getSelectDate()); m_lunarYear = QString("-%0%1å¹´-").arg(huangLiInfo.mGanZhiYear).arg(huangLiInfo.mZodiac); m_lunarDay = QString("-农历%0%1-").arg(huangLiInfo.mLunarMonthName).arg(huangLiInfo.mLunarDayName); return huangLiInfo; } void CScheduleBaseWidget::slotScheduleUpdate() { qCDebug(ClientLogger) << "CScheduleBaseWidget::slotScheduleUpdate"; updateShowSchedule(); //刷新日程的å�Œæ—¶ä¹Ÿè¦�刷新被æ�œç´¢çš„æ—¥ç¨‹ï¼Œä¿�è¯�有æ�œç´¢æ—¥ç¨‹æ—¶æ˜¾ç¤ºæ­£å¸¸ updateSearchScheduleInfo(); } void CScheduleBaseWidget::slotSearchedScheduleUpdate() { qCDebug(ClientLogger) << "CScheduleBaseWidget::slotSearchedScheduleUpdate"; updateSearchScheduleInfo(); } void CScheduleBaseWidget::slotLunarInfoReady() { qCDebug(ClientLogger) << "CScheduleBaseWidget::slotLunarInfoReady"; if (getShowLunar()) { updateShowLunar(); update(); } } void CScheduleBaseWidget::slotFestivalInfoReady() { qCDebug(ClientLogger) << "CScheduleBaseWidget::slotFestivalInfoReady"; if (getShowLunar()) { updateShowDate(); update(); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/cschedulebasewidget.h000066400000000000000000000050031523260663500310210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEBASEWIDGET_H #define CSCHEDULEBASEWIDGET_H #include "calendarmanage.h" #include "cdialogiconbutton.h" #include "schedulemanager.h" #include "lunarmanager.h" #include class CScheduleBaseWidget : public QWidget { Q_OBJECT public: explicit CScheduleBaseWidget(QWidget *parent = nullptr); ~CScheduleBaseWidget(); //设置选择时间 static bool setSelectDate(const QDate &selectDate, const bool isSwitchYear = false, const QWidget *widget = nullptr); bool setSelectDate(const QDate &selectDate, const QWidget *widget); //获å�–选择时间 static QDate getSelectDate(); //设置当å‰�æ—¶é—´ virtual void setCurrentDateTime(const QDateTime ¤tDate); //获å�–当å‰�æ—¶é—´ QDateTime getCurrendDateTime() const; //获å�–是å�¦æ˜¾ç¤ºå†œåŽ†ä¿¡æ�¯ static bool getShowLunar(); //更新所有数æ�®ï¼Œæ˜¾ç¤ºæ—¶é—´å’Œæ—¥ç¨‹æ•°æ�® void updateData(); //æ›´æ–°dbusæ•°æ�® static void updateDBusData(); //更新界é�¢æ�œç´¢æ—¥ç¨‹æ˜¾ç¤º virtual void updateSearchScheduleInfo(); //设置年显示 virtual void setYearData() = 0; //更新显示时间 virtual void updateShowDate(const bool isUpdateBar = true) = 0; //更新显示日程数æ�® virtual void updateShowSchedule() = 0; //更新农历信æ�¯æ˜¾ç¤º virtual void updateShowLunar() = 0; //ç¡®ä¿�农历数æ�®å·²åŠ è½½ï¼ˆæ£€æŸ¥å®Œæ•´æ€§ï¼Œä¸�足则查询) void ensureLunarDataLoaded(const QDate &startDate, const QDate &endDate); //设置选中æ�œç´¢æ—¥ç¨‹ virtual void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) = 0; //删除选中日程 virtual void deleteselectSchedule(); protected: //获å�–选择时间的农历信æ�¯ CaHuangLiDayInfo getLunarInfo(); signals: //切æ�¢è§†å›¾ä¿¡å�· 0:跳转上一个视图 1:月视图 2:周视图 3:日视图 void signalSwitchView(const int viewIndex = 0); public slots: void slotScheduleUpdate(); void slotSearchedScheduleUpdate(); //农历信æ�¯åŠ è½½å®Œæˆ� void slotLunarInfoReady(); //节å�‡æ—¥ä¿¡æ�¯åŠ è½½å®Œæˆ� void slotFestivalInfoReady(); private: void initConnect(); protected: static CalendarManager *m_calendarManager; QString m_lunarYear; QString m_lunarDay; CDialogIconButton *m_dialogIconButton = nullptr; //时间跳转控件 }; #endif // CSCHEDULEBASEWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/000077500000000000000000000000001523260663500265755ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/dayhuangliview.cpp000066400000000000000000000117121523260663500323230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dayhuangliview.h" #include "scheduledlg.h" #include "commondef.h" #include #include #include #include #include #include #include #include // Named constants for magic numbers static constexpr int kIconSize = 22; // Icon width and height static constexpr int kCornerRadius = 12; // Rounded rect corner radius static constexpr double kWidthRatio = 0.0424; // Left margin ratio to width static constexpr int kTextOffsetX = 50; // Text start X offset from left margin static constexpr int kCharWidth = 14; // Estimated character width static constexpr int kTextHeight = 21; // Text line height static constexpr int kCharSpacing = 10; // Spacing between characters static constexpr int kEllipsisMargin = 15; // Margin for ellipsis static constexpr int kHeightBase = 20; // Base value for top margin calculation CDayHuangLiLabel::CDayHuangLiLabel(QWidget *parent) : DLabel(parent) { qCDebug(ClientLogger) << "CDayHuangLiLabel::CDayHuangLiLabel"; setContentsMargins(0, 0, 0, 0); } void CDayHuangLiLabel::setbackgroundColor(QColor backgroundColor) { qCDebug(ClientLogger) << "CDayHuangLiLabel::setbackgroundColor, color:" << backgroundColor; m_backgroundColor = backgroundColor; } void CDayHuangLiLabel::setTextInfo(QColor tcolor, QFont font) { qCDebug(ClientLogger) << "CDayHuangLiLabel::setTextInfo, color:" << tcolor; m_textcolor = tcolor; m_font = font; } void CDayHuangLiLabel::setHuangLiText(QStringList vhuangli, int type) { qCDebug(ClientLogger) << "CDayHuangLiLabel::setHuangLiText, type:" << type; m_vHuangli = vhuangli; m_type = type; if (!vhuangli.isEmpty()) { qCDebug(ClientLogger) << "Setting tooltip for Huangli text"; QString str = vhuangli.at(0); for (int i = 1; i < vhuangli.count(); i++) { str += "." + vhuangli.at(i); } setToolTip(str); } else { qCDebug(ClientLogger) << "Clearing tooltip for empty Huangli text"; setToolTip(QString()); } update(); } void CDayHuangLiLabel::paintEvent(QPaintEvent *e) { // This function is called frequently, so logging is commented out. // qCDebug(ClientLogger) << "CDayHuangLiLabel::paintEvent"; Q_UNUSED(e); int labelwidth = width(); int labelheight = height(); const QSize iconSize = QSize(kIconSize, kIconSize); QPainter painter(this); QRect fillRect = QRect(0, 0, labelwidth, labelheight); painter.setRenderHints(QPainter::Antialiasing); painter.setBrush(QBrush(m_backgroundColor)); painter.setPen(Qt::NoPen); painter.drawRoundedRect(fillRect, kCornerRadius, kCornerRadius); // Check if we need to update cached pixmaps (first time or DPR changed) qreal dpr = devicePixelRatioF(); if (qFuzzyCompare(m_cachedDpr, dpr) == false || m_yiPixmap.isNull() || m_jiPixmap.isNull()) { // Use qRound for precise mapping between logical size and device pixels QSize pixmapSize(qRound(iconSize.width() * dpr), qRound(iconSize.height() * dpr)); // Cache "Yi" pixmap m_yiPixmap = QIcon(":/icons/deepin/builtin/icons/dde_calendar_yi_32px.svg").pixmap(pixmapSize); m_yiPixmap.setDevicePixelRatio(dpr); // Cache "Ji" pixmap m_jiPixmap = QIcon(":/icons/deepin/builtin/icons/dde_calendar_ji_32px.svg").pixmap(pixmapSize); m_jiPixmap.setDevicePixelRatio(dpr); m_cachedDpr = dpr; } // Use cached pixmap based on type const QPixmap &pixmap = (m_type == 0) ? m_yiPixmap : m_jiPixmap; // Draw at original icon size, not scaled QRect pixmapRect = QRect(QPoint(m_leftMargin, m_topMargin + 1), iconSize); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.drawPixmap(pixmapRect, pixmap); painter.restore(); painter.setFont(m_font); painter.setPen(m_textcolor); int bw = m_leftMargin + kTextOffsetX; int bh = m_topMargin; for (int i = 0; i < m_vHuangli.count(); i++) { int currentsw = m_vHuangli.at(i).size() * kCharWidth; if (bw + currentsw + kEllipsisMargin >= labelwidth) { painter.drawText(QRect(bw, bh, labelwidth - bw, kTextHeight), Qt::AlignLeft, "..."); break; } else { painter.drawText(QRect(bw, bh, currentsw, kTextHeight), Qt::AlignLeft, m_vHuangli.at(i)); bw += currentsw + kCharSpacing; } } } void CDayHuangLiLabel::resizeEvent(QResizeEvent *event) { // This function is called frequently, so logging is commented out. // qCDebug(ClientLogger) << "CDayHuangLiLabel::resizeEvent"; m_leftMargin = static_cast(kWidthRatio * width() + 0.5); m_topMargin = (height() - kHeightBase) / 2; DLabel::resizeEvent(event); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/dayhuangliview.h000066400000000000000000000017651523260663500317770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DAYHUANGLILABEL_H #define DAYHUANGLILABEL_H #include DWIDGET_USE_NAMESPACE class CDayHuangLiLabel : public DLabel { Q_OBJECT public: explicit CDayHuangLiLabel(QWidget *parent = nullptr); void setbackgroundColor(QColor backgroundColor); void setTextInfo(QColor tcolor, QFont font); void setHuangLiText(QStringList vhuangli, int type = 0); protected: void paintEvent(QPaintEvent *e) override; void resizeEvent(QResizeEvent *event) override; private: QStringList m_vHuangli; QColor m_backgroundColor; QColor m_textcolor; QFont m_font; int m_type = 0; int m_leftMargin = 14; int m_topMargin = 18; QPixmap m_yiPixmap; // Cached pixmap for "Yi" icon QPixmap m_jiPixmap; // Cached pixmap for "Ji" icon qreal m_cachedDpr = 0.0; // DPR when pixmaps were cached }; #endif // DAYHUANGLILABEL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/daymonthview.cpp000066400000000000000000000661341523260663500320310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "todaybutton.h" #include "scheduledatamanage.h" #include "daymonthview.h" #include "constants.h" #include "dayhuangliview.h" #include "configsettings.h" #include "calendarglobalenv.h" #include "scheduledlg.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CDayMonthView::CDayMonthView(QWidget *parent) : CustomFrame(parent) { qCDebug(ClientLogger) << "CDayMonthView::CDayMonthView"; m_weeklist.append(tr("Monday")); m_weeklist.append(tr("Tuesday")); m_weeklist.append(tr("Wednesday")); m_weeklist.append(tr("Thursday")); m_weeklist.append(tr("Friday")); m_weeklist.append(tr("Saturday")); m_weeklist.append(tr("Sunday")); initUI(); initConnection(); } CDayMonthView::~CDayMonthView() { qCDebug(ClientLogger) << "CDayMonthView::~CDayMonthView"; } void CDayMonthView::setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate) { qCDebug(ClientLogger) << "CDayMonthView::setShowDate, selectDate:" << selectDate; m_selectDate = selectDate; m_currentDate = currentDate; m_dayMonthWidget->setShowDate(showDate, selectDate, currentDate); updateDateShow(); update(); } void CDayMonthView::setLunarVisible(bool visible) { qCDebug(ClientLogger) << "CDayMonthView::setLunarVisible, visible:" << visible; m_huanglistate = visible; m_yiLabel->setVisible(visible); m_jiLabel->setVisible(visible); m_currentLuna->setVisible(visible); m_splitline->setVisible(visible); update(); } void CDayMonthView::setTheMe(int type) { qCDebug(ClientLogger) << "CDayMonthView::setTheMe, type:" << type; QColor todayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_dayMonthWidget->setTheMe(type); if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; DPalette aniPa = this->palette(); QColor tbColor = "#FFFFFF"; aniPa.setColor(DPalette::Window, tbColor); setPalette(aniPa); setBackgroundRole(DPalette::Window); setBColor(tbColor); QColor todayhover = "#000000"; todayhover.setAlphaF(0.1); QColor todaypress = "#000000"; todaypress.setAlphaF(0.2); DPalette prevPalette = m_prevButton->palette(); prevPalette.setColor(DPalette::Dark, QColor("#E6E6E6")); prevPalette.setColor(DPalette::Light, QColor("#E3E3E3")); DPalette nextPa = m_nextButton->palette(); nextPa.setColor(DPalette::Dark, QColor("#E6E6E6")); nextPa.setColor(DPalette::Light, QColor("#E3E3E3")); m_currentMouth->setTextColor(QColor("#3B3B3B")); m_currentDay->setTextColor(todayColor); m_currentWeek->setTextColor(QColor("#414D68")); m_currentLuna->setTextColor(QColor("#414D68")); m_currentYear->setTextColor(QColor("#414D68")); QFont hLabelF; hLabelF.setPixelSize(DDECalendar::FontSizeFourteen); QColor yiColor = QColor("#75C18E"); yiColor.setAlphaF(0.1); m_yiLabel->setbackgroundColor(yiColor); m_yiLabel->setTextInfo(QColor("#7B7B7B"), hLabelF); QColor jiColor = QColor("#C17575"); jiColor.setAlphaF(0.1); m_jiLabel->setbackgroundColor(jiColor); m_jiLabel->setTextInfo(QColor("#7B7B7B"), hLabelF); m_topBorderColor = Qt::red; m_backgroundCircleColor = "#0081FF"; m_weekendsTextColor = Qt::black; m_festivalTextColor = Qt::black; } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; DPalette aniPa = this->palette(); QColor tbColor = "#282828"; aniPa.setColor(DPalette::Window, tbColor); setPalette(aniPa); setBackgroundRole(DPalette::Window); setBColor(tbColor); DPalette prevPalette = m_prevButton->palette(); prevPalette.setColor(DPalette::Dark, QColor("#484848")); prevPalette.setColor(DPalette::Light, QColor("#414141")); DPalette nextPa = m_nextButton->palette(); nextPa.setColor(DPalette::Dark, QColor("#484848")); nextPa.setColor(DPalette::Light, QColor("#414141")); m_currentMouth->setTextColor(QColor("#C0C6D4")); m_currentDay->setTextColor(todayColor); m_currentWeek->setTextColor(QColor("#C0C6D4")); m_currentLuna->setTextColor(QColor("#C0C6D4")); m_currentYear->setTextColor(QColor("#C0C6D4")); QFont hLabelF; hLabelF.setPixelSize(DDECalendar::FontSizeFourteen); QColor yiColor = QColor("#2F8C4D"); yiColor.setAlphaF(0.2); m_yiLabel->setbackgroundColor(yiColor); m_yiLabel->setTextInfo(QColor("#C0C6D4"), hLabelF); QColor jiColor = QColor("#A43B3B"); jiColor.setAlphaF(0.2); m_jiLabel->setbackgroundColor(jiColor); m_jiLabel->setTextInfo(QColor("#C0C6D4"), hLabelF); m_topBorderColor = Qt::red; m_backgroundCircleColor = "#0059D2"; m_weekendsTextColor = Qt::black; m_festivalTextColor = Qt::black; } update(); } void CDayMonthView::setSearchFlag(bool flag) { qCDebug(ClientLogger) << "CDayMonthView::setSearchFlag, flag:" << flag; m_searchflag = flag; update(); } /** * @brief CDayMonthView::setHuangLiInfo 设置黄历信æ�¯ * @param huangLiInfo */ void CDayMonthView::setHuangLiInfo(const CaHuangLiDayInfo &huangLiInfo) { qCDebug(ClientLogger) << "CDayMonthView::setHuangLiInfo"; m_huangLiInfo = huangLiInfo; updateDateLunarDay(); } void CDayMonthView::setHasScheduleFlag(const QVector &hasScheduleFlag) { qCDebug(ClientLogger) << "CDayMonthView::setHasScheduleFlag"; m_dayMonthWidget->setHasScheduleFlag(hasScheduleFlag); } void CDayMonthView::initUI() { qCDebug(ClientLogger) << "CDayMonthView::initUI"; m_today = new CTodayButton; m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedSize(80, DDEDayCalendar::D_MLabelHeight); QFont todayfont; todayfont.setPixelSize(DDECalendar::FontSizeFourteen); m_today->setFont(todayfont); m_prevButton = new DIconButton(DStyle::SP_ArrowLeft, this); m_prevButton->setFixedSize(36, 36); m_nextButton = new DIconButton(DStyle::SP_ArrowRight, this); m_nextButton->setFixedSize(36, 36); QHBoxLayout *titleLayout = new QHBoxLayout; titleLayout->setContentsMargins(0, 0, 0, 0); titleLayout->setSpacing(0); titleLayout->setContentsMargins(0, 0, 0, 3); //add separator line m_currentMouth = new CustomFrame(this); m_currentMouth->setFixedSize(74, DDEDayCalendar::D_MLabelHeight); QFont mlabelF; mlabelF.setWeight(QFont::Medium); mlabelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_currentMouth->setTextFont(mlabelF); m_currentMouth->setTextAlign(Qt::AlignCenter); titleLayout->addWidget(m_prevButton); titleLayout->addWidget(m_currentMouth); titleLayout->addWidget(m_nextButton); titleLayout->addStretch(); titleLayout->addWidget(m_today, 0, Qt::AlignRight); //上å�Šéƒ¨åˆ† m_upLayout = new QVBoxLayout; m_upLayout->setContentsMargins(0, 0, 0, 0); m_upLayout->setSpacing(0); m_upLayout->setContentsMargins(22, 9, 0, 7); m_upLayout->addLayout(titleLayout); m_weekWidget = new CWeekWidget(); m_weekWidget->setMaximumHeight(40); m_dayMonthWidget = new CDayMonthWidget(); m_upLayout->addWidget(m_weekWidget, 1); m_upLayout->addWidget(m_dayMonthWidget, 6); //中间部分 QVBoxLayout *midLayout = new QVBoxLayout; midLayout->setContentsMargins(0, 0, 0, 0); midLayout->setSpacing(0); midLayout->setContentsMargins(0, 0, 0, 20); m_currentDay = new CustomFrame(this); m_currentDay->setFixedHeight(DDEDayCalendar::DDLabelHeight); m_currentDay->setMinimumWidth(width()); m_currentDay->setTextAlign(Qt::AlignCenter); QFont dayLabelF; dayLabelF.setWeight(QFont::Medium); dayLabelF.setPixelSize(DDECalendar::FontSizeOneHundred); m_currentDay->setTextFont(dayLabelF); midLayout->addWidget(m_currentDay); m_currentWeek = new CustomFrame(this); m_currentWeek->setFixedHeight(DDEDayCalendar::DWLabelHeight); m_currentWeek->setTextAlign(Qt::AlignCenter); QFont wLabelF; wLabelF.setPixelSize(DDECalendar::FontSizeSixteen); m_currentWeek->setTextFont(wLabelF); midLayout->addWidget(m_currentWeek); midLayout->addSpacing(2); m_currentYear = new CustomFrame(this); m_currentYear->setFixedHeight(DDEDayCalendar::DWLabelHeight); m_currentYear->setTextAlign(Qt::AlignCenter); m_currentYear->setTextFont(wLabelF); midLayout->addWidget(m_currentYear); midLayout->addSpacing(2); m_currentLuna = new CustomFrame(this); m_currentLuna->setFixedHeight(DDEDayCalendar::DHuangLiInfoLabelHeight); m_currentLuna->setTextAlign(Qt::AlignCenter); QFont hLabelF; hLabelF.setPixelSize(DDECalendar::FontSizeTwelve); m_currentLuna->setTextFont(hLabelF); midLayout->addWidget(m_currentLuna); m_yiDownLayout = new QVBoxLayout; m_yiDownLayout->setSpacing(0); m_yiDownLayout->setContentsMargins(10, 5, 10, 0); hLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_yiLabel = new CDayHuangLiLabel(this); m_yiLabel->setbackgroundColor(QColor("#75C18E")); m_yiLabel->setTextInfo(QColor("#7B7B7B "), hLabelF); m_yiLabel->setMinimumHeight(DDEDayCalendar::DHuangLiLabelHeight); m_yiLabel->setMaximumHeight(DDEDayCalendar::DHuangLiLabelMaxHeight); m_yiLabel->setHuangLiText(QStringList()); m_yiDownLayout->addWidget(m_yiLabel, 1); m_jiDownLayout = new QVBoxLayout; m_jiDownLayout->setSpacing(0); m_jiDownLayout->setContentsMargins(10, 10, 10, 10); m_jiLabel = new CDayHuangLiLabel(this); m_jiLabel->setbackgroundColor(QColor("#C17575")); m_jiLabel->setTextInfo(QColor("#7B7B7B "), hLabelF); m_jiLabel->setMinimumHeight(DDEDayCalendar::DHuangLiLabelHeight); m_jiLabel->setMaximumHeight(DDEDayCalendar::DHuangLiLabelMaxHeight); m_jiLabel->setHuangLiText(QStringList(), 1); m_jiDownLayout->addWidget(m_jiLabel, 1); m_hhLayout = new QVBoxLayout; m_hhLayout->setContentsMargins(0, 0, 0, 0); m_hhLayout->setSpacing(0); m_hhLayout->addLayout(m_upLayout, 6); m_hhLayout->addLayout(midLayout); m_splitline = new DHorizontalLine; m_splitline->setMinimumHeight(2); QHBoxLayout *hlineLayout = new QHBoxLayout; hlineLayout->setSpacing(0); hlineLayout->setContentsMargins(50, 0, 50, 5); hlineLayout->addWidget(m_splitline); m_hhLayout->addLayout(hlineLayout); m_hhLayout->addLayout(m_yiDownLayout); m_hhLayout->addLayout(m_jiDownLayout); m_hhLayout->addStretch(); setLayout(m_hhLayout); } void CDayMonthView::initConnection() { qCDebug(ClientLogger) << "CDayMonthView::initConnection"; connect(m_prevButton, &DIconButton::clicked, this, &CDayMonthView::slotprev); connect(m_today, &CTodayButton::clicked, this, &CDayMonthView::slottoday); connect(m_nextButton, &DIconButton::clicked, this, &CDayMonthView::slotnext); connect(m_dayMonthWidget, &CDayMonthWidget::signalChangeSelectDate, this, &CDayMonthView::signalChangeSelectDate); } /** * @brief CDayMonthView::updateDateShow 更新月/天界é�¢æ˜¾ç¤º */ void CDayMonthView::updateDateShow() { qCDebug(ClientLogger) << "CDayMonthView::updateDateShow"; QLocale locale; m_currentMouth->setTextStr(locale.monthName(m_selectDate.month(), QLocale::ShortFormat)); m_currentDay->setTextStr(QString::number(m_selectDate.day())); if (m_selectDate.dayOfWeek() > 0) m_currentWeek->setTextStr(m_weeklist.at(m_selectDate.dayOfWeek() - 1)); m_currentYear->setTextStr(m_selectDate.toString("yyyy/M")); if (m_selectDate == m_currentDate) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return Today", "Today", "Return Today")); } } /** * @brief CDayMonthView::updateDateLunarDay 更新显示黄历信æ�¯ */ void CDayMonthView::updateDateLunarDay() { qCDebug(ClientLogger) << "CDayMonthView::updateDateLunarDay"; if (!m_huanglistate) { qCDebug(ClientLogger) << "Huangli state is false, returning"; return; } m_currentLuna->setTextStr(m_huangLiInfo.mGanZhiYear + "å¹´ " + "ã€�" + m_huangLiInfo.mZodiac + "年】" + m_huangLiInfo.mGanZhiMonth + "月 " + m_huangLiInfo.mGanZhiDay + "æ—¥ "); QStringList yiList = m_huangLiInfo.mSuit.split(".", QT_SKIP_EMPTY_PARTS); QStringList jiList = m_huangLiInfo.mAvoid.split(".", QT_SKIP_EMPTY_PARTS); m_yiLabel->setHuangLiText(yiList); m_jiLabel->setHuangLiText(jiList, 1); } void CDayMonthView::changeSelectDate(const QDate &date) { qCDebug(ClientLogger) << "CDayMonthView::changeSelectDate, date:" << date; emit signalChangeSelectDate(date); } void CDayMonthView::wheelEvent(QWheelEvent *event) { // qCDebug(ClientLogger) << "CDayMonthView::wheelEvent"; //如果是拖拽则退出 bool isDragging = false; emit signalIsDragging(isDragging); if (isDragging) return; if (event->angleDelta().y() < 0) { // qCDebug(ClientLogger) << "Wheeling down, changing to next day"; //切æ�¢å‰�一天 changeSelectDate(m_selectDate.addDays(1)); } else { // qCDebug(ClientLogger) << "Wheeling up, changing to previous day"; //切æ�¢å�Žä¸€å¤© changeSelectDate(m_selectDate.addDays(-1)); } } void CDayMonthView::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "CDayMonthView::paintEvent"; Q_UNUSED(e); int labelwidth = width(); int labelheight = height(); DPalette aniPa = this->palette(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; painter.save(); painter.setBrush(aniPa.window()); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(0, 0); painterPath.lineTo(0, labelheight); // 如果有æ�œç´¢ç•Œé�¢åˆ™ä¸ºå�³è¾¹ä¸ºç›´è§’å�¦åˆ™ä¸ºåœ†è§’ if (!m_searchflag) { painterPath.lineTo(labelwidth - m_radius, labelheight); painterPath.arcTo(QRect(labelwidth - m_radius * 2, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); painterPath.lineTo(labelwidth, m_radius); painterPath.arcTo(QRect(labelwidth - m_radius * 2, 0, m_radius * 2, m_radius * 2), 0, 90); } else { painterPath.lineTo(labelwidth, labelheight); painterPath.lineTo(labelwidth, 0); } painterPath.lineTo(0, 0); painterPath.closeSubpath(); painter.drawPath(painterPath); painter.restore(); } void CDayMonthView::slotprev() { qCDebug(ClientLogger) << "CDayMonthView::slotprev"; changeSelectDate(m_selectDate.addMonths(-1)); } void CDayMonthView::slotnext() { qCDebug(ClientLogger) << "CDayMonthView::slotnext"; changeSelectDate(m_selectDate.addMonths(1)); } void CDayMonthView::slottoday() { qCDebug(ClientLogger) << "CDayMonthView::slottoday"; changeSelectDate(m_currentDate); } CDayMonthWidget::CDayMonthWidget(QWidget *parent) : QWidget(parent) , m_isFocus(false) { qCDebug(ClientLogger) << "CDayMonthWidget::CDayMonthWidget"; m_gridLayout = new QGridLayout; m_gridLayout->setContentsMargins(0, 0, 0, 0); m_gridLayout->setSpacing(0); m_dayNumFont.setPixelSize(DDECalendar::FontSizeTwelve); for (int r = 0; r < 6; ++r) { for (int c = 0; c < 7; ++c) { QWidget *cell = new QWidget; cell->installEventFilter(this); m_gridLayout->addWidget(cell, r, c, 1, 1); m_cellList.append(cell); } } this->setLayout(m_gridLayout); setFocusPolicy(Qt::StrongFocus); //设置最大高度 setMaximumHeight(250); } CDayMonthWidget::~CDayMonthWidget() { qCDebug(ClientLogger) << "CDayMonthWidget::~CDayMonthWidget"; } void CDayMonthWidget::setTheMe(int type) { qCDebug(ClientLogger) << "CDayMonthWidget::setTheMe, type:" << type; m_currentDayTextColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; m_defaultTextColor = Qt::black; m_selectedTextColor = Qt::white; m_notCurrentTextColor = "#b2b2b2"; m_ceventColor = QColor(255, 93, 0); } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; m_defaultTextColor = "#C0C6D4"; m_selectedTextColor = "#B8D3FF"; m_notCurrentTextColor = "#C0C6D4"; m_notCurrentTextColor.setAlphaF(0.5); m_ceventColor = QColor(204, 77, 3); } update(); } void CDayMonthWidget::setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate) { qCDebug(ClientLogger) << "CDayMonthWidget::setShowDate, selectDate:" << selectDate; m_showDays = showDate; m_selectDate = selectDate; m_currentDate = currentDate; //当å‰�选择index m_selectedCell = m_showDays.indexOf(m_selectDate); update(); } void CDayMonthWidget::setHasScheduleFlag(const QVector &hasScheduleFlag) { qCDebug(ClientLogger) << "CDayMonthWidget::setHasScheduleFlag"; m_vlineflag = hasScheduleFlag; update(); } const QString CDayMonthWidget::getCellDayNum(int pos) { // qCDebug(ClientLogger) << "CDayMonthWidget::getCellDayNum, pos:" << pos; return QString::number(m_showDays[pos].day()); } const QDate CDayMonthWidget::getCellDate(int pos) { // qCDebug(ClientLogger) << "CDayMonthWidget::getCellDate, pos:" << pos; return m_showDays[pos]; } void CDayMonthWidget::paintCell(QWidget *cell) { // qCDebug(ClientLogger) << "CDayMonthWidget::paintCell"; const QRect rect = cell->rect(); const int pos = m_cellList.indexOf(cell); const bool isSelectedCell = pos == m_selectedCell; const bool isCurrentDay = getCellDate(pos) == m_currentDate; QPainter painter(cell); painter.setRenderHint(QPainter::Antialiasing); // draw selected cell background circle if (isSelectedCell) { const qreal r = rect.width() > rect.height() ? rect.height() * 0.9 : rect.width() * 0.9; const qreal x = rect.x() + (rect.width() - r) / 2; const qreal y = rect.y() + (rect.height() - r) / 2; QRectF fillRect = QRectF(x, y, r, r).marginsRemoved(QMarginsF(1.5, 2.5, 1.5, 1.5)); painter.save(); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); painter.restore(); if (m_isFocus) { //绘制焦点获å�–效果 QPen pen; pen.setWidth(2); pen.setColor(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor()); painter.setPen(pen); //在原有的选中效果外é�¢å†�绘制一圈 QRectF focusRect(fillRect.x() - 2, fillRect.y() - 2, fillRect.width() + 4, fillRect.height() + 4); painter.setBrush(Qt::NoBrush); painter.drawEllipse(focusRect); } } painter.setPen(Qt::SolidLine); const QString dayNum = getCellDayNum(pos); // draw text of day if (isSelectedCell) { painter.setPen(m_selectedTextColor); } else if (isCurrentDay) { painter.setPen(m_currentDayTextColor); } else { if (m_selectDate.month() == getCellDate(pos).month()) painter.setPen(m_defaultTextColor); else painter.setPen(m_notCurrentTextColor); } QRect test; painter.setFont(m_dayNumFont); painter.drawText(rect, Qt::AlignCenter, dayNum, &test); if (m_vlineflag.count() == DDEDayCalendar::PainterCellNum) { if (m_vlineflag[pos]) { if (m_selectDate.month() == getCellDate(pos).month()) { // qCDebug(ClientLogger) << "Drawing schedule indicator for cell:" << pos; painter.save(); QPen pen; pen.setWidth(2); pen.setColor(m_ceventColor); painter.setPen(pen); painter.setBrush(QBrush(m_ceventColor)); painter.setPen(Qt::NoPen); int r = int(cell->width() * 0.1); if (r < 4) { r = 4; } else if (r > 7) { r = 7; } painter.drawEllipse(cell->width() - r - 6, 4, r, r); painter.restore(); } } } } bool CDayMonthWidget::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "CDayMonthWidget::eventFilter, event type:" << e->type(); if (m_showDays.size() != 42) return false; QWidget *cell = qobject_cast(o); if (cell && m_cellList.contains(cell)) { const int pos = m_cellList.indexOf(cell); QDate date = m_showDays[pos]; //如果需è¦�显示时间å°�于1900年则退出 if (date.year() < DDECalendar::QueryEarliestYear) return false; if (e->type() == QEvent::Paint) { paintCell(cell); } else if (e->type() == QEvent::MouseButtonPress) { // qCDebug(ClientLogger) << "Mouse press on cell:" << pos; m_dayMouseState = 1; } else if (e->type() == QEvent::MouseMove) { if (m_dayMouseState == 1) { m_dayMouseState = 2; } if (2 == m_dayMouseState) { QMouseEvent *mouseEvent = dynamic_cast(e); //如果m_dayCreateState为0需è¦�判断是å�¦ç¦»å¼€äº†é€‰æ‹©åŒºåŸŸï¼Œå�¦åˆ™ä¸�需è¦�判断 if (m_dayCreateState == 0 && !cell->rect().contains(mouseEvent->pos())) { //如果离开选择日期区域则修改鼠标显示 // qCDebug(ClientLogger) << "Mouse moved out of cell, setting cursor to ClosedHandCursor"; setCursor(Qt::ClosedHandCursor); m_dayCreateState = 1; } if (m_dayCreateState != 0) { //æ ¹æ�®æ˜¯å�¦åœ¨æ—¥åŽ†ç•Œé�¢å†…设置鼠标形状和创建状æ€� QPoint globalPoint = QCursor::pos(); QWidget *widget = QApplication::activeWindow(); // if (widget != nullptr) { QRect rect = widget->geometry(); if (rect.contains(globalPoint)) { // qCDebug(ClientLogger) << "Mouse is within active window"; setCursor(Qt::ClosedHandCursor); m_dayCreateState = 1; } else { // qCDebug(ClientLogger) << "Mouse is outside active window"; setCursor(Qt::ForbiddenCursor); m_dayCreateState = 2; } } } } } else if (e->type() == QEvent::MouseButtonRelease) { // qCDebug(ClientLogger) << "Mouse release on cell:" << pos; QMouseEvent *mouseEvent = dynamic_cast(e); // if (m_dayCreateState == 1) { // qCDebug(ClientLogger) << "Creating new schedule on release"; //新建日程 const int pos = m_cellList.indexOf(cell); QDate date = m_showDays.at(pos); //设置日程开始时间 QDateTime _beginTime(date, QTime::currentTime()); //新建日程对è¯�框 CScheduleDlg _scheduleDig(1, this, false); //设置开始时间 _scheduleDig.setDate(_beginTime); _scheduleDig.exec(); } else { //如果ä¸�在点击区域内则ä¸�跳转日期 //跳转日期 if (mouseEvent->button() == Qt::LeftButton && cell->rect().contains(mouseEvent->pos())) { // qCDebug(ClientLogger) << "Cell clicked, changing selection"; cellClicked(cell); } } setCursor(Qt::ArrowCursor); m_dayMouseState = 0; m_dayCreateState = 0; } } return false; } void CDayMonthWidget::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CDayMonthWidget::resizeEvent"; //获å�–æ¯�个时间widget的高度和宽度 qreal width = this->width() / 7; qreal height = this->height() / 6; const qreal r = width > height ? height * 0.9 : width * 0.9; //æ ¹æ�®é«˜åº¦å’Œå®½åº¦è®¾ç½®æ—¶é—´å­—体的大å°� m_dayNumFont.setPixelSize(qRound(12 + (r - 18) * 6 / 17.0)); QWidget::resizeEvent(event); } void CDayMonthWidget::focusInEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CDayMonthWidget::focusInEvent, reason:" << event->reason(); switch (event->reason()) { case Qt::TabFocusReason: case Qt::BacktabFocusReason: case Qt::ActiveWindowFocusReason: m_isFocus = true; break; default: m_isFocus = false; break; }; update(); } void CDayMonthWidget::focusOutEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CDayMonthWidget::focusOutEvent"; Q_UNUSED(event) m_isFocus = false; update(); } void CDayMonthWidget::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "CDayMonthWidget::keyPressEvent, key:" << event->key(); if (m_isFocus) { switch (event->key()) { case Qt::Key_Left: qCDebug(ClientLogger) << "Moving to previous day"; emit signalChangeSelectDate(m_selectDate.addDays(-1)); break; case Qt::Key_Right: qCDebug(ClientLogger) << "Moving to next day"; emit signalChangeSelectDate(m_selectDate.addDays(1)); break; case Qt::Key_Up: qCDebug(ClientLogger) << "Moving to previous week"; emit signalChangeSelectDate(m_selectDate.addDays(-7)); break; case Qt::Key_Down: qCDebug(ClientLogger) << "Moving to next week"; emit signalChangeSelectDate(m_selectDate.addDays(7)); break; default: break; } } QWidget::keyPressEvent(event); } void CDayMonthWidget::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CDayMonthWidget::mousePressEvent"; QWidget::mousePressEvent(event); m_isFocus = false; if (event->button() & Qt::LeftButton) m_startPos = event->pos(); } void CDayMonthWidget::cellClicked(QWidget *cell) { qCDebug(ClientLogger) << "CDayMonthWidget::cellClicked"; const int pos = m_cellList.indexOf(cell); if (pos == -1) { qCWarning(ClientLogger) << "Invalid cell clicked"; return; } setSelectedCell(pos); } void CDayMonthWidget::setSelectedCell(int index) { qCDebug(ClientLogger) << "CDayMonthWidget::setSelectedCell, index:" << index; if (m_selectedCell == index) { qCDebug(ClientLogger) << "Cell already selected, returning"; return; } emit signalChangeSelectDate(m_showDays.at(index)); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/daymonthview.h000066400000000000000000000113131523260663500314630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DAYMONTHVIEW_H #define DAYMONTHVIEW_H #include "customframe.h" #include "huangliData/dbusdatastruct.h" #include "cweekwidget.h" #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CDayHuangLiLabel; class CTodayButton; class CDayMonthWidget; class CDayMonthView: public CustomFrame { Q_OBJECT public: explicit CDayMonthView(QWidget *parent = nullptr); ~CDayMonthView() override; //设置显示时间,选择时间和当å‰�æ—¶é—´ void setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate); void setLunarVisible(bool visible); void setTheMe(int type = 0); void setSearchFlag(bool flag); //设置黄历信æ�¯ void setHuangLiInfo(const CaHuangLiDayInfo &huangLiInfo); void setHasScheduleFlag(const QVector &hasScheduleFlag); signals: //判断是å�¦ä¸ºæ‹–拽 void signalIsDragging(bool &isDragging); //选择时间改å�˜ä¿¡å�· void signalChangeSelectDate(const QDate &date); public slots: //上一个月 void slotprev(); //下一个月 void slotnext(); //返回当å‰�æ—¶é—´ void slottoday(); private: void initUI(); void initConnection(); void updateDateShow(); void updateDateLunarDay(); private: void changeSelectDate(const QDate &date); protected: void wheelEvent(QWheelEvent *event) override; void paintEvent(QPaintEvent *e) override; private: DIconButton *m_prevButton = nullptr; DIconButton *m_nextButton = nullptr; CTodayButton *m_today = nullptr; CustomFrame *m_currentMouth = nullptr; CustomFrame *m_currentDay = nullptr; CustomFrame *m_currentYear = nullptr; CustomFrame *m_currentWeek = nullptr; CustomFrame *m_currentLuna = nullptr; CDayHuangLiLabel *m_yiLabel = nullptr; CDayHuangLiLabel *m_jiLabel = nullptr; QDate m_selectDate; QDate m_currentDate; int m_selectedCell = 0; QColor m_topBorderColor = Qt::red; QColor m_backgroundCircleColor = "#2ca7f8"; QColor m_weekendsTextColor = Qt::black; QColor m_festivalTextColor = Qt::black; int m_firstWeekDay; bool m_huanglistate = true; QVBoxLayout *m_hhLayout = nullptr; QVBoxLayout *m_upLayout = nullptr; DHorizontalLine *m_splitline = nullptr; QVBoxLayout *m_yiDownLayout = nullptr; QVBoxLayout *m_jiDownLayout = nullptr; QStringList m_weeklist; CaHuangLiDayInfo m_huangLiInfo; CDayMonthWidget *m_dayMonthWidget; const int m_radius = 8; bool m_searchflag = false; CWeekWidget *m_weekWidget = nullptr; //周视图显示区域 }; class CDayMonthWidget : public QWidget { Q_OBJECT public: explicit CDayMonthWidget(QWidget *parent = nullptr); ~CDayMonthWidget() override; void setTheMe(int type = 0); //设置显示时间,选择时间和当å‰�æ—¶é—´ void setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate); void setHasScheduleFlag(const QVector &hasScheduleFlag); private: const QString getCellDayNum(int pos); const QDate getCellDate(int pos); void paintCell(QWidget *cell); protected: bool eventFilter(QObject *o, QEvent *e) override; void resizeEvent(QResizeEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void mousePressEvent(QMouseEvent *event) override; signals: //选择时间改å�˜ä¿¡å�· void signalChangeSelectDate(const QDate &date); public slots: //点击月显示时间修改选择时间 void cellClicked(QWidget *cell); //设置选择项修改选择时间 void setSelectedCell(int index); private: QList m_cellList; QVector m_showDays; int m_selectedCell = 0; QDate m_selectDate; QDate m_currentDate; QGridLayout *m_gridLayout = nullptr; QVector m_vlineflag; //节å�‡æ—¥å’Œæ—¥ç¨‹æ ‡è¯† QColor m_selectedTextColor = Qt::white; QColor m_currentDayTextColor = "#2ca7f8"; QColor m_defaultTextColor = Qt::black; QColor m_notCurrentTextColor = "#b2b2b2"; QColor m_ceventColor = "#FF5D00"; QFont m_dayNumFont; bool m_isFocus; QPoint m_startPos; //拖拽新建日程相关处ç�†æµ�程 int m_dayMouseState = 0; //鼠标状æ€� 0:原始状æ€�,1:点击状æ€� 2:移动状æ€� int m_dayCreateState = 0; //创建日程状æ€� 0:ä¸�创建 1:创建 2: 超出界é�¢èŒƒå›´ }; #endif // YEARVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/daywindow.cpp000066400000000000000000000351661523260663500313210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daywindow.h" #include "constants.h" #include "customframe.h" #include "daymonthview.h" #include "schedulesearchview.h" #include "scheduleview.h" #include "commondef.h" #include #include #include #include #include DGUI_USE_NAMESPACE CDayWindow::CDayWindow(QWidget *parent) : CScheduleBaseWidget(parent) { qCDebug(ClientLogger) << "CDayWindow::CDayWindow"; initUI(); initConnection(); setLunarVisible(m_calendarManager->getShowLunar()); } CDayWindow::~CDayWindow() { qCDebug(ClientLogger) << "CDayWindow::~CDayWindow"; } void CDayWindow::setTheMe(int type) { qCDebug(ClientLogger) << "CDayWindow::setTheMe, type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; m_leftground->setBColor("#FFFFFF"); DPalette ypa = m_YearLabel->palette(); ypa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(ypa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette lpa = m_LunarLabel->palette(); lpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_LunarLabel->setPalette(lpa); m_LunarLabel->setForegroundRole(DPalette::WindowText); DPalette spa = m_SolarDay->palette(); spa.setColor(DPalette::WindowText, Qt::red); m_SolarDay->setPalette(spa); m_SolarDay->setForegroundRole(DPalette::WindowText); } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; m_leftground->setBColor("#282828"); DPalette ypa = m_YearLabel->palette(); ypa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(ypa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette lpa = m_LunarLabel->palette(); lpa.setColor(DPalette::WindowText, QColor("#798BA8")); m_LunarLabel->setPalette(lpa); m_LunarLabel->setForegroundRole(DPalette::WindowText); DPalette spa = m_SolarDay->palette(); spa.setColor(DPalette::WindowText, Qt::red); m_SolarDay->setPalette(spa); m_SolarDay->setForegroundRole(DPalette::WindowText); } m_daymonthView->setTheMe(type); m_scheduleView->setTheMe(type); } /** * @brief CDayWindow::setTime 设置显示时间ä½�ç½® * @param time */ void CDayWindow::setTime(const QTime time) { qCDebug(ClientLogger) << "CDayWindow::setTime, time:" << time; if (time.isValid()) { qCDebug(ClientLogger) << "Time is valid, setting it"; //如果时间有效 m_scheduleView->setTime(time); } else { if (getSelectDate() == getCurrendDateTime().date()) { qCDebug(ClientLogger) << "Setting to current time"; m_scheduleView->setTime(getCurrendDateTime().time()); } else { qCDebug(ClientLogger) << "Setting to make time"; m_scheduleView->setTime(m_makeTime); } } } /** * @brief CDayWindow::updateHeight 更新全天和é�žå…¨å¤©é«˜åº¦ */ void CDayWindow::updateHeight() { qCDebug(ClientLogger) << "CDayWindow::updateHeight"; m_scheduleView->updateHeight(); } /** * @brief CDayWindow::setCurrentDateTime 设置当å‰�æ—¶é—´ * @param currentDate */ void CDayWindow::setCurrentDateTime(const QDateTime ¤tDate) { qCDebug(ClientLogger) << "CDayWindow::setCurrentDateTime, date:" << currentDate; //设置当å‰�æ—¶é—´ CScheduleBaseWidget::setCurrentDateTime(currentDate); //更新当å‰�æ—¶é—´ m_scheduleView->setCurrentDate(getCurrendDateTime()); } /** * @brief CDayWindow::setYearData 设置选择时间年信æ�¯æ˜¾ç¤º */ void CDayWindow::setYearData() { qCDebug(ClientLogger) << "CDayWindow::setYearData"; QLocale locale; //判断是å�¦ä¸ºä¸­æ–‡çŽ¯å¢ƒ if (getShowLunar()) { m_YearLabel->setText(QString::number(getSelectDate().year()) + tr("Y") + QString::number(getSelectDate().month()) + tr("M") + QString::number(getSelectDate().day()) + tr("D")); } else { m_YearLabel->setText(locale.toString(getSelectDate(), "yyyy/M/d")); } } /** * @brief CDayWindow::updateShowDate 更新显示时间 * @param isUpdateBar */ void CDayWindow::updateShowDate(const bool isUpdateBar) { qCDebug(ClientLogger) << "CDayWindow::updateShowDate, isUpdateBar:" << isUpdateBar; Q_UNUSED(isUpdateBar) setYearData(); int w = m_scheduleView->width() - 72; m_scheduleView->setRange(w, 1032, getSelectDate(), getSelectDate()); //设置时间显示格å¼� m_scheduleView->setTimeFormat((m_calendarManager->getTimeShowType() ? "AP " : "") + m_calendarManager->getTimeFormat()); //获å�–需è¦�显示的时间 QVector _monthDate = m_calendarManager->getMonthDate(getSelectDate().year(), getSelectDate().month()); m_daymonthView->setShowDate(_monthDate, getSelectDate(), getCurrendDateTime().date()); //如果为中文环境则显示农历信æ�¯ if (getShowLunar()) { qCDebug(ClientLogger) << "Showing lunar, updating lunar info"; updateShowLunar(); } updateShowSchedule(); } /** * @brief CDayWindow::updateShowSchedule 更新日程显示 */ void CDayWindow::updateShowSchedule() { qCDebug(ClientLogger) << "CDayWindow::updateShowSchedule"; //获å�–一天的日程信æ�¯ QMap _weekScheduleInfo = gScheduleManager->getScheduleMap(getSelectDate(), getSelectDate()); //设置显示日程信æ�¯ m_scheduleView->setShowScheduleInfo(_weekScheduleInfo); //获å�–界é�¢æ˜¾ç¤ºå®šä½�æ—¶é—´ä½�ç½® setMakeTime(_weekScheduleInfo); QSet scheduleDate = gScheduleManager->getAllScheduleDate(); QVector monthFlag{}; QVector monthDate = m_calendarManager->getMonthDate(getSelectDate().year(), getSelectDate().month()); for (QDate date : monthDate) { monthFlag.push_back((scheduleDate.find(date) != scheduleDate.end())); } //设置日视图å�³ä¾§æœˆæ˜¾ç¤ºæ—¥æœŸæ˜¯å�¦æœ‰æ—¥ç¨‹ m_daymonthView->setHasScheduleFlag(monthFlag); } /** * @brief CDayWindow::updateShowLunar 更新显示农历信æ�¯ */ void CDayWindow::updateShowLunar() { qCDebug(ClientLogger) << "CDayWindow::updateShowLunar"; QDate currentDate = getSelectDate(); // Ensure lunar data is loaded for the current date ensureLunarDataLoaded(currentDate, currentDate); CaHuangLiDayInfo _huangLiInfo = getLunarInfo(); m_LunarLabel->setText(tr("Lunar") + _huangLiInfo.mLunarMonthName + _huangLiInfo.mLunarDayName); m_daymonthView->setHuangLiInfo(_huangLiInfo); } void CDayWindow::updateSearchScheduleInfo() { qCDebug(ClientLogger) << "CDayWindow::updateSearchScheduleInfo"; m_scheduleView->slotUpdateScene(); } /** * @brief CDayWindow::setSelectSearchScheduleInfo 设置选中日程 * @param info */ void CDayWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CDayWindow::setSelectSearchScheduleInfo"; if (info->allDay()) { qCDebug(ClientLogger) << "All day event, setting default time"; setTime(); } else { qCDebug(ClientLogger) << "Timed event, setting specific time"; m_scheduleView->setTime(info->dtStart().time()); } m_scheduleView->setSelectSchedule(info); } /** * @brief CDayWindow::deleteselectSchedule å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ */ void CDayWindow::deleteselectSchedule() { qCDebug(ClientLogger) << "CDayWindow::deleteselectSchedule"; m_scheduleView->slotDeleteitem(); } void CDayWindow::setSearchWFlag(bool flag) { qCDebug(ClientLogger) << "CDayWindow::setSearchWFlag, flag:" << flag; m_searchFlag = flag; m_daymonthView->setSearchFlag(flag); } void CDayWindow::setLunarVisible(bool state) { qCDebug(ClientLogger) << "CDayWindow::setLunarVisible, state:" << state; m_LunarLabel->setVisible(state); m_SolarDay->setVisible(state); m_scheduleView->setLunarVisible(state); m_daymonthView->setLunarVisible(state); } void CDayWindow::initUI() { qCDebug(ClientLogger) << "CDayWindow::initUI"; QHBoxLayout *titleLayout = new QHBoxLayout; titleLayout->setContentsMargins(0, 0, 0, 0); titleLayout->setSpacing(0); titleLayout->setContentsMargins(10, 9, 0, 3); m_YearLabel = new QLabel(); m_YearLabel->setMinimumHeight(DDEDayCalendar::D_YLabelHeight); QFont labelF; labelF.setWeight(QFont::Medium); labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(labelF); DPalette ypa = m_YearLabel->palette(); ypa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(ypa); titleLayout->addWidget(m_YearLabel); m_dialogIconButton->setFocusPolicy(Qt::NoFocus); titleLayout->addWidget(m_dialogIconButton); m_LunarLabel = new QLabel(); titleLayout->addSpacing(15); m_LunarLabel->setFixedHeight(DDEDayCalendar::D_YLabelHeight); labelF.setPixelSize(DDECalendar::FontSizeFourteen); m_LunarLabel->setFont(labelF); m_LunarLabel->setAlignment(Qt::AlignCenter); DPalette lpa = m_LunarLabel->palette(); lpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_LunarLabel->setPalette(lpa); titleLayout->addWidget(m_LunarLabel); m_SolarDay = new QLabel(); labelF.setPixelSize(DDECalendar::FontSizeTen); m_SolarDay->setFixedHeight(DDEDayCalendar::D_YLabelHeight); m_SolarDay->setFont(labelF); m_SolarDay->setAlignment(Qt::AlignCenter); DPalette spa = m_SolarDay->palette(); spa.setColor(DPalette::WindowText, Qt::red); m_SolarDay->setPalette(spa); titleLayout->addWidget(m_SolarDay); titleLayout->addStretch(); QVBoxLayout *leftLayout = new QVBoxLayout; leftLayout->setContentsMargins(0, 0, 0, 0); leftLayout->setSpacing(0); m_scheduleView = new CScheduleView(this, ScheduleViewPos::DayPos); m_scheduleView->setviewMargin(72, 109, 20, 0); m_scheduleView->setCurrentDate(getCurrendDateTime()); leftLayout->addLayout(titleLayout); leftLayout->addWidget(m_scheduleView); m_verline = new DVerticalLine; m_verline->setFixedWidth(2); m_daymonthView = new CDayMonthView(this); QHBoxLayout *leftMainLayout = new QHBoxLayout; leftMainLayout->setContentsMargins(0, 0, 0, 0); leftMainLayout->setSpacing(1); leftMainLayout->setContentsMargins(0, 0, 0, 0); leftMainLayout->addLayout(leftLayout); leftMainLayout->addWidget(m_verline); leftMainLayout->addWidget(m_daymonthView); leftMainLayout->setStretchFactor(leftLayout, 3); leftMainLayout->setStretchFactor(m_verline, 1); leftMainLayout->setStretchFactor(m_daymonthView, 2); m_leftground = new CustomFrame(); m_leftground->setRoundState(true, true, true, true); m_leftground->setLayout(leftMainLayout); m_leftground->setBColor("#FFFFFF"); m_mainLayout = new QHBoxLayout; m_mainLayout->setContentsMargins(0, 0, 0, 0); m_mainLayout->setSpacing(0); m_mainLayout->addWidget(m_leftground); this->setLayout(m_mainLayout); } void CDayWindow::initConnection() { qCDebug(ClientLogger) << "CDayWindow::initConnection"; connect(m_daymonthView, &CDayMonthView::signalIsDragging, this, &CDayWindow::slotIsDragging); connect(m_daymonthView, &CDayMonthView::signalChangeSelectDate, this, &CDayWindow::slotChangeSelectDate); connect(m_scheduleView, &CScheduleView::signalSwitchPrePage, this, &CDayWindow::slotSwitchPrePage); connect(m_scheduleView, &CScheduleView::signalSwitchNextPage, this, &CDayWindow::slotSwitchNextPage); } /** * @brief CDayWindow::setMakeTime 界é�¢æ˜¾ç¤ºå®šä½�æ—¶é—´ä½�ç½® * @param info */ void CDayWindow::setMakeTime(QMap &info) { qCDebug(ClientLogger) << "CDayWindow::setMakeTime"; if (info.contains(getSelectDate())) { DSchedule::List _scheduleVector = info[getSelectDate()]; //设置当å‰�第一个é�žå…¨å¤©é»˜è®¤æ—¶é—´ QDateTime firstscheduleBeginTime(getSelectDate().addDays(1), QTime(0, 0, 0)); //获å�–é�žå…¨å¤©æ—¥ç¨‹ for (int i = 0 ; i < _scheduleVector.size(); ++i) { if (!_scheduleVector.at(i)->allDay()) { if (firstscheduleBeginTime > _scheduleVector.at(i)->dtStart()) { firstscheduleBeginTime = _scheduleVector.at(i)->dtStart(); } } } //如果为默认时间则表示当天没有é�žå…¨å¤©æ—¥ç¨‹ if (firstscheduleBeginTime.date() > getSelectDate()) { qCDebug(ClientLogger) << "No non-all-day events, setting default time"; m_makeTime.setHMS(12, 30, 0, 0); } else if (firstscheduleBeginTime.date() == getSelectDate()) { qCDebug(ClientLogger) << "Found non-all-day events, setting make time"; m_makeTime = firstscheduleBeginTime.time(); //设置定ä½�的时间ä½�ç½®,原始时间太é� ä¸‹,现å�‘上å��ç§»2å°�æ—¶ QTime onTime = m_makeTime; if (onTime.hour() + 4 >= 24) { onTime = QTime(20, 0); } else { onTime = onTime.addSecs(14400); } m_makeTime = onTime; } else { qCDebug(ClientLogger) << "Setting default make time"; m_makeTime.setHMS(0, 0, 0, 0); } } else { qCDebug(ClientLogger) << "No schedules for selected date, setting default time"; //将定ä½�的默认时间显示出8点 m_makeTime.setHMS(12, 30, 0, 0); } } void CDayWindow::slotScheduleHide() { qCDebug(ClientLogger) << "CDayWindow::slotScheduleHide"; m_scheduleView->slotScheduleShow(false); } /** * @brief CDayWindow::slotChangeSelectDate 更新选择时间 * @param date */ void CDayWindow::slotChangeSelectDate(const QDate &date) { qCDebug(ClientLogger) << "CDayWindow::slotChangeSelectDate, date:" << date; if (setSelectDate(date, true)) { qCDebug(ClientLogger) << "Date set successfully, updating view"; //éš�è—�日程悬浮框 slotScheduleHide(); updateShowDate(); setTime(); } } void CDayWindow::slotIsDragging(bool &isDragging) { qCDebug(ClientLogger) << "CDayWindow::slotIsDragging"; isDragging = m_scheduleView->IsDragging(); } /** * @brief CDayWindow::slotSwitchPrePage 切æ�¢é€‰æ‹©æ—¶é—´ */ void CDayWindow::slotSwitchPrePage() { qCDebug(ClientLogger) << "CDayWindow::slotSwitchPrePage"; slotChangeSelectDate(getSelectDate().addDays(-1)); } /** * @brief CDayWindow::slotSwitchNextPage 切æ�¢é€‰æ‹©æ—¶é—´ */ void CDayWindow::slotSwitchNextPage() { qCDebug(ClientLogger) << "CDayWindow::slotSwitchNextPage"; slotChangeSelectDate(getSelectDate().addDays(1)); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/dayWidget/daywindow.h000066400000000000000000000047261523260663500307640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DAYWINDOW_H #define DAYWINDOW_H #include "dschedule.h" #include "huangliData/dbusdatastruct.h" #include "cschedulebasewidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CDayMonthView; class CScheduleView; class CScheduleSearchView; class QHBoxLayout; class CustomFrame; class CDayWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CDayWindow(QWidget *parent = nullptr); ~CDayWindow() override; void setSearchWFlag(bool flag); void setLunarVisible(bool state); void setTheMe(int type = 0); //设置显示的时间ä½�ç½® void setTime(const QTime time = QTime()); //更新全天和é�žå…¨å¤©é«˜åº¦ void updateHeight(); //设置当å‰�æ—¶é—´ void setCurrentDateTime(const QDateTime ¤tDate) override; //设置选择时间年信æ�¯æ˜¾ç¤º void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信æ�¯ void updateShowLunar() override; //更新界é�¢æ�œç´¢æ—¥ç¨‹æ˜¾ç¤º void updateSearchScheduleInfo() override; //设置选中æ�œç´¢æ—¥ç¨‹ void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; //删除选中日程 void deleteselectSchedule() override; private: void initUI(); void initConnection(); //获å�–界é�¢æ˜¾ç¤ºå®šä½�æ—¶é—´ä½�ç½® void setMakeTime(QMap &info); public slots: void slotScheduleHide(); //更新选择时间 void slotChangeSelectDate(const QDate &date); private slots: void slotIsDragging(bool &isDragging); //切æ�¢é€‰æ‹©æ—¶é—´ void slotSwitchPrePage(); //切æ�¢é€‰æ‹©æ—¶é—´ void slotSwitchNextPage(); signals: //拖拽结æ�Ÿä¿¡å�· void signalNewSlot(); private: CDayMonthView *m_daymonthView = nullptr; CustomFrame *m_leftground = nullptr; DVerticalLine *m_verline = nullptr; QLabel *m_YearLabel = nullptr; QLabel *m_LunarLabel = nullptr; QLabel *m_SolarDay = nullptr; CScheduleView *m_scheduleView = nullptr; QString m_searchText; bool m_searchFlag = false; QHBoxLayout *m_mainLayout = nullptr; QTime m_makeTime{}; //界é�¢æ˜¾ç¤ºå®šä½�æ—¶é—´ä½�ç½® }; #endif // YEARWINDOW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/000077500000000000000000000000001523260663500271455ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthdayview.cpp000066400000000000000000000374051523260663500324000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthdayview.h" #include "scheduledatamanage.h" #include "constants.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CMonthDayView::CMonthDayView(QWidget *parent) : DFrame(parent) , m_touchGesture(this) { qCDebug(ClientLogger) << "CMonthDayView::CMonthDayView"; QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setContentsMargins(0, 0, 0, 0); hBoxLayout->setSpacing(0); hBoxLayout->setContentsMargins(10, 0, 10, 0); m_monthWidget = new CMonthWidget(this); hBoxLayout->addWidget(m_monthWidget); setLayout(hBoxLayout); setFrameRounded(true); setLineWidth(0); setWindowFlags(Qt::FramelessWindowHint); connect(m_monthWidget, &CMonthWidget::signalsSelectDate, this, &CMonthDayView::signalsSelectDate); } CMonthDayView::~CMonthDayView() { qCDebug(ClientLogger) << "CMonthDayView::~CMonthDayView"; } /** * @brief CMonthDayView::setSelectDate 设置选择时间 * @param date */ void CMonthDayView::setSelectDate(const QDate &date) { qCDebug(ClientLogger) << "CMonthDayView::setSelectDate, date:" << date; m_selectDate = date; for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { m_days[i] = m_selectDate.addMonths(i - 5); } m_monthWidget->setDate(m_days); update(); } /** * @brief CMonthDayView::setTheMe 设置主题颜色 * @param type */ void CMonthDayView::setTheMe(int type) { qCDebug(ClientLogger) << "CMonthDayView::setTheMe, type:" << type; QColor frameColor; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; frameColor = "#FFFFFF"; } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; frameColor = "#FFFFFF"; frameColor.setAlphaF(0.05); } DPalette aniPa = palette(); aniPa.setColor(DPalette::Window, frameColor); setPalette(aniPa); setBackgroundRole(DPalette::Window); CMonthRect::setTheMe(type); } void CMonthDayView::setSearchflag(bool flag) { qCDebug(ClientLogger) << "CMonthDayView::setSearchflag, flag:" << flag; m_searchFlag = flag; } void CMonthDayView::wheelEvent(QWheelEvent *e) { // qCDebug(ClientLogger) << "CMonthDayView::wheelEvent"; //如果滚动为左å�³åˆ™è§¦å�‘ä¿¡å�· if (e->angleDelta().x() != 0) { // qCDebug(ClientLogger) << "Moving horizontally"; emit signalAngleDelta(e->angleDelta().x()); } else { // qCDebug(ClientLogger) << "Moving vertically"; emit signalAngleDelta(e->angleDelta().y()); } } bool CMonthDayView::event(QEvent *e) { // qCDebug(ClientLogger) << "CMonthDayView::event"; if (m_touchGesture.event(e)) { //获å�–触摸状æ€� switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { // qCDebug(ClientLogger) << "Sliding gesture detected"; //在滑动状æ€�如果å�¯ä»¥æ›´æ–°æ•°æ�®åˆ™åˆ‡æ�¢æœˆä»½ if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: qCDebug(ClientLogger) << "Moving to previous month"; emit signalAngleDelta(-1); break; case touchGestureOperation::T_RIGHT: qCDebug(ClientLogger) << "Moving to next month"; emit signalAngleDelta(1); break; default: break; } } break; } default: break; } return true; } else { return DFrame::event(e); } } /** * @brief CMonthWidget 构造函数 * @param parent 父类 */ CMonthWidget::CMonthWidget(QWidget *parent) : QWidget(parent) , m_isFocus(false) { qCDebug(ClientLogger) << "CMonthWidget::CMonthWidget"; for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { CMonthRect *monthrect = new CMonthRect(this); m_MonthItem.append(monthrect); } //获å�–Tab焦点 setFocusPolicy(Qt::StrongFocus); } CMonthWidget::~CMonthWidget() { qCDebug(ClientLogger) << "CMonthWidget::~CMonthWidget"; for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { CMonthRect *monthrect = m_MonthItem.at(i); delete monthrect; } m_MonthItem.clear(); } void CMonthWidget::setDate(const QDate date[12]) { qCDebug(ClientLogger) << "CMonthWidget::setDate"; for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { m_MonthItem.at(i)->setDate(date[i]); } CMonthRect::setSelectRect(m_MonthItem.at(5)); update(); } void CMonthWidget::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::resizeEvent"; Q_UNUSED(event); updateSize(); } void CMonthWidget::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::mousePressEvent"; if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸转æ�¢åˆ™è®¾ç½®è§¦æ‘¸çжæ€�和触摸开始å��æ ‡ m_touchState = 1; m_touchBeginPoint = event->pos(); QWidget::mousePressEvent(event); return; } if (event->button() == Qt::RightButton) return; m_isFocus = false; mousePress(event->pos()); } void CMonthWidget::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::paintEvent"; Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; for (int i = 0; i < m_MonthItem.size(); ++i) { m_MonthItem.at(i)->paintItem(&painter, m_MonthItem.at(i)->rect(), m_isFocus); } } void CMonthWidget::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::mouseReleaseEvent"; if (event->source() == Qt::MouseEventSynthesizedByQt) { if (m_touchState == 1) { //如果为触摸且状æ€�为点击则为触摸点击 mousePress(event->pos()); m_touchState = 0; } QWidget::mouseReleaseEvent(event); } } void CMonthWidget::mouseMoveEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::mouseMoveEvent"; if (event->source() == Qt::MouseEventSynthesizedByQt) { QPoint currentPoint = event->pos(); //如果移动è·�离大与5则为触摸移动状æ€� if (QLineF(m_touchBeginPoint, currentPoint).length() > 5) { m_touchState = 2; } QWidget::mouseMoveEvent(event); } } void CMonthWidget::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::keyPressEvent, key:" << event->key(); //获å�–当å‰�选择时间 QDate selectDate = CMonthRect::getSelectRect()->getDate(); //åˆ�始化需è¦�设置的时间 QDate setdate = selectDate; switch (event->key()) { case Qt::Key_Left: { // qCDebug(ClientLogger) << "Moving to previous month"; setdate = selectDate.addMonths(-1); } break; case Qt::Key_Right: { // qCDebug(ClientLogger) << "Moving to next month"; setdate = selectDate.addMonths(1); } break; default: QWidget::keyPressEvent(event); } if (selectDate != setdate) { // qCDebug(ClientLogger) << "Date changed by key press, updating view"; //æ›´æ–°æ—¶é—´ updateShowDate(setdate); //设置更新å�Žçš„æ—¶é—´å¹¶æ›´æ–°ç•Œé�¢ setDate(m_days); emit signalsSelectDate(setdate); } } void CMonthWidget::focusInEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::focusInEvent, reason:" << event->reason(); QWidget::focusInEvent(event); switch (event->reason()) { case Qt::TabFocusReason: case Qt::BacktabFocusReason: case Qt::ActiveWindowFocusReason: // qCDebug(ClientLogger) << "Focus in"; m_isFocus = true; break; default: // qCDebug(ClientLogger) << "Focus out"; m_isFocus = false; break; }; update(); } void CMonthWidget::focusOutEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CMonthWidget::focusOutEvent"; QWidget::focusOutEvent(event); m_isFocus = false; update(); } void CMonthWidget::mousePress(const QPoint &point) { // qCDebug(ClientLogger) << "CMonthWidget::mousePress, point:" << point; int itemindex = getMousePosItem(point); if (!(itemindex < 0)) { // qCDebug(ClientLogger) << "Clicked on item:" << itemindex; if (!withinTimeFrame(m_MonthItem.at(itemindex)->getDate())) { qCDebug(ClientLogger) << "Clicked item is out of valid time frame"; return; } CMonthRect::setSelectRect(m_MonthItem.at(itemindex)); emit signalsSelectDate(m_MonthItem.at(itemindex)->getDate()); } update(); } /** * @brief CMonthWidget::updateSize æ›´æ–°item大å°� */ void CMonthWidget::updateSize() { qCDebug(ClientLogger) << "CMonthWidget::updateSize"; qreal w = this->width() / m_MonthItem.size(); for (int i = 0; i < m_MonthItem.size(); ++i) { m_MonthItem.at(i)->setRect(i * w, 0, w, this->height()); } update(); } /** * @brief CMonthWidget::getMousePosItem 获å�–鼠标点击的区域编å�· * @param pos * @return */ int CMonthWidget::getMousePosItem(const QPointF &pos) { // qCDebug(ClientLogger) << "CMonthWidget::getMousePosItem, pos:" << pos; int res = -1; for (int i = 0 ; i < m_MonthItem.size(); ++i) { if (m_MonthItem.at(i)->rect().contains(pos)) { res = i; break; } } return res; } /** * @brief CMonthWidget::updateShowDate æ ¹æ�®é€‰æ‹©æ—¶é—´æ›´æ–°æ˜¾ç¤ºçš„æœˆä»½ * @param selectDate */ void CMonthWidget::updateShowDate(const QDate &selectDate) { qCDebug(ClientLogger) << "CMonthWidget::updateShowDate, selectDate:" << selectDate; for (int i = 0; i < DDEMonthCalendar::MonthNumOfYear; ++i) { m_days[i] = selectDate.addMonths(i - 5); } } int CMonthRect::m_themetype ; qreal CMonthRect::m_DevicePixelRatio; QColor CMonthRect::m_defaultTextColor; QColor CMonthRect::m_backgrounddefaultColor ; QColor CMonthRect::m_currentDayTextColor; QColor CMonthRect::m_backgroundcurrentDayColor; QColor CMonthRect::m_fillColor; QFont CMonthRect::m_dayNumFont; CMonthRect *CMonthRect::m_SelectRect = nullptr; CMonthRect::CMonthRect(QWidget *parent) : m_parentWidget(parent) { // qCDebug(ClientLogger) << "CMonthRect::CMonthRect"; m_dayNumFont.setPixelSize(DDECalendar::FontSizeSixteen); m_dayNumFont.setWeight(QFont::Light); } /** * @brief CMonthRect::setDate 设置时间 * @param date */ void CMonthRect::setDate(const QDate &date) { // qCDebug(ClientLogger) << "CMonthRect::setDate, date:" << date; m_Date = date; } /** * @brief CMonthRect::getDate 获å�–æ—¶é—´ * @return */ QDate CMonthRect::getDate() const { // qCDebug(ClientLogger) << "CMonthRect::getDate"; return m_Date; } /** * @brief CMonthRect::rect 获å�–矩阵大å°� * @return */ QRectF CMonthRect::rect() const { // qCDebug(ClientLogger) << "CMonthRect::rect"; return m_rect; } /** * @brief CMonthRect::setRect 设置矩阵大å°� * @param rect */ void CMonthRect::setRect(const QRectF &rect) { // qCDebug(ClientLogger) << "CMonthRect::setRect, rect:" << rect; m_rect = rect; } /** * @brief CMonthRect::setRect 设置矩阵大å°� * @param x * @param y * @param w * @param h */ void CMonthRect::setRect(qreal x, qreal y, qreal w, qreal h) { // qCDebug(ClientLogger) << "CMonthRect::setRect, x:" << x << "y:" << y << "w:" << w << "h:" << h; m_rect.setRect(x, y, w, h); } /** * @brief CMonthRect::paintItem 绘制 * @param painter * @param rect */ void CMonthRect::paintItem(QPainter *painter, const QRectF &rect, bool drawFocus) { // qCDebug(ClientLogger) << "CMonthRect::paintItem"; m_selectColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if ( !withinTimeFrame(m_Date)) return; const bool isCurrentDay = (m_Date.month() == QDate::currentDate().month() && m_Date.year() == QDate::currentDate().year()); painter->setPen(Qt::SolidLine); const QString dayNum = QString::number(m_Date.month()); if (m_SelectRect == this) { // qCDebug(ClientLogger) << "Drawing selected month"; QRectF fillRect((rect.width() - 36) / 2 + rect.x() + 6, (rect.height() - 36) / 2 + 7 + rect.y(), 24, 24); painter->setBrush(QBrush(m_selectColor)); painter->setPen(Qt::NoPen); painter->drawEllipse(fillRect); //如果有焦点,绘制tab选中效果 if (drawFocus) { // qCDebug(ClientLogger) << "Drawing focus rect"; QPen pen; pen.setWidth(2); pen.setColor(m_selectColor); painter->setPen(pen); //在原有的选中效果外é�¢å†�绘制一圈 QRectF focusRect(fillRect.x() - 2, fillRect.y() - 2, fillRect.width() + 4, fillRect.height() + 4); painter->setBrush(Qt::NoBrush); painter->drawEllipse(focusRect); } painter->setRenderHint(QPainter::Antialiasing); painter->setPen(m_currentDayTextColor); painter->setFont(m_dayNumFont); painter->drawText(rect, Qt::AlignCenter, dayNum); } else { // qCDebug(ClientLogger) << "Drawing normal month"; if (isCurrentDay) { painter->setPen(m_backgroundcurrentDayColor); } else { painter->setPen(m_defaultTextColor); } painter->setFont(m_dayNumFont); painter->drawText(rect, Qt::AlignCenter, dayNum); } } /** * @brief CMonthRect::setDevicePixelRatio 设置设备缩放比例 * @param pixel */ void CMonthRect::setDevicePixelRatio(const qreal pixel) { // qCDebug(ClientLogger) << "CMonthRect::setDevicePixelRatio, pixel:" << pixel; m_DevicePixelRatio = pixel; } /** * @brief CMonthRect::setTheMe 设置主题 * @param type */ void CMonthRect::setTheMe(int type) { qCDebug(ClientLogger) << "CMonthRect::setTheMe, type:" << type; m_themetype = type; QColor frameColor; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; m_defaultTextColor = Qt::black; m_backgrounddefaultColor = Qt::white; m_currentDayTextColor = Qt::white; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#FFFFFF"; frameColor = m_fillColor; m_fillColor.setAlphaF(0); } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; m_defaultTextColor = "#C0C6D4"; QColor framecolor = Qt::black; framecolor.setAlphaF(0.5); m_backgrounddefaultColor = framecolor; m_currentDayTextColor = "#C0C6D4"; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#FFFFFF"; m_fillColor.setAlphaF(0.05); frameColor = m_fillColor; m_fillColor.setAlphaF(0); } } /** * @brief CMonthRect::setSelectRect 设置选择的矩阵 * @param selectRect */ void CMonthRect::setSelectRect(CMonthRect *selectRect) { // qCDebug(ClientLogger) << "CMonthRect::setSelectRect"; m_SelectRect = selectRect; } /** * @brief CMonthRect::getSelectRect 获å�–选择的矩阵 * @return */ CMonthRect *CMonthRect::getSelectRect() { // qCDebug(ClientLogger) << "CMonthRect::getSelectRect"; return m_SelectRect; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthdayview.h000066400000000000000000000104701523260663500320360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHDAYVIEW_H #define MONTHDAYVIEW_H #include "../touchgestureoperation.h" #include #include #include DWIDGET_USE_NAMESPACE class CMonthWidget; /** * @brief The CMonthDayView class 月视图月份自定义控件 */ class CMonthDayView : public DFrame { Q_OBJECT public: explicit CMonthDayView(QWidget *parent = nullptr); ~CMonthDayView() override; //设置选择时间 void setSelectDate(const QDate &date); //设置主题颜色 void setTheMe(int type = 0); void setSearchflag(bool flag); protected: void wheelEvent(QWheelEvent *e) override; bool event(QEvent *e) override; signals: //切æ�¢æœˆä»½ä¿®æ”¹é€‰æ‹©æ—¶é—´ void signalsSelectDate(QDate date); /** * @brief signalAngleDelta å�‘é€�滚动信å�·æ»šåŠ¨ç›¸å¯¹é‡� * @param delta 滚动相对é‡� */ void signalAngleDelta(int delta); private: /** * @brief m_touchGesture 触摸手势处ç�† */ touchGestureOperation m_touchGesture; CMonthWidget *m_monthWidget = nullptr; QDate m_selectDate; QDate m_days[12]; int m_fixwidth = 200; int m_realwidth = 100; bool m_searchFlag = false; }; class CMonthRect; class CMonthWidget : public QWidget { Q_OBJECT public: explicit CMonthWidget(QWidget *parent = nullptr); ~CMonthWidget() override; void setDate(const QDate date[12]); protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *event) override; /** * @brief mouseReleaseEvent 鼠标释放事件 * @param event 鼠标事件 */ void mouseReleaseEvent(QMouseEvent *event) override; /** * @brief mouseMoveEvent 鼠标移动事件,设置hover状æ€� * @param event 鼠标事件 */ void mouseMoveEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; private: void mousePress(const QPoint &point); //æ›´æ–°item大å°� void updateSize(); //获å�–鼠标点击的区域编å�· int getMousePosItem(const QPointF &pos); //æ ¹æ�®é€‰æ‹©æ—¶é—´æ›´æ–°æ˜¾ç¤ºçš„æœˆä»½ void updateShowDate(const QDate &selectDate); signals: void signalsSelectDate(QDate date); private: QVector m_MonthItem; QDate m_days[12]; //触摸状æ€� 0:原始 1:点击 2:移动 int m_touchState {0}; //触摸点击å��æ ‡ QPoint m_touchBeginPoint; bool m_isFocus; }; class CMonthRect { public: explicit CMonthRect(QWidget *parent = nullptr); //设置时间 void setDate(const QDate &date); //获å�–æ—¶é—´ QDate getDate()const; //获å�–矩阵大å°� QRectF rect() const; //设置矩阵大å°� void setRect(const QRectF &rect); //设置矩阵大å°� inline void setRect(qreal x, qreal y, qreal w, qreal h); //绘制 void paintItem(QPainter *painter, const QRectF &rect, bool drawFocus = false); //设置设备缩放比例 static void setDevicePixelRatio(const qreal pixel); //设置主题 static void setTheMe(int type); //设置选择的矩阵 static void setSelectRect(CMonthRect *selectRect); //获å�–选择的矩阵 static CMonthRect *getSelectRect(); private: QRectF m_rect; QDate m_Date; static int m_themetype ; static qreal m_DevicePixelRatio; static QColor m_defaultTextColor; static QColor m_backgrounddefaultColor; static QColor m_currentDayTextColor; static QColor m_backgroundcurrentDayColor; static QColor m_fillColor; static QFont m_dayNumFont; static CMonthRect *m_SelectRect; QColor m_selectColor; QWidget *m_parentWidget; }; #endif // MONTDAYVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthscheduleview.cpp000066400000000000000000000454271523260663500334220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthscheduleview.h" #include "monthview.h" #include "schedulectrldlg.h" #include "scheduledlg.h" #include "myscheduleview.h" #include "graphicsItem/cmonthschedulenumitem.h" #include "commondef.h" #include #include #include #include #include #include DGUI_USE_NAMESPACE const int schedule_Item_Y = 31; //日程item的相对于该天的高度差 CMonthScheduleView::CMonthScheduleView(QWidget *parent, QGraphicsScene *scene) : QObject(parent) , m_Scene(scene) { qCDebug(ClientLogger) << "CMonthScheduleView::CMonthScheduleView"; for (int i = 0; i < 6; ++i) { CWeekScheduleView *weekSchedule = new CWeekScheduleView(this); m_weekSchedule.append(weekSchedule); } slotFontChange(); } CMonthScheduleView::~CMonthScheduleView() { // qCDebug(ClientLogger) << "CMonthScheduleView::~CMonthScheduleView"; } void CMonthScheduleView::setallsize(int w, int h, int left, int top, int buttom, int itemHeight) { qCDebug(ClientLogger) << "CMonthScheduleView::setallsize, width:" << w << "height:" << h; m_width = w; m_height = h; m_bottomMargin = buttom; m_leftMargin = left; m_topMargin = top; m_cNum = static_cast(((m_height - m_topMargin - m_bottomMargin) / 6.0 + 0.5 - schedule_Item_Y) / (itemHeight + 1)); } void CMonthScheduleView::setData(QMap &data, int currentMonth) { qCDebug(ClientLogger) << "CMonthScheduleView::setData, data count:" << data.count() << "currentMonth:" << currentMonth; m_data = data; m_currentMonth = currentMonth; updateData(); } void CMonthScheduleView::slotFontChange() { qCDebug(ClientLogger) << "CMonthScheduleView::slotFontChange"; QFont font; DFontSizeManager::instance()->setFontGenericPixelSize( static_cast(DFontSizeManager::instance()->fontPixelSize(qGuiApp->font()))); font = DFontSizeManager::instance()->t8(font); QFontMetrics fm(font); int h = fm.height(); if (m_ItemHeight != h) { qCDebug(ClientLogger) << "Font height changed, updating data"; m_ItemHeight = h + 1; updateData(); } } void CMonthScheduleView::slotStateChange(bool bState) { qCDebug(ClientLogger) << "CMonthScheduleView::slotStateChange, state:" << bState; if(bState) { qCDebug(ClientLogger) << "Hiding schedule items"; //日程显示 for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule[i]->hideItem(); } } } /** * @brief CMonthScheduleView::updateData 更新日程数æ�® */ void CMonthScheduleView::updateData() { qCDebug(ClientLogger) << "CMonthScheduleView::updateData"; //清空日程显示 for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule[i]->clearItem(); } // Protect against invalid data during initialization if (m_data.count() != DDEMonthCalendar::ItemSizeOfMonthDay || m_cNum < 1) { qCDebug(ClientLogger) << "Data count or cNum is invalid, returning"; return; } //开始结æ�Ÿæ—¶é—´ QMap::iterator _iter = m_data.begin(); QDate begindate = _iter.key(); _iter += (m_data.size() - 1); QDate enddate = _iter.key(); m_beginDate = begindate; m_endDate = enddate; for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule[i]->setHeight(m_ItemHeight, qRound((m_height - m_topMargin - m_bottomMargin) / 6.0 - schedule_Item_Y)); m_weekSchedule[i]->setData(m_data, begindate.addDays(i * 7), begindate.addDays(i * 7 + 6)); QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::updateHeight() { qCDebug(ClientLogger) << "CMonthScheduleView::updateHeight"; for (int j = 0; j < m_weekSchedule.size(); ++j) { for (int i = 0; i < m_weekSchedule[j]->getScheduleShowItem().count(); i++) { m_weekSchedule[j]->getScheduleShowItem().at(i)->update(); } } } QVector CMonthScheduleView::getScheduleShowItem() const { qCDebug(ClientLogger) << "CMonthScheduleView::getScheduleShowItem"; QVector m_scheduleShowItem; for (int j = 0; j < m_weekSchedule.size(); ++j) { for (int i = 0; i < m_weekSchedule[j]->getScheduleShowItem().count(); i++) { m_scheduleShowItem.append(m_weekSchedule[j]->getScheduleShowItem().at(i)); } } return m_scheduleShowItem; } void CMonthScheduleView::updateDate(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CMonthScheduleView::updateDate"; for (int i = 0; i < m_weekSchedule.size(); ++i) { if (m_weekSchedule.at(i)->addData(info)) { qCDebug(ClientLogger) << "Added data to week" << i; } else { qCDebug(ClientLogger) << "Failed to add data to week" << i << ", clearing and updating"; m_weekSchedule[i]->clearItem(); m_weekSchedule[i]->updateSchedule(true); }; QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::changeDate(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CMonthScheduleView::changeDate"; for (int i = 0; i < m_weekSchedule.size(); ++i) { m_weekSchedule.at(i)->changeDate(info); QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::updateDate(const int row, const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CMonthScheduleView::updateDate, row:" << row; for (int i = 0; i < m_weekSchedule.size(); ++i) { if (row == i) { m_weekSchedule.at(i)->addData(info); } else { m_weekSchedule[i]->clearItem(); m_weekSchedule[i]->updateSchedule(true); }; QVector> mSchedule = m_weekSchedule[i]->getMScheduleInfo(); updateDateShow(mSchedule, m_weekSchedule[i]->getScheduleShowItem()); } } void CMonthScheduleView::updateDateShow(QVector> &vCMDaySchedule, QVector &scheduleShowItem) { // qCDebug(ClientLogger) << "CMonthScheduleView::updateDateShow"; for (int i = 0; i < vCMDaySchedule.count(); i++) { for (int j = 0; j < vCMDaySchedule[i].count(); j++) { if (vCMDaySchedule[i].at(j).state) { createScheduleNumWidget(vCMDaySchedule[i].at(j), i + 1, scheduleShowItem); } else { createScheduleItemWidget(vCMDaySchedule[i].at(j), i + 1, scheduleShowItem); } } } } void CMonthScheduleView::createScheduleItemWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) { // qCDebug(ClientLogger) << "CMonthScheduleView::createScheduleItemWidget"; DSchedule::Ptr gd = info.tData; QPoint pos; int fw; int fh; computePos(cNum, info.bdate, info.edate, pos, fw, fh); CMonthScheduleItem *gwi = new CMonthScheduleItem(QRect(pos.x(), pos.y(), fw, fh), nullptr); m_Scene->addItem(gwi); gwi->setData(gd); QColor TransparentC = "#000000"; TransparentC.setAlphaF(0.05); scheduleShowItem.append(gwi); } void CMonthScheduleView::createScheduleNumWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) { // qCDebug(ClientLogger) << "CMonthScheduleView::createScheduleNumWidget"; int type = CScheduleDataManage::getScheduleDataManage()->getTheme(); CMonthScheduleNumItem *gwi = new CMonthScheduleNumItem(nullptr); QPoint pos; int fw; int fh; computePos(cNum, info.bdate, info.edate, pos, fw, fh); QColor gradientFromC = "#000000"; gradientFromC.setAlphaF(0.00); gwi->setColor(gradientFromC, gradientFromC); QFont font; gwi->setSizeType(DFontSizeManager::T8); if (type == 0 || type == 1) { QColor tc("#5E5E5E"); tc.setAlphaF(0.9); gwi->setText(tc, font); } else { QColor tc("#798190"); tc.setAlphaF(1); gwi->setText(tc, font); } m_Scene->addItem(gwi); gwi->setRect(pos.x(), pos.y(), fw, fh); gwi->setData(info.num); gwi->setDate(info.bdate); scheduleShowItem.append(gwi); } void CMonthScheduleView::computePos(int cNum, QDate bgeindate, QDate enddate, QPoint &pos, int &fw, int &fh) { // qCDebug(ClientLogger) << "CMonthScheduleView::computePos"; int brow = static_cast((m_beginDate.daysTo(bgeindate)) / DDEMonthCalendar::AFewDaysOfWeek); int bcol = (m_beginDate.daysTo(bgeindate)) % DDEMonthCalendar::AFewDaysOfWeek; int ecol = (m_beginDate.daysTo(enddate)) % DDEMonthCalendar::AFewDaysOfWeek; fw = static_cast((ecol - bcol + 1) * ((m_width - m_leftMargin) / 7.0) - 11); fh = m_ItemHeight + 2; int x = static_cast(m_leftMargin + bcol * ((m_width - m_leftMargin) / 7.0) + 5); //æ ¹æ�®UI图调整itemå��æ ‡ int y = static_cast(m_topMargin + ((m_height - m_topMargin - m_bottomMargin) / 6.0) * brow + schedule_Item_Y + (cNum - 1) * fh); pos = QPoint(x, y); } CWeekScheduleView::CWeekScheduleView(QObject *parent) : QObject(parent) , m_ScheduleHeight(22) , m_DayHeight(47) { qCDebug(ClientLogger) << "CWeekScheduleView::CWeekScheduleView"; setMaxNum(); } CWeekScheduleView::~CWeekScheduleView() { // qCDebug(ClientLogger) << "CWeekScheduleView::~CWeekScheduleView"; } void CWeekScheduleView::setData(QMap &data, const QDate &startDate, const QDate &stopDate) { qCDebug(ClientLogger) << "CWeekScheduleView::setData, from" << startDate << "to" << stopDate; //显示一周的日程 Q_ASSERT(startDate.daysTo(stopDate) == 6); m_ScheduleInfo.clear(); beginDate = startDate; endDate = stopDate; for (int i = 0 ; i <= beginDate.daysTo(endDate); ++i) { for (int j = 0; j < data[beginDate.addDays(i)].size(); ++j) { bool have = false; DSchedule::Ptr info = data[beginDate.addDays(i)].at(j); //过滤é‡�å¤�日程 for (DSchedule::Ptr p : m_ScheduleInfo) { if (p == info) { have = true; break; } } if (!have) { m_ScheduleInfo.append(info); } } } //设置日程显示列数 m_colum = static_cast(startDate.daysTo(stopDate) + 1); updateSchedule(true); } bool CWeekScheduleView::addData(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CWeekScheduleView::addData"; if(info.isNull()) { qCWarning(ClientLogger) << "Info is null, returning false"; return false; } if (info->dtStart().date().daysTo(endDate) >= 0 && beginDate.daysTo(info->dtEnd().date()) >= 0) { qCDebug(ClientLogger) << "Schedule is within date range, updating view"; clearItem(); updateSchedule(false, info); return true; } qCDebug(ClientLogger) << "Schedule is outside date range, returning false"; return false; } void CWeekScheduleView::changeDate(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CWeekScheduleView::changeDate"; int index = m_ScheduleInfo.indexOf(info); if (index < 0) { qCDebug(ClientLogger) << "Info not found, appending to schedule list"; m_ScheduleInfo.append(info); } else { qCDebug(ClientLogger) << "Info found, updating schedule at index" << index; m_ScheduleInfo[index] = info; } clearItem(); updateSchedule(true); } void CWeekScheduleView::setHeight(const int ScheduleHeight, const int dayHeight) { qCDebug(ClientLogger) << "CWeekScheduleView::setHeight, scheduleHeight:" << ScheduleHeight << "dayHeight:" << dayHeight; m_ScheduleHeight = ScheduleHeight; m_DayHeight = dayHeight; setMaxNum(); } void CWeekScheduleView::updateSchedule(const bool isNormalDisplay, const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CWeekScheduleView::updateSchedule, isNormalDisplay:" << isNormalDisplay; DSchedule::List schedulev; schedulev.clear(); schedulev = m_ScheduleInfo; if (isNormalDisplay) { Q_UNUSED(info); } else { schedulev.append(info); } QDate tbegindate, tenddate; QVector vMDaySchedule; m_ColumnScheduleCount.clear(); m_ColumnScheduleCount.fill(0, m_colum); for (int i = 0; i < schedulev.size(); ++i) { //日程时间é‡�新标定 tbegindate = schedulev.at(i)->dtStart().date(); tenddate = schedulev.at(i)->dtEnd().date(); if (tenddate < beginDate || tbegindate > endDate) continue; if (tbegindate < beginDate) tbegindate = beginDate; if (tenddate > endDate) tenddate = endDate; //日程信æ�¯ MScheduleDateRangeInfo _rangeInfo; _rangeInfo.bdate = tbegindate; _rangeInfo.edate = tenddate; _rangeInfo.tData = schedulev.at(i); _rangeInfo.state = false; vMDaySchedule.append(_rangeInfo); qint64 pos = beginDate.daysTo(_rangeInfo.bdate); qint64 count = _rangeInfo.bdate.daysTo(_rangeInfo.edate); int j = static_cast(pos); for (; j < (pos + count + 1); ++j) { ++m_ColumnScheduleCount[j]; } } std::sort(vMDaySchedule.begin(), vMDaySchedule.end()); sortAndFilter(vMDaySchedule); } void CWeekScheduleView::clearItem() { // qCDebug(ClientLogger) << "CWeekScheduleView::clearItem"; for (int i = 0; i < m_scheduleShowItem.count(); i++) { delete m_scheduleShowItem[i]; } m_scheduleShowItem.clear(); } void CWeekScheduleView::hideItem() { qCDebug(ClientLogger) << "CWeekScheduleView::hideItem"; for (int i = 0; i < m_scheduleShowItem.count(); i++) { m_scheduleShowItem[i]->setVisible(false); } } void CWeekScheduleView::setMaxNum() { // qCDebug(ClientLogger) << "CWeekScheduleView::setMaxNum"; m_MaxNum = m_DayHeight / (m_ScheduleHeight + 1); } void CWeekScheduleView::mScheduleClear() { qCDebug(ClientLogger) << "CWeekScheduleView::mScheduleClear"; for (int i = 0; i < m_MScheduleInfo.size(); ++i) { m_MScheduleInfo[i].clear(); } m_MScheduleInfo.clear(); } void CWeekScheduleView::sortAndFilter(QVector &vMDaySchedule) { qCDebug(ClientLogger) << "CWeekScheduleView::sortAndFilter"; QVector> scheduleFill; QVector scheduf; //åˆ�始化 //m_colum列 scheduf.fill(false, m_colum); //m_MaxNum 行 scheduleFill.fill(scheduf, m_MaxNum); //标签起始ä½�ç½® int postion = 0; //标签结æ�Ÿä½�ç½® int end = 0; mScheduleClear(); for (int i = 0; i < vMDaySchedule.size(); ++i) { //获å�–èµ·å§‹ä½�ç½® postion = static_cast(beginDate.daysTo(vMDaySchedule.at(i).bdate)); //获å�–结æ�Ÿä½�ç½® end = static_cast(beginDate.daysTo(vMDaySchedule.at(i).edate)); //åˆ�始化当å‰�行 int row = 0; int pos = postion; //日程长度 int count = 0; int scheduleRow = row; for (; postion < end + 1; ++postion) { //如果当å‰�行等于最大显示行 if (row == m_MaxNum) { //åˆ�始化当å‰�行 row = 0; //åˆ�始化当å‰�ä½�ç½® pos = postion; } while (row < m_MaxNum) { if (m_MScheduleInfo.size() < (row + 1)) { RowScheduleInfo ms; m_MScheduleInfo.append(ms); } //如果该ä½�置没有被å� ç”¨ if (!scheduleFill[row][postion]) { //如果该列日程总数大于最大显m_MScheduleInfo示数且该显示行没有超过最大显示行 if ((m_ColumnScheduleCount[postion] > m_MaxNum) && (row >= m_MaxNum - 1)) { //å� ç”¨è¯¥ä½�ç½® scheduleFill[row][postion] = true; //如果该ä½�ç½®ä¸�为起始ä½�ç½® if (pos != postion) { addShowSchedule(pos, postion - 1, row, vMDaySchedule.at(i).tData); } //设置还有xxx项 MScheduleDateRangeInfo info; info.bdate = beginDate.addDays(postion); info.edate = info.bdate; info.num = m_ColumnScheduleCount[postion] - m_MaxNum + 1; info.state = true; m_MScheduleInfo[row].append(info); //将该ä½�置设为日程新的起始ä½�ç½® pos = postion; //从该列0行开始继续,因为for循环最å�Žä¼šè·³è½¬åˆ°ä¸‹ä¸€åˆ—,所以在这里--以ä¿�è¯�下次循环还在该列 --postion; row = 0; count = 0; } else { scheduleFill[row][postion] = true; ++count; scheduleRow = row; } break; } else { //如果有显示的日程 if (count > 0) { //如果该ä½�ç½®ä¸�为起始ä½�ç½® if (pos != postion) { addShowSchedule(pos, postion - 1, scheduleRow, vMDaySchedule.at(i).tData); } } ++row; } } } //如果开始ä½�ç½®å°�于7并且长度大于0,则添加显示日程 //开始ä½�ç½®0-6,显示长度1-7 if (pos < 7 && count > 0) { addShowSchedule(pos, postion - 1, scheduleRow, vMDaySchedule.at(i).tData); } } } void CWeekScheduleView::addShowSchedule(const int &startPos, const int &endPos, const int &addRow, const DSchedule::Ptr &addInfo) { qCDebug(ClientLogger) << "CWeekScheduleView::addShowSchedule, startPos:" << startPos << "endPos:" << endPos << "row:" << addRow; MScheduleDateRangeInfo scheduleInfo; //设置显示的开始日期 scheduleInfo.bdate = beginDate.addDays(startPos); //设置显示的结æ�Ÿæ—¥æœŸ scheduleInfo.edate = beginDate.addDays(endPos); //false表示该信æ�¯ä¸ºæ­£å¸¸æ—¥ç¨‹ä¿¡æ�¯ scheduleInfo.state = false; scheduleInfo.num = 0; //设置需è¦�显示的日程 scheduleInfo.tData = addInfo; //添加需è¦�显示的日程 m_MScheduleInfo[addRow].append(scheduleInfo); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthscheduleview.h000066400000000000000000000077151523260663500330650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHSCHEDULEVIEW_H #define MONTHSCHEDULEVIEW_H #include "dschedule.h" #include "scheduledaterangeinfo.h" #include "graphicsItem/draginfoitem.h" #include "graphicsItem/cmonthscheduleitem.h" #include #include #include DWIDGET_USE_NAMESPACE class CWeekScheduleView; class CMonthScheduleView : public QObject { Q_OBJECT public: explicit CMonthScheduleView(QWidget *parent, QGraphicsScene *scene); ~CMonthScheduleView() override; void setallsize(int w, int h, int left, int top, int buttom, int itemHeight = 22); void setData(QMap &data, int currentMonth); void updateData(); void updateHeight(); QVector getScheduleShowItem() const; int getScheduleHeight() const { return m_ItemHeight; } void updateDate(const DSchedule::Ptr &info); void changeDate(const DSchedule::Ptr &info); void updateDate(const int row, const DSchedule::Ptr &info); signals: void signalsUpdateSchedule(int id = 0); void signalsCurrentScheduleDate(QDate date); void signalUpdateUI(int type); void signalPressScheduleShow(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); public slots: void slotFontChange(); void slotStateChange(bool bState); private: void updateDateShow(QVector> &vCMDaySchedule, QVector &scheduleShowItem); void createScheduleItemWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem); void createScheduleNumWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem); void computePos(int cNum, QDate bgeindate, QDate enddate, QPoint &pos, int &fw, int &fh); private: QMap m_data; int m_cNum = 2; //日程层数 int m_currentMonth = 0; QDate m_beginDate; QDate m_endDate; int m_width = 0; int m_height = 0; int m_leftMargin = 0; int m_topMargin = 0; int m_bottomMargin = 0; QVector m_weekSchedule; int m_ItemHeight = 22; QGraphicsScene *m_Scene = nullptr; }; class CWeekScheduleView : public QObject { Q_OBJECT typedef QVector RowScheduleInfo; public: explicit CWeekScheduleView(QObject *parent = nullptr); ~CWeekScheduleView() override; public: void setData(QMap &data, const QDate &startDate, const QDate &stopDate); bool addData(const DSchedule::Ptr &info); void changeDate(const DSchedule::Ptr &info); void setHeight(const int ScheduleHeight, const int dayHeight); QVector getMScheduleInfo() const { return m_MScheduleInfo; } QVector &getScheduleShowItem() { return m_scheduleShowItem; } void updateSchedule(const bool isNormalDisplay, const DSchedule::Ptr &info = DSchedule::Ptr()); void clearItem(); void hideItem(); private: void setMaxNum(); void mScheduleClear(); void sortAndFilter(QVector &vMDaySchedule); /** * @brief addShowSchedule 添加显示的日程 * @param startPos 其实ä½�ç½® * @param endPos 结æ�Ÿä½�ç½® * @param addRow 需è¦�添加的行 * @param addInfo 添加的日程 */ void addShowSchedule(const int &startPos, const int &endPos, const int &addRow, const DSchedule::Ptr &addInfo); private: QVector m_scheduleShowItem; QVector m_MScheduleInfo; DSchedule::List m_ScheduleInfo; QVector m_ColumnScheduleCount; int m_ScheduleHeight = 0; int m_DayHeight = 0; int m_MaxNum = 0; QDate beginDate; QDate endDate; int m_colum = 0; }; #endif // MONTHSCHEDULEVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthview.cpp000066400000000000000000000207621523260663500317000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "calendarglobalenv.h" #include "commondef.h" #include #include #include #include #include #include DGUI_USE_NAMESPACE /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void CMonthView::setTheMe(int type) { qCDebug(ClientLogger) << "CMonthView::setTheMe, type:" << type; m_weekIndicator->setTheMe(type); m_monthGraphicsView->setTheMe(type); } CMonthView::CMonthView(QWidget *parent) : DWidget(parent) { qCDebug(ClientLogger) << "CMonthView::CMonthView"; m_weekIndicator = new CMonthWeekView; m_monthGraphicsView = new CMonthGraphicsview(this); connect(m_monthGraphicsView, &CMonthGraphicsview::signalsViewSelectDate, this, &CMonthView::signalsViewSelectDate); connect(m_monthGraphicsView, &CMonthGraphicsview::signalScheduleShow, this, &CMonthView::slotScheduleRemindWidget); connect(m_monthGraphicsView, &CMonthGraphicsview::signalAngleDelta, this, &CMonthView::signalAngleDelta); connect(m_monthGraphicsView, &CMonthGraphicsview::signalSwitchPrePage, this, &CMonthView::signalSwitchPrePage); connect(m_monthGraphicsView, &CMonthGraphicsview::signalSwitchNextPage, this, &CMonthView::signalSwitchNextPage); connect(m_monthGraphicsView, &CMonthGraphicsview::signalGotoDayView, this, &CMonthView::signalsViewSelectDate); //新建最终布局 m_mainLayout = new QVBoxLayout; m_mainLayout->setContentsMargins(0, 0, 0, 0); m_mainLayout->setSpacing(0); m_mainLayout->addWidget(m_weekIndicator); m_mainLayout->addWidget(m_monthGraphicsView); setLayout(m_mainLayout); m_createAction = new QAction(tr("New event"), this); m_remindWidget = new ScheduleRemindWidget(this); setMouseTracking(true); } CMonthView::~CMonthView() { qCDebug(ClientLogger) << "CMonthView::~CMonthView"; } void CMonthView::setSelectSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "CMonthView::setSelectSchedule"; m_monthGraphicsView->setSelectSearchSchedule(scheduleInfo); } void CMonthView::slotScheduleRemindWidget(const bool isShow, const DSchedule::Ptr &out) { // qCDebug(ClientLogger) << "CMonthView::slotScheduleRemindWidget, isShow:" << isShow; if (isShow) { qCDebug(ClientLogger) << "Showing schedule reminder widget" << "summary:" << out->summary() << "type:" << out->scheduleTypeID(); //获å�–当å‰�é¼ æ ‡ä½�ç½® QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey(DDECalendar::CursorPointKey, variant); QPoint remindPos = variant.value(); //æ ¹æ�®ç±»åž‹èŽ·å�–颜色 CSchedulesColor gdColor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(out->scheduleTypeID()); m_remindWidget->setData(out, gdColor); // 因为将æ��示框从window改为widget,è¦�转æ�¢ä¸ºç›¸å¯¹çª—å�£çš„å��æ ‡ auto rPos = this->mapFromGlobal(remindPos); //æ ¹æ�®æ��示框在å±�幕的ä½�置设置箭头方å�‘ qCDebug(ClientLogger) << "Reminder widget position" << "window width:" << this->window()->width() << "relative pos:" << rPos << "widget width:" << m_remindWidget->width(); if (rPos.x() < this->window()->width() / 2) { // 显示到å�³ä¾§ qCDebug(ClientLogger) << "Showing reminder to the right"; m_remindWidget->setDirection(DArrowRectangle::ArrowLeft); m_remindWidget->show(rPos.x()+10, rPos.y()); } else { // 显示到左侧 qCDebug(ClientLogger) << "Showing reminder to the left"; m_remindWidget->setDirection(DArrowRectangle::ArrowRight); m_remindWidget->show(rPos.x()-10, rPos.y()); } } else { // qCDebug(ClientLogger) << "Hiding schedule reminder widget"; m_remindWidget->hide(); } } void CMonthView::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CMonthView::resizeEvent"; DWidget::resizeEvent(event); QMargins margins = m_mainLayout->contentsMargins(); m_weekIndicator->setFixedSize(width() - margins.left(), static_cast(height() * 0.1042 + 0.5)); } void CMonthView::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CMonthView::mousePressEvent"; Q_UNUSED(event); slotScheduleRemindWidget(false); } bool CMonthView::event(QEvent *event) { // qCDebug(ClientLogger) << "CMonthView::event, type:" << event->type(); if (event->type() == QEvent::FocusIn) { m_monthGraphicsView->setFocus(Qt::TabFocusReason); return true; } return DWidget::event(event); } /** * @brief setFirstWeekday 设置æ¯�周的第一天是周几 * @param weekday 周几 */ void CMonthView::setFirstWeekday(Qt::DayOfWeek weekday) { qCDebug(ClientLogger) << "Setting first weekday" << "weekday:" << weekday; m_firstWeekDay = weekday; m_weekIndicator->setFirstDay(weekday); } /** * @brief CMonthView::setShowDate 设置显示日期 * @param showDate */ void CMonthView::setShowDate(const QVector &showDate) { qCDebug(ClientLogger) << "Setting show dates" << "count:" << showDate.size(); m_showDate = showDate; m_monthGraphicsView->setDate(m_showDate); } /** * @brief CMonthView::setHuangLiInfo 设置黄历信æ�¯ * @param huangLiInfo */ void CMonthView::setHuangLiInfo(const QMap &huangLiInfo) { qCDebug(ClientLogger) << "Setting HuangLi info" << "count:" << huangLiInfo.size(); m_monthGraphicsView->setLunarInfo(huangLiInfo); } /** * @brief CMonthView::setFestival 设置ç�­ä¼‘ä¿¡æ�¯ * @param festivalInfo */ void CMonthView::setFestival(const QMap &festivalInfo) { qCDebug(ClientLogger) << "Setting festival info" << "count:" << festivalInfo.size(); m_monthGraphicsView->setFestival(festivalInfo); } /** * @brief CMonthView::setScheduleInfo 设置显示日程 * @param scheduleInfo */ void CMonthView::setScheduleInfo(const QMap &scheduleInfo) { qCDebug(ClientLogger) << "Setting schedule info" << "date count:" << scheduleInfo.size(); m_monthGraphicsView->setScheduleInfo(scheduleInfo); } /** * @brief CMonthView::setSearchScheduleInfo 设置æ�œç´¢æ—¥ç¨‹ * @param searchScheduleInfo */ void CMonthView::setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo) { qCDebug(ClientLogger) << "Setting search schedule info" << "count:" << searchScheduleInfo.size(); m_monthGraphicsView->setSearchScheduleInfo(searchScheduleInfo); } /** * @brief CMonthView::setCurrentDate 设置当å‰�æ—¶é—´ * @param currentDate */ void CMonthView::setCurrentDate(const QDate ¤tDate) { qCDebug(ClientLogger) << "Setting current date" << "date:" << currentDate; m_weekIndicator->setCurrentDate(currentDate); m_monthGraphicsView->setCurrentDate(currentDate); } void CMonthView::setRemindWidgetTimeFormat(QString timeformat) { qCDebug(ClientLogger) << "Setting reminder widget time format" << "format:" << timeformat; m_remindWidget->setTimeFormat(timeformat); } /** * @brief CMonthView::deleteSelectSchedule å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ */ void CMonthView::deleteSelectSchedule() { qCDebug(ClientLogger) << "Deleting selected schedule"; m_monthGraphicsView->slotDeleteItem(); } void CMonthView::setLunarVisible(bool visible) { qCDebug(ClientLogger) << "Setting lunar visibility" << "visible:" << visible; m_monthGraphicsView->setLunarVisible(visible); } DSchedule::Ptr CMonthView::getScheduleInfo(const QDate &beginDate, const QDate &endDate) { qCDebug(ClientLogger) << "Getting schedule info" << "begin date:" << beginDate << "end date:" << endDate; DSchedule::Ptr info; info.reset(new DSchedule()); if (beginDate.daysTo(endDate) > 0) { info->setDtStart(QDateTime(beginDate, QTime(0, 0, 0))); info->setDtEnd(QDateTime(endDate, QTime(23, 59, 59))); } else { info->setDtStart(QDateTime(endDate, QTime(0, 0, 0))); info->setDtEnd(QDateTime(beginDate, QTime(23, 59, 00))); } info->setSummary(tr("New Event")); info->setAllDay(true); info->setAlarmType(DSchedule::Alarm_15Hour_Front); return info; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthview.h000066400000000000000000000071571523260663500313500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHVIEW_H #define MONTHVIEW_H #include "monthweekview.h" #include "scheduleRemindWidget.h" #include "monthgraphiview.h" #include "dschedule.h" #include #include #include DWIDGET_USE_NAMESPACE class CMonthView: public DWidget { Q_OBJECT public: //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² void setTheMe(int type = 0); /** * @brief isDragging 是å�¦å�¯ä»¥æ‹–拽 * @return 是å�¦å�¯ä»¥æ‹–拽 */ bool isDragging()const { return m_monthGraphicsView->getDragStatus() != 4; } public: explicit CMonthView(QWidget *parent = nullptr); ~CMonthView() override; //设置æ¯�周首日 void setFirstWeekday(Qt::DayOfWeek weekday); //设置显示日期 void setShowDate(const QVector &showDate); //设置黄历信æ�¯ void setHuangLiInfo(const QMap &huangLiInfo); //设置ç�­ä¼‘ä¿¡æ�¯ void setFestival(const QMap &festivalInfo); //设置显示日程 void setScheduleInfo(const QMap &scheduleInfo); //设置æ�œç´¢æ—¥ç¨‹ void setSearchScheduleInfo(const DSchedule::List &searchScheduleInfo); //设置当å‰�æ—¶é—´ void setCurrentDate(const QDate ¤tDate); void setRemindWidgetTimeFormat(QString timeformat); void deleteSelectSchedule(); signals: /** * @brief signalsViewSelectDate 切æ�¢è§†å›¾ * @param date 日期 */ void signalsViewSelectDate(QDate date); public slots: /** * @brief setLunarVisible 设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ * @param visible 是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ */ void setLunarVisible(bool visible); /** * @brief setSelectSchedule 设置选择的日程 * @param scheduleInfo 日程信æ�¯ */ void setSelectSchedule(const DSchedule::Ptr &scheduleInfo); public slots: /** * @brief slotScheduleRemindWidget 日程浮框 * @param isShow 是å�¦æ˜¾ç¤ºæ—¥ç¨‹æµ®æ¡† * @param out 日程信æ�¯ */ void slotScheduleRemindWidget(const bool isShow, const DSchedule::Ptr &out = DSchedule::Ptr()); signals: /** * @brief signalAngleDelta å�‘é€�滚动信å�·æ»šåŠ¨ç›¸å¯¹é‡� * @param delta 滚动相对é‡� */ void signalAngleDelta(int delta); void signalSwitchPrePage(); void signalSwitchNextPage(); protected: /** * @brief resizeEvent 窗å�£å¤§å°�调整 * @param event 窗å�£å¤§å°�调整事件 */ void resizeEvent(QResizeEvent *event) override; /** * @brief mousePressEvent é¼ æ ‡å�•击 * @param event 鼠标事件 */ void mousePressEvent(QMouseEvent *event) override; bool event(QEvent *event) override; private: DSchedule::Ptr getScheduleInfo(const QDate &beginDate, const QDate &endDate); private: CMonthGraphicsview *m_monthGraphicsView = nullptr; QVector m_showDate; QDate m_currentDate; QDate m_createDate; CMonthWeekView *m_weekIndicator = nullptr; int m_firstWeekDay = 0; QAction *m_createAction = nullptr; // 创建日程 QVBoxLayout *m_mainLayout = nullptr; bool m_sflag = true; ScheduleRemindWidget *m_remindWidget = nullptr; QPoint m_PressPoint; bool isCreate; QDate m_PressDate; QDate m_MoveDate; }; #endif // MYCALENDARWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthweekview.cpp000066400000000000000000000126311523260663500325500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthweekview.h" #include "scheduledatamanage.h" #include "commondef.h" #include #include #include #include #include DGUI_USE_NAMESPACE CMonthWeekView::CMonthWeekView(QWidget *parent) : DWidget(parent) { qCDebug(ClientLogger) << "CMonthWeekView::CMonthWeekView"; for (int i = 0 ; i < 7 ; ++i) { m_weekRect.append(new WeekRect()); } } CMonthWeekView::~CMonthWeekView() { qCDebug(ClientLogger) << "CMonthWeekView::~CMonthWeekView"; for (int i = 0 ; i < 7 ; ++i) { WeekRect *weekRect = m_weekRect.at(i); delete weekRect; } m_weekRect.clear(); } void CMonthWeekView::setFirstDay(const Qt::DayOfWeek weekday) { qCDebug(ClientLogger) << "CMonthWeekView::setFirstDay, weekday:" << weekday; m_firstWeek = weekday; updateWeek(); } void CMonthWeekView::setTheMe(int type) { qCDebug(ClientLogger) << "CMonthWeekView::setTheMe, type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; m_backgroundColor = "#E6EEF2"; } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; m_backgroundColor = "#82AEC1"; m_backgroundColor.setAlphaF(0.10); } for (int i = 0 ; i < m_weekRect.size(); ++i) { m_weekRect.at(i)->setTheMe(type); } } void CMonthWeekView::updateWeek() { qCDebug(ClientLogger) << "CMonthWeekView::updateWeek"; Qt::DayOfWeek _setWeek; bool _showLine{false}; for (int i = 0; i < m_weekRect.size(); ++i) { int weekNum = (m_firstWeek + i) % 7; _setWeek = static_cast(weekNum == 0 ? 7 : weekNum); //如果为当å‰�时间所在周则绘制横线 if (_setWeek == m_currentWeek) { _showLine = true; } else { _showLine = false; } m_weekRect.at(i)->setWeek(_setWeek, _showLine); } update(); } /** * @brief CMonthWeekView::setCurrentDate 设置当å‰�æ—¶é—´,获å�–当å‰�时间所在周 * @param currentDate */ void CMonthWeekView::setCurrentDate(const QDate ¤tDate) { qCDebug(ClientLogger) << "CMonthWeekView::setCurrentDate, date:" << currentDate; m_currentWeek = static_cast(currentDate.dayOfWeek()); updateWeek(); } void CMonthWeekView::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CMonthWeekView::resizeEvent"; qreal weekRectWith = width() / 7; QRectF _rectF; for (int i = 0 ; i < m_weekRect.size(); ++i) { _rectF.setRect(i * weekRectWith, 0, weekRectWith, this->height()); m_weekRect.at(i)->setRect(_rectF); } DWidget::resizeEvent(event); } void CMonthWeekView::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "CMonthWeekView::paintEvent"; Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QPainterPath painterPath; //从左下角开始 painterPath.moveTo(0, this->height()); painterPath.lineTo(this->width(), this->height()); painterPath.lineTo(this->width(), m_radius); painterPath.arcTo(QRect(this->width() - m_radius * 2, 0, m_radius * 2, m_radius * 2), 0, 90); painterPath.lineTo(m_radius, 0); painterPath.arcTo(QRect(0, 0, m_radius * 2, m_radius * 2), 90, 90); painter.setBrush(m_backgroundColor); painter.setPen(Qt::NoPen); painter.drawPath(painterPath); for (int i = 0 ; i < m_weekRect.size(); ++i) { m_weekRect.at(i)->paintRect(painter); } painter.end(); } WeekRect::WeekRect() : m_showLine(false) { // qCDebug(ClientLogger) << "WeekRect::WeekRect"; m_font.setWeight(QFont::Medium); m_font.setPixelSize(DDECalendar::FontSizeSixteen); } void WeekRect::setWeek(const Qt::DayOfWeek &showWeek, const bool &showLine) { // qCDebug(ClientLogger) << "WeekRect::setWeek, week:" << showWeek << "showLine:" << showLine; m_showWeek = showWeek; m_showLine = showLine; QLocale locale; m_weekStr = locale.dayName(m_showWeek, QLocale::ShortFormat); } void WeekRect::setRect(const QRectF &rectF) { // qCDebug(ClientLogger) << "WeekRect::setRect, rect:" << rectF; m_rectF = rectF; } void WeekRect::paintRect(QPainter &painter) { // qCDebug(ClientLogger) << "WeekRect::paintRect"; //绘制文字 painter.save(); painter.setFont(m_font); if (m_showWeek > 5) { painter.setPen(m_activeColor); } else { painter.setPen(m_testColor); } painter.drawText(m_rectF, Qt::AlignCenter, m_weekStr); painter.restore(); if (m_showLine) { // qCDebug(ClientLogger) << "Drawing line for current week"; //绘制横线 painter.save(); painter.setPen(Qt::NoPen); painter.setBrush(m_activeColor); painter.drawRect(QRectF(m_rectF.x(), m_rectF.height() - m_lineHeight, m_rectF.width(), m_lineHeight)); painter.restore(); } } void WeekRect::setTheMe(int type) { // qCDebug(ClientLogger) << "WeekRect::setTheMe, type:" << type; m_activeColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Applying light theme"; m_testColor = "#6F6F6F"; } else { // qCDebug(ClientLogger) << "Applying dark theme"; m_testColor = "#C0C6D4"; } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthweekview.h000066400000000000000000000030201523260663500322050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHWEEKVIEW_H #define MONTHWEEKVIEW_H #include "constants.h" #include DWIDGET_USE_NAMESPACE class WeekRect; /** * @brief The CMonthWeekView class * 月视图周显示 */ class CMonthWeekView : public DWidget { Q_OBJECT public: explicit CMonthWeekView(QWidget *parent = nullptr); ~CMonthWeekView() override; void setFirstDay(const Qt::DayOfWeek weekday); void setTheMe(int type = 0); void updateWeek(); //设置当å‰�æ—¶é—´ void setCurrentDate(const QDate ¤tDate); protected: void resizeEvent(QResizeEvent *event) override; void paintEvent(QPaintEvent *event) override; private: QColor m_backgroundColor; QVector m_weekRect; int m_radius = 8; Qt::DayOfWeek m_firstWeek{Qt::Sunday}; Qt::DayOfWeek m_currentWeek{Qt::Monday}; }; class WeekRect { public: WeekRect(); void setWeek(const Qt::DayOfWeek &showWeek, const bool &showLine = false); void setRect(const QRectF &rectF); void paintRect(QPainter &painter); void setTheMe(int type = 0); private: QColor m_activeColor; QColor m_testColor; Qt::DayOfWeek m_showWeek; QString m_weekStr; QFont m_font; QRectF m_rectF; bool m_showLine; qreal m_lineHeight{2}; }; #endif // WEEKINDICATOR_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthwindow.cpp000066400000000000000000000360721523260663500322360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "monthwindow.h" #include "monthview.h" #include "monthdayview.h" #include "constants.h" #include "schedulesearchview.h" #include "todaybutton.h" #include "scheduledatamanage.h" #include "commondef.h" #include #include #include DGUI_USE_NAMESPACE CMonthWindow::CMonthWindow(QWidget *parent) : CScheduleBaseWidget(parent) { qCDebug(ClientLogger) << "CMonthWindow::CMonthWindow"; initUI(); initConnection(); setLunarVisible(m_calendarManager->getShowLunar()); } CMonthWindow::~CMonthWindow() { qCDebug(ClientLogger) << "CMonthWindow::~CMonthWindow"; disconnect(m_today, &CTodayButton::clicked, this, &CMonthWindow::slottoday); delete m_monthDayView; m_monthDayView = nullptr; delete m_monthView; m_monthView = nullptr; } /** * @brief setLunarVisible 设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ * @param state 是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ */ void CMonthWindow::setLunarVisible(bool state) { qCDebug(ClientLogger) << "CMonthWindow::setLunarVisible, state:" << state; m_monthView->setLunarVisible(state); m_YearLunarLabel->setVisible(state); } /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void CMonthWindow::setTheMe(int type) { qCDebug(ClientLogger) << "CMonthWindow::setTheMe, type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette gpa = m_gridWidget->palette(); gpa.setColor(DPalette::Window, "#F8F8F8"); m_gridWidget->setPalette(gpa); m_gridWidget->setBackgroundRole(DPalette::Window); } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette gpa = m_gridWidget->palette(); gpa.setColor(DPalette::Window, "#252525"); m_gridWidget->setPalette(gpa); m_gridWidget->setBackgroundRole(DPalette::Window); } m_monthDayView->setTheMe(type); m_monthView->setTheMe(type); } void CMonthWindow::setYearData() { qCDebug(ClientLogger) << "CMonthWindow::setYearData"; if (getSelectDate() == getCurrendDateTime().date()) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return Today", "Today", "Return Today")); } if (getShowLunar()) { m_YearLabel->setText(QString::number(getSelectDate().year()) + tr("Y")); } else { m_YearLabel->setText(QString::number(getSelectDate().year())); } } /** * @brief CMonthWindow::updateShowDate 更新显示时间 * @param isUpdateBar */ void CMonthWindow::updateShowDate(const bool isUpdateBar) { qCDebug(ClientLogger) << "CMonthWindow::updateShowDate, isUpdateBar:" << isUpdateBar; setYearData(); const QDate _selectDate = m_calendarManager->getSelectDate(); Qt::DayOfWeek _firstWeek = m_calendarManager->getFirstDayOfWeek(); m_monthView->setFirstWeekday(_firstWeek); QVector _monthShowData = m_calendarManager->getMonthDate(_selectDate.year(), _selectDate.month()); m_startDate = _monthShowData.first(); m_stopDate = _monthShowData.last(); m_monthView->setShowDate(_monthShowData); m_monthView->setRemindWidgetTimeFormat((m_calendarManager->getTimeShowType() ? "AP " : "") + m_calendarManager->getTimeFormat()); if (isUpdateBar) m_monthDayView->setSelectDate(_selectDate); //设置12个月份显示 //如果为中文环境则显示ç�­ä¼‘和农历信æ�¯ if (getShowLunar()) { qCDebug(ClientLogger) << "Updating lunar info"; updateShowLunar(); } //切æ�¢æœˆä»½é¡»æ›´æ–°æ˜¾ç¤ºæ—¥ç¨‹ updateShowSchedule(); } /** * @brief CMonthWindow::setCurrentDateTime 设置当å‰�æ—¶é—´ * @param currentDate */ void CMonthWindow::setCurrentDateTime(const QDateTime ¤tDate) { qCDebug(ClientLogger) << "CMonthWindow::setCurrentDateTime, date:" << currentDate; CScheduleBaseWidget::setCurrentDateTime(currentDate); //更新当å‰�æ—¶é—´ m_monthView->setCurrentDate(currentDate.date()); } /** * @brief CMonthWindow::updateShowSchedule 更新日程显示 */ void CMonthWindow::updateShowSchedule() { qCDebug(ClientLogger) << "CMonthWindow::updateShowSchedule"; QMap map = gScheduleManager->getScheduleMap(m_startDate, m_stopDate); //因获å�–的日程中å�ªæœ‰æœ‰æ—¥ç¨‹çš„项,数é‡�ä¸�等于开始时间到结æ�Ÿæ—¶é—´çš„天数, //但是视图显示è¦�求数é‡�为开始时间到结æ�Ÿæ—¶é—´çš„天数,所以在没有日程的时间中添加空日期列表 QDate date = m_startDate; QDate eDate = m_stopDate.addDays(1); while (date != eDate) { if (!map.contains(date)) { map[date] = DSchedule::List(); } date = date.addDays(1); } m_monthView->setScheduleInfo(map); } /** * @brief CMonthWindow::updateShowLunar 更新显示农历信æ�¯ */ void CMonthWindow::updateShowLunar() { qCDebug(ClientLogger) << "CMonthWindow::updateShowLunar"; // Ensure lunar data is loaded for the current view range ensureLunarDataLoaded(m_startDate, m_stopDate); getLunarInfo(); m_YearLunarLabel->setText(m_lunarYear); QMap _monthFestivalInfo = gLunarManager->getFestivalInfoDateMap(m_startDate, m_stopDate); m_monthView->setFestival(_monthFestivalInfo); QMap _monthHuangLiInfo = gLunarManager->getHuangLiDayMap(m_startDate, m_stopDate); m_monthView->setHuangLiInfo(_monthHuangLiInfo); } /** * @brief CMonthWindow::updateSearchScheduleInfo æ›´æ–°æ�œç´¢æ—¥ç¨‹ä¿¡æ�¯ */ void CMonthWindow::updateSearchScheduleInfo() { qCDebug(ClientLogger) << "CMonthWindow::updateSearchScheduleInfo"; //获å�–æ�œç´¢æ—¥ç¨‹ä¿¡æ�¯ m_monthView->setSearchScheduleInfo(gScheduleManager->getAllSearchedScheduleList()); } /** * @brief CMonthWindow::setSelectSearchScheduleInfo 设置选中日程 * @param info */ void CMonthWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "CMonthWindow::setSelectSearchScheduleInfo"; m_monthView->setSelectSchedule(info); } /** * @brief CMonthWindow::setSearchWFlag 设置是å�¦æ˜¾ç¤ºæ�œç´¢ç•Œé�¢ * @param flag */ void CMonthWindow::setSearchWFlag(bool flag) { qCDebug(ClientLogger) << "CMonthWindow::setSearchWFlag, flag:" << flag; m_searchFlag = flag; m_monthDayView->setSearchflag(flag); } /** * @brief CMonthWindow::deleteselectSchedule å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ */ void CMonthWindow::deleteselectSchedule() { qCDebug(ClientLogger) << "CMonthWindow::deleteselectSchedule"; m_monthView->deleteSelectSchedule(); } /** * @brief previousMonth 选择上一个月份 */ void CMonthWindow::previousMonth() { qCDebug(ClientLogger) << "CMonthWindow::previousMonth"; slideMonth(false); } /** * @brief nextMonth 选择下一个月份 */ void CMonthWindow::nextMonth() { qCDebug(ClientLogger) << "CMonthWindow::nextMonth"; slideMonth(true); } /** * @brief initUI åˆ�始化界é�¢ */ void CMonthWindow::initUI() { qCDebug(ClientLogger) << "CMonthWindow::initUI"; m_today = new CTodayButton; m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedSize(DDEMonthCalendar::MTodayWindth, DDEMonthCalendar::MTodayHeight); QFont todayfont; todayfont.setWeight(QFont::Medium); todayfont.setPixelSize(DDECalendar::FontSizeFourteen); m_today->setFont(todayfont); m_YearLabel = new QLabel(); m_YearLabel->setFixedHeight(DDEMonthCalendar::M_YLabelHeight); m_YearLunarLabel = new QLabel(); m_YearLunarLabel->setFixedSize(DDEMonthCalendar::M_YLunaLabelWindth, DDEMonthCalendar::M_YLunaLabelHeight); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(yLabelF); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_YearLunarLabel->setFont(yLabelF); DPalette Lunarpa = m_YearLunarLabel->palette(); Lunarpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(Lunarpa); m_monthDayView = new CMonthDayView(this); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setContentsMargins(0, 0, 0, 0); yeartitleLayout->setSpacing(0); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_YearLabel); yeartitleLayout->addWidget(m_dialogIconButton); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setContentsMargins(0, 0, 0, 0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->addWidget(m_YearLunarLabel); yeartitleLayout->addSpacing(6); yeartitleLayout->addLayout(yeartitleLayout1); yeartitleLayout->addStretch(); yeartitleLayout->addWidget(m_monthDayView, 0, Qt::AlignCenter); yeartitleLayout->addStretch(); yeartitleLayout->addWidget(m_today, 0, Qt::AlignRight); m_monthView = new CMonthView(this); m_monthView->setObjectName("monthViewWidget"); m_monthView->setAccessibleName("monthViewWidget"); m_monthView->setCurrentDate(getCurrendDateTime().date()); QVBoxLayout *mhLayout = new QVBoxLayout; mhLayout->setContentsMargins(0, 0, 0, 0); mhLayout->setSpacing(0); mhLayout->addWidget(m_monthView); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setSpacing(0); hhLayout->setContentsMargins(0, 0, 0, 0); //头部控件统一高度为 M_YTopHeight QWidget *top = new QWidget(this); top->setFixedHeight(DDEMonthCalendar::M_YTopHeight); top->setLayout(yeartitleLayout); hhLayout->addWidget(top); m_gridWidget = new DWidget(); m_gridWidget->setContentsMargins(0, 0, 0, 0); m_gridWidget->setAutoFillBackground(true); m_gridWidget->setLayout(mhLayout); hhLayout->addWidget(m_gridWidget); m_tMainLayout = new QHBoxLayout; m_tMainLayout->setContentsMargins(0, 0, 0, 0); m_tMainLayout->setSpacing(0); m_tMainLayout->addLayout(hhLayout); QVBoxLayout *ssLayout = new QVBoxLayout; ssLayout->setContentsMargins(0, 0, 0, 0); ssLayout->setSpacing(0); m_tMainLayout->addLayout(ssLayout); this->setLayout(m_tMainLayout); } /** * @brief initConnection åˆ�始化信å�·å’Œæ§½çš„连接 */ void CMonthWindow::initConnection() { qCDebug(ClientLogger) << "CMonthWindow::initConnection"; connect(m_today, &DPushButton::clicked, this, &CMonthWindow::slottoday); connect(m_monthDayView, &CMonthDayView::signalsSelectDate, this, &CMonthWindow::slotSetSelectDate); //å�Œå‡»æ—¶é—´ä¿®æ”¹é€‰æ‹©æ—¶é—´å’Œåˆ‡æ�¢åˆ°æ—¥è§†å›¾ connect(m_monthView, &CMonthView::signalsViewSelectDate, this, &CMonthWindow::slotViewSelectDate); connect(m_monthView, &CMonthView::signalAngleDelta, this, &CMonthWindow::slotAngleDelta); //月份控件区域左å�³æ»šåŠ¨ä¿¡å�·å…³è�” connect(m_monthDayView, &CMonthDayView::signalAngleDelta, this, &CMonthWindow::slotAngleDelta); connect(m_monthView, &CMonthView::signalSwitchPrePage, this, &CMonthWindow::slotSwitchPrePage); connect(m_monthView, &CMonthView::signalSwitchNextPage, this, &CMonthWindow::slotSwitchNextPage); } /** * @brief slideMonth 切æ�¢æœˆä»½ï¼Œå¹¶æ›´æ–°ä¿¡æ�¯ * @param next 是å�¦åˆ‡æ�¢åˆ°ä¸‹ä¸€ä¸ªæœˆ */ void CMonthWindow::slideMonth(bool next) { qCDebug(ClientLogger) << "CMonthWindow::slideMonth, next:" << next; slotScheduleHide(); if (m_isSwitchStatus) { qCDebug(ClientLogger) << "Already switching, returning"; return; } m_isSwitchStatus = true; QTimer::singleShot(5, [this, next]() { if (next) { setSelectDate(getSelectDate().addMonths(-1), true); } else { setSelectDate(getSelectDate().addMonths(1), true); } //更新日程 updateShowDate(); m_isSwitchStatus = false; }); } /** * @brief slotScheduleHide éš�è—�日程浮框 */ void CMonthWindow::slotScheduleHide() { qCDebug(ClientLogger) << "CMonthWindow::slotScheduleHide"; m_monthView->slotScheduleRemindWidget(false); } /** * @brief slotAngleDelta 接å�—滚动事件滚动相对é‡� * @param delta 滚动相对é‡� */ void CMonthWindow::slotAngleDelta(int delta) { qCDebug(ClientLogger) << "CMonthWindow::slotAngleDelta, delta:" << delta; //拖拽时ç¦�用 if (!m_monthView->isDragging()) { if (delta > 0) { //下一个月 nextMonth(); } else { //上一个月 previousMonth(); } } } /** * @brief CMonthWindow::slotViewSelectDate 设置选择时间切æ�¢æ—¥è§†å›¾ * @param date */ void CMonthWindow::slotViewSelectDate(const QDate &date) { qCDebug(ClientLogger) << "CMonthWindow::slotViewSelectDate, date:" << date; slotScheduleHide(); if (setSelectDate(date, true)) { //更新界é�¢ updateData(); emit signalSwitchView(3); } } void CMonthWindow::slotSwitchPrePage() { qCDebug(ClientLogger) << "CMonthWindow::slotSwitchPrePage"; nextMonth(); } void CMonthWindow::slotSwitchNextPage() { qCDebug(ClientLogger) << "CMonthWindow::slotSwitchNextPage"; previousMonth(); } /** * @brief resizeEvent 窗å�£å¤§å°�调整 * @param event 窗å�£å¤§å°�调整事件 */ void CMonthWindow::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CMonthWindow::resizeEvent"; qreal dw = width() * 0.5023 + 0.5; int dh = 36; m_monthDayView->setFixedSize(qRound(dw), dh); QWidget::resizeEvent(event); } /** * @brief CMonthWindow::slottoday 返回当å‰�æ—¶é—´ */ void CMonthWindow::slottoday() { qCDebug(ClientLogger) << "CMonthWindow::slottoday"; //éš�è—�æ��示框 slotScheduleHide(); setSelectDate(getCurrendDateTime().date(), true); updateData(); } /** * @brief CMonthWindow::slotSetSelectDate 设置选择时间 * @param date */ void CMonthWindow::slotSetSelectDate(const QDate &date) { qCDebug(ClientLogger) << "CMonthWindow::slotSetSelectDate, date:" << date; slotScheduleHide(); if (setSelectDate(date, true)) { updateShowDate(false); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/monthWidget/monthwindow.h000066400000000000000000000057021523260663500316770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MONTHWINDOW_H #define MONTHWINDOW_H #include "cschedulebasewidget.h" #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CScheduleSearchView; class CMonthView; class CMonthDayView; class QHBoxLayout; class CTodayButton; class CMonthWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CMonthWindow(QWidget *parent = nullptr); ~CMonthWindow() override; //设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ void setLunarVisible(bool state); //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² void setTheMe(int type = 0); //设置年份显示 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //设置当å‰�æ—¶é—´ void setCurrentDateTime(const QDateTime ¤tDate) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信æ�¯ void updateShowLunar() override; //更新界é�¢æ�œç´¢æ—¥ç¨‹æ˜¾ç¤º void updateSearchScheduleInfo() override; //设置选中æ�œç´¢æ—¥ç¨‹ void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; //设置是å�¦æ˜¾ç¤ºæ�œç´¢ç•Œé�¢ void setSearchWFlag(bool flag); //删除选中日程 void deleteselectSchedule() override; public slots: //选择上一个月份 void previousMonth(); //选择下一个月份 void nextMonth(); private: //åˆ�始化界é�¢ void initUI(); //åˆ�始化信å�·å’Œæ§½çš„连接 void initConnection(); //切æ�¢æœˆä»½ï¼Œå¹¶æ›´æ–°ä¿¡æ�¯ void slideMonth(bool next); signals: /** * @brief signalsCurrentScheduleDate * @param date */ void signalsCurrentScheduleDate(QDate date); public slots: //éš�è—�日程浮框 void slotScheduleHide(); //接å�—滚动事件滚动相对é‡� void slotAngleDelta(int delta); //设置选择时间切æ�¢æ—¥è§†å›¾ void slotViewSelectDate(const QDate &date); void slotSwitchPrePage(); void slotSwitchNextPage(); protected: void resizeEvent(QResizeEvent *event) override; private slots: //返回当å‰�æ—¶é—´ void slottoday(); //设置选择的月份 void slotSetSelectDate(const QDate &date); private: CMonthView *m_monthView = nullptr; CMonthDayView *m_monthDayView = nullptr; CTodayButton *m_today = nullptr; QDate m_startDate; QDate m_stopDate; QLabel *m_YearLabel = nullptr; QLabel *m_YearLunarLabel = nullptr; QSpacerItem *m_spaceitem = nullptr; DWidget *m_gridWidget = nullptr; bool m_searchFlag = false; bool m_isSwitchStatus = false; QHBoxLayout *m_tMainLayout = nullptr; }; #endif // YEARWINDOW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/schedulesearchview.cpp000066400000000000000000001122741523260663500312440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulesearchview.h" #include "schedulectrldlg.h" #include "myscheduleview.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "constants.h" #include "cscheduleoperation.h" #include "scheduledaterangeinfo.h" #include "calendarmanage.h" #include "calendarglobalenv.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CScheduleSearchItem::CScheduleSearchItem(QWidget *parent) : DLabel(parent) , m_rightMenu(new DMenu(this)) , m_timeFormat(CalendarManager::getInstance()->getTimeFormat()) { qCDebug(ClientLogger) << "CScheduleSearchItem::CScheduleSearchItem"; //设置对象å��称和辅助显示å��ç§° this->setObjectName("CScheduleDataItem"); this->setAccessibleName("CScheduleDataItem"); m_editAction = new QAction(tr("Edit"), this); m_deleteAction = new QAction(tr("Delete"), this); connect(m_editAction, SIGNAL(triggered(bool)), this, SLOT(slotEdit())); connect(m_deleteAction, SIGNAL(triggered(bool)), this, SLOT(slotDelete())); setTheMe(DGuiApplicationHelper::instance()->themeType()); QObject::connect(CalendarManager::getInstance(), &CalendarManager::signalTimeFormatChanged, this, &CScheduleSearchItem::slotTimeFormatChanged); QObject::connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::paletteTypeChanged, this, &CScheduleSearchItem::setTheMe); m_mouseStatus = M_NONE; installEventFilter(this); //设置焦点类型 setFocusPolicy(Qt::TabFocus); } void CScheduleSearchItem::setBackgroundColor(QColor color1) { qCDebug(ClientLogger) << "CScheduleSearchItem::setBackgroundColor, color:" << color1; m_Backgroundcolor = color1; } void CScheduleSearchItem::setText(QColor tColor, QFont font) { qCDebug(ClientLogger) << "CScheduleSearchItem::setText, color:" << tColor; m_tTextColor = tColor; m_tFont = font; //设置时间显示宽度 setDurationSize(font); } void CScheduleSearchItem::setTimeC(QColor tColor, QFont font) { qCDebug(ClientLogger) << "CScheduleSearchItem::setTimeC, color:" << tColor; m_timecolor = tColor; m_timefont = font; } void CScheduleSearchItem::setData(DSchedule::Ptr vScheduleInfo, QDate date) { qCDebug(ClientLogger) << "CScheduleSearchItem::setData, date:" << date; m_ScheduleInfo = vScheduleInfo; m_date = date; update(); } void CScheduleSearchItem::setRoundtype(int rtype) { qCDebug(ClientLogger) << "CScheduleSearchItem::setRoundtype, rtype:" << rtype; m_roundtype = rtype; update(); } void CScheduleSearchItem::setTheMe(int type) { qCDebug(ClientLogger) << "CScheduleSearchItem::setTheMe, type:" << type; if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; m_presscolor.background = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_presscolor.background.setAlphaF(1); m_presscolor.timeColor = "#FFFFFF"; m_presscolor.timeColor.setAlphaF(1); m_presscolor.textColor = "#FFFFFF"; m_presscolor.textColor.setAlphaF(1); m_hovercolor.background = "#FFFFFF"; m_hovercolor.background.setAlphaF(0.2); m_hovercolor.timeColor = "#FFFFFF"; m_hovercolor.timeColor.setAlphaF(0.6); m_hovercolor.textColor = "#FFFFFF"; m_hovercolor.textColor.setAlphaF(0.7); } else { qCDebug(ClientLogger) << "Applying light theme"; m_presscolor.background = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_presscolor.background.setAlphaF(1); m_presscolor.timeColor = "#FFFFFF"; m_presscolor.timeColor.setAlphaF(1); m_presscolor.textColor = "#FFFFFF"; m_presscolor.textColor.setAlphaF(1); m_hovercolor.background = "#000000"; m_hovercolor.background.setAlphaF(0.2); m_hovercolor.timeColor = "#000000"; m_hovercolor.timeColor.setAlphaF(0.6); m_hovercolor.textColor = "#000000"; m_hovercolor.textColor.setAlphaF(0.7); } } /** * @brief CScheduleSearchItem::setDurationSize æ ¹æ�®æ—¶é—´å­—体font设置时间宽度 */ void CScheduleSearchItem::setDurationSize(QFont font) { qCDebug(ClientLogger) << "CScheduleSearchItem::setDurationSize"; QFontMetrics fm1(font); QString currentTimeStr = QTime::currentTime().toString("hh:mm"); //设置时间显示最大宽度 m_durationSize = fm1.horizontalAdvance(currentTimeStr + "-" + currentTimeStr); } void CScheduleSearchItem::slotEdit() { qCDebug(ClientLogger) << "CScheduleSearchItem::slotEdit"; CScheduleDlg dlg(0, this); dlg.setData(m_ScheduleInfo); dlg.exec(); } void CScheduleSearchItem::slotDelete() { qCDebug(ClientLogger) << "CScheduleSearchItem::slotDelete"; //删除日程 CScheduleOperation _scheduleOperation(m_ScheduleInfo->scheduleTypeID(), this); bool _isDelete = _scheduleOperation.deleteSchedule(m_ScheduleInfo); //删除日程å�Žï¼Œå°†ç„¦ç‚¹è®¾ç½®ç»™çˆ¶ç±» if (_isDelete) { qCDebug(ClientLogger) << "Schedule deleted, setting focus to parent"; parentWidget()->setFocus(Qt::TabFocusReason); } else { qCDebug(ClientLogger) << "Failed to delete schedule, keeping focus"; this->setFocus(); } } /** * @brief CScheduleSearchItem::slotTimeFormatChanged 更新时间显示格å¼� */ void CScheduleSearchItem::slotTimeFormatChanged(int value) { qCDebug(ClientLogger) << "CScheduleSearchItem::slotTimeFormatChanged, value:" << value; if (value) { m_timeFormat = "hh:mm"; } else { m_timeFormat = "h:mm"; } update(); } void CScheduleSearchItem::slotSchotCutClicked() { qCDebug(ClientLogger) << "CScheduleSearchItem::slotSchotCutClicked"; //选中该itemæ—¶æ‰�å�¯ä»¥ä½¿ç”¨å¿«æ�·é”® if (m_tabFocus) { //节日日程ä¸�能使用 if (CScheduleOperation::isFestival(m_ScheduleInfo)) { qCDebug(ClientLogger) << "Festival schedule, cannot use shortcut"; return; } m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //获å�–itemå��æ ‡,并转æ�¢ä¸ºå…¨å±€å��æ ‡ QPointF itemPos = QPointF(this->rect().x() + this->rect().width() / 2, this->rect().y() + this->rect().height() / 2); QPoint shoutCurPos = mapToGlobal(itemPos.toPoint()); m_rightMenu->exec(shoutCurPos); } } void CScheduleSearchItem::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "CScheduleSearchItem::paintEvent"; Q_UNUSED(e); int labelRightX = width() - 2; //绘制区域xæ–¹å�‘å�³è¾¹ç•Œå��标点 int labelBottomY = height(); //绘制区域yæ–¹å�‘下边界å��标点 QPainter painter(this); QColor bColor = m_Backgroundcolor; QColor textcolor = m_tTextColor; QColor timecolor = m_timecolor; switch (m_mouseStatus) { case M_NONE: { bColor = m_Backgroundcolor; textcolor = m_tTextColor; timecolor = m_timecolor; } break; case M_HOVER: { bColor = m_hovercolor.background; textcolor = m_hovercolor.textColor; timecolor = m_hovercolor.timeColor; } break; case M_PRESS: { bColor = m_presscolor.background; textcolor = m_presscolor.textColor; timecolor = m_presscolor.timeColor; } break; } painter.save(); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; painter.setBrush(QBrush(bColor)); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(m_radius, m_borderframewY); if (m_roundtype == 1 || m_roundtype == 3) { painterPath.arcTo(QRect(m_borderframewX, m_borderframewY, m_radius * 2, m_radius * 2), 90, 90); } else { painterPath.lineTo(m_borderframewX, m_borderframewY); painterPath.lineTo(m_borderframewX, m_radius); } painterPath.lineTo(m_borderframewX, labelBottomY - m_radius); if (m_roundtype == 1 || m_roundtype == 2) { painterPath.arcTo(QRect(m_borderframewX, labelBottomY - m_radius * 2, m_radius * 2, m_radius * 2), 180, 90); } else { painterPath.lineTo(m_borderframewX, labelBottomY); painterPath.lineTo(m_radius, labelBottomY); } painterPath.lineTo(labelRightX - m_radius, labelBottomY); if (m_roundtype == 1 || m_roundtype == 2) { painterPath.arcTo(QRect(labelRightX - m_radius * 2, labelBottomY - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); } else { painterPath.lineTo(labelRightX, labelBottomY); painterPath.lineTo(labelRightX, labelBottomY - m_radius); } painterPath.lineTo(labelRightX, m_radius); if (m_roundtype == 1 || m_roundtype == 3) { painterPath.arcTo(QRect(labelRightX - m_radius * 2, m_borderframewY, m_radius * 2, m_radius * 2), 0, 90); } else { painterPath.lineTo(labelRightX, m_borderframewY); painterPath.lineTo(labelRightX - m_radius, m_borderframewY); } painterPath.lineTo(m_radius, m_borderframewY); painterPath.closeSubpath(); painter.drawPath(painterPath); painter.restore(); painter.setFont(m_timefont); painter.setPen(timecolor); QString datestr; datestr = m_ScheduleInfo->dtStart().toString(m_timeFormat) + "-" + m_ScheduleInfo->dtEnd().toString(m_timeFormat); int flag = Qt::AlignLeft | Qt::AlignVCenter; if (m_ScheduleInfo->allDay()) { datestr = tr("All Day"); } painter.drawText(QRect(12, 8, m_durationSize, labelBottomY - 16), flag, datestr); painter.save(); DScheduleType::Ptr type = gScheduleManager->getScheduleTypeByScheduleId(m_ScheduleInfo->scheduleTypeID()); if (nullptr != type) { bColor = type->typeColor().colorCode(); } QPen pen(bColor); pen.setWidth(2); painter.setPen(pen); //由于绘制的矩形大å°�的改å�˜ï¼Œæ‰€ä»¥éœ€è¦�调整起始和截止yå��æ ‡ painter.drawLine(m_durationSize + 17, m_borderframewY, m_durationSize + 17, labelBottomY); painter.restore(); painter.setFont(m_tFont); painter.setPen(textcolor); QString ellipsis = "..."; QFontMetrics fm = painter.fontMetrics(); //整个label宽度-文字起始ä½�ç½® int tilenameW = labelRightX - m_borderframewX - (m_durationSize + 26); QString tSTitleName = m_ScheduleInfo->summary(); tSTitleName.replace("\n", ""); QString str = tSTitleName; QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); tStr.append(ellipsis); int widthT = fm.horizontalAdvance(tStr); tStr.remove(ellipsis); if (widthT >= tilenameW) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } this->setToolTip(str); painter.drawText(QRect(m_durationSize + 17 + 9, 6, tilenameW, labelBottomY), Qt::AlignLeft, tStr); //存在焦点时绘制边框 if (m_tabFocus) { painter.setPen(Qt::NoPen); // 设置画刷颜色 painter.setBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor()); QPainterPath path; int w = 2; //边框宽度 path.addRect(m_borderframewX, m_borderframewY, labelRightX - m_borderframewX, labelBottomY - m_borderframewY); path.addRect(m_borderframewX + w, m_borderframewY + w, labelRightX - 2 * w - m_borderframewX, labelBottomY - 2 * w - m_borderframewY); painter.drawPath(path); } painter.end(); } void CScheduleSearchItem::contextMenuEvent(QContextMenuEvent *event) { qCDebug(ClientLogger) << "CScheduleSearchItem::contextMenuEvent"; Q_UNUSED(event); //判断是å�¦ä¸ºèŠ‚å�‡æ—¥æ—¥ç¨‹ if (CScheduleOperation::isFestival(m_ScheduleInfo)) { qCDebug(ClientLogger) << "Festival schedule, no context menu"; return; } //在有些环境中弹出å�³å‡»è�œå�•ä¸�会触å�‘leaveEvent,主动更新leave对应的事件处ç�† m_mouseStatus = M_NONE; update(); m_rightMenu->clear(); m_rightMenu->addAction(m_editAction); m_rightMenu->addAction(m_deleteAction); //ä¸�å�¯ä¿®æ”¹çš„æ—¥ç¨‹åˆ é™¤æŒ‰é’®æ— æ•ˆ m_deleteAction->setEnabled(!CScheduleOperation::scheduleIsInvariant(m_ScheduleInfo)); m_rightMenu->exec(QCursor::pos()); //æ�¢å¤�按钮状æ€� m_deleteAction->setEnabled(true); } void CScheduleSearchItem::mouseDoubleClickEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchItem::mouseDoubleClickEvent"; Q_UNUSED(event); CMyScheduleView dlg(m_ScheduleInfo, this); dlg.exec(); } void CScheduleSearchItem::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchItem::mousePressEvent"; //鼠标点击å�–消焦点显示 m_tabFocus = false; if (event->button() == Qt::LeftButton) { //注册为鼠标æ“�作 if (!CalendarGlobalEnv::getGlobalEnv()->registerKey("SearchItemEvent", "MousePress")) { CalendarGlobalEnv::getGlobalEnv()->reviseValue("SearchItemEvent", "MousePress"); } emit signalSelectSchedule(m_ScheduleInfo); } DLabel::mousePressEvent(event); } void CScheduleSearchItem::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchItem::mouseReleaseEvent"; if (event->button() == Qt::LeftButton) { m_mouseStatus = M_HOVER; update(); } DLabel::mouseReleaseEvent(event); } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) void CScheduleSearchItem::enterEvent(QEnterEvent *event) #else void CScheduleSearchItem::enterEvent(QEvent *event) #endif { // qCDebug(ClientLogger) << "CScheduleSearchItem::enterEvent"; DLabel::enterEvent(event); m_mouseStatus = M_HOVER; update(); } void CScheduleSearchItem::leaveEvent(QEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchItem::leaveEvent"; DLabel::leaveEvent(event); m_mouseStatus = M_NONE; update(); } bool CScheduleSearchItem::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "CScheduleSearchItem::eventFilter, event type:" << e->type(); Q_UNUSED(o); if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *m_press = dynamic_cast(e); if (m_press->button() == Qt::LeftButton) { m_mouseStatus = M_PRESS; } } update(); return false; } void CScheduleSearchItem::focusInEvent(QFocusEvent *e) { // qCDebug(ClientLogger) << "CScheduleSearchItem::focusInEvent, reason:" << e->reason(); if (e->reason() == Qt::TabFocusReason) { //注册为键盘æ“�作 if (!CalendarGlobalEnv::getGlobalEnv()->registerKey("SearchItemEvent", "Keyboard")) { CalendarGlobalEnv::getGlobalEnv()->reviseValue("SearchItemEvent", "Keyboard"); } emit signalSelectSchedule(m_ScheduleInfo); emit signalSelectCurrentItem(this, false); m_tabFocus = true; } if (e->reason() == Qt::ActiveWindowFocusReason || e->reason() == Qt::PopupFocusReason) { m_tabFocus = m_tabFocusBeforeActive; } DLabel::focusInEvent(e); } void CScheduleSearchItem::focusOutEvent(QFocusEvent *e) { // qCDebug(ClientLogger) << "CScheduleSearchItem::focusOutEvent, reason:" << e->reason(); //å�ªé’ˆå¯¹tab的情况生效 if (e->reason() == Qt::TabFocusReason){ emit signalSelectCurrentItem(this, true); } DLabel::focusOutEvent(e); m_tabFocusBeforeActive = m_tabFocus; m_tabFocus = false; } void CScheduleSearchItem::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchItem::keyPressEvent, key:" << event->key(); //回车显示我的日程详情 if (event->key() == Qt::Key_Return) { CMyScheduleView dlg(m_ScheduleInfo, this); dlg.exec(); } //获å�–Alt+m显示å�³å‡»è�œå�• if (event->modifiers() == Qt::ALT && event->key() == Qt::Key_M) { slotSchotCutClicked(); } DLabel::keyPressEvent(event); } CScheduleSearchView::CScheduleSearchView(QWidget *parent) : DWidget(parent) { qCDebug(ClientLogger) << "CScheduleSearchView::CScheduleSearchView"; QVBoxLayout *layout = new QVBoxLayout; layout->setSpacing(0); m_gradientItemList = new CScheduleListWidget(parent); m_gradientItemList->setAlternatingRowColors(true); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_gradientItemList); // set default row m_gradientItemList->setCurrentRow(0); setLayout(layout); setMouseTracking(true); m_bBackgroundcolor.setAlphaF(0.03); m_gradientItemList->setLineWidth(0); m_labellist.clear(); connect(m_gradientItemList, &CScheduleListWidget::signalListWidgetClicked, this, &CScheduleSearchView::slotListWidgetClicked); connect(gScheduleManager, &ScheduleManager::signalSearchScheduleUpdate, this, &CScheduleSearchView::slotScearedScheduleUpdate); } CScheduleSearchView::~CScheduleSearchView() { qCDebug(ClientLogger) << "CScheduleSearchView::~CScheduleSearchView"; for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *item11 = m_gradientItemList->takeItem(i); m_gradientItemList->removeItemWidget(item11); delete item11; item11 = nullptr; } m_gradientItemList->clear(); } void CScheduleSearchView::setTheMe(int type) { qCDebug(ClientLogger) << "CScheduleSearchView::setTheMe, type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Applying light theme"; m_bBackgroundcolor = "#000000"; m_bBackgroundcolor.setAlphaF(0.03); m_btimecolor = "#000000"; m_btimecolor.setAlphaF(0.6); m_btTextColor = "#000000"; m_btTextColor.setAlphaF(0.7); m_lBackgroundcolor = Qt::white; m_lTextColor = "#001A2E"; } else if (type == 2) { qCDebug(ClientLogger) << "Applying dark theme"; m_bBackgroundcolor = "#FFFFFF"; m_bBackgroundcolor.setAlphaF(0.05); m_btimecolor = "#FFFFFF"; m_btimecolor.setAlphaF(0.6); m_btTextColor = "#FFFFFF"; m_btTextColor.setAlphaF(0.7); m_lBackgroundcolor = "#FFFFFF"; m_lBackgroundcolor.setAlphaF(0.0); m_lTextColor = "#C0C6D4"; } updateDateShow(); } /** * @brief CScheduleSearchView::clearSearch 清空æ�œç´¢ */ void CScheduleSearchView::clearSearch() { qCDebug(ClientLogger) << "CScheduleSearchView::clearSearch"; m_searchStr.clear(); m_vlistData.clear(); m_scheduleSearchItem.clear(); //窗å�£éš�è—�å�Žåˆ�始化对应的状æ€� hasScheduleShow = false; m_selectItem = nullptr; for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *item11 = m_gradientItemList->takeItem(i); m_gradientItemList->removeItemWidget(item11); delete item11; item11 = nullptr; } m_labellist.clear(); m_gradientItemList->clear(); //清空æ�œç´¢æ•°æ�® gScheduleManager->clearSearchSchedule(); } void CScheduleSearchView::setMaxWidth(const int w) { // qCDebug(ClientLogger) << "CScheduleSearchView::setMaxWidth, width:" << w; m_maxWidth = w; } /** * @brief CScheduleSearchView::getHasScheduleShow 是å�¦æ�œç´¢åˆ°æ—¥ç¨‹ */ bool CScheduleSearchView::getHasScheduleShow() { // qCDebug(ClientLogger) << "CScheduleSearchView::getHasScheduleShow, hasScheduleShow:" << hasScheduleShow; return hasScheduleShow; } /** * @brief CScheduleSearchView::getScheduleStatus 获å�–当å‰�item是å�¦æœ‰ç„¦ç‚¹ */ bool CScheduleSearchView::getScheduleStatus() { // qCDebug(ClientLogger) << "CScheduleSearchView::getScheduleStatus"; return m_scheduleSearchItem.contains(m_selectItem); } /** * @brief CScheduleSearchView::deleteSchedule 删除选中item */ void CScheduleSearchView::deleteSchedule() { qCDebug(ClientLogger) << "CScheduleSearchView::deleteSchedule"; currentDItemIndex = m_scheduleSearchItem.indexOf(m_selectItem); //如果存在该item且为节日日程ä¸�å�¯æ“�作 if (currentDItemIndex >= 0 && !CScheduleOperation::isFestival(m_selectItem->getData())) { qCDebug(ClientLogger) << "Deleting item at index:" << currentDItemIndex; m_selectItem->slotDelete(); } } /** * @brief CScheduleSearchView::updateDateShow æ›´æ–°æ�œç´¢æ—¥ç¨‹æ˜¾ç¤º */ void CScheduleSearchView::updateDateShow() { qCDebug(ClientLogger) << "CScheduleSearchView::updateDateShow"; m_currentItem = nullptr; //是å�¦æ�œç´¢åˆ°æ—¥ç¨‹æ ‡å¿— hasScheduleShow = true; //清空列表之å‰�先断开信å�·å“�应 for(auto widget : m_scheduleSearchItem){ if(nullptr != widget){ widget->disconnect(); } } m_gradientItemList->clear(); m_labellist.clear(); m_scheduleSearchItem.clear(); //找最近日程 QDate tCurrentData = QDate::currentDate(); //æ�œç´¢æ—¥ç¨‹è¿‡æ»¤æŽ’åº� QMap m_showData; qint64 offset = 1000; QDate topdate = tCurrentData; QMap::const_iterator _iterator = m_vlistData.constBegin(); DSchedule::List _showInfo {}; for (; _iterator != m_vlistData.constEnd(); ++_iterator) { qint64 d = qAbs(_iterator.key().daysTo(tCurrentData)); _showInfo.clear(); for (int i = 0 ; i < _iterator.value().size(); ++i) { //如果开始时间日期为显示日期则显示,跨天日程å�ªæ˜¾ç¤ºä¸€ä¸ª if (_iterator.value().at(i)->dtStart().date() == _iterator.key() || _iterator == m_vlistData.constBegin()) { _showInfo.append(_iterator.value().at(i)); } } if (_showInfo.size() > 0) { // qCDebug(ClientLogger) << "Found" << _showInfo.size() << "schedules for date" << _iterator.key(); //获å�–跟当å‰�时间最近的日程时间 if (d < offset) { offset = d; topdate = _iterator.key(); } //排åº� std::sort(_showInfo.begin(), _showInfo.end()); m_showData[_iterator.key()] = _showInfo; } } tCurrentData = topdate; QMap::const_iterator _showIterator = m_showData.constBegin(); for (; _showIterator != m_showData.constEnd(); ++_showIterator) { //创建显示日期项 QListWidgetItem *dateItem = createItemWidget(_showIterator.key()); if (_showIterator.key() == tCurrentData) { m_currentItem = dateItem; } if (_showIterator.value().size() == 1) { createItemWidget(_showIterator.value().at(0), _showIterator.key(), 1); } else if (_showIterator.value().size() == 2) { createItemWidget(_showIterator.value().at(0), _showIterator.key(), 3); createItemWidget(_showIterator.value().at(1), _showIterator.key(), 2); } else { createItemWidget(_showIterator.value().at(0), _showIterator.key(), 3); for (int j = 1; j < _showIterator->size() - 1; j++) { createItemWidget(_showIterator.value().at(j), _showIterator.key(), 0); } createItemWidget(_showIterator.value().at(_showIterator->size() - 1), _showIterator.key(), 2); } } if (m_gradientItemList->count() == 0) { qCDebug(ClientLogger) << "No search results"; hasScheduleShow = false; QListWidgetItem *listItem = new QListWidgetItem(m_gradientItemList); DLabel *gwi = new DLabel(); gwi->setWordWrap(true); QFont font; font.setPixelSize(DDECalendar::FontSizeTwenty); gwi->setAlignment(Qt::AlignCenter); DPalette dayPalette = gwi->palette(); QColor textcolor; int themtype = CScheduleDataManage::getScheduleDataManage()->getTheme(); if (themtype == 2) { textcolor = "#C0C6D4"; textcolor.setAlphaF(0.4); } else { textcolor = "#000000"; textcolor.setAlphaF(0.3); } dayPalette.setColor(DPalette::WindowText, textcolor); dayPalette.setColor(DPalette::Window, m_lBackgroundcolor); gwi->setPalette(dayPalette); gwi->setForegroundRole(DPalette::WindowText); gwi->setFont(font); gwi->move(this->width() - 70, this->height() - 196); gwi->setText(tr("No search results")); gwi->setFixedSize(m_maxWidth - 20, 450); listItem->setSizeHint(QSize(m_maxWidth - 20, 450)); //æ¯�次改å�˜Item的高度 listItem->setFlags(Qt::ItemIsAutoTristate); m_gradientItemList->addItem(listItem); m_gradientItemList->setItemWidget(listItem, gwi); m_labellist.append(gwi); } if (m_currentItem != nullptr) { m_gradientItemList->scrollToItem(m_currentItem, QAbstractItemView::PositionAtTop); } if (currentDItemIndex >= 0 && m_scheduleSearchItem.size() > 0) { qCDebug(ClientLogger) << "Restoring focus after deletion"; //删除日程å�Ž,é‡�新设置焦点 if (currentDItemIndex < m_scheduleSearchItem.size()) { m_scheduleSearchItem.at(currentDItemIndex)->setFocus(Qt::TabFocusReason); m_selectItem = m_scheduleSearchItem.at(currentDItemIndex); } else { m_scheduleSearchItem.last()->setFocus(Qt::TabFocusReason); m_selectItem = m_scheduleSearchItem.last(); } currentDItemIndex = -1; } } void CScheduleSearchView::createItemWidget(DSchedule::Ptr info, QDate date, int rtype) { qCDebug(ClientLogger) << "CScheduleSearchView::createItemWidget (schedule), date:" << date << "rtype:" << rtype; DSchedule::Ptr &gd = info; CScheduleSearchItem *gwi = new CScheduleSearchItem(this); QFont font; font.setPixelSize(DDECalendar::FontSizeFourteen); font.setWeight(QFont::Normal); gwi->setBackgroundColor(m_bBackgroundcolor); gwi->setText(m_btTextColor, font); QFont timeFont = font; timeFont.setPixelSize(DDECalendar::FontSizeTwelve); timeFont.setWeight(QFont::Light); gwi->setTimeC(m_btimecolor, timeFont); gwi->setFixedSize(m_maxWidth - 15, 35); gwi->setData(gd, date); gwi->setRoundtype(rtype); //å°†æ�œç´¢åˆ°çš„æ—¥ç¨‹æ·»åŠ åˆ°å®¹å™¨ m_scheduleSearchItem.append(gwi); connect(gwi, &CScheduleSearchItem::signalSelectSchedule, this, &CScheduleSearchView::slotSelectSchedule); connect(gwi, &CScheduleSearchItem::signalSelectCurrentItem, this, &CScheduleSearchView::slotSelectCurrentItem); QListWidgetItem *listItem = new QListWidgetItem; listItem->setSizeHint(QSize(m_maxWidth - 15, 36)); //æ¯�次改å�˜Item的高度 listItem->setFlags(Qt::ItemIsAutoTristate); m_gradientItemList->addItem(listItem); m_gradientItemList->setItemWidget(listItem, gwi); m_labellist.append(gwi); } QListWidgetItem *CScheduleSearchView::createItemWidget(QDate date) { qCDebug(ClientLogger) << "CScheduleSearchView::createItemWidget (date), date:" << date; CScheduleSearchDateItem *gwi = new CScheduleSearchDateItem(); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeSixteen); gwi->setBackgroundColor(m_lBackgroundcolor); gwi->setText(m_lTextColor, font); if (date == QDate::currentDate()) { gwi->setText(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(), font); } gwi->setFixedSize(m_maxWidth - 15, 35); gwi->setDate(date); connect(gwi, &CScheduleSearchDateItem::signalLabelScheduleHide, this, &CScheduleSearchView::signalScheduleHide); QListWidgetItem *listItem = new QListWidgetItem; listItem->setSizeHint(QSize(m_maxWidth - 15, 36)); //æ¯�次改å�˜Item的高度 listItem->setFlags(Qt::ItemIsAutoTristate); m_gradientItemList->addItem(listItem); m_gradientItemList->setItemWidget(listItem, gwi); m_labellist.append(gwi); return listItem; } /** * @brief CScheduleSearchView::slotsetSearch 需è¦�æ�œç´¢æ—¥ç¨‹å…³é”®å­— * @param str */ void CScheduleSearchView::slotsetSearch(QString str) { qCDebug(ClientLogger) << "CScheduleSearchView::slotsetSearch, search string:" << str; if (str.isEmpty()) return; m_searchStr = str; QDateTime date = QDateTime::currentDateTime(); QDateTime bDate = date.addMonths(-6); if (bDate.date() < QDate(1900, 1, 1)) { qCWarning(ClientLogger) << "Start date is before 1900, adjusting to 1900-01-01"; bDate.setDate(QDate(1900, 1, 1)); } QDateTime eDate = date.addMonths(6); //查询æ�œç´¢ gScheduleManager->searchSchedule(str, bDate, eDate); } void CScheduleSearchView::slotScearedScheduleUpdate() { qCDebug(ClientLogger) << "CScheduleSearchView::slotScearedScheduleUpdate"; m_vlistData = gScheduleManager->getAllSearchedScheduleMap(); updateDateShow(); } void CScheduleSearchView::slotSelectSchedule(const DSchedule::Ptr &scheduleInfo) { qCDebug(ClientLogger) << "CScheduleSearchView::slotSelectSchedule"; emit signalSelectSchedule(scheduleInfo); } /** * @brief CScheduleSearchView::updateSearch æ›´æ–°æ�œç´¢ä¿¡æ�¯ */ void CScheduleSearchView::updateSearch() { qCDebug(ClientLogger) << "CScheduleSearchView::updateSearch"; if (isVisible()) { qCDebug(ClientLogger) << "View is visible, performing search"; slotsetSearch(m_searchStr); } } /** * @brief CScheduleSearchView::slotSelectCurrentItem 设置选中的item为嘴上é�¢ä¸€ä¸ª,实现滚动效果 * @param item 选中的item * @param itemFocusOut 是å�¦æ˜¯focusout事件 */ void CScheduleSearchView::slotSelectCurrentItem(CScheduleSearchItem *item, bool itemFocusOut) { qCDebug(ClientLogger) << "CScheduleSearchView::slotSelectCurrentItem, itemFocusOut:" << itemFocusOut; for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *cItem = m_gradientItemList->item(i); if (item == m_gradientItemList->itemWidget(cItem)) { m_selectItem = item; //设置选中的item为最上é�¢ä¸€ä¸ª m_gradientItemList->scrollToItem(cItem, QAbstractItemView::PositionAtTop); if (i == m_gradientItemList->count() - 1 && itemFocusOut && !keyPressUP) { //最å�Žä¸€ä¸ªitem,å�‘é€�ä¿¡å�·å°†ç„¦ç‚¹ä¼ é€’ç»™æ�œç´¢æ¡† qCDebug(ClientLogger) << "Last item focus out, emitting signal"; emit signalSelectCurrentItem(); } } } keyPressUP = false; } /** * @brief CScheduleSearchView::slotListWidgetClicked * æ ¹æ�®listwidget点击事件对当å‰�tab焦点itemå�šå¯¹åº”的处ç�† */ void CScheduleSearchView::slotListWidgetClicked() { qCDebug(ClientLogger) << "CScheduleSearchView::slotListWidgetClicked"; //å�–消当å‰�tab选中item m_selectItem = nullptr; emit signalScheduleHide(); } void CScheduleSearchView::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchView::resizeEvent"; for (int i = 0; i < m_gradientItemList->count(); i++) { QListWidgetItem *item11 = m_gradientItemList->item(i); item11->setSizeHint(QSize(m_maxWidth - 5, 36)); //æ¯�次改å�˜Item的高度 } for (int i = 0; i < m_labellist.count(); i++) { m_labellist.at(i)->setFixedSize(m_maxWidth - 20, 35); m_labellist.at(i)->update(); } if (m_gradientItemList->count() == 1) { QListWidgetItem *item11 = m_gradientItemList->item(0); item11->setSizeHint(QSize(m_maxWidth - 20, qRound(height() * 0.7978))); //æ¯�次改å�˜Item的高度 m_labellist.at(0)->setFixedSize(m_maxWidth - 20, qRound(height() * 0.7978)); m_labellist.at(0)->update(); } if (m_gradientItemList->count() > 1) { if (m_currentItem != nullptr) { m_gradientItemList->scrollToItem(m_currentItem, QAbstractItemView::PositionAtTop); } } DWidget::resizeEvent(event); } void CScheduleSearchView::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchView::mousePressEvent"; DWidget::mousePressEvent(event); } void CScheduleSearchView::keyPressEvent(QKeyEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchView::keyPressEvent, key:" << event->key(); if (event->key() == Qt::Key_Up) { //上键,选中上一个item keyPressUP = true; int selectNum = m_scheduleSearchItem.indexOf(m_selectItem); if (selectNum > 0) m_scheduleSearchItem.at(selectNum - 1)->setFocus(Qt::TabFocusReason); } if (event->key() == Qt::Key_Down) { //下键,选中下一个item int selectNum = m_scheduleSearchItem.indexOf(m_selectItem); if (selectNum < m_scheduleSearchItem.count() - 1) m_scheduleSearchItem.at(selectNum + 1)->setFocus(Qt::TabFocusReason); } DWidget::keyPressEvent(event); } void CScheduleSearchView::focusInEvent(QFocusEvent *e) { // qCDebug(ClientLogger) << "CScheduleSearchView::focusInEvent, reason:" << e->reason(); DWidget::focusInEvent(e); if (e->reason() == Qt::TabFocusReason) { if (m_scheduleSearchItem.size() > 0) { m_scheduleSearchItem.first()->setFocus(Qt::TabFocusReason); } } } CScheduleSearchDateItem::CScheduleSearchDateItem(QWidget *parent) : DLabel(parent) { // qCDebug(ClientLogger) << "CScheduleSearchDateItem::CScheduleSearchDateItem"; //设置对象å��称和辅助显示å��ç§° this->setObjectName("CScheduleDateItem"); this->setAccessibleName("CScheduleDateItem"); setAutoFillBackground(true); } void CScheduleSearchDateItem::setBackgroundColor(QColor color1) { // qCDebug(ClientLogger) << "CScheduleSearchDateItem::setBackgroundColor, color:" << color1; m_Backgroundcolor = color1; } void CScheduleSearchDateItem::setText(QColor tColor, QFont font) { // qCDebug(ClientLogger) << "CScheduleSearchDateItem::setText, color:" << tColor; m_textcolor = tColor; m_font = font; } void CScheduleSearchDateItem::setDate(QDate date) { // qCDebug(ClientLogger) << "CScheduleSearchDateItem::setDate, date:" << date; m_date = date; } void CScheduleSearchDateItem::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "CScheduleSearchDateItem::paintEvent"; Q_UNUSED(e); int labelwidth = width(); int labelheight = height(); QPainter painter(this); painter.setRenderHints(QPainter::Antialiasing); painter.setBrush(QBrush(m_Backgroundcolor)); painter.setPen(Qt::NoPen); painter.drawRect(this->rect()); painter.setFont(m_font); painter.setPen(m_textcolor); QLocale locale; QString datestr; if (locale.language() == QLocale::Chinese) { datestr = QString::number(m_date.year()) + tr("Y") + QString::number(m_date.month()) + tr("M") + QString::number(m_date.day()) + tr("D"); } else { datestr = m_date.toString("yyyy/M/d"); } painter.drawText(QRect(12, 8, labelwidth, labelheight - 8), Qt::AlignLeft, datestr); painter.end(); } void CScheduleSearchDateItem::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CScheduleSearchDateItem::mousePressEvent"; emit signalLabelScheduleHide(); DLabel::mousePressEvent(event); } CScheduleListWidget::CScheduleListWidget(QWidget *parent) : DListWidget(parent) { qCDebug(ClientLogger) << "CScheduleListWidget::CScheduleListWidget"; //设置对象å��称和辅助显示å��ç§° this->setObjectName("CScheduleListWidget"); this->setAccessibleName("CScheduleListWidget"); //接å�—触摸事件 setAttribute(Qt::WA_AcceptTouchEvents); //截获相应的gesture手势 grabGesture(Qt::TapGesture); grabGesture(Qt::TapAndHoldGesture); grabGesture(Qt::PanGesture); //日程类型å�‘生改å�˜ï¼Œåˆ·æ–°ç•Œé�¢ connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, [&]() { this->viewport()->update(); }); } CScheduleListWidget::~CScheduleListWidget() { qCDebug(ClientLogger) << "CScheduleListWidget::~CScheduleListWidget"; } void CScheduleListWidget::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "CScheduleListWidget::mousePressEvent"; DListWidget::mousePressEvent(event); emit signalListWidgetClicked(); } void CScheduleListWidget::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "CScheduleListWidget::paintEvent"; DListWidget::paintEvent(e); QPainter painter(this->viewport()); painter.setRenderHint(QPainter::Antialiasing); //绘制背景色 DPalette _backgroundP; QColor _backgroundColor = _backgroundP.color(QPalette::Active, QPalette::Base); painter.save(); painter.setPen(Qt::NoPen); painter.setBrush(_backgroundColor); painter.drawRect(this->rect()); painter.restore(); //绘制æ�œç´¢å�³ä¾§åœ†è§’效果 QColor _outBorderColor = _backgroundP.color(QPalette::Active, QPalette::Window); const qreal _radios = 8; painter.setPen(Qt::NoPen); painter.setBrush(_outBorderColor); // const qreal _outWidth = 10; //ä¸�需è¦�outwidth const qreal _outWidth = 0; const qreal _rectX = this->width() - _outWidth; QPainterPath _showPath; _showPath.moveTo(_rectX - _radios, 0); _showPath.lineTo(this->width(), 0); _showPath.lineTo(this->width(), this->height()); _showPath.lineTo(_rectX - _radios, this->height()); _showPath.arcTo(_rectX - _radios * 2, this->height() - _radios * 2, _radios * 2, _radios * 2, 270, 90); _showPath.lineTo(_rectX, _radios); _showPath.arcTo(_rectX - _radios * 2, 0, _radios * 2, _radios * 2, 0, 90); painter.drawPath(_showPath); painter.end(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/schedulesearchview.h000066400000000000000000000135401523260663500307050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULESEARCHVIEW_H #define SCHEDULESEARCHVIEW_H #include "dschedule.h" #include "schedulemanager.h" #include #include #include DWIDGET_USE_NAMESPACE class QVBoxLayout; class CScheduleListWidget; class CScheduleSearchItem; class CScheduleSearchDateItem; /** * @brief The CScheduleSearchView class * æ�œç´¢ç»“果展示界é�¢ */ class CScheduleSearchView : public DWidget { Q_OBJECT public: explicit CScheduleSearchView(QWidget *parent = nullptr); ~CScheduleSearchView() override; void setTheMe(int type = 0); //清空æ�œç´¢ void clearSearch(); void setMaxWidth(const int w); bool getHasScheduleShow(); bool getScheduleStatus(); void deleteSchedule(); signals: void signalSelectSchedule(const DSchedule::Ptr &scheduleInfo); void signalScheduleHide(); void signalSelectCurrentItem(); void signalSchotCutClicked(); public slots: //需è¦�æ�œç´¢æ—¥ç¨‹å…³é”®å­— void slotsetSearch(QString str); void slotSelectSchedule(const DSchedule::Ptr &scheduleInfo); //æ›´æ–°æ�œç´¢ä¿¡æ�¯ void updateSearch(); void slotSelectCurrentItem(CScheduleSearchItem *item, bool itemFocusOut); void slotListWidgetClicked(); void slotScearedScheduleUpdate(); protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void keyPressEvent(QKeyEvent *event) override; void focusInEvent(QFocusEvent *e) override; private: void updateDateShow(); void createItemWidget(DSchedule::Ptr info, QDate date, int rtype); QListWidgetItem *createItemWidget(QDate date); private: CScheduleListWidget *m_gradientItemList = nullptr; //下拉列表窗 bool m_widgetFlag; QMap m_vlistData; QVector m_labellist; int m_type; QDate m_currentDate; QColor m_bBackgroundcolor = "#000000"; QColor m_btimecolor = "#526A7F"; QColor m_btTextColor = "#414D68"; QColor m_lBackgroundcolor = Qt::white; QColor m_lTextColor = "#001A2E"; QListWidgetItem *m_currentItem = nullptr; int m_maxWidth = 200; int currentDItemIndex = -1; QString m_searchStr{""}; bool hasScheduleShow = false; bool keyPressUP = false; CScheduleSearchItem *m_selectItem = nullptr; QVector m_scheduleSearchItem{}; }; class CScheduleListWidget : public DListWidget { Q_OBJECT public: explicit CScheduleListWidget(QWidget *parent = nullptr); ~CScheduleListWidget() override; signals: void signalListWidgetClicked(); protected: void mousePressEvent(QMouseEvent *event) override; void paintEvent(QPaintEvent *e) override; }; class CScheduleSearchItem : public DLabel { Q_OBJECT enum MouseStatus { M_NONE, M_PRESS, M_HOVER }; public: explicit CScheduleSearchItem(QWidget *parent = nullptr); void setBackgroundColor(QColor color1); void setText(QColor tColor, QFont font); void setTimeC(QColor tColor, QFont font); void setData(DSchedule::Ptr vScheduleInfo, QDate date); void setRoundtype(int rtype); void setTheMe(int type = 0); void setDurationSize(QFont font); const DSchedule::Ptr &getData() const { return m_ScheduleInfo; } signals: void signalsDelete(CScheduleSearchItem *item); void signalsEdit(CScheduleSearchItem *item); void signalSelectSchedule(const DSchedule::Ptr &scheduleInfo); void signalSelectCurrentItem(CScheduleSearchItem *item, bool focusOutStatus); public slots: void slotEdit(); void slotDelete(); void slotTimeFormatChanged(int value); void slotSchotCutClicked(); protected: void paintEvent(QPaintEvent *e) override; void contextMenuEvent(QContextMenuEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) void enterEvent(QEnterEvent *event) override; #else void enterEvent(QEvent *event) override; #endif void leaveEvent(QEvent *event) override; bool eventFilter(QObject *o, QEvent *e) override; void focusInEvent(QFocusEvent *e) override; void focusOutEvent(QFocusEvent *e) override; void keyPressEvent(QKeyEvent *event) override; private: struct ColorStatus { QColor background; QColor timeColor; QColor textColor; }; DSchedule::Ptr m_ScheduleInfo; QAction *m_editAction = nullptr; QAction *m_deleteAction = nullptr; QColor m_Backgroundcolor; ColorStatus m_presscolor; ColorStatus m_hovercolor; QColor m_timecolor; QFont m_timefont; QColor m_tTextColor; QFont m_tFont; QDate m_date; MouseStatus m_mouseStatus; DMenu *m_rightMenu = nullptr; int m_roundtype = 1; const int m_radius = 8; const int m_borderframewX = 1; //绘制区域起始ä½�ç½®xå��标点 const int m_borderframewY = 0; //绘制区域起始ä½�ç½®yå��标点 QString m_timeFormat = "hh:mm"; int m_durationSize = 0; bool m_tabFocus {false}; bool m_tabFocusBeforeActive {false}; //ä¿�存应用被激活å‰�是å�¦å­˜åœ¨tab焦点效果 }; class CScheduleSearchDateItem : public DLabel { Q_OBJECT public: explicit CScheduleSearchDateItem(QWidget *parent = nullptr); void setBackgroundColor(QColor color1); void setText(QColor tColor, QFont font); void setDate(QDate date); signals: void signalLabelScheduleHide(); protected: void paintEvent(QPaintEvent *e) override; void mousePressEvent(QMouseEvent *event) override; private: QColor m_Backgroundcolor; QColor m_textcolor; QFont m_font; QDate m_date; }; #endif // SCHEDULESEARCHVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/settingWidget/000077500000000000000000000000001523260663500274755ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/settingWidget/settingwidgets.cpp000066400000000000000000000072641523260663500332560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "settingwidgets.h" #include "accountmanager.h" #include "calendarmanage.h" #include "units.h" #include "commondef.h" #include #include #include DWIDGET_USE_NAMESPACE using namespace SettingWidget; SettingWidgets::SettingWidgets(QWidget *parent) : QObject(parent) { qCDebug(ClientLogger) << "SettingWidgets constructed"; } SyncTagRadioButton::SyncTagRadioButton(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "SyncTagRadioButton constructed"; } bool SyncTagRadioButton::isChecked() { return m_checked; } void SyncTagRadioButton::setChecked(bool checked) { if (m_checked == checked) return; m_checked = checked; qCDebug(ClientLogger) << "SyncTagRadioButton checked state changed to:" << checked; update(); } void SyncTagRadioButton::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter(this); QIcon icon = DStyle::standardIcon(this->style(), m_checked ? DStyle::SP_IndicatorChecked : DStyle::SP_IndicatorUnchecked); int y = (this->height() - 16) / 2; int x = (this->width() - 16) / 2; icon.paint(&painter, QRect(x, y, 16, 16), Qt::AlignCenter, isEnabled() ? QIcon::Normal : QIcon::Disabled); } void SyncTagRadioButton::mouseReleaseEvent(QMouseEvent *event) { QWidget::mouseReleaseEvent(event); // qCDebug(ClientLogger) << "SyncTagRadioButton mouse released, toggling state"; setChecked(!m_checked); emit clicked(isChecked()); } void CalendarSettingSettings::removeGroup(const QString &groupName, const QString &groupName2) { qCDebug(ClientLogger) << "Removing group:" << groupName << "and subgroup:" << groupName2; int index = this->indexOf(*this, groupName); if (index < 0) { qCDebug(ClientLogger) << "Group not found:" << groupName; return; } CalendarSettingGroups &groups = this->operator[](index)._groups; { int index = indexOf(groups, groupName2); if (index < 0) { qCDebug(ClientLogger) << "Subgroup not found:" << groupName2; return; } groups.removeAt(index); qCDebug(ClientLogger) << "Subgroup removed:" << groupName2; } if (groups.isEmpty()) { this->removeAt(index); qCDebug(ClientLogger) << "Group also removed (empty):" << groupName; } } void CalendarSettingSettings::removeGroup(const QString &groupName) { qCDebug(ClientLogger) << "Removing group:" << groupName; int index = this->indexOf(*this, groupName); if (index < 0) { qCDebug(ClientLogger) << "Group not found:" << groupName; return; } this->removeAt(index); qCDebug(ClientLogger) << "Group removed:" << groupName; } int CalendarSettingSettings::indexOf(const CalendarSettingGroups &groups, const QString groupName) { qCDebug(ClientLogger) << "Searching for subgroup:" << groupName; for (int k = 0; k < groups.count(); k++) { if (groups[k]._key == groupName) { qCDebug(ClientLogger) << "Subgroup found:" << groupName; return k; } } qCDebug(ClientLogger) << "Subgroup not found:" << groupName; return -1; } int CalendarSettingSettings::indexOf(const CalendarSettingSettings &groups, const QString groupName) { qCDebug(ClientLogger) << "Searching for group:" << groupName; for (int k = 0; k < groups.count(); k++) { if (groups[k]._key == groupName) { qCDebug(ClientLogger) << "Group found:" << groupName; return k; } } qCDebug(ClientLogger) << "Group not found:" << groupName; return -1; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/settingWidget/settingwidgets.h000066400000000000000000000107601523260663500327160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SETTINGWIDGETS_H #define SETTINGWIDGETS_H #include "jobtypelistview.h" #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE namespace SettingWidget{ struct CalendarSettingOption{ CalendarSettingOption(){} CalendarSettingOption(const std::initializer_list &list){ int index = 0; for(auto d : list) { if(0 == index) _key = d; if(1 == index) _name = d; if(2 == index) _type = d; if(3 == index) _default = d; if(4 == index) _text = d; index ++; } } QJsonObject toJson(){ QJsonObject obj; obj.insert("key", _key); obj.insert("type", _type); obj.insert("name", _name); obj.insert("default", _default); obj.insert("text", _text); return obj; } QString _key; QString _type; QString _name; QString _default; QString _text; }; struct CalendarSettingOptions : public QList{ CalendarSettingOptions(){} CalendarSettingOptions(const std::initializer_list &list){ for(auto d : list) append(d); } QJsonArray tojson() { QJsonArray arr; for(auto option: *this) { arr.append(option.toJson()); } return arr; } }; struct CalendarSettingGroup{ QString _key; QString _name; CalendarSettingOptions _options; QJsonObject toJson(){ QJsonObject obj; obj.insert("key", _key); obj.insert("name", _name); obj.insert("options", _options.tojson()); return obj; } }; struct CalendarSettingGroups : public QList { CalendarSettingGroups(){} CalendarSettingGroups(const std::initializer_list &list){ for(auto d : list) append(d); } QJsonArray toJson() { QJsonArray arr; for(auto group: *this) { arr.append(group.toJson()); } return arr; } }; struct CalendarSettingSetting { QString _key; QString _name; CalendarSettingGroups _groups; QJsonObject toJson() { QJsonObject obj; obj.insert("key", _key); obj.insert("name", _name); obj.insert("groups", _groups.toJson()); return obj; } }; struct CalendarSettingSettings : public QList { CalendarSettingSettings(){} CalendarSettingSettings(const std::initializer_list &list){ for(auto d : list) append(d); } QJsonArray toJson() { QJsonArray arr; for(auto setting: *this) { arr.append(setting.toJson()); } return arr; } void removeGroup(const QString &groupName, const QString &groupName2); void removeGroup(const QString &groupName); int indexOf(const CalendarSettingGroups &groups, const QString groupName); int indexOf(const CalendarSettingSettings &groups, const QString groupName); }; /** * @brief The SyncTagRadioButton class 实现checkstate效果的类 */ class SyncTagRadioButton : public QWidget { Q_OBJECT public: SyncTagRadioButton(QWidget *parent = nullptr); bool isChecked(); /** * @brief setChecked 是å�¦é€‰ä¸­ */ void setChecked(bool checked); signals: void clicked(bool checked); protected: void paintEvent(QPaintEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; private: bool m_checked = true; }; }//~CalendarSetting class SettingWidgets : public QObject { Q_OBJECT public: explicit SettingWidgets(QWidget *parent = nullptr); }; #endif // SETTINGWIDGETS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/settingWidget/userloginwidget.cpp000066400000000000000000000153251523260663500334220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "userloginwidget.h" #include "accountmanager.h" #include "doanetworkdbus.h" #include "commondef.h" #include #include #include #include #include UserloginWidget::UserloginWidget(QWidget *parent) : QWidget(parent) , m_loginStatus(false) { qCDebug(ClientLogger) << "UserloginWidget constructed"; initView(); initConnect(); slotAccountUpdate(); } UserloginWidget::~UserloginWidget() { qCDebug(ClientLogger) << "UserloginWidget destroyed"; } void UserloginWidget::initView() { qCDebug(ClientLogger) << "Initializing UserloginWidget view"; m_userNameLabel = new DLabel(); m_userNameLabel->setElideMode(Qt::ElideMiddle); m_userNameLabel->setTextFormat(Qt::PlainText); m_buttonImg = new DIconButton(this); m_buttonLogin = new QPushButton(this); m_buttonLoginOut = new QPushButton(this); m_buttonLogin->setFixedSize(98, 36); m_buttonLoginOut->setFixedSize(98, 36); QHBoxLayout *layout = new QHBoxLayout(this); const QIcon &icon = QIcon::fromTheme("dde_calendar_account"); m_buttonImg->setIcon(icon); m_buttonImg->setIconSize(QSize(36, 36)); m_buttonImg->setStyleSheet("border:0px solid;"); layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(m_buttonImg); layout->addSpacing(5); layout->addWidget(m_userNameLabel); layout->addStretch(); m_buttonLogin->setText(tr("Sign In", "button")); m_buttonLoginOut->setText(tr("Sign Out", "button")); m_buttonLoginOut->hide(); layout->addWidget(m_buttonLogin); layout->addWidget(m_buttonLoginOut); this->layout()->setAlignment(Qt::AlignLeft); m_ptrDoaNetwork = new DOANetWorkDBus(this); if (m_ptrDoaNetwork->getNetWorkState() == DOANetWorkDBus::NetWorkState::Active) { qCDebug(ClientLogger) << "Network is active, enabling login/logout buttons"; m_buttonLoginOut->setEnabled(true); m_buttonLogin->setEnabled(true); } else { qCDebug(ClientLogger) << "Network is not active, disabling login/logout buttons"; m_buttonLogin->setEnabled(false); m_buttonLoginOut->setEnabled(false); } m_networkManager = new QNetworkAccessManager(this); } void UserloginWidget::initConnect() { qCDebug(ClientLogger) << "Initializing UserloginWidget connections"; connect(m_buttonLogin, &QPushButton::clicked, this, &UserloginWidget::slotLoginBtnClicked); connect(m_buttonLoginOut, &QPushButton::clicked, this, &UserloginWidget::slotLogoutBtnClicked); connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &UserloginWidget::slotAccountUpdate); connect(m_networkManager, &QNetworkAccessManager::finished, this, &UserloginWidget::slotReplyPixmapLoad); connect(m_ptrDoaNetwork, &DOANetWorkDBus::sign_NetWorkChange, this, &UserloginWidget::slotNetworkStateChange); } QPixmap UserloginWidget::pixmapToRound(const QPixmap &src, int radius) { qCDebug(ClientLogger) << "Converting pixmap to round with radius:" << radius; QSize size(2 * radius, 2 * radius); QPixmap pic(size); pic.fill(Qt::transparent); QPainterPath painterPath; painterPath.addEllipse(QRect(0, 0, pic.width(), pic.height())); QPainter painter(&pic); painter.setRenderHint(QPainter::Antialiasing); painter.setClipPath(painterPath); painter.drawPixmap(0, 0, src.scaled(size)); pic.setDevicePixelRatio(devicePixelRatioF()); return pic; } void UserloginWidget::slotNetworkStateChange(DOANetWorkDBus::NetWorkState state) { qCDebug(ClientLogger) << "Network state changed to:" << static_cast(state); if (DOANetWorkDBus::NetWorkState::Disconnect == state) { qCDebug(ClientLogger) << "Network disconnected, disabling login/logout buttons"; m_buttonLogin->setEnabled(false); m_buttonLoginOut->setEnabled(false); } else if (DOANetWorkDBus::NetWorkState::Active == state) { qCDebug(ClientLogger) << "Network active, enabling login/logout buttons"; m_buttonLoginOut->setEnabled(true); m_buttonLogin->setEnabled(true); } } void UserloginWidget::slotLoginBtnClicked() { qCDebug(ClientLogger) << "Login button clicked, initiating login"; gAccountManager->login(); } void UserloginWidget::slotLogoutBtnClicked() { qCDebug(ClientLogger) << "Logout button clicked, initiating logout"; gAccountManager->loginout(); } void UserloginWidget::slotAccountUpdate() { qCDebug(ClientLogger) << "Account update received"; if (gUosAccountItem) { //账户为登录状æ€� qCDebug(ClientLogger) << "Account is logged in"; m_buttonLogin->hide(); m_buttonLoginOut->show(); DAccount::Ptr account = gUosAccountItem->getAccount(); m_userNameLabel->setText(account->accountName()); m_userNameLabel->setToolTip("

" + account->accountName().toHtmlEscaped()); // 这里的url一定�带上http://头的, 跟在�览器里输入其它链接�太一样,�览器里�会自动转的,这里需�手动加上。 m_networkManager->get(QNetworkRequest(account->avatar())); } else { //账户为未登录状� qCDebug(ClientLogger) << "Account is logged out"; m_buttonLoginOut->hide(); m_buttonLogin->show(); m_userNameLabel->setText(""); m_userNameLabel->setToolTip(""); m_buttonImg->setIcon(QIcon::fromTheme("dde_calendar_account")); } } void UserloginWidget::slotReplyPixmapLoad(QNetworkReply *reply) { qCDebug(ClientLogger) << "Network reply received for avatar"; QPixmap pixmap; //因自定义头�路径拿到的�是真实路径,需�从请求头中拿�到真实路径�次�起请求 QUrl url = reply->header(QNetworkRequest::LocationHeader).toUrl(); if (url.url().isEmpty()) { qCDebug(ClientLogger) << "Using direct avatar data from reply"; pixmap.loadFromData(reply->readAll()); } else { qCDebug(ClientLogger) << "Found redirect URL for avatar:" << url.toString(); m_networkManager->get(QNetworkRequest(url.url())); } if (!pixmap.isNull()) { qCDebug(ClientLogger) << "Avatar loaded successfully, updating UI"; m_buttonImg->setIcon(pixmapToRound(pixmap, 32)); } } QPair UserloginWidget::createloginButton(QObject *obj) { qCDebug(ClientLogger) << "Creating login button for settings"; auto option = qobject_cast(obj); QPair optionWidget = DSettingsWidgetFactory::createStandardItem(QByteArray(), option, new UserloginWidget()); return optionWidget; } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/settingWidget/userloginwidget.h000066400000000000000000000025271523260663500330670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef USERLOGIN_H #define USERLOGIN_H #include "dsettingsdialog.h" #include "doanetworkdbus.h" #include #include #include #include DWIDGET_USE_NAMESPACE //�置界�账户登录部件 class UserloginWidget: public QWidget { Q_OBJECT public: explicit UserloginWidget(QWidget *parent = nullptr); virtual ~UserloginWidget(); static QPair createloginButton(QObject *obj); signals: public slots: void slotLoginBtnClicked(); void slotLogoutBtnClicked(); void slotAccountUpdate(); //网络图片请求完�事件 void slotReplyPixmapLoad(QNetworkReply *); // 网络状��生改� void slotNetworkStateChange(DOANetWorkDBus::NetWorkState state); private: void initView(); void initConnect(); QPixmap pixmapToRound(const QPixmap &src, int radius); private: bool m_loginStatus; bool m_isManualQuit = false; DLabel *m_userNameLabel = nullptr; DIconButton *m_buttonImg = nullptr; QPushButton *m_buttonLogin = nullptr; QPushButton *m_buttonLoginOut = nullptr; QNetworkAccessManager *m_networkManager; DOANetWorkDBus * m_ptrDoaNetwork; }; #endif // USERLOGIN_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget/000077500000000000000000000000001523260663500274315ustar00rootroot00000000000000sidebarcalendarwidget.cpp000066400000000000000000000305421523260663500343710ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebarcalendarwidget.h" #include "cschedulebasewidget.h" #include "constants.h" #include "units.h" #include "commondef.h" #include #include QDate SidebarCalendarKeyButton::m_selectedData = QDate(); QDate SidebarCalendarKeyButton::m_displayedMonth = QDate(); SidebarCalendarWidget::SidebarCalendarWidget(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "SidebarCalendarWidget constructed"; initView(); initConnection(); initData(); } void SidebarCalendarWidget::initView() { qCDebug(ClientLogger) << "Initializing SidebarCalendarWidget view"; m_dateLabel = new QLabel(); QFont font = m_dateLabel->font(); font.setPixelSize(DDECalendar::FontSizeTwelve); m_dateLabel->setFont(font); m_nextPage = new QPushButton(); m_previousPage = new QPushButton(); m_nextPage->setIcon(DStyle().standardIcon(QStyle::SP_ArrowRight)); m_previousPage->setIcon(DStyle().standardIcon(QStyle::SP_ArrowLeft)); m_nextPage->setFixedSize(20, 20); m_previousPage->setFixedSize(20, 20); m_nextPage->setIconSize(QSize(10,10)); m_previousPage->setIconSize(QSize(10,10)); m_nextPage->setFlat(true); m_previousPage->setFlat(true); m_nextPage->setFocusPolicy(Qt::NoFocus); m_previousPage->setFocusPolicy(Qt::NoFocus); QHBoxLayout *headLayout = new QHBoxLayout(); headLayout->setContentsMargins(0, 0, 0, 0); headLayout->setAlignment(Qt::AlignCenter); headLayout->addWidget(m_previousPage); headLayout->addWidget(m_dateLabel); headLayout->addWidget(m_nextPage); m_headWidget = new QWidget(this); m_headWidget->setLayout(headLayout); m_headWidget->setMinimumHeight(30); m_weekWidget = new CWeekWidget(this); m_weekWidget->setAutoFontSizeByWindow(false); m_weekWidget->setFirstDay(Qt::Sunday); m_keyWidget = new QWidget(this); m_keyLayout = new QGridLayout(); m_keyLayout->setContentsMargins(0, 0, 0, 0); m_keyLayout->setSpacing(0); m_keyWidget->setLayout(m_keyLayout); //循�实例化6*7个日期按键 qCDebug(ClientLogger) << "Creating date buttons for calendar"; for (int i = 0; i < 42; ++i) { SidebarCalendarKeyButton *button = new SidebarCalendarKeyButton(); button->setFocusPolicy(Qt::NoFocus); m_keyButtonList.push_back(button); m_keyLayout->addWidget(button, i/7, i%7, 1, 1, Qt::AlignCenter); connect(button, &SidebarCalendarKeyButton::signaClicked, this, &SidebarCalendarWidget::slotKeyButtonClicked); } QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->setContentsMargins(0, 0, 0, 0); this->setLayout(mainLayout); mainLayout->addSpacing(6); mainLayout->addWidget(m_headWidget); mainLayout->addWidget(m_weekWidget, 1); mainLayout->addWidget(m_keyWidget, 6); } /** * @brief SidebarCalendarWidget::initConnection * �始化信�链接 */ void SidebarCalendarWidget::initConnection() { qCDebug(ClientLogger) << "Initializing SidebarCalendarWidget connections"; connect(m_nextPage, &QPushButton::clicked, this, &SidebarCalendarWidget::slotNextPageClicked); connect(m_previousPage, &QPushButton::clicked, this, &SidebarCalendarWidget::slotPreviousPageClicked); connect(CalendarManager::getInstance(), &CalendarManager::sigNotifySidebarFirstDayChanged, this, &SidebarCalendarWidget::slotFirstDayChanged); } /** * @brief SidebarCalendarWidget::initData * �始化数� */ void SidebarCalendarWidget::initData() { qCDebug(ClientLogger) << "Initializing SidebarCalendarWidget data"; m_firstday = CalendarManager::getInstance()->getFirstDayOfWeek(); QDate date = QDate::currentDate(); setDate(date); } /** * @brief SidebarCalendarWidget::setDate * 设置显示的日期 * @param date 将被选择显示的日期 */ void SidebarCalendarWidget::setDate(QDate& date) { qCDebug(ClientLogger) << "Setting sidebar calendar date to:" << date.toString(); SidebarCalendarKeyButton::setSelectedDate(date); setKeyDate(date); } /** * @brief SidebarCalendarWidget::setKeyDate * 根�选中的日期设置按钮显示的日期范围 * @param date 待显示的月日期 */ void SidebarCalendarWidget::setKeyDate(QDate date) { qCDebug(ClientLogger) << "Setting key date for calendar display to:" << date.toString(); if(!withinTimeFrame(date)){ qCDebug(ClientLogger) << "Date" << date.toString() << "not within time frame, ignoring"; return; } QString fd = ""; fd.append("yyyy").append(tr("Y")).append(" ").append("MM").append(tr("M")); m_dateLabel->setText(date.toString(fd)); SidebarCalendarKeyButton::setDisplayedMonth(date); //获�当月第一天 date = QDate(date.year(), date.month(), 1); // int firstday = CalendarManager::getInstance()->getFirstDayOfWeek(); int day = date.dayOfWeek(); //计算当�月日历第一天该显示的时间 date = date.addDays(-(day - m_firstday + 7) % 7); qCDebug(ClientLogger) << "First date to display in calendar grid:" << date.toString(); for (SidebarCalendarKeyButton* btn : m_keyButtonList) { btn->setDate(date); date = date.addDays(1); } update(); } /** * @brief SidebarCalendarWidget::slotKeyButtonClicked * 日期按键点击事件 * @param keyButton 事件��者 */ void SidebarCalendarWidget::slotKeyButtonClicked(SidebarCalendarKeyButton* keyButton) { QDate date = keyButton->getSelectedDate(); qCDebug(ClientLogger) << "Date button clicked, selected date:" << date.toString(); if(!withinTimeFrame(date)){ qCDebug(ClientLogger) << "Selected date not within time frame, ignoring"; return; } if (date.year() ==keyButton->getDisplayedMonth().year() && date.month() == keyButton->getDisplayedMonth().month()) { //未切�月份,�刷新界�显示 qCDebug(ClientLogger) << "Date is in current month, only updating display"; update(); } else { //已切�月份,�新设置选中的日期 qCDebug(ClientLogger) << "Date is in different month, changing displayed month"; setDate(date); } CScheduleBaseWidget::setSelectDate(date); } /** * @brief SidebarCalendarWidget::slotNextPageClicked * 下一页切�事件 */ void SidebarCalendarWidget::slotNextPageClicked() { qCDebug(ClientLogger) << "Next month button clicked"; //设置显示月份日期 QDate date = SidebarCalendarKeyButton::getDisplayedMonth().addMonths(+1); qCDebug(ClientLogger) << "Changing displayed month to:" << date.toString("yyyy-MM"); //设置显示的日期范围 setKeyDate(date); } /** * @brief SidebarCalendarWidget::slotPreviousPageClicked * 上一页切�事件 */ void SidebarCalendarWidget::slotPreviousPageClicked() { qCDebug(ClientLogger) << "Previous month button clicked"; //设置显示月份日期 QDate date = SidebarCalendarKeyButton::getDisplayedMonth().addMonths(-1); qCDebug(ClientLogger) << "Changing displayed month to:" << date.toString("yyyy-MM"); //设置显示的日期范围 setKeyDate(date); } void SidebarCalendarWidget::slotFirstDayChanged(int value) { qCDebug(ClientLogger) << "First day of week changed to:" << value; m_firstday = value; setKeyDate(SidebarCalendarKeyButton::getSelectedDate()); } SidebarCalendarKeyButton::SidebarCalendarKeyButton(QWidget *parent) : QPushButton(parent) { // qCDebug(ClientLogger) << "SidebarCalendarKeyButton constructed"; setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); setMinimumSize(QSize(10, 10)); } /** * @brief SidebarCalendarKeyButton::setSelectedDate * 设置被选中的日期 * @param date 将被选中的日期 */ void SidebarCalendarKeyButton::setSelectedDate(const QDate& date) { // qCDebug(ClientLogger) << "Setting static selected date to:" << date.toString(); m_selectedData = date; } /** * @brief SidebarCalendarKeyButton::getSelectedDate * @return 当�被选中的日期 */ QDate SidebarCalendarKeyButton::getSelectedDate() { // qCDebug(ClientLogger) << "Getting static selected date"; return m_selectedData; } /** * @brief SidebarCalendarKeyButton::setDisplayedMonth * 设置显示的月份 * @param date 将显示的月份日期 */ void SidebarCalendarKeyButton::setDisplayedMonth(const QDate& date) { // qCDebug(ClientLogger) << "Setting static displayed month to:" << date.toString("yyyy-MM"); m_displayedMonth = date; } /** * @brief SidebarCalendarKeyButton::getDisplayedMonth * @return 当�显示的月份日期 */ QDate SidebarCalendarKeyButton::getDisplayedMonth() { // qCDebug(ClientLogger) << "Getting static displayed month"; return m_displayedMonth; } /** * @brief SidebarCalendarKeyButton::setDate * 设置被显示的日期 * @param date 将被显示的日期 */ void SidebarCalendarKeyButton::setDate(const QDate& date) { // qCDebug(ClientLogger) << "Setting static displayed date to:" << date.toString(); this->m_displayedDate = date; update(); } /** * @brief SidebarCalendarKeyButton::getDate * @return 当�显示的日期 */ QDate SidebarCalendarKeyButton::getDate() { // qCDebug(ClientLogger) << "Getting static displayed date"; return m_displayedDate; } /** * @brief SidebarCalendarKeyButton::click * 点击事件 */ void SidebarCalendarKeyButton::click() { qCDebug(ClientLogger) << "Calendar key button clicked, date:" << m_displayedDate.toString(); if(!withinTimeFrame(m_displayedDate)){ qCDebug(ClientLogger) << "Date not within time frame, ignoring click"; return; } m_selectedData = m_displayedDate; emit signaClicked(this); } void SidebarCalendarKeyButton::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Calendar key button mouse pressed, date:" << m_displayedDate.toString(); //判断鼠标左键按下事件 if (event->button() == Qt::LeftButton) { this->pressed = true; } QWidget::mousePressEvent(event); } void SidebarCalendarKeyButton::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Calendar key button mouse released, date:" << m_displayedDate.toString(); //判断鼠标左键释放事件 if (pressed && event->button() == Qt::LeftButton && rect().contains(event->pos())) { click(); pressed = false; } else if (event->button() == Qt::LeftButton) { pressed = false; } QWidget::mouseReleaseEvent(event); } void SidebarCalendarKeyButton::mouseMoveEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Calendar key button mouse moved, date:" << m_displayedDate.toString(); //判断鼠标左键移动事件 if (event->button() == Qt::LeftButton && rect().contains(event->pos())) { pressed = true; } else if (event->button() == Qt::LeftButton) { pressed = false; } } void SidebarCalendarKeyButton::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "Calendar key button paint event, date:" << m_displayedDate.toString(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); qreal w = this->width(); qreal h = this->height(); const qreal r = w > h ? h: w; QRectF rectf(qRound((w-r)/2), qRound((h-r)/2), r, r); //绘制区域 QFont font; font.setPixelSize(DDECalendar::FontSizeTwelve); painter.setFont(font); if (m_displayedDate == m_selectedData && withinTimeFrame(m_displayedDate)) { // qCDebug(ClientLogger) << "Calendar key button paint event, date:" << m_displayedDate.toString() << "is selected"; painter.setPen(Qt::NoPen); painter.setBrush(DPaletteHelper::instance()->palette(this).highlight()); //绘制高亮背景 painter.drawEllipse(rectf); //设置高亮下的字体颜色 painter.setPen(DPaletteHelper::instance()->palette(this).highlightedText().color()); } else if (!(m_displayedDate.year() == m_displayedMonth.year() && m_displayedDate.month() == m_displayedMonth.month())){ // qCDebug(ClientLogger) << "Calendar key button paint event, date:" << m_displayedDate.toString() << "is not selected"; //设置正常显示状�下的字体颜色 painter.setOpacity(0.3); } //获�待绘制的文字 QString text = QString::number(m_displayedDate.day()); //绘制文字 painter.drawText(rectf, text, QTextOption(Qt::AlignCenter)); QWidget::paintEvent(event); } sidebarcalendarwidget.h000066400000000000000000000055611523260663500340410ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SIDEBARCALENDARWIDGET_H #define SIDEBARCALENDARWIDGET_H #include "cweekwidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class SidebarCalendarKeyButton; //�日历类 class SidebarCalendarWidget : public QWidget { Q_OBJECT public: explicit SidebarCalendarWidget(QWidget *parent = nullptr); //设置选中的日期 void setDate(QDate&); signals: public slots: //日期按键点击事件 void slotKeyButtonClicked(SidebarCalendarKeyButton*); //下一页按钮点击事件 void slotNextPageClicked(); //上一页按钮点击事件 void slotPreviousPageClicked(); //一周首日更新 void slotFirstDayChanged(int value); private: void initView(); void initConnection(); void initData(); //根�选中的日期设置按钮显示的日期范围 date:选中的日期 void setKeyDate(QDate date); private: QWidget* m_headWidget = nullptr; //头部控件 CWeekWidget* m_weekWidget = nullptr; //周显示区域控件 QWidget* m_keyWidget = nullptr; //日期按钮区域控件 QGridLayout* m_keyLayout = nullptr; //按钮布局 QLabel* m_dateLabel = nullptr; //头部日期显示label DPushButton* m_nextPage = nullptr; //下一页切�按键 DPushButton* m_previousPage = nullptr; //上一页切�按键 QList m_keyButtonList; //所有的日期按钮控件 int m_firstday = Qt::Sunday; }; //日历按键类 class SidebarCalendarKeyButton : public QPushButton { Q_OBJECT public: explicit SidebarCalendarKeyButton(QWidget *parent = nullptr); //设置当�按钮显示的日期 void setDate(const QDate&); //获�当�按钮显示的日期 QDate getDate(); signals: //点击事件信� void signaClicked(SidebarCalendarKeyButton*); public slots: void click(); private: //设置被选中的日期 static void setSelectedDate(const QDate&); //获�当�被选中的日期 static QDate getSelectedDate(); //设置显示的月份日期 static void setDisplayedMonth(const QDate&); //获�当�显示的月份日期 static QDate getDisplayedMonth(); protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; private: static QDate m_selectedData; //被选中的日期 static QDate m_displayedMonth; //显示的月份日期 QDate m_displayedDate; //当�显示的日期 bool pressed = false; //是�按下 friend SidebarCalendarWidget; }; #endif // SIDEBARCALENDARWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget/sidebaritemwidget.cpp000066400000000000000000000340531523260663500336360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebaritemwidget.h" #include "accountmanager.h" #include "commondef.h" #include #include #include #include #include SidebarItemWidget::SidebarItemWidget(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "SidebarItemWidget constructed"; setFixedWidth(170); } SidebarItemWidget *SidebarItemWidget::getAccountItemWidget(AccountItem::Ptr ptr) { qCDebug(ClientLogger) << "Creating account item widget for account ID:" << ptr->getAccount()->accountID(); return new SidebarAccountItemWidget(ptr); } /** * @brief SidebarItemWidget::getLocalWidget * 获��层本地日程item控件,有�选框 * @param info 本地日程类型 * @return �层选项控件 */ SidebarItemWidget *SidebarItemWidget::getTypeItemWidget(DScheduleType::Ptr ptr) { qCDebug(ClientLogger) << "Creating type item widget for schedule type:" << ptr->displayName() << "with ID:" << ptr->typeID(); return new SidebarTypeItemWidget(ptr); } /** * @brief SidebarItemWidget::setSelectStatus * 设置选中状� * @param status 将被设置的状� */ void SidebarItemWidget::setSelectStatus(bool status) { if (status == m_selectStatus && m_item && status == m_item->isExpanded()) { qCDebug(ClientLogger) << "Select status unchanged for item with ID:" << m_id; return; } qCDebug(ClientLogger) << "Setting select status to:" << status << "for item with ID:" << m_id; m_selectStatus = status; //根�控件类型设置�应控件状� updateStatus(); if (m_item && m_item->isExpanded() != status) { //设置列表展开状� qCDebug(ClientLogger) << "Setting tree item expanded state to:" << status; m_item->setExpanded(status); } emit signalStatusChange(m_selectStatus, m_id); } /** * @brief SidebarItemWidget::getSelectStatus * 获�当�状� * @return */ bool SidebarItemWidget::getSelectStatus() { // qCDebug(ClientLogger) << "Getting select status for item with ID:" << m_id; return m_selectStatus; } /** * @brief SidebarItemWidget::switchState * 切�状� */ void SidebarItemWidget::switchState() { // qCDebug(ClientLogger) << "Switching select state for item with ID:" << m_id; setSelectStatus(!m_selectStatus); } /** * @brief SidebarItemWidget::setItem * 设置关�的item * @param item 待关�的item */ void SidebarItemWidget::setItem(QTreeWidgetItem *item) { // qCDebug(ClientLogger) << "Setting tree item for sidebar item with ID:" << m_id; m_item = item; } QTreeWidgetItem *SidebarItemWidget::getTreeItem() { return m_item; } void SidebarItemWidget::mouseDoubleClickEvent(QMouseEvent *event) { Q_UNUSED(event) // qCDebug(ClientLogger) << "Double-click event on sidebar item with ID:" << m_id; switchState(); } void SidebarItemWidget::mouseReleaseEvent(QMouseEvent *) { //�蔽鼠标释放事件,解决�击时触���事件的问题 } SidebarTypeItemWidget::SidebarTypeItemWidget(DScheduleType::Ptr ptr, QWidget *parent) : SidebarItemWidget(parent) , m_scheduleType(ptr) { qCDebug(ClientLogger) << "SidebarTypeItemWidget constructed for type:" << ptr->displayName(); initView(); m_id = m_scheduleType->accountID(); } void SidebarTypeItemWidget::initView() { qCDebug(ClientLogger) << "Initializing SidebarTypeItemWidget view for type ID:" << m_scheduleType->typeID(); QHBoxLayout *vLayout = new QHBoxLayout(this); vLayout->setContentsMargins(5, 0, 0, 0); vLayout->setSpacing(0); m_checkBox = new QCheckBox(this); QPalette palette = m_checkBox->palette(); palette.setBrush(QPalette::Highlight, QColor(m_scheduleType->getColorCode())); m_checkBox->setPalette(palette); m_checkBox->setFocusPolicy(Qt::NoFocus); setSelectStatus((m_scheduleType->showState() == DScheduleType::Show)); connect(m_checkBox, &QCheckBox::clicked, this, [this]() { qCDebug(ClientLogger) << "Checkbox clicked, new state:" << m_checkBox->isChecked() << "for type:" << m_scheduleType->displayName(); setSelectStatus(m_checkBox->isChecked()); }); m_titleLabel = new DLabel(this); m_titleLabel->setFixedHeight(30); DFontSizeManager::instance()->bind(m_titleLabel, DFontSizeManager::T6); m_titleLabel->setElideMode(Qt::ElideRight); //设置�始字体大� DFontSizeManager::instance()->setFontGenericPixelSize(static_cast(DFontSizeManager::fontPixelSize(QFont()))); QFont labelF = DFontSizeManager::instance()->t6(); labelF.setWeight(QFont::Normal); m_titleLabel->setFont(labelF); m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_titleLabel->setTextFormat(Qt::PlainText); m_titleLabel->setText(m_scheduleType->displayName()); m_titleLabel->setToolTip("

" + m_scheduleType->displayName().toHtmlEscaped()); vLayout->addSpacing(2); vLayout->addWidget(m_checkBox); vLayout->addWidget(m_titleLabel, 1); this->setLayout(vLayout); setFixedHeight(40); } void SidebarTypeItemWidget::updateStatus() { qCDebug(ClientLogger) << "Updating type item status for type:" << m_scheduleType->displayName() << "with ID:" << m_scheduleType->typeID(); AccountItem::Ptr account = gAccountManager->getAccountItemByAccountId(m_scheduleType->accountID()); if (account) { if (m_selectStatus != (m_scheduleType->showState() == DScheduleType::Show)) { qCDebug(ClientLogger) << "Changing schedule type show state to:" << (m_selectStatus ? "Show" : "Hide"); m_scheduleType->setShowState(m_selectStatus ? DScheduleType::Show : DScheduleType::Hide); account->updateScheduleTypeShowState(m_scheduleType); } m_checkBox->setChecked(m_selectStatus); } } SidebarAccountItemWidget::SidebarAccountItemWidget(AccountItem::Ptr ptr, QWidget *parent) : SidebarItemWidget(parent) , m_accountItem(ptr) { qCDebug(ClientLogger) << "SidebarAccountItemWidget constructed for account:" << ptr->getAccount()->accountName(); initView(); initConnect(); } void SidebarAccountItemWidget::initView() { qCDebug(ClientLogger) << "Initializing SidebarAccountItemWidget view for account:" << m_accountItem->getAccount()->accountName(); QHBoxLayout *hLayout = new QHBoxLayout(this); hLayout->setContentsMargins(0, 0, 0, 0); hLayout->setSpacing(0); m_headIconButton = new DIconButton(this); m_headIconButton->setFlat(true); m_headIconButton->setFixedSize(16, 16); m_headIconButton->setIconSize(QSize(10, 10)); m_headIconButton->setIcon(DStyle::SP_ArrowRight); m_headIconButton->setFocusPolicy(Qt::NoFocus); connect(m_headIconButton, &DIconButton::clicked, this, [this]() { qCDebug(ClientLogger) << "Head icon button clicked for account:" << m_accountItem->getAccount()->accountName(); setSelectStatus(!m_selectStatus); }); m_ptrDoaNetwork = new DOANetWorkDBus(this); m_titleLabel = new DLabel(this); m_titleLabel->setFixedHeight(30); DFontSizeManager::instance()->bind(m_titleLabel, DFontSizeManager::T6); m_titleLabel->setElideMode(Qt::ElideMiddle); //设置�始字体大� DFontSizeManager::instance()->setFontGenericPixelSize(static_cast(DFontSizeManager::fontPixelSize(QFont()))); QFont labelF = DFontSizeManager::instance()->t6(); labelF.setWeight(QFont::Normal); m_titleLabel->setFont(labelF); m_titleLabel->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); m_titleLabel->setTextFormat(Qt::PlainText); m_titleLabel->setText(m_accountItem->getAccount()->accountName()); m_titleLabel->setToolTip("

" + m_accountItem->getAccount()->accountName().toHtmlEscaped()); m_syncIconButton = new DIconButton(this); m_syncIconButton->setIcon(QIcon(":/icons/deepin/builtin/icons/icon_refresh.svg")); m_syncIconButton->setFixedSize(QSize(20, 20)); qreal ratio = qApp->devicePixelRatio(); if (ratio == 1){ m_syncIconButton->setIconSize(QSize(10, 10)); } m_syncIconButton->setFocusPolicy(Qt::NoFocus); m_warningLabel = new DLabel(); m_warningLabel->setFixedSize(QSize(20, 20)); m_warningLabel->setPixmap(QIcon(":/icons/deepin/builtin/icons/dde_calendar_warning_light_32px.svg").pixmap(18, 18)); hLayout->addWidget(m_headIconButton); hLayout->addWidget(m_titleLabel, 1); hLayout->addWidget(m_syncIconButton); hLayout->addWidget(m_warningLabel); //给控件å�³éƒ¨ç•™å‡ºè¶³å¤Ÿçš„è·�离,防止被滚动æ�¡è¦†ç›–无法被点击事件 hLayout->addSpacing(15); this->setLayout(hLayout); if (m_accountItem->getAccount()->accountType() == DAccount::Account_UnionID) { qCDebug(ClientLogger) << "Account is UnionID type, initializing sync button"; resetRearIconButton(); } else { //尾部控件éš�è—� qCDebug(ClientLogger) << "Account is not UnionID type, hiding sync buttons"; m_syncIconButton->hide(); m_warningLabel->hide(); } setFixedHeight(36); } void SidebarAccountItemWidget::initConnect() { qCDebug(ClientLogger) << "Initializing SidebarAccountItemWidget connections"; connect(m_syncIconButton, &DIconButton::clicked, this, &SidebarAccountItemWidget::slotRearIconClicked); connect(m_accountItem.data(), &AccountItem::signalSyncStateChange, this, &SidebarAccountItemWidget::slotSyncStatusChange); connect(gAccountManager, &AccountManager::signalAccountStateChange, this, &SidebarAccountItemWidget::slotAccountStateChange); connect(m_ptrDoaNetwork, &DOANetWorkDBus::sign_NetWorkChange, this, &SidebarAccountItemWidget::slotNetworkStateChange); } void SidebarAccountItemWidget::slotNetworkStateChange(DOANetWorkDBus::NetWorkState state) { qCDebug(ClientLogger) << "Network state changed to:" << static_cast(state); //控件ä¸�显示则ä¸�处ç�† if (!m_accountItem || m_accountItem->getAccount()->accountType() != DAccount::Account_UnionID) { qCDebug(ClientLogger) << "Account is not UnionID type, ignoring network change"; return; } if (DOANetWorkDBus::NetWorkState::Disconnect == state) { qCDebug(ClientLogger) << "Network disconnected, showing warning label for account:" << m_accountItem->getAccount()->accountName(); m_syncIconButton->hide(); m_warningLabel->show(); QString msg = m_accountItem->getSyncMsg(DAccount::AccountSyncState::Sync_NetworkAnomaly); m_warningLabel->setToolTip(msg); } else if (DOANetWorkDBus::NetWorkState::Active == state) { qCDebug(ClientLogger) << "Network active for account:" << m_accountItem->getAccount()->accountName(); m_warningLabel->hide(); if (m_accountItem->isCanSyncSetting() || m_accountItem->isCanSyncShedule()) { qCDebug(ClientLogger) << "Account can sync, showing sync button"; m_syncIconButton->show(); } else { qCDebug(ClientLogger) << "Account cannot sync, hiding sync button"; m_syncIconButton->hide(); } } } void SidebarAccountItemWidget::resetRearIconButton() { qCDebug(ClientLogger) << "Resetting rear icon button for account:" << m_accountItem->getAccount()->accountName(); //控件ä¸�显示则ä¸�处ç�† if (m_accountItem->getAccount()->accountType() != DAccount::Account_UnionID) { qCDebug(ClientLogger) << "Account is not UnionID type, skipping reset"; return; } if (m_accountItem) { if (m_accountItem->getAccount()->syncState() == 0) { qCDebug(ClientLogger) << "Account sync state is normal"; m_warningLabel->hide(); if (m_accountItem->isCanSyncSetting() || m_accountItem->isCanSyncShedule()) { qCDebug(ClientLogger) << "Account can sync, showing sync button"; m_syncIconButton->show(); } else { qCDebug(ClientLogger) << "Account cannot sync, hiding sync button"; m_syncIconButton->hide(); } } else { qCDebug(ClientLogger) << "Account has sync issues (state:" << m_accountItem->getAccount()->syncState() << "), showing warning"; m_syncIconButton->hide(); m_warningLabel->show(); QString msg = m_accountItem->getSyncMsg(m_accountItem->getAccount()->syncState()); m_warningLabel->setToolTip(msg); } } } AccountItem::Ptr SidebarAccountItemWidget::getAccountItem() { return m_accountItem; } void SidebarAccountItemWidget::updateStatus() { qCDebug(ClientLogger) << "Updating account item status for:" << m_accountItem->getAccount()->accountName() << "to:" << (m_selectStatus ? "expanded" : "collapsed"); m_accountItem->setAccountExpandStatus(m_selectStatus); if (m_selectStatus) { m_headIconButton->setIcon(DStyle::SP_ArrowDown); } else { m_headIconButton->setIcon(DStyle::SP_ArrowRight); } } //尾部图标控件点击事件 void SidebarAccountItemWidget::slotRearIconClicked() { qCDebug(ClientLogger) << "Sync button clicked for account:" << m_accountItem->getAccount()->accountName(); gAccountManager->downloadByAccountID(m_accountItem->getAccount()->accountID()); } //å�Œæ­¥çжæ€�改å�˜äº‹ä»¶ void SidebarAccountItemWidget::slotSyncStatusChange(DAccount::AccountSyncState state) { qCDebug(ClientLogger) << "Sync status changed to:" << static_cast(state) << "for account:" << m_accountItem->getAccount()->accountName(); m_accountItem->getAccount()->setSyncState(state); resetRearIconButton(); } void SidebarAccountItemWidget::slotAccountStateChange() { qCDebug(ClientLogger) << "Account state changed for:" << m_accountItem->getAccount()->accountName(); resetRearIconButton(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget/sidebaritemwidget.h000066400000000000000000000057331523260663500333060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ITEMWIDGET_H #define ITEMWIDGET_H #include "scheduledatamanage.h" #include "dscheduletype.h" #include "accountitem.h" #include #include #include #include #include #include #include #include "doanetworkdbus.h" DWIDGET_USE_NAMESPACE class SidebarItemWidget : public QWidget { Q_OBJECT public: SidebarItemWidget(QWidget *parent = nullptr); //获å�–顶层item控件,有箭头 static SidebarItemWidget *getAccountItemWidget(AccountItem::Ptr); //获å�–å­�层本地日程item控件,有å¤�选框 static SidebarItemWidget *getTypeItemWidget(DScheduleType::Ptr); //设置选中状æ€� void setSelectStatus(bool); //获å�–当å‰�状æ€� bool getSelectStatus(); //切æ�¢çжæ€� void switchState(); //设置item void setItem(QTreeWidgetItem *); QTreeWidgetItem* getTreeItem(); signals: //状æ€�改å�˜ä¿¡å�· void signalStatusChange(bool status, QString id = ""); public slots: protected: void mouseDoubleClickEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; virtual void updateStatus() = 0; protected: QString m_title = ""; //标题 QString m_id = ""; //æ•°æ�®id bool m_selectStatus = false; //选中状æ€� QTreeWidgetItem *m_item = nullptr; //å…³è�”çš„item }; class SidebarTypeItemWidget : public SidebarItemWidget { Q_OBJECT public: SidebarTypeItemWidget(DScheduleType::Ptr, QWidget *parent = nullptr); protected: void initView(); void updateStatus() override; private: DScheduleType::Ptr m_scheduleType; DIconButton *m_rearIconButton = nullptr; //尾部icon控件 QCheckBox *m_checkBox = nullptr; //å¤�选框 DLabel *m_titleLabel = nullptr; //标题显示区域 }; class SidebarAccountItemWidget : public SidebarItemWidget { Q_OBJECT public: SidebarAccountItemWidget(AccountItem::Ptr, QWidget *parent = nullptr); AccountItem::Ptr getAccountItem(); signals: public slots: //尾部图标控件点击事件 void slotRearIconClicked(); //å�Œæ­¥çжæ€�改å�˜äº‹ä»¶ void slotSyncStatusChange(DAccount::AccountSyncState); //å¸�户å�Œæ­¥çжæ€�å�‘生改å�˜ void slotAccountStateChange(); // 网络状æ€�å�‘生改å�˜ void slotNetworkStateChange(DOANetWorkDBus::NetWorkState state); protected: void initView(); void initConnect(); void updateStatus() override; void resetRearIconButton(); private: AccountItem::Ptr m_accountItem; DIconButton *m_syncIconButton = nullptr; //尾部å�Œæ­¥æŽ§ä»¶ DLabel *m_warningLabel = nullptr; //尾部异常警告控件 DIconButton *m_headIconButton = nullptr; //头部展开控件 DLabel *m_titleLabel = nullptr; //标题显示区域 DOANetWorkDBus * m_ptrDoaNetwork; }; #endif // ITEMWIDGET_H sidebartreewidgetitemdelegate.cpp000066400000000000000000000033521523260663500361300ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebartreewidgetitemdelegate.h" #include "commondef.h" #include #include #include SideBarTreeWidgetItemDelegate::SideBarTreeWidgetItemDelegate() { qCDebug(ClientLogger) << "SideBarTreeWidgetItemDelegate constructed"; } void SideBarTreeWidgetItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (!index.isValid()) { // qCDebug(ClientLogger) << "Invalid index for tree item delegate, using default painting"; QStyledItemDelegate::paint(painter, option, index); return; } painter->setRenderHint(QPainter::Antialiasing); QStyleOptionViewItem opt = option; QRect rect = opt.rect; QPainterPath path, clipPath; switch (opt.viewItemPosition) { case QStyleOptionViewItem::OnlyOne: { // qCDebug(ClientLogger) << "Painting tree item as OnlyOne at row:" << index.row(); // 左间è·� rect.setX(rect.x() + 8); // å�³é—´è·� rect.setWidth(rect.width() - 8); } break; default: { // qCDebug(ClientLogger) << "Unsupported view item position for tree item delegate, using default painting"; QStyledItemDelegate::paint(painter, option, index); return; } } //绘制圆角 int radius = 8; clipPath.addRoundedRect(rect, radius, radius); painter->setClipPath(clipPath); if (option.state & QStyle::State_MouseOver) { // qCDebug(ClientLogger) << "Tree item has mouse over state, highlighting"; painter->fillRect(painter->clipBoundingRect(), option.palette.midlight()); } } sidebartreewidgetitemdelegate.h000066400000000000000000000010421523260663500355670ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SIDEBARTREEWIDGETITEMDELEGATE_H #define SIDEBARTREEWIDGETITEMDELEGATE_H #include class SideBarTreeWidgetItemDelegate : public QStyledItemDelegate { Q_OBJECT public: SideBarTreeWidgetItemDelegate(); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; }; #endif // SIDEBARTREEWIDGETITEMDELEGATE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget/sidebarview.cpp000066400000000000000000000242321523260663500324440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "sidebarview.h" #include "calendarmanage.h" #include "widget/monthWidget/monthdayview.h" #include "widget/dayWidget/daymonthview.h" #include "commondef.h" #include #include SidebarView::SidebarView(QWidget *parent) : QWidget(parent) { qCDebug(ClientLogger) << "SidebarView constructed"; initView(); initConnection(); //åˆ�始化数æ�® initData(); } /** * @brief SidebarView::initView * åˆ�始化视图 */ void SidebarView::initView() { qCDebug(ClientLogger) << "Initializing SidebarView"; QVBoxLayout *vLayout = new QVBoxLayout(this); vLayout->setContentsMargins(0, 8, 0, 10); vLayout->setSpacing(0); m_treeWidget = new QTreeWidget(); delegate = new SideBarTreeWidgetItemDelegate; // 设置底色é€�明,å�¦åˆ™å±•å¼€/收起出现背景色 QPalette pal = m_treeWidget->palette(); pal.setBrush(QPalette::Window, QBrush(QColor(255, 255, 255, 0))); m_treeWidget->setPalette(pal); m_treeWidget->setItemDelegate(delegate); m_treeWidget->setHeaderHidden(true); m_treeWidget->setColumnCount(1); m_treeWidget->setExpandsOnDoubleClick(false); m_treeWidget->setSelectionMode(QAbstractItemView::NoSelection); //å±�蔽item选择效果 m_treeWidget->setFrameStyle(QFrame::NoFrame); //去除边框 m_treeWidget->setIndentation(0); //设置itemå‰�é—´è·�为0 m_treeWidget->setFocusPolicy(Qt::NoFocus); m_calendarWidget = new SidebarCalendarWidget(this); m_calendarWidget->setFixedHeight(220); // m_calendarWidget->setFixedSize(180, 220); DPushButton *btn = new DPushButton; btn->setFocusPolicy(Qt::NoFocus); btn->setFixedHeight(1); vLayout->addWidget(m_treeWidget, 1); vLayout->addWidget(btn); vLayout->addWidget(m_calendarWidget, 1); setLayout(vLayout); setFixedWidth(180); } void SidebarView::initConnection() { qCDebug(ClientLogger) << "Initializing SidebarView connections"; //监å�¬æ—¥ç¨‹ç±»åž‹æ›´æ–°äº‹ä»¶ connect(gAccountManager, &AccountManager::signalAccountUpdate, this, &SidebarView::slotAccountUpdate); connect(gAccountManager, &AccountManager::signalScheduleTypeUpdate, this, &SidebarView::slotScheduleTypeUpdate); connect(gAccountManager, &AccountManager::signalLogout, this, &SidebarView::signalLogout); } /** * @brief SidebarView::initData * åˆ�始化数æ�® */ void SidebarView::initData() { qCDebug(ClientLogger) << "Initializing SidebarView data"; m_treeWidget->clear(); initLocalAccountItem(); initUnionAccountItem(); //刷新列表展开状æ€� initExpandStatus(); } /** * @brief SidebarView::initExpandStatus * åˆ�始化列表展开状æ€� */ void SidebarView::initExpandStatus() { qCDebug(ClientLogger) << "Initializing expand status for sidebar items"; //åˆ�始化列表展开状æ€� QList itemWidget; itemWidget << m_localItemWidget << m_unionItemWidget; for (SidebarAccountItemWidget *widget : itemWidget) { if (widget != nullptr) { //先进行一次å��的展开状æ€�目的是解决使用widgetå¡«å……item时添加列表项å�Žæœ€å�Žä¸€é¡¹çš„widget没有éš�è—�问题 bool ret = widget->getAccountItem()->getAccount()->isExpandDisplay(); // qCDebug(ClientLogger) << "Setting expand status for account:" // << widget->getAccountItem()->getAccount()->accountName() // << "to:" << ret; widget->getTreeItem()->setExpanded(!ret); widget->setSelectStatus(ret); } } } /** * @brief SidebarView::initLocalAccountItem * åˆ�始化本地账户列表 */ void SidebarView::initLocalAccountItem() { qCDebug(ClientLogger) << "Initializing local account item"; if (nullptr != m_localItemWidget) { // m_localItemWidget->deleteLater(); delete m_localItemWidget; m_localItemWidget = nullptr; } QSharedPointer localAccount = gAccountManager->getLocalAccountItem(); if (nullptr == localAccount) { qCDebug(ClientLogger) << "No local account found"; return; } QTreeWidgetItem *localItem = new QTreeWidgetItem(); m_treeWidget->addTopLevelItem(localItem); QString localName = localAccount->getAccount()->accountName(); qCDebug(ClientLogger) << "Added local account:" << localName; m_localItemWidget = new SidebarAccountItemWidget(localAccount); m_treeWidget->setItemWidget(localItem, 0, m_localItemWidget); m_localItemWidget->setItem(localItem); } /** * @brief SidebarView::initUnionAccountItem * åˆ�始化unionID账户列表 */ void SidebarView::initUnionAccountItem() { qCDebug(ClientLogger) << "Initializing UnionID account item"; QSharedPointer unionAccount = gAccountManager->getUnionAccountItem(); if (nullptr == unionAccount) { qCDebug(ClientLogger) << "No UnionID account found"; return; } QTreeWidgetItem *unionItem = new QTreeWidgetItem(); m_treeWidget->addTopLevelItem(unionItem); QString unionName = unionAccount->getAccount()->accountName(); qCDebug(ClientLogger) << "Added UnionID account:" << unionName; m_unionItemWidget = new SidebarAccountItemWidget(unionAccount); m_treeWidget->setItemWidget(unionItem, 0, m_unionItemWidget); unionItem->setToolTip(0,unionName); m_unionItemWidget->setItem(unionItem); } /** * @brief SidebarView::resetLocalChildItem * é‡�置日程类型选项 * @param parentItemWidget 父列表控件 */ void SidebarView::resetJobTypeChildItem(SidebarAccountItemWidget *parentItemWidget) { if (nullptr == parentItemWidget) { qCDebug(ClientLogger) << "Parent item widget is null, cannot reset job types"; return; } // qCDebug(ClientLogger) << "Resetting job type items for account:" // << parentItemWidget->getAccountItem()->getAccount()->accountName(); QTreeWidgetItem *parentItem = parentItemWidget->getTreeItem(); int itemChildrenCounts = parentItem->childCount(); qCDebug(ClientLogger) << "Removing" << itemChildrenCounts << "existing child items"; while(itemChildrenCounts--) { QTreeWidgetItem * child = parentItem->child(itemChildrenCounts); //index从大到å°�区å�šåˆ é™¤å¤„ç�† parentItem->removeChild(child); delete child; child = nullptr; } DScheduleType::List typeList = parentItemWidget->getAccountItem()->getScheduleTypeList(); qCDebug(ClientLogger) << "Adding" << typeList.size() << "schedule type items"; QTreeWidgetItem *item; for (DScheduleType::Ptr p : typeList) { if (nullptr != p) { item = new QTreeWidgetItem(parentItemWidget->getTreeItem()); item->setTextAlignment(0, Qt::AlignVCenter | Qt::AlignLeft); item->setSizeHint(0, QSize(220, 40)); parentItem->addChild(item); SidebarItemWidget *widget = new SidebarTypeItemWidget(p, this); m_treeWidget->setItemWidget(item, 0, widget); // qCDebug(ClientLogger) << "Added schedule type:" << p->displayName() << "with ID:" << p->typeID(); connect(widget,&SidebarItemWidget::signalStatusChange,this,[&](bool status, QString id){ Q_UNUSED(id) Q_UNUSED(status) emit signalScheduleHide(); }); } } //刷新列表项ä½�置,主è¦�用于解决åˆ�始添加时最å�Žä¸€é¡¹æ˜¾ç¤ºä½�置和其他项ä½�ç½®ä¸�一致问题 resetTreeItemPos(parentItemWidget->getTreeItem()); } /** * @brief SidebarView::resetTreeItemPos * 刷新列表项ä½�置,主è¦�用于解决åˆ�始添加时最å�Žä¸€é¡¹æ˜¾ç¤ºä½�置和其他项ä½�ç½®ä¸�一致问题 */ void SidebarView::resetTreeItemPos(QTreeWidgetItem *item) { // qCDebug(ClientLogger) << "Resetting tree item positions for" << item->childCount() << "children"; if (nullptr == item) { qCDebug(ClientLogger) << "Tree item is null, cannot reset positions"; return; } QWidget* ptmpWidget = nullptr; ptmpWidget = m_treeWidget->itemWidget(item, 0); int x = ptmpWidget->x(); QTreeWidgetItem *ptmp = nullptr; for(int i = 0; i < item->childCount(); i++) { ptmp = item->child(i); ptmpWidget = m_treeWidget->itemWidget(ptmp, 0); ptmpWidget->move(x, ptmpWidget->y()); } } /** * @brief SidebarView::slotAccountUpdate * 账户更新事件 */ void SidebarView::slotAccountUpdate() { qCDebug(ClientLogger) << "Account update received, reinitializing data"; initData(); } /** * @brief SidebarView::slotScheduleTypeUpdate * 日程类型更新事件 */ void SidebarView::slotScheduleTypeUpdate() { qCDebug(ClientLogger) << "Schedule type update received"; //åˆ�始化列表数æ�® resetJobTypeChildItem(m_localItemWidget); resetJobTypeChildItem(m_unionItemWidget); //刷新列表展开状æ€� initExpandStatus(); } /** * @brief SidebarView::signalLogout * å¸�户退出事件 * @param accountType */ void SidebarView::signalLogout(DAccount::Type accountType) { qCDebug(ClientLogger) << "Account logout received for type:" << accountType; //先清空列表 m_treeWidget->clear(); if (DAccount::Account_UnionID == accountType){ qCDebug(ClientLogger) << "UnionID account logged out, reinitializing local account"; if (m_unionItemWidget) { //清空数æ�® m_unionItemWidget->getAccountItem().reset(nullptr); m_unionItemWidget->deleteLater(); m_unionItemWidget = nullptr; } //é‡�新加载å�¦ä¸€ä¸ªå¸�户的数æ�® initLocalAccountItem(); resetJobTypeChildItem(m_localItemWidget); } } void SidebarView::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "SidebarView::paintEvent"; //绘制背景 QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); painter.setBrush(palette().color(QPalette::Base)); int radius = 8; //绘制圆角 painter.drawRoundedRect(0, 0, width(), height(), radius, radius); //绘制å�³ä¾§ç›´è§’ painter.drawRect(radius, 0, width() - radius, height()); QWidget::paintEvent(event); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/sidebarWidget/sidebarview.h000066400000000000000000000031131523260663500321040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SIDEBARVIEW_H #define SIDEBARVIEW_H #include "sidebarcalendarwidget.h" #include "sidebaritemwidget.h" #include "accountmanager.h" #include #include #include #include "sidebartreewidgetitemdelegate.h" class SidebarView : public QWidget { Q_OBJECT public: explicit SidebarView(QWidget *parent = nullptr); signals: void signalScheduleHide(); public slots: //账户更新事件 void slotAccountUpdate(); //日程类型更新事件 void slotScheduleTypeUpdate(); //å¸�户登出信å�· void signalLogout(DAccount::Type); protected: void paintEvent(QPaintEvent *event) override; private: void initView(); void initConnection(); //åˆ�始化数æ�® void initData(); //åˆ�始化列表展开状æ€� void initExpandStatus(); //åˆ�始化本地账户列表 void initLocalAccountItem(); //åˆ�始化union账户列表 void initUnionAccountItem(); //é‡�置日程类型item void resetJobTypeChildItem(SidebarAccountItemWidget *parentItemWidget); //é‡�ç½®itemä½�ç½® void resetTreeItemPos(QTreeWidgetItem *item); private: QTreeWidget *m_treeWidget = nullptr; //树结构 SidebarAccountItemWidget* m_localItemWidget = nullptr; SidebarAccountItemWidget* m_unionItemWidget = nullptr; SidebarCalendarWidget *m_calendarWidget = nullptr; //å°�日历 SideBarTreeWidgetItemDelegate *delegate = nullptr; }; #endif // SIDEBARVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/touchgestureoperation.cpp000066400000000000000000000155001523260663500320230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "touchgestureoperation.h" #include "commondef.h" #include #include #include #include touchGestureOperation::touchGestureOperation(QWidget *parent) : m_parentWidget(parent) { qCDebug(ClientLogger) << "touchGestureOperation constructed"; if (m_parentWidget) { m_parentWidget->setAttribute(Qt::WA_AcceptTouchEvents); //截获相应的gesture手势 m_parentWidget->grabGesture(Qt::TapGesture); m_parentWidget->grabGesture(Qt::TapAndHoldGesture); m_parentWidget->grabGesture(Qt::PanGesture); qCDebug(ClientLogger) << "Touch gestures grabbed for widget"; } } bool touchGestureOperation::event(QEvent *e) { bool _result {false}; if (e->type() == QEvent::Gesture) { //手势触å�‘ // qCDebug(ClientLogger) << "Gesture event received"; _result = gestureEvent(dynamic_cast(e)); } QMouseEvent *mouseEvent = dynamic_cast(e); if (e->type() == QEvent::MouseButtonPress && mouseEvent->source() == Qt::MouseEventSynthesizedByQt) { //触摸点击转æ�¢é¼ æ ‡ç‚¹å‡»äº‹ä»¶ // qCDebug(ClientLogger) << "Touch press detected at:" << mouseEvent->pos(); m_mouseState = M_PRESS; m_beginTouchPoint = mouseEvent->pos(); _result = true; } if (e->type() == QEvent::MouseMove && mouseEvent->source() == Qt::MouseEventSynthesizedByQt) { //触摸移动转æ�¢é¼ æ ‡ç§»åŠ¨äº‹ä»¶ //如果移动è·�离大与5则为触摸移动状æ€� QPointF currentPoint = mouseEvent->pos(); if (QLineF(m_beginTouchPoint, currentPoint).length() > 5) { m_mouseState = M_MOVE; //如果为å�•指点击状æ€�则转æ�¢ä¸ºæ»‘动状æ€� switch (m_touchState) { case T_SINGLE_CLICK: { // qCDebug(ClientLogger) << "Touch state changed from single click to slide"; m_touchState = T_SLIDE; break; } case T_SLIDE: { //计算滑动方å�‘å’Œè·�离 calculateAzimuthAngle(m_beginTouchPoint, currentPoint); //如果移动è·�离大于15则更新 if (m_movelenght > 15) { // qCDebug(ClientLogger) << "Touch slide significant movement detected, direction:" // << m_movingDir << "distance:" << m_movelenght; m_update = true; m_beginTouchPoint = currentPoint; } break; } default: break; } } _result = true; } if (e->type() == QEvent::MouseButtonRelease && mouseEvent->source() == Qt::MouseEventSynthesizedByQt) { // qCDebug(ClientLogger) << "Touch release detected at:" << mouseEvent->pos(); m_mouseState = M_NONE; _result = true; } return _result; } bool touchGestureOperation::isUpdate() const { return m_update; } void touchGestureOperation::setUpdate(bool b) { // qCDebug(ClientLogger) << "Setting update state to:" << b; m_update = b; } touchGestureOperation::TouchState touchGestureOperation::getTouchState() const { // qCDebug(ClientLogger) << "Getting touch state:" << m_touchState; return m_touchState; } touchGestureOperation::TouchMovingDirection touchGestureOperation::getMovingDir() const { // qCDebug(ClientLogger) << "Getting moving direction:" << m_movingDir; return m_movingDir; } touchGestureOperation::TouchMovingDirection touchGestureOperation::getTouchMovingDir(QPointF &startPoint, QPointF &stopPoint, qreal &movingLine) { qCDebug(ClientLogger) << "Getting touch moving direction"; TouchMovingDirection _result {T_MOVE_NONE}; qreal angle = 0.0000; qreal dx = stopPoint.rx() - startPoint.rx(); qreal dy = stopPoint.ry() - startPoint.ry(); //计算方ä½�è§’ angle = qAtan2(dy, dx) * 180 / M_PI; qreal line = qSqrt(dx * dx + dy * dy); //如果移动è·�离大于10则有效 if (line > 10) { qCDebug(ClientLogger) << "Getting touch moving direction, angle:" << angle; if ((angle <= -45) && (angle >= -135)) { _result = TouchMovingDirection::T_TOP; } else if ((angle > -45) && (angle < 45)) { _result = TouchMovingDirection::T_RIGHT; } else if ((angle >= 45) && (angle <= 135)) { _result = TouchMovingDirection::T_BOTTOM; } else { _result = TouchMovingDirection::T_LEFT; } } movingLine = line; return _result; } bool touchGestureOperation::gestureEvent(QGestureEvent *event) { // qCDebug(ClientLogger) << "Gesture event received"; if (QGesture *tap = event->gesture(Qt::TapGesture)) tapGestureTriggered(dynamic_cast(tap)); if (QGesture *pan = event->gesture(Qt::PanGesture)) panTriggered(dynamic_cast(pan)); return true; } void touchGestureOperation::tapGestureTriggered(QTapGesture *tap) { qCDebug(ClientLogger) << "Tap gesture triggered with state:" << tap->state(); switch (tap->state()) { case Qt::NoGesture: { break; } case Qt::GestureStarted: { m_beginTouchTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); m_touchState = T_SINGLE_CLICK; qCDebug(ClientLogger) << "Tap gesture started, setting touch state to single click"; break; } case Qt::GestureUpdated: { qCDebug(ClientLogger) << "Tap gesture updated"; break; } case Qt::GestureFinished: { qCDebug(ClientLogger) << "Tap gesture finished"; break; } default: { //GestureCanceled qCDebug(ClientLogger) << "Tap gesture canceled"; } } } void touchGestureOperation::panTriggered(QPanGesture *pan) { qCDebug(ClientLogger) << "Pan gesture triggered with state:" << pan->state(); switch (pan->state()) { case Qt::NoGesture: { qCDebug(ClientLogger) << "Pan gesture no gesture"; break; } case Qt::GestureStarted: { qCDebug(ClientLogger) << "Pan gesture started"; break; } case Qt::GestureUpdated: { m_touchState = T_SLIDE; qCDebug(ClientLogger) << "Pan gesture updated, setting touch state to slide"; break; } case Qt::GestureFinished: { qCDebug(ClientLogger) << "Pan gesture finished"; break; } default: //GestureCanceled qCDebug(ClientLogger) << "Pan gesture canceled"; break; } } void touchGestureOperation::calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint) { // qCDebug(ClientLogger) << "Calculating azimuth angle"; m_movingDir = getTouchMovingDir(startPoint, stopPoint, m_movelenght); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/touchgestureoperation.h000066400000000000000000000070201523260663500314660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TOUCHGESTUREOPERATION_H #define TOUCHGESTUREOPERATION_H #include class QGestureEvent; class QTapGesture; class QPanGesture; class touchGestureOperation { public: /** * @brief The TouchMovingDirection enum //手势移动方å�‘ */ enum TouchMovingDirection { T_MOVE_NONE //默认状æ€� , T_LEFT //å·¦ , T_TOP //上 , T_RIGHT //å�³ , T_BOTTOM //下 }; enum TouchState { T_STATE_NONE //默认状æ€� , T_SINGLE_CLICK //一指点击 , T_SLIDE //滑动手势 }; private: enum MouseState { M_NONE //默认状æ€� , M_PRESS //点击 , M_MOVE //移动 }; public: explicit touchGestureOperation(QWidget *parent = nullptr); /** * @brief event 事件处ç�† * @param e Qwidget事件 * @return */ bool event(QEvent *e); /** * @brief isUpdate 是å�¦æ›´æ–°æ•°æ�® * @return */ bool isUpdate() const; /** * @brief setUpdate 设置更新状æ€� * @param b */ void setUpdate(bool b); /** * @brief getTouchState 获å�–触摸手指状æ€� * @return */ TouchState getTouchState() const; /** * @brief getMovingDir 获å�–移动方å�‘ * @return */ TouchMovingDirection getMovingDir() const; /** * @brief getTouchMovingDir 获å�–滑动方å�‘ * @param startPoint èµ·å§‹å��æ ‡ * @param stopPoint 结æ�Ÿå��æ ‡ * @param movingLine 移动è·�离 * @return */ static TouchMovingDirection getTouchMovingDir(QPointF &startPoint, QPointF &stopPoint, qreal &movingLine); private: /** * @brief gestureEvent 触摸手势处ç�† * @param event 手势事件 * @return */ bool gestureEvent(QGestureEvent *event); /** * @brief tapGestureTriggered 轻切手势处ç�† * @param tap 轻切手势事件 */ void tapGestureTriggered(QTapGesture *tap); /** * @brief panTriggered 多指滑动手势处ç�† * @param pan 多指滑动手势 */ void panTriggered(QPanGesture *pan); /** * @brief calculateAzimuthAngle 计算方ä½�è§’ * @param startPoint èµ·å§‹å��æ ‡ * @param stopPoint 结æ�Ÿå��æ ‡ */ void calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint); private: /** * @brief m_parentWidget 手势窗å�£ */ QWidget *m_parentWidget {nullptr}; /** * @brief m_movingDir 移动方å�‘ */ TouchMovingDirection m_movingDir {T_MOVE_NONE}; /** * @brief m_beginTouchTime 触摸点击时间 */ qint64 m_beginTouchTime {0}; /** * @brief m_beginTouchPoint 触摸点击å��æ ‡ */ QPointF m_beginTouchPoint {}; /** * @brief m_touchState 触摸状æ€� */ TouchState m_touchState {T_STATE_NONE}; /** * @brief m_touchState 鼠标的状æ€� */ MouseState m_mouseState {M_NONE}; /** * @brief m_movelenght 移动è·�离 */ qreal m_movelenght {0}; /** * @brief m_update 更新标志 */ bool m_update {false}; }; #endif // TOUCHGESTUREOPERATION_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/000077500000000000000000000000001523260663500267535ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/weekheadview.cpp000066400000000000000000000342551523260663500321400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "weekheadview.h" #include "customframe.h" #include "scheduledatamanage.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CWeekHeadView::CWeekHeadView(QWidget *parent) : DWidget(parent) , m_touchGesture(this) { qCDebug(ClientLogger) << "CWeekHeadView constructed"; setContentsMargins(0, 0, 0, 0); m_dayNumFont.setWeight(QFont::Medium); m_dayNumFont.setPixelSize(DDECalendar::FontSizeSixteen); m_monthFont.setWeight(QFont::Medium); m_monthFont.setPixelSize(DDECalendar::FontSizeTwenty); // cells grid QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setContentsMargins(0, 0, 0, 0); hBoxLayout->setSpacing(0); m_monthLabel = new CustomFrame(this); m_monthLabel->setFixedWidth(DDEWeekCalendar::WMCellHeaderWidth - 5); m_monthLabel->setRoundState(true, false, false, false); QFont mlabelF; mlabelF.setWeight(QFont::Medium); mlabelF.setPixelSize(DDECalendar::FontSizeTwenty); m_monthLabel->setTextFont(mlabelF); hBoxLayout->addWidget(m_monthLabel); hBoxLayout->setStretch(0, 0); hBoxLayout->setSpacing(0); qCDebug(ClientLogger) << "Creating week day cells"; for (int c = 0; c != DDEWeekCalendar::AFewDaysofWeek; ++c) { QWidget *cell = new QWidget(this); cell->installEventFilter(this); cell->setFocusPolicy(Qt::ClickFocus); hBoxLayout->addWidget(cell); m_cellList.append(cell); } setLayout(hBoxLayout); } CWeekHeadView::~CWeekHeadView() { qCDebug(ClientLogger) << "CWeekHeadView destroyed"; } /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void CWeekHeadView::setTheMe(int type) { // qCDebug(ClientLogger) << "Setting theme to type:" << type; m_themetype = type; if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Setting theme to light"; QColor textC = "#000000"; QColor textBC(230, 238, 242); m_monthLabel->setBColor(textBC); m_monthLabel->setTextColor(textC); m_backgroundCircleColor = "#0081FF"; m_backgroundShowColor = "#2CA7F8"; m_backgroundShowColor.setAlphaF(0.4); m_Background_Weekend_Color = "#DAE4ED"; m_defaultTextColor = "#6F6F6F"; m_currentDayTextColor = "#FFFFFF"; m_defaultLunarColor = "#898989"; m_currentMonthColor = "#000000"; m_backgroundColor = "#E6EEF2"; m_solofestivalLunarColor = "#4DFF7272"; } else if (type == 2) { // qCDebug(ClientLogger) << "Setting theme to dark"; QColor textBC = "#82AEC1"; textBC.setAlphaF(0.1); m_monthLabel->setBColor(textBC); m_monthLabel->setTextColor("#BF1D63"); m_backgroundCircleColor = "#0059D2"; m_backgroundShowColor = "#002AAF"; m_backgroundShowColor.setAlphaF(0.4); m_Background_Weekend_Color = "#333D4A"; m_defaultTextColor = "#C0C6D4"; m_currentDayTextColor = "#C0C6D4"; m_defaultLunarColor = "#6886BA"; m_currentMonthColor = "#000000"; m_backgroundColor = "#82AEC1"; m_backgroundColor.setAlphaF(0.1); m_solofestivalLunarColor = "#4DFF7272"; } m_weekendsTextColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); update(); } /** * @brief CWeekHeadView::setWeekDay 设置一周显示时间 * @param vDays * @param selectDate */ void CWeekHeadView::setWeekDay(QVector vDays, const QDate &selectDate) { qCDebug(ClientLogger) << "Setting week days from" << vDays.first().toString() << "to" << vDays.last().toString() << "with selected date:" << selectDate.toString(); if (vDays.count() != DDEWeekCalendar::AFewDaysofWeek) return; m_days = vDays; QLocale locale; m_monthLabel->setTextStr(locale.monthName(selectDate.month(), QLocale::ShortFormat)); } /** * @brief CWeekHeadView::setHunagliInfo 设置黄历信æ�¯ * @param huangLiInfo */ void CWeekHeadView::setHunagLiInfo(const QMap &huangLiInfo) { qCDebug(ClientLogger) << "Setting Huangli information for" << huangLiInfo.size() << "days"; m_huangLiInfo = huangLiInfo; update(); } /** * @brief setLunarVisible 设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ * @param visible 是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ */ void CWeekHeadView::setLunarVisible(bool visible) { qCDebug(ClientLogger) << "Setting lunar visibility to:" << visible; int state = int(m_showState); if (visible) state |= ShowLunar; else state &= ~ShowLunar; m_showState = ShowState(state); update(); } /** * @brief eventFilter 过滤器 * @param o 事件对象 * @param e 时间类型 * @return false */ bool CWeekHeadView::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "Event filter received for object:" << o->objectName() << "with event type:" << e->type(); QWidget *cell = qobject_cast(o); if (cell && m_cellList.contains(cell)) { // qCDebug(ClientLogger) << "Event filter received for cell:" << cell->objectName() << "with event type:" << e->type(); if (e->type() == QEvent::Paint) { // qCDebug(ClientLogger) << "Painting cell for date:" << m_days[m_cellList.indexOf(cell)].toString(); paintCell(cell); } else if (e->type() == QEvent::MouseButtonDblClick) { const int pos = m_cellList.indexOf(cell); // qCDebug(ClientLogger) << "Cell double-clicked for date:" << m_days[pos].toString(); emit signalsViewSelectDate(m_days[pos]); } } return false; } /** * @brief getCellDayNum æ ¹æ�®ç´¢å¼•值获å�–当天是在一个月中的第几天 * @param pos 索引 * @return 日期的字符串 */ const QString CWeekHeadView::getCellDayNum(int pos) { // qCDebug(ClientLogger) << "Getting cell day number for position:" << pos; return QString::number(m_days[pos].day()); } /** * @brief getCellDate æ ¹æ�®ç´¢å¼•获å�–当天的日期 * @param pos 索引值 * @return 日期 */ const QDate CWeekHeadView::getCellDate(int pos) { // qCDebug(ClientLogger) << "Getting cell date for position:" << pos; return m_days[pos]; } /** * @brief getLunar æ ¹æ�®ç´¢å¼•值获å�–当天的阴历信æ�¯ * @param pos 索引值 * @return 阴历信æ�¯å­—符串 */ const QString CWeekHeadView::getLunar(int pos) { // qCDebug(ClientLogger) << "Getting lunar information for position:" << pos; CaHuangLiDayInfo info ; if (pos >= 0 && pos < m_days.size()) { info = m_huangLiInfo[m_days[pos]]; if (info.mLunarDayName == "åˆ�一") { info.mLunarDayName = info.mLunarMonthName; } if (info.mTerm.isEmpty()) return info.mLunarDayName; } return info.mTerm; } /** * @brief paintCell 绘制周信æ�¯ * @param cell æ¯�天所在的widget */ void CWeekHeadView::paintCell(QWidget *cell) { // qCDebug(ClientLogger) << "Painting cell"; m_weekendsTextColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); const QRect rect(0, 0, cell->width(), cell->height()); const int pos = m_cellList.indexOf(cell); const bool isCurrentDay = getCellDate(pos) == QDate::currentDate(); const bool isSelectedCell = isCurrentDay; int d = m_days[pos].dayOfWeek(); QPainter painter(cell); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(Qt::NoPen); //æ ¹æ�®å‘¨å‡ è®¾ç½®ä¸�一样的背景色 if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) { painter.setBrush(QBrush(m_Background_Weekend_Color)); } else { painter.setBrush(QBrush(m_backgroundColor)); } if (m_cellList.last() != cell) { painter.drawRect(rect); //画矩形 //绘制分割线 QPoint point_begin(cell->width(), 0); QPoint point_end(cell->width(), cell->height()); painter.save(); QColor m_linecolor = "#000000"; m_linecolor.setAlphaF(0.1); painter.setPen(m_linecolor); painter.drawLine(point_begin, point_end); painter.restore(); } else { int labelwidth = cell->width(); int labelheight = cell->height(); QPainterPath painterPath; painterPath.moveTo(0, 0); painterPath.lineTo(0, labelheight); painterPath.lineTo(labelwidth, labelheight); painterPath.lineTo(labelwidth, labelheight - m_radius); painterPath.arcTo(QRect(labelwidth - m_radius * 2, 0, m_radius * 2, m_radius * 2), 0, 90); painterPath.lineTo(0, 0); painterPath.closeSubpath(); painter.drawPath(painterPath); } int bw = (cell->width() - 104) / 2; int bh = (cell->height() - 26) / 2; if (bw < 0) { bw = 2; } if (bh < 0) { bh = 2; } if (isSelectedCell) { if (m_showState & ShowLunar) { QRect fillRect(bw - 2, bh, 26, 26); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); painter.restore(); } else { QRect fillRect(cell->width() - (cell->width() / 2) + 1, bh - 1, 26, 26); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); painter.restore(); } } QLocale locale; const QString dayNum = getCellDayNum(pos); const QString dayLunar = getLunar(pos); QString dayWeek = locale.dayName(d ? d : DDEWeekCalendar::AFewDaysofWeek, QLocale::ShortFormat); painter.save(); painter.setPen(Qt::SolidLine); // draw text of day if (isSelectedCell) { painter.setPen(m_currentDayTextColor); } else if (isCurrentDay) { painter.setPen(m_weekendsTextColor); } else { if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultTextColor); } painter.setFont(m_dayNumFont); if (m_showState & ShowLunar) { painter.drawText(QRect(bw - 1, bh, 24, 24), Qt::AlignCenter, dayNum); if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultTextColor); painter.drawText(QRect(bw + 24, bh, 30, 25), Qt::AlignCenter, dayWeek); } else { QFontMetrics fm1 = painter.fontMetrics(); painter.drawText(QRect(cell->width() - (cell->width() / 2) - 4, bh - 1, 36, 26), Qt::AlignCenter, dayNum); if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultTextColor); QFontMetrics fm = painter.fontMetrics(); while (fm.horizontalAdvance(dayWeek) > cell->width() / 2) dayWeek.chop(1); //æ°´å¹³å�³å¯¹é½�,上下居中 painter.drawText(QRect(0, bh, (cell->width() / 2), 26), Qt::AlignRight | Qt::AlignVCenter, dayWeek); } // draw text of day type if (m_showState & ShowLunar) { if (cell->width() > 100) { if (d == DDEWeekCalendar::FirstDayOfWeekend || d == DDEWeekCalendar::AFewDaysofWeek) painter.setPen(m_weekendsTextColor); else painter.setPen(m_defaultLunarColor); if (cell->width() < 132) { QString str_dayLunar = nullptr; if (dayLunar.count() > 2) { for (int i = 0; i < 2; i++) { str_dayLunar.append(dayLunar.at(i)); } str_dayLunar.append("..."); } else { str_dayLunar = dayLunar; } //水平左对é½�,上下居中 painter.drawText(QRect(bw + 52 + 10, bh, 50, 25), Qt::AlignLeft | Qt::AlignVCenter, str_dayLunar); } else { painter.drawText(QRect(bw + 52 + 10, bh, 50, 25), Qt::AlignLeft | Qt::AlignVCenter, dayLunar); } } } painter.restore(); painter.end(); } void CWeekHeadView::wheelEvent(QWheelEvent *e) { // qCDebug(ClientLogger) << "Wheel event received"; //如果滚轮为左å�³æ–¹å�‘则触å�‘ä¿¡å�· if (e->angleDelta().x() != 0) { qCDebug(ClientLogger) << "Wheel event with horizontal delta:" << e->angleDelta().x(); emit signalAngleDelta(e->angleDelta().x()); } } bool CWeekHeadView::event(QEvent *e) { // qCDebug(ClientLogger) << "Event received"; if (m_touchGesture.event(e)) { //获å�–触摸状æ€� switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { // qCDebug(ClientLogger) << "Touch gesture detected: slide"; //在滑动状æ€�如果å�¯ä»¥æ›´æ–°æ•°æ�®åˆ™åˆ‡æ�¢æœˆä»½ if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: qCDebug(ClientLogger) << "Touch gesture detected: slide left"; emit signalAngleDelta(-1); break; case touchGestureOperation::T_RIGHT: qCDebug(ClientLogger) << "Touch gesture detected: slide right"; emit signalAngleDelta(1); break; default: break; } } break; } default: break; } return true; } else { return DWidget::event(e); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/weekheadview.h000066400000000000000000000056641523260663500316070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef WEEKHEADVIEW_H #define WEEKHEADVIEW_H #include "constants.h" #include "../touchgestureoperation.h" #include "huangliData/dbusdatastruct.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CustomFrame; /** * @brief The CWeekHeadView class * 周视图日期模å�—显示 */ class CWeekHeadView : public DWidget { Q_OBJECT public: enum ShowState { ShowLunar = 0x01, ShowLunarFestivalHighlight = 0x02, Normal = ShowLunar | ShowLunarFestivalHighlight, }; public: explicit CWeekHeadView(QWidget *parent = nullptr); ~CWeekHeadView() override; //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² void setTheMe(int type = 0); //设置一周的时间 void setWeekDay(QVector vDays, const QDate &selectDate); //设置黄历信æ�¯ void setHunagLiInfo(const QMap &huangLiInfo); signals: /** * @brief signalsViewSelectDate 选择日期的信å�· * @param date 日期 */ void signalsViewSelectDate(QDate date); /** * @brief signalAngleDelta å�‘é€�滚动信å�·æ»šåŠ¨ç›¸å¯¹é‡� * @param delta 滚动相对é‡� */ void signalAngleDelta(int delta); public slots: //设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ void setLunarVisible(bool visible); private: //æ ¹æ�®ç´¢å¼•值获å�–当天是在一个月中的第几天 const QString getCellDayNum(int pos); //æ ¹æ�®ç´¢å¼•获å�–当天的日期 const QDate getCellDate(int pos); //æ ¹æ�®ç´¢å¼•值获å�–当天的阴历信æ�¯ const QString getLunar(int pos); //绘制周信æ�¯ void paintCell(QWidget *cell); bool eventFilter(QObject *o, QEvent *e) override; protected: void wheelEvent(QWheelEvent *e) override; bool event(QEvent *e) override; private slots: private: QList m_cellList; CustomFrame *m_monthLabel = nullptr; QVector m_days; ShowState m_showState = Normal; int m_selectedCell = 0; QMap m_huangLiInfo; QFont m_dayNumFont; QFont m_monthFont; QColor m_backgroundCircleColor = "#2ca7f8"; QColor m_backgroundShowColor = "#2CA7F8"; QColor m_defaultTextColor = "#6F6F6F"; QColor m_currentDayTextColor = "#FFFFFF"; QColor m_defaultLunarColor = "#898989"; QColor m_weekendsTextColor = "#0887FF"; QColor m_currentMonthColor = "#000000"; QColor m_backgroundColor = "#E6EEF2"; /** * @brief m_Background_Weekend_Color 周六周日背景色 */ QColor m_Background_Weekend_Color = "#00429A"; QColor m_solofestivalLunarColor = "#4DFF7272"; int m_themetype = 1; const int m_radius = 8; /** * @brief m_touchGesture 触摸手势处ç�† */ touchGestureOperation m_touchGesture; }; #endif // MYCALENDARWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/weekview.cpp000066400000000000000000000353521523260663500313150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "weekview.h" #include "scheduledatamanage.h" #include "constants.h" #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE CWeekView::CWeekView(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent) : QWidget(parent) , m_touchGesture(this) , m_weekNumWidget(nullptr) { qCDebug(ClientLogger) << "CWeekView constructed"; QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setContentsMargins(0, 0, 0, 0); hBoxLayout->setSpacing(0); //上一周按钮 m_prevButton = new DIconButton(DStyle::SP_ArrowLeft, this); m_prevButton->setFixedSize(36, 36); connect(m_prevButton, &DIconButton::clicked, this, &CWeekView::signalBtnPrev); m_weekNumWidget = new CWeekNumWidget(getWeekNumOfYear, this); //下一周按钮 m_nextButton = new DIconButton(DStyle::SP_ArrowRight, this); m_nextButton->setFixedSize(36, 36); connect(m_nextButton, &DIconButton::clicked, this, &CWeekView::signalBtnNext); hBoxLayout->addWidget(m_prevButton); hBoxLayout->addWidget(m_weekNumWidget); hBoxLayout->addWidget(m_nextButton); //设置布局 setLayout(hBoxLayout); connect(m_weekNumWidget, &CWeekNumWidget::signalsSelectDate, this, &CWeekView::signalsSelectDate); connect(m_weekNumWidget, &CWeekNumWidget::signalBtnPrev, this, &CWeekView::signalBtnPrev); connect(m_weekNumWidget, &CWeekNumWidget::signalBtnNext, this, &CWeekView::signalBtnNext); } CWeekView::~CWeekView() { qCDebug(ClientLogger) << "CWeekView destroyed"; } /** * @brief setCurrentDate 设置选择时间,并更新 * @param date æ—¶é—´ */ void CWeekView::setSelectDate(const QDate date) { qCDebug(ClientLogger) << "Setting select date to:" << date.toString(); m_weekNumWidget->setSelectDate(date); } /** * @brief CWeekView::setCurrent 设置当å‰�æ—¶é—´ * @param date */ void CWeekView::setCurrent(const QDateTime &dateTime) { qCDebug(ClientLogger) << "Setting current date/time to:" << dateTime.toString(); m_weekNumWidget->setCurrent(dateTime); } /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void CWeekView::setTheMe(int type) { qCDebug(ClientLogger) << "Setting theme to:" << type; m_weekNumWidget->setTheMe(type); } /** * @brief wheelEvent 鼠标滚轮切æ�¢ä¸Šä¸€å‘¨ä¸‹ä¸€å‘¨ * @param event 鼠标滚轮事件 */ void CWeekView::wheelEvent(QWheelEvent *event) { // qCDebug(ClientLogger) << "Wheel event detected with delta:" << event->angleDelta(); bool isDragging = false; emit signalIsDragging(isDragging); //判断是å�¦æ˜¯æ‹–拽状æ€� if (!isDragging) { //左移切æ�¢ä¸Šå‘¨,å�³ç§»åˆ‡æ�¢ä¸‹å‘¨ if (event->angleDelta().y() > 0) { //上一周 qCDebug(ClientLogger) << "Wheel event triggers previous week"; signalBtnPrev(); } else { //下一周 qCDebug(ClientLogger) << "Wheel event triggers next week"; signalBtnNext(); } } } bool CWeekView::event(QEvent *e) { // qCDebug(ClientLogger) << "Event received"; if (m_touchGesture.event(e)) { // qCDebug(ClientLogger) << "Touch gesture detected"; //获å�–触摸状æ€� switch (m_touchGesture.getTouchState()) { case touchGestureOperation::T_SLIDE: { // qCDebug(ClientLogger) << "Touch gesture detected: slide"; //在滑动状æ€�如果å�¯ä»¥æ›´æ–°æ•°æ�®åˆ™åˆ‡æ�¢æœˆä»½ if (m_touchGesture.isUpdate()) { m_touchGesture.setUpdate(false); switch (m_touchGesture.getMovingDir()) { case touchGestureOperation::T_LEFT: //切æ�¢ä¸‹å‘¨ qCDebug(ClientLogger) << "Touch gesture detected: slide left, triggering next week"; signalBtnNext(); break; case touchGestureOperation::T_RIGHT: //切æ�¢ä¸Šå‘¨ qCDebug(ClientLogger) << "Touch gesture detected: slide right, triggering previous week"; signalBtnPrev(); break; default: break; } } break; } default: break; } return true; } else { return DWidget::event(e); } } CWeekNumWidget::CWeekNumWidget(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent) : QWidget(parent) , m_getWeekNumOfYear(getWeekNumOfYear) , m_isFocus(false) { qCDebug(ClientLogger) << "CWeekNumWidget constructed"; m_dayNumFont.setPixelSize(DDECalendar::FontSizeSixteen); m_dayNumFont.setWeight(QFont::Light); setFocusPolicy(Qt::StrongFocus); QHBoxLayout *hBoxLayout = new QHBoxLayout; hBoxLayout->setSpacing(0); hBoxLayout->setContentsMargins(0, 0, 0, 0); //显示周数的widget qCDebug(ClientLogger) << "Creating week number cells"; for (int c = 0; c != DDEWeekCalendar::NumWeeksDisplayed; ++c) { QWidget *cell = new QWidget; //设置事件过滤器 cell->installEventFilter(this); hBoxLayout->addWidget(cell, Qt::AlignTop); m_cellList.append(cell); } this->setLayout(hBoxLayout); } CWeekNumWidget::~CWeekNumWidget() { qCDebug(ClientLogger) << "CWeekNumWidget destroyed"; } void CWeekNumWidget::setSelectDate(const QDate date) { qCDebug(ClientLogger) << "Setting select date in CWeekNumWidget to:" << date.toString(); m_selectDate = date; updateDate(); } void CWeekNumWidget::setCurrent(const QDateTime &dateTime) { qCDebug(ClientLogger) << "Setting current date/time in CWeekNumWidget to:" << dateTime.toString(); m_currentDate = dateTime; } void CWeekNumWidget::setTheMe(int type) { qCDebug(ClientLogger) << "Setting theme in CWeekNumWidget to:" << type; if (type == 0 || type == 1) { m_defaultTextColor = Qt::black; m_backgrounddefaultColor = Qt::white; m_currentDayTextColor = Qt::white; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#FFFFFF"; } else if (type == 2) { m_defaultTextColor = "#C0C6D4"; m_backgrounddefaultColor = "#FFFFFF"; m_backgrounddefaultColor.setAlphaF(0.05); m_currentDayTextColor = "#B8D3FF"; m_backgroundcurrentDayColor = CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor(); m_fillColor = "#000000"; m_fillColor.setAlphaF(0.05); } } void CWeekNumWidget::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "CWeekNumWidget resize event with size:" << event->size(); //获å�–当å‰�所有cell的宽度 const int _allCellWidth = width(); //获å�–当å‰�cell的宽度 int w = _allCellWidth / DDEWeekCalendar::NumWeeksDisplayed; //最å°�显示的宽度 const int _minWidget = 36; //默认都显示 QVector vIndex(10, true); //cell的宽度å°�于最å°�宽度则éš�è—�部分显示 if (w < _minWidget) { //计算å‰�å�Žéœ€è¦�éš�è—�的个数 int t_num = qRound((_minWidget * DDEWeekCalendar::NumWeeksDisplayed - _allCellWidth) / _minWidget / 2.0); // qCDebug(ClientLogger) << "Cell width too small, hiding" << t_num << "cells from each side"; for (int i = 0; i < t_num; i++) { vIndex[i] = false; vIndex[9 - i] = false; } } //设置是å�¦æ˜¾ç¤º for (int i = 0; i < DDEWeekCalendar::NumWeeksDisplayed; i++) { m_cellList[i]->setVisible(vIndex[i]); } QWidget::resizeEvent(event); //更新显示 update(); } void CWeekNumWidget::focusInEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CWeekNumWidget focus in event with reason:" << event->reason(); QWidget::focusInEvent(event); switch (event->reason()) { case Qt::TabFocusReason: case Qt::BacktabFocusReason: case Qt::ActiveWindowFocusReason: // qCDebug(ClientLogger) << "CWeekNumWidget focus in event with reason: TabFocusReason"; m_isFocus = true; break; default: m_isFocus = false; break; }; update(); } void CWeekNumWidget::focusOutEvent(QFocusEvent *event) { // qCDebug(ClientLogger) << "CWeekNumWidget focus out event"; QWidget::focusOutEvent(event); m_isFocus = false; update(); } void CWeekNumWidget::paintCell(QWidget *cell) { // qCDebug(ClientLogger) << "Painting cell"; const QRect rect(0, 0, cell->width(), cell->height()); const int pos = m_cellList.indexOf(cell); //计算当å‰�日期周数 const int _showWeekNum = m_getWeekNumOfYear(m_days[pos]); const int _currentWeekNum = m_getWeekNumOfYear(m_currentDate.date()); const bool isCurrentDay = _showWeekNum == _currentWeekNum && m_days[pos].year() == m_currentDate.date().year(); const bool isSelectDay = m_days[pos].weekNumber() == m_selectDate.weekNumber(); QPainter painter(cell); painter.setRenderHints(QPainter::Antialiasing); painter.save(); painter.setBrush(QBrush(m_fillColor)); painter.setPen(Qt::NoPen); painter.drawRect(rect); //画矩形 painter.restore(); painter.setPen(Qt::SolidLine); const QString dayNum = QString::number(_showWeekNum); if (isSelectDay) { // qCDebug(ClientLogger) << "Painting selected day cell"; QRect fillRect((cell->width() - 24) / 2, (cell->height() - 32) / 2 + 4, 24, 24); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(QBrush(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor())); painter.setPen(Qt::NoPen); painter.drawEllipse(fillRect); if (m_isFocus) { //绘制焦点获å�–效果 QPen pen; pen.setWidth(2); pen.setColor(CScheduleDataManage::getScheduleDataManage()->getSystemActiveColor()); painter.setPen(pen); //在原有的选中效果外é�¢å†�绘制一圈 QRectF focusRect(fillRect.x() - 2, fillRect.y() - 2, fillRect.width() + 4, fillRect.height() + 4); painter.setBrush(Qt::NoBrush); painter.drawEllipse(focusRect); } painter.restore(); painter.setPen(m_currentDayTextColor); painter.setFont(m_dayNumFont); painter.drawText(QRect(0, 0, cell->width(), cell->height()), Qt::AlignCenter, dayNum); } else { // qCDebug(ClientLogger) << "Painting non-selected day cell"; if (isCurrentDay) { painter.setPen(m_backgroundcurrentDayColor); } else { painter.setPen(m_defaultTextColor); } painter.setFont(m_dayNumFont); painter.drawText(QRect(0, 0, cell->width(), cell->height()), Qt::AlignCenter, dayNum); } painter.end(); } bool CWeekNumWidget::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "Event filter received for object:" << o->objectName() << "with event type:" << e->type(); QWidget *cell = qobject_cast(o); if (cell && m_cellList.contains(cell)) { const int pos = m_cellList.indexOf(cell); //获å�–æ¯�个cell的时间,如果å°�于1900年则过滤显示和点击æ“�作 if (!withinTimeFrame(m_days[pos])) { // qCDebug(ClientLogger) << "Cell is out of time frame, skipping painting"; return false; } if (e->type() == QEvent::Paint) { paintCell(cell); } else if (e->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = dynamic_cast(e); if (mouseEvent->button() == Qt::LeftButton) { qCDebug(ClientLogger) << "Week number cell clicked at position:" << pos; cellClicked(cell); } } } return false; } void CWeekNumWidget::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Mouse press event received"; QWidget::mousePressEvent(event); m_isFocus = false; } /** * @brief setSelectedCell 设置被选择的周数 * @param index 周数所在的索引 */ void CWeekNumWidget::setSelectedCell(int index) { qCDebug(ClientLogger) << "Setting selected cell to index:" << index; if (m_selectedCell == index) { qCDebug(ClientLogger) << "Selected cell is already at index:" << index; return; } qCDebug(ClientLogger) << "Setting selected cell to index:" << index; const int prevPos = m_selectedCell; m_selectedCell = index; m_cellList.at(prevPos)->update(); m_cellList.at(index)->update(); m_selectDate = m_days[index]; const QString dayNum = QString::number(m_getWeekNumOfYear(m_selectDate)); if (m_days[index].year() < DDECalendar::QueryEarliestYear && dayNum != "1") { qCDebug(ClientLogger) << "Selected date is earlier than earliest queryable year:" << DDECalendar::QueryEarliestYear; return; } qCDebug(ClientLogger) << "Emitting signalsSelectDate with date:" << m_days[index].toString(); emit signalsSelectDate(m_days[index]); } void CWeekNumWidget::updateDate() { qCDebug(ClientLogger) << "Updating dates in CWeekNumWidget based on selected date:" << m_selectDate.toString(); for (int i = 0 ; i < DDEWeekCalendar::NumWeeksDisplayed; ++i) { m_days[i] = m_selectDate.addDays((i - 4) * DDEWeekCalendar::AFewDaysofWeek); if (m_days[i] == m_selectDate) m_selectedCell = i; } update(); } bool CWeekNumWidget::event(QEvent *e) { // qCDebug(ClientLogger) << "Event received"; if (e->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = dynamic_cast(e); if (focusWidget() == this) { //如果焦点在该widget上,å�¯ä»¥å·¦å�³é”®åˆ‡æ�¢æ—¶é—´ if (keyEvent->key() == Qt::Key_Left) { qCDebug(ClientLogger) << "Left key pressed, triggering previous week"; emit signalBtnPrev(); } if (keyEvent->key() == Qt::Key_Right) { qCDebug(ClientLogger) << "Right key pressed, triggering next week"; emit signalBtnNext(); } } } return DWidget::event(e); } void CWeekNumWidget::cellClicked(QWidget *cell) { // qCDebug(ClientLogger) << "Cell clicked"; const int pos = m_cellList.indexOf(cell); if (pos == -1) { qCDebug(ClientLogger) << "Cell clicked at position:" << pos << "is invalid"; return; } qCDebug(ClientLogger) << "Cell clicked at position:" << pos << "with date:" << m_days[pos].toString(); setSelectedCell(pos); update(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/weekview.h000066400000000000000000000066771523260663500307720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef WEEKVIEW_H #define WEEKVIEW_H #include "../widget/touchgestureoperation.h" #include #include #include #include DWIDGET_USE_NAMESPACE typedef int(*GetWeekNumOfYear)(const QDate &); /** * @brief The CWeekView class * 周数显示类 */ class CWeekNumWidget; class CWeekView : public QWidget { Q_OBJECT public: explicit CWeekView(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent = nullptr); ~CWeekView() override; //设置选择时间,并更新 void setSelectDate(const QDate date); //设置当å‰�æ—¶é—´ void setCurrent(const QDateTime &dateTime); //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² void setTheMe(int type = 0); signals: /** * @brief signalsSelectDate 选择日期的信å�· * @param date 选择的日期 */ void signalsSelectDate(const QDate &date); /** * @brief signalIsDragging 判断是å�¦æ˜¯æ‹–拽状æ€� * @param isDragging 是å�¦æ˜¯æ‹–拽状æ€� */ void signalIsDragging(bool &isDragging); /** * @brief signalBtnPrev å‰�一周按钮信å�· */ void signalBtnPrev(); /** * @brief signalBtnNext å�Žä¸€å‘¨æŒ‰é’®ä¿¡å�· */ void signalBtnNext(); protected: /** * @brief wheelEvent 鼠标滚轮切æ�¢ä¸Šä¸€å‘¨ä¸‹ä¸€å‘¨ * @param event 鼠标滚轮事件 */ void wheelEvent(QWheelEvent *event) override; bool event(QEvent *e) override; private: //上一周按钮 DIconButton *m_prevButton = nullptr; //下一周按钮 DIconButton *m_nextButton = nullptr; //触摸手势处ç�† touchGestureOperation m_touchGesture; CWeekNumWidget *m_weekNumWidget; }; class CWeekNumWidget : public QWidget { Q_OBJECT public: explicit CWeekNumWidget(const GetWeekNumOfYear &getWeekNumOfYear, QWidget *parent); ~CWeekNumWidget() override; //设置选择时间,并更新 void setSelectDate(const QDate date); //设置当å‰�æ—¶é—´ void setCurrent(const QDateTime &dateTime); //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² void setTheMe(int type = 0); protected: void resizeEvent(QResizeEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; bool event(QEvent *e) override; bool eventFilter(QObject *o, QEvent *e) override; void mousePressEvent(QMouseEvent *event) override; private: //绘制周数 void paintCell(QWidget *cell); //设置被选择的周数 void setSelectedCell(int index); //æ›´æ–°æ•°æ�® void updateDate(); signals: //选择日期的信å�· void signalsSelectDate(const QDate &date); //å‰�一周按钮信å�· void signalBtnPrev(); //å�Žä¸€å‘¨æŒ‰é’®ä¿¡å�· void signalBtnNext(); public slots: //选择点击的日期 void cellClicked(QWidget *cell); private: QList m_cellList; //选择的日期 QDate m_selectDate; QDate m_days[10]; int m_selectedCell = 0; QFont m_dayNumFont; QDateTime m_currentDate; GetWeekNumOfYear m_getWeekNumOfYear; QColor m_defaultTextColor = Qt::black; QColor m_backgrounddefaultColor = Qt::white; QColor m_currentDayTextColor = Qt::white; QColor m_backgroundcurrentDayColor = "#0081FF"; QColor m_fillColor = Qt::white; bool m_isFocus; }; #endif // MONTDAYVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/weekwindow.cpp000066400000000000000000000430331523260663500316450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2015 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "weekwindow.h" #include "scheduleview.h" #include "constants.h" #include "weekheadview.h" #include "weekview.h" #include "commondef.h" #include "schedulesearchview.h" #include "todaybutton.h" #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CWeekWindow::CWeekWindow(QWidget *parent) : CScheduleBaseWidget(parent) , m_today(new CTodayButton) { qCDebug(ClientLogger) << "CWeekWindow constructed"; setContentsMargins(0, 0, 0, 0); initUI(); initConnection(); setLunarVisible(m_calendarManager->getShowLunar()); } CWeekWindow::~CWeekWindow() { qCDebug(ClientLogger) << "CWeekWindow destroyed"; } /** * @brief setLunarVisible 设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ * @param state 是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ */ void CWeekWindow::setLunarVisible(bool state) { qCDebug(ClientLogger) << "Setting lunar visibility" << "visible:" << state; m_weekHeadView->setLunarVisible(state); m_YearLunarLabel->setVisible(state); m_scheduleView->setLunarVisible(state); } /** * @brief initUI åˆ�始化界é�¢è®¾ç½® */ void CWeekWindow::initUI() { qCDebug(ClientLogger) << "Initializing UI for CWeekWindow"; m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedSize(DDEWeekCalendar::WTodayWindth, DDEWeekCalendar::WTodayHeight); QFont todayfont; todayfont.setWeight(QFont::Medium); todayfont.setPixelSize(DDECalendar::FontSizeFourteen); m_today->setFont(todayfont); //新建年份label m_YearLabel = new QLabel(); m_YearLabel->setFixedHeight(DDEWeekCalendar::W_YLabelHeight); QFont t_labelF; t_labelF.setWeight(QFont::Medium); t_labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(t_labelF); DPalette LunaPa = m_YearLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(LunaPa); m_YearLunarLabel = new QLabel(this); m_YearLunarLabel->setFixedSize(DDEWeekCalendar::W_YLunatLabelWindth, DDEWeekCalendar::W_YLunatLabelHeight); m_weekview = new CWeekView(&CalendarManager::getWeekNumOfYear, this); m_weekLabel = new QLabel(); m_weekLabel->setFixedHeight(DDEWeekCalendar::W_YLabelHeight); QFont weeklabelF; weeklabelF.setWeight(QFont::Medium); weeklabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_weekLabel->setFont(weeklabelF); DPalette wpa = m_weekLabel->palette(); wpa.setColor(DPalette::WindowText, QColor("#717171")); m_weekLabel->setPalette(wpa); m_weekLabel->setText(tr("Week")); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_YearLunarLabel->setFont(yLabelF); DPalette YearLpa = m_YearLunarLabel->palette(); YearLpa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(YearLpa); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setContentsMargins(0, 0, 0, 0); yeartitleLayout->setSpacing(0); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_YearLabel); yeartitleLayout->addWidget(m_dialogIconButton); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setContentsMargins(0, 0, 0, 0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->addWidget(m_YearLunarLabel); yeartitleLayout->addSpacing(6); yeartitleLayout->addLayout(yeartitleLayout1); yeartitleLayout->addStretch(); m_todayframe = new CustomFrame; m_todayframe->setContentsMargins(0, 0, 0, 0); m_todayframe->setRoundState(true, true, true, true); m_todayframe->setBColor(Qt::white); m_todayframe->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_todayframe->setboreder(1); QHBoxLayout *todaylayout = new QHBoxLayout; todaylayout->setContentsMargins(0, 0, 0, 0); todaylayout->setSpacing(0); //将显示周数的view加入布局 todaylayout->addWidget(m_weekview); //设置布局 m_todayframe->setLayout(todaylayout); yeartitleLayout->addWidget(m_todayframe, 0, Qt::AlignCenter); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_weekLabel, 0, Qt::AlignCenter); yeartitleLayout->addStretch(); yeartitleLayout->addWidget(m_today, 0, Qt::AlignRight); m_weekHeadView = new CWeekHeadView(this); m_scheduleView = new CScheduleView(this); m_scheduleView->setviewMargin(73, 109 + 30, 0, 0); m_scheduleView->setRange(763, 1032, QDate(2019, 8, 12), QDate(2019, 8, 18)); m_mainHLayout = new QVBoxLayout; m_mainHLayout->setContentsMargins(0, 0, 0, 0); m_mainHLayout->setSpacing(0); m_mainHLayout->addWidget(m_weekHeadView, 1); m_mainHLayout->addWidget(m_scheduleView, 9); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setContentsMargins(0, 0, 0, 0); hhLayout->setSpacing(0); //头部控件统一高度为 M_YTopHeight QWidget *top = new QWidget(this); top->setFixedHeight(DDEMonthCalendar::M_YTopHeight); top->setLayout(yeartitleLayout); hhLayout->addWidget(top); hhLayout->addLayout(m_mainHLayout); m_tMainLayout = new QHBoxLayout; m_tMainLayout->setContentsMargins(0, 0, 0, 0); m_tMainLayout->setSpacing(0); m_tMainLayout->addLayout(hhLayout); this->setLayout(m_tMainLayout); setTabOrder(m_weekview, m_today); setTabOrder(m_today, m_scheduleView); qCDebug(ClientLogger) << "UI initialization completed for CWeekWindow"; } /** * @brief initConnection åˆ�始化信å�·å’Œæ§½çš„连接 */ void CWeekWindow::initConnection() { qCDebug(ClientLogger) << "Initializing connections for CWeekWindow"; connect(m_today, &CTodayButton::clicked, this, &CWeekWindow::slottoday); //周数信æ�¯åŒºåŸŸå‰�按钮点击事件关è�”触å�‘å‰�一周 connect(m_weekview, &CWeekView::signalBtnPrev, this, &CWeekWindow::slotprev); //周数信æ�¯åŒºåŸŸå�ŽæŒ‰é’®ç‚¹å‡»äº‹ä»¶å…³è�”触å�‘å�Žä¸€å‘¨ connect(m_weekview, &CWeekView::signalBtnNext, this, &CWeekWindow::slotnext); connect(m_weekview, &CWeekView::signalsSelectDate, this, &CWeekWindow::slotSelectDate); connect(m_weekHeadView, &CWeekHeadView::signalsViewSelectDate, this, &CWeekWindow::slotViewSelectDate); connect(m_weekview, &CWeekView::signalIsDragging, this, &CWeekWindow::slotIsDragging); //日程信æ�¯åŒºåŸŸæ»šåŠ¨ä¿¡å�·å…³è�” connect(m_scheduleView, &CScheduleView::signalAngleDelta, this, &CWeekWindow::slotAngleDelta); //æ¯�周信æ�¯åŒºåŸŸæ»šåŠ¨ä¿¡å�·å…³è�” connect(m_weekHeadView, &CWeekHeadView::signalAngleDelta, this, &CWeekWindow::slotAngleDelta); //å�Œå‡»"..."标签切æ�¢æ—¥è§†å›¾ connect(m_scheduleView, &CScheduleView::signalsCurrentScheduleDate, this, &CWeekWindow::slotViewSelectDate); connect(m_scheduleView, &CScheduleView::signalSwitchPrePage, this, &CWeekWindow::slotSwitchPrePage); connect(m_scheduleView, &CScheduleView::signalSwitchNextPage, this, &CWeekWindow::slotSwitchNextPage); } /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void CWeekWindow::setTheMe(int type) { qCDebug(ClientLogger) << "Setting week window theme" << "type:" << type; if (type == 0 || type == 1) { //返回今天按钮的背景色 m_todayframe->setBColor(Qt::white); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette wpa = m_weekLabel->palette(); wpa.setColor(DPalette::WindowText, QColor("#717171")); m_weekLabel->setPalette(wpa); m_weekLabel->setForegroundRole(DPalette::WindowText); } else if (type == 2) { //设置返回今天按钮的背景色 QColor bColor = "#FFFFFF"; bColor.setAlphaF(0.05); m_todayframe->setBColor(bColor); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); DPalette wpa = m_weekLabel->palette(); wpa.setColor(DPalette::WindowText, QColor("#717171")); m_weekLabel->setPalette(wpa); m_weekLabel->setForegroundRole(DPalette::WindowText); } m_weekview->setTheMe(type); m_weekHeadView->setTheMe(type); m_scheduleView->setTheMe(type); } /** * @brief setTime 设置CScheduleView的时间 * @param time æ—¶é—´ */ void CWeekWindow::setTime(QTime time) { qCDebug(ClientLogger) << "Setting schedule view time" << "time:" << time.toString(); m_scheduleView->setTime(time); } /** * @brief setSearchWFlag 设置æ�œç´¢æ ‡å¿— * @param flag 是å�¦è¿›è¡Œäº†æ�œç´¢ */ void CWeekWindow::setSearchWFlag(bool flag) { qCDebug(ClientLogger) << "Setting search flag" << "flag:" << flag; m_searchFlag = flag; update(); } /** * @brief CWeekWindow::updateHeight 更新全天区域高度 */ void CWeekWindow::updateHeight() { qCDebug(ClientLogger) << "Updating schedule view height"; m_scheduleView->updateHeight(); } /** * @brief CWeekWindow::setYearData 设置年显示和今天按钮显示 */ void CWeekWindow::setYearData() { qCDebug(ClientLogger) << "Setting year data"; if (getSelectDate() == getCurrendDateTime().date()) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return Today", "Today", "Return Today")); } if (getShowLunar()) { m_YearLabel->setText(QString::number(getSelectDate().year()) + tr("Y")); } else { m_YearLabel->setText(QString::number(getSelectDate().year())); } } /** * @brief CWeekWindow::updateShowDate 更新显示时间 * @param isUpdateBar */ void CWeekWindow::updateShowDate(const bool isUpdateBar) { qCDebug(ClientLogger) << "Updating show date" << "update bar:" << isUpdateBar; setYearData(); QVector _weekShowData = m_calendarManager->getWeekDate(getSelectDate()); m_weekHeadView->setWeekDay(_weekShowData, getSelectDate()); //获å�–一周的开始结æ�Ÿæ—¶é—´ m_startDate = _weekShowData.first(); m_stopDate = _weekShowData.last(); //如果时间无效则打å�°log if (m_startDate.isNull() || m_stopDate.isNull()) { qCWarning(ClientLogger) << "Week start or stop date error" << "start date:" << m_startDate << "stop date:" << m_stopDate; } //设置全天和é�žå…¨å¤©æ˜¾ç¤ºæ—¶é—´èŒƒå›´ m_scheduleView->setRange(m_startDate, m_stopDate); m_scheduleView->setTimeFormat((m_calendarManager->getTimeShowType() ? "AP " : "") + m_calendarManager->getTimeFormat()); //是å�¦æ›´æ–°æ˜¾ç¤ºå‘¨æ•°çª—å�£ if (isUpdateBar) { m_weekview->setCurrent(getCurrendDateTime()); m_weekview->setSelectDate(getSelectDate()); } if (getShowLunar()) updateShowLunar(); updateShowSchedule(); update(); } /** * @brief CWeekWindow::updateShowSchedule 更新日程显示 */ void CWeekWindow::updateShowSchedule() { qCDebug(ClientLogger) << "Updating show schedule from" << m_startDate.toString() << "to" << m_stopDate.toString(); m_scheduleView->setShowScheduleInfo(gScheduleManager->getScheduleMap(m_startDate, m_stopDate)); } /** * @brief CWeekWindow::updateShowLunar 更新显示农历信æ�¯ */ void CWeekWindow::updateShowLunar() { qCDebug(ClientLogger) << "Updating show lunar information"; // Ensure lunar data is loaded for the current view range ensureLunarDataLoaded(m_startDate, m_stopDate); getLunarInfo(); m_YearLunarLabel->setText(m_lunarYear); QMap weekHuangLiInfo = gLunarManager->getHuangLiDayMap(m_startDate, m_stopDate); m_weekHeadView->setHunagLiInfo(weekHuangLiInfo); } void CWeekWindow::updateSearchScheduleInfo() { qCDebug(ClientLogger) << "Updating search schedule information"; m_scheduleView->slotUpdateScene(); } /** * @brief CWeekWindow::setSelectSearchScheduleInfo 设置选中æ�œç´¢æ—¥ç¨‹ * @param info */ void CWeekWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { qCDebug(ClientLogger) << "Setting selected search schedule"; m_scheduleView->setSelectSchedule(info); } /** * @brief CWeekWindow::deleteselectSchedule å¿«æ�·é”®åˆ é™¤æ—¥ç¨‹ */ void CWeekWindow::deleteselectSchedule() { qCDebug(ClientLogger) << "Deleting selected schedule"; m_scheduleView->slotDeleteitem(); } /** * @brief CWeekWindow::slotIsDragging 判断是å�¦å�¯ä»¥æ‹–拽 * @param isDragging */ void CWeekWindow::slotIsDragging(bool &isDragging) { isDragging = m_scheduleView->IsDragging(); } /** * @brief CWeekWindow::slotViewSelectDate 切æ�¢æ—¥è§†å›¾å¹¶è®¾ç½®é€‰æ‹©æ—¶é—´ * @param date */ void CWeekWindow::slotViewSelectDate(const QDate &date) { qCDebug(ClientLogger) << "View select date" << "date:" << date; if (setSelectDate(date)) { //更加界é�¢ updateData(); emit signalSwitchView(3); } } void CWeekWindow::slotSwitchPrePage() { qCDebug(ClientLogger) << "Switching to previous page"; slotprev(); } void CWeekWindow::slotSwitchNextPage() { qCDebug(ClientLogger) << "Switching to next page"; slotnext(); } /** * @brief slotprev 切æ�¢åˆ°ä¸Šä¸€å‘¨ï¼Œéš�è—�日程浮框 */ void CWeekWindow::slotprev() { qCDebug(ClientLogger) << "Switching to previous week"; if (m_isSwitchStatus) { qCDebug(ClientLogger) << "Switching to previous week is already in progress"; return; } qCDebug(ClientLogger) << "Switching to previous week"; m_isSwitchStatus = true; QTimer::singleShot(5, [this]() { switchDate(getSelectDate().addDays(-7)); m_isSwitchStatus = false; }); } /** * @brief slotnext 切æ�¢åˆ°ä¸‹ä¸€å‘¨ï¼Œéš�è—�日程浮框 */ void CWeekWindow::slotnext() { qCDebug(ClientLogger) << "Switching to next week"; if (m_isSwitchStatus) { qCDebug(ClientLogger) << "Switching to next week is already in progress"; return; } qCDebug(ClientLogger) << "Switching to next week"; m_isSwitchStatus = true; QTimer::singleShot(5, [this]() { switchDate(getSelectDate().addDays(7)); m_isSwitchStatus = false; }); } /** * @brief slottoday 返回到当å‰�时间,éš�è—�日程浮框 */ void CWeekWindow::slottoday() { qCDebug(ClientLogger) << "Switching to today"; switchDate(getCurrendDateTime().date()); } /** * @brief CWeekWindow::slotSelectDate 修改选择时间 * @param date */ void CWeekWindow::slotSelectDate(const QDate &date) { qCDebug(ClientLogger) << "Selecting date" << "date:" << date; //更新选择时间 setSelectDate(date); updateShowDate(false); } /** * @brief slotAngleDelta 接å�—处ç�†æ»šåŠ¨ç›¸å¯¹é‡� * @param delta 滚动相对é‡� */ void CWeekWindow::slotAngleDelta(int delta) { qCDebug(ClientLogger) << "Handling angle delta" << "delta:" << delta; //如果为拖拽状æ€�则退出 if (!m_scheduleView->IsDragging()) { qCDebug(ClientLogger) << "Not dragging, handling angle delta"; if (delta > 0) { qCDebug(ClientLogger) << "Delta is positive, switching to previous week"; slotprev(); } else if (delta < 0) { slotnext(); } } } /** * @brief CWeekWindow::switchDate 切æ�¢é€‰æ‹©æ—¶é—´ * @param date */ void CWeekWindow::switchDate(const QDate &date) { qCDebug(ClientLogger) << "Switching date" << "date:" << date; //éš�è—�æ��示框 slotScheduleHide(); //设置选择时间 if (setSelectDate(date, true)) { qCDebug(ClientLogger) << "Switching date successfully, updating data"; updateData(); } } /** * @brief slotScheduleHide éš�è—�日程浮框 */ void CWeekWindow::slotScheduleHide() { qCDebug(ClientLogger) << "Hiding schedule popup"; m_scheduleView->slotScheduleShow(false); } /** * @brief resizeEvent 调整周视图窗å�£ * @param event 窗å�£å¤§å°�调整事件 */ void CWeekWindow::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "Week window resize event" << "size:" << event->size(); qreal dw = width() * 0.4186 + 0.5; int dh = 36; //添加1个按钮的宽度 36。原æ�¥m_weekview ä¸�包å�«å‰�å�ŽæŒ‰é’®(若加2个按钮的宽度,会导致窗å�£ç¼©å°�的时候按钮显示ä¸�å…¨) if (!m_searchFlag) { // qCDebug(ClientLogger) << "Setting week view size to:" << qRound(dw + 36) << "x" << dh; m_weekview->setFixedSize(qRound(dw + 36), dh); } else { // qCDebug(ClientLogger) << "Setting week view size to:" << qRound(dw - 100 + 36) << "x" << dh; m_weekview->setFixedSize(qRound(dw - 100 + 36), dh); } QWidget::resizeEvent(event); } /** * @brief mousePressEvent é¼ æ ‡å�•击éš�è—�日程浮框 * @param event 鼠标事件 */ void CWeekWindow::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Mouse press event received"; Q_UNUSED(event); slotScheduleHide(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/weekWidget/weekwindow.h000066400000000000000000000065001523260663500313100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef WEEKWINDOW_H #define WEEKWINDOW_H #include "customframe.h" #include "dschedule.h" #include "cschedulebasewidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CWeekHeadView; class CaLunarDayInfo; class CWeekView; class CScheduleView; class CScheduleSearchView; class CTodayButton; class CWeekWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CWeekWindow(QWidget *parent = nullptr); ~CWeekWindow() override; //设置是å�¦æ˜¾ç¤ºé˜´åŽ†ä¿¡æ�¯ void setLunarVisible(bool state); //åˆ�始化界é�¢è®¾ç½® void initUI(); //åˆ�始化信å�·å’Œæ§½çš„连接 void initConnection(); //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² void setTheMe(int type = 0); //设置CScheduleView的时间 void setTime(QTime time); //设置æ�œç´¢æ ‡å¿— void setSearchWFlag(bool flag); //更新全天区域高度 void updateHeight(); //设置年显示和今天按钮显示 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信æ�¯ void updateShowLunar() override; //更新界é�¢æ�œç´¢æ—¥ç¨‹æ˜¾ç¤º void updateSearchScheduleInfo() override; //设置选中æ�œç´¢æ—¥ç¨‹ void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; //删除选中日程 void deleteselectSchedule() override; signals: /** * @brief signalCurrentDate 设置时间信å�· * @param date æ—¶é—´ */ void signalCurrentDate(QDate date); /** * @brief signalsViewSelectDate 选择时间的信å�· * @param date æ—¶é—´ */ void signalsViewSelectDate(QDate date); public slots: //判断是å�¦å�¯ä»¥æ‹–拽 void slotIsDragging(bool &isDragging); //切æ�¢æ—¥è§†å›¾å¹¶è®¾ç½®é€‰æ‹©æ—¶é—´ void slotViewSelectDate(const QDate &date); void slotSwitchPrePage(); void slotSwitchNextPage(); public slots: //éš�è—�日程浮框 void slotScheduleHide(); private slots: //切æ�¢ä¸Šä¸€å‘¨ void slotprev(); //切æ�¢ä¸‹ä¸€å‘¨ void slotnext(); //返回到当å‰�æ—¶é—´ void slottoday(); //修改选择时间 void slotSelectDate(const QDate &date); //接å�—处ç�†æ»šåŠ¨ç›¸å¯¹é‡� void slotAngleDelta(int delta); private: //切æ�¢é€‰æ‹©æ—¶é—´ void switchDate(const QDate &date); protected: void resizeEvent(QResizeEvent *event) override; void mousePressEvent(QMouseEvent *event) override; private: CWeekHeadView *m_weekHeadView = nullptr; //周视图头 CTodayButton *m_today = nullptr; QDate m_currentdate; QLabel *m_YearLabel = nullptr; QLabel *m_YearLunarLabel = nullptr; QLabel *m_weekLabel = nullptr; //显示周数 CWeekView *m_weekview = nullptr; CustomFrame *m_todayframe = nullptr; CScheduleView *m_scheduleView = nullptr; QVBoxLayout *m_mainHLayout = nullptr; QString m_searchText; QHBoxLayout *m_tMainLayout = nullptr; bool m_searchFlag = false; bool m_isSwitchStatus = false; QDate m_startDate; QDate m_stopDate; }; #endif // YEARWINDOW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/000077500000000000000000000000001523260663500267605ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/yearscheduleview.cpp000066400000000000000000000351661523260663500330470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "yearscheduleview.h" #include "commondef.h" #include "scheduledlg.h" #include "scheduledatamanage.h" #include "constants.h" #include "schedulemanager.h" #include "cscheduleoperation.h" #include #include #include DGUI_USE_NAMESPACE CYearScheduleView::CYearScheduleView(QWidget *parent) : DWidget(parent) { qCDebug(ClientLogger) << "CYearScheduleView constructed"; m_textfont.setWeight(QFont::Medium); m_textfont.setPixelSize(DDECalendar::FontSizeTwelve); m_timefont = m_textfont; m_timefont.setWeight(QFont::Normal); } CYearScheduleView::~CYearScheduleView() { qCDebug(ClientLogger) << "CYearScheduleView destroyed"; } bool YScheduleDateThan(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { // qCDebug(ClientLogger) << "Comparing schedule dates"; QDate bDate1 = s1->dtStart().date(); QDate eDate1 = s1->dtEnd().date(); QDate bDate2 = s2->dtStart().date(); QDate eDate2 = s2->dtEnd().date(); if (bDate1 != eDate1 && bDate2 == eDate2) { return true; } else if (bDate1 == eDate1 && bDate2 != eDate2) { return false; } else if (bDate1 != eDate1 && bDate2 != eDate2) { return bDate1 < bDate2; } else { if (s1->dtStart() == s2->dtStart()) { return s1->summary() < s2->summary(); } else { return s1->dtStart() < s2->dtStart(); } } } bool YScheduleDaysThan(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { // qCDebug(ClientLogger) << "Comparing schedule days"; return s1->dtStart().date().daysTo(s1->dtEnd().date()) > s2->dtStart().date().daysTo(s2->dtEnd().date()); } void CYearScheduleView::setData(DSchedule::List &vListData) { qCDebug(ClientLogger) << "Setting data with" << vListData.size() << "schedules"; DSchedule::List valldayListData, vDaylistdata; for (int i = 0; i < vListData.count(); i++) { DSchedule::Ptr ptr = vListData.at(i); if (ptr.isNull()) { continue; } if (ptr->allDay()) { valldayListData.append(ptr); } else { vDaylistdata.append(ptr); } } std::sort(valldayListData.begin(), valldayListData.end(), YScheduleDaysThan); std::sort(valldayListData.begin(), valldayListData.end(), YScheduleDateThan); std::sort(vDaylistdata.begin(), vDaylistdata.end(), YScheduleDaysThan); std::sort(vDaylistdata.begin(), vDaylistdata.end(), YScheduleDateThan); // Fixed: Use a safer approach to move festival schedules to the front // Collect festival schedules first, then reorganize the list DSchedule::List festivalSchedules; DSchedule::List nonFestivalSchedules; qCDebug(ClientLogger) << "Processing" << valldayListData.count() << "all-day schedules for festival reorganization"; for (int i = 0; i < valldayListData.count(); i++) { DSchedule::Ptr schedule = valldayListData.at(i); if (CScheduleOperation::isFestival(schedule)) { //如果为节å�‡æ—¥æ—¥ç¨‹ festivalSchedules.append(schedule); qCDebug(ClientLogger) << "Found festival schedule, i=" << i; } else { nonFestivalSchedules.append(schedule); qCDebug(ClientLogger) << "Found non-festival schedule, i=" << i; } } // Rebuild the list with festival schedules at the front valldayListData.clear(); valldayListData.append(festivalSchedules); valldayListData.append(nonFestivalSchedules); qCDebug(ClientLogger) << "Reorganized schedules:" << festivalSchedules.count() << "festival schedules moved to front," << nonFestivalSchedules.count() << "regular schedules follow"; m_vlistData.clear(); m_vlistData.append(valldayListData); m_vlistData.append(vDaylistdata); if (m_vlistData.size() > DDEYearCalendar::YearScheduleListMaxcount) { qCDebug(ClientLogger) << "Schedule list exceeds max count, truncating to" << DDEYearCalendar::YearScheduleListMaxcount; DSchedule::List vTListData; for (int i = 0; i < 4; i++) { if (m_vlistData.at(i)->dtStart().date() != m_vlistData.at(i)->dtEnd().date() && !m_vlistData.at(i)->allDay()) { if (m_vlistData.at(i)->dtStart().date() != m_currentDate) { m_vlistData[i]->setAllDay(true); } } vTListData.append(m_vlistData.at(i)); } DSchedule::Ptr info; info.reset(new DSchedule()); info->setSummary("......"); info->setUid("-1"); vTListData.append(info); m_vlistData = vTListData; } } void CYearScheduleView::clearData() { qCDebug(ClientLogger) << "Clearing schedule data"; m_vlistData.clear(); } void CYearScheduleView::showWindow() { qCDebug(ClientLogger) << "Showing window with" << m_vlistData.size() << "schedules"; if (m_vlistData.isEmpty()) { // qCDebug(ClientLogger) << "Setting fixed size to: 130x45"; setFixedSize(130, 45); } else { // qCDebug(ClientLogger) << "Updating date show"; updateDateShow(); } } void CYearScheduleView::setTheMe(int type) { // qCDebug(ClientLogger) << "Setting theme to type:" << type; if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Setting theme to light"; m_btimecolor = "#000000"; m_btimecolor.setAlphaF(0.6); m_btTextColor = "#000000"; m_btTextColor.setAlphaF(0.7); } else if (type == 2) { // qCDebug(ClientLogger) << "Setting theme to dark"; m_btimecolor = "#FFFFFF"; m_btimecolor.setAlphaF(0.6); m_btTextColor = "#FFFFFF"; m_btTextColor.setAlphaF(0.7); } } void CYearScheduleView::setCurrentDate(const QDate &cdate) { // qCDebug(ClientLogger) << "Setting current date to:" << cdate.toString(); m_currentDate = cdate; } QDate CYearScheduleView::getCurrentDate() { // qCDebug(ClientLogger) << "Getting current date"; return m_currentDate; } void CYearScheduleView::setTimeFormat(const QString &format) { // qCDebug(ClientLogger) << "Setting time format to:" << format; m_timeFormat = format; update(); } int CYearScheduleView::getPressScheduleIndex() { // qCDebug(ClientLogger) << "Getting press schedule index"; int resutle = -1; //获å�–全局å��æ ‡ QPoint currentPos = QCursor::pos(); //转æ�¢ä¸ºå½“å‰�å��æ ‡ currentPos = this->mapFromGlobal(currentPos); for (int i = 0; i < m_drawRect.size(); ++i) { //è‹¥å��标在绘制标签中则更新返回值 if (m_drawRect.at(i).contains(currentPos)) { resutle = i; break; } } qCDebug(ClientLogger) << "Press schedule index:" << resutle; return resutle; } void CYearScheduleView::updateDateShow() { qCDebug(ClientLogger) << "Updating date show"; int sViewNum = 0; if (!m_vlistData.isEmpty()) { if (m_vlistData.size() > DDEYearCalendar::YearScheduleListMaxcount) { sViewNum = DDEYearCalendar::YearScheduleListMaxcount; } else { sViewNum = m_vlistData.size(); } } if (!m_vlistData.isEmpty()) setFixedSize(240, 45 + (sViewNum - 1) * 29); update(); m_drawRect.clear(); //对绘制标签矩阵进行缓存 for (int i = 0; i < m_vlistData.size(); i++) { m_drawRect.append(QRect(30, 10 + i * 29, width() - 50, 26)); } return; } void CYearScheduleView::paintEvent(QPaintEvent *event) { // qCDebug(ClientLogger) << "Paint event received"; Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; if (m_vlistData.isEmpty()) { // qCDebug(ClientLogger) << "Painting empty schedule"; paintItem(painter); } else { // qCDebug(ClientLogger) << "Painting schedule"; for (int i = 0; i < m_vlistData.size(); ++i) { paintItem(painter, m_vlistData.at(i), i); } } } void CYearScheduleView::paintItem(QPainter &painter, DSchedule::Ptr info, int index) { // qCDebug(ClientLogger) << "Painting schedule item"; int labelwidth = width() - 30; int bHeight = index * 29 + 10; int labelheight = 28; DSchedule::Ptr &gd = info; if (info->uid() == "-1") { // qCDebug(ClientLogger) << "Painting '...' item"; QString str = "..."; painter.save(); painter.setPen(m_btimecolor); painter.setFont(m_textfont); painter.drawText(QRect(25, bHeight, labelwidth - 80, labelheight - 2), Qt::AlignLeft | Qt::AlignVCenter, str); painter.restore(); } else { // qCDebug(ClientLogger) << "Painting schedule item"; if (info->uid() != "-1") { //圆点m_solocolor QColor gdColor; DScheduleType::Ptr type = gScheduleManager->getScheduleTypeByScheduleId(info->scheduleTypeID()); if (nullptr != type) { gdColor = type->getColorCode(); } painter.save(); painter.setBrush(QBrush(gdColor)); painter.setPen(Qt::NoPen); painter.drawEllipse(QRect(25, bHeight + (labelheight - 8) / 2, 8, 8)); painter.restore(); } QString str; //左边文字 painter.save(); painter.setPen(m_btTextColor); painter.setFont(m_textfont); QFontMetrics fm = painter.fontMetrics(); QString tSTitleName = gd->summary(); tSTitleName.replace("\n", ""); str = tSTitleName; int tilenameW = labelwidth - 80; QString tStr; for (int i = 0; i < str.count(); i++) { tStr.append(str.at(i)); int widthT = fm.horizontalAdvance(tStr) + 5; if (widthT >= tilenameW) { tStr.chop(1); break; } } if (tStr != str) { tStr = tStr + "..."; } painter.drawText(QRect(41, bHeight, tilenameW, labelheight - 2), Qt::AlignLeft | Qt::AlignVCenter, tStr); painter.restore(); if (info->uid() != "-1") { //å�³è¾¹æ—¶é—´ painter.save(); painter.setPen(m_btimecolor); painter.setFont(m_timefont); if (info->allDay()) { str = tr("All Day"); } else { if (m_currentDate > info->dtStart().date()) { str = tr("All Day"); } else { str = info->dtStart().time().toString(m_timeFormat); } } painter.drawText(QRect(width() - 70, bHeight, 57, labelheight - 2), Qt::AlignRight | Qt::AlignVCenter, str); painter.restore(); } } } void CYearScheduleView::paintItem(QPainter &painter) { // qCDebug(ClientLogger) << "Painting empty schedule"; //左边文字 painter.save(); painter.setPen(m_btTextColor); painter.setFont(m_textfont); QString tSTitleName = tr("No event"); painter.drawText(QRect(0, 0, width(), height()), Qt::AlignCenter, tSTitleName); painter.restore(); } CYearScheduleOutView::CYearScheduleOutView(QWidget *parent) : DArrowRectangle(DArrowRectangle::ArrowLeft, DArrowRectangle::FloatWidget, parent) { qCDebug(ClientLogger) << "CYearScheduleOutView constructed"; //如果dtk版本为5.3以上则使用新接å�£ #if (DTK_VERSION > DTK_VERSION_CHECK(5, 3, 0, 0)) //设置显示圆角 setRadiusArrowStyleEnable(true); //设置圆角 setRadius(DARROWRECT::DRADIUS); #endif yearscheduleview = new CYearScheduleView(); this->setContent(yearscheduleview); } void CYearScheduleOutView::setData(DSchedule::List &vListData) { qCDebug(ClientLogger) << "Setting data with" << vListData.size() << "schedules in CYearScheduleOutView"; list_count = vListData.size(); yearscheduleview->setData(vListData); yearscheduleview->showWindow(); //æ ¹æ�®widget的高度调整圆角 int value = yearscheduleview->height() / 6; //如果圆角最大为15 value = value > 15 ? 15 : value; setRadius(value); scheduleinfoList = yearscheduleview->getlistdate(); } void CYearScheduleOutView::clearData() { qCDebug(ClientLogger) << "Clearing schedule data in CYearScheduleOutView"; yearscheduleview->clearData(); } void CYearScheduleOutView::setTheMe(int type) { qCDebug(ClientLogger) << "Setting theme to type:" << type << "in CYearScheduleOutView"; yearscheduleview->setTheMe(type); //æ ¹æ�®ä¸»é¢˜è®¾å¤‡ä¸�一样的背景色 if (type == 2) { setBackgroundColor(DBlurEffectWidget::DarkColor); } else { setBackgroundColor(DBlurEffectWidget::LightColor); } } void CYearScheduleOutView::setCurrentDate(const QDate &cDate) { qCDebug(ClientLogger) << "Setting current date to:" << cDate.toString() << "in CYearScheduleOutView"; currentdate = cDate; yearscheduleview->setCurrentDate(cDate); } /** * @brief CYearScheduleOutView::setDirection 设置箭头方å�‘ * @param value */ void CYearScheduleOutView::setDirection(DArrowRectangle::ArrowDirection value) { qCDebug(ClientLogger) << "Setting arrow direction to:" << value; //设置箭头方å�‘ this->setArrowDirection(value); //设置内容窗å�£ this->setContent(yearscheduleview); } void CYearScheduleOutView::setTimeFormat(const QString &format) { qCDebug(ClientLogger) << "Setting time format to:" << format << "in CYearScheduleOutView"; yearscheduleview->setTimeFormat(format); } void CYearScheduleOutView::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event) //获å�–当å‰�点击的标签编å�· int currentIndex = yearscheduleview->getPressScheduleIndex(); // qCDebug(ClientLogger) << "Mouse press event in CYearScheduleOutView, index:" << currentIndex; if (currentIndex > -1 && currentIndex < scheduleinfoList.size()) { if (currentIndex > 3 && list_count > DDEYearCalendar::YearScheduleListMaxcount) { qCDebug(ClientLogger) << "Clicked on '...' item, switching to week view for date:" << currentdate.toString(); emit signalsViewSelectDate(currentdate); this->hide(); //跳转到周视图 } else { //如果日程类型ä¸�为节å�‡æ—¥æˆ–纪念日则显示编辑框 if (!CScheduleOperation::isFestival(scheduleinfoList.at(currentIndex))) { qCDebug(ClientLogger) << "Opening schedule dialog for schedule:" << scheduleinfoList.at(currentIndex)->summary(); //因为æ��示框会消失,所以设置CScheduleDlg的父类为主窗å�£ CScheduleDlg dlg(0, qobject_cast(this->parent())); dlg.setData(scheduleinfoList.at(currentIndex)); dlg.exec(); } } } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/yearscheduleview.h000066400000000000000000000100311523260663500324740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2017 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef YEARSCHEDULEVIEW_H #define YEARSCHEDULEVIEW_H #include "dschedule.h" #include #include DWIDGET_USE_NAMESPACE class CYearScheduleOutView; class CYearScheduleView : public DWidget { Q_OBJECT public: /** * @brief CYearScheduleView 构造函数 * @param parent 父类 */ explicit CYearScheduleView(QWidget *parent = nullptr); /** * @brief ~CYearScheduleView æž�构函数 */ ~CYearScheduleView() override; /** * @brief setData 设置日程信æ�¯ï¼Œå¹¶å…¨å¤©æ—¥ç¨‹ç½®äºŽé�žå…¨å¤©æ—¥ç¨‹ä¹‹å‰� * @param vListData 日程信æ�¯ */ void setData(DSchedule::List &vListData); /** * @brief getlistdate 获å�–日程信æ�¯ * @return 日程信æ�¯ */ DSchedule::List getlistdate() { return m_vlistData; } /** * @brief clearData 清除日程信æ�¯ */ void clearData(); /** * @brief showWindow 设置日程浮框的大å°� * @return 日程浮框的宽度 */ void showWindow(); /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹è®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void setTheMe(int type = 0); /** * @brief setCurrentDate 设置日程所在当天的日期 * @param cDate 日期 */ void setCurrentDate(const QDate &cdate); /** * @brief getCurrentDate 获å�–日程所在当天的日期 * @return 日期 */ QDate getCurrentDate(); void setTimeFormat(const QString &format = "h:mm"); //判断点击ä½�置是å�¦åŒ…å�«å¯¹åº”的日程信æ�¯ int getPressScheduleIndex(); private: /** * @brief updateDateShow 调整最多展示日程为五个,并设置浮框大å°� */ void updateDateShow(); protected: /** * @brief paintEvent 绘制日程 * @param event 绘图事件 */ void paintEvent(QPaintEvent *event) override; /** * @brief paintItem 绘制日程 * @param info 日程信æ�¯ * @param index 日程的索引 */ void paintItem(QPainter &painter, DSchedule::Ptr info, int index); /** * @brief paintItem */ void paintItem(QPainter &painter); private: DSchedule::List m_vlistData; QDate m_currentDate; QColor m_btimecolor = "#526A7F"; QColor m_btTextColor = "#414D68"; QFont m_textfont; QFont m_timefont; QString m_timeFormat = "h:mm"; QVector m_drawRect; }; class CYearScheduleOutView : public DArrowRectangle { Q_OBJECT public: /** * @brief CYearScheduleOutView 构造函数 * @param parent 父类 */ explicit CYearScheduleOutView(QWidget *parent = nullptr); /** * @brief setData 设置日程信æ�¯ * @param vListData 日程信æ�¯ */ void setData(DSchedule::List &vListData); /** * @brief clearData 清楚数æ�® */ void clearData(); /** * @brief setTheMe 设置系统主题颜色 * @param type 系统主题 */ void setTheMe(int type = 0); /** * @brief setCurrentDate 设置日程所在当天的日期 * @param cDate 日期 */ void setCurrentDate(const QDate &cDate); //设置箭头方å�‘ void setDirection(ArrowDirection value); void setTimeFormat(const QString &format); signals: /** * @brief signalsViewSelectDate 跳转视图信å�· * @param date 当天的时间 */ void signalsViewSelectDate(QDate date, const int pressType = 3); /** * @brief signalupdateschedule 更新日程信æ�¯çš„ä¿¡å�· */ void signalupdateschedule(); private: CYearScheduleView *yearscheduleview = nullptr; DSchedule::List scheduleinfoList; QDate currentdate; int list_count = 0; protected: /** * @brief mousePressEvent é¼ æ ‡å�•击事件,å�•击é�žèŠ‚æ—¥æ—¥ç¨‹è¿›è¡Œç¼–è¾‘ï¼Œå�•击"..."区域跳转到周视图。 * @param event 鼠标事件 */ void mousePressEvent(QMouseEvent *event) override; }; #endif // YEARSCHEDULEVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/yearview.cpp000066400000000000000000000174471523260663500313340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "yearview.h" #include "constants.h" #include "configsettings.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE CYearView::CYearView(QWidget *parent) : CustomFrame(parent) { // qCDebug(ClientLogger) << "CYearView constructed"; //设置焦点类型 setFocusPolicy(Qt::FocusPolicy::TabFocus); setMouseTracking(true); //add separator line m_currentMouth = new CustomFrame(); m_currentMouth->setObjectName("currentMouth"); m_currentMouth->setFixedHeight(24); m_currentMouth->setContentsMargins(0, 0, 0, 0); m_currentMouth->setTextAlign(Qt::AlignLeft); m_momthFont.setWeight(QFont::Medium); m_momthFont.setPixelSize(DDECalendar::FontSizeSixteen); m_currentMouth->setTextFont(m_momthFont); QHBoxLayout *separatorLineLayout = new QHBoxLayout; separatorLineLayout->setContentsMargins(0, 0, 0, 0); separatorLineLayout->setSpacing(0); separatorLineLayout->setContentsMargins(0, 0, 0, 0); separatorLineLayout->addWidget(m_currentMouth); separatorLineLayout->addStretch(); m_currentMouth->installEventFilter(this); m_weekWidget = new CWeekWidget(this); // m_weekWidget->setMinimumHeight(20); m_monthView = new MonthBrefWidget(this); connect(m_monthView, &MonthBrefWidget::signalPressDate, this, &CYearView::slotPressClickDate); connect(m_monthView, &MonthBrefWidget::signalDoubleClickDate, this, &CYearView::slotDoubleClickDate); m_hhLayout = new QVBoxLayout; m_hhLayout->addLayout(separatorLineLayout); m_hhLayout->addWidget(m_weekWidget, 1); m_hhLayout->addWidget(m_monthView, 6); m_hhLayout->setContentsMargins(0, 0, 0, 0); m_hhLayout->setSpacing(0); m_hhLayout->setContentsMargins(13, 10, 10, 10); setLayout(m_hhLayout); } /** * @brief slotDoubleClickDate éš�è—�日程浮框,并å�‘出鼠标å�Œå‡»çš„ä¿¡å�· * @param date 传递时间å�‚æ•° */ void CYearView::slotDoubleClickDate(const QDate &date) { qCDebug(ClientLogger) << "Double click on date:" << date.toString(); emit signalMousePress(date, 1); } /** * @brief slotPressClickDate é¼ æ ‡å�•击日期,显示日程浮框 * @param date 传递日程å�‚æ•° */ void CYearView::slotPressClickDate(const QDate &date) { qCDebug(ClientLogger) << "Press click on date:" << date.toString(); emit signalMousePress(date, 0); } /** * @brief setTheMe æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹ï¼Œè®¾ç½®é¢œè‰² * @param type 系统主题类型 */ void CYearView::setTheMe(int type) { // qCDebug(ClientLogger) << "Setting theme to type:" << type; m_themetype = type; if (type == 0 || type == 1) { m_bnormalColor = Qt::white; m_currentMouth->setTextColor(QColor("#CF0059")); } else if (type == 2) { m_bnormalColor = "#FFFFFF"; m_bnormalColor.setAlphaF(0.05); m_currentMouth->setTextColor(QColor("#BF1D63")); } QColor monthcolor = Qt::white; monthcolor.setAlphaF(0); m_currentMouth->setBColor(monthcolor); } void CYearView::setShowMonthDate(const QDate &showMonth) { qCDebug(ClientLogger) << "Setting show month date to:" << showMonth.toString(); m_showMonthDate = QDate(showMonth.year(), showMonth.month(), 1); m_currentMouth->setTextStr(QLocale::system().monthName(m_showMonthDate.month(), QLocale::ShortFormat)); m_monthView->setShowMonthDate(m_showMonthDate); } //获å�–显示的月 QDate CYearView::getShowMonthDate() { return m_showMonthDate; } /** * @brief CYearView::setHasScheduleSet * @param hasScheduleSet * 设置å�«æœ‰æ—¥ç¨‹çš„集å�ˆ */ void CYearView::setHasScheduleSet(const QSet &hasScheduleSet) { qCDebug(ClientLogger) << "Setting has schedule set with" << hasScheduleSet.size() << "dates"; m_monthView->setHasScheduleDateSet(hasScheduleSet); } void CYearView::setHasSearchScheduleSet(const QSet &hasScheduleSet) { // qCDebug(ClientLogger) << "Setting has search schedule set with" << hasScheduleSet.size() << "dates"; m_monthView->setHasSearchScheduleSet(hasScheduleSet); } /** * @brief CYearView::getStartAndStopDate 获å�–这个月开始结æ�Ÿæ—¶é—´ * @param startDate * @param stopDate * @return */ bool CYearView::getStartAndStopDate(QDate &startDate, QDate &stopDate) { startDate = m_showMonthDate; stopDate = m_showMonthDate.addMonths(1); stopDate = stopDate.addDays(-1); qCDebug(ClientLogger) << "Getting start and stop date:" << startDate.toString() << "to" << stopDate.toString(); return true; } /** * @brief eventFilter 过滤器,å�Œå‡»å¹´è§†å›¾ä¸‹çš„æœˆä»½è·³è½¬åˆ°æœˆè§†å›¾ã€‚ * @param o 事件对象 * @param e 事件类型 * @return false */ bool CYearView::eventFilter(QObject *o, QEvent *e) { // qCDebug(ClientLogger) << "Event filter received for object:" << o->objectName() << "with event type:" << e->type(); QWidget *cell = qobject_cast(o); if (cell == m_currentMouth) { if (e->type() == QEvent::MouseButtonDblClick) { qCDebug(ClientLogger) << "Double click on month header, switching to month view for:" << m_showMonthDate.toString(); emit signalMousePress(m_showMonthDate, 2); } } return false; } /** * @brief resizeEvent 更新月份框的高度 * @param event 窗å�£å¤§å°�调整事件 */ void CYearView::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "Resize event with size:" << event->size(); int leftmagin = qFloor(width() * 0.06435 + 0.5); int rightmagin = leftmagin; int topmagin = qFloor(height() * 0.02955 + 0.5); int buttonmagin = qFloor(height() * 0.044 + 0.5); m_hhLayout->setContentsMargins(leftmagin, topmagin, rightmagin, buttonmagin); m_momthFont.setPixelSize(qFloor(16 + (height() - 159) / 16.75)); m_currentMouth->setTextFont(m_momthFont); m_currentMouth->setFixedHeight(24 + (height() - 159) / 12); m_currentMouth->update(); QFrame::resizeEvent(event); } /** * @brief paintEvent 绘制æ¯�个月的背景 * @param e 绘图事件 */ void CYearView::paintEvent(QPaintEvent *e) { // qCDebug(ClientLogger) << "Paint event received"; Q_UNUSED(e); int labelwidth = width() - 2 * m_borderframew; int labelheight = height() - 2 * m_borderframew; QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; painter.setBrush(QBrush(m_bnormalColor)); painter.setPen(Qt::NoPen); QPainterPath painterPath; painterPath.moveTo(m_radius, m_borderframew); painterPath.arcTo(QRect(m_borderframew, m_borderframew, m_radius * 2, m_radius * 2), 90, 90); painterPath.lineTo(0, labelheight - m_radius); painterPath.arcTo(QRect(m_borderframew, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 180, 90); painterPath.lineTo(labelwidth - m_radius, labelheight); painterPath.arcTo(QRect(labelwidth - m_radius * 2, labelheight - m_radius * 2, m_radius * 2, m_radius * 2), 270, 90); painterPath.lineTo(labelwidth, m_radius); painterPath.arcTo(QRect(labelwidth - m_radius * 2, m_borderframew, m_radius * 2, m_radius * 2), 0, 90); painterPath.lineTo(m_radius, m_borderframew); painterPath.closeSubpath(); painter.drawPath(painterPath); if (hasFocus()) { // qCDebug(ClientLogger) << "Has focus, drawing focus"; //有焦点,绘制焦点 QStyleOptionFocusRect option; option.initFrom(this); option.backgroundColor = palette().color(QPalette::Window); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &option, &painter, this); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/yearview.h000066400000000000000000000050671523260663500307740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef YEARVIEW_H #define YEARVIEW_H #include "customframe.h" #include "monthbrefwidget.h" #include "scheduledatamanage.h" #include "cweekwidget.h" #include #include #include #include #include DWIDGET_USE_NAMESPACE class CYearMonthView; class CYearView: public CustomFrame { Q_OBJECT public: explicit CYearView(QWidget *parent = nullptr); //æ ¹æ�®ç³»ç»Ÿä¸»é¢˜ç±»åž‹ï¼Œè®¾ç½®é¢œè‰² void setTheMe(int type = 0); //设置显示的月 void setShowMonthDate(const QDate &showMonth); //获å�–显示的月 QDate getShowMonthDate(); //设置å�«æœ‰æ—¥ç¨‹çš„æ—¥æœŸé›†å�ˆ void setHasScheduleSet(const QSet &hasScheduleSet); //设置å�«æœ‰æ�œç´¢æ—¥ç¨‹çš„æ—¥æœŸé›†å�ˆ void setHasSearchScheduleSet(const QSet &hasScheduleSet); //获å�–这个月开始结æ�Ÿæ—¶é—´ bool getStartAndStopDate(QDate &startDate, QDate &stopDate); signals: /** * @brief signalMousePress 鼠标点击事件触å�‘ä¿¡å�· * @param selectDate 选择时间 * @param pressType 触å�‘事件类型 * 0:点击时间 1:å�Œå‡»æ—¶é—´ 2: å�Œå‡»æœˆ */ void signalMousePress(const QDate &selectDate, const int pressType = 0); public slots: void slotDoubleClickDate(const QDate &date); //é¼ æ ‡å�•击日期,显示日程浮框 void slotPressClickDate(const QDate &date); protected: //过滤器,å�Œå‡»å¹´è§†å›¾ä¸‹çš„æœˆä»½è·³è½¬åˆ°æœˆè§†å›¾ã€‚ bool eventFilter(QObject *o, QEvent *e) override; //更新月份框的高度 void resizeEvent(QResizeEvent *event) override; //绘制æ¯�个月的背景 void paintEvent(QPaintEvent *e) override; private: CustomFrame *m_currentMouth = nullptr; QVector m_days{}; QDate m_showMonthDate; QFont m_momthFont; QColor m_currentDayTextColor = "#2ca7f8"; QColor m_weekendsTextColor = Qt::black; QColor m_festivalTextColor = Qt::black; QColor m_cellBackgroundColor = "#FFFFFF" ; QVBoxLayout *m_hhLayout = nullptr; int m_themetype = 1; QColor m_bnormalColor = "#FFFFFF"; const int m_radius = 8; const int m_borderframew = 0; MonthBrefWidget *m_monthView = nullptr; CWeekWidget *m_weekWidget = nullptr; //周显示区域 }; #endif // YEARVIEW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/yearwindow.cpp000066400000000000000000001100421523260663500316520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "yearwindow.h" #include "yearview.h" #include "constants.h" #include "schedulesearchview.h" #include "yearscheduleview.h" #include "calendarglobalenv.h" #include "commondef.h" #include #include #include #include #include DGUI_USE_NAMESPACE CYearWindow::CYearWindow(QWidget *parent) : CScheduleBaseWidget(parent) { qCDebug(ClientLogger) << "CYearWindow constructed"; initUI(); initConnection(); setContentsMargins(0, 0, 0, 0); //设置接å�—触摸事件 this->setAttribute(Qt::WA_AcceptTouchEvents); //截获相应的gesture手势 grabGesture(Qt::TapGesture); grabGesture(Qt::TapAndHoldGesture); grabGesture(Qt::PanGesture); QTimer::singleShot(0, this, &CYearWindow::setYearData); } CYearWindow::~CYearWindow() { qCDebug(ClientLogger) << "CYearWindow destroyed"; } /** * @brief eventFilter 过滤器,过滤返回今天的按钮事件 * @param watched 事件对象 * @param event 事件类型 * @return false */ bool CYearWindow::eventFilter(QObject *watched, QEvent *event) { // qCDebug(ClientLogger) << "Event filter received for object:" << watched->objectName() << "with event type:" << event->type(); if (watched == m_today) { if (event->type() == QEvent::MouseButtonPress) { qCDebug(ClientLogger) << "Today button pressed"; slottoday(); } if (event->type() == QEvent::KeyPress) { //点击 回车键 返回今天 QKeyEvent *key = dynamic_cast(event); if (key->key() == Qt::Key_Return) { //返回今天 qCDebug(ClientLogger) << "Return key pressed on today button"; slottoday(); } } } else if (watched == m_yearWidget) { //上下键切æ�¢å¹´ä»½ if (event->type() == QEvent::KeyPress) { QKeyEvent *key = dynamic_cast(event); if (key->key() == Qt::Key_Up) { //上一年 qCDebug(ClientLogger) << "Up key pressed on year widget, switching to previous year"; slotprev(); } else if (key->key() == Qt::Key_Down) { //下一年 qCDebug(ClientLogger) << "Down key pressed on year widget, switching to next year"; slotnext(); } } } return QWidget::eventFilter(watched, event); } /** * @brief mousePressEvent é¼ æ ‡å�•击事件,å�•击日期区域外,éš�è—�日程浮框 * @param event 鼠标事件 */ void CYearWindow::mousePressEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Mouse press event received"; if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸点击则记录开始å��æ ‡ // qCDebug(ClientLogger) << "Touch press detected at:" << event->pos(); m_touchBeginPoint = event->pos(); } QWidget::mousePressEvent(event); } /** * @brief resizeEvent 窗å�£å¤§å°�调整事件,æ�œç´¢æ—¶ï¼Œè°ƒæ•´è¾¹æ¡†å¤§å°� * @param event 窗å�£å¤§å°�调整事件 */ void CYearWindow::resizeEvent(QResizeEvent *event) { // qCDebug(ClientLogger) << "Year window resize event with size:" << event->size(); Q_UNUSED(event); m_topWidget->setGeometry(0, 0, this->width(), DDEMonthCalendar::M_YTopHeight); } void CYearWindow::mouseMoveEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Mouse move event received"; if (event->source() == Qt::MouseEventSynthesizedByQt) { // qCDebug(ClientLogger) << "Touch move detected at:" << event->pos(); return; } QWidget::mouseMoveEvent(event); } void CYearWindow::mouseReleaseEvent(QMouseEvent *event) { // qCDebug(ClientLogger) << "Mouse release event received"; if (event->source() == Qt::MouseEventSynthesizedByQt) { //如果为触摸移动状æ€� if (m_touchState == 2) { //获å�–å�œæ­¢ä½�ç½® QPointF stopPoint = event->pos(); qCDebug(ClientLogger) << "Touch release detected at:" << stopPoint << "with touch state:" << m_touchState; //计算出移动状æ€� TouchGestureData touchGData = calculateAzimuthAngle(m_touchBeginPoint, stopPoint); //如果方å�‘为上下则切æ�¢å¹´ä»½ switch (touchGData.movingDirection) { case TouchGestureData::T_TOP: { qCDebug(ClientLogger) << "Touch gesture detected: swipe up, switching to next year"; slotnext(); break; } case TouchGestureData::T_BOTTOM: { qCDebug(ClientLogger) << "Touch gesture detected: swipe down, switching to previous year"; slotprev(); break; } default: break; } } m_touchState = 0; } } bool CYearWindow::event(QEvent *e) { // qCDebug(ClientLogger) << "Event received with type:" << e->type(); if (e->type() == QEvent::Gesture) return gestureEvent(dynamic_cast(e)); return QWidget::event(e); } /** * @brief gestureEvent 触摸手势处ç�† * @param event 手势事件 * @return */ bool CYearWindow::gestureEvent(QGestureEvent *event) { qCDebug(ClientLogger) << "Gesture event received"; if (QGesture *tap = event->gesture(Qt::TapGesture)) tapGestureTriggered(dynamic_cast(tap)); if (QGesture *pan = event->gesture(Qt::PanGesture)) panTriggered(dynamic_cast(pan)); return true; } /** * @brief tapGestureTriggered 轻切手势处ç�† * @param tap 轻切手势事件 */ void CYearWindow::tapGestureTriggered(QTapGesture *tap) { qCDebug(ClientLogger) << "Tap gesture triggered with state:" << tap->state(); switch (tap->state()) { case Qt::NoGesture: { qCDebug(ClientLogger) << "Tap gesture no gesture"; break; } case Qt::GestureStarted: { qCDebug(ClientLogger) << "Tap gesture started"; m_touchState = 1; break; } case Qt::GestureUpdated: { qCDebug(ClientLogger) << "Tap gesture updated"; m_touchState = 2; break; } case Qt::GestureFinished: { qCDebug(ClientLogger) << "Tap gesture finished"; break; } default: { //GestureCanceled } } } /** * @brief panTriggered 多指滑动手势处ç�† * @param pan 多指滑动手势 */ void CYearWindow::panTriggered(QPanGesture *pan) { qCDebug(ClientLogger) << "Pan gesture triggered with state:" << pan->state(); switch (pan->state()) { case Qt::GestureFinished: { QPointF zeroPoint(0, 0); QPointF offset = pan->offset(); TouchGestureData touchGData = calculateAzimuthAngle(zeroPoint, offset); switch (touchGData.movingDirection) { case TouchGestureData::T_TOP: { qCDebug(ClientLogger) << "Pan gesture detected: upward movement, switching to next year"; slotnext(); break; } case TouchGestureData::T_BOTTOM: { qCDebug(ClientLogger) << "Pan gesture detected: downward movement, switching to previous year"; slotprev(); break; } default: break; } break; } default: //GestureCanceled break; } } /** * @brief calculateAzimuthAngle 计算方ä½�è§’ * @param startPoint èµ·å§‹å��æ ‡ * @param stopPoint 结æ�Ÿå��æ ‡ * @return 触摸手势数æ�® */ TouchGestureData CYearWindow::calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint) { qCDebug(ClientLogger) << "Calculating azimuth angle from:" << startPoint << "to:" << stopPoint; TouchGestureData _result{}; qreal angle = 0.0000; qreal dx = stopPoint.rx() - startPoint.rx(); qreal dy = stopPoint.ry() - startPoint.ry(); //计算方ä½�è§’ angle = qAtan2(dy, dx) * 180 / M_PI; qreal line = qSqrt(dx * dx + dy * dy); //如果移动è·�离大于10则有效 if (line > 10) { if ((angle <= -45) && (angle >= -135)) { _result.movingDirection = TouchGestureData::T_TOP; } else if ((angle > -45) && (angle < 45)) { _result.movingDirection = TouchGestureData::T_RIGHT; } else if ((angle >= 45) && (angle <= 135)) { _result.movingDirection = TouchGestureData::T_BOTTOM; } else { _result.movingDirection = TouchGestureData::T_LEFT; } } _result.angle = angle; _result.length = line; return _result; } /** * @brief initUI åˆ�始化年视图的界é�¢æ˜¾ç¤º */ void CYearWindow::initUI() { qCDebug(ClientLogger) << "Initializing UI for CYearWindow"; m_today = new LabelWidget(this); m_today->setObjectName("yearToDay"); m_today->setAccessibleName("yearToDay"); m_today->installEventFilter(this); QFont todayfont; todayfont.setPixelSize(DDECalendar::FontSizeSixteen); m_today->setFont(todayfont); m_today->setAlignment(Qt::AlignCenter); m_today->setText(QCoreApplication::translate("today", "Today", "Today")); m_today->setFixedWidth(88); m_today->setAutoFillBackground(true); m_today->setFixedHeight(DDEYearCalendar::Y_MLabelHeight - 4); m_prevButton = new DIconButton(DStyle::SP_ArrowLeft, this); //设置对象å��称和辅助显示å��ç§° m_prevButton->setObjectName("PrevButton"); m_prevButton->setAccessibleName("PrevButton"); m_prevButton->setFixedWidth(DDEYearCalendar::Y_MLabelHeight); m_prevButton->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_nextButton = new DIconButton(DStyle::SP_ArrowRight, this); //设置对象å��称和辅助显示å��ç§° m_nextButton->setObjectName("NextButton"); m_nextButton->setAccessibleName("NextButton"); m_nextButton->setFixedWidth(DDEYearCalendar::Y_MLabelHeight); m_nextButton->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_yearLabel = new QLabel(this); m_yearLabel->setFixedHeight(DDEYearCalendar::Y_YLabelHeight); QFont t_labelF; t_labelF.setWeight(QFont::Medium); t_labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_yearLabel->setFont(t_labelF); DPalette pa = m_yearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_yearLabel->setPalette(pa); m_yearLunarLabel = new QLabel(this); m_yearLunarLabel->setFixedSize(DDEMonthCalendar::M_YLunaLabelWindth, DDEMonthCalendar::M_YLunaLabelHeight); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_yearLunarLabel->setFont(yLabelF); DPalette LunaPa = m_yearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_yearLunarLabel->setPalette(LunaPa); m_yearLunarDayLabel = new QLabel(this); m_yearLunarDayLabel->setFixedSize(108, DDEMonthCalendar::M_YLunaLabelHeight); m_yearLunarDayLabel->setFont(yLabelF); m_yearLunarDayLabel->setPalette(LunaPa); m_yearLunarDayLabel->setAlignment(Qt::AlignRight); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setContentsMargins(0, 0, 0, 0); yeartitleLayout->setSpacing(0); yeartitleLayout->addSpacing(10); yeartitleLayout->addWidget(m_yearLabel); yeartitleLayout->addWidget(m_dialogIconButton); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setContentsMargins(0, 0, 0, 0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->addWidget(m_yearLunarLabel); yeartitleLayout1->addStretch(); yeartitleLayout1->addWidget(m_yearLunarDayLabel, 0, Qt::AlignVCenter); m_todayFrame = new CustomFrame(this); m_todayFrame->setContentsMargins(0, 0, 0, 0); m_todayFrame->setRoundState(true, true, true, true); m_todayFrame->setBColor(Qt::white); m_todayFrame->setFixedHeight(DDEYearCalendar::Y_MLabelHeight); m_todayFrame->setboreder(1); QHBoxLayout *todaylayout = new QHBoxLayout; todaylayout->setContentsMargins(0, 0, 0, 0); todaylayout->setSpacing(0); //设置tab选中顺åº� setTabOrder(m_prevButton, m_today); setTabOrder(m_today, m_nextButton); todaylayout->addWidget(m_prevButton); todaylayout->addWidget(m_today, 0, Qt::AlignCenter); todaylayout->addWidget(m_nextButton); m_todayFrame->setLayout(todaylayout); yeartitleLayout1->addSpacing(10); yeartitleLayout1->addWidget(m_todayFrame); yeartitleLayout->addSpacing(6); yeartitleLayout->addLayout(yeartitleLayout1); m_firstYearWidget = new YearFrame(); m_secondYearWidget = new YearFrame(); //设置过滤事件 m_firstYearWidget->installEventFilter(this); m_secondYearWidget->installEventFilter(this); m_StackedWidget = new AnimationStackedWidget(AnimationStackedWidget::TB); m_StackedWidget->addWidget(m_firstYearWidget); m_StackedWidget->addWidget(m_secondYearWidget); m_StackedWidget->setContentsMargins(0, 0, 0, 0); m_StackedWidget->setDuration(600); m_StackedWidget->setFrameShape(QFrame::NoFrame); m_StackedWidget->setFrameShadow(QFrame::Plain); m_yearWidget = qobject_cast(m_StackedWidget->widget(0)); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setContentsMargins(0, 0, 0, 0); hhLayout->setSpacing(0); hhLayout->setContentsMargins(0, 0, 0, 0); hhLayout->addWidget(m_StackedWidget); m_tMainLayout = new QVBoxLayout; m_tMainLayout->setContentsMargins(0, 0, 0, 0); m_tMainLayout->setSpacing(0); m_tMainLayout->setContentsMargins(0, 0, 0, 0); m_tMainLayout->addLayout(hhLayout); this->setLayout(m_tMainLayout); m_topWidget = new DWidget(this); m_topWidget->setLayout(yeartitleLayout); m_scheduleView = new CYearScheduleOutView(this); qCDebug(ClientLogger) << "UI initialization completed for CYearWindow"; } /** * @brief initConnection åˆ�始化信å�·å’Œæ§½çš„连接 */ void CYearWindow::initConnection() { qCDebug(ClientLogger) << "Initializing connections for CYearWindow"; connect(m_prevButton, &DIconButton::clicked, this, &CYearWindow::slotprev); connect(m_nextButton, &DIconButton::clicked, this, &CYearWindow::slotnext); connect(m_StackedWidget, &AnimationStackedWidget::signalIsFinished, this, &CYearWindow::setYearData); connect(m_firstYearWidget, &YearFrame::signalMousePress, this, &CYearWindow::slotMousePress); connect(m_secondYearWidget, &YearFrame::signalMousePress, this, &CYearWindow::slotMousePress); connect(m_scheduleView, &CYearScheduleOutView::signalsViewSelectDate, this, &CYearWindow::slotMousePress); connect(gLunarManager, &LunarManager::huangLiDayReady, this, &CYearWindow::onLunarInfoReady); } /** * @brief setTheMe 设置系统主题 * @param type 主题类型 */ void CYearWindow::setTheMe(int type) { // qCDebug(ClientLogger) << "Setting theme to type:" << type; if (type == 0 || type == 1) { // qCDebug(ClientLogger) << "Setting theme to light"; DPalette todayPa = m_today->palette(); todayPa.setColor(DPalette::WindowText, QColor("#000000")); todayPa.setColor(DPalette::Window, Qt::white); m_today->setPalette(todayPa); m_today->setForegroundRole(DPalette::WindowText); m_today->setBackgroundRole(DPalette::Window); m_todayFrame->setBColor(Qt::white); DPalette pa = m_yearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_yearLabel->setPalette(pa); m_yearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_yearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_yearLunarLabel->setPalette(LunaPa); m_yearLunarLabel->setForegroundRole(DPalette::WindowText); m_yearLunarDayLabel->setPalette(LunaPa); m_yearLunarDayLabel->setForegroundRole(DPalette::WindowText); } else if (type == 2) { // qCDebug(ClientLogger) << "Setting theme to dark"; DPalette todayPa = m_today->palette(); todayPa.setColor(DPalette::WindowText, QColor("#C0C6D4")); QColor tbColor = "#414141"; tbColor.setAlphaF(0.0); todayPa.setColor(DPalette::Window, tbColor); m_today->setPalette(todayPa); m_today->setForegroundRole(DPalette::WindowText); m_today->setBackgroundRole(DPalette::Window); QColor tbColor2 = "#414141"; tbColor2.setAlphaF(0.3); m_todayFrame->setBColor(tbColor2); DPalette pa = m_yearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_yearLabel->setPalette(pa); m_yearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_yearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_yearLunarLabel->setPalette(LunaPa); m_yearLunarLabel->setForegroundRole(DPalette::WindowText); m_yearLunarDayLabel->setPalette(LunaPa); m_yearLunarDayLabel->setForegroundRole(DPalette::WindowText); } m_firstYearWidget->setTheMe(type); m_secondYearWidget->setTheMe(type); //设置æ��示框主题类型 m_scheduleView->setTheMe(type); DPalette palette = m_topWidget->palette(); palette.setBrush(DPalette::WindowText, palette.color(DPalette::Window)); m_topWidget->setAutoFillBackground(true); m_topWidget->setPalette(palette); } /** * @brief CYearWindow::setSearchWFlag 设置是å�¦åœ¨è¿›è¡Œæ�œç´¢ * @param flag */ void CYearWindow::setSearchWFlag(bool flag) { // qCDebug(ClientLogger) << "Setting search flag to:" << flag; m_searchFlag = flag; } /** * @brief CYearWindow::updateShowDate 更新显示时间 */ void CYearWindow::updateShowDate(const bool isUpdateBar) { // qCDebug(ClientLogger) << "Updating show date, isUpdateBar:" << isUpdateBar; Q_UNUSED(isUpdateBar); m_scheduleView->setTimeFormat((m_calendarManager->getTimeShowType()?"AP ":"") + m_calendarManager->getTimeFormat()); m_yearWidget->setShowDate(getSelectDate()); } /** * @brief CYearWindow::updateShowScheduleData 更新显示日程数æ�® */ void CYearWindow::updateShowSchedule() { qCDebug(ClientLogger) << "Updating show schedule data"; //获å�–显示日期中是å�¦åŒ…å�«æ—¥ç¨‹ä¿¡æ�¯æ ‡å¿— m_yearWidget->setDateHasScheduleSign(ScheduleManager::getInstace()->getAllScheduleDate()); } /** * @brief CYearWindow::updateShowLunar 更新显示农历信æ�¯ */ void CYearWindow::updateShowLunar() { qCDebug(ClientLogger) << "Updating show lunar information"; // Query lunar data for the current year view range on demand (entire year) if (getShowLunar()) { QDate yearStart(getSelectDate().year(), 1, 1); QDate yearEnd(getSelectDate().year(), 12, 31); gLunarManager->ensureLunarDataLoaded(yearStart, yearEnd); } //获å�–农历信æ�¯ getLunarInfo(); m_yearWidget->setLunarYearDate(m_lunarYear); //如果正在切æ�¢åˆ™é€€å‡º if (m_StackedWidget->IsRunning()) return; setLunarShow(); } /** * @brief CYearWindow::updateSearchScheduleInfo æ›´æ–°æ�œç´¢æ—¥ç¨‹ä¿¡æ�¯ */ void CYearWindow::updateSearchScheduleInfo() { qCDebug(ClientLogger) << "Updating search schedule information"; //获å�–æ�œç´¢æ—¥ç¨‹ä¿¡æ�¯ m_yearWidget->setSearchSchedule(gScheduleManager->getAllSearchedScheduleDate()); } /** * @brief CYearWindow::setSelectSearchScheduleInfo 设置选中æ�œç´¢æ—¥ç¨‹ * @param info */ void CYearWindow::setSelectSearchScheduleInfo(const DSchedule::Ptr &info) { // qCDebug(ClientLogger) << "Setting selected search schedule info:" << (info ? info->uid() : "null"); Q_UNUSED(info); } /** * @brief CYearWindow::slotSetScheduleHide éš�è—�日程æ��示框 */ void CYearWindow::slotSetScheduleHide() { // qCDebug(ClientLogger) << "Hiding schedule view"; m_scheduleView->hide(); } /** * @brief CYearWindow::slotprev 切æ�¢ä¸Šä¸€å¹´ */ void CYearWindow::slotprev() { qCDebug(ClientLogger) << "Switching to previous year"; QDate minYear = getSelectDate(); if (minYear.year() > 1900) { switchYear(-1); } } /** * @brief CYearWindow::slotnext 切æ�¢ä¸‹ä¸€å¹´ */ void CYearWindow::slotnext() { qCDebug(ClientLogger) << "Switching to next year"; QDate maxYear = getSelectDate(); if (maxYear.year() < 2100) { switchYear(1); } } /** * @brief CYearWindow::slottoday 返回当å‰�æ—¶é—´ */ void CYearWindow::slottoday() { qCDebug(ClientLogger) << "Returning to today"; //éš�è—�æ��示 slotSetScheduleHide(); //设置选择时间为当å‰�时间,切æ�¢å¹´ä»½ä¿¡æ�¯ setSelectDate(getCurrendDateTime().date(), true); //æ›´æ–°æ•°æ�® updateData(); setYearData(); } /** * @brief CYearWindow::switchYear æ ¹æ�®å��移值切æ�¢å¹´ä»½ * @param offsetYear å��移值 */ void CYearWindow::switchYear(const int offsetYear) { qCDebug(ClientLogger) << "Switching year with offset:" << offsetYear; slotSetScheduleHide(); //获å�–选择时间 QDate _selectData = getSelectDate(); //如果正在切æ�¢åˆ™é€€å‡º if (m_StackedWidget->IsRunning()) return; _selectData = _selectData.addYears(offsetYear); //获å�–当å‰�显示控件的ä½�ç½® int index = m_StackedWidget->currentIndex(); //当å‰�选中的monthviewçš„index int currentYearViewIndex = qobject_cast(m_StackedWidget->widget(index))->getViewFocusIndex(); index = qAbs(index + offsetYear) % 2; m_yearWidget = qobject_cast(m_StackedWidget->widget(index)); //设置年视图翻页å�Žé€‰ä¸­çš„monthview m_yearWidget->setViewFocus(currentYearViewIndex); //设置显示时间 m_yearWidget->setShowDate(_selectData); updateData(); if (offsetYear > 0) { //下一年 m_StackedWidget->setNext(); } else { //上一年 m_StackedWidget->setPre(); } //切æ�¢è¯•图开始å�Žå†�进行时间切æ�¢ setSelectDate(_selectData); } /** * @brief CYearWindow::setLunarShow 显示农历信æ�¯ */ void CYearWindow::setLunarShow() { qCDebug(ClientLogger) << "Setting lunar show with year:" << m_lunarYear << "day:" << m_lunarDay; m_yearLunarLabel->setText(m_lunarYear); m_yearLunarDayLabel->setText(m_lunarDay); } /** * @brief CYearWindow::setYearData 设置选择时间年 */ void CYearWindow::setYearData() { qCDebug(ClientLogger) << "Setting year data for date:" << getSelectDate().toString(); //如果选择日期为本地时间日期则显示今天,å�¦åˆ™æ˜¾ç¤ºè¿”回当天 if (getSelectDate() == getCurrendDateTime().date()) { m_today->setText(QCoreApplication::translate("today", "Today", "Today")); } else { m_today->setText(QCoreApplication::translate("Return", "Today", "Return")); } //如果是中文环境 if (getShowLunar()) { m_yearLabel->setText(QString::number(getSelectDate().year()) + tr("Y")); gLunarManager->getHuangLiDayAsync(getSelectDate()); } else { m_yearLabel->setText(QString::number(getSelectDate().year())); } } /** * @brief CYearWindow::onLunarInfoReady 异步农历数æ�®è¿”回回调 * @param date 请求的日期 * @param info 返回的农历信æ�¯ */ void CYearWindow::onLunarInfoReady(const QDate &date, const CaHuangLiDayInfo &info) { //å�ªå¤„ç�†å½“å‰�选中日期的数æ�® if (date != getSelectDate()) { return; } //æ›´æ–°æˆ�员å�˜é‡� m_lunarYear = QString("-%0%1å¹´-").arg(info.mGanZhiYear).arg(info.mZodiac); m_lunarDay = QString("-农历%0%1-").arg(info.mLunarMonthName).arg(info.mLunarDayName); //显示农历信æ�¯ setLunarShow(); } /** * @brief CYearWindow::slotMousePress 接收点击日期事件 * @param selectDate 选择的日期 * @param pressType 鼠标点击类型 0:å�•击具体日期 1:å�Œå‡»å…·ä½“日期 2:å�Œå‡»æœˆä»½ 3:æ��示框跳转周视图 */ void CYearWindow::slotMousePress(const QDate &selectDate, const int pressType) { qCDebug(ClientLogger) << "Mouse press on date:" << selectDate.toString() << "with press type:" << pressType; slotSetScheduleHide(); if (!selectDate.isValid()) return; //设置选择时间 setSelectDate(selectDate, this); setYearData(); switch (pressType) { case 0: { // 0:å�•击 qCDebug(ClientLogger) << "Single click, showing schedule view"; DSchedule::List _scheduleInfo {}; //获å�–选择日期的日程信æ�¯ _scheduleInfo = gScheduleManager->getScheduleByDay(selectDate); m_scheduleView->setCurrentDate(selectDate); m_scheduleView->setData(_scheduleInfo); //使用设置的显示å��æ ‡ QVariant variant; CalendarGlobalEnv::getGlobalEnv()->getValueByKey(DDECalendar::CursorPointKey, variant); QPoint pos22 = variant.value(); // 因为将æ��示框从window改为widget,è¦�转æ�¢ä¸ºç›¸å¯¹çª—å�£çš„å��æ ‡ auto rPos = this->mapFromGlobal(pos22); // æ ¹æ�®é¼ æ ‡ä½�置,决定悬浮框显示ä½�ç½® if (rPos.x() < this->width() / 2) { // 显示到å�³ä¾§ qCDebug(ClientLogger) << "Showing schedule view on right side"; m_scheduleView->setDirection(DArrowRectangle::ArrowLeft); m_scheduleView->show(rPos.x()+10, rPos.y()); } else { // 显示到左侧 qCDebug(ClientLogger) << "Showing schedule view on left side"; m_scheduleView->setDirection(DArrowRectangle::ArrowRight); m_scheduleView->show(rPos.x()-10, rPos.y()); } update(); break; } case 1: { // 1:å�Œå‡»æ—¶é—´ qCDebug(ClientLogger) << "Double click on date, switching to day view"; signalSwitchView(); break; } case 2: { // 2: å�Œå‡»æœˆ qCDebug(ClientLogger) << "Double click on month, switching to month view"; signalSwitchView(1); break; } case 3: { // 3: æ��示框跳转周视图 qCDebug(ClientLogger) << "Schedule view action, switching to week view"; signalSwitchView(2); break; } default: break; } } /** * @brief wheelEvent 通过鼠标中间的滚轮滚动切æ�¢å¹´ä»½ï¼Œå¹¶åˆ·æ–°å¹´è§†å›¾ä¸‹çš„æ‰€æœ‰å†…容。 * @param event 鼠标滚轮事件 */ void CYearWindow::wheelEvent(QWheelEvent *event) { // qCDebug(ClientLogger) << "Wheel event with delta y:" << event->angleDelta().y(); //如果为左å�³æ–¹å�‘则退出 if (event->angleDelta().x() != 0 ) { // qCDebug(ClientLogger) << "return from Wheel event with delta x:" << event->angleDelta().x(); return; } if (event->angleDelta().y() < 0) { qCDebug(ClientLogger) << "Wheel event next"; slotnext(); } else { qCDebug(ClientLogger) << "Wheel event prev"; slotprev(); } } YearFrame::YearFrame(DWidget *parent) : QWidget(parent) { // qCDebug(ClientLogger) << "YearFrame constructed"; QGridLayout *gridLayout = new QGridLayout; gridLayout->setContentsMargins(0, 0, 0, 0); gridLayout->setSpacing(8); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { CYearView *view = new CYearView(this); //为æ¯�个monthview设置事件过滤器 view->installEventFilter(this); gridLayout->addWidget(view, i, j); m_monthViewList.append(view); connect(view, &CYearView::signalMousePress, this, &YearFrame::signalMousePress); } } m_YearLabel = new QLabel(this); m_YearLabel->setFixedHeight(DDEYearCalendar::Y_YLabelHeight); QFont t_labelF; t_labelF.setWeight(QFont::Medium); t_labelF.setPixelSize(DDECalendar::FontSizeTwentyfour); m_YearLabel->setFont(t_labelF); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLunarLabel = new QLabel(); m_YearLunarLabel->setFixedSize(DDEMonthCalendar::M_YLunaLabelWindth, DDEMonthCalendar::M_YLunaLabelHeight); QFont yLabelF; yLabelF.setWeight(QFont::Medium); yLabelF.setPixelSize(DDECalendar::FontSizeFourteen); m_YearLunarLabel->setFont(yLabelF); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); QHBoxLayout *yeartitleLayout = new QHBoxLayout; yeartitleLayout->setContentsMargins(0, 0, 0, 0); yeartitleLayout->setSpacing(0); yeartitleLayout->setContentsMargins(11, 12, 8, 10); yeartitleLayout->addWidget(m_YearLabel); QHBoxLayout *yeartitleLayout1 = new QHBoxLayout; yeartitleLayout1->setContentsMargins(0, 0, 0, 0); yeartitleLayout1->setSpacing(0); yeartitleLayout1->setContentsMargins(4, 9, 0, 7); yeartitleLayout1->addWidget(m_YearLunarLabel); yeartitleLayout1->addSpacing(390); yeartitleLayout1->addStretch(); yeartitleLayout1->addSpacing(10); yeartitleLayout->addLayout(yeartitleLayout1); m_topWidget = new DWidget(); m_topWidget->setLayout(yeartitleLayout); m_topWidget->setFixedHeight(DDEMonthCalendar::M_YTopHeight); QVBoxLayout *hhLayout = new QVBoxLayout; hhLayout->setContentsMargins(0, 0, 0, 0); hhLayout->setSpacing(0); hhLayout->addWidget(m_topWidget); hhLayout->addLayout(gridLayout); this->setLayout(hhLayout); } YearFrame::~YearFrame() { qCDebug(ClientLogger) << "YearFrame destroyed"; } /** * @brief YearFrame::setShowDate 设置显示时间 * @param selectDate 选择的时间 * @param showDate 需è¦�显示一年的时间 */ void YearFrame::setShowDate(const QDate &selectDate) { // qCDebug(ClientLogger) << "Setting show date for YearFrame to:" << selectDate.toString(); QDate _showMonth(selectDate.year(), 1, 1); for (int i = 0; i < DDEYearCalendar::FrameSizeOfEveryYear; i++) { QDate _setShowMonth = _showMonth.addMonths(i); m_monthViewList.at(i)->setShowMonthDate(_setShowMonth); } m_selectDate = selectDate; //更新显示界é�¢ update(); //设置年份显示 setYearShow(); } /** * @brief YearFrame::setLunarYearDate 设置阴历年显示 * @param lunar 显示数æ�® */ void YearFrame::setLunarYearDate(const QString &lunar) { qCDebug(ClientLogger) << "Setting lunar year date to:" << lunar; m_YearLunarLabel->setText(lunar); } /** * @brief YearFrame::setDateHasScheduleSign 设置日期是å�¦å­˜åœ¨æ—¥ç¨‹ * @param hasSchedule */ void YearFrame::setDateHasScheduleSign(const QSet &hasSchedule) { qCDebug(ClientLogger) << "Setting date has schedule sign with" << hasSchedule.size() << "dates"; QDate _startDate; QDate _stopDate; QDate _getDate; qint64 _offset = 0; QSet _hasScheduleSet{}; for (int i = 0; i < m_monthViewList.size(); ++i) { //如果时间有效 if (m_monthViewList.at(i)->getStartAndStopDate(_startDate, _stopDate)) { _offset = _startDate.daysTo(_stopDate) + 1; _hasScheduleSet.clear(); for (int j = 0 ; j < _offset; ++j) { _getDate = _startDate.addDays(j); if (hasSchedule.contains(_getDate)) { _hasScheduleSet.insert(_getDate); } } m_monthViewList.at(i)->setHasScheduleSet(_hasScheduleSet); } } } /** * @brief YearFrame::setTheMe 设置ä¸�å�Œä¸»é¢˜é¢œè‰² * @param type */ void YearFrame::setTheMe(int type) { qCDebug(ClientLogger) << "Setting theme for YearFrame to type:" << type; if (type == 0 || type == 1) { qCDebug(ClientLogger) << "Setting theme to light"; DPalette gpa = palette(); gpa.setColor(DPalette::Window, "#F8F8F8"); setPalette(gpa); setBackgroundRole(DPalette::Window); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#3B3B3B")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#8A8A8A")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); } else if (type == 2) { qCDebug(ClientLogger) << "Setting theme to dark"; DPalette gpa = palette(); gpa.setColor(DPalette::Window, "#252525"); setPalette(gpa); setBackgroundRole(DPalette::Window); DPalette pa = m_YearLabel->palette(); pa.setColor(DPalette::WindowText, QColor("#C0C6D4")); m_YearLabel->setPalette(pa); m_YearLabel->setForegroundRole(DPalette::WindowText); DPalette LunaPa = m_YearLunarLabel->palette(); LunaPa.setColor(DPalette::WindowText, QColor("#798BA8")); m_YearLunarLabel->setPalette(LunaPa); m_YearLunarLabel->setForegroundRole(DPalette::WindowText); } for (int i = 0; i < DDEYearCalendar::FrameSizeOfEveryYear; i++) { m_monthViewList.at(i)->setTheMe(type); } } /** * @brief YearFrame::setSearchSchedule 设置æ�œç´¢æ—¥ç¨‹ * @param searchInfo */ void YearFrame::setSearchSchedule(const QSet &hasSchedule) { qCDebug(ClientLogger) << "Setting search schedule with" << hasSchedule.size() << "dates"; QDate _startDate; QDate _stopDate; QDate _getDate; qint64 _offset = 0; QSet _hasSearchScheduleSet{}; for (int i = 0; i < m_monthViewList.size(); ++i) { //如果时间有效 if (m_monthViewList.at(i)->getStartAndStopDate(_startDate, _stopDate)) { _offset = _startDate.daysTo(_stopDate) + 1; _hasSearchScheduleSet.clear(); for (int j = 0 ; j < _offset; ++j) { _getDate = _startDate.addDays(j); if (hasSchedule.contains(_getDate)) { _hasSearchScheduleSet.insert(_getDate); } } m_monthViewList.at(i)->setHasSearchScheduleSet(_hasSearchScheduleSet); } } } /** * @brief YearFrame::setViewFocus 为选中的view设置焦点 * @param index 选中的哪一个view */ void YearFrame::setViewFocus(int index) { qCDebug(ClientLogger) << "Setting view focus to index:" << index; if (index >= 0 && index < m_monthViewList.size()) { //设置选中view的焦点类型 m_monthViewList.at(index)->setFocus(Qt::FocusReason::TabFocusReason); } } /** * @brief YearFrame::getViewFocusIndex 获å�–选中viewçš„index * @return 选中的哪一个view */ int YearFrame::getViewFocusIndex() { // qCDebug(ClientLogger) << "Getting view focus index:" << currentFocusView; return currentFocusView; } /** * @brief YearFrame::setYearShow 设置年信æ�¯æ˜¾ç¤º */ void YearFrame::setYearShow() { qCDebug(ClientLogger) << "Setting year show for year:" << m_selectDate.year(); if (QLocale::system().language() == QLocale::Chinese) { qCDebug(ClientLogger) << "Setting year show for year:" << m_selectDate.year() << "in Chinese"; m_YearLabel->setText(QString::number(m_selectDate.year()) + tr("Y")); m_YearLunarLabel->setText(m_LunarYear); } else { qCDebug(ClientLogger) << "Setting year show for year:" << m_selectDate.year() << "in English"; m_YearLabel->setText(QString::number(m_selectDate.year())); m_YearLunarLabel->setText(""); } } /** * @brief YearFrame::eventFilter 事件过滤器,获å�–选中monthviewçš„index */ bool YearFrame::eventFilter(QObject *watched, QEvent *event) { // qCDebug(ClientLogger) << "Event filter received for object:" << watched->objectName() << "with event type:" << event->type(); //返回当å‰�活动窗å�£ä¸­çš„焦点å°�部件 CYearView *monthview = qobject_cast(QApplication::focusWidget()); //焦点å°�部件是å�¦ä¸º12个月份中的一个 if (m_monthViewList.contains(monthview)) { //焦点å°�部件在list中的index currentFocusView = m_monthViewList.indexOf(monthview); // qCDebug(ClientLogger) << "Focus changed to month view index:" << currentFocusView; } else { // qCDebug(ClientLogger) << "Focus changed to none"; currentFocusView = -1; } return QWidget::eventFilter(watched, event); } linuxdeepin-dde-calendar-f6d670a/src/calendar-client/src/widget/yearWidget/yearwindow.h000066400000000000000000000133501523260663500313230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef YEARWINDOW_H #define YEARWINDOW_H #include "animationstackedwidget.h" #include "cschedulebasewidget.h" #include "labelwidget.h" #include #include #include #include #include #include #include DWIDGET_USE_NAMESPACE class CYearView; class CScheduleSearchView; class YearFrame; class CustomFrame; class CYearScheduleOutView; struct TouchGestureData { enum TouchMovingDirection { T_NONE, //默认状æ€� T_LEFT, //往左 T_TOP, //往上 T_RIGHT, //å¾€å�³ T_BOTTOM //往下 }; //手势移动状æ€� qreal length {0}; //手势移动è·�离 qreal angle{0}; //手势移动角度 TouchMovingDirection movingDirection{T_NONE}; // 手势移动方å�‘ }; class CYearWindow: public CScheduleBaseWidget { Q_OBJECT public: explicit CYearWindow(QWidget *parent = nullptr); ~CYearWindow() override; //åˆ�始化ui界é�¢ void initUI(); //åˆ�始化信å�·å’Œæ§½çš„连接 void initConnection(); //设置系统主题 void setTheMe(int type = 0); //设置是å�¦åœ¨è¿›è¡Œæ�œç´¢ void setSearchWFlag(bool flag); //设置选择时间年 void setYearData() override; //更新显示时间 void updateShowDate(const bool isUpdateBar = true) override; //更新日程显示 void updateShowSchedule() override; //更新显示农历信æ�¯ void updateShowLunar() override; //更新界é�¢æ�œç´¢æ—¥ç¨‹æ˜¾ç¤º void updateSearchScheduleInfo() override; //设置选中æ�œç´¢æ—¥ç¨‹ void setSelectSearchScheduleInfo(const DSchedule::Ptr &info) override; signals: /** * @brief signalsWUpdateShcedule */ void signalsWUpdateShcedule(); /** * @brief signalupdateschedule 更新日程的信å�· */ void signalupdateschedule(); private slots: //切æ�¢ä¸Šä¸€å¹´ void slotprev(); //切æ�¢åˆ°ä¸‹ä¸€å¹´ void slotnext(); //返回到当å‰�æ—¶é—´ void slottoday(); //处ç�†å¼‚步农历数æ�®è¿”回 void onLunarInfoReady(const QDate &date, const CaHuangLiDayInfo &info); public slots: //éš�è—�日程浮框 void slotSetScheduleHide(); //接收鼠标点击 void slotMousePress(const QDate &selectDate, const int pressType); private: //切æ�¢å¹´ä»½ void switchYear(const int offsetYear); //设置显示农历信æ�¯ void setLunarShow(); protected: void wheelEvent(QWheelEvent *event) override; bool eventFilter(QObject *watched, QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void resizeEvent(QResizeEvent *event) override; void mouseMoveEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; bool event(QEvent *e) override; private: //触摸手势处ç�† bool gestureEvent(QGestureEvent *event); //轻切手势处ç�† void tapGestureTriggered(QTapGesture *tap); //多指滑动手势处ç�† void panTriggered(QPanGesture *pan); //计算方ä½�è§’ TouchGestureData calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint); private: DIconButton *m_prevButton = nullptr; DIconButton *m_nextButton = nullptr; LabelWidget *m_today = nullptr; QDate m_currentdate; QLabel *m_yearLabel = nullptr; QLabel *m_yearLunarLabel = nullptr; QLabel *m_yearLunarDayLabel = nullptr; YearFrame *m_yearWidget = nullptr; YearFrame *m_firstYearWidget = nullptr; YearFrame *m_secondYearWidget = nullptr; CustomFrame *m_todayFrame = nullptr; AnimationStackedWidget *m_StackedWidget = nullptr; QVBoxLayout *m_tMainLayout = nullptr; QString m_searchText; bool m_searchFlag = false; DWidget *m_topWidget = nullptr; //触摸开始å��æ ‡ QPointF m_touchBeginPoint; //触摸状æ€� 0:åˆ�始状æ€� 1:点击 2:移动 int m_touchState{0}; CYearScheduleOutView *m_scheduleView {nullptr}; }; class YearFrame : public QWidget { Q_OBJECT public: explicit YearFrame(DWidget *parent = nullptr); ~YearFrame() override; //设置显示时间 void setShowDate(const QDate &selectDate); //设置阴历年显示 void setLunarYearDate(const QString &lunar = ""); //设置日期是å�¦å­˜åœ¨æ—¥ç¨‹ void setDateHasScheduleSign(const QSet &hasSchedule); //设置ä¸�å�Œä¸»é¢˜é¢œè‰² void setTheMe(int type = 0); //设置æ�œç´¢æ—¥ç¨‹ void setSearchSchedule(const QSet &hasSchedule); void setViewFocus(int index); int getViewFocusIndex(); private: //设置年信æ�¯æ˜¾ç¤º void setYearShow(); signals: /** * @brief signalMousePress 鼠标点击事件触å�‘ä¿¡å�· * @param selectDate 选择时间 * @param pressType 触å�‘事件类型 * 0:点击时间 1:å�Œå‡»æ—¶é—´ 2: å�Œå‡»æœˆ */ void signalMousePress(const QDate &selectDate, const int pressType = 0); protected: bool eventFilter(QObject *watched, QEvent *event) override; private: QList m_monthViewList; QLabel *m_YearLabel = nullptr; QLabel *m_YearLunarLabel = nullptr; QDate m_selectDate; bool m_searchFlag = false; bool m_selectFlag = false; QString m_LunarYear; QString m_LunarDay; DWidget *m_topWidget = nullptr; int currentFocusView = -1; }; #endif // YEARWINDOW_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/000077500000000000000000000000001523260663500226145ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-common/CMakeLists.txt000066400000000000000000000021371523260663500253570ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(commondata) find_package(PkgConfig REQUIRED) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core DBus Sql) find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED Core) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # 安全编译å�‚æ•° set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) aux_source_directory(src BASESTRUCT_SRCS) aux_source_directory(src/huangliData BASESTRUCT_SRCS_HUANGLI) aux_source_directory(src/lunarandfestival BASESTRUCT_SRCS_NONGLI) aux_source_directory(src/pinyin BASESTRUCT_SRCS_PINYIN) add_library(${PROJECT_NAME} STATIC ${BASESTRUCT_SRCS} ${BASESTRUCT_SRCS_HUANGLI} ${BASESTRUCT_SRCS_NONGLI} ${BASESTRUCT_SRCS_PINYIN} ) target_include_directories(${PROJECT_NAME} PUBLIC ../../3rdparty/kcalendarcore/src) target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Sql kcalendarcore Dtk${DTK_VERSION_MAJOR}::Core ) linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/000077500000000000000000000000001523260663500234035ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/commondef.h000066400000000000000000000015471523260663500255320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COMMONDEF_H #define COMMONDEF_H #include #include #include // Qt5/Qt6 兼容性å®� #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #define QT_SKIP_EMPTY_PARTS Qt::SkipEmptyParts #else #define QT_SKIP_EMPTY_PARTS QString::SkipEmptyParts #endif const QString CalendarServiceName = "com.deepin.dataserver.Calendar"; const QString CalendarPath = "/com/deepin/dataserver/Calendar"; const QLoggingCategory CommonLogger("org.deepin.dde.calendar"); const QLoggingCategory ClientLogger("org.deepin.dde.calendar.client"); const QLoggingCategory ServiceLogger("org.deepin.dde.calendar.service"); const QLoggingCategory PluginLogger("org.deepin.dde.calendar.plugin"); #endif // COMMONDEF_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/compatibledata.cpp000066400000000000000000000221631523260663500270640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "compatibledata.h" #include "units.h" #include "icalformat.h" #include "commondef.h" #include #include #include #include #include #include const QMap mTypeMap {{1, "107c369e-b13a-4d45-9ff3-de4eb3c0475b"}, {2, "24cf3ae3-541d-487f-83df-f068416b56b6"}, {3, "403bf009-2005-4679-9c76-e73d9f83a8b4"}}; /** * @brief JobToObject å°†Job转æ�¢æˆ�QJsonObject * @param job Job结构体 * @return QJsonObject */ QJsonObject JobToObject(const DSchedule::Ptr &job) { // qCDebug(CommonLogger) << "JobToObject, job summary:" << (job ? job->summary() : "null"); QJsonObject obj; obj.insert("ID", job->compatibleID()); obj.insert("Type", DDE_Calendar::getOldTypeIDByNewTypeID(job->scheduleTypeID())); obj.insert("Title", job->summary()); obj.insert("Description", job->description()); obj.insert("AllDay", job->allDay()); obj.insert("Start", dtToString(job->dtStart())); obj.insert("End", dtToString(job->dtEnd())); obj.insert("RRule", job->recurrence()->defaultRRule()->rrule()); obj.insert("Remind", DDE_Calendar::getOldRemindByAlarm(job->getAlarmType())); //å°†QString类型转æ�¢ä¸ºQJsonArray类型,方便å‰�端解æž� QJsonArray _ignoreJsonArray; for (int i = 0; i < job->recurrence()->exDateTimes().count(); i++) { _ignoreJsonArray.append(dtToString(job->recurrence()->exDateTimes().at(i))); } obj.insert("Ignore", _ignoreJsonArray); //TODO: obj.insert("RecurID", 0); return obj; } QString DDE_Calendar::getNewTypeIDByOldTypeID(int oldTypeID) { qCDebug(CommonLogger) << "DDE_Calendar::getNewTypeIDByOldTypeID, oldTypeID:" << oldTypeID; if (mTypeMap.contains(oldTypeID)) { return mTypeMap.value(oldTypeID); } else { qCWarning(CommonLogger) << "Old type ID not found, returning default"; return mTypeMap.value(3); } } int DDE_Calendar::getOldTypeIDByNewTypeID(const QString &newTypeID) { qCDebug(CommonLogger) << "DDE_Calendar::getOldTypeIDByNewTypeID, newTypeID:" << newTypeID; int oldTypeID = 0; QMap::const_iterator constIter = mTypeMap.constBegin(); for (; constIter != mTypeMap.constEnd(); ++constIter) { if (constIter.value() == newTypeID) { oldTypeID = constIter.key(); break; } } qCDebug(CommonLogger) << "DDE_Calendar::getOldTypeIDByNewTypeID, oldTypeID:" << oldTypeID; return oldTypeID == 0 ? 3 : oldTypeID; } QString DDE_Calendar::getExternalSchedule(const DSchedule::Map &scheduleMap) { qCDebug(CommonLogger) << "DDE_Calendar::getExternalSchedule, map size:" << scheduleMap.size(); QString strJson; QJsonDocument doc; QJsonArray jsonarr; DSchedule::Map::const_iterator constIter = scheduleMap.constBegin(); for (; constIter != scheduleMap.constEnd(); ++constIter) { QJsonObject obj; QJsonArray jobsJsonArr; QJsonObject objjob; obj.insert("Date", constIter.key().toString("yyyy-MM-dd")); foreach (DSchedule::Ptr schedule, constIter.value()) { objjob = JobToObject(schedule); jobsJsonArr.append(objjob); } obj.insert("Jobs", jobsJsonArr); jsonarr.append(obj); } doc.setArray(jsonarr); strJson = QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return strJson; } void DDE_Calendar::setAlarmByOldRemind(const DSchedule::Ptr &schedule, const QString &remind) { qCDebug(CommonLogger) << "DDE_Calendar::setAlarmByOldRemind, remind:" << remind; //æ��醒规则 QStringList strList = remind.split(";", QT_SKIP_EMPTY_PARTS); int remindNum = strList.at(0).toInt(); //å°�于0表示ä¸�æ��醒 if (remindNum >= 0) { KCalendarCore::Alarm::Ptr alarm = KCalendarCore::Alarm::Ptr(new KCalendarCore::Alarm(schedule.data())); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); alarm->setDisplayAlarm(schedule->summary()); if (schedule->allDay()) { qCDebug(CommonLogger) << "Setting alarm for all-day event"; //æ��å‰�多少秒 int offset = 0; if (strList.size() > 1) { QTime time = QTime::fromString(strList.at(1), "hh:mm"); offset = time.hour() * 60 * 60 + time.second() * 60; } KCalendarCore::Duration duration(-(24 * 60 * 60 * remindNum - offset)); alarm->setStartOffset(duration); } else { qCDebug(CommonLogger) << "Setting alarm for timed event"; KCalendarCore::Duration duration(-(60 * remindNum)); alarm->setStartOffset(duration); } schedule->addAlarm(alarm); } } QString DDE_Calendar::getOldRemindByAlarm(const DSchedule::AlarmType &alarmType) { qCDebug(CommonLogger) << "DDE_Calendar::getOldRemindByAlarm, alarmType:" << alarmType; QString _resultStr {""}; switch (alarmType) { case DSchedule::Alarm_Begin: _resultStr = "0"; break; case DSchedule::Alarm_15Min_Front: _resultStr = "15"; break; case DSchedule::Alarm_30Min_Front: _resultStr = "30"; break; case DSchedule::Alarm_1Hour_Front: _resultStr = "60"; break; case DSchedule::Alarm_1Day_Front: _resultStr = "1440"; break; case DSchedule::Alarm_2Day_Front: _resultStr = "2880"; break; case DSchedule::Alarm_1Week_Front: _resultStr = "10080"; break; case DSchedule::Alarm_9Hour_After: //日程当天9点(全天) _resultStr = "0;09:00"; break; case DSchedule::Alarm_15Hour_Front: //一天å‰�(全天),为日程开始å‰�15å°�æ—¶ _resultStr = "1;09:00"; break; case DSchedule::Alarm_39Hour_Front: //2天å‰�(全天),为日程开始å‰�39å°�æ—¶ _resultStr = "2;09:00"; break; case DSchedule::Alarm_159Hour_Front: //一周å‰�(全天),为日程开始å‰�159å°�æ—¶ _resultStr = "7;09:00"; break; default: break; } return _resultStr; } DSchedule::Ptr DDE_Calendar::getScheduleByExported(const QString &scheduleStr) { qCDebug(CommonLogger) << "DDE_Calendar::getScheduleByExported"; QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(scheduleStr.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "JSON parse error:" << json_error.errorString(); return nullptr; } QJsonObject rootObj = jsonDoc.object(); DSchedule::Ptr schedule(new DSchedule); //日程是å�¦ä¸ºå…¨å¤© if (rootObj.contains("AllDay")) { schedule->setAllDay(rootObj.value("AllDay").toBool()); } //日程æ��醒规则 if (rootObj.contains("Remind")) { DDE_Calendar::setAlarmByOldRemind(schedule, rootObj.value("Remind").toString()); } //日程标题 if (rootObj.contains("Title")) { schedule->setSummary(rootObj.value("Title").toString()); } //日程æ��è¿° if (rootObj.contains("Description")) { schedule->setDescription(rootObj.value("Description").toString()); } //日程类型 if (rootObj.contains("Type")) { schedule->setScheduleTypeID(DDE_Calendar::getNewTypeIDByOldTypeID(rootObj.value("Type").toInt())); } //日程开始时间 if (rootObj.contains("Start")) { schedule->setDtStart(dtFromString(rootObj.value("Start").toString())); } //日程结æ�Ÿæ—¶é—´ if (rootObj.contains("End")) { schedule->setDtEnd(dtFromString(rootObj.value("End").toString())); } // //日程é‡�å¤�ID // if (rootObj.contains("RecurID")) { // _resultSchedule.setRecurID(rootObj.value("RecurID").toInt()); // } //日程é‡�å¤�规则 if (rootObj.contains("RRule")) { DDE_Calendar::setRRuleByOldRRule(schedule, rootObj.value("RRule").toString()); } //é‡�å¤�日程忽略日期集 if (rootObj.contains("Ignore")) { DDE_Calendar::setExDate(schedule, rootObj.value("Ignore").toArray()); } return schedule; } void DDE_Calendar::setRRuleByOldRRule(const DSchedule::Ptr &schedule, const QString &rrule) { qCDebug(CommonLogger) << "DDE_Calendar::setRRuleByOldRRule, rrule:" << rrule; //é‡�å¤�规则 KCalendarCore::Recurrence *recurrence = schedule->recurrence(); KCalendarCore::ICalFormat ical; KCalendarCore::RecurrenceRule *rule = new KCalendarCore::RecurrenceRule; if (ical.fromString(rule, rrule)) { recurrence->addRRule(rule); } } void DDE_Calendar::setExDate(const DSchedule::Ptr &schedule, const QJsonArray &ignore) { qCDebug(CommonLogger) << "DDE_Calendar::setExDate, ignore count:" << ignore.size(); KCalendarCore::Recurrence *recurrence = schedule->recurrence(); foreach (auto ignoreTime, ignore) { if (schedule->allDay()) { recurrence->addExDate(dtFromString(ignoreTime.toString()).date()); } else { recurrence->addExDateTime(dtFromString(ignoreTime.toString())); } } } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/compatibledata.h000066400000000000000000000017061523260663500265310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef COMPATIBLEDATA_H #define COMPATIBLEDATA_H #include "dschedule.h" #include namespace DDE_Calendar { //通过旧的日程id获å�–新的日程id QString getNewTypeIDByOldTypeID(int oldTypeID); int getOldTypeIDByNewTypeID(const QString &newTypeID); DSchedule::Ptr getScheduleByExported(const QString &scheduleStr); // void setAlarmByOldRemind(const DSchedule::Ptr &schedule, const QString &remind); void setRRuleByOldRRule(const DSchedule::Ptr &schedule, const QString &rrule); void setExDate(const DSchedule::Ptr &schedule, const QJsonArray &ignore); QString getOldRemindByAlarm(const DSchedule::AlarmType &alarmType); //将新的日程数æ�®è½¬æ�¢ä¸ºæ—§çš„æŸ¥è¯¢æ•°æ�®({"Date":"",Jobs:["",""]}) QString getExternalSchedule(const DSchedule::Map &scheduleMap); } // namespace DDE_Calendar #endif // COMPATIBLEDATA_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/daccount.cpp000066400000000000000000000333471523260663500257210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccount.h" #include "units.h" #include "commondef.h" #include #include #include #include DAccount::DAccount(DAccount::Type type) : m_displayName("") , m_accountID("") , m_accountName("") , m_dbName("") , m_dbusPath("") , m_accountType(type) , m_avatar("") , m_description("") , m_syncTag(0) , m_accountState(Account_Invalid) , m_syncState(Sync_Normal) , m_syncFreq(SyncFreq_15Mins) , m_intervalTime(0) , m_isExpandDisplay(true) { qCDebug(CommonLogger) << "DAccount::DAccount, type:" << type; } QString DAccount::displayName() const { // qCDebug(CommonLogger) << "DAccount::displayName"; return m_displayName; } void DAccount::setDisplayName(const QString &displayName) { // qCDebug(CommonLogger) << "Setting display name for account" << m_accountID << "from" << m_displayName << "to" << displayName; m_displayName = displayName; } QString DAccount::accountID() const { // qCDebug(CommonLogger) << "DAccount::accountID"; return m_accountID; } void DAccount::setAccountID(const QString &accountID) { qCDebug(CommonLogger) << "Setting account ID from" << m_accountID << "to" << accountID; m_accountID = accountID; } QString DAccount::accountName() const { // qCDebug(CommonLogger) << "DAccount::accountName"; return m_accountName; } void DAccount::setAccountName(const QString &accountName) { // qCDebug(CommonLogger) << "Setting account name for" << m_accountID << "from" << m_accountName << "to" << accountName; m_accountName = accountName; } QString DAccount::dbusPath() const { // qCDebug(CommonLogger) << "DAccount::dbusPath"; return m_dbusPath; } void DAccount::setDbusPath(const QString &dbusPath) { // qCDebug(CommonLogger) << "Setting DBus path for account" << m_accountID << "from" << m_dbusPath << "to" << dbusPath; m_dbusPath = dbusPath; } DAccount::Type DAccount::accountType() const { // qCDebug(CommonLogger) << "DAccount::accountType"; return m_accountType; } void DAccount::setAccountType(const Type &accountType) { // qCDebug(CommonLogger) << "DAccount::setAccountType, accountType:" << accountType; m_accountType = accountType; } bool DAccount::isExpandDisplay() const { // qCDebug(CommonLogger) << "DAccount::isExpandDisplay"; return m_isExpandDisplay; } void DAccount::setIsExpandDisplay(bool isExpandDisplay) { // qCDebug(CommonLogger) << "DAccount::setIsExpandDisplay, isExpandDisplay:" << isExpandDisplay; m_isExpandDisplay = isExpandDisplay; } bool DAccount::isNetWorkAccount() { // qCDebug(CommonLogger) << "DAccount::isNetWorkAccount"; return m_accountType != Type::Account_Local; } int DAccount::syncTag() const { // qCDebug(CommonLogger) << "DAccount::syncTag"; return m_syncTag; } void DAccount::setSyncTag(int syncTag) { // qCDebug(CommonLogger) << "DAccount::setSyncTag, syncTag:" << syncTag; m_syncTag = syncTag; } DAccount::AccountSyncState DAccount::syncState() const { // qCDebug(CommonLogger) << "DAccount::syncState"; return m_syncState; } void DAccount::setSyncState(AccountSyncState syncState) { // qCDebug(CommonLogger) << "DAccount::setSyncState, syncState:" << syncState; m_syncState = syncState; } QString DAccount::avatar() const { // qCDebug(CommonLogger) << "DAccount::avatar"; return m_avatar; } void DAccount::setAvatar(const QString &avatar) { // qCDebug(CommonLogger) << "Setting avatar for account" << m_accountID; m_avatar = avatar; } QString DAccount::description() const { // qCDebug(CommonLogger) << "DAccount::description"; return m_description; } void DAccount::setDescription(const QString &description) { // qCDebug(CommonLogger) << "Setting description for account" << m_accountID; m_description = description; } QDateTime DAccount::dtCreate() const { // qCDebug(CommonLogger) << "DAccount::dtCreate"; return m_dtCreate; } void DAccount::setDtCreate(const QDateTime &dtCreate) { // qCDebug(CommonLogger) << "Setting creation time for account" << m_accountID << "to" << dtCreate.toString(); m_dtCreate = dtCreate; } QDateTime DAccount::dtDelete() const { // qCDebug(CommonLogger) << "DAccount::dtDelete"; return m_dtDelete; } void DAccount::setDtDelete(const QDateTime &dtDelete) { // qCDebug(CommonLogger) << "DAccount::setDtDelete, dtDelete:" << dtDelete; m_dtDelete = dtDelete; } QDateTime DAccount::dtUpdate() const { // qCDebug(CommonLogger) << "DAccount::dtUpdate"; return m_dtUpdate; } void DAccount::setDtUpdate(const QDateTime &dtUpdate) { // qCDebug(CommonLogger) << "DAccount::setDtUpdate, dtUpdate:" << dtUpdate; m_dtUpdate = dtUpdate; } bool DAccount::toJsonString(const DAccount::Ptr &account, QString &jsonStr) { // qCDebug(CommonLogger) << "DAccount::toJsonString"; if (account.isNull()) { qCWarning(CommonLogger) << "Cannot convert null account to JSON"; return false; } QJsonObject rootObj; rootObj.insert("accountID", account->accountID()); rootObj.insert("displayName", account->displayName()); rootObj.insert("accountName", account->accountName()); rootObj.insert("dbusPath", account->dbusPath()); rootObj.insert("dbusInterface", account->dbusInterface()); rootObj.insert("type", account->accountType()); rootObj.insert("avatar", account->avatar()); rootObj.insert("description", account->description()); rootObj.insert("syncTag", account->syncTag()); rootObj.insert("accountState", int(account->accountState())); rootObj.insert("syncState", account->syncState()); rootObj.insert("dtCreate", dtToString(account->dtCreate())); rootObj.insert("dbName", account->dbName()); rootObj.insert("isExpandDisplay", account->isExpandDisplay()); rootObj.insert("dtLastSync", dtToString(account->dtLastSync())); rootObj.insert("syncFreq", syncFreqToJsonString(account)); QJsonDocument jsonDoc; jsonDoc.setObject(rootObj); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } bool DAccount::fromJsonString(Ptr &account, const QString &jsonStr) { qCDebug(CommonLogger) << "DAccount::fromJsonString"; if (account.isNull()) { qCDebug(CommonLogger) << "Creating new account instance for JSON parsing"; account = DAccount::Ptr(new DAccount); } QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse account JSON. Error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("accountID")) { account->setAccountID(rootObj.value("accountID").toString()); } if (rootObj.contains("displayName")) { account->setDisplayName(rootObj.value("displayName").toString()); } if (rootObj.contains("accountName")) { account->setAccountName(rootObj.value("accountName").toString()); } if (rootObj.contains("dbusPath")) { account->setDbusPath(rootObj.value("dbusPath").toString()); } if (rootObj.contains("dbusInterface")) { account->setDbusInterface(rootObj.value("dbusInterface").toString()); } if (rootObj.contains("type")) { account->setAccountType(static_cast(rootObj.value("type").toInt())); } if (rootObj.contains("avatar")) { account->setAvatar(rootObj.value("avatar").toString()); } if (rootObj.contains("description")) { account->setDescription(rootObj.value("description").toString()); } if (rootObj.contains("syncTag")) { account->setSyncTag(rootObj.value("syncTag").toInt()); } if (rootObj.contains("accountState")) { account->setAccountState(static_cast(rootObj.value("accountState").toInt())); } if (rootObj.contains("syncState")) { account->setSyncState(static_cast(rootObj.value("syncState").toInt())); } if (rootObj.contains("dtCreate")) { account->setDtCreate(dtFromString(rootObj.value("dtCreate").toString())); } if (rootObj.contains("dbName")) { account->setDbName(rootObj.value("dbName").toString()); } if (rootObj.contains("isExpandDisplay")) { account->setIsExpandDisplay(rootObj.value("isExpandDisplay").toBool()); } if (rootObj.contains("dtLastSync")) { account->setDtLastSync(dtFromString(rootObj.value("dtLastSync").toString())); } if (rootObj.contains("syncFreq")) { syncFreqFromJsonString(account, rootObj.value("syncFreq").toString()); } return true; } bool DAccount::toJsonListString(const DAccount::List &accountList, QString &jsonStr) { qCDebug(CommonLogger) << "DAccount::toJsonListString, list size:" << accountList.size(); QJsonArray jsArr; foreach (auto account, accountList) { QJsonObject jsonAccount; QString strAccount; toJsonString(account, strAccount); jsonAccount.insert("account", strAccount); jsArr.append(jsonAccount); } QJsonObject jsObj; jsObj.insert("accounts", jsArr); QJsonDocument jsonDoc; jsonDoc.setObject(jsObj); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); return true; } bool DAccount::fromJsonListString(List &accountList, const QString &jsonStr) { qCDebug(CommonLogger) << "DAccount::fromJsonListString"; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse account list JSON. Error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("accounts")) { QJsonArray jsArr = rootObj.value("accounts").toArray(); foreach (auto ja, jsArr) { QJsonObject jsObj = ja.toObject(); DAccount::Ptr account = DAccount::Ptr(new DAccount); QString strAcc = jsObj.value("account").toString(); if (fromJsonString(account, strAcc)) { accountList.append(account); } else { qCWarning(CommonLogger) << "Failed to parse account JSON:" << strAcc; } } } return true; } QString DAccount::dbName() const { // qCDebug(CommonLogger) << "DAccount::dbName"; return m_dbName; } void DAccount::setDbName(const QString &dbName) { // qCDebug(CommonLogger) << "Setting database name for account" << m_accountID << "from" << m_dbName << "to" << dbName; m_dbName = dbName; } QString DAccount::cloudPath() const { // qCDebug(CommonLogger) << "DAccount::cloudPath"; return m_cloudPath; } void DAccount::setCloudPath(const QString &cloudPath) { // qCDebug(CommonLogger) << "Setting cloud path for account" << m_accountID << "from" << m_cloudPath << "to" << cloudPath; m_cloudPath = cloudPath; } DAccount::SyncFreqType DAccount::syncFreq() const { // qCDebug(CommonLogger) << "DAccount::syncFreq"; return m_syncFreq; } void DAccount::setSyncFreq(SyncFreqType syncFreq) { // qCDebug(CommonLogger) << "DAccount::setSyncFreq, syncFreq:" << syncFreq; m_syncFreq = syncFreq; } int DAccount::intervalTime() const { // qCDebug(CommonLogger) << "DAccount::intervalTime"; return m_intervalTime; } void DAccount::setIntervalTime(int intervalTime) { // qCDebug(CommonLogger) << "DAccount::setIntervalTime, intervalTime:" << intervalTime; m_intervalTime = intervalTime; } QString DAccount::dbusInterface() const { // qCDebug(CommonLogger) << "DAccount::dbusInterface"; return m_dbusInterface; } void DAccount::setDbusInterface(const QString &dbusInterface) { qCDebug(CommonLogger) << "DAccount::setDbusInterface, dbusInterface:" << dbusInterface; m_dbusInterface = dbusInterface; } DAccount::AccountStates DAccount::accountState() const { // qCDebug(CommonLogger) << "DAccount::accountState"; return m_accountState; } void DAccount::setAccountState(const AccountStates &accountState) { qCDebug(CommonLogger) << "DAccount::setAccountState, accountState:" << accountState; m_accountState = accountState; } QDateTime DAccount::dtLastSync() const { // qCDebug(CommonLogger) << "DAccount::dtLastSync"; return m_dtLastSync; } void DAccount::setDtLastSync(const QDateTime &dtLastSync) { // qCDebug(CommonLogger) << "DAccount::setDtLastSync, dtLastSync:" << dtLastSync; m_dtLastSync = dtLastSync; } QString DAccount::syncFreqToJsonString(const DAccount::Ptr &account) { qCDebug(CommonLogger) << "DAccount::syncFreqToJsonString"; QJsonObject rootObj; rootObj.insert("syncFreq", account->syncFreq()); rootObj.insert("m_intervalTime", account->intervalTime()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObj); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } void DAccount::syncFreqFromJsonString(const DAccount::Ptr &account, const QString &syncFreqStr) { qCDebug(CommonLogger) << "DAccount::syncFreqFromJsonString"; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(syncFreqStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse sync frequency JSON. Error:" << jsonError.errorString(); return; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("syncFreq")) { account->setSyncFreq(SyncFreqType(rootObj.value("syncFreq").toInt())); } if (rootObj.contains("m_intervalTime")) { account->setIntervalTime(rootObj.value("m_intervalTime").toInt()); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/daccount.h000066400000000000000000000104171523260663500253570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNT_H #define DACCOUNT_H #include #include #include //å¸�户信æ�¯ class DAccount { public: enum Type { Account_Local, //本地å¸�户 Account_UnionID, //union id å¸�户 Account_CalDav //caldav通用å��è®®å¸�户 }; enum AccountState { Account_Invalid = 0x1, //无效 Account_Open = 0x2, //日历å�Œæ­¥æ€»å¼€å…³å¼€å�¯ Account_Calendar = 0x4, //å�Œæ­¥æ—¥ç¨‹ Account_Setting = 0x8, //å�Œæ­¥é€šç”¨è®¾ç½® }; Q_DECLARE_FLAGS(AccountStates, AccountState) enum AccountSyncState { Sync_Normal = 0, //正常 Sync_NetworkAnomaly, //网络异常 Sync_ServerException, //æœ�务器异常 Sync_StorageFull, //存储已满 }; enum SyncFreqType { SyncFreq_Maunal, //手动å�Œæ­¥ SyncFreq_15Mins, SyncFreq_30Mins, SyncFreq_1hour, SyncFreq_24hour, }; typedef QSharedPointer Ptr; typedef QVector List; explicit DAccount(Type type = Account_Local); QString displayName() const; void setDisplayName(const QString &displayName); QString accountID() const; void setAccountID(const QString &accountID); QString accountName() const; void setAccountName(const QString &accountName); QString dbusPath() const; void setDbusPath(const QString &dbusPath); Type accountType() const; void setAccountType(const Type &accountTyep); bool isExpandDisplay() const; void setIsExpandDisplay(bool isExpandDisplay); bool isNetWorkAccount(); int syncTag() const; void setSyncTag(int syncTag); AccountSyncState syncState() const; void setSyncState(AccountSyncState syncState); QString avatar() const; void setAvatar(const QString &avatar); QString description() const; void setDescription(const QString &description); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); QDateTime dtDelete() const; void setDtDelete(const QDateTime &dtDelete); QDateTime dtUpdate() const; void setDtUpdate(const QDateTime &dtUpdate); static bool toJsonString(const DAccount::Ptr &account, QString &jsonStr); static bool fromJsonString(DAccount::Ptr &account, const QString &jsonStr); static bool toJsonListString(const DAccount::List &accountList, QString &jsonStr); static bool fromJsonListString(DAccount::List &accountList, const QString &jsonStr); QString dbName() const; void setDbName(const QString &dbName); QString cloudPath() const; void setCloudPath(const QString &cloudPath); SyncFreqType syncFreq() const; void setSyncFreq(SyncFreqType syncFreq); int intervalTime() const; void setIntervalTime(int intervalTime); QString dbusInterface() const; void setDbusInterface(const QString &dbusInterface); AccountStates accountState() const; void setAccountState(const AccountStates &accountState); QDateTime dtLastSync() const; void setDtLastSync(const QDateTime &dtLastSync); static QString syncFreqToJsonString(const DAccount::Ptr &account); static void syncFreqFromJsonString(const DAccount::Ptr &account, const QString &syncFreqStr); private: QString m_displayName; //显示å��ç§° QString m_accountID; //å¸�户id QString m_accountName; //å¸�户å��ç§° QString m_dbName; //对应的数æ�®åº“å��ç§° QString m_dbusPath; //dbus路径 QString m_dbusInterface; //dbus接å�£ Type m_accountType; //å¸�户类型 QString m_avatar; //头åƒ� QString m_description; //æ��è¿° int m_syncTag; //å�Œæ­¥æ ‡è¯†,用æ�¥ä¸Žäº‘端标识比对 AccountStates m_accountState; //å¸�户状æ€� AccountSyncState m_syncState; //å�Œæ­¥çжæ€� QDateTime m_dtCreate; QDateTime m_dtDelete; QDateTime m_dtUpdate; QDateTime m_dtLastSync; //最å�Žä¸€æ¬¡å�Œæ­¥æ—¶é—´ QString m_cloudPath; SyncFreqType m_syncFreq; //å�Œæ­¥é¢‘率 int m_intervalTime; //当å�Œæ­¥é¢‘率为自定义时,æ‰�有效,å�•ä½�(min) bool m_isExpandDisplay; //左侧å¸�户列表信æ�¯æ˜¯å�¦å±•开显示 }; Q_DECLARE_OPERATORS_FOR_FLAGS(DAccount::AccountStates) #endif // DACCOUNT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dbustimedate.cpp000066400000000000000000000117151523260663500265660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbustimedate.h" #include "commondef.h" #include #include #include #include #include DCORE_USE_NAMESPACE inline const char *getTimedateService() { auto ver = DSysInfo::majorVersion().toInt(); if (ver > 20) { return "org.deepin.dde.Timedate1"; } return "com.deepin.daemon.Timedate"; } inline const char *getTimedatePath() { auto ver = DSysInfo::majorVersion().toInt(); if (ver > 20) { return "/org/deepin/dde/Timedate1"; } return "/com/deepin/daemon/Timedate"; } inline const char *getTimedateInterface() { auto ver = DSysInfo::majorVersion().toInt(); if (ver > 20) { return "org.deepin.dde.Timedate1"; } return "com.deepin.daemon.Timedate"; } #define TIMEDATE_DBUS_INTERFACE getTimedateInterface() #define TIMEDATE_DBUS_SERVICE getTimedateService() #define TIMEDATE_DBUS_PATH getTimedatePath() DBusTimedate::DBusTimedate(QObject *parent) : QDBusAbstractInterface(TIMEDATE_DBUS_SERVICE, TIMEDATE_DBUS_PATH, TIMEDATE_DBUS_INTERFACE, QDBusConnection::sessionBus(), parent) { qCDebug(CommonLogger) << "DBusTimedate::DBusTimedate"; //å…³è�”å�Žç«¯dbus触å�‘ä¿¡å�· if (!QDBusConnection::sessionBus().connect(TIMEDATE_DBUS_SERVICE, TIMEDATE_DBUS_PATH, "org.freedesktop.DBus.Properties", QLatin1String("PropertiesChanged"), this, SLOT(propertiesChanged(QDBusMessage)))) { qCWarning(CommonLogger) << "Failed to connect to PropertiesChanged signal:" << this->lastError().message(); } m_hasDateTimeFormat = getHasDateTimeFormat(); } int DBusTimedate::shortTimeFormat() { qCDebug(CommonLogger) << "DBusTimedate::shortTimeFormat"; //如果存在对应的时间设置则获å�–,å�¦åˆ™é»˜è®¤ä¸º4 return m_hasDateTimeFormat ? getPropertyByName("ShortTimeFormat").toInt() : 4; } int DBusTimedate::shortDateFormat() { qCDebug(CommonLogger) << "DBusTimedate::shortDateFormat"; //如果存在对应的时间设置则获å�–,å�¦åˆ™é»˜è®¤ä¸º1 return m_hasDateTimeFormat ? getPropertyByName("ShortDateFormat").toInt() : 1; } Qt::DayOfWeek DBusTimedate::weekBegins() { qCDebug(CommonLogger) << "DBusTimedate::weekBegins"; if (m_hasDateTimeFormat) { // WeekBegins是从0开始的,加1æ‰�能对应DayOfWeek return Qt::DayOfWeek(getPropertyByName("WeekBegins").toInt() + 1); } return Qt::Monday; } void DBusTimedate::propertiesChanged(const QDBusMessage &msg) { qCDebug(CommonLogger) << "DBusTimedate::propertiesChanged"; QList arguments = msg.arguments(); // å�‚数固定长度 if (3 != arguments.count()) { qCWarning(CommonLogger) << "Invalid number of arguments in PropertiesChanged signal:" << arguments.count(); return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName != this->interface()) { qCDebug(CommonLogger) << "Ignoring PropertiesChanged for interface:" << interfaceName; return; } QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); foreach (const QString &prop, keys) { if (prop == "ShortTimeFormat") { qCDebug(CommonLogger) << "ShortTimeFormat changed"; emit ShortTimeFormatChanged(changedProps[prop].toInt()); } else if (prop == "ShortDateFormat") { qCDebug(CommonLogger) << "ShortDateFormat changed"; emit ShortDateFormatChanged(changedProps[prop].toInt()); } } } QVariant DBusTimedate::getPropertyByName(const char *porpertyName) { qCDebug(CommonLogger) << "DBusTimedate::getPropertyByName, propertyName:" << porpertyName; QDBusInterface dbusinterface(this->service(), this->path(), this->interface(), QDBusConnection::sessionBus(), this); return dbusinterface.property(porpertyName); } bool DBusTimedate::getHasDateTimeFormat() { qCDebug(CommonLogger) << "DBusTimedate::getHasDateTimeFormat"; QDBusMessage msg = QDBusMessage::createMethodCall(TIMEDATE_DBUS_SERVICE, TIMEDATE_DBUS_PATH, "org.freedesktop.DBus.Introspectable", QStringLiteral("Introspect")); QDBusMessage reply = QDBusConnection::sessionBus().call(msg); if (reply.type() == QDBusMessage::ReplyMessage) { QVariant variant = reply.arguments().first(); return variant.toString().contains("\"ShortDateFormat\""); } else { qCWarning(CommonLogger) << "Failed to check DateTime format support:" << reply.errorMessage(); return false; } } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dbustimedate.h000066400000000000000000000021651523260663500262320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSTIMEDATE_H #define DBUSTIMEDATE_H #include //通过dbus获å�–控制中心相关时间设置 class DBusTimedate : public QDBusAbstractInterface { Q_OBJECT Q_PROPERTY(int ShortTimeFormat READ shortTimeFormat NOTIFY ShortTimeFormatChanged) Q_PROPERTY(int ShortDateFormat READ shortDateFormat NOTIFY ShortDateFormatChanged) Q_PROPERTY(int WeekBegins READ weekBegins NOTIFY WeekBeginsChanged) public: explicit DBusTimedate(QObject *parent = nullptr); int shortTimeFormat(); int shortDateFormat(); Qt::DayOfWeek weekBegins(); signals: void ShortDateFormatChanged(int value) const; void ShortTimeFormatChanged(int value) const; void WeekBeginsChanged(int value) const; public slots: void propertiesChanged(const QDBusMessage &msg); private: QVariant getPropertyByName(const char *porpertyName); bool getHasDateTimeFormat(); private: bool m_hasDateTimeFormat = false; //是å�¦å�«æœ‰ }; #endif // DBUSTIMEDATE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dcalendargeneralsettings.cpp000066400000000000000000000062561523260663500311540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dcalendargeneralsettings.h" #include "commondef.h" #include #include #include #include DCalendarGeneralSettings::DCalendarGeneralSettings() : m_firstDayOfWeek(Qt::Sunday) , m_timeShowType(TwentyFour) { qCDebug(CommonLogger) << "DCalendarGeneralSettings::DCalendarGeneralSettings (default)"; } DCalendarGeneralSettings::DCalendarGeneralSettings(const DCalendarGeneralSettings &setting) : m_firstDayOfWeek(setting.firstDayOfWeek()) , m_timeShowType(setting.timeShowType()) { qCDebug(CommonLogger) << "DCalendarGeneralSettings::DCalendarGeneralSettings (copy)"; } DCalendarGeneralSettings *DCalendarGeneralSettings::clone() const { // qCDebug(CommonLogger) << "DCalendarGeneralSettings::clone"; return new DCalendarGeneralSettings(*this); } Qt::DayOfWeek DCalendarGeneralSettings::firstDayOfWeek() const { // qCDebug(CommonLogger) << "DCalendarGeneralSettings::firstDayOfWeek"; return m_firstDayOfWeek; } void DCalendarGeneralSettings::setFirstDayOfWeek(const Qt::DayOfWeek &firstDayOfWeek) { // qCDebug(CommonLogger) << "DCalendarGeneralSettings::setFirstDayOfWeek, day:" << firstDayOfWeek; m_firstDayOfWeek = firstDayOfWeek; } DCalendarGeneralSettings::TimeShowType DCalendarGeneralSettings::timeShowType() const { // qCDebug(CommonLogger) << "DCalendarGeneralSettings::timeShowType"; return m_timeShowType; } void DCalendarGeneralSettings::setTimeShowType(const TimeShowType &timeShowType) { // qCDebug(CommonLogger) << "DCalendarGeneralSettings::setTimeShowType, type:" << timeShowType; m_timeShowType = timeShowType; } void DCalendarGeneralSettings::toJsonString(const Ptr &cgSet, QString &jsonStr) { qCDebug(CommonLogger) << "DCalendarGeneralSettings::toJsonString"; QJsonObject rootObject; rootObject.insert("firstDayOfWeek", cgSet->firstDayOfWeek()); rootObject.insert("TimeShowType", cgSet->timeShowType()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } bool DCalendarGeneralSettings::fromJsonString(Ptr &cgSet, const QString &jsonStr) { qCDebug(CommonLogger) << "DCalendarGeneralSettings::fromJsonString"; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("firstDayOfWeek")) { qCDebug(CommonLogger) << "Setting first day of week to" << rootObj.value("firstDayOfWeek").toInt(); cgSet->setFirstDayOfWeek(static_cast(rootObj.value("firstDayOfWeek").toInt())); } if (rootObj.contains("TimeShowType")) { qCDebug(CommonLogger) << "Setting time show type to" << rootObj.value("TimeShowType").toInt(); cgSet->setTimeShowType(static_cast(rootObj.value("TimeShowType").toInt())); } return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dcalendargeneralsettings.h000066400000000000000000000026461523260663500306200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DCALENDARGENERALSETTINGS_H #define DCALENDARGENERALSETTINGS_H #include #include #include /** * @brief The DCalendarGeneralSettings class * 日历通用设置 */ class DCalendarGeneralSettings { public: enum TimeShowType { TwentyFour = 0, //24 Twelve, //12 }; enum GeneralSettingSource { Source_Database, // æ�¥è‡ªç³»ç»Ÿè®¾ç½®ï¼ˆå�³æŽ§åˆ¶ä¸­å¿ƒï¼‰ Source_System, // æ�¥è‡ªæ•°æ�®åº“(旧版本日历é…�置存放在数æ�®åº“) Source_Unknown, // 用于确定枚举边界 }; typedef QSharedPointer Ptr; DCalendarGeneralSettings(); DCalendarGeneralSettings(const DCalendarGeneralSettings &setting); DCalendarGeneralSettings *clone() const; Qt::DayOfWeek firstDayOfWeek() const; void setFirstDayOfWeek(const Qt::DayOfWeek &firstDayOfWeek); TimeShowType timeShowType() const; void setTimeShowType(const TimeShowType &timeShowType); static void toJsonString(const DCalendarGeneralSettings::Ptr &cgSet, QString &jsonStr); static bool fromJsonString(DCalendarGeneralSettings::Ptr &cgSet, const QString &jsonStr); private: Qt::DayOfWeek m_firstDayOfWeek; //一周首日 TimeShowType m_timeShowType; }; #endif // DCALENDARGENERALSETTINGS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dschedule.cpp000066400000000000000000000607311523260663500260560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dschedule.h" #include "commondef.h" #include "lunarandfestival/lunardateinfo.h" #include "icalformat.h" #include "memorycalendar.h" #include "units.h" #include "commondef.h" #include #define Duration_Min 60 #define Duration_Hour 60 * 60 #define Duration_Day 24 * 60 * 60 #define Duration_Week 7 * 24 * 60 * 60 DSchedule::DSchedule() : KCalendarCore::Event() , m_fileName("") , m_scheduleTypeID("") , m_compatibleID(0) { // qCDebug(CommonLogger) << "DSchedule constructor called."; } DSchedule::DSchedule(const DSchedule &schedule) : KCalendarCore::Event(schedule) , m_fileName("") , m_scheduleTypeID("") , m_compatibleID(0) { // qCDebug(CommonLogger) << "DSchedule copy constructor called for schedule:" << schedule.summary(); this->setScheduleTypeID(schedule.scheduleTypeID()); } DSchedule::DSchedule(const KCalendarCore::Event &event) : KCalendarCore::Event(event) , m_fileName("") , m_scheduleTypeID("") , m_compatibleID(0) { // qCDebug(CommonLogger) << "DSchedule constructor from KCalendarCore::Event called for event:" << event.summary(); } DSchedule *DSchedule::clone() const { // qCDebug(CommonLogger) << "Cloning DSchedule:" << summary(); return new DSchedule(*this); } QString DSchedule::scheduleTypeID() const { // qCDebug(CommonLogger) << "Getting scheduleTypeID:" << m_scheduleTypeID; return m_scheduleTypeID; } void DSchedule::setScheduleTypeID(const QString &typeID) { // qCDebug(CommonLogger) << "Setting scheduleTypeID to:" << typeID; m_scheduleTypeID = typeID; } bool DSchedule::isMoved() { // qCDebug(CommonLogger) << "Checking if schedule is moved:" << m_moved; return this->m_moved; } void DSchedule::setMoved(bool moved) { // qCDebug(CommonLogger) << "Setting moved status to:" << moved; this->m_moved = moved; } bool DSchedule::isValid() const { //TODO:添加判断日程是å�¦æœ‰æ•ˆ // qCDebug(CommonLogger) << "Checking if schedule is valid."; return true; } bool DSchedule::isMultiDay() const { //如果日期ä¸�一致则为跨天日程 bool multiDay = dtStart().date() != dtEnd().date(); // qCDebug(CommonLogger) << "Checking if schedule is multi-day:" << multiDay; return multiDay; } bool DSchedule::operator==(const DSchedule &schedule) const { // qCDebug(CommonLogger) << "Comparing schedules with operator=="; return this->instanceIdentifier() == schedule.instanceIdentifier(); } bool operator<(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { // qCDebug(CommonLogger) << "Comparing DSchedule::Ptr with operator<"; if (s1.isNull() || s2.isNull()) { return false; } return *s1.data() < *s2.data(); } bool DSchedule::operator<(const DSchedule &schedule) const { // qCDebug(CommonLogger) << "Comparing schedules with operator<"; if (this->allDay() != schedule.allDay()) { return this->allDay() > schedule.allDay(); } if (this->dtStart() != schedule.dtStart()) { return this->dtStart() < schedule.dtStart(); } if (this->created() != schedule.created()) { return this->created() < schedule.created(); } if (this->summary() != schedule.summary()) { return this->summary() < schedule.summary(); } return true; } void DSchedule::setAlarmType(const DSchedule::AlarmType &alarmType) { // qCDebug(CommonLogger) << "Setting alarm type to:" << static_cast(alarmType); //如果æ��醒规则没有å�˜åŒ–则退出 if (alarmType == getAlarmType()) { qCDebug(CommonLogger) << "Alarm type unchanged, skipping update"; return; } //清除æ��醒规则 this->clearAlarms(); //如果为从ä¸�则退出 if (alarmType == AlarmType::Alarm_None || alarmType == AlarmType::Alarm_AllDay_None) { qCDebug(CommonLogger) << "Setting alarm type to None, clearing all alarms"; return; } QMap alarmMap = getAlarmMap(); QMap::const_iterator iter = alarmMap.constBegin(); for (; iter != alarmMap.constEnd(); ++iter) { if (iter.value() == alarmType) { KCalendarCore::Alarm::Ptr alarm = KCalendarCore::Alarm::Ptr(new KCalendarCore::Alarm(this)); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); alarm->setDisplayAlarm(this->summary()); KCalendarCore::Duration duration(iter.key()); alarm->setStartOffset(duration); addAlarm(alarm); qCDebug(CommonLogger) << "Added alarm with offset:" << iter.key() << "seconds"; break; } } } DSchedule::AlarmType DSchedule::getAlarmType() { // qCDebug(CommonLogger) << "Getting alarm type for schedule:" << summary(); AlarmType alarmType = allDay() ? Alarm_AllDay_None : Alarm_None; KCalendarCore::Alarm::List alarmList = this->alarms(); if (alarmList.size() > 0) { KCalendarCore::Duration duration = alarmList.at(0)->startOffset(); QMap alarmMap = getAlarmMap(); if (alarmMap.contains(duration.asSeconds())) { alarmType = alarmMap[duration.asSeconds()]; } } // qCDebug(CommonLogger) << "Found alarm type:" << static_cast(alarmType); return alarmType; } void DSchedule::setRRuleType(const DSchedule::RRuleType &rtype) { // qCDebug(CommonLogger) << "Setting RRule type to:" << static_cast(rtype); if (getRRuleType() == rtype) { qCDebug(CommonLogger) << "Recurrence rule type unchanged, skipping update"; return; } clearRecurrence(); QString rules; switch (rtype) { case RRule_Year: rules = "FREQ=YEARLY"; break; case RRule_Month: rules = "FREQ=MONTHLY"; break; case RRule_Week: rules = "FREQ=WEEKLY"; break; case RRule_Work: rules = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"; break; case RRule_Day: rules = "FREQ=DAILY"; break; default: rules = ""; break; } if (!rules.isEmpty()) { // qCDebug(CommonLogger) << "Applying recurrence rule:" << rules; KCalendarCore::Recurrence *recurrence = this->recurrence(); KCalendarCore::RecurrenceRule *rrule = new KCalendarCore::RecurrenceRule(); KCalendarCore::ICalFormat ical; if (ical.fromString(rrule, rules)) { recurrence->addRRule(rrule); } } } DSchedule::RRuleType DSchedule::getRRuleType() { // qCDebug(CommonLogger) << "Getting RRule type for schedule:" << summary(); RRuleType rtype = RRule_None; if (this->recurs()) { KCalendarCore::RecurrenceRule *rrule = this->recurrence()->defaultRRuleConst(); switch (rrule->recurrenceType()) { case KCalendarCore::RecurrenceRule::rYearly: { rtype = RRule_Year; } break; case KCalendarCore::RecurrenceRule::rMonthly: { rtype = RRule_Month; } break; case KCalendarCore::RecurrenceRule::rWeekly: { rtype = RRule_Week; } break; case KCalendarCore::RecurrenceRule::rDaily: { if (rrule->rrule().contains("BYDAY=MO,TU,WE,TH,FR")) { rtype = RRule_Work; } else { rtype = RRule_Day; } } break; default: rtype = RRule_None; break; } } // qCDebug(CommonLogger) << "Found RRule type:" << static_cast(rtype); return rtype; } int DSchedule::numberOfRepetitions(const Ptr &scheudle, const QDateTime &datetime) { // qCDebug(CommonLogger) << "Calculating number of repetitions for schedule" << scheudle->summary() << "until" << datetime; return scheudle->recurrence()->durationTo(datetime); } bool DSchedule::fromJsonString(DSchedule::Ptr &schedule, const QString &json) { // qCDebug(CommonLogger) << "Parsing schedule from JSON string:" << json; if (schedule.isNull()) { // qCDebug(CommonLogger) << "Creating new schedule instance for JSON parsing"; schedule = DSchedule::Ptr(new DSchedule); } QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse schedule JSON. Error:" << jsonError.errorString(); return false; } bool resBool = false; QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("schedule")) { QString str = rootObj.value("schedule").toString(); if (fromIcsString(schedule, str)) { if (rootObj.contains("type")) { schedule->setScheduleTypeID(rootObj.value("type").toString()); } if (rootObj.contains("compatibleID")) { schedule->setcompatibleID(rootObj.value("compatibleID").toInt()); } resBool = true; } } else { qCWarning(CommonLogger) << "No schedule data found in JSON"; } return resBool; } bool DSchedule::toJsonString(const DSchedule::Ptr &schedule, QString &json) { // qCDebug(CommonLogger) << "Converting schedule to JSON string:" << schedule->summary(); if (schedule.isNull()) { qCWarning(CommonLogger) << "Cannot convert null schedule to JSON"; return false; } QJsonObject rootObject; rootObject.insert("type", schedule->scheduleTypeID()); rootObject.insert("schedule", toIcsString(schedule)); rootObject.insert("compatibleID", schedule->compatibleID()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); json = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); // qCDebug(CommonLogger) << "Resulting JSON:" << json; return true; } bool DSchedule::fromIcsString(Ptr &schedule, const QString &string) { // qCDebug(CommonLogger) << "Parsing schedule from ICS string:" << string; bool resBool = false; KCalendarCore::ICalFormat icalformat; QTimeZone timezone = QDateTime::currentDateTime().timeZone(); KCalendarCore::MemoryCalendar::Ptr _cal(new KCalendarCore::MemoryCalendar(timezone)); if (icalformat.fromString(_cal, string)) { KCalendarCore::Event::List eventList = _cal->events(); if (eventList.size() > 0) { schedule = DSchedule::Ptr(new DSchedule(*eventList.at(0).data())); // eventList.at(0).staticCast(); // qCDebug(CommonLogger) << "Successfully parsed schedule:" << schedule->summary(); resBool = true; } } else { qCWarning(CommonLogger) << "Failed to parse ICS string"; } return resBool; } QString DSchedule::toIcsString(const DSchedule::Ptr &schedule) { // qCDebug(CommonLogger) << "Converting schedule to ICS string:" << schedule->summary(); KCalendarCore::ICalFormat icalformat; KCalendarCore::MemoryCalendar::Ptr _cal(new KCalendarCore::MemoryCalendar(nullptr)); _cal->addEvent(schedule); return icalformat.toString(_cal.staticCast()); } QMap DSchedule::fromMapString(const QString &json) { // qCDebug(CommonLogger) << "Parsing schedule map from JSON string:" << json; QMap scheduleMap; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse schedule map JSON. Error:" << jsonError.errorString(); return scheduleMap; } QJsonArray rootArray = jsonDoc.array(); QDate date; foreach (auto jsonValue, rootArray) { QJsonObject jsonObj = jsonValue.toObject(); if (jsonObj.contains("Date")) { date = dateFromString(jsonObj.value("Date").toString()); } if (jsonObj.contains("schedule")) { QJsonArray jsonArray = jsonObj.value("schedule").toArray(); foreach (auto scheduleValue, jsonArray) { QString scheduleStr = scheduleValue.toString(); DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); DSchedule::fromJsonString(schedule, scheduleStr); scheduleMap[date].append(schedule); } } } // qCDebug(CommonLogger) << "Parsed" << scheduleMap.size() << "dates from schedule map JSON."; return scheduleMap; } QString DSchedule::toMapString(const QMap &scheduleMap) { // qCDebug(CommonLogger) << "Converting schedule map to JSON string, containing" << scheduleMap.size() << "dates."; QJsonArray rootArray; QMap::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { QJsonObject jsonObj; jsonObj.insert("Date", dateToString(iter.key())); QJsonArray jsonArray; foreach (auto &schedule, iter.value()) { QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); jsonArray.append(scheduleStr); } jsonObj.insert("schedule", jsonArray); rootArray.append(jsonObj); } QJsonDocument jsonDoc; jsonDoc.setArray(rootArray); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } QPair DSchedule::fromListString(const QString &json) { // qCDebug(CommonLogger) << "Parsing schedule list from JSON string:" << json; QPair schedulePair; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(json.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return schedulePair; } QJsonObject jsonObj = jsonDoc.object(); DSchedule::List scheduleList; if (jsonObj.contains("query")) { schedulePair.first = jsonObj.value("query").toString(); } if (jsonObj.contains("schedules")) { QJsonArray jsonArray = jsonObj.value("schedules").toArray(); foreach (auto scheduleValue, jsonArray) { QString scheduleStr = scheduleValue.toString(); DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); DSchedule::fromJsonString(schedule, scheduleStr); scheduleList.append(schedule); } } schedulePair.second = scheduleList; // qCDebug(CommonLogger) << "Parsed" << scheduleList.size() << "schedules from list string for query:" << schedulePair.first; return schedulePair; } QString DSchedule::toListString(const QString &query, const DSchedule::List &scheduleList) { // qCDebug(CommonLogger) << "Converting schedule list to JSON string for query:" << query << "with" << scheduleList.size() << "schedules."; QJsonObject jsonObj; jsonObj.insert("query", query); QJsonArray jsonArray; foreach (auto &schedule, scheduleList) { QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); jsonArray.append(scheduleStr); } jsonObj.insert("schedules", jsonArray); QJsonDocument jsonDoc; jsonDoc.setObject(jsonObj); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } void DSchedule::expendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd) { // qCDebug(CommonLogger) << "Expanding recurrence for schedule:" << schedule->summary() << "from" << dtStart << "to" << dtEnd; QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结æ�Ÿæ—¶é—´éƒ½æ˜¯0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (schedule->recurs()) { //获å�–日程的开始结æ�Ÿæ—¶é—´å·® qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); QList dtList = schedule->recurrence()->timesInInterval(queryDtStart, dtEnd); // qCDebug(CommonLogger) << "Found" << dtList.size() << "recurrence instances."; foreach (auto &dt, dtList) { QDateTime scheduleDtEnd = dt.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(schedule->clone()); newSchedule->setDtStart(dt); newSchedule->setDtEnd(scheduleDtEnd); //å�ªæœ‰é‡�å¤�日程设置RecurrenceId if (schedule->dtStart() != dt) { newSchedule->setRecurrenceId(dt); } scheduleMap[dt.date()].append(newSchedule); } } else { // qCDebug(CommonLogger) << "Schedule does not recur, checking if it falls within the interval."; if (!(schedule->dtStart() > dtEnd || schedule->dtEnd() < queryDtStart)) { scheduleMap[schedule->dtStart().date()].append(schedule); } } } QMap DSchedule::convertSchedules(const DScheduleQueryPar::Ptr &queryPar, const DSchedule::List &scheduleList) { // qCDebug(CommonLogger) << "Converting" << scheduleList.size() << "schedules based on query parameters."; QDateTime dtStart = queryPar->dtStart(); QDateTime dtEnd = queryPar->dtEnd(); bool extend = queryPar->queryType() == DScheduleQueryPar::Query_None; QMap scheduleMap; foreach (auto &schedule, scheduleList) { //获å�–日程的开始结æ�Ÿæ—¶é—´å·® qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); //如果存在é‡�å¤�日程 if (schedule->recurs()) { // qCDebug(CommonLogger) << "Processing recurring schedule:" << schedule->summary(); //如果为农历日程 if (schedule->lunnar()) { // qCDebug(CommonLogger) << "Processing lunar recurring schedule."; //农历é‡�å¤�日程计算 LunarDateInfo lunardate(schedule->recurrence()->defaultRRuleConst(), interval); QMap ruleStartDate = lunardate.getRRuleStartDate(dtStart.date(), dtEnd.date(), schedule->dtStart().date()); QDateTime recurDateTime; recurDateTime.setTime(schedule->dtStart().time()); QDateTime copyEnd; QMap::ConstIterator iter = ruleStartDate.constBegin(); for (; iter != ruleStartDate.constEnd(); iter++) { recurDateTime.setDate(iter.value()); //如果在忽略时间列表中,则忽略 if (schedule->recurrence()->exDateTimes().contains(recurDateTime)) continue; copyEnd = recurDateTime.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(new DSchedule(*schedule.data())); newSchedule->setDtStart(recurDateTime); newSchedule->setDtEnd(copyEnd); //å�ªæœ‰é‡�å¤�日程设置RecurrenceId if (schedule->dtStart() != recurDateTime) { newSchedule->setRecurrenceId(recurDateTime); } scheduleMap[recurDateTime.date()].append(newSchedule); } } else { // qCDebug(CommonLogger) << "Processing Gregorian recurring schedule."; //é�žå†œåŽ†æ—¥ç¨‹ expendRecurrence(scheduleMap, schedule, dtStart, dtEnd); } } else { // qCDebug(CommonLogger) << "Processing non-recurring schedule:" << schedule->summary(); //普通日程 //如果在查询时间范围内 QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结æ�Ÿæ—¶é—´éƒ½æ˜¯0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (!(schedule->dtEnd() < queryDtStart || schedule->dtStart() > dtEnd)) { if (extend && schedule->isMultiDay()) { // qCDebug(CommonLogger) << "Expanding multi-day schedule."; //需è¦�扩展的天数 int extenddays = static_cast(schedule->dtStart().daysTo(schedule->dtEnd())); for (int i = 0; i <= extenddays; ++i) { // 开始结æ�Ÿæ—¥æœŸå·²ç»�在查询时间范围内 scheduleMap[schedule->dtStart().date().addDays(i)].append(schedule); } } else { scheduleMap[schedule->dtStart().date()].append(schedule); } } } } //如果为查询å‰�N个日程,则å�–å‰�N个日程 if (queryPar->queryType() == DScheduleQueryPar::Query_Top) { // qCDebug(CommonLogger) << "Filtering for top" << queryPar->queryTop() << "schedules."; int scheduleNum = 0; DSchedule::Map filterSchedule; DSchedule::Map::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { if (iter.value().size() == 0) { continue; } if (scheduleNum + iter.value().size() > queryPar->queryTop()) { DSchedule::List scheduleList; int residuesNum = queryPar->queryTop() - scheduleNum; for (int i = 0; i < residuesNum; ++i) { scheduleList.append(iter.value().at(i)); } filterSchedule[iter.key()] = scheduleList; } else { filterSchedule[iter.key()] = iter.value(); } } scheduleMap = filterSchedule; } // qCDebug(CommonLogger) << "Conversion finished, returning" << scheduleMap.size() << "dates with schedules."; return scheduleMap; } QMap DSchedule::fromQueryResult(const QString &query) { // qCDebug(CommonLogger) << "Parsing schedules from query result:" << query; QMap scheduleMap; QPair pair = fromListString(query); DScheduleQueryPar::Ptr queryPar = DScheduleQueryPar::fromJsonString(pair.first); if (queryPar.isNull()) { qCWarning(CommonLogger) << "Failed to parse query parameters from query result."; return scheduleMap; } scheduleMap = DSchedule::convertSchedules(queryPar, pair.second); return scheduleMap; } bool operator==(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { // qCDebug(CommonLogger) << "Comparing DSchedule::Ptr with operator=="; return s1.isNull() || s2.isNull() ? s1.isNull() && s2.isNull() : s1->instanceIdentifier() == s2->instanceIdentifier(); } QMap DSchedule::getAlarmMap() { // qCDebug(CommonLogger) << "Getting alarm map."; static QMap alarmMap { {0, Alarm_Begin}, {-15 * Duration_Min, Alarm_15Min_Front}, {-30 * Duration_Min, Alarm_30Min_Front}, {-Duration_Hour, Alarm_1Hour_Front}, {-Duration_Day, Alarm_1Day_Front}, {-Duration_Day * 2, Alarm_2Day_Front}, {-Duration_Week, Alarm_1Week_Front}, {9 * Duration_Hour, Alarm_9Hour_After}, {-15 * Duration_Hour, Alarm_15Hour_Front}, {-39 * Duration_Hour, Alarm_39Hour_Front}, {-159 * Duration_Hour, Alarm_159Hour_Front}}; return alarmMap; } QString DSchedule::fileName() const { // qCDebug(CommonLogger) << "Getting file name:" << m_fileName; return m_fileName; } void DSchedule::setFileName(const QString &fileName) { // qCDebug(CommonLogger) << "Setting file name for schedule" << summary() << "from" << m_fileName << "to" << fileName; m_fileName = fileName; } int DSchedule::compatibleID() const { // qCDebug(CommonLogger) << "Getting compatible ID:" << m_compatibleID; return m_compatibleID; } void DSchedule::setcompatibleID(int compatibleID) { // qCDebug(CommonLogger) << "Setting compatible ID to:" << compatibleID; m_compatibleID = compatibleID; } QDebug operator<<(QDebug debug, const DSchedule &scheduleJsonData) { // qCDebug(CommonLogger) << "Streaming DSchedule to QDebug."; QDebugStateSaver saver(debug); debug.noquote() << "dtStart:" << dtToString(scheduleJsonData.dtStart()) << " ,dtEnd:" << dtToString(scheduleJsonData.dtEnd()) << " ,dtCreate:" << dtToString(scheduleJsonData.created()) << " ,summary:" << scheduleJsonData.summary() << " ,scheduleTypeID:" << scheduleJsonData.scheduleTypeID() << ",Uid:" << scheduleJsonData.uid() << " ,rrule:" << scheduleJsonData.recurrence()->defaultRRule()->rrule(); return debug; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dschedule.h000066400000000000000000000105471523260663500255230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULE_H #define DSCHEDULE_H #include "event.h" #include "dschedulequerypar.h" #include #include #include //日程信æ�¯ class DSchedule : public KCalendarCore::Event { public: //æ��醒规则 enum AlarmType { Alarm_None, //从ä¸� Alarm_Begin, //日程开始时 Alarm_15Min_Front, //æ��å‰�15分钟 Alarm_30Min_Front, //æ��å‰�30分钟 Alarm_1Hour_Front, //æ��å‰�1å°�æ—¶ Alarm_1Day_Front, //æ��å‰�1天 Alarm_2Day_Front, //æ��å‰�2天 Alarm_1Week_Front, //æ��å‰�1周 Alarm_AllDay_None, //全天从ä¸� Alarm_9Hour_After, //日程当天9点(全天) Alarm_15Hour_Front, //一天å‰�(全天),为日程开始å‰�15å°�æ—¶ Alarm_39Hour_Front, //2天å‰�(全天),为日程开始å‰�39å°�æ—¶ Alarm_159Hour_Front, //一周å‰�(全天),为日程开始å‰�159å°�æ—¶ }; //é‡�å¤�规则 enum RRuleType { RRule_None, //从ä¸� RRule_Day, //æ¯�天 RRule_Work, //æ¯�工作日 RRule_Week, //æ¯�周 RRule_Month, //æ¯�月 RRule_Year, //æ¯�å¹´ }; typedef QSharedPointer Ptr; typedef QVector List; typedef QMap Map; typedef QMap::Iterator Iter; DSchedule(); DSchedule(const DSchedule &schedule); DSchedule(const KCalendarCore::Event &event); DSchedule *clone() const override; QString scheduleTypeID() const; void setScheduleTypeID(const QString &typeID); //为了与旧数æ�®å…¼å®¹å¤„ç�†ï¼ˆä¸Žè�”系人交互中使用的是自增ID作为日程的ID) int dbID() const; void setDbID(int id); bool isMoved(); void setMoved(bool moved); bool isValid() const; //是å�¦æ˜¯è·¨å¤©çš„ bool isMultiDay() const; bool operator==(const DSchedule &schedule) const; bool operator<(const DSchedule &schedule) const; void setAlarmType(const AlarmType &alarmType); AlarmType getAlarmType(); //设置é‡�å¤�规则,若有é‡�å¤�规则,规则的截止次数或日期通过RecurrenceRule::duration 判断为永ä¸�,结æ�Ÿä¸Žæ¬¡æ•°è¿˜æ˜¯ç»“æ�Ÿä¸Žæ—¥æœŸ void setRRuleType(const RRuleType &rtype); RRuleType getRRuleType(); //é‡�å¤�日程相对于原始日程é‡�å¤�的次数,若为第一个日程则返回0 static int numberOfRepetitions(const DSchedule::Ptr &scheudle, const QDateTime &datetime); static bool fromJsonString(DSchedule::Ptr &schedule, const QString &json); static bool toJsonString(const DSchedule::Ptr &schedule, QString &json); static bool fromIcsString(DSchedule::Ptr &schedule, const QString &string); static QString toIcsString(const DSchedule::Ptr &schedule); // static QMap fromMapString(const QString &json); static QString toMapString(const QMap &scheduleMap); static QPair fromListString(const QString &json); static QString toListString(const QString &query, const DSchedule::List &scheduleList); static void expendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd); static QMap convertSchedules(const DScheduleQueryPar::Ptr &queryPar, const DSchedule::List &scheduleList); static QMap fromQueryResult(const QString &query); private: QMap getAlarmMap(); public: //日程信æ�¯è°ƒè¯•打å�° friend QDebug operator<<(QDebug debug, const DSchedule &scheduleJsonData); friend bool operator==(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2); friend bool operator<(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2); QString fileName() const; void setFileName(const QString &fileName); //为了与旧数æ�®å…¼å®¹å¤„ç�†ï¼ˆä¸Žè�”系人交互中使用的是自增ID作为日程的ID) int compatibleID() const; void setcompatibleID(int compatibleID); private: QString m_fileName; //日程对应文件å��ç§° //日程类型 QString m_scheduleTypeID; bool m_moved = false; int m_compatibleID; //为了与旧数æ�®å…¼å®¹å¤„ç�†ï¼ˆä¸Žè�”系人交互中使用的是自增ID作为日程的ID) }; #endif // DSCHEDULE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dschedulequerypar.cpp000066400000000000000000000121271523260663500276430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dschedulequerypar.h" #include "units.h" #include "commondef.h" #include #include #include DScheduleQueryPar::DScheduleQueryPar() : m_key("") , m_queryTop(1) , m_rruleType(RRule_None) , m_queryType(Query_None) { qCDebug(CommonLogger) << "DScheduleQueryPar constructor called."; } QDateTime DScheduleQueryPar::dtStart() const { // qCDebug(CommonLogger) << "Getting dtStart:" << m_dtStart; return m_dtStart; } void DScheduleQueryPar::setDtStart(const QDateTime &dtStart) { // qCDebug(CommonLogger) << "Setting dtStart to:" << dtStart; m_dtStart = dtStart; } QDateTime DScheduleQueryPar::dtEnd() const { // qCDebug(CommonLogger) << "Getting dtEnd:" << m_dtEnd; return m_dtEnd; } void DScheduleQueryPar::setDtEnd(const QDateTime &dtEnd) { // qCDebug(CommonLogger) << "Setting dtEnd to:" << dtEnd; m_dtEnd = dtEnd; } QString DScheduleQueryPar::key() const { // qCDebug(CommonLogger) << "Getting key:" << m_key; return m_key; } void DScheduleQueryPar::setKey(const QString &key) { // qCDebug(CommonLogger) << "Setting key to:" << key; m_key = key; } DScheduleQueryPar::Ptr DScheduleQueryPar::fromJsonString(const QString &queryStr) { // qCDebug(CommonLogger) << "Parsing DScheduleQueryPar from JSON string:" << queryStr; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(queryStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse query parameters JSON. Error:" << jsonError.errorString() << "Query string:" << queryStr; return nullptr; } DScheduleQueryPar::Ptr queryPar = DScheduleQueryPar::Ptr(new DScheduleQueryPar); QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("key")) { queryPar->setKey(rootObj.value("key").toString()); } if (rootObj.contains("dtStart")) { queryPar->setDtStart(dtFromString(rootObj.value("dtStart").toString())); } if (rootObj.contains("dtEnd")) { queryPar->setDtEnd(dtFromString(rootObj.value("dtEnd").toString())); } QueryType qType = Query_None; if (rootObj.contains("queryType")) { qType = static_cast(rootObj.value("queryType").toInt()); queryPar->setQueryType(qType); } switch (qType) { case Query_Top: { if (rootObj.contains("queryTop")) { queryPar->setQueryTop(rootObj.value("queryTop").toInt()); } } break; case Query_RRule: { if (rootObj.contains("queryRRule")) { queryPar->setRruleType(static_cast(rootObj.value("queryRRule").toInt())); } } default: break; } // qCDebug(CommonLogger) << "Successfully parsed DScheduleQueryPar from JSON."; return queryPar; } QString DScheduleQueryPar::toJsonString(const DScheduleQueryPar::Ptr &queryPar) { // qCDebug(CommonLogger) << "Converting DScheduleQueryPar to JSON string."; if (queryPar.isNull()) { qCWarning(CommonLogger) << "Cannot convert null query parameters to JSON"; return QString(); } QJsonObject jsonObj; jsonObj.insert("key", queryPar->key()); jsonObj.insert("dtStart", dtToString(queryPar->dtStart())); jsonObj.insert("dtEnd", dtToString(queryPar->dtEnd())); jsonObj.insert("queryType", queryPar->queryType()); switch (queryPar->queryType()) { case Query_Top: // qCDebug(CommonLogger) << "Querying top" << queryPar->queryTop(); jsonObj.insert("queryTop", queryPar->queryTop()); break; case Query_RRule: // qCDebug(CommonLogger) << "Querying rrule" << queryPar->rruleType(); jsonObj.insert("queryRRule", queryPar->rruleType()); break; default: break; } QJsonDocument jsonDoc; jsonDoc.setObject(jsonObj); QString jsonString = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); // qCDebug(CommonLogger) << "Resulting DScheduleQueryPar JSON:" << jsonString; return jsonString; } DScheduleQueryPar::QueryType DScheduleQueryPar::queryType() const { // qCDebug(CommonLogger) << "Getting queryType:" << m_queryType; return m_queryType; } void DScheduleQueryPar::setQueryType(const QueryType &queryType) { // qCDebug(CommonLogger) << "Setting queryType to:" << queryType; m_queryType = queryType; } int DScheduleQueryPar::queryTop() const { // qCDebug(CommonLogger) << "Getting queryTop:" << m_queryTop; return m_queryTop; } void DScheduleQueryPar::setQueryTop(int queryTop) { // qCDebug(CommonLogger) << "Setting queryTop to:" << queryTop; m_queryTop = queryTop; } DScheduleQueryPar::RRuleType DScheduleQueryPar::rruleType() const { // qCDebug(CommonLogger) << "Getting rruleType:" << m_rruleType; return m_rruleType; } void DScheduleQueryPar::setRruleType(const RRuleType &rruleType) { // qCDebug(CommonLogger) << "Setting rruleType to:" << rruleType; m_rruleType = rruleType; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dschedulequerypar.h000066400000000000000000000034651523260663500273150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULEQUERYPAR_H #define DSCHEDULEQUERYPAR_H #include #include #include //查询日程相关å�‚æ•° class DScheduleQueryPar { public: typedef QSharedPointer Ptr; enum QueryType { Query_None, Query_RRule, //查询é‡�å¤�规则 Query_Top, //查询å‰�多少个 Query_ScheduleID //查询日程ID }; enum RRuleType { RRule_None, //从ä¸� RRule_Day, //æ¯�天 RRule_Work, //æ¯�工作日 RRule_Week, //æ¯�周 RRule_Month, //æ¯�月 RRule_Year, //æ¯�å¹´ }; DScheduleQueryPar(); QDateTime dtStart() const; void setDtStart(const QDateTime &dtStart); QDateTime dtEnd() const; void setDtEnd(const QDateTime &dtEnd); QString key() const; void setKey(const QString &key); static DScheduleQueryPar::Ptr fromJsonString(const QString &queryStr); static QString toJsonString(const DScheduleQueryPar::Ptr &queryPar); QueryType queryType() const; void setQueryType(const QueryType &queryType); int queryTop() const; void setQueryTop(int queryTop); RRuleType rruleType() const; void setRruleType(const RRuleType &rruleType); private: QString m_key; //查询关键字,如果查询类型为日程ID,则表示日程ID int m_queryTop; //查询范围内å‰�多少个日程 RRuleType m_rruleType; //查询对应é‡�å¤�规则的日程 QueryType m_queryType; //查询的类型 QDateTime m_dtStart; //查询的起始时间 QDateTime m_dtEnd; //查询的截止时间 }; Q_DECLARE_METATYPE(DScheduleQueryPar) Q_DECLARE_METATYPE(DScheduleQueryPar::Ptr) #endif // DSCHEDULEQUERYPAR_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dscheduletype.cpp000066400000000000000000000412051523260663500267530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dscheduletype.h" #include "daccount.h" #include "units.h" #include "commondef.h" #include #include #include #include DScheduleType::DScheduleType() : DScheduleType("") { // qCDebug(CommonLogger) << "DScheduleType default constructor called."; } DScheduleType::DScheduleType(const QString &accountID) : m_accountID(accountID) , m_typeID("") , m_typeName("") , m_displayName("") , m_typePath("") , m_typeColor(DTypeColor()) , m_description("") , m_privilege(None) , m_showState(Show) , m_deleted(0) , m_syncTag(0) { // qCDebug(CommonLogger) << "DScheduleType constructor called with accountID:" << accountID; } QString DScheduleType::accountID() const { // qCDebug(CommonLogger) << "Getting accountID."; return m_accountID; } void DScheduleType::setAccountID(const QString &accountID) { // qCDebug(CommonLogger) << "Setting account ID to:" << accountID; m_accountID = accountID; } DScheduleType::Privileges DScheduleType::privilege() const { // qCDebug(CommonLogger) << "Getting privilege."; return m_privilege; } void DScheduleType::setPrivilege(const Privileges &privilege) { // qCDebug(CommonLogger) << "Setting privilege to:" << static_cast(privilege); m_privilege = privilege; } DTypeColor DScheduleType::typeColor() const { // qCDebug(CommonLogger) << "Getting typeColor."; return m_typeColor; } void DScheduleType::setTypeColor(const DTypeColor &typeColor) { // qCDebug(CommonLogger) << "Setting type color - ID:" << typeColor.colorID() // << "Code:" << typeColor.colorCode() // << "Privilege:" << static_cast(typeColor.privilege()); m_typeColor = typeColor; } void DScheduleType::setColorID(const QString &colorID) { // qCDebug(CommonLogger) << "Setting color ID to:" << colorID; m_typeColor.setColorID(colorID); } QString DScheduleType::getColorID() const { // qCDebug(CommonLogger) << "Getting colorID."; return m_typeColor.colorID(); } void DScheduleType::setColorCode(const QString &colorCode) { // qCDebug(CommonLogger) << "Setting color code to:" << colorCode; m_typeColor.setColorCode(colorCode); } QString DScheduleType::getColorCode() const { // qCDebug(CommonLogger) << "Getting color code."; return m_typeColor.colorCode(); } QString DScheduleType::typeID() const { // qCDebug(CommonLogger) << "Getting typeID."; return m_typeID; } void DScheduleType::setTypeID(const QString &typeID) { // qCDebug(CommonLogger) << "Setting type ID to:" << typeID; m_typeID = typeID; } QString DScheduleType::displayName() const { // qCDebug(CommonLogger) << "Getting display name."; return m_displayName; } void DScheduleType::setDisplayName(const QString &displayName) { // qCDebug(CommonLogger) << "Setting display name to:" << displayName; m_displayName = displayName; } DScheduleType::ShowState DScheduleType::showState() const { // qCDebug(CommonLogger) << "Getting show state."; return m_showState; } void DScheduleType::setShowState(const ShowState &showState) { // qCDebug(CommonLogger) << "Setting show state to:" << static_cast(showState); m_showState = showState; } QString DScheduleType::typeName() const { // qCDebug(CommonLogger) << "Getting type name."; return m_typeName; } void DScheduleType::setTypeName(const QString &typeName) { // qCDebug(CommonLogger) << "Setting type name to:" << typeName; m_typeName = typeName; } QString DScheduleType::typePath() const { // qCDebug(CommonLogger) << "Getting type path."; return m_typePath; } void DScheduleType::setTypePath(const QString &typePath) { // qCDebug(CommonLogger) << "Setting type path to:" << typePath; m_typePath = typePath; } QString DScheduleType::description() const { // qCDebug(CommonLogger) << "Getting description."; return m_description; } void DScheduleType::setDescription(const QString &description) { // qCDebug(CommonLogger) << "Setting description to:" << description; m_description = description; } QDateTime DScheduleType::dtCreate() const { // qCDebug(CommonLogger) << "Getting dtCreate."; return m_dtCreate; } void DScheduleType::setDtCreate(const QDateTime &dtCreate) { // qCDebug(CommonLogger) << "Setting creation date to:" << dtCreate.toString(); m_dtCreate = dtCreate; } QDateTime DScheduleType::dtUpdate() const { // qCDebug(CommonLogger) << "Getting dtUpdate."; return m_dtUpdate; } void DScheduleType::setDtUpdate(const QDateTime &dtUpdate) { // qCDebug(CommonLogger) << "Setting update date to:" << dtUpdate.toString(); m_dtUpdate = dtUpdate; } QDateTime DScheduleType::dtDelete() const { // qCDebug(CommonLogger) << "Getting dtDelete."; return m_dtDelete; } void DScheduleType::setDtDelete(const QDateTime &dtDelete) { // qCDebug(CommonLogger) << "Setting delete date to:" << dtDelete.toString(); m_dtDelete = dtDelete; } int DScheduleType::deleted() const { // qCDebug(CommonLogger) << "Getting deleted status."; return m_deleted; } void DScheduleType::setDeleted(int deleted) { // qCDebug(CommonLogger) << "Setting deleted status to:" << deleted; m_deleted = deleted; } bool DScheduleType::fromJsonString(DScheduleType::Ptr &scheduleType, const QString &jsonStr) { qCDebug(CommonLogger) << "Parsing schedule type from JSON string"; if (scheduleType.isNull()) { qCDebug(CommonLogger) << "Creating new schedule type instance for JSON parsing"; scheduleType = DScheduleType::Ptr(new DScheduleType); } //å��åº�列化 QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse schedule type JSON. Error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("accountID")) { scheduleType->setAccountID(rootObj.value("accountID").toString()); } if (rootObj.contains("typeID")) { scheduleType->setTypeID(rootObj.value("typeID").toString()); } if (rootObj.contains("typeName")) { scheduleType->setTypeName(rootObj.value("typeName").toString()); } if (rootObj.contains("displayName")) { scheduleType->setDisplayName(rootObj.value("displayName").toString()); } if (rootObj.contains("typePath")) { scheduleType->setTypePath(rootObj.value("typePath").toString()); } if (rootObj.contains("TypeColor")) { QJsonObject colorObject = rootObj.value("TypeColor").toObject(); DTypeColor typeColor; if (colorObject.contains("colorID")) { typeColor.setColorID(colorObject.value("colorID").toString()); } if (colorObject.contains("colorCode")) { typeColor.setColorCode(colorObject.value("colorCode").toString()); } if (colorObject.contains("privilege")) { typeColor.setPrivilege(static_cast(colorObject.value("privilege").toInt())); } scheduleType->setTypeColor(typeColor); } if (rootObj.contains("description")) { scheduleType->setDescription(rootObj.value("description").toString()); } if (rootObj.contains("privilege")) { scheduleType->setPrivilege(static_cast(rootObj.value("privilege").toInt())); } if (rootObj.contains("dtCreate")) { scheduleType->setDtCreate(QDateTime::fromString(rootObj.value("dtCreate").toString(), Qt::ISODate)); } if (rootObj.contains("dtDelete")) { scheduleType->setDtDelete(QDateTime::fromString(rootObj.value("dtDelete").toString(), Qt::ISODate)); } if (rootObj.contains("dtUpdate")) { scheduleType->setDtUpdate(QDateTime::fromString(rootObj.value("dtUpdate").toString(), Qt::ISODate)); } if (rootObj.contains("showState")) { scheduleType->setShowState(static_cast(rootObj.value("showState").toInt())); } if (rootObj.contains("isDeleted")) { scheduleType->setDeleted(rootObj.value("isDeleted").toInt()); } qCDebug(CommonLogger) << "Successfully parsed schedule type from JSON."; return true; } bool DScheduleType::toJsonString(const DScheduleType::Ptr &scheduleType, QString &jsonStr) { qCDebug(CommonLogger) << "Converting schedule type to JSON string"; if (scheduleType.isNull()) { qCWarning(CommonLogger) << "Cannot convert null schedule type to JSON"; return false; } //åº�列化 QJsonObject rootObject; rootObject.insert("accountID", scheduleType->accountID()); rootObject.insert("typeID", scheduleType->typeID()); rootObject.insert("typeName", scheduleType->typeName()); rootObject.insert("displayName", scheduleType->displayName()); rootObject.insert("typePath", scheduleType->typePath()); //类型颜色信æ�¯ QJsonObject colorObject; colorObject.insert("colorID", scheduleType->typeColor().colorID()); colorObject.insert("colorCode", scheduleType->typeColor().colorCode()); colorObject.insert("privilege", scheduleType->typeColor().privilege()); rootObject.insert("TypeColor", colorObject); rootObject.insert("description", scheduleType->description()); rootObject.insert("privilege", int(scheduleType->privilege())); rootObject.insert("dtCreate", dtToString(scheduleType->dtCreate())); rootObject.insert("dtDelete", dtToString(scheduleType->dtDelete())); rootObject.insert("dtUpdate", dtToString(scheduleType->dtUpdate())); rootObject.insert("showState", scheduleType->showState()); rootObject.insert("isDeleted", scheduleType->deleted()); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); qCDebug(CommonLogger) << "Successfully converted schedule type to JSON:" << jsonStr; return true; } bool DScheduleType::fromJsonListString(DScheduleType::List &stList, const QString &jsonStr) { // qCDebug(CommonLogger) << "Parsing schedule type list from JSON string"; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(jsonStr.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "Failed to parse schedule type list JSON. Error:" << jsonError.errorString(); return false; } QJsonObject rootObj = jsonDoc.object(); if (rootObj.contains("scheduleType")) { QJsonArray jsonArray = rootObj.value("scheduleType").toArray(); for (auto ja : jsonArray) { QJsonObject typeObject = ja.toObject(); DScheduleType::Ptr scheduleType = DScheduleType::Ptr(new DScheduleType); if (typeObject.contains("accountID")) { scheduleType->setAccountID(typeObject.value("accountID").toString()); } if (typeObject.contains("typeID")) { scheduleType->setTypeID(typeObject.value("typeID").toString()); } if (typeObject.contains("typeName")) { scheduleType->setTypeName(typeObject.value("typeName").toString()); } if (typeObject.contains("displayName")) { scheduleType->setDisplayName(typeObject.value("displayName").toString()); } if (typeObject.contains("typePath")) { scheduleType->setTypePath(typeObject.value("typePath").toString()); } if (typeObject.contains("TypeColor")) { QJsonObject colorObject = typeObject.value("TypeColor").toObject(); DTypeColor typeColor; if (colorObject.contains("colorID")) { typeColor.setColorID(colorObject.value("colorID").toString()); } if (colorObject.contains("colorCode")) { typeColor.setColorCode(colorObject.value("colorCode").toString()); } if (colorObject.contains("privilege")) { typeColor.setPrivilege(static_cast(colorObject.value("privilege").toInt())); } scheduleType->setTypeColor(typeColor); } if (typeObject.contains("description")) { scheduleType->setDescription(typeObject.value("description").toString()); } if (typeObject.contains("privilege")) { scheduleType->setPrivilege(static_cast(typeObject.value("privilege").toInt())); } if (typeObject.contains("dtCreate")) { scheduleType->setDtCreate(QDateTime::fromString(typeObject.value("dtCreate").toString(), Qt::ISODate)); } if (typeObject.contains("dtDelete")) { scheduleType->setDtDelete(QDateTime::fromString(typeObject.value("dtDelete").toString(), Qt::ISODate)); } if (typeObject.contains("dtUpdate")) { scheduleType->setDtUpdate(QDateTime::fromString(typeObject.value("dtUpdate").toString(), Qt::ISODate)); } if (typeObject.contains("showState")) { scheduleType->setShowState(static_cast(typeObject.value("showState").toInt())); } if (typeObject.contains("isDeleted")) { scheduleType->setDeleted(typeObject.value("isDeleted").toInt()); } stList.append(scheduleType); } } // qCDebug(CommonLogger) << "Successfully parsed" << stList.count() << "schedule types from JSON list."; return true; } bool DScheduleType::toJsonListString(const DScheduleType::List &stList, QString &jsonStr) { qCDebug(CommonLogger) << "Converting schedule type list to JSON string," << stList.count() << "items."; //åº�列化 QJsonObject rootObject; QJsonArray jsonArray; for (auto &scheduleType : stList) { QJsonObject typeObject; typeObject.insert("accountID", scheduleType->accountID()); typeObject.insert("typeID", scheduleType->typeID()); typeObject.insert("typeName", scheduleType->typeName()); typeObject.insert("displayName", scheduleType->displayName()); typeObject.insert("typePath", scheduleType->typePath()); //类型颜色信æ�¯ QJsonObject colorObject; colorObject.insert("colorID", scheduleType->typeColor().colorID()); colorObject.insert("colorCode", scheduleType->typeColor().colorCode()); colorObject.insert("privilege", scheduleType->typeColor().privilege()); typeObject.insert("TypeColor", colorObject); typeObject.insert("description", scheduleType->description()); typeObject.insert("privilege", int(scheduleType->privilege())); typeObject.insert("dtCreate", dtToString(scheduleType->dtCreate())); typeObject.insert("dtDelete", dtToString(scheduleType->dtDelete())); typeObject.insert("dtUpdate", dtToString(scheduleType->dtUpdate())); typeObject.insert("showState", scheduleType->showState()); typeObject.insert("isDeleted", scheduleType->deleted()); jsonArray.append(typeObject); } rootObject.insert("scheduleType", jsonArray); QJsonDocument jsonDoc; jsonDoc.setObject(rootObject); jsonStr = QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); qCDebug(CommonLogger) << "Successfully converted schedule type list to JSON."; return true; } int DScheduleType::syncTag() const { // qCDebug(CommonLogger) << "Getting sync tag."; return m_syncTag; } void DScheduleType::setSyncTag(int syncTag) { // qCDebug(CommonLogger) << "Setting sync tag to:" << syncTag; m_syncTag = syncTag; } bool operator<(const DScheduleType::Ptr &st1, const DScheduleType::Ptr &st2) { // qCDebug(CommonLogger) << "Comparing schedule types."; //æ�ƒé™�ä¸�一致æ�ƒé™�å°�的排在å‰�é�¢ if (st1->privilege() != st2->privilege()) { qCDebug(CommonLogger) << "Comparing privileges - st1:" << static_cast(st1->privilege()) << "st2:" << static_cast(st2->privilege()); return st1->privilege() < st2->privilege(); } //æ�ƒé™�一一致的创建时间早的排在å‰�é�¢ if (st1->dtCreate() != st2->dtCreate()) { qCDebug(CommonLogger) << "Comparing creation dates - st1:" << st1->dtCreate().toString() << "st2:" << st2->dtCreate().toString(); return st1->dtCreate() < st2->dtCreate(); } // qCDebug(CommonLogger) << "Comparing schedule types - st1:" << st1->typeID() << "st2:" << st2->typeID(); return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dscheduletype.h000066400000000000000000000064111523260663500264200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULEYPE_H #define DSCHEDULEYPE_H #include "dtypecolor.h" #include #include #include #include #include class DAccount; //日程类型 class DScheduleType { public: enum Privilege { None = 0x0, //ä¸�å�¯è¯»ä¸�å�¯å†™ Read = 0x1, //å�¯è¯» Write = 0x2, //å�¯ç¼–辑 Delete = 0x4, //å�¯åˆ é™¤ System = Read, //系统æ�ƒé™� User = Read | Write | Delete, //用户æ�ƒé™� }; Q_DECLARE_FLAGS(Privileges, Privilege) enum ShowState { Hide, //日程éš�è—� Show, //日程显示 }; typedef QSharedPointer Ptr; typedef QVector List; DScheduleType(); explicit DScheduleType(const QString &accountID); QString accountID() const; void setAccountID(const QString &accountID); Privileges privilege() const; void setPrivilege(const Privileges &privilege); DTypeColor typeColor() const; void setTypeColor(const DTypeColor &typeColor); void setColorID(const QString &colorID); QString getColorID() const; void setColorCode(const QString &colorCode); QString getColorCode() const; QString typeID() const; void setTypeID(const QString &typeID); QString displayName() const; void setDisplayName(const QString &displayName); ShowState showState() const; void setShowState(const ShowState &showState); QString typeName() const; void setTypeName(const QString &typeName); QString typePath() const; void setTypePath(const QString &typePath); QString description() const; void setDescription(const QString &description); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); QDateTime dtUpdate() const; void setDtUpdate(const QDateTime &dtUpdate); QDateTime dtDelete() const; void setDtDelete(const QDateTime &dtDelete); int deleted() const; void setDeleted(int deleted); static bool fromJsonString(DScheduleType::Ptr &scheduleType, const QString &jsonStr); static bool toJsonString(const DScheduleType::Ptr &scheduleType, QString &jsonStr); static bool fromJsonListString(DScheduleType::List &stList, const QString &jsonStr); static bool toJsonListString(const DScheduleType::List &stList, QString &jsonStr); int syncTag() const; void setSyncTag(int syncTag); friend bool operator<(const DScheduleType::Ptr &st1, const DScheduleType::Ptr &st2); private: QString m_accountID; QString m_typeID; QString m_typeName; //类型å��ç§° QString m_displayName; //类型显示å��ç§° QString m_typePath; //类型云端路径 DTypeColor m_typeColor; //相关颜色信æ�¯ QString m_description; //类型相关æ��è¿° Privileges m_privilege; //类型æ�ƒé™� QDateTime m_dtCreate; //创建时间 QDateTime m_dtUpdate; //æ›´æ–°æ—¶é—´ QDateTime m_dtDelete; //删除时间 ShowState m_showState; //类型下日程显示状æ€� int m_deleted; //是å�¦è¢«åˆ é™¤ int m_syncTag; //å�Œæ­¥æ ‡è¯† }; Q_DECLARE_METATYPE(DScheduleType) Q_DECLARE_OPERATORS_FOR_FLAGS(DScheduleType::Privileges) #endif // DSCHEDULEYPE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dtypecolor.cpp000066400000000000000000000122311523260663500262720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dtypecolor.h" #include "units.h" #include "commondef.h" #include #include #include #include DTypeColor::DTypeColor() : m_colorID("") , m_colorCode("") , m_privilege(PriUser) { // qCDebug(CommonLogger) << "DTypeColor constructor called."; } DTypeColor::DTypeColor(const DTypeColor &typeColor) : m_colorID(typeColor.colorID()) , m_colorCode(typeColor.colorCode()) , m_privilege(typeColor.privilege()) , m_dtCreate(typeColor.dtCreate()) { // qCDebug(CommonLogger) << "DTypeColor copy constructor called."; } QString DTypeColor::colorCode() const { // qCDebug(CommonLogger) << "Getting color code:" << m_colorCode; return m_colorCode; } void DTypeColor::setColorCode(const QString &colorCode) { // qCDebug(CommonLogger) << "Setting color code to:" << colorCode; m_colorCode = colorCode; } QString DTypeColor::colorID() const { // qCDebug(CommonLogger) << "Getting color ID:" << m_colorID; return m_colorID; } void DTypeColor::setColorID(const QString &colorID) { // qCDebug(CommonLogger) << "Setting color ID to:" << colorID; m_colorID = colorID; } DTypeColor::Privilege DTypeColor::privilege() const { // qCDebug(CommonLogger) << "Getting privilege:" << m_privilege; return m_privilege; } void DTypeColor::setPrivilege(const Privilege &privilege) { // qCDebug(CommonLogger) << "Setting privilege to:" << privilege; m_privilege = privilege; } bool DTypeColor::isSysColorInfo() { // qCDebug(CommonLogger) << "Checking if color is system color info."; return this->privilege() == PriSystem; } bool DTypeColor::operator!=(const DTypeColor &color) const { // qCDebug(CommonLogger) << "Executing inequality operator."; return this->colorID() != color.colorID() || this->colorCode() != this->colorCode() || this->privilege() != this->privilege(); } DTypeColor::List DTypeColor::fromJsonString(const QString &colorJson) { // qCDebug(CommonLogger) << "Parsing color list from JSON string."; DTypeColor::List colorList; QJsonParseError jsonError; QJsonDocument jsonDoc(QJsonDocument::fromJson(colorJson.toLocal8Bit(), &jsonError)); if (jsonError.error != QJsonParseError::NoError) { qCWarning(CommonLogger) << "error:" << jsonError.errorString(); return colorList; } QJsonArray rootArr = jsonDoc.array(); foreach (auto json, rootArr) { // qCDebug(CommonLogger) << "Processing a JSON object from the array."; QJsonObject colorObj = json.toObject(); DTypeColor::Ptr typeColor = DTypeColor::Ptr(new DTypeColor); if (colorObj.contains("colorID")) { // qCDebug(CommonLogger) << "Found and setting colorID."; typeColor->setColorID(colorObj.value("colorID").toString()); } if (colorObj.contains("colorCode")) { // qCDebug(CommonLogger) << "Found and setting colorCode."; typeColor->setColorCode(colorObj.value("colorCode").toString()); } if (colorObj.contains("privilege")) { // qCDebug(CommonLogger) << "Found and setting privilege."; typeColor->setPrivilege(static_cast(colorObj.value("privilege").toInt())); } if (colorObj.contains("dtCreate")) { // qCDebug(CommonLogger) << "Found and setting dtCreate."; typeColor->setDtCreate(dtFromString(colorObj.value("dtCreate").toString())); } colorList.append(typeColor); } return colorList; } QString DTypeColor::toJsonString(const DTypeColor::List &colorList) { // qCDebug(CommonLogger) << "Converting color list to JSON string."; QJsonArray rootArr; foreach (auto color, colorList) { // qCDebug(CommonLogger) << "Processing a color object for JSON conversion."; QJsonObject colorObj; colorObj.insert("colorID", color->colorID()); colorObj.insert("colorCode", color->colorCode()); colorObj.insert("privilege", color->privilege()); colorObj.insert("dtCreate", dtToString(color->dtCreate())); rootArr.append(colorObj); } QJsonDocument jsonDoc; jsonDoc.setArray(rootArr); return QString::fromUtf8(jsonDoc.toJson(QJsonDocument::Compact)); } QDateTime DTypeColor::dtCreate() const { // qCDebug(CommonLogger) << "Getting dtCreate:" << m_dtCreate; return m_dtCreate; } void DTypeColor::setDtCreate(const QDateTime &dtCreate) { // qCDebug(CommonLogger) << "Setting dtCreate to:" << dtCreate; m_dtCreate = dtCreate; } bool operator<(const DTypeColor::Ptr &tc1, const DTypeColor::Ptr &tc2) { // qCDebug(CommonLogger) << "Executing less-than operator."; if (tc1->privilege() != tc2->privilege()) { // qCDebug(CommonLogger) << "Comparing by privilege."; return tc1->privilege() < tc2->privilege(); } if (tc1->dtCreate() != tc2->dtCreate()) { // qCDebug(CommonLogger) << "Comparing by dtCreate."; return tc1->dtCreate() < tc2->dtCreate(); } // qCDebug(CommonLogger) << "Defaulting to true in less-than comparison."; return true; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/dtypecolor.h000066400000000000000000000025721523260663500257460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DTYPECOLOR_H #define DTYPECOLOR_H #include #include #include #include /** * @brief The DTypeColor class * 类型颜色 */ class DTypeColor { public: //用户自定义的å�¯è¯»å�¯ç¼–辑 //系统默认å�ªè¯» enum Privilege { PriSystem = 1, //系统默认 PriUser = 7 //用户自定义 }; typedef QSharedPointer Ptr; typedef QVector List; DTypeColor(); DTypeColor(const DTypeColor &typeColor); QString colorCode() const; void setColorCode(const QString &colorCode); QString colorID() const; void setColorID(const QString &colorID); Privilege privilege() const; void setPrivilege(const Privilege &privilege); bool isSysColorInfo(); bool operator!=(const DTypeColor &color) const; static List fromJsonString(const QString &colorJson); static QString toJsonString(const List &colorList); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); friend bool operator<(const DTypeColor::Ptr &tc1, const DTypeColor::Ptr &tc2); private: QString m_colorID; QString m_colorCode; //颜色ç � Privilege m_privilege; QDateTime m_dtCreate; }; #endif // DTYPECOLOR_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/huangliData/000077500000000000000000000000001523260663500256245ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/huangliData/dbusdatastruct.cpp000066400000000000000000000321061523260663500313660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusdatastruct.h" #include "commondef.h" #include #include #include void CaLunarDayInfo::registerMetaType() { qCDebug(CommonLogger) << "Registering CaLunarDayInfo meta type."; qRegisterMetaType(); qDBusRegisterMetaType(); } QDebug operator<<(QDebug argument, const CaLunarDayInfo &what) { // qCDebug(CommonLogger) << "Streaming CaLunarDayInfo to QDebug."; argument << what.mGanZhiYear << what.mGanZhiMonth << what.mGanZhiDay; argument << what.mLunarMonthName << what.mLunarDayName; argument << what.mLunarLeapMonth; argument << what.mZodiac << what.mTerm; argument << what.mSolarFestival << what.mLunarFestival; argument << what.mWorktime; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarDayInfo &what) { // qCDebug(CommonLogger) << "Streaming CaLunarDayInfo to QDBusArgument."; argument.beginStructure(); argument << what.mGanZhiYear << what.mGanZhiMonth << what.mGanZhiDay; argument << what.mLunarMonthName << what.mLunarDayName; argument << what.mLunarLeapMonth; argument << what.mZodiac << what.mTerm; argument << what.mSolarFestival << what.mLunarFestival; argument << what.mWorktime; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarDayInfo &what) { // qCDebug(CommonLogger) << "Streaming CaLunarDayInfo from QDBusArgument."; argument.beginStructure(); argument >> what.mGanZhiYear >> what.mGanZhiMonth >> what.mGanZhiDay; argument >> what.mLunarMonthName >> what.mLunarDayName; argument >> what.mLunarLeapMonth; argument >> what.mZodiac >> what.mTerm; argument >> what.mSolarFestival >> what.mLunarFestival; argument >> what.mWorktime; argument.endStructure(); return argument; } void CaLunarMonthInfo::registerMetaType() { // qCDebug(CommonLogger) << "Registering CaLunarMonthInfo meta type."; qRegisterMetaType(); qDBusRegisterMetaType(); } QDebug operator<<(QDebug argument, const CaLunarMonthInfo &what) { // qCDebug(CommonLogger) << "Streaming CaLunarMonthInfo to QDebug."; argument << what.mFirstDayWeek << what.mDays; argument << what.mCaLunarDayInfo; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarMonthInfo &what) { // qCDebug(CommonLogger) << "Streaming CaLunarMonthInfo to QDBusArgument."; argument.beginStructure(); argument << what.mFirstDayWeek << what.mDays; argument << what.mCaLunarDayInfo; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarMonthInfo &what) { // qCDebug(CommonLogger) << "Streaming CaLunarMonthInfo from QDBusArgument."; argument.beginStructure(); argument >> what.mFirstDayWeek >> what.mDays; argument >> what.mCaLunarDayInfo; argument.endStructure(); return argument; } void CaHuangLiDayInfo::registerMetaType() { // qCDebug(CommonLogger) << "Registering CaHuangLiDayInfo meta type."; qRegisterMetaType(); qDBusRegisterMetaType(); } QString CaHuangLiDayInfo::toJson() { // qCDebug(CommonLogger) << "Converting CaHuangLiDayInfo to JSON string."; QJsonDocument doc; QJsonObject obj; obj.insert("Suit", mSuit); obj.insert("Avoid", mAvoid); obj.insert("Worktime", mWorktime); obj.insert("LunarFestival", mLunarFestival); obj.insert("SolarFestival", mSolarFestival); obj.insert("Term", mTerm); obj.insert("Zodiac", mZodiac); obj.insert("LunarLeapMonth", mLunarLeapMonth); obj.insert("LunarDayName", mLunarDayName); obj.insert("LunarMonthName", mLunarMonthName); obj.insert("GanZhiDay", mGanZhiDay); obj.insert("GanZhiMonth", mGanZhiMonth); obj.insert("GanZhiYear", mGanZhiYear); doc.setObject(obj); QString strJson = QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return strJson; } void CaHuangLiDayInfo::strJsonToInfo(const QString &strJson, bool &isVaild) { // qCDebug(CommonLogger) << "Parsing CaHuangLiDayInfo from JSON string."; isVaild = true; QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(strJson.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { qCDebug(CommonLogger) << "JSON parse error:" << json_error.errorString(); isVaild = false; return ; } QJsonObject rootObj = jsonDoc.object(); jsonObjectToInfo(rootObj); } void CaHuangLiDayInfo::jsonObjectToInfo(const QJsonObject &jsonObject) { // qCDebug(CommonLogger) << "Parsing CaHuangLiDayInfo from JSON object."; //因为是预先定义好的JSONæ•°æ�®æ ¼å¼�,所以这里å�¯ä»¥è¿™æ ·è¯»å�–int if (jsonObject.contains("Suit")) { // qCDebug(CommonLogger) << "Found and setting Suit."; this->mSuit = jsonObject.value("Suit").toString(); } if (jsonObject.contains("Avoid")) { // qCDebug(CommonLogger) << "Found and setting Avoid."; this->mAvoid = jsonObject.value("Avoid").toString(); } if (jsonObject.contains("Worktime")) { // qCDebug(CommonLogger) << "Found and setting Worktime."; this->mWorktime = jsonObject.value("Worktime").toInt(); } if (jsonObject.contains("LunarFestival")) { // qCDebug(CommonLogger) << "Found and setting LunarFestival."; this->mLunarFestival = jsonObject.value("LunarFestival").toString(); } if (jsonObject.contains("SolarFestival")) { // qCDebug(CommonLogger) << "Found and setting SolarFestival."; this->mSolarFestival = jsonObject.value("SolarFestival").toString(); } if (jsonObject.contains("Term")) { // qCDebug(CommonLogger) << "Found and setting Term."; this->mTerm = jsonObject.value("Term").toString(); } if (jsonObject.contains("Zodiac")) { // qCDebug(CommonLogger) << "Found and setting Zodiac."; this->mZodiac = jsonObject.value("Zodiac").toString(); } if (jsonObject.contains("LunarLeapMonth")) { // qCDebug(CommonLogger) << "Found and setting LunarLeapMonth."; this->mLunarLeapMonth = jsonObject.value("LunarLeapMonth").toInt(); } if (jsonObject.contains("LunarDayName")) { // qCDebug(CommonLogger) << "Found and setting LunarDayName."; this->mLunarDayName = jsonObject.value("LunarDayName").toString(); } if (jsonObject.contains("LunarMonthName")) { // qCDebug(CommonLogger) << "Found and setting LunarMonthName."; this->mLunarMonthName = jsonObject.value("LunarMonthName").toString(); } if (jsonObject.contains("GanZhiDay")) { // qCDebug(CommonLogger) << "Found and setting GanZhiDay."; this->mGanZhiDay = jsonObject.value("GanZhiDay").toString(); } if (jsonObject.contains("GanZhiMonth")) { // qCDebug(CommonLogger) << "Found and setting GanZhiMonth."; this->mGanZhiMonth = jsonObject.value("GanZhiMonth").toString(); } if (jsonObject.contains("GanZhiYear")) { // qCDebug(CommonLogger) << "Found and setting GanZhiYear."; this->mGanZhiYear = jsonObject.value("GanZhiYear").toString(); } } QDebug operator<<(QDebug argument, const CaHuangLiDayInfo &what) { // qCDebug(CommonLogger) << "Streaming CaHuangLiDayInfo to QDebug."; argument << what.mSuit << what.mAvoid; argument << what.mWorktime; argument << what.mLunarFestival << what.mSolarFestival; argument << what.mTerm << what.mZodiac; argument << what.mLunarLeapMonth; argument << what.mLunarDayName << what.mLunarMonthName; argument << what.mGanZhiDay << what.mGanZhiMonth << what.mGanZhiYear; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiDayInfo &what) { // qCDebug(CommonLogger) << "Streaming CaHuangLiDayInfo to QDBusArgument."; argument.beginStructure(); argument << what.mSuit << what.mAvoid; argument << what.mWorktime; argument << what.mLunarFestival << what.mSolarFestival; argument << what.mTerm << what.mZodiac; argument << what.mLunarLeapMonth; argument << what.mLunarDayName << what.mLunarMonthName; argument << what.mGanZhiDay << what.mGanZhiMonth << what.mGanZhiYear; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiDayInfo &what) { // qCDebug(CommonLogger) << "Streaming CaHuangLiDayInfo from QDBusArgument."; argument.beginStructure(); argument >> what.mSuit >> what.mAvoid; argument >> what.mWorktime; argument >> what.mLunarFestival >> what.mSolarFestival; argument >> what.mTerm >> what.mZodiac; argument >> what.mLunarLeapMonth; argument >> what.mLunarDayName >> what.mLunarMonthName; argument >> what.mGanZhiDay >> what.mGanZhiMonth >> what.mGanZhiYear; argument.endStructure(); return argument; } void CaHuangLiMonthInfo::registerMetaType() { // qCDebug(CommonLogger) << "Registering CaHuangLiMonthInfo meta type."; qRegisterMetaType(); qDBusRegisterMetaType(); } QString CaHuangLiMonthInfo::toJson() { // qCDebug(CommonLogger) << "Converting CaHuangLiMonthInfo to JSON string."; QJsonArray daysarr; QJsonDocument doc; QJsonObject obj; obj.insert("Days", mDays); obj.insert("FirstDayWeek", mFirstDayWeek); foreach (CaHuangLiDayInfo dayinfo, mCaLunarDayInfo) { // qCDebug(CommonLogger) << "Processing a day's info for JSON conversion."; QJsonObject dayobj; dayobj.insert("Suit", dayinfo.mSuit); dayobj.insert("Avoid", dayinfo.mAvoid); dayobj.insert("Worktime", dayinfo.mWorktime); dayobj.insert("LunarFestival", dayinfo.mLunarFestival); dayobj.insert("SolarFestival", dayinfo.mSolarFestival); dayobj.insert("Term", dayinfo.mTerm); dayobj.insert("Zodiac", dayinfo.mZodiac); dayobj.insert("LunarLeapMonth", dayinfo.mLunarLeapMonth); dayobj.insert("LunarDayName", dayinfo.mLunarDayName); dayobj.insert("LunarMonthName", dayinfo.mLunarMonthName); dayobj.insert("GanZhiDay", dayinfo.mGanZhiDay); dayobj.insert("GanZhiMonth", dayinfo.mGanZhiMonth); dayobj.insert("GanZhiYear", dayinfo.mGanZhiYear); daysarr.append(dayobj); } obj.insert("Datas", daysarr); doc.setObject(obj); QString strJson = QString::fromUtf8(doc.toJson(QJsonDocument::Compact)); return strJson; } void CaHuangLiMonthInfo::strJsonToInfo(const QString &strJson, bool &isVaild) { // qCDebug(CommonLogger) << "Parsing CaHuangLiMonthInfo from JSON string."; isVaild = true; QJsonParseError json_error; QJsonDocument jsonDoc(QJsonDocument::fromJson(strJson.toLocal8Bit(), &json_error)); if (json_error.error != QJsonParseError::NoError) { // qCDebug(CommonLogger) << "JSON parse error:" << json_error.errorString(); isVaild = false; return; } QJsonObject rootObj = jsonDoc.object(); //因为是预先定义好的JSONæ•°æ�®æ ¼å¼�,所以这里å�¯ä»¥è¿™æ ·è¯»å�– if (rootObj.contains("Days")) { // qCDebug(CommonLogger) << "Found and setting Days."; this->mDays = rootObj.value("Days").toInt(); } if (rootObj.contains("FirstDayWeek")) { // qCDebug(CommonLogger) << "Found and setting FirstDayWeek."; this->mFirstDayWeek = rootObj.value("FirstDayWeek").toInt(); } if (rootObj.contains("Datas")) { // qCDebug(CommonLogger) << "Found and processing Datas array."; QJsonArray subArray = rootObj.value("Datas").toArray(); for (int i = 0; i < subArray.size(); i++) { // qCDebug(CommonLogger) << "Processing array item at index" << i; QJsonObject subObj = subArray.at(i).toObject(); CaHuangLiDayInfo huangliday; huangliday.jsonObjectToInfo(subObj); this->mCaLunarDayInfo.append(huangliday); } } } void CaHuangLiMonthInfo::clear() { // qCDebug(CommonLogger) << "Clearing CaHuangLiMonthInfo."; this->mDays = 0; this->mCaLunarDayInfo.clear(); } QDebug operator<<(QDebug argument, const CaHuangLiMonthInfo &what) { // qCDebug(CommonLogger) << "Streaming CaHuangLiMonthInfo to QDebug."; argument << what.mDays << what.mFirstDayWeek; argument << what.mCaLunarDayInfo; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiMonthInfo &what) { // qCDebug(CommonLogger) << "Streaming CaHuangLiMonthInfo to QDBusArgument."; argument.beginStructure(); argument << what.mDays << what.mFirstDayWeek; argument << what.mCaLunarDayInfo; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiMonthInfo &what) { // qCDebug(CommonLogger) << "Streaming CaHuangLiMonthInfo from QDBusArgument."; argument.beginStructure(); argument >> what.mDays >> what.mFirstDayWeek; argument >> what.mCaLunarDayInfo; argument.endStructure(); return argument; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/huangliData/dbusdatastruct.h000066400000000000000000000077611523260663500310440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSDATASTRUCT_H #define DBUSDATASTRUCT_H #include #include class CaLunarDayInfo { public: CaLunarDayInfo() : mGanZhiYear("") , mGanZhiMonth("") , mGanZhiDay("") , mLunarMonthName("") , mLunarDayName("") , mLunarLeapMonth(0) , mZodiac("") , mTerm("") , mSolarFestival("") , mLunarFestival("") , mWorktime(0) { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaLunarDayInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarDayInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarDayInfo &what); public: QString mGanZhiYear; // 农历年的干支 QString mGanZhiMonth; // 农历月的干支 QString mGanZhiDay; // 农历日的干支 QString mLunarMonthName; // 农历月å�� QString mLunarDayName; // 农历日å�� qint32 mLunarLeapMonth; // 未使用 QString mZodiac; // 农历年的生肖 QString mTerm; // 农历节气 QString mSolarFestival; // 公历节日 QString mLunarFestival; // 农历节日 qint32 mWorktime; // 未使用 }; class CaLunarMonthInfo { public: CaLunarMonthInfo() : mFirstDayWeek(0) , mDays(0) { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaLunarMonthInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaLunarMonthInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaLunarMonthInfo &what); public: qint32 mFirstDayWeek; qint32 mDays; QList mCaLunarDayInfo; }; class CaHuangLiDayInfo { public: CaHuangLiDayInfo() : mGanZhiYear("") , mGanZhiMonth("") , mGanZhiDay("") , mLunarMonthName("") , mLunarDayName("") , mLunarLeapMonth(0) , mZodiac("") , mTerm("") , mSolarFestival("") , mLunarFestival("") , mWorktime(0) , mSuit("") , mAvoid("") { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaHuangLiDayInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiDayInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiDayInfo &what); QString toJson(); void strJsonToInfo(const QString &strJson, bool &isVaild); void jsonObjectToInfo(const QJsonObject &jsonObject); public: QString mGanZhiYear; //年干支 QString mGanZhiMonth; //月干支 QString mGanZhiDay; //日干支 QString mLunarMonthName; //农历月å��ç§° QString mLunarDayName; //农历日å��ç§° qint32 mLunarLeapMonth; //闰月 QString mZodiac; //生肖 QString mTerm; //农历节气 QString mSolarFestival; //阳历节日 QString mLunarFestival; //农历节日 qint32 mWorktime; //未使用 QString mSuit; //黄历宜 QString mAvoid; //黄历忌 }; class CaHuangLiMonthInfo { public: CaHuangLiMonthInfo() : mFirstDayWeek(0) , mDays(0) { } static void registerMetaType(); friend QDebug operator<<(QDebug argument, const CaHuangLiMonthInfo &what); friend QDBusArgument &operator<<(QDBusArgument &argument, const CaHuangLiMonthInfo &what); friend const QDBusArgument &operator>>(const QDBusArgument &argument, CaHuangLiMonthInfo &what); QString toJson(); void strJsonToInfo(const QString &strJson, bool &isVaild); void clear(); public: qint32 mFirstDayWeek; //第一天所在周 qint32 mDays; //æ¯�月天数 QVector mCaLunarDayInfo; }; Q_DECLARE_METATYPE(CaLunarDayInfo) Q_DECLARE_METATYPE(CaLunarMonthInfo) Q_DECLARE_METATYPE(CaHuangLiDayInfo) Q_DECLARE_METATYPE(CaHuangLiMonthInfo) #endif // DBUSDATASTRUCT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/huangliData/lunardatastruct.cpp000066400000000000000000000002361523260663500315510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunardatastruct.h" linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/huangliData/lunardatastruct.h000066400000000000000000000012161523260663500312150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARDATASTRUCT_H #define LUNARDATASTRUCT_H #include #include #include typedef struct HuangLi { qint64 ID = 0; // `json:"id"` // format: ("%s%02s%02s", year, month, day) QString Avoid {}; // `json:"avoid"` QString Suit {}; //`json:"suit"` } stHuangLi; typedef struct _tagHolidayInfo { QDate date; uint status; // 1: 休 2: è¡¥ç�­ } HolidayInfo; typedef struct _tagFestivalInfo { QVector listHoliday {}; } FestivalInfo; #endif // LUNARDATASTRUCT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/logger.cpp000066400000000000000000000051621523260663500253720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "logger.h" #include "commondef.h" #include #include #include #include DCORE_USE_NAMESPACE CalendarLogger::CalendarLogger(const QString &configId, QObject *parent) : QObject(parent), m_rules(""), m_config(nullptr) { QByteArray logRules = qgetenv("QT_LOGGING_RULES"); // qunsetenv 之å‰�一定ä¸�è¦�有任何日志打å�°ï¼Œå�¦åˆ™å�–消环境å�˜é‡�设置ä¸�会生效 qunsetenv("QT_LOGGING_RULES"); // set env rules first m_rules = logRules; // read dconfig (which contains default configuration) m_config = DConfig::create("org.deepin.dde.calendar", configId); if (m_config) { // DConfig contains default values, just read and append them logRules = m_config->value("log_rules").toByteArray(); appendRules(logRules); setRules(m_rules); // watch dconfig changes connect(m_config, &DConfig::valueChanged, this, [this](const QString &key) { qCInfo(CommonLogger) << "DConfig value changed:" << key; if (key == "log_rules") { setRules(m_config->value(key).toByteArray()); } }); } else { qCWarning(CommonLogger) << "Failed to create DConfig for org.deepin.dde.calendar"; setRules(m_rules); } } CalendarLogger::~CalendarLogger() { if (m_config) { m_config->deleteLater(); } } void CalendarLogger::initLogger() { // set log format and register console and file appenders const QString logFormat = "%{time}{yy-MM-ddTHH:mm:ss.zzz} [%{type:-7}] [%{category}] <%{function}:%{line}> %{message}"; DLogManager::setLogFormat(logFormat); // 为了兼容性 #if (DTK_VERSION >= DTK_VERSION_CHECK(5, 6, 8, 0)) DLogManager::registerJournalAppender(); #endif DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); } void CalendarLogger::setRules(const QString &rules) { auto tmpRules = rules; m_rules = tmpRules.replace(";", "\n"); QLoggingCategory::setFilterRules(m_rules); } void CalendarLogger::appendRules(const QString &rules) { QString tmpRules = rules; tmpRules = tmpRules.replace(";", "\n"); auto tmplist = tmpRules.split('\n'); for (int i = 0; i < tmplist.count(); i++) if (m_rules.contains(tmplist.at(i))) { tmplist.removeAt(i); i--; } if (tmplist.isEmpty()) return; m_rules.isEmpty() ? m_rules = tmplist.join("\n") : m_rules += "\n" + tmplist.join("\n"); } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/logger.h000066400000000000000000000013261523260663500250350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef CALENDARLOGGER_H #define CALENDARLOGGER_H #include #include DCORE_BEGIN_NAMESPACE class DConfig; DCORE_END_NAMESPACE class CalendarLogger : public QObject { Q_OBJECT public: explicit CalendarLogger(const QString &configId, QObject *parent = nullptr); ~CalendarLogger(); static void initLogger(); inline QString rules() const { return m_rules; } void setRules(const QString &rules); private: void appendRules(const QString &rules); private: QString m_rules; Dtk::Core::DConfig *m_config; }; #endif // CALENDARLOGGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/000077500000000000000000000000001523260663500267455ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/celestialbodies.cpp000066400000000000000000005032131523260663500326100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "celestialbodies.h" double GetEarthL0(double t) { double result = 0.0; result += 1.75347045673; result += 0.03341656456 * qCos(4.66925680417 + 6283.0758499914 * t); result += 0.00034894275 * qCos(4.62610241759 + 12566.1516999828 * t); result += 3.417571e-05 * qCos(2.82886579606 + 3.523118349 * t); result += 3.497056e-05 * qCos(2.74411800971 + 5753.3848848968 * t); result += 3.135896e-05 * qCos(3.62767041758 + 77713.7714681205 * t); result += 2.676218e-05 * qCos(4.41808351397 + 7860.4193924392 * t); result += 2.342687e-05 * qCos(6.13516237631 + 3930.2096962196 * t); result += 1.273166e-05 * qCos(2.03709655772 + 529.6909650946 * t); result += 1.324292e-05 * qCos(0.74246356352 + 11506.7697697936 * t); result += 9.01855e-06 * qCos(2.04505443513 + 26.2983197998 * t); result += 1.199167e-05 * qCos(1.10962944315 + 1577.3435424478 * t); result += 8.57223e-06 * qCos(3.50849156957 + 398.1490034082 * t); result += 7.79786e-06 * qCos(1.17882652114 + 5223.6939198022 * t); result += 9.9025e-06 * qCos(5.23268129594 + 5884.9268465832 * t); result += 7.53141e-06 * qCos(2.53339053818 + 5507.5532386674 * t); result += 5.05264e-06 * qCos(4.58292563052 + 18849.2275499742 * t); result += 4.92379e-06 * qCos(4.20506639861 + 775.522611324 * t); result += 3.56655e-06 * qCos(2.91954116867 + 0.0673103028 * t); result += 2.84125e-06 * qCos(1.89869034186 + 796.2980068164 * t); result += 2.4281e-06 * qCos(0.34481140906 + 5486.777843175 * t); result += 3.17087e-06 * qCos(5.84901952218 + 11790.6290886588 * t); result += 2.71039e-06 * qCos(0.31488607649 + 10977.078804699 * t); result += 2.0616e-06 * qCos(4.80646606059 + 2544.3144198834 * t); result += 2.05385e-06 * qCos(1.86947813692 + 5573.1428014331 * t); result += 2.02261e-06 * qCos(2.45767795458 + 6069.7767545534 * t); result += 1.26184e-06 * qCos(1.0830263021 + 20.7753954924 * t); result += 1.55516e-06 * qCos(0.83306073807 + 213.299095438 * t); result += 1.15132e-06 * qCos(0.64544911683 + 0.9803210682 * t); result += 1.02851e-06 * qCos(0.63599846727 + 4694.0029547076 * t); result += 1.01724e-06 * qCos(4.26679821365 + 7.1135470008 * t); result += 9.9206e-07 * qCos(6.20992940258 + 2146.1654164752 * t); result += 1.32212e-06 * qCos(3.41118275555 + 2942.4634232916 * t); result += 9.7607e-07 * qCos(0.6810127227 + 155.4203994342 * t); result += 8.5128e-07 * qCos(1.29870743025 + 6275.9623029906 * t); result += 7.4651e-07 * qCos(1.75508916159 + 5088.6288397668 * t); result += 1.01895e-06 * qCos(0.97569221824 + 15720.8387848784 * t); result += 8.4711e-07 * qCos(3.67080093025 + 71430.6956181291 * t); result += 7.3547e-07 * qCos(4.67926565481 + 801.8209311238 * t); result += 7.3874e-07 * qCos(3.50319443167 + 3154.6870848956 * t); result += 7.8756e-07 * qCos(3.03698313141 + 12036.4607348882 * t); result += 7.9637e-07 * qCos(1.807913307 + 17260.1546546904 * t); result += 8.5803e-07 * qCos(5.98322631256 + 161000.685737674 * t); result += 5.6963e-07 * qCos(2.78430398043 + 6286.5989683404 * t); result += 6.1148e-07 * qCos(1.81839811024 + 7084.8967811152 * t); result += 6.9627e-07 * qCos(0.83297596966 + 9437.762934887 * t); result += 5.6116e-07 * qCos(4.38694880779 + 14143.4952424306 * t); result += 6.2449e-07 * qCos(3.97763880587 + 8827.3902698748 * t); result += 5.1145e-07 * qCos(0.28306864501 + 5856.4776591154 * t); result += 5.5577e-07 * qCos(3.47006009062 + 6279.5527316424 * t); result += 4.1036e-07 * qCos(5.36817351402 + 8429.2412664666 * t); result += 5.1605e-07 * qCos(1.33282746983 + 1748.016413067 * t); result += 5.1992e-07 * qCos(0.18914945834 + 12139.5535091068 * t); result += 4.9e-07 * qCos(0.48735065033 + 1194.4470102246 * t); result += 3.92e-07 * qCos(6.16832995016 + 10447.3878396044 * t); result += 3.5566e-07 * qCos(1.77597314691 + 6812.766815086 * t); result += 3.677e-07 * qCos(6.04133859347 + 10213.285546211 * t); result += 3.6596e-07 * qCos(2.56955238628 + 1059.3819301892 * t); result += 3.3291e-07 * qCos(0.59309499459 + 17789.845619785 * t); result += 3.5954e-07 * qCos(1.70876111898 + 2352.8661537718 * t); result += 4.0938e-07 * qCos(2.39850881707 + 19651.048481098 * t); result += 3.0047e-07 * qCos(2.73975123935 + 1349.8674096588 * t); result += 3.0412e-07 * qCos(0.44294464135 + 83996.8473181119 * t); result += 2.3663e-07 * qCos(0.48473567763 + 8031.0922630584 * t); result += 2.3574e-07 * qCos(2.06527720049 + 3340.6124266998 * t); result += 2.1089e-07 * qCos(4.14825464101 + 951.7184062506 * t); result += 2.4738e-07 * qCos(0.21484762138 + 3.5904286518 * t); result += 2.5352e-07 * qCos(3.16470953405 + 4690.4798363586 * t); result += 2.282e-07 * qCos(5.22197888032 + 4705.7323075436 * t); result += 2.1419e-07 * qCos(1.42563735525 + 16730.4636895958 * t); result += 2.1891e-07 * qCos(5.55594302562 + 553.5694028424 * t); result += 1.7481e-07 * qCos(4.56052900359 + 135.0650800354 * t); result += 1.9925e-07 * qCos(5.22208471269 + 12168.0026965746 * t); result += 1.986e-07 * qCos(5.77470167653 + 6309.3741697912 * t); result += 2.03e-07 * qCos(0.37133792946 + 283.8593188652 * t); result += 1.4421e-07 * qCos(4.19315332546 + 242.728603974 * t); result += 1.6225e-07 * qCos(5.98837722564 + 11769.8536931664 * t); result += 1.5077e-07 * qCos(4.19567181073 + 6256.7775301916 * t); result += 1.9124e-07 * qCos(3.82219996949 + 23581.2581773176 * t); result += 1.8888e-07 * qCos(5.38626880969 + 149854.400134808 * t); result += 1.4346e-07 * qCos(3.72355084422 + 38.0276726358 * t); result += 1.7898e-07 * qCos(2.21490735647 + 13367.9726311066 * t); result += 1.2054e-07 * qCos(2.62229588349 + 955.5997416086 * t); result += 1.1287e-07 * qCos(0.17739328092 + 4164.311989613 * t); result += 1.3971e-07 * qCos(4.40138139996 + 6681.2248533996 * t); result += 1.3621e-07 * qCos(1.88934471407 + 7632.9432596502 * t); result += 1.2503e-07 * qCos(1.13052412208 + 5.5229243074 * t); result += 1.0498e-07 * qCos(5.35909518669 + 1592.5960136328 * t); result += 9.803e-08 * qCos(0.99947478995 + 11371.7046897582 * t); result += 9.22e-08 * qCos(4.57138609781 + 4292.3308329504 * t); result += 1.0327e-07 * qCos(6.19982566125 + 6438.4962494256 * t); result += 1.2003e-07 * qCos(1.003514567 + 632.7837393132 * t); result += 1.0827e-07 * qCos(0.32734520222 + 103.0927742186 * t); result += 8.356e-08 * qCos(4.53902685948 + 25132.3033999656 * t); result += 1.0005e-07 * qCos(6.0291496328 + 5746.271337896 * t); result += 8.409e-08 * qCos(3.29946744189 + 7234.794256242 * t); result += 8.006e-08 * qCos(5.82145271907 + 28.4491874678 * t); result += 1.0523e-07 * qCos(0.93871805506 + 11926.2544136688 * t); result += 7.686e-08 * qCos(3.12142363172 + 7238.6755916 * t); result += 9.378e-08 * qCos(2.62414241032 + 5760.4984318976 * t); result += 8.127e-08 * qCos(6.11228001785 + 4732.0306273434 * t); result += 9.232e-08 * qCos(0.48343968736 + 522.5774180938 * t); result += 9.802e-08 * qCos(5.24413991147 + 27511.4678735372 * t); result += 7.871e-08 * qCos(0.99590177926 + 5643.1785636774 * t); result += 8.123e-08 * qCos(6.2705301365 + 426.598190876 * t); result += 9.048e-08 * qCos(5.33686335897 + 6386.16862421 * t); result += 8.62e-08 * qCos(4.16538210888 + 7058.5984613154 * t); result += 6.297e-08 * qCos(4.71724819317 + 6836.6452528338 * t); result += 7.575e-08 * qCos(3.97382858911 + 11499.6562227928 * t); result += 7.756e-08 * qCos(2.95729056763 + 23013.5395395872 * t); result += 7.314e-08 * qCos(0.60652505806 + 11513.8833167944 * t); result += 5.955e-08 * qCos(2.87641047971 + 6283.14316029419 * t); result += 6.534e-08 * qCos(5.79072926033 + 18073.7049386502 * t); result += 7.188e-08 * qCos(3.99831508699 + 74.7815985673 * t); result += 7.346e-08 * qCos(4.38582365437 + 316.3918696566 * t); result += 5.413e-08 * qCos(5.39199024641 + 419.4846438752 * t); result += 5.127e-08 * qCos(2.36062848786 + 10973.55568635 * t); result += 7.056e-08 * qCos(0.32258441903 + 263.0839233728 * t); result += 6.625e-08 * qCos(3.66475158672 + 17298.1823273262 * t); result += 6.762e-08 * qCos(5.91132535899 + 90955.5516944961 * t); result += 4.938e-08 * qCos(5.73672165674 + 9917.6968745098 * t); result += 5.547e-08 * qCos(2.45152597661 + 12352.8526045448 * t); result += 5.958e-08 * qCos(3.32051344676 + 6283.0085396886 * t); result += 4.471e-08 * qCos(2.06385999536 + 7079.3738568078 * t); result += 6.153e-08 * qCos(1.45823331144 + 233141.314404362 * t); result += 4.348e-08 * qCos(4.4234217548 + 5216.5803728014 * t); result += 6.123e-08 * qCos(1.07494905258 + 19804.8272915828 * t); result += 4.488e-08 * qCos(3.6528503715 + 206.1855484372 * t); result += 4.02e-08 * qCos(0.83995823171 + 20.3553193988 * t); result += 5.188e-08 * qCos(4.06503864016 + 6208.2942514241 * t); result += 5.307e-08 * qCos(0.38217636096 + 31441.6775697568 * t); result += 3.785e-08 * qCos(2.34369213733 + 3.881335358 * t); result += 4.497e-08 * qCos(3.27230796845 + 11015.1064773348 * t); result += 4.132e-08 * qCos(0.92128915753 + 3738.761430108 * t); result += 3.521e-08 * qCos(5.97844807108 + 3894.1818295422 * t); result += 4.215e-08 * qCos(1.90601120623 + 245.8316462294 * t); result += 3.701e-08 * qCos(5.03069397926 + 536.8045120954 * t); result += 3.865e-08 * qCos(1.82634360607 + 11856.2186514245 * t); result += 3.652e-08 * qCos(1.01838584934 + 16200.7727245012 * t); result += 3.39e-08 * qCos(0.97785123922 + 8635.9420037632 * t); result += 3.737e-08 * qCos(2.95380107829 + 3128.3887650958 * t); result += 3.507e-08 * qCos(3.71291946325 + 6290.1893969922 * t); result += 3.086e-08 * qCos(3.64646921512 + 10.6366653498 * t); result += 3.397e-08 * qCos(1.10590684017 + 14712.317116458 * t); result += 3.334e-08 * qCos(0.83684924911 + 6496.3749454294 * t); result += 2.805e-08 * qCos(2.58504514144 + 14314.1681130498 * t); result += 3.65e-08 * qCos(1.08344142571 + 88860.0570709867 * t); result += 3.388e-08 * qCos(3.20185096055 + 5120.6011455836 * t); result += 3.252e-08 * qCos(3.47859752062 + 6133.5126528568 * t); result += 2.553e-08 * qCos(3.94869034189 + 1990.745017041 * t); result += 3.52e-08 * qCos(2.05559692878 + 244287.600007228 * t); result += 2.565e-08 * qCos(1.560717849 + 23543.2305046818 * t); result += 2.621e-08 * qCos(3.85639359951 + 266.6070417218 * t); result += 2.955e-08 * qCos(3.39692949667 + 9225.539273283 * t); result += 2.876e-08 * qCos(6.02635617464 + 154717.609887683 * t); result += 2.395e-08 * qCos(1.16131956403 + 10984.1923516998 * t); result += 3.161e-08 * qCos(1.32798718453 + 10873.9860304804 * t); result += 3.163e-08 * qCos(5.08946464629 + 21228.3920235458 * t); result += 2.361e-08 * qCos(4.27212906992 + 6040.3472460174 * t); result += 3.03e-08 * qCos(1.80209931347 + 35371.8872659764 * t); result += 2.343e-08 * qCos(3.576898605 + 10969.9652576982 * t); result += 2.618e-08 * qCos(2.57870156528 + 22483.8485744926 * t); result += 2.113e-08 * qCos(3.71393780256 + 65147.6197681377 * t); result += 2.019e-08 * qCos(0.81393923319 + 170.6728706192 * t); result += 2.003e-08 * qCos(0.38091017375 + 6172.869528772 * t); result += 2.506e-08 * qCos(3.74379142438 + 10575.4066829418 * t); result += 2.381e-08 * qCos(0.10581361289 + 7.046236698 * t); result += 1.949e-08 * qCos(4.86892513469 + 36.0278666774 * t); result += 2.074e-08 * qCos(4.2279477457 + 5650.2921106782 * t); result += 1.924e-08 * qCos(5.5946054986 + 6282.0955289232 * t); result += 1.949e-08 * qCos(1.07002512703 + 5230.807466803 * t); result += 1.988e-08 * qCos(5.19736046771 + 6262.300454499 * t); result += 1.887e-08 * qCos(3.74365662683 + 23.8784377478 * t); result += 1.787e-08 * qCos(1.25929682929 + 12559.038152982 * t); result += 1.883e-08 * qCos(1.90364058477 + 15.252471185 * t); result += 1.816e-08 * qCos(3.68083868442 + 15110.4661198662 * t); result += 1.701e-08 * qCos(4.4110589538 + 110.2063212194 * t); result += 1.99e-08 * qCos(3.93295788548 + 6206.8097787158 * t); result += 2.103e-08 * qCos(0.75354917468 + 13521.7514415914 * t); result += 1.774e-08 * qCos(0.48747535361 + 1551.045222648 * t); result += 1.882e-08 * qCos(0.86684493432 + 22003.9146348698 * t); result += 1.924e-08 * qCos(1.22898324132 + 709.9330485583 * t); result += 2.009e-08 * qCos(4.6285092198 + 6037.244203762 * t); result += 1.924e-08 * qCos(0.60231842508 + 6284.0561710596 * t); result += 1.596e-08 * qCos(3.98332956992 + 13916.0191096416 * t); result += 1.664e-08 * qCos(4.41939715469 + 8662.240323563 * t); result += 1.971e-08 * qCos(1.04560500503 + 18209.3302636602 * t); result += 1.942e-08 * qCos(4.31335979989 + 6244.9428143536 * t); result += 1.476e-08 * qCos(0.93271367331 + 2379.1644735716 * t); result += 1.81e-08 * qCos(0.49112137707 + 1.4844727083 * t); result += 1.346e-08 * qCos(1.51574702235 + 4136.9104335162 * t); result += 1.528e-08 * qCos(5.61835711404 + 6127.6554505572 * t); result += 1.791e-08 * qCos(3.22187270126 + 39302.096962196 * t); result += 1.747e-08 * qCos(3.05638656738 + 18319.5365848796 * t); result += 1.431e-08 * qCos(4.51153808594 + 20426.571092422 * t); result += 1.695e-08 * qCos(0.22047718414 + 25158.6017197654 * t); result += 1.242e-08 * qCos(4.46665769933 + 17256.6315363414 * t); result += 1.463e-08 * qCos(4.69242679213 + 14945.3161735544 * t); result += 1.205e-08 * qCos(1.86912144659 + 4590.910180489 * t); result += 1.192e-08 * qCos(2.74227166898 + 12569.6748183318 * t); result += 1.222e-08 * qCos(5.18120087482 + 5333.9002410216 * t); result += 1.39e-08 * qCos(5.42894648983 + 143571.324284816 * t); result += 1.473e-08 * qCos(1.70479245805 + 11712.9553182308 * t); result += 1.362e-08 * qCos(2.61069503292 + 6062.6632075526 * t); result += 1.148e-08 * qCos(6.0300180054 + 3634.6210245184 * t); result += 1.198e-08 * qCos(5.15294130422 + 10177.2576795336 * t); result += 1.266e-08 * qCos(0.11421493643 + 18422.6293590982 * t); result += 1.411e-08 * qCos(1.09908857534 + 3496.032826134 * t); result += 1.349e-08 * qCos(2.99805109633 + 17654.7805397496 * t); result += 1.253e-08 * qCos(2.79850152848 + 167283.761587666 * t); result += 1.311e-08 * qCos(1.60942984879 + 5481.2549188676 * t); result += 1.079e-08 * qCos(6.20304501787 + 3.2863574178 * t); result += 1.181e-08 * qCos(1.20653776978 + 131.5419616864 * t); result += 1.254e-08 * qCos(5.45103277798 + 6076.8903015542 * t); result += 1.035e-08 * qCos(2.32142722747 + 7342.4577801806 * t); result += 1.117e-08 * qCos(0.38838354256 + 949.1756089698 * t); result += 9.66e-09 * qCos(3.18341890851 + 11087.2851259184 * t); result += 1.171e-08 * qCos(3.39635049962 + 12562.6285816338 * t); result += 1.121e-08 * qCos(0.72627490378 + 220.4126424388 * t); result += 1.024e-08 * qCos(2.19378315386 + 11403.676995575 * t); result += 8.88e-09 * qCos(3.91173199285 + 4686.8894077068 * t); result += 9.1e-09 * qCos(1.98802695087 + 735.8765135318 * t); result += 8.3e-09 * qCos(0.48984915507 + 24072.9214697764 * t); result += 1.096e-08 * qCos(6.17377835617 + 5436.9930152402 * t); result += 9.08e-09 * qCos(0.44959639433 + 7477.522860216 * t); result += 9.74e-09 * qCos(1.52996238356 + 9623.6882766912 * t); result += 8.4e-09 * qCos(1.79543266333 + 5429.8794682394 * t); result += 7.78e-09 * qCos(6.17699177946 + 38.1330356378 * t); result += 7.76e-09 * qCos(4.09855402433 + 14.2270940016 * t); result += 1.068e-08 * qCos(4.64200173735 + 43232.3066584156 * t); result += 9.54e-09 * qCos(1.49988435748 + 1162.4747044078 * t); result += 9.07e-09 * qCos(0.86986870809 + 10344.2950653858 * t); result += 9.31e-09 * qCos(4.06044689031 + 28766.924424484 * t); result += 7.39e-09 * qCos(5.04368197372 + 639.897286314 * t); result += 9.37e-09 * qCos(3.4688469896 + 1589.0728952838 * t); result += 7.63e-09 * qCos(5.86304932998 + 16858.4825329332 * t); result += 9.53e-09 * qCos(4.20801492835 + 11190.377900137 * t); result += 7.08e-09 * qCos(1.7289998894 + 13095.8426650774 * t); result += 9.69e-09 * qCos(1.64439522215 + 29088.811415985 * t); result += 7.17e-09 * qCos(0.16688678895 + 11.729352836 * t); result += 9.62e-09 * qCos(3.53092337542 + 12416.5885028482 * t); result += 7.47e-09 * qCos(5.77866940346 + 12592.4500197826 * t); result += 6.72e-09 * qCos(1.91095796194 + 3.9321532631 * t); result += 6.71e-09 * qCos(5.46240843677 + 18052.9295431578 * t); result += 6.75e-09 * qCos(6.28311558823 + 4535.0594369244 * t); result += 6.84e-09 * qCos(0.3997501208 + 5849.3641121146 * t); result += 7.99e-09 * qCos(0.29851185294 + 12132.439962106 * t); result += 7.58e-09 * qCos(0.96370823331 + 1052.2683831884 * t); result += 7.82e-09 * qCos(5.33878339919 + 13517.8701062334 * t); result += 7.3e-09 * qCos(1.70106160291 + 17267.2682016912 * t); result += 7.49e-09 * qCos(2.59599901875 + 11609.8625440122 * t); result += 7.34e-09 * qCos(2.78417782952 + 640.8776073822 * t); result += 6.88e-09 * qCos(5.15048287468 + 16496.3613962024 * t); result += 7.7e-09 * qCos(1.62469589333 + 4701.1165017084 * t); result += 6.33e-09 * qCos(2.20587893893 + 25934.1243310894 * t); result += 7.6e-09 * qCos(4.21317219403 + 377.3736079158 * t); result += 5.84e-09 * qCos(2.13420121623 + 10557.5941608238 * t); result += 5.74e-09 * qCos(0.24250054587 + 9779.1086761254 * t); result += 5.73e-09 * qCos(3.16435264609 + 533.2140834436 * t); result += 6.85e-09 * qCos(3.19344289472 + 12146.6670561076 * t); result += 6.75e-09 * qCos(0.96179233959 + 10454.5013866052 * t); result += 6.48e-09 * qCos(1.46327342555 + 6268.8487559898 * t); result += 5.89e-09 * qCos(2.50543543638 + 3097.88382272579 * t); result += 5.51e-09 * qCos(5.28099026956 + 9388.0059094152 * t); result += 6.96e-09 * qCos(3.65342150016 + 4804.209275927 * t); result += 6.69e-09 * qCos(2.51030077026 + 2388.8940204492 * t); result += 5.5e-09 * qCos(0.06883864342 + 20199.094959633 * t); result += 6.29e-09 * qCos(4.13350995675 + 45892.730433157 * t); result += 6.78e-09 * qCos(6.09190163533 + 135.62532501 * t); result += 5.93e-09 * qCos(1.50136257618 + 226858.23855437 * t); result += 5.42e-09 * qCos(3.58573645173 + 6148.010769956 * t); result += 6.82e-09 * qCos(5.02203067788 + 17253.0411076896 * t); result += 5.65e-09 * qCos(4.2930923861 + 11933.3679606696 * t); result += 4.86e-09 * qCos(0.77746204893 + 27.4015560968 * t); result += 5.03e-09 * qCos(0.58963565969 + 15671.0817594066 * t); result += 6.16e-09 * qCos(4.06539884128 + 227.476132789 * t); result += 5.83e-09 * qCos(6.12695541996 + 18875.525869774 * t); result += 5.37e-09 * qCos(2.1505644098 + 21954.157609398 * t); result += 6.69e-09 * qCos(6.06986269566 + 47162.5163546352 * t); result += 4.75e-09 * qCos(0.4034384211 + 6915.8595893046 * t); result += 5.4e-09 * qCos(2.83444222174 + 5326.7866940208 * t); result += 5.3e-09 * qCos(5.26359885263 + 10988.808157535 * t); result += 5.82e-09 * qCos(3.24533095664 + 153.7788104848 * t); result += 6.41e-09 * qCos(3.24711791371 + 2107.0345075424 * t); result += 6.21e-09 * qCos(3.09698523779 + 33019.0211122046 * t); result += 4.66e-09 * qCos(3.14982372198 + 10440.2742926036 * t); result += 4.66e-09 * qCos(0.90708835657 + 5966.6839803348 * t); result += 5.28e-09 * qCos(0.8192645447 + 813.5502839598 * t); result += 6.03e-09 * qCos(3.81378921927 + 316428.228673915 * t); result += 5.59e-09 * qCos(1.81894804124 + 17996.0311682222 * t); result += 4.37e-09 * qCos(2.28625594435 + 6303.8512454838 * t); result += 5.18e-09 * qCos(4.86069178322 + 20597.2439630412 * t); result += 4.24e-09 * qCos(6.23520018693 + 6489.2613984286 * t); result += 5.18e-09 * qCos(6.17617826756 + 0.2438174835 * t); result += 4.04e-09 * qCos(5.72804304258 + 5642.1982426092 * t); result += 4.58e-09 * qCos(1.34117773915 + 6287.0080032545 * t); result += 5.48e-09 * qCos(5.6845445832 + 155427.542936241 * t); result += 5.47e-09 * qCos(1.03391472061 + 3646.3503773544 * t); result += 4.28e-09 * qCos(4.69800981138 + 846.0828347512 * t); result += 4.13e-09 * qCos(6.02520699406 + 6279.4854213396 * t); result += 5.34e-09 * qCos(3.03030638223 + 66567.4858652543 * t); result += 3.83e-09 * qCos(1.49056949125 + 19800.9459562248 * t); result += 4.1e-09 * qCos(5.28319622279 + 18451.078546566 * t); result += 3.52e-09 * qCos(4.68891600359 + 4907.3020501456 * t); result += 4.8e-09 * qCos(5.36572651091 + 348.924420448 * t); result += 3.44e-09 * qCos(5.89157452896 + 6546.1597733642 * t); result += 3.4e-09 * qCos(0.3755742644 + 13119.7211028252 * t); result += 4.34e-09 * qCos(4.98417785901 + 6702.5604938666 * t); result += 3.32e-09 * qCos(2.68902519126 + 29296.6153895786 * t); result += 4.48e-09 * qCos(2.16478480251 + 5905.7022420756 * t); result += 3.44e-09 * qCos(2.06546633735 + 49.7570254718 * t); result += 3.15e-09 * qCos(1.24023811803 + 4061.2192153944 * t); result += 3.24e-09 * qCos(2.30897526929 + 5017.508371365 * t); result += 4.13e-09 * qCos(0.17171692962 + 6286.6662786432 * t); result += 4.31e-09 * qCos(3.86601101393 + 12489.8856287072 * t); result += 3.49e-09 * qCos(4.55372342974 + 4933.2084403326 * t); result += 3.23e-09 * qCos(0.41971136084 + 10770.8932562618 * t); result += 3.41e-09 * qCos(2.68612860807 + 11.0457002639 * t); result += 3.16e-09 * qCos(3.52936906658 + 17782.7320727842 * t); result += 3.15e-09 * qCos(5.63357264999 + 568.8218740274 * t); result += 3.4e-09 * qCos(3.83571212349 + 10660.6869350424 * t); result += 2.97e-09 * qCos(0.62691416712 + 20995.3929664494 * t); result += 4.05e-09 * qCos(1.00085779471 + 16460.333529525 * t); result += 4.14e-09 * qCos(1.21998752076 + 51092.7260508548 * t); result += 3.36e-09 * qCos(4.71465945226 + 6179.9830757728 * t); result += 3.61e-09 * qCos(3.71227508354 + 28237.2334593894 * t); result += 3.85e-09 * qCos(6.21925225757 + 24356.7807886416 * t); result += 3.27e-09 * qCos(1.05606504715 + 11919.140866668 * t); result += 3.27e-09 * qCos(6.14222420989 + 6254.6266625236 * t); result += 2.68e-09 * qCos(2.47224339737 + 664.75604513 * t); result += 2.69e-09 * qCos(1.86207884109 + 23141.5583829246 * t); result += 3.45e-09 * qCos(0.93461290184 + 6058.7310542895 * t); result += 2.96e-09 * qCos(4.5168755718 + 6418.1409300268 * t); result += 3.53e-09 * qCos(4.50033653082 + 36949.2308084242 * t); result += 2.6e-09 * qCos(4.04963546305 + 6525.8044539654 * t); result += 2.98e-09 * qCos(2.20046722622 + 156137.475984799 * t); result += 2.53e-09 * qCos(3.49900838384 + 29864.334027309 * t); result += 2.54e-09 * qCos(2.44901693835 + 5331.3574437408 * t); result += 2.96e-09 * qCos(0.84347588787 + 5729.506447149 * t); result += 2.98e-09 * qCos(1.29194706125 + 22805.7355659936 * t); result += 2.41e-09 * qCos(2.00721280805 + 16737.5772365966 * t); result += 3.11e-09 * qCos(1.23668016334 + 6281.5913772831 * t); result += 2.4e-09 * qCos(2.51650377121 + 6245.0481773556 * t); result += 3.32e-09 * qCos(3.55576945724 + 7668.6374249425 * t); result += 2.64e-09 * qCos(4.44052061202 + 12964.300703391 * t); result += 2.57e-09 * qCos(1.79654471948 + 11080.1715789176 * t); result += 2.6e-09 * qCos(3.3307759842 + 5888.4499649322 * t); result += 2.85e-09 * qCos(0.3088636143 + 11823.1616394502 * t); result += 2.9e-09 * qCos(5.70141882483 + 77.673770428 * t); result += 2.55e-09 * qCos(4.0093966444 + 5881.4037282342 * t); result += 2.53e-09 * qCos(4.73318493678 + 16723.350142595 * t); result += 2.28e-09 * qCos(0.95333661324 + 5540.0857894588 * t); result += 3.19e-09 * qCos(1.38633229189 + 163096.180361183 * t); result += 2.24e-09 * qCos(1.65156322696 + 10027.9031957292 * t); result += 2.26e-09 * qCos(0.34106460604 + 17796.9591667858 * t); result += 2.36e-09 * qCos(4.19817431922 + 19.66976089979 * t); result += 2.8e-09 * qCos(4.1408026897 + 12539.853380183 * t); result += 2.75e-09 * qCos(5.50306930248 + 32.5325507914 * t); result += 2.23e-09 * qCos(5.23334210294 + 56.8983749356 * t); result += 2.17e-09 * qCos(6.08587881787 + 6805.6532680852 * t); result += 2.8e-09 * qCos(4.52472044653 + 6016.4688082696 * t); result += 2.27e-09 * qCos(5.06509843737 + 6277.552925684 * t); result += 2.26e-09 * qCos(5.17755154305 + 11720.0688652316 * t); result += 2.45e-09 * qCos(3.96486270306 + 22.7752014508 * t); result += 2.2e-09 * qCos(4.7207808197 + 6.62855890001 * t); result += 2.07e-09 * qCos(5.71701403951 + 41.5507909848 * t); result += 2.04e-09 * qCos(3.9122741125 + 2699.7348193176 * t); result += 2.09e-09 * qCos(0.86881969011 + 6321.1035226272 * t); result += 2e-09 * qCos(2.11984445273 + 4274.5183108324 * t); result += 2e-09 * qCos(5.39839888163 + 6019.9919266186 * t); result += 2.09e-09 * qCos(5.67606291663 + 11293.4706743556 * t); result += 2.52e-09 * qCos(1.64965729351 + 9380.9596727172 * t); result += 2.75e-09 * qCos(5.04826903506 + 73.297125859 * t); result += 2.08e-09 * qCos(1.88207277133 + 11300.5842213564 * t); result += 2.72e-09 * qCos(0.74640926842 + 1975.492545856 * t); result += 1.99e-09 * qCos(3.30836672397 + 22743.4093795164 * t); result += 2.69e-09 * qCos(4.48560812155 + 64471.9912417449 * t); result += 1.92e-09 * qCos(2.17464236325 + 5863.5912061162 * t); result += 2.28e-09 * qCos(5.85373115869 + 128.0188433374 * t); result += 2.61e-09 * qCos(2.64321183295 + 55022.9357470744 * t); result += 2.2e-09 * qCos(5.75012110079 + 29.429508536 * t); result += 1.87e-09 * qCos(4.03230554718 + 467.9649903544 * t); result += 2e-09 * qCos(5.60556112058 + 1066.49547719 * t); result += 2.31e-09 * qCos(1.09802712785 + 12341.8069042809 * t); result += 1.99e-09 * qCos(0.295006252 + 149.5631971346 * t); result += 2.49e-09 * qCos(5.10473210814 + 7875.6718636242 * t); result += 2.08e-09 * qCos(0.93013835019 + 14919.0178537546 * t); result += 1.79e-09 * qCos(0.87104393079 + 12721.572099417 * t); result += 2.03e-09 * qCos(1.56920753653 + 28286.9904848612 * t); result += 1.79e-09 * qCos(2.47036386443 + 16062.1845261168 * t); result += 1.98e-09 * qCos(3.54061588502 + 30.914125635 * t); result += 1.71e-09 * qCos(3.45356518113 + 5327.4761083828 * t); result += 1.83e-09 * qCos(0.72325421604 + 6272.0301497275 * t); result += 2.16e-09 * qCos(2.97174580686 + 19402.7969528166 * t); result += 1.68e-09 * qCos(2.51550550242 + 23937.856389741 * t); result += 1.95e-09 * qCos(0.09045393425 + 156.4007205024 * t); result += 1.79e-09 * qCos(4.4947179809 + 31415.379249957 * t); result += 2.16e-09 * qCos(0.42177594328 + 23539.7073863328 * t); result += 1.89e-09 * qCos(0.37542530191 + 9814.6041002912 * t); result += 2.18e-09 * qCos(2.36835880025 + 16627.3709153772 * t); result += 1.66e-09 * qCos(4.23182968446 + 16840.6700108152 * t); result += 2e-09 * qCos(2.02153258098 + 16097.6799502826 * t); result += 1.69e-09 * qCos(0.91318727 + 95.9792272178 * t); result += 2.11e-09 * qCos(5.73370637657 + 151.8972810852 * t); result += 2.04e-09 * qCos(0.42643085174 + 515.463871093 * t); result += 2.12e-09 * qCos(3.00233538977 + 12043.574281889 * t); result += 1.92e-09 * qCos(5.46153589821 + 6379.0550772092 * t); result += 1.65e-09 * qCos(1.38698167064 + 4171.4255366138 * t); result += 1.6e-09 * qCos(6.23798383332 + 202.2533951741 * t); result += 2.15e-09 * qCos(0.20889073407 + 5621.8429232104 * t); result += 1.81e-09 * qCos(4.12439203622 + 13341.6743113068 * t); result += 1.53e-09 * qCos(1.24460848836 + 29826.3063546732 * t); result += 1.5e-09 * qCos(3.12999753018 + 799.8211251654 * t); result += 1.75e-09 * qCos(4.55671604437 + 239424.390254353 * t); result += 1.92e-09 * qCos(1.33928820063 + 394.6258850592 * t); result += 1.49e-09 * qCos(2.65697593276 + 21.335640467 * t); result += 1.46e-09 * qCos(5.58021191726 + 412.3710968744 * t); result += 1.56e-09 * qCos(3.75650175503 + 12323.4230960088 * t); result += 1.43e-09 * qCos(3.75708566606 + 58864.5439181463 * t); result += 1.43e-09 * qCos(3.28248547724 + 29.8214381488 * t); result += 1.44e-09 * qCos(1.07862546598 + 1265.5674786264 * t); result += 1.48e-09 * qCos(0.23389236655 + 10021.8372800994 * t); result += 1.93e-09 * qCos(5.92751083086 + 40879.4405046438 * t); result += 1.4e-09 * qCos(4.97612440269 + 158.9435177832 * t); result += 1.48e-09 * qCos(2.61640453469 + 17157.0618804718 * t); result += 1.41e-09 * qCos(3.66871308723 + 26084.0218062162 * t); result += 1.47e-09 * qCos(5.09968173403 + 661.232926781 * t); result += 1.46e-09 * qCos(4.96885605695 + 57375.8019008462 * t); result += 1.42e-09 * qCos(0.78678347839 + 12779.4507954208 * t); result += 1.34e-09 * qCos(4.79432636012 + 111.1866422876 * t); result += 1.4e-09 * qCos(1.27748013377 + 107.6635239386 * t); result += 1.69e-09 * qCos(2.74893543762 + 26735.9452622132 * t); result += 1.65e-09 * qCos(3.95288000638 + 6357.8574485587 * t); result += 1.83e-09 * qCos(5.43418358741 + 369.6998159404 * t); result += 1.34e-09 * qCos(3.09132862833 + 17.812522118 * t); result += 1.32e-09 * qCos(3.05633896779 + 22490.9621214934 * t); result += 1.34e-09 * qCos(4.09472795832 + 6599.467719648 * t); result += 1.81e-09 * qCos(4.22950689891 + 966.9708774356 * t); result += 1.52e-09 * qCos(5.28885894415 + 12669.2444742014 * t); result += 1.5e-09 * qCos(5.86819430908 + 97238.6275444875 * t); result += 1.42e-09 * qCos(5.87266532526 + 22476.7350274918 * t); result += 1.45e-09 * qCos(5.07330784304 + 87.30820453981 * t); result += 1.33e-09 * qCos(5.65471067133 + 31.9723058168 * t); result += 1.24e-09 * qCos(2.83326217072 + 12566.2190102856 * t); result += 1.35e-09 * qCos(3.12861731644 + 32217.2001810808 * t); result += 1.37e-09 * qCos(0.86487461904 + 9924.8104215106 * t); result += 1.72e-09 * qCos(1.98369595114 + 174242.46596405 * t); result += 1.7e-09 * qCos(4.41115280254 + 327574.514276781 * t); result += 1.51e-09 * qCos(0.46542099527 + 39609.6545831656 * t); result += 1.48e-09 * qCos(2.13439571118 + 491.6632924588 * t); result += 1.53e-09 * qCos(3.78801830344 + 17363.247428909 * t); result += 1.65e-09 * qCos(5.31654110459 + 16943.7627850338 * t); result += 1.65e-09 * qCos(4.06747587817 + 58953.145443294 * t); result += 1.18e-09 * qCos(0.63846333239 + 6.0659156298 * t); result += 1.59e-09 * qCos(0.86086959274 + 221995.028801495 * t); result += 1.19e-09 * qCos(5.96432932413 + 1385.8952763362 * t); result += 1.14e-09 * qCos(5.16516114595 + 25685.872802808 * t); result += 1.12e-09 * qCos(3.39403722178 + 21393.5419698576 * t); result += 1.12e-09 * qCos(4.92889233335 + 56.8032621698 * t); result += 1.19e-09 * qCos(2.40637635942 + 18635.9284545362 * t); result += 1.15e-09 * qCos(0.23374479051 + 418.9243989006 * t); result += 1.22e-09 * qCos(0.93575234049 + 24492.4061136516 * t); result += 1.15e-09 * qCos(4.58880032176 + 26709.6469424134 * t); result += 1.3e-09 * qCos(4.85539251 + 22345.2603761082 * t); result += 1.4e-09 * qCos(1.09413073202 + 44809.6502008634 * t); result += 1.12e-09 * qCos(6.05401806281 + 433.7117378768 * t); result += 1.04e-09 * qCos(1.54931540602 + 127.9515330346 * t); result += 1.05e-09 * qCos(4.82620858888 + 33794.5437235286 * t); result += 1.02e-09 * qCos(4.12448497391 + 15664.0355227086 * t); result += 1.07e-09 * qCos(4.67919356465 + 77690.7595057385 * t); result += 1.18e-09 * qCos(4.5232017012 + 19004.6479494084 * t); result += 1.07e-09 * qCos(5.71774478555 + 77736.7834305025 * t); result += 1.43e-09 * qCos(1.81201813018 + 4214.0690150848 * t); result += 1.25e-09 * qCos(1.14419195615 + 625.6701923124 * t); result += 1.24e-09 * qCos(3.27736514057 + 12566.08438968 * t); result += 1.1e-09 * qCos(1.08682570828 + 2787.0430238574 * t); result += 1.05e-09 * qCos(1.78318141871 + 18139.2945014159 * t); result += 1.02e-09 * qCos(4.75119578149 + 12242.6462833254 * t); result += 1.37e-09 * qCos(1.43510636754 + 86464.6133168312 * t); result += 1.01e-09 * qCos(4.91289409429 + 401.6721217572 * t); result += 1.29e-09 * qCos(1.23567904485 + 12029.3471878874 * t); result += 1.38e-09 * qCos(2.45654707999 + 7576.560073574 * t); result += 1.03e-09 * qCos(0.40004073416 + 90279.9231681033 * t); result += 1.08e-09 * qCos(0.9898977494 + 5636.0650166766 * t); result += 1.17e-09 * qCos(5.17362872063 + 34520.3093093808 * t); result += 1e-09 * qCos(3.95534628189 + 5547.1993364596 * t); result += 9.8e-10 * qCos(1.28118280598 + 21548.9623692918 * t); result += 9.7e-10 * qCos(3.34717130592 + 16310.9790457206 * t); result += 9.8e-10 * qCos(4.37041908717 + 34513.2630726828 * t); result += 1.25e-09 * qCos(2.7216443296 + 24065.8079227756 * t); result += 1.02e-09 * qCos(0.66938025772 + 10239.5838660108 * t); result += 1.19e-09 * qCos(1.21689479331 + 1478.8665740644 * t); result += 9.4e-10 * qCos(1.99595224256 + 13362.4497067992 * t); result += 9.4e-10 * qCos(4.30965982872 + 26880.3198130326 * t); result += 9.5e-10 * qCos(2.89807657534 + 34911.412076091 * t); result += 1.06e-09 * qCos(1.0015665359 + 16522.6597160022 * t); result += 9.7e-10 * qCos(0.89642320201 + 71980.6335747312 * t); result += 1.16e-09 * qCos(4.19967201116 + 206.7007372966 * t); result += 9.9e-10 * qCos(1.37437847718 + 1039.0266107904 * t); result += 1.26e-09 * qCos(3.21642544972 + 305281.943071049 * t); result += 9.4e-10 * qCos(0.6899787606 + 7834.1210726394 * t); result += 9.4e-10 * qCos(5.58132218606 + 3104.9300594238 * t); result += 9.5e-10 * qCos(3.0382374111 + 8982.810669309 * t); result += 1.08e-09 * qCos(0.52696637156 + 276.7457718644 * t); result += 1.24e-09 * qCos(3.43899862683 + 172146.97134054 * t); result += 1.02e-09 * qCos(1.04031728553 + 95143.1329209781 * t); result += 1.04e-09 * qCos(3.39218586218 + 290.972865866 * t); result += 1.1e-09 * qCos(3.68205877433 + 22380.755800274 * t); result += 1.17e-09 * qCos(0.78475956902 + 83286.9142695536 * t); result += 8.3e-10 * qCos(0.18241793425 + 15141.390794312 * t); result += 8.9e-10 * qCos(4.45371820659 + 792.7748884674 * t); result += 8.2e-10 * qCos(4.80703651241 + 6819.8803620868 * t); result += 8.7e-10 * qCos(3.43122851097 + 27707.5424942948 * t); result += 1.01e-09 * qCos(5.32081603011 + 2301.58581590939 * t); result += 8.2e-10 * qCos(0.87060089842 + 10241.2022911672 * t); result += 8.6e-10 * qCos(4.61919461931 + 36147.4098773004 * t); result += 9.5e-10 * qCos(2.87032884659 + 23020.653086588 * t); result += 8.8e-10 * qCos(3.2113316569 + 33326.5787331742 * t); result += 8e-10 * qCos(1.84900424847 + 21424.4666443034 * t); result += 1.01e-09 * qCos(4.18796434479 + 30666.1549584328 * t); result += 1.07e-09 * qCos(5.77864921649 + 34115.1140692746 * t); result += 1.04e-09 * qCos(1.08739495962 + 6288.5987742988 * t); result += 1.1e-09 * qCos(3.32898859416 + 72140.6286666874 * t); result += 8.7e-10 * qCos(4.40657711727 + 142.1786270362 * t); result += 1.09e-09 * qCos(1.94546030825 + 24279.1070182136 * t); result += 8.7e-10 * qCos(4.32472045435 + 742.9900605326 * t); result += 1.07e-09 * qCos(4.91580912547 + 277.0349937414 * t); result += 8.8e-10 * qCos(2.10180220766 + 26482.1708096244 * t); result += 8.6e-10 * qCos(4.01887374432 + 12491.3701014155 * t); result += 1.06e-09 * qCos(5.49092372854 + 62883.3551395136 * t); result += 8e-10 * qCos(6.19781316983 + 6709.6740408674 * t); result += 8.8e-10 * qCos(2.09872810657 + 238004.524157236 * t); result += 8.3e-10 * qCos(4.90662164029 + 51.28033786241 * t); result += 9.5e-10 * qCos(4.13387406591 + 18216.443810661 * t); result += 7.8e-10 * qCos(6.0694939168 + 148434.534037691 * t); result += 7.9e-10 * qCos(3.03048221644 + 838.9692877504 * t); result += 7.4e-10 * qCos(5.49813051211 + 29026.4852295078 * t); result += 7.3e-10 * qCos(3.05008665738 + 567.7186377304 * t); result += 8.4e-10 * qCos(0.46604373274 + 45.1412196366 * t); result += 9.3e-10 * qCos(2.52267536308 + 48739.859897083 * t); result += 7.6e-10 * qCos(1.76418124905 + 41654.9631159678 * t); result += 6.7e-10 * qCos(5.77851227793 + 6311.5250374592 * t); result += 6.2e-10 * qCos(3.32967880172 + 15508.6151232744 * t); result += 7.9e-10 * qCos(5.59773841328 + 71960.3865832237 * t); result += 5.7e-10 * qCos(3.90629505268 + 5999.2165311262 * t); result += 6.1e-10 * qCos(0.05695043232 + 7856.89627409019 * t); result += 6.1e-10 * qCos(5.63297958433 + 7863.9425107882 * t); result += 6.5e-10 * qCos(3.72178394016 + 12573.2652469836 * t); result += 5.7e-10 * qCos(4.18217219541 + 26087.9031415742 * t); result += 6.6e-10 * qCos(3.92262333487 + 69853.3520756813 * t); result += 5.3e-10 * qCos(5.51119362045 + 77710.2483497715 * t); result += 5.3e-10 * qCos(4.88573986961 + 77717.2945864695 * t); result += 6.2e-10 * qCos(2.88876342225 + 9411.4646150872 * t); result += 5.1e-10 * qCos(1.12657183874 + 82576.9812209953 * t); result += 4.5e-10 * qCos(2.95671076719 + 24602.612434871 * t); result += 4e-10 * qCos(5.55145719241 + 12565.1713789146 * t); result += 3.9e-10 * qCos(1.20838190039 + 18842.1140029734 * t); result += 4.5e-10 * qCos(3.18590558749 + 45585.1728121874 * t); result += 4.9e-10 * qCos(2.44790934886 + 13613.804277336 * t); return result; } double GetEarthL1(double t) { double result = 0.0; result += 6283.31966747491; result += 0.00206058863 * qCos(2.67823455584 + 6283.0758499914 * t); result += 4.30343e-05 * qCos(2.63512650414 + 12566.1516999828 * t); result += 4.25264e-06 * qCos(1.59046980729 + 3.523118349 * t); result += 1.08977e-06 * qCos(2.96618001993 + 1577.3435424478 * t); result += 9.3478e-07 * qCos(2.59212835365 + 18849.2275499742 * t); result += 1.19261e-06 * qCos(5.79557487799 + 26.2983197998 * t); result += 7.2122e-07 * qCos(1.13846158196 + 529.6909650946 * t); result += 6.7768e-07 * qCos(1.87472304791 + 398.1490034082 * t); result += 6.7327e-07 * qCos(4.40918235168 + 5507.5532386674 * t); result += 5.9027e-07 * qCos(2.8879703846 + 5223.6939198022 * t); result += 5.5976e-07 * qCos(2.17471680261 + 155.4203994342 * t); result += 4.5407e-07 * qCos(0.39803079805 + 796.2980068164 * t); result += 3.6369e-07 * qCos(0.46624739835 + 775.522611324 * t); result += 2.8958e-07 * qCos(2.64707383882 + 7.1135470008 * t); result += 1.9097e-07 * qCos(1.84628332577 + 5486.777843175 * t); result += 2.0844e-07 * qCos(5.34138275149 + 0.9803210682 * t); result += 1.8508e-07 * qCos(4.96855124577 + 213.299095438 * t); result += 1.6233e-07 * qCos(0.03216483047 + 2544.3144198834 * t); result += 1.7293e-07 * qCos(2.99116864949 + 6275.9623029906 * t); result += 1.5832e-07 * qCos(1.43049285325 + 2146.1654164752 * t); result += 1.4615e-07 * qCos(1.20532366323 + 10977.078804699 * t); result += 1.1877e-07 * qCos(3.25804815607 + 5088.6288397668 * t); result += 1.1514e-07 * qCos(2.07502418155 + 4694.0029547076 * t); result += 9.721e-08 * qCos(4.23925472239 + 1349.8674096588 * t); result += 9.969e-08 * qCos(1.30262991097 + 6286.5989683404 * t); result += 9.452e-08 * qCos(2.69957062864 + 242.728603974 * t); result += 1.2461e-07 * qCos(2.83432285512 + 1748.016413067 * t); result += 1.1808e-07 * qCos(5.2737979048 + 1194.4470102246 * t); result += 8.577e-08 * qCos(5.64475868067 + 951.7184062506 * t); result += 1.0641e-07 * qCos(0.76614199202 + 553.5694028424 * t); result += 7.576e-08 * qCos(5.30062664886 + 2352.8661537718 * t); result += 5.834e-08 * qCos(1.76649917904 + 1059.3819301892 * t); result += 6.385e-08 * qCos(2.65033984967 + 9437.762934887 * t); result += 5.223e-08 * qCos(5.66135767624 + 71430.6956181291 * t); result += 5.305e-08 * qCos(0.90857521574 + 3154.6870848956 * t); result += 6.101e-08 * qCos(4.66632584188 + 4690.4798363586 * t); result += 4.33e-08 * qCos(0.24102555403 + 6812.766815086 * t); result += 5.041e-08 * qCos(1.42490103709 + 6438.4962494256 * t); result += 4.259e-08 * qCos(0.77355900599 + 10447.3878396044 * t); result += 5.198e-08 * qCos(1.85353197345 + 801.8209311238 * t); result += 3.744e-08 * qCos(2.00119516488 + 8031.0922630584 * t); result += 3.558e-08 * qCos(2.42901552681 + 14143.4952424306 * t); result += 3.372e-08 * qCos(3.86210700128 + 1592.5960136328 * t); result += 3.374e-08 * qCos(0.88776219727 + 12036.4607348882 * t); result += 3.175e-08 * qCos(3.18785710594 + 4705.7323075436 * t); result += 3.221e-08 * qCos(0.61599835472 + 8429.2412664666 * t); result += 4.132e-08 * qCos(5.23992859705 + 7084.8967811152 * t); result += 2.97e-08 * qCos(6.07026318493 + 4292.3308329504 * t); result += 2.9e-08 * qCos(2.32464208411 + 20.3553193988 * t); result += 3.504e-08 * qCos(4.79975694359 + 6279.5527316424 * t); result += 2.95e-08 * qCos(1.43108874817 + 5746.271337896 * t); result += 2.697e-08 * qCos(4.80368225199 + 7234.794256242 * t); result += 2.531e-08 * qCos(6.22290682655 + 6836.6452528338 * t); result += 2.745e-08 * qCos(0.93466065396 + 5760.4984318976 * t); result += 3.25e-08 * qCos(3.39954640038 + 7632.9432596502 * t); result += 2.277e-08 * qCos(5.00277837672 + 17789.845619785 * t); result += 2.075e-08 * qCos(3.95534978634 + 10213.285546211 * t); result += 2.061e-08 * qCos(2.22411683077 + 5856.4776591154 * t); result += 2.252e-08 * qCos(5.67166499885 + 11499.6562227928 * t); result += 2.148e-08 * qCos(5.20184578235 + 11513.8833167944 * t); result += 1.886e-08 * qCos(0.53198320577 + 3340.6124266998 * t); result += 1.875e-08 * qCos(4.73511970207 + 83996.8473181119 * t); result += 2.06e-08 * qCos(2.54987293999 + 25132.3033999656 * t); result += 1.794e-08 * qCos(1.47435409831 + 4164.311989613 * t); result += 1.778e-08 * qCos(3.02473091781 + 5.5229243074 * t); result += 2.029e-08 * qCos(0.90960209983 + 6256.7775301916 * t); result += 2.075e-08 * qCos(2.26767270157 + 522.5774180938 * t); result += 1.772e-08 * qCos(3.02622802353 + 5753.3848848968 * t); result += 1.569e-08 * qCos(6.12410242782 + 5216.5803728014 * t); result += 1.59e-08 * qCos(4.63713748247 + 3.2863574178 * t); result += 1.542e-08 * qCos(4.20004448567 + 13367.9726311066 * t); result += 1.427e-08 * qCos(1.19088061711 + 3894.1818295422 * t); result += 1.375e-08 * qCos(3.09301252193 + 135.0650800354 * t); result += 1.359e-08 * qCos(4.24532506641 + 426.598190876 * t); result += 1.34e-08 * qCos(5.76511818622 + 6040.3472460174 * t); result += 1.284e-08 * qCos(3.08524663344 + 5643.1785636774 * t); result += 1.25e-08 * qCos(3.07748157144 + 11926.2544136688 * t); result += 1.551e-08 * qCos(3.07665451458 + 6681.2248533996 * t); result += 1.268e-08 * qCos(2.09196018331 + 6290.1893969922 * t); result += 1.144e-08 * qCos(3.24444699514 + 12168.0026965746 * t); result += 1.248e-08 * qCos(3.44504937285 + 536.8045120954 * t); result += 1.118e-08 * qCos(2.31829670425 + 16730.4636895958 * t); result += 1.105e-08 * qCos(5.31966001019 + 23.8784377478 * t); result += 1.051e-08 * qCos(3.75015946014 + 7860.4193924392 * t); result += 1.025e-08 * qCos(2.44688534235 + 1990.745017041 * t); result += 9.62e-09 * qCos(0.81771017882 + 3.881335358 * t); result += 9.1e-09 * qCos(0.41727865299 + 7079.3738568078 * t); result += 8.83e-09 * qCos(5.16833917651 + 11790.6290886588 * t); result += 9.57e-09 * qCos(4.07673573735 + 6127.6554505572 * t); result += 1.11e-08 * qCos(3.90096793825 + 11506.7697697936 * t); result += 8.02e-09 * qCos(3.88778875582 + 10973.55568635 * t); result += 7.8e-09 * qCos(2.39934293755 + 1589.0728952838 * t); result += 7.58e-09 * qCos(1.30034364248 + 103.0927742186 * t); result += 7.49e-09 * qCos(4.962758033 + 6496.3749454294 * t); result += 7.65e-09 * qCos(3.36312388424 + 36.0278666774 * t); result += 9.15e-09 * qCos(5.41543742089 + 206.1855484372 * t); result += 7.76e-09 * qCos(2.57589093871 + 11371.7046897582 * t); result += 7.72e-09 * qCos(3.98369209464 + 955.5997416086 * t); result += 7.49e-09 * qCos(5.17890001805 + 10969.9652576982 * t); result += 8.06e-09 * qCos(0.34218864254 + 9917.6968745098 * t); result += 7.28e-09 * qCos(5.20962563787 + 38.0276726358 * t); result += 6.85e-09 * qCos(2.77592961854 + 20.7753954924 * t); result += 6.36e-09 * qCos(4.28242193632 + 28.4491874678 * t); result += 6.08e-09 * qCos(5.63278508906 + 10984.1923516998 * t); result += 7.04e-09 * qCos(5.60738823665 + 3738.761430108 * t); result += 6.85e-09 * qCos(0.38876148682 + 15.252471185 * t); result += 6.01e-09 * qCos(0.73489602442 + 419.4846438752 * t); result += 7.16e-09 * qCos(2.65279791438 + 6309.3741697912 * t); result += 5.84e-09 * qCos(5.54502568227 + 17298.1823273262 * t); result += 6.5e-09 * qCos(1.13379656406 + 7058.5984613154 * t); result += 6.88e-09 * qCos(2.59683891779 + 3496.032826134 * t); result += 4.85e-09 * qCos(0.44467180946 + 12352.8526045448 * t); result += 5.28e-09 * qCos(2.74936967681 + 3930.2096962196 * t); result += 5.97e-09 * qCos(5.27668281777 + 10575.4066829418 * t); result += 5.83e-09 * qCos(3.1892906781 + 4732.0306273434 * t); result += 5.26e-09 * qCos(5.01697321546 + 5884.9268465832 * t); result += 5.4e-09 * qCos(1.29175137075 + 640.8776073822 * t); result += 4.73e-09 * qCos(5.4995330697 + 5230.807466803 * t); result += 4.06e-09 * qCos(5.21248452189 + 220.4126424388 * t); result += 3.95e-09 * qCos(1.87474483222 + 16200.7727245012 * t); result += 3.7e-09 * qCos(3.84921354713 + 18073.7049386502 * t); result += 3.67e-09 * qCos(0.88533542778 + 6283.14316029419 * t); result += 3.79e-09 * qCos(0.37983009325 + 10177.2576795336 * t); result += 3.56e-09 * qCos(3.84145204913 + 11712.9553182308 * t); result += 3.74e-09 * qCos(5.01577520608 + 7.046236698 * t); result += 3.81e-09 * qCos(4.30250406634 + 6062.6632075526 * t); result += 4.71e-09 * qCos(0.86381834647 + 6069.7767545534 * t); result += 3.67e-09 * qCos(1.32943839763 + 6283.0085396886 * t); result += 4.6e-09 * qCos(5.19667219575 + 6284.0561710596 * t); result += 3.33e-09 * qCos(5.54256205741 + 4686.8894077068 * t); result += 3.41e-09 * qCos(4.36522989934 + 7238.6755916 * t); result += 3.36e-09 * qCos(4.00205876835 + 3097.88382272579 * t); result += 3.59e-09 * qCos(6.22679790284 + 245.8316462294 * t); result += 3.07e-09 * qCos(2.35299010924 + 170.6728706192 * t); result += 3.43e-09 * qCos(3.77164927143 + 6076.8903015542 * t); result += 2.96e-09 * qCos(5.44152227481 + 17260.1546546904 * t); result += 3.28e-09 * qCos(0.13837875384 + 11015.1064773348 * t); result += 2.68e-09 * qCos(1.1390455063 + 12569.6748183318 * t); result += 2.63e-09 * qCos(0.00538633678 + 4136.9104335162 * t); result += 2.82e-09 * qCos(5.0439983748 + 7477.522860216 * t); result += 2.88e-09 * qCos(3.13401177517 + 12559.038152982 * t); result += 2.59e-09 * qCos(0.93882269387 + 5642.1982426092 * t); result += 2.92e-09 * qCos(1.98420020514 + 12132.439962106 * t); result += 2.47e-09 * qCos(3.84244798532 + 5429.8794682394 * t); result += 2.45e-09 * qCos(5.70467521726 + 65147.6197681377 * t); result += 2.41e-09 * qCos(0.99480969552 + 3634.6210245184 * t); result += 2.46e-09 * qCos(3.06168069935 + 110.2063212194 * t); result += 2.39e-09 * qCos(6.11855909114 + 11856.2186514245 * t); result += 2.63e-09 * qCos(0.66348415419 + 21228.3920235458 * t); result += 2.62e-09 * qCos(1.51070507866 + 12146.6670561076 * t); result += 2.3e-09 * qCos(1.75927314884 + 9779.1086761254 * t); result += 2.23e-09 * qCos(2.00967043606 + 6172.869528772 * t); result += 2.46e-09 * qCos(1.10411690865 + 6282.0955289232 * t); result += 2.21e-09 * qCos(3.03945240854 + 8635.9420037632 * t); result += 2.14e-09 * qCos(4.03840869663 + 14314.1681130498 * t); result += 2.36e-09 * qCos(5.4691507058 + 13916.0191096416 * t); result += 2.24e-09 * qCos(4.68408089456 + 24072.9214697764 * t); result += 2.12e-09 * qCos(2.13695625494 + 5849.3641121146 * t); result += 2.07e-09 * qCos(3.07724246401 + 11.729352836 * t); result += 2.07e-09 * qCos(6.10306282747 + 23543.2305046818 * t); result += 2.66e-09 * qCos(1.00709566823 + 2388.8940204492 * t); result += 2.17e-09 * qCos(6.27837036335 + 17267.2682016912 * t); result += 2.04e-09 * qCos(2.34615348695 + 266.6070417218 * t); result += 1.95e-09 * qCos(5.55015549753 + 6133.5126528568 * t); result += 1.88e-09 * qCos(2.52667166175 + 6525.8044539654 * t); result += 1.85e-09 * qCos(0.90960768344 + 18319.5365848796 * t); result += 1.77e-09 * qCos(1.73429218289 + 154717.609887683 * t); result += 1.87e-09 * qCos(4.76483647432 + 4535.0594369244 * t); result += 1.86e-09 * qCos(4.63080493407 + 10440.2742926036 * t); result += 2.15e-09 * qCos(2.8125545456 + 7342.4577801806 * t); result += 1.72e-09 * qCos(1.45551888559 + 9225.539273283 * t); result += 1.62e-09 * qCos(3.30661909388 + 639.897286314 * t); result += 1.68e-09 * qCos(2.17671416605 + 27.4015560968 * t); result += 1.6e-09 * qCos(1.68164180475 + 15110.4661198662 * t); result += 1.58e-09 * qCos(0.13519771874 + 13095.8426650774 * t); result += 1.83e-09 * qCos(0.56281322071 + 13517.8701062334 * t); result += 1.79e-09 * qCos(3.58450811616 + 87.30820453981 * t); result += 1.52e-09 * qCos(2.84070476818 + 5650.2921106782 * t); result += 1.82e-09 * qCos(0.44065530624 + 17253.0411076896 * t); result += 1.6e-09 * qCos(5.95767264171 + 4701.1165017084 * t); result += 1.42e-09 * qCos(1.4629013752 + 11087.2851259184 * t); result += 1.42e-09 * qCos(2.04464036087 + 20426.571092422 * t); result += 1.31e-09 * qCos(5.40912137746 + 2699.7348193176 * t); result += 1.44e-09 * qCos(2.07312090485 + 25158.6017197654 * t); result += 1.47e-09 * qCos(6.15106982168 + 9623.6882766912 * t); result += 1.41e-09 * qCos(5.55739979498 + 10454.5013866052 * t); result += 1.35e-09 * qCos(0.06098110407 + 16723.350142595 * t); result += 1.24e-09 * qCos(5.81218025669 + 17256.6315363414 * t); result += 1.24e-09 * qCos(2.36293551623 + 4933.2084403326 * t); result += 1.26e-09 * qCos(3.47435905118 + 22483.8485744926 * t); result += 1.59e-09 * qCos(5.63954754618 + 5729.506447149 * t); result += 1.23e-09 * qCos(3.92815963256 + 17996.0311682222 * t); result += 1.48e-09 * qCos(3.02509280598 + 1551.045222648 * t); result += 1.2e-09 * qCos(5.91904349732 + 6206.8097787158 * t); result += 1.34e-09 * qCos(3.11122937825 + 21954.157609398 * t); result += 1.19e-09 * qCos(5.5214112345 + 709.9330485583 * t); result += 1.22e-09 * qCos(3.00813429479 + 19800.9459562248 * t); result += 1.27e-09 * qCos(1.37618620001 + 14945.3161735544 * t); result += 1.41e-09 * qCos(2.56889468729 + 1052.2683831884 * t); result += 1.23e-09 * qCos(2.83671175442 + 11919.140866668 * t); result += 1.18e-09 * qCos(0.81934438215 + 5331.3574437408 * t); result += 1.51e-09 * qCos(2.68731829165 + 11769.8536931664 * t); result += 1.19e-09 * qCos(5.08835797638 + 5481.2549188676 * t); result += 1.53e-09 * qCos(2.46021790779 + 11933.3679606696 * t); result += 1.08e-09 * qCos(1.04936452145 + 11403.676995575 * t); result += 1.28e-09 * qCos(0.99794735107 + 8827.3902698748 * t); result += 1.44e-09 * qCos(2.54869747042 + 227.476132789 * t); result += 1.5e-09 * qCos(4.50631437136 + 2379.1644735716 * t); result += 1.07e-09 * qCos(1.79272017026 + 13119.7211028252 * t); result += 1.07e-09 * qCos(4.43556814486 + 18422.6293590982 * t); result += 1.09e-09 * qCos(0.29269062317 + 16737.5772365966 * t); result += 1.41e-09 * qCos(3.18979826258 + 6262.300454499 * t); result += 1.22e-09 * qCos(4.23040027813 + 29.429508536 * t); result += 1.11e-09 * qCos(5.16954029551 + 17782.7320727842 * t); result += 1e-09 * qCos(3.52213872761 + 18052.9295431578 * t); result += 1.08e-09 * qCos(1.08514212991 + 16858.4825329332 * t); result += 1.06e-09 * qCos(1.9608524841 + 74.7815985673 * t); result += 1.1e-09 * qCos(2.30582372873 + 16460.333529525 * t); result += 9.7e-10 * qCos(3.5091894021 + 5333.9002410216 * t); result += 9.9e-10 * qCos(3.56417337974 + 735.8765135318 * t); result += 9.4e-10 * qCos(5.01857894228 + 3128.3887650958 * t); result += 9.7e-10 * qCos(1.65579893894 + 533.2140834436 * t); result += 9.2e-10 * qCos(0.89217162285 + 29296.6153895786 * t); result += 1.23e-09 * qCos(3.16062050433 + 9380.9596727172 * t); result += 1.02e-09 * qCos(1.20493500565 + 23020.653086588 * t); result += 8.8e-10 * qCos(2.21296088224 + 12721.572099417 * t); result += 8.9e-10 * qCos(1.5426472031 + 20199.094959633 * t); result += 1.13e-09 * qCos(4.8332070787 + 16496.3613962024 * t); result += 1.21e-09 * qCos(6.19860353182 + 9388.0059094152 * t); result += 8.9e-10 * qCos(4.08082274765 + 22805.7355659936 * t); result += 9.8e-10 * qCos(1.0918183283 + 12043.574281889 * t); result += 8.6e-10 * qCos(1.13655027605 + 143571.324284816 * t); result += 8.8e-10 * qCos(5.96980472191 + 107.6635239386 * t); result += 8.2e-10 * qCos(5.01340404594 + 22003.9146348698 * t); result += 9.4e-10 * qCos(1.69615700473 + 23006.4259925864 * t); result += 8.1e-10 * qCos(3.00657814365 + 2118.7638603784 * t); result += 9.8e-10 * qCos(1.39215287161 + 8662.240323563 * t); result += 7.7e-10 * qCos(3.3355519084 + 15720.8387848784 * t); result += 8.2e-10 * qCos(5.86880116464 + 2787.0430238574 * t); result += 7.6e-10 * qCos(5.67183650604 + 14.2270940016 * t); result += 8.1e-10 * qCos(6.16619455699 + 1039.0266107904 * t); result += 7.6e-10 * qCos(3.21449884756 + 111.1866422876 * t); result += 7.8e-10 * qCos(1.37531518377 + 21947.1113727 * t); result += 7.4e-10 * qCos(3.58814195051 + 11609.8625440122 * t); result += 7.7e-10 * qCos(4.84846488388 + 22743.4093795164 * t); result += 9e-10 * qCos(1.48869013606 + 15671.0817594066 * t); result += 8.2e-10 * qCos(3.48618399109 + 29088.811415985 * t); result += 6.9e-10 * qCos(3.55746476593 + 4590.910180489 * t); result += 6.9e-10 * qCos(1.93625656075 + 135.62532501 * t); result += 7e-10 * qCos(2.66548322237 + 18875.525869774 * t); result += 6.9e-10 * qCos(5.41478093731 + 26735.9452622132 * t); result += 7.9e-10 * qCos(5.15154513662 + 12323.4230960088 * t); result += 9.4e-10 * qCos(3.62899392448 + 77713.7714681205 * t); result += 7.8e-10 * qCos(4.17011182047 + 1066.49547719 * t); result += 7.1e-10 * qCos(3.89435637865 + 22779.4372461938 * t); result += 6.3e-10 * qCos(4.53968787714 + 8982.810669309 * t); result += 6.9e-10 * qCos(0.96028230548 + 14919.0178537546 * t); result += 7.6e-10 * qCos(3.29092216589 + 2942.4634232916 * t); result += 6.3e-10 * qCos(4.09167842893 + 16062.1845261168 * t); result += 6.5e-10 * qCos(3.34580407184 + 51.28033786241 * t); result += 6.5e-10 * qCos(5.75757544877 + 52670.0695933026 * t); result += 6.8e-10 * qCos(5.75884067555 + 21424.4666443034 * t); result += 5.7e-10 * qCos(5.4512239985 + 12592.4500197826 * t); result += 5.7e-10 * qCos(5.25043362558 + 20995.3929664494 * t); result += 7.3e-10 * qCos(0.53299090807 + 2301.58581590939 * t); result += 7e-10 * qCos(4.31243357502 + 19402.7969528166 * t); result += 6.7e-10 * qCos(2.53852336668 + 377.3736079158 * t); result += 5.6e-10 * qCos(3.20816844695 + 24889.5747959916 * t); result += 5.3e-10 * qCos(3.17816599142 + 18451.078546566 * t); result += 5.3e-10 * qCos(3.61529270216 + 77.673770428 * t); result += 5.3e-10 * qCos(0.45467549335 + 30666.1549584328 * t); result += 6.1e-10 * qCos(0.14807288453 + 23013.5395395872 * t); result += 5.1e-10 * qCos(3.32803972907 + 56.8983749356 * t); result += 5.2e-10 * qCos(3.41177624177 + 23141.5583829246 * t); result += 5.8e-10 * qCos(3.13638677202 + 309.2783226558 * t); result += 7e-10 * qCos(2.50592323465 + 31415.379249957 * t); result += 5.2e-10 * qCos(5.10673376738 + 17796.9591667858 * t); result += 6.7e-10 * qCos(6.27917920454 + 22345.2603761082 * t); result += 5e-10 * qCos(0.42577644151 + 25685.872802808 * t); result += 4.8e-10 * qCos(0.70204553333 + 1162.4747044078 * t); result += 6.6e-10 * qCos(3.64350022359 + 15265.8865193004 * t); result += 5e-10 * qCos(5.7438291744 + 19.66976089979 * t); result += 5e-10 * qCos(4.69825387775 + 28237.2334593894 * t); result += 4.7e-10 * qCos(5.74015846442 + 12139.5535091068 * t); result += 5.4e-10 * qCos(1.97301333704 + 23581.2581773176 * t); result += 4.9e-10 * qCos(4.98223579027 + 10021.8372800994 * t); result += 4.6e-10 * qCos(5.41431705539 + 33019.0211122046 * t); result += 5.1e-10 * qCos(1.23882053879 + 12539.853380183 * t); result += 4.6e-10 * qCos(2.41369976086 + 98068.5367163054 * t); result += 4.4e-10 * qCos(0.80750593746 + 167283.761587666 * t); result += 4.5e-10 * qCos(4.39613584445 + 433.7117378768 * t); result += 4.4e-10 * qCos(2.57358208785 + 12964.300703391 * t); result += 4.6e-10 * qCos(0.26142733448 + 11.0457002639 * t); result += 4.5e-10 * qCos(2.46230645202 + 51868.2486621788 * t); result += 4.8e-10 * qCos(0.89551707131 + 56600.2792895222 * t); result += 5.7e-10 * qCos(1.8641670701 + 25287.7237993998 * t); result += 4.2e-10 * qCos(5.26377513431 + 26084.0218062162 * t); result += 4.9e-10 * qCos(3.17757670611 + 6303.8512454838 * t); result += 5.2e-10 * qCos(3.65266055509 + 7872.1487452752 * t); result += 4e-10 * qCos(1.81891629936 + 34596.3646546524 * t); result += 4.3e-10 * qCos(1.94164978061 + 1903.4368125012 * t); result += 4.1e-10 * qCos(0.74461854136 + 23937.856389741 * t); result += 4.8e-10 * qCos(6.26034008181 + 28286.9904848612 * t); result += 4.5e-10 * qCos(5.4557501753 + 60530.4889857418 * t); result += 4e-10 * qCos(2.92105728682 + 21548.9623692918 * t); result += 4e-10 * qCos(0.04502010161 + 38526.574350872 * t); result += 5.3e-10 * qCos(3.64791042082 + 11925.2740926006 * t); result += 4.1e-10 * qCos(5.04048954693 + 27832.0382192832 * t); result += 4.2e-10 * qCos(5.19292937193 + 19004.6479494084 * t); result += 4e-10 * qCos(2.57120233428 + 24356.7807886416 * t); result += 3.8e-10 * qCos(3.49190341464 + 226858.23855437 * t); result += 3.9e-10 * qCos(4.61184303844 + 95.9792272178 * t); result += 4.3e-10 * qCos(2.20648228147 + 13521.7514415914 * t); result += 4e-10 * qCos(5.83461945819 + 16193.6591775004 * t); result += 4.5e-10 * qCos(3.73714372195 + 7875.6718636242 * t); result += 4.3e-10 * qCos(1.14078465002 + 49.7570254718 * t); result += 3.7e-10 * qCos(1.29390383811 + 310.8407988684 * t); result += 3.8e-10 * qCos(0.9597092595 + 664.75604513 * t); result += 3.7e-10 * qCos(4.27532649462 + 6709.6740408674 * t); result += 3.8e-10 * qCos(2.20108541046 + 28628.3362260996 * t); result += 3.9e-10 * qCos(0.85957361635 + 16522.6597160022 * t); result += 4e-10 * qCos(4.35214003837 + 48739.859897083 * t); result += 3.6e-10 * qCos(1.68167662194 + 10344.2950653858 * t); result += 4e-10 * qCos(5.13217319067 + 15664.0355227086 * t); result += 3.6e-10 * qCos(3.72187132496 + 30774.5016425748 * t); result += 3.6e-10 * qCos(3.32158458257 + 16207.886271502 * t); result += 4.5e-10 * qCos(3.94202418608 + 10988.808157535 * t); result += 3.9e-10 * qCos(1.51948786199 + 12029.3471878874 * t); result += 2.6e-10 * qCos(3.8768588318 + 6262.7205305926 * t); result += 2.4e-10 * qCos(4.91804163466 + 19651.048481098 * t); result += 2.3e-10 * qCos(0.29300197709 + 13362.4497067992 * t); result += 2.1e-10 * qCos(3.18605672363 + 6277.552925684 * t); result += 2.1e-10 * qCos(6.07546891132 + 18139.2945014159 * t); result += 2.2e-10 * qCos(2.31199937177 + 6303.4311693902 * t); result += 2.1e-10 * qCos(3.58418394393 + 18209.3302636602 * t); result += 2.6e-10 * qCos(2.068012969 + 12573.2652469836 * t); result += 2.1e-10 * qCos(1.56857722317 + 13341.6743113068 * t); result += 2.4e-10 * qCos(5.72605158675 + 29864.334027309 * t); result += 2.4e-10 * qCos(1.40237993205 + 14712.317116458 * t); result += 2.5e-10 * qCos(5.71466092822 + 25934.1243310894 * t); return result; } double GetEarthL2(double t) { double result = 0.0; result += 0.0005291887; result += 8.719837e-05 * qCos(1.07209665242 + 6283.0758499914 * t); result += 3.09125e-06 * qCos(0.86728818832 + 12566.1516999828 * t); result += 2.7339e-07 * qCos(0.05297871691 + 3.523118349 * t); result += 1.6334e-07 * qCos(5.18826691036 + 26.2983197998 * t); result += 1.5752e-07 * qCos(3.6845788943 + 155.4203994342 * t); result += 9.541e-08 * qCos(0.75742297675 + 18849.2275499742 * t); result += 8.937e-08 * qCos(2.05705419118 + 77713.7714681205 * t); result += 6.952e-08 * qCos(0.8267330541 + 775.522611324 * t); result += 5.064e-08 * qCos(4.66284525271 + 1577.3435424478 * t); result += 4.061e-08 * qCos(1.03057162962 + 7.1135470008 * t); result += 3.463e-08 * qCos(5.14074632811 + 796.2980068164 * t); result += 3.169e-08 * qCos(6.05291851171 + 5507.5532386674 * t); result += 3.02e-08 * qCos(1.19246506441 + 242.728603974 * t); result += 2.886e-08 * qCos(6.11652627155 + 529.6909650946 * t); result += 3.81e-08 * qCos(3.4405080349 + 5573.1428014331 * t); result += 2.714e-08 * qCos(0.30637881025 + 398.1490034082 * t); result += 2.371e-08 * qCos(4.38118838167 + 5223.6939198022 * t); result += 2.538e-08 * qCos(2.27992810679 + 553.5694028424 * t); result += 2.079e-08 * qCos(3.75435330484 + 0.9803210682 * t); result += 1.675e-08 * qCos(0.90216407959 + 951.7184062506 * t); result += 1.534e-08 * qCos(5.75900462759 + 1349.8674096588 * t); result += 1.224e-08 * qCos(2.97328088405 + 2146.1654164752 * t); result += 1.449e-08 * qCos(4.3641591397 + 1748.016413067 * t); result += 1.341e-08 * qCos(3.72061130861 + 1194.4470102246 * t); result += 1.254e-08 * qCos(2.94846826628 + 6438.4962494256 * t); result += 9.99e-09 * qCos(5.98640014468 + 6286.5989683404 * t); result += 9.17e-09 * qCos(4.79788687522 + 5088.6288397668 * t); result += 8.28e-09 * qCos(3.31321076572 + 213.299095438 * t); result += 1.103e-08 * qCos(1.27104454479 + 161000.685737674 * t); result += 7.62e-09 * qCos(3.41582762988 + 5486.777843175 * t); result += 1.044e-08 * qCos(0.60409577691 + 3154.6870848956 * t); result += 8.87e-09 * qCos(5.23465144638 + 7084.8967811152 * t); result += 6.45e-09 * qCos(1.60096192515 + 2544.3144198834 * t); result += 6.81e-09 * qCos(3.43155669169 + 4694.0029547076 * t); result += 6.05e-09 * qCos(2.47806340546 + 10977.078804699 * t); result += 7.06e-09 * qCos(6.19393222575 + 4690.4798363586 * t); result += 6.43e-09 * qCos(1.98042503148 + 801.8209311238 * t); result += 5.02e-09 * qCos(1.44394375363 + 6836.6452528338 * t); result += 4.9e-09 * qCos(2.34129524194 + 1592.5960136328 * t); result += 4.58e-09 * qCos(1.30876448575 + 4292.3308329504 * t); result += 4.31e-09 * qCos(0.03526421494 + 7234.794256242 * t); result += 3.79e-09 * qCos(3.17030522615 + 6309.3741697912 * t); result += 3.48e-09 * qCos(0.99049550009 + 6040.3472460174 * t); result += 3.86e-09 * qCos(1.57019797263 + 71430.6956181291 * t); result += 3.47e-09 * qCos(0.67013291338 + 1059.3819301892 * t); result += 4.58e-09 * qCos(3.81499443681 + 149854.400134808 * t); result += 3.02e-09 * qCos(1.91760044838 + 10447.3878396044 * t); result += 3.07e-09 * qCos(3.55343347416 + 8031.0922630584 * t); result += 3.95e-09 * qCos(4.93701776616 + 7632.9432596502 * t); result += 3.14e-09 * qCos(3.18093696547 + 2352.8661537718 * t); result += 2.82e-09 * qCos(4.41936437052 + 9437.762934887 * t); result += 2.76e-09 * qCos(2.71314254553 + 3894.1818295422 * t); result += 2.98e-09 * qCos(2.5203747421 + 6127.6554505572 * t); result += 2.3e-09 * qCos(1.37790215549 + 4705.7323075436 * t); result += 2.52e-09 * qCos(0.55330133471 + 6279.5527316424 * t); result += 2.55e-09 * qCos(5.26570187369 + 6812.766815086 * t); result += 2.75e-09 * qCos(0.67264264272 + 25132.3033999656 * t); result += 1.78e-09 * qCos(0.92820785174 + 1990.745017041 * t); result += 2.21e-09 * qCos(0.63897368842 + 6256.7775301916 * t); result += 1.55e-09 * qCos(0.77319790838 + 14143.4952424306 * t); result += 1.5e-09 * qCos(2.40470465561 + 426.598190876 * t); result += 1.96e-09 * qCos(6.06877865012 + 640.8776073822 * t); result += 1.37e-09 * qCos(2.21679460145 + 8429.2412664666 * t); result += 1.27e-09 * qCos(3.26094223174 + 17789.845619785 * t); result += 1.28e-09 * qCos(5.47237279946 + 12036.4607348882 * t); result += 1.22e-09 * qCos(2.16291082757 + 10213.285546211 * t); result += 1.18e-09 * qCos(0.45789822268 + 7058.5984613154 * t); result += 1.41e-09 * qCos(2.34932647403 + 11506.7697697936 * t); result += 1e-09 * qCos(0.85621569847 + 6290.1893969922 * t); result += 9.2e-10 * qCos(5.10587476002 + 7079.3738568078 * t); result += 1.26e-09 * qCos(2.65428307012 + 88860.0570709867 * t); result += 1.06e-09 * qCos(5.85646710022 + 7860.4193924392 * t); result += 8.4e-10 * qCos(3.57457554262 + 16730.4636895958 * t); result += 8.9e-10 * qCos(4.21433259618 + 83996.8473181119 * t); result += 9.7e-10 * qCos(5.57938280855 + 13367.9726311066 * t); result += 1.02e-09 * qCos(2.05853060226 + 87.30820453981 * t); result += 8e-10 * qCos(4.73792651816 + 11926.2544136688 * t); result += 8e-10 * qCos(5.41418965044 + 10973.55568635 * t); result += 1.06e-09 * qCos(4.10978997399 + 3496.032826134 * t); result += 1.02e-09 * qCos(3.62650006043 + 244287.600007228 * t); result += 7.5e-10 * qCos(4.89483161769 + 5643.1785636774 * t); result += 8.7e-10 * qCos(0.42863750683 + 11015.1064773348 * t); result += 6.9e-10 * qCos(1.8890876072 + 10177.2576795336 * t); result += 8.9e-10 * qCos(1.35567273119 + 6681.2248533996 * t); result += 6.6e-10 * qCos(0.99455837265 + 6525.8044539654 * t); result += 6.7e-10 * qCos(5.5124099707 + 3097.88382272579 * t); result += 7.6e-10 * qCos(2.72016814799 + 4164.311989613 * t); result += 6.3e-10 * qCos(1.4434990254 + 9917.6968745098 * t); result += 7.8e-10 * qCos(3.51469733747 + 11856.2186514245 * t); result += 8.5e-10 * qCos(0.50956043858 + 10575.4066829418 * t); result += 6.7e-10 * qCos(3.62043033405 + 16496.3613962024 * t); result += 5.5e-10 * qCos(5.24637517308 + 3340.6124266998 * t); result += 4.8e-10 * qCos(5.43966777314 + 20426.571092422 * t); result += 6.4e-10 * qCos(5.79535817813 + 2388.8940204492 * t); result += 4.6e-10 * qCos(5.43499966519 + 6275.9623029906 * t); result += 5e-10 * qCos(3.86263598617 + 5729.506447149 * t); result += 4.4e-10 * qCos(1.52269529228 + 12168.0026965746 * t); result += 5.7e-10 * qCos(4.96352373486 + 14945.3161735544 * t); result += 4.5e-10 * qCos(1.0086123016 + 8635.9420037632 * t); result += 4.3e-10 * qCos(3.30685683359 + 9779.1086761254 * t); result += 4.2e-10 * qCos(0.6348125893 + 2699.7348193176 * t); result += 4.1e-10 * qCos(5.67996766641 + 11712.9553182308 * t); result += 5.6e-10 * qCos(4.34024451468 + 90955.5516944961 * t); result += 4.1e-10 * qCos(5.81722212845 + 709.9330485583 * t); result += 5.3e-10 * qCos(6.17052087143 + 233141.314404362 * t); result += 3.7e-10 * qCos(3.12495025087 + 16200.7727245012 * t); result += 3.5e-10 * qCos(5.76973458495 + 12569.6748183318 * t); result += 3.7e-10 * qCos(0.31656444326 + 24356.7807886416 * t); result += 3.5e-10 * qCos(0.96229051027 + 17298.1823273262 * t); result += 3.3e-10 * qCos(5.23130355867 + 5331.3574437408 * t); result += 3.5e-10 * qCos(0.62517020593 + 25158.6017197654 * t); result += 3.5e-10 * qCos(0.80004512129 + 13916.0191096416 * t); result += 3.7e-10 * qCos(2.89336088688 + 12721.572099417 * t); result += 3e-10 * qCos(4.50198402401 + 23543.2305046818 * t); result += 3e-10 * qCos(5.31355708693 + 18319.5365848796 * t); result += 2.9e-10 * qCos(3.47275229977 + 13119.7211028252 * t); result += 2.9e-10 * qCos(3.11002782516 + 4136.9104335162 * t); result += 3.2e-10 * qCos(5.52273255667 + 5753.3848848968 * t); result += 3.5e-10 * qCos(3.7969999668 + 143571.324284816 * t); result += 2.6e-10 * qCos(1.50634201907 + 154717.609887683 * t); result += 3e-10 * qCos(3.53519084118 + 6284.0561710596 * t); result += 2.3e-10 * qCos(4.41808025967 + 5884.9268465832 * t); result += 2.5e-10 * qCos(1.38477355808 + 65147.6197681377 * t); result += 2.3e-10 * qCos(3.49782549797 + 7477.522860216 * t); result += 1.9e-10 * qCos(3.14329413716 + 6496.3749454294 * t); result += 1.9e-10 * qCos(2.20135125199 + 18073.7049386502 * t); result += 1.9e-10 * qCos(4.95020255309 + 3930.2096962196 * t); result += 1.9e-10 * qCos(0.57998702747 + 31415.379249957 * t); result += 2.1e-10 * qCos(1.75474323399 + 12139.5535091068 * t); result += 1.9e-10 * qCos(3.92233070499 + 19651.048481098 * t); result += 1.4e-10 * qCos(0.98131213224 + 12559.038152982 * t); result += 1.9e-10 * qCos(4.93309333729 + 2942.4634232916 * t); result += 1.6e-10 * qCos(5.55997534558 + 8827.3902698748 * t); result += 1.3e-10 * qCos(1.68808165516 + 4535.0594369244 * t); result += 1.3e-10 * qCos(0.33982116161 + 4933.2084403326 * t); result += 1.2e-10 * qCos(1.85426309994 + 5856.4776591154 * t); result += 1e-10 * qCos(4.82763996845 + 13095.8426650774 * t); result += 1.1e-10 * qCos(5.38005490571 + 11790.6290886588 * t); result += 1e-10 * qCos(1.40815507226 + 10988.808157535 * t); result += 1.1e-10 * qCos(3.05005267431 + 17260.1546546904 * t); result += 1e-10 * qCos(4.93364992366 + 12352.8526045448 * t); return result; } double GetEarthL3(double t) { double result = 0.0; result += 2.89226e-06 * qCos(5.84384198723 + 6283.0758499914 * t); result += 3.4955e-07; result += 1.6819e-07 * qCos(5.48766912348 + 12566.1516999828 * t); result += 2.962e-08 * qCos(5.19577265202 + 155.4203994342 * t); result += 1.288e-08 * qCos(4.72200252235 + 3.523118349 * t); result += 6.35e-09 * qCos(5.96925937141 + 242.728603974 * t); result += 7.14e-09 * qCos(5.30045809128 + 18849.2275499742 * t); result += 4.02e-09 * qCos(3.78682982419 + 553.5694028424 * t); result += 7.2e-10 * qCos(4.2976812618 + 6286.5989683404 * t); result += 6.7e-10 * qCos(0.90721687647 + 6127.6554505572 * t); result += 3.6e-10 * qCos(5.24029648014 + 6438.4962494256 * t); result += 2.4e-10 * qCos(5.16003960716 + 25132.3033999656 * t); result += 2.3e-10 * qCos(3.01921570335 + 6309.3741697912 * t); result += 1.7e-10 * qCos(5.82863573502 + 6525.8044539654 * t); result += 1.7e-10 * qCos(3.6777286393 + 71430.6956181291 * t); result += 9e-11 * qCos(4.58467294499 + 1577.3435424478 * t); result += 8e-11 * qCos(1.40626662824 + 11856.2186514245 * t); result += 8e-11 * qCos(5.07561257196 + 6256.7775301916 * t); result += 7e-11 * qCos(2.82473374405 + 83996.8473181119 * t); result += 5e-11 * qCos(2.71488713339 + 10977.078804699 * t); result += 5e-11 * qCos(3.76879847273 + 12036.4607348882 * t); result += 5e-11 * qCos(4.28412873331 + 6275.9623029906 * t); return result; } double GetEarthL4(double t) { double result = 0.0; result -= -1.14084e-06; result += 7.717e-08 * qCos(4.13446589358 + 6283.0758499914 * t); result += 7.65e-09 * qCos(3.83803776214 + 12566.1516999828 * t); result += 4.2e-09 * qCos(0.41925861858 + 155.4203994342 * t); result += 4e-10 * qCos(3.5984758584 + 18849.2275499742 * t); result += 4.1e-10 * qCos(3.14398414077 + 3.523118349 * t); result += 3.5e-10 * qCos(5.00298940826 + 5573.1428014331 * t); result += 1.3e-10 * qCos(0.48794833701 + 77713.7714681205 * t); result += 1e-10 * qCos(5.6480176635 + 6127.6554505572 * t); result += 8e-11 * qCos(2.84160570605 + 161000.685737674 * t); result += 2e-11 * qCos(0.54912904658 + 6438.4962494256 * t); return result; } double GetEarthL5(double t) { double result = 0.0; result -= -8.78e-09; result += 1.72e-09 * qCos(2.7657906951 + 6283.0758499914 * t); result += 5e-10 * qCos(2.01353298182 + 155.4203994342 * t); result += 2.8e-10 * qCos(2.21496423926 + 12566.1516999828 * t); result += 5e-11 * qCos(1.75600058765 + 18849.2275499742 * t); return result; } double GetEarthB0(double t) { double result = 0.0; result += 2.7962e-06 * qCos(3.19870156017 + 84334.6615813083 * t); result += 1.01643e-06 * qCos(5.42248619256 + 5507.5532386674 * t); result += 8.0445e-07 * qCos(3.88013204458 + 5223.6939198022 * t); result += 4.3806e-07 * qCos(3.70444689758 + 2352.8661537718 * t); result += 3.1933e-07 * qCos(4.00026369781 + 1577.3435424478 * t); result += 2.2724e-07 * qCos(3.9847383156 + 1047.7473117547 * t); result += 1.6392e-07 * qCos(3.56456119782 + 5856.4776591154 * t); result += 1.8141e-07 * qCos(4.98367470263 + 6283.0758499914 * t); result += 1.4443e-07 * qCos(3.70275614914 + 9437.762934887 * t); result += 1.4304e-07 * qCos(3.41117857525 + 10213.285546211 * t); result += 1.1246e-07 * qCos(4.8282069053 + 14143.4952424306 * t); result += 1.09e-07 * qCos(2.08574562327 + 6812.766815086 * t); result += 9.714e-08 * qCos(3.47303947752 + 4694.0029547076 * t); result += 1.0367e-07 * qCos(4.05663927946 + 71092.8813549327 * t); result += 8.775e-08 * qCos(4.44016515669 + 5753.3848848968 * t); result += 8.366e-08 * qCos(4.9925151218 + 7084.8967811152 * t); result += 6.921e-08 * qCos(4.32559054073 + 6275.9623029906 * t); result += 9.145e-08 * qCos(1.14182646613 + 6620.8901131878 * t); result += 7.194e-08 * qCos(3.60193205752 + 529.6909650946 * t); result += 7.698e-08 * qCos(5.55425745881 + 167621.575850862 * t); result += 5.285e-08 * qCos(2.48446991566 + 4705.7323075436 * t); result += 5.208e-08 * qCos(6.24992674537 + 18073.7049386502 * t); result += 4.529e-08 * qCos(2.33827747356 + 6309.3741697912 * t); result += 5.579e-08 * qCos(4.41023653738 + 7860.4193924392 * t); result += 4.743e-08 * qCos(0.70995680136 + 5884.9268465832 * t); result += 4.301e-08 * qCos(1.10255777773 + 6681.2248533996 * t); result += 3.849e-08 * qCos(1.82229412531 + 5486.777843175 * t); result += 4.093e-08 * qCos(5.11700141207 + 13367.9726311066 * t); result += 3.681e-08 * qCos(0.43793170356 + 3154.6870848956 * t); result += 3.42e-08 * qCos(5.42034800952 + 6069.7767545534 * t); result += 3.617e-08 * qCos(6.04641937526 + 3930.2096962196 * t); result += 3.67e-08 * qCos(4.58210192227 + 12194.0329146209 * t); result += 2.918e-08 * qCos(1.95463881126 + 10977.078804699 * t); result += 2.797e-08 * qCos(5.61259275048 + 11790.6290886588 * t); result += 2.502e-08 * qCos(0.60499729367 + 6496.3749454294 * t); result += 2.319e-08 * qCos(5.01648216014 + 1059.3819301892 * t); result += 2.684e-08 * qCos(1.39470396488 + 22003.9146348698 * t); result += 2.428e-08 * qCos(3.24183056052 + 78051.5857313169 * t); result += 2.12e-08 * qCos(4.30691000285 + 5643.1785636774 * t); result += 2.257e-08 * qCos(3.15557225618 + 90617.7374312997 * t); result += 1.813e-08 * qCos(3.75574218285 + 3340.6124266998 * t); result += 2.226e-08 * qCos(2.79699346659 + 12036.4607348882 * t); result += 1.888e-08 * qCos(0.86991545823 + 8635.9420037632 * t); result += 1.517e-08 * qCos(1.95852055701 + 398.1490034082 * t); result += 1.581e-08 * qCos(3.19976230948 + 5088.6288397668 * t); result += 1.421e-08 * qCos(6.25530883827 + 2544.3144198834 * t); result += 1.595e-08 * qCos(0.25619915135 + 17298.1823273262 * t); result += 1.391e-08 * qCos(4.69964175561 + 7058.5984613154 * t); result += 1.478e-08 * qCos(2.81808207569 + 25934.1243310894 * t); result += 1.481e-08 * qCos(3.65823554806 + 11506.7697697936 * t); result += 1.693e-08 * qCos(4.95689385293 + 156475.290247996 * t); result += 1.183e-08 * qCos(1.29343061246 + 775.522611324 * t); result += 1.114e-08 * qCos(2.37889311846 + 3738.761430108 * t); result += 9.94e-09 * qCos(4.30088900425 + 9225.539273283 * t); result += 9.24e-09 * qCos(3.06451026812 + 4164.311989613 * t); result += 8.67e-09 * qCos(0.55606931068 + 8429.2412664666 * t); result += 9.88e-09 * qCos(5.97286104208 + 7079.3738568078 * t); result += 8.24e-09 * qCos(1.50984806173 + 10447.3878396044 * t); result += 9.15e-09 * qCos(0.12635654592 + 11015.1064773348 * t); result += 7.42e-09 * qCos(1.99159139281 + 26087.9031415742 * t); result -= -1.039e-08; result += 8.5e-09 * qCos(4.24120016095 + 29864.334027309 * t); result += 7.55e-09 * qCos(2.8963187332 + 4732.0306273434 * t); result += 7.14e-09 * qCos(1.37548118603 + 2146.1654164752 * t); result += 7.08e-09 * qCos(1.91406542362 + 8031.0922630584 * t); result += 7.46e-09 * qCos(0.57893808616 + 796.2980068164 * t); result += 8.02e-09 * qCos(5.1233913723 + 2942.4634232916 * t); result += 7.51e-09 * qCos(1.67479850166 + 21228.3920235458 * t); result += 6.02e-09 * qCos(4.09976538826 + 64809.8055049413 * t); result += 5.94e-09 * qCos(3.49580704962 + 16496.3613962024 * t); result += 5.92e-09 * qCos(4.59481504319 + 4690.4798363586 * t); result += 5.3e-09 * qCos(5.739792952 + 8827.3902698748 * t); result += 5.03e-09 * qCos(5.66433137112 + 33794.5437235286 * t); result += 4.83e-09 * qCos(1.57106522411 + 801.8209311238 * t); result += 4.38e-09 * qCos(0.06707733767 + 3128.3887650958 * t); result += 4.23e-09 * qCos(2.86944595927 + 12566.1516999828 * t); result += 5.04e-09 * qCos(3.2620766916 + 7632.9432596502 * t); result += 5.52e-09 * qCos(1.02926440457 + 239762.204517549 * t); result += 4.27e-09 * qCos(3.6743437821 + 213.299095438 * t); result += 4.04e-09 * qCos(1.46193297142 + 15720.8387848784 * t); result += 5.03e-09 * qCos(4.85802444134 + 6290.1893969922 * t); result += 4.17e-09 * qCos(0.81920713533 + 5216.5803728014 * t); result += 3.65e-09 * qCos(0.01002966162 + 12168.0026965746 * t); result += 3.63e-09 * qCos(1.28376436579 + 6206.8097787158 * t); result += 3.53e-09 * qCos(4.7005913311 + 7234.794256242 * t); result += 4.15e-09 * qCos(0.96862624175 + 4136.9104335162 * t); result += 3.87e-09 * qCos(3.09145061418 + 25158.6017197654 * t); result += 3.73e-09 * qCos(2.65119262792 + 7342.4577801806 * t); result += 3.61e-09 * qCos(2.97762937739 + 9623.6882766912 * t); result += 4.18e-09 * qCos(3.75759994446 + 5230.807466803 * t); result += 3.96e-09 * qCos(1.22507712354 + 6438.4962494256 * t); result += 3.22e-09 * qCos(1.21162178805 + 8662.240323563 * t); result += 2.84e-09 * qCos(5.64170320068 + 1589.0728952838 * t); result += 3.79e-09 * qCos(1.72248432748 + 14945.3161735544 * t); result += 3.2e-09 * qCos(3.94161159962 + 7330.8231617461 * t); result += 3.13e-09 * qCos(5.47602376446 + 1194.4470102246 * t); result += 2.92e-09 * qCos(1.38971327603 + 11769.8536931664 * t); result += 3.05e-09 * qCos(0.80429352049 + 37724.7534197482 * t); result += 2.57e-09 * qCos(5.81382809757 + 426.598190876 * t); result += 2.65e-09 * qCos(6.10358507671 + 6836.6452528338 * t); result += 2.5e-09 * qCos(4.56452895547 + 7477.522860216 * t); result += 2.66e-09 * qCos(2.62926282354 + 7238.6755916 * t); result += 2.63e-09 * qCos(6.22089501237 + 6133.5126528568 * t); result += 3.06e-09 * qCos(2.79682380531 + 1748.016413067 * t); result += 2.36e-09 * qCos(2.46093023714 + 11371.7046897582 * t); result += 3.16e-09 * qCos(1.62662805006 + 250908.490120415 * t); result += 2.16e-09 * qCos(3.68721275185 + 5849.3641121146 * t); result += 2.3e-09 * qCos(0.36165162947 + 5863.5912061162 * t); result += 2.33e-09 * qCos(5.03509933858 + 20426.571092422 * t); result += 2e-09 * qCos(5.86073159059 + 4535.0594369244 * t); result += 2.77e-09 * qCos(4.65400292395 + 82239.1669577989 * t); result += 2.09e-09 * qCos(3.72323200804 + 10973.55568635 * t); result += 1.99e-09 * qCos(5.05186622555 + 5429.8794682394 * t); result += 2.56e-09 * qCos(2.4092327977 + 19651.048481098 * t); result += 2.1e-09 * qCos(4.50691909144 + 29088.811415985 * t); result += 1.81e-09 * qCos(6.00294783127 + 4292.3308329504 * t); result += 2.49e-09 * qCos(0.12900984422 + 154379.795624486 * t); result += 2.09e-09 * qCos(3.87759458598 + 17789.845619785 * t); result += 2.25e-09 * qCos(3.18339652605 + 18875.525869774 * t); result += 1.91e-09 * qCos(4.53897489299 + 18477.1087646123 * t); result += 1.72e-09 * qCos(2.09694183014 + 13095.8426650774 * t); result += 1.82e-09 * qCos(3.161079435 + 16730.4636895958 * t); result += 1.88e-09 * qCos(2.22746128596 + 41654.9631159678 * t); result += 1.64e-09 * qCos(5.18686275017 + 5481.2549188676 * t); result += 1.6e-09 * qCos(2.49298855159 + 12592.4500197826 * t); result += 1.55e-09 * qCos(1.5959543823 + 10021.8372800994 * t); result += 1.35e-09 * qCos(0.21349051064 + 10988.808157535 * t); result += 1.78e-09 * qCos(3.8037517797 + 23581.2581773176 * t); result += 1.23e-09 * qCos(1.66800739151 + 15110.4661198662 * t); result += 1.22e-09 * qCos(2.72678272244 + 18849.2275499742 * t); result += 1.26e-09 * qCos(1.1767551291 + 14919.0178537546 * t); result += 1.42e-09 * qCos(3.95053441332 + 337.8142631964 * t); result += 1.16e-09 * qCos(6.06340906229 + 6709.6740408674 * t); result += 1.37e-09 * qCos(3.52143246757 + 12139.5535091068 * t); result += 1.36e-09 * qCos(2.92179113542 + 32217.2001810808 * t); result += 1.1e-09 * qCos(3.51203379263 + 18052.9295431578 * t); result += 1.47e-09 * qCos(4.63371971408 + 22805.7355659936 * t); result += 1.08e-09 * qCos(5.45280814878 + 7.1135470008 * t); result += 1.48e-09 * qCos(0.65447253687 + 95480.9471841745 * t); result += 1.19e-09 * qCos(5.92110458985 + 33019.0211122046 * t); result += 1.1e-09 * qCos(5.34824206306 + 639.897286314 * t); result += 1.06e-09 * qCos(3.71081682629 + 14314.1681130498 * t); result += 1.39e-09 * qCos(6.17607198418 + 24356.7807886416 * t); result += 1.18e-09 * qCos(5.5973871267 + 161338.50000087 * t); result += 1.17e-09 * qCos(3.6506527164 + 45585.1728121874 * t); result += 1.27e-09 * qCos(4.74596574209 + 49515.382508407 * t); result += 1.2e-09 * qCos(1.04211499785 + 6915.8595893046 * t); result += 1.2e-09 * qCos(5.60638811846 + 5650.2921106782 * t); result += 1.15e-09 * qCos(3.10668213289 + 14712.317116458 * t); result += 9.9e-10 * qCos(0.69018940049 + 12779.4507954208 * t); result += 9.7e-10 * qCos(1.07908724794 + 9917.6968745098 * t); result += 9.3e-10 * qCos(2.62295197319 + 17260.1546546904 * t); result += 9.9e-10 * qCos(4.45774681732 + 4933.2084403326 * t); result += 1.23e-09 * qCos(1.37488922089 + 28286.9904848612 * t); result += 1.21e-09 * qCos(5.19767249813 + 27511.4678735372 * t); result += 1.05e-09 * qCos(0.87192267806 + 77375.9572049241 * t); result += 8.7e-10 * qCos(3.9363781295 + 17654.7805397496 * t); result += 1.22e-09 * qCos(2.2395606868 + 83997.0911355954 * t); result += 8.7e-10 * qCos(4.18201600952 + 22779.4372461938 * t); result += 1.04e-09 * qCos(4.59580877295 + 1349.8674096588 * t); result += 1.02e-09 * qCos(2.83545248411 + 12352.8526045448 * t); result += 1.02e-09 * qCos(3.97386522171 + 10818.1352869158 * t); result += 1.01e-09 * qCos(4.32892825857 + 36147.4098773004 * t); result += 9.4e-10 * qCos(5.00001709261 + 150192.214398004 * t); result += 7.7e-10 * qCos(3.97199369296 + 1592.5960136328 * t); result += 1e-09 * qCos(6.07733097102 + 26735.9452622132 * t); result += 8.6e-10 * qCos(5.2602963825 + 28313.288804661 * t); result += 9.3e-10 * qCos(4.31900620254 + 44809.6502008634 * t); result += 7.6e-10 * qCos(6.22743405935 + 13521.7514415914 * t); result += 7.2e-10 * qCos(1.55820597747 + 6256.7775301916 * t); result += 8.2e-10 * qCos(4.95202664555 + 10575.4066829418 * t); result += 8.2e-10 * qCos(1.69647647075 + 1990.745017041 * t); result += 7.5e-10 * qCos(2.29836095644 + 3634.6210245184 * t); result += 7.5e-10 * qCos(2.66367876557 + 16200.7727245012 * t); result += 8.7e-10 * qCos(0.26630214764 + 31441.6775697568 * t); result += 7.7e-10 * qCos(2.25530954137 + 5235.3285382367 * t); result += 7.6e-10 * qCos(1.09869730846 + 12903.9659631792 * t); result += 5.8e-10 * qCos(4.28246138307 + 12559.038152982 * t); result += 6.4e-10 * qCos(5.51112830114 + 173904.651700853 * t); result += 5.6e-10 * qCos(2.60133794851 + 73188.3759784421 * t); result += 5.5e-10 * qCos(5.81483150022 + 143233.51002162 * t); result += 5.4e-10 * qCos(3.38482031504 + 323049.118787103 * t); result += 3.9e-10 * qCos(3.28500401343 + 71768.5098813255 * t); result += 3.9e-10 * qCos(3.1123991069 + 96900.8132812911 * t); return result; } double GetEarthB1(double t) { double result = 0.0; result += 9.03e-08 * qCos(3.8972906189 + 5507.5532386674 * t); result += 6.177e-08 * qCos(1.73038850355 + 5223.6939198022 * t); result += 3.8e-08 * qCos(5.24404145734 + 2352.8661537718 * t); result += 2.834e-08 * qCos(2.4734503745 + 1577.3435424478 * t); result += 1.817e-08 * qCos(0.41874743765 + 6283.0758499914 * t); result += 1.499e-08 * qCos(1.83320979291 + 5856.4776591154 * t); result += 1.466e-08 * qCos(5.69401926017 + 5753.3848848968 * t); result += 1.301e-08 * qCos(2.18890066314 + 9437.762934887 * t); result += 1.233e-08 * qCos(4.95222451476 + 10213.285546211 * t); result += 1.021e-08 * qCos(0.12866660208 + 7860.4193924392 * t); result += 9.82e-09 * qCos(0.09005453285 + 14143.4952424306 * t); result += 8.65e-09 * qCos(1.73949953555 + 3930.2096962196 * t); result += 5.81e-09 * qCos(2.26949174067 + 5884.9268465832 * t); result += 5.24e-09 * qCos(5.65662503159 + 529.6909650946 * t); result += 4.73e-09 * qCos(6.22750969242 + 6309.3741697912 * t); result += 4.51e-09 * qCos(1.53288619213 + 18073.7049386502 * t); result += 3.64e-09 * qCos(3.61614477374 + 13367.9726311066 * t); result += 3.72e-09 * qCos(3.2247072132 + 6275.9623029906 * t); result += 2.68e-09 * qCos(2.34341267879 + 11790.6290886588 * t); result += 3.22e-09 * qCos(0.94084045832 + 6069.7767545534 * t); result += 2.32e-09 * qCos(0.26781182579 + 7058.5984613154 * t); result += 2.16e-09 * qCos(6.05952221329 + 10977.078804699 * t); result += 2.32e-09 * qCos(2.93325646109 + 22003.9146348698 * t); result += 2.04e-09 * qCos(3.86264841382 + 6496.3749454294 * t); result += 2.02e-09 * qCos(2.81892511133 + 15720.8387848784 * t); result += 1.85e-09 * qCos(4.93512381859 + 12036.4607348882 * t); result += 2.2e-09 * qCos(3.99305643742 + 6812.766815086 * t); result += 1.66e-09 * qCos(1.74970002999 + 11506.7697697936 * t); result += 2.12e-09 * qCos(1.57166285369 + 4694.0029547076 * t); result += 1.57e-09 * qCos(1.08259734788 + 5643.1785636774 * t); result += 1.54e-09 * qCos(5.99434678412 + 5486.777843175 * t); result += 1.44e-09 * qCos(5.23285656085 + 78051.5857313169 * t); result += 1.44e-09 * qCos(1.16454655948 + 90617.7374312997 * t); result += 1.37e-09 * qCos(2.67760436027 + 6290.1893969922 * t); result += 1.8e-09 * qCos(2.06509026215 + 7084.8967811152 * t); result += 1.21e-09 * qCos(5.90212574947 + 9225.539273283 * t); result += 1.5e-09 * qCos(2.00175038718 + 5230.807466803 * t); result += 1.49e-09 * qCos(5.06157254516 + 17298.1823273262 * t); result += 1.18e-09 * qCos(5.39979058038 + 3340.6124266998 * t); result += 1.61e-09 * qCos(3.32421999691 + 6283.3196674749 * t); result += 1.21e-09 * qCos(4.36722193162 + 19651.048481098 * t); result += 1.16e-09 * qCos(5.83462858507 + 4705.7323075436 * t); result += 1.28e-09 * qCos(4.35489873365 + 25934.1243310894 * t); result += 1.43e-09; result += 1.09e-09 * qCos(2.52157834166 + 6438.4962494256 * t); result += 9.9e-10 * qCos(2.70727488041 + 5216.5803728014 * t); result += 1.03e-09 * qCos(0.93782340879 + 8827.3902698748 * t); result += 8.2e-10 * qCos(4.2921468039 + 8635.9420037632 * t); result += 7.9e-10 * qCos(2.24085737326 + 1059.3819301892 * t); result += 9.7e-10 * qCos(5.50959692365 + 29864.334027309 * t); result += 7.2e-10 * qCos(0.21891639822 + 21228.3920235458 * t); result += 7.1e-10 * qCos(2.86755026812 + 6681.2248533996 * t); result += 7.4e-10 * qCos(2.20184828895 + 37724.7534197482 * t); result += 6.3e-10 * qCos(4.45586625948 + 7079.3738568078 * t); result += 6.1e-10 * qCos(0.63918772258 + 33794.5437235286 * t); result += 4.7e-10 * qCos(2.09070235724 + 3128.3887650958 * t); result += 4.7e-10 * qCos(3.325438433 + 26087.9031415742 * t); result += 4.9e-10 * qCos(1.60680905005 + 6702.5604938666 * t); result += 5.7e-10 * qCos(0.11215813438 + 29088.811415985 * t); result += 5.6e-10 * qCos(5.47982934911 + 775.522611324 * t); result += 5e-10 * qCos(1.89396788463 + 12139.5535091068 * t); result += 4.7e-10 * qCos(2.9721490724 + 20426.571092422 * t); result += 4.1e-10 * qCos(5.5532939489 + 11015.1064773348 * t); result += 4.1e-10 * qCos(5.91861144924 + 23581.2581773176 * t); result += 4.5e-10 * qCos(4.95273290181 + 5863.5912061162 * t); result += 5e-10 * qCos(3.62740835096 + 41654.9631159678 * t); result += 3.7e-10 * qCos(6.09033460601 + 64809.8055049413 * t); result += 3.7e-10 * qCos(5.86153655431 + 12566.1516999828 * t); result += 4.6e-10 * qCos(1.65798680284 + 25158.6017197654 * t); result += 3.8e-10 * qCos(2.00673650251 + 426.598190876 * t); result += 3.6e-10 * qCos(6.24373396652 + 6283.14316029419 * t); result += 3.6e-10 * qCos(0.40465162918 + 6283.0085396886 * t); result += 3.2e-10 * qCos(6.03707103538 + 2942.4634232916 * t); result += 4.1e-10 * qCos(4.86809570283 + 1592.5960136328 * t); result += 2.8e-10 * qCos(4.38359423735 + 7632.9432596502 * t); result += 2.8e-10 * qCos(6.03334294232 + 17789.845619785 * t); result += 2.6e-10 * qCos(3.88971333608 + 5331.3574437408 * t); result += 2.6e-10 * qCos(5.94932724051 + 16496.3613962024 * t); result += 3.1e-10 * qCos(1.44666331503 + 16730.4636895958 * t); result += 2.6e-10 * qCos(6.26376705837 + 23543.2305046818 * t); result += 3.3e-10 * qCos(0.93797239147 + 213.299095438 * t); result += 2.6e-10 * qCos(3.71858432944 + 13095.8426650774 * t); result += 2.7e-10 * qCos(0.60565274405 + 10988.808157535 * t); result += 2.3e-10 * qCos(4.4438898555 + 18849.2275499742 * t); result += 2.8e-10 * qCos(1.53862289477 + 6279.4854213396 * t); result += 2.8e-10 * qCos(1.96831814872 + 6286.6662786432 * t); result += 2.8e-10 * qCos(5.78094918529 + 15110.4661198662 * t); result += 2.6e-10 * qCos(2.48165809843 + 5729.506447149 * t); result += 2e-10 * qCos(3.85655029499 + 9623.6882766912 * t); result += 2.1e-10 * qCos(5.83006047147 + 7234.794256242 * t); result += 2.1e-10 * qCos(0.69628570421 + 398.1490034082 * t); result += 2.2e-10 * qCos(5.02222806555 + 6127.6554505572 * t); result += 2e-10 * qCos(3.4761126529 + 6148.010769956 * t); result += 2e-10 * qCos(0.90769829044 + 5481.2549188676 * t); result += 2e-10 * qCos(0.03081589303 + 6418.1409300268 * t); result += 2e-10 * qCos(3.74220084927 + 1589.0728952838 * t); result += 2.1e-10 * qCos(4.00149269576 + 3154.6870848956 * t); result += 1.8e-10 * qCos(1.58348238359 + 2118.7638603784 * t); result += 1.9e-10 * qCos(0.85407021371 + 14712.317116458 * t); return result; } double GetEarthB2(double t) { double result = 0.0; result += 1.662e-08 * qCos(1.62703209173 + 84334.6615813083 * t); result += 4.92e-09 * qCos(2.41382223971 + 1047.7473117547 * t); result += 3.44e-09 * qCos(2.24353004539 + 5507.5532386674 * t); result += 2.58e-09 * qCos(6.00906896311 + 5223.6939198022 * t); result += 1.31e-09 * qCos(0.9544734524 + 6283.0758499914 * t); result += 8.6e-10 * qCos(1.67530247303 + 7860.4193924392 * t); result += 9e-10 * qCos(0.97606804452 + 1577.3435424478 * t); result += 9e-10 * qCos(0.37899871725 + 2352.8661537718 * t); result += 8.9e-10 * qCos(6.25807507963 + 10213.285546211 * t); result += 7.5e-10 * qCos(0.84213523741 + 167621.575850862 * t); result += 5.2e-10 * qCos(1.70501566089 + 14143.4952424306 * t); result += 5.7e-10 * qCos(6.15295833679 + 12194.0329146209 * t); result += 5.1e-10 * qCos(1.2761601674 + 5753.3848848968 * t); result += 5.1e-10 * qCos(5.37229738682 + 6812.766815086 * t); result += 3.4e-10 * qCos(1.73672994279 + 7058.5984613154 * t); result += 3.8e-10 * qCos(2.77761031485 + 10988.808157535 * t); result += 4.6e-10 * qCos(3.38617099014 + 156475.290247996 * t); result += 2.1e-10 * qCos(1.95248349228 + 8827.3902698748 * t); result += 1.8e-10 * qCos(3.33419222028 + 8429.2412664666 * t); result += 1.9e-10 * qCos(4.32945160287 + 17789.845619785 * t); result += 1.7e-10 * qCos(0.66191210656 + 6283.0085396886 * t); result += 1.8e-10 * qCos(3.74885333072 + 11769.8536931664 * t); result += 1.7e-10 * qCos(4.23058370776 + 10977.078804699 * t); result += 1.7e-10 * qCos(1.78116162721 + 5486.777843175 * t); result += 2.1e-10 * qCos(1.36972913918 + 12036.4607348882 * t); result += 1.7e-10 * qCos(2.79601092529 + 796.2980068164 * t); result += 1.5e-10 * qCos(0.4308784885 + 11790.6290886588 * t); result += 1.7e-10 * qCos(1.35132152761 + 78051.5857313169 * t); result += 1.5e-10 * qCos(1.17032155085 + 213.299095438 * t); result += 1.8e-10 * qCos(2.85221514199 + 5088.6288397668 * t); result += 1.7e-10 * qCos(0.21780913672 + 6283.14316029419 * t); result += 1.3e-10 * qCos(1.21201504386 + 25132.3033999656 * t); result += 1.2e-10 * qCos(1.12953712197 + 90617.7374312997 * t); result += 1.2e-10 * qCos(5.13714452592 + 7079.3738568078 * t); result += 1.3e-10 * qCos(3.79842135217 + 4933.2084403326 * t); result += 1.2e-10 * qCos(4.89407978213 + 3738.761430108 * t); result += 1.5e-10 * qCos(6.05682328852 + 398.1490034082 * t); result += 1.4e-10 * qCos(4.81029291856 + 4694.0029547076 * t); result += 1.1e-10 * qCos(0.61684523405 + 3128.3887650958 * t); result += 1.1e-10 * qCos(5.328765385 + 6040.3472460174 * t); result += 1.4e-10 * qCos(5.27227350286 + 4535.0594369244 * t); result += 1.1e-10 * qCos(2.39292099451 + 5331.3574437408 * t); result += 1e-10 * qCos(4.4529653271 + 6525.8044539654 * t); result += 1.4e-10 * qCos(4.66400985037 + 8031.0922630584 * t); result += 1e-10 * qCos(3.22472385926 + 9437.762934887 * t); result += 1.1e-10 * qCos(3.80913404437 + 801.8209311238 * t); result += 1e-10 * qCos(5.15032130575 + 11371.7046897582 * t); result += 1.3e-10 * qCos(0.98720797401 + 5729.506447149 * t); result += 9e-11 * qCos(5.94191743597 + 7632.9432596502 * t); return result; } double GetEarthB3(double t) { double result = 0.0; result += 1.1e-10 * qCos(0.23877262399 + 7860.4193924392 * t); result += 9e-11 * qCos(1.16069982609 + 5507.5532386674 * t); result += 8e-11 * qCos(1.65357552925 + 5884.9268465832 * t); result += 8e-11 * qCos(2.86720038197 + 7058.5984613154 * t); result += 7e-11 * qCos(3.04818741666 + 5486.777843175 * t); result += 7e-11 * qCos(2.59437103785 + 529.6909650946 * t); result += 8e-11 * qCos(4.02863090524 + 6256.7775301916 * t); result += 8e-11 * qCos(2.42003508927 + 5753.3848848968 * t); result += 6e-11 * qCos(0.84181087594 + 6275.9623029906 * t); result += 6e-11 * qCos(5.40160929468 + 1577.3435424478 * t); result += 7e-11 * qCos(2.73399865247 + 6309.3741697912 * t); return result; } double GetEarthB4(double t) { double result = 0.0; result += 4e-11 * qCos(0.79662198849 + 6438.4962494256 * t); result += 5e-11 * qCos(0.84308705203 + 1047.7473117547 * t); result += 5e-11 * qCos(0.05711572303 + 84334.6615813083 * t); result += 3e-11 * qCos(3.46779895686 + 6279.5527316424 * t); result += 3e-11 * qCos(2.89822201212 + 6127.6554505572 * t); return result; } double GetEarthR0(double t) { double result = 0.0; result += 1.00013988799; result += 0.01670699626 * qCos(3.09846350771 + 6283.0758499914 * t); result += 0.00013956023 * qCos(3.0552460962 + 12566.1516999828 * t); result += 3.08372e-05 * qCos(5.19846674381 + 77713.7714681205 * t); result += 1.628461e-05 * qCos(1.17387749012 + 5753.3848848968 * t); result += 1.575568e-05 * qCos(2.84685245825 + 7860.4193924392 * t); result += 9.24799e-06 * qCos(5.45292234084 + 11506.7697697936 * t); result += 5.42444e-06 * qCos(4.56409149777 + 3930.2096962196 * t); result += 4.7211e-06 * qCos(3.66100022149 + 5884.9268465832 * t); result += 3.2878e-06 * qCos(5.89983646482 + 5223.6939198022 * t); result += 3.45983e-06 * qCos(0.96368617687 + 5507.5532386674 * t); result += 3.06784e-06 * qCos(0.29867139512 + 5573.1428014331 * t); result += 1.74844e-06 * qCos(3.01193636534 + 18849.2275499742 * t); result += 2.43189e-06 * qCos(4.27349536153 + 11790.6290886588 * t); result += 2.11829e-06 * qCos(5.84714540314 + 1577.3435424478 * t); result += 1.85752e-06 * qCos(5.02194447178 + 10977.078804699 * t); result += 1.09835e-06 * qCos(5.05510636285 + 5486.777843175 * t); result += 9.8316e-07 * qCos(0.88681311277 + 6069.7767545534 * t); result += 8.6499e-07 * qCos(5.68959778254 + 15720.8387848784 * t); result += 8.5825e-07 * qCos(1.27083733351 + 161000.685737674 * t); result += 6.2916e-07 * qCos(0.92177108832 + 529.6909650946 * t); result += 5.7056e-07 * qCos(2.01374292014 + 83996.8473181119 * t); result += 6.4903e-07 * qCos(0.27250613787 + 17260.1546546904 * t); result += 4.9384e-07 * qCos(3.24501240359 + 2544.3144198834 * t); result += 5.5736e-07 * qCos(5.24159798933 + 71430.6956181291 * t); result += 4.2515e-07 * qCos(6.01110242003 + 6275.9623029906 * t); result += 4.6963e-07 * qCos(2.57805070386 + 775.522611324 * t); result += 3.8968e-07 * qCos(5.36071738169 + 4694.0029547076 * t); result += 4.4661e-07 * qCos(5.53715807302 + 9437.762934887 * t); result += 3.566e-07 * qCos(1.67468058995 + 12036.4607348882 * t); result += 3.1921e-07 * qCos(0.18368229781 + 5088.6288397668 * t); result += 3.1846e-07 * qCos(1.77775642085 + 398.1490034082 * t); result += 3.3193e-07 * qCos(0.24370300098 + 7084.8967811152 * t); result += 3.8245e-07 * qCos(2.39255343974 + 8827.3902698748 * t); result += 2.8464e-07 * qCos(1.21344868176 + 6286.5989683404 * t); result += 3.749e-07 * qCos(0.82952922332 + 19651.048481098 * t); result += 3.6957e-07 * qCos(4.90107591914 + 12139.5535091068 * t); result += 3.4537e-07 * qCos(1.84270693282 + 2942.4634232916 * t); result += 2.6275e-07 * qCos(4.58896850401 + 10447.3878396044 * t); result += 2.4596e-07 * qCos(3.78660875483 + 8429.2412664666 * t); result += 2.3587e-07 * qCos(0.26866117066 + 796.2980068164 * t); result += 2.7793e-07 * qCos(1.89934330904 + 6279.5527316424 * t); result += 2.3927e-07 * qCos(4.99598548138 + 5856.4776591154 * t); result += 2.0349e-07 * qCos(4.65267995431 + 2146.1654164752 * t); result += 2.3287e-07 * qCos(2.80783650928 + 14143.4952424306 * t); result += 2.2103e-07 * qCos(1.95004702988 + 3154.6870848956 * t); result += 1.9506e-07 * qCos(5.38227371393 + 2352.8661537718 * t); result += 1.7958e-07 * qCos(0.19871379385 + 6812.766815086 * t); result += 1.7174e-07 * qCos(4.43315560735 + 10213.285546211 * t); result += 1.619e-07 * qCos(5.23160507859 + 17789.845619785 * t); result += 1.7314e-07 * qCos(6.15200787916 + 16730.4636895958 * t); result += 1.3814e-07 * qCos(5.18962074032 + 8031.0922630584 * t); result += 1.8833e-07 * qCos(0.67306674027 + 149854.400134808 * t); result += 1.8331e-07 * qCos(2.25348733734 + 23581.2581773176 * t); result += 1.3641e-07 * qCos(3.68516118804 + 4705.7323075436 * t); result += 1.3139e-07 * qCos(0.65289581324 + 13367.9726311066 * t); result += 1.0414e-07 * qCos(4.33285688538 + 11769.8536931664 * t); result += 9.978e-08 * qCos(4.20126336355 + 6309.3741697912 * t); result += 1.0169e-07 * qCos(1.59390681369 + 4690.4798363586 * t); result += 7.564e-08 * qCos(2.6256059739 + 6256.7775301916 * t); result += 9.661e-08 * qCos(3.6758679122 + 27511.4678735372 * t); result += 6.743e-08 * qCos(0.56270332741 + 3340.6124266998 * t); result += 8.743e-08 * qCos(6.06359123461 + 1748.016413067 * t); result += 7.786e-08 * qCos(3.67371235637 + 12168.0026965746 * t); result += 6.633e-08 * qCos(5.66149277792 + 11371.7046897582 * t); result += 7.712e-08 * qCos(0.31242577789 + 7632.9432596502 * t); result += 6.592e-08 * qCos(3.13576266188 + 801.8209311238 * t); result += 7.46e-08 * qCos(5.64757188143 + 11926.2544136688 * t); result += 6.933e-08 * qCos(2.923845864 + 6681.2248533996 * t); result += 6.802e-08 * qCos(1.4232980642 + 23013.5395395872 * t); result += 6.115e-08 * qCos(5.13393615454 + 1194.4470102246 * t); result += 6.477e-08 * qCos(2.64986648492 + 19804.8272915828 * t); result += 5.233e-08 * qCos(4.62434053374 + 6438.4962494256 * t); result += 6.147e-08 * qCos(3.02863936662 + 233141.314404362 * t); result += 4.608e-08 * qCos(1.72194702724 + 7234.794256242 * t); result += 4.221e-08 * qCos(1.55697533729 + 7238.6755916 * t); result += 5.314e-08 * qCos(2.40716580847 + 11499.6562227928 * t); result += 5.128e-08 * qCos(5.3239896569 + 11513.8833167944 * t); result += 4.77e-08 * qCos(0.25554312006 + 11856.2186514245 * t); result += 5.519e-08 * qCos(2.09089154502 + 17298.1823273262 * t); result += 5.625e-08 * qCos(4.34052903053 + 90955.5516944961 * t); result += 4.578e-08 * qCos(4.4656964157 + 5746.271337896 * t); result += 3.788e-08 * qCos(4.9072938351 + 4164.311989613 * t); result += 5.337e-08 * qCos(5.09957905104 + 31441.6775697568 * t); result += 3.967e-08 * qCos(1.20054555174 + 1349.8674096588 * t); result += 4.008e-08 * qCos(3.03007204392 + 1059.3819301892 * t); result += 3.476e-08 * qCos(0.7608027703 + 10973.55568635 * t); result += 4.232e-08 * qCos(1.05485713117 + 5760.4984318976 * t); result += 4.582e-08 * qCos(3.76570026763 + 6386.16862421 * t); result += 3.335e-08 * qCos(3.13829943354 + 6836.6452528338 * t); result += 3.418e-08 * qCos(3.00072390334 + 4292.3308329504 * t); result += 3.598e-08 * qCos(5.70718084323 + 5643.1785636774 * t); result += 3.237e-08 * qCos(4.16448773994 + 9917.6968745098 * t); result += 4.154e-08 * qCos(2.59941292162 + 7058.5984613154 * t); result += 3.362e-08 * qCos(4.54577697964 + 4732.0306273434 * t); result += 2.978e-08 * qCos(1.3056126882 + 6283.14316029419 * t); result += 2.765e-08 * qCos(0.51311975679 + 26.2983197998 * t); result += 2.802e-08 * qCos(5.66263240521 + 8635.9420037632 * t); result += 2.927e-08 * qCos(5.73787481548 + 16200.7727245012 * t); result += 3.164e-08 * qCos(1.69140262657 + 11015.1064773348 * t); result += 2.598e-08 * qCos(2.96244118586 + 25132.3033999656 * t); result += 3.519e-08 * qCos(3.62639325753 + 244287.600007228 * t); result += 2.676e-08 * qCos(4.2072570085 + 18073.7049386502 * t); result += 2.978e-08 * qCos(1.74971565805 + 6283.0085396886 * t); result += 2.287e-08 * qCos(1.06975704977 + 14314.1681130498 * t); result += 2.863e-08 * qCos(5.92838131397 + 14712.317116458 * t); result += 3.071e-08 * qCos(0.23793217002 + 35371.8872659764 * t); result += 2.656e-08 * qCos(0.8995930178 + 12352.8526045448 * t); result += 2.415e-08 * qCos(2.79975176257 + 709.9330485583 * t); result += 2.814e-08 * qCos(3.51488206882 + 21228.3920235458 * t); result += 1.977e-08 * qCos(2.6135829755 + 951.7184062506 * t); result += 2.548e-08 * qCos(2.47684686575 + 6208.2942514241 * t); result += 1.999e-08 * qCos(0.5609038816 + 7079.3738568078 * t); result += 2.305e-08 * qCos(1.05376461628 + 22483.8485744926 * t); result += 1.855e-08 * qCos(2.86090681163 + 5216.5803728014 * t); result += 2.157e-08 * qCos(1.31396741861 + 154717.609887683 * t); result += 1.97e-08 * qCos(4.36929875289 + 167283.761587666 * t); result += 1.635e-08 * qCos(5.85571606764 + 10984.1923516998 * t); result += 1.754e-08 * qCos(2.14452408833 + 6290.1893969922 * t); result += 2.154e-08 * qCos(6.03828341543 + 10873.9860304804 * t); result += 1.714e-08 * qCos(3.70157691113 + 1592.5960136328 * t); result += 1.541e-08 * qCos(6.21598380732 + 23543.2305046818 * t); result += 1.611e-08 * qCos(1.99824499377 + 10969.9652576982 * t); result += 1.712e-08 * qCos(1.34295663542 + 3128.3887650958 * t); result += 1.642e-08 * qCos(5.55026665339 + 6496.3749454294 * t); result += 1.502e-08 * qCos(5.43948825854 + 155.4203994342 * t); result += 1.827e-08 * qCos(5.91227480261 + 3738.761430108 * t); result += 1.726e-08 * qCos(2.16764983583 + 10575.4066829418 * t); result += 1.532e-08 * qCos(5.3568310707 + 13521.7514415914 * t); result += 1.829e-08 * qCos(1.66006148731 + 39302.096962196 * t); result += 1.605e-08 * qCos(1.90928637633 + 6133.5126528568 * t); result += 1.282e-08 * qCos(2.46014880418 + 13916.0191096416 * t); result += 1.211e-08 * qCos(4.4136063155 + 3894.1818295422 * t); result += 1.394e-08 * qCos(1.77801929354 + 9225.539273283 * t); result += 1.571e-08 * qCos(4.95512957592 + 25158.6017197654 * t); result += 1.205e-08 * qCos(1.19212540615 + 3.523118349 * t); result += 1.132e-08 * qCos(2.69830084955 + 6040.3472460174 * t); result += 1.504e-08 * qCos(5.77002730341 + 18209.3302636602 * t); result += 1.393e-08 * qCos(1.62621805428 + 5120.6011455836 * t); result += 1.077e-08 * qCos(2.93931554233 + 17256.6315363414 * t); result += 1.232e-08 * qCos(0.71655165307 + 143571.324284816 * t); result += 1.087e-08 * qCos(0.99769687939 + 955.5997416086 * t); result += 1.068e-08 * qCos(5.28472576231 + 65147.6197681377 * t); result += 9.8e-09 * qCos(5.10949204607 + 6172.869528772 * t); result += 1.169e-08 * qCos(3.11664290862 + 14945.3161735544 * t); result += 1.202e-08 * qCos(4.02992510402 + 553.5694028424 * t); result += 9.79e-09 * qCos(2.00000879212 + 15110.4661198662 * t); result += 9.62e-09 * qCos(4.023807714 + 6282.0955289232 * t); result += 9.99e-09 * qCos(3.6264300279 + 6262.300454499 * t); result += 1.03e-08 * qCos(5.84989900289 + 213.299095438 * t); result += 1.014e-08 * qCos(2.84221578218 + 8662.240323563 * t); result += 1.185e-08 * qCos(1.51330541132 + 17654.7805397496 * t); result += 9.67e-09 * qCos(2.67081017562 + 5650.2921106782 * t); result += 1.222e-08 * qCos(2.65423784904 + 88860.0570709867 * t); result += 9.81e-09 * qCos(2.36370360283 + 6206.8097787158 * t); result += 1.033e-08 * qCos(0.13874927606 + 11712.9553182308 * t); result += 1.103e-08 * qCos(3.08477302937 + 43232.3066584156 * t); result += 7.81e-09 * qCos(2.53372735932 + 16496.3613962024 * t); result += 1.019e-08 * qCos(3.04569392376 + 6037.244203762 * t); result += 7.95e-09 * qCos(5.80662989111 + 5230.807466803 * t); result += 8.13e-09 * qCos(3.57710279439 + 10177.2576795336 * t); result += 9.62e-09 * qCos(5.31470594766 + 6284.0561710596 * t); result += 7.21e-09 * qCos(5.96264301567 + 12559.038152982 * t); result += 9.66e-09 * qCos(2.74714939953 + 6244.9428143536 * t); result += 9.21e-09 * qCos(0.10155275926 + 29088.811415985 * t); result += 6.92e-09 * qCos(3.89764447548 + 1589.0728952838 * t); result += 7.19e-09 * qCos(5.91791450402 + 4136.9104335162 * t); result += 7.72e-09 * qCos(4.05505682353 + 6127.6554505572 * t); result += 7.12e-09 * qCos(5.49291532439 + 22003.9146348698 * t); result += 6.72e-09 * qCos(1.60700490811 + 11087.2851259184 * t); result += 6.9e-09 * qCos(4.50539825563 + 426.598190876 * t); result += 8.54e-09 * qCos(3.26104981596 + 20426.571092422 * t); result += 6.56e-09 * qCos(4.3241018294 + 16858.4825329332 * t); result += 8.4e-09 * qCos(2.59572585222 + 28766.924424484 * t); result += 6.92e-09 * qCos(0.61650089011 + 11403.676995575 * t); result += 7e-09 * qCos(3.40901167143 + 7.1135470008 * t); result += 7.26e-09 * qCos(0.04243053594 + 5481.2549188676 * t); result += 5.57e-09 * qCos(4.78317696534 + 20199.094959633 * t); result += 6.49e-09 * qCos(1.04027912958 + 6062.6632075526 * t); result += 6.33e-09 * qCos(5.70229959167 + 45892.730433157 * t); result += 5.92e-09 * qCos(6.11836729658 + 9623.6882766912 * t); result += 5.23e-09 * qCos(3.62840021266 + 5333.9002410216 * t); result += 6.04e-09 * qCos(5.57734696185 + 10344.2950653858 * t); result += 4.96e-09 * qCos(2.21023499449 + 1990.745017041 * t); result += 6.91e-09 * qCos(1.96071732602 + 12416.5885028482 * t); result += 6.4e-09 * qCos(1.59074172032 + 18319.5365848796 * t); result += 6.25e-09 * qCos(3.82362791378 + 13517.8701062334 * t); result += 6.63e-09 * qCos(5.08444996779 + 283.8593188652 * t); result += 4.75e-09 * qCos(1.17025894287 + 12569.6748183318 * t); result += 6.64e-09 * qCos(4.50029469969 + 47162.5163546352 * t); result += 5.69e-09 * qCos(0.16310365162 + 17267.2682016912 * t); result += 5.68e-09 * qCos(3.86100969474 + 6076.8903015542 * t); result += 5.39e-09 * qCos(4.83282276086 + 18422.6293590982 * t); result += 4.66e-09 * qCos(0.75872342878 + 7342.4577801806 * t); result += 5.41e-09 * qCos(3.07212190507 + 226858.23855437 * t); result += 4.58e-09 * qCos(0.26774483096 + 4590.910180489 * t); result += 6.1e-09 * qCos(1.53597051291 + 33019.0211122046 * t); result += 6.17e-09 * qCos(2.62356328726 + 11190.377900137 * t); result += 5.48e-09 * qCos(4.55798855791 + 18875.525869774 * t); result += 6.33e-09 * qCos(4.60110281228 + 66567.4858652543 * t); result += 5.96e-09 * qCos(5.78202396722 + 632.7837393132 * t); result += 5.33e-09 * qCos(5.01786882904 + 12132.439962106 * t); result += 6.03e-09 * qCos(5.38458554802 + 316428.228673915 * t); result += 4.69e-09 * qCos(0.59168241917 + 21954.157609398 * t); result += 5.48e-09 * qCos(3.50613163558 + 17253.0411076896 * t); result += 5.02e-09 * qCos(0.98804327589 + 11609.8625440122 * t); result += 5.68e-09 * qCos(1.98497313089 + 7668.6374249425 * t); result += 4.82e-09 * qCos(1.62141803864 + 12146.6670561076 * t); result += 3.91e-09 * qCos(3.68718382989 + 18052.9295431578 * t); result += 4.57e-09 * qCos(3.7720573734 + 156137.475984799 * t); result += 4.01e-09 * qCos(5.28260651958 + 15671.0817594066 * t); result += 4.69e-09 * qCos(1.80963184268 + 12562.6285816338 * t); result += 5.08e-09 * qCos(3.36399024699 + 20597.2439630412 * t); result += 4.5e-09 * qCos(5.6605429925 + 10454.5013866052 * t); result += 3.75e-09 * qCos(4.98534633105 + 9779.1086761254 * t); result += 5.23e-09 * qCos(0.97215560834 + 155427.542936241 * t); result += 4.03e-09 * qCos(5.13939866506 + 1551.045222648 * t); result += 3.72e-09 * qCos(3.69883738807 + 9388.0059094152 * t); result += 3.67e-09 * qCos(4.43875659716 + 4535.0594369244 * t); result += 4.06e-09 * qCos(4.208631566 + 12592.4500197826 * t); result += 3.6e-09 * qCos(2.53924644657 + 242.728603974 * t); result += 4.71e-09 * qCos(4.61907324819 + 5436.9930152402 * t); result += 4.41e-09 * qCos(5.83872966262 + 3496.032826134 * t); result += 3.85e-09 * qCos(4.94496680973 + 24356.7807886416 * t); result += 3.49e-09 * qCos(6.15018231784 + 19800.9459562248 * t); result += 3.55e-09 * qCos(0.21895678106 + 5429.8794682394 * t); result += 3.44e-09 * qCos(5.62993724928 + 2379.1644735716 * t); result += 3.8e-09 * qCos(2.72105213143 + 11933.3679606696 * t); result += 4.32e-09 * qCos(0.24221790536 + 17996.0311682222 * t); result += 3.78e-09 * qCos(5.22517556974 + 7477.522860216 * t); result += 3.37e-09 * qCos(5.10888041439 + 5849.3641121146 * t); result += 3.15e-09 * qCos(0.57827745123 + 10557.5941608238 * t); result += 3.18e-09 * qCos(4.49953141399 + 3634.6210245184 * t); result += 3.23e-09 * qCos(1.54274281393 + 10440.2742926036 * t); result += 3.09e-09 * qCos(5.76839284397 + 20.7753954924 * t); result += 3.01e-09 * qCos(2.34727604008 + 4686.8894077068 * t); result += 4.14e-09 * qCos(5.9323760231 + 51092.7260508548 * t); result += 3.61e-09 * qCos(2.1639860955 + 28237.2334593894 * t); result += 2.88e-09 * qCos(0.18376252189 + 13095.8426650774 * t); result += 2.77e-09 * qCos(5.12952205045 + 13119.7211028252 * t); result += 3.27e-09 * qCos(6.19222146204 + 6268.8487559898 * t); result += 2.73e-09 * qCos(0.30522428863 + 23141.5583829246 * t); result += 2.67e-09 * qCos(5.76152585786 + 5966.6839803348 * t); result += 3.08e-09 * qCos(5.99280509979 + 22805.7355659936 * t); result += 3.45e-09 * qCos(2.92489919444 + 36949.2308084242 * t); result += 2.53e-09 * qCos(5.20995219509 + 24072.9214697764 * t); result += 3.42e-09 * qCos(5.72702586209 + 16460.333529525 * t); result += 2.61e-09 * qCos(2.00304796059 + 6148.010769956 * t); result += 2.38e-09 * qCos(5.08264392839 + 6915.8595893046 * t); result += 2.49e-09 * qCos(2.94762789744 + 135.0650800354 * t); result += 3.06e-09 * qCos(3.89764686987 + 10988.808157535 * t); result += 3.05e-09 * qCos(0.05827812117 + 4701.1165017084 * t); result += 3.19e-09 * qCos(2.95712862064 + 163096.180361183 * t); result += 2.09e-09 * qCos(4.43768461442 + 6546.1597733642 * t); result += 2.7e-09 * qCos(2.06643178717 + 4804.209275927 * t); result += 2.17e-09 * qCos(0.73691592312 + 6303.8512454838 * t); result += 2.06e-09 * qCos(0.32075959415 + 25934.1243310894 * t); result += 2.18e-09 * qCos(0.18428135264 + 28286.9904848612 * t); result += 2.05e-09 * qCos(5.21312087405 + 20995.3929664494 * t); result += 1.99e-09 * qCos(0.44384292491 + 16737.5772365966 * t); result += 2.3e-09 * qCos(6.06567392849 + 6287.0080032545 * t); result += 2.19e-09 * qCos(1.291942163 + 5326.7866940208 * t); result += 2.01e-09 * qCos(1.74700937253 + 22743.4093795164 * t); result += 2.07e-09 * qCos(4.45440927276 + 6279.4854213396 * t); result += 2.69e-09 * qCos(6.0564044503 + 64471.9912417449 * t); result += 1.9e-09 * qCos(0.99256176518 + 29296.6153895786 * t); result += 2.38e-09 * qCos(5.42471431221 + 39609.6545831656 * t); result += 2.62e-09 * qCos(5.26961924198 + 522.5774180938 * t); result += 2.1e-09 * qCos(4.68618183158 + 6254.6266625236 * t); result += 1.97e-09 * qCos(2.8062455408 + 4933.2084403326 * t); result += 2.52e-09 * qCos(4.36220154608 + 40879.4405046438 * t); result += 2.61e-09 * qCos(1.07241516738 + 55022.9357470744 * t); result += 1.89e-09 * qCos(3.82966734476 + 419.4846438752 * t); result += 1.85e-09 * qCos(4.14324541379 + 5642.1982426092 * t); result += 2.47e-09 * qCos(3.44855612987 + 6702.5604938666 * t); result += 2.05e-09 * qCos(4.04424043223 + 536.8045120954 * t); result += 1.91e-09 * qCos(3.14082686083 + 16723.350142595 * t); result += 2.22e-09 * qCos(5.16263907319 + 23539.7073863328 * t); result += 1.8e-09 * qCos(4.56214752149 + 6489.2613984286 * t); result += 2.19e-09 * qCos(0.80382553358 + 16627.3709153772 * t); result += 2.27e-09 * qCos(0.60156339452 + 5905.7022420756 * t); result += 1.68e-09 * qCos(0.88753528161 + 16062.1845261168 * t); result += 1.58e-09 * qCos(0.92127725775 + 23937.856389741 * t); result += 1.57e-09 * qCos(4.69607868164 + 6805.6532680852 * t); result += 2.07e-09 * qCos(4.88410451334 + 6286.6662786432 * t); result += 1.6e-09 * qCos(4.95943826846 + 10021.8372800994 * t); result += 1.66e-09 * qCos(0.97126433565 + 3097.88382272579 * t); result += 2.09e-09 * qCos(5.75663411805 + 3646.3503773544 * t); result += 1.75e-09 * qCos(6.12762824412 + 239424.390254353 * t); result += 1.73e-09 * qCos(3.13887234973 + 6179.9830757728 * t); result += 1.57e-09 * qCos(3.62822058179 + 18451.078546566 * t); result += 1.57e-09 * qCos(4.67695912235 + 6709.6740408674 * t); result += 1.46e-09 * qCos(3.09506069735 + 4907.3020501456 * t); result += 1.65e-09 * qCos(2.2713912876 + 10660.6869350424 * t); result += 2.01e-09 * qCos(1.67701267433 + 2107.0345075424 * t); result += 1.44e-09 * qCos(3.96947747592 + 6019.9919266186 * t); result += 1.71e-09 * qCos(5.91302216729 + 6058.7310542895 * t); result += 1.44e-09 * qCos(2.1315565512 + 26084.0218062162 * t); result += 1.51e-09 * qCos(0.67417383554 + 2388.8940204492 * t); result += 1.89e-09 * qCos(5.07122281033 + 263.0839233728 * t); result += 1.46e-09 * qCos(5.10373877968 + 10770.8932562618 * t); result += 1.87e-09 * qCos(1.23915444627 + 19402.7969528166 * t); result += 1.74e-09 * qCos(0.08407293391 + 9380.9596727172 * t); result += 1.37e-09 * qCos(1.26247412309 + 12566.2190102856 * t); result += 1.37e-09 * qCos(3.52826010842 + 639.897286314 * t); result += 1.48e-09 * qCos(1.76124372592 + 5888.4499649322 * t); result += 1.64e-09 * qCos(2.39195095081 + 6357.8574485587 * t); result += 1.46e-09 * qCos(2.43675816553 + 5881.4037282342 * t); result += 1.61e-09 * qCos(1.15721259372 + 26735.9452622132 * t); result += 1.31e-09 * qCos(2.51859277344 + 6599.467719648 * t); result += 1.53e-09 * qCos(5.85203687779 + 6281.5913772831 * t); result += 1.51e-09 * qCos(3.72338532649 + 12669.2444742014 * t); result += 1.32e-09 * qCos(2.38417741883 + 6525.8044539654 * t); result += 1.29e-09 * qCos(0.75556744143 + 5017.508371365 * t); result += 1.27e-09 * qCos(0.00254936441 + 10027.9031957292 * t); result += 1.48e-09 * qCos(2.85102145528 + 6418.1409300268 * t); result += 1.43e-09 * qCos(5.74460279367 + 26087.9031415742 * t); result += 1.72e-09 * qCos(0.4128996224 + 174242.46596405 * t); result += 1.36e-09 * qCos(4.15497742275 + 6311.5250374592 * t); result += 1.7e-09 * qCos(5.98194913129 + 327574.514276781 * t); result += 1.24e-09 * qCos(1.65497607604 + 32217.2001810808 * t); result += 1.36e-09 * qCos(2.48430783417 + 13341.6743113068 * t); result += 1.65e-09 * qCos(2.496679246 + 58953.145443294 * t); result += 1.23e-09 * qCos(3.45660563754 + 6277.552925684 * t); result += 1.17e-09 * qCos(0.86065134175 + 6245.0481773556 * t); result += 1.49e-09 * qCos(5.61358280963 + 5729.506447149 * t); result += 1.53e-09 * qCos(0.2686002995 + 245.8316462294 * t); result += 1.28e-09 * qCos(0.71204006588 + 103.0927742186 * t); result += 1.59e-09 * qCos(2.43166592149 + 221995.028801495 * t); result += 1.3e-09 * qCos(2.80707316718 + 6016.4688082696 * t); result += 1.37e-09 * qCos(1.70657709294 + 12566.08438968 * t); result += 1.11e-09 * qCos(1.56305648432 + 17782.7320727842 * t); result += 1.13e-09 * qCos(3.58302904101 + 25685.872802808 * t); result += 1.09e-09 * qCos(3.26403795962 + 6819.8803620868 * t); result += 1.22e-09 * qCos(0.34120688217 + 1162.4747044078 * t); result += 1.19e-09 * qCos(5.84644718278 + 12721.572099417 * t); result += 1.44e-09 * qCos(2.28899679126 + 12489.8856287072 * t); result += 1.37e-09 * qCos(5.82029768354 + 44809.6502008634 * t); result += 1.07e-09 * qCos(2.4281854414 + 5547.1993364596 * t); result += 1.34e-09 * qCos(1.26539982939 + 5331.3574437408 * t); result += 1.03e-09 * qCos(5.96518130595 + 6321.1035226272 * t); result += 1.09e-09 * qCos(0.33808549034 + 11300.5842213564 * t); result += 1.29e-09 * qCos(5.89187277327 + 12029.3471878874 * t); result += 1.22e-09 * qCos(5.77325634636 + 11919.140866668 * t); result += 1.07e-09 * qCos(6.2499898935 + 77690.7595057385 * t); result += 1.07e-09 * qCos(1.00535580713 + 77736.7834305025 * t); result += 1.43e-09 * qCos(0.24122178432 + 4214.0690150848 * t); result += 1.43e-09 * qCos(0.88529649733 + 7576.560073574 * t); result += 1.07e-09 * qCos(2.92124030496 + 31415.379249957 * t); result += 9.9e-10 * qCos(5.70862227072 + 5540.0857894588 * t); result += 1.1e-09 * qCos(0.37528037383 + 5863.5912061162 * t); result += 1.04e-09 * qCos(4.44107178366 + 2118.7638603784 * t); result += 9.8e-10 * qCos(5.95877916706 + 4061.2192153944 * t); result += 1.13e-09 * qCos(1.24206857385 + 84672.4758445047 * t); result += 1.24e-09 * qCos(2.55619029867 + 12539.853380183 * t); result += 1.1e-09 * qCos(3.66952094329 + 238004.524157236 * t); result += 1.12e-09 * qCos(4.32512422943 + 97238.6275444875 * t); result += 9.7e-10 * qCos(3.70151541181 + 11720.0688652316 * t); result += 1.2e-09 * qCos(1.26895630252 + 12043.574281889 * t); result += 9.4e-10 * qCos(2.56461130309 + 19004.6479494084 * t); result += 1.17e-09 * qCos(3.65425622684 + 34520.3093093808 * t); result += 9.8e-10 * qCos(0.13589994287 + 11080.1715789176 * t); result += 9.7e-10 * qCos(5.38330115253 + 7834.1210726394 * t); result += 9.7e-10 * qCos(2.46722096722 + 71980.6335747312 * t); result += 9.5e-10 * qCos(5.36958330451 + 6288.5987742988 * t); result += 1.11e-09 * qCos(5.01961920313 + 11823.1616394502 * t); result += 9e-10 * qCos(2.72299804525 + 26880.3198130326 * t); result += 9.9e-10 * qCos(0.90164266377 + 18635.9284545362 * t); result += 1.26e-09 * qCos(4.78722177847 + 305281.943071049 * t); result += 9.3e-10 * qCos(0.21240380046 + 18139.2945014159 * t); result += 1.24e-09 * qCos(5.00979495566 + 172146.97134054 * t); result += 9.9e-10 * qCos(5.67090026475 + 16522.6597160022 * t); result += 9.2e-10 * qCos(2.28180963676 + 12491.3701014155 * t); result += 9e-10 * qCos(4.50544881196 + 40077.61957352 * t); result += 1e-09 * qCos(2.00639461612 + 12323.4230960088 * t); result += 9.5e-10 * qCos(5.68801979087 + 14919.0178537546 * t); result += 8.7e-10 * qCos(1.86043406047 + 27707.5424942948 * t); result += 1.05e-09 * qCos(3.02903468417 + 22345.2603761082 * t); result += 8.7e-10 * qCos(5.43970168638 + 6272.0301497275 * t); result += 8.9e-10 * qCos(1.63389387182 + 33326.5787331742 * t); result += 8.2e-10 * qCos(5.58298993353 + 10241.2022911672 * t); result += 9.4e-10 * qCos(5.47749711149 + 9924.8104215106 * t); result += 8.2e-10 * qCos(4.71988314145 + 15141.390794312 * t); result += 9.7e-10 * qCos(5.61458778738 + 2787.0430238574 * t); result += 9.6e-10 * qCos(3.89073946348 + 6379.0550772092 * t); result += 8.1e-10 * qCos(3.13038482444 + 36147.4098773004 * t); result += 1.1e-09 * qCos(4.89978492291 + 72140.6286666874 * t); result += 9.7e-10 * qCos(5.20764563059 + 6303.4311693902 * t); result += 8.2e-10 * qCos(5.26342716139 + 9814.6041002912 * t); result += 1.09e-09 * qCos(2.3555558977 + 83286.9142695536 * t); result += 9.7e-10 * qCos(2.58492958057 + 30666.1549584328 * t); result += 9.3e-10 * qCos(1.32651591333 + 23020.653086588 * t); result += 7.8e-10 * qCos(3.99588630754 + 11293.4706743556 * t); result += 9e-10 * qCos(0.57771932738 + 26482.1708096244 * t); result += 1.06e-09 * qCos(3.92012705073 + 62883.3551395136 * t); result += 9.8e-10 * qCos(2.94397773524 + 316.3918696566 * t); result += 7.6e-10 * qCos(3.96310417608 + 29026.4852295078 * t); result += 7.8e-10 * qCos(1.97068529306 + 90279.9231681033 * t); result += 7.6e-10 * qCos(0.23027966596 + 21424.4666443034 * t); result += 8e-10 * qCos(2.23099742212 + 266.6070417218 * t); result += 7.9e-10 * qCos(1.46227790922 + 8982.810669309 * t); result += 1.02e-09 * qCos(4.92129953565 + 5621.8429232104 * t); result += 1e-09 * qCos(0.39243148321 + 24279.1070182136 * t); result += 7.1e-10 * qCos(1.52014858474 + 33794.5437235286 * t); result += 7.6e-10 * qCos(0.22880641443 + 57375.8019008462 * t); result += 9.1e-10 * qCos(0.96515913904 + 48739.859897083 * t); result += 7.5e-10 * qCos(2.77638585157 + 12964.300703391 * t); result += 7.7e-10 * qCos(5.18846946344 + 11520.9968637952 * t); result += 6.8e-10 * qCos(0.50006599129 + 4274.5183108324 * t); result += 7.5e-10 * qCos(2.07323762803 + 15664.0355227086 * t); result += 7.4e-10 * qCos(1.01884134928 + 6393.2821712108 * t); result += 7.7e-10 * qCos(0.4666517878 + 16207.886271502 * t); result += 8.1e-10 * qCos(4.10452219483 + 161710.618786232 * t); result += 6.7e-10 * qCos(3.83840630887 + 6262.7205305926 * t); result += 7.1e-10 * qCos(3.91415523291 + 7875.6718636242 * t); result += 8.1e-10 * qCos(0.91938383237 + 74.7815985673 * t); result += 8.3e-10 * qCos(4.69916218791 + 23006.4259925864 * t); result += 6.3e-10 * qCos(2.32556465878 + 6279.1945146334 * t); result += 6.5e-10 * qCos(5.41938745446 + 28628.3362260996 * t); result += 6.5e-10 * qCos(3.02336771694 + 5959.570433334 * t); result += 6.4e-10 * qCos(3.3103319837 + 2636.725472637 * t); result += 6.4e-10 * qCos(0.18375587519 + 1066.49547719 * t); result += 8e-10 * qCos(5.81239171612 + 12341.8069042809 * t); result += 6.6e-10 * qCos(2.15105504851 + 38.0276726358 * t); result += 6.2e-10 * qCos(2.43313614978 + 10138.1095169486 * t); result += 6e-10 * qCos(3.1615390647 + 5490.300961524 * t); result += 6.9e-10 * qCos(0.30764736334 + 7018.9523635232 * t); result += 6.8e-10 * qCos(2.24442548639 + 24383.0791084414 * t); result += 7.8e-10 * qCos(1.39649386463 + 9411.4646150872 * t); result += 6.3e-10 * qCos(0.72976362625 + 6286.9571853494 * t); result += 7.3e-10 * qCos(4.95125917731 + 6453.7487206106 * t); result += 7.8e-10 * qCos(0.32736023459 + 6528.9074962208 * t); result += 5.9e-10 * qCos(4.95362151577 + 35707.7100829074 * t); result += 7e-10 * qCos(2.37962727525 + 15508.6151232744 * t); result += 7.3e-10 * qCos(1.35229143111 + 5327.4761083828 * t); result += 7.2e-10 * qCos(5.91833527334 + 10881.0995774812 * t); result += 5.9e-10 * qCos(5.36231868425 + 10239.5838660108 * t); result += 5.9e-10 * qCos(1.63156134967 + 61306.0115970658 * t); result += 5.4e-10 * qCos(4.29491690425 + 21947.1113727 * t); result += 5.7e-10 * qCos(5.89190132575 + 34513.2630726828 * t); result += 7.4e-10 * qCos(1.38235845304 + 9967.4538999816 * t); result += 5.3e-10 * qCos(3.86543309344 + 32370.9789915656 * t); result += 5.5e-10 * qCos(4.51794544854 + 34911.412076091 * t); result += 6.3e-10 * qCos(5.41479412056 + 11502.8376165305 * t); result += 6.3e-10 * qCos(2.34416220742 + 11510.7019230567 * t); result += 6.8e-10 * qCos(0.77493931112 + 29864.334027309 * t); result += 6e-10 * qCos(5.57024703495 + 5756.9080032458 * t); result += 7.2e-10 * qCos(2.80863088166 + 10866.8724834796 * t); result += 6.1e-10 * qCos(2.69736991384 + 82576.9812209953 * t); result += 6.3e-10 * qCos(5.32068807257 + 3116.6594122598 * t); result += 5.2e-10 * qCos(1.02278758099 + 6272.4391846416 * t); result += 6.9e-10 * qCos(5.00698550308 + 25287.7237993998 * t); result += 6.6e-10 * qCos(6.12047940728 + 12074.488407524 * t); result += 5.1e-10 * qCos(2.59519527563 + 11396.5634485742 * t); result += 5.6e-10 * qCos(2.57995973521 + 17892.9383940036 * t); result += 5.9e-10 * qCos(0.4416723762 + 250570.675857219 * t); result += 5.9e-10 * qCos(3.84070143543 + 5483.254724826 * t); result += 4.9e-10 * qCos(0.54704693048 + 22594.054895712 * t); result += 6.5e-10 * qCos(2.38423614501 + 52670.0695933026 * t); result += 6.9e-10 * qCos(5.34363738671 + 66813.5648357332 * t); result += 5.7e-10 * qCos(5.42770501007 + 310145.152823924 * t); result += 5.3e-10 * qCos(1.17760296075 + 149.5631971346 * t); result += 6.1e-10 * qCos(4.02090887211 + 34596.3646546524 * t); result += 4.9e-10 * qCos(4.18361320516 + 18606.4989460002 * t); result += 5.5e-10 * qCos(0.83886167974 + 20452.8694122218 * t); result += 5e-10 * qCos(1.46327331958 + 37455.7264959744 * t); result += 4.8e-10 * qCos(4.53854727167 + 29822.7832363242 * t); result += 5.8e-10 * qCos(3.34847975377 + 33990.6183442862 * t); result += 6.5e-10 * qCos(1.45522693982 + 76251.3277706202 * t); result += 5.6e-10 * qCos(2.35650663692 + 37724.7534197482 * t); result += 5.2e-10 * qCos(2.61551081496 + 5999.2165311262 * t); result += 5.3e-10 * qCos(0.17334326094 + 77717.2945864695 * t); result += 5.3e-10 * qCos(0.79879700631 + 77710.2483497715 * t); result += 4.7e-10 * qCos(0.43240779709 + 735.8765135318 * t); result += 5.3e-10 * qCos(4.58763261686 + 11616.976091013 * t); result += 4.8e-10 * qCos(6.20230111054 + 4171.4255366138 * t); result += 5.2e-10 * qCos(1.09723616404 + 640.8776073822 * t); result += 5.7e-10 * qCos(3.42008310383 + 50317.2034395308 * t); result += 5.3e-10 * qCos(1.01528448581 + 149144.46708625 * t); result += 4.7e-10 * qCos(3.00924906195 + 52175.8062831484 * t); result += 5.2e-10 * qCos(2.03254070404 + 6293.7125153412 * t); result += 4.8e-10 * qCos(0.12356889734 + 13362.4497067992 * t); result += 4.5e-10 * qCos(3.37963782356 + 10763.779709261 * t); result += 4.7e-10 * qCos(5.50981287869 + 12779.4507954208 * t); result += 6.2e-10 * qCos(5.45209070099 + 949.1756089698 * t); result += 6.1e-10 * qCos(2.93237974631 + 5791.4125575326 * t); result += 4.4e-10 * qCos(2.87440620802 + 8584.6616659008 * t); result += 4.6e-10 * qCos(4.0314179656 + 10667.8004820432 * t); result += 4.7e-10 * qCos(3.89902931422 + 3903.9113764198 * t); result += 4.6e-10 * qCos(2.75700467329 + 6993.0088985497 * t); result += 4.5e-10 * qCos(1.933862933 + 206.1855484372 * t); result += 4.7e-10 * qCos(2.57670800912 + 11492.542675792 * t); result += 4.4e-10 * qCos(3.62570223167 + 63658.8777508376 * t); result += 5.1e-10 * qCos(0.84536826273 + 12345.739057544 * t); result += 4.3e-10 * qCos(0.01524970172 + 37853.8754993826 * t); result += 4.1e-10 * qCos(3.27146326065 + 8858.3149443206 * t); result += 4.5e-10 * qCos(3.03765521215 + 65236.2212932854 * t); result += 4.7e-10 * qCos(1.44447548944 + 21393.5419698576 * t); result += 5.8e-10 * qCos(5.45843180927 + 1975.492545856 * t); result += 5e-10 * qCos(2.13285524146 + 12573.2652469836 * t); result += 4.1e-10 * qCos(1.32190847146 + 2547.8375382324 * t); result += 4.7e-10 * qCos(3.67579608544 + 28313.288804661 * t); result += 4.1e-10 * qCos(2.24013475126 + 8273.8208670324 * t); result += 4.7e-10 * qCos(6.21438985953 + 10991.3058987006 * t); result += 4.2e-10 * qCos(3.0163181735 + 853.196381752 * t); result += 5.6e-10 * qCos(1.09773690181 + 77376.2010224076 * t); result += 4e-10 * qCos(2.35698541041 + 2699.7348193176 * t); result += 4.3e-10 * qCos(5.28030898459 + 17796.9591667858 * t); result += 5.4e-10 * qCos(2.59175932091 + 22910.4467653686 * t); result += 5.4e-10 * qCos(0.88027764102 + 71960.3865832237 * t); result += 5.5e-10 * qCos(0.07988899477 + 83467.1563530173 * t); result += 3.9e-10 * qCos(1.12867321442 + 9910.583327509 * t); result += 4e-10 * qCos(1.35670430524 + 27177.8515292002 * t); result += 3.9e-10 * qCos(4.39624220245 + 5618.3198048614 * t); result += 4.2e-10 * qCos(4.78798367468 + 7856.89627409019 * t); result += 4.7e-10 * qCos(2.75482175292 + 18202.2167166594 * t); result += 3.9e-10 * qCos(1.97008298629 + 24491.4257925834 * t); result += 4.2e-10 * qCos(4.04346599946 + 7863.9425107882 * t); result += 3.8e-10 * qCos(0.49178679251 + 38650.173506199 * t); result += 3.6e-10 * qCos(4.86047906533 + 4157.1984426122 * t); result += 4.3e-10 * qCos(5.64354880978 + 1062.9050485382 * t); result += 3.6e-10 * qCos(3.98066313627 + 12565.1713789146 * t); result += 4.2e-10 * qCos(2.30753932657 + 6549.6828917132 * t); result += 4e-10 * qCos(5.3969491832 + 9498.2122306346 * t); result += 4e-10 * qCos(3.30603243754 + 23536.116957681 * t); result += 5e-10 * qCos(6.15760345261 + 78051.3419138334 * t); return result; } double GetEarthR1(double t) { double result = 0.0; result += 0.00103018608 * qCos(1.10748969588 + 6283.0758499914 * t); result += 1.721238e-05 * qCos(1.06442301418 + 12566.1516999828 * t); result -= -7.02215e-06; result += 3.2346e-07 * qCos(1.02169059149 + 18849.2275499742 * t); result += 3.0799e-07 * qCos(2.84353804832 + 5507.5532386674 * t); result += 2.4971e-07 * qCos(1.31906709482 + 5223.6939198022 * t); result += 1.8485e-07 * qCos(1.42429748614 + 1577.3435424478 * t); result += 1.0078e-07 * qCos(5.91378194648 + 10977.078804699 * t); result += 8.634e-08 * qCos(0.27146150602 + 5486.777843175 * t); result += 8.654e-08 * qCos(1.42046854427 + 6275.9623029906 * t); result += 5.069e-08 * qCos(1.68613426734 + 5088.6288397668 * t); result += 4.985e-08 * qCos(6.01401770704 + 6286.5989683404 * t); result += 4.669e-08 * qCos(5.98724494073 + 529.6909650946 * t); result += 4.395e-08 * qCos(0.51800238019 + 4694.0029547076 * t); result += 3.872e-08 * qCos(4.74969833437 + 2544.3144198834 * t); result += 3.75e-08 * qCos(5.07097685568 + 796.2980068164 * t); result += 4.1e-08 * qCos(1.08424786092 + 9437.762934887 * t); result += 3.518e-08 * qCos(0.02290216272 + 83996.8473181119 * t); result += 3.436e-08 * qCos(0.94937019624 + 71430.6956181291 * t); result += 3.221e-08 * qCos(6.15628775313 + 2146.1654164752 * t); result += 3.414e-08 * qCos(5.41218322538 + 775.522611324 * t); result += 2.863e-08 * qCos(5.48432847146 + 10447.3878396044 * t); result += 2.52e-08 * qCos(0.24276941146 + 398.1490034082 * t); result += 2.201e-08 * qCos(4.95216196651 + 6812.766815086 * t); result += 2.186e-08 * qCos(0.41991743105 + 8031.0922630584 * t); result += 2.838e-08 * qCos(3.42034351366 + 2352.8661537718 * t); result += 2.554e-08 * qCos(6.13241878525 + 6438.4962494256 * t); result += 1.932e-08 * qCos(5.31374608366 + 8429.2412664666 * t); result += 2.429e-08 * qCos(3.09164528262 + 4690.4798363586 * t); result += 1.73e-08 * qCos(1.5368620855 + 4705.7323075436 * t); result += 2.25e-08 * qCos(3.68863633842 + 7084.8967811152 * t); result += 2.093e-08 * qCos(1.28191783032 + 1748.016413067 * t); result += 1.441e-08 * qCos(0.81656250862 + 14143.4952424306 * t); result += 1.483e-08 * qCos(3.22225357771 + 7234.794256242 * t); result += 1.754e-08 * qCos(3.22883705112 + 6279.5527316424 * t); result += 1.583e-08 * qCos(4.09702349428 + 11499.6562227928 * t); result += 1.575e-08 * qCos(5.53890170575 + 3154.6870848956 * t); result += 1.847e-08 * qCos(1.82040335363 + 7632.9432596502 * t); result += 1.504e-08 * qCos(3.63293385726 + 11513.8833167944 * t); result += 1.337e-08 * qCos(4.64440864339 + 6836.6452528338 * t); result += 1.275e-08 * qCos(2.69341415363 + 1349.8674096588 * t); result += 1.352e-08 * qCos(6.15101580257 + 5746.271337896 * t); result += 1.125e-08 * qCos(3.35673439497 + 17789.845619785 * t); result += 1.47e-08 * qCos(3.65282991755 + 1194.4470102246 * t); result += 1.177e-08 * qCos(2.57676109092 + 13367.9726311066 * t); result += 1.101e-08 * qCos(4.49748696552 + 4292.3308329504 * t); result += 1.234e-08 * qCos(5.65036509521 + 5760.4984318976 * t); result += 9.84e-09 * qCos(0.65517395136 + 5856.4776591154 * t); result += 9.28e-09 * qCos(2.32420318751 + 10213.285546211 * t); result += 1.077e-08 * qCos(5.82812169132 + 12036.4607348882 * t); result += 9.16e-09 * qCos(0.76613009583 + 16730.4636895958 * t); result += 8.77e-09 * qCos(1.50137505051 + 11926.2544136688 * t); result += 1.023e-08 * qCos(5.62076589825 + 6256.7775301916 * t); result += 8.51e-09 * qCos(0.65709335533 + 155.4203994342 * t); result += 8.02e-09 * qCos(4.10519132088 + 951.7184062506 * t); result += 8.57e-09 * qCos(1.41661697538 + 5753.3848848968 * t); result += 9.94e-09 * qCos(1.14418521187 + 1059.3819301892 * t); result += 8.13e-09 * qCos(1.63948433322 + 6681.2248533996 * t); result += 6.62e-09 * qCos(4.5520045226 + 5216.5803728014 * t); result += 6.44e-09 * qCos(4.19478168733 + 6040.3472460174 * t); result += 6.26e-09 * qCos(1.50767713598 + 5643.1785636774 * t); result += 5.9e-09 * qCos(6.18277145205 + 4164.311989613 * t); result += 6.35e-09 * qCos(0.52413263542 + 6290.1893969922 * t); result += 6.5e-09 * qCos(0.9793569035 + 25132.3033999656 * t); result += 5.68e-09 * qCos(2.30125315873 + 10973.55568635 * t); result += 5.47e-09 * qCos(5.27256412213 + 3340.6124266998 * t); result += 5.47e-09 * qCos(2.20144422886 + 1592.5960136328 * t); result += 5.26e-09 * qCos(0.92464258226 + 11371.7046897582 * t); result += 4.9e-09 * qCos(5.90951388655 + 3894.1818295422 * t); result += 4.78e-09 * qCos(1.66857963179 + 12168.0026965746 * t); result += 5.16e-09 * qCos(3.59803483887 + 10969.9652576982 * t); result += 5.18e-09 * qCos(3.97914412373 + 17298.1823273262 * t); result += 5.34e-09 * qCos(5.03740926442 + 9917.6968745098 * t); result += 4.87e-09 * qCos(2.50545369269 + 6127.6554505572 * t); result += 4.16e-09 * qCos(4.04828175503 + 10984.1923516998 * t); result += 5.38e-09 * qCos(5.54081539805 + 553.5694028424 * t); result += 4.02e-09 * qCos(2.16544019233 + 7860.4193924392 * t); result += 5.53e-09 * qCos(2.32177369366 + 11506.7697697936 * t); result += 3.67e-09 * qCos(3.3915253225 + 6496.3749454294 * t); result += 3.6e-09 * qCos(5.34379853282 + 7079.3738568078 * t); result += 3.37e-09 * qCos(3.61563704045 + 11790.6290886588 * t); result += 4.56e-09 * qCos(0.30754294809 + 801.8209311238 * t); result += 4.17e-09 * qCos(3.70009308674 + 10575.4066829418 * t); result += 3.81e-09 * qCos(5.82033971802 + 7058.5984613154 * t); result += 3.21e-09 * qCos(0.31988767355 + 16200.7727245012 * t); result += 3.64e-09 * qCos(1.08414306177 + 6309.3741697912 * t); result += 2.94e-09 * qCos(4.54798604957 + 11856.2186514245 * t); result += 2.9e-09 * qCos(1.26473978562 + 8635.9420037632 * t); result += 3.99e-09 * qCos(4.16998866302 + 26.2983197998 * t); result += 2.62e-09 * qCos(5.08316906342 + 10177.2576795336 * t); result += 2.43e-09 * qCos(2.2574609119 + 11712.9553182308 * t); result += 2.37e-09 * qCos(1.05070575346 + 242.728603974 * t); result += 2.75e-09 * qCos(3.45319481756 + 5884.9268465832 * t); result += 2.55e-09 * qCos(5.38496831087 + 21228.3920235458 * t); result += 3.07e-09 * qCos(4.24313526604 + 3738.761430108 * t); result += 2.16e-09 * qCos(3.46037894728 + 213.299095438 * t); result += 1.96e-09 * qCos(0.69029243914 + 1990.745017041 * t); result += 1.98e-09 * qCos(5.16301829964 + 12352.8526045448 * t); result += 2.14e-09 * qCos(3.91876200279 + 13916.0191096416 * t); result += 2.12e-09 * qCos(4.00861198517 + 5230.807466803 * t); result += 1.84e-09 * qCos(5.59805976614 + 6283.14316029419 * t); result += 1.84e-09 * qCos(2.85275392124 + 7238.6755916 * t); result += 1.79e-09 * qCos(2.54259058334 + 14314.1681130498 * t); result += 2.25e-09 * qCos(1.64458698399 + 4732.0306273434 * t); result += 2.36e-09 * qCos(5.58826125715 + 6069.7767545534 * t); result += 1.87e-09 * qCos(2.72805985443 + 6062.6632075526 * t); result += 1.84e-09 * qCos(6.04216273598 + 6283.0085396886 * t); result += 2.3e-09 * qCos(3.62591335086 + 6284.0561710596 * t); result += 1.63e-09 * qCos(2.19117396803 + 18073.7049386502 * t); result += 1.72e-09 * qCos(0.9761295074 + 3930.2096962196 * t); result += 2.15e-09 * qCos(1.04672844028 + 3496.032826134 * t); result += 1.69e-09 * qCos(4.75084479006 + 17267.2682016912 * t); result += 1.52e-09 * qCos(0.19390712179 + 9779.1086761254 * t); result += 1.82e-09 * qCos(5.16288118255 + 17253.0411076896 * t); result += 1.49e-09 * qCos(0.8094418426 + 709.9330485583 * t); result += 1.63e-09 * qCos(2.1920957039 + 6076.8903015542 * t); result += 1.86e-09 * qCos(5.01159497089 + 11015.1064773348 * t); result += 1.34e-09 * qCos(0.97765485759 + 65147.6197681377 * t); result += 1.41e-09 * qCos(4.38421981312 + 4136.9104335162 * t); result += 1.58e-09 * qCos(4.60974280627 + 9623.6882766912 * t); result += 1.33e-09 * qCos(3.30508592837 + 154717.609887683 * t); result += 1.63e-09 * qCos(6.11782626245 + 3.523118349 * t); result += 1.74e-09 * qCos(1.58078542187 + 7.1135470008 * t); result += 1.41e-09 * qCos(0.49976927274 + 25158.6017197654 * t); result += 1.24e-09 * qCos(6.03440460031 + 9225.539273283 * t); result += 1.5e-09 * qCos(5.30166336812 + 13517.8701062334 * t); result += 1.27e-09 * qCos(1.92389511438 + 22483.8485744926 * t); result += 1.21e-09 * qCos(2.37813129011 + 167283.761587666 * t); result += 1.2e-09 * qCos(3.98423684853 + 4686.8894077068 * t); result += 1.17e-09 * qCos(5.81072642211 + 12569.6748183318 * t); result += 1.22e-09 * qCos(5.60973054224 + 5642.1982426092 * t); result += 1.57e-09 * qCos(3.40236426002 + 16496.3613962024 * t); result += 1.29e-09 * qCos(2.10705116371 + 1589.0728952838 * t); result += 1.16e-09 * qCos(0.55839966736 + 5849.3641121146 * t); result += 1.23e-09 * qCos(1.52961392771 + 12559.038152982 * t); result += 1.11e-09 * qCos(0.44848279675 + 6172.869528772 * t); result += 1.23e-09 * qCos(5.81645568991 + 6282.0955289232 * t); result += 1.5e-09 * qCos(4.26278409223 + 3128.3887650958 * t); result += 1.06e-09 * qCos(2.27437761356 + 5429.8794682394 * t); result += 1.04e-09 * qCos(4.42743707728 + 23543.2305046818 * t); result += 1.21e-09 * qCos(0.39459045915 + 12132.439962106 * t); result += 1.04e-09 * qCos(2.41842602527 + 426.598190876 * t); result += 1.1e-09 * qCos(5.80381480447 + 16858.4825329332 * t); result += 1e-09 * qCos(2.93805577485 + 4535.0594369244 * t); result += 9.7e-10 * qCos(3.97935904984 + 6133.5126528568 * t); result += 1.1e-09 * qCos(6.22339014386 + 12146.6670561076 * t); result += 9.8e-10 * qCos(0.87576563709 + 6525.8044539654 * t); result += 9.8e-10 * qCos(3.15248421301 + 10440.2742926036 * t); result += 9.5e-10 * qCos(2.461684111 + 3097.88382272579 * t); result += 8.8e-10 * qCos(0.23371480284 + 13119.7211028252 * t); result += 9.8e-10 * qCos(5.77016493489 + 7342.4577801806 * t); result += 9.2e-10 * qCos(6.03915555063 + 20426.571092422 * t); result += 9.6e-10 * qCos(5.56909292561 + 2388.8940204492 * t); result += 8.1e-10 * qCos(1.32131147691 + 5650.2921106782 * t); result += 8.6e-10 * qCos(3.94529200528 + 10454.5013866052 * t); result += 7.6e-10 * qCos(2.70729716925 + 143571.324284816 * t); result += 9.1e-10 * qCos(5.64100034152 + 8827.3902698748 * t); result += 7.6e-10 * qCos(1.80783856698 + 28286.9904848612 * t); result += 8.1e-10 * qCos(1.90858992196 + 29088.811415985 * t); result += 7.5e-10 * qCos(3.40955892978 + 5481.2549188676 * t); result += 6.9e-10 * qCos(4.49936170873 + 17256.6315363414 * t); result += 8.8e-10 * qCos(1.10098454357 + 11769.8536931664 * t); result += 6.6e-10 * qCos(2.78285801977 + 536.8045120954 * t); result += 6.8e-10 * qCos(3.88179770758 + 17260.1546546904 * t); result += 8.4e-10 * qCos(1.59303306354 + 9380.9596727172 * t); result += 8.8e-10 * qCos(3.88076636762 + 7477.522860216 * t); result += 6.1e-10 * qCos(6.17558202197 + 11087.2851259184 * t); result += 6e-10 * qCos(4.34824715818 + 6206.8097787158 * t); result += 8.2e-10 * qCos(4.59843208943 + 9388.0059094152 * t); result += 7.9e-10 * qCos(1.63131230601 + 4933.2084403326 * t); result += 7.8e-10 * qCos(4.20905757484 + 5729.506447149 * t); result += 5.7e-10 * qCos(5.48157926651 + 18319.5365848796 * t); result += 6e-10 * qCos(1.01261781084 + 12721.572099417 * t); result += 5.6e-10 * qCos(1.63031935692 + 15720.8387848784 * t); result += 5.5e-10 * qCos(0.24926735018 + 15110.4661198662 * t); result += 6.1e-10 * qCos(5.93059279661 + 12539.853380183 * t); result += 5.5e-10 * qCos(4.84298966314 + 13095.8426650774 * t); result += 6.7e-10 * qCos(6.11690589247 + 8662.240323563 * t); result += 5.4e-10 * qCos(5.73750638571 + 3634.6210245184 * t); result += 7.4e-10 * qCos(1.05466745829 + 16460.333529525 * t); result += 5.3e-10 * qCos(2.29084335688 + 16062.1845261168 * t); result += 6.4e-10 * qCos(2.13513767927 + 7875.6718636242 * t); result += 6.7e-10 * qCos(0.07096807518 + 14945.3161735544 * t); result += 5.1e-10 * qCos(2.31511194429 + 6262.7205305926 * t); result += 5.7e-10 * qCos(5.77055471237 + 12043.574281889 * t); result += 5.6e-10 * qCos(4.41980790431 + 4701.1165017084 * t); result += 5.9e-10 * qCos(5.87963500073 + 5331.3574437408 * t); result += 5.8e-10 * qCos(2.30546168628 + 955.5997416086 * t); result += 4.9e-10 * qCos(1.93839278478 + 5333.9002410216 * t); result += 4.8e-10 * qCos(2.69973662261 + 6709.6740408674 * t); result += 6.4e-10 * qCos(1.64379897981 + 6262.300454499 * t); result += 4.6e-10 * qCos(3.98449608961 + 98068.5367163054 * t); result += 5e-10 * qCos(3.68875893005 + 12323.4230960088 * t); result += 4.5e-10 * qCos(3.30068569697 + 22003.9146348698 * t); result += 4.7e-10 * qCos(1.26317154881 + 11919.140866668 * t); result += 4.5e-10 * qCos(0.89150445122 + 51868.2486621788 * t); result += 4.3e-10 * qCos(1.61526242998 + 6277.552925684 * t); result += 4.3e-10 * qCos(5.74295325645 + 11403.676995575 * t); result += 4.4e-10 * qCos(3.43070646822 + 10021.8372800994 * t); result += 5.6e-10 * qCos(0.02481833774 + 15671.0817594066 * t); result += 5.5e-10 * qCos(3.14274403422 + 33019.0211122046 * t); result += 4.5e-10 * qCos(3.00877289177 + 8982.810669309 * t); result += 4.6e-10 * qCos(0.73303568429 + 6303.4311693902 * t); result += 4.9e-10 * qCos(1.60455690285 + 6303.8512454838 * t); result += 4.5e-10 * qCos(0.40210030323 + 6805.6532680852 * t); result += 5.3e-10 * qCos(0.94869680175 + 10988.808157535 * t); result += 4.1e-10 * qCos(1.61122384329 + 6819.8803620868 * t); result += 5.5e-10 * qCos(0.89439119424 + 11933.3679606696 * t); result += 4.5e-10 * qCos(3.88495384656 + 60530.4889857418 * t); result += 4e-10 * qCos(4.75740908001 + 38526.574350872 * t); result += 4e-10 * qCos(1.49921251887 + 18451.078546566 * t); result += 4e-10 * qCos(3.77498297228 + 26087.9031415742 * t); result += 5.1e-10 * qCos(1.70258603562 + 1551.045222648 * t); result += 3.9e-10 * qCos(2.97100699926 + 2118.7638603784 * t); result += 5.3e-10 * qCos(5.19854123078 + 77713.7714681205 * t); result += 4.7e-10 * qCos(4.26356628717 + 21424.4666443034 * t); result += 3.7e-10 * qCos(0.62902722802 + 24356.7807886416 * t); result += 3.6e-10 * qCos(0.11087914947 + 10344.2950653858 * t); result += 3.6e-10 * qCos(0.77037556319 + 12029.3471878874 * t); result += 3.5e-10 * qCos(3.30933994515 + 24072.9214697764 * t); result += 3.5e-10 * qCos(5.93650887012 + 31570.7996493912 * t); result += 3.6e-10 * qCos(2.15108874765 + 30774.5016425748 * t); result += 3.6e-10 * qCos(1.75078825382 + 16207.886271502 * t); result += 3.3e-10 * qCos(5.06264177921 + 226858.23855437 * t); result += 3.4e-10 * qCos(6.168913788 + 24491.4257925834 * t); result += 3.5e-10 * qCos(3.19120695549 + 32217.2001810808 * t); result += 3.4e-10 * qCos(2.31528650443 + 55798.4583583984 * t); result += 3.2e-10 * qCos(4.21446357042 + 15664.0355227086 * t); result += 3.9e-10 * qCos(1.24979117796 + 6418.1409300268 * t); result += 3.7e-10 * qCos(4.1194365577 + 2787.0430238574 * t); result += 3.2e-10 * qCos(1.6288771089 + 639.897286314 * t); result += 3.8e-10 * qCos(5.89832942685 + 640.8776073822 * t); result += 3.2e-10 * qCos(1.72442327688 + 27433.889215875 * t); result += 3.1e-10 * qCos(2.78828943753 + 12139.5535091068 * t); result += 3.5e-10 * qCos(4.44608896525 + 18202.2167166594 * t); result += 3.4e-10 * qCos(3.96287980676 + 18216.443810661 * t); result += 3.3e-10 * qCos(4.73611335874 + 16723.350142595 * t); result += 3.4e-10 * qCos(1.43910280005 + 49515.382508407 * t); result += 3.1e-10 * qCos(0.23302920161 + 23581.2581773176 * t); result += 2.9e-10 * qCos(2.0263384022 + 11609.8625440122 * t); result += 3e-10 * qCos(2.5492323024 + 9924.8104215106 * t); result += 3.2e-10 * qCos(4.91793198558 + 11300.5842213564 * t); result += 2.8e-10 * qCos(0.26187189577 + 13521.7514415914 * t); result += 2.8e-10 * qCos(3.84568936822 + 2699.7348193176 * t); result += 2.9e-10 * qCos(1.83149729794 + 29822.7832363242 * t); result += 3.3e-10 * qCos(4.60320094415 + 19004.6479494084 * t); result += 2.7e-10 * qCos(4.46183450287 + 6702.5604938666 * t); result += 3e-10 * qCos(4.4649407224 + 36147.4098773004 * t); result += 2.7e-10 * qCos(0.03211931363 + 6279.7894925736 * t); result += 2.6e-10 * qCos(5.46497324333 + 6245.0481773556 * t); result += 3.5e-10 * qCos(4.52695674113 + 36949.2308084242 * t); result += 2.7e-10 * qCos(3.52528177609 + 10770.8932562618 * t); result += 2.6e-10 * qCos(1.48499438453 + 11080.1715789176 * t); result += 3.5e-10 * qCos(2.82154380962 + 19402.7969528166 * t); result += 2.5e-10 * qCos(2.46339998836 + 6279.4854213396 * t); result += 2.6e-10 * qCos(4.97688894643 + 16737.5772365966 * t); result += 2.6e-10 * qCos(2.36136541526 + 17996.0311682222 * t); result += 2.9e-10 * qCos(4.15148654061 + 45892.730433157 * t); result += 2.6e-10 * qCos(4.50714272714 + 17796.9591667858 * t); result += 2.7e-10 * qCos(4.72625223674 + 1066.49547719 * t); result += 2.5e-10 * qCos(2.89309528854 + 6286.6662786432 * t); result += 2.7e-10 * qCos(0.37462444357 + 12964.300703391 * t); result += 2.9e-10 * qCos(4.94860010533 + 5863.5912061162 * t); result += 3.1e-10 * qCos(3.93096113577 + 29864.334027309 * t); result += 2.4e-10 * qCos(6.14987193584 + 18606.4989460002 * t); result += 2.4e-10 * qCos(3.74225964547 + 29026.4852295078 * t); result += 2.5e-10 * qCos(5.70460621565 + 27707.5424942948 * t); result += 2.5e-10 * qCos(5.33928840652 + 15141.390794312 * t); result += 2.7e-10 * qCos(3.0232089714 + 6286.3622074092 * t); result += 2.3e-10 * qCos(0.28364955406 + 5327.4761083828 * t); result += 2.6e-10 * qCos(1.34240461687 + 18875.525869774 * t); result += 2.4e-10 * qCos(1.33998410121 + 19800.9459562248 * t); result += 2.5e-10 * qCos(6.00172494004 + 6489.2613984286 * t); result += 2.2e-10 * qCos(1.81777974484 + 6288.5987742988 * t); result += 2.2e-10 * qCos(3.5860360664 + 6915.8595893046 * t); result += 2.9e-10 * qCos(2.09564449439 + 15265.8865193004 * t); result += 2.2e-10 * qCos(1.02173599251 + 11925.2740926006 * t); result += 2.2e-10 * qCos(4.74660932338 + 28230.1872226914 * t); result += 2.1e-10 * qCos(2.30688751432 + 5999.2165311262 * t); result += 2.1e-10 * qCos(3.2265494443 + 25934.1243310894 * t); result += 2.1e-10 * qCos(3.04956726238 + 6566.9351688566 * t); result += 2.7e-10 * qCos(5.35653084499 + 33794.5437235286 * t); result += 2.8e-10 * qCos(3.91168324815 + 18208.349942592 * t); result += 2e-10 * qCos(1.52296293311 + 135.0650800354 * t); result += 2.2e-10 * qCos(4.66462839521 + 13362.4497067992 * t); result += 1.9e-10 * qCos(1.78121167862 + 156137.475984799 * t); result += 1.9e-10 * qCos(2.99969102221 + 19651.048481098 * t); result += 1.9e-10 * qCos(2.86664273362 + 18422.6293590982 * t); result += 2.5e-10 * qCos(0.94995632141 + 31415.379249957 * t); result += 1.9e-10 * qCos(4.71432851499 + 77690.7595057385 * t); result += 1.9e-10 * qCos(2.54227398241 + 77736.7834305025 * t); result += 2e-10 * qCos(5.91915117116 + 48739.859897083 * t); return result; } double GetEarthR2(double t) { double result = 0.0; result += 4.359385e-05 * qCos(5.78455133738 + 6283.0758499914 * t); result += 1.23633e-06 * qCos(5.57934722157 + 12566.1516999828 * t); result -= -1.2341e-07; result += 8.792e-08 * qCos(3.62777733395 + 77713.7714681205 * t); result += 5.689e-08 * qCos(1.86958905084 + 5573.1428014331 * t); result += 3.301e-08 * qCos(5.47027913302 + 18849.2275499742 * t); result += 1.471e-08 * qCos(4.48028885617 + 5507.5532386674 * t); result += 1.013e-08 * qCos(2.81456417694 + 5223.6939198022 * t); result += 8.54e-09 * qCos(3.10878241236 + 1577.3435424478 * t); result += 1.102e-08 * qCos(2.84173992403 + 161000.685737674 * t); result += 6.48e-09 * qCos(5.47349498544 + 775.522611324 * t); result += 6.09e-09 * qCos(1.37969434104 + 6438.4962494256 * t); result += 4.99e-09 * qCos(4.4164924225 + 6286.5989683404 * t); result += 4.17e-09 * qCos(0.90242451175 + 10977.078804699 * t); result += 4.02e-09 * qCos(3.2037658529 + 5088.6288397668 * t); result += 3.51e-09 * qCos(1.8107922777 + 5486.777843175 * t); result += 4.67e-09 * qCos(3.65753702738 + 7084.8967811152 * t); result += 4.58e-09 * qCos(5.38585314743 + 149854.400134808 * t); result += 3.04e-09 * qCos(3.51701098693 + 796.2980068164 * t); result += 2.66e-09 * qCos(6.17413982699 + 6836.6452528338 * t); result += 2.79e-09 * qCos(1.84120501086 + 4694.0029547076 * t); result += 2.6e-09 * qCos(1.41629543251 + 2146.1654164752 * t); result += 2.66e-09 * qCos(3.13832905677 + 71430.6956181291 * t); result += 3.21e-09 * qCos(5.35313367048 + 3154.6870848956 * t); result += 2.38e-09 * qCos(2.17720020018 + 155.4203994342 * t); result += 2.93e-09 * qCos(4.61501268144 + 4690.4798363586 * t); result += 2.29e-09 * qCos(4.7596958807 + 7234.794256242 * t); result += 2.11e-09 * qCos(0.21868065485 + 4705.7323075436 * t); result += 2.01e-09 * qCos(4.21905743357 + 1349.8674096588 * t); result += 1.95e-09 * qCos(4.57808285364 + 529.6909650946 * t); result += 2.53e-09 * qCos(2.81496293039 + 1748.016413067 * t); result += 1.82e-09 * qCos(5.70454011389 + 6040.3472460174 * t); result += 1.79e-09 * qCos(6.02897097053 + 4292.3308329504 * t); result += 1.86e-09 * qCos(1.58690991244 + 6309.3741697912 * t); result += 1.7e-09 * qCos(2.90220009715 + 9437.762934887 * t); result += 1.66e-09 * qCos(1.99984925026 + 8031.0922630584 * t); result += 1.58e-09 * qCos(0.04783713552 + 2544.3144198834 * t); result += 1.97e-09 * qCos(2.01083639502 + 1194.4470102246 * t); result += 1.65e-09 * qCos(5.78372596778 + 83996.8473181119 * t); result += 2.14e-09 * qCos(3.38285934319 + 7632.9432596502 * t); result += 1.4e-09 * qCos(0.36401486094 + 10447.3878396044 * t); result += 1.51e-09 * qCos(0.95153163031 + 6127.6554505572 * t); result += 1.36e-09 * qCos(1.48426306582 + 2352.8661537718 * t); result += 1.27e-09 * qCos(5.48475435134 + 951.7184062506 * t); result += 1.26e-09 * qCos(5.26866506592 + 6279.5527316424 * t); result += 1.25e-09 * qCos(3.75754889288 + 6812.766815086 * t); result += 1.01e-09 * qCos(4.95015746147 + 398.1490034082 * t); result += 1.02e-09 * qCos(0.68468295277 + 1592.5960136328 * t); result += 1e-09 * qCos(1.14568935785 + 3894.1818295422 * t); result += 1.29e-09 * qCos(0.76540016965 + 553.5694028424 * t); result += 1.09e-09 * qCos(5.41063597567 + 6256.7775301916 * t); result += 7.5e-10 * qCos(5.84804322893 + 242.728603974 * t); result += 9.5e-10 * qCos(1.94452244083 + 11856.2186514245 * t); result += 7.7e-10 * qCos(0.69373708195 + 8429.2412664666 * t); result += 1e-09 * qCos(5.19725292131 + 244287.600007228 * t); result += 8e-10 * qCos(6.18440483705 + 1059.3819301892 * t); result += 6.9e-10 * qCos(5.25699888595 + 14143.4952424306 * t); result += 8.5e-10 * qCos(5.39484725499 + 25132.3033999656 * t); result += 6.6e-10 * qCos(0.51779993906 + 801.8209311238 * t); result += 5.5e-10 * qCos(5.16878202461 + 7058.5984613154 * t); result += 5.1e-10 * qCos(3.88759155247 + 12036.4607348882 * t); result += 5e-10 * qCos(5.57636570536 + 6290.1893969922 * t); result += 6.1e-10 * qCos(2.24359003264 + 8635.9420037632 * t); result += 5e-10 * qCos(5.54441900966 + 1990.745017041 * t); result += 5.6e-10 * qCos(4.0030107804 + 13367.9726311066 * t); result += 5.2e-10 * qCos(4.13138898038 + 7860.4193924392 * t); result += 5.2e-10 * qCos(3.90943054011 + 26.2983197998 * t); result += 4.1e-10 * qCos(3.5712848278 + 7079.3738568078 * t); result += 5.6e-10 * qCos(2.76959005761 + 90955.5516944961 * t); result += 4.2e-10 * qCos(1.91461189199 + 7477.522860216 * t); result += 4.2e-10 * qCos(0.42728171713 + 10213.285546211 * t); result += 4.2e-10 * qCos(1.09413724455 + 709.9330485583 * t); result += 3.9e-10 * qCos(3.93298068961 + 10973.55568635 * t); result += 3.8e-10 * qCos(6.17935925345 + 9917.6968745098 * t); result += 4.9e-10 * qCos(0.83021145241 + 11506.7697697936 * t); result += 5.3e-10 * qCos(1.45828359397 + 233141.314404362 * t); result += 4.7e-10 * qCos(6.21568666789 + 6681.2248533996 * t); result += 3.7e-10 * qCos(0.3635930998 + 10177.2576795336 * t); result += 3.5e-10 * qCos(3.33024911524 + 5643.1785636774 * t); result += 3.4e-10 * qCos(5.63446915337 + 6525.8044539654 * t); result += 3.5e-10 * qCos(5.36033855038 + 25158.6017197654 * t); result += 3.4e-10 * qCos(5.36319798321 + 4933.2084403326 * t); result += 3.3e-10 * qCos(4.24722336872 + 12569.6748183318 * t); result += 4.3e-10 * qCos(5.26370903404 + 10575.4066829418 * t); result += 4.2e-10 * qCos(5.08837645072 + 11015.1064773348 * t); result += 4e-10 * qCos(1.98334703186 + 6284.0561710596 * t); result += 4.2e-10 * qCos(4.22496037505 + 88860.0570709867 * t); result += 2.9e-10 * qCos(3.1908862817 + 11926.2544136688 * t); result += 2.9e-10 * qCos(0.15217616684 + 12168.0026965746 * t); result += 3e-10 * qCos(1.61904744136 + 9779.1086761254 * t); result += 2.7e-10 * qCos(0.76388991416 + 1589.0728952838 * t); result += 3.6e-10 * qCos(2.74712003443 + 3738.761430108 * t); result += 3.3e-10 * qCos(3.08807829566 + 3930.2096962196 * t); result += 3.1e-10 * qCos(5.34906619513 + 143571.324284816 * t); result += 2.5e-10 * qCos(0.10240267494 + 22483.8485744926 * t); result += 3e-10 * qCos(3.47110495524 + 14945.3161735544 * t); result += 2.4e-10 * qCos(1.10425016019 + 4535.0594369244 * t); result += 2.4e-10 * qCos(1.5803725978 + 6496.3749454294 * t); result += 2.3e-10 * qCos(3.87710321433 + 6275.9623029906 * t); result += 2.5e-10 * qCos(3.9452977897 + 3128.3887650958 * t); result += 2.3e-10 * qCos(3.44685609601 + 4136.9104335162 * t); result += 2.3e-10 * qCos(3.83156029849 + 5753.3848848968 * t); result += 2.2e-10 * qCos(1.86956128067 + 16730.4636895958 * t); result += 2.5e-10 * qCos(2.42188933855 + 5729.506447149 * t); result += 2e-10 * qCos(1.78208352927 + 17789.845619785 * t); result += 2.1e-10 * qCos(4.303630874 + 16858.4825329332 * t); result += 2.1e-10 * qCos(0.49258939822 + 29088.811415985 * t); result += 2.5e-10 * qCos(1.33030250444 + 6282.0955289232 * t); result += 2.7e-10 * qCos(2.54785812264 + 3496.032826134 * t); result += 2.2e-10 * qCos(1.1123252195 + 12721.572099417 * t); result += 2.1e-10 * qCos(5.97759081637 + 7.1135470008 * t); result += 1.9e-10 * qCos(0.80292033311 + 16062.1845261168 * t); result += 2.3e-10 * qCos(4.12454848769 + 2388.8940204492 * t); result += 2.2e-10 * qCos(4.92663152168 + 18875.525869774 * t); result += 2.3e-10 * qCos(5.68902059771 + 16460.333529525 * t); result += 2.3e-10 * qCos(4.97346265647 + 17260.1546546904 * t); result += 2.3e-10 * qCos(3.03021283729 + 66567.4858652543 * t); result += 1.6e-10 * qCos(3.89740925257 + 5331.3574437408 * t); result += 1.7e-10 * qCos(3.08268671348 + 154717.609887683 * t); result += 1.6e-10 * qCos(3.95085099736 + 3097.88382272579 * t); result += 1.6e-10 * qCos(3.99041783945 + 6283.14316029419 * t); result += 2e-10 * qCos(6.10644140189 + 167283.761587666 * t); result += 1.5e-10 * qCos(4.09775914607 + 11712.9553182308 * t); result += 1.6e-10 * qCos(5.717699407 + 17298.1823273262 * t); result += 1.6e-10 * qCos(3.28894009404 + 5884.9268465832 * t); result += 1.5e-10 * qCos(5.64785377164 + 12559.038152982 * t); result += 1.6e-10 * qCos(4.4345208093 + 6283.0085396886 * t); result += 1.4e-10 * qCos(2.31721603062 + 5481.2549188676 * t); result += 1.4e-10 * qCos(4.43479032305 + 13517.8701062334 * t); result += 1.4e-10 * qCos(4.73209312936 + 7342.4577801806 * t); result += 1.2e-10 * qCos(0.64705975463 + 18073.7049386502 * t); result += 1.1e-10 * qCos(1.514433322 + 16200.7727245012 * t); result += 1.1e-10 * qCos(0.88708889185 + 21228.3920235458 * t); result += 1.4e-10 * qCos(4.50116508534 + 640.8776073822 * t); result += 1.1e-10 * qCos(4.64339996198 + 11790.6290886588 * t); result += 1.1e-10 * qCos(1.31064298246 + 4164.311989613 * t); result += 9e-11 * qCos(3.02238989305 + 23543.2305046818 * t); result += 9e-11 * qCos(2.04999402381 + 22003.9146348698 * t); result += 9e-11 * qCos(4.91488110218 + 213.299095438 * t); return result; } double GetEarthR3(double t) { double result = 0.0; result += 1.44595e-06 * qCos(4.27319435148 + 6283.0758499914 * t); result += 6.729e-08 * qCos(3.91697608662 + 12566.1516999828 * t); result += 7.74e-09; result += 2.47e-09 * qCos(3.73019298781 + 18849.2275499742 * t); result += 3.6e-10 * qCos(2.8008140905 + 6286.5989683404 * t); result += 3.3e-10 * qCos(5.62216602775 + 6127.6554505572 * t); result += 1.9e-10 * qCos(3.71292621802 + 6438.4962494256 * t); result += 1.6e-10 * qCos(4.26011484232 + 6525.8044539654 * t); result += 1.6e-10 * qCos(3.50416887054 + 6256.7775301916 * t); result += 1.4e-10 * qCos(3.62127621114 + 25132.3033999656 * t); result += 1.1e-10 * qCos(4.39200958819 + 4705.7323075436 * t); result += 1.1e-10 * qCos(5.22327127059 + 6040.3472460174 * t); result += 1e-10 * qCos(4.28045254647 + 83996.8473181119 * t); result += 9e-11 * qCos(1.56864096494 + 5507.5532386674 * t); result += 1.1e-10 * qCos(1.37795688024 + 6309.3741697912 * t); result += 1e-10 * qCos(5.19937959068 + 71430.6956181291 * t); result += 9e-11 * qCos(0.4727519993 + 6279.5527316424 * t); result += 9e-11 * qCos(0.74642756529 + 5729.506447149 * t); result += 7e-11 * qCos(2.9737489156 + 775.522611324 * t); result += 7e-11 * qCos(3.28615691021 + 7058.5984613154 * t); result += 7e-11 * qCos(2.19184402142 + 6812.766815086 * t); result += 5e-11 * qCos(3.15419034438 + 529.6909650946 * t); result += 6e-11 * qCos(4.54725567047 + 1059.3819301892 * t); result += 5e-11 * qCos(1.51104406936 + 7079.3738568078 * t); result += 7e-11 * qCos(2.98052059053 + 6681.2248533996 * t); result += 5e-11 * qCos(2.30961231391 + 12036.4607348882 * t); result += 5e-11 * qCos(3.71102966917 + 6290.1893969922 * t); return result; } double GetEarthR4(double t) { double result = 0.0; result += 3.858e-08 * qCos(2.56384387339 + 6283.0758499914 * t); result += 3.06e-09 * qCos(2.2676950123 + 12566.1516999828 * t); result += 5.3e-10 * qCos(3.44031471924 + 5573.1428014331 * t); result += 1.5e-10 * qCos(2.04794573436 + 18849.2275499742 * t); result += 1.3e-10 * qCos(2.05688873673 + 77713.7714681205 * t); result += 7e-11 * qCos(4.4121885448 + 161000.685737674 * t); result += 5e-11 * qCos(5.26154653107 + 6438.4962494256 * t); result += 5e-11 * qCos(4.07695126049 + 6127.6554505572 * t); result += 6e-11 * qCos(3.81514213664 + 149854.400134808 * t); result += 3e-11 * qCos(1.28175749811 + 6286.5989683404 * t); return result; } double GetEarthR5(double t) { double result = 0.0; result += 8.6e-10 * qCos(1.21579741687 + 6283.0758499914 * t); result += 1.2e-10 * qCos(0.65617264033 + 12566.1516999828 * t); result += 1e-11 * qCos(0.38068797142 + 18849.2275499742 * t); return result; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/celestialbodies.h000066400000000000000000000142071523260663500322550ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CELESTIALBODIES_H #define CELESTIALBODIES_H #include #include //弧度 typedef struct _MoonEclipticParameter { double Lp; double D; double M; double Mp; double F; double E; } MoonEclipticParameter; // 月地心黄ç»�系数 typedef struct _MoonEclipticLongitudeCoeff { double D; double M; double Mp; double F; double EiA; double ErA; } MoonEclipticLongitudeCoeff; //弧度 typedef struct _EarthNutationParameter { double D; double M; double Mp; double F; double Omega; } EarthNutationParameter; //天体章动系数类型å�˜é‡� typedef struct _NuationCoefficient { double D; double M; double Mp; double F; double Omega; double Sine1; double Sine2; double Cosine1; double Cosine2; } NuationCoefficient; /* 月ç�ƒé»„ç»�周期项(ΣI)å�Šè·�离(Σr). 黄ç»�å�•ä½�:0.000001度,è·�离å�•ä½�:0.001å�ƒç±³. -------------------------------------------------- 角度的组å�ˆç³»æ•° ΣIçš„å�„项振幅A Σrçš„å�„项振幅A D M M' F (正弦振幅) (余弦振幅) -------------------------------------------------- */ static QVector MoonLongitude { {0, 0, 1, 0, 6288744, -20905355}, {2, 0, -1, 0, 1274027, -3699111}, {2, 0, 0, 0, 658314, -2955968}, {0, 0, 2, 0, 213618, -569925}, {0, 1, 0, 0, -185116, 48888}, {0, 0, 0, 2, -114332, -3149}, {2, 0, -2, 0, 58793, 246158}, {2, -1, -1, 0, 57066, -152138}, {2, 0, 1, 0, 53322, -170733}, {2, -1, 0, 0, 45758, -204586}, {0, 1, -1, 0, -40923, -129620}, {1, 0, 0, 0, -34720, 108743}, {0, 1, 1, 0, -30383, 104755}, {2, 0, 0, -2, 15327, 10321}, {0, 0, 1, 2, -12528, 0}, {0, 0, 1, -2, 10980, 79661}, {4, 0, -1, 0, 10675, -34782}, {0, 0, 3, 0, 10034, -23210}, {4, 0, -2, 0, 8548, -21636}, {2, 1, -1, 0, -7888, 24208}, {2, 1, 0, 0, -6766, 30824}, {1, 0, -1, 0, -5163, -8379}, {1, 1, 0, 0, 4987, -16675}, {2, -1, 1, 0, 4036, -12831}, {2, 0, 2, 0, 3994, -10445}, CELESTIALBODIES_H {4, 0, 0, 0, 3861, -11650}, {2, 0, -3, 0, 3665, 14403}, {0, 1, -2, 0, -2689, -7003}, {2, 0, -1, 2, -2602, 0}, {2, -1, -2, 0, 2390, 10056}, {1, 0, 1, 0, -2348, 6322}, {2, -2, 0, 0, 2236, -9884}, {0, 1, 2, 0, -2120, 5751}, {0, 2, 0, 0, -2069, 0}, {2, -2, -1, 0, 2048, -4950}, {2, 0, 1, -2, -1773, 4130}, {2, 0, 0, 2, -1595, 0}, {4, -1, -1, 0, 1215, -3958}, {0, 0, 2, 2, -1110, 0}, {3, 0, -1, 0, -892, 3258}, {2, 1, 1, 0, -810, 2616}, {4, -1, -2, 0, 759, -1897}, {0, 2, -1, 0, -713, -2117}, {2, 2, -1, 0, -700, 2354}, {2, 1, -2, 0, 691, 0}, {2, -1, 0, -2, 596, 0}, {4, 0, 1, 0, 549, -1423}, {0, 0, 4, 0, 537, -1117}, {4, -1, 0, 0, 520, -1571}, {1, 0, -2, 0, -487, -1739}, {2, 1, 0, -2, -399, 0}, {0, 0, 2, -2, -381, -4421}, {1, 1, 1, 0, 351, 0}, {3, 0, -2, 0, -340, 0}, {4, 0, -3, 0, 330, 0}, {2, -1, 2, 0, 327, 0}, {0, 2, 1, 0, -323, 1165}, {1, 1, -1, 0, 299, 0}, {2, 0, 3, 0, 294, 0}, {2, 0, -1, -2, 0, 8752}, }; static QVector nuation { {0, 0, 0, 0, 1, -171996, -174.2, 92025, 8.9}, {-2, 0, 0, 2, 2, -13187, -1.6, 5736, -3.1}, {0, 0, 0, 2, 2, -2274, -0.2, 977, -0.5}, {0, 0, 0, 0, 2, 2062, 0.2, -895, 0.5}, {0, 1, 0, 0, 0, 1426, -3.4, 54, -0.1}, {0, 0, 1, 0, 0, 712, 0.1, -7, 0}, {-2, 1, 0, 2, 2, -517, 1.2, 224, -0.6}, {0, 0, 0, 2, 1, -386, -0.4, 200, 0}, {0, 0, 1, 2, 2, -301, 0, 129, -0.1}, {-2, -1, 0, 2, 2, 217, -0.5, -95, 0.3}, {-2, 0, 1, 0, 0, -158, 0, 0, 0}, {-2, 0, 0, 2, 1, 129, 0.1, -70, 0}, {0, 0, -1, 2, 2, 123, 0, -53, 0}, {2, 0, 0, 0, 0, 63, 0, 0, 0}, {0, 0, 1, 0, 1, 63, 0.1, -33, 0}, {2, 0, -1, 2, 2, -59, 0, 26, 0}, {0, 0, -1, 0, 1, -58, -0.1, 32, 0}, {0, 0, 1, 2, 1, -51, 0, 27, 0}, {-2, 0, 2, 0, 0, 48, 0, 0, 0}, {0, 0, -2, 2, 1, 46, 0, -24, 0}, {2, 0, 0, 2, 2, -38, 0, 16, 0}, {0, 0, 2, 2, 2, -31, 0, 13, 0}, {0, 0, 2, 0, 0, 29, 0, 0, 0}, {-2, 0, 1, 2, 2, 29, 0, -12, 0}, {0, 0, 0, 2, 0, 26, 0, 0, 0}, {-2, 0, 0, 2, 0, -22, 0, 0, 0}, {0, 0, -1, 2, 1, 21, 0, -10, 0}, {0, 2, 0, 0, 0, 17, -0.1, 0, 0}, {2, 0, -1, 0, 1, 16, 0, -8, 0}, {-2, 2, 0, 2, 2, -16, 0.1, 7, 0}, {0, 1, 0, 0, 1, -15, 0, 9, 0}, {-2, 0, 1, 0, 1, -13, 0, 7, 0}, {0, -1, 0, 0, 1, -12, 0, 6, 0}, {0, 0, 2, -2, 0, 11, 0, 0, 0}, {2, 0, -1, 2, 1, -10, 0, 5, 0}, {2, 0, 1, 2, 2, -8, 0, 3, 0}, {0, 1, 0, 2, 2, 7, 0, -3, 0}, {-2, 1, 1, 0, 0, -7, 0, 0, 0}, {0, -1, 0, 2, 2, -7, 0, 3, 0}, {2, 0, 0, 2, 1, -7, 0, 3, 0}, {2, 0, 1, 0, 0, 6, 0, 0, 0}, {-2, 0, 2, 2, 2, 6, 0, -3, 0}, {-2, 0, 1, 2, 1, 6, 0, -3, 0}, {2, 0, -2, 0, 1, -6, 0, 3, 0}, {2, 0, 0, 0, 1, -6, 0, 3, 0}, {0, -1, 1, 0, 0, 5, 0, 0, 0}, {-2, -1, 0, 2, 1, -5, 0, 3, 0}, {-2, 0, 0, 0, 1, -5, 0, 3, 0}, {0, 0, 2, 2, 1, -5, 0, 3, 0}, {-2, 0, 2, 0, 1, 4, 0, 0, 0}, {-2, 1, 0, 2, 1, 4, 0, 0, 0}, {0, 0, 1, -2, 0, 4, 0, 0, 0}, {-1, 0, 1, 0, 0, -4, 0, 0, 0}, {-2, 1, 0, 0, 0, -4, 0, 0, 0}, {1, 0, 0, 0, 0, -4, 0, 0, 0}, {0, 0, 1, 2, 0, 3, 0, 0, 0}, {0, 0, -2, 2, 2, -3, 0, 0, 0}, {-1, -1, 1, 0, 0, -3, 0, 0, 0}, {0, 1, 1, 0, 0, -3, 0, 0, 0}, {0, -1, 1, 2, 2, -3, 0, 0, 0}, {2, -1, -1, 2, 2, -3, 0, 0, 0}, {0, 0, 3, 2, 2, -3, 0, 0, 0}, {2, -1, 0, 2, 2, -3, 0, 0, 0}, }; // Gregorian历TT2000å¹´1月1日中å�ˆ12点的儒略日 const double J2000 = 2451545.0; double GetEarthL0(double t); double GetEarthL1(double t); double GetEarthL2(double t); double GetEarthL3(double t); double GetEarthL4(double t); double GetEarthL5(double t); double GetEarthB0(double t); double GetEarthB1(double t); double GetEarthB2(double t); double GetEarthB3(double t); double GetEarthB4(double t); double GetEarthR0(double t); double GetEarthR1(double t); double GetEarthR2(double t); double GetEarthR3(double t); double GetEarthR4(double t); double GetEarthR5(double t); #endif // ABOUTCELESTIALBODIES_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/lunarandfestival.h000066400000000000000000000127001523260663500324600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARANDFESTIVAL_H #define LUNARANDFESTIVAL_H #include #include #include // MonthInfo ä¿�存农历信æ�¯ typedef struct _lunarInfo { int LunarMonthName = 0; // 农历月å�� int LunarMonthDays = 0; // 本月天数 double ShuoJD = 0; // 本月朔日时间 北京时间 儒略日 QDateTime ShuoTime; // 本月朔日时间 北京时间 bool IsLeap = false; // 是å�¦ä¸ºé—°æœˆ int LunarYear = 0; // 农历年 int LunarDay = 0; // 农历日 int MonthZhi = 0; // 农历日所在的月的地支 int SolarTerm = 0; // 0~23 二å��四节气 ,-1 é�žèŠ‚æ°” bool operator==(const _lunarInfo &info) { return this->LunarMonthName == info.LunarMonthName && this->LunarYear == info.LunarYear && this->LunarDay == info.LunarDay && this->IsLeap == info.IsLeap; } } lunarInfo; typedef struct _day { int Year; int Month; int Day; } stDay; typedef struct _LunarDayInfo { _LunarDayInfo() { LunarLeapMonth = 0; } QString GanZhiYear {}; // 农历年的干支 QString GanZhiMonth {}; // 农历月的干支 QString GanZhiDay {}; // 农历日的干支 QString LunarMonthName {}; // 农历月å�� QString LunarDayName {}; // 农历日å�� int32_t LunarLeapMonth = 0; // 未使用 QString Zodiac {}; // 农历年的生肖 QString Term {}; // 农历节气 QString SolarFestival {}; // 公历节日 QString LunarFestival {}; // 农历节日 int32_t Worktime = 0; // 未使用 } stLunarDayInfo; //农历 typedef struct _LunarMonthInfo { qint32 FirstDayWeek = 0; qint32 Days = 0; QList Datas {}; } LunarMonthInfo; //阳历 公历 typedef struct _SolarMonthInfo { qint32 FirstDayWeek = 0; qint32 Days = 0; QList Datas {}; } SolarMonthInfo; typedef struct DayFestival { QDateTime date; QStringList Festivals {}; } stDayFestival; // å��二月å�� static QVector lunarMonthNames = {"æ­£", "二", "三", "å››", "五", "å…­", "七", "å…«", "ä¹�", "å��", "冬", "è…Š"}; static QVector monthDays = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 农历日å�� // 月份分为大月和å°�月,大月三å��天,å°�月二å��ä¹�天 static QVector lunarDayNames = { "åˆ�一", "åˆ�二", "åˆ�三", "åˆ�å››", "åˆ�五", "åˆ�å…­", "åˆ�七", "åˆ�å…«", "åˆ�ä¹�", "åˆ�å��", "å��一", "å��二", "å��三", "å��å››", "å��五", "å��å…­", "å��七", "å��å…«", "å��ä¹�", "二å��", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿ä¹�", "三å��" }; //农历节日 static QMap lunarFestival { {101, "春节"}, {115, "元宵节"}, {505, "端å�ˆèŠ‚"}, {707, "七夕节"}, {815, "中秋节"}, {909, "é‡�阳节"}, {1208, "腊八节"}}; // å��二生肖 static QVector Animals = {"é¼ ", "牛", "虎", "å…”", "é¾™", "蛇", "马", "羊", "猴", "鸡", "ç‹—", "猪"}; // 天干 static QVector TianGan = {"甲", "ä¹™", "丙", "ä¸�", "戊", "å·±", "庚", "è¾›", "壬", "癸"}; // 地支 static QVector DiZhi = {"å­�", "丑", "寅", "å�¯", "è¾°", "å·³", "å�ˆ", "未", "申", "é…‰", "戌", "亥"}; //二å��四节气,中文 static QVector SolarTermNames = { "春分", "清明", "谷雨", "ç«‹å¤�", "å°�满", "芒ç§�", "å¤�至", "å°�æš‘", "大暑", "ç«‹ç§‹", "处暑", "白露", "秋分", "寒露", "霜é™�", "立冬", "å°�雪", "大雪", "冬至", "å°�寒", "大寒", "立春", "雨水", "惊蛰", }; //二å��四节气 enum solarTerms { ChunFen = 0, QingMing, GuYu, LiXia, XiaoMan, MangZhong, XiaZhi, XiaoShu, DaShu, LiQiu, ChuShu, BaiLu, QiuFen, HanLu, ShuangJiang, LiDong, XiaoXue, DaXue, DongZhi, XiaoHan, DaHan, LiChun, YuShui, JingZhe, }; typedef struct _Festival { QString name {}; int startYear = 0; } stSolarFestival; static QMap solarFestivals = { {101, "元旦"}, {214, "情人节"}, {305, "学雷锋纪念日"}, {308, "妇女节"}, {312, "æ¤�树节"}, {401, "愚人节"}, {415, "全民国家安全教育日"}, {501, "劳动节"}, {504, "é�’年节"}, {601, "儿童节"}, {701, "建党节,香港回归纪念日"}, {801, "建军节"}, {903, "抗日战争胜利纪念日"}, {910, "教师节"}, {1001, "国庆节"}, {1213, "å�—京大屠æ�€æ­»éš¾è€…国家公祭日"}, {1220, "澳门回归纪念"}, {1224, "平安夜"}, {1225, "圣诞节"}, {1226, "毛泽东诞辰纪念"} }; static QMap solarFestivalStarYear = { {"元旦", 1949}, {"情人节", 0}, {"学雷锋纪念日", 1963}, {"妇女节", 1975}, {"æ¤�树节", 1928}, {"愚人节", 0}, {"全民国家安全教育日", 2015}, {"劳动节", 0}, {"é�’年节", 1939}, {"儿童节", 1949}, {"建党节", 1941}, {"香港回归纪念日", 1997}, {"建军节", 1933}, {"抗日战争胜利纪念日", 2014}, {"教师节", 1985}, {"国庆节", 1949}, {"å�—京大屠æ�€æ­»éš¾è€…国家公祭日", 2014}, {"澳门回归纪念", 1999}, {"平安夜", 0}, {"圣诞节", 0}, {"毛泽东诞辰纪念", 1893} }; #endif // ABOUTLUNARANDFESTIVAL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/lunarcalendar.cpp000066400000000000000000000134511523260663500322700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarcalendar.h" #include "commondef.h" #include #include #include QMap LunarCalendar::glYearCache; LunarCalendar *LunarCalendar::GetLunarCalendar(qint32 year) { // qCDebug(CommonLogger) << "Getting lunar calendar for year:" << year; auto it = glYearCache.find(year); LunarCalendar *plcal = nullptr; if (it != glYearCache.end()) { // qCDebug(CommonLogger) << "Found calendar in cache."; plcal = it.value(); } else { // qCDebug(CommonLogger) << "Calendar not in cache, creating new instance."; plcal = new LunarCalendar(year); glYearCache.insert(year, plcal); } return plcal; } /** * @brief LunarCalendar::LogOffEmptyData //清空数æ�® */ void LunarCalendar::LogOffEmptyData() { qCDebug(CommonLogger) << "Clearing all cached lunar calendars."; QMap::iterator it = glYearCache.begin(); for (; it != glYearCache.end(); ++it) { delete it.value(); it.value() = nullptr; } glYearCache.clear(); } //指定年份内公历日期转æ�¢ä¸ºå†œåŽ†æ—¥ lunarInfo LunarCalendar::SolarDayToLunarDay(qint32 month, qint32 day) { // qCDebug(CommonLogger) << "Converting solar day to lunar day for:" << Year << month << day; lunarInfo dayinfo; QDateTime dt(QDate(Year, month, day), QTime(0, 0, 0, 0), Qt::TimeSpec::UTC); int yd = dt.date().dayOfYear(); // 求月地支 int monthZhi = 0; while (monthZhi < solarTermYearDays.size()) { if (yd >= solarTermYearDays[monthZhi]) { monthZhi++; } else { break; } } dayinfo.MonthZhi = monthZhi; // 求农历年ã€�月ã€�æ—¥ foreach (lunarInfo lm, Months) { int dd = static_cast(deltaDays(lm.ShuoTime, dt)) + 1; if (1 <= dd && dd <= lm.LunarMonthDays) { dayinfo.LunarYear = lm.LunarYear; dayinfo.LunarMonthName = lm.LunarMonthName; dayinfo.LunarMonthDays = lm.LunarMonthDays; dayinfo.ShuoJD = lm.ShuoJD; dayinfo.ShuoTime = lm.ShuoTime; dayinfo.IsLeap = lm.IsLeap; dayinfo.LunarDay = dd; break; } } // 求二å��四节气 dayinfo.SolarTerm = getSolarTermInfo(month, day); return dayinfo; } LunarCalendar::LunarCalendar(qint32 year) { // qCDebug(CommonLogger) << "Constructing LunarCalendar for year:" << year; Year = year; Months.reserve(13); calcProcData(); fillMonths(); calcLeapMonth(); } void LunarCalendar::calcProcData() { // qCDebug(CommonLogger) << "Calculating process data for year:" << Year; SolarTermJDs = get25SolarTermJDs(Year - 1, DongZhi); for (int i = 0; i < 25; i++) { SolarTermTimes.append(GetDateTimeFromJulianDay(SolarTermJDs[i])); } for (int i = 1; i < 25; i += 2) { int yd = SolarTermTimes[i].date().dayOfYear(); solarTermYearDays.append(yd); } double beijin2utc = JDBeijingTime2UTC(SolarTermJDs[0]); double tmpNewMoonJD = getNewMoonJD(beijin2utc); if (tmpNewMoonJD > SolarTermJDs[0]) { tmpNewMoonJD -= 29.53; } NewMoonJDs = get15NewMoonJDs(tmpNewMoonJD); } void LunarCalendar::fillMonths() { // qCDebug(CommonLogger) << "Filling months for year:" << Year; //采用å¤�历建寅,冬至所在月份为农历11月(冬月) int yuejian = 11; for (int i = 0; i < 14; i++) { lunarInfo info; if (yuejian <= 12) { info.LunarMonthName = yuejian; info.LunarYear = Year - 1; } else { info.LunarMonthName = yuejian - 12; info.LunarYear = Year; } info.ShuoJD = NewMoonJDs[i]; info.ShuoTime = GetDateTimeFromJulianDay(info.ShuoJD); double nextShuoJD = NewMoonJDs[i + 1]; QDateTime nextShuoTime = GetDateTimeFromJulianDay(nextShuoJD); info.LunarMonthDays = static_cast(deltaDays(info.ShuoTime, nextShuoTime)); Months.append(info); yuejian++; } } void LunarCalendar::calcLeapMonth() { // qCDebug(CommonLogger) << "Calculating leap month for year:" << Year; // æ ¹æ�®èŠ‚æ°”è®¡ç®—æ˜¯å�¦æœ‰é—°æœˆï¼Œå¦‚果有闰月,根æ�®å†œåŽ†æœˆå‘½å��规则,调整月å��ç§° if (int(NewMoonJDs[13] + 0.5) <= int(SolarTermJDs[24] + 0.5)) { // 第13月的月末没有超过冬至,说明今年需è¦�闰一个月 int i = 1; while (i < 14) { if (int(NewMoonJDs[i + 1] + 0.5) <= int(SolarTermJDs[2 * i] + 0.5)) { //NewMoonJDs[i + 1] 是第i个农历月的下一个月的月首 //本该属于第i个月的中气如果比下一个月的月首还晚,或者与下个月的月首是å�Œä¸€å¤©ï¼ˆæ°‘间历法),则说明第 i 个月没有中气, 是闰月 break; } i++; } if (i < 14) { // 找到闰月 //qCDebug(CommonLogger)< #include class LunarCalendar { public: static LunarCalendar *GetLunarCalendar(qint32 year); //程åº�退出时情况数æ�® static void LogOffEmptyData(); lunarInfo SolarDayToLunarDay(qint32 month, qint32 day); private: explicit LunarCalendar(qint32 year); void calcProcData(); void fillMonths(); void calcLeapMonth(); qint32 getSolarTermInfo(qint32 month, qint32 day) const; public: private: static QMap glYearCache; int Year; // 公历年份 QVector SolarTermJDs; // 相关的 25 节气 北京时间 儒略日 QVector SolarTermTimes; // 对应 SolarTermJDs 转æ�¢ä¸º time.Time 的时间 QVector NewMoonJDs; // 相关的 15 个朔日 北京时间 儒略日 QVector Months; // 月 QVector solarTermYearDays; // å��二节的 yearDay 列表 }; #endif // LUNARCALENDAR_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/lunardateinfo.cpp000066400000000000000000000270141523260663500323100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunardateinfo.h" #include "lunarcalendar.h" #include "commondef.h" #include #define RECURENCELIMIT 3650 //递归次数é™�制 //农历一年最少有363天 const int LunarYearMiniDays = 353; LunarDateInfo::LunarDateInfo(KCalendarCore::RecurrenceRule *rruleStr, const qint64 interval) : m_recurenceRule(rruleStr) , m_dateInterval(interval) { // qCDebug(CommonLogger) << "LunarDateInfo constructor called."; m_rruleType = ParseRRule(m_recurenceRule->rrule()); } QMap LunarDateInfo::getRRuleStartDate(const QDate &beginDate, const QDate &endDate, const QDate &solarDate) { // qCDebug(CommonLogger) << "Getting RRule start date for solar date:" << solarDate << "within range" << beginDate << "to" << endDate; QMap solar; //ä¸�在范围内直接返回,开始时间å°�于结æ�Ÿæ—¶é—´æˆ–者需è¦�计算的起始时间晚于结æ�Ÿæ—¶é—´ if (endDate < beginDate || solarDate > endDate) { qCWarning(CommonLogger) << "Invalid date range: end date" << endDate.toString() << "is before begin date" << beginDate.toString() << "or solar date" << solarDate.toString() << "is after end date"; return solar; } m_queryStartDate = beginDate; m_queryEndDate = endDate; //如果日程开始时间在查询起始时间之å‰� if (solarDate > m_queryStartDate) { m_queryStartDate = solarDate; qCDebug(CommonLogger) << "Adjusted query start date to solar date:" << solarDate.toString(); } //如果是农历日程 //TODO: é‡�å¤�类型 switch (m_rruleType) { case RRule_Month: //æ¯�月 solar = getAllNextMonthLunarDayBySolar(solarDate); break; case RRule_Year: //æ¯�å¹´ solar = getAllNextYearLunarDayBySolar(solarDate); break; default: //默认ä¸�é‡�å¤� break; } // qCDebug(CommonLogger) << "Found" << solar.size() << "RRule start dates."; return solar; } //通过公历时间获å�–范围内该时间的农历天的具体公历日期 QMap LunarDateInfo::getAllNextMonthLunarDayBySolar(const QDate &solarDate) { qCDebug(CommonLogger) << "Getting next month lunar days for solar date:" << solarDate.toString(); QMap solar; //如果需è¦�通过公历信æ�¯èŽ·å�–下一个对应农历信æ�¯å¯¹åº”的天 LunarCalendar *lunc = LunarCalendar::GetLunarCalendar(solarDate.year()); lunarInfo info = lunc->SolarDayToLunarDay(solarDate.month(), solarDate.day()); //计算时间为日程开始时间 QDate nextSolar = solarDate; int count = 0; while (true) { info = getNextMonthLunarDay(nextSolar, info); //如果超过范围则退出 if (addSolarMap(solar, nextSolar, count, info.LunarMonthDays)) { qCDebug(CommonLogger) << "Month recurrence calculation completed. Found" << solar.size() << "dates"; break; } } return solar; } QMap LunarDateInfo::getAllNextYearLunarDayBySolar(const QDate &solarDate) { qCDebug(CommonLogger) << "Getting next year lunar days for solar date:" << solarDate.toString(); QMap solar; //TODO: 需è¦�优化 //日程的农历日期 LunarCalendar *solarDateLunar = LunarCalendar::GetLunarCalendar(solarDate.year()); lunarInfo info = solarDateLunar->SolarDayToLunarDay(solarDate.month(), solarDate.day()); //计算时间为日程开始时间 QDate bDate = solarDate; QDate beforeDate; int count = 0; //beforeDate == bDate时,两次执行结果相å�Œï¼Œä¼šè¿›å…¥æ­»å¾ªçޝ while (bDate <= m_queryEndDate && beforeDate != bDate) { beforeDate = bDate; //开始时间农历日期 LunarCalendar *lunc = LunarCalendar::GetLunarCalendar(bDate.year()); lunarInfo startLunarInfo = lunc->SolarDayToLunarDay(bDate.month(), bDate.day()); //判断起始时间的农历月份是å�¦å¤§äºŽæ—¥ç¨‹çš„æœˆä»½ï¼Œå¦‚果大于则说明起始时间的农历年份没有对应的é‡�å¤�日程,直接计算下一个农历年份 if (startLunarInfo.LunarMonthName > info.LunarMonthName) { //æ›´æ–°èµ·å§‹æ—¶é—´ //农历一个月的天数范围为28-30,则农历月份最å°�时间查为(间隔月份*28)天 int miniInterval = (12 - startLunarInfo.LunarMonthName + info.LunarMonthName) * 28 - startLunarInfo.LunarDay; bDate = bDate.addDays(miniInterval); continue; } else if (startLunarInfo.LunarMonthName == info.LunarMonthName) { //如果为å�Œä¸€ä¸ªæœˆï¼Œåˆ¤æ–­æ˜¯å�¦éƒ½ä¸ºé—°æœˆæˆ–都ä¸�是闰月 if (startLunarInfo.IsLeap == info.IsLeap) { //如果起始农历天日程农历天之å‰�或为å�Œä¸€å†œåކ天 if (startLunarInfo.LunarDay <= info.LunarDay) { int intervalDay = info.LunarDay - startLunarInfo.LunarDay; //如果该农历月没有这一天,那就计算下一年 if (startLunarInfo.LunarDay + intervalDay > startLunarInfo.LunarMonthDays) { //农历一年最少有363天 bDate = bDate.addDays(LunarYearMiniDays); continue; } //如果有这一天则添加对应的日期 bDate = bDate.addDays(intervalDay); //如果超过范围则退出 if (addSolarMap(solar, bDate, count, LunarYearMiniDays)) { break; } continue; } else { //如果起始农历天在日程农历天之å�Žï¼Œåˆ™æ›´æ–°åˆ°ä¸‹ä¸€å¹´ int offsetMiniDay = LunarYearMiniDays - (startLunarInfo.LunarDay - info.LunarDay); bDate = bDate.addDays(offsetMiniDay); continue; } } else { //如果起始时间为闰月 if (startLunarInfo.IsLeap) { //如果起始农历天在日程农历天之å�Žï¼Œåˆ™æ›´æ–°åˆ°ä¸‹ä¸€å¹´ int offsetMiniDay = LunarYearMiniDays - (startLunarInfo.LunarDay - info.LunarDay); bDate = bDate.addDays(offsetMiniDay); continue; } //如果日程开始时间为闰月 if (info.IsLeap) { //更新起始时间的日期,更新为农历日期的下个月的åˆ�一 bDate = bDate.addDays(startLunarInfo.LunarMonthDays - startLunarInfo.LunarDay + 1); continue; } } } else { //如果起始时间的农历月份早于日期的月份 //农历一个月的天数范围为28-30 //相差的月份 int offsetMonth = info.LunarMonthName - startLunarInfo.LunarMonthName; int offsetMiniDay = 0; if (offsetMonth > 1) { //如果间隔大于一个月 offsetMiniDay = (info.LunarMonthName - startLunarInfo.LunarMonthName) * 28 - startLunarInfo.LunarDay + info.LunarDay; } else { //如果间隔等于一个月,因为å‰�é�¢å·²ç»�判断了是å�¦ä¸ºå�Œä¸€ä¸ªæœˆï¼Œæ‰€ä»¥ä¸�存在间隔为0的情况 offsetMiniDay = startLunarInfo.LunarMonthDays - startLunarInfo.LunarDay + info.LunarDay; } bDate = bDate.addDays(offsetMiniDay); continue; } } qCDebug(CommonLogger) << "Year recurrence calculation completed. Found" << solar.size() << "dates"; return solar; } lunarInfo LunarDateInfo::getNextMonthLunarDay(QDate &nextDate, const lunarInfo &info) { qCDebug(CommonLogger) << "Getting next month lunar day for date:" << nextDate.toString(); LunarCalendar *lunc = LunarCalendar::GetLunarCalendar(nextDate.year()); lunarInfo nextinfo = lunc->SolarDayToLunarDay(nextDate.month(), nextDate.day()); //判断农历的天是å�¦ä¸ºé‡�å¤�的天,比如一月åˆ�一,加上一月份的天数应该为二月åˆ�一 //如果ä¸�一样,则说明这个月没有这一天,比如正月三å��,加上正月的月份天数,到了二月份是没有三å��的, if (nextinfo.LunarDay != info.LunarDay) { qCDebug(CommonLogger) << "Adjusting date due to lunar day mismatch. Expected:" << info.LunarDay << "Got:" << nextinfo.LunarDay; nextDate = nextDate.addDays(info.LunarDay - nextinfo.LunarDay); return getNextMonthLunarDay(nextDate, info); } return nextinfo; } /** * @brief ParseRRule è§£æž�é‡�å¤�规则 * @param rule 规则字符串 * @return stRRuleOptions 包å�«é‡�å¤�规则相关字段的结构体 */ LunarDateInfo::LunnarRRule LunarDateInfo::ParseRRule(const QString &rule) { //无规则的ä¸�走这里判断所以此处默认ruleä¸�为空 //局部å�˜é‡�åˆ�始化 qCDebug(CommonLogger) << "Parsing recurrence rule:" << rule; LunnarRRule options = RRule_None; QStringList rruleslist = rule.split(";", QT_SKIP_EMPTY_PARTS); //rpeaté‡�å¤�规则 0 æ—  1 æ¯�天 2 æ¯�个工作日 3 æ¯�周 4æ¯�月 5æ¯�å¹´ //type结æ�Ÿé‡�å¤�类型 0 æ°¸ä¸� 1 多少次结æ�Ÿ 2 结æ�Ÿæ—¥æœŸ if (rruleslist.contains("FREQ=MONTHLY")) { options = RRule_Month; qCDebug(CommonLogger) << "Detected monthly recurrence rule"; } else if (rruleslist.contains("FREQ=YEARLY")) { options = RRule_Year; qCDebug(CommonLogger) << "Detected yearly recurrence rule"; } else { qCDebug(CommonLogger) << "No specific recurrence rule detected"; } return options; } bool LunarDateInfo::isWithinTimeFrame(const QDate &solarDate) { // qCDebug(CommonLogger) << "Checking if" << solarDate << "is within the time frame."; QDate endDate = solarDate.addDays(m_dateInterval); //如果日程结æ�Ÿæ—¶é—´åœ¨æŸ¥è¯¢èµ·å§‹æ—¶é—´ä¹‹å‰�,或者日程开始时间在查询截止时间之å�Žï¼Œè¯´æ˜Žä¸�在获å�–范围内 return !(endDate < m_queryStartDate || solarDate > m_queryEndDate); } bool LunarDateInfo::addSolarMap(QMap &solarMap, QDate &nextDate, int &count, const int addDays) { qCDebug(CommonLogger) << "Attempting to add" << nextDate << "to solar map. Count:" << count; //如果获å�–到的时间在查询范围内 if (isWithinTimeFrame(nextDate)) { qCDebug(CommonLogger) << "Adding" << nextDate << "to solar map. Count:" << count; solarMap[count] = nextDate; } count++; // 当结æ�Ÿé‡�å¤�为按多少次结æ�Ÿåˆ¤æ–­æ—¶ï¼Œæ£€æŸ¥é‡�å¤�次数是å�¦è¾¾åˆ°ï¼Œè¾¾åˆ°åˆ™é€€å‡º // 当é‡�å¤�次数达到最大é™�制直接返回 // duration > 0 表示结æ�Ÿä¸Žæ¬¡æ•° if ((m_recurenceRule->duration() > 0 && (m_recurenceRule->duration() - 1) < count) || count > RECURENCELIMIT) { qCDebug(CommonLogger) << "Stopping recurrence due to limit reached."; return true; } //更新查询开始时间 nextDate = nextDate.addDays(addDays); //判断next是å�¦æœ‰æ•ˆ,时间大于RRuleçš„until //判断next是å�¦å¤§äºŽæŸ¥è¯¢çš„æˆªæ­¢æ—¶é—´,这里应该比较date,而ä¸�是datetime,如果是é�žå…¨å¤©çš„æ—¥ç¨‹ï¼Œè¿™ä¸ªè®¾è®¡å…·ä½“时间的问题,会导致返回的job个数出现问题 if ((m_recurenceRule->duration() == 0 && nextDate > m_recurenceRule->endDt().date()) || nextDate > m_queryEndDate) { qCDebug(CommonLogger) << "Stopping recurrence due to end date reached."; return true; } return false; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/lunardateinfo.h000066400000000000000000000066731523260663500317650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARDATEINFO_H #define LUNARDATEINFO_H #include "lunarandfestival.h" #include "method_interface.h" #include "recurrencerule.h" #include #include /** * @brief The LunarDateInfo class * 农历时间,用于计算农历é‡�å¤�日程 */ class LunarDateInfo { public: //农历日程å�ªæ”¯æŒ�æ¯�å¹´å’Œæ¯�月 enum LunnarRRule { RRule_None, //ä¸�é‡�å¤� RRule_Month, //æ¯�月 RRule_Year, //æ¯�å¹´ }; explicit LunarDateInfo(KCalendarCore::RecurrenceRule *rruleStr, const qint64 interval); /** * @brief getRRuleStartDate 获å�–é‡�å¤�农历日程开始时间(公历)集 * @param beginDate 查询的起始时间 * @param endDate 查询的截止时间 * @param solarDate 日程开始时间 * @return 日程的é‡�å¤�日程id和对应的开始时间 */ QMap getRRuleStartDate(const QDate &beginDate, const QDate &endDate, const QDate &solarDate); private: /** * @brief getAllNextMonthLunarDayBySolar 获å�–é‡�å¤�类型为æ¯�月的农历日程开始时间集 * @param solarDate 农历日程的开始时间 * @return é‡�å¤�农历日程开始时间集 */ QMap getAllNextMonthLunarDayBySolar(const QDate &solarDate); /** * @brief getAllNextYearLunarDayBySolar 获å�–é‡�å¤�类型为æ¯�年的农历日程开始时间集 * @param solarDate 农历日程的开始时间 * @return é‡�å¤�农历日程开始时间集 */ QMap getAllNextYearLunarDayBySolar(const QDate &solarDate); /** * @brief getNextMonthLunarDay 获å�–下个月对应的农历信æ�¯ * @param nextDate 需è¦�计算的公历时间 * @param info é‡�å¤�的农历信æ�¯ * @return 计算公历时间对应的农历信æ�¯ */ lunarInfo getNextMonthLunarDay(QDate &nextDate, const lunarInfo &info); /** * @brief ParseRRule è§£æž�é‡�å¤�规则 * @param rule é‡�å¤�规则 * @return */ LunnarRRule ParseRRule(const QString &rule); /** * @brief isWithinTimeFrame 是å�¦åœ¨æŸ¥è¯¢æ—¶é—´èŒƒå›´å†… * @return */ bool isWithinTimeFrame(const QDate &solarDate); /** * @brief addSolarMap 将计算出æ�¥çš„æ—¶é—´æ·»åŠ åˆ°Map中,并更新时间和é‡�å¤�次数 * @param solarMap 符å�ˆè¦�求的时间集å�ˆ * @param nextDate é‡�å¤�农历日程对应的公历时间 * @param count é‡�å¤�次数 * @param addDays 需è¦�更新的天数 * @return 如果返回true表示计算出的次数或者时间超过范围,å�¦åˆ™è¿”回false */ bool addSolarMap(QMap &solarMap, QDate &nextDate, int &count, const int addDays); private: KCalendarCore::RecurrenceRule *m_recurenceRule; LunnarRRule m_rruleType; // stRRuleOptions m_options; QDate m_queryStartDate; QDate m_queryEndDate; qint64 m_dateInterval; //日程开始结æ�Ÿé—´éš”天数 }; #endif // LUNARDATEINFO_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/lunarmanager.cpp000066400000000000000000000201111523260663500321200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "lunarmanager.h" #include "lunarcalendar.h" #include "commondef.h" #include "pinyin/pinyinsearch.h" #include stLunarDayInfo SolarToLunar(qint32 year, qint32 month, qint32 day) { // qCDebug(CommonLogger) << "Converting solar to lunar for date:" << year << month << day; stLunarDayInfo info; LunarCalendar *pcalendar = LunarCalendar::GetLunarCalendar(year); lunarInfo lday = pcalendar->SolarDayToLunarDay(month, day); info.GanZhiYear = GetGanZhiYear(lday.LunarYear); info.GanZhiMonth = GetGanZhiMonth(year, lday.MonthZhi); info.GanZhiDay = GetGanZhiDay(year, month, day); info.LunarMonthName = GetLunarMonthName(lday.LunarMonthName, lday.IsLeap); info.LunarDayName = GetLunarDayName(lday.LunarDay); info.Term = GetSolarTermName(lday.SolarTerm); info.SolarFestival = GetSolarDayFestival(year, month, day); info.LunarFestival = GetLunarDayFestival(lday.LunarMonthName, lday.LunarDay, lday.LunarMonthDays, lday.SolarTerm); info.Zodiac = GetYearZodiac(lday.LunarYear); return info; } /** * 获å�–指定公历月份的农历数æ�® * year,month 公历年,月 * fill 是å�¦ç”¨ä¸Šä¸‹æœˆæ•°æ�®è¡¥é½�首尾空缺,首例数æ�®ä»Žå‘¨æ—¥å¼€å§‹ */ LunarMonthInfo GetLunarMonthCalendar(qint32 year, qint32 month, bool fill) { // qCDebug(CommonLogger) << "Getting lunar month calendar for:" << year << month << "with fill:" << fill; SolarMonthInfo solarMonth = GetSolarMonthCalendar(year, month, fill); return GetLunarMonthCalendar(solarMonth); } LunarMonthInfo GetLunarMonthCalendar(const SolarMonthInfo &solarMonth) { // qCDebug(CommonLogger) << "Converting solar month calendar to lunar month calendar."; LunarMonthInfo lunarmonth; lunarmonth.FirstDayWeek = solarMonth.FirstDayWeek; lunarmonth.Days = solarMonth.Days; foreach (stDay d, solarMonth.Datas) { stLunarDayInfo info = SolarToLunar(d.Year, d.Month, d.Day); lunarmonth.Datas.append(info); } return lunarmonth; } /** * 公历æŸ�月日历 * year,month 公历年,月 * fill 是å�¦ç”¨ä¸Šä¸‹æœˆæ•°æ�®è¡¥é½�首尾空缺,首例数æ�®ä»Žå‘¨æ—¥å¼€å§‹(7*6阵列) */ SolarMonthInfo GetSolarMonthCalendar(qint32 year, qint32 month, bool fill) { qCDebug(CommonLogger) << "Getting solar month calendar for:" << year << month << "with fill:" << fill; SolarMonthInfo solarMonth; int weekday = GetWeekday(year, month); int daycount = GetSolarMonthDays(year, month); // 本月的数æ�® QList daysData = GetMonthDays(year, month, 1, daycount); QList YearMonth; if (fill) { if (weekday > 0) { //获å�–å‰�一个月所在年份å�Šæœˆä»½ï¼ˆå¦‚果当å‰�月份为1月则为å‰�一年的å��二月) YearMonth = GetPreMonth(year, month); int premonthyear = YearMonth.at(0); int premonth = YearMonth.at(1); GetSolarMonthDays(premonthyear, premonth); // å‰�一个月的天数 int preMonthDays = GetSolarMonthDays(premonthyear, premonth); // è¦�补充上去的å‰�一个月的数æ�® QList preMonthCompleteDaysData = GetMonthDays(premonthyear, premonth, preMonthDays - weekday + 1, preMonthDays); preMonthCompleteDaysData.append(daysData); daysData = preMonthCompleteDaysData; } YearMonth = GetNextMonth(year, month); int nextmonthyear = YearMonth.at(0); int nextmonth = YearMonth.at(1); int count = 6 * 7 - (weekday + daycount); // è¦�补充上去的下一个月的数æ�® QList nextMonthCompleteDaysData = GetMonthDays(nextmonthyear, nextmonth, 1, count); daysData.append(nextMonthCompleteDaysData); } solarMonth.FirstDayWeek = weekday; solarMonth.Days = daycount; solarMonth.Datas = daysData; return solarMonth; } QList GetMonthDays(qint32 year, qint32 month, qint32 start, qint32 days) { // qCDebug(CommonLogger) << "Getting month days for:" << year << month << "from" << start << "to" << days; QList DayInfo; for (int day = start; day <= days; day++) { stDay stday = {year, month, day}; DayInfo.append(stday); } return DayInfo; } QList GetPreMonth(qint32 year, qint32 month) { // qCDebug(CommonLogger) << "Getting previous month for:" << year << month; QList datas; int preYear, preMonth; if (month == 1) { preYear = year - 1; preMonth = 12; } else { preYear = year; preMonth = month - 1; } datas.append(preYear); datas.append(preMonth); return datas; } QList GetNextMonth(qint32 year, qint32 month) { // qCDebug(CommonLogger) << "Getting next month for:" << year << month; QList datas; int nextYear, nextMonth; if (month == 12) { nextYear = year + 1; nextMonth = 1; } else { nextYear = year; nextMonth = month + 1; } datas.append(nextYear); datas.append(nextMonth); return datas; } /** * @brief GetFestivalsInRange 获å�–指定范围内的节日信æ�¯é›†å�ˆ * @param start èµ·å§‹æ—¶é—´ * @param end 结æ�Ÿæ—¶é—´ */ QList GetFestivalsInRange(const QDateTime &start, const QDateTime &end) { qCDebug(CommonLogger) << "Getting festivals in range:" << start.toString() << "to" << end.toString(); QList festivaldays; if (start <= end) { //days为需è¦�查询的天数,而ä¸�是两个时间的差值 int days = static_cast(start.daysTo(end) + 1); qCDebug(CommonLogger) << "Calculating festivals for" << days << "days"; for (int i = 0; i < days; ++i) { stDayFestival stdayfestival; QDateTime tem = start.addDays(i); stdayfestival.date = tem; int year = tem.date().year(); int month = tem.date().month(); int day = tem.date().day(); LunarCalendar *pcalendar = LunarCalendar::GetLunarCalendar(year); lunarInfo lday = pcalendar->SolarDayToLunarDay(month, day); QString festival = GetSolarDayFestival(year, month, day); QStringList strfestivallist = festival.split(","); strfestivallist << GetLunarDayFestival(lday.LunarMonthName, lday.LunarDay, lday.LunarMonthDays, lday.SolarTerm); stdayfestival.Festivals = strfestivallist; festivaldays.append(stdayfestival); } } else { qCWarning(CommonLogger) << "Invalid date range: start date" << start.toString() << "is later than end date" << end.toString(); } qCDebug(CommonLogger) << "Found" << festivaldays.size() << "festivals in the specified range"; return festivaldays; } /** * @brief FilterDayFestival 过滤节日信æ�¯ * @param festivaldays 节日信æ�¯ * @param querykey 拼音 * @return 节日信æ�¯ */ QList FilterDayFestival(QList &festivaldays, const QString &querykey) { qCDebug(CommonLogger) << "Filtering festivals with query key:" << querykey; QList m_festivaldays; pinyinsearch *search = pinyinsearch::getPinPinSearch(); for (int i = 0; i < festivaldays.size(); i++) { stDayFestival m_festivals{}; QStringList festivals = festivaldays.at(i).Festivals; QDateTime festivalsdate = festivaldays.at(i).date; for (int j = 0; j < festivals.size(); j++) { if (festivals.at(j).contains(querykey)) m_festivals.Festivals.append(festivals.at(j)); if (search->CanQueryByPinyin(querykey) && search->PinyinMatch(festivals.at(j), querykey)) m_festivals.Festivals.append(festivals.at(j)); } if (m_festivals.Festivals.isEmpty()) continue; m_festivals.date = festivalsdate; m_festivaldays.append(m_festivals); } qCDebug(CommonLogger) << "Filtered festivals count:" << m_festivaldays.size(); return m_festivaldays; } void logOffEmptyData() { // qCDebug(CommonLogger) << "Logging off empty data from LunarCalendar."; LunarCalendar::LogOffEmptyData(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/lunarmanager.h000066400000000000000000000017141523260663500315750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef LUNARMANAGER_H #define LUNARMANAGER_H #include "lunarandfestival.h" #include "method_interface.h" stLunarDayInfo SolarToLunar(qint32 year, qint32 month, qint32 day); SolarMonthInfo GetSolarMonthCalendar(qint32 year, qint32 month, bool fill); LunarMonthInfo GetLunarMonthCalendar(qint32 year, qint32 month, bool fill); LunarMonthInfo GetLunarMonthCalendar(const SolarMonthInfo &solarMonth); QList GetMonthDays(qint32 year, qint32 month, qint32 start, qint32 days); QList GetPreMonth(qint32 year, qint32 month); QList GetNextMonth(qint32 year, qint32 month); QList GetFestivalsInRange(const QDateTime &start, const QDateTime &end); QList FilterDayFestival(QList &festivaldays, const QString &querykey); //清空黄历数æ�® void logOffEmptyData(); #endif // LUNARMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/method_interface.cpp000066400000000000000000000724211523260663500327570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "method_interface.h" #include "commondef.h" #include #include /** * @brief GetLunarMonthName 获å�–当天的农历月å��ç§° * @param lunarmonthname 阴历月份 * @param isleap 是å�¦ä¸ºé—°æœˆ * @return 阴历月份 */ QString GetLunarMonthName(int lunarmonthname, bool isleap) { // qCDebug(CommonLogger) << "Getting lunar month name for month:" << lunarmonthname << "isLeap:" << isleap; QString monthname = lunarMonthNames[lunarmonthname - 1]; if (isleap) { return "é—°" + monthname + "月"; } return monthname + "月"; } /** * @brief GetLunarDayName 获å�–当天的农历日å�� * @param lundayname 阴历哪一天 * @return 阴历日 */ QString GetLunarDayName(int lundayname) { // qCDebug(CommonLogger) << "Getting lunar day name for day:" << lundayname; return lunarDayNames[lundayname - 1]; } /** * @brief GetLunarDayFestival 获å�–当天的农历节日å��,没有则返回空字符串 * @param monthname 公历月份 * @param lunarday 阴历日 * @param lunarmonthdays 阴历月份 * @param solarterm 第几个节气 * @return 农历节日å��ç§° */ QString GetLunarDayFestival(int monthname, int lunarday, int lunarmonthdays, int solarterm) { // qCDebug(CommonLogger) << "Getting lunar day festival for:" << monthname << lunarday; int key = monthname * 100 + lunarday; if (lunarFestival.contains(key)) { return lunarFestival[key]; } // 农历腊月(å��二月)的最å�Žä¸ªä¸€å¤© if (monthname == 12 && lunarday == lunarmonthdays) { return "除夕"; } if (solarterm == QingMing) { return "清明节"; } return ""; } /** * @brief GetSolarTermsName 获å�–二å��四节气å��,如果没有则返回空 * @param order 节气枚举值 * @return 节气å��ç§° */ QString GetSolarTermName(int order) { // qCDebug(CommonLogger) << "Getting solar term name for order:" << order; if (0 <= order && order <= 23) { return SolarTermNames[order]; } return ""; } /** * @brief GetTianGanDiZhi 获å�–天干地支,将数字转æ�¢ä¸ºå¤©å¹²åœ°æ”¯ * @param num 需è¦�转æ�¢çš„æ•°å­— * @return 天干地支 */ QString GetTianGanDiZhi(int num) { // qCDebug(CommonLogger) << "Getting TianGanDiZhi for num:" << num; return TianGan[num % 10] + DiZhi[num % 12]; } /** * @brief GetGanZhiMonth 获å�–当天的月干支 * @param year 公历年 * @param monthzhi 月份的地支 * @return 天干地支 */ QString GetGanZhiMonth(int year, int monthzhi) { // qCDebug(CommonLogger) << "Getting GanZhi month for year:" << year << "monthzhi:" << monthzhi; return GetTianGanDiZhi((year - 1900) * 12 + monthzhi + 12); } /** * @brief GetGanZhiYear 获å�–当天的年干支 * @param lunaryear 阴历年份 * @return 天干地支 */ QString GetGanZhiYear(int lunaryear) { // qCDebug(CommonLogger) << "Getting GanZhi year for lunar year:" << lunaryear; return GetTianGanDiZhi(lunaryear - 1864); } /** * @brief GetGanZhiDay 获å�–当天的日干支 * @param year 公历年 * @param month 公历月 * @param day 公历日 * @return 天干地支 */ QString GetGanZhiDay(int year, int month, int day) { // qCDebug(CommonLogger) << "Getting GanZhi day for:" << year << month << day; QDateTime unixDateTime = QDateTime(QDate(year, month, day), QTime(0, 0, 0, 0), Qt::TimeSpec::UTC); qint64 unixTime = unixDateTime.toMSecsSinceEpoch() / 1000; int dayCyclical = int(unixTime / 86400) + 29219 + 18; return GetTianGanDiZhi(dayCyclical); } /** * @brief GetYearZodiac 获å�–当天的生肖,å�³å¹´ä»½çš„生肖 * @param lunaryear 阴历年份 * @return 年份生肖 */ QString GetYearZodiac(int lunaryear) { // qCDebug(CommonLogger) << "Getting year zodiac for lunar year:" << lunaryear; return Animals[(lunaryear - 4) % 12]; } QVector get25SolarTermJDs(int year, int start) { // qCDebug(CommonLogger) << "Getting 25 solar term JDs starting from year:" << year << "start:" << start; // 从æŸ�一年的æŸ�个节气开始,连续计算25个节气,返回å�„节气的儒略日 // year 年份 // start 起始的节气 // 返回 25 个节气的 儒略日北京时间 int stOrder = start; QVector list; for (int i = 0; i < 25; i++) { double jd = GetSolarTermJD(year, stOrder); list.append(JDUTC2BeijingTime(jd)); if (stOrder == DongZhi) { year++; } stOrder = (stOrder + 1) % 24; } return list; } double GetEarthEclipticLongitudeForSun(double jd) { // qCDebug(CommonLogger) << "Calculating Earth's heliocentric ecliptic longitude for JD:" << jd; // 计算地ç�ƒçš„æ—¥å¿ƒé»„ç»� double l = GetSunEclipticLongitudeForEarth(jd); // 计算地ç�ƒçš„æ—¥å¿ƒé»„纬 double b = GetSunEclipticLatitudeForEarth(jd); // 修正章动 l += CalcEarthLongitudeNutation(GetJulianCentury(jd)); // 转æ�¢åˆ°fk5 l += Vsop2Fk5LongitudeCorrection(l, b, jd); // 转æ�¢æˆ�太阳的地心黄ç»� l = Mod2Pi(l + M_PI); // 计算光行差 // 计算日地è·�离 double r = GetSunRadiusForEarth(jd); // 太阳到地ç�ƒçš„光行差å�‚æ•° l -= SecondsToRadians(20.4898) / r; return l; } /** * 按儒略日计算地ç�ƒçš„æ—¥å¿ƒé»„ç»� * * å�‚数: jd 儒略日 * 返回 地ç�ƒçš„æ—¥å¿ƒé»„ç»�,å�•ä½�是弧度(rad) */ double GetSunEclipticLongitudeForEarth(double jd) { // qCDebug(CommonLogger) << "Calculating Sun's ecliptic longitude for Earth for JD:" << jd; double t = GetJulianThousandYears(jd); double L0 = GetEarthL0(t); double L1 = GetEarthL1(t); double L2 = GetEarthL2(t); double L3 = GetEarthL3(t); double L4 = GetEarthL4(t); double L5 = GetEarthL5(t); double L = ((((L5 * t + L4) * t + L3) * t + L2) * t + L1) * t + L0; return Mod2Pi(L); } double GetJulianThousandYears(double jd) { // qCDebug(CommonLogger) << "Getting Julian thousand years for JD:" << jd; //1000年的日数 const double DaysOf1000Years = 365250.0; return (jd - J2000) / DaysOf1000Years; } /** * 按儒略日计算地ç�ƒçš„æ—¥å¿ƒé»„纬 * * å�‚æ•° jd 儒略日 * 返回 地ç�ƒçš„æ—¥å¿ƒé»„纬,å�•ä½�是弧度(rad) */ double GetSunEclipticLatitudeForEarth(double jd) { // qCDebug(CommonLogger) << "Calculating Sun's ecliptic latitude for Earth for JD:" << jd; double t = GetJulianThousandYears(jd); double B0 = GetEarthB0(t); double B1 = GetEarthB1(t); double B2 = GetEarthB2(t); double B3 = GetEarthB3(t); double B4 = GetEarthB4(t); double B = ((((B4 * t) + B3) * t + B2) * t + B1) * t + B0; return B; } /** * 用于把vsop87ç�†è®ºç®—出æ�¥çš„ç»�度转æ�¢æˆ�fk5目视系统的ç»�度的修正值,å�‚考 Jean Meeus çš„ Astronomical * Algorithms 第二版(1998)第32ç« 219页(32.3)å¼� * * å�‚æ•° l * vsop87ç»�度(rad) * å�‚æ•° b * vsop87纬度(rad) * å�‚æ•° jd * 儒略日 * 返回 修正é‡�(rad) */ double Vsop2Fk5LongitudeCorrection(double l, double b, double jd) { // qCDebug(CommonLogger) << "Applying VSOP87 to FK5 longitude correction."; double t = GetJulianCentury(jd); double lp = l - ToRadians(1.397) * t - ToRadians(0.00031) * t * t; return SecondsToRadians(-0.09033 + 0.03916 * (qCos(lp) + qSin(lp)) * qTan(b)); } /** * 按照儒略日计算地ç�ƒå’Œå¤ªé˜³çš„è·�离 * * å�‚æ•° jd 儒略日 * 返回 地ç�ƒå’Œå¤ªé˜³çš„è·�离,å�•ä½�是天文å�•ä½�(au) */ double GetSunRadiusForEarth(double jd) { // qCDebug(CommonLogger) << "Calculating Sun-Earth radius for JD:" << jd; double t = GetJulianThousandYears(jd); double R0 = GetEarthR0(t); double R1 = GetEarthR1(t); double R2 = GetEarthR2(t); double R3 = GetEarthR3(t); double R4 = GetEarthR4(t); double R5 = GetEarthR5(t); double R = ((((R5 * t + R4) * t + R3) * t + R2) * t + R1) * t + R0; return R; } double NewtonIteration(double angle, double x0, bool IsGetSolarTermJD) { // qCDebug(CommonLogger) << "Performing Newton iteration. Angle:" << angle << "x0:" << x0 << "IsGetSolarTermJD:" << IsGetSolarTermJD; //此函数原是传入的匿å��函数,这里用bool用作区分,å�Žç»­å�¯ä»¥ä¼˜åŒ– const double Epsilon = 1e-7; const double Delta = 5e-6; double x; auto func = [angle](double x) -> double { return ModPi(GetEarthEclipticLongitudeForSun(x) - angle); }; auto func1 = [](double x) -> double { double earth = GetEarthEclipticLongitudeForSun(x); double moon = GetMoonEclipticLongitudeEC(x); double res = ModPi(earth - moon); return res; // return ModPi(GetEarthEclipticLongitudeForSun(x) - GetMoonEclipticLongitudeEC(x)); }; while (1) { x = x0; double fx, fpx; if (IsGetSolarTermJD) { fx = func(x); // 导数 fpx = (func(x + Delta) - func(x - Delta)) / Delta / 2; } else { // fx = ModPi(GetEarthEclipticLongitudeForSun(x) - GetMoonEclipticLongitudeEC(x)); // // 导数 // fpx = (ModPi(GetEarthEclipticLongitudeForSun(x + Delta) - GetMoonEclipticLongitudeEC(x)) // - GetEarthEclipticLongitudeForSun(x - Delta) - GetMoonEclipticLongitudeEC(x)) / Delta / 2; fx = func1(x); // 导数 fpx = (func1(x + Delta) - func1(x - Delta)) / Delta / 2; } x0 = x - fx / fpx; if (qAbs(x0 - x) <= Epsilon) { break; } } return x; } double ModPi(double r) { while (r < -M_PI) { r += M_PI * 2; } while (r > M_PI) { r -= M_PI * 2; } return r; } double DmsToDegrees(int degrees, int mintues, double seconds) { return double(degrees) + double(mintues) / 60 + seconds / 3600; } double DmsToSeconds(int d, int m, double s) { return double(d) * 3600 + double(m) * 60 + s; } // DmsToRadians 把度分秒表示的角度æ�¢ç®—æˆ�弧度(rad) double DmsToRadians(int d, int m, int s) { // qCDebug(CommonLogger) << "Converting DMS to radians:" << d << m << s; return ToRadians(DmsToDegrees(d, m, s)); } // GetSolarTermJD 使用牛顿迭代法计算24节气的时间 // f(x) = Vsop87dEarthUtil.getEarthEclipticLongitudeForSun(x) - angle = 0 // year å¹´ // order 节气åº�å�· // 返回 节气的儒略日力学时间 TD double GetSolarTermJD(int year, int order) { // qCDebug(CommonLogger) << "Getting solar term JD for year:" << year << "order:" << order; const double RADIANS_PER_TERM = M_PI / 12.0; double angle = double(order) * RADIANS_PER_TERM; int month = ((order + 1) / 2 + 2) % 12 + 1; // 春分 order 0 // 3 月 20 å�· int day = 6; if (order % 2 == 0) { day = 20; } double jd0 = ToJulianDateHMS(year, month, day, 12, 0, 0.0); double jd = NewtonIteration(angle, jd0, true); return jd; } // IsLeapYear 公历闰年判断 bool IsLeapYear(int year) { // qCDebug(CommonLogger) << "Checking if year is leap:" << year; return ((year & 3) == 0 && year % 100 != 0) || year % 400 == 0; } // GetSolarMonthDays 获å�–公历月份的天数 int GetSolarMonthDays(int year, int month) { // qCDebug(CommonLogger) << "Getting solar month days for:" << year << month; if (month == 2 && IsLeapYear(year)) { return 29; } else { return monthDays[month - 1]; } } // GetWeekday 计算Gregorian日历的星期几 // 算法摘自 http://en.wikipedia.org/wiki/Zeller%27s_congruence // 返回星期几的数字表示,1-6表示星期一到星期六,0表示星期日 int GetWeekday(int y, int m, int d) { // qCDebug(CommonLogger) << "Getting weekday for:" << y << m << d; if (m <= 2) { y -= 1; m += 12; } int c = int(y / 100); y = y % 100; int w = (d + 13 * (m + 1) / 5 + y + (y / 4) + (c / 4) - 2 * c - 1) % 7; if (w < 0) { w += 7; } return w; } // GetDeltaT 计算地ç�ƒæ—¶å’ŒUTC的时差,算法摘自 // http://eclipse.gsfc.nasa.gov/SEhelp/deltatpoly2004.html NASA网站 // ∆T = TT - UT 此算法在-1999年到3000年有效 double GetDeltaT(int year, int month) { // qCDebug(CommonLogger) << "Getting Delta T for:" << year << month; double y = double(year) + (double(month) - 0.5) / 12; if (year < -500) { double u = (double(year) - 1820) / 100; return -20 + 32 * u * u; } else if (year < 500) { double u = y / 100; double u2 = u * u; double u3 = u2 * u; double u4 = u3 * u; double u5 = u4 * u; double u6 = u5 * u; return 10583.6 - 1014.41 * u + 33.78311 * u2 - 5.952053 * u3 - 0.1798452 * u4 + 0.022174192 * u5 + 0.0090316521 * u6; } else if (year < 1600) { double u = (y - 1000) / 100; double u2 = u * u; double u3 = u2 * u; double u4 = u3 * u; double u5 = u4 * u; double u6 = u5 * u; return 1574.2 - 556.01 * u + 71.23472 * u2 + 0.319781 * u3 - 0.8503463 * u4 - 0.005050998 * u5 + 0.0083572073 * u6; } else if (year < 1700) { double t = y - 1600; double t2 = t * t; double t3 = t2 * t; return 120 - 0.9808 * t - 0.01532 * t2 + t3 / 7129; } else if (year < 1800) { double t = y - 1700; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; return 8.83 + 0.1603 * t - 0.0059285 * t2 + 0.00013336 * t3 - t4 / 1174000; } else if (year < 1860) { double t = y - 1800; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; double t5 = t4 * t; double t6 = t5 * t; double t7 = t6 * t; return 13.72 - 0.332447 * t + 0.0068612 * t2 + 0.0041116 * t3 - 0.00037436 * t4 + 0.0000121272 * t5 - 0.0000001699 * t6 + 0.000000000875 * t7; } else if (year < 1900) { double t = y - 1860; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; double t5 = t4 * t; return 7.62 + 0.5737 * t - 0.251754 * t2 + 0.01680668 * t3 - 0.0004473624 * t4 + t5 / 233174; } else if (year < 1920) { double t = y - 1900; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; return -2.79 + 1.494119 * t - 0.0598939 * t2 + 0.0061966 * t3 - 0.000197 * t4; } else if (year < 1941) { double t = y - 1920; double t2 = t * t; double t3 = t2 * t; return 21.20 + 0.84493 * t - 0.076100 * t2 + 0.0020936 * t3; } else if (year < 1961) { double t = y - 1950; double t2 = t * t; double t3 = t2 * t; return 29.07 + 0.407 * t - t2 / 233 + t3 / 2547; } else if (year < 1986) { double t = y - 1975; double t2 = t * t; double t3 = t2 * t; return 45.45 + 1.067 * t - t2 / 260 - t3 / 718; } else if (year < 2005) { double t = y - 2000; double t2 = t * t; double t3 = t2 * t; double t4 = t3 * t; double t5 = t4 * t; return 63.86 + 0.3345 * t - 0.060374 * t2 + 0.0017275 * t3 + 0.000651814 * t4 + 0.00002373599 * t5; } else if (year < 2050) { double t = y - 2000; double t2 = t * t; return 62.92 + 0.32217 * t + 0.005589 * t2; } else if (year < 2150) { double u = (y - 1820) / 100; double u2 = u * u; return -20 + 32 * u2 - 0.5628 * (2150 - y); } else { double u = (y - 1820) / 100; double u2 = u * u; return -20 + 32 * u2; } } // GetDateFromJulianDay 从儒略日中获å�–公历的日期 void GetDateFromJulianDay(double jd, int &yy, int &mm, int &dd) { // qCDebug(CommonLogger) << "Getting date from Julian Day:" << jd; /* * This algorithm is taken from * "Numerical Recipes in c, 2nd Ed." (1992), pp. 14-15 * and converted to integer math. * The electronic version of the book is freely available * at http://www.nr.com/ , under "Obsolete Versions - Older * book and code versions. */ const int JD_GREG_CAL = 2299161; const int JB_MAX_WITHOUT_OVERFLOW = 107374182; int64_t julian = int64_t(qFloor(jd + 0.5)); int64_t ta, jalpha, tb, tc, td, te; if (julian >= JD_GREG_CAL) { jalpha = (4 * (julian - 1867216) - 1) / 146097; ta = int64_t(julian) + 1 + jalpha - jalpha / 4; } else if (julian < 0) { ta = julian + 36525 * (1 - julian / 36525); } else { ta = julian; } tb = ta + 1524; if (tb <= JB_MAX_WITHOUT_OVERFLOW) { tc = (tb * 20 - 2442) / 7305; } else { tc = int64_t((uint64_t(tb) * 20 - 2442) / 7305); } td = 365 * tc + tc / 4; te = ((tb - td) * 10000) / 306001; dd = int(tb - td - (306001 * te) / 10000); mm = int(te - 1); if (mm > 12) { mm -= 12; } yy = int(tc - 4715); if (mm > 2) { yy--; } if (julian < 0) { yy -= int(100 * (1 - julian / 36525)); } } // GetTimeFromJulianDay 从儒略日中获å�–æ—¶é—´ 时分秒 void GetTimeFromJulianDay(double jd, int &hour, int &minute, int &second) { // qCDebug(CommonLogger) << "Getting time from Julian Day:" << jd; double frac = jd - qFloor(jd); int s = int(qFloor(frac * 24.0 * 60.0 * 60.0)); hour = ((s / (60 * 60)) + 12) % 24; minute = (s / (60)) % 60; second = s % 60; } // GetDateTimeFromJulianDay 将儒略日转æ�¢ä¸º time.Time // 其中包å�«äº† TT 到 UTC 的转æ�¢ QDateTime GetDateTimeFromJulianDay(double jd) { // qCDebug(CommonLogger) << "Getting QDateTime from Julian Day:" << jd; int year, month, day; GetDateFromJulianDay(jd, year, month, day); // TT -> UTC jd -= GetDeltaT(year, month) / 86400; GetDateFromJulianDay(jd, year, month, day); int hour, minute, second; GetTimeFromJulianDay(jd, hour, minute, second); return QDateTime(QDate(year, month, day), QTime(hour, minute, second, 0), Qt::TimeSpec::UTC); } // JDUTC2BeijingTime 儒略日 UTC 时间转æ�¢åˆ°åŒ—京时间 double JDUTC2BeijingTime(double utcJD) { // qCDebug(CommonLogger) << "Converting JD UTC to Beijing Time:" << utcJD; return utcJD + 8.0 / 24.0; } // JDBeijingTime2UTC 儒略日 北京时间到 UTC æ—¶é—´ double JDBeijingTime2UTC(double bjtJD) { // qCDebug(CommonLogger) << "Converting JD Beijing Time to UTC:" << bjtJD; return bjtJD - 8.0 / 24.0; } double getNewMoonJD(double jd0) { // qCDebug(CommonLogger) << "Getting new moon JD from jd0:" << jd0; return NewtonIteration(0, jd0, false); } QVector get15NewMoonJDs(double jd) { // qCDebug(CommonLogger) << "Getting 15 new moon JDs from JD:" << jd; // 计算从æŸ�个时间之å�Žçš„连续15个朔日 // å�‚æ•°: jd 开始时间的 儒略日 // 返回 15个朔日时间 数组指针 儒略日北京时间 QVector list; for (int i = 0; i < 15; i++) { double newMoonJD = getNewMoonJD(jd); list.append(JDUTC2BeijingTime(newMoonJD)); // 转到下一个最接近朔日的时间 jd = newMoonJD + 29.53; } return list; } qint64 deltaDays(QDateTime t1, QDateTime t2) { // qCDebug(CommonLogger) << "Calculating delta days between:" << t1 << "and" << t2; // 计算两个时间相差的天数 // t2 > t1 结果为正数 return int(t1.date().daysTo(t2.date())); // return qint64((t2.toSecsSinceEpoch() - t1.toSecsSinceEpoch()) / 86400); } QString festivalForFatherAndMother(int year, int month, int day) { // qCDebug(CommonLogger) << "Checking for Father's/Mother's day for:" << year << month << day; int disparityMotherDay, disparityFatherDay, fatherDay, motherDay; int leapYear = 0; for (int i = 1900; i <= year; i++) { if ((i % 400 == 0) || ((i % 100 != 0) && (i % 4 == 0))) { leapYear += 1; } } if (month == 5) { disparityMotherDay = (((year - 1899) * 365 + leapYear) - (31 + 30 + 31 + 31 + 30 + 31 + 30 + 31)) % 7; motherDay = 14 - disparityMotherDay; if (day == motherDay) { return "æ¯�亲节"; } else { return ""; } } if (month == 6) { disparityFatherDay = (((year - 1899) * 365 + leapYear) - (30 + 31 + 31 + 30 + 31 + 30 + 31)) % 7; fatherDay = 21 - disparityFatherDay; if (day == fatherDay) { return "父亲节"; } else { return ""; } } return ""; } /** * @brief GetMoonEclipticParameter 弧度计算 * @param T 儒略世纪数 * @return 弧度 */ void GetMoonEclipticParameter(MoonEclipticParameter &moonEclipticParameter, double T) { // qCDebug(CommonLogger) << "Getting moon ecliptic parameters for T:" << T; double T2 = T * T; double T3 = T2 * T; double T4 = T3 * T; /*月ç�ƒå¹³é»„ç»�*/ moonEclipticParameter.Lp = Mod2Pi(ToRadians(218.3164591 + 481267.88134236 * T - 0.0013268 * T2 + T3 / 538841.0 - T4 / 65194000.0)); /*月日è·�è§’*/ moonEclipticParameter.D = Mod2Pi(ToRadians(297.8502042 + 445267.1115168 * T - 0.0016300 * T2 + T3 / 545868.0 - T4 / 113065000.0)); /*太阳平近点角*/ moonEclipticParameter.M = Mod2Pi(ToRadians(357.5291092 + 35999.0502909 * T - 0.0001536 * T2 + T3 / 24490000.0)); /*月亮平近点角*/ moonEclipticParameter.Mp = Mod2Pi(ToRadians(134.9634114 + 477198.8676313 * T + 0.0089970 * T2 + T3 / 69699.0 - T4 / 14712000.0)); /*月ç�ƒç»�度å�‚æ•°(到å�‡äº¤ç‚¹çš„平角è·�离)*/ moonEclipticParameter.F = Mod2Pi(ToRadians(93.2720993 + 483202.0175273 * T - 0.0034029 * T2 - T3 / 3526000.0 + T4 / 863310000.0)); /* å��映地ç�ƒè½¨é�“å��心率å�˜åŒ–的辅助å�‚é‡� */ moonEclipticParameter.E = 1 - 0.002516 * T - 0.0000074 * T2; } /** * @brief ToRadians 角度转æ�¢ä¸ºå¼§åº¦ * @param degrees 角度 * @return 弧度 */ double ToRadians(double degrees) { // qCDebug(CommonLogger) << "Converting degrees to radians:" << degrees; return degrees * M_PI / 180; } /** * @brief Mod2Pi 把角度é™�制在[0, 2Ï€]之间 * @param r 角度 * @return 角度 */ double Mod2Pi(double r) { // qCDebug(CommonLogger) << "Running Mod2Pi on:" << r; while (r < 0) { r += M_PI * 2; } while (r > 2 * M_PI) { r -= M_PI * 2; } return r; } /** * @brief CalcMoonECLongitudePeriodic 计算月ç�ƒåœ°å¿ƒé»„ç»�周期项的和 * @param raDian 弧度 * @return 月ç�ƒåœ°å¿ƒé»„ç»�周期项的和 */ double CalcMoonECLongitudePeriodic(MoonEclipticParameter &moonEclipticParameter) { // qCDebug(CommonLogger) << "Calculating moon ecliptic longitude periodic sum."; double EI = 0.0; for (int i = 0; i < MoonLongitude.count(); i++) { double theta = MoonLongitude[i].D * moonEclipticParameter.D + MoonLongitude[i].M * moonEclipticParameter.M + MoonLongitude[i].Mp * moonEclipticParameter.Mp + MoonLongitude[i].F * moonEclipticParameter.F; EI += MoonLongitude[i].EiA * qSin(theta) * qPow(moonEclipticParameter.E, qAbs(MoonLongitude[i].M)); } return EI; } /** * @brief CalcMoonLongitudePerturbation 计算金星摄动,木星摄动以å�Šåœ°ç�ƒæ‰�率摄动对月ç�ƒåœ°å¿ƒé»„ç»�的影å“� * @param T 儒略世纪数 * @param raDian 弧度 * @return */ double CalcMoonLongitudePerturbation(double T, MoonEclipticParameter &moonEclipticParameter) { // qCDebug(CommonLogger) << "Calculating moon longitude perturbation for T:" << T; double A1 = Mod2Pi(ToRadians(119.75 + 131.849 * T)); double A2 = Mod2Pi(ToRadians(53.09 + 479264.290 * T)); return 3958.0 * qSin(A1) + 1962.0 * qSin(moonEclipticParameter.Lp - moonEclipticParameter.F) + 318.0 * qSin(A2); } /** * @brief GetMoonEclipticLongitudeEC 计算月ç�ƒåœ°å¿ƒé»„ç»� * @param julianDay 儒略日 * @return 弧度 */ double GetMoonEclipticLongitudeEC(double julianDay) { // qCDebug(CommonLogger) << "Getting moon ecliptic longitude EC for Julian Day:" << julianDay; MoonEclipticParameter m_radian; double T = GetJulianCentury(julianDay); GetMoonEclipticParameter(m_radian, T); // Lp 计算是正确的 /*计算月ç�ƒåœ°å¿ƒé»„ç»�周期项*/ double EI = CalcMoonECLongitudePeriodic(m_radian); /*修正金星,木星以å�Šåœ°ç�ƒæ‰�率摄动*/ EI += CalcMoonLongitudePerturbation(T, m_radian); double longitude = m_radian.Lp + ToRadians(EI / 1000000.0); /*计算天体章动干扰*/ longitude += CalcEarthLongitudeNutation(T); return longitude; } /** * @brief GetJulianCentury 计算儒略世纪数 * @param julianDay 儒略日 * @return 儒略世纪数 */ double GetJulianCentury(double julianDay) { // qCDebug(CommonLogger) << "Getting Julian century for Julian Day:" << julianDay; // 100年的日数 const double DaysOfCentury = 36525.0; return (julianDay - J2000) / DaysOfCentury; } /** * @brief GetEarthNutationParameter 返回弧度 * @param earthNutationParameter 弧度 * @param T 儒略世纪数 * @return 弧度 */ void GetEarthNutationParameter(EarthNutationParameter &earthNutationParameter, double T) { // qCDebug(CommonLogger) << "Getting Earth nutation parameters for T:" << T; double T2 = T * T; double T3 = T2 * T; /*å¹³è·�角(如月对地心的角è·�离)*/ earthNutationParameter.D = ToRadians(297.85036 + 445267.111480 * T - 0.0019142 * T2 + T3 / 189474.0); /*太阳(地ç�ƒï¼‰å¹³è¿‘点角*/ earthNutationParameter.M = ToRadians(357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000.0); /*月亮平近点角*/ earthNutationParameter.Mp = ToRadians(134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250.0); /*月亮纬度å�‚æ•°*/ earthNutationParameter.F = ToRadians(93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270.0); /*黄é�“与月亮平轨é�“å�‡äº¤ç‚¹é»„ç»�*/ earthNutationParameter.Omega = ToRadians(125.04452 - 1934.136261 * T + 0.0020708 * T2 + T3 / 450000.0); } double CalcEarthLongitudeNutation(double T) { // qCDebug(CommonLogger) << "Calculating Earth longitude nutation for T:" << T; EarthNutationParameter m_radian; GetEarthNutationParameter(m_radian, T); double result = 0.0; for (int i = 0; i < nuation.count(); i++) { double theta = nuation[i].D * m_radian.D + nuation[i].M * m_radian.M + nuation[i].Mp * m_radian.Mp + nuation[i].F * m_radian.F + nuation[i].Omega * m_radian.Omega; result += (nuation[i].Sine1 + nuation[i].Sine2 * T) * qSin(theta); } //乘以章动表的系数 0.0001 è§’ç§’ return result * coefficient(); } /** * @brief SecondsToDegrees 把角秒æ�¢ç®—æˆ�角度 * @param seconds è§’ç§’ * @return 角度 */ double SecondsToDegrees(double seconds) { // qCDebug(CommonLogger) << "Converting seconds to degrees:" << seconds; return seconds / 3600; } double SecondsToRadians(double seconds) { // qCDebug(CommonLogger) << "Converting seconds to radians:" << seconds; return ToRadians(SecondsToDegrees(seconds)); } double CalcEarthObliquityNutation(double dt) { // qCDebug(CommonLogger) << "Calculating Earth obliquity nutation for dt:" << dt; EarthNutationParameter m_radian; GetEarthNutationParameter(m_radian, dt); double result = 0.0; for (int i = 0; i < nuation.count(); i++) { double theta = nuation[i].D * m_radian.D + nuation[i].M * m_radian.M + nuation[i].Mp * m_radian.Mp + nuation[i].F * m_radian.F + nuation[i].Omega * m_radian.Omega; result += (nuation[i].Cosine1 + nuation[i].Cosine2 * dt) * qCos(theta); } //乘以章动表的系数 0.0001 è§’ç§’ return result * coefficient(); } double ToJulianDateHMS(int year, int month, int day, int hour, int minute, double second) { // qCDebug(CommonLogger) << "Converting HMS to Julian Date:" << year << month << day << hour << minute << second; int jdn = ToJulianDate(year, month, day); return double(jdn) + (double(hour) - 12) / 24.0 + double(minute) / 1440.0 + second / 86400.0; } int ToJulianDate(int year, int month, int day) { // qCDebug(CommonLogger) << "Converting to Julian Date:" << year << month << day; int a = (14 - month) / 12; int y = year + 4800 - a; int m = month + 12 * a - 3; return day + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045; } double coefficient() { // qCDebug(CommonLogger) << "Getting coefficient."; return SecondsToRadians(0.0001); } double lightAberration() { // qCDebug(CommonLogger) << "Getting light aberration."; return SecondsToRadians(20.4898); } //获å�–阳历节日 QString GetSolarDayFestival(int year, int month, int day) { // qCDebug(CommonLogger) << "Getting solar day festival for:" << year << month << day; QString festivals; if ((month == 5) || (month == 6)) { QString name = festivalForFatherAndMother(year, month, day); if (!name.isEmpty()) { festivals.append(name); } } int key = month * 100 + day; QString solarFestival = solarFestivals[key]; if (!solarFestival.isEmpty()) { QStringList temlist = solarFestival.split(","); for (int i = 0; i < temlist.size(); ++i) { //节日å��ç§° QString temname = temlist.at(i); //带有节日映射的的迭代器 auto it = solarFestivalStarYear.find(temname); //ä¿�è¯�ä¸�越界,并且节日的开始年份在year之å‰�(包括year) if (it != solarFestivalStarYear.end() && *it <= year) { if (!festivals.isEmpty()) { festivals.append(','); } festivals.append(temname); festivals.append(','); } } } if (festivals.endsWith(',')) festivals = festivals.left(festivals.length() - 1); return festivals; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/lunarandfestival/method_interface.h000066400000000000000000000114471523260663500324250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef METHOD_INTERFACE_H #define METHOD_INTERFACE_H #include "celestialbodies.h" #include "lunarandfestival.h" #include #include #include //获å�–当天的农历月å��ç§° QString GetLunarMonthName(int lunarmonthname, bool isleap = false); //获å�–当天的农历日å�� QString GetLunarDayName(int lundayname); //获å�–当天的农历节日å��,没有则返回空字符串 QString GetLunarDayFestival(int monthname, int lunarday, int lunarmonthdays, int solarterm); //获å�–公历节日,没有则返回空字符串 QString GetSolarDayFestival(int year, int month, int day); //获å�–二å��四节气å��,如果没有则返回空 QString GetSolarTermName(int order); //获å�–天干地支,将数字转æ�¢ä¸ºå¤©å¹²åœ°æ”¯ QString GetTianGanDiZhi(int num); //获å�–当天的月干支 QString GetGanZhiMonth(int year, int monthzhi); //获å�–当天的年干支 QString GetGanZhiYear(int lunaryear); //获å�–当天的日干支 QString GetGanZhiDay(int year, int month, int day); //获å�–当天的生肖,å�³å¹´ä»½çš„生肖 QString GetYearZodiac(int lunaryear); QVector get25SolarTermJDs(int year, int start); //弧度计算 void GetMoonEclipticParameter(MoonEclipticParameter &moonEclipticParameter, double T); //角度转æ�¢ä¸ºå¼§åº¦ double ToRadians(double degrees); //把角度é™�制在[0, 2Ï€]之间 double Mod2Pi(double r); //计算月ç�ƒåœ°å¿ƒé»„ç»�周期项的和 double CalcMoonECLongitudePeriodic(MoonEclipticParameter &moonEclipticParameter); /*计算金星摄动,木星摄动以å�Šåœ°ç�ƒæ‰�率摄动对月ç�ƒåœ°å¿ƒé»„ç»�的影å“�, T 是儒略世纪数,Lpå’ŒFå�•ä½�是弧度*/ // A1 = 119.75 + 131.849 * T (4.13å¼�) // A2 = 53.09 + 479264.290 * T (4.14å¼�) // A3 = 313.45 + 481266.484 * T (4.15å¼�) double CalcMoonLongitudePerturbation(double T, MoonEclipticParameter &moonEclipticParameter); //计算月ç�ƒåœ°å¿ƒé»„ç»� double GetMoonEclipticLongitudeEC(double julianDay); //计算儒略世纪数 double GetJulianCentury(double julianDay); //返回弧度 void GetEarthNutationParameter(EarthNutationParameter &earthNutationParameter, double T); //计算æŸ�时刻的黄ç»�章动干扰é‡� double CalcEarthLongitudeNutation(double T); //把角秒æ�¢ç®—æˆ�角度 double SecondsToDegrees(double seconds); //把角秒æ�¢ç®—æˆ�弧度 double coefficient(); double SecondsToRadians(double seconds); /*计算æŸ�时刻的黄赤交角章动干扰é‡�,dt是儒略å�ƒå¹´æ•°ï¼Œè¿”回值å�•ä½�是度*/ // 计算æŸ�时刻的黄赤交角章动干扰é‡� // dt 是儒略世纪数 // 返回弧度 double CalcEarthObliquityNutation(double dt); // ToJulianDateHMS 计算Gregorian时间的儒略日数 // 算法摘自 http://en.wikipedia.org/wiki/Julian_day double ToJulianDateHMS(int year, int month, int day, int hour, int minute, double second); // ToJulianDate 计算Gregorian日期的儒略日数,以TT当天中å�ˆ12点为准(结果是整数)。 // 算法摘自 http://en.wikipedia.org/wiki/Julian_day int ToJulianDate(int year, int month, int day); double GetEarthEclipticLongitudeForSun(double jd); double GetSunEclipticLongitudeForEarth(double jd); //计算儒略å�ƒå¹´æ•° double GetJulianThousandYears(double jd); double GetSunEclipticLatitudeForEarth(double jd); double Vsop2Fk5LongitudeCorrection(double l, double b, double jd); double GetSunRadiusForEarth(double jd); /** * 计算修正å�Žçš„太阳的地心视黄ç»� * * å�‚æ•° jd * 儒略日 * 返回 修正å�Žçš„地心黄ç»�(rad) */ // 常é‡� double lightAberration(); // NewtonIteration 牛顿迭代法求解方程的根 double NewtonIteration(double angle, double x0, bool IsGetSolarTermJD); // ModPi 把角度é™�制在[-Ï€, Ï€]之间 double ModPi(double r); // DmsToDegrees 把度分秒表示的角度æ�¢ç®—æˆ�度 double DmsToDegrees(int degrees, int mintues, double seconds); // DmsToSeconds 把度分秒表示的角度æ�¢ç®—æˆ�è§’ç§’(arcsecond) double DmsToSeconds(int d, int m, double s); double DmsToRadians(int d, int m, int s); double GetSolarTermJD(int year, int order); bool IsLeapYear(int year); int GetSolarMonthDays(int year, int month); int GetWeekday(int y, int m, int d = 1); double GetDeltaT(int year, int month); void GetDateFromJulianDay(double jd, int &yy, int &mm, int &dd); void GetTimeFromJulianDay(double jd, int &hour, int &minute, int &second); QDateTime GetDateTimeFromJulianDay(double jd); double JDUTC2BeijingTime(double utcJD); double JDBeijingTime2UTC(double bjtJD); double getNewMoonJD(double jd0); QVector get15NewMoonJDs(double jd); qint64 deltaDays(QDateTime t1, QDateTime t2); QString festivalForFatherAndMother(int year, int month, int day); #endif // LUNARANDFESTIVALALGORITHM_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/pinyin/000077500000000000000000000000001523260663500247115ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/pinyin/pinyindict.cpp000066400000000000000000000124601523260663500275720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "pinyindict.h" /* å�ˆæ³•拼音列表 */ QVector validPinyinList = { "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cen", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "dei", "den", "deng", "di", "dia", "dian", "diao", "die", "ding", "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", "en", "eng", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fiao", "fo", "fou", "fu", "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "jun", "juan", "jue", "#NAME?", "ka", "kai", "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "lo", "long", "lou", "lu", "luan", "lun", "luo", "lv", "lve", "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min", "ming", "miu", "mo", "mou", "mu", "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang", "niao", "nie", "nin", "ning", "niu", "nong", "nou", "nu", "nuan", "nun", "nuo", "nv", "nve", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", "pou", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "rua", "ruan", "rui", "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shei", "shen", "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "tei", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", "tui", "tun", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo", "yong", "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", "zhao", "zhe", "zhei", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo", }; // 带音标字符。 QMap phoneticSymbol = { {"Ä�", "a1"}, {"á", "a2"}, {"ÇŽ", "a3"}, {"à", "a4"}, {"Ä“", "e1"}, {"é", "e2"}, {"Ä›", "e3"}, {"è", "e4"}, {"Å�", "o1"}, {"ó", "o2"}, {"Ç’", "o3"}, {"ò", "o4"}, {"Ä«", "i1"}, {"í", "i2"}, {"Ç�", "i3"}, {"ì", "i4"}, {"Å«", "u1"}, {"ú", "u2"}, {"Ç”", "u3"}, {"ù", "u4"}, {"ü", "v"}, {"ǘ", "v2"}, {"Çš", "v3"}, {"Çœ", "v4"}, {"Å„", "n2"}, {"ň", "n3"}, {"ǹ", "n4"}, {"ḿ", "m2"}, }; linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/pinyin/pinyindict.h000066400000000000000000000006741523260663500272430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef PINYINDICT_H #define PINYINDICT_H #include #include //获å�–拼音字典 const QVector > getPinYinDictVector(); // 带音标字符。 extern QMap phoneticSymbol; /* å�ˆæ³•拼音列表 */ extern QVector validPinyinList; #endif // PINYINDICT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/pinyin/pinyinsearch.cpp000066400000000000000000000203751523260663500301200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "pinyinsearch.h" #include "pinyindict.h" #include "commondef.h" #include #include #include #include pinyinsearch *pinyinsearch::m_pinyinsearch = nullptr; QMap pinyinsearch::pinyinDictVector {}; const QString kDictFile = ":/pinyin.dict"; /** * @brief pinyinsearch::pinyinsearch 构造函数,进行åˆ�始化 */ pinyinsearch::pinyinsearch() { qCDebug(CommonLogger) << "pinyinsearch constructor called, initializing valid pinyin map."; for (int i = 0; i < validPinyinList.size(); i++) { QString key = validPinyinList[i]; validPinyinMap[key] = true; //拼音最大长度 if (key.size() > singlePinyinMaxLength) singlePinyinMaxLength = key.size(); } } pinyinsearch *pinyinsearch::getPinPinSearch() { // qCDebug(CommonLogger) << "Getting pinyinsearch instance."; if (m_pinyinsearch == nullptr) { qCDebug(CommonLogger) << "pinyinsearch instance is null, creating new one."; //new pinyinsearch m_pinyinsearch = new pinyinsearch(); //获å�–拼音字典 initDict(); } return m_pinyinsearch; } /** * @brief pinyinsearch::canQueryByPinyin 拼音是å�¦ä¸Žæ­£åˆ™è¡¨è¾¾å¼�匹é…� * @param str 拼音字符串 * @return bool值 */ bool pinyinsearch::CanQueryByPinyin(QString str) { // qCDebug(CommonLogger) << "Checking if can query by pinyin:" << str; #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QRegularExpression regexp("^[a-zA-Z]+$"); return regexp.match(str).hasMatch(); #else QRegExp regexp("^[a-zA-Z]+$"); return regexp.exactMatch(str); #endif } /** * @brief pinyinsearch::createPinyin 创建拼音字符串 * @param zh 汉字字符串 * @return 拼音字符串 */ QString pinyinsearch::CreatePinyin(const QString &zh) { qCDebug(CommonLogger) << "Creating pinyin for Chinese string:" << zh; //返回中文对应的拼音,汉字个数对应QList长度,æ¯�个汉字拥有的拼音个数对应QStringList长度 QList pyList = Pinyin(zh); QString pinyinStr; for (int i = 0; i < pyList.count(); i++) { //如果一个汉字有多个拼音,把“|â€�放在中间,以示区分 QString pyStr = pyList.at(i).join("|"); //å°†æ¯�个汉字的拼音放在[]中 if (!pyStr.isEmpty()) pinyinStr += "[" + pyStr + "]"; } qCDebug(CommonLogger) << "Created pinyin string:" << pinyinStr; return pinyinStr; } void pinyinsearch::initDict() { qCDebug(CommonLogger) << "Initializing pinyin dictionary."; if (!pinyinDictVector.isEmpty()) { qCDebug(CommonLogger) << "Dictionary already initialized, skipping."; return; } QFile file(kDictFile); if (!file.open(QIODevice::ReadOnly)) { qCWarning(CommonLogger) << "open dictFile error :" << file.error(); return; } QByteArray content = file.readAll(); file.close(); QTextStream stream(&content, QIODevice::ReadOnly); while (!stream.atEnd()) { const QString line = stream.readLine(); const QStringList items = line.split(QChar(':')); if (items.size() == 2) { pinyinDictVector.insert(items[0].toInt(nullptr, 16), items[1]); } } qCDebug(CommonLogger) << "Pinyin dictionary initialized with" << pinyinDictVector.size() << "entries."; } /** * @brief pinyinsearch::createPinyinQuery 构造拼音查询表达å¼� * @param pinyin 拼音 * @return 按照汉字划分好的拼音字符串 */ QString pinyinsearch::CreatePinyinQuery(QString pinyin) const { // qCDebug(CommonLogger) << "Creating pinyin query for:" << pinyin; QString expr; //对传入的拼音进行划分,例如:“nihaoâ€�->"[%ni%][%hao%]" while (pinyin.size() > 0) { //拼音最大长度 int i = singlePinyinMaxLength; if (i > pinyin.size()) { i = pinyin.size(); } while (i > 1) { //从拼音最大长度,递å‡�截å�–拼音,是å�¦åœ¨å­—典中 QString key = pinyin.mid(0, i); //如果拼音在字典中,则此拼音代表一个汉字的拼音,break if (validPinyinMap[key]) break; i--; } //一个汉字的拼音 QString key = pinyin.mid(0, i); //对剩下的字符串å†�次进行解æž� pinyin = pinyin.mid(i, pinyin.size()); //对æ¯�个汉字的拼音进行区分 expr += "[%" + key + "%]"; } return expr; } /** * @brief pinyinsearch::createPinyinRegexp 构造拼音查询正则表达å¼� * @param pinyin 拼音 * @return 拼音的正则表达å¼� */ QString pinyinsearch::CreatePinyinRegexp(QString pinyin) const { // qCDebug(CommonLogger) << "Creating pinyin regexp for:" << pinyin; QString expr; while (pinyin.size() > 0) { int i = singlePinyinMaxLength; if (i > pinyin.size()) { i = pinyin.size(); } while (i > 1) { QString key = pinyin.mid(0, i); if (validPinyinMap[key]) { break; } i--; } QString key = pinyin.mid(0, i); pinyin = pinyin.mid(i, pinyin.size()); expr += "\\[[a-z\\|]*" + key + "[a-z\\|]*\\]"; } return expr; } /** * @brief pinyinsearch::pinyinMatch 判断汉字和拼音是å�¦åŒ¹é…� * @param zh 汉字 * @param py 汉字对应的拼音 * @return bool值 */ bool pinyinsearch::PinyinMatch(const QString &zh, const QString &py) const { qCDebug(CommonLogger) << "Matching pinyin for Chinese:" << zh << "with pinyin:" << py; //获å�–汉字的拼音 QString zhPinyin = CreatePinyin(zh); //获å�–拼音的正则表达å¼� QString expr = CreatePinyinRegexp(py); //QRegularExpression类使用正则表达å¼�æ��供模å¼�匹é…�。 QRegularExpression regexp(expr); //æ ¹æ�®ç»™å®šçš„主题字符串匹é…�正则表达å¼�,返回的QRegularExpressionMatch对象包å�«åŒ¹é…�的结果。 QRegularExpressionMatch match = regexp.match(zhPinyin); //拼音是å�¦ä¸Žæ­£åˆ™è¡¨è¾¾å¼�匹é…� return match.hasMatch(); } /** * @brief pinyinsearch::Pinyin 获å�–汉字的拼音 * @param str 汉字 * @return 汉字对应的拼音 */ QList pinyinsearch::Pinyin(QString str) { // qCDebug(CommonLogger) << "Getting pinyin for string:" << str; QList pys {}; QStringList py; for (int i = 0; i < str.count(); i++) { //æ¯�个汉字对应的拼音 py = SinglePinyin(str.at(i)); if (py.size() > 0) { //将去掉音调的拼音添加到Qlist中 pys.append(RemoveYin(py)); } } return pys; } /** * @brief pinyinsearch::SinglePinyin 通过字典找到汉字对应的拼音 * @param index 汉字 * @return 拼音 */ QStringList pinyinsearch::SinglePinyin(QString index) { // qCDebug(CommonLogger) << "Getting single pinyin for character:" << index; //通过汉字的编ç �找到对应的拼音 QString value; //查找对应的拼音 const int unicode = index.data()->unicode(); if (pinyinDictVector.contains(unicode)) { value = pinyinDictVector[index.data()->unicode()]; } QStringList pys {}; pys = value.split(","); return pys; } /** * @brief pinyinsearch::removeYin 去掉拼音中的音调 * @param pinyin 带有音调的拼音 * @return ä¸�带音调的拼音 */ QStringList pinyinsearch::RemoveYin(QStringList pinyin) { // qCDebug(CommonLogger) << "Removing tone from pinyin list."; QString str; QStringList strList; //é��历æ¯�个拼音 for (int i = 0; i < pinyin.size(); i++) { //é��历拼音中的æ¯�个字æ¯�,对带有音调的进行处ç�† for (int j = 0; j < pinyin.at(i).size(); j++) { QString s = pinyin.at(i).at(j); //如果有音调转æ�¢ä¸ºä¸�带音调的字æ¯�,å�¦åˆ™ä½¿ç”¨åŽŸå­—æ¯� if (phoneticSymbol.contains(s)) { str.append(phoneticSymbol[s][0]); } else { str.append(s); } } //一个拼音å�¯èƒ½æœ‰å¤šç§�音调,所以需è¦�去é‡� if (!strList.contains(str)) strList.append(str); str.clear(); } return strList; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/pinyin/pinyinsearch.h000066400000000000000000000026261523260663500275640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef PINYINSEARCH_H #define PINYINSEARCH_H #include #include class pinyinsearch { public: static pinyinsearch *getPinPinSearch(); /* 判断字符串是å�¦å�ªå�¯ä»¥è¿›è¡Œæ‹¼éŸ³æŸ¥è¯¢ */ static bool CanQueryByPinyin(QString str); /* 创建拼音字符串 */ static QString CreatePinyin(const QString &zh); //åˆ�始化字典 static void initDict(); /* 构造拼音查询表达å¼� */ QString CreatePinyinQuery(QString pinyin) const; /* 构造拼音查询正则表达å¼� */ QString CreatePinyinRegexp(QString pinyin) const; /* 判断汉字和拼音是å�¦åŒ¹é…� */ bool PinyinMatch(const QString &zh, const QString &py) const; private: /* åˆ�始化å�ˆæ³•拼音表 */ pinyinsearch(); //获å�–汉字对应的拼音,ä¸�带音调 static QList Pinyin(QString str); //找到汉字对应的拼音 static QStringList SinglePinyin(QString index); //去掉拼音中的音调 static QStringList RemoveYin(QStringList pinyin); /* å�•个å�ˆæ³•拼音的最大长度 */ int singlePinyinMaxLength = 0; /* å�ˆæ³•å�•拼音表 */ QMap validPinyinMap {}; static pinyinsearch *m_pinyinsearch; //拼音字典 static QMap pinyinDictVector; }; #endif linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/units.cpp000066400000000000000000000107351523260663500252570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "units.h" #include "commondef.h" #include #include #include #include #include #include #include #include #include QString dtToString(const QDateTime &dt) { // qCDebug(CommonLogger) << "Converting QDateTime to string:" << dt; QTime _offsetTime = QTime(0, 0).addSecs(dt.timeZone().offsetFromUtc(dt)); return QString("%1+%2").arg(dt.toString("yyyy-MM-ddThh:mm:ss")).arg(_offsetTime.toString("hh:mm")); } QDateTime dtConvert(const QDateTime &datetime) { // qCDebug(CommonLogger) << "Converting QDateTime:" << datetime; QDateTime dt = datetime; dt.setOffsetFromUtc(dt.offsetFromUtc()); return dt; } QDateTime dtFromString(const QString &st) { // qCDebug(CommonLogger) << "Converting string to QDateTime:" << st; QDateTime &&dtSt = QDateTime::fromString(st, Qt::ISODate); //转æ�¢ä¸ºæœ¬åœ°æ—¶åŒº return QDateTime(dtSt.date(),dtSt.time()); } QString getDBPath() { // qCDebug(CommonLogger) << "Getting DB path."; return getHomeConfigPath().append("/deepin/dde-calendar-service"); } QDate dateFromString(const QString &date) { // qCDebug(CommonLogger) << "Converting string to QDate:" << date; return QDate::fromString(date, Qt::ISODate); } QString dateToString(const QDate &date) { // qCDebug(CommonLogger) << "Converting QDate to string:" << date; return date.toString("yyyy-MM-dd"); } bool isChineseEnv() { // qCDebug(CommonLogger) << "Checking for Chinese environment."; return QLocale::system().name().startsWith("zh_"); } QString getHomeConfigPath() { qCDebug(CommonLogger) << "Getting home config path."; //æ ¹æ�®çŽ¯å¢ƒå�˜é‡�获å�–config目录 QString configPath = QString(qgetenv("XDG_CONFIG_HOME")); if(configPath.trimmed().isEmpty()) { qCDebug(CommonLogger) << "XDG_CONFIG_HOME is empty, using QStandardPaths."; configPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); } return configPath; } QDir getAppConfigDir() { // qCDebug(CommonLogger) << "Getting app config directory."; return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation); } QDir getAppCacheDir() { // qCDebug(CommonLogger) << "Getting app cache directory."; return QStandardPaths::writableLocation(QStandardPaths::CacheLocation); } QSharedPointer DownloadFile(QString url, QString filename) { qCDebug(CommonLogger) << "Downloading file from" << url << "to" << filename; auto process = QSharedPointer::create(); process->setEnvironment({"LANGUAGE=en"}); process->start("wget", { "-c", "-N", "-O", filename, url }); return process; } bool withinTimeFrame(const QDate &date) { // qCDebug(CommonLogger) << "Checking if date" << date << "is within time frame."; return date.isValid() && (date.year() >= 1900 && date.year() <=2100); } bool isCommunityEdition() { // Add static cache, query only once static bool cachedResult = false; static bool hasQueried = false; qCDebug(CommonLogger) << "isCommunityEdition"; // If already queried, return cached result if (hasQueried) { qCDebug(CommonLogger) << "isCommunityEdition cached"; return cachedResult; } QDBusInterface interface("org.deepin.dde.SystemInfo1", "/org/deepin/dde/SystemInfo1", "org.deepin.dde.SystemInfo1", QDBusConnection::sessionBus()); if(!interface.isValid()) { qCDebug(CommonLogger) << "SystemInfo DBus interface invalid"; hasQueried = true; return cachedResult; } QVariant distroID = interface.property("DistroID"); if(!distroID.isValid()) { qCDebug(CommonLogger) << "Failed to get DistroID property"; hasQueried = true; return cachedResult; } QString distroIDStr = distroID.toString(); if(distroIDStr.isEmpty()) { qCDebug(CommonLogger) << "DistroID property is empty"; hasQueried = true; return cachedResult; } // Check if DistroID is "Deepin" (case insensitive) qCDebug(CommonLogger) << "DistroID:" << distroIDStr; cachedResult = (distroIDStr.toLower() == "deepin"); hasQueried = true; qCDebug(CommonLogger) << "Is community edition (Deepin):" << cachedResult; return cachedResult; } linuxdeepin-dde-calendar-f6d670a/src/calendar-common/src/units.h000066400000000000000000000033161523260663500247210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef UNITS_H #define UNITS_H #include #include #include #include #include #include const QString serviceBaseName = "com.deepin.dataserver.Calendar"; const QString serviceBasePath = "/com/deepin/dataserver/Calendar"; #define accountServiceInterface "com.deepin.dataserver.Calendar.Account" static const QMap GTypeColor = { {"0cecca8a-291b-46e2-bb92-63a527b77d46", "#FF5E97"}, {"10af78a1-3c25-4744-91db-6fbe5e88083b", "#FF9436"}, {"263d6c79-32b6-4b00-bf0d-741e50a9550f", "#FFDC00"}, {"35e70047-98bb-49b9-8ad8-02d1c942f5d0", "#5BDD80"}, {"406fc0df-87ce-4b3f-b1bc-65d89d791dbc", "#00B99B"}, {"5bf13e88-e99f-4975-80a8-149fe0a315e3", "#4293FF"}, {"6cfd1459-1085-47e9-8ca6-379d47ec319a", "#5D51FF"}, {"70080e96-e68d-40af-9cca-2f41021f6142", "#A950FF"}, {"8ac5c8bb-55ce-4264-8b0a-5d32116cf983", "#717171"}}; QString dtToString(const QDateTime &dt); QDateTime dtFromString(const QString &st); QString dateToString(const QDate &date); QDate dateFromString(const QString &date); //获å�–æ–°æ•°æ�®åº“路径 QString getDBPath(); //是å�¦ä¸ºä¸­æ–‡çŽ¯å¢ƒ bool isChineseEnv(); //获å�–å®¶é…�置目录 QString getHomeConfigPath(); QDir getAppConfigDir(); QDir getAppCacheDir(); QSharedPointer DownloadFile(QString url, QString filename); //时间转æ�¢ QDateTime dtConvert(const QDateTime &datetime); //是å�¦åœ¨æ˜¾ç¤ºæ—¶é—´èŒƒå›´å†…1900-2100 bool withinTimeFrame(const QDate &date); // Check if current system is community edition (Deepin) bool isCommunityEdition(); #endif // UNITS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/000077500000000000000000000000001523260663500227645ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/CMakeLists.txt000066400000000000000000000061031523260663500255240ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) include(qt-version-macros) project(dde-calendar-service) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) # 安全编译å�‚æ•° set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") set(APP_RES_DIR "assets") set(SERVER_SERVICE_IN "${APP_RES_DIR}/data/com.deepin.dataserver.Calendar.service.in") set(APP_SERVICE_IN "${APP_RES_DIR}/data/dde-calendar.service.in") set(SERVER_SYSTEMD_SERVICE "${APP_RES_DIR}/data/com.dde.calendarserver.calendar.service") set(APP_SYSTEMD_TIMER "${APP_RES_DIR}/data/com.dde.calendarserver.calendar.timer") set(AUTOSTART_DESKTOP "${APP_RES_DIR}/dde-calendar-service.desktop") set(HUANGLIDB "${APP_RES_DIR}/data/huangli.db") set(APP_QRC "${APP_RES_DIR}/resources.qrc") # Find the library find_package(PkgConfig REQUIRED) find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core DBus Sql) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/src) # Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE CALENDARSERVICE_SRCS ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) # 添加资æº�文件 QT_ADD_RESOURCES_MACRO(CALENDARSERVICE_SRCS ${APP_QRC}) # å�Žç«¯ç¨‹åº�自动退出å®�控制 if(NOT(CMAKE_BUILD_TYPE MATCHES Debug)) add_definitions(-DCALENDAR_SERVICE_AUTO_EXIT) endif() add_executable(${PROJECT_NAME} ${CALENDARSERVICE_SRCS}) target_include_directories(${PROJECT_NAME} PUBLIC ${OBJECT_BINARY_DIR} ../calendar-common/src) target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Sql Dtk${DTK_VERSION_MAJOR}::Core commondata -lpthread ) set(SERVICE_INSTALL_DIR "${CMAKE_INSTALL_FULL_LIBEXECDIR}/deepin-daemon" CACHE STRING "Install dir for dde-calendar-service") target_compile_definitions(${PROJECT_NAME} PRIVATE CALENDAR_SERVICE_PATH="${SERVICE_INSTALL_DIR}" ) # 修改dbusæœ�务文件 set(EXEC_DDE_CALENDAR_SERVICE "${SERVICE_INSTALL_DIR}/dde-calendar-service" CACHE STRING "Command to execute dde-calendar-service") configure_file(${SERVER_SERVICE_IN} ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.dataserver.Calendar.service @ONLY) configure_file(${APP_SERVICE_IN} ${CMAKE_CURRENT_BINARY_DIR}/assets/dde-calendar.service @ONLY) # Install files install(TARGETS ${PROJECT_NAME} DESTINATION ${SERVICE_INSTALL_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dbus/com.deepin.dataserver.Calendar.service DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services/) install(FILES ${AUTOSTART_DESKTOP} DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/xdg/autostart/) install(FILES ${HUANGLIDB} DESTINATION ${CMAKE_INSTALL_DATADIR}/dde-calendar/data/) install(FILES ${SERVER_SYSTEMD_SERVICE} DESTINATION lib/systemd/user/) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/assets/dde-calendar.service DESTINATION lib/systemd/user/) install(FILES ${APP_SYSTEMD_TIMER} DESTINATION lib/systemd/user/) linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/000077500000000000000000000000001523260663500242665ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/data/000077500000000000000000000000001523260663500251775ustar00rootroot00000000000000com.dde.calendarserver.calendar.service000066400000000000000000000005461523260663500345670ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/data[Unit] Description = dde-calendar date service After=dbus.socket Requires=dbus.socket [Service] Type = simple ExecStart = /bin/bash -c "dbus-send --session --dest=com.deepin.dataserver.Calendar /com/deepin/dataserver/Calendar/AccountManager com.deepin.dataserver.Calendar.AccountManager.updateRemindJob boolean:false" [Install] WantedBy=user-session.targetcom.dde.calendarserver.calendar.timer000066400000000000000000000003531523260663500342430ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/data[Unit] Description = dde-calendar date service [Timer] Unit = com.dde.calendarserver.calendar.service OnActiveSec = 1s OnUnitInactiveSec = 10m AccuracySec = 1us RandomizedDelaySec = 0 OnBootSec = 1m [Install] WantedBy = timers.targetcom.deepin.dataserver.Calendar.service.in000077500000000000000000000001261523260663500350010ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/data[D-BUS Service] Name=com.deepin.dataserver.Calendar Exec=@EXEC_DDE_CALENDAR_SERVICE@ linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/data/dde-calendar.service.in000066400000000000000000000002151523260663500314670ustar00rootroot00000000000000[Unit] Description = dde-calendar date service [Service] ExecStart=@EXEC_DDE_CALENDAR@ Type=dbus BusName=com.deepin.Calendar Slice=app.slicelinuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/data/huangli.db000066400000000000000000063700001523260663500271430ustar00rootroot00000000000000SQLite format 3@ Ÿ.0: Ž –¤R ºh Ô  î ™  ²ŽÍ�) ''‚tablefestival_2023festival_2023žCREATE TABLE festival_2023 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT): M'indexsqlite_autoindex_festival_2023_1festival_2023Ÿ�(''‚tablefestival_2022festival_2022 CREATE TABLE festival_2022 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT)9 M'indexsqlite_autoindex_festival_2022_1festival_2022�(''‚tablefestival_2021festival_2021CREATE TABLE festival_2021 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT)9M'indexsqlite_autoindex_festival_2021_1festival_2021�+''‚tablefestival_2020festival_2020£CREATE TABLE festival_2020 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT):M'indexsqlite_autoindex_festival_2020_1festival_2020¤�+''‚tablefestival_2019festival_2019ŸCREATE TABLE festival_2019 (id TEXT NOT NULL PRIMARY KEY,month INTEGER NOT NULL,name TEXT,description TEXT, rest TEXT, list TEXT):M'indexsqlite_autoindex_festival_2019_1festival_2019¡h�'tablehuanglihuangliCREATE TABLE huangli (id INTEGER NOT NULL PRIMARY KEY, avoid TEXT, suit TEXT)�€ øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80(  ø ð è à Ø Ð È À ¸ ° ¨   ˜ � ˆ € x p h ` X P H @ 8 0 (    ø ð è à Ø Ð È À ¸ ° ¨   ˜ � ˆ € x p h ` X P H @ 8 0 (    ø ð è à Ø Ð È À ¸ ° ¨   ˜ � ˆ € x p h ` X P H @ 8 0 (    ø ð è à Ø Ð È À ¸ ° ¨   ˜ � ˆ € x p h ` X P H @ 8 0 (    ø ð è à Ø Ð È À ¸ ° ¨   ˜ � ˆ € x p h ` X P H @ 8 0 (    øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜�ˆ€xph`XPH@80( øðèàØÐÈÀ¸°¨ ˜�ˆ€ ‰Ý˜> ‰Ý—] ‰Ý–x‰Ý–‰Ý•3‰Ý”T‰Ý“m‰Ý“‰Ý’(‰Ý‘K‰Ý�a‰Ý�J‰ÜÊ9‰ÜÊ!‰ÜÈu‰ÜÈ[‰ÜÇu‰ÜÇ‰ÜÆ2‰ÜÅO‰ÜÄn ‰ÜÄ !‰ÜÃ)"‰ÜÂB#‰ÜÁb$‰Ûü%‰Ûû6&‰ÛúZ'‰Ûùq(‰Ûù)‰Ûø,*‰Û÷O+‰Ûög,‰Ûö -‰Ûõ#.‰ÛôC/‰Ûó[0‰Û®1‰Û®2‰Û­3‰Û¬A4‰Û«Z5‰Ûª{6‰Ûª7‰Û©58‰Û¨R9‰Û§o:‰Û§;‰Û¦(<‰Û¥F=‰Úßz>‰Úß?‰ÚÞ4@‰ÚÝVA‰ÚÜpB‰ÚÜC‰ÚÛ+D‰ÚÚKE‰ÚÙgF‰ÚÙG‰ÚØ H‰Ú×>I‰Ú‘}J‰Ú‘K‰Ú�}L‰Ú�OM‰Ú�7N‰ÚŽ O‰Ú�sP‰Ú� Q‰ÚŒ-R‰Ú‹FS‰ÚŠgT‰Ú‰U‰Ú‰V‰ÙÃbW‰ÙÂyX‰ÙÂY‰ÙÁ5Z‰ÙÀX[‰Ù¿p\‰Ù¿]‰Ù¾+^‰Ù½M_‰Ù¼e`‰Ù¼Ma‰Ù»b‰Ù»c‰ØõFd‰Øô_e‰Øôf‰Øóg‰Øò=h‰ØñUi‰Øðxj‰Øðk‰Øï3l‰ØîLm‰Øíln‰Øío‰Ø§Gp‰Ø¦eq‰Ø¦r‰Ø¥ s‰Ø¤<t‰Ø¤!u‰Ø¢vv‰Ø¢]w‰Ø¡wx‰Ø¡y‰Ø 1z‰ØŸS{‰Øžk|‰×Ù(}‰×ØG~‰××b‰×Ö|€‰×Ö�‰×Õ0‚‰×Ôƒ‰×Ó„‰×Ò2…‰×ÑL†‰×Ðh‡‰×‹$ˆ‰×ŠD‰‰×‰`Š‰×ˆz‹‰×ˆŒ‰×‡-�‰×†Gމׅa�‰×„y�‰×„‘‰×ƒ.’‰×‚K“‰Ö½ ”‰Ö¼-•‰Ö»J–‰Öºg—‰Öº˜‰Ö¹ ™‰Ö¸=š‰Ö·X›‰Ö¶uœ‰Ö¶�‰Öµ)ž‰Ö´E¥‰Õ黎ÕÕí3¨‰ÕìL©‰Õëfª‰Õê~«‰ÕéO¬‰Õèc­‰Õç~®‰Õç¯‰Õæ8°‰Õ x±‰Õ ²‰ÕŸ³‰ÕŸ´‰Õž;µ‰Õ�\¶‰Õœ~·‰Õœ¸‰Õ›=¹‰Õš]º‰Õ™w»‰Õ™¼‰Õ˜+½‰ÔÒl¾‰ÔÒQ¿‰ÔÑnÀ‰ÔÑ Á‰ÔÐ(‰ÔÏJÉÔÎkĉÔÎʼnÔÍ(ƉÔÌEljÔË_ȉÔÊyɉÔÊʉԄWˉԃt̉ԃ͉Ԃ.ΉÔ�LωÔ�2ЉԀQщÓÿoÒ‰ÓÿÓ‰Óþ)Ô‰ÓýHÕ‰ÓübÖ‰Óû׉Ӷ<؉ӵYÙ‰Ó´wÚ‰Ó´Û‰Ó³3܉ӲR݉ӱlÞ‰Ó± ߉Ӱ"à‰Ó¯=á‰Ó®Yâ‰Ó­vã‰Òè4ä‰ÒçLå‰Òæhæ‰Òå~ç‰Òåè‰Òä8é‰ÒãOê‰Òâië‰Òá9ì‰Òáí‰Òà9î‰ÒßVï‰Ò™Eð‰Ò˜bñ‰Ò—yò‰Ò—ó‰Ò–-ô‰Ò•Aõ‰Ò”Xö‰Ò“*÷‰Ò“ø‰Ò’+ù‰Ò‘Fú‰ÑÌ û‰ÑË(ü‰ÑÊFý‰ÑÉcþ‰ÑÉÿ‰ÑÈ ‰ÑÇ?‰ÑÆ\‰ÑÅy‰ÑʼnÑÄ.‰ÑÃJ‰Ðþ‰Ðý#‰ÐüB ‰ÐûZ ‰Ðús ‰Ðú  ‰Ðù# ‰Ðø=‰Ð÷R‰Ðöp‰Ðö ‰Ðõ)‰Ð¯f‰Ð¯‰Ð® ‰Ð­9‰Ð¬R‰Ð«"‰Ðª:‰Ð©Q‰Ð¨n‰Ð¨‰Ð§$‰Ïáb‰Ïá‰Ïà! ‰Ïß>!‰ÏÞW"‰ÏÝs#‰ÏÝ$‰ÏÜ)%‰ÏÛD&‰ÏÚa'‰ÏÙz(‰ÏÙ)‰Ï“U*‰Ï’w+‰Ï’],‰Ï‘|-‰Ï‘.‰Ï�8/‰Ï�W0‰ÏŽu1‰ÏŽ2‰Ï�.3‰ÏŒJ4‰Ï‹c5‰Ï‹6‰ÎÅD7‰ÎÄg8‰ÎÄ9‰ÎÃj:‰ÎÃ;‰ÎÂ(<‰ÎÁI=‰ÎÀj>‰ÎÀ?‰Î¿&@‰Î¾@A‰Î½ZB‰Î¼xC‰Í÷:D‰Í÷!E‰ÍöAF‰Íõ`G‰Íô{H‰ÍôI‰Íó?J‰Íò_K‰Íñ|L‰ÍñM‰Íð2N‰ÍïKO‰ÍîhP‰Í©)Q‰Í¨ER‰Í§cS‰Í¦~T‰Í¦U‰Í¦V‰Í¥"W‰Í¤@X‰Í£aY‰Í¢{Z‰Í¢[‰Í¡0\‰Í M]‰ÌÛ ^‰ÌÚ)_‰ÌÙI`‰ÌØda‰ÌØb‰Ì×%c‰ÌÖCd‰ÌÕae‰ÌÔ~f‰ÌÔg‰ÌÓ4h‰ÌÒPi‰Ì� j‰ÌŒ&k‰Ì‹Bl‰ÌŠ[m‰Ì‰xn‰Ì‰o‰Ìˆ.p‰Ì‡Jq‰Ì†`r‰Ì…{s‰Ì…t‰Ì„4u‰Ë¾ov‰Ë¾w‰Ë½x‰Ë¼9y‰Ë»Tz‰Ëºn{‰Ë¹A|‰Ë¸W}‰Ë·r~‰Ë·‰Ë¶*€‰Êðc�‰Êï{‚‰ÊÊî-„‰ÊíF…‰Ê솉Êë-‡‰Êê?ˆ‰Êé]‰‰ÊèwЉÊ苉ʢLŒ‰Ê¡j�‰Ê¡Ž‰Ê �‰ÊŸ6�‰ÊžN‘‰Ê�!’‰Êœ5“‰Ê›R”‰Êšm•‰Êš –‰ÉÔD—‰ÉÓb˜‰ÉÒ}™‰ÉÒš‰ÉÑ1›‰ÉÐJœ‰ÉÏc�‰ÉÎz‰ÉÍJ‰ÉÌe‰ÉÌ è¾oìD   õ µ " ¸ 8 O ² ecŽÚ<1Ô”-f5mí“è�%‰ÉÌE‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰ÉÌEwå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰ÉÌE�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰ÉËE‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰ÉË~'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰ÉË}E‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰ÉË|E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰ÉË{)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰ÉËzE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰ÉËyS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰ÉËx7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰ÉËwE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰ÉËv)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰ÉËua�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰ÉËtE‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰ÉËsoƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰ÉËr7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰ÉËqS�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰ÉËpa‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰ÉËoE�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰ÉËna{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰ÉËmS�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰ÉËl7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰ÉËk}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰ÉËjE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.�"‰ÉËi)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÉËh'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÉËg)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÉËf)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÉËeQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–. g[áC ¢ S ä € ý ‘ Q â D ë 1xÿθéD †Ì„§Lg�%‰ÉÍJE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰ÉÍIE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰ÉÍHE‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰ÉÍGS�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰ÉÍF)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰ÉÍESEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰ÉÍDE‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰ÉÍC)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰ÉÍB')诸事ä¸�宜.破屋.å��垣.�‰ÉÍAE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰ÉÍ@ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰ÉÍ?So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰ÉÍ>E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰ÉÍ='C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰ÉÍ<a�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰ÉÍ;S‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰ÉÍ:S‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰ÉÍ9Eu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰ÉÍ8E�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰ÉÍ7S�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰ÉÍ6ECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰ÉÍ5S� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰ÉÍ4=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰ÉÍ3E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰ÉÍ27�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰ÉÍ1Eaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.�‰ÉÍ0)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰ÉÍ/o�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰ÉÍ.� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰ÉÍ-E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩. ˜òãÔŶ§˜!2022100110!2022091009!2022060306!2022050105!2022040504!2022020102 ! 2022010101 Æ èn Ð h ò   – 5 ï $ Ž *~0„¹0нw”Ì¨çŠÆ�>‰ÉÌeE‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰ÉÌdE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰ÉÌc)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰ÉÌb')诸事ä¸�宜.求医.破屋.�B‰ÉÌaE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰ÉÌ`Eƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰ÉÌ__5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÉÌ^E}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰ÉÌ]‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÉÌ\Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÉÌ[E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÉÌZE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÉÌYS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰ÉÌX'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÉÌWE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰ÉÌV7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰ÉÌUS�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰ÉÌTo‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰ÉÌSEOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰ÉÌRE�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰ÉÌQS�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰ÉÌPS�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰ÉÌOS�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰ÉÌNS�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰ÉÌME�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰ÉÌLSEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.Q‰ÉÌK)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰ÉÌJ)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰ÉÌI'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰ÉÌE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门. + 8 [6 + ÞS„ !�W�U„O2021100110 国庆节10月1日至7日放å�‡è°ƒä¼‘,共7天。9月26日(星期日)ã€�10月9日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š10月8ã€�9日请å�‡ï¼Œå�³å�¯ä¸Ž10月10日一天的周末相连,形æˆ�10天长å�‡ã€‚[{"date":"2021-9-26","status":2},{"date":"2021-10-1","status":1},{"date":"2021-10-2","status":1},{"date":"2021-10-3","status":1},{"date":"2021-10-4","status":1},{"date":"2021-10-5","status":1},{"date":"2021-10-6","status":1},{"date":"2021-10-7","status":1},{"date":"2021-10-9","status":2}]�` !U� �O2021061206端å�ˆèŠ‚6月12日至14日放å�‡ï¼Œå…±3天。拼å�‡å»ºè®®ï¼šè¯·4天å�‡ï¼ˆ6月15-18日),å�¯è¿žä¼‘9天。[{"date":"2021-6-12","status":1},{"date":"2021-6-13","status":1},{"date":"2021-6-14","status":1}] Þ„ !�o�e„M2021021202春节2月11日(除夕)至17日放å�‡è°ƒä¼‘,共7天。2月7日(星期日)ã€�2月20日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š2月18ã€�19ã€�20日请å�‡ï¼Œå�³å�¯ä¸Ž2月21日一天的周末相连,形æˆ�11天奢å�Žé•¿å�‡[{"date":"2021-2-7","status":2},{"date":"2021-2-11","status":1},{"date":"2021-2-12","status":1},{"date":"2021-2-13","status":1},{"date":"2021-2-14","status":1},{"date":"2021-2-15","status":1},{"date":"2021-2-16","status":1},{"date":"2021-2-17","status":1},{"date":"2021-2-20","status":2}]�#!=�/O2021021102除夕2月11日放å�‡ä¸€å¤©ã€‚农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2021-2-11","status":1}] ì+�` ! _� �I2021010101元旦2021å¹´1月1日至3日放å�‡ï¼Œå…±3天。拼å�‡å»ºè®®ï¼šï¼ˆ12月30-31æ—¥/1月4-5日)请å�‡ï¼Œè¿žä¼‘5天[{"date":"2021-1-1","status":1},{"date":"2021-1-2","status":1},{"date":"2021-1-3","status":1}]‚W !�#�g‚2021091909 中秋节9月19日至21日放å�‡è°ƒä¼‘,共3天。9月18日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š9月22ã€�23ã€�24日请å�‡ï¼Œå�³å�¯ä¸Ž9月25ã€�26日两天的周末相连,形æˆ�8天长å�‡ã€‚[{"date":"2021-9-18","status":2},{"date":"2021-9-19","status":1},{"date":"2021-9-20","status":1},{"date":"2021-9-21","status":1}]ƒ@ !�S�UƒC2021050105劳动节5月1日至5日放å�‡è°ƒä¼‘,共5天。4月25日(星期日)ã€�5月8日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š5月6ã€�7ã€�8日请å�‡ï¼Œå�³å�¯ä¸Ž5月9日一天的周末相连,形æˆ�8天长å�‡ã€‚[{"date":"2021-4-25","status":2},{"date":"2021-5-1","status":1},{"date":"2021-5-2","status":1},{"date":"2021-5-3","status":1},{"date":"2021-5-4","status":1},{"date":"2021-5-5","status":1},{"date":"2021-5-8","status":2}]�_ !]��I2021040304清明节4月3日至5日放å�‡è°ƒä¼‘,共3天。拼å�‡å»ºè®®ï¼šè¯·4天å�‡ï¼ˆ4月6-9日),å�¯è¿žä¼‘9天。[{"date":"2021-4-3","status":1},{"date":"2021-4-4","status":1},{"date":"2021-4-5","status":1}] ˜zò‰áÒô¥z!2021100110!2021021102 !2021091909!2021061206!2021050105!2021040304!2021021202 ! 2021010101  ˆQ µ º > ¿ ‚=! „O2022100110 国庆节[{"date":"2022-10-1","status":1},{"date":"2022-10-2","status":1},{"date":"2022-10-3","status":1},{"date":"2022-10-4","status":1},{"date":"2022-10-5","status":1},{"date":"2022-10-6","status":1},{"date":"2022-10-7","status":1},{"date":"2022-10-8","status":2},{"date":"2022-10-9","status":2}]}! �O2022091009 中秋节[{"date":"2022-9-10","status":1},{"date":"2022-9-11","status":1},{"date":"2022-9-12","status":1}]z! �I2022060306端å�ˆèŠ‚[{"date":"2022-6-3","status":1},{"date":"2022-6-4","status":1},{"date":"2022-6-5","status":1}]�x! ƒE2022050105劳动节[{"date":"2022-4-24","status":2},{"date":"2022-4-30","status":1},{"date":"2022-5-1","status":1},{"date":"2022-5-2","status":1},{"date":"2022-5-3","status":1},{"date":"2022-5-4","status":1},{"date":"2022-5-7","status":2}]�! ‚2022040504清明节[{"date":"2022-4-2","status":2},{"date":"2022-4-3","status":1},{"date":"2022-4-4","status":1},{"date":"2022-4-5","status":1}]‚4! „C2022020102春节[{"date":"2022-1-29","status":2},{"date":"2022-1-30","status":2},{"date":"2022-1-31","status":1},{"date":"2022-2-1","status":1},{"date":"2022-2-2","status":1},{"date":"2022-2-3","status":1},{"date":"2022-2-4","status":1},{"date":"2022-2-5","status":1},{"date":"2022-2-6","status":1}]v!  �I2022010101元旦[{"date":"2022-1-1","status":1},{"date":"2022-1-2","status":1},{"date":"2022-1-3","status":1}] šR ö m g [ š B qˆ3ªæ§šu‰Ý˜O �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý˜NS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý˜M'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý˜LE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý˜KE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý˜JaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ý˜ISƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ý˜HS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ý˜GaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ý˜Fa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ý˜EE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ý˜DE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ý˜CSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ý˜Ba�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ý˜Aa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ý˜@S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ý˜?oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�. mb¼… ü Ë Œ  Ò < š  € §°NkÏ–Ù;�¡ò„ªÏm]‰Ý˜>Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ý˜=o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ý˜<K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ý˜;�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ý˜:� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ý˜9�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ý˜8��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ý˜7o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ý˜6S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ý˜5)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ý˜4K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ý˜3Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ý˜2Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ý˜1aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ý—jS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ý—iS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ý—ha�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ý—g��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ý—f��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ý—e'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ý—dE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ý—c'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ý—b'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ý—aa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ý—`'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ý—_��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ý—^a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�. ÄJîe _  S ’ : i € +¢ÞŸ ’QȆ7ä´ µ}ß®<“Ä;‰Ý—]'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ý—\a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ý—[��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ý—Z�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ý—Y'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ý—Xa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ý—W'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ý—V)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ý—U)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ý—T'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ý—S)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ý—R)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ý—QQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ý—P)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ý—O)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ý—N)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ý—M �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý—S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý—'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý—E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý—E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý—aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ý—Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ý—S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ý—aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ý–a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ý–~E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ý–}E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ý–|Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ý–{a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ý–za_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ý–yS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅. ðwF~M ·   û " + ÉæJT¶mÿ%Jèð�r‰Ý–xoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ý–wSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ý–vo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ý–uK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ý–t�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ý–s� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ý–r�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ý–q��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ý–po�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ý–oS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ý–n)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ý–mK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ý–lEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ý–kSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ý–jaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ý–iS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ý–"S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ý–!a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ý– ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ý–��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ý–'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ý–E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ý–'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ý–'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ý–a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜. ![wq e ¤ L { ’ = ´ð±¤cÚ˜IöÆÇ�ñÀN¥Ö8’[2‰Ý–'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ý–��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ý–a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ý–'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ý–a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ý–��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ý–�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ý–'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ý–a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ý–'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ý–)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ý–)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ý– 'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ý– )�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ý– )}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ý– Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ý– )S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ý–)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ý–)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ý– �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý–S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý•?'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý•>E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý•=E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý•<aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ý•;Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ý•:S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ý•9aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ý•8a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ý•7E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ý•6E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ý•5Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ý•4a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水. gÏ�Ö@ ž  „ « ´ R oÓšÝ?¡¥öˆ®ÓqyÃgW‰Ý•3a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ý•2S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ý•1oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ý•0Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ý•/o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ý•.K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ý•-�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ý•,� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ý•+�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ý•*��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ý•)o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ý•(S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ý•')Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ý•&K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ý•%Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ý•$Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ý•#aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ý•"S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ý•!S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ý”[a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ý”Z��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ý”Y��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ý”X'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ý”WE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ý”V'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ý”U'C诸事ä¸�宜.祭祀.解除.余事勿å�–. ![ú� î - Õ   Æ = y :§-ì�c!ÒO§PzI×.Ÿ_Áä[�‰Ý”Ta�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ý”S'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ý”R��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ý”Qa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ý”P'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ý”Oa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ý”N��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ý”M�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ý”L'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ý”Ka�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ý”J'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ý”I)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ý”H)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ý”G'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ý”F)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ý”E)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ý”DQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ý”C)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ý”B)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ý”A)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ý”@ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý”?S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý”>'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý”=E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý“vE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý“uaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ý“tSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ý“sS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ý“raW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ý“qa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ý“pE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ý“oE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ý“nSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑. jÈ2 ® Õ Þ | ™ ý Ä iËÏ ²Øý›£í‘�‰Ý“ma�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ý“la_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ý“kS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ý“joƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ý“iSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ý“ho‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ý“gK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ý“f�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ý“e� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ý“d�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ý“c��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ý“bo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ý“aS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ý“`)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ý“_K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ý“^Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ý“]Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ý“\aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ý“[S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ý“ZS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ý“Ya�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ý“��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ý“��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马. #”Q�8 g ~ )   Ü � � O Æ„5â² ³{ݬ:‘Â$~G¾�NÅ”,‰Ý“'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ý“E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ý“'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ý“'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ý“ a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ý“ 'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ý“ ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ý“ a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ý“ 'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ý“a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ý“��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ý“�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ý“'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ý“a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ý“'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ý“)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ý“)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ý“'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ý’)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ý’~)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ý’}Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ý’|)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ý’{)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ý’z)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ý’y �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý’xS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý’w'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý’vE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý’uE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý’.aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ý’-Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ý’,S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ý’+aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ý’*a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ý’)E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�. ;^ÈD k t  / “ Z �ÿae¶Hn“19ƒ'ž˜;X‰Ý’(E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ý’'Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ý’&a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ý’%a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ý’$S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ý’#oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ý’"Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ý’!o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ý’ K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ý’�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ý’� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ý’�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ý’��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ý’o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ý’S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ý’)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ý’K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ý’Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ý’Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ý’aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ý’S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ý’S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ý’a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ý’��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土. #­?ç - Ø O ‹ L ¹ ? þ ¯ u 3ä‘a¹b*Œ[é@±qÓ-öm<ýtC­�‰Ý‘K��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ý‘J'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ý‘IE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ý‘H'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ý‘G'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ý‘Fa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ý‘E'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ý‘D��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ý‘Ca�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ý‘B'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ý‘Aa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ý‘@��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ý‘?�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ý‘>'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ý‘=a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ý‘<'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ý‘;)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ý‘:)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ý‘9'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ý‘8)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ý‘7)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ý‘6Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ý‘5)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ý‘4)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ý‘3)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ý‘2 �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý‘1S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý‘0'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý‘/E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý‘.E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý‘-aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ý�eSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ý�dS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ý�caW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ý�ba‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴. Ä|£ ¬ J g Ë ’ Õ 7 ™�Ëiq»_ÖÐsÄ�)‰Ý�aE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ý�`E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ý�_Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ý�^a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ý�]a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ý�\S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ý�[oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ý�ZSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ý�Yo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ý�XK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ý�W�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ý�V� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ý�U�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ý�T��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ý�So�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ý�RS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ý�Q)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ý�PK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ý�OEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ý�NSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ý�Maƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ý�LS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ý�KS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ. 's†Eö¼z+ Ö M ‰ J · = ü ­ s 1 â � _·`(ŠYç>¯oÑ+ôk:ûrA« s�‰Ý�Ja�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ý�I��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ý���ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ý�'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ý�E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ý�'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ý�'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ý�~a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ý�}'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ý�|��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ý�{a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ý�z'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ý�ya�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ý�x��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ý�w�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ý�v'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ý�ua�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ý�t'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ý�s)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ý�r)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ý�q'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ý�p)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ý�o)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ý�nQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ý�m)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ý�l)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ý�k)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ý�j �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ý�iS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ý�h'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ý�gE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ý�fE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ý�eaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.J‰ÜÊ?)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÜÊ>Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÜÊ=)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÜÊ<)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÜÊ;)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÜÊ: �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土. ¨bÄ È  « Ñ ö ” œæŠûžï.ÖÇ>z;¨� ‰ÜÊ9S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÜÊ8'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÜÊ7E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÜÊ6E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÜÊ5aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÜÊ4Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÜÊ3S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÜÊ2aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÜÊ1a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÜÊ0E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÜÊ/E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÜÊ.Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÜÊ-a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÜÊ,a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÜÊ+S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÜÊ*oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÜÊ)Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÜÊ(o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÜÊ'K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÜÊ&�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÜÊ%� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÜÊ$�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÜÊ#��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÜÊ"o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑. !›Æ„5â² ³ { Ý ¬ : ‘   $ ~ G¾�NÅ”þ\ÆBir-‘X›�7‰ÜÊ!S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÜÉZ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÜÉYK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÜÉXEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÜÉWSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÜÉVaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÜÉUS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÜÉTS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÜÉSa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÜÉR��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÜÉQ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÜÉP'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÜÉOE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÜÉN'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÜÉM'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÜÉLa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÜÉK'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÜÉJ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÜÉIa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÜÉH'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÜÉGa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÜÉF��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÜÉE�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÜÉD'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÜÉCa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÜÉB'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÜÉA)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÜÉ@)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÜÉ?'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÜÉ>)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÜÉ=)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÜÈwQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÜÈv)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴. <bf · I o ” 2 : „ (Ÿ™<�Ìt£ºeÜÙFÌ‹‰ÜÈpE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÜÈoE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÜÈnaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÜÈmSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÜÈlS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÜÈkaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÜÈja‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÜÈiE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÜÈhE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÜÈgSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÜÈfa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÜÈea_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÜÈdS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÜÈcoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÜÈbSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÜÈao‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÜÈ`K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÜÈ_�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÜÈ^� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÜÈ]�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÜÈ\��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网. y±^.†/ ÷ Y ( ¶ ~ >   ú à : ÊAzØB¾å Ôy�‰ÜÈ[o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÜÈZS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÜÈY)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÜÈK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÜÈEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÜÈSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÜÈaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÜÈS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÜÈ S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÜÈ a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÜÈ ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÜÈ ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÜÈ 'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÜÈE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÜÈ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÜÈ'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÜÈa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÜÈ'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÜÈ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÜÈa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÜÈ'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÜÈa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÜÇ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÜÇ~�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÜÇ}'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÜÇ|a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÜÇ{'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÜÇz)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÜÇy)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÜÇx'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÜÇw)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÜÇv)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜. ^U ç 2 Ð Ø " Æ =7Ú+jAXz¶wäj)Ú ^=‰ÜÇuQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÜÇ/)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÜÇ.)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÜÇ-)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÜÇ, �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÜÇ+S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÜÇ*'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÜÇ)E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÜÇ(E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÜÇ'aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÜÇ&Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÜÇ%S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÜÇ$aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÜÇ#a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÜÇ"E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÜÇ!E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÜÇ Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÜÇa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÜÇa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÜÇS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÜÇoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÜÇSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÜÇo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÜÇK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÜÇ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÜÇ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÜÇ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑. ­XÉ+ ú ˆ ß P  r Ì • Û œ âLª�·À^{ߦéK­�‰ÜÇ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÜÇo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÜÇS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÜÇ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÜÇK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÜÆKEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÜÆJSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÜÆIaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÜÆHS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÜÆGS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÜÆFa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÜÆE��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÜÆD��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÜÆC'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÜÆBE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÜÆA'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÜÆ@'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÜÆ?a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÜÆ>'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÜÆ=��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÜÆ<a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÜÆ;'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÜÆ:a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÜÆ9��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÜÆ8�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÜÆ7'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÜÆ6a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÜÆ5'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÜÆ4)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÜÆ3)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬. ˆQã . Ì Ô   9 3Ö'f=Tÿv²sàf%ÖœZ ¸ˆ+‰ÜÆ2'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÜÆ1)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÜÆ0)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÜÆ/Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÜÆ.)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÜÆ-)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÜÅf)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÜÅe �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÜÅdS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÜÅc'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÜÅbE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÜÅaE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÜÅ`aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÜÅ_Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÜÅ^S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÜÅ]aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÜÅ\a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÜÅ[E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÜÅZE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÜÅYSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÜÅXa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÜÅWa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÜÅVS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÜÅUoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÜÅTSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÜÅSo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÜÅRK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÜÅQ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÜÅP� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖. èb1¿ ‡ G ©  Ì C  Ó J  ƒáKÇî÷•²Ý ‚äè�v‰ÜÅO�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÜÅN��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÜÅMo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÜÅLS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÜÅK)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÜÅJK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÜÅIEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÜÅSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÜÅaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÜÅS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÜÅS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÜÄa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÜÄ~��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÜÄ}��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÜÄ|'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÜÄ{E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÜÄz'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÜÄy'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÜÄxa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÜÄw'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÜÄv��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÜÄua�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÜÄt'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÜÄsa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÜÄr��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÜÄq�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÜÄp'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÜÄoa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池. n&K é ñ ; ß V P ó Dƒ+Zq“Ï�ýƒBó¹w(Õ¥ý¦n3‰ÜÄn'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÜÄm)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÜÄl)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÜÄk'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÜÄj)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÜÄi)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÜÄhQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÜÄg)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÜÄf)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÜÄe)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÜÄ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÜÄS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÜÄ'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÜÄE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÜÄE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÜÄaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÜÄSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÜÄS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÜÄaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÜÄa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÜÄE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÜÄE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÜÄSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÜÄa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÜÄa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÜÄS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÜÄoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÜÄ Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÜÄ o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÜÄ K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖. šŽåV x Ò ›  á ¢  è R ° –½Æd�å¬ïQ³·ši‰ÜÄ �';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÜÄ � �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÜÄ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÜÄ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÜÄo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÜÄS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÜÄ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÜÄK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÜÄEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÜÄSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÜÃ;aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÜÃ:S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÜÃ9S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÜÃ8a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÜÃ7��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÜÃ6��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÜÃ5'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÜÃ4E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÜÃ3'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÜÃ2'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÜÃ1a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÜÃ0'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÜÃ/��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÜÃ.a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÜÃ-'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÜÃ,a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÜÃ+��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÜÃ*�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�. y%Ã Ë  ¹ 0 * Í  ] 4Köm©j×]Í“Q¯×€Hªy,‰ÜÃ)'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÜÃ(a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÜÃ''Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÜÃ&)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÜÃ%)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÜÃ$'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÜÃ#)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÜÃ")}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÜÃ!Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Üà )S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÜÃ)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÜÃ)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Üà �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÜÂTS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÜÂS'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÜÂRE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÜÂQE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÜÂPaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÜÂOSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÜÂNS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÜÂMaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÜÂLa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÜÂKE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÜÂJE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÜÂISƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÜÂHa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÜÂGa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÜÂFS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÜÂEoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÜÂDSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÜÂCo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬. Ûq1“ í ¶ - ü ½ 4  m Ë 5 ±ØáœÇ lÎÒ#µÛ�T‰ÜÂBK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÜÂA�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÜÂ@� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÜÂ?�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÜÂ>��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÜÂ=o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÜÂ<S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÜÂ;)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÜÂ:K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÜÂ9Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÜÁsSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÜÁraƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÜÁqS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÜÁpS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÜÁoa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÜÁn��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÜÁm��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÜÁl'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÜÁkE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÜÁj'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÜÁi'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÜÁha�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÜÁg'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÜÁf��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÜÁea�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÜÁd'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÜÁca�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�. tÏ�Ö@ ž  „ « ´ R oÓšÝ?¡¥2ã©gÅ•í–^À�t�#‰ÜÁb��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÜÁa�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÜÁ`'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÜÁ_a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÜÁ^'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÜÁ])� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÜÁ\)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÜÁ['A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÜÁZ)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÜÁY)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÜÁXQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÜÁW)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÜÁV)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.n‰ÜÁUS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�v‰Ûü/�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ûü.��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ûü-o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ûü,S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ûü+)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ûü*K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ûü)Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ûü(Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ûü'aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ûü&S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ûü%S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ûü$a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ûü#��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ûü"��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ûü!'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ûü E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ûü'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ûü'C诸事ä¸�宜.祭祀.解除.余事勿å�–. ![ú� î - Õ   Æ = y :§-ì�c!ÒO§PzI×.Ÿ_Áä[�‰Ûüa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ûü'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ûü��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ûüa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ûü'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ûüa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ûü��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ûü�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ûü'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ûüa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ûü'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ûü)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ûü)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÛûJ'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÛûI)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÛûH)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÛûGQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÛûF)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÛûE)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÛûD)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÛûC �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÛûBS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÛûA'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ûû@E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ûû?E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ûû>aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ûû=Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ûû<S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ûû;aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ûû:a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ûû9E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ûû8E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ûû7Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑. jÈ2 ® Õ Þ | ™ ý Ä iËÏ ²Øý›£í‘�‰Ûû6a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ûû5a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ûû4S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ûû3oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ûû2Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ûû1o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ûû0K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ûû/�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ûû.� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ûû-�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ûúg��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ûúfo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛúeS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ûúd)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÛúcK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÛúbEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÛúaSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ûú`aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ûú_S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ûú^S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ûú]a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ûú\��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ûú[��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马. #”Q�8 g ~ )   Ü � � O Æ„5â² ³{ݬ:‘Â$~G¾�NÅ”,‰ÛúZ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÛúYE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÛúX'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÛúW'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÛúVa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÛúU'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÛúT��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÛúSa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÛúR'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÛúQa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÛúP��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÛúO�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÛúN'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÛúMa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÛúL'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÛúK)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÛúJ)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÛúI'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ûú)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ûú)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÛúQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ûù)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ûù~)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ûù})a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ûù| �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ûù{S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ûùz'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÛùyE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÛùxE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÛùwaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÛùvSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÛùuS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÛùtaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ûùsa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÛùrE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�. ;^ÈD k t  / “ Z �ÿae¶Hn“19ƒ'ž˜;X‰ÛùqE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÛùpSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ûùoa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ûùna_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÛùmS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ûùloƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÛùkSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ûùjo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÛùiK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ûùh�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ûùg� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ûùf�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ûùe��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ûùo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛùS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ûù)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÛùK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÛùEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÛùSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ûùaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÛùS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÛùS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ûùa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ûù��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土. #­?ç - Ø O ‹ L ¹ ? þ ¯ u 3ä‘a¹b*Œ[é@±qÓ-öm<ýtC­�‰Ûù��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ûù'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÛùE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ûù'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ûù'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ûùa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ûù'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ûù ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ûù a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ûù 'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ûù a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ûù ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ûù�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ûù'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ûùa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ûù'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ûù)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ûù)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ûù'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ûù)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ûø;)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ûø:Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ûø9)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ûø8)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ûø7)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ûø6 �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ûø5S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ûø4'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ûø3E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ûø2E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ûø1aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ûø0Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ûø/S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ûø.aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ûø-a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴. Ä|£ ¬ J g Ë ’ Õ 7 ™�Ëiq»_ÖÐsÄ�)‰Ûø,E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ûø+E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ûø*Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ûø)a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ûø(a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ûø'S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ûø&oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ûø%Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ûø$o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ûø#K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ûø"�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ûø!� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ûø �‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ûø��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ûøo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛøS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Û÷V)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Û÷UK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Û÷TEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Û÷SSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Û÷Raƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Û÷QS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Û÷PS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ. #Ž/F ñ h ¤ e Ò X  È Ž L ý ª zÒ{C¥tYÊŠìF†U�\Æ$Ž�‰Û÷Oa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Û÷N��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Û÷M��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Û÷L'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Û÷KE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Û÷J'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Û÷I'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Û÷Ha�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Û÷G'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Û÷F��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Û÷Ea�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Û÷D'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Û÷Ca�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Û÷B��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Û÷A�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Û÷@'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Û÷?a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Û÷>'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Û÷=)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Û÷<)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Û÷;'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Û÷:)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Û÷9)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÛösQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ûör)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ûöq)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ûöp)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ûöo �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÛönS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ûöm'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÛölE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÛökE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÛöjaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÛöiSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÛöhS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.  § Ä ( ï 2 ” ö ú KÝ(ÆÎ¼3-Ð!`S‰ÛögaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ûöfa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÛöeE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÛödE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÛöcSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ûöba�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ûöaa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ûö`S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ûö_oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ûö^Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ûö]o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ûö\K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ûö[�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÛöZ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÛöY�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÛöX��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÛöWo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛöVS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÛöU)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÛöK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ûö Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ûö Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ûö aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓. "@w³t á g & × � [ ¹ ‰ á Š R ´ ƒ hÙ™ûU•d%œkÕ3�@�S‰Ûö S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ûö S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ûöa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ûö��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ûö��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ûö'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÛöE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ûö'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ûö'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ûöa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ûö'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ûõ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ûõ~a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ûõ}'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ûõ|a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ûõ{��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ûõz�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ûõy'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ûõxa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ûõw'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ûõv)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ûõu)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ûõt'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ûõs)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ûõr)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÛõqQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ûõ+)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ûõ*)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ûõ))a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ûõ( �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ûõ'S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ûõ&'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ûõ%E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ûõ$E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»». R�H ‹ í O S ¤ 6 \�'qŒ†)z¹a�§RP‰Ûõ#aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ûõ"Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ûõ!S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ûõ aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ûõa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÛõE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÛõE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÛõSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ûõa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ûõa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÛõS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ûõoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÛõSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ûõo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÛõK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ûõ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ûõ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ûõ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ûõ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ûõo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛõS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ûõ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ûõ K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÛôDEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓. #p<ýj ð ¯ ` & ä • B  j  Û = šñb"„Þ§í®%ô^¼&¢ÉÒp]‰ÛôCSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÛôBaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÛôAS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ûô@S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ûô?a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ûô>��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ûô=��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ûô<'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ûô;E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ûô:'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ûô9'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ûô8a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ûô7'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ûô6��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ûô5a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ûô4'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ûô3a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ûô2��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ûô1�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ûô0'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ûô/a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ûô.'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ûô-)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ûô,)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ûô+'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ûô*)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ûô))}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÛócQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ûób)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ûóa)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ûó`)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ûó_ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ûó^S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ûó]'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ûó\E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水. ¡ c Å ' + |  4 Y÷ÿIíd^R‘9h*¡�‰Ûó[E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÛóZaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÛóYSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÛóXS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÛóWaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÛóVa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÛóUE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÛóTE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÛóSSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÛóRa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÛóQa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÛóPS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÛóOoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÛóNSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÛóMo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÛóLK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÛóK�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÛóJ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÛóI�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÛóH��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÛóGo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛóFS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.�Z‰ÛóEE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门. ~C¥ \ î  9 ×ß)ÍD>á2qH_ �½~:‰Û®'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Û®E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Û®E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Û®aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Û®Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Û®S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Û®aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Û®a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Û®E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Û®E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Û®Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Û®a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Û®a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Û®S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Û®oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Û®Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Û®o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Û®K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Û® �';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Û® � �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Û® �‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Û® ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Û® o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Û®S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑. #N†Eö¼z+ Ø ¨ © q Ó ¢ 0 ‡ ø ¸ t=´ƒD»ŠôR¼8_h#‡N4‰Û®)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Û®K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Û®Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Û®Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Û®aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Û®S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Û®S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Û­:a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Û­9��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Û­8��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Û­7'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Û­6E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Û­5'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Û­4'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Û­3a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Û­2'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Û­1��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Û­0a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Û­/'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Û­.a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Û­-��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Û­,�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Û­+'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Û­*a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Û­)'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Û­()� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Û­')‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Û­&'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Û­%)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Û­$)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Û­#Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Û­")S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Û­!)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Û­ )a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Û­ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土. ¨bÄ È  « Ñ ö ” œæŠûžï.ÖÇ>z;¨� ‰Û­S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Û­'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Û¬WE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Û¬VE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Û¬UaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Û¬TSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Û¬SS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Û¬RaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Û¬Qa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Û¬PE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Û¬OE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Û¬NSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Û¬Ma�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Û¬La_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Û¬KS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Û¬Joƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Û¬ISy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Û¬Ho‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Û¬GK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Û¬F�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Û¬E� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Û¬D�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Û¬C��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Û¬Bo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑. !›Æ„5â² ³ { Ý ¬ : ‘   $ ~ G¾�NÅ”þ\ÆBir-‘X›�7‰Û¬AS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Û¬@)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Û¬?K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Û¬>Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Û¬=Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Û¬<aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Û¬;S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Û¬:S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Û¬9a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Û«r��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Û«q��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Û«p'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Û«oE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Û«n'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Û«m'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Û«la�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Û«k'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Û«j��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Û«ia�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Û«h'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Û«ga�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Û«f��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Û«e�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Û«d'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Û«ca�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Û«b'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Û«a)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Û«`)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Û«_'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Û«^)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Û«])}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Û«\Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Û«[)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴. <bf · I o ” 2 : „ (Ÿ™<�Ìt£ºeÜÙFÌ‹‰Û«UE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Û«E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Û«aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Û« Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Û« S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Û« aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Û« a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Û« E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Û«E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Û«Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Û«a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Û«a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Û«S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Û«oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Û«Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Û«o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Û«K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ûª�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ûª~� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ûª}�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ûª|��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网. y±^.†/ ÷ Y ( ¶ ~ >   ú à : ÊAzØB¾å Ôy�‰Ûª{o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÛªzS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ûªy)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÛªxK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÛªwEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÛªvSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ûªuaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÛªtS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÛªsS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ûªra�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ûªq��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ûª+��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ûª*'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ûª)E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ûª('_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ûª''C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ûª&a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ûª%'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ûª$��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ûª#a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ûª"'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ûª!a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ûª ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ûª�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ûª'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ûªa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ûª'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ûª)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ûª)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ûª'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ûª)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ûª)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜. ^U ç 2 Ð Ø " Æ =7Ú+jAXz¶wäj)Ú ^=‰ÛªQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ûª)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ûª)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ûª)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ûª �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÛªS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ûª'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÛªE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÛªE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ûª aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Û©FSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Û©ES‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Û©DaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Û©Ca‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Û©BE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Û©AE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Û©@Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Û©?a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Û©>a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Û©=S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Û©<oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Û©;Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Û©:o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Û©9K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Û©8�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Û©7� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Û©6�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑. ­XÉ+ ú ˆ ß P  r Ì • Û œ âLª�·À^{ߦéK­�‰Û©5��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Û©4o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Û©3S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Û©2)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Û©1K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Û©0Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Û©/Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Û©.aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Û©-S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Û©,S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Û©+a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Û©*��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Û©)��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Û¨c'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Û¨bE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Û¨a'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Û¨`'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Û¨_a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Û¨^'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Û¨]��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Û¨\a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Û¨['a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Û¨Za�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Û¨Y��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Û¨X�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Û¨W'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Û¨Va�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Û¨U'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Û¨T)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Û¨S)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬. ˆQã . Ì Ô   9 3Ö'f=Tÿv²sàf%ÖœZ ¸ˆ+‰Û¨R'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Û¨Q)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Û¨P)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Û¨OQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Û¨N)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Û¨M)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Û¨L)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Û¨K �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Û¨JS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Û¨I'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Û¨HE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Û¨GE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Û¨FaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Û¨ESƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Û§~S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Û§}aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Û§|a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Û§{E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Û§zE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Û§ySƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Û§xa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Û§wa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Û§vS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Û§uoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Û§tSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Û§so‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Û§rK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Û§q�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Û§p� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖. èb1¿ ‡ G ©  Ì C  Ó J  ƒáKÇî÷•²Ý ‚äè�v‰Û§o�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Û§n��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Û§mo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Û§lS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Û§k)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Û§jK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Û§iEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Û§hSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Û§gaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Û§fS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Û§eS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Û§da�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Û§c��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Û§b��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Û§a'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Û§E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Û§'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Û§'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Û§a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Û§'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Û§��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Û§a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Û§'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Û§a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Û§��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Û§�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Û§'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Û§a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池. n&K é ñ ; ß V P ó Dƒ+Zq“Ï�ýƒBó¹w(Õ¥ý¦n3‰Û§'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Û§ )� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Û§ )‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Û§ 'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Û§ )�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Û§ )}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Û§Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Û§)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Û§)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Û§)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Û§ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Û§S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Û§'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Û§E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Û§E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Û¦aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Û¦~Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Û¦}S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Û¦4aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Û¦3a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Û¦2E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Û¦1E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Û¦0Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Û¦/a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Û¦.a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Û¦-S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Û¦,oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Û¦+Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Û¦*o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Û¦)K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖. iÏ]´% å G ¡ j á ° q è · ! éeŒ•3P´{¾ ‚†×ii‰Û¦(�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Û¦'� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Û¦&�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Û¦%��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Û¦$o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Û¦#S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Û¦")Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Û¦!K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Û¦ Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Û¦Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Û¦aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Û¦S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Û¦S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Û¦a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Û¦��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Û¦��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Û¥S'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Û¥RE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Û¥Q'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Û¥P'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Û¥Oa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Û¥N'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Û¥M��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Û¥La�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Û¥K'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Û¥Ja�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Û¥I��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Û¥H�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Û¥G'C诸事ä¸�宜.解除.å��垣.余事勿å�–. ']mó²c) ç ˜ E  m  Þ @  � ô e %‡áªþ© \ŠÏ€Fµb2Š3û]�‰Û¥Fa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Û¥E'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Û¥D)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Û¥C)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Û¥B'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Û¥A)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Û¥@)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Û¥?Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Û¥>)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Û¥=)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Û¥<)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Û¥; �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Û¥:S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Û¥9'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Û¥8E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Û¥7E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Û¥6aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�&‰Û¥5E‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.2‰Úà'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Úà��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Úà a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Úà 'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Úà a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Úà ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Úà �37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Úà'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Úàa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Úà'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Úà)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Úà)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Úà'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Úà)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Úà)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÚàQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Úß)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Úß~)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Úß})a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Úß| �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Úß{S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’. ~C¥ \ î  9 ×ß)ÍD>á2qH_ �½~:‰Úßz'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚßyE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚßxE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚßwaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚßvSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚßuS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚßtaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Úßsa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚßrE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚßqE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Úß*Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Úß)a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Úß(a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Úß'S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Úß&oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Úß%Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Úß$o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Úß#K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Úß"�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Úß!� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Úß �‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Úß��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Úßo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÚßS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑. #N†Eö¼z+ Ø ¨ © q Ó ¢ 0 ‡ ø ¸ t=´ƒD»ŠôR¼8_h#‡N4‰Úß)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚßK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚßEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚßSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Úßaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚßS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚßS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Úßa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Úß��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Úß��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Úß'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚßE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Úß'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Úß'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Úßa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Úß 'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚÞG��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚÞFa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚÞE'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚÞDa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚÞC��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚÞB�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚÞA'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚÞ@a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚÞ?'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚÞ>)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÚÞ=)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÚÞ<'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚÞ;)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚÞ:)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÚÞ9Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÚÞ8)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÚÞ7)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÚÞ6)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÚÞ5 �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土. ¨bÄ È  « Ñ ö ” œæŠûžï.ÖÇ>z;¨� ‰ÚÞ4S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÚÞ3'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚÞ2E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚÞ1E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚÞ0aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚÞ/Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚÞ.S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚÞ-aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚÞ,a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚÞ+E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚÞ*E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚÞ)Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚÝba�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚÝaa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚÝ`S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÚÝ_oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÚÝ^Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÚÝ]o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÚÝ\K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÚÝ[�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÚÝZ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÚÝY�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÚÝX��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÚÝWo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑. !›Æ„5â² ³ { Ý ¬ : ‘   $ ~ G¾�NÅ”þ\ÆBir-‘X›�7‰ÚÝVS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÚÝU)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚÝTK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚÝSEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚÝRSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÚÝQaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚÝPS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚÝOS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚÝNa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÚÝM��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÚÝL��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÚÝK'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚÝJE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÚÝI'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÚÝH'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÚÝGa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÚÝF'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚÝE��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚÜa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚÜ~'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚÜ}a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚÜ|��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚÜ{�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚÜz'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚÜya�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚÜx'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚÜw)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÚÜv)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÚÜu'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚÜt)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚÜs)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÚÜrQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÚÜq)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴. <bf · I o ” 2 : „ (Ÿ™<�Ìt£ºeÜÙFÌ‹‰ÚÜkE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚÜjE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚÜiaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚÜhSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚÜgS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚÜfaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚÜea‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚÜdE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚÜcE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚÜbSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚÜaa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚÜa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚÜS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÚÜoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÚÜSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÚÜo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÚÜK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÚÜ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÚÜ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÚÜ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÚÜ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网. y±^.†/ ÷ Y ( ¶ ~ >   ú à : ÊAzØB¾å Ôy�‰ÚÜo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÚÜS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÚÜ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚÜK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚÜ Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚÜ Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÚÜ aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚÜ S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚÜ S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚÜa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÚÜ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÚÜ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÚÜ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚÜE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÚÜ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÚÜ'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÚÜa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÚÜ'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚÛ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚÛ~a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚÛ}'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚÛ6a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚÛ5��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚÛ4�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚÛ3'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚÛ2a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚÛ1'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚÛ0)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÚÛ/)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÚÛ.'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚÛ-)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚÛ,)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜. ^U ç 2 Ð Ø " Æ =7Ú+jAXz¶wäj)Ú ^=‰ÚÛ+Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÚÛ*)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÚÛ))}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÚÛ()a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÚÛ' �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÚÛ&S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÚÛ%'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚÛ$E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚÛ#E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚÛ"aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚÛ!Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚÛ S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚÛaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚÛa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚÛE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚÛE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚÛSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚÛa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚÛa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚÚSS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÚÚRoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÚÚQSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÚÚPo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÚÚOK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÚÚN�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÚÚM� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÚÚL�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑. ­XÉ+ ú ˆ ß P  r Ì • Û œ âLª�·À^{ߦéK­�‰ÚÚK��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÚÚJo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÚÚIS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÚÚH)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚÚGK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚÚFEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚÚESyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÚÚDaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚÚCS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚÚBS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚÚAa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÚÚ@��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÚÚ?��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÚÚ>'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚÚ=E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÚÚ<'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÚÚ;'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÚÚ:a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÚÚ9'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚÚ8��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚÚ7a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚÚ6'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚÚ5a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚÙn��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚÙm�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚÙl'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚÙka�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚÙj'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚÙi)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÚÙh)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬. ˆQã . Ì Ô   9 3Ö'f=Tÿv²sàf%ÖœZ ¸ˆ+‰ÚÙg'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚÙf)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚÙe)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÚÙdQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÚÙc)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÚÙb)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÚÙa)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÚÙ` �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÚÙ_S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÚÙ^'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚÙ]E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚÙ\E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚÙ[aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚÙZSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚÙYS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚÙXaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚÙWa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚÙVE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚÙUE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚÙTSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚÙSa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚÙRa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚÙQS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÚÙ oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÚÙ Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÚÙ o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÚÙK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÚÙ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÚÙ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖. Y©qÓ¢0 ‡ ø ¸  t = ´ ƒ D » ŠôR¼8_h#‡N‘óUY�v‰ÚÙ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÚÙ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÚÙo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÚÙS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÚÙ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚÙK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚØEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚØ~Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÚØ}aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚØ|S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚØ{S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚØza�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÚØy��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÚØx��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÚØw'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚØvE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÚØu'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÚØt'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÚØsa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÚØr'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚØq��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚØpa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚØo'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚØna�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚØm��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚØ%�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚØ$'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚØ#a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚØ"'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚØ!)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅. �’¸ Ý { ƒ Í q è â …Ö½ì®%a"�Ô…K ºg7��"‰ÚØ )‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÚØ'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚØ)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚØ)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÚØQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÚØ)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÚØ)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÚØ)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÚØ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÚØS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÚØ'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚØE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚØE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚØaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚØSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚØS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚØaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚØa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚØE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚØ E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚØ Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚØ a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚØ a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚØ S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ú×Coƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ú×BSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ú×Ao‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ú×@K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ú×?�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马. J §' ˜ X º  Ý T # ä [ * ”ò\Øÿ¦Ã'î1“õùJ�)‰Ú×>� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ú×=�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ú×<��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ú×;o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ú×:S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ú×9)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ú×8K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ú×7Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ú×6Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ú×5aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ú×4S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ú×3S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ú×2a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ú×1��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ú×0��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ú×/'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ú×.E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ú×-'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ú×,'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ú×+a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ú×*'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ú×)��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ú×(a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ú×''a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ú×&a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.{‰Ú×%E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.]‰Ú‘Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ú‘~aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓. "@w³t á g & × � [ ¹ ‰ á Š R ´ ƒ hÙ™ûU•d%œkÕ3�@�S‰Ú‘}S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ú‘|S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ú‘{a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ú‘z��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ú‘y��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ú‘x'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ú‘wE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ú‘v'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ú‘u'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ú‘ta�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ú‘s'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ú‘r��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ú‘qa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ú‘p'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ú‘oa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ú‘n��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ú‘m�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ú‘l'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ú‘ka�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ú‘j'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ú‘i)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ú‘h)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ú‘g'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ú‘f)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ú‘e)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ú‘dQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ú‘c)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ú‘b)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ú‘a)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ú‘ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ú‘S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ú‘'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ú‘E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ú‘E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»». R�H ‹ í O S ¤ 6 \�'qŒ†)z¹a�§RP‰Ú‘aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ú‘Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ú‘S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ú‘aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ú‘a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ú‘E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ú‘E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ú‘Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ú‘ a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ú‘ a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ú‘ S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ú‘ oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ú‘ Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ú‘o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ú‘K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ú‘�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ú‘� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ú‘�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ú‘��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ú‘o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ú‘S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ú‘)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ú�K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ú�~Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓. #p<ýj ð ¯ ` & ä • B  j  Û = šñb"„Þ§í®%ô^¼&¢ÉÒp]‰Ú�}Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ú�7aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ú�6S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ú�5S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ú�4a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ú�3��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ú�2��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ú�1'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ú�0E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ú�/'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ú�.'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ú�-a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ú�,'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ú�+��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ú�*a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ú�)'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ú�(a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ú�'��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ú�&�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ú�%'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ú�$a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ú�#'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ú�")� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ú�!)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ú� 'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ú�)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ú�)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ú�Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ú�)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ú�)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ú�)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ú� �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ú�RS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ú�Q'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ú�PE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水. ¬d+n Ð 2 6 ‡  ? d  Tøoi ]œDsŠ5¬�‰Ú�OE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ú�NaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ú�MSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ú�LS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ú�KaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ú�Ja‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ú�IE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ú�HE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ú�GSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ú�Fa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ú�Ea_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ú�DS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ú�Coƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ú�BSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ú�Ao‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ú�@K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ú�?�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ú�>� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ú�=�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ú�<��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ú�;o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ú�:S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ú�9)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ú�8K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎. "�mó²c) ç ˜ E  m  Þ @  � ô e %‡áª!ð±(÷a¿)¥ÌÕs��]‰Ú�7Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ú�6Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ú�5aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚŽoS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚŽnS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚŽma�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÚŽl��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÚŽk��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÚŽj'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚŽiE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÚŽh'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÚŽg'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÚŽfa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÚŽe'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚŽd��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚŽca�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚŽb'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚŽaa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚŽ`��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚŽ_�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚŽ^'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚŽ]a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚŽ\'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚŽ[)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÚŽZ)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÚŽY'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚŽX)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚŽW)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÚŽVQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÚŽU)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÚŽT)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÚŽS)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÚŽR �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÚŽQS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’. ~C¥ \ î  9 ×ß)ÍD>á2qH_ �½~:‰ÚŽ '_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚŽ E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚŽ E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚŽaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚŽSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚŽS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚŽaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚŽa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚŽE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚŽE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚŽSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚŽa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ú�a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ú�~S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ú�}oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ú�|Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ú�{o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ú�zK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ú�y�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ú�x� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ú�w�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ú�v��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ú�uo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ú�tS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑. #N†Eö¼z+ Ø ¨ © q Ó ¢ 0 ‡ ø ¸ t=´ƒD»ŠôR¼8_h#‡N4‰Ú�s)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ú�rK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ú�qEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ú�pSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ú�oaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ú�nS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ú�mS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ú�&a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ú�%��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ú�$��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ú�#'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ú�"E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ú�!'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ú� 'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ú�a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ú�'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ú���5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ú�a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ú�'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ú�a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ú���5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ú��37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ú�'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ú�a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ú�'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ú�)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ú�)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ú�'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ú�)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ú�)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ú�Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ú�)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ú� )}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ú� )a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ú�  �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土. ¨bÄ È  « Ñ ö ” œæŠûžï.ÖÇ>z;¨� ‰Ú� S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ú� '_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÚŒCE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚŒBE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚŒAaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚŒ@Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚŒ?S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚŒ>aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚŒ=a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚŒ<E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚŒ;E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚŒ:Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚŒ9a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚŒ8a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚŒ7S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÚŒ6oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÚŒ5Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÚŒ4o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÚŒ3K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÚŒ2�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÚŒ1� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÚŒ0�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÚŒ/��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÚŒ.o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑. !›Æ„5â² ³ { Ý ¬ : ‘   $ ~ G¾�NÅ”þ\ÆBir-‘X›�7‰ÚŒ-S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÚŒ,)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚŒ+K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚŒ*Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚŒ)Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÚŒ(aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚŒ'S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚŒ&S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚŒ%a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ú‹^��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ú‹]��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ú‹\'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ú‹[E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ú‹Z'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ú‹Y'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ú‹Xa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ú‹W'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ú‹V��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ú‹Ua�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ú‹T'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ú‹Sa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ú‹R��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ú‹Q�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ú‹P'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ú‹Oa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ú‹N'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ú‹M)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ú‹L)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ú‹K'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ú‹J)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ú‹I)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ú‹HQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ú‹G)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴. <bf · I o ” 2 : „ (Ÿ™<�Ìt£ºeÜÙFÌ‹‰Ú‹AE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÚŠ{E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÚŠzaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÚŠySƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÚŠxS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÚŠwaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÚŠva‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÚŠuE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÚŠtE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÚŠsSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÚŠra�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÚŠqa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÚŠpS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÚŠooƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÚŠnSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÚŠmo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÚŠlK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÚŠk�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÚŠj� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÚŠi�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÚŠh��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网. y±^.†/ ÷ Y ( ¶ ~ >   ú à : ÊAzØB¾å Ôy�‰ÚŠgo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÚŠfS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÚŠe)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÚŠdK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÚŠcEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÚŠbSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÚŠaaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÚŠ`S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÚŠ_S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÚŠ^a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÚŠ]��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÚŠ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÚŠ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÚŠE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÚŠ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÚŠ'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÚŠa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÚŠ'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÚŠ ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÚŠ a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÚŠ 'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÚŠ a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÚŠ ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÚŠ�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÚŠ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÚŠa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÚŠ'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÚŠ)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÚŠ)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÚŠ'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÚŠ)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÚŠ)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜. ^U ç 2 Ð Ø " Æ =7Ú+jAXz¶wäj)Ú ^=‰Ú‰Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ú‰~)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ú‰})}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ú‰|)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ú‰{ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ú‰zS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ú‰y'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ú‰3E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ú‰2E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ú‰1aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ú‰0Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ú‰/S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ú‰.aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ú‰-a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ú‰,E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ú‰+E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ú‰*Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ú‰)a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ú‰(a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ú‰'S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ú‰&oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ú‰%Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ú‰$o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ú‰#K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ú‰"�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ú‰!� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ú‰ �‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑. ²|£ ¬ J g Ë ’ Õ 7 ™�¼Åc€ä«îP²�‰Ú‰��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ú‰o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ú‰S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ú‰)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ú‰K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ú‰Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ú‰Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ú‰aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ú‰S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ú‰S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.b‰Ú‰E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.i‰ÙÃo�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÙÃn� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÙÃm�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÙÃl��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÙÃko�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÙÃjS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÙÃi)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÙÃhK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÙÃgEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÙÃfSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÙÃeaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÙÃdS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÙÃcS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ. #Ž/F ñ h ¤ e Ò X  È Ž L ý ª zÒ{C¥tYÊŠìF†U�\Æ$Ž�‰ÙÃba�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÙÃa��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÙÃ`��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÙÃ_'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÙÃ^E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÙÃ]'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÙÃ\'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÙÃ[a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÙÃZ'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÙÃY��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÙÃXa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÙÃW'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÙÃVa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÙÃU��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÙÃT�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÙÃS'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÙÃRa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÙÃQ'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ùà )� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ùà )‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÙÃ'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÙÃ)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÙÃ)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÙÃQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÙÃ)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÙÃ)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÙÃ)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ùà �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÙÃS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÙÂ'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÙÂ~E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÙÂ}E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÙÂ|aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÙÂ{Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÙÂzS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.  § Ä ( ï 2 ” ö ú KÝ(ÆÎ¼3-Ð!`S‰ÙÂyaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÙÂxa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÙÂwE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÙÂvE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÙÂuSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÙÂta�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÙÂsa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÙÂrS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÙÂqoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÙÂpSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÙÂoo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÙÂnK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÙÂm�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÙÂ'� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÙÂ&�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÙÂ%��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÙÂ$o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÙÂ#S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÙÂ")Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÙÂ!K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ù Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÙÂSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÙÂaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓. "@w³t á g & × � [ ¹ ‰ á Š R ´ ƒ hÙ™ûU•d%œkÕ3�@�S‰ÙÂS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÙÂS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÙÂa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÙÂ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÙÂ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÙÂ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÙÂE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÙÂ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÙÂ'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÙÂa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÙÂ'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÙÂ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÙÂa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÙÂ'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÙÂa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÙÂ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ù �37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ù 'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ù a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ù 'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ù )� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÙÁB)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÙÁA'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÙÁ@)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÙÁ?)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÙÁ>Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÙÁ=)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÙÁ<)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÙÁ;)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÙÁ: �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÙÁ9S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÙÁ8'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÙÁ7E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÙÁ6E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»». R�H ‹ í O S ¤ 6 \�'qŒ†)z¹a�§RP‰ÙÁ5aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÙÁ4Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÙÁ3S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÙÁ2aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÙÁ1a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÙÁ0E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÙÁ/E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÙÁ.Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÙÁ-a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÙÁ,a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÙÁ+S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÙÁ*oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÙÁ)Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÙÁ(o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÙÁ'K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÙÁ&�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÙÁ%� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÙÀ_�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÙÀ^��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÙÀ]o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÙÀ\S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÙÀ[)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÙÀZK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÙÀYEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓. #p<ýj ð ¯ ` & ä • B  j  Û = šñb"„Þ§í®%ô^¼&¢ÉÒp]‰ÙÀXSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÙÀWaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÙÀVS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÙÀUS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÙÀTa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÙÀS��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÙÀR��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÙÀQ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÙÀPE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÙÀO'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÙÀN'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÙÀMa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÙÀL'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÙÀK��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÙÀJa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ÙÀI'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÙÀHa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÙÀG��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÙÀF�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÙÀE'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÙÀDa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÙÀC'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÙÀB)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÙÀA)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ù¿{'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ù¿z)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ù¿y)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ù¿xQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ù¿w)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ù¿v)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ù¿u)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ù¿t �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ù¿sS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ù¿r'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ù¿qE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水. ¬d+n Ð 2 6 ‡  ? d  Tøoi ]œDsŠ5¬�‰Ù¿pE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ù¿oaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ù¿nSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ù¿mS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ù¿laW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ù¿ka‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ù¿jE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ù¿iE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ù¿hSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ù¿ga�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ù¿fa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ù¿eS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ù¿doƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ù¿cSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ù¿bo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ù¿aK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ù¿`�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ù¿_� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ù¿^�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ù¿]��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ù¿o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ù¿S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ù¿)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ù¿K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎. "�mó²c) ç ˜ E  m  Þ @  � ô e %‡áª!ð±(÷a¿)¥ÌÕs��]‰Ù¿Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ù¿Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ù¿aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ù¿S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ù¿S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ù¿ a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ù¿ ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ù¿ ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ù¿ 'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ù¿ E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ù¿'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ù¿'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ù¿a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ù¿'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ù¿��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ù¿a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ù¿'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ù¿a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ù¿��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ù¾�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ù¾~'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ù¾}a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ù¾|'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ù¾{)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ù¾z)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ù¾y'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ù¾3)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ù¾2)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ù¾1Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ù¾0)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ù¾/)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ù¾.)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ù¾- �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ù¾,S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’. ~C¥ \ î  9 ×ß)ÍD>á2qH_ �½~:‰Ù¾+'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ù¾*E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ù¾)E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ù¾(aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ù¾'Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ù¾&S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ù¾%aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ù¾$a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ù¾#E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ù¾"E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ù¾!Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ù¾ a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ù¾a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ù¾S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ù¾oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ù¾Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ù¾o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ù¾K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ù¾�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ù¾� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ù¾�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ù¾��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ù¾o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ù½NS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑. #N†Eö¼z+ Ø ¨ © q Ó ¢ 0 ‡ ø ¸ t=´ƒD»ŠôR¼8_h#‡N4‰Ù½M)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ù½LK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ù½KEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ù½JSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ù½Iaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ù½HS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ù½GS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ù½Fa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ù½E��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ù½D��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ù½C'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ù½BE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ù½A'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ù½@'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ù½?a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ù½>'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ù½=��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ù½<a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ù½;'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ù½:a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ù½9��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ù½8�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ù½7'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ù½6a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ù½5'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ù½4)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ù½3)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ù½2'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ù½1)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ù¼k)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ù¼jQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ù¼i)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ù¼h)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ù¼g)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ù¼f �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土. ¨bÄ È  « Ñ ö ” œæŠûžï.ÖÇ>z;¨� ‰Ù¼eS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ù¼d'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ù¼cE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ù¼bE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ù¼aaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ù¼`Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ù¼_S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ù¼^aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ù¼]a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ù¼\E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ù¼[E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ù¼ZSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ù¼Ya�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ù¼Xa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ù¼WS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ù¼Voƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ù¼USy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ù¼To‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ù¼SK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ù¼R�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ù¼Q� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ù¼P�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ù¼O��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ù¼No�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑. !›Æ„5â² ³ { Ý ¬ : ‘   $ ~ G¾�NÅ”þ\ÆBir-‘X›�7‰Ù¼MS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ù¼)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ù¼K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ù¼Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ù¼Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ù¼aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ù»S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ù»~S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ù»}a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ù»|��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ù»{��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ù»z'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ù»yE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ù»x'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ù»w'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ù»va�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ù»u'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ù»t��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ù»sa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ù»r'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ù»qa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ù»p��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ù»o�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ù»n'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ù»ma�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ù»l'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ù»k)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ù»j)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ù»i'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ù»#)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ù»")}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ù»!Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ù» )S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴. <bf · I o ” 2 : „ (Ÿ™<�Ìt£ºeÜÙFÌ‹‰Ù»E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ù»E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ù»aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ù»Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ù»S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ù»aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ù»a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ù»E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ù»E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ù»Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ù»a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ù»a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ù»S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ù» oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ù» Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ù» o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ù» K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ù» �';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ù»� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ù»�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ù»��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网. IÏ�Ö@ ž  „ « ´ R oÓšÝ?¡¥öˆ®ÓqyÃIu‰Ù»)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.�0‰Øõ_S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Øõ^oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Øõ]Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Øõ\o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Øõ[K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ØõZ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ØõY� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ØõX�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ØõW��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ØõVo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ØõUS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ØõT)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ØõSK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ØõREƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ØõQSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ØõPaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ØõOS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ØõNS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ØõMa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ØõL��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ØõK��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ØõJ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ØõIE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ØõH'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ØõG'C诸事ä¸�宜.祭祀.解除.余事勿å�–. ![ú� î - Õ   Æ = y :§-ì�c!ÒO§PzI×.Ÿ_Áä[�‰ØõFa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ØõE'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ØõD��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ØõCa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ØõB'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ØõAa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Øôz��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Øôy�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Øôx'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Øôwa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Øôv'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Øôu)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Øôt)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Øôs'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Øôr)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Øôq)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ØôpQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Øôo)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Øôn)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Øôm)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Øôl �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ØôkS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Øôj'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ØôiE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ØôhE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ØôgaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØôfSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØôeS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ØôdaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Øôca‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ØôbE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ØôaE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Øô`Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑. jÈ2 ® Õ Þ | ™ ý Ä iËÏ ²Øý›£í‘�‰Øô_a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Øô^a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Øô]S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Øôoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ØôSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Øôo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ØôK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Øô�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Øô� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Øô�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Øô��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Øôo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ØôS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Øô )Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Øô K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Øô Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Øô Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Øô aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ØôS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ØôS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Øôa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Øô��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Øô��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马. #”Q�8 g ~ )   Ü � � O Æ„5â² ³{ݬ:‘Â$~G¾�NÅ”,‰Øô'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ØôE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Øô'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Øô'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Øóa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Øó~'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Øó}��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Øó|a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Øó{'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Øóza�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Øóy��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Øó2�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Øó1'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Øó0a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Øó/'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Øó.)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Øó-)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Øó,'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Øó+)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Øó*)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Øó)Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Øó()S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Øó')}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Øó&)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Øó% �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Øó$S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Øó#'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Øó"E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Øó!E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Øó aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØóSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØóS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ØóaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Øóa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ØóE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�. ;^ÈD k t  / “ Z �ÿae¶Hn“19ƒ'ž˜;X‰ØóE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ØóSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Øóa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Øóa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ØóS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Øóoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ØòOSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ØòNo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ØòMK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ØòL�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ØòK� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ØòJ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ØòI��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ØòHo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ØòGS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ØòF)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ØòEK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ØòDEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ØòCSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ØòBaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ØòAS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Øò@S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Øò?a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Øò>��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土. #­?ç - Ø O ‹ L ¹ ? þ ¯ u 3ä‘a¹b*Œ[é@±qÓ-öm<ýtC­�‰Øò=��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Øò<'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Øò;E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Øò:'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Øò9'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Øò8a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Øò7'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Øò6��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Øò5a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Øò4'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Øò3a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Øò2��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Øò1�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Øñk'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Øñja�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Øñi'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Øñh)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Øñg)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Øñf'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Øñe)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Øñd)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ØñcQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Øñb)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Øña)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Øñ`)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Øñ_ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Øñ^S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Øñ]'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Øñ\E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Øñ[E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ØñZaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØñYSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØñXS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ØñWaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ØñVa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴. Ä|£ ¬ J g Ë ’ Õ 7 ™�Ëiq»_ÖÐsÄ�)‰ØñUE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ØñTE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ØñSSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ØñRa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ØñQa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ØñPS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ØñOoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ØñNSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ØñMo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ØñK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Øñ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Øñ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Øñ�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Øñ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Øño�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ØñS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Øð)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Øð~K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Øð}Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Øð|Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Øð{aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ØðzS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ØðyS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ. #Ž/F ñ h ¤ e Ò X  È Ž L ý ª zÒ{C¥tYÊŠìF†U�\Æ$Ž�‰Øðxa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Øðw��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Øðv��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Øðu'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ØðtE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Øðs'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Øðr'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Øðqa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Øðp'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Øðo��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Øðna�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Øðm'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Øðla�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Øðk��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Øðj�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Øði'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Øð#a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Øð"'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Øð!)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Øð )‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Øð'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Øð)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Øð)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ØðQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Øð)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Øð)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Øð)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Øð �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ØðS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Øð'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ØðE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ØðE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ØðaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØðSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØðS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.  § Ä ( ï 2 ” ö ú KÝ(ÆÎ¼3-Ð!`S‰ØðaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Øða‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ØðE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Øð E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Øð Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Øð a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Øð a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Øð S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Øðoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ØðSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Øðo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ØðK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Øï>�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Øï=� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Øï<�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Øï;��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Øï:o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Øï9S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Øï8)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Øï7K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Øï6Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Øï5Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Øï4aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓. "@w³t á g & × � [ ¹ ‰ á Š R ´ ƒ hÙ™ûU•d%œkÕ3�@�S‰Øï3S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Øï2S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Øï1a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Øï0��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Øï/��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Øï.'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Øï-E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Øï,'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Øï+'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Øï*a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Øï)'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Øï(��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Øï'a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Øï&'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Øï%a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Øï$��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Øï#�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Øï"'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Øï!a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Øî['Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ØîZ)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ØîY)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ØîX'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ØîW)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ØîV)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ØîUQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ØîT)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ØîS)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ØîR)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ØîQ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ØîPS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ØîO'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ØîNE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ØîME�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»». R�H ‹ í O S ¤ 6 \�'qŒ†)z¹a�§RP‰ØîLaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØîKSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØîJS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ØîIaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ØîHa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ØîGE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ØîFE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ØîESƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ØîDa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ØîCa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ØîBS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ØîAoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Øî@Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Øî?o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Øî>K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Øî=�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Øít� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Øís�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Øír��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Øíqo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ØípS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Øío)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ØínK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ØímEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓. #p<ýj ð ¯ ` & ä • B  j  Û = šñb"„Þ§í®%ô^¼&¢ÉÒp]‰ØílSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Øíkaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ØíjS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ØíiS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Øíha�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Øíg��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Øíf��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Øíe'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ØídE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Øíc'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Øíb'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Øíaa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Øí`'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Øí_��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Øí^a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Øí]'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Øí\a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Øí[��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ØíZ�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ØíY'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Øía�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Øí'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Øí)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Øí)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Øí'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Øí)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Øí )}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Øí Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Øí )S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Øí )}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Øí )a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Øí �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ØíS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Øí'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ØíE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水. ´&K é ñ ; ß V P G l \wqe¤L{’=´�‰ØíE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ØíaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØíSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØíS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ØíaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Øìa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Øì~E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Øì}E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Øì|Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Øì{a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Øìza_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ØìyS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Øìxoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ØìwSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Øìvo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.‰Øìu ‚‰Ø§OSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ø§Na�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ø§Ma_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ø§LS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ø§Koƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ø§JSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ø§Io‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ø§HK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖. šŽåV x Ò ›  á ¢  è R ° –½Æd�å¬ïQ³·ši‰Ø§G�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ø§F� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ø§E�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ø§D��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ø§Co�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ø§BS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ø§A)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ø§@K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ø§?Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ø§>Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ø§=aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ø§<S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ø§;S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ø§:a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ø§9��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ø§8��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ø§7'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ø§6E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ø§5'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ø§4'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ø§3a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ø§2'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ø§1��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ø¦ja�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ø¦i'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ø¦ha�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ø¦g��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ø¦f�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�. y%Ã Ë  ¹ 0 * Í  ] 4Köm©j×]Í“Q¯×€Hªy,‰Ø¦e'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ø¦da�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ø¦c'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ø¦b)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ø¦a)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ø¦`'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ø¦_)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ø¦^)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ø¦]Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ø¦\)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ø¦[)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ø¦Z)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ø¦Y �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ø¦XS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ø¦W'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ø¦VE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ø¦UE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ø¦TaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ø¦SSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ø¦RS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ø¦QaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ø¦Pa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ø¦OE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ø¦NE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ø¦MSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ø¦a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ø¦a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ø¦S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ø¦oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ø¦Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ø¦o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬. Ûq1“ í ¶ - ü ½ 4  m Ë 5 ±ØáœÇ lÎÒ#µÛ�T‰Ø¦K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ø¦�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ø¥� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ø¥~�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ø¥}��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ø¥|o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ø¥{S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ø¥z)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ø¥yK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ø¥xEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ø¥wSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ø¥vaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ø¥uS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ø¥tS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ø¥sa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ø¥r��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ø¥q��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ø¥p'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ø¥oE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ø¥n'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ø¥m'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ø¥la�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ø¥k'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ø¥j��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ø¥ia�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ø¥"'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ø¥!a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�. ›R ö m g [ š B qˆ3ªæ§šY ÐŽ?ì¼½…ç¶D›�#‰Ø¥ ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ø¥�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ø¥'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ø¥a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ø¥'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ø¥)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ø¥)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ø¥'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ø¥)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ø¥)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ø¥Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ø¥)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ø¥)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ø¥)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ø¥ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ø¥S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ø¥'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ø¥E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ø¥E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ø¥ aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ø¥ Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ø¥ S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ø¥ aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ø¥ a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ø¥E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ø¥E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ø¥Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ø¥a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ø¤?a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ø¤>S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ø¤=oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�. mb¼… ü Ë Œ  Ò < š  € §°NkÏ–Ù;�¡ò„ªÏm]‰Ø¤<Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ø¤;o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ø¤:K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ø¤9�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ø¤8� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ø¤7�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ø¤6��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ø¤5o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ø¤4S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ø¤3)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ø¤2K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ø¤1Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ø¤0Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ø¤/aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ø¤.S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ø¤-S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ø¤,a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ø¤+��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ø¤*��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ø¤)'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ø¤(E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ø¤''_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ø¤&'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ø¤%a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ø¤$'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ø¤#��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ø¤"a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�. ÄJîe _  S ’ : i € +¢ÞŸ ’QȆ7ä´ µ}ß®<“Ä;‰Ø¤!'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ø£[a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ø£Z��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ø£Y�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ø£X'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ø£Wa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ø£V'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ø£U)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ø£T)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ø£S'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ø£R)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ø£Q)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ø£PQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ø£O)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ø£N)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ø£M)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ø£L �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ø£KS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ø£J'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ø£IE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ø£HE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ø£GaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ø£FSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ø£ES‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ø£DaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ø£Ca‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ø£BE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ø£AE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ø£@Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ø£?a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ø£>a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ø£=S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅. ðwF~M ·   û " + ÉæJT¶mÿ%Jèð�r‰Ø¢voƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ø¢uSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ø¢to‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ø¢sK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ø¢r�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ø¢q� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ø¢p�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ø¢o��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ø¢no�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ø¢mS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ø¢l)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ø¢kK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ø¢jEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ø¢iSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ø¢haƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ø¢gS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ø¢fS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ø¢ea�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ø¢d��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ø¢c��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ø¢b'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ø¢aE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ø¢`'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ø¢_'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ø¢^a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜. ![wq e ¤ L { ’ = ´ð±¤cÚ˜IöÆÇ�ñÀN¥Ö8’[2‰Ø¢]'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ø¢\��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ø¢[a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ø¢Z'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ø¢Ya�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ø¢��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ø¢�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ø¢'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ø¢a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ø¢'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ø¢)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ø¢ )‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ø¢ 'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ø¢ )�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ø¢ )}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ø¢ Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ø¢)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ø¢)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ø¢)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ø¢ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ø¢S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ø¢'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ø¢E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ø¢E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ø¢aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ø¡Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ø¡~S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ø¡}aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ø¡|a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ø¡{E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ø¡zE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ø¡ySƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ø¡xa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水. gÏ�Ö@ ž  „ « ´ R oÓšÝ?¡¥öˆ®ÓqyÃgW‰Ø¡wa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ø¡vS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ø¡uoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ø¡.Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ø¡-o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ø¡,K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ø¡+�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ø¡*� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ø¡)�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ø¡(��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ø¡'o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ø¡&S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ø¡%)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ø¡$K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ø¡#Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ø¡"Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ø¡!aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ø¡ S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ø¡S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ø¡a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ø¡��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ø¡��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ø¡'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ø¡E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ø¡'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ø¡'C诸事ä¸�宜.祭祀.解除.余事勿å�–. ![ú� î - Õ   Æ = y :§-ì�c!ÒO§PzI×.Ÿ_Áä[�‰Ø¡a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ø¡'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ø¡��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ø¡a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ø¡'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ø¡a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ø¡��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ø K�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ø J'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ø Ia�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ø H'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ø G)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ø F)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ø E'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ø D)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ø C)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ø BQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ø A)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ø @)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ø ?)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ø > �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ø =S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ø <'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ø ;E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ø :E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ø 9aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ø 8Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ø 7S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ø 6aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ø 5a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ø 4E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ø 3E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ø 2Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑. jÈ2 ® Õ Þ | ™ ý Ä iËÏ ²Øý›£í‘�‰Ø 1a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ø 0a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ø /S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ø .oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ø -Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ØŸeo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ØŸdK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ØŸc�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ØŸb� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ØŸa�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ØŸ`��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ØŸ_o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ØŸ^S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ØŸ])Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ØŸ\K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ØŸ[Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ØŸZSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ØŸYaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ØŸXS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ØŸWS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ØŸVa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ØŸU��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ØŸT��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马. #”Q�8 g ~ )   Ü � � O Æ„5â² ³{ݬ:‘Â$~G¾�NÅ”,‰ØŸS'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ØŸRE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ØŸQ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ØŸP'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ØŸOa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ØŸN'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ØŸM��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ØŸLa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰ØŸK'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ØŸJa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ØŸI��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ØŸ�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ØŸ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ØŸa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ØŸ'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Øž)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Øž~)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Øž}'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Øž|)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Øž{)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ØžzQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Øžy)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Øžx)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Øžw)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Øžv �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ØžuS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Øžt'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ØžsE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ØžrE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ØžqaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ØžpSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ØžoS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ØžnaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Øžma‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ØžlE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�. Èwq e ¤ L { ’ = ´ð±¤cÚ˜IöÆÇ¾Æ´+%ÈX‰ØžkE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ØžjSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Øžia�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Øžha_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ØžgS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Øžfoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.‰Øže R‰×Ù?)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰×Ù>)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰×Ù='A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰×Ù<)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰×Ù;)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰×Ù:Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰×Ù9)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰×Ù8)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰×Ù7)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰×Ù6 �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰×Ù5S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰×Ù4'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰×Ù3E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰×Ù2E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰×Ù1aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰×Ù0Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰×Ù/S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰×Ù.aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰×Ù-a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰×Ù,E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰×Ù+E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰×Ù*Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰×Ù)a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水. »1ø& F Ñ ÿ Š Y y . (}ê«ÇצƒÆêÇ"sÍ»W‰×Ù(a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰×Ù'S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.� ‰×Ù&�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰×Ù% ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰×Ù$}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰×Ù#''诸事ä¸�宜.诸事ä¸�宜.�V‰×Ù"ƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰×Ù!Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰×ØZ)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰×ØY''诸事ä¸�宜.诸事ä¸�宜.,‰×ØX'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰×ØWEƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰×ØV)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰×ØU'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰×ØTE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰×ØS)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰×ØREƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰×ØQEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰×ØPE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰×ØO'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰×ØNS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰×ØMS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰×ØLS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰×ØKS‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰×ØJE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰×ØI)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰×ØHE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土. ¨|ê z ú ™ & C  ƒ „ 5žZ/ò®p(Ä=Ñ qÜŽ©Fv¨�H‰×ØGS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰×ØFE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰×ØES{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰×ØDa‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰×ØCSQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.�‰×ØBg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰×ØAg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰×Ø@}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰×Ø?'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰×Ø>)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰×Ø=)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰××w'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰××v)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰××u)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰××t']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰××s7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰××r)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰××q)5行丧.安葬.作ç�¶.造畜椆栖.?‰××p)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰××oE�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰××nEaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰××mEƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰××lE�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰××k'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰××jS‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰××iS�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰××hE�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰××gS�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰××fE‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰××eS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰××dg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰××cg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅. Øí{Q — Ú ‹  g ÿ h ä ¥ÞRGÍM�Þ»_©ÏªÃP‰××bEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰××aY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰××`S�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.�0‰××_ ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰××^'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰××]��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰××\ ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰××[E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰××Z''诸事ä¸�宜.诸事ä¸�宜.:‰××Y'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰××oa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰××E�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰××E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰××E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰××)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰×× E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰×× E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰×× E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰×× )‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰×× )]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰××)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰××E�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰××S�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰××)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰××a�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰××o7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰××=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰××a‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰××5'探病.余事勿å�–.余事勿å�–.m‰×Öo}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰×Ö~S‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰×Ö}aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–. “<¦ Ñ H Î N ¿ S „  Ê zÜLµ^ ¹q7ø“'ÜSµ�ô“\‰×Ö|E�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.�‰×Ö{��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰×Öz� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰×ÖyS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰×Öxa�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰×Öw}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰×Öv)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰×Öu)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰×Ö/)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰×Ö.'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰×Ö-)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰×Ö,)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰×Ö+Ciå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰×Ö*)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰×Ö))� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰×Ö(7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰×Ö')o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰×Ö& ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰×Ö% ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰×Ö$ ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰×Ö#S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰×Ö")Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰×Ö!S�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰×Ö E‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰×ÖE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰×ÖS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰×ÖS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰×Öa�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰×Öa�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰×ÖS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰×ÖS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰×Öa‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网. "ÝÏ1¾ ì ˜ Ü j * J ƒ  † *’y$ó¤l·„5Òƒ;ì}ÜT#…Ý�"‰×Ö ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰×ÖE�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰×Ö'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰×Ö}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰×Öo�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰×Ö�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰×Ö7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰×ÕK)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰×ÕJ)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰×ÕI'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰×ÕH)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰×ÕG)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰×ÕF�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰×ÕE)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰×ÕD'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰×ÕC7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰×ÕB'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰×ÕA'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰×Õ@ ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰×Õ?S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰×Õ>E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰×Õ=a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰×Õ<a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰×Õ;S�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰×Õ:K‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰×Õ9S‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰×Õ8)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰×Õ7o}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰×Õ6S‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰×Õ5aO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰×Õ4a‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰×Õ3S�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.�‰×Õ2E�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰×Õ1'C诸事ä¸�宜.祭祀.解除.余事勿å�–. "užöF \  > ÷ W « j ’›!7Ô� s.ЖU¥e©†7è·u�‰×Õ0E‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰×Õ/E�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰×Õ.'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰×Õ-)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰×Ôf)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰×Ôe''诸事ä¸�宜.诸事ä¸�宜.R‰×Ôd)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰×Ôc�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰×Ôb)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰×Ôa)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰×Ô`7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰×Ô_7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰×Ô^)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰×Ô])�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰×Ô\'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰×Ô[ ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰×ÔZE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰×ÔY)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰×ÔXS{开市.交易.å«�å¨¶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰×ÔWEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰×ÔVK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰×ÔUYƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰×ÔTE‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰×ÔSS7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰×ÔRS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰×ÔQS�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰×ÔPSC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰×ÔOa�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰×ÔNS�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.�%‰×ÔM ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰×ÔL'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰×ÔK��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰×ÔJ ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰×ÔI'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–. (h‘;ð·h Ú § ‘ ` Æ E ÷ L Ï L é )�:ú¼¹–]Àw×yã~/î¦H²hE‰×Ô)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰×Ô)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰×Ô'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰×Ô)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰×Ó)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰×Ó~7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰×Ó})}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰×Ó|)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰×Ó{'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰×Óz)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰×Óy�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰×Óx‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰×Ów's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰×Óv ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰×Óu)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰×Ót''余事勿å�–.余事勿å�–.�}‰×ÓsSƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰×ÓraQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰×ÓqEƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰×ÓpEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰×Óo)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰×ÓnE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰×ÓmE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰×ÓlS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰×ÓkS�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰×ÓjS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.�%‰×Ói}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰×Óh'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰×Óg7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰×Ófa�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰×Óe'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰×Ó' 诸事ä¸�宜..‰×Ó77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰×Ó'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰×Ó7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰×Ó7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰×Ó)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰×Ó7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰×Ó7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰×ÓS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�. Nf¬d ‡ ð , ò G ä $ n <kg.»Pêg§S�è}ZÎ�äN�‰×ÓE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰×ÓE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰×ÓQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰×ÓE�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰×Ó''诸事ä¸�宜.诸事ä¸�宜.f‰×ÓS� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰×ÓE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰×ÓK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰×Ó S]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰×Ó a‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰×Ó a�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰×Ó oe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰×Ó a}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰×ÓS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰×Ó)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰×Ó7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰×ÓSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔.�K‰×Ó/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰×Ó'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰×ÓE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰×Ó)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰×Ò;E�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰×Ò:E‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰×Ò9E7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰×Ò8E‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰×Ò7S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰×Ò6)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰×Ò5SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰×Ò4E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰×Ò3)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎. €£]z ² Ž Í p ¬  � ï N³Dà]ñ±B¤K‘Ø_.uI¤€‰×Ò2')诸事ä¸�宜.破屋.å��垣.�‰×Ò1E‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰×Ò0ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰×Ò/So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰×Ò.E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰×Ò-'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰×Ò,a�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰×Ò+S‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰×Ò*S‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰×Ò)Eu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰×Ò(E�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰×Ò'S�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰×Ò&ECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰×Ò%S� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰×Ò$=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰×Ò#E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰×Ò"7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.�‰×Ò!�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰×Ò )‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰×Òo�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰×Ò� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰×ÒE‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰×ÑTE‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰×ÑSE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰×ÑR)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰×ÑQ')诸事ä¸�宜.求医.破屋.�B‰×ÑPE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰×ÑOEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰×ÑN_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰×ÑME}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓. ˜£cü5 < ¼ b · × Ÿ % Ï Næpý޳m¢ ¨ü®7®N˜�0‰×ÑL‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰×ÑKSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰×ÑJE�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰×ÑIE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰×ÑHS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰×ÑG'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰×ÑFE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰×ÑE7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰×ÑDS�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰×ÑCo‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰×ÑBEOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰×ÑAE�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰×Ñ@S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰×Ñ?S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰×Ñ>S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰×Ñ=S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰×Ñ<E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.|‰×Ñ;E�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰×Ñ:)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰×Ñ9)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰×Ðs'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰×ÐrE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰×ÐqE‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰×ÐpEwå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰×ÐoE�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰×ÐnE‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰×Ðm'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰×ÐlE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰×ÐkE�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰×Ðj)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰×ÐiE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑. �Â9 u 6 £ ) è ™ _  Î { K £ÿT�—®ÄÂíu9›b��L‰×ÐhS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰×Ðg7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰×ÐfE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰×Ðe)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰×Ðda�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰×ÐcE‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰×Ðboƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰×Ða7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰×Ð`S�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰×Ð_a‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰×Ð^E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰×Ð]a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰×Ð\S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰×Ð[7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰×ÐZ}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰×ÐYE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.�"‰×ÐX)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰×ÐW'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰×ÐV)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰×ÐU)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰×‹/Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰×‹.)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰×‹-)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰×‹,)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰×‹+ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰×‹*S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰×‹)'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰×‹(E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰×‹'E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰×‹&aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰×‹%Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’. Y Õ Ï $ ‘ R n ~ M * Å mÿ%Jèð:ÞUOòC‚*Y�K‰×‹$S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰×‹#aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰×‹"a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰×‹!E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰×‹ E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰×‹Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰×‹a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰×‹a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰×‹S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰×‹oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰×‹Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰×‹o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰×‹K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰×‹�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.S‰×‹Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰×‹)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰×‹''诸事ä¸�宜.诸事ä¸�宜.,‰×‹'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰×‹Eƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰×‹)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰×ŠJ'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰×ŠIE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰×ŠH)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰×ŠGEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰×ŠFEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰×ŠEE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木. ¿qr# Œ H  à œ ^  ± r + « 2 Î šLg4f—^Œ¬7eð¿,‰×ŠD'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰×ŠCS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰×ŠBS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰×ŠAS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰×Š@S‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰×Š?E‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰×Š>)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰×Š=E‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰×Š<S‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰×Š;E‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰×Š:S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰×Š9a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰×Š8SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰×Š7S�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰×Š6S‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰×Š5oaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰×Š4S�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰×Š3S�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.B‰×Š2)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰×Š1'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰×Š0)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰×Š/)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰×Š.']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰×Š-7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰×‰g)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰×‰f)5行丧.安葬.作ç�¶.造畜椆栖.?‰×‰e)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰×‰dE�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰×‰cEaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰×‰bEƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰×‰aE�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财. ±˜}> w ë � à f æ ­  ¶ w T†N<õ†ôŸ‰¾™8Åâ±,‰×‰`'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰×‰_S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰×‰^S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰×‰]E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰×‰\S�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰×‰[E‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰×‰ZS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰×‰Yg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰×‰Xg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰×‰WEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰×‰VY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰×‰US�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰×‰T)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰×‰SK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰×‰RSC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰×‰Q)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰×‰PS‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.‰×‰O''诸事ä¸�宜.诸事ä¸�宜.:‰×‰N'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰×‰Moa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰×‰LE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰×‰KE5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰×‰JE�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰×‰I)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰×‰E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰×‰E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰×‰E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰×ˆ)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰×ˆ~)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰×ˆ})�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰×ˆ|E�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰×ˆ{S�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马. "œ”ÅD N »  � E ö Ÿ L ú ² x 9Ôh«ZÎT–5Í"°†ÌÀCœ�!‰×ˆz)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰×ˆya�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰×ˆxo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰×ˆw=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰×ˆva‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰×ˆu5'探病.余事勿å�–.余事勿å�–.m‰×ˆto}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰×ˆsS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰×ˆraw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰×ˆqE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰×ˆpa�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰×ˆog)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰×ˆno� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰×ˆmo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰×ˆlYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰×ˆk}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.g‰×ˆj)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰×ˆi)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰×ˆh'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰×ˆg)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰×ˆf)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰×ˆeCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰×ˆ)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰×ˆ)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰×ˆ7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰×ˆ)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰×ˆ ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰×ˆ ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰×ˆ ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰×ˆS‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰×ˆ)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰×ˆS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰×ˆE‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰×ˆE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养. !v Y ò \ h ä O ú É z B ä � Z ¨Y ©Þy@·ó]ˆÿ…v� ‰×ˆS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰×ˆS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰×ˆa�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰×ˆa�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰×ˆS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰×ˆS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰×ˆ a‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰×ˆ S�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰×ˆ )Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰×ˆ E� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰×ˆ S‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰×ˆ}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰×ˆ��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.J‰×ˆ7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰×ˆ)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰×ˆ)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰×ˆ'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰×ˆ)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰×ˆ)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰×‡;�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰×‡:)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰×‡9'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰×‡87oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰×‡7'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰×‡6'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰×‡5 ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰×‡4S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰×‡3E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰×‡2a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰×‡1a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰×‡0S�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰×‡/K‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰×‡.S‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩. è¿ç ð v Œ ) â ^ È ƒ % ë ª XúºUþÛŒ=l‰Ú`ï|ªVš(è;‰×‡-)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰×‡,o}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰×‡+S‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰×‡*aO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰×‡)a‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰×‡(S�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰×‡'E�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰×‡&S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰×‡%7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰×‡$g‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰×‡#Y‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.J‰×‡")}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰×‡!)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰×‡ ''诸事ä¸�宜.诸事ä¸�宜.R‰×‡)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰×‡�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰×‡)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰×†V)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰×†U7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰×†T7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰×†S)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰×†R)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰×†Q'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰×†P ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰×†OE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰×†N)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰×†MS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰×†LEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰×†KK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰×†JYƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰×†IE‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰×†HS7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财. !S@˜Q ( Ó Ð ­ t × Ž î � 2ú•F½_.Éùø‚KjæŸÿS�&‰×†GS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰×†FS�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰×†ESC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰×†Da�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰×†CS�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰×†B7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰×†AK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰×†@S�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰×†?S�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰×†>aƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰×†=Q‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.`‰×†<)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰×†;'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰×†:)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰×†9)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰×…s7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰×…r)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰×…q)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰×…p'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰×…o)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰×…n�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰×…m‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰×…l's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰×…k ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰×…j)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰×…i''余事勿å�–.余事勿å�–.�}‰×…hSƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰×…gaQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰×…fEƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰×…eEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰×…d)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰×…cE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰×…bE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬. "¢±üÃP å  ü < è " }  ï c $yãtÓšKü½ŠÐÓðHˆ¢^‰×…aS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰×…`S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰×…_S�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰×…^)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰×…]a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰×…\7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰×…[7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰×…ZS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰×…Y7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ..‰×…X77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰×…W'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰×…V7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰×…U7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰×…)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰×… 7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰×… 7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰×… S�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰×… E�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰×… E‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰×…Q5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰×…E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰×…''诸事ä¸�宜.诸事ä¸�宜.f‰×…S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰×…E‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰×…K‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰×…S]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰×…a‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰×…a�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰×„oe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰×„~a}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰×„}S�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰×„|)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰×„{7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰×„zSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔. бBÞ[ ï ¯ @ ¢ I � Ö ] , s G¢~ä*ânªpÅ$ÔhîŠ_‰×„yE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰×„xE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰×„wS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰×„vK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰×„ua�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�%‰×„tE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰×„sE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰×„rE‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰×„qS�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰×„+)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰×„*SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰×„)E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰×„()‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰×„'')诸事ä¸�宜.破屋.å��垣.�‰×„&E‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰×„%ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰×„$So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰×„#E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰×„"'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰×„!a�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰×„ S‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰×„S‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰×„Eu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰×„E�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰×„S�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰×„ECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰×„S� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰×„=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰×„E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰×„7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰×„Eaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养. ft,ÄN Û l ò ‘ K € ê † Ú ŒàŒ,vÓð(CæEÓ5Ífb‰×„auå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰×„E�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰×„E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰×„E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰×„Y�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.X‰×„E}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰×„)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰×„')诸事ä¸�宜.求医.破屋.�B‰×„ E‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰×ƒDEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰×ƒC_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰×ƒBE}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰×ƒA‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰×ƒ@Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰×ƒ?E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰×ƒ>E‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰×ƒ=S‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰×ƒ<'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰×ƒ;E‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰×ƒ:7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰×ƒ9S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰×ƒ8o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰×ƒ7EOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰×ƒ6E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰×ƒ5S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰×ƒ4S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰×ƒ3S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰×ƒ2S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰×ƒ1E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰×ƒ0SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰×ƒ/K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土. ‰SüX ­ m Ú p ð  j  FÎ’ô»éŒLåí%¥K K߉Q‰×ƒ.)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰×ƒ-7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰×ƒ,S_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.�%‰×ƒ+E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰×ƒ*Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰×ƒ)E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰×‚cE‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰×‚b'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰×‚aE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰×‚`E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰×‚_)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰×‚^E}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰×‚]S‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰×‚\7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰×‚[E�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰×‚Z)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰×‚Ya�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰×‚XE‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰×‚Woƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰×‚V7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰×‚US�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰×‚Ta‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰×‚SE�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰×‚Ra{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰×‚QS�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰×‚P7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰×‚O}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰×‚NE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰×‚MuA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰×‚L�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬. K’¸ Ý { ƒ Í q è â …Ö½ì®%a"�Ô…KŽK�?‰×‚K��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰×‚Jo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰×‚I� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.5‰×‚H)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰×‚G)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰×‚F)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰×‚E �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ö½S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ö½'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ö½E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ö½E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ö½aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ö½Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ö½S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ö½aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ö½a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ö½E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ö½E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ö½Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ö½a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ö½a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ö½S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ö½oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ö½Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ö½o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ö½ K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ö½ �';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马. =¸ è  K  @ ` ë ¤s“HB—Åá$†èì=�)‰Ö½ � �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ö½ �‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ö½ ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ö½o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ö½S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.�^‰Ö½)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Ö½'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰Ö½E�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Ö½)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰Ö½EƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰Ö½EYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰Ö¼:E‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Ö¼9'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰Ö¼8S�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰Ö¼7S‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰Ö¼6S�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰Ö¼5S‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰Ö¼4E‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Ö¼3)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰Ö¼2E‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰Ö¼1S‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰Ö¼0E‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰Ö¼/S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰Ö¼.a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖. ¹n• 8 “  ² ? \ + œ�N·sH Ç-V‹æ˜Ÿ;z¹I‰Ö¼-SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰Ö¼,S�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰Ö¼+S‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰Ö¼*oaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰Ö¼)S�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰Ö¼(S�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰Ö¼'){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ö¼&a�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰Ö¼%E‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰Ö¼$� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰Ö¼#��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.?‰Ö¼"7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ö¼!)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ö¼ )5行丧.安葬.作ç�¶.造畜椆栖.?‰Ö¼)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ö¼E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ö¼Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ö»WEƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰Ö»VE�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Ö»U'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Ö»TS‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰Ö»SS�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰Ö»RE�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰Ö»QS�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰Ö»PE‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰Ö»OS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰Ö»Ng�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰Ö»Mg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰Ö»LEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰Ö»KY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬. ÉUã¹ ÿ B ó v Ï g Ð L Fºl¯5µUyÛ;—É‘J8Éj‰Ö»JS�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰Ö»I)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰Ö»HK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰Ö»GSC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰Ö»F)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰Ö»ES‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰Ö»Do�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰Ö»C��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰Ö»B}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰Ö»AS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰Ö»@Suå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.{‰Ö»?E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ö»>)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Ö»=E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Ö»<E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ö»;E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰Ö»:)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰Ö»9)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Öºr)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰ÖºqE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰ÖºpS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰Öºo)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰Öºna�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰Öºmo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰Öºl=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰Öºka‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰Öºj5'探病.余事勿å�–.余事勿å�–.m‰Öºio}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰ÖºhS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬. Ð+¢( ¨  ­ Þ ] $ g Ô 6¦^¸e¹#„Dk®]ÑW™8Ðc‰Öºgaw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰ÖºfE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰Öºea�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰Öºdg)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Öºco� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Öºbo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰ÖºaYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰Öº`}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰Öº_E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Öº^)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰Öº]� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰Öº\u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰Öº[Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.M‰ÖºZCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰ÖºY)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰ÖºX)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰ÖºW7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰ÖºV)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰ÖºU ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰Öº ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰Öº ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰Öº S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰Öº )Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰Öº S�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰Öº E‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰Öº E�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÖºS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÖºS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰Öºa�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰Öºa�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÖºS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’. ·ŽNn § @ ª N ¶ 2 � H  È � 2Û¨è8�áz8ÓšM·�‰ÖºS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰Öºa‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰ÖºS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰Öº)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Ö¹E� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰Ö¹~S‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰Ö¹}}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰Ö¹|��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰Ö¹{��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Ö¹za�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰Ö¹ya�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Ö¹x��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰Ö¹wo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹..‰Ö¹v)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Ö¹u�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Ö¹t)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ö¹s'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Ö¹r7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Ö¹q'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Ö¹+'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Ö¹* ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰Ö¹)S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰Ö¹(E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰Ö¹'a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Ö¹&a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰Ö¹%S�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰Ö¹$K‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰Ö¹#S‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰Ö¹")_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰Ö¹!o}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬. �(1 · Í j # Ÿ Ä f , ë ™ ;ûºè<$SpÁGÖc‘=��6‰Ö¹ S‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰Ö¹aO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰Ö¹a‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰Ö¹S�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰Ö¹E�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰Ö¹S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰Ö¹7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰Ö¹g‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰Ö¹Y‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰Ö¹S‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Ö¹)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Ö¹��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰Ö¹o‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Ö¹EE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.;‰Ö¹)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Ö¹)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Ö¹7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Ö¹7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Ö¹)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ö¹ )�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Ö¸F'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Ö¸E ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰Ö¸DE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Ö¸C)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰Ö¸BS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰Ö¸AEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰Ö¸@K�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰Ö¸?Yƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰Ö¸>E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕. t¹y�; 8  Ü ? ö V ø š b ý ® ×u+[Zäj­fÌHaµt<‰Ö¸=S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰Ö¸<S‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰Ö¸;S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰Ö¸:SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰Ö¸9a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰Ö¸8S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰Ö¸77_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰Ö¸6K‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰Ö¸5S�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰Ö¸4S�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰Ö¸3aƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰Ö¸2Q‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰Ö¸1EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Ö¸0a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰Ö¸/E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰Ö¸.EC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰Ö¸-S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.J‰Ö¸,)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰Ö¸+)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ö¸*'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰Ö¸))�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Ö·c�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰Ö·b‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰Ö·a's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰Ö·` ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰Ö·_)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰Ö·^''余事勿å�–.余事勿å�–.�}‰Ö·]Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰Ö·\aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰Ö·[Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰Ö·ZEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰Ö·Y)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–. d@ì& �  ó g ( } ç x " × J©Ðû´ú=ýr/²/Ì d�"‰Ö·XE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰Ö·WE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰Ö·VS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰Ö·US�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰Ö·TS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰Ö·S)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰Ö·Ra�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰Ö·Q7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰Ö·P7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰Ö·OS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰Ö·N7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰Ö·M)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰Ö·LK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰Ö·KS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰Ö·JS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Ö·I� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.F‰Ö·H7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Ö·G7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Ö·FS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Ö·EE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Ö¶~E‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰Ö¶}Q5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰Ö¶|E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰Ö¶{''诸事ä¸�宜.诸事ä¸�宜.f‰Ö¶zS� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Ö¶yE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰Ö¶xK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Ö¶wS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Ö¶va‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’. Fb O –  ì 3 Ö  b > ¤ê=öQ™S…ä”(®JûF š/ÉF~‰Ö¶ua�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Ö¶toe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Ö¶sa}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰Ö¶rS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Ö¶q)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰Ö¶p7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰Ö¶oSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰Ö¶nE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰Ö¶mE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰Ö¶lS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰Ö¶kK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰Ö¶ja�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰Ö¶io‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰Ö¶hEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Ö¶ga‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰Ö¶fE‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Ö¶e)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Ö¶d�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.�4‰Ö¶cE‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Ö¶b)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Ö¶a')诸事ä¸�宜.破屋.å��垣.�‰Ö¶E‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Ö¶ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰Ö¶So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰Ö¶E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰Ö¶'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰Ö¶a�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰Ö¶S‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰Ö¶S‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰Ö¶Eu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰Ö¶E�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财. ¯†%ß ~  n t © À ­gäC—WïNÜ>Öo ±MÊ^¯j‰Ö¶S�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰Ö¶ECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰Ö¶S� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰Ö¶=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰Ö¶ E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰Ö¶ 7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰Ö¶ Eaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰Ö¶ auå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰Ö¶ E�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰Ö¶E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰Ö¶E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰Ö¶Y�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰Ö¶7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰Ö¶)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰Ö¶}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰Ö¶E‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰Ö¶��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.A‰Ö¶_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÖµE}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Öµ~‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰Öµ}Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰Öµ4E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰Öµ3E‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰Öµ2S‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Öµ1'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰Öµ0E‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰Öµ/7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰Öµ.S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Öµ-o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰Öµ,EOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰Öµ+E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰Öµ*S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬. �mƒ š ý ° ® Ù a % ‡ N|ßxØWÇ •Hó‡1¥]õ �j‰Öµ)S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰Öµ(S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰Öµ'S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰Öµ&E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰Öµ%SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰Öµ$K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰Öµ#)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰Öµ"7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰Öµ!S_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰Öµ E]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÖµS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÖµS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Öµ}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Öµ}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Öµ{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.b‰ÖµE�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Öµ)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰Ö´SE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰Ö´RS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Ö´Q7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Ö´PE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Ö´O)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Ö´Na�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Ö´ME‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Ö´Loƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰Ö´K7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Ö´JS�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Ö´Ia‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Ö´HE�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Ö´Ga{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Ö´FS�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬. ɱ^.†/ ÷ Y ( ¶ ~ >   ú ¥ XÒÙf\Ÿ!\¯X´ É;‰Ö´E7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰Ö´D}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰Ö´CE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰Ö´BuA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Ö´A�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰Ö´@��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰Ö´?o�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Ö´>� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰Ö´=S‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰Ö´<aSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰Ö´;S�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰Ö´:Sƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Ö´97_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.:‰Ö´8'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ö´7E‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ö´6E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ö´5aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.� ‰Õï��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Õïa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Õï 'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Õï a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Õï ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Õï �37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Õï 'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Õïa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Õï'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Õï)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Õï)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Õï'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Õï)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Õï)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.û¢û } êáNE2ϼ‚ !S�q�I2019040505清明节4月5日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´4月1日(周一)~2019å¹´4月4日(周四)请å�‡4天,å�¯æ‹¼9天清明节å°�é•¿å�‡ã€‚[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]‚M !)�Yƒ2019050104劳动节5月1日放å�‡æ‹¼å�‡å»ºè®®ï¼š4月28日(周日)~4月30日(周二)请å�‡3天,å�¯æ‹¼8天劳动节å°�é•¿å�‡ã€‚[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}]‚ !S�q�I2019040504清明节4月5日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´4月1日(周一)~2019å¹´4月4日(周四)请å�‡4天,å�¯æ‹¼9天清明节å°�é•¿å�‡ã€‚[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]‚ !S�q�I2019040503清明节4月5日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´4月1日(周一)~2019å¹´4月4日(周四)请å�‡4天,å�¯æ‹¼9天清明节å°�é•¿å�‡ã€‚[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]„ !�M�q„?2019020503春节2月4日至10日放å�‡è°ƒä¼‘,共7天。2月2日(星期六)ã€�2月3日(星期日)上ç�­æ‹¼å�‡å»ºè®®ï¼š2019å¹´2月11日(周一)-2019å¹´2月15日(周五)请å�‡5天,å�¯æ‹¼14天春节å°�é•¿å�‡ã€‚[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]�!�/M2019020403除夕除夕农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2019-2-4","status":1}]„ !�M�q„?2019020502春节2月4日至10日放å�‡è°ƒä¼‘,共7天。2月2日(星期六)ã€�2月3日(星期日)上ç�­æ‹¼å�‡å»ºè®®ï¼š2019å¹´2月11日(周一)-2019å¹´2月15日(周五)请å�‡5天,å�¯æ‹¼14天春节å°�é•¿å�‡ã€‚[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]�!�/M2019020402除夕除夕农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2019-2-4","status":1}]‚r !�W�k‚2019010102元旦2018å¹´12月30日至2019å¹´1月1日放å�‡è°ƒä¼‘,共3天。2018å¹´12月29日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š2019å¹´1月2日(周三)~2019å¹´1月4日(周五)请å�‡3天,å�¯æ‹¼8天元旦å°�é•¿å�‡ã€‚[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status":1}]„ ! �M�q„?2019020501春节2月4日至10日放å�‡è°ƒä¼‘,共7天。2月2日(星期六)ã€�2月3日(星期日)上ç�­æ‹¼å�‡å»ºè®®ï¼š2019å¹´2月11日(周一)-2019å¹´2月15日(周五)请å�‡5天,å�¯æ‹¼14天春节å°�é•¿å�‡ã€‚[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]�! �/M2019020401除夕除夕农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2019-2-4","status":1}]‚q ! �W�k‚2019010101元旦2018å¹´12月30日至2019å¹´1月1日放å�‡è°ƒä¼‘,共3天。2018å¹´12月29日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š2019å¹´1月2日(周三)~2019å¹´1月4日(周五)请å�‡3天,å�¯æ‹¼8天元旦å°�é•¿å�‡ã€‚[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status  ¼Œ ú ò } êáNE2ϼ‚ !S�q�I2019040505清明节4月5日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´4月1日(周一)~2019å¹´4月4日(周四)请å�‡4天,å�¯æ‹¼9天清明节å°�é•¿å�‡ã€‚[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]‚M !)�Yƒ2019050104劳动节5月1日放å�‡æ‹¼å�‡å»ºè®®ï¼š4月28日(周日)~4月30日(周二)请å�‡3天,å�¯æ‹¼8天劳动节å°�é•¿å�‡ã€‚[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}]‚ !S�q�I2019040504清明节4月5日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´4月1日(周一)~2019å¹´4月4日(周四)请å�‡4天,å�¯æ‹¼9天清明节å°�é•¿å�‡ã€‚[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]‚ !S�q�I2019040503清明节4月5日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´4月1日(周一)~2019å¹´4月4日(周四)请å�‡4天,å�¯æ‹¼9天清明节å°�é•¿å�‡ã€‚[{"date":"2019-4-5","status":1},{"date":"2019-4-6","status":1},{"date":"2019-4-7","status":1}]„ !�M�q„?2019020503春节2月4日至10日放å�‡è°ƒä¼‘,共7天。2月2日(星期六)ã€�2月3日(星期日)上ç�­æ‹¼å�‡å»ºè®®ï¼š2019å¹´2月11日(周一)-2019å¹´2月15日(周五)请å�‡5天,å�¯æ‹¼14天春节å°�é•¿å�‡ã€‚[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]�!�/M2019020403除夕除夕农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2019-2-4","status":1}]„ !�M�q„?2019020502春节2月4日至10日放å�‡è°ƒä¼‘,共7天。2月2日(星期六)ã€�2月3日(星期日)上ç�­æ‹¼å�‡å»ºè®®ï¼š2019å¹´2月11日(周一)-2019å¹´2月15日(周五)请å�‡5天,å�¯æ‹¼14天春节å°�é•¿å�‡ã€‚[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]�!�/M2019020402除夕除夕农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2019-2-4","status":1}]‚r !�W�k‚2019010102元旦2018å¹´12月30日至2019å¹´1月1日放å�‡è°ƒä¼‘,共3天。2018å¹´12月29日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š2019å¹´1月2日(周三)~2019å¹´1月4日(周五)请å�‡3天,å�¯æ‹¼8天元旦å°�é•¿å�‡ã€‚[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status":1}]„ ! �M�q„?2019020501春节2月4日至10日放å�‡è°ƒä¼‘,共7天。2月2日(星期六)ã€�2月3日(星期日)上ç�­æ‹¼å�‡å»ºè®®ï¼š2019å¹´2月11日(周一)-2019å¹´2月15日(周五)请å�‡5天,å�¯æ‹¼14天春节å°�é•¿å�‡ã€‚[{"date":"2019-2-4","status":1},{"date":"2019-2-2","status":2},{"date":"2019-2-3","status":2},{"date":"2019-2-5","status":1},{"date":"2019-2-6","status":1},{"date":"2019-2-7","status":1},{"date":"2019-2-8","status":1},{"date":"2019-2-9","status":1},{"date":"2019-2-10","status":1}]�! �/M2019020401除夕除夕农历腊月最å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2019-2-4","status":1}]‚q ! �W�k‚2019010101元旦2018å¹´12月30日至2019å¹´1月1日放å�‡è°ƒä¼‘,共3天。2018å¹´12月29日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š2019å¹´1月2日(周三)~2019å¹´1月4日(周五)请å�‡3天,å�¯æ‹¼8天元旦å°�é•¿å�‡ã€‚[{"date":"2018-12-29","status":2},{"date":"2018-12-31","status":1},{"date":"2019-1-1","status":1},{"date":"2018-12-30","status":1}] ¨òÅ㶘ԧ‰zkM\> /óäÆÕ·¨!2019100111!2019100110!2019091310!2019100109!2019091309!2019091308!2019060707!2019060706!2019050106!2019060705!2019050105 !2019040505 !2019050104 !2019040504 !2019040503 !2019020503!2019020403!2019020502!2019020402!2019010102!2019020501!2019020401 ! 2019010101 а � M : ' ÷òÚÕЄ !�C�[„Q2019100111 国庆节10月1日至10月7日放å�‡ï¼Œ9月29日(星期日)ã€�10月12日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š9月29日(周日)~9月30日(周一)请2天å�‡ï¼Œå�¯æ‹¼10天国庆节å°�é•¿å�‡ã€‚[{"date":"2019-10-1","status":1},{"date":"2019-9-29","status":2},{"date":"2019-10-2","status":1},{"date":"2019-10-3","status":1},{"date":"2019-10-4","status":1},{"date":"2019-10-7","status":1},{"date":"2019-10-12","status":2},{"date":"2019-10-5","status":1},{"date":"2019-10-6","status":1}]„ !�C�[„Q2019100110 国庆节10月1日至10月7日放å�‡ï¼Œ9月29日(星期日)ã€�10月12日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š9月29日(周日)~9月30日(周一)请2天å�‡ï¼Œå�¯æ‹¼10天国庆节å°�é•¿å�‡ã€‚[{"date":"2019-10-1","status":1},{"date":"2019-9-29","status":2},{"date":"2019-10-2","status":1},{"date":"2019-10-3","status":1},{"date":"2019-10-4","status":1},{"date":"2019-10-7","status":1},{"date":"2019-10-12","status":2},{"date":"2019-10-5","status":1},{"date":"2019-10-6","status":1}]‚ !U�s�O2019091310 中秋节9月13日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´9月9日(周一)~2019å¹´9月12日(周四)请å�‡4天,å�¯æ‹¼9天中秋节å°�é•¿å�‡ã€‚[{"date":"2019-9-13","status":1},{"date":"2019-9-14","status":1},{"date":"2019-9-15","status":1}]„ !�C�[„Q2019100109 国庆节10月1日至10月7日放å�‡ï¼Œ9月29日(星期日)ã€�10月12日(星期六)上ç�­ã€‚拼å�‡å»ºè®®ï¼š9月29日(周日)~9月30日(周一)请2天å�‡ï¼Œå�¯æ‹¼10天国庆节å°�é•¿å�‡ã€‚[{"date":"2019-10-1","status":1},{"date":"2019-9-29","status":2},{"date":"2019-10-2","status":1},{"date":"2019-10-3","status":1},{"date":"2019-10-4","status":1},{"date":"2019-10-7","status":1},{"date":"2019-10-12","status":2},{"date":"2019-10-5","status":1},{"date":"2019-10-6","status":1}]‚ !U�s�O2019091309 中秋节9月13日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´9月9日(周一)~2019å¹´9月12日(周四)请å�‡4天,å�¯æ‹¼9天中秋节å°�é•¿å�‡ã€‚[{"date":"2019-9-13","status":1},{"date":"2019-9-14","status":1},{"date":"2019-9-15","status":1}]‚ !U�s�O2019091308中秋节9月13日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´9月9日(周一)~2019å¹´9月12日(周四)请å�‡4天,å�¯æ‹¼9天中秋节å°�é•¿å�‡ã€‚[{"date":"2019-9-13","status":1},{"date":"2019-9-14","status":1},{"date":"2019-9-15","status":1}]‚ !S�q�I2019060707端å�ˆèŠ‚6月7日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´6月3日(周一)~2019å¹´6月6日(周四)请å�‡4天,å�¯æ‹¼9天端å�ˆèŠ‚å°�é•¿å�‡ã€‚[{"date":"2019-6-7","status":1},{"date":"2019-6-8","status":1},{"date":"2019-6-9","status":1}]‚ !S�q�I2019060706端å�ˆèŠ‚6月7日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´6月3日(周一)~2019å¹´6月6日(周四)请å�‡4天,å�¯æ‹¼9天端å�ˆèŠ‚å°�é•¿å�‡ã€‚[{"date":"2019-6-7","status":1},{"date":"2019-6-8","status":1},{"date":"2019-6-9","status":1}]‚M !)�Yƒ2019050106劳动节5月1日放å�‡æ‹¼å�‡å»ºè®®ï¼š4月28日(周日)~4月30日(周二)请å�‡3天,å�¯æ‹¼8天劳动节å°�é•¿å�‡ã€‚[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}]‚ !S�q�I2019060705端å�ˆèŠ‚6月7日放å�‡ï¼Œä¸Žå‘¨æœ«è¿žä¼‘。拼å�‡å»ºè®®ï¼š2019å¹´6月3日(周一)~2019å¹´6月6日(周四)请å�‡4天,å�¯æ‹¼9天端å�ˆèŠ‚å°�é•¿å�‡ã€‚[{"date":"2019-6-7","status":1},{"date":"2019-6-8","status":1},{"date":"2019-6-9","status":1}]‚M !)�Yƒ2019050105劳动节5月1日放å�‡æ‹¼å�‡å»ºè®®ï¼š4月28日(周日)~4月30日(周二)请å�‡3天,å�¯æ‹¼8天劳动节å°�é•¿å�‡ã€‚[{"date":"2019-5-1","status":1},{"date":"2019-5-2","status":1},{"date":"2019-5-3","status":1},{"date":"2019-5-4","status":1},{"date":"2019-4-28","status":2},{"date":"2019-5-5","status":2}] #X¶ £ · . #ƒd !� �…2020100110 中秋节10月1日至10月8日放å�‡8天,9月27日,10月10日上ç�­10月9日至10月10日请å�‡2天,与周末连休å�¯æ‹¼11天长å�‡ã€‚[{"date":"2020-10-1","status":1},{"date":"2020-10-2","status":1},{"date":"2020-10-3","status":1},{"date":"2020-10-4","status":1},{"date":"2020-10-5","status":1},{"date":"2020-10-6","status":1},{"date":"2020-10-7","status":1},{"date":"2020-10-8","status":1},{"date":"2020-9-27","status":2},{"date":"2020-10-10","status":2}]‚! !o�1‚2020062506端å�ˆèŠ‚6月25日至6月27日放å�‡3天,6月28日上ç�­2020å¹´6月22日至2020å¹´6月24日请å�‡3天,与周末连休å�¯æ‹¼8天长å�‡ã€‚[{"date":"2020-6-25","status":1},{"date":"2020-6-26","status":1},{"date":"2020-6-27","status":1},{"date":"2020-6-28","status":2}]ƒ !��3ƒC2020050105劳动节5月1日至5月5日放å�‡5天,4月26日,5月9日上ç�­2020å¹´4月26日至2020å¹´4月30日请å�‡5天,与周末连休å�¯æ‹¼11天长å�‡ã€‚[{"date":"2020-5-1","status":1},{"date":"2020-5-2","status":1},{"date":"2020-5-3","status":1},{"date":"2020-5-4","status":1},{"date":"2020-5-5","status":1},{"date":"2020-4-26","status":2},{"date":"2020-5-9","status":2}]�i !G�/�I2020040404清明节4月4日至4月6日放å�‡3天2020å¹´4月7日至2020å¹´4月10日请å�‡4天,与周末连休å�¯æ‹¼9天长å�‡ã€‚[{"date":"2020-4-4","status":1},{"date":"2020-4-5","status":1},{"date":"2020-4-6","status":1}]„ ! ��3…K2020012501春节1月24æ—¥(除夕)至1月30日放å�‡7天,1月19日,2月1日上ç�­2020å¹´1月19日至2020å¹´1月23日请å�‡5天,与周末连休å�¯æ‹¼13天长å�‡ã€‚[{"date":"2020-1-24","status":1},{"date":"2020-1-25","status":1},{"date":"2020-1-26","status":1},{"date":"2020-1-27","status":1},{"date":"2020-1-28","status":1},{"date":"2020-1-29","status":1},{"date":"2020-1-30","status":1},{"date":"2020-1-19","status":2},{"date":"2020-1-31","status":1},{"date":"2020-2-1","status":1},{"date":"2020-2-2","status":1}]�! 7�/O2020012401除夕1月24日放å�‡ä¸€å¤©å†œåŽ†è…Šæœˆæœ€å�Žä¸€å¤©ä¸ºé™¤å¤•,å�³å¤§å¹´åˆ�一å‰�夜,å�ˆç§°ä¸ºå¹´ä¸‰å��。[{"date":"2020-1-24","status":1}]�%! 5�?M2020010101元旦1月1日放å�‡ä¸€å¤©2019å¹´12月30日和2019å¹´12月31日请å�‡ä¸¤å¤©ï¼Œä¸Žå‘¨æœ«è¿žä¼‘å�¯æ‹¼5天å°�é•¿å�‡ã€‚[{"date":"2020-1-1","status":1}] ˜òãÔŶ§˜!2020100110!2020062506!2020050105!2020040404!2020012501!2020012401 ! 2020010101 !Km.J Z )  ¡ I m J ¥ ö P �çqGÃ’ÿ.Eðg£dÑWÇ�K=‰ÕïQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Õï)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Õî)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Õî~)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Õî} �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Õî|S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Õî{'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÕîzE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÕîyE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÕîxaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÕîwSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÕîvS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.� ‰Õîu)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰Õît'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰Õîs�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰Õîr'5余事勿å�–.解除.余事勿å�–.q‰Õîq�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Õî*a�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Õî))‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Õî('C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Õî'�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰Õî& ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰Õî%}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰Õî$''诸事ä¸�宜.诸事ä¸�宜.�V‰Õî#ƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰Õî"Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Õî!)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Õî ''诸事ä¸�宜.诸事ä¸�宜.,‰Õî'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰ÕîEƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰Õî)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Õî'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰ÕîE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑. "Þ² × ¬ o + í ¥ @  º N  � î YÂ'ê�7øxè§2`ëºÚ�‰Þ�%‰Õî)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰ÕîEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰ÕîEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰ÕîE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Õî'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰ÕîS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÕîS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰ÕîS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.<‰ÕîEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Õî}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Õîo�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Õî'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Õî'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Õî '{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰ÕíG'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰ÕíF� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰ÕíE}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰ÕíDg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰ÕíCg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰ÕíB}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰ÕíA'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Õí@)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Õí?)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Õí>'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Õí=)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Õí<)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Õí;']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Õí:7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Õí9)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Õí8)5行丧.安葬.作ç�¶.造畜椆栖.?‰Õí7)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Õí6E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Õí5Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Õí4Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财. !c˜}> w ë � à f æ ­  ¶ w TøB™h² ˜KŠûz/y#òc� ‰Õí3E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Õí2'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Õí1S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰Õí0S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.�0‰Õí/ ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Õí.'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Õí-a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Õí,S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Õí+'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Õí*o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Õí)'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Õìba� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Õìa}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Õì` ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Õì_'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Õì^��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Õì] ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Õì\E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Õì[''诸事ä¸�宜.诸事ä¸�宜.:‰ÕìZ'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰ÕìYoa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰ÕìXE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰ÕìWE5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰ÕìVE�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰ÕìU)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰ÕìTE‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰ÕìSE_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÕìRE�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰ÕìQ)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰ÕìP)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰ÕìO)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰ÕìNE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰ÕìMS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马. !�1°w º ' ‰ ù ± b ¸ f  ä ¥ @Ô‰bÄ.¡NŸ< ž_´7��!‰ÕìL)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰ÕìKa�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.�%‰ÕìJ}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰ÕìI}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰ÕìHE�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰ÕìG'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰ÕìF'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰ÕìE'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Õë)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Õë~'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Õë}��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Õë|� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Õë{S�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Õëza�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Õëy}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Õëx)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Õëw)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Õëv)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰Õëu'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Õët)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Õës)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰ÕërCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Õëq)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰Õëp)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰Õëo7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰Õën)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰Õëm ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰Õël ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰Õëk ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÕëjS‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰Õëi)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÕëhS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰ÕëgE‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬. #b¶… ˆ , ”  { & õ ¦ n  ¹ † 7Ô…=îÞV%‡ßqÿœ#{ä³�‰Õëfo�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Õëe'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Õëd}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Õëc ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Õëb�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Õëa'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Õë}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Õë}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Õë ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰ÕëE�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Õë'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Õë}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Õëo�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Õë�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Õë7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Õë)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Õë)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Õë'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Õë)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Õë)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Õë �èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Õë )�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Õë 'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Õë 7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Õë 'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Õë'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Õë ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰ÕëS�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÕëE�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰Õëa_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Õëa�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰ÕëS�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.,‰Õë'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Õë}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Õêo�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土. $ÉX'ˆ ñ À  Ø X Þ ô ‘ J Æ 0ë�SÀb"½fCô¥tÖ2c·@‘úÉ,‰Õê~'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Õê}a�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Õê6 ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Õê5a�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Õê4)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰Õê3E�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Õê2'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Õê1E‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰Õê0E�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Õê/'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Õê.)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Õê-)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Õê,''诸事ä¸�宜.诸事ä¸�宜.R‰Õê+)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Õê*�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Õê))_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Õê()�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Õê'7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Õê&7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Õê%)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Õê$)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Õê#'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Õê" ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰Õê!E�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Õê )må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰ÕêS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰ÕêEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰ÕêK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.{‰Õê}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Õêa5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰ÕêE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Õê'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÕéS7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰ÕéR��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰ÕéQ'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰ÕéPa�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬. &ÓÍ·†ìk r Ñ † [  ë Q ËÈ¥lφæˆ*ò�>ýµW&Áwm½~Ó�%‰ÕéO ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰ÕéN'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰ÕéM��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰ÕéL ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰ÕéK'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰ÕéJ)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰ÕéI)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰ÕéH'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰ÕéG)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰ÕéF)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰ÕéE7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰ÕéD)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰ÕéC)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÕéB'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰ÕéA)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Õé@�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰Õé?‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰Õé>'s诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰Õé= ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰Õé<)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰Õé;''余事勿å�–.余事勿å�–.�}‰Õé:Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰Õé9aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.,‰Õé8'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Õé7 ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Õé6'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Õé5'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Õèn}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Õèm�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Õèl'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Õèk}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Õèj}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Õèi'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Õèh7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Õèga�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Õèf'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Õèe' 诸事ä¸�宜..‰Õèd77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔. ]<W ô 4 ~ L { Á d €’5ü܈²�ă¾s:ëœ]:‰Õèc'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Õèb7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Õèa7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Õè`)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Õè_7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Õè^7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Õè]S�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Õè\E�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Õè[E‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰ÕèZQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰ÕèYE�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰ÕèX''诸事ä¸�宜.诸事ä¸�宜.f‰ÕèWS� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰ÕèVE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰ÕèUK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰ÕèTS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.<‰ÕèSEEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰ÕèRE‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰ÕèQE5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Õè E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Õè Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Õè Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰ÕèE}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰ÕèE‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Õè/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Õè'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰ÕèE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Õè)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰ÕèE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰ÕèE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰ÕèE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰ÕçE‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱. z£ß: À " � æ { W ¹ y Û ”ìU›âi8"S®Šð6îz�‰Õç~S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Õç})ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Õç|SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Õç{E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Õçz)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Õçy')诸事ä¸�宜.破屋.å��垣.�‰ÕçxE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Õçwƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰ÕçvSo动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰ÕçuE‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰Õçt'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰Õçsa�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰ÕçrS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰ÕçqS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.�‰Õçpo�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Õço}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰Õçn'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Õçm7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Õç%'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Õç$E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Õç#')诸事ä¸�宜.解除.æ²�æµ´.f‰Õç"�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Õç!�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Õç )‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Õço�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Õç� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰ÕçE‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰ÕçE‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰ÕçE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑. ‰Uu= à m ì ] Ç … à A ö YÆ0Ì Ò&[Òr¼_6nJ‰�;‰Õç)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Õç')诸事ä¸�宜.求医.破屋.�B‰ÕçE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰ÕçEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Õç_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÕçE}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Õç‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÕçSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÕçE�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÕçE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÕçS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Õç'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÕçE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰Õç 7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰Õç S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.� ‰Õç }�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Õç }�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Õç 'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÕæC��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰ÕæBE‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰ÕæA'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰Õæ@E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰Õæ?E�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰Õæ>E�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Õæ=)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Õæ<)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Õæ;'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Õæ:E‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Õæ9E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜. Ð%Ã Ë  ¹ 0 * ¸  € @¢ ËSy@nÑj£rª*ÐU‰Õæ8Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Õæ7E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Õæ6E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Õæ5'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰Õæ4E‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰Õæ3E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Õæ2)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰Õæ1E}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰Õæ0S‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Õæ/7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Õæ.E�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Õæ-)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Õæ,a�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Õæ+E‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Õæ*oƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.�‰Õæ)a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Õæ('a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Õæ'a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Õæ&��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Õæ%�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.‚‰Õ Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Õ ~a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Õ }a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Õ |S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Õ {oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Õ zSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Õ yo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬. O0b “ Z ˆ ¨ w á ? © %LUót;~àBF—)O�T‰Õ xK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Õ w�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Õ v� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Õ u�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Õ t��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Õ so�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Õ rS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Õ q)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Õ pK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Õ oEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Õ nSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Õ maƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Õ lS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Õ kS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Õ ja�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Õ i��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Õ h��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Õ g'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�Z‰Õ fS‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰Õ eE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Õ d)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰Õ cE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰Õ bS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰Õ aE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕. É[Ûz Ü E ¥ e | é  º Oô…®ã>ðp÷“Ò_,É^‰Õ S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰Õ a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰Õ SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰Õ S�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰Õ S‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰Õ oaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰Õ S�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰Õ S�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰Õ ){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Õ a�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰Õ E‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰Õ � ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰Õ ��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰Õ  7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰Õ  Sk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰Õ  S� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰Õ  ��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰Õ  a{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰Õ g�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰Õ Y‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰Õ )_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰Õ �Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰Õ 7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰Õ a�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.\‰Õ E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰Õ S�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰Õ E‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�. �_É, � Ä N ä ? ê M Qñw×3e-æÔeÓ~úh��E‰ÕŸS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰ÕŸ~g�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰ÕŸ}g�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰ÕŸ7Em动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰ÕŸ6Y�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰ÕŸ5S�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰ÕŸ4)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰ÕŸ3K‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÕŸ2SC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰ÕŸ1)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰ÕŸ0S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰ÕŸ/o�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰ÕŸ.��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰ÕŸ-}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÕŸ,S‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÕŸ+Suå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÕŸ*aƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÕŸ)o�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÕŸ(S_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÕŸ'}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰ÕŸ&a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰ÕŸ%a�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰ÕŸ$�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰ÕŸ#}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰ÕŸ"a�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰ÕŸ!)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰ÕŸ )‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土. ÇÏ�© m  X  J ” : ¤ Åì/ÞRØ”¹Q¦4 P“DÇx‰ÕŸa�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰ÕŸo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰ÕŸ=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰ÕŸa‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰ÕŸ5'探病.余事勿å�–.余事勿å�–.m‰ÕŸo}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰ÕŸS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰ÕžRaw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰ÕžQE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰ÕžPa�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰ÕžOg)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰ÕžNo� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰ÕžMo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰ÕžLYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰ÕžK}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰ÕžJE‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰ÕžI)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰ÕžH� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰ÕžGu�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰ÕžFEwå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰ÕžEo‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰ÕžDa‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰ÕžCEm动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰ÕžBS‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰ÕžAa{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Õž@�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Õž?��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Õž>S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Õž='_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Õž<'C诸事ä¸�宜.解除.å��垣.余事勿å�–. ='¼g ­ Ñ  a ¶ E£,aüÃ:và ‚ˆù�¾=|‰Õž;S�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰Õž:E‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰Õž9E�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰Õž8S�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰Õž7S�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰Õž6a�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰Õž5a�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰Õ�oS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰Õ�nS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰Õ�ma‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰Õ�lS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰Õ�k)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Õ�jE� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰Õ�iS‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰Õ�h}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰Õ�g��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰Õ�f��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Õ�ea�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰Õ�da�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Õ�c��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰Õ�bo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰Õ�aE‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰Õ�`a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰Õ�_aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰Õ�^E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Õ�]S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�. .‚I j ™ ¶  �  ©×ƒÇU5nq‰^�z‰Õ�\�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Õ�[� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Õ�Z��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Õ�Y_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Õ�X}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.W‰Õ�Wa_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Õ�Va�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰Õ�US�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰Õ�TK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰Õ�SS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰Õ�R)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰Õ�Qo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰Õ� S‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰Õ� aO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰Õ� a‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰Õ�S�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰Õ�E�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰Õ�S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰Õ�7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰Õ�g‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰Õ�Y‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰Õ�S‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Õ�)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Õ���Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰Õœo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养. ‚ŠS r î §  [  B KÑçIÖ¥Úþ`˜eŽÃ‚<‰Õœ~EE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Õœ}}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Õœ|S‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Õœ{��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Õœza�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Õœyo‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Õœx��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰ÕœwK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰ÕœvS‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Õœu'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Õœt� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Õœso�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.�d‰ÕœrEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰ÕœqK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰ÕœpYƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰ÕœoE‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰ÕœnS7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÕœmS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰Õœ&S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰Õœ%SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰Õœ$a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰Õœ#S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰Õœ"7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰Õœ!K‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰Õœ S�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÕœS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–. g½@½Z š ò « k ‚ - * ù X $2Âð�C»$ä'‚8hg�{‰Õœaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰ÕœQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰ÕœEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Õœa�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰ÕœE‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰ÕœEC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰ÕœS�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰Õœ)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰ÕœKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÕœS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰Õœ7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Õœ7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Õœaƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Õœa‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÕœEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Õœ�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Õœ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�}‰Õœ Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰Õœ aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰Õœ Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰Õœ EC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰Õœ )m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰Õ›CE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰Õ›BE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰Õ›AS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰Õ›@S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰Õ›?S�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰Õ›>)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–. b•/¬ ì ˜ Ò # x 9 y Û 9jÝ�Ç:™Àë¤ê-í b�"‰Õ›=a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰Õ›<7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰Õ›;7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰Õ›:S‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰Õ›97‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰Õ›8)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰Õ›7K‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰Õ›6S‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰Õ›5S�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Õ›4� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰Õ›3a‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Õ›2a_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Õ›1� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Õ›0}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Õ›/� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰Õ›.S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Õ›-)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Õ›,'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Õ›+ ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Õ›* ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.�@‰Õ›)K‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Õ›(S]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Õ›'a‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰Õ›&a�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Õ›%oe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Õš^a}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易. !Tœ­m þ `  M ¯ ¹ & � ;ÐHò¤÷° S ?žNâhµÇTn‰Õš]S�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Õš\)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰Õš[7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰ÕšZSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰ÕšYE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰ÕšXE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰ÕšWS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰ÕšVK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰ÕšUa�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰ÕšTo‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰ÕšSEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰ÕšRa‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰ÕšQE‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰ÕšP)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰ÕšO�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰ÕšN){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰ÕšM)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÕšL)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰ÕšKS� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰ÕšJ7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÕšI�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰ÕšHo�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰ÕšGEe开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰ÕšFa�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰ÕšEE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.�4‰ÕšDS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰ÕšCEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰ÕšBE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰ÕšAS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰Õ™{ECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰Õ™zS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰Õ™y=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰Õ™xE� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产. f˜"¯@ Æ e  T ¾ Ú ›  XçfÈ+»™øL ¤‘ó‹$Õfj‰Õ™w7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰Õ™vEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰Õ™uauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰Õ™tE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰Õ™sE�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰Õ™rE�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰Õ™qY�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰Õ™p7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰Õ™o)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰Õ™n}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰Õ™mE‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰Õ™l��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰Õ™k�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰Õ™jE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰Õ™iE�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Õ™h}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰Õ™gE�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Õ™f�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Õ™e� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Õ™dE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Õ™c'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Õ™b)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�‰Õ™aS�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Õ™`o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰Õ™_EOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰Õ™^E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰Õ™]S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰Õ™S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰Õ™S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰Õ™S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰Õ™E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅. NSüX ­ m Ú p ð  j  Ý o+|ßMéiÉH¸û†9äx"–NC‰Õ™SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰Õ™K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰Õ™)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰Õ™ 7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰Õ™ S_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰Õ™ E]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰Õ™ S�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰Õ™ S‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Õ™}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Õ™}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Õ™{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Õ™�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Õ™)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Õ™u�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰Õ™)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Õ™aa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰Õ™S‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Õ˜'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰Õ˜~S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Õ˜}'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Õ˜|'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.H‰Õ˜{7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Õ˜zS�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Õ˜ya‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Õ˜3E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Õ˜2a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Õ˜1S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰Õ˜07Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰Õ˜/}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰Õ˜.E‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰Õ˜-uA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Õ˜,�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬. ½&K é ñ ; ß V ± N  qç‰Ý?Ý4z3:Çq½‚½�?‰Õ˜+��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰Õ˜*o�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Õ˜)� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰Õ˜(S‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰Õ˜'aSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰Õ˜&S�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰Õ˜%Sƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Õ˜$7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰Õ˜#o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Õ˜"��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Õ˜!}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Õ˜ }�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰Õ˜E‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰Õ˜Eå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Õ˜� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Õ˜� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Õ˜'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Õ˜'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Õ˜E‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.�‰Õ˜a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Õ˜a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Õ˜S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Õ˜oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÔÒoSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÔÒno‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÔÒmK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖. ï�?Z ÷ ' ð g 6 ÷ n = §  oë¹Ö:D¦ ]ïi‰ÔÒl�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÔÒk� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÔÒj�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÔÒi��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÔÒho�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÔÒgS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÔÒf)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÔÒeK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÔÒdEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÔÒcSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÔÒbaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÔÒaS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÔÒ`S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÔÒ_a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÔÒ^��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÔÒ]��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÔÒ\'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÔÒ[E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÔÒZ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÔÒY'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÔÒXa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÔÒW'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.�J‰ÔÒVE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰ÔÒUS{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰ÔÒTa‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰ÔÒSSQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰ÔÒRS�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬. y‘ÿª& ü x G ´ ! ƒ ì L #�&aö›Æ,UŠå—ž:y�;‰ÔÒQS‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰ÔÒ oaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰ÔÒ S�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰ÔÒS�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰ÔÒ){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÔÒa�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÔÒE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰ÔÒ� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰ÔÒ��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰ÔÒ7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÔÒSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÔÒS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰ÔÑ��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰ÔÑ~a{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰ÔÑ}g�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÔÑ|Y‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰ÔÑ{)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰ÔÑz�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰ÔÑy7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰ÔÑxa�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰ÔÑw�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰ÔÑv)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰ÔÑu'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰ÔÑt�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰ÔÑs'5余事勿å�–.解除.余事勿å�–.‰ÔÑrg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰ÔÑqEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰ÔÑpY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰ÔÑoS�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养. Y˜í{ Ö V Æ … ä N ±  IÓiÄoÒÖvšü\¸ê²k YB‰ÔÑn)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰ÔÑmK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÔÑ'SC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰ÔÑ&)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰ÔÑ%S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰ÔÑ$o�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰ÔÑ#��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰ÔÑ"}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÔÑ!S‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÔÑ Suå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÔÑaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÔÑo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÔÑS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÔÑ}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰ÔÑa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰ÔÑa�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰ÔÑ�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰ÔÑ}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰ÔÑa�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰ÔÑ)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰ÔÑ)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰ÔÑEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰ÔÑ}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰ÔÑo�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰ÔÑ'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰ÔÑ'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.m‰ÔÑo}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰ÔÑS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰ÔÑ aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–. ‰+¢ á R Ñ † Ð Ÿ ` y Ð =Ó(Ód tÕ•¼ÿ®"¨dê‰\‰ÔÑ E�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰ÔÑ a�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰ÔÑ g)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰ÔÑ o� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰ÔÐBo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰ÔÐAYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰ÔÐ@}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰ÔÐ?E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰ÔÐ>)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰ÔÐ=� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰ÔÐ<u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰ÔÐ;Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰ÔÐ:o‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰ÔÐ9a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰ÔÐ8Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰ÔÐ7S‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰ÔÐ6a{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰ÔÐ5�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰ÔÐ4��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰ÔÐ3S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰ÔÐ2'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰ÔÐ1'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰ÔÐ0 ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰ÔÐ/'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰ÔÐ.a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰ÔÐ-S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰ÔÐ,'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰ÔÐ+o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.�‰ÔÐ*a�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÔÐ)S‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’. �_´( ¦ ý . ¯ Ö k  \€Àe¹ôRÛ«ré%��‰ÔÐ(S�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰ÔÐ'a‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰ÔÐ&S�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰ÔÐ%)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰ÔÏ_E� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰ÔÏ^S‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰ÔÏ]}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰ÔÏ\��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰ÔÏ[��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰ÔÏZa�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰ÔÏYa�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰ÔÏX��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰ÔÏWo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰ÔÏVE‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰ÔÏUa‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰ÔÏTaQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰ÔÏSE�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰ÔÏRS‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰ÔÏQ�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰ÔÏP� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰ÔÏO��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰ÔÏN_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰ÔÏM}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰ÔÏL}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰ÔÏK}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜. ^$† ¾ = ‹ ´ é ¨ Ö *ñA^¯5ÄQ+oýšiü^�‰ÔÏJE�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰ÔÏI'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰ÔÏH'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰ÔÏG'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.m‰ÔÏFo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÔÏES‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÔÏDaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰ÔÏCa‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰ÔÏBS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰ÔÏAE�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰ÔÎ{S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰ÔÎz7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰ÔÎyg‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰ÔÎxY‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰ÔÎwS‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰ÔÎv)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰ÔÎu��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰ÔÎto‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰ÔÎsEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰ÔÎr}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰ÔÎqS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰ÔÎp��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰ÔÎoa�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰ÔÎno‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰ÔÎm��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰ÔÎlK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬. §.Ë� ù b " e À v ¦ ¥ /µø±“L¬�$|å´£r§�E‰ÔÎkS‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰ÔÎj'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰ÔÎi� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰ÔÎho�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰ÔÎg'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÔÎf}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰ÔÎe ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰ÔÎd�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰ÔÎc'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.�&‰ÔÎbS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÔÎaS�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÔÎ`SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰ÔÎ_a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÔÎ^S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰ÔÎ]7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰ÔÎK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰ÔÎS�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÔÎS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰ÔÎaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰ÔÎQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰ÔÎEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰ÔÎa�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰ÔÎE‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰ÔÎEC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰ÔÎ S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰ÔÎ )�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰ÔÎ KQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÔÎ S{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰ÔÎ 7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�. ÛsÒ ù $ Ý # f & C › XÛXõ5†ï¾ tCq'=KÛk‰ÔÎ7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰ÔÎaƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰ÔÎa‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÔÎEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰ÔÎ�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰ÔÎ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰ÔÎ'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰ÔÎ}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰ÔÎo�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰ÔÍ'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰ÔÍ~a�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰ÔÍ} ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.�:‰ÔÍ|E‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÔÍ{S{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÔÍzS�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰ÔÍyS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰ÔÍ3)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰ÔÍ2a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰ÔÍ17ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰ÔÍ07Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰ÔÍ/S‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰ÔÍ.7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰ÔÍ-)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÔÍ,K‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÔÍ+S‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÔÍ*S�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰ÔÍ)� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴. Ê[£] � î ž 2 ¸ T  P  ¤ n=œUÕ&{<|Þ<mà„Ê�4‰ÔÍ(a‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰ÔÍ'a_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰ÔÍ&� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰ÔÍ%}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰ÔÍ$� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰ÔÍ#S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰ÔÍ")‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰ÔÍ!'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰ÔÍ  ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰ÔÍ ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰ÔÍ}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰ÔÍa5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰ÔÍE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰ÔÍ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÔÍ7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰ÔÍ��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.n‰ÔÍS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰ÔÍ)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰ÔÍ7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰ÔÍSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰ÔÌNE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰ÔÌME�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰ÔÌLS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰ÔÌKK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰ÔÌJa�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰ÔÌIo‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰ÔÌHEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰ÔÌGa‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰ÔÌFE‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土. !ÛaÞ= ‘ Q é H Ö 8 Ð i  « GÄX³tC©xÚ5äQÈfûsÏ"ÛB‰ÔÌE)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰ÔÌD�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰ÔÌC){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰ÔÌB)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÔÌA)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰ÔÌ@S� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰ÔÌ?7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÔÌ>�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰ÔÌ=o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰ÔÌ<Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰ÔÌ;a�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰ÔÌ:E�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰ÔÌ9'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰ÔÌ8 ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰ÔÌ7'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰ÔÌ6'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰ÔÌ5}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.g‰ÔÌ4S� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰ÔÌ3=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰ÔÌ2E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰ÔÌ17�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰ÔËkEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰ÔËjauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰ÔËiE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰ÔËhE�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰ÔËgE�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰ÔËfY�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰ÔËe7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰ÔËd)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰ÔËc}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰ÔËbE‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰ÔËa��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰ÔË`�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基. Š€à_ Ï  � P û � 9 ­ e ý ‡ &É�±p�©j×'¶5—úŠk‰ÔË_E�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰ÔË^E�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰ÔË]}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰ÔË\E�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰ÔË[�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰ÔËZ� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰ÔËYE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰ÔËX'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰ÔËW)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰ÔËV)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰ÔËUEEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰ÔËTE‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰ÔËSE5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰ÔËRE}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰ÔËQEƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.n‰ÔËPS�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰ÔËOS�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰ÔËNE�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰ÔËMSEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰ÔËK�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰ÔË)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰ÔË7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰ÔËS_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰ÔËE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÔÊS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÔÊ~S‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰ÔÊ}}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰ÔÊ|}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰ÔÊ{{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰ÔÊz�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�. ˜Fÿ “ = ‰ Ì N ‰ Ü …á6öcÅ~Ö?ÌŒÉÚ+ÎŽü˜_‰ÔÊy)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰ÔÊxu�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰ÔÊw)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰ÔÊvaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰ÔÊuS‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰ÔÊt'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰ÔÊsS‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰ÔÊr'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰ÔÊq'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰ÔÊp7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰ÔÊoo�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰ÔÊn}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰ÔÊm'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰ÔÊl7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.� ‰ÔÊkS�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰ÔÊj7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰ÔÊi}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰ÔÊ#E‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰ÔÊ"uA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰ÔÊ!�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰ÔÊ ��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰ÔÊo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰ÔÊ� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰ÔÊS‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÔÊaSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÔÊS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰ÔÊSƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰ÔÊ7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰ÔÊo‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土. ²ž» æ ) ‹ í ñ B Ôú€5˜Ô/Ì›ïe[½[²�#‰ÔÊ��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰ÔÊ}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰ÔÊ}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰ÔÊE‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰ÔÊEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰ÔÊ� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰ÔÊ� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰ÔÊ'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰ÔÊ'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰ÔÊE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰ÔÊ 'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÔÊ }�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰ÔÊ }�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰ÔÊ 'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÔÊ ��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�U‰ÔÊo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÔÊK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÔÊ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÔÊ� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ô„_�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ô„^��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ô„]o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ô„\S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ô„[)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ô„ZK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ô„YEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ô„XSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–. P•:e Ë ô ) „ 6 ¶ = Ù oà \%œk,£rÜ:¤ GP�q‰Ô„Waƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ô„VS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ô„US�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ô„Ta�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ô„S��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ô„R��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ô„Q'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ô„PE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ô„O'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ô„N'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ô„Ma�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ô„L'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ô„K��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ô„Ja�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ô„I'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ô„Ha�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ô„G��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.�;‰Ô„FS‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰Ô„Eoaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰Ô„DS�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰Ô„CS�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰Ô„B){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ô„Aa�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÔƒzE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰Ôƒy� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰Ôƒx��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰Ôƒw7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÔƒvSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÔƒuS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖. „¤ È * Š æ  à ™ Î (÷Y¿I›j×D¦o/F³I„�?‰Ôƒt��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰Ôƒsa{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰Ôƒrg�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÔƒqY‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰Ôƒp)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰Ôƒo�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰Ôƒn7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰Ôƒma�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰Ôƒl�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰Ôƒk)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰Ôƒj'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰Ôƒi�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰Ôƒh'5余事勿å�–.解除.余事勿å�–.q‰Ôƒg�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Ôƒfa�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Ôƒe)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Ôƒd'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ôƒc�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�E‰ÔƒbK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÔƒaSC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰Ôƒ`)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰Ôƒ_S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰Ôƒ^o�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰Ôƒ]��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰Ôƒ}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÔƒS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÔƒSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰Ôƒaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑. PJðZ » { ¢ å ”  Ž J µ ƒFù“TÔDbÌ/’ÇQçBíP�‰Ôƒo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÔƒS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ôƒ}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰Ôƒa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Ôƒa�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Ôƒ�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Ôƒ }�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Ôƒ a�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Ôƒ )‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Ôƒ )‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰Ôƒ EE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Ôƒ}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Ôƒo�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Ôƒ'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Ôƒ'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Ôƒ'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Ôƒ'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Ôƒ� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ôƒ}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ôƒg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.?‰Ô‚g)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Ô‚~o� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Ô‚}o�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰Ô‚|YQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰Ô‚{}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰Ô‚zE‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Ô‚y)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰Ô‚2� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰Ô‚1u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰Ô‚0Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰Ô‚/o‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造. ÜP¥ ù 4 ’  P ë ² � Ë #±dÛ£“H’a";’ÿ•ê•Ü�3‰Ô‚.a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰Ô‚-Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰Ô‚,S‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰Ô‚+a{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Ô‚*�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Ô‚)��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Ô‚(S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Ô‚''_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Ô‚&'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Ô‚% ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Ô‚$'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Ô‚#a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Ô‚"S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Ô‚!'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Ô‚ o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Ô‚'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Ô‚a� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Ô‚}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Ô‚ ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Ô‚'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.4‰Ô‚)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Ô‚E� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰Ô‚S‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰Ô‚}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰Ô‚��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰Ô‚��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Ô�Oa�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰Ô�Na�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Ô�M��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£. án ô ƒ å O  o À ] , ¿ !€ÕIÇOÐ÷Œ7}¡á�:‰Ô�Lo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰Ô�KE‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰Ô�Ja‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰Ô�IaQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰Ô�HE�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Ô�GS‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰Ô�F�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Ô�E� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Ô�D��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Ô�C_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Ô�B}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Ô�A}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Ô�@}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Ô�?E�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Ô�>'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Ô�='C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ô�<'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ô�;)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ô�:'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ô�9��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ô�8� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Ô�7S�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.l‰Ô�6E�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰Ô�5S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰Ô�47‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰Ô�3g‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜. J¹ˆêB Ô b ÿ † Þ G  x  Ô -�ÇF”½ò±ß3úJ�K‰Ô�2Y‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰Ô�1S‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Ô€k)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Ô€j��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰Ô€io‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Ô€hEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Ô€g}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Ô€fS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Ô€e��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Ô€da�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Ô€co‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Ô€b��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰Ô€aK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Ô€`S‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Ô€_'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Ô€^� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Ô€]o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Ô€\'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ô€[}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Ô€Z ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Ô€Y�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Ô€X'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Ô€W}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ô€V}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ô€U ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Ô€TE�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ô€S'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.B‰Ô€R7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–. {TÝ. — f È  ë º  Ï åóƒ±N|å¥èCù)(²8{�7‰Ô€QK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰Ô€PS�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰Ô€OS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰Ô€Naƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰Ô€MQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰Ô€EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Ô€a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰Ô€E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰Ô€EC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰Ô€S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰Ô€)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰Ô€KQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÓÿS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰Óÿ~7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Óÿ}7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Óÿ|aƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Óÿ{a‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÓÿzEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Óÿy�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Óÿx'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Óÿw'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Óÿv}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Óÿuo�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Óÿt'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Óÿsa�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Óÿr ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Óÿqa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Óÿp)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�. µ_˜ é > ÿ ? ¡ ÿ 0 £ G�_†±j°ó³Ð(„Sµ�‰ÓÿoE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Óÿn'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÓÿmE‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�"‰Óÿla�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰Óÿk7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰Óÿj7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰ÓÿiS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰Óÿ#7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰Óÿ")m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰Óÿ!K‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰Óÿ S‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÓÿS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Óÿ� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰Óÿa‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Óÿa_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Óÿ� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Óÿ}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Óÿ� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰ÓÿS�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Óÿ)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Óÿ'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Óÿ ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Óÿ ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Óÿ}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Óÿa5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰ÓÿE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬. !a[ëQ ‚ Ý Œ ù p  £  Å wʃÞ&àq!µ;‹L¡ùÈ)’a,‰Óÿ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Óÿ7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Óÿ��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Óÿ 'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Óÿ a�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Óÿ  ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Óÿ '_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Óÿ ��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.u‰ÓÿE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰ÓÿS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰ÓÿK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰Óÿa�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰Óþ>o‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰Óþ=EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Óþ<a‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰Óþ;E‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Óþ:)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Óþ9�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Óþ8){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Óþ7)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Óþ6)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰Óþ5S� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Óþ47�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Óþ3�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Óþ2o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Óþ1Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Óþ0a�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰Óþ/E�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Óþ.'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Óþ- ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Óþ,'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Óþ+'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Óþ*}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬. Þ!à ý  Ú G — & ¥  jú[Ø7‹KãBÐ2ÊIûP¯dÞ�‰Óþ)�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Óþ('w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Óþ'}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Óþ&}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Óþ%'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Óþ$7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.c‰Óþ#E�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰Óþ"E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰Óþ!E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰Óý[Y�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰ÓýZ7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰ÓýY)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰ÓýX}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰ÓýWE‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰ÓýV��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰ÓýU�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰ÓýTE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰ÓýSE�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰ÓýR}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰ÓýQE�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰ÓýP�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰ÓýO� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰ÓýNE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰ÓýM'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰ÓýL)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰ÓýK)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰ÓýJEEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰ÓýIE‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马. ÑXÁN K   \ ­ P  ~  šúyé,·j©S!P–9Ug Ñ4‰ÓýHE5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰ÓýGE}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰ÓýFEƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰ÓýEEƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰ÓýDE}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰ÓýCE‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰ÓýB/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰ÓýA'E诸事ä¸�宜.破屋.å��垣.求医.治病.Q‰Óý@)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰Óý?7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰Óý>S_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰Óý=E]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÓütS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÓüsS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Óür}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Óüq}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Óüp{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Óüo�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Óün)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Óümu�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰Óül)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Óükaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰ÓüjS‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Óüi'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰ÓühS‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Óüg'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Óüf'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Óüe7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Óüdo�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Óüc}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除. xcП ú — f º 0 Ò & ˆ & }Ã|ƒºIËeÊ_;�]¿xB‰Óüb'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Óüa7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Óü`'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Óü_E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Óü^')诸事ä¸�宜.解除.æ²�æµ´.f‰Óü]�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Óü\�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Óü[)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�?‰ÓüZ��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰ÓüYo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Óü� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰ÓüS‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÓüaSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÓüS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰ÓüSƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Óü7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰Óü o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Óü ��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Óü }O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Óü }�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰Óü E‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰ÓüEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Óü� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Óü� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Óü'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Óü'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰ÓüE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Óü'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Óü}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Óü}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£. Wq1“ í ¶ - ü ½ 4  m Ë 5 ±ØáœÇ lÎM¾(æA¢WF‰Óû'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Óû~��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Óû}E‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Óû|'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰Óû{E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰ÓûzE�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰ÓûyE�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.�‰Óûx��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Óûwo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÓûvS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Óûu)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ó¶OK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ó¶NEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ó¶MSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ó¶Laƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ó¶KS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ó¶JS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ó¶Ia�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ó¶H��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ó¶G��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ó¶F'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ó¶EE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ó¶D'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ó¶C'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ó¶Ba�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ó¶A'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ó¶@��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ó¶?a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ó¶>'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ó¶=a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�. •bÈR( ¤ s à M ¯  x 8 O¼R�"ÇòX�¶·á°>•�#‰Ó¶<��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ó¶;�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ó¶:'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ó¶9a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ó¶8'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ó¶7)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ó¶6)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�E‰Ó¶5E‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰Ó¶4� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰Ó¶3��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰Ó¶27‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰Ó¶1Sk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÓµjS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰Óµi��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰Óµha{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰Óµgg�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÓµfY‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰Óµe)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰Óµd�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰Óµc7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰Óµba�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰Óµa�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰Óµ`)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰Óµ_'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰Óµ^�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰Óµ]'5余事勿å�–.解除.余事勿å�–.q‰Óµ\�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Óµ[a�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰ÓµZ)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜. ÕÃvÑQ Á € ß I ¬  D Î d¿jÍÑq•÷Wÿ#[¬Õ,‰ÓµY'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÓµX�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰ÓµW ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰ÓµV}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰ÓµU''诸事ä¸�宜.诸事ä¸�宜.�V‰ÓµTƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰ÓµSEså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.�‰ÓµR��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰ÓµQ}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÓµPS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÓµOSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÓµNaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÓµMo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÓµS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Óµ}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰Óµa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Óµa�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Óµ�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Óµ}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Óµa�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Óµ)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Ó´)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰Ó´~EE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Ó´}}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Ó´|o�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Ó´{'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Ó´z'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Ó´y'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Ó´x'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–. �ŽA¸€ ñ p % o > ÿ  o Ü rÇr¹©t4[¨wçH³��‰Ó´w� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ó´v}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ó´ug�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Ó´tg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Ó´s}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Ó´r'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Ó´q)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Ó´p)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.�S‰Ó´oE‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Ó´n)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰Ó´m� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰Ó´lu�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰Ó´kEwå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰Ó´jo‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰Ó´ia‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰Ó´"Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰Ó´!S‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰Ó´ a{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Ó´�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Ó´��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Ó´S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Ó´'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Ó´'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Ó´ ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Ó´'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Ó´a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Ó´S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Ó´'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Ó´o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Ó´'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Ó´a� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩. ªbÁ Š  _ �  8 Í x¾â"rÇVô˜â9Rª�"‰Ó´}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Ó´ ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Ó´'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Ó´��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Ó´ ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Ó´ E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Ó´ ''诸事ä¸�宜.诸事ä¸�宜.:‰Ó´ '_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–.�?‰Ó´ ��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Ó´ a�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰Ó´a�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Ó´��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰Ó´o‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰Ó´E‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰Ó³?a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰Ó³>aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰Ó³=E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Ó³<S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰Ó³;�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Ó³:� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Ó³9��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Ó³8_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Ó³7}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Ó³6}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Ó³5}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Ó³4E�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬. œ�\‘ µ  O Î  E z 9g»‚£>Ò‡þ`Â,ŸL�: œh‰Ó³3'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Ó³2'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ó³1'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ó³0)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ó³/'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ó³.��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ó³-� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Ó³,S�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Ó³+a�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Ó³*}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Ó³))u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Ó³()�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Ó³')�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.�Y‰Ó³&S‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Ó³%)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Ó³$��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰Ó³#o‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Ó³"EE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Ó³!}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Ó²[S‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Ó²Z��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Ó²Ya�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Ó²Xo‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Ó²W��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰Ó²VK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Ó²US‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Ó²T'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Ó²S� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土. OÏ.ä ú  ˜ Æ c  ‘ ú ºýX¿w(¹�_Á«9Ö]µíO�‰Ó²Ro�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Ó²Q'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ó²P}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Ó²O ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Ó²N�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Ó²M'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Ó²L}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ó²K}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ó²J ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Ó²IE�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ó²H'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ó²G}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ó²Fo�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ó²E�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Ó²D7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Ó²C)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Ó²B)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.E‰Ó²AEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Ó²@a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰Ó²?E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰Ó²>EC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰Ó²=S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰Ó±v)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰Ó±uKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰Ó±tS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰Ó±s7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Ó±r7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Ó±qaƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Ó±pa‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰Ó±oEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Ó±n�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Ó±m'C诸事ä¸�宜.解除.å��垣.余事勿å�–. iUV ¸  G º ^ ¤  v�È�^À�ñM~Ò[¬äFši,‰Ó±l'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Ó±k}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Ó±jo�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Ó±i'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ó±ha�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Ó±g ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Ó±fa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Ó±e)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰Ó±dE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Ó±c'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ó±bE‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰Ó±aE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Ó±`'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Ó±_)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Ó±^)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Ó±]''诸事ä¸�宜.诸事ä¸�宜.B‰Ó±\)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰Ó±[K‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰Ó±ZS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰Ó±YS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Ó±� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰Ó±a‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Ó±a_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Ó±� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Ó±}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Ó±� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰Ó± S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Ó± )‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Ó± '_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Ó±  ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹. !´Ï1Œ; ¨  ½ R Ê t & y 2 �Õ�^ù¯M¥õ¶ c2“üË*ãc´�)‰Ó±  ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Ó±}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Ó±a5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰Ó±E‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Ó±'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ó±7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Ó±��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Ó±'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Ó±a�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Ó± ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Ó°'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Ó°~��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Ó°} ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Ó°|'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Ó°{)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Ó°z)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Ó°y'C诸事ä¸�宜.塞穴.结网.余事勿å�–.A‰Ó°xEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Ó°wa‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰Ó°vE‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Ó°u)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Ó°.�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Ó°-){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Ó°,)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ó°+)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰Ó°*S� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Ó°)7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ó°(�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Ó°'o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Ó°&Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Ó°%a�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰Ó°$E�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Ó°#'C诸事ä¸�宜.解除.破屋.余事勿å�–. ]!à ý  Ú G — & ¥  jú[Ø7‹K ÙÃ’øw)~Ý’ g(÷]�‰Ó°" ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Ó°!'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Ó° '_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Ó°}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Ó°�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Ó°'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Ó°}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Ó°}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Ó°'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Ó°7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Ó°a�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Ó°'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Ó°' 诸事ä¸�宜..‰Ó°77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Ó°'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.;‰Ó°)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰Ó°}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰Ó°E‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰Ó¯K��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰Ó¯J�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰Ó¯IE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰Ó¯HE�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Ó¯G}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰Ó¯FE�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Ó¯E�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Ó¯D� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Ó¯CE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Ó¯B'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Ó¯A)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Ó¯@)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Ó¯?EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Ó¯>E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马. ”iö¶ ó H  U ø ¸ &  B ¢ !‘ÔšïŒÌäYü*Í”4‰Ó¯=E5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Ó¯<E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Ó¯;Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Ó¯:Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰Ó¯9E}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰Ó¯8E‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Ó¯7/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Ó¯6'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Ó¯5E‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Ó¯4)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ó¯3E�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ó¯2E‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ó¯1E7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�7‰Ó¯0S‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Ó¯/}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Ó¯.}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Ó¯-{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Ó®e�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Ó®d)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Ó®cu�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰Ó®b)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Ó®aaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰Ó®`S‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Ó®_'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰Ó®^S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Ó®]'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Ó®\'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Ó®[7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Ó®Zo�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’. ™m<—4 W Í o à % à  `  ­PŒçmÏ.“(f&ˆA™�"‰Ó®Y}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰Ó®X'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Ó®W7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Ó®V'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Ó®UE�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Ó®T')诸事ä¸�宜.解除.æ²�æµ´.f‰Ó®S�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Ó®R�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Ó®Q)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Ó®Po�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Ó®O� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Ó®NE‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰Ó®ME‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰Ó®LE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.n‰Ó®KS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰Ó®JSƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Ó®I7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰Ó®o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Ó®��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Ó®}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Ó®}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰Ó­E‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰Ó­~Eå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Ó­}� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Ó­|� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Ó­{'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Ó­z'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Ó­yE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Ó­x'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ó­w}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£. Äb¼… ü Ë Œ  Ò < š  € §°NkÀà¨.ØWÈ2ðK¬aÄ�‰Ó­v}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Ó­u'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ó­t��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Ó­sE‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Ó­r'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰Ó­qE�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰Ó­pE�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰Ó­oE�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Ó­n)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Ó­m)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Ó­l'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Ó­kE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Ó­jE‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.�]‰Ó­iEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Ó­hSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ó­gaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ó­fS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ó­eS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Òè?a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Òè>��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Òè=��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Òè<'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Òè;E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Òè:'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Òè9'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Òè8a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Òè7'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Òè6��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Òè5a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�. "^Q«z Ü B Ì ¢  í Z Ç ) ’ò²É6Ìœb Ñ~N¦OyHÖ-ž^;‰Òè4'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Òè3a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Òè2��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Òè1�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Òè0'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Òè/a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Òè.'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Òè-)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Òè,)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Òè+'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Òè*)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Òè))}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Òè(Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Òè')S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.f‰Òè&S� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰Òè%��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰Òè$a{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰Òè#g�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰Òè"Y‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰Òè!)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰ÒçZ�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰ÒçY7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰ÒçXa�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰ÒçW�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰ÒçV)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰ÒçU'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰ÒçT�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰ÒçS'5余事勿å�–.解除.余事勿å�–.q‰ÒçR�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰ÒçQa�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰ÒçP)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰ÒçO'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÒçN�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰ÒçM ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�. NpÑ< ¥ Í €  Û [ Ë Š é S¶NØnÉt×óÒ¯JòóN�‰ÒçL}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰ÒçK''诸事ä¸�宜.诸事ä¸�宜.�V‰ÒçJƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰ÒçIEså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰ÒçH)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰ÒçG''诸事ä¸�宜.诸事ä¸�宜.,‰ÒçF'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰ÒçEEƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰ÒçD)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.�‰ÒçCo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÒçBS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÒçA}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰Òç@a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Òç?a�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Òç>�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Òç=}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Òæwa�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Òæv)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Òæu)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰ÒætEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Òæs}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Òæro�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Òæq'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Òæp'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Òæo'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Òæn'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Òæm� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Òæl}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Òækg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Òæjg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Òæi}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�. $‡m ʧK • ì »  ] ë ž  Ý N̛͂\uÌ9Ï$ÏÙ•Wªk$¸‡,‰Òæh'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Òæg)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Òæf)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Òæe'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Òæd)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Òæc)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Òæb']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Òæa7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Òæ`)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.�3‰Òæ_a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰Òæ^Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰Òæ]S‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰Òæ\a{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Òæ[�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰ÒæZ��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰ÒæYS‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Òæ'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Òæ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Òæ ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Òæ'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Òæa�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Òæ S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Òæ 'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Òæ o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Òæ '{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Òæ a� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Òæ}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Òæ ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Òæ'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Òæ��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Òæ ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰ÒæE{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Òæ''诸事ä¸�宜.诸事ä¸�宜.:‰Òæ'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Òæoa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰ÒåE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络. ¨›/ä[ ½  ‰ ü © ú — f ù [ºƒX‰ 1Æq·Ûaá¨4‰Òå~E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Òå}E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Òå|)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�V‰Òå{E‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰Òåza‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰ÒåyaQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰ÒåxE�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰ÒåwS‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰Òåv�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Òåu� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Òå/��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Òå._�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Òå-}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Òå,}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Òå+}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Òå*E�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Òå)'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Òå('C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Òå''�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Òå&)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Òå%'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Òå$��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Òå#� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Òå"S�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Òå!a�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Òå }�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Òå)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Òå)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Òå)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬. ¤¸iúY Ñ    Z ì z  ž ö _ .�ì!E§ß^¬Õ ·eã¤:‰Òå'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Òå)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Òå)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰ÒåCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Òå)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.�E‰Òå}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰ÒåS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Òå��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Òåa�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Òåo‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Òå��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰ÒåK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰ÒäKS‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰ÒäJ'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰ÒäI� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰ÒäHo�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰ÒäG'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÒäF}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰ÒäE ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰ÒäD�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰ÒäC'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰ÒäB}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰ÒäA}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Òä@ ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Òä?E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Òä>'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Òä=}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Òä<o�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Òä;�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Òä:7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Òä9)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬. #”À[á’C t Ð Ÿ  U Þ / ˜ gÉì»Ðæô„²O}È•Fã”J‰Òä8)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Òä7'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Òä6)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Òä5)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Òä4�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Òä3)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.�‰Òä2)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰Òä1KQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰Òä0S{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰Òä/7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Òä.7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Òä-aƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Òãfa‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÒãeEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Òãd�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Òãc'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Òãb'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Òãa}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Òã`o�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Òã_'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Òã^a�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Òã] ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Òã\a�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Òã[)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰ÒãZE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰ÒãY'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÒãXE‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰ÒãWE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰ÒãV'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰ÒãU)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰ÒãT)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰ÒãS''诸事ä¸�宜.诸事ä¸�宜.R‰ÒãR)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰ÒãQ�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰ÒãP)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙. !~›L Ãe4 Ï … # { Ë Œ á 9  iÒ¡¹9Šß àB ÑDè.Ü~Y‰ÒãO)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰ÒãN7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.�4‰ÒãMa‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰ÒãLa_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰ÒãK� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰ÒãJ}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰ÒãI� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰ÒãS�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Òã)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Òã'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Òã ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Òâ ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Òâ~}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Òâ}a5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰Òâ|E‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Òâ{'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Òâz7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Òây��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Òâx'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Òâwa�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Òâv ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Òâu'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Òât��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Òâs ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Òâr'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Òâq)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Òâp)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Òâo'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰Òân)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰Òâm)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰Òâl7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰Òâk)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰Òâj)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬. %sPß^ À # ³ ]  Ù Š ; ü É ³ ‚ è g nÍ‚üWçM~Ùˆõl ŸÁsI‰Òâi){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Òâh)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Òâg)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰ÒâfS� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Òâe7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Òâ�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Òâo�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰ÒâEe开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Òâa�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰ÒâE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Òâ'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Òâ ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Òâ'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Òâ'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Òâ}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Òâ�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Òâ'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Òâ}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Òâ}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Òâ'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Òâ7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Òâa�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Òâ 'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Òâ ' 诸事ä¸�宜..‰Òâ 77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Òâ '_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Òâ 7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Òâ7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Òâ)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Òâ7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Òâ7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.k‰ÒâE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰ÒâE�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Òâ}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰ÒâE�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Òá;�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Òá:� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£. ×n P + ” Ð – ë ˆ È àUø&É�±p�©j×� ‰Òá9E�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Òá8'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Òá7)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Òá6)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Òá5EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Òá4E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰Òá3E5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Òá2E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Òá1Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Òá0Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰Òá/E}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰Òá.E‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Òá-/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Òá,'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Òá+E‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Òá*)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Òá)E�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Òá(E‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Òá'E7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Òá&E‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰Òá%S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Òá$)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Òá#SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Òá"E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门._‰Òá!)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Òá u�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨. Îbº ×  ë * Í d ê L«¥�㣾 Ì ^kÎ;‰Òá)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Òáaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰ÒáS‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰ÒàT'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰ÒàSS‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰ÒàR'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰ÒàQ'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰ÒàP7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰ÒàOo�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰ÒàN}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰ÒàM'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰ÒàL7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰ÒàK'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰ÒàJE�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰ÒàI')诸事ä¸�宜.解除.æ²�æµ´.f‰ÒàH�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰ÒàG�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰ÒàF)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰ÒàEo�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰ÒàD� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰ÒàCE‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰ÒàBE‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰ÒàAE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Òà@)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Òà?')诸事ä¸�宜.求医.破屋.�B‰Òà>E‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰Òà=Eƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Òà<_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.]‰Òà;}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Òà:}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养. ãjÈa š i ¡ ! Ç  <  Š 4³$ŽL§½ �\·T#wí�ã�&‰Òà9E‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰ÒßsEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Òßr� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Òßq� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Òßp'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Òßo'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰ÒßnE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Òßm'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Òßl}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Òßk}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Òßj'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Òßi��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰ÒßhE‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Òßg'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰ÒßfE�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰ÒßeE�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰ÒßdE�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Òßc)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Òßb)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Òßa'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Òß`E‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Òß_E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰Òß^Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Òß]E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Òß\E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Òß['C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰ÒßZE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰ÒßYE�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.�‰ÒßX��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÒßW��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马. &ŽfðÆB ~ ë M ¶  Ö —  Š IúÀ~/ܬ­uצ4‹ü¼xA¸‡H¿Ž,‰ÒßV'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÒßUE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Òš/'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Òš.'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Òš-a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Òš,'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Òš+��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Òš*a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Òš)'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Òš(a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Òš'��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Òš&�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Òš%'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Òš$a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Òš#'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Òš")� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Òš!)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Òš 'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Òš)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Òš)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÒšQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Òš)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Òš)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Òš)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Òš �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÒšS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Òš'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.;‰Òš)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰Òš�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰Òš7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰Òša�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰Òš�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰Òš)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰Ò™J'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰Ò™I�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰Ò™H'5余事勿å�–.解除.余事勿å�–.q‰Ò™G�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Ò™Fa�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’. ´ÃvÑQ Á € ß I ¬  / äÞ3 a}�\9Ô| }Ø)ƒR´�‰Ò™E)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Ò™D'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ò™C�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰Ò™B ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰Ò™A}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰Ò™@''诸事ä¸�宜.诸事ä¸�宜.�V‰Ò™?ƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰Ò™>Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Ò™=)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Ò™<''诸事ä¸�宜.诸事ä¸�宜.,‰Ò™;'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰Ò™:Eƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰Ò™9)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Ò™8'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰Ò™7E�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Ò™6)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰Ò™5EƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰Ò™4EYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰Ò™3E‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.�‰Ò™2}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Ò™1a�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Ò™0)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Ò™/)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰Ò™.EE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Ò™-}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Ò˜go�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Ò˜f'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Ò˜e'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Ò˜d'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Ò˜c'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–. #^W&p È V € H ¹ 8 í 7  Çà78éRã¦b$Üw8ñ…TÄ%�ù^�‰Ò˜b� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ò˜a}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ò˜`g�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Ò˜_g�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Ò˜^}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Ò˜]'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Ò˜\)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Ò˜[)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Ò˜Z'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Ò˜Y)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Ò˜X)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Ò˜W']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Ò˜V7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ò˜U)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ò˜T)5行丧.安葬.作ç�¶.造畜椆栖.?‰Ò˜S)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ò˜RE�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ò˜QEaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ò˜PEƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.�#‰Ò˜O��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Ò˜NS‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Ò˜M'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Ò˜L'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Ò˜K ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Ò˜J'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Ò˜Ia�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Ò˜S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Ò˜'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Ò˜o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Ò—'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Ò—~a� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Ò—}}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Ò—| ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Ò—{'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Ò—z��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩. obÄ. ¡ N Ÿ < ž _ ´ (¦ý.ªk¤Ê “ÚGã¤�%o�0‰Ò—y ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Ò—xE{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Ò—w''诸事ä¸�宜.诸事ä¸�宜.:‰Ò—v'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Ò—uoa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰Ò—tE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰Ò—sE5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Ò—rE�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ò—q)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Ò—pE‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Ò—oE_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ò—nE�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰Ò—m)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰Ò—l)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Ò—k)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�I‰Ò—j� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Ò—i��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Ò—h_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Ò—g}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Ò—f}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Ò—e}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Ò—E�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Ò—'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Ò—'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ò—'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ò—)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ò—'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ò—��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ò—� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Ò—S�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Ò—a�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’. #‹¸iúY Ñ    Z ì z  ž ö _ .�ì!E²„<í–Cñ©o0Ë_‹�‰Ò—}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Ò—)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Ò—)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Ò—)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰Ò—'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Ò—)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Ò—)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰Ò—Ciå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Ò— )�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰Ò— )� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰Ò— 7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰Ò— )o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰Ò—  ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰Ò— ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰Ò— ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�V‰Ò—K‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Ò—S‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Ò—'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Ò—� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Ò—o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Ò—'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ò–;}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Ò–: ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Ò–9�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Ò–8'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Ò–7}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ò–6}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ò–5 ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Ò–4E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ò–3'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ò–2}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ò–1o�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ò–0�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Ò–/7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Ò–.)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬. &x¿mÏj ð ¡ R ! ƒ ß ®  d í >§vØ,ûÊ)ßõnè™a¬y*ÇxJ‰Ò–-)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Ò–,'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Ò–+)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Ò–*)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Ò–)�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Ò–()�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ò–''Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Ò–&7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Ò–%'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Ò–$'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Ò–# ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.�l‰Ò–"aƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Ò–!a‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰Ò– EW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Ò–�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Ò–'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Ò–'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Ò•V}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Ò•Uo�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Ò•T'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ò•Sa�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Ò•R ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Ò•Qa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Ò•P)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰Ò•OE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Ò•N'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ò•ME‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰Ò•LE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Ò•K'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Ò•J)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Ò•I)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Ò•H''诸事ä¸�宜.诸事ä¸�宜.R‰Ò•G)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Ò•F�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Ò•E)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Ò•D)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Ò•C7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Ò•B7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬. $Ucz ¾ † ! Ò ‘ I ë º U ©  Q g¿ŽïX'†?¿e&fÈ2í�U5‰Ò•A)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ò•@)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Ò•?'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Ò•> ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�‰Ò•=S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Ò•<)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Ò•;'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Ò•: ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Ò•9 ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Ò”s}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Ò”ra5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰Ò”qE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Ò”p'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ò”o7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Ò”n��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Ò”m'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Ò”la�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Ò”k ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Ò”j'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Ò”i��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Ò”h ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Ò”g'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Ò”f)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Ò”e)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Ò”d'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰Ò”c)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰Ò”b)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰Ò”a7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰Ò”`)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰Ò”_)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ò”^'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰Ò”])�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Ò”\�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰Ò”[‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰Ò”Z's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰Ò”Y ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬. #~9 ú g · + ì A « < æ › b Ä…R< qð¢÷V …à¡pÖ¥b~� ‰Ò”Xo�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Ò”WEe开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Ò”Va�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰Ò”UE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Ò”'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Ò”  ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Ò” 'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Ò” '_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Ò” }�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Ò” �� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Ò”'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Ò”}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Ò”}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Ò”'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Ò”7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Ò”a�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Ò”'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Ò”' 诸事ä¸�宜..‰Ò”77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Ò“'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Ò“~7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Ò“}7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Ò“|)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Ò“{7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Ò“z7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Ò“yS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Ò“xE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Ò“wE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰Ò“vQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰Ò“uE�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.�*‰Ò“t� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Ò“sE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Ò“r'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Ò“q)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Ò“+)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络. Gê v R ¸ þ ¶ Ù B ~ D™6vÀ޽¦ÂÔw>_<‰Ò“*EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Ò“)E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰Ò“(E5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Ò“'E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Ò“&Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Ò“%Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰Ò“$E}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰Ò“#E‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Ò“"/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Ò“!'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Ò“ E‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Ò“)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ò“E�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ò“E‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ò“E7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Ò“E‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰Ò“S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Ò“)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Ò“SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Ò“E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Ò“)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Ò“')诸事ä¸�宜.破屋.å��垣.�‰Ò“E‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Ò“ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰Ò“So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰Ò“E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络. —5¬L – 9 ó  H $ c  B�#…äIÞºÜ>÷O¸EB—�%‰Ò“S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Ò“'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Ò“'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Ò“ 7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Ò’Do�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Ò’C}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰Ò’B'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Ò’A7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Ò’@'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Ò’?E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Ò’>')诸事ä¸�宜.解除.æ²�æµ´.f‰Ò’=�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Ò’<�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Ò’;)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Ò’:o�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Ò’9� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Ò’8E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰Ò’7E‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰Ò’6E}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Ò’5)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Ò’4')诸事ä¸�宜.求医.破屋.�B‰Ò’3E‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰Ò’2Eƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Ò’1_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰Ò’0E}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Ò’/‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰Ò’.Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰Ò’-E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰Ò’,E‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易. ¯wF¨o � @ ™ Ò ¡ Ù Y ÿ Tt<Âlë\Æ„ß@õXÅ”ïŒ[¯�&‰Ò’+� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Ò’*'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Ò’)'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Ò‘cE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Ò‘b'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ò‘a}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Ò‘`}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Ò‘_'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ò‘^��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Ò‘]E‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Ò‘\'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰Ò‘[E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰Ò‘ZE�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰Ò‘YE�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Ò‘X)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Ò‘W)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Ò‘V'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Ò‘UE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Ò‘TE‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰Ò‘SEwå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Ò‘RE�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Ò‘QE‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Ò‘P'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰Ò‘OE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰Ò‘NE�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Ò‘M)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰Ò‘LE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰Ò‘KS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Ò‘J7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Ò‘IE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.,‰Ò‘H'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ò‘Ga�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜. �bÄ È  « Ñ ö ” œæŠûžï.ÖÇ>zÔ�2‰Ò‘F'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ò‘E��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�>‰ÑÌE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÑÌE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÑÌaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÑÌSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÑÌS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÑÌaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÑÌa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÑÌE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÑÌE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÑÌSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÑÌa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÑÌa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÑÌS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÑÌoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÑÌSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÑÌo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÑÌK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÑÌ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÑÌ � �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÑÌ �‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÑÌ ��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÑÌ o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑. E²2¹U ” ! Ó î ‹ » í å3¾ìwFfj×;E�7‰ÑÌ S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÑÌ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÑÌK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.� ‰ÑÌE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰ÑÌ)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰ÑÌEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰ÑÌEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰ÑÌE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰ÑÌ'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰ÑË:S�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÑË9S‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰ÑË8S�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰ÑË7S‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰ÑË6E‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰ÑË5)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰ÑË4E‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰ÑË3S‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰ÑË2E‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰ÑË1S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰ÑË0a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰ÑË/SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰ÑË.S�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰ÑË-S‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰ÑË,oaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰ÑË+S�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰ÑË*S�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰ÑË)){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–. i2ú³ è ¡ 2   K Ç 5 j Å EäqŽ]ÎÏ€é¥zJ°Ùi�‰ÑË(a�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÑË'E‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰ÑË&� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰ÑË%��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰ÑË$7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÑË#Sk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.&‰ÑË")5行丧.安葬.作ç�¶.造畜椆栖.?‰ÑË!)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰ÑË E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰ÑËEaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰ÑËEƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰ÑËE�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰ÑÊW'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰ÑÊVS‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰ÑÊUS�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰ÑÊTE�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰ÑÊSS�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰ÑÊRE‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰ÑÊQS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰ÑÊPg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰ÑÊOg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰ÑÊNEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰ÑÊMY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰ÑÊLS�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰ÑÊK)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰ÑÊJK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÑÊISC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰ÑÊH)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰ÑÊGS‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�. ktú¶< Û s È V , r µ f é BÚC¿€¹-ß"…‰)M¯k�‰ÑÊFo�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰ÑÊE��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰ÑÊD}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÑÊCS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÑÊBSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÑÊAaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÑÊ@o�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.�7‰ÑÊ?E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰ÑÊ>E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÑÊ=E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰ÑÊ<)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰ÑÊ;)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰ÑÊ:)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰ÑÊ9E�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰ÑÉrS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰ÑÉq)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰ÑÉpa�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰ÑÉoo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰ÑÉn=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰ÑÉma‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰ÑÉl5'探病.余事勿å�–.余事勿å�–.m‰ÑÉko}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰ÑÉjS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰ÑÉiaw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰ÑÉhE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰ÑÉga�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰ÑÉfg)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰ÑÉeo� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰ÑÉdo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�. °w³ H ¿ E Å 6 Ê û z A„ñSÃ{,Õf v×—¾°L‰ÑÉcYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰ÑÉb}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰ÑÉaE‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰ÑÉ`)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰ÑÉ_� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰ÑÉ^u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰ÑÉ]Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰ÑÉ\o‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰ÑÉ[a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.R‰ÑÉZ)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰ÑÉY7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰ÑÉX)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰ÑÉW ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰ÑÉV ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰ÑÉU ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÑÉS‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰ÑÉ)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÑÉ S�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰ÑÉ E‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰ÑÉ E�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÑÉ S�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÑÉ S�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰ÑÉa�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰ÑÉa�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÑÉS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰ÑÉS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰ÑÉa‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰ÑÉS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬. ~¬ð~> ^ — 0 š > ¦ " � 8 ¸€"hŒÌqÅ^ç·~4‰ÑÉ)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰ÑÉE� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰ÑÉS‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰ÑÈ}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰ÑÈ~��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰ÑÈ}��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰ÑÈ|a�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰ÑÈ{a�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰ÑÈz��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰ÑÈyo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰ÑÈxE‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰ÑÈwa‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.Y‰ÑÈv)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÑÈu'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰ÑÈt7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰ÑÈs'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰ÑÈr'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰ÑÈq ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰ÑÈ+S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÑÈ*E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰ÑÈ)a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰ÑÈ(a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰ÑÈ'S�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰ÑÈ&K‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÑÈ%S‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰ÑÈ$)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰ÑÈ#o}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÑÈ"S‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÑÈ!aO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚. �(1 · Í j # Ÿ Ä f , ë ™Â÷¶ä8ÿ Ol½CÒ_��L‰ÑÈ a‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰ÑÈS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰ÑÈE�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰ÑÈS�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰ÑÈ7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰ÑÈg‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰ÑÈY‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰ÑÈS‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰ÑÈ)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰ÑÈ��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰ÑÈo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰ÑÈEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰ÑÈ}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰ÑÈS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.M‰ÑÈ7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰ÑÈ7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰ÑÈ)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰ÑÈ)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰ÑÈ'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰ÑÈ  ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰ÑÇFE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰ÑÇE)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰ÑÇDS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰ÑÇCEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰ÑÇBK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰ÑÇAYƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰ÑÇ@E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕. Ý ¿ œ c Æ } Ý  ! é Ÿ  € @ƒÞ”ÄÃMÓÏ5±jÊÝ<‰ÑÇ?S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÑÇ>S‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÑÇ=S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÑÇ<SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰ÑÇ;a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÑÇ:S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰ÑÇ97_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰ÑÇ8K‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰ÑÇ7S�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÑÇ6S�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰ÑÇ5aƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰ÑÇ4Q‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰ÑÇ3EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰ÑÇ2a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰ÑÇ1E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰ÑÇ0EC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰ÑÇ/S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰ÑÇ.)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰ÑÇ-KQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.3‰ÑÇ,'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰ÑÇ+)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰ÑÇ*�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰ÑÇ)‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰ÑÆc's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰ÑÆb ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰ÑÆa)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰ÑÆ`''余事勿å�–.余事勿å�–.�}‰ÑÆ_Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰ÑÆ^aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰ÑÆ]Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑. |:•* { < ‘ û Œ 0 v é HošS™Üœ¹ÎQÎk«¼|;‰ÑÆ\EC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰ÑÆ[)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰ÑÆZE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰ÑÆYE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÑÆXS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÑÆWS�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰ÑÆVS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰ÑÆU)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰ÑÆTa�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰ÑÆS7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰ÑÆR7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰ÑÆQS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰ÑÆP7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰ÑÆO)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÑÆNK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÑÆMS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÑÆLS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰ÑÆK� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰ÑÆJa‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰ÑÆIa_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.j‰ÑÆHS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰ÑÆGE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰ÑÆFE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰ÑÆEQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰ÑÅ~E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰ÑÅ}''诸事ä¸�宜.诸事ä¸�宜.f‰ÑÅ|S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰ÑÅ{E‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰ÑÅzK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮. ÙF� ã * Í þ Y 5 ß ‘ ä �ø@ú,‹;ÏUñ¢í´AÖpí-ÙO‰ÑÅyS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰ÑÅxa‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰ÑÅwa�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰ÑÅvoe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰ÑÅua}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰ÑÅtS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰ÑÅs)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰ÑÅr7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰ÑÅqSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰ÑÅpE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰ÑÅoE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰ÑÅnS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰ÑÅmK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰ÑÅla�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰ÑÅko‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰ÑÅjEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰ÑÅia‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰ÑÅhE‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰ÑÅg)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰ÑÅf�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰ÑÅe){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰ÑÅd)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.‰ÑÅc')诸事ä¸�宜.破屋.å��垣.�‰ÑÅbE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰ÑÅaƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰ÑÅSo动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰ÑÅE‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰ÑÅ'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰ÑÅa�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰ÑÅS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰ÑÅS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养. m5Ÿ; � A • Ê A á + » ™øL ¤‘ó‹$ÕfÓdÆmT‰ÑÅEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰ÑÅE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰ÑÅS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰ÑÅECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰ÑÅS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰ÑÅ=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰ÑÅE� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰ÑÅ7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰ÑÅ Eaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰ÑÅ auå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰ÑÅ E�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰ÑÅ E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰ÑÅ E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰ÑÅY�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰ÑÅ7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰ÑÅ)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰ÑÅ}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰ÑÅE‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰ÑÅ��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰ÑÅ�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰ÑÅE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�0‰ÑÅ‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÑÄSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÑÄ~E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÑÄ}E‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÑÄ4S‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰ÑÄ3'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÑÄ2E‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰ÑÄ17�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰ÑÄ0S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰ÑÄ/o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土. ¼z- + V Þ ¢  Ë ù œ 8¸—JÕˆ3Çqå�5¿LÝc¼A‰ÑÄ.EOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰ÑÄ-E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰ÑÄ,S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰ÑÄ+S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰ÑÄ*S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰ÑÄ)S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰ÑÄ(E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰ÑÄ'SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰ÑÄ&K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰ÑÄ%)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰ÑÄ$7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰ÑÄ#S_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰ÑÄ"E]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÑÄ!S�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÑÄ S‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰ÑÄ}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰ÑÄ}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰ÑÄ{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰ÑÄ�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰ÑÄ)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.X‰ÑÄE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰ÑÄS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰ÑÃS7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰ÑÃRE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰ÑÃQ)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰ÑÃPa�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰ÑÃOE‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰ÑÃNoƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰ÑÃM7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰ÑÃLS�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰ÑÃKa‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井. ¯­}Õ~F ¨ w ¦ ½ h ß 6 | 5<És¿„¿»l,™/¯{‰ÑÃJE�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰ÑÃIa{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰ÑÃHS�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰ÑÃG7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰ÑÃF}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰ÑÃEE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰ÑÃDuA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰ÑÃC�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰ÑÃB��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰ÑÃAo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰ÑÃ@� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰ÑÃ?S‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÑÃ>aSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÑÃ=S�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰ÑÃ<Sƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰ÑÃ;7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰ÑÃ:o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰ÑÃ9��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.�‰ÑÃ8E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÑÃ7aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÑÃ6Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÑÃ5S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.,‰Ðþ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ðþa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ðþ 'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ðþ )� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ðþ )‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ðþ 'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ðþ )�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬. oß¼W ÿ # [ ¬  Õ 7 �—:‹Êr¡¸cÚ×Dʉ:¾oJ‰Ðþ)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÐþQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ðþ)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ðþ)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ðþ)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ðþ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÐþS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ðþ'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÐþE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÐýE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ðý~aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ðý}Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ðý|S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ðý{aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ðýza‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÐýyE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÐýxE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÐýwSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ðýva�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Ðýu)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Ðýt'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ðýs�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰Ðýr ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰Ðýq}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰Ðý*''诸事ä¸�宜.诸事ä¸�宜.�V‰Ðý)ƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰Ðý(Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Ðý')�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Ðý&''诸事ä¸�宜.诸事ä¸�宜.,‰Ðý%'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰Ðý$Eƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤. n›\©x è I ´  ‚ E u §ØŸÍíx¦1 ÕÏ$‘Rn�^‰Ðý#)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Ðý"'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰Ðý!E�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Ðý )‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰ÐýEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰ÐýEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰ÐýE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Ðý'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰ÐýS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÐýS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰ÐýS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰ÐýS‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰ÐýE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Ðý)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰ÐýE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰ÐýS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰ÐýE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.8‰Ðý'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Ðý� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ðý}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ðýg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Ðýg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Ðý }�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰ÐüG'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰ÐüF)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰ÐüE)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰ÐüD'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰ÐüC)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬. "“†Í: Ö — t  b ¹ ˆ Ò * ¸ kçUŠåe‘®}îï  Åš]Û“C‰ÐüB)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰ÐüA']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Ðü@7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ðü?)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ðü>)5行丧.安葬.作ç�¶.造畜椆栖.?‰Ðü=)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ðü<E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ðü;Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ðü:Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰Ðü9E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Ðü8'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Ðü7S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰Ðü6S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰Ðü5E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰Ðü4S�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰Ðü3E‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰Ðü2S‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰Ðü1g�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰Ðü0g�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.H‰Ðü/'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Ðü.a� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Ðü-}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Ðü, ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Ðü+'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Ðü*��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Ðü) ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰ÐûbE{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Ðûa''诸事ä¸�宜.诸事ä¸�宜.:‰Ðû`'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Ðû_oa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰Ðû^E�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰Ðû]E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Ðû\E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ðû[)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络. "U¸i¿m% ë ¬ G Û �  i Ë 5 ¨ U¦û‰_¥è™u vò³ì`U�7‰ÐûZE‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰ÐûYE_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÐûXE�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰ÐûW)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰ÐûV)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰ÐûU)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰ÐûTE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰ÐûSS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰ÐûR)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰ÐûQa�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰ÐûPo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰ÐûO=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰ÐûNa‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰ÐûM5'探病.余事勿å�–.余事勿å�–.m‰ÐûLo}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰ÐûKS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.�)‰ÐûJ)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰ÐûI'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÐûH��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰ÐûG� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰ÐûFS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰ÐûEa�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Ðú}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Ðú~)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Ðú})�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Ðú|)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰Ðú{'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Ðúz)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Ðúy)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰ÐúxCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Ðúw)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰Ðúv)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰Ðúu7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰Ðút)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅. "•kå–^ © v ' Ä u - Þ o Î F  wÏaï‘—œÍLVÃ%•� ‰Ðús ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰Ðúr ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰Ðúq ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÐúpS‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰Ðúo)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÐúnS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰ÐúmE‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰ÐúlE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÐúkS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÐújS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰Ðúia�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰Ðúha�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÐúgS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.m‰Ðúf}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ðúe}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ðúd ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰ÐúcE�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ðúb'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ðúa}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ðúo�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ðú�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Ðú7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Ðú)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Ðú)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Ðú'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Ðú)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Ðú)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Ðú�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Ðú)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ðú'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Ðú7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Ðú'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Ðú'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Ðú  ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’. #„³l è R ¯ u 4 â „ D ß ˆ e  Ç –øT#…ÙbRà Àù’ü „‰Ðú S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰Ðú E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰Ðú a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Ðú a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰ÐúS�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰ÐúK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÐúS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰Ðú)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰Ðúo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÐúS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÐúaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.r‰Ðúa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Ðú)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰ÐùE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Ðù~'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ðù}E‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰Ðù6E�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Ðù5'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Ðù4)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Ðù3)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Ðù2''诸事ä¸�宜.诸事ä¸�宜.R‰Ðù1)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Ðù0�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Ðù/)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Ðù.)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Ðù-7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Ðù,7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Ðù+)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ðù*)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Ðù)'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Ðù( ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰Ðù'E�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Ðù&)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰Ðù%S{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰Ðù$Eƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑. !Ô ¿ œ c Æ } Ý  ! é „ 5 ô ¬ N ¸n d´uÊ"ñª ^ENÔu‰Ðù#K�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰Ðù"Yƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰Ðù!E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰Ðù S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÐùS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÐùS�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÐùSC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.,‰Ðù'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Ðùa�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Ðù ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Ðù'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰ÐøS��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰ÐøR ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰ÐøQ'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰ÐøP)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰ÐøO)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰ÐøN'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰ÐøM)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰ÐøL)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰ÐøK7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰ÐøJ)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰ÐøI)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÐøH'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰ÐøG)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰ÐøF�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰ÐøE‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰ÐøD's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰ÐøC ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰ÐøB)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰ÐøA''余事勿å�–.余事勿å�–.�}‰Ðø@Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰Ðø?aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰Ðø>Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑. %˜£j÷Œ& £ ã � É $ ¹ – Ë ŠÅzAò£d1êPÏ�Ö5ê‡Çؘ;‰Ðø=EC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰Ðø<)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰Ðø;E‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰Ðø:E‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰Ðø9S{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.F‰Ðø8'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Ðø7}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Ðø6}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Ðø5'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Ð÷n7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Ð÷ma�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Ð÷l'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Ð÷k' 诸事ä¸�宜..‰Ð÷j77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Ð÷i'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Ð÷h7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Ð÷g7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Ð÷f)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Ð÷e7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Ð÷d7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Ð÷cS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Ð÷bE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Ð÷aE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰Ð÷`Q5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰Ð÷_E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰Ð÷^''诸事ä¸�宜.诸事ä¸�宜.f‰Ð÷]S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Ð÷\E‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰Ð÷[K‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Ð÷ZS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Ð÷Ya‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰Ð÷Xa�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Ð÷Woe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Ð÷Va}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰Ð÷US�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Ð÷T)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.X‰Ð÷SE}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财. Q}Ñb Ä k ± ø  N • 8 iÄ L'�Ì’ç„ÄÜ Q�4‰Ð÷RE‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Ð÷Q/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Ð÷ 'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Ð÷ E‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Ð÷ )‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ð÷E�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ð÷E‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ð÷E7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Ð÷E‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰Ð÷S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Ð÷)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Ð÷SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Ð÷E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Ð÷)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Ðö')诸事ä¸�宜.破屋.å��垣.�‰Ðö~E‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Ðö}ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰Ðö|So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰Ðö{E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰Ðöz'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰Ðöya�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰ÐöxS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰ÐöwS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰ÐövEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰ÐöuE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰ÐötS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰ÐösECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰ÐörS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰Ðöq=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬. L�¤C ý 2 œ 8 Œ > ’ Ç >Þ(Ë…¢Ú¶õ˜Ô/µvÛpL‰Ðöp')诸事ä¸�宜.解除.æ²�æµ´.f‰Ðöo�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Ðön�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Ðöm)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Ðö%o�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Ðö$� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Ðö#E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰Ðö"E‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰Ðö!E}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Ðö )‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Ðö')诸事ä¸�宜.求医.破屋.�B‰ÐöE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰ÐöEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Ðö_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÐöE}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Ðö‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÐöSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÐöE�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÐöE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÐöS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Ðö'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÐöE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰Ðö7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰ÐöS�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Ðöo‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰ÐöEOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰ÐöE�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰ÐöS�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰Ðö S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰Ðö S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’. ¥mƒ š ý ° ® Ù a % ‡ N|ßx±€¸8Þ3S¡KÊ;¥�‰Ðö E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰Ðö E�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰Ðö E�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰ÐõC)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰ÐõB)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰ÐõA'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Ðõ@E‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Ðõ?E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰Ðõ>Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Ðõ=E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Ðõ<E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Ðõ;'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰Ðõ:E‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰Ðõ9E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Ðõ8)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰Ðõ7E}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰Ðõ6S‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Ðõ57Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Ðõ4E�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Ðõ3)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Ðõ2a�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Ðõ1E‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Ðõ0oƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰Ðõ/7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Ðõ.S�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Ðõ-a‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Ðõ,E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Ðõ+a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Ðõ*S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬. ª%Ã Ë  ¹ 0 * Í  ] 4Köm©j×]Í“Q¯×€Hª�‰Ðõ)a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ðõ('Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ðõ')� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ðõ&)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ðõ%'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ð¯)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ð¯~)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ð¯}Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ð¯|)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ð¯{)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ð¯z)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ð¯y �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ð¯xS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ð¯w'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ð¯vE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ð¯uE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ð¯taQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ð¯sSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ð¯rS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ð¯qaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ð¯pa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ð¯oE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ð¯nE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ð¯mSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ð¯la�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ð¯ka_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ð¯jS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ð¯ioƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ð¯hSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ð¯go‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬. á¸ è  K  @ ` ë ¤s“HB—ÅáñÀ�8àá‰Ð¯f''诸事ä¸�宜.诸事ä¸�宜.�V‰Ð¯eƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰Ð¯dEså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Ð¯c)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Ð¯b''诸事ä¸�宜.诸事ä¸�宜.,‰Ð¯a'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰Ð¯Eƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰Ð¯)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Ð¯'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰Ð¯E�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Ð¯)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰Ð¯EƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰Ð¯EYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰Ð¯E‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Ð¯'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰Ð¯S�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰Ð¯S‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰Ð¯S�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰Ð¯S‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰Ð¯ E‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Ð¯ )Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰Ð¯ E‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰Ð¯ S‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰Ð¯ E‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰Ð¯S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰Ð¯a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖. !&5î í ˜  ‚ ·  ’ 1 ¾ÛªÍ6òÇŠFÀ[Õi8¨çt&I‰Ð¯SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰Ð¯S�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰Ð¯S‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’.� ‰Ð¯}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Ð¯'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Ð¯)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Ð¯)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Ð®'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Ð®~)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Ð®})o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Ð®7']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Ð®67Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ð®5)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ð®4)5行丧.安葬.作ç�¶.造畜椆栖.?‰Ð®3)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ð®2E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ð®1Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ð®0Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰Ð®/E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Ð®.'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Ð®-S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰Ð®,S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰Ð®+E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰Ð®*S�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰Ð®)E‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰Ð®(S‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰Ð®'g�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰Ð®&g�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰Ð®%Em动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰Ð®$Y�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰Ð®#S�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰Ð®")m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰Ð®!K‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬. !¢wÙ_ ¡ @ Ø - » ‘ ×  Ë N§?¨$å’D‡ �TÁ]ûŸé¢B‰Ð® SC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.�0‰Ð® ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Ð®E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Ð®''诸事ä¸�宜.诸事ä¸�宜.:‰Ð®'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Ð®oa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰Ð®E�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰Ð®E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Ð­RE�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ð­Q)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Ð­PE‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Ð­OE_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ð­NE�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰Ð­M)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰Ð­L)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Ð­K)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰Ð­JE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰Ð­IS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰Ð­H)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰Ð­Ga�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰Ð­Fo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰Ð­E=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰Ð­Da‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰Ð­C5'探病.余事勿å�–.余事勿å�–.m‰Ð­Bo}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰Ð­AS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰Ð­@aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰Ð­?E�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰Ð­>a�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰Ð­=g)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Ð­<o� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Ð­;a�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Ð­:}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’. "†¸iúY Ñ l 3 ª æ P { ò xøiý.­t·$†ö®_µcá¢=цF‰Ð­9)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Ð­8)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Ð­7)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰Ð­6'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Ð­5)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Ð¬o)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰Ð¬nCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Ð¬m)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰Ð¬l)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰Ð¬k7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰Ð¬j)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰Ð¬i ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰Ð¬h ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰Ð¬g ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰Ð¬fS‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰Ð¬e)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰Ð¬dS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰Ð¬cE‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰Ð¬bE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰Ð¬aS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰Ð¬`S�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰Ð¬_a�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰Ð¬^a�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰Ð¬]S‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰Ð¬\S�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰Ð¬[a‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰Ð¬ZS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰Ð¬Y)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Ð¬XE� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�‰Ð¬W}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ð¬Vo�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ð¬U�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Ð¬T7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Ð¬S)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬. %|®P«T1 â “ b Ä  › * · å ‘Õc#C|#‹rì�e°}.Ë|J‰Ð¬R)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Ð¬Q'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Ð¬ )}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Ð¬ )E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Ð¬ �èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Ð¬)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ð¬'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Ð¬7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Ð¬'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Ð¬'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Ð¬ ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰Ð¬S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰Ð¬E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰Ð¬a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Ð«a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰Ð«~S�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰Ð«}K‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰Ð«|S‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰Ð«{)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰Ð«zo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰Ð«yS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰Ð«xaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰Ð«wa‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰Ð«vS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰Ð«uE�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰Ð«tS�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰Ð«s7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�‰Ð«rE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Ð«q'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Ð«p)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Ð«o)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Ð«n''诸事ä¸�宜.诸事ä¸�宜.R‰Ð«m)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Ð«&�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Ð«%)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Ð«$)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Ð«#7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹. #b`¤l ¸ w / Ñ   ; ñ � ç m ° iÏKd¸wŸ¨.D ;Ý£b<‰Ð«"7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Ð«!)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ð« )�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Ð«'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Ð« ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰Ð«E�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Ð«)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰Ð«S{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰Ð«Eƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰Ð«K�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰Ð«Yƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰Ð«E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰Ð«S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰Ð«S‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰Ð«S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰Ð«SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰Ð«a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰Ð«S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰Ð«7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰Ð«K‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰Ð«S�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.�"‰Ð«  ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Ð« '�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Ð« )s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Ð« )�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Ð« 'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰ÐªC)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰ÐªB)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰ÐªA7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰Ðª@)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰Ðª?)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ðª>'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰Ðª=)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Ðª<�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰Ðª;‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶. #ä[ðÍA W Á R ü ± x ) Ú › h R ! ‡¤ü¹<¹V–î§g~)&Ê-äD‰Ðª:'s诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰Ðª9 ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰Ðª8)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰Ðª7''余事勿å�–.余事勿å�–.�}‰Ðª6Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰Ðª5aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰Ðª4Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰Ðª3EC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰Ðª2)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰Ðª1E‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰Ðª0E‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰Ðª/S{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰Ðª.S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰Ðª-S�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰Ðª,)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰Ðª+a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰Ðª*7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.�‰Ðª)a�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Ðª('C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Ðª'' 诸事ä¸�宜..‰Ðª&77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Ðª%'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Ð©^7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Ð©]7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Ð©\)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Ð©[7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Ð©Z7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Ð©YS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Ð©XE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Ð©WE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰Ð©VQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰Ð©UE�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰Ð©T''诸事ä¸�宜.诸事ä¸�宜.f‰Ð©SS� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Ð©RE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓. ¤‡V�@ q Ì ¨  T / ˜ÔšïŒÌ`æ‚3~EÒg~¾j¤�@‰Ð©QK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Ð©PS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Ð©Oa‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰Ð©Na�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Ð©Moe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Ð©La}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰Ð©KS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Ð©J)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰Ð©I7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰Ð©HSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰Ð©GE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰Ð©FE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰Ð©ES� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.�:‰Ð©D)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ð©CE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ð©BE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ð©AE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Ð¨{E‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰Ð¨zS�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Ð¨y)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Ð¨xSEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Ð¨wE‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Ð¨v)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Ð¨u')诸事ä¸�宜.破屋.å��垣.�‰Ð¨tE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Ð¨sƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰Ð¨rSo动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰Ð¨qE‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰Ð¨p'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰Ð¨oa�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£. „TZ �  ¦ ð “ M j ¢ ~½`œ÷}®_ðŒ �]îP÷=„�3‰Ð¨nS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰Ð¨mS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰Ð¨lEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰Ð¨kE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰Ð¨jS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰Ð¨iECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰Ð¨hS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰Ð¨g=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰Ð¨fE� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰Ð¨e7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰Ð¨dEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰Ð¨cauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰Ð¨bE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.u‰Ð¨a� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Ð¨`E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰Ð¨_E‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰Ð¨^E}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Ð¨])‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Ð¨')诸事ä¸�宜.求医.破屋.�B‰Ð¨E‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰Ð¨Eƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Ð¨_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰Ð¨E}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Ð¨‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰Ð¨Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰Ð¨ E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰Ð¨ E‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰Ð¨ S‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Ð¨ '}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰Ð¨ E‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土. ›þ) ± u × ž Ì o / È  Ð ˆ.ƒ£k‰AÙcð�¦`•ÿ›_‰Ð¨7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰Ð¨S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Ð¨o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰Ð¨EOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰Ð¨E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰Ð¨S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰Ð¨S�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰Ð¨S�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰Ð¨S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰Ð§E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰Ð§~SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰Ð§}K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰Ð§|)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.3‰Ð§{'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Ð§zE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Ð§yE‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰Ð§3Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Ð§2E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Ð§1E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Ð§0'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰Ð§/E‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰Ð§.E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Ð§-)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰Ð§,E}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰Ð§+S‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Ð§*7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Ð§)E�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Ð§()Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Ð§'a�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Ð§&E‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Ð§%oƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓. 0£ô3 Û ! Ì C  @ ­ 3ò£i'ØfkÀ€íƒ}0H‰Ð§$7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Ð§#S�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Ð§"a‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Ð§!E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Ð§ a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Ð§S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰Ð§7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰Ð§}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰Ð§E‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰Ð§uA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Ð§�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰Ð§��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.J‰Ð§)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ð§Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ð§)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ð§)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ïáo)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ïán �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÏámS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ïál'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÏákE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÏájE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÏáiaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÏáhSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÏágS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÏáfaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ïáea‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÏádE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÏácE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�. n.¹ˆ ¨ ] W ¬  Ú ö Õ7;ŒDiYýtn‚‰ÏábSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ïáaa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Ïá`a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ïá_S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ïá^oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ïá]Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ïá\o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ïá[K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰ÏáZ�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÏáY� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÏáX�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÏáW��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.,‰ÏáV'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰ÏáUEƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰ÏáT)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰ÏáS'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰ÏáRE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰ÏáQ)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰Ïá EƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰Ïá EYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰ÏáE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Ïá'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰ÏáS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÏáS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土. Pì] ^  x 4 Ì ˆ J  7 ’ DÄKç&³e€M°w¥ÅPp‰ÏáS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰ÏáS‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰ÏáE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Ïá)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰ÏáE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰ÏàS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰Ïà~E‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰Ïà}S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰Ïà|a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰Ïà{SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰ÏàzS�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰ÏàyS‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰Ïàxoaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰ÏàwS�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰ÏàvS�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰Ïàu){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ïàta�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÏàsE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.C‰Ïàr)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Ïàq']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Ïàp7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ïào)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ïàn)5行丧.安葬.作ç�¶.造畜椆栖.?‰Ïàm)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ïà'E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ïà&Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ïà%Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰Ïà$E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Ïà#'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Ïà"S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’. iå¦ ß S  H Î N  ‚ ä D ÒšSˆAÒ@ëgÕ eå„n‰Ïà!S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰Ïà E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰ÏàS�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰ÏàE‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰ÏàS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰Ïàg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰Ïàg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰ÏàEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰ÏàY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰ÏàS�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰Ïà)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰ÏàK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÏàSC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰Ïà)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰ÏàS‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰Ïào�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰Ïà��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰Ïà}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.� ‰ÏàE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰ÏàE5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Ïà E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ïà )�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Ïà E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Ïà E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ïà E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰ÏßB)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰ÏßA)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Ïß@)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰Ïß?E�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕. "X1°w º ' ‰ ù ± b ¸ f  ä ¥ eŒÏ~òx4ºYñFÔªð3ägÀXc‰Ïß>S�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰Ïß=)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰Ïß<a�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰Ïß;o7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰Ïß:=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰Ïß9a‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰Ïß85'探病.余事勿å�–.余事勿å�–.m‰Ïß7o}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰Ïß6S‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰Ïß5aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰Ïß4E�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰Ïß3a�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰Ïß2g)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Ïß1o� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Ïß0o�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰Ïß/YQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰Ïß.}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰Ïß-E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Ïß,)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.:‰Ïß+'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Ïß*)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Ïß))o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰Ïß(Ciå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Ïß')�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰Ïß&)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰Ïß%7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰ÏÞ_)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰ÏÞ^ ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰ÏÞ] ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰ÏÞ\ ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÏÞ[S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰ÏÞZ)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÏÞYS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰ÏÞXE‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬. âjv ò ]  × ˆ P ò › h  ¶ _šø�¶Q�Ë5`×]ÝNâg‰ÏÞWE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÏÞVS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÏÞUS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰ÏÞTa�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰ÏÞSa�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÏÞRS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰ÏÞQS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰ÏÞPa‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰ÏÞOS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰ÏÞN)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰ÏÞME� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰ÏÞLS‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰ÏÞK}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰ÏÞJ��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰ÏÞI��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰ÏÞHa�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰ÏÞGa�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.^‰ÏÞF'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰ÏÞE)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰ÏÞD)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰ÏÞC�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰ÏÞB)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÏÞA'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰ÏÝ{7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰ÏÝz'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰ÏÝy'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰ÏÝx ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰ÏÝwS�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÏÝvE�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰ÏÝua_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰ÏÝta�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑. a³l è R ¯ u 4 â „ D ß ˆ Ü £Äóaçv1Ý!¯o�Èab‰ÏÝsS�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰ÏÝrK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÏÝqS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰ÏÝp)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰ÏÝoo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÏÝnS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÏÝmaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰ÏÝla‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰ÏÝkS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰ÏÝjE�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰ÏÝiS�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰ÏÝh7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰ÏÝgg‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰ÏÝfY‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰ÏÝeS‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰ÏÝd)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰ÏÝc��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.R‰ÏÝb)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰ÏÝa�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰ÏÝ`)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰ÏÝ_)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰ÏÝ^7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰ÏÝ]7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰ÏÝ)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰ÏÝ)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰ÏÝ'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰ÏÝ ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰ÏÝE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰ÏÝ)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰ÏÝS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰ÏÝEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑. H«¨…L ¯ f Æ h Ò m  Ý • 7 ’ Hxw‡Êƒée~Ò‘¹ÂHu‰ÏÝK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰ÏÝ Yƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰ÏÝ E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰ÏÝ S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÏÝ S‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÏÝ S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÏÝSC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰ÏÝa�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÏÝS�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰ÏÝ7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰ÏÝK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰ÏÝS�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÏÝS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰ÏÝaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰ÏÝQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰ÏÜEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰ÏÜ~a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.Y‰ÏÜ})�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰ÏÜ|)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰ÏÜ{7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰ÏÜz)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰ÏÜy)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÏÜ3'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰ÏÜ2)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰ÏÜ1�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰ÏÜ0‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰ÏÜ/'s诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰ÏÜ. ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰ÏÜ-)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰ÏÜ,''余事勿å�–.余事勿å�–.�}‰ÏÜ+Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰ÏÜ*aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–. Z¬æA Ö ³ ' è = § 8 â — ^  6a`£c€Ø••2rʃCZ�c‰ÏÜ)Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰ÏÜ(EC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰ÏÜ')m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰ÏÜ&E‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰ÏÜ%E‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÏÜ$S{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÏÜ#S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰ÏÜ"S�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰ÏÜ!)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰ÏÜ a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰ÏÜ7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰ÏÜ7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰ÏÜS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰ÏÜ7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰ÏÜ)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÏÜK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÏÜS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.J‰ÏÜ7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰ÏÜ)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰ÏÜ7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰ÏÜ7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰ÏÛNS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰ÏÛME�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰ÏÛLE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰ÏÛKQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰ÏÛJE�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰ÏÛI''诸事ä¸�宜.诸事ä¸�宜.f‰ÏÛHS� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰ÏÛGE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰ÏÛFK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰ÏÛES]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–. ZF� ã * Í þ Y 5 › á ™¼%m'Y¸hü‚Ïán�Z�:‰ÏÛDa‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰ÏÛCa�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰ÏÛBoe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰ÏÛAa}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰ÏÛ@S�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰ÏÛ?)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰ÏÛ>7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰ÏÛ=SS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰ÏÛ<E� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰ÏÛ;E�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰ÏÛ:S� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰ÏÛ9K]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰ÏÛ8a�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰ÏÛ7o‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰ÏÛ6EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰ÏÛ5a‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰ÏÛ4S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰ÏÛ3)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰ÏÛ2SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰ÏÛ1E‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰ÏÚk)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰ÏÚj')诸事ä¸�宜.破屋.å��垣.�‰ÏÚiE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰ÏÚhƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰ÏÚgSo动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰ÏÚfE‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰ÏÚe'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰ÏÚda�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰ÏÚcS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰ÏÚbS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养. R5Ÿ; � A • Ê A á + Î ˆ¥Ý1ñ‰èvØp ºKçdø¸I«RT‰ÏÚaEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰ÏÚ`E�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰ÏÚ_S�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰ÏÚ^ECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰ÏÚ]S� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰ÏÚ\=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰ÏÚ[E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰ÏÚZ7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰ÏÚYEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰ÏÚXauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰ÏÚWE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰ÏÚVE�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰ÏÚUE�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰ÏÚTY�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰ÏÚS7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰ÏÚR)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰ÏÚQ}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�B‰ÏÚPE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰ÏÚOEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰ÏÚN_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÏÚME}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰ÏÚ‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÏÚSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÏÚE�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÏÚE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÏÚS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰ÏÙ'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÏÙ~E‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰ÏÙ}7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰ÏÙ|S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰ÏÙ{o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土. j€— ú ­ « Ö ^ " „ K y Üu®}µøƒ6áu“Kãmú‹°jA‰ÏÙzEOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰ÏÙyE�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰ÏÙxS�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰ÏÙwS�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰ÏÙvS�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰ÏÙuS�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰ÏÙtE�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰ÏÙsSEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰ÏÙrK�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰ÏÙq)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰ÏÙp7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰ÏÙoS_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰ÏÙnE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÏÙmS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÏÙlS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.�B‰ÏÙkE‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰ÏÙj'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰ÏÙiE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰ÏÙ#E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰ÏÙ")_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰ÏÙ!E}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰ÏÙ S‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰ÏÙ7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰ÏÙE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰ÏÙ)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰ÏÙa�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰ÏÙE‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰ÏÙoƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰ÏÙ7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰ÏÙS�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰ÏÙa‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰ÏÙE�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶. —wq e ¤ L { ’ = ´ð±¤1Û'jì'z#Ô”—e‰ÏÙa{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰ÏÙS�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰ÏÙ7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰ÏÙ}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰ÏÙE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰ÏÙuA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰ÏÙ�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰ÏÙ��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰ÏÙ o�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰ÏÙ � �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰ÏÙ S‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÏÙ aSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÏÙ S�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.u‰ÏÙ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÏÙS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÏÙ'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÏÙE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ï“_E�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰Ï“^aQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ï“]Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ï“\S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ï“[aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ï“Za‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ï“YE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Ï“XE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Ï“WSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Ï“Va�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水. l « Ù d 3 S   W tØŸâD¦ªû�³Øv~ÈlW‰Ï“Ua_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Ï“TS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Ï“Soƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Ï“RSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Ï“Qo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Ï“PK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Ï“O�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Ï“N� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Ï“M�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Ï“L��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Ï“Ko�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Ï“JS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Ï“I)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Ï“HK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Ï“GEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.�%‰Ï“F)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰Ï“EEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰Ï“DEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰Ï“CE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Ï“B'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰Ï“AS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰Ï’zS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰Ï’yS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰Ï’xS‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬. ßqr# Œ H Ý ‚ ­  < qÌ~þ…!`ퟺW‡¹ê±ß�L‰Ï’wE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Ï’v)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰Ï’uE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰Ï’tS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰Ï’sE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰Ï’rS{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰Ï’qa‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰Ï’pSQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰Ï’oS�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰Ï’nS‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰Ï’moaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰Ï’lS�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰Ï’kS�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰Ï’j){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ï’ia�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰Ï’hE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰Ï’g� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰Ï’f��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰Ï’e7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰Ï’dSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰Ï’cS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.?‰Ï’b)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ï’aE�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ï’`Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ï’_Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰Ï’^E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财. °9­_ m q  5 — ÷ S…M;ô…󞈽˜7Äá°,‰Ï’]'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Ï’S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰Ï’S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰Ï’E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰Ï’S�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰Ï’E‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰Ï’S‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰Ï’g�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰Ï’g�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰Ï’Em动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰Ï’Y�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰Ï’ S�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰Ï’ )m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰Ï’ K‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰Ï’ SC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰Ï’ )Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰Ï’S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰Ï’o�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰Ï’��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰Ï’}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰Ï’S‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰Ï’Suå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰Ï’aƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰Ï’o�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰Ï’S_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.I‰Ï‘E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ï‘~E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰Ï‘})‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易. ßp(Ù„ Ë  » % † F m ° _ÓY›:Ò'µ‹ÑÅH¡9¢ß:‰Ï‘|)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Ï‘{)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰Ï‘zE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰Ï‘yS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰Ï‘2)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰Ï‘1a�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰Ï‘0o7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰Ï‘/=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰Ï‘.a‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰Ï‘-5'探病.余事勿å�–.余事勿å�–.m‰Ï‘,o}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰Ï‘+S‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰Ï‘*aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰Ï‘)E�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰Ï‘(a�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰Ï‘'g)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Ï‘&o� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Ï‘%o�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰Ï‘$YQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰Ï‘#}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰Ï‘"E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Ï‘!)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰Ï‘ � �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰Ï‘u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰Ï‘Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰Ï‘o‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰Ï‘a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰Ï‘Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.J‰Ï‘7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰Ï‘)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰Ï‘ ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土. i$d ´ ] ˜ ö  ´ O �É3^Õ[ÛLà�Wši�‰Ï‘ ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰Ï‘ ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰Ï‘S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰Ï�O)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰Ï�NS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰Ï�ME‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰Ï�LE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰Ï�KS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰Ï�JS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰Ï�Ia�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰Ï�Ha�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰Ï�GS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰Ï�FS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰Ï�Ea‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰Ï�DS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰Ï�C)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Ï�BE� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰Ï�AS‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰Ï�@}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰Ï�?��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰Ï�>��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Ï�=a�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰Ï�<a�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Ï�;��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰Ï�:o‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰Ï�9E‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬. T< k ˆ Ù _ î { © U™'ç@ÙCçOË6á°a)Ô�4‰Ï�8a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰Ï�7aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.3‰Ï�6'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Ï�57oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Ï�4'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Ï�3'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Ï�2 ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰Ï�1S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰Ï�kE�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰Ï�ja_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Ï�ia�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰Ï�hS�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰Ï�gK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰Ï�fS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰Ï�e)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰Ï�do}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰Ï�cS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰Ï�baO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰Ï�aa‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰Ï�`S�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰Ï�_E�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰Ï�^S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰Ï�]7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰Ï�\g‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰Ï�[Y‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰Ï�ZS‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Ï�Y)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Ï�X��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土. �ÿ‰ R q í ¦  Z  AJÐæƒ<¸"ÝER{°o��L‰Ï�Wo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Ï�VEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Ï�U}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Ï�TS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Ï�S��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.<‰Ï�R7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Ï�Q)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ï�P)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Ï�O'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Ï�N ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰Ï�ME�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Ï�)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰Ï�S{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰Ï�Eƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰Ï�K�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰Ï�Yƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰Ï�E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰Ï�S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÏŽS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÏŽ~S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÏŽ}SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰ÏŽ|a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÏŽ{S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰ÏŽz7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰ÏŽyK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰ÏŽxS�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÏŽwS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰ÏŽvaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�. 9ÀÝ5 ò u ò � Ï ' à   · b_<f}Á^ŒõµøS 9�J‰ÏŽuQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰ÏŽtEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰ÏŽsa�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰ÏŽrE‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰ÏŽqEC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰ÏŽpS�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰ÏŽo)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰ÏŽnKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÏŽmS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.Y‰ÏŽl)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰ÏŽk�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰ÏŽj‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰ÏŽi's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰ÏŽ# ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰ÏŽ")Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰ÏŽ!''余事勿å�–.余事勿å�–.�}‰ÏŽ Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰ÏŽaQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰ÏŽEƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰ÏŽEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰ÏŽ)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰ÏŽE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰ÏŽE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÏŽS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÏŽS�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰ÏŽS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰ÏŽ)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰ÏŽa�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰ÏŽ7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰ÏŽ7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–. \”¶g ² y  › 5 ² ò ž Ø 3È¥Ú/™ °öiÈïÓ\�7‰ÏŽS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰ÏŽ7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰ÏŽ)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÏŽK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÏŽS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÏŽ S�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰ÏŽ � �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰ÏŽ a‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰ÏŽ a_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰ÏŽ � �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�‰ÏŽE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰ÏŽE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰ÏŽQ5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰ÏŽE�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰Ï�>''诸事ä¸�宜.诸事ä¸�宜.f‰Ï�=S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Ï�<E‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰Ï�;K‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Ï�:S]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Ï�9a‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰Ï�8a�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Ï�7oe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Ï�6a}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰Ï�5S�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Ï�4)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰Ï�37‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰Ï�2SS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰Ï�1E� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰Ï�0E�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰Ï�/S� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬. ³bú“D Õ q î ‚ B Ó 5 Ü " ið¿©Ú5­W \p¸r¤³K‰Ï�.K]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰Ï�-a�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰Ï�,o‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰Ï�+EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Ï�*a‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰Ï�)E‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Ï�()må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Ï�'�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Ï�&){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Ï�%)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ï�$)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.�‰Ï�#E‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Ï�"ƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰Ï�!So动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰ÏŒ[E‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰ÏŒZ'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰ÏŒYa�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰ÏŒXS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰ÏŒWS‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰ÏŒVEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰ÏŒUE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰ÏŒTS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰ÏŒSECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰ÏŒRS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰ÏŒQ=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰ÏŒPE� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰ÏŒO7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰ÏŒNEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰ÏŒMauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰ÏŒLE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰ÏŒKE�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩. Þ«?é] ­ 7 Ä U Û z 4 i Ó oÃuÉþuxiæE™YñPÞm‰ÏŒJE�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰ÏŒIY�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰ÏŒH7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰ÏŒG)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰ÏŒF}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰ÏŒEE‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰ÏŒD��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰ÏŒC�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰ÏŒBE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰ÏŒAE�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.[‰ÏŒ@Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÏŒ?E�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÏŒ>E‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÏŒ=S‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Ï‹t'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰Ï‹sE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰Ï‹r7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰Ï‹qS�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Ï‹po‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰Ï‹oEOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰Ï‹nE�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰Ï‹mS�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰Ï‹lS�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰Ï‹kS�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰Ï‹jS�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰Ï‹iE�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰Ï‹hSEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰Ï‹gK�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰Ï‹f)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰Ï‹e7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰Ï‹dS_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产. ~;Ž7 “ è ¨  « + B ¥ XV� Í/ö$’.®�ý@Ë~H‰Ï‹cE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰Ï‹bS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰Ï‹aS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Ï‹`}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Ï‹_}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Ï‹^{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Ï‹]�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Ï‹\)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Ï‹[u�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.�L‰Ï‹ZS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Ï‹Y7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Ï‹E�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Ï‹)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Ï‹a�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Ï‹E‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Ï‹oƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰Ï‹7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Ï‹ S�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Ï‹ a‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Ï‹ E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Ï‹ a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Ï‹ S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰Ï‹7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰Ï‹}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰Ï‹E‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰Ï‹uA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Ï‹�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰Ï‹��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�. _&K é ñ ; ß V P ó Dƒ+ZqºW¤NšÝ_y‰Ï‹o�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Ï‹� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰Ï‹S‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÏŠaSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÏŠ~S�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰ÏŠ}Sƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰ÏŠ|7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰ÏŠ{o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰ÏŠz��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰ÏŠy}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.P‰ÏŠxaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÏŠwSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÏŠvS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÏŠuaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÎÅOa‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÎÅNE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÎÅME}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÎÅLSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÎÅKa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÎÅJa_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÎÅIS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÎÅHoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÎÅGSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÎÅFo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÎÅEK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖. Ö0b “ Z ˆ ¨ 3 a ì VÒù ½!è+�ïóDÖi‰ÎÅD�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰ÎÅC� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰ÎÅB�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰ÎÅA��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰ÎÅ@o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÎÅ?S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÎÅ>)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÎÅ=K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÎÅ<Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÎÅ;Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÎÅ:aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÎÅ9S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÎÅ8S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÎÅ7a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.p‰ÎÅ6S�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÎÅ5S‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰ÎÅ4S�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰ÎÅ3S‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰ÎÅ2E‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰ÎÅ1)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰ÎÄjE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰ÎÄiS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰ÎÄhE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕. L5� ¯ < Y ( è ÿ l  =Òw¢1fÁsózU┯L^‰ÎÄgS{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰ÎÄfa‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰ÎÄeSQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰ÎÄdS�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰ÎÄcS‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰ÎÄboaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰ÎÄaS�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰ÎÄ`S�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰ÎÄ_){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÎÄ^a�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÎÄ]E‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰ÎÄ\� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰ÎÄ[��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰ÎÄZ7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÎÄYSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÎÄXS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰ÎÄW��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰ÎÄVa{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰ÎÄUg�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÎÄTY‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰ÎÄS)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.,‰ÎÄR'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰ÎÄQS‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰ÎÄPS�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰ÎÄOE�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰ÎÄNS�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰ÎÄME‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰ÎÄS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜. ʱ4�% Ž ñ & ° F ¡ L ¯³SwÙ9•Ç�H}6Ç5à\Ê� ‰ÎÄg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰ÎÄg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰ÎÄEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰ÎÄY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰ÎÄS�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰ÎÄ)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰ÎÄK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÎÃSC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰ÎÃ~)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰ÎÃ}S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰ÎÃ|o�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰ÎÃ{��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰ÎÃz}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÎÃyS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÎÃxSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÎÃwaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÎÃvo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÎÃuS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÎÃt}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰ÎÃsa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰ÎÃra�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰ÎÃq�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰ÎÃp}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰ÎÃoE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰ÎÃnS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰ÎÃm)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰ÎÃla�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰ÎÃko7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰. ŒF‰ ¢ ù f ü Q ü C � 3�þ¾å(×KÑ�²JŸ-IŒ�7‰ÎÃj=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰ÎÃia‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰ÎÃ"5'探病.余事勿å�–.余事勿å�–.m‰ÎÃ!o}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰Îà S‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰ÎÃaw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰ÎÃE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰ÎÃa�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰ÎÃg)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰ÎÃo� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰ÎÃo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰ÎÃYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰ÎÃ}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰ÎÃE‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰ÎÃ)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰ÎÃ� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰ÎÃu�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰ÎÃEwå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰ÎÃo‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰ÎÃa‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰ÎÃEm动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰ÎÃS‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰ÎÃa{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Îà �� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Îà ��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Îà S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.�7‰Îà S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰Îà )Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÎÃS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’. ?�¨= è . R ’ â 7 ‹Æ$­â}D»÷aŒ‰ z?�I‰ÎÃE‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰ÎÃE�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÎÃS�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÎÂ?S�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰ÎÂ>a�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰ÎÂ=a�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÎÂ<S‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰ÎÂ;S�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰ÎÂ:a‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰ÎÂ9S�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰ÎÂ8)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰ÎÂ7E� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰ÎÂ6S‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰ÎÂ5}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰ÎÂ4��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰ÎÂ3��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰ÎÂ2a�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰ÎÂ1a�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰ÎÂ0��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰ÎÂ/o‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰ÎÂ.E‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰ÎÂ-a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰ÎÂ,aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰ÎÂ+E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰ÎÂ*S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰ÎÂ)�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶. u5ô" v = ^ � ª û � �Ëw»I )bûe qíDu�I‰ÎÂ(� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰ÎÂ'��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.‰ÎÂ&S�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÎÂ%E�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰ÎÂ$a_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰ÎÂ#a�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰ÎÂ"S�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰ÎÂ!K‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÎÁ[S‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰ÎÁZ)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰ÎÁYo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÎÁXS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÎÁWaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰ÎÁVa‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰ÎÁUS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰ÎÁTE�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰ÎÁSS�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰ÎÁR7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰ÎÁQg‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰ÎÁPY‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰ÎÁOS‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰ÎÁN)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰ÎÁM��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰ÎÁLo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰ÎÁKEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰ÎÁJ}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’. ¡ÿ‰ R q í ¦  Z  AJÐæƒ<¸ís«*x¡�Q‰ÎÁIS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰ÎÁH��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰ÎÁGa�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰ÎÁFo‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰ÎÁE��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰ÎÁDK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰ÎÁCS‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.‰ÎÁBE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰ÎÁA)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰ÎÁ@S{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰ÎÁ?Eƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰ÎÁ>K�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰ÎÁ=Yƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰ÎÀvE‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰ÎÀuS7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÎÀtS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÎÀsS�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÎÀrSC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰ÎÀqa�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÎÀpS�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰ÎÀo7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰ÎÀnK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰ÎÀmS�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÎÀlS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰ÎÀkaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�. Su2 µ 2 Ï  g à ÷ ¢Ÿ|Cù­Ûx.¦Ïm#S�J‰ÎÀjQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰ÎÀiEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰ÎÀha�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰ÎÀgE‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰ÎÀfEC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰ÎÀeS�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰ÎÀd)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰ÎÀcKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÎÀbS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰ÎÀa7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰ÎÀ`7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰ÎÀ_aƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰ÎÀ^a‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÎÀ]EW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.4‰ÎÀ\)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰ÎÀ[''余事勿å�–.余事勿å�–.�}‰ÎÀZSƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰ÎÀYaQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰ÎÀEƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰ÎÀEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰ÎÀ)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰ÎÀE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰ÎÀE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÎÀS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÎÀ S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰ÎÀ S�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰ÎÀ )eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰ÎÀ a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰ÎÀ 7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑. ‡±üÃP å  ü < è " }  Ó uÓwaÔ3Z…>„LJ;‰ÎÀ7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰ÎÀS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰ÎÀ7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰ÎÀ)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÎÀK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÎÀS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÎÀS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰ÎÀ� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰ÎÀa‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Î¿a_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Î¿~� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Î¿}}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Î¿|� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰Î¿{S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Î¿z)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Î¿y'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.f‰Î¿xS� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Î¿wE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰Î¿vK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Î¿uS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Î¿.a‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰Î¿-a�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Î¿,oe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Î¿+a}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰Î¿*S�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Î¿))Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰Î¿(7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰Î¿'SS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔. !ˆ˜1âs Œ à q Ó z À  Ž =ª!¿TÌv({4�בÃ"Òfìˆ_‰Î¿&E� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰Î¿%E�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰Î¿$S� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰Î¿#K]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰Î¿"a�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰Î¿!o‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰Î¿ EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Î¿a‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰Î¿E‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Î¿)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Î¿�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Î¿){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Î¿)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Î¿)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰Î¿S� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Î¿7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Î¿�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Î¿o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Î¿Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.t‰Î¿a�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰Î¿S‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰Î¿S‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰Î¾KEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰Î¾JE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰Î¾IS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰Î¾HECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰Î¾GS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰Î¾F=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰Î¾EE� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰Î¾D7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰Î¾CEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰Î¾Bauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰Î¾AE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土. p”>²j Œ  ª 0 Ï ‰ ¾ ( Ä …ÕdãE¨8™uɉ!€p�‰Î¾@E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰Î¾?E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰Î¾>Y�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰Î¾=7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰Î¾<)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰Î¾;}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰Î¾:E‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰Î¾9��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰Î¾8�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰Î¾7E�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰Î¾6E�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Î¾5}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰Î¾4E�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Î¾3�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Î¾2� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Î¾1E�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.�&‰Î¾0E‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰Î¾/7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰Î¾.S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Î¾-o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰Î½eEOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰Î½dE�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰Î½cS�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰Î½bS�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰Î½aS�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰Î½`S�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰Î½_E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰Î½^SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰Î½]K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰Î½\)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰Î½[7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土. K;Ž7 “ è ¨  « + B ¥ XV�Ö’ã†F´PÐ0¯bí KP‰Î½ZS_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰Î½YE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰Î½XS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰Î½WS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Î½V}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Î½U}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Î½T{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Î½S�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Î½R)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Î½Qu�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰Î½P)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Î½Oaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰Î½NS‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Î½M'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰Î½LS‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�O‰Î½KE‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Î½Joƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰Î½I7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Î½S�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Î½a‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Î½E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Î½a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Î¼S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰Î¼~7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰Î¼}}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰Î¼|E‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰Î¼{uA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Î¼z�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰Î¼y��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�. ©&K é ñ ; ß V P ó D˜°f[¡Zaî˜ä'©y‰Î¼xo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Î¼w� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰Î¼vS‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰Î¼uaSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰Î¼tS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰Î¼sSƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Î¼r7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰Î¼qo‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Î¼p��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Î¼o}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Î¼n}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰Î¼mE‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰Î¼lEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Î¼k� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Î¼j� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.�)‰Î¼iE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰Î¼hE}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰Î¼gSƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰Î¼fa�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰Î¼ea_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰Í÷?S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰Í÷>oƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰Í÷=Sy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰Í÷<o‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰Í÷;K‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖. Ó¸ è  K  Û R ! ‹ é SÏöÿ�ºå(ŠìðAÓi‰Í÷:�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Í÷9� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Í÷8�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Í÷7��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Í÷6o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Í÷5S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰Í÷4)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Í÷3K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Í÷2Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Í÷1Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Í÷0aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Í÷/S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Í÷.S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Í÷-a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Í÷,��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Í÷+��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Í÷*'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Í÷)E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Í÷('_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Í÷''C诸事ä¸�宜.祭祀.解除.余事勿å�–.�I‰Í÷&E‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰Í÷%S‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰Í÷$E‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰Í÷#S{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰Í÷"a‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖. 5� ý j Ì 5 • U l Ù oª?äužÓ.à`çƒÂOI‰Í÷!SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰ÍöZS�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰ÍöYS‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰ÍöXoaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰ÍöWS�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰ÍöVS�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰ÍöU){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÍöTa�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÍöSE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰ÍöR� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰ÍöQ��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰ÍöP7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÍöOSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÍöNS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰ÍöM��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰ÍöLa{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰ÍöKg�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÍöJY‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰ÍöI)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰ÍöH�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰ÍöG7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰ÍöFa�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰ÍöE�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰ÍöD)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.�‰ÍöCE‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰ÍöBS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜. —p/Ž ø [ ¾ ó }  n  |€ D¦b”\J”­)—� ‰ÍöAg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰Íö@g�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰Íö?Em动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰Íö>Y�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰Íö=S�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰Íõw)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰ÍõvK‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰ÍõuSC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰Íõt)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰ÍõsS‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰Íõro�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰Íõq��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰Íõp}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÍõoS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÍõnSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰Íõmaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰Íõlo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÍõkS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Íõj}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰Íõia{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Íõha�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Íõg�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Íõf}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Íõea�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Íõd)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Íõc)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰ÍõbEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Íõa}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床. N4~M ' ~ ë � Ö � È ¸"ƒCj­\ÐV˜7Ï$²ˆÎN{‰Íõ`o�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.�4‰Íõ_a‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰Íõ^5'探病.余事勿å�–.余事勿å�–.m‰Íõ]o}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰Íõ\S‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰Íõ[aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰ÍõZE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰ÍõYa�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰Íõg)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Íõo� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Íõo�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰ÍõYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰Íõ}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰Íõ E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Íõ )_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰Íõ � �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰Íõ u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰Íõ Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰Íõo‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰Íõa‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰ÍõEm动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰ÍõS‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰Íõa{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Íõ�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Íõ��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰ÍõS‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Íõ'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Íô'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Íô~ ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Íô}'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Íô|a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�. «1² Ù n  _ ƒ à  h¼÷UÞ®uì(’½4º:«� ‰Íô{S�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÍôzS�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰Íôya�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰Íôxa�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÍôwS‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰ÍôvS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰Íôua‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰Íô/S�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰Íô.)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Íô-E� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰Íô,S‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰Íô+}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰Íô*��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰Íô)��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Íô(a�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰Íô'a�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Íô&��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰Íô%o‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰Íô$E‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰Íô#a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰Íô"aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰Íô!E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Íô S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰Íô�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Íô� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络. Á5ô" v = ^ � ª û � �Ëw»I )bÄ#xìjÁ�#‰Íô��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Íô_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Íô}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Íô}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Íô}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰ÍôE�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.�A‰ÍôK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÍôS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰Íô)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰Íôo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÍôS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÍôaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰Íôa‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰ÍóKS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰ÍóJE�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰ÍóIS�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰ÍóH7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜.�]‰ÍóGg‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰ÍóFY‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰ÍóES‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰ÍóD)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰ÍóC��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰ÍóBo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰ÍóAEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Íó@}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’. ¨0/ ¹ ? ‚ ; ¡  Ö 6 Š IqÉ2cð¿ôz²1¨�Q‰Íó?S‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Íó>��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Íó=a�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Íó<o‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Íó;��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰Íó:K‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Íó9S‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Íó8'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Íó7� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Íó6o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Íó5'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Íó4}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Íó3 ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.�R‰Íó2E‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰Íó1S7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰Íó0S‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰Íó/S�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰Íó.SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰Íó-a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÍòfS�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰Íòe7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰ÍòdK‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰ÍòcS�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰ÍòbS�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰Íòaaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰Íò`Q‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖. vC x 5 ¸ 5 Ò  j # ã E™h7–Lbp.Ë�ùb"eÀvE‰Íò_EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Íò^a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰Íò]E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰Íò\EC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰Íò[S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰ÍòZ)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰ÍòYKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÍòXS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰ÍòW7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰ÍòV7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰ÍòUaƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰ÍòTa‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÍòSEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰ÍòR�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰ÍòQ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰ÍòP'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰ÍòO}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰ÍòNo�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.;‰ÍòMEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰ÍòL)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰ÍòKE‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰ÍòJE‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÍòIS{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÍòS�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰ÍòS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰Íò)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰Íòa�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰Íñ7ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰Íñ~7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰Íñ}S‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬. b”¶g ² y  › 5 ²  Ê J ›ð±ñS±âUù?²8cb�4‰Íñ|7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰Íñ{)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÍñzK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÍñyS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÍñxS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Íñw� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰Íñva‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Íñua_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Íñt� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Íñs}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Íñr� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰ÍñqS�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Íñp)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Íño'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Íñn ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Íñm ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Íñl}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Íñka5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰ÍñjE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.~‰Íñia�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Íñhoe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Íñga}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰ÍñfS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰Íñe)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰Íñ7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰ÍñSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰ÍñE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰ÍñE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰ÍñS� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬. "]˜÷… ç   É Z ö s  Ç X ' � \¾È5¬JßW³¿bN­]K‰ÍñK]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰Íña�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰Íño‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰ÍñEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Íña‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰ÍñE‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Íñ)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Íñ�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Íñ){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Íñ)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Íñ)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰ÍñS� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Íñ 7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Íñ �}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Íñ o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Íñ Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Íñ a�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰ÍñE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Íñ'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Íñ ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Íñ'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.j‰ÍñS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰ÍñECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.g‰ÍñS� 纳采.开光.安床.å«�娶.开市.祈ç¦�.斋醮.出行.移徙.入宅.修造.动土.破土.安葬.~‰Íñ=�O纳畜.ç�†å�‘.å�ˆå¯¿æœ¨.å«�娶.造车器.纳采.订盟.祭祀.祈ç¦�.安机械.移徙.入宅.开市.立券.破土.安葬._‰Íð;E� 开市.造屋.治病.作ç�¶.å«�娶.冠笄.会亲å�‹.安机械.纳财.交易.立券.置产.j‰Íð:7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰Íð9Eaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰Íð8auå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰Íð7E�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰Íð6E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰Íð5E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰Íð4Y�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰Íð37�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑. FCÎ�, À j Þ – . ¸ E Ö \ û ÛøÕB’! eõVÓ2†F;‰Íð2)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰Íð1}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰Íð0E‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰Íð/��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰Íð.�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰Íð-E�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰Íð,E�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Íð+}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰Íð*E�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Íð)�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Íð(� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Íð'E�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Íð&'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Íð%)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Íð$)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Íð#EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Íð"E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.\‰Íð!E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.u‰Íð S�'开光.å«�娶.作ç�¶.掘井.纳畜.祭祀.祈ç¦�.斋醮.出行.开市.立券.动土.移徙.入宅.破土.安葬.j‰ÍðS�祭祀.移徙.入宅.动土.破土.纳采.会亲å�‹.竖柱.上æ¢�.立券.入殓.移柩.安葬.å�¯æ”’.n‰ÍðS�å«�娶.动土.开光.造屋.破土.祭祀.祈ç¦�.求嗣.斋醮.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.q‰ÍðS�移徙.入宅.出ç�«.安门.安葬.纳采.å«�娶.祭祀.祈ç¦�.出行.开市.会亲å�‹.动土.破土.å�¯æ”’.c‰ÍïTE�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰ÍïSSEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰ÍïRK�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰ÍïQ)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰ÍïP7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰ÍïOS_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰ÍïNE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÍïMS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÍïLS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬. \�7ƒ Æ H ƒ Ö  Û 0 ð ]ósË4Á�¾Ï Ãñ� mì\� ‰ÍïK}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰ÍïJ}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰ÍïI{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰ÍïH�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰ÍïG)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰ÍïFu�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰ÍïE)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰ÍïDaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰ÍïCS‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰ÍïB'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰ÍïAS‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Íï@'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Íï?'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Íï>7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Íï=o�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Íï<}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.{‰Íï;E�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.e‰Íï:a{造庙.入宅.修造.安葬.行丧.å«�娶.祭祀.æ²�æµ´.补垣.塞穴.æ–­èš�.解除.余事勿å�–.� ‰Íï9S�W祈ç¦�.å«�娶.安床.入宅.造船.æ²�æµ´.开仓.出货财.开市.交易.立券.纳财.æ ½ç§�.纳畜.牧养.畋猎.入殓.破土.安葬.;‰Íîs7Q斋醮.å«�娶.开市.祭祀.破屋.å��垣.余事勿å�–.�%‰Íîr}�]纳采.订盟.å«�娶.上æ¢�.开市.斋醮.造屋.安门.æ²�æµ´.æ�•æ�‰.畋猎.ç�†å�‘.整手足甲.入殓.除æœ�.æˆ�æœ�.破土.安葬.谢土.立碑.ä¿®å�Ÿ.å�¯æ”’.�‰ÍîqE‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰ÍîpuA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Íîo�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰Íîn��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰Íîmo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Íîl� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰ÍîkS‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÍîjaSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÍîiS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�. IC¥ \ î  9 ×ß)–eÀ],€ö˜ìNìC‰BI�s‰ÍîhSƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Íîg7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰Íîfo‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Íîe��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Íîd}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Íîc}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰ÍîbE‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰ÍîaEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Íî`� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Íî_� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Íî^'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Íî]'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Íî\E‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Íî['C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÍîZ}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�0‰ÍîYS‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.�r‰ÍîXoƒ开市.纳采.订盟.作ç�¶.造庙.造船.ç»�络.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.雕刻.开光.安香.出行.入学.修造.动土.竖柱.上æ¢�.造屋.起基.安门.出ç�«.移徙.入宅.掘井.造畜椆栖.安葬.破土.除æœ�.æˆ�æœ�.]‰ÍîWSy移徙.入宅.å«�娶.掘井.安葬.祭祀.平治é�“æ¶‚.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.余事勿å�–.�U‰ÍîVo‚K祈ç¦�.出ç�«.å«�娶.入宅.开市.动土.破土.订盟.纳采.会亲å�‹.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.造桥.æ ½ç§�.纳畜.造畜椆栖.移柩.入殓.å�¯æ”’.ä¿®å�Ÿ.立碑.安葬.�T‰ÍîUK‚m破土.安葬.行丧.开生å�Ÿ.订盟.纳采.造车器.祭祀.祈ç¦�.出行.安香.修造.动土.上æ¢�.开市.交易.立券.移徙.入宅.会亲å�‹.安机械.æ ½ç§�.纳畜.造屋.起基.安床.造畜椆栖.i‰Í©/�';入宅.移徙.分居.作ç�¶.出ç�«.安香.动土.å«�娶.掘井.扫èˆ�.造桥.造畜椆栖.教牛马.�)‰Í©.� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Í©-�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Í©,��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Í©+o�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰Í©*S‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑. Hf� Ä  Ñ Q Ø t ³ @ ò ² n7®}>µ„îL¶2Yb�H4‰Í©))Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰Í©(K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰Í©'Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰Í©&Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Í©%aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Í©$S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Í©#S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Í©"a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Í©!��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Í© ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Í©'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Í©E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Í©'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Í©'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Í©a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Í©'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Í©��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Í©a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Í©'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.I‰Í©SQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.n‰Í©S�å«�娶.入宅.安床.掘井.开光.祭祀.ç�†å�‘.置产.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.�;‰Í©S‚3移徙.入宅.出ç�«.入殓.安葬.开市.纳财.出行.祭祀.祈ç¦�.求嗣.斋醮.é—®å��.入学.起基.定磉.置产.开渠.掘井.拆å�¸.æ ½ç§�.纳畜.牧养.动土.破土.å�¯æ”’._‰Í©oaå«�娶.纳采.订盟.安床.动土.破土.安葬.祭祀.æ²�æµ´.æ�•æ�‰.畋猎.结网.扫èˆ�.t‰Í©S�%å«�娶.移徙.出ç�«.开市.入宅.订盟.纳采.会亲å�‹.祭祀.祈ç¦�.修造.动土.安机械.破土.安葬.{‰Í©S�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰Í¨J){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Í¨Ia�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰Í¨HE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰Í¨G� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰Í¨F��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网. f$† æ B t < õ * ã t Ö <ÆœçTÁ#Œì¬Ã0Æ–;f�O‰Í¨E7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰Í¨DSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰Í¨CS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰Í¨B��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰Í¨Aa{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰Í¨@g�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰Í¨?Y‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰Í¨>)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰Í¨=�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰Í¨<7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰Í¨;a�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰Í¨:�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰Í¨9)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰Í¨8'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰Í¨7�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰Í¨6'5余事勿å�–.解除.余事勿å�–.q‰Í¨5�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Í¨4a�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Í¨3)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.j‰Í¨2S�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.B‰Í¨1)m开市.å«�娶.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�E‰Í¨0K‚O开市.破土.掘井.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.安香.出ç�«.造庙.移徙.出行.入宅.造庙.起基.竖柱.上æ¢�.安床.纳畜.æ�•æ�‰.纳婿.安葬.B‰Í¨/SC开市.交易.祭祀.入宅.安葬.æ�•æ�‰.畋猎.余事勿å�–.3‰Í¨.)Oå«�娶.开市.祭祀.平治é�“æ¶‚.余事勿å�–.�H‰Í¨-S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰Í§go�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰Í§f��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰Í§e}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰Í§dS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑. UjË‹ ² õ ¤  ž Z à  ä § Zôµ5¥dÃ-�ó(²H£N±µU[‰Í§cSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰Í§baƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰Í§ao�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰Í§`S_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Í§_}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰Í§^a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Í§]a�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Í§\�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Í§[}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Í§Za�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Í§Y)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Í§X)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰Í§WEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Í§V}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Í§Uo�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Í§T'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Í§S'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Í§R'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Í§Q'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Í§P� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.\‰Í§OE�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰Í§Na�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.?‰Í§Mg)å«�娶.入宅.修造.动土.会亲å�‹.破土.祭祀.出行.u‰Í§Lo� å«�娶.开市.祭祀.祈ç¦�.斋醮.纳采.ä¿®å�Ÿ.冠笄.æ²�æµ´.出行.修造.动土.移徙.入宅.破土.安葬.�‰Í§Ko�-开市.祈ç¦�.动土.破土.入殓.安葬.造船.祭祀.解除.结网.畋猎.å�–渔.会亲å�‹.入学.移柩.å�¯æ”’.除æœ�.æˆ�æœ�.L‰Í§JYQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰Í§I}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰Í§E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰Í§)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰Í§� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰Í¦u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹. ÓT� í v « F „ À * ¸ k⪚O™h)B™œñœã-ÓU‰Í¦~Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰Í¦}o‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰Í¦|a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰Í¦{Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰Í¦zS‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰Í¦ya{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Í¦x�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Í¦w��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Í¦vS‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Í¦u'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Í¦t'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Í¦s ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Í¦r'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Í¦qa�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Í¦pS�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Í¦o'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Í¦no�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Í¦m'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Í¦la� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�‰Í¦kS�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰Í¦ja‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰Í¦iS�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.4‰Í¦h)Q斋醮.开市.æ²�æµ´.破屋.å��垣.余事勿å�–.`‰Í¦gE� 开市.交易.入宅.å«�娶.祭祀.普渡.æ�•æ�‰.解除.结网.畋猎.入殓.破土.安葬.�E‰Í¦fS‚G开市.立券.置产.作ç�¶.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.出行.安机械.开光.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安门.安葬.破土.r‰Í¦e}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰Í¦��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰Í¦��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰Í¦a�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’. XQ×f ó ! ” A ’ / þ ‘ ó R§™ð!¢É^ Os³X�%‰Í¦a�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰Í¦��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰Í¦o‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰Í¦E‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰Í¦a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰Í¦aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰Í¦E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Í¦S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰Í¦�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Í¦� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Í¦��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Í¦_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Í¦}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Í¦}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Í¦}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Í¦ E�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Í¦ '�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Í¦ 'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Í¦ '�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Í¦ )‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Í¦'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Í¦��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�L‰Í¦a‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰Í¦S�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.l‰Í¦E�#动土.破土.掘井.安葬.祭祀.修造.出行.造屋.竖柱.造车器.教牛马.造畜椆栖.割蜜.u‰Í¦S�'开市.入宅.å«�娶.开光.造屋.祭祀.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.塞穴.æ–­èš�.结网.�)‰Í¦7‚+出行.安葬.造桥.纳采.订盟.å«�娶.祭祀.æ²�æµ´.塑绘.开光.出ç�«.治病.习艺.ä¼�木.造屋.竖柱.上æ¢�.安床.作ç�¶.安碓磑.挂匾.掘井.纳畜. }Xêx œ ô ] , Ž  ê  C¥Ý\ªÓÇõI1`}�]‰Í¦g‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰Í¥;Y‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰Í¥:S‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Í¥9)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Í¥8��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰Í¥7o‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Í¥6EE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Í¥5}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Í¥4S‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Í¥3��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Í¥2a�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Í¥1o‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Í¥0��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰Í¥/K‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Í¥.S‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Í¥-'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Í¥,� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Í¥+o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Í¥*'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Í¥)}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Í¥( ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Í¥'�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Í¥&'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Í¥%}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Í¥$}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Í¥# ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬. èi8š î ½ Œ ë ¡ · Å U ƒ ÖN·wºËûú„ Mlè‰Í¥"a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰Í¥!S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰Í¥ 7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�7‰Í¥K‚3å«�娶.开市.å�ˆå¯¿æœ¨.安葬.纳采.订盟.冠笄.祭祀.祈ç¦�.斋醮.出行.修造.动土.移徙.入宅.安香.出ç�«.拆å�¸.造屋.起基.竖柱.上æ¢�.定磉.安门.开池.u‰Í¥S�'开光.作ç�¶.造屋.架马.开仓.å«�娶.纳采.祭祀.祈ç¦�.出行.立券.移徙.入宅.动土.破土.安葬.q‰Í¥S�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰Í¤Vaƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰Í¤UQ‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰Í¤TEW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Í¤Sa�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰Í¤RE‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰Í¤QEC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰Í¤PS�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰Í¤O)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰Í¤NKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰Í¤MS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰Í¤L7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Í¤K7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Í¤Jaƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Í¤Ia‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰Í¤HEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Í¤G�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Í¤F'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Í¤E'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Í¤D}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Í¤Co�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Í¤B'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Í¤Aa�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙. {Q¦g § g ˜ ¯ õ hÇîÒ[8�MÐM¡*{�)‰Í¤@ ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Í¤?a�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Í¤>)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.~‰Í¤=S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络.x‰Í¤<S�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰Í¤;)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.�"‰Í¤:a�s入宅.造屋.造桥.安门.安葬.上æ¢�.å«�娶.冠笄.祭祀.出行.移徙.入宅.作ç�¶.造车器.补垣.塞穴.作厕.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.�]‰Í¤97ƒ入宅.安门.安葬.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.å«�娶.出行.动土.破土.会亲å�‹.开市.交易.立券.习艺.拆å�¸.起基.安碓磑.放水.开池.造仓.开渠.æ ½ç§�.谢土.å�¯æ”’.ä¿®å�Ÿ.立碑.;‰Í£s7Q探病.å«�娶.开市.祭祀.结网.æ�•æ�‰.余事勿å�–.�7‰Í£rS‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰Í£q7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰Í£p)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰Í£oK‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰Í£nS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰Í£mS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Í£l� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰Í£ka‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Í£ja_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Í£i� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Í£h}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Í£g� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰Í£fS�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Í£e)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Í£d'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Í£c ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Í£b ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土. äÏ1Œ; ¨  ½ R Ê t & y 2 �Õ�Á Ðdê†7Œä³}L«dä{‰Í£a}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Í£`a5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰Í£_E‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Í£^'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Í£]7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Í£\��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Í£['C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Í£Za�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Í£Y ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.J‰Í£XSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰Í£WE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.u‰Í£VE�5å«�娶.开市.纳财.出ç�«.纳采.祭祀.祈ç¦�.求嗣.斋醮.出行.起基.造屋.定磉.安门.入殓.安葬.g‰Í£US� 移徙.入宅.å«�娶.出行.安床.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.纳畜.入殓.破土.安葬.K‰Í£K]安床.入宅.安碓磑.æ ½ç§�.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�‰Í£ a�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰Í£ o‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰Í£ EO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰Í£ a‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴.�‰Í£ E‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰Í£)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Í£�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Í£){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Í£)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Í£)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰Í£S� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Í£7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Í£�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Í£o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Í¢Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Í¢~a�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰Í¢}E�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Í¢|'C诸事ä¸�宜.解除.破屋.余事勿å�–. c¿Ü ø ¹ & v  „ æ I Ù :·j*Â!¯©Bó„ã˜m.ýc�‰Í¢{ ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Í¢z'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Í¢y'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Í¢x}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Í¢w�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Í¢v'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Í¢u}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.j‰Í¢t7�-移徙.入宅.æ ½ç§�.纳财.开市.交易.立券.开光.é’ˆç�¸.会亲å�‹.ç�†å�‘.安床.造仓.结网.J‰Í¢sEaå«�娶.安葬.行丧.安门.祭祀.æ²�æµ´.解除.扫èˆ�.塞穴.牧养.b‰Í¢rauå«�娶.动土.掘井.起基.定磉.破土.祭祀.会亲å�‹.出行.立券.交易.冠笄.纳财.c‰Í¢qE�å«�娶.祈ç¦�.出ç�«.入宅.冠笄.立券.交易.修造.动土.安机械.入殓.安葬.破土.�‰Í¢+E�{开市.交易.å�ˆå¸�.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.破土.出ç�«.安门.安床.上æ¢�.立碑.移柩.m‰Í¢*E�%入宅.造屋.竖柱.安葬.纳财.交易.立券.æ ½ç§�.æ�•æ�‰.结网.å�–渔.进人å�£.教牛马.ç�†å�‘.�‰Í¢)Y�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰Í¢(7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰Í¢')_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰Í¢&}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰Í¢%E‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰Í¢$��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰Í¢#�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰Í¢"E�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰Í¢!E�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Í¢ }�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰Í¢E�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Í¢�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Í¢� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Í¢E�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Í¢'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Í¢)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Í¢)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Í¢EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬. sXÁN K   \ ­ P  ~  šúyé,·j©SǺÖè‹Rs�Y‰Í¢E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰Í¢E5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Í¢E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Í¢Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Í¢Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰Í¢E}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.c‰Í¢E�å«�娶.开市.安葬.破土.纳采.祭祀.祈ç¦�.出行.会亲å�‹.修造.动土.移徙.入宅.C‰Í¢SEå«�娶.安门.移徙.入宅.安葬.塞穴.结网.å�–渔.畋猎.�‰Í¢K�Q安床.作ç�¶.造船.会亲å�‹.纳采.订盟.祭祀.祈ç¦�.安香.出ç�«.修造.出行.开市.移徙.入宅.动土.安葬.破土.Q‰Í¢)� å«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.扫èˆ�.破屋.å��垣.余事勿å�–.g‰Í¢ 7�'开市.入宅.斋醮.纳采.å«�娶.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.安葬.破土.P‰Í¡DS_ç»�络.探病.造屋.作ç�¶.动土.å«�娶.祭祀.冠笄.修饰垣墙.置产.H‰Í¡CE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰Í¡BS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰Í¡AS‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰Í¡@}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬.|‰Í¡?}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰Í¡>{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Í¡=�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Í¡<)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Í¡;u�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰Í¡:)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Í¡9aa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰Í¡8S‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Í¡7'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰Í¡6S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Í¡5'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Í¡4'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Í¡37�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Í¡2o�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Í¡1}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除. wcП ú — f º 0 Ò & ˆ & }Ã|ƒºIËY^:œ\¾wB‰Í¡0'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Í¡/7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Í¡.'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Í¡-E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Í¡,')诸事ä¸�宜.解除.æ²�æµ´.�‰Í¡+E‚开市.出行.安葬.行丧.å«�娶.订盟.纳采.会亲å�‹.祭祀.安机械.移徙.入宅.造屋.安床.起基.定磉.安香.出ç�«.挂匾.拆å�¸.置产.R‰Í¡*uA开光.å«�娶.开仓.出货财.造船.安葬.探病.平治é�“æ¶‚.余事勿å�–.�'‰Í¡)�5�'挂匾.入宅.上æ¢�.祈ç¦�.è¯�讼.作æ¢�.作ç�¶.开池.安门.动土.破土.掘井.出行.起基.安床.纳财.交易.立券.å«�娶.æ ½ç§�.入殓.移柩.安葬.�?‰Í c��s作ç�¶.安葬.祭祀.开市.纳采.订盟.纳畜.谢土.出行.探病.å«�娶.开光.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.安床.æ ½ç§�.入殓.ä¿®å�Ÿ.动土.除æœ�.æˆ�æœ�.y‰Í bo�å«�娶.入宅.出行.动土.破土.安葬.行丧.祭祀.教牛马.造畜椆栖.祭祀.会亲å�‹.解除.余事勿å�–.�7‰Í a� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰Í `S‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰Í _aSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰Í ^S�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰Í ]Sƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰Í \7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–.�4‰Í [o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Í Z��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Í Y}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Í X}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰Í WE‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰Í VEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Í U� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Í T� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Í S'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Í R'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Í QE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Í P'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Í O}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Í N}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£. ‹b¼… ü Ë Œ  Ò < š  € §°NkÏ–Ù;�¡ò\uÖ‹F‰Í M'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Í L��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Í KE‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Í J'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰Í IE�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.�)‰Í H� �Uå«�娶.开市.安床.æ ½ç§�.安葬.祈ç¦�.开光.掘井.安葬.入宅.移徙.出行.进人å�£.修造.动土.起基.上æ¢�.安门.造仓.补垣.塞穴.造畜椆栖.�v‰Í G�‚[å«�娶.开市.出ç�«.进人å�£.入殓.èµ´ä»».入宅.移徙.出行.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.塑绘.解除.拆å�¸.修造.动土.竖柱.上æ¢�.安门.置产.开池.掘井.纳畜.安床.æ ½ç§�.造畜椆栖.破土.移柩.立碑.�‰Í F��会亲å�‹.安葬.入宅.移徙.安床.开市.行丧.出ç�«.作ç�¶.安门.祭祀.æ²�æµ´.ç�†å�‘.纳财.进人å�£.æ ½ç§�.扫èˆ�.æ�•æ�‰.畋猎.结网.�‰Í Eo�Qä¼�木.作æ¢�.动土.安床.破土.æ ½ç§�.造桥.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.入宅.移徙.纳畜.入殓.破土.ä¿®å�Ÿ.立碑.�7‰ÌÛS‚+作ç�¶.安门.造桥.开市.安葬.安床.架马.祭祀.塑绘.开光.出行.ç�†å�‘.ä¼�木.作æ¢�.开柱眼.作厕.畋猎.破土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.4‰ÌÛ)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÌÛK�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÌÛEƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÌÛSyå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰ÌÛaƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰ÌÛS‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰ÌÛS�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰ÌÛa�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰ÌÛ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰ÌÛ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰ÌÛ'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÌÛE�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰ÌÛ'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰ÌÛ'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÌÛa�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰ÌÛ'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰ÌÛ��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰ÌÛ a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�. Š`Ü« … ç P ° p ‡ ô ŠÅZÿ*�¹îIû{ݬ:‘Â;‰ÌÛ 'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰ÌÛ a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÌÛ ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÌÛ �37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÌÛ'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÌÛa�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.{‰ÌÛS�3祭祀.å«�娶.入宅.修造.动土.祭祀.扫èˆ�.破土.安葬.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.入殓.立碑.余事勿å�–.I‰ÌÛ){å«�娶.安葬.祭祀.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÌÛa�m破土.动土.安门.作ç�¶.开市.交易.å«�娶.纳采.订盟.祭祀.开光.出行.解除.ä¼�木.出ç�«.入宅.移徙.拆å�¸.修造.æ ½ç§�.安葬.入殓.�E‰ÌÛE‚U置产.掘井.è¯�讼.æ ½ç§�.å«�娶.纳采.订盟.祭祀.斋醮.开光.安香.出ç�«.出行.出ç�«.拆å�¸.动土.祈ç¦�.进人å�£.纳财.交易.立券.移徙.安床.修造.安葬.除æœ�.æˆ�æœ�.�Q‰ÌÛ� ‚%造庙.谢土.作ç�¶.作æ¢�.ä¼�木.安葬.行丧.ä¿®å�Ÿ.探病.出行.纳财.开市.交易.立券.动土.移徙.入宅.è£�è¡£.会亲å�‹.拆å�¸.进人å�£.安香.ç»�络.出货财.修饰垣墙.平治é�“æ¶‚.�‰ÌÛ��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰ÌÚ:7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÌÚ9Sk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÌÚ8S� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰ÌÚ7��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰ÌÚ6a{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰ÌÚ5g�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÌÚ4Y‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰ÌÚ3)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰ÌÚ2�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰ÌÚ17�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰ÌÚ0a�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰ÌÚ/�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰ÌÚ.)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰ÌÚ-'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰ÌÚ,�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰ÌÚ+'5余事勿å�–.解除.余事勿å�–.q‰ÌÚ*�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�. Ž€ð¯ x Û > s ý “ î ™ü Ä&†âñL�÷Æ(Ž�‰ÌÚ)a�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰ÌÚ()‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰ÌÚ''C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÌÚ&�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰ÌÚ% ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰ÌÚ$}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰ÌÚ#''诸事ä¸�宜.诸事ä¸�宜.�H‰ÌÚ"S‚M入宅.上æ¢�.斋醮.出ç�«.谢土.纳采.订盟.开市.交易.立券.会亲å�‹.纳畜.牧养.é—®å��.移徙.解除.作厕.入学.起基.安床.开仓.出货财.安葬.å�¯æ”’.入殓.除æœ�.æˆ�æœ�.�‰ÌÚ!o�]造庙.å«�娶.掘井.æ ½ç§�.造桥.作ç�¶.动土.祭祀.开光.出行.解除.ä¼�木.作æ¢�.出ç�«.拆å�¸.入宅.移徙.安床.修造.造畜椆栖.扫èˆ�.�‰ÌÚ ��1出货财.开仓.动土.破土.安葬.行丧.ä¼�木.开渠.æ ½ç§�.祭祀.造车器.出行.修造.上æ¢�.造屋.安门.安床.造畜椆栖.教牛马.�‰ÌÚ}�C开市.出行.æ ½ç§�.置产.è¯�讼.安门.掘井.开光.å«�娶.è£�è¡£.冠笄.å�ˆå¸�.祭祀.出行.安床.移徙.塞穴.入殓.破土.移柩.安葬.�V‰ÌÚS‚i安门.安床.è£�è¡£.入宅.安葬.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.å«�娶.求医.治病.动土.破土.入学.起基.扫èˆ�.竖柱.上æ¢�.开仓.出货财.置产.æ ½ç§�.牧养.开生å�Ÿ.谢土.立碑.[‰ÌÚSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÌÙWaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÌÙVo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÌÙUS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÌÙT}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰ÌÙSa{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰ÌÙRa�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰ÌÙQ�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰ÌÙP}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰ÌÙOa�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰ÌÙN)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰ÌÙM)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰ÌÙLEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰ÌÙK}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰ÌÙJo�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹. wqð¥ ï ¾  ˜ ï \ ò G ò 9ƒ)“ô´ÛÍœ mØA¦i¶w:‰ÌÙI'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰ÌÙH'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰ÌÙG'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰ÌÙF'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰ÌÙE� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰ÌÙD}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰ÌÙCg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰ÌÙBg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰ÌÙA}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰ÌÙ@'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.L‰ÌÙ?YQå«�娶.开市.造屋.作æ¢�.å�ˆå¯¿æœ¨.祭祀.冠笄.æ�•æ�‰.余事勿å�–.�7‰ÌÙ>}‚安葬.纳畜.出行.行丧.ä¼�木.æ ½ç§�.造庙.造桥.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.解除.进人å�£.入宅.移徙.出ç�«.安床.开市.交易.立券.挂匾.�S‰ÌÙ=E‚q开市.开仓.安门.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.上æ¢�.å�ˆè„Š.放水.掘井.破土.移柩.谢土.除æœ�.æˆ�æœ�.;‰ÌÙ<)_移徙.入宅.破屋.å��垣.求医.治病.余事勿å�–.�‰ÌÙ;� �5出ç�«.入宅.移徙.祈ç¦�.祭祀.安床.开市.å«�娶.探病.开光.解除.拆å�¸.修造.动土.竖柱.安门.牧养.安葬.ä¿®å�Ÿ.破土.移柩.�‰ÌÙ:u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰ÌÙ9Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰ÌØro‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰ÌØqa‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰ÌØpEm动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰ÌØoS‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰ÌØna{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰ÌØm�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰ÌØl��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰ÌØkS‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰ÌØj'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰ÌØi'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰ÌØh ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰ÌØg'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰ÌØfa�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰ÌØeS�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�. ]tòI z û " · b ¨ Ì \±@ž'Ël;…Ýk•]3‰ÌØd'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰ÌØco�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰ÌØb'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰ÌØaa� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰ÌØ`}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰ÌØ_ ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰ÌØ^'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰ÌØ]��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰ÌØ\ ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰ÌØ[E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.r‰ÌØZ}yå«�娶.æ ½ç§�.祈ç¦�.造桥.安葬.安门.ä¼�木.作æ¢�.祭祀.ç�†å�‘.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.�‰ÌØY��-开市.入宅.动土.破土.安葬.作ç�¶.上æ¢�.安床.开仓.祈ç¦�.æ²�æµ´.ç�†å�‘.会亲å�‹.塑绘.开光.æ ½ç§�.牧养.å«�娶.ç»�络.补垣.塞穴.�?‰ÌØX��m出ç�«.å«�娶.开光.进人å�£.出行.è¯�讼.开市.入宅.移徙.èµ´ä»».解除.祭祀.祈ç¦�.求嗣.修造.动土.竖柱.上æ¢�.安床.纳畜.造屋.å�ˆè„Š.起基.入殓.破土.安葬.�&‰ÌØWa�{æ ½ç§�.掘井.动土.安床.破土.置产.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.出行.解除.竖柱.入宅.移徙.纳财.上æ¢�.纳畜.入殓.安葬.å�¯æ”’.�%‰ÌØVa�yå«�娶.入宅.斋醮.开光.é’ˆç�¸.掘井.祭祀.出行.作æ¢�.出ç�«.拆å�¸.修造.动土.起基.安床.补垣.塞穴.入殓.破土.安葬.移柩.造畜椆栖.�*‰ÌØU��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰ÌØo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰ÌØE‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰ÌØ a‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰ÌØ aQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰ÌØ E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰ÌØ S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰ÌØ �kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰ÌØ� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰ÌØ��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰ÌØ_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰ÌØ}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬. ¸8· . c " P ¤ k Œ»Ø�fÈ2¥R£@¢c¸�%‰ÌØ}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰ÌØ}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰ÌØE�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰ÌØ'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰ÌØ'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ì×'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ì×~)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ì×}'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ì×|��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ì×{� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Ì×zS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Ì×ya�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Ì×x}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Ì×w)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.�]‰Ì×vg‚c安葬.破土.开市.开仓.出货财.å�¯æ”’.纳采.订盟.å«�娶.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.塑绘.开光.安香.出ç�«.会亲å�‹.解除.入学.竖柱.上æ¢�.拆å�¸.造屋.起基.æ ½ç§�.牧养.纳畜.�K‰Ì×uY‚M入宅.开市.掘井.è¯�讼.å�ˆå¯¿æœ¨.å«�娶.订盟.纳采.祭祀.祈ç¦�.斋醮.开光.会亲å�‹.求医.治病.造屋.起基.竖柱.上æ¢�.安门.安碓磑.ç­‘å ¤.开池.破土.安葬.除æœ�.æˆ�æœ�.�Y‰Ì×tS‚o祭祀.祈ç¦�.探病.谢土.造桥.å«�娶.开市.立券.移徙.入宅.安机械.会亲å�‹.ç»�络.安门.安床.挂匾.拆å�¸.开仓.出货财.开池.æ ½ç§�.纳畜.牧养.破土.安葬.å�¯æ”’.移柩.入殓.立碑.4‰Ì×s)Qå«�娶.安葬.破屋.å��垣.解除.余事勿å�–.�&‰Ì×r��Aå«�娶.斋醮.开市.出ç�«.入宅.移徙.出行.作ç�¶.安门.ä¼�木.祭祀.祈ç¦�.解除.整手足甲.安床.æ²�æµ´.入殓.移柩.破土.å�¯æ”’.安葬.谢土.�L‰Ì×qo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Ì×+EE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Ì×*}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Ì×)S‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Ì×(��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Ì×'a�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Ì×&o‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养. ìxá¡ ä ? õ % $ ® ? ž åGŸ1¿\ã;¤sÕb1fŠì�‰Ì×%��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰Ì×$K‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Ì×#S‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Ì×"'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Ì×!� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Ì× o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Ì×'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ì×}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Ì× ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Ì×�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Ì×'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Ì×}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ì×}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ì× ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Ì×E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ì×'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ì×}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ì×o�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ì×�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.q‰Ì×S�开市.入宅.出行.修造.è¯�讼.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�{‰Ì×aƒ%å«�娶.安床.作ç�¶.动土.破土.造船.安机械.祭祀.祈ç¦�.求嗣.æ²�æµ´.解除.纳采.开市.修造.竖柱.上æ¢�.开柱眼.安碓磑.归岫.补垣.塞穴.拆å�¸.放水.出ç�«.扫èˆ�.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.�J‰Ì×Q‚S安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.行丧.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.入宅.移徙.动土.安床.纳畜.æ ½ç§�.纳财.交易.立券.挂匾.造畜椆栖.E‰Ì×EW斋醮.造屋.动土.破土.出行.教牛马.割蜜.余事勿å�–.�‰Ì×a�m安床.祈ç¦�.出行.安葬.行丧.开光.å«�娶.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.上æ¢�.出ç�«.拆å�¸.移徙.修造.动土.安门.纳财.ç­‘å ¤.æ ½ç§�.塞穴.�7‰Ì× E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰ÌÖFEC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰ÌÖES�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰ÌÖD)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土. f_† ± j ° ó ¤ s Õ 1 b¶?�ùÈ*~M{1GUå°fE‰ÌÖCKQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰ÌÖBS{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰ÌÖA7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰ÌÖ@7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰ÌÖ?aƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰ÌÖ>a‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰ÌÖ=EW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰ÌÖ<�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰ÌÖ;'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰ÌÖ:'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰ÌÖ9}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰ÌÖ8o�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰ÌÖ7'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰ÌÖ6a�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰ÌÖ5 ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰ÌÖ4a�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰ÌÖ3)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰ÌÖ2E�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰ÌÖ1'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÌÖ0E‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰ÌÖ/E�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰ÌÖ.'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰ÌÖ-)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.�7‰ÌÖ,S‚+安床.上æ¢�.è£�è¡£.入宅.å«�娶.祭祀.祈ç¦�.求嗣.开光.订盟.纳采.解除.动土.起基.进人å�£.开市.交易.立券.纳财.造仓.开池.æ ½ç§�.纳畜.破土.安葬.�4‰ÌÖ+7‚A作ç�¶.开市.ç»�络.订盟.纳采.å«�娶.解除.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.拆å�¸.入宅.移徙.安床.æ ½ç§�.纳畜.动土.破土.谢土.安葬.ä¿®å�Ÿ.B‰ÌÖ*)m开光.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�O‰ÌÖ)K‚c开市.立券.造船.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.解除.挂匾.æ ½ç§�.破土.谢土.入殓.移柩.安葬.�S‰ÌÕcS‚c作ç�¶.å«�娶.移徙.入宅.ç�†å�‘.开市.交易.立券.挂匾.祭祀.祈ç¦�.斋醮.出行.开市.交易.立券.造屋.起基.修造.动土.定磉.安床.安机械.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.立碑.�‰ÌÕbS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜. eH4 “ I ç ? � P ¥ ý Ì -–eÄ}ýN£d¤d•¬òe�‰ÌÕa� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰ÌÕ`a‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰ÌÕ_a_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰ÌÕ^� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰ÌÕ]}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰ÌÕ\� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰ÌÕ[S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰ÌÕZ)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰ÌÕY'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰ÌÕX ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰ÌÕW ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰ÌÕV}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰ÌÕUa5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰ÌÕTE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰ÌÕS'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰ÌÕR7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰ÌÕQ��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰ÌÕP'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰ÌÕOa�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰ÌÕN ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰ÌÕM'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰ÌÕL��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰ÌÕK ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰ÌÕJ'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰ÌÕI)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.�‰ÌÕHa�e祈ç¦�.入宅.造屋.动土.破土.探病.祭祀.塑绘.开光.纳采.å«�娶.开市.出行.会亲å�‹.安床.结网.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�H‰ÌÕGo‚1纳采.出行.ä¿®å�Ÿ.安葬.开市.立券.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.开光.出ç�«.移徙.入宅.竖柱.上æ¢�.会亲å�‹.造屋.起基.治病.治病.安门.造车器.掘井.开池.A‰ÌÕFEO开光.修造.动土.破土.祭祀.修饰垣墙.余事勿å�–.�2‰ÌÕEa‚移徙.入宅.作ç�¶.ç�†å�‘.开光.安门.祭祀.出行.修造.动土.å�ˆå¸�.造畜椆栖.安床.移徙.入殓.移柩.破土.å�¯æ”’.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.补垣.塞穴. "YaÞ= ‘ Q é H 2  g æ ˜ í L {Ö—fÌ›ýXt뉖@òEþY�‰ÌÔ~E‚ 作ç�¶.安葬.祭祀.入殓.安香.出ç�«.纳采.订盟.å«�娶.开市.立券.交易.挂匾.开光.出行.解除.安床.æ ½ç§�.置产.拆å�¸.修造.动土.B‰ÌÔ})må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰ÌÔ|�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰ÌÔ{){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰ÌÔz)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰ÌÔy)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰ÌÔxS� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰ÌÔw7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÌÔv�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰ÌÔuo�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰ÌÔtEe开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰ÌÔsa�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰ÌÔrE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰ÌÔq'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰ÌÔp ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰ÌÔo'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰ÌÔn'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰ÌÔm}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰ÌÔl�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰ÌÔk'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰ÌÔj}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰ÌÔi}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰ÌÔh'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰ÌÔg7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰ÌÔfa�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰ÌÔe'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰ÌÔd' 诸事ä¸�宜.�‰ÌÔcY�må«�娶.定磉.å�ˆå¯¿æœ¨.安葬.行丧.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.开光.ç�†å�‘.ç»�络.解除.治病.治病.立碑.æ ½ç§�.牧养.掘井.开池.c‰ÌÔb7�å«�娶.开光.作ç�¶.纳采.交易.立券.安床.安机械.安葬.移柩.动土.破土.立碑.;‰ÌÔa)_开光.å«�娶.破屋.å��垣.求医.治病.余事勿å�–.�&‰ÌÔ}�_开市.交易.作ç�¶.纳财.上æ¢�.安床.造屋.造船.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.出ç�«.入宅.移徙.解除.æ ½ç§�.ä¼�木.破土.谢土.安葬.�‰ÌÔE‚动土.ä¼�木.安葬.行丧.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.进人å�£.入宅.移徙.安床.拆å�¸.修造.安门.挂匾.纳财.扫èˆ�.~‰ÌÔ��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰ÌÔ�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基. �p³> ñ Ž Î  æ  [ þ ,Ï–·v“¯pÝ-¼;��k‰ÌÔE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰ÌÔE�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰ÌÔ}�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰ÌÔE�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰ÌÔ�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰ÌÔ� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰ÌÔE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰ÌÔ'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰ÌÔ)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰ÌÔ)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰ÌÔ EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰ÌÔ E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰ÌÔ E5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰ÌÔ E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰ÌÔ Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰ÌÔEƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰ÌÔE}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰ÌÔE‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰ÌÔ/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰ÌÔ'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰ÌÔE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰ÌÔ)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰ÌÔE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.H‰ÌÔE]祭祀.祈ç¦�.安葬.安门.作ç�¶.解除.平治é�“æ¶‚.余事勿å�–.p‰ÌÓS�å«�娶.开市.动土.作ç�¶.安葬.会亲å�‹.冠笄.安床.会亲å�‹.安机械.祭祀.祈ç¦�.求嗣.ç»�络.�7‰ÌÓ~S‚+移徙.入宅.出ç�«.作ç�¶.掘井.祭祀.祈ç¦�.求嗣.开光.å«�娶.出行.解除.ä¼�木.拆å�¸.进人å�£.安床.动土.起基.上æ¢�.æ ½ç§�.纳畜.破土.谢土.å�¯æ”’.安葬.� ‰ÌÓ}}�'入宅.出行.移徙.祭祀.å«�娶.动土.破土.作ç�¶.开光.解除.ä¼�木.竖柱.上æ¢�.交易.立券.纳畜.入殓.移柩.安葬. Y¹ÀM ÷ C † n Í 2 Ç £ Å'à8¡.î+€<�0ð^úzÚY|‰ÌÓ4}� æ ½ç§�.开光.出行.é’ˆç�¸.å«�娶.入宅.动土.破土.祭祀.祈ç¦�.求嗣.纳畜.入殓.å�¯æ”’.谢土.除æœ�.æˆ�æœ�.�‰ÌÓ3{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰ÌÓ2�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰ÌÓ1)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰ÌÓ0u�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰ÌÓ/)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰ÌÓ.aa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰ÌÓ-S‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰ÌÓ,'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰ÌÓ+S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰ÌÓ*'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰ÌÓ)'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰ÌÓ(7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰ÌÓ'o�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰ÌÓ&}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰ÌÓ%'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰ÌÓ$7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰ÌÓ#'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰ÌÓ"E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰ÌÓ!')诸事ä¸�宜.解除.æ²�æµ´.f‰ÌÓ �Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰ÌÓ�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰ÌÓ)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰ÌÓo�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰ÌÓ� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�7‰ÌÓ� �q入宅.置产.å«�娶.动土.æ ½ç§�.开市.开光.动土.破土.祭祀.祈ç¦�.求嗣.æ²�æµ´.é—®å��.交易.纳财.入殓.移柩.安葬.ä¿®å�Ÿ.立碑.谢土.造畜椆栖.教牛马.�.‰ÌÓS‚å«�娶.å�ˆå¸�.入宅.行丧.安葬.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.进人å�£.会亲å�‹.入学.治病.安碓磑.掘井.开池.纳畜.牧养.造畜椆栖.Q‰ÌÓaSå«�娶.开市.入宅.安床.破土.安葬.祭祀.斋醮.纳财.æ�•æ�‰.畋猎.n‰ÌÒSS�å«�娶.入宅.作ç�¶.纳采.订盟.祭祀.斋醮.入殓.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.除æœ�.æˆ�æœ�.�s‰ÌÒRSƒ#祈ç¦�.造庙.祭祀.安床.谢土.å«�娶.纳采.订盟.开光.安香.出ç�«.纳财.开市.交易.立券.è£�è¡£.造屋.起基.修造.动土.安门.移徙.入宅.æ ½ç§�.牧养.畋猎.掘井.开池.安葬.破土.入殓.除æœ�.æˆ�æœ�.立碑.B‰ÌÒQ7_开市.动土.破土.祭祀.破屋.å��垣.解除.余事勿å�–. Z'0 Î ë O  Þ d  � þ h &�â—úg6‘.ýQÇi½½Z�4‰ÌÒPo‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰ÌÒO��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰ÌÒN}O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰ÌÒM}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰ÌÒLE‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰ÌÒKEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰ÌÒJ� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰ÌÒI� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰ÌÒH'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰ÌÒG'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰ÌÒFE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰ÌÒE'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÌÒD}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰ÌÒC}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰ÌÒB'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰ÌÒA��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰ÌÒ@E‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰ÌÒ?'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰ÌÒ>E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰ÌÒ=E�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰ÌÒ<E�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰ÌÒ;)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰ÌÒ:)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰ÌÒ9'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.4‰ÌÒ8)Q移徙.入宅.破屋.å��垣.治病.余事勿å�–.�‰ÌÒ7K�q开生å�Ÿ.破土.行丧.安葬.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.进人å�£.会亲å�‹.ä¼�木.作æ¢�.开柱眼.安床.掘井.æ�•æ�‰.畋猎.�]‰ÌÒ6Eƒ开市.造庙.置产.掘井.纳采.订盟.祭祀.祈ç¦�.开光.安香.出ç�«.出行.会亲å�‹.安机械.修造.动土.竖柱.上æ¢�.造屋.起基.定磉.安床.安门.拆å�¸.移徙.造桥.造船.安葬.破土.入殓.]‰ÌÒ5Syå«�娶.入宅.纳采.订盟.掘井.祭祀.平治é�“æ¶‚.除æœ�.æˆ�æœ�.安葬.余事勿å�–.�q‰Ì�aƒå«�娶.动土.破土.祈ç¦�.出ç�«.入宅.纳采.订盟.开市.交易.立券.出行.会亲å�‹.安机械.竖柱.上æ¢�.平治é�“æ¶‚.ä¼�木.拆å�¸.造屋.起基.安床.安门.解除.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�S‰Ì�S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门. !M` 7 ¤ : u ¯ Ú @ í ½ ¾†è·Eœ Í/‰RɘYП gÑM‰Ì� S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ì� a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ì� ��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ì� ��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ì� 'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ì�E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ì�'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ì�'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ì�a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ì�'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ì���5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ì�a�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ì�'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ì�a�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰ÌŒ��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰ÌŒ~�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰ÌŒ}'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰ÌŒ|a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰ÌŒ{'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÌŒz)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÌŒy)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÌŒx'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÌŒw)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.�‰ÌŒv��祈ç¦�.谢土.安葬.上æ¢�.作ç�¶.开市.å«�娶.出行.入宅.动土.祭祀.塑绘.ç�†å�‘.会亲å�‹.牧养.开池.造畜椆栖.畋猎.结网.�O‰ÌŒu7‚w作ç�¶.ç»�络.安床.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.进人å�£.开市.立券.挂匾.入宅.移徙.安门.æ ½ç§�.动土.求医.治病.会亲å�‹.起基.修造.造屋.安葬.V‰ÌŒtSk开市.动土.破土.å«�娶.安葬.解除.修饰垣墙.冠笄.出行.余事勿å�–.f‰ÌŒsS� 置产.造船.开光.掘井.作ç�¶.å�ˆå¸�.è£�è¡£.å«�娶.安床.入殓.移柩.破土.造畜椆栖.�?‰ÌŒr��mä¼�木.上æ¢�.修造.入殓.ç�†å�‘.会亲å�‹.入宅.安门.安葬.作ç�¶.å«�娶.冠笄.祭祀.祈ç¦�.求嗣.斋醮.开光.出行.解除.动土.开市.交易.立券.挂匾.拆å�¸.破土.e‰ÌŒqa{å«�娶.入宅.开市.安床.破土.ä¿®å�Ÿ.æ²�æµ´.扫èˆ�.æ�•æ�‰.畋猎.解除.塞穴.余事勿å�–.� ‰ÌŒ*g�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰ÌŒ)Y‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰ÌŒ()_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰ÌŒ'�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲. ojÍ0 e ï … à ‹ î ò ’ a >Ù�¥‚Ý.ˆW¹©ûÊ7¤o�‰ÌŒ&7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰ÌŒ%a�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰ÌŒ$�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰ÌŒ#)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰ÌŒ"'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰ÌŒ!�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰ÌŒ '5余事勿å�–.解除.余事勿å�–.q‰ÌŒ�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰ÌŒa�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰ÌŒ)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰ÌŒ'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰ÌŒ�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰ÌŒ ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰ÌŒ}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰ÌŒ''诸事ä¸�宜.诸事ä¸�宜.�V‰ÌŒƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰ÌŒEså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰ÌŒ)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰ÌŒ''诸事ä¸�宜.诸事ä¸�宜.,‰ÌŒ'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.[‰ÌŒSuå«�娶.开市.开池.作厕.破土.祭祀.冠笄.移徙.会亲å�‹.纳财.ç�†å�‘.æ�•æ�‰.�v‰ÌŒaƒ探病.纳畜.ä¼�木.起基.作æ¢�.造屋.å«�娶.纳采.订盟.开市.交易.立券.挂匾.祭祀.祈ç¦�.开光.造车器.挂匾.出行.入宅.移徙.安床.安门.拆å�¸.修造.动土.æ ½ç§�.安葬.破土.å�¯æ”’.除æœ�.æˆ�æœ�.入殓.立碑.�‰ÌŒo�O祈ç¦�.斋醮.纳采.订盟.å«�娶.入宅.安葬.祭祀.求嗣.冠笄.进人å�£.会亲å�‹.安门.安床.ç»�络.纳财.牧养.畋猎.放水.割蜜.P‰ÌŒS_å«�娶.入宅.上æ¢�.出行.安葬.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÌŒ}�Q入宅.移徙.掘井.ç�†å�‘.ä¼�木.交易.开市.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.修造.动土.上æ¢�.安床.纳畜.入殓.破土.e‰ÌŒ a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Ì‹Ga�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Ì‹F�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Ì‹E}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Ì‹Da�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Ì‹C)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�. !¼µÿÎ� ¨ ÿ l  W  I “ 9£[ö·pÓC¤xÝ Sí®.ž]¼�‰Ì‹B)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰Ì‹AEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Ì‹@}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Ì‹?o�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Ì‹>'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Ì‹='�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Ì‹<'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Ì‹;'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Ì‹:� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ì‹9}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ì‹8g�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Ì‹7g�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Ì‹6}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Ì‹5'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Ì‹4)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Ì‹3)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Ì‹2'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Ì‹1)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Ì‹0)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.�‰Ì‹/u�;作ç�¶.出ç�«.进人å�£.开渠.入宅.移徙.祭祀.开光.祈ç¦�.求嗣.斋醮.修造.动土.纳财.造仓.作厕.æ ½ç§�.牧养.会亲å�‹.U‰Ì‹.Ewå«�娶.入宅.安床.出行.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�0‰Ì‹-o‚斋醮.å«�娶.行丧.动土.作ç�¶.安葬.破土.纳采.订盟.开市.交易.立券.挂匾.纳财.æ ½ç§�.进人å�£.入宅.移徙.安床.开光.出ç�«.拆å�¸.安门.修造.�3‰Ì‹,a‚造庙.行丧.安葬.ä¼�木.作ç�¶.造船.å«�娶.纳采.祭祀.解除.出行.修造.动土.开市.上æ¢�.安床.整手足甲.扫èˆ�.求医.治病.起基.定磉.造屋.å�ˆè„Š.P‰Ì‹+Em动土.破土.置产.掘井.祭祀.出行.æ²�æµ´.扫èˆ�.安葬.余事勿å�–.�%‰Ì‹*S‚祈ç¦�.开光.开市.入宅.动土.å«�娶.冠笄.安机械.解除.纳畜.牧养.æ²�æµ´.ä¼�木.架马.作æ¢�.安门.扫èˆ�.å�ˆå¯¿æœ¨.安葬.å�¯æ”’.立碑.ä¿®å�Ÿ.e‰Ì‹)a{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰ÌŠb�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰ÌŠa��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰ÌŠ`S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰ÌŠ_'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰ÌŠ^'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰ÌŠ] ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰ÌŠ\'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–. EUÉG ž Ï P w · ý !a±xå�Bà d3}Õc�UÆE|‰ÌŠ[a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰ÌŠZS�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰ÌŠY'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰ÌŠXo�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰ÌŠW'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰ÌŠVa� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰ÌŠU}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰ÌŠT ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰ÌŠS'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰ÌŠR��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰ÌŠQ ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰ÌŠPE{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰ÌŠO''诸事ä¸�宜.诸事ä¸�宜.:‰ÌŠN'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰ÌŠMoa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰ÌŠLE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰ÌŠKE5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.�*‰ÌŠJ��I入宅.上æ¢�.入殓.造屋.探病.作ç�¶.安门.安葬.纳畜.ä¼�木.å«�娶.纳采.订盟.开光.祭祀.出行.ç�†å�‘.动土.安床.放水.开渠.æ ½ç§�.进人å�£.�:‰ÌŠIo‚行丧.安葬.出行.作æ¢�.纳畜.ä¼�木.造桥.å«�娶.祭祀.祈ç¦�.求嗣.è£�è¡£.冠笄.ç»�络.修造.进人å�£.安床.动土.竖柱.上æ¢�.移徙.交易.立券.æ ½ç§�.会亲å�‹.�V‰ÌŠHE‚w入宅.å«�娶.掘井.牧养.安机械.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.普渡.出行.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.移徙.安床.æ ½ç§�.上æ¢�.纳畜.破土.移柩.安葬.�4‰ÌŠGa‚掘井.ç�†å�‘.作ç�¶.动土.破土.开池.å«�娶.开光.祭祀.祈ç¦�.求嗣.安香.出ç�«.解除.ä¼�木.入宅.移徙.安床.开市.交易.立券.æ ½ç§�.出ç�«.出行.安葬.P‰ÌŠFaQ祈ç¦�.纳采.订盟.å«�娶.入宅.安葬.破屋.å��垣.治病.余事勿å�–.f‰ÌŠEE�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Ì‰S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�.z‰Ì‰~�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Ì‰}� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Ì‰|��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Ì‰{_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Ì‰z}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Ì‰y}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�. `�\‘ µ  O Î  E z 9gå¦AÕŠcÅ/¢O = Ÿ`�‰Ì‰x}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Ì‰wE�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Ì‰v'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Ì‰u'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ì‰t'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ì‰s)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ì‰r'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ì‰q��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ì‰p� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Ì‰oS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Ì‰na�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Ì‰m}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Ì‰l)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Ì‰k)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Ì‰j)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰Ì‰i'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Ì‰h)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Ì‰g)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.�L‰Ì‰fo‚9å«�娶.作ç�¶.出ç�«.置产.å«�娶.入宅.安葬.纳采.订盟.会亲å�‹.入学.祭祀.祈ç¦�.求嗣.开光.出行.解除.ç�†å�‘.动土.起基.开市.交易.立券.纳财.造仓.æ ½ç§�.纳畜.牧养.<‰Ì‰eEE动土.破土.治病.开渠.祭祀.å«�娶.畋猎.结网.�E‰Ì‰d}‚上æ¢�.入宅.修造.动土.破土.祭祀.祈ç¦�.斋醮.å«�娶.纳采.订盟.造车器.开光.出行.拆å�¸.起基.安床.除æœ�.æˆ�æœ�.开市.交易.立券.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�Q‰Ì‰cS‚_开市.入宅.出行.安床.作ç�¶.修造.动土.安机械.祭祀.æ²�æµ´.解除.拆å�¸.治病.作ç�¶.造屋.起基.开池.扫èˆ�.造畜椆栖.开生å�Ÿ.å�ˆå¯¿æœ¨.安葬.破土.å�¯æ”’.移柩.入殓.立碑.�,‰Ì‰b��M移徙.入宅.æ ½ç§�.动土.破土.作ç�¶.安葬.行丧.ä¼�木.上æ¢�.å«�娶.祭祀.出行.è£�è¡£.冠笄.交易.雕刻.纳财.造畜椆栖.造车器.雕刻.教牛马.|‰Ì‰aa�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Ì‰o‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Ì‰��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£.�V‰Ì‰K‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Ì‰S‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Ì‰'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Ì‰� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土. ![Ïžý³ É × g • 2 è ` É ‰Ì}˃4Å$œkÍ%·EâiÁ*ù[�‰Ì‰o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Ì‰'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ì‰}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Ì‰ ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Ì‰�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Ì‰'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Ì‰}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ì‰}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ì‰  ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Ì‰ E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ì‰ 'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ì‰ }�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ì‰ o�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ì‰�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Ì‰7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Ì‰)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Ì‰)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Ì‰'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Ì‰)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅.�7‰Ì‰E‚9行丧.置产.入宅.安葬.å«�娶.纳采.订盟.冠笄.造车器.祭祀.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.出ç�«.入宅.拆å�¸.修造.动土.上æ¢�.安床.æ ½ç§�.破土.;‰Ì‰EC入宅.出行.掘井.安葬.祭祀.结网.余事勿å�–.�‰Ì‰S�_作ç�¶.出ç�«.祭祀.å«�娶.入宅.开市.交易.立券.挂匾.开光.解除.拆å�¸.动土.安床.修造.上æ¢�.置产.æ ½ç§�.破土.安葬.�‰Ìˆ)�k出ç�«.入宅.祭祀.斋醮.塑绘.开光.出行.修造.动土.造畜椆栖.安床.放水.掘井.开池.作厕.结网.破土.E‰Ìˆ~KQ移徙.入宅.开仓.出货财.祭祀.破屋.å��垣.余事勿å�–.^‰Ìˆ}S{å«�娶.开市.安葬.å�¯æ”’.行丧.畋猎.æ�•æ�‰.结网.å�–渔.祭祀.æ²�æµ´.余事勿å�–.�L‰Ìˆ67‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Ìˆ57�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Ìˆ4aƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Ìˆ3a‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�.E‰Ìˆ2EW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Ìˆ1�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Ìˆ0'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Ìˆ/'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–. d€Ñ& ç ' ‰ ç  ‹ / uèG¢K(ÙŠY»æHœ%vß®d�&‰Ìˆ.}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Ìˆ-o�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Ìˆ,'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ìˆ+a�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Ìˆ* ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Ìˆ)a�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Ìˆ()‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰Ìˆ'E�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Ìˆ&'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ìˆ%E‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰Ìˆ$E�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Ìˆ#'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Ìˆ")}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Ìˆ!)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Ìˆ ''诸事ä¸�宜.诸事ä¸�宜.R‰Ìˆ)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Ìˆ�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Ìˆ)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.�‰ÌˆS�sä¼�木.安葬.安床.祭祀.祈ç¦�.纳采.å«�娶.è£�è¡£.ç�†å�‘.出行.修造.动土.进人å�£.开市.交易.立券.挂匾.移徙.上æ¢�.æ ½ç§�.纳畜.�‰Ìˆ� �å«�娶.æ ½ç§�.修造.动土.出行.ä¼�木.作æ¢�.安葬.谢土.开光.纳采.è£�è¡£.冠笄.安床.作ç�¶.进人å�£.造仓.塞穴.�4‰Ìˆa‚作ç�¶.安床.开仓.造屋.动土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.开光.解除.出行.出ç�«.入宅.移徙.æ ½ç§�.纳畜.牧养.动土.破土.入殓.安葬.W‰Ìˆa_å«�娶.安葬.入宅.出行.动土.è¯�讼.塞穴.æ–­èš�.结网.畋猎.余事勿å�–.�‰Ì‡S� �安床.开渠.上æ¢�.修造.开市.开光.入宅.移徙.安床.å«�娶.交易.立券.作厕.补垣.塞穴.畋猎.å�–渔.开生å�Ÿ.�I‰Ì‡R}‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Ì‡Q� �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰Ì‡PS�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Ì‡O)‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Ì‡N'_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Ì‡M ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Ì‡L ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Ì‡K}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�. $jzÕ–e Ë š ü W  s ê ˆ  • ?ñDý¼tå€6Ô,|=’깃R±jB‰Ì‡Ja5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰Ì‡IE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Ì‡H'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ì‡G7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Ì‡F��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Ì‡E'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Ì‡Da�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Ì‡C ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Ì‡B'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Ì‡A��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Ì‡@ ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Ì‡?'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Ì‡>)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Ì‡=)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Ì‡<'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰Ì‡;)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰Ì‡:)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰Ì‡97S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.B‰Ì‡8)må«�娶.入宅.祭祀.修门.å�–渔.纳财.纳畜.余事勿å�–.�'‰Ì‡7�'�5纳采.é—®å��.订盟.å«�娶.入宅.开仓.出ç�«.动土.破土.纳畜.ä¼�木.开市.交易.立券.挂匾.祭祀.开光.祈ç¦�.求嗣.安床.解除.修造.安葬.I‰Ì‡6){祈ç¦�.安葬.æ²�æµ´.塞穴.畋猎.结网.å�–渔.扫èˆ�.余事勿å�–.Q‰Ì‡5)� å«�娶.开市.祭祀.æ²�æµ´.解除.破屋.å��垣.求医.治病.余事勿å�–.�‰Ì†n)�k动土.破土.祭祀.解除.入殓.移柩.å�¯æ”’.安葬.整手足甲.æ�•æ�‰.畋猎.å�–渔.除æœ�.æˆ�æœ�.扫èˆ�.谢土.斋醮.f‰Ì†mS� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Ì†l7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ì†k�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Ì†jo�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Ì†iEe开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Ì†ha�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰Ì†gE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Ì†f'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Ì†e ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Ì†d'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Ì†c'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Ì†b}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Ì†a�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�. ƒ£¿ Ñ t ; \  8 T  ‚ÒaàB¥5–Ú‹<ýÊ´ƒého΃F‰Ì†`'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Ì†_}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Ì†^}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Ì†]'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Ì†\7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Ì†[a�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Ì†Z'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Ì†Y' 诸事ä¸�宜..‰Ì†X77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Ì†W'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Ì†V7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Ì†U7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Ì†T)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.~‰Ì†S��开仓.出货财.造屋.作ç�¶.开市.交易.立券.æ ½ç§�.祭祀.祈ç¦�.å«�娶.冠笄.修饰垣墙.置产.平治é�“æ¶‚.�‰Ì†R�'�动土.破土.安葬.行丧.èµ´ä»».出行.å«�娶.入宅.移徙.谢土.è¯�讼.纳财.开市.立券.交易.开光.安床.上æ¢�.造屋.修造.起基.k‰Ì†QE�!å«�娶.作ç�¶.掘井.安葬.塞穴.整手足甲.解除.æ�•æ�‰.畋猎.结网.余事勿å�–.诸事ä¸�宜.�‰Ì† E�y祈ç¦�.动土.移徙.入宅.祭祀.祈ç¦�.求嗣.斋醮.å«�娶.冠笄.出行.开市.交易.会亲å�‹.教牛马.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.�‰Ì† }�Cå«�娶.祭祀.开光.出行.出ç�«.移徙.入宅.安门.安床.ä¼�木.拆å�¸.修造.动土.上æ¢�.立券.交易.æ ½ç§�.纳畜.牧养.入殓.安葬.|‰Ì† E�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Ì†�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Ì†� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Ì†E�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Ì†'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Ì†)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Ì†)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Ì†EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Ì†E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰Ì†E5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Ì…E}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Ì…~Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Ì…}Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰Ì…|E}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财. „b"„= • þ ‹ K ˆ Ý ™ ê � M»W×7ZÃÿÅ·÷A>„�4‰Ì…{E‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Ì…z/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Ì…y'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Ì…xE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Ì…w)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ì…vE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ì…uE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ì…tE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Ì…sE‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰Ì…rS�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Ì…q)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.�‰Ì…p{�I入宅.安葬.ä¼�木.作æ¢�.纳畜.造畜椆栖.作ç�¶.å«�娶.祭祀.开光.祈ç¦�.求嗣.出行.开市.交易.立券.动土.纳财.掘井.会亲å�‹.{‰Ì…o�%aå«�娶.è¯�讼.行丧.安葬.牧养.ä¼�木.作æ¢�.开市.纳畜.造畜椆栖.祭祀.æ²�æµ´.ç�†å�‘.作ç�¶.结网.æ ½ç§�._‰Ì…n)�%å«�娶.入宅.祭祀.塞穴.结网.破土.谢土.安葬.移柩.除æœ�.æˆ�æœ�.余事勿å�–.� ‰Ì…mu�3开市.å«�娶.安床.会亲å�‹.入宅.作ç�¶.上æ¢�.祭祀.斋醮.æ²�æµ´.开生å�Ÿ.除æœ�.æˆ�æœ�.移柩.入殓.破土.安葬.å�ˆå¯¿æœ¨.;‰Ì…%)_开市.å«�娶.求医.治病.破屋.å��垣.余事勿å�–.X‰Ì…$aa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰Ì…#S‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Ì…"'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰Ì…!S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Ì… '‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Ì…'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Ì…7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Ì…o�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Ì…}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰Ì…'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Ì…7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Ì…'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Ì…E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬. œ¾z/ ’ ÿ Î ) Æ • é _  U·U¬ò*Eè$gÆ+Àœ‰Ì…')诸事ä¸�宜.解除.æ²�æµ´.f‰Ì…�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Ì…�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Ì…)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Ì…o�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Ì…� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Ì…E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰Ì…E‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰Ì…E}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Ì…)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Ì… ')诸事ä¸�宜.求医.破屋.�B‰Ì… E‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�4‰Ì… o‚ ä¼�木.开市.交易.上æ¢�.作ç�¶.安门.造屋.å«�娶.纳采.订盟.入宅.移徙.安床.祭祀.祈ç¦�.开光.出行.解除.出ç�«.拆å�¸.动土.纳畜.谢土.安葬.破土.�#‰Ì… ��C开市.行丧.æ ½ç§�.出行.出货财.安葬.置产.è¯�讼.治病.å«�娶.祭祀.开光.ä¼�木.出ç�«.拆å�¸.入宅.移徙.修造.动土.上æ¢�.安床.纳畜.]‰Ì… }O移徙.入宅.掘井.造庙.æ ½ç§�.é’ˆç�¸.治病.开池.解除.平治é�“æ¶‚.余事勿å�–.�‰Ì„C}�C掘井.祈ç¦�.谢土.动土.入宅.上æ¢�.修造.作ç�¶.å«�娶.出行.ç�†å�‘.安床.å�¯æ”’.安葬.ä¿®å�Ÿ.开市.交易.立券.纳财.开池.牧养.�&‰Ì„BE‚入宅.安门.祭祀.谢土.æ²�æµ´.塑绘.开光.纳采.订盟.开市.交易.立券.纳财.起基.动土.定磉.放水.安葬.破土.å�¯æ”’.ä¿®å�Ÿ.立碑.移柩.Y‰Ì„AEå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Ì„@� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Ì„?� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Ì„>'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Ì„='�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Ì„<E‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Ì„;'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ì„:}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Ì„9}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Ì„8'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ì„7��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Ì„6E‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Ì„5'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–. „©qÓ¢0 ‡ ø ¸  t = ´ ƒ D » ŠôR¼8_—½2ú€*©„�‰Ì„4E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰Ì„3E�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰Ì„2E�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Ì„1)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Ì„0)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Ì„/'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Ì„.E‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Ì„-E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰Ì„,Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Ì„+E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Ì„*E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.�S‰Ì„)S‚c斋醮.ä¼�木.作æ¢�.安葬.行丧.å«�娶.纳采.订盟.造车器.祭祀.祈ç¦�.造庙.安香.出ç�«.出行.å½’å®�.入学.入宅.交易.立券.求医.治病.修造.动土.竖柱.上æ¢�.造屋.起基.安门.‰Ì„(S�;斋醮.入宅.修造.动土.破土.交易.进人å�£.祭祀.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.安葬.谢土.å�¯æ”’.ä¿®å�Ÿ.�‰Ì„'a�O移徙.入宅.å«�娶.祈ç¦�.开光.掘井.æ²�æµ´.冠笄.补垣.塞穴.å�ˆå¸�.è£�è¡£.修造.作æ¢�.开柱眼.安碓磑.ç­‘å ¤.作厕.æ–­èš�.�‰Ì„&��5å«�娶.进人å�£.安葬.出行.èµ´ä»».入宅.移徙.入殓.开渠.祭祀.祈ç¦�.求嗣.开光.拆å�¸.修造.动土.上æ¢�.安床.置产.æ ½ç§�.破土.�‰Ì„%��ä¼�木.纳畜.破土.安葬.开生å�Ÿ.å«�娶.开市.动土.交易.作æ¢�.祭祀.开光.ç�†å�‘.整手足甲.安床.作ç�¶.扫èˆ�.教牛马.,‰Ë¾'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ë¾~E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ë¾}'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ë¾|'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ë¾{a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Ë¾z'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Ë¾y��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Ë¾xa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Ë¾w'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Ë¾va�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ë¾u��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ë¾t�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ë¾s'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ë¾ra�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ë¾q'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ë¾p)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅. "‘ß¼W ÿ # [ ¬  Õ 7 � 'ýyHµ"„íM $‘Ö‡M ¼i9‘�"‰Ë¾o)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ë¾n'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ë¾m)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ë¾l)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ë¾kQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ë¾j)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ë¾i)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ë¾h)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ë¾g �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ë¾fg�Cå«�娶.进人å�£.入宅.移徙.出ç�«.出行.祭祀.祈ç¦�.求嗣.开光.解除.ä¼�木.拆å�¸.修造.æ ½ç§�.纳畜.安葬.ä¿®å�Ÿ.立碑.�c‰Ë¾eY‚}上æ¢�.开仓.出货财.造屋.造船.纳采.订盟.å«�娶.祭祀.祈ç¦�.雕刻.移徙.开市.入宅.出行.动土.会亲å�‹.入学.修造.动土.起基.安门.安床.造庙.解除.纳财.开池.造畜椆栖.牧养.牧养.;‰Ë¾d)_å«�娶.安葬.破屋.å��垣.求医.治病.余事勿å�–.�‰Ë¾c�Qså«�娶.动土.造船.开池.掘井.出行.修造.入宅.上æ¢�.移徙.安葬.破土.作ç�¶.开市.祭祀.ç�†å�‘.é’ˆç�¸.解除.进人å�£.整手足甲.�‰Ë¾b7�{æ ½ç§�.掘井.置产.å«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.开市.交易.立券.挂匾.ä¼�木.入宅.移徙.安床.安葬.�‰Ë¾aa�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰Ë¾�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰Ë¾)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰Ë¾'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰Ë¾�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰Ë¾'5余事勿å�–.解除.余事勿å�–.q‰Ë¾�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Ë¾a�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Ë¾)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Ë¾'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ë¾�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰Ë¾ ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰Ë¾}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰Ë¾''诸事ä¸�宜.诸事ä¸�宜.�V‰Ë¾ ƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰Ë¾ Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Ë¾ )�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Ë¾ ''诸事ä¸�宜.诸事ä¸�宜.,‰Ë¾ 'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰Ë¾Eƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤. #xi%ú½y; ó Ž O  œ k Û < §  u 8ë…FÆ6õT¾!„¹CÙ.›\x�^‰Ë¾)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Ë¾'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰Ë¾E�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Ë¾)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.e‰Ë¾a{开市.入宅.祭祀.置产.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.q‰Ë¾a�å«�娶.开市.交易.入宅.入学.安葬.解除.祭祀.修饰垣墙.平治é�“æ¶‚.造畜椆栖.余事勿å�–.�E‰Ë¾�'�q开市.入宅.出行.å«�娶.ä¿®å�Ÿ.祈ç¦�.动土.入宅.安门.谢土.上æ¢�.纳采.订盟.会亲å�‹.æ²�æµ´.ç�†å�‘.è£�è¡£.冠笄.安床.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.安葬.会亲å�‹.开生å�Ÿ.�‰Ë¾}�Aå«�娶.安葬.行丧.è¯�讼.造桥.作ç�¶.破土.动土.祭祀.开光.出行.解除.ç�†å�‘.ä¼�木.出ç�«.拆å�¸.上æ¢�.å�ˆè„Š.安床.造畜椆栖.�‰Ë½a�]ä¼�木.行丧.破土.å«�娶.安葬.开渠.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.入宅.移徙.安床.安门.纳财.纳畜.造畜椆栖.�‰Ë½~)‚开光.æ ½ç§�.å«�娶.祭祀.祈ç¦�.求嗣.动土.安床.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.作ç�¶.整手足甲.补垣.除æœ�.æˆ�æœ�.�‰Ë½})‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰Ë½7EE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Ë½6}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Ë½5o�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Ë½4'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Ë½3'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Ë½2'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Ë½1'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Ë½0� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ë½/}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ë½.g�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Ë½-g�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Ë½,}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Ë½+'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Ë½*)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Ë½))m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Ë½('_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Ë½')�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Ë½&)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Ë½%']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Ë½$7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ë½#)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ë½")5行丧.安葬.作ç�¶.造畜椆栖.?‰Ë½!)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ë½ E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜. Á'¼0 â % « + ò _ û ¼ ™ = ‡Þ­÷OÝ�Ï@¿t¾�Ng¾+Áe‰Ë½a{开市.入宅.å«�娶.动土.破土.安葬.祭祀.ä¿®å�Ÿ.除æœ�.æˆ�æœ�.å�¯æ”’.移柩.余事勿å�–.� ‰Ë½�� 开仓.出货财.ä¼�木.纳畜.开市.上æ¢�.造屋.破土.å�¯æ”’.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.进人å�£.作ç�¶.移柩.冠笄.会亲å�‹.�#‰Ë½��5å«�娶.破土.进人å�£.出行.入宅.移徙.出ç�«.纳畜.è¯�讼.安葬.开市.交易.立券.纳财.挂匾.æ ½ç§�.祭祀.祈ç¦�.开光.拆å�¸.动土.安床.�a‰Ë½S‚开市.掘井.开渠.造桥.造船.å«�娶.纳采.订盟.祭祀.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.移徙.拆å�¸.挂匾.æ ½ç§�.纳畜.破土.安葬.入殓.除æœ�.æˆ�æœ�.:‰Ë½'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.,‰Ë½'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Ë½ ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Ë¼R'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Ë¼Qa�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Ë¼PS�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Ë¼O'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Ë¼No�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Ë¼M'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Ë¼La� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Ë¼K}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Ë¼J ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Ë¼I'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Ë¼H��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Ë¼G ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Ë¼FE{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Ë¼E''诸事ä¸�宜.诸事ä¸�宜.:‰Ë¼D'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Ë¼Coa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰Ë¼BE�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰Ë¼AE5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Ë¼@E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ë¼?)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Ë¼>E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Ë¼=E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ë¼<E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.f‰Ë¼;E�å«�娶.入宅.开市.交易.破土.安葬.移柩.入殓.祭祀.æ�•æ�‰.除æœ�.æˆ�æœ�.余事勿å�–.�S‰Ë¼:S‚c斋醮.开市.开仓.作ç�¶.造船.å«�娶.祭祀.祈ç¦�.求嗣.出ç�«.出行.开光.解除.拆å�¸.修造.进人å�£.安香.交易.立券.入宅.移徙.安床.动土.破土.谢土.安葬.入殓.除æœ�.æˆ�æœ�. Ïbš Ñ ‚ + Ø † >  Å ` ô © ‚äNÁn¿\+¾ ÔHÆNÏz‰Ë¼9�kå«�娶.è¯�讼.治病.置产.作æ¢�.祈ç¦�.安葬.æ ½ç§�.ä¼�木.安门.修饰垣墙.平治é�“æ¶‚.祭祀.æ²�æµ´.作ç�¶.�I‰Ë¼8� ‚ä¼�木.谢土.行丧.祭祀.作ç�¶.动土.破土.安葬.祈ç¦�.纳采.订盟.开光.出行.解除.安香.出ç�«.拆å�¸.入宅.移徙.修造.上æ¢�.安床.æ ½ç§�.纳畜.会亲å�‹.安机械.ç»�络.�#‰Ë¼7��Qå«�娶.出行.进人å�£.作ç�¶.入宅.移徙.æ ½ç§�.èµ´ä»».祭祀.解除.拆å�¸.修造.动土.起基.上æ¢�.安床.安门.开渠.开池.入殓.破土.å�¯æ”’.}‰Ë¼6_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Ë¼5}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Ë»o}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Ë»n}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Ë»mE�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Ë»l'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Ë»k'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ë»j'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ë»i)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ë»h'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ë»g��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ë»f� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰Ë»eS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰Ë»da�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰Ë»c}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰Ë»b)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰Ë»a)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰Ë»`)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰Ë»_'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰Ë»^)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰Ë»])o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰Ë»\Ciå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰Ë»[)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰Ë»Z)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰Ë»Y7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰Ë»X)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.|‰Ë»Wa�'开光.治病.å«�娶.掘井.破土.安葬.ç»�络.祭祀.æ²�æµ´.补垣.塞穴.除æœ�.æˆ�æœ�.移柩.入殓.å�¯æ”’.立碑.�B‰Ë»Vo‚%移徙.æ ½ç§�.出行.行丧.破土.安葬.è¯�讼.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.纳采.è£�è¡£.冠笄.开光.安床.作æ¢�.修造.动土.作ç�¶.起基.上æ¢�.造屋.纳畜.牧养.�‰Ë»U��开渠.造船.安床.安葬.破土.出行.ä¿®å�Ÿ.掘井.开市.开生å�Ÿ.祭祀.冠笄.作ç�¶.交易.纳财.æ ½ç§�.结网.纳畜.牧养.进人å�£. !†$ ´ â ± b * Ì u B ó � A ù ª ;šáC›-»Xß7 oÑ^-b†�V‰Ë»TK‚q掘井.ä¼�木.纳畜.å�ˆå¯¿æœ¨.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.谢土.安葬.�E‰Ë»SS‚G入宅.移徙.作ç�¶.祭祀.谢土.开市.交易.立券.纳财.动土.开光.出行.å«�娶.纳采.订盟.出行.纳财.入学.开仓.出货财.纳畜.牧养.æ ½ç§�.破土.å�¯æ”’.安葬.立碑.,‰Ë»R'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.n‰Ë»Q� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰Ë» o�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰Ë» 'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ë» }�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰Ë» ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰Ë»�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Ë»'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Ë»}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Ë»}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Ë» ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰Ë»E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Ë»'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ë»}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Ëºo�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Ëº~�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Ëº}7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Ëº|)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Ëº{)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Ëºz'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Ëºy)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Ëºx)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Ëºw�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Ëºv)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ëºu'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Ëºt7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Ëºs'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�L‰Ëºr7‚q动土.掘井.破土.å«�娶.纳采.订盟.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.交易.立券.挂匾.纳财.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.k‰Ëºq7�/破土.出行.æ ½ç§�.å«�娶.祭祀.ç�†å�‘.作ç�¶.修饰垣墙.平治é�“æ¶‚.整手足甲.æ²�æµ´.冠笄.�l‰Ëºpaƒ纳采.订盟.安床.谢土.破土.动土.å«�娶.开光.祭祀.祈ç¦�.出行.解除.移徙.入宅.开市.纳财.起基.修造.竖柱.上æ¢�.造屋.作ç�¶.出ç�«.安香.补垣.塞穴.拆å�¸.放水.扫èˆ�.造仓.造船.æ ½ç§�.安葬.�d‰Ëºoa‚w行丧.安葬.破土.作ç�¶.ä¼�木.斋醮.纳采.订盟.å«�娶.祭祀.祈ç¦�.开市.纳财.立券.移徙.出行.修造.动土.起基.定磉.竖柱.拆å�¸.扫èˆ�.放水.安香.安床.造船.开池.掘井.造畜椆栖.æ ½ç§�. "ßQ¦g § g ˜ : ¿ m  Ï j ð¡R!ƒß®dí>§vØ,ûÊ)ßE‰ËºnEW斋醮.移徙.入宅.动土.祭祀.教牛马.æ–­èš�.余事勿å�–.�‰Ëºm�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Ëº&'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Ëº%'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Ëº$}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Ëº#o�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Ëº"'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Ëº!a�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Ëº  ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Ëºa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Ëº)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰ËºE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Ëº'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ËºE‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰ËºE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Ëº'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Ëº)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Ëº)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Ëº''诸事ä¸�宜.诸事ä¸�宜.R‰Ëº)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Ëº�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Ëº)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Ëº)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Ëº7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Ëº7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Ëº)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ëº)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.�I‰Ëº }‚%入宅.移徙.修造.安门.ä¼�木.入殓.安葬.造屋.祭祀.祈ç¦�.求嗣.开光.出行.开市.交易.立券.æ ½ç§�.安床.纳畜.移徙.起基.动土.定磉.造仓.置产.破土.å�¯æ”’.ä¿®å�Ÿ.�‰Ëº � �;祭祀.ä¼�木.架马.安床.修造.动土.安葬.ä¿®å�Ÿ.破土.解除.出行.纳采.冠笄.竖柱.上æ¢�.移徙.作ç�¶.进人å�£.入宅.纳畜.牧养.�‰Ëº S�må«�娶.掘井.入宅.移徙.安葬.开市.交易.立券.祭祀.祈ç¦�.开光.动土.安床.出行.æ ½ç§�.纳畜.牧养.竖柱.上æ¢�.解除.破土.�:‰Ëº )‚[开市.立券.纳采.订盟.å«�娶.造车器.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.挂匾.入宅.移徙.安床.æ ½ç§�.入殓.破土.安葬.除æœ�.æˆ�æœ�.:‰Ëº '_诸事ä¸�宜.破屋.å��垣.æ²�æµ´.解除.余事勿å�–.�%‰Ë¹C ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Ë¹B ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土. $è[ëQ ‚ Ý Œ ù p  £ E ç ¯ Jûºrã~4Ò*z;�è·�P¯hè{‰Ë¹A}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Ë¹@a5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰Ë¹?E‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Ë¹>'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ë¹=7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Ë¹<��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Ë¹;'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Ë¹:a�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Ë¹9 ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Ë¹8'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Ë¹7��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Ë¹6 ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Ë¹5'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Ë¹4)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Ë¹3)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Ë¹2'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰Ë¹1)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰Ë¹0)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰Ë¹/7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰Ë¹.)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰Ë¹-)�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ë¹,'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰Ë¹+)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Ë¹*�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.f‰Ë¹)S� 斋醮.开光.å«�娶.入宅.上æ¢�.æ²�æµ´.祭祀.解除.安葬.破土.谢土.移柩.余事勿å�–.]‰Ë¹(7�å«�娶.安床.治病.祭祀.作ç�¶.畋猎.结网.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ë¹'�}祈ç¦�.出ç�«.置产.动土.破土.安葬.修造.上æ¢�.置产.入宅.开光.出行.交易.塞穴.å«�娶.ç�†å�‘.开市.安床.� ‰Ë¹&o�;ä¿®å�Ÿ.造桥.作ç�¶.出行.安葬.造屋.入宅.祭祀.祈ç¦�.求嗣.开光.纳采.订盟.解除.æ ½ç§�.纳畜.牧养.扫èˆ�.进人å�£.L‰Ë¹%Ee开光.ä¼�木.安葬.破土.祭祀.出行.教牛马.扫èˆ�.余事勿å�–.�‰Ë¸^a�må«�娶.掘井.探病.开市.开光.æ ½ç§�.祭祀.è£�è¡£.冠笄.安床.交易.立券.开池.补垣.塞穴.入殓.破土.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.�‰Ë¸]E�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Ë¸\'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Ë¸[ ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Ë¸Z'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰Ë¸Y'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰Ë¸X}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬. Ö. Ñ ˜ ¹ x • ± r ß /¾=’ü�7ì³dÖ£�\ÂAóH§\Ö�‰Ë¸W�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Ë¸V'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Ë¸U}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Ë¸T}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Ë¸S'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Ë¸R7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Ë¸Qa�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Ë¸P'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Ë¸O' 诸事ä¸�宜..‰Ë¸N77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Ë¸M'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Ë¸L7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Ë¸K7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Ë¸J)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Ë¸I7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Ë¸H7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Ë¸GS�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Ë¸FE�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Ë¸EE‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.|‰Ë¸DE�Cå�ˆå¸�.开市.安葬.入殓.å«�娶.祭祀.开光.祈ç¦�.求嗣.出ç�«.入宅.移徙.安床.拆å�¸.动土.破土.谢土.l‰Ë¸C�K置产.ä¼�木.纳畜.造畜椆栖.安葬.破土.作æ¢�.作ç�¶.开生å�Ÿ.ç�†å�‘.冠笄.å«�娶.进人å�£.�*‰Ë¸B� �Wå«�娶.行丧.架马.作æ¢�.ç�†å�‘.牧养.安葬.纳畜.ä¼�木.开市.立券.交易.挂匾.祭祀.祈ç¦�.开光.入宅.移徙.安床.拆å�¸.动土.上æ¢�.进人å�£.� ‰Ë¸AE�e开光.作ç�¶.斋醮.安葬.å«�娶.祭祀.出行.冠笄.立券.交易.进人å�£.开市.移徙.修造.动土.安床.入殓.移柩.破土.:‰Ë·{'_诸事ä¸�宜.祭祀.治病.破屋.å��垣.余事勿å�–.�^‰Ë·z)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Ë·y)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Ë·xEEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Ë·wE‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰Ë·vE5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰Ë·uE}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰Ë·tEƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Ë·sEƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木. öbs Ü i ) f » w È k Æ ¢ N)’Î”é†ÆÞ SöX‰Ë·rE}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰Ë·qE‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Ë·p/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Ë·o'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Ë·nE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Ë·m)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ë·lE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ë·kE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ë·jE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Ë·iE‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱.�‰Ë·hS�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Ë·g)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Ë·fSEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Ë·eE‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Ë·d)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Ë·c')诸事ä¸�宜.破屋.å��垣.�‰Ë·bE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.X‰Ë·aaa开市.作ç�¶.安床.入宅.上æ¢�.è£�è¡£.动土.入殓.å«�娶.移柩.安葬.破土.�)‰Ë·`S‚开光.造屋.动土.作ç�¶.æ ½ç§�.造车器.纳采.订盟.祭祀.祈ç¦�.求嗣.移徙.出行.开市.出ç�«.入宅.立券.交易.入宅.安门.安床.安葬.谢土.?‰Ë·_'i诸事ä¸�宜.修饰垣墙.平治é�“æ¶‚.祭祀.余事勿å�–.�%‰Ë·^S‚入宅.作ç�¶.治病.安葬.移徙.å«�娶.冠笄.纳采.出行.会亲å�‹.上æ¢�.安机械.安床.牧养.畋猎.祭祀.祈ç¦�.开光.修造.安门.造屋.起基.�=‰Ë·]'‚c诸事ä¸�宜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.;‰Ë·'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰Ë·7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰Ë·o�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰Ë·}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰Ë·'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Ë·7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’. s[¼q Ô A  k  × + ¡ C ã -Њ§ß»ú�Ù4º{àuQ³s;‰Ë·'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Ë· E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Ë· ')诸事ä¸�宜.解除.æ²�æµ´.f‰Ë· �Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Ë· �5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Ë· )‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Ë·o�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Ë·� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Ë·E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰Ë·E‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰Ë·E}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Ë·)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Ë·')诸事ä¸�宜.求医.破屋.�B‰Ë·E‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰Ë·Eƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Ë¶_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰Ë¶~E}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Ë¶}‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰Ë¶|Su祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.Y‰Ë¶{Eå«�娶.动土.开池.安葬.祭祀.解除.造畜椆栖.教牛马.é’ˆç�¸.余事勿å�–.�‰Ë¶z� � 置产.å«�娶.出行.开光.æ ½ç§�.动土.破土.入宅.治病.安床.è£�è¡£.交易.立券.入殓.移柩.安葬.除æœ�.æˆ�æœ�.�&‰Ë¶y� �Oå«�娶.æ ½ç§�.安葬.ç�†å�‘.造庙.作ç�¶.入殓.行丧.造桥.开市.交易.立券.纳财.纳畜.造畜椆栖.入宅.移徙.安床.开光.祈ç¦�.求嗣.动土.,‰Ë¶3'C诸事ä¸�宜.祭祀.解除.余事勿å�–.^‰Ë¶2'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.余事勿å�–.�‰Ë¶1E‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Ë¶0'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ë¶/}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Ë¶.}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Ë¶-'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ë¶,��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Ë¶+E‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬. "ÉXÉ+ ú ˆ ß P  r Ì • Û œ â…EÞæžD™¹�±0¡ É=‰Ë¶*'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰Ë¶)E�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰Ë¶(E�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰Ë¶'E�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Ë¶&)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Ë¶%)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Ë¶$'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Ë¶#E‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Ë¶"E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰Ë¶!Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Ë¶ E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Ë¶E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Ë¶'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰Ë¶E‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰Ë¶E�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Ë¶)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰Ë¶E}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.,‰Ë¶'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Ë¶E�Q安门.æ ½ç§�.作ç�¶.治病.安床.祭祀.祈ç¦�.求嗣.冠笄.ä¼�木.架马.动土.开池.作厕.结网.入殓.除æœ�.æˆ�æœ�.:‰Ë¶'_诸事ä¸�宜.破屋.å��垣.祭祀.æ²�æµ´.余事勿å�–.,‰Ë¶'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰Ë¶a�5å«�娶.开市.作ç�¶.置产.作æ¢�.ä¼�木.入宅.安床.开光.祭祀.出ç�«.拆å�¸.动土.挂匾.入殓.破土.安葬.纳畜.2‰Êðo'O诸事ä¸�宜.祭祀.修饰垣墙.余事勿å�–.� ‰Êðn��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Êðma�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Êðl'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Êðka�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Êðj��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Êði�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Êðh'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Êðga�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Êðf'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Êðe)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Êðd)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬. "Ô, û Ø s  ?  w È " ñ S¹C•dÑ> KÂþ¿,²q"è¦WÔ+‰Êðc'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Êðb)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Êða)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Êð`Q;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Êð_)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Êð^)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Êð])a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Êð\ �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Êð[S�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰ÊðZ'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÊðYE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÊðXE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÊðWaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�‰ÊðVa�_祈ç¦�.祭祀.ä¼�木.掘井.作ç�¶.谢土.å«�娶.开光.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.上æ¢�.开市.交易.立券.æ ½ç§�.� ‰ÊðU�5uå«�娶.冠笄.出行.祈ç¦�.安葬.ä¼�木.入宅.移徙.出ç�«.æ ½ç§�.动土.上æ¢�.开光.è£�è¡£.安门.会亲å�‹.安床.结网.ç�†å�‘.� ‰ÊðT)‚置产.安床.å«�娶.开光.出行.解除.出ç�«.拆å�¸.修造.进人å�£.动土.入宅.移徙.æ ½ç§�.纳畜.掘井.安葬.除æœ�.æˆ�æœ�.,‰ÊðS'C余事勿å�–.祭祀.æ²�æµ´.余事勿å�–.‰ÊðR�}入宅.移徙.å«�娶.掘井.作ç�¶.出ç�«.进人å�£.开市.开光.安床.祭祀.开池.补垣.入殓.移柩.破土.å�¯æ”’.%‰ÊðQ'5余事勿å�–.解除.余事勿å�–.q‰Êð �o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Êð a�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Êð)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Êð'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Êð�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰Êð ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰Êð}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰Êð''诸事ä¸�宜.诸事ä¸�宜.�V‰Êðƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰ÊðEså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Êð)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Êï''诸事ä¸�宜.诸事ä¸�宜.,‰Êï~'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰Êï}Eƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰Êï|)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜. ".i%ú½y; ó Ž O  œ k Û < §  u 8ë…FÆ6õT‚ Üü±«m.:‰Êï{'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰ÊïzE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Êïy)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰ÊïxEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰ÊïwEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰ÊïvE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰Êïu'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰ÊïtS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÊïsS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.�‰Êïr)‚安床.安葬.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.进人å�£.开市.交易.立券.挂匾.纳财.入宅.移徙.æ ½ç§�.破土.谢土.<‰ÊïqEE安葬.开市.ä¿®å�Ÿ.立碑.å«�娶.祭祀.作ç�¶.纳财.� ‰Êïp}�'纳畜.ä¼�木.置产.作æ¢�.行丧.安葬.ä¿®å�Ÿ.立碑.å«�娶.祭祀.开市.开光.出行.入宅.移徙.出ç�«.拆å�¸.修造.安床.{‰Êïoo�上æ¢�.作ç�¶.ä¼�木.出行.安葬.安门.ç�†å�‘.å«�娶.求嗣.纳采.进人å�£.纳财.结网.纳畜.牧养.会亲å�‹.:‰Êïn'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.a‰Êïm'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Êï''{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Êï&'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Êï%� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Êï$}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Êï#g�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Êï"g�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Êï!}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Êï 'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Êï)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Êï)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Êï'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Êï)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Êï)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Êï']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Êï7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Êï)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Êï)5行丧.安葬.作ç�¶.造畜椆栖.?‰Êï)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰ÊïE�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜. !V|=v ê œ ß e å ¬  µ v S ÷ A˜g± —JÁ‰úy.xGd3¤¥VJ‰ÊïEaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰ÊïEƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰ÊïE�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Êï'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰ÊïS‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.,‰Êï'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�0‰Êï ‚cå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.修造.动土.进人å�£.入宅.移徙.安床.开市.交易.立券.挂匾.æ ½ç§�.纳畜.入殓.安葬.除æœ�.æˆ�æœ�.F‰Êï 'w诸事ä¸�宜.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.|‰Êï a�'作ç�¶.行丧.ç�†å�‘.乘船.å«�娶.安葬.开市.交易.立券.挂匾.开光.出行.入宅.移徙.安床.出ç�«.上æ¢�.� ‰Êï S�Oä¼�木.行丧.作ç�¶.作æ¢�.安葬.å«�娶.祭祀.塑绘.开光.出行.解除.ç�†å�‘.整手足甲.动土.安床.开池.放水.扫èˆ�.3‰Êï 'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Êï o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰ÊîB'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰ÊîAa� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Êî@}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Êî? ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Êî>'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Êî=��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Êî< ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Êî;E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Êî:''诸事ä¸�宜.诸事ä¸�宜.:‰Êî9'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Êî8oa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰Êî7E�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰Êî6E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Êî5E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Êî4)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Êî3E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Êî2E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Êî1E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰Êî0)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰Êî/)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Êî.)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网. "vF‰ ö X È € 1 Ú ‡ 5 í ³ t  £ XÏ1“ýpn ÚmÏ.ƒ÷u v�‰Êî-E�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰Êî,S�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.}‰Êî+_�+安床.动土.安葬.开生å�Ÿ.å�ˆå¯¿æœ¨.祭祀.è£�è¡£.安门.纳财.扫èˆ�.出行.进人å�£.作ç�¶.纳畜.造畜椆栖.�‰Êî*}�开光.出行.修造.上æ¢�.入宅.安门.作ç�¶.è£�è¡£.祭祀.动土.ç­‘å ¤.开池.会亲å�‹.塞穴.入殓.移柩.破土.安葬.�%‰Êî)}�]造屋.入殓.安葬.ä¼�木.入宅.移徙.置产.纳畜.å«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.安床.æ ½ç§�.移柩.进人å�£.会亲å�‹.除æœ�.æˆ�æœ�.�‰Êî(}�I动土.破土.ç�†å�‘.出行.入宅.分居.安香.出ç�«.祭祀.开光.解除.移徙.è£�è¡£.开市.立券.祈ç¦�.求嗣.进人å�£.交易.纳财.纳畜.�‰Êî'E�{æ ½ç§�.作ç�¶.é’ˆç�¸.出行.å«�娶.出ç�«.拆å�¸.祭祀.祈ç¦�.开光.ä¼�木.动土.开市.交易.立券.入宅.移徙.安床.纳畜.入殓.安葬.h‰Êî&'�9诸事ä¸�宜.祭祀.结网.入殓.移柩.å�¯æ”’.安葬.移柩.除æœ�.æˆ�æœ�.å�ˆå¯¿æœ¨.余事勿å�–.,‰Êî%'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Êí_'�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Êí^)‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Êí]'�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Êí\��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Êí[� �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰ÊíZS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰ÊíYa�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰ÊíX}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰ÊíW)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰ÊíV)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰ÊíU)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰ÊíT'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰ÊíS)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰ÊíR)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰ÊíQCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰ÊíP)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰ÊíO)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰ÊíN7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰ÊíM)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰ÊíL ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰ÊíK ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰ÊíJ ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÊíIS‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰ÊíH)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÊíGS�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’. %œÏ1…T# ‚ & Ž u ï   h ³ € 1Î7èyØP�Ùkù–uÞ­œn‰ÊíF� aå«�娶.开市.出ç�«.作ç�¶.置产.斋醮.入宅.移徙.安门.解除.祭祀.ç�†å�‘.入殓.安葬.破土.�‰ÊíEo�Qå«�娶.æ ½ç§�.行丧.ç�†å�‘.ä¿®å�Ÿ.行丧.作ç�¶.祭祀.祈ç¦�.求嗣.开光.ä¼�木.出ç�«.拆å�¸.入宅.安床.修造.动土.上æ¢�.挂匾.纳畜.,‰ÊíD'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÊíC}�5作ç�¶.动土.上æ¢�.æ ½ç§�.入宅.移徙.修造.祈ç¦�.å«�娶.开光.解除.安床.牧养.ç�†å�‘.开市.入殓.å�¯æ”’.移柩.安葬.扫èˆ�.�"‰ÊíB ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.拆å�¸.修造.动土.进人å�£.开市.交易.立券.挂匾.入宅.移徙.æ ½ç§�.纳畜.入殓.å�¯æ”’.除æœ�.æˆ�æœ�.t‰ÊíA�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰Êì{'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰Êìz}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰Êìy}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰Êìx ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰ÊìwE�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Êìv'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Êìu}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Êìto�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Êìs�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Êìr7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Êìq)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Êìp)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Êìo'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Êìn)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Êìm)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Êìl�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Êìk)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Êìj'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Êìi7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Êìh'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Êìg'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Êìf ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰ÊìeS�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÊìdE�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰Êìca_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰Êìb�-�å«�娶.掘井.入宅.移徙.出ç�«.出行.行丧.安葬.开光.ç�†å�‘.进人å�£.修造.动土.起基.安门.安床.æ ½ç§�.ç­‘å ¤.补垣.造畜椆栖.,‰Êìa'C诸事ä¸�宜.解除.å��垣.余事勿å�–.,‰Êì`'C诸事ä¸�宜.祭祀.作ç�¶.余事勿å�–.�&‰Êì_}�_å«�娶.出ç�«.ä¼�木.祭祀.入宅.移徙.纳畜.探病.开市.交易.立券.纳财.æ ½ç§�.安床.拆å�¸.修造.动土.上æ¢�.入殓.安葬.破土.除æœ�.æˆ�æœ�.�‰Êì^o�Qå«�娶.造桥.è¯�讼.移徙.安门.作ç�¶.æ ½ç§�.开市.交易.立券.纳财.开池.作厕.结网.祭祀.修造.动土.安床.放水.ç»�络.破土.,‰Êì]'C诸事ä¸�宜.破屋.å��垣.余事勿å�–. $YU­| Ý F  t - ­ þ S ð © %�Jì²qÁ�Å¢SÓ5‘`ŸðY�‰Êìa�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰Êì ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰Êìa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�.�&‰Êì)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰ÊìE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Êì'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÊìE‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰ÊìE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Êì'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Êì )}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Êì )}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Êì ''诸事ä¸�宜.诸事ä¸�宜.R‰Êì )� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Êì �5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Êì)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Êì)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Êì7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Êì7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Êì)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Êì)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Êì'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Êì ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰ÊìE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Êë)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰Êë~S{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�%‰Êë} ‚M祭祀.祈ç¦�.求嗣.开光.解除.å�ˆå¸�.冠笄.ä¼�木.架马.作æ¢�.修造.进人å�£.å«�娶.è£�è¡£.å�ˆå¸�.安床.动土.起基.上æ¢�.竖柱.放水.会亲å�‹.�)‰Êë| ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.动土.解除.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.安门.上æ¢�.安葬.破土.谢土.{‰Êë{}� å«�娶.移徙.ä¼�木.作æ¢�.安床.祭祀.祈ç¦�.造屋.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.破土.安葬.除æœ�.æˆ�æœ�.B‰Êëza5塞穴.上æ¢�.动土.ä¼�木.安葬.è¯�讼.进人å�£.会亲å�‹.�‰ÊëyE‚å«�娶.安床.探病.作ç�¶.开市.交易.立券.挂匾.开光.出行.拆å�¸.进人å�£.入宅.移柩.动土.安门.上æ¢�.æ ½ç§�.破土.ä¿®å�Ÿ.安葬.,‰Êë3'C诸事ä¸�宜.解除.扫èˆ�.余事勿å�–.�‰Êë27�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Êë1��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Êë0'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Êë/a�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Êë. ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹. (X±b#ðÚ© Ž @ • ô © # ~ ?  t C¥¢F©`ÀbÌg×�1›QïG—X:‰Êë-'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰Êë,��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Êë+ ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Êë*'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Êë))s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Êë()�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Êë''C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰Êë&)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰Êë%)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰Êë$7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰Êë#)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰Êë")�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Êë!'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰Êë )�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Êë�'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰Êë‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰Êë's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰Êë ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰Êë)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰Êë''余事勿å�–.余事勿å�–.�}‰ÊëSƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.�‰ÊëE�{祭祀.入殓.安葬.探病.å«�娶.祈ç¦�.求嗣.开光.出行.解除.拆å�¸.出ç�«.开市.立券.交易.入宅.移徙.安床.动土.破土.谢土.,‰Êë'C诸事ä¸�宜.解除.破屋.余事勿å�–.�‰Êë ‚+祭祀.祈ç¦�.求嗣.开光.解除.纳采.冠笄.出ç�«.拆å�¸.进人å�£.安床.动土.上æ¢�.造庙.掘井.开池.入殓.移柩.安葬.破土.,‰Êë'C诸事ä¸�宜.塞穴.扫èˆ�.余事勿å�–.:‰ÊêN'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�‰ÊêM}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰ÊêL�� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰ÊêK'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰ÊêJ}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰ÊêI}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰ÊêH'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰ÊêG7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰ÊêFa�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰ÊêE'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰ÊêD' 诸事ä¸�宜..‰ÊêC77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰ÊêB'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰ÊêA7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰Êê@7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬. �<W ô 4 ~ L { Á d €’5üÜùpâVlÖgÆ�4‰Êê?)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Êê>7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Êê=7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Êê<S�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Êê;E�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Êê:E‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰Êê9Q5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰Êê8E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰Êê7''诸事ä¸�宜.诸事ä¸�宜.f‰Êê6S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Êê5E‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�^‰Êê4)ƒ#入宅.安门.祭祀.开光.塑绘.祈ç¦�.斋醮.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.拆å�¸.动土.移徙.入宅.入殓.移柩.安葬.谢土.求嗣.入学.ç�†å�‘.ä¼�木.架马.作æ¢�.出ç�«.修造.起基.定磉.放水.èµ´ä»».�]‰Êê3)ƒ!ä¼�木.作æ¢�.祭祀.会亲å�‹.订盟.è£�è¡£.å�ˆå¸�.安机械.拆å�¸.上æ¢�.安门.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.开光.塑绘.入学.出行.起基.定磉.放水.移徙.入宅.竖柱.立券.ç»�络.<‰Êê2EEæ ½ç§�.造屋.作ç�¶.入宅.祭祀.å«�娶.纳婿.安葬.�Y‰Êê1E‚}出行.斋醮.安葬.å«�娶.开光.塑绘.求嗣.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.作æ¢�.开柱眼.安门.安床.造仓.祭祀.会亲å�‹.祈ç¦�.ç»�络.纳财.开市.立券.交易.入学.求嗣.ç�†å�‘.架马.4‰ÊékE5安门.作ç�¶.安葬.å«�娶.塞穴.诸事ä¸�宜.X‰ÊéjE}掘井.动土.作ç�¶.æ ½ç§�.祭祀.出行.å«�娶.冠笄.安床.入殓.移柩.安葬.�h‰ÊéiEƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰ÊéhEƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰ÊégE}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰ÊéfE‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Êée/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Êéd'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰ÊécE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Êéb)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰ÊéaE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Êé`E‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Êé_E7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Êé^E‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱. y?â y ÿ a À % º – ø ¸ Ó+”!áh7~!R­‰ï5íy�‰Êé]S�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Êé\)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Êé[SEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰ÊéZE‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰ÊéY)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰ÊéX')诸事ä¸�宜.破屋.å��垣.�‰ÊéWE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰ÊéVƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰ÊéUSo动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰ÊéTE‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰ÊéS'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰ÊéRa�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.;‰ÊéQ'a诸事ä¸�宜.è£�è¡£.ä¼�木.作æ¢�.纳财.交易.立券.n‰ÊéP7�5è¯�讼.出ç�«.入宅.祭祀.å�ˆå¸�.è£�è¡£.ç»�络.ä¼�木.作æ¢�.安床.作ç�¶.入殓.安葬.å�¯æ”’.移柩.�‰ÊéOo�C入宅.作ç�¶.ä¼�木.安葬.出ç�«.出行.纳畜.å«�娶.开光.祈ç¦�.求嗣.解除.动土.安床.æ ½ç§�.开池.掘井.祭祀.破土.å�¯æ”’.�"‰ÊéN}�Wå«�娶.安葬.破土.作æ¢�.纳畜.牧养.行丧.作ç�¶.移徙.祭祀.开光.祈ç¦�.出行.解除.进人å�£.雇庸.安床.动土.起基.上æ¢�.安门.解除.B‰ÊéM'o诸事ä¸�宜.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰Êé7‚ å«�娶.作ç�¶.安床.祭祀.祈ç¦�.求嗣.开光.出ç�«.出行.拆å�¸.修造.动土.入宅.移徙.上æ¢�.挂匾.开池.入殓.安葬.破土.å�¯æ”’.;‰Êé'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰ÊéE�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Êé')诸事ä¸�宜.解除.æ²�æµ´.f‰Êé�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Êè�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Êè~)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Êè}o�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Êè|� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰Êè{E‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰ÊèzE‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰ÊèyE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑.�;‰Êèx)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水. ”€&{ › c é “  ƒ í «  g ì»jp¥¼©c€¸”‰Êèw')诸事ä¸�宜.求医.破屋.�B‰ÊèvE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰ÊèuEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Êèt_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÊèsE}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Êèr‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÊèqSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÊèpE�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÊèoE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÊènS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Êèm'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÊèlE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�‰ÊèkE‚ 安床.ä¼�木.祈ç¦�.纳畜.å«�娶.开市.交易.立券.开光.出行.出ç�«.拆å�¸.修造.入宅.移徙.动土.破土.移柩.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.,‰Êèj'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Êèi}�-掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.开光.入宅.移徙.安床.修造.动土.进人å�£.�‰Êè#}�A掘井.安葬.æ ½ç§�.出行.作ç�¶.开市.入宅.安门.å«�娶.祭祀.祈ç¦�.求嗣.动土.会亲å�‹.起基.造仓.纳畜.牧养.作厕.进人å�£.F‰Êè"'w余事勿å�–.祭祀.解除.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Êè!��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰Êè E‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰Êè'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰ÊèE�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰ÊèE�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰ÊèE�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Êè)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Êè)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Êè'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰ÊèE‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰ÊèE‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜.U‰ÊèEwå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰ÊèE�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£. #_w³t á g & × � [ ¹ ‰ á Š R ´ ƒ hÙ™ûU€Ì.õ#ƆX'_�B‰ÊèE‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Êè'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰ÊèE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰ÊèE�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Êè)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰ÊèE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰ÊèS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Êè 7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰Êè E�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Êè )Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Êè a�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Êè E‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.� ‰Êè��5入宅.移徙.作ç�¶.祈ç¦�.祭祀.å«�娶.谢土.掘井.造屋.探病.ç�†å�‘.开光.解除.拆å�¸.修造.安葬.开市.交易.立券.挂匾.安床.æ ½ç§�.�‰Êèa�_作ç�¶.塑绘.行丧.è¯�讼.ä¼�木.安葬.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.;‰Êè'a余事勿å�–.安葬.å�¯æ”’.移柩.入殓.除æœ�.æˆ�æœ�.� ‰Êèa�Aå«�娶.祈ç¦�.掘井.行丧.安葬.安床.诸事ä¸�宜.作æ¢�.修造.动土.安门.作ç�¶.塞穴.开池.作厕.ç­‘å ¤.补垣.æ ½ç§�.�#‰Ê¢_��5å«�娶.出行.èµ´ä»».造屋.入殓.入宅.移徙.出ç�«.进人å�£.安葬.祭祀.开光.祈ç¦�.解除.作æ¢�.动土.安床.掘井.æ ½ç§�.纳畜.破土.移柩.m‰Ê¢^�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ê¢]'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ê¢\a�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ê¢['Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰Ê¢Z)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰Ê¢Y)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰Ê¢X'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰Ê¢W)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰Ê¢V)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰Ê¢UQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰Ê¢T)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰Ê¢S)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰Ê¢R)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰Ê¢Q �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰Ê¢PS�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.:‰Ê¢O'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰Ê¢NE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰Ê¢ME�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»». ” Õ Ï $ ‘ R n ~ M * Å m‘nÉtC¥ •k¼û£Òé”P‰Ê¢LaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰Ê¢KSƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰Ê¢JS‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰Ê¢IaW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰Ê¢Ha‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰Ê¢GE‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.%‰Ê¢F'5余事勿å�–.解除.余事勿å�–.q‰Ê¢E�o安床.开市.交易.出货财.安葬.ä¿®å�Ÿ.å«�娶.作ç�¶.祭祀.æ²�æµ´.结网.移柩.入殓.除æœ�.æˆ�æœ�.�‰Ê¢Da�W入宅.作ç�¶.è¯�讼.移徙.出行.èµ´ä»».祭祀.祈ç¦�.求嗣.开光.解除.ç�†å�‘.会亲å�‹.æ ½ç§�.纳畜.牧养.安葬.ä¿®å�Ÿ.立碑.å�¯æ”’.�‰Ê¢C)‚探病.安葬.å«�娶.祭祀.开光.出ç�«.出行.拆å�¸.修造.动土.解除.开市.交易.立券.挂匾.纳财.入宅.移徙.安床.æ ½ç§�.纳畜.,‰Ê¢B'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.� ‰Ê¢A�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰Ê¡z ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰Ê¡y}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰Ê¡x''诸事ä¸�宜.诸事ä¸�宜.�V‰Ê¡wƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰Ê¡vEså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰Ê¡u)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰Ê¡t''诸事ä¸�宜.诸事ä¸�宜.,‰Ê¡s'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰Ê¡rEƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰Ê¡q)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰Ê¡p'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰Ê¡oE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰Ê¡n)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹.‚‰Ê¡mEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰Ê¡lEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰Ê¡kE‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木. !íì] ^  x 4 Ì ˆ J  � ^  « zêK¶„Gú”ÅŒºÚe“í,‰Ê¡j'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰Ê¡iS�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰Ê¡hS‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰Ê¡gS�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰Ê¡fS‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰Ê¡eE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰Ê¡d)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰Ê¡cE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.a‰Ê¡b'�+余事勿å�–.祭祀.入殓.移柩.开生å�Ÿ.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.余事勿å�–.H‰Ê¡a'{余事勿å�–.入殓.破土.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.8‰Ê¡`'[诸事ä¸�宜.造畜椆栖.平治é�“æ¶‚.余事勿å�–.�‰Ê¡_� �-å«�娶.作ç�¶.出ç�«.出行.入宅.移徙.安床.祈ç¦�.上æ¢�.开市.交易.立券.纳财.会亲å�‹.开光.ç�†å�‘.入殓.移柩.安葬.å�¯æ”’.�‰Ê¡^}�5安葬.ä¿®å�Ÿ.作ç�¶.破土.造庙.动土.å«�娶.纳采.祭祀.祈ç¦�.求嗣.开光.出行.解除.移徙.ä¼�木.安床.纳畜.出ç�«.拆å�¸.�‰Ê¡]g�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰Ê¡g�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰Ê¡}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰Ê¡'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰Ê¡)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰Ê¡)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰Ê¡'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰Ê¡)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰Ê¡)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰Ê¡']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰Ê¡7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰Ê¡ )Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰Ê¡ )5行丧.安葬.作ç�¶.造畜椆栖.?‰Ê¡ )g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰Ê¡ E�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰Ê¡ Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎.�y‰Ê¡Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰Ê¡E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰Ê¡'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰Ê¡S‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’. !S±4�% Ž Ë  x * m ó s :§Cá…Ï&õ?—%ØOL§'ÆSn‰Ê¡S�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰Ê¡E�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰Ê¡S�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰Ê¡E‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰Ê¡S‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.3‰Ê 'Q诸事ä¸�宜.祭祀.出行.扫èˆ�.余事勿å�–.�‰Ê ~o�'掘井.祈ç¦�.安床.开市.入宅.挂匾.开光.å«�娶.出行.ä¼�木.拆å�¸.修造.动土.移徙.安葬.破土.ä¿®å�Ÿ.立碑.H‰Ê }'{余事勿å�–.祭祀.立碑.ä¿®å�Ÿ.å�¯æ”’.除æœ�.æˆ�æœ�.余事勿å�–.m‰Ê |a� 探病.开渠.安葬.ä¼�木.作ç�¶.入宅.祭祀.ç�†å�‘.会亲å�‹.进人å�£.å«�娶.é’ˆç�¸.入殓.移柩.�"‰Ê {}�Wå«�娶.立碑.出行.ä¼�木.安葬.行丧.移徙.纳畜.开市.交易.立券.挂匾.祭祀.开光.进人å�£.入宅.安床.出ç�«.拆å�¸.修造.动土.æ ½ç§�.�0‰Ê z ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰Ê y'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰Ê 2��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰Ê 1 ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰Ê 0E{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰Ê /''诸事ä¸�宜.诸事ä¸�宜.:‰Ê .'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰Ê -oa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰Ê ,E�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰Ê +E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰Ê *E�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰Ê ))�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰Ê (E‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰Ê 'E_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰Ê &E�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰Ê %)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰Ê $)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.‰Ê #)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰Ê "E�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰Ê !S�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰Ê  )‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰Ê a�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰Ê o7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰. "u†w < » ‚ Å 2 ”  ¼ m Ãq)ï°Kß” mÏ9¬YªGì2u�7‰Ê =‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰Ê a‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰Ê 5'探病.余事勿å�–.余事勿å�–.,‰Ê 'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.^‰Ê '�%诸事ä¸�宜.祭祀.求医.æ�•æ�‰.æ ½ç§�.塞穴.入殓.破土.安葬.移柩.余事勿å�–.�)‰Ê )‚9å«�娶.移徙.祭祀.求嗣.开光.出行.ä¼�木.作æ¢�.出ç�«.解除.拆å�¸.进人å�£.修造.动土.起基.安床.æ ½ç§�.纳畜.入殓.破土.安葬.除æœ�.æˆ�æœ�.N‰Ê '�诸事ä¸�宜.祭祀.作ç�¶.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.�‰Ê ��å«�娶.纳财.祈ç¦�.安葬.修造.开市.交易.立券.动土.上æ¢�.塑绘.开光.进人å�£.纳畜.补垣.塞穴.æ ½ç§�.牧养.�‰Ê � �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰ÊŸOS�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰ÊŸNa�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰ÊŸM}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰ÊŸL)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰ÊŸK)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰ÊŸJ)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰ÊŸI'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰ÊŸH)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰ÊŸG)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰ÊŸFCiå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰ÊŸE)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰ÊŸD)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰ÊŸC7o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰ÊŸB)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰ÊŸA ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰ÊŸ@ ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰ÊŸ? ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÊŸ>S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰ÊŸ=)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–.|‰ÊŸ<S�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰ÊŸ;E‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰ÊŸ:E�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÊŸ9S�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÊŸ8S�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰ÊŸ7a�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»». #ɉÚC Ò ò + Ä . Ò : ¶ !Ì›L¶_,Ýz+ã”%„üË-…¥BÉt‰ÊŸ6�_å«�娶.作ç�¶.安葬.动土.è¯�讼.作æ¢�.ä¼�木.掘井.破土.移徙.祭祀.出行.交易.割蜜.造畜椆栖.^‰ÊŸ5'�%余事勿å�–.祭祀.入殓.破土.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.谢土.余事勿å�–.m‰ÊŸ4}oå«�娶.出行.安葬.入殓.入宅.作ç�¶.冠笄.上æ¢�.祭祀.祈ç¦�.求嗣.开光.开市.牧养.ç�†å�‘.i‰ÊŸ3}g安葬.ç»�络.ä¿®å�Ÿ.破土.开市.安床.å�¯æ”’.立碑.祭祀.作ç�¶.纳财.æ ½ç§�.纳畜.进人å�£.�"‰ÊŸ2 ‚Gå«�娶.开光.出行.祈ç¦�.求嗣.解除.拆å�¸.动土.修造.进人å�£.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.移柩.安葬.�‰ÊŸ1E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰Êžk'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰Êžj}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰Êžio�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰Êžh�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰Êžg7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰Êžf)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰Êže)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰Êžd'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰Êžc)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰Êžb)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰Êža�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰Êž`)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Êž_'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰Êž^7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰Êž]'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰Êž\'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰Êž[ ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰ÊžZS�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÊžYE�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰ÊžXa_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰ÊžWa�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰ÊžVS�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–.�A‰ÊžUK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÊžTS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰ÊžS)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.,‰ÊžR'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰ÊžQa�Qå«�娶.开市.交易.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.开光.出行.ä¼�木.出ç�«.拆å�¸.修造.动土.起基.安床.入宅.移徙.�)‰ÊžP ‚Uå«�娶.祭祀.开光.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.动土.修造.进人å�£.入宅.移徙.安床.挂匾.交易.立券.æ ½ç§�.纳畜.入殓.破土.å�¯æ”’.安葬.r‰ÊžOa�出行.安门.修造.å«�娶.上æ¢�.入宅.祭祀.ç�†å�‘.修饰垣墙.平治é�“æ¶‚.æ²�æµ´.整手足甲.扫èˆ�. "ªÁn= ž  [  B K Ñç„=¹#Þ€F³U°Y6ç˜gÉ%ôVª�&‰ÊžN)‚3置产.安床.开光.求嗣.出行.解除.ä¼�木.出ç�«.拆å�¸.修造.上æ¢�.起基.入宅.移徙.开市.交易.立券.æ ½ç§�.牧养.入殓.安葬.除æœ�.æˆ�æœ�.�‰ÊžME�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰Êž'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÊžE‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰ÊžE�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰Êž'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰Êž)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰Êž)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰Êž''诸事ä¸�宜.诸事ä¸�宜.R‰Ê�)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰Ê�~�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰Ê�})_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰Ê�|)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰Ê�{7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰Ê�z7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰Ê�y)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰Ê�x)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰Ê�w'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰Ê�v ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰Ê�uE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰Ê�t)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰Ê�sS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰Ê�rEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰Ê�qK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰Ê�pYƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰Ê�oE‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕.<‰Ê�nS7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰Ê�mS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰Ê�l7�{开光.掘井.开仓.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.入宅.移徙.安床.作ç�¶.塞穴.æ ½ç§�.破土.安葬.�‰Ê�k��'纳畜.入宅.移徙.安葬.探病.ä¼�木.上æ¢�.安门.入殓.动土.å«�娶.祭祀.祈ç¦�.求嗣.开光.开市.交易.立券.安床.出行.拆å�¸.,‰Ê�j'C诸事ä¸�宜.结网.解除.余事勿å�–.�"‰Ê�ia�s入宅.移徙.ç�†å�‘.出ç�«.å«�娶.出行.开市.交易.立券.祭祀.祈ç¦�.开光.ä¼�木.进人å�£.安床.拆å�¸.修造.动土.æ ½ç§�.破土.移柩.安葬.�%‰Ê�# ‚Må«�娶.祭祀.祈ç¦�.求嗣.开光.出行.拆å�¸.动土.上æ¢�.出ç�«.进人å�£.入宅.移徙.安床.æ ½ç§�.纳畜.牧养.竖柱.安门.修造.解除.会亲å�‹.:‰Ê�"'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–. &Y±r?)ø^ Ý � ä C ø r Í % Þ žµ`]:d{¿‡)Ú™QóÂ]± Y�*‰Ê�!��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰Ê�  ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰Ê�'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰Ê�)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰Ê�)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰Ê�'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰Ê�)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰Ê�)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰Ê�7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰Ê�)}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.Y‰Ê�)�祈ç¦�.斋醮.å«�娶.纳采.祭祀.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰Ê�'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰Ê�)�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰Ê��'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰Ê�‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰Ê�'s诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰Ê� ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰Ê�)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰Ê�''余事勿å�–.余事勿å�–.�}‰Ê�Sƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰Ê� aQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰Ê� Eƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰Ê� EC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰Ê� )m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰Ê� E‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�‰Ê�}�Q动土.破土.纳财.掘井.挂匾.开市.ä¼�木.交易.祭祀.祈ç¦�.求嗣.开光.解除.出ç�«.拆å�¸.入宅.安床.修造.安门.纳畜.å�¯æ”’.安葬.�‰Ê��� 进人å�£.出行.å«�娶.置产.安床.èµ´ä»».安葬.作ç�¶.祭祀.祈ç¦�.开光.解除.动土.纳财.交易.纳畜.扫èˆ�.F‰Ê�'w诸事ä¸�宜.祭祀.平治é�“æ¶‚.解除.修饰垣墙.余事勿å�–.�‰Ê�}�I谢土.祈ç¦�.上æ¢�.作ç�¶.斋醮.修造.入宅.安门.纳采.å«�娶.开光.出行.ç�†å�‘.会亲å�‹.开市.安床.æ ½ç§�.牧养.入殓.移柩.å�¯æ”’.�%‰Êœ>}�]å«�娶.纳财.安葬.出行.开市.立券.作ç�¶.æ ½ç§�.祭祀.祈ç¦�.开光.求嗣.解除.ä¼�木.出ç�«.入宅.移徙.安床.拆å�¸.修造.动土.造畜椆栖.I‰Êœ='}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰Êœ<7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰Êœ;a�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰Êœ:'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰Êœ9' 诸事ä¸�宜..‰Êœ877å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰Êœ7'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰Êœ67o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医. �<W ô 4 ~ L { Á d €’'Á>~*d¿T1¥f»%¶`Ü�J‰Êœ57oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰Êœ4)Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰Êœ37gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰Êœ27}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰Êœ1S�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰Êœ0E�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰Êœ/E‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰Êœ.Q5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰Êœ-E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰Êœ,''诸事ä¸�宜.诸事ä¸�宜.f‰Êœ+S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰Êœ*E‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰Êœ)K‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰Êœ(S]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰Êœ'a‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰Êœ&a�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰Êœ%oe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰Êœ$a}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.�h‰Êœ#Eƒ祭祀.开光.å«�娶.入宅.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.拆å�¸.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.ç»�络.交易.立券.纳财.ç­‘å ¤.造仓.补垣.塞穴.纳畜.ä¼�木.架马.�^‰Êœ"Eƒ作ç�¶.安葬.开市.造屋.祭祀.订盟.纳采.修造.动土.祈ç¦�.塑绘.斋醮.æ²�æµ´.拆å�¸.起基.入宅.安香.造庙.移柩.谢土.除æœ�.æˆ�æœ�.入学.习艺.出行.竖柱.上æ¢�.掘井.求嗣.解除.ä¼�木.X‰Êœ!E}作ç�¶.开市.安葬.作æ¢�.è£�è¡£.å�ˆå¸�.冠笄.å«�娶.纳婿.安床.入殓.纳财.�4‰Ê›[E‚3å«�娶.æ ½ç§�.ä¼�木.安葬.祭祀.开光.塑绘.纳采.è£�è¡£.拆å�¸.安床.起基.动土.竖柱.上æ¢�.移徙.入宅.安香.开市.立券.挂匾.æ²�æµ´.出行.求嗣.安门.�K‰Ê›Z/‚w开光.出货财.祭祀.动土.上æ¢�.订盟.纳采.å«�娶.安机械.拆å�¸.安床.入宅.安香.入殓.移柩.破土.安葬.立碑.谢土.èµ´ä»».出行.移徙.祈ç¦�.求嗣.解除.造仓.进人å�£.-‰Ê›Y'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰Ê›XE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰Ê›W)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰Ê›VE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙.�%‰Ê›UE‚出行.å«�娶.入宅.安葬.开光.塑绘.è£�è¡£.冠笄.ä¼�木.拆å�¸.竖柱.上æ¢�.开仓.会亲å�‹.安机械.造仓.造屋.交易.解除.开市.立券.纳财.5‰Ê›TE7æ ½ç§�.作ç�¶.安葬.å«�娶.祭祀.扫èˆ�.塞穴.�>‰Ê›SE‚G作ç�¶.掘井.动土.æ ½ç§�.祈ç¦�.开光.塑绘.酬神.订盟.纳采.è£�è¡£.安床.开市.立券.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.èµ´ä»».会亲å�‹.出行.交易.竖柱. ø£ß: À " � æ { W ¹ y 9 Ê ,Ó`ç¶ý Ñ,n´l�ø�‰Ê›RS�_作ç�¶.开光.å«�娶.开市.入宅.订盟.纳采.冠笄.拆å�¸.修造.动土.安床.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.å�¯æ”’.造仓.�W‰Ê›Q)ƒæ ½ç§�.安葬.祭祀.开光.塑绘.酬神.斋醮.订盟.纳采.å«�娶.è£�è¡£.动土.起基.出ç�«.拆å�¸.移徙.入宅.安香.修造.竖柱.上æ¢�.纳畜.牧养.祈ç¦�.求嗣.解除.ä¼�木.定磉.造屋.安门.C‰Ê›PSEå«�娶.入宅.移徙.作ç�¶.安葬.祭祀.æ²�æµ´.æ�•æ�‰.æ ½ç§�.�4‰Ê›OE‚3造庙.å«�娶.ä¼�木.安葬.祭祀.开光.塑绘.订盟.纳采.å�ˆå¸�.冠笄.拆å�¸.动土.起基.上æ¢�.入宅.安香.开市.立券.纳财.æ²�æµ´.求嗣.出ç�«.竖柱.安门.�‰Ê›N)‚作æ¢�.造庙.祭祀.出行.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.进人å�£.动土.安床.作ç�¶.入殓.移柩.安葬.破土.结网.å�–渔.畋猎.‰Ê›M')诸事ä¸�宜.破屋.å��垣.�‰Ê›LE‚ 安床.å«�娶.作ç�¶.入宅.祭祀.解除.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.谢土.æ²�æµ´.扫èˆ�.æ�•æ�‰.å�–渔.结网.畋猎.ç�†å�‘.�I‰Ê›Kƒèµ´ä»».祈ç¦�.求嗣.开光.塑绘.斋醮.订盟.纳采.å«�娶.拆å�¸.安床.入宅.安香.移柩.ä¿®å�Ÿ.安葬.谢土.æ ½ç§�.解除.冠笄.è£�è¡£.移徙.修造.动土.竖柱.放水.å�¯æ”’.立碑.X‰Ê›JSo动土.作ç�¶.入宅.开光.安床.祭祀.å«�娶.纳婿.除æœ�.æˆ�æœ�.入殓.移柩.�3‰Ê›IE‚1作ç�¶.出行.入宅.安葬.塑绘.开光.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.会亲å�‹.纳财.开市.立券.交易.安床.竖柱.上æ¢�.结网.æ ½ç§�.解除.ç»�络.,‰Ê›H'C诸事ä¸�宜.扫èˆ�.塞穴.余事勿å�–.t‰Ê›Ga�æ ½ç§�.动土.安葬.掘井.ä¿®å�Ÿ.探病.祭祀.会亲å�‹.立券.交易.è£�è¡£.å�ˆå¸�.å«�娶.冠笄.进人å�£.�3‰Ê›FS‚#祭祀.å«�娶.出行.上æ¢�.掘井.è£�è¡£.ç»�络.ä¼�木.开柱眼.拆å�¸.修造.动土.上æ¢�.å�ˆè„Š.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.ä¿®å�Ÿ.立碑.�4‰Ê›ES‚%纳采.动土.开市.交易.安门.开光.祈ç¦�.求嗣.出行.解除.ä¼�木.造屋.起基.修造.架马.安门.移徙.入宅.造庙.除æœ�.æˆ�æœ�.移柩.谢土.纳畜.牧养.T‰Ê›DEu纳财.开市.安葬.破土.ç�†å�‘.冠笄.å«�娶.进人å�£.æ ½ç§�.æ�•æ�‰.é’ˆç�¸.�‰Ê›CE�{祈ç¦�.å«�娶.安葬.破土.开光.求嗣.出行.纳采.冠笄.出ç�«.拆å�¸.起基.修造.动土.上æ¢�.移徙.造船.开市.交易.立券.纳财.j‰Ê›BS�塑绘.开光.造桥.除æœ�.æˆ�æœ�.å«�娶.冠笄.祭祀.出行.会亲å�‹.修造.动土.入殓.破土.;‰Ê›AECå«�娶.移徙.开市.入宅.破屋.å��垣.余事勿å�–.;‰Ê›@'a余事勿å�–.祭祀.解除.治病.破屋.å��垣.扫èˆ�.�‰Ê›?E�{开市.立券.ç�†å�‘.作ç�¶.å«�娶.祭祀.祈ç¦�.出行.解除.出ç�«.拆å�¸.动土.入宅.移徙.安床.上æ¢�.æ ½ç§�.纳畜.破土.å�¯æ”’.安葬.‰Ê›>')诸事ä¸�宜.解除.æ²�æµ´.f‰Ê›=�Cæ ½ç§�.出行.祈ç¦�.行丧.纳畜.安葬.安门.ä¼�木.作æ¢�.牧养.作ç�¶.解除.平治é�“æ¶‚.�‰Êšt�5�入宅.移徙.出ç�«.分居.安香.作ç�¶.开市.交易.立券.安葬.动土.ä¼�木.å«�娶.开光.求嗣.会亲å�‹.安床.牧养.塑绘.é’ˆç�¸.�‰Êšs)‚掘井.è¯�讼.å«�娶.安床.开光.出行.祭祀.动土.出ç�«.解除.会亲å�‹.开市.交易.立券.挂匾.入宅.移徙.拆å�¸.破土.å�¯æ”’.安葬.�‰Êšro�Qå«�娶.出行.动土.开渠.入宅.祭祀.掘井.安床.解除.è£�è¡£.竖柱.上æ¢�.交易.立券.纳财.纳畜.牧养.入殓.移柩.安葬.å�¯æ”’.u‰Êšq� o开光.掘井.é’ˆç�¸.出行.å«�娶.入宅.移徙.作ç�¶.动土.祭祀.祈ç¦�.求嗣.入殓.å�¯æ”’.安葬.移柩.�‰ÊšpE‚ 入殓.安葬.作ç�¶.入宅.祭祀.æ²�æµ´.祈ç¦�.求嗣.斋醮.订盟.纳采.è£�è¡£.冠笄.开市.立券.交易.纳财.æ²�æµ´.除æœ�.谢土.出行.移柩.�>‰ÊšoE‚G安葬.作ç�¶.ä¼�木.作æ¢�.祭祀.求嗣.æ²�æµ´.酬神.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造仓.开池.ç»�络.纳财.开市.立券.交易.结网.å�–渔.纳畜.æ�•æ�‰.X‰ÊšnE}å«�娶.上æ¢�.入宅.作ç�¶.å�–渔.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.立碑. ’Uu= à m ì ] Ç … à A à šÏ9Õ)Û/dÛ{Åh"?wS’�;‰Êšm)‚]作ç�¶.安床.祈ç¦�.求嗣.斋醮.塑绘.开光.订盟.纳采.å«�娶.动土.入宅.安香.移柩.安葬.谢土.出行.æ²�æµ´.修造.竖柱.上æ¢�.纳财.破土.解除.安门.放水.‰Êšl')诸事ä¸�宜.求医.破屋.�B‰ÊškE‚Oæ ½ç§�.动土.开市.作ç�¶.祭祀.祈ç¦�.酬神.订盟.纳采.冠笄.è£�è¡£.å�ˆå¸�.å«�娶.安床.移徙.入宅.安香.入殓.移柩.å�¯æ”’.安葬.解除.å�–渔.æ�•æ�‰.ä¼�木.安门.出ç�«.�]‰ÊšjEƒ造屋.æ ½ç§�.安葬.作ç�¶.塑绘.开光.酬神.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.动土.上æ¢�.安床.安香.造庙.挂匾.会亲å�‹.进人å�£.出行.修造.纳财.ä¼�木.放水.出ç�«.纳畜.æ²�æµ´.安门.A‰Êši_5祭祀.祈ç¦�.安葬.安门.余事勿å�–.作ç�¶.平治é�“æ¶‚.X‰ÊšhE}斋醮.作ç�¶.安床.安葬.安床.å�ˆå¸�.入宅.é—®å��.纳采.求嗣.祭祀.开仓.�0‰Êšg‚U掘井.祭祀.斋醮.è£�è¡£.å�ˆå¸�.冠笄.订盟.纳采.å«�娶.入宅.安香.谢土.入殓.移柩.破土.立碑.安香.会亲å�‹.出行.祈ç¦�.求嗣.立碑.上æ¢�.放水.[‰ÊšfSu祭祀.祈ç¦�.移徙.å«�娶.入宅.è£�è¡£.å�ˆå¸�.入殓.除æœ�.æˆ�æœ�.会亲å�‹.纳财.�‰ÊšeE�Q出行.å«�娶.入宅.动土.祭祀.祈ç¦�.求嗣.酬神.è£�è¡£.安床.立券.交易.入殓.除æœ�.æˆ�æœ�.移柩.谢土.å�¯æ”’.�E‰ÊšdE‚U安葬.上æ¢�.入宅.作ç�¶.祭祀.æ²�æµ´.开光.塑绘.祈ç¦�.求嗣.订盟.纳采.冠笄.è£�è¡£.å«�娶.动土.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.出行.安碓磑.放水.开市.立券.交易.�&‰ÊšcS‚ ä¼�木.作ç�¶.安葬.å�–渔.入宅.塑绘.开光.祈ç¦�.求嗣.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.起基.安门.安床.移徙.造仓.结网.纳畜.I‰Êšb'}余事勿å�–.祭祀.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.�&‰ÊšaE‚安床.æ ½ç§�.治病.作ç�¶.祭祀.冠笄.å«�娶.拆å�¸.修造.动土.起基.上æ¢�.造屋.入宅.开市.开池.塞穴.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土._‰Êš`7�入宅.开市.安葬.祭祀.æ²�æµ´.求医.治病.扫èˆ�.破屋.å��垣.解除.余事勿å�–.�‰Êš_S�]开光.开市.入宅.动土.造屋.入学.习艺.出行.纳采.订盟.å«�娶.会亲å�‹.进人å�£.牧养.æ�•æ�‰.入殓.移柩.安葬.å�¯æ”’.�E‰Êš^o‚+置产.造屋.å�ˆè„Š.开光.探病.安门.作ç�¶.祈ç¦�.求嗣.斋醮.纳采.å«�娶.ä¼�木.修造.动土.移徙.入宅.造庙.安机械.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.破土.谢土.A‰Êš]EOå«�娶.祈ç¦�.掘井.安葬.祭祀.平治é�“æ¶‚.余事勿å�–.\‰Êš\E�开市.动土.安葬.破土.会亲å�‹.求嗣.ç�†å�‘.冠笄.结网.æ�•æ�‰.开光.ç�†å�‘.�‰Êš[��'修造.上æ¢�.入宅.祈ç¦�.探病.掘井.动土.安门.安葬.作ç�¶.开市.交易.立券.纳财.开池.补垣.å«�娶.纳采.纳畜.å�–渔.安床.�‰ÊšZE‚ å«�娶.祭祀.出行.置产.开市.交易.立券.挂匾.开光.解除.ä¼�木.作æ¢�.出ç�«.入宅.移徙.安床.拆å�¸.动土.上æ¢�.æ ½ç§�.纳畜.安葬.=‰ÊšY'e余事勿å�–.解除.扫èˆ�.祭祀.教牛马.余事勿å�–.�‰ÊšE�k作ç�¶.掘井.å«�娶.入宅.祭祀.祈ç¦�.斋醮.æ²�æµ´.安床.安机械.造车器.入殓.移柩.å�¯æ”’.安葬.立碑.å�ˆå¸�.ç»�络.交易.� ‰ÊšE�]æ ½ç§�.å«�娶.入殓.安葬.祭祀.出行.æ²�æµ´.è£�è¡£.祈ç¦�.斋醮.订盟.纳采.å«�娶.安机械.开市.立券.安碓磑.纳畜.|‰ÊšE�C开仓.造屋.安葬.安床.祭祀.祈ç¦�.斋醮.塑绘.开光.除æœ�.æˆ�æœ�.入殓.作ç�¶.å«�娶.æ�•æ�‰.畋猎.纳财.Q‰Êš)� 破土.ä¼�木.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.余事勿å�–.u‰Êš)�Q入宅.安床.塑绘.开光.出行.订盟.纳采.除æœ�.æˆ�æœ�.å«�娶.纳婿.入殓.移柩.å�¯æ”’.安葬.立碑.3‰Êš'Q诸事ä¸�宜.解除.破屋.å��垣.余事勿å�–.�Z‰Êš E‚造屋.开市.作ç�¶.入宅.祭祀.会亲å�‹.出行.订盟.纳采.æ²�æµ´.修造.动土.祈ç¦�.斋醮.å«�娶.拆å�¸.安床.入殓.移柩.安葬.谢土.èµ´ä»».è£�è¡£.竖柱.上æ¢�.ä¼�木.æ�•æ�‰.æ ½ç§�.破土.安门.�%‰Êš E‚出行.治病.安葬.开市.会亲å�‹.纳采.进人å�£.修造.动土.竖柱.上æ¢�.祭祀.开光.塑绘.祈ç¦�.斋醮.å«�娶.安床.移徙.入宅.安香.纳畜. "xmó²c) ç ˜ E  m  Þ @  �  4—JHsû¿!è¹yKRÒxU‰Êš Ewå«�娶.移徙.入宅.开光.修饰垣墙.平治é�“æ¶‚.入殓.移柩.余事勿å�–.{‰Êš E�A作ç�¶.掘井.谢土.入宅.出行.å«�娶.订盟.纳采.入殓.安床.å�¯æ”’.安葬.祭祀.è£�è¡£.会亲å�‹.进人å�£.�B‰Êš E‚O作ç�¶.祭祀.上æ¢�.出行.æ²�æµ´.解除.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.移徙.入宅.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.扫èˆ�.ä¿®å�Ÿ.ä¼�木.纳财.交易.立券.,‰Êš'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�A‰ÊšE‚M开仓.å«�娶.移徙.入宅.祭祀.æ²�æµ´.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.拆å�¸.起基.竖柱.上æ¢�.安床.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.挂匾.求嗣.出行.å�ˆå¸�.造畜椆栖.b‰ÊšE�å«�娶.入殓.安葬.出行.塑绘.开光.æ²�æµ´.冠笄.会亲å�‹.作ç�¶.放水.造畜椆栖.;‰Êš)_开市.安床.祭祀.作ç�¶.入殓.除æœ�.余事勿å�–.X‰ÊšE}开市.ä¼�木.å«�娶.作æ¢�.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.ä¿®å�Ÿ.立碑.�L‰ÊšS‚U祈ç¦�.å«�娶.造庙.安床.谢土.纳采.订盟.祭祀.求嗣.出ç�«.塑绘.è£�è¡£.会亲å�‹.入学.拆å�¸.扫èˆ�.造仓.挂匾.掘井.开池.结网.æ ½ç§�.纳畜.破土.ä¿®å�Ÿ.立碑.安葬.入殓.4‰Êš7Cå«�娶.开市.安葬.破屋.å��垣.余事勿å�–.�‰ÊšE�{造屋.开市.动土.破土.å«�娶.祭祀.æ²�æµ´.è£�è¡£.出行.ç�†å�‘.移徙.æ�•æ�‰.畋猎.放水.入宅.除æœ�.æˆ�æœ�.å�¯æ”’.安葬.移柩.入殓.7‰Êš)Wå«�娶.安葬.祭祀.安碓磑.结网.余事勿å�–.s‰Ê™a�移徙.入宅.造庙.作ç�¶.治病.安葬.祭祀.冠笄.å«�娶.会亲å�‹.进人å�£.è£�è¡£.结网.平治é�“æ¶‚.�O‰Ê™~E‚i入宅.开光.开市.动土.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.会亲å�‹.解除.出行.入学.纳财.开市.交易.立券.习艺.ç»�络.安床.开仓.出货财.纳畜.安葬.å�¯æ”’.ä¿®å�Ÿ.入殓.�|‰Ê™}oƒ探病.祭祀.出行.上æ¢�.造屋.谢土.安葬.纳采.订盟.移徙.纳财.开市.交易.立券.入宅.会亲å�‹.解除.求医.治病.入学.安床.安门.安香.出ç�«.拆å�¸.扫èˆ�.入宅.挂匾.开生å�Ÿ.å�ˆå¯¿æœ¨.破土.ä¿®å�Ÿ.å�¯æ”’.入殓.H‰Ê™|7k破土.动土.安葬.祭祀.解除.教牛马.会亲å�‹.余事勿å�–.�‰Ê™{S�k开光.å«�娶.开市.动土.破土.交易.立券.纳财.安床.è£�è¡£.造畜椆栖.安葬.谢土.å�¯æ”’.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.移柩.入殓.�c‰Ê™za‚u造庙.å«�娶.出行.动土.安葬.行丧.订盟.纳采.会亲å�‹.祭祀.斋醮.æ²�æµ´.塑绘.出ç�«.开光.竖柱.上æ¢�.开市.交易.立券.作æ¢�.开柱眼.ä¼�木.架马.安门.安床.拆å�¸.牧养.造畜椆栖.掘井.{‰Ê™yE�A开市.安床.安葬.ä¿®å�Ÿ.å«�娶.纳采.订盟.é—®å��.祭祀.冠笄.è£�è¡£.会亲å�‹.进人å�£.纳财.æ�•æ�‰.作ç�¶.m‰Ê™x�37ä¼�木.纳畜.上æ¢�.入宅.作ç�¶.造畜椆栖.å«�娶.安葬.作æ¢�.造船.安门.æ²�æµ´.ç�†å�‘.扫èˆ�.,‰Ê™w'C诸事ä¸�宜.解除.å��垣.余事勿å�–.�‰Ê™va�_造桥.安门.ç�†å�‘.造庙.æ ½ç§�.作ç�¶.祭祀.祈ç¦�.求嗣.斋醮.开光.入学.订盟.冠笄.ä¼�木.修造.动土.起基.放水.交易.开池.3‰Ê™u'Q诸事ä¸�宜.治病.破屋.å��垣.余事勿å�–.R‰ÉÔO)� 开市.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.修造.动土.移徙.入宅.�"‰ÉÔN)‚+开市.å«�娶.求嗣.斋醮.塑绘.订盟.纳采.出ç�«.拆å�¸.修造.动土.造桥.安机械.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.+‰ÉÔM'A诸事ä¸�宜.平治é�“æ¶‚.余事勿å�–.N‰ÉÔL)�å«�娶.祈ç¦�.开市.立券.开光.解除.安机械.上æ¢�.å�¯æ”’.安葬.J‰ÉÔK)}开市.安葬.å«�娶.出行.求医.治病.祭祀.祈ç¦�.上æ¢�.纳畜.=‰ÉÔJQ;入宅.动土.破土.余事勿å�–.教牛马.余事勿å�–.5‰ÉÔI)S入宅.安葬.出行.æ²�æµ´.ç�†å�‘.补垣.塞穴.J‰ÉÔH)}å«�娶.作ç�¶.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.<‰ÉÔG)a开市.破土.祭祀.æ²�æµ´.安床.纳财.畋猎.æ�•æ�‰.u‰ÉÔF �m塑绘.斋醮.出行.拆å�¸.解除.修造.移徙.造船.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.ä¿®å�Ÿ.立碑.谢土.� ‰ÉÔES�W开光.æ ½ç§�.治病.安门.作ç�¶.祭祀.祈ç¦�.斋醮.出行.冠笄.安机械.移徙.入宅.安香.安床.除æœ�.æˆ�æœ�.移柩.å�¯æ”’. DUƒ Ÿ ¯ ~ [ ö ž  Ÿ ú K¥ï“ §ø7ß%ÐGƒD:‰ÉÔD'_诸事ä¸�宜.祭祀.求医.破屋.å��垣.余事勿å�–.�>‰ÉÔCE‚G出行.安葬.ä¿®å�Ÿ.开市.祭祀.塑绘.开光.è£�è¡£.冠笄.å«�娶.纳采.拆å�¸.修造.动土.竖柱.上æ¢�.安床.移徙.入宅.安香.结网.æ�•æ�‰.畋猎.ä¼�木.进人å�£.放水.�‰ÉÔBE�Q掘井.ä¼�木.斋醮.作ç�¶.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.安床.入宅.出ç�«.安葬.谢土.èµ´ä»».P‰ÉÔAaQ入宅.修造.动土.破土.安门.上æ¢�.祭祀.入殓.移柩.余事勿å�–.�c‰ÉÔ@Sƒå«�娶.祈ç¦�.出ç�«.移徙.入宅.纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床.æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.�K‰ÉÔ?S‚S斋醮.作æ¢�.掘井.行丧.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.安香.出ç�«.出行.会亲å�‹.ç»�络.求医.治病.解除.拆å�¸.起基.修造.动土.定磉.扫èˆ�.æ ½ç§�.牧养.造畜椆栖.S‰ÉÔ>aW入宅.动土.破土.å«�娶.作ç�¶.造船.å�ˆå¸�.è£�è¡£.教牛马.余事勿å�–.�;‰ÉÔ=a‚%å«�娶.祈ç¦�.开光.掘井.安葬.行丧.纳采.订盟.祭祀.æ²�æµ´.冠笄.å�ˆå¸�.è£�è¡£.修造.动土.拆å�¸.移徙.入宅.安门.开仓.ç­‘å ¤.作厕.æ ½ç§�.纳畜.补垣.塞穴.�)‰ÉÔ<E‚移徙.开市.入宅.安葬.祈ç¦�.斋醮.纳采.订盟.解除.架马.开柱眼.修造.动土.起基.上æ¢�.归岫.造屋.å�ˆè„Š.掘井.除æœ�.æˆ�æœ�.破土.æ ½ç§�.X‰ÉÔ;E}开市.斋醮.破土.安葬.祭祀.æ²�æµ´.作ç�¶.纳财.æ�•æ�‰.畋猎.安床.扫èˆ�.‚‰ÉÔ:Sƒ=å«�娶.动土.安床.造桥.掘井.纳采.订盟.移徙.入宅.出行.安机械.会亲å�‹.祭祀.祈ç¦�.斋醮.开光.安香.出ç�«.解除.求医.é’ˆç�¸.治病.造屋.起基.修造.安门.造船.纳畜.牧养.移柩.入殓.å�¯æ”’.谢土.ä¿®å�Ÿ.立碑.�‰ÉÔ9a�5安门.动土.破土.行丧.安葬.æˆ�æœ�.冠笄.纳财.掘井.开池.出ç�«.安床.交易.立券.畋猎.结网.ç�†å�‘.放水.W‰ÉÔ8a_å«�娶.移徙.入宅.探病.出行.造屋.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�0‰ÉÔ7S‚出行.掘井.破土.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.求嗣.斋醮.安香.出ç�«.修造.起基.造屋.å�ˆè„Š.安门.安碓磑.动土.上æ¢�.移徙.入宅.� ‰ÉÔ6�5�å«�娶.开市.出ç�«.æ ½ç§�.破土.动土.入宅.移徙.安香.分居.掘井.作ç�¶.开光.解除.拆å�¸.修造.动土.安床.纳畜.安葬.å�¯æ”’.入殓.�)‰ÉÔ5 ‚Uå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.解除.出ç�«.出行.拆å�¸.进人å�£.入宅.移徙.安床.æ ½ç§�.动土.修造.纳畜.入殓.安葬.立碑.除æœ�.æˆ�æœ�.�‰ÉÔ4}�Qæ ½ç§�.破土.置产.祭祀.å«�娶.动土.作ç�¶.祈ç¦�.开市.交易.立券.挂匾.纳财.开光.出行.入宅.移徙.安床.纳畜.入殓.移柩.安葬.‰ÉÔ3''诸事ä¸�宜.诸事ä¸�宜.�V‰ÉÔ2ƒ!开市.祭祀.祈ç¦�.斋醮.塑绘.开光.订盟.纳采.è£�è¡£.冠笄.å«�娶.拆å�¸.入宅.安香.入殓.移柩.ç�†å�‘.安葬.ä¿®å�Ÿ.谢土.èµ´ä»».移徙.æ²�æµ´.治病.破土.å�¯æ”’.整手足甲.入学.作æ¢�.S‰ÉÔ1Eså«�娶.动土.安葬.作ç�¶.祭祀.æ²�æµ´.出行.冠笄.进人å�£.余事勿å�–.`‰ÉÓj)�'入宅.作ç�¶.祈ç¦�.斋醮.出行.订盟.纳采.入殓.移柩.破土.安葬.立碑.结网.‰ÉÓi''诸事ä¸�宜.诸事ä¸�宜.,‰ÉÓh'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.�j‰ÉÓgEƒå«�娶.入宅.治病.èµ´ä»».祭祀.祈ç¦�.订盟.纳采.è£�è¡£.å�ˆå¸�.冠笄.安机械.安床.造畜椆栖.入殓.移柩.å�¯æ”’.安葬.谢土.除æœ�.æˆ�æœ�.会亲å�‹.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.纳畜.ç­‘å ¤.�^‰ÉÓf)ƒ#造屋.治病.祭祀.解除.祈ç¦�.开光.塑绘.斋醮.订盟.纳采.è£�è¡£.冠笄.拆å�¸.修造.动土.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安床.èµ´ä»».出行.移徙.竖柱.上æ¢�.ä¼�木.æ ½ç§�.破土.安葬.纳畜.:‰ÉÓe'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.� ‰ÉÓdE�e开市.交易.破土.作ç�¶.祭祀.塑绘.开光.订盟.纳采.å«�娶.安床.进人å�£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.立碑.�%‰ÉÓc)‚1作ç�¶.治病.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.入殓.移柩.安葬.谢土.èµ´ä»».进人å�£.会亲å�‹. L±Ö«n* ì ¤ ? ¹ M  Œ í X %Âò$UJjõ#®}�RL‚‰ÉÓbEƒK作ç�¶.治病.ä¼�木.作æ¢�.祭祀.祈ç¦�.订盟.纳采.è£�è¡£.拆å�¸.修造.动土.起基.安床.移徙.入宅.安香.除æœ�.æˆ�æœ�.入殓.移柩.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.竖柱.上æ¢�.ç»�络.开市.交易.立券.纳财.开仓.F‰ÉÓaEYå«�娶.入宅.安门.移徙.ç�†å�‘.会亲å�‹.补垣.塞穴.结网.�Z‰ÉÓ`E‚入宅.作ç�¶.安床.开仓.祭祀.会亲å�‹.å«�娶.æ²�æµ´.修造.动土.祈ç¦�.开光.塑绘.出行.订盟.纳采.è£�è¡£.入殓.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.èµ´ä»».竖柱.上æ¢�.纳财.扫èˆ�.æ ½ç§�.纳畜.ä¼�木.,‰ÉÓ_'C诸事ä¸�宜.祭祀.æ²�æµ´.余事勿å�–.p‰ÉÓ^S�开光.掘井.安葬.谢土.ä¿®å�Ÿ.å«�娶.冠笄.安床.纳采.会亲å�‹.塞穴.æ�•æ�‰.置产.造畜椆栖.�L‰ÉÓ]S‚U移徙.入宅.安门.作æ¢�.安葬.祭祀.祈ç¦�.求嗣.斋醮.æ²�æµ´.冠笄.出行.ç�†å�‘.拆å�¸.解除.起基.动土.定磉.安碓磑.开池.掘井.扫èˆ�.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.立碑.谢土.p‰ÉÓ\S�安床.安门.破土.ä¿®å�Ÿ.安葬.æ�•æ�‰.畋猎.会亲å�‹.解除.入殓.除æœ�.æˆ�æœ�.移柩.余事勿å�–.�Z‰ÉÓ[S‚qå«�娶.开市.入宅.出ç�«.移徙.纳采.订盟.祭祀.祈ç¦�.求嗣.斋醮.开光.会亲å�‹.解除.入学.纳财.交易.立券.ç»�络.起基.动土.定磉.开池.æ ½ç§�.纳畜.牧养.破土.入殓.立碑.安葬.�L‰ÉÓZE‚c造屋.造船.动土.破土.å«�娶.纳采.订盟.祭祀.冠笄.è£�è¡£.ä¼�木.作æ¢�.架马.定磉.开柱眼.作ç�¶.移徙.安床.畋猎.结网.开池.作厕.除æœ�.æˆ�æœ�.å�¯æ”’.入殓.移柩.安葬.4‰ÉÓY)Qå«�娶.安葬.破屋.å��垣.祭祀.余事勿å�–.�I‰ÉÓXE‚]开市.造庙.动土.破土.å«�娶.订盟.纳采.祭祀.祈ç¦�.塑绘.开光.移徙.安床.ä¼�木.作æ¢�.æ�•æ�‰.畋猎.结网.求医.治病.解除.安葬.除æœ�.æˆ�æœ�.移柩.入殓.立碑.谢土.�H‰ÉÓWS‚Må«�娶.安葬.掘井.置产.造船.订盟.纳采.纳财.开市.立券.祭祀.祈ç¦�.移徙.入宅.出行.造屋.起基.修造.动土.竖柱.上æ¢�.安门.安香.出ç�«.教牛马.会亲å�‹.破土.�J‰ÉÓVE‚_开仓.造屋.造桥.祭祀.纳采.移徙.纳财.开市.交易.立券.纳财.入宅.修造.动土.竖柱.起基.定磉.造庙.安香.出ç�«.修饰垣墙.平治é�“æ¶‚.会亲å�‹.出行.开池.作厕.^‰ÉÓUS{å«�娶.开市.祈ç¦�.斋醮.安葬.塑绘.会亲å�‹.安机械.塞穴.结网.è£�è¡£.ç»�络.�_‰ÉÓTa‚m开市.纳采.造庙.安床.开渠.安葬.å«�娶.造车器.出行.会亲å�‹.移徙.入宅.修造.动土.雕刻.开光.安香.出ç�«.ç�†å�‘.会亲å�‹.造屋.å�ˆè„Š.起基.归岫.安门.拆å�¸.扫èˆ�.æ ½ç§�.造畜椆栖.I‰ÉÓSSQ开市.动土.破土.行丧.安葬.祭祀.æ²�æµ´.出行.余事勿å�–.�‰ÉÓRg�G动土.ä¼�木.作æ¢�.行丧.安葬.开生å�Ÿ.祭祀.出行.è£�è¡£.冠笄.会亲å�‹.造畜椆栖.å«�娶.竖柱.上æ¢�.移徙.纳财.纳畜.�‰ÉÓQg�[å«�娶.开光.会亲å�‹.掘井.安门.æ ½ç§�.祭祀.解除.è£�è¡£.ç�†å�‘.安床.作ç�¶.造畜椆栖.放水.ç­‘å ¤.补垣.塞穴.整手足甲.扫èˆ�.� ‰ÉÓP}�'å«�娶.作ç�¶.ä¿®å�Ÿ.安门.入宅.立碑.安葬.安床.祭祀.祈ç¦�.求嗣.开光.开市.出行.解除.动土.起基.置产.æ ½ç§�.,‰ÉÓO'C诸事ä¸�宜.祭祀.塞穴.余事勿å�–.g‰ÉÓN)�5斋醮.安门.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.B‰ÉÓM)m祈ç¦�.安葬.订盟.纳采.会亲å�‹.安机械.纳财.牧养.:‰ÉÓ'_余事勿å�–.祭祀.解除.破屋.å��垣.余事勿å�–.`‰ÉÓ)�'开市.èµ´ä»».å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.C‰ÉÓ)o移徙.入宅.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.9‰ÉÓ']余事勿å�–.祭祀.结网.造畜椆栖.余事勿å�–.?‰ÉÓ7Y开市.动土.破土.开光.é’ˆç�¸.会亲å�‹.å�¯æ”’.安葬.8‰ÉÓ)Yå«�娶.入宅.æ²�æµ´.ç�†å�‘.入学.习艺.进人å�£.&‰ÉÓ)5行丧.安葬.作ç�¶.造畜椆栖.?‰ÉÓ)g动土.上æ¢�.å«�娶.祭祀.安机械.入殓.破土.安葬.�‰ÉÒE�m作ç�¶.入殓.安葬.安床.祭祀.祈ç¦�.斋醮.æ²�æµ´.竖柱.订盟.纳采.å«�娶.拆å�¸.入宅.移柩.å�¯æ”’.谢土.èµ´ä»».出ç�«.纳畜.J‰ÉÒ~Eaæ ½ç§�.动土.安葬.开市.祭祀.作ç�¶.入殓.除æœ�.æˆ�æœ�.畋猎. cÁún c é i 0 � 9 ú × { Å ë5Æ4ß[ÉþYÙx"ñbc�y‰ÉÒ}Eƒ=开仓.冠笄.ä¼�木.作æ¢�.祭祀.塑绘.开光.祈ç¦�.斋醮.出行.订盟.纳采.è£�è¡£.å«�娶.拆å�¸.修造.安床.入宅.安香.入殓.å�¯æ”’.安葬.谢土.èµ´ä»».会亲å�‹.进人å�£.出行.移徙.上æ¢�.ç»�络.开市.交易.立券.纳财.� ‰ÉÒ|E�]出行.祈ç¦�.安葬.作ç�¶.会亲å�‹.å«�娶.订盟.纳采.纳婿.拆å�¸.修造.动土.起基.竖柱.上æ¢�.安床.会亲å�‹.纳财.,‰ÉÒ{'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�]‰ÉÒzS‚w开光.å«�娶.掘井.ä¼�木.作æ¢�.祭祀.祈ç¦�.求嗣.斋醮.造庙.出ç�«.安机械.会亲å�‹.开市.交易.立券.纳财.习艺.ç»�络.求医.治病.开池.作厕.畋猎.结网.æ ½ç§�.牧养.安葬.破土.å�¯æ”’.n‰ÉÒyS�å«�娶.祭祀.入宅.造屋.移徙.æ�•æ�‰.结网.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.立碑.\‰ÉÒxE�å«�娶.开市.安床.掘井.祭祀.造畜椆栖.修饰垣墙.平治é�“æ¶‚.余事勿å�–.{‰ÉÒwS�3移徙.入宅.出行.祈ç¦�.å«�娶.æ²�æµ´.ç�†å�‘.冠笄.安床.开市.立券.会亲å�‹.交易.纳财.结网.教牛马.�‰ÉÒvE‚ å«�娶.动土.破土.ä¿®å�Ÿ.出行.造车器.造畜椆栖.解除.冠笄.è£�è¡£.作æ¢�.雕刻.会亲å�‹.移徙.入宅.安机械.造畜椆栖.开市.扫èˆ�.�E‰ÉÒuS‚G造庙.造船.动土.破土.安葬.纳采.订盟.å«�娶.祭祀.祈ç¦�.求嗣.置产.求医.治病.开市.交易.立券.会亲å�‹.移徙.竖柱.上æ¢�.造屋.å�ˆè„Š.安门.放水.æ�•æ�‰.纳畜.� ‰ÉÒtg�A开光.å«�娶.会亲å�‹.æ ½ç§�.é’ˆç�¸.安葬.冠笄.祭祀.æ²�æµ´.作ç�¶.ç�†å�‘.整手足甲.扫èˆ�.补垣.塞穴.入殓.破土.å�¯æ”’.‰ÉÒsg�'开市.开仓.出货财.安床.安门.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.求医.治病.出ç�«.移徙.入宅.P‰ÉÒrEm动土.破土.开市.安葬.祭祀.作ç�¶.纳财.æ�•æ�‰.畋猎.余事勿å�–.� ‰ÉÒqY�O上æ¢�.开光.造屋.架马.å�ˆå¯¿æœ¨.造车器.å«�娶.订盟.纳采.会亲å�‹.祭祀.出行.开市.立券.移徙.入宅.破土.安葬.j‰ÉÒpS�å«�娶.开市.入宅.祈ç¦�.安葬.订盟.纳采.会亲å�‹.交易.立券.纳财.æ ½ç§�.纳畜.牧养.�0‰ÉÒo ‚cå«�娶.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.动土.上æ¢�.开光.进人å�£.开市.交易.立券.挂匾.安床.入宅.移徙.æ ½ç§�.ä¼�木.入殓.破土.除æœ�.æˆ�æœ�.,‰ÉÒn'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�#‰ÉÒm��5å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产.开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩.�0‰ÉÒl ‚cå«�娶.祭祀.祈ç¦�.求嗣.æ²�æµ´.出ç�«.出行.拆å�¸.修造.动土.进人å�£.开市.交易.立券.入宅.移徙.安床.æ ½ç§�.纳畜.入殓.安葬.å�¯æ”’.除æœ�.æˆ�æœ�.W‰ÉÒkE{å«�娶.移徙.入宅.开市.æ²�æµ´.入殓.移柩.除æœ�.æˆ�æœ�.破土.平治é�“æ¶‚.‰ÉÒj''诸事ä¸�宜.诸事ä¸�宜.:‰ÉÒi'_诸事ä¸�宜.祭祀.æ²�æµ´.èµ´ä»».出行.余事勿å�–._‰ÉÒ"oa动土.冠笄.移徙.入宅.开市.竖柱.上æ¢�.祭祀.出行.æˆ�æœ�.除æœ�.æ²�æµ´.入殓.� ‰ÉÒ!E�e安床.开光.开市.交易.祭祀.è£�è¡£.冠笄.å«�娶.安机械.拆å�¸.动土.起基.移徙.入宅.入殓.å�¯æ”’.安葬.造仓.ç»�络.4‰ÉÒ E5入殓.安葬.开市.交易.祭祀.诸事ä¸�宜.{‰ÉÒE�A移徙.入宅.作ç�¶.安葬.祭祀.è£�è¡£.冠笄.å«�娶.纳婿.会亲å�‹.除æœ�.æˆ�æœ�.移柩.æ�•æ�‰.进人å�£.入殓.u‰ÉÒ)�Q定磉.安葬.祭祀.èµ´ä»».动土.上æ¢�.开光.塑绘.冠笄.拆å�¸.起基.安床.开市.立券.èµ´ä»».ç»�络.�7‰ÉÒE‚9造桥.冠笄.造屋.掘井.祭祀.塑绘.开光.出行.解除.订盟.å«�娶.拆å�¸.起基.安床.入宅.开市.入殓.除æœ�.æˆ�æœ�.移柩.破土.谢土.挂匾.开柱眼.交易.I‰ÉÒE_移徙.入宅.出行.æ ½ç§�.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.�‰ÉÒE�W作ç�¶.祭祀.入宅.å«�娶.祭祀.冠笄.会亲å�‹.拆å�¸.起基.除æœ�.æˆ�æœ�.移柩.å�¯æ”’.安葬.æ²�æµ´.æ�•æ�‰.开光.塑绘.�A‰ÉÒ)‚i入宅.ä¼�木.祭祀.会亲å�‹.纳采.å«�娶.开光.塑绘.斋醮.安香.开市.立券.除æœ�.æˆ�æœ�.入殓.移柩.安葬.èµ´ä»».进人å�£.出行.è£�è¡£.修造.动土.上æ¢�.ç»�络.交易.:‰ÉÒ)]å«�娶.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚. "‡Ç w Ù I  ² [  ¶ n 4 õ � $ Ù P²~£;�ô:}.± ¢ ‡‰ÉÒ)�eå«�娶.安葬.祭祀.æ²�æµ´.解除.ç�†å�‘.冠笄.安机械.作ç�¶.造仓.开市.开池.作厕.补垣.塞穴.æ–­èš�.结网.�‰ÉÒE�m造庙.安门.行丧.安葬.出行.解除.纳采.冠笄.雕刻.修造.动土.起基.上æ¢�.å�ˆè„Š.安床.移徙.入宅.开市.æ ½ç§�.作厕.c‰ÉÒS�动土.作ç�¶.行丧.安葬.ä¿®å�Ÿ.祭祀.祈ç¦�.求嗣.出行.æ²�æµ´.交易.扫èˆ�.教牛马.�!‰ÉÒ)‚)开光.安床.祭祀.出行.解除.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.动土.移徙.入宅.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.移柩.破土.安葬.ä¿®å�Ÿ.x‰ÉÒa�å«�娶.开市.动土.掘井.开池.安葬.祭祀.普渡.解除.会亲å�‹.æ�•æ�‰.畋猎.å�¯æ”’.除æœ�.æˆ�æœ�.移柩.J‰ÉÒo7开光.动土.破土.开市.修造.入宅.安门.祭祀.å«�娶.æ�•æ�‰.�7‰ÉÒ=‚A行丧.安葬.å�ˆå¯¿æœ¨.开光.求嗣.雕刻.å«�娶.订盟.纳采.出ç�«.拆å�¸.修造.动土.起基.上æ¢�.放水.移徙.入宅.造仓.造船.开市.开池.纳畜.牧养.挂匾.�4‰ÉÒa‚å«�娶.造庙.造桥.造船.作ç�¶.安葬.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.修造.动土.上æ¢�.安门.起基.竖柱.上æ¢�.定磉.开池.移徙.入宅.立券.破土.%‰ÉÒ5'探病.余事勿å�–.余事勿å�–.m‰ÉÒo}祭祀.å«�娶.安床.开市.入宅.探病.上æ¢�.æ²�æµ´.æ�•æ�‰.入殓.除æœ�.æˆ�æœ�.破土.å�¯æ”’.安葬.�%‰ÉÒS‚纳采.订盟.架马.è¯�讼.开渠.å«�娶.造车器.安机械.祭祀.祈ç¦�.开光.安香.出ç�«.出行.开市.立券.修造.动土.移徙.入宅.破土.安葬.c‰ÉÒ aw斋醮.å«�娶.移徙.出行.上æ¢�.入宅.祭祀.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.\‰ÉÒ E�å«�娶.安葬.动土.造桥.出行.开市.交易.立券.安机械.出ç�«.上æ¢�.移徙.u‰ÉÒ a�é’ˆç�¸.ä¼�木.作æ¢�.造庙.行丧.安葬.å«�娶.订盟.纳采.祭祀.祈ç¦�.出行.修造.动土.移徙.入宅.�‰ÉÒ � �%å«�娶.会亲å�‹.进人å�£.出行.入宅.移徙.èµ´ä»».作ç�¶.祭祀.解除.æ²�æµ´.ç�†å�‘.整手足甲.入殓.移柩.破土.安葬.扫èˆ�.�‰ÉÒ S�m破土.置产.掘井.动土.安床.祭祀.祈ç¦�.求嗣.开光.出行.解除.上æ¢�.造屋.移徙.安门.纳财.牧养.纳畜.安葬.å�¯æ”’.入殓.�‰ÉÒa�_造屋.开光.ç�†å�‘.造船.掘井.作ç�¶.å«�娶.祭祀.祈ç¦�.求嗣.出行.出ç�«.拆å�¸.修造.移徙.动土.安床.入殓.破土.安葬.å�¯æ”’.�‰ÉÒ}�入宅.作æ¢�.安门.ä¼�木.修造.上æ¢�.入殓.造屋.å«�娶.祭祀.祈ç¦�.求嗣.出行.动土.安床.掘井.破土.å�¯æ”’.F‰ÉÒ)u动土.安葬.订盟.纳采.祭祀.祈ç¦�.安机械.作ç�¶.纳畜.g‰ÉÒ)�5开光.é’ˆç�¸.å«�娶.订盟.纳采.祭祀.祈ç¦�.求医.治病.动土.移徙.入宅.破土.安葬.`‰ÉÑ?)�'动土.破土.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.移徙.入宅.å�¯æ”’.安葬.:‰ÉÑ>'_诸事ä¸�宜.æ²�æµ´.治病.破屋.å��垣.余事勿å�–.5‰ÉÑ=)Så«�娶.入宅.æ�•æ�‰.结网.入殓.破土.安葬.C‰ÉÑ<)o开市.安葬.å«�娶.祭祀.祈ç¦�.斋醮.动土.移徙.入宅.M‰ÉÑ;Ciå«�娶.祈ç¦�.余事勿å�–.æ²�æµ´.修饰垣墙.平治é�“æ¶‚.余事勿å�–.N‰ÉÑ:)�开市.安葬.订盟.纳采.出行.会亲å�‹.修造.上æ¢�.移徙.入宅.R‰ÉÑ9)� å«�娶.开市.订盟.纳采.祭祀.祈ç¦�.修造.动土.上æ¢�.破土.安葬.J‰ÉÑ87o作ç�¶.动土.破土.å«�娶.出行.纳畜.祭祀.入殓.å�¯æ”’.安葬.C‰ÉÑ7)o动土.破土.å«�娶.祭祀.祈ç¦�.斋醮.作ç�¶.移徙.入宅.� ‰ÉÑ6 ‚祈ç¦�.出行.订盟.纳采.å«�娶.è£�è¡£.动土.安床.放水.开市.掘井.交易.立券.æ ½ç§�.开渠.除æœ�.æˆ�æœ�.移柩.破土.�‰ÉÑ5 ‚3塑绘.开光.解除.订盟.纳采.å«�娶.出ç�«.修造.动土.移徙.入宅.拆å�¸.起基.安门.分居.开市.交易.立券.纳财.纳畜.牧养.� ‰ÉÑ4 ‚祈ç¦�.求嗣.解除.订盟.纳采.动土.起基.放水.造仓.开市.纳畜.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.�7‰ÉÑ3S‚+动土.破土.订盟.安床.开池.祈ç¦�.斋醮.出行.冠笄.å«�娶.雕刻.开柱眼.入宅.造桥.开市.交易.立券.纳财.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.4‰ÉÑ2)Q行丧.安葬.破屋.å��垣.治病.余事勿å�–. "|™§ ‹ ö ¡ p ! é ‹ 4  ² O ¸ iúYÑ yµJÁGÇ8Ìý||‰ÉÑ1S�5å«�娶.纳采.订盟.开市.入宅.祭祀.æ�•æ�‰.畋猎.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.å�¯æ”’.�I‰ÉÑ0E‚]开市.立券.纳财.作ç�¶.纳采.订盟.å«�娶.祭祀.祈ç¦�.普渡.开光.安香.出ç�«.移徙.入宅.竖柱.修造.动土.竖柱.上æ¢�.起基.造屋.安门.造庙.造桥.破土.å�¯æ”’.安葬.g‰ÉÑ/E�å«�娶.安门.动土.安葬.出行.æ²�æµ´.订盟.纳采.è£�è¡£.竖柱.上æ¢�.移徙.纳畜.牧养.� ‰ÉÑ.S�O祈ç¦�.开市.动土.行丧.安葬.塑绘.冠笄.å«�娶.会亲å�‹.进人å�£.ç»�络.è£�è¡£.æ ½ç§�.纳畜.牧养.补垣.塞穴.æ�•æ�‰.{‰ÉÑ-S�3å«�娶.出行.入宅.开市.安门.祭祀.æ²�æµ´.ç�†å�‘.整手足甲.冠笄.解除.入殓.移柩.破土.å�¯æ”’.安葬.u‰ÉÑ,a�开市.动土.破土.安床.开仓.上æ¢�.å«�娶.冠笄.祭祀.æ²�æµ´.普渡.出行.纳财.扫èˆ�.纳畜.èµ´ä»».�‰ÉÑ+a�5动土.破土.掘井.开光.上æ¢�.è¯�讼.å«�娶.普渡.祭祀.祈ç¦�.补垣.塞穴.æ–­èš�.ç­‘å ¤.入殓.除æœ�.æˆ�æœ�.安葬.�O‰ÉÑ*S‚[出ç�«.入宅.造屋.安门.安葬.å«�娶.订盟.纳采.祭祀.斋醮.普渡.解除.出行.会亲å�‹.开市.纳财.修造.动土.竖柱.上æ¢�.开光.开仓.出货财.纳畜.牧养.开池.破土.å�¯æ”’.�‰ÉÑ)S�]掘井.出行.破土.行丧.安葬.å«�娶.订盟.纳采.作ç�¶.冠笄.è£�è¡£.会亲å�‹.纳畜.牧养.安机械.开市.立券.纳财.安床.�>‰ÉÑ(a‚+纳采.订盟.ç»�络.行丧.安葬.探病.å«�娶.祭祀.祈ç¦�.斋醮.普渡.移徙.入宅.动土.治病.开市.交易.立券.开光.修造.造车器.安香.安床.æ�•æ�‰.畋猎.结网.�‰ÉÑ'S�C动土.破土.å«�娶.掘井.安床.订盟.纳采.祭祀.祈ç¦�.安香.出ç�«.开市.立券.入宅.挂匾.造桥.å�¯æ”’.安葬.�‰ÉÑ&E�{ä¼�木.祭祀.纳畜.祭祀.å«�娶.开光.出行.ç�†å�‘.作æ¢�.出ç�«.拆å�¸.修造.开市.交易.立券.挂匾.动土.入宅.移徙.安床.æ ½ç§�.,‰ÉÑ%'C诸事ä¸�宜.破屋.å��垣.余事勿å�–.�‰ÉÑ$}�å«�娶.入宅.移徙.作ç�¶.开市.交易.安门.æ ½ç§�.祭祀.解除.æ²�æµ´.整手足甲.入殓.移柩.破土.å�¯æ”’.安葬.�‰ÉÑ#o�Wå«�娶.破土.置产.æ ½ç§�.安葬.ä¿®å�Ÿ.行丧.入宅.移徙.安床.开光.祈ç¦�.求嗣.进人å�£.开市.交易.立券.出ç�«.拆å�¸.修造.动土.j‰ÉÑ"�a开仓.出货财.置产.安葬.动土.破土.掘井.æ ½ç§�.å«�娶.祭祀.è£�è¡£.结网.冠笄.æ²�æµ´.J‰ÉÑ!7o祈ç¦�.动土.破土.å«�娶.出行.开市.安床.入殓.å�¯æ”’.安葬.C‰ÉÐ[)o开市.入宅.å«�娶.祭祀.祈ç¦�.斋醮.治病.破土.安葬.J‰ÉÐZ)}动土.安葬.å«�娶.纳采.出行.祭祀.祈ç¦�.解除.移徙.入宅.^‰ÉÐY'�%诸事ä¸�宜.补垣.塞穴.结网.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.余事勿å�–.J‰ÉÐX)}造庙.安葬.å«�娶.开市.立券.祭祀.祈ç¦�.动土.移徙.入宅..‰ÉÐW)E开市.破土.祭祀.作ç�¶.纳财.æ�•æ�‰.R‰ÉÐV�èµ´ä»».å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.Y‰ÉÐU)�祭祀.祈ç¦�.å«�娶.纳采.开市.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÉÐT'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.J‰ÉÐS7oå«�娶.移徙.入宅.纳采.祭祀.祈ç¦�.解除.动土.破土.安葬.,‰ÉÐR'C诸事ä¸�宜.æ²�æµ´.扫èˆ�.余事勿å�–.P‰ÉÐQ'� 余事勿å�–.祭祀.冠笄.å«�娶.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�‰ÉÐP ‚!塑绘.出行.冠笄.å«�娶.进人å�£.è£�è¡£.纳婿.造畜椆栖.交易.立券.牧养.开生å�Ÿ.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.‰ÉÐOS�;开市.斋醮.安床.出行.ç»�络.移徙.入宅.治病.会亲å�‹.祭祀.祈ç¦�.斋醮.安香.移徙.å«�娶.造屋.起基.�‰ÉÐNE�o动土.破土.安葬.治病.开市.纳财.祭祀.塑绘.安机械.冠笄.会亲å�‹.è£�è¡£.开仓.ç»�络.纳畜.造畜椆栖.教牛马.牧养.W‰ÉÐMa_移徙.开市.入宅.å«�娶.开光.安门.祭祀.塞穴.结网.畋猎.余事勿å�–.�‰ÉÐLa�O造屋.入宅.作ç�¶.入学.安葬.行丧.祭祀.塑绘.开光.求医.治病.å«�娶.会亲å�‹.放水.掘井.牧养.纳畜.开渠.安碓磑.b‰ÉÐKS�开市.入宅.安床.动土.安葬.祭祀.进人å�£.纳财.纳畜.牧养.æ�•æ�‰.余事勿å�–. !Ž(1 · Í j # Ÿ Ä f , ë ™ ;û–?Í~M¯ Ú<É÷£çu5UŽ�A‰ÉÐJK‚Gå«�娶.开市.æ ½ç§�.å�ˆå¯¿æœ¨.祭祀.祈ç¦�.斋醮.出行.纳采.订盟.安机械.出ç�«.拆å�¸.修造.动土.起基.移徙.入宅.造庙.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.谢土.�Z‰ÉÐIS‚q祈ç¦�.上æ¢�.开仓.掘井.牧养.纳采.订盟.å«�娶.移徙.入宅.出行.开市.交易.立券.纳财.会亲å�‹.安香.出ç�«.拆å�¸.造屋.起基.安床.作ç�¶.挂匾.安葬.破土.å�¯æ”’.立碑.入殓.移柩.;‰ÉÐH)_å«�娶.出行.求医.治病.破屋.å��垣.余事勿å�–.m‰ÉÐGo}出ç�«.å«�娶.入宅.作ç�¶.破土.上æ¢�.动土.æ²�æµ´.ç�†å�‘.æ�•æ�‰.入殓.移柩.破土.å�¯æ”’.安葬.�6‰ÉÐFS‚)å«�娶.安葬.行丧.破土.ä¿®å�Ÿ.订盟.纳采.祭祀.祈ç¦�.开光.安香.出ç�«.立券.安机械.移徙.入宅.竖柱.上æ¢�.会亲å�‹.安床.拆å�¸.挂匾.牧养.教牛马.O‰ÉÐEaO开市.动土.破土.å«�娶.修造.安葬.祭祀.修饰垣墙.平治é�“æ¶‚.�L‰ÉÐDa‚G斋醮.入宅.安门.安葬.破土.行丧.纳财.开市.交易.立券.出行.祭祀.祈ç¦�.求嗣.开光.解除.扫èˆ�.起基.竖柱.安床.移徙.开仓.出货财.补垣.塞穴.æ ½ç§�.纳畜.牧养.n‰ÉÐCS�å«�娶.出行.纳采.入宅.作ç�¶.祭祀.æ²�æµ´.塑绘.开光.入学.解除.扫èˆ�.治病.开池.牧养.�‰ÉÐBE�{安葬.行丧.ä¼�木.作æ¢�.å«�娶.祭祀.祈ç¦�.出ç�«.开光.求嗣.出行.拆å�¸.开市.交易.立券.挂匾.入宅.移徙.安床.æ ½ç§�.动土.,‰ÉÐA'C诸事ä¸�宜.祭祀.解除.余事勿å�–.�‰ÉÐ@E‚安葬.出行.祈ç¦�.æ ½ç§�.求嗣.å«�娶.纳采.å�ˆå¸�.è£�è¡£.冠笄.ä¼�木.作æ¢�.修造.动土.起基.竖柱.上æ¢�.安门.作ç�¶.ç­‘å ¤.造畜椆栖.�‰ÉÐ?E�{安葬.开市.交易.立券.å«�娶.开光.祭祀.祈ç¦�.求嗣.出行.解除.ä¼�木.入宅.移徙.安床.出ç�«.拆å�¸.修造.上æ¢�.æ ½ç§�.移柩.,‰ÉÐ>'C诸事ä¸�宜.祭祀.æ ½ç§�.余事勿å�–.J‰ÉÐ=)}å«�娶.开光.开光.求医.治病.动土.上æ¢�.入殓.破土.安葬.J‰ÉÏv)}开光.开市.å«�娶.订盟.纳采.祭祀.祈ç¦�.入殓.破土.安葬.‰ÉÏu''诸事ä¸�宜.诸事ä¸�宜.R‰ÉÏt)� 开市.安葬.订盟.纳采.出行.祭祀.祈ç¦�.修造.动土.移徙.入宅.`‰ÉÏs�5作ç�¶.å«�娶.订盟.纳采.出行.开市.祭祀.祈ç¦�.动土.移徙.入宅.破土.安葬.;‰ÉÏr)_行丧.安葬.å«�娶.祭祀.æ²�æµ´.扫èˆ�.修饰垣墙.Y‰ÉÏq)�动土.破土.å«�娶.纳采.出行.求医.治病.开市.移徙.入宅.å�¯æ”’.安葬.M‰ÉÏp7u移徙.入宅.安葬.订盟.纳采.出行.祈ç¦�.斋醮.安床.会亲å�‹.<‰ÉÏo7S上æ¢�.动土.破土.祭祀.入殓.移柩.å�¯æ”’.安葬.5‰ÉÏn)Så«�娶.安葬.è£�è¡£.作ç�¶.移徙.入宅.纳畜.Y‰ÉÏm)�开市.安门.å«�娶.纳采.祭祀.祈ç¦�.求医.治病.出行.动土.移徙.入宅.@‰ÉÏl'k诸事ä¸�宜.祭祀.æ�•æ�‰.å�–渔.修饰垣墙.余事勿å�–.�‰ÉÏk ‚#订盟.纳采.会亲å�‹.进人å�£.雕刻.拆å�¸.修造.动土.起基.开市.æ ½ç§�.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.‰ÉÏjE�I开市.安门.掘井.作ç�¶.å«�娶.出行.安机械.祭祀.塑绘.开光.治病.ç»�络.安床.结网.塞穴.破土.入殓.B‰ÉÏi)må«�娶.入宅.破屋.å��垣.求医.治病.畋猎.余事勿å�–.^‰ÉÏhS{开市.交易.å«�娶.安葬.行丧.祭祀.æ²�æµ´.æ�•æ�‰.结网.畋猎.å�–渔.余事勿å�–.�d‰ÉÏgEƒ开市.ä¼�木.作æ¢�.作ç�¶.安机械.移徙.入宅.出行.祭祀.祈ç¦�.斋醮.纳采.订盟.安香.出ç�«.解除.会亲å�‹.修造.动土.拆å�¸.起基.定磉.移徙.入宅.造屋.安床.修造.破土.安葬.入殓.立碑.u‰ÉÏfK�/斋醮.出行.治病.å�ˆå¯¿æœ¨.祭祀.æ²�æµ´.ç�†å�‘.å«�娶.作ç�¶.整手足甲.扫èˆ�.修饰垣墙.平治é�“æ¶‚.�q‰ÉÏeYƒ安床.出货财.作ç�¶.动土.破土.开光.求嗣.出行.冠笄.å«�娶.ä¼�木.架马.开柱眼.修造.移徙.入宅.开市.交易.立券.出行.安香.出ç�«.挂匾.起基.修造.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.除æœ�.æˆ�æœ�.移柩.安葬.�R‰ÉÏdE‚o行丧.ä¼�木.作æ¢�.作ç�¶.å«�娶.订盟.纳采.冠笄.会亲å�‹.安机械.造车器.祭祀.出行.纳财.入宅.安香.出ç�«.入学.塑绘.开光.拆å�¸.起基.修造.动土.牧养.æ ½ç§�.安门.作厕. $g}Z ² k + B í ê Ç Ž ñ ¨ ªL¯`×yHã™7�ß Y¿;ôT¨g<‰ÉÏcS7斋醮.开渠.上æ¢�.动土.破土.祭祀.交易.纳财.�&‰ÉÏbS‚ 祈ç¦�.开光.掘井.开市.安葬.å«�娶.冠笄.修造.动土.作ç�¶.移徙.入宅.补垣.塞穴.纳畜.牧养.架马.修造.动土.起基.定磉.开池.造船.�‰ÉÏaS�qå�ˆå¸�.上æ¢�.ç»�络.安葬.入殓.祭祀.祈ç¦�.求嗣.斋醮.安香.解除.移徙.入宅.会亲å�‹.求医.治病.动土.破土.开生å�Ÿ.å�ˆå¯¿æœ¨.B‰ÉÏ`SC开市.安葬.破土.ä¿®å�Ÿ.掘井.祭祀.作ç�¶.余事勿å�–.‰ÉÏ_a�-斋醮.祭祀.移徙.入宅.上æ¢�.å«�娶.纳采.冠笄.求医.治病.开市.立券.修造.动土.安机械.破土.安葬.�‰ÉÏ^S�e作ç�¶.ç�†å�‘.造桥.行丧.安葬.å«�娶.安机械.交易.出行.祭祀.祈ç¦�.求嗣.斋醮.塑绘.开光.å�ˆå¸�.è£�è¡£.放水.开池.掘井.B‰ÉÏ]7_入宅.å«�娶.移徙.祭祀.æ²�æµ´.破屋.å��垣.余事勿å�–.:‰ÉÏ\'_诸事ä¸�宜.祭祀.解除.破屋.å��垣.余事勿å�–.�*‰ÉÏ[��Cå«�娶.上æ¢�.修造.拆å�¸.架马.入宅.ä¼�木.动土.出ç�«.开柱眼.祭祀.开光.出行.解除.塑绘.è£�è¡£.入殓.移柩.破土.å�¯æ”’.安葬.除æœ�.æˆ�æœ�.�"‰ÉÏZ ‚Gå«�娶.祭祀.祈ç¦�.求嗣.开光.出行.出ç�«.拆å�¸.动土.上æ¢�.进人å�£.入宅.移徙.安床.安门.开市.交易.立券.挂匾.æ ½ç§�.破土.安葬.]‰ÉÏY'�#诸事ä¸�宜.æ²�æµ´.平治é�“æ¶‚.扫èˆ�.入殓.移柩.破土.å�¯æ”’.安葬.余事勿å�–.E‰ÉÏ)s开市.安葬.订盟.纳采.会亲å�‹.安床.作ç�¶.造畜椆栖.`‰ÉÏ)�'移徙.入宅.å«�娶.订盟.纳采.出行.祭祀.祈ç¦�.斋醮.动土.上æ¢�.破土.安葬.,‰ÉÏ'C诸事ä¸�宜.塞穴.结网.余事勿å�–.Y‰ÉÏ)�èµ´ä»».æ�•æ�‰.å«�娶.è£�è¡£.祭祀.出行.安床.作ç�¶.移徙.入宅.破土.安葬.C‰ÉÏ)oå«�娶.安葬.订盟.纳采.祭祀.动土.破土.交易.立券.<‰ÉÏ7S动土.破土.安葬.å«�娶.纳采.出行.移徙.入宅.J‰ÉÏ )}å«�娶.安葬.纳采.祭祀.祈ç¦�.开市.求医.治病.动土.纳畜.`‰ÉÏ )�'祈ç¦�.斋醮.å«�娶.纳采.祭祀.祈ç¦�.出行.动土.上æ¢�.移徙.入宅.破土.安葬.3‰ÉÏ 'Q诸事ä¸�宜.祭祀.破屋.å��垣.余事勿å�–.Y‰ÉÏ )�开市.开光.å«�娶.纳采.求医.治病.修造.动土.移徙.入宅.破土.安葬.Y‰ÉÏ �'安门.å«�娶.纳采.出行.祭祀.祈ç¦�.开市.动土.移徙.入宅.破土.安葬.�‰ÉÏ‚ 7会亲å�‹.进人å�£.修造.动土.起基.移徙.开市.纳畜.入殓.除æœ�.æˆ�æœ�.移柩.破土.安葬.ä¿®å�Ÿ.立碑.会亲å�‹.开光.出行.å«�娶.D‰ÉÏ's诸事ä¸�宜.进人å�£.牧养.置产.塞穴.结网.余事勿å�–.�‰ÉÏ ‚1开光.出行.纳采.å«�娶.ä¼�木.架马.出ç�«.拆å�¸.移徙.入宅.造庙.造桥.造船.造畜椆栖.开市.入殓.除æœ�.æˆ�æœ�.移柩.安葬.4‰ÉÏ)Q破土.安葬.塞穴.æ–­èš�.结网.余事勿å�–.‰ÉÏ''余事勿å�–.余事勿å�–.�}‰ÉÏSƒ7开市.入宅.探病.出ç�«.造屋.å«�娶.祭祀.祈ç¦�.求嗣.斋醮.订盟.纳采.解除.出行.动土.破土.习艺.é’ˆç�¸.ç�†å�‘.会亲å�‹.起基.修造.动土.竖柱.定磉.安床.拆å�¸.纳畜.牧养.放水.破土.除æœ�.æˆ�æœ�.ä¿®å�Ÿ.立碑.P‰ÉÏaQ开市.动土.祭祀.斋醮.安葬.探病.æ ½ç§�.æ�•æ�‰.畋猎.余事勿å�–.�c‰ÉÏEƒå«�娶.出ç�«.移徙.入宅.开市.交易.立券.安机械.会亲å�‹.开光.求医.治病.造屋.起基.修造.动土.定磉.竖柱.上æ¢�.安门.作ç�¶.放水.作厕.开池.æ ½ç§�.牧养.造畜椆栖.破土.安葬.立碑.;‰ÉÏEC斋醮.开市.å«�娶.作ç�¶.æ²�æµ´.扫èˆ�.余事勿å�–.B‰ÉÎ)m行丧.安葬.祭祀.æ²�æµ´.解除.破屋.å��垣.余事勿å�–.�"‰ÉÎ~E‚移徙.入宅.造屋.架马.å«�娶.纳采.订盟.斋醮.开光.祭祀.祈ç¦�.求医.治病.会亲å�‹.动土.解除.æ�•æ�‰.纳畜.牧养.入殓.破土.安葬.�:‰ÉÎ}E‚?动土.破土.å«�娶.å«�娶.祭祀.祈ç¦�.斋醮.求嗣.安机械.纳畜.移徙.入宅.安机械.塑绘.开光.起基.竖柱.上æ¢�.作ç�¶.安门.安香.出ç�«.造屋.å�¯æ”’.安葬.^‰ÉÎ|S{祈ç¦�.å«�娶.入宅.安床.作ç�¶.祭祀.æ²�æµ´.移徙.破土.安葬.扫èˆ�.平治é�“æ¶‚.~‰ÉÎ{S�9开市.作ç�¶.动土.行丧.安葬.å«�娶.纳采.订盟.会亲å�‹.安机械.结网.冠笄.祭祀.求嗣.进人å�£.ç»�络. %«�Ý' õ ‘ B � T á v  � Í y³£€ôµ t¯d+Ü�NÔ:¹k(«x‰ÉÎzS�-开市.出行.安床.作ç�¶.安葬.å«�娶.纳采.订盟.祭祀.祈ç¦�.治病.造车器.修造.动土.移徙.入宅.>‰ÉÎy)eå«�娶.安葬.祭祀.解除.æ–­èš�.会亲å�‹.余事勿å�–.I‰ÉÎx'}诸事ä¸�宜.出行.修饰垣墙.造畜椆栖.教牛马.余事勿å�–.|‰ÉÎw7�Qè¯�讼.开光.开市.å«�娶.出行.å�ˆå¸�.冠笄.安床.除æœ�.æˆ�æœ�.作ç�¶.交易.立券.入殓.移柩.破土.安葬.�‰ÉÎva�W祈ç¦�.入殓.祭祀.作ç�¶.安葬.探病.å«�娶.开光.出行.出ç�«.拆å�¸.进人å�£.开市.立券.交易.挂匾.入宅.移徙.安床.æ ½ç§�.,‰ÉÎu'C诸事ä¸�宜.解除.å��垣.余事勿å�–.‰ÉÎ.' 诸事ä¸�宜..‰ÉÎ-77å«�娶.入宅.安葬.æ²�æµ´.结网.å�–渔.:‰ÉÎ,'_诸事ä¸�宜.祭祀.求医.治病.解除.余事勿å�–.J‰ÉÎ+7o开市.动土.破土.å«�娶.纳采.祭祀.祈ç¦�.出行.移徙.求医.J‰ÉÎ*7oå«�娶.移徙.入宅.祭祀.斋醮.开市.动土.入殓.破土.安葬.4‰ÉÎ))Qå«�娶.安葬.祭祀.作ç�¶.掘井.平治é�“æ¶‚.F‰ÉÎ(7gå«�娶.动土.破土.祭祀.会亲å�‹.开市.安床.å�¯æ”’.安葬.Q‰ÉÎ'7}å«�娶.开市.安葬.纳采.开光.求医.治病.动土.上æ¢�.移徙.入宅.j‰ÉÎ&S�掘井.动土.破土.安葬.开光.祭祀.进人å�£.å«�娶.安床.解除.冠笄.出行.è£�è¡£.扫èˆ�.�‰ÉÎ%E�k掘井.安门.å«�娶.纳采.祭祀.祈ç¦�.è£�è¡£.å�ˆå¸�.安床.入殓.除æœ�.æˆ�æœ�.移柩.破土.å�¯æ”’.安葬.谢土.立碑.造畜椆栖.�%‰ÉÎ$E‚入殓.安葬.入宅.安床.订盟.纳采.å«�娶.进人å�£.会亲å�‹.交易.立券.动土.除æœ�.谢土.移柩.破土.å�¯æ”’.èµ´ä»».出行.开市.纳财.æ ½ç§�.:‰ÉÎ#Q5造庙.å«�娶.安床.余事勿å�–.祭祀.余事勿å�–.�‰ÉÎ"E�W出ç�«.入宅.安葬.ä¼�木.祭祀.塑绘.开光.订盟.纳采.冠笄.è£�è¡£.安机械.拆å�¸.修造.动土.安床.ç»�络.开市.‰ÉÎ!''诸事ä¸�宜.诸事ä¸�宜.f‰ÉÎ S� å«�娶.开市.交易.入宅.安葬.祭祀.æ²�æµ´.破屋.å��垣.求医.治病.解除.余事勿å�–.�‰ÉÎE‚ 开市.动土.掘井.开池.祭祀.祈ç¦�.开光.求嗣.斋醮.纳采.订盟.求医.治病.起基.定磉.造船.å�–渔.解除.安葬.å�¯æ”’.谢土.入殓.�@‰ÉÎK‚E入宅.动土.开仓.出货财.造车器.祭祀.祈ç¦�.求嗣.斋醮.开市.交易.安机械.雕刻.开光.造屋.å�ˆè„Š.起基.定磉.安门.纳畜.安葬.开生å�Ÿ.立碑.谢土.斋醮.O‰ÉÎS]å«�娶.安葬.动土.安床.治病.祭祀.作ç�¶.平治é�“æ¶‚.余事勿å�–.�:‰ÉÎa‚#祈ç¦�.开市.修造.动土.破土.谢土.求嗣.出行.解除.订盟.纳采.å«�娶.会亲å�‹.进人å�£.安床.开市.交易.纳畜.牧养.入殓.除æœ�.æˆ�æœ�.移柩.安葬.å�¯æ”’.~‰ÉÎa�+开市.å«�娶.移徙.入宅.掘井.安葬.æ²�æµ´.斋醮.解除.求医.治病.会亲å�‹.造畜椆栖.æ ½ç§�.ç�†å�‘.扫èˆ�.a‰ÉÎoe动土.破土.行丧.开光.作æ¢�.安葬.探病.祭祀.解除.教牛马.出行.余事勿å�–.f‰ÉÎa}开光.å«�娶.掘井.安葬.安门.探病.祭祀.祈ç¦�.求嗣.斋醮.冠笄.作ç�¶.纳财.交易.n‰ÉÎS�祈ç¦�.动土.破土.安葬.入殓.纳采.å«�娶.出行.开市.立券.纳畜.牧养.出ç�«.移徙.入宅.4‰ÉÎ)Qå«�娶.安葬.祭祀.æ�•æ�‰.解除.余事勿å�–.�/‰ÉÎ7‚7出ç�«.å«�娶.开市.祭祀.祈ç¦�.求嗣.斋醮.纳采.订盟.开光.竖柱.上æ¢�.开仓.出货财.造屋.起基.定磉.安门.诸事ä¸�宜.破土.入殓.å�¯æ”’.谢土.J‰ÉÎSS祭祀.å«�娶.入宅.作ç�¶.安葬.æ²�æµ´.æ�•æ�‰.畋猎.结网.å�–渔._‰ÉÎE� 祈ç¦�.斋醮.开市.安葬.祭祀.æ²�æµ´.解除.求医.治病.破屋.å��垣.余事勿å�–.-‰ÉÎ'E诸事ä¸�宜.破屋.å��垣.求医.治病.�0‰ÉÎE‚+安床.开市.立券.作ç�¶.祭祀.祈ç¦�.斋醮.订盟.纳采.è£�è¡£.å�ˆå¸�.拆å�¸.修造.动土.上æ¢�.起基.移柩.安葬.谢土.æ²�æµ´.扫èˆ�.开柱眼.ä¼�木.出ç�«.�:‰ÉÎ)‚[æ ½ç§�.ä¼�木.祭祀.å«�娶.祈ç¦�.纳采.è£�è¡£.å�ˆå¸�.安床.入宅.安香.入殓.移柩.安葬.谢土.修造.安碓磑.求嗣.会亲å�‹.挂匾.交易.立券.纳财.造仓.放水.^‰ÉÍKE�造屋.作ç�¶.治病.探病.冠笄.入殓.除æœ�.æˆ�æœ�.移柩.平治é�“æ¶‚.修饰垣墙. ò} :] â} q ¦ ‚b !�] ƒG2023042304劳动节4月29日至5月3日放å�‡è°ƒä¼‘,共5天。4月23日(星期日)ã€�5月6日(星期六)上ç�­ã€‚[{"date":"2023-4-23","status":2},{"date":"2023-4-29","status":1},{"date":"2023-4-30","status":1},{"date":"2023-5-1","status":1},{"date":"2023-5-2","status":1},{"date":"2023-5-3","status":1},{"date":"2023-5-6","status":2}]V!C M2023040504清明节4月5日放å�‡ï¼Œå…±1天。[{"date":"2023-4-5","status":1}]�5 ! � �M2023010101元旦2022å¹´12月31日至2023å¹´1月2日放å�‡è°ƒä¼‘,共3天。[{"date":"2022-12-31","status":1},{"date":"2023-1-1","status":1},{"date":"2023-1-2","status":1}])ƒ !�a „2023100110 国庆节9月29日至10月6日放å�‡è°ƒä¼‘,共8天。10月7日(星期六)ã€�10月8日(星期日)上ç�­ã€‚[{"date":"2023-10-1","status":1},{"date":"2023-10-2","status":1},{"date":"2023-10-3","status":1},{"date":"2023-10-4","status":1},{"date":"2023-10-5","status":1},{"date":"2023-10-6","status":1},{"date":"2023-10-7","status":2},{"date":"2023-10-8","status":2}]�H !�a �2023092909 中秋节9月29日至10月6日放å�‡è°ƒä¼‘,共8天。10月7日(星期六)ã€�10月8日(星期日)上ç�­ã€‚[{"date":"2023-9-29","status":1},{"date":"2023-9-30","status":1}]�i !�# ‚2023062206端å�ˆèŠ‚6月22日至24日放å�‡è°ƒä¼‘,共3天。6月25日(星期日)上ç�­ã€‚[{"date":"2023-6-22","status":1},{"date":"2023-6-23","status":1},{"date":"2023-6-24","status":1},{"date":"2023-6-25","status":2}]ƒ  ! �Y „O2023012101春节1月21日至27日放å�‡è°ƒä¼‘,共7天。1月28日(星期六)ã€�1月29日(星期日)上ç�­ã€‚[{"date":"2023-1-21","status":1},{"date":"2023-1-22","status":1},{"date":"2023-1-23","status":1},{"date":"2023-1-24","status":1},{"date":"2023-1-25","status":1},{"date":"2023-1-26","status":1},{"date":"2023-1-27","status":1},{"date":"2023-1-28","status":2},{"date":"2023-1-29","status":2}] ˜òãÔŶ§˜!2023100110!2023092909!2023062206!2023042304!2023040504!2023012101 ! 2023010101linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/dde-calendar-service.desktop000066400000000000000000000005131523260663500316210ustar00rootroot00000000000000[Desktop Entry] Exec=/bin/bash -c "dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar /com/deepin/dataserver/Calendar/AccountManager com.deepin.dataserver.Calendar.AccountManager.updateRemindJob boolean:true" Name=dde-calendar-service NoDisplay=true Terminal=false Type=Application X-Deepin-Vendor=user-custom linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/000077500000000000000000000000001523260663500263155ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2019.json000066400000000000000000000076331523260663500276140ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2019.json", "year": 2019, "papers": [ "http://www.gov.cn/zhengce/zhengceku/2018-12/06/content_5346276.htm", "http://www.gov.cn/zhengce/zhengceku/2019-03/22/content_5375877.htm" ], "days": [ { "name": "元旦", "date": "2018-12-29", "isOffDay": false }, { "name": "元旦", "date": "2018-12-30", "isOffDay": true }, { "name": "元旦", "date": "2018-12-31", "isOffDay": true }, { "name": "元旦", "date": "2019-01-01", "isOffDay": true }, { "name": "春节", "date": "2019-02-02", "isOffDay": false }, { "name": "春节", "date": "2019-02-03", "isOffDay": false }, { "name": "春节", "date": "2019-02-04", "isOffDay": true }, { "name": "春节", "date": "2019-02-05", "isOffDay": true }, { "name": "春节", "date": "2019-02-06", "isOffDay": true }, { "name": "春节", "date": "2019-02-07", "isOffDay": true }, { "name": "春节", "date": "2019-02-08", "isOffDay": true }, { "name": "春节", "date": "2019-02-09", "isOffDay": true }, { "name": "春节", "date": "2019-02-10", "isOffDay": true }, { "name": "清明节", "date": "2019-04-05", "isOffDay": true }, { "name": "劳动节", "date": "2019-04-28", "isOffDay": false }, { "name": "劳动节", "date": "2019-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2019-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2019-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2019-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2019-05-05", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2019-06-07", "isOffDay": true }, { "name": "中秋节", "date": "2019-09-13", "isOffDay": true }, { "name": "国庆节", "date": "2019-09-29", "isOffDay": false }, { "name": "国庆节", "date": "2019-10-01", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-02", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-03", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-04", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-05", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-06", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-07", "isOffDay": true }, { "name": "国庆节", "date": "2019-10-12", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2020.json000066400000000000000000000113211523260663500275710ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2020.json", "year": 2020, "papers": [ "http://www.gov.cn/zhengce/zhengceku/2019-11/21/content_5454164.htm", "http://www.gov.cn/zhengce/zhengceku/2020-01/27/content_5472352.htm" ], "days": [ { "name": "元旦", "date": "2020-01-01", "isOffDay": true }, { "name": "春节", "date": "2020-01-19", "isOffDay": false }, { "name": "春节", "date": "2020-01-24", "isOffDay": true }, { "name": "春节", "date": "2020-01-25", "isOffDay": true }, { "name": "春节", "date": "2020-01-26", "isOffDay": true }, { "name": "春节", "date": "2020-01-27", "isOffDay": true }, { "name": "春节", "date": "2020-01-28", "isOffDay": true }, { "name": "春节", "date": "2020-01-29", "isOffDay": true }, { "name": "春节", "date": "2020-01-30", "isOffDay": true }, { "name": "春节", "date": "2020-01-31", "isOffDay": true }, { "name": "春节", "date": "2020-02-01", "isOffDay": true }, { "name": "春节", "date": "2020-02-02", "isOffDay": true }, { "name": "春节", "date": "2020-02-03", "isOffDay": false }, { "name": "清明节", "date": "2020-04-04", "isOffDay": true }, { "name": "清明节", "date": "2020-04-05", "isOffDay": true }, { "name": "清明节", "date": "2020-04-06", "isOffDay": true }, { "name": "劳动节", "date": "2020-04-26", "isOffDay": false }, { "name": "劳动节", "date": "2020-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2020-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2020-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2020-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2020-05-05", "isOffDay": true }, { "name": "劳动节", "date": "2020-05-09", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2020-06-25", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2020-06-26", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2020-06-27", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2020-06-28", "isOffDay": false }, { "name": "国庆节ã€�中秋节", "date": "2020-09-27", "isOffDay": false }, { "name": "国庆节ã€�中秋节", "date": "2020-10-01", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-02", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-03", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-04", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-05", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-06", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-07", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-08", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2020-10-10", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2021.json000066400000000000000000000112031523260663500275710ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2021.json", "year": 2021, "papers": [ "http://www.gov.cn/zhengce/zhengceku/2020-11/25/content_5564127.htm" ], "days": [ { "name": "元旦", "date": "2021-01-01", "isOffDay": true }, { "name": "元旦", "date": "2021-01-02", "isOffDay": true }, { "name": "元旦", "date": "2021-01-03", "isOffDay": true }, { "name": "春节", "date": "2021-02-07", "isOffDay": false }, { "name": "春节", "date": "2021-02-11", "isOffDay": true }, { "name": "春节", "date": "2021-02-12", "isOffDay": true }, { "name": "春节", "date": "2021-02-13", "isOffDay": true }, { "name": "春节", "date": "2021-02-14", "isOffDay": true }, { "name": "春节", "date": "2021-02-15", "isOffDay": true }, { "name": "春节", "date": "2021-02-16", "isOffDay": true }, { "name": "春节", "date": "2021-02-17", "isOffDay": true }, { "name": "春节", "date": "2021-02-20", "isOffDay": false }, { "name": "清明节", "date": "2021-04-03", "isOffDay": true }, { "name": "清明节", "date": "2021-04-04", "isOffDay": true }, { "name": "清明节", "date": "2021-04-05", "isOffDay": true }, { "name": "劳动节", "date": "2021-04-25", "isOffDay": false }, { "name": "劳动节", "date": "2021-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2021-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2021-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2021-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2021-05-05", "isOffDay": true }, { "name": "劳动节", "date": "2021-05-08", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2021-06-12", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2021-06-13", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2021-06-14", "isOffDay": true }, { "name": "中秋节", "date": "2021-09-18", "isOffDay": false }, { "name": "中秋节", "date": "2021-09-19", "isOffDay": true }, { "name": "中秋节", "date": "2021-09-20", "isOffDay": true }, { "name": "中秋节", "date": "2021-09-21", "isOffDay": true }, { "name": "国庆节", "date": "2021-09-26", "isOffDay": false }, { "name": "国庆节", "date": "2021-10-01", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-02", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-03", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-04", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-05", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-06", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-07", "isOffDay": true }, { "name": "国庆节", "date": "2021-10-09", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2022.json000066400000000000000000000112031523260663500275720ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2022.json", "year": 2022, "papers": [ "http://www.gov.cn/zhengce/zhengceku/2021-10/25/content_5644835.htm" ], "days": [ { "name": "元旦", "date": "2022-01-01", "isOffDay": true }, { "name": "元旦", "date": "2022-01-02", "isOffDay": true }, { "name": "元旦", "date": "2022-01-03", "isOffDay": true }, { "name": "春节", "date": "2022-01-29", "isOffDay": false }, { "name": "春节", "date": "2022-01-30", "isOffDay": false }, { "name": "春节", "date": "2022-01-31", "isOffDay": true }, { "name": "春节", "date": "2022-02-01", "isOffDay": true }, { "name": "春节", "date": "2022-02-02", "isOffDay": true }, { "name": "春节", "date": "2022-02-03", "isOffDay": true }, { "name": "春节", "date": "2022-02-04", "isOffDay": true }, { "name": "春节", "date": "2022-02-05", "isOffDay": true }, { "name": "春节", "date": "2022-02-06", "isOffDay": true }, { "name": "清明节", "date": "2022-04-02", "isOffDay": false }, { "name": "清明节", "date": "2022-04-03", "isOffDay": true }, { "name": "清明节", "date": "2022-04-04", "isOffDay": true }, { "name": "清明节", "date": "2022-04-05", "isOffDay": true }, { "name": "劳动节", "date": "2022-04-24", "isOffDay": false }, { "name": "劳动节", "date": "2022-04-30", "isOffDay": true }, { "name": "劳动节", "date": "2022-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2022-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2022-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2022-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2022-05-07", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2022-06-03", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2022-06-04", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2022-06-05", "isOffDay": true }, { "name": "中秋节", "date": "2022-09-10", "isOffDay": true }, { "name": "中秋节", "date": "2022-09-11", "isOffDay": true }, { "name": "中秋节", "date": "2022-09-12", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-01", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-02", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-03", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-04", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-05", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-06", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-07", "isOffDay": true }, { "name": "国庆节", "date": "2022-10-08", "isOffDay": false }, { "name": "国庆节", "date": "2022-10-09", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2023.json000066400000000000000000000104471523260663500276040ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2023.json", "year": 2023, "papers": [ "http://www.gov.cn/zhengce/zhengceku/2022-12/08/content_5730844.htm" ], "days": [ { "name": "元旦", "date": "2022-12-31", "isOffDay": true }, { "name": "元旦", "date": "2023-01-01", "isOffDay": true }, { "name": "元旦", "date": "2023-01-02", "isOffDay": true }, { "name": "春节", "date": "2023-01-21", "isOffDay": true }, { "name": "春节", "date": "2023-01-22", "isOffDay": true }, { "name": "春节", "date": "2023-01-23", "isOffDay": true }, { "name": "春节", "date": "2023-01-24", "isOffDay": true }, { "name": "春节", "date": "2023-01-25", "isOffDay": true }, { "name": "春节", "date": "2023-01-26", "isOffDay": true }, { "name": "春节", "date": "2023-01-27", "isOffDay": true }, { "name": "春节", "date": "2023-01-28", "isOffDay": false }, { "name": "春节", "date": "2023-01-29", "isOffDay": false }, { "name": "清明节", "date": "2023-04-05", "isOffDay": true }, { "name": "劳动节", "date": "2023-04-23", "isOffDay": false }, { "name": "劳动节", "date": "2023-04-29", "isOffDay": true }, { "name": "劳动节", "date": "2023-04-30", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2023-05-06", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2023-06-22", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2023-06-23", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2023-06-24", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2023-06-25", "isOffDay": false }, { "name": "中秋节ã€�国庆节", "date": "2023-09-29", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-09-30", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-01", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-02", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-03", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-04", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-05", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-06", "isOffDay": true }, { "name": "中秋节ã€�国庆节", "date": "2023-10-07", "isOffDay": false }, { "name": "中秋节ã€�国庆节", "date": "2023-10-08", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2024.json000066400000000000000000000100421523260663500275740ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2024.json", "year": 2024, "papers": [ "https://www.gov.cn/zhengce/zhengceku/202310/content_6911528.htm" ], "days": [ { "name": "元旦", "date": "2024-01-01", "isOffDay": true }, { "name": "春节", "date": "2024-02-04", "isOffDay": false }, { "name": "春节", "date": "2024-02-10", "isOffDay": true }, { "name": "春节", "date": "2024-02-11", "isOffDay": true }, { "name": "春节", "date": "2024-02-12", "isOffDay": true }, { "name": "春节", "date": "2024-02-13", "isOffDay": true }, { "name": "春节", "date": "2024-02-14", "isOffDay": true }, { "name": "春节", "date": "2024-02-15", "isOffDay": true }, { "name": "春节", "date": "2024-02-16", "isOffDay": true }, { "name": "春节", "date": "2024-02-17", "isOffDay": true }, { "name": "春节", "date": "2024-02-18", "isOffDay": false }, { "name": "清明节", "date": "2024-04-04", "isOffDay": true }, { "name": "清明节", "date": "2024-04-05", "isOffDay": true }, { "name": "清明节", "date": "2024-04-06", "isOffDay": true }, { "name": "清明节", "date": "2024-04-07", "isOffDay": false }, { "name": "劳动节", "date": "2024-04-28", "isOffDay": false }, { "name": "劳动节", "date": "2024-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-05", "isOffDay": true }, { "name": "劳动节", "date": "2024-05-11", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2024-06-10", "isOffDay": true }, { "name": "中秋节", "date": "2024-09-14", "isOffDay": false }, { "name": "中秋节", "date": "2024-09-15", "isOffDay": true }, { "name": "中秋节", "date": "2024-09-16", "isOffDay": true }, { "name": "中秋节", "date": "2024-09-17", "isOffDay": true }, { "name": "国庆节", "date": "2024-09-29", "isOffDay": false }, { "name": "国庆节", "date": "2024-10-01", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-02", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-03", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-04", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-05", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-06", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-07", "isOffDay": true }, { "name": "国庆节", "date": "2024-10-12", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2025.json000066400000000000000000000102601523260663500275770ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2025.json", "year": 2025, "papers": [ "https://www.gov.cn/zhengce/zhengceku/202411/content_6986383.htm" ], "days": [ { "name": "元旦", "date": "2025-01-01", "isOffDay": true }, { "name": "春节", "date": "2025-01-26", "isOffDay": false }, { "name": "春节", "date": "2025-01-28", "isOffDay": true }, { "name": "春节", "date": "2025-01-29", "isOffDay": true }, { "name": "春节", "date": "2025-01-30", "isOffDay": true }, { "name": "春节", "date": "2025-01-31", "isOffDay": true }, { "name": "春节", "date": "2025-02-01", "isOffDay": true }, { "name": "春节", "date": "2025-02-02", "isOffDay": true }, { "name": "春节", "date": "2025-02-03", "isOffDay": true }, { "name": "春节", "date": "2025-02-04", "isOffDay": true }, { "name": "春节", "date": "2025-02-08", "isOffDay": false }, { "name": "清明节", "date": "2025-04-04", "isOffDay": true }, { "name": "清明节", "date": "2025-04-05", "isOffDay": true }, { "name": "清明节", "date": "2025-04-06", "isOffDay": true }, { "name": "劳动节", "date": "2025-04-27", "isOffDay": false }, { "name": "劳动节", "date": "2025-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2025-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2025-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2025-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2025-05-05", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2025-05-31", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2025-06-01", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2025-06-02", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-09-28", "isOffDay": false }, { "name": "国庆节ã€�中秋节", "date": "2025-10-01", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-02", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-03", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-04", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-05", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-06", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-07", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-08", "isOffDay": true }, { "name": "国庆节ã€�中秋节", "date": "2025-10-11", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/holiday-cn/2026.json000066400000000000000000000073431523260663500276100ustar00rootroot00000000000000{ "$schema": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/schema.json", "$id": "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2026.json", "year": 2026, "papers": [ "https://www.gov.cn/zhengce/zhengceku/202511/content_7047091.htm" ], "days": [ { "name": "元旦", "date": "2026-01-01", "isOffDay": true }, { "name": "元旦", "date": "2026-01-02", "isOffDay": true }, { "name": "元旦", "date": "2026-01-03", "isOffDay": true }, { "name": "元旦", "date": "2026-01-04", "isOffDay": false }, { "name": "春节", "date": "2026-02-14", "isOffDay": false }, { "name": "春节", "date": "2026-02-15", "isOffDay": true }, { "name": "春节", "date": "2026-02-16", "isOffDay": true }, { "name": "春节", "date": "2026-02-17", "isOffDay": true }, { "name": "春节", "date": "2026-02-18", "isOffDay": true }, { "name": "春节", "date": "2026-02-19", "isOffDay": true }, { "name": "春节", "date": "2026-02-20", "isOffDay": true }, { "name": "春节", "date": "2026-02-21", "isOffDay": true }, { "name": "春节", "date": "2026-02-22", "isOffDay": true }, { "name": "春节", "date": "2026-02-23", "isOffDay": true }, { "name": "春节", "date": "2026-02-28", "isOffDay": false }, { "name": "清明节", "date": "2026-04-04", "isOffDay": true }, { "name": "清明节", "date": "2026-04-05", "isOffDay": true }, { "name": "清明节", "date": "2026-04-06", "isOffDay": true }, { "name": "劳动节", "date": "2026-05-01", "isOffDay": true }, { "name": "劳动节", "date": "2026-05-02", "isOffDay": true }, { "name": "劳动节", "date": "2026-05-03", "isOffDay": true }, { "name": "劳动节", "date": "2026-05-04", "isOffDay": true }, { "name": "劳动节", "date": "2026-05-05", "isOffDay": true }, { "name": "劳动节", "date": "2026-05-09", "isOffDay": false }, { "name": "端å�ˆèŠ‚", "date": "2026-06-19", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2026-06-20", "isOffDay": true }, { "name": "端å�ˆèŠ‚", "date": "2026-06-21", "isOffDay": true }, { "name": "国庆节", "date": "2026-09-20", "isOffDay": false }, { "name": "中秋节", "date": "2026-09-25", "isOffDay": true }, { "name": "中秋节", "date": "2026-09-26", "isOffDay": true }, { "name": "中秋节", "date": "2026-09-27", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-01", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-02", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-03", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-04", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-05", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-06", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-07", "isOffDay": true }, { "name": "国庆节", "date": "2026-10-10", "isOffDay": false } ] }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/pinyin.dict000066400000000000000000021363101523260663500264470ustar00rootroot000000000000000x3007:líng,yuán,xÄ«ng 0x3400:qiÅ« 0x3401:tiàn 0x3404:kuà 0x3405:wÇ” 0x3406:yÇ�n 0x340C:yí 0x3416:xié 0x341C:chóu 0x3421:nuò 0x3424:dÄ�n,qiú 0x3428:xù 0x3429:xíng 0x342B:xiÅ�ng 0x342C:liú 0x342D:lÇ�n 0x342E:xiÄ�ng 0x342F:yÅ�ng 0x3430:xìn 0x3431:zhÄ›n 0x3432:dài 0x3433:wù 0x3434:pÄ�n 0x3435:rú 0x3437:mÇŽ 0x3438:qiàn,cì 0x3439:yì 0x343A:yín,zhòng 0x343B:nèi 0x343C:chèng 0x343D:fÄ“ng 0x3441:zhuÅ� 0x3442:fÇŽng 0x3443:ÇŽo 0x3444:wÇ” 0x3445:zuò 0x3447:zhòu 0x3448:dòng 0x3449:sù 0x344A:yì 0x344B:qióng 0x344C:kuÄ�ng,wÄ�ng 0x344D:lèi 0x344E:nÇŽo 0x344F:zhù 0x3450:shÅ« 0x3454:xÇ” 0x3457:shÄ“n 0x3458:jiè 0x3459:dié 0x345A:nuó 0x345B:sù 0x345C:yì,chì 0x345D:lòng 0x345E:yìng 0x345F:bÄ›ng 0x3463:lán 0x3464:miáo 0x3465:yì 0x3466:lì 0x3467:jì 0x3468:yÇ” 0x3469:luó 0x346A:chái 0x346E:hún 0x346F:xÇ” 0x3470:huì 0x3471:rÇŽo 0x3473:zhòu,zhÅ« 0x3475:hàn 0x3476:xì 0x3477:tài 0x3478:yáo 0x3479:huì 0x347A:jùn 0x347B:mà 0x347C:lüè 0x347D:táng 0x347E:yáo 0x347F:zhào 0x3480:zhÄ�i,zhÇŽ 0x3481:yÇ” 0x3482:zhuó 0x3483:èr 0x3484:rÇŽn 0x3485:qÇ� 0x3486:chì 0x3487:wÇ” 0x3488:hàn 0x3489:tÇŽng 0x348A:sè 0x348C:qióng 0x348D:léi 0x348E:sà 0x3491:kuÇ�,huì 0x3492:pú 0x3493:tà 0x3494:shú,dú,tù 0x3495:yÄ�ng 0x3496:Ç’u 0x3497:tái 0x3499:mián 0x349A:yìn,wÄ›n 0x349B:diào 0x349C:yÇ” 0x349D:miè,wà 0x349E:jùn 0x349F:niÇŽo 0x34A0:xiè 0x34A1:yóu 0x34A4:chè 0x34A5:fÄ“ng 0x34A6:lÄ›i,lèi 0x34A7:lì 0x34A9:luÇ’ 0x34AB:jì 0x34B0:quán 0x34B2:cái 0x34B3:liÇŽng 0x34B4:gÇ” 0x34B5:mào 0x34B7:guÇŽ 0x34B8:suì 0x34BB:mào 0x34BC:mán 0x34BD:quÄ�n 0x34BE:shì 0x34BF:lí 0x34C1:wÇŽng 0x34C2:kòu 0x34C3:dù 0x34C4:zhèn 0x34C5:tÄ«ng 0x34C8:bìng 0x34C9:huò 0x34CA:dòng 0x34CB:gòng 0x34CC:chÄ“ng 0x34CE:qÄ«n,qìn,qÇ�n 0x34CF:jiÇ’ng 0x34D0:lù 0x34D1:xìng 0x34D3:nán 0x34D4:xiè 0x34D6:bì 0x34D7:jié 0x34D8:sù 0x34DA:gÅ�ng 0x34DC:yòu 0x34DD:xíng 0x34DE:qià 0x34DF:pí 0x34E0:diàn,diÇŽn 0x34E1:fÇ”,guÄ� 0x34E2:luò 0x34E3:qià,gÄ“ 0x34E4:qià 0x34E5:tÄ�ng 0x34E6:bÄ�i 0x34E7:gÄ�n 0x34E8:cí 0x34E9:xuÄ�n,jiÄ“ 0x34EA:lÇŽng 0x34ED:shé 0x34EF:lí 0x34F0:huà 0x34F1:tóu,shÅ« 0x34F2:piÄ�n 0x34F3:dÄ« 0x34F4:ruÇŽn 0x34F5:è 0x34F6:qiè 0x34F7:yì 0x34F8:zhuÅ�,dÅ�u 0x34F9:ruì,cuì,jì 0x34FA:jiÄ�n,qián 0x34FC:chì 0x34FD:chóng 0x34FE:xÄ«,chí 0x3500:lüè 0x3501:dÄ“ng 0x3502:lín 0x3503:jué,xuÄ“ 0x3504:sù 0x3505:xiào 0x3506:zàn 0x3509:zhÇ” 0x350A:zhÇŽn,dÇŽn 0x350B:jiÄ�n,lán 0x350C:zòu,cÇ’u 0x350D:chuÄ�,zhá 0x350E:xiè 0x350F:lì,luÇ’ 0x3511:chì 0x3512:xí 0x3513:jiÇŽn 0x3515:jí 0x3517:fèi,bèi,fú 0x3518:chù 0x3519:bÄ“ng 0x351A:jié 0x351C:bá 0x351D:liÇŽng,liáng 0x351E:kuài 0x3520:xiÄ�,hé 0x3521:biÄ“ 0x3522:jué,xuÄ“ 0x3523:léi 0x3524:xìn 0x3525:bài,pí 0x3526:yÇŽng 0x3527:lÇœ 0x3528:bèi 0x3529:è 0x352A:lÇ” 0x352D:chè 0x352E:nuó 0x352F:xuán,suÇŽn 0x3530:héng 0x3531:yÇ” 0x3533:guÇ� 0x3534:yì 0x3535:xuÇŽn 0x3536:gòng,gÇŽn 0x3537:lòu 0x3538:tÄ« 0x3539:lè 0x353A:shì 0x353C:sÇ”n 0x353D:yào 0x353E:xiÄ�n,jié 0x353F:zòu 0x3541:què 0x3542:yín,qín 0x3543:xÄ« 0x3544:zhÇ� 0x3545:jiá 0x3546:hù 0x3547:lÄ� 0x3548:yÇ� 0x3549:kè 0x354A:fÅ« 0x354B:qín 0x354C:ài 0x354E:kè 0x354F:chú 0x3550:xiÄ›,xiè 0x3551:chú 0x3552:wÄ“i 0x3555:huàn 0x3556:sù 0x3557:yòu 0x3559:jùn 0x355A:zhÇŽo 0x355B:xù 0x355C:shÇ� 0x355E:shuÄ� 0x355F:kuì,kuài 0x3560:shuÄ�ng 0x3561:hé 0x3562:gài,hài 0x3563:yÇŽn 0x3564:qiú 0x3565:shÄ“n 0x3566:huà 0x3567:xÄ« 0x3568:fàn 0x3569:pàng 0x356A:dÇŽn 0x356B:fÇŽng,fÄ“ng 0x356C:gÅ�ng,sòng 0x356D:Ä�o,ào 0x356E:fÇ” 0x356F:nè 0x3570:xuè,ma 0x3571:yóu 0x3572:huá,yíng 0x3574:chén 0x3575:guó 0x3576:ň,ňg 0x3577:huà,pÄ� 0x3578:lì 0x3579:fá 0x357A:xiÄ�o 0x357B:pÇ’u 0x357D:sì 0x3580:lè 0x3581:lìn 0x3582:yì 0x3583:hÇ’u,hòu 0x3585:xù 0x3586:qú 0x3587:ér 0x358A:xún 0x358F:niè 0x3590:wÄ›i 0x3591:xiè 0x3592:tí 0x3593:hóng 0x3594:tÇ”n 0x3595:niè,xÄ«n 0x3596:niè 0x3597:yín 0x3598:zhÄ“n 0x359E:wÄ�i 0x359F:shòu 0x35A0:nuò 0x35A1:yè 0x35A2:qí 0x35A3:tòu 0x35A4:hán 0x35A5:jùn 0x35A6:dÇ’ng 0x35A7:hÅ«n,wÄ›n 0x35A8:lù 0x35A9:jÅ«,sÇ’u 0x35AA:huò,guó,xù 0x35AB:líng 0x35AD:tiÇŽn 0x35AE:lún 0x35B5:gé 0x35B6:yÄ�n,yè,yÄ«n 0x35B7:shí,tí 0x35B8:xué,niÄ� 0x35B9:pÄ“n,fèn 0x35BA:chÇ”n 0x35BB:niú,ròu 0x35BC:duÇ’ 0x35BD:zé 0x35BE:è 0x35BF:xié,yé 0x35C0:yÅ�u 0x35C1:è 0x35C2:shÄ›ng 0x35C3:wÄ›n,hÅ«n 0x35C4:kÅ« 0x35C5:hú 0x35C6:gé 0x35C7:xiá,ya 0x35C8:màn 0x35C9:lüè,è 0x35CA:jí,léi 0x35CB:hóu 0x35CC:zhì 0x35CF:wÄ�i 0x35D1:bai 0x35D2:ài 0x35D3:zhuÄ« 0x35D4:qiÄ�n 0x35D5:gòu,gÅ�u 0x35D6:dàn 0x35D7:bÄ“i 0x35D8:bó 0x35D9:chÅ«,nà,zhÅ�u 0x35DA:lì 0x35DB:xiào 0x35DC:xiù 0x35E2:hóng,dòng,hòng 0x35E3:tì 0x35E4:cù 0x35E5:kuò,guÅ� 0x35E6:láo 0x35E7:zhì,dié 0x35E8:xiÄ“,ÇŽi 0x35E9:xÄ« 0x35EB:qiè 0x35EC:zhÄ� 0x35ED:xÄ« 0x35F0:cóng 0x35F1:jí 0x35F2:huò 0x35F3:tÇŽ,dÄ� 0x35F4:yán 0x35F5:xù 0x35F6:pÅ� 0x35F7:sÇŽi 0x35FB:guÅ� 0x35FC:yè 0x35FD:xiÇŽng 0x35FE:xuÄ“ 0x35FF:hé,xià,xiÄ� 0x3600:zuò 0x3601:yì 0x3602:cí 0x3604:lÄ“ng 0x3605:xián 0x3606:tÇŽi 0x3607:róng 0x3608:yì,nÇ� 0x3609:zhì 0x360A:xÄ«,yì 0x360B:xián 0x360C:jù 0x360D:jí 0x360E:hÇŽn 0x3610:pào 0x3611:lì 0x3613:lán 0x3614:sÇŽi 0x3615:hÇŽn,lán 0x3616:yán 0x3617:qÅ« 0x3619:yán 0x361A:hÇŽn 0x361B:kÄ�n 0x361C:chÇ� 0x361D:niè 0x361E:huò 0x3620:bì 0x3621:xiá 0x3622:wÄ›ng 0x3623:xuán,yuán 0x3624:wÄ�n 0x3625:yóu 0x3626:qín 0x3627:xù 0x3628:niè 0x3629:bì 0x362A:hào 0x362B:jÇ�ng 0x362C:ào,wù 0x362D:ào 0x3630:zhÄ“n 0x3631:tÄ�n 0x3632:jú 0x3634:zuò 0x3635:bù 0x3636:jié 0x3637:ài 0x3638:zàng,zuò 0x3639:cí 0x363A:fá 0x363F:niè 0x3640:liù,jiù 0x3641:méi,mù 0x3642:duì,wèng 0x3643:bÄ�ng 0x3644:bì 0x3645:bÇŽo 0x3647:chù 0x3648:xià 0x3649:tiÇŽn 0x364A:cháng,zhàng 0x364D:duÅ� 0x364E:wÄ“i 0x364F:fù 0x3650:duÇ’ 0x3651:yÇ” 0x3652:yÄ› 0x3653:kuí 0x3654:wÄ›i,hán 0x3655:kuài 0x3657:wÄ“i 0x3658:yÄ�o 0x3659:lÇ’ng 0x365A:xÄ«ng 0x365B:bÇ” 0x365C:chí 0x365D:xié 0x365E:niè 0x365F:lÇŽng 0x3660:yÄ«,yì 0x3661:zÅ�ng 0x3662:mán 0x3663:zhàng 0x3664:xià 0x3665:gùn 0x3666:xié 0x3668:jì 0x3669:liáo 0x366A:yì 0x366B:jí 0x366C:yín 0x366E:dÄ�,da 0x366F:yì 0x3670:xiè 0x3671:hào 0x3672:yÇ’ng 0x3673:kÇŽn,hÇŽn 0x3674:chàn 0x3675:tái 0x3676:táng 0x3677:zhí,zhé 0x3678:bào 0x3679:méng 0x367A:kuí,guì 0x367B:chán 0x367C:lÄ›i 0x367E:xì 0x3680:xÄ« 0x3681:qiào 0x3682:nàng 0x3683:yÅ«n 0x3685:lóng 0x3686:fù 0x3687:zÅ�ng 0x3689:gÇ” 0x368A:kÄ�i 0x368B:diÄ�o 0x368C:huà 0x368D:kuÇ�,kuì 0x368F:gÇŽo 0x3690:tào 0x3692:shÇŽn 0x3693:lÇŽi 0x3694:niè,xìng 0x3695:fú 0x3696:gÇŽo,zé 0x3697:qié 0x3698:bàn,hè,fú 0x3699:jiÄ� 0x369A:kÅ�ng,kuÄ�ng 0x369B:xì 0x369C:yù,xù 0x369D:zhuÄ« 0x369E:shÄ›n 0x369F:chuò 0x36A0:xiÄ�o 0x36A1:jÇ� 0x36A2:nú,wÇ” 0x36A3:xiáo 0x36A4:yì 0x36A5:yú 0x36A6:yí 0x36A7:yÇŽn 0x36A8:shÄ›n 0x36A9:rÇŽn 0x36AA:hào 0x36AB:sà 0x36AC:jÅ«n 0x36AD:yóu 0x36AF:xín 0x36B0:pÄ“i,bÇ� 0x36B1:qiÅ« 0x36B2:chÄ�n,diÇŽn,diàn 0x36B4:bù 0x36B5:dÅ�ng 0x36B6:sì,yí 0x36B7:Ä›r 0x36B9:mÇŽo,liÇ” 0x36BA:yùn 0x36BB:jÄ« 0x36BD:qiÇŽo 0x36BE:xiÅ�ng 0x36BF:páo 0x36C0:chú 0x36C1:pÄ“ng 0x36C2:nuÇ’ 0x36C3:jié 0x36C4:yÄ« 0x36C5:èr 0x36C6:duò,duÇ’ 0x36CA:duÇ’ 0x36CD:qiè,xiÇŽn,xiá 0x36CE:lÇš 0x36CF:qiú 0x36D0:sÇ’u 0x36D1:càn 0x36D2:dòu 0x36D3:xÄ« 0x36D4:fÄ“ng,péng 0x36D5:yì,è 0x36D6:suÅ� 0x36D7:qiÄ“,zuÅ�,suÅ� 0x36D8:pò 0x36D9:xÄ«n,qiè 0x36DA:tÇ’ng,yÇ’ng 0x36DB:xìn 0x36DC:yóu 0x36DD:bèi 0x36DE:lòng 0x36E3:yún 0x36E4:lí 0x36E5:tà 0x36E6:lÇŽn 0x36E7:mÇŽn 0x36E8:qiÇŽng 0x36E9:zhóu 0x36EA:yàn,yÄ�n 0x36EB:xÄ« 0x36EC:lù 0x36ED:xÄ« 0x36EE:sÇŽo 0x36EF:fàn,miÇŽn,zhuàn 0x36F1:wÄ›i,wÄ“i 0x36F2:fà 0x36F3:yì 0x36F4:nÇŽo 0x36F5:chÄ“ng 0x36F6:tàn 0x36F7:jÄ« 0x36F8:shù 0x36F9:pián 0x36FA:Ä�n 0x36FB:kuÄ� 0x36FC:chÄ�,shà 0x36FE:xián 0x36FF:zhì 0x3702:fÄ“ng 0x3703:liàn 0x3704:xún 0x3705:xù 0x3706:mì 0x3707:huì,yè 0x3708:mù 0x3709:yÅ�ng 0x370A:zhÇŽn 0x370B:yì 0x370C:nÇ’u,gòu,kòu 0x370D:táng 0x370E:xÄ«,xì 0x370F:yún 0x3710:shù 0x3711:fú 0x3712:yì 0x3713:dá 0x3715:lián 0x3716:cáo 0x3717:cÄ�n,sÄ“n 0x3718:jù,qù,chá 0x3719:lù 0x371A:sù 0x371B:nèn 0x371C:ào 0x371D:ÇŽn,yÇŽn 0x371E:qiàn,cán 0x3720:cuÄ« 0x3721:cÅ�ng 0x3723:rán,rÇŽn 0x3724:niÇŽn,tiÇŽn,tán 0x3725:mái 0x3726:xín 0x3727:yuè 0x3728:nái 0x3729:ào 0x372A:shÄ“n 0x372B:mà 0x372E:làn,lán 0x372F:xÄ« 0x3730:yuè 0x3731:zhì 0x3732:wÄ›ng 0x3733:huái 0x3734:mèng 0x3735:niÇŽo 0x3736:wÇŽn 0x3737:mí,xiÇŽn 0x3738:niè 0x3739:qú 0x373A:zàn 0x373B:liàn 0x373C:zhí 0x373D:zÇ� 0x373E:hái 0x373F:xù 0x3740:hào 0x3741:xuÄ�n,qióng 0x3742:zhì,zhè 0x3743:miÇŽn 0x3744:chún 0x3745:gòu 0x3747:chún 0x3748:luán 0x3749:zhù 0x374A:shÇ’u 0x374B:liÇŽo 0x374C:jiù 0x374D:xiÄ› 0x374E:dìng 0x374F:jiè 0x3750:róng 0x3751:máng 0x3753:kè 0x3754:yÇŽo 0x3755:níng 0x3756:yí 0x3757:láng,lÇŽng 0x3758:yóng 0x3759:yín 0x375A:yán 0x375B:sù 0x375D:lín 0x375E:yÄ�,yà 0x375F:máo 0x3760:míng 0x3761:zuì 0x3762:yÇ” 0x3763:yì 0x3764:gòu 0x3765:mÇ� 0x3766:jùn 0x3767:wÄ›n 0x3769:kÄ�ng 0x376A:diàn 0x376B:lóng 0x376D:xÇ�ng 0x376E:cuì 0x376F:qiáo 0x3770:mián 0x3771:mèng 0x3772:qÇ�n 0x3774:wán 0x3775:dé,ài 0x3776:ài 0x3778:biàn 0x3779:nóu 0x377A:lián 0x377B:jÇ�n 0x377C:yÅ« 0x377D:chuí 0x377E:zuÇ’ 0x377F:bÇ’ 0x3780:huÄ« 0x3781:yào 0x3782:tuÇ�,tuì 0x3783:jì 0x3784:Ä�n 0x3785:luò 0x3786:jÇ� 0x3787:wÄ›i 0x3788:bÅ� 0x3789:zÄ� 0x378A:xù 0x378B:niÇŽn,jí 0x378C:yùn 0x378E:bÇŽ,pÄ� 0x378F:zhé,jié 0x3790:jÅ« 0x3791:wÄ›i 0x3792:xiè,xì 0x3793:qì,jÄ« 0x3794:yí 0x3795:xiè 0x3796:cí,cì 0x3797:qiú 0x3798:dÅ« 0x3799:niào 0x379A:qì,zhÇŽ 0x379B:jÇ� 0x379C:tuÄ« 0x379E:sóng 0x379F:diàn,dÇ�ng 0x37A0:láo 0x37A1:zhÇŽn 0x37A4:yín,cén 0x37A5:cén 0x37A6:jÇ� 0x37A7:huì 0x37A8:zÇ� 0x37A9:lán 0x37AA:náo 0x37AB:jù 0x37AC:qìn 0x37AD:dài 0x37AF:jié 0x37B0:xÇ” 0x37B1:cÅ�ng 0x37B2:yòng 0x37B3:dÇ’u 0x37B4:chí,mín 0x37B6:mÇ�n 0x37B7:huáng 0x37B8:suì 0x37B9:kÄ› 0x37BA:zú 0x37BB:hào 0x37BC:chéng 0x37BD:xuè 0x37BE:ní 0x37BF:chì 0x37C0:lián 0x37C1:àn 0x37C2:mÇ” 0x37C3:sÄ« 0x37C4:xiáng 0x37C5:yáng 0x37C6:huá 0x37C7:cuò,cuó 0x37C8:qiú 0x37C9:láo 0x37CA:fú 0x37CB:duì 0x37CC:máng 0x37CD:láng,lÇŽng 0x37CE:tuÇ’,tuÇ� 0x37CF:hán 0x37D0:mÇŽng 0x37D1:bó 0x37D2:qÅ«n 0x37D3:qí 0x37D4:hán 0x37D6:lòng,lóng 0x37D8:tiáo 0x37D9:zé 0x37DA:qí 0x37DB:zàn 0x37DC:mí 0x37DD:péi 0x37DE:zhàn 0x37DF:xiàng 0x37E0:gÇŽng 0x37E2:qí 0x37E4:lù 0x37E6:yùn 0x37E7:è 0x37E8:duÄ�n 0x37E9:mín 0x37EA:wÄ“i,wÄ›i 0x37EB:quán 0x37EC:sÇ’u 0x37ED:mín 0x37EE:tÅ« 0x37F0:mÇ�ng 0x37F1:yÇŽo 0x37F2:jué 0x37F3:lì 0x37F4:kuài 0x37F5:gÇŽng 0x37F6:yuán 0x37F7:da 0x37F9:láo 0x37FA:lóu 0x37FB:qiàn,zhÇŽn 0x37FC:áo 0x37FD:biÇŽo,biÄ�o 0x37FE:yÅ�ng 0x37FF:mÇŽng,máng 0x3800:dÇŽo 0x3802:áo 0x3804:xí 0x3805:fú,fù 0x3806:dÄ�n 0x3807:jiù 0x3808:rùn 0x3809:tóng 0x380A:qÅ« 0x380B:è 0x380C:qÄ« 0x380D:jí 0x380E:jí,jié 0x380F:huá 0x3810:jiào 0x3811:zuì 0x3812:biÇŽo 0x3813:méng 0x3814:bài 0x3815:wÄ›i 0x3816:yÇ� 0x3817:ào 0x3818:yÇ” 0x3819:háo 0x381A:duì 0x381B:wò 0x381C:nì 0x381D:cuán 0x381F:lí 0x3820:lú 0x3821:niÇŽo 0x3822:huái 0x3823:lì 0x3825:lÇœ,léi,lÄ›i 0x3826:fÄ“ng 0x3827:mÇ� 0x3828:yù 0x382A:jù 0x382D:zhÇŽn 0x382E:pÄ“ng,gÄ�ng 0x382F:yÇ� 0x3831:jì,qÇ� 0x3832:bÇ� 0x3834:rèn 0x3835:huÄ�ng 0x3836:fán 0x3837:gé 0x3838:kù 0x3839:jiè 0x383A:shÄ�,miáo 0x383C:sÄ« 0x383D:tóng 0x383E:yuÄ�n 0x383F:zÄ«,cÇ� 0x3840:bì 0x3841:kuÇŽ 0x3842:lì 0x3843:huÄ�ng 0x3844:xún 0x3845:nuÇ’ 0x3847:zhé,jiÄ“ 0x3848:wèn,mén,miÇŽn 0x3849:xián 0x384A:qià 0x384B:yé,Ä�n 0x384C:mào 0x384F:shù,xÅ«,tóu,shÅ« 0x3851:qiÄ�o,jiÇŽo 0x3852:zhÅ«n 0x3853:kÅ«n 0x3854:wù 0x3855:yÄ«ng 0x3856:chuáng 0x3857:tí 0x3858:lián,lín 0x3859:bÄ« 0x385A:gÅ�u 0x385B:máng 0x385C:xiè,xuÄ› 0x385D:fèng 0x385E:lóu,lÇš 0x385F:zÄ�o 0x3860:zhèng 0x3861:chú 0x3862:màn 0x3863:lóng 0x3865:yìn 0x3866:pÄ«n 0x3867:zhèng 0x3868:jiÄ�n,qiÄ�n 0x3869:luán 0x386A:nié 0x386B:yì 0x386D:jì 0x386E:jí 0x386F:zhái,dù,duó 0x3870:yÇ” 0x3871:jiÇ” 0x3872:huán 0x3873:zhÇ� 0x3874:lÄ� 0x3875:líng 0x3876:zhÇ� 0x3877:bÄ›n 0x3878:zhà,zhÇŽ,chá 0x3879:jÅ« 0x387A:dàn 0x387B:liào 0x387C:yì 0x387D:zhào 0x387E:xiàn 0x387F:chì 0x3880:cì 0x3881:chÇ�,shÇ� 0x3882:yÇŽn,tuí,duÄ« 0x3883:láng 0x3884:dòu 0x3885:lòng 0x3886:chán 0x3888:tuí,duÄ« 0x3889:chá 0x388A:ÇŽi,yÇ� 0x388B:chÇ� 0x388D:yÇ�ng 0x388E:zhé 0x388F:tóu,yÇ”,yú 0x3891:tuí 0x3892:chá 0x3893:yÇŽo 0x3894:zÇ’ng 0x3896:pÄ�n,bÄ�n 0x3897:qiào 0x3898:lián 0x3899:qín 0x389A:lÇ” 0x389B:yàn,qiÄ�n 0x389C:kÄ�ng,kàng 0x389D:sÅ« 0x389E:yì 0x389F:chÄ�n 0x38A0:jiÇ’ng 0x38A1:jiÇŽng 0x38A3:jìng 0x38A5:dòng 0x38A7:juàn 0x38A8:hàn 0x38A9:dì 0x38AC:hóng 0x38AE:chí 0x38AF:diÄ�o,mín 0x38B0:bì 0x38B2:xùn 0x38B3:lú 0x38B5:xié,shè 0x38B6:bì 0x38B8:bì 0x38BA:xián 0x38BB:ruì 0x38BC:biè 0x38BD:Ä›r 0x38BE:juàn 0x38C0:zhèn 0x38C1:bèi 0x38C2:è 0x38C3:yÇ” 0x38C4:qú 0x38C5:zàn 0x38C6:mí 0x38C7:yì 0x38C8:sì 0x38CC:shàn 0x38CD:tái 0x38CE:mù 0x38CF:jìng 0x38D0:biàn 0x38D1:róng 0x38D2:cèng 0x38D3:càn 0x38D4:dÄ«ng 0x38D9:dí,zhòu 0x38DA:tÇ’ng,tóng,dòng 0x38DB:tà,huì 0x38DC:xíng 0x38DD:sÅ�ng 0x38DE:duó 0x38DF:xì 0x38E0:tÄ�o,tóng 0x38E2:tí 0x38E3:shàn 0x38E4:jiàn 0x38E5:zhì 0x38E6:wÄ“i 0x38E7:yìn 0x38EA:huÇŽn 0x38EB:zhÇ’ng,dòng 0x38EC:qì 0x38ED:zÅ�ng 0x38EF:xiè 0x38F0:xiè 0x38F1:zé 0x38F2:wéi 0x38F5:tà 0x38F6:zhÄ�n 0x38F7:nìng 0x38FB:yì 0x38FC:rÄ›n 0x38FD:shù,nù 0x38FE:chà 0x38FF:zhuó,diÇŽo 0x3901:miÇŽn 0x3902:jí 0x3903:fáng 0x3904:pèi 0x3905:ài,xì,jì 0x3906:fàn 0x3907:ÇŽo 0x3908:qìn 0x3909:qiÄ�,yà 0x390A:xiào 0x390B:fÄ“n 0x390C:gÄ�n 0x390D:qiÄ�o,qiÇŽo 0x390E:gÄ“ 0x390F:tóng 0x3910:chÄ�n 0x3911:yòu 0x3912:gÄ�o 0x3913:bèn 0x3914:fù 0x3915:chù,pò 0x3916:zhù 0x3918:zhòu 0x391A:háng 0x391B:nín 0x391C:jué 0x391D:chÅ�ng 0x391E:chà,duó,zé 0x391F:kÇ’ng 0x3920:liè 0x3921:lì,liè 0x3922:yù 0x3924:yú 0x3925:hài 0x3926:lì 0x3927:hóu 0x3928:gÇ’ng 0x3929:kè 0x392A:yuàn 0x392B:dé 0x392C:huì 0x392E:guàng 0x392F:jiÇ’ng 0x3930:zuò 0x3931:fù,dòu 0x3932:qiè 0x3933:bÄ›i 0x3934:chè,shè,dié 0x3935:cí 0x3936:máng,màng 0x3937:hÄ�n 0x3938:xì 0x3939:qiú,jiù 0x393A:huÇŽng 0x393D:chóu 0x393E:sàn,tàn 0x393F:yÄ�n 0x3940:zhí,dé 0x3941:dé 0x3942:tè 0x3943:mèn 0x3944:líng 0x3945:shòu 0x3946:tuì 0x3947:cán 0x3948:dié 0x3949:chè 0x394A:péng,pÄ“ng 0x394B:yÄ« 0x394C:jú 0x394D:jì 0x394E:lái 0x394F:tiÇŽn 0x3950:yuàn 0x3952:cÇŽi,cÄ�i 0x3953:qÄ« 0x3954:yù 0x3955:lián 0x3956:cÅ�ng 0x395A:yú,yÇ” 0x395B:jí,kè 0x395C:wèi 0x395D:mÇ� 0x395E:suì 0x395F:xié 0x3960:xÅ« 0x3961:chì 0x3962:qiú,jiÅ« 0x3963:huì 0x3965:yú 0x3966:qiè 0x3967:shùn 0x3968:shuì,wÄ›i 0x3969:duÇ’ 0x396A:lóu 0x396C:páng 0x396D:tài 0x396E:zhòu,chÇŽo 0x396F:yÇ�n 0x3970:sÄ�o 0x3971:fÄ›i 0x3972:chÄ“n,shèn 0x3973:yuán 0x3974:yí,tí 0x3975:hùn 0x3976:sè,qiÄ�n 0x3977:yè 0x3978:mÇ�n 0x3979:fÄ›n 0x397A:hé 0x397C:yìn,yÄ�n 0x397D:cè,zé 0x397E:nì 0x397F:ào 0x3980:féng 0x3981:lián,liÇŽn 0x3982:cháng 0x3983:chÇŽn 0x3984:má 0x3985:diÄ“,dì,chài 0x3986:hÅ«,xiÄ� 0x3987:lù 0x3989:yì 0x398A:huá 0x398B:zhÄ� 0x398C:hÅ«,xù 0x398D:è 0x398E:huò 0x398F:sÇ”n,xuàn 0x3990:nì 0x3991:xiàn,hÄ�n 0x3992:lí 0x3993:xiàn,rÇŽn 0x3994:yàn 0x3995:lóng 0x3996:mèn 0x3997:jÄ«n,jìn 0x3998:jÄ« 0x399A:biÇŽn 0x399B:yÇ”,yú 0x399C:huò,xuè 0x399D:miÇŽo 0x399E:chóu 0x399F:mái 0x39A1:lè 0x39A2:jié 0x39A3:wèi 0x39A4:yì 0x39A5:xuÄ�n,xiÇŽn 0x39A6:xì 0x39A7:cÇŽn 0x39A8:lán 0x39A9:yÇ�n 0x39AA:xiè 0x39AB:zÄ� 0x39AC:luÇ’ 0x39AD:líng 0x39AE:qián 0x39AF:huò 0x39B0:jiÄ�n 0x39B1:wÇ’ 0x39B4:gé 0x39B5:zhÅ« 0x39B6:dié,yÇ’ng 0x39B7:yÇ’ng 0x39B8:jÇ� 0x39B9:yáng 0x39BA:rù 0x39BB:xí 0x39BC:shuàng 0x39BD:yù 0x39BE:yí 0x39BF:qiÇŽn,hù 0x39C0:jí 0x39C1:qù,hé 0x39C2:tián 0x39C3:shÅ�u,jiÅ« 0x39C4:qiÇŽn 0x39C5:mù,dÄ�o 0x39C6:jÄ«n 0x39C7:mÇŽo 0x39C8:yÇ�n 0x39C9:gài,hài,yè 0x39CA:pÅ�,bá 0x39CB:xuÇŽn 0x39CC:mào 0x39CD:fÇŽng,bÄ“ng 0x39CE:yá,yà,qiÄ� 0x39CF:gÄ�ng 0x39D0:sÇ’ng 0x39D1:huÄ« 0x39D2:yù 0x39D3:guÄ� 0x39D4:guài 0x39D5:liÇ” 0x39D6:è 0x39D7:zÇ�,jÇ�,zhÇ� 0x39D8:zì 0x39D9:bì,bié 0x39DA:wÇŽ 0x39DC:liè 0x39DF:kuÇŽi 0x39E1:hài,wèi 0x39E2:yÄ«n 0x39E3:zhÅ« 0x39E4:chòng 0x39E5:xiÇŽn 0x39E6:xuàn,hÅ�ng 0x39E8:qiú 0x39E9:pèi 0x39EA:guÇ�,wÄ›i 0x39EB:ér,ruán,ruí 0x39EC:gÇ’ng 0x39ED:qióng 0x39EE:hÅ« 0x39EF:lÇŽo 0x39F0:lì 0x39F1:chèn 0x39F2:sÇŽn 0x39F3:zhuò,bÄ�i 0x39F4:wÇ’,é 0x39F5:póu 0x39F6:kÄ“ng 0x39F7:tùn 0x39F8:pÄ“ng 0x39F9:tè 0x39FA:tà 0x39FB:zhuó,zú,dÅ« 0x39FC:biào 0x39FD:gù 0x39FE:hÅ« 0x3A00:bÇ�ng 0x3A01:zhì,zhí 0x3A02:dÇ’ng 0x3A03:duÇ�,chéng 0x3A04:zhÅ�u,zhào,tiáo 0x3A05:nèi,ruì 0x3A06:lÇ�n 0x3A07:pó 0x3A08:jÇ� 0x3A09:mín,wÄ›n 0x3A0A:wÄ›i,tuÇ’,duò 0x3A0B:chÄ› 0x3A0C:gòu 0x3A0D:bÄ�ng 0x3A0E:rú 0x3A0F:tÄ�n 0x3A10:bÇ” 0x3A11:zÅ�ng 0x3A12:kuÄ« 0x3A13:láo 0x3A14:hàn 0x3A15:yíng 0x3A16:zhì 0x3A17:jié 0x3A18:xÇ�ng 0x3A19:xié,xì 0x3A1A:xún,sÇ”n 0x3A1B:shÇŽn,shàn 0x3A1C:qián 0x3A1D:xiÄ“ 0x3A1E:sù 0x3A1F:hÄ�i 0x3A20:mì 0x3A21:hún 0x3A22:pÄ« 0x3A24:huì 0x3A25:nà 0x3A26:sÇ’ng 0x3A27:bèn 0x3A28:chÅ�u,liù 0x3A29:jié 0x3A2A:huàng,huÇŽng 0x3A2B:lÇŽn 0x3A2D:hù 0x3A2E:dÅ�u 0x3A2F:huò 0x3A30:gÇ”n 0x3A31:yáo 0x3A32:cè 0x3A33:guÇ�,jì 0x3A34:jiàn 0x3A35:jiÇŽn 0x3A36:dÇŽo 0x3A37:jìn 0x3A38:mà 0x3A39:huì,xuÄ› 0x3A3A:miÇŽn,mén 0x3A3B:cán,shÇŽn,zàn,chàn 0x3A3C:lüè 0x3A3D:pì 0x3A3E:yàng 0x3A3F:jù 0x3A40:jù 0x3A41:què 0x3A43:qiÄ�n 0x3A44:shÄ�i 0x3A46:jiù,zú 0x3A47:huò,zuó,huá 0x3A48:yÇ”n 0x3A49:dá,lÄ�,xÄ«,xié 0x3A4A:xuÄ�n 0x3A4B:xiÄ�o,sù 0x3A4C:fèi 0x3A4D:cè 0x3A4E:yè 0x3A50:dèn 0x3A52:qín 0x3A53:huÇ� 0x3A54:tún 0x3A56:qiáng 0x3A57:xí 0x3A58:nÇ� 0x3A59:sÄ�i 0x3A5A:méng 0x3A5B:tuán 0x3A5C:lÇŽn 0x3A5D:háo 0x3A5E:cì 0x3A5F:zhài 0x3A60:Ä�o,piÇŽo,póu 0x3A61:luÇ’ 0x3A62:miè,mì 0x3A64:fÅ« 0x3A66:xié,xÄ« 0x3A67:bó 0x3A68:huì 0x3A69:qÇ�ng 0x3A6A:xié 0x3A6D:bó 0x3A6E:qián 0x3A6F:pó 0x3A70:jiÇŽo 0x3A71:jué 0x3A72:kÇ”n 0x3A73:sÇ’ng 0x3A74:jú,qú 0x3A75:è 0x3A76:niè 0x3A77:qiÄ�n 0x3A78:dié 0x3A79:dié 0x3A7B:qÄ«,guì,guÇ� 0x3A7C:zhÄ« 0x3A7D:qí,chì,è 0x3A7E:zhuì,qí 0x3A7F:kÅ« 0x3A80:yú 0x3A81:qín,kÄ�n,qiàn,qián 0x3A82:kÅ« 0x3A83:hé 0x3A84:fú 0x3A86:dÇ� 0x3A87:xiàn 0x3A88:guì 0x3A89:hé 0x3A8A:qún 0x3A8B:hàn,hÄ› 0x3A8C:tÇ’ng 0x3A8D:bó,bèi 0x3A8E:shÇŽn,nà 0x3A8F:bÇ� 0x3A90:lù 0x3A91:yè 0x3A92:ní 0x3A93:chuái 0x3A94:sàn 0x3A95:diào,chuò 0x3A96:lù 0x3A97:tÇ’u 0x3A98:liÇŽn 0x3A99:kÄ› 0x3A9A:sàn 0x3A9B:zhÄ›n 0x3A9C:chuÇŽi,duÇ’ 0x3A9D:liàn 0x3A9E:mào 0x3AA0:qiÄ�n,qiàn,jiÄ�n 0x3AA1:kài,kÄ› 0x3AA2:shÇŽo 0x3AA3:xiÄ�o,qiÄ�o 0x3AA4:bì 0x3AA5:zhÄ� 0x3AA6:yìn 0x3AA7:xÄ« 0x3AA8:shàn 0x3AA9:sù 0x3AAA:sà 0x3AAB:ruì 0x3AAC:chuÅ�,zhuó 0x3AAD:lú 0x3AAE:líng 0x3AAF:chá 0x3AB1:huàn 0x3AB4:jiá 0x3AB5:bàn 0x3AB6:hú 0x3AB7:dÇ’u 0x3AB9:lÇ’u 0x3ABA:jÅ« 0x3ABB:juàn 0x3ABC:kÄ› 0x3ABD:suÇ’ 0x3ABE:luò,gé 0x3ABF:zhé 0x3AC0:dÇ�ng 0x3AC1:duàn 0x3AC2:zhù 0x3AC3:yÇŽn 0x3AC4:páng 0x3AC5:chá 0x3ACA:yÇ�,Ä› 0x3ACD:yóu,yÇŽo 0x3ACE:huÄ«,gÇ”n 0x3ACF:yÇŽo 0x3AD0:yÇŽo 0x3AD1:zhÇ�,shí 0x3AD2:gÇ’ng 0x3AD3:qÇ� 0x3AD4:gèn 0x3AD7:hòu 0x3AD8:mì 0x3AD9:fú 0x3ADA:hÅ« 0x3ADB:guàng 0x3ADC:tÇŽn 0x3ADD:dÄ« 0x3ADF:yán 0x3AE2:qù 0x3AE4:chÇŽng 0x3AE5:mÇ�ng 0x3AE6:tÄ�o 0x3AE7:bào 0x3AE8:Ä�n 0x3AEB:xiÇŽn 0x3AEF:mào 0x3AF0:làng,lÇŽng 0x3AF1:nÇŽn,nàn 0x3AF2:bèi 0x3AF3:chén 0x3AF5:fÄ“i 0x3AF6:zhÇ’u 0x3AF7:jÄ« 0x3AF8:jiÄ“ 0x3AF9:shù 0x3AFB:kùn 0x3AFC:dié 0x3AFD:lù 0x3B02:yú 0x3B03:tái 0x3B04:chàn 0x3B05:màn 0x3B06:mÇ�n 0x3B07:huàn 0x3B08:wÄ“n 0x3B09:nuÇŽn 0x3B0A:huàn,huÇŽn 0x3B0B:hóu 0x3B0C:jìng 0x3B0D:bó 0x3B0E:xiÇŽn 0x3B0F:lì 0x3B10:jìn,zÄ« 0x3B12:mÇŽng 0x3B13:piào 0x3B14:háo 0x3B15:yáng 0x3B17:xiàn 0x3B18:sù 0x3B19:wÄ›i 0x3B1A:chè 0x3B1B:xÄ« 0x3B1C:jìn 0x3B1D:céng,sÅ�ng 0x3B1E:hè 0x3B1F:fÄ“n 0x3B20:shài,shà 0x3B21:líng 0x3B23:duì 0x3B24:qÄ« 0x3B25:pù,bó 0x3B26:yuè 0x3B27:bó 0x3B29:huì 0x3B2A:dié 0x3B2B:yàn 0x3B2C:jù 0x3B2D:jiào 0x3B2E:nàn 0x3B2F:liè 0x3B30:yú 0x3B31:tì 0x3B32:tiÄ�n 0x3B33:wÇ” 0x3B34:hÇ’ng 0x3B35:xiáo 0x3B36:hào 0x3B38:tiÄ�o 0x3B39:zhÄ“ng 0x3B3B:huÄ�ng,hÄ�ng,huÇŽng 0x3B3C:fù 0x3B3F:tÅ«n 0x3B41:réng 0x3B42:jiÇŽo 0x3B44:xìn 0x3B47:yuàn 0x3B48:jué 0x3B49:huá 0x3B4B:bàng 0x3B4C:móu 0x3B4E:gÄ�ng 0x3B4F:wÄ›i 0x3B51:mèi 0x3B52:sì 0x3B53:biàn 0x3B54:lú 0x3B55:qÅ« 0x3B58:gé,hé 0x3B59:zhé 0x3B5A:lÇš 0x3B5B:pài,bà 0x3B5C:róng 0x3B5D:qiú,òu 0x3B5E:liè 0x3B5F:gÇ’ng 0x3B60:xiÇŽn 0x3B61:xì,xìn 0x3B62:xÄ«n 0x3B64:niÇŽo 0x3B68:xié 0x3B69:liè 0x3B6A:fÅ« 0x3B6B:cuó,cuán 0x3B6C:zhuó 0x3B6D:bÄ�,bèi,biÄ“ 0x3B6E:zuò,zÇŽn 0x3B6F:zhé,dié 0x3B70:zuÄ«,zuÇ� 0x3B71:hé 0x3B72:jí 0x3B74:jiÄ�n 0x3B78:tú 0x3B79:xián 0x3B7A:yÇŽn,yàn,Ä�n 0x3B7B:táng 0x3B7C:tà 0x3B7D:dÇ� 0x3B7E:jué 0x3B7F:áng 0x3B80:hán 0x3B81:xiáo 0x3B82:jú 0x3B83:wÄ“i,ruí 0x3B84:bÇŽng 0x3B85:zhuÄ« 0x3B86:niè 0x3B87:tiàn 0x3B88:nài 0x3B8B:yÇ’u 0x3B8C:mián 0x3B8F:nài,nì,nà 0x3B90:shÄ›ng,sì 0x3B91:chÄ�,qì 0x3B92:yÄ�n,yÄ«n 0x3B93:gèn 0x3B94:chòng,tóng 0x3B95:ruÇŽn 0x3B96:jiá 0x3B97:qín 0x3B98:máo 0x3B99:è 0x3B9A:lì 0x3B9B:chí,yí 0x3B9C:zÄ�ng 0x3B9D:hé 0x3B9E:jié 0x3B9F:niÇŽn,kÄ� 0x3BA1:guàn 0x3BA2:hóu 0x3BA3:gài 0x3BA5:bèn,fàn 0x3BA6:suÇ’,sè 0x3BA7:wÅ«,wÄ“n 0x3BA8:jì 0x3BA9:xÄ« 0x3BAA:qióng 0x3BAB:hé,xiá,qià 0x3BAC:wÄ“ng 0x3BAD:xián 0x3BAE:jié 0x3BAF:hún,huá 0x3BB0:pí 0x3BB1:shÄ“n 0x3BB2:chÅ�u 0x3BB3:zhèn 0x3BB5:zhÄ�n 0x3BB6:shuò 0x3BB7:jÄ« 0x3BB8:sòng 0x3BB9:zhÇ� 0x3BBA:bÄ›n 0x3BBE:lÇŽng 0x3BBF:bì 0x3BC0:xuàn 0x3BC1:péi 0x3BC2:dài 0x3BC4:zhÄ« 0x3BC5:pí,bÄ« 0x3BC6:chÇŽn,shàn 0x3BC7:bì 0x3BC8:sù 0x3BC9:huò 0x3BCA:hén 0x3BCB:jiÇ’ng,yÇ�ng 0x3BCC:chuán 0x3BCD:jiÇŽng 0x3BCE:nèn 0x3BCF:gÇ” 0x3BD0:fÇŽng 0x3BD3:tà,dá 0x3BD4:cuì 0x3BD5:xÄ« 0x3BD6:dé 0x3BD7:xián 0x3BD8:kuÇŽn 0x3BD9:zhé 0x3BDA:tÄ� 0x3BDB:hú 0x3BDC:cuì 0x3BDD:lù 0x3BDE:juàn 0x3BDF:lù 0x3BE0:qiàn 0x3BE1:pào,páo 0x3BE2:zhèn 0x3BE4:lì 0x3BE5:cáo,zÄ�o 0x3BE6:qí 0x3BE9:tì 0x3BEA:líng 0x3BEB:qú 0x3BEC:liÇŽn 0x3BED:lÇ” 0x3BEE:shú 0x3BEF:gòng,dÇŽn,jù 0x3BF0:zhé 0x3BF1:pÄ�o 0x3BF2:jìn 0x3BF3:qíng 0x3BF6:zÅ�ng 0x3BF7:pú 0x3BF8:jÇ�n 0x3BF9:biÇŽo 0x3BFA:jiàn 0x3BFB:gÇ”n 0x3BFE:zÄ�o 0x3BFF:liè,là 0x3C00:lí 0x3C01:luÇ’ 0x3C02:shÄ›n 0x3C03:mián,miàn 0x3C04:jiàn 0x3C05:dí,zhé 0x3C06:bèi 0x3C08:liÇŽn 0x3C0A:xián 0x3C0B:pín 0x3C0C:què 0x3C0D:lóng 0x3C0E:zuì 0x3C10:jué 0x3C11:shÄ�n 0x3C12:xué 0x3C14:xiè 0x3C16:lÇŽn 0x3C17:qí 0x3C18:yí 0x3C19:nuó 0x3C1A:lí 0x3C1B:yuè 0x3C1D:yÇ� 0x3C1E:chÄ« 0x3C1F:jì,qì 0x3C20:hÄ�ng 0x3C21:xiè 0x3C22:kÄ“ng 0x3C23:zÄ« 0x3C24:hÄ“,qiè 0x3C25:xì,huì 0x3C26:qù 0x3C27:hÄ�i 0x3C28:xiÄ� 0x3C29:hÄ�i 0x3C2A:guÄ« 0x3C2B:chÄ�n 0x3C2C:xún 0x3C2D:xÅ« 0x3C2E:shèn 0x3C2F:kòu,tòu,tÇ’u,hòu 0x3C30:xiÄ�,qiè,hÄ“ 0x3C31:shà 0x3C32:yÅ«,xù 0x3C33:yà,yÄ� 0x3C34:pÇ’u 0x3C35:zú 0x3C36:yÇ’u,Ç’u 0x3C37:zì 0x3C38:liÇŽn 0x3C39:xiÄ�n,xiàn,hÇŽn 0x3C3A:xià,xiá 0x3C3B:yÇ�,xÄ«,hòu 0x3C3C:shà,qiè 0x3C3D:yàn 0x3C3E:jiào 0x3C3F:xÄ« 0x3C40:chÇ� 0x3C41:shì,kuÇŽn 0x3C42:kÄ�ng 0x3C43:yÇ�n 0x3C44:hÄ“i,mò 0x3C45:yì 0x3C46:xÄ« 0x3C47:sè,xì 0x3C48:jìn 0x3C49:yè 0x3C4A:yÅ�u 0x3C4B:què 0x3C4C:yé,chè 0x3C4D:luán 0x3C4E:kÅ«n 0x3C4F:zhèng 0x3C54:xiÄ“ 0x3C56:cuì 0x3C57:xiÅ« 0x3C58:àn 0x3C59:xiÇ”,guÇŽ 0x3C5A:cán 0x3C5B:chuÇŽn,bù 0x3C5C:zhá 0x3C5E:yì,lÄ� 0x3C5F:pÄ«,pÇ� 0x3C60:kÅ«,gÅ« 0x3C61:shÄ“ng 0x3C62:láng 0x3C63:tuÇ� 0x3C64:xÄ« 0x3C65:líng,lèng 0x3C66:qÄ« 0x3C67:wò,yuÇŽn 0x3C68:liàn 0x3C69:dú 0x3C6A:mèn 0x3C6B:làn 0x3C6C:wÄ›i 0x3C6D:duàn 0x3C6E:kuài 0x3C6F:ái 0x3C70:zÇŽi 0x3C71:huì 0x3C72:yì 0x3C73:mò 0x3C74:zì 0x3C75:fèn 0x3C76:péng,bÄ“ng 0x3C78:bì 0x3C79:lì 0x3C7A:lú 0x3C7B:luò 0x3C7C:hÄ�i 0x3C7D:zhÄ›n,qín 0x3C7E:gÄ�i,kÄ�i 0x3C7F:què,hù,qiÇŽng 0x3C80:zhÄ“n,chÄ“n 0x3C81:kÅ�ng,zhÅ�ng 0x3C82:chéng 0x3C83:jiù 0x3C84:jué,kÅ« 0x3C85:jì 0x3C86:líng 0x3C88:sháo,táo 0x3C89:què 0x3C8A:ruì 0x3C8B:chuò 0x3C8C:nèng 0x3C8D:zhÄ« 0x3C8E:lóu 0x3C8F:pÄ�o 0x3C92:bào,qú 0x3C93:róng,shù 0x3C94:xiÄ�n 0x3C95:lèi 0x3C96:xiÄ�o 0x3C97:fÅ« 0x3C98:qú 0x3C9A:shÄ� 0x3C9B:zhÇ� 0x3C9C:tán 0x3C9D:rÇ’ng 0x3C9E:sÅ«,zú 0x3C9F:yÇ�ng 0x3CA0:máo 0x3CA1:nài 0x3CA2:biàn 0x3CA4:shuÄ�i 0x3CA5:táng 0x3CA6:hàn 0x3CA7:sào 0x3CA8:róng 0x3CAA:dÄ“ng 0x3CAB:pú 0x3CAC:jiÄ�o 0x3CAD:tÇŽn 0x3CAF:rán 0x3CB0:níng 0x3CB1:liè 0x3CB2:dié 0x3CB3:dié,zhì 0x3CB4:zhòng 0x3CB6:lÇœ 0x3CB7:dàn 0x3CB8:xÄ« 0x3CB9:guÇ� 0x3CBA:jí 0x3CBB:nì 0x3CBC:yì,chà 0x3CBD:niàn,rÄ›n 0x3CBE:yÇ” 0x3CBF:wÇŽng 0x3CC0:guò 0x3CC1:zè 0x3CC2:yán,yàn 0x3CC3:cuì 0x3CC4:xián 0x3CC5:jiÇŽo 0x3CC6:tÇ’u 0x3CC7:fù 0x3CC8:pèi 0x3CCA:yÅ�u,zhÅ�ng 0x3CCB:qiÅ« 0x3CCC:yÄ� 0x3CCD:bù 0x3CCE:biàn 0x3CCF:shì 0x3CD0:zhá 0x3CD1:yì 0x3CD2:biàn 0x3CD4:duì 0x3CD5:lán 0x3CD6:yÄ« 0x3CD7:chài,chà 0x3CD8:chÅ�ng 0x3CD9:xuàn 0x3CDA:xù 0x3CDB:yú,yóu 0x3CDC:xiÅ« 0x3CE0:tà 0x3CE1:guÅ� 0x3CE5:lòng 0x3CE6:xiè 0x3CE7:chè,rè 0x3CE8:jiÇŽn 0x3CE9:tÄ�n 0x3CEA:pì 0x3CEB:zÇŽn 0x3CEC:xuán 0x3CED:xián 0x3CEE:niào 0x3CF4:mì 0x3CF5:jì 0x3CF6:nÇ’u,rÇ” 0x3CF7:hÅ«,mÇ�n,wÄ›n,tuì 0x3CF8:huÄ� 0x3CF9:wÇŽng,wÄ�ng 0x3CFA:yóu 0x3CFB:zé 0x3CFC:bì,yù 0x3CFD:mÇ� 0x3CFE:qiÄ�ng 0x3CFF:xiè 0x3D00:fàn,fÄ�n 0x3D01:yì 0x3D02:tÄ�n 0x3D03:lèi 0x3D04:yÇ’ng 0x3D06:jìn 0x3D07:shè,máng 0x3D08:yìn 0x3D09:jÇ� 0x3D0B:sù 0x3D0E:nài 0x3D0F:wÇŽng 0x3D10:miàn,miÇŽn 0x3D11:sù 0x3D12:yì 0x3D13:shÄ�i 0x3D14:xÄ«,yì,sè 0x3D15:jí 0x3D16:luò 0x3D17:yÅ�u 0x3D18:mào 0x3D19:zhÇŽ,zhá 0x3D1A:suì 0x3D1B:zhì 0x3D1C:biàn 0x3D1D:lí 0x3D25:qiào 0x3D26:guàn 0x3D27:xÄ« 0x3D28:zhèn 0x3D29:yÅ�ng 0x3D2A:niè 0x3D2B:jùn,yá 0x3D2C:xiè 0x3D2D:yÇŽo 0x3D2E:xiè 0x3D2F:zhÄ« 0x3D30:néng 0x3D32:sÄ« 0x3D33:lÇ’ng 0x3D34:chén 0x3D35:mì 0x3D36:què,hú 0x3D37:dÄ�n 0x3D38:shÇŽn 0x3D3C:sù 0x3D3D:xiè 0x3D3E:bó 0x3D3F:dÇ�ng 0x3D40:zú 0x3D42:shù 0x3D43:shé 0x3D44:hàn,yù 0x3D45:tÄ�n,tàn 0x3D46:gÇŽo 0x3D4A:nà 0x3D4B:mì 0x3D4C:xún 0x3D4D:mèn 0x3D4E:jiàn 0x3D4F:cuÇ� 0x3D50:jué 0x3D51:hè 0x3D52:fèi,pài,bì 0x3D53:shí 0x3D54:chÄ› 0x3D55:shèn 0x3D56:nÇœ 0x3D57:píng 0x3D58:màn 0x3D5D:yì 0x3D5E:chóu 0x3D60:kÅ« 0x3D61:báo 0x3D62:léi 0x3D63:kÄ› 0x3D64:shà 0x3D65:bì 0x3D66:suí 0x3D67:gé,yì 0x3D68:pì,bó 0x3D69:yì 0x3D6A:xián,yàn,yán 0x3D6B:nì 0x3D6C:yíng 0x3D6D:zhÇ” 0x3D6E:chún 0x3D6F:féng 0x3D70:xù 0x3D71:piÇŽo 0x3D72:wÇ” 0x3D73:liáo 0x3D74:cáng 0x3D75:zòu,jù 0x3D76:zuÅ� 0x3D77:biàn 0x3D78:yào 0x3D79:huán,mò 0x3D7A:pài 0x3D7B:xiÅ« 0x3D7D:lÄ›i 0x3D7E:qìng,jìng 0x3D7F:xiào 0x3D80:jiÄ�o 0x3D81:guó,huò 0x3D84:yán 0x3D85:xué 0x3D86:zhÅ«,chú 0x3D87:héng 0x3D88:yíng 0x3D89:xÄ« 0x3D8C:lián 0x3D8D:xiÇŽn 0x3D8E:huán 0x3D8F:yÄ«n 0x3D91:liàn 0x3D92:shÇŽn,shÄ›n,tàn 0x3D93:cáng 0x3D94:bèi 0x3D95:jiÇŽn 0x3D96:shù 0x3D97:fàn,fán 0x3D98:diàn 0x3D9A:bà 0x3D9B:yú 0x3D9E:nÇŽng 0x3D9F:lÄ›i 0x3DA0:yì 0x3DA1:dài,huÇ’ 0x3DA3:chán,yín 0x3DA4:chÇŽo 0x3DA5:gÄ�n 0x3DA6:jìn 0x3DA7:nèn 0x3DAB:liÇŽo 0x3DAC:mò 0x3DAD:yÇ’u 0x3DAF:liù 0x3DB0:hán 0x3DB2:yòng 0x3DB3:jìn 0x3DB4:chÇ� 0x3DB5:rèn 0x3DB6:nóng 0x3DB9:hòng 0x3DBA:tiàn 0x3DBC:Ä�i,xÄ« 0x3DBD:guÄ� 0x3DBE:biÄ�o 0x3DBF:bó 0x3DC0:qióng 0x3DC2:shù 0x3DC3:chuÇ� 0x3DC4:huÇ� 0x3DC5:chÇŽo 0x3DC6:fù 0x3DC7:huÄ«,guài 0x3DC8:è 0x3DC9:wèi 0x3DCA:fén 0x3DCB:tán 0x3DCD:lún 0x3DCE:hè 0x3DCF:yÇ’ng 0x3DD0:huÇ� 0x3DD2:yú 0x3DD3:zÇ’ng 0x3DD4:yàn 0x3DD5:qiú 0x3DD6:zhào 0x3DD7:jiÇ’ng 0x3DD8:tái 0x3DDF:tuì 0x3DE0:lín 0x3DE1:jiÇ’ng 0x3DE2:zhÇŽ 0x3DE3:xÄ«ng 0x3DE4:hù,xuè 0x3DE6:xù 0x3DEA:cuì 0x3DEB:qÇ�ng 0x3DEC:mò 0x3DEE:zÄ�o 0x3DEF:bèng 0x3DF0:chÄ«,lí 0x3DF3:yàn 0x3DF4:gé 0x3DF5:mò 0x3DF6:bèi 0x3DF7:juÇŽn 0x3DF8:dié 0x3DF9:zhào,shào 0x3DFB:wú 0x3DFC:yàn 0x3DFE:jué 0x3DFF:xiÄ�n 0x3E00:tái 0x3E01:hÇŽn 0x3E03:diÇŽn 0x3E04:jì 0x3E05:jié,jí 0x3E06:kào 0x3E07:zuÇŽn 0x3E09:xiè 0x3E0A:lài,là 0x3E0B:fán 0x3E0C:huò 0x3E0D:xì 0x3E0E:niè 0x3E0F:mí 0x3E10:rán 0x3E11:cuàn 0x3E12:yín,jÄ«ng 0x3E13:mì 0x3E15:jué 0x3E16:qÅ« 0x3E17:tóng 0x3E18:wàn 0x3E19:zhÄ“ 0x3E1A:lÇ�,lì 0x3E1B:sháo 0x3E1C:kòng 0x3E1D:xiÄ�n,kÇŽn 0x3E1E:zhé 0x3E1F:zhÄ« 0x3E20:tiÇŽo 0x3E21:shÅ« 0x3E22:bèi 0x3E23:yè 0x3E24:piàn 0x3E25:chàn 0x3E26:hù,jià 0x3E27:kèn 0x3E28:jiÅ« 0x3E29:Ä�n 0x3E2A:chún 0x3E2B:qián 0x3E2C:bèi 0x3E2D:bÄ� 0x3E2E:fén 0x3E2F:kÄ“ 0x3E30:tuó 0x3E31:tuó 0x3E32:zuó 0x3E33:líng 0x3E35:guÇ� 0x3E36:yÄ�n 0x3E37:shì 0x3E38:hÇ’u,Ç’u,kÇ’u 0x3E39:liè,luÅ� 0x3E3A:shÄ� 0x3E3B:sì 0x3E3D:bèi 0x3E3E:rèn 0x3E3F:dú 0x3E40:bó 0x3E41:liáng 0x3E42:qiÇŽn 0x3E43:fèi 0x3E44:jì 0x3E45:zÇ’ng 0x3E46:huÄ« 0x3E47:hé,jiÄ�n 0x3E48:lí 0x3E49:yuán,wán 0x3E4A:yuè 0x3E4B:xiÅ« 0x3E4C:chÇŽn,shèng 0x3E4D:dí 0x3E4E:léi 0x3E4F:jÇ�n 0x3E50:chóng 0x3E51:sì 0x3E52:pÇ” 0x3E53:yÇŽo 0x3E54:jiÄ�ng 0x3E55:huÄ�n 0x3E56:huàn 0x3E57:tÄ�o 0x3E58:rù 0x3E59:wÄ›ng 0x3E5A:yíng 0x3E5B:ráo 0x3E5C:yín 0x3E5D:shì 0x3E5E:yín,yÇ�n,yá 0x3E5F:jué,kuài 0x3E60:tún 0x3E61:xuán 0x3E62:jiÄ�,gÄ� 0x3E63:zhÅ�ng 0x3E64:qiè 0x3E65:zhù 0x3E66:diÄ�o 0x3E68:yòu 0x3E6B:yí 0x3E6C:shÇ� 0x3E6D:yì 0x3E6E:mò 0x3E71:què 0x3E72:xiÄ�o,xiào 0x3E73:wú 0x3E74:gÄ“ng 0x3E75:yÇ�ng 0x3E76:tíng 0x3E77:shÇ� 0x3E78:ní 0x3E79:gÄ“ng 0x3E7A:tà 0x3E7B:wÅ�,wÄ“i 0x3E7C:jú 0x3E7D:chÇŽn 0x3E7E:piÇŽo,jiào 0x3E7F:zhuó,zhào 0x3E80:hÅ«,náo 0x3E81:nÇŽo 0x3E82:yán,gÇŽn 0x3E83:gÇ’u 0x3E84:yÇ”,yú 0x3E85:hóu 0x3E87:sÄ« 0x3E88:chÄ« 0x3E89:hù 0x3E8A:yàng 0x3E8B:wÄ“ng 0x3E8C:xiàn 0x3E8D:pín 0x3E8E:róng 0x3E8F:lóu 0x3E90:lÇŽo,sÄ�o 0x3E91:shÄ�n,shàn,sÄ�o,shÇŽn 0x3E92:xiÄ�o,nÇŽo,qiÄ�o,xiào 0x3E93:zé 0x3E94:hài,huÄ« 0x3E95:fán,biàn 0x3E96:hÇŽn 0x3E97:chÄ�n 0x3E98:zhàn 0x3E9A:tÇŽ 0x3E9B:zhù 0x3E9C:nóng 0x3E9D:hàn 0x3E9E:yú 0x3E9F:zhuó 0x3EA0:yòu 0x3EA1:lì 0x3EA2:huò,huÅ� 0x3EA3:xÄ« 0x3EA4:xiÄ�n 0x3EA5:chán 0x3EA6:lián 0x3EA8:sÄ« 0x3EA9:jiù,qiú 0x3EAA:pú 0x3EAB:qiú 0x3EAC:gÇ’ng 0x3EAD:zÇ� 0x3EAE:yú 0x3EB1:réng 0x3EB2:niÇ” 0x3EB3:méi 0x3EB4:bÄ� 0x3EB5:jiú 0x3EB7:xù 0x3EB8:píng 0x3EB9:biàn 0x3EBA:mào 0x3EBF:yí 0x3EC0:yú 0x3EC2:píng 0x3EC3:qÅ« 0x3EC4:bÇŽo 0x3EC5:huì 0x3EC9:bù 0x3ECA:máng 0x3ECB:là 0x3ECC:tú 0x3ECD:wú 0x3ECE:lì 0x3ECF:líng 0x3ED1:jì 0x3ED2:jùn 0x3ED3:zÅ�u 0x3ED4:duÇ’ 0x3ED5:jué 0x3ED6:dài 0x3ED7:bèi 0x3EDD:là 0x3EDE:bÄ«n,bÄ�n 0x3EDF:suí 0x3EE0:tú 0x3EE1:xuÄ“,dié 0x3EE7:duò 0x3EEA:suì 0x3EEB:bì 0x3EEC:tÅ« 0x3EED:sè 0x3EEE:càn 0x3EEF:tú 0x3EF0:miÇŽn 0x3EF1:jÄ«n 0x3EF2:lÇš 0x3EF5:zhàn 0x3EF6:bÇ� 0x3EF7:jí 0x3EF8:zÄ“n 0x3EF9:xuÄ�n 0x3EFA:lì 0x3EFD:suì,xuán 0x3EFE:yÅ�ng 0x3EFF:shÇ” 0x3F02:é 0x3F07:qióng 0x3F08:luó 0x3F09:zhèn 0x3F0A:tún 0x3F0B:gÅ«,rÇ” 0x3F0C:yÇ” 0x3F0D:lÄ›i 0x3F0E:bó 0x3F0F:nÄ›i 0x3F10:pián 0x3F11:liàn 0x3F12:tÇŽng 0x3F13:lián 0x3F14:wÄ“n 0x3F15:dÄ�ng 0x3F16:lì 0x3F17:tíng 0x3F18:wÇŽ 0x3F19:zhòu 0x3F1A:gÄ�ng 0x3F1B:xíng 0x3F1C:àng 0x3F1D:fàn 0x3F1E:pèng,bèng 0x3F1F:bó 0x3F20:tuó 0x3F21:shÅ« 0x3F22:yí 0x3F23:bó 0x3F24:qiè 0x3F25:tÇ’u,kÇŽo 0x3F26:gÇ’ng 0x3F27:tóng 0x3F28:hán 0x3F29:chéng,shèng 0x3F2A:jié 0x3F2B:huàn,huà 0x3F2C:xìng 0x3F2D:diàn 0x3F2E:chÄ�i,qì 0x3F2F:dòng 0x3F30:pí 0x3F31:ruÇŽn,jùn 0x3F32:liè 0x3F33:shÄ›ng 0x3F34:Ç’u 0x3F35:dì 0x3F36:yú 0x3F37:chuán,zhuÄ�n 0x3F38:róng 0x3F39:kÄ�ng,huÄ�ng 0x3F3A:táng 0x3F3B:cóng 0x3F3C:piáo 0x3F3D:chuÇŽng,shuÇŽng 0x3F3E:lù 0x3F3F:tóng,zhòng 0x3F40:zhèng 0x3F41:lì 0x3F42:sà 0x3F43:pÄ�n 0x3F44:sÄ« 0x3F46:dÄ�ng 0x3F47:hú 0x3F48:yì 0x3F49:xiàn 0x3F4A:xiè 0x3F4B:luó 0x3F4C:liù 0x3F4E:tán,xÄ«n 0x3F4F:gàn 0x3F51:tán 0x3F55:yóu 0x3F56:nán 0x3F58:gÇŽng 0x3F59:jùn 0x3F5A:chì 0x3F5B:gÅ�u,qú 0x3F5C:wÇŽn 0x3F5D:lì 0x3F5E:liú 0x3F5F:liè 0x3F60:xiá 0x3F61:bÄ“i 0x3F62:ÇŽn 0x3F63:yù 0x3F64:jú 0x3F65:róu 0x3F66:xún 0x3F67:zÄ« 0x3F68:cuó 0x3F69:càn 0x3F6A:zÄ›ng 0x3F6B:yÅ�ng 0x3F6C:fù,pì 0x3F6D:ruÇŽn 0x3F6F:xí 0x3F70:shù 0x3F71:jiÇŽo,jiÅ«,niú 0x3F72:jiÇŽo,xiÇ” 0x3F73:xÅ« 0x3F74:zhàng 0x3F77:shuì 0x3F78:chén 0x3F79:fÇŽn,fàn 0x3F7A:jí 0x3F7B:zhÄ« 0x3F7D:gù 0x3F7E:wù 0x3F80:qiè,qÇ” 0x3F81:shù 0x3F82:hÄ�i 0x3F83:tuó 0x3F84:dú,chóu 0x3F85:zÇ� 0x3F86:rán 0x3F87:mù 0x3F88:fù 0x3F89:líng 0x3F8A:jí,cì,sè 0x3F8B:xiÅ«,xiù 0x3F8C:xuÇŽn 0x3F8D:nái 0x3F8E:yÄ�,xiÄ� 0x3F8F:jiè,yá 0x3F90:lì 0x3F91:dá,hè,da 0x3F92:rú,rù 0x3F93:yuÄ�n 0x3F94:lÇš 0x3F95:shÄ›n 0x3F96:lÇ� 0x3F97:liàng 0x3F98:gÄ›ng 0x3F99:xìn,xì 0x3F9A:xiÄ“ 0x3F9B:qÇ�n 0x3F9C:qiè 0x3F9D:chè 0x3F9E:yóu 0x3F9F:bù 0x3FA0:kuáng 0x3FA1:què 0x3FA2:ài 0x3FA3:qÄ«n 0x3FA4:qiÄ�ng 0x3FA5:chù 0x3FA6:pèi,pÄ“i 0x3FA7:kuò,luÇ’ 0x3FA8:yÄ«,qÇ�,ÇŽi 0x3FA9:guÄ�i 0x3FAA:shÄ›ng 0x3FAB:piÄ�n 0x3FAD:zhòu 0x3FAE:huáng 0x3FAF:huÄ«,tuí 0x3FB0:hú 0x3FB1:bèi 0x3FB4:zhÄ� 0x3FB5:jì 0x3FB6:gÇ” 0x3FB7:xÄ« 0x3FB8:gÇŽo 0x3FB9:chái,zhài,chí 0x3FBA:mà 0x3FBB:zhù,chú 0x3FBC:tuÇ� 0x3FBD:zhuì,tuí 0x3FBE:xiÄ�n,lián 0x3FBF:láng 0x3FC3:zhì,dài 0x3FC4:ài 0x3FC5:xiÇŽn 0x3FC6:guÅ� 0x3FC7:xí,xì 0x3FC9:tuÇ� 0x3FCA:cÇŽn 0x3FCB:sào 0x3FCC:xiÄ�n 0x3FCD:jiè 0x3FCE:fèn,fén 0x3FCF:qún 0x3FD1:yào 0x3FD2:dÇŽo,zhòu,chóu 0x3FD3:jiá 0x3FD4:lÄ›i 0x3FD5:yán 0x3FD6:lú,lù 0x3FD7:tuí 0x3FD8:yíng 0x3FD9:pì 0x3FDA:luò 0x3FDB:lì 0x3FDC:biÄ› 0x3FDE:mào 0x3FDF:bái 0x3FE0:huàng 0x3FE2:yào 0x3FE3:hÄ“ 0x3FE4:chÇ”n 0x3FE5:hé 0x3FE6:nìng 0x3FE7:chóu 0x3FE8:lì 0x3FE9:tÇŽng 0x3FEA:huán 0x3FEB:bì 0x3FEC:bÄ� 0x3FED:chè,lè 0x3FEE:yàng 0x3FEF:dá 0x3FF0:áo,bì 0x3FF1:xué 0x3FF3:zÄ« 0x3FF4:dÄ� 0x3FF5:rÇŽn 0x3FF6:bÄ�ng 0x3FF7:cuó,cÄ�o 0x3FF8:wÇŽn,mán 0x3FF9:tà 0x3FFA:báo 0x3FFB:gÄ�n 0x3FFC:yán 0x3FFD:xÄ« 0x3FFE:zhù 0x3FFF:yÇŽ 0x4000:fàn 0x4001:yòu 0x4002:Ä�n 0x4003:tuí 0x4004:méng 0x4005:shè 0x4006:jìn 0x4007:gÇ” 0x4008:jì 0x4009:qiáo 0x400A:jiÇŽo 0x400B:yán 0x400C:xì 0x400D:kàn 0x400E:miÇŽn 0x400F:xuàn,xún 0x4010:shÄ�n 0x4011:wò 0x4012:qiÄ�n 0x4013:huàn 0x4014:rèn 0x4015:zhèn 0x4016:tiÄ�n 0x4017:jué,xuè 0x4018:xié,jÄ« 0x4019:qì 0x401A:áng 0x401B:mèi,wù,mà 0x401C:gÇ” 0x401E:tÄ�o 0x401F:fán 0x4020:jù 0x4021:chàn,diÄ�n,tàn 0x4022:shùn 0x4023:bì,mà 0x4024:mào 0x4025:shuò 0x4026:gÇ” 0x4027:hÇ’ng 0x4028:huà,guÄ� 0x4029:luò 0x402A:háng 0x402B:jiá,tÇ”n 0x402C:quán 0x402D:gÄ�i 0x402E:huÄ�ng 0x402F:bÇ” 0x4030:gÇ” 0x4031:fÄ“ng 0x4032:mù 0x4033:ài 0x4034:yÇ�ng,yà,kÄ“ng 0x4035:shùn 0x4036:liàng,lÇŽng 0x4037:jié 0x4038:chì 0x4039:jié,zhÇŽ,shè,jiá,yà 0x403A:chÅ�u,tÄ�o 0x403B:pìng 0x403C:chÄ“n,rèn 0x403D:yán 0x403E:dÇ” 0x403F:dì 0x4041:liàng 0x4042:xiàn 0x4043:biÄ�o 0x4044:xìng 0x4045:mÄ›ng,mèng 0x4046:yè 0x4047:mì 0x4048:qì 0x4049:qì 0x404A:wò 0x404B:xiè,zhé 0x404C:yù 0x404D:qià,kÄ�n 0x404E:chéng,tíng,chÄ“ng 0x404F:yÇŽo 0x4050:yÄ«ng,yìng 0x4051:yáng 0x4052:jí,zí 0x4053:zÅ�ng,zÇ’ng,jiè 0x4054:xuÄ�n,hàn 0x4055:mín 0x4056:lÅ�u 0x4057:kÇŽi 0x4058:yÇŽo 0x4059:yÇŽn 0x405A:sÇ”n,qióng 0x405B:guì 0x405C:huàng,huÇŽng 0x405D:yíng,yÇ�ng 0x405E:shÄ›ng 0x405F:chá 0x4060:lián 0x4062:xuán 0x4063:chuán 0x4064:chè,zhé,huÇ� 0x4065:nì 0x4066:qù 0x4067:miáo 0x4068:huò 0x4069:yú 0x406A:zhÇŽn 0x406B:hú,méng 0x406C:céng 0x406D:biÄ�o 0x406E:qián 0x406F:xÄ«,xié 0x4070:jiÇŽng 0x4071:kÅ�u 0x4072:mái 0x4073:mÇŽng 0x4074:zhÇŽn,shÇŽn 0x4075:biÇŽn,huán 0x4076:jÄ«,jiÇŽo 0x4077:jué,wù 0x4078:náng,nÇ’ng 0x4079:bì 0x407A:shì,yì 0x407B:shuò,lì 0x407C:mò 0x407D:liè 0x407E:miè 0x407F:mò 0x4080:xÄ« 0x4081:chán 0x4082:qú 0x4083:jiào 0x4084:huò 0x4085:xiÄ�n 0x4086:xù 0x4087:niÇ” 0x4088:tóng 0x4089:hóu 0x408A:yù 0x408C:chÅ�ng 0x408D:bó 0x408E:zuÇŽn,cuÄ�n 0x408F:diÄ�o 0x4090:zhuÅ� 0x4091:jÄ« 0x4092:qià 0x4094:xìng 0x4095:huì 0x4096:shí 0x4097:kÅ« 0x4099:duÄ« 0x409A:yáo 0x409B:yú 0x409C:bàng 0x409D:jié 0x409E:zhè 0x409F:jiÄ� 0x40A0:shÇ� 0x40A1:dÇ� 0x40A2:dÇ’ng 0x40A3:cí 0x40A4:fù 0x40A5:mín 0x40A6:zhÄ“n,zhÄ›n 0x40A7:zhÄ›n 0x40A9:yàn,qìng 0x40AA:qiÇŽo,diào 0x40AB:hÄ�ng,hóng 0x40AC:gÇ’ng 0x40AD:qiÄ�o 0x40AE:lüè 0x40AF:guài 0x40B0:là 0x40B1:ruì 0x40B2:fÇŽ 0x40B3:cuÇ’,chÇŽ 0x40B4:yán 0x40B5:gÅ�ng 0x40B6:jié 0x40B7:guÄ�i 0x40B8:guó 0x40B9:suÇ’ 0x40BA:wÇ’,kÄ“ 0x40BB:zhèng 0x40BC:niè 0x40BD:diào 0x40BE:lÇŽi 0x40BF:tà 0x40C0:cuì 0x40C1:yÄ� 0x40C2:gÇ”n 0x40C5:dÄ« 0x40C7:mián 0x40C8:jiÄ“ 0x40C9:mín 0x40CA:jÇ” 0x40CB:yú 0x40CC:zhÄ“n,yÄ«n 0x40CD:zhào 0x40CE:zhà,zhÇŽ 0x40CF:xÄ«ng 0x40D1:bÄ�n,pán 0x40D2:hé 0x40D3:gòu,gÅ�u 0x40D4:hóng,qióng 0x40D5:láo,luò 0x40D6:wù 0x40D7:bÅ�,zhuó 0x40D8:kÄ“ng 0x40D9:lù 0x40DA:cù,zú 0x40DB:lián 0x40DC:yÄ« 0x40DD:qiào 0x40DE:shú 0x40E0:xuàn 0x40E1:jÄ«n,qín 0x40E2:qÄ«n 0x40E3:huÇ� 0x40E4:sù 0x40E5:chuáng 0x40E6:dÅ«n 0x40E7:lóng 0x40E9:náo 0x40EA:tán 0x40EB:dÇŽn 0x40EC:wÄ›i,kuÇ�,lÄ›i 0x40ED:gÇŽn 0x40EE:dá 0x40EF:lì 0x40F0:cÄ� 0x40F1:xiàn 0x40F2:pán 0x40F3:là,liè 0x40F4:zhÅ« 0x40F5:niÇŽo 0x40F6:huái,guÄ«,guài 0x40F7:yíng 0x40F8:xiàn,jÄ«n 0x40F9:làn 0x40FA:mó 0x40FB:bà 0x40FD:guÇ�,zhÄ«,fú 0x40FE:bÇ� 0x40FF:fÅ« 0x4100:huò 0x4101:yì 0x4102:liù 0x4104:yÄ«n 0x4105:juàn 0x4106:huó,huàn 0x4107:chéng 0x4108:dòu,xiáng 0x4109:é 0x410B:yÇŽn,yàn 0x410C:zhuì,chuò 0x410D:zhà 0x410E:qÇ� 0x410F:yú 0x4110:quàn 0x4111:huó 0x4112:niè 0x4113:huáng 0x4114:jÇ” 0x4115:shè 0x4118:péng 0x4119:míng 0x411A:cáo 0x411B:lóu 0x411C:lí,chÄ« 0x411D:chuÄ�ng 0x411F:cuÄ« 0x4120:shàn 0x4121:dÄ�n 0x4122:qí 0x4124:lài,lÇŽn 0x4125:líng 0x4126:liÇŽo 0x4127:réng 0x4128:yú 0x4129:yì 0x412A:diÇŽo 0x412B:qÇ� 0x412C:yí 0x412D:nián 0x412E:fÅ« 0x412F:jiÇŽn 0x4130:yá 0x4131:fÄ�ng 0x4132:ruì 0x4133:xiÄ�n 0x4136:bì,bó 0x4137:shí 0x4138:pò 0x4139:nián 0x413A:zhì,tí 0x413B:táo,cháo,tiÄ�o 0x413C:tiÇŽn 0x413D:tiÇŽn 0x413E:rù,rÇ’ng 0x413F:yì 0x4140:liè 0x4141:àn 0x4142:hé 0x4143:qióng,jiòng 0x4144:lì 0x4145:guÄ«,wÄ� 0x4146:zì 0x4147:sù 0x4148:yuàn 0x4149:yà 0x414A:chá 0x414B:wÇŽn 0x414C:juÄ�n 0x414D:tÇ�ng 0x414E:yÇ’u 0x414F:huì 0x4150:jiÇŽn 0x4151:ruí 0x4152:máng 0x4153:jÇ” 0x4154:zÄ« 0x4155:jÅ« 0x4156:Ä�n,ÇŽn,yÄ�n,yÇŽn,yè 0x4157:suì 0x4158:lái 0x4159:hùn 0x415A:quÇŽn 0x415B:chÄ�ng 0x415C:duò,chuí,tuÇ’ 0x415D:kÅ�ng 0x415E:nè 0x415F:cÇŽn 0x4160:tí 0x4161:xÇ” 0x4162:jiù 0x4163:huáng 0x4164:qì 0x4165:jié,gé 0x4166:máo 0x4167:yÄ�n,yìn 0x4169:zhÇ�,qí 0x416A:tuí 0x416C:ài 0x416D:páng 0x416E:càng 0x416F:táng 0x4170:Ä›n 0x4171:hùn 0x4172:qí 0x4173:chú,zÅ�u 0x4174:suÇ’ 0x4175:zhuó 0x4176:nòu 0x4177:tú,chú 0x4178:shÄ“n,zú 0x4179:lÇ’u 0x417A:biÄ�o,miÇŽo 0x417B:lí 0x417C:mán,màn 0x417D:xÄ«n,gÇ” 0x417E:cén,qián 0x417F:huá,huáng 0x4180:mÄ›i 0x4181:gÄ�o 0x4182:lián 0x4183:dào 0x4184:zhÇŽn 0x4185:zÄ« 0x4188:zhì 0x4189:bà 0x418A:cuì,mèi 0x418B:qiÅ« 0x418D:lóng 0x418E:xiÄ�n 0x418F:fèi,fèn 0x4190:guó 0x4191:chéng 0x4192:jiù 0x4193:è,ruÇŽn 0x4194:chÅ�ng 0x4195:yuè 0x4196:hóng 0x4197:yÇŽo 0x4198:yÄ�,zÄ� 0x4199:yáo 0x419A:tóng,dòng 0x419B:zhà 0x419C:yòu 0x419D:xuè,zhú 0x419E:yÇŽo 0x419F:kè,Ä�o 0x41A0:huàn 0x41A1:láng 0x41A2:yuè 0x41A3:chén 0x41A6:shèn 0x41A8:níng 0x41A9:míng 0x41AA:hÅ�ng 0x41AB:chuÄ�ng 0x41AC:yÇ”n 0x41AD:xuÄ�n 0x41AE:jìn 0x41AF:zhuó 0x41B0:yÅ« 0x41B1:tÄ�n 0x41B2:kÄ�ng 0x41B3:qióng 0x41B5:chéng 0x41B6:jiÅ« 0x41B7:xuè 0x41B8:zhÄ“ng 0x41B9:chÅ�ng,tÇ’ng 0x41BA:pÄ�n 0x41BB:qiào 0x41BD:qú 0x41BE:lán,làn 0x41BF:yì 0x41C0:róng 0x41C1:sÄ« 0x41C2:qiÄ�n 0x41C3:sì 0x41C5:fá 0x41C7:méng 0x41C8:huà 0x41CB:hài 0x41CC:qiào 0x41CD:chù,qì 0x41CE:què 0x41CF:duì 0x41D0:lì 0x41D1:bà,pÄ« 0x41D2:jiè 0x41D3:xÅ« 0x41D4:luò,nuò 0x41D6:yÇ”n 0x41D7:zhÅ�ng 0x41D8:hù 0x41D9:yÇ�n 0x41DB:zhÇ� 0x41DC:qiÇŽn,qiàn 0x41DE:gÄ�n,gÇŽn 0x41DF:jiàn 0x41E0:zhù 0x41E1:zhù 0x41E2:kÇ”,gù 0x41E3:niè 0x41E4:ruì 0x41E5:zé 0x41E6:ÇŽng,yÄ«ng 0x41E7:zhì,jÄ« 0x41E8:gòng,xiáng 0x41E9:yì,yè 0x41EA:chÄ« 0x41EB:jÄ« 0x41EC:zhÅ«,shÅ«,chuÇŽng 0x41ED:lÇŽo 0x41EE:rèn 0x41EF:róng 0x41F0:zhÄ“ng 0x41F1:nà 0x41F2:cè,jiÄ� 0x41F5:yí 0x41F6:jué,wò 0x41F7:bié 0x41F8:chéng,tÄ«ng 0x41F9:jùn 0x41FA:dòu 0x41FB:wÄ›i 0x41FC:yì 0x41FD:zhé,zhì 0x41FE:yán 0x4200:sÄ�n 0x4201:lún 0x4202:píng 0x4203:zhÇŽo 0x4204:hán 0x4205:yù 0x4206:dài 0x4207:zhào 0x4208:féi,bÄ� 0x4209:shà,qiè 0x420A:líng 0x420B:tà 0x420C:qÅ« 0x420D:máng,méng 0x420E:yè 0x420F:báo,fú 0x4210:guì 0x4211:guÇŽ 0x4212:nÇŽn,lÇŽn 0x4213:gé,qià 0x4215:shí,tí,jÄ«,yí 0x4216:kÄ“ 0x4217:suÇ’ 0x4218:cí 0x4219:zhòu 0x421A:tái 0x421B:kuài 0x421C:qìn 0x421D:xÅ« 0x421E:dÇ” 0x421F:cè,zhá 0x4220:huÇŽn,yuàn 0x4221:cÅ�ng,sÅ�ng 0x4222:sÇŽi,xÇ� 0x4223:zhèng 0x4224:qián 0x4225:jÄ«n 0x4226:zÅ�ng 0x4227:wÄ›i 0x422A:xì 0x422B:nà 0x422C:pú 0x422D:sÅ�u,huái 0x422E:jù 0x422F:zhÄ“n 0x4230:shÄ�o 0x4231:tÄ�o 0x4232:bÄ�n,pán 0x4233:tà 0x4234:qiàn 0x4235:wÄ“ng 0x4236:róng 0x4237:luò 0x4238:hú 0x4239:sÇ’u 0x423A:zhÅ�ng 0x423B:pú 0x423C:miè,mì 0x423D:jÄ«n 0x423E:shÄ�o,shuò 0x423F:mì 0x4240:shù 0x4241:líng 0x4242:lÄ›i 0x4243:jiÇŽng 0x4244:léng 0x4245:zhì 0x4246:diÇŽo 0x4248:sÇŽn 0x4249:gÅ«,hú 0x424A:fàn 0x424B:mèi 0x424C:suì 0x424D:jiÇŽn 0x424E:táng 0x424F:xiè 0x4250:kÅ« 0x4251:wú 0x4252:fán 0x4253:luò 0x4254:cÄ�n 0x4255:céng 0x4256:líng 0x4257:yÄ« 0x4258:cóng 0x4259:yún 0x425A:méng 0x425B:yù,ÇŽo 0x425C:zhì 0x425D:yÇ� 0x425E:dÇŽn 0x425F:huò 0x4260:wéi 0x4261:tán 0x4262:sè 0x4263:xiè 0x4264:sÇ’u 0x4265:sÇ’ng 0x4266:qiÄ�n 0x4267:liú,liÇ” 0x4268:yì 0x426A:lèi 0x426B:lí 0x426C:fèi 0x426D:liè 0x426E:lìn 0x426F:xiàn 0x4270:xiào,jiÇŽo 0x4271:Å�u 0x4272:mí 0x4273:xiÄ�n,xiÇŽn 0x4274:ráng 0x4275:zhuàn,zuÇŽn 0x4276:shuÄ�ng 0x4277:yán 0x4278:biàn 0x4279:líng 0x427A:hóng 0x427B:qí 0x427C:liào 0x427D:bÇŽn 0x427E:bì 0x427F:hú 0x4280:hú 0x4282:cè,sè 0x4283:pèi 0x4284:qióng 0x4285:míng 0x4286:jiù,qiÇ” 0x4287:bù 0x4288:méi 0x4289:sÇŽn 0x428A:wèi 0x428D:lí 0x428E:quÇŽn,qún 0x4290:hún 0x4291:xiÇŽng 0x4293:shì 0x4294:yíng 0x4296:nÇŽn 0x4297:huáng 0x4298:jiù 0x4299:yÄ�n 0x429B:sà 0x429C:tuán 0x429D:xiè 0x429E:zhé,chè 0x429F:mén 0x42A0:xì 0x42A1:mán 0x42A3:huáng 0x42A4:tán,dàn 0x42A5:xiào 0x42A6:yè 0x42A7:bì 0x42A8:luó 0x42A9:fán 0x42AA:lì 0x42AB:cuÇ� 0x42AC:chuÄ� 0x42AD:dào,chóu 0x42AE:dí 0x42AF:kuàng 0x42B0:chú 0x42B1:xiÄ�n 0x42B2:chàn,chÇŽn 0x42B3:mí,mó 0x42B4:qiàn 0x42B5:qiú 0x42B6:zhèn 0x42BA:hù 0x42BB:gÄ�n 0x42BC:chÇ� 0x42BD:guài,jué 0x42BE:mù 0x42BF:bó 0x42C0:huà 0x42C1:gÄ›ng 0x42C2:yáo 0x42C3:mào 0x42C4:wÇŽng 0x42C8:rú,nÇŽ 0x42C9:xué 0x42CA:zhÄ“ng 0x42CB:mín 0x42CC:jiÇŽng 0x42CE:zhàn 0x42CF:zuó,zhà 0x42D0:yuè 0x42D1:liè 0x42D3:zhòu 0x42D4:bì 0x42D5:rèn 0x42D6:yù 0x42D8:chuò 0x42D9:Ä›r 0x42DA:yì 0x42DB:mÇ� 0x42DC:qìng 0x42DE:wÇŽng 0x42DF:jì 0x42E0:bÇ” 0x42E2:biÄ“ 0x42E3:fán,pó 0x42E4:yuè 0x42E5:lí 0x42E6:fán 0x42E7:qú 0x42E8:fÇ” 0x42E9:ér 0x42EA:Ä“ 0x42EB:zhÄ“ng 0x42EC:tiÄ�n 0x42ED:yù 0x42EE:jìn 0x42EF:qÇ� 0x42F0:jú 0x42F1:lái 0x42F2:chÄ› 0x42F3:bÄ›i 0x42F4:niù 0x42F5:yì,yè 0x42F6:xÇ”,xié 0x42F7:móu 0x42F8:xún 0x42F9:fú 0x42FB:nín 0x42FC:tÄ«ng,yíng 0x42FD:bÄ›ng 0x42FE:zhÇŽ,nà 0x42FF:wÄ“i 0x4300:kÄ“ 0x4301:yÄ�o 0x4302:òu 0x4303:xiÄ�o,shuò 0x4304:gÄ›ng 0x4305:táng 0x4306:guì 0x4307:huì 0x4308:tÄ�,tà 0x430A:yáo 0x430B:dÄ� 0x430C:qì 0x430D:jÇ�n 0x430E:lüè 0x430F:mì 0x4310:mì 0x4311:jiÄ�n 0x4312:lù 0x4313:fán 0x4314:Å�u 0x4315:mí 0x4316:jié 0x4317:fÇ” 0x4318:biè,bì 0x4319:huàng 0x431A:sÅ« 0x431B:yáo 0x431C:niè 0x431D:jÄ«n,jìn 0x431E:liÇŽn 0x431F:bó,bì 0x4320:jiÄ�n 0x4321:tÇ� 0x4322:líng 0x4323:zuÇŽn 0x4324:shÄ«,zhÇ� 0x4325:yÇ�n 0x4326:dào 0x4327:chóu 0x4328:cÄ�,cài 0x4329:miè 0x432A:yÇŽn 0x432B:lÇŽn 0x432C:chóng 0x432D:jiÄ�o 0x432E:shuÄ�ng 0x432F:quÄ�n,quán,guàn 0x4330:niè 0x4331:luò 0x4333:shÄ« 0x4334:luò 0x4335:zhú 0x4337:chÅ�u,chóu 0x4338:juàn 0x4339:jiÇ’ng 0x433A:Ä›r 0x433B:yì 0x433C:ruì 0x433D:cÇŽi 0x433E:rén 0x433F:fú 0x4340:lán 0x4341:suì 0x4342:yú 0x4343:yóu 0x4344:diÇŽn 0x4345:líng 0x4346:zhù 0x4347:tà 0x4348:píng 0x4349:zhÇŽi 0x434A:jiÄ�o 0x434B:chuí 0x434C:bù 0x434D:kòu 0x434E:cùn,xiÇŽn 0x4350:hÇŽn 0x4351:hÇŽn 0x4352:mÇ’u 0x4353:hù 0x4354:gÅ�ng 0x4355:dÄ«,dÇ� 0x4356:fú 0x4357:xuàn 0x4358:mí 0x4359:méi,mÇ’u 0x435A:làng 0x435B:gù 0x435C:zhào 0x435D:tà 0x435E:yù 0x435F:zòng 0x4360:lí 0x4361:lù 0x4362:wú 0x4363:léi 0x4364:jÇ� 0x4365:lì 0x4366:lí 0x4368:pÅ�,fèi 0x4369:yÇŽng 0x436A:wà 0x436B:tuó 0x436C:pÄ“ng 0x436E:zhào 0x436F:guÇ� 0x4371:xú 0x4372:nái 0x4373:què,jué,chuò 0x4374:wÄ›i 0x4375:zhÄ“ng 0x4376:dÅ�ng 0x4377:wÄ›i 0x4378:bó 0x437A:huàn 0x437B:xuàn 0x437C:zÄ�n,cán 0x437D:lì 0x437E:yÇŽn 0x437F:huáng 0x4380:xuè 0x4381:hú 0x4382:bÇŽo 0x4383:rÇŽn 0x4384:xiÄ�o,tiáo 0x4385:pò 0x4386:liào 0x4387:zhÅ�u 0x4388:yì 0x4389:xù 0x438A:luò,pò 0x438B:kào 0x438C:chù 0x438E:nà 0x438F:hán 0x4390:chÇŽo 0x4391:lù 0x4392:zhÇŽn 0x4393:tà 0x4394:fÅ« 0x4395:hÅ�ng 0x4396:zÄ“ng 0x4397:qiáo 0x4398:sù 0x4399:pÄ«n 0x439A:guàn 0x439C:hÅ«n 0x439D:chú 0x439F:ér 0x43A0:ér,nuò 0x43A1:ruÇŽn 0x43A2:qÇ� 0x43A3:sì 0x43A4:jú 0x43A6:yÇŽn 0x43A7:bàng,póu 0x43A8:yè,àn 0x43A9:zÄ« 0x43AA:nè 0x43AB:chuàng 0x43AC:bà 0x43AD:cÄ�o 0x43AE:tì 0x43AF:hàn,hÇŽn 0x43B0:zuó 0x43B1:bà,bÄ“i 0x43B2:zhé 0x43B3:wà 0x43B4:gÄ“ng,shèng 0x43B5:bì 0x43B6:èr 0x43B7:zhù 0x43B8:wù 0x43B9:wén 0x43BA:zhì 0x43BB:zhòu 0x43BC:lù 0x43BD:wén 0x43BE:gÇ”n 0x43BF:qiú 0x43C0:là 0x43C1:zÇŽi 0x43C2:sÇ’u 0x43C3:mián,míng 0x43C4:dÇ�,zhì 0x43C5:qì 0x43C6:cáo 0x43C7:piào 0x43C8:lián,luán 0x43C9:shÄ« 0x43CA:lóng 0x43CB:sù 0x43CC:qì,yì 0x43CD:yuàn,yuÄ�n 0x43CE:féng 0x43CF:xÅ« 0x43D0:jué 0x43D1:dì 0x43D2:piàn,pàn 0x43D3:guÇŽn 0x43D4:niÇ”,zhÇ’u,ròu,nÇœ 0x43D5:rèn 0x43D6:zhèn,yÇ�n 0x43D7:gài 0x43D8:pì 0x43D9:tÇŽn,dàn,zhuàn 0x43DA:chÇŽo,miÇŽo 0x43DB:chÇ”n 0x43DC:hÄ“ 0x43DD:zhuÄ�n 0x43DE:mò 0x43DF:bié,bì 0x43E0:qì,lÄ� 0x43E1:shì 0x43E2:bÇ� 0x43E3:jué 0x43E4:sì 0x43E6:guÄ�,tián 0x43E7:nà,ná,chÇ� 0x43E8:huÇ�,duÄ« 0x43E9:xÄ« 0x43EA:èr 0x43EB:xiÅ« 0x43EC:móu 0x43EE:xí 0x43EF:zhì 0x43F0:rùn 0x43F1:jú 0x43F2:dié,tÄ« 0x43F3:zhè 0x43F4:shào 0x43F5:mÄ›ng,mÇŽng,máng 0x43F6:bì 0x43F7:hàn 0x43F8:yú 0x43F9:xiàn,chÄ“n 0x43FA:pÄ�ng 0x43FB:néng 0x43FC:cán,zhàn 0x43FD:bù,péi 0x43FF:qÇ� 0x4400:jì 0x4401:zhuó,dÅ« 0x4402:lù 0x4403:jùn,zhÅ«n 0x4404:xiàn,hàn 0x4405:xÄ« 0x4406:cÇŽi 0x4407:wÄ›n,chún 0x4408:zhí 0x4409:zì,nÇŽo 0x440A:kÅ«n,hún,hùn 0x440B:cÅ�ng 0x440C:tiÇŽn 0x440D:chù 0x440E:dÄ« 0x440F:chÇ”n,shÇ”n 0x4410:qiÅ« 0x4411:zhé 0x4412:zhÄ� 0x4413:róu 0x4414:bÇ�n,biàn 0x4415:jí 0x4416:xÄ« 0x4417:zhÅ«,dÇ” 0x4418:jué 0x4419:gé 0x441A:jÄ« 0x441B:dÄ� 0x441C:chÄ“n 0x441D:suò 0x441E:ruò 0x441F:xiÇŽng,gÅ�u 0x4420:huÇŽng 0x4421:qí 0x4422:zhù,zhòu,chù 0x4423:sÇ”n 0x4424:chÄ�i,cuó 0x4425:wÄ›ng 0x4426:kÄ“ 0x4427:kào,hè 0x4428:gÇ”,què 0x4429:gÄ�i,guÄ«,kÇŽi 0x442A:fàn 0x442B:cÅ�ng 0x442C:cáo 0x442D:zhì,dì 0x442E:chÇŽn 0x442F:léi,lÄ›i 0x4430:xiÅ« 0x4431:zhài 0x4432:zhé 0x4433:yú 0x4434:guì 0x4435:gÅ�ng,huáng 0x4436:zÄ�n,jÇ�n,qián 0x4437:dÄ�n 0x4438:huò,guó 0x4439:sÅ�u,sào,xiào 0x443A:tàn,tán 0x443B:gÅ« 0x443C:xì 0x443D:mán 0x443E:duó 0x443F:ào,ÇŽo 0x4440:pì,pÇ� 0x4441:wù 0x4442:ÇŽi 0x4443:méng 0x4444:pì,yì 0x4445:méng 0x4446:yÇŽng 0x4447:zhì 0x4448:bó 0x4449:yíng 0x444A:wéi,wèi 0x444B:rÇŽng 0x444C:lán,làn 0x444D:yÄ�n,yàn,yÇ�ng 0x444E:chÇŽn 0x444F:quán,huÄ�n 0x4450:zhÄ›n 0x4451:pú 0x4453:tái 0x4454:fèi 0x4455:shÇ” 0x4457:dàng 0x4458:cuó 0x4459:tÄ�n,rán,tiàn 0x445A:tián 0x445B:chÇ� 0x445C:tà,tiè 0x445D:jiÇŽ 0x445E:shùn 0x445F:huáng 0x4460:liÇŽo 0x4463:chÄ“n 0x4464:jìn 0x4465:è,sà 0x4466:gÅ�u 0x4467:fú 0x4468:duò 0x446A:è 0x446B:bÄ“ng 0x446C:tÄ�o,yào,tiÄ�o 0x446D:dì 0x446F:dì 0x4470:bù 0x4471:wÇŽn 0x4472:zhào 0x4473:lún 0x4474:qí 0x4475:mù 0x4476:qiàn 0x4478:zÅ�ng 0x4479:sÅ�u,sÄ�o 0x447B:yóu 0x447C:zhÅ�u 0x447D:tà 0x447F:sù 0x4480:bù 0x4481:xí 0x4482:jiÇŽng 0x4483:cào 0x4484:fù 0x4485:téng 0x4486:chè 0x4487:fù 0x4488:fèi 0x4489:wÇ” 0x448A:xÄ« 0x448B:yÇŽng 0x448C:mìng 0x448D:pÇŽng 0x448E:mÇŽng 0x448F:sÄ“ng 0x4490:méng,mèng 0x4491:cÇŽo 0x4492:tiáo 0x4493:kÇŽi 0x4494:bài 0x4495:xiÇŽo 0x4496:xìn 0x4497:qì 0x449A:shÇŽo 0x449B:huàn 0x449C:niú 0x449D:xiáo 0x449E:chén,yín 0x449F:dÄ�n 0x44A0:fÄ“ng,xiá 0x44A1:yÇ�n 0x44A2:áng 0x44A3:rÇŽn 0x44A4:rì 0x44A5:mán 0x44A6:fàn 0x44A7:qÅ«,qù 0x44A8:shÇ�,sì 0x44A9:hé 0x44AA:biàn 0x44AB:dài 0x44AC:mò 0x44AD:dÄ›ng 0x44B0:kuÄ�ng 0x44B2:chà 0x44B3:duÇ’ 0x44B4:yÇ’u 0x44B5:hào 0x44B7:guÄ� 0x44B8:xuè 0x44B9:lèi 0x44BA:jÇ�n 0x44BB:qÇ� 0x44BC:qÅ« 0x44BD:wÇŽng 0x44BE:yÄ« 0x44BF:liáo 0x44C2:yán 0x44C3:yì 0x44C4:yín 0x44C5:qí 0x44C6:zhé 0x44C7:xì,hè,kè 0x44C8:yì 0x44C9:yé,yÄ“ 0x44CA:wú,yú 0x44CB:zhÄ« 0x44CC:zhì 0x44CD:hÇŽn 0x44CE:chuò 0x44CF:fÅ« 0x44D0:chún 0x44D1:píng 0x44D2:kuÇŽi 0x44D3:chóu 0x44D5:tuÇ’ 0x44D6:qióng 0x44D7:cÅ�ng 0x44D8:gÄ�o,jiù 0x44D9:kuÄ�,guÄ�i 0x44DA:qÅ«,cú 0x44DB:qÅ« 0x44DC:zhÄ« 0x44DD:mèng 0x44DE:lì 0x44DF:zhÅ�u,liè 0x44E0:tà 0x44E1:zhÄ« 0x44E2:gù 0x44E3:liÇŽng 0x44E4:hÅ« 0x44E5:là 0x44E6:diÇŽn 0x44E7:cì 0x44E8:yÄ«ng 0x44EB:qí 0x44EC:zhuó 0x44ED:chà 0x44EE:mào 0x44EF:dú 0x44F0:yÄ«n 0x44F1:chái,zuÄ« 0x44F2:ruì 0x44F3:hÄ›n,xié 0x44F4:ruÇŽn 0x44F5:fÅ« 0x44F6:lài 0x44F7:xìng 0x44F8:jiÄ�n 0x44F9:yì 0x44FA:mÄ›i 0x44FC:máng,hè 0x44FD:jì 0x44FE:suÅ� 0x44FF:hàn 0x4501:lì 0x4502:zÇ�,zÇŽi 0x4503:zÇ” 0x4504:yáo,yào 0x4505:gÄ“ 0x4506:lí 0x4507:qÇ�,ái 0x4508:gòng 0x4509:lì,suàn 0x450A:bÄ«ng 0x450B:suÅ� 0x450E:sù 0x450F:chòu 0x4510:jiÄ�n 0x4511:xié,yé,tú 0x4512:bèi 0x4513:xÇ” 0x4514:jìng 0x4515:pú 0x4516:líng 0x4517:xiáng 0x4518:zuò 0x4519:diào 0x451A:chún 0x451B:qÇ�ng 0x451C:nán 0x451D:zhÄ�i 0x451E:lÇœ 0x451F:yí 0x4520:shÇŽo,shÄ�o,shuò 0x4521:yú 0x4522:huá 0x4523:lí 0x4524:pÄ� 0x4527:lí 0x452A:shuÇŽng 0x452C:yì 0x452D:nìng 0x452E:sÄ« 0x452F:kù 0x4530:fù 0x4531:yÄ« 0x4532:dÄ“ng,chéng 0x4533:rán 0x4534:cè,cuì,chuà 0x4536:tí,tái 0x4537:qín 0x4538:biÇŽo,biÄ�o 0x4539:suì 0x453A:wéi,wÄ›i 0x453B:dÅ«n,duÄ« 0x453C:sè,zé 0x453D:ài 0x453E:qì,è 0x453F:zÇ”n 0x4540:kuÇŽn 0x4541:fÄ›i 0x4543:yìn 0x4545:sÇŽo 0x4546:dòu 0x4547:huì 0x4548:xiè 0x4549:zé 0x454A:tán 0x454B:táng 0x454C:zhì 0x454D:yì 0x454E:fú 0x454F:é 0x4551:jùn 0x4552:jiÄ� 0x4553:chá,chuì 0x4554:xián 0x4555:màn 0x4557:bì 0x4558:líng,lÇ�ng 0x4559:jié 0x455A:kuì 0x455B:jiá 0x455D:chÄ“ng 0x455E:làng 0x455F:xÄ«ng 0x4560:fèi 0x4561:lǘ 0x4562:zhÇŽ 0x4563:hé 0x4564:jÄ« 0x4565:nÇ� 0x4566:yíng 0x4567:xiào,jiÇŽo 0x4568:téng 0x4569:lÇŽo 0x456A:zé 0x456B:kuí 0x456D:qián,xián 0x456E:jú,qÅ« 0x456F:piáo 0x4570:fán 0x4571:tóu 0x4572:lÇ�n 0x4573:mí 0x4574:zhuó 0x4575:xié 0x4576:hù 0x4577:mí 0x4578:jiÄ“ 0x4579:zá 0x457A:cóng 0x457B:lì 0x457C:rán 0x457D:zhú 0x457E:yín,yán 0x457F:hàn 0x4581:yì 0x4582:luán 0x4583:yuè,lÇŽ 0x4584:rán 0x4585:líng 0x4586:niàng 0x4587:yù 0x4588:nüè 0x458A:yì 0x458B:nüè 0x458C:yì 0x458D:qián 0x458E:xiá 0x458F:chÇ”,chù 0x4590:yín 0x4591:mì 0x4592:xÄ« 0x4593:nà 0x4594:kÇŽn,hàn 0x4595:zÇ” 0x4596:xiá 0x4597:yán 0x4598:tú 0x4599:tÄ« 0x459A:wÅ« 0x459B:suÇ’ 0x459C:yín 0x459D:chóng 0x459E:zhÇ’u 0x459F:mÇŽng 0x45A0:yuán 0x45A1:nÇœ 0x45A2:miáo 0x45A3:zÇŽo 0x45A4:wÇŽn 0x45A5:lí 0x45A6:qÅ«,zhuÅ� 0x45A7:nà 0x45A8:shí,zhì 0x45A9:bì 0x45AA:zÄ«,cÄ« 0x45AB:bàng 0x45AD:juàn,juÄ�n 0x45AE:xiÇŽng 0x45AF:kuí,wÄ� 0x45B0:pài 0x45B1:kuÄ�ng 0x45B2:xún,zÅ�ng 0x45B3:zhà,zhé 0x45B4:yáo 0x45B5:kÅ«n 0x45B6:huÄ« 0x45B7:xÄ« 0x45B8:é 0x45B9:yáng,mÇ� 0x45BA:tiáo 0x45BB:yóu 0x45BC:jué 0x45BD:lí 0x45BF:lí 0x45C0:chÄ“ng 0x45C1:jì,qÄ« 0x45C2:hÇ” 0x45C3:zhàn 0x45C4:fÇ” 0x45C5:cháng 0x45C6:guÇŽn,guÄ�n 0x45C7:jú,qÅ« 0x45C8:méng 0x45C9:chÄ�ng 0x45CA:tàn 0x45CB:móu 0x45CC:xÄ«ng 0x45CD:lÇ�,luó 0x45CE:yÄ�n 0x45CF:sÅ�u 0x45D0:shÄ« 0x45D1:yì 0x45D2:bìng 0x45D3:cÅ�ng 0x45D4:hóu,hòu 0x45D5:wÇŽn 0x45D6:dì 0x45D7:jÄ« 0x45D8:gé 0x45D9:hán 0x45DA:bó 0x45DB:xiÅ« 0x45DC:liú 0x45DD:cán 0x45DE:cán 0x45DF:yì 0x45E0:xuán 0x45E1:yán,yÄ�n 0x45E2:zÇŽo 0x45E3:hàn 0x45E4:yóng 0x45E5:zÅ�ng 0x45E7:kÄ�ng 0x45E8:yú 0x45E9:qÄ« 0x45EA:zhè 0x45EB:má 0x45EE:shuÇŽng 0x45EF:jìn 0x45F0:guàn 0x45F1:pú,pù,pÇ” 0x45F2:lìn 0x45F4:tíng 0x45F5:jiÄ�ng 0x45F6:là 0x45F7:yì 0x45F8:yÅ�ng 0x45F9:cì 0x45FA:yÇŽn,dàn 0x45FB:jié 0x45FC:xÅ«n 0x45FD:wèi 0x45FE:xiÇŽn 0x45FF:níng,nÇ�ng 0x4600:fù 0x4601:gé 0x4603:mò 0x4604:zhù 0x4605:nái 0x4606:xiÇŽn 0x4607:wén 0x4608:lì 0x4609:cán 0x460A:miè 0x460B:jiÄ�n 0x460C:nì 0x460D:chài 0x460E:wÄ�n 0x460F:xù 0x4610:nÇœ 0x4611:mài 0x4612:zuÄ« 0x4613:kàn 0x4614:kÄ� 0x4615:háng 0x4618:yù,sù 0x4619:wèi 0x461A:zhú 0x461D:yì 0x461F:diÄ�o 0x4620:fú 0x4621:bÇ� 0x4622:zhÇ” 0x4623:zÇ�,zhì 0x4624:shù 0x4625:xiá,jiá 0x4626:ní,nÇ� 0x4628:jiÇŽo 0x4629:xún,xuàn 0x462A:chÅ�ng 0x462B:nòu 0x462C:róng 0x462D:zhì 0x462E:sÄ�ng,sàng 0x4630:shÄ�n 0x4631:yù 0x4633:jÄ«n 0x4635:lù 0x4636:hÄ�n,hàn 0x4637:biÄ“ 0x4638:yì 0x4639:zuì,cuì 0x463A:zhàn 0x463B:yù 0x463C:wÇŽn 0x463D:ní 0x463E:guÇŽn,guàn 0x463F:jué 0x4640:bÄ›ng 0x4641:cán 0x4643:duò 0x4644:qì,zhÇŽ 0x4645:yÄ�o,yào 0x4646:kuì 0x4647:ruán,nuÇŽn 0x4648:hóu 0x4649:xún 0x464A:xiè 0x464C:kuì 0x464E:xié,xì 0x464F:bó 0x4650:kè 0x4651:cuÄ« 0x4652:xù 0x4653:bÇŽi 0x4654:Å�u 0x4655:zÇ’ng 0x4657:tì 0x4658:chÇ”,zú 0x4659:chí 0x465A:niÇŽo 0x465B:guàn 0x465C:féng 0x465D:xiè 0x465E:dÄ“ng 0x465F:wéi 0x4660:jué 0x4661:kuì,huì 0x4662:zèng 0x4663:sà 0x4664:duÇ’ 0x4665:líng 0x4666:méng 0x4668:guÇ’ 0x4669:méng 0x466A:lóng 0x466C:yìng 0x466E:guàn 0x466F:cù 0x4670:lí 0x4671:dú 0x4673:biÄ�o,è 0x4675:xÄ« 0x4677:dé 0x4678:dé 0x4679:xiàn 0x467A:lián 0x467C:shào,jiÄ�o 0x467D:xié 0x467E:shÄ« 0x467F:wèi 0x4682:hè 0x4683:yóu 0x4684:lù 0x4685:lài,lái 0x4686:yÇ�ng 0x4687:shÄ›ng 0x4688:juàn 0x4689:qì 0x468A:jiÇŽn 0x468B:yùn 0x468D:qì 0x468F:lìn 0x4690:jí 0x4691:mái 0x4692:chuáng,zhuàng 0x4693:niÇŽn 0x4694:bÄ«n 0x4695:lì 0x4696:líng 0x4697:gÄ�ng 0x4698:chéng 0x4699:xuÄ�n,xÄ« 0x469A:xiÇŽn 0x469B:hú 0x469C:bÄ«,bÄ“i 0x469D:zú 0x469E:dÇŽi 0x469F:dÇŽi 0x46A0:hùn,hún 0x46A1:sÄ�i 0x46A2:chè 0x46A3:tí 0x46A5:nuò,ruò 0x46A6:zhì 0x46A7:liú 0x46A8:fèi 0x46A9:jiÇŽo,jiào,qiáo 0x46AA:guÄ�n 0x46AB:xí,áo 0x46AC:lín 0x46AD:xuÄ�n 0x46AE:réng 0x46AF:tÇŽo,xuÄ�n 0x46B0:pÇ�,é 0x46B1:xìn 0x46B2:shàn 0x46B3:zhì 0x46B4:wà 0x46B5:tÇ’u 0x46B6:tiÄ�n 0x46B7:yÄ«,yÇ�,xì 0x46B8:xiè 0x46B9:pÇ� 0x46BA:yáo 0x46BB:yáo,yóu 0x46BC:nÇœ 0x46BD:hào 0x46BE:rén,nín 0x46BF:yìn,xÄ« 0x46C0:fÇŽn,fàn,bàn 0x46C1:nán 0x46C2:yÄ�o 0x46C3:wàn 0x46C4:yuÇŽn 0x46C5:xiá 0x46C6:zhòu 0x46C7:yuÇŽn 0x46C8:shì 0x46C9:miàn 0x46CA:xÄ«,zhÄ« 0x46CB:jì 0x46CC:táo,páo 0x46CD:fèi 0x46CE:xuè 0x46CF:ní,nÇ�,nì 0x46D0:cí 0x46D1:mì 0x46D2:biàn 0x46D4:ná 0x46D5:yù 0x46D6:è 0x46D7:zhÇ� 0x46D8:rén,nín 0x46D9:xù 0x46DA:lüè 0x46DB:huì 0x46DC:xùn 0x46DD:náo 0x46DE:hàn 0x46DF:jiá 0x46E0:dòu 0x46E1:huà 0x46E2:tÅ« 0x46E3:pÄ«ng,chÅ�u 0x46E4:cù 0x46E5:xÄ«,xì,xÄ«n 0x46E6:sòng 0x46E7:mí 0x46E8:xìn 0x46E9:wù,qià,è 0x46EA:qióng 0x46EB:zhÄ�ng,zhèng 0x46EC:táo 0x46ED:xìng 0x46EE:jiù 0x46EF:jù 0x46F0:hùn 0x46F1:tí 0x46F2:mán 0x46F3:yàn,yÄ�n 0x46F4:jÄ«,qÇ� 0x46F5:shòu 0x46F6:lÄ›i 0x46F7:wÇŽn 0x46F8:chè 0x46F9:càn,xuàn 0x46FA:jiè 0x46FB:yòu 0x46FC:huÇ� 0x46FD:zhÇŽ,chÄ�,sà 0x46FE:sù 0x46FF:gé 0x4700:nÇŽo 0x4701:xì 0x4703:duÄ« 0x4704:chí 0x4705:wéi,chuÄ« 0x4706:zhé,niè,mò 0x4707:gÇ”n,gùn 0x4708:chÄ�o,zhÄ�o 0x4709:chÄ« 0x470A:zÄ�o,zào 0x470B:huì 0x470C:luán 0x470D:liáo 0x470E:láo,lào 0x470F:tuÅ� 0x4710:huÄ« 0x4711:wù 0x4712:ào 0x4713:shè 0x4714:suí 0x4715:mài,hài 0x4716:tàn 0x4717:xìn,hàn 0x4718:jÇ�ng 0x4719:án,è 0x471A:tà 0x471B:chán 0x471C:wèi 0x471D:tuÇŽn 0x471E:jì 0x471F:chén 0x4720:chè 0x4721:yù 0x4722:xiÇŽn 0x4723:xÄ«n 0x4727:nÇŽo 0x4729:yàn 0x472A:qiú 0x472B:jiÄ�ng,hóng 0x472C:sÇ’ng 0x472D:jùn,ruì 0x472E:liáo,láo 0x472F:jú 0x4731:mÇŽn 0x4732:liè 0x4734:chù,shì 0x4735:chÇ� 0x4736:xiáng 0x4737:qÄ«n 0x4738:mÄ›i,méi 0x4739:shù 0x473A:chÇŽi,cè 0x473B:chÇ� 0x473C:gú,móu 0x473D:yú 0x473E:yÄ«n 0x4740:liú,liáo 0x4741:láo 0x4742:shù 0x4743:zhé 0x4744:shuÄ�ng 0x4745:huÄ« 0x4748:è 0x474A:shà 0x474B:zòng 0x474C:jué 0x474D:jùn,jÅ«n 0x474E:tuÄ�n 0x474F:lóu 0x4750:wéi,duò 0x4751:chÅ�ng 0x4752:zhù 0x4753:liè 0x4755:zhé 0x4756:zhÇŽo 0x4758:yì 0x4759:chÅ« 0x475A:ní 0x475B:bÅ� 0x475C:suÄ�n 0x475D:yÇ� 0x475E:hào 0x475F:yà 0x4760:huán 0x4761:màn 0x4762:màn 0x4763:qú 0x4764:lÇŽo,liáo 0x4765:háo 0x4766:zhÅ�ng 0x4767:mín 0x4768:xián 0x4769:zhèn 0x476A:shÇ” 0x476B:zuó 0x476C:zhù 0x476D:gòu 0x476E:xuàn 0x476F:yì 0x4770:zhì 0x4771:xié 0x4772:jìn 0x4773:cán,hài 0x4775:bù 0x4776:liáng 0x4777:zhÄ«,zhì 0x4778:jì 0x4779:wÇŽn 0x477A:guàn 0x477B:jÅ« 0x477C:jìng,qíng 0x477D:ài 0x477E:fù 0x477F:guì 0x4780:hòu 0x4781:yàn 0x4782:ruÇŽn 0x4783:zhì 0x4784:biào 0x4785:yí 0x4786:suÇ’ 0x4787:dié 0x4788:guì 0x4789:shèng 0x478A:xùn 0x478B:chèn 0x478C:shé 0x478D:qíng 0x4790:chÇ”n 0x4791:hóng 0x4792:dòng 0x4793:chÄ“ng 0x4794:wÄ›i 0x4795:rú,yú 0x4796:shÇ” 0x4797:cÄ�i,chÄ�i 0x4798:jí 0x4799:zá 0x479A:qí,kuí 0x479B:yÄ�n 0x479C:fù 0x479D:yù 0x479E:fú 0x479F:pò 0x47A0:zhÄ« 0x47A1:tÇŽn 0x47A2:zuó 0x47A3:chÄ›,chè,qiè 0x47A4:qú,fÇ”,qÇ” 0x47A5:yòu 0x47A6:hé 0x47A7:hòu 0x47A8:guÇ� 0x47A9:è,xiá 0x47AA:jiàng 0x47AB:yÇ”n 0x47AC:tòu 0x47AD:cÅ«n,qiÇ” 0x47AE:tÅ« 0x47AF:fù,fú 0x47B0:zuó 0x47B1:hú 0x47B3:bó 0x47B4:zhÄ�o 0x47B5:juÄ›,zhuò 0x47B6:tÄ�ng,tàng 0x47B7:jué 0x47B8:fù 0x47B9:huáng 0x47BA:chÅ«n 0x47BB:yÇ’ng 0x47BC:chuÇ� 0x47BD:suÇ’ 0x47BE:chí,dì 0x47BF:qiÄ�n 0x47C0:cÄ�i 0x47C1:xiÄ�o,chÄ�o 0x47C2:mán 0x47C3:cÄ�n,cà 0x47C4:qì,zuó,zè 0x47C5:jiàn,zàn 0x47C6:bì 0x47C7:jÄ«,xÄ« 0x47C8:zhí 0x47C9:zhú,shÇ” 0x47CA:qú 0x47CB:zhÇŽn 0x47CC:jí 0x47CD:biÄ�n,dián 0x47CF:lì 0x47D0:lì 0x47D1:yuè 0x47D2:quán 0x47D3:chÄ“ng,zhÄ“ng,dÄ«ng 0x47D4:fù,bó 0x47D5:chà 0x47D6:tàng 0x47D7:shì 0x47D8:hàng 0x47D9:qiè 0x47DA:qí 0x47DB:bó,fèi,bèi 0x47DC:nà 0x47DD:tòu 0x47DE:chú 0x47DF:cù 0x47E0:yuè 0x47E1:zhÄ«,dì 0x47E2:chén 0x47E3:chù 0x47E4:bì,bié 0x47E5:méng 0x47E6:bá 0x47E7:tián 0x47E8:mín,mÇ�n 0x47E9:liÄ›,què 0x47EA:fÄ›ng,fÇŽn 0x47EB:chÄ“ng,shàng 0x47EC:qiù 0x47ED:tiáo,zuò 0x47EE:fú,bó 0x47EF:kuò 0x47F0:jiÇŽn 0x47F4:zhèn 0x47F5:qiú 0x47F6:zuò,cuò 0x47F7:chì,qì 0x47F8:kuí,guÄ« 0x47F9:liè 0x47FA:bèi,pèi 0x47FB:dù,zhà 0x47FC:wÇ” 0x47FE:zhuó,juÄ› 0x47FF:lù 0x4800:tÄ�ng,chÇŽng,tàng 0x4802:chú 0x4803:liÇŽng 0x4804:tiÇŽn 0x4805:kÇ”n 0x4806:cháng 0x4807:jué 0x4808:tú 0x4809:huàn 0x480A:fèi 0x480B:bì,bÇ�,bÄ�i 0x480D:xiÄ�,qiá,qié 0x480E:wò 0x480F:jì,kuí 0x4810:qù 0x4811:kuÇ�,kuí,wÄ›i 0x4812:hú 0x4813:qiÅ«,cù 0x4814:suì 0x4815:cÄ�i 0x4817:qiù,xiòng 0x4818:pì 0x4819:páng 0x481A:wà,wÇŽ 0x481B:yáo 0x481C:róng,rÇ’ng 0x481D:xÅ«n 0x481E:cù 0x481F:dié 0x4820:chì,dài 0x4821:cuó,chá 0x4822:mèng 0x4823:xuÇŽn 0x4824:duÇ’,duò 0x4825:bié 0x4826:zhè 0x4827:chú 0x4828:chàn 0x4829:guì 0x482A:duàn 0x482B:zòu 0x482C:dèng 0x482D:lái 0x482E:téng 0x482F:yuè 0x4830:quán 0x4831:zhú 0x4832:líng 0x4833:chÄ“n 0x4834:zhÄ›n 0x4835:fù 0x4836:shè 0x4837:tiÇŽo 0x4838:kuÄ� 0x4839:ái 0x483B:qióng 0x483C:shù 0x483D:hái,kÇŽi 0x483E:shÇŽn 0x483F:wài,kuì 0x4840:zhÇŽn,zhàn 0x4841:lÇ’ng 0x4842:jiÅ«,jiù 0x4843:lì 0x4845:chÅ«n,xún 0x4846:róng 0x4847:yuè 0x4848:jué,jiào 0x4849:kÇŽng 0x484A:fÇŽn 0x484B:qí 0x484C:hóng 0x484D:fú 0x484E:lú 0x484F:hóng 0x4850:tuó 0x4851:mín 0x4852:tián 0x4853:juàn,xuÄ�n 0x4854:qÇ� 0x4855:zhÄ›ng 0x4856:qìng 0x4857:gÇ’ng,gòng 0x4858:tián 0x4859:láng 0x485A:mào 0x485B:yìn 0x485C:lù 0x485D:yuÄ�n,yÇ”n 0x485E:jú 0x485F:pì 0x4861:xié 0x4862:biàn 0x4863:hÅ«n,xuÄ�n 0x4864:zhÅ« 0x4865:róng 0x4866:sÇŽng 0x4867:wÅ«,wÇ” 0x4868:chà 0x4869:kÄ“ng,zhÄ›n 0x486A:shàn 0x486B:péng 0x486C:màn 0x486D:xiÅ« 0x486F:cÅ�ng,zÇ’ng 0x4870:kÄ“ng,kÄ›ng,gÇ” 0x4871:zhuÇŽn 0x4872:chán,dÄ�n 0x4873:sÄ« 0x4874:chÅ�ng 0x4875:suì 0x4876:bèi 0x4877:kài,kÄ› 0x4879:zhì 0x487A:wèi 0x487B:mín 0x487C:líng 0x487D:zuÄ�n 0x487E:niè,yè,yÇ� 0x487F:líng 0x4880:qì 0x4881:yuè 0x4883:yì 0x4884:xÇ� 0x4885:chén 0x4887:rÇ’ng 0x4888:chén,huì 0x4889:nóng 0x488A:yóu 0x488B:jì 0x488C:bó 0x488D:fÇŽng 0x4890:cú 0x4891:dÇ�,dì 0x4892:jiÄ�o 0x4893:yú 0x4894:hé 0x4895:xù 0x4896:yù,lÇœ 0x4897:qÅ« 0x4899:bài 0x489A:gÄ“ng,háng 0x489B:jiÇ’ng 0x489D:yà 0x489E:shù 0x489F:yóu 0x48A0:sòng 0x48A1:yè,xiè,zhuì 0x48A2:càng 0x48A3:yáo 0x48A4:shù 0x48A5:yán 0x48A6:shuài 0x48A7:liào 0x48A8:cÅ�ng,zÅ�ng 0x48A9:yù 0x48AA:bó 0x48AB:suí 0x48AD:yàn,xiàn 0x48AE:lèi 0x48AF:lín 0x48B0:tÄ« 0x48B1:dú 0x48B2:yuè 0x48B3:jÇ� 0x48B5:yún 0x48B8:jÅ« 0x48B9:jÇ”,qú 0x48BA:chÅ« 0x48BB:chén 0x48BC:gÅ�ng 0x48BD:xiàng 0x48BE:xiÇŽn 0x48BF:Ä�n 0x48C0:guÇ�,qÄ«,wéi 0x48C1:yÇ” 0x48C2:lÄ›i 0x48C4:tú 0x48C5:chén 0x48C6:xíng 0x48C7:qiú 0x48C8:hàng 0x48CA:dÇŽng 0x48CB:cÇŽi 0x48CC:dÇ� 0x48CD:yÇŽn,yÄ�n 0x48CE:zÄ« 0x48D0:yÄ«ng 0x48D1:chán 0x48D3:lí,lì 0x48D4:suÇ’ 0x48D5:mÇŽ 0x48D6:mÇŽ 0x48D8:táng 0x48D9:péi,pÄ›ng,bÄ“i 0x48DA:lóu 0x48DB:qÄ«,xÄ« 0x48DC:cuó 0x48DD:tú 0x48DE:è 0x48DF:cán,cÇŽn,tì 0x48E0:jié,tì,zá 0x48E1:yí 0x48E2:jí 0x48E3:dÇŽng 0x48E4:jué 0x48E5:bÇ� 0x48E6:lèi 0x48E7:yì 0x48E8:chún 0x48E9:chún 0x48EA:pò 0x48EB:lí 0x48EC:zÇŽi,gÄ“ 0x48ED:tài 0x48EE:pò 0x48EF:cú,tiÇŽn 0x48F0:jù 0x48F1:xù 0x48F2:fàn 0x48F4:xù 0x48F5:èr 0x48F6:huó,tián 0x48F7:zhÅ« 0x48F8:rÇŽn,nÇŽn,nàn 0x48F9:fá 0x48FA:juÄ�n 0x48FB:hÄ�n 0x48FC:liáng 0x48FD:zhÄ«,tÇ� 0x48FE:mì 0x48FF:yÅ« 0x4901:cén 0x4902:méi 0x4903:yÄ«n,Ä�n,yìn 0x4904:miÇŽn 0x4905:tú 0x4906:kuí,guì 0x4909:mì 0x490A:róng 0x490B:yù,guó 0x490C:qiÄ�ng 0x490D:mí 0x490E:jú,jué 0x490F:pÇ� 0x4910:jÇ�n 0x4911:wàng 0x4912:jì,jÇ� 0x4913:méng 0x4914:jiàn 0x4915:xuè,hù 0x4916:bào 0x4917:gÇŽn 0x4918:chÇŽn,qiÇŽn 0x4919:lì 0x491A:lÇ� 0x491B:qiú 0x491C:dùn 0x491D:yìng 0x491E:yÇ”n 0x491F:chén 0x4920:zhÇ� 0x4921:rÇŽn 0x4923:lüè 0x4924:kÄ�i 0x4925:guÇ�,wÄ›i 0x4926:yuè 0x4927:huì 0x4928:pì 0x4929:chá 0x492A:duÇ’ 0x492B:chán 0x492C:shÄ� 0x492D:shì 0x492E:shè 0x492F:xíng 0x4930:yíng 0x4931:shì 0x4932:chì 0x4933:yè 0x4934:hán 0x4935:fèi,pÄ«,fÄ“i 0x4936:yè,Ä�n 0x4937:yÇŽn 0x4938:zuàn 0x4939:sÅ�u 0x493A:jÄ«n,yÇ�n 0x493B:duò 0x493C:xiàn 0x493D:guÄ�n 0x493E:tÄ�o 0x493F:qiè 0x4940:chÇŽn 0x4941:hán 0x4942:mèng 0x4943:yuè 0x4944:cù 0x4945:qiàn 0x4946:jÇ�n 0x4947:shàn 0x4948:mÇ” 0x4949:yuÄ�n 0x494B:pÄ“ng 0x494C:zhèng 0x494D:zhì 0x494E:chún 0x494F:yÇ” 0x4950:móu 0x4951:wàn 0x4952:jiàng 0x4953:qÄ« 0x4954:sù 0x4955:piÄ› 0x4956:tián 0x4957:kuÇŽn 0x4958:cù 0x4959:suì 0x495B:jiÄ“,jié,qì 0x495C:jiàn 0x495D:áo 0x495E:jiÇŽo 0x495F:yè 0x4961:yè 0x4962:lóng,qÄ« 0x4963:záo 0x4964:báo 0x4965:lián 0x4967:huán 0x4968:lÇœ,lú 0x4969:wéi 0x496A:xiÇŽn 0x496B:tiÄ› 0x496C:bó 0x496D:zhèng 0x496E:zhú 0x496F:bÄ“i,bà 0x4970:méng 0x4971:xiÄ› 0x4972:Å�u 0x4973:yÅ�u 0x4975:xiÇŽo 0x4976:lì 0x4977:zhá 0x4978:mí 0x497A:yé 0x497D:pÅ� 0x497E:xiÄ› 0x4982:shàn 0x4983:zhuÅ� 0x4985:shàn 0x4986:jué 0x4987:jì 0x4988:jiÄ“,zuÇ’ 0x498A:niÇŽo 0x498B:áo 0x498C:chù 0x498D:wù 0x498E:guÇŽn,kàng 0x498F:xiè 0x4990:tÇ�ng 0x4991:xuè 0x4992:dàng,qiÄ�o 0x4993:zhÄ�n,chÄ�n 0x4994:tÇŽn,dÇŽn 0x4995:pÄ“ng 0x4996:xié,xiá 0x4997:xù 0x4998:xiàn 0x4999:sì,shì 0x499A:kuà 0x499B:zhèng 0x499C:wú 0x499D:huÅ� 0x499E:rùn 0x499F:wÄ›n,chuài 0x49A0:dÅ« 0x49A1:huán 0x49A2:kuò 0x49A3:fù 0x49A4:chuài 0x49A5:xián 0x49A6:qín 0x49A7:qié 0x49A8:lán 0x49AA:yà 0x49AB:yÄ«ng 0x49AC:què 0x49AD:hÄ�ng 0x49AE:chÇ”n 0x49AF:zhì 0x49B1:wÄ›i,kuÄ� 0x49B2:yán,qiàn,chàn 0x49B3:xiàng 0x49B4:yì 0x49B5:nÇ� 0x49B6:zhèng 0x49B7:chuài 0x49B9:shí 0x49BA:dÄ«ng 0x49BB:zÇ� 0x49BC:jué,pì 0x49BD:xù 0x49BE:yuán 0x49C1:xÇ” 0x49C2:dào 0x49C3:tián 0x49C4:gè 0x49C5:yí 0x49C6:hóng 0x49C7:yÄ«,yÇ� 0x49C9:lÇ� 0x49CA:kÅ« 0x49CB:xiÇŽn,xiàn 0x49CC:suÄ« 0x49CD:xì 0x49CE:xuàn 0x49D1:dÄ« 0x49D2:lái 0x49D3:zhÅ�u 0x49D4:niàn 0x49D5:chéng 0x49D6:jiàn 0x49D7:bì 0x49D8:zhuàn 0x49D9:líng 0x49DA:hào 0x49DB:bàng,péng 0x49DC:táng 0x49DD:chÄ«,zhì 0x49DE:mà,fù 0x49DF:xiàn 0x49E0:shuàn 0x49E1:yÅ�ng 0x49E2:qÅ«,Å�u 0x49E4:pú 0x49E5:huì 0x49E6:wéi 0x49E7:yÇ� 0x49E8:yè 0x49EA:chè 0x49EB:háo 0x49EC:bÄ«n 0x49EE:xiàn,xiÇŽn 0x49EF:chán,zhàn 0x49F0:hùn 0x49F2:hàn 0x49F3:cí,zhuÄ« 0x49F4:zhÄ« 0x49F5:qí 0x49F6:kuí 0x49F7:róu 0x49F9:yÄ«ng 0x49FA:xióng 0x49FC:hú 0x49FD:cuÇ� 0x49FF:què,xÄ« 0x4A00:dí 0x4A01:wù 0x4A02:qiÅ« 0x4A04:yàn 0x4A05:liáo 0x4A06:bí 0x4A08:bÄ«n 0x4A0A:yuÄ�n 0x4A0B:nüè 0x4A0C:báo 0x4A0D:yÇ�ng 0x4A0E:hóng 0x4A0F:cí 0x4A10:qià 0x4A11:tí 0x4A12:yù 0x4A13:léi 0x4A14:báo 0x4A16:jì 0x4A17:fú 0x4A18:xiàn 0x4A19:cén 0x4A1A:hÅ« 0x4A1B:sè,xÄ« 0x4A1C:bÄ“ng 0x4A1D:qÄ«ng 0x4A1E:yÇ”,yù 0x4A1F:wÄ� 0x4A20:ÇŽi 0x4A21:hán 0x4A22:dàn 0x4A23:gé 0x4A24:dí 0x4A25:huò,shuÄ�ng 0x4A26:pÄ�ng 0x4A28:zhuÄ« 0x4A29:líng 0x4A2A:mái 0x4A2B:mài 0x4A2C:lián 0x4A2D:xiÄ�o 0x4A2E:xuÄ› 0x4A2F:zhèn 0x4A30:pò 0x4A31:fù 0x4A32:nóu,wàn 0x4A33:xì,xÄ« 0x4A34:duì 0x4A35:dàn 0x4A36:yÇ”n 0x4A37:xiàn 0x4A38:yÇ�n 0x4A39:shÅ« 0x4A3A:duì 0x4A3B:bèng 0x4A3C:hù 0x4A3D:fÄ›i 0x4A3E:fèi 0x4A3F:zá 0x4A40:bèi 0x4A41:fÄ“i 0x4A42:xiÄ�n 0x4A43:shì 0x4A44:miÇŽn,tiÇŽn 0x4A45:zhÇŽn,nÇŽn 0x4A46:zhÇŽn 0x4A47:zhÄ�n,diÄ�n 0x4A48:huì 0x4A49:fÇ” 0x4A4A:wÇŽn,wò 0x4A4B:mÇ’ 0x4A4C:qiáo 0x4A4D:liÇŽo 0x4A4F:miè 0x4A50:hÅ«,jí,gé 0x4A51:hóng 0x4A52:yú 0x4A53:qí 0x4A54:duò,shÄ�n,pán 0x4A55:áng,yìng 0x4A57:bà 0x4A58:dì 0x4A59:xuàn,xiÇŽn 0x4A5A:dì,dÄ« 0x4A5B:bì,pèi 0x4A5C:zhòu 0x4A5D:páo 0x4A5E:tié,diÄ“ 0x4A5F:yí,tì 0x4A61:jiá,gé 0x4A62:zhì,dá 0x4A63:tú 0x4A64:xié 0x4A65:dàn,chÄ�n 0x4A66:tiáo 0x4A67:xiè 0x4A68:chàng,zhÄ�ng 0x4A69:yuÇŽn 0x4A6A:guÇŽn 0x4A6B:liÇŽng 0x4A6C:bÄ›ng,fÄ›ng 0x4A6E:lù 0x4A6F:jí,qì 0x4A70:xuàn 0x4A71:shù,yú,shÅ« 0x4A72:dÅ« 0x4A73:sÅ�u 0x4A74:hú 0x4A75:yùn 0x4A76:chÇŽn 0x4A77:bÄ�ng 0x4A78:róng,rÇ’ng 0x4A79:é,kuò 0x4A7A:wÄ“ng 0x4A7B:bà 0x4A7C:féng 0x4A7D:yÅ« 0x4A7E:zhè 0x4A7F:fén 0x4A80:guÇŽn 0x4A81:bÇ” 0x4A82:gé 0x4A83:dÅ«n 0x4A84:huáng 0x4A85:dú 0x4A86:tÇ� 0x4A87:bó 0x4A88:qiàn 0x4A89:liè 0x4A8A:lóng 0x4A8B:wèi 0x4A8C:zhàn,shÄ�n 0x4A8D:lán 0x4A8E:suÄ« 0x4A8F:nà,dÄ� 0x4A90:bì 0x4A91:tuó 0x4A92:zhù 0x4A93:diÄ“ 0x4A94:bÇ”,fù 0x4A95:jú 0x4A96:pò 0x4A97:xiá 0x4A98:wÄ›i,dÄ« 0x4A99:pò,fú,fù 0x4A9A:dÄ�,tà 0x4A9B:fÄ�n,fán 0x4A9C:chÄ�n,chàn,yán 0x4A9D:hù 0x4A9E:zá 0x4AA4:fán 0x4AA5:xiè 0x4AA6:hóng 0x4AA7:chí 0x4AA8:báo 0x4AA9:yín 0x4AAB:jÄ«ng 0x4AAC:bó 0x4AAD:ruÇŽn 0x4AAE:chÇ’u 0x4AAF:yÄ«ng 0x4AB0:yÄ« 0x4AB1:gÇŽi,hái 0x4AB2:kÅ«n 0x4AB3:yÇ”n 0x4AB4:zhÄ›n,dÇŽn,dàn 0x4AB5:yÇŽ 0x4AB6:jÅ« 0x4AB7:hòu,gòu 0x4AB8:mín,mén 0x4AB9:bÄ�i,pÄ«,péi 0x4ABA:gé 0x4ABB:biàn,fàn 0x4ABC:zhuÅ� 0x4ABD:hào 0x4ABE:zhÄ›n 0x4ABF:shÄ›ng 0x4AC0:gÄ›n 0x4AC1:bì 0x4AC2:duÇ’ 0x4AC3:chún,zhèn 0x4AC4:chuà 0x4AC5:sàn 0x4AC6:chéng 0x4AC7:rán 0x4AC8:chÄ›n,zèn,cén 0x4AC9:mào 0x4ACA:péi 0x4ACB:wÄ“i,tuí 0x4ACC:pÇ� 0x4ACD:fÇ” 0x4ACE:zhuÅ� 0x4ACF:qÄ« 0x4AD0:lín 0x4AD1:yÄ«,qÄ« 0x4AD2:mén 0x4AD3:wú 0x4AD4:qì,qiè,yà,kuí 0x4AD5:dié 0x4AD6:chÄ›n,shèn 0x4AD7:xiá 0x4AD8:hé,jié,kÄ› 0x4AD9:sÇŽng 0x4ADA:guÄ� 0x4ADB:hóu 0x4ADC:Ä�o 0x4ADD:fÇ” 0x4ADE:qiÄ�o,fén 0x4ADF:hùn 0x4AE0:pÄ« 0x4AE1:yán,qiàn,qiÄ�n,jiàn 0x4AE2:sÄ« 0x4AE3:xí 0x4AE4:míng 0x4AE5:kuÇ� 0x4AE6:gé,kài 0x4AE8:ào 0x4AE9:sÇŽn 0x4AEA:shuÇŽng 0x4AEB:lóu 0x4AEC:zhÄ›n,qÇ�n 0x4AED:huì 0x4AEE:chán 0x4AF0:lìn 0x4AF1:ná 0x4AF2:hàn,kÇŽn 0x4AF3:dú 0x4AF4:jìn 0x4AF5:mián 0x4AF6:fán 0x4AF7:è 0x4AF8:chÄ�o 0x4AF9:hóng 0x4AFA:hóng 0x4AFB:yù 0x4AFC:xuè 0x4AFD:pÄ�o 0x4AFE:bÄ«,bì 0x4AFF:chÄ�o 0x4B00:yÇ’u 0x4B01:yí 0x4B02:xuè 0x4B03:sà 0x4B04:xù 0x4B05:lì,liè,xié 0x4B06:lì 0x4B07:yuàn 0x4B08:duì 0x4B09:huò 0x4B0A:shà 0x4B0B:léng 0x4B0C:pÅ�u 0x4B0D:hÅ« 0x4B0E:guó,xù 0x4B0F:bù,fÇ’u 0x4B10:ruí 0x4B11:wèi,yù 0x4B12:sÅ�u,xiÄ�o 0x4B13:àn 0x4B14:yú 0x4B15:xiÄ�ng,shÇŽng 0x4B16:héng 0x4B17:yáng 0x4B18:xiÄ�o 0x4B19:yáo 0x4B1B:bì 0x4B1D:héng 0x4B1E:táo 0x4B1F:liú,liÇ” 0x4B21:zhù 0x4B23:xì,qì,gÄ“ 0x4B24:zàn,zhÄ�n 0x4B25:yì 0x4B26:dòu,shè 0x4B27:yuán 0x4B28:jiù 0x4B2A:bó 0x4B2B:tí 0x4B2C:yÇ�ng 0x4B2E:yí 0x4B2F:nián,tiÇŽn 0x4B30:shào 0x4B31:bèn 0x4B32:gÅ�u 0x4B33:bÇŽn 0x4B34:mò 0x4B35:gÄ�i,ài 0x4B36:èn 0x4B37:shÄ› 0x4B39:zhì 0x4B3A:yàng 0x4B3B:jiàn 0x4B3C:yuàn 0x4B3D:shuì,duì 0x4B3E:tí 0x4B3F:wÄ›i,wèi 0x4B40:xùn 0x4B41:zhì 0x4B42:yì 0x4B43:rÄ›n,niè 0x4B44:shì 0x4B45:hú 0x4B46:nè 0x4B47:yÄ“,yì 0x4B48:jiàn 0x4B49:suÇ� 0x4B4A:yÇ�ng 0x4B4B:bÇŽo 0x4B4C:hú 0x4B4D:hú 0x4B4E:yè 0x4B50:yàng 0x4B51:lián,qiàn,xiàn 0x4B52:xÄ« 0x4B53:èn 0x4B54:duÄ« 0x4B55:zÇŽn,jiÇŽn 0x4B56:zhù 0x4B57:yÇ�ng 0x4B58:yÇ�ng 0x4B59:jÇ�n,jiàn 0x4B5A:chuáng 0x4B5B:dàn 0x4B5D:kuài 0x4B5E:yì 0x4B5F:yè 0x4B60:jiÇŽn 0x4B61:èn 0x4B62:níng 0x4B63:cí 0x4B64:qiÇŽn 0x4B65:xuè 0x4B66:bÅ� 0x4B67:mÇ� 0x4B68:shuì 0x4B69:mó 0x4B6A:liáng 0x4B6B:qÇ� 0x4B6C:qÇ� 0x4B6D:shÇ’u 0x4B6E:fú 0x4B6F:bó 0x4B70:bèng 0x4B71:bié 0x4B72:yÇ� 0x4B73:wèi 0x4B74:huán 0x4B75:fán 0x4B76:qí 0x4B77:máo 0x4B78:fù 0x4B79:áng 0x4B7A:ÇŽng 0x4B7B:fÄ“n,fù 0x4B7C:qí 0x4B7D:qún 0x4B7E:tuó 0x4B7F:yì 0x4B80:bó 0x4B81:pián 0x4B82:bá 0x4B84:xuán 0x4B87:yù 0x4B88:chí 0x4B89:lú 0x4B8A:yí 0x4B8B:lì 0x4B8D:niÇŽo 0x4B8E:xì 0x4B8F:wú 0x4B91:lèi,luò 0x4B92:pÅ« 0x4B93:zhuÅ�,chào 0x4B94:zuÄ« 0x4B95:zhuó 0x4B96:chÄ�ng 0x4B97:àn,yàn 0x4B98:ér 0x4B99:yù 0x4B9A:lèng,líng 0x4B9B:fù 0x4B9C:zhá,yè 0x4B9D:hún 0x4B9E:chÇ”n 0x4B9F:sÅ�u,sÇ’u 0x4BA0:bÄ« 0x4BA1:bì,bó 0x4BA2:zhá 0x4BA4:hé 0x4BA5:lì 0x4BA7:hàn,hán 0x4BA8:zÇŽi 0x4BA9:gú 0x4BAA:chéng 0x4BAB:lóu,lǘ 0x4BAC:mò 0x4BAD:mì 0x4BAE:mài 0x4BAF:ào 0x4BB0:zhé 0x4BB1:zhú 0x4BB2:huáng 0x4BB3:fán 0x4BB4:dèng,tÄ“ng 0x4BB5:tóng 0x4BB7:dú 0x4BB8:wò 0x4BB9:wèi,guì 0x4BBA:jì 0x4BBB:chì 0x4BBC:lín 0x4BBD:biÄ�o 0x4BBE:lóng,lòng 0x4BBF:jiÇŽn 0x4BC0:niè 0x4BC1:luó 0x4BC2:shÄ“n,jí 0x4BC4:guÄ� 0x4BC5:niè 0x4BC6:yì 0x4BC7:kÅ« 0x4BC8:wán 0x4BC9:wÄ� 0x4BCA:qià,kÄ“ 0x4BCB:bó,fèi 0x4BCC:kÄ�o 0x4BCD:líng 0x4BCE:gàn 0x4BCF:guÄ�,huá 0x4BD0:hái 0x4BD1:kuÄ�ng 0x4BD2:héng 0x4BD3:kuÄ« 0x4BD4:zé 0x4BD5:tÄ«ng 0x4BD6:láng 0x4BD7:bì 0x4BD8:huàn 0x4BD9:pò 0x4BDA:yÇŽo 0x4BDB:wàn 0x4BDC:tì,xÄ« 0x4BDD:suÇ� 0x4BDE:kuÄ� 0x4BDF:duì,xiá 0x4BE0:ÇŽo 0x4BE1:jiàn 0x4BE2:mó,mÇ’ 0x4BE3:kuì,guì 0x4BE4:kuài 0x4BE5:àn,qì 0x4BE6:mà 0x4BE7:qÇ�ng,qìng 0x4BE8:qiÄ�o,hè 0x4BEA:kÇŽo,kào 0x4BEB:hào 0x4BEC:duÇ’ 0x4BED:xiÄ�n 0x4BEE:nái 0x4BEF:suÅ� 0x4BF0:jiè 0x4BF1:pÄ«,pÄ“i,fù 0x4BF2:pÄ�,bà 0x4BF3:sÅ�ng 0x4BF4:cháng 0x4BF5:niè 0x4BF6:mán,mián 0x4BF7:sÅ�ng 0x4BF8:cì 0x4BF9:xiÄ�n 0x4BFA:kuò 0x4BFC:dí 0x4BFD:póu,pÇ’u,bÇŽo 0x4BFE:tiáo,diÄ�o 0x4BFF:zú,suì,zuì 0x4C00:wÇ’ 0x4C01:fèi 0x4C02:cài 0x4C03:péng,pèng,fÇŽng 0x4C04:sÄ�i,shì 0x4C06:róu 0x4C07:qí 0x4C08:cuó 0x4C09:pán,bÄ�n 0x4C0A:bó 0x4C0B:mán 0x4C0C:zÇ’ng,cÅ�ng 0x4C0D:cì 0x4C0E:kuì 0x4C0F:jì 0x4C10:lán 0x4C12:méng 0x4C13:mián 0x4C14:pán 0x4C15:lú 0x4C16:zuÇŽn 0x4C18:liú,jiÇŽo 0x4C19:yÇ� 0x4C1A:wén 0x4C1B:lì,gé 0x4C1C:lì 0x4C1D:zèng 0x4C1E:zhÇ” 0x4C1F:hún 0x4C20:shén 0x4C21:chì 0x4C22:xìng 0x4C23:wÇŽng 0x4C24:dÅ�ng 0x4C25:huò,yù 0x4C26:pÇ� 0x4C27:hÅ« 0x4C28:mèi 0x4C29:chÄ›,dÅ« 0x4C2A:mèi 0x4C2B:chÄ�o,cháo,zhào 0x4C2C:jú 0x4C2D:nòu 0x4C2F:yì 0x4C30:rú 0x4C31:líng,lóng 0x4C32:yà 0x4C34:qì 0x4C35:zÄ« 0x4C37:bàng 0x4C38:gÅ�ng 0x4C39:zé 0x4C3A:jiè 0x4C3B:yú 0x4C3C:qín,yín,shèn 0x4C3D:bèi 0x4C3E:bÄ�,bà 0x4C3F:tuó 0x4C40:yÄ�ng 0x4C41:qiáo 0x4C42:yÇ’u 0x4C43:zhì 0x4C44:jiè 0x4C45:mò 0x4C46:shéng 0x4C47:shàn 0x4C48:qí 0x4C49:shàn 0x4C4A:mÇ� 0x4C4B:gÇ’ng 0x4C4C:yí 0x4C4D:gèng 0x4C4E:gèng 0x4C4F:tÇ’u 0x4C50:fÅ« 0x4C51:xué 0x4C52:yè 0x4C53:tíng,tÇ�ng 0x4C54:tiáo,chóu 0x4C55:móu,méi 0x4C56:liú 0x4C57:cÄ�n 0x4C58:lí 0x4C59:shÅ« 0x4C5A:lù 0x4C5B:huò,xù,yì 0x4C5C:cuò 0x4C5D:pái,bÄ“i 0x4C5E:liú 0x4C5F:jù,jÅ« 0x4C60:zhàn 0x4C61:jú 0x4C62:zhÄ“ng 0x4C63:zú 0x4C64:xiàn 0x4C65:zhì,jì 0x4C68:là 0x4C6B:là 0x4C6C:xÅ« 0x4C6D:gèng 0x4C6E:é 0x4C6F:mú 0x4C70:zhòng 0x4C71:tí,dì 0x4C72:yuán 0x4C73:zhÄ�n 0x4C74:gèng 0x4C75:wÄ“ng 0x4C76:láng 0x4C77:yú 0x4C78:sÅ�u,qiÅ« 0x4C79:zhÇŽ 0x4C7A:hái 0x4C7B:huá 0x4C7C:zhÇŽn 0x4C7E:lóu 0x4C7F:chàn 0x4C80:zhì 0x4C81:wèi 0x4C82:xuán 0x4C83:zÇŽo,suÇ’,cháo 0x4C84:mín 0x4C85:guÄ« 0x4C86:sÅ« 0x4C89:sÄ« 0x4C8A:duò,wÄ›i,tuò 0x4C8B:cén 0x4C8C:kuÇŽn 0x4C8D:téng 0x4C8E:nÄ›i 0x4C8F:láo 0x4C90:lÇ” 0x4C91:yí 0x4C92:xiè 0x4C93:yÇŽn,yán 0x4C94:qíng 0x4C95:pÅ« 0x4C96:chóu 0x4C97:xián 0x4C98:guÇŽn 0x4C99:jié 0x4C9A:lài 0x4C9B:méng 0x4C9C:yè 0x4C9E:lì 0x4C9F:yìn 0x4CA0:chÅ«n 0x4CA1:qiÅ« 0x4CA2:téng 0x4CA3:yú 0x4CA6:dài 0x4CA7:dù 0x4CA8:hóng 0x4CAA:xì 0x4CAC:qí 0x4CAE:yuán 0x4CAF:jí 0x4CB0:yùn 0x4CB1:fÇŽng 0x4CB2:gÅ�ng,sÅ�ng 0x4CB3:háng 0x4CB4:zhèn 0x4CB5:què 0x4CB8:jiè 0x4CB9:pí 0x4CBA:gàn 0x4CBB:xuán,yuÄ�n 0x4CBC:shÄ“ng 0x4CBD:shí,diÇŽo 0x4CBE:qiÇŽo 0x4CBF:cí 0x4CC0:dié,yì 0x4CC1:bó 0x4CC2:diÄ�o,chÄ�o,tiáo,xiÄ�o 0x4CC3:wÇŽn 0x4CC4:cí 0x4CC5:zhÇ�,zhì 0x4CC6:bái 0x4CC7:wÇ” 0x4CC8:bÇŽo 0x4CC9:dÅ�ng,dàn 0x4CCA:bá 0x4CCB:tóng,tÅ�ng,xiÄ�o 0x4CCD:gÅ�ng 0x4CCE:jiù 0x4CCF:guì,jué 0x4CD0:cì 0x4CD1:yÇ’u 0x4CD2:yuán 0x4CD3:lÇŽo 0x4CD4:jú,jiù 0x4CD5:fú 0x4CD6:niè 0x4CD7:é 0x4CD8:é 0x4CD9:xÇ�ng 0x4CDA:kàn,hé 0x4CDB:yàn 0x4CDC:tú 0x4CDD:pÇ’u,bù 0x4CDE:bÄ›ng 0x4CDF:míng 0x4CE0:shuì,zhù 0x4CE1:yàn,zhuÄ« 0x4CE2:qí 0x4CE3:yuán 0x4CE4:biÄ“ 0x4CE6:xuÄ�n 0x4CE7:hóu 0x4CE8:huáng 0x4CE9:yÄ�o 0x4CEA:juàn 0x4CEB:kuí 0x4CEC:è 0x4CED:jí 0x4CEE:mò 0x4CEF:chóng,chÇ’ng 0x4CF0:bÇŽo 0x4CF1:wù 0x4CF2:zhèn 0x4CF3:xù 0x4CF4:tà,dá 0x4CF5:chì 0x4CF6:xÄ«,qÄ«,jÄ« 0x4CF7:cóng 0x4CF8:má 0x4CF9:kòu 0x4CFA:yàn 0x4CFB:cán,zhàn 0x4CFD:hè 0x4CFE:dÄ“ng 0x4CFF:rán 0x4D00:tóng 0x4D01:yù,yú 0x4D02:xiàng 0x4D03:náo 0x4D04:shùn 0x4D05:fén 0x4D06:pú,pÅ« 0x4D07:líng 0x4D08:ÇŽo 0x4D09:huán,xuán 0x4D0A:yí 0x4D0B:huán,xuán 0x4D0C:méng 0x4D0D:yÄ«ng 0x4D0E:lÄ›i 0x4D0F:yàn 0x4D10:bÇŽo 0x4D11:dié 0x4D12:líng 0x4D13:shÄ« 0x4D14:jiÄ�o 0x4D15:liè 0x4D16:jÄ«ng 0x4D17:jú 0x4D18:tÄ« 0x4D19:pì 0x4D1A:gÇŽng 0x4D1B:xiÄ�o 0x4D1C:wÄ�i 0x4D1D:chuài 0x4D1E:dí 0x4D1F:huán 0x4D20:yÇŽo 0x4D21:lì 0x4D22:mí 0x4D23:hÅ« 0x4D24:shÄ“ng 0x4D25:jiÄ� 0x4D26:yín 0x4D27:wÄ“i 0x4D29:piáo 0x4D2A:lù 0x4D2B:líng 0x4D2C:yì 0x4D2D:cái 0x4D2E:shàn 0x4D2F:hÅ« 0x4D30:shú,yì 0x4D31:tuÅ� 0x4D32:mò 0x4D33:huá 0x4D34:tiè,nián 0x4D35:bÇ�ng 0x4D36:péng 0x4D37:hún,huàn 0x4D38:fÅ« 0x4D39:guÇ’,luÇ’,hún 0x4D3A:bù 0x4D3B:lí 0x4D3C:chàn 0x4D3D:pí 0x4D3E:cuó 0x4D3F:méng 0x4D40:suÇ’,suò 0x4D41:qiàng 0x4D42:zhí 0x4D43:kuàng,huáng 0x4D44:bí 0x4D45:áo 0x4D46:méng 0x4D47:xiàn 0x4D48:kù 0x4D49:tóu 0x4D4A:tuÄ�n 0x4D4B:wÄ›i 0x4D4C:xiÄ�n 0x4D4E:tuÄ�n 0x4D4F:lÇŽo 0x4D50:chÇŽn 0x4D51:nì 0x4D52:nì 0x4D53:lí 0x4D54:dÇ’ng 0x4D55:jù 0x4D56:qiàn,qÄ«n 0x4D57:bó,bí 0x4D58:shài 0x4D59:zhÄ�,zhÇŽ 0x4D5A:tÇŽo 0x4D5B:qiàn 0x4D5C:nÇ’ng 0x4D5D:yì,yà 0x4D5E:jìng 0x4D5F:gÇŽn 0x4D60:dí,zhuó 0x4D61:jiÇŽn 0x4D62:mèi 0x4D63:dá 0x4D64:jiÇŽn,xiàn 0x4D65:yù 0x4D66:xiè,wÅ« 0x4D67:zài 0x4D68:máng 0x4D69:lí 0x4D6A:gùn,hùn 0x4D6B:xÅ«n,yù 0x4D6C:tà 0x4D6D:zhè 0x4D6E:yàng 0x4D6F:tuÇŽn 0x4D70:shÄ�ng 0x4D71:xì,xÄ« 0x4D72:qiÄ�o 0x4D73:wèi 0x4D74:yìng,zèng,yùn 0x4D75:chuÄ�,zhuó 0x4D76:qú,gÅ�u 0x4D77:wÄ� 0x4D79:zhÄ« 0x4D7A:tÇ�ng,dÇ�ng,tiÇŽn 0x4D7B:huì,gÇ” 0x4D7C:shÄ�ng 0x4D7D:cà 0x4D7E:fú,fÇ” 0x4D7F:tiè 0x4D80:tà 0x4D81:tà 0x4D82:zhuó,jué 0x4D83:hán 0x4D84:píng 0x4D85:hé 0x4D86:zhuÄ« 0x4D87:zhòu 0x4D88:bó 0x4D89:liú 0x4D8A:nÇœ 0x4D8B:xÄ« 0x4D8C:pào 0x4D8D:dì 0x4D8E:hÄ“ 0x4D8F:tì,tÇ� 0x4D90:wài,huì 0x4D91:tì 0x4D92:qí 0x4D93:jì 0x4D94:chí 0x4D95:bà,bÄ� 0x4D96:jìn 0x4D97:kè,qiÄ�,qiÇŽ 0x4D98:lì 0x4D99:jù 0x4D9A:qÇ” 0x4D9B:là 0x4D9C:gÇ” 0x4D9D:qià 0x4D9E:qí 0x4D9F:xiàn 0x4DA0:jiÇŽn 0x4DA1:shí,zé 0x4DA2:jiÄ�n,xián 0x4DA3:ái,gÄ�i 0x4DA4:huá 0x4DA5:zhÄ�,jÇ”,chÇ” 0x4DA6:zé 0x4DA7:yÇŽo 0x4DA8:zhÄ�n 0x4DA9:jì 0x4DAA:chà 0x4DAB:yàn,yán 0x4DAC:jiÄ�n 0x4DAE:yÇŽn 0x4DB0:jiÄ�o 0x4DB1:tóng 0x4DB2:nán 0x4DB3:yuè 0x4DB5:chí 0x4E00:yÄ«,yí,yì 0x4E01:dÄ«ng,zhÄ“ng 0x4E02:kÇŽo,qiÇŽo,yú 0x4E03:qÄ«,qí 0x4E04:shàng 0x4E05:xià 0x4E06:hÇŽn 0x4E07:wàn,mò 0x4E08:zhàng 0x4E09:sÄ�n 0x4E0A:shàng,shÇŽng 0x4E0B:xià 0x4E0C:jÄ«,qí 0x4E0D:bù,fÇ’u,fÅ�u,fÅ«,bú 0x4E0E:yÇ”,yú,yù 0x4E0F:miÇŽn 0x4E10:gài 0x4E11:chÇ’u 0x4E12:chÇ’u 0x4E13:zhuÄ�n 0x4E14:qiÄ›,jÅ«,cú 0x4E15:pÄ« 0x4E16:shì 0x4E17:shì 0x4E18:qiÅ« 0x4E19:bÇ�ng,bìng 0x4E1A:yè 0x4E1B:cóng 0x4E1C:dÅ�ng 0x4E1D:sÄ« 0x4E1E:chéng,shèng,zhÄ“ng,zhÄ›ng 0x4E1F:diÅ« 0x4E20:qiÅ« 0x4E21:liÇŽng 0x4E22:diÅ« 0x4E23:yÇ’u 0x4E24:liÇŽng 0x4E25:yán 0x4E26:bìng,bàn,bàng 0x4E27:sàng,sÄ�ng 0x4E28:gÇ”n 0x4E29:jiÅ« 0x4E2A:gè,gàn,gÄ› 0x4E2B:yÄ� 0x4E2C:qiáng 0x4E2D:zhÅ�ng,zhòng 0x4E2E:jÇ� 0x4E2F:jiè 0x4E30:fÄ“ng 0x4E31:guàn,kuàng 0x4E32:chuàn,guàn,quàn 0x4E33:chÇŽn,chuàn 0x4E34:lín 0x4E35:zhuó 0x4E36:zhÇ” 0x4E37:bÄ� 0x4E38:wán 0x4E39:dÄ�n 0x4E3A:wèi,wéi 0x4E3B:zhÇ”,zhù 0x4E3C:jÇ�ng,dÇŽn 0x4E3D:lì,lí 0x4E3E:jÇ” 0x4E3F:piÄ›,yì 0x4E40:fú 0x4E41:yí,jí 0x4E42:yì,ài 0x4E43:nÇŽi,ÇŽi 0x4E44:wÇ” 0x4E45:jiÇ” 0x4E46:jiÇ” 0x4E47:tuÅ�,zhé 0x4E48:me,yÄ�o,mó,ma 0x4E49:yì 0x4E4A:yÄ« 0x4E4B:zhÄ«,zhÅ«,zhì 0x4E4C:wÅ«,wù 0x4E4D:zhà,zuò 0x4E4E:hÅ« 0x4E4F:fá 0x4E50:lè,yuè 0x4E51:yín,pÄ�n,zhòng 0x4E52:pÄ«ng 0x4E53:pÄ�ng 0x4E54:qiáo 0x4E55:hÇ” 0x4E56:guÄ�i 0x4E57:chéng 0x4E58:chéng,shèng 0x4E59:yÇ�,yì,jué 0x4E5A:yÇ�n 0x4E5B:ya 0x4E5C:miÄ“,niè 0x4E5D:jiÇ”,jiÅ« 0x4E5E:qÇ�,qì 0x4E5F:yÄ›,yí 0x4E60:xí 0x4E61:xiÄ�ng 0x4E62:gài 0x4E63:jiÇ” 0x4E64:xià 0x4E65:hù 0x4E66:shÅ« 0x4E67:dÇ’u 0x4E68:shÇ� 0x4E69:jÄ« 0x4E6A:náng 0x4E6B:jiÄ� 0x4E6C:jù 0x4E6D:shí 0x4E6E:mÇŽo 0x4E6F:hÅ« 0x4E70:mÇŽi 0x4E71:luàn 0x4E72:zÄ« 0x4E73:rÇ” 0x4E74:xué 0x4E75:yÇŽn 0x4E76:fÇ” 0x4E77:shÄ� 0x4E78:nÇŽ 0x4E79:gÄ�n 0x4E7A:suÇ’ 0x4E7B:yú 0x4E7C:cui 0x4E7D:zhÄ› 0x4E7E:qián,gÄ�n 0x4E7F:zhì,luàn 0x4E80:guÄ« 0x4E81:gÄ�n 0x4E82:luàn 0x4E83:lÇ�n,lìn 0x4E84:yì 0x4E85:jué 0x4E86:le,liÇŽo,liào 0x4E87:ma 0x4E88:yÇ”,yú,zhù 0x4E89:zhÄ“ng 0x4E8A:shì 0x4E8B:shì,zì 0x4E8C:èr 0x4E8D:chù 0x4E8E:yú,wéi,yÅ«,xÅ« 0x4E8F:kuÄ«,yú 0x4E90:yú 0x4E91:yún 0x4E92:hù 0x4E93:qí 0x4E94:wÇ” 0x4E95:jÇ�ng,jìng 0x4E96:sì 0x4E97:suì 0x4E98:gèn,xuÄ�n,gèng 0x4E99:gèn,gèng 0x4E9A:yà 0x4E9B:xiÄ“,suò,suÅ� 0x4E9C:yà 0x4E9D:qí,zhÄ�i 0x4E9E:yà,yÄ�,è 0x4E9F:jí,qì 0x4EA0:tóu 0x4EA1:wáng,wú 0x4EA2:kàng,gÄ�ng,gÄ“ng 0x4EA3:dà 0x4EA4:jiÄ�o 0x4EA5:hài,jiÄ“ 0x4EA6:yì 0x4EA7:chÇŽn 0x4EA8:hÄ“ng,xiÇŽng,pÄ“ng 0x4EA9:mÇ” 0x4EAA:ye 0x4EAB:xiÇŽng 0x4EAC:jÄ«ng 0x4EAD:tíng 0x4EAE:liàng,liáng 0x4EAF:xiÇŽng 0x4EB0:jÄ«ng 0x4EB1:yè 0x4EB2:qÄ«n,qìng 0x4EB3:bó 0x4EB4:yòu 0x4EB5:xiè 0x4EB6:dÇŽn,dàn,chán,zhÄ�n 0x4EB7:lián 0x4EB8:duÇ’ 0x4EB9:wÄ›i,mén 0x4EBA:rén 0x4EBB:rén 0x4EBC:jí 0x4EBD:jí 0x4EBE:wáng 0x4EBF:yì 0x4EC0:shén,shí 0x4EC1:rén 0x4EC2:lè,lì 0x4EC3:dÄ«ng,dÇ�ng 0x4EC4:zè 0x4EC5:jÇ�n,fù,nú,jìn 0x4EC6:pÅ«,pú 0x4EC7:chóu,qiú,jÅ« 0x4EC8:bÄ� 0x4EC9:zhÇŽng 0x4ECA:jÄ«n 0x4ECB:jiè,gè 0x4ECC:bÄ«ng 0x4ECD:réng 0x4ECE:cóng,cÅ�ng 0x4ECF:fó 0x4ED0:sÇŽn 0x4ED1:lún 0x4ED2:bÄ«ng 0x4ED3:cÄ�ng 0x4ED4:zÇŽi,zÇ�,zÄ« 0x4ED5:shì 0x4ED6:tÄ�,tuó 0x4ED7:zhàng 0x4ED8:fù 0x4ED9:xiÄ�n,xiÇŽn 0x4EDA:xiÄ�n 0x4EDB:tuÅ�,duó,chà,zhé 0x4EDC:hóng 0x4EDD:tóng 0x4EDE:rèn 0x4EDF:qiÄ�n 0x4EE0:gÇŽn,hàn 0x4EE1:gÄ“,yì,wù 0x4EE2:bó 0x4EE3:dài 0x4EE4:lìng,líng,lián,lÇ�ng 0x4EE5:yÇ�,sì 0x4EE6:chào 0x4EE7:cháng 0x4EE8:sÄ� 0x4EE9:cháng 0x4EEA:yí 0x4EEB:mù 0x4EEC:men 0x4EED:rèn 0x4EEE:fÇŽn 0x4EEF:chào,miÇŽo 0x4EF0:yÇŽng,áng 0x4EF1:qián,jÄ«ng 0x4EF2:zhòng 0x4EF3:pÇ�,pí,bì 0x4EF4:wò 0x4EF5:wÇ” 0x4EF6:jiàn,móu 0x4EF7:jià,jiè,jie 0x4EF8:yÇŽo,fó 0x4EF9:fÄ“ng 0x4EFA:cÄ�ng 0x4EFB:rèn,rén,lìn 0x4EFC:wáng 0x4EFD:fèn,bÄ«n 0x4EFE:dÄ« 0x4EFF:fÇŽng,páng 0x4F00:zhÅ�ng 0x4F01:qÇ� 0x4F02:pèi 0x4F03:yú,yÇ”,xù 0x4F04:diào 0x4F05:dùn 0x4F06:wù 0x4F07:yì 0x4F08:xÇ�n,lÇ�n 0x4F09:kàng,gÄ�ng,kÇŽng 0x4F0A:yÄ« 0x4F0B:jí,fán 0x4F0C:ài 0x4F0D:wÇ” 0x4F0E:jì,zhì,qí,qì 0x4F0F:fú,fù 0x4F10:fá 0x4F11:xiÅ«,xù 0x4F12:jìn,yín 0x4F13:pÄ« 0x4F14:dÇŽn 0x4F15:fÅ« 0x4F16:tÇŽng 0x4F17:zhòng,yín 0x4F18:yÅ�u,yóu 0x4F19:huÇ’,huo 0x4F1A:huì,kuài 0x4F1B:yÇ” 0x4F1C:cuì 0x4F1D:yún 0x4F1E:sÇŽn 0x4F1F:wÄ›i 0x4F20:chuán,zhuàn 0x4F21:chÄ“ 0x4F22:yá 0x4F23:qiàn,xiàn 0x4F24:shÄ�ng 0x4F25:chÄ�ng 0x4F26:lún 0x4F27:cÄ�ng,chen 0x4F28:xùn 0x4F29:xìn 0x4F2A:wÄ›i 0x4F2B:zhù 0x4F2C:ze 0x4F2D:xián 0x4F2E:nÇ” 0x4F2F:bó,mò,bà,bÇŽi 0x4F30:gÅ«,gù 0x4F31:nÇ� 0x4F32:nì,nÇ� 0x4F33:xiè 0x4F34:bàn,pàn 0x4F35:xù 0x4F36:líng 0x4F37:zhòu 0x4F38:shÄ“n 0x4F39:qÅ«,zù 0x4F3A:cì,sì 0x4F3B:bÄ“ng 0x4F3C:shì,sì 0x4F3D:gÄ�,jiÄ�,qié 0x4F3E:pÄ« 0x4F3F:yì 0x4F40:sì 0x4F41:yÇ�,ÇŽi,sì,chì 0x4F42:zhÄ“ng 0x4F43:diàn,tián 0x4F44:hÄ�n,gàn 0x4F45:mài 0x4F46:dàn,tÇŽn,yàn 0x4F47:zhù 0x4F48:bù 0x4F49:qÅ«,qiÄ� 0x4F4A:bÇ� 0x4F4B:zhÄ�o,sháo,shào 0x4F4C:cÇ� 0x4F4D:wèi,lì 0x4F4E:dÄ« 0x4F4F:zhù 0x4F50:zuÇ’ 0x4F51:yòu 0x4F52:yÇŽng,yÄ�ng 0x4F53:tÇ�,bèn,cuì,tÄ« 0x4F54:zhàn,chÄ�n,diÄ�n 0x4F55:hé,hè 0x4F56:bì 0x4F57:tuó,tuÅ�,tuò,yí 0x4F58:shé 0x4F59:yú,tú,xú,yù 0x4F5A:yì,dié 0x4F5B:fú,bó,bì,fó 0x4F5C:zuò,zuÅ�,zuó 0x4F5D:gÅ�u,kòu,jÅ« 0x4F5E:nìng 0x4F5F:tóng 0x4F60:nÇ� 0x4F61:xiÄ�n 0x4F62:qú 0x4F63:yÅ�ng,yòng 0x4F64:wÇŽ 0x4F65:qiÄ�n 0x4F66:shi 0x4F67:kÇŽ 0x4F68:bÄ�o 0x4F69:pèi 0x4F6A:huí,huái 0x4F6B:hè,gé 0x4F6C:lÇŽo,liáo 0x4F6D:xiáng 0x4F6E:gé,é 0x4F6F:yáng 0x4F70:bÇŽi,mò 0x4F71:fÇŽ 0x4F72:mÇ�ng 0x4F73:jiÄ� 0x4F74:èr,nài 0x4F75:bìng 0x4F76:jí 0x4F77:hÄ›n,héng 0x4F78:huó 0x4F79:guÇ�,guÄ« 0x4F7A:quán 0x4F7B:tiÄ�o,tiáo,tiào,diÇŽo,yáo,dào,zhào 0x4F7C:jiÇŽo,jiÄ�o,xiáo 0x4F7D:cì 0x4F7E:yì 0x4F7F:shÇ� 0x4F80:xíng 0x4F81:shÄ“n 0x4F82:tuÅ� 0x4F83:kÇŽn 0x4F84:zhí 0x4F85:gÄ�i,hài 0x4F86:lái,lài 0x4F87:yí 0x4F88:chÇ� 0x4F89:kuÇŽ,huá,è,wú 0x4F8A:guÄ�ng 0x4F8B:lì,liè 0x4F8C:yÄ«n 0x4F8D:shì 0x4F8E:mÇ� 0x4F8F:zhÅ«,zhÅ�u 0x4F90:xù 0x4F91:yòu 0x4F92:Ä�n,ÇŽn 0x4F93:lù 0x4F94:móu,máo 0x4F95:ér 0x4F96:lún,lùn 0x4F97:dòng,tÅ�ng,tóng,tÇ’ng 0x4F98:chà 0x4F99:chÄ« 0x4F9A:xùn,xún 0x4F9B:gÅ�ng,gòng 0x4F9C:zhÅ�u 0x4F9D:yÄ«,yÇ� 0x4F9E:rú 0x4F9F:cún,jiàn 0x4FA0:xiá 0x4FA1:sì 0x4FA2:dài 0x4FA3:lÇš 0x4FA4:ta 0x4FA5:jiÇŽo,yáo 0x4FA6:zhÄ“n 0x4FA7:cè,zè,zhÄ�i 0x4FA8:qiáo 0x4FA9:kuài 0x4FAA:chái 0x4FAB:nìng 0x4FAC:nóng 0x4FAD:jÇ�n 0x4FAE:wÇ” 0x4FAF:hóu,hòu 0x4FB0:jiÇ’ng 0x4FB1:chÄ›ng,tÇ�ng 0x4FB2:zhèn,zhÄ“n,chÄ“n 0x4FB3:zuò 0x4FB4:chÇ’u 0x4FB5:qÄ«n,qÇ�n 0x4FB6:lÇš 0x4FB7:jú 0x4FB8:shù,dÅ�u 0x4FB9:tÇ�ng 0x4FBA:shèn 0x4FBB:tuì,tuÅ� 0x4FBC:bó 0x4FBD:nán 0x4FBE:xiÄ�o 0x4FBF:biàn,pián,biÄ�n 0x4FC0:tuÇ� 0x4FC1:yÇ” 0x4FC2:xì 0x4FC3:cù,chuò 0x4FC4:é 0x4FC5:qiú 0x4FC6:xú,shÅ« 0x4FC7:guàng 0x4FC8:kù 0x4FC9:wÇ”,wú 0x4FCA:jùn,shùn,dÅ«n 0x4FCB:yì 0x4FCC:fÇ” 0x4FCD:liáng,lÇŽng 0x4FCE:zÇ” 0x4FCF:qiào,xiào,xiÄ�o 0x4FD0:lì 0x4FD1:yÇ’ng 0x4FD2:hùn 0x4FD3:jìng,yíng 0x4FD4:qiàn,xiàn 0x4FD5:sàn 0x4FD6:pÄ›i 0x4FD7:sú 0x4FD8:fú 0x4FD9:xÄ« 0x4FDA:lÇ�,lì 0x4FDB:fÇ”,miÇŽn 0x4FDC:pÄ«ng 0x4FDD:bÇŽo 0x4FDE:yú,shù 0x4FDF:qí,sì 0x4FE0:xiá 0x4FE1:xìn,shÄ“n 0x4FE2:xiÅ« 0x4FE3:yÇ” 0x4FE4:dì 0x4FE5:chÄ“,jÅ« 0x4FE6:chóu 0x4FE7:zhì 0x4FE8:yÇŽn 0x4FE9:liÇŽ,liÇŽng 0x4FEA:lì 0x4FEB:lái 0x4FEC:sÄ« 0x4FED:jiÇŽn 0x4FEE:xiÅ« 0x4FEF:fÇ” 0x4FF0:huò 0x4FF1:jù,jÅ« 0x4FF2:xiào 0x4FF3:pái 0x4FF4:jiàn 0x4FF5:biào 0x4FF6:chù,shÅ«,tì 0x4FF7:fèi 0x4FF8:fèng,bÄ›ng 0x4FF9:yà,yÄ� 0x4FFA:ÇŽn,yàn 0x4FFB:bèi 0x4FFC:yù 0x4FFD:xÄ«n 0x4FFE:bÇ�,bì,bÄ“i,pì 0x4FFF:hÇ”,chí 0x5000:chÄ�ng,chéng,zhèng 0x5001:zhÄ« 0x5002:bìng 0x5003:jiù 0x5004:yáo 0x5005:cuì,zú 0x5006:liÇŽ,liÇŽng 0x5007:wÇŽn 0x5008:lái,lài,liÄ“ 0x5009:cÄ�ng,chuàng 0x500A:zòng 0x500B:gè,gÄ› 0x500C:guÄ�n 0x500D:bèi,péi 0x500E:tiÇŽn 0x500F:shÅ« 0x5010:shÅ« 0x5011:men,mèn,mén 0x5012:dào,dÇŽo 0x5013:tán,dàn,tàn 0x5014:jué,juè 0x5015:chuí,zhuì 0x5016:xìng 0x5017:péng,pÄ›ng,píng 0x5018:tÇŽng,cháng 0x5019:hòu 0x501A:yÇ�,jÄ«,yÄ« 0x501B:qÄ«,qí,qì 0x501C:tì,diào,zhÅ�u 0x501D:gàn 0x501E:jìng,liàng 0x501F:jiè 0x5020:suÄ« 0x5021:chàng,chÄ�ng 0x5022:jié,qiè 0x5023:fÇŽng 0x5024:zhí 0x5025:kÅ�ng,kÇ’ng 0x5026:juàn 0x5027:zÅ�ng 0x5028:jù 0x5029:qiàn,qìng 0x502A:ní,nì,niè 0x502B:lún 0x502C:zhuÅ� 0x502D:wÅ�,wÄ“i,wÇ’ 0x502E:luÇ’ 0x502F:sÅ�ng 0x5030:lèng,líng 0x5031:hùn 0x5032:dÅ�ng,dòng 0x5033:zì 0x5034:bèn,bÄ“n 0x5035:wÇ” 0x5036:jù 0x5037:nÇŽi 0x5038:cÇŽi 0x5039:jiÇŽn 0x503A:zhài 0x503B:yÄ“ 0x503C:zhí 0x503D:shà 0x503E:qÄ«ng 0x503F:nìng 0x5040:yÄ«ng 0x5041:chÄ“ng 0x5042:qián 0x5043:yÇŽn 0x5044:ruÇŽn,rú 0x5045:zhòng,chÅ�ng,tóng 0x5046:chÇ”n 0x5047:jiÇŽ,jià,jie,xià,xiá,gé 0x5048:jì,jié,qì 0x5049:wÄ›i 0x504A:yÇ” 0x504B:bìng,bÇ�ng 0x504C:ruò,rè 0x504D:tí 0x504E:wÄ“i 0x504F:piÄ�n 0x5050:yàn 0x5051:fÄ“ng 0x5052:tÇŽng,dàng 0x5053:wò 0x5054:è 0x5055:xié,jiÄ“ 0x5056:chÄ› 0x5057:shÄ›ng 0x5058:kÇŽn 0x5059:dì 0x505A:zuò 0x505B:chÄ� 0x505C:tíng 0x505D:bèi 0x505E:xiè,yè,zhá 0x505F:huáng 0x5060:yÇŽo 0x5061:zhàn 0x5062:chÇ’u,qiào,zÅ�u 0x5063:yÄ�n 0x5064:yóu 0x5065:jiàn 0x5066:xÇ”,xÅ« 0x5067:zhÄ� 0x5068:cÄ« 0x5069:fù 0x506A:bÄ«,fù 0x506B:zhì 0x506C:zÇ’ng,cÅ�ng 0x506D:miÇŽn 0x506E:jí 0x506F:yÇ� 0x5070:xiè 0x5071:xún 0x5072:cÄ�i,sÄ«,sÇ� 0x5073:duÄ�n 0x5074:cè,zè,zhÄ�i 0x5075:zhÄ“n,zhÄ“ng 0x5076:Ç’u 0x5077:tÅ�u 0x5078:tÅ�u 0x5079:bèi 0x507A:zá,zán,zan 0x507B:lóu,lÇš 0x507C:jié 0x507D:wÄ›i,wéi,é,guì 0x507E:fèn 0x507F:cháng 0x5080:guÄ«,kuài,kuÇ� 0x5081:sÇ’u 0x5082:zhì,sÄ« 0x5083:sù 0x5084:xiÄ� 0x5085:fù,fÅ« 0x5086:yuàn,yuán 0x5087:rÇ’ng 0x5088:lì 0x5089:nù 0x508A:yùn 0x508B:jiÇŽng,gòu 0x508C:mà,mÇŽ 0x508D:bàng,páng,bÄ“ng,péng 0x508E:diÄ�n 0x508F:táng 0x5090:hào 0x5091:jié 0x5092:xÄ«,xì 0x5093:shàn 0x5094:qiàn,jiÄ�n 0x5095:jué,què 0x5096:cÄ�ng,chéng,chen 0x5097:chù 0x5098:sÇŽn 0x5099:bèi 0x509A:xiào 0x509B:yÇ’ng,róng 0x509C:yáo 0x509D:tàn,tà 0x509E:suÅ� 0x509F:yÇŽng 0x50A0:fá 0x50A1:bìng 0x50A2:jiÄ�,xiàng 0x50A3:dÇŽi 0x50A4:zài 0x50A5:tÇŽng 0x50A6:gÇ” 0x50A7:bÄ«n 0x50A8:chÇ” 0x50A9:nuó 0x50AA:cÄ�n,sÇŽn,càn,cÄ�,sÄ“n 0x50AB:lÄ›i 0x50AC:cuÄ« 0x50AD:yÅ�ng,chÅ�ng,yòng 0x50AE:zÄ�o,cáo 0x50AF:zÇ’ng 0x50B0:bÄ“ng,péng 0x50B1:sÇ’ng,shuÇŽng 0x50B2:ào,áo 0x50B3:chuán,zhuàn 0x50B4:yÇ” 0x50B5:zhài 0x50B6:zú,qÄ« 0x50B7:shÄ�ng 0x50B8:chuÇŽng 0x50B9:jìng 0x50BA:chì 0x50BB:shÇŽ 0x50BC:hàn 0x50BD:zhÄ�ng 0x50BE:qÄ«ng,qÇ�ng 0x50BF:yàn,yÄ�n,yìn 0x50C0:dì 0x50C1:xiè,sù 0x50C2:lóu,liÇ”,lÇš 0x50C3:bèi 0x50C4:piào,biÄ�o 0x50C5:jÇ�n,jìn 0x50C6:liàn,lián 0x50C7:lù,liáo 0x50C8:mán,màn 0x50C9:qiÄ�n 0x50CA:xiÄ�n 0x50CB:tàn,làn,tÇŽn 0x50CC:yíng 0x50CD:dòng 0x50CE:zhuàn,zÅ«n 0x50CF:xiàng 0x50D0:shàn 0x50D1:qiáo,jiÇŽo 0x50D2:jiÇ’ng 0x50D3:tuÇ�,tuí 0x50D4:zÇ”n,cuán 0x50D5:pú,pÅ«,bú 0x50D6:xÄ« 0x50D7:láo,lào 0x50D8:chÇŽng 0x50D9:guÄ�ng 0x50DA:liáo,liÇŽo,lÇŽo 0x50DB:qÄ« 0x50DC:chÄ“ng,dèng,dÄ“ng,téng 0x50DD:chán,zhuàn 0x50DE:wÄ›i 0x50DF:jÄ« 0x50E0:bÅ� 0x50E1:huì 0x50E2:chuÇŽn,chÇ”n 0x50E3:tiÄ›,jiàn 0x50E4:dàn,chán,chÇŽn,shàn,dá 0x50E5:jiÇŽo,yáo,jiÄ�o 0x50E6:jiù 0x50E7:sÄ“ng,céng 0x50E8:fèn 0x50E9:xiàn 0x50EA:jú,yù 0x50EB:è 0x50EC:jiÄ�o,jiào,jiÇŽo 0x50ED:jiàn,zèn 0x50EE:tóng,zhuàng,chòng 0x50EF:lìn,lÇ�n 0x50F0:bó 0x50F1:gù 0x50F2:xiÄ�n 0x50F3:sù 0x50F4:xiàn 0x50F5:jiÄ�ng 0x50F6:mÇ�n 0x50F7:yè 0x50F8:jìn 0x50F9:jià,qiÇŽ,jie 0x50FA:qiào 0x50FB:pì 0x50FC:fÄ“ng 0x50FD:zhòu,zhÅ�u 0x50FE:ài 0x50FF:sài 0x5100:yí 0x5101:jùn 0x5102:nóng 0x5103:chán,shàn,tÇŽn,dàn,zhÇŽn 0x5104:yì,yÄ« 0x5105:dàng,dÄ�ng 0x5106:jÇ�ng 0x5107:xuÄ�n,xuán 0x5108:kuài 0x5109:jiÇŽn 0x510A:chù 0x510B:dÄ�n,dàn,shàn 0x510C:jiÇŽo,jiÄ�o 0x510D:shÇŽ 0x510E:zài 0x510F:càn 0x5110:bÄ«n,bìn 0x5111:án,àn 0x5112:rú 0x5113:tái,tài 0x5114:chóu,dào 0x5115:chái 0x5116:lán 0x5117:nÇ�,yí,yì,ài 0x5118:jÇ�n,jìn 0x5119:qiàn 0x511A:méng 0x511B:wÇ” 0x511C:níng 0x511D:qióng 0x511E:nÇ� 0x511F:cháng 0x5120:liè,là 0x5121:lÄ›i,léi,lèi 0x5122:lÇš 0x5123:kuÇŽng 0x5124:bào 0x5125:yù,dí,dú 0x5126:biÄ�o 0x5127:zÇŽn 0x5128:zhì 0x5129:sì 0x512A:yÅ�u 0x512B:háo 0x512C:qìng 0x512D:chèn,qìn,qÄ«n 0x512E:lì 0x512F:téng 0x5130:wÄ›i 0x5131:lÇ’ng,lòng,lóng 0x5132:chÇ”,chú 0x5133:chán,chàn 0x5134:ráng,xiÄ�ng 0x5135:shÅ«,tiáo 0x5136:huì,xié 0x5137:lì,lí 0x5138:luó 0x5139:zÇŽn 0x513A:nuó 0x513B:tÇŽng,tàng,chÇŽng 0x513C:yÇŽn 0x513D:léi,lÄ›i,luÇ’ 0x513E:nàng 0x513F:ér,rén 0x5140:wù,wÅ« 0x5141:yÇ”n,yuán 0x5142:zÄ�n 0x5143:yuán 0x5144:xiÅ�ng,kuàng 0x5145:chÅ�ng 0x5146:zhào 0x5147:xiÅ�ng 0x5148:xiÄ�n 0x5149:guÄ�ng,guàng 0x514A:duì 0x514B:kè 0x514C:duì 0x514D:miÇŽn,wèn,wÇŽn 0x514E:tù 0x514F:cháng 0x5150:ér 0x5151:duì,ruì,duó 0x5152:ér,ní 0x5153:jÄ«n,zàn 0x5154:tù,tú,chÄ�n 0x5155:sì 0x5156:yÇŽn 0x5157:yÇŽn 0x5158:shÇ� 0x515A:dÇŽng 0x515B:qiÄ�n 0x515C:dÅ�u 0x515D:fÄ“n 0x515E:máo 0x515F:shÄ“n 0x5160:dÅ�u 0x5162:jÄ«ng 0x5163:lÇ� 0x5164:huÇŽng 0x5165:rù 0x5166:wáng 0x5167:nèi 0x5168:quán 0x5169:liÇŽng,liàng 0x516A:yú,yù,shù,shÅ«,zhÅ« 0x516B:bÄ�,bá 0x516C:gÅ�ng 0x516D:liù,lù 0x516E:xÄ« 0x516F:han 0x5170:lán 0x5171:gòng,gÅ�ng,gÇ’ng,hóng 0x5172:tiÄ�n 0x5173:guÄ�n 0x5174:xìng,xÄ«ng 0x5175:bÄ«ng 0x5176:qí,jÄ«,jì 0x5177:jù 0x5178:diÇŽn,tiÇŽn 0x5179:zÄ«,cí 0x517A:fÄ“n 0x517B:yÇŽng 0x517C:jiÄ�n 0x517D:shòu 0x517E:jì 0x517F:yì 0x5180:jì 0x5181:chÇŽn 0x5182:jiÅ�ng,jiÇ’ng 0x5183:mào 0x5184:rÇŽn 0x5185:nèi,nà,ruì 0x5186:yuán 0x5187:mÇŽo 0x5188:gÄ�ng 0x5189:rÇŽn,nán,dÄ�n 0x518A:cè 0x518B:jiÅ�ng,jiÇ’ng 0x518C:cè,zhà 0x518D:zài 0x518E:guÇŽ 0x518F:jiÇ’ng,jiÅ�ng 0x5190:mào 0x5191:zhòu 0x5192:mào,mò 0x5193:gòu,gÅ�u 0x5194:xÇ” 0x5195:miÇŽn 0x5196:mì 0x5197:rÇ’ng 0x5198:yín,yóu 0x5199:xiÄ›,xiè 0x519A:kÇŽn 0x519B:jÅ«n 0x519C:nóng 0x519D:yí 0x519E:mí 0x519F:shì 0x51A0:guÄ�n,guàn 0x51A1:méng 0x51A2:zhÇ’ng 0x51A3:jù 0x51A4:yuÄ�n 0x51A5:míng,mián,miàn 0x51A6:kòu 0x51A7:lín 0x51A8:fù 0x51A9:xiÄ› 0x51AA:mì 0x51AB:bÄ«ng 0x51AC:dÅ�ng 0x51AD:tài 0x51AE:gÄ�ng 0x51AF:féng,píng 0x51B0:bÄ«ng,níng 0x51B1:hù 0x51B2:chÅ�ng,chòng 0x51B3:jué 0x51B4:hù 0x51B5:kuàng 0x51B6:yÄ› 0x51B7:lÄ›ng,líng,lÇ�ng 0x51B8:pàn 0x51B9:fú 0x51BA:mÇ�n 0x51BB:dòng 0x51BC:xiÇŽn,shÄ›ng 0x51BD:liè 0x51BE:qià 0x51BF:jiÄ�n 0x51C0:jìng,chÄ“ng 0x51C1:sÅ�u 0x51C2:mÄ›i 0x51C3:tú 0x51C4:qÄ« 0x51C5:gù 0x51C6:zhÇ”n 0x51C7:sÅ�ng 0x51C8:jìng 0x51C9:liáng,liàng 0x51CA:qìng 0x51CB:diÄ�o 0x51CC:líng,lìng 0x51CD:dòng 0x51CE:gàn 0x51CF:jiÇŽn 0x51D0:yÄ«n 0x51D1:còu 0x51D2:ái 0x51D3:lì 0x51D4:chuàng,cÄ�ng 0x51D5:mÇ�ng 0x51D6:zhÇ”n 0x51D7:cuÄ« 0x51D8:sÄ« 0x51D9:duó 0x51DA:jìn 0x51DB:lÇ�n 0x51DC:lÇ�n 0x51DD:níng 0x51DE:xÄ« 0x51DF:dú 0x51E0:jÇ�,jÄ« 0x51E1:fán 0x51E2:fán 0x51E3:fán 0x51E4:fèng 0x51E5:jÅ« 0x51E6:chÇ”,chù 0x51E7:zhÄ“ng 0x51E8:fÄ“ng 0x51E9:mù 0x51EA:zhÇ� 0x51EB:fú 0x51EC:fÄ“ng 0x51ED:píng 0x51EE:fÄ“ng 0x51EF:kÇŽi 0x51F0:huáng 0x51F1:kÇŽi 0x51F2:gÄ�n 0x51F3:dèng 0x51F4:píng 0x51F5:qiÇŽn,kÇŽn 0x51F6:xiÅ�ng 0x51F7:kuài 0x51F8:tÅ« 0x51F9:Ä�o,wÄ� 0x51FA:chÅ« 0x51FB:jÄ« 0x51FC:dàng 0x51FD:hán 0x51FE:hán 0x51FF:záo,zuò 0x5200:dÄ�o,diÄ�o 0x5201:diÄ�o 0x5202:dÄ�o 0x5203:rèn 0x5204:rèn 0x5205:chuÄ�ng 0x5206:fÄ“n,fèn,fén 0x5207:qiè,qiÄ“,qì 0x5208:yì 0x5209:jÄ« 0x520A:kÄ�n 0x520B:qiàn 0x520C:cÇ”n 0x520D:chú 0x520E:wÄ›n 0x520F:jÄ« 0x5210:dÇŽn 0x5211:xíng 0x5212:huà,guò,guÇ’,huá,huai 0x5213:wán 0x5214:jué 0x5215:lí 0x5216:yuè 0x5217:liè,lì 0x5218:liú 0x5219:zé 0x521A:gÄ�ng 0x521B:chuàng,chuÄ�ng 0x521C:fú 0x521D:chÅ« 0x521E:qù 0x521F:diÄ�o 0x5220:shÄ�n 0x5221:mÇ�n 0x5222:líng 0x5223:zhÅ�ng 0x5224:pàn 0x5225:bié 0x5226:jié 0x5227:jié 0x5228:páo,bào 0x5229:lì 0x522A:shÄ�n 0x522B:bié,biè 0x522C:chÇŽn,chàn 0x522D:jÇ�ng 0x522E:guÄ� 0x522F:gÄ“ng 0x5230:dào 0x5231:chuàng 0x5232:kuÄ« 0x5233:kÅ«,kÅ�u 0x5234:duò 0x5235:èr 0x5236:zhì 0x5237:shuÄ�,shuà 0x5238:quàn,xuàn 0x5239:shÄ�,chà 0x523A:cì,qì,cÄ« 0x523B:kè,kÄ“i 0x523C:jié 0x523D:guì 0x523E:cì 0x523F:guì 0x5240:kÇŽi 0x5241:duò 0x5242:jì 0x5243:tì 0x5244:jÇ�ng 0x5245:lóu,dÅ�u 0x5246:luÇ’ 0x5247:zé 0x5248:yuÄ�n 0x5249:cuò 0x524A:xuÄ“,qiào,xiÄ�o,shào 0x524B:kè,kÄ“i 0x524C:lá,là 0x524D:qián,jiÇŽn 0x524E:shÄ� 0x524F:chuàng 0x5250:guÇŽ 0x5251:jiàn 0x5252:cuò 0x5253:lí 0x5254:tÄ«,tì 0x5255:fèi 0x5256:pÅ�u,pÇ’ 0x5257:chÇŽn,chàn 0x5258:qí 0x5259:chuàng 0x525A:zì 0x525B:gÄ�ng 0x525C:wÄ�n 0x525D:bÅ� 0x525E:jÄ« 0x525F:duÅ�,chì 0x5260:qíng,lüè 0x5261:shàn,yÇŽn 0x5262:dÅ«,zhuó 0x5263:jiàn 0x5264:jì 0x5265:bÅ�,bÄ�o,pÅ« 0x5266:yÄ�n 0x5267:jù 0x5268:huÅ�,huò 0x5269:shèng 0x526A:jiÇŽn 0x526B:duó,dù 0x526C:duÄ�n,tuán,zhì 0x526D:wÅ« 0x526E:guÇŽ 0x526F:fù,pì 0x5270:shèng 0x5271:jiàn 0x5272:gÄ“ 0x5273:dá,zhá 0x5274:kÇŽi,Ä�i 0x5275:chuàng,chuÄ�ng,qiÄ�ng 0x5276:chuÄ�n 0x5277:chÇŽn 0x5278:tuán,zhuÄ�n,zhuàn 0x5279:lù,jiÅ« 0x527A:lí 0x527B:pÄ›ng 0x527C:shÄ�n 0x527D:piÄ�o,piào,piáo,biÇŽo,biÄ�o 0x527E:kÅ�u 0x527F:jiÇŽo,chÄ�o 0x5280:guÄ� 0x5281:qiÄ�o,qiáo 0x5282:jué 0x5283:huà,huá,huai 0x5284:zhÄ�,zhá 0x5285:zhuó 0x5286:lián 0x5287:jù 0x5288:pÄ«,pÇ� 0x5289:liú 0x528A:guì 0x528B:jiÇŽo,chÄ�o 0x528C:guì 0x528D:jiàn 0x528E:jiàn 0x528F:tÄ�ng 0x5290:huÅ�,huò,huá 0x5291:jì 0x5292:jiàn 0x5293:yì 0x5294:jiàn 0x5295:zhì 0x5296:chán 0x5297:jiÇŽn,zuÄ�n 0x5298:mó,mí 0x5299:lí 0x529A:zhÇ” 0x529B:lì 0x529C:yà 0x529D:quàn 0x529E:bàn 0x529F:gÅ�ng 0x52A0:jiÄ� 0x52A1:wù 0x52A2:mài 0x52A3:liè 0x52A4:jìn 0x52A5:kÄ“ng 0x52A6:xié,liè 0x52A7:zhÇ� 0x52A8:dòng 0x52A9:zhù,chú 0x52AA:nÇ” 0x52AB:jié 0x52AC:qú 0x52AD:shào 0x52AE:yì 0x52AF:zhÅ« 0x52B0:mò 0x52B1:lì 0x52B2:jìn,jìng 0x52B3:láo 0x52B4:láo 0x52B5:juàn 0x52B6:kÇ’u 0x52B7:yáng 0x52B8:wÄ� 0x52B9:xiào 0x52BA:móu 0x52BB:kuÄ�ng 0x52BC:jié 0x52BD:liè 0x52BE:hé,kài 0x52BF:shì 0x52C0:kè 0x52C1:jìn,jìng 0x52C2:gào 0x52C3:bó 0x52C4:mÇ�n 0x52C5:chì 0x52C6:láng 0x52C7:yÇ’ng 0x52C8:yÇ’ng 0x52C9:miÇŽn 0x52CA:kè 0x52CB:xÅ«n 0x52CC:juàn,juÄ�n 0x52CD:qíng 0x52CE:lù 0x52CF:bù 0x52D0:mÄ›ng 0x52D1:chì,lài 0x52D2:lÄ“i,lè,lei 0x52D3:kài 0x52D4:miÇŽn 0x52D5:dòng 0x52D6:xù,mào 0x52D7:xù 0x52D8:kÄ�n 0x52D9:wù,wÇ”,wú,máo,mào 0x52DA:yì 0x52DB:xÅ«n 0x52DC:wÄ›ng,yÇŽng 0x52DD:shèng 0x52DE:láo,lào,liáo 0x52DF:mù,bó 0x52E0:lù 0x52E1:piào 0x52E2:shì 0x52E3:jÄ« 0x52E4:qín,qí 0x52E5:jiàng,qiÇŽng,jiÇŽng 0x52E6:chÄ�o,jiÇŽo,cháo 0x52E7:quàn 0x52E8:xiàng 0x52E9:yì 0x52EA:jué 0x52EB:fÄ�n 0x52EC:juÄ�n 0x52ED:tóng,dòng 0x52EE:jù 0x52EF:dÄ�n 0x52F0:xié 0x52F1:mài 0x52F2:xÅ«n 0x52F3:xÅ«n 0x52F4:lÇœ 0x52F5:lì 0x52F6:chè 0x52F7:ráng,xiÄ�ng 0x52F8:quàn 0x52F9:bÄ�o 0x52FA:sháo,shuò,zhuó,dì 0x52FB:yún 0x52FC:jiÅ« 0x52FD:bào 0x52FE:gÅ�u,gòu 0x52FF:wù,mò 0x5300:yún,jÅ«n,yùn 0x5301:wén 0x5302:xiÅ�ng 0x5303:gài 0x5304:gài 0x5305:bÄ�o,páo,fú 0x5306:cÅ�ng 0x5307:yì 0x5308:xiÅ�ng 0x5309:pÄ“ng 0x530A:jÅ« 0x530B:táo,yáo 0x530C:gé 0x530D:pú 0x530E:è 0x530F:páo 0x5310:fú 0x5311:gÅ�ng 0x5312:dá 0x5313:jiù 0x5314:gÅ�ng 0x5315:bÇ�,pìn 0x5316:huà,huÄ�,huò 0x5317:bÄ›i,bèi 0x5318:nÇŽo 0x5319:shi,chí 0x531A:fÄ�ng,fàng 0x531B:jiù 0x531C:yí 0x531D:zÄ� 0x531E:jiàng 0x531F:kàng 0x5320:jiàng 0x5321:kuÄ�ng,wÄ�ng 0x5322:hÅ« 0x5323:xiá 0x5324:qÅ« 0x5325:fán 0x5326:guÇ� 0x5327:qiè 0x5328:zÄ�ng,cáng 0x5329:kuÄ�ng 0x532A:fÄ›i,fÄ“i,fÄ“n 0x532B:hÅ« 0x532C:yÇ” 0x532D:guÇ� 0x532E:kuì 0x532F:huì 0x5330:dÄ�n 0x5331:guì,kuì 0x5332:lián 0x5333:lián 0x5334:suÇŽn 0x5335:dú 0x5336:jiù 0x5337:jué 0x5338:xì 0x5339:pÇ� 0x533A:qÅ«,Å�u 0x533B:yÄ«,yì 0x533C:kÄ“,Ä“,ÇŽn 0x533D:yÇŽn,yàn 0x533E:biÇŽn 0x533F:nì,tè 0x5340:qÅ«,Å�u,gÅ�u,qiÅ«,kòu 0x5341:shí 0x5342:xùn 0x5343:qiÄ�n 0x5344:niàn 0x5345:sà 0x5346:zú 0x5347:shÄ“ng 0x5348:wÇ” 0x5349:huì 0x534A:bàn,pàn 0x534B:shì 0x534C:xì 0x534D:wàn 0x534E:huá,huà 0x534F:xié 0x5350:wàn 0x5351:bÄ“i,bÇ�,bì,pí,bÄ�n 0x5352:zú,cù,cuì 0x5353:zhuó,zhuÅ� 0x5354:xié 0x5355:dÄ�n,chán,shàn 0x5356:mài 0x5357:nán,nÄ� 0x5358:dÄ�n 0x5359:jí,chì 0x535A:bó 0x535B:shuài 0x535C:bo,bÇ”,pÅ« 0x535D:kuàng,guàn 0x535E:biàn,pán 0x535F:bÇ”,jÄ« 0x5360:zhàn,zhÄ�n,tiÄ“ 0x5361:kÇŽ,qiÇŽ 0x5362:lú 0x5363:yÇ’u 0x5364:lÇ”,xÄ« 0x5365:xÄ« 0x5366:guà 0x5367:wò 0x5368:xiè 0x5369:jié 0x536A:jié 0x536B:wèi 0x536C:áng,yÇŽng 0x536D:qióng 0x536E:zhÄ« 0x536F:mÇŽo 0x5370:yìn,yì 0x5371:wÄ“i 0x5372:shào 0x5373:jí 0x5374:què 0x5375:luÇŽn,kÅ«n 0x5376:chÇ� 0x5377:juÇŽn,juàn,quán,quÄ�n,gÇ”n,jùn 0x5378:xiè 0x5379:xù,sÅ« 0x537A:jÇ�n 0x537B:què,jiÇŽo,xì 0x537C:wù 0x537D:jí 0x537E:è 0x537F:qÄ«ng 0x5380:xÄ« 0x5381:sÄ�n 0x5382:chÇŽng,hÇŽn,yán,Ä�n 0x5383:wÄ›i,yán 0x5384:è,Ä› 0x5385:tÄ«ng 0x5386:lì 0x5387:zhé,zhái 0x5388:hÇŽn,àn 0x5389:lì 0x538A:yÇŽ 0x538B:yÄ�,yà 0x538C:yàn 0x538D:shè 0x538E:dÇ�,zhÇ� 0x538F:zhÇŽ,zhÇŽi 0x5390:páng 0x5391:yá 0x5392:qiè 0x5393:yá,ái 0x5394:zhì,shÄ« 0x5395:cè,si 0x5396:páng,máng 0x5397:tí 0x5398:lí,chán 0x5399:shè 0x539A:hòu 0x539B:tÄ«ng 0x539C:zuÄ« 0x539D:cuò,jí 0x539E:fèi 0x539F:yuán 0x53A0:cè 0x53A1:yuán 0x53A2:xiÄ�ng 0x53A3:yÇŽn 0x53A4:lì 0x53A5:jué 0x53A6:shà,xià 0x53A7:diÄ�n 0x53A8:chú 0x53A9:jiù 0x53AA:jÇ�n 0x53AB:áo 0x53AC:guÇ� 0x53AD:yàn,yÄ�,yÇŽn,yÄ�n,yì 0x53AE:sÄ« 0x53AF:lì 0x53B0:chÇŽng 0x53B1:lán,qiÄ�n 0x53B2:lì,lài 0x53B3:yán 0x53B4:yÇŽn 0x53B5:yuán 0x53B6:sÄ«,mÇ’u 0x53B7:gÅ�ng,hóng 0x53B8:lín,min 0x53B9:róu,qiú 0x53BA:qù 0x53BB:qù,qÅ« 0x53BC:Ä›r 0x53BD:lÄ›i 0x53BE:dÅ«,dÇ” 0x53BF:xiàn 0x53C0:zhuÄ�n,huì 0x53C1:sÄ�n 0x53C2:cÄ�n,cÄ“n,shÄ“n 0x53C3:cÄ�n,shÄ“n,sÄ�n,cÄ“n,càn,sÇŽn 0x53C4:cÄ�n 0x53C5:cÄ�n 0x53C6:ài 0x53C7:dài 0x53C8:yòu 0x53C9:chÄ�,chá,chÇŽ,chà 0x53CA:jí 0x53CB:yÇ’u 0x53CC:shuÄ�ng 0x53CD:fÇŽn,fàn 0x53CE:shÅ�u 0x53CF:guài 0x53D0:bá 0x53D1:fÄ�,fà 0x53D2:ruò 0x53D3:shì,lì 0x53D4:shÅ« 0x53D5:zhuó,yÇ�,lì,jué 0x53D6:qÇ”,qÅ« 0x53D7:shòu,dào 0x53D8:biàn 0x53D9:xù 0x53DA:jiÇŽ,xiá 0x53DB:pàn 0x53DC:sÇ’u 0x53DD:jí 0x53DE:wèi 0x53DF:sÇ’u,sÅ�u,xiÄ�o 0x53E0:dié 0x53E1:ruì 0x53E2:cóng 0x53E3:kÇ’u 0x53E4:gÇ”,gù,kÅ« 0x53E5:jù,gÅ�u,gòu,qú 0x53E6:lìng 0x53E7:guÇŽ 0x53E8:dÄ�o,tÄ�o,dáo 0x53E9:kòu 0x53EA:zhÇ�,zhÄ« 0x53EB:jiào 0x53EC:zhào,shào 0x53ED:bÄ�,pÄ�,ba 0x53EE:dÄ«ng 0x53EF:kÄ›,gÄ“,kè 0x53F0:tái,yí,sì,tÄ�i 0x53F1:chì,huà,é 0x53F2:shÇ� 0x53F3:yòu 0x53F4:qiú 0x53F5:pÇ’ 0x53F6:yè,xié 0x53F7:hào,háo,xiÄ�o 0x53F8:sÄ«,cí,sì 0x53F9:tàn,yÇ�,yòu 0x53FA:chÇ� 0x53FB:lè,lì 0x53FC:diÄ�o 0x53FD:jÄ«,jiào 0x53FE:liÇŽo 0x53FF:hÅ�ng,hóng 0x5400:miÄ“ 0x5401:xÅ«,yù,yÅ« 0x5402:máng,màng 0x5403:chÄ«,qÄ« 0x5404:gè,gÄ› 0x5405:xuÄ�n,sòng 0x5406:yÄ�o 0x5407:zÇ�,jí 0x5408:hé,gÄ› 0x5409:jí 0x540A:diào 0x540B:cùn,dòu,yÄ«ng 0x540C:tóng,tòng 0x540D:míng,mìng 0x540E:hòu 0x540F:lì 0x5410:tÇ”,tù 0x5411:xiàng 0x5412:zhÄ�,zhà 0x5413:xià,hà,hè 0x5414:yÄ›,yÄ“ 0x5415:lÇš 0x5416:yÄ�,Ä� 0x5417:ma,má,mÇŽ 0x5418:Ç’u 0x5419:huÅ� 0x541A:yÄ«,xÄ« 0x541B:jÅ«n 0x541C:chÇ’u 0x541D:lìn 0x541E:tÅ«n,tiÄ�n 0x541F:yín,yÇ�n,jìn 0x5420:fèi 0x5421:bÇ�,bì,pÇ� 0x5422:qìn 0x5423:qìn 0x5424:jiè,gè,xiè 0x5425:bù,pÅ�u 0x5426:fÇ’u,pÇ� 0x5427:ba,bÄ�,pÄ� 0x5428:dÅ«n,tún,tÇ”n 0x5429:fÄ“n,pèn 0x542A:é,huÄ� 0x542B:hán,hàn 0x542C:tÄ«ng,yÇ�n,yí 0x542D:kÄ“ng,háng,hàng 0x542E:shÇ”n 0x542F:qÇ� 0x5430:hóng 0x5431:zhÄ«,zÄ«,qì 0x5432:yÇ�n,shÄ›n 0x5433:wú,yú 0x5434:wú,tÅ«n 0x5435:chÇŽo,miÇŽo,chÄ�o,chào 0x5436:nà 0x5437:xuè,chuò,jué 0x5438:xÄ« 0x5439:chuÄ«,chuì 0x543A:dÅ�u,rú 0x543B:wÄ›n 0x543C:hÇ’u 0x543D:hÅ�ng,Å�u,hÇ’u 0x543E:wú,yú,yá 0x543F:gào 0x5440:ya,xiÄ�,yÄ� 0x5441:jùn 0x5442:lÇš 0x5443:è,ài,e 0x5444:gé 0x5445:méi,wÄ›n 0x5446:dÄ�i,bÇŽo,ái 0x5447:qÇ� 0x5448:chéng,kuáng,chÄ›ng 0x5449:wú 0x544A:gào,jÅ«,gù 0x544B:fÅ« 0x544C:jiào 0x544D:hÅ�ng 0x544E:chÇ�,yÄ«ng 0x544F:shÄ“ng 0x5450:nà,nè,na,nuò,ne 0x5451:tÅ«n 0x5452:wÇ”,ḿ 0x5453:yì 0x5454:dÄ�i,tÇŽi 0x5455:Ç’u,òu 0x5456:lì 0x5457:bei,bài 0x5458:yuán,yún,yùn 0x5459:guÅ� 0x545A:wen 0x545B:qiÄ�ng,qiàng 0x545C:wÅ« 0x545D:è 0x545E:shÄ« 0x545F:juÇŽn 0x5460:pÄ›n 0x5461:wÄ›n,mÇ�n 0x5462:ne,ní,nÇ�,nÄ« 0x5463:ḿ,móu,mÌ€ 0x5464:lìng,líng 0x5465:rán 0x5466:yÅ�u 0x5467:dÇ� 0x5468:zhÅ�u 0x5469:shì 0x546A:zhòu 0x546B:tiè,chè 0x546C:xì,chì 0x546D:yì 0x546E:qì,zhÄ« 0x546F:píng 0x5470:zÇ�,cÄ«,jÄ«,xì 0x5471:gÅ«,guÄ�,guÇŽ 0x5472:cÄ«,cí,zÄ« 0x5473:wèi,mèi 0x5474:xÇ”,hÇ’u,hÅ�u,gòu,gÅ�u,gÅ« 0x5475:hÄ“,hÄ�,Ä�,a,kÄ“,huÅ�,á,à 0x5476:náo,ná,nÇ” 0x5477:gÄ�,xiÄ�,jiÇŽ 0x5478:pÄ“i 0x5479:yì,chì 0x547A:xiÄ�o,háo 0x547B:shÄ“n 0x547C:hÅ«,xiÄ�o,xÅ«,hè,xià 0x547D:mìng 0x547E:dá,yà,tÇŽ,dàn 0x547F:qù,kÄ� 0x5480:jÇ”,zuÇ� 0x5481:hán,xián,gàn 0x5482:zÄ� 0x5483:tuÅ� 0x5484:duÅ� 0x5485:pÇ’u 0x5486:páo 0x5487:bié,bì 0x5488:fú 0x5489:yÄ�ng,yÇŽng 0x548A:hé 0x548B:zÇŽ,zé,zhà,zhÄ� 0x548C:hé,hè,huò,huó,hú 0x548D:hÄ�i,tÄ�i 0x548E:jiù,gÄ�o 0x548F:yÇ’ng 0x5490:fù,fú 0x5491:dÄ� 0x5492:zhòu 0x5493:wÇŽ 0x5494:kÄ�,nòng,kÇŽ 0x5495:gÅ«,gu 0x5496:kÄ�,jiÄ�,gÄ� 0x5497:zuo 0x5498:bù 0x5499:lóng 0x549A:dÅ�ng 0x549B:níng 0x549C:ta 0x549D:sÄ« 0x549E:xiàn,xián 0x549F:huò 0x54A0:qì 0x54A1:èr,ér 0x54A2:è 0x54A3:guÄ�ng,gÅ�ng 0x54A4:zhà 0x54A5:xì,xÄ«,dié,zhì 0x54A6:yí,xÄ« 0x54A7:liÄ›,liè,liÄ“,lié,lie 0x54A8:zÄ« 0x54A9:miÄ“,mie 0x54AA:mÄ«,miÄ“,mÇŽi,mÇ� 0x54AB:zhÇ� 0x54AC:yÇŽo,jiÄ�o,yÄ�o,jiÇŽo 0x54AD:jÄ«,xÄ«,qià 0x54AE:zhòu,zhù,zhÅ«,rú 0x54AF:gÄ“,luò,kÇŽ,kÄ�,lo 0x54B0:shù,xún 0x54B1:zán,zá,zÇŽ,zan 0x54B2:xiào 0x54B3:hÄ�i,hái,ké,gÄ�i 0x54B4:huÄ«,hái 0x54B5:kuÇŽ 0x54B6:huài,shì,guÅ�,guÄ�,huà 0x54B7:táo,tiào 0x54B8:xián,jiÇŽn,jiÄ�n 0x54B9:è,àn,Å„ 0x54BA:xuÇŽn,xuÄ�n 0x54BB:xiÅ«,xÇ”,xiÄ�o,xù 0x54BC:guÅ�,wÄ�i,hé,wÇ’,wÅ�,guÇŽ 0x54BD:yàn,yÄ�n,yè,yuÄ�n 0x54BE:lÇŽo 0x54BF:yÄ« 0x54C0:Ä�i 0x54C1:pÇ�n 0x54C2:shÄ›n 0x54C3:tóng 0x54C4:hÅ�ng,hòng,hÇ’ng 0x54C5:xiÅ�ng,hÅ�ng 0x54C6:duÅ�,chÇ�,zhà,chì,duò,diÄ› 0x54C7:wa,wÄ�,guÄ«,huá,wá 0x54C8:hÄ�,hà,hÄ“,hé,hÇŽ,tà,shà 0x54C9:zÄ�i 0x54CA:yòu 0x54CB:diè,dì 0x54CC:pài,gÅ« 0x54CD:xiÇŽng 0x54CE:Ä�i 0x54CF:gén,hÄ›n,ǹ 0x54D0:kuÄ�ng,qiÄ�ng 0x54D1:yÇŽ,yÄ� 0x54D2:dá 0x54D3:xiÄ�o 0x54D4:bì 0x54D5:huì,yuÄ› 0x54D6:nián 0x54D7:huÄ�,huá 0x54D8:xing 0x54D9:kuài 0x54DA:duÇ’ 0x54DB:fÄ“n 0x54DC:jì 0x54DD:nóng 0x54DE:mÅ�u 0x54DF:yÅ�,yo 0x54E0:hào 0x54E1:yuán,yún,yùn 0x54E2:lòng 0x54E3:pÇ’u 0x54E4:máng 0x54E5:gÄ“ 0x54E6:ó,é,ò 0x54E7:chÄ«,xià,hè 0x54E8:shào,sÄ�o,xiÄ�o,xiào,sào 0x54E9:lÄ«,lì,li,lÇ�,mái,yÄ«ng 0x54EA:nÇŽ,nuó,na,nÇŽi,nà,niè,né,nÄ›i 0x54EB:zú 0x54EC:hé 0x54ED:kÅ« 0x54EE:xiÄ�o,xiào,xuÄ“ 0x54EF:xiàn 0x54F0:láo 0x54F1:bÅ�,pò,bèi,bÄ�,bó 0x54F2:zhé 0x54F3:zhÄ� 0x54F4:liàng,láng 0x54F5:bÄ� 0x54F6:miÄ“ 0x54F7:liè,lÇœ 0x54F8:suÄ« 0x54F9:fú 0x54FA:bÇ”,bÅ«,fÇ” 0x54FB:hÄ�n 0x54FC:hÄ“ng,hng 0x54FD:gÄ›ng,yÇ�ng,yìng,Å„g,Å„ 0x54FE:shuÅ�,yuè 0x54FF:gÄ› 0x5500:yòu 0x5501:yàn 0x5502:gÅ« 0x5503:gÇ” 0x5504:bei,bài 0x5505:hán 0x5506:suÅ�,shuà 0x5507:chún,zhÄ“n,zhèn 0x5508:yì 0x5509:Ä�i,ÇŽi,ài 0x550A:jiá,qiÇŽn 0x550B:tÅ« 0x550C:xián,yán,dàn 0x550D:wÇŽn 0x550E:lì 0x550F:xÄ«,xiè 0x5510:táng 0x5511:zuò,shì 0x5512:qiú 0x5513:chÄ“ 0x5514:wú,wù,Å„g,ḿ,Å„ 0x5515:zào 0x5516:yÇŽ 0x5517:dÅ�u 0x5518:qÇ� 0x5519:dí 0x551A:qìn,qÄ«n 0x551B:mà 0x551C:mò 0x551D:gòng,hÇ’ng 0x551E:dÇ’u 0x551F:qù 0x5520:láo,lào 0x5521:liÇŽng,yÄ«ng 0x5522:suÇ’ 0x5523:zào 0x5524:huàn 0x5525:lang 0x5526:shÄ� 0x5527:jÄ«,jié 0x5528:zÇ” 0x5529:wÅ�,wÄ›i 0x552A:fÄ›ng,bÄ›ng 0x552B:jìn,yín 0x552C:hÇ”,xiÄ�o,guó,xià,háo 0x552D:qì 0x552E:shòu,shú 0x552F:wéi,wÄ›i 0x5530:shuÄ� 0x5531:chàng 0x5532:ér,wÄ� 0x5533:lì 0x5534:qiàng 0x5535:ÇŽn,ng,n 0x5536:zé,jiè 0x5537:yÅ�,yù 0x5538:niàn,diàn 0x5539:yÅ« 0x553A:tiÇŽn 0x553B:lài,lái 0x553C:shà,qiè 0x553D:xÄ« 0x553E:tuò 0x553F:hÅ« 0x5540:ái 0x5541:zhÄ�o,dÄ�o,zhÅ�u,tiáo,diào 0x5542:nÇ’u 0x5543:kÄ›n 0x5544:zhuó,zhòu 0x5545:zhuó,zhào 0x5546:shÄ�ng 0x5547:dì,shì,zhÄ�i 0x5548:hÄ“ng,hèng,è,zá 0x5549:lín,lán,lèn 0x554A:a,è,Ä�,á,ÇŽ,à 0x554B:cÇŽi,cÄ�i,xiÄ�o 0x554C:xiÄ�ng,qiÄ�ng 0x554D:tÅ«n,zhÅ«n,xiÄ�ng,tuÄ«,duÇ� 0x554E:wÇ” 0x554F:wèn 0x5550:cuì,zú,zá,è,chuài 0x5551:shà,zÄ�,jié,dié,tì 0x5552:gÇ” 0x5553:qÇ� 0x5554:qÇ� 0x5555:táo 0x5556:dàn 0x5557:dàn 0x5558:yè,wÄ� 0x5559:zÇ�,cÄ« 0x555A:bÇ�,tú 0x555B:cuì 0x555C:chuài,chuò,zhuó 0x555D:hé 0x555E:yÇŽ,è,yÄ� 0x555F:qÇ� 0x5560:zhé 0x5561:fÄ“i,pèi,pái,pÄ“i,bài 0x5562:liÇŽng,yÄ«ng 0x5563:xián 0x5564:pí 0x5565:shá,shà 0x5566:la,lÄ� 0x5567:zé 0x5568:yÄ«ng,qíng 0x5569:guà 0x556A:pÄ� 0x556B:zhÄ› 0x556C:sè 0x556D:zhuàn 0x556E:niè 0x556F:guÅ� 0x5570:luÅ� 0x5571:yán 0x5572:dÄ« 0x5573:quán,jué 0x5574:chÇŽn,tÄ�n 0x5575:bÅ�,bo 0x5576:dìng 0x5577:lÄ�ng 0x5578:xiào 0x5579:jú 0x557A:táng 0x557B:chì,dì 0x557C:tí 0x557D:án,Ä�n 0x557E:jiÅ« 0x557F:dàn 0x5580:kÄ�,kè,ke 0x5581:yóng,yú 0x5582:wèi 0x5583:nán,nÇŽn 0x5584:shàn 0x5585:yù 0x5586:zhé 0x5587:lÇŽ,lá,lÄ�,la 0x5588:jiÄ“,xiè 0x5589:hóu 0x558A:hÇŽn,kàn,jiÄ�n 0x558B:dié,zhá,qiè 0x558C:zhÅ�u 0x558D:chái 0x558E:wÄ�i 0x558F:nuò,rÄ› 0x5590:yù 0x5591:yÄ«n,yÇ�n,yìn 0x5592:zá,zÇŽn,zán,zà,zan 0x5593:yÄ�o 0x5594:Å�,wÅ�,wÅ«,o,ò 0x5595:miÇŽn 0x5596:hú 0x5597:yÇ”n 0x5598:chuÇŽn 0x5599:huì,zhòu 0x559A:huàn 0x559B:huàn,yuán,xuÇŽn,hé 0x559C:xÇ�,xÄ«,chì 0x559D:hÄ“,yè,hè,kài 0x559E:jÄ« 0x559F:kuì,huài 0x55A0:zhÇ’ng,chÇ’ng 0x55A1:wéi,wèi 0x55A2:shà,chè 0x55A3:xù 0x55A4:huáng 0x55A5:duó,zhà 0x55A6:niè,yì 0x55A7:xuÄ�n,xuÇŽn 0x55A8:liàng 0x55A9:yù 0x55AA:sàng,sÄ�ng 0x55AB:chÄ«,kài 0x55AC:qiáo,jiÇŽo 0x55AD:yàn,yÇŽn 0x55AE:dÄ�n,dÇŽn,chán,shàn,chÇŽn,dàn,zhàn,tán 0x55AF:pèn,bÄ“n 0x55B0:cÄ�n,sÅ«n,qÄ« 0x55B1:lí 0x55B2:yÅ�,yo 0x55B3:zhÄ�,zha,chÄ� 0x55B4:wÄ“i 0x55B5:miÄ�o 0x55B6:yíng 0x55B7:pÄ“n,pèn 0x55B8:bÇ” 0x55B9:kuí 0x55BA:xí 0x55BB:yù,yú 0x55BC:jiÄ“ 0x55BD:lóu,lou 0x55BE:kù 0x55BF:zào,qiÄ�o 0x55C0:hù 0x55C1:tí 0x55C2:yáo 0x55C3:hè,xiÄ�o,xiào,hù 0x55C4:á,shà,a,xià 0x55C5:xiù 0x55C6:qiÄ�ng,qiàng,chéng 0x55C7:sè 0x55C8:yÅ�ng 0x55C9:sù 0x55CA:hÇ’ng,gÇ’ng,gòng 0x55CB:xié 0x55CC:ài,yì,wò 0x55CD:suÅ�,shuò 0x55CE:ma,mà,má,mÇŽ 0x55CF:chÄ� 0x55D0:hài 0x55D1:kÄ“,kè,hé,xiá 0x55D2:dÄ�,tà,da 0x55D3:sÇŽng 0x55D4:chÄ“n,tián 0x55D5:rù 0x55D6:sÅ�u,sù,sòu 0x55D7:wÄ�,gÅ« 0x55D8:jÄ« 0x55D9:pÇŽng,bÄ“ng,bàng 0x55DA:wÅ«,wù 0x55DB:qiÇŽn,xián,qiàn,qiÄ�n,qiè 0x55DC:shì 0x55DD:gé 0x55DE:zÄ« 0x55DF:jiÄ“,jiè,juÄ“ 0x55E0:lào 0x55E1:wÄ“ng,wÄ›ng 0x55E2:wà 0x55E3:sì 0x55E4:chÄ« 0x55E5:háo 0x55E6:suo,suÅ� 0x55E8:hÄ�i,hÄ“i 0x55E9:suÇ’ 0x55EA:qín 0x55EB:niè 0x55EC:hÄ“ 0x55ED:zhí 0x55EE:sài 0x55EF:Å„,Å„g,ňg,ň,ǹg,ǹ 0x55F0:gÄ› 0x55F1:ná 0x55F2:diÄ“,diÇŽ 0x55F3:Ä�i,ÇŽi,ài 0x55F4:qiÄ�ng 0x55F5:tÅ�ng 0x55F6:bì 0x55F7:áo 0x55F8:áo 0x55F9:lián 0x55FA:zuÄ«,suÄ«,zuÇ� 0x55FB:zhÄ“,zhè,zhù,zhe 0x55FC:mò 0x55FD:sòu,shuò,shù 0x55FE:sÇ’u 0x55FF:tÇŽn 0x5600:dí,zhé,dÄ« 0x5601:qÄ«,zú,zÄ� 0x5602:jiào 0x5603:chÅ�ng 0x5604:jiÄ�o,jiào,dÇŽo 0x5605:kÇŽi,kài,gé 0x5606:tàn 0x5607:shÄ�n,càn,shÄ›n 0x5608:cáo 0x5609:jiÄ� 0x560A:ái 0x560B:xiào 0x560C:piào,piÄ�o 0x560D:lóu,lÇ’u,lou 0x560E:gÄ�,gá,gÇŽ 0x560F:gÇ”,jiÇŽ 0x5610:xiÄ�o,jiÄ�o,láo,bào,miù 0x5611:hÅ«,hù 0x5612:huì 0x5613:guÅ� 0x5614:Ç’u,Å�u,òu,xÅ«,chÅ«,ou 0x5615:xiÄ�n 0x5616:zé 0x5617:cháng 0x5618:xÅ«,shÄ« 0x5619:pó 0x561A:dÄ“,dé,dÄ�i,dÄ“i 0x561B:ma,má 0x561C:mà 0x561D:hú 0x561E:lei,lÄ“ 0x561F:dÅ« 0x5620:gÄ� 0x5621:tÄ�ng 0x5622:yÄ› 0x5623:bÄ“ng 0x5624:yÄ«ng 0x5625:sÄ�i 0x5626:jiào 0x5627:mì 0x5628:xiào 0x5629:huÄ�,huá 0x562A:mÇŽi 0x562B:rán 0x562C:chuài,zuÅ� 0x562D:pÄ“ng 0x562E:láo,chÄ�o,lào,xiÄ�o 0x562F:xiào,chì 0x5630:jÄ« 0x5631:zhÇ” 0x5632:cháo,zhÄ�o 0x5633:kuì 0x5634:zuÇ� 0x5635:xiÄ�o 0x5636:sÄ« 0x5637:háo 0x5638:fÇ”,wÇ”,mÌ„,ḿ 0x5639:liáo,liào 0x563A:qiáo,qiào 0x563B:xÄ« 0x563C:chù,xù,shòu 0x563D:chÇŽn,tÄ�n,chÄ�n,tuÅ�,dÇŽn 0x563E:dàn,tán 0x563F:hÄ“i,mò,mù 0x5640:xùn 0x5641:Ä›,wù,wò 0x5642:zÇ”n 0x5643:fÄ�n,bo 0x5644:chÄ« 0x5645:huÄ« 0x5646:zÇŽn,cÇŽn 0x5647:chuáng 0x5648:cù,zÄ�,hé 0x5649:dàn 0x564A:yù 0x564B:tÅ«n,kuò 0x564C:cÄ“ng,chÄ“ng 0x564D:jiào,jiÄ�o,jiÅ« 0x564E:yÄ“,yì,shà 0x564F:xÄ« 0x5650:qì 0x5651:háo 0x5652:lián 0x5653:xÅ« 0x5654:dÄ“ng 0x5655:huÄ« 0x5656:yín 0x5657:pÅ« 0x5658:juÄ“ 0x5659:qín 0x565A:xún 0x565B:niè 0x565C:lÅ« 0x565D:sÄ« 0x565E:yÇŽn 0x565F:yìng 0x5660:dÄ�,dá 0x5661:zhÄ�n,dÄ�n 0x5662:Å�,yÇ”,yù,ào 0x5663:zhòu,zhuó,zhú,dú 0x5664:jìn 0x5665:nóng,náng 0x5666:yuÄ›,huì 0x5667:xiè 0x5668:qì 0x5669:è 0x566A:zào 0x566B:yÄ«,ÇŽi,yì 0x566C:shì 0x566D:jiào,qiào,chÄ« 0x566E:yuàn 0x566F:Ä�i,ÇŽi,ài 0x5670:yÅ�ng,yÇ’ng 0x5671:jué,xué 0x5672:kuài,guài,kuò,wèi 0x5673:yÇ” 0x5674:pÄ“n,pèn,fèn 0x5675:dào 0x5676:gá,gé 0x5677:hm,xÄ«n,hÄ“n 0x5678:dÅ«n 0x5679:dÄ�ng 0x567A:xÄ«n 0x567B:sÄ�i 0x567C:pÄ« 0x567D:pÇ� 0x567E:yÄ«n 0x567F:zuÇ� 0x5680:níng 0x5681:dí 0x5682:làn,hÇŽn 0x5683:tÄ�,tà 0x5684:huÅ�,huò,wò,Ç’ 0x5685:rú 0x5686:hÄ�o 0x5687:xià,hè 0x5688:yè 0x5689:duÅ� 0x568A:pì,xì,xiù 0x568B:chóu,zhÅ�u 0x568C:jì,jiÄ“,zhÄ�i 0x568D:jìn 0x568E:háo 0x568F:tì 0x5690:cháng 0x5691:xÅ«n 0x5692:mÄ“ 0x5693:cÄ�,chÄ� 0x5694:tì,zhì 0x5695:lÇ”,lÅ« 0x5696:huì 0x5697:bó,pào,bào 0x5698:yÅ�u 0x5699:niè,yÇŽo 0x569A:yín 0x569B:hù,yo 0x569C:me,mèi,ma 0x569D:hÅ�ng 0x569E:zhé 0x569F:lí 0x56A0:liú 0x56A1:hai 0x56A2:náng 0x56A3:xiÄ�o,áo 0x56A4:mó 0x56A5:yàn 0x56A6:lì 0x56A7:lú 0x56A8:lóng 0x56A9:mó 0x56AA:dàn 0x56AB:chèn 0x56AC:pín 0x56AD:pÇ� 0x56AE:xiàng,xiÇŽng 0x56AF:huò,xuè 0x56B0:mó 0x56B1:xì 0x56B2:duÇ’ 0x56B3:kù 0x56B4:yán,yÇŽn 0x56B5:chán,chÄ�n 0x56B6:yÄ«ng 0x56B7:rÇŽng,rÄ�ng 0x56B8:diÇŽn 0x56B9:lá,la 0x56BA:tà 0x56BB:xiÄ�o 0x56BC:jué,jiáo,jiào 0x56BD:chuò 0x56BE:huÄ�n,huàn 0x56BF:huò 0x56C0:zhuàn 0x56C1:niè,zhé 0x56C2:xiÄ�o,áo 0x56C3:cà,zhÄ�,zÇŽ 0x56C4:lí 0x56C5:chÇŽn 0x56C6:chài 0x56C7:lì 0x56C8:yì 0x56C9:luÅ�,luó,luo 0x56CA:náng,nÄ�ng 0x56CB:zá,zàn,cÄ�n 0x56CC:sÅ« 0x56CD:xÇ� 0x56CE:zen 0x56CF:jiÄ�n 0x56D0:zá,niè,yàn,è 0x56D1:zhÇ” 0x56D2:lán 0x56D3:niè 0x56D4:nÄ�ng,nang 0x56D5:lÇŽn 0x56D6:lo 0x56D7:wéi,guó 0x56D8:huí 0x56D9:yÄ«n 0x56DA:qiú 0x56DB:sì 0x56DC:nín 0x56DD:jiÇŽn,nÄ�n,yuè 0x56DE:huí 0x56DF:xìn 0x56E0:yÄ«n 0x56E1:nÄ�n,niè 0x56E2:tuán,qiú 0x56E3:tuán 0x56E4:dùn,tún 0x56E5:kàng 0x56E6:yuÄ�n 0x56E7:jiÇ’ng 0x56E8:piÄ�n 0x56E9:yún 0x56EA:cÅ�ng 0x56EB:hú 0x56EC:huí 0x56ED:yuán,wán 0x56EE:é 0x56EF:guó 0x56F0:kùn 0x56F1:cÅ�ng,chuÄ�ng 0x56F2:tÅ�ng 0x56F3:tú 0x56F4:wéi 0x56F5:lún 0x56F6:guó 0x56F7:qÅ«n 0x56F8:rì 0x56F9:líng 0x56FA:gù 0x56FB:guó 0x56FC:tÄ�i 0x56FD:guó 0x56FE:tú 0x56FF:yòu 0x5700:guó 0x5701:yín 0x5702:hùn,huàn 0x5703:pÇ” 0x5704:yÇ” 0x5705:hán 0x5706:yuán 0x5707:lún 0x5708:quÄ�n,juàn,juÄ�n,quán,juÇŽn 0x5709:yÇ” 0x570A:qÄ«ng 0x570B:guó 0x570C:chuán,chuí 0x570D:wéi 0x570E:yuán 0x570F:quÄ�n 0x5710:kÅ« 0x5711:pÇ” 0x5712:yuán 0x5713:yuán 0x5714:yà 0x5715:tú 0x5716:tú 0x5717:tú 0x5718:tuán,chuán 0x5719:lüè 0x571A:huì 0x571B:yì 0x571C:huán,yuán 0x571D:luán 0x571E:luán 0x571F:tÇ”,dù,chÇŽ,tú 0x5720:yà 0x5721:tÇ” 0x5722:tÇ�ng 0x5723:shèng,kÅ« 0x5724:pú 0x5725:lù 0x5726:kuài 0x5727:yÄ� 0x5728:zài 0x5729:wéi,yú,xÅ« 0x572A:gÄ“,yì 0x572B:yù,zhÅ«n 0x572C:wÅ« 0x572D:guÄ« 0x572E:pÇ� 0x572F:yí 0x5730:de,dì 0x5731:qiÄ�n,sú 0x5732:qiÄ�n 0x5733:zhèn,quÇŽn,chóu,huái 0x5734:zhuó 0x5735:dàng 0x5736:qià 0x5737:xià 0x5738:shÄ�n 0x5739:kuàng 0x573A:chÇŽng,cháng 0x573B:qí,yín 0x573C:niè 0x573D:mò 0x573E:jÄ«,jí,jié 0x573F:jiá 0x5740:zhÇ� 0x5741:zhÇ�,zhì 0x5742:bÇŽn 0x5743:xÅ«n 0x5744:yì 0x5745:qÇ�n 0x5746:méi,fén 0x5747:jÅ«n,yùn 0x5748:rÇ’ng,kÄ“ng 0x5749:tún,dùn 0x574A:fÄ�ng,fáng 0x574B:bèn,fèn 0x574C:bèn 0x574D:tÄ�n 0x574E:kÇŽn,kàn 0x574F:huài,pÄ«,péi 0x5750:zuò 0x5751:kÄ“ng,kàng 0x5752:bì 0x5753:jÇ�ng,xíng 0x5754:dì,làn 0x5755:jÄ«ng 0x5756:jì 0x5757:kuài,yué 0x5758:dÇ� 0x5759:jÄ«ng 0x575A:jiÄ�n 0x575B:tán 0x575C:lì 0x575D:bà 0x575E:wù 0x575F:fén 0x5760:zhuì 0x5761:pÅ� 0x5762:bàn,pÇŽn,pàn 0x5763:táng 0x5764:kÅ«n 0x5765:qÅ«,jù 0x5766:tÇŽn 0x5767:zhÄ« 0x5768:tuó,yí 0x5769:gÄ�n 0x576A:píng 0x576B:diàn,zhÄ“n 0x576C:guà 0x576D:ní 0x576E:tái 0x576F:pÄ«,huài 0x5770:jiÅ�ng 0x5771:yÇŽng 0x5772:fó 0x5773:ào,Ä�o,yÇ’u 0x5774:lù 0x5775:qiÅ« 0x5776:mÇ”,mù,méi 0x5777:kÄ›,kÄ“,jiÅ�ng 0x5778:gòu 0x5779:xuè 0x577A:bá 0x577B:chí,dÇ� 0x577C:chè 0x577D:líng 0x577E:zhù 0x577F:fù,fú 0x5780:hÅ« 0x5781:zhì 0x5782:chuí,zhuì 0x5783:lÄ�,la 0x5784:lÇ’ng 0x5785:lÇ’ng 0x5786:lú 0x5787:ào 0x5788:dài 0x5789:páo 0x578A:min 0x578B:xíng 0x578C:dòng,tÇ’ng,tóng 0x578D:jì,jÄ« 0x578E:hè 0x578F:lÇœ 0x5790:cí 0x5791:chÇ� 0x5792:lÄ›i 0x5793:gÄ�i 0x5794:yÄ«n 0x5795:hòu 0x5796:duÄ« 0x5797:zhào 0x5798:fú 0x5799:guÄ�ng 0x579A:yáo 0x579B:duÇ’,duò 0x579C:duÇ’,duò 0x579D:guÇ� 0x579E:chá 0x579F:yáng 0x57A0:yín,kèn 0x57A1:fá 0x57A2:gòu 0x57A3:yuán 0x57A4:dié 0x57A5:xié 0x57A6:kÄ›n,yín 0x57A7:shÇŽng,jiÅ�ng 0x57A8:shÇ’u 0x57A9:è,shèng 0x57AA:bìng 0x57AB:diàn 0x57AC:hóng 0x57AD:yÄ� 0x57AE:kuÇŽ 0x57AF:da 0x57B0:kÇŽ 0x57B1:dàng 0x57B2:kÇŽi 0x57B3:háng 0x57B4:nÇŽo 0x57B5:ÇŽn 0x57B6:xÄ«ng 0x57B7:xiàn 0x57B8:yuàn,huán 0x57B9:bÄ�ng 0x57BA:fÅ«,fóu,pÄ“i,póu 0x57BB:bà,bèi 0x57BC:yì 0x57BD:yìn 0x57BE:hàn,àn 0x57BF:xù 0x57C0:chuí 0x57C1:qín 0x57C2:gÄ›ng 0x57C3:Ä�i,zhì 0x57C4:bÄ›ng,fÄ“ng 0x57C5:fáng,fÄ�ng,dì 0x57C6:què,jué 0x57C7:yÇ’ng 0x57C8:jùn 0x57C9:jiÄ�,xiá 0x57CA:dì 0x57CB:mái,mán 0x57CC:làng 0x57CD:juÇŽn 0x57CE:chéng 0x57CF:shÄ�n,yán 0x57D0:jÄ«n,qín 0x57D1:zhé 0x57D2:liè 0x57D3:liè 0x57D4:pÇ”,bù 0x57D5:chéng 0x57D6:huÄ� 0x57D7:bù 0x57D8:shí 0x57D9:xÅ«n 0x57DA:guÅ� 0x57DB:jiÅ�ng 0x57DC:yÄ› 0x57DD:niàn,diàn,niè 0x57DE:dÄ« 0x57DF:yù 0x57E0:bù 0x57E1:yÄ�,è,wÇ”,yà 0x57E2:quán,juÇŽn 0x57E3:suì,sù 0x57E4:pí,bì,pì,bÄ“i 0x57E5:qÄ«ng,zhÄ“ng 0x57E6:wÇŽn,wÄ�n 0x57E7:jù 0x57E8:lÇ”n,lùn 0x57E9:zhÄ“ng,chéng 0x57EA:kÅ�ng 0x57EB:chÇ’ng,shÇŽng 0x57EC:dÅ�ng 0x57ED:dài 0x57EE:tàn,tán 0x57EF:ÇŽn,yÇŽn 0x57F0:cài,cÇŽi 0x57F1:chù,tòu 0x57F2:bÄ›ng,bàng 0x57F3:kÇŽn,xiàn 0x57F4:zhí 0x57F5:duÇ’ 0x57F6:yì,shì 0x57F7:zhí 0x57F8:yì 0x57F9:péi,pÇ’u,pÄ« 0x57FA:jÄ« 0x57FB:zhÇ”n,duÄ«,guó 0x57FC:qí 0x57FD:sào,sÇŽo 0x57FE:jù 0x57FF:ní,nì,bàn 0x5800:kÅ« 0x5801:kè 0x5802:táng 0x5803:kÅ«n 0x5804:nì 0x5805:jiÄ�n 0x5806:duÄ«,zuÄ« 0x5807:jÇ�n,qín,jìn 0x5808:gÄ�ng 0x5809:yù 0x580A:è,yà 0x580B:péng,bèng,pÄ“ng,pÄ«ng 0x580C:gù 0x580D:tù 0x580E:lèng 0x580F:fang 0x5810:yá 0x5811:qiàn 0x5812:kÅ«n 0x5813:àn 0x5814:shÄ“n 0x5815:duò,huÄ« 0x5816:nÇŽo 0x5817:tÅ« 0x5818:chéng 0x5819:yÄ«n 0x581A:hún 0x581B:bì 0x581C:liàn 0x581D:guÅ�,wÅ� 0x581E:dié 0x581F:zhuàn 0x5820:hòu 0x5821:bÇŽo,bÇ”,pù 0x5822:bÇŽo 0x5823:yú 0x5824:dÄ«,tí,dÇ�,shí,wéi 0x5825:máo,móu,wÇ” 0x5826:jiÄ“ 0x5827:ruán,nuò 0x5828:yè,ài,è 0x5829:gèng 0x582A:kÄ�n,chÄ›n 0x582B:zÅ�ng 0x582C:yú 0x582D:huáng 0x582E:è 0x582F:yáo 0x5830:yàn 0x5831:bào,fù 0x5832:cí,jí 0x5833:méi 0x5834:chÇŽng,cháng,shÄ�ng,dàng 0x5835:dÇ”,zhÄ›,dÅ« 0x5836:tuó 0x5837:yìn,pÇ’u 0x5838:féng 0x5839:zhòng 0x583A:jiè 0x583B:jÄ«n 0x583C:hèng 0x583D:gÄ�ng 0x583E:chÅ«n 0x583F:jiÇŽn,kÇŽn,xián 0x5840:píng 0x5841:lÄ›i 0x5842:xiàng,jiÇŽng 0x5843:huÄ�ng 0x5844:léng 0x5845:duàn 0x5846:wÄ�n 0x5847:xuÄ�n 0x5848:jì,xì 0x5849:jí 0x584A:kuài 0x584B:yíng 0x584C:tÄ�,dÄ� 0x584D:chéng 0x584E:yÇ’ng 0x584F:kÇŽi 0x5850:sù 0x5851:sù 0x5852:shí 0x5853:mì 0x5854:tÇŽ,dÄ�,da 0x5855:wÄ›ng 0x5856:chéng 0x5857:tú,dù 0x5858:táng 0x5859:què,qiÄ�o 0x585A:zhÇ’ng 0x585B:lì 0x585C:zhÇ’ng,péng 0x585D:bàng 0x585E:sÄ�i,sè,sài 0x585F:zàng 0x5860:duÄ« 0x5861:tián 0x5862:wù,wÇ” 0x5863:zhèng 0x5864:xÅ«n 0x5865:gé 0x5866:zhèn 0x5867:ài 0x5868:gÅ�ng 0x5869:yán 0x586A:kÇŽn 0x586B:tián,tiÇŽn,chén,zhèn 0x586C:yuán 0x586D:wÄ“n 0x586E:xiè 0x586F:liù 0x5870:hÇŽi 0x5871:lÇŽng 0x5872:cháng,shÄ�ng,chÇŽng 0x5873:péng 0x5874:bèng 0x5875:chén 0x5876:lù 0x5877:lÇ” 0x5878:Å�u 0x5879:qiàn,jiàn 0x587A:méi 0x587B:mò 0x587C:zhuÄ�n,tuán 0x587D:shuÇŽng 0x587E:shú 0x587F:lÇ’u 0x5880:chí 0x5881:màn 0x5882:biÄ�o 0x5883:jìng 0x5884:cè 0x5885:shù,yÄ› 0x5886:zhì,dì 0x5887:zhàng 0x5888:kàn 0x5889:yÅ�ng 0x588A:diàn 0x588B:chÄ›n 0x588C:zhí,zhuó 0x588D:xì 0x588E:guÅ� 0x588F:qiÇŽng 0x5890:jìn,qín 0x5891:dì 0x5892:shÄ�ng 0x5893:mù 0x5894:cuÄ« 0x5895:yàn 0x5896:tÇŽ 0x5897:zÄ“ng 0x5898:qián 0x5899:qiáng 0x589A:liáng 0x589B:wèi 0x589C:zhuì 0x589D:qiÄ�o,qiào 0x589E:zÄ“ng,zèng,céng 0x589F:xÅ« 0x58A0:shàn,chÇŽn 0x58A1:shàn 0x58A2:bá,fèi 0x58A3:pú 0x58A4:kuài,tuí 0x58A5:dÇ’ng,tuÇŽn 0x58A6:fán,fÄ�n 0x58A7:què,qiáo 0x58A8:mò,mèi 0x58A9:dÅ«n 0x58AA:dÅ«n 0x58AB:zÅ«n,cÅ«n 0x58AC:dì 0x58AD:shèng 0x58AE:duò,huÄ«,huì 0x58AF:duò 0x58B0:tán 0x58B1:dèng,dÄ“ng 0x58B2:mú,wú 0x58B3:fén,fèn 0x58B4:huáng 0x58B5:tán 0x58B6:da 0x58B7:yè 0x58B8:zhù 0x58B9:jiàn 0x58BA:ào 0x58BB:qiáng 0x58BC:jÄ« 0x58BD:qiÄ�o,qiào,áo 0x58BE:kÄ›n 0x58BF:yì,tú 0x58C0:pí 0x58C1:bì 0x58C2:diàn 0x58C3:jiÄ�ng 0x58C4:yÄ› 0x58C5:yÅ�ng,wèng 0x58C6:xué,jué,bó 0x58C7:tán,shàn,dàn,tÇŽn 0x58C8:lÇŽn 0x58C9:jù 0x58CA:huài 0x58CB:dàng 0x58CC:rÇŽng 0x58CD:qiàn 0x58CE:xÅ«n,xùn 0x58CF:xiàn,làn 0x58D0:xÇ� 0x58D1:hè,huò 0x58D2:ài 0x58D3:yÄ�,yà 0x58D4:dÇŽo 0x58D5:háo 0x58D6:ruán 0x58D7:jìn 0x58D8:lÄ›i,léi,lÇœ 0x58D9:kuàng,kuÇŽng 0x58DA:lú 0x58DB:yán 0x58DC:tán 0x58DD:wÄ›i 0x58DE:huài,huì,huái 0x58DF:lÇ’ng 0x58E0:lÇ’ng 0x58E1:ruì 0x58E2:lì 0x58E3:lín 0x58E4:rÇŽng 0x58E5:chán 0x58E6:xÅ«n 0x58E7:yán 0x58E8:léi 0x58E9:bà 0x58EA:wÄ�n 0x58EB:shì 0x58EC:rén 0x58ED:san 0x58EE:zhuàng 0x58EF:zhuàng,zhuÄ�ng 0x58F0:shÄ“ng,qìng 0x58F1:yÄ« 0x58F2:mài 0x58F3:ké,qiào 0x58F4:zhù 0x58F5:zhuàng 0x58F6:hú 0x58F7:hú 0x58F8:kÇ”n 0x58F9:yÄ«,yÄ«n 0x58FA:hú 0x58FB:xù 0x58FC:kÇ”n 0x58FD:shòu 0x58FE:mÇŽng 0x58FF:zÅ«n 0x5900:shòu 0x5901:yÄ« 0x5902:zhÇ�,zhÅ�ng 0x5903:gÇ”,yíng 0x5904:chù,chÇ” 0x5905:jiàng 0x5906:féng,páng 0x5907:bèi 0x5908:zhÄ�i 0x5909:biàn 0x590A:suÄ« 0x590B:qÅ«n 0x590C:líng 0x590D:fù 0x590E:cuò 0x590F:xià,jiÇŽ 0x5910:xiòng,xuàn 0x5911:xiè 0x5912:náo 0x5913:xià 0x5914:kuí 0x5915:xÄ«,yì 0x5916:wài 0x5917:yuàn,wÇŽn,wÄ�n,yuÄ�n 0x5918:mÇŽo,wÄ�n 0x5919:sù 0x591A:duÅ� 0x591B:duÅ� 0x591C:yè 0x591D:qíng 0x591E:wài 0x591F:gòu 0x5920:gòu 0x5921:qì 0x5922:mèng,méng 0x5923:mèng 0x5924:yín 0x5925:huÇ’ 0x5926:chÄ›n 0x5927:dà,dài,tài 0x5928:zè 0x5929:tiÄ�n 0x592A:tài,tÄ� 0x592B:fÅ«,fú 0x592C:guài,jué 0x592D:yÄ�o,wò,wÄ�i 0x592E:yÄ�ng,yÄ«ng 0x592F:hÄ�ng,bèn 0x5930:gÇŽo 0x5931:shÄ«,yì 0x5932:tÄ�o,bÄ›n 0x5933:tài 0x5934:tóu,tou 0x5935:yÇŽn,tÄ�o 0x5936:bÇ� 0x5937:yí 0x5938:kuÄ�,kuà,kuÇŽ 0x5939:jiÄ�,gÄ�,jiá 0x593A:duó 0x593B:huà 0x593C:kuÇŽng 0x593D:yÇ”n 0x593E:jiÄ�,jiá,xié,xiá,gÄ� 0x593F:bÄ� 0x5940:Ä“n 0x5941:lián 0x5942:huàn 0x5943:dÄ«,tì 0x5944:yÇŽn,yÄ�n 0x5945:pào 0x5946:juàn 0x5947:qí,jÄ«,ÇŽi,yÇ� 0x5948:nài 0x5949:fèng 0x594A:xié,liè,xÇ�,pí 0x594B:fèn,kÇŽng 0x594C:diÇŽn 0x594D:quÄ�n 0x594E:kuí,kuÇ� 0x594F:zòu,còu 0x5950:huàn 0x5951:qì,xiè,qiè,jié 0x5952:kÄ�i 0x5953:zhÄ�,shÄ“,chÇ�,zhà 0x5954:bÄ“n,bèn,fèn 0x5955:yì 0x5956:jiÇŽng 0x5957:tào,tÇŽo 0x5958:zàng,zhuÇŽng 0x5959:bÄ›n 0x595A:xÄ« 0x595B:huÇŽng 0x595C:fÄ›i,fÄ“i 0x595D:diÄ�o 0x595E:xùn 0x595F:bÄ“ng,kÄ“ng 0x5960:diàn,tíng,dìng,zhèng,zÅ«n 0x5961:ào,xiào 0x5962:shÄ“ 0x5963:wÄ›ng 0x5964:hÇŽ,pò,tÇŽi 0x5965:ào,yù,yÅ�u 0x5966:wù 0x5967:ào 0x5968:jiÇŽng 0x5969:lián 0x596A:duó,duì 0x596B:yÅ«n 0x596C:jiÇŽng 0x596D:shì 0x596E:fèn 0x596F:huò 0x5970:bì 0x5971:luán 0x5972:duÇ’,chÄ› 0x5973:nÇš,nÇœ,rÇ” 0x5974:nú 0x5975:dÇ�ng,dÄ«ng,tiÇŽn 0x5976:nÇŽi 0x5977:qiÄ�n 0x5978:jiÄ�n,gÄ�n 0x5979:tÄ�,jiÄ›,chí 0x597A:jiÇ” 0x597B:nuán 0x597C:chà 0x597D:hÇŽo,hào 0x597E:xiÄ�n 0x597F:fàn 0x5980:jÇ� 0x5981:shuò,yuÄ“ 0x5982:rú 0x5983:fÄ“i,pèi 0x5984:wàng,wáng 0x5985:hóng 0x5986:zhuÄ�ng 0x5987:fù 0x5988:mÄ� 0x5989:dÄ�n 0x598A:rèn,rén 0x598B:fÅ«,yÅ�u 0x598C:jìng 0x598D:yán 0x598E:hài,jiè 0x598F:wèn 0x5990:zhÅ�ng 0x5991:pÄ� 0x5992:dù 0x5993:jì,jÄ« 0x5994:kÄ“ng,háng 0x5995:zhòng 0x5996:yÄ�o,jiÇŽo 0x5997:jìn,xiÄ�n 0x5998:yún 0x5999:miào,miÇŽo 0x599A:fÇ’u,pÄ“i,pÄ« 0x599B:chÄ« 0x599C:yuè,jué 0x599D:zhuÄ�ng 0x599E:niÅ«,hào 0x599F:yàn 0x59A0:nà,nàn 0x59A1:xÄ«n 0x59A2:fén 0x59A3:bÇ� 0x59A4:yú 0x59A5:tuÇ’ 0x59A6:fÄ“ng 0x59A7:wàn,yuán 0x59A8:fáng,fÄ�ng 0x59A9:wÇ” 0x59AA:yù 0x59AB:guÄ« 0x59AC:dù 0x59AD:bá,bÅ� 0x59AE:nÄ«,ní 0x59AF:zhóu,chÅ�u 0x59B0:zhuó 0x59B1:zhÄ�o 0x59B2:dá 0x59B3:nÇ�,nÇŽi 0x59B4:yuàn 0x59B5:tÇ’u 0x59B6:xián,xuán,xù 0x59B7:zhí,yì 0x59B8:Ä“,Ä› 0x59B9:mèi 0x59BA:mò 0x59BB:qÄ«,qì 0x59BC:bì 0x59BD:shÄ“n 0x59BE:qiè 0x59BF:Ä“ 0x59C0:hé 0x59C1:xÇ”,xÅ« 0x59C2:fá 0x59C3:zhÄ“ng 0x59C4:mín 0x59C5:bàn 0x59C6:mÇ” 0x59C7:fÅ«,fú 0x59C8:líng 0x59C9:zÇ� 0x59CA:zÇ� 0x59CB:shÇ� 0x59CC:rÇŽn 0x59CD:shÄ�n,xiÄ�n,pÄ�n 0x59CE:yÄ�ng 0x59CF:mán 0x59D0:jiÄ›,jù,xù,zÅ« 0x59D1:gÅ« 0x59D2:sì 0x59D3:xìng,shÄ“ng 0x59D4:wÄ›i,wÄ“i,wèi 0x59D5:zÄ«,cÇ�,cÄ« 0x59D6:jù 0x59D7:shÄ�n 0x59D8:pÄ«n,pín 0x59D9:rèn 0x59DA:yáo,tiào,táo,yào 0x59DB:dòng 0x59DC:jiÄ�ng 0x59DD:shÅ« 0x59DE:jí 0x59DF:gÄ�i 0x59E0:xiàng 0x59E1:huá,huó 0x59E2:juÄ�n 0x59E3:jiÄ�o,jiÇŽo,xiáo 0x59E4:gòu 0x59E5:lÇŽo,mÇ” 0x59E6:jiÄ�n 0x59E7:jiÄ�n 0x59E8:yí 0x59E9:niàn,nián 0x59EA:zhí 0x59EB:jÄ«,zhÄ›n 0x59EC:jÄ«,yí 0x59ED:xiàn 0x59EE:héng 0x59EF:guÄ�ng 0x59F0:jÅ«n,xÅ«n,xuàn,xÄ«n 0x59F1:kuÄ�,hù 0x59F2:yàn 0x59F3:mÇ�ng 0x59F4:liè 0x59F5:pèi 0x59F6:è,yà 0x59F7:yòu 0x59F8:yán 0x59F9:chà 0x59FA:shÄ“n,xiÄ�n 0x59FB:yÄ«n 0x59FC:shí,tí,jì 0x59FD:guÇ�,wá 0x59FE:quán 0x59FF:zÄ«,zì 0x5A00:sÅ�ng 0x5A01:wÄ“i 0x5A02:hóng 0x5A03:wá,wÄ�,guì 0x5A04:lóu 0x5A05:yà 0x5A06:ráo,rÇŽo 0x5A07:jiÄ�o 0x5A08:luán 0x5A09:pÄ«ng,pìn 0x5A0A:xiàn,dÄ�n 0x5A0B:shào,shÄ�o 0x5A0C:lÇ� 0x5A0D:chéng,shèng 0x5A0E:xiè 0x5A0F:máng 0x5A10:fÅ« 0x5A11:suÅ�,suÇ’,suò 0x5A12:méi,mÇ”,wÇ” 0x5A13:wÄ›i 0x5A14:kè 0x5A15:chuò,cù,lài 0x5A16:chuò,cù 0x5A17:tÇ�ng,tiÇŽn 0x5A18:niáng 0x5A19:xíng 0x5A1A:nán 0x5A1B:yú 0x5A1C:nà,nuó 0x5A1D:pÅ�u,bÇ� 0x5A1E:nÄ›i,suÄ« 0x5A1F:juÄ�n 0x5A20:shÄ“n 0x5A21:zhì 0x5A22:hán 0x5A23:dì 0x5A24:zhuÄ�ng 0x5A25:é 0x5A26:pín 0x5A27:tuì 0x5A28:xiàn 0x5A29:miÇŽn,wÇŽn,wèn 0x5A2A:wú,wù,yú 0x5A2B:yán 0x5A2C:wÇ” 0x5A2D:Ä�i,xÄ« 0x5A2E:yán 0x5A2F:yú 0x5A30:sì 0x5A31:yú 0x5A32:wÄ� 0x5A33:lì 0x5A34:xián 0x5A35:jÅ« 0x5A36:qÇ”,jÅ«,shÅ« 0x5A37:zhuì,shuì 0x5A38:qÄ« 0x5A39:xián 0x5A3A:zhuó 0x5A3B:dÅ�ng,dòng 0x5A3C:chÄ�ng 0x5A3D:lù 0x5A3E:ÇŽi,ái,è 0x5A3F:Ä“,Ä› 0x5A40:Ä“,Ä› 0x5A41:lóu,lÇš,lǘ,léi 0x5A42:mián 0x5A43:cóng 0x5A44:pÇ’u,péi,bù 0x5A45:jú 0x5A46:pó 0x5A47:cÇŽi 0x5A48:líng 0x5A49:wÇŽn 0x5A4A:biÇŽo 0x5A4B:xiÄ�o 0x5A4C:shú 0x5A4D:qÇ� 0x5A4E:huÄ« 0x5A4F:fàn,fù 0x5A50:wÇ’ 0x5A51:ruí,wÇ’,nÄ›i 0x5A52:tán 0x5A53:fÄ“i 0x5A54:fÄ“i 0x5A55:jié,qiè 0x5A56:tiÄ�n 0x5A57:ní,nÇ� 0x5A58:quán,juàn 0x5A59:jìng 0x5A5A:hÅ«n 0x5A5B:jÄ«ng 0x5A5C:qiÄ�n,jÇ�n 0x5A5D:diàn 0x5A5E:xìng 0x5A5F:hù 0x5A60:wÄ�n,guàn 0x5A61:lái,lài 0x5A62:bì 0x5A63:yÄ«n 0x5A64:chÅ�u,zhÅ�u 0x5A65:nào,chuò 0x5A66:fù 0x5A67:jìng 0x5A68:lún 0x5A69:àn,nüè 0x5A6A:lán,lÇŽn 0x5A6B:kÅ«n,hùn 0x5A6C:yín 0x5A6D:yà,yÄ�,yÇŽ 0x5A6E:jÅ« 0x5A6F:lì 0x5A70:diÇŽn 0x5A71:xián 0x5A72:huÄ� 0x5A73:huà 0x5A74:yÄ«ng 0x5A75:chán 0x5A76:shÄ›n 0x5A77:tíng 0x5A78:dàng,yáng 0x5A79:yÇŽo 0x5A7A:wù,móu,mù 0x5A7B:nàn 0x5A7C:chuò,ruò 0x5A7D:jiÇŽ 0x5A7E:tÅ�u 0x5A7F:xù 0x5A80:yù,yú 0x5A81:wéi,wÄ›i 0x5A82:dì,tí 0x5A83:róu 0x5A84:mÄ›i 0x5A85:dÄ�n 0x5A86:ruÇŽn,nèn,nùn 0x5A87:qÄ«n 0x5A88:huÄ« 0x5A89:wò 0x5A8A:qián 0x5A8B:chÅ«n 0x5A8C:miáo 0x5A8D:fù 0x5A8E:jiÄ› 0x5A8F:duÄ�n 0x5A90:yí,xÄ« 0x5A91:zhòng 0x5A92:méi,mèi 0x5A93:huáng 0x5A94:mián,miÇŽn 0x5A95:Ä�n,yÇŽn,è 0x5A96:yÄ«ng 0x5A97:xuÄ�n 0x5A98:jiÄ“ 0x5A99:wÄ“i 0x5A9A:mèi 0x5A9B:yuàn,yuán 0x5A9C:zhÄ“ng 0x5A9D:qiÅ« 0x5A9E:shì,tí,zhÄ«,dài 0x5A9F:xiè 0x5AA0:tuÇ’,duò,nuÇ’ 0x5AA1:liàn 0x5AA2:mào 0x5AA3:rÇŽn 0x5AA4:sÄ« 0x5AA5:piÄ�n 0x5AA6:wèi 0x5AA7:wÄ� 0x5AA8:cù 0x5AA9:hú 0x5AAA:ÇŽo,yÇ”n,wò 0x5AAB:jié 0x5AAC:bÇŽo 0x5AAD:xÅ« 0x5AAE:tÅ�u,yú 0x5AAF:guÄ«,guì 0x5AB0:chú,zòu 0x5AB1:yáo 0x5AB2:pì,bÄ«,pí 0x5AB3:xí 0x5AB4:yuán 0x5AB5:yìng,shèng 0x5AB6:róng 0x5AB7:rù 0x5AB8:chÄ« 0x5AB9:liú 0x5ABA:mÄ›i 0x5ABB:pán 0x5ABC:ÇŽo 0x5ABD:mÄ� 0x5ABE:gòu 0x5ABF:kuì,chÇ’u 0x5AC0:qín,shÄ“n 0x5AC1:jià 0x5AC2:sÇŽo 0x5AC3:zhÄ“n,zhÄ›n 0x5AC4:yuán 0x5AC5:jiÄ“,suÇ’ 0x5AC6:róng 0x5AC7:míng,mÇ�ng,méng 0x5AC8:yÄ«ng,xÄ«ng,yíng 0x5AC9:jí 0x5ACA:sù 0x5ACB:niÇŽo 0x5ACC:xián 0x5ACD:tÄ�o 0x5ACE:páng,bàng 0x5ACF:láng 0x5AD0:nÇŽo 0x5AD1:báo 0x5AD2:ài 0x5AD3:pì 0x5AD4:pín 0x5AD5:yì 0x5AD6:piáo,piào,biÄ�o 0x5AD7:yù,yÇ”,kÅ�u 0x5AD8:léi 0x5AD9:xuán 0x5ADA:mÄ�n,màn,yuÄ�n 0x5ADB:yÄ« 0x5ADC:zhÄ�ng 0x5ADD:kÄ�ng 0x5ADE:yÅ�ng 0x5ADF:nì 0x5AE0:lí 0x5AE1:dí 0x5AE2:guÄ«,zuÄ« 0x5AE3:yÄ�n 0x5AE4:jÇ�n,jìn 0x5AE5:zhuÄ�n,tuán 0x5AE6:cháng 0x5AE7:zé,cè 0x5AE8:hÄ�n,nÇŽn 0x5AE9:nèn 0x5AEA:lào,láo 0x5AEB:mó 0x5AEC:zhÄ“ 0x5AED:hù 0x5AEE:hù 0x5AEF:ào 0x5AF0:nèn 0x5AF1:qiáng 0x5AF2:ma 0x5AF3:piè 0x5AF4:gÅ« 0x5AF5:wÇ” 0x5AF6:qiáo,jiÄ�o 0x5AF7:tuÇ’ 0x5AF8:zhÇŽn 0x5AF9:miáo 0x5AFA:xián 0x5AFB:xián 0x5AFC:mò 0x5AFD:liáo,liÇŽo,liào,lÇŽo 0x5AFE:lián 0x5AFF:huà 0x5B00:guÄ« 0x5B01:dÄ“ng 0x5B02:zhí 0x5B03:xÅ« 0x5B04:yÄ« 0x5B05:huà 0x5B06:xÄ« 0x5B07:kuì 0x5B08:ráo,rÇŽo,yÇŽo 0x5B09:xÄ«,xÇ� 0x5B0A:yàn 0x5B0B:chán 0x5B0C:jiÄ�o 0x5B0D:mÄ›i 0x5B0E:fàn,fù 0x5B0F:fÄ�n 0x5B10:xiÄ�n,yÇŽn,jìn 0x5B11:yì 0x5B12:huì 0x5B13:jiào 0x5B14:fù 0x5B15:shì 0x5B16:bì 0x5B17:shàn,chán 0x5B18:suì 0x5B19:qiáng 0x5B1A:liÇŽn 0x5B1B:huán,xuÄ�n,qióng,xuán 0x5B1C:xÄ«n 0x5B1D:niÇŽo 0x5B1E:dÇ’ng 0x5B1F:yì,yÇ� 0x5B20:cÄ�n 0x5B21:ài 0x5B22:niáng 0x5B23:níng 0x5B24:mÄ� 0x5B25:tiÇŽo,diào 0x5B26:chóu 0x5B27:jìn 0x5B28:cí 0x5B29:yú 0x5B2A:pín 0x5B2B:róng 0x5B2C:rú,nòu 0x5B2D:nÇŽi,Ä›r,nì 0x5B2E:yÄ�n,yàn 0x5B2F:tái 0x5B30:yÄ«ng,yìng 0x5B31:qiàn 0x5B32:niÇŽo 0x5B33:yuè 0x5B34:yíng 0x5B35:mián 0x5B36:bí 0x5B37:mÄ� 0x5B38:shÄ›n 0x5B39:xìng,xÄ«ng 0x5B3A:nì 0x5B3B:dú 0x5B3C:liÇ” 0x5B3D:yuÄ�n 0x5B3E:lÇŽn 0x5B3F:yàn 0x5B40:shuÄ�ng 0x5B41:líng 0x5B42:jiÇŽo 0x5B43:niáng,ráng 0x5B44:lÇŽn 0x5B45:qiÄ�n,xiÄ�n 0x5B46:yÄ«ng 0x5B47:shuÄ�ng 0x5B48:huì,xié 0x5B49:quán,huÄ�n 0x5B4A:mÇ� 0x5B4B:lí,lì 0x5B4C:luán,liàn,luÇŽn 0x5B4D:yán,yÇŽn 0x5B4E:zhú,shú,chuò 0x5B4F:lÇŽn 0x5B50:zi,zÇ� 0x5B51:jié 0x5B52:jué 0x5B53:jué 0x5B54:kÇ’ng 0x5B55:yùn 0x5B56:mÄ�,zÄ« 0x5B57:zì 0x5B58:cún 0x5B59:sÅ«n 0x5B5A:fú 0x5B5B:bèi,bó 0x5B5C:zÄ« 0x5B5D:xiào 0x5B5E:xìn 0x5B5F:mèng 0x5B60:sì 0x5B61:tÄ�i 0x5B62:bÄ�o 0x5B63:jì 0x5B64:gÅ« 0x5B65:nú 0x5B66:xué 0x5B67:yòu 0x5B68:zhuÇŽn,nì 0x5B69:hái 0x5B6A:luán 0x5B6B:sÅ«n,xùn 0x5B6C:nÄ�o 0x5B6D:miÄ“ 0x5B6E:cóng 0x5B6F:qiÄ�n 0x5B70:shú 0x5B71:càn,chán,jiÄ�n,zhàn 0x5B72:yÄ� 0x5B73:zÄ« 0x5B74:nÇ�,nì,yì 0x5B75:fÅ« 0x5B76:zÄ« 0x5B77:lí 0x5B78:xué,huá,jiào 0x5B79:bò 0x5B7A:rú 0x5B7B:nái 0x5B7C:niè 0x5B7D:niè 0x5B7E:yÄ«ng 0x5B7F:luán 0x5B80:mián 0x5B81:níng,zhù,nìng 0x5B82:rÇ’ng 0x5B83:tÄ�,tuó,yí 0x5B84:guÇ� 0x5B85:zhái,chè,dù 0x5B86:qióng 0x5B87:yÇ” 0x5B88:shÇ’u,shòu 0x5B89:Ä�n 0x5B8A:tÅ«,jiÄ� 0x5B8B:sòng 0x5B8C:wán,kuÄ�n 0x5B8D:ròu 0x5B8E:yÇŽo,yÄ�o 0x5B8F:hóng 0x5B90:yí 0x5B91:jÇ�ng 0x5B92:zhÅ«n 0x5B93:mì,fú 0x5B94:zhÇ” 0x5B95:dàng 0x5B96:hóng 0x5B97:zÅ�ng 0x5B98:guÄ�n 0x5B99:zhòu 0x5B9A:dìng 0x5B9B:wÇŽn,yuÄ�n,yÇ”n,yù 0x5B9C:yí 0x5B9D:bÇŽo 0x5B9E:shí 0x5B9F:shí 0x5BA0:chÇ’ng 0x5BA1:shÄ›n 0x5BA2:kè,qià 0x5BA3:xuÄ�n 0x5BA4:shì 0x5BA5:yòu 0x5BA6:huàn 0x5BA7:yí 0x5BA8:tiÇŽo 0x5BA9:shÇ� 0x5BAA:xiàn,xiòng 0x5BAB:gÅ�ng 0x5BAC:chéng 0x5BAD:qún 0x5BAE:gÅ�ng 0x5BAF:xiÄ�o 0x5BB0:zÇŽi 0x5BB1:zhà 0x5BB2:bÇŽo,shí 0x5BB3:hài,hé 0x5BB4:yàn 0x5BB5:xiÄ�o 0x5BB6:jiÄ�,jià,jia,jie,gÅ« 0x5BB7:shÄ›n 0x5BB8:chén 0x5BB9:róng,yÇ’ng 0x5BBA:huÇŽng 0x5BBB:mì 0x5BBC:kòu 0x5BBD:kuÄ�n 0x5BBE:bÄ«n 0x5BBF:sù,xiù,xiÇ”,qÄ« 0x5BC0:cÇŽi,cài 0x5BC1:zÇŽn 0x5BC2:jì 0x5BC3:yuÄ�n 0x5BC4:jì 0x5BC5:yín 0x5BC6:mì 0x5BC7:kòu 0x5BC8:qÄ«ng 0x5BC9:hè 0x5BCA:zhÄ“n 0x5BCB:jiàn 0x5BCC:fù 0x5BCD:níng 0x5BCE:bìng,bÇ�ng 0x5BCF:huán 0x5BD0:mèi 0x5BD1:qÇ�n 0x5BD2:hán 0x5BD3:yù 0x5BD4:shí 0x5BD5:níng 0x5BD6:jìn 0x5BD7:níng 0x5BD8:zhì,tián 0x5BD9:yÇ” 0x5BDA:bÇŽo 0x5BDB:kuÄ�n 0x5BDC:níng 0x5BDD:qÇ�n 0x5BDE:mò 0x5BDF:chá,cuì 0x5BE0:jù,lÇœ,lóu 0x5BE1:guÇŽ 0x5BE2:qÇ�n 0x5BE3:hÅ« 0x5BE4:wù 0x5BE5:liáo 0x5BE6:shí,zhì 0x5BE7:níng,nìng 0x5BE8:zhài,sè,qiÄ�n 0x5BE9:shÄ›n,pán 0x5BEA:wÄ›i,wéi 0x5BEB:xiÄ›,xiè 0x5BEC:kuÄ�n 0x5BED:huì 0x5BEE:liáo 0x5BEF:jùn 0x5BF0:huán,xiàn 0x5BF1:yì 0x5BF2:yí 0x5BF3:bÇŽo 0x5BF4:qÄ«n,qìn 0x5BF5:chÇ’ng,lóng 0x5BF6:bÇŽo 0x5BF7:fÄ“ng 0x5BF8:cùn,cÇ”n 0x5BF9:duì 0x5BFA:sì,shì 0x5BFB:xún,xín 0x5BFC:dÇŽo 0x5BFD:lÇœ,lüè 0x5BFE:duì 0x5BFF:shòu 0x5C00:pÇ’ 0x5C01:fÄ“ng,biÇŽn 0x5C02:zhuÄ�n 0x5C03:fÅ«,bù,fÇ”,pò 0x5C04:shè,yè,yì 0x5C05:kè,kÄ“i 0x5C06:jiÄ�ng,jiàng,qiÄ�ng 0x5C07:jiÄ�ng,jiàng,qiÄ�ng,yáng,jiÇŽng 0x5C08:zhuÄ�n,tuán,shuàn 0x5C09:wèi,yù,yùn 0x5C0A:zÅ«n 0x5C0B:xún,xín 0x5C0C:shù,zhù 0x5C0D:duì 0x5C0E:dÇŽo,dào 0x5C0F:xiÇŽo 0x5C10:jié,jí 0x5C11:shÇŽo,shào 0x5C12:Ä›r 0x5C13:Ä›r 0x5C14:Ä›r 0x5C15:gÇŽ 0x5C16:jiÄ�n 0x5C17:shÅ«,shú 0x5C18:chén 0x5C19:shàng 0x5C1A:shàng,cháng 0x5C1B:mó 0x5C1C:gá 0x5C1D:cháng 0x5C1E:liào,liáo 0x5C1F:xiÇŽn 0x5C20:xiÇŽn 0x5C21:kun 0x5C22:yóu,wÄ�ng 0x5C23:wÄ�ng 0x5C24:yóu 0x5C25:liào,niÇŽo 0x5C26:liào 0x5C27:yáo 0x5C28:máng,méng,páng 0x5C29:wÄ�ng 0x5C2A:wÄ�ng 0x5C2B:wÄ�ng 0x5C2C:gà 0x5C2D:yáo 0x5C2E:duò 0x5C2F:kuì,kuÇ� 0x5C30:zhÇ’ng 0x5C31:jiù 0x5C32:gÄ�n 0x5C33:gÇ” 0x5C34:gÄ�n 0x5C35:tuí,zhuài 0x5C36:gÄ�n 0x5C37:gÄ�n 0x5C38:shÄ« 0x5C39:yÇ�n,yún 0x5C3A:chÇ�,chÄ› 0x5C3B:kÄ�o 0x5C3C:ní,nÇ� 0x5C3D:jÇ�n,jìn 0x5C3E:wÄ›i,yÇ� 0x5C3F:niào,suÄ« 0x5C40:jú 0x5C41:pì 0x5C42:céng 0x5C43:xì 0x5C44:bÄ« 0x5C45:jÅ«,jÄ« 0x5C46:jiè 0x5C47:tián 0x5C48:qÅ«,jué,què,jú 0x5C49:tì 0x5C4A:jiè 0x5C4B:wÅ« 0x5C4C:diÇŽo 0x5C4D:shÄ«,shì 0x5C4E:shÇ�,xÄ« 0x5C4F:píng,bÇ�ng,bìng,bÄ«ng 0x5C50:jÄ« 0x5C51:xiè 0x5C52:zhÄ›n 0x5C53:xiè 0x5C54:ní 0x5C55:zhÇŽn 0x5C56:xÄ« 0x5C57:wÄ›i 0x5C58:mÇŽn 0x5C59:Ä“ 0x5C5A:lòu 0x5C5B:píng 0x5C5C:tì 0x5C5D:fèi 0x5C5E:shÇ”,zhÇ” 0x5C5F:xiè,tì 0x5C60:tú 0x5C61:lÇš 0x5C62:lÇš 0x5C63:xÇ� 0x5C64:céng 0x5C65:lÇš 0x5C66:jù 0x5C67:xiè 0x5C68:jù 0x5C69:juÄ“ 0x5C6A:liáo 0x5C6B:jué 0x5C6C:shÇ”,zhÇ” 0x5C6D:xì 0x5C6E:chè,cÇŽo 0x5C6F:tún,zhÅ«n 0x5C70:nì,pò,jí 0x5C71:shÄ�n 0x5C72:wÄ� 0x5C73:xiÄ�n 0x5C74:lì 0x5C75:è,yÇŽn 0x5C76:huì 0x5C77:huì 0x5C78:lóng,hóng 0x5C79:yì,gÄ“ 0x5C7A:qÇ� 0x5C7B:rèn 0x5C7C:wù 0x5C7D:hàn,àn 0x5C7E:shÄ“n 0x5C7F:yÇ” 0x5C80:chÅ« 0x5C81:suì 0x5C82:qÇ� 0x5C83:rèn 0x5C84:yuè 0x5C85:bÇŽn 0x5C86:yÇŽo 0x5C87:áng 0x5C88:yá,xiÄ� 0x5C89:wù 0x5C8A:jié 0x5C8B:è,jí 0x5C8C:jí 0x5C8D:qiÄ�n 0x5C8E:fén,chà 0x5C8F:wán 0x5C90:qí 0x5C91:cén 0x5C92:qián 0x5C93:qí 0x5C94:chà 0x5C95:jiè 0x5C96:qÅ« 0x5C97:gÇŽng,gÄ�ng 0x5C98:xiàn 0x5C99:ào 0x5C9A:lán 0x5C9B:dÇŽo 0x5C9C:bÄ� 0x5C9D:zuò 0x5C9E:zuò 0x5C9F:yÇŽng 0x5CA0:jù 0x5CA1:gÄ�ng 0x5CA2:kÄ› 0x5CA3:gÇ’u 0x5CA4:xué 0x5CA5:pÅ� 0x5CA6:lì 0x5CA7:tiáo 0x5CA8:qÅ«,zÇ”,jÇ” 0x5CA9:yán 0x5CAA:fú 0x5CAB:xiù 0x5CAC:jiÇŽ,jiá 0x5CAD:lÇ�ng,líng 0x5CAE:tuó 0x5CAF:pí 0x5CB0:ào 0x5CB1:dài 0x5CB2:kuàng 0x5CB3:yuè 0x5CB4:qÅ« 0x5CB5:hù 0x5CB6:pò 0x5CB7:mín 0x5CB8:àn 0x5CB9:tiáo 0x5CBA:líng 0x5CBB:chí 0x5CBC:píng 0x5CBD:dÅ�ng 0x5CBE:hàn 0x5CBF:kuÄ« 0x5CC0:xiù 0x5CC1:mÇŽo 0x5CC2:tóng 0x5CC3:xué 0x5CC4:yì 0x5CC5:biàn 0x5CC6:hé 0x5CC7:bÄ�,kè 0x5CC8:luò 0x5CC9:è 0x5CCA:fù,niè 0x5CCB:xún 0x5CCC:dié 0x5CCD:lù 0x5CCE:Ä›n 0x5CCF:ér 0x5CD0:gÄ�i 0x5CD1:quÄ�n 0x5CD2:dòng,tóng 0x5CD3:yí 0x5CD4:mÇ” 0x5CD5:shí 0x5CD6:Ä�n 0x5CD7:wéi,wÄ›i 0x5CD8:huán 0x5CD9:zhì,shì 0x5CDA:mì 0x5CDB:lÇ� 0x5CDC:jì 0x5CDD:tóng 0x5CDE:wéi,wÄ›i 0x5CDF:yòu 0x5CE0:qiÇŽ 0x5CE1:xiá 0x5CE2:lÇ� 0x5CE3:yáo 0x5CE4:jiào,qiáo 0x5CE5:zhÄ“ng 0x5CE6:luán 0x5CE7:jiÄ�o 0x5CE8:é 0x5CE9:é 0x5CEA:yù 0x5CEB:xié,yé 0x5CEC:bÅ« 0x5CED:qiào 0x5CEE:qÅ«n 0x5CEF:fÄ“ng 0x5CF0:fÄ“ng 0x5CF1:náo 0x5CF2:lÇ� 0x5CF3:yóu 0x5CF4:xiàn 0x5CF5:róng 0x5CF6:dÇŽo 0x5CF7:shÄ“n 0x5CF8:chéng 0x5CF9:tú 0x5CFA:gÄ›ng 0x5CFB:jùn 0x5CFC:gào 0x5CFD:xiá 0x5CFE:yín 0x5CFF:yÇ”,wú 0x5D00:làng,lÇŽng 0x5D01:kàn 0x5D02:láo 0x5D03:lái 0x5D04:xiÇŽn 0x5D05:què 0x5D06:kÅ�ng 0x5D07:chóng 0x5D08:chóng 0x5D09:tà 0x5D0A:lín 0x5D0B:huà 0x5D0C:jÅ« 0x5D0D:lái 0x5D0E:qí,qÇ�,yÄ« 0x5D0F:mín 0x5D10:kÅ«n 0x5D11:kÅ«n 0x5D12:zú,cuì 0x5D13:gù 0x5D14:cuÄ« 0x5D15:yá 0x5D16:yá 0x5D17:gÇŽng,gÄ�ng 0x5D18:lún 0x5D19:lún 0x5D1A:léng,líng 0x5D1B:jué,yù 0x5D1C:duÅ�,duÇ’ 0x5D1D:zhÄ“ng 0x5D1E:guÅ� 0x5D1F:yín 0x5D20:dÅ�ng,dòng 0x5D21:hán 0x5D22:zhÄ“ng 0x5D23:wÄ›i 0x5D24:xiáo,yáo 0x5D25:pí,bÇ� 0x5D26:yÄ�n 0x5D27:sÅ�ng 0x5D28:jié 0x5D29:bÄ“ng 0x5D2A:zú 0x5D2B:kÅ«,jué 0x5D2C:dÅ�ng 0x5D2D:zhÇŽn 0x5D2E:gù 0x5D2F:yín 0x5D30:zÄ« 0x5D31:zè 0x5D32:huáng 0x5D33:yú 0x5D34:wÇŽi,wÄ“i,wÄ›i 0x5D35:yáng,dàng 0x5D36:fÄ“ng 0x5D37:qiú 0x5D38:yáng 0x5D39:tí 0x5D3A:yÇ� 0x5D3B:zhì 0x5D3C:shì,dié 0x5D3D:zÇŽi 0x5D3E:yÇŽo 0x5D3F:è 0x5D40:zhù 0x5D41:kÄ�n,zhàn 0x5D42:lÇœ 0x5D43:yÇŽn,yàn 0x5D44:mÄ›i 0x5D45:hán 0x5D46:jÄ« 0x5D47:jÄ«,xí 0x5D48:huàn 0x5D49:tíng 0x5D4A:shèng,chéng 0x5D4B:méi 0x5D4C:qiàn,hÇŽn,kàn 0x5D4D:wù,máo 0x5D4E:yú 0x5D4F:zÅ�ng 0x5D50:lán 0x5D51:kÄ›,jié 0x5D52:yán,niè 0x5D53:yán 0x5D54:wÄ›i 0x5D55:zÅ�ng 0x5D56:chá 0x5D57:suì 0x5D58:róng 0x5D59:kÄ“ 0x5D5A:qÄ«n 0x5D5B:yú 0x5D5C:qí 0x5D5D:lÇ’u 0x5D5E:tú 0x5D5F:duÄ« 0x5D60:xÄ« 0x5D61:wÄ›ng 0x5D62:cÄ�ng 0x5D63:dàng,táng 0x5D64:róng,yíng 0x5D65:jié 0x5D66:kÇŽi,ái 0x5D67:liú 0x5D68:wù 0x5D69:sÅ�ng 0x5D6A:qiÄ�o,kÄ�o 0x5D6B:zÄ« 0x5D6C:wéi,wÄ›i 0x5D6D:bÄ“ng 0x5D6E:diÄ�n 0x5D6F:cuó,cÄ« 0x5D70:qiÇŽn 0x5D71:yÇ’ng,yóng 0x5D72:niè 0x5D73:cuó 0x5D74:jÇ� 0x5D75:shí 0x5D76:ruò 0x5D77:sÇ’ng 0x5D78:zÅ�ng 0x5D79:jiàng 0x5D7A:liáo,jiÄ�o 0x5D7B:kÄ�ng 0x5D7C:chÇŽn 0x5D7D:dié,dì 0x5D7E:cÄ“n,cÄ�n 0x5D7F:dÇ�ng 0x5D80:tÅ« 0x5D81:lÇ’u 0x5D82:zhàng 0x5D83:zhÇŽn 0x5D84:zhÇŽn,chán 0x5D85:áo,ào 0x5D86:cáo 0x5D87:qÅ« 0x5D88:qiÄ�ng 0x5D89:cuÄ«,zuÇ� 0x5D8A:zuÇ� 0x5D8B:dÇŽo 0x5D8C:dÇŽo 0x5D8D:xí 0x5D8E:yù 0x5D8F:pèi,pÇ� 0x5D90:lóng 0x5D91:xiàng 0x5D92:céng,zhÄ“ng 0x5D93:bÅ� 0x5D94:qÄ«n 0x5D95:jiÄ�o 0x5D96:yÄ�n 0x5D97:láo 0x5D98:zhàn 0x5D99:lín,lÇ�n 0x5D9A:liáo 0x5D9B:liáo 0x5D9C:jÄ«n,qín 0x5D9D:dèng 0x5D9E:duò 0x5D9F:zÅ«n 0x5DA0:jiào,qiáo 0x5DA1:guì,jué 0x5DA2:yáo 0x5DA3:jiÄ�o 0x5DA4:yáo 0x5DA5:jué 0x5DA6:zhÄ�n,shàn 0x5DA7:yì 0x5DA8:xué 0x5DA9:náo 0x5DAA:yè 0x5DAB:yè 0x5DAC:yí,yÇ� 0x5DAD:niè 0x5DAE:xiÇŽn,yÇŽn 0x5DAF:jí 0x5DB0:xiè,jiè 0x5DB1:kÄ› 0x5DB2:xÄ« 0x5DB3:dì 0x5DB4:ào 0x5DB5:zuÇ� 0x5DB6:wÄ“i 0x5DB7:yí,nì 0x5DB8:róng 0x5DB9:dÇŽo 0x5DBA:lÇ�ng 0x5DBB:jié 0x5DBC:yÇ”,xù 0x5DBD:yuè 0x5DBE:yÇ�n 0x5DBF:ru 0x5DC0:jié 0x5DC1:lì,liè 0x5DC2:guÄ«,xÄ«,juàn 0x5DC3:lóng 0x5DC4:lóng 0x5DC5:diÄ�n 0x5DC6:róng,hÅ�ng,yíng 0x5DC7:xÄ« 0x5DC8:jú 0x5DC9:chán 0x5DCA:yÇ�ng 0x5DCB:kuÄ«,kuì,wÄ›i 0x5DCC:yán 0x5DCD:wÄ“i 0x5DCE:náo 0x5DCF:quán 0x5DD0:chÇŽo 0x5DD1:cuán 0x5DD2:luán 0x5DD3:diÄ�n 0x5DD4:diÄ�n 0x5DD5:niè 0x5DD6:yán 0x5DD7:yán 0x5DD8:yÇŽn 0x5DD9:kuí,náo 0x5DDA:yÇŽn 0x5DDB:chuÄ�n,shùn 0x5DDC:kuài,huÄ�n 0x5DDD:chuÄ�n 0x5DDE:zhÅ�u 0x5DDF:huÄ�ng 0x5DE0:jÄ«ng,xíng 0x5DE1:xún,yán,shùn 0x5DE2:cháo,chào 0x5DE3:cháo 0x5DE4:liè 0x5DE5:gÅ�ng 0x5DE6:zuÇ’ 0x5DE7:qiÇŽo 0x5DE8:jù,qú 0x5DE9:gÇ’ng 0x5DEA:jù 0x5DEB:wÅ« 0x5DEC:pu 0x5DED:pu 0x5DEE:chà,chÄ�,chÄ�i,chài,cÄ«,cuÅ�,jiÄ“ 0x5DEF:qiú 0x5DF0:qiú 0x5DF1:jÇ�,qÇ� 0x5DF2:yÇ�,sì 0x5DF3:sì,yÇ� 0x5DF4:bÄ� 0x5DF5:zhÄ« 0x5DF6:zhÄ�o 0x5DF7:xiàng,hàng 0x5DF8:yí 0x5DF9:jÇ�n 0x5DFA:xùn 0x5DFB:juàn 0x5DFC:bÄ� 0x5DFD:xùn,zhuàn 0x5DFE:jÄ«n 0x5DFF:fú,pó 0x5E00:zÄ� 0x5E01:bì,yìn 0x5E02:shì,fú 0x5E03:bù 0x5E04:dÄ«ng 0x5E05:shuài 0x5E06:fÄ�n,fán,fàn 0x5E07:niè 0x5E08:shÄ« 0x5E09:fÄ“n 0x5E0A:pà,pÄ� 0x5E0B:zhÇ� 0x5E0C:xÄ« 0x5E0D:hù 0x5E0E:dàn 0x5E0F:wéi 0x5E10:zhàng 0x5E11:tÇŽng,nú 0x5E12:dài 0x5E13:mò,wà 0x5E14:pèi,pÄ« 0x5E15:pà,mò 0x5E16:tiÄ“,tiè,tiÄ› 0x5E17:bÅ�,fú 0x5E18:lián,chén 0x5E19:zhì 0x5E1A:zhÇ’u 0x5E1B:bó 0x5E1C:zhì 0x5E1D:dì 0x5E1E:mò 0x5E1F:yì 0x5E20:yì 0x5E21:píng 0x5E22:qià 0x5E23:juÇŽn,juàn 0x5E24:rú 0x5E25:shuài 0x5E26:dài 0x5E27:zhèng 0x5E28:shuì 0x5E29:qiào 0x5E2A:zhÄ“n 0x5E2B:shÄ« 0x5E2C:qún 0x5E2D:xí 0x5E2E:bÄ�ng 0x5E2F:dài 0x5E30:guÄ« 0x5E31:chóu,dào 0x5E32:píng 0x5E33:zhàng 0x5E34:sàn,jiÇŽn,jiÄ�n 0x5E35:wÄ�n 0x5E36:dài 0x5E37:wéi 0x5E38:cháng 0x5E39:shà,qiè 0x5E3A:qí,jì 0x5E3B:zé 0x5E3C:guó 0x5E3D:mào 0x5E3E:dÇ” 0x5E3F:hóu 0x5E40:zhèng 0x5E41:xÅ« 0x5E42:mì 0x5E43:wéi 0x5E44:wò 0x5E45:fú,bÄ« 0x5E46:yì,kài 0x5E47:bÄ�ng 0x5E48:píng 0x5E49:dié 0x5E4A:gÅ�ng 0x5E4B:pán 0x5E4C:huÇŽng 0x5E4D:tÄ�o 0x5E4E:mì 0x5E4F:jià 0x5E50:téng 0x5E51:huÄ« 0x5E52:zhÅ�ng 0x5E53:shÄ�n,shÄ“n,qiÄ�o 0x5E54:màn 0x5E55:mù,màn 0x5E56:biÄ�o 0x5E57:guó 0x5E58:zé,cè 0x5E59:mù 0x5E5A:bÄ�ng 0x5E5B:zhàng 0x5E5C:jÇ�ng 0x5E5D:chÇŽn,chàn 0x5E5E:fú 0x5E5F:zhì 0x5E60:hÅ«,wú 0x5E61:fÄ�n 0x5E62:chuáng,zhuàng 0x5E63:bì 0x5E64:bì 0x5E65:zhÇŽng 0x5E66:mì 0x5E67:qiÄ�o 0x5E68:chÄ�n,chàn 0x5E69:fén,fèn 0x5E6A:méng,mÄ›ng 0x5E6B:bÄ�ng 0x5E6C:chóu,dào 0x5E6D:miè 0x5E6E:chú 0x5E6F:jié 0x5E70:xiÇŽn 0x5E71:lán 0x5E72:gàn,gÄ�n,àn 0x5E73:píng,pián,bìng,bÄ“ng 0x5E74:nián,nìng 0x5E75:jiÄ�n,qiÄ�n 0x5E76:bìng,bÄ«ng 0x5E77:bìng,bÄ«ng 0x5E78:xìng,niè 0x5E79:gàn,gÄ�n,hán,guÇŽn 0x5E7A:yÄ�o,mì 0x5E7B:huàn 0x5E7C:yòu,yào 0x5E7D:yÅ�u 0x5E7E:jÇ�,jÄ«,jì,qí 0x5E7F:guÇŽng,yÇŽn,Ä�n 0x5E80:pÇ� 0x5E81:tÄ«ng 0x5E82:zè 0x5E83:guÇŽng 0x5E84:zhuÄ�ng,péng 0x5E85:mó 0x5E86:qìng 0x5E87:bì,pí,pÇ� 0x5E88:qín 0x5E89:dùn,tún 0x5E8A:chuáng 0x5E8B:guÇ�,guì 0x5E8C:yÇŽ,yá 0x5E8D:bài,xìn,tÄ«ng 0x5E8E:jiè 0x5E8F:xù 0x5E90:lú 0x5E91:wÇ” 0x5E92:zhuÄ�ng 0x5E93:kù 0x5E94:yÄ«ng,yìng 0x5E95:dÇ�,de 0x5E96:páo 0x5E97:diàn 0x5E98:yÄ� 0x5E99:miào 0x5E9A:gÄ“ng 0x5E9B:cì 0x5E9C:fÇ” 0x5E9D:tóng 0x5E9E:páng 0x5E9F:fèi 0x5EA0:xiáng 0x5EA1:yÇ� 0x5EA2:zhì 0x5EA3:tiÄ�o 0x5EA4:zhì 0x5EA5:xiÅ« 0x5EA6:dù,duó,zhái 0x5EA7:zuò 0x5EA8:xiÄ�o 0x5EA9:tú 0x5EAA:guÇ� 0x5EAB:kù 0x5EAC:máng,méng 0x5EAD:tíng 0x5EAE:yÇ’u,yóu 0x5EAF:bÅ« 0x5EB0:bìng,bÇ�ng 0x5EB1:chÄ›ng 0x5EB2:lái 0x5EB3:bì,pí 0x5EB4:jí,jÄ« 0x5EB5:Ä�n,yÇŽn,è 0x5EB6:shù,zhù,zhÄ“ 0x5EB7:kÄ�ng,kàng 0x5EB8:yÅ�ng,yóng 0x5EB9:tuÇ’ 0x5EBA:sÅ�ng 0x5EBB:shù 0x5EBC:qÇ�ng 0x5EBD:yù 0x5EBE:yÇ”,yú 0x5EBF:miào 0x5EC0:sÅ�u 0x5EC1:cè,cì,zè,si 0x5EC2:xiÄ�ng 0x5EC3:fèi 0x5EC4:jiù 0x5EC5:è 0x5EC6:guÄ«,huì,wÄ›i 0x5EC7:liù 0x5EC8:shà,xià 0x5EC9:lián 0x5ECA:láng 0x5ECB:sÅ�u 0x5ECC:zhì 0x5ECD:bù 0x5ECE:qÇ�ng,qìng,qÄ«ng 0x5ECF:jiù 0x5ED0:jiù 0x5ED1:jÇ�n,qín 0x5ED2:áo 0x5ED3:kuò 0x5ED4:lóu 0x5ED5:yìn 0x5ED6:liào,liáo 0x5ED7:dài 0x5ED8:lù 0x5ED9:yì 0x5EDA:chú 0x5EDB:chán 0x5EDC:tú 0x5EDD:sÄ« 0x5EDE:xÄ«n,qiàn 0x5EDF:miào 0x5EE0:chÇŽng 0x5EE1:wÇ”,wú 0x5EE2:fèi 0x5EE3:guÇŽng,guàng,kuàng,guÄ�ng 0x5EE4:kù 0x5EE5:kuài 0x5EE6:bì 0x5EE7:qiáng,sè 0x5EE8:xiè 0x5EE9:lÇ�n,lÇŽn 0x5EEA:lÇ�n 0x5EEB:liáo 0x5EEC:lú,lǘ 0x5EED:jì 0x5EEE:yÇ�ng 0x5EEF:xiÄ�n 0x5EF0:tÄ«ng 0x5EF1:yÅ�ng 0x5EF2:lí 0x5EF3:tÄ«ng 0x5EF4:yÇ�n,yìn 0x5EF5:xún 0x5EF6:yán 0x5EF7:tíng 0x5EF8:dí 0x5EF9:pÇŽi,pò 0x5EFA:jiàn 0x5EFB:huí 0x5EFC:nÇŽi 0x5EFD:huí 0x5EFE:gÇ’ng 0x5EFF:niàn 0x5F00:kÄ�i 0x5F01:biàn,pán 0x5F02:yì,yí 0x5F03:qì 0x5F04:nòng,lòng 0x5F05:fèn 0x5F06:jÇ”,qÇ” 0x5F07:yÇŽn,yÄ�n,nán 0x5F08:yì 0x5F09:zàng 0x5F0A:bì 0x5F0B:yì 0x5F0C:yÄ« 0x5F0D:èr 0x5F0E:sÄ�n 0x5F0F:shì,tè 0x5F10:èr 0x5F11:shì 0x5F12:shì 0x5F13:gÅ�ng 0x5F14:diào,dì 0x5F15:yÇ�n 0x5F16:hù 0x5F17:fú 0x5F18:hóng 0x5F19:wÅ« 0x5F1A:tuí 0x5F1B:chí 0x5F1C:jiàng 0x5F1D:bà 0x5F1E:shÄ›n 0x5F1F:dì,tì,tuí 0x5F20:zhÄ�ng 0x5F21:jué,zhÄ�ng 0x5F22:tÄ�o 0x5F23:fÇ” 0x5F24:dÇ� 0x5F25:mí 0x5F26:xián 0x5F27:hú 0x5F28:chÄ�o 0x5F29:nÇ” 0x5F2A:jìng 0x5F2B:zhÄ›n 0x5F2C:yí 0x5F2D:mÇ� 0x5F2E:quÄ�n,juàn 0x5F2F:wÄ�n 0x5F30:shÄ�o 0x5F31:ruò 0x5F32:xuÄ�n,yuÄ�n 0x5F33:jìng 0x5F34:diÄ�o 0x5F35:zhÄ�ng,zhàng 0x5F36:jiàng 0x5F37:qiáng,jiàng,qiÇŽng 0x5F38:péng,pÄ“ng 0x5F39:dàn,tán 0x5F3A:qiáng,qiÇŽng,jiàng 0x5F3B:bì 0x5F3C:bì 0x5F3D:shè 0x5F3E:dàn 0x5F3F:jiÇŽn 0x5F40:gòu,kÅ�u 0x5F41:gÄ“ 0x5F42:fÄ� 0x5F43:bì 0x5F44:kÅ�u 0x5F45:jiÇŽn 0x5F46:biè 0x5F47:xiÄ�o 0x5F48:dàn,tán 0x5F49:guÅ� 0x5F4A:jiàng,qiáng,qiÇŽng,jiÄ�ng 0x5F4B:hóng 0x5F4C:mí,mÇ�,ní 0x5F4D:guÅ� 0x5F4E:wÄ�n 0x5F4F:jué 0x5F50:jì 0x5F51:jì 0x5F52:guÄ« 0x5F53:dÄ�ng,dàng 0x5F54:lù 0x5F55:lù 0x5F56:tuàn,shÇ� 0x5F57:huì,suì 0x5F58:zhì 0x5F59:huì 0x5F5A:huì 0x5F5B:yí 0x5F5C:yí 0x5F5D:yí 0x5F5E:yí 0x5F5F:yuÄ“ 0x5F60:yuÄ“ 0x5F61:shÄ�n,xiÇŽn 0x5F62:xíng 0x5F63:wén 0x5F64:tóng 0x5F65:yàn 0x5F66:yàn,pán 0x5F67:yù 0x5F68:chÄ« 0x5F69:cÇŽi 0x5F6A:biÄ�o 0x5F6B:diÄ�o 0x5F6C:bÄ«n,bÄ�n 0x5F6D:péng,páng,bÄ�ng,pÄ“ng 0x5F6E:yÇ’ng 0x5F6F:piÄ�o,piào,miÇŽo 0x5F70:zhÄ�ng 0x5F71:yÇ�ng 0x5F72:chÄ« 0x5F73:chì,fú 0x5F74:zhuó,bó 0x5F75:tuÇ’,yí 0x5F76:jí 0x5F77:páng,fÇŽng,fáng 0x5F78:zhÅ�ng 0x5F79:yì 0x5F7A:wáng 0x5F7B:chè 0x5F7C:bÇ� 0x5F7D:dÄ« 0x5F7E:líng,lÇ�ng 0x5F7F:fú 0x5F80:wÇŽng,wàng 0x5F81:zhÄ“ng 0x5F82:cú 0x5F83:wÇŽng 0x5F84:jìng 0x5F85:dài,dÄ�i 0x5F86:xÄ« 0x5F87:xùn 0x5F88:hÄ›n 0x5F89:yáng 0x5F8A:huái,huí 0x5F8B:lÇœ 0x5F8C:hòu 0x5F8D:wÇŽng,wÄ� 0x5F8E:chÄ›ng,zhèng 0x5F8F:zhì 0x5F90:xú 0x5F91:jìng,jÄ«ng 0x5F92:tú 0x5F93:cóng 0x5F94:zhi 0x5F95:lái,lài 0x5F96:cóng 0x5F97:dé,dÄ›i,de 0x5F98:pái 0x5F99:xÇ�,sÄ« 0x5F9A:dÅ�ng 0x5F9B:jì 0x5F9C:cháng 0x5F9D:zhì 0x5F9E:cóng,zòng,zÅ�ng,cÅ�ng,zÇ’ng 0x5F9F:zhÅ�u 0x5FA0:lái,lài 0x5FA1:yù,yà 0x5FA2:xiè 0x5FA3:jiè 0x5FA4:jiàn 0x5FA5:shì,tÇ� 0x5FA6:jiÇŽ,xiá 0x5FA7:biàn,pián,piÄ�n 0x5FA8:huáng 0x5FA9:fù 0x5FAA:xún 0x5FAB:wÄ›i 0x5FAC:páng,bàng 0x5FAD:yáo 0x5FAE:wÄ“i 0x5FAF:xÄ«,xí 0x5FB0:zhÄ“ng 0x5FB1:piào 0x5FB2:tí,chí 0x5FB3:dé 0x5FB4:zhÄ“ng 0x5FB5:zhÄ“ng,zhÇ�,chéng 0x5FB6:bié 0x5FB7:dé 0x5FB8:chÅ�ng,zhÅ�ng,zhÇ’ng 0x5FB9:chè 0x5FBA:jiÇŽo 0x5FBB:huì 0x5FBC:jiÇŽo,jiào,jiÄ�o,yÄ�o 0x5FBD:huÄ« 0x5FBE:méi 0x5FBF:lòng,lÇ’ng 0x5FC0:xiÄ�ng,rÇŽng 0x5FC1:bào 0x5FC2:qú,jù 0x5FC3:xÄ«n 0x5FC4:xin 0x5FC5:bì 0x5FC6:yì 0x5FC7:lè 0x5FC8:rén 0x5FC9:dÄ�o 0x5FCA:dìng,tìng 0x5FCB:gÇŽi 0x5FCC:jì 0x5FCD:rÄ›n,rèn 0x5FCE:rén 0x5FCF:chàn,qiÇŽn,qiÄ�n 0x5FD0:tÇŽn,kÄ›ng 0x5FD1:tè,dÇŽo 0x5FD2:tè,tuÄ«,tÄ“i 0x5FD3:gÄ�n,hàn 0x5FD4:qì,yì 0x5FD5:shì,tài 0x5FD6:cÇ”n 0x5FD7:zhì 0x5FD8:wàng,wáng 0x5FD9:máng 0x5FDA:xÄ«,liÄ› 0x5FDB:fÄ�n 0x5FDC:yÄ«ng 0x5FDD:tiÇŽn 0x5FDE:mín,wÄ›n 0x5FDF:wÄ›n 0x5FE0:zhÅ�ng 0x5FE1:chÅ�ng 0x5FE2:wù 0x5FE3:jí 0x5FE4:wÇ”,wù 0x5FE5:xì 0x5FE6:jiá 0x5FE7:yÅ�u,yòu 0x5FE8:wàn,wán 0x5FE9:cÅ�ng 0x5FEA:sÅ�ng,zhÅ�ng 0x5FEB:kuài 0x5FEC:yù,shÅ« 0x5FED:biàn 0x5FEE:zhì,qí 0x5FEF:qí,shì 0x5FF0:cuì 0x5FF1:chén,dàn 0x5FF2:tài 0x5FF3:tún,zhÅ«n,dùn 0x5FF4:qián,qín 0x5FF5:niàn 0x5FF6:hún 0x5FF7:xiÅ�ng 0x5FF8:niÇ” 0x5FF9:kuáng,wÇŽng 0x5FFA:xiÄ�n 0x5FFB:xÄ«n 0x5FFC:kÄ�ng,hÄ�ng,hàng 0x5FFD:hÅ« 0x5FFE:kài,qì 0x5FFF:fèn 0x6000:huái,fù 0x6001:tài 0x6002:sÇ’ng 0x6003:wÇ” 0x6004:òu 0x6005:chàng 0x6006:chuàng 0x6007:jù 0x6008:yì 0x6009:bÇŽo,bào 0x600A:chÄ�o 0x600B:mín,mén 0x600C:pÄ“i 0x600D:zuò,zhà 0x600E:zÄ›n 0x600F:yàng,yÄ�ng 0x6010:jù,kòu 0x6011:bàn 0x6012:nù 0x6013:náo,niú 0x6014:zhÄ“ng,zhèng 0x6015:pà,bó 0x6016:bù 0x6017:tiÄ“,zhÄ�n 0x6018:hù,gù 0x6019:hù,tiÄ“ 0x601A:jù,qÅ«,cÅ«,zÅ« 0x601B:dá,dàn 0x601C:lián,líng,lÇ�ng 0x601D:sÄ«,sÄ�i 0x601E:chóu,yóu 0x601F:dì 0x6020:dài,yí 0x6021:yí 0x6022:tÅ«,dié,tuì 0x6023:yóu 0x6024:fÅ« 0x6025:jí 0x6026:pÄ“ng 0x6027:xìng 0x6028:yuàn,yùn 0x6029:ní 0x602A:guài 0x602B:fú,fèi,bèi 0x602C:xì 0x602D:bì 0x602E:yÅ�u,yào 0x602F:qiè 0x6030:xuàn 0x6031:cÅ�ng 0x6032:bÇ�ng 0x6033:huÇŽng 0x6034:xù,xuè 0x6035:chù,xù 0x6036:bì,pÄ« 0x6037:shù 0x6038:xÄ« 0x6039:tÄ�n 0x603A:yÇ’ng 0x603B:zÇ’ng 0x603C:duì 0x603D:mo 0x603E:zhÇ� 0x603F:yì 0x6040:shì 0x6041:nèn,rèn,nín 0x6042:xún,shùn 0x6043:shì,zhì 0x6044:xì 0x6045:lÇŽo 0x6046:héng,gèng 0x6047:kuÄ�ng 0x6048:móu 0x6049:zhÇ� 0x604A:xié 0x604B:liàn 0x604C:tiÄ�o,yáo 0x604D:huÇŽng,guÄ�ng 0x604E:dié 0x604F:hào 0x6050:kÇ’ng 0x6051:guÇ�,wéi 0x6052:héng 0x6053:xÄ«,qÄ«,xù 0x6054:jiÇŽo,xiào 0x6055:shù 0x6056:sÄ« 0x6057:hÅ«,kuÄ� 0x6058:qiÅ« 0x6059:yàng 0x605A:huì 0x605B:huí 0x605C:chì 0x605D:jiá,qì 0x605E:yí 0x605F:xiÅ�ng 0x6060:guài 0x6061:lìn 0x6062:huÄ« 0x6063:zì 0x6064:xù 0x6065:chÇ� 0x6066:shàng 0x6067:nÇœ 0x6068:hèn 0x6069:Ä“n 0x606A:kè 0x606B:dòng,tÅ�ng 0x606C:tián 0x606D:gÅ�ng 0x606E:quÄ�n,zhuÄ�n 0x606F:xÄ« 0x6070:qià 0x6071:yuè 0x6072:pÄ“ng 0x6073:kÄ›n 0x6074:dé 0x6075:huì 0x6076:è,Ä›,wÅ«,wù 0x6077:xiao 0x6078:tòng 0x6079:yÄ�n 0x607A:kÇŽi 0x607B:cè 0x607C:nÇŽo 0x607D:yùn 0x607E:máng 0x607F:yÇ’ng,tÅ�ng 0x6080:yÇ’ng 0x6081:yuÄ�n,juàn 0x6082:pÄ«,bÄ«,pÇ� 0x6083:kÇ”n 0x6084:qiÄ�o,qiÇŽo,qiào 0x6085:yuè 0x6086:yù,shÅ« 0x6087:tú,yú 0x6088:jiè,kè 0x6089:xÄ« 0x608A:zhé 0x608B:lìn 0x608C:tì 0x608D:hàn 0x608E:hào,jiào 0x608F:qiè 0x6090:tì 0x6091:bù 0x6092:yì 0x6093:qiàn 0x6094:huÇ� 0x6095:xÄ« 0x6096:bèi,bÄ›i 0x6097:mán,mèn 0x6098:yÄ«,yì 0x6099:hÄ“ng,hèng 0x609A:sÇ’ng 0x609B:quÄ�n,xún 0x609C:chÄ›ng 0x609D:kuÄ«,lÇ� 0x609E:wù 0x609F:wù 0x60A0:yÅ�u 0x60A1:lí 0x60A2:liàng,lÇŽng 0x60A3:huàn 0x60A4:cÅ�ng 0x60A5:yì 0x60A6:yuè 0x60A7:lì 0x60A8:nín 0x60A9:nÇŽo 0x60AA:è 0x60AB:què 0x60AC:xuán 0x60AD:qiÄ�n 0x60AE:wù 0x60AF:mÇ�n 0x60B0:cóng 0x60B1:fÄ›i 0x60B2:bÄ“i 0x60B3:dé 0x60B4:cuì 0x60B5:chàng 0x60B6:mèn,mÄ“n 0x60B7:lì 0x60B8:jì 0x60B9:guàn 0x60BA:guàn 0x60BB:xìng 0x60BC:dào 0x60BD:qÄ«,qì 0x60BE:kÅ�ng,kÇ’ng 0x60BF:tiÇŽn 0x60C0:lún,lùn 0x60C1:xÄ« 0x60C2:kÇŽn 0x60C3:gÇ”n 0x60C4:nì 0x60C5:qíng 0x60C6:chóu,qiÅ«,dÄ�o 0x60C7:dÅ«n 0x60C8:guÇ’ 0x60C9:zhÄ�n 0x60CA:jÄ«ng,liáng 0x60CB:wÇŽn 0x60CC:yuÄ�n,wÇŽn,yù 0x60CD:jÄ«n 0x60CE:jì 0x60CF:lán,lín 0x60D0:yù,xù 0x60D1:huò 0x60D2:hé 0x60D3:quán,juàn 0x60D4:tán,dàn 0x60D5:tì 0x60D6:tì 0x60D7:niè 0x60D8:wÇŽng 0x60D9:chuò,chuì 0x60DA:hÅ« 0x60DB:hÅ«n,hÇ”n,mèn 0x60DC:xÄ« 0x60DD:chÇŽng,tÇŽng 0x60DE:xÄ«n 0x60DF:wéi,wÄ›i 0x60E0:huì 0x60E1:è,wù,wÅ«,Ä›,hÅ« 0x60E2:suÇ’,ruÇ� 0x60E3:zÇ’ng 0x60E4:jiÄ�n 0x60E5:yÇ’ng 0x60E6:diàn 0x60E7:jù 0x60E8:cÇŽn 0x60E9:chéng 0x60EA:dé 0x60EB:bèi 0x60EC:qiè 0x60ED:cán 0x60EE:dàn 0x60EF:guàn 0x60F0:duò,tuó 0x60F1:nÇŽo 0x60F2:yùn 0x60F3:xiÇŽng 0x60F4:zhuì,chuÇŽn,guà 0x60F5:dié,tiÄ“ 0x60F6:huáng 0x60F7:chÇ”n 0x60F8:qióng 0x60F9:rÄ›,ruò 0x60FA:xÄ«ng 0x60FB:cè 0x60FC:biÇŽn 0x60FD:mÇ�n,hÅ«n 0x60FE:zÅ�ng 0x60FF:tí,shì 0x6100:qiÇŽo,qiù 0x6101:chóu,qiÇŽo,jiÅ« 0x6102:bèi 0x6103:xuÄ�n 0x6104:wÄ“i 0x6105:gé 0x6106:qiÄ�n 0x6107:wÄ›i 0x6108:yù 0x6109:yú,tÅ�u,yÇ” 0x610A:bì 0x610B:xuÄ�n 0x610C:huàn 0x610D:mÇ�n,fÄ“n 0x610E:bì 0x610F:yì,yÄ« 0x6110:miÇŽn 0x6111:yÇ’ng 0x6112:kài,qì,hè 0x6113:dàng,shÄ�ng,táng,yáng 0x6114:yÄ«n 0x6115:è 0x6116:chén,dÄ�n,xìn 0x6117:mào 0x6118:qià,qiÄ�,kè 0x6119:kè 0x611A:yú 0x611B:ài 0x611C:qiè 0x611D:yÇŽn 0x611E:nuò 0x611F:gÇŽn,hàn 0x6120:yùn,yÇ”n,wÄ›n 0x6121:zÇ’ng 0x6122:sÄ�i,sÄ«,sÇ� 0x6123:lèng 0x6124:fèn 0x6125:yÄ«ng 0x6126:kuì 0x6127:kuì 0x6128:què 0x6129:gÅ�ng,gòng,hÇ’ng 0x612A:yún 0x612B:sù 0x612C:sù,sè 0x612D:qí 0x612E:yáo,yào 0x612F:sÇ’ng 0x6130:huàng,huÇŽng 0x6131:jí 0x6132:gÇ” 0x6133:jù 0x6134:chuàng,chuÇŽng 0x6135:nì 0x6136:xié 0x6137:kÇŽi 0x6138:zhÄ›ng 0x6139:yÇ’ng 0x613A:cÇŽo 0x613B:xùn 0x613C:shèn 0x613D:bó 0x613E:kài,xì,qì 0x613F:yuàn 0x6140:xì,xié 0x6141:hùn 0x6142:yÇ’ng 0x6143:yÇŽng 0x6144:lì 0x6145:sÄ�o,cÇŽo 0x6146:tÄ�o 0x6147:yÄ«n 0x6148:cí 0x6149:xù,chù 0x614A:qiàn,xián,qiÇŽn,qiè 0x614B:tài 0x614C:huÄ�ng,huÇŽng,huang 0x614D:yùn 0x614E:shèn,zhèn 0x614F:mÇ�ng 0x6150:gong 0x6151:shè 0x6152:cóng,cáo 0x6153:piÄ�o,piào 0x6154:mù 0x6155:mù 0x6156:guó 0x6157:chì 0x6158:cÇŽn 0x6159:cán 0x615A:cán 0x615B:cuÄ« 0x615C:mÇ�n 0x615D:tè,nì 0x615E:zhÄ�ng 0x615F:tòng 0x6160:ào,áo 0x6161:shuÇŽng 0x6162:màn,mán 0x6163:guàn 0x6164:què 0x6165:zào,cào 0x6166:jiù 0x6167:huì 0x6168:kÇŽi 0x6169:lián 0x616A:òu,Å�u 0x616B:sÇ’ng 0x616C:qín,jìn,jÇ�n 0x616D:yìn 0x616E:lÇœ,lǘ 0x616F:shÄ�ng 0x6170:wèi 0x6171:tuán 0x6172:mán 0x6173:qiÄ�n,xián 0x6174:shè,zhé 0x6175:yÅ�ng 0x6176:qìng,qÄ«ng,qiÄ�ng 0x6177:kÄ�ng 0x6178:dì,chì 0x6179:zhí,zhé 0x617A:lóu,lÇš 0x617B:juàn 0x617C:qÄ« 0x617D:qÄ« 0x617E:yù 0x617F:píng 0x6180:liáo 0x6181:còng,sÅ�ng 0x6182:yÅ�u 0x6183:chÅ�ng 0x6184:zhì 0x6185:tòng 0x6186:chÄ“ng 0x6187:qì 0x6188:qÅ« 0x6189:péng 0x618A:bèi 0x618B:biÄ“ 0x618C:qióng 0x618D:jiÄ�o 0x618E:zÄ“ng 0x618F:chì 0x6190:lián 0x6191:píng 0x6192:kuì 0x6193:huì 0x6194:qiáo 0x6195:chéng,zhèng,dèng 0x6196:yìn,xìn,yín 0x6197:yìn 0x6198:xÇ�,xÄ« 0x6199:xÄ«,xÇ� 0x619A:dàn,dá,chÇŽn 0x619B:tán 0x619C:duò 0x619D:duì 0x619E:duì,dùn,tÅ«n 0x619F:sù 0x61A0:jué 0x61A1:cè 0x61A2:xiÄ�o,jiÄ�o 0x61A3:fÄ�n 0x61A4:fèn 0x61A5:láo 0x61A6:lào,láo 0x61A7:chÅ�ng,zhuàng 0x61A8:hÄ�n 0x61A9:qì 0x61AA:xián,xiàn 0x61AB:mÇ�n 0x61AC:jÇ�ng 0x61AD:liÇŽo,liáo 0x61AE:wÇ”,wú 0x61AF:cÇŽn 0x61B0:jué 0x61B1:cù 0x61B2:xiàn,xiÇŽn 0x61B3:tÇŽn 0x61B4:shéng 0x61B5:pÄ« 0x61B6:yì 0x61B7:chù,chÇ” 0x61B8:xiÄ�n 0x61B9:náo,nóng,náng,nÇŽo 0x61BA:dàn 0x61BB:tÇŽn 0x61BC:jÇ�ng,jìng 0x61BD:sÅ�ng 0x61BE:hàn,dàn 0x61BF:jiÇŽo,jÄ« 0x61C0:wèi 0x61C1:xuÄ�n,huÄ�n 0x61C2:dÇ’ng 0x61C3:qín 0x61C4:qín 0x61C5:jù 0x61C6:cÇŽo,sÄ�o,sào 0x61C7:kÄ›n 0x61C8:xiè 0x61C9:yÄ«ng,yìng 0x61CA:ào,yù 0x61CB:mào 0x61CC:yì 0x61CD:lÇ�n 0x61CE:sè 0x61CF:jùn 0x61D0:huái 0x61D1:mèn 0x61D2:lÇŽn 0x61D3:ài 0x61D4:lÇ�n,lÇŽn 0x61D5:yÄ�n,yàn,yè 0x61D6:kuò 0x61D7:xià 0x61D8:chì 0x61D9:yÇ” 0x61DA:yìn 0x61DB:dÄ�i 0x61DC:mÄ›ng,mèng,méng 0x61DD:ài,nì,nÇ� 0x61DE:méng,mÄ›ng 0x61DF:duì 0x61E0:qí,jì,jÄ« 0x61E1:mÇ’ 0x61E2:lán,xiàn 0x61E3:mèn 0x61E4:chóu 0x61E5:zhì 0x61E6:nuò 0x61E7:nuò 0x61E8:yÄ�n 0x61E9:yÇŽng 0x61EA:bó 0x61EB:zhì 0x61EC:kuàng 0x61ED:kuÇŽng 0x61EE:yÇ’u,yÅ�u 0x61EF:fÅ« 0x61F0:liú,liÇ” 0x61F1:miè 0x61F2:chéng 0x61F3:hui 0x61F4:chàn 0x61F5:mÄ›ng,mèng 0x61F6:lÇŽn,lài 0x61F7:huái 0x61F8:xuán 0x61F9:ràng 0x61FA:chàn 0x61FB:jì 0x61FC:jù 0x61FD:huÄ�n,guàn 0x61FE:shè 0x61FF:yì,yÄ« 0x6200:liàn 0x6201:nÇŽn 0x6202:mí,mó 0x6203:tÇŽng 0x6204:jué 0x6205:gàng 0x6206:gàng,zhuàng 0x6207:zhuàng,gàng 0x6208:gÄ“ 0x6209:yuè 0x620A:wù 0x620B:jiÄ�n 0x620C:xÅ«,qu 0x620D:shù 0x620E:róng,rÄ“ng 0x620F:xì,hÅ« 0x6210:chéng 0x6211:wÇ’ 0x6212:jiè 0x6213:gÄ“ 0x6214:jiÄ�n,cán 0x6215:qiÄ�ng,zÄ�ng 0x6216:huò,yù 0x6217:qiÄ�ng,qiàng 0x6218:zhàn 0x6219:dòng 0x621A:qÄ«,cù 0x621B:jiá 0x621C:dié 0x621D:zéi 0x621E:jiá 0x621F:jÇ� 0x6220:zhÄ«,zhí 0x6221:kÄ�n,zhÄ›n 0x6222:jí 0x6223:kuí 0x6224:gài 0x6225:dÄ›ng 0x6226:zhàn 0x6227:qiÄ�ng,chuÄ�ng,qiàng 0x6228:gÄ“ 0x6229:jiÇŽn 0x622A:jié 0x622B:yù 0x622C:jiÇŽn 0x622D:yÇŽn,yÇ’u 0x622E:lù 0x622F:hÅ«,xì 0x6230:zhàn 0x6231:xì 0x6232:xì,hÅ«,xÄ«,huÄ«,suÅ�,yÄ« 0x6233:chuÅ� 0x6234:dài 0x6235:qú 0x6236:hù 0x6237:hù 0x6238:hù 0x6239:è 0x623A:shì,yí 0x623B:tì 0x623C:mÇŽo 0x623D:hù 0x623E:lì 0x623F:fáng,páng 0x6240:suÇ’ 0x6241:biÇŽn,piÄ�n,biÄ�n,pián 0x6242:diàn 0x6243:jiÅ�ng,jiÇ’ng 0x6244:shÇŽng,jiÅ�ng 0x6245:yí 0x6246:yÇ� 0x6247:shàn,shÄ�n 0x6248:hù 0x6249:fÄ“i 0x624A:yÇŽn 0x624B:shÇ’u 0x624C:shou 0x624D:cái,zÄ�i 0x624E:zhÄ�,zhá,zhÇŽ,zÄ� 0x624F:qiú 0x6250:lè,lì,cái 0x6251:pÅ«,pì 0x6252:bÄ�,bài,bié,pá 0x6253:dÇŽ,dá 0x6254:rÄ“ng,rèng 0x6255:fÇŽn 0x6256:rù 0x6257:zài 0x6258:tuÅ� 0x6259:zhàng 0x625A:diÇŽo,dí,yuÄ“,lì 0x625B:káng,gÄ�ng 0x625C:yÅ«,wÅ« 0x625D:kÅ«,wÅ« 0x625E:gÇŽn,hàn 0x625F:shÄ“n 0x6260:chÄ�,chÄ�i,zhÇŽ 0x6261:tuÅ�,yÇ�,chÇ� 0x6262:gÇ”,qì,jié,gÄ“ 0x6263:kòu 0x6264:wù 0x6265:dèn 0x6266:qiÄ�n 0x6267:zhí 0x6268:rèn 0x6269:kuò 0x626A:mén 0x626B:sÇŽo,sào 0x626C:yáng 0x626D:niÇ”,chÇ’u,zhÇ’u,zhòu 0x626E:bàn,fÄ›n,fÄ“n,huÇ’ 0x626F:chÄ› 0x6270:rÇŽo,yòu 0x6271:xÄ«,chÄ�,qì 0x6272:qián,qín 0x6273:bÄ�n,pÄ�n 0x6274:jiá 0x6275:yú 0x6276:fú,pú 0x6277:ào 0x6278:xÄ«,zhé 0x6279:pÄ«,pí 0x627A:zhÇ�,qí 0x627B:zhì,sÇ”n,kÇŽn 0x627C:è 0x627D:dèn 0x627E:zhÇŽo,huá 0x627F:chéng,zhÄ›ng,zhèng 0x6280:jì,qí 0x6281:yÇŽn 0x6282:kuáng,wÇŽng 0x6283:biàn 0x6284:chÄ�o,suÅ�,chào,chÇŽo 0x6285:jÅ« 0x6286:wÄ›n 0x6287:hú 0x6288:yuè 0x6289:jué 0x628A:bÇŽ,bà,pá 0x628B:qìn 0x628C:dÇŽn,shÄ›n 0x628D:zhÄ›ng 0x628E:yÇ”n 0x628F:wán 0x6290:nè,nì,nà,ruì 0x6291:yì 0x6292:shÅ« 0x6293:zhuÄ� 0x6294:póu 0x6295:tóu,dòu 0x6296:dÇ’u 0x6297:kàng,gÄ�ng 0x6298:zhé,shé,tí,zhÄ“ 0x6299:póu 0x629A:fÇ” 0x629B:pÄ�o 0x629C:bá 0x629D:ÇŽo,ào,niù 0x629E:zé 0x629F:tuán 0x62A0:kÅ�u 0x62A1:lÅ«n,lún 0x62A2:qiÇŽng,qiÄ�ng 0x62A3:yun 0x62A4:hù 0x62A5:bào 0x62A6:bÇ�ng 0x62A7:zhÇ�,zhÇŽi 0x62A8:pÄ“ng,bÄ“ng 0x62A9:nán 0x62AA:bù,pÅ«,bá 0x62AB:pÄ« 0x62AC:tái,chÄ« 0x62AD:yÇŽo,tÄ�o 0x62AE:zhÄ›n 0x62AF:zhÄ� 0x62B0:yÄ�ng 0x62B1:bào,pÄ�o,pÇ’u 0x62B2:hÄ“,hè,qiÄ� 0x62B3:nÇ�,ní 0x62B4:yè,shé 0x62B5:dÇ�,zhÇ�,qí 0x62B6:chì 0x62B7:pÄ«,pÄ“i 0x62B8:jiÄ� 0x62B9:mÇ’,mò,mÄ� 0x62BA:mèi 0x62BB:chÄ“n,shÄ“n 0x62BC:yÄ�,xiá,jiÇŽ 0x62BD:chÅ�u 0x62BE:qÅ« 0x62BF:mÇ�n 0x62C0:chù 0x62C1:jiÄ�,yá 0x62C2:fú,bì,pì,fèi 0x62C3:zhÇŽ,zhÇŽn,zhà,zhá 0x62C4:zhÇ” 0x62C5:dÄ�n,dÇŽn,jiÄ“,dàn 0x62C6:chÄ�i,chè,chì,cÄ� 0x62C7:mÇ” 0x62C8:niÄ�n,niÇŽn,diÄ�n 0x62C9:lÄ�,lá,lÇŽ,là,la 0x62CA:fÇ”,fÅ«,bÇ” 0x62CB:pÄ�o 0x62CC:bàn,pÄ�n 0x62CD:pÄ�i,bó 0x62CE:lÄ«n,lÄ«ng 0x62CF:ná 0x62D0:guÇŽi 0x62D1:qián 0x62D2:jù,jÇ” 0x62D3:tà,zhí,tuò 0x62D4:bá,bÅ�,bié,fá,bèi 0x62D5:tuÅ� 0x62D6:tuÅ�,chÇ� 0x62D7:ÇŽo,ào,niù,yù 0x62D8:jÅ«,gÅ�u,jÇ”,jú 0x62D9:zhuÅ� 0x62DA:pàn,biàn,fèn,fÄ�n,pÄ«n 0x62DB:zhÄ�o,qiáo,sháo 0x62DC:bài 0x62DD:bài 0x62DE:dÇ� 0x62DF:nÇ� 0x62E0:jù 0x62E1:kuò 0x62E2:lÇ’ng 0x62E3:jiÇŽn 0x62E4:qiá 0x62E5:yÅ�ng 0x62E6:lán 0x62E7:níng,nÇ�ng,nìng 0x62E8:bÅ� 0x62E9:zé,zhái 0x62EA:qiÄ�n 0x62EB:hén 0x62EC:kuò,guÄ� 0x62ED:shì 0x62EE:jié,jiá 0x62EF:zhÄ›ng 0x62F0:nÇ�n 0x62F1:gÇ’ng,jú 0x62F2:gÇ’ng 0x62F3:quán 0x62F4:shuÄ�n,quán 0x62F5:cún,zùn 0x62F6:zÄ�,zÇŽn 0x62F7:kÇŽo 0x62F8:yí,chÇ�,hài 0x62F9:xié 0x62FA:cè,sè,chuò 0x62FB:huÄ« 0x62FC:pÄ«n,bìng 0x62FD:zhuÄ�i,yè,zhuài 0x62FE:shí,shè,jiè 0x62FF:ná 0x6300:bÄ�i 0x6301:chí 0x6302:guà 0x6303:zhì,dié 0x6304:kuò,guÄ�ng 0x6305:duÇ’,duò 0x6306:duÇ’ 0x6307:zhÇ�,zhÄ«,zhí 0x6308:qiè,qì,jiá,qià,shì 0x6309:àn 0x630A:nòng 0x630B:zhèn 0x630C:gé,hé 0x630D:jiào,jiÄ�o 0x630E:kuà,kÅ«,kÅ�u 0x630F:dòng 0x6310:ná,rú,nú 0x6311:tiÄ�o,tiÇŽo,táo,diào,tiáo,tiao 0x6312:liè 0x6313:zhÄ� 0x6314:lÇš 0x6315:dié,shè 0x6316:wÄ� 0x6317:jué 0x6318:liÄ› 0x6319:jÇ” 0x631A:zhì 0x631B:luán 0x631C:yà 0x631D:wÅ�,zhuÄ� 0x631E:tà 0x631F:xié,jiÄ� 0x6320:náo 0x6321:dÇŽng,dàng 0x6322:jiÇŽo 0x6323:zhÄ“ng,zhèng 0x6324:jÇ� 0x6325:huÄ« 0x6326:xián 0x6327:yÇ” 0x6328:Ä�i,ái 0x6329:tuÅ� 0x632A:nuó 0x632B:cuò,zuò 0x632C:bó 0x632D:gÄ›ng 0x632E:tÇ�,tì 0x632F:zhèn,zhÄ“n,zhÄ›n 0x6330:chéng 0x6331:sÄ�,shÄ�,suÅ� 0x6332:sÄ�,suÅ�,shÄ� 0x6333:kÄ“ng 0x6334:mÄ›i 0x6335:nòng 0x6336:jÅ« 0x6337:péng 0x6338:jiÇŽn 0x6339:yì 0x633A:tÇ�ng,tíng 0x633B:shÄ�n,yán 0x633C:ruá,ruó,suÄ«,luò 0x633D:wÇŽn 0x633E:xié,jiÄ� 0x633F:chÄ� 0x6340:féng 0x6341:jiÇŽo,kù 0x6342:wÇ”,wú 0x6343:jùn 0x6344:jiù,jÅ«,qiú 0x6345:tÇ’ng 0x6346:kÇ”n,hún 0x6347:huò,chì 0x6348:tú,shÅ«,chá 0x6349:zhuÅ� 0x634A:póu,pÅ�u,fÅ« 0x634B:lÇš,luÅ� 0x634C:bÄ�,bié 0x634D:hàn,xiàn,gÇŽn 0x634E:shÄ�o,shÇŽo,xiÄ�o,qiào,shào 0x634F:niÄ“ 0x6350:juÄ�n,yuán 0x6351:zè 0x6352:shù,sÅ�u,sÇ’ng 0x6353:yé,yú 0x6354:jué,zhuó 0x6355:bÇ” 0x6356:wán,guÄ� 0x6357:bù,pú,zhì 0x6358:zùn 0x6359:yè 0x635A:zhÄ�i 0x635B:lÇš 0x635C:sÅ�u 0x635D:tuÅ�,shuì,yÇŽn 0x635E:lÄ�o 0x635F:sÇ”n 0x6360:bÄ�ng 0x6361:jiÇŽn 0x6362:huàn 0x6363:dÇŽo 0x6364:wÄ›i 0x6365:wàn,wÄ�n,wÇŽn,yù 0x6366:qín 0x6367:pÄ›ng,fèng 0x6368:shÄ› 0x6369:liè,lì 0x636A:mín 0x636B:mén 0x636C:fÇ”,fù,bÇ” 0x636D:bÇŽi,bÄ�,bÇ� 0x636E:jù,jÅ« 0x636F:dáo,dÇŽo 0x6370:wÇ’,luò,luÇ’ 0x6371:ái,Ä�i 0x6372:juÇŽn,quán,juàn 0x6373:yuè 0x6374:zÇ’ng 0x6375:chÄ“n,tiÇŽn,niÇŽn 0x6376:chuí,duÇ’ 0x6377:jié,qiè,chÄ� 0x6378:tÅ« 0x6379:bèn 0x637A:nà 0x637B:niÇŽn,niÄ“,niÄ�n 0x637C:ruó,wÅ�,wÄ›i,ré 0x637D:zuó,cù,sÅ«,zùn 0x637E:wò,xiá 0x637F:qÄ« 0x6380:xiÄ�n,hén 0x6381:chéng 0x6382:diÄ�n 0x6383:sÇŽo,sào 0x6384:lÅ«n,lún 0x6385:qìng 0x6386:gÄ�ng,gàng 0x6387:duÅ�,duó,zhuÅ� 0x6388:shòu 0x6389:diào,nuó 0x638A:póu,pÇ’u,fù,péi 0x638B:dÇ�,dì 0x638C:zhÇŽng 0x638D:hùn 0x638E:jÇ�,yÇ� 0x638F:tÄ�o,táo 0x6390:qiÄ� 0x6391:qí 0x6392:pái,bài,pÇŽi 0x6393:shÅ« 0x6394:qiÄ�n,wàn 0x6395:líng 0x6396:yÄ“,yè 0x6397:yà,yÇŽ 0x6398:jué,kÅ« 0x6399:zhÄ“ng 0x639A:liÇŽng 0x639B:guà 0x639C:yì,nÇ�,nái,niè 0x639D:huò,xù 0x639E:shàn,yàn,yÇŽn 0x639F:zhÄ›ng,dìng 0x63A0:lüè,lüě 0x63A1:cÇŽi 0x63A2:tàn,xián 0x63A3:chè 0x63A4:bÄ«ng 0x63A5:jiÄ“,xié,shà,chÄ� 0x63A6:tì 0x63A7:kòng,kÅ�ng,qiÄ�ng 0x63A8:tuÄ« 0x63A9:yÇŽn,yàn 0x63AA:cuò,zé,cì 0x63AB:zhÅ�u,zÅ�u,chÅ�u 0x63AC:jÅ« 0x63AD:tiàn 0x63AE:qián 0x63AF:kèn 0x63B0:bÄ�i 0x63B1:pá,shÇ’u 0x63B2:jiÄ“ 0x63B3:lÇ” 0x63B4:guÄ�i,guó 0x63B5:ming 0x63B6:jié 0x63B7:zhì,zhÄ« 0x63B8:dÇŽn,shàn 0x63B9:meng 0x63BA:càn,chÄ�n,shÇŽn 0x63BB:sÄ�o 0x63BC:guàn 0x63BD:pèng 0x63BE:yuàn,chuán 0x63BF:nuò 0x63C0:jiÇŽn 0x63C1:zhÄ“ng,kÄ“ng 0x63C2:jiÅ«,yóu 0x63C3:jiÇŽn,jiÄ�n,qiÄ�n 0x63C4:yú,chÅ�u,yóu,shÅ«,yáo 0x63C5:yán 0x63C6:kuí 0x63C7:nÇŽn 0x63C8:hÅ�ng,hóng,xuàn,jÅ« 0x63C9:róu 0x63CA:pì,chè 0x63CB:wÄ“i 0x63CC:sÄ�i,cÄ�i 0x63CD:zòu,còu 0x63CE:xuÄ�n 0x63CF:miáo,mào 0x63D0:tí,chí,shí,dÇ�,dÄ« 0x63D1:niÄ“ 0x63D2:chÄ�,zhÇŽ 0x63D3:shì 0x63D4:zÇ’ng,sÅ�ng 0x63D5:zhèn,zhÄ“n 0x63D6:yÄ«,jí 0x63D7:xún 0x63D8:yóng,huáng 0x63D9:biÄ�n,biàn 0x63DA:yáng 0x63DB:huàn 0x63DC:yÇŽn 0x63DD:zÇŽn,zuàn 0x63DE:ÇŽn,yàn,yè 0x63DF:xÅ«,jÅ« 0x63E0:yà 0x63E1:wò,òu 0x63E2:ké,qiÄ� 0x63E3:chuÄ�i,chuÇŽi,duÇ’,zhuÄ«,tuán,chuài 0x63E4:jí 0x63E5:tì,dì 0x63E6:lá,là 0x63E7:là 0x63E8:chén 0x63E9:kÄ�i,jiá 0x63EA:jiÅ« 0x63EB:jiÅ« 0x63EC:tú 0x63ED:jiÄ“,qì,hé 0x63EE:huÄ«,hún 0x63EF:gèn 0x63F0:chòng,dÇ’ng 0x63F1:xiÄ�o,shuò,xiÄ�n 0x63F2:dié,shé,yè 0x63F3:xiÄ“,xiè,xié,jiá 0x63F4:yuán,huàn 0x63F5:qián,jiàn,jiÇŽn 0x63F6:yé 0x63F7:chÄ� 0x63F8:zhÄ� 0x63F9:bÄ“i 0x63FA:yáo 0x63FB:wÄ“i 0x63FC:beng 0x63FD:lÇŽn 0x63FE:wèn,wù 0x63FF:qìn 0x6400:chÄ�n 0x6401:gÄ“,gé 0x6402:lÇ’u,lÅ�u 0x6403:zÇ’ng 0x6404:gèn 0x6405:jiÇŽo 0x6406:gòu,gÅ�u 0x6407:qìn 0x6408:róng 0x6409:què,huÅ� 0x640A:chÅ�u,zÇ’u,zhÅ« 0x640B:chuÄ�i,chÇ�,yí 0x640C:zhÇŽn 0x640D:sÇ”n 0x640E:sÅ«n 0x640F:bó 0x6410:chù 0x6411:róng,náng,nÇŽng 0x6412:bàng,péng,bÄ“ng,bÇŽng 0x6413:cuÅ�,cuÇ’,chÄ�i 0x6414:sÄ�o,sào 0x6415:kÄ“,è 0x6416:yáo 0x6417:dÇŽo 0x6418:zhÄ« 0x6419:nù,nuò,nòu 0x641A:lÄ�,xié,xiàn 0x641B:jiÄ�n,lián 0x641C:sÅ�u,xiÄ�o,sòu,shÇŽo 0x641D:qiÇ” 0x641E:gÇŽo,qiÄ�o,kào 0x641F:xiÇŽn,xiÄ�n 0x6420:shuò 0x6421:sÇŽng 0x6422:jìn 0x6423:miè 0x6424:è,yì 0x6425:chuí,duÄ« 0x6426:nuò 0x6427:shÄ�n 0x6428:tà,dá 0x6429:zhÇŽ,jié 0x642A:táng 0x642B:pán,bÄ�n,pó 0x642C:bÄ�n,sù 0x642D:dÄ�,tà 0x642E:lì 0x642F:tÄ�o 0x6430:hú,kÅ« 0x6431:zhì,nái 0x6432:wÄ�,wÇŽ,wà 0x6433:huá,xiá,qiÄ� 0x6434:qiÄ�n 0x6435:wèn 0x6436:qiÇŽng,qiÄ�ng,qiàng,chéng,chÄ“ng 0x6437:tián,shÄ“n 0x6438:zhÄ“n 0x6439:è 0x643A:xié 0x643B:nuò 0x643C:quán 0x643D:chá 0x643E:zhà 0x643F:gé 0x6440:wÇ” 0x6441:èn 0x6442:shè 0x6443:káng 0x6444:shè 0x6445:shÅ« 0x6446:bÇŽi 0x6447:yáo 0x6448:bìn 0x6449:sÅ�u 0x644A:tÄ�n 0x644B:sà,shÇŽi,shÄ� 0x644C:chÇŽn,sùn 0x644D:suÅ� 0x644E:jiÅ«,liú,liáo,jiÇŽo,náo 0x644F:chÅ�ng 0x6450:chuÄ�ng 0x6451:guÄ�i,guó 0x6452:bÇ�ng,bìng 0x6453:féng,pÄ›ng 0x6454:shuÄ�i 0x6455:dì,tú,zhí 0x6456:qì,chá 0x6457:sÅ�u,sÇ’ng 0x6458:zhÄ�i 0x6459:liÇŽn,liàn 0x645A:chÄ“ng 0x645B:chÄ« 0x645C:guàn 0x645D:lù 0x645E:luò 0x645F:lÇ’u,lÅ�u 0x6460:zÇ’ng 0x6461:gài,xì 0x6462:hù,chÅ« 0x6463:zhÄ�,zhuÄ� 0x6464:chuÇŽng 0x6465:tàng 0x6466:huà 0x6467:cuÄ«,zuì,cuò 0x6468:nái,zhì 0x6469:mó,mí,mÄ� 0x646A:jiÄ�ng,qiàng 0x646B:guÄ« 0x646C:yÇ�ng 0x646D:zhí 0x646E:áo,qiÄ�o 0x646F:zhì 0x6470:niè,chè 0x6471:màn,mán 0x6472:chàn,cán 0x6473:kÅ�u,Å�u 0x6474:chÅ«,chÄ« 0x6475:shè,sù,mí 0x6476:tuán,zhuàn,zhuÄ�n 0x6477:jiÇŽo,chÄ�o 0x6478:mÅ�,mó 0x6479:mó,mÅ� 0x647A:zhé,lÄ�,xié 0x647B:càn,shÇŽn,shÄ�n,chÄ�n,sÄ“n 0x647C:kÄ“ng,qiÄ�n 0x647D:biÄ�o,piÄ�o,biào,pÄ�o 0x647E:jiàng 0x647F:yáo 0x6480:gòu 0x6481:qiÄ�n,qiàn 0x6482:liào 0x6483:jÄ« 0x6484:yÄ«ng 0x6485:juÄ“,juè,jué,guì 0x6486:piÄ“ 0x6487:piÄ“,biÄ“,piÄ› 0x6488:lÄ�o 0x6489:dÅ«n 0x648A:xiàn 0x648B:ruán,ruí,rún,ruó,suÄ« 0x648C:guì 0x648D:zÇŽn,zÄ�n,zÄ“n,qián 0x648E:yì 0x648F:xián,xún 0x6490:chÄ“ng 0x6491:chÄ“ng 0x6492:sÄ�,sÇŽ 0x6493:náo,xiÄ�o,rào 0x6494:hòng 0x6495:sÄ«,xÄ« 0x6496:hàn,qiÇŽn 0x6497:guàng 0x6498:dÄ� 0x6499:zÇ”n 0x649A:niÇŽn 0x649B:lÇ�n 0x649C:zhÄ›ng,chéng 0x649D:huÄ«,wéi 0x649E:zhuàng 0x649F:jiÇŽo,jiÄ�o,kÇŽo 0x64A0:jÇ� 0x64A1:cÄ�o 0x64A2:dÇŽn,tàn,dàn,xín 0x64A3:dÇŽn,dàn,chán,tÄ�n,zhÇŽn,shàn,tián 0x64A4:chè 0x64A5:bÅ�,fá 0x64A6:chÄ› 0x64A7:juÄ“ 0x64A8:fÇ”,xiÄ�o,sÅ�u 0x64A9:liÄ�o,liáo,liÇŽo,lào,liào 0x64AA:bèn 0x64AB:fÇ”,mó 0x64AC:qiào 0x64AD:bÅ�,bÇ’ 0x64AE:cuÅ�,zuì,zuÄ�n,chuÄ�,zuÇ’ 0x64AF:zhuó 0x64B0:zhuàn,xuÇŽn,suàn 0x64B1:wÄ›i,tuÇ’ 0x64B2:pÅ«,bÇ” 0x64B3:qìn 0x64B4:dÅ«n 0x64B5:niÇŽn 0x64B6:huá 0x64B7:xié 0x64B8:lÅ« 0x64B9:jiÇŽo 0x64BA:cuÄ�n 0x64BB:tà 0x64BC:hàn 0x64BD:qiào,yÄ�o,jÄ« 0x64BE:wÅ�,zhuÄ� 0x64BF:jiÇŽn,liàn 0x64C0:gÇŽn 0x64C1:yÅ�ng 0x64C2:léi,lèi,lÄ“i 0x64C3:nÇŽng 0x64C4:lÇ” 0x64C5:shàn 0x64C6:zhuó 0x64C7:zé,zhái,yì 0x64C8:pÅ« 0x64C9:chuò 0x64CA:jÄ«,jì,xí 0x64CB:dÇŽng,dàng 0x64CC:sè 0x64CD:cÄ�o 0x64CE:qíng 0x64CF:qíng,jÇ�ng,jìng 0x64D0:huàn,juÇŽn,xuÄ�n 0x64D1:jiÄ“ 0x64D2:qín 0x64D3:kuÇŽi 0x64D4:dÄ�n,dàn,shàn 0x64D5:xié 0x64D6:kÄ�,qiÄ�,jiÄ�,zhá,guÄ�,yè,gÄ“,liè 0x64D7:pÇ�,bò 0x64D8:bÄ�i,bò 0x64D9:ào 0x64DA:jù 0x64DB:yè 0x64DC:è 0x64DD:mÄ“ng 0x64DE:sÇ’u,sòu 0x64DF:mí 0x64E0:jÇ� 0x64E1:tái 0x64E2:zhuó 0x64E3:dÇŽo,chóu 0x64E4:xÇ�ng 0x64E5:lÇŽn 0x64E6:cÄ� 0x64E7:jÇ” 0x64E8:yé 0x64E9:rÇ”,nÇ”,rù,nòu,ruán 0x64EA:yè 0x64EB:yè 0x64EC:nÇ� 0x64ED:wò,huò,hù 0x64EE:jié 0x64EF:bìn 0x64F0:níng,nÇ�ng,nìng 0x64F1:gÄ“,gé 0x64F2:zhì,zhÄ« 0x64F3:zhì,jié 0x64F4:kuò,tÇŽng,guàng 0x64F5:mó 0x64F6:jiàn 0x64F7:xié 0x64F8:liè,là 0x64F9:tÄ�n 0x64FA:bÇŽi 0x64FB:sÇ’u,sòu 0x64FC:lÇ”,lÅ« 0x64FD:lüè,lì,yuè 0x64FE:rÇŽo 0x64FF:tÄ«,zhì,zhÄ�i 0x6500:pÄ�n 0x6501:yÇŽng 0x6502:lèi 0x6503:cÄ�,sÇŽ 0x6504:shÅ«,lù 0x6505:zÇŽn 0x6506:niÇŽn 0x6507:xiÇŽn 0x6508:jùn,pèi 0x6509:huÅ�,huò,què 0x650A:lì 0x650B:là,lài 0x650C:huÇŽn 0x650D:yíng 0x650E:lú,luó 0x650F:lÇ’ng 0x6510:qiÄ�n 0x6511:qiÄ�n 0x6512:zÇŽn,cuán 0x6513:qiÄ�n 0x6514:lán 0x6515:xiÄ�n,jiÄ�n 0x6516:yÄ«ng 0x6517:méi 0x6518:rÇŽng,ràng,níng,xiÇŽng 0x6519:chÄ�n,shàn 0x651A:wÄ›ng 0x651B:cuÄ�n 0x651C:xié 0x651D:shè,zhé,niè,shà 0x651E:luó,luÇ’ 0x651F:jùn 0x6520:mí,mó 0x6521:chÄ« 0x6522:zÇŽn,cuán,zuÄ�n,zàn 0x6523:luán,liàn 0x6524:tÄ�n,nàn 0x6525:zuàn 0x6526:lì,shài 0x6527:diÄ�n 0x6528:wÄ� 0x6529:dÇŽng,tÇŽng 0x652A:jiÇŽo 0x652B:jué 0x652C:lÇŽn 0x652D:lì,luÇ’ 0x652E:nÇŽng 0x652F:zhÄ«,zhì,qí 0x6530:guì 0x6531:guÇ�,guì 0x6532:qÄ«,jÄ« 0x6533:xún 0x6534:pÅ« 0x6535:pÅ« 0x6536:shÅ�u 0x6537:kÇŽo 0x6538:yÅ�u 0x6539:gÇŽi 0x653A:yÇ� 0x653B:gÅ�ng 0x653C:gÄ�n,hàn 0x653D:bÄ�n,bÄ«n 0x653E:fàng,fÇŽng,fÄ�ng 0x653F:zhèng,zhÄ“ng 0x6540:pò 0x6541:diÄ�n 0x6542:kòu 0x6543:mÇ�n,fÄ“n 0x6544:wù,móu 0x6545:gù 0x6546:hé 0x6547:cè 0x6548:xiào 0x6549:mÇ� 0x654A:chù,shÅ�u 0x654B:gé 0x654C:dí,huá 0x654D:xù 0x654E:jiào 0x654F:mÇ�n 0x6550:chén 0x6551:jiù,jiÅ« 0x6552:shÄ“n 0x6553:duó 0x6554:yÇ”,yù 0x6555:chì,sÅ�u 0x6556:áo,ào 0x6557:bài 0x6558:xù 0x6559:jiào,jiÄ�o 0x655A:duó 0x655B:liÇŽn 0x655C:niè 0x655D:bì 0x655E:chÇŽng,chèng,zhèng 0x655F:diÇŽn 0x6560:duÅ�,què 0x6561:yì 0x6562:gÇŽn 0x6563:sàn,sÇŽn,sÄ�n 0x6564:kÄ› 0x6565:yàn,jiÇŽo 0x6566:dÅ«n,duÄ«,tuán,diÄ�o,dùn,dào,zhÇ”n,tÅ«n,duì,tún 0x6567:jÄ«,qÇ� 0x6568:tÇ’u 0x6569:xiào,xué 0x656A:duÅ� 0x656B:jiÇŽo,qiÄ�o,jiào 0x656C:jìng 0x656D:yáng 0x656E:xiá 0x656F:mÇ�n 0x6570:shù,shÇ”,shuò 0x6571:ái,zhú 0x6572:qiÄ�o 0x6573:ái 0x6574:zhÄ›ng 0x6575:dí 0x6576:zhèn 0x6577:fÅ« 0x6578:shù,shÇ”,shuò 0x6579:liáo 0x657A:qÅ«,Å�u 0x657B:xiòng 0x657C:yÇ� 0x657D:jiÇŽo 0x657E:shàn 0x657F:jiÇŽo 0x6580:zhuó,zhú 0x6581:yì,dù,tú 0x6582:liÇŽn,lián 0x6583:bì 0x6584:lí,tái 0x6585:xiào,xué 0x6586:xiào 0x6587:wén 0x6588:xué 0x6589:qí 0x658A:qí 0x658B:zhÄ�i 0x658C:bÄ«n 0x658D:jué 0x658E:zhÄ�i 0x658F:láng 0x6590:fÄ›i 0x6591:bÄ�n 0x6592:bÄ�n 0x6593:lán 0x6594:yÇ” 0x6595:lán 0x6596:wÄ›i 0x6597:dòu,dÇ’u,zhÇ” 0x6598:shÄ“ng 0x6599:liào,liáo 0x659A:jiÇŽ 0x659B:hú 0x659C:xié,xiá,chá,yé 0x659D:jiÇŽ 0x659E:yÇ” 0x659F:zhÄ“n 0x65A0:jiào 0x65A1:wò,guÇŽn 0x65A2:tiÇŽo,tÇ’u 0x65A3:dòu 0x65A4:jÄ«n 0x65A5:chì,chè,zhè 0x65A6:yín,zhì 0x65A7:fÇ” 0x65A8:qiÄ�ng 0x65A9:zhÇŽn 0x65AA:qú 0x65AB:zhuó,chuò 0x65AC:zhÇŽn,zhàn 0x65AD:duàn 0x65AE:cuò,zhuó 0x65AF:sÄ«,shÇ� 0x65B0:xÄ«n 0x65B1:zhuó 0x65B2:zhuó 0x65B3:qín,jÇ�n 0x65B4:lín 0x65B5:zhuó 0x65B6:chù 0x65B7:duàn 0x65B8:zhÇ”,zhú 0x65B9:fÄ�ng,fáng,fÇŽng,páng,wÇŽng,fÄ“ng 0x65BA:chÇŽn,jiè 0x65BB:háng 0x65BC:yú,wÅ«,yÅ« 0x65BD:shÄ«,yì,shÇ� 0x65BE:pèi 0x65BF:yóu,liú 0x65C0:mèi 0x65C1:páng,pÄ“ng,bÄ“ng,bàng 0x65C2:qí 0x65C3:zhÄ�n 0x65C4:máo,mào,wù 0x65C5:lÇš 0x65C6:pèi 0x65C7:pÄ«,bì 0x65C8:liú 0x65C9:fÅ« 0x65CA:fÇŽng 0x65CB:xuán,xuàn 0x65CC:jÄ«ng 0x65CD:jÄ«ng 0x65CE:nÇ� 0x65CF:zú,sÇ’u,còu,zòu 0x65D0:zhào 0x65D1:yÇ� 0x65D2:liú 0x65D3:shÄ�o 0x65D4:jiàn 0x65D5:yú 0x65D6:yÇ� 0x65D7:qí 0x65D8:zhì 0x65D9:fÄ�n 0x65DA:piÄ�o 0x65DB:fÄ�n 0x65DC:zhÄ�n 0x65DD:kuài 0x65DE:suì 0x65DF:yú 0x65E0:wú,mó 0x65E1:jì 0x65E2:jì,xì 0x65E3:jì 0x65E4:huò 0x65E5:rì 0x65E6:dàn 0x65E7:jiù 0x65E8:zhÇ� 0x65E9:zÇŽo 0x65EA:xié 0x65EB:tiÄ�o 0x65EC:xún,jÅ«n 0x65ED:xù 0x65EE:gÄ�,xù 0x65EF:lá 0x65F0:gàn,hàn 0x65F1:hàn 0x65F2:tái,yÄ«ng 0x65F3:dì 0x65F4:xÅ« 0x65F5:chÇŽn 0x65F6:shí 0x65F7:kuàng 0x65F8:yáng 0x65F9:shí 0x65FA:wàng 0x65FB:mín 0x65FC:mín 0x65FD:tÅ«n,zhùn 0x65FE:chÅ«n 0x65FF:wÇ”,wù 0x6600:yún 0x6601:bèi 0x6602:áng,yàng 0x6603:zè 0x6604:bÇŽn 0x6605:jié 0x6606:kÅ«n,hún,kùn 0x6607:shÄ“ng 0x6608:hù 0x6609:fÇŽng 0x660A:hào 0x660B:guì,jiÇ’ng 0x660C:chÄ�ng,chàng 0x660D:xuÄ�n 0x660E:míng,mèng 0x660F:hÅ«n,hùn 0x6610:fÄ“n 0x6611:qÇ�n 0x6612:hÅ« 0x6613:yì 0x6614:xÄ«,cuò 0x6615:xÄ«n,xuÄ�n 0x6616:yán 0x6617:zè 0x6618:fÇŽng 0x6619:tán,yù 0x661A:shèn 0x661B:jù 0x661C:yáng 0x661D:zÇŽn 0x661E:bÇ�ng,fÇŽng 0x661F:xÄ«ng 0x6620:yìng,yÇŽng 0x6621:xuàn 0x6622:pò,pèi 0x6623:zhÄ›n 0x6624:líng 0x6625:chÅ«n,chÇ”n 0x6626:hào 0x6627:mèi,wÄ›n,mò 0x6628:zuó 0x6629:mò 0x662A:biàn 0x662B:xù,xiÇ’ng 0x662C:hÅ«n 0x662D:zhÄ�o,zhào 0x662E:zòng 0x662F:shì,tí 0x6630:shì,xià 0x6631:yù 0x6632:fèi 0x6633:dié,diè,yì 0x6634:mÇŽo 0x6635:nì,nÇ�,zhì 0x6636:chÇŽng 0x6637:wÄ“n 0x6638:dÅ�ng 0x6639:ÇŽi 0x663A:bÇ�ng 0x663B:áng 0x663C:zhòu 0x663D:lóng 0x663E:xiÇŽn 0x663F:kuàng 0x6640:tiÇŽo 0x6641:cháo,zhÄ�o,chào 0x6642:shí 0x6643:huÇŽng,huàng 0x6644:huÇŽng 0x6645:xuÇŽn,xuÄ�n 0x6646:kuí 0x6647:xÅ«,kuÄ� 0x6648:jiÇŽo 0x6649:jìn 0x664A:zhì 0x664B:jìn 0x664C:shÇŽng 0x664D:tóng 0x664E:hÇ’ng 0x664F:yàn 0x6650:gÄ�i 0x6651:xiÇŽng 0x6652:shài 0x6653:xiÇŽo 0x6654:yè 0x6655:yÅ«n,yùn 0x6656:huÄ« 0x6657:hán 0x6658:hàn 0x6659:jùn 0x665A:wÇŽn 0x665B:xiàn 0x665C:kÅ«n 0x665D:zhòu 0x665E:xÄ« 0x665F:chéng,shèng,jÄ«ng 0x6660:shèng 0x6661:bÅ« 0x6662:zhé,zhì 0x6663:zhé 0x6664:wù 0x6665:wÇŽn 0x6666:huì 0x6667:hào 0x6668:chén 0x6669:wÇŽn 0x666A:tiÇŽn 0x666B:zhuó 0x666C:zuì 0x666D:zhÇ’u 0x666E:pÇ” 0x666F:jÇ�ng,yÇ�ng 0x6670:xÄ« 0x6671:shÇŽn 0x6672:nÇ� 0x6673:xÄ« 0x6674:qíng 0x6675:qÇ�,dù 0x6676:jÄ«ng 0x6677:guÇ� 0x6678:zhÄ›ng 0x6679:yì 0x667A:zhì,zhÄ« 0x667B:àn,ÇŽn,yÇŽn 0x667C:wÇŽn 0x667D:lín 0x667E:liàng 0x667F:chÄ�ng 0x6680:wÇŽng,wàng 0x6681:xiÇŽo 0x6682:zàn 0x6683:fÄ“i 0x6684:xuÄ�n 0x6685:gèng,xuÇŽn 0x6686:yí 0x6687:xiá,xià,jiÇŽ 0x6688:yÅ«n,yùn 0x6689:huÄ« 0x668A:xÇ” 0x668B:mÇ�n,mín 0x668C:kuí 0x668D:yÄ“ 0x668E:yìng 0x668F:shÇ”,dÇ” 0x6690:wÄ›i 0x6691:shÇ” 0x6692:qíng 0x6693:mào 0x6694:nán 0x6695:jiÇŽn,lán 0x6696:nuÇŽn,xuÄ�n 0x6697:àn 0x6698:yáng 0x6699:chÅ«n 0x669A:yáo 0x669B:suÇ’ 0x669C:pÇ” 0x669D:míng 0x669E:jiÇŽo 0x669F:kÇŽi 0x66A0:gÇŽo,hào 0x66A1:wÄ›ng 0x66A2:chàng 0x66A3:qì 0x66A4:hào 0x66A5:yàn 0x66A6:lì 0x66A7:ài,nuÇŽn 0x66A8:jì,jiè 0x66A9:jì 0x66AA:mèn 0x66AB:zàn 0x66AC:xiè 0x66AD:hào 0x66AE:mù 0x66AF:mò 0x66B0:cÅ�ng 0x66B1:nì 0x66B2:zhÄ�ng 0x66B3:huì 0x66B4:bào,pù,bó 0x66B5:hàn 0x66B6:xuán 0x66B7:chuán 0x66B8:liáo 0x66B9:xiÄ�n 0x66BA:tÇŽn 0x66BB:jÇ�ng 0x66BC:piÄ“ 0x66BD:lín 0x66BE:tÅ«n 0x66BF:xÇ�,xÄ« 0x66C0:yì 0x66C1:jì 0x66C2:huàng 0x66C3:dài 0x66C4:yè 0x66C5:yè 0x66C6:lì 0x66C7:tán 0x66C8:tóng 0x66C9:xiÇŽo 0x66CA:fèi 0x66CB:shÄ›n 0x66CC:zhào 0x66CD:hào 0x66CE:yì 0x66CF:xiÇŽng,xiàng,shÇŽng 0x66D0:xÄ«ng 0x66D1:shÄ“n 0x66D2:jiÇŽo 0x66D3:bào 0x66D4:jìng 0x66D5:yàn 0x66D6:ài 0x66D7:yè 0x66D8:rú 0x66D9:shÇ” 0x66DA:méng 0x66DB:xÅ«n 0x66DC:yào 0x66DD:pù 0x66DE:lì 0x66DF:chén 0x66E0:kuàng 0x66E1:dié 0x66E2:liÇŽo 0x66E3:yàn 0x66E4:huò 0x66E5:lú 0x66E6:xÄ« 0x66E7:róng 0x66E8:lóng 0x66E9:nÇŽng 0x66EA:luÇ’ 0x66EB:luán 0x66EC:shài 0x66ED:tÇŽng 0x66EE:yÇŽn 0x66EF:zhú 0x66F0:yuÄ“ 0x66F1:yuÄ“ 0x66F2:qÅ«,qÇ” 0x66F3:yè 0x66F4:gèng,gÄ“ng 0x66F5:yè 0x66F6:hÅ« 0x66F7:hé,è,hè 0x66F8:shÅ« 0x66F9:cáo 0x66FA:cáo 0x66FB:shÄ“ng 0x66FC:màn 0x66FD:cÄ“ng 0x66FE:céng,zÄ“ng 0x66FF:tì 0x6700:zuì,cuÅ� 0x6701:cÇŽn,qián,jiàn 0x6702:xù 0x6703:huì,kuài,kuò 0x6704:yÇ�n 0x6705:qiè 0x6706:fÄ“n 0x6707:pí 0x6708:yuè,rù 0x6709:yÇ’u,yòu,wÄ›i 0x670A:ruÇŽn,wÇŽn 0x670B:péng 0x670C:fén,bÄ�n 0x670D:fú,fù,bì,bó 0x670E:líng 0x670F:fÄ›i,kÅ« 0x6710:qú,xÅ«,xù,chÇ”n 0x6711:tì 0x6712:nÇœ 0x6713:tiÇŽo,tiào,yóu 0x6714:shuò 0x6715:zhèn 0x6716:lÇŽng 0x6717:lÇŽng 0x6718:zuÄ«,juÄ�n 0x6719:míng 0x671A:huÄ�ng,máng,wáng,mèng 0x671B:wàng 0x671C:tÅ«n 0x671D:cháo,zhÄ�o,zhÅ« 0x671E:jÄ«,qÄ« 0x671F:qÄ«,jÄ« 0x6720:yÄ«ng 0x6721:zÅ�ng 0x6722:wàng 0x6723:tóng,chuáng 0x6724:lÇŽng 0x6725:láo 0x6726:méng,mÇŽng 0x6727:lóng,lÇ’ng 0x6728:mù 0x6729:dÄ›ng 0x672A:wèi 0x672B:mò,me 0x672C:bÄ›n,bÄ“n 0x672D:zhá,yà 0x672E:shù,zhú 0x672F:shù,shú,zhú 0x6730:mù 0x6731:zhÅ«,shÅ« 0x6732:rén 0x6733:bÄ� 0x6734:pÇ”,pò,pÅ«,pÅ�,piáo 0x6735:duÇ’ 0x6736:duÇ’ 0x6737:dÄ�o,mù,tiáo 0x6738:lì 0x6739:guÇ�,qiú 0x673A:jÄ«,wèi 0x673B:jiÅ« 0x673C:bÇ� 0x673D:xiÇ” 0x673E:chéng,zhÄ“ng,chÄ“ng,tÄ«ng 0x673F:cì 0x6740:shÄ� 0x6741:rù 0x6742:zá,duÇ’ 0x6743:quán 0x6744:qiÄ�n 0x6745:yú,wÅ« 0x6746:gÄ�n,gàn,gÇŽn 0x6747:wÅ« 0x6748:chÄ�,chà 0x6749:shÄ�n,shÄ� 0x674A:xún 0x674B:fán 0x674C:wù,wò 0x674D:zÇ� 0x674E:lÇ� 0x674F:xìng 0x6750:cái 0x6751:cÅ«n 0x6752:rèn,ér 0x6753:biÄ�o,sháo,shuó,dí,zhuó 0x6754:tuÅ�,zhé 0x6755:dì,duò 0x6756:zhàng 0x6757:máng 0x6758:chì 0x6759:yì 0x675A:gài,gé 0x675B:gÅ�ng 0x675C:dù,dÇ”,tú 0x675D:lí,zhì,yí,tuò,duò 0x675E:qÇ� 0x675F:shù 0x6760:gÄ�ng,gÅ�ng,gàng 0x6761:tiáo 0x6762:jiang 0x6763:mián 0x6764:wàn 0x6765:lái 0x6766:jiÇ” 0x6767:máng 0x6768:yáng 0x6769:mà 0x676A:miÇŽo 0x676B:sì,zhÇ�,xÇ� 0x676C:yuán,yuàn 0x676D:háng,kàng,kÄ�ng 0x676E:fèi,bèi 0x676F:bÄ“i 0x6770:jié 0x6771:dÅ�ng 0x6772:gÇŽo 0x6773:yÇŽo 0x6774:xiÄ�n,qiÄ�n 0x6775:chÇ” 0x6776:chÅ«n 0x6777:pá,bà 0x6778:shÅ«,duì 0x6779:huà 0x677A:xÄ«n 0x677B:chÇ’u,niÇ” 0x677C:zhù,shù 0x677D:chÇ’u 0x677E:sÅ�ng 0x677F:bÇŽn 0x6780:sÅ�ng 0x6781:jí 0x6782:wò,yuè 0x6783:jìn 0x6784:gòu 0x6785:jÄ« 0x6786:máo 0x6787:pí,bÇ�,bì,pÄ« 0x6788:bì,pÄ« 0x6789:wÇŽng,kuáng 0x678A:àng 0x678B:fÄ�ng,fÇŽng,bÇ�ng 0x678C:fén 0x678D:yì 0x678E:fú,fÅ« 0x678F:nán 0x6790:xÄ«,sÄ« 0x6791:hù 0x6792:yÄ�,yÄ“,yá,yà 0x6793:dÇ’u,zhÇ” 0x6794:xín 0x6795:zhÄ›n,chén 0x6796:yÄ�o,yÇŽo 0x6797:lín 0x6798:ruì,nèn 0x6799:Ä›,è 0x679A:méi 0x679B:zhào 0x679C:guÇ’,luÇ’,guàn 0x679D:zhÄ«,qí 0x679E:cÅ�ng,zÅ�ng 0x679F:yùn 0x67A0:zui 0x67A1:shÄ“ng 0x67A2:shÅ« 0x67A3:zÇŽo 0x67A4:dì 0x67A5:lì 0x67A6:lú 0x67A7:jiÇŽn 0x67A8:chéng 0x67A9:sÅ�ng 0x67AA:qiÄ�ng 0x67AB:fÄ“ng 0x67AC:zhÄ�n 0x67AD:xiÄ�o 0x67AE:xiÄ�n,zhÄ“n 0x67AF:kÅ«,gÅ« 0x67B0:píng 0x67B1:tái,sì,cí 0x67B2:xÇ� 0x67B3:zhÇ�,zhÄ« 0x67B4:guÇŽi 0x67B5:xiÄ�o 0x67B6:jià 0x67B7:jiÄ�,jià 0x67B8:gÇ’u,jÇ”,gÅ�u,qú 0x67B9:bÄ�o,fú 0x67BA:mò 0x67BB:yì,xiè 0x67BC:yè 0x67BD:yè 0x67BE:shì 0x67BF:niè 0x67C0:bÇ� 0x67C1:duò,tuó,tuÇ’ 0x67C2:yí,duò,lí 0x67C3:líng 0x67C4:bÇ�ng 0x67C5:nÇ�,chì 0x67C6:lÄ� 0x67C7:hé 0x67C8:bàn,pán,pàn 0x67C9:fán 0x67CA:zhÅ�ng 0x67CB:dài 0x67CC:cí 0x67CD:yÇŽng,yàng,yÄ«ng 0x67CE:fÅ«,fÇ”,fù 0x67CF:bÇŽi,bó,bò 0x67D0:mÇ’u,méi 0x67D1:gÄ�n,qián 0x67D2:qÄ« 0x67D3:rÇŽn 0x67D4:róu 0x67D5:mào 0x67D6:sháo,shào 0x67D7:sÅ�ng 0x67D8:zhè 0x67D9:xiá,jiÇŽ 0x67DA:yòu,yóu,zhóu 0x67DB:shÄ“n 0x67DC:guì,jÇ” 0x67DD:tuò 0x67DE:zhà,zuò,zé 0x67DF:nán,rán 0x67E0:níng,chÇ”,zhù 0x67E1:yÇ’ng 0x67E2:dÇ�,dì,chí 0x67E3:zhì,dié 0x67E4:zhÄ�,zÇ”,zÅ« 0x67E5:chá,zhÄ�,chái 0x67E6:dàn 0x67E7:gÅ« 0x67E8:bù,pÅ« 0x67E9:jiù 0x67EA:Ä�o,ào 0x67EB:fú 0x67EC:jiÇŽn 0x67ED:bÄ�,fú,bó,biÄ“,pèi 0x67EE:duò,zuó,wù 0x67EF:kÄ“ 0x67F0:nài 0x67F1:zhù,zhÇ” 0x67F2:bì,bié 0x67F3:liÇ” 0x67F4:chái,cÄ«,zhài,zì 0x67F5:shÄ�n,zhà 0x67F6:sì 0x67F7:chù,zhù 0x67F8:pÄ“i,bÄ“i 0x67F9:shì,fèi 0x67FA:guÇŽi 0x67FB:zhÄ� 0x67FC:yÇŽo 0x67FD:chÄ“ng,jué 0x67FE:jiù 0x67FF:shì 0x6800:zhÄ« 0x6801:liÇ” 0x6802:méi 0x6803:lì 0x6804:róng 0x6805:zhà,shÄ�n,cè 0x6806:zÇŽo 0x6807:biÄ�o 0x6808:zhàn 0x6809:zhì 0x680A:lóng 0x680B:dòng 0x680C:lú 0x680D:shÄ“ng 0x680E:lì,yuè 0x680F:lán 0x6810:yÇ’ng 0x6811:shù 0x6812:xún,sÇ”n 0x6813:shuÄ�n,shuàn,quán 0x6814:qì 0x6815:zhÄ“n 0x6816:qÄ«,xÄ« 0x6817:lì,liè 0x6818:yí 0x6819:xiáng 0x681A:zhèn 0x681B:lì 0x681C:sè,cì 0x681D:guÄ�,tiÇŽn,kuò 0x681E:kÄ�n 0x681F:bÄ“n,bÄ«ng 0x6820:rÄ›n 0x6821:xiào,jiào,jiÇŽo,qiÄ�o 0x6822:bÇŽi 0x6823:rÄ›n 0x6824:bìng 0x6825:zÄ« 0x6826:chóu 0x6827:yì 0x6828:cì 0x6829:xÇ”,yÇ” 0x682A:zhÅ« 0x682B:jiàn,zùn 0x682C:zuì 0x682D:ér 0x682E:Ä›r 0x682F:yÇ’u,yù 0x6830:fá 0x6831:gÇ’ng 0x6832:kÇŽo 0x6833:lÇŽo 0x6834:zhÄ�n 0x6835:liè 0x6836:yÄ«n 0x6837:yàng,yáng 0x6838:hé,gÄ�i,kài,hú 0x6839:gÄ“n 0x683A:yì,zhÄ«,zhÇ� 0x683B:shì 0x683C:gé,luò,hè,gÄ“ 0x683D:zÄ�i,zài 0x683E:luán 0x683F:fú 0x6840:jié 0x6841:héng,háng,hàng 0x6842:guì 0x6843:táo,tiÄ�o,zhào 0x6844:guÄ�ng,guàng 0x6845:wéi,guÇ� 0x6846:kuÄ�ng,kuàng,kuáng 0x6847:rú 0x6848:àn 0x6849:Ä�n,àn 0x684A:juàn,quÄ�n 0x684B:yí,tí 0x684C:zhuÅ� 0x684D:kÅ« 0x684E:zhì 0x684F:qióng 0x6850:tóng,tÅ�ng,dòng 0x6851:sÄ�ng 0x6852:sÄ�ng 0x6853:huán 0x6854:jú,jié,xié 0x6855:jiù 0x6856:xuè 0x6857:duò 0x6858:zhuì 0x6859:yú,móu 0x685A:zÇŽn 0x685C:yÄ«ng 0x685D:jié 0x685E:liÇ” 0x685F:zhàn 0x6860:yÄ� 0x6861:ráo 0x6862:zhÄ“n 0x6863:dàng 0x6864:qÄ« 0x6865:qiáo 0x6866:huà 0x6867:guì,huì 0x6868:jiÇŽng 0x6869:zhuÄ�ng 0x686A:xún 0x686B:suÅ� 0x686C:shÄ� 0x686D:zhÄ“n,chén,zhèn 0x686E:bÄ“i 0x686F:tÄ«ng,yíng 0x6870:kuò 0x6871:jìng 0x6872:po,bó 0x6873:bèn 0x6874:fú 0x6875:ruí 0x6876:tÇ’ng 0x6877:jué 0x6878:xÄ« 0x6879:láng 0x687A:liÇ” 0x687B:fÄ“ng,fèng 0x687C:qÄ« 0x687D:wÄ›n 0x687E:jÅ«n 0x687F:gÇŽn,hàn 0x6880:sù,yìn 0x6881:liáng 0x6882:qiú 0x6883:tÇ�ng,tìng 0x6884:yÇ’u 0x6885:méi 0x6886:bÄ�ng 0x6887:lòng 0x6888:pÄ“ng 0x6889:zhuÄ�ng 0x688A:dì 0x688B:xuÄ�n,juÄ�n,xié 0x688C:tú,chá,tÅ« 0x688D:zào 0x688E:Ä�o,yòu 0x688F:gù,jué 0x6890:bì 0x6891:dí 0x6892:hán 0x6893:zÇ� 0x6894:zhÄ« 0x6895:rèn 0x6896:bèi 0x6897:gÄ›ng 0x6898:jiÇŽn,xiàn,jiàn 0x6899:huàn 0x689A:wÇŽn 0x689B:nuó 0x689C:jiÄ� 0x689D:tiáo,tiÄ�o 0x689E:jì 0x689F:xiÄ�o 0x68A0:lÇš 0x68A1:hún,kuÇŽn 0x68A2:shÄ�o,shào,xiÄ�o,sào 0x68A3:cén 0x68A4:fén 0x68A5:sÅ�ng 0x68A6:mèng 0x68A7:wú,wù,yÇ” 0x68A8:lí 0x68A9:lí,sì,qÇ� 0x68AA:dòu 0x68AB:qÇ�n,qÄ«n 0x68AC:yÇ�ng 0x68AD:suÅ�,xùn 0x68AE:jÅ« 0x68AF:tÄ«,tí 0x68B0:xiè 0x68B1:kÇ”n,hún 0x68B2:zhuó 0x68B3:shÅ« 0x68B4:chÄ�n 0x68B5:fàn 0x68B6:wÄ›i 0x68B7:jìng 0x68B8:lí 0x68B9:bÄ«n,bÄ«ng 0x68BA:xià 0x68BB:fó 0x68BC:táo 0x68BD:zhì 0x68BE:lái 0x68BF:lián 0x68C0:jiÇŽn 0x68C1:zhuÅ�,tuÅ�,ruì 0x68C2:líng 0x68C3:lí 0x68C4:qì 0x68C5:bÇ�ng 0x68C6:lún 0x68C7:cÅ�ng,sÅ�ng 0x68C8:qiàn 0x68C9:mián 0x68CA:qí 0x68CB:qí,jÄ« 0x68CC:cài 0x68CD:gùn,hùn,Ä�o,gÇ”n 0x68CE:chán 0x68CF:dé,zhé 0x68D0:fÄ›i,féi 0x68D1:pái,bèi,pèi 0x68D2:bàng 0x68D3:bàng,pÇ’u,bèi,péi,bÄ“i 0x68D4:hÅ«n 0x68D5:zÅ�ng 0x68D6:chéng,cháng 0x68D7:zÇŽo 0x68D8:jí 0x68D9:lì,liè 0x68DA:péng 0x68DB:yù 0x68DC:yù 0x68DD:gù 0x68DE:jùn 0x68DF:dòng 0x68E0:táng 0x68E1:gÄ�ng 0x68E2:wÇŽng 0x68E3:dì,tì,dài 0x68E4:cuò 0x68E5:fán 0x68E6:chÄ“ng 0x68E7:zhàn,zhÇŽn,chén 0x68E8:qÇ� 0x68E9:yuÄ�n 0x68EA:yÇŽn,yàn 0x68EB:yù 0x68EC:quÄ�n,juàn,quán 0x68ED:yì 0x68EE:sÄ“n 0x68EF:rÄ›n,shÄ›n 0x68F0:chuí,duÇ’ 0x68F1:léng,lèng,lÄ“ng,líng,chÄ“ng 0x68F2:qÄ«,xÄ« 0x68F3:zhuÅ� 0x68F4:fú,sù 0x68F5:kÄ“,kuÇŽn,kÄ› 0x68F6:lái 0x68F7:zÅ�u,sÇ’u 0x68F8:zÅ�u 0x68F9:zhào,zhuÅ� 0x68FA:guÄ�n,guàn 0x68FB:fÄ“n 0x68FC:fén,fèn,fÄ“n 0x68FD:shÄ“n,chÄ“n 0x68FE:qíng 0x68FF:ní,niè 0x6900:wÇŽn 0x6901:guÇ’ 0x6902:lù 0x6903:háo 0x6904:jiÄ“,jié,qiè 0x6905:yÇ�,yÄ« 0x6906:chóu,zhòu,diÄ�o 0x6907:jÇ” 0x6908:jú 0x6909:chéng,shèng 0x690A:zuó,cuì 0x690B:liáng 0x690C:qiÄ�ng,kÅ�ng 0x690D:zhí 0x690E:chuí,zhuÄ« 0x690F:yÄ�,Ä› 0x6910:jÅ« 0x6911:bÄ“i,pí,bì,pái 0x6912:jiÄ�o 0x6913:zhuó 0x6914:zÄ« 0x6915:bÄ«n 0x6916:péng 0x6917:dìng 0x6918:chÇ” 0x6919:chÄ�ng 0x691A:mÄ“n 0x691B:huÄ� 0x691C:jiÇŽn 0x691D:guÄ« 0x691E:xì 0x691F:dú 0x6920:qiàn 0x6921:dào 0x6922:guì 0x6923:diÇŽn 0x6924:luó 0x6925:zhÄ« 0x6926:quan 0x6927:mìng 0x6928:fÇ” 0x6929:gÄ“ng 0x692A:pèng 0x692B:shàn 0x692C:yí 0x692D:tuÇ’ 0x692E:sÄ“n 0x692F:duÇ’,chuán 0x6930:yÄ“ 0x6931:fù 0x6932:wÄ›i,huÄ« 0x6933:wÄ“i 0x6934:duàn 0x6935:jiÇŽ,jiÄ� 0x6936:zÅ�ng 0x6937:jiÄ�n,hán 0x6938:yí 0x6939:shèn,zhÄ“n 0x693A:xí 0x693B:yàn,yà 0x693C:yÇŽn 0x693D:chuán 0x693E:jiÄ�n,zhàn 0x693F:chÅ«n 0x6940:yÇ” 0x6941:hé 0x6942:zhÄ�,chá 0x6943:wò 0x6944:pián 0x6945:bÄ« 0x6946:yÄ�o 0x6947:huò,guÅ�,kuÇŽ 0x6948:xÅ« 0x6949:ruò 0x694A:yáng 0x694B:là 0x694C:yán 0x694D:bÄ›n 0x694E:huÄ« 0x694F:kuí 0x6950:jiè 0x6951:kuí 0x6952:sÄ« 0x6953:fÄ“ng,fán 0x6954:xiÄ“,xiè 0x6955:tuÇ’ 0x6956:zhì,jí 0x6957:jiàn,jiÇŽn 0x6958:mù 0x6959:mào 0x695A:chÇ” 0x695B:hù,kÇ” 0x695C:hú 0x695D:liàn 0x695E:léng,lèng 0x695F:tíng 0x6960:nán 0x6961:yú 0x6962:yóu,yÇ’u 0x6963:méi,mÄ›i 0x6964:sÇ’ng,cÅ�ng 0x6965:xuàn,yuán 0x6966:xuàn 0x6967:yÇŽng 0x6968:zhÄ“n 0x6969:pián 0x696A:yè,dié 0x696B:jí 0x696C:jié,qià 0x696D:yè 0x696E:chÇ”,zhÅ« 0x696F:dùn,shÇ”n,chÅ«n 0x6970:yú 0x6971:zòu,cÅ�u 0x6972:wÄ“i 0x6973:méi 0x6974:tì,dÇ�,shì 0x6975:jí,jÇ� 0x6976:jié 0x6977:kÇŽi,jiè,jiÄ“ 0x6978:qiÅ« 0x6979:yíng 0x697A:rÇ’u,ròu 0x697B:huáng 0x697C:lóu 0x697D:lè 0x697E:quán 0x697F:xiÄ�ng 0x6980:pÇ�n 0x6981:shÇ� 0x6982:gài,guì,jié 0x6983:tán 0x6984:lÇŽn 0x6985:wÄ“n,yùn 0x6986:yú 0x6987:chèn 0x6988:lǘ 0x6989:jÇ” 0x698A:shén 0x698B:chu 0x698C:bÄ« 0x698D:xiè 0x698E:jiÇŽ 0x698F:yì 0x6990:zhÇŽn,chÇŽn,niàn,zhèn 0x6991:fú,fù,bó 0x6992:nuò 0x6993:mì 0x6994:láng,lÇŽng 0x6995:róng 0x6996:gÇ” 0x6997:jiàn,jìn 0x6998:jÇ” 0x6999:tÄ� 0x699A:yÇŽo 0x699B:zhÄ“n 0x699C:bÇŽng,bÄ“ng,bàng,páng,péng 0x699D:shÄ�,xiè 0x699E:yuán 0x699F:zÇ� 0x69A0:míng 0x69A1:sù 0x69A2:jià 0x69A3:yáo 0x69A4:jié 0x69A5:huàng 0x69A6:gàn,hán 0x69A7:fÄ›i 0x69A8:zhà 0x69A9:qián 0x69AA:mà,mÇŽ 0x69AB:sÇ”n 0x69AC:yuán 0x69AD:xiè 0x69AE:róng 0x69AF:shí 0x69B0:zhÄ« 0x69B1:cuÄ« 0x69B2:wÄ“n 0x69B3:tíng 0x69B4:liú 0x69B5:róng 0x69B6:táng 0x69B7:què 0x69B8:zhÄ�i 0x69B9:sÄ« 0x69BA:shèng 0x69BB:tà 0x69BC:kÄ“ 0x69BD:xÄ« 0x69BE:gÇ” 0x69BF:qÄ« 0x69C0:gÇŽo,kào 0x69C1:gÇŽo,kào,gÄ�o 0x69C2:sÅ«n 0x69C3:pán 0x69C4:tÄ�o 0x69C5:gé 0x69C6:chÅ«n 0x69C7:diÄ�n,zhÄ›n,zhÄ“n 0x69C8:nòu 0x69C9:jí 0x69CA:shuò 0x69CB:gòu,jué 0x69CC:chuí,zhuì,duÄ« 0x69CD:qiÄ�ng,chÄ“ng,qiÇŽng 0x69CE:chá 0x69CF:qiÇŽn,xiàn,lián 0x69D0:huái 0x69D1:méi 0x69D2:xù 0x69D3:gàng 0x69D4:gÄ�o 0x69D5:zhuÅ� 0x69D6:tuó 0x69D7:qiáo 0x69D8:yàng 0x69D9:diÄ�n 0x69DA:jiÇŽ 0x69DB:kÇŽn,jiàn 0x69DC:zuì 0x69DD:dÇŽo 0x69DE:lóng 0x69DF:bÄ«n,bÄ«ng 0x69E0:zhÅ« 0x69E1:sÄ�ng 0x69E2:xí,dié 0x69E3:jÄ«,guÄ« 0x69E4:lián,liÇŽn 0x69E5:huì 0x69E6:yÅ�ng 0x69E7:qiàn 0x69E8:guÇ’ 0x69E9:gài 0x69EA:gài 0x69EB:tuán,shuàn,quán 0x69EC:huà 0x69ED:qÄ«,zú,sè 0x69EE:sÄ“n,shÄ›n 0x69EF:cuÄ«,zuÇ� 0x69F0:péng 0x69F1:yÇ’u,chÇŽo 0x69F2:hú 0x69F3:jiÇŽng,jiÄ�ng 0x69F4:hù 0x69F5:huàn 0x69F6:guì 0x69F7:niè,xiè,yì 0x69F8:yì 0x69F9:gÄ�o 0x69FA:kÄ�ng 0x69FB:guÄ« 0x69FC:guÄ« 0x69FD:cáo,zÄ�o 0x69FE:màn,wàn,mán 0x69FF:jÇ�n,qín 0x6A00:dí,zhí,zhé,dÄ« 0x6A01:zhuÄ�ng,chÅ�ng 0x6A02:lè,yuè,yào,luò,liáo 0x6A03:lÇŽng 0x6A04:chén 0x6A05:cÅ�ng,zÅ�ng 0x6A06:lí,chÄ« 0x6A07:xiÅ« 0x6A08:qíng 0x6A09:shuÇŽng 0x6A0A:fán,fàn 0x6A0B:tÅ�ng 0x6A0C:guàn 0x6A0D:zé 0x6A0E:sù 0x6A0F:lÄ›i,léi 0x6A10:lÇ” 0x6A11:liáng 0x6A12:mì 0x6A13:lóu,lǘ 0x6A14:cháo,chÄ�o,jiÇŽo 0x6A15:sù 0x6A16:kÄ“ 0x6A17:chÅ« 0x6A18:táng,chÄ“ng 0x6A19:biÄ�o,biào 0x6A1A:lù,dú 0x6A1B:jiÅ«,liáo 0x6A1C:zhè 0x6A1D:zhÄ� 0x6A1E:shÅ«,Å�u 0x6A1F:zhÄ�ng 0x6A20:mán,lÇŽng 0x6A21:mó,mú 0x6A22:niÇŽo,mù 0x6A23:yàng,xiàng 0x6A24:tiáo 0x6A25:péng 0x6A26:zhù 0x6A27:shÄ� 0x6A28:xÄ« 0x6A29:quán 0x6A2A:héng,hèng,guÄ�ng,guàng,huáng,huàng 0x6A2B:jiÄ�n 0x6A2C:cÅ�ng 0x6A2D:jÄ« 0x6A2E:yÄ�n 0x6A2F:qiáng 0x6A30:xuÄ› 0x6A31:yÄ«ng 0x6A32:èr,zhì 0x6A33:xún 0x6A34:zhí,yì 0x6A35:qiáo 0x6A36:zuÄ« 0x6A37:cóng 0x6A38:pÇ”,pú 0x6A39:shù 0x6A3A:huà 0x6A3B:kuì 0x6A3C:zhÄ“n 0x6A3D:zÅ«n 0x6A3E:yuè 0x6A3F:shàn 0x6A40:xÄ« 0x6A41:chÅ«n 0x6A42:diàn 0x6A43:fá,fèi 0x6A44:gÇŽn 0x6A45:mó 0x6A46:wÇ”,wú 0x6A47:qiÄ�o 0x6A48:ráo,náo 0x6A49:lìn 0x6A4A:liú 0x6A4B:qiáo,jiÄ�o,jiào,qiÄ�o,jiÇŽo 0x6A4C:xiàn 0x6A4D:rùn 0x6A4E:fán 0x6A4F:zhÇŽn,jiÇŽn 0x6A50:tuó,dù,luò 0x6A51:lÇŽo 0x6A52:yún 0x6A53:shùn 0x6A54:dÅ«n,tuí 0x6A55:chÄ“ng 0x6A56:táng,chÄ“ng 0x6A57:méng 0x6A58:jú 0x6A59:chéng,dèng,chén 0x6A5A:sù,xiÄ�o,qiÅ« 0x6A5B:jué 0x6A5C:jué 0x6A5D:diàn,tán,xín 0x6A5E:huì 0x6A5F:jÄ« 0x6A60:nuÇ’,nuó 0x6A61:xiàng 0x6A62:tuÇ’,duÇ’ 0x6A63:nÇ�ng 0x6A64:ruÇ� 0x6A65:zhÅ« 0x6A66:tóng,chuáng,zhÅ�ng,chÅ�ng 0x6A67:zÄ“ng,céng 0x6A68:fén,fèn,fèi 0x6A69:qióng 0x6A6A:rÇŽn,yÄ�n 0x6A6B:héng 0x6A6C:qián,qín 0x6A6D:gÅ« 0x6A6E:liÇ” 0x6A6F:lào 0x6A70:gÄ�o 0x6A71:chú 0x6A72:xÇ� 0x6A73:shèng 0x6A74:zÇ� 0x6A75:san 0x6A76:jí 0x6A77:dÅ�u 0x6A78:jÄ«ng 0x6A79:lÇ” 0x6A7A:jian 0x6A7B:chu 0x6A7C:yuán 0x6A7D:tà 0x6A7E:shÅ«,qiÄ�o,sÄ�o 0x6A7F:jiÄ�ng 0x6A80:tán,shàn 0x6A81:lÇ�n 0x6A82:nóng 0x6A83:yÇ�n 0x6A84:xí 0x6A85:huì 0x6A86:shÄ�n 0x6A87:zuì 0x6A88:xuán 0x6A89:chÄ“ng 0x6A8A:gàn 0x6A8B:jú 0x6A8C:zuì 0x6A8D:yì 0x6A8E:qín 0x6A8F:pÇ” 0x6A90:yán,dÄ�n 0x6A91:léi,lèi 0x6A92:fÄ“ng 0x6A93:huÇ� 0x6A94:dàng,dÄ�ng 0x6A95:jì 0x6A96:suì 0x6A97:bò,bì 0x6A98:píng,bò 0x6A99:chéng 0x6A9A:chÇ” 0x6A9B:zhuÄ� 0x6A9C:guì,kuài,huì 0x6A9D:jí 0x6A9E:jiÄ›,xiè 0x6A9F:jiÇŽ 0x6AA0:qíng,jìng 0x6AA1:zhái,shì,tú 0x6AA2:jiÇŽn 0x6AA3:qiáng 0x6AA4:dào 0x6AA5:yÇ� 0x6AA6:biÇŽo 0x6AA7:sÅ�ng 0x6AA8:shÄ“ 0x6AA9:lÇ�n 0x6AAA:lì 0x6AAB:chá,sà 0x6AAC:méng 0x6AAD:yín 0x6AAE:táo,chóu,dào 0x6AAF:tái 0x6AB0:mián 0x6AB1:qí 0x6AB2:tuán 0x6AB3:bÄ«n,bÄ«ng 0x6AB4:huò,huà 0x6AB5:jì 0x6AB6:qiÄ�n 0x6AB7:nÇ�,mí 0x6AB8:níng 0x6AB9:yÄ« 0x6ABA:gÇŽo 0x6ABB:kÇŽn,jiàn 0x6ABC:yìn 0x6ABD:nòu,ruÇŽn,rú 0x6ABE:qÇ�ng 0x6ABF:yÇŽn 0x6AC0:qí 0x6AC1:mì 0x6AC2:zhào,dí 0x6AC3:guì 0x6AC4:chÅ«n 0x6AC5:jÄ«,jì 0x6AC6:kuí 0x6AC7:pó 0x6AC8:dèng 0x6AC9:chú 0x6ACA:gé 0x6ACB:mián 0x6ACC:yÅ�u 0x6ACD:zhì 0x6ACE:huÇŽng,guàng,guÇ’,gÇ” 0x6ACF:qiÄ�n 0x6AD0:lÄ›i 0x6AD1:léi,lÄ›i 0x6AD2:sà 0x6AD3:lÇ” 0x6AD4:lì 0x6AD5:cuán 0x6AD6:lÇœ,chÅ« 0x6AD7:miè,mèi 0x6AD8:huì 0x6AD9:Å�u 0x6ADA:lǘ 0x6ADB:zhì 0x6ADC:gÄ�o 0x6ADD:dú 0x6ADE:yuán 0x6ADF:lì,luò,yuè 0x6AE0:fèi 0x6AE1:zhuó,zhù 0x6AE2:sÇ’u 0x6AE3:lián 0x6AE4:jiàng 0x6AE5:chú 0x6AE6:qìng 0x6AE7:zhÅ« 0x6AE8:lú,lǘ 0x6AE9:yán,yÇŽn 0x6AEA:lì 0x6AEB:zhÅ« 0x6AEC:chèn,qìn,guàn 0x6AED:jié,jì 0x6AEE:è 0x6AEF:sÅ« 0x6AF0:huái,guÄ« 0x6AF1:niè 0x6AF2:yù 0x6AF3:lóng 0x6AF4:lài 0x6AF5:jiao 0x6AF6:xiÇŽn 0x6AF7:guÄ« 0x6AF8:jÇ” 0x6AF9:xiÄ�o,qiÅ«,xiÅ« 0x6AFA:líng 0x6AFB:yÄ«ng 0x6AFC:jiÄ�n,shÄ�n 0x6AFD:yÇ�n 0x6AFE:yóu,yòu 0x6AFF:yíng 0x6B00:xiÄ�ng,ràng 0x6B01:nóng 0x6B02:bó 0x6B03:chán,zhàn 0x6B04:lán,liàn 0x6B05:jÇ” 0x6B06:shuÄ�ng 0x6B07:shè 0x6B08:wéi,zuì 0x6B09:cóng 0x6B0A:quán,guàn 0x6B0B:qú 0x6B0C:cáng 0x6B0D:jiù 0x6B0E:yù 0x6B0F:luó,luÇ’ 0x6B10:lì,lÇ� 0x6B11:cuán,zuàn 0x6B12:luán 0x6B13:dÇŽng,tÇŽng 0x6B14:jué 0x6B15:yán 0x6B16:lÇŽn 0x6B17:lán 0x6B18:zhú 0x6B19:léi,luÇ’ 0x6B1A:lÇ� 0x6B1B:bà 0x6B1C:náng 0x6B1D:yù 0x6B1E:líng 0x6B1F:guang 0x6B20:qiàn 0x6B21:cì,zÄ«,cí 0x6B22:huÄ�n 0x6B23:xÄ«n 0x6B24:yú 0x6B25:yì,huÄ�n,yù 0x6B26:qiÄ�n,hÄ�n,xiÄ�n,qián 0x6B27:Å�u 0x6B28:xÅ« 0x6B29:chÄ�o 0x6B2A:chù,xì,qù 0x6B2B:qì 0x6B2C:kài,ài 0x6B2D:yì,yÄ«n 0x6B2E:jué 0x6B2F:xì,kài 0x6B30:xù 0x6B31:hÄ“,xiá 0x6B32:yù 0x6B33:kuì 0x6B34:láng 0x6B35:kuÇŽn 0x6B36:shuò,sòu 0x6B37:xÄ« 0x6B38:Ä�i,ÇŽi,xiè,ế,éi,ê̌,Ä›i,á»�,èi,ê̄,Ä“i 0x6B39:yÄ« 0x6B3A:qÄ« 0x6B3B:chuÄ�,xÅ« 0x6B3C:chÇ�,chuài 0x6B3D:qÄ«n,qìn,yín 0x6B3E:kuÇŽn,xÄ«n 0x6B3F:kÇŽn,qiàn,dàn 0x6B40:kuÇŽn 0x6B41:kÇŽn,kè,qiÇŽn 0x6B42:chuÇŽn,chuán 0x6B43:shà,xiá 0x6B44:guÄ� 0x6B45:yÄ«n 0x6B46:xÄ«n 0x6B47:xiÄ“,yà 0x6B48:yú 0x6B49:qiàn 0x6B4A:xiÄ�o 0x6B4B:yè 0x6B4C:gÄ“ 0x6B4D:wÅ«,yÄ�ng 0x6B4E:tàn 0x6B4F:jìn,qÅ«n 0x6B50:Å�u,Ç’u 0x6B51:hÅ« 0x6B52:tì,xiÄ�o 0x6B53:huÄ�n 0x6B54:xÅ« 0x6B55:pÄ“n 0x6B56:xÇ�,yÇ� 0x6B57:xiào 0x6B58:chuÄ�,xÅ« 0x6B59:shè,xÄ«,xié 0x6B5A:shàn 0x6B5B:hÄ�n,liÇŽn 0x6B5C:chù 0x6B5D:yì 0x6B5E:è 0x6B5F:yú 0x6B60:chuò 0x6B61:huÄ�n 0x6B62:zhÇ� 0x6B63:zhèng,zhÄ“ng 0x6B64:cÇ� 0x6B65:bù 0x6B66:wÇ” 0x6B67:qí 0x6B68:bù 0x6B69:bù 0x6B6A:wÄ�i,wÇŽi 0x6B6B:jù 0x6B6C:qián 0x6B6D:chí,zhì 0x6B6E:sè 0x6B6F:chÇ� 0x6B70:sè,shà 0x6B71:zhÇ’ng 0x6B72:suì,suò 0x6B73:suì 0x6B74:lì 0x6B75:zé 0x6B76:yú 0x6B77:lì 0x6B78:guÄ«,kuì,kuí 0x6B79:dÇŽi,è,dÄ�i 0x6B7A:è 0x6B7B:sÇ� 0x6B7C:jiÄ�n 0x6B7D:zhé 0x6B7E:mò,wÄ›n 0x6B7F:mò 0x6B80:yÄ�o 0x6B81:mò,wÄ›n 0x6B82:cú 0x6B83:yÄ�ng 0x6B84:tiÇŽn 0x6B85:shÄ“ng 0x6B86:dài 0x6B87:shÄ�ng 0x6B88:xù 0x6B89:xùn 0x6B8A:shÅ« 0x6B8B:cán 0x6B8C:jué 0x6B8D:piÇŽo,bì 0x6B8E:qià 0x6B8F:qiú 0x6B90:sù 0x6B91:qíng,jÄ«ng,jìng 0x6B92:yÇ”n 0x6B93:liàn 0x6B94:yì 0x6B95:fÇ’u,yè,bó 0x6B96:zhí,shì,shi 0x6B97:yè,yàn,yÄ�n 0x6B98:cán 0x6B99:hÅ«n,mèn 0x6B9A:dÄ�n 0x6B9B:jí 0x6B9C:dié 0x6B9D:zhÄ“n 0x6B9E:yÇ”n 0x6B9F:wÄ“n 0x6BA0:chòu 0x6BA1:bìn 0x6BA2:tì 0x6BA3:jìn 0x6BA4:shÄ�ng 0x6BA5:yín 0x6BA6:diÄ�o 0x6BA7:jiù 0x6BA8:huì,kuì 0x6BA9:cuàn 0x6BAA:yì 0x6BAB:dÄ�n 0x6BAC:dù 0x6BAD:jiÄ�ng 0x6BAE:liàn 0x6BAF:bìn 0x6BB0:dú 0x6BB1:jiÄ�n 0x6BB2:jiÄ�n 0x6BB3:shÅ« 0x6BB4:Å�u 0x6BB5:duàn 0x6BB6:zhù 0x6BB7:yÄ«n,yÇ�n,yÄ�n 0x6BB8:qìng,kÄ“ng,shÄ“ng 0x6BB9:yì 0x6BBA:shÄ�,shài,sà,xiè,shì 0x6BBB:qiào 0x6BBC:ké,qiào 0x6BBD:xiáo,yáo,xiào 0x6BBE:xùn 0x6BBF:diàn 0x6BC0:huÇ� 0x6BC1:huÇ�,huì 0x6BC2:gÇ”,gÅ« 0x6BC3:qiÄ�o 0x6BC4:jÄ« 0x6BC5:yì 0x6BC6:Å�u,kÅ�u,qÅ« 0x6BC7:huÇ� 0x6BC8:duàn 0x6BC9:yÄ« 0x6BCA:xiÄ�o 0x6BCB:wú,móu 0x6BCC:guàn 0x6BCD:mÇ”,mú,wÇ”,wú 0x6BCE:mÄ›i 0x6BCF:mÄ›i 0x6BD0:ÇŽi 0x6BD1:jiÄ› 0x6BD2:dú,dài 0x6BD3:yù 0x6BD4:bÇ�,bì,pí,pÇ� 0x6BD5:bì 0x6BD6:bì 0x6BD7:pí 0x6BD8:pí 0x6BD9:bì 0x6BDA:chán 0x6BDB:máo,mào 0x6BDC:háo 0x6BDD:cÇŽi 0x6BDE:pí 0x6BDF:liÄ› 0x6BE0:jiÄ� 0x6BE1:zhÄ�n 0x6BE2:sÄ�i 0x6BE3:mù,mào 0x6BE4:tuò 0x6BE5:xún,xùn 0x6BE6:Ä›r 0x6BE7:róng 0x6BE8:xiÇŽn 0x6BE9:jú 0x6BEA:mú 0x6BEB:háo 0x6BEC:qiú 0x6BED:dòu,nuò 0x6BEE:shÄ� 0x6BEF:tÇŽn 0x6BF0:péi 0x6BF1:jú 0x6BF2:duÅ� 0x6BF3:cuì,qiÄ�o,xiÄ� 0x6BF4:bÄ« 0x6BF5:sÄ�n 0x6BF6:sÄ�n 0x6BF7:mào 0x6BF8:sÄ�i,suÄ« 0x6BF9:shÅ«,yú 0x6BFA:shÅ« 0x6BFB:tuò 0x6BFC:hé,kÄ›,dÄ� 0x6BFD:jiàn 0x6BFE:tà 0x6BFF:sÄ�n 0x6C00:lǘ,shÅ«,yú,dÅ�u 0x6C01:mú 0x6C02:máo,lí 0x6C03:tóng 0x6C04:rÇ’ng,róng 0x6C05:chÇŽng 0x6C06:pÇ” 0x6C07:lu 0x6C08:zhÄ�n 0x6C09:sào 0x6C0A:zhÄ�n 0x6C0B:méng 0x6C0C:lÇ” 0x6C0D:qú 0x6C0E:dié 0x6C0F:shì,zhÄ«,jÄ«ng 0x6C10:dÄ«,dÇ�,zhÄ« 0x6C11:mín 0x6C12:jué 0x6C13:máng,méng 0x6C14:qì,qÇ� 0x6C15:piÄ“ 0x6C16:nÇŽi 0x6C17:qì 0x6C18:dÄ�o 0x6C19:xiÄ�n 0x6C1A:chuÄ�n 0x6C1B:fÄ“n 0x6C1C:yáng,rì 0x6C1D:nèi 0x6C1E:bin 0x6C1F:fú 0x6C20:shÄ“n 0x6C21:dÅ�ng 0x6C22:qÄ«ng 0x6C23:qì,xì 0x6C24:yÄ«n,yán 0x6C25:xÄ« 0x6C26:hài 0x6C27:yÇŽng 0x6C28:Ä�n 0x6C29:yà 0x6C2A:kè 0x6C2B:qÄ«ng 0x6C2C:yà 0x6C2D:dÅ�ng 0x6C2E:dàn 0x6C2F:lÇœ 0x6C30:qíng 0x6C31:yÇŽng 0x6C32:yÅ«n,yún 0x6C33:yÅ«n 0x6C34:shuÇ� 0x6C35:shui 0x6C36:zhÄ›ng,chéng,zhèng 0x6C37:bÄ«ng 0x6C38:yÇ’ng 0x6C39:dàng 0x6C3A:shuÇ� 0x6C3B:lè 0x6C3C:nì,mèi 0x6C3D:tÇ”n,qiú 0x6C3E:fàn,fán 0x6C3F:guÇ�,qiú,jiÇ” 0x6C40:tÄ«ng,tìng,dìng 0x6C41:zhÄ«,xié,shí 0x6C42:qiú 0x6C43:bÄ«n,pà,pÄ� 0x6C44:zè 0x6C45:miÇŽn 0x6C46:cuÄ�n 0x6C47:huì 0x6C48:diÄ�o 0x6C49:hàn 0x6C4A:chà 0x6C4B:zhuó,yuè,què,shuò 0x6C4C:chuàn 0x6C4D:wán,huán 0x6C4E:fàn,fá 0x6C4F:dà,tài 0x6C50:xÄ« 0x6C51:tuÅ� 0x6C52:máng,mÇŽng 0x6C53:qiú,yóu 0x6C54:qì 0x6C55:shàn,shuàn 0x6C56:pìn,chí 0x6C57:hàn,hán,gÄ�n 0x6C58:qiÄ�n 0x6C59:wÅ«,yú,wÄ�,yÅ« 0x6C5A:wÅ« 0x6C5B:xùn 0x6C5C:sì 0x6C5D:rÇ” 0x6C5E:gÇ’ng 0x6C5F:jiÄ�ng 0x6C60:chí,tuó,chè 0x6C61:wÅ« 0x6C62:tu 0x6C63:jiÇ” 0x6C64:tÄ�ng,shÄ�ng 0x6C65:zhÄ«,jì 0x6C66:zhÇ� 0x6C67:qiÄ�n,yán 0x6C68:mì 0x6C69:gÇ”,yù,hú 0x6C6A:wÄ�ng,wÇŽng,hóng 0x6C6B:jÇ�ng 0x6C6C:jÇ�ng 0x6C6D:ruì,tÅ«n 0x6C6E:jÅ«n 0x6C6F:hóng 0x6C70:tài 0x6C71:quÇŽn,fú 0x6C72:jí,jÄ« 0x6C73:biàn 0x6C74:biàn 0x6C75:gàn,hán,cén 0x6C76:wèn,wén,mín,mén 0x6C77:zhÅ�ng 0x6C78:fÄ�ng,pÄ�ng 0x6C79:xiÅ�ng 0x6C7A:jué,quÄ“,xuè 0x6C7B:hÇ”,huÇŽng 0x6C7C:niú,yóu 0x6C7D:qì,gài,yÇ� 0x6C7E:fén,pén,fÄ“n 0x6C7F:xù 0x6C80:xù 0x6C81:qìn 0x6C82:yí,yín 0x6C83:wò 0x6C84:yún 0x6C85:yuán 0x6C86:hàng,háng,kàng 0x6C87:yÇŽn,wÄ›i 0x6C88:shÄ›n,chén,tán 0x6C89:chén 0x6C8A:dàn 0x6C8B:yóu 0x6C8C:dùn,tún,chún,zhuàn 0x6C8D:hù,hú 0x6C8E:huò 0x6C8F:qÄ«,qiè 0x6C90:mù 0x6C91:nÇœ,niÇ” 0x6C92:méi 0x6C93:dá,tà 0x6C94:miÇŽn 0x6C95:mì,wù,fÅ« 0x6C96:chÅ�ng 0x6C97:pÄ�ng,tiÄ�n 0x6C98:bÇ� 0x6C99:shÄ�,shà,suÅ� 0x6C9A:zhÇ� 0x6C9B:pèi 0x6C9C:pàn 0x6C9D:zhuÇ�,zÇ� 0x6C9E:zÄ� 0x6C9F:gÅ�u 0x6CA0:liú 0x6CA1:méi,mò,me 0x6CA2:zé 0x6CA3:fÄ“ng 0x6CA4:Å�u,òu 0x6CA5:lì 0x6CA6:lún 0x6CA7:cÄ�ng 0x6CA8:fÄ“ng 0x6CA9:wéi 0x6CAA:hù 0x6CAB:mò 0x6CAC:mèi,huì 0x6CAD:shù 0x6CAE:jÇ”,jÅ«,jù,jiÄ�n,zÇ” 0x6CAF:zá 0x6CB0:tuÅ�,duó 0x6CB1:tuó,duò,chí 0x6CB2:tuó 0x6CB3:hé 0x6CB4:lì,zhÄ›n 0x6CB5:mÇ� 0x6CB6:yí,chí,shì 0x6CB7:fÄ� 0x6CB8:fèi,fú 0x6CB9:yóu,yòu 0x6CBA:tián 0x6CBB:zhì,chí 0x6CBC:zhÇŽo 0x6CBD:gÅ«,gÇ” 0x6CBE:zhÄ�n,tiÄ�n,diàn,chÄ�n 0x6CBF:yán,yÇŽn,yàn 0x6CC0:sÄ« 0x6CC1:kuàng 0x6CC2:jiÇ’ng,yíng,yÇ�ng,jiÅ�ng 0x6CC3:jÅ«,gÅ�u 0x6CC4:xiè,yì 0x6CC5:qiú,yÅ�u 0x6CC6:yì,dié 0x6CC7:jiÄ� 0x6CC8:zhÅ�ng 0x6CC9:quán 0x6CCA:pÅ�,bó,pò 0x6CCB:huì,huÇ� 0x6CCC:mì,bì 0x6CCD:bÄ“n,bèn 0x6CCE:zé 0x6CCF:zhú,kÅ« 0x6CD0:lè 0x6CD1:yÅ�u,Ä�o 0x6CD2:gÅ« 0x6CD3:hóng 0x6CD4:gÄ�n,hàn 0x6CD5:fÇŽ 0x6CD6:mÇŽo,liÇ” 0x6CD7:sì 0x6CD8:hÅ« 0x6CD9:píng,pÄ“ng 0x6CDA:cÇ�,zÇ� 0x6CDB:fàn,fÄ›ng,fá 0x6CDC:zhÄ«,chí,zhì 0x6CDD:sù 0x6CDE:nìng,zhù 0x6CDF:chÄ“ng 0x6CE0:líng,lÇ�ng 0x6CE1:pào,pÄ�o,páo 0x6CE2:bÅ�,bÄ“i,bì 0x6CE3:qì,lì,sè 0x6CE4:sì 0x6CE5:ní,nì,nÇ�,niè,nìng 0x6CE6:jú 0x6CE7:sà,xuè 0x6CE8:zhù,zhòu 0x6CE9:shÄ“ng 0x6CEA:lèi 0x6CEB:xuàn,xuán,juÄ�n 0x6CEC:jué,xuè 0x6CED:fú 0x6CEE:pàn 0x6CEF:mÇ�n,miàn 0x6CF0:tài 0x6CF1:yÄ�ng 0x6CF2:jÇ� 0x6CF3:yÇ’ng 0x6CF4:guàn 0x6CF5:bèng,pìn,liú 0x6CF6:xué 0x6CF7:lóng,shuÄ�ng 0x6CF8:lú 0x6CF9:dàn 0x6CFA:luò,pÅ� 0x6CFB:xiè 0x6CFC:pÅ� 0x6CFD:zé 0x6CFE:jÄ«ng 0x6CFF:yín 0x6D00:pán,zhÅ�u 0x6D01:jié,jí 0x6D02:yè 0x6D03:huÄ« 0x6D04:huí,huì 0x6D05:zài 0x6D06:chéng 0x6D07:yÄ«n,yÄ�n,yÄ“ 0x6D08:wéi 0x6D09:hòu 0x6D0A:jiàn,cún 0x6D0B:yáng,xiáng,yÇŽng 0x6D0C:liè 0x6D0D:sì 0x6D0E:jì 0x6D0F:ér 0x6D10:xíng 0x6D11:fú,fù 0x6D12:sÇŽ,xÇ�,xiÇŽn,sÄ›n,cuÇ�,xùn 0x6D13:sè,qì,zì 0x6D14:zhÇ� 0x6D15:yìn 0x6D16:wú 0x6D17:xÇ�,xiÇŽn 0x6D18:kÇŽo,kào 0x6D19:zhÅ« 0x6D1A:jiàng,hóng 0x6D1B:luò 0x6D1C:luò 0x6D1D:àn,yàn,è 0x6D1E:dòng,tóng 0x6D1F:tì 0x6D20:móu 0x6D21:lèi,lÄ›i 0x6D22:yÄ« 0x6D23:mÇ� 0x6D24:quán 0x6D25:jÄ«n 0x6D26:pò 0x6D27:wÄ›i 0x6D28:xiáo 0x6D29:xiè,yì 0x6D2A:hóng 0x6D2B:xù,yì 0x6D2C:sù,shuò 0x6D2D:kuÄ�ng 0x6D2E:táo,yáo,dào 0x6D2F:qiè,jié 0x6D30:jù 0x6D31:Ä›r 0x6D32:zhÅ�u 0x6D33:rù,rú 0x6D34:píng,pÄ“ng 0x6D35:xún,xuàn 0x6D36:xiÅ�ng 0x6D37:zhì 0x6D38:guÄ�ng,huàng 0x6D39:huán 0x6D3A:míng 0x6D3B:huó,guÅ� 0x6D3C:wÄ�,guÄ« 0x6D3D:qià,hé 0x6D3E:pài,mài,bài,pÄ� 0x6D3F:wÅ«,hù 0x6D40:qÅ« 0x6D41:liú 0x6D42:yì 0x6D43:jiÄ� 0x6D44:jìng 0x6D45:qiÇŽn,jiÄ�n 0x6D46:jiÄ�ng,jiàng 0x6D47:jiÄ�o 0x6D48:zhÄ“n 0x6D49:shÄ« 0x6D4A:zhuó 0x6D4B:cè 0x6D4C:fá 0x6D4D:huì,kuài 0x6D4E:jì,jÇ� 0x6D4F:liú 0x6D50:chÇŽn 0x6D51:hún 0x6D52:hÇ”,xÇ” 0x6D53:nóng 0x6D54:xún 0x6D55:jìn 0x6D56:liè 0x6D57:qiú 0x6D58:wÄ›i 0x6D59:zhè 0x6D5A:jùn,xùn,cún 0x6D5B:hán,hàn,gÄ�n 0x6D5C:bÄ�ng,bÄ«n 0x6D5D:máng 0x6D5E:zhuó 0x6D5F:yóu,dí 0x6D60:xÄ« 0x6D61:bó 0x6D62:dòu 0x6D63:huàn 0x6D64:hóng 0x6D65:yì,yà 0x6D66:pÇ” 0x6D67:yÇ�ng,chéng,yíng,zhèng,yìng 0x6D68:lÇŽn 0x6D69:hào,gÇŽo,gé 0x6D6A:làng,láng 0x6D6B:hÇŽn 0x6D6C:lÇ�,hÇŽi 0x6D6D:gÄ“ng 0x6D6E:fú 0x6D6F:wú 0x6D70:liàn 0x6D71:chún 0x6D72:féng,hóng 0x6D73:yì 0x6D74:yù 0x6D75:tóng 0x6D76:láo 0x6D77:hÇŽi 0x6D78:jìn,qÄ«n 0x6D79:jiÄ�,xiá 0x6D7A:chÅ�ng 0x6D7B:jiÇ’ng,jiÅ�ng 0x6D7C:mÄ›i 0x6D7D:suÄ«,nÄ›i 0x6D7E:chÄ“ng 0x6D7F:pèi 0x6D80:xiàn,jiÇŽn 0x6D81:shèn 0x6D82:tú,chú,yé 0x6D83:kùn 0x6D84:pÄ«ng 0x6D85:niè 0x6D86:hàn 0x6D87:jÄ«ng,qÇ�ng 0x6D88:xiÄ�o 0x6D89:shè,dié 0x6D8A:niÇŽn,rÄ›n 0x6D8B:tÅ« 0x6D8C:yÇ’ng,chÅ�ng 0x6D8D:xiào 0x6D8E:xián,yàn,diàn 0x6D8F:tÇ�ng 0x6D90:é 0x6D91:sù,sÅ�u,shù 0x6D92:tÅ«n,yÅ«n 0x6D93:juÄ�n,yuàn,xuàn 0x6D94:cén,qián,zàn 0x6D95:tì 0x6D96:lì 0x6D97:shuì 0x6D98:sì 0x6D99:lèi 0x6D9A:shuì 0x6D9B:tÄ�o 0x6D9C:dú 0x6D9D:lào 0x6D9E:lái 0x6D9F:lián 0x6DA0:wéi 0x6DA1:wÅ�,guÅ� 0x6DA2:yún 0x6DA3:huàn,huì 0x6DA4:dí 0x6DA5:hÄ“ng 0x6DA6:rùn 0x6DA7:jiàn 0x6DA8:zhÇŽng,zhàng 0x6DA9:sè 0x6DAA:fú,póu 0x6DAB:guàn 0x6DAC:xìng 0x6DAD:shòu,tÄ�o 0x6DAE:shuàn,shuÄ� 0x6DAF:yá 0x6DB0:chuò 0x6DB1:zhàng 0x6DB2:yè,shì 0x6DB3:kÅ�ng,náng 0x6DB4:wò,wÇŽn,yuÄ�n 0x6DB5:hán,hàn 0x6DB6:tuÅ�,tuò 0x6DB7:dÅ�ng 0x6DB8:hé 0x6DB9:wÅ� 0x6DBA:jÅ« 0x6DBB:shè 0x6DBC:liáng,liàng 0x6DBD:hÅ«n,hùn 0x6DBE:tà 0x6DBF:zhuÅ�,zhuó 0x6DC0:diàn 0x6DC1:qiè,jí 0x6DC2:dé 0x6DC3:juàn 0x6DC4:zÄ« 0x6DC5:xÄ« 0x6DC6:xiáo 0x6DC7:qí 0x6DC8:gÇ”,hù 0x6DC9:guÇ’,guàn 0x6DCA:yÄ�n,hàn,yÇŽn,hán 0x6DCB:lín,lìn 0x6DCC:tÇŽng,chàng,chÇŽng 0x6DCD:zhÅ�u,diÄ�o 0x6DCE:pÄ›ng 0x6DCF:hào 0x6DD0:chÄ�ng 0x6DD1:shÅ«,chù 0x6DD2:qÄ«,qiàn 0x6DD3:fÄ�ng 0x6DD4:zhí 0x6DD5:lù 0x6DD6:nào,zhào,zhuÅ�,chuò 0x6DD7:jú 0x6DD8:táo 0x6DD9:cóng,shuàng 0x6DDA:lèi,lì 0x6DDB:zhè 0x6DDC:píng,péng 0x6DDD:féi 0x6DDE:sÅ�ng 0x6DDF:tiÇŽn 0x6DE0:pì,pèi 0x6DE1:dàn,yàn,tán 0x6DE2:yù,xù 0x6DE3:ní 0x6DE4:yÅ« 0x6DE5:lù 0x6DE6:gàn,hán 0x6DE7:mì 0x6DE8:jìng,chéng 0x6DE9:líng 0x6DEA:lún,lÇ”n,guÄ�n 0x6DEB:yín,yàn,yáo 0x6DEC:cuì,zú 0x6DED:qú 0x6DEE:huái 0x6DEF:yù 0x6DF0:niÇŽn,shÄ›n,nà 0x6DF1:shÄ“n 0x6DF2:biÄ�o,hÅ«,hÇ” 0x6DF3:chún,zhÅ«n,zhÇ”n 0x6DF4:hÅ« 0x6DF5:yuÄ�n 0x6DF6:lái 0x6DF7:hùn,gÇ”n,hún,kÅ«n 0x6DF8:qÄ«ng 0x6DF9:yÄ�n,yÇŽn 0x6DFA:qiÇŽn,jiÄ�n,jiàn,cán,zàn 0x6DFB:tiÄ�n,tiàn 0x6DFC:miÇŽo 0x6DFD:zhÇ� 0x6DFE:yÇ�n 0x6DFF:bó 0x6E00:bèn,bÄ“n 0x6E01:yuÄ�n 0x6E02:wèn,mín 0x6E03:ruò,rè 0x6E04:fÄ“i 0x6E05:qÄ«ng,qìng 0x6E06:yuÄ�n 0x6E07:kÄ› 0x6E08:jì 0x6E09:shè 0x6E0A:yuÄ�n 0x6E0B:sè 0x6E0C:lù 0x6E0D:zì 0x6E0E:dú 0x6E0F:yÄ« 0x6E10:jiàn,jiÄ�n 0x6E11:miÇŽn,shéng 0x6E12:pài 0x6E13:xÄ« 0x6E14:yú 0x6E15:yuÄ�n 0x6E16:shÄ›n 0x6E17:shèn 0x6E18:róu 0x6E19:huàn 0x6E1A:zhÇ” 0x6E1B:jiÇŽn 0x6E1C:nuÇŽn,nuán 0x6E1D:yú,yÅ« 0x6E1E:qiú,wù 0x6E1F:tíng,tÄ«ng 0x6E20:qú,jù 0x6E21:dù 0x6E22:fán,féng 0x6E23:zhÄ� 0x6E24:bó 0x6E25:wò,òu,wÅ« 0x6E26:wÅ�,guÅ� 0x6E27:dì,tí,dÄ« 0x6E28:wÄ“i 0x6E29:wÄ“n,yùn 0x6E2A:rú 0x6E2B:xiè,dié,zhá,yì,qiè 0x6E2C:cè 0x6E2D:wèi 0x6E2E:hé 0x6E2F:gÇŽng,hòng 0x6E30:yÇŽn 0x6E31:hóng,gòng 0x6E32:xuàn 0x6E33:mÇ� 0x6E34:kÄ›,jié,kài,hé 0x6E35:máo 0x6E36:yÄ«ng 0x6E37:yÇŽn 0x6E38:yóu,liú 0x6E39:hÅ�ng,qìng 0x6E3A:miÇŽo 0x6E3B:shÄ›ng 0x6E3C:mÄ›i 0x6E3D:zÄ�i 0x6E3E:hún,hùn,gÇ”n 0x6E3F:nài 0x6E40:guÇ� 0x6E41:chì 0x6E42:è 0x6E43:pài,bá 0x6E44:méi 0x6E45:liàn,làn 0x6E46:qì 0x6E47:qì 0x6E48:méi 0x6E49:tián 0x6E4A:còu 0x6E4B:wéi 0x6E4C:cÄ�n 0x6E4D:tuÄ�n,zhuÄ�n 0x6E4E:miÇŽn 0x6E4F:huì,mÇ�n 0x6E50:mò 0x6E51:xÅ«,xÇ”,xù 0x6E52:jí 0x6E53:pén,pèn 0x6E54:jiÄ�n,zàn,zhÇŽn,qián,jiàn 0x6E55:jiÇŽn 0x6E56:hú 0x6E57:fèng 0x6E58:xiÄ�ng 0x6E59:yì 0x6E5A:yìn 0x6E5B:zhàn,chén,dÄ�n,tán,jìn,yÇ�n,chÄ›n,yín,shèn 0x6E5C:shí 0x6E5D:jiÄ“,xié 0x6E5E:zhÄ“n,chÄ“ng 0x6E5F:huáng,kuàng 0x6E60:tàn 0x6E61:yú 0x6E62:bì 0x6E63:mÇ�n,hÅ«n,miàn 0x6E64:shÄ« 0x6E65:tÅ« 0x6E66:shÄ“ng 0x6E67:yÇ’ng 0x6E68:jú 0x6E69:dòng,dÇ’ng,tóng 0x6E6A:tuàn,nuÇŽn 0x6E6B:jiÇŽo,jiù,jiÅ«,qiÅ«,jiÄ�o 0x6E6C:jiÇŽo 0x6E6D:qiú 0x6E6E:yÄ�n,yÄ«n 0x6E6F:tÄ�ng,tàng,shÄ�ng,yáng 0x6E70:lóng 0x6E71:huò 0x6E72:yuán 0x6E73:nÇŽn 0x6E74:bàn,pán 0x6E75:yÇ’u 0x6E76:quán 0x6E77:zhuÄ�ng,hún 0x6E78:liàng 0x6E79:chán 0x6E7A:xián 0x6E7B:chún 0x6E7C:niè 0x6E7D:zÄ« 0x6E7E:wÄ�n 0x6E7F:shÄ« 0x6E80:mÇŽn 0x6E81:yíng 0x6E82:là 0x6E83:kuì,huì 0x6E84:féng 0x6E85:jiàn,jiÄ�n 0x6E86:xù 0x6E87:lóu 0x6E88:wéi 0x6E89:gài,xiè 0x6E8A:bÅ� 0x6E8B:yíng 0x6E8C:pÅ� 0x6E8D:jìn 0x6E8E:yàn,guì 0x6E8F:táng 0x6E90:yuán 0x6E91:suÇ’ 0x6E92:yuán 0x6E93:lián,liÇŽn,xián,xiàn,nián,lín 0x6E94:yÇŽo 0x6E95:méng 0x6E96:zhÇ”n,zhuó 0x6E97:chéng 0x6E98:kè,kài 0x6E99:tài 0x6E9A:tÇŽ,dá 0x6E9B:wÄ� 0x6E9C:liÅ«,liù,liú 0x6E9D:gÅ�u,gÇŽng,kòu 0x6E9E:sÄ�o 0x6E9F:míng,mÇ�ng,mì 0x6EA0:zhà,zhÄ� 0x6EA1:shí 0x6EA2:yì 0x6EA3:lùn 0x6EA4:mÇŽ 0x6EA5:pÇ”,fÅ«,bù,bó,pò 0x6EA6:wÄ“i,méi 0x6EA7:lì 0x6EA8:zÄ�i 0x6EA9:wù 0x6EAA:xÄ«,qÄ« 0x6EAB:wÄ“n 0x6EAC:qiÄ�ng 0x6EAD:zé 0x6EAE:shÄ« 0x6EAF:sù,shuò 0x6EB0:ái 0x6EB1:qín,zhÄ“n 0x6EB2:sÅ�u,sÇ’u,shÄ�o 0x6EB3:yún,yÇ”n 0x6EB4:xiù,chòu 0x6EB5:yÄ«n 0x6EB6:róng 0x6EB7:hùn,hún 0x6EB8:sù 0x6EB9:suò,sè 0x6EBA:nì,ruò,niào 0x6EBB:tÄ� 0x6EBC:shÄ« 0x6EBD:rù,rú 0x6EBE:Ä�i 0x6EBF:pàn 0x6EC0:chù,xù 0x6EC1:chú 0x6EC2:pÄ�ng,pÄ“ng 0x6EC3:wÄ“ng,wÄ›ng 0x6EC4:cÄ�ng 0x6EC5:miè 0x6EC6:gé 0x6EC7:diÄ�n,tián,zhÄ“n 0x6EC8:hào,xuè 0x6EC9:huàng 0x6ECA:xì,xiÄ“,qì 0x6ECB:zÄ«,cí,xuán 0x6ECC:dí 0x6ECD:zhì 0x6ECE:xíng,yÄ«ng,yíng 0x6ECF:fÇ” 0x6ED0:jié 0x6ED1:huá,gÇ” 0x6ED2:gÄ“ 0x6ED3:zÇ� 0x6ED4:tÄ�o 0x6ED5:téng 0x6ED6:suÄ« 0x6ED7:bì 0x6ED8:jiào 0x6ED9:huì 0x6EDA:gÇ”n 0x6EDB:yín 0x6EDC:gÄ�o 0x6EDD:lóng 0x6EDE:zhì 0x6EDF:yàn 0x6EE0:shè 0x6EE1:mÇŽn 0x6EE2:yíng 0x6EE3:chún 0x6EE4:lÇœ 0x6EE5:làn 0x6EE6:luán 0x6EE7:yáo 0x6EE8:bÄ«n 0x6EE9:tÄ�n 0x6EEA:yù 0x6EEB:xiÇ” 0x6EEC:hù 0x6EED:bì 0x6EEE:biÄ�o 0x6EEF:zhì,chì 0x6EF0:jiàng 0x6EF1:kòu 0x6EF2:shèn,sÄ“n,qÄ«n,lín 0x6EF3:shÄ�ng 0x6EF4:dÄ« 0x6EF5:mì 0x6EF6:áo 0x6EF7:lÇ” 0x6EF8:hÇ”,xÇ” 0x6EF9:hÅ«,hÇ” 0x6EFA:yÅ�u 0x6EFB:chÇŽn 0x6EFC:fàn 0x6EFD:yÅ�ng 0x6EFE:gÇ”n 0x6EFF:mÇŽn,mèn 0x6F00:qÇ�ng,qÄ«ng 0x6F01:yú 0x6F02:piào,piÄ�o,piÇŽo,biÄ�o 0x6F03:jì 0x6F04:yá 0x6F05:cháo 0x6F06:qÄ«,qiè 0x6F07:xÇ� 0x6F08:jì 0x6F09:lù 0x6F0A:lóu,lÇš,lÇ’u 0x6F0B:lóng 0x6F0C:jÇ�n 0x6F0D:guó 0x6F0E:cóng,sÇ’ng 0x6F0F:lòu,lóu 0x6F10:zhí 0x6F11:gài 0x6F12:qiáng 0x6F13:lí 0x6F14:yÇŽn,yàn 0x6F15:cáo,cào 0x6F16:jiào 0x6F17:cÅ�ng 0x6F18:chún 0x6F19:tuán,zhuÄ�n 0x6F1A:Å�u,òu 0x6F1B:téng 0x6F1C:yÄ› 0x6F1D:xí 0x6F1E:mì 0x6F1F:táng 0x6F20:mò 0x6F21:shÄ�ng,tàng 0x6F22:hàn,tÄ�n 0x6F23:lián,lán 0x6F24:lÇŽn 0x6F25:wÄ� 0x6F26:chí,tÄ�i 0x6F27:gÄ�n 0x6F28:féng,péng,bÄ›ng 0x6F29:xuán 0x6F2A:yÄ« 0x6F2B:màn 0x6F2C:zì,sè,qì 0x6F2D:mÇŽng 0x6F2E:kÄ�ng 0x6F2F:luò,tà,lÄ›i 0x6F30:pÄ“ng 0x6F31:shù 0x6F32:zhÇŽng,zhàng,zhÄ�ng 0x6F33:zhÄ�ng 0x6F34:zhuàng,chuáng,chóng 0x6F35:xù 0x6F36:huàn 0x6F37:huÇ’,kuò,huò 0x6F38:jiàn,jiÄ�n,qián,chán 0x6F39:yÄ�n 0x6F3A:shuÇŽng,chuÇŽng 0x6F3B:liáo,xiào,liú 0x6F3C:cuÇ�,cuÄ« 0x6F3D:tí 0x6F3E:yàng 0x6F3F:jiÄ�ng,jiàng 0x6F40:cóng 0x6F41:yÇ�ng 0x6F42:hóng 0x6F43:xiÇ” 0x6F44:shù 0x6F45:guàn 0x6F46:yíng 0x6F47:xiÄ�o 0x6F48:zong 0x6F49:kÅ«n 0x6F4A:xù 0x6F4B:liàn 0x6F4C:zhì 0x6F4D:wéi 0x6F4E:pì,piÄ“,piào 0x6F4F:yù,jué,shù 0x6F50:jiào,jiÇŽo,qiáo 0x6F51:pÅ�,bÅ� 0x6F52:dàng,xiàng,yÇŽng 0x6F53:huì 0x6F54:jié 0x6F55:wÇ” 0x6F56:pá 0x6F57:jí 0x6F58:pÄ�n,pàn,bÅ�,pán,fÄ�n 0x6F59:wéi,guÄ« 0x6F5A:sù,xiÄ�o,sÅ�u 0x6F5B:qián 0x6F5C:qián 0x6F5D:xÄ«,yà 0x6F5E:lù 0x6F5F:xì 0x6F60:xùn,sùn 0x6F61:dùn 0x6F62:huáng,huàng,guÄ�ng 0x6F63:mÇ�n 0x6F64:rùn 0x6F65:sù 0x6F66:lÇŽo,lào,láo,liáo,liÇŽo 0x6F67:zhÄ“n 0x6F68:cóng,zÅ�ng 0x6F69:yì 0x6F6A:zhè,zhì 0x6F6B:wÄ�n 0x6F6C:shàn,tÄ�n 0x6F6D:tán,xún,yÇ�n,dàn 0x6F6E:cháo 0x6F6F:xún,yín 0x6F70:kuì,xiè 0x6F71:yÄ“ 0x6F72:shào 0x6F73:tú,zhÄ� 0x6F74:zhÅ« 0x6F75:sÇŽ,sàn 0x6F76:hÄ“i 0x6F77:bì 0x6F78:shÄ�n 0x6F79:chán 0x6F7A:chán 0x6F7B:shÇ” 0x6F7C:tóng,chÅ�ng,zhÅ�ng 0x6F7D:pÅ«,pÇ” 0x6F7E:lín 0x6F7F:wéi 0x6F80:sè 0x6F81:sè 0x6F82:chéng 0x6F83:jiÇ’ng 0x6F84:chéng,dèng 0x6F85:huà 0x6F86:jiÄ�o,ào,nào 0x6F87:lào,láo 0x6F88:chè 0x6F89:gÇŽn,hàn 0x6F8A:cÅ«n,cún 0x6F8B:hòng 0x6F8C:sÄ« 0x6F8D:shù,zhù 0x6F8E:pÄ“ng,péng 0x6F8F:hán 0x6F90:yún 0x6F91:liù 0x6F92:hòng 0x6F93:fú 0x6F94:hào 0x6F95:hé 0x6F96:xián 0x6F97:jiàn 0x6F98:shÄ�n 0x6F99:xì 0x6F9A:yu 0x6F9B:lÇ” 0x6F9C:lán 0x6F9D:nìng 0x6F9E:yú 0x6F9F:lÇ�n 0x6FA0:miÇŽn,shéng 0x6FA1:zÇŽo,cÄ�o 0x6FA2:dÄ�ng 0x6FA3:huàn,hàn 0x6FA4:zé,shì,yì,duó 0x6FA5:xiè 0x6FA6:yù 0x6FA7:lÇ� 0x6FA8:shì,cuó 0x6FA9:xué,xiào 0x6FAA:líng 0x6FAB:wàn,màn,Ç’u 0x6FAC:zÄ«,cí 0x6FAD:yÅ�ng,yÇ’ng 0x6FAE:huì,kuài,huá 0x6FAF:càn 0x6FB0:liàn 0x6FB1:diàn 0x6FB2:yè 0x6FB3:ào,yù 0x6FB4:huán,xuàn 0x6FB5:zhÄ“n 0x6FB6:chán,dàn,zhÄ�n 0x6FB7:màn 0x6FB8:dÇŽn 0x6FB9:dàn,dÄ�n,shàn,tán 0x6FBA:yì 0x6FBB:suì 0x6FBC:pì 0x6FBD:jù 0x6FBE:tà 0x6FBF:qín 0x6FC0:jÄ«,jiào,jiÄ�o 0x6FC1:zhuó 0x6FC2:lián,xiÇŽn 0x6FC3:nóng 0x6FC4:guÅ�,wÅ� 0x6FC5:jìn 0x6FC6:fén,pÄ“n 0x6FC7:sè 0x6FC8:jí,shà 0x6FC9:suÄ« 0x6FCA:huì,wèi,huò 0x6FCB:chÇ” 0x6FCC:tà 0x6FCD:sÅ�ng 0x6FCE:dÇ�ng,tìng 0x6FCF:sè 0x6FD0:zhÇ” 0x6FD1:lài 0x6FD2:bÄ«n 0x6FD3:lián 0x6FD4:mÇ�,mí,nÇ� 0x6FD5:shÄ«,tà,xí 0x6FD6:shù 0x6FD7:mì 0x6FD8:nìng,níng,nì 0x6FD9:yíng 0x6FDA:yíng 0x6FDB:méng 0x6FDC:jìn,jÄ«n 0x6FDD:qí 0x6FDE:bì,pì 0x6FDF:jì,jÇ�,qí 0x6FE0:háo 0x6FE1:rú,ruÇŽn,ér,nuán,nuò 0x6FE2:cuì,zuÇ� 0x6FE3:wò 0x6FE4:tÄ�o,cháo,shòu,dào 0x6FE5:yÇ�n 0x6FE6:yÇ�n 0x6FE7:duì 0x6FE8:cí 0x6FE9:huò,hù 0x6FEA:qìng 0x6FEB:làn,jiàn,lÇŽn,lán 0x6FEC:jùn,xùn 0x6FED:ÇŽi,kài,kè 0x6FEE:pú 0x6FEF:zhuó,shuò,zhào 0x6FF0:wéi 0x6FF1:bÄ«n 0x6FF2:gÇ” 0x6FF3:qián 0x6FF4:yíng 0x6FF5:bÄ«n 0x6FF6:kuò 0x6FF7:fèi 0x6FF8:cÄ�ng 0x6FF9:me 0x6FFA:jiàn,jiÄ�n,zàn 0x6FFB:wÄ›i 0x6FFC:luò,pÅ�,lì 0x6FFD:zàn 0x6FFE:lÇœ 0x6FFF:lì 0x7000:yÅ�u 0x7001:yàng,yÇŽng 0x7002:lÇ” 0x7003:sì 0x7004:zhì 0x7005:yíng,yìng,jiÅ�ng 0x7006:dú,dòu 0x7007:wÇŽng,wÄ�ng 0x7008:huÄ« 0x7009:xiè 0x700A:pán 0x700B:shÄ›n,chèn,pán 0x700C:biÄ�o 0x700D:chán 0x700E:mò,miè 0x700F:liú,liÅ« 0x7010:jiÄ�n 0x7011:pù,bào,bó 0x7012:sè 0x7013:chéng 0x7014:gÇ” 0x7015:bÄ«n 0x7016:huò 0x7017:xiàn 0x7018:lú 0x7019:qìn 0x701A:hàn 0x701B:yíng 0x701C:róng 0x701D:lì 0x701E:jìng 0x701F:xiÄ�o 0x7020:yíng 0x7021:suÇ� 0x7022:wÄ›i,duì 0x7023:xiè 0x7024:huái,wÄ�i 0x7025:xuè 0x7026:zhÅ« 0x7027:lóng,shuÄ�ng 0x7028:lài 0x7029:duì 0x702A:fán 0x702B:hú 0x702C:lài 0x702D:shÅ« 0x702E:ling 0x702F:yíng 0x7030:mí,mÇ�,nÇ� 0x7031:jì 0x7032:liàn 0x7033:jiàn,zùn 0x7034:yíng,yÇ�ng,yìng 0x7035:fèn 0x7036:lín 0x7037:yì 0x7038:jiÄ�n 0x7039:yuè,yào 0x703A:chán 0x703B:dài 0x703C:ráng,nÇŽng,ràng 0x703D:jiÇŽn 0x703E:lán 0x703F:fán 0x7040:shuàng 0x7041:yuÄ�n 0x7042:zhuó,zé,jiào 0x7043:fÄ“ng 0x7044:shè,nì 0x7045:lÄ›i 0x7046:lán 0x7047:cóng 0x7048:qú 0x7049:yÅ�ng 0x704A:qián 0x704B:fÇŽ 0x704C:guàn,huàn 0x704D:jué 0x704E:yàn 0x704F:hào 0x7050:yíng 0x7051:sÇŽ,xiÇŽn,xÇ�,lí,shÄ« 0x7052:zàn,cuán,qián,zÄ� 0x7053:luán,luàn 0x7054:yàn 0x7055:lí 0x7056:mÇ� 0x7057:shàn 0x7058:tÄ�n,hàn,nàn 0x7059:dÇŽng 0x705A:jiÇŽo 0x705B:chÇŽn 0x705C:yíng 0x705D:hào 0x705E:bà 0x705F:zhú 0x7060:lÇŽn,làn 0x7061:lán 0x7062:nÇŽng 0x7063:wÄ�n 0x7064:luán 0x7065:xún,quán,quàn 0x7066:xiÇŽn 0x7067:yàn 0x7068:gàn 0x7069:yàn 0x706A:yù 0x706B:huÇ’,huÅ� 0x706C:biÄ�o,huÇ’ 0x706D:miè 0x706E:guÄ�ng 0x706F:dÄ“ng,dÄ«ng 0x7070:huÄ« 0x7071:xiÄ�o 0x7072:xiÄ�o 0x7073:huÄ« 0x7074:hÅ�ng 0x7075:líng 0x7076:zào 0x7077:zhuàn 0x7078:jiÇ” 0x7079:zhà,yù 0x707A:xiè 0x707B:chì 0x707C:zhuó 0x707D:zÄ�i 0x707E:zÄ�i 0x707F:càn 0x7080:yáng 0x7081:qì 0x7082:zhÅ�ng 0x7083:fén,bèn 0x7084:niÇ” 0x7085:jiÇ’ng,guì 0x7086:wén 0x7087:pÅ« 0x7088:yì 0x7089:lú 0x708A:chuÄ« 0x708B:pÄ« 0x708C:kài 0x708D:pàn 0x708E:yán,yàn,tán 0x708F:kài,yán 0x7090:pàng,fÄ“ng 0x7091:mù 0x7092:chÇŽo 0x7093:liào 0x7094:guì,xuè,quÄ“ 0x7095:kàng,hÄ�ng 0x7096:dùn,tún 0x7097:guÄ�ng 0x7098:xÄ«n 0x7099:zhì 0x709A:guÄ�ng 0x709B:guÄ�ng 0x709C:wÄ›i 0x709D:qiàng 0x709E:bian 0x709F:dá 0x70A0:xiá 0x70A1:zhÄ“ng 0x70A2:zhú 0x70A3:kÄ› 0x70A4:zhào,zhÄ�o,zhÇŽo 0x70A5:fú 0x70A6:bá 0x70A7:xiè 0x70A8:xiè 0x70A9:lìng 0x70AA:zhuÅ�,chù 0x70AB:xuàn 0x70AC:jù 0x70AD:tàn 0x70AE:pào,páo,bÄ�o 0x70AF:jiÇ’ng 0x70B0:páo,fÇ’u 0x70B1:tái 0x70B2:tái 0x70B3:bÇ�ng 0x70B4:yÇŽng 0x70B5:tÅ�ng 0x70B6:shÇŽn 0x70B7:zhù 0x70B8:zhà,zhá 0x70B9:diÇŽn 0x70BA:wèi,wéi 0x70BB:shí 0x70BC:liàn 0x70BD:chì 0x70BE:huÇŽng 0x70BF:zhÅ�u 0x70C0:hÅ« 0x70C1:shuò 0x70C2:làn 0x70C3:tÄ«ng 0x70C4:jiÇŽo,yào 0x70C5:xù 0x70C6:héng 0x70C7:quÇŽn 0x70C8:liè 0x70C9:huàn 0x70CA:yáng,yàng 0x70CB:xiÅ«,xiÄ�o 0x70CC:xiÅ« 0x70CD:xiÇŽn 0x70CE:yín 0x70CF:wÅ«,yÄ�,wù 0x70D0:zhÅ�u 0x70D1:yáo 0x70D2:shì 0x70D3:wÄ“i 0x70D4:tóng,dòng 0x70D5:miè 0x70D6:zÄ�i 0x70D7:kài 0x70D8:hÅ�ng 0x70D9:lào,luò 0x70DA:xiá 0x70DB:zhú,chóng 0x70DC:xuÇŽn,xuÄ�n,huÇ� 0x70DD:zhÄ“ng 0x70DE:pò 0x70DF:yÄ�n,yÄ«n 0x70E0:huí,huÇ�,ÇŽi 0x70E1:guÄ�ng 0x70E2:chè 0x70E3:huÄ« 0x70E4:kÇŽo 0x70E5:jù 0x70E6:fán 0x70E7:shÄ�o 0x70E8:yè 0x70E9:huì 0x70EB:tàng 0x70EC:jìn 0x70ED:rè 0x70EE:liè 0x70EF:xÄ« 0x70F0:fú,fÅ« 0x70F1:jiÇ’ng 0x70F2:xiè,chè 0x70F3:pÇ” 0x70F4:tÄ«ng,jÇ�ng 0x70F5:zhuó 0x70F6:tÇ�ng 0x70F7:wán 0x70F8:hÇŽi 0x70F9:pÄ“ng 0x70FA:lÇŽng 0x70FB:yàn,shÄ�n 0x70FC:xù 0x70FD:fÄ“ng 0x70FE:chì 0x70FF:róng 0x7100:hú 0x7101:xÄ« 0x7102:shÅ« 0x7103:hè,huò 0x7104:xÅ«n,hÅ«n 0x7105:kù,kào 0x7106:juÄ�n,yè,yuè,yuÄ�n 0x7107:xiÄ�o 0x7108:xÄ« 0x7109:yÄ�n,yí 0x710A:hàn 0x710B:zhuàng 0x710C:jùn,qÅ« 0x710D:dì 0x710E:xiè 0x710F:jí,qì 0x7110:wù 0x7111:yÄ�n 0x7112:lÇš 0x7113:hán 0x7114:yàn 0x7115:huàn 0x7116:mèn 0x7117:jú 0x7118:dào,tÄ�o 0x7119:bèi 0x711A:fén,fèn 0x711B:lìn 0x711C:kÅ«n 0x711D:hùn 0x711E:tÅ«n,tuÄ«,jùn 0x711F:xÄ« 0x7120:cuì 0x7121:wú,mó 0x7122:hÅ�ng 0x7123:chÇŽo,jù 0x7124:fÇ” 0x7125:wò,ài 0x7126:jiÄ�o,qiáo 0x7127:cÅ�ng 0x7128:fèng 0x7129:píng 0x712A:qióng 0x712B:ruò,rè 0x712C:xÄ«,yì 0x712D:qióng 0x712E:xìn 0x712F:chÄ�o,zhuÅ�,zhuó,chuò 0x7130:yàn 0x7131:yàn,yì 0x7132:yì 0x7133:jué 0x7134:yù 0x7135:gàng 0x7136:rán 0x7137:pí 0x7138:xiòng,yÄ«ng,gÇ” 0x7139:gàng 0x713A:shÄ“ng 0x713B:chàng,guÄ� 0x713C:shÄ�o 0x713D:xiÇ’ng 0x713E:niÇŽn 0x713F:gÄ“ng 0x7140:wei 0x7141:chén 0x7142:hè 0x7143:kuÇ� 0x7144:zhÇ’ng 0x7145:duàn 0x7146:xiÄ�,xià 0x7147:huÄ«,hún,yùn,xÅ«n,xuàn 0x7148:fèng 0x7149:liàn,làn 0x714A:xuÄ�n 0x714B:xÄ«ng 0x714C:huáng 0x714D:jiÇŽo 0x714E:jiÄ�n,jiàn,jiÇŽn 0x714F:bì 0x7150:yÄ«ng 0x7151:zhÇ” 0x7152:wÄ›i,huÄ« 0x7153:tuÄ�n 0x7154:shÇŽn,qián,shÄ�n 0x7155:xÄ« 0x7156:nuÇŽn,xuÄ�n 0x7157:nuÇŽn 0x7158:chán 0x7159:yÄ�n 0x715A:jiÇ’ng 0x715B:jiÇ’ng 0x715C:yù 0x715D:mèi 0x715E:shÄ�,shà 0x715F:wèi 0x7160:zhá,yè 0x7161:jìn 0x7162:qióng 0x7163:róu,rÇ’u 0x7164:méi 0x7165:huàn 0x7166:xù,xiÅ« 0x7167:zhào 0x7168:wÄ“i,yù 0x7169:fán 0x716A:qiú 0x716B:suì 0x716C:yáng,yàng 0x716D:liè 0x716E:zhÇ” 0x716F:jiÄ“ 0x7170:zào 0x7171:guÄ� 0x7172:bÄ�o 0x7173:hú 0x7174:yÅ«n,yùn,wÄ›n 0x7175:nÇŽn 0x7176:shì 0x7177:liang 0x7178:biÄ�n 0x7179:gòu 0x717A:tuì 0x717B:táng 0x717C:chÇŽo 0x717D:shÄ�n 0x717E:Ä“n,yÅ«n 0x717F:bó 0x7180:huÇŽng,yè 0x7181:xié 0x7182:xì 0x7183:wù 0x7184:xÄ« 0x7185:yùn 0x7186:hé 0x7187:hè,xiÄ�o,kÇŽo,kào 0x7188:xÄ« 0x7189:yún 0x718A:xióng 0x718B:nái 0x718C:shÇŽn 0x718D:qióng 0x718E:yào 0x718F:xÅ«n,xùn 0x7190:mì 0x7191:lián,qiÄ�n 0x7192:yíng,xíng,jiÇ’ng 0x7193:wÇ” 0x7194:róng 0x7195:gÅ�ng 0x7196:yàn 0x7197:qiàng 0x7198:liÅ« 0x7199:xÄ«,yí 0x719A:bì 0x719B:biÄ�o 0x719C:cÅ�ng,zÇ’ng 0x719D:lù,Ä�o 0x719E:jiÄ�n 0x719F:shú,shóu 0x71A0:yì 0x71A1:lóu 0x71A2:péng,bèng,fÄ“ng 0x71A3:suÄ«,cuÇ� 0x71A4:yì 0x71A5:tÄ“ng,tÅ�ng 0x71A6:jué 0x71A7:zÅ�ng 0x71A8:yùn,yù,wèi 0x71A9:hù 0x71AA:yí 0x71AB:zhì 0x71AC:áo,Ä�o 0x71AD:wèi 0x71AE:liÇ” 0x71AF:hàn,rÇŽn 0x71B0:Å�u,òu 0x71B1:rè 0x71B2:jiÇ’ng 0x71B3:màn 0x71B4:kÅ«n 0x71B5:shÄ�ng 0x71B6:cuàn 0x71B7:zÄ“ng 0x71B8:jiÄ�n 0x71B9:xÄ« 0x71BA:xÄ« 0x71BB:xÄ« 0x71BC:yì 0x71BD:xiào 0x71BE:chì 0x71BF:huáng,huÇŽng 0x71C0:chÇŽn,dÇŽn,chàn 0x71C1:yè 0x71C2:tán,xún,qián 0x71C3:rán 0x71C4:yàn 0x71C5:xún 0x71C6:qiÄ�o,xiÄ�o 0x71C7:jùn 0x71C8:dÄ“ng 0x71C9:dùn,tún,dÅ«n 0x71CA:shÄ“n 0x71CB:jiÄ�o,qiáo,jué,zhuó 0x71CC:fén,bèn 0x71CD:sÄ«,xÄ« 0x71CE:liáo,liÇŽo,liào 0x71CF:yù 0x71D0:lín 0x71D1:tóng 0x71D2:shÄ�o,shào 0x71D3:fén 0x71D4:fán,fén 0x71D5:yàn,yÄ�n 0x71D6:xún,qián 0x71D7:làn 0x71D8:mÄ›i 0x71D9:tàng,dàng 0x71DA:yì 0x71DB:jiÇ’ng 0x71DC:mèn 0x71DD:jing 0x71DE:jiÇŽo 0x71DF:yíng,cuÅ� 0x71E0:yù,ào 0x71E1:yì 0x71E2:xué 0x71E3:lán 0x71E4:tài,liè 0x71E5:zào,sào 0x71E6:càn 0x71E7:suì 0x71E8:xÄ« 0x71E9:què 0x71EA:zÇ’ng 0x71EB:lián 0x71EC:huÇ� 0x71ED:zhú,kuò 0x71EE:xiè 0x71EF:líng 0x71F0:wÄ“i 0x71F1:yì 0x71F2:xié 0x71F3:zhào 0x71F4:huì 0x71F5:dá 0x71F6:nóng 0x71F7:lán 0x71F8:rú,ruÇŽn 0x71F9:xiÇŽn,bìng 0x71FA:hè 0x71FB:xÅ«n 0x71FC:jìn 0x71FD:chóu 0x71FE:dào,tÄ�o 0x71FF:yào,shuò,shào 0x7200:hè 0x7201:làn 0x7202:biÄ�o 0x7203:róng 0x7204:lì,liè 0x7205:mò 0x7206:bào,bó 0x7207:ruò 0x7208:lÇœ 0x7209:là,liè 0x720A:Ä�o 0x720B:xÅ«n 0x720C:kuàng,huÇŽng,kuÇŽng 0x720D:shuò,luò,yuè 0x720E:liáo 0x720F:lì 0x7210:lú 0x7211:jué 0x7212:liÇŽo 0x7213:yàn,xún 0x7214:xÄ« 0x7215:xiè 0x7216:lóng 0x7217:yè 0x7218:cÄ�n 0x7219:rÇŽng 0x721A:yuè 0x721B:làn 0x721C:cóng 0x721D:jué,jiào 0x721E:chóng,tóng 0x721F:guàn 0x7220:ju 0x7221:chè 0x7222:mí 0x7223:tÇŽng 0x7224:làn 0x7225:zhú 0x7226:lÇŽn 0x7227:líng 0x7228:cuàn 0x7229:yù 0x722A:zhÇŽo,zhuÇŽ 0x722B:zhÇŽo 0x722C:pá 0x722D:zhÄ“ng,zhèng 0x722E:páo 0x722F:chÄ“ng,chèng 0x7230:yuán 0x7231:ài 0x7232:wèi,wéi 0x7233:han 0x7234:jué 0x7235:jué 0x7236:fù,fÇ” 0x7237:yé 0x7238:bà 0x7239:diÄ“ 0x723A:yé 0x723B:yáo,xiào 0x723C:zÇ” 0x723D:shuÇŽng,shuÄ�ng 0x723E:Ä›r,mÇ�,nÇ� 0x723F:pán,qiáng 0x7240:chuáng 0x7241:kÄ“ 0x7242:zÄ�ng 0x7243:dié 0x7244:qiÄ�ng 0x7245:yÅ�ng 0x7246:qiáng 0x7247:piàn,piÄ�n,pàn 0x7248:bÇŽn 0x7249:pàn 0x724A:cháo 0x724B:jiÄ�n 0x724C:pái 0x724D:dú 0x724E:chuÄ�ng 0x724F:yú 0x7250:zhá 0x7251:biÄ�n,miàn 0x7252:dié 0x7253:bÇŽng,pÄ�ng 0x7254:bó 0x7255:chuÄ�ng 0x7256:yÇ’u 0x7257:yÇ’u 0x7258:dú 0x7259:yá,yà 0x725A:chÄ“ng,chèng 0x725B:niú 0x725C:niú 0x725D:pìn 0x725E:jiÅ«,lè 0x725F:móu,mào,mù 0x7260:tÄ�,tuó 0x7261:mÇ” 0x7262:láo,lào,lóu 0x7263:rèn 0x7264:mÄ�ng 0x7265:fÄ�ng 0x7266:máo 0x7267:mù 0x7268:gÄ�ng 0x7269:wù 0x726A:yàn 0x726B:gÄ“,qiú,zÄ�ng 0x726C:bèi 0x726D:sì 0x726E:jiàn 0x726F:gÇ” 0x7270:yòu,chÅ�u 0x7271:gÄ“ 0x7272:shÄ“ng 0x7273:mÇ” 0x7274:dÇ�,dÄ«,zhÄ�i 0x7275:qiÄ�n 0x7276:quàn 0x7277:quán 0x7278:zì 0x7279:tè 0x727A:xÄ« 0x727B:máng 0x727C:kÄ“ng 0x727D:qiÄ�n,qiàn 0x727E:wÇ”,wú 0x727F:gù 0x7280:xÄ« 0x7281:lí 0x7282:lí 0x7283:pÇ’u 0x7284:jÄ«,yÄ« 0x7285:gÄ�ng 0x7286:zhí,tè 0x7287:bÄ“n 0x7288:quán 0x7289:chún 0x728A:dú 0x728B:jù 0x728C:jiÄ� 0x728D:jiÄ�n,qián,jiÇŽn 0x728E:fÄ“ng 0x728F:piÄ�n 0x7290:kÄ“ 0x7291:jú 0x7292:kào 0x7293:chú 0x7294:xì 0x7295:bèi 0x7296:luò 0x7297:jiè 0x7298:má 0x7299:sÄ�n 0x729A:wèi 0x729B:máo,lí 0x729C:dÅ«n 0x729D:tóng 0x729E:qiáo 0x729F:jiàng 0x72A0:xÄ« 0x72A1:lì 0x72A2:dú 0x72A3:liè 0x72A4:pái 0x72A5:piÄ�o,pào 0x72A6:bó 0x72A7:xÄ«,suÅ� 0x72A8:chÅ�u 0x72A9:wéi 0x72AA:kuí,ráo 0x72AB:chÅ�u 0x72AC:quÇŽn 0x72AD:quÇŽn 0x72AE:bá 0x72AF:fàn 0x72B0:qiú 0x72B1:jÇ� 0x72B2:chái 0x72B3:zhuó 0x72B4:àn,án,jiàn,hÄ�n 0x72B5:gÄ“,hé 0x72B6:zhuàng 0x72B7:guÇŽng 0x72B8:mà 0x72B9:yóu,yòu 0x72BA:kàng,gÇŽng 0x72BB:bó,pèi,fèi 0x72BC:hÇ’u 0x72BD:yà 0x72BE:yín 0x72BF:huÄ�n,fÄ�n 0x72C0:zhuàng 0x72C1:yÇ”n 0x72C2:kuáng,jué 0x72C3:niÇ”,nÇœ 0x72C4:dí,tì 0x72C5:kuáng 0x72C6:zhòng 0x72C7:mù 0x72C8:bèi 0x72C9:pÄ« 0x72CA:jú 0x72CB:yí,quán,chí 0x72CC:shÄ“ng,xÄ«ng 0x72CD:páo 0x72CE:xiá 0x72CF:tuó,yí 0x72D0:hú 0x72D1:líng 0x72D2:fèi 0x72D3:pí,pÄ« 0x72D4:nÇ� 0x72D5:yÇŽo 0x72D6:yòu 0x72D7:gÇ’u 0x72D8:xuè 0x72D9:jÅ« 0x72DA:dàn 0x72DB:bó 0x72DC:kÇ” 0x72DD:xiÇŽn 0x72DE:níng 0x72DF:huán,xuÄ�n,héng 0x72E0:hÄ›n,yán,kÄ›n,hÇŽng 0x72E1:jiÇŽo,xiào 0x72E2:hé,mò 0x72E3:zhào 0x72E4:jí,jié,kuài 0x72E5:xùn 0x72E6:shÄ�n 0x72E7:tà,shì 0x72E8:róng 0x72E9:shòu 0x72EA:tóng,dòng 0x72EB:lÇŽo 0x72EC:dú 0x72ED:xiá 0x72EE:shÄ« 0x72EF:kuài 0x72F0:zhÄ“ng 0x72F1:yù 0x72F2:sÅ«n 0x72F3:yú 0x72F4:bì 0x72F5:máng,zhuó 0x72F6:xÄ«,shÇ� 0x72F7:juàn 0x72F8:lí 0x72F9:xiá 0x72FA:yín 0x72FB:suÄ�n,xùn,jùn 0x72FC:láng,lÇŽng,làng,hÇŽng 0x72FD:bèi 0x72FE:zhì 0x72FF:yán 0x7300:shÄ� 0x7301:lì 0x7302:hàn 0x7303:xiÇŽn 0x7304:jÄ«ng 0x7305:pái 0x7306:fÄ“i 0x7307:xiÄ�o 0x7308:bài,pí 0x7309:qí 0x730A:ní 0x730B:biÄ�o 0x730C:yìn 0x730D:lái 0x730E:liè,xÄ«,què 0x730F:jiÄ�n 0x7310:qiÄ�ng 0x7311:kÅ«n 0x7312:yàn 0x7313:guÇ’,luÇ’ 0x7314:zòng 0x7315:mí 0x7316:chÄ�ng 0x7317:yÄ«,yÇ�,jì,Ä“,wÄ“i 0x7318:zhì 0x7319:zhÄ“ng 0x731A:yá,wèi 0x731B:mÄ›ng 0x731C:cÄ�i 0x731D:cù 0x731E:shÄ“ 0x731F:liè 0x7320:diÇŽn 0x7321:luó 0x7322:hú 0x7323:zÅ�ng 0x7324:guì 0x7325:wÄ›i,wèi 0x7326:fÄ“ng 0x7327:wÅ� 0x7328:yuán 0x7329:xÄ«ng 0x732A:zhÅ« 0x732B:mÄ�o,miáo,máo 0x732C:wèi 0x732D:chuÄ�n,chuàn,shÄ�n 0x732E:xiàn 0x732F:tuÄ�n 0x7330:yà,jiá,qiè 0x7331:náo 0x7332:xiÄ“,hè,gé,hài 0x7333:jiÄ� 0x7334:hóu 0x7335:biÄ�n,piàn 0x7336:yóu,yáo 0x7337:yóu 0x7338:méi 0x7339:chá 0x733A:yáo 0x733B:sÅ«n 0x733C:bó,pò 0x733D:míng 0x733E:huá 0x733F:yuán 0x7340:sÅ�u 0x7341:mà,mÇŽ 0x7342:yuán 0x7343:dÄ�i,ái 0x7344:yù 0x7345:shÄ« 0x7346:háo 0x7347:qiÄ�ng 0x7348:yì 0x7349:zhÄ“n 0x734A:cÄ�ng 0x734B:háo,gÄ�o 0x734C:màn 0x734D:jìng 0x734E:jiÇŽng 0x734F:mò,mú 0x7350:zhÄ�ng 0x7351:chán 0x7352:áo 0x7353:áo 0x7354:háo 0x7355:cuÄ« 0x7356:bèn,fèn,fén 0x7357:jué 0x7358:bì 0x7359:bì 0x735A:huáng 0x735B:pú 0x735C:lín,lìn 0x735D:xù,yù 0x735E:tóng,zhuàng 0x735F:yào,xiÄ�o 0x7360:liáo,lÇŽo 0x7361:shuò 0x7362:xiÄ�o 0x7363:shòu 0x7364:dÅ«n 0x7365:jiào 0x7366:gé,xiÄ“,liè 0x7367:juàn 0x7368:dú 0x7369:huì 0x736A:kuài,huá 0x736B:xiÇŽn 0x736C:xiè,hÇŽ,jiÄ› 0x736D:tÇŽ 0x736E:xiÇŽn,mí 0x736F:xÅ«n 0x7370:níng 0x7371:biÄ�n 0x7372:huò 0x7373:nòu,rú 0x7374:mÄ›ng,méng 0x7375:liè 0x7376:nÇŽo,yÅ�u,náo 0x7377:guÇŽng,jÇ�ng 0x7378:shòu 0x7379:lú 0x737A:tÇŽ 0x737B:xiàn,suÅ�,xÄ« 0x737C:mí 0x737D:ráng 0x737E:huÄ�n,quán 0x737F:nÇŽo,náo 0x7380:luó,Ä› 0x7381:xiÇŽn 0x7382:qí 0x7383:jué 0x7384:xuán,xuàn 0x7385:miào,yÄ�o 0x7386:zÄ«,xuán 0x7387:lÇœ,shuài,lüè 0x7388:lú 0x7389:yù 0x738A:sù 0x738B:wáng,wàng,yù 0x738C:qiú 0x738D:gÇŽ 0x738E:dÄ«ng 0x738F:lè 0x7390:bÄ� 0x7391:jÄ« 0x7392:hóng 0x7393:dì 0x7394:chuàn 0x7395:gÄ�n 0x7396:jiÇ” 0x7397:yú 0x7398:qÇ� 0x7399:yú 0x739A:chàng,yáng 0x739B:mÇŽ 0x739C:hóng 0x739D:wÇ” 0x739E:fÅ« 0x739F:wén,mín 0x73A0:jiè 0x73A1:yá,yà 0x73A2:bÄ«n,fÄ“n 0x73A3:biàn 0x73A4:bàng 0x73A5:yuè 0x73A6:jué 0x73A7:mén,yÇ”n 0x73A8:jué 0x73A9:wán 0x73AA:jiÄ�n,yín,qián,lín 0x73AB:méi 0x73AC:dÇŽn 0x73AD:pín 0x73AE:wÄ›i 0x73AF:huán 0x73B0:xiàn 0x73B1:qiÄ�ng 0x73B2:líng 0x73B3:dài 0x73B4:yì 0x73B5:án,gÄ�n 0x73B6:píng 0x73B7:diàn,diÄ�n 0x73B8:fú 0x73B9:xuán,xuàn,xián 0x73BA:xÇ� 0x73BB:bÅ� 0x73BC:cÇ�,cÄ«,cuÅ� 0x73BD:gÇ’u 0x73BE:jiÇŽ 0x73BF:sháo 0x73C0:pò 0x73C1:cí 0x73C2:kÄ“ 0x73C3:rÇŽn 0x73C4:shÄ“ng 0x73C5:shÄ“n 0x73C6:yí,tÄ�i 0x73C7:zÇ”,jù 0x73C8:jiÄ� 0x73C9:mín 0x73CA:shÄ�n 0x73CB:liÇ” 0x73CC:bì 0x73CD:zhÄ“n 0x73CE:zhÄ“n 0x73CF:jué 0x73D0:fà 0x73D1:lóng 0x73D2:jÄ«n 0x73D3:jiào 0x73D4:jiàn 0x73D5:lì 0x73D6:guÄ�ng 0x73D7:xiÄ�n 0x73D8:zhÅ�u 0x73D9:gÇ’ng 0x73DA:yÄ�n 0x73DB:xiù 0x73DC:yáng 0x73DD:xÇ” 0x73DE:luò,lì 0x73DF:sù 0x73E0:zhÅ« 0x73E1:qín 0x73E2:yín,kèn 0x73E3:xún 0x73E4:bÇŽo 0x73E5:Ä›r 0x73E6:xiàng 0x73E7:yáo 0x73E8:xiá 0x73E9:háng,héng 0x73EA:guÄ« 0x73EB:chÅ�ng 0x73EC:xù 0x73ED:bÄ�n 0x73EE:pèi 0x73EF:lÇŽo 0x73F0:dÄ�ng 0x73F1:yÄ«ng 0x73F2:huÄ«,hún 0x73F3:wén 0x73F4:é 0x73F5:chéng,tÇ�ng 0x73F6:dì,tí 0x73F7:wÇ”,wù 0x73F8:wú 0x73F9:chéng 0x73FA:jùn 0x73FB:méi 0x73FC:bèi 0x73FD:tÇ�ng 0x73FE:xiàn 0x73FF:chù 0x7400:hán 0x7401:xuán,qióng 0x7402:yán 0x7403:qiú 0x7404:xuàn 0x7405:láng,làng 0x7406:lÇ� 0x7407:xiù 0x7408:fú,fÅ« 0x7409:liú 0x740A:yá 0x740B:xÄ« 0x740C:líng 0x740D:lí 0x740E:jìn 0x740F:liÇŽn 0x7410:suÇ’ 0x7411:suÇ’ 0x7412:fÄ“ng 0x7413:wán 0x7414:diàn 0x7415:pín,bÇ�ng 0x7416:zhÇŽn 0x7417:sè,cuì 0x7418:mín 0x7419:yù 0x741A:jÅ« 0x741B:chÄ“n 0x741C:lái 0x741D:mín 0x741E:shèng,wàng 0x741F:wéi,yù 0x7420:tiÇŽn,tiàn 0x7421:chù 0x7422:zuó,zhuó 0x7423:bÄ›ng,pÄ›i 0x7424:chÄ“ng 0x7425:hÇ” 0x7426:qí 0x7427:è 0x7428:kÅ«n 0x7429:chÄ�ng 0x742A:qí 0x742B:bÄ›ng 0x742C:wÇŽn 0x742D:lù 0x742E:cóng 0x742F:guÇŽn,gùn,guÄ�n,guàn 0x7430:yÇŽn 0x7431:diÄ�o 0x7432:bèi 0x7433:lín 0x7434:qín 0x7435:pí 0x7436:pá 0x7437:què 0x7438:zhuó 0x7439:qín 0x743A:fà 0x743B:jÄ«n 0x743C:qióng 0x743D:dÇ” 0x743E:jiè 0x743F:hún,huÄ« 0x7440:yÇ” 0x7441:mào 0x7442:méi 0x7443:chÅ«n 0x7444:xuÄ�n 0x7445:tí 0x7446:xÄ«ng 0x7447:dài 0x7448:róu 0x7449:mín 0x744A:jiÄ�n 0x744B:wÄ›i 0x744C:ruÇŽn 0x744D:huàn 0x744E:xié 0x744F:chuÄ�n 0x7450:jiÇŽn 0x7451:zhuàn 0x7452:chàng,yáng,dàng 0x7453:liàn 0x7454:quán 0x7455:xiá 0x7456:duàn 0x7457:yuàn,huán 0x7458:yá 0x7459:nÇŽo 0x745A:hú 0x745B:yÄ«ng 0x745C:yú 0x745D:huáng 0x745E:ruì 0x745F:sè 0x7460:liú 0x7461:shÄ« 0x7462:róng 0x7463:suÇ’ 0x7464:yáo 0x7465:wÄ“n 0x7466:wÇ” 0x7467:zhÄ“n 0x7468:jìn 0x7469:yíng,yÇ�ng 0x746A:mÇŽ 0x746B:tÄ�o 0x746C:liú 0x746D:táng 0x746E:lì 0x746F:láng 0x7470:guÄ« 0x7471:zhèn,tiàn 0x7472:qiÄ�ng,chÄ“ng,cÄ�ng 0x7473:cuÅ� 0x7474:jué 0x7475:zhÇŽo 0x7476:yáo 0x7477:ài 0x7478:bÄ«n 0x7479:shÅ«,tÅ« 0x747A:cháng 0x747B:kÅ«n 0x747C:zhuÄ�n 0x747D:cÅ�ng 0x747E:jÇ�n,jìn 0x747F:yÄ« 0x7480:cuÇ� 0x7481:cÅ�ng 0x7482:qí 0x7483:lí 0x7484:jÇ�ng 0x7485:suÇ’,zÇŽo 0x7486:qiú 0x7487:xuán 0x7488:áo 0x7489:liÇŽn,lián 0x748A:mén 0x748B:zhÄ�ng 0x748C:yín 0x748D:yè 0x748E:yÄ«ng 0x748F:wèi,zhì 0x7490:lù 0x7491:wú 0x7492:dÄ“ng 0x7493:xiù 0x7494:zÄ“ng 0x7495:xún 0x7496:qú 0x7497:dàng 0x7498:lín 0x7499:liáo 0x749A:qióng,jué 0x749B:sù 0x749C:huáng 0x749D:guÄ« 0x749E:pú 0x749F:jÇ�ng 0x74A0:fán 0x74A1:jìn,jÄ«n 0x74A2:liú 0x74A3:jÄ« 0x74A4:huì 0x74A5:jÇ�ng 0x74A6:ài 0x74A7:bì 0x74A8:càn 0x74A9:qú 0x74AA:zÇŽo 0x74AB:dÄ�ng 0x74AC:jiÇŽo 0x74AD:gùn 0x74AE:tÇŽn 0x74AF:huì,kuài 0x74B0:huán,huàn 0x74B1:sè 0x74B2:suì 0x74B3:tián 0x74B4:chÇ” 0x74B5:yú 0x74B6:jìn 0x74B7:lú,fÅ« 0x74B8:bÄ«n,pián 0x74B9:shú 0x74BA:wèn 0x74BB:zuÇ� 0x74BC:lán 0x74BD:xÇ� 0x74BE:zÄ«,jì 0x74BF:xuán 0x74C0:ruÇŽn 0x74C1:wò 0x74C2:gài 0x74C3:léi 0x74C4:dú 0x74C5:lì 0x74C6:zhì 0x74C7:róu 0x74C8:lí,li 0x74C9:zàn 0x74CA:qióng,xuán 0x74CB:tì 0x74CC:guÄ« 0x74CD:suí 0x74CE:là 0x74CF:lóng 0x74D0:lú 0x74D1:lì 0x74D2:zàn 0x74D3:làn 0x74D4:yÄ«ng 0x74D5:mí,xÇ� 0x74D6:xiÄ�ng 0x74D7:qióng,wÄ›i,wèi 0x74D8:guàn 0x74D9:dào 0x74DA:zàn 0x74DB:huán,yè,yÇŽn 0x74DC:guÄ� 0x74DD:bó 0x74DE:dié 0x74DF:bó,páo 0x74E0:hù,hú,huò,gÅ« 0x74E1:zhí,hú 0x74E2:piáo 0x74E3:bàn 0x74E4:ráng 0x74E5:lì 0x74E6:wÇŽ,wà 0x74E8:xiáng,hóng 0x74E9:qiÄ�n,wÇŽ 0x74EA:bÇŽn 0x74EB:pén 0x74EC:fÇŽng 0x74ED:dÇŽn,dÄ�n 0x74EE:wèng 0x74EF:Å�u 0x74F2:wa 0x74F3:hú 0x74F4:líng 0x74F5:yí 0x74F6:píng 0x74F7:cí 0x74F8:bÇŽi 0x74F9:juÄ�n,juàn 0x74FA:cháng 0x74FB:chÄ« 0x74FD:dàng 0x74FE:mÄ›ng 0x74FF:bù,pÇ’u 0x7500:zhuì 0x7501:píng 0x7502:biÄ�n 0x7503:zhòu 0x7504:zhÄ“n,zhèn,juàn 0x7506:cí 0x7507:yÄ«ng 0x7508:qì 0x7509:xián 0x750A:lÇ’u 0x750B:dì 0x750C:Å�u,Ç’u 0x750D:méng 0x750E:zhuÄ�n,chuán 0x750F:bèng 0x7510:lìn 0x7511:zèng 0x7512:wÇ” 0x7513:pì 0x7514:dÄ�n,dàn 0x7515:wèng 0x7516:yÄ«ng 0x7517:yÇŽn 0x7518:gÄ�n,hÄ�n 0x7519:dài 0x751A:shén,shèn 0x751B:tián 0x751C:tián 0x751D:hán 0x751E:cháng 0x751F:shÄ“ng 0x7520:qíng 0x7521:shÄ“n 0x7522:chÇŽn 0x7523:chÇŽn 0x7524:ruí 0x7525:shÄ“ng 0x7526:sÅ« 0x7527:shÄ“n 0x7528:yòng 0x7529:shuÇŽi 0x752A:lù 0x752B:fÇ”,fÅ«,pÇ” 0x752C:yÇ’ng,dòng 0x752D:béng,qì 0x752E:fèng 0x752F:níng,nìng 0x7530:tián 0x7531:yóu,yÄ�o 0x7532:jiÇŽ 0x7533:shÄ“n 0x7534:zhá,yóu 0x7535:diàn 0x7536:fú 0x7537:nán 0x7538:diÄ�n,diàn,tián,shèng,yìng 0x7539:pÄ«ng 0x753A:tÄ«ng,tÇ�ng,zhèng,tiÇŽn,dÄ«ng 0x753B:huà 0x753C:tÇ�ng 0x753D:zhèn,quÇŽn,zhùn 0x753E:zÄ�i,zÄ« 0x753F:méng,máng 0x7540:bì 0x7541:bì 0x7542:liù 0x7543:xún 0x7544:liú 0x7545:chàng 0x7546:mÇ” 0x7547:yún,tián 0x7548:fàn 0x7549:fú 0x754A:gÄ“ng 0x754B:tián 0x754C:jiè 0x754D:jiè 0x754E:quÇŽn 0x754F:wèi,wÄ“i,wÄ›i 0x7550:fú,bì 0x7551:tián 0x7552:mÇ” 0x7553:duÅ� 0x7554:pàn 0x7555:jiÄ�ng 0x7556:wÄ� 0x7557:dá,fú 0x7558:nán 0x7559:liú,liù,liÇ” 0x755A:bÄ›n 0x755B:zhÄ›n 0x755C:chù,xù 0x755D:mÇ”,mÇ’u 0x755E:mÇ” 0x755F:cè,jì 0x7560:tián 0x7561:gÄ�i 0x7562:bì 0x7563:dá 0x7564:zhì,chóu,shì 0x7565:lüè 0x7566:qí 0x7567:lüè 0x7568:pÄ�n,fÄ�n 0x7569:yÄ« 0x756A:fÄ�n,fán,bÅ�,pó,pÄ�n,pán,pàn,pí 0x756B:huà 0x756C:shÄ“,yú 0x756D:yú 0x756E:mÇ” 0x756F:jùn 0x7570:yì 0x7571:liú 0x7572:shÄ“ 0x7573:dié 0x7574:chóu 0x7575:huà 0x7576:dÄ�ng,dàng,dang 0x7577:zhuì 0x7578:jÄ«,qí 0x7579:wÇŽn,yuÇŽn 0x757A:jiÄ�ng,jiàng 0x757B:chéng 0x757C:chàng 0x757D:tÇ”n,tuÇŽn 0x757E:léi 0x757F:jÄ« 0x7580:chÄ� 0x7581:liú 0x7582:dié 0x7583:tuÇŽn 0x7584:lìn,lín 0x7585:jiÄ�ng 0x7586:jiÄ�ng,jiàng 0x7587:chóu 0x7588:pì 0x7589:dié 0x758A:dié 0x758B:pÇ�,shÅ«,yÇŽ 0x758C:jié,qiè 0x758D:dàn 0x758E:shÅ« 0x758F:shÅ« 0x7590:zhì,dì 0x7591:yí,níng 0x7592:nè 0x7593:nÇŽi 0x7594:dÄ«ng,nè 0x7595:bÇ� 0x7596:jiÄ“ 0x7597:liáo 0x7598:gÄ�ng,gÅ�ng 0x7599:gÄ“,yì 0x759A:jiù 0x759B:zhÇ’u 0x759C:xià 0x759D:shàn 0x759E:xÅ« 0x759F:nüè,yào 0x75A0:lì 0x75A1:yáng 0x75A2:chèn 0x75A3:yóu,yòu 0x75A4:bÄ� 0x75A5:jiè 0x75A6:jué,xuè 0x75A7:qí 0x75A8:xiÄ�,yá 0x75A9:cuì 0x75AA:bì 0x75AB:yì 0x75AC:lì 0x75AD:zòng 0x75AE:chuÄ�ng 0x75AF:fÄ“ng 0x75B0:zhù 0x75B1:pào 0x75B2:pí 0x75B3:gÄ�n 0x75B4:kÄ“,Ä“,qià 0x75B5:cÄ«,zÄ«,zhài,jì 0x75B6:xuÄ“ 0x75B7:zhÄ« 0x75B8:dÇŽn,da 0x75B9:zhÄ›n,chèn 0x75BA:fá,biÇŽn 0x75BB:zhÇ� 0x75BC:téng 0x75BD:jÅ«,jÇ” 0x75BE:jí 0x75BF:fèi 0x75C0:jÅ«,gÅ�u 0x75C1:shÄ�n 0x75C2:jiÄ� 0x75C3:xuán 0x75C4:zhà 0x75C5:bìng 0x75C6:niè,nì,niÇŽn 0x75C7:zhèng,zhÄ“ng 0x75C8:yÅ�ng 0x75C9:jìng 0x75CA:quán 0x75CB:téng,chóng 0x75CC:tÅ�ng,tóng 0x75CD:yí 0x75CE:jiÄ“ 0x75CF:wÄ›i,yòu,yù 0x75D0:huí 0x75D1:tÄ�n,shÇ� 0x75D2:yÇŽng,yáng 0x75D3:chì 0x75D4:zhì 0x75D5:hén,gèn 0x75D6:yÇŽ 0x75D7:mèi 0x75D8:dòu 0x75D9:jìng 0x75DA:xiÄ�o 0x75DB:tòng 0x75DC:tÅ« 0x75DD:máng 0x75DE:pÇ� 0x75DF:xiÄ�o 0x75E0:suÄ�n 0x75E1:fÅ«,pÅ«,pù 0x75E2:lì 0x75E3:zhì 0x75E4:cuó 0x75E5:duó 0x75E6:wù,pÄ« 0x75E7:shÄ� 0x75E8:láo 0x75E9:shòu 0x75EA:huàn,tuÇŽn 0x75EB:xián 0x75EC:yì 0x75ED:bÄ“ng,péng,bìng 0x75EE:zhàng 0x75EF:guÇŽn 0x75F0:tán 0x75F1:fèi,féi,fÄ›i 0x75F2:má 0x75F3:lín,lìn 0x75F4:chÄ« 0x75F5:jì 0x75F6:tiÇŽn,diÇŽn 0x75F7:Ä�n,yè,è 0x75F8:chì 0x75F9:bì 0x75FA:bì 0x75FB:mín 0x75FC:gù 0x75FD:duÄ« 0x75FE:Ä“,kÄ“ 0x75FF:wÄ›i 0x7600:yÅ« 0x7601:cuì 0x7602:yÇŽ 0x7603:zhú 0x7604:cù 0x7605:dÄ�n,dàn 0x7606:shèn 0x7607:zhÇ’ng 0x7608:chì,zhì 0x7609:yù 0x760A:hóu 0x760B:fÄ“ng 0x760C:là 0x760D:yáng,dàng 0x760E:chén 0x760F:tú 0x7610:yÇ”,yù 0x7611:guÅ� 0x7612:wén 0x7613:huàn 0x7614:kù 0x7615:jiÇŽ,xiÄ� 0x7616:yÄ«n,yìn 0x7617:yì 0x7618:lòu 0x7619:sào 0x761A:jué 0x761B:chì 0x761C:xÄ« 0x761D:guÄ�n 0x761E:yì 0x761F:wÄ“n,wò,yÅ«n 0x7620:jí 0x7621:chuÄ�ng 0x7622:bÄ�n 0x7623:huì,lÄ›i 0x7624:liú 0x7625:chài,cuó 0x7626:shòu 0x7627:nüè,yào 0x7628:diÄ�n,chÄ“n 0x7629:da,dá 0x762A:biÄ›,biÄ“ 0x762B:tÄ�n 0x762C:zhàng 0x762D:biÄ�o 0x762E:shèn 0x762F:cù 0x7630:luÇ’ 0x7631:yì 0x7632:zòng 0x7633:chÅ�u,lù 0x7634:zhàng 0x7635:zhài,jì 0x7636:sòu 0x7637:sè 0x7638:qué 0x7639:diào 0x763A:lòu 0x763B:lòu,lǘ 0x763C:mò 0x763D:qín 0x763E:yÇ�n 0x763F:yÇ�ng 0x7640:huáng 0x7641:fú 0x7642:liáo,liào,shuò 0x7643:lóng 0x7644:qiáo 0x7645:liú 0x7646:láo,lào 0x7647:xián 0x7648:fèi 0x7649:dÄ�n,dàn,dÇŽn,tán 0x764A:yìn 0x764B:hè 0x764C:ái,yán 0x764D:bÄ�n 0x764E:xián 0x764F:guÄ�n 0x7650:guì,wÄ“i 0x7651:nòng,nóng 0x7652:yù 0x7653:wéi 0x7654:yì 0x7655:yÅ�ng 0x7656:pÇ� 0x7657:lÄ›i 0x7658:lì,lài 0x7659:shÇ” 0x765A:dàn 0x765B:lÇ�n,bÇ�ng 0x765C:diàn 0x765D:lÇ�n 0x765E:lài 0x765F:biÄ›,bié,biÄ“ 0x7660:jì 0x7661:chÄ« 0x7662:yÇŽng 0x7663:xuÇŽn 0x7664:jiÄ“ 0x7665:zhÄ“ng 0x7666:me 0x7667:lì 0x7668:huò 0x7669:lài,là 0x766A:jÄ« 0x766B:diÄ�n 0x766C:xuÇŽn 0x766D:yÇ�ng 0x766E:yÇ�n 0x766F:qú 0x7670:yÅ�ng 0x7671:tÄ�n 0x7672:diÄ�n 0x7673:luÇ’ 0x7674:luán 0x7675:luán 0x7676:bÅ� 0x7677:bÅ� 0x7678:guÇ� 0x7679:bá 0x767A:fÄ� 0x767B:dÄ“ng,dé 0x767C:fÄ�,bÅ� 0x767D:bái,bó 0x767E:bÇŽi,bó,mò 0x767F:qié 0x7680:jí,xiÄ�ng,bÄ« 0x7681:zào 0x7682:zào 0x7683:mào 0x7684:de,dì,dí 0x7685:pÄ�,bà 0x7686:jiÄ“ 0x7687:huáng,wÇŽng 0x7688:guÄ« 0x7689:cÇ� 0x768A:líng 0x768B:gÄ�o,háo,gÅ« 0x768C:mò 0x768D:jí 0x768E:jiÇŽo 0x768F:pÄ›ng 0x7690:gÄ�o 0x7691:ái 0x7692:é 0x7693:hào,huÄ« 0x7694:hàn 0x7695:bì 0x7696:wÇŽn,huàn 0x7697:chóu 0x7698:qiàn 0x7699:xÄ« 0x769A:ái 0x769B:xiÇŽo,jiÇŽo,pò 0x769C:hào 0x769D:huàng 0x769E:hào 0x769F:zé 0x76A0:cuÇ� 0x76A1:hào 0x76A2:xiÇŽo 0x76A3:yè 0x76A4:pó,pán 0x76A5:hào 0x76A6:jiÇŽo 0x76A7:ài 0x76A8:xÄ«ng 0x76A9:huàng 0x76AA:lì,luò,bÅ� 0x76AB:piÇŽo 0x76AC:hé 0x76AD:jiào 0x76AE:pí 0x76AF:gÇŽn 0x76B0:pào 0x76B1:zhòu 0x76B2:jÅ«n 0x76B3:qiú 0x76B4:cÅ«n 0x76B5:què 0x76B6:zhÄ� 0x76B7:gÇ” 0x76B8:jÅ«n 0x76B9:jÅ«n 0x76BA:zhòu,zhÅ�u 0x76BB:zhÄ�,cÇ” 0x76BC:gÇ” 0x76BD:zhÄ�o,zhÇŽn,dÇŽn 0x76BE:dú 0x76BF:mÇ�n,mÇ�ng 0x76C0:qÇ� 0x76C1:yíng 0x76C2:yú 0x76C3:bÄ“i 0x76C4:zhÄ�o 0x76C5:zhÅ�ng,chÅ�ng 0x76C6:pén 0x76C7:hé 0x76C8:yíng 0x76C9:hé 0x76CA:yì 0x76CB:bÅ� 0x76CC:wÇŽn 0x76CD:hé,kÄ› 0x76CE:àng 0x76CF:zhÇŽn 0x76D0:yán 0x76D1:jiÄ�n,jiàn 0x76D2:hé,Ä�n 0x76D3:yÅ«,wÅ« 0x76D4:kuÄ« 0x76D5:fàn 0x76D6:gài,gÄ› 0x76D7:dào 0x76D8:pán 0x76D9:fÇ” 0x76DA:qiú 0x76DB:shèng,chéng 0x76DC:dào 0x76DD:lù 0x76DE:zhÇŽn 0x76DF:méng,mèng,míng 0x76E0:lí 0x76E1:jÇ�n,jìn 0x76E2:xù 0x76E3:jiÄ�n,jiàn,kàn 0x76E4:pán,xuán 0x76E5:guàn 0x76E6:Ä�n 0x76E7:lú,lǘ,léi 0x76E8:xÇ” 0x76E9:zhÅ�u,chóu 0x76EA:dàng 0x76EB:Ä�n 0x76EC:gÇ”,gù,gÅ« 0x76ED:lì 0x76EE:mù 0x76EF:dÄ«ng,chéng 0x76F0:gàn 0x76F1:xÅ« 0x76F2:máng 0x76F3:wàng,máng 0x76F4:zhí 0x76F5:qì 0x76F6:yuÇŽn 0x76F7:tián,xián,mín 0x76F8:xiÄ�ng,xiàng 0x76F9:dÇ”n,zhÅ«n 0x76FA:xÄ«n 0x76FB:xì,pÇŽn 0x76FC:pàn,fén 0x76FD:fÄ“ng 0x76FE:dùn,shÇ”n,yÇ”n 0x76FF:mín 0x7700:míng 0x7701:shÄ›ng,xÇ�ng,xiÇŽn 0x7702:shì 0x7703:yún,hùn 0x7704:miÇŽn,miàn 0x7705:pÄ�n 0x7706:fÇŽng 0x7707:miÇŽo,miào 0x7708:dÄ�n,chÄ›n 0x7709:méi 0x770A:mào,mèi 0x770B:kàn,kÄ�n 0x770C:xiàn 0x770D:kÅ�u 0x770E:shì 0x770F:yÄ�ng,yÇŽng,yìng 0x7710:zhÄ“ng 0x7711:yÇŽo,Ä�o,ÇŽo 0x7712:shÄ“n 0x7713:huò 0x7714:dà 0x7715:zhÄ›n 0x7716:kuàng 0x7717:jÅ«,xÅ«,kÅ�u 0x7718:shèn 0x7719:yí,chì 0x771A:shÄ›ng 0x771B:mèi 0x771C:mò,miè 0x771D:zhù 0x771E:zhÄ“n 0x771F:zhÄ“n 0x7720:mián,miÇŽn,mÇ�n 0x7721:shì 0x7722:yuÄ�n 0x7723:dié,chÅ�u 0x7724:nì 0x7725:zì 0x7726:zì 0x7727:chÇŽo 0x7728:zhÇŽ 0x7729:xuàn,huàn,juàn 0x772A:bÇ�ng,fÇŽng 0x772B:mÇ�,pàn 0x772C:lóng 0x772D:suÄ«,huÄ«,xié,wèi 0x772E:tóng 0x772F:mÄ«,mÇ�,mì,mí 0x7730:diè,zhì 0x7731:dì 0x7732:nè 0x7733:míng 0x7734:xuàn,shùn,xún 0x7735:chÄ« 0x7736:kuàng 0x7737:juàn 0x7738:móu 0x7739:zhèn 0x773A:tiào 0x773B:yáng 0x773C:yÇŽn,wÄ›n 0x773D:mò,mì 0x773E:zhòng 0x773F:mò 0x7740:zhe,zhuó,zhÄ�o,zháo 0x7741:zhÄ“ng 0x7742:méi 0x7743:suÅ�,jùn,juÄ�n 0x7744:shào,qiáo,xiÄ�o 0x7745:hàn 0x7746:huàn,huÇŽn 0x7747:dì,tÄ«,tí 0x7748:chÄ›ng 0x7749:cuó,zhuài 0x774A:juàn 0x774B:é 0x774C:mÇŽn 0x774D:xiàn 0x774E:xÄ« 0x774F:kùn 0x7750:lài 0x7751:jiÇŽn 0x7752:shÇŽn 0x7753:tiÇŽn 0x7754:gùn,huán,lÇ”n 0x7755:wÇŽn,wàn,wÄ�n 0x7756:lèng,chÄ“ng 0x7757:shì 0x7758:qióng 0x7759:liè 0x775A:yá 0x775B:jÄ«ng,jÇ�ng 0x775C:zhÄ“ng 0x775D:lí 0x775E:lài 0x775F:suì,zuì 0x7760:juàn 0x7761:shuì 0x7762:suÄ«,huÄ«,wÄ›i 0x7763:dÅ« 0x7764:bì 0x7765:pì 0x7766:mù 0x7767:hÅ«n 0x7768:nì 0x7769:lù 0x776A:yì,zé,dù,gÄ�o 0x776B:jié,shè 0x776C:cÇŽi 0x776D:zhÇ’u 0x776E:yú 0x776F:hÅ«n 0x7770:mà 0x7771:xià,xiá 0x7772:xÇ�ng,xìng 0x7773:huÄ« 0x7774:gùn 0x7775:zÄ�i 0x7776:chÇ”n 0x7777:jiÄ�n 0x7778:mèi 0x7779:dÇ” 0x777A:hóu 0x777B:xuÄ�n 0x777C:tiàn 0x777D:kuí,kuì,jì 0x777E:gÄ�o,hào 0x777F:ruì 0x7780:mào,wú 0x7781:xù 0x7782:fá 0x7783:wò 0x7784:miáo 0x7785:chÇ’u 0x7786:kuì 0x7787:mÄ«,mÇ�,mì 0x7788:wÄ›ng 0x7789:kòu,jì 0x778A:dàng 0x778B:chÄ“n,tián,tiàn,shèn 0x778C:kÄ“ 0x778D:sÇ’u 0x778E:xiÄ� 0x778F:qióng,huán 0x7790:mò 0x7791:míng,méng,mián 0x7792:mán 0x7793:shuì 0x7794:zé 0x7795:zhàng 0x7796:yì 0x7797:diÄ�o,dÅ�u 0x7798:kÅ�u 0x7799:mò 0x779A:shùn 0x779B:cÅ�ng 0x779C:lÅ�u,lóu,lǘ 0x779D:chÄ« 0x779E:mán,mén,mèn 0x779F:piÇŽo,piào,piÄ�o 0x77A0:chÄ“ng,zhèng 0x77A1:guÄ« 0x77A2:méng,máng,mèng 0x77A3:wàn 0x77A4:rún,shùn 0x77A5:piÄ“,bì 0x77A6:xÄ« 0x77A7:qiáo 0x77A8:pú 0x77A9:zhÇ” 0x77AA:dèng 0x77AB:shÄ›n 0x77AC:shùn 0x77AD:liÇŽo,liào 0x77AE:chè 0x77AF:xián,jiàn 0x77B0:kàn 0x77B1:yè 0x77B2:xù,xuè 0x77B3:tóng 0x77B4:móu,wÇ”,mí 0x77B5:lín,lìn,lián 0x77B6:guì,wèi,kuì 0x77B7:jiàn,xián 0x77B8:yè 0x77B9:ài 0x77BA:huì 0x77BB:zhÄ�n 0x77BC:jiÇŽn 0x77BD:gÇ” 0x77BE:zhào 0x77BF:qú,jù,jí 0x77C0:méi 0x77C1:chÇ’u 0x77C2:sào 0x77C3:nÇ�ng,chÄ“ng 0x77C4:xÅ«n 0x77C5:yào 0x77C6:huò,xuÄ“,yuè,wò 0x77C7:méng,mÄ›ng,mÄ“ng 0x77C8:mián 0x77C9:pín 0x77CA:mián 0x77CB:lÄ›i 0x77CC:kuàng,guÅ� 0x77CD:jué 0x77CE:xuÄ�n,xuàn 0x77CF:mián 0x77D0:huò 0x77D1:lú 0x77D2:méng 0x77D3:lóng 0x77D4:guàn,quán 0x77D5:mÇŽn,mán 0x77D6:xÇ�,lí 0x77D7:chù 0x77D8:tÇŽng 0x77D9:kàn 0x77DA:zhÇ” 0x77DB:máo 0x77DC:jÄ«n,qín,guÄ�n 0x77DD:jÄ«n 0x77DE:yù,jué,xù 0x77DF:shuò 0x77E0:zé,zhuó 0x77E1:jué 0x77E2:shÇ� 0x77E3:yÇ�,xián 0x77E4:shÄ›n 0x77E5:zhÄ«,zhì 0x77E6:hóu 0x77E7:shÄ›n 0x77E8:yÇ�ng 0x77E9:jÇ” 0x77EA:zhÅ�u 0x77EB:jiÇŽo,jiáo 0x77EC:cuó 0x77ED:duÇŽn 0x77EE:ÇŽi 0x77EF:jiÇŽo,jiÄ�o,jiáo 0x77F0:zÄ“ng 0x77F1:yuÄ“ 0x77F2:bà 0x77F3:shí,dàn 0x77F4:dìng 0x77F5:qì,diÄ�o 0x77F6:jÄ« 0x77F7:zÇ� 0x77F8:gÄ�n,gàn,gÇŽn,hàn 0x77F9:wù 0x77FA:zhé,dÄ� 0x77FB:kÅ«,qià 0x77FC:gÄ�ng,kòng,qiÄ�ng 0x77FD:xì,xÄ« 0x77FE:fán 0x77FF:kuàng 0x7800:dàng 0x7801:mÇŽ 0x7802:shÄ� 0x7803:dÄ�n 0x7804:jué 0x7805:lì 0x7806:fÅ« 0x7807:mín 0x7808:Ä› 0x7809:huò,xÅ«,huÄ� 0x780A:kÄ�ng,kàng 0x780B:zhÇ� 0x780C:qì,qiè 0x780D:kÇŽn 0x780E:jiè 0x780F:bÄ«n,fÄ“n,pÄ«n 0x7810:è 0x7811:yà 0x7812:pÄ« 0x7813:zhé 0x7814:yán,yàn,xíng 0x7815:suì 0x7816:zhuÄ�n 0x7817:chÄ“ 0x7818:dùn 0x7819:wÇŽ 0x781A:yàn 0x781B:jÄ«n 0x781C:fÄ“ng 0x781D:fá,jié,gé,fÇŽ 0x781E:mò 0x781F:zhÇŽ,zhà,zuó 0x7820:jÅ«,zÅ« 0x7821:yù 0x7822:kÄ“,luÇ’ 0x7823:tuó 0x7824:tuó 0x7825:dÇ�,zhÇ� 0x7826:zhài 0x7827:zhÄ“n 0x7828:è 0x7829:fú,fèi 0x782A:mÇ” 0x782B:zhù,zhÇ” 0x782C:lá,lì,lÄ� 0x782D:biÄ�n 0x782E:nÇ”,nú 0x782F:pÄ«ng 0x7830:pÄ“ng,pÄ«ng,pèng 0x7831:líng 0x7832:pào,báo,pÅ« 0x7833:lè 0x7834:pò 0x7835:bÅ�,è 0x7836:pò 0x7837:shÄ“n 0x7838:zá 0x7839:ài 0x783A:lì 0x783B:lóng 0x783C:tóng 0x783D:yòng 0x783E:lì 0x783F:kuàng 0x7840:chÇ” 0x7841:kÄ“ng 0x7842:quán 0x7843:zhÅ« 0x7844:kuÄ�ng,guÄ�ng 0x7845:guÄ«,hè 0x7846:è 0x7847:náo 0x7848:qià 0x7849:lù 0x784A:wÄ›i,guì 0x784B:ài 0x784C:gè,luò,lì 0x784D:xiàn,kèn,kÄ“ng,yÇ�n 0x784E:xíng,kÄ“ng 0x784F:yán,yàn 0x7850:dòng,tóng,liú 0x7851:pÄ“ng,píng 0x7852:xÄ« 0x7853:lÇŽo 0x7854:hóng 0x7855:shuò 0x7856:xiá 0x7857:qiÄ�o 0x7858:qing 0x7859:wéi,wèi 0x785A:qiáo 0x785B:yì 0x785C:kÄ“ng,qìng 0x785D:xiÄ�o,qiào 0x785E:què,kè,kù 0x785F:chàn 0x7860:láng 0x7861:hÅ�ng 0x7862:yú 0x7863:xiÄ�o 0x7864:xiá 0x7865:mÇŽng,bàng 0x7866:luò,lòng 0x7867:yÇ’ng,tóng 0x7868:chÄ“ 0x7869:chè 0x786A:wò,é,yÇ� 0x786B:liú,chù 0x786C:yìng,gÄ›ng 0x786D:máng 0x786E:què 0x786F:yàn 0x7870:shÄ� 0x7871:kÇ”n 0x7872:yù 0x7873:chì 0x7874:huÄ� 0x7875:lÇ” 0x7876:chÄ›n,cén 0x7877:jiÇŽn 0x7878:nüè 0x7879:sÅ�ng 0x787A:zhuó 0x787B:kÄ“ng,kÄ›ng 0x787C:péng,pÄ“ng 0x787D:yÄ�n,yÇŽn 0x787E:zhuì,duÇ’ 0x787F:kÅ�ng 0x7880:chéng 0x7881:qí 0x7882:zòng,cóng 0x7883:qìng 0x7884:lín 0x7885:jÅ«n 0x7886:bÅ� 0x7887:dìng 0x7888:mín 0x7889:diÄ�o 0x788A:jiÄ�n,zhàn 0x788B:hè 0x788C:lù,luò,liù 0x788D:ài 0x788E:suì 0x788F:què,xÄ« 0x7890:léng 0x7891:bÄ“i 0x7892:yín 0x7893:duì,duÄ« 0x7894:wÇ” 0x7895:qí,qÄ«,qÇ� 0x7896:lÇ”n,lùn,lún 0x7897:wÇŽn 0x7898:diÇŽn 0x7899:náo,gÄ�ng 0x789A:bèi 0x789B:qì 0x789C:chÄ›n 0x789D:ruÇŽn 0x789E:yán 0x789F:dié,shé 0x78A0:dìng 0x78A1:dú,zhóu 0x78A2:tuó 0x78A3:jié,kÄ›,yà 0x78A4:yÄ«ng 0x78A5:biÇŽn 0x78A6:kè 0x78A7:bì 0x78A8:wèi,wÄ›i 0x78A9:shuò 0x78AA:zhÄ“n,ÇŽn,kàn 0x78AB:duàn 0x78AC:xiá 0x78AD:dàng 0x78AE:tí,dÄ« 0x78AF:nÇŽo 0x78B0:pèng 0x78B1:jiÇŽn,xián 0x78B2:dì 0x78B3:tàn 0x78B4:chá,chÄ� 0x78B5:tián 0x78B6:qì 0x78B7:dùn 0x78B8:fÄ“ng 0x78B9:xuàn 0x78BA:què 0x78BB:què,qiÄ�o 0x78BC:mÇŽ 0x78BD:gÅ�ng 0x78BE:niÇŽn 0x78BF:sù,xiè 0x78C0:é 0x78C1:cí 0x78C2:liú,liù 0x78C3:sÄ«,tí 0x78C4:táng 0x78C5:bàng,pÄ�ng,páng 0x78C6:huá,kÄ›,gÅ« 0x78C7:pÄ« 0x78C8:wÄ›i,kuÇ� 0x78C9:sÇŽng 0x78CA:lÄ›i 0x78CB:cuÅ� 0x78CC:tián 0x78CD:xiá,qià,yà 0x78CE:xÄ«,qÄ« 0x78CF:lián,qiÄ�n 0x78D0:pán 0x78D1:wéi,wèi,ái,gài 0x78D2:yÇ”n 0x78D3:duÄ«,zhuì 0x78D4:zhé 0x78D5:kÄ“,kÄ› 0x78D6:lá,lÄ� 0x78D7:zhuÄ�n 0x78D8:yáo 0x78D9:gÇ”n 0x78DA:zhuÄ�n,tuán,tuó 0x78DB:chán 0x78DC:qì,qÄ« 0x78DD:áo,qiÄ�o 0x78DE:pÄ“ng 0x78DF:liù,lù 0x78E0:lÇ” 0x78E1:kàn 0x78E2:chuÇŽng 0x78E3:chÄ›n,cà 0x78E4:yÇ�n,yÄ«n 0x78E5:lÄ›i,léi 0x78E6:biÄ�o 0x78E7:qì 0x78E8:mó,mò 0x78E9:qì,zhú 0x78EA:cuÄ« 0x78EB:zÅ�ng 0x78EC:qìng,qÇ�ng 0x78ED:chuò 0x78EE:lún 0x78EF:jÄ« 0x78F0:shàn 0x78F1:láo 0x78F2:qú 0x78F3:zÄ“ng 0x78F4:dèng,dÄ“ng 0x78F5:jiàn 0x78F6:xì 0x78F7:lín,lìn,lÇ�n,líng 0x78F8:dìng 0x78F9:tán,diàn 0x78FA:huáng,kuàng,gÇ’ng 0x78FB:pán,bÅ� 0x78FC:zá,shé 0x78FD:qiÄ�o,qiÇŽo,qiào,áo 0x78FE:dÄ« 0x78FF:lì 0x7900:jiàn 0x7901:jiÄ�o 0x7902:xÄ« 0x7903:zhÇŽng 0x7904:qiáo 0x7905:dÅ«n 0x7906:jiÇŽn,xiÇŽn 0x7907:yù 0x7908:zhuì 0x7909:hé,qiÄ�o,qiào,áo 0x790A:kè,huò 0x790B:zé 0x790C:léi,lèi,lÄ›i 0x790D:jié 0x790E:chÇ” 0x790F:yè 0x7910:què,hú 0x7911:dàng 0x7912:yÇ� 0x7913:jiÄ�ng 0x7914:pÄ« 0x7915:pÄ« 0x7916:yù 0x7917:pÄ«n 0x7918:è,qì 0x7919:ài,yí 0x791A:kÄ“ 0x791B:jiÄ�n 0x791C:yù 0x791D:ruÇŽn 0x791E:méng 0x791F:pào 0x7920:cí 0x7921:bó 0x7922:yÇŽng 0x7923:mà 0x7924:cÇŽ 0x7925:xián,xín 0x7926:kuàng,gÇ’ng 0x7927:léi,lèi,lÄ›i 0x7928:lÄ›i 0x7929:zhì 0x792A:lì 0x792B:lì,luò 0x792C:fán 0x792D:què 0x792E:pào 0x792F:yÄ«ng 0x7930:lì 0x7931:lóng 0x7932:lóng 0x7933:mò 0x7934:bó 0x7935:shuÄ�ng 0x7936:guàn 0x7937:lán 0x7938:cÇŽ 0x7939:yán,yÇŽn 0x793A:shì,qí,zhì,shí 0x793B:shì 0x793C:lÇ� 0x793D:réng 0x793E:shè 0x793F:yuè 0x7940:sì 0x7941:qí,zhÇ� 0x7942:tÄ� 0x7943:mà 0x7944:xiè 0x7945:yÄ�o 0x7946:xiÄ�n 0x7947:qí,chí,zhÄ«,zhÇ� 0x7948:qí,guÇ� 0x7949:zhÇ� 0x794A:bÄ“ng,fÄ�ng 0x794B:duì 0x794C:zhòng,chÅ�ng 0x794D:rèn 0x794E:yÄ« 0x794F:shí 0x7950:yòu 0x7951:zhì 0x7952:tiáo 0x7953:fú,fèi 0x7954:fù 0x7955:mì,bì 0x7956:zÇ”,jiÄ“ 0x7957:zhÄ« 0x7958:suàn 0x7959:mèi 0x795A:zuò 0x795B:qÅ« 0x795C:hù 0x795D:zhù,zhòu,chù 0x795E:shén,shÄ“n 0x795F:suì 0x7960:cí,sì 0x7961:chái 0x7962:mí,nÇ� 0x7963:lÇš 0x7964:yÇ” 0x7965:xiáng 0x7966:wú 0x7967:tiÄ�o 0x7968:piào,piÄ�o 0x7969:zhù 0x796A:guÇ� 0x796B:xiá 0x796C:zhÄ« 0x796D:jì,zhài 0x796E:gào 0x796F:zhÄ“n 0x7970:gào 0x7971:shuì,lèi 0x7972:jìn 0x7973:shèn 0x7974:gÄ�i 0x7975:kÇ”n 0x7976:dì 0x7977:dÇŽo 0x7978:huò 0x7979:táo 0x797A:qí 0x797B:gù 0x797C:guàn 0x797D:zuì 0x797E:líng 0x797F:lù 0x7980:bÇ�ng 0x7981:jìn,jÄ«n 0x7982:dÇŽo 0x7983:zhí 0x7984:lù 0x7985:chán,shàn 0x7986:bì 0x7987:zhÄ› 0x7988:huÄ« 0x7989:yÇ’u 0x798A:xì 0x798B:yÄ«n 0x798C:zÄ« 0x798D:huò 0x798E:zhÄ“n,zhÄ“ng 0x798F:fú,fù 0x7990:yuàn 0x7991:wú 0x7992:xiÇŽn 0x7993:yáng,shÄ�ng 0x7994:zhÄ« 0x7995:yÄ« 0x7996:méi 0x7997:sÄ« 0x7998:dì 0x7999:bèi 0x799A:zhuó 0x799B:zhÄ“n 0x799C:yÇ’ng,yíng 0x799D:jì 0x799E:gào 0x799F:táng 0x79A0:sÄ« 0x79A1:mà 0x79A2:tà 0x79A3:fù 0x79A4:xuÄ�n 0x79A5:qí 0x79A6:yù 0x79A7:xÇ�,xÄ« 0x79A8:jÄ«,jì,qí 0x79A9:sì 0x79AA:chán,shàn,tán 0x79AB:dàn 0x79AC:guì 0x79AD:suì 0x79AE:lÇ� 0x79AF:nóng 0x79B0:mí,nÇ�,xiÇŽn 0x79B1:dÇŽo 0x79B2:lì 0x79B3:ráng 0x79B4:yuè 0x79B5:tí 0x79B6:zàn 0x79B7:lèi 0x79B8:róu 0x79B9:yÇ” 0x79BA:yú,yù 0x79BB:lí,chÄ« 0x79BC:xiè 0x79BD:qín 0x79BE:hé 0x79BF:tÅ« 0x79C0:xiù 0x79C1:sÄ« 0x79C2:rén 0x79C3:tÅ« 0x79C4:zÇ�,zì 0x79C5:chá,ná 0x79C6:gÇŽn 0x79C7:yì,zhí 0x79C8:xiÄ�n 0x79C9:bÇ�ng 0x79CA:nián 0x79CB:qiÅ« 0x79CC:qiÅ« 0x79CD:zhÇ’ng,chóng,zhòng 0x79CE:fèn 0x79CF:hào,mào 0x79D0:yún 0x79D1:kÄ“,kè 0x79D2:miÇŽo 0x79D3:zhÄ« 0x79D4:jÄ«ng 0x79D5:bÇ� 0x79D6:zhÄ« 0x79D7:yù 0x79D8:mì,bì,bié 0x79D9:kù 0x79DA:bàn 0x79DB:pÄ« 0x79DC:ní,nì 0x79DD:lì 0x79DE:yóu 0x79DF:zÅ«,jÅ« 0x79E0:pÄ« 0x79E1:bó 0x79E2:líng 0x79E3:mò 0x79E4:chèng,chÄ“ng,píng 0x79E5:nián 0x79E6:qín 0x79E7:yÄ�ng 0x79E8:zuó 0x79E9:zhì 0x79EA:zhÄ« 0x79EB:shú 0x79EC:jù 0x79ED:zÇ� 0x79EE:huó 0x79EF:jÄ«,zhÇ� 0x79F0:chÄ“ng,chèn,chèng 0x79F1:tóng 0x79F2:zhì,shì 0x79F3:huó,kuò 0x79F4:hé,gé 0x79F5:yÄ«n 0x79F6:zÄ« 0x79F7:zhì 0x79F8:jiÄ“,jí 0x79F9:rÄ›n 0x79FA:dù 0x79FB:yí,chÇ�,yì 0x79FC:zhÅ« 0x79FD:huì 0x79FE:nóng 0x79FF:fù,bÅ«,pÅ« 0x7A00:xÄ« 0x7A01:gÇŽo 0x7A02:láng 0x7A03:fÅ« 0x7A04:xùn,zè 0x7A05:shuì 0x7A06:lÇš 0x7A07:kÇ”n 0x7A08:gÇŽn 0x7A09:jÄ«ng 0x7A0A:tí 0x7A0B:chéng 0x7A0C:tú,shÇ” 0x7A0D:shÄ�o,shào 0x7A0E:shuì,tuÅ�,tuì,tuàn 0x7A0F:yà 0x7A10:lÇ”n 0x7A11:lù 0x7A12:gù 0x7A13:zuó 0x7A14:rÄ›n 0x7A15:zhùn,zhÇ”n 0x7A16:bàng 0x7A17:bài 0x7A18:jÄ«,qí 0x7A19:zhÄ«,zhì 0x7A1A:zhì 0x7A1B:kÇ”n 0x7A1C:léng,lèng,líng 0x7A1D:péng 0x7A1E:kÄ“,huà 0x7A1F:bÇ�ng,lÇ�n 0x7A20:chóu,tiáo,diào 0x7A21:zuì,zú,sÅ« 0x7A22:yù 0x7A23:sÅ« 0x7A24:lüè 0x7A25:xiÄ�ng 0x7A26:yÄ« 0x7A27:xì,qiè 0x7A28:biÇŽn 0x7A29:jì 0x7A2A:fú 0x7A2B:pì,bì 0x7A2C:nuò 0x7A2D:jiÄ“ 0x7A2E:zhÇ’ng,chóng,zhòng 0x7A2F:zÅ�ng,zÇ’ng 0x7A30:xÇ”,xÅ« 0x7A31:chÄ“ng,chèn,chèng 0x7A32:dào 0x7A33:wÄ›n 0x7A34:xián,jiÄ�n,liàn,liÇŽn 0x7A35:zÄ«,jiÅ« 0x7A36:yù 0x7A37:jì,zè 0x7A38:xù 0x7A39:zhÄ›n,zhÄ“n,biÄ�n 0x7A3A:zhì 0x7A3B:dào 0x7A3C:jià 0x7A3D:jÄ«,qÇ� 0x7A3E:gÇŽo,kào,gào,jiào 0x7A3F:gÇŽo 0x7A40:gÇ” 0x7A41:róng 0x7A42:suì 0x7A43:rong 0x7A44:jì 0x7A45:kÄ�ng 0x7A46:mù 0x7A47:cÇŽn,shÄ�n,cÄ“n 0x7A48:méi,mén,mí 0x7A49:zhì,chí,tí 0x7A4A:jì 0x7A4B:lù,jiÅ« 0x7A4C:sÅ« 0x7A4D:jÄ« 0x7A4E:yÇ�ng 0x7A4F:wÄ›n 0x7A50:qiÅ« 0x7A51:sè 0x7A52:hè 0x7A53:yì 0x7A54:huáng 0x7A55:qiè 0x7A56:jÇ�,jì 0x7A57:suì 0x7A58:xiÄ�o,rào 0x7A59:pú 0x7A5A:jiÄ�o 0x7A5B:zhuÅ�,bó 0x7A5C:zhÇ’ng,tóng,zhòng 0x7A5D:zui 0x7A5E:lÇš 0x7A5F:suì 0x7A60:nóng 0x7A61:sè 0x7A62:huì 0x7A63:ráng 0x7A64:nuò 0x7A65:yù,yÇ” 0x7A66:pÄ«n 0x7A67:jì,zì 0x7A68:tuí 0x7A69:wÄ›n 0x7A6A:chÄ“ng,bié 0x7A6B:huò,hù 0x7A6C:kuàng 0x7A6D:lÇš 0x7A6E:biÄ�o,pÄ�o 0x7A6F:sè 0x7A70:ráng,rÇŽng,réng 0x7A71:zhuÅ�,jué 0x7A72:lí 0x7A73:cuán,zàn 0x7A74:xué,jué 0x7A75:wÄ�,yà 0x7A76:jiÅ«,jiù 0x7A77:qióng 0x7A78:xÄ« 0x7A79:qióng,qiÅ�ng,kÅ�ng 0x7A7A:kÅ�ng,kÇ’ng,kòng 0x7A7B:yÅ«,yÇ” 0x7A7C:shÄ“n 0x7A7D:jÇ�ng 0x7A7E:yào,yÇŽo 0x7A7F:chuÄ�n,chuàn,yuÄ�n 0x7A80:zhÅ«n,tún 0x7A81:tÅ« 0x7A82:láo 0x7A83:qiè 0x7A84:zhÇŽi 0x7A85:yÇŽo 0x7A86:biÇŽn 0x7A87:báo 0x7A88:yÇŽo,yào 0x7A89:bÇ�ng 0x7A8A:wÄ� 0x7A8B:zhú,kÅ« 0x7A8C:jiào,pào,liáo,liù 0x7A8D:qiào 0x7A8E:diào 0x7A8F:wÅ« 0x7A90:guÄ«,wÄ� 0x7A91:yáo 0x7A92:zhì,dié 0x7A93:chuÄ�ng 0x7A94:yào,yÇŽo 0x7A95:tiÇŽo,tiÄ�o 0x7A96:jiào,zào 0x7A97:chuÄ�ng,cÅ�ng 0x7A98:jiÇ’ng 0x7A99:xiÄ�o 0x7A9A:chéng 0x7A9B:kòu 0x7A9C:cuàn 0x7A9D:wÅ� 0x7A9E:dàn 0x7A9F:kÅ« 0x7AA0:kÄ“ 0x7AA1:zhuó 0x7AA2:xÅ« 0x7AA3:sÅ« 0x7AA4:guÄ�n 0x7AA5:kuÄ« 0x7AA6:dòu 0x7AA7:zhuo 0x7AA8:xÅ«n,yìn,yÄ«n 0x7AA9:wÅ� 0x7AAA:wÄ� 0x7AAB:yà,yÄ“ 0x7AAC:yú,dÅ�u 0x7AAD:jù 0x7AAE:qióng 0x7AAF:yáo,yào,qiÄ�o 0x7AB0:yáo 0x7AB1:tiÇŽo 0x7AB2:cháo 0x7AB3:yÇ”,yú 0x7AB4:tián 0x7AB5:diào 0x7AB6:jù,lóu 0x7AB7:liào 0x7AB8:xÄ« 0x7AB9:wù 0x7ABA:kuÄ«,kuÇ� 0x7ABB:chuÄ�ng 0x7ABC:zhÄ�o,kÄ“ 0x7ABD:kuÇŽn 0x7ABE:kuÇŽn,cuàn 0x7ABF:lóng 0x7AC0:chÄ“ng,chèng 0x7AC1:cuì 0x7AC2:liáo 0x7AC3:zào 0x7AC4:cuàn,cuÄ�n 0x7AC5:qiào 0x7AC6:qióng 0x7AC7:dòu,dú 0x7AC8:zào 0x7AC9:lÇ’ng 0x7ACA:qiè 0x7ACB:lì,wèi 0x7ACC:chù 0x7ACD:shí 0x7ACE:fù 0x7ACF:qiÄ�n 0x7AD0:chù 0x7AD1:hóng 0x7AD2:qí 0x7AD3:háo 0x7AD4:shÄ“ng 0x7AD5:fÄ“n 0x7AD6:shù 0x7AD7:miào 0x7AD8:qÇ”,kÇ’u 0x7AD9:zhàn,zhÄ�n 0x7ADA:zhù 0x7ADB:líng 0x7ADC:lóng,néng 0x7ADD:bìng 0x7ADE:jìng 0x7ADF:jìng 0x7AE0:zhÄ�ng,zhàng 0x7AE1:bÇŽi 0x7AE2:sì 0x7AE3:jùn 0x7AE4:hóng 0x7AE5:tóng,zhÅ�ng 0x7AE6:sÇ’ng 0x7AE7:jìng,zhÄ›n 0x7AE8:diào 0x7AE9:yì 0x7AEA:shù 0x7AEB:jìng 0x7AEC:qÇ” 0x7AED:jié 0x7AEE:pÄ«ng 0x7AEF:duÄ�n 0x7AF0:lí 0x7AF1:zhuÇŽn 0x7AF2:céng 0x7AF3:dÄ“ng 0x7AF4:cÅ«n 0x7AF5:wÄ�i,huÄ� 0x7AF6:jìng 0x7AF7:kÇŽn,kàn 0x7AF8:jìng 0x7AF9:zhú 0x7AFA:zhú,dÇ” 0x7AFB:lè,jÄ«n 0x7AFC:péng 0x7AFD:yú 0x7AFE:chí 0x7AFF:gÄ�n,gàn,gÇŽn 0x7B00:máng 0x7B01:zhú 0x7B02:wán 0x7B03:dÇ” 0x7B04:jÄ« 0x7B05:jiÇŽo 0x7B06:bÄ� 0x7B07:suàn 0x7B08:jí 0x7B09:qÇ�n 0x7B0A:zhào 0x7B0B:sÇ”n 0x7B0C:yá 0x7B0D:zhuì,ruì 0x7B0E:yuán 0x7B0F:hù,wÄ›n,wù 0x7B10:háng,hàng 0x7B11:xiào 0x7B12:cén,jìn,hán 0x7B13:bì,pí,bÄ« 0x7B14:bÇ� 0x7B15:jiÇŽn 0x7B16:yÇ� 0x7B17:dÅ�ng 0x7B18:shÄ�n 0x7B19:shÄ“ng 0x7B1A:dÄ�,xiá,nà 0x7B1B:dí 0x7B1C:zhú 0x7B1D:nà 0x7B1E:chÄ« 0x7B1F:gÅ« 0x7B20:lì 0x7B21:qiè 0x7B22:mÇ�n 0x7B23:bÄ�o 0x7B24:tiáo,shào 0x7B25:sì 0x7B26:fú 0x7B27:cè,shàn 0x7B28:bèn 0x7B29:fá 0x7B2A:dá 0x7B2B:zÇ� 0x7B2C:dì 0x7B2D:líng 0x7B2E:zé,zhà,zuó 0x7B2F:nú 0x7B30:fú,fèi 0x7B31:gÇ’u 0x7B32:fán 0x7B33:jiÄ� 0x7B34:gÇŽn 0x7B35:fàn 0x7B36:shÇ� 0x7B37:mÇŽo 0x7B38:pÇ’ 0x7B39:ti 0x7B3A:jiÄ�n 0x7B3B:qióng 0x7B3C:lóng,lÇ’ng 0x7B3D:mÇ�n 0x7B3E:biÄ�n 0x7B3F:luò 0x7B40:guì 0x7B41:qÅ« 0x7B42:chí 0x7B43:yÄ«n 0x7B44:yào 0x7B45:xiÇŽn 0x7B46:bÇ� 0x7B47:qióng 0x7B48:kuò 0x7B49:dÄ›ng 0x7B4A:xiáo,jiÇŽo,jiào 0x7B4B:jÄ«n,qián 0x7B4C:quán 0x7B4D:sÇ”n,yún,xùn 0x7B4E:rú 0x7B4F:fá 0x7B50:kuÄ�ng 0x7B51:zhù,zhú 0x7B52:tÇ’ng,dòng,tóng 0x7B53:jÄ« 0x7B54:dá,dÄ� 0x7B55:háng 0x7B56:cè 0x7B57:zhòng 0x7B58:kòu 0x7B59:lái 0x7B5A:bì 0x7B5B:shÄ�i 0x7B5C:dÄ�ng 0x7B5D:zhÄ“ng 0x7B5E:cè 0x7B5F:fÅ« 0x7B60:yún,jÅ«n 0x7B61:tú 0x7B62:pá 0x7B63:lí 0x7B64:láng,làng 0x7B65:jÇ” 0x7B66:guÇŽn 0x7B67:jiÇŽn,xiàn 0x7B68:hán 0x7B69:tóng,tÇ’ng,yÇ’ng,dòng 0x7B6A:xiá 0x7B6B:zhì,zhÇ� 0x7B6C:chéng 0x7B6D:suàn 0x7B6E:shì 0x7B6F:zhù 0x7B70:zuó 0x7B71:xiÇŽo 0x7B72:shÄ�o 0x7B73:tíng 0x7B74:cè,jiÄ�,jiá 0x7B75:yán 0x7B76:gào,gÇŽo 0x7B77:kuài 0x7B78:gÄ�n 0x7B79:chóu 0x7B7A:kuÄ�ng 0x7B7B:gàng 0x7B7C:yún 0x7B7D:o 0x7B7E:qiÄ�n 0x7B7F:xiÇŽo 0x7B80:jiÇŽn 0x7B81:póu,bù,fú,pú 0x7B82:lái 0x7B83:zÅ�u 0x7B84:bÇ�,bÄ“i,bÄ«,bì,pái 0x7B85:bì 0x7B86:bì 0x7B87:gè 0x7B88:tái,chí 0x7B89:guÇŽi,dài 0x7B8A:yÅ« 0x7B8B:jiÄ�n 0x7B8C:dào,zhào 0x7B8D:gÅ« 0x7B8E:chí,hÇ” 0x7B8F:zhÄ“ng 0x7B90:qìng,jÄ«ng,qiÄ�ng 0x7B91:shà,zhá 0x7B92:zhÇ’u 0x7B93:lù 0x7B94:bó 0x7B95:jÄ« 0x7B96:lín,lÇ�n 0x7B97:suàn 0x7B98:jùn,qÅ«n 0x7B99:fú 0x7B9A:zhá 0x7B9B:gÅ« 0x7B9C:kÅ�ng 0x7B9D:qián 0x7B9E:qiÄ�n 0x7B9F:jùn 0x7BA0:chuí,zhuÄ« 0x7BA1:guÇŽn 0x7BA2:yuÄ�n,wÇŽn 0x7BA3:cè 0x7BA4:zú 0x7BA5:bÇ’ 0x7BA6:zé 0x7BA7:qiè 0x7BA8:tuò 0x7BA9:luó 0x7BAA:dÄ�n 0x7BAB:xiÄ�o 0x7BAC:ruò,nà 0x7BAD:jiàn 0x7BAE:xuÄ�n 0x7BAF:biÄ�n 0x7BB0:sÇ”n 0x7BB1:xiÄ�ng 0x7BB2:xiÇŽn 0x7BB3:píng 0x7BB4:zhÄ“n,jiÇŽn 0x7BB5:xÄ«ng,xÇ�ng,shÄ›ng 0x7BB6:hú 0x7BB7:yí,shÄ« 0x7BB8:zhù,zhuó 0x7BB9:yuÄ“,yào,chuò 0x7BBA:chÅ«n 0x7BBB:lÇœ 0x7BBC:wÅ« 0x7BBD:dÇ’ng 0x7BBE:shuò,xiÄ�o,qiào 0x7BBF:jí 0x7BC0:jié,jiÄ“ 0x7BC1:huáng 0x7BC2:xÄ«ng 0x7BC3:mèi 0x7BC4:fàn 0x7BC5:chuán,duÄ�n 0x7BC6:zhuàn 0x7BC7:piÄ�n 0x7BC8:fÄ“ng 0x7BC9:zhù,zhú 0x7BCA:huáng,hóng 0x7BCB:qiè 0x7BCC:hóu 0x7BCD:qiÅ« 0x7BCE:miÇŽo 0x7BCF:qiàn 0x7BD0:gÅ« 0x7BD1:kuì 0x7BD2:shi 0x7BD3:lÇ’u 0x7BD4:yún,xÅ«n 0x7BD5:hé 0x7BD6:táng 0x7BD7:yuè 0x7BD8:chÅ�u 0x7BD9:gÄ�o 0x7BDA:fÄ›i 0x7BDB:ruò 0x7BDC:zhÄ“ng 0x7BDD:gÅ�u 0x7BDE:niè 0x7BDF:qiàn 0x7BE0:xiÇŽo 0x7BE1:cuàn 0x7BE2:lÇ’ng,gÅ�ng,gÇŽn 0x7BE3:péng,páng 0x7BE4:dÇ” 0x7BE5:lì 0x7BE6:bì,pí 0x7BE7:zhuó,huò 0x7BE8:chú 0x7BE9:shÄ�i,shÄ« 0x7BEA:chí 0x7BEB:zhù 0x7BEC:qiÄ�ng,cÄ�ng 0x7BED:lóng 0x7BEE:lán 0x7BEF:jiÄ�n 0x7BF0:bù 0x7BF1:lí 0x7BF2:huì,suì 0x7BF3:bì 0x7BF4:dí,zhú 0x7BF5:cÅ�ng 0x7BF6:yÄ�n 0x7BF7:péng 0x7BF8:cÇŽn,cÄ“n,zÄ�n 0x7BF9:zhuàn,suÇŽn,zuÇŽn 0x7BFA:pí 0x7BFB:piÇŽo,biÄ�o 0x7BFC:dÅ�u 0x7BFD:yù 0x7BFE:miè 0x7BFF:tuán,zhuÄ�n 0x7C00:zé,zhài 0x7C01:shÄ�i 0x7C02:guì,guó 0x7C03:yí 0x7C04:hù 0x7C05:chÇŽn 0x7C06:kòu 0x7C07:cù,chuò,còu 0x7C08:píng 0x7C09:zào,chòu 0x7C0A:jÄ« 0x7C0B:guÇ� 0x7C0C:sù 0x7C0D:lÇ’u,lÇš,jù 0x7C0E:cè,jí 0x7C0F:lù 0x7C10:niÇŽn 0x7C11:suÅ� 0x7C12:cuàn 0x7C13:diÄ�o 0x7C14:suÅ� 0x7C15:lè 0x7C16:duàn 0x7C17:zhù 0x7C18:xiÄ�o 0x7C19:bó 0x7C1A:mì 0x7C1B:shÄ�i,sÄ« 0x7C1C:dàng,tÄ�ng 0x7C1D:liáo 0x7C1E:dÄ�n 0x7C1F:diàn 0x7C20:fÇ” 0x7C21:jiÇŽn 0x7C22:mÇ�n 0x7C23:kuì 0x7C24:dài 0x7C25:jiÄ�o 0x7C26:dÄ“ng 0x7C27:huáng 0x7C28:sÇ”n,zhuàn 0x7C29:láo 0x7C2A:zÄ�n,zÇŽn 0x7C2B:xiÄ�o,xiÇŽo 0x7C2C:lù 0x7C2D:shì 0x7C2E:zÄ�n 0x7C2F:qi 0x7C30:pái 0x7C31:qí 0x7C32:pái 0x7C33:gÇŽn,gàn 0x7C34:jù 0x7C35:lù 0x7C36:lù 0x7C37:yán 0x7C38:bÇ’,bò 0x7C39:dÄ�ng 0x7C3A:sài 0x7C3B:zhuÄ�,kÄ“ 0x7C3C:gÅ�u 0x7C3D:qiÄ�n 0x7C3E:lián 0x7C3F:bù,bó 0x7C40:zhòu 0x7C41:lài 0x7C42:shi 0x7C43:lán 0x7C44:kuì 0x7C45:yú 0x7C46:yuè 0x7C47:háo 0x7C48:zhÄ“n,jiÄ�n 0x7C49:tái 0x7C4A:tì 0x7C4B:niè,mí 0x7C4C:chóu,táo 0x7C4D:jí,jiè 0x7C4E:yí 0x7C4F:qí 0x7C50:téng 0x7C51:zhuàn,zuÇŽn 0x7C52:zhòu 0x7C53:fÄ�n,bÄ�n,pÄ�n 0x7C54:sÇ’u,shÇ” 0x7C55:zhòu 0x7C56:qian 0x7C57:zhuó 0x7C58:téng 0x7C59:lù 0x7C5A:lú 0x7C5B:jiÇŽn,jiÄ�n 0x7C5C:tuò 0x7C5D:yíng 0x7C5E:yù 0x7C5F:lài 0x7C60:lóng,lÇ’ng 0x7C61:qiè 0x7C62:lián 0x7C63:lán 0x7C64:qiÄ�n 0x7C65:yuè 0x7C66:zhÅ�ng 0x7C67:qú,jÇ” 0x7C68:lián 0x7C69:biÄ�n 0x7C6A:duàn 0x7C6B:zuÇŽn 0x7C6C:lí 0x7C6D:sÄ« 0x7C6E:luó 0x7C6F:yíng 0x7C70:yuè 0x7C71:zhuó 0x7C72:yù 0x7C73:mÇ� 0x7C74:dí,zá 0x7C75:fán 0x7C76:shÄ“n 0x7C77:zhé 0x7C78:shÄ“n 0x7C79:nÇš 0x7C7A:hé 0x7C7B:lèi 0x7C7C:xiÄ�n 0x7C7D:zÇ� 0x7C7E:ní 0x7C7F:cùn 0x7C80:zhàng 0x7C81:qiÄ�n 0x7C82:zhÄ�i 0x7C83:bÇ�,pÄ« 0x7C84:bÇŽn 0x7C85:wù 0x7C86:shÄ�,chÇŽo 0x7C87:kÄ�ng,jÄ«ng 0x7C88:róu 0x7C89:fÄ›n 0x7C8A:bì 0x7C8B:cuì 0x7C8C:yin 0x7C8D:zhé 0x7C8E:mÇ� 0x7C8F:tai 0x7C90:hù 0x7C91:bÄ� 0x7C92:lì 0x7C93:gÄ�n 0x7C94:jù 0x7C95:pò 0x7C96:mò 0x7C97:cÅ« 0x7C98:zhÄ�n,nián 0x7C99:zhòu 0x7C9A:chÄ« 0x7C9B:sù 0x7C9C:tiào 0x7C9D:lì 0x7C9E:xÄ« 0x7C9F:sù 0x7CA0:hóng 0x7CA1:tóng 0x7CA2:zÄ«,cí,jì 0x7CA3:cè,sè 0x7CA4:yuè 0x7CA5:zhÅ�u,yù 0x7CA6:lín 0x7CA7:zhuÄ�ng 0x7CA8:bÇŽi 0x7CA9:lÄ�o 0x7CAA:fèn 0x7CAB:ér 0x7CAC:qÅ« 0x7CAD:hé 0x7CAE:liáng 0x7CAF:xiàn 0x7CB0:fú,fÅ« 0x7CB1:liáng 0x7CB2:càn 0x7CB3:jÄ«ng 0x7CB4:lÇ� 0x7CB5:yuè 0x7CB6:lù 0x7CB7:jú 0x7CB8:qí 0x7CB9:cuì,suì 0x7CBA:bài 0x7CBB:zhÄ�ng 0x7CBC:lín,lÇ�n 0x7CBD:zòng 0x7CBE:jÄ«ng,qíng,jìng 0x7CBF:guÇ’,huà 0x7CC0:huÄ� 0x7CC1:sÇŽn,shÄ“n 0x7CC2:sÇŽn 0x7CC3:táng 0x7CC4:biÇŽn,biÄ�n 0x7CC5:róu 0x7CC6:miàn 0x7CC7:hóu 0x7CC8:xÇ” 0x7CC9:zòng 0x7CCA:hú,hÅ«,hù 0x7CCB:jiàn 0x7CCC:zÄ�n 0x7CCD:cí 0x7CCE:lí 0x7CCF:xiè 0x7CD0:fÅ« 0x7CD1:nuò 0x7CD2:bèi 0x7CD3:gÇ” 0x7CD4:xiÇ” 0x7CD5:gÄ�o 0x7CD6:táng 0x7CD7:qiÇ” 0x7CD8:jiÄ� 0x7CD9:cÄ�o 0x7CDA:zhuÄ�ng 0x7CDB:táng 0x7CDC:mí,méi 0x7CDD:sÇŽn,sÄ�n,shÄ“n 0x7CDE:fèn 0x7CDF:zÄ�o 0x7CE0:kÄ�ng 0x7CE1:jiàng 0x7CE2:mó 0x7CE3:sÇŽn 0x7CE4:sÇŽn 0x7CE5:nuò 0x7CE6:xÄ« 0x7CE7:liáng 0x7CE8:jiàng,jiÄ�ng 0x7CE9:kuài 0x7CEA:bò 0x7CEB:huán 0x7CEC:shÇ” 0x7CED:zòng 0x7CEE:xiàn 0x7CEF:nuò 0x7CF0:tuán 0x7CF1:niè 0x7CF2:lì 0x7CF3:zuò 0x7CF4:dí 0x7CF5:niè 0x7CF6:tiào,diào 0x7CF7:làn 0x7CF8:mì,sÄ« 0x7CF9:sÄ« 0x7CFA:jiÅ«,jiÇ” 0x7CFB:xì,jì 0x7CFC:gÅ�ng 0x7CFD:zhÄ›ng,zhÄ“ng 0x7CFE:jiÅ«,jiÇŽo 0x7CFF:yòu 0x7D00:jì,jÇ� 0x7D01:chà 0x7D02:zhòu 0x7D03:xún 0x7D04:yuÄ“,yÄ�o,yào,dì 0x7D05:hóng,gÅ�ng,jiàng 0x7D06:yÅ«,Å�u 0x7D07:hé,gÄ“,jié 0x7D08:wán 0x7D09:rèn 0x7D0A:wÄ›n,wèn 0x7D0B:wén,wèn 0x7D0C:qiú 0x7D0D:nà 0x7D0E:zÄ« 0x7D0F:tÇ’u 0x7D10:niÇ” 0x7D11:fóu 0x7D12:jì,jié,jiè 0x7D13:shÅ« 0x7D14:chún,zhÇ”n,tún,quán,zÄ«,zhÅ«n 0x7D15:pÄ«,pí,bÇ�,bÄ«,bì,chÇ� 0x7D16:zhèn 0x7D17:shÄ�,miÇŽo 0x7D18:hóng 0x7D19:zhÇ� 0x7D1A:jí 0x7D1B:fÄ“n 0x7D1C:yún 0x7D1D:rèn 0x7D1E:dÇŽn 0x7D1F:jÄ«n,jìn 0x7D20:sù 0x7D21:fÇŽng,bÇŽng,fàng 0x7D22:suÇ’ 0x7D23:cuì 0x7D24:jiÇ” 0x7D25:zÄ�,zhÄ� 0x7D26:ba 0x7D27:jÇ�n 0x7D28:fÅ«,fù 0x7D29:zhì 0x7D2A:qÄ« 0x7D2B:zÇ� 0x7D2C:chóu,chÅ�u,zhòu 0x7D2D:hóng 0x7D2E:zÄ�,zhÄ� 0x7D2F:lèi,lÄ›i,léi,lÇœ,liè 0x7D30:xì 0x7D31:fú 0x7D32:xiè,yì 0x7D33:shÄ“n 0x7D34:bÅ�,bì 0x7D35:zhù,shÅ« 0x7D36:qÅ«,qÇ” 0x7D37:líng 0x7D38:zhù 0x7D39:shào,chÄ�o 0x7D3A:gàn 0x7D3B:yÇŽng 0x7D3C:fú,fèi 0x7D3D:tuó 0x7D3E:zhÄ›n,tiÇŽn,jÇ�n 0x7D3F:dài 0x7D40:chù 0x7D41:shÄ« 0x7D42:zhÅ�ng 0x7D43:xián,xuàn 0x7D44:zÇ”,qÅ« 0x7D45:jiÅ�ng,jiÇ’ng 0x7D46:bàn 0x7D47:qú 0x7D48:mò 0x7D49:shù 0x7D4A:zuì 0x7D4B:kuàng 0x7D4C:jÄ«ng 0x7D4D:rèn 0x7D4E:háng 0x7D4F:xiè,yì 0x7D50:jié,jì,jiÄ“ 0x7D51:zhÅ« 0x7D52:chóu 0x7D53:guà,kuÄ� 0x7D54:bÇŽi,mò 0x7D55:jué 0x7D56:kuàng 0x7D57:hú 0x7D58:cì 0x7D59:huán,gÄ“ng 0x7D5A:gÄ“ng 0x7D5B:tÄ�o 0x7D5C:jié,xié,qià,jiá,qì 0x7D5D:kù 0x7D5E:jiÇŽo,xiáo,jiào 0x7D5F:quán 0x7D60:gÇŽi,ÇŽi 0x7D61:luò,lào 0x7D62:xuàn,xún 0x7D63:bÄ“ng,bÄ«ng,pÄ“ng 0x7D64:xiàn 0x7D65:fú 0x7D66:gÄ›i,jÇ�,xiá 0x7D67:dòng,tóng,tÅ�ng 0x7D68:róng 0x7D69:tiào,diào,dào 0x7D6A:yÄ«n 0x7D6B:lÄ›i 0x7D6C:xiè 0x7D6D:juàn 0x7D6E:xù,chù,nÇœ,nà 0x7D6F:gÄ�i,hài 0x7D70:dié 0x7D71:tÇ’ng 0x7D72:sÄ« 0x7D73:jiàng 0x7D74:xiáng 0x7D75:huì 0x7D76:jué 0x7D77:zhí 0x7D78:jiÇŽn 0x7D79:juàn,xuàn 0x7D7A:chÄ«,zhÇ� 0x7D7B:miÇŽn,wèn,mán,wàn 0x7D7C:zhèn 0x7D7D:lÇš 0x7D7E:chéng 0x7D7F:qiú 0x7D80:shÅ« 0x7D81:bÇŽng 0x7D82:tÇ’ng 0x7D83:xiÄ�o,shÄ�o 0x7D84:huán,huàn,wàn 0x7D85:qÄ«n,xiÄ�n 0x7D86:gÄ›ng,bÇ�ng 0x7D87:xiÇ” 0x7D88:tí,tì 0x7D89:tòu,xiù 0x7D8A:xié 0x7D8B:hóng 0x7D8C:xì 0x7D8D:fú 0x7D8E:tÄ«ng 0x7D8F:suÄ«,suí,shuÄ�i,ruí,tuÇ’ 0x7D90:duì 0x7D91:kÇ”n 0x7D92:fÅ« 0x7D93:jÄ«ng,jìng 0x7D94:hù 0x7D95:zhÄ« 0x7D96:yán,xiàn 0x7D97:jiÇ’ng 0x7D98:féng 0x7D99:jì 0x7D9A:xù 0x7D9B:rÄ›n 0x7D9C:zÅ�ng,zèng,zòng 0x7D9D:chÄ“n,shÄ“n,lín 0x7D9E:duÇ’ 0x7D9F:lì,liè 0x7DA0:lÇœ 0x7DA1:liáng 0x7DA2:chóu,tÄ�o,diào 0x7DA3:quÇŽn 0x7DA4:shào 0x7DA5:qí 0x7DA6:qí,qì 0x7DA7:zhÇ”n,zhùn 0x7DA8:qí 0x7DA9:wÇŽn 0x7DAA:qiàn,qÄ«ng,zhÄ“ng 0x7DAB:xiàn 0x7DAC:shòu 0x7DAD:wéi,yí 0x7DAE:qÇ�,qìng,qÇ�ng 0x7DAF:táo 0x7DB0:wÇŽn 0x7DB1:gÄ�ng 0x7DB2:wÇŽng 0x7DB3:bÄ“ng 0x7DB4:zhuì,chuò 0x7DB5:cÇŽi 0x7DB6:guÇ’ 0x7DB7:cuì,zú 0x7DB8:lún,guÄ�n 0x7DB9:liÇ” 0x7DBA:qÇ�,yÇ� 0x7DBB:zhàn 0x7DBC:bì 0x7DBD:chuò,chÄ�o 0x7DBE:líng 0x7DBF:mián 0x7DC0:qÄ« 0x7DC1:qiè 0x7DC2:tián,tÇŽn,chÄ�n 0x7DC3:zÅ�ng 0x7DC4:gÇ”n,hùn,hún 0x7DC5:zÅ�u 0x7DC6:xÄ« 0x7DC7:zÄ« 0x7DC8:xìng 0x7DC9:liÇŽng 0x7DCA:jÇ�n 0x7DCB:fÄ“i 0x7DCC:ruí 0x7DCD:mín 0x7DCE:yù 0x7DCF:zÇ’ng,cÅ�ng 0x7DD0:fán 0x7DD1:lÇœ,lù 0x7DD2:xù 0x7DD3:yÄ«ng 0x7DD4:shàng 0x7DD5:qi 0x7DD6:xù 0x7DD7:xiÄ�ng 0x7DD8:jiÄ�n 0x7DD9:kè 0x7DDA:xiàn 0x7DDB:ruÇŽn,ruàn 0x7DDC:mián 0x7DDD:jÄ«,qì,qÄ«,jí 0x7DDE:duàn 0x7DDF:chóng,zhòng 0x7DE0:dì 0x7DE1:mín,mÇ�n,mián,hún 0x7DE2:miáo,máo 0x7DE3:yuán,yuàn 0x7DE4:xiè,yè 0x7DE5:bÇŽo 0x7DE6:sÄ« 0x7DE7:qiÅ« 0x7DE8:biÄ�n,biÇŽn,biàn 0x7DE9:huÇŽn 0x7DEA:gÄ“ng,gèng 0x7DEB:cÅ�ng 0x7DEC:miÇŽn 0x7DED:wèi 0x7DEE:fù 0x7DEF:wÄ›i 0x7DF0:tóu,xÅ«,yú 0x7DF1:gÅ�u 0x7DF2:miÇŽo 0x7DF3:xié 0x7DF4:liàn 0x7DF5:zÅ�ng,zòng 0x7DF6:biàn,pián,biÇŽn 0x7DF7:yùn,gÇ”n 0x7DF8:yÄ«n 0x7DF9:tí 0x7DFA:guÄ� 0x7DFB:zhì 0x7DFC:yùn,wÄ“n 0x7DFD:chÄ“ng 0x7DFE:chán 0x7DFF:dài 0x7E00:xiá 0x7E01:yuán 0x7E02:zÇ’ng 0x7E03:xÅ« 0x7E04:shéng 0x7E05:wÄ“i 0x7E06:gÄ“ng 0x7E07:xuÄ�n 0x7E08:yíng 0x7E09:jìn 0x7E0A:yì 0x7E0B:zhuì 0x7E0C:nì 0x7E0D:bÄ�ng,bàng 0x7E0E:gÇ”,hú 0x7E0F:pán 0x7E10:zhòu,chào,cù,zhÅ�u 0x7E11:jiÄ�n 0x7E12:cÄ«,cuò,suÇ’ 0x7E13:quán 0x7E14:shuÇŽng 0x7E15:yùn 0x7E16:xiá 0x7E17:cuÄ«,suÄ«,shuÄ�i 0x7E18:xÄ« 0x7E19:róng,rÇ’ng,ròng 0x7E1A:tÄ�o 0x7E1B:fù 0x7E1C:yún 0x7E1D:chÄ“n,zhÄ›n 0x7E1E:gÇŽo 0x7E1F:rù,rÇ’ng 0x7E20:hú 0x7E21:zài,zÄ“ng 0x7E22:téng 0x7E23:xiàn,xuán 0x7E24:sù 0x7E25:zhÄ›n 0x7E26:zòng 0x7E27:tÄ�o 0x7E28:huÇŽng 0x7E29:cài 0x7E2A:bì 0x7E2B:fèng,féng 0x7E2C:cù 0x7E2D:lí 0x7E2E:suÅ�,sù 0x7E2F:yÇŽn,yÇ�n 0x7E30:xÇ� 0x7E31:zòng,cóng,zÇ’ng 0x7E32:léi 0x7E33:juàn,zhuàn 0x7E34:qiàn,qiÄ�n 0x7E35:màn 0x7E36:zhí 0x7E37:lÇš 0x7E38:mù,mò 0x7E39:piÇŽo,piÄ�o 0x7E3A:lián 0x7E3B:mí 0x7E3C:xuàn 0x7E3D:zÇ’ng,zÅ�ng,cÅ�ng 0x7E3E:jÄ« 0x7E3F:shÄ�n,xiÄ�n,xiÄ�o,sÄ�o,cÇŽn 0x7E40:suì,cuÇ� 0x7E41:fán,pán,pó 0x7E42:lÇœ 0x7E43:bÄ›ng,bÄ“ng,bèng 0x7E44:yÄ«,yì 0x7E45:sÄ�o,zÇŽo 0x7E46:móu,jiÅ«,miù,mù,miào,liáo,liÇŽo,liào,lù 0x7E47:yáo,yóu,zhòu 0x7E48:qiÇŽng 0x7E49:hún 0x7E4A:xiÄ�n 0x7E4B:jì 0x7E4C:sha 0x7E4D:xiù 0x7E4E:rán 0x7E4F:xuàn 0x7E50:suì 0x7E51:qiÄ�o,juÄ“ 0x7E52:zÄ“ng,zèng,céng 0x7E53:zuÇ’ 0x7E54:zhÄ«,zhì 0x7E55:shàn 0x7E56:sÇŽn 0x7E57:lín 0x7E58:yù,jué 0x7E59:fÄ�n,fán 0x7E5A:liáo,rÇŽo 0x7E5B:chuò 0x7E5C:zÅ«n 0x7E5D:jiàn 0x7E5E:rào,rÇŽo 0x7E5F:chÇŽn,chán 0x7E60:ruÇ� 0x7E61:xiù 0x7E62:huì,huí 0x7E63:huà 0x7E64:zuÇŽn 0x7E65:xÄ« 0x7E66:qiÇŽng 0x7E67:yun 0x7E68:da 0x7E69:shéng,yìng,mÇ�n,shèng 0x7E6A:huì,guì 0x7E6B:xì,jì 0x7E6C:sè 0x7E6D:jiÇŽn 0x7E6E:jiÄ�ng 0x7E6F:huán 0x7E70:zÇŽo,sÄ�o,qiÄ�o 0x7E71:cÅ�ng 0x7E72:xiè 0x7E73:jiÇŽo,zhuó,jiào,hé 0x7E74:bì 0x7E75:dàn,tán,chán 0x7E76:yì 0x7E77:nÇ’ng 0x7E78:suì 0x7E79:yì,shì 0x7E7A:shÇŽi 0x7E7B:xÅ«,rú 0x7E7C:jì 0x7E7D:bÄ«n 0x7E7E:qiÇŽn 0x7E7F:lán 0x7E80:pú,fú 0x7E81:xÅ«n 0x7E82:zuÇŽn 0x7E83:qí 0x7E84:péng 0x7E85:yào,lì 0x7E86:mò 0x7E87:lèi 0x7E88:xié 0x7E89:zuÇŽn 0x7E8A:kuàng 0x7E8B:yÅ�u 0x7E8C:xù 0x7E8D:léi,lÄ›i,lèi 0x7E8E:xiÄ�n 0x7E8F:chán 0x7E90:jiÇŽo 0x7E91:lú 0x7E92:chán 0x7E93:yÄ«ng 0x7E94:cái,shÄ�n 0x7E95:rÇŽng,xiÄ�ng,sÄ�ng 0x7E96:xiÄ�n,jiÄ�n 0x7E97:zuÄ« 0x7E98:zuÇŽn 0x7E99:luò 0x7E9A:lí,xÇ�,lÇ�,sÇŽ 0x7E9B:dào,dú 0x7E9C:lÇŽn 0x7E9D:léi 0x7E9E:liàn 0x7E9F:sÄ« 0x7EA0:jiÅ« 0x7EA1:yÅ« 0x7EA2:hóng,gÅ�ng 0x7EA3:zhòu 0x7EA4:xiÄ�n,qiàn 0x7EA5:gÄ“,hé 0x7EA6:yuÄ“,yÄ�o 0x7EA7:jí 0x7EA8:wán 0x7EA9:kuàng 0x7EAA:jì,jÇ� 0x7EAB:rèn 0x7EAC:wÄ›i 0x7EAD:yún 0x7EAE:hóng 0x7EAF:chún 0x7EB0:pÄ« 0x7EB1:shÄ� 0x7EB2:gÄ�ng 0x7EB3:nà 0x7EB4:rèn 0x7EB5:zòng 0x7EB6:lún,guÄ�n 0x7EB7:fÄ“n 0x7EB8:zhÇ� 0x7EB9:wén,wèn 0x7EBA:fÇŽng 0x7EBB:zhù 0x7EBC:zhèn 0x7EBD:niÇ” 0x7EBE:shÅ« 0x7EBF:xiàn 0x7EC0:gàn 0x7EC1:xiè 0x7EC2:fú 0x7EC3:liàn 0x7EC4:zÇ” 0x7EC5:shÄ“n 0x7EC6:xì 0x7EC7:zhÄ« 0x7EC8:zhÅ�ng 0x7EC9:zhòu 0x7ECA:bàn 0x7ECB:fú 0x7ECC:chù 0x7ECD:shào 0x7ECE:yì 0x7ECF:jÄ«ng,jìng 0x7ED0:dài 0x7ED1:bÇŽng 0x7ED2:róng 0x7ED3:jié,jiÄ“ 0x7ED4:kù 0x7ED5:rào,rÇŽo 0x7ED6:dié 0x7ED7:háng 0x7ED8:huì 0x7ED9:gÄ›i,jÇ� 0x7EDA:xuàn 0x7EDB:jiàng 0x7EDC:luò,lào 0x7EDD:jué 0x7EDE:jiÇŽo 0x7EDF:tÇ’ng 0x7EE0:gÄ›ng 0x7EE1:xiÄ�o 0x7EE2:juàn 0x7EE3:xiù 0x7EE4:xì 0x7EE5:suí 0x7EE6:tÄ�o 0x7EE7:jì 0x7EE8:tí,tì 0x7EE9:jÄ« 0x7EEA:xù 0x7EEB:líng 0x7EEC:yÄ«ng 0x7EED:xù 0x7EEE:qÇ� 0x7EEF:fÄ“i 0x7EF0:chuò,chÄ�o 0x7EF1:shàng 0x7EF2:gÇ”n 0x7EF3:shéng 0x7EF4:wéi 0x7EF5:mián 0x7EF6:shòu 0x7EF7:bÄ“ng,bÄ›ng,bèng 0x7EF8:chóu 0x7EF9:táo 0x7EFA:liÇ” 0x7EFB:quÇŽn 0x7EFC:zÅ�ng,zèng 0x7EFD:zhàn 0x7EFE:wÇŽn 0x7EFF:lÇœ,lù 0x7F00:zhuì 0x7F01:zÄ« 0x7F02:kè 0x7F03:xiÄ�ng 0x7F04:jiÄ�n 0x7F05:miÇŽn 0x7F06:lÇŽn 0x7F07:tí 0x7F08:miÇŽo 0x7F09:jÄ«,qÄ« 0x7F0A:yÅ«n,yùn 0x7F0B:huì 0x7F0C:sÄ« 0x7F0D:duÇ’ 0x7F0E:duàn 0x7F0F:biàn,pián 0x7F10:xiàn 0x7F11:gÅ�u 0x7F12:zhuì 0x7F13:huÇŽn 0x7F14:dì 0x7F15:lÇš 0x7F16:biÄ�n 0x7F17:mín 0x7F18:yuán 0x7F19:jìn 0x7F1A:fù 0x7F1B:rù 0x7F1C:zhÄ›n 0x7F1D:fèng,féng 0x7F1E:cuÄ« 0x7F1F:gÇŽo 0x7F20:chán 0x7F21:lí 0x7F22:yì 0x7F23:jiÄ�n 0x7F24:bÄ«n 0x7F25:piÄ�o,piÇŽo 0x7F26:màn 0x7F27:léi 0x7F28:yÄ«ng 0x7F29:suÅ�,sù 0x7F2A:móu,miào,miù 0x7F2B:sÄ�o 0x7F2C:xié 0x7F2D:liáo 0x7F2E:shàn 0x7F2F:zÄ“ng,zèng 0x7F30:jiÄ�ng 0x7F31:qiÇŽn 0x7F32:qiÄ�o,sÄ�o 0x7F33:huán 0x7F34:jiÇŽo,zhuó 0x7F35:zuÇŽn 0x7F36:fÇ’u 0x7F37:xiè 0x7F38:gÄ�ng 0x7F39:fÇ’u 0x7F3A:quÄ“,kuÇ� 0x7F3B:fÇ’u 0x7F3C:qi 0x7F3D:bÅ� 0x7F3E:píng 0x7F3F:xiàng 0x7F40:zhao 0x7F41:gÄ�ng 0x7F42:yÄ«ng 0x7F43:yÄ«ng 0x7F44:qìng 0x7F45:xià 0x7F46:guàn 0x7F47:zÅ«n 0x7F48:tán 0x7F49:chÄ“ng 0x7F4A:qì 0x7F4B:wèng 0x7F4C:yÄ«ng 0x7F4D:léi 0x7F4E:tán 0x7F4F:lú 0x7F50:guàn 0x7F51:wÇŽng 0x7F52:wÇŽng 0x7F53:gÄ�ng 0x7F54:wÇŽng,wáng 0x7F55:hÇŽn,hàn 0x7F56:luó 0x7F57:luó 0x7F58:fú 0x7F59:shÄ“n 0x7F5A:fá 0x7F5B:gÅ« 0x7F5C:zhÇ”,dú 0x7F5D:jÅ«,jiÄ“ 0x7F5E:máo 0x7F5F:gÇ” 0x7F60:mín 0x7F61:gÄ�ng 0x7F62:bà,ba 0x7F63:guà 0x7F64:tí,kÅ«n 0x7F65:juàn 0x7F66:fú 0x7F67:shèn 0x7F68:yÇŽn 0x7F69:zhào 0x7F6A:zuì 0x7F6B:guà,huà,guÇŽi 0x7F6C:zhuó 0x7F6D:yù 0x7F6E:zhì 0x7F6F:ÇŽn 0x7F70:fá 0x7F71:lÇŽn,nÇŽn 0x7F72:shÇ” 0x7F73:sÄ« 0x7F74:pí 0x7F75:mà 0x7F76:liÇ” 0x7F77:bà,pí,pì,bÇ�,ba,bÇŽi 0x7F78:fá 0x7F79:lí 0x7F7A:cháo 0x7F7B:wèi 0x7F7C:bì 0x7F7D:jì 0x7F7E:zÄ“ng 0x7F7F:chÅ�ng 0x7F80:liÇ” 0x7F81:jÄ« 0x7F82:juàn 0x7F83:mì 0x7F84:zhào 0x7F85:luó,luÅ�,luo 0x7F86:pí 0x7F87:jÄ« 0x7F88:jÄ« 0x7F89:luán 0x7F8A:yáng 0x7F8B:mÇ�,miÄ“ 0x7F8C:qiÄ�ng 0x7F8D:dá 0x7F8E:mÄ›i 0x7F8F:yáng,xiáng 0x7F90:yÇ’u 0x7F91:yÇ’u 0x7F92:fén 0x7F93:bÄ� 0x7F94:gÄ�o 0x7F95:yàng 0x7F96:gÇ” 0x7F97:qiÄ�ng,yÇ’u 0x7F98:zÄ�ng 0x7F99:gÄ�o,mÄ›i 0x7F9A:líng 0x7F9B:yì,xÄ« 0x7F9C:zhù 0x7F9D:dÄ« 0x7F9E:xiÅ« 0x7F9F:qiÇŽng 0x7FA0:yí 0x7FA1:xiàn,yán,yí 0x7FA2:róng 0x7FA3:qún 0x7FA4:qún 0x7FA5:qiÇŽng,qiÄ�n 0x7FA6:huán 0x7FA7:suÅ�,zuÄ« 0x7FA8:xiàn 0x7FA9:yì,yí,xÄ« 0x7FAA:yang 0x7FAB:qiÄ�ng,kàng 0x7FAC:qián,xián,yán 0x7FAD:yú 0x7FAE:gÄ“ng 0x7FAF:jié 0x7FB0:tÄ�ng 0x7FB1:yuán 0x7FB2:xÄ« 0x7FB3:fán 0x7FB4:shÄ�n 0x7FB5:fén 0x7FB6:shÄ�n 0x7FB7:liÇŽn 0x7FB8:léi,lián 0x7FB9:gÄ“ng,láng 0x7FBA:nóu 0x7FBB:qiàng 0x7FBC:chàn 0x7FBD:yÇ”,hù 0x7FBE:gòng 0x7FBF:yì 0x7FC0:chÅ�ng 0x7FC1:wÄ“ng,wÄ›ng 0x7FC2:fÄ“n 0x7FC3:hóng 0x7FC4:chì 0x7FC5:chì 0x7FC6:cuì 0x7FC7:fú 0x7FC8:xiá 0x7FC9:bÄ›n 0x7FCA:yì 0x7FCB:lÄ� 0x7FCC:yì 0x7FCD:pÄ«,bì,pÅ� 0x7FCE:líng 0x7FCF:liù,lù 0x7FD0:zhì 0x7FD1:qú 0x7FD2:xí 0x7FD3:xié 0x7FD4:xiáng 0x7FD5:xÄ« 0x7FD6:xÄ« 0x7FD7:ké 0x7FD8:qiào,qiáo 0x7FD9:huì 0x7FDA:huÄ« 0x7FDB:xiÄ�o,shÅ« 0x7FDC:shà 0x7FDD:hóng 0x7FDE:jiÄ�ng 0x7FDF:dí,zhái 0x7FE0:cuì 0x7FE1:fÄ›i 0x7FE2:dào,zhÅ�u 0x7FE3:shà 0x7FE4:chì 0x7FE5:zhù 0x7FE6:jiÇŽn 0x7FE7:xuÄ�n 0x7FE8:chì 0x7FE9:piÄ�n 0x7FEA:zÅ�ng 0x7FEB:wán,wàn 0x7FEC:huÄ« 0x7FED:hóu 0x7FEE:hé,lì 0x7FEF:hè,hào 0x7FF0:hàn 0x7FF1:áo 0x7FF2:piÄ�o 0x7FF3:yì 0x7FF4:lián 0x7FF5:hóu,qú 0x7FF6:áo 0x7FF7:lín 0x7FF8:pÄ›n 0x7FF9:qiào,qiáo 0x7FFA:áo 0x7FFB:fÄ�n 0x7FFC:yì 0x7FFD:huì 0x7FFE:xuÄ�n 0x7FFF:dào 0x8000:yào 0x8001:lÇŽo 0x8002:lÇŽo 0x8003:kÇŽo 0x8004:mào 0x8005:zhÄ› 0x8006:qí,zhÇ�,shì 0x8007:gÇ’u 0x8008:gÇ’u 0x8009:gÇ’u 0x800A:dié 0x800B:dié 0x800C:ér,néng 0x800D:shuÇŽ 0x800E:ruÇŽn,nuò 0x800F:nài,ér 0x8010:nài,néng 0x8011:duÄ�n,zhuÄ�n 0x8012:lÄ›i 0x8013:tÄ«ng 0x8014:zÇ� 0x8015:gÄ“ng 0x8016:chào 0x8017:hào,máo,mào 0x8018:yún 0x8019:bà,pá 0x801A:pÄ« 0x801B:yí,chí 0x801C:sì 0x801D:qù,chú 0x801E:jiÄ� 0x801F:jù 0x8020:huÅ� 0x8021:chú 0x8022:lào 0x8023:lÇ”n,lún 0x8024:jí,jiè 0x8025:tÄ�ng,tÇŽng 0x8026:Ç’u 0x8027:lóu 0x8028:nòu 0x8029:jiÇŽng 0x802A:pÇŽng 0x802B:zhá,zé 0x802C:lóu,lÇ’u 0x802D:jÄ« 0x802E:lào 0x802F:huò 0x8030:yÅ�u 0x8031:mò 0x8032:huái 0x8033:Ä›r,réng 0x8034:yì 0x8035:dÄ«ng 0x8036:yé,xié,yÄ“ 0x8037:dÄ�,zhé 0x8038:sÇ’ng 0x8039:qín 0x803A:yún,yíng 0x803B:chÇ� 0x803C:dÄ�n 0x803D:dÄ�n 0x803E:hóng 0x803F:gÄ›ng 0x8040:zhí 0x8041:pàn 0x8042:niè 0x8043:dÄ�n 0x8044:zhÄ›n 0x8045:chè 0x8046:líng 0x8047:zhÄ“ng 0x8048:yÇ’u 0x8049:wà,tuÇ�,zhuó 0x804A:liáo,liú 0x804B:lóng 0x804C:zhí 0x804D:níng 0x804E:tiÄ�o 0x804F:ér,nÇœ 0x8050:yà 0x8051:tiÄ“,zhé 0x8052:guÄ�,guÅ� 0x8053:xù 0x8054:lián 0x8055:hào 0x8056:shèng 0x8057:liè 0x8058:pìn,pìng 0x8059:jÄ«ng 0x805A:jù 0x805B:bÇ� 0x805C:dÇ� 0x805D:guó 0x805E:wén,wèn 0x805F:xù 0x8060:pÄ«ng 0x8061:cÅ�ng 0x8062:dìng 0x8063:ní 0x8064:tíng 0x8065:jÇ” 0x8066:cÅ�ng 0x8067:kuÄ« 0x8068:lián 0x8069:kuì 0x806A:cÅ�ng 0x806B:lián 0x806C:wÄ›ng 0x806D:kuì 0x806E:lián 0x806F:lián 0x8070:cÅ�ng 0x8071:áo,yóu 0x8072:shÄ“ng 0x8073:sÇ’ng 0x8074:tÄ«ng 0x8075:kuì 0x8076:niè,zhé,shè,yè 0x8077:zhí,tè 0x8078:dÄ�n 0x8079:níng 0x807A:qié 0x807B:nÇ�,jiàn 0x807C:tÄ«ng 0x807D:tÄ«ng,tìng 0x807E:lóng 0x807F:yù 0x8080:yù 0x8081:zhào 0x8082:sì 0x8083:sù 0x8084:yì,sì 0x8085:sù 0x8086:sì,tì 0x8087:zhào 0x8088:zhào 0x8089:ròu,rù 0x808A:yì 0x808B:lÄ“,lèi,jÄ«n 0x808C:jÄ«,jì 0x808D:qiú 0x808E:kÄ›n 0x808F:cào 0x8090:gÄ“,qì 0x8091:bó,dí 0x8092:huàn 0x8093:huÄ�ng 0x8094:chÇ� 0x8095:rèn 0x8096:xiào,xiÄ�o 0x8097:rÇ” 0x8098:zhÇ’u 0x8099:yuàn 0x809A:dù,dÇ” 0x809B:gÄ�ng 0x809C:róng,chÄ“n 0x809D:gÄ�n 0x809E:chÄ� 0x809F:wò 0x80A0:cháng 0x80A1:gÇ” 0x80A2:zhÄ«,shì 0x80A3:hán,hàn,qín 0x80A4:fÅ« 0x80A5:féi,bÇ� 0x80A6:fén 0x80A7:pÄ“i 0x80A8:pàng,pÄ�ng,fÄ“ng 0x80A9:jiÄ�n,xián 0x80AA:fáng 0x80AB:zhÅ«n,chún,tún,zhuÅ� 0x80AC:yóu 0x80AD:nà,nù 0x80AE:Ä�ng,háng,gÄ�ng 0x80AF:kÄ›n 0x80B0:rán 0x80B1:gÅ�ng 0x80B2:yù,zhòu,yÅ� 0x80B3:wÄ›n 0x80B4:yáo 0x80B5:qí 0x80B6:pí,bì 0x80B7:qiÇŽn,xù 0x80B8:xÄ«,bì 0x80B9:xÄ« 0x80BA:fèi,pèi 0x80BB:kÄ›n 0x80BC:jÇ�ng 0x80BD:tài 0x80BE:shèn 0x80BF:zhÇ’ng 0x80C0:zhàng 0x80C1:xié 0x80C2:shèn,shÄ“n,chÄ“n 0x80C3:wèi 0x80C4:zhòu 0x80C5:dié 0x80C6:dÇŽn,tán,tÇŽn,dá 0x80C7:fèi,bì,fÄ›i 0x80C8:bá 0x80C9:bó 0x80CA:qú 0x80CB:tián 0x80CC:bèi,bÄ“i 0x80CD:guÄ�,gÅ«,hù 0x80CE:tÄ�i 0x80CF:zÇ�,fèi 0x80D0:fÄ›i 0x80D1:zhÄ« 0x80D2:nì 0x80D3:píng,pÄ“ng 0x80D4:zì,cí,jí 0x80D5:fÇ”,fÅ«,fú,zhÇ’u 0x80D6:pàng,pàn,pán 0x80D7:zhÄ“n,zhÄ›n,zhÅ«n 0x80D8:xián 0x80D9:zuò 0x80DA:pÄ“i 0x80DB:jiÇŽ 0x80DC:shèng,xÄ«ng,qìng,shÄ“ng 0x80DD:zhÄ«,chÄ«,dì 0x80DE:bÄ�o,páo,pào 0x80DF:mÇ” 0x80E0:qÅ« 0x80E1:hú 0x80E2:kÄ“ 0x80E3:chÇ� 0x80E4:yìn 0x80E5:xÅ«,xÇ” 0x80E6:yÄ�ng 0x80E7:lóng 0x80E8:dòng 0x80E9:kÇŽ 0x80EA:lú 0x80EB:jìng 0x80EC:nÇ”,nÇš 0x80ED:yÄ�n 0x80EE:pÄ�ng 0x80EF:kuà,kuÇŽ 0x80F0:yí 0x80F1:guÄ�ng 0x80F2:hÇŽi,gÄ�i,gÇŽi 0x80F3:gÄ“,gé,gÄ� 0x80F4:dòng 0x80F5:chÄ«,zhì 0x80F6:jiÄ�o,xiáo 0x80F7:xiÅ�ng 0x80F8:xiÅ�ng 0x80F9:ér 0x80FA:àn,è 0x80FB:héng 0x80FC:pián 0x80FD:néng,tái,nái,nài,xióng 0x80FE:zì 0x80FF:guÄ«,kuì 0x8100:chéng,zhÄ“ng,zhèng 0x8101:tiÇŽo 0x8102:zhÄ«,zhÇ� 0x8103:cuì 0x8104:méi 0x8105:xié,xiàn,xÄ« 0x8106:cuì 0x8107:xié 0x8108:mài,mò 0x8109:mài,mò 0x810A:jí,jÇ� 0x810B:xié 0x810C:nin 0x810D:kuài 0x810E:sà 0x810F:zàng,zÄ�ng 0x8110:qí 0x8111:nÇŽo 0x8112:mÇ� 0x8113:nóng 0x8114:luán,jÄ« 0x8115:wàn,wèn 0x8116:bó,bÅ� 0x8117:wÄ›n 0x8118:wÇŽn,huàn 0x8119:xiÅ« 0x811A:jiÇŽo,jué 0x811B:jìng,kÄ“ng 0x811C:yÇ’u 0x811D:hÄ“ng 0x811E:cuÇ’,qiÄ“ 0x811F:liè,luán,pÄ�o 0x8120:shÄ�n,chÄ�n 0x8121:tÇ�ng 0x8122:méi 0x8123:chún 0x8124:shèn 0x8125:qiÇŽn,qÅ«,jié 0x8126:de,tè,te 0x8127:juÄ�n,zuÄ« 0x8128:cù,jí 0x8129:xiÅ«,yÇ’u,tiáo,xiÄ�o 0x812A:xìn,chÄ« 0x812B:tuÅ� 0x812C:pÄ�o 0x812D:chéng 0x812E:nÄ›i,tuÇ� 0x812F:pú,fÇ” 0x8130:dòu 0x8131:tuÅ�,tuì 0x8132:niào 0x8133:nÇŽo 0x8134:pÇ� 0x8135:gÇ” 0x8136:luó 0x8137:lì 0x8138:liÇŽn 0x8139:zhàng,cháng 0x813A:cuì,suì 0x813B:jiÄ“ 0x813C:liÇŽng,lÇŽng 0x813D:shuí 0x813E:pí,pái,bì,pì 0x813F:biÄ�o,biào,biÇŽo 0x8140:lún 0x8141:pián 0x8142:lÄ›i,guò,huà 0x8143:kuì,quÄ�n,quán,juàn 0x8144:chuí,hóu,chuái 0x8145:dàn 0x8146:tiÇŽn 0x8147:nÄ›i 0x8148:jÄ«ng 0x8149:nái 0x814A:là,xÄ« 0x814B:yè 0x814C:yÄ�n,Ä�,Ä�ng 0x814D:rèn,diàn 0x814E:shèn 0x814F:chuò,zhuì 0x8150:fÇ” 0x8151:fÇ” 0x8152:jÅ« 0x8153:féi 0x8154:qiÄ�ng,kòng 0x8155:wàn 0x8156:dòng 0x8157:pí 0x8158:guó 0x8159:zÅ�ng 0x815A:dìng 0x815B:wò 0x815C:méi 0x815D:ní,ruÇŽn,nào,nèn,ér 0x815E:zhuàn,dùn,tú 0x815F:chì 0x8160:còu 0x8161:luó 0x8162:Ç’u 0x8163:dì 0x8164:Ä�n 0x8165:xÄ«ng 0x8166:nÇŽo,nào 0x8167:shù,yú 0x8168:shuàn 0x8169:nÇŽn 0x816A:yùn 0x816B:zhÇ’ng 0x816C:róu 0x816D:è 0x816E:sÄ�i 0x816F:tú,dùn 0x8170:yÄ�o 0x8171:jiàn,qián 0x8172:wÄ›i 0x8173:jiÇŽo,jué 0x8174:yú 0x8175:jiÄ� 0x8176:duàn 0x8177:bì 0x8178:cháng 0x8179:fù 0x817A:xiàn 0x817B:nì 0x817C:miÇŽn 0x817D:wà 0x817E:téng 0x817F:tuÇ� 0x8180:bÇŽng,páng,pÄ�ng,bàng,pÇŽng 0x8181:qiÇŽn,xiàn,yán 0x8182:lÇš 0x8183:wà 0x8184:shòu 0x8185:táng 0x8186:sù 0x8187:zhuì 0x8188:gé 0x8189:yì 0x818A:bó,pò,liè 0x818B:liáo 0x818C:jí 0x818D:pí 0x818E:xié 0x818F:gÄ�o,gào 0x8190:lÇš 0x8191:bìn 0x8192:Å�u 0x8193:cháng 0x8194:lù,biÄ�o 0x8195:guó,huò 0x8196:pÄ�ng 0x8197:chuái 0x8198:biÄ�o,piÇŽo 0x8199:jiÇŽng 0x819A:fÅ«,lú 0x819B:táng,tÄ�ng 0x819C:mó 0x819D:xÄ« 0x819E:zhuÄ�n,zhuÇŽn,chuÇŽn,chún 0x819F:lÇœ 0x81A0:jiÄ�o,jiÇŽo,háo,nÇŽo 0x81A1:yìng 0x81A2:lǘ 0x81A3:zhì 0x81A4:xuÄ› 0x81A5:cÅ«n 0x81A6:lìn,liÇŽn 0x81A7:tóng 0x81A8:péng,pèng 0x81A9:nì 0x81AA:chuài,zhà,zhài 0x81AB:liáo,liÇŽo 0x81AC:cuì 0x81AD:guÄ«,kuì,duì 0x81AE:xiÄ�o 0x81AF:tÄ“ng,tún 0x81B0:fán,pán 0x81B1:zhí 0x81B2:jiÄ�o 0x81B3:shàn 0x81B4:hÅ«,wÇ”,méi 0x81B5:cuì 0x81B6:rùn 0x81B7:xiÄ�ng 0x81B8:suÇ�,wÄ›i 0x81B9:fèn 0x81BA:yÄ«ng 0x81BB:shÄ�n,dàn 0x81BC:zhuÄ� 0x81BD:dÇŽn 0x81BE:kuài 0x81BF:nóng 0x81C0:tún 0x81C1:lián 0x81C2:bì,bei 0x81C3:yÅ�ng 0x81C4:jué,jÅ« 0x81C5:chù 0x81C6:yì,yÇ� 0x81C7:juÇŽn 0x81C8:là,gé 0x81C9:liÇŽn 0x81CA:sÄ�o,sào 0x81CB:tún 0x81CC:gÇ” 0x81CD:qí 0x81CE:cuì 0x81CF:bìn 0x81D0:xÅ«n 0x81D1:nào,rú,ér,nèn,nuÇŽn 0x81D2:wò,yuè 0x81D3:zàng 0x81D4:xiàn 0x81D5:biÄ�o 0x81D6:xìng 0x81D7:kuÄ�n 0x81D8:là,liè 0x81D9:yÄ�n 0x81DA:lú,lÇš 0x81DB:huò 0x81DC:zÄ� 0x81DD:luÇ’ 0x81DE:qú 0x81DF:zàng 0x81E0:luán 0x81E1:ní,luán 0x81E2:zÄ�,zÄ�n 0x81E3:chén 0x81E4:qiÄ�n,xián,qìn 0x81E5:wò 0x81E6:guàng,jiÇ’ng 0x81E7:zÄ�ng,cáng,zàng 0x81E8:lín,lìn 0x81E9:guÇŽng,jiÇ’ng 0x81EA:zì 0x81EB:jiÇŽo 0x81EC:niè 0x81ED:chòu,xiù 0x81EE:jì 0x81EF:gÄ�o 0x81F0:chòu 0x81F1:mián,biÄ�n 0x81F2:niè 0x81F3:zhì,dié 0x81F4:zhì,zhuì 0x81F5:gé 0x81F6:jiàn 0x81F7:dié,zhí 0x81F8:zhÄ«,jìn 0x81F9:xiÅ« 0x81FA:tái 0x81FB:zhÄ“n 0x81FC:jiù 0x81FD:xiàn 0x81FE:yú,yÇ”,yÇ’ng,kuì 0x81FF:chÄ� 0x8200:yÇŽo 0x8201:yú 0x8202:chÅ�ng,chuÄ�ng,zhÅ�ng 0x8203:xì 0x8204:xì,què,tuÅ� 0x8205:jiù 0x8206:yú 0x8207:yÇ”,yú,yù 0x8208:xìng,xÄ«ng,xìn 0x8209:jÇ” 0x820A:jiù 0x820B:xìn 0x820C:shé,guÄ� 0x820D:shÄ›,shè,shì 0x820E:shè 0x820F:jiÇ” 0x8210:shì 0x8211:tÄ�n 0x8212:shÅ«,yù 0x8213:shì 0x8214:tiÇŽn,tÄ�n 0x8215:tàn 0x8216:pù 0x8217:pù 0x8218:guÇŽn 0x8219:huà,qì 0x821A:tiàn 0x821B:chuÇŽn 0x821C:shùn 0x821D:xiá 0x821E:wÇ” 0x821F:zhÅ�u 0x8220:dÄ�o 0x8221:chuán,xiÄ�ng 0x8222:shÄ�n 0x8223:yÇ� 0x8224:fán 0x8225:pÄ� 0x8226:tài 0x8227:fán 0x8228:bÇŽn 0x8229:chuán,fán 0x822A:háng 0x822B:fÇŽng 0x822C:bÄ�n,pán,bÇŽn,bÅ� 0x822D:bÇ� 0x822E:lú 0x822F:zhÅ�ng 0x8230:jiàn 0x8231:cÄ�ng 0x8232:líng 0x8233:zhú,zhÇ’u 0x8234:zé 0x8235:duò 0x8236:bó 0x8237:xián 0x8238:gÄ› 0x8239:chuán 0x823A:xiá 0x823B:lú 0x823C:qióng,hóng 0x823D:páng,féng 0x823E:xÄ« 0x823F:kuÄ� 0x8240:fú 0x8241:zào 0x8242:féng 0x8243:lí 0x8244:shÄ�o,shào 0x8245:yú 0x8246:láng 0x8247:tÇ�ng 0x8248:yù 0x8249:wÄ›i 0x824A:bó 0x824B:mÄ›ng 0x824C:niàn,qiàn 0x824D:jÅ« 0x824E:huáng 0x824F:shÇ’u 0x8250:kè,jiè,zÅ�ng 0x8251:biàn 0x8252:mù,mò 0x8253:dié 0x8254:dào 0x8255:bàng 0x8256:chÄ� 0x8257:yì 0x8258:sÅ�u 0x8259:cÄ�ng 0x825A:cáo 0x825B:lóu 0x825C:dài 0x825D:xuÄ› 0x825E:yào,tiào 0x825F:chÅ�ng,zhuàng,tóng 0x8260:dÄ“ng 0x8261:dÄ�ng 0x8262:qiáng 0x8263:lÇ” 0x8264:yÇ� 0x8265:jí 0x8266:jiàn 0x8267:huò,wò 0x8268:méng 0x8269:qí 0x826A:lÇ” 0x826B:lú 0x826C:chán 0x826D:shuÄ�ng 0x826E:gÄ›n,gèn,hén 0x826F:liáng,liÇŽng 0x8270:jiÄ�n 0x8271:jiÄ�n 0x8272:sè,shÇŽi 0x8273:yàn 0x8274:fú,bó,pèi 0x8275:pÄ«ng 0x8276:yàn 0x8277:yàn 0x8278:cÇŽo 0x8279:cÇŽo 0x827A:yì 0x827B:lè,jí 0x827C:tÄ«ng,dÇ�ng 0x827D:jiÄ�o,qiú 0x827E:ài,yì 0x827F:nÇŽi,réng,rèng 0x8280:tiáo 0x8281:jiÄ�o 0x8282:jié,jiÄ“ 0x8283:péng 0x8284:wán 0x8285:yì 0x8286:chÄ�i,chÄ� 0x8287:mián 0x8288:mÇ� 0x8289:gÄ�n,gÇŽn 0x828A:qiÄ�n,qiàn 0x828B:yù,yú,xÅ«,yÇ” 0x828C:yù 0x828D:sháo,xiào,què,dì 0x828E:qiÅ�ng,xiÅ�ng 0x828F:dù 0x8290:hù,xià 0x8291:qÇ� 0x8292:máng,huÄ�ng,huÇŽng,wáng 0x8293:zì,zÇ�,zÄ« 0x8294:huì,hÅ« 0x8295:suÄ« 0x8296:zhì 0x8297:xiÄ�ng 0x8298:pí,bì 0x8299:fú 0x829A:tún,chÅ«n 0x829B:wÄ›i 0x829C:wú 0x829D:zhÄ« 0x829E:qì 0x829F:shÄ�n,wÄ›i 0x82A0:wén 0x82A1:qiàn 0x82A2:rén 0x82A3:fú,fÇ’u,fÅ« 0x82A4:kÅ�u 0x82A5:jiè,gài 0x82A6:lú,hù,lÇ” 0x82A7:xù,zhù 0x82A8:jÄ« 0x82A9:qín,yín 0x82AA:qí,chí 0x82AB:yán,yuán 0x82AC:fÄ“n 0x82AD:bÄ�,pÄ� 0x82AE:ruì,ruò 0x82AF:xÄ«n,xìn 0x82B0:jì 0x82B1:huÄ� 0x82B2:huÄ� 0x82B3:fÄ�ng 0x82B4:wù,hÅ« 0x82B5:jué 0x82B6:gÇ’u 0x82B7:zhÇ� 0x82B8:yún,yùn 0x82B9:qín 0x82BA:ÇŽo 0x82BB:chú,zÅ�u 0x82BC:mào 0x82BD:yá 0x82BE:fèi,fú 0x82BF:rèng 0x82C0:háng 0x82C1:cÅ�ng 0x82C2:yín 0x82C3:yÇ’u 0x82C4:biàn 0x82C5:yì 0x82C6:qiÄ“ 0x82C7:wÄ›i 0x82C8:lì 0x82C9:pÇ� 0x82CA:è 0x82CB:xiàn 0x82CC:cháng 0x82CD:cÄ�ng 0x82CE:zhù 0x82CF:sÅ« 0x82D0:tí,dì 0x82D1:yuàn,yuÄ�n,yù,yùn 0x82D2:rÇŽn 0x82D3:líng,lián 0x82D4:tái,tÄ�i 0x82D5:sháo,tiáo 0x82D6:dí 0x82D7:miáo 0x82D8:qÇ�ng 0x82D9:lì,jÄ« 0x82DA:yòng 0x82DB:kÄ“,hÄ“ 0x82DC:mù 0x82DD:bèi 0x82DE:bÄ�o,páo,biÄ�o 0x82DF:gÇ’u,gÅ�u 0x82E0:mín 0x82E1:yÇ� 0x82E2:yÇ� 0x82E3:jù,qÇ” 0x82E4:piÄ›,pÄ« 0x82E5:ruò,ré,rè,rÄ› 0x82E6:kÇ”,gÇ”,hù 0x82E7:níng,zhù 0x82E8:nÇ� 0x82E9:bó,pÄ� 0x82EA:bÇ�ng 0x82EB:shÄ�n,shàn,tiÄ�n,chÄ�n 0x82EC:xiú 0x82ED:yÇŽo 0x82EE:xiÄ�n 0x82EF:bÄ›n 0x82F0:hóng 0x82F1:yÄ«ng,yÄ�ng 0x82F2:zhÇŽ,zhà,zuó 0x82F3:dÅ�ng 0x82F4:jÅ«,chá,zhÇŽ,zÅ«,jiÄ“,bÄ�o,xié 0x82F5:dié 0x82F6:nié,niè 0x82F7:gÄ�n 0x82F8:hÅ« 0x82F9:píng,pÄ“ng 0x82FA:méi 0x82FB:fú,pú 0x82FC:shÄ“ng,ruí 0x82FD:gÅ«,guÄ� 0x82FE:bì,bié,mì 0x82FF:wèi 0x8300:fú,bó,fèi,bèi,bì 0x8301:zhuó,zhú 0x8302:mào 0x8303:fàn 0x8304:jiÄ�,qié 0x8305:máo 0x8306:máo,mÇŽo 0x8307:bá,pèi,fèi 0x8308:cí,zÇ�,cÇ�,chái 0x8309:mò 0x830A:zÄ« 0x830B:zhÇ� 0x830C:chí 0x830D:jì 0x830E:jÄ«ng 0x830F:lóng 0x8310:cÅ�ng 0x8311:niÇŽo 0x8312:yuán 0x8313:xué 0x8314:yíng 0x8315:qióng 0x8316:gé,luò 0x8317:míng 0x8318:lì 0x8319:róng 0x831A:yìn 0x831B:gèn,jiàn 0x831C:qiàn,xÄ« 0x831D:chÇŽi,zhÇ� 0x831E:chén 0x831F:yù,wÄ›i 0x8320:hÄ�o,xiÅ«,kòu 0x8321:zì 0x8322:liè 0x8323:wú 0x8324:jì,duÅ� 0x8325:guÄ«,guì 0x8326:cì 0x8327:jiÇŽn,chóng 0x8328:cí 0x8329:gòu 0x832A:guÄ�ng 0x832B:máng,huÇŽng 0x832C:chá,chí 0x832D:jiÄ�o,xiào,qiào 0x832E:jiÄ�o,niÇŽo 0x832F:fú 0x8330:yú 0x8331:zhÅ« 0x8332:zÄ«,cí 0x8333:jiÄ�ng 0x8334:huí 0x8335:yÄ«n 0x8336:chá 0x8337:fá,pèi,bó,bá 0x8338:rÅ�ng,róng,rÇ’ng 0x8339:rú 0x833A:chÅ�ng 0x833B:mÇŽng,mÇ” 0x833C:tóng 0x833D:zhòng 0x833E:qiÄ�n 0x833F:zhú 0x8340:xún 0x8341:huán 0x8342:fÅ« 0x8343:quán,chuò 0x8344:gÄ�i 0x8345:dÄ�,dá,tà 0x8346:jÄ«ng 0x8347:xìng 0x8348:chuÇŽn 0x8349:cÇŽo,zào 0x834A:jÄ«ng 0x834B:ér 0x834C:àn 0x834D:qiáo 0x834E:chí 0x834F:rÄ›n 0x8350:jiàn 0x8351:tí,yí 0x8352:huÄ�ng,huÇŽng,kÄ�ng,huáng 0x8353:píng,pÄ“ng 0x8354:lì 0x8355:jÄ«n 0x8356:lÇŽo,chÄ� 0x8357:shù 0x8358:zhuÄ�ng 0x8359:dá 0x835A:jiá 0x835B:ráo 0x835C:bì 0x835D:cè 0x835E:qiáo 0x835F:huì 0x8360:jì,qí 0x8361:dàng 0x8362:zì 0x8363:róng 0x8364:hÅ«n,xÅ«n 0x8365:xíng,yíng 0x8366:luò 0x8367:yíng 0x8368:xún,qián 0x8369:jìn 0x836A:sÅ«n 0x836B:yÄ«n,yìn 0x836C:mÇŽi 0x836D:hóng 0x836E:zhòu 0x836F:yào 0x8370:dù 0x8371:wÄ›i,wèi 0x8372:lí 0x8373:dòu 0x8374:fÅ« 0x8375:rÄ›n 0x8376:yín 0x8377:hé,hè,hÄ“ 0x8378:bí 0x8379:bù,pú 0x837A:yÇ”n,yún 0x837B:dí 0x837C:tú,chá,yé,shÅ« 0x837D:suÄ«,wÄ›i 0x837E:suÄ« 0x837F:chéng 0x8380:chén,nóng 0x8381:wú 0x8382:bié 0x8383:xÄ« 0x8384:gÄ›ng 0x8385:lì 0x8386:pú,fÇ” 0x8387:zhù 0x8388:mò 0x8389:lì,lí,chí 0x838A:zhuÄ�ng 0x838B:zuó,jí 0x838C:tuÅ� 0x838D:qiú 0x838E:shÄ�,suÅ�,suÄ« 0x838F:suÅ� 0x8390:chén 0x8391:péng,fÄ“ng 0x8392:jÇ” 0x8393:méi 0x8394:méng,xí,qÇ�ng 0x8395:xìng 0x8396:jÄ«ng,yÄ«ng 0x8397:chÄ“ 0x8398:shÄ“n,xÄ«n 0x8399:jÅ«n 0x839A:yán 0x839B:tíng,tÇ�ng 0x839C:yóu,diào,dí 0x839D:cuò 0x839E:guÇŽn,guÄ�n,wÇŽn 0x839F:hàn 0x83A0:yÇ’u,xiù 0x83A1:cuò 0x83A2:jiá 0x83A3:wáng 0x83A4:sù,yóu 0x83A5:niÇ”,ròu 0x83A6:shÄ�o,xiÄ�o 0x83A7:xiàn,wàn 0x83A8:làng,láng,liáng 0x83A9:fú,piÇŽo 0x83AA:é 0x83AB:mò,mù 0x83AC:wèn,wÇŽn,miÇŽn 0x83AD:jié 0x83AE:nán 0x83AF:mù 0x83B0:kÇŽn 0x83B1:lái 0x83B2:lián 0x83B3:shí,shì 0x83B4:wÅ� 0x83B5:tù 0x83B6:xiÄ�n 0x83B7:huò 0x83B8:yóu 0x83B9:yíng 0x83BA:yÄ«ng 0x83BB:gòng 0x83BC:chún 0x83BD:mÇŽng,máng 0x83BE:mÇŽng 0x83BF:cì 0x83C0:wÇŽn,yù,yùn 0x83C1:jÄ«ng 0x83C2:dì 0x83C3:qú 0x83C4:dÅ�ng 0x83C5:jiÄ�n,guÄ�n 0x83C6:zÅ�u,cuán,chù,cóng 0x83C7:gÅ« 0x83C8:lÄ� 0x83C9:lù,lÇœ 0x83CA:jú 0x83CB:wèi 0x83CC:jÅ«n,jùn 0x83CD:niè,rÄ›n 0x83CE:kÅ«n 0x83CF:hé,gÄ“ 0x83D0:pú 0x83D1:zÄ�i,zÄ«,zì 0x83D2:gÇŽo 0x83D3:guÇ’ 0x83D4:fú 0x83D5:lún 0x83D6:chÄ�ng 0x83D7:chóu 0x83D8:sÅ�ng 0x83D9:chuí 0x83DA:zhàn 0x83DB:mén 0x83DC:cài 0x83DD:bá 0x83DE:lí 0x83DF:tú,tù 0x83E0:bÅ� 0x83E1:hàn 0x83E2:bào 0x83E3:qìn 0x83E4:juÇŽn 0x83E5:xÄ«,sÄ« 0x83E6:qín 0x83E7:dÇ� 0x83E8:jiÄ“,shà 0x83E9:pú,bèi,bó 0x83EA:dàng 0x83EB:jÇ�n 0x83EC:qiáo,zhÇŽo 0x83ED:tái,zhÄ«,chí 0x83EE:gÄ“ng 0x83EF:huá,huÄ�,huà,kuÄ� 0x83F0:gÅ« 0x83F1:líng 0x83F2:fÄ“i,fÄ›i,fèi 0x83F3:qín,qÄ«n,jÄ«n 0x83F4:Ä�n,yÇŽn 0x83F5:wÇŽng 0x83F6:bÄ›ng 0x83F7:zhÇ’u 0x83F8:yÄ�n,yÅ«,yù 0x83F9:jÅ«,zÅ«,jù 0x83FA:jiÄ�n 0x83FB:lÇ�n 0x83FC:tÇŽn 0x83FD:shÅ«,jiÄ�o 0x83FE:tián,tiàn 0x83FF:dào,dÇŽo 0x8400:hÇ” 0x8401:qí,jÄ« 0x8402:hé 0x8403:cuì 0x8404:táo 0x8405:chÅ«n 0x8406:bì,pì,bÄ“i,bá 0x8407:cháng 0x8408:huán 0x8409:fèi,féi,fú 0x840A:lái 0x840B:qÄ« 0x840C:méng,míng 0x840D:píng 0x840E:wÄ“i,wèi,wÄ›i 0x840F:dàn 0x8410:shà 0x8411:huán,zhuÄ« 0x8412:yÇŽn,juàn 0x8413:yí 0x8414:tiáo 0x8415:qí 0x8416:wÇŽn 0x8417:cè 0x8418:nài 0x8419:zhÄ›n 0x841A:tuò 0x841B:jiÅ« 0x841C:tiÄ“ 0x841D:luó 0x841E:bì 0x841F:yì 0x8420:pÄ�n 0x8421:bo 0x8422:pÄ�o 0x8423:dìng 0x8424:yíng 0x8425:yíng 0x8426:yíng 0x8427:xiÄ�o 0x8428:sà 0x8429:qiÅ«,jiÄ�o 0x842A:kÄ“ 0x842B:xiàng 0x842C:wàn 0x842D:yÇ”,jÇ” 0x842E:yú,yÇ”,yù 0x842F:fù,bèi 0x8430:liàn 0x8431:xuÄ�n 0x8432:xuÄ�n 0x8433:nÇŽn,nán 0x8434:cè 0x8435:wÅ� 0x8436:chÇ”n 0x8437:xiÄ�o,shÄ�o,shuò 0x8438:yú 0x8439:biÇŽn,biÄ�n,pián 0x843A:mào,mù 0x843B:Ä�n 0x843C:è 0x843D:luò,là,lào,luÅ� 0x843E:yíng 0x843F:kuò,huó 0x8440:kuò 0x8441:jiÄ�ng 0x8442:miÇŽn 0x8443:zuò,zé 0x8444:zuò 0x8445:zÅ« 0x8446:bÇŽo,bÄ�o 0x8447:róu,rÇ’u 0x8448:xÇ� 0x8449:yè,shè 0x844A:Ä�n 0x844B:qú 0x844C:jiÄ�n 0x844D:fú 0x844E:lÇœ 0x844F:jÄ«ng 0x8450:pén,fén 0x8451:fÄ“ng,fèng 0x8452:hóng 0x8453:hóng 0x8454:hóu 0x8455:yàn 0x8456:tÅ« 0x8457:zhù,zhe,chú,zhuó,zhÄ�o,zháo 0x8458:zÄ« 0x8459:xiÄ�ng 0x845A:rèn,shèn 0x845B:gé,gÄ› 0x845C:qiÄ� 0x845D:qíng,jìng 0x845E:mÇ� 0x845F:huáng 0x8460:shÄ“n,shÄ�n 0x8461:pú,bèi 0x8462:gài 0x8463:dÇ’ng,zhÇ’ng 0x8464:zhòu 0x8465:jiàn,qián 0x8466:wÄ›i 0x8467:bó 0x8468:wÄ“i 0x8469:pÄ� 0x846A:jì 0x846B:hú 0x846C:zàng 0x846D:jiÄ�,xiá 0x846E:duàn 0x846F:yào 0x8470:suÄ«,jùn,suÇ’ 0x8471:cÅ�ng,chuÄ�ng 0x8472:quán 0x8473:wÄ“i 0x8474:zhÄ“n,qián 0x8475:kuí 0x8476:tíng,dÇ�ng 0x8477:hÅ«n,xÅ«n 0x8478:xÇ� 0x8479:shÄ« 0x847A:qì 0x847B:lán 0x847C:zÅ�ng 0x847D:yÄ�o,yÇŽo 0x847E:yuÄ�n 0x847F:méi 0x8480:yÅ«n 0x8481:shù 0x8482:dì 0x8483:zhuàn 0x8484:guÄ�n 0x8485:rÇŽn 0x8486:xuÄ“ 0x8487:chÇŽn 0x8488:kÇŽi 0x8489:kuì 0x848A:huÄ� 0x848B:jiÇŽng 0x848C:lóu 0x848D:wÄ›i,huÄ�,kuÄ«,é 0x848E:pài 0x848F:you 0x8490:sÅ�u,huì 0x8491:yÄ«n 0x8492:shÄ« 0x8493:chún 0x8494:shí,shì 0x8495:yÅ«n 0x8496:zhÄ“n 0x8497:làng 0x8498:rú,ná 0x8499:méng,mÄ›ng,mÄ“ng 0x849A:lì 0x849B:quÄ“ 0x849C:suàn 0x849D:yuán,huán 0x849E:lì 0x849F:jÇ” 0x84A0:xÄ« 0x84A1:bàng,páng 0x84A2:chú 0x84A3:xú,shú 0x84A4:tú 0x84A5:liú 0x84A6:huò,wò 0x84A7:diÇŽn 0x84A8:qiàn 0x84A9:zÅ«,jù,jí 0x84AA:pò 0x84AB:cuó 0x84AC:yuÄ�n 0x84AD:chú 0x84AE:yù 0x84AF:kuÇŽi,kuài 0x84B0:pán 0x84B1:pú 0x84B2:pú,bó 0x84B3:nà 0x84B4:shuò 0x84B5:xí,xì 0x84B6:fén 0x84B7:yún 0x84B8:zhÄ“ng 0x84B9:jiÄ�n 0x84BA:jí 0x84BB:ruò 0x84BC:cÄ�ng,cÇŽng 0x84BD:Ä“n 0x84BE:mí 0x84BF:hÄ�o,gÇŽo 0x84C0:sÅ«n 0x84C1:zhÄ“n,qín 0x84C2:míng,mì 0x84C3:sÅ�u,sÇ’u 0x84C4:xù 0x84C5:liú 0x84C6:xí 0x84C7:gÇ”,gÅ« 0x84C8:láng 0x84C9:róng 0x84CA:wÄ›ng 0x84CB:gài,gÄ› 0x84CC:cuò 0x84CD:shÄ« 0x84CE:táng 0x84CF:luÇ’ 0x84D0:rù 0x84D1:suÅ�,suÄ« 0x84D2:xuÄ�n 0x84D3:bèi 0x84D4:yÇŽo,zhuó 0x84D5:guì 0x84D6:bì 0x84D7:zÇ’ng 0x84D8:gÇ”n 0x84D9:zuò 0x84DA:tiáo 0x84DB:cè 0x84DC:pèi 0x84DD:lán,la 0x84DE:dàn 0x84DF:jì 0x84E0:lí 0x84E1:shÄ“n 0x84E2:lÇŽng 0x84E3:yù 0x84E4:líng 0x84E5:yíng 0x84E6:mò 0x84E7:diào,tiáo,dí 0x84E8:tiáo,xiÅ« 0x84E9:mÇŽo 0x84EA:tÅ�ng 0x84EB:chù,zhú 0x84EC:péng,pèng 0x84ED:Ä�n 0x84EE:lián,liÇŽn 0x84EF:cÅ�ng,zÇ’ng,sÇ’ng 0x84F0:xÇ� 0x84F1:píng 0x84F2:qiÅ«,Å�u,xÅ«,fÅ« 0x84F3:jÇ�n 0x84F4:chún,tuán 0x84F5:jié 0x84F6:wéi 0x84F7:tuÄ« 0x84F8:cáo 0x84F9:yù 0x84FA:yì 0x84FB:zí,jú 0x84FC:liÇŽo,lù,lÇŽo,liÇ” 0x84FD:bì 0x84FE:lÇ” 0x84FF:xu,sù 0x8500:bù 0x8501:zhÄ�ng 0x8502:léi 0x8503:qiáng,jiàng 0x8504:màn 0x8505:yán 0x8506:líng 0x8507:jì,xì 0x8508:biÄ�o,piÇŽo,biào 0x8509:gÇ”n 0x850A:hÇŽn 0x850B:dí 0x850C:sù 0x850D:lù,cÅ« 0x850E:shè 0x850F:shÄ�ng 0x8510:dí 0x8511:miè 0x8512:xÅ«n 0x8513:màn,wàn,mán 0x8514:bó,bo 0x8515:dì,dài,chài 0x8516:cuó,cÇ”,zhÄ� 0x8517:zhè 0x8518:shÄ“n,sÄ�n,sÇŽn 0x8519:xuàn 0x851A:wèi,yù 0x851B:hú 0x851C:áo 0x851D:mÇ� 0x851E:lóu,lÇš,jù,liÇ” 0x851F:cù,còu,chuò 0x8520:zhÅ�ng 0x8521:cài,sà,cÄ� 0x8522:pó,bò 0x8523:jiÇŽng,jiÄ�ng 0x8524:mì 0x8525:cÅ�ng 0x8526:niÇŽo 0x8527:huì 0x8528:juàn,jùn 0x8529:yín 0x852A:jiàn,jiÄ�n,shÄ�n 0x852B:niÄ�n,yÄ�n,yàn 0x852C:shÅ«,shÇ” 0x852D:yÄ«n,yìn 0x852E:guó 0x852F:chén 0x8530:hù 0x8531:shÄ� 0x8532:kòu 0x8533:qiàn 0x8534:má 0x8535:zÄ�ng,cáng 0x8536:zé 0x8537:qiáng 0x8538:dÅ�u 0x8539:liÇŽn 0x853A:lìn 0x853B:kòu 0x853C:ÇŽi 0x853D:bì,biÄ“,piÄ“ 0x853E:lí 0x853F:wÄ›i 0x8540:jí 0x8541:qián,tán,xún 0x8542:shèng 0x8543:fÄ�n,fán,pí,bÅ� 0x8544:méng 0x8545:Ç’u 0x8546:chÇŽn 0x8547:diÇŽn 0x8548:xùn,tán 0x8549:jiÄ�o,qiáo,qiÄ�o 0x854A:ruÇ�,juÇŽn 0x854B:ruÇ� 0x854C:lÄ›i 0x854D:yú 0x854E:qiáo,jiÄ�o 0x854F:chú 0x8550:huá 0x8551:jiÄ�n 0x8552:mÇŽi 0x8553:yún 0x8554:bÄ�o 0x8555:yóu 0x8556:qú 0x8557:lù 0x8558:ráo,yáo 0x8559:huì 0x855A:è 0x855B:tí 0x855C:fÄ›i 0x855D:jué,zuì 0x855E:zuì,jué,zhuó 0x855F:fà,fèi 0x8560:rú 0x8561:fén,fèi 0x8562:kuì,kuài 0x8563:shùn 0x8564:ruí 0x8565:yÇŽ 0x8566:xÅ« 0x8567:fù 0x8568:jué 0x8569:dàng,tÄ�ng,tàng 0x856A:wú,wÇ” 0x856B:dÇ’ng 0x856C:sÄ« 0x856D:xiÄ�o 0x856E:xì 0x856F:lóng 0x8570:wÄ“n,yùn 0x8571:shÄ�o 0x8572:qí 0x8573:jiÄ�n 0x8574:yùn 0x8575:sÅ«n 0x8576:líng 0x8577:yù 0x8578:xiá 0x8579:wèng,yÅ�ng 0x857A:jí,qiè 0x857B:hóng,hòng 0x857C:sì 0x857D:nóng 0x857E:lÄ›i 0x857F:xuÄ�n 0x8580:yùn 0x8581:yù 0x8582:xí,xiào 0x8583:hào 0x8584:báo,bó,bù,bò 0x8585:hÄ�o 0x8586:ài 0x8587:wÄ“i 0x8588:huì 0x8589:huì 0x858A:jì 0x858B:cí,zÄ« 0x858C:xiÄ�ng,xiÇŽng 0x858D:wàn,luàn 0x858E:miè 0x858F:yì 0x8590:léng 0x8591:jiÄ�ng 0x8592:càn 0x8593:shÄ“n 0x8594:qiáng,sè 0x8595:lián 0x8596:kÄ“ 0x8597:yuán 0x8598:dá 0x8599:tì,zhì 0x859A:tÄ�ng 0x859B:xuÄ“ 0x859C:bì,bò,bó,bài,pì 0x859D:zhÄ�n 0x859E:sÅ«n 0x859F:xiÄ�n,liÇŽn,yán,kàn 0x85A0:fán 0x85A1:dÇ�ng 0x85A2:xiè 0x85A3:gÇ” 0x85A4:xiè 0x85A5:shÇ”,zhú 0x85A6:jiàn 0x85A7:hÄ�o,kÇŽo 0x85A8:hÅ�ng 0x85A9:sà 0x85AA:xÄ«n 0x85AB:xÅ«n 0x85AC:yào 0x85AD:bài 0x85AE:sÇ’u 0x85AF:shÇ” 0x85B0:xÅ«n 0x85B1:duì 0x85B2:pín 0x85B3:wÄ›i,yuÇŽn 0x85B4:níng 0x85B5:chóu,zhòu,dào 0x85B6:mái,wÅ� 0x85B7:rú 0x85B8:piáo 0x85B9:tái 0x85BA:jì,cí,qì,qí 0x85BB:zÇŽo 0x85BC:chén 0x85BD:zhÄ“n 0x85BE:Ä›r 0x85BF:nÇ� 0x85C0:yíng 0x85C1:gÇŽo 0x85C2:cóng,còng 0x85C3:xiÄ�o,hào,hè 0x85C4:qí 0x85C5:fá 0x85C6:jiÇŽn 0x85C7:xù,yÇ”,yú,yù,xÅ« 0x85C8:kuí 0x85C9:jí,jiè 0x85CA:biÇŽn 0x85CB:diào,dí,zhuó 0x85CC:mì 0x85CD:lán,la 0x85CE:jìn 0x85CF:cáng,zàng,zÄ�ng 0x85D0:miÇŽo,mò 0x85D1:qióng 0x85D2:qiè 0x85D3:xiÇŽn 0x85D4:liáo 0x85D5:Ç’u 0x85D6:xián,qiÄ�n 0x85D7:sù 0x85D8:lǘ 0x85D9:yì 0x85DA:xù 0x85DB:xiÄ› 0x85DC:lí 0x85DD:yì 0x85DE:lÇŽ 0x85DF:lÄ›i 0x85E0:jiào 0x85E1:dí 0x85E2:zhÇ� 0x85E3:bÄ“i 0x85E4:téng 0x85E5:yào,shuò,lüè 0x85E6:mò 0x85E7:huàn 0x85E8:biÄ�o,pÄ�o 0x85E9:fÄ�n,fán 0x85EA:sÇ’u,shÇ”,còu 0x85EB:tán 0x85EC:tuÄ« 0x85ED:qióng 0x85EE:qiáo 0x85EF:wèi 0x85F0:liú,liÇ” 0x85F1:huì,huí 0x85F2:Å�u 0x85F3:gÇŽo 0x85F4:yùn,wÄ“n 0x85F5:bÇŽo 0x85F6:lì 0x85F7:shÇ”,zhÅ« 0x85F8:chú,zhÅ«,zhÄ� 0x85F9:ÇŽi 0x85FA:lìn 0x85FB:zÇŽo 0x85FC:xuÄ�n 0x85FD:qìn 0x85FE:lài 0x85FF:huò,hé 0x8600:tuò,zé 0x8601:wù,è 0x8602:ruÇ� 0x8603:ruÇ� 0x8604:qí,jÄ«,qín 0x8605:héng 0x8606:lú,lÇ” 0x8607:sÅ« 0x8608:tuí 0x8609:méng,máng 0x860A:yùn 0x860B:píng,pín 0x860C:yÇ” 0x860D:xÅ«n 0x860E:jì 0x860F:jiÅ�ng 0x8610:xuÄ�n 0x8611:mó 0x8612:qiÅ« 0x8613:sÅ« 0x8614:jiÅ�ng 0x8615:péng 0x8616:niè,bò 0x8617:bò,bì 0x8618:ráng,xiÄ�ng,nÄ�ng 0x8619:yì 0x861A:xiÇŽn 0x861B:yú 0x861C:jú 0x861D:liÇŽn 0x861E:liÇŽn,xiÄ�n 0x861F:yÇ�n 0x8620:qiáng 0x8621:yÄ«ng 0x8622:lóng,lÇ’ng,lòng 0x8623:tÇ’u 0x8624:huÄ� 0x8625:yuè 0x8626:líng 0x8627:qú,jù 0x8628:yáo 0x8629:fán 0x862A:méi 0x862B:hàn,làn 0x862C:kuÄ«,huÇ�,guÄ« 0x862D:lán 0x862E:jì 0x862F:dàng 0x8630:màn 0x8631:lèi 0x8632:léi 0x8633:huÄ« 0x8634:fÄ“ng,sÅ�ng 0x8635:zhÄ« 0x8636:wèi 0x8637:kuí 0x8638:zhàn 0x8639:huái 0x863A:lí 0x863B:jì 0x863C:mí 0x863D:lÄ›i 0x863E:huài 0x863F:luó 0x8640:jÄ« 0x8641:kuí 0x8642:lù 0x8643:jiÄ�n 0x8644:sà 0x8645:téng 0x8646:léi 0x8647:quÇŽn 0x8648:xiÄ�o 0x8649:yì 0x864A:luán 0x864B:mén 0x864C:biÄ“ 0x864D:hÅ« 0x864E:hÇ”,hù 0x864F:lÇ” 0x8650:nüè 0x8651:lÇœ,bì 0x8652:sÄ«,xÄ«,tí,zhì 0x8653:xiÄ�o 0x8654:qián 0x8655:chù,chÇ”,jù 0x8656:hÅ«,hú,hù 0x8657:xÅ« 0x8658:cuó 0x8659:fú 0x865A:xÅ« 0x865B:xÅ« 0x865C:lÇ” 0x865D:hÇ” 0x865E:yú 0x865F:hào,háo 0x8660:jiÄ�o,háo 0x8661:jù 0x8662:guó 0x8663:bào 0x8664:yán 0x8665:zhàn 0x8666:zhàn 0x8667:kuÄ« 0x8668:bÄ«n 0x8669:xì,sè 0x866A:shù 0x866B:chóng,huÇ� 0x866C:qiú 0x866D:diÄ�o,dÄ�o 0x866E:jÇ�,jÄ« 0x866F:qiú 0x8670:dÄ«ng,chÄ“ng 0x8671:shÄ« 0x8672:xiÄ� 0x8673:jué 0x8674:zhé 0x8675:shé,yÄ› 0x8676:yÅ« 0x8677:hán,gÄ�n 0x8678:zÇ� 0x8679:hóng,hòng,gòng,jiàng 0x867A:huÄ«,huÇ� 0x867B:méng 0x867C:gè 0x867D:suÄ« 0x867E:xiÄ�,há 0x867F:chài 0x8680:shí 0x8681:yÇ� 0x8682:mÇŽ,mÄ�,mà 0x8683:xiÇŽng 0x8684:fÄ�ng,bàng 0x8685:è 0x8686:bÄ� 0x8687:chÇ� 0x8688:qiÄ�n 0x8689:wén 0x868A:wén 0x868B:ruì 0x868C:bàng,pí,fÄ“ng,bèng 0x868D:pí 0x868E:yuè 0x868F:yuè 0x8690:jÅ«n 0x8691:qí 0x8692:tóng 0x8693:yÇ�n 0x8694:qí,zhÇ� 0x8695:cán,tiÇŽn 0x8696:yuán,wán 0x8697:jué,quÄ“ 0x8698:huí,huì,yóu 0x8699:qín,qián 0x869A:qí 0x869B:zhòng 0x869C:yá 0x869D:háo,cì 0x869E:mù 0x869F:wáng 0x86A0:fén 0x86A1:fén 0x86A2:háng 0x86A3:gÅ�ng,zhÅ�ng 0x86A4:zÇŽo,zhÇŽo 0x86A5:fù,fÇ” 0x86A6:rán 0x86A7:jiè 0x86A8:fú 0x86A9:chÄ« 0x86AA:dÇ’u 0x86AB:bào,páo 0x86AC:xiÇŽn 0x86AD:ní 0x86AE:dài 0x86AF:qiÅ« 0x86B0:yóu,zhú 0x86B1:zhà 0x86B2:píng 0x86B3:chí,chÄ«,dì 0x86B4:yòu,yÇ’u,niù 0x86B5:hé,kè 0x86B6:hÄ�n,hán 0x86B7:jù 0x86B8:lì 0x86B9:fù 0x86BA:rán,tiàn 0x86BB:zhá 0x86BC:gÇ’u,qú,xù 0x86BD:pí 0x86BE:pí,bÇ’ 0x86BF:xián 0x86C0:zhù 0x86C1:diÄ�o 0x86C2:bié 0x86C3:bÇ�ng 0x86C4:gÅ«,gÇ” 0x86C5:zhÄ�n 0x86C6:qÅ«,jÅ« 0x86C7:shé,yí,tuó,chí 0x86C8:tiÄ› 0x86C9:líng 0x86CA:gÇ” 0x86CB:dàn 0x86CC:gÇ” 0x86CD:yíng 0x86CE:lì 0x86CF:chÄ“ng 0x86D0:qÅ« 0x86D1:móu,máo 0x86D2:gé,luò 0x86D3:cì 0x86D4:huí 0x86D5:huí,huÇ� 0x86D6:máng,bàng 0x86D7:fù 0x86D8:yáng,yÇŽng 0x86D9:wÄ�,jué 0x86DA:liè 0x86DB:zhÅ« 0x86DC:yÄ« 0x86DD:xián 0x86DE:kuò,shé 0x86DF:jiÄ�o 0x86E0:lì 0x86E1:yì,xÇ” 0x86E2:píng 0x86E3:qÄ«,jié,qiè 0x86E4:há,gé,hÄ�,é 0x86E5:shé 0x86E6:yí 0x86E7:wÇŽng 0x86E8:mò 0x86E9:qióng,gÇ’ng 0x86EA:qiè,ní 0x86EB:guÇ� 0x86EC:qióng 0x86ED:zhì 0x86EE:mán 0x86EF:lÇŽo 0x86F0:zhé 0x86F1:jiá 0x86F2:náo 0x86F3:sÄ« 0x86F4:qí 0x86F5:xÄ«ng 0x86F6:jiè 0x86F7:qiú 0x86F8:shÄ�o,xiÄ�o 0x86F9:yÇ’ng 0x86FA:jiá 0x86FB:tuì 0x86FC:chÄ“ 0x86FD:bèi 0x86FE:é,yÇ� 0x86FF:hàn 0x8700:shÇ” 0x8701:xuán 0x8702:fÄ“ng 0x8703:shèn 0x8704:shèn,zhèn 0x8705:fÇ”,pú 0x8706:xiàn,xiÇŽn 0x8707:zhÄ“,zhé 0x8708:wú 0x8709:fú 0x870A:lí 0x870B:láng,liáng 0x870C:bì 0x870D:chú,yú 0x870E:yuÄ�n,xuÄ�n 0x870F:yÇ’u 0x8710:jié 0x8711:dàn 0x8712:yán,yàn,dàn 0x8713:tíng,diàn 0x8714:diàn 0x8715:tuì,yuè 0x8716:huí 0x8717:wÅ� 0x8718:zhÄ« 0x8719:sÅ�ng 0x871A:fÄ“i,fÄ›i,pèi,bèi 0x871B:jÅ« 0x871C:mì 0x871D:qí 0x871E:qí 0x871F:yù 0x8720:jùn 0x8721:là,qù,zhà,jí 0x8722:mÄ›ng,mèng 0x8723:qiÄ�ng 0x8724:sÄ«,xÄ« 0x8725:xÄ« 0x8726:lún,lÇ”n 0x8727:lì 0x8728:dié 0x8729:tiáo,diào 0x872A:táo 0x872B:kÅ«n 0x872C:hán 0x872D:hàn 0x872E:yù,guÅ� 0x872F:bàng 0x8730:féi,fèi 0x8731:pí,miáo 0x8732:wÄ“i,wÄ›i 0x8733:dÅ«n,tÅ«n 0x8734:yì,xí 0x8735:yuÄ�n,yÅ«n 0x8736:suò 0x8737:quán,juÇŽn 0x8738:qiÇŽn 0x8739:ruì,wèi 0x873A:ní 0x873B:qÄ«ng,jÄ«ng 0x873C:wèi,wÄ›i,tóng 0x873D:liÇŽng 0x873E:guÇ’,luÇ’ 0x873F:wÄ�n,wÇŽn 0x8740:dÅ�ng 0x8741:è 0x8742:bÇŽn 0x8743:dì,zhuÅ� 0x8744:wÇŽng 0x8745:cán 0x8746:yÇŽng 0x8747:yíng 0x8748:guÅ� 0x8749:chán 0x874A:dìng 0x874B:là 0x874C:kÄ“ 0x874D:jié,jí 0x874E:xiÄ“,hé 0x874F:tíng 0x8750:mào 0x8751:xÅ«,xiè 0x8752:mián 0x8753:yú 0x8754:jiÄ“ 0x8755:shí,lì,lóng 0x8756:xuÄ�n 0x8757:huáng 0x8758:yÇŽn 0x8759:biÄ�n,pián 0x875A:róu,náo 0x875B:wÄ“i 0x875C:fù 0x875D:yuán,yuÄ�n 0x875E:mèi 0x875F:wèi 0x8760:fú 0x8761:rú,ruÇŽn 0x8762:xié 0x8763:yóu 0x8764:qiú,jiÅ«,yóu 0x8765:máo,wú,wù 0x8766:xiÄ�,há,jiÇŽ 0x8767:yÄ«ng 0x8768:shÄ« 0x8769:chóng,zhÅ�ng 0x876A:tÄ�ng 0x876B:zhÅ« 0x876C:zÅ�ng 0x876D:tí,chí 0x876E:fù 0x876F:yuán 0x8770:kuí 0x8771:méng 0x8772:là 0x8773:dú,dài 0x8774:hú 0x8775:qiÅ« 0x8776:dié,tiÄ“ 0x8777:lì,xí 0x8778:wÅ�,luó,guÇ’ 0x8779:yÅ«n,ÇŽo 0x877A:qÇ”,yÇ” 0x877B:nÇŽn 0x877C:lóu 0x877D:chÅ«n 0x877E:róng 0x877F:yíng 0x8780:jiÄ�ng 0x8781:ban 0x8782:láng 0x8783:páng,bÇŽng 0x8784:sÄ« 0x8785:xÄ«,cì 0x8786:cì 0x8787:xÄ«,qÄ« 0x8788:yuán 0x8789:wÄ“ng 0x878A:lián 0x878B:sÅ�u 0x878C:bÄ�n,pán,huàn 0x878D:róng 0x878E:róng 0x878F:jí 0x8790:wÅ« 0x8791:xiù 0x8792:hàn 0x8793:qín 0x8794:yí,sÄ« 0x8795:bÄ«,pÄ« 0x8796:huá 0x8797:táng 0x8798:yÇ� 0x8799:dù 0x879A:nài,nái,nÄ›ng 0x879B:hé,xiá 0x879C:hú 0x879D:guÄ«,huÇ� 0x879E:mÇŽ,mÄ�,mà 0x879F:míng 0x87A0:yì 0x87A1:wén 0x87A2:yíng 0x87A3:tè,téng 0x87A4:zhÅ�ng 0x87A5:cÄ�ng 0x87A6:sÄ�o 0x87A7:qí 0x87A8:mÇŽn 0x87A9:tiao 0x87AA:shÄ�ng 0x87AB:shì 0x87AC:cáo 0x87AD:chÄ« 0x87AE:dì,dài 0x87AF:áo 0x87B0:lù 0x87B1:wèi 0x87B2:zhì,dié 0x87B3:táng 0x87B4:chén 0x87B5:piÄ�o 0x87B6:qú,jù 0x87B7:pí 0x87B8:yú 0x87B9:jiàn,chán 0x87BA:luó 0x87BB:lóu 0x87BC:qÇ�n 0x87BD:zhÅ�ng 0x87BE:yÇ�n,yín 0x87BF:jiÄ�ng 0x87C0:shuài 0x87C1:wén 0x87C2:xiÄ�o 0x87C3:wàn 0x87C4:zhé 0x87C5:zhè 0x87C6:má,mò 0x87C7:má 0x87C8:guÅ�,yù 0x87C9:liú,liào 0x87CA:máo,méng 0x87CB:xÄ« 0x87CC:cÅ�ng 0x87CD:lí 0x87CE:mÇŽn 0x87CF:xiÄ�o 0x87D0:chang 0x87D1:zhÄ�ng 0x87D2:mÇŽng,mÄ›ng 0x87D3:xiàng 0x87D4:mò 0x87D5:zuÄ« 0x87D6:sÄ« 0x87D7:qiÅ« 0x87D8:tè 0x87D9:zhí 0x87DA:péng 0x87DB:péng 0x87DC:jiÇŽo,qiáo 0x87DD:qú 0x87DE:biÄ“,bié 0x87DF:liáo 0x87E0:pán,fán 0x87E1:guÇ� 0x87E2:xÇ� 0x87E3:jÇ�,qí 0x87E4:zhuÄ�n 0x87E5:huáng 0x87E6:féi,bÄ“n 0x87E7:láo,liáo 0x87E8:jué 0x87E9:jué 0x87EA:huì 0x87EB:yín,xún 0x87EC:chán,tí,shàn 0x87ED:jiÄ�o 0x87EE:shàn 0x87EF:náo,rào 0x87F0:xiÄ�o 0x87F1:wú,móu 0x87F2:chóng,zhòng,tóng 0x87F3:xún 0x87F4:sÄ« 0x87F5:chú 0x87F6:chÄ“ng 0x87F7:dÄ�ng 0x87F8:lÇ� 0x87F9:xiè 0x87FA:shàn,dàn,chán,tuó 0x87FB:yÇ�,jÇ� 0x87FC:jÇ�ng 0x87FD:dá 0x87FE:chán 0x87FF:qì,jì 0x8800:cÄ«,jí 0x8801:xiÇŽng 0x8802:shè 0x8803:luÇ’,luó,guÇ’ 0x8804:qín 0x8805:yíng 0x8806:chài 0x8807:lì 0x8808:zéi 0x8809:xuÄ�n 0x880A:lián 0x880B:zhú 0x880C:zé 0x880D:xiÄ“ 0x880E:mÇŽng 0x880F:xiè 0x8810:qí 0x8811:róng 0x8812:jiÇŽn 0x8813:mÄ›ng 0x8814:háo 0x8815:rú 0x8816:huò,yuè 0x8817:zhuó 0x8818:jié 0x8819:pín 0x881A:hÄ“ 0x881B:miè 0x881C:fán 0x881D:lÄ›i 0x881E:jié 0x881F:là 0x8820:mÇ�n,mián 0x8821:lí,lÇ�,luÇ’,luó,lì 0x8822:chÇ”n 0x8823:lì 0x8824:qiÅ« 0x8825:niè 0x8826:lú 0x8827:dù 0x8828:xiÄ�o 0x8829:zhÅ«,chú 0x882A:lóng 0x882B:lí 0x882C:lóng 0x882D:fÄ“ng,páng 0x882E:yÄ“ 0x882F:pí 0x8830:náng,shàng,rÇŽng 0x8831:gÇ”,yÄ› 0x8832:juÄ�n 0x8833:yÄ«ng 0x8834:shÇ” 0x8835:xÄ« 0x8836:cán 0x8837:qú 0x8838:quán,huàn 0x8839:dù 0x883A:cán 0x883B:mán 0x883C:qú,jué 0x883D:jié 0x883E:zhú,shú 0x883F:zhuÅ� 0x8840:xuè,xiÄ› 0x8841:huÄ�ng 0x8842:nÇœ 0x8843:pÄ“i,fÇ’u 0x8844:nÇœ 0x8845:xìn 0x8846:zhòng,zhÅ�ng 0x8847:mài 0x8848:èr 0x8849:kÄ� 0x884A:miè 0x884B:xì 0x884C:xíng,háng,xìng,hàng,héng 0x884D:yÇŽn,yán 0x884E:kàn,kÇŽn 0x884F:yuàn 0x8850:qú 0x8851:líng 0x8852:xuàn 0x8853:shù 0x8854:xián 0x8855:tòng,tóng,dòng 0x8856:xiàng,lòng 0x8857:jiÄ“ 0x8858:xián,yù 0x8859:yá,yú,yù 0x885A:hú 0x885B:wèi 0x885C:dào 0x885D:chÅ�ng,chÇ’ng,chòng 0x885E:wèi 0x885F:dào 0x8860:zhÅ«n 0x8861:héng 0x8862:qú 0x8863:yÄ«,yì 0x8864:yÄ« 0x8865:bÇ” 0x8866:gÇŽn 0x8867:yú 0x8868:biÇŽo 0x8869:chÇŽ,chà 0x886A:yí 0x886B:shÄ�n 0x886C:chèn 0x886D:fÅ« 0x886E:gÇ”n 0x886F:fÄ“n,pén 0x8870:shuÄ�i,suÅ�,cuÄ« 0x8871:jié 0x8872:nà 0x8873:zhÅ�ng 0x8874:dÇŽn 0x8875:yì 0x8876:zhòng 0x8877:zhÅ�ng,zhòng 0x8878:jiè 0x8879:zhÇ�,tÇ�,zhÄ«,qí 0x887A:xié 0x887B:rán 0x887C:zhÄ« 0x887D:rèn 0x887E:qÄ«n 0x887F:jÄ«n,qìn 0x8880:jÅ«n 0x8881:yuán 0x8882:mèi,yì 0x8883:chài 0x8884:ÇŽo 0x8885:niÇŽo 0x8886:huÄ« 0x8887:rán 0x8888:jiÄ� 0x8889:tuó,tuÇ’ 0x888A:lÇ�ng,líng 0x888B:dài 0x888C:bào,páo,pào 0x888D:páo,bào 0x888E:yào 0x888F:zuò 0x8890:bì 0x8891:shào 0x8892:tÇŽn,zhàn 0x8893:jù,jiÄ› 0x8894:hè,kè,kuÇŽ 0x8895:xué 0x8896:xiù 0x8897:zhÄ›n 0x8898:yí,yì,tuó 0x8899:pà 0x889A:bÅ�,fú 0x889B:dÄ« 0x889C:wà,mò 0x889D:fù 0x889E:gÇ”n 0x889F:zhì 0x88A0:zhì 0x88A1:rán 0x88A2:pàn,fán 0x88A3:yì 0x88A4:mào,móu 0x88A5:tuÅ� 0x88A6:nà,jué 0x88A7:gÅ�u,gòu 0x88A8:xuàn 0x88A9:zhé,chÄ�n 0x88AA:qÅ« 0x88AB:bèi,bì,pÄ«,pì 0x88AC:yù 0x88AD:xí 0x88AE:mí 0x88AF:bó 0x88B0:bÅ� 0x88B1:fú 0x88B2:chÇ�,nuÇ’ 0x88B3:chÇ�,qÇ�,duÇ’,nuÇ’ 0x88B4:kù 0x88B5:rèn 0x88B6:jiàng 0x88B7:jiá,jiÄ�,jié,qiÄ� 0x88B8:jiàn,zùn 0x88B9:bó,mò 0x88BA:jié 0x88BB:ér 0x88BC:gÄ“,luò 0x88BD:rú 0x88BE:zhÅ« 0x88BF:guÄ«,guà 0x88C0:yÄ«n 0x88C1:cái 0x88C2:liè,liÄ› 0x88C3:kÇŽ 0x88C4:xing 0x88C5:zhuÄ�ng 0x88C6:dÄ�ng 0x88C7:xÅ« 0x88C8:kÅ«n 0x88C9:kèn 0x88CA:niÇŽo 0x88CB:shù 0x88CC:jiá,jiÄ�,xié 0x88CD:kÇ”n 0x88CE:chéng,chÄ›ng 0x88CF:lÇ� 0x88D0:juÄ�n 0x88D1:shÄ“n 0x88D2:póu,bÄ�o 0x88D3:gé,jiÄ“ 0x88D4:yì 0x88D5:yù 0x88D6:zhÄ›n 0x88D7:liú 0x88D8:qiú 0x88D9:qún 0x88DA:jì 0x88DB:yì 0x88DC:bÇ” 0x88DD:zhuÄ�ng 0x88DE:shuì 0x88DF:shÄ� 0x88E0:qún 0x88E1:lÇ� 0x88E2:lián,shÄ�o 0x88E3:liÇŽn 0x88E4:kù 0x88E5:jiÇŽn 0x88E6:fóu 0x88E7:chÄ�n,chàn,tÇŽn 0x88E8:bì,pí 0x88E9:kÅ«n 0x88EA:táo 0x88EB:yuàn 0x88EC:líng 0x88ED:chÇ� 0x88EE:chÄ�ng 0x88EF:chóu,dÄ�o 0x88F0:duÅ� 0x88F1:biÇŽo 0x88F2:liÇŽng 0x88F3:shang,cháng 0x88F4:péi,féi 0x88F5:péi 0x88F6:fÄ“i 0x88F7:yuÄ�n,gÇ”n 0x88F8:luÇ’ 0x88F9:guÇ’ 0x88FA:yÇŽn,Ä�n,yàn 0x88FB:dú 0x88FC:tì,xÄ« 0x88FD:zhì 0x88FE:jÅ«,jù 0x88FF:yÇ�,qÇ� 0x8900:qí 0x8901:guÇ’ 0x8902:guà 0x8903:kèn 0x8904:qÄ« 0x8905:tì 0x8906:tí,shì 0x8907:fù,fú 0x8908:chóng,chÅ�ng,zhòng 0x8909:xiè 0x890A:biÇŽn,pián 0x890B:dié 0x890C:kÅ«n 0x890D:duÄ�n,tuÄ�n 0x890E:xiù,yòu 0x890F:xiù 0x8910:hè 0x8911:yuàn,yuán 0x8912:bÄ�o 0x8913:bÇŽo 0x8914:fù 0x8915:yú,tóu 0x8916:tuàn 0x8917:yÇŽn 0x8918:huÄ«,yÄ« 0x8919:bèi 0x891A:chÇ”,zhÄ›,zhÇ” 0x891B:lÇš 0x891C:páo 0x891D:dÄ�n 0x891E:yÇ”n,wÄ“n 0x891F:tÄ� 0x8920:gÅ�u 0x8921:dÄ� 0x8922:huái 0x8923:róng 0x8924:yuàn 0x8925:rù,nù 0x8926:nài 0x8927:jiÇ’ng 0x8928:suÇ’,chá 0x8929:bÄ�n,pán 0x892A:tuì,tùn 0x892B:chÇ� 0x892C:sÇŽng 0x892D:niÇŽo 0x892E:yÄ«ng,yìng 0x892F:jiè 0x8930:qiÄ�n 0x8931:huái 0x8932:kù 0x8933:lián 0x8934:lán 0x8935:lí 0x8936:zhÄ›,dié,xí 0x8937:shÄ« 0x8938:lÇš 0x8939:yì,niè 0x893A:diÄ“ 0x893B:xiè 0x893C:xiÄ�n 0x893D:wèi 0x893E:biÇŽo 0x893F:cáo 0x8940:jÄ«,jì 0x8941:qiÇŽng 0x8942:sÄ“n,shÄ�n 0x8943:bÄ�o,póu 0x8944:xiÄ�ng 0x8945:bì 0x8946:fú,pú 0x8947:jiÇŽn 0x8948:zhuàn,juàn 0x8949:jiÇŽn 0x894A:cuì,cuÅ� 0x894B:jí 0x894C:dÄ�n 0x894D:zá 0x894E:fán,bò 0x894F:bó,fèi 0x8950:xiàng 0x8951:xín 0x8952:bié 0x8953:ráo 0x8954:mÇŽn 0x8955:lán 0x8956:ÇŽo 0x8957:zé,duó,yì 0x8958:guì,huì 0x8959:cào 0x895A:suì 0x895B:nóng 0x895C:chÄ�n,chàn,dÄ�n 0x895D:liÇŽn,chÄ�n 0x895E:bì 0x895F:jÄ«n 0x8960:dÄ�ng 0x8961:shÇ”,dú 0x8962:tÇŽn,zhàn,chán,zhÄ�n 0x8963:bì 0x8964:lán 0x8965:fú 0x8966:rú 0x8967:zhÇ� 0x8968:duì 0x8969:shÇ” 0x896A:wà 0x896B:shì 0x896C:bÇŽi,bÄ“i 0x896D:xié 0x896E:bó 0x896F:chèn 0x8970:lài 0x8971:lóng,lòng 0x8972:xí 0x8973:xiÄ�n,shÄ�n 0x8974:lán 0x8975:zhÄ›,zhé 0x8976:dài 0x8977:jÇ” 0x8978:zàn,cuán 0x8979:shÄ« 0x897A:jiÇŽn 0x897B:pàn 0x897C:yì 0x897D:lán 0x897E:yà 0x897F:xÄ« 0x8980:xÄ« 0x8981:yào,yÄ�o,yÇŽo 0x8982:fÄ›ng,bÇŽn 0x8983:tán,yÇŽn,qín 0x8984:fù 0x8985:fiào 0x8986:fù 0x8987:bà 0x8988:hé 0x8989:jÄ« 0x898A:jÄ« 0x898B:jiàn,xiàn 0x898C:guÄ�n 0x898D:biàn 0x898E:yàn 0x898F:guÄ«,guì,xù 0x8990:jué 0x8991:piÇŽn 0x8992:mào 0x8993:mì 0x8994:mì 0x8995:miè,piÄ“ 0x8996:shì 0x8997:sì 0x8998:chÄ�n,dÄ�n,jÄ« 0x8999:luó 0x899A:jué 0x899B:mì 0x899C:tiào 0x899D:lián 0x899E:yào 0x899F:zhì 0x89A0:jÅ«n 0x89A1:xí 0x89A2:shÇŽn 0x89A3:wÄ“i 0x89A4:xì 0x89A5:tiÇŽn 0x89A6:yú 0x89A7:lÇŽn 0x89A8:è 0x89A9:dÇ” 0x89AA:qÄ«n,qìng 0x89AB:pÇŽng 0x89AC:jì 0x89AD:míng 0x89AE:yíng 0x89AF:gòu 0x89B0:qÅ«,qù 0x89B1:zhàn,zhÄ�n 0x89B2:jìn 0x89B3:guÄ�n 0x89B4:dÄ“ng 0x89B5:jiàn,biÇŽn 0x89B6:luó,luÇŽn 0x89B7:qù 0x89B8:jiÄ�n 0x89B9:wéi 0x89BA:jué,jiào 0x89BB:qÅ«,qù 0x89BC:luó 0x89BD:lÇŽn,làn 0x89BE:shÄ›n 0x89BF:dí,jí 0x89C0:guÄ�n,guàn 0x89C1:jiàn,xiàn 0x89C2:guÄ�n,guàn 0x89C3:yàn 0x89C4:guÄ« 0x89C5:mì 0x89C6:shì 0x89C7:chÄ�n 0x89C8:lÇŽn 0x89C9:jué,jiào 0x89CA:jì 0x89CB:xí 0x89CC:dí 0x89CD:tiÇŽn 0x89CE:yú 0x89CF:gòu 0x89D0:jìn 0x89D1:qù,qÅ« 0x89D2:jiÇŽo,jué,lù,gÇ” 0x89D3:qiú 0x89D4:jÄ«n 0x89D5:cÅ«,chù,chéng 0x89D6:jué,kuì,guì 0x89D7:zhì 0x89D8:chào 0x89D9:jí 0x89DA:gÅ« 0x89DB:dàn 0x89DC:zÄ«,zuÇ� 0x89DD:dÇ�,zhÇ� 0x89DE:shÄ�ng 0x89DF:huà,xiè 0x89E0:quán 0x89E1:gé 0x89E2:shì 0x89E3:jiÄ›,jiè,xiè 0x89E4:guÇ� 0x89E5:gÅ�ng 0x89E6:chù 0x89E7:jiÄ›,jiè 0x89E8:hùn 0x89E9:qiú 0x89EA:xÄ«ng 0x89EB:sù 0x89EC:ní 0x89ED:jÄ«,qÇ�,qí 0x89EE:lù 0x89EF:zhì 0x89F0:zhÄ�,dÇŽ,zhÇŽ 0x89F1:bì 0x89F2:xÄ«ng 0x89F3:hú,què,jué 0x89F4:shÄ�ng 0x89F5:gÅ�ng 0x89F6:zhì 0x89F7:xué,hù 0x89F8:chù 0x89F9:xÄ« 0x89FA:yí 0x89FB:lì,lù 0x89FC:jué 0x89FD:xÄ« 0x89FE:yàn 0x89FF:xÄ«,wéi 0x8A00:yán,yàn,yín 0x8A01:yán 0x8A02:dìng 0x8A03:fù 0x8A04:qiú,kÄ�o 0x8A05:qiú 0x8A06:jiào 0x8A07:hÅ�ng,jùn,hÄ“ng 0x8A08:jì 0x8A09:fàn 0x8A0A:xùn 0x8A0B:diào 0x8A0C:hòng 0x8A0D:chài,chÄ�,chà 0x8A0E:tÇŽo 0x8A0F:xÅ«,xÇ” 0x8A10:jié,jì 0x8A11:yí,dàn,shÄ«,tuó,tuÇ’ 0x8A12:rèn 0x8A13:xùn 0x8A14:yín 0x8A15:shàn 0x8A16:qì 0x8A17:tuÅ� 0x8A18:jì 0x8A19:xùn 0x8A1A:yín 0x8A1B:é 0x8A1C:fÄ“n,bÄ«n 0x8A1D:yà 0x8A1E:yÄ�o 0x8A1F:sòng 0x8A20:shÄ›n 0x8A21:yín 0x8A22:xÄ«n,xÄ«,yín 0x8A23:jué 0x8A24:xiáo,ná 0x8A25:nè 0x8A26:chén 0x8A27:yóu 0x8A28:zhÇ� 0x8A29:xiÅ�ng 0x8A2A:fÇŽng 0x8A2B:xìn 0x8A2C:chÄ�o,miÇŽo,chÇŽo 0x8A2D:shè 0x8A2E:yán 0x8A2F:sÇŽ,sà 0x8A30:zhùn,zhÅ«n 0x8A31:xÇ”,hÇ” 0x8A32:yì 0x8A33:yì 0x8A34:sù 0x8A35:chÄ«,chì 0x8A36:hÄ“ 0x8A37:shÄ“n 0x8A38:hé 0x8A39:xù 0x8A3A:zhÄ›n 0x8A3B:zhù 0x8A3C:zhèng 0x8A3D:gòu 0x8A3E:zÄ«,zÇ� 0x8A3F:zÇ� 0x8A40:zhÄ�n,chè,diÄ�n,zhàn,tiÄ“ 0x8A41:gÇ” 0x8A42:fù 0x8A43:jiÇŽn 0x8A44:dié 0x8A45:líng 0x8A46:dÇ�,tì 0x8A47:yàng 0x8A48:lì 0x8A49:náo,ná,nù 0x8A4A:pàn 0x8A4B:zhòu 0x8A4C:gàn 0x8A4D:yì 0x8A4E:jù 0x8A4F:yào 0x8A50:zhà 0x8A51:yí,tuó,duò,yÄ«,xÄ« 0x8A52:yí,dài,tái 0x8A53:qÇ” 0x8A54:zhào,zhÄ�o 0x8A55:píng 0x8A56:bì 0x8A57:xiòng 0x8A58:qÅ«,chù 0x8A59:bá,bó 0x8A5A:dá 0x8A5B:zÇ” 0x8A5C:tÄ�o 0x8A5D:zhÇ” 0x8A5E:cí 0x8A5F:zhé 0x8A60:yÇ’ng 0x8A61:xÇ” 0x8A62:xún 0x8A63:yì 0x8A64:huÇŽng 0x8A65:hé,gé 0x8A66:shì 0x8A67:chá,qiè 0x8A68:xiào 0x8A69:shÄ« 0x8A6A:hÄ›n 0x8A6B:chà,dù 0x8A6C:gòu,hòu 0x8A6D:guÇ� 0x8A6E:quán 0x8A6F:huì 0x8A70:jié 0x8A71:huà 0x8A72:gÄ�i 0x8A73:xiáng,yáng 0x8A74:wÄ“i 0x8A75:shÄ“n 0x8A76:zhòu,chóu 0x8A77:tóng,dòng 0x8A78:mí 0x8A79:zhÄ�n,dàn 0x8A7A:mìng 0x8A7B:è,lüè,luò 0x8A7C:huÄ« 0x8A7D:yán 0x8A7E:xiÅ�ng 0x8A7F:guà 0x8A80:èr,chÇ� 0x8A81:bìng 0x8A82:tiÇŽo,diào 0x8A83:yí,chÇ�,chì,duò 0x8A84:lÄ›i 0x8A85:zhÅ« 0x8A86:kuÄ�ng 0x8A87:kuÄ�,qù 0x8A88:wÅ« 0x8A89:yù 0x8A8A:téng 0x8A8B:jì 0x8A8C:zhì 0x8A8D:rèn 0x8A8E:cù 0x8A8F:lÇŽng,làng 0x8A90:é,Ä› 0x8A91:kuáng 0x8A92:éi,xÄ«,yì,ê̄,ế,ê̌,Ä›i,á»�,èi,Ä“i 0x8A93:shì 0x8A94:tÇ�ng 0x8A95:dàn 0x8A96:bèi 0x8A97:chán 0x8A98:yòu 0x8A99:kÄ“ng 0x8A9A:qiào 0x8A9B:qÄ«n 0x8A9C:shuà 0x8A9D:Ä�n 0x8A9E:yÇ”,yù 0x8A9F:xiào 0x8AA0:chéng 0x8AA1:jiè 0x8AA2:xiàn 0x8AA3:wÅ« 0x8AA4:wù 0x8AA5:gào 0x8AA6:sòng 0x8AA7:bÅ« 0x8AA8:huì 0x8AA9:jìng 0x8AAA:shuÅ� 0x8AAB:zhèn 0x8AAC:shuÅ�,shuì,yuè,tuÅ� 0x8AAD:dú 0x8AAE:huÄ� 0x8AAF:chàng 0x8AB0:shuí,shéi 0x8AB1:jié 0x8AB2:kè 0x8AB3:qÅ«,juè 0x8AB4:cóng 0x8AB5:xiáo 0x8AB6:suì 0x8AB7:wÇŽng 0x8AB8:xián 0x8AB9:fÄ›i 0x8ABA:chÄ«,lài 0x8ABB:tà 0x8ABC:yì 0x8ABD:nì,ná 0x8ABE:yín 0x8ABF:diào,tiáo,zhÅ�u 0x8AC0:pÇ�,bÄ“i 0x8AC1:zhuó 0x8AC2:chÇŽn 0x8AC3:chÄ“n 0x8AC4:zhÅ«n 0x8AC5:jì,jÄ« 0x8AC6:qÄ« 0x8AC7:tán 0x8AC8:zhuì 0x8AC9:wÄ›i 0x8ACA:jÅ« 0x8ACB:qÇ�ng,qìng,qíng 0x8ACC:dÇ’ng 0x8ACD:zhèng,zhÄ“ng 0x8ACE:zé,cuò,zuò,zhÇŽ,jiè 0x8ACF:zÅ�u,zhÅ�u 0x8AD0:qiÄ�n 0x8AD1:zhuó 0x8AD2:liàng,liáng 0x8AD3:jiàn 0x8AD4:chù,jí 0x8AD5:háo,xià,huò 0x8AD6:lùn,lún 0x8AD7:shÄ›n,niè 0x8AD8:biÇŽo 0x8AD9:huà 0x8ADA:pián 0x8ADB:yú 0x8ADC:dié,xiè 0x8ADD:xÅ« 0x8ADE:piÇŽn,pián 0x8ADF:shì,dì 0x8AE0:xuÄ�n 0x8AE1:shì 0x8AE2:hùn 0x8AE3:huà,guÄ� 0x8AE4:è 0x8AE5:zhòng 0x8AE6:dì,tí 0x8AE7:xié 0x8AE8:fú 0x8AE9:pÇ” 0x8AEA:tíng 0x8AEB:jiàn,làn 0x8AEC:qÇ� 0x8AED:yù,tÇ’u 0x8AEE:zÄ« 0x8AEF:zhuÄ�n 0x8AF0:xÇ�,shÄ�i,Ä�i 0x8AF1:huì 0x8AF2:yÄ«n 0x8AF3:Ä�n,tÇ’u 0x8AF4:xián,gÄ�n 0x8AF5:nán,nàn 0x8AF6:chén 0x8AF7:fÄ›ng,fèng 0x8AF8:zhÅ«,chú 0x8AF9:yáng 0x8AFA:yàn 0x8AFB:huáng 0x8AFC:xuÄ�n 0x8AFD:gé 0x8AFE:nuò 0x8AFF:qÄ«,xÇ” 0x8B00:móu 0x8B01:yè,ÇŽi 0x8B02:wèi 0x8B03:xÄ«ng 0x8B04:téng 0x8B05:zhÅ�u,chÅ�u,chÇŽo 0x8B06:shàn 0x8B07:jiÇŽn 0x8B08:pó,páo 0x8B09:kuì,duÇ�,tuí,guÇ� 0x8B0A:huÇŽng 0x8B0B:huò 0x8B0C:gÄ“ 0x8B0D:yíng,yÄ«ng,hÅ�ng 0x8B0E:mí 0x8B0F:xiÇŽo,sÇ’u,sòu 0x8B10:mì 0x8B11:xÇ�,xià,xí 0x8B12:qiÄ�ng 0x8B13:chÄ“n,zhèn 0x8B14:xuè 0x8B15:tí,sÄ« 0x8B16:sù 0x8B17:bàng 0x8B18:chí 0x8B19:qiÄ�n,zhàn 0x8B1A:shì,yì,xì 0x8B1B:jiÇŽng 0x8B1C:yuán,quán 0x8B1D:xiè 0x8B1E:hè,xiÄ�o 0x8B1F:tÄ�o 0x8B20:yáo 0x8B21:yáo 0x8B22:lÅ« 0x8B23:yú,xÅ« 0x8B24:biÄ�o,piÄ�o 0x8B25:còng 0x8B26:qìng,qÇ�ng 0x8B27:lí 0x8B28:mó 0x8B29:mó 0x8B2A:shÄ�ng 0x8B2B:zhé,zé 0x8B2C:miù 0x8B2D:jiÇŽn 0x8B2E:zé 0x8B2F:jiÄ“,zhÄ�,zhÇŽ,zÇ” 0x8B30:lián 0x8B31:lóu,lÇš 0x8B32:càn,zào,sÄ�n,chÄ›n 0x8B33:Å�u,xú 0x8B34:gùn 0x8B35:xí,chè 0x8B36:zhuó,shù,zhÄ“ 0x8B37:áo,ào 0x8B38:áo 0x8B39:jÇ�n 0x8B3A:zhé 0x8B3B:yí,chí 0x8B3C:hÅ«,xiÄ�o 0x8B3D:jiàng 0x8B3E:mán,màn 0x8B3F:cháo 0x8B40:hàn,xiàn 0x8B41:huá,wà 0x8B42:chÇŽn,dàn 0x8B43:xÅ« 0x8B44:zÄ“ng 0x8B45:sè 0x8B46:xÄ« 0x8B47:zhÄ� 0x8B48:duì 0x8B49:zhèng 0x8B4A:náo,xiÄ�o 0x8B4B:lán 0x8B4C:é,wá,guÇ� 0x8B4D:yÄ«ng,yìng 0x8B4E:jué 0x8B4F:jÄ« 0x8B50:zÇ”n 0x8B51:jiÇŽo,qiào 0x8B52:bò 0x8B53:huì 0x8B54:zhuàn,quán 0x8B55:wú,mó 0x8B56:zèn,jiàn 0x8B57:zhá 0x8B58:shí,shì,zhì 0x8B59:qiào,qiáo 0x8B5A:tán 0x8B5B:zèn 0x8B5C:pÇ” 0x8B5D:shéng 0x8B5E:xuÄ�n 0x8B5F:zào 0x8B60:tán 0x8B61:dÇŽng 0x8B62:suì 0x8B63:xiÇŽn 0x8B64:jÄ« 0x8B65:jiào 0x8B66:jÇ�ng 0x8B67:zhàn,lián 0x8B68:náng,nóu 0x8B69:yÄ« 0x8B6A:ÇŽi 0x8B6B:zhÄ�n 0x8B6C:pì 0x8B6D:huÇ� 0x8B6E:huà,xiè,huì 0x8B6F:yì 0x8B70:yì 0x8B71:shàn 0x8B72:ràng 0x8B73:nòu 0x8B74:qiÇŽn 0x8B75:duì 0x8B76:tà 0x8B77:hù 0x8B78:zhÅ�u,chóu 0x8B79:háo 0x8B7A:ài,yÇ�,nÇ�,yì,yí 0x8B7B:yÄ«ng 0x8B7C:jiàn 0x8B7D:yù 0x8B7E:jiÇŽn 0x8B7F:huì 0x8B80:dú,dòu 0x8B81:zhé 0x8B82:xuàn 0x8B83:zàn 0x8B84:lÄ›i 0x8B85:shÄ›n 0x8B86:wèi 0x8B87:chÇŽn 0x8B88:lì 0x8B89:yí,tuÄ« 0x8B8A:biàn 0x8B8B:zhé 0x8B8C:yàn 0x8B8D:è 0x8B8E:chóu 0x8B8F:wèi 0x8B90:chóu 0x8B91:yào 0x8B92:chán 0x8B93:ràng 0x8B94:yÇ�n 0x8B95:lán 0x8B96:chèn,chàn 0x8B97:xié 0x8B98:niè 0x8B99:huÄ�n,huàn 0x8B9A:zàn 0x8B9B:yì 0x8B9C:dÇŽng,dàng 0x8B9D:zhán,zhÄ�n 0x8B9E:yàn 0x8B9F:dú 0x8BA0:yán 0x8BA1:jì 0x8BA2:dìng 0x8BA3:fù 0x8BA4:rèn 0x8BA5:jÄ« 0x8BA6:jié 0x8BA7:hòng 0x8BA8:tÇŽo 0x8BA9:ràng 0x8BAA:shàn 0x8BAB:qì 0x8BAC:tuÅ� 0x8BAD:xùn 0x8BAE:yì 0x8BAF:xùn 0x8BB0:jì 0x8BB1:rèn 0x8BB2:jiÇŽng 0x8BB3:huì 0x8BB4:Å�u 0x8BB5:jù 0x8BB6:yà 0x8BB7:nè 0x8BB8:xÇ”,hÇ” 0x8BB9:é 0x8BBA:lùn,lún 0x8BBB:xiÅ�ng 0x8BBC:sòng 0x8BBD:fÄ›ng,fèng 0x8BBE:shè 0x8BBF:fÇŽng 0x8BC0:jué 0x8BC1:zhèng 0x8BC2:gÇ” 0x8BC3:hÄ“ 0x8BC4:píng 0x8BC5:zÇ” 0x8BC6:shí,shì,zhì 0x8BC7:xiòng 0x8BC8:zhà 0x8BC9:sù 0x8BCA:zhÄ›n 0x8BCB:dÇ� 0x8BCC:zhÅ�u 0x8BCD:cí 0x8BCE:qÅ« 0x8BCF:zhào 0x8BD0:bì 0x8BD1:yì 0x8BD2:yí 0x8BD3:kuÄ�ng 0x8BD4:lÄ›i 0x8BD5:shì 0x8BD6:guà 0x8BD7:shÄ« 0x8BD8:jí,jié 0x8BD9:huÄ« 0x8BDA:chéng 0x8BDB:zhÅ« 0x8BDC:shÄ“n 0x8BDD:huà 0x8BDE:dàn 0x8BDF:gòu 0x8BE0:quán 0x8BE1:guÇ� 0x8BE2:xún 0x8BE3:yì 0x8BE4:zhÄ“ng 0x8BE5:gÄ�i 0x8BE6:xiáng 0x8BE7:chà 0x8BE8:hùn 0x8BE9:xÇ” 0x8BEA:zhÅ�u 0x8BEB:jiè 0x8BEC:wÅ« 0x8BED:yÇ”,yù 0x8BEE:qiào 0x8BEF:wù 0x8BF0:gào 0x8BF1:yòu 0x8BF2:huì 0x8BF3:kuáng 0x8BF4:shuÅ�,shuì,yuè 0x8BF5:sòng 0x8BF6:éi 0x8BF7:qÇ�ng 0x8BF8:zhÅ« 0x8BF9:zÅ�u 0x8BFA:nuò 0x8BFB:dú,dòu 0x8BFC:zhuó 0x8BFD:fÄ›i 0x8BFE:kè 0x8BFF:wÄ›i 0x8C00:yú 0x8C01:shéi,shuí 0x8C02:shÄ›n 0x8C03:diào,tiáo 0x8C04:chÇŽn 0x8C05:liàng 0x8C06:zhÅ«n 0x8C07:suì 0x8C08:tán 0x8C09:shÄ›n 0x8C0A:yì 0x8C0B:móu 0x8C0C:chén 0x8C0D:dié 0x8C0E:huÇŽng 0x8C0F:jiàn 0x8C10:xié 0x8C11:xuè 0x8C12:yè 0x8C13:wèi 0x8C14:è 0x8C15:yù 0x8C16:xuÄ�n 0x8C17:chán 0x8C18:zÄ« 0x8C19:Ä�n 0x8C1A:yàn 0x8C1B:dì 0x8C1C:mí,mèi 0x8C1D:pián,piÇŽn 0x8C1E:xÅ« 0x8C1F:mó 0x8C20:dÇŽng 0x8C21:sù 0x8C22:xiè 0x8C23:yáo 0x8C24:bàng 0x8C25:shì 0x8C26:qiÄ�n 0x8C27:mì 0x8C28:jÇ�n 0x8C29:mán,màn 0x8C2A:zhé 0x8C2B:jiÇŽn 0x8C2C:miù 0x8C2D:tán 0x8C2E:zèn 0x8C2F:qiáo,qiào 0x8C30:lán 0x8C31:pÇ” 0x8C32:jué 0x8C33:yàn 0x8C34:qiÇŽn 0x8C35:zhÄ�n 0x8C36:chèn 0x8C37:gÇ”,lù,yù 0x8C38:qiÄ�n 0x8C39:hóng 0x8C3A:xiÄ� 0x8C3B:jí 0x8C3C:hóng 0x8C3D:hÄ�n 0x8C3E:hÅ�ng,lóng 0x8C3F:xÄ«,jÄ« 0x8C40:xÄ« 0x8C41:huÅ�,huò,huá 0x8C42:liáo 0x8C43:hÇŽn,gÇŽn 0x8C44:dú 0x8C45:lóng,lòng 0x8C46:dòu 0x8C47:jiÄ�ng 0x8C48:qÇ�,kÇŽi 0x8C49:shì,chÇ� 0x8C4A:lÇ�,fÄ“ng 0x8C4B:dÄ“ng 0x8C4C:wÄ�n 0x8C4D:bÄ«,biÇŽn 0x8C4E:shù 0x8C4F:xiàn 0x8C50:fÄ“ng 0x8C51:zhì 0x8C52:zhì 0x8C53:yàn 0x8C54:yàn 0x8C55:shÇ� 0x8C56:chù 0x8C57:huÄ« 0x8C58:tún 0x8C59:yì 0x8C5A:tún,dÅ«n,dùn 0x8C5B:yì 0x8C5C:jiÄ�n 0x8C5D:bÄ� 0x8C5E:hòu 0x8C5F:è 0x8C60:chú 0x8C61:xiàng 0x8C62:huàn 0x8C63:jiÄ�n,yàn 0x8C64:kÄ›n,kÅ«n 0x8C65:gÄ�i 0x8C66:jù 0x8C67:fÅ«,fù,pÅ« 0x8C68:xÄ« 0x8C69:bÄ«n,huÄ�n 0x8C6A:háo 0x8C6B:yù,xiè,shÅ« 0x8C6C:zhÅ« 0x8C6D:jiÄ� 0x8C6E:fén 0x8C6F:xÄ« 0x8C70:bó,hù,huò,gòu 0x8C71:wÄ“n 0x8C72:huán 0x8C73:bÄ«n,bÄ�n 0x8C74:dí 0x8C75:zÅ�ng 0x8C76:fén 0x8C77:yì 0x8C78:zhì 0x8C79:bào 0x8C7A:chái 0x8C7B:àn 0x8C7C:pí 0x8C7D:nà 0x8C7E:pÄ« 0x8C7F:gÇ’u 0x8C80:nà,duò 0x8C81:yòu 0x8C82:diÄ�o 0x8C83:mò 0x8C84:sì 0x8C85:xiÅ« 0x8C86:huán,huÄ�n 0x8C87:kÅ«n,mào,kÄ›n 0x8C88:hé,mò 0x8C89:háo,mò,hé,mà 0x8C8A:mò,má 0x8C8B:àn 0x8C8C:mào,mò 0x8C8D:lí,mái,yù 0x8C8E:ní 0x8C8F:bÇ� 0x8C90:yÇ” 0x8C91:jiÄ� 0x8C92:tuÄ�n,tuàn 0x8C93:mÄ�o,máo 0x8C94:pí 0x8C95:xÄ« 0x8C96:yì 0x8C97:jù,yú 0x8C98:mò 0x8C99:chÅ« 0x8C9A:tán 0x8C9B:huÄ�n 0x8C9C:jué 0x8C9D:bèi 0x8C9E:zhÄ“n,zhÄ“ng 0x8C9F:yuán 0x8CA0:fù 0x8CA1:cái 0x8CA2:gòng 0x8CA3:tè 0x8CA4:yí,yì 0x8CA5:háng 0x8CA6:wán 0x8CA7:pín 0x8CA8:huò 0x8CA9:fàn 0x8CAA:tÄ�n 0x8CAB:guàn,wÄ�n 0x8CAC:zé,zhài 0x8CAD:zhì 0x8CAE:èr 0x8CAF:zhù 0x8CB0:shì 0x8CB1:bì 0x8CB2:zÄ« 0x8CB3:èr 0x8CB4:guì 0x8CB5:piÇŽn 0x8CB6:biÇŽn,fá 0x8CB7:mÇŽi 0x8CB8:dài,tè 0x8CB9:shèng 0x8CBA:kuàng 0x8CBB:fèi,fú,bì 0x8CBC:tiÄ“ 0x8CBD:yí 0x8CBE:chí 0x8CBF:mào 0x8CC0:hè 0x8CC1:bì,fén,bÄ“n,fèn,féi,bÄ�n,lù,pÄ�n 0x8CC2:lù 0x8CC3:lìn 0x8CC4:huì 0x8CC5:gÄ�i 0x8CC6:pián 0x8CC7:zÄ«,zì 0x8CC8:jiÇŽ,gÇ”,jià 0x8CC9:xù 0x8CCA:zéi 0x8CCB:jiÇŽo 0x8CCC:gÄ�i 0x8CCD:zÄ�ng 0x8CCE:jiàn 0x8CCF:yÄ«ng 0x8CD0:xùn 0x8CD1:zhèn 0x8CD2:shÄ“,shÄ� 0x8CD3:bÄ«n 0x8CD4:bÄ«n 0x8CD5:qiú 0x8CD6:shÄ“ 0x8CD7:chuàn 0x8CD8:zÄ�ng 0x8CD9:zhÅ�u 0x8CDA:lài 0x8CDB:zàn 0x8CDC:cì 0x8CDD:chÄ“n 0x8CDE:shÇŽng 0x8CDF:tiÇŽn 0x8CE0:péi 0x8CE1:gÄ“ng 0x8CE2:xián,xiàn 0x8CE3:mài 0x8CE4:jiàn 0x8CE5:suì 0x8CE6:fù 0x8CE7:tàn 0x8CE8:cóng 0x8CE9:cóng 0x8CEA:zhì 0x8CEB:jÄ« 0x8CEC:zhàng 0x8CED:dÇ” 0x8CEE:jìn 0x8CEF:xiÅ�ng 0x8CF0:chÇ”n 0x8CF1:yÇ”n 0x8CF2:bÇŽo 0x8CF3:zÄ�i 0x8CF4:lài 0x8CF5:fèng 0x8CF6:càng 0x8CF7:jÄ« 0x8CF8:shèng 0x8CF9:yì,ài 0x8CFA:zhuàn,zuàn 0x8CFB:fù 0x8CFC:gòu 0x8CFD:sài 0x8CFE:zé 0x8CFF:liáo 0x8D00:yì 0x8D01:bài 0x8D02:chÄ›n 0x8D03:wàn 0x8D04:zhì,zhí 0x8D05:zhuì 0x8D06:biÄ�o 0x8D07:yÅ«n,bÄ«n 0x8D08:zèng 0x8D09:dàn 0x8D0A:zàn 0x8D0B:yàn 0x8D0C:pú 0x8D0D:shàn,dàn 0x8D0E:wàn 0x8D0F:yíng 0x8D10:jìn 0x8D11:gàn 0x8D12:xián 0x8D13:zÄ�ng 0x8D14:bì 0x8D15:dú 0x8D16:shú,shù 0x8D17:yàn,yán 0x8D18:shÇŽng 0x8D19:xuàn 0x8D1A:lòng 0x8D1B:gàn,gòng,zhuàng 0x8D1C:zÄ�ng 0x8D1D:bèi 0x8D1E:zhÄ“n 0x8D1F:fù 0x8D20:yuán 0x8D21:gòng 0x8D22:cái 0x8D23:zé 0x8D24:xián 0x8D25:bài 0x8D26:zhàng 0x8D27:huò 0x8D28:zhì 0x8D29:fàn 0x8D2A:tÄ�n 0x8D2B:pín 0x8D2C:biÇŽn 0x8D2D:gòu 0x8D2E:zhù 0x8D2F:guàn 0x8D30:èr 0x8D31:jiàn 0x8D32:bÄ“n,bì 0x8D33:shì 0x8D34:tiÄ“ 0x8D35:guì 0x8D36:kuàng 0x8D37:dài 0x8D38:mào 0x8D39:fèi 0x8D3A:hè 0x8D3B:yí 0x8D3C:zéi 0x8D3D:zhì 0x8D3E:jiÇŽ,gÇ” 0x8D3F:huì 0x8D40:zÄ« 0x8D41:lìn 0x8D42:lù 0x8D43:zÄ�ng 0x8D44:zÄ« 0x8D45:gÄ�i 0x8D46:jìn 0x8D47:qiú 0x8D48:zhèn 0x8D49:lài 0x8D4A:shÄ“ 0x8D4B:fù 0x8D4C:dÇ” 0x8D4D:jÄ« 0x8D4E:shú 0x8D4F:shÇŽng 0x8D50:cì 0x8D51:bì 0x8D52:zhÅ�u 0x8D53:gÄ“ng 0x8D54:péi 0x8D55:dÇŽn 0x8D56:lài 0x8D57:fèng 0x8D58:zhuì 0x8D59:fù 0x8D5A:zhuàn,zuàn 0x8D5B:sài 0x8D5C:zé 0x8D5D:yàn 0x8D5E:zàn 0x8D5F:yÅ«n 0x8D60:zèng 0x8D61:shàn 0x8D62:yíng 0x8D63:gàn 0x8D64:chì 0x8D65:xÄ« 0x8D66:shè,cè 0x8D67:nÇŽn 0x8D68:tóng,xióng 0x8D69:xì 0x8D6A:chÄ“ng 0x8D6B:hè,shì 0x8D6C:chÄ“ng 0x8D6D:zhÄ› 0x8D6E:xiá 0x8D6F:táng 0x8D70:zÇ’u 0x8D71:zÇ’u 0x8D72:lì 0x8D73:jiÅ«,jiù 0x8D74:fù 0x8D75:zhào 0x8D76:gÇŽn,qián 0x8D77:qÇ� 0x8D78:shàn 0x8D79:qióng 0x8D7A:yÇ�n,qÇ�n 0x8D7B:xiÇŽn 0x8D7C:zÄ« 0x8D7D:jué,guì 0x8D7E:qÇ�n 0x8D7F:chí,dì 0x8D80:cÄ« 0x8D81:chèn,zhÄ“n,chén,niÇŽn,zhÄ›n 0x8D82:chèn 0x8D83:dié,tú 0x8D84:jÅ«,qiè 0x8D85:chÄ�o,chÇŽo,chào,tiào 0x8D86:dÄ« 0x8D87:xì 0x8D88:zhÄ�n 0x8D89:jué,jú 0x8D8A:yuè,huó 0x8D8B:qÅ« 0x8D8C:jí,jié 0x8D8D:chí,qÅ« 0x8D8E:chú 0x8D8F:guÄ�,huó 0x8D90:xuè,chì 0x8D91:zÄ«,cì 0x8D92:tiáo,tiào,tiÇŽo 0x8D93:duÇ’ 0x8D94:liè 0x8D95:gÇŽn 0x8D96:suÅ� 0x8D97:cù 0x8D98:xí 0x8D99:zhào,diào 0x8D9A:sù 0x8D9B:yÇ�n 0x8D9C:jú,qÅ«,qiú 0x8D9D:jiàn 0x8D9E:què,qì,jí 0x8D9F:tàng,zhÄ“ng,zhèng,chéng,tÄ�ng 0x8DA0:chuò,chào,tiào,zhuó 0x8DA1:cuÇ�,wÄ›i,jù 0x8DA2:lù 0x8DA3:qù,cù,qÅ«,cÇ’u,zÅ�u 0x8DA4:dàng 0x8DA5:qiÅ«,cù 0x8DA6:zÄ« 0x8DA7:tí 0x8DA8:qÅ«,cù,qù,cÇ’u 0x8DA9:chì 0x8DAA:huáng,guÄ�ng 0x8DAB:qiáo,jiào,chÇŽo 0x8DAC:qiÄ�o 0x8DAD:jiào 0x8DAE:zào 0x8DAF:tì,yuè,yào 0x8DB0:Ä›r 0x8DB1:zÇŽn 0x8DB2:zÇŽn,zÅ« 0x8DB3:zú,jù 0x8DB4:pÄ� 0x8DB5:bào,bÅ�,zhuó,chuò,páo 0x8DB6:kù,wÅ« 0x8DB7:kÄ“ 0x8DB8:dÇ”n 0x8DB9:jué,guì 0x8DBA:fÅ« 0x8DBB:chÄ›n 0x8DBC:jiÇŽn,yàn,yán,jiÄ�n 0x8DBD:fàng,páng,fÄ�ng 0x8DBE:zhÇ� 0x8DBF:tÄ�,sà,qì 0x8DC0:yuè 0x8DC1:bà,pá 0x8DC2:qí,qÇ�,qì,jÄ«,zhÄ« 0x8DC3:yuè 0x8DC4:qiÄ�ng,qiàng 0x8DC5:tuò,chì 0x8DC6:tái 0x8DC7:yì 0x8DC8:niÇŽn,jiàn,chén,tiàn 0x8DC9:líng 0x8DCA:mèi 0x8DCB:bá,bèi 0x8DCC:diÄ“,dié,tú 0x8DCD:kÅ« 0x8DCE:tuó 0x8DCF:jiÄ� 0x8DD0:cÄ«,cÇ�,zÇ� 0x8DD1:pÇŽo,páo,bó 0x8DD2:qiÇŽ 0x8DD3:zhù 0x8DD4:jÅ«,qÇ” 0x8DD5:diÇŽn,tiÄ“,dié,zhàn,diÄ“ 0x8DD6:zhí 0x8DD7:fÅ«,fù 0x8DD8:pán,bàn 0x8DD9:jù,qÅ«,qiÄ›,zhù,qiè 0x8DDA:shÄ�n 0x8DDB:bÇ’,bì,pÅ� 0x8DDC:ní 0x8DDD:jù 0x8DDE:lì,luò 0x8DDF:gÄ“n 0x8DE0:yí 0x8DE1:jÄ« 0x8DE2:duò,dài,duÅ�,chí 0x8DE3:xiÇŽn,xiÄ�n,sÇ”n 0x8DE4:jiÄ�o,qiÄ�o 0x8DE5:duò 0x8DE6:zhÅ«,chú 0x8DE7:quán,zÅ«n 0x8DE8:kuà,kù,kuÄ�,kuÇŽ 0x8DE9:zhuÇŽi,shì 0x8DEA:guì 0x8DEB:qióng,qiÄ�ng,qiÅ�ng 0x8DEC:kuÇ�,xiè 0x8DED:xiáng 0x8DEE:chì,dié 0x8DEF:lù,luò 0x8DF0:pián,bèng,bÇ�ng 0x8DF1:zhì 0x8DF2:jiá,jié 0x8DF3:tiào,diào,táo 0x8DF4:cÇŽi 0x8DF5:jiàn 0x8DF6:dá 0x8DF7:qiÄ�o 0x8DF8:bì 0x8DF9:xiÄ�n 0x8DFA:duò 0x8DFB:jÄ« 0x8DFC:jú,qù 0x8DFD:jì 0x8DFE:shÅ«,chÅ�u 0x8DFF:tú,duó,chuÅ� 0x8E00:chù,cù 0x8E01:jìng,kÄ“ng 0x8E02:niè 0x8E03:xiÄ�o,qiào 0x8E04:bù 0x8E05:xué,chì 0x8E06:cÅ«n,qÅ«n,cún,zÅ«n,qiù,zhÅ«n 0x8E07:mÇ” 0x8E08:shÅ« 0x8E09:liáng,láng,liàng,làng 0x8E0A:yÇ’ng 0x8E0B:jiÇŽo 0x8E0C:chóu 0x8E0D:qiÄ�o 0x8E0E:móu 0x8E0F:tà,tÄ� 0x8E10:jiàn 0x8E11:qí,jÄ«,jì 0x8E12:wÅ�,wÄ“i,ruí 0x8E13:wÄ›i,cù 0x8E14:chuÅ�,diào,zhuÅ�,tiào,chuò 0x8E15:jié 0x8E16:jí,qì,què 0x8E17:niè 0x8E18:jÅ« 0x8E19:niè 0x8E1A:lún 0x8E1B:lù 0x8E1C:lèng,léng,chÄ›ng 0x8E1D:huái 0x8E1E:jù 0x8E1F:chí 0x8E20:wÇŽn,wò 0x8E21:quán,juÇŽn 0x8E22:tÄ«,dié 0x8E23:bó,pòu 0x8E24:zú,cù,cuì 0x8E25:qiè 0x8E26:yÇ�,qÄ«,jÄ«,jÇ�,yì 0x8E27:cù,dí 0x8E28:zÅ�ng 0x8E29:cÇŽi,kuí 0x8E2A:zÅ�ng 0x8E2B:pèng,pán 0x8E2C:zhì 0x8E2D:zhÄ“ng 0x8E2E:diÇŽn 0x8E2F:zhí 0x8E30:yú,yáo,chÅ« 0x8E31:duó,chuò,duò 0x8E32:dùn 0x8E33:chuÇŽn,chÇ”n,chÅ«n 0x8E34:yÇ’ng 0x8E35:zhÇ’ng,zhòng 0x8E36:dì,zhì,tí,chí,shì 0x8E37:zhÇŽ 0x8E38:chÄ›n 0x8E39:chuài,shuàn,duàn,chuÇŽn 0x8E3A:jiàn 0x8E3B:guÄ�,guÇŽ,tuó 0x8E3C:táng,tÇŽng,shÄ�ng 0x8E3D:jÇ” 0x8E3E:fú,bì 0x8E3F:zú 0x8E40:dié 0x8E41:pián 0x8E42:róu,rÇ’u 0x8E43:nuò,rè,nà 0x8E44:tí,dì 0x8E45:chÇŽ,zhÄ� 0x8E46:tuÇ� 0x8E47:jiÇŽn 0x8E48:dÇŽo 0x8E49:cuÅ� 0x8E4A:qÄ«,xÄ« 0x8E4B:tà 0x8E4C:qiÄ�ng,qiàng 0x8E4D:niÇŽn,zhÇŽn,chán 0x8E4E:diÄ�n 0x8E4F:tí 0x8E50:jí 0x8E51:niè 0x8E52:pán,mán 0x8E53:liÅ«,liù 0x8E54:zàn,cán 0x8E55:bì 0x8E56:chÅ�ng 0x8E57:lù 0x8E58:liáo 0x8E59:cù 0x8E5A:tÄ�ng,tàng,chÄ“ng 0x8E5B:dài,diÄ“,dÄ�n,zhì 0x8E5C:sù 0x8E5D:xÇ� 0x8E5E:kuÇ� 0x8E5F:jÄ« 0x8E60:zhí,zhuó 0x8E61:qiÄ�ng,qiàng 0x8E62:dí,zhí 0x8E63:pán,mán,liÇŽng 0x8E64:zÅ�ng 0x8E65:lián 0x8E66:bèng 0x8E67:zÄ�o 0x8E68:niÇŽn,rÇŽn 0x8E69:bié 0x8E6A:tuí 0x8E6B:jú 0x8E6C:dÄ“ng,dèng 0x8E6D:cèng,céng 0x8E6E:xiÄ�n 0x8E6F:fán 0x8E70:chú 0x8E71:zhÅ�ng,chòng 0x8E72:dÅ«n,zún,cún,zÅ«n,cÇ”n,cuán,qÇ”n 0x8E73:bÅ� 0x8E74:cù,zú,jiu 0x8E75:cù 0x8E76:jué,guì,juÄ› 0x8E77:jué 0x8E78:lìn,lín 0x8E79:tá 0x8E7A:qiÄ�o,qiào 0x8E7B:juÄ“,qiÄ�o,jiÇŽo,jué,jú,xuè 0x8E7C:pÇ” 0x8E7D:liÄ�o 0x8E7E:dÅ«n 0x8E7F:cuÄ�n 0x8E80:guàn 0x8E81:zào 0x8E82:dá 0x8E83:bì 0x8E84:bì 0x8E85:zhú,zhuó 0x8E86:jù 0x8E87:chú,chuò 0x8E88:qiào 0x8E89:dÇ”n 0x8E8A:chóu 0x8E8B:jÄ« 0x8E8C:wÇ” 0x8E8D:yuè,tì 0x8E8E:niÇŽn 0x8E8F:lìn 0x8E90:liè 0x8E91:zhí 0x8E92:lì,yuè,luò 0x8E93:zhì,zhÄ« 0x8E94:chán,zhàn 0x8E95:chú 0x8E96:duàn 0x8E97:wèi 0x8E98:lóng,lÇ’ng 0x8E99:lìn 0x8E9A:xiÄ�n 0x8E9B:wèi 0x8E9C:zuÄ�n 0x8E9D:lán 0x8E9E:xiè 0x8E9F:ráng 0x8EA0:sÇŽ,xiè 0x8EA1:niè 0x8EA2:tà 0x8EA3:qú 0x8EA4:jí 0x8EA5:cuÄ�n 0x8EA6:cuó,zuÄ�n 0x8EA7:xÇ� 0x8EA8:kuí 0x8EA9:jué,qì 0x8EAA:lìn 0x8EAB:shÄ“n,juÄ�n 0x8EAC:gÅ�ng 0x8EAD:dÄ�n 0x8EAE:fÄ“n 0x8EAF:qÅ« 0x8EB0:tÇ� 0x8EB1:duÇ’ 0x8EB2:duÇ’ 0x8EB3:gÅ�ng 0x8EB4:láng 0x8EB5:rÄ›n 0x8EB6:luÇ’ 0x8EB7:ÇŽi 0x8EB8:jÄ« 0x8EB9:jú 0x8EBA:tÇŽng,tàng 0x8EBB:kÅ�ng 0x8EBC:lào 0x8EBD:yÇŽn,yàn 0x8EBE:mÄ›i 0x8EBF:kÄ�ng 0x8EC0:qÅ« 0x8EC1:lóu,lÇš 0x8EC2:lào 0x8EC3:duÇ’,tuÇ’ 0x8EC4:zhí 0x8EC5:yàn 0x8EC6:tÇ� 0x8EC7:dào 0x8EC8:yÄ«ng 0x8EC9:yù 0x8ECA:chÄ“,jÅ« 0x8ECB:yà,zhá,gá 0x8ECC:guÇ� 0x8ECD:jÅ«n 0x8ECE:wèi 0x8ECF:yuè 0x8ED0:xìn,xiàn 0x8ED1:dài 0x8ED2:xuÄ�n,xiÇŽn,xiàn,hÇŽn,jiÄ�n 0x8ED3:fàn 0x8ED4:rèn 0x8ED5:shÄ�n 0x8ED6:kuáng 0x8ED7:shÅ« 0x8ED8:tún 0x8ED9:chén,qí 0x8EDA:dài 0x8EDB:è 0x8EDC:nà 0x8EDD:qí 0x8EDE:máo 0x8EDF:ruÇŽn 0x8EE0:kuáng 0x8EE1:qián 0x8EE2:zhuÇŽn 0x8EE3:hÅ�ng 0x8EE4:hÅ« 0x8EE5:qú,gÅ�u,gòu,jÅ« 0x8EE6:kuàng 0x8EE7:dÇ�,chí 0x8EE8:líng,lÇ�ng 0x8EE9:dài 0x8EEA:Ä�o,ào 0x8EEB:zhÄ›n 0x8EEC:fàn,bèn 0x8EED:kuÄ�ng 0x8EEE:yÇŽng 0x8EEF:pÄ“ng 0x8EF0:bèi 0x8EF1:gÅ« 0x8EF2:gÅ« 0x8EF3:páo 0x8EF4:zhù 0x8EF5:rÇ’ng,fÇ”,fù,róng 0x8EF6:è 0x8EF7:bá 0x8EF8:zhóu,zhú,zhòu 0x8EF9:zhÇ� 0x8EFA:yáo,diÄ�o 0x8EFB:kÄ“ 0x8EFC:yì,dié,zhé 0x8EFD:zhì,qÄ«ng 0x8EFE:shì 0x8EFF:píng 0x8F00:ér 0x8F01:gÇ’ng 0x8F02:jú 0x8F03:jiào,jué,xiào 0x8F04:guÄ�ng 0x8F05:hé,lù,yà 0x8F06:kÇŽi,kài 0x8F07:quán,chÅ«n 0x8F08:zhÅ�u 0x8F09:zài,zÇŽi,dài,zÄ�i,zÄ« 0x8F0A:zhì 0x8F0B:shÄ“ 0x8F0C:liàng 0x8F0D:yù 0x8F0E:shÄ�o 0x8F0F:yóu 0x8F10:wàn,yuÇŽn 0x8F11:yÇ�n,qÅ«n 0x8F12:zhé 0x8F13:wÇŽn 0x8F14:fÇ” 0x8F15:qÄ«ng,qìng 0x8F16:zhÅ�u 0x8F17:ní,yì 0x8F18:léng,líng,lèng 0x8F19:zhé 0x8F1A:zhàn 0x8F1B:liàng 0x8F1C:zÄ«,zì 0x8F1D:huÄ« 0x8F1E:wÇŽng 0x8F1F:chuò 0x8F20:guÇ’,huà,huì 0x8F21:kÇŽn 0x8F22:yÇ� 0x8F23:péng 0x8F24:qiàn 0x8F25:gÇ”n 0x8F26:niÇŽn,liÇŽn 0x8F27:píng,pÄ“ng 0x8F28:guÇŽn 0x8F29:bèi 0x8F2A:lún 0x8F2B:pái 0x8F2C:liáng 0x8F2D:ruÇŽn,ér 0x8F2E:róu,rÇ’u 0x8F2F:jí 0x8F30:yáng 0x8F31:xián,kàn 0x8F32:chuán 0x8F33:còu 0x8F34:chÅ«n,shÇ”n 0x8F35:gé,yà,è,qiè 0x8F36:yóu 0x8F37:hÅ�ng 0x8F38:shÅ«,shù 0x8F39:fù,bú 0x8F3A:zÄ« 0x8F3B:fú 0x8F3C:wÄ“n,yÅ«n 0x8F3D:bèn 0x8F3E:zhÇŽn,niÇŽn 0x8F3F:yú,yù 0x8F40:wÄ“n 0x8F41:tÄ�o,kÇŽn 0x8F42:gÇ”,gÅ« 0x8F43:zhÄ“n 0x8F44:xiá,hé 0x8F45:yuán 0x8F46:lù 0x8F47:jiÄ�o,xiÇŽo 0x8F48:cháo 0x8F49:zhuÇŽn,zhuàn,zhuÇŽi 0x8F4A:wèi 0x8F4B:hún 0x8F4C:xuÄ› 0x8F4D:zhé 0x8F4E:jiào 0x8F4F:zhàn 0x8F50:bú 0x8F51:lÇŽo,láo,liáo,liÇŽo,liào 0x8F52:fén 0x8F53:fÄ�n 0x8F54:lín,lìn 0x8F55:gé 0x8F56:sè 0x8F57:kÇŽn 0x8F58:huán,huàn 0x8F59:yÇ� 0x8F5A:jí 0x8F5B:zhuì 0x8F5C:ér 0x8F5D:yù 0x8F5E:jiàn 0x8F5F:hÅ�ng 0x8F60:léi 0x8F61:pèi 0x8F62:lì 0x8F63:lì 0x8F64:lú 0x8F65:lìn 0x8F66:chÄ“,jÅ« 0x8F67:yà,gá,zhá 0x8F68:guÇ� 0x8F69:xuÄ�n 0x8F6A:dài 0x8F6B:rèn 0x8F6C:zhuÇŽn,zhuÇŽi,zhuàn 0x8F6D:è 0x8F6E:lún 0x8F6F:ruÇŽn 0x8F70:hÅ�ng 0x8F71:gÅ« 0x8F72:kÄ“,kÄ› 0x8F73:lú 0x8F74:zhóu,zhòu 0x8F75:zhÇ� 0x8F76:yì 0x8F77:hÅ« 0x8F78:zhÄ›n 0x8F79:lì 0x8F7A:yáo 0x8F7B:qÄ«ng 0x8F7C:shì 0x8F7D:zài,zÇŽi 0x8F7E:zhì 0x8F7F:jiào 0x8F80:zhÅ�u 0x8F81:quán 0x8F82:lù 0x8F83:jiào 0x8F84:zhé 0x8F85:fÇ” 0x8F86:liàng 0x8F87:niÇŽn 0x8F88:bèi 0x8F89:huÄ« 0x8F8A:gÇ”n 0x8F8B:wÇŽng 0x8F8C:liáng 0x8F8D:chuò 0x8F8E:zÄ« 0x8F8F:còu 0x8F90:fú 0x8F91:jí 0x8F92:wÄ“n 0x8F93:shÅ« 0x8F94:pèi 0x8F95:yuán 0x8F96:xiá 0x8F97:niÇŽn,zhÇŽn 0x8F98:lù 0x8F99:zhé 0x8F9A:lín 0x8F9B:xÄ«n 0x8F9C:gÅ« 0x8F9D:cí 0x8F9E:cí 0x8F9F:pì,bì,mÇ�,pÄ« 0x8FA0:zuì,zuÄ« 0x8FA1:biàn 0x8FA2:là 0x8FA3:là 0x8FA4:cí 0x8FA5:xuÄ“,yì 0x8FA6:bàn 0x8FA7:biàn 0x8FA8:biàn,biÇŽn,bàn,piàn 0x8FA9:biàn 0x8FAA:xuÄ“ 0x8FAB:biàn 0x8FAC:bÄ�n 0x8FAD:cí 0x8FAE:biàn 0x8FAF:biàn,pián,biÇŽn,bàn 0x8FB0:chén 0x8FB1:rÇ” 0x8FB2:nóng 0x8FB3:nóng 0x8FB4:chÇŽn,zhÄ›n 0x8FB5:chuò 0x8FB6:chuò 0x8FB7:yÄ« 0x8FB8:réng 0x8FB9:biÄ�n,bian 0x8FBA:biÄ�n 0x8FBB:shí 0x8FBC:yÅ« 0x8FBD:liáo 0x8FBE:dá,tì,tà 0x8FBF:chÄ�n,chán 0x8FC0:gÄ�n 0x8FC1:qiÄ�n 0x8FC2:yÅ« 0x8FC3:yÅ« 0x8FC4:qì 0x8FC5:xùn 0x8FC6:yí,yÇ�,tuó 0x8FC7:guò,guÅ� 0x8FC8:mài 0x8FC9:qÄ« 0x8FCA:zÄ� 0x8FCB:wàng,guàng,kuáng 0x8FCC:tù 0x8FCD:zhÅ«n 0x8FCE:yíng,yìng 0x8FCF:dá 0x8FD0:yùn,yÇ”n 0x8FD1:jìn 0x8FD2:háng,xiáng 0x8FD3:yà 0x8FD4:fÇŽn 0x8FD5:wù,wÇ” 0x8FD6:dá 0x8FD7:é 0x8FD8:hái,fú,huán 0x8FD9:zhè,zhèi 0x8FDA:dá 0x8FDB:jìn 0x8FDC:yuÇŽn 0x8FDD:wéi 0x8FDE:lián 0x8FDF:chí 0x8FE0:chè 0x8FE1:nì,chí 0x8FE2:tiáo 0x8FE3:zhì,chì 0x8FE4:yí,yÇ�,tuó 0x8FE5:jiÇ’ng 0x8FE6:jiÄ�,xiè 0x8FE7:chén 0x8FE8:dài 0x8FE9:Ä›r 0x8FEA:dí 0x8FEB:pò,pÇŽi 0x8FEC:zhù,wÇŽng 0x8FED:dié,yì,dá 0x8FEE:zé,zuò 0x8FEF:táo 0x8FF0:shù 0x8FF1:tuó,yí 0x8FF2:qu 0x8FF3:jìng 0x8FF4:huí 0x8FF5:dòng 0x8FF6:yòu 0x8FF7:mí,mì 0x8FF8:bèng 0x8FF9:jì,jÄ« 0x8FFA:nÇŽi 0x8FFB:yí 0x8FFC:jié 0x8FFD:zhuÄ«,duÄ«,tuÄ« 0x8FFE:liè 0x8FFF:xùn 0x9000:tuì 0x9001:sòng 0x9002:shì,kuò 0x9003:táo 0x9004:páng,féng 0x9005:hòu 0x9006:nì 0x9007:dùn 0x9008:jiÇ’ng 0x9009:xuÇŽn 0x900A:xùn 0x900B:bÅ« 0x900C:yÅ�u,yóu 0x900D:xiÄ�o 0x900E:qiú 0x900F:tòu,shÅ« 0x9010:zhú,dí,zhòu,tún 0x9011:qiú 0x9012:dì 0x9013:dì 0x9014:tú 0x9015:jìng 0x9016:tì 0x9017:dòu,zhù,tóu,qí 0x9018:yÇ�,sì 0x9019:zhè,yàn,zhèi 0x901A:tÅ�ng,tòng 0x901B:guàng,kuáng 0x901C:wù,wÇ” 0x901D:shì 0x901E:chÄ›ng,yíng 0x901F:sù 0x9020:zào,cào,cÄ�o 0x9021:qÅ«n,xùn,suÅ� 0x9022:féng,péng,páng 0x9023:lián,liÇŽn,liàn,làn 0x9024:suò 0x9025:huí 0x9026:lÇ� 0x9027:gÇ” 0x9028:lái,lài 0x9029:bèn,bÄ“n 0x902A:cuò 0x902B:jué,zhú 0x902C:bèng,pÄ“ng 0x902D:huàn 0x902E:dÇŽi,dài,dì 0x902F:lù,dài 0x9030:yóu 0x9031:zhÅ�u 0x9032:jìn 0x9033:yù 0x9034:chuÅ�,chuò 0x9035:kuí,kuÇ� 0x9036:wÄ“i 0x9037:tì 0x9038:yì 0x9039:dá 0x903A:yuÇŽn 0x903B:luó 0x903C:bÄ« 0x903D:nuò 0x903E:yú,dòu 0x903F:dàng,táng 0x9040:suí 0x9041:dùn,qÅ«n,xún 0x9042:suì,suí 0x9043:yÇŽn,àn 0x9044:chuán 0x9045:chí 0x9046:tí 0x9047:yù,yóng,Ç’u 0x9048:shí 0x9049:zhÄ“n 0x904A:yóu 0x904B:yùn 0x904C:è 0x904D:biàn 0x904E:guò,guÅ�,guo,huò 0x904F:è 0x9050:xiá 0x9051:huáng 0x9052:qiú,qiÅ« 0x9053:dào,dÇŽo 0x9054:dá,tà 0x9055:wéi,huí 0x9056:nán 0x9057:yí,wèi 0x9058:gòu 0x9059:yáo 0x905A:chòu 0x905B:liú,liù 0x905C:xùn 0x905D:tà 0x905E:dì,shì,dài 0x905F:chí,zhì,xÄ« 0x9060:yuÇŽn,yuàn 0x9061:sù 0x9062:tà 0x9063:qiÇŽn,qiàn 0x9064:mÇŽ 0x9065:yáo 0x9066:guàn 0x9067:zhÄ�ng 0x9068:áo 0x9069:shì,dí,tì,zhé 0x906A:cà 0x906B:chì 0x906C:sù 0x906D:zÄ�o 0x906E:zhÄ“ 0x906F:dùn 0x9070:dì,shì,dài 0x9071:lóu 0x9072:chí,zhì 0x9073:cuÅ� 0x9074:lín,lìn 0x9075:zÅ«n 0x9076:rào 0x9077:qiÄ�n 0x9078:xuÇŽn,xuàn,suàn,shuÄ� 0x9079:yù 0x907A:yí,wèi,suí 0x907B:è 0x907C:liáo 0x907D:jù,qú 0x907E:shì 0x907F:bì 0x9080:yÄ�o 0x9081:mài 0x9082:xiè 0x9083:suì 0x9084:hái,huán,xuán 0x9085:zhÄ�n,zhàn 0x9086:téng 0x9087:Ä›r 0x9088:miÇŽo,miáo 0x9089:biÄ�n 0x908A:biÄ�n 0x908B:lÄ�,liè 0x908C:lí,chí 0x908D:yuán 0x908E:yáo 0x908F:luó,luò 0x9090:lÇ� 0x9091:yì,è 0x9092:tíng 0x9093:dèng,shÄ�n 0x9094:qÇ� 0x9095:yÅ�ng,yÇ’ng 0x9096:shÄ�n 0x9097:hán 0x9098:yú 0x9099:máng 0x909A:rú,fù 0x909B:qióng 0x909C:xÄ« 0x909D:kuàng 0x909E:fÅ« 0x909F:kàng,háng,kÄ�ng 0x90A0:bÄ«n 0x90A1:fÄ�ng,fàng 0x90A2:xíng,gÄ›ng 0x90A3:nà,nuó,nuò,nèi,nÇŽ,nÄ›i,né,nÄ�,nÇŽi,nè 0x90A4:xÄ«n 0x90A5:shÄ›n 0x90A6:bÄ�ng 0x90A7:yuán 0x90A8:cÅ«n 0x90A9:huÇ’ 0x90AA:xié,yá,yé,xú,shé 0x90AB:bÄ�ng 0x90AC:wÅ« 0x90AD:jù 0x90AE:yóu 0x90AF:hán,hàn 0x90B0:tái 0x90B1:qiÅ« 0x90B2:bì,biàn 0x90B3:pÄ« 0x90B4:bÇ�ng 0x90B5:shào 0x90B6:bèi 0x90B7:wÇŽ 0x90B8:dÇ� 0x90B9:zÅ�u 0x90BA:yè,qiÅ« 0x90BB:lín 0x90BC:kuÄ�ng 0x90BD:guÄ« 0x90BE:zhÅ« 0x90BF:shÄ« 0x90C0:kÅ« 0x90C1:yù 0x90C2:gÄ�i,hái 0x90C3:hé,xiá 0x90C4:qiè,xì 0x90C5:zhì,jí 0x90C6:jí 0x90C7:huán,xún 0x90C8:hòu 0x90C9:xíng 0x90CA:jiÄ�o 0x90CB:xí 0x90CC:guÄ« 0x90CD:nuó,nÇŽ,fú 0x90CE:láng,làng 0x90CF:jiá 0x90D0:kuài 0x90D1:zhèng 0x90D2:láng 0x90D3:yùn 0x90D4:yán 0x90D5:chéng 0x90D6:dòu 0x90D7:xÄ«,chÄ« 0x90D8:lÇš 0x90D9:fÇ” 0x90DA:wú,yú 0x90DB:fú 0x90DC:gào 0x90DD:hÇŽo,shì 0x90DE:láng 0x90DF:jiá 0x90E0:gÄ›ng 0x90E1:jùn 0x90E2:yÇ�ng,chéng 0x90E3:bó 0x90E4:xì 0x90E5:bèi 0x90E6:lì 0x90E7:yún 0x90E8:bù,pÇ’u 0x90E9:xiáo,ÇŽo 0x90EA:qÄ« 0x90EB:pí 0x90EC:qÄ«ng 0x90ED:guÅ�,guó 0x90EE:zhÅ�u 0x90EF:tán 0x90F0:zÅ�u,jÇ” 0x90F1:píng 0x90F2:lái,lÄ›i 0x90F3:ní 0x90F4:chÄ“n,lán 0x90F5:yóu,chuí 0x90F6:bù 0x90F7:xiÄ�ng 0x90F8:dÄ�n 0x90F9:jú 0x90FA:yÅ�ng 0x90FB:qiÄ�o 0x90FC:yÄ« 0x90FD:dÅ�u,dÅ« 0x90FE:yÇŽn,yÄ�n 0x90FF:méi 0x9100:ruò 0x9101:bèi 0x9102:è 0x9103:shÅ« 0x9104:juàn 0x9105:yÇ” 0x9106:yùn 0x9107:hóu 0x9108:kuí 0x9109:xiÄ�ng,xiÇŽng,xiàng 0x910A:xiÄ�ng 0x910B:sÅ�u 0x910C:táng 0x910D:míng 0x910E:xÄ« 0x910F:rÇ” 0x9110:chù 0x9111:zÄ« 0x9112:zÅ�u,jù 0x9113:yè 0x9114:wÅ« 0x9115:xiÄ�ng 0x9116:yún 0x9117:hào,qiÄ�o,jiÄ�o 0x9118:yÅ�ng 0x9119:bÇ� 0x911A:mào,mò 0x911B:cháo 0x911C:fÅ«,lù 0x911D:liÇŽo 0x911E:yín 0x911F:zhuÄ�n 0x9120:hù 0x9121:qiÄ�o 0x9122:yÄ�n 0x9123:zhÄ�ng,zhàng 0x9124:màn,wàn 0x9125:qiÄ�o 0x9126:xÇ” 0x9127:dèng 0x9128:bì 0x9129:xún 0x912A:bì 0x912B:zÄ“ng,céng 0x912C:wéi 0x912D:zhèng 0x912E:mào 0x912F:shàn 0x9130:lín,lìn 0x9131:pó,pí,pán 0x9132:dÄ�n,duÅ� 0x9133:méng 0x9134:yè 0x9135:cào,sÄ�o 0x9136:kuài 0x9137:fÄ“ng 0x9138:méng 0x9139:zÅ�u,jù 0x913A:kuàng,kuò 0x913B:liÇŽn 0x913C:zàn 0x913D:chán 0x913E:yÅ�u 0x913F:jÄ«,qí 0x9140:yàn,yÇŽn 0x9141:chán 0x9142:cuó,zàn 0x9143:líng 0x9144:huÄ�n,quÄ�n 0x9145:xÄ« 0x9146:fÄ“ng 0x9147:zàn,cuó 0x9148:lì,lí,zhí 0x9149:yÇ’u 0x914A:dÄ«ng,dÇ�ng 0x914B:qiú 0x914C:zhuó 0x914D:pèi 0x914E:zhòu 0x914F:yÇ�,yí 0x9150:gÄ�n,hàng 0x9151:yú 0x9152:jiÇ” 0x9153:yÇŽn,yàn,yÇ�n 0x9154:zuì 0x9155:máo 0x9156:zhèn,dÄ�n 0x9157:xù 0x9158:dòu 0x9159:zhÄ“n 0x915A:fÄ“n 0x915B:yuán 0x915C:fu 0x915D:yùn 0x915E:tài 0x915F:tiÄ�n 0x9160:qiÇŽ 0x9161:tuó,duò 0x9162:cù,zuò 0x9163:hÄ�n,hàn 0x9164:gÅ« 0x9165:sÅ« 0x9166:pò,fÄ�,pÅ� 0x9167:chóu 0x9168:zài,zuì 0x9169:mÇ�ng 0x916A:lào,luò,lù 0x916B:chuò 0x916C:chóu 0x916D:yòu 0x916E:tóng,dòng,chóng 0x916F:zhÇ� 0x9170:xiÄ�n 0x9171:jiàng 0x9172:chéng 0x9173:yìn 0x9174:tú 0x9175:jiào 0x9176:méi 0x9177:kù 0x9178:suÄ�n 0x9179:lèi 0x917A:pú 0x917B:zuì,fú 0x917C:hÇŽi 0x917D:yàn 0x917E:shÄ�i,shÄ« 0x917F:niàng,niáng 0x9180:wéi,zhuì 0x9181:lù 0x9182:lÇŽn 0x9183:yÄ�n,Ä�ng 0x9184:táo 0x9185:pÄ“i 0x9186:zhÇŽn 0x9187:chún 0x9188:tán,dàn 0x9189:zuì 0x918A:zhuì 0x918B:cù,zuò 0x918C:kÅ«n 0x918D:tí,tÇ� 0x918E:xián,jiÇŽn 0x918F:dÅ« 0x9190:hú 0x9191:xÇ” 0x9192:xÇ�ng,chéng,jÄ«ng 0x9193:tÇŽn 0x9194:qiú,chÅ�u 0x9195:chún 0x9196:yùn 0x9197:pò 0x9198:kÄ“ 0x9199:sÅ�u 0x919A:mí 0x919B:quán,chuò 0x919C:chÇ’u 0x919D:cuÅ�,cuÇ’ 0x919E:yùn 0x919F:yòng 0x91A0:àng 0x91A1:zhà 0x91A2:hÇŽi 0x91A3:táng 0x91A4:jiàng 0x91A5:piÇŽo 0x91A6:chÄ›n,chÇŽn 0x91A7:yù,Å�u 0x91A8:lí 0x91A9:zÄ�o 0x91AA:láo 0x91AB:yÄ«,yÇ� 0x91AC:jiàng 0x91AD:bú 0x91AE:jiào,qiáo,zhàn 0x91AF:xÄ« 0x91B0:tán 0x91B1:fÄ�,pò,pÅ� 0x91B2:nóng 0x91B3:yì,shì 0x91B4:lÇ� 0x91B5:jù 0x91B6:yàn,liÇŽn,xiÄ�n,jiÇŽn 0x91B7:yì,yÇ�,ài 0x91B8:niàng 0x91B9:rú 0x91BA:xÅ«n 0x91BB:chóu,shòu,dào 0x91BC:yàn 0x91BD:líng 0x91BE:mí 0x91BF:mí 0x91C0:niàng,niáng 0x91C1:xìn 0x91C2:jiào 0x91C3:shÄ�i,shÄ«,lí 0x91C4:mí 0x91C5:yàn 0x91C6:biàn,biÇŽn 0x91C7:cÇŽi,cài 0x91C8:shì 0x91C9:yòu 0x91CA:shì 0x91CB:shì,yì 0x91CC:lÇ�,li 0x91CD:zhòng,chóng,tóng 0x91CE:yÄ›,shù 0x91CF:liàng,liáng 0x91D0:lí,xÄ«,lái,tÄ�i,lài,xÇ� 0x91D1:jÄ«n,jìn 0x91D2:jÄ«n 0x91D3:qiú,gá 0x91D4:yÇ� 0x91D5:liÇŽo,liào 0x91D6:dÄ�o 0x91D7:zhÄ�o 0x91D8:dÄ«ng,dìng,líng 0x91D9:pò,pÅ� 0x91DA:qiú 0x91DB:bÄ� 0x91DC:fÇ” 0x91DD:zhÄ“n 0x91DE:zhí 0x91DF:bÄ� 0x91E0:luàn 0x91E1:fÇ” 0x91E2:nÇŽi 0x91E3:diào 0x91E4:shàn,shÄ�n,xiÄ�n 0x91E5:qiÇŽo,jiÇŽo 0x91E6:kòu 0x91E7:chuàn,chuÄ�n 0x91E8:zÇ� 0x91E9:fÇŽn,fàn,fán 0x91EA:huá,yú 0x91EB:huá,wÅ« 0x91EC:hàn,gÄ�n 0x91ED:gÄ�ng,gÅ�ng 0x91EE:qí 0x91EF:máng 0x91F0:rì,rèn,jiàn 0x91F1:dì 0x91F2:sì 0x91F3:xì 0x91F4:yì 0x91F5:chÄ�i,chÄ� 0x91F6:shÄ«,yí,yÄ› 0x91F7:tÇ” 0x91F8:xÄ« 0x91F9:nÇš 0x91FA:qiÄ�n 0x91FB:qiú 0x91FC:jiàn 0x91FD:pì,pÄ«,zhÄ�o 0x91FE:yé,yá 0x91FF:jÄ«n,yÇ�n,yín 0x9200:bÇŽ,bÄ�,pá 0x9201:fÄ�ng 0x9202:chén,qín,zhèn 0x9203:xíng 0x9204:dÇ’u 0x9205:yuè 0x9206:qiÄ�n,zhÅ�ng 0x9207:fÅ«,fÇ” 0x9208:pÄ«,bù 0x9209:nà,ruì 0x920A:xÄ«n,qìn 0x920B:é 0x920C:jué 0x920D:dùn 0x920E:gÅ�u 0x920F:yÇ�n 0x9210:qián,hán 0x9211:bÇŽn 0x9212:sà,xì 0x9213:rén 0x9214:chÄ�o,chÇŽo 0x9215:niÇ”,chÇ’u 0x9216:fÄ“n 0x9217:yÇ”n,duì 0x9218:yÇ� 0x9219:qín 0x921A:pÄ«,bÄ«,bÇ� 0x921B:guÅ� 0x921C:hóng 0x921D:yín 0x921E:jÅ«n 0x921F:diào 0x9220:yì 0x9221:zhÅ�ng 0x9222:xÇ� 0x9223:gài 0x9224:rì 0x9225:huÇ’ 0x9226:tài 0x9227:kàng 0x9228:yuán 0x9229:lú 0x922A:è 0x922B:qín 0x922C:duó 0x922D:zÄ« 0x922E:nÇ�,ní 0x922F:tú 0x9230:shì 0x9231:mín,mÇ�n 0x9232:gÅ«,pì 0x9233:kÄ“ 0x9234:líng 0x9235:bÇ�ng 0x9236:sì,cí,tái 0x9237:gÇ”,hú,gù 0x9238:bó 0x9239:pÄ«,pí 0x923A:yù 0x923B:sì 0x923C:zuó 0x923D:bÅ« 0x923E:yóu,zhòu 0x923F:tián,diàn 0x9240:jiÇŽ,gé 0x9241:zhÄ“n,zhèn 0x9242:shÇ� 0x9243:shì,zú 0x9244:zhí,tiÄ› 0x9245:jù 0x9246:chÄ�n,qián,tiÄ“ 0x9247:shÄ«,yí 0x9248:shÄ«,shé,yí,tuó,tÄ� 0x9249:xuàn 0x924A:zhÄ�o 0x924B:bào,páo,báo 0x924C:hé 0x924D:bì,sè 0x924E:shÄ“ng 0x924F:chú,zÅ«,zhù,jÇ”,chá,xú 0x9250:shí,zú 0x9251:bó 0x9252:zhù 0x9253:chì 0x9254:zÄ� 0x9255:pÅ�,pÇ’ 0x9256:tóng 0x9257:qián,Ä�n 0x9258:fú 0x9259:zhÇŽi 0x925A:liÇ”,mÇŽo 0x925B:qiÄ�n,yán 0x925C:fú 0x925D:lì 0x925E:yuè 0x925F:pÄ« 0x9260:yÄ�ng 0x9261:bàn 0x9262:bÅ� 0x9263:jié 0x9264:gÅ�u,gòu,qú 0x9265:shù,xù 0x9266:zhÄ“ng 0x9267:mÇ” 0x9268:xÇ�,nÇ�,niÄ› 0x9269:xÇ�,niè 0x926A:dì 0x926B:jiÄ� 0x926C:mù 0x926D:tÇŽn 0x926E:huán,shén,shÄ“n 0x926F:yÇ� 0x9270:sÄ« 0x9271:kuàng 0x9272:kÇŽ 0x9273:bÄ›i 0x9274:jiàn 0x9275:tóng,zhuó 0x9276:xíng 0x9277:hóng 0x9278:jiÇŽo 0x9279:chÇ� 0x927A:èr,kÄ“ng,Ä›r 0x927B:luò,gÄ“,gè 0x927C:bÇ�ng,píng 0x927D:shì 0x927E:móu,máo 0x927F:jiÄ�,gÄ“,kÄ“,hÄ� 0x9280:yín 0x9281:jÅ«n 0x9282:zhÅ�u 0x9283:chòng 0x9284:xiÇŽng,jiÅ�ng 0x9285:tóng 0x9286:mò 0x9287:lèi 0x9288:jÄ« 0x9289:yù,sì 0x928A:xù,huì 0x928B:rén,rÄ›n 0x928C:zùn 0x928D:zhì 0x928E:qióng,qiÅ�ng 0x928F:shàn,shuò 0x9290:chì,lì 0x9291:xiÇŽn,xiÄ�n,xÇ� 0x9292:xíng,jiÄ�n 0x9293:quán 0x9294:pÄ« 0x9295:tiÄ›,yí 0x9296:zhÅ« 0x9297:xiàng,hóu 0x9298:míng 0x9299:kuÇŽ 0x929A:yáo,diào,tiáo,qiÄ�o,yào 0x929B:xiÄ�n,tiÇŽn,guÄ� 0x929C:xián 0x929D:xiÅ« 0x929E:jÅ«n 0x929F:chÄ� 0x92A0:lÇŽo 0x92A1:jí 0x92A2:pÇ� 0x92A3:rú 0x92A4:mÇ� 0x92A5:yÄ« 0x92A6:yÄ«n 0x92A7:guÄ�ng 0x92A8:ÇŽn 0x92A9:diÅ« 0x92AA:yÇ’u 0x92AB:sè 0x92AC:kào 0x92AD:qián 0x92AE:luán 0x92AF:sÄ« 0x92B0:Ä�i 0x92B1:diào 0x92B2:hàn 0x92B3:ruì 0x92B4:shì,zhì 0x92B5:kÄ“ng 0x92B6:qiú 0x92B7:xiÄ�o 0x92B8:zhé,niè 0x92B9:xiù,yòu 0x92BA:zàng 0x92BB:tí,tÄ« 0x92BC:cuò 0x92BD:guÄ� 0x92BE:hòng,gÇ’ng 0x92BF:zhÅ�ng,yÅ�ng 0x92C0:tÅ�u,dòu,tù 0x92C1:lÇš,lÇœ 0x92C2:méi,méng 0x92C3:láng 0x92C4:wàn 0x92C5:xÄ«n,zÇ� 0x92C6:yún,jÅ«n 0x92C7:bèi 0x92C8:wù 0x92C9:sù 0x92CA:yù 0x92CB:chán,yán 0x92CC:dìng,tÇ�ng 0x92CD:bó 0x92CE:hàn 0x92CF:jiá 0x92D0:hóng 0x92D1:cuÄ�n,jiÄ�n,juÄ�n 0x92D2:fÄ“ng 0x92D3:chÄ�n 0x92D4:wÇŽn 0x92D5:zhì 0x92D6:sÄ«,tuó 0x92D7:xuÄ�n,juÄ�n,juàn 0x92D8:huá,wú,hú 0x92D9:yÇ”,yú,wú 0x92DA:tiáo 0x92DB:kuàng 0x92DC:zhuó,chuò 0x92DD:lüè 0x92DE:xíng,xìng,jÄ«ng 0x92DF:qÇ�n,qiÄ�n,qÄ«n,jìn 0x92E0:shèn 0x92E1:hán 0x92E2:lüè 0x92E3:yé 0x92E4:chú,jÇ” 0x92E5:zèng 0x92E6:jÅ«,jú 0x92E7:xiàn 0x92E8:tiÄ›,é 0x92E9:máng 0x92EA:pù,pÅ« 0x92EB:lí 0x92EC:pàn 0x92ED:ruì,duì,yuè 0x92EE:chéng 0x92EF:gào 0x92F0:lÇ� 0x92F1:tè 0x92F2:bÄ«ng 0x92F3:zhù 0x92F4:zhèn 0x92F5:tÅ« 0x92F6:liÇ” 0x92F7:zuì,niè 0x92F8:jù,jÅ« 0x92F9:chÇŽng 0x92FA:yuÇŽn,yuÄ�n,wÇŽn,wÄ�n 0x92FB:jiàn,jiÄ�n 0x92FC:gÄ�ng,gàng 0x92FD:diào 0x92FE:táo 0x92FF:cháng 0x9300:lún,fÄ“n 0x9301:guÇ’,kuÇŽ,kè 0x9302:líng 0x9303:pÄ« 0x9304:lù 0x9305:lí 0x9306:qiÄ�ng 0x9307:póu,fú,péi 0x9308:juÇŽn 0x9309:mín 0x930A:zuì,zÅ« 0x930B:péng,bèng 0x930C:àn 0x930D:pÄ«,bÄ“i,bÄ«,pí 0x930E:xiàn,gàn,qiàn 0x930F:yÄ�,yà 0x9310:zhuÄ« 0x9311:lèi,lì 0x9312:kÄ“,Ä� 0x9313:kÅ�ng 0x9314:tà 0x9315:kÅ«n,gÇ”n 0x9316:dú 0x9317:nèi,zhuì,wèi 0x9318:chuí 0x9319:zÄ« 0x931A:zhÄ“ng 0x931B:bÄ“n 0x931C:niè 0x931D:zòng 0x931E:chún,duì,duò 0x931F:tán,xiÄ�n,yÇŽn 0x9320:dìng 0x9321:qí,yÇ� 0x9322:qián,jiÇŽn 0x9323:zhuì,chuò 0x9324:jÄ« 0x9325:yù 0x9326:jÇ�n 0x9327:guÇŽn 0x9328:máo 0x9329:chÄ�ng 0x932A:tiÇŽn,tÇ”n 0x932B:xÄ«,tì 0x932C:liàn 0x932D:táo,diÄ�o 0x932E:gù 0x932F:cuò,cù,xÄ« 0x9330:shù 0x9331:zhÄ“n 0x9332:lù,lÇœ 0x9333:mÄ›ng 0x9334:lù 0x9335:huÄ� 0x9336:biÇŽo 0x9337:gá 0x9338:lái 0x9339:kÄ›n 0x933A:fÄ�ng 0x933B:wu 0x933C:nài 0x933D:wàn,jiÇŽn 0x933E:zàn 0x933F:hÇ” 0x9340:dé 0x9341:xiÄ�n 0x9342:piÄ�n 0x9343:huÅ� 0x9344:liàng 0x9345:fÇŽ 0x9346:mén 0x9347:kÇŽi,jiÄ“,jiÄ› 0x9348:yÄ«ng 0x9349:dÄ«,chí,dí,shì 0x934A:liàn,jiàn 0x934B:guÅ�,guÇ’ 0x934C:xiÇŽn 0x934D:dù 0x934E:tú 0x934F:wéi 0x9350:zÅ�ng 0x9351:fù 0x9352:róu 0x9353:jí 0x9354:è 0x9355:jÅ«n 0x9356:chÄ›n,zhÄ“n 0x9357:tí 0x9358:zhá 0x9359:hù 0x935A:yáng 0x935B:duàn 0x935C:xiá 0x935D:yú 0x935E:kÄ“ng 0x935F:shÄ“ng 0x9360:huáng 0x9361:wÄ›i 0x9362:fù 0x9363:zhÄ�o 0x9364:chÄ� 0x9365:qiè 0x9366:shÄ«,shé 0x9367:hÅ�ng 0x9368:kuí 0x9369:tiÇŽn,nuò 0x936A:móu 0x936B:qiÄ�o 0x936C:qiÄ�o 0x936D:hóu 0x936E:tÅ�u 0x936F:cÅ�ng 0x9370:huán 0x9371:yè,xié 0x9372:mín 0x9373:jiàn 0x9374:duÄ�n 0x9375:jiàn 0x9376:sÅ�ng,sÄ« 0x9377:kuí 0x9378:hú 0x9379:xuÄ�n 0x937A:duÇ’,dÇ”,zhÄ› 0x937B:jié 0x937C:zhÄ“n,qián 0x937D:biÄ�n 0x937E:zhÅ�ng 0x937F:zÄ« 0x9380:xiÅ« 0x9381:yé 0x9382:mÄ›i 0x9383:pài 0x9384:Ä�i 0x9385:jiè 0x9386:qian 0x9387:méi 0x9388:suÇ’,chÄ� 0x9389:dá,tà 0x938A:bàng,pÄ�ng 0x938B:xiá 0x938C:lián 0x938D:suÇ’,sè 0x938E:kài 0x938F:liú 0x9390:yáo,zú 0x9391:yè,tà,gé 0x9392:nòu,hÄ�o 0x9393:wÄ“ng 0x9394:róng 0x9395:táng 0x9396:suÇ’ 0x9397:qiÄ�ng,chÄ“ng,qiàng 0x9398:lì,gé 0x9399:shuò 0x939A:chuí,duÄ«,zhuì 0x939B:bó 0x939C:pán 0x939D:dÄ�,sà 0x939E:bÄ«,pÄ« 0x939F:sÇŽng 0x93A0:gÄ�ng 0x93A1:zÄ« 0x93A2:wÅ« 0x93A3:yíng,yÄ«ng,jiÇ’ng 0x93A4:huàng 0x93A5:tiáo 0x93A6:liú,liù 0x93A7:kÇŽi 0x93A8:sÇ”n 0x93A9:shÄ�,shì,sè 0x93AA:sÅ�u 0x93AB:wàn 0x93AC:hào,gÇŽo 0x93AD:zhèn 0x93AE:zhèn,zhÄ“n,tián 0x93AF:láng,luÇ’ 0x93B0:yì 0x93B1:yuán 0x93B2:tÇŽng 0x93B3:niè 0x93B4:xí 0x93B5:jiÄ� 0x93B6:gÄ“ 0x93B7:mÇŽ 0x93B8:juÄ�n 0x93B9:sòng 0x93BA:zÇ” 0x93BB:suÇ’ 0x93BC:xià 0x93BD:fÄ“ng 0x93BE:wÄ“n 0x93BF:ná 0x93C0:lÇ” 0x93C1:suÇ’ 0x93C2:Å�u,kÅ�u 0x93C3:zú,chuò 0x93C4:tuán 0x93C5:xiÅ«,xiù 0x93C6:guàn 0x93C7:xuàn,xuán 0x93C8:liàn,lián 0x93C9:shòu,sÅ�u 0x93CA:ào 0x93CB:mÇŽn 0x93CC:mò 0x93CD:luó 0x93CE:bì 0x93CF:wèi 0x93D0:liú,liù,liáo 0x93D1:dí,dÄ« 0x93D2:sÇŽn,qiÄ�o,càn 0x93D3:zÇ’ng,cÅ�ng 0x93D4:yí 0x93D5:lù,áo 0x93D6:áo,biÄ�o 0x93D7:kÄ“ng 0x93D8:qiÄ�ng 0x93D9:cuÄ« 0x93DA:qÄ« 0x93DB:cháng 0x93DC:tÄ�ng,táng 0x93DD:màn 0x93DE:yÅ�ng 0x93DF:chÇŽn 0x93E0:fÄ“ng 0x93E1:jìng 0x93E2:biÄ�o 0x93E3:shù 0x93E4:lòu,lǘ 0x93E5:xiù 0x93E6:cÅ�ng 0x93E7:lóng 0x93E8:zàn 0x93E9:jiàn,zàn 0x93EA:cáo 0x93EB:lí 0x93EC:xià 0x93ED:xÄ« 0x93EE:kÄ�ng 0x93EF:shuÇŽng 0x93F0:bèng 0x93F1:zhang 0x93F2:qian 0x93F3:chÄ“ng 0x93F4:lù 0x93F5:huá 0x93F6:jí 0x93F7:pú 0x93F8:huì,suì,ruì 0x93F9:qiÇŽng,qiÄ�ng 0x93FA:pÅ� 0x93FB:lín 0x93FC:sè 0x93FD:xiù 0x93FE:sÇŽn,xiàn,sà 0x93FF:chÄ“ng 0x9400:kuì 0x9401:sÄ« 0x9402:liú 0x9403:náo,nào 0x9404:huáng 0x9405:piÄ› 0x9406:suì 0x9407:fán 0x9408:qiáo 0x9409:quÄ�n 0x940A:yáng 0x940B:tÄ�ng,tàng 0x940C:xiàng 0x940D:jué,yù 0x940E:jiÄ�o 0x940F:zÅ«n 0x9410:liáo 0x9411:qiè 0x9412:láo 0x9413:duì,duÄ«,dÅ«n 0x9414:xín 0x9415:zÄ�n 0x9416:jÄ«,qí 0x9417:jiÇŽn 0x9418:zhÅ�ng 0x9419:dèng,dÄ“ng 0x941A:yÄ� 0x941B:yÇ�ng 0x941C:duÄ«,dÅ«n 0x941D:jué 0x941E:nòu 0x941F:zÄ�n,tì 0x9420:pÇ” 0x9421:tiÄ› 0x9422:fán 0x9423:chÄ“ng 0x9424:dÇ�ng 0x9425:shàn 0x9426:kÄ�i 0x9427:jiÄ�n,jiÇŽn 0x9428:fèi 0x9429:suì 0x942A:lÇ” 0x942B:juÄ�n 0x942C:huì 0x942D:yù 0x942E:lián 0x942F:zhuó 0x9430:qiÄ�o,sào,cáo 0x9431:jiàn,qiÄ�n 0x9432:zhuó,shÇ” 0x9433:léi 0x9434:bì,bèi 0x9435:tiÄ›,dié 0x9436:huán,xuàn 0x9437:yè 0x9438:duó 0x9439:guÇ’,guÅ� 0x943A:dÄ�ng,chÄ“ng,tÄ�ng 0x943B:jù,qú 0x943C:fén,bÄ“n 0x943D:dá 0x943E:bèi 0x943F:yì 0x9440:ài 0x9441:zÅ�ng 0x9442:xùn 0x9443:diào 0x9444:zhù 0x9445:héng 0x9446:zhuì 0x9447:jÄ« 0x9448:niè,nÇ� 0x9449:hé 0x944A:huò 0x944B:qÄ«ng 0x944C:bÄ«n 0x944D:yÄ«ng 0x944E:kuì 0x944F:níng,nÇ�ng 0x9450:xÅ«,rú,róu 0x9451:jiàn 0x9452:jiàn 0x9453:qiÇŽn 0x9454:chÇŽ 0x9455:zhì 0x9456:miè,mì 0x9457:lí 0x9458:léi,lÄ›i 0x9459:jÄ« 0x945A:zuàn 0x945B:kuàng,gÇ’ng 0x945C:shÇŽng 0x945D:péng 0x945E:là 0x945F:dú 0x9460:shuò,yuè,lì 0x9461:chuò 0x9462:lÇœ 0x9463:biÄ�o 0x9464:bào 0x9465:lÇ” 0x9466:xian 0x9467:kuÄ�n 0x9468:lóng 0x9469:è 0x946A:lú 0x946B:xÄ«n,xùn 0x946C:jiàn 0x946D:làn,lán 0x946E:bó 0x946F:jiÄ�n,qiÄ�n 0x9470:yào,yuè 0x9471:chán 0x9472:xiÄ�ng,ráng 0x9473:jiàn 0x9474:xÄ«,huÄ« 0x9475:guàn 0x9476:cáng 0x9477:niè 0x9478:lÄ›i 0x9479:cuÄ�n,cuàn 0x947A:qú 0x947B:pàn 0x947C:luó 0x947D:zuÄ�n,zuàn 0x947E:luán 0x947F:záo,zuò,zú,zào 0x9480:niè,yÇ� 0x9481:jué 0x9482:tÇŽng 0x9483:zhú 0x9484:lán 0x9485:jÄ«n 0x9486:gá 0x9487:yÇ� 0x9488:zhÄ“n 0x9489:dÄ«ng,dìng 0x948A:zhÄ�o 0x948B:pÅ� 0x948C:liÇŽo,liào 0x948D:tÇ” 0x948E:qiÄ�n 0x948F:chuàn 0x9490:shÄ�n,shàn 0x9491:sà 0x9492:fán 0x9493:diào 0x9494:mén 0x9495:nÇš 0x9496:yáng 0x9497:chÄ�i 0x9498:xíng 0x9499:gài 0x949A:bù 0x949B:tài 0x949C:jù 0x949D:dùn 0x949E:chÄ�o 0x949F:zhÅ�ng 0x94A0:nà 0x94A1:bèi 0x94A2:gÄ�ng,gàng 0x94A3:bÇŽn 0x94A4:qián 0x94A5:yào,yuè 0x94A6:qÄ«n 0x94A7:jÅ«n 0x94A8:wÅ« 0x94A9:gÅ�u 0x94AA:kàng 0x94AB:fÄ�ng 0x94AC:huÇ’ 0x94AD:tÇ’u,dÇ’u 0x94AE:niÇ” 0x94AF:bÇŽ,pá 0x94B0:yù 0x94B1:qián 0x94B2:zhÄ“ng 0x94B3:qián 0x94B4:gÇ” 0x94B5:bÅ� 0x94B6:kÄ“ 0x94B7:pÇ’ 0x94B8:bÅ« 0x94B9:bó 0x94BA:yuè 0x94BB:zuÄ�n,zuàn 0x94BC:mù 0x94BD:tÇŽn 0x94BE:jiÇŽ 0x94BF:diàn,tián 0x94C0:yóu 0x94C1:tiÄ› 0x94C2:bó 0x94C3:líng 0x94C4:shuò 0x94C5:qiÄ�n,yán 0x94C6:mÇŽo 0x94C7:bào 0x94C8:shì 0x94C9:xuàn 0x94CA:tÄ�,tuó 0x94CB:bì 0x94CC:ní 0x94CD:pÄ«,pí 0x94CE:duó 0x94CF:xíng 0x94D0:kào 0x94D1:lÇŽo 0x94D2:Ä›r 0x94D3:máng 0x94D4:yÄ� 0x94D5:yÇ’u 0x94D6:chéng 0x94D7:jiá 0x94D8:yé 0x94D9:náo 0x94DA:zhì 0x94DB:dÄ�ng,chÄ“ng 0x94DC:tóng 0x94DD:lÇš 0x94DE:diào 0x94DF:yÄ«n 0x94E0:kÇŽi 0x94E1:zhá 0x94E2:zhÅ« 0x94E3:xÇ�,xiÇŽn 0x94E4:dìng,tÇ�ng 0x94E5:diÅ« 0x94E6:xiÄ�n 0x94E7:huá 0x94E8:quán 0x94E9:shÄ� 0x94EA:hÄ� 0x94EB:diào,yáo 0x94EC:gè 0x94ED:míng 0x94EE:zhÄ“ng,zhèng 0x94EF:sè 0x94F0:jiÇŽo 0x94F1:yÄ« 0x94F2:chÇŽn 0x94F3:chòng 0x94F4:tÄ�ng 0x94F5:ÇŽn 0x94F6:yín 0x94F7:rú 0x94F8:zhù 0x94F9:láo 0x94FA:pù,pÅ« 0x94FB:wú,yÇ” 0x94FC:lái 0x94FD:tè 0x94FE:liàn 0x94FF:kÄ“ng 0x9500:xiÄ�o 0x9501:suÇ’ 0x9502:lÇ� 0x9503:zèng 0x9504:chú 0x9505:guÅ� 0x9506:gào 0x9507:é 0x9508:xiù 0x9509:cuò 0x950A:lüè 0x950B:fÄ“ng 0x950C:xÄ«n 0x950D:liÇ” 0x950E:kÄ�i 0x950F:jiÇŽn,jiàn 0x9510:ruì 0x9511:tÄ« 0x9512:láng 0x9513:qÇ�n 0x9514:jÅ«,jú 0x9515:Ä� 0x9516:qiÄ�ng 0x9517:zhÄ› 0x9518:nuò 0x9519:cuò 0x951A:máo 0x951B:bÄ“n 0x951C:qí 0x951D:dé 0x951E:kè 0x951F:kÅ«n 0x9520:chÄ�ng 0x9521:xÄ« 0x9522:gù 0x9523:luó 0x9524:chuí 0x9525:zhuÄ« 0x9526:jÇ�n 0x9527:zhì 0x9528:xiÄ�n 0x9529:juÇŽn 0x952A:huÅ� 0x952B:péi 0x952C:tán,xiÄ�n 0x952D:dìng 0x952E:jiàn 0x952F:jù,jÅ« 0x9530:mÄ›ng 0x9531:zÄ« 0x9532:qiè 0x9533:yÄ«ng 0x9534:kÇŽi 0x9535:qiÄ�ng 0x9536:sÄ« 0x9537:è 0x9538:chÄ� 0x9539:qiÄ�o 0x953A:zhÅ�ng 0x953B:duàn 0x953C:sÅ�u 0x953D:huáng 0x953E:huán 0x953F:Ä�i 0x9540:dù 0x9541:mÄ›i 0x9542:lòu 0x9543:zÄ« 0x9544:fèi 0x9545:méi 0x9546:mò 0x9547:zhèn 0x9548:bó 0x9549:gé 0x954A:niè 0x954B:tÇŽng 0x954C:juÄ�n 0x954D:niè 0x954E:ná 0x954F:liú,liù 0x9550:gÇŽo,hào 0x9551:bàng 0x9552:yì 0x9553:jiÄ� 0x9554:bÄ«n 0x9555:róng 0x9556:biÄ�o 0x9557:tÄ�ng,táng 0x9558:màn 0x9559:luó 0x955A:bèng 0x955B:yÅ�ng 0x955C:jìng 0x955D:dÄ«,dí 0x955E:zú 0x955F:xuàn 0x9560:liú 0x9561:chán,tán,xín 0x9562:jué 0x9563:liào 0x9564:pú 0x9565:lÇ” 0x9566:duì,dÅ«n 0x9567:lán 0x9568:pÇ” 0x9569:cuÄ�n 0x956A:qiÄ�ng,qiÇŽng 0x956B:dèng 0x956C:huò 0x956D:léi 0x956E:huán 0x956F:zhuó 0x9570:lián 0x9571:yì 0x9572:chÇŽ 0x9573:biÄ�o 0x9574:là 0x9575:chán 0x9576:xiÄ�ng 0x9577:zhÇŽng,cháng,zhàng 0x9578:cháng 0x9579:jiÇ” 0x957A:ÇŽo 0x957B:dié 0x957C:qÅ« 0x957D:liÇŽo,liáo 0x957E:mí 0x957F:zhÇŽng,cháng 0x9580:mén 0x9581:mà 0x9582:shuÄ�n 0x9583:shÇŽn 0x9584:huò,shÇŽn 0x9585:mén 0x9586:yán 0x9587:bì 0x9588:hàn,bì 0x9589:bì 0x958A:shÄ�n 0x958B:kÄ�i,qiÄ�n 0x958C:kàng 0x958D:bÄ“ng 0x958E:hóng 0x958F:rùn 0x9590:sàn 0x9591:xián 0x9592:xián,jiàn,jiÄ�n,jiÇŽn 0x9593:jiÄ�n,jiàn,jiÇŽn 0x9594:mÇ�n,mín 0x9595:xiÄ�,xiÇŽ 0x9596:shui 0x9597:dòu 0x9598:zhá,yÄ�,gÄ“ 0x9599:nào 0x959A:zhÄ�n 0x959B:pÄ“ng,pèng 0x959C:xiÇŽ,Ä› 0x959D:líng 0x959E:biàn,guÄ�n 0x959F:bì 0x95A0:rùn 0x95A1:ài,hé,hài,gÄ�i,kÇŽi 0x95A2:guÄ�n 0x95A3:gé 0x95A4:gé,gÄ“,hé 0x95A5:fá 0x95A6:chù 0x95A7:hòng,xiàng 0x95A8:guÄ« 0x95A9:mÇ�n 0x95AA:sÄ“ 0x95AB:kÇ”n 0x95AC:làng,lÇŽng,liÇŽng 0x95AD:lǘ 0x95AE:tíng,tÇ�ng 0x95AF:shà 0x95B0:jú 0x95B1:yuè 0x95B2:yuè 0x95B3:chÇŽn 0x95B4:qù 0x95B5:lìn 0x95B6:chÄ�ng,tÄ�ng 0x95B7:shài,shÄ� 0x95B8:kÇ”n 0x95B9:yÄ�n 0x95BA:wén 0x95BB:yán,yÇŽn,yàn 0x95BC:è,yù,yÄ�n 0x95BD:hÅ«n 0x95BE:yù 0x95BF:wén 0x95C0:hòng 0x95C1:bÄ�o 0x95C2:hòng,xiàng,juÇŽn 0x95C3:qù 0x95C4:yÇŽo 0x95C5:wén 0x95C6:bÇŽn,pÇŽn 0x95C7:àn,ÇŽn,Ä�n,yÄ«n,yÇ�n 0x95C8:wéi 0x95C9:yÄ«n 0x95CA:kuò 0x95CB:què,jué,kuí 0x95CC:lán,làn 0x95CD:dÅ«,shé 0x95CE:quán 0x95CF:fÄ“ng 0x95D0:tián 0x95D1:niè 0x95D2:tà 0x95D3:kÇŽi 0x95D4:hé 0x95D5:què,quÄ“,jué 0x95D6:chuÇŽng,chèn 0x95D7:guÄ�n 0x95D8:dòu 0x95D9:qÇ� 0x95DA:kuÄ« 0x95DB:táng,tÄ�ng,chÄ�ng 0x95DC:guÄ�n,wÄ�n,wÇŽn 0x95DD:piáo 0x95DE:kàn,hÇŽn,xiàn 0x95DF:xì,sè,tà 0x95E0:huì 0x95E1:chÇŽn 0x95E2:pì,pÄ« 0x95E3:dàng,tÄ�ng 0x95E4:huán 0x95E5:tà 0x95E6:wén 0x95E7:tÄ� 0x95E8:mén 0x95E9:shuÄ�n 0x95EA:shÇŽn 0x95EB:yán 0x95EC:hàn 0x95ED:bì 0x95EE:wèn 0x95EF:chuÇŽng 0x95F0:rùn 0x95F1:wéi 0x95F2:xián 0x95F3:hóng 0x95F4:jiÄ�n,jiàn 0x95F5:mÇ�n 0x95F6:kÄ�ng,kàng 0x95F7:mèn,mÄ“n 0x95F8:zhá 0x95F9:nào 0x95FA:guÄ« 0x95FB:wén 0x95FC:tà 0x95FD:mÇ�n 0x95FE:lǘ 0x95FF:kÇŽi 0x9600:fá 0x9601:gé 0x9602:hé 0x9603:kÇ”n 0x9604:jiÅ« 0x9605:yuè 0x9606:láng,làng 0x9607:dÅ«,shé 0x9608:yù 0x9609:yÄ�n 0x960A:chÄ�ng 0x960B:xì 0x960C:wén 0x960D:hÅ«n 0x960E:yán 0x960F:è,yÄ�n 0x9610:chÇŽn 0x9611:lán 0x9612:qù 0x9613:huì 0x9614:kuò 0x9615:què 0x9616:hé 0x9617:tián 0x9618:dá,tà 0x9619:quÄ“,què 0x961A:hÇŽn,kàn 0x961B:huán 0x961C:fù 0x961D:fù 0x961E:lè 0x961F:duì 0x9620:xìn 0x9621:qiÄ�n 0x9622:wù,wéi 0x9623:gài,yì 0x9624:zhì,yí,tuó 0x9625:yÄ«n 0x9626:yáng 0x9627:dÇ’u 0x9628:è,ài 0x9629:shÄ“ng 0x962A:bÇŽn 0x962B:péi 0x962C:kÄ“ng,kàng,gÄ�ng 0x962D:yÇ”n,yÇŽn 0x962E:ruÇŽn,yuán 0x962F:zhÇ� 0x9630:pí 0x9631:jÇ�ng 0x9632:fáng 0x9633:yáng 0x9634:yÄ«n 0x9635:zhèn 0x9636:jiÄ“ 0x9637:chÄ“ng 0x9638:è,ài 0x9639:qÅ« 0x963A:dÇ� 0x963B:zÇ”,zhù 0x963C:zuò 0x963D:diàn,yán 0x963E:lÇ�ng,líng 0x963F:Ä�,Ä“,Ä›,ÇŽ,à,a 0x9640:tuó,duò 0x9641:tuó,zhì,yÇ� 0x9642:bÄ“i,pí,bì,pÅ� 0x9643:bÇ�ng 0x9644:fù,bù,fÅ« 0x9645:jì 0x9646:lù,liù 0x9647:lÇ’ng 0x9648:chén 0x9649:xíng 0x964A:duò 0x964B:lòu 0x964C:mò 0x964D:jiàng,xiáng,xiàng 0x964E:shÅ« 0x964F:duò,suí 0x9650:xiàn,wÄ›n 0x9651:ér 0x9652:guÇ� 0x9653:yÅ« 0x9654:gÄ�i 0x9655:shÇŽn 0x9656:jùn 0x9657:qiào 0x9658:xíng,jìng 0x9659:chún 0x965A:fù,wÇ” 0x965B:bì 0x965C:xiá 0x965D:shÇŽn 0x965E:shÄ“ng 0x965F:zhì,dé 0x9660:pÅ«,bÅ«,bù 0x9661:dÇ’u 0x9662:yuàn 0x9663:zhèn 0x9664:chú,zhù,shÅ« 0x9665:xiàn 0x9666:dÇŽo 0x9667:niè 0x9668:yÇ”n 0x9669:xiÇŽn 0x966A:péi 0x966B:fèi,péi 0x966C:zÅ�u,zhé 0x966D:yì,yÇ� 0x966E:duì 0x966F:lún,lùn 0x9670:yÄ«n,yìn,Ä�n 0x9671:jÅ« 0x9672:chuí 0x9673:chén,zhèn 0x9674:pí,bì 0x9675:líng 0x9676:táo,yáo,dào 0x9677:xiàn 0x9678:lù,liù 0x9679:shÄ“ng 0x967A:xiÇŽn 0x967B:yÄ«n 0x967C:zhÇ”,dÇ” 0x967D:yáng 0x967E:réng,ér 0x967F:xiá 0x9680:chóng 0x9681:yàn,yÇŽn 0x9682:yÄ«n 0x9683:shù,yú,yáo 0x9684:dÄ«,tí 0x9685:yú 0x9686:lóng,lÅ�ng 0x9687:wÄ“i 0x9688:wÄ“i 0x9689:niè 0x968A:duì,zhuì,suì 0x968B:suí,duò,tuÇ’,tuÅ� 0x968C:ÇŽn 0x968D:huáng 0x968E:jiÄ“ 0x968F:suí 0x9690:yÇ�n 0x9691:gài,gÄ�i,ái,qí 0x9692:yÇŽn 0x9693:huÄ«,duò 0x9694:gé,rÇ’ng,jÄ« 0x9695:yÇ”n,yuán 0x9696:wù 0x9697:kuí,wÄ›i,guÄ« 0x9698:ài,è 0x9699:xì 0x969A:táng 0x969B:jì 0x969C:zhàng,zhÄ�ng 0x969D:dÇŽo 0x969E:áo 0x969F:xì 0x96A0:yÇ�n 0x96A1:sà 0x96A2:rÇŽo 0x96A3:lín 0x96A4:tuí 0x96A5:dèng 0x96A6:jiÇŽo,pí 0x96A7:suì,zhuì 0x96A8:suí 0x96A9:ào,yù 0x96AA:xiÇŽn,jiÇŽn,yán 0x96AB:fén 0x96AC:nÇ� 0x96AD:ér 0x96AE:jÄ« 0x96AF:dÇŽo 0x96B0:xí,xiè 0x96B1:yÇ�n,yìn 0x96B2:zhì 0x96B3:huÄ« 0x96B4:lÇ’ng 0x96B5:xÄ« 0x96B6:lì,dài,yì,dì 0x96B7:lì 0x96B8:lì 0x96B9:zhuÄ«,cuÄ«,wéi 0x96BA:hú,què,hè 0x96BB:zhÄ«,huò 0x96BC:sÇ”n 0x96BD:juàn,jùn 0x96BE:nán,nàn 0x96BF:yì 0x96C0:què,qiÄ�o,qiÇŽo 0x96C1:yàn 0x96C2:qín 0x96C3:qiÄ�n,jiè 0x96C4:xióng 0x96C5:yÇŽ,yÄ�,yá 0x96C6:jí 0x96C7:gù,hù 0x96C8:huán 0x96C9:zhì,kÇŽi,yÇ�,sì 0x96CA:gòu 0x96CB:juàn,jùn,zuì 0x96CC:cí 0x96CD:yÅ�ng 0x96CE:jÅ« 0x96CF:chú 0x96D0:hÅ« 0x96D1:zá 0x96D2:luò 0x96D3:yú 0x96D4:chóu 0x96D5:diÄ�o 0x96D6:suÄ« 0x96D7:hàn 0x96D8:wò 0x96D9:shuÄ�ng 0x96DA:guàn,huán 0x96DB:chú,jú,jù 0x96DC:zá 0x96DD:yÅ�ng 0x96DE:jÄ« 0x96DF:xÄ« 0x96E0:chóu 0x96E1:liù 0x96E2:lí,lì,lÇ�,chÄ«,gÇ” 0x96E3:nán,nàn,nuó 0x96E4:xué 0x96E5:zá 0x96E6:jí 0x96E7:jí 0x96E8:yÇ”,yù 0x96E9:yú,yù,xÅ« 0x96EA:xuÄ› 0x96EB:nÇŽ 0x96EC:fÇ’u 0x96ED:sè,xí 0x96EE:mù 0x96EF:wén 0x96F0:fÄ“n 0x96F1:pÄ�ng,páng,fÄ�ng 0x96F2:yún 0x96F3:lì 0x96F4:chì 0x96F5:yÄ�ng 0x96F6:líng,lián 0x96F7:léi,lèi 0x96F8:án 0x96F9:báo 0x96FA:wù,méng 0x96FB:diàn 0x96FC:dàng 0x96FD:hù,hÅ« 0x96FE:wù 0x96FF:diào 0x9700:xÅ«,nuò,rú,ruÇŽn 0x9701:jì 0x9702:mù 0x9703:chén 0x9704:xiÄ�o,xiào 0x9705:zhà,zhá,shà,sà,yì 0x9706:tíng 0x9707:zhèn,shÄ“n 0x9708:pèi 0x9709:méi 0x970A:líng 0x970B:qÄ« 0x970C:zhÅ�u 0x970D:huò,hè,suÇ’ 0x970E:shà 0x970F:fÄ“i 0x9710:hóng 0x9711:zhÄ�n 0x9712:yÄ«n 0x9713:ní 0x9714:zhù 0x9715:tún 0x9716:lín 0x9717:líng 0x9718:dòng 0x9719:yÄ«ng,yÄ�ng 0x971A:wù 0x971B:líng 0x971C:shuÄ�ng 0x971D:líng 0x971E:xiá 0x971F:hóng 0x9720:yÄ«n 0x9721:mài 0x9722:mài 0x9723:yÇ”n 0x9724:liù 0x9725:mèng 0x9726:bÄ«n 0x9727:wù,méng 0x9728:wèi 0x9729:kuò 0x972A:yín 0x972B:xí 0x972C:yì 0x972D:ÇŽi 0x972E:dàn 0x972F:tèng 0x9730:sÇŽn,xiàn 0x9731:yù 0x9732:lù,lòu 0x9733:lóng 0x9734:dài 0x9735:jí 0x9736:pÄ�ng 0x9737:yáng 0x9738:bà,pò 0x9739:pÄ« 0x973A:wéi 0x973B:fÄ“ng 0x973C:xì 0x973D:jì 0x973E:mái,lí 0x973F:méng,mào,wù 0x9740:méng 0x9741:léi 0x9742:lì 0x9743:huò,suÇ�,suÇ’ 0x9744:ÇŽi 0x9745:fèi 0x9746:dài 0x9747:lóng,líng 0x9748:líng 0x9749:ài,yÇ� 0x974A:fÄ“ng 0x974B:lì 0x974C:bÇŽo 0x974D:hè 0x974E:hè 0x974F:hè 0x9750:bìng 0x9751:qÄ«ng 0x9752:qÄ«ng,jÄ«ng 0x9753:jìng,liàng 0x9754:tiÄ�n 0x9755:zhÄ“n 0x9756:jìng 0x9757:chÄ“ng 0x9758:qìng,qÄ«ng,jìng 0x9759:jìng 0x975A:jìng,liáng 0x975B:diàn 0x975C:jìng 0x975D:tiÄ�n 0x975E:fÄ“i,fÄ›i 0x975F:fÄ“i 0x9760:kào 0x9761:mí,mÇ�,má 0x9762:miàn 0x9763:miàn 0x9764:bào 0x9765:yè 0x9766:tiÇŽn,miÇŽn 0x9767:huì 0x9768:yè,yÇŽn 0x9769:gé,jí 0x976A:dÄ«ng 0x976B:chá 0x976C:qián,jiÄ�n,kÄ�n,hàn 0x976D:rèn 0x976E:dí 0x976F:dù 0x9770:wù 0x9771:rèn 0x9772:qín 0x9773:jìn 0x9774:xuÄ“ 0x9775:niÇ” 0x9776:bÇŽ,bà 0x9777:yÇ�n 0x9778:sÇŽ,tÄ� 0x9779:nà 0x977A:mò,wà 0x977B:zÇ” 0x977C:dá 0x977D:bàn 0x977E:yì 0x977F:yào 0x9780:táo 0x9781:bèi,bài,bì 0x9782:jiÄ“ 0x9783:hóng 0x9784:páo 0x9785:yÄ�ng,yÇŽng,yàng 0x9786:bÇ�ng 0x9787:yÄ«n 0x9788:gé,sÇŽ,tà 0x9789:táo 0x978A:jié,jí 0x978B:xié,wÄ� 0x978C:Ä�n 0x978D:Ä�n 0x978E:hén 0x978F:gÇ’ng 0x9790:qiÇŽ 0x9791:dá 0x9792:qiáo 0x9793:tÄ«ng 0x9794:mán,mèn 0x9795:yìng,biÄ�n 0x9796:suÄ« 0x9797:tiáo 0x9798:qiào,shÄ�o 0x9799:xuàn,juÄ�n 0x979A:kòng 0x979B:bÄ›ng 0x979C:tà 0x979D:shàng,zhÇŽng 0x979E:bÇ�ng,bì,pí,bÄ“i 0x979F:kuò 0x97A0:jÅ«,qÅ«,qiÅ�ng 0x97A1:la 0x97A2:xiè,zhá,dié 0x97A3:róu 0x97A4:bÄ�ng 0x97A5:Ä“ng 0x97A6:qiÅ« 0x97A7:qiÅ« 0x97A8:hé,shé,mò 0x97A9:qiào 0x97AA:mù,móu 0x97AB:jÅ«,qÅ« 0x97AC:jiÄ�n,jiàn 0x97AD:biÄ�n 0x97AE:dÄ« 0x97AF:jiÄ�n 0x97B0:wÄ“n 0x97B1:tÄ�o 0x97B2:gÅ�u 0x97B3:tà 0x97B4:bèi,fú,bù,bài 0x97B5:xié 0x97B6:pán 0x97B7:gé 0x97B8:bì,bÇ�ng 0x97B9:kuò 0x97BA:tÄ�ng 0x97BB:lóu 0x97BC:guì,huì 0x97BD:qiáo,qiÄ�o,juÄ“ 0x97BE:xuÄ“ 0x97BF:jÄ« 0x97C0:jiÄ�n 0x97C1:jiÄ�ng 0x97C2:chàn 0x97C3:dá,tà 0x97C4:hù 0x97C5:xiÇŽn 0x97C6:qiÄ�n 0x97C7:dú 0x97C8:wà 0x97C9:jiÄ�n 0x97CA:lán 0x97CB:wéi,huí 0x97CC:rèn 0x97CD:fú 0x97CE:mèi 0x97CF:quàn,juàn 0x97D0:gé 0x97D1:wÄ›i 0x97D2:qiào,shÄ�o 0x97D3:hán 0x97D4:chàng 0x97D5:kuò 0x97D6:rÇ’u 0x97D7:yùn 0x97D8:shè 0x97D9:wÄ›i 0x97DA:gé 0x97DB:bài,fú 0x97DC:tÄ�o,tào 0x97DD:gÅ�u 0x97DE:yùn,wÄ“n 0x97DF:gÄ�o 0x97E0:bì 0x97E1:wÄ›i,xuÄ“ 0x97E2:suì,huì 0x97E3:dú 0x97E4:wà 0x97E5:dú 0x97E6:wéi 0x97E7:rèn 0x97E8:fú 0x97E9:hán 0x97EA:wÄ›i 0x97EB:yùn 0x97EC:tÄ�o 0x97ED:jiÇ” 0x97EE:jiÇ” 0x97EF:xiÄ�n 0x97F0:xiè 0x97F1:xiÄ�n 0x97F2:jÄ« 0x97F3:yÄ«n 0x97F4:zá 0x97F5:yùn 0x97F6:sháo 0x97F7:lè 0x97F8:péng 0x97F9:huáng,yÄ«ng 0x97FA:yÄ«ng 0x97FB:yùn 0x97FC:péng 0x97FD:Ä�n 0x97FE:yÄ«n 0x97FF:xiÇŽng 0x9800:hù 0x9801:yè,xié 0x9802:dÇ�ng 0x9803:qÇ�ng,qÄ«ng,kuÇ� 0x9804:kuí 0x9805:xiàng 0x9806:shùn 0x9807:hÄ�n,àn 0x9808:xÅ« 0x9809:yí 0x980A:xÅ« 0x980B:Ä› 0x980C:sòng,róng 0x980D:kuÇ� 0x980E:qí,kÄ›n 0x980F:háng,gÄ�ng,hàng 0x9810:yù 0x9811:wán,kÅ«n 0x9812:bÄ�n,fén 0x9813:dùn,dú 0x9814:dí 0x9815:dÄ�n,diàn 0x9816:pàn 0x9817:pÅ�,pÇ’,pò,pí 0x9818:lÇ�ng 0x9819:chè 0x981A:jÇ�ng 0x981B:lèi 0x981C:hé,hán,qÄ«n,gé 0x981D:qiÄ�o 0x981E:è,àn 0x981F:é 0x9820:wÄ›i 0x9821:xié,jiá,jié 0x9822:kuò 0x9823:shÄ›n 0x9824:yí 0x9825:yí 0x9826:hái,kÄ“,ké 0x9827:duÇ�,duÄ« 0x9828:yÇ”,biàn 0x9829:pÄ«ng,pÇ�ng 0x982A:lèi 0x982B:fÇ”,tÄ�o,tiào 0x982C:jiá 0x982D:tóu,tou 0x982E:huì 0x982F:kuí 0x9830:jiá 0x9831:luÅ� 0x9832:tÇ�ng 0x9833:chÄ“ng 0x9834:yÇ�ng,jÇ�ng 0x9835:yÅ«n 0x9836:hú 0x9837:hàn 0x9838:jÇ�ng,gÄ›ng 0x9839:tuí 0x983A:tuí 0x983B:pín,bÄ«n 0x983C:lài 0x983D:tuí 0x983E:zÄ« 0x983F:zÄ« 0x9840:chuí 0x9841:dìng,dÇ�ng 0x9842:lài,lái 0x9843:tán,shÇŽn 0x9844:hàn 0x9845:qiÄ�n 0x9846:kÄ“,kÄ›,kuÇŽn 0x9847:cuì,zú 0x9848:xuÇŽn,jiÅ�ng,jiÇ’ng,xiàn 0x9849:qÄ«n 0x984A:yí 0x984B:sÄ�i 0x984C:tí,dì 0x984D:é 0x984E:è 0x984F:yán 0x9850:wèn,hún,hùn 0x9851:kÇŽn,yàn 0x9852:yóng,yú 0x9853:zhuÄ�n 0x9854:yán,yá 0x9855:xiÇŽn 0x9856:xìn 0x9857:yÇ� 0x9858:yuàn,yuÇŽn 0x9859:sÇŽng 0x985A:diÄ�n,tián,tiàn 0x985B:diÄ�n 0x985C:jiÇŽng 0x985D:kuÄ«,kuÇŽ 0x985E:lèi 0x985F:láo 0x9860:piÇŽo 0x9861:wài,zhuài 0x9862:mán 0x9863:cù 0x9864:yáo,qiào 0x9865:hào 0x9866:qiáo 0x9867:gù 0x9868:xùn 0x9869:yÇŽn,qìn,hàn,qiÇŽn 0x986A:huì 0x986B:chàn,zhàn,shÄ�n 0x986C:rú 0x986D:méng 0x986E:bÄ«n 0x986F:xiÇŽn,xiàn 0x9870:pín 0x9871:lú 0x9872:lÇŽn,lÇ�n 0x9873:niè 0x9874:quán 0x9875:yè 0x9876:dÇ�ng 0x9877:qÇ�ng 0x9878:hÄ�n 0x9879:xiàng 0x987A:shùn 0x987B:xÅ« 0x987C:xÅ« 0x987D:wán 0x987E:gù 0x987F:dùn,dú 0x9880:qí 0x9881:bÄ�n 0x9882:sòng 0x9883:háng 0x9884:yù 0x9885:lú 0x9886:lÇ�ng 0x9887:pÇ’,pÅ� 0x9888:jÇ�ng,gÄ›ng 0x9889:jié,xié 0x988A:jiá 0x988B:tÇ�ng 0x988C:hé,gé 0x988D:yÇ�ng 0x988E:jiÇ’ng 0x988F:kÄ“,ké 0x9890:yí 0x9891:pín 0x9892:huì 0x9893:tuí 0x9894:hàn 0x9895:yÇ�ng 0x9896:yÇ�ng 0x9897:kÄ“ 0x9898:tí 0x9899:yóng 0x989A:è 0x989B:zhuÄ�n 0x989C:yán 0x989D:é 0x989E:niè 0x989F:mÄ�n 0x98A0:diÄ�n 0x98A1:sÇŽng 0x98A2:hào 0x98A3:lèi 0x98A4:chàn,zhàn 0x98A5:rú 0x98A6:pín 0x98A7:quán 0x98A8:fÄ“ng,fèng,fÄ›ng 0x98A9:biÄ�o,diÅ« 0x98AA:guÄ� 0x98AB:fú 0x98AC:xiÄ� 0x98AD:zhÇŽn 0x98AE:biÄ�o,páo 0x98AF:sà,lì 0x98B0:bá,fú 0x98B1:tái 0x98B2:liè 0x98B3:guÄ�,jÇ� 0x98B4:xuàn 0x98B5:shÄ�o,xiÄ�o 0x98B6:jù 0x98B7:biÄ�o 0x98B8:sÄ« 0x98B9:wÄ›i 0x98BA:yáng 0x98BB:yáo,yào 0x98BC:sÅ�u 0x98BD:kÇŽi 0x98BE:sÅ�u,sÄ�o 0x98BF:fÄ�n 0x98C0:liú 0x98C1:xí 0x98C2:liù,liáo 0x98C3:piÄ�o,piào 0x98C4:piÄ�o 0x98C5:liú 0x98C6:biÄ�o 0x98C7:biÄ�o 0x98C8:biÄ�o 0x98C9:liáo 0x98CA:biÄ�o 0x98CB:sè 0x98CC:fÄ“ng 0x98CD:xiÅ« 0x98CE:fÄ“ng 0x98CF:yáng 0x98D0:zhÇŽn 0x98D1:biÄ�o 0x98D2:sà 0x98D3:jù 0x98D4:sÄ« 0x98D5:sÅ�u 0x98D6:yáo 0x98D7:liú 0x98D8:piÄ�o 0x98D9:biÄ�o 0x98DA:biÄ�o 0x98DB:fÄ“i 0x98DC:fÄ�n 0x98DD:fÄ“i 0x98DE:fÄ“i 0x98DF:shí,sì,yì 0x98E0:shí 0x98E1:cÄ�n 0x98E2:jÄ« 0x98E3:dìng 0x98E4:sì 0x98E5:tuÅ� 0x98E6:zhÄ�n,gÄ�n 0x98E7:sÅ«n 0x98E8:xiÇŽng 0x98E9:tún,zhùn 0x98EA:rèn 0x98EB:yù 0x98EC:juàn,yÇ’ng 0x98ED:chì,shì 0x98EE:yÇ�n 0x98EF:fàn 0x98F0:fàn 0x98F1:sÅ«n,cÄ�n 0x98F2:yÇ�n,yìn 0x98F3:tÇ’u,zhù 0x98F4:yí,sì 0x98F5:zuò,zé 0x98F6:bì 0x98F7:jiÄ› 0x98F8:tÄ�o 0x98F9:bÇŽo 0x98FA:cí 0x98FB:tiè 0x98FC:sì 0x98FD:bÇŽo 0x98FE:shì,chì 0x98FF:duò 0x9900:hài 0x9901:rèn 0x9902:tiÇŽn,tián 0x9903:jiÇŽo,jiào 0x9904:jiá,hé 0x9905:bÇ�ng 0x9906:yáo 0x9907:tóng 0x9908:cí 0x9909:xiÇŽng 0x990A:yÇŽng,yàng 0x990B:juàn 0x990C:Ä›r 0x990D:yàn 0x990E:le 0x990F:xÄ« 0x9910:cÄ�n,sÅ«n 0x9911:bÅ� 0x9912:nÄ›i 0x9913:è 0x9914:bù,bÅ« 0x9915:jùn 0x9916:dòu 0x9917:sù 0x9918:yú,yé 0x9919:shì,xÄ« 0x991A:yáo 0x991B:hún,kÅ«n 0x991C:guÇ’ 0x991D:shì 0x991E:jiàn 0x991F:zhuì 0x9920:bÇ�ng 0x9921:xiàn,kàn 0x9922:bù 0x9923:yè 0x9924:tán,dàn 0x9925:fÄ“i 0x9926:zhÄ�ng 0x9927:wèi,nÄ›i 0x9928:guÇŽn 0x9929:è 0x992A:nuÇŽn,nuàn 0x992B:yùn,hún 0x992C:hú 0x992D:huáng 0x992E:tiè 0x992F:huì 0x9930:jiÄ�n,zhÄ�n 0x9931:hóu 0x9932:ài,hé 0x9933:táng,xíng 0x9934:fÄ“n 0x9935:wèi 0x9936:gÇ” 0x9937:chÄ� 0x9938:sòng 0x9939:táng 0x993A:bó 0x993B:gÄ�o 0x993C:xì 0x993D:kuì 0x993E:liù,liú 0x993F:sÅ�u 0x9940:táo,tÄ�o,xiàn 0x9941:yè 0x9942:wÄ“n 0x9943:mó 0x9944:táng 0x9945:mán 0x9946:bì 0x9947:yù 0x9948:xiÅ« 0x9949:jÇ�n 0x994A:sÇŽn 0x994B:kuì,tuí 0x994C:zhuàn,xuÇŽn 0x994D:shàn 0x994E:chì 0x994F:dàn 0x9950:yì,yÄ“,èn 0x9951:jÄ«,qí 0x9952:ráo 0x9953:chÄ“ng 0x9954:yÅ�ng 0x9955:tÄ�o 0x9956:wèi 0x9957:xiÇŽng 0x9958:zhÄ�n 0x9959:fÄ“n 0x995A:hài 0x995B:méng 0x995C:yàn 0x995D:mó 0x995E:chán 0x995F:xiÇŽng 0x9960:luó 0x9961:zàn 0x9962:náng,nÇŽng 0x9963:shí 0x9964:dìng 0x9965:jÄ« 0x9966:tuÅ� 0x9967:táng,xíng 0x9968:tún 0x9969:xì 0x996A:rèn 0x996B:yù 0x996C:chì 0x996D:fàn 0x996E:yÇ�n,yìn 0x996F:jiàn 0x9970:shì 0x9971:bÇŽo 0x9972:sì 0x9973:duò 0x9974:yí 0x9975:Ä›r 0x9976:ráo 0x9977:xiÇŽng 0x9978:hé 0x9979:le 0x997A:jiÇŽo 0x997B:xÄ« 0x997C:bÇ�ng 0x997D:bÅ� 0x997E:dòu 0x997F:è 0x9980:yú 0x9981:nÄ›i 0x9982:jùn 0x9983:guÇ’ 0x9984:hún 0x9985:xiàn 0x9986:guÇŽn 0x9987:chÄ� 0x9988:kuì 0x9989:gÇ” 0x998A:sÅ�u 0x998B:chán 0x998C:yè 0x998D:mó 0x998E:bó 0x998F:liú,liù 0x9990:xiÅ« 0x9991:jÇ�n 0x9992:mán 0x9993:sÇŽn 0x9994:zhuàn 0x9995:náng,nÇŽng 0x9996:shÇ’u 0x9997:kuí,qiú 0x9998:guó,xù 0x9999:xiÄ�ng 0x999A:fén 0x999B:bó 0x999C:nÇ� 0x999D:bì 0x999E:bó,pò 0x999F:tú 0x99A0:hÄ�n 0x99A1:fÄ“i 0x99A2:jiÄ�n 0x99A3:Ä�n 0x99A4:ài 0x99A5:fù,bì 0x99A6:xiÄ�n 0x99A7:yÅ«n,wò 0x99A8:xÄ«n 0x99A9:fén 0x99AA:pÄ«n 0x99AB:xÄ«n 0x99AC:mÇŽ 0x99AD:yù 0x99AE:féng,píng 0x99AF:hàn,qián,hán 0x99B0:dí 0x99B1:tuó,duò,dài 0x99B2:zhé,tuÅ� 0x99B3:chí 0x99B4:xún 0x99B5:zhù 0x99B6:zhÄ«,shì 0x99B7:pèi 0x99B8:xìn,jìn 0x99B9:rì 0x99BA:sà 0x99BB:yÇ”n 0x99BC:wén 0x99BD:zhí 0x99BE:dàn,dÇŽn 0x99BF:lǘ 0x99C0:yóu 0x99C1:bó 0x99C2:bÇŽo 0x99C3:jué,kuài 0x99C4:tuó 0x99C5:yì 0x99C6:qÅ« 0x99C7:wén 0x99C8:qÅ« 0x99C9:jiÅ�ng 0x99CA:pÇ’ 0x99CB:zhÄ�o 0x99CC:yuÄ�n 0x99CD:péi,pÄ“ng 0x99CE:zhòu 0x99CF:jù 0x99D0:zhù 0x99D1:nú 0x99D2:jÅ«,jù 0x99D3:pÄ« 0x99D4:zÇŽng,zù,zÇ” 0x99D5:jià,jiÄ� 0x99D6:líng 0x99D7:zhÄ›n 0x99D8:tái,dài,zhài,tÄ�i 0x99D9:fù 0x99DA:yÇŽng 0x99DB:shÇ� 0x99DC:bì 0x99DD:tuó 0x99DE:tuó 0x99DF:sì 0x99E0:liú 0x99E1:mà 0x99E2:pián 0x99E3:táo 0x99E4:zhì 0x99E5:róng 0x99E6:téng 0x99E7:dòng 0x99E8:xÅ«n,xuàn 0x99E9:quÄ�n 0x99EA:shÄ“n 0x99EB:jiÅ�ng 0x99EC:Ä›r 0x99ED:hài 0x99EE:bó 0x99EF:zhÅ« 0x99F0:yÄ«n 0x99F1:luò,jià 0x99F2:zhÅ�u 0x99F3:dàn 0x99F4:hài 0x99F5:liú 0x99F6:jú 0x99F7:sÇ’ng 0x99F8:qÄ«n 0x99F9:máng 0x99FA:láng,liáng 0x99FB:hàn 0x99FC:tú 0x99FD:xuÄ�n 0x99FE:tuì 0x99FF:jùn 0x9A00:Ä›,é 0x9A01:chÄ›ng 0x9A02:xÄ«ng 0x9A03:ái,sì,tÇŽi 0x9A04:lù 0x9A05:zhuÄ« 0x9A06:zhÅ�u,dòng 0x9A07:shè 0x9A08:pián 0x9A09:kÅ«n 0x9A0A:táo 0x9A0B:lái 0x9A0C:zÅ�ng 0x9A0D:kè 0x9A0E:qí,jì 0x9A0F:qí 0x9A10:yàn 0x9A11:fÄ“i 0x9A12:sÄ�o 0x9A13:yàn 0x9A14:gé 0x9A15:yÇŽo 0x9A16:wù 0x9A17:piàn 0x9A18:cÅ�ng 0x9A19:piàn 0x9A1A:qián 0x9A1B:fÄ“i 0x9A1C:huáng 0x9A1D:qián 0x9A1E:huÅ� 0x9A1F:yú 0x9A20:tí 0x9A21:quán 0x9A22:xiá 0x9A23:zÅ�ng 0x9A24:kuí,jué 0x9A25:róu 0x9A26:sÄ« 0x9A27:guÄ� 0x9A28:tuó 0x9A29:guÄ«,tuí 0x9A2A:sÅ�u 0x9A2B:qiÄ�n,jiÇŽn 0x9A2C:chéng 0x9A2D:zhì 0x9A2E:liú 0x9A2F:péng,bÇŽng 0x9A30:téng 0x9A31:xí 0x9A32:cÇŽo 0x9A33:dú 0x9A34:yàn 0x9A35:yuán 0x9A36:zÅ�u,zhÅ«,zhòu,qÅ« 0x9A37:sÄ�o,sÇŽo,xiÄ�o 0x9A38:shàn 0x9A39:qí 0x9A3A:zhì,chì 0x9A3B:shuÄ�ng 0x9A3C:lù 0x9A3D:xí 0x9A3E:luó 0x9A3F:zhÄ�ng 0x9A40:mò,mà 0x9A41:ào,yào 0x9A42:cÄ�n 0x9A43:biÄ�o,piào 0x9A44:cÅ�ng 0x9A45:qÅ« 0x9A46:bì 0x9A47:zhì 0x9A48:yù 0x9A49:xÅ« 0x9A4A:huá 0x9A4B:bÅ� 0x9A4C:sù 0x9A4D:xiÄ�o 0x9A4E:lín 0x9A4F:zhàn 0x9A50:dÅ«n 0x9A51:liú 0x9A52:tuó 0x9A53:céng 0x9A54:diàn 0x9A55:jiÄ�o,xiÄ�o,jÅ«,qiáo 0x9A56:tiÄ› 0x9A57:yàn 0x9A58:luó 0x9A59:zhÄ�n,zhàn 0x9A5A:jÄ«ng 0x9A5B:yì 0x9A5C:yè 0x9A5D:tuÅ� 0x9A5E:pÄ«n 0x9A5F:zhòu 0x9A60:yàn 0x9A61:lóng,zÇŽng 0x9A62:lǘ 0x9A63:téng 0x9A64:xiÄ�ng 0x9A65:jì 0x9A66:shuÄ�ng 0x9A67:jú 0x9A68:xí 0x9A69:huÄ�n 0x9A6A:lí,chí 0x9A6B:biÄ�o,piÄ�o 0x9A6C:mÇŽ 0x9A6D:yù 0x9A6E:tuó,duò 0x9A6F:xún 0x9A70:chí 0x9A71:qÅ« 0x9A72:rì 0x9A73:bó 0x9A74:lǘ 0x9A75:zÇŽng 0x9A76:shÇ� 0x9A77:sì 0x9A78:fù 0x9A79:jÅ« 0x9A7A:zÅ�u 0x9A7B:zhù 0x9A7C:tuó 0x9A7D:nú 0x9A7E:jià 0x9A7F:yì 0x9A80:dài,tái 0x9A81:xiÄ�o 0x9A82:mà 0x9A83:yÄ«n 0x9A84:jiÄ�o 0x9A85:huá 0x9A86:luò 0x9A87:hài 0x9A88:pián 0x9A89:biÄ�o 0x9A8A:lí 0x9A8B:chÄ›ng 0x9A8C:yàn 0x9A8D:xÄ«ng 0x9A8E:qÄ«n 0x9A8F:jùn 0x9A90:qí 0x9A91:qí 0x9A92:kè 0x9A93:zhuÄ« 0x9A94:zÅ�ng 0x9A95:sù 0x9A96:cÄ�n 0x9A97:piàn 0x9A98:zhì 0x9A99:kuí 0x9A9A:sÄ�o 0x9A9B:wù 0x9A9C:ào 0x9A9D:liú 0x9A9E:qiÄ�n 0x9A9F:shàn 0x9AA0:biÄ�o,piào 0x9AA1:luó 0x9AA2:cÅ�ng 0x9AA3:chÇŽn 0x9AA4:zhòu 0x9AA5:jì 0x9AA6:shuÄ�ng 0x9AA7:xiÄ�ng 0x9AA8:gÇ”,gú,gÅ« 0x9AA9:wÄ›i 0x9AAA:wÄ›i 0x9AAB:wÄ›i,wán 0x9AAC:yú 0x9AAD:gàn 0x9AAE:yì 0x9AAF:Ä�ng,kÇŽng 0x9AB0:tóu,gÇ” 0x9AB1:jiè,jiá,xiè 0x9AB2:bào 0x9AB3:bèi 0x9AB4:cÄ«,zhài 0x9AB5:tÇ� 0x9AB6:dÇ� 0x9AB7:kÅ« 0x9AB8:hái,gÄ�i 0x9AB9:qiÄ�o,jiÄ�o,xiÄ�o 0x9ABA:hóu 0x9ABB:kuà 0x9ABC:gé 0x9ABD:tuÇ� 0x9ABE:gÄ›ng 0x9ABF:pián 0x9AC0:bì 0x9AC1:kÄ“,kuà 0x9AC2:qià,gé 0x9AC3:yú 0x9AC4:suÇ� 0x9AC5:lóu 0x9AC6:bó,pò 0x9AC7:xiÄ�o 0x9AC8:bÇŽng,páng,pÇŽng 0x9AC9:bó,jué 0x9ACA:cÄ«,cuÅ� 0x9ACB:kuÄ�n 0x9ACC:bìn 0x9ACD:mó 0x9ACE:liáo 0x9ACF:lóu 0x9AD0:xiÄ�o 0x9AD1:dú 0x9AD2:zÄ�ng,zÇŽng 0x9AD3:suÇ� 0x9AD4:tÇ�,tÄ« 0x9AD5:bìn 0x9AD6:kuÄ�n 0x9AD7:lú 0x9AD8:gÄ�o,gào 0x9AD9:gÄ�o 0x9ADA:qiào 0x9ADB:kÄ�o 0x9ADC:qiÇŽo 0x9ADD:láo 0x9ADE:sào 0x9ADF:biÄ�o,piào,shÄ�n 0x9AE0:kÅ«n 0x9AE1:kÅ«n 0x9AE2:dí 0x9AE3:fÇŽng 0x9AE4:xiÅ« 0x9AE5:rán 0x9AE6:máo 0x9AE7:dàn 0x9AE8:kÅ«n 0x9AE9:bìn 0x9AEA:fà,fÇŽ 0x9AEB:tiáo 0x9AEC:pÄ« 0x9AED:zÄ« 0x9AEE:fà,fÇŽ 0x9AEF:rán 0x9AF0:tì 0x9AF1:bào 0x9AF2:bì 0x9AF3:máo,róu,méng 0x9AF4:fú,fèi 0x9AF5:ér 0x9AF6:róng,èr 0x9AF7:qÅ« 0x9AF8:gÅ�ng 0x9AF9:xiÅ« 0x9AFA:kuò,yuè 0x9AFB:jì,jié 0x9AFC:péng 0x9AFD:zhuÄ� 0x9AFE:shÄ�o,shÇŽo,shào 0x9AFF:suÅ� 0x9B00:tì 0x9B01:lì 0x9B02:bìn 0x9B03:zÅ�ng 0x9B04:dí,tì 0x9B05:péng 0x9B06:sÅ�ng,sòng,sóng 0x9B07:zhÄ“ng 0x9B08:quán 0x9B09:zÅ�ng 0x9B0A:shùn 0x9B0B:jiÇŽn 0x9B0C:tuÇ’,chuí,duÇ’ 0x9B0D:hú 0x9B0E:là 0x9B0F:jiÅ« 0x9B10:qí 0x9B11:lián 0x9B12:zhÄ›n 0x9B13:bìn 0x9B14:péng 0x9B15:mà 0x9B16:sÄ�n,sàn 0x9B17:mán 0x9B18:mán 0x9B19:sÄ“ng 0x9B1A:xÅ« 0x9B1B:liè 0x9B1C:qiÄ�n 0x9B1D:qiÄ�n 0x9B1E:náng,nàng 0x9B1F:huán 0x9B20:kuò,kuài 0x9B21:níng 0x9B22:bìn 0x9B23:liè 0x9B24:ráng,níng 0x9B25:dòu 0x9B26:dòu 0x9B27:nào 0x9B28:hòng,xiàng 0x9B29:xì,hè 0x9B2A:dòu 0x9B2B:hÇŽn 0x9B2C:dòu 0x9B2D:dòu 0x9B2E:jiÅ« 0x9B2F:chàng 0x9B30:yù 0x9B31:yù 0x9B32:gé,lì,è 0x9B33:yàn 0x9B34:fÇ”,lì 0x9B35:qín,xín 0x9B36:guÄ« 0x9B37:zÅ�ng,zÄ›ng 0x9B38:liù 0x9B39:guÄ«,xié 0x9B3A:shÄ�ng 0x9B3B:yù,zhÅ�u,jÅ« 0x9B3C:guÇ� 0x9B3D:mèi 0x9B3E:jì,qí 0x9B3F:qí 0x9B40:gà 0x9B41:kuí,kuÇ�,kuài 0x9B42:hún 0x9B43:bá 0x9B44:pò,bó,tuò 0x9B45:mèi 0x9B46:xÅ« 0x9B47:yÇŽn 0x9B48:xiÄ�o 0x9B49:liÇŽng 0x9B4A:yù 0x9B4B:tuí,chuí 0x9B4C:qÄ« 0x9B4D:wÇŽng 0x9B4E:liÇŽng 0x9B4F:wèi,wéi,wÄ“i 0x9B50:gÄ�n 0x9B51:chÄ« 0x9B52:piÄ�o 0x9B53:bì 0x9B54:mó 0x9B55:jÇ� 0x9B56:xÅ« 0x9B57:chÇ’u,chóu 0x9B58:yÇŽn 0x9B59:zhÄ�n 0x9B5A:yú 0x9B5B:dÄ�o 0x9B5C:rén 0x9B5D:jié,jì 0x9B5E:bÄ� 0x9B5F:hóng,gÅ�ng 0x9B60:tuÅ� 0x9B61:diào,dí 0x9B62:jÇ� 0x9B63:xù,yú 0x9B64:é,huà 0x9B65:è,qiè,jì 0x9B66:shÄ�,suÅ� 0x9B67:háng 0x9B68:tún 0x9B69:mò 0x9B6A:jiè 0x9B6B:shÄ›n 0x9B6C:bÇŽn 0x9B6D:yuán,wÇŽn 0x9B6E:pí,bÇ� 0x9B6F:lÇ”,lÇš 0x9B70:wén 0x9B71:hú,hù 0x9B72:lú 0x9B73:zÄ�,shÄ« 0x9B74:fáng 0x9B75:fén,fèn 0x9B76:nà 0x9B77:yóu 0x9B78:piàn 0x9B79:mó 0x9B7A:hé,gÄ› 0x9B7B:xiá,xiÄ� 0x9B7C:qÅ«,xié 0x9B7D:hán,hÄ�n 0x9B7E:pÄ«,pí 0x9B7F:líng,lín 0x9B80:tuó 0x9B81:bÅ�,bà 0x9B82:qiú 0x9B83:píng 0x9B84:fú 0x9B85:bì 0x9B86:cÇ�,jì 0x9B87:wèi 0x9B88:jÅ«,qú,gÇ’u 0x9B89:diÄ�o 0x9B8A:bà,bó 0x9B8B:yóu,chóu 0x9B8C:gÇ”n 0x9B8D:pÄ«,pí,jù 0x9B8E:nián 0x9B8F:xÄ«ng,zhÄ“ng 0x9B90:tái 0x9B91:bào,bÄ�o,pÄ�o 0x9B92:fù 0x9B93:zhÇŽ,zhà 0x9B94:jù 0x9B95:gÅ« 0x9B96:shí 0x9B97:dÅ�ng 0x9B98:dai 0x9B99:tà 0x9B9A:jié,qià 0x9B9B:shÅ« 0x9B9C:hòu 0x9B9D:xiÇŽng,zhèn 0x9B9E:ér 0x9B9F:àn,Ä�n 0x9BA0:wéi 0x9BA1:zhào 0x9BA2:zhÅ« 0x9BA3:yìn 0x9BA4:liè 0x9BA5:luò,gé 0x9BA6:tóng 0x9BA7:tÇ�,yí 0x9BA8:yì,qí 0x9BA9:bìng,bì 0x9BAA:wÄ›i 0x9BAB:jiÄ�o 0x9BAC:kÅ«,kù 0x9BAD:guÄ«,xié,huà,wÄ�,kuí 0x9BAE:xiÄ�n,xiÇŽn,xiàn 0x9BAF:gé 0x9BB0:huí 0x9BB1:lÇŽo 0x9BB2:fú 0x9BB3:kào 0x9BB4:xiÅ« 0x9BB5:duó 0x9BB6:jÅ«n 0x9BB7:tí 0x9BB8:miÇŽn 0x9BB9:shÄ�o 0x9BBA:zhÇŽ 0x9BBB:suÅ� 0x9BBC:qÄ«n 0x9BBD:yú 0x9BBE:nÄ›i 0x9BBF:zhé 0x9BC0:gÇ”n 0x9BC1:gÄ›ng 0x9BC2:sÅ« 0x9BC3:wú 0x9BC4:qiú 0x9BC5:shÄ�n,shÄ›n 0x9BC6:pÅ«,bÅ« 0x9BC7:huàn 0x9BC8:tiáo,yóu,chóu 0x9BC9:lÇ� 0x9BCA:shÄ� 0x9BCB:shÄ� 0x9BCC:kào 0x9BCD:méng 0x9BCE:chéng 0x9BCF:lí 0x9BD0:zÇ’u 0x9BD1:xÄ« 0x9BD2:yÇ’ng 0x9BD3:shÄ“n 0x9BD4:zÄ« 0x9BD5:qí 0x9BD6:zhÄ“ng,qÄ«ng 0x9BD7:xiÇŽng 0x9BD8:nÄ›i 0x9BD9:chún 0x9BDA:jì 0x9BDB:diÄ�o 0x9BDC:qiè 0x9BDD:gù 0x9BDE:zhÇ’u 0x9BDF:dÅ�ng 0x9BE0:lái 0x9BE1:fèi,fÄ“i 0x9BE2:ní 0x9BE3:yì 0x9BE4:kÅ«n 0x9BE5:lù 0x9BE6:jiù,ÇŽi 0x9BE7:chÄ�ng 0x9BE8:jÄ«ng,qíng 0x9BE9:lún 0x9BEA:líng 0x9BEB:zÅ�u 0x9BEC:lí 0x9BED:mÄ›ng 0x9BEE:zÅ�ng 0x9BEF:zhì 0x9BF0:nián 0x9BF1:hÇ” 0x9BF2:yú 0x9BF3:dÇ� 0x9BF4:shÄ« 0x9BF5:shÄ“n 0x9BF6:huàn 0x9BF7:tí 0x9BF8:hóu 0x9BF9:xÄ«ng 0x9BFA:zhÅ« 0x9BFB:là 0x9BFC:zÅ�ng 0x9BFD:zéi,jì 0x9BFE:biÄ�n 0x9BFF:biÄ�n 0x9C00:huàn 0x9C01:quán 0x9C02:zéi,zé 0x9C03:wÄ“i 0x9C04:wÄ“i 0x9C05:yú 0x9C06:chÅ«n 0x9C07:róu 0x9C08:dié,qiè,zhá 0x9C09:huáng 0x9C0A:liàn 0x9C0B:yÇŽn 0x9C0C:qiÅ« 0x9C0D:qiÅ« 0x9C0E:jiÇŽn 0x9C0F:bÄ« 0x9C10:è 0x9C11:yáng 0x9C12:fù 0x9C13:sÄ�i,xí 0x9C14:gÇŽn,jiÄ�n,xián 0x9C15:xiÄ� 0x9C16:tuÇ’,wÄ›i 0x9C17:hú 0x9C18:shì 0x9C19:ruò 0x9C1A:xuÄ�n 0x9C1B:wÄ“n 0x9C1C:qiàn,jiÄ�n 0x9C1D:hào 0x9C1E:wÅ« 0x9C1F:fáng,páng 0x9C20:sÄ�o 0x9C21:liú 0x9C22:mÇŽ 0x9C23:shí 0x9C24:shÄ« 0x9C25:guÄ�n,guàn,kÅ«n,gÇ”n 0x9C26:zÄ« 0x9C27:téng 0x9C28:tÇŽ,dié 0x9C29:yáo 0x9C2A:é,gé 0x9C2B:yóng 0x9C2C:qián 0x9C2D:qí 0x9C2E:wÄ“n 0x9C2F:ruò 0x9C30:shén 0x9C31:lián 0x9C32:áo 0x9C33:lè 0x9C34:huÄ« 0x9C35:mÇ�n 0x9C36:jì 0x9C37:tiáo 0x9C38:qÅ« 0x9C39:jiÄ�n 0x9C3A:shÄ“n,sÄ�o,cÄ�n 0x9C3B:mán 0x9C3C:xí 0x9C3D:qiú 0x9C3E:biào 0x9C3F:jì 0x9C40:jì 0x9C41:zhú 0x9C42:jiÄ�ng 0x9C43:xiÅ«,qiÅ« 0x9C44:zhuÄ�n,tuán,liàn 0x9C45:yÅ�ng,yóng 0x9C46:zhÄ�ng 0x9C47:kÄ�ng 0x9C48:xuÄ› 0x9C49:biÄ“ 0x9C4A:yù 0x9C4B:qÅ« 0x9C4C:xiàng 0x9C4D:bÅ� 0x9C4E:jiÇŽo 0x9C4F:xún 0x9C50:sù 0x9C51:huáng 0x9C52:zÅ«n,zùn 0x9C53:shàn,tuó 0x9C54:shàn 0x9C55:fÄ�n 0x9C56:guì,jué 0x9C57:lín 0x9C58:xún 0x9C59:miáo 0x9C5A:xÇ�,xÄ« 0x9C5B:zÄ“ng 0x9C5C:xiÄ�ng 0x9C5D:fèn 0x9C5E:guÄ�n 0x9C5F:hòu 0x9C60:kuài 0x9C61:zéi 0x9C62:sÄ�o 0x9C63:zhÄ�n,shàn 0x9C64:gÇŽn 0x9C65:guì 0x9C66:yìng,shéng,mÄ›ng 0x9C67:lÇ� 0x9C68:cháng 0x9C69:léi 0x9C6A:shÇ” 0x9C6B:ài 0x9C6C:rú 0x9C6D:jì 0x9C6E:xù,yú 0x9C6F:hù 0x9C70:shÇ” 0x9C71:lì 0x9C72:liè,là 0x9C73:lì,lù,luò 0x9C74:miè 0x9C75:zhÄ“n 0x9C76:xiÇŽng 0x9C77:è 0x9C78:lú 0x9C79:guàn 0x9C7A:lí,lÇ� 0x9C7B:xiÄ�n,xiÇŽn 0x9C7C:yú 0x9C7D:dÄ�o 0x9C7E:jÇ� 0x9C7F:yóu 0x9C80:tún 0x9C81:lÇ” 0x9C82:fáng 0x9C83:bÄ� 0x9C84:hé 0x9C85:bà,bÅ� 0x9C86:píng 0x9C87:nián 0x9C88:lú 0x9C89:yóu 0x9C8A:zhÇŽ 0x9C8B:fù 0x9C8C:bà,bó 0x9C8D:bào 0x9C8E:hòu 0x9C8F:pí 0x9C90:tái 0x9C91:guÄ«,xié 0x9C92:jié 0x9C93:kào 0x9C94:wÄ›i 0x9C95:ér 0x9C96:tóng 0x9C97:zéi 0x9C98:hòu 0x9C99:kuài 0x9C9A:jì 0x9C9B:jiÄ�o 0x9C9C:xiÄ�n,xiÇŽn 0x9C9D:zhÇŽ 0x9C9E:xiÇŽng 0x9C9F:xún 0x9CA0:gÄ›ng 0x9CA1:lí 0x9CA2:lián 0x9CA3:jiÄ�n 0x9CA4:lÇ� 0x9CA5:shí 0x9CA6:tiáo 0x9CA7:gÇ”n 0x9CA8:shÄ� 0x9CA9:huàn 0x9CAA:jÅ«n 0x9CAB:jì 0x9CAC:yÇ’ng 0x9CAD:qÄ«ng,zhÄ“ng 0x9CAE:líng 0x9CAF:qí 0x9CB0:zÅ�u 0x9CB1:fÄ“i 0x9CB2:kÅ«n 0x9CB3:chÄ�ng 0x9CB4:gù 0x9CB5:ní 0x9CB6:nián 0x9CB7:diÄ�o 0x9CB8:jÄ«ng 0x9CB9:shÄ“n 0x9CBA:shÄ« 0x9CBB:zÄ« 0x9CBC:fèn 0x9CBD:dié 0x9CBE:bÄ« 0x9CBF:cháng 0x9CC0:tí 0x9CC1:wÄ“n 0x9CC2:wÄ“i 0x9CC3:sÄ�i 0x9CC4:è 0x9CC5:qiÅ« 0x9CC6:fù 0x9CC7:huáng 0x9CC8:quán 0x9CC9:jiÄ�ng 0x9CCA:biÄ�n 0x9CCB:sÄ�o 0x9CCC:áo 0x9CCD:qí 0x9CCE:tÇŽ 0x9CCF:guÄ�n 0x9CD0:yáo 0x9CD1:páng 0x9CD2:jiÄ�n 0x9CD3:lè 0x9CD4:biào 0x9CD5:xuÄ› 0x9CD6:biÄ“ 0x9CD7:mán 0x9CD8:mÇ�n 0x9CD9:yÅ�ng 0x9CDA:wèi 0x9CDB:xí 0x9CDC:guì 0x9CDD:shàn 0x9CDE:lín 0x9CDF:zÅ«n 0x9CE0:hù 0x9CE1:gÇŽn 0x9CE2:lÇ� 0x9CE3:zhÄ�n 0x9CE4:guÇŽn 0x9CE5:niÇŽo,diÇŽo,dÇŽo,què 0x9CE6:yÇ� 0x9CE7:fú 0x9CE8:lì 0x9CE9:jiÅ«,qiú,zhì 0x9CEA:bú 0x9CEB:yàn 0x9CEC:fÇ” 0x9CED:diÄ�o,zhÄ�o 0x9CEE:jÄ« 0x9CEF:fèng 0x9CF0:rù 0x9CF1:gÄ�n,hàn,yàn 0x9CF2:shÄ« 0x9CF3:fèng 0x9CF4:míng 0x9CF5:bÇŽo 0x9CF6:yuÄ�n 0x9CF7:zhÄ«,chì 0x9CF8:hù 0x9CF9:qín 0x9CFA:fÅ«,guÄ« 0x9CFB:bÄ�n,fén 0x9CFC:wén 0x9CFD:jiÄ�n,qiÄ�n,zhÄ�n 0x9CFE:shÄ« 0x9CFF:yù 0x9D00:fÇ’u 0x9D01:yÄ�o,ÇŽo 0x9D02:jué,guÄ« 0x9D03:jué 0x9D04:pÇ� 0x9D05:huÄ�n 0x9D06:zhèn 0x9D07:bÇŽo 0x9D08:yàn 0x9D09:yÄ�,yÇŽ 0x9D0A:zhèng 0x9D0B:fÄ�ng,fÇŽng 0x9D0C:fèng 0x9D0D:wén 0x9D0E:Å�u 0x9D0F:dài 0x9D10:gÄ“ 0x9D11:rú 0x9D12:líng 0x9D13:miè,bì 0x9D14:fú 0x9D15:tuó 0x9D16:mín,wén 0x9D17:lì 0x9D18:biÇŽn 0x9D19:zhì 0x9D1A:gÄ“ 0x9D1B:yuÄ�n 0x9D1C:cí 0x9D1D:qú,gÅ�u,gòu 0x9D1E:xiÄ�o 0x9D1F:chÄ« 0x9D20:dàn 0x9D21:jÅ« 0x9D22:yÇŽo,Ä�o 0x9D23:gÅ« 0x9D24:zhÅ�ng 0x9D25:yù 0x9D26:yÄ�ng 0x9D27:yù 0x9D28:yÄ� 0x9D29:tiÄ›,hú 0x9D2A:yù 0x9D2B:tián 0x9D2C:yÄ«ng 0x9D2D:duÄ« 0x9D2E:wÅ« 0x9D2F:ér 0x9D30:guÄ� 0x9D31:ài 0x9D32:zhÄ« 0x9D33:yàn,Ä�n,è 0x9D34:héng 0x9D35:xiÄ�o 0x9D36:jiá 0x9D37:liè 0x9D38:zhÅ« 0x9D39:yáng,xiáng 0x9D3A:tí,yí 0x9D3B:hóng,hòng 0x9D3C:luò 0x9D3D:rú 0x9D3E:móu 0x9D3F:gÄ“ 0x9D40:rén 0x9D41:jiÄ�o,xiÄ�o 0x9D42:xiÅ« 0x9D43:zhÅ�u,diÇŽo 0x9D44:chÄ« 0x9D45:luò,gé 0x9D46:héng 0x9D47:nián 0x9D48:Ä› 0x9D49:luán 0x9D4A:jiá 0x9D4B:jì 0x9D4C:tú 0x9D4D:huÄ�n,juÄ�n,guàn 0x9D4E:tuÇ’ 0x9D4F:bÇ”,bÅ«,pÅ«,pú 0x9D50:wú 0x9D51:juÄ�n 0x9D52:yù 0x9D53:bó 0x9D54:jùn 0x9D55:jùn 0x9D56:bÄ« 0x9D57:xÄ« 0x9D58:jùn 0x9D59:jú 0x9D5A:tÅ« 0x9D5B:jÄ«ng 0x9D5C:tí,tÄ« 0x9D5D:é 0x9D5E:é 0x9D5F:kuáng 0x9D60:hú,gÇ”,hè 0x9D61:wÇ” 0x9D62:shÄ“n 0x9D63:lài,chì 0x9D64:jiao 0x9D65:pàn 0x9D66:lù 0x9D67:pí 0x9D68:shÅ« 0x9D69:fú 0x9D6A:Ä�n,yÄ� 0x9D6B:zhuó 0x9D6C:péng,fèng 0x9D6D:qín 0x9D6E:qiÄ�n 0x9D6F:bÄ“i 0x9D70:diÄ�o 0x9D71:lù 0x9D72:què 0x9D73:jiÄ�n 0x9D74:jú 0x9D75:tù 0x9D76:yÄ� 0x9D77:yuÄ�n 0x9D78:qí 0x9D79:lí 0x9D7A:yè 0x9D7B:zhuÄ« 0x9D7C:kÅ�ng 0x9D7D:duò 0x9D7E:kÅ«n 0x9D7F:shÄ“ng 0x9D80:qí 0x9D81:jÄ«ng 0x9D82:yì 0x9D83:yì 0x9D84:jÄ«ng,qÄ«ng 0x9D85:zÄ« 0x9D86:lái 0x9D87:dÅ�ng 0x9D88:qÄ« 0x9D89:chún,tuán 0x9D8A:gÄ“ng 0x9D8B:jÅ« 0x9D8C:jué,qÅ« 0x9D8D:yì 0x9D8E:zÅ«n 0x9D8F:jÄ« 0x9D90:shù 0x9D91:yÄ«ng 0x9D92:chì 0x9D93:miáo 0x9D94:róu 0x9D95:Ä�n 0x9D96:qiÅ« 0x9D97:tí,chí 0x9D98:hú 0x9D99:tí 0x9D9A:è 0x9D9B:jiÄ“,jiè 0x9D9C:máo 0x9D9D:fú,bì 0x9D9E:chÅ«n 0x9D9F:tú 0x9DA0:yÇŽn 0x9DA1:hé,hè 0x9DA2:yuán 0x9DA3:piÄ�n,biÇŽn 0x9DA4:kÅ«n 0x9DA5:méi 0x9DA6:hú 0x9DA7:yÄ«ng 0x9DA8:chuàn,zhì 0x9DA9:wù,mù 0x9DAA:jú 0x9DAB:dÅ�ng 0x9DAC:cÄ�ng,qiÄ�ng 0x9DAD:fÇŽng 0x9DAE:hè,hú 0x9DAF:yÄ«ng 0x9DB0:yuán 0x9DB1:xiÄ�n 0x9DB2:wÄ“ng 0x9DB3:shÄ« 0x9DB4:hè 0x9DB5:chú 0x9DB6:táng 0x9DB7:xiá 0x9DB8:ruò 0x9DB9:liú 0x9DBA:jí 0x9DBB:gú,hú 0x9DBC:jiÄ�n,qiÄ�n 0x9DBD:sÇ”n,xùn 0x9DBE:hàn 0x9DBF:cí 0x9DC0:cí 0x9DC1:yì 0x9DC2:yào,yáo 0x9DC3:yàn 0x9DC4:jÄ« 0x9DC5:lì 0x9DC6:tián 0x9DC7:kòu 0x9DC8:tÄ« 0x9DC9:tÄ«,sÄ« 0x9DCA:yì 0x9DCB:tú 0x9DCC:mÇŽ 0x9DCD:xiÄ�o 0x9DCE:gÄ�o 0x9DCF:tián 0x9DD0:chén 0x9DD1:jí 0x9DD2:tuán 0x9DD3:zhè 0x9DD4:áo,ào 0x9DD5:yÇŽo,xiào 0x9DD6:yÄ«,yì 0x9DD7:Å�u 0x9DD8:chì 0x9DD9:zhì,zhé 0x9DDA:liù 0x9DDB:yÅ�ng 0x9DDC:lǘ,lÇš 0x9DDD:bì 0x9DDE:shuÄ�ng,shuÇŽng 0x9DDF:zhuó 0x9DE0:yú 0x9DE1:wú 0x9DE2:jué 0x9DE3:yín 0x9DE4:tí,tán 0x9DE5:sÄ« 0x9DE6:jiÄ�o 0x9DE7:yì 0x9DE8:huá 0x9DE9:bì 0x9DEA:yÄ«ng 0x9DEB:sù 0x9DEC:huáng 0x9DED:fán 0x9DEE:jiÄ�o 0x9DEF:liáo 0x9DF0:yàn 0x9DF1:gÄ�o 0x9DF2:jiù 0x9DF3:xián 0x9DF4:xián 0x9DF5:tú 0x9DF6:mÇŽi 0x9DF7:zÅ«n 0x9DF8:yù,shù 0x9DF9:yÄ«ng 0x9DFA:lù 0x9DFB:tuán 0x9DFC:xián 0x9DFD:xué 0x9DFE:yì 0x9DFF:pì 0x9E00:chÇ”,zhú,chù 0x9E01:luó 0x9E02:xÄ«,qÄ« 0x9E03:yí 0x9E04:jÄ« 0x9E05:zé 0x9E06:yú 0x9E07:zhÄ�n 0x9E08:yè 0x9E09:yáng 0x9E0A:pì,bì 0x9E0B:níng 0x9E0C:hù 0x9E0D:mí 0x9E0E:yÄ«ng 0x9E0F:méng,máng 0x9E10:dí 0x9E11:yuè 0x9E12:yù 0x9E13:lÄ›i 0x9E14:bÇ” 0x9E15:lú 0x9E16:hè 0x9E17:lóng 0x9E18:shuÄ�ng 0x9E19:yuè 0x9E1A:yÄ«ng 0x9E1B:guàn,huÄ�n,quán 0x9E1C:qú 0x9E1D:lí 0x9E1E:luán 0x9E1F:niÇŽo,diÇŽo 0x9E20:jiÅ« 0x9E21:jÄ« 0x9E22:yuÄ�n 0x9E23:míng 0x9E24:shÄ« 0x9E25:Å�u 0x9E26:yÄ� 0x9E27:cÄ�ng 0x9E28:bÇŽo 0x9E29:zhèn 0x9E2A:gÅ« 0x9E2B:dÅ�ng 0x9E2C:lú 0x9E2D:yÄ� 0x9E2E:xiÄ�o 0x9E2F:yÄ�ng 0x9E30:líng 0x9E31:chÄ« 0x9E32:qú 0x9E33:yuÄ�n 0x9E34:xué 0x9E35:tuó 0x9E36:sÄ« 0x9E37:zhì 0x9E38:ér 0x9E39:guÄ� 0x9E3A:xiÅ« 0x9E3B:héng 0x9E3C:zhÅ�u 0x9E3D:gÄ“ 0x9E3E:luán 0x9E3F:hóng 0x9E40:wú 0x9E41:bó 0x9E42:lí 0x9E43:juÄ�n 0x9E44:gÇ”,hú 0x9E45:é 0x9E46:yù 0x9E47:xián 0x9E48:tí 0x9E49:wÇ” 0x9E4A:què 0x9E4B:miáo 0x9E4C:Ä�n 0x9E4D:kÅ«n 0x9E4E:bÄ“i 0x9E4F:péng 0x9E50:qiÄ�n 0x9E51:chún 0x9E52:gÄ“ng 0x9E53:yuÄ�n 0x9E54:sù 0x9E55:hú 0x9E56:hé 0x9E57:è 0x9E58:gÇ”,hú 0x9E59:qiÅ« 0x9E5A:cí 0x9E5B:méi 0x9E5C:wù 0x9E5D:yì 0x9E5E:yào 0x9E5F:wÄ“ng 0x9E60:liú 0x9E61:jí 0x9E62:yì 0x9E63:jiÄ�n 0x9E64:hè 0x9E65:yÄ« 0x9E66:yÄ«ng 0x9E67:zhè 0x9E68:liù 0x9E69:liáo 0x9E6A:jiÄ�o 0x9E6B:jiù 0x9E6C:yù 0x9E6D:lù 0x9E6E:huán 0x9E6F:zhÄ�n 0x9E70:yÄ«ng 0x9E71:hù 0x9E72:méng 0x9E73:guàn 0x9E74:shuÄ�ng 0x9E75:lÇ”,lú 0x9E76:jÄ«n 0x9E77:líng 0x9E78:jiÇŽn 0x9E79:xián,jiÇŽn 0x9E7A:cuó 0x9E7B:jiÇŽn 0x9E7C:jiÇŽn 0x9E7D:yán,yàn 0x9E7E:cuó 0x9E7F:lù,lǘ 0x9E80:yÅ�u 0x9E81:cÅ« 0x9E82:jÇ� 0x9E83:páo,biÄ�o,piÇŽo 0x9E84:cÅ« 0x9E85:páo 0x9E86:zhù,cÅ« 0x9E87:jÅ«n,qún 0x9E88:zhÇ” 0x9E89:jiÄ�n 0x9E8A:mí 0x9E8B:mí 0x9E8C:yÇ” 0x9E8D:liú 0x9E8E:chén 0x9E8F:jÅ«n 0x9E90:lín 0x9E91:ní 0x9E92:qí 0x9E93:lù 0x9E94:jiù 0x9E95:jÅ«n,qún 0x9E96:jÄ«ng 0x9E97:lì,lí,lÇ�,sÄ« 0x9E98:xiÄ�ng 0x9E99:xián,yán 0x9E9A:jiÄ� 0x9E9B:mí 0x9E9C:lì 0x9E9D:shè 0x9E9E:zhÄ�ng 0x9E9F:lín 0x9EA0:jÄ«ng 0x9EA1:qí 0x9EA2:líng 0x9EA3:yán 0x9EA4:cÅ« 0x9EA5:mài 0x9EA6:mài 0x9EA7:hé 0x9EA8:chÇŽo 0x9EA9:fÅ« 0x9EAA:miàn 0x9EAB:miàn 0x9EAC:fÅ« 0x9EAD:pào 0x9EAE:qù 0x9EAF:qÅ« 0x9EB0:móu 0x9EB1:fÅ« 0x9EB2:xiàn,yàn 0x9EB3:lái 0x9EB4:qÅ« 0x9EB5:miàn 0x9EB6:chi 0x9EB7:fÄ“ng 0x9EB8:fÅ« 0x9EB9:qÅ« 0x9EBA:miàn 0x9EBB:má,mÄ� 0x9EBC:me 0x9EBD:mó,má,ma,me 0x9EBE:huÄ« 0x9EBF:mí 0x9EC0:zÅ�u 0x9EC1:nún 0x9EC2:fén 0x9EC3:huáng 0x9EC4:huáng 0x9EC5:jÄ«n 0x9EC6:guÄ�ng 0x9EC7:tiÄ�n 0x9EC8:tÇ’u 0x9EC9:hóng 0x9ECA:huà 0x9ECB:kuàng 0x9ECC:hóng 0x9ECD:shÇ” 0x9ECE:lí 0x9ECF:nián 0x9ED0:chÄ«,lí 0x9ED1:hÄ“i 0x9ED2:hÄ“i 0x9ED3:yì 0x9ED4:qián 0x9ED5:dÇŽn 0x9ED6:xì 0x9ED7:tÅ«n 0x9ED8:mò 0x9ED9:mò 0x9EDA:qián,jiÄ�n 0x9EDB:dài 0x9EDC:chù 0x9EDD:yÇ’u,yÄ« 0x9EDE:diÇŽn,zhÄ�n,duò 0x9EDF:yÄ« 0x9EE0:xiá 0x9EE1:yÇŽn 0x9EE2:qÅ« 0x9EE3:mÄ›i 0x9EE4:yÇŽn 0x9EE5:qíng 0x9EE6:yuè,yè 0x9EE7:lí,lái 0x9EE8:dÇŽng,tÇŽng,chèng 0x9EE9:dú 0x9EEA:cÇŽn 0x9EEB:yÄ�n 0x9EEC:yán,yÇŽn,jiÄ�n 0x9EED:yÇŽn 0x9EEE:dÇŽn,tàn,zhèn,shèn 0x9EEF:àn,Ä�n 0x9EF0:zhÄ›n,yÄ�n 0x9EF1:dài,zhèn 0x9EF2:cÇŽn 0x9EF3:yÄ«,wÄ� 0x9EF4:méi,mèi 0x9EF5:zhÇŽn,dÇŽn 0x9EF6:yÇŽn 0x9EF7:dú 0x9EF8:lú 0x9EF9:zhÇ�,xiàn 0x9EFA:fÄ›n 0x9EFB:fú 0x9EFC:fÇ” 0x9EFD:miÇŽn,mÄ›ng,mÇ�n,méng 0x9EFE:miÇŽn,mÇ�n 0x9EFF:yuán 0x9F00:cù 0x9F01:qù 0x9F02:cháo,zhÄ�o 0x9F03:wÄ� 0x9F04:zhÅ« 0x9F05:zhÄ« 0x9F06:méng,mÄ›ng 0x9F07:áo 0x9F08:biÄ“ 0x9F09:tuó 0x9F0A:bì 0x9F0B:yuán 0x9F0C:cháo 0x9F0D:tuó 0x9F0E:dÇ�ng,zhÄ“n 0x9F0F:mì 0x9F10:nài 0x9F11:dÇ�ng 0x9F12:zÄ« 0x9F13:gÇ” 0x9F14:gÇ” 0x9F15:dÅ�ng,tóng 0x9F16:fén 0x9F17:táo 0x9F18:yuÄ�n 0x9F19:pí 0x9F1A:chÄ�ng 0x9F1B:gÄ�o 0x9F1C:qì,cào 0x9F1D:yuÄ�n 0x9F1E:tÄ�ng 0x9F1F:tÄ“ng 0x9F20:shÇ” 0x9F21:shÇ” 0x9F22:fén 0x9F23:fèi 0x9F24:wén,wèn 0x9F25:bá,fèi 0x9F26:diÄ�o 0x9F27:tuó 0x9F28:zhÅ�ng 0x9F29:qú 0x9F2A:shÄ“ng 0x9F2B:shí 0x9F2C:yòu 0x9F2D:shí 0x9F2E:tíng 0x9F2F:wú 0x9F30:jú 0x9F31:jÄ«ng 0x9F32:hún 0x9F33:jú,xí 0x9F34:yÇŽn 0x9F35:tÅ« 0x9F36:sÄ« 0x9F37:xÄ« 0x9F38:xiàn 0x9F39:yÇŽn 0x9F3A:léi 0x9F3B:bí 0x9F3C:yào 0x9F3D:qiú 0x9F3E:hÄ�n 0x9F3F:wù,huÄ« 0x9F40:wù 0x9F41:hÅ�u,kù 0x9F42:xiè 0x9F43:è,hè 0x9F44:zhÄ� 0x9F45:xiù 0x9F46:wèng 0x9F47:zhÄ� 0x9F48:nòng 0x9F49:nàng 0x9F4A:qí,jÄ«,jì,zÄ«,zhÄ�i,jiÇŽn 0x9F4B:zhÄ�i 0x9F4C:jì 0x9F4D:zÄ«,jì 0x9F4E:jÄ« 0x9F4F:jÄ« 0x9F50:qí,jì 0x9F51:jÄ« 0x9F52:chÇ� 0x9F53:chèn 0x9F54:chèn 0x9F55:hé 0x9F56:yá,yà 0x9F57:yín,yÇ�n,yÇŽn 0x9F58:xiè 0x9F59:bÄ�o 0x9F5A:zé 0x9F5B:xiè,shì 0x9F5C:chái,zÄ« 0x9F5D:chÄ« 0x9F5E:yÇŽn 0x9F5F:jÇ”,zhÄ� 0x9F60:tiáo 0x9F61:líng 0x9F62:líng 0x9F63:chÅ«,chÇ� 0x9F64:quán 0x9F65:xiè 0x9F66:kÄ›n,qiÇŽn,yín,kÇ”n 0x9F67:niè 0x9F68:jiù 0x9F69:yÇŽo 0x9F6A:chuò 0x9F6B:yÇ”n 0x9F6C:yÇ”,wú 0x9F6D:chÇ” 0x9F6E:yÇ�,qÇ� 0x9F6F:ní 0x9F70:zé,cè,zhà 0x9F71:zÅ�u,chuò 0x9F72:qÇ” 0x9F73:yÇ”n 0x9F74:yÇŽn 0x9F75:óu,yú 0x9F76:è 0x9F77:wò 0x9F78:yì 0x9F79:cÄ«,cuó 0x9F7A:zÅ�u 0x9F7B:diÄ�n 0x9F7C:chÇ” 0x9F7D:jìn 0x9F7E:yà,è 0x9F7F:chÇ� 0x9F80:chèn 0x9F81:hé 0x9F82:yín 0x9F83:jÇ” 0x9F84:líng 0x9F85:bÄ�o 0x9F86:tiáo 0x9F87:zÄ« 0x9F88:kÄ›n,yín 0x9F89:yÇ” 0x9F8A:chuò 0x9F8B:qÇ” 0x9F8C:wò 0x9F8D:lóng,máng 0x9F8E:páng 0x9F8F:gÅ�ng,wò 0x9F90:páng,lóng 0x9F91:yÇŽn 0x9F92:lóng 0x9F93:lÇ’ng,lóng 0x9F94:gÅ�ng 0x9F95:kÄ�n,kè 0x9F96:dá 0x9F97:líng 0x9F98:dá 0x9F99:lóng 0x9F9A:gÅ�ng 0x9F9B:kÄ�n 0x9F9C:guÄ«,qiÅ«,jÅ«n 0x9F9D:qiÅ« 0x9F9E:biÄ“ 0x9F9F:guÄ«,jÅ«n,qiÅ« 0x9FA0:yuè 0x9FA1:chuÄ« 0x9FA2:hé 0x9FA3:jué 0x9FA4:xié 0x9FA5:yù 0x9FC3:shÇŽn 0x9FCD:gàng 0x9FCE:tÇŽ 0x9FCF:mài 0x9FD4:gÄ“ 0x9FD5:dÄ�n 0x9FEB:ào 0x9FEC:tián 0x9FED:nÇ� 0xE815:yè 0xE816:zuÇ’,yÇ’u 0xE818:gÇ”n 0xE81A:zhòu,zhÅ« 0xE81B:zhòu,zhÅ« 0xE81D:jié,jiÄ“ 0xE81F:wÄ�i 0xE820:hÇŽn 0xE821:hÇŽn 0xE824:zhòu 0xE825:zhòu 0xE826:shÇ’u 0xE827:gÄ�ng 0xE828:kuÇŽi 0xE829:sÇ’ng 0xE82A:sÇ’ng 0xE82B:fÄ“ng 0xE82C:gòng 0xE82D:gÄ�ng 0xE82E:huì,kuì 0xE82F:tà 0xE830:jiÄ�n 0xE831:Ä“n 0xE832:xiÇŽo 0xE834:lóu,lǘ 0xE835:cÇŽn,shÄ�n,cÄ“n 0xE836:zhú 0xE837:chÅ�u,chóu 0xE838:wÇŽng 0xE83A:yáng,xiáng 0xE83B:zÄ�i 0xE83C:bà,bÄ“i 0xE83D:bà,bÄ“i 0xE83F:zhuÄ�n,zhuán,chuÇŽn,chún 0xE840:qióng 0xE841:kuì,huì 0xE842:kuì,huì 0xE843:juÇŽn 0xE844:xÄ«n 0xE845:yàn 0xE846:qíng 0xE847:qíng 0xE849:shàn 0xE84A:yé,yá 0xE84B:pÅ� 0xE84C:shàn 0xE84D:zhuÅ� 0xE84E:shàn 0xE84F:jué 0xE850:chuài 0xE851:zhèng 0xE852:chuài 0xE853:zhèng 0xE854:zhuó 0xE855:yíng 0xE856:yú 0xE857:yìn 0xE858:chÅ«n 0xE859:qiÅ« 0xE85A:yú 0xE85B:téng 0xE85C:shÄ« 0xE85D:jiÄ�o 0xE85E:liè 0xE85F:jÄ«ng 0xE860:jú 0xE861:tÄ« 0xE862:pì 0xE863:yÇŽn 0xE864:luán 0x20000:hÄ“ 0x20001:qÄ« 0x20003:qiÄ›,jÄ« 0x20005:hài 0x20009:qiÅ« 0x2000A:cÄ�o 0x2000D:shì 0x20013:sÄ« 0x20014:jué 0x2001B:yù 0x2001D:kÅ�ng 0x20022:zÄ« 0x20026:xíng 0x20031:mÇ’u 0x20037:jÄ« 0x20038:yè 0x20039:jÅ«n 0x2003C:qián,xià 0x2003D:lù 0x20049:chÅ« 0x20057:shì,hè 0x20060:qiè 0x20065:gÇŽ 0x2006D:qí 0x20077:chÇŽn 0x20084:huÄ�n 0x20086:yì 0x20087:zuÇ’ 0x20088:jié,tiÇŽn 0x20091:zÅ�u 0x20094:zÇ� 0x2009F:jÄ«n 0x200A2:pài 0x200A4:duÄ« 0x200A5:cóng 0x200A7:shèn 0x200B8:huáng 0x200CA:yÇ�n 0x200CC:gÇ”n 0x200D6:jiÅ« 0x200EB:shÄ“n 0x200FA:jiù 0x20105:yè 0x20109:dòng 0x2010C:jué,zhuì 0x2010D:jié 0x2010F:diÇŽo 0x20111:jué 0x20112:chuí,shÄ� 0x20116:líng 0x2011A:tÄ«ng 0x20123:gèn 0x2012E:yà,mÇ’ 0x20131:yí 0x2013F:wéi 0x20142:jié 0x2014C:yí 0x20157:diè 0x2015A:qí 0x20164:xí 0x2016C:bÄ�o 0x20171:xiè 0x20179:zhàng 0x2018C:yÅ�ng 0x20190:xù 0x20199:diè 0x2019B:dÄ�n 0x2019F:wÄ›i 0x201A3:guÇŽ,zhuÇŽ 0x201A9:fàn 0x201AE:mò 0x201B1:xÄ« 0x201B2:yÇŽn 0x201B5:ní 0x201B6:dàn 0x201CB:dÇŽn 0x201CF:tÄ�o 0x201D2:gÅ�ng 0x201D7:kuÄ� 0x201D8:chù 0x201EF:qù 0x201F1:mò 0x201F3:shÄ« 0x201F5:gÇŽn 0x201F7:shÄ“ng 0x20201:tuÅ� 0x20205:shÅ�u 0x2020A:niÄ› 0x20224:yùn 0x20225:guÇŽ 0x2022C:xiÄ�o 0x2022D:láo 0x20230:dàn 0x20231:suÅ� 0x20235:mÇŽng 0x20236:yí 0x20238:tè 0x2023A:bì 0x20242:tà 0x20257:luò 0x20262:xÇ� 0x20263:hÅ«n,hùn 0x20264:dá 0x20267:jù 0x20269:dú 0x2026C:ÇŽn,yÇŽn 0x20289:mèi 0x2028C:rán 0x2028E:ái 0x2028F:yù,xián 0x20292:jiàn 0x20294:qì 0x2029F:mÇ�n 0x202A3:zhòu 0x202A4:zhì 0x202A5:zhÇ’ng 0x202A6:nÇŽo 0x202A7:bìng 0x202A9:zhuàn 0x202AA:shù 0x202AB:xùn,qióng 0x202AC:jué 0x202AD:qiÇŽn 0x202B0:guÇŽ 0x202B2:tÅ« 0x202B6:yìng 0x202B7:zhì 0x202BE:kuí 0x202C6:chèn 0x202D6:liàn 0x202D7:yÄ� 0x202DC:guò 0x202DD:miÇŽo 0x202DE:shé 0x202DF:yÇ” 0x202E1:sì 0x202E2:sÇ’u,zhòu 0x202E4:zhì 0x202E7:qiÄ“ 0x202E9:fù 0x202EC:jú 0x202ED:bèi 0x202EF:bì 0x202F2:suÇ’ 0x202F5:qiÇŽn 0x202F6:mÇ�ng 0x202F7:chÇŽn 0x202FA:sÄ�o 0x202FB:jÄ« 0x20315:gòng 0x20316:qióng 0x2031A:nòng,ròng 0x2031E:sÇ’u 0x2031F:sÇ’u 0x20320:yáo 0x2032A:chÅ�u,tÄ�o 0x2032D:shuài 0x2032E:zhÄ“ 0x2032F:lì,lí 0x20330:gài 0x20331:suÄ« 0x20332:zhÄ�n 0x20334:zhuàng 0x2033D:fù 0x20343:jÄ« 0x20344:dÅ�u 0x20357:huì 0x2035A:jiÇŽn 0x2035B:yÇŽn 0x2035C:zhì 0x20368:mÄ›i 0x20369:yào 0x2036A:dÄ« 0x2036B:yí 0x2036F:bié 0x20372:qú 0x20373:yì 0x20375:yàng 0x20379:zhá 0x2037D:shà 0x20399:lái 0x203AE:jué 0x203B0:qÄ« 0x203B3:yú 0x203B6:zÇŽi 0x203B7:sà 0x203B8:sè 0x203BB:dùn 0x203BF:jiÄ› 0x203C0:kÄ“ 0x203C3:yuÄ“ 0x203C7:jiÇŽn 0x203C8:yáo 0x203D3:xiÄ�n 0x203D5:xiào 0x203D6:qiÄ�o 0x203DA:yù 0x203DB:qú 0x203E1:xiÄ�n,líng 0x203E2:luò 0x203E4:guÇŽng 0x203E7:chÄ“ng 0x203E8:chuÇŽng 0x203E9:yí 0x203EB:zhÄ›ng 0x203ED:zòng 0x203EE:duì 0x203F0:zhÇŽi 0x203FF:fÄ›i 0x20400:yí 0x20401:méng 0x20408:biÄ�n,pián 0x20409:jié 0x2040A:shù 0x2040B:liáo 0x2040C:bÇ�,bà 0x2040D:sú 0x20411:dì 0x20421:bèi 0x20422:wèn 0x20427:méng 0x20429:chÇŽn 0x20435:dÇŽo 0x2043A:pín 0x2043B:jiÇŽn 0x2043C:lìn 0x2043D:guì,guÄ« 0x2043E:qÄ« 0x2043F:hÅ�ng 0x20443:jí 0x20444:xiè 0x20445:zhÄ“ng 0x20446:chÇŽn 0x20450:yáo 0x20451:chÇŽn 0x20458:diÄ�n 0x20459:chòng 0x2045A:néi 0x2045B:néi 0x2045E:zhài 0x2045F:biÄ�n,pián 0x20461:chÇŽn 0x2046A:xiÄ�o 0x2046F:cù 0x20470:xÄ«n 0x20471:jÇ�ng 0x20472:qiÄ�n 0x20474:qÄ«ng 0x20479:gÇ” 0x20484:wù 0x2049C:yuÇŽn 0x2049D:bÇ�ng 0x204A2:wán 0x204B0:niÇŽo,ní 0x204B5:liàn 0x204B8:rÇŽo 0x204BE:fàn 0x204BF:dí 0x204CA:huÄ«,dÄ�n 0x204CB:yì 0x204CC:xián 0x204D6:lán 0x204D7:fù 0x204D9:xiòng 0x204DC:liÇŽng 0x204DD:tÄ�o 0x204DE:jí 0x204E2:jiè 0x204E3:zhá 0x204E4:shÄ« 0x204EA:qí 0x204EB:biÇŽn 0x204ED:lÇŽn 0x204EE:lÇ�n 0x204F6:zhì 0x204F7:bì,chéng 0x204F8:shèng 0x204FD:shèng 0x204FF:qín 0x20502:biÄ�o 0x20503:xÄ« 0x20509:juàn 0x2050B:jÄ«,xìn 0x2050D:xÄ« 0x2050E:qÇ�n 0x20511:hài 0x20515:lún 0x20520:yuè 0x20528:lián 0x2052F:bÄ�n 0x20532:héng 0x20536:qÄ« 0x2053A:qiÄ�n 0x2053B:zhèng 0x2053C:mÇŽo 0x20541:cóng 0x20544:nà 0x2054A:tÇ�ng 0x2054C:zÅ�ng 0x20555:jiÅ�ng 0x20556:zhÇŽo 0x2055F:niÇŽn 0x20560:chéng 0x20563:qià 0x20566:yù 0x20567:jiÇŽo 0x2056D:zhào 0x20573:dí 0x20574:jiÅ« 0x20578:suÇ� 0x2057B:yÄ�o 0x2057F:wÄ�ng 0x20582:liáo 0x20584:tóng 0x20586:mèng 0x2058B:yÇ’u 0x20593:sÄ« 0x2059B:lòu 0x2059F:yÄ«n 0x205A5:chÇ’ng 0x205AB:gÇŽn 0x205AC:jiÅ« 0x205B6:qìn 0x205B7:jiÇ’ng 0x205B9:xié,xiá 0x205C2:hè 0x205C6:tÄ�o 0x205C8:qiú 0x205C9:xié 0x205CA:jìng 0x205CB:niÇŽn 0x205CC:jìng 0x205CF:jí 0x205D8:tiÇŽn 0x205DA:cuì 0x205DB:dié 0x205DD:qÇ�ng 0x205E5:pìng 0x205E6:píng 0x205E8:dié 0x205E9:lòu 0x205F3:liÇŽn 0x205F4:hán 0x205F5:pÄ�ng 0x205F6:táng 0x205FA:yí 0x205FB:xuán 0x205FC:suò 0x205FD:liú 0x205FE:shuÇŽng 0x205FF:shèn 0x20601:bù 0x20602:sÅ�u 0x20605:qín 0x20606:shÄ›n 0x2060A:nòng 0x2060B:tÇ�ng 0x2060C:jiÄ�ng 0x20615:xÄ« 0x20616:zhì 0x2061D:lài 0x2061E:lì 0x2061F:lì 0x20622:hé 0x20623:jiào 0x20625:yán 0x20627:shÅ« 0x2062A:shÇ� 0x20631:zhÄ›n 0x20633:yÅ�u 0x2063A:suò 0x2063B:wú 0x20641:cháng 0x20642:cóng 0x20646:jù 0x2064E:shÅ« 0x20654:jiù 0x20655:wéi 0x2065E:huò 0x20664:jiÄ“ 0x2066C:zÇŽo 0x20676:Ç’u 0x2067C:guÇŽ 0x20683:háo 0x20684:lÇ� 0x20685:zhì 0x20686:xiàn 0x20689:bÅ« 0x2068A:chàng 0x20693:yÅ«n 0x20694:hé 0x2069C:tÄ�o 0x206A0:biÄ�o 0x206A5:diÄ�o 0x206A7:èr 0x206A8:jiÅ« 0x206AD:dì 0x206AE:yì 0x206AF:kÅ«n 0x206B1:zhé 0x206B3:kuò 0x206B4:zhÅ�u 0x206B5:jù 0x206B9:shàn 0x206BA:shà 0x206BB:diÄ�o 0x206BC:bÄ�n 0x206BD:jÄ« 0x206C0:zhÅ�ng 0x206C3:yí 0x206C5:kÅ�u 0x206C6:wÅ« 0x206CA:gÄ“ 0x206CB:bÄ� 0x206CE:gÅ�u 0x206D1:xián 0x206D2:guÄ� 0x206D3:liÇ” 0x206D4:chÇ� 0x206D5:guÄ�i 0x206D6:chuÄ�n 0x206D8:lí 0x206D9:cù 0x206DA:shuÄ� 0x206E1:bÇ� 0x206E5:bÇ�ng 0x206E6:lì 0x206E9:jiÇ” 0x206EA:tiÄ�o,diÄ�o 0x206EB:duÇ’ 0x206ED:yÄ�n,yuÄ�n 0x206EE:quÄ�n 0x206F1:liè,zÄ� 0x206F3:kè,hé 0x206F5:gÄ“n 0x206F6:zhÄ“n 0x206F8:fén 0x20701:yí 0x20703:jiù 0x20704:xù 0x20705:jiÇŽo 0x20708:lÇœ 0x20709:jiÇ” 0x2070B:chÇ’u 0x2070E:xiàn 0x20710:kuài 0x20711:duì 0x20716:luÅ� 0x20717:xÄ«,xì 0x20718:qìn 0x20719:bù 0x20724:qià 0x20731:pÄ« 0x20732:yÄ� 0x20733:bÄ“ng 0x20734:guÇ’ 0x20735:guÄ� 0x20739:jú 0x2073C:qiÄ� 0x2073E:jué,guì 0x20744:lì 0x20750:huÄ� 0x20751:jiÄ�o 0x20758:qià 0x2075A:zhá,zhé 0x2075B:qiÄ� 0x2075D:zhé,zhá 0x2075E:chÄ� 0x2075F:yÇ�ng 0x20762:yÄ�n 0x20764:chÅ�ng 0x20768:chÇ� 0x2076A:wÄ�n 0x2076C:sÅ�u 0x20772:kÇŽn 0x20773:yuán 0x2077D:chóu 0x2077F:suÇ’ 0x20780:tÅ« 0x20783:zhé 0x20784:tÄ«,chÇ� 0x20786:wÅ« 0x20788:dÄ� 0x20789:lì 0x2078A:chÄ�,chÄ�i,chá 0x20795:róng 0x20796:gòng 0x20797:què 0x20799:lí 0x2079E:tÄ�o 0x207A4:lì 0x207A7:mí 0x207A9:chì,shuài 0x207AC:gùn 0x207AD:lóu,lòu 0x207AE:chuÇŽng 0x207AF:suÇ’ 0x207B0:jiÇŽo 0x207B1:jìn 0x207B5:fá 0x207B6:zhÄ�i 0x207BE:jìn 0x207BF:cuì 0x207C2:cèng 0x207C3:zÇ”n 0x207C5:zhào,rì,zhì 0x207C8:piÄ“ 0x207C9:zhÇŽn,chàn 0x207CA:xÄ« 0x207CB:yào 0x207CC:fÇ”,pÇ’u 0x207CD:chÅ�ng 0x207D3:cuì 0x207D7:guÄ� 0x207E3:jÄ« 0x207E6:sè 0x207E7:zhÄ�n 0x207E8:lìng,líng 0x207E9:sè 0x207EA:yè 0x207F0:jÅ« 0x207F6:tÅ« 0x207FA:rú,ruÇŽn 0x207FB:zé,bài 0x207FC:huán 0x20801:xiÇŽn 0x20803:qiÄ�n 0x20804:zhào 0x2080B:cán 0x2080E:kuò 0x2080F:lì 0x20810:róu 0x20814:dú 0x20817:liè 0x2081C:yÄ«ng 0x2081D:lì 0x20820:dú 0x20822:líng 0x2082A:wÄ�n 0x2082F:dié 0x20833:jiÅ« 0x20835:lì 0x20836:kÅ« 0x20837:kÄ“ng 0x20839:zhÄ›n 0x20840:hè 0x20842:bì,fú 0x20844:pÄ« 0x2084A:hÄ�ng 0x20851:zhuó 0x20852:duÇ� 0x20854:yì 0x2085C:kè 0x2085D:yì 0x2085E:mò 0x20861:cán 0x20863:gÄ›ng 0x20864:kè 0x20865:shì 0x2086D:líng,lìng 0x2086E:bÄ“ng,kÄ“ng 0x20871:duàn 0x20876:juÄ�n 0x20877:nÇŽo 0x20878:zÇ� 0x2087B:zòng 0x20883:táng 0x20886:xiá 0x20887:hàn 0x2088C:lüè 0x2088D:qián 0x20893:mò 0x20894:Å�u 0x20895:háo 0x20899:zhá 0x2089A:juàn 0x2089B:cóng 0x208A0:lì,jí 0x208A1:zhá 0x208A2:yÇ’u 0x208A3:diàn 0x208A4:jué 0x208A5:bèi 0x208A9:yÇŽo 0x208AA:piÄ“ 0x208B1:jìn 0x208B2:kÇŽi,xiè 0x208B3:sè 0x208B4:yÇŽng 0x208B5:jìn 0x208B9:kè 0x208C4:chÄ�n 0x208C7:niÇŽn 0x208C9:wàn 0x208CA:lÇœ 0x208D0:yún 0x208D1:yÄ�o 0x208D2:bÄ�o 0x208D5:jÅ«n 0x208D6:xuán 0x208D8:zhÅ�u 0x208E0:kuì 0x208E1:fèng 0x208EA:qú 0x208EB:shào 0x208EC:sÇ”n 0x208F0:dÅ« 0x208F2:kuÇŽi 0x208F3:pào 0x208FA:bào 0x208FE:fù 0x208FF:jiù 0x20900:rán 0x20904:jÅ« 0x2090A:qióng 0x2090D:zhÅ�u 0x2090E:huà 0x2090F:bÇŽo 0x20915:yí,xián 0x20917:yí 0x20918:yí,yÇ� 0x2091D:mào 0x20926:ruÇŽn,rú 0x2092B:cí 0x2092E:hán 0x20930:cóng,xuán 0x20934:xì 0x20939:quán 0x2093A:tiáo 0x2093C:diào 0x2093E:hán 0x20947:yÄ› 0x2094D:Ä“ 0x2094E:wéi 0x20950:cÄ�ng 0x20951:diào 0x20955:è 0x20956:dì 0x20958:suÇŽn 0x20959:quán 0x2095C:è 0x2095D:Å�u,Ç’u 0x2095E:xuán 0x20962:wÇ” 0x20966:yì 0x20968:móu 0x20970:hÅ« 0x20974:hán,gÄ�n 0x2097F:shí 0x20983:sà 0x20988:bì 0x2098A:hán 0x2098B:jìng 0x2098C:xì 0x2098E:qìn 0x2098F:cuó 0x20990:cì 0x20992:bÄ�n 0x20997:duÄ« 0x2099C:xì,shù 0x209A7:zhÄ« 0x209A8:luàn 0x209AA:hÅ« 0x209AB:jí 0x209AC:guÄ�i 0x209B2:pÄ�ng 0x209C0:zhÅ« 0x209C5:bÇ� 0x209C7:yú 0x209D2:qÇ� 0x209D5:hé 0x209D6:chÇ” 0x209D9:shào 0x209DA:chì 0x209DB:bó 0x209DF:réng,nÇŽi 0x209E0:yóu 0x209E4:nÇŽi 0x209E9:huì,huÇ� 0x209EA:tiáo,yÇ’u 0x209EB:bÇŽn 0x209F0:xÅ« 0x209F4:yóu,yòu 0x209F5:chì 0x209FF:héng 0x20A03:wài 0x20A06:xiè 0x20A0A:jué 0x20A0C:suÄ« 0x20A0D:qÄ«ng 0x20A0E:zhuàn 0x20A15:jì 0x20A18:bì 0x20A1A:xÄ« 0x20A20:jí 0x20A22:jùn 0x20A25:liáo 0x20A26:yÅ�u 0x20A2D:jú 0x20A32:yuè 0x20A35:bàng 0x20A38:pí 0x20A3B:zè 0x20A3E:yì 0x20A3F:dÇ� 0x20A42:qiè 0x20A44:suÇ’ 0x20A46:cì 0x20A48:zhù 0x20A49:yuè,jú 0x20A4F:jiÄ�o 0x20A54:shí 0x20A57:yí 0x20A58:xiá 0x20A60:yuán 0x20A65:guó 0x20A67:kè 0x20A6A:cuì 0x20A6B:yì 0x20A75:lì 0x20A77:diÇŽn 0x20A7A:xÄ«,chí 0x20A7F:bì 0x20A82:biÇŽn 0x20A83:méi 0x20A84:lì 0x20A87:sÇ’u 0x20A90:liú 0x20A91:guì 0x20A92:kè 0x20A97:yí 0x20A99:xÇ� 0x20A9A:yín,ÇŽn,kÇŽn 0x20A9F:kè 0x20AA3:shè 0x20AA7:wÇ’ 0x20AAE:pì 0x20AB6:yuè 0x20AB7:hóng 0x20ABA:lì 0x20ABB:fù 0x20AC3:jué 0x20AC4:xiÄ�n 0x20AC9:diÄ�n 0x20ACC:lì 0x20AD3:tÅ« 0x20AD8:jiÄ�n 0x20ADB:bÇŽi 0x20ADC:dì 0x20ADD:zhÇŽng 0x20AE3:yù 0x20AE8:duì 0x20AED:cÄ�n 0x20AEE:tú 0x20AF6:tÄ�n 0x20AF7:jí 0x20AF8:qí,zhÄ�i 0x20AF9:shàn 0x20AFA:nián,shì 0x20B06:guàn 0x20B08:bÇ� 0x20B0B:xÄ«ng,nián 0x20B13:zhÄ›n 0x20B19:sÄ� 0x20B1B:mò 0x20B1D:fú 0x20B22:tÄ�o 0x20B23:bàng 0x20B2A:biào 0x20B2C:xÄ« 0x20B2E:jié 0x20B36:jìn 0x20B3E:qiÄ�n 0x20B48:sì 0x20B49:jÇ�ng 0x20B4B:chÇ� 0x20B57:jÇ�ng 0x20B65:suì 0x20B6F:zhÄ� 0x20B70:lí 0x20B74:zhuÅ� 0x20B79:biàn 0x20B7F:tún 0x20B83:bì 0x20B86:fèi 0x20B8A:dé 0x20B8C:zhú 0x20B91:jÅ« 0x20B99:yÇ� 0x20B9C:yà,yÄ«n 0x20B9F:chì 0x20BA0:guÇŽ,bÇŽi 0x20BA1:zhÇ� 0x20BA8:réng 0x20BAB:yÅ�u 0x20BAD:bó 0x20BAF:jÇ� 0x20BB0:pÇ�n 0x20BB3:yÄ«ng 0x20BB4:yÄ�ng 0x20BB5:màng 0x20BBD:lòng 0x20BBE:ǹ,ǹg 0x20BBF:sa,san 0x20BC0:chuÄ�n 0x20BC2:cí 0x20BC3:wÇ” 0x20BC4:rèn 0x20BC8:dài 0x20BC9:jí 0x20BCB:yÇ� 0x20BCD:rán 0x20BD0:huò 0x20BD1:guÄ� 0x20BD3:zhé 0x20BD4:pì 0x20BD7:zÄ� 0x20BD8:bàn 0x20BD9:jié 0x20BDC:hÅ�u,xÇ” 0x20BDF:xiàn 0x20BE0:huÄ« 0x20BE9:zhÄ� 0x20BEA:dÄ�i,dÇŽi,è 0x20BEB:gÄ“ 0x20BED:pì 0x20BEF:piàn 0x20BF0:shí 0x20BF1:liÇŽng 0x20BF2:yuè 0x20BF3:hù,wÄ›n 0x20BF4:biàn 0x20BF7:réng 0x20BF9:réng 0x20C04:yÄ« 0x20C05:zhÄ« 0x20C07:jÄ«n 0x20C08:wÄ“ng 0x20C09:chÄ�o 0x20C0B:qiÅ« 0x20C0D:zhÇ”,zhù 0x20C0F:zhá 0x20C10:pÇ’ 0x20C11:àn 0x20C13:hé 0x20C15:chÅ« 0x20C16:yán 0x20C1A:shì 0x20C1B:hù,gào 0x20C1C:è 0x20C34:shí 0x20C39:tuÅ� 0x20C3A:dài 0x20C3B:wài,wai 0x20C3C:pÅ� 0x20C3D:rÇ’ng 0x20C3E:jÅ« 0x20C40:bÅ� 0x20C50:yÇ” 0x20C51:dÅ�u 0x20C53:guÇ� 0x20C54:shòu 0x20C57:suÅ� 0x20C58:nì 0x20C59:zhÅ�u,yù,jì,cù 0x20C5A:lòng 0x20C5B:bÇ�ng 0x20C5C:zùn 0x20C5D:yè 0x20C5E:rÇŽn 0x20C60:líng 0x20C61:sà,shài 0x20C64:lÄ›i 0x20C65:è,huì,zá 0x20C67:zhòng 0x20C68:jÇ� 0x20C6B:è 0x20C6F:zuò 0x20C72:nà 0x20C73:yÇ”n 0x20C8A:xiè 0x20C8B:zuÇ� 0x20C8C:shù 0x20C8D:diÅ« 0x20C8E:fa,fèi,fá,wa 0x20C8F:rÄ›n 0x20C91:bÄ�ng 0x20C92:hán 0x20C93:hóng 0x20C94:yÄ« 0x20C96:yÄ« 0x20C99:kÄ“ 0x20C9A:yì 0x20C9B:huí 0x20C9C:zhÄ“ng 0x20CAE:jìng 0x20CB1:gé 0x20CB4:nóu 0x20CB5:qiè,jié 0x20CB7:dié 0x20CB9:jì 0x20CBA:yì 0x20CBB:yí 0x20CBD:fú 0x20CBE:shuò 0x20CBF:shuò 0x20CC0:yÇ’ng 0x20CC1:kÄ›n 0x20CC2:huá 0x20CC3:hòng 0x20CC7:hé 0x20CCA:hÄ“ 0x20CCB:qiÇŽn 0x20CCC:qià 0x20CCE:sì 0x20CD0:bÄ�ng 0x20CEC:jÄ«ng 0x20CED:kè 0x20CF3:Ä�i 0x20CF4:lóu 0x20CF6:tÅ« 0x20CF9:chuáng 0x20CFC:sòng 0x20CFD:chéng 0x20CFF:wÄ“i 0x20D02:nÇ” 0x20D04:jiÇ” 0x20D07:bÄ«n 0x20D21:xiào 0x20D22:shÄ“ng 0x20D23:hÇ’u 0x20D26:zhù 0x20D28:guÄ�n 0x20D29:jÄ«,qÇ� 0x20D2B:jì,cù,yù,zhù 0x20D2D:xÄ« 0x20D2F:shè 0x20D30:Ç’u 0x20D31:hú 0x20D32:tà 0x20D33:xiáo 0x20D35:zào 0x20D38:bò 0x20D39:qì 0x20D3A:wÄ� 0x20D3B:tuÅ� 0x20D3C:dào 0x20D3E:nà 0x20D60:zhÄ�i 0x20D63:yà 0x20D66:wÇ” 0x20D67:zhén,chún 0x20D68:de 0x20D69:hÄ“ 0x20D6B:Ä�ng 0x20D6C:pí 0x20D6D:sè 0x20D6E:fÄ›n 0x20D6F:guÄ� 0x20D73:pÇ’ 0x20D77:xuàn 0x20D78:hÄ�n,mí 0x20D79:gÄ�ng 0x20D7A:bÄ� 0x20D7B:zÅ�ng 0x20D7C:mèng 0x20D7E:huò 0x20DA7:diÄ�n 0x20DA8:xÄ« 0x20DAB:dà 0x20DAC:nàng 0x20DB0:diÄ�o 0x20DB1:luò 0x20DB2:kè 0x20DB7:yì 0x20DB8:jué 0x20DB9:hé 0x20DBB:jí 0x20DBE:hè 0x20DBF:niè,zá 0x20DC0:rÇ”n 0x20DC1:qián,jiÄ�n 0x20DC2:dài 0x20DC3:shÄ�o,sù,shòu 0x20DC4:kè 0x20DC5:zhú 0x20DC7:shÄ« 0x20DC8:lÇœ,liè 0x20DC9:jiÄ� 0x20DCA:pián 0x20DCB:hòu 0x20DCC:jÄ«,zé 0x20DCD:tà 0x20DCE:chóu,shòu 0x20DCF:wÅ� 0x20DD0:jìng,jiàng 0x20DD1:pÅ� 0x20DD2:zhÄ�i 0x20DD3:xÄ«n 0x20DD6:biàn 0x20DD9:xù 0x20DDE:gÅ« 0x20DDF:jiè 0x20DE2:xián 0x20DF8:é,yóng 0x20DFA:bó 0x20DFB:piÄ�o 0x20DFF:zÇŽ 0x20E01:pài 0x20E02:tÅ« 0x20E04:yÄ«ng 0x20E2E:xiÇŽng 0x20E31:nuò 0x20E32:gÄ“ 0x20E33:bó 0x20E34:xiè 0x20E38:zhÄ“n,chún 0x20E39:yú 0x20E3A:nì 0x20E40:xùn 0x20E41:wà 0x20E43:àng 0x20E44:hàn 0x20E45:hÅ�ng 0x20E46:dÄ�n 0x20E48:nuó 0x20E4A:cÇŽo 0x20E4B:jí 0x20E4C:nÄ›ng 0x20E4D:yÇ’ng,róng 0x20E4E:xiÄ�o 0x20E50:chuÇŽ 0x20E51:yào 0x20E53:gé 0x20E54:táng 0x20E55:bào 0x20E56:chÇŽn 0x20E58:xù 0x20E5B:hái 0x20E5D:chóu 0x20E5F:jiÇŽn 0x20E60:zuÅ� 0x20E64:wèi 0x20E65:dÄ� 0x20E66:pÄ« 0x20E90:huàn 0x20E92:xÄ« 0x20E94:pèn 0x20E95:liÅ«,liáo 0x20E96:mÇ”,yÄ«ng 0x20E97:miÄ“ 0x20E98:làng 0x20E99:tuì 0x20E9A:bÄ�n 0x20E9D:gÄ“ 0x20E9F:kù 0x20EA2:jiÄ� 0x20EA3:bÅ� 0x20ECD:huàn 0x20ECF:zú 0x20ED0:luò 0x20ED7:lí 0x20ED9:hé 0x20EDA:mó 0x20EDC:shuì,lÇœ,sÅ« 0x20EDD:shÄ“n 0x20EDE:kÇŽng 0x20EDF:chì 0x20EE0:líng 0x20EE1:luÇ’ 0x20EE4:yÇŽn 0x20EE5:zhào 0x20EE6:chuÇŽ 0x20EE7:gÇ” 0x20EE8:qÇ�n 0x20EEA:tán 0x20EEB:fèn 0x20EEC:tú 0x20EF1:líng 0x20EF4:lÇŽng 0x20F16:lán 0x20F17:zàn 0x20F18:wù 0x20F1D:lí 0x20F1E:Ä� 0x20F1F:lüè 0x20F20:zhÇ� 0x20F21:chóu 0x20F22:jiàng,qiàng 0x20F24:jiÄ�n 0x20F29:lún 0x20F2A:yí 0x20F2C:shÄ�ng 0x20F3B:jÄ« 0x20F5C:yì 0x20F5D:nín 0x20F61:huì 0x20F63:zhÄ� 0x20F66:hÇŽn 0x20F68:yÇ�n 0x20F69:bì 0x20F6A:Ä�n 0x20F6B:xiÄ�,xiÇŽ 0x20F6C:ní 0x20F70:dÄ« 0x20F71:jiÇŽn 0x20F72:pán 0x20F75:yù 0x20F76:chuài,cuì,chuò 0x20F77:zÄ� 0x20F79:chá 0x20F7B:zhé 0x20F7C:sè 0x20F7E:pÄ“n,pÇ” 0x20F7F:gÅ« 0x20F80:zhé 0x20F86:lí 0x20F87:dÅ�u 0x20F89:chóu 0x20F8B:zuÇ� 0x20F8C:pò 0x20F8F:shÄ“ 0x20F90:lóng 0x20FA2:shù 0x20FA4:jìn 0x20FA5:líng 0x20FA8:kÄ�ng 0x20FA9:là 0x20FAB:xÅ« 0x20FAC:jìn 0x20FAE:chuÄ�n 0x20FB2:yuè 0x20FC6:mÇŽi 0x20FC7:xiè 0x20FC8:jiÅ« 0x20FC9:jì 0x20FCB:yuè 0x20FCF:jiÄ�n 0x20FD1:hán,gÇŽn,ÇŽn,hÇŽn 0x20FD3:sà 0x20FD4:huì 0x20FD5:qiào 0x20FD7:sè 0x20FD8:zuÇ� 0x20FDB:lÇ” 0x20FDC:huà 0x20FDD:chÅ« 0x20FDE:shÇŽn 0x20FDF:wò 0x20FE0:jí 0x20FE1:zhuó 0x20FE2:xián,xiàn 0x20FE3:yÄ« 0x20FE4:guó 0x20FE5:kuì,guì 0x21011:zhÅ�u 0x21014:lù,lou 0x21016:bÅ� 0x21017:shí 0x21018:yìng 0x21019:kÅ« 0x21039:zhì 0x2103A:xié 0x2103D:yè,hè 0x2103E:è 0x2103F:lÇœ 0x21040:hàn 0x21041:yè,kài 0x21046:luò 0x21047:chuò 0x21048:fàn 0x21049:zhí 0x2104A:yìng 0x2104B:wÄ›n 0x2104C:wÄ� 0x2104D:ài 0x2104E:yú 0x21051:huÄ� 0x21053:liè 0x21054:jÄ«ng 0x21055:zá 0x21067:zÄ�ng 0x21068:duì 0x2106A:jì 0x2106E:wÅ� 0x21070:jí 0x21071:xÄ« 0x21073:zhàn 0x21074:tuán 0x2108A:yú 0x2108F:liè 0x21092:zhì 0x21093:shÄ« 0x21095:lÇŽo 0x21096:lài,tà 0x21097:wÄ›i 0x21098:páo 0x21099:chí 0x2109A:yÇ�ng 0x2109B:dòu 0x2109D:dòu 0x2109F:bào 0x210A0:qiè 0x210A1:shù 0x210A3:zhí 0x210A9:liè 0x210AB:péng 0x210AD:zhÄ“ 0x210BF:Å�u,ou 0x210C2:xiè 0x210C3:jí 0x210C4:lài 0x210C5:yíng 0x210C6:cÄ“ng 0x210D6:lÄ“ 0x210DD:lùn 0x210E1:lóng 0x210E2:xì 0x210E6:lìn 0x210E9:guÄ« 0x210F3:xÄ«ng 0x210F7:lí 0x210F8:cÄ« 0x21107:qÇ�ng 0x21111:jiÄ�n 0x21112:dào 0x21113:jiÇŽn 0x21114:qìng 0x21115:xiè 0x21116:yìng 0x2111F:há 0x21121:zhe 0x21122:shÄ“ 0x21123:mí 0x21124:huán 0x21131:cù 0x21132:rú 0x21133:sÇŽ 0x21134:huò 0x21135:yÄ« 0x21137:dÄ« 0x21139:luàn 0x2113B:yì 0x21142:bò 0x21143:páng 0x21144:tán 0x21145:é,éi 0x21146:zÄ�ng 0x21147:cóng 0x21153:zhÄ�i 0x21155:xÇ� 0x21156:mÇŽng 0x21158:là 0x21159:yùn 0x21161:è 0x21165:dié 0x2116D:guÄ�n 0x21171:huàn 0x21175:shì 0x21176:jiÇŽn 0x21179:zhÄ�n 0x2117A:jí 0x2117B:huàn 0x21185:wàn 0x21186:luÇ’ 0x2118F:dòu 0x21195:liàn 0x211A3:niè,dí 0x211A4:nÇŽn 0x211A5:jiù 0x211A6:yuè 0x211A9:yÄ�o,jiÇ’ng 0x211AA:chuÄ�ng 0x211AE:cÇŽn 0x211AF:lÇ� 0x211B0:dùn 0x211B1:nÇŽn 0x211B2:nÇŽn 0x211B8:rì,guó 0x211BD:yuè 0x211C0:yóu 0x211C2:yÄ«n 0x211C4:guó,niè 0x211C8:dàng,tuó 0x211D1:zhÄ“n 0x211D2:mí 0x211D3:dié 0x211D6:zhÄ“n 0x211DA:kuÄ� 0x211DC:hán 0x211DD:sòng 0x211DE:hé 0x211DF:jÄ« 0x211E0:zhé 0x211E4:bÇ�ng 0x211E6:wéi 0x211E7:tÅ�u 0x211E9:tú 0x211EC:gÄ�ng 0x211ED:lóu 0x211EE:quán 0x211EF:hùn 0x211F0:zhuÇŽn 0x211F1:què 0x211F3:hóng 0x211F5:dàng 0x211F6:hé 0x211F7:tài 0x211F8:guÄ�i 0x211FA:yù 0x211FC:yà 0x211FF:wÄ�n 0x21200:qÅ«n 0x21205:jué 0x21206:Å�u 0x21209:quÄ�n 0x2120A:zhí 0x2120D:líng 0x2120E:wÅ«,rì 0x2120F:xìn 0x21210:dá 0x21212:yuÄ�n 0x21213:yuàn 0x21217:mò 0x21219:yóu 0x2121E:wÇ” 0x21220:zhÄ�ng 0x21223:xuÄ�n 0x21226:rÇŽo 0x21227:gÇ”n 0x21228:yù 0x2122E:xiá 0x2122F:biÇŽn 0x21230:yóu 0x21232:yÄ«n 0x21234:xuán,rÇ” 0x21235:yóu 0x21236:léi 0x2123C:tÇ�ng,tíng,zhÄ“ng,zhÇ� 0x2123F:zhÄ“n 0x21244:zài,kÅ« 0x21245:gÄ� 0x21246:lá 0x21249:què 0x2124E:jú 0x21250:chÅ«n 0x21251:dÄ� 0x21252:tún 0x21253:Ä�i 0x21257:zÇ� 0x2125A:huáng,fÄ“ng 0x2125B:yì 0x21269:bào 0x2126A:chí 0x2126D:rì 0x21274:lú,hù 0x21277:jié 0x21278:shì 0x2127A:zuÄ�n 0x21281:yì 0x21284:fèn 0x21285:fèn,biàn 0x21289:mò 0x2128D:shù 0x2129B:áo 0x2129D:pÇ� 0x2129E:píng,pìng 0x2129F:pÅ� 0x212A0:jiá 0x212A1:zhóu 0x212A3:qiÅ« 0x212A7:yÇ’u 0x212A8:tán 0x212AB:rÇ’ng 0x212AD:mì 0x212B6:yì 0x212B8:rÇ’ng 0x212BB:liè 0x212BC:qióng 0x212D9:huí 0x212DA:jì 0x212DF:gào 0x212E7:yóu 0x212E8:chÄ� 0x212E9:dé 0x212EA:yÄ«n 0x212EC:yù 0x212ED:bèi 0x212EF:bó 0x21314:qiÄ�o 0x2131A:chÇŽ 0x2131C:xÄ«n 0x2131E:chí 0x21323:zào 0x21324:kuí 0x21326:fèi 0x21329:tÄ�,dá 0x2132A:guài 0x2132D:duÅ� 0x21332:guÄ« 0x21334:zhí 0x2134C:chÇŽn 0x2134D:nÇŽo 0x21350:hú 0x21352:táo 0x21361:yì 0x21364:niè 0x21365:zhài 0x21366:huán 0x21368:dù 0x2136A:qì 0x2136B:cè 0x2136E:chuí 0x21372:dÄ� 0x21376:zhì 0x21377:gèng 0x2137B:wèng 0x21389:dù 0x2138D:chí 0x21391:àn 0x21392:kuò 0x21394:wò 0x21398:yÄ«ng 0x2139A:piÇŽn 0x213AB:zhá,qì 0x213AC:zhuÇŽ 0x213AE:sù 0x213B3:nì 0x213BA:zhú 0x213BB:chán 0x213BE:bèng 0x213BF:ní 0x213C0:zhí 0x213C1:huì 0x213D8:xià 0x213DA:zhì 0x213DB:xÄ« 0x213DE:jiÇŽng 0x213E9:duÄ« 0x213EA:fÅ« 0x213ED:jiÄ�o 0x213EE:cháo 0x213EF:bài 0x213F5:liè 0x213FC:áo 0x2140B:zÄ�o 0x2140C:chù 0x2140F:tuÇ’ 0x21412:háo,hào 0x21413:kÄ�ng 0x21414:yín 0x21416:xiàn 0x2141D:fú,fù 0x2141E:biÄ“ 0x21420:kuÄ« 0x21424:qiè 0x21425:sà 0x2143F:dÄ�,da 0x21440:yÄ›,shù 0x21444:zhÇŽng 0x21446:liáng 0x21448:duÇ� 0x2144D:láo 0x2144E:xÅ«n 0x21458:zhì 0x2145A:kÅ« 0x2145E:suì 0x2145F:wÅ� 0x21463:kÅ« 0x2146F:jiÇŽn 0x21476:jiÇŽng 0x2147B:zhuì 0x2147D:shuÇŽng 0x2147E:yú 0x21481:sà 0x21483:yù,ào 0x21484:lÇŽn 0x2148A:yù 0x2148C:qiÇŽn 0x2148D:jù 0x2148F:liè 0x21492:shú 0x21493:xiàn 0x21496:gài 0x214A2:tái 0x214A7:tiÇŽn 0x214AF:mèng 0x214B1:dí 0x214B3:mián 0x214BE:huÄ«,kuì 0x214C9:duò 0x214CD:liè 0x214D2:lài 0x214D3:yín,yÄ«n 0x214D4:lÇŽn 0x214D6:jiÄ�o 0x214D8:huò 0x214E3:guÅ� 0x214E6:zhàn 0x214ED:mÇ� 0x214F0:kuÄ« 0x214F7:duò 0x214FF:yín 0x21507:lèi 0x21515:gòng 0x2151B:tÇ�ng 0x2151C:yáo 0x2151E:wÇŽng 0x21523:jié,qiè 0x21528:xiÅ« 0x2152A:shù 0x21531:wèi 0x21534:yù 0x21541:zhÄ�n 0x21549:Ä�ng 0x2154F:sÇŽng 0x21550:chóu 0x21552:kuà 0x21556:jÇ”,féng 0x21557:hài 0x21562:miÇŽn,mÇŽn 0x21567:hàng 0x2156A:chóu 0x2156E:líng 0x21570:zÅ�ng 0x21589:kÅ«n 0x2158C:zhÅ�ng 0x2158E:zhÄ�o 0x21590:diÄ› 0x21591:gÇ’u 0x21592:yún 0x21593:dÄ�n 0x21594:nuó,nuÇ’ 0x2159B:bÇ�ng 0x2159D:rán 0x2159E:chÄ�n 0x215A2:rÇ’ng 0x215A3:yÄ«n 0x215A4:chÄ�n 0x215A7:zhì 0x215AA:guài 0x215AB:nuó 0x215AC:shÄ“n 0x215AF:sù 0x215B2:wÇ’ 0x215B3:chÇ� 0x215BA:miè 0x215BB:zhí 0x215BE:qÄ« 0x215C1:gÅ�u 0x215C6:lÇ’u 0x215C8:zÄ« 0x215CD:dÇŽng 0x215CF:xiÇŽn 0x215D1:rÇ’u 0x215D7:pÄ›ng 0x215DE:xÄ« 0x215E2:kuÄ�,bÄ›n 0x215E4:guì 0x215E5:chún 0x215E6:jiè 0x215F2:jiè,bÄ“n 0x215F3:xÄ« 0x215F5:kÅ« 0x215F7:gÅ« 0x215F8:zhà,kuÄ� 0x215F9:fàn 0x215FC:xiè 0x2160D:huán,qié 0x2160F:niÇŽo 0x21610:xì 0x2161B:cÅ« 0x2161D:gÇ”n 0x21621:xÄ« 0x21627:qiá 0x2162A:mÄ�ng 0x2162D:zhé 0x21630:juàn 0x21634:biÄ“ 0x21640:biÄ“ 0x21645:quán 0x2164B:xì 0x2164E:jiÇŽo,miÇŽo 0x21650:quán 0x21651:zhÇ� 0x21652:tiÄ�n 0x21653:kÄ�i 0x21658:sÇŽn,yì 0x2165B:zÄ« 0x21663:jié 0x2166A:bié 0x2166C:dòu 0x2166D:zuÄ« 0x21676:yÇŽn 0x21681:bì 0x21685:kuÇŽi 0x21687:yàn 0x21688:wéi 0x2168A:huÄ�n 0x2168C:hào 0x21691:gÅ�ng 0x21694:méng 0x21697:lÄ›i 0x21699:dì 0x2169B:bÇ�ng 0x2169C:huÄ�n,kàn 0x2169F:wÄ� 0x216A0:jué 0x216A8:chì 0x216AD:bÄ� 0x216AE:jiÇ” 0x216B7:dì 0x216B9:zhàng 0x216BB:dà 0x216BC:shí 0x216BD:hào 0x216CC:yè 0x216D7:bì 0x216D8:pÇ� 0x216D9:yÇŽo,yÄ�o 0x216DC:dÄ« 0x216DD:càn 0x216DE:pín 0x216DF:yuè 0x216E0:qiÄ“ 0x216E1:pÄ« 0x216F5:tuÇ’ 0x216F6:xiè 0x216FD:yè 0x21700:fàn 0x21701:guÄ� 0x21702:hù 0x21703:rÇ” 0x21709:rÇŽn,ràn 0x2170A:fÇ’u 0x2170B:huÄ�ng 0x2171A:rú 0x21722:mÇŽo 0x21725:duÄ« 0x21726:huì 0x21727:xì 0x21728:xiÅ« 0x2172B:rÇŽn 0x2172C:yÄ« 0x2172F:zhé 0x21731:jì 0x21732:gào 0x21733:yòu 0x21735:pÅ« 0x21748:chù 0x21749:cÅ« 0x2174A:zhé 0x2174B:niÇŽo 0x2174D:qiè 0x21750:chá 0x21752:niÇŽo 0x21753:suÄ« 0x21759:chá 0x2175A:chéng 0x2175B:yáo 0x2175C:dù 0x2175D:wÄ�ng 0x2175F:niàn 0x21760:mí 0x21766:nÇ’u 0x21767:xì 0x21769:yÄ�o 0x2176B:chÄ�n 0x21798:xiè 0x21799:miè 0x2179A:kÄ›ng 0x2179C:cù 0x2179E:shÄ›ng 0x2179F:pàn 0x217A0:hù 0x217A2:kè 0x217A3:xiàn 0x217A5:hóu 0x217A6:qióng 0x217A7:zÅ�ng 0x217AA:fú 0x217AB:nài 0x217AD:nì 0x217AF:kÇ” 0x217BE:nèn 0x217CD:gÄ“ 0x217D1:hóu 0x217D3:Ä�i 0x217D5:shÄ« 0x217DE:xiÅ« 0x217DF:cÅ�ng 0x217E0:jiÄ�o 0x217E2:zhá 0x217E3:xiÄ�o 0x217E4:liàn 0x217E5:qÇ” 0x217E8:shÇŽn 0x217E9:xiè 0x217EB:gòng 0x217EC:miè 0x217ED:chái 0x217EF:Ä“n 0x217F3:dòu 0x21806:kòu 0x2180A:tiáo 0x2180B:shÄ« 0x2180F:sÄ�ng 0x21812:guÄ�n 0x21816:hào 0x21817:zhì 0x21818:yàng 0x21819:tÅ�ng 0x2181A:bì 0x2181C:mó,mò 0x2181E:fú 0x21825:qiáng 0x21839:zhì 0x2183C:sÅ�u 0x2183F:niÇŽo 0x21840:juàn 0x21842:yàng 0x21844:huÄ�ng 0x21848:bÄ“ng 0x21849:mó 0x2184A:cháo 0x2184E:lÇš,lóu 0x2184F:shÄ�o 0x21850:bÇ” 0x21851:zÄ“ng 0x21852:sÄ«,xÄ« 0x21854:zuì 0x21855:yuÄ“ 0x21856:zÄ�n,cÄ�n 0x21857:luÇŽn,luàn 0x21865:qú 0x2187A:miÇŽo 0x21880:zhuàn 0x21888:dàng 0x2188A:yuÄ�n 0x21892:jÇ” 0x21895:huÇ� 0x21896:qì 0x21898:yùn,yíng 0x2189A:màn 0x2189C:mÇ’ 0x218B1:piÄ�o 0x218B3:jìn 0x218B9:yÄ�o 0x218C0:chì 0x218C1:nì 0x218C2:sÅ�u 0x218C8:shù 0x218CB:piÄ�o 0x218D4:hàn 0x218E0:yÄ�o 0x218E2:néi 0x218EA:shì 0x218EC:yuÄ�n 0x218EE:cài 0x218EF:jié 0x218F9:xiè 0x218FD:yán 0x218FE:xiÄ�o 0x2190B:xiè 0x2190C:lì 0x2190E:fàn 0x21917:zhù 0x21919:nà 0x2191B:zhuÇŽn 0x2191E:kuÄ« 0x21922:luó 0x2192B:qiÄ� 0x21936:wÄ�n 0x2193D:shÇ” 0x2193F:chèng,kÇ’ng 0x21941:yì 0x21946:hÇŽo,hào 0x21948:jiào 0x2194B:huì 0x2194D:xiào 0x2194E:cí,zÇ� 0x2195E:jì,bèi 0x21966:nÇ�,jìn 0x21968:nÇ�,jìn 0x21969:tÇ� 0x21976:jù,rú 0x21978:mìng 0x2197D:lí 0x2197F:zhòng 0x21981:xù 0x21983:qióng 0x21984:fú 0x21986:bìn 0x2198A:jì 0x2198D:qí 0x2198E:xì 0x21994:dèng 0x21995:ér 0x2199B:shú 0x2199C:tóng 0x2199D:xiÄ�o,xiáo 0x2199F:pí 0x219A8:dÇŽn 0x219AA:jí 0x219B3:xiào 0x219B7:cóng 0x219BB:bÄ«n 0x219BC:rÇ’ng 0x219CD:miàn,bÄ«n 0x219D2:miàn 0x219D4:shÅ« 0x219D5:xiáo,shÇ’u 0x219D6:bÇŽo 0x219D7:wà 0x219D9:pào 0x219E3:gÇŽi 0x219E5:hÅ« 0x219E6:héng 0x219E8:zhú 0x219E9:guÄ�i 0x219ED:guì,guÇ� 0x219F9:dài 0x219FC:bÄ«n 0x219FD:huÇŽng,huÄ�ng 0x21A00:chá 0x21A04:xià,sÄ�i 0x21A05:jú 0x21A07:yÇŽo,xiÇŽng 0x21A16:fÄ›n 0x21A17:zào 0x21A1B:fÄ“ng 0x21A22:jÅ« 0x21A23:yù 0x21A29:hÅ«n 0x21A32:jié 0x21A33:xiòng,hùn 0x21A35:nài 0x21A3B:nÇ’u 0x21A3D:shÄ›ng 0x21A3F:yù 0x21A42:huán 0x21A43:gÄ›ng 0x21A44:wÇŽn 0x21A46:tuó 0x21A47:qiÄ�o 0x21A58:yìn 0x21A5A:jiÄ�,zhuàn 0x21A61:suÇ’ 0x21A63:jié 0x21A64:xÄ« 0x21A65:wÄ›ng 0x21A69:máng 0x21A76:yáng 0x21A78:yáo 0x21A7D:máng 0x21A7E:Å�u 0x21A81:án 0x21A85:lòu 0x21A91:è 0x21A92:zÇ� 0x21A97:è 0x21A99:àn 0x21A9E:huò 0x21AA0:céng 0x21AB0:xiòng 0x21AB1:jì 0x21AB3:zuó 0x21AB5:qí 0x21ABA:zhÄ“ng 0x21AC0:jÄ« 0x21AC1:qÄ«,chèn 0x21AC2:juÇŽn 0x21AC3:níng 0x21ADF:sè 0x21AE5:hè 0x21AE6:rÇ’ng 0x21AE7:qÇ�n 0x21AEC:jÅ« 0x21AEF:lì 0x21AF5:shí 0x21AF8:nì 0x21AF9:xián 0x21AFA:fÅ« 0x21AFD:rÇ”,yù 0x21B01:xiòng 0x21B02:guì 0x21B04:jì 0x21B06:mÄ›ng,mèng 0x21B07:fÅ« 0x21B09:sài 0x21B0A:yù 0x21B0B:jiào 0x21B0C:mèng 0x21B0D:mí,lóng,mÇ� 0x21B0E:qiÄ�ng 0x21B10:yí,mí 0x21B13:yí 0x21B15:lóng 0x21B16:hÄ�n 0x21B17:nì 0x21B18:lào 0x21B19:sèng 0x21B1C:lÇ�n 0x21B1E:yù 0x21B25:nuó 0x21B2B:wù 0x21B2F:biÇŽn 0x21B32:biÇŽn 0x21B33:xuÄ�n,shòu 0x21B35:jiÄ�n 0x21B38:biÇŽn 0x21B42:dé 0x21B47:zhuÄ�n 0x21B4B:rÇ’ng 0x21B50:shuàn 0x21B58:jiÄ� 0x21B5B:huÇ� 0x21B5E:zhÄ�n 0x21B62:bài 0x21B63:liè 0x21B65:xiÄ“ 0x21B6D:jiÇŽn 0x21B6E:shÇ’u 0x21B73:kào 0x21B77:guÄ�n 0x21B78:luàn 0x21B7E:nÇ’u 0x21B7F:chÇŽng 0x21B8E:liáng 0x21B99:nài 0x21B9A:rÇ” 0x21B9E:zhì 0x21BA6:cáo 0x21BB0:lì 0x21BBB:lán 0x21BBF:chÄ�n 0x21BC1:wÄ�ng 0x21BC4:lì 0x21BC7:wù 0x21BC8:páo 0x21BC9:yòu 0x21BCB:gÄ�n 0x21BCF:Ä�n 0x21BD0:xiÅ« 0x21BD1:shuÇ�,zhuÇ� 0x21BD2:ruÇ� 0x21BD8:bÇŽn 0x21BD9:yóu 0x21BE2:huó 0x21BE5:huÄ« 0x21BE8:zuò 0x21BE9:xiÄ�o 0x21BEB:mián 0x21BF0:gà 0x21BF1:yuÇŽn 0x21BF3:bò 0x21BF4:chào 0x21BF5:tuÇ�,kuì 0x21BF7:bò,kòu 0x21BFD:gà 0x21BFF:tiÄ�o 0x21C00:ná 0x21C05:hú 0x21C06:niè 0x21C0B:huí 0x21C0C:lÇ’u 0x21C0E:tí 0x21C10:qiào 0x21C11:qiáo 0x21C12:zhÇ’ng 0x21C16:dÄ« 0x21C1A:lín 0x21C1D:quán 0x21C1E:zhuÄ�n 0x21C20:léi,luán 0x21C22:xié 0x21C25:rén,yí 0x21C28:dÄ�ng 0x21C2A:dÅ« 0x21C2B:niÇŽn 0x21C2F:shÇ�,diÇŽo,bÄ›i 0x21C32:xián 0x21C39:zhí 0x21C3D:ài 0x21C3E:cÄ« 0x21C3F:pú 0x21C41:shÇ� 0x21C45:qÅ« 0x21C46:shÇ” 0x21C47:diÄ�n 0x21C49:xiÇŽo 0x21C4A:shuÇ� 0x21C4C:huán 0x21C50:yí 0x21C51:juÄ�n 0x21C54:zhÇ�,qì 0x21C5C:zhào 0x21C63:xù 0x21C6F:lòng 0x21C71:zhù 0x21C73:suÇ’ 0x21C77:dié 0x21C7A:qú 0x21C7C:kè,kuà 0x21C7D:hÅ« 0x21C7E:jÅ« 0x21C80:qÇ�ng 0x21C8D:bÄ«ng 0x21C95:tì 0x21C97:jué 0x21C9A:qiú 0x21CA3:jiàng 0x21CAA:yùn 0x21CAD:mèi 0x21CAE:pÄ« 0x21CB0:qú 0x21CBC:mì 0x21CBF:tì 0x21CC2:kài 0x21CC4:bÇ� 0x21CC6:qÅ«,qù 0x21CCF:tiÄ�o 0x21CD1:chù 0x21CD8:jú 0x21CDA:xÄ« 0x21CDE:lìn 0x21CED:chÇ� 0x21CEE:jÄ« 0x21CF4:lú 0x21CF8:lì 0x21CFE:jué 0x21D05:zhÅ« 0x21D06:lù 0x21D0E:niè 0x21D14:quán 0x21D2D:yà 0x21D2F:è 0x21D31:hù,jié 0x21D40:máng 0x21D49:wù 0x21D4C:chÄ� 0x21D51:qÄ«n 0x21D52:jié,qÇ� 0x21D53:hóng 0x21D55:dÄ�n 0x21D56:Ä›n 0x21D57:zè 0x21D58:hù 0x21D59:àng 0x21D5A:jiè 0x21D5B:fù 0x21D5C:yòng 0x21D5E:fÄ“ng 0x21D6C:mù 0x21D76:sè 0x21D77:cóng 0x21D7B:kÄ�ng 0x21D82:yào 0x21D83:ài 0x21D84:bÄ�o 0x21D86:pÇ’ 0x21D88:shÇ� 0x21D89:fàn 0x21D8B:jú 0x21D8C:pí 0x21D8E:wèi 0x21D8F:kÅ« 0x21D90:qié 0x21D91:gÄ�n 0x21DA2:kuàng 0x21DA3:suì 0x21DA4:bÄ“ng,yòng 0x21DA5:jiÄ� 0x21DA6:yà 0x21DAA:kàn 0x21DAB:niè 0x21DAD:xíng 0x21DAF:xì 0x21DB1:lìn 0x21DB2:duÇ’ 0x21DB4:chÇŽn 0x21DC8:shì 0x21DCB:duì 0x21DCD:jiÄ�ng 0x21DCE:yÇ” 0x21DCF:lù 0x21DD0:Ä›n 0x21DD3:gÇ” 0x21DD5:wÄ›i 0x21DD6:chÄ“ 0x21DD7:huàn,huán 0x21DD8:bié 0x21DDB:hàn 0x21DDC:tuí 0x21DDD:nà 0x21DDE:qÇ� 0x21DE0:tóu 0x21DE1:yuÄ�n 0x21DE2:wáng 0x21DE4:wú 0x21DE5:gào 0x21DE8:kÄ“ng,xíng 0x21DEA:yí,níng 0x21DF8:xiÄ�o 0x21DFA:guÇ� 0x21DFB:yà 0x21DFC:suì 0x21DFD:sÇ’ng 0x21DFF:zhuó 0x21E02:tÅ«,tú 0x21E03:xiÇŽn,jiÇŽn 0x21E08:zè 0x21E09:lì 0x21E0C:zhù 0x21E0E:jié 0x21E11:tì 0x21E14:xié 0x21E15:qióng 0x21E17:yà 0x21E18:jÅ« 0x21E1B:yín 0x21E1C:zhí 0x21E1E:kÇŽn 0x21E1F:zÄ« 0x21E21:kÄ“ 0x21E23:niè 0x21E24:qiáng 0x21E25:wÇŽn 0x21E26:zé 0x21E28:jÅ« 0x21E2A:zì 0x21E44:yà 0x21E47:lín 0x21E49:qí 0x21E4E:huí 0x21E53:qì 0x21E55:yáng 0x21E56:suì 0x21E58:qÇ� 0x21E59:guÄ« 0x21E62:qìn 0x21E63:Ä“ 0x21E65:zuò 0x21E68:zè 0x21E69:qì 0x21E6A:jí 0x21E6C:tuó 0x21E6D:dié 0x21E6F:huì 0x21E70:máo 0x21E72:xÇ” 0x21E75:hóu 0x21E76:yÇŽn 0x21E77:xiáng 0x21E78:cÅ�ng 0x21E79:hú 0x21E7C:àn,yÇŽn 0x21E7E:bÇ�ng 0x21E87:duÇ’ 0x21E90:zhÇ” 0x21E91:dié 0x21E92:yÅ�u 0x21E93:qÇ� 0x21E94:shí 0x21E95:xÅ«n 0x21E96:yÅ�u 0x21E97:kÄ�n 0x21E98:qiÇŽo 0x21E9B:qiÄ�ng,huà 0x21E9C:pén 0x21E9F:quán 0x21EA1:yíng 0x21EA7:shÄ� 0x21EAB:tÄ�o 0x21EAD:hòng 0x21EAE:pÇ� 0x21EAF:yáo 0x21EB4:tú 0x21EB5:chái 0x21EB7:xià 0x21EB8:qí 0x21EBA:qióng 0x21EBD:jìn 0x21EC8:zhÄ“n 0x21ECC:zhÅ« 0x21ECE:xÄ« 0x21ED0:wÄ“ng 0x21ED1:zhÇ’ng 0x21ED5:suì 0x21ED8:kÄ“ 0x21ED9:kuò 0x21EDA:kÇŽng 0x21EDD:cháo 0x21EDE:bì 0x21EDF:mò 0x21EE0:zhù 0x21EE1:hàn,yán 0x21EE2:yÇ” 0x21EE3:yí 0x21EE4:má 0x21EE7:qì 0x21EE8:gùn 0x21EE9:màn 0x21EEA:liáo,liù 0x21EEB:lín 0x21EEC:zú 0x21EED:lÄ›i 0x21EEE:hù 0x21EEF:chuÇŽng 0x21EF0:qì 0x21EF1:léi 0x21F01:chÄ« 0x21F03:pó 0x21F04:dié 0x21F0A:lÄ›i 0x21F0E:yÇ� 0x21F13:diàn 0x21F16:dÅ«n 0x21F17:gÄ�o 0x21F18:hÅ« 0x21F1A:xiÄ�o 0x21F1B:gá 0x21F1C:pÄ“ng 0x21F2C:shÄ›n 0x21F31:wéi 0x21F3B:duì 0x21F3C:cháo 0x21F3D:yÇ�n 0x21F3E:kuài 0x21F3F:kÅ« 0x21F41:zuì 0x21F42:gÇ” 0x21F45:yùn 0x21F46:zhì 0x21F49:jì 0x21F4A:chÄ“ng 0x21F56:xiè 0x21F5B:zuÇ� 0x21F5C:án 0x21F5D:hÄ�o 0x21F60:pÇ’ 0x21F62:dí 0x21F63:yè 0x21F67:náo 0x21F71:jié 0x21F72:bàng 0x21F73:lÇŽn 0x21F74:cáng 0x21F76:bì 0x21F7B:zhÇŽn 0x21F7C:qì 0x21F82:náo 0x21F85:lÇœ 0x21F87:kuàng 0x21F89:mó 0x21F8B:lÄ›i,léi 0x21F8C:páo 0x21F92:lì 0x21F93:céng 0x21F95:dàng 0x21F96:lÄ›i 0x21F99:è 0x21F9B:bèng 0x21F9C:jué,huò 0x21FA5:xuán 0x21FA6:niè 0x21FA8:hài 0x21FAE:xiÇŽn 0x21FB0:jiÇŽn 0x21FB1:mí 0x21FB2:niè 0x21FBB:cáng 0x21FBC:sÇ’ng 0x21FBD:zÄ“ng 0x21FBE:yì 0x21FC2:chóng 0x21FC4:cáng 0x21FC9:lÄ›i 0x21FCA:nuó 0x21FCB:lì 0x21FCE:lí 0x21FCF:luó 0x21FD3:tÇŽng 0x21FD6:niè,yà 0x21FD7:niè 0x21FD9:jÄ« 0x21FDB:lÄ›i 0x21FDD:nàng 0x21FE0:lín 0x21FE1:líng 0x21FE4:xián 0x21FE5:yù 0x21FE7:zÄ�i 0x21FE8:quÇŽn 0x21FE9:liè 0x21FEF:yù 0x21FF0:huÄ�ng 0x21FFA:nÇŽo 0x21FFC:xùn 0x21FFE:jú 0x21FFF:huò 0x22001:yì 0x2200A:xÄ« 0x2200B:sè 0x2200C:jiÇŽo 0x2200D:yÅ�ng 0x22015:shÄ« 0x22016:jÄ«ng 0x22017:wàn 0x22018:yÄ› 0x22019:jiÅ« 0x2201C:gÇ’ng 0x22021:huÄ«,zuÇ’ 0x2202A:Ä›r 0x22035:hàn 0x2203C:fú 0x22040:fú 0x22041:zhuó 0x22042:jÄ«,jì 0x2204F:bÄ�ng 0x22052:qí 0x22053:shÇ�,hài 0x22055:diÇŽo 0x22056:pèi 0x22057:xiÇŽn,gàn 0x22058:sÄ�n 0x2205D:cháng 0x2205E:yuÄ“ 0x22060:gÅ�ng 0x22062:wÅ« 0x22064:fÄ“n 0x22067:chÇŽn 0x22069:nèi 0x2206A:jué 0x2206C:zhÇŽo 0x2206E:qián 0x22071:ÇŽo 0x22076:wÇŽng 0x22077:zhÅ�ng 0x22079:huÄ�ng 0x2207B:bù 0x2207C:zhÇ” 0x2207D:bì 0x2207E:chÄ�o 0x2207F:zhÄ“ng 0x22080:fú 0x22081:kÅ�u,qú 0x22083:zuó 0x22084:xuàn 0x22086:fù 0x2208A:yÇŽo 0x2208D:bÅ� 0x2208F:bèi 0x22090:xié 0x22091:shì 0x22092:yí 0x22094:hóng 0x22095:cuì 0x22097:yì 0x22098:zhuÄ�n 0x2209D:chì 0x220A4:pÅ�,lù 0x220A8:yín 0x220B1:yuàn 0x220B6:jiÅ�ng 0x220B9:mào 0x220BA:qiàn 0x220BC:yì 0x220C0:wú 0x220CD:bÄ“i 0x220CE:huò 0x220CF:cóng 0x220D0:kÅ�ng 0x220D5:tà 0x220D7:hàn 0x220D8:qiàn 0x220DC:zhí 0x220E2:sè 0x220E5:qiÄ�n 0x220E6:guÇ’ 0x220E9:gÇ”n,juÇŽn 0x220EC:jiÄ�n 0x220ED:zhÅ�ng 0x220EE:miÇŽn 0x220EF:guÇ� 0x220F0:shì 0x220F1:móu 0x220F2:è 0x220F3:bÇŽ 0x220F4:là 0x220F8:zhòu 0x220FA:jí 0x22100:zÇŽo 0x22104:zhÄ� 0x22105:yì 0x22107:gÇ’u 0x2210A:guÄ« 0x2210B:yÄ«ng 0x2210C:shÇŽi 0x2210D:hé,gé 0x2210E:bàng 0x2210F:mò 0x22110:méng 0x22113:wù 0x22114:dài 0x22117:jiÇ’ng 0x2211C:hàn 0x2211F:tÅ�ng 0x22120:kÅ�u 0x22121:lí 0x22122:zhì 0x22123:huì 0x22124:zÇŽn 0x22126:diÇŽo 0x22127:cù 0x22131:zhì 0x22133:kuÇŽ 0x22135:xiàng 0x22136:huà 0x22137:liáo 0x22138:cuì 0x22139:qiÄ�o 0x2213A:jiÇŽo 0x2213C:xÅ« 0x2213D:èr 0x2213F:tuÅ� 0x22140:tán 0x22141:zhì 0x22148:nÇŽo 0x22149:mào 0x2214A:dì 0x2214B:céng 0x2214E:jiÇŽo 0x2214F:lián 0x22151:shÄ� 0x22152:dàn 0x22155:suì 0x22156:lián 0x22157:guò 0x2215A:biÇŽo,biÄ�o 0x2215C:cì 0x2215D:diàn 0x2215E:lÇœ 0x2215F:nÇ� 0x22160:yÇŽn 0x22161:lán 0x22164:gài 0x22165:chú 0x22169:bì 0x2216A:zú 0x2216B:huì 0x2216D:lÇŽi 0x2216E:xián 0x2216F:fèn 0x22170:hè 0x22179:yào 0x2217A:zhÇŽn 0x2217C:néi 0x2217E:luÇ’ 0x22180:yuán 0x22182:néng 0x22189:rÄ›n 0x2219C:gé 0x2219E:jiÇŽn 0x2219F:píng 0x221A3:biè 0x221A6:jiàn 0x221A9:bìng 0x221AF:mì,xuán 0x221B0:hù 0x221B4:diÇŽo 0x221B6:yÅ�u,zÄ« 0x221B7:yÄ�o,miào 0x221B8:bÄ“ng 0x221BA:chén 0x221BB:jÄ«,duì 0x221BD:yÄ�o 0x221C7:guÄ�n 0x221C8:yàn 0x221D5:chÇ� 0x221D7:shà 0x221D8:yÇŽn 0x221D9:yì 0x221DA:yì 0x221DB:chè,chÇ� 0x221DE:hàn 0x221DF:huÄ�ng 0x221E4:shuì 0x221E5:suì 0x221E6:rén 0x221E7:tán 0x221E8:zhÇ� 0x221EA:fàn 0x221EB:fÄ›ng 0x221F0:tán 0x221F2:mí 0x221F3:pí 0x221F4:bù 0x221F5:nà 0x221F6:tián 0x221F7:bá 0x221F8:yì 0x22202:yÇŽn 0x22204:tiÄ�o 0x22206:yáo 0x22207:shÄ›n 0x22208:kÄ“,wÄ� 0x22209:tóng 0x2220B:xuÇŽn 0x22213:yòu 0x22215:bài 0x22219:xiá 0x2221A:lÇš 0x2221B:kùn 0x2221C:zÄ�ng 0x2221D:qiú 0x22220:cù,là 0x22221:zuÄ« 0x22222:lÇ’u 0x22224:xiá 0x2222F:shÄ“n 0x22232:pú 0x22234:jÄ«ng 0x22235:qiÄ�ng 0x22236:yì,sÄ« 0x22238:niè 0x22239:duÄ«,tuí 0x2223B:jié 0x2223C:suì 0x2223D:zhàn 0x2223E:cÅ�u 0x22241:bÄ“ng 0x22242:guÄ�n 0x22243:shÄ› 0x22245:jìn 0x22246:dì 0x22251:dÄ�n 0x22253:nÇŽi 0x22255:nóu 0x22257:jí 0x22258:yán 0x2225A:nòu 0x2225C:dù,tú 0x2225D:wèi 0x2225E:piÄ�n 0x22262:hú 0x22264:jià 0x22265:yè 0x22266:jÇ”n 0x22267:lán,lián 0x22268:là 0x22269:yÄ«n 0x2226D:tuí 0x22275:nÇŽo 0x2227A:zÇ” 0x2227F:mà 0x22280:sÄ«,mà 0x22281:zhì 0x22284:huÄ« 0x22285:zhuì 0x22287:huì 0x2228D:chú 0x2228F:chè 0x22292:xiÅ« 0x22293:lán 0x22295:cÅ�ng 0x22296:shèn 0x22297:mò 0x22298:yÄ« 0x22299:yáo 0x2229A:xÇ� 0x2229B:zuÇ� 0x2229C:bìng 0x222A7:yú 0x222A9:lù 0x222AE:tuí 0x222AF:wÄ›i 0x222B1:fén 0x222B2:shÄ›n 0x222BB:liáo 0x222C2:shÇ” 0x222C3:dÇŽn 0x222C4:juÇŽn 0x222C5:yú 0x222C6:xìn 0x222C7:yáo 0x222C8:sÅ« 0x222D2:huó 0x222D4:qiÄ�n 0x222DA:má 0x222DD:kÇŽi 0x222E1:lÇ” 0x222E3:yÅ�u 0x222EE:xiàn 0x222F9:wú 0x222FB:yÇ�n 0x222FC:xÄ« 0x222FF:zhÄ�i 0x22300:xiè 0x22304:qú 0x22308:lí 0x2230D:qiÄ�n 0x22314:líng 0x22315:luán 0x2231A:chÄ�n 0x22326:zhèng 0x22328:yán 0x22332:yìn 0x22333:kuí 0x22337:qÅ« 0x22339:fú 0x2233B:yù 0x22341:qí,bì 0x22346:qì,qiè 0x22347:jì 0x22348:yuÄ�n,zàng 0x2234E:gào 0x2234F:juàn 0x22351:qí 0x22353:gÇŽi 0x22355:quàn 0x2235A:wèi 0x22367:zhì 0x2236B:jiÇŽn 0x2236D:sì 0x22370:yì,zé 0x22371:qiÄ�n 0x2237C:lì 0x2237F:zÄ�ng 0x22380:yì 0x22382:cái 0x22383:yì 0x22384:gÄ“ 0x22386:dié 0x22388:zhÄ« 0x22389:yì 0x2238B:zÄ�i 0x2238C:dài 0x2238E:sù 0x22394:jié 0x22395:chèn 0x22396:qú 0x22398:hàn 0x22399:xián 0x223A0:quán,juàn 0x223A1:jié 0x223A5:juàn 0x223AA:dàn 0x223AD:jÄ«n 0x223B4:bÄ«ng 0x223B5:hú 0x223B9:jué 0x223BB:yú 0x223C3:lÇ� 0x223C4:qiáng 0x223C5:shuÇ� 0x223C6:kÅ« 0x223C8:zhÄ›n 0x223CD:fú 0x223CE:shÄ“n 0x223D2:chuí 0x223D5:tóng 0x223D7:yì 0x223D9:yáng 0x223DC:tuó 0x223DD:zhÅ�u 0x223DE:jí 0x223E4:xùn 0x223E6:shÄ›n 0x223E7:xuÄ�n 0x223ED:liú 0x223EE:yuÄ�n 0x223EF:hú,shÇ� 0x223F0:zhèng 0x223F3:pÄ“ng,bÄ“ng 0x223F7:jué 0x22402:zhì 0x22403:piÄ�n 0x22404:yuàn 0x22406:jiÄ�n 0x2240A:páng 0x2240E:zhuàn 0x22410:xián 0x22412:bÄ“ng 0x22414:cÅ�ng 0x22416:mò 0x2241A:guó 0x2241E:chéng 0x2241F:qiÄ�o 0x22426:bì 0x22429:qiÇŽng 0x2242B:zhÅ�u 0x22432:fán 0x22433:biÄ“ 0x2243E:bó 0x2243F:rÇŽng,rÇ’ng 0x22445:dÇ�ng 0x22446:quán 0x22447:jiù 0x22448:yáo 0x22453:xiá 0x22456:zÇŽo 0x2245D:dÄ�n 0x2245F:wÇ” 0x22460:tuó 0x22462:hÅ« 0x22467:xÄ« 0x2246C:lái 0x2246E:fÄ“i 0x22479:hú 0x22486:xiÄ�n 0x22489:shÇŽn 0x2248D:fèi 0x22490:cuò 0x22492:fú 0x22494:chù 0x2249D:diÅ« 0x2249E:làn 0x224A9:xÇ� 0x224AF:biÄ�o 0x224B0:yù 0x224B1:suì 0x224B2:xÇ� 0x224B7:póu 0x224B9:shÇŽn 0x224BE:jiào 0x224C0:yì 0x224C3:wán 0x224C4:jÇ� 0x224C6:wán 0x224C7:tuì,nà 0x224CB:àng 0x224CD:tiÄ�n 0x224CE:chí 0x224D2:rán 0x224D4:sà 0x224D5:yín 0x224D6:pÄ« 0x224D7:cÇ� 0x224D8:tóng,tÄ�o 0x224D9:yÇ�n 0x224DC:gé 0x224DD:tiÄ�o 0x224DE:zhÄ“ng 0x224DF:zhòu 0x224E1:yí,tí 0x224E2:kuà 0x224E3:sÅ�ng 0x224E7:dì 0x224EC:xié 0x224EE:xiÄ�o 0x224EF:guàng,wÇŽng 0x224F0:tuÇ’ 0x224F1:fÄ“ng,fèng 0x224F2:wú,hú 0x224F5:xiù 0x224FF:yóu 0x22501:líng 0x22502:yàn 0x22505:dÅ�ng 0x22506:qì 0x22507:táo 0x22508:hán 0x2250A:chí 0x2250B:sÅ�ng 0x22511:quÇŽn 0x22514:hàn,jí 0x2251F:rÇ’u,niÇ” 0x22520:qì 0x22521:kÄ�i 0x22522:yú 0x22523:chÄ�,shà 0x22524:chèng 0x22525:yù 0x22527:bìng 0x22529:cÅ�ng,sÇ’ng 0x2252A:zhÅ« 0x2252C:yù 0x22531:jué,què 0x22532:liù 0x22533:sÄ�o 0x22534:yù 0x22545:shuài 0x2254B:yuàn 0x2254E:zhÄ�ng 0x22551:shuài 0x22553:chÇ” 0x22554:zhÄ�ng,zhàng 0x22555:sÇŽn,sàn 0x22556:xiÄ�n 0x22558:cuÄ« 0x22559:mÄ›ng 0x2255A:dí 0x2255E:zhì 0x2255F:ào 0x22566:xiÅ« 0x22568:pián 0x2256A:jiào 0x2256B:kuÇŽn 0x2256C:sà 0x2256D:xiàn 0x2256E:zhà 0x2256F:diàn 0x22577:yí 0x2257A:huì 0x2257B:shàn 0x22584:chóng 0x22585:yí 0x22586:xiè 0x22587:zhì 0x22588:tiào 0x2258A:pÄ«ng 0x2258B:xián 0x2258E:xiÄ�n 0x2258F:sù 0x22591:cuán 0x22597:sÇ’ng 0x2259B:hÄ“i 0x2259D:xiàn 0x2259F:yóu 0x225A1:yù 0x225A4:tái 0x225A6:jué 0x225A7:nàng 0x225A9:diÄ�n 0x225AB:yì 0x225AC:bì 0x225B3:xÅ« 0x225B4:yì 0x225B5:rù 0x225B7:gÅ�ng 0x225BA:yì 0x225BF:zhì 0x225C0:xÄ«n 0x225C2:jì 0x225C4:xià 0x225C8:zhÄ�o 0x225C9:nè 0x225CA:xiè,jiá 0x225CE:yì 0x225EB:fÇ” 0x225ED:shè 0x225EF:yuán 0x225F0:fÇŽn 0x225F2:fÅ« 0x225F3:wù 0x225F4:xÄ« 0x225F5:hÇ’ng 0x225F9:jì 0x225FA:chàng 0x225FF:mò 0x22600:pèi 0x22603:mú,wÇ” 0x22604:qiú 0x22605:mào,róu 0x22607:dá,dàn 0x22609:xiá 0x2260A:shÄ“n 0x2260B:tè 0x2260C:hóng 0x2260D:bì,fú 0x2261D:nÇ� 0x2261F:qiáo 0x22627:ruÇŽn 0x22638:jiàng 0x22639:chÄ� 0x2263A:mÇ�,mí 0x2263D:yì 0x2263F:suÅ� 0x22641:wù 0x22642:xuÄ�n 0x22645:xí 0x22647:yÇ� 0x22650:náo 0x22653:wèi 0x2266E:kàn 0x22671:lòng 0x22672:lÇš 0x22673:zhuÇŽng 0x2267A:zhì 0x2267C:xìng 0x2267E:gÄ›ng 0x2267F:jìn 0x22680:xiàn 0x22681:jì 0x22682:cuò 0x22684:láo 0x22685:fÄ›n 0x22686:jù 0x2268B:miào 0x2268C:xiá 0x22691:sù 0x226A8:zhì 0x226AA:hù 0x226AB:kòu 0x226AD:suÇ’ 0x226AE:nì 0x226BA:tÄ“ng 0x226BB:zhù 0x226C1:dá,chè 0x226C3:qiú 0x226C4:yà 0x226C6:xián 0x226C9:nèi 0x226CD:zhÇ� 0x226CE:bié 0x226D2:chÇ’ng 0x226D3:lán 0x226D4:dÅ�ng 0x226D5:qÅ«n 0x226D6:xiàng 0x226D8:xiáo 0x226D9:wÇŽn 0x226DA:rù 0x226DB:wàng 0x226DC:nì 0x226DE:bÄ�i 0x226DF:yà 0x226E5:sÄ« 0x226E6:yÇ�n 0x226E8:yù 0x226EE:lí 0x226EF:huò 0x22717:bàng 0x22723:xÄ« 0x22725:jiÅ« 0x22728:xiè,dié 0x22729:qiÄ�n 0x2272A:nuò,ruò 0x2272B:xÇ�ng 0x2272C:duó 0x2272D:jÇ� 0x2272E:wÇ” 0x2272F:mú,móu,mÇ” 0x22730:yàn,yÇŽn 0x22731:qì 0x22732:ná 0x22733:chì 0x22734:hóu 0x22736:sào 0x22738:náo 0x2273B:chÄ›ng 0x2273C:chÄ›ng 0x2273D:kuí,kuÇ� 0x2273F:jià 0x22740:tú 0x22741:hÅ�ng 0x22742:dú 0x22745:xiá 0x22746:zhòng 0x22747:huò 0x22748:chóng 0x22749:dá 0x2274C:mào 0x2274D:yào 0x22753:juÄ�n 0x2276C:shì 0x2276F:yín 0x22773:gÇ” 0x22774:wù 0x22778:guò 0x22779:tì 0x2277B:hÅ�ng 0x22787:rÄ› 0x22789:yí 0x2278B:tÇ”n 0x2278F:qióng 0x22790:hài 0x22792:qì 0x22795:huò 0x22796:tì 0x22797:pÄ«,bÄ« 0x2279A:gÄ›ng 0x2279C:xiè 0x2279E:mì,mí 0x2279F:gào 0x227A0:tÄ� 0x227A1:xiÇŽng 0x227A3:shÅ« 0x227A6:fú 0x227AC:zhuÄ�n 0x227AD:liù 0x227C5:yóu 0x227CA:chÄ›ng 0x227CB:duÄ« 0x227E2:lí 0x227E3:yàng 0x227E4:lí 0x227E7:lÇ” 0x227E8:mÇ” 0x227E9:suì 0x227EA:ài,xì 0x227ED:kòu 0x227EF:zhé,shì 0x227F0:ài 0x227F1:téng 0x227F3:lÇœ 0x227F4:tuí 0x227F5:bÄ« 0x227FE:huì 0x227FF:huán 0x2281B:kuò 0x2281D:xÄ«n 0x22821:sào 0x2282B:shù 0x2282C:què 0x2282D:bÄ� 0x2282E:tuì 0x22832:fù 0x22833:biÄ“ 0x22835:tÇŽng 0x22837:xiàng 0x22839:sÄ«,xÄ« 0x2283A:bó 0x2283C:mái 0x2283D:dàng 0x2283F:guì 0x22840:hÄ“i 0x22841:xÄ« 0x22842:dàng 0x22843:yì 0x22845:bÄ« 0x22847:gÅ« 0x22848:cuì 0x22849:sè 0x2284D:gé 0x2284E:yù 0x2284F:nÇŽ 0x22851:lì 0x22852:zhì 0x22870:zhào 0x22874:jÄ« 0x22875:ruÇŽn 0x22879:chòng 0x22882:jié 0x2288C:chàng 0x2288D:zhé 0x22892:sÅ«,sù 0x22893:yÅ�ng 0x22896:qì 0x22897:zhuó 0x2289A:kài 0x2289C:yè 0x2289E:qì,jì,kuài 0x228B9:xiòng 0x228C9:yÄ« 0x228CA:chÇ’u 0x228CE:tuÇŽn 0x228CF:ài 0x228D0:pÄ«n 0x228D3:liè 0x228D4:mián 0x228D5:ài,chÄ« 0x228D7:mÇ’ 0x228D8:wèi 0x228D9:yìng 0x228DA:nÇ� 0x228DE:bó 0x228E0:liù 0x228F3:ruì 0x228F5:chú 0x228FB:lǘ 0x228FC:chá 0x228FF:chù 0x22901:sào 0x22902:lí 0x22904:sÅ�ng 0x22906:lì,là 0x2290B:xì 0x2290D:yÄ�n 0x2290E:cuÅ�,zuÇ’ 0x22910:liú 0x22918:méng 0x2291A:zhàn 0x22924:zhuàng 0x22927:miÇŽo 0x22929:lì 0x2292B:jÇ” 0x2292F:xiè 0x22930:xiè 0x22931:lÇ’ng 0x22932:lóng 0x22942:téng 0x22943:zhù 0x2294B:chán 0x2294C:xiÇŽn 0x2294F:yíng 0x22950:pèi 0x22958:xié 0x2295A:jiào 0x2295E:chÅ�ng 0x22973:hÄ“ 0x2297D:tÇ”n 0x22985:hÇ’ng,zhuàng 0x22988:mán 0x2298A:jÄ«n 0x2298C:qú 0x2298D:dÇ’u 0x2298E:qiú 0x2298F:zÄ�i 0x22991:shÄ“ng 0x22992:zÄ�i 0x22995:yÇ�,zhí 0x2299A:huà 0x2299F:kÄ�n 0x229B0:yuè 0x229B1:nì 0x229B2:sÄ« 0x229B4:wÇ’ 0x229B8:cán 0x229BA:jiÄ�n 0x229BC:miè 0x229BD:sháo,qÄ« 0x229BF:rÇ’ng 0x229C0:gÄ�n 0x229C5:qiáng 0x229C7:shú 0x229C8:zhuó 0x229CF:shÄ« 0x229D1:tì 0x229D6:zhá 0x229D7:zhÄ�n 0x229DD:fèn 0x229DE:miè 0x229E0:zè 0x229E4:zhì 0x229E5:qiÄ�n 0x229E6:hàn 0x229E7:gé 0x229EE:cán 0x229F0:guó 0x229F1:jiÄ�o 0x229F3:yÅ�ng 0x229F4:áo 0x229FB:zhá 0x229FD:xì 0x22A01:xÅ« 0x22A02:wÇ” 0x22A0F:jué 0x22A10:jí,jÄ« 0x22A12:chì 0x22A14:wÇŽn 0x22A16:miè 0x22A17:zéi 0x22A1C:jié 0x22A1D:shí 0x22A1F:xÄ«,xì 0x22A21:è 0x22A25:hù 0x22A26:hù 0x22A28:lì 0x22A2B:chù 0x22A2E:yÄ« 0x22A2F:mÇŽo 0x22A30:xÅ« 0x22A31:zhÅ�ng 0x22A33:yì 0x22A3A:liáo 0x22A3F:jiÄ�n 0x22A40:jiÇŽn 0x22A41:jú 0x22A44:zhù 0x22A48:wÇ” 0x22A4F:kè 0x22A50:kÄ› 0x22A51:lì 0x22A52:bÇ� 0x22A53:gé 0x22A55:xÅ« 0x22A56:shÄ� 0x22A57:líng 0x22A58:kÄ“ 0x22A5E:bó 0x22A5F:biÄ�n 0x22A60:shuÄ�n 0x22A61:qí 0x22A62:shàn 0x22A66:jÄ« 0x22A68:qiÇŽo,xiÇ” 0x22A6E:yì 0x22A6F:jué 0x22A70:zhÇŽng 0x22A72:xìn 0x22A77:tuÅ� 0x22A78:hài 0x22A79:xià 0x22A7B:tuó 0x22A7C:yí 0x22A83:cù 0x22A87:jiÄ�ng 0x22A88:nán 0x22A8B:pÄ›ng,féng,bàng 0x22A8D:jié,jiÄ� 0x22A8E:xuÄ“ 0x22A8F:hú,gÇ” 0x22AA5:yÇ’u 0x22AA6:nÇ” 0x22AA7:yè 0x22AAA:yìn 0x22AAC:kÇ’ng 0x22AB6:xiÄ�o 0x22AB7:xiÄ�ng 0x22ABC:náo 0x22ABE:zhàng 0x22AD0:jié 0x22AD3:nÇ” 0x22AD4:shàn,quán 0x22AE2:jiá 0x22AE7:zhÇ’u 0x22AE8:rÇ’ng,rÄ“ng 0x22AEB:lù 0x22AEC:sà,cuÅ�,shÄ� 0x22AED:nù 0x22AEF:bó 0x22AF0:zhé 0x22AF2:qÇ�n 0x22AF4:cÄ« 0x22AF5:zú 0x22AF7:wÇ’ 0x22AF8:wÇ”,wÅ« 0x22AFB:nié 0x22AFF:xiÄ�n 0x22B00:hóng 0x22B2B:tìng 0x22B2C:jÇ�n 0x22B31:jié 0x22B32:hè 0x22B33:tÅ« 0x22B34:zhé,niè,dié 0x22B35:pÄ«n,pÄ�n,biàn,fÄ�n 0x22B36:jìn 0x22B37:nàn 0x22B3C:dùn 0x22B3E:xÄ« 0x22B3F:xiè 0x22B41:xì 0x22B42:láo 0x22B43:duÇŽn,dòu 0x22B44:jì 0x22B45:chÄ� 0x22B46:chÅ�u 0x22B48:gÄ�ng 0x22B4E:xiáng 0x22B4F:dÇŽo 0x22B65:biàn 0x22B66:xiÄ�o 0x22B67:xÄ«n 0x22B81:yÇ” 0x22B82:xián 0x22B83:lí 0x22B84:qiÇŽn 0x22B87:mÄ›i 0x22B89:qiÄ�o 0x22B8A:yà 0x22B8C:qiÄ�,jié 0x22B8D:qiòng 0x22B8F:bàng 0x22B90:zhÄ“ng 0x22B9A:zè 0x22B9B:shuàn,tuán 0x22B9E:sào 0x22BC5:lù,jué 0x22BC9:xié 0x22BCB:fÇ” 0x22BCC:zhài 0x22BE9:zè 0x22BEB:duàn,wÇŽn 0x22BED:dèng 0x22BEE:yù 0x22BF0:lÇœ 0x22BF2:wàn 0x22BF3:xué 0x22BF4:jiÇŽo 0x22BF5:yuÄ› 0x22BF6:zhì 0x22BF7:wÄ›i,huÄ« 0x22BF9:gé 0x22BFA:jÇ” 0x22BFC:yÇŽn 0x22BFD:cuò 0x22BFE:mào 0x22C06:fú 0x22C07:Ä�i 0x22C0A:xuÄ�n 0x22C0C:gÄ�ng 0x22C0D:Ä�n 0x22C12:jí 0x22C18:pí 0x22C19:zhÇ� 0x22C1C:nuó 0x22C3F:pàn 0x22C41:yí 0x22C44:jié 0x22C46:zÄ« 0x22C48:jià 0x22C49:wÇŽi 0x22C4C:jià 0x22C5F:chÇŽn,chÄ« 0x22C61:suÇ’ 0x22C62:suÇ’,sè 0x22C63:jí 0x22C64:sÇ’ng 0x22C66:tÄ« 0x22C67:pÄ« 0x22C68:pó 0x22C6E:mì 0x22C74:yè 0x22C76:qìn 0x22C77:jìn 0x22C7A:juÄ“ 0x22C7D:yuÄ�n 0x22C7E:ruán 0x22C94:bàn,bÄ�n,pÄ�n 0x22CB0:bÄ«n 0x22CB4:wèi 0x22CB5:zào 0x22CB6:qiè 0x22CB7:sÅ�u 0x22CB8:lÇ” 0x22CBC:dié 0x22CBD:chuÄ�i 0x22CBE:bì 0x22CBF:zhú 0x22CC0:mÄ�,mó 0x22CC1:fèi 0x22CC2:piÄ“ 0x22CC3:yìn 0x22CC4:xuàn,xuán 0x22CC6:ào,áo 0x22CC7:zhuó,zú 0x22CC8:zú 0x22CCB:bÇ� 0x22CD1:làng 0x22CD3:tì 0x22CD9:tiÇŽo 0x22CDA:jiÄ�n 0x22CDF:tÇ’ng 0x22CFD:duÅ� 0x22CFE:dòng 0x22D02:biÇŽn 0x22D20:zhì 0x22D22:fén 0x22D26:káng 0x22D27:zhì 0x22D28:zhÄ�i,zhì,chì 0x22D29:bì 0x22D2A:kuÇŽn 0x22D2C:bàn 0x22D2D:juÄ“ 0x22D2E:qÅ« 0x22D30:qÄ« 0x22D31:léi 0x22D32:xié,jié 0x22D33:tÄ�ng 0x22D3C:sÅ�u 0x22D3E:bèi 0x22D47:yàng 0x22D48:jiÇŽn,zhÇŽn 0x22D65:zào 0x22D80:zhuài,chuái 0x22D83:fán 0x22D85:shé 0x22D87:qióng 0x22D89:pò 0x22D8B:tiÄ› 0x22D8C:shÄ� 0x22D8D:zá,sà 0x22D91:niÇŽo 0x22D92:guài 0x22D93:cuÇ� 0x22DA1:qiào,jiÇŽo 0x22DA3:dié 0x22DB3:pÄ«n 0x22DB4:cí 0x22DB6:bàng 0x22DCD:yìn 0x22DD1:xiÇŽn 0x22DD4:yÇ� 0x22DD5:miÇŽo 0x22DD6:duÇŽn 0x22DD7:zhòu 0x22DD9:kÅ�ng 0x22DE2:zhÄ�ng 0x22DF6:liú 0x22DF8:zhÇ� 0x22DF9:chÇŽn 0x22DFA:dú 0x22DFB:yuán 0x22DFE:suò,cè 0x22DFF:jié 0x22E00:lì 0x22E01:gÇ’ng 0x22E0C:bÄ�ng 0x22E17:guó 0x22E18:liáo 0x22E19:shÄ›n 0x22E23:niÇŽo 0x22E25:cuàn 0x22E26:wÄ›i 0x22E28:tuÅ� 0x22E2B:sÅ« 0x22E2D:lóng 0x22E33:xiÄ�o 0x22E34:yÇŽn,yán 0x22E43:qÇ�ng 0x22E4D:xÄ« 0x22E4F:yú 0x22E51:zhèng,zhÄ“ng 0x22E52:xiè 0x22E53:chÄ�i 0x22E54:fèn 0x22E56:guó 0x22E58:jÇ�ng 0x22E59:làn 0x22E5A:xiÄ�n 0x22E5D:líng 0x22E6E:lÄ›i 0x22E72:jùn 0x22E73:xiào 0x22E7C:zá 0x22E84:guÄ�n 0x22E85:qiè 0x22E86:luò 0x22E87:yào 0x22E88:luán 0x22E89:tà 0x22E91:luò 0x22E9E:bÇŽ 0x22E9F:chàn 0x22EA1:zhuó 0x22EAB:tiÇŽo 0x22EAF:wÄ�n 0x22EB0:líng,lìng 0x22EB4:yù 0x22EB5:qì,qÇ� 0x22EB7:qí 0x22EBC:jì 0x22EBD:bó,jiào 0x22EBF:shÄ« 0x22EC0:fÇ” 0x22EC2:guÄ« 0x22EC5:diÇŽn 0x22EC7:hÄ�o 0x22EC9:gÇŽi 0x22ECB:qí 0x22ED3:chéng 0x22ED4:huì 0x22ED7:xiá,guÄ« 0x22ED8:shí 0x22ED9:zhì 0x22EDA:qí 0x22EDC:hài 0x22EDF:jiÇŽo 0x22EE0:lì 0x22EE2:liÇŽo 0x22EE4:qiÄ�o,qiáo 0x22EE8:sà 0x22EEA:qÄ« 0x22EEB:shÄ« 0x22EEE:jié,fú 0x22EF5:bèi,lù 0x22EF6:biÄ�n 0x22EF7:bÄ� 0x22EF8:jÅ«n 0x22EF9:pÄ« 0x22EFC:dÇŽn 0x22EFF:táng 0x22F00:kuÇ� 0x22F01:kÅ« 0x22F03:kÇ’u 0x22F09:shÄ« 0x22F0A:shÄ«,tuó 0x22F0B:jÄ« 0x22F0C:bào 0x22F10:kÄ› 0x22F11:kuÄ�ng 0x22F16:mÇ�n 0x22F19:liáo 0x22F1A:è 0x22F1B:gé,guó,è 0x22F1F:wÇŽng 0x22F20:duó 0x22F23:qià 0x22F24:huá 0x22F26:hÇ’ng 0x22F29:pÄ“ng 0x22F2B:jiào 0x22F30:qÅ« 0x22F31:zì 0x22F32:zhòu 0x22F33:kuÄ�ng 0x22F35:shÄ� 0x22F37:jì 0x22F38:wÄ“i,wéi 0x22F39:pÅ«,bÇ” 0x22F3A:xué 0x22F3C:shÄ�o 0x22F42:láng 0x22F43:zhÇ� 0x22F44:tÇ�ng 0x22F47:dà 0x22F55:yáng 0x22F56:jìn 0x22F57:zhÇ� 0x22F5A:zhuó,dÅ« 0x22F5C:zá 0x22F5D:chán 0x22F62:mào 0x22F66:kÅ�ng 0x22F67:zhÅ�u 0x22F68:hÅ« 0x22F69:pÄ“ng 0x22F6D:jiù 0x22F78:chuò 0x22F79:mÇ�n 0x22F7E:xiào 0x22F80:dÇ” 0x22F81:wéi 0x22F83:cán 0x22F84:yú 0x22F85:dù 0x22F86:kÄ�i 0x22F87:pì 0x22F8A:chéng 0x22F8E:chÇ”n 0x22F90:shÇŽo 0x22F91:yÇŽn 0x22F92:kuài 0x22F94:yuÄ“ 0x22FA6:qí 0x22FA7:zhÄ“ng 0x22FA9:kè 0x22FAA:qí 0x22FAB:zhÇ� 0x22FAC:lù 0x22FB1:pÄ« 0x22FB2:nuò 0x22FB3:pÇŽo 0x22FBA:fÄ›i 0x22FBF:wén 0x22FC2:méng 0x22FC8:shÇŽn 0x22FCC:xiòng,xuàn 0x22FCE:duò 0x22FCF:biào,pÄ�o 0x22FDA:yÅ�u 0x22FDC:màn 0x22FDE:liÇŽo 0x22FE1:xié 0x22FE2:luàn 0x22FE3:qiÄ�o 0x22FE4:dèng 0x22FE6:chéng 0x22FE7:chéng 0x22FED:chuò 0x22FF8:cè 0x23000:léi 0x23001:zhÇŽn 0x23002:lÇ� 0x23003:lián 0x23004:qún 0x2300D:chén 0x2300F:chéng 0x23010:gÅ« 0x23012:zòng 0x23013:chóu,dÇŽo 0x23014:chuàn,chuò 0x2301C:lèi 0x2301D:shuò 0x2301E:lÇœ 0x23023:fú 0x23025:lì 0x23027:sàn 0x2302B:sÄ�n 0x2302F:sà 0x23033:niè 0x23036:zuÄ�n 0x23037:lÇ�,lí 0x2303B:shÇ”,zhÇ” 0x2303E:fú 0x23049:bì 0x2304D:dào 0x23052:shÄ« 0x23056:gàn 0x23057:tàn 0x2305C:màn 0x2305F:lí 0x23062:bì 0x23066:pán 0x23068:yÅ�u 0x2306D:jiÅ« 0x2306F:guÅ� 0x23070:liáo 0x23073:wò 0x23074:qià 0x23075:dÇ’u 0x23077:liè 0x23079:jiÇŽo 0x2307B:liè,luÅ� 0x23081:tiÄ�o,qiÄ�o 0x23084:guÅ� 0x23086:pÄ�ng 0x23087:qiÄ�o 0x23089:dí 0x2308A:yùn 0x23092:lè 0x23096:sÄ« 0x23097:xÄ«n 0x2309C:xÄ«n 0x2309D:xiàng 0x2309E:luÇ’ 0x230A4:bÄ“ng 0x230A5:tiÄ�o,qiÄ�o 0x230AC:xiào 0x230AE:dÅ�u,tóu 0x230B3:dàng 0x230B4:tíng 0x230B5:zhuàn 0x230BB:Å�u,kÅ�u 0x230BD:wò 0x230C4:xÄ«n 0x230C5:ruÇŽn 0x230C8:zhuó 0x230C9:dàng 0x230CD:cuì,chà 0x230D1:zhuó 0x230D7:cóng 0x230D8:chÇŽn,chuáng 0x230DD:yÇŽng 0x230E7:yÇŽn 0x230F3:yÇŽn,yè 0x230F5:zhèn,shÄ“n 0x230FD:nuÇ’ 0x230FE:yàn 0x23105:fÇŽng 0x23109:yÇŽn 0x2310A:yú 0x2310D:tí 0x2310E:fù 0x2310F:bÄ›n 0x23111:yÇŽn 0x23113:huÄ« 0x23119:huÇŽng 0x2311C:guì 0x2311D:yàn 0x2311F:hú 0x23120:biÄ�o 0x23127:suì,wéi 0x2312E:zì 0x2312F:jì 0x23130:Ä› 0x23131:jì 0x23132:kuÇ� 0x23134:liàng 0x23138:huò 0x2313A:wéi 0x2313B:zhuÅ� 0x2313F:tÇ�ng 0x23143:zÇŽi 0x23144:yòu 0x23149:rèn 0x2314D:miàn,bÄ«ng 0x2315A:nà,niÇ” 0x2315D:tÅ« 0x2315F:dÄ�n 0x23161:jué 0x23164:xÅ« 0x23165:dÄ« 0x23170:xiàng 0x23177:xiòng 0x2317A:yÇ’u 0x2317B:guÇŽ,jiÅ�ng 0x2317E:xÄ« 0x23188:hè 0x2318D:dÇ�ng 0x23190:lú 0x23192:xú 0x23194:zhòu 0x23195:xiàn 0x23196:huÄ�ng 0x23197:chÄ� 0x23198:shÇ� 0x23199:gàn 0x2319A:nuÇ’,chÇ� 0x2319B:àn,wÇŽn 0x2319F:xiÄ“,jiÄ“ 0x231A7:hào 0x231B2:qÄ«n 0x231B3:gÄ›ng 0x231B4:shÄ�n 0x231B5:fú 0x231BD:zè 0x231C7:dàn 0x231D6:diÇŽn 0x231D7:shÄ“n 0x231D9:zÇ” 0x231E2:biÄ“ 0x231E6:chuí 0x231E7:zhè 0x231E8:dài 0x231EB:wÇ’ 0x231EC:qióng 0x231F0:lín 0x231F2:hÅ«n 0x231F3:jÄ« 0x23205:cáo 0x2320A:mù 0x2320D:dié 0x2320E:wèi 0x23220:biàn 0x23221:tÇ� 0x23225:tú 0x23236:gèng 0x23244:chí 0x23245:còu 0x23246:tÇ� 0x23252:huò 0x23253:qÄ« 0x23254:sÄ�o 0x23255:sàng 0x23256:xuÇŽn 0x23257:àng 0x23258:nài 0x2325A:yáng 0x2325B:shÅ« 0x2325C:shÄ� 0x23261:tÇ�ng 0x23269:yà 0x2326A:huÇŽng 0x2326E:bÄ«n 0x2327E:òu 0x2327F:cáo 0x23281:áo 0x23283:mào 0x23294:méng 0x23296:tiÄ�n 0x2329D:sàng 0x2329E:xù 0x2329F:kàn 0x232A7:lÇŽng,zhào 0x232B6:biÄ“ 0x232B7:cóng 0x232BA:xián 0x232C4:tÅ«n 0x232C9:yù 0x232CA:dàn 0x232CB:yìng 0x232CD:zhÄ�o 0x232CF:pù 0x232D8:huì 0x232DE:ài 0x232DF:mÇ’ 0x232E2:jÄ«ng 0x232E3:lán 0x232F2:liè 0x232F3:piÇŽo,bào 0x232F5:bó 0x232F6:qióng 0x232F9:bì 0x232FF:yÅ�ng 0x23305:lì 0x2330D:niè 0x2330F:dé 0x23313:huÄ�n 0x23317:yuè 0x2331A:chÅ«n 0x2331C:lì 0x2331E:zhÄ�ng 0x2331F:líng 0x23320:chún 0x23327:cè 0x23328:xún 0x2332C:jÇ” 0x2332D:hui,dá 0x2333E:tÅ�ng 0x23346:níng 0x23347:jù 0x2334F:chà 0x23356:zÄ�o 0x2335B:yù 0x2335F:kÄ›n,wÄ›i 0x23366:kuàng 0x23367:fÄ›i 0x2336F:yùn 0x23370:qiÇŽn 0x23374:quán 0x23378:pò 0x2337A:pÄ›i 0x23384:gèng 0x23385:yì,huÄ�n 0x23386:luò 0x23391:kuÄ�n 0x23393:xuÇŽn 0x23394:niàn 0x2339A:hú 0x2339B:jú,xuè 0x233A9:yè 0x233AE:xÄ« 0x233B1:yuè 0x233B2:tÇŽng 0x233B3:pìn 0x233B4:dÇ”n,è,ài 0x233B5:bèi,pÅ� 0x233B8:liÇŽo 0x233C0:yÇ’ng 0x233CE:yÄ� 0x233D1:jiÇŽo 0x233D4:kùn,kÇ”n 0x233D6:zhèn 0x233D7:shù 0x233DA:shí 0x233DE:yóu 0x233DF:pài 0x233E0:xiáo 0x233E1:jí 0x233F6:qÄ« 0x233F7:hé 0x233FA:kÇ’ng 0x23402:yè 0x23403:chì 0x2340A:kÇŽo,jú 0x2340B:yuè 0x2340E:wÇŽ 0x2340F:niÇŽn 0x23411:cí 0x23413:yí 0x23424:jiu 0x2342B:yÄ�ng 0x2342C:lí 0x2342E:dÄ�i 0x2342F:chóng 0x23435:yí 0x2343A:hàn 0x2343F:yÄ« 0x23441:chòng 0x23442:hù 0x23443:zhuÇŽ 0x23466:qióng 0x23467:duò 0x23478:tóng 0x23479:xiÄ�n 0x2347F:fú 0x23482:diàn 0x23483:xí 0x23484:xiÄ“ 0x23485:zhèn 0x23486:qiào 0x23487:tÅ« 0x234B7:hàn 0x234B8:kuàng 0x234B9:suÅ� 0x234BB:shòu 0x234BC:tiáo 0x234C0:zhÄ“n,zhÄ›n 0x234C3:nèi 0x234C5:qiÇŽn 0x234C6:yín 0x234C8:liÇŽng 0x234C9:shà,jié 0x234CA:zì 0x234CB:pí 0x234CC:gÄ�o,jú 0x234CF:jìn 0x234D0:yóu 0x234D2:shàn 0x234D4:mì 0x234D5:òu 0x234D7:hÅ« 0x234DB:yòu 0x234DD:mÄ›ng 0x23510:zhÇ� 0x23513:bÇ� 0x23517:shÄ“n 0x23518:qì 0x23519:xiÄ�n 0x2351A:pán 0x2351B:kÇŽng 0x2352B:shuÄ�n 0x2352C:pí 0x2352E:zÄ�i 0x2352F:zhÇ” 0x23531:sÅ�u,sÄ�o 0x23532:jiÇ’ng 0x23535:chán 0x23536:fán,fàn 0x23537:xiáo 0x23538:yÇ�n 0x23539:hóu 0x2353A:mào 0x2353B:tú,chán 0x2353D:jì 0x23541:yí 0x23543:yù 0x23544:jiÅ�ng 0x23545:pào 0x23547:xiÄ�o 0x23549:gÇ’u 0x2354C:gÅ�u 0x2354D:sÇ”n 0x2354E:xiÇŽn 0x2354F:zhuÇŽn 0x2357E:chóu,bì 0x23584:qiÄ�o 0x23585:tí 0x23586:yún 0x23589:shÄ�n 0x2358A:liè,lì 0x2358C:zhÇ� 0x23590:pÄ�i 0x235A3:jú 0x235A4:lái 0x235A8:zÇ� 0x235AA:qú 0x235AB:gÇ”,què 0x235AC:jué 0x235AD:zhí 0x235AE:àng 0x235AF:qìn 0x235B0:pí 0x235B1:zuÄ« 0x235B3:qián 0x235B5:cuó 0x235B7:jí 0x235B8:tí 0x235B9:rú 0x235BB:hÇŽi 0x235BC:xún 0x235BE:bèi 0x235BF:zhí 0x235C1:dùn,zÄ� 0x235CB:dÇŽng 0x235D0:réng 0x235F2:gÄ�n 0x235F5:gàng,gÄ�ng 0x235F6:tà 0x235F8:tuò 0x235F9:yàng 0x235FA:kÅ« 0x235FB:zhì 0x23616:jiÄ�n 0x23617:nì 0x23618:shÄ“n,zhÄ“n 0x23619:bàng 0x2361A:shuài 0x2361B:dÅ�u 0x2361D:qiÄ�n 0x2361E:hán 0x2361F:qiÄ� 0x23620:gÇŽn 0x23623:chún 0x23624:chá,sà 0x23625:bì 0x23626:yÄ« 0x23627:fÅ« 0x23628:Ä›,Ä“ 0x2362A:láo 0x2362B:háo 0x2362C:lí 0x23631:tè 0x23632:shÄ“n 0x23634:yín 0x23637:jiÄ�n 0x2363B:chá,tú 0x23657:niè 0x23658:còu 0x2365B:yí 0x2365F:táng 0x23662:juàn 0x23670:chì 0x23671:gÇ’u 0x23674:jié 0x23675:zhé 0x23676:hú 0x23677:máng 0x2367B:zÅ�u 0x2367C:sì,cí 0x2367F:fèi 0x23680:zÄ« 0x23681:zÄ« 0x23683:jié 0x23684:sÄ« 0x23686:chÅ«n 0x23687:pào 0x2368B:yé 0x2368C:dÄ«,shì 0x2368E:léi 0x2368F:xÅ« 0x23690:rú 0x23692:pá 0x23693:juàn 0x23694:xì 0x23695:yè,yÇŽn 0x23696:Ä�n 0x23698:yì 0x23699:jiÄ�n,jiàn 0x2369C:sÅ�ng 0x2369D:wÇ’ 0x2369F:sè 0x236A0:zhÇ� 0x236A1:bÄ« 0x236A2:zhuàn 0x236A6:jiàng 0x236A7:hào 0x236A9:chì 0x236AA:dùn 0x236D3:bó 0x236D4:jí 0x236D5:chuÇŽ 0x236D7:luò 0x236DA:ruÇ� 0x236EB:hú 0x236F1:dàn,lÇŽn 0x236F4:hÇŽn 0x236F5:què 0x236F6:shÄ� 0x236F7:zhÇŽn 0x236F8:zé 0x236F9:chuán,chuÇŽi 0x236FA:qÄ« 0x236FB:dié 0x236FD:zhà 0x236FE:tòu 0x23701:cÄ« 0x23702:sà 0x23704:luó 0x23707:jí 0x23722:luÇ’ 0x23723:qín 0x23727:qióng 0x23728:juàn 0x2372C:ài 0x2372D:jiÇŽn 0x23739:tì 0x2373A:wén 0x2373D:qiÄ�o 0x23741:pái,bÄ“i 0x23742:hún 0x23745:ài 0x23747:shuò 0x23748:lián 0x23749:duì 0x2374B:tà 0x2374C:jÇ�n 0x2374D:bì 0x2374E:yÇŽn 0x2374F:gào 0x23750:piáo 0x23751:yù,yú 0x23752:shè 0x23755:jiÄ�n 0x23757:hú 0x2375A:liè 0x2375C:biàn 0x2375D:sù 0x2375E:jiÄ�o 0x23778:zhuì 0x2377D:hÄ�n 0x23787:dùn 0x23790:xiÄ› 0x23791:méng 0x23792:fÅ« 0x23793:lù 0x23794:tàn 0x23797:liú 0x23798:xiÄ�n 0x23799:sÇŽng 0x2379C:còu 0x2379D:zhuÄ�ng 0x2379F:chÄ“n 0x237B0:liàn 0x237B4:lí 0x237C0:pèng 0x237C1:tuÇ’ 0x237C4:tuò 0x237C6:liáo 0x237C7:xiào 0x237C8:chuì 0x237C9:huài 0x237CA:niÇŽo 0x237CB:qiÄ�n 0x237CC:lì 0x237CF:pÄ�o 0x237D0:tiáo 0x237D1:liú 0x237D2:wú 0x237E4:yÇ�ng 0x237E6:zhá 0x237F0:yú 0x237F2:xiÇŽn 0x237F3:xuán 0x237F4:shuÄ�n 0x237F5:xÄ« 0x237F8:méi 0x237F9:sÄ“n 0x237FA:liàn 0x237FC:jiÅ«,qiÄ�o 0x237FD:lào 0x2380E:xiÄ�o 0x2380F:zÅ�u 0x2381A:liú 0x2381C:zhào 0x2381E:zhé,shè 0x23820:lÄ›i 0x2382D:duÇŽn 0x23837:jiÇŽn 0x23838:shuÄ�n 0x23839:zuó 0x2383A:qiè 0x2383C:lÇŽo 0x23849:yù 0x2384A:yì 0x2384B:nÇ� 0x2384E:cén 0x23855:yàn 0x23857:ruÇŽn 0x2385E:yán 0x2385F:dié 0x23860:mián 0x23867:léi 0x23869:wÄ�n 0x23870:nÇŽ 0x23876:yán 0x2387A:lÄ›i 0x2387D:shÄ� 0x2387E:hÅ« 0x23881:xÄ« 0x23882:xÄ« 0x23884:yÇ’u,yÅ�u 0x23885:hÄ�n 0x23887:hÄ�i,xÄ« 0x23889:wÄ� 0x2388A:xù 0x2388B:pÄ« 0x2388C:tÄ�n 0x2388D:xÄ« 0x2388E:xÄ« 0x2388F:bÄ«n 0x23890:qÄ«n,kÄ“ng 0x23891:xÄ« 0x23892:yú 0x23893:xì 0x23895:cì 0x23896:qiàn 0x23897:xiÄ� 0x2389A:wá 0x2389B:è 0x2389C:yÇ’u,yÅ�u 0x2389D:xìng 0x2389E:ní 0x2389F:hán,xián 0x238A0:bì 0x238A1:shÄ“ng 0x238A4:zhÄ�n 0x238A5:diàn 0x238A6:yÇ” 0x238A8:Ç’u 0x238AA:guÇ� 0x238AB:wÇŽng,wÄ�ng 0x238AC:qiÄ�n 0x238AD:yí 0x238B0:zú 0x238B2:qiÄ�n 0x238B3:dìng 0x238B4:kÄ“ng 0x238B6:chù 0x238B7:yÄ« 0x238BA:hÄ�n 0x238BB:kuÇŽn 0x238C8:diàn 0x238C9:xì 0x238CA:zÄ« 0x238CB:líng 0x238CC:zì,sì 0x238CE:yù 0x238CF:hÅ«n 0x238D1:sÇ� 0x238D2:kÇŽn 0x238DA:àn 0x238DC:yÇ’u 0x238DD:jí 0x238DE:hùn 0x238DF:qiÄ� 0x238E0:hóu 0x238E1:hóu 0x238E3:diàn 0x238E9:xiÄ“ 0x238ED:shè 0x238EE:shà 0x238F2:xié 0x238F3:yáo,yÇŽo 0x238F4:dà 0x238F6:xiè 0x238F7:chÄ« 0x238F8:yÇ’u 0x238F9:hÄ“ 0x238FA:shà 0x238FF:tái 0x23901:zhú 0x23903:ÇŽi 0x23907:què 0x23908:zé 0x2390A:lÄ� 0x2390B:lòu 0x2390C:chuài,chÇ�,chuò 0x2390E:yÇ’u 0x23916:tì 0x23918:shÄ« 0x23921:xiào,yÇ’u 0x23922:xì 0x23928:huò 0x23929:chì 0x2392A:yì 0x2392F:shú 0x23930:yuè 0x23931:chán 0x23932:è 0x23933:xÄ« 0x23934:xÄ« 0x23935:yÇ�ng 0x23936:zú,zÄ�,zÇŽn 0x23937:zÄ� 0x2393A:zÄ� 0x23942:tà 0x23943:wàn 0x23947:xìn 0x2394A:wàng 0x2394B:fÇ” 0x23950:lÇ”,lÇš 0x2395E:jiÇŽn 0x23961:yán 0x23963:bì 0x23964:kÄ›n 0x23965:guàn 0x23968:zÄ« 0x2396E:kuÇ� 0x2396F:zhÇ’u 0x23970:zhì 0x23973:tú 0x23977:tà 0x23979:chù 0x2397A:chÄ“ng 0x2397B:chÄ›ng 0x2397C:zhù 0x2397E:dà 0x23987:bì 0x23989:jiÇŽ 0x2398C:yì 0x2398F:yuè 0x23990:gÄ�ng 0x23996:gÄ�n 0x2399C:qiÄ�o 0x239A0:chú 0x239A1:chú 0x239A2:bì 0x239A6:guì 0x239A9:gÇ” 0x239AA:bÇ�ng 0x239AB:yìn 0x239AC:zhuì 0x239AD:gÇ” 0x239AF:lì 0x239B5:è,zhÄ“n 0x239B6:dÇŽi 0x239BC:cán 0x239C2:tì 0x239C3:dù 0x239C4:yì 0x239C8:dié 0x239CA:niÇ” 0x239CC:xuè 0x239CD:nè 0x239CE:guì 0x239CF:kÇŽo 0x239D2:chuÇŽn,mò 0x239D6:zhá 0x239D7:yóu 0x239D9:bài 0x239DA:shí 0x239DB:diàn 0x239DC:pÄ� 0x239DD:qiú 0x239E1:xuè 0x239E3:mò 0x239E4:kÄ“ 0x239E5:yÇ’u 0x239E6:jiÇŽo 0x239E7:bó 0x239EC:xiÇ” 0x239F2:mÇ� 0x239F3:luò 0x239F5:xuè,xù 0x239F7:duò 0x239F9:èr 0x239FA:shÄ�n 0x239FC:kuì 0x239FD:nào 0x239FE:miÇŽn 0x239FF:lì 0x23A00:luàn 0x23A02:dié 0x23A04:qià 0x23A05:lèi 0x23A07:mào 0x23A09:hÄ“ng 0x23A0A:chè 0x23A0B:zhì 0x23A0D:gÇ” 0x23A0E:cuÅ� 0x23A13:wù 0x23A14:tào 0x23A17:xÄ« 0x23A18:yÄ�o 0x23A19:wÄ›i,wèi 0x23A1B:zú 0x23A1C:mà 0x23A1D:yÇ” 0x23A1E:pÄ›ng 0x23A1F:yì 0x23A20:qìn,qÄ«n 0x23A21:yuè 0x23A22:juè 0x23A23:jiàng 0x23A24:xù 0x23A25:bÄ“ng 0x23A2A:luÇ’ 0x23A2B:zhuÄ« 0x23A32:dù 0x23A33:xiàng 0x23A36:huì 0x23A3A:gÇ” 0x23A3B:kÇŽo 0x23A3E:xÄ«ng 0x23A3F:hún 0x23A40:biÄ�n 0x23A44:kè,ài 0x23A45:kÇŽo 0x23A48:cuó,zuÅ� 0x23A4F:lù 0x23A51:zuì 0x23A52:zÄ�o 0x23A53:jiÇŽo 0x23A54:guàn 0x23A59:yÄ�n 0x23A5A:ér 0x23A5C:qíng 0x23A5F:dèng 0x23A60:sì 0x23A61:suì 0x23A62:liào 0x23A67:shàn 0x23A69:bì 0x23A6A:wèi 0x23A6B:yè 0x23A6D:zhài 0x23A6F:yé 0x23A70:diào 0x23A71:ài,kÄ“ 0x23A74:jiàng 0x23A77:sÅ« 0x23A79:huài 0x23A7A:yù 0x23A7D:rÇŽng 0x23A80:diÄ�n 0x23A81:zuÄ�n 0x23A82:bÄ�n 0x23A84:qín 0x23A87:jiÄ� 0x23A89:pí 0x23A8C:tóu,duì 0x23A90:chóu 0x23A95:guÇ� 0x23AA0:jÄ«,jì,qì 0x23AA8:xuè 0x23AAA:diàn 0x23AAD:biàn 0x23AAE:zÇŽi 0x23AAF:tóng 0x23AB6:shÇŽn 0x23AB8:gù 0x23AB9:què 0x23AC0:gÇ” 0x23AC8:hú 0x23AC9:kuÇŽi 0x23ACC:gòu 0x23ACE:sù 0x23AD0:chóu 0x23AD2:kÄ“ng 0x23AD4:dÅ« 0x23AD9:yì 0x23ADC:dào 0x23ADD:qiÄ�ng 0x23AE3:lóng 0x23AE5:lí 0x23AE7:lì 0x23AE8:qÄ«ng 0x23AEA:wÄ“i 0x23AEC:móu 0x23AF1:qì 0x23AF3:jiÇŽng 0x23AF4:xié 0x23AF9:dài 0x23AFB:lóu 0x23B02:guàn 0x23B06:péi 0x23B09:pí 0x23B0B:juàn,chuò 0x23B0D:bÄ“i 0x23B0E:jué 0x23B0F:juàn 0x23B10:shì 0x23B15:xiÄ› 0x23B18:ruí 0x23B19:jìng 0x23B1A:pò 0x23B1B:sÄ�n,shÄ�n 0x23B20:jÄ« 0x23B29:fÄ“n 0x23B2A:bèi 0x23B2B:jiè,gà 0x23B2C:sÄ� 0x23B2E:pÄ« 0x23B34:dì 0x23B35:máo,mào 0x23B36:ba 0x23B37:ba 0x23B38:tiáo 0x23B39:líng 0x23B3A:shÄ“ng 0x23B3B:zhÄ›n 0x23B3C:pÄ« 0x23B3D:wù 0x23B3F:zè 0x23B40:bào 0x23B47:lÇš 0x23B56:hÄ�o 0x23B57:dÇ’u 0x23B58:fú 0x23B59:ní 0x23B5D:gé 0x23B60:rú 0x23B61:xiÇŽn 0x23B64:bì 0x23B6E:máo 0x23B72:rÇ’ng 0x23B73:qiú,qú 0x23B77:bó 0x23B79:hÄ�o 0x23B7A:nÇŽo 0x23B7B:yán 0x23B83:páo 0x23B84:suÄ« 0x23B86:tuò 0x23B88:qÅ« 0x23B89:lí 0x23B8A:dé 0x23B8C:jié 0x23B8D:jié 0x23B8E:gÇ”n 0x23B8F:jiÄ�n 0x23B90:bì 0x23BA0:sàn 0x23BA1:bÄ�ng 0x23BA2:chún 0x23BA6:nài 0x23BA7:bÇŽng 0x23BAA:róng 0x23BAB:jiÄ� 0x23BAC:sÅ�u 0x23BB0:dé 0x23BBE:xiÄ�n 0x23BBF:zhÄ�n 0x23BC0:mào 0x23BC3:zÄ« 0x23BC5:jì 0x23BC6:qí 0x23BCB:rù 0x23BCC:suÅ� 0x23BCD:rÇ’ng 0x23BCE:wù 0x23BCF:róng,rÇ’ng 0x23BD0:róng 0x23BDA:tà 0x23BDC:sÅ�u 0x23BE4:lí 0x23BE7:cuÇ�,suÄ« 0x23BE8:zÅ�ng 0x23BE9:mén 0x23BEA:xÇ� 0x23BEC:mÇŽng 0x23BED:niè 0x23BEF:suÄ« 0x23BF1:péi 0x23BF4:bì 0x23BF5:dì 0x23BF8:qú 0x23BF9:qiáo 0x23BFB:fÄ“n 0x23BFC:sù 0x23C03:xÅ« 0x23C07:rÇ’ng 0x23C08:jÄ« 0x23C0B:qú 0x23C0C:liè,hé 0x23C15:sào 0x23C18:kùn 0x23C1A:cuì 0x23C1B:yè 0x23C1C:bìng 0x23C1E:jié 0x23C20:qú 0x23C21:qú 0x23C25:méng 0x23C26:rán,gÄ�n 0x23C28:bÄ«n 0x23C29:cháo 0x23C2C:dú 0x23C36:ráng,nÇŽng 0x23C37:xiÄ�n 0x23C3A:táo 0x23C3B:qú 0x23C3C:niè 0x23C3F:shÅ« 0x23C40:lÇ” 0x23C42:kùn 0x23C48:mín 0x23C49:mÇ�n 0x23C4D:dàn 0x23C50:yìn,zhì 0x23C53:xiào,hào 0x23C57:jì 0x23C5C:yÄ«n 0x23C66:fÄ“n 0x23C67:zhòng 0x23C6B:gÇ” 0x23C71:chá 0x23C73:liú 0x23C76:bÇ” 0x23C7A:pÄ� 0x23C7B:sì 0x23C7C:dÄ�o 0x23C7D:zhÄ›n 0x23C80:shÄ�n 0x23C82:chuÇŽi 0x23C84:jiÇ” 0x23C8A:kè 0x23C8B:chí 0x23C91:hù,chí,hé,hú 0x23C92:lì,lè 0x23C93:shÄ� 0x23C96:pài,liú,gÅ« 0x23C97:wéi 0x23C98:wÇ” 0x23C9C:yíng 0x23CA1:shÄ�,jí,jié 0x23CA2:dÄ« 0x23CA5:dÄ�n 0x23CB1:tÅ« 0x23CB2:hé 0x23CB3:pÇ’ 0x23CB5:zhÇ� 0x23CB6:niÇ” 0x23CB7:nì 0x23CBD:rÇ’ng 0x23CBE:guài 0x23CC0:zhí 0x23CC3:jí 0x23CDC:fàn 0x23CDF:jié 0x23CE0:hÇŽi,mÇ” 0x23CE4:zhàn 0x23CE6:xì,náo 0x23CE9:zÄ« 0x23CEC:xí 0x23CED:piào 0x23CF0:bÄ“n 0x23CF2:jiÇŽn 0x23D13:jiàn 0x23D16:zá 0x23D1E:bèn 0x23D1F:mào,huÇŽn 0x23D22:zào 0x23D23:zhuàng 0x23D25:kuáng 0x23D28:bí 0x23D2A:pài,pì 0x23D3C:mào 0x23D3D:tàn 0x23D5E:tÇ”n 0x23D5F:luÇ’ 0x23D62:tÄ�n 0x23D71:án 0x23D77:hán,gàn 0x23D78:zhú 0x23D7A:duò,tuó 0x23D7B:duò,tuó 0x23D7C:gàn 0x23D86:qiòng 0x23D88:wÇŽng,mÇŽng 0x23D8A:mò 0x23D8B:zhè 0x23D8C:wÄ›n 0x23D8D:zhuàng 0x23D8F:jiÄ“,diÄ“ 0x23D90:pào 0x23D98:sù 0x23D9D:jù 0x23DA0:qÄ« 0x23DA1:càn 0x23DA3:tuán 0x23DA4:shÄ� 0x23DA6:tuó 0x23DA9:huà 0x23DAB:yì 0x23DE0:mín 0x23DE1:zhÅ�ng 0x23DE5:shuò 0x23DE9:yì 0x23DEA:wÇŽng 0x23DEB:áo 0x23DF6:sÇ” 0x23DFE:guÇ� 0x23DFF:tuÇ’ 0x23E00:huÇ� 0x23E03:xù 0x23E04:zÇŽn 0x23E06:zÇ� 0x23E07:biàn 0x23E09:dá 0x23E0A:yÄ«n 0x23E0B:quÇŽn 0x23E0E:huài 0x23E0F:ná 0x23E10:zá 0x23E12:tí 0x23E18:yí 0x23E19:tÄ�n 0x23E1A:shé 0x23E1B:shuò 0x23E1D:xíng 0x23E20:yÇ’u 0x23E23:fén 0x23E47:kè 0x23E4B:fú 0x23E52:mÇ�n 0x23E5A:pì 0x23E5C:jí 0x23E5D:qiào,xiào 0x23E5E:zhÇ’ng 0x23E5F:gàn 0x23E60:yuÄ�n 0x23E61:chí 0x23E65:qiàn 0x23E67:zuó,zhà 0x23E69:xié 0x23E6A:máo 0x23E6C:hú 0x23E6E:pì 0x23E6F:xùn 0x23E71:xiá 0x23E72:tí 0x23E75:nà 0x23E76:chuÇŽ 0x23E80:wÇ” 0x23EAC:huÄ�ng 0x23EAD:xuè 0x23EAE:tào 0x23EB0:qiào 0x23EB3:jiÄ�o 0x23EBC:dÇŽng 0x23EBD:bài 0x23ECD:dàng,xiàng 0x23ECE:kòu 0x23ED0:jÅ« 0x23ED1:shÄ�,shài 0x23ED2:jÄ«ng 0x23ED5:mó 0x23ED6:nóu 0x23ED8:shuò 0x23EDA:shù 0x23EDB:zhuÄ�ng 0x23EDC:fú 0x23EDF:zÄ�ng 0x23EE0:xié 0x23EE1:làng 0x23EE2:tÅ�ng 0x23EE9:zhé 0x23EEC:càn 0x23EEE:yuè 0x23EF1:zhòu 0x23F1A:tÄ�n 0x23F1E:yán 0x23F1F:lù 0x23F20:yÇŽn 0x23F26:zé 0x23F27:shuài 0x23F45:guÅ� 0x23F46:zhú 0x23F48:rú,ruán 0x23F49:rú 0x23F4C:kÇŽn 0x23F4D:jì 0x23F4E:gÄ�o,zé,háo 0x23F52:xiè 0x23F55:òu 0x23F56:jiÄ�n 0x23F5A:zhí 0x23F5B:zhá 0x23F5D:hÇ’ng 0x23F5F:kuÇŽn 0x23F61:bó 0x23F64:sè 0x23F65:àn 0x23F66:jiàn 0x23F68:téng 0x23F6B:sÅ�ng 0x23F6D:mèng 0x23F6E:yín 0x23F6F:tÄ�n 0x23F70:guÅ� 0x23F73:ruán 0x23F74:wèi 0x23F77:sì 0x23FA4:qì 0x23FA6:zhÇŽng 0x23FC5:dÇ’ng 0x23FC6:fú 0x23FC7:shÄ›n 0x23FC8:sù 0x23FC9:yì 0x23FCA:liàn 0x23FCC:hé 0x23FCE:zhÄ“n 0x23FD0:zé 0x23FD2:cuÇ� 0x23FD3:cuÇ� 0x23FDD:fèng 0x23FDE:lÇ� 0x23FDF:kòu 0x23FE3:xiào 0x23FE4:yÇ’u 0x24003:háo 0x24009:hàn 0x2400A:kÄ›n 0x2401D:yù 0x24023:huÇŽn 0x24024:suÅ�,shàn,shuài 0x24026:là 0x24028:dòu 0x24029:jiàn 0x2402A:pÅ� 0x2402B:biÇŽn 0x24030:xuè 0x24032:biàn 0x24037:wèi 0x24061:dàn 0x24062:jié 0x24063:bài 0x24065:niÇŽn 0x24066:xiàn 0x24067:sè 0x2406A:huá 0x2406B:chuÄ� 0x2406E:òu 0x2406F:liè 0x24070:dí 0x24071:cài 0x24073:zhá 0x24075:lǘ 0x24079:huò 0x2407C:lì 0x2407D:yÇ�ng 0x2407F:wÄ›i 0x24080:bì 0x24081:guó 0x24083:pì 0x24086:biÄ�o 0x240A0:yÇŽn 0x240A4:zhuàn 0x240B2:hóng 0x240B6:lìn 0x240B7:è 0x240B9:yÇ�n 0x240BA:làn 0x240BC:yào 0x240BF:xuàn 0x240C0:lì 0x240E8:làn 0x240E9:líng 0x240EA:xÄ« 0x240EB:hÅ�ng 0x240ED:jiÇŽo 0x240EE:zhuó 0x240F2:zhí 0x240F5:bó 0x240F6:tÄ“ng 0x240F7:ÇŽn 0x240FA:xún 0x240FB:lÄ›i 0x240FC:zÄ�ng 0x240FD:huÇ� 0x2410E:xì 0x2410F:hóng 0x24111:fàn 0x24112:jiÇŽn 0x24113:cóng 0x24114:zá 0x24116:cÄ�,zá 0x24118:yÅ�u 0x2411B:duì 0x2411C:pÄ�n 0x24125:tà 0x24127:pàn 0x2412B:fÄ�n 0x2412C:xÄ« 0x24136:yào,shuò 0x24137:luó 0x2413A:biÄ�n 0x2413C:jìn 0x2413D:lì 0x2414A:yàn 0x2414B:dòu 0x2414E:màn 0x24150:gÅ�ng 0x24151:rÇŽng 0x24152:càn 0x24163:mén 0x24171:gÇ” 0x24172:shuàn 0x24178:yán,yàn 0x24179:bì 0x24180:biÄ�o 0x24181:chéng 0x24182:kuì 0x24184:huÇ’,zÄ�i 0x2418D:chì 0x2418F:wò 0x24191:còu 0x24192:zhì 0x24199:shuÇ� 0x2419C:guà 0x2419D:pÅ« 0x2419E:xù 0x2419F:sÄ« 0x241A1:wÇ” 0x241AE:fÅ« 0x241B0:shì 0x241B3:huì 0x241B4:huÄ�ng 0x241B5:pÄ� 0x241BC:zhÇ” 0x241BE:yí 0x241C3:lì 0x241C4:shÇŽn 0x241DC:mín 0x241DE:gÄ“ 0x241E0:hÅ« 0x241EF:Ä“n,Ä�o 0x241F0:fá 0x241F3:xù,xuè 0x241F4:yí,xÄ« 0x241FE:yíng 0x24214:chí 0x24219:yí 0x24225:dí 0x24226:huÇ�,méi 0x24227:hé 0x24229:zhÇŽ 0x24236:yún 0x24237:xiÄ�n 0x2424C:xián 0x2424D:lào 0x2424E:shào 0x2424F:shì 0x24250:zhuó 0x24264:biÄ“ 0x24265:jiÇ” 0x24266:wÅ� 0x24267:jiÇŽo 0x24268:fú 0x2426A:xiÄ�ng 0x2426B:kài 0x242B2:nÇŽo 0x242B4:huò 0x242B5:jí 0x242B6:là 0x242BB:fÅ�u 0x242BC:shÇŽn 0x242BD:liào,liÇŽo 0x242BE:miè 0x242BF:chè 0x242C2:mó 0x242CF:lóu 0x242E8:duò 0x242EB:nÇŽo 0x242ED:jÄ« 0x242F0:zhù 0x24302:sù 0x24303:duò 0x24307:jiÇ’ng 0x2430A:zÇŽi 0x2430B:huÇ� 0x2430C:yÇ�ng 0x2430D:hú 0x2430E:lìn,lÇ�n 0x2430F:wÄ›ng 0x24310:hàn 0x24314:nán 0x24337:xì 0x24339:gàn 0x2433E:hè 0x2433F:jÄ« 0x24340:xiÇŽng 0x24341:shÄ� 0x24350:tuì 0x24352:zhÄ�o 0x24353:shù 0x24355:yÇ’u 0x24356:jiÄ�n 0x2435C:zào 0x24364:zhÄ�ng 0x2437D:ruò 0x24384:yÄ�n 0x2438B:cuì 0x24397:jí 0x24398:shÄ�ng 0x243A3:è 0x243A4:láo 0x243A5:tÇŽn,chÄ�n 0x243A7:zhù 0x243AD:lÇ�n,yÇ�n 0x243AF:zÄ“ng 0x243B1:juÇŽn 0x243B2:hÅ« 0x243D7:shÄ›n 0x243D8:huò 0x243DC:kuì 0x243F1:chù 0x243F2:zhòu 0x243F6:Ä�o 0x243F8:zhuó 0x243FD:xÄ«ng 0x243FF:miè 0x24400:hÅ« 0x24414:tán 0x24419:bì 0x24423:dÇ�ng 0x24429:kài 0x2442B:biÄ�o 0x24430:huò 0x24431:liè 0x24432:cuàn 0x24443:xiàn 0x24444:rè 0x24453:yuè 0x24455:xÅ«n 0x24457:liÇŽo,zhÄ�o 0x24463:shÄ� 0x24466:shì 0x2446A:xiè 0x24473:xiÄ�o 0x24477:yé 0x24478:lÇŽn 0x24479:yì 0x2447F:liÇŽn 0x24494:bó 0x24495:cÄ�o 0x2449D:yào 0x244A6:liàn,yàn 0x244BB:tà 0x244D1:jì 0x244D4:xÄ« 0x244D5:zhì 0x244DA:xÄ« 0x244DD:yuè 0x244E4:xiÇŽn 0x244E6:zhuò 0x244EF:zhÇŽng,jú 0x244F5:zÇ” 0x244F7:ná 0x244FE:dào 0x244FF:liè 0x24500:ná 0x24509:páo 0x2450B:jù 0x24516:luÇ’ 0x24519:shuÇŽ 0x2451A:shàng 0x2451D:luÇ’ 0x2451F:fÄ“n 0x24523:bào 0x24528:lì 0x2452B:xiòng 0x24536:dÄ�ng 0x24540:chèng 0x24544:zhÇŽng 0x24547:sÇ’u 0x2454A:shén 0x24552:gÄ› 0x24558:yÅ«,wù 0x2455A:huÄ« 0x2455B:chè 0x2455D:jiào,bó 0x2455E:zhù 0x2455F:shÅ« 0x24562:xiáo 0x24566:níng 0x2456D:jiÄ�ng 0x2456F:jiÄ�ng,zhuàng 0x24577:diào 0x2457D:qiáng 0x2457E:qiú,fÇ” 0x24580:fÄ“ng 0x24586:zhàn 0x24587:kÄ“ 0x24592:dié 0x24593:zé 0x24596:guÄ�ng 0x24597:sè 0x24598:fèn,fén 0x2459B:jiÇŽng 0x2459D:yán 0x2459E:zhì 0x245A2:lì 0x245A6:líng 0x245AA:yí 0x245AC:qÇ” 0x245AD:pán 0x245AE:gÅ�u 0x245B0:jiÇŽ 0x245B1:hé 0x245B3:pèng 0x245B5:jù 0x245B7:chè 0x245BA:liè 0x245BB:shì 0x245BC:pò 0x245BD:xiàng 0x245BF:pì 0x245C0:luÇ’ 0x245C1:cù 0x245C3:yÇ” 0x245C7:kòng 0x245C8:xiè 0x245CD:wÇŽn 0x245CE:yÇŽn 0x245CF:péi 0x245D3:chéng 0x245D8:tí 0x245D9:chè,tuò 0x245DA:bì 0x245DB:liàn 0x245DC:jiÇŽ 0x245DE:tíng 0x245E2:tÄ« 0x245E8:dié 0x245EA:shù 0x245EB:lí 0x245EC:lǘ 0x245ED:xià,xiÄ� 0x245EF:cuÄ« 0x245F3:bÅ� 0x245F4:tuí 0x245F5:pú 0x245F7:lìn 0x245F8:fèn,fén 0x245FA:bó 0x245FB:chàn 0x245FE:dÄ�ng 0x245FF:tÇŽi 0x24600:dào 0x24603:lì 0x24605:yá 0x24606:yá 0x24607:zhÄ�n 0x2460A:yí 0x2460C:qÄ« 0x24614:hù 0x24616:tÄ«ng 0x24618:kÇ’u 0x2461B:chún 0x2461C:yóu 0x2461D:fèn 0x2461F:nuó 0x24620:tiàn 0x24621:jìn 0x24622:pí 0x24623:chén 0x24624:pì 0x24626:jiè 0x24627:guÇ� 0x24632:zhuàng 0x24635:hú 0x24636:chÇ’u 0x24637:shù 0x24638:tÄ�o 0x24639:pí 0x2463A:rÇ’ng 0x2463B:rÇ’ng 0x2463D:hÇ’u 0x2463E:pÄ“ng 0x24645:bài 0x24647:xiá 0x2464B:qÇ�n 0x2464C:nÇ� 0x2464E:tÄ�o 0x2464F:qù 0x24652:xié 0x24654:zhào 0x24655:huÄ� 0x24656:xÄ«n 0x24658:shÅ�u 0x2465B:tú 0x2465D:liáng 0x2465E:bì 0x2465F:chÅ« 0x24661:xÄ«ng 0x24663:xÄ«n 0x24664:fÅ« 0x24669:jiè 0x2466D:fÇ” 0x24670:tè 0x24671:shè 0x24674:chÄ�o 0x24675:chuÄ« 0x2467C:rán 0x2467D:hÇ’u 0x2467E:bÄ“ng 0x24680:cÇŽi 0x24685:mú 0x24689:xÅ« 0x2468A:dié 0x2468D:chÇŽn 0x2468E:yú 0x2468F:zhòng 0x24693:lí 0x24694:shÅ�u 0x2469A:dú 0x2469C:mÄ�o 0x2469D:huáng 0x2469F:táo 0x246A1:dù 0x246A2:tí 0x246A3:shÄ“ng 0x246A4:méi 0x246A8:zhÄ“n 0x246A9:qín 0x246AA:pì 0x246AB:táng 0x246AC:cÄ�ng 0x246AD:yáo 0x246AF:xiù 0x246B0:bÄ�ng 0x246B1:gÇ” 0x246B5:bù 0x246BC:gòu 0x246BD:bó 0x246C1:wèn 0x246C4:jì 0x246CA:lÄ� 0x246CD:cuÄ« 0x246CE:mÇ�n 0x246CF:cÇ” 0x246D0:Å�u 0x246D1:yÅ�ng 0x246D6:máo 0x246D7:kè 0x246D8:mÄ�ng 0x246D9:dÇ�ng 0x246DA:huÄ�n 0x246DB:duÇ’ 0x246DC:jiÄ�ng 0x246DD:sù 0x246E2:céng 0x246E3:tà 0x246E5:huáng 0x246E6:jué 0x246E7:xún 0x246EA:xiòng 0x246EC:mì 0x246ED:qún 0x246EE:láo 0x246F1:zhì 0x246F2:wÄ›i,wéi 0x246F7:sè 0x246FB:zÄ�ng 0x24701:ÇŽn 0x24702:wèi,guì 0x24704:huái,huài 0x24707:zhàn 0x24709:yÄ«ng 0x2470A:gÄ“ 0x2470B:huì 0x2470D:quán 0x24713:liè 0x24714:jú 0x24715:bà 0x24716:léi 0x24718:mán 0x24719:líng 0x2471C:lì 0x2471D:jÇ� 0x24721:huí 0x24722:xìn 0x24723:shì,shé 0x24724:zhé 0x24727:bÅ� 0x2472B:chÄ� 0x2472F:chÄ� 0x24730:jÄ«ng 0x24731:bÄ� 0x24732:bèi,pèi 0x24735:yàn 0x24737:hù 0x24739:yú 0x2473B:bì,pí 0x2473C:chuán 0x2473E:jÇ� 0x24742:mù 0x24744:máo 0x24745:zhÅ�ng 0x24747:yè 0x24748:dÅ�u 0x24749:yÄ› 0x2474D:rì 0x2474E:yÄ«n 0x24750:hào 0x24752:nà 0x24753:tiè 0x24754:fù,chái 0x24755:mÇ” 0x24756:zÇŽi 0x24758:hú 0x2475A:chÄ“n 0x2475B:tuó 0x2475E:chù 0x2475F:fú,fèi 0x24767:bào 0x2476C:dÇ� 0x2476D:cÇŽi 0x2476E:lù 0x2476F:pÇ’ 0x24770:dá 0x24771:yè 0x24773:yÇ� 0x24777:xiáng 0x24778:bÄ« 0x24779:zhÅ« 0x2477B:yí 0x2477D:lÇœ 0x2477F:kuÄ�ng 0x24782:zhì 0x24787:wá,kuáng 0x24788:dÄ« 0x24789:shù 0x2478A:liè 0x2478B:zÇŽo 0x2478C:zhì 0x2478D:náo 0x24797:chái 0x2479A:xiÄ�o 0x2479B:zàng 0x2479E:yù 0x2479F:dòu 0x247A0:chà 0x247A1:xié 0x247A2:yáng 0x247A4:xiÇŽn 0x247A5:bÇŽo 0x247AE:zhài,zhÄ�i 0x247B0:qiú 0x247B2:hú 0x247B3:zài 0x247B4:jué 0x247B6:hÄ�n,hàn 0x247BF:àn 0x247C0:zào 0x247C3:shà 0x247C5:xiàn 0x247C6:chÇ� 0x247C7:yÇŽn 0x247C9:àn 0x247CD:zhé 0x247CE:jué 0x247D1:lì 0x247D3:lè 0x247D6:cÇŽi 0x247D8:lù 0x247DA:jiÄ� 0x247DD:xià 0x247DE:xiào 0x247DF:yÄ�n 0x247E0:xÅ« 0x247E2:dùn 0x247E3:yíng 0x247E4:huÄ«,xÅ«n 0x247E5:tí 0x247E6:nóu 0x247E7:xÇ� 0x247EA:tú 0x247F7:wÄ�i 0x247F8:chÄ“n 0x247FC:hÅ�ng 0x247FE:tí 0x247FF:xuÄ�n 0x24800:zá 0x24807:gé 0x2480B:lóu 0x2480C:chái 0x2480D:pán 0x2480E:jí 0x24810:tà 0x24813:xÄ« 0x24816:xiÄ�o 0x24818:sÄ�o 0x24819:jiÄ� 0x2481A:sù 0x2481B:huÄ�ng 0x2481D:cuÅ� 0x2481F:tà 0x24820:shuÄ�i 0x2482A:fú 0x2482B:lì 0x2482D:shè 0x2482F:táng 0x24836:diÄ�n 0x2483A:bì 0x2483C:gòu 0x2483D:cù 0x2483F:qiÄ�n 0x24842:léi,lÄ›i 0x24843:sù 0x24846:zòng,zÅ�ng 0x24847:hÄ�o 0x2484F:chì 0x24850:cáo 0x24853:wò 0x24854:xiÄ�o 0x24855:liè,wÄ›n 0x24856:yán,yÄ�n 0x2485D:bì 0x2485F:huàn 0x24861:xÄ« 0x24862:chÄ« 0x24863:xÅ« 0x24864:náo,nà,rú 0x24865:yán,xiàn 0x24867:xiè 0x24868:zhá 0x2486A:suì,wÄ›i 0x2486C:xì 0x2486D:bÄ“ng,péng 0x2486E:rán 0x2486F:shuò,xÄ«,què 0x24870:bÄ�n 0x24871:guì 0x24872:kÄ�i 0x24873:chÄ“n 0x24876:xù 0x2487E:è 0x2487F:lì 0x24880:xÄ« 0x24881:huàn 0x24882:sù 0x24884:chÇŽng 0x2488A:lù 0x2488B:yán 0x2488E:dÄ�ng 0x2488F:dÇŽn 0x24890:yÄ�ng 0x24892:zhÇŽi 0x24893:jù,qú 0x24895:duó 0x24896:sÄ�o,shÄ�n 0x24897:lái 0x24898:sù 0x2489F:zé 0x248A3:bì 0x248A6:yìn 0x248A8:hÄ�o 0x248AA:liè 0x248AD:háo 0x248AE:yáng 0x248B4:shuò,lì 0x248B5:lài,ài 0x248B6:qióng 0x248B9:lÄ›i 0x248BA:xié 0x248BC:shì 0x248C3:lÇ” 0x248C5:què 0x248C6:lián 0x248CC:xiào 0x248CE:yÄ«ng 0x248D1:xié 0x248D8:líng 0x248D9:yÅ�u 0x248DE:dÇŽng 0x248DF:lÇŽn 0x248E0:xiÄ�o 0x248E8:yì 0x248EC:wÅ« 0x248EE:yì 0x248EF:tuÅ� 0x248F0:bÇ” 0x248F2:xìn 0x248F5:sÄ« 0x248F6:jÄ«n 0x248F8:bÄ� 0x248F9:fÇŽ 0x248FB:mò 0x248FC:ruò 0x2490A:dà 0x2490B:jì 0x24910:sù 0x24911:qióng 0x24912:bÄ� 0x24926:tián 0x24927:yóu 0x24929:tuó 0x2492B:wài 0x2492C:yòu 0x2492E:dÅ�ng 0x24931:xÇ� 0x24932:kÇ’ng 0x24936:qióng 0x24937:duÄ« 0x24938:duò 0x2493A:yì 0x24952:xÄ« 0x24953:qÄ«n 0x24954:sù 0x24957:liú 0x24959:wán 0x2496D:chÄ“ 0x2496E:zhÅ« 0x24970:mào 0x24977:quán 0x2497D:yÅ« 0x2497F:yì 0x24980:mí 0x24983:lái 0x24984:zhì 0x249A4:ní 0x249A6:bÄ�n 0x249AA:dÅ�ng 0x249AE:zhì 0x249D5:yì 0x249D8:líng 0x249D9:yú 0x249DA:cÅ�ng 0x249DB:dì 0x249DC:zhì 0x249E0:ruÇŽn 0x249E3:jiàn 0x249E9:wàn 0x249EB:jÄ«n,jìn,duÄ« 0x249ED:páng 0x24A0D:lù 0x24A0E:qú 0x24A10:xÇ�,tÄ�o 0x24A11:dá 0x24A16:hù 0x24A17:luÇ’ 0x24A19:lè 0x24A36:gÇ’ng 0x24A3B:lìng 0x24A42:láo 0x24A44:zhuàn 0x24A68:zÇŽo 0x24A69:hào 0x24A6A:xiàng 0x24A6D:hào 0x24A6E:lì 0x24A71:diàn,tiàn 0x24A72:gé 0x24A7D:huán 0x24A84:è 0x24A86:xiá 0x24A8B:jiÄ�n 0x24A8C:qí 0x24A8D:xiá 0x24A8E:yÇ’u 0x24AA1:zhÄ“ng 0x24AAA:zhuàn,chÅ«n 0x24AAE:chàn 0x24AC9:xiè 0x24AD5:náo 0x24ADD:jì 0x24ADE:tián 0x24AE3:yÇŽn 0x24AE7:hÇŽo 0x24AE8:xín 0x24AE9:líng 0x24AEB:bÄ�n 0x24AEC:bÄ›ng 0x24AF1:gÅ�u 0x24AF2:líng 0x24AF5:kuò,guó 0x24AF6:qià 0x24AF7:jiào 0x24AF9:Ä“n 0x24AFA:yáo 0x24AFB:dÅ« 0x24B01:huÇ’,guÇ’,luÇ’ 0x24B02:dÇ” 0x24B03:pÄ“i 0x24B0C:yuán 0x24B0F:lóu 0x24B10:xíng 0x24B13:lián,liÇŽn 0x24B14:yáo 0x24B15:xÄ« 0x24B16:yáo 0x24B18:xÄ« 0x24B1B:lú 0x24B1D:yàn 0x24B20:quán 0x24B25:ráng 0x24B26:wà 0x24B27:zú 0x24B28:fàn 0x24B29:yì 0x24B2A:dù,kÄ�n 0x24B2B:suì 0x24B2D:pÄ« 0x24B2F:hán,qiàn 0x24B31:xù 0x24B33:gÇ’ng 0x24B35:dì 0x24B37:nà 0x24B3E:duò,tuó 0x24B3F:wÄ� 0x24B42:niè 0x24B48:diào 0x24B49:huÄ�ng 0x24B4C:tí 0x24B4D:fàn 0x24B51:wú 0x24B52:áng 0x24B54:píng 0x24B59:hán,gÄ�n 0x24B5B:gÄ�ng 0x24B5C:lí 0x24B5E:dÅ«n 0x24B5F:fù 0x24B60:nà 0x24B62:cèi,suì 0x24B67:jiÄ“ 0x24B69:qìng 0x24B6B:yÄ«ng 0x24B6C:xiáng 0x24B71:hú 0x24B74:sù 0x24B7B:gÄ“ 0x24B7C:è 0x24B7D:xù 0x24B86:xÄ« 0x24B8A:kÄ�ng 0x24B8B:guó 0x24B8C:jiÄ“ 0x24B8D:chuán 0x24B8E:léi 0x24B8F:héng 0x24B90:zÅ«n 0x24B95:piè 0x24B98:dÄ“ng 0x24B99:xÄ« 0x24B9A:léi 0x24B9C:shàn 0x24BA7:lú 0x24BA9:duì 0x24BAA:jùn 0x24BAD:chàn 0x24BAF:xié 0x24BB0:wÄ� 0x24BB1:zhé 0x24BB3:zhuÄ�n,guàn 0x24BB7:liù 0x24BB8:léi 0x24BBC:dài 0x24BBD:gÄ�n 0x24BC4:shì 0x24BC7:yÇŽn 0x24BCC:gÄ�n 0x24BD0:yán 0x24BD6:suÄ« 0x24BDA:zhÅ�ng 0x24BDC:shì 0x24BE1:shèng 0x24BE5:chÇŽn 0x24BF7:huáng 0x24BF8:yìn 0x24BFB:mÄ›ng 0x24C02:ráng 0x24C05:xiáng 0x24C08:bèi,fú 0x24C0C:chuán 0x24C11:pú 0x24C19:kÄ“,gé 0x24C1A:lÄ�,lá 0x24C1D:quÇŽn 0x24C1F:hàng 0x24C20:chì 0x24C21:máng 0x24C26:zhà 0x24C2A:fèn 0x24C2C:chào 0x24C33:jÇ�ng 0x24C43:liè 0x24C45:nà 0x24C46:nà 0x24C47:tóng 0x24C4B:rán 0x24C4C:zÇ” 0x24C4D:pÄ«,pÇ’ 0x24C4E:yÇ’u 0x24C50:shÅ« 0x24C5B:liè 0x24C5C:shÅ�u 0x24C5D:tuÇŽn 0x24C5F:gÇŽo 0x24C60:sháo 0x24C61:tuó 0x24C63:nán 0x24C67:tuÇ’ 0x24C68:gÅ�ng 0x24C69:diào 0x24C74:mÄ›ng 0x24C75:bÄ�ng 0x24C77:xié 0x24C78:sì 0x24C79:tÇ�ng 0x24C7A:guì 0x24C7D:fú 0x24C7E:guì 0x24C89:guì 0x24C91:zhÇ” 0x24C93:lái 0x24C95:lÇ”n 0x24C96:tiÇŽn 0x24C97:rÇŽn 0x24C9A:dÅ�ng 0x24CA8:juàn 0x24CA9:yán 0x24CAC:ruán 0x24CAD:dÇŽn 0x24CB0:mào 0x24CB6:luán,niÇŽo 0x24CB8:xù,zÄ« 0x24CBA:xÄ« 0x24CC2:má 0x24CC3:qÄ« 0x24CC5:chà 0x24CC8:shÄ�ng 0x24CC9:hàn 0x24CCA:píng 0x24CCE:jÄ« 0x24CD3:lì 0x24CD5:yù 0x24CD6:bÄ�n,fÄ�n 0x24CD8:tÄ“ng 0x24CDD:chóu 0x24CE0:chóu 0x24CE4:qÄ« 0x24CE5:xÄ« 0x24CE6:bèi 0x24CEA:yè 0x24CED:guÇŽng 0x24CEF:zhù 0x24CF3:léi,huÇ� 0x24CF4:léi 0x24CF5:chÄ� 0x24D00:guÇŽng,qiÄ�o 0x24D0D:dié 0x24D13:yÇŽ 0x24D18:niè 0x24D19:shÅ«,xÅ« 0x24D1B:zhì 0x24D1F:zhì 0x24D22:zhì 0x24D23:pÇ� 0x24D25:jiÅ« 0x24D26:jiÅ« 0x24D27:yì 0x24D28:yòu,yÇ’u 0x24D2A:jiÅ« 0x24D2F:huàn 0x24D31:dù 0x24D3B:táo 0x24D3C:qiè,cí 0x24D3D:qín 0x24D3E:xìn 0x24D3F:chÄ�n 0x24D40:jì 0x24D42:qìn 0x24D4A:dù 0x24D4B:zhÄ« 0x24D4E:Ç’u 0x24D50:wù 0x24D52:wén 0x24D58:bì 0x24D5B:bÄ“i 0x24D5D:mÇ” 0x24D5E:jìn 0x24D5F:táo 0x24D60:liáo 0x24D65:cáo,zhÇ’u 0x24D66:zhá 0x24D6C:chÇ� 0x24D6D:yÄ� 0x24D6E:kuí 0x24D6F:yìn 0x24D78:lóng,pÄ�ng 0x24D79:qià 0x24D7B:hÄ�ng 0x24D7C:shàng,shÄ�ng 0x24D7D:hài 0x24D7E:chÄ� 0x24D80:jiÇŽo 0x24D81:lÇŽo 0x24D88:xÄ« 0x24D8B:bó 0x24D93:zhÇ� 0x24D95:tùn 0x24D96:fú 0x24D98:hÅ« 0x24D9A:niè 0x24D9B:yì 0x24D9C:zhuàng 0x24DA0:chá 0x24DA4:suÄ�n 0x24DA7:yùn 0x24DAE:dù 0x24DB0:xÄ« 0x24DB1:chuàn 0x24DB2:xíng 0x24DB3:jiÇŽo 0x24DB4:shÄ“n 0x24DC0:wÄ�ng 0x24DC1:bÄ“i 0x24DC2:féi 0x24DC3:jiàn 0x24DC4:quán 0x24DC5:yì,yá 0x24DC6:dÅ�ng 0x24DC7:xù 0x24DC8:nà,niè 0x24DC9:jí 0x24DCC:zhÄ›n 0x24DCD:qí 0x24DCE:duÄ« 0x24DCF:yín 0x24DD1:jiù 0x24DD2:pí,bì,bÄ“i 0x24DD3:xìn 0x24DD4:lún 0x24DD5:cÇŽi 0x24DD6:lìng 0x24DD7:biÄ“ 0x24DD8:dào 0x24DD9:dé 0x24DDF:la 0x24DE1:xÄ«,nüè 0x24DE2:jù 0x24DE4:xiáo 0x24DE6:jÄ«ng 0x24DF9:wài 0x24DFB:nÇŽo 0x24DFC:xiÄ�ng 0x24DFD:què 0x24DFE:qiè 0x24DFF:tÅ« 0x24E00:xÇ” 0x24E01:huì 0x24E05:mín 0x24E06:wÄ›i 0x24E08:yóu 0x24E09:tuí 0x24E0A:dài 0x24E0E:kÄ›,hài 0x24E0F:nà,niè 0x24E11:fù 0x24E12:yù 0x24E13:zhÇ� 0x24E15:hÄ�n 0x24E16:Ä�i 0x24E17:fù 0x24E21:yÄ�ng 0x24E24:shí 0x24E26:chán 0x24E2A:chì 0x24E2B:yùn 0x24E2C:shuÄ�i 0x24E2E:sù 0x24E2F:sÇŽng 0x24E31:è,kè,kài,yà 0x24E32:zhÄ›ng 0x24E33:ái 0x24E34:suÇ’ 0x24E35:bù 0x24E37:qún 0x24E38:yì 0x24E39:yÇŽn 0x24E3B:nà 0x24E3C:wÇ” 0x24E47:lì 0x24E48:lì 0x24E4A:xÄ« 0x24E4B:jué 0x24E4C:shÄ« 0x24E4E:yÇŽ 0x24E5B:chén 0x24E5C:yíng 0x24E5D:bì 0x24E5E:chè 0x24E61:zhÄ� 0x24E62:tuÇ’ 0x24E63:hù 0x24E64:téng 0x24E65:yìng 0x24E66:bÇ� 0x24E67:níng 0x24E68:liàn 0x24E69:xìn 0x24E6A:yÇ” 0x24E72:bèi 0x24E74:mó 0x24E75:duÄ« 0x24E77:dÇŽo 0x24E78:qí 0x24E80:shuÄ�i 0x24E83:xiÄ�o,jiÄ�o,yÄ�o 0x24E84:zhÇ’ng,tóng 0x24E85:zhuì 0x24E87:biàn 0x24E89:wÄ›i 0x24E8A:xÄ«,sÄ« 0x24E8C:dÄ“ng 0x24E8E:xiÄ“ 0x24E8F:pÄ�n 0x24E90:niè 0x24E93:bié 0x24E94:shè 0x24E95:fèi 0x24E96:mÇ�n 0x24E97:qì,jì 0x24EAA:shàn 0x24EAB:suÇ’ 0x24EB7:jí 0x24EBA:dÇŽn,dàn,tán 0x24EBB:juàn 0x24EBC:lù 0x24EBE:ào 0x24EC2:yì 0x24EC3:shÇ” 0x24EC4:suì 0x24EC5:wèi 0x24EC6:wán 0x24EC7:chÇ” 0x24ECC:wò 0x24ED6:bì 0x24ED8:yÇ�n 0x24ED9:huó 0x24EDC:kài,è 0x24EDD:níng 0x24EE2:ài 0x24EE4:lì 0x24EE6:zhÄ�i 0x24EF1:lù 0x24EF6:biàn 0x24EF7:pán 0x24EFF:guì 0x24F00:sÅ« 0x24F01:méng 0x24F02:xiÇŽn 0x24F03:lòng,lóng 0x24F05:qì 0x24F0B:chàn 0x24F0C:yì 0x24F0D:háng 0x24F0F:liÇŽn 0x24F10:guàn,huàn 0x24F12:wÄ›i,huà 0x24F17:jué 0x24F18:léi 0x24F19:luán 0x24F1A:lì 0x24F1C:pí 0x24F22:huÇŽn 0x24F2E:guÄ« 0x24F33:jú 0x24F36:dÄ“ng 0x24F3A:fèi 0x24F41:zhÄ« 0x24F43:mèi 0x24F45:huàn 0x24F49:pÄ� 0x24F4A:bÇ� 0x24F4C:pÅ� 0x24F53:ér 0x24F55:huàn 0x24F63:chàng 0x24F65:luò 0x24F66:fÇ’u 0x24F6F:chóu 0x24F71:zú 0x24F72:nán 0x24F73:xiÇŽo 0x24F79:bài 0x24F7A:lù 0x24F7C:luò 0x24F7F:niàn 0x24F80:zé 0x24F84:zhù 0x24F85:hú 0x24F88:huÄ« 0x24F89:tÇŽng 0x24F8A:chóu 0x24F91:huáng 0x24F92:dÅ�u 0x24F9B:miào 0x24F9D:bó 0x24FA0:dì 0x24FA2:dÄ›ng 0x24FA3:pÅ« 0x24FA5:sÅ�ng 0x24FA6:chóu 0x24FAB:yào 0x24FAC:mÄ›ng 0x24FAD:lóng 0x24FB2:lián 0x24FB5:bié 0x24FBA:lÇš 0x24FBF:sè 0x24FC0:zuó 0x24FC4:cún 0x24FC5:líng 0x24FC6:zhÄ›ng 0x24FC7:pÇ� 0x24FC8:báo 0x24FCB:què 0x24FCE:pÄ« 0x24FCF:nàn 0x24FD0:pÄ« 0x24FD1:bÇ’ 0x24FD2:bèi 0x24FD3:fÄ� 0x24FD5:mÇ�n 0x24FD6:mò 0x24FD7:wà 0x24FD8:zhÄ�o 0x24FD9:zhì,pí 0x24FDA:cÅ« 0x24FDF:xún 0x24FE0:jí 0x24FE1:guì,qí 0x24FE3:chéng 0x24FE7:hàn 0x24FE8:xiào 0x24FE9:què 0x24FEB:chuò 0x24FED:fÇ” 0x24FF3:qÇ�n 0x24FF4:lù 0x24FF5:què 0x24FF6:diÇŽn 0x24FF7:qiÄ�n 0x24FFC:chÇŽng 0x24FFD:tà 0x24FFE:bÄ“i 0x25001:dù 0x25002:bÄ›ng,bÄ�ng 0x25003:hòu 0x25008:zhÇŽ 0x25009:zhÇŽ 0x2500E:què 0x2500F:má 0x25010:hán 0x25013:liú 0x25014:lù 0x25016:zÄ« 0x25018:pÇ� 0x25019:zhòu 0x2501B:zÄ�o 0x2501D:niÇ” 0x25020:huì 0x25023:xué,qiào 0x25025:là 0x2502B:nóu,rÇŽn 0x2502C:yÇŽn,yè 0x2502D:rÇŽn 0x2502E:nÇŽo 0x25030:là 0x25031:guÇŽng 0x25032:dú 0x25035:lú 0x25039:jiÇŽn 0x2503A:xiè 0x2503B:qì 0x2503E:xiàng 0x25041:guÇ’ 0x25042:jié 0x25043:màng 0x25046:xiÄ� 0x25047:kuÄ« 0x2504E:yòng 0x25050:hÇŽi 0x25051:mì 0x25052:yào 0x25055:wÄ“n 0x2505F:lì 0x25060:juàn,quán,quÄ�n 0x25061:wÅ« 0x25062:qiáo 0x2506E:diào 0x2506F:chù,chuò 0x25072:suÅ� 0x25075:chÅ�ng 0x25078:quÄ�n 0x25079:shè 0x25082:mÄ›ng 0x25083:jù 0x2508B:tú 0x25092:nóng 0x25093:mó 0x25099:fèn 0x250A2:áo 0x250A3:guÅ� 0x250A4:hú 0x250A5:cán 0x250A6:dÅ«n 0x250A7:hÇŽi 0x250A8:jiÇŽo 0x250B0:gÅ« 0x250B5:jÄ«n 0x250B8:yáng 0x250C0:chà 0x250CC:huÄ« 0x250D4:qú 0x250D5:kÄ“ 0x250DF:qÄ«ng 0x250E0:yì 0x250E3:kÇŽi 0x250E4:jiÇŽo 0x250E7:chÅ�u,jiÇŽo,yÇŽo 0x250E8:bÇ” 0x250E9:gèn,yÇŽn 0x250EA:jiÄ�o 0x250EB:zhÄ« 0x250EE:wèn 0x250F0:bÄ«n 0x250F4:xiòng 0x250F5:fàn 0x250F8:yí 0x250F9:chuàn 0x250FA:yào 0x250FD:yÄ�ng 0x250FE:dù 0x250FF:yÇŽn 0x25101:méng 0x25107:chÄ«,hÅ«n 0x25108:mù 0x25109:jiÄ�o 0x2510B:nÇœ 0x2510D:guó 0x2510E:xuè 0x25111:fú 0x25112:xuÄ“ 0x25113:fÅ« 0x25114:pèi,pò 0x25115:mò 0x25116:xÄ« 0x25117:wò,nài 0x25118:shÇŽn 0x2511B:xÄ« 0x2511C:qì 0x2511D:miàn 0x25126:dÇŽn 0x25128:chÇ’u 0x25131:fèi 0x25132:mié 0x25134:xuè,jué 0x25135:xù,yù 0x25136:sÄ« 0x25137:jÇ” 0x25138:mÇŽo 0x25139:bào 0x2513B:yí 0x2513C:guÄ� 0x2513D:nì 0x2513F:yí,dì 0x25141:zuò 0x25144:nÇ” 0x25151:diàn 0x25152:fàn 0x25153:yì 0x25154:shì 0x25157:cÅ« 0x25158:zhÄ›n,mí 0x2515E:shì 0x2515F:jiÇŽo 0x25160:hòu 0x25161:ér 0x25166:lèi 0x25167:xuè 0x25168:gèng 0x2516A:shÅ�u 0x2516C:juÄ�n 0x25174:jié 0x25175:wéi 0x25177:shÇ’u 0x25178:jìng 0x2517A:xú 0x2517B:chòng 0x25185:jiÄ�ng 0x25186:mòu 0x25189:yù 0x2518C:jué 0x25191:tìng 0x25194:xiÄ�o 0x25196:dÅ�u 0x25198:guó 0x25199:máng 0x2519A:wÄ�ng 0x2519B:xù 0x2519C:wàng 0x2519D:suÅ� 0x2519E:juàn 0x2519F:yuè 0x251A1:hán 0x251A3:shÄ“n 0x251A5:xié 0x251A6:liú 0x251A7:rún 0x251AF:bì 0x251B2:nào 0x251B6:wàn 0x251B7:jiù 0x251B8:quÄ“ 0x251C4:nì 0x251C6:mí 0x251C7:suÅ� 0x251C9:qiÇŽng 0x251CC:hàn,qià 0x251CD:zhuó 0x251CE:mí 0x251CF:xù 0x251D1:lÇŽng 0x251D2:jié 0x251D3:dìng 0x251D4:chàng,zhÄ�ng 0x251D5:zhì 0x251D6:fÄ“i 0x251D7:jiá 0x251D8:jùn 0x251D9:huò 0x251DA:qÄ« 0x251DB:jÅ«,jù,xì 0x251DC:zhÅ«n,guÅ� 0x251DE:diàn 0x251DF:jiÇŽo 0x251E0:yÄ� 0x251E2:zhÇŽn 0x251ED:zhÄ« 0x251EF:mài 0x251F0:hÅ« 0x251F1:xiè 0x251F2:shí 0x251F3:guÄ« 0x251FF:xù 0x25202:jí 0x25204:chuàng 0x25206:mào 0x25207:ruán 0x25208:xÅ« 0x25209:huàn 0x2520A:shà 0x2520B:jÇ” 0x2520F:kuàng 0x25211:hóu 0x25212:guÄ�n 0x25213:guÄ� 0x25215:mí 0x25216:dié 0x25217:bì 0x25218:liÇŽng 0x25219:là 0x2521A:shÇŽn 0x2521B:lù 0x2521C:xì 0x2521F:sÇ’u 0x2522C:Å�u 0x2522E:léng 0x25237:kÅ« 0x25238:guÄ« 0x2523B:xÄ« 0x2523C:pán,pÄ�n 0x2523D:sè 0x2523E:juè 0x2523F:hòng 0x25240:guàn 0x25241:jù 0x25243:nài 0x25244:huá 0x25245:gé 0x25246:lì 0x25247:gòu 0x25248:tì 0x2524A:mà 0x2524B:téng 0x2524C:dá 0x25250:qÄ« 0x25251:yù,hè 0x25252:jiÇŽo 0x25253:miè 0x25254:gÄ›ng 0x25255:mèng,méng 0x25256:wèi 0x25258:tí 0x25259:qí 0x2525C:chén 0x2525D:dÅ�u 0x2525F:pán 0x25270:hàn,qià 0x25274:mì 0x25275:má 0x25276:lù 0x25277:qÄ« 0x25278:kÄ“ng 0x2527A:dié 0x2527B:qì 0x2527C:jiÄ�o 0x2527D:kÄ�ng 0x2527E:qiÄ�o 0x2527F:mì 0x25280:shÄ�n,sÇŽn 0x25287:jiÄ�n 0x25288:lí 0x25289:kè 0x2528A:xù 0x25291:mán,màn 0x25292:fèng 0x25293:chàn 0x25294:huÇ� 0x252A7:kòu 0x252AA:wÄ›i 0x252AB:guàn 0x252AC:jí 0x252AD:zùn 0x252AE:huò 0x252AF:xié 0x252B4:suì 0x252B6:ruÇŽn 0x252B8:tè 0x252BC:zhèng 0x252BD:kÅ«n 0x252BE:xiÇŽng 0x252BF:mián 0x252C1:xì 0x252CC:sÄ� 0x252D9:è 0x252DA:miè 0x252DB:zhÇ” 0x252DC:zÅ�u 0x252DD:mÄ›ng 0x252DF:xÄ« 0x252E1:táng 0x252E3:jià 0x252E4:cháng 0x252E5:jí 0x252EE:zhuó 0x252FF:hè 0x25300:chá 0x25301:qì 0x25302:mián 0x25303:zhÄ›n 0x25304:kÅ« 0x25305:yè 0x25306:zhÅ�u 0x25308:jiÄ�n 0x2530A:pàn 0x2530D:huÄ« 0x2530F:míng 0x25310:liù 0x25318:shuì 0x2531A:mài,yá,shù 0x2531B:lí 0x2531E:shuò 0x2531F:yí 0x25324:lì 0x25328:xiÄ“,miè 0x25329:tè 0x2532A:xiÅ« 0x2532D:xuàn 0x2532E:lì 0x2532F:méng 0x25330:wéi 0x25331:méng 0x2533A:yào 0x2533B:lán 0x2533C:líng 0x2533D:yÄ«ng 0x2533E:yÄ«ng 0x2533F:lì 0x25340:jiÇŽn 0x25341:guÄ«,guì 0x25345:guÄ�n 0x25346:xiè 0x25349:shè 0x2534B:zuÄ«,xiÄ“,huÇ� 0x25353:kàn,yÇŽn 0x25354:léi 0x2535A:biàn 0x2535D:shÇ” 0x2535E:nÇœ 0x2535F:xù,yì 0x25363:hào 0x25368:guÇ� 0x2536A:zhài 0x2536B:láng 0x2536C:cuÄ�n 0x2536D:zhì 0x2536E:féng,fÄ“ng 0x2536F:qÄ«n 0x25371:zé 0x25372:nà 0x25373:niÇ” 0x25374:yì 0x25377:cÅ�ng 0x25378:shÄ« 0x25379:jiÇŽn 0x2537A:zÅ�ng 0x2537B:yÇŽn 0x2537C:yÄ«ng 0x25380:ruÇŽn 0x25382:róng 0x25383:xì 0x25385:guÄ�n 0x25386:kài 0x25388:wù 0x2538A:qín 0x2538B:cÅ�ng 0x2538D:zé 0x2538E:xiè 0x25390:yù 0x25391:zàn 0x25392:chuÄ�ng 0x25393:lÇ� 0x25394:lÇ� 0x25395:xù 0x25396:mí 0x25397:xù 0x25398:ruÇŽn 0x2539B:guì 0x2539C:rÇ’ng 0x2539F:máo 0x253A1:qín 0x253A2:cuàn 0x253A3:cuàn 0x253A4:cuàn 0x253AE:wÅ« 0x253B0:fÇŽ 0x253B1:bá 0x253B8:qià 0x253B9:zhì 0x253BA:tiào 0x253C4:zhì 0x253C5:zhí 0x253C7:huàn 0x253C8:chóu 0x253CA:zhì 0x253CE:yÇ�ng 0x253D2:wù 0x253D3:bÄ“i 0x253D5:hóng 0x253D6:shÄ›n 0x253D8:jué 0x253D9:kuì 0x253DC:yÇ� 0x253DD:yà 0x253E0:bÄ« 0x253E4:kuà 0x253E5:qiÄ�n 0x253E8:zhÄ�o 0x253EA:kÇŽi 0x253EB:shÄ�ng 0x253EE:àn 0x253EF:zhé 0x253F0:zhì 0x253F7:zhì 0x253F9:jiÇŽo 0x25400:sÄ« 0x25401:pú 0x25402:Ç’u 0x2540A:zhuó 0x25411:yÄ«ng 0x25413:huÄ�n 0x25415:yà 0x25418:shí 0x25419:pÄ�,bÄ� 0x2541A:pÇ” 0x2541E:máng 0x2541F:chÄ�i 0x25429:yún 0x2542C:gÇ” 0x25439:dÇŽn 0x2543B:náo 0x2543D:zhé 0x2543F:hú 0x25445:kÄ“ng 0x25447:dié 0x25448:tÄ«ng 0x2544B:guài 0x2544E:qiÅ�ng 0x2544F:shÇ� 0x25450:jiÇŽ 0x25451:ào 0x25452:nÇŽ,kÄ“ng 0x25453:pÇ�n 0x25454:jiá 0x25461:zhè 0x25462:bù 0x25463:wÇ’ 0x25465:chÇŽ 0x2546A:náo 0x2546B:kÄ�n,kÇŽn 0x2546F:dú 0x25470:guài 0x25471:qióng 0x25473:róng 0x25474:yÇ� 0x25475:duÄ« 0x25476:lÄ›i 0x25478:zhÅ�u 0x25479:kuÄ� 0x2547A:Ä“ 0x2547B:xiÄ�n 0x2547C:diàn 0x2547D:nuò 0x2547E:è 0x2547F:yÅ�ng 0x25480:wù 0x25481:kÄ“ng 0x25493:zhì 0x25497:zhÇ� 0x25498:xún 0x2549B:zhèng 0x2549E:yáng 0x254A0:huò 0x254A1:jí 0x254A2:nÇŽo,lì 0x254A7:yà 0x254A8:lù 0x254AB:fÅ« 0x254AC:sÇŽn 0x254AD:chù 0x254AE:wÄ›i 0x254B0:fÇ” 0x254B1:kÄ“ng 0x254B2:sì 0x254B3:kàng 0x254B5:yì 0x254B6:huà 0x254BE:yÇ” 0x254C3:lì 0x254C6:lÇ�n 0x254C7:dÇ” 0x254C8:è 0x254CC:qiÇŽng 0x254CD:dú 0x254D0:jié 0x254D1:chuò 0x254D2:xiàn,kàn 0x254D6:gÇŽo 0x254EC:dào 0x254F0:hÅ�ng 0x254FB:zÅ�ng 0x254FE:qì 0x254FF:tuó 0x25500:hÅ�ng 0x25501:pÇ� 0x25502:gèng 0x25504:niè 0x25507:kÅ�ng 0x2550A:zhÇ� 0x25511:xiÇŽo 0x25521:shè 0x25522:yú 0x25523:jiÄ�ng 0x25529:qÇ� 0x2552A:chÄ›n 0x2552B:sÇŽng 0x2552D:suÇ’ 0x2552E:qián 0x2552F:huì 0x25531:shàn 0x25532:è 0x2553B:qiÅ« 0x2553D:kè 0x25540:wÄ“ng 0x25541:zÄ« 0x25542:jí 0x25547:dÇŽ 0x25549:cuò 0x2554D:lÇ’u 0x2554E:kÄ�ng 0x2554F:kuò 0x25550:dí 0x25551:qiÄ“,jÅ« 0x25553:mò 0x25556:guÇ’ 0x25557:hÅ�ng 0x25558:cháo,suÇ’ 0x25559:hÄ“i 0x25562:cáo 0x25563:zhé 0x25566:gÇ”n 0x25570:xÅ« 0x25571:péng,pÄ“ng 0x25572:jué 0x25575:gÇŽn 0x25576:sÄ« 0x25578:suì 0x25579:què 0x2557B:wú,wÇ” 0x2557C:yán 0x2557D:pèng 0x2557E:xiÇŽo 0x2557F:pÄ�n 0x2558D:là 0x25597:bèng 0x25598:zhÄ›n 0x25599:jí 0x2559C:jÇ�n 0x2559D:lián 0x2559E:kÄ›n 0x255A0:zhóu,dú 0x255A8:zào 0x255AA:lè 0x255AB:qÄ« 0x255AC:bìng 0x255B5:yÇ�n 0x255B6:pÄ«n 0x255BB:sÇ’u 0x255BC:lÇœ 0x255BE:dí 0x255BF:dú 0x255C0:liÇŽo 0x255C1:zhuó 0x255CA:chÇŽng 0x255D2:chèn 0x255D3:tà 0x255D9:què 0x255DA:dào 0x255DD:rÇŽng 0x255DF:pò 0x255E6:zhÅ�ng 0x255E7:xiÄ“ 0x255EA:jiÄ�ng 0x255EB:qú 0x255EC:lÄ›i 0x255ED:cà 0x255EE:quÄ“ 0x255F5:xiàng 0x255F6:lèi 0x255FA:làn 0x255FF:lÇŽ 0x25601:lÇŽ 0x25604:yù 0x2560A:jiào 0x2560B:qín 0x2560C:jÄ« 0x2560F:gÇŽn 0x25612:yì 0x25620:yì 0x25621:zhÄ« 0x25624:biÇŽo 0x25625:shÄ“ng 0x25626:jiù,shè 0x2562B:hÄ“ 0x2562C:fú 0x2562E:jÅ« 0x25640:zuÇ’ 0x25641:yí 0x25646:xiàn,zhÄ« 0x25647:yí 0x25649:sì,tái 0x2564B:chuì 0x2564E:mò 0x25661:zhÄ�n 0x25663:xún 0x25666:rú 0x25668:huò 0x2566C:shÄ�o 0x25670:shòu 0x2567E:yòu 0x2567F:yù 0x25682:jùn 0x25689:zÄ« 0x2568A:lù 0x2569A:chÇ� 0x2569B:kÅ«n 0x256A0:zhùn 0x256A6:hóu 0x256A9:xÇ” 0x256BE:zÅ�ng 0x256BF:yìng 0x256C2:zhÅ« 0x256C5:liù 0x256D1:nù 0x256D8:bì 0x256DA:chì 0x256DC:zÇ” 0x256DD:féng 0x256DE:lù 0x256DF:pÇ” 0x256E5:zhuàn 0x256E7:zhé 0x256E8:shÄ« 0x256E9:yÇ” 0x256EA:lù 0x256EB:liáng 0x256EF:jué 0x256F0:liào 0x256F1:bÄ“ng 0x25703:yì 0x25704:guÄ�n 0x2570C:ÇŽo 0x2570F:guì 0x25710:mÇ�n 0x25712:yÇŽn 0x25713:lán 0x25716:bó 0x25719:zàn 0x2571A:yÇ’u 0x25725:yì 0x25726:nÇ�,xiÇŽn 0x2572C:nÇ�,xiÇŽn 0x2572D:guÇ’ 0x2572E:jùn 0x25730:shÄ« 0x25732:xiÇŽn,jiÇŽn 0x25734:qiÄ�n 0x25735:què 0x25736:kuí 0x25740:shé 0x25742:huò 0x25744:wàn 0x2574A:fèi 0x2574B:fèi 0x2574C:jÄ« 0x2574D:yù,wáng 0x25751:zhÄ« 0x25752:guà 0x25754:jié 0x25755:máng 0x25756:hé,xié 0x25758:yÇ’u 0x2575F:dù 0x25760:sÄ«,xiù 0x25762:lì 0x25765:jié 0x25766:niÇ” 0x25767:bà 0x25768:yú 0x2576E:zhÄ« 0x25778:hé 0x25779:kÄ“ 0x2577E:dù,zhà 0x2577F:jiÄ� 0x25781:chÄ“n 0x25783:chuì,shù 0x25784:hé 0x25785:zhÇŽi 0x2578A:mèi 0x2578D:hé 0x2578E:zÇ� 0x2578F:zhú 0x25792:tuó 0x25798:zùn 0x2579A:rú 0x2579B:duò 0x2579C:jiàng 0x257A7:héng 0x257A9:bÄ“ng,hé 0x257AA:mò,mÇ� 0x257AF:zú 0x257B2:biÄ“ 0x257B4:kù 0x257B5:jiá 0x257BA:zhuÅ� 0x257BC:xiÅ« 0x257C3:hé 0x257C5:qiÄ�o 0x257CD:fÄ›i 0x257CE:shÄ“ng 0x257D2:zhuì 0x257D3:kuÇŽn 0x257D4:zè 0x257D5:xiÄ�n 0x257D7:bì 0x257D8:yì 0x257DA:chàng 0x257EA:mào 0x257F6:wÇŽn 0x257FD:wÅ« 0x257FE:kÅ« 0x257FF:wÇ’ 0x25800:xÄ«ng 0x25801:kÄ“ 0x25803:jiÅ« 0x25804:duÄ�n 0x25805:huàn 0x25808:zhì,jì 0x25809:cè 0x2580A:róu 0x2580B:jí 0x2580D:yè 0x2581B:jÄ«ng 0x2581C:yàng 0x25821:zÇ’ng 0x25829:cÇŽn 0x25831:sÄ« 0x25832:lì 0x25833:gÇ” 0x25834:chàng 0x25836:fÄ›i 0x25837:liú 0x25839:jié 0x2583A:yÅ«n 0x2583D:zhì 0x25840:chóu 0x25841:biÄ“ 0x25852:jÄ« 0x2585C:luó,suì 0x2585D:jiÄ�n,qiÄ�n 0x2585F:chuÄ�ng 0x25860:shuÇŽng 0x25862:lÇœ 0x25863:jùn 0x25864:jiào 0x25866:tì,dì 0x25867:zhÄ� 0x2586A:yì 0x2586C:cÅ�ng 0x2586D:nÄ›i 0x2586E:jiÄ� 0x25874:jì 0x2587D:ài 0x25887:jiÇŽn 0x2588A:bèn 0x2588C:fán 0x2588D:hù,suì 0x2588E:zùn 0x2588F:diàn 0x25890:gÄ�o 0x25891:gÇŽo,hào 0x25892:láo,lào 0x25894:zhuó,zhào 0x2589F:hù 0x258A2:tuí 0x258A6:bì 0x258A7:jú,yì 0x258AE:huá 0x258B2:chéng 0x258B6:kuài 0x258B7:dÄ�ng 0x258B8:gé 0x258B9:xié 0x258BB:jié 0x258BD:cÄ�n 0x258C6:zú 0x258C8:pú 0x258CB:shÇ” 0x258CC:bÇ” 0x258D7:níng 0x258D8:yÇŽn 0x258D9:zhòu,còng 0x258DB:méng 0x258DD:biÇŽn 0x258DF:xiàng 0x258E4:lù 0x258E5:lí 0x258E9:jì 0x258EB:miè 0x258EC:lèi 0x258EE:zhì 0x258EF:yÅ�u 0x258F0:biÇŽn 0x258F8:mù 0x258F9:ràn 0x258FA:ràn 0x25902:niÇŽo 0x2590A:quán 0x2590B:zhé 0x25910:lèi,léi 0x25917:dÇŽng 0x25918:jué 0x2591C:líng 0x2591E:líng 0x2591F:yán 0x25923:yÇŽo 0x25924:zhèn 0x25925:qÄ« 0x25926:ài 0x25928:nú 0x25929:mÇŽng 0x25931:kÇŽn,hÄ�n 0x25933:jiÅ«,cuàn 0x25934:yÇŽn 0x25935:miàn 0x25937:yín 0x25938:wán 0x25939:yào,yÇŽo 0x2593A:wÄ� 0x2593B:pí 0x2593C:suì 0x25945:kÇ’ng 0x25948:hóng,wòng 0x2594A:mÇ�ng 0x2594B:líng 0x2594C:yì,dié 0x2594D:shÄ“n,shèn 0x2594F:zuò 0x2595B:tÅ«,bá 0x2595D:yòng 0x2595F:wà 0x25960:guÇ� 0x25961:hòng 0x25965:shì 0x25967:xiòng 0x25969:Ä�,xiàng 0x25971:chéng 0x25973:kÄ“ng 0x25974:yì 0x25975:yàng 0x25976:tíng 0x25977:dòu 0x25978:chá 0x25979:liù 0x2597D:qiú 0x2597E:xuÇŽn 0x2597F:shÄ“n 0x25980:kuÄ�n,mì 0x25981:tòng 0x25983:qiÇŽn 0x25985:chòu 0x2598A:wÄ›n 0x2598C:lòng 0x2598D:ÇŽn,yÇŽn 0x25994:kÇŽn 0x25996:yÇŽo 0x25998:fú 0x2599C:bèng 0x2599D:lÇŽn 0x2599E:qià 0x2599F:diàn 0x259A2:jiào 0x259A3:guÄ« 0x259A5:xiòng 0x259A8:kè 0x259B6:xiàn 0x259B7:wòng 0x259C2:gÇ’ng 0x259C6:Ç’u 0x259C7:kÄ“,cháo 0x259CB:kÅ« 0x259D1:tián,diÄ�n,yÇŽn,chÇŽn 0x259D2:gòu 0x259D3:mÇŽ 0x259D5:liù 0x259D9:wèi 0x259DA:wÄ›n 0x259E1:gòng 0x259E3:tú 0x259E4:níng 0x259E7:mì 0x259EB:láng 0x259EC:qiÇŽn 0x259ED:mán 0x259EE:zhé 0x259F0:huà 0x259F1:yÅ�ng 0x259F2:jìn,jÇ�n 0x259F4:mèi 0x259F7:fú 0x259FB:qú 0x25A0C:liù 0x25A0D:fù 0x25A0E:dàn 0x25A10:gÇ’ng 0x25A12:cuì,cuàn 0x25A15:xÇ�ng 0x25A1C:tÅ« 0x25A1D:shòu 0x25A2A:qióng 0x25A33:róng 0x25A3B:lì 0x25A3F:jÄ« 0x25A40:tuò 0x25A4C:tóng 0x25A52:tán 0x25A54:líng 0x25A56:yì 0x25A57:ruÇŽn 0x25A59:pÇŽ 0x25A5D:cà 0x25A61:yuè 0x25A62:què 0x25A63:zhù 0x25A64:hài 0x25A71:fá 0x25A72:hài 0x25A80:bÅ« 0x25A81:pÄ«ng 0x25A82:liè 0x25A8A:kuÇ�,jué 0x25A8B:fú 0x25A8C:tiÇŽn 0x25A8D:wò 0x25A8F:jÅ« 0x25A98:zhÄ“n 0x25A9A:fú 0x25AA2:lóng 0x25AA6:xì 0x25AA7:tián 0x25AAB:jì 0x25AAF:yào,qiáo 0x25AB1:cù 0x25AB4:pàng 0x25AB5:qiè 0x25ABB:lóng 0x25ABC:jÇ� 0x25AC2:tóng 0x25AC3:yí 0x25AC5:chÄ�ng 0x25ACB:gÅ�ng 0x25ACE:dòng 0x25AD6:xiÄ�ng 0x25AD9:tÇ�ng 0x25ADB:zhuÄ�n 0x25ADC:yÇ� 0x25ADD:yì 0x25ADE:zÇ� 0x25ADF:qÇ� 0x25AE2:chÇŽ 0x25AEC:dùn 0x25AEF:chÅ�ng 0x25AF0:lù 0x25AF1:dùn 0x25AF3:fÄ�ng 0x25AF4:shì 0x25AF5:tì 0x25AF6:jÄ« 0x25AF7:qiÅ« 0x25AF8:shuÇ� 0x25AF9:chén 0x25AFC:huàng 0x25AFD:shi 0x25B00:yún 0x25B06:lóng 0x25B08:mÇŽn 0x25B09:gÅ�u 0x25B0D:xiÄ�n 0x25B0E:mò 0x25B10:shÄ›n 0x25B12:pÅ� 0x25B13:yào 0x25B14:qÅ« 0x25B15:rÇŽn 0x25B19:jù 0x25B1C:yÇ�n 0x25B1D:bái 0x25B1E:niè 0x25B20:chÅ�u 0x25B2A:róng 0x25B2B:chuÇŽn 0x25B2C:niè 0x25B2D:lì,liè 0x25B2E:jiÄ�ng 0x25B2F:kÇŽo 0x25B30:cè,zhà 0x25B31:chòng 0x25B32:zhuÄ�,duò 0x25B33:zÇ� 0x25B34:yáng 0x25B3C:wÄ›n 0x25B4B:jì 0x25B4C:jì 0x25B50:lÇœ 0x25B51:qiú 0x25B52:dùn 0x25B53:báo 0x25B54:chÄ�n 0x25B56:bó 0x25B58:chÄ« 0x25B59:zhè,niè 0x25B5A:màng 0x25B5C:jì 0x25B5D:miào 0x25B5E:yuàn 0x25B60:wú 0x25B61:zhì 0x25B62:pÄ«ng 0x25B65:chÅ�ng 0x25B6B:mí 0x25B6C:féi 0x25B6D:cuÅ� 0x25B6E:méng 0x25B8D:yín 0x25B8E:mÇŽng 0x25B8F:diÇŽn 0x25B90:diÄ�o 0x25B92:qián,zhÄ�n 0x25B95:hàng 0x25B96:zhí 0x25B97:jú 0x25B98:niàn 0x25B9C:mí 0x25B9D:gÇ” 0x25BA3:zhuÄ� 0x25BA4:niè 0x25BA5:zhuó 0x25BA7:yè 0x25BA8:còng 0x25BAA:xÅ«,jí 0x25BAC:xì 0x25BAF:bÅ� 0x25BBE:cÇŽn,zÄ�n 0x25BC3:yÇŽn 0x25BD1:jÇ�n 0x25BD4:jÇ” 0x25BD5:dàng 0x25BD6:dù 0x25BD8:yé 0x25BD9:jìng 0x25BDA:kè 0x25BDB:luò 0x25BDC:wÄ›i 0x25BDD:tÅ« 0x25BDE:yóu 0x25BDF:pài 0x25BE1:pí 0x25BE2:dìng 0x25BE4:wÄ›i 0x25BE5:chè 0x25BE6:jiàn,shà 0x25BE8:sÄ« 0x25BE9:zhuó 0x25BEA:sòu 0x25BEC:ruÇŽn 0x25BEE:yú 0x25BF3:è 0x25BF6:kÇ” 0x25BF8:zhù 0x25BFE:xiá 0x25C1B:fú 0x25C1C:táo 0x25C1D:xÄ« 0x25C1E:chÅ�u,sÇ’u 0x25C1F:yuán 0x25C20:lǘ 0x25C21:cè 0x25C22:shàn 0x25C23:liú 0x25C25:xì 0x25C26:jÄ« 0x25C27:yÇ� 0x25C28:tán 0x25C2A:hú 0x25C2D:cuÅ�,zhÇŽ,cÄ« 0x25C2E:gÄ› 0x25C30:shì,shé 0x25C31:sÄ�o 0x25C32:hòng 0x25C33:xiàn 0x25C36:xiá 0x25C3B:mù 0x25C3C:suÇ’ 0x25C3E:zhài 0x25C40:fÅ« 0x25C41:sè 0x25C42:nú 0x25C43:yì 0x25C67:qín 0x25C68:qìng 0x25C75:huì,suì,xí 0x25C76:shuÇŽng 0x25C77:dÇŽn 0x25C78:Å�u 0x25C79:mò 0x25C7A:qiÄ�n 0x25C7B:chì,tú 0x25C7C:pái,pì 0x25C7D:juàn 0x25C80:cháo 0x25C81:liè 0x25C82:bÄ«ng 0x25C83:kòu 0x25C84:dàn 0x25C85:chóu 0x25C86:tÅ�ng 0x25C87:dàn 0x25C88:mÇŽn 0x25C89:hù 0x25C8A:liáo 0x25C8B:xián 0x25C8D:cáo 0x25C8E:lù 0x25C8F:chuàn 0x25C90:wú 0x25C91:mán 0x25C95:zÇ� 0x25C97:dù 0x25C9A:shuàng 0x25C9B:fù 0x25C9C:jù 0x25C9D:zhòu 0x25C9F:diào 0x25CA0:wàng 0x25CA1:chuÄ�ng 0x25CA2:qiÄ�n 0x25CA3:tuì 0x25CA5:lián 0x25CA6:biÄ�o 0x25CA7:lí 0x25CAA:lí 0x25CC6:bì 0x25CC7:fù 0x25CC8:cuì 0x25CC9:dÅ« 0x25CCB:zàn,zÄ�n 0x25CCC:lóng 0x25CCD:xún 0x25CCE:qióng 0x25CCF:jÄ« 0x25CD0:qiÇŽn 0x25CD2:jiÇŽn 0x25CD3:shÄ�o 0x25CD4:duò 0x25CD5:shÅ« 0x25CD6:bù 0x25CD7:xÅ« 0x25CD8:dÇ’ng 0x25CDA:rán 0x25CDC:yáng 0x25CDD:ruÇ� 0x25CDE:lìn 0x25CDF:jiÇŽn 0x25CE0:dì 0x25CE1:fén 0x25CE2:diàn 0x25CE3:zuì 0x25CE5:nÇ�ng 0x25CEA:suàn 0x25CEB:tiÇŽn 0x25CEC:àn 0x25CEF:cè 0x25CF0:dìng 0x25CF1:shÄ“n 0x25CF2:dù 0x25CF3:tí 0x25CF4:jiÇŽo 0x25CF5:zuì 0x25CF6:zhÇŽng 0x25CF7:jiÇŽn 0x25CF8:dàn 0x25CF9:dÇŽn 0x25CFA:sÇ’ng 0x25D10:zhÇŽn 0x25D11:tíng 0x25D12:zhì 0x25D15:yóu 0x25D16:pái 0x25D21:lÇ� 0x25D24:qián 0x25D26:suì,dí 0x25D27:jÇ” 0x25D28:ài 0x25D29:gé 0x25D2A:jù 0x25D2B:tún,diàn 0x25D2C:bì 0x25D2D:qià 0x25D2E:bó 0x25D2F:huì 0x25D31:jiàn 0x25D34:gÅ�u 0x25D35:suàn 0x25D3A:cí 0x25D3B:qiàng 0x25D3F:yán 0x25D4F:diàn 0x25D52:miè 0x25D5C:pò 0x25D5D:lÇ�ng 0x25D5E:jié 0x25D5F:zhù 0x25D60:gÇ” 0x25D63:duÄ�n 0x25D64:zhào 0x25D66:shÇŽo 0x25D67:qÇ�n 0x25D68:mí 0x25D6A:píng 0x25D6B:cóng 0x25D6C:chÅ�u 0x25D6F:sà 0x25D76:tiÇŽn 0x25D85:liú 0x25D86:lǘ 0x25D87:lÇ” 0x25D88:zÅ�u 0x25D8C:lÇœ 0x25D8D:huÇŽn 0x25D8F:tiáo 0x25D90:tuí 0x25D91:qiÇŽng 0x25D92:lìn 0x25D93:bÄ“i 0x25D94:páo 0x25D95:zhÄ�n 0x25D97:lì 0x25D9B:tí 0x25D9C:hú 0x25DA2:liè 0x25DB5:huÇ� 0x25DB6:qÅ« 0x25DB7:xuÇŽn 0x25DB9:jìng 0x25DBA:dié 0x25DBB:suí 0x25DBD:wèi 0x25DBF:yán 0x25DC0:yÄ�n 0x25DC1:bàn 0x25DC3:jiÇŽng 0x25DC4:nÇ� 0x25DC5:lì 0x25DC6:hú 0x25DC7:qì 0x25DC8:zhÅ�ng 0x25DD1:bì 0x25DD4:yú 0x25DD5:dié 0x25DD6:lìn 0x25DD7:lì 0x25DD8:zhuó 0x25DD9:jì 0x25DDA:jÅ« 0x25DDC:fÄ“ng 0x25DDE:yù 0x25DE8:liè 0x25DE9:zá 0x25DEA:qián 0x25DEB:jiÄ“ 0x25DEC:guÄ�n 0x25DEE:zhuó,zhÄ�o 0x25DF1:fù 0x25DF9:sè 0x25DFC:cù 0x25E03:huÇ� 0x25E08:dàng 0x25E09:lóng 0x25E0A:yì 0x25E17:sÇŽ 0x25E18:yuè 0x25E1A:dí 0x25E21:gÇŽn 0x25E22:zÄ�n 0x25E23:shàn 0x25E24:yù 0x25E25:bÇ’ 0x25E27:dìng 0x25E28:fán,bÇ’,bÇ” 0x25E2A:yù 0x25E2C:shÄ“n 0x25E32:gÅ�ng 0x25E34:miè 0x25E35:tún 0x25E38:liè 0x25E41:zhÄ�,zuò 0x25E42:pÄ“i 0x25E44:mí 0x25E46:míng 0x25E47:fàn 0x25E49:nà 0x25E4A:sì 0x25E4B:yí 0x25E4C:jiÄ� 0x25E4D:zhù 0x25E53:bÄ�n 0x25E54:yù 0x25E56:pÇ’ 0x25E5A:huÄ�n 0x25E5B:càn 0x25E5C:jiÄ�o 0x25E60:tán 0x25E69:zhì 0x25E6B:mÇ� 0x25E6C:kÇŽo 0x25E71:yÄ�o 0x25E72:duì 0x25E73:quÇŽn,huán 0x25E74:bù 0x25E75:chù 0x25E76:qiÇŽo 0x25E77:liú 0x25E78:bó 0x25E7A:kÄ�ng 0x25E7B:fèn 0x25E85:dào 0x25E89:dòu 0x25E8A:gé 0x25E99:líng 0x25E9A:xí 0x25E9C:nì 0x25E9D:zhÅ�u 0x25E9E:zhÅ�u,yù 0x25EA3:chÅ�u 0x25EB4:niÄ�n 0x25EB5:jÄ« 0x25EB7:qÅ« 0x25EC4:kÄ�i 0x25EC7:xiàn 0x25EC9:hé 0x25ECB:lín 0x25ECD:zÄ« 0x25ED1:Ç’u,lì 0x25ED2:cù,mì 0x25ED7:chá 0x25EDD:zhòng 0x25EDE:bú 0x25EE4:chÅ�u 0x25EE5:xì 0x25EE6:sà 0x25EE7:xián,jiÄ�n 0x25EE8:sè 0x25EE9:miàn 0x25EEB:fán 0x25EEC:zhÄ« 0x25EEE:cuì 0x25EF4:xià 0x25EFE:nuò 0x25EFF:lí 0x25F00:zú 0x25F02:cuÄ« 0x25F03:zé 0x25F05:lí 0x25F18:qí 0x25F1A:zhuÅ� 0x25F1B:cuì 0x25F1C:pÅ« 0x25F1E:fán 0x25F1F:tán 0x25F29:zÄ« 0x25F2A:zÇ” 0x25F2B:zhÅ�u 0x25F2C:róng 0x25F2D:lín 0x25F2E:tán 0x25F36:shì 0x25F3A:cuÇ� 0x25F3B:zÄ« 0x25F3C:fÅ« 0x25F41:xiào 0x25F48:fÄ“ng,lÇ� 0x25F4F:xiàn 0x25F50:jiàn 0x25F52:fèn 0x25F57:lì 0x25F58:mò,miè 0x25F5F:yÅ�u 0x25F65:huò 0x25F67:qÅ« 0x25F6C:niàng 0x25F70:mí 0x25F73:qì 0x25F76:hé 0x25F78:liàn 0x25F7F:zuò 0x25F82:líng 0x25F85:zhú 0x25F87:niÇŽo 0x25F8A:jÇ� 0x25F8B:réng 0x25F8C:jié 0x25F8D:gÇŽn 0x25F90:yì 0x25F93:zhóu 0x25F95:wù 0x25F9A:gÄ›ng,dÇŽn 0x25F9B:cù 0x25F9D:miè,miÇŽn 0x25FA1:xún,jÄ« 0x25FA3:zhÄ« 0x25FA4:xiáo 0x25FA7:fú 0x25FA8:hú 0x25FAC:dÄ« 0x25FAE:jué 0x25FAF:diào 0x25FB9:shÇ’u 0x25FBC:wÇŽng 0x25FC3:nà 0x25FC4:dÄ« 0x25FC5:shì 0x25FC6:cí 0x25FC7:shÅ« 0x25FC9:wà,mò 0x25FCA:chè 0x25FCB:fán,biàn 0x25FCD:gÅ« 0x25FCE:yuÄ�n,wÇŽn 0x25FD1:guÄ�n,lún 0x25FDA:qiè 0x25FDC:zhÇŽn,zhÄ›n 0x25FDD:dài 0x25FDE:shÄ“ 0x25FE6:zhÅ�u 0x25FE7:xiÇŽng 0x25FE8:míng 0x25FE9:zì 0x25FEA:huÄ�ng 0x25FEB:mí,yì,wèi 0x25FED:xì 0x25FEE:zhì,shì 0x25FEF:pài 0x25FF0:duÇ’ 0x25FF4:cì 0x25FF5:móu 0x25FF7:chào 0x25FF9:yì 0x25FFA:gÅ�u 0x26007:jÄ«ng 0x26013:zÄ“ng,jiÄ“ 0x26014:pÄ«ng 0x26015:yè 0x26016:jié 0x26018:pÄ«,bÄ« 0x2601B:shÄ� 0x2601C:zhuàng 0x2601D:jiÇ’ng 0x26020:liú 0x26021:yÇ” 0x26023:jÅ« 0x26028:nuò 0x26038:mào 0x26044:chÄ“n 0x26046:zhuàn,juàn,shuàn 0x26047:niàn 0x26048:kòng 0x26049:jiÄ“ 0x2604A:huà 0x2604D:xÄ«n 0x2604E:zuó 0x2604F:yàn 0x26050:jué 0x26055:hÅ« 0x26056:zhòu 0x26057:shè 0x26059:yÇŽn 0x2605B:xiè,dié 0x2605C:dié 0x2605F:chÄ“n,chén,zhÄ›n 0x26072:jiÇŽn 0x26073:jì 0x26076:chuò 0x26077:hóng 0x26080:dá 0x26084:kÄ�i 0x26085:xÄ«ng,xÇ� 0x26086:huì 0x26087:jiÇŽn 0x26088:zhòu 0x26089:zhÇŽ 0x2608A:fù 0x2608B:chì 0x2608C:bÄ›ng 0x2608D:nuò 0x26091:jì 0x26092:qián 0x26094:wàn 0x26095:óu 0x26096:bì 0x26097:shuò 0x260A0:jÄ«ng 0x260A1:yè 0x260C4:fÄ›i 0x260C7:lí 0x260CA:lì 0x260CB:pí 0x260D2:suì 0x260D3:liú 0x260D4:hé 0x260D5:hÇ”n 0x260D6:tÇŽn 0x260D7:shuò 0x260D8:zhì 0x260D9:bó 0x260DD:xì 0x260E1:pó,tÄ�o 0x260E2:qÇ”n 0x260E4:mù 0x260FD:yÅ�ng 0x26102:dài 0x2610A:qÇ� 0x2610B:diÇŽo 0x2610C:niè 0x2610D:shuÇŽng 0x2610F:shÄ�o 0x26110:kÇ”n,mí 0x26111:suì 0x26113:dÅ�u 0x26114:dié 0x2611C:gÅ�ng 0x2612F:zhuÇŽn 0x26130:guó 0x2613C:xÅ« 0x2613D:qú 0x26140:xún 0x26143:jiÄ�o,qiÄ�o 0x26144:zhé 0x26146:diàn 0x26147:sÄ�ng 0x26148:bÄ“ng 0x2614A:suÇ’ 0x2614B:qiÇŽn 0x2614F:xÅ« 0x26151:xún 0x26154:mò 0x26175:suì 0x26176:là,liè 0x26177:zhÇ”,zhù 0x26178:zhòu 0x2617A:lì 0x2617C:dÄ�n 0x2617D:jú 0x2617F:yùn 0x26180:chÇŽn 0x26181:luó 0x26184:sè 0x26186:lián 0x26188:zuÇŽn,zuí 0x2618B:lài 0x2618C:shuÇŽng 0x2618D:qiè 0x26198:dÅ�u 0x2619E:wù 0x2619F:méng 0x261A1:jì 0x261A4:chÄ« 0x261A6:nÇ� 0x261B8:yáo 0x261BB:là 0x261BE:lÇœ 0x261C0:suì 0x261C1:fÅ« 0x261C4:lÄ›i 0x261C5:wÄ›i 0x261CE:cÅ�ng 0x261D4:lì 0x261D6:pín 0x261D8:jÅ«n 0x261D9:jÇ” 0x261DB:là 0x261E7:jì 0x261EA:miè 0x261EC:yào 0x261ED:biÄ�n 0x261F1:cóng 0x261F2:sÄ«,chÄ« 0x261F5:sÄ« 0x261F8:hé 0x26203:nàng 0x26205:dié 0x26208:chè 0x26209:yùn 0x2620B:xiÇ” 0x2620C:shÅ« 0x2620E:chÇŽn 0x2620F:mín 0x26210:lián 0x26211:yÄ«n 0x26212:xÄ«ng 0x26213:wÄ“i 0x26214:gÇ” 0x26215:tóu 0x26216:tÄ� 0x26217:fÄ›i 0x26218:dÄ� 0x26219:niè 0x2621A:cù 0x2621B:zuÇ’ 0x2621C:jié 0x2621D:xuàn 0x2621E:bó 0x2621F:jÄ«n 0x26220:yÇ�n 0x26221:xÅ« 0x26223:yú 0x26224:xiòng 0x26226:qì 0x26227:bÄ“i 0x26228:xíng 0x26229:gÇ’ng 0x2622C:zuÇ� 0x26230:jiÄ“ 0x26232:kÄ�i,gÇ” 0x26235:xíng 0x26236:bÄ“i 0x26237:shÅ« 0x26238:yù 0x2623A:zhÇ’u 0x2623B:zhÇŽn 0x26242:zhÅ�ng 0x26246:chá 0x26248:chuí 0x26249:liù 0x2624E:suÄ« 0x26250:zhÇ” 0x26259:biàn 0x2625D:xìn 0x2625F:yà 0x26262:líng 0x26267:yà 0x2626C:tÄ«ng 0x26279:dí 0x26281:pí 0x26282:hù 0x26283:cén 0x2628A:tiÄ�n 0x2628B:mÇ’u 0x2628C:juÇŽn 0x2628E:mÇ’u 0x26290:jù 0x26291:liÇ” 0x26293:lÇ�ng 0x26297:liÇ” 0x26298:hù 0x262A6:fú 0x262A7:hú 0x262AA:è 0x262AB:gÅ�ng 0x262AC:gÅ« 0x262B1:guà 0x262B9:lüè 0x262BB:fán 0x262BC:lÇœ 0x262BD:méng 0x262BE:fú 0x262BF:liú 0x262C5:xié 0x262C6:gÅ« 0x262C8:xiàn 0x262C9:bó 0x262CB:jì 0x262D3:quÄ�n 0x262D4:lù 0x262DE:shuò 0x262E1:mÇ’u 0x262E2:yù 0x262E3:hàn 0x262E9:yuè 0x262EA:dàn 0x262EF:yú 0x262F0:jiÄ�n 0x262F3:gÄ�ng 0x262FF:cáo 0x26300:shèn 0x26301:liÇ”,lóu 0x26306:jiÄ�o 0x26309:sù 0x2630A:sù 0x2630B:zhòng 0x26312:liào 0x26314:xuÇŽn 0x26315:lù 0x26317:jì 0x2631A:yán 0x2631F:lù 0x26321:mÇ�n 0x26322:tí 0x26326:huàn 0x26329:yì 0x2632A:tÇŽn 0x2632C:wÇ”,wú 0x26330:jÄ« 0x26337:dú 0x26338:kÅ«n 0x2633A:jÅ«n 0x2633F:shÄ« 0x26340:nàn 0x26341:pò 0x26344:shÅ« 0x26345:quàn 0x2634C:rèn 0x2634F:fén 0x26352:tà 0x26353:tún 0x26355:yáng 0x26366:duÅ� 0x26367:cÄ« 0x26369:gÇ” 0x2636A:fén 0x2636D:róu 0x26371:gÄ�o 0x26372:xiáng,yàng 0x26374:xiáng 0x26375:hÇ’u 0x26377:tÄ�o 0x26378:shàn 0x26379:yáng 0x2637A:zì 0x2637C:yuán 0x26384:sú 0x26387:chuàn 0x26388:xiáng,xiè 0x2638A:bÄ�n 0x2638C:mÇŽn 0x2638E:fÇ” 0x2638F:lÇŽ 0x26390:lÇ� 0x26392:jié 0x26393:yÅ�u 0x26398:yù 0x2639A:chì 0x2639C:chuàn 0x2639D:yì 0x2639E:shÄ�n 0x263A2:jí 0x263A3:yÄ�n 0x263A6:wù 0x263A7:chún,dÅ«n,dùn 0x263A8:máng 0x263AD:fú 0x263AE:jiÄ� 0x263AF:gòu 0x263B0:gú 0x263B1:jiá 0x263B5:xián 0x263B7:jìn 0x263B8:zì 0x263B9:lóu 0x263BC:gòu 0x263C0:rén 0x263C2:shÄ�n 0x263C5:jué 0x263C6:tóng 0x263C7:yÇ’u 0x263D4:jiÄ�n 0x263D5:dú 0x263D7:hú 0x263DB:sÄ�o 0x263DC:yù 0x263E2:mài 0x263E4:zhÄ« 0x263E5:yÄ�n 0x263E6:gÄ�o 0x263E8:huài 0x263EE:quán 0x263F1:yÇŽng,chài 0x263F3:zuÇ� 0x263F7:xiÄ�o 0x263F8:yì,chí 0x263F9:yÇŽn 0x263FA:hóng,gòng 0x263FB:yú,yù 0x263FF:chì 0x26401:chí 0x26404:háng 0x26405:sè 0x26406:pÄ� 0x26407:tà 0x26408:fÄ“n 0x26409:chÄ« 0x2640C:hóng 0x2640D:xuè 0x26416:zhÇ� 0x2641B:qú,yù 0x26420:xÄ« 0x26421:fú 0x26423:shÅ« 0x26424:hài 0x26426:pò 0x26428:cÇ� 0x26430:chài 0x26433:hÅ�ng 0x26438:pÇŽo 0x26439:shÄ“n 0x2643A:xiÄ�o 0x2643D:xuÄ�n,líng 0x2643E:cÇ� 0x2643F:tíng 0x26440:pò 0x26447:tà 0x26448:chÄ� 0x2644B:zú 0x2644C:huò 0x2644D:xù 0x2644E:yàn 0x2644F:chài 0x26451:tuó 0x26458:xián 0x26459:xuÄ�n 0x2645A:hóu 0x2645B:huÇŽn 0x2645C:gé 0x2645D:chÇ’ng 0x2645E:bì 0x2645F:hÅ�ng 0x26460:hÅ�ng 0x26461:chí,chÄ« 0x26463:chá 0x2646F:zhÇŽ 0x26471:zhái,huò 0x26472:tà 0x26475:pò 0x26476:tà 0x26478:yóu 0x26479:fú 0x2647A:cÄ« 0x2647B:dá 0x2647C:tÇŽ 0x2647E:liú 0x26481:cÄ« 0x26483:hÅ�ng 0x26485:hàn 0x26486:lÄ� 0x26488:shÄ« 0x2648D:tóng 0x2648E:huì 0x2648F:hé 0x26490:piÄ“ 0x26491:yù 0x2649C:xiÄ�n 0x2649D:hÇŽn 0x2649F:pò 0x264A6:là 0x264A7:huò 0x264B0:tài 0x264B4:lÇŽo 0x264B6:shù 0x264BA:dào 0x264BB:diÇŽn 0x264C8:xiòng 0x264CB:wàng 0x264CD:chÄ› 0x264CE:nài 0x264D0:jué 0x264D3:ér,liè 0x264D4:ér,xÅ« 0x264D5:nǘ 0x264D6:nÇœ 0x264DD:zhuÇŽn 0x264E2:nuò 0x264E4:liè 0x264E5:lÄ›i 0x264E7:bÄ� 0x264EC:chÄ“ng 0x264EF:guÄ« 0x264F0:quán 0x264F1:gè 0x264F3:gÇ’ng 0x264F4:shào,shÄ�o 0x264F9:lái 0x264FA:zhÄ“ng 0x264FB:yì 0x264FC:gÇ”n 0x264FD:wÄ“i 0x264FE:lÇ”n,kÇ”n 0x26502:shí 0x26503:yÄ«ng 0x26504:shÄ›ng 0x26505:tú 0x26506:bì 0x26508:zé 0x26509:zhòng 0x2650B:rÇ’ng 0x2650C:qí,sí 0x2650D:fù 0x2650E:cè 0x26513:lí 0x26514:mán,màn 0x26516:lián 0x26517:biÄ�o 0x2651B:chuáng 0x2651C:yì 0x26520:pài 0x26525:yì,shì 0x26526:kuài 0x26529:biÄ�o,pÄ�o 0x2652B:chì,yì 0x2652C:qú 0x2652D:mò 0x2652E:zhé 0x2652F:shà 0x26530:shà,xÅ« 0x26537:yÄ�o 0x26538:gÅ�ng 0x26539:nài 0x2653C:xiè 0x2653F:tiàn 0x26546:yé 0x26549:shÄ� 0x2654F:sào 0x26552:diÄ�n 0x26553:xù 0x26559:qú 0x26560:hÅ�ng 0x26561:shèng 0x26562:tìng 0x26570:duo 0x26575:liáo 0x26577:hòng 0x26578:lÇ� 0x2657A:xiÇŽng,gÄ�o 0x2657D:shèn 0x26580:fÅ« 0x26588:yÇŽn 0x26589:wÇŽng 0x2658A:qÄ« 0x2658B:duÇ’ 0x2658D:huà 0x2658E:qiÄ�n 0x26590:xiè 0x2659D:cì 0x2659E:shÄ“ng,wén 0x265A2:èr 0x265A4:xÄ«ng 0x265A6:tuì 0x265A7:yàn 0x265A9:liè 0x265AC:mí 0x265B8:zòng 0x265BA:zÄ« 0x265BC:hú 0x265BD:yíng 0x265BE:lián 0x265BF:dÄ� 0x265C0:tián 0x265C1:tiàn 0x265CB:róng 0x265CD:ài 0x265D0:ài 0x265D1:zhé 0x265D2:guÅ� 0x265D3:lù 0x265D4:zhÄ�o 0x265D5:mí 0x265D6:liáo 0x265D7:zhé 0x265DB:qÇ” 0x265DC:cÅ�ng 0x265DF:tÄ«ng,tè 0x265E1:tán 0x265E2:zhÇŽn 0x265E3:hú 0x265E5:piÄ“ 0x265E7:dÄ� 0x265E8:róng 0x265EE:nÇŽo 0x265F3:náng 0x265F4:dÄ�ng 0x265F5:jiÇŽo 0x265FB:jù 0x265FC:Ä›r 0x2660A:lì 0x2660C:guÅ� 0x2660D:wài,wà 0x26612:niè 0x26614:jÄ«n 0x26629:pÇ� 0x2662A:chì 0x26632:pÇ� 0x26633:yì 0x26634:dÅ« 0x26635:wÇŽ 0x26636:xÅ«n 0x26638:qì 0x26639:shàn,yuè 0x2663C:xÅ« 0x2663F:hÄ“ 0x26640:pàn 0x26642:pÄ“i 0x26644:xiÅ�ng 0x26646:chÇ� 0x26647:tÄ�n 0x26648:zuì,cuì 0x26649:zuÇŽn 0x2664A:qì 0x2664B:dÅ« 0x26659:shuÇ� 0x2665C:nÇŽ 0x2665D:xÄ« 0x26667:chÇŽo 0x26668:yì 0x2666B:zhÄ“ng 0x2666E:jú 0x2666F:dài 0x26671:sÄ�n 0x26674:zhù 0x26675:wàn 0x26676:gÇ” 0x26678:sÄ�n 0x26679:bàn 0x2667A:jià,jiÄ� 0x2667B:mài 0x26688:tuò,dù 0x2668A:qì 0x2668F:zhuÄ�ng 0x26690:tuó 0x26693:píng 0x2669D:pÄ“ng 0x2669E:kuÄ�ng,kuàng 0x2669F:yí 0x266A1:xiè,mài 0x266A2:yuÄ“ 0x266A3:hén 0x266A5:hóu,yóu 0x266A6:zhÄ“ng 0x266A7:chÇ”n 0x266A8:shì 0x266A9:wÇŽ 0x266AB:xié 0x266B8:gèng 0x266C5:è 0x266CF:kú 0x266D0:nà 0x266D3:jÅ« 0x266D4:xuàn 0x266D5:qÅ« 0x266D6:chè 0x266D7:lÇš 0x266D8:hé 0x266D9:shèng 0x266DA:nàn 0x266DC:hé,hán 0x266DD:chá 0x266DE:yÄ�n 0x266DF:gÄ›ng 0x266E0:niè 0x266E2:guó 0x266E3:yán 0x266E4:guÇŽn 0x266E7:zhì 0x266E8:lao 0x266EF:dÇ” 0x266F0:qì 0x266F1:qÅ« 0x266F2:jué 0x26701:fÄ“ng 0x26703:xù 0x26704:tuì 0x26706:hán 0x26707:kÅ« 0x2670A:shÄ“n 0x2670B:zhì 0x2670D:pàng 0x2670E:zhÄ“ng 0x2670F:lì 0x26710:wÇŽn 0x26712:fÇŽn 0x26713:xìn 0x26716:yà 0x2671B:jÅ« 0x2671C:shèn 0x2672D:mÇŽng 0x2672F:tÇ”n 0x26730:zhuó 0x26731:xÄ« 0x26732:yìn 0x26733:jÄ«ng 0x26734:tún 0x26737:gèng 0x26738:jì 0x2674F:zhuÇŽn,shuàn 0x26752:tiÄ“ 0x26754:zhÄ« 0x26756:jí 0x2675A:yíng 0x2675B:wèi 0x2675D:huàn 0x2675E:tíng 0x2675F:chán 0x26762:kuí 0x26763:qià,kÄ“ 0x26764:bàn 0x26765:chÄ�,zhá 0x26766:tuÇ’ 0x26767:nÇŽn 0x26768:jiÄ“ 0x2676A:yÄ�n 0x2676C:tú 0x2676E:wÄ›n 0x26770:cÅ�ng 0x26773:xù 0x26774:yìn 0x26777:bèng 0x2677C:lǘ 0x26781:zÄ�i 0x26782:dÄ�,da 0x26786:niè 0x26787:jÇ” 0x26788:hóu 0x2678C:gèng 0x26795:hóu 0x26796:kÄ�n 0x26797:gÅ�ng 0x26799:huÇ� 0x2679A:xiè 0x2679D:xì 0x2679E:hán 0x2679F:mí 0x267A1:wÄ›ng 0x267A2:hùn 0x267A3:sÄ�o 0x267A4:xìn,zÇ� 0x267A5:zhé 0x267A6:huò,hè 0x267A8:gÅ�ng 0x267AB:sài 0x267AC:jÄ«n,jiàn 0x267AD:wÄ� 0x267B1:duÇ� 0x267B2:chÄ« 0x267BD:xÄ«,wèi,jí 0x267C2:mí 0x267C3:zÄ�ng 0x267C4:sÇŽng,sào 0x267D3:tún 0x267D4:zhì 0x267D5:wÄ›n 0x267D8:yín 0x267D9:tÇ”n 0x267DB:chÅ�ng 0x267DC:zé 0x267DE:xiÄ�o 0x267DF:mó 0x267E0:cù 0x267E3:biÇŽn 0x267E4:xiÅ« 0x267E7:yí 0x267EE:huÇŽng 0x267F0:zhÄ� 0x267F1:suÅ� 0x267F2:hún 0x267F3:jù 0x26801:cù 0x26804:jÄ« 0x26805:xún 0x26806:sÇ”n,zhuàn 0x26807:céng 0x26809:yì 0x2680E:biÄ�o 0x26812:jué 0x26813:lì 0x26816:pào 0x2681B:zÄ� 0x2681C:yè 0x2681E:bì 0x2681F:zhè 0x26820:zhè 0x26822:jiù 0x26823:zhé 0x26826:shù 0x2682A:xÄ« 0x26837:xÇ” 0x26838:nÇŽi 0x26839:xián 0x2683A:gÇ”n 0x2683B:wèi 0x2683E:jí 0x2683F:sà 0x26842:dÇ’ng 0x26843:nuó,nié 0x26844:dù 0x26845:zhÄ“ng 0x26846:kÅ« 0x26849:míng 0x26855:báo 0x26856:huì 0x26859:zÅ�ng 0x26868:sàn 0x2686A:tÄ“ng 0x2686B:yí 0x2686D:yù 0x26871:yào,shào 0x26872:nÇ�ng 0x26874:chóu,zhÇ’u 0x26875:hùn 0x26877:duì 0x26879:qì 0x2687A:yÇ�ng 0x2687B:bìng 0x2687C:níng 0x2687D:huáng 0x26886:yÇ�ng 0x2688A:báo,bó 0x2688E:guàng 0x2688F:lÄ›i 0x26890:zÇ”n 0x26899:chÇŽn,qiÄ�n,xiÄ�n 0x268A3:jiÇŽn 0x268A7:méng 0x268A9:xiào,sÅ�u 0x268AF:xìn,xìng 0x268B1:lí 0x268BA:qiÇŽo 0x268BF:wÄ›i,juÇŽn 0x268C0:nà,niè,zhé 0x268C2:pÄ�ng 0x268C4:léi 0x268C7:luó 0x268CB:luán 0x268CD:gÄ“ng 0x268CF:luán 0x268D2:qú 0x268D6:luó 0x268D8:náng 0x268DB:luó 0x268DC:yuè 0x268E2:shuì 0x268E5:mì 0x268E6:wáng 0x268E7:cè 0x268E8:jiÄ�n 0x268E9:wÇŽng 0x268EF:jiÄ� 0x268F4:huán 0x268F8:liàn 0x268F9:zì 0x268FA:bái 0x268FB:shÇ’u,bÇŽi 0x268FE:wÇŽn 0x26902:shÅ« 0x26907:guÄ« 0x26908:xÄ« 0x2690A:rú 0x2690B:yào 0x2690E:gÄ�o 0x26915:yuè 0x26918:yÅ�ng 0x26919:wà 0x2691A:bó 0x2691F:xìn 0x26922:pì 0x26923:bó 0x26926:hài,hè,ài 0x26927:zhài 0x26928:wò 0x2692A:yè 0x2692B:bì,bí 0x2692C:hài 0x26938:chì 0x2693B:zhì 0x2693D:ní 0x26941:wú 0x26942:ÇŽi 0x26948:ÇŽi 0x26949:yÇ” 0x2694A:chì 0x2694D:jìng 0x2694E:zhì 0x2694F:zhì 0x26950:zhì 0x26951:jú,jÇ”,póu 0x26956:hán,xián 0x2695A:pÄ«ng 0x2695D:yÇŽo 0x26963:yóu 0x26964:pÄ«ng 0x26966:mò 0x2696C:zuò 0x2696D:pò 0x2696F:xué 0x26970:kuáng 0x26971:yì 0x26972:pò 0x2697B:zhuì 0x26983:ní 0x26984:qiÇ” 0x26985:còu 0x2698C:yÇŽo 0x26991:fén 0x26995:xiá 0x26997:jiÄ�ng 0x26998:chÄ� 0x2699B:xiào 0x2699C:chÄ� 0x269A2:chéng 0x269A3:cuì 0x269A7:qióng,gÇ’ng 0x269A9:yù 0x269AB:yú 0x269AF:wèn 0x269B1:chÄ� 0x269B2:yÇ”,yù 0x269B9:zuó 0x269BA:dÇŽo 0x269BD:juàn,fàn 0x269BE:dÇŽo 0x269BF:yÄ«ng 0x269C1:fÄ›ng 0x269C5:wèng 0x269C8:jìn 0x269C9:qì 0x269CB:qìn 0x269CD:kuò 0x269CF:tÄ�n 0x269D0:xiÄ�n 0x269D2:tiÄ�n 0x269D4:kuò 0x269D6:tiàn 0x269D8:hú 0x269D9:zhÅ« 0x269DA:zhÄ�n 0x269DB:tà 0x269DD:tiÄ�n 0x269DE:tà 0x269DF:tà 0x269E0:huá 0x269E1:yÇŽn,tiàn 0x269E2:tiè 0x269E4:tiè 0x269E5:tà 0x269EC:huài 0x269EE:jiá 0x269EF:qì 0x269F1:tà 0x269F4:tÄ�n 0x269F5:huà 0x269F8:zhuàn 0x269F9:huÄ� 0x269FC:lán 0x26A06:zÅ«n 0x26A07:yì 0x26A08:fú 0x26A09:wù 0x26A0B:fú 0x26A0D:dÄ«ng 0x26A0E:tà 0x26A16:chào 0x26A19:rì 0x26A1A:quÇŽn 0x26A1C:gÄ“ 0x26A21:fú 0x26A22:dì 0x26A23:diÄ�o 0x26A24:yÇ’ng 0x26A26:jià 0x26A29:lóng 0x26A2C:yÇ’ng 0x26A2D:pí 0x26A2F:huó 0x26A30:qióng 0x26A32:fán 0x26A33:wú 0x26A34:tóng 0x26A35:háng 0x26A38:tÄ�n 0x26A3E:hÄ“ng 0x26A44:tiÄ�o 0x26A48:zhÅ�u 0x26A4B:bài 0x26A4C:xiè 0x26A4D:dÄ�o,diÄ�o 0x26A4F:jÄ«n,wéi 0x26A55:hÅ« 0x26A56:bÄ“i 0x26A58:dìng 0x26A5C:nuó 0x26A5D:wèi 0x26A5E:yú 0x26A60:xÄ«ng 0x26A61:fú 0x26A62:xiàn 0x26A63:qì 0x26A64:tÅ« 0x26A67:jí 0x26A69:yìng 0x26A6B:dèng,téng 0x26A6C:wÄ“i 0x26A6D:xÄ« 0x26A6F:pái 0x26A71:shéng 0x26A72:yÇ’u 0x26A74:ái 0x26A75:jiàn 0x26A77:gÅ�u 0x26A78:ruò 0x26A7C:gòng 0x26A7F:shà 0x26A80:táng 0x26A87:lù 0x26A88:áo 0x26A8A:qì 0x26A8B:xiÅ« 0x26A8D:dÄ�i 0x26A91:fá 0x26A92:wèi 0x26A94:dùn 0x26A95:liáo 0x26A96:fÄ�n 0x26A97:huáng,héng 0x26A98:jué 0x26A99:tà 0x26A9A:zùn 0x26A9B:ráo 0x26A9C:cÄ�n 0x26A9D:téng 0x26AA0:huà 0x26AA1:xÅ« 0x26AA3:zhÄ�n 0x26AA7:gÇŽn 0x26AAA:péng 0x26AAB:cÄ�n 0x26AAC:xiÄ“ 0x26AAD:dá 0x26AB1:jì 0x26AB6:lÇ� 0x26AB9:pán 0x26ABD:lóng,lÇ’ng 0x26ABE:lì 0x26ABF:xí 0x26AC0:téng 0x26AC3:líng 0x26AC8:lÇ� 0x26AC9:rán 0x26ACA:líng 0x26ACE:gÇ”n 0x26AD4:pÅ� 0x26AD5:mò 0x26AD6:pÄ�i 0x26AD9:bà 0x26AE1:qí 0x26AE4:yán 0x26AEA:wà 0x26AEB:ÇŽng 0x26AED:mìng 0x26AEE:mÇ�n 0x26AEF:xùn 0x26AF0:méng 0x26AF3:guÇŽi 0x26AF6:jiÄ�o 0x26AFB:gÇŽi 0x26B01:cái 0x26B02:wù 0x26B03:zhé 0x26B04:rÄ›n 0x26B05:kÅ�u 0x26B14:zhÇŽo 0x26B15:zhÅ�ng 0x26B16:qiú 0x26B17:guÅ� 0x26B18:gÅ�ng,sÅ�ng 0x26B19:pÅ« 0x26B1A:hù 0x26B1B:miÇŽn 0x26B1E:tiÄ�n 0x26B23:wÇŽng 0x26B38:zhú 0x26B39:dá,dàn 0x26B3A:xiòng,huÇŽng 0x26B3B:ná 0x26B3E:juÄ�n 0x26B41:niÇŽn 0x26B48:hù 0x26B49:shÄ� 0x26B5C:zhÄ« 0x26B5F:tÄ� 0x26B61:sÄ« 0x26B65:yì 0x26B6D:qióng 0x26B6E:zhì 0x26B6F:lÇš,lóu 0x26B70:rú 0x26B72:qí 0x26B73:yÇ” 0x26B74:zhÅ�u 0x26B75:yáng 0x26B76:xiÇŽn 0x26B77:móu 0x26B78:chóu 0x26B79:huÄ« 0x26B7A:jiÅ« 0x26B7B:jiù 0x26B7C:piÇŽo,bì 0x26B81:jiào 0x26B83:guÄ�i,kuÄ� 0x26B85:mò 0x26B90:xÄ« 0x26B91:pú 0x26BAF:jì 0x26BB6:wÄ›n 0x26BB7:bèi 0x26BB8:yÇ� 0x26BB9:fú 0x26BBA:sÄ« 0x26BBB:juÄ�n 0x26BBC:jì,qí 0x26BBE:nì 0x26BC0:bèn 0x26BC5:xù 0x26BC8:qÇ�n 0x26BC9:bó 0x26BCC:wáng 0x26BCD:zhè 0x26BCF:wò 0x26BD0:sháo 0x26BD1:zào 0x26BD2:yÇŽng 0x26BD5:sòng 0x26BD6:niè 0x26BDB:bì 0x26BE3:cú 0x26BE4:qiÄ�ng 0x26BEA:xiào 0x26BEB:zhÄ« 0x26BEC:shé 0x26BEF:zhì 0x26BF0:pÄ“ng 0x26C0F:diào 0x26C16:wò 0x26C18:zhÇ� 0x26C19:bì 0x26C1B:fén 0x26C21:nà 0x26C25:bÄ�ng 0x26C2A:qiú 0x26C2B:nÇ� 0x26C2C:bó 0x26C2D:dùn 0x26C2F:shÇ� 0x26C30:xÅ« 0x26C31:cháng 0x26C32:xÅ« 0x26C33:yé 0x26C34:mí 0x26C38:xÄ«n 0x26C39:zhuó 0x26C3A:fù 0x26C3D:pÇ� 0x26C3E:xuè 0x26C40:yù 0x26C41:xián 0x26C42:yù 0x26C43:yú 0x26C45:jÅ« 0x26C46:tÄ� 0x26C47:kÅ�ng 0x26C4A:zhÄ“ng 0x26C4B:méng 0x26C4C:gÄ�ng 0x26C52:mù 0x26C53:xÇ� 0x26C54:bì 0x26C56:fù 0x26C5C:xiào 0x26C60:jiÅ« 0x26C63:gÇ’u 0x26C70:chí 0x26C71:jiÅ« 0x26C72:jiÅ« 0x26C75:shÄ� 0x26C77:fÄ“i 0x26CAB:fú 0x26CAF:wàn 0x26CB0:xÅ« 0x26CB1:bÅ� 0x26CC1:hào,mào 0x26CC3:xié 0x26CC4:pián 0x26CC5:yÇ” 0x26CC7:tián 0x26CC8:pí,bì 0x26CCA:shÇ� 0x26CCB:kuÇŽi 0x26CCC:jÄ« 0x26CCF:zhÄ� 0x26CD0:nài,nà 0x26CD1:mÇ’u 0x26CD3:fú 0x26CD4:dù 0x26CD7:shÄ›ng 0x26CD8:chá 0x26CDA:chí 0x26CDB:guÇ� 0x26CDC:mín 0x26CDD:tÄ�ng,dàng 0x26CDE:bài 0x26CDF:qiÄ�ng 0x26CE1:zhuó 0x26CE2:wèi 0x26CE3:xún 0x26CE5:miÇŽo 0x26CE6:zÄ�i 0x26CE7:yóu 0x26CE9:yòu 0x26CEB:shÄ�n 0x26CEC:hé 0x26CED:lÇš 0x26CEE:zhí 0x26CF2:jìng 0x26CF3:zhÄ“n 0x26CF6:méng 0x26CF7:yóu 0x26CF9:wò 0x26CFA:bá 0x26CFD:juàn 0x26CFE:rú 0x26CFF:còu 0x26D00:zhÄ« 0x26D09:hú 0x26D0A:yÄ�ng 0x26D0C:jùn 0x26D0D:shé 0x26D0E:kòu 0x26D11:qián 0x26D14:méng 0x26D1A:tiáo 0x26D50:niè 0x26D5F:chí 0x26D61:xiÅ�ng,gÅ�ng 0x26D63:hùn 0x26D66:dí 0x26D67:láng 0x26D69:zÄ�o,qiú 0x26D6A:cè 0x26D6B:suÇ’ 0x26D6C:zù 0x26D6D:suÄ« 0x26D6F:xiá 0x26D71:xiè 0x26D74:jié 0x26D75:yóu 0x26D77:gòu 0x26D78:gÄ›ng 0x26D7C:jùn 0x26D7D:huÇŽng 0x26D7E:jí 0x26D7F:pÅ�u 0x26D80:wÅ« 0x26D82:yì 0x26D85:nÇŽi 0x26D87:rÇ’ng,ruÇŽn 0x26D88:nán 0x26D8A:píng 0x26D8B:shàn 0x26D8C:diÄ�o 0x26D8D:jí 0x26D8E:huÄ� 0x26D8F:duì 0x26D90:kÇ’ng 0x26D91:tà 0x26D93:hòng 0x26D95:shÅ« 0x26D99:héng 0x26D9A:fÄ›n 0x26DB2:kòu 0x26DD9:nián 0x26DDD:chú 0x26DE6:qiàng 0x26DF2:xì 0x26DF3:hú 0x26DF4:sòng 0x26DF5:wò 0x26DF7:hài 0x26DF8:rú 0x26DF9:méng 0x26DFB:sÇŽn 0x26DFD:wú 0x26DFF:yóu 0x26E01:tÄ�n 0x26E02:shÄ“n 0x26E06:qÇ� 0x26E08:guó 0x26E09:qià 0x26E0A:xiÄ�n 0x26E0F:suÄ« 0x26E10:lù 0x26E13:qÄ« 0x26E14:diÄ�o 0x26E17:qí 0x26E18:jiá 0x26E19:yóu 0x26E1A:xí 0x26E1B:cháo 0x26E21:mì 0x26E22:lòu 0x26E23:bÇ� 0x26E2A:péi 0x26E2E:zhÄ“n 0x26E2F:shÄ“n 0x26E30:chÇŽn 0x26E31:fù 0x26E36:qÅ« 0x26E37:sÄ« 0x26E3A:zuÄ« 0x26E6B:zhào 0x26E7D:pí 0x26E80:còu 0x26E86:gÄ�o 0x26E87:dú 0x26E89:fÅ« 0x26E8A:guÄ�n 0x26E8B:sÇŽo 0x26E8C:sÇ’u 0x26E8D:jiÇŽn 0x26E8E:póu 0x26E90:cán 0x26E91:bèng 0x26E92:mòu 0x26E93:zhÄ�o 0x26E94:xiáo 0x26E96:jú 0x26E97:shÅ« 0x26E98:jiÇŽn 0x26E99:lí 0x26E9B:chuàn 0x26E9C:lào,láo 0x26E9E:hè 0x26E9F:hú 0x26EA0:gÅ« 0x26EA1:zhÇŽng 0x26EA2:jié 0x26EA3:xiàng 0x26EA5:dÅ« 0x26EA6:hán 0x26EA7:jiá 0x26EA8:xiàng 0x26EA9:jí 0x26EAA:shÇ” 0x26EAB:làng 0x26EAC:jÄ« 0x26EAD:shÄ�n 0x26EB0:tÄ�o,tiáo 0x26EB1:zÄ« 0x26EB2:shuàn 0x26EB4:jí 0x26EB5:chù 0x26EB6:jì 0x26EB7:shÄ“n 0x26EB8:lìn,lín 0x26EB9:liáo 0x26EBB:sÇŽn 0x26EBD:ÇŽn 0x26EBE:ruÇŽn 0x26EC0:tí,tái 0x26EC1:dàn 0x26EC3:huán 0x26EC5:sà 0x26F06:ruí 0x26F07:wÅ« 0x26F08:jù 0x26F09:huán 0x26F0A:léng 0x26F0B:lù 0x26F0E:tÄ�n 0x26F0F:zÄ“ng 0x26F13:qián 0x26F17:xÄ« 0x26F21:cÇ� 0x26F22:shé 0x26F27:sà 0x26F2A:mào 0x26F2B:qú 0x26F2D:bó 0x26F2E:gÇŽn,gàn 0x26F30:qiè,hé 0x26F31:juàn 0x26F32:dÄ�ng 0x26F33:cháng 0x26F34:yáng 0x26F35:hé 0x26F37:jÄ« 0x26F39:bÇ�ng 0x26F3B:méi 0x26F3F:dÅ«n 0x26F40:ÇŽo 0x26F41:jÄ«ng 0x26F42:lù 0x26F43:miàn 0x26F44:diàn 0x26F45:hè 0x26F47:jiÄ�n 0x26F4A:huá 0x26F4B:gÅ�u 0x26F4E:lù 0x26F4F:fú 0x26F50:huÇ� 0x26F52:zéi 0x26F54:jìn 0x26F55:sÄ« 0x26F56:qÅ«n 0x26F5C:dàn 0x26F5E:wàn 0x26F5F:biÇŽn 0x26F64:jiá 0x26F6B:dÇŽn 0x26F6C:jiÅ« 0x26F6D:xián 0x26F6E:bó 0x26F8F:xiá 0x26F91:biÄ�o 0x26F95:pò 0x26F98:sÇŽo 0x26F99:bèi 0x26F9A:shà 0x26F9B:wÄ›i 0x26F9D:cÄ�ng 0x26F9E:lù 0x26FA9:dàn 0x26FAB:gÇ” 0x26FAC:zÄ� 0x26FAD:bÇŽng 0x26FAE:gàn,gÇŽn 0x26FB1:chÄ�o 0x26FB2:jì 0x26FB3:liÄ“ 0x26FB5:qióng 0x26FB6:jiàn 0x26FB7:lù 0x26FB8:duÄ�n 0x26FB9:suÄ�n 0x26FBA:yáo 0x26FBB:yÇ�n 0x26FBD:tà 0x26FBE:yáo 0x26FBF:jÄ«ng 0x26FC0:chú 0x26FC1:fú 0x26FC2:yuán 0x26FC3:shÇŽo 0x26FC5:bìng 0x26FC6:dàng 0x26FC7:shì 0x26FCA:lú 0x26FCB:qiè 0x26FCC:luó 0x26FCD:pò 0x26FCF:méng,mèng 0x26FD0:jié 0x26FD3:jÄ« 0x26FD6:lù 0x27004:chàng 0x27005:miè,mò 0x27006:méng 0x27007:jiÇŽn 0x2700A:cÇŽi 0x2700C:sù 0x27014:hè 0x27015:sà 0x27017:zÄ« 0x27018:kÄ“ng 0x27019:gÄ›ng 0x2701A:sÄ« 0x27020:tí 0x27021:zhàn 0x27022:xiè 0x27023:shuí 0x27024:chÇ� 0x27025:yÅ�u 0x27026:lÇ” 0x27027:mèng 0x27028:liè 0x27029:sì 0x2702C:xÄ« 0x2702D:fán 0x2702E:fÅ« 0x2702F:shÄ›n 0x27030:tí 0x27031:chài 0x27032:yuè 0x27034:fÅ« 0x27035:jiàn,shÇŽn 0x27036:dì 0x2703A:xié 0x2703B:dÄ�n 0x2703F:zhí 0x27043:xù 0x27048:niè 0x27049:fàn 0x2704A:méng 0x2704B:mÇ�n 0x2707E:lóu 0x2707F:dú,shÇ” 0x27081:zhàn 0x27082:jiàn 0x27083:hàn 0x27084:dàn 0x27085:sÄ“n 0x27086:jiàn 0x27087:tán,xún 0x27088:jiÇŽo 0x27089:pó 0x2708B:píng 0x2708D:zhuàn,sÅ«n 0x2708F:liáo 0x27090:zì 0x27092:zhuó 0x27094:hù 0x27099:xì 0x2709B:méng 0x2709C:jù 0x2709D:miè 0x2709E:xián 0x270A0:kuì 0x270A1:méng 0x270A2:jiÄ�n 0x270A6:nóu 0x270A8:dì 0x270A9:sÄ�o 0x270CF:chù 0x270D0:zhí 0x270D1:qián 0x270D2:lÇš 0x270D4:zhuó 0x270D8:zuò 0x270D9:hán 0x270DA:suÇ� 0x270DB:gòu 0x270DD:chÇ’u 0x270DE:jì 0x270DF:yì 0x270E0:yú 0x270E8:nóu 0x270E9:nÇ� 0x270EA:ruò 0x270EE:lín 0x270F1:níng 0x2710D:qiáo 0x2710E:yáo 0x2710F:fù 0x27110:shuÄ�ng 0x27111:kuì 0x27112:qú 0x27113:dÇ’ng 0x27114:shÇ” 0x2711A:lí 0x2711B:jú 0x2711C:ruÇ� 0x27120:zhá 0x27124:xiÄ�o 0x27138:mén,wÄ›i 0x27139:shí 0x2713A:diÄ�n 0x2713B:lì 0x2713C:dèng,téng 0x2713D:zàn,zÄ� 0x2713F:luó 0x27140:cán 0x27143:Ä�o 0x27146:jiÇŽn 0x27148:diào 0x2714B:yíng 0x27156:yì 0x27157:dÇŽng 0x27158:nóu 0x2715A:yuè 0x2716E:lÇ� 0x2716F:lí 0x27170:hù 0x27172:yòu 0x2717A:nàng 0x27182:chèn 0x27189:fÄ“ng 0x2718A:biÄ“ 0x2718F:mÇŽn 0x27190:gàn 0x27191:huò,suÇ� 0x27193:cÅ« 0x27195:yÇ’u 0x27198:yòu 0x2719C:xÅ« 0x271A1:xù 0x271A2:hÇ” 0x271A3:lú 0x271A5:xiá 0x271A6:yì 0x271AE:hÇ” 0x271AF:hù 0x271B0:zÇ� 0x271B7:gÅ�ng 0x271B8:tuÄ« 0x271B9:wÅ« 0x271BA:líng 0x271BB:gÅ« 0x271BC:zhÅ�ng,dÅ�ng 0x271C4:lú 0x271C8:zù 0x271CC:tóng 0x271CD:xiÄ� 0x271CE:hé 0x271D3:yuè 0x271D9:nán 0x271DA:bó 0x271DB:hÅ« 0x271DC:qì 0x271DD:shú 0x271DE:qiÄ�ng 0x271DF:zhÅ�u 0x271E0:yào 0x271E1:gÅ« 0x271E5:bÄ�n 0x271E6:kÇŽn 0x271EE:hé 0x271EF:jì 0x271F0:hú 0x271F1:yán 0x271F6:chÅ«n 0x271F7:dÇ�ng 0x271F8:qiÅ« 0x271F9:hóu 0x271FC:hào 0x271FF:zù 0x27201:xián 0x27204:xià 0x27205:xì 0x27208:sè,xì 0x2720C:gé 0x2720D:xì 0x27211:gé 0x27214:lÇš 0x27216:gé 0x27217:kè 0x27219:shòu 0x2721A:zhù 0x2721C:téng 0x2721D:yà 0x2721E:nì 0x27226:luò 0x27227:suÄ«,méng 0x2722A:chÇŽn 0x2722D:wù 0x2722F:yÅ« 0x27239:zÇŽo 0x2723B:yì 0x2723C:xÄ«,jí 0x2723D:hóng 0x2723E:quán 0x2723F:wÇŽng 0x27240:chÇ� 0x27241:xì 0x27242:tiÇŽn 0x27243:yÇ”n 0x27245:yÄ« 0x27246:jí 0x27247:huÄ« 0x27248:fóu,fú 0x2724A:fÇ” 0x2724D:jí 0x2724E:xuán 0x27251:tài 0x27253:dù 0x27257:yuán 0x2725B:dì 0x2725E:zhÇ” 0x2725F:tÄ�i 0x27261:rÇ’ng 0x27262:xué 0x27263:yù 0x27264:fàn 0x27265:bÄ›i 0x27267:qÇ”,jié 0x27269:bù 0x2726A:jiÄ� 0x2726B:zhá 0x2726D:nÇ” 0x2726E:shé,yán,yí 0x27272:lì 0x27284:guÇ� 0x27285:guÇŽi 0x27287:dài,dé 0x2728F:gÄ�i 0x27292:cì 0x27294:yÇŽn 0x27295:sÅ�ng 0x27296:shì 0x27298:kù 0x27299:zhÇ� 0x2729A:tóng 0x2729B:qú 0x2729C:è 0x2729E:xíng 0x2729F:rú 0x272A0:yú,shÅ« 0x272A3:yì 0x272A4:yì 0x272A5:xù 0x272A6:fÇ’u 0x272A7:gé,è 0x272AC:hé 0x272AD:yÄ«n 0x272AF:hòng 0x272B1:duÇ’ 0x272BD:xíng 0x272BE:fán 0x272C9:qÄ« 0x272CA:shÄ�,shuÅ� 0x272CC:dù 0x272CD:dì,xué 0x272CE:lí 0x272CF:yì 0x272D0:xí 0x272D1:gÄ›ng 0x272D2:tóng,shì 0x272D3:kào 0x272D4:hòng 0x272D5:kùn 0x272D6:niè 0x272D7:chí 0x272D8:tí 0x272DA:tóng 0x272E0:lí,lÇ� 0x272E1:nà 0x272F1:zhÄ�n 0x272F2:bÄ›i 0x27301:tiáo 0x27303:zÄ� 0x27304:è,yè 0x27305:shòu 0x27306:kÅ�ng 0x27307:péng 0x27308:fù 0x27309:lù 0x2730A:xiè 0x2730B:xiè 0x2730C:xiÅ« 0x2730D:lù 0x2730E:tiÇŽn 0x2730F:tà 0x27310:cì 0x27311:qÅ« 0x27313:fù 0x27314:zhÄ« 0x27316:xiè,shè 0x27317:zÇ’u 0x27318:fèi 0x27319:mín 0x2731A:xÄ«ng 0x2731D:tóng 0x2731E:qí 0x27320:piÄ�o 0x27322:suì 0x27323:Ä›r 0x27327:hÇ” 0x2733B:sÅ�ng 0x2733D:biÄ“ 0x2733E:dÄ«ng 0x2733F:bÇŽn 0x27340:shÄ«,lÇ� 0x27341:xiè 0x27342:xiáo 0x27343:fÄ›i 0x27352:chuÇŽn,chuÇŽi 0x27353:shuài 0x27354:yÄ�o 0x27355:jué 0x27356:shÄ›ng,nìng 0x27358:yÅ�u 0x27359:fàn 0x2735C:kuí 0x2735D:dì 0x2735F:máo 0x27360:jié 0x27362:yán,yÇ�n 0x27365:wÄ“i 0x27368:sÄ�ng 0x27369:jié 0x2736A:yú 0x2736B:wèi 0x2736C:è 0x2736D:quán 0x2736E:jiÇ’ng 0x2736F:féng 0x27370:lóng 0x27371:dié 0x27372:pián 0x27374:liàn 0x27375:hú 0x27376:lÇœ 0x2737F:diàn 0x27383:cuì 0x27384:móu,wù 0x27395:wáng 0x27396:juÄ�n 0x27397:kÄ“ 0x27398:yán 0x27399:jiÇŽo 0x273A1:gÅ�ng 0x273A3:róng 0x273A4:sÅ«n 0x273A5:shàn 0x273A8:chí 0x273AA:qí 0x273AB:suÇ’ 0x273AD:yè 0x273AE:zÇŽo 0x273AF:quÄ“ 0x273B0:zhÇŽn 0x273B1:bÄ� 0x273B2:zú 0x273B3:suÇ’ 0x273B4:zhé 0x273B5:xì 0x273B7:chÇ” 0x273B8:jiÇŽo 0x273B9:zuì 0x273BA:gÄ“ 0x273BB:wù,móu 0x273BE:lüè 0x273BF:jí 0x273C2:xié 0x273C3:xié 0x273C6:dÇ’u 0x273CB:qiÅ« 0x273D1:píng 0x273D3:liú 0x273E5:jié 0x273E7:huì 0x273EB:shà 0x273F8:zhí 0x273F9:ài 0x273FA:xù,òu 0x273FB:bì 0x273FD:yÄ“ 0x273FE:nì 0x273FF:zhú 0x27401:sù 0x27403:xié 0x27404:yù,yú 0x27405:qÅ« 0x27408:zú 0x27409:zhÄ« 0x2740A:zhÄ�ng 0x2740B:lüè 0x2740C:wÄ›i 0x2740D:chÅ�ng 0x2740E:mì 0x27410:jÄ« 0x27412:sù 0x27413:yÄ› 0x27414:xí,yì 0x27415:tuán 0x27416:lián,liàn 0x27417:xuán 0x27419:wù 0x2741F:máo 0x2742C:hóng 0x2742F:lüè 0x27430:dú 0x27431:cóng 0x27432:chán 0x27433:lù 0x27434:sù 0x27440:lüè 0x27446:zhÅ�ng 0x27447:lí 0x27448:fèi 0x2744A:jÇ�ng 0x2744B:kuì 0x2744C:yì 0x2744D:huá 0x2744E:cuì 0x27450:yù 0x27451:bÄ›ng 0x27452:tÅ«n 0x27453:shÇ” 0x27454:dài 0x27455:wÅ« 0x27456:cì 0x27457:nìng 0x27458:dàng 0x27459:zú 0x2745A:hán 0x2745C:pí 0x2745D:chuàn 0x27460:dù 0x27461:pá 0x27464:zhÅ« 0x27466:xié 0x27467:zhé 0x27468:qiè 0x27469:xuÄ�n 0x2746B:sào 0x27480:bì 0x27482:fù 0x27488:lì 0x2748E:é 0x27490:yÄ“ 0x27491:shÇ” 0x27493:sè 0x27495:qÄ« 0x27496:guò 0x27497:sè 0x27499:fù 0x2749A:máo 0x2749C:léi 0x2749D:zhÄ�n 0x274A8:chài 0x274AD:wèi 0x274BD:léi 0x274BF:zéi 0x274C0:yÄ«ng 0x274C1:ài 0x274C2:xiÄ“ 0x274C4:bì 0x274CB:chán 0x274CE:pí,bÄ« 0x274CF:cóng 0x274D0:liè 0x274D1:qí 0x274D3:jì 0x274D4:jÄ«ng 0x274D5:dÅ�ng 0x274D6:féi 0x274D7:yí 0x274D8:tuán 0x274E8:mÄ›ng 0x274E9:cán 0x274EA:yá 0x274F2:yÇŽng 0x274F4:tíng 0x274F8:zhí 0x274FA:xiè 0x274FB:lÇœ 0x274FD:lì,chài 0x274FF:máo 0x27502:xiá 0x27505:sòu 0x27516:sÅ« 0x27517:xuè 0x2751D:lì 0x2751E:yuán 0x27521:zhÇŽn 0x27523:tà 0x27524:xuán 0x27525:wèi 0x27526:yè 0x27527:páng 0x27528:máo 0x27529:tí 0x2752A:pín 0x2752C:dù 0x2752D:qiú 0x2752E:yÇ� 0x27533:tuó 0x27534:chài 0x27537:jìn 0x2753C:é 0x27543:chán 0x27544:yÄ«ng 0x27545:líng 0x27547:xiÇŽn 0x27549:qÄ« 0x2754B:yuè 0x2754C:lüè 0x2754D:yíng 0x2754E:qú 0x27552:fÄ›i 0x27553:zÄ« 0x27559:qÄ«ng 0x2755D:níng 0x2755E:wèi 0x2755F:shuÄ�ng 0x27561:fù 0x27564:mò 0x27565:mò 0x27566:tuó 0x27567:chài 0x27568:zàng 0x2756E:lí 0x2756F:lí,shÄ« 0x27571:xiá 0x27572:juÇŽn 0x27574:nán 0x27575:mì 0x27578:huáng 0x2757A:shuÄ�ng 0x2757C:xÇ” 0x2757F:fÄ›i 0x27581:xiè,wén 0x27586:tà 0x27587:yÇ’ng 0x27589:zhÇŽn 0x27591:qiáng 0x27592:náng 0x27594:lìn 0x27598:luán 0x27599:xiÇŽn 0x2759A:fú 0x2759C:líng 0x275A0:sÄ�o 0x275A2:huì 0x275A8:tíng 0x275AA:qíng 0x275AC:huÄ�ng 0x275AE:àn 0x275B5:mÇŽn 0x275B7:nì,nÇœ 0x275BB:guó 0x275BC:Ç’u 0x275BF:xiàng 0x275C1:jÄ«n 0x275C6:zhÄ“ng 0x275C8:nú 0x275CB:sàn 0x275CC:hù 0x275CE:zú 0x275CF:huÇ� 0x275D2:jÄ« 0x275D6:yè 0x275E6:xíng 0x275E9:là 0x275EA:yù,qú 0x275EB:jué 0x275F1:shù,yù 0x275F2:zhÄ“ng 0x275F4:yÇ’ng 0x275F6:gÄ“ 0x275F8:jiàn 0x275F9:xìn,xiÄ�n 0x275FC:huÄ« 0x275FF:shuài 0x27602:chÅ�ng 0x27603:háng 0x27608:liÇŽo 0x2760D:jiÄ�ng 0x2760F:gÅ�ng 0x27611:zhuó,bào 0x27617:qÇ� 0x2761C:qiÄ�n 0x2761E:dÇ’u 0x2761F:pÅ�,bÅ� 0x27622:hù 0x27625:niÇ” 0x27627:qì 0x27628:diÄ�o 0x27629:diÄ�o 0x2762B:lì 0x2762E:xiÅ�ng 0x2763D:ná 0x2763F:zhÄ“ng 0x27640:là 0x27641:zhì,zÄ«,jì,pÄ« 0x27643:Ä› 0x27644:bÅ� 0x27645:pÅ� 0x27646:xÅ« 0x27647:yòng,dÇŽn 0x27648:cí 0x27649:lì 0x2764C:páo 0x2764F:xiù,yÇ’u 0x2765B:pù 0x2765D:ché 0x2765E:qì 0x27661:yì 0x27663:tí 0x27664:duÇ’ 0x27665:lóng,tÇ’ng 0x27667:jiàn 0x2766D:zhàn 0x2766E:yuàn 0x27676:yú 0x27678:gÄ“ng 0x2767A:hòu 0x2767E:qÇ� 0x27680:mù 0x27681:huàn 0x27682:lòng 0x27683:xì 0x27684:é 0x27685:lÇŽng 0x27686:fèi 0x27687:wÇŽn,wèn 0x27689:cÅ«n 0x2768B:péng 0x2768F:cuò 0x27690:wÄ“ng 0x276A1:gÇŽo 0x276A5:cuì 0x276A8:qì,shà,qiè 0x276A9:lí 0x276AA:qiè 0x276AB:qiàn,jÄ«ng 0x276AC:kÅ�ng 0x276AD:bÄ›ng 0x276AF:shòu 0x276B7:wÄ“i 0x276C4:shÄ�n 0x276CF:zÄ« 0x276D2:tì 0x276D3:qiÄ�n 0x276D4:dú 0x276D7:tú 0x276DA:wÄ“i 0x276DE:hú 0x276DF:xÄ«ng 0x276E1:shÄ�n 0x276E2:zhÇ� 0x276E7:chÇ� 0x276F8:zhòu 0x276F9:wÄ“ng 0x276FA:chí 0x276FB:suÇ’ 0x276FC:xiè 0x276FE:kè 0x27701:shài,shÄ�,shÇŽi 0x27702:shÄ« 0x27703:shòu 0x27705:jiè 0x27709:gÇŽo 0x2770A:lÇš 0x27714:xiè 0x2771A:zhÇ� 0x2771E:mán,màn 0x27720:shuài 0x27721:kè 0x27723:diÇŽo 0x27724:yÄ« 0x27726:sù 0x27727:chuÄ�ng 0x27731:cuì 0x27732:tuò 0x27735:xiè 0x2773D:xuán 0x27742:hè 0x27743:jué 0x27746:tì 0x27747:fèi 0x27749:zhÇ� 0x2774A:shì 0x2774B:tuí 0x2774E:chÅ�ng,chuáng,chóng 0x27750:tì 0x27751:zhàn 0x27752:héng 0x27754:qú 0x27755:wéi 0x27757:dÅ«n 0x27758:bào 0x2775C:liáo 0x27764:sÄ« 0x2776A:biÇŽo 0x2776B:xiè 0x2776C:bié,bì 0x2776E:cÇ’ng 0x27772:jù 0x27773:hé 0x27777:kuì 0x27778:yÅ�ng 0x27780:shù 0x2778D:niè 0x2778F:yú 0x27790:zhuó 0x27791:méng 0x27792:hú 0x27795:liè 0x2779D:jiÄ“ 0x2779E:xióng 0x277A3:yÇŽn 0x277A9:jié 0x277AA:là,lié 0x277AB:shù 0x277AC:jié 0x277AD:léi 0x277B0:zú 0x277B2:shì 0x277B8:wéi,suì 0x277B9:dÅ« 0x277BA:sù 0x277C3:xié 0x277C4:ráng 0x277CC:luò 0x277D1:qiÄ�n 0x277D8:nàng 0x277D9:líng 0x277DC:jì 0x277E0:mìng 0x277E3:gÇ” 0x277E8:xuán 0x277EC:xÅ« 0x277F1:bó 0x277FC:wÄ“i 0x27802:kÅ« 0x27806:wÇŽn 0x27808:chà 0x2780A:mào 0x2780B:kè 0x2780E:cì 0x27812:xiàn 0x27813:mò 0x2781A:hÅ«n 0x2781B:chàn 0x2781C:shÄ« 0x2781D:zhÄ›n 0x2781E:è 0x2781F:mí 0x27821:shÄ« 0x27822:qÅ« 0x27823:shÅ« 0x27825:cÄ« 0x27826:yÇŽn 0x27829:hÅ« 0x2782A:qÄ« 0x2782B:zhì,dí,chì 0x2782C:huÄ�ng 0x27834:zhÇ� 0x27836:yÇ’u 0x2783C:gào 0x2783D:yÇŽo 0x2783E:pÅ�u 0x27847:yí 0x27848:chèng 0x27849:jì 0x2784B:ÇŽi,yá 0x2784D:dòng 0x2784F:suì 0x27851:jiù 0x27858:qì,qÄ«n 0x27859:lián 0x2785A:xuÇŽn 0x2785C:liÇŽo 0x27861:yùn 0x27862:xuÇŽn 0x27863:cóu 0x27864:piÄ�n 0x27866:kuí 0x27868:tí 0x27869:huÇŽn 0x2786A:dÄ�n,dàn 0x2786B:guì,kuì 0x2786C:chÄ“n 0x2786E:shÇŽng 0x2786F:jì 0x27874:liàn 0x27875:kÄ�n 0x27876:shèng 0x27878:dÅ�u 0x27879:yóu 0x2787A:qí 0x2787C:xiÇŽo 0x27882:yì 0x27883:lóu 0x27886:chuÄ�ng 0x2788B:lào 0x2788C:gÄ�o 0x27890:zÄ“ng 0x27892:wéi,wÄ›i 0x27896:jiÄ�n 0x2789B:yÄ«ng 0x2789C:fán 0x2789D:lì 0x2789E:qiÄ�n 0x278A2:yào 0x278A6:kuÄ«,kuí,guì 0x278A7:wéi 0x278A9:què 0x278AC:xiÇŽo 0x278AD:què 0x278B0:hÅ« 0x278B5:duÅ� 0x278B6:chù 0x278B9:shÄ“n,jÄ«n 0x278BC:zhuó 0x278BD:é 0x278BE:jì 0x278C1:tán 0x278C3:pÄ� 0x278CB:jiè 0x278CC:qiào 0x278D1:qián 0x278D2:jù 0x278D5:qiú 0x278D6:tuó 0x278DA:nuò 0x278DB:sì 0x278DF:yí 0x278E1:gÇ” 0x278E2:hùn 0x278E3:pá 0x278E4:zÄ« 0x278E6:jiÄ�o 0x278E9:xÇ� 0x278EA:shÇŽo,shào 0x278EC:yí 0x278ED:zhì 0x278F5:lùn 0x278F7:zhÅ�u 0x278F8:jué 0x278F9:tán 0x278FA:nuò,chuò 0x278FB:jù 0x278FC:hú 0x278FE:zhì 0x27903:bÄ« 0x2790D:chì,tì 0x2790E:xuÄ�n 0x2790F:jí 0x27910:guÇŽ 0x27911:jú 0x27912:wò 0x27913:tuó 0x27915:qiú 0x27916:wÄ“i 0x27917:duÄ�n 0x27919:shòu 0x2791B:zhÄ›n 0x2791C:nè,lì 0x2791F:xì 0x27920:zhé 0x27921:zhì 0x27923:ná 0x27928:jiÄ�n 0x2792E:yáo 0x2792F:guó,yuè 0x27932:dÇ� 0x27934:huò 0x27935:jÄ«ng 0x2793C:jué 0x2793D:yuè,jiàn 0x27944:jí 0x27946:sù 0x27948:jiÄ�n 0x2794A:kÅ«n 0x2794B:wò 0x2794C:kuàng 0x2794D:biÄ�o 0x2794E:jué 0x27951:bì 0x27953:chán 0x27955:zÄ« 0x27956:lí,shÇ� 0x2795A:fó 0x2795B:qiÇŽn 0x2795C:yÇŽn 0x2795E:tàn 0x2795F:mò 0x27963:kòu 0x27964:xÄ«,xiÄ“ 0x2796E:hù,dÇ� 0x2796F:hù 0x27971:fú 0x27974:yàng 0x27975:guò 0x27977:rén 0x27978:yìn 0x27979:fÄ“ng 0x2797A:jùn,yùn 0x2797C:yún 0x2797F:xùn 0x27981:xì 0x2798E:xiÄ� 0x27991:háng 0x2799A:hù,dÇ� 0x2799D:hÅ«,hào 0x2799E:pù 0x2799F:fÄ�n 0x279A4:jiÄ� 0x279A7:yí,tuÅ� 0x279AD:tuÅ�,xÄ« 0x279AE:ná 0x279B8:yín 0x279B9:yìn 0x279C3:jì 0x279C4:wàng 0x279C5:shì,jiàn 0x279C6:duÄ« 0x279C7:duò 0x279C9:tuó 0x279CA:wÄ� 0x279CB:lì 0x279CF:rè,rÄ› 0x279D2:cì 0x279D3:xù 0x279D4:zhÅ�u 0x279D5:zì 0x279DC:wÇŽng 0x279DD:yÇŽ 0x279DF:jì 0x279E0:chÇŽo 0x279E9:jí 0x279F5:shÇŽn 0x279F6:tú 0x279F8:bié 0x279F9:xì 0x279FA:pÄ« 0x279FB:zhà 0x279FE:huì 0x27A00:suÅ�,zuò 0x27A02:hè 0x27A04:yuÄ“ 0x27A06:wÅ«,huÇŽng 0x27A08:líng,wÅ« 0x27A0A:zhà 0x27A0B:huá 0x27A17:chán 0x27A1F:è 0x27A21:chén 0x27A27:suì 0x27A29:tiÇŽn 0x27A30:zhì 0x27A31:tì 0x27A32:Ä�o 0x27A33:zhuó 0x27A34:zì 0x27A35:kÄ“ 0x27A37:sè 0x27A38:tián 0x27A39:lù 0x27A3E:shán 0x27A3F:zhÇŽ 0x27A43:chÅ�ng 0x27A45:yàn 0x27A52:mÇ” 0x27A53:hÅ« 0x27A5A:chÄ« 0x27A5D:sù 0x27A63:nÇŽo 0x27A66:jí 0x27A67:duó 0x27A68:hòu 0x27A6A:còng 0x27A6B:zhÄ�,chà 0x27A6C:yín 0x27A6E:xiÇŽo,sÇ’u,sòu 0x27A70:biàn 0x27A71:bèng 0x27A72:là 0x27A74:chÄ«,chì 0x27A76:qià 0x27A78:Ä�n 0x27A79:shÄ«,yÇ� 0x27A7C:chì,zhÇ� 0x27A85:nù 0x27A87:jì 0x27A93:Ç’u 0x27A95:xiÄ� 0x27A98:chài,cuÇ’,jiÄ“ 0x27A9A:ái 0x27A9D:shèng 0x27A9E:hé,gé 0x27AA0:jí 0x27AA1:chÄ« 0x27AA2:xì 0x27AA3:zhÄ“ng 0x27AA6:tÄ� 0x27AA8:mà 0x27AAB:pÄ« 0x27AAE:xÅ«,huá 0x27AAF:qiÇŽn 0x27AB9:xià 0x27ACA:yù 0x27AD1:jié 0x27AD2:xià 0x27AD3:lÇ” 0x27AD5:qiè 0x27AD7:chà 0x27ADB:yàng 0x27ADC:jì 0x27ADD:shÇŽ 0x27ADE:lòu 0x27AE0:jÄ« 0x27AE1:zhì 0x27AE2:wàng 0x27AE4:bì 0x27AE5:Ä�n 0x27AE6:yÄ« 0x27AE7:Ä�n,àn 0x27AEC:lí 0x27AF9:xiÄ�n 0x27AFE:jiù 0x27AFF:tÇŽn 0x27B01:hào 0x27B02:hè 0x27B05:zhÄ� 0x27B06:zhÇŽn 0x27B07:yì 0x27B08:xì 0x27B0A:xì,sí 0x27B0B:fà 0x27B0C:yán 0x27B0F:mÇ” 0x27B15:gÅ« 0x27B1E:yún 0x27B24:zhòng 0x27B26:chÇŽn 0x27B27:chuáng 0x27B28:huì 0x27B29:zá 0x27B2A:gùn 0x27B2B:jiÇŽn 0x27B2C:yá 0x27B30:xiàng,xiÇŽng 0x27B31:hè 0x27B43:dàn 0x27B47:mián 0x27B48:níng,nìng 0x27B4A:méng 0x27B4C:liè 0x27B4D:zhòu 0x27B4E:pÅ« 0x27B4F:tÄ�i 0x27B53:yíng 0x27B54:téng 0x27B55:guó 0x27B5A:qiáng 0x27B5C:lÇœ 0x27B5D:sà 0x27B5E:liè 0x27B5F:chí 0x27B60:xiÄ› 0x27B63:guó 0x27B64:bào,báo 0x27B65:luò 0x27B66:juàn,xuÄ�n 0x27B6A:è 0x27B73:hé 0x27B75:mèi 0x27B78:xiè 0x27B79:pín 0x27B7B:hÄ�n 0x27B7C:chèn 0x27B7D:shàn 0x27B7E:huì 0x27B86:yÄ«ng 0x27B88:jiÇŽn 0x27B8D:Ä�n 0x27B91:tà 0x27B92:yÄ« 0x27B93:tuí 0x27B97:liú 0x27B99:zuó 0x27B9B:lí 0x27B9D:pín 0x27B9E:xuè 0x27BA0:nèn 0x27BA1:dòu 0x27BA4:lÇŽn 0x27BAA:zhÄ�n 0x27BAB:jué 0x27BAC:zhÄ“n,jué 0x27BAD:jí 0x27BAE:qiÄ�n 0x27BB0:hÄ�n 0x27BB1:fén 0x27BB3:hÄ�n 0x27BB4:hóng 0x27BB5:hé 0x27BB6:hóu 0x27BBA:zhàn 0x27BBB:chóu,xiÄ�o 0x27BBC:tài 0x27BBD:qiàn 0x27BBF:shè 0x27BC0:yÄ«ng 0x27BC3:qÄ«n 0x27BC6:huò 0x27BC8:xì 0x27BC9:hè 0x27BCA:xì 0x27BCB:xiÄ� 0x27BCC:hÄ�o 0x27BCD:lào 0x27BCF:lì 0x27BD2:chÄ“ng 0x27BD6:jùn 0x27BD7:xÄ« 0x27BD8:hÇŽn 0x27BDE:dòu,dÅ�u 0x27BE0:dÅ�u 0x27BE1:wÄ�n,yuè 0x27BE4:dÅ�u 0x27BE5:zài 0x27BE6:juàn 0x27BE8:lÇ’u 0x27BE9:chù 0x27BEB:zhÄ“ng 0x27BEF:qí 0x27BF0:kàn 0x27BF1:huò,yù 0x27BF2:lái 0x27BFA:gÄ�i 0x27BFC:shòu 0x27BFE:dÅ�ng 0x27C03:lóu 0x27C04:tuÄ�n 0x27C07:yú 0x27C08:wù 0x27C0A:tián 0x27C12:guó 0x27C18:tán 0x27C19:qí 0x27C20:liè 0x27C21:lì 0x27C23:xÅ«n 0x27C28:gèng 0x27C29:tÄ«ng 0x27C2A:hàn 0x27C2B:chù 0x27C2D:tún 0x27C2F:xióng 0x27C30:yóu 0x27C31:mò 0x27C32:chÇ� 0x27C34:hÇ” 0x27C35:dÅ«,dú,zhuó 0x27C37:mÇ” 0x27C39:nà 0x27C3B:líng 0x27C3F:ài 0x27C40:xiÄ�n 0x27C44:kÇŽn 0x27C45:sì 0x27C46:sÄ�n 0x27C4A:yì 0x27C4F:yì 0x27C50:xiào,xiÄ�o 0x27C52:zhÄ«,zhuÅ� 0x27C53:dòu 0x27C58:mài 0x27C5C:lún 0x27C5D:jué,jùn 0x27C61:qiÄ�ng 0x27C62:líng 0x27C69:pián 0x27C6A:còu 0x27C6B:duò 0x27C6C:yÇ” 0x27C70:zhuÅ� 0x27C72:xì 0x27C73:huài 0x27C74:míng 0x27C75:táng 0x27C79:pÅ« 0x27C7B:mì 0x27C7C:mán 0x27C7E:guÄ�i 0x27C80:qiÄ�n 0x27C82:lín 0x27C83:mÇ�n 0x27C84:wÄ›i 0x27C85:céng 0x27C87:hù 0x27C88:suí 0x27C8B:jù 0x27C8C:shà 0x27C8D:méng 0x27C97:wéi 0x27C98:xÄ« 0x27C99:lìng 0x27C9C:bì 0x27C9D:wèi 0x27CA1:lì 0x27CA2:zhé 0x27CA4:yóng 0x27CA5:hú 0x27CA6:wán,hé 0x27CA7:bÄ� 0x27CA8:jiÄ�n 0x27CAD:zuÇ’ 0x27CAE:zhÇŽn 0x27CAF:bÅ� 0x27CB0:qiÅ«,chÅ« 0x27CB1:yÄ�ng 0x27CB4:dÅ�ng 0x27CB5:qú 0x27CBA:pí 0x27CBB:zhÇŽi 0x27CBE:shÄ�n 0x27CBF:gòu 0x27CC0:biào,nÇŽo 0x27CC1:yí 0x27CC2:fú 0x27CC4:xìn 0x27CC5:shì,shÇ� 0x27CC6:tÅ�ng,tóng 0x27CC9:dÄ«ng 0x27CCC:tÅ« 0x27CCD:xiÄ�o 0x27CCE:wú 0x27CCF:péi 0x27CD0:huÄ«,xÄ« 0x27CD5:lái 0x27CD9:sì 0x27CDA:cuÇ� 0x27CDB:shà 0x27CDC:zhÇ’u 0x27CDD:zhào 0x27CDE:wéi 0x27CDF:lái 0x27CE0:bì,bÇ� 0x27CE3:dÇ’ng 0x27CE6:nÇŽo 0x27CE7:xiÄ“ 0x27CE8:rÇŽo 0x27CE9:tuàn 0x27CEA:wèi 0x27CEB:yóu,jiÅ«,qiú,yòu 0x27CEC:méi 0x27CED:yuán 0x27CEE:zhòng 0x27CF6:sÅ�u 0x27CF8:gú 0x27CF9:shào 0x27CFB:zhÇŽo 0x27CFC:pí 0x27CFF:tÅ�ng 0x27D01:chÄ« 0x27D02:péng 0x27D03:chán 0x27D04:yÅ�ng 0x27D05:shuÇŽng 0x27D07:wÇ” 0x27D09:pí 0x27D0A:huàn 0x27D0C:fú 0x27D0E:biào 0x27D13:náo 0x27D15:biào 0x27D16:wèi 0x27D17:yÅ�ng 0x27D19:nÇŽo 0x27D1A:guài 0x27D20:lì 0x27D22:xìn 0x27D23:yán 0x27D24:pò 0x27D25:péi 0x27D2A:suÇ’ 0x27D2C:rèn 0x27D2D:shÇŽn 0x27D32:suÇ’ 0x27D38:dÄ�n 0x27D3A:mèn 0x27D43:shÇ’u 0x27D48:gòu 0x27D4A:hÄ�n,hàn,tàn 0x27D4B:shì 0x27D4C:yÇŽng 0x27D4E:gÇ” 0x27D5B:kÄ“ 0x27D5E:jÅ« 0x27D60:pài 0x27D61:cè 0x27D62:bÄ�o 0x27D63:xiÅ�ng,mín 0x27D64:cái,zhù 0x27D67:lÇ�n 0x27D68:ài 0x27D6C:mì,shèn 0x27D6D:lÇŽi 0x27D71:xiÄ�o 0x27D73:shé 0x27D7B:huó 0x27D7C:nì 0x27D84:zhèng 0x27D86:lìn 0x27D87:zhá 0x27D8A:yún 0x27D8D:xù 0x27D94:chéng 0x27D95:wÇ’ 0x27D96:xÄ« 0x27D99:bèi 0x27D9C:shÄ�ng,shÇŽng 0x27DA0:yù 0x27DA1:mì 0x27DB2:duÇŽn,zhuàn 0x27DB5:chà 0x27DB7:zé 0x27DB8:chèng 0x27DBA:tíng 0x27DC5:yí 0x27DCB:yÄ�o 0x27DCE:kÅ« 0x27DD0:fén 0x27DD1:xié 0x27DD2:chèng 0x27DDB:kuì 0x27DDF:bÄ«n 0x27DE1:lóu,lòu 0x27DE5:yì 0x27DE6:mì 0x27DE7:xiè 0x27DF1:guÄ« 0x27DF3:luó 0x27DF6:shàn 0x27DFE:jú 0x27DFF:dÅ« 0x27E02:xiÄ�n 0x27E05:zhÇ� 0x27E08:bìn 0x27E15:zhÇ� 0x27E16:zhuàn,lián 0x27E17:xué 0x27E18:liàn,biÇŽn,jiÇŽn 0x27E19:suì 0x27E26:làn 0x27E27:jù 0x27E28:mián 0x27E29:xùn 0x27E2A:zhàn 0x27E2B:gùn 0x27E32:zhì 0x27E3D:wèi 0x27E3E:quÇŽn,xuàn 0x27E3F:chài 0x27E48:réng 0x27E4A:yuè 0x27E4C:zÄ« 0x27E50:luò 0x27E51:guì 0x27E53:chéng 0x27E55:jÅ« 0x27E56:tiÇŽn 0x27E57:wàn 0x27E5B:zhÄ« 0x27E5E:nÇŽn,niÇŽn 0x27E63:hÄ�n 0x27E68:xÄ« 0x27E69:lín 0x27E6C:yÄ�n 0x27E6D:xù 0x27E72:hù 0x27E73:gàn 0x27E74:xù,huò 0x27E76:xì 0x27E7A:cuì 0x27E7D:xì 0x27E7E:hú 0x27E85:yÄ�n 0x27E8E:yì 0x27E8F:chí 0x27E90:jué 0x27E92:zú 0x27E9C:jiào 0x27E9D:yì 0x27E9F:tÇŽn 0x27EA0:chì 0x27EA1:bá 0x27EA2:tòu,yì 0x27EA3:zÅ�ng 0x27EA4:qiú,jÅ« 0x27EA7:chì 0x27EA8:xÇ� 0x27EB0:nì 0x27EB2:cÅ« 0x27EB4:wÇ” 0x27EB6:chù 0x27EB7:sÅ« 0x27EB8:yóng 0x27EB9:jÇ” 0x27EBA:bá 0x27EBC:cÇ� 0x27EBD:dì 0x27EBE:pÇŽn 0x27EBF:chì,yì 0x27EC1:qiÇ” 0x27EC3:yán,qù 0x27ECD:zhÇŽi 0x27ED2:xiàn 0x27ED3:bèng 0x27ED4:kuÄ�ng 0x27ED5:qì 0x27ED6:zhÅ�u 0x27ED7:jú 0x27ED8:qiè 0x27ED9:mò,pò 0x27EDA:yuán 0x27EDC:guì,kuÇ� 0x27EDD:zuÄ« 0x27EE7:qiè 0x27EF0:hú,zào 0x27EF1:qiú 0x27EF2:hái,kuÄ« 0x27EF3:fù 0x27EF4:làng 0x27EF5:shà 0x27EF6:xÄ« 0x27EF7:bÅ« 0x27EF8:shì 0x27EF9:yÇ’ng 0x27EFA:guÄ�ng,kuÄ�ng 0x27EFC:niè 0x27EFF:hÇ’u 0x27F0A:mì 0x27F0E:è 0x27F0F:xián 0x27F10:yÇ”n,qÅ«n 0x27F11:xù 0x27F12:qÇ�n 0x27F13:dÅ�ng 0x27F14:léng 0x27F15:qì 0x27F16:lán 0x27F17:fú 0x27F18:qÇ� 0x27F19:chÇ’ng 0x27F1C:cù 0x27F1F:mò 0x27F20:bÄ“i 0x27F24:dào 0x27F28:jié,jué 0x27F29:chòng,dòng 0x27F2A:chì 0x27F2B:yù 0x27F2C:cuÄ« 0x27F2D:sù,sÅ�u,sÇ’u,qiù 0x27F2E:tì 0x27F2F:shù,yú 0x27F30:zhá 0x27F31:fú,bí 0x27F33:chè 0x27F34:fó,zhì 0x27F35:hóu 0x27F36:zhá 0x27F44:jié 0x27F45:zhá 0x27F46:zhÄ�n 0x27F49:yÇŽn 0x27F4A:hái 0x27F4B:wÇ” 0x27F4C:huá 0x27F4D:diÄ�n,diàn 0x27F4E:yáo 0x27F4F:sÅ�u 0x27F50:qiÄ�n 0x27F51:jí 0x27F52:xiòng 0x27F53:qì 0x27F54:jÅ«n 0x27F56:hái 0x27F5E:yÇŽn 0x27F5F:jié 0x27F60:cuÄ« 0x27F62:tuán 0x27F63:zhÄ�ng 0x27F64:piÄ�o 0x27F65:lù 0x27F66:zhÄ« 0x27F67:chù 0x27F68:mì 0x27F69:qiÄ�ng 0x27F6B:liàn 0x27F72:lì 0x27F76:é 0x27F77:sù 0x27F78:jué,guì 0x27F7B:jú 0x27F7C:tán 0x27F7D:liáo 0x27F7E:sÄ�n,cún 0x27F7F:dòng 0x27F81:zá 0x27F82:zhí 0x27F86:xuàn 0x27F87:líng 0x27F8A:dÄ“ng 0x27F8D:zhÄ�n,zhàn,chán 0x27F8E:xuÄ�n 0x27F8F:qÇ�n 0x27F90:jiào 0x27F91:pì 0x27F94:hÇŽn 0x27F9A:yú 0x27F9B:guó 0x27F9D:xún 0x27FA0:xún 0x27FA1:chán 0x27FA2:jié,jí 0x27FA3:jú 0x27FA4:yÇŽn 0x27FA5:dú 0x27FA7:hòng 0x27FA8:xiàn,xiÇŽn 0x27FA9:xún,xuàn 0x27FAE:líng 0x27FAF:jié 0x27FB0:yì 0x27FB1:qú 0x27FB2:gÄ�n 0x27FB3:fÄ“ng 0x27FB5:jué 0x27FB6:qÅ« 0x27FBB:jiù 0x27FBD:jì 0x27FBE:jÇ� 0x27FC5:xí 0x27FC6:pÄ�ng 0x27FC8:kuàng 0x27FC9:kù,wù 0x27FCB:kù 0x27FCC:zhà 0x27FCF:bà 0x27FD2:chÄ›n 0x27FD3:hù 0x27FD4:nù 0x27FD5:é 0x27FD6:xiÅ�ng 0x27FD7:dÇ”n 0x27FD8:shÄ“ng 0x27FD9:wán 0x27FDA:fÄ“n 0x27FDD:xÄ« 0x27FDE:zÄ« 0x27FE0:hù,dì 0x27FE5:bié 0x27FE7:tuò 0x27FE8:bÇŽn 0x27FE9:gé 0x27FEB:kÄ“ 0x27FF2:zhuì,bó 0x27FF3:fú,fèi 0x27FF4:mò 0x27FF5:jiá 0x27FF6:tuó 0x27FF7:yù 0x27FF9:mÇ” 0x27FFA:jué 0x27FFB:jú 0x27FFC:guÄ� 0x27FFD:pÇ’ 0x28000:nÇ�,niÇŽn 0x28004:wÇŽ 0x28005:yÇŽn 0x28014:chÇ’u 0x28015:kuÄ�ng 0x28016:hài 0x28018:xiáng 0x28019:xÄ« 0x2801B:cún 0x2801C:tÅ�ng 0x2801D:ruò 0x2801F:duó 0x28020:chè 0x28024:lèi 0x28025:zÄ« 0x28027:zhÄ›ng 0x28028:zuÇ’ 0x2802B:kÄ�ng 0x2802C:zài 0x2802E:yuÄ�n,xuÄ�n 0x2802F:qióng 0x28033:fá 0x28034:xún 0x28036:jì 0x28038:chÄ� 0x28040:shÅ«,chÅ�u 0x28041:xuàn 0x28042:xié 0x28043:tÄ« 0x28044:hàn 0x28045:xiÄ�n 0x28046:shÄ�n 0x28047:tùn 0x28048:háng,gÄ“ng 0x28049:kÇ”n 0x2804A:cén 0x2804B:dÅ�u 0x2804C:nuó 0x2804D:yàn 0x2804E:chéng,jìng 0x2804F:pÅ« 0x28050:qì 0x28051:yuè 0x28052:fÅ« 0x28057:tÇ�ng 0x2805F:wÇ’ 0x28060:shÄ“ng 0x28061:tuÇ’ 0x28074:tÇŽn 0x28076:yÇŽ,yÄ� 0x28077:zhì 0x28078:lù,lì 0x28079:yÇŽn 0x2807A:jÅ« 0x2807D:dé 0x2807F:chù,zhuó 0x28080:zÇ” 0x28081:è 0x28082:zhí,xuÄ› 0x28083:péng 0x28085:biÄ“ 0x28087:dÇ� 0x28090:lái 0x28092:yè 0x2809C:háo 0x2809D:pán 0x2809E:tàn 0x2809F:kÄ�ng 0x280A0:xÅ«,lÇš 0x280A1:zòu 0x280A2:jí 0x280A3:wù 0x280A6:chuàn 0x280A9:pò 0x280AA:yÇŽn 0x280AB:tuò 0x280AD:dú 0x280AF:pián 0x280B0:chì 0x280B1:hùn 0x280B2:pÄ«ng 0x280B4:cÅ�ng 0x280B5:zhÇŽ 0x280BA:wÄ�n 0x280BF:wÇŽi 0x280C3:è 0x280C4:wèi 0x280C5:bÄ�i 0x280C7:jiÄ�ng 0x280D3:chá 0x280D5:chù 0x280D6:kuà 0x280D7:téng 0x280D8:zÅ�u,qÅ« 0x280D9:lì 0x280DA:tà 0x280DB:sà 0x280DE:pán 0x280DF:pán 0x280E3:sào 0x280E4:qiÄ�o,kào 0x280ED:zú 0x280EF:zhì 0x280F0:yÇŽn 0x280F2:jié 0x280F3:néng 0x28104:luán 0x28105:qÅ« 0x28107:dèng,téng 0x28108:liáng 0x28109:chÇŽn 0x2810A:qiè 0x2810B:lòu 0x2810C:dié,xiè 0x2810D:cuÄ« 0x28110:jÇ� 0x28113:cháo 0x28114:shuàn 0x28115:zú 0x28117:kÄ�ng 0x2811A:qiÄ�ng 0x2811B:lí 0x2812E:shuÄ�i 0x2812F:yù 0x28130:zhÄ�ng 0x28131:lÄ›i 0x28145:pó 0x2814A:zhé,chè 0x2814B:xiào 0x2814D:tÇŽn 0x2814E:cuì 0x2814F:lán 0x28151:xÅ« 0x28152:shù,chú 0x28153:zhÇŽ,dá 0x28154:cán 0x28157:bÇ� 0x28158:pèng 0x2815D:chéng 0x28163:qiáo 0x28164:jÄ« 0x2816A:zhÄ�i 0x2816C:lán 0x28181:tiÇŽn,yÇŽn 0x28182:sà 0x28183:jÄ«n 0x28184:zhù 0x28185:duò 0x28187:chà 0x28188:juàn 0x28189:táng 0x2818A:bèng 0x2818C:fán 0x2818D:liè 0x2818E:zéi 0x2818F:suì 0x28199:sè 0x281A7:zhì 0x281A8:tuí 0x281AA:qÄ«ng 0x281AC:chuò 0x281B0:tà,dà 0x281B1:bìng 0x281B2:wÄ›n 0x281B5:pÇ’ 0x281BD:mó 0x281BE:cÄ� 0x281C1:kuàng 0x281C3:cuó,zuÄ�n 0x281C4:rÇŽo 0x281C5:bào 0x281C6:lài 0x281CD:niÇŽn 0x281CE:lí 0x281D5:jiÇŽo 0x281D6:lú 0x281D7:lì 0x281D8:lóng 0x281D9:guì 0x281DD:chÇŽn 0x281E4:xiÄ�n 0x281E6:chàn 0x281E8:xiè 0x281E9:zhàn 0x281EF:shuÄ�ng 0x281FB:mÇ� 0x281FC:luán 0x281FD:luò 0x28200:diÄ�n 0x28208:dié 0x2820A:wÄ�n 0x2820B:yuè 0x2820C:luán 0x2820E:luán 0x28213:léng 0x28215:wÇŽi 0x28216:dìn 0x28217:nèn 0x28218:shÇŽo 0x28219:xiè,zhÄ« 0x2821A:pí 0x28225:máo 0x28227:yÇ�n 0x28229:bó 0x2822B:zhù 0x2822E:chÅ�ng 0x28236:mÇ” 0x28237:tuó 0x28239:tÇ’ng 0x2823A:yé 0x28241:huàng 0x28243:rèn 0x28245:yè 0x2824B:tuÅ� 0x28256:zuÄ�n 0x28257:yù 0x2825A:Ä� 0x2825C:zhÅ�u 0x2825D:wÄ�n 0x28261:duÇ’ 0x28262:zhòng 0x28263:hÄ� 0x28264:huáng 0x28265:miàn,tÇ� 0x28269:chÅ«n 0x2826A:qiè 0x2826B:gÅ�ng,qiÅ�ng 0x2826C:tíng 0x2826D:méi 0x28271:tàng 0x28274:róng 0x28277:róng 0x28278:qí 0x28279:guó 0x2827D:xiàng 0x2827E:tián 0x28285:xiÄ�o 0x28288:zhÄ�n 0x28289:cuì 0x28294:lán 0x28298:shÄ“n,qÅ« 0x2829A:lÄ›i 0x2829B:lì 0x2829D:chÄ�n 0x2829E:niè 0x2829F:luán 0x282A1:tÄ«ng 0x282A2:huì,sháo 0x282A7:gÅ�ng 0x282B0:qì 0x282B1:yú 0x282B3:xÄ«n 0x282B8:yuè 0x282B9:bÄ� 0x282BA:dài 0x282BB:jÄ« 0x282BC:xuàn 0x282BF:jué 0x282C0:niÇ” 0x282C8:dù 0x282C9:jí 0x282D0:pÄ� 0x282D1:gÇ’ng 0x282D2:bèn 0x282D4:kÄ“ng,jú 0x282D5:yàng,ÇŽng 0x282D6:liÇ” 0x282D7:ní 0x282D8:zhà 0x282D9:yìn 0x282DA:niÇŽn,ruÇŽn 0x282DB:pào 0x282DD:gÅ�ng 0x282DE:bù 0x282DF:hé 0x282E0:rÇ’ng 0x282E1:guì 0x282E5:bì 0x282E6:xÄ« 0x282E7:jú 0x282E8:hún 0x282E9:bì,fú 0x282EB:tiÄ�o 0x282EC:zhÄ›ng,chèng 0x282EE:hÅ�ng,chÅ«n 0x282EF:yì 0x282F0:cì 0x282F2:bìng 0x282F7:gÅ�ng 0x282FA:fá 0x282FD:yáng 0x282FE:xÇ” 0x28301:hÅ�ng 0x28304:zàng 0x28305:chái 0x28306:hóng 0x28308:tián 0x2830C:zhÄ« 0x2830D:xÄ«ng 0x2830E:xú 0x28311:zhèn 0x28314:wÇŽn,wàn 0x28318:jùn 0x2831D:wò,huò 0x28320:lù 0x28322:zhÄ“ng 0x28323:rÇ’ng 0x28324:chéng,chèng 0x28325:fú 0x28327:è 0x28328:tÄ�o 0x28329:táng 0x2832B:juÄ�n 0x2832C:chào 0x2832D:tà 0x2832E:dÇ� 0x28330:zÅ�ng 0x28333:kÄ“ng 0x28334:tuÄ« 0x28336:kÄ“ng 0x28345:rÇ’ng 0x28346:yÅ«n 0x28347:hé 0x28348:zÇ’ng 0x28349:cÅ�ng,zÇ’ng 0x2834A:qiÅ« 0x2834E:mù 0x2834F:duó 0x28350:xÇ” 0x28351:kÄ“ng 0x28352:xiàn,jiàn 0x2835B:dú 0x2835C:kÇŽn 0x2835E:yÄ«ng 0x28362:zÄ« 0x28367:huáng 0x28369:péng 0x2836B:lì 0x2836D:bó,pò 0x2836E:gé,lì 0x2836F:jú 0x28370:kÄ“ 0x28372:hú,gÇ”n 0x28373:yáo 0x28374:táng 0x28376:qióng 0x28377:rÇ’ng 0x28378:liÇ” 0x28379:huì 0x2837A:jÄ« 0x28389:zhì 0x2838B:táng,chÄ“ng 0x2838C:zhÇ� 0x2838D:kÄ�ng,liáng 0x28394:yàng 0x28396:tÇŽng,chÇŽng 0x28397:hÅ�ng 0x2839B:liáng 0x2839D:cáo 0x283A1:nÇŽi 0x283A2:zÇ’ng 0x283A4:dèng 0x283A6:jiÄ�o 0x283A7:péng 0x283A9:guÄ�ng 0x283AA:ér 0x283AB:jiàn 0x283AC:jiào 0x283AD:nuó 0x283AE:zÇŽo 0x283B3:péng 0x283B4:dÄ�ng 0x283B6:qú 0x283B7:lián 0x283B8:mù 0x283B9:lÇŽn 0x283BE:fén 0x283C2:hún,xuÄ�n 0x283C6:kuÄ�ng 0x283C8:yÇ�n 0x283C9:shuàn 0x283CA:jiàn 0x283D2:luò,léi 0x283D4:lù,dú 0x283DA:gé 0x283DB:rÇŽng,niÇŽn 0x283DE:pín 0x283E0:lóng 0x283E4:zhÄ›n 0x283E5:xiàn 0x283E8:lìn 0x283E9:lián 0x283EA:shÄ�n 0x283EB:bó 0x283EC:lì 0x283F3:xié 0x283F4:gé 0x283F5:mÇ�n 0x283F6:lián 0x283F9:jué 0x283FA:zhÅ�u 0x283FF:kÄ“ 0x28401:dié 0x28403:zhé 0x28405:shÅ« 0x28406:jÄ« 0x28407:lóng 0x28408:guÄ�ng 0x28409:zÇŽo 0x2840A:xiàn 0x2840B:qiÄ�n 0x2840D:shÄ“n 0x28410:yÇ�n 0x28411:jiè 0x28414:shÄ“n 0x28415:shÄ“n,cí 0x28416:sÇŽ 0x2841B:xì 0x28421:kù 0x28423:qú 0x28425:gé 0x28426:bàn 0x28428:bì 0x28429:qiÄ�n 0x28430:bÄ«n 0x28431:bàn 0x28433:zuò 0x28434:pì 0x28436:huò 0x2843E:bàn,biàn 0x2844A:nóng 0x2844C:chén 0x2844E:pÄ“ng 0x28451:fÇ” 0x28452:tú 0x2845C:pÇ� 0x2845D:pò 0x28460:chÇ� 0x28463:xuè 0x28464:qì 0x28465:wù 0x28468:zhì 0x28469:dì 0x2846A:cÅ�ng 0x2846B:yóu 0x28479:cÅ�ng 0x2847C:dì 0x2847D:zhuó 0x2847F:zÇ’u 0x28480:cóng 0x28483:pàn 0x28484:yÇŽn 0x28485:qì 0x28486:rÇ’ng 0x28487:jiá 0x28489:zhì,zhuì,suì 0x2848A:qiú 0x2848B:yuè 0x2848D:shì 0x28491:háo 0x28499:tuÅ�,hòu 0x2849C:bié 0x2849E:kàn 0x284A2:chuò 0x284A4:cÇ� 0x284A6:yÇ�n 0x284A7:shì 0x284A8:hài 0x284A9:ruÇŽn 0x284AB:yáng,nì 0x284AC:chÄ« 0x284AE:cÄ« 0x284B1:gÅ�ng 0x284B2:mí,xuè 0x284B4:jÇ� 0x284BC:gèn 0x284BD:zào,suÅ� 0x284C1:bÄ›ng 0x284C7:xÇ�n 0x284C8:kuò 0x284CA:dié 0x284CD:tíng 0x284DA:shuì 0x284DE:dài 0x284E6:lÇ� 0x284E8:yÇ’ng 0x284E9:jiÄ�o 0x284EC:tá 0x284ED:qÇ”,còu 0x284EE:yín 0x284EF:yuÄ�n 0x284F0:jié 0x284F2:qiÄ�n 0x284F3:yÄ�o 0x284F4:yà 0x284F7:qÄ«ng 0x284FF:péi 0x28517:jiÄ� 0x28519:tòu 0x2851B:tÄ« 0x28521:dùn,tún,chuàn,chuán 0x28522:chÇŽn 0x28523:jiÄ�,jià 0x28524:chì 0x28525:jiÄ�n,jÄ«n 0x28526:shù 0x2852F:tà 0x28555:zhÄ« 0x28557:yuán 0x2855A:hÅ« 0x2855C:liè 0x28560:zé 0x28562:chù 0x28566:qiù 0x28567:bÄ“ng 0x28579:huán 0x2857A:kuÄ� 0x2857B:shÄ“ng 0x2857D:jié 0x2857F:wÇŽng 0x28583:hÅ« 0x2858A:zé,jÄ« 0x2858B:zÇŽn,zhì 0x2858C:yàng 0x2858E:chÇ� 0x2858F:jiù 0x2859A:liáo 0x2859B:yÅ« 0x285A0:biÇŽn,biàn 0x285A2:kuáng 0x285AC:chòu 0x285AD:yá 0x285AE:zhuó 0x285B0:qiè 0x285B1:xiàn 0x285B3:yuÄ�n 0x285B4:wÇ” 0x285B5:jiÇŽo 0x285B6:xiàng 0x285B7:shà 0x285B9:zhì 0x285BC:chòng 0x285BE:biÄ�n 0x285BF:wÄ“i 0x285D3:dào 0x285DD:yù,jú 0x285DE:tuí 0x285E1:chào 0x285E5:huì 0x285E6:qiÇŽn 0x285E8:wÄ›i 0x285F0:yóu 0x285FC:dì,dài 0x285FE:dà 0x28601:yóu 0x28602:jiù 0x28603:tuí 0x28604:zÇŽn 0x28607:huì 0x28609:shà 0x2860C:huò 0x28614:yáo 0x28619:xiàn 0x2861E:xiàn 0x2862C:dì 0x2862E:jiù 0x28632:huì 0x28634:kào 0x28635:yóu 0x28638:lì 0x2863C:chuán 0x2863E:chí 0x28640:huò 0x28642:yóu 0x28644:yuè 0x2864E:tà 0x2864F:zàn 0x28653:niè 0x28654:zhù 0x28661:xiÇŽn 0x28669:shí 0x2866B:kÇ’u 0x2866C:qÇ� 0x2866D:tÇ” 0x2866E:fán 0x2866F:cÅ«n 0x28672:tún,cÅ«n 0x28673:chÄ� 0x28674:cái,zài 0x28675:xiàng 0x28676:pèi 0x28677:jÇ�ng 0x28678:qí,zhÄ« 0x28679:shÇŽo 0x2867A:niÇ” 0x2867B:nà 0x2867D:qín 0x2868D:bì,bèi 0x28693:bì,fèi,fú 0x28694:bÄ�o 0x28695:biàn 0x28696:zÄ« 0x28697:nà 0x28698:wèi 0x28699:háo 0x286A1:jÇ�n 0x286A3:zhèng 0x286A7:qié 0x286AE:hào 0x286AF:tóng 0x286B0:zÇŽo 0x286B1:shèng 0x286B2:cún 0x286B3:huÄ�ng 0x286B4:rú 0x286B5:zài 0x286B6:nián 0x286BE:xiÄ�n 0x286C8:quán 0x286C9:jì 0x286CA:yín 0x286CB:lÇ� 0x286CC:máng 0x286CD:shào 0x286CE:hàn 0x286CF:cuò 0x286D0:jùn 0x286D1:jì 0x286D2:bù 0x286D3:lòng 0x286D4:fÇ’u 0x286D5:yóu 0x286D6:kuài 0x286DC:xiàng 0x286E1:yún 0x286E3:qín 0x286E4:huí 0x286E5:pú 0x286EB:lí 0x286EC:péi 0x286ED:shÅ«,shè 0x286EE:jÅ« 0x286EF:yí 0x286F0:zhÄ“ng 0x286F1:chóng 0x286F3:xí,jí 0x286F5:hÇ” 0x286F6:róu,shòu 0x2870C:huàn 0x2870D:qiào 0x2870E:zhÄ« 0x2870F:yíng 0x28710:xÇ� 0x28711:qiÄ�o 0x28712:jì 0x28713:zhÄ“ng 0x28714:huáng 0x28716:yú 0x28717:zÅ�u 0x28718:méi 0x2871C:shÄ›ng 0x28729:quán 0x28730:jiÄ�ng 0x28731:hé 0x28733:tóng 0x28734:hé 0x28735:wÄ“n 0x28736:yì 0x28737:páng 0x2873A:wÄ“ng 0x2873B:qián 0x2873C:lì 0x2873D:yí 0x2873E:chuàng 0x2873F:xù 0x28740:wÄ›i 0x28746:gÄ“ 0x28748:yÇ” 0x2874B:zhài 0x2874C:gÄ�n 0x2874D:qiÄ�n 0x2874E:kÄ�ng 0x2874F:lí 0x28750:shÄ“n 0x28751:guàn 0x28753:piáo 0x28756:lí 0x28758:hÇ” 0x2875B:tú 0x2875C:shùn 0x2875E:hù 0x2875F:lí 0x28762:lòu 0x28766:dàng 0x28768:zuò 0x28769:shÄ�n 0x2876B:shè,xì 0x2876D:féng 0x2876E:jù,zÅ�u 0x2876F:tóng 0x28770:jiÇŽo 0x28771:qiáo 0x28772:gÄ�o,hào 0x28773:zÄ« 0x28774:huáng 0x28775:shÄ�n 0x28778:tán 0x2878C:tuÅ� 0x2878E:lìng 0x28790:chéng 0x28791:wèng 0x28792:zuó 0x28793:yù 0x28795:zhú,chù 0x28797:qún 0x28798:xÇ� 0x28799:qú 0x2879B:gé 0x287A2:qÄ« 0x287A3:xÅ« 0x287A8:gài 0x287A9:què 0x287AA:chóu,shòu 0x287AB:méng 0x287B2:shÄ“n 0x287B3:qú 0x287B6:qiÄ�o 0x287B7:cán 0x287BA:lì 0x287BC:wàn 0x287BD:léi 0x287BE:xÄ«ng 0x287BF:láng 0x287C2:shì 0x287C3:zhÄ“ng 0x287C4:fán 0x287CA:zhì 0x287CF:yín 0x287D1:lì 0x287D6:mó 0x287D7:wÄ›i 0x287D9:yÄ«ng 0x287DA:ráng 0x287E0:quÄ�n,què,jué 0x287E5:luÇ’ 0x287F2:dài 0x287F4:yìn 0x287F5:bÇ� 0x287F6:gÄ“ 0x287F8:wèn 0x287F9:yÇŽn 0x287FA:miÇŽn 0x287FC:gÇŽng 0x287FD:qiú 0x287FE:zhÄ« 0x2880B:gÅ« 0x2880C:tóng 0x2880E:líng 0x2880F:tí 0x28810:cí 0x28811:yí,tuó 0x28812:fàn 0x28813:pÅ� 0x28814:bì 0x28816:bào 0x2881F:pÄ“ng 0x28821:suÄ�n 0x28824:sÅ�ng,nóng 0x28825:wéi 0x28826:xiáo 0x2882C:hào 0x2882D:yÇŽn 0x28836:yí 0x28837:zÄ�o 0x28838:yÇ�ng 0x28839:nÇŽn 0x2883F:zÄ� 0x28841:tiÇŽn 0x28842:xÄ« 0x28843:jiào 0x28844:yán 0x2884C:néi 0x2884D:tÇŽn 0x2884E:yàn 0x2884F:tiÇŽn 0x28850:zhì 0x28851:chÅ�u,chóu 0x28852:táo 0x28857:zhà 0x2885E:miÇŽn 0x28861:wÇ” 0x28862:yÇ�n 0x28863:yàn 0x28864:lÇŽo 0x28869:pÅ� 0x2886B:hùn 0x2886C:hÇŽi 0x2886D:mú 0x2886E:cÅ�ng 0x28871:kù,dÇ�ng 0x28872:chÅ�u 0x28874:yÇ’u 0x28878:zhuó 0x2887B:sÅ�u 0x28882:yìn 0x28885:zuì 0x28886:sÄ�ng 0x28887:liù 0x28888:hàn 0x28889:wèi 0x2888A:méng 0x2888B:hú 0x2888C:lì 0x2888E:mì,yÄ«n 0x28890:bÄ�ng 0x28891:jiÇŽn 0x2889C:què 0x288A0:méng 0x288A2:mú 0x288A3:hÇ’ng 0x288A4:hù 0x288A5:mí 0x288A6:shài,zhà 0x288A9:shÄ�ng 0x288AA:chào 0x288AC:zhuó,tú 0x288AE:zhÄ« 0x288AF:niàn 0x288B5:jì 0x288B8:kÄ“ 0x288B9:zhÄ“ng 0x288BF:dÄ�n 0x288C0:liÇŽo 0x288C1:zhÇŽn 0x288C2:gÇ’ng 0x288C3:láo,lào 0x288C4:huÄ� 0x288C5:chuài 0x288C7:jiÇŽn 0x288C8:kuì 0x288CD:shÄ“ 0x288D4:chÄ›n 0x288D5:tÇŽn 0x288D7:hú 0x288D8:méng 0x288D9:pào 0x288DA:zhÇŽn 0x288DB:cháng 0x288DD:gÇŽn,jiÇŽn 0x288E0:yì 0x288E2:suì 0x288E6:xù 0x288E7:jì 0x288E8:làn 0x288EC:yí 0x288EF:mì 0x288F1:miè 0x288F5:cuán 0x288F8:lÇŽn 0x288FB:yÄ�n,yÇŽn 0x288FE:mí 0x28902:yÇ’ng 0x28903:cáng,zÄ� 0x28904:jiÇŽn 0x28907:sÅ�u,zÄ�o 0x2890E:yán 0x28911:juàn 0x28915:è 0x28918:fèn 0x2891A:fèn 0x28921:guàng 0x28922:mái 0x28924:liÄ› 0x28929:chÅ�ng 0x2892B:lí 0x28931:zhí 0x28934:xiè 0x28937:chóu 0x28939:jí 0x2893D:pÄ« 0x28942:jié 0x28947:zhÇ’u,zhù 0x2894D:xiÅ�ng 0x28951:kuàng,gÇ’ng 0x28959:jÇ�ng 0x2895B:hù 0x2895E:qián 0x28963:cén 0x28966:qí 0x28967:wÇŽn,fàn,biÄ�n 0x28968:máo 0x2896A:dÇ’u 0x28974:kÇ’u 0x28976:dài 0x28978:náo 0x2897A:hóng 0x28982:lÇŽi 0x28983:duÇ’,duò 0x28984:qiÄ�n 0x28986:yín 0x28996:lòu 0x28997:huÄ« 0x2899B:fù 0x2899C:máo 0x2899E:zhÅ�u 0x289A1:yóng,yáng 0x289AD:láo 0x289AE:jí 0x289AF:yì 0x289B0:liú 0x289B1:cÅ�ng 0x289B3:nÇŽn 0x289D0:tÅ«n 0x289D1:xiàng 0x289D5:biàn 0x289D6:chuáng 0x289D7:wù 0x289D9:jÅ« 0x289E5:xiÄ“ 0x289E6:pÄ« 0x289E7:zhuó 0x289E8:ruì,zhuì 0x289EA:sào 0x289EB:zì 0x289ED:zhèng 0x289F0:zú 0x289F1:qÅ« 0x289F3:chì 0x289F5:zhì 0x28A17:quàn 0x28A18:qiÄ�n 0x28A19:yÄ� 0x28A1A:chào 0x28A1B:hé 0x28A1C:rÇ” 0x28A20:jÅ« 0x28A21:wù 0x28A2C:chì 0x28A2D:kuàng,gÇ’ng 0x28A2F:còu,zhòu 0x28A30:ruàn 0x28A31:kuò 0x28A32:chí 0x28A33:zú 0x28A34:jiÄ�o 0x28A36:yú 0x28A37:tú 0x28A38:méng 0x28A39:dÄ� 0x28A3A:shuò,xuÄ“ 0x28A65:fÄ“ng 0x28A66:gÇ’u 0x28A67:dÅ�ng 0x28A68:chÇŽ 0x28A69:mào 0x28A6A:chÇŽn 0x28A6B:biÄ�n 0x28A6C:yù 0x28A6F:wán 0x28A70:zú 0x28A72:zÄ« 0x28A74:chuÄ�n 0x28A75:wÇŽn 0x28A76:wÄ� 0x28A78:quÄ�n,juÄ�n 0x28A7B:wÇŽn 0x28A7D:xià 0x28A84:yìng 0x28A85:jiàn 0x28A88:wÄ›i 0x28A89:tí 0x28A8A:sÄ�o 0x28A8C:qí 0x28A8D:shÄ� 0x28A8E:yù 0x28A8F:jí 0x28A90:dòu,tÅ�u 0x28A91:chÇŽn 0x28A92:tuán 0x28A95:liú 0x28A97:zhuì 0x28AB3:ruàn 0x28AB6:yàn 0x28AB7:gÇ” 0x28AB9:lì 0x28ABA:chÄ� 0x28ABE:dì 0x28ABF:liú 0x28AC0:zhÇŽn 0x28AC1:pÅ� 0x28AD2:lòu 0x28AD4:zhì,xiè 0x28B01:lián 0x28B05:luÇ’ 0x28B0D:duò,duì 0x28B10:jué 0x28B11:lì 0x28B12:lán 0x28B14:ruàn 0x28B15:gÅ« 0x28B16:chán 0x28B17:xÅ« 0x28B1A:zhÇ� 0x28B41:xuè 0x28B42:bÅ� 0x28B43:chÄ“ng 0x28B45:zhù 0x28B46:hÄ“i 0x28B49:bÄ�n 0x28B53:dié 0x28B56:zhÇŽn 0x28B57:guó 0x28B5A:biÄ�o 0x28B5B:là,gÄ› 0x28B7A:jÄ«n 0x28B82:gÇŽi 0x28B92:mèng 0x28B94:yù 0x28BAA:xÇ� 0x28BAC:piÄ�o 0x28BAD:sÄ« 0x28BB4:dèng 0x28BB8:chuÅ� 0x28BB9:dí 0x28BBA:jÄ« 0x28BBB:chán 0x28BBF:zhuó 0x28BD3:cài 0x28BDE:jiàng 0x28BF2:tóu 0x28BFD:lí 0x28C02:qiàn 0x28C06:chuÅ� 0x28C0F:tà 0x28C11:diào 0x28C13:jiÇŽn 0x28C1B:zhÇ� 0x28C1C:jué 0x28C1E:mó 0x28C20:luó 0x28C26:bÇŽo 0x28C2D:zuÇŽn 0x28C35:zhÄ“ 0x28C38:yú 0x28C3B:bÇŽo 0x28C3E:mÇŽ 0x28C3F:xì 0x28C40:hù 0x28C41:yì 0x28C42:é 0x28C43:gÅ« 0x28C44:tú 0x28C45:zhÄ“n 0x28C47:qiú 0x28C48:sù 0x28C49:liàng 0x28C4A:qÅ« 0x28C4B:líng 0x28C4C:guàn 0x28C4D:láng 0x28C4E:tÅ�u 0x28C4F:dÄ� 0x28C50:lòu 0x28C51:huáng 0x28C52:shòu 0x28C53:jiÄ�o 0x28C54:zÅ«n 0x28C55:gÇŽi 0x28C56:wéi 0x28C59:kÅ«n 0x28C5A:duàn 0x28C5B:sÅ�ng 0x28C5C:qí 0x28C5D:yÇŽng 0x28C61:shì 0x28C63:gÇŽi 0x28C66:dào 0x28C67:yÇŽo,ÇŽo 0x28C6B:qián 0x28C6D:shÄ�o 0x28C6E:cháng 0x28C6F:miÇ” 0x28C71:mó 0x28C75:nÇŽo 0x28C78:cÅ�ng 0x28C7A:niè 0x28C7B:zhÄ�o 0x28C7C:cén 0x28C7F:sÅ�ng 0x28C80:niè 0x28C81:cì 0x28C84:jùn 0x28C86:shÄ�o 0x28C88:zhú 0x28C89:duÇ’,tuÇ’,shèng 0x28C8A:àn 0x28C8B:bÄ« 0x28C8E:tì 0x28C90:pÇ� 0x28C91:xiá 0x28C92:qiú 0x28C93:shÄ›ng 0x28C97:tÄ�ng 0x28C9B:mán,mián 0x28C9C:piÄ�n 0x28C9E:tì 0x28C9F:róng 0x28CA7:cÅ�ng 0x28CAA:jÄ« 0x28CAB:féng 0x28CAC:wù 0x28CAD:jiào 0x28CAE:láo 0x28CAF:zÄ“ng 0x28CB0:péng 0x28CB1:cÇŽn 0x28CB3:nóng 0x28CB5:chÇŽn 0x28CBE:mán,mián 0x28CBF:guì 0x28CC0:niào 0x28CC1:chÅ�ng 0x28CC2:chàn 0x28CC6:nàng 0x28CC9:xiÄ� 0x28CCA:jiÅ« 0x28CCB:jÇ� 0x28CCC:zhèn 0x28CD1:tÇ�ng 0x28CD4:mén 0x28CD5:yuè 0x28CD7:zhÅ�ng 0x28CD8:tún 0x28CD9:ruì 0x28CDA:xiè,fÄ“n 0x28CDB:xÄ« 0x28CDD:tÇ�ng,rùn 0x28CDE:niÇ” 0x28CE0:wÇŽng 0x28CE1:jiÄ�n,guÄ�n 0x28CE3:fÄ“n 0x28CF2:biàn,bì 0x28CF7:yí 0x28CFA:dié 0x28CFB:jÄ« 0x28CFC:gÇŽn 0x28CFF:jiÄ�n,xì,mÇŽ 0x28D00:jiÅ�ng 0x28D06:kÄ�i 0x28D0A:què,guÄ�n 0x28D0C:nán 0x28D0D:móu 0x28D0E:xù 0x28D0F:sÇ’ng 0x28D10:shèn 0x28D11:kuÄ�ng 0x28D12:què 0x28D13:wéi 0x28D17:dié 0x28D18:nán 0x28D1A:ruò 0x28D1B:gÅ�ng 0x28D1C:dòu,yòu 0x28D1E:niÇŽn 0x28D21:chÄ�o 0x28D22:hé 0x28D23:yàn 0x28D29:tú 0x28D2A:bÇ” 0x28D2C:hú 0x28D2D:yÇ’ng 0x28D2F:shÇ� 0x28D30:chù 0x28D39:xiÄ�o 0x28D3A:mén 0x28D3B:lÇ� 0x28D3C:tí 0x28D3E:jiÄ�n 0x28D42:zhÇ� 0x28D43:guÄ�,fÇ”,yuè 0x28D44:guÇŽn 0x28D46:qì 0x28D48:fÄ“i 0x28D49:yÇ” 0x28D4A:zhé 0x28D4B:wÄ›i 0x28D4C:Ä› 0x28D4D:chÄ�n 0x28D4E:xÄ«,qí 0x28D50:gÇ” 0x28D57:què 0x28D58:huì 0x28D5A:xié 0x28D5B:yÄ«ng 0x28D5D:tà 0x28D5E:wÄ�i 0x28D5F:fú 0x28D60:jiè 0x28D61:pì 0x28D65:shÄ›ng 0x28D66:yú 0x28D67:kuÄ� 0x28D69:pì 0x28D6A:xié 0x28D6B:nüè 0x28D6C:xiàn 0x28D6D:jiàn 0x28D6E:xù 0x28D70:bì 0x28D74:nán 0x28D76:liáng 0x28D78:pián 0x28D7C:jìng 0x28D80:tÇŽ 0x28D81:yàn 0x28D82:ài 0x28D85:xiÄ�o 0x28D86:qiÄ�ng 0x28D87:wÇ” 0x28D88:táng 0x28D8A:jùn 0x28D90:kuò 0x28D97:làng 0x28D99:nÄ›ng 0x28D9C:dòu,dÇ’u 0x28D9D:shú 0x28D9F:jiÇŽo 0x28DA0:niè 0x28DA2:yú 0x28DA8:cè 0x28DAA:jiÇŽo,liú 0x28DAC:huà 0x28DAD:wén 0x28DAE:yÄ“ 0x28DAF:é 0x28DB0:guÄ�ng 0x28DB1:huÄ� 0x28DB2:jiÄ�o 0x28DBA:lèi 0x28DBC:shÄ�ng 0x28DBD:yòng 0x28DBF:dÄ“ng 0x28DC0:guÄ�n 0x28DC1:niú 0x28DC3:suì 0x28DC4:xiàng 0x28DC6:sà 0x28DC7:chÄ�ng 0x28DCE:rùn 0x28DD0:yÅ«n 0x28DD2:fÄ“n 0x28DD3:jiàn 0x28DD4:xù 0x28DD8:xì 0x28DD9:shú 0x28DE5:xié 0x28DE6:lì 0x28DE9:tóu 0x28DEC:mÇ� 0x28DED:chán 0x28DEE:huÅ� 0x28DF1:zhuÇŽn 0x28DF2:yuè 0x28DFB:lán 0x28DFD:yán 0x28DFE:dàng 0x28DFF:xiàng 0x28E00:yuè 0x28E01:tÇ�ng 0x28E02:bÄ“ng 0x28E03:sàn 0x28E04:xiàn 0x28E05:dié 0x28E06:pì 0x28E07:pián 0x28E09:tÇŽ 0x28E0B:jiÄ�o 0x28E0C:yÄ“ 0x28E0E:yuè 0x28E10:réng 0x28E11:qiÇŽo 0x28E12:qí 0x28E13:diÄ�o 0x28E14:qí,wéi 0x28E17:hàn 0x28E18:yuán 0x28E19:yóu 0x28E1A:jí 0x28E1B:gài 0x28E1C:hÄ�i 0x28E1D:shì 0x28E1F:qÅ« 0x28E29:wèn 0x28E2C:zhèn 0x28E2D:pÅ� 0x28E2E:yán,yÇ”n 0x28E2F:gÅ« 0x28E30:jú 0x28E31:tiàn,niÇŽn 0x28E37:è 0x28E3A:yÄ� 0x28E3B:lìn 0x28E3C:bì 0x28E40:zÇ� 0x28E41:hóng 0x28E43:duÇ’,duò 0x28E45:duì 0x28E46:xuàn 0x28E48:shÇŽn,yáng 0x28E4A:shÇŽn 0x28E4B:yáo 0x28E4C:rÇŽn 0x28E54:tuó 0x28E57:bÄ«ng 0x28E58:xù 0x28E59:tÅ«n 0x28E5A:chéng 0x28E5C:dòu 0x28E5D:yì,yà 0x28E61:chè 0x28E75:juÇŽn 0x28E76:jÄ« 0x28E78:zhào 0x28E79:bÄ“ng,bèng 0x28E7B:tiÇŽn 0x28E80:pÄ“ng 0x28E85:fù 0x28E96:tuÇ’ 0x28E98:xián 0x28E99:nì 0x28E9A:lóng 0x28E9D:zhuó 0x28E9F:zhÄ“ng 0x28EA0:shÇ”n 0x28EA1:zÅ�ng 0x28EA2:fÄ“ng 0x28EA3:duàn 0x28EA4:pì 0x28EA5:yÇŽn 0x28EA6:sÇ’u 0x28EA7:qiú 0x28EA8:è 0x28EA9:qián 0x28EAB:qiÇŽn 0x28EAD:cÄ� 0x28EAE:xùn 0x28EB5:zhuì 0x28EB8:mÇŽo 0x28EB9:jiÇŽo 0x28EBF:zhÇŽn 0x28EC0:pí,bÄ« 0x28EC1:xÄ« 0x28EC2:yàn 0x28EC3:fèi 0x28EC4:niè 0x28EC6:zhì 0x28EC8:suÇ’ 0x28ECA:yì 0x28ECC:lÄ›i 0x28ECD:xù 0x28ECF:yì 0x28ED2:wÄ“i 0x28ED5:jÄ« 0x28ED6:chÄ“n 0x28ED7:dié 0x28EE3:yuán 0x28EE5:xí 0x28EE7:liú 0x28EE8:suÇ’ 0x28EF1:bÄ“ng 0x28EF2:xià 0x28EF3:yàn,yÄ�n 0x28EF5:cuÄ«,zuÄ«,duì 0x28EF7:kÄ�ng 0x28EFA:qÄ«ng 0x28EFB:lóu 0x28EFC:bÄ« 0x28F08:zhàn 0x28F09:cuàn 0x28F0A:wú 0x28F0B:xÅ« 0x28F0C:chÄ“n 0x28F0D:háo 0x28F0E:jué 0x28F10:chèn 0x28F11:chá 0x28F12:chÇŽn 0x28F13:zhí 0x28F14:xún 0x28F23:gé 0x28F24:chén 0x28F25:yè,gé 0x28F2A:chÇ” 0x28F2B:qú 0x28F2C:xiè 0x28F2E:zhàn 0x28F2F:kÄ›n 0x28F31:jué 0x28F3D:qú 0x28F3F:méng 0x28F40:yè 0x28F41:zÅ�u,cóng 0x28F42:pú 0x28F44:shì 0x28F49:shÇ” 0x28F4A:chán 0x28F4D:dú 0x28F4F:guÅ� 0x28F50:lù,yáng 0x28F51:yÄ�n 0x28F56:niÇŽo 0x28F57:bÄ«n,pín 0x28F5F:tuí 0x28F66:nì 0x28F67:huÄ�n 0x28F68:qián 0x28F6F:xià 0x28F72:líng 0x28F77:lián 0x28F79:yì,lì 0x28F7B:lì 0x28F7C:sì 0x28F7F:dài 0x28F82:wèi 0x28F85:cì 0x28F89:jiÇ” 0x28F8A:hóng 0x28F8C:yú 0x28F8E:kuí 0x28F92:háng 0x28F93:gÄ“,yì 0x28F94:fàng 0x28F97:kuí,xié 0x28F9A:guÄ«,fÅ« 0x28F9B:chÇ�,qí 0x28F9E:jiÇ” 0x28FA1:suÄ«,huÇŽng 0x28FA4:dié 0x28FAC:suÇ� 0x28FB0:qín 0x28FB4:guÄ« 0x28FBB:zhuÄ« 0x28FBE:tiào 0x28FC1:yuè 0x28FC7:zuÇ� 0x28FCF:wú 0x28FD0:cuÇ� 0x28FDB:zhì,xÄ« 0x28FE0:shuì 0x28FE2:dÅ�ng 0x28FED:wéi 0x28FFF:chÇ’ng 0x2900B:rún 0x29016:jí 0x2901C:diÄ�o 0x2901E:cÄ�ng 0x29020:kòu,gÇ” 0x29023:wéi 0x29027:cán 0x2902A:má 0x2902B:òu 0x29032:sÇŽn 0x29036:wéi,huÄ«,mí 0x2903C:sÇŽn 0x2903F:jÄ«n 0x2904C:wéi 0x2905E:cài 0x2905F:lí 0x2906F:yuè 0x29074:yÅ«n 0x29077:chÄ“ng 0x2907A:shÄ�n 0x29082:hÅ« 0x29083:shài 0x29084:tún 0x29086:fÇ’u,fù 0x29088:qìn 0x29089:xÅ«,chÄ“n 0x2908D:chuÄ�n 0x2908E:fù 0x29092:yì,ài 0x29093:dÅ�ng 0x29094:fú 0x29095:fú 0x29096:zé 0x29097:pù 0x29099:líng 0x2909D:shài,yÄ«ng 0x2909E:pào 0x290A2:yín,ái 0x290A3:luò 0x290A4:huà 0x290A5:yìn 0x290A6:bèng 0x290A7:yÅ« 0x290A8:shè 0x290AA:xiè 0x290AB:chÇ” 0x290B4:shè 0x290B5:diàn 0x290B9:yì 0x290BB:chè 0x290BC:gÄ›ng 0x290BD:lóng 0x290BE:píng 0x290BF:yÇ”n 0x290C0:yàn 0x290C1:mò 0x290C3:suÄ« 0x290CB:jìng 0x290CD:sòng 0x290CE:páng 0x290D0:yá 0x290D1:sè 0x290D2:duÇ’ 0x290D5:chuáng 0x290D6:xiè 0x290D8:tuán 0x290D9:gÅ�ng 0x290DA:xuàn 0x290DC:lÄ� 0x290DE:líng 0x290E0:dài 0x290E1:zhá 0x290EC:yÄ«n 0x290ED:sÅ�ng 0x290EF:yÇ” 0x290F0:tuó 0x290F1:tuó 0x290F4:bà 0x290F5:rÇŽn 0x290F6:bó 0x290F7:dài 0x290F9:zhá,zhÇŽ 0x290FA:hóu 0x290FE:huÇ� 0x29105:lú 0x2910A:lìng 0x2910B:rú 0x29115:dàn 0x29116:méng 0x29117:xià 0x29118:wÄ›ng 0x29119:hán 0x2911A:zÄ« 0x2911B:zhèn 0x2911C:sè 0x2911D:cuó 0x2911E:lì 0x29120:diÄ�n 0x29121:lián 0x29122:gòu 0x29126:péng 0x2912A:yÄ«ng 0x2912C:hòu 0x2912E:duì 0x2912F:wù 0x29137:piào 0x29138:hè 0x2913A:lóng 0x2913B:mò 0x2913C:fÄ›i 0x2913D:lÇš 0x2913E:zé 0x2913F:bó 0x29140:diàn,zhí 0x29141:mÇŽng 0x29143:zhuàng,chóng 0x29144:lù 0x29145:pÄ�ng 0x29146:duì 0x29147:bù 0x2914C:chÄ“n 0x2914D:màn 0x29156:xÄ« 0x2915D:ÇŽn 0x2915E:zhÅ�ng,chòng 0x29160:nàn 0x29161:tuò 0x29162:hé 0x29165:duì 0x29166:wÄ�n,dÄ�n 0x29167:zhÅ�ng 0x29168:cén,shèn 0x29169:lì 0x2916A:shuÄ�ng 0x2916E:cén 0x29170:sÄ« 0x29172:duì 0x29174:hÅ«n 0x2917C:jiÄ�n,jiàn 0x2917D:nóng 0x2917E:dàn 0x2917F:fù 0x29180:huò 0x29181:huì,wèi 0x29182:cí 0x29184:yÇ’ng 0x29185:sà 0x29186:tíng 0x2918E:liù 0x29191:suÄ�n 0x29192:líng 0x29193:mán,màn 0x29194:diàn 0x29198:pÄ�o 0x2919A:líng 0x2919D:lì 0x2919F:nóu 0x291A3:liè 0x291A4:shÇŽn 0x291A6:fèi 0x291AB:shÇŽn 0x291AE:líng 0x291AF:zhàn,jiÄ�n 0x291B1:bÄ«n 0x291B2:lí 0x291B5:sÄ«,xiàn 0x291B6:ráng 0x291B7:jiÄ�n 0x291B8:zhuó 0x291BB:líng 0x291BC:líng 0x291BD:mèng 0x291BF:shuÄ�ng 0x291C4:líng 0x291C7:hùn 0x291CE:líng 0x291CF:jiÄ�n 0x291D0:qú 0x291D4:nóng 0x291D5:jìng 0x291D6:chÄ“n 0x291DC:zhÄ“n,chèng,chÄ“ng 0x291DD:qìng 0x291DF:qìng 0x291E0:è,yÇŽn 0x291E3:sè 0x291E9:bèi 0x291EB:fÄ“i 0x291EE:fèi 0x291EF:féi 0x291F4:fÄ�ng 0x291F5:kÇ” 0x291FA:zá 0x291FB:huì 0x291FD:féi 0x29201:duì 0x29206:pÄ� 0x29207:niÇ” 0x29208:pàng 0x29209:dàn 0x2920A:dÄ�n,dàn 0x2920B:ài 0x2920D:tiÇŽn 0x2920E:chÇŽo 0x2920F:ÇŽo,yÇ’u 0x29210:mèi 0x29211:nÇŽn 0x29214:bò 0x29215:yù,chì 0x29216:xiÄ�n,hÄ�n 0x29217:mài 0x2921A:pÄ«ng 0x2921C:duÄ« 0x2921E:dào 0x29221:xìng 0x29222:nì,nÇœ 0x29223:hÄ�n 0x29224:chù 0x29225:shuÇŽ 0x29226:mÇŽn 0x2922C:wàn 0x2922D:yì 0x2922E:diào 0x2922F:yÄ�n 0x29231:wò 0x29232:suàn 0x29234:ÇŽn 0x29235:lán 0x29236:nÇŽn 0x29238:qiÇ” 0x29239:miàn 0x2923A:nuÇ’ 0x2923B:cán 0x2923C:cÇŽn 0x29240:làn 0x29241:tiÇŽn 0x29242:yè 0x29244:niÇŽn 0x29246:shuÇŽ 0x2924B:cí 0x2924D:jiÇŽn 0x29250:gàn 0x29254:jiàn 0x29255:guó 0x29257:zhÄ�n 0x29259:luÇ’ 0x2925C:jÄ«,hàng 0x2925D:guì 0x29261:jiá 0x29262:jÇ� 0x29265:xuàn 0x29267:fÄ“ng 0x2926B:bì 0x2926C:qí,chí 0x2926F:yuán 0x29270:àng 0x29271:dÄ« 0x29274:è 0x29275:fén 0x29278:jù 0x29279:nÇ� 0x2927A:tuó 0x2927C:shÄ“n 0x2927D:fú 0x2927E:xiá 0x2927F:qú 0x29280:pò 0x29281:wÇŽn 0x29282:líng 0x29283:mà 0x29284:zhòu 0x29285:bào 0x29287:yù 0x2928C:bÄ›ng 0x2928D:mài 0x2928F:jiÄ� 0x29291:yÇŽng 0x29293:kuÇŽ,kù 0x29294:jiào 0x29296:bÇ�ng 0x2929A:luò 0x2929B:guÇ� 0x2929C:duò 0x2929D:zhì 0x292A1:zhèn 0x292A2:è 0x292A3:zhÅ« 0x292A4:bá 0x292A8:zhèn 0x292A9:fÄ“ng,féng 0x292AA:dòu 0x292AB:niÇŽn 0x292AC:bù 0x292AD:duì 0x292AE:shÄ�,suÅ� 0x292AF:sè 0x292B0:bì 0x292B4:zhì 0x292B5:zhé 0x292B6:bù 0x292BA:jué 0x292BB:xùn 0x292BF:xì 0x292C1:zhuó 0x292C2:bài 0x292C3:yáo,táo 0x292C4:chÇ’u 0x292C5:tà 0x292C6:qiÄ�n 0x292C8:nào 0x292C9:yù 0x292CA:è 0x292CB:jiÄ�n 0x292CC:yì 0x292CD:xiÄ�o 0x292CF:niè 0x292D2:bÄ«ng 0x292D7:guÇ’ 0x292D8:xié 0x292D9:diào 0x292DC:jÅ« 0x292DD:suÇ’ 0x292DE:dié 0x292DF:fú,fù 0x292E0:miÇŽn 0x292E1:shì 0x292E2:xuàn,yùn 0x292E3:tí 0x292E4:yù 0x292E7:xié,kài 0x292E8:fú 0x292E9:zhì 0x292EA:nÇ� 0x292EB:xuàn 0x292EC:yáng 0x292EE:fÄ›ng,bÄ�ng 0x292EF:zòng 0x292F0:zhòu 0x292F1:xuÄ�n 0x292F5:zhÅ« 0x292F7:la 0x292F9:yìng 0x292FA:gào 0x292FB:kuò 0x292FD:é 0x292FE:wéi,wÄ›i,xuÄ“ 0x292FF:méi 0x29303:huái,guì 0x29304:chÇ’u,zhÅ�u 0x29306:suÇ’ 0x29307:tà 0x29308:suÇ’ 0x29309:tà 0x2930A:xuè 0x2930C:gÇ’ng 0x2930D:jiÇŽ 0x2930F:bó,fú,bù,fù 0x29310:tà 0x29311:yuÇŽn 0x29318:tà 0x2931D:chuí 0x29320:xiÅ�ng 0x29321:hé,juÄ“ 0x29322:suÅ� 0x29327:mò 0x29328:chóng 0x29329:suÄ« 0x2932A:zé 0x2932B:lù 0x2932C:zhÄ�ng 0x2932D:luò 0x2932E:xù 0x2932F:jiÄ�n 0x29330:shÄ�n 0x29332:xù 0x2933E:jiÇŽng 0x29342:bào 0x29343:mái 0x29345:tóng 0x29346:xì 0x29349:róng 0x2934B:shéng 0x2934C:zhòu 0x2934E:jiÄ�n 0x2934F:fù 0x29350:dèng 0x29353:yÅ�ng 0x29354:jÅ«,qÅ« 0x29356:yì 0x29357:bÄ�ng 0x29359:sè 0x2935A:suì 0x2935C:duó 0x2935D:xiè 0x29361:huán 0x29365:rÇ” 0x29366:nÇ� 0x29367:zhòu 0x29368:guì 0x2936A:luò 0x29372:zhÄ«,chàn 0x29373:xù 0x29375:zhÄ« 0x29377:jué 0x29378:jÅ« 0x2937B:yuán 0x2937C:lú 0x2937F:bó,fù 0x29382:róng 0x29383:xiè 0x29389:xÇ� 0x2938A:luó 0x2938E:gé 0x29391:zuÄ�n 0x29392:hàn,jiÄ�n 0x29394:jiÄ�o 0x29395:sÇŽ 0x29396:qín,qián 0x29397:qÅ«n 0x29398:páo 0x29399:yuè 0x2939A:chè 0x2939B:fú 0x2939C:pÄ“i 0x2939F:mèi,mò,wà 0x293A2:tÄ�o 0x293A4:kÄ“n 0x293A5:xì 0x293AB:duò 0x293AD:yì 0x293B0:suì 0x293B2:xiá 0x293B3:juÄ�n 0x293B5:wéi 0x293B7:yì 0x293B9:yù 0x293BB:bài 0x293BC:tuó 0x293BD:tà 0x293BE:páo 0x293C2:bÇ�ng,bì 0x293C5:yùn 0x293C6:yùn 0x293C7:duàn 0x293C8:ruÇŽn 0x293C9:wéi 0x293CF:wéi 0x293D0:guì,wÄ›i 0x293D2:dá 0x293D3:xiá 0x293D6:hùn 0x293D7:juÇŽn 0x293D8:suÄ« 0x293DA:suì 0x293DD:lóu 0x293DE:bài 0x293DF:yù 0x293E0:zhèng 0x293E1:guì 0x293E3:kuÄ« 0x293E4:gÄ�o 0x293E5:dÄ�n 0x293E9:xiÇŽn 0x293EA:zhái 0x293EB:sè 0x293ED:kÄ“ 0x293EE:bÇ” 0x293EF:bó 0x293F2:suì 0x293F4:yù 0x293F5:bÇ”,bù 0x293F6:jiÅ« 0x293F7:jiÅ«,jiào 0x293F9:juàn 0x293FA:jué 0x293FC:nà 0x293FD:zhái 0x293FE:tÄ�o 0x293FF:wÄ›i 0x29400:xiá 0x29401:xiè 0x29405:sà 0x29406:jÄ« 0x29409:xiè 0x2940C:duì 0x2940D:zÇ� 0x29418:yuÇŽn 0x29419:qìn 0x2941A:fú 0x2941B:péng 0x2941C:páo 0x2941E:yìn 0x29420:hÅ�ng 0x29421:zú 0x29423:gÅ�ng 0x29424:dòng 0x29425:hÄ“ 0x29426:wò 0x29428:pÄ�ng 0x2942B:sù 0x2942C:kÇŽn 0x2942D:niè 0x2942E:háo 0x2942F:fèng 0x29430:è 0x29431:yè 0x29434:tíng 0x29435:dòng 0x29436:zhé 0x29437:sÄ�ng 0x2943B:mò 0x2943C:sù 0x2943E:lè 0x29440:pÇ” 0x29441:é 0x29442:zhuó 0x29443:yè 0x29447:xiÄ�ng 0x29448:guàng 0x29449:rÄ›n 0x2944A:líng 0x2944D:ào 0x29450:chÄ�i 0x29452:duó 0x29453:qióng 0x29454:kÅ«,yà 0x29455:xÅ« 0x29456:huán 0x29457:yÄ�o 0x29458:zhèn 0x29459:tÇ�ng 0x2945A:bÄ›ng,lèi 0x2945D:áng 0x2945F:kÄ�n,qiÄ�n 0x29461:kÅ«,gÄ›n 0x29462:péi,bÄ�i 0x29463:yòu 0x29464:ÇŽo 0x29465:mén 0x29466:mò 0x2946C:fÇ”,guÄ« 0x2946D:qÄ«ng 0x2946E:là 0x2946F:dÇ’u 0x29470:tÇŽn 0x29473:qiÇŽn 0x29474:yào 0x29475:wèi 0x29476:hú,kÅ« 0x29477:mò 0x29478:hÄ“ 0x29479:xuàn 0x2947B:bì,pó 0x2947C:pÅ� 0x2947E:dÄ« 0x29480:zhÄ›n 0x29482:shÄ« 0x29483:kÇŽn 0x29484:cè 0x29487:xÅ« 0x29488:zhÄ›n 0x2948A:zhÇ” 0x2948F:huì 0x29490:chÇ� 0x29493:hÇ’ng 0x29494:nóu 0x29495:niè,pò,è 0x29496:yàn 0x29498:chÇ’ng 0x29499:fÇ”,guì 0x2949A:guÄ�ng 0x2949B:qÄ« 0x2949D:gÄ›n 0x2949E:tÇ�ng 0x294A2:tÇŽn 0x294A3:qiÇŽn 0x294A6:jiù,xìn 0x294A7:xÅ« 0x294A8:qÇ� 0x294AA:zhèn 0x294AE:qiú 0x294B0:Ä› 0x294B3:huì 0x294B4:hòng 0x294B5:qÇ�ng 0x294B7:chÄ“,rÇ’ng 0x294BA:fù 0x294BC:hÅ�ng 0x294BD:xÄ« 0x294BE:wú 0x294BF:máng 0x294C2:tÄ« 0x294C5:hÅ�ng 0x294D0:bó 0x294D2:qÇ�n 0x294D3:gÄ›n 0x294D6:fú 0x294D7:kuÇ� 0x294DD:bié 0x294DE:jìng 0x294DF:kÇŽn 0x294E0:guÄ« 0x294E2:gÇŽo 0x294E3:xÅ« 0x294E4:àn 0x294E5:yuè 0x294E6:wù 0x294E7:yí 0x294E8:jÄ«ng 0x294EA:lù 0x294EB:quán 0x294EC:tuí 0x294EE:jì 0x294FA:jiÇ’ng 0x294FB:jué 0x294FC:piÄ“ 0x294FD:kÅ«n 0x29500:wài 0x29501:huì 0x29502:dùn 0x29503:yuÇŽn 0x29504:jié 0x29506:guì 0x29507:gÇŽo 0x29508:pò 0x29509:mén,mín,hÅ«n 0x2950A:zhuàn 0x2950B:hàng 0x29514:yóng 0x29515:qiú 0x29517:lèi 0x29518:áng 0x29519:pÇ�,xìn 0x2951A:wÄ“ng,wÄ›ng 0x2951D:qìn 0x2951F:qÇ�n 0x29520:miè 0x29521:dÅ�u 0x29522:mí 0x29523:zhÄ�n 0x29525:qÇ�ng 0x29526:yí 0x2952E:bÄ�n 0x29531:juÄ�n 0x29533:zé 0x29534:xù 0x29535:lán 0x29536:má 0x29537:má 0x29538:Å�u 0x29539:bÄ“i 0x2953B:póu 0x2953C:xù 0x29540:ào 0x29546:hÇ’ng 0x29549:hÇ’ng 0x2954A:zhÇŽn 0x2954C:sÄ›n 0x2954D:gÇŽo,háo 0x2954F:pó,fán 0x29550:liào 0x29555:wài 0x29556:xuÄ�n 0x2955C:kuí 0x2955F:è 0x29560:hàn 0x29561:sè 0x29564:dàn 0x2956A:xuÄ�n 0x2956C:è 0x2956D:gài 0x2956F:dÄ�o 0x29571:mÄ›ng 0x29572:yÄ« 0x29573:nÇ�ng 0x29575:pín 0x29579:cÄ�ng 0x2957E:yuàn 0x29580:è 0x29581:niè,yá 0x29584:yÇ�n 0x29587:qiÄ�o 0x29589:hÅ�ng 0x2958A:líng 0x2958C:chÄ�n 0x2958D:yÇ�ng 0x29592:guÄ�n 0x29594:niÇŽo 0x29595:xÅ« 0x29596:tán 0x29597:jìn 0x2959B:péng 0x2959D:liáo 0x295A0:bèi 0x295A3:xín,bá 0x295A4:tún 0x295A5:chÄ�o 0x295A6:gÄ�n 0x295A8:hÅ« 0x295A9:wÇŽng 0x295AC:fú 0x295AD:pèi 0x295AF:náo 0x295B0:xún,xín 0x295B1:xuè 0x295B4:liÇ” 0x295B5:líng 0x295B6:xuè 0x295B7:qÅ« 0x295B8:háo 0x295B9:yí 0x295BA:hàn 0x295BC:fú 0x295BD:bá 0x295BE:yí 0x295C0:bó 0x295C4:hÅ�ng 0x295C5:lì 0x295C9:sà 0x295CA:xÄ« 0x295CE:shì 0x295CF:piÄ�o 0x295D0:huà 0x295D1:yí 0x295D2:bó 0x295D3:bó 0x295D4:nÄ›i 0x295D5:qiú 0x295D8:wÄ›i 0x295D9:chè 0x295DA:yóu 0x295DC:wèi 0x295DD:huÇ� 0x295DE:sà 0x295E2:hòng 0x295E3:sÅ�u 0x295E4:hàn 0x295E5:páo 0x295E7:fáng 0x295E9:liú 0x295EA:zhòu 0x295EB:pí 0x295ED:lì 0x295F0:chuí 0x295F1:xÄ« 0x295F2:zhÄ“ng 0x295F4:bèng 0x295F5:zhÄ“ng 0x295F6:suì 0x295F7:yÇŽn 0x295FC:qÄ«ng 0x295FD:wù 0x295FE:liÇŽng 0x29600:zhào 0x29601:liáng 0x29605:jiÄ“ 0x29607:hÅ�ng 0x29608:yÅ�u 0x2960A:là 0x2960B:hòu 0x2960D:yuàn 0x2960E:hóng 0x2960F:yè 0x29611:yÇ�ng,yÄ«ng 0x29612:xuÇŽn,juÄ�n 0x29613:yóu 0x29618:quán 0x2961C:táng 0x2961D:suÇ’ 0x2961F:lì 0x29620:sÅ�u 0x29621:lì 0x29624:yù 0x29627:yì 0x2962D:xiÅ« 0x2962E:áo 0x2962F:tuán 0x29630:sù 0x29631:shuài 0x29633:yù 0x29635:fÄ“ng 0x29639:sù 0x2963A:tuí 0x2963B:yù 0x2963C:zhÄ“ng 0x2963D:zhÄ“ng 0x2963F:táo 0x29644:liú 0x29646:chéng 0x29647:suí 0x29648:sÄ�o 0x2964F:gÇ” 0x29650:fÄ“ng 0x29651:liè 0x29652:piÄ�o,piào 0x29656:lì 0x29658:lóng 0x29659:chÅ« 0x2965A:xiÄ�o 0x2965B:hÅ�ng 0x2965C:xiè 0x2965D:shè 0x29660:lóng 0x29661:hÅ�u 0x29662:xuán,shÄ« 0x29663:fÄ“ng 0x29665:bá 0x29666:bó 0x29667:táo 0x29668:sù 0x29669:zhào 0x2966A:biÄ�o 0x2966B:sÅ�u 0x2966C:tuí 0x2966D:suÇ’ 0x2966E:xiÄ�o 0x2966F:héng 0x29670:sÄ�o 0x29672:fÄ“i 0x29677:niù 0x29678:mÇŽng 0x2967D:huán,xuÄ�n 0x2967E:zhÄ« 0x29682:yì 0x29684:yù 0x29687:yí 0x29688:yuÄ“ 0x29689:chí 0x29695:yÇ�n,qiÄ�ng 0x29696:niù 0x29697:rÇ’ng 0x2969B:nà 0x296A3:tián 0x296A5:bÄ� 0x296AA:Ä›r 0x296AB:zhÄ“ng 0x296AC:è 0x296AD:póu 0x296AE:jÄ«,nì 0x296AF:ní 0x296B1:jiÇ’ng 0x296B2:jiá 0x296B5:gÄ�n 0x296B9:líng 0x296BB:zuì 0x296BE:bèi 0x296C5:shÅ« 0x296C6:yÇ� 0x296C7:pÄ�i 0x296CB:nÇŽo 0x296CC:shì 0x296CE:mÇŽn 0x296CF:shì 0x296D1:tí 0x296D8:gÅ�ng 0x296DD:lèi 0x296DE:bÇŽo,nÄ›i,piÇŽo 0x296DF:yuÄ�n,mán 0x296E0:zuÅ� 0x296E1:láng,náng 0x296E2:xiÅ« 0x296E5:zài 0x296E6:chèng 0x296E7:jiÄ�n 0x296E8:mào 0x296E9:jiá 0x296EA:yù 0x296ED:yù 0x296EE:yí 0x296F2:mÄ�ng 0x296F3:zài,cÄ�n 0x296F5:zhuì 0x296F6:tí 0x296F9:xì 0x296FA:jú 0x296FB:zàn,zuÇŽn,zhÄ�n 0x296FC:lù 0x296FD:táo 0x29700:zhuì,duÄ« 0x29701:líng 0x29703:jù 0x29706:jÄ« 0x29707:juÇŽn,juàn 0x2970A:zÄ« 0x2970C:yuÄ“ 0x2970D:dÅ�ng 0x29712:nÇŽng 0x29716:chóng 0x2971F:àng 0x29723:gÄ“ng 0x29725:bÅ� 0x29726:dìng 0x29727:wÄ›i 0x2972C:quán 0x2972D:kÄ“ 0x29730:pì 0x29731:kÇŽn,sÇŽn 0x29732:fú 0x29733:yÇ’ng 0x29735:tuán 0x29736:tÇ’u 0x29737:yòu,niù 0x29738:yÄ�o 0x2973A:yÄ“ 0x2973D:yàn 0x29748:xián 0x2974A:tí 0x2974C:suì 0x29750:cí 0x29754:xÇ” 0x29755:wù 0x29756:cÄ�n 0x29757:yù 0x2975A:chÇŽn 0x2975B:xiá 0x2975D:kào,gÄ�o 0x2975E:cÄ�ng 0x2975F:chÄ� 0x29760:qiÇ” 0x29763:dÄ� 0x29765:sù 0x29768:huÄ� 0x29777:wÅ« 0x29778:yuÄ�n 0x2977D:jiàng 0x2977E:xiÇŽng 0x2977F:zhÄ�i 0x29780:sÇŽn,chÄ›n,càn 0x29781:mó,mí 0x29783:shÇŽng,xiÇŽng 0x29784:cáo 0x29785:suÄ« 0x29786:chuáng 0x29787:mí 0x29788:zhú 0x29789:chóng 0x2978A:jì 0x2978B:chóng 0x29799:lián 0x2979E:hài 0x297A4:dÅ«n 0x297A5:xiÇŽng 0x297A6:chÄ“ng 0x297A7:shÇŽng 0x297A8:lì 0x297A9:huáng 0x297AC:dèng 0x297AF:liáng 0x297B6:zÄ� 0x297BA:huò 0x297BB:lín 0x297BE:dú,yì 0x297BF:hàn 0x297C0:yÅ�ng,yÇ’ng 0x297C1:yuàn,xuàn 0x297C2:guò 0x297C3:líng 0x297C5:liÇŽn 0x297C7:ào 0x297C8:dÄ�ng 0x297C9:yì 0x297CA:nóng 0x297CB:shàn 0x297CD:xìn 0x297D0:dá 0x297D1:yù 0x297D2:cÄ�n 0x297D3:wò 0x297D4:chá 0x297D5:bó 0x297D7:jiÇŽn 0x297DE:méng 0x297DF:wÄ›i 0x297E0:mó 0x297E5:shuì,juÇŽn 0x297E6:jié 0x297E7:shuò 0x297E8:huò 0x297EB:chuò 0x297ED:lóng 0x297EE:huài 0x297F0:tuÅ� 0x297F3:yú 0x297F6:chàn,jié 0x297F7:yÅ�ng 0x297F8:huò 0x297FA:lÇŽn 0x297FF:nà 0x29800:bÄ� 0x29801:gÄ�n 0x29802:yÇ� 0x29803:jiá 0x29805:dá 0x29806:dìng 0x29807:xùn 0x29808:rÄ›n 0x29809:juÇŽn 0x2980A:tuán 0x2980B:xÇ” 0x2980C:sòng 0x2980E:cáo 0x2980F:chÄ“ng 0x29811:dÇ�ng 0x2981A:hái 0x2981F:wÇ” 0x29826:qÇ�,shÇ’u 0x29828:jÄ«,qÇ� 0x2982E:kuí 0x2982F:wéi 0x29836:shÇ’u 0x29837:fú 0x29839:tuán 0x2983B:bié,hÄ�n 0x2983D:tán 0x2983E:hÄ�ng 0x2983F:piÄ“ 0x29843:yú 0x29844:tán,xiÄ�ng 0x2984C:xiÄ�ng 0x2984E:xiÅ« 0x29853:wÄ›ng 0x29854:hài 0x29855:péng 0x2985D:tán 0x2985F:bié 0x29860:xiÄ�ng 0x29863:yÇ� 0x29866:piáo 0x29867:huán 0x29868:mÇ” 0x29869:bÄ� 0x2986B:fàn 0x2986F:dÄ«ng 0x29877:fÄ“n,fèi 0x2987A:jiè 0x2987E:suó 0x29884:wàn 0x29885:gÄ“ 0x29888:fÄ“n 0x2988A:tuó 0x2988C:wén 0x2988D:guÄ� 0x2988E:duÅ� 0x29890:zhé 0x29891:cÇ� 0x29892:yÇŽo 0x29894:bàn 0x29895:bù 0x29896:mò 0x29898:pÇ’ 0x2989B:gé 0x2989E:liú 0x298A1:rÇŽn 0x298A8:gÄ�n 0x298AA:hú 0x298AB:móu 0x298AE:xiÅ« 0x298AF:huÄ�ng 0x298B0:fú 0x298B1:huí 0x298B3:qú 0x298B4:jié,jí 0x298B5:tuÅ� 0x298B6:yú 0x298B7:mò 0x298B8:zhÅ�u 0x298B9:jiù 0x298BB:shú 0x298BC:kuÄ�ng 0x298BD:qióng 0x298BE:liè 0x298BF:fù 0x298CA:xù 0x298D6:lìn 0x298D8:niè 0x298DA:pÄ«,bÇ� 0x298DC:fù 0x298DD:bù 0x298DE:yì,sà 0x298E1:bó 0x298E3:é,Ä› 0x298E9:zhé 0x298EB:lì 0x298EE:tù 0x298EF:dá 0x298F1:lù 0x298F2:yÄ�n 0x298F3:dÅ�ng 0x298F4:qiè 0x298F5:wÇŽn,wò 0x298F6:mÇ�ng 0x298F7:zuÄ«,zhù 0x298F8:fù 0x298F9:qÅ« 0x298FA:bÄ“n 0x298FB:ÇŽo 0x298FC:qiÄ�ng 0x29901:qÅ«n 0x29908:què 0x29909:huá,táo 0x2990A:xiàn,jiàn 0x2990B:kùn 0x2990F:cuì 0x29912:yí 0x29916:chÄ«,ér 0x29917:zòng 0x29918:nÇŽo 0x29919:chéng 0x2991A:duÄ�n 0x2991B:yóng 0x2991C:zhÄ› 0x2991E:tàn 0x2991F:yáng 0x29920:xié 0x29921:xuÄ�n 0x29923:duàn 0x29924:shuÇŽ 0x29925:xián 0x29926:xián 0x29929:é 0x29932:lÄ� 0x29938:wèi 0x29939:yÅ�u 0x2993A:yú 0x2993D:tÄ« 0x2993F:jÄ«n 0x29941:táng 0x29942:qí 0x29944:diÄ�n 0x29945:tÄ�o 0x29946:lÇœ 0x29947:zhàn 0x29948:wÄ“n 0x29949:jì 0x2994A:Ä�o,jiÄ�o 0x2994B:òu,dú 0x2994C:qià 0x29950:shÄ« 0x29951:tÇŽ 0x29954:mò 0x29958:yóu 0x29960:zhá 0x29963:yáo 0x2996B:chÅ�ng 0x2996C:lí 0x2996D:yú 0x2996E:chÇŽn 0x2996F:yÄ« 0x29972:chì 0x29974:lí 0x2997D:tú 0x2997F:zú 0x29982:xián 0x29987:xì 0x29989:bié 0x2998A:hán,qiÄ�n 0x2998B:qí 0x2998C:sÄ�ng,shuÄ�ng 0x2998E:fÄ“i,fÄ›i 0x29990:shàn,huÅ� 0x29998:huÄ�n 0x299A0:bàng 0x299A1:yú 0x299A2:yú 0x299A4:jí 0x299B1:kuÇŽi 0x299B2:zÅ�ng 0x299B9:xiàn 0x299BA:méng 0x299C3:lì 0x299C4:zhì 0x299C5:fán 0x299C6:liè,là 0x299C7:cài 0x299C8:dú 0x299C9:guÄ�ng 0x299CA:xiòng 0x299CB:lí 0x299CC:qì 0x299CF:jué 0x299D0:tuÅ� 0x299D2:jù 0x299D3:xiÄ�o 0x299D8:qú 0x299DC:zhuÇŽn 0x299E1:jué 0x299E6:jiè 0x299E8:zhòu 0x299E9:xiàn 0x299EA:lóng 0x299EB:yÇŽng 0x299EC:rÇŽn 0x299ED:yì 0x299EE:liè 0x299EF:bÅ� 0x299F0:hún 0x299F1:jì 0x299F2:dòng 0x299F3:zhÅ�u 0x299F4:quÄ�n 0x299F5:jié 0x299FA:jú 0x299FC:bÄ“n 0x299FF:bÄ« 0x29A00:gé 0x29A01:chÇ”n 0x29A03:qián 0x29A04:sÅ�u 0x29A05:wèi 0x29A06:chéng 0x29A07:lóu 0x29A08:yú 0x29A09:lÄ� 0x29A0A:qián 0x29A0B:diÄ�n 0x29A0C:tÇŽ 0x29A0D:zhàn 0x29A0F:fán 0x29A10:liè 0x29A11:tÄ«ng 0x29A12:jÄ« 0x29A13:qiÄ�n 0x29A14:hú,huá 0x29A17:yú 0x29A18:qì,gÄ“ 0x29A19:yú 0x29A1A:wÄ� 0x29A1C:bà 0x29A1D:qí 0x29A1E:sÇŽ 0x29A1F:qiÄ�o 0x29A20:yà 0x29A21:xiÇŽn,sÇŽn 0x29A28:cÄ« 0x29A29:fàn 0x29A2B:kÇ”n 0x29A2C:gÇ”n 0x29A2D:quÄ“ 0x29A2E:è 0x29A2F:qióng 0x29A32:mà 0x29A33:kÅ«,dÅ« 0x29A34:yÇŽo 0x29A37:quÄ“ 0x29A38:chÅ« 0x29A39:jiÇŽ 0x29A3B:zhÇ” 0x29A3D:duÄ« 0x29A3E:wá 0x29A40:nÇŽo 0x29A44:yán 0x29A45:tóng 0x29A4B:xíng,jìng 0x29A4C:gÇ”n 0x29A4D:pÄ«ng 0x29A51:yÇ” 0x29A52:hè 0x29A54:zhuó 0x29A57:shÄ“ 0x29A58:yÇ” 0x29A5B:jì 0x29A5D:qiÄ�ng 0x29A5E:shuì 0x29A5F:chuò 0x29A60:zú 0x29A61:léng 0x29A62:ní 0x29A64:wÄ� 0x29A65:zhá 0x29A67:dàn 0x29A6E:dù 0x29A6F:biàn 0x29A70:jiÄ“,hái 0x29A71:qià 0x29A72:hé 0x29A73:chòng 0x29A74:yán 0x29A76:yàn 0x29A7A:sóng 0x29A7B:téng 0x29A7C:yÇŽo 0x29A7E:kÄ�o 0x29A80:zhuÄ« 0x29A81:guì 0x29A82:ái 0x29A83:hài 0x29A88:suÇ’ 0x29A89:xù 0x29A8A:biÄ�o 0x29A8C:fèng 0x29A8D:qÅ«,shÅ« 0x29A8E:mÇŽng 0x29A90:guó 0x29A96:bì 0x29A97:jué 0x29A98:chuáng 0x29A9B:pú 0x29A9F:yì 0x29AA2:qiÄ�n 0x29AA3:yì 0x29AA4:è 0x29AA5:líng 0x29AA7:bì 0x29AAD:huò 0x29AAE:mÇ’,mó 0x29AB1:xÅ«n 0x29AB4:yàn 0x29AB8:lì 0x29ABA:tán 0x29ABE:luán 0x29AC0:kài 0x29AC1:mào 0x29AC2:xiÄ�o 0x29AC7:ÇŽi 0x29ACA:tÇŽ 0x29ACD:mèi 0x29ACF:guÅ�,yÅ�ng 0x29AD3:gÇŽo 0x29AD4:náo 0x29AD5:háo 0x29AE0:quÄ“ 0x29AE5:cáo 0x29AE6:sào 0x29AEB:pí 0x29AF2:xiÄ“ 0x29AF3:xiÄ�o 0x29AF4:jú 0x29AF9:chéng 0x29AFA:nÇŽo 0x29B00:nèi 0x29B0D:mÇ” 0x29B0F:shÄ�o 0x29B11:diÄ�n,chÄ�n 0x29B14:líng 0x29B16:zhÄ›n 0x29B17:yÇŽo 0x29B19:fù,fÅ« 0x29B1A:qián,gàn 0x29B1B:qióng 0x29B1C:jú 0x29B1D:bìng,fÇŽng 0x29B1E:máo,mán,mián 0x29B1F:zhà 0x29B20:tÄ�i 0x29B24:chÅ�ng 0x29B2B:zhÇŽi 0x29B2D:shÄ« 0x29B2E:yòng 0x29B30:qióng 0x29B31:dào 0x29B32:tì 0x29B33:zhuÇ� 0x29B35:yìn 0x29B37:nÇŽo 0x29B38:bÅ� 0x29B39:kuÄ�ng 0x29B3A:zhÇ� 0x29B3B:duÇ’ 0x29B3C:cÅ�ng 0x29B3D:bÇŽo 0x29B47:lí 0x29B4A:jú 0x29B4B:wén,kÅ«n 0x29B4C:liè 0x29B4F:wÇ’ 0x29B50:shÇ� 0x29B51:niÇŽo 0x29B52:máng 0x29B53:jiÅ« 0x29B58:xiÅ« 0x29B5D:wÇ’ 0x29B5F:dào 0x29B61:xÄ« 0x29B62:àn 0x29B63:dá 0x29B64:zÇ’ng,zÅ�ng 0x29B65:hàn 0x29B66:chuí 0x29B67:bÄ«,bÄ�n 0x29B69:dòng 0x29B6B:zhÇŽng 0x29B6F:yÄ� 0x29B72:dí 0x29B73:huÅ� 0x29B77:mín 0x29B7A:fù 0x29B7C:bÇŽo 0x29B7D:kè 0x29B7E:máo 0x29B7F:rè 0x29B80:zÅ�ng,zÇ’ng,sÅ�ng 0x29B81:qià 0x29B82:xiÄ� 0x29B83:sÅ�u 0x29B84:xiÅ« 0x29B85:nà 0x29B89:mán,mián 0x29B8E:zhÄ� 0x29B8F:chán 0x29B90:shè 0x29B91:wÇ’ 0x29B96:ái 0x29B97:bàng,péng,fÇŽng 0x29B98:hÄ�o 0x29B9A:sÄ�o 0x29B9B:suÇ’ 0x29B9C:tì 0x29B9D:yà 0x29B9F:bìng 0x29BA0:róng 0x29BAB:shÄ� 0x29BAC:wÄ›ng 0x29BAF:áo 0x29BB1:zhuÄ�ng 0x29BB3:piào,piÇŽo,piÄ“ 0x29BB4:suÄ«,cuÇ� 0x29BB5:yÄ« 0x29BB6:sÅ�u 0x29BB7:dÅ�u 0x29BB8:sÅ�u,nà 0x29BB9:luó 0x29BC3:fèi,bì 0x29BC4:zùn 0x29BC6:nào 0x29BC7:dÄ“ng 0x29BC8:zhí 0x29BC9:cuÅ� 0x29BCA:liáo 0x29BCB:jÇ� 0x29BCC:bÅ� 0x29BCD:cóng 0x29BCE:chéng 0x29BCF:bÇ” 0x29BD1:sÄ�n 0x29BD2:zàn 0x29BD8:jiào 0x29BDB:yào 0x29BDC:lÇ” 0x29BDE:càn 0x29BE8:nÇ� 0x29BF0:jié,jì 0x29BF1:pú 0x29BF2:zhuàng 0x29BF3:zàn,zuÇŽn,zÄ� 0x29BFA:lì 0x29BFD:là 0x29C00:chÅ�ng 0x29C03:zhàn 0x29C0D:biàn 0x29C0E:wÄ“ng 0x29C13:hòng 0x29C17:pÄ«n 0x29C19:sè 0x29C1E:nÇ� 0x29C1F:fÄ“n 0x29C20:xÇ” 0x29C22:shÇ� 0x29C24:jù 0x29C28:jué 0x29C2A:yù 0x29C2C:guÅ�,wÄ�i 0x29C2D:guÅ� 0x29C2F:hú 0x29C32:lì,fèi 0x29C33:xié 0x29C34:ér 0x29C35:yuán 0x29C36:hái,bèn 0x29C39:jìng 0x29C3B:kè 0x29C3D:zÅ�ng 0x29C3E:fèi 0x29C40:pÄ“ng 0x29C41:gÄ“ng 0x29C43:jiÄ�n 0x29C44:ní 0x29C46:xián 0x29C47:lì 0x29C48:chÇŽo 0x29C4A:ér,xiàn 0x29C4B:gÄ“ng,pÄ“ng 0x29C4C:yù 0x29C4D:hú 0x29C4E:fèi 0x29C4F:áo 0x29C53:Ä›r 0x29C58:kè 0x29C59:kù 0x29C5A:bó 0x29C5D:yè 0x29C5E:jiào 0x29C66:chÇŽo 0x29C67:gÄ“ng 0x29C68:rù 0x29C6A:yuè 0x29C6C:lín 0x29C71:yù 0x29C72:yuè 0x29C73:zhÄ�i 0x29C74:xiÄ�o 0x29C77:miè 0x29C7B:guÇ� 0x29C7C:jiÅ« 0x29C7E:tuò 0x29C81:xí 0x29C82:wÄ›i 0x29C83:zhuó 0x29C84:wèi 0x29C85:kuí 0x29C88:mèi,wéi 0x29C8A:hào 0x29C8B:hÄ�ng 0x29C8C:fÄ�ng 0x29C8D:niú 0x29C8E:yòu 0x29C8F:huà 0x29C92:làng 0x29CA0:zhú 0x29CA1:guÇ� 0x29CA2:bì,mèi 0x29CA3:jiÇŽ 0x29CA4:tiáo 0x29CA6:lÇœ 0x29CA7:kÇ’ng 0x29CA8:zuÇ� 0x29CA9:líng 0x29CAA:qí 0x29CAC:zhú 0x29CB1:gÇ” 0x29CB2:zù 0x29CB4:yÄ�ng 0x29CB5:sÅ« 0x29CB7:kuí 0x29CB9:chÄ�ng 0x29CBB:yáo 0x29CBE:yù 0x29CC5:shÅ« 0x29CC6:lài 0x29CC7:yì 0x29CC8:dÅ�u 0x29CCC:wú 0x29CCD:yÇ�ng 0x29CCE:fú 0x29CCF:zhuàn 0x29CD0:fÇ” 0x29CD2:sù 0x29CD3:lÇ� 0x29CD4:yào 0x29CD5:tuì,tì 0x29CDD:guì 0x29CE1:lÇœ 0x29CE2:yàn 0x29CE3:qí 0x29CE4:làng,chÄ�ng 0x29CE5:zhú 0x29CE7:guÇ� 0x29CE8:hÅ« 0x29CEF:jÄ«ng 0x29CF2:chÇ� 0x29CF5:jú 0x29CF6:zhá 0x29CF8:miáo 0x29D00:zhÅ« 0x29D01:gÄ�n 0x29D02:xiÅ�ng 0x29D03:jí 0x29D07:shài 0x29D08:mèi 0x29D09:yùn 0x29D0D:shòu 0x29D10:lÇœ 0x29D11:yòu 0x29D12:jiàng 0x29D13:nuó 0x29D18:jù 0x29D19:yòu 0x29D1C:yì 0x29D1D:téng 0x29D1E:wéi 0x29D1F:chÄ› 0x29D20:lìn 0x29D21:gù 0x29D23:lì 0x29D24:liào 0x29D27:jiÄ�o 0x29D28:yáng 0x29D29:biÄ�o 0x29D2A:qí 0x29D2E:yì 0x29D31:bÄ«n 0x29D32:méng 0x29D33:chà 0x29D35:gÄ�n 0x29D39:qú 0x29D3A:dí 0x29D3B:léi 0x29D40:líng 0x29D44:huÄ�n 0x29D45:qú 0x29D47:luó 0x29D49:kuí 0x29D4D:qiú 0x29D4E:yÇ”,yú 0x29D4F:huà 0x29D53:lèi 0x29D55:rèn,dÄ�o 0x29D56:xiÇŽo 0x29D57:sì 0x29D5A:dù 0x29D5B:biÄ“ 0x29D60:niú,wÄ›i 0x29D62:hè,zÄ� 0x29D63:pÄ“i 0x29D65:fèi 0x29D66:mù 0x29D69:fÅ« 0x29D6C:hú 0x29D6D:wáng 0x29D6E:shÄ�,xiÇŽo 0x29D70:jiÄ�o,qiÅ« 0x29D71:wÇ” 0x29D79:fù 0x29D81:bÇ�ng 0x29D82:zhù 0x29D84:zhú 0x29D85:chÄ« 0x29D87:shÄ›n 0x29D88:hÅ« 0x29D89:bÅ« 0x29D8E:rÇŽn 0x29D96:mù 0x29D98:lì 0x29D9B:jiÄ� 0x29D9E:mà,háng 0x29DA1:méng 0x29DA2:móu 0x29DA3:zhÅ�u 0x29DA4:xiÇŽn 0x29DA5:huÇ�,hóng 0x29DA6:guài 0x29DA7:jiù 0x29DA9:mù 0x29DAB:rù,xuè 0x29DAD:wú 0x29DAF:rú 0x29DB1:zhà 0x29DC1:nuÇ’ 0x29DC2:xié 0x29DC4:jiàng 0x29DCB:lÇ� 0x29DCC:shÅ« 0x29DCD:yì 0x29DCE:dí 0x29DCF:qíng 0x29DD0:jú 0x29DD3:zhì 0x29DD5:láng 0x29DD6:bù 0x29DD7:kuáng 0x29DD8:yì 0x29DDA:bó 0x29DE7:chì 0x29DED:jiàng 0x29DEF:wò 0x29DF0:xùn 0x29DF5:tÅ«n 0x29DF6:máng 0x29DF8:fáng 0x29DF9:zhuó 0x29DFB:qià 0x29DFD:tÇŽ 0x29DFE:qí 0x29E00:pèng 0x29E01:biÄ“ 0x29E02:fèn,pèn 0x29E03:tù 0x29E04:huà 0x29E07:è 0x29E0B:è,yÄ� 0x29E0E:dìng 0x29E10:rú 0x29E16:è 0x29E1E:yàn,qí 0x29E1F:sì 0x29E25:yíng 0x29E26:ní 0x29E27:ní 0x29E28:yí 0x29E39:mí 0x29E3E:yé 0x29E3F:pÅ� 0x29E40:còu 0x29E42:wèi 0x29E44:hài 0x29E45:yÄ«ng 0x29E47:tíng 0x29E48:zhì 0x29E49:fÄ“i 0x29E4A:yóu 0x29E4D:kuí 0x29E4E:àn 0x29E4F:bà 0x29E51:hàn 0x29E5E:nán 0x29E5F:nài 0x29E62:jÄ«ng 0x29E65:wÄ“i 0x29E71:chù 0x29E73:suÇ’ 0x29E74:tÄ�o 0x29E75:qí 0x29E76:táng 0x29E77:wÄ›i 0x29E78:gÇŽn 0x29E7A:gé 0x29E7C:hàn 0x29E7E:nà 0x29E7F:gé 0x29E84:zhÄ“ng 0x29E97:tÇŽ,dá 0x29E9B:sÄ« 0x29E9D:nì 0x29E9E:sÇŽng 0x29EAB:xié 0x29EAF:zú 0x29EB0:yú,wú 0x29EB1:nì 0x29EB2:qÄ« 0x29EB5:shÄ“n 0x29EBC:bÅ« 0x29ECB:kÅ«n 0x29ECC:lí 0x29ECE:guÄ� 0x29ED6:yÇŽn 0x29ED7:bù 0x29ED8:jiàn 0x29EDA:wú 0x29EDB:cén,jÄ«n 0x29EDC:lín 0x29EDD:zhuàn 0x29EDF:huÄ« 0x29EE1:tóng 0x29EE2:zhÇŽ 0x29EE4:hÄ“i 0x29EE7:guÇ’ 0x29EF1:jÇ�ng 0x29EF5:dié 0x29EF7:yíng 0x29EFC:zhì 0x29F02:wÄ›i 0x29F04:jì 0x29F05:rÇ’ng 0x29F08:ào,yÇ’u 0x29F09:dÄ�ng,hÄ�n 0x29F0A:luó 0x29F0B:yè 0x29F0C:wÄ“i 0x29F12:qiáng 0x29F19:gé 0x29F1A:jì 0x29F26:zòu 0x29F28:yí 0x29F2B:zhÇŽ 0x29F2D:liè 0x29F34:yè 0x29F3C:zhÄ�n 0x29F40:chóu 0x29F41:biÄ�o 0x29F46:xù 0x29F47:yÅ�u 0x29F4D:xiè 0x29F4E:wéi 0x29F4F:lì 0x29F5B:bó 0x29F5C:jiÇŽn 0x29F5D:chán 0x29F5E:kÅ«n 0x29F61:qíng 0x29F67:shuÄ�ng 0x29F68:xÄ« 0x29F69:qú 0x29F70:luó 0x29F73:dÇŽng 0x29F74:nián 0x29F75:lÇ� 0x29F77:bà 0x29F79:è 0x29F7A:fÅ« 0x29F7B:fù 0x29F7C:hÇ”n 0x29F7D:zhà 0x29F7E:Ä�n 0x29F81:qiú 0x29F82:chóu 0x29F83:miÇŽn 0x29F84:xùn 0x29F85:tù 0x29F86:ní 0x29F87:hu 0x29F88:shÅ« 0x29F8A:xÅ« 0x29F8B:zhòng 0x29F8C:kÄ�ng 0x29F92:xiÄ�o 0x29F93:xiÄ�o 0x29F94:cì 0x29F95:chì 0x29F97:diÄ�o,jiÄ�o 0x29F98:yì 0x29F9A:dÄ«ng 0x29F9D:hàn,yàn 0x29F9E:wán 0x29FA0:yÇ� 0x29FA1:bào 0x29FA2:yì,yuÄ�n 0x29FA7:xùn 0x29FAC:xiáng 0x29FB3:bí 0x29FB6:jié 0x29FB7:gÄ“ 0x29FB8:zè,yàn 0x29FBA:zhèn 0x29FBB:hú 0x29FBC:xÄ« 0x29FBD:xÄ«n 0x29FBE:xiÄ�o,jiÄ�o 0x29FBF:fù 0x29FC0:zhòng 0x29FC2:mào 0x29FC3:xÄ«n 0x29FC4:qiÄ�ng 0x29FC8:fén,fÄ“n 0x29FC9:bÄ�n 0x29FCA:huÄ�n 0x29FD1:jiÄ�o 0x29FD3:bào 0x29FD4:yÄ� 0x29FD5:yáo 0x29FDB:xì 0x29FDD:jù 0x29FDF:qù 0x29FE0:yuè 0x29FE1:tái 0x29FE2:tÇ’u 0x29FE3:mò 0x29FE4:zhá 0x29FE5:qú 0x29FE7:fÅ« 0x29FE9:qú,duó 0x29FEA:chì 0x29FEC:yóu 0x29FF7:tí 0x29FFA:wÄ� 0x29FFD:tuó 0x29FFF:chú 0x2A001:gÄ“ 0x2A008:yuÄ�n 0x2A009:gÄ“,kÄ› 0x2A00A:qú 0x2A00F:jù,jiÅ« 0x2A012:dié 0x2A013:yí 0x2A014:shÄ« 0x2A015:yì 0x2A017:guÇ� 0x2A018:jiàng 0x2A01A:sÅ�ng 0x2A01B:qióng 0x2A01D:è,yuÄ�n 0x2A01E:huÄ�ng 0x2A01F:huí 0x2A020:xún 0x2A023:jú 0x2A025:zhái 0x2A026:chì 0x2A027:lÇŽo 0x2A029:qí,dàn,chú 0x2A02A:xiÅ« 0x2A02C:huÄ« 0x2A02D:tóng 0x2A03A:fù 0x2A03D:xún,xÄ«n 0x2A03E:jié 0x2A03F:mÇ� 0x2A040:yù 0x2A048:zhuÄ�ng,zhuàng 0x2A049:jiÄ�o 0x2A04A:zhì,zhé 0x2A04B:chéng 0x2A04D:jié 0x2A04E:xiÄ�o 0x2A04F:chén 0x2A050:lí 0x2A051:yuè 0x2A053:zhì 0x2A054:láo 0x2A055:wò 0x2A056:qú 0x2A058:wÄ�ng 0x2A05A:yÄ« 0x2A05B:yì 0x2A05C:láng 0x2A05E:tóu 0x2A05F:Ä�n,hàn 0x2A060:jué 0x2A061:yàn 0x2A065:jù 0x2A067:zhèn,chén 0x2A069:zhì,tí 0x2A06A:mÇŽng 0x2A06E:xiù 0x2A071:chuáng 0x2A072:chÅ« 0x2A078:qiÄ�ng 0x2A079:fÄ“i 0x2A07A:cháng,chÇŽng 0x2A07C:mián 0x2A07D:sù 0x2A07E:ÇŽo,wò 0x2A080:fÇ” 0x2A084:wèi 0x2A085:zhÄ« 0x2A086:mín 0x2A087:chÄ�ng 0x2A088:yán 0x2A089:yù 0x2A08B:fù 0x2A08C:tà 0x2A08D:jÇ� 0x2A08F:fèi 0x2A092:hú 0x2A093:jÅ« 0x2A095:yÇ” 0x2A09B:qí 0x2A09C:méi 0x2A09F:biÄ“ 0x2A0A0:guÇ’ 0x2A0A4:mìng 0x2A0A6:wÇŽn,yuÄ�n 0x2A0A7:wÇŽn 0x2A0B4:jÄ«ng 0x2A0B5:yù 0x2A0B6:xián 0x2A0B9:chÅ«n 0x2A0BA:jí 0x2A0BC:xiÄ�ng 0x2A0BD:pén 0x2A0BE:fù 0x2A0C2:liú 0x2A0C4:sÄ�i 0x2A0C5:xuÄ“ 0x2A0C6:zòu 0x2A0C8:jié 0x2A0CB:zhÄ�n,jiÄ�n 0x2A0CD:yú 0x2A0CE:yú 0x2A0CF:méi 0x2A0D0:miÇŽo 0x2A0D1:mào 0x2A0D2:duó 0x2A0D3:fù 0x2A0DB:jiàn 0x2A0E6:miáo 0x2A0E8:Ä�o 0x2A0ED:kè 0x2A0F6:hóu 0x2A0FA:gòu 0x2A0FC:xÄ« 0x2A0FE:róng 0x2A0FF:gÄ“ 0x2A100:pán 0x2A101:yuán 0x2A102:xià 0x2A105:shÄ� 0x2A106:pÄ«,pí 0x2A108:qíng 0x2A109:yÅ�ng 0x2A10A:qú 0x2A10C:gòng 0x2A10E:gé 0x2A10F:xiÄ�n 0x2A111:sù 0x2A115:bÄ�n 0x2A116:qí 0x2A117:hòu 0x2A11B:xÄ« 0x2A11D:wÅ« 0x2A12D:qÄ« 0x2A12E:hù,gù 0x2A12F:guÄ« 0x2A131:dí 0x2A132:shÄ�ng 0x2A133:mài 0x2A134:mÇ�n 0x2A135:jì 0x2A136:xí 0x2A137:xiÄ�n 0x2A138:jí 0x2A139:cháng 0x2A13A:kòu 0x2A13B:chÅ�ng,zhuÄ�ng 0x2A142:zhÄ�ng 0x2A143:piÇŽo,piÄ�o 0x2A144:sù 0x2A145:lüè 0x2A146:lí 0x2A147:mèng 0x2A148:chÅ�ng 0x2A149:tiÄ�n 0x2A14B:líng 0x2A14D:chì 0x2A156:chÅ�ng,zhuÄ�ng 0x2A159:chì 0x2A15D:niÇŽo 0x2A15F:yóng 0x2A16E:mì 0x2A170:shÅ« 0x2A172:xì 0x2A174:è 0x2A175:zÄ« 0x2A178:jié 0x2A179:jÄ« 0x2A17A:hÅ�u 0x2A17B:shèng 0x2A17C:lì 0x2A17E:qÄ« 0x2A180:zhÅ�u 0x2A181:sÄ« 0x2A182:qú 0x2A18B:xié 0x2A197:sÄ« 0x2A19B:xÅ« 0x2A1A0:fù 0x2A1AF:nóng 0x2A1B0:yà 0x2A1B1:liú 0x2A1B2:jiÇŽ,zhÄ�n 0x2A1B3:guÄ« 0x2A1B4:kuí 0x2A1B5:chì 0x2A1B6:càn 0x2A1B7:chú 0x2A1B9:guÅ� 0x2A1BB:dÇŽn 0x2A1BF:jiàn 0x2A1C1:dÄ�ng 0x2A1C2:hòu 0x2A1C4:kòu,kÅ« 0x2A1C6:chù,dú 0x2A1C7:qiÄ�n 0x2A1C8:ài 0x2A1CA:pì 0x2A1D1:xùn 0x2A1D2:jÄ«ng 0x2A1D3:mèng 0x2A1D5:bÄ«n 0x2A1D6:lán 0x2A1D7:gÇ” 0x2A1D8:chóu,táo 0x2A1DB:yÅ�ng 0x2A1DC:guá 0x2A1DD:yú 0x2A1DE:zhòu 0x2A1ED:cài 0x2A1EF:liú 0x2A1F0:bÇ” 0x2A1F1:luò 0x2A1F2:jié 0x2A1F3:zhÄ“n 0x2A1F4:miè 0x2A1F5:guÇŽng 0x2A1F7:jiá 0x2A1F9:là 0x2A200:shòu 0x2A203:guÅ� 0x2A206:mèng 0x2A207:qián 0x2A208:lài 0x2A20A:hé 0x2A20B:tuán 0x2A211:huÄ« 0x2A218:hÅ�ng 0x2A21C:lÇš 0x2A21F:jiá 0x2A225:guÄ« 0x2A228:yÄ« 0x2A229:huÄ�n 0x2A230:luó 0x2A234:jué 0x2A238:guàn 0x2A23B:quán 0x2A23C:niÇŽo 0x2A23F:mán 0x2A242:yùn 0x2A243:wén 0x2A244:chì 0x2A245:chì 0x2A246:zhÄ« 0x2A248:cí 0x2A249:zhuàng 0x2A24A:huá 0x2A24B:jié 0x2A24C:qú 0x2A24D:tÅ« 0x2A24E:mín 0x2A24F:méi 0x2A250:yú 0x2A251:áo 0x2A252:bÄ�n 0x2A254:pÄ« 0x2A255:zhÄ“n 0x2A256:lÇ” 0x2A257:chì 0x2A258:tóu 0x2A25A:jiÄ“ 0x2A25C:zhÄ�n 0x2A262:jÄ«n 0x2A263:lÇ” 0x2A266:jiàn,jiÇŽn,gàn 0x2A267:tàn 0x2A268:chÄ�ng 0x2A26A:cì 0x2A26D:wÄ�i 0x2A26E:còu 0x2A26F:kàn 0x2A271:biàn 0x2A278:wÄ“n 0x2A27B:qiÄ�n 0x2A27F:gàn 0x2A282:huì 0x2A284:gÇŽn,gàn 0x2A286:jì 0x2A287:gàn,tàn 0x2A289:huái 0x2A28D:sì 0x2A290:fÅ« 0x2A295:pí 0x2A297:cÄ� 0x2A29C:bèn 0x2A2A2:shí,shÇ� 0x2A2A5:huán 0x2A2A7:guÄ« 0x2A2AA:Ç’u 0x2A2B3:páo 0x2A2B5:yÇ�ng 0x2A2B6:tÇ�ng 0x2A2B7:xiào 0x2A2B9:zhù 0x2A2BB:yú 0x2A2C1:jiàn 0x2A2C4:qÇ” 0x2A2C5:wÇŽn 0x2A2C6:kÅ«n 0x2A2C7:zhuÄ« 0x2A2C9:yù 0x2A2CA:guÇ’ 0x2A2CB:píng 0x2A2CC:zuÇ� 0x2A2CD:zú 0x2A2CF:zhÅ« 0x2A2D0:nuàn 0x2A2D1:zhÅ« 0x2A2D6:piÄ�o 0x2A2D7:mí 0x2A2DC:bì 0x2A2DD:sù 0x2A2E1:pú 0x2A2E2:mí 0x2A2EB:yè 0x2A2EC:yÇ” 0x2A2EE:yù 0x2A2F0:zhÇ” 0x2A2F3:líng 0x2A2FA:nòu 0x2A2FE:líng 0x2A300:liÇŽo 0x2A302:tuÅ� 0x2A304:bÇ� 0x2A305:nà 0x2A306:qú 0x2A308:pí 0x2A309:dÇ’u 0x2A30A:niè 0x2A30B:tún 0x2A30D:jÄ« 0x2A30F:líng 0x2A313:kù 0x2A314:sù 0x2A318:tÇ’u 0x2A31E:nái 0x2A31F:zé 0x2A322:tÇ’ng 0x2A323:gé 0x2A324:duÄ« 0x2A327:jié 0x2A329:tián 0x2A32A:tiào 0x2A32B:chí 0x2A32C:qÅ«,chÇŽo 0x2A32E:shÄ�,suÅ� 0x2A330:bó 0x2A331:lí 0x2A333:luò 0x2A335:liáo 0x2A336:shù 0x2A337:dÄ›ng 0x2A339:chÄ« 0x2A33A:miè 0x2A33C:táo 0x2A33D:hún 0x2A33F:nié 0x2A341:jùn 0x2A342:hù 0x2A344:lù 0x2A345:yè 0x2A347:mò,chÇŽo,mài 0x2A348:chào 0x2A34C:suò 0x2A34E:kÄ“ 0x2A34F:fù 0x2A351:chÇŽo 0x2A354:suÇ’ 0x2A357:qiÅ« 0x2A35B:sù,xiè 0x2A35D:yùn 0x2A35F:suÇ’ 0x2A360:kÅ« 0x2A361:bó 0x2A363:lÇ’u 0x2A364:mò 0x2A366:liÇŽn 0x2A367:xuàn 0x2A368:suÇ’ 0x2A369:mán 0x2A36A:bì 0x2A372:tì 0x2A374:lián 0x2A375:tán 0x2A376:shàn 0x2A378:qú 0x2A379:dú 0x2A37A:huán,huàn 0x2A37B:sào 0x2A37F:kuàng 0x2A383:niè 0x2A385:niè 0x2A386:luó 0x2A387:zuó 0x2A388:yì 0x2A389:xiàn 0x2A38A:chÇŽo 0x2A38B:tiè 0x2A392:shuò 0x2A394:mÇ� 0x2A397:mí 0x2A39B:wÇŽn 0x2A39D:bèn 0x2A39E:qiÄ�ng 0x2A3A0:mÇ’ 0x2A3A3:liú 0x2A3A4:wò 0x2A3A6:mÄ›i 0x2A3A8:tóu 0x2A3AB:mÇ” 0x2A3AD:méi 0x2A3B2:zuò 0x2A3B4:tún 0x2A3B5:kàng 0x2A3B6:tún 0x2A3BA:chè 0x2A3BB:zhèng 0x2A3BD:chÅ�ng 0x2A3BE:tiÄ�n 0x2A3C0:zhì 0x2A3C1:chán 0x2A3C2:chán 0x2A3C5:qÄ«ng 0x2A3C6:tÅ«n 0x2A3C7:huÇ� 0x2A3C8:què 0x2A3C9:zhÄ�n 0x2A3CA:jiÄ�n,miÇŽn 0x2A3CB:chán 0x2A3CD:huáng 0x2A3CF:huÄ« 0x2A3D0:chí 0x2A3D2:huáng 0x2A3D3:héng 0x2A3D4:yÇ”n 0x2A3D6:tuÄ�n 0x2A3D7:biÄ�n 0x2A3D9:huáng 0x2A3DA:yÇ”n 0x2A3DF:mò 0x2A3E0:gÅ�ng 0x2A3E2:gÅ�ng 0x2A3E4:guì 0x2A3E6:chán 0x2A3E8:què 0x2A3E9:ruì 0x2A3EA:kuàng 0x2A3EB:piào 0x2A3EE:rÇ” 0x2A3F2:niÇ” 0x2A3F3:hù 0x2A3F4:jÇ�n 0x2A3F5:nì,lí 0x2A3F6:bào 0x2A3F8:nÇ�,chÄ« 0x2A3FA:bì 0x2A3FB:hú 0x2A3FC:lí 0x2A3FF:zhÅ« 0x2A400:nÇŽ 0x2A402:quÇŽn 0x2A403:fÄ›ng 0x2A404:bÇ� 0x2A405:lí 0x2A406:bié 0x2A407:nián 0x2A408:dÇ’ng 0x2A40B:lián 0x2A40C:nì 0x2A40D:lián 0x2A40E:má 0x2A40F:zhé,zhí 0x2A413:jiÄ� 0x2A414:yí 0x2A416:lÇ’ng 0x2A418:yì,yÄ�n 0x2A41D:dài,tài 0x2A41E:dù 0x2A423:yÇ� 0x2A425:tài 0x2A426:hÄ�ng 0x2A427:shù 0x2A42C:wán 0x2A42E:sù 0x2A42F:yÇŽo 0x2A430:èr 0x2A432:zhèn 0x2A43A:dòu 0x2A43B:jiÄ�n 0x2A43F:pÄ�ng 0x2A440:huÄ« 0x2A442:chà 0x2A443:shÄ�n 0x2A444:lú 0x2A446:yù 0x2A448:yàn 0x2A449:wÇŽn 0x2A44A:qiào 0x2A44B:luÅ� 0x2A44C:yù 0x2A44F:tú 0x2A450:wèi 0x2A452:tùn 0x2A455:hÇ”n 0x2A456:bÄ“n 0x2A457:qiè 0x2A459:jÄ«n,qián 0x2A45A:lái,lí 0x2A45C:zhÇ� 0x2A45D:yú 0x2A45F:cì 0x2A466:yè 0x2A467:dié 0x2A468:chà 0x2A469:diàn 0x2A46A:mán 0x2A46C:dèng 0x2A46D:wÄ“i 0x2A46E:niÇŽn 0x2A46F:lèi 0x2A470:bÄ«ng 0x2A471:wÅ«,wò 0x2A473:zhÄ›n 0x2A476:róu 0x2A477:wài 0x2A478:mì,yÄ�n 0x2A479:jiè 0x2A47B:hóu 0x2A47D:zhài 0x2A47E:rÇ” 0x2A47F:zÄ« 0x2A480:pán 0x2A482:mò 0x2A484:mì 0x2A486:qÄ« 0x2A487:mò 0x2A48A:zhÄ« 0x2A48B:bÄ�n,pán 0x2A48D:miè 0x2A48F:lù 0x2A491:qÄ« 0x2A492:chÅ�ng 0x2A494:lí 0x2A495:yì 0x2A498:dèng 0x2A499:cuÅ� 0x2A49B:duì 0x2A49C:mà 0x2A49D:yÇŽn 0x2A49F:zèng 0x2A4A0:yÇŽn,ÇŽn,àn 0x2A4A1:duì,dài 0x2A4A2:pÅ« 0x2A4A5:yuè 0x2A4A9:huò 0x2A4AA:mài 0x2A4AB:jiÇŽn 0x2A4AC:nóng 0x2A4AD:qín 0x2A4AF:qín 0x2A4B2:yè 0x2A4B4:tái 0x2A4B9:jiÄ�n 0x2A4BC:chá 0x2A4BE:dàn 0x2A4BF:téng 0x2A4C0:lì 0x2A4C3:niÇŽng 0x2A4C4:chán 0x2A4C5:zÄ�ng 0x2A4CA:yù 0x2A4CC:zuì 0x2A4CD:biÄ�n 0x2A4D0:chÇ” 0x2A4D8:rán 0x2A4DA:rán 0x2A4DB:yÄ�ng 0x2A4DC:bÇ’ 0x2A4E1:cù 0x2A4EC:mí 0x2A4EE:kÄ› 0x2A4F0:cù 0x2A4F7:xí 0x2A4F9:má 0x2A4FB:shÄ« 0x2A4FC:diÄ�n 0x2A4FF:shÄ« 0x2A502:dÇ�ng 0x2A503:jiÅ�ng 0x2A505:yuán 0x2A506:gÄ�n 0x2A50A:huì 0x2A50B:jÄ« 0x2A50D:péng 0x2A50F:dÄ“ng 0x2A511:bèng 0x2A514:pÄ�ng,péng 0x2A515:tà,lóng 0x2A517:yuÄ�n 0x2A518:gÄ�o 0x2A519:yuÄ�n 0x2A51F:jiÄ� 0x2A523:kÅ�ng 0x2A526:dòng 0x2A529:xián 0x2A52A:qì 0x2A52C:sÄ�ng 0x2A530:yìn 0x2A533:lóng 0x2A536:tÄ“ng 0x2A537:lóng 0x2A53A:rèn 0x2A53D:yìn 0x2A53E:píng 0x2A53F:pÅ« 0x2A540:yuán 0x2A541:rÇ’ng,chén 0x2A543:fÄ�ng 0x2A547:hÄ�ng 0x2A548:mí 0x2A549:hú 0x2A54A:zÄ« 0x2A54C:líng 0x2A54D:jiÅ�ng 0x2A54E:rÇ’ng 0x2A552:píng 0x2A553:guÄ�ng 0x2A554:Ä›r 0x2A55D:cù 0x2A55E:jùn 0x2A566:xiÇ” 0x2A568:ér 0x2A569:tì 0x2A56B:yáng 0x2A56D:ài 0x2A56E:hú 0x2A56F:xí,xié 0x2A571:hú 0x2A573:sÄ« 0x2A574:lÇ� 0x2A576:yì 0x2A577:gÇ” 0x2A579:táng 0x2A580:què 0x2A581:zÅ�ng 0x2A582:lí 0x2A584:jiào 0x2A587:fán 0x2A588:pú 0x2A589:sÄ« 0x2A58B:jié 0x2A58C:lú 0x2A58D:lì 0x2A58E:chán 0x2A590:yào,yà 0x2A595:huÄ« 0x2A599:hÅ�u 0x2A59A:diÄ�n 0x2A59B:qiù 0x2A59C:jué 0x2A59E:pì 0x2A5A2:kuÄ« 0x2A5A5:xÇ� 0x2A5A6:tÄ« 0x2A5A9:xù 0x2A5AF:biÇŽn 0x2A5B2:hÄ“ 0x2A5B3:lián 0x2A5B6:sù 0x2A5B7:liào 0x2A5BC:jÄ«n 0x2A5C1:lì 0x2A5C2:chán 0x2A5C5:qí 0x2A5C6:qí 0x2A5C9:zÄ« 0x2A5CB:zÄ« 0x2A5CD:qí 0x2A5CF:qí 0x2A5D0:zÄ« 0x2A5D2:zhÄ�i 0x2A5D3:zhÄ�i 0x2A5D4:pà 0x2A5D6:jÅ« 0x2A5D9:yÇŽn 0x2A5DC:háng 0x2A5DD:nà 0x2A5E4:yÇŽn 0x2A5E6:zhàn 0x2A5E7:shÇ� 0x2A5E8:zhí 0x2A5ED:zhÄ� 0x2A5F4:rÇ’ng 0x2A5F5:zhÄ� 0x2A5F7:yì 0x2A5F8:míng 0x2A5F9:yá 0x2A5FB:zhì 0x2A5FD:kuò,huá 0x2A5FE:xiá 0x2A600:pián 0x2A601:tà,xiá 0x2A603:yÇ� 0x2A606:xiÅ« 0x2A607:zhÄ�i 0x2A609:duÇ’ 0x2A60A:è 0x2A60E:yín,niè 0x2A610:è 0x2A611:suÄ�n 0x2A612:Ä�n 0x2A613:cuó 0x2A615:tuó 0x2A617:tuó 0x2A618:xiá 0x2A61B:chuò 0x2A61D:suÄ�n 0x2A625:jì 0x2A626:qiÇŽn 0x2A627:zú 0x2A628:zhÄ�i 0x2A629:yÇ”n,kÇ”n 0x2A62A:zhàn 0x2A62C:yí,yà,yá 0x2A632:yá,yí,yà,cÄ« 0x2A633:yuÄ“ 0x2A639:hé 0x2A63A:qià 0x2A63E:chÄ� 0x2A643:óu 0x2A648:hú 0x2A64A:yàn 0x2A64C:qiè 0x2A64D:bó 0x2A64E:qiÄ�ng 0x2A64F:jiè,jiá 0x2A65B:nì 0x2A65E:chÇŽn 0x2A65F:qÇ�n 0x2A661:zÄ�o 0x2A664:yÇ�n 0x2A665:xiè 0x2A667:qí 0x2A668:jiàn,jiÄ�n 0x2A66B:xÅ« 0x2A66D:zèng 0x2A66F:è 0x2A673:zÅ« 0x2A674:yÇ� 0x2A679:zhí 0x2A67A:lì 0x2A67D:lì 0x2A67E:yín 0x2A681:lián 0x2A683:chán 0x2A685:jué 0x2A687:zá 0x2A68E:zhÄ�i 0x2A68F:pián 0x2A691:lóng 0x2A693:lóng 0x2A698:lóng 0x2A69D:lóng 0x2A6A0:lóng 0x2A6A2:mÇŽng 0x2A6A5:zhé 0x2A6AC:gàn 0x2A6AD:gÅ�u 0x2A6AE:rán 0x2A6AF:cù 0x2A6B0:jiÄ�o 0x2A6B7:bÇ’ 0x2A6B9:zhù 0x2A6BA:qiÅ« 0x2A6BB:yÄ�ng 0x2A6C0:xiào 0x2A6C2:huí 0x2A6C3:qÅ« 0x2A6C8:líng 0x2A6CA:yín 0x2A6CE:pì 0x2A6D2:lián 0x2A79D:duó 0x2A7DD:jì,jÄ« 0x2A848:bái 0x2A84F:zhÄ�n 0x2A8AE:luán 0x2A8FB:lóu 0x2A917:liào 0x2AA0A:sóng 0x2AA17:juÄ“ 0x2AA30:qÅ« 0x2AA36:shÄ“ 0x2AA58:yÇŽn 0x2AA9D:yÅ�ng 0x2AEB9:nÇ” 0x2AED0:cÅ�ng 0x2AFA2:xiàn 0x2B061:lì 0x2B088:fèi 0x2B099:sù 0x2B0DC:kòu 0x2B127:yán 0x2B128:chÄ« 0x2B137:yì 0x2B138:xÅ«n 0x2B1ED:wÄ›i 0x2B230:qià 0x2B2D0:gÇ’ng 0x2B300:jÄ« 0x2B328:luó 0x2B359:yì 0x2B35F:yí 0x2B362:náo 0x2B363:tóng 0x2B36F:xián 0x2B370:xÇ� 0x2B372:xiÇŽo 0x2B37D:xuÄ�n 0x2B3CB:juÄ“,qiÄ�o 0x2B404:yuè 0x2B406:kuài 0x2B409:líng 0x2B410:ní 0x2B413:bù 0x2B461:méng 0x2B4B6:hán 0x2B4E7:fÅ« 0x2B4E9:cÅ�ng 0x2B4EF:jÄ« 0x2B4F6:xuÄ�n 0x2B4F9:jÄ« 0x2B50D:fán 0x2B50E:jué 0x2B536:niè 0x2B5AE:yÇ� 0x2B5AF:fÇ” 0x2B5B3:yÅ«n 0x2B5E0:zhÄ�ng 0x2B5E6:bù 0x2B5E7:sù 0x2B5EE:huáng 0x2B5F4:zhÄ�n 0x2B61C:wén 0x2B61D:jué 0x2B623:hàn 0x2B624:ái 0x2B626:táo 0x2B627:lù 0x2B628:tí 0x2B62A:yuán 0x2B62C:xí 0x2B688:xù 0x2B689:hóng 0x2B692:fú 0x2B694:huí 0x2B695:shÄ« 0x2B696:cÇ� 0x2B699:pÅ« 0x2B6AD:liè 0x2B6DB:zhÄ« 0x2B6DE:jué 0x2B6E2:níng 0x2B6ED:kuáng 0x2B6F6:chì 0x2B6F8:tí 0x2B7A9:mén 0x2B7C5:liáng 0x2B7E6:suì 0x2B7F7:lì 0x2B7F9:hóng 0x2B7FC:dá 0x2B806:kuÇ� 0x2B80A:xuán 0x2B81C:ní 0x2B851:yÄ«n 0x2B8B8:dàn 0x2BAC7:Ä›,è 0x2BB5F:Å�u 0x2BB62:lÇ”n 0x2BB7C:láo 0x2BB83:shàn 0x2BC1B:xíng 0x2BD77:lì 0x2BD87:dié 0x2BDF7:xÄ«n 0x2BE29:kÅ�u 0x2C029:wÄ›i 0x2C02A:xiàn 0x2C0A9:jiÄ� 0x2C0CA:zhì 0x2C1D5:wàn 0x2C1D9:pèi,bèi 0x2C1F9:guó 0x2C27C:Å�u,Ç’u 0x2C288:xún 0x2C2A4:chÇŽn 0x2C317:hé 0x2C35B:lì 0x2C361:dàng 0x2C364:xún 0x2C488:què 0x2C494:gÄ›ng 0x2C497:lán 0x2C4FC:tuí 0x2C542:gÅ�ng,lÇ’ng 0x2C613:xún 0x2C618:dÇŽn 0x2C621:yÄ«n 0x2C629:tÄ«ng 0x2C62B:huán 0x2C62C:qiàn 0x2C62D:lín,chÄ“n 0x2C62F:zhÇ”n 0x2C642:yÇŽn 0x2C64A:mò 0x2C64B:xiÄ�ng 0x2C72C:màn 0x2C72F:liÇŽng 0x2C79F:pín 0x2C7C1:yì 0x2C7FD:dÅ�ng 0x2C8D9:xÅ« 0x2C8DE:zhÇ” 0x2C8E1:jiàn 0x2C8F3:hÄ›n 0x2C907:yÄ«n 0x2C90A:shì 0x2C91D:huì 0x2C925:zhuàn 0x2CA02:qí 0x2CA0E:yóu 0x2CA7D:xún 0x2CAA9:nóng 0x2CB29:yì 0x2CB2D:lún 0x2CB2E:chÇŽng 0x2CB31:jÄ«n 0x2CB38:shù 0x2CB39:shén 0x2CB3B:lú 0x2CB3F:zhÄ�o 0x2CB41:mÇ” 0x2CB4A:dù 0x2CB4E:hóng 0x2CB5A:chún 0x2CB5B:bÅ� 0x2CB64:hóu 0x2CB69:wÄ“ng 0x2CB6C:wèi,huì 0x2CB6F:piÄ› 0x2CB73:xÇ� 0x2CB76:hÄ“i 0x2CB78:lín 0x2CB7C:suì 0x2CBB1:yÄ«n 0x2CBBF:qí,gài 0x2CBC0:jÄ« 0x2CBCE:tuí 0x2CC56:dí 0x2CC5F:wÄ›i 0x2CCF5:pÄ« 0x2CCF6:jiÅ�ng 0x2CCFD:shÄ“n 0x2CCFF:tú 0x2CD02:fÄ“i 0x2CD03:huÅ� 0x2CD0A:lín 0x2CD8B:jÅ« 0x2CD8D:tuó 0x2CD8F:wéi 0x2CD90:zhào 0x2CD9F:là 0x2CDA0:liàn 0x2CDA8:jì 0x2CDAD:jì 0x2CDAE:xÇ� 0x2CDD5:bÅ«,bÇ” 0x2CE18:yÇŽn 0x2CE1A:yuè 0x2CE23:xiÄ�n 0x2CE26:zhuó 0x2CE2A:fán 0x2CE7C:xiè 0x2CE88:yÇ� 0x2CE93:chÇ” 0x30EDD:biáng 0x30EDE:biánglinuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/resources.qrc000066400000000000000000000010221523260663500270020ustar00rootroot00000000000000 pinyin.dict holiday-cn/2019.json holiday-cn/2020.json holiday-cn/2021.json holiday-cn/2022.json holiday-cn/2023.json holiday-cn/2024.json holiday-cn/2025.json holiday-cn/2026.json systemd-service-template.service systemd-timer-template.timer linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/systemd-service-template.service000066400000000000000000000001521523260663500326050ustar00rootroot00000000000000[Unit] Description=Calendar Schedule Task [Service] ExecStart=@COMMAND@ Restart=on-failure RestartSec=5s linuxdeepin-dde-calendar-f6d670a/src/calendar-service/assets/systemd-timer-template.timer000066400000000000000000000002411523260663500317440ustar00rootroot00000000000000[Unit] Description=Calendar Schedule Timer [Timer] AccuracySec=1ms RandomizedDelaySec=0 OnCalendar=@SCHEDULE@ Persistent=true [Install] WantedBy=timers.target linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/000077500000000000000000000000001523260663500235535ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/alarmManager/000077500000000000000000000000001523260663500261425ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/alarmManager/dalarmmanager.cpp000066400000000000000000000351411523260663500314450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dalarmmanager.h" #include "commondef.h" #include "csystemdtimercontrol.h" #include "dbus/dbusnotify.h" #include #define Millisecond 1 #define Second 1000 * Millisecond #define Minute 60 * Second #define Hour 60 * Minute static QString notifyActKeyDefault("default"); static QString notifyActKeyClose("close"); static QString notifyActKeyRemindLater("later"); static QString notifyActKeyRemindAfter15mins("later-15mins"); static QString notifyActKeyRemindAfter1hour("later-1hour"); static QString notifyActKeyRemindAfter4hours("later-4hours"); static QString notifyActKeyRemind1DayBefore("one-day-before"); static QString notifyActKeyRemindTomorrow("tomorrow"); static QString layoutHM("15:04"); DAlarmManager::DAlarmManager(QObject *parent) : QObject(parent) { qCDebug(ServiceLogger) << "DAlarmManager constructor called."; m_dbusnotify = new DBusNotify("org.deepin.dde.Notification1", "/org/deepin/dde/Notification1", "org.deepin.dde.Notification1", QDBusConnection::sessionBus(), this); if (!m_dbusnotify->isValid()) { delete m_dbusnotify; m_dbusnotify = new DBusNotify("com.deepin.dde.Notification", "/com/deepin/dde/Notification", "com.deepin.dde.Notification", QDBusConnection::sessionBus(), this); } //若没开å�¯å®šæ—¶ä»»åŠ¡åˆ™å¼€å�¯å®šæ—¶ä»»åŠ¡ CSystemdTimerControl systemdTimer; systemdTimer.startCalendarServiceSystemdTimer(); } void DAlarmManager::updateRemind(const DRemindData::List &remindList) { qCDebug(ServiceLogger) << "Updating reminders, list size:" << remindList.size(); if (remindList.size() == 0) { qCDebug(ServiceLogger) << "No reminders to update"; return; } QString &&accountID = remindList.at(0)->accountID(); CSystemdTimerControl systemdTimerControl; //清空该å¸�户下日程æ��醒 systemdTimerControl.stopAllRemindSystemdTimer(accountID); systemdTimerControl.removeRemindFile(accountID); QVector infoVector {}; foreach (auto remind, remindList) { SystemDInfo info; info.accountID = remind->accountID(); info.alarmID = remind->alarmID(); info.laterCount = remind->remindCount(); info.triggerTimer = remind->dtRemind(); infoVector.append(info); } qCDebug(ServiceLogger) << "Building systemd timer configuration for" << infoVector.size() << "reminders."; systemdTimerControl.buildingConfiggure(infoVector); } void DAlarmManager::notifyJobsChanged(const DRemindData::List &remindList) { qCDebug(ServiceLogger) << "Notifying jobs changed, list size:" << remindList.size(); if (remindList.size() == 0) { qCDebug(ServiceLogger) << "No jobs to notify about"; return; } CSystemdTimerControl systemdTimerControl; QVector infoVector {}; foreach (auto remind, remindList) { SystemDInfo info; info.accountID = remind->accountID(); info.alarmID = remind->alarmID(); info.laterCount = remind->remindCount(); info.triggerTimer = remind->dtRemind(); infoVector.append(info); } qCDebug(ServiceLogger) << "Stopping systemd timers for" << infoVector.size() << "changed jobs."; systemdTimerControl.stopSystemdTimerByJobInfos(infoVector); } void DAlarmManager::notifyMsgHanding(const DRemindData::Ptr &remindData, const int operationNum) { qCDebug(ServiceLogger) << "Notifying message handling for alarm:" << remindData->alarmID(); switch (operationNum) { case 1: qCDebug(ServiceLogger) << "Opening calendar UI for alarm:" << remindData->alarmID(); emit signalCallOpenCalendarUI(remindData->alarmID()); break; case 2: //ç¨�å�Žæ��醒 case 21: //15minå�Žæ��醒 case 22: //一个å°�æ—¶å�Žæ��醒 case 23: //四个å°�æ—¶å�Žæ��醒 case 3: //明天æ��醒 case 4: //æ��å‰�一天æ��醒 qCDebug(ServiceLogger) << "Processing remind later operation:" << operationNum << "for alarm:" << remindData->alarmID(); remindLater(remindData, operationNum); break; default: qCWarning(ServiceLogger) << "Unknown operation number:" << operationNum; break; } } void DAlarmManager::remindLater(const DRemindData::Ptr &remindData, const int operationNum) { CSystemdTimerControl systemdTimerControl; SystemDInfo info; info.accountID = remindData->accountID(); info.alarmID = remindData->alarmID(); qCDebug(ServiceLogger) << "Reminding later for alarm:" << info.alarmID << "account:" << info.accountID << "operation:" << operationNum; //如果是ç¨�å�Žæ��醒则设置对应的é‡�å¤�次数 if (operationNum == 2) { info.laterCount = remindData->remindCount(); } else { //如果ä¸�是ç¨�å�Žæ��醒,因为次数没有增加所以å�œæ­¢ä»»åŠ¡çš„æ—¶å€™éœ€è¦�加一以ä¿�è¯�能够å�œæ­¢ä¸Šæ¬¡çš„任务 info.laterCount = remindData->remindCount() + 1; } info.triggerTimer = remindData->dtRemind(); //å�œæ­¢ç›¸åº”的任务 qCDebug(ServiceLogger) << "Stopping original systemd timer."; systemdTimerControl.stopSystemdTimerByJobInfo(info); if (operationNum != 2) { //如果ä¸�是ç¨�å�Žæ��醒,还原æˆ�原æ�¥çš„æ��醒次数 info.laterCount--; qCDebug(ServiceLogger) << "Restored remind count to:" << info.laterCount; } QVector infoVector; infoVector.append(info); //å¼€å�¯æ–°ä»»åŠ¡ qCDebug(ServiceLogger) << "Building new systemd timer configuration for reminded job."; systemdTimerControl.buildingConfiggure(infoVector); } int DAlarmManager::remindJob(const DRemindData::Ptr &remindData, const DSchedule::Ptr &schedule) { qCDebug(ServiceLogger) << "Processing remind job for schedule:" << schedule->uid(); //如果没有æ��醒 if (schedule->alarms().size() == 0) { qCWarning(ServiceLogger) << "Remind job failed - No alarms found for schedule:" << schedule->uid(); return 0; } KCalendarCore::Alarm::Ptr alarm = schedule->alarms().at(0); int nDays = -(alarm->startOffset().asDays()); qCDebug(ServiceLogger) << "Alarm offset days:" << nDays; qint64 duration = 0; bool bmax = getRemindLaterDuration(remindData->remindCount(), duration); qCDebug(ServiceLogger) << "Remind later duration:" << duration << "ms, Max duration:" << bmax; QStringList actionlist; QVariantMap hints; QString cmd = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.notifyMsgHanding string:%1 string:%2") .arg(remindData->accountID()) .arg(remindData->alarmID()); auto argMake = [&](int operationNum, const QString & text, const QString & transText) { actionlist << text << transText; hints.insert("x-deepin-action-" + text, QString("%1 int32:%2").arg(cmd).arg(operationNum)); }; QDateTime tm = QDateTime::currentDateTime(); if (tm < schedule->dtStart()) { qCDebug(ServiceLogger) << "Schedule start time is in the future:" << schedule->dtStart().toString(); //如果æ��醒规则大于3天且是第二次æ��醒 if (nDays >= 3 && remindData->remindCount() == 1) { //default对应的是默认æ“�作,也就是在点击空白区域会出å�‘çš„æ“�作 argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); //当å‰�时间与开始时间间隔大于1天 if (tm < schedule->dtStart().addDays(-1)) { qCDebug(ServiceLogger) << "Adding one day before reminder action"; argMake(4, notifyActKeyRemind1DayBefore, tr("One day before start")); } } else if ((nDays == 1 || nDays == 2) && bmax) { qCDebug(ServiceLogger) << "Adding actions for short-term reminder (1-2 days)"; argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); argMake(3, notifyActKeyRemindTomorrow, tr("Remind me tomorrow")); } else { qCDebug(ServiceLogger) << "Adding actions for immediate reminder"; argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); argMake(2, notifyActKeyRemindLater, tr("Remind me later")); //å�Žé�¢çš„actions会在拉列表中显示 argMake(21, notifyActKeyRemindAfter15mins, tr("15 mins later")); argMake(22, notifyActKeyRemindAfter1hour, tr("1 hour later")); argMake(23, notifyActKeyRemindAfter4hours, tr("4 hours later")); argMake(3, notifyActKeyRemindTomorrow, tr("Tomorrow")); } } else { qCDebug(ServiceLogger) << "Schedule has already started, adding basic actions"; argMake(1, notifyActKeyDefault, ""); argMake(5, notifyActKeyClose, tr("Close", "button")); } QString title(tr("Schedule Reminder")); QString body = getRemindBody(schedule); QString appicon("dde-calendar"); QString appname("dde-calendar"); quint32 replaces_id = 0; qint32 timeout = 0; QList argumentList; argumentList << appname << replaces_id << appicon << title << body << actionlist << hints << timeout; qCDebug(ServiceLogger) << "Sending notification - Time:" << QDateTime::currentDateTime().toString() << "Title:" << title << "Body:" << body << "Actions:" << actionlist.size(); int notifyid = m_dbusnotify->Notify(argumentList); qCDebug(ServiceLogger) << "Notification sent, ID:" << notifyid; return notifyid; } DBusNotify *DAlarmManager::getdbusnotify() { // qCDebug(ServiceLogger) << "Getting DBusNotify instance."; return m_dbusnotify; } QString DAlarmManager::getRemindBody(const DSchedule::Ptr &schedule) { qCDebug(ServiceLogger) << "Generating reminder body for schedule:" << schedule->summary(); QDateTime tm = QDateTime::currentDateTime(); QString msgStart; QString msgEnd; msgStart = getBodyTimePart(tm, schedule->dtStart(), schedule->allDay(), true); msgEnd = getBodyTimePart(tm, schedule->dtEnd(), schedule->allDay(), false); quint32 startdayofyear = static_cast(schedule->dtStart().date().dayOfYear()); quint32 enddayofyear = static_cast(schedule->dtEnd().date().dayOfYear()); QString prefix; if (schedule->allDay()) { qCDebug(ServiceLogger) << "Processing all-day schedule"; //全天日程 if (startdayofyear == enddayofyear) { //é�žè·¨å¤©æ—¥ç¨‹ï¼Œå�ªå±•示开始时间 prefix = msgStart; qCDebug(ServiceLogger) << "Single-day all-day schedule, using start time only"; } else { //跨天日程,展示整个日程的时间 prefix = QString(tr("%1 to %2")).arg(msgStart).arg(msgEnd); qCDebug(ServiceLogger) << "Multi-day all-day schedule, using full time range"; } } else { qCDebug(ServiceLogger) << "Processing regular schedule"; //é�žå…¨å¤©æ—¥ç¨‹ if (startdayofyear == enddayofyear) { //é�žè·¨å¤©æ—¥ç¨‹ï¼ŒGetBodyTimePartå·²ç»�返回了日程的日期,å�³date,所以,这里å�ªéœ€è¦�日程的结æ�Ÿæ—¶é—´ï¼Œå�³time msgEnd = schedule->dtEnd().time().toString("HH:mm"); qCDebug(ServiceLogger) << "Single-day regular schedule, using end time only"; } //展示日程的开始结æ�Ÿæ—¶é—´ prefix = QString(tr("%1 to %2")).arg(msgStart).arg(msgEnd); qCDebug(ServiceLogger) << "Using full time range for schedule display"; } //日程时间+title QString strBody = QString("%1 %2").arg(prefix).arg(schedule->summary()); qCDebug(ServiceLogger) << "Generated reminder body:" << strBody; return strBody; } QString DAlarmManager::getBodyTimePart(const QDateTime &nowtime, const QDateTime &jobtime, bool allday, bool isstart) { Q_UNUSED(isstart); //ToDo 需确认规则,需根æ�®isstart确认是å�¦ä¸ºå¼€å§‹æ—¶é—´å�•独处ç�† QString strmsg; qint64 diff = nowtime.daysTo(jobtime); //jobtimeå�ªå�¯èƒ½å¤§äºŽç­‰äºŽå½“å‰�remind任务执行的当å‰�æ—¶é—´ qCDebug(ServiceLogger) << "Generating body time part. Diff days:" << diff << "All day:" << allday; if (allday) { //全天日程,å�ªå±•示日期,å�³date //日程开始时间è·�离现在超过两天 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) strmsg.append(jobtime.date().toString(QLocale().dateFormat(QLocale::ShortFormat))); #else strmsg.append(jobtime.date().toString(Qt::LocalDate)); #endif if (diff == 0) { //日程开始时间是今天 strmsg = tr("Today"); qCDebug(ServiceLogger) << "Using 'Today' for same-day all-day schedule"; } else if (diff == 1) { //日程开始时间是明天 strmsg = tr("Tomorrow"); qCDebug(ServiceLogger) << "Using 'Tomorrow' for next-day all-day schedule"; } } else { //é�žå…¨å¤©æ—¥ç¨‹ï¼Œå±•示日期和时间,å�³date time //日程开始时间è·�离现在超过两天 strmsg.append(QString(" %1").arg(jobtime.toString("yyyy/MM/dd HH:mm"))); if (diff == 0) { //日程开始时间是今天, strmsg = tr("Today") + " " + jobtime.time().toString("HH:mm"); qCDebug(ServiceLogger) << "Using 'Today' with time for same-day schedule"; } else if (diff == 1) { //日程开始时间是明天 strmsg = tr("Tomorrow") + " " + jobtime.time().toString("HH:mm"); qCDebug(ServiceLogger) << "Using 'Tomorrow' with time for next-day schedule"; } } qCDebug(ServiceLogger) << "Generated time part:" << strmsg; return strmsg; } int DAlarmManager::getRemindLaterDuration(int count, qint64 &duration) { qCDebug(ServiceLogger) << "Calculating remind later duration for count:" << count; bool bmax = false; duration = (10 + ((count - 1) * 5)) * Minute; //下一次æ��醒è·�离现在的时间间隔,å�•ä½�毫秒 if (duration >= Hour) { bmax = true; duration = Hour; } qCDebug(ServiceLogger) << "Calculated duration:" << duration << "ms. Max reached:" << bmax; return bmax; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/alarmManager/dalarmmanager.h000066400000000000000000000034571523260663500311170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DALARMMANAGER_H #define DALARMMANAGER_H #include "dreminddata.h" #include "dschedule.h" #include #include class DBusNotify; //日程æ��醒管ç�†ç±» class DAlarmManager : public QObject { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAlarmManager(QObject *parent = nullptr); //æ›´æ–°æ��醒任务 void updateRemind(const DRemindData::List &remindList); void notifyJobsChanged(const DRemindData::List &remindList); /** * @brief notifyMsgHanding 通知æ��示框交互处ç�† * @param remindData æ��醒日程相关信æ�¯ * @param operationNum æ“�作编å�· * 1:打开日历, * 2:ç¨�å�Žæ��醒 21:15minå�Žæ��醒 22:一个å°�æ—¶å�Žæ��醒 23:四个å°�æ—¶å�Žæ��醒 * 3:明天æ��醒 4: æ��å‰�1天æ��醒 */ void notifyMsgHanding(const DRemindData::Ptr &remindData, const int operationNum); void remindLater(const DRemindData::Ptr &remindData, const int operationNum); int remindJob(const DRemindData::Ptr &remindData, const DSchedule::Ptr &schedule); DBusNotify *getdbusnotify(); private: int getRemindLaterDuration(int count, qint64 &duration); //获å�–日程æ��醒内容 QString getRemindBody(const DSchedule::Ptr &schedule); QString getBodyTimePart(const QDateTime &nowtime, const QDateTime &jobtime, bool allday, bool isstart); signals: //å�‘é€�打开日历信å�· void signalCallOpenCalendarUI(const QString &alarmID); private: DBusNotify *m_dbusnotify; //日程æ��醒dbusæ“�作相关 }; #endif // DALARMMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/alarmManager/dreminddata.cpp000066400000000000000000000101671523260663500311270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dreminddata.h" #include "commondef.h" DRemindData::DRemindData() : m_alarmID("") , m_accountID("") , m_scheduleID("") , m_remindCount(0) , m_notifyid(-1) { // qCDebug(ServiceLogger) << "DRemindData default constructor called."; } QString DRemindData::accountID() const { // qCDebug(ServiceLogger) << "Getting accountID:" << m_accountID; return m_accountID; } void DRemindData::setAccountID(const QString &accountID) { // qCDebug(ServiceLogger) << "Setting accountID to:" << accountID; m_accountID = accountID; } QString DRemindData::scheduleID() const { // qCDebug(ServiceLogger) << "Getting scheduleID:" << m_scheduleID; return m_scheduleID; } void DRemindData::setScheduleID(const QString &scheduleID) { // qCDebug(ServiceLogger) << "Setting scheduleID to:" << scheduleID; m_scheduleID = scheduleID; } QDateTime DRemindData::recurrenceId() const { // qCDebug(ServiceLogger) << "Getting recurrenceId:" << m_recurrenceId; return m_recurrenceId; } void DRemindData::setRecurrenceId(const QDateTime &recurrenceId) { // qCDebug(ServiceLogger) << "Setting recurrenceId to:" << recurrenceId; m_recurrenceId = recurrenceId; } int DRemindData::remindCount() const { // qCDebug(ServiceLogger) << "Getting remindCount:" << m_remindCount; return m_remindCount; } void DRemindData::setRemindCount(int remindCount) { // qCDebug(ServiceLogger) << "Setting remindCount to:" << remindCount; m_remindCount = remindCount; } int DRemindData::notifyid() const { // qCDebug(ServiceLogger) << "Getting notifyid:" << m_notifyid; return m_notifyid; } void DRemindData::setNotifyid(int notifyid) { // qCDebug(ServiceLogger) << "Setting notifyid to:" << notifyid; m_notifyid = notifyid; } QDateTime DRemindData::dtRemind() const { // qCDebug(ServiceLogger) << "Getting dtRemind:" << m_dtRemind; return m_dtRemind; } void DRemindData::setDtRemind(const QDateTime &dtRemind) { // qCDebug(ServiceLogger) << "Setting dtRemind to:" << dtRemind; m_dtRemind = dtRemind; } QDateTime DRemindData::dtStart() const { // qCDebug(ServiceLogger) << "Getting dtStart:" << m_dtStart; return m_dtStart; } void DRemindData::setDtStart(const QDateTime &dtStart) { // qCDebug(ServiceLogger) << "Setting dtStart to:" << dtStart; m_dtStart = dtStart; } QDateTime DRemindData::dtEnd() const { // qCDebug(ServiceLogger) << "Getting dtEnd:" << m_dtEnd; return m_dtEnd; } void DRemindData::setDtEnd(const QDateTime &dtEnd) { // qCDebug(ServiceLogger) << "Setting dtEnd to:" << dtEnd; m_dtEnd = dtEnd; } QString DRemindData::alarmID() const { // qCDebug(ServiceLogger) << "Getting alarmID:" << m_alarmID; return m_alarmID; } void DRemindData::setAlarmID(const QString &alarmID) { // qCDebug(ServiceLogger) << "Setting alarmID to:" << alarmID; m_alarmID = alarmID; } void DRemindData::updateRemindTimeByCount() { qCDebug(ServiceLogger) << "Updating remind time by count. Current count:" << m_remindCount; qint64 Minute = 60 * 1000; qint64 Hour = Minute * 60; qint64 duration = (10 + ((m_remindCount - 1) * 5)) * Minute; //下一次æ��醒è·�离现在的时间间隔,å�•ä½�毫秒 if (duration >= Hour) { qCDebug(ServiceLogger) << "Duration is greater than or equal to one hour, setting to one hour"; duration = Hour; } qCDebug(ServiceLogger) << "Calculated duration:" << duration << "ms."; setDtRemind(getRemindTimeByMesc(duration)); } void DRemindData::updateRemindTimeByMesc(qint64 duration) { qCDebug(ServiceLogger) << "Updating remind time by milliseconds:" << duration; setDtRemind(getRemindTimeByMesc(duration)); } QDateTime DRemindData::getRemindTimeByMesc(qint64 duration) { qCDebug(ServiceLogger) << "Getting remind time by milliseconds from now. Duration:" << duration; QDateTime currentTime = QDateTime::currentDateTime(); currentTime = currentTime.addMSecs(duration); qCDebug(ServiceLogger) << "New remind time:" << currentTime; return currentTime; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/alarmManager/dreminddata.h000066400000000000000000000027051523260663500305730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DREMINDDATA_H #define DREMINDDATA_H #include #include #include class DRemindData { public: typedef QSharedPointer Ptr; typedef QVector List; DRemindData(); QString accountID() const; void setAccountID(const QString &accountID); QString scheduleID() const; void setScheduleID(const QString &scheduleID); QDateTime recurrenceId() const; void setRecurrenceId(const QDateTime &recurrenceId); int remindCount() const; void setRemindCount(int remindCount); int notifyid() const; void setNotifyid(int notifyid); QDateTime dtRemind() const; void setDtRemind(const QDateTime &dtRemind); QDateTime dtStart() const; void setDtStart(const QDateTime &dtStart); QDateTime dtEnd() const; void setDtEnd(const QDateTime &dtEnd); QString alarmID() const; void setAlarmID(const QString &alarmID); void updateRemindTimeByCount(); void updateRemindTimeByMesc(qint64 duration); private: QDateTime getRemindTimeByMesc(qint64 duration); private: QString m_alarmID; QString m_accountID; QString m_scheduleID; QDateTime m_recurrenceId; int m_remindCount; int m_notifyid; QDateTime m_dtRemind; QDateTime m_dtStart; QDateTime m_dtEnd; }; #endif // DREMINDDATA_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager/000077500000000000000000000000001523260663500274115ustar00rootroot00000000000000daccountmanagemodule.cpp000066400000000000000000000662631523260663500342320ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmanagemodule.h" #include "commondef.h" #include "units.h" #include "calendarprogramexitcontrol.h" #include #include const QString firstDayOfWeek_key = "firstDayOfWeek"; const QString shortTimeFormat_key = "shortTimeFormat"; const QString firstDayOfWeekSource_key = "firstDayOfWeekSource"; const QString shortTimeFormatSource_key = "shortTimeFormatSource"; DAccountManageModule::DAccountManageModule(QObject *parent) : QObject(parent) , m_syncFileManage(new SyncFileManage()) , m_accountManagerDB(new DAccountManagerDataBase) , m_reginFormatConfig(DTK_CORE_NAMESPACE::DConfig::createGeneric("org.deepin.region-format", QString(), this)) , m_settings( getAppConfigDir().filePath( "config.ini"), QSettings::IniFormat) { qCDebug(ServiceLogger) << "DAccountManageModule constructor called."; if (m_reginFormatConfig->isValid()) { connect(m_reginFormatConfig, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, &DAccountManageModule::slotSettingChange); } else { connect(&m_timeDateDbus, &DBusTimedate::ShortTimeFormatChanged, this, &DAccountManageModule::slotSettingChange); connect(&m_timeDateDbus, &DBusTimedate::WeekBeginsChanged, this, &DAccountManageModule::slotSettingChange); } m_isSupportUid = m_syncFileManage->getSyncoperation()->hasAvailable(); //新文件路径 QString newDbPath = getDBPath(); QString newDB(newDbPath + "/" + "accountmanager.db"); qCDebug(ServiceLogger) << "Setting account manager DB path to:" << newDB; m_accountManagerDB->setDBPath(newDB); m_accountManagerDB->dbOpen(); QDBusConnection::RegisterOptions options = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; QDBusConnection sessionBus = QDBusConnection::sessionBus(); //将云端å¸�户信æ�¯åŸºæœ¬æ•°æ�®ä¸Žæœ¬åœ°æ•°æ�®å�ˆå¹¶ qCDebug(ServiceLogger) << "Merging UnionID data."; unionIDDataMerging(); //æ ¹æ�®èŽ·å�–到的å¸�户信æ�¯åˆ›å»ºå¯¹åº”çš„å¸�户æœ�务 qCDebug(ServiceLogger) << "Creating account services for" << m_accountList.size() << "accounts."; foreach (auto account, m_accountList) { //如果ä¸�支æŒ�云å�Œæ­¥ä¸”å¸�户类型为UID则过滤 if (!m_isSupportUid && account->accountType() == DAccount::Account_UnionID) { continue; } DAccountModule::Ptr accountModule = DAccountModule::Ptr(new DAccountModule(account)); QObject::connect(accountModule.data(), &DAccountModule::signalSettingChange, this, &DAccountManageModule::slotSettingChange); m_accountModuleMap[account->accountID()] = accountModule; DAccountService::Ptr accountService = DAccountService::Ptr(new DAccountService(account->dbusPath(), account->dbusInterface(), accountModule, this)); if (!sessionBus.registerObject(accountService->getPath(), accountService->getInterface(), accountService.data(), options)) { qCWarning(ServiceLogger) << "Failed to register account service - Account:" << account->accountID() << "Error:" << sessionBus.lastError().message(); } else { m_AccountServiceMap[account->accountType()].insert(account->accountID(), accountService); //如果是网络å¸�户则开å�¯å®šæ—¶ä¸‹è½½ä»»åŠ¡ if (account->isNetWorkAccount() && account->accountState().testFlag(DAccount::Account_Open)) { qCDebug(ServiceLogger) << "Starting download task for network account:" << account->accountID(); accountModule->downloadTaskhanding(0); } } } m_generalSetting = getGeneralSettings(); connect(&m_timer, &QTimer::timeout, this, &DAccountManageModule::slotClientIsOpen); m_timer.start(2000); if (m_isSupportUid) { qCDebug(ServiceLogger) << "UID is supported, connecting signals."; QObject::connect(m_syncFileManage->getSyncoperation(), &Syncoperation::signalLoginStatusChange, this, &DAccountManageModule::slotUidLoginStatueChange); QObject::connect(m_syncFileManage->getSyncoperation(), &Syncoperation::SwitcherChange, this, &DAccountManageModule::slotSwitcherChange); } //第一次å�¯åŠ¨åŠ è½½å®Œæˆ�å�Žå�‘é€�å¸�户改å�˜ä¿¡å�· // emit signalLoginStatusChange(); qCDebug(ServiceLogger) << "DAccountManageModule constructed."; } QString DAccountManageModule::getAccountList() { qCDebug(ServiceLogger) << "Getting account list as JSON string."; QString accountStr; DAccount::toJsonListString(m_accountList, accountStr); return accountStr; } QString DAccountManageModule::getCalendarGeneralSettings() { qCDebug(ServiceLogger) << "Getting calendar general settings as JSON string."; QString cgSetStr; m_generalSetting = getGeneralSettings(); DCalendarGeneralSettings::toJsonString(m_generalSetting, cgSetStr); return cgSetStr; } void DAccountManageModule::setCalendarGeneralSettings(const QString &cgSet) { qCDebug(ServiceLogger) << "Setting calendar general settings from JSON:" << cgSet; DCalendarGeneralSettings::Ptr cgSetPtr = DCalendarGeneralSettings::Ptr(new DCalendarGeneralSettings); DCalendarGeneralSettings::fromJsonString(cgSetPtr, cgSet); if (m_generalSetting != cgSetPtr) { setGeneralSettings(cgSetPtr); DCalendarGeneralSettings::Ptr tmpSetting = DCalendarGeneralSettings::Ptr(m_generalSetting->clone()); m_generalSetting = cgSetPtr; if (tmpSetting->firstDayOfWeek() != m_generalSetting->firstDayOfWeek()) { qCDebug(ServiceLogger) << "First day of week changed from" << tmpSetting->firstDayOfWeek() << "to" << m_generalSetting->firstDayOfWeek(); emit firstDayOfWeekChange(); } if (tmpSetting->timeShowType() != m_generalSetting->timeShowType()) { qCDebug(ServiceLogger) << "Time format type changed from" << tmpSetting->timeShowType() << "to" << m_generalSetting->timeShowType(); emit timeFormatTypeChange(); } } } int DAccountManageModule::getfirstDayOfWeek() { // qCDebug(ServiceLogger) << "Getting first day of week."; return static_cast(m_generalSetting->firstDayOfWeek()); } void DAccountManageModule::setFirstDayOfWeek(const int firstday) { qCDebug(ServiceLogger) << "Setting first day of week to:" << firstday; if (m_generalSetting->firstDayOfWeek() != firstday) { m_generalSetting->setFirstDayOfWeek(static_cast(firstday)); setGeneralSettings(m_generalSetting); foreach (auto account, m_accountList) { if (account->accountType() == DAccount::Account_UnionID) { m_accountModuleMap[account->accountID()]->accountDownload(); } } } } int DAccountManageModule::getTimeFormatType() { // qCDebug(ServiceLogger) << "Getting time format type."; return static_cast(m_generalSetting->timeShowType()); } void DAccountManageModule::setTimeFormatType(const int timeType) { qCDebug(ServiceLogger) << "Setting time format type to:" << timeType; if (m_generalSetting->timeShowType() != timeType) { m_generalSetting->setTimeShowType(static_cast(timeType)); setGeneralSettings(m_generalSetting); foreach (auto account, m_accountList) { if (account->accountType() == DAccount::Account_UnionID) { m_accountModuleMap[account->accountID()]->accountDownload(); } } } } void DAccountManageModule::remindJob(const QString &accountID, const QString &alarmID) { qCDebug(ServiceLogger) << "Executing remind job for account:" << accountID << "alarm:" << alarmID; if (m_accountModuleMap.contains(accountID)) { m_accountModuleMap[accountID]->remindJob(alarmID); } } void DAccountManageModule::updateRemindSchedules(bool isClear) { qCDebug(ServiceLogger) << "Updating remind schedules for all accounts. isClear:" << isClear; QMap::const_iterator iter = m_accountModuleMap.constBegin(); for (; iter != m_accountModuleMap.constEnd(); ++iter) { iter.value()->updateRemindSchedules(isClear); } } void DAccountManageModule::notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum) { qCDebug(ServiceLogger) << "Handling notification message for account:" << accountID << "alarm:" << alarmID << "operation:" << operationNum; if (m_accountModuleMap.contains(accountID)) { m_accountModuleMap[accountID]->notifyMsgHanding(alarmID, operationNum); } } void DAccountManageModule::downloadByAccountID(const QString &accountID) { qCDebug(ServiceLogger) << "Triggering download for account:" << accountID; if (m_accountModuleMap.contains(accountID)) { m_accountModuleMap[accountID]->accountDownload(); } } void DAccountManageModule::uploadNetWorkAccountData() { qCDebug(ServiceLogger) << "Uploading network account data for all accounts."; QMap::const_iterator iter = m_accountModuleMap.constBegin(); for (; iter != m_accountModuleMap.constEnd(); ++iter) { iter.value()->uploadNetWorkAccountData(); } } //账户登录 void DAccountManageModule::login() { qCDebug(ServiceLogger) << "Login requested."; m_syncFileManage->getSyncoperation()->optlogin(); } //账户登出 void DAccountManageModule::logout() { qCDebug(ServiceLogger) << "Logout requested."; m_syncFileManage->getSyncoperation()->optlogout(); } bool DAccountManageModule::isSupportUid() { // qCDebug(ServiceLogger) << "Checking UID support. Supported:" << m_isSupportUid; return m_isSupportUid; } void DAccountManageModule::calendarOpen(bool isOpen) { qCDebug(ServiceLogger) << "Calendar open status changed:" << isOpen; //æ¯�次开å�¯æ—¥åŽ†æ—¶éœ€è¦�å�Œæ­¥æ•°æ�® if (isOpen) { QMap::iterator iter = m_accountModuleMap.begin(); for (; iter != m_accountModuleMap.end(); ++iter) { iter.value()->accountDownload(); } } } void DAccountManageModule::unionIDDataMerging() { qCDebug(ServiceLogger) << "Starting UnionID data merging process."; m_accountList = m_accountManagerDB->getAccountList(); //如果ä¸�支æŒ�云å�Œæ­¥ if (!m_isSupportUid) { DAccount::Ptr unionidDB; auto hasUnionid = [ =, &unionidDB](const DAccount::Ptr & account) { if (account->accountType() == DAccount::Account_UnionID) { unionidDB = account; return true; } return false; }; //如果数æ�®åº“中有unionidå¸�户 if (std::any_of(m_accountList.begin(), m_accountList.end(), hasUnionid)) { //如果包å�«åˆ™ç§»é™¤ removeUIdAccount(unionidDB); } return; } DAccount::Ptr accountUnionid = m_syncFileManage->getuserInfo(); qCDebug(ServiceLogger) << "Fetched UnionID user info. Account ID:" << (accountUnionid.isNull() ? "null" : accountUnionid->accountID()); DAccount::Ptr unionidDB; auto hasUnionid = [ =, &unionidDB](const DAccount::Ptr & account) { if (account->accountType() == DAccount::Account_UnionID) { unionidDB = account; return true; } return false; }; //如果unionidå¸�户ä¸�存在,则判断数æ�®åº“中是å�¦æœ‰ç™»é™†å‰�的信æ�¯ //若有则移除 if (accountUnionid.isNull() || accountUnionid->accountID().isEmpty()) { qCDebug(ServiceLogger) << "No active UnionID session. Checking for stale UID account in DB."; //如果数æ�®åº“中有unionidå¸�户 if (std::any_of(m_accountList.begin(), m_accountList.end(), hasUnionid)) { qCDebug(ServiceLogger) << "Removing existing UID account:" << unionidDB->accountID(); removeUIdAccount(unionidDB); } } else { //如果unionID登陆了 //如果数æ�®åº“中有unionidå¸�户 if (std::any_of(m_accountList.begin(), m_accountList.end(), hasUnionid)) { //如果是一个å¸�户则判断信æ�¯æ˜¯å�¦ä¸€è‡´ï¼Œä¸�一致需更新 if (unionidDB->accountName() == accountUnionid->accountName()) { qCDebug(ServiceLogger) << "Updating existing UID account:" << unionidDB->accountID(); updateUIdAccount(unionidDB, accountUnionid); } else { qCDebug(ServiceLogger) << "Replacing UID account - Old:" << unionidDB->accountID() << "New:" << accountUnionid->accountID(); removeUIdAccount(unionidDB); addUIdAccount(accountUnionid); } } else { qCDebug(ServiceLogger) << "Adding new UID account:" << accountUnionid->accountID(); addUIdAccount(accountUnionid); } } } void DAccountManageModule::initAccountDBusInfo(const DAccount::Ptr &account) { qCDebug(ServiceLogger) << "Initializing DBus info for account:" << account->accountID(); QString typeStr = ""; switch (account->accountType()) { case DAccount::Type::Account_UnionID: typeStr = "uid"; break; case DAccount::Type::Account_CalDav: typeStr = "caldav"; break; default: typeStr = "default"; break; } QString sortID = DDataBase::createUuid().mid(0, 5); account->setAccountState(DAccount::AccountState::Account_Setting | DAccount::Account_Calendar); setUidSwitchStatus(account); //设置DBus路径和数æ�®åº“å�� //account account->setAccountType(DAccount::Account_UnionID); account->setDtCreate(QDateTime::currentDateTime()); account->setDbName(QString("account_%1_%2.db").arg(typeStr).arg(sortID)); account->setDbusPath(QString("%1/account_%2_%3").arg(serviceBasePath).arg(typeStr).arg(sortID)); account->setDbusInterface(accountServiceInterface); } void DAccountManageModule::removeUIdAccount(const DAccount::Ptr &uidAccount) { qCDebug(ServiceLogger) << "Removing UID account:" << uidAccount->accountID(); //å¸�户列表移除uidå¸�户 m_accountList.removeOne(uidAccount); //移除对应的数æ�®åº“ ,å�œæ­¢å¯¹åº”的定时器 DAccountModule::Ptr accountModule(new DAccountModule(uidAccount)); accountModule->removeDB(); accountModule->downloadTaskhanding(2); //å¸�户管ç�†æ•°æ�®åº“中删除相关数æ�® m_accountManagerDB->deleteAccountInfo(uidAccount->accountID()); } void DAccountManageModule::addUIdAccount(const DAccount::Ptr &uidAccount) { qCDebug(ServiceLogger) << "Adding new UID account to DB:" << uidAccount->accountID(); //å¸�户管ç�†æ•°æ�®åº“中添加uidå¸�户 initAccountDBusInfo(uidAccount); m_accountManagerDB->addAccountInfo(uidAccount); m_accountList.append(uidAccount); } void DAccountManageModule::updateUIdAccount(const DAccount::Ptr &oldAccount, const DAccount::Ptr &uidAccount) { qCDebug(ServiceLogger) << "Updating UID account info for:" << oldAccount->accountID(); oldAccount->avatar() = uidAccount->avatar(); oldAccount->displayName() = uidAccount->displayName(); setUidSwitchStatus(oldAccount); m_accountManagerDB->updateAccountInfo(oldAccount); } void DAccountManageModule::setUidSwitchStatus(const DAccount::Ptr &account) { qCDebug(ServiceLogger) << "Setting UID switch status for account:" << account->accountID(); //获å�–控制中心开关状æ€� bool calendarSwitch = m_syncFileManage->getSyncoperation()->optGetCalendarSwitcher().switch_state; //获å�–å¸�户信æ�¯çжæ€� DAccount::AccountStates accountState = account->accountState(); accountState.setFlag(DAccount::Account_Open, calendarSwitch); account->setAccountState(accountState); } // 获å�–通用é…�ç½® DCalendarGeneralSettings::Ptr DAccountManageModule::getGeneralSettings() { qCDebug(ServiceLogger) << "Getting general settings."; auto cg = m_accountManagerDB->getCalendarGeneralSettings(); if (getFirstDayOfWeekSource() == DCalendarGeneralSettings::Source_System) { qCDebug(ServiceLogger) << "First day of week source is System."; // deepin23使用dconfig存储系统é…�ç½® if (m_reginFormatConfig->isValid()) { bool ok; auto dayofWeek = Qt::DayOfWeek(m_reginFormatConfig->value(firstDayOfWeek_key).toInt(&ok)); if (ok) { cg->setFirstDayOfWeek(dayofWeek); } else { qWarning() << "Unable to get first day of week from control center config file"; } } else { // 在deepin20.9使用dbus获å�–系统é…�ç½® qCDebug(ServiceLogger) << "Using DBus to get first day of week."; cg->setFirstDayOfWeek(m_timeDateDbus.weekBegins()); } } if (getTimeFormatTypeSource() == DCalendarGeneralSettings::Source_System) { qCDebug(ServiceLogger) << "Time format source is System."; // 在deepin23使用dconfig获å�–系统é…�ç½® if (m_reginFormatConfig->isValid()) { auto shortTimeFormat = m_reginFormatConfig->value(shortTimeFormat_key).toString(); if (shortTimeFormat.isEmpty()) { qWarning() << "Unable to short time format from control center config file"; } else if (shortTimeFormat.contains("ap")) { cg->setTimeShowType(DCalendarGeneralSettings::Twelve); } else { cg->setTimeShowType(DCalendarGeneralSettings::TwentyFour); } } else { // 在deepin20.9使用dbus获å�–系统é…�ç½® qCDebug(ServiceLogger) << "Using DBus to get time format."; if (m_timeDateDbus.shortTimeFormat() == 0) { cg->setTimeShowType(DCalendarGeneralSettings::Twelve); } else { cg->setTimeShowType(DCalendarGeneralSettings::TwentyFour); } } } return cg; } // 更改通用é…�ç½® void DAccountManageModule::setGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet) { qCDebug(ServiceLogger) << "Setting general settings in DB."; m_accountManagerDB->setCalendarGeneralSettings(cgSet); }; void DAccountManageModule::slotFirstDayOfWeek(const int firstDay) { qCDebug(ServiceLogger) << "Slot: First day of week changed to:" << firstDay; if (getfirstDayOfWeek() != firstDay) { setFirstDayOfWeek(firstDay); emit firstDayOfWeekChange(); } } void DAccountManageModule::slotTimeFormatType(const int timeType) { qCDebug(ServiceLogger) << "Slot: Time format type changed to:" << timeType; if (getTimeFormatType() != timeType) { setTimeFormatType(timeType); emit timeFormatTypeChange(); } } DCalendarGeneralSettings::GeneralSettingSource DAccountManageModule::getFirstDayOfWeekSource() { // qCDebug(ServiceLogger) << "Getting first day of week source."; auto val = m_settings.value(firstDayOfWeekSource_key, DCalendarGeneralSettings::Source_Database); return static_cast(val.toInt()); } void DAccountManageModule::setFirstDayOfWeekSource(const DCalendarGeneralSettings::GeneralSettingSource source) { qCDebug(ServiceLogger) << "Setting first day of week source to:" << source; m_settings.setValue(firstDayOfWeekSource_key, source); emit firstDayOfWeekChange(); } DCalendarGeneralSettings::GeneralSettingSource DAccountManageModule::getTimeFormatTypeSource() { // qCDebug(ServiceLogger) << "Getting time format type source."; auto val = m_settings.value(shortTimeFormatSource_key, DCalendarGeneralSettings::GeneralSettingSource::Source_Database); return static_cast(val.toInt()); } void DAccountManageModule::setTimeFormatTypeSource(const DCalendarGeneralSettings::GeneralSettingSource source) { qCDebug(ServiceLogger) << "Setting time format type source to:" << source; m_settings.setValue(shortTimeFormatSource_key, source); emit timeFormatTypeChange(); } void DAccountManageModule::slotUidLoginStatueChange(const int status) { qCDebug(ServiceLogger) << "Slot: UID login status changed to:" << status; //因为有时登录æˆ�功会触å�‘2次 static QList oldStatus{}; //登录æˆ�功å�Žä¼šè§¦å�‘多次,状æ€�也ä¸�一致。比如登录å�Žä¼šè¿žç»­è§¦å�‘ 1 -- 4 -- 1 ä¿¡å�· if (!oldStatus.contains(status)) { oldStatus.append(status); qCDebug(ServiceLogger) << "New status added to history:" << status; } else { //如果当å‰�状æ€�和上次状æ€�一直,则退出 qCDebug(ServiceLogger) << "Duplicate status received, ignoring:" << status; return; } //1:登陆æˆ�功 2:登陆å�–消 3:登出 4:获å�–æœ�务端é…�置的应用数æ�®æˆ�功 QDBusConnection::RegisterOptions options = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; QDBusConnection sessionBus = QDBusConnection::sessionBus(); switch (status) { case 1: { qCDebug(ServiceLogger) << "Processing login success"; //移除登出状æ€� if (oldStatus.contains(3)) { oldStatus.removeAt(oldStatus.indexOf(3)); qCDebug(ServiceLogger) << "Removed logout status from history"; } //登陆æˆ�功 DAccount::Ptr accountUnionid = m_syncFileManage->getuserInfo(); if (accountUnionid.isNull() || accountUnionid->accountName().isEmpty()) { qCWarning(ServiceLogger) << "Failed to get account information after login"; oldStatus.removeAt(oldStatus.indexOf(1)); return; } qCDebug(ServiceLogger) << "Adding UID account after login:" << accountUnionid->accountID(); addUIdAccount(accountUnionid); DAccountModule::Ptr accountModule = DAccountModule::Ptr(new DAccountModule(accountUnionid)); QObject::connect(accountModule.data(), &DAccountModule::signalSettingChange, this, &DAccountManageModule::slotSettingChange); m_accountModuleMap[accountUnionid->accountID()] = accountModule; DAccountService::Ptr accountService = DAccountService::Ptr(new DAccountService(accountUnionid->dbusPath(), accountUnionid->dbusInterface(), accountModule, this)); if (!sessionBus.registerObject(accountService->getPath(), accountService->getInterface(), accountService.data(), options)) { qCWarning(ServiceLogger) << "Failed to register account service - Error:" << sessionBus.lastError().message(); } else { qCDebug(ServiceLogger) << "Successfully registered account service"; m_AccountServiceMap[accountUnionid->accountType()].insert(accountUnionid->accountID(), accountService); if (accountUnionid->accountState().testFlag(DAccount::Account_Open)) { qCDebug(ServiceLogger) << "Starting download task for new account"; accountModule->downloadTaskhanding(0); } } } break; case 3: { qCDebug(ServiceLogger) << "Processing logout"; //移除登录状æ€� if (oldStatus.contains(1)) { oldStatus.removeAt(oldStatus.indexOf(1)); qCDebug(ServiceLogger) << "Removed login status from history"; } //登出 if (m_AccountServiceMap[DAccount::Type::Account_UnionID].size() > 0) { qCDebug(ServiceLogger) << "Removing UID account services"; //如果存在UIDå¸�户则移除相关信æ�¯ //移除æœ�务并注销 QString accountID = m_AccountServiceMap[DAccount::Type::Account_UnionID].firstKey(); DAccountService::Ptr accountService = m_AccountServiceMap[DAccount::Type::Account_UnionID].first(); m_AccountServiceMap[DAccount::Type::Account_UnionID].clear(); sessionBus.unregisterObject(accountService->getPath()); //移除uidå¸�户信æ�¯ //删除对应数æ�®åº“ m_accountModuleMap[accountID]->removeDB(); m_accountModuleMap[accountID]->downloadTaskhanding(2); m_accountList.removeOne(m_accountModuleMap[accountID]->account()); m_accountModuleMap.remove(accountID); m_accountManagerDB->deleteAccountInfo(accountID); } } break; default: //其它状æ€�当å‰�ä¸�å�šå¤„ç�† return; } emit signalLoginStatusChange(); } void DAccountManageModule::slotSwitcherChange(const bool state) { qCDebug(ServiceLogger) << "Calendar switcher changed to:" << state; foreach (auto schedule, m_accountList) { if (schedule->accountType() == DAccount::Account_UnionID) { qCDebug(ServiceLogger) << "Updating UID account state for account:" << schedule->accountID(); if (state) { schedule->setAccountState(schedule->accountState() | DAccount::Account_Open); qCDebug(ServiceLogger) << "Starting download task for enabled account"; m_accountModuleMap[schedule->accountID()]->downloadTaskhanding(1); } else { schedule->setAccountState(schedule->accountState() & ~DAccount::Account_Open); qCDebug(ServiceLogger) << "Stopping tasks for disabled account"; m_accountModuleMap[schedule->accountID()]->downloadTaskhanding(2); m_accountModuleMap[schedule->accountID()]->uploadTaskHanding(0); } emit m_accountModuleMap[schedule->accountID()]->signalAccountState(); return; } } } void DAccountManageModule::slotSettingChange() { qCDebug(ServiceLogger) << "Slot: Settings changed, updating general settings."; DCalendarGeneralSettings::Ptr newSetting = getGeneralSettings(); if (newSetting->firstDayOfWeek() != m_generalSetting->firstDayOfWeek()) { qCDebug(ServiceLogger) << "First day of week changed from" << m_generalSetting->firstDayOfWeek() << "to" << newSetting->firstDayOfWeek(); m_generalSetting->setFirstDayOfWeek(newSetting->firstDayOfWeek()); emit firstDayOfWeekChange(); } if (newSetting->timeShowType() != m_generalSetting->timeShowType()) { qCDebug(ServiceLogger) << "Time format type changed from" << m_generalSetting->timeShowType() << "to" << newSetting->timeShowType(); m_generalSetting->setTimeShowType(m_generalSetting->timeShowType()); emit timeFormatTypeChange(); } } void DAccountManageModule::slotClientIsOpen() { // qCDebug(ServiceLogger) << "Checking if client is open..."; //如果日历界é�¢ä¸�存在则退出 QProcess process; process.start("pidof", QStringList() << "dde-calendar"); if (!process.waitForFinished(5000)) { qCWarning(ServiceLogger) << "pidof command timeout"; return; } QString strResult = QString::fromUtf8(process.readAllStandardOutput()).trimmed(); static QString preResult = ""; if (preResult == strResult) { qCDebug(ServiceLogger) << "Calendar client status unchanged"; return; } else { qCDebug(ServiceLogger) << "Calendar client status changed - Running:" << !strResult.isEmpty(); preResult = strResult; DServiceExitControl exitControl; exitControl.setClientIsOpen(!strResult.isEmpty()); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager/daccountmanagemodule.h000066400000000000000000000102011523260663500337330ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTMANAGEMODULE_H #define DACCOUNTMANAGEMODULE_H #include "dcalendargeneralsettings.h" #include "syncfilemanage.h" #include "daccount.h" #include "daccountmodule.h" #include "daccountmanagerdatabase.h" #include "daccountservice.h" #include "dbustimedate.h" #include #include #include #include //å¸�户类型总数,若支æŒ�的类型增加则需è¦�修改 const int accountTypeCount = 3; //å¸�户管ç�†æ¨¡å�— class DAccountManageModule : public QObject { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAccountManageModule(QObject *parent = nullptr); //获å�–所有å¸�户信æ�¯ QString getAccountList(); //获å�–通用设置 QString getCalendarGeneralSettings(); //设置通用设置 void setCalendarGeneralSettings(const QString &cgSet); int getfirstDayOfWeek(); void setFirstDayOfWeek(const int firstday); int getTimeFormatType(); void setTimeFormatType(const int timeType); DCalendarGeneralSettings::GeneralSettingSource getFirstDayOfWeekSource(); void setFirstDayOfWeekSource(const DCalendarGeneralSettings::GeneralSettingSource source); DCalendarGeneralSettings::GeneralSettingSource getTimeFormatTypeSource(); void setTimeFormatTypeSource(const DCalendarGeneralSettings::GeneralSettingSource source); void remindJob(const QString &accountID, const QString &alarmID); /** * @brief updateRemindSchedules 更新未æ�¥10分钟的æ��醒任务 * @param isClear 是å�¦æ¸…空æ��醒任务数æ�®åº“ */ void updateRemindSchedules(bool isClear); /** * @brief notifyMsgHanding 通知æ��示框交互处ç�† * @param accountID å¸�户id * @param alarmID æ��醒任务id * @param operationNum æ“�作编å�· , 1:打开日历,2:ç¨�å�Žæ��醒 3: 明天æ��醒 4: æ��å‰�1天æ��醒 5:关闭按钮 */ void notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum); void downloadByAccountID(const QString &accountID); void uploadNetWorkAccountData(); //账户登录 void login(); //账户登出 void logout(); //是å�¦æ”¯æŒ�UID云å�Œæ­¥ bool isSupportUid(); void calendarOpen(bool isOpen); private: void unionIDDataMerging(); void initAccountDBusInfo(const DAccount::Ptr &account); //移除uidå¸�户 void removeUIdAccount(const DAccount::Ptr &uidAccount); //添加uidå¸�户 void addUIdAccount(const DAccount::Ptr &uidAccount); //æ›´æ–°uidå¸�户 void updateUIdAccount(const DAccount::Ptr &oldAccount, const DAccount::Ptr &uidAccount); //获å�–设置开关状æ€� void setUidSwitchStatus(const DAccount::Ptr &account); // 获å�–通用é…�ç½® DCalendarGeneralSettings::Ptr getGeneralSettings(); // ä¿�存通用é…�ç½® void setGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet); signals: void firstDayOfWeekChange(); void timeFormatTypeChange(); void signalLoginStatusChange(); public slots: void slotFirstDayOfWeek(const int firstDay); void slotTimeFormatType(const int timeType); //TODO:监å�¬ç½‘络å¸�户管ç�†ä¿¡å�·å’ŒUnion ID登陆退出状æ€� void slotUidLoginStatueChange(const int status); //控制中心的å�Œæ­¥å¼€å…³ void slotSwitcherChange(const bool state); //通用设置å�‘生改å�˜ void slotSettingChange(); //定时判断日历界é�¢æ˜¯å�¦æ‰“å¼€ void slotClientIsOpen(); private: SyncFileManage *m_syncFileManage = nullptr; DAccountManagerDataBase::Ptr m_accountManagerDB; DAccount::List m_accountList; QMap m_accountModuleMap; QMap m_AccountServiceMap[accountTypeCount]; DCalendarGeneralSettings::Ptr m_generalSetting; DTK_CORE_NAMESPACE::DConfig *m_reginFormatConfig; QTimer m_timer; bool m_isSupportUid = false; QSettings m_settings; DBusTimedate m_timeDateDbus; }; #endif // DACCOUNTMANAGEMODULE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager/daccountmodule.cpp000066400000000000000000001377371523260663500331450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmodule.h" #include "units.h" #include "dscheduletype.h" #include "dschedulequerypar.h" #include "memorycalendar.h" #include "lunarandfestival/lunardateinfo.h" #include "lunarandfestival/lunarmanager.h" #include "dbus/dbusuiopenschedule.h" #include "dalarmmanager.h" #include "syncfilemanage.h" #include "csystemdtimercontrol.h" #include "dsyncdatafactory.h" #include "unionIDDav/dunioniddav.h" #include "ddatasyncbase.h" #include "dbusnotify.h" #include #include #define UPDATEREMINDJOBTIMEINTERVAL 1000 * 60 * 10 //æ��醒任务更新时间间隔毫秒数(10分钟) DAccountModule::DAccountModule(const DAccount::Ptr &account, QObject *parent) : QObject(parent) , m_account(account) , m_accountDB(new DAccountDataBase(account)) , m_alarm(new DAlarmManager) , m_dataSync(DSyncDataFactory::createDataSync(m_account)) { qCDebug(ServiceLogger) << "DAccountModule constructor called for account:" << account->accountID(); QString newDbPath = getDBPath(); m_accountDB->setDBPath(newDbPath + "/" + account->dbName()); m_accountDB->initDBData(); m_accountDB->getAccountInfo(m_account); //å…³è�”打开日历界é�¢ connect(m_alarm.data(), &DAlarmManager::signalCallOpenCalendarUI, this, &DAccountModule::slotOpenCalendar); if (m_dataSync != nullptr) { connect(m_dataSync, &DDataSyncBase::signalSyncState, this, &DAccountModule::slotSyncState); connect(m_dataSync, &DDataSyncBase::signalUpdate, this, &DAccountModule::slotDateUpdate); } //å…³è�”关闭æ��醒弹窗 connect(this, &DAccountModule::signalCloseNotification, m_alarm->getdbusnotify(), &DBusNotify::closeNotification); qCDebug(ServiceLogger) << "DAccountModule constructed for account:" << account->accountID(); } DAccountModule::~DAccountModule() { qCDebug(ServiceLogger) << "DAccountModule destructor called for account:" << (m_account ? m_account->accountID() : "unknown"); if (m_dataSync != nullptr) { delete m_dataSync; m_dataSync = nullptr; } } QString DAccountModule::getAccountInfo() { // qCDebug(ServiceLogger) << "Getting account info for:" << m_account->accountID(); QString accountInfo; DAccount::toJsonString(m_account, accountInfo); return accountInfo; } bool DAccountModule::getExpand() { // qCDebug(ServiceLogger) << "Getting expand state for account:" << m_account->accountID(); return m_account->isExpandDisplay(); } void DAccountModule::setExpand(const bool &isExpand) { qCDebug(ServiceLogger) << "Setting expand state to" << isExpand << "for account:" << m_account->accountID(); if (m_account->isExpandDisplay() != isExpand) { m_account->setIsExpandDisplay(isExpand); m_accountDB->updateAccountInfo(); } } int DAccountModule::getAccountState() { // qCDebug(ServiceLogger) << "Getting account state for:" << m_account->accountID(); return int(m_account->accountState()); } void DAccountModule::setAccountState(const int accountState) { qCDebug(ServiceLogger) << "Setting account state to" << accountState << "for account:" << m_account->accountID(); if (int(m_account->accountState()) != accountState) { m_account->setAccountState(static_cast(accountState)); m_accountDB->updateAccountInfo(); } } int DAccountModule::getSyncState() { // qCDebug(ServiceLogger) << "Getting sync state for account:" << m_account->accountID(); return m_account->syncState(); } QString DAccountModule::getSyncFreq() { // qCDebug(ServiceLogger) << "Getting sync frequency for account:" << m_account->accountID(); return DAccount::syncFreqToJsonString(m_account); } void DAccountModule::setSyncFreq(const QString &freq) { qCDebug(ServiceLogger) << "Setting sync frequency for account:" << m_account->accountID() << "freq:" << freq; DAccount::SyncFreqType syncType = m_account->syncFreq(); DAccount::syncFreqFromJsonString(m_account, freq); if (syncType == m_account->syncFreq()) { qCDebug(ServiceLogger) << "Sync frequency unchanged for account:" << m_account->accountID(); return; } m_accountDB->updateAccountInfo(); downloadTaskhanding(1); } QString DAccountModule::getScheduleTypeList() { qCDebug(ServiceLogger) << "Getting schedule type list for account:" << m_account->accountID(); DScheduleType::List typeList = m_accountDB->getScheduleTypeList(); //排åº� std::sort(typeList.begin(), typeList.end()); QString typeListStr; DScheduleType::toJsonListString(typeList, typeListStr); return typeListStr; } QString DAccountModule::getScheduleTypeByID(const QString &typeID) { qCDebug(ServiceLogger) << "Getting schedule type by ID:" << typeID << "for account:" << m_account->accountID(); DScheduleType::Ptr scheduleType = m_accountDB->getScheduleTypeByID(typeID); QString typeStr; DScheduleType::toJsonString(scheduleType, typeStr); return typeStr; } QString DAccountModule::createScheduleType(const QString &typeInfo) { qCDebug(ServiceLogger) << "Creating schedule type for account:" << m_account->accountID() << "with info:" << typeInfo; DScheduleType::Ptr scheduleType; DScheduleType::fromJsonString(scheduleType, typeInfo); //如果颜色为用户自定义则需è¦�在数æ�®åº“中记录 if (scheduleType->typeColor().colorID() == "") { scheduleType->setColorID(DDataBase::createUuid()); DTypeColor::Ptr typeColor(new DTypeColor(scheduleType->typeColor())); typeColor->setPrivilege(DTypeColor::PriUser); m_accountDB->addTypeColor(typeColor); qCDebug(ServiceLogger) << "Added custom color for schedule type:" << typeColor->colorID(); //添加创建颜色任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(typeColor->colorID()); m_accountDB->addUploadTask(uploadTask); qCDebug(ServiceLogger) << "Added color upload task for network account"; } } //设置创建时间 scheduleType->setDtCreate(QDateTime::currentDateTime()); QString scheduleTypeID = m_accountDB->createScheduleType(scheduleType); //如果为网络日程则需è¦�上传任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_ScheduleType); uploadTask->setObjectId(scheduleTypeID); m_accountDB->addUploadTask(uploadTask); qCDebug(ServiceLogger) << "Added schedule type upload task for network account"; //å¼€å�¯ä¸Šä¼ ä»»åŠ¡ uploadNetWorkAccountData(); } emit signalScheduleTypeUpdate(); return scheduleTypeID; } bool DAccountModule::deleteScheduleTypeByID(const QString &typeID) { qCDebug(ServiceLogger) << "Deleting schedule type by ID:" << typeID << "for account:" << m_account->accountID(); //如果日程类型被使用需è¦�删除对应到日程信æ�¯ if (m_accountDB->scheduleTypeByUsed(typeID)) { qCDebug(ServiceLogger) << "Schedule type" << typeID << "is in use, deleting associated schedules."; QStringList scheduleIDList = m_accountDB->getScheduleIDListByTypeID(typeID); foreach (auto scheduleID, scheduleIDList) { closeNotification(scheduleID); //添加删除日程任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(scheduleID); m_accountDB->addUploadTask(uploadTask); } } //æ›´æ–°æ��醒任务 updateRemindSchedules(false); m_accountDB->deleteSchedulesByScheduleTypeID(typeID, !m_account->isNetWorkAccount()); emit signalScheduleUpdate(); } DScheduleType::Ptr scheduleType = m_accountDB->getScheduleTypeByID(typeID); //æ ¹æ�®å¸�户是å�¦ä¸ºç½‘络å¸�户需è¦�添加任务列表中,并设置弱删除 if (m_account->isNetWorkAccount()) { QStringList scheduleIDList = m_accountDB->getScheduleIDListByTypeID(typeID); //弱删除 m_accountDB->deleteScheduleTypeByID(typeID); //å�‘é€�æ“�作内容给任务列表 DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_ScheduleType); uploadTask->setObjectId(typeID); m_accountDB->addUploadTask(uploadTask); //如果颜色ä¸�为系统类型则删除 if(scheduleType->typeColor().privilege() != DTypeColor::PriSystem){ m_accountDB->deleteTypeColor(scheduleType->typeColor().colorID()); DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(scheduleType->typeColor().colorID()); m_accountDB->addUploadTask(uploadTask); } //å¼€å�¯ä¸Šä¼ ä»»åŠ¡ uploadNetWorkAccountData(); } else { m_accountDB->deleteScheduleTypeByID(typeID, 1); if(scheduleType->typeColor().privilege() != DTypeColor::PriSystem){ m_accountDB->deleteTypeColor(scheduleType->typeColor().colorID()); } } if (scheduleType.isNull()) { qCWarning(ServiceLogger) << "scheduleType isNull, typeID:" << typeID; return false; } //如果为用户颜色则删除颜色 if (scheduleType->typeColor().privilege() > 1) { m_accountDB->deleteTypeColor(scheduleType->typeColor().colorID()); } emit signalScheduleTypeUpdate(); return true; } bool DAccountModule::scheduleTypeByUsed(const QString &typeID) { // qCDebug(ServiceLogger) << "Checking if schedule type" << typeID << "is used for account:" << m_account->accountID(); return m_accountDB->scheduleTypeByUsed(typeID); } bool DAccountModule::updateScheduleType(const QString &typeInfo) { qCDebug(ServiceLogger) << "Updating schedule type for account:" << m_account->accountID() << "with info:" << typeInfo; DScheduleType::Ptr scheduleType; DScheduleType::fromJsonString(scheduleType, typeInfo); DScheduleType::Ptr oldScheduleType = m_accountDB->getScheduleTypeByID(scheduleType->typeID()); //如果颜色有改动 if (oldScheduleType.isNull()) { qCWarning(ServiceLogger) << "get oldScheduleType error,typeID:" << scheduleType->typeID(); } else { qCDebug(ServiceLogger) << "oldScheduleType:" << oldScheduleType->typeID(); if (oldScheduleType->typeColor() != scheduleType->typeColor()) { if (!oldScheduleType->typeColor().isSysColorInfo()) { m_accountDB->deleteTypeColor(oldScheduleType->typeColor().colorID()); //添加删除颜色任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(oldScheduleType->typeColor().colorID()); m_accountDB->addUploadTask(uploadTask); } } if (!scheduleType->typeColor().isSysColorInfo()) { DTypeColor::Ptr typeColor(new DTypeColor(scheduleType->typeColor())); typeColor->setPrivilege(DTypeColor::PriUser); m_accountDB->addTypeColor(typeColor); scheduleType->setColorID(typeColor->colorID()); //添加创建颜色任务 if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); // uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_Color); uploadTask->setObjectId(typeColor->colorID()); m_accountDB->addUploadTask(uploadTask); } } } } scheduleType->setDtUpdate(QDateTime::currentDateTime()); bool isSucc = m_accountDB->updateScheduleType(scheduleType); if (isSucc) { qCDebug(ServiceLogger) << "Schedule type updated successfully"; if (m_account->isNetWorkAccount()) { DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Modify); uploadTask->setTaskObject(DUploadTaskData::Task_ScheduleType); uploadTask->setObjectId(scheduleType->typeID()); m_accountDB->addUploadTask(uploadTask); //å¼€å�¯ä¸Šä¼ ä»»åŠ¡ uploadNetWorkAccountData(); } //如果ä¸�是修改显示状æ€�则å�‘é€�日程类型改å�˜ä¿¡å�· if (oldScheduleType->showState() == scheduleType->showState()) { qCDebug(ServiceLogger) << "Schedule type show state unchanged"; emit signalScheduleTypeUpdate(); } else { qCDebug(ServiceLogger) << "Schedule type show state changed"; //日程改å�˜ä¿¡å�· emit signalScheduleUpdate(); } } qCDebug(ServiceLogger) << "Schedule type update result:" << isSucc; return isSucc; } QString DAccountModule::createSchedule(const QString &scheduleInfo) { qCDebug(ServiceLogger) << "Creating schedule for account:" << m_account->accountID() << "with info:" << scheduleInfo; DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleInfo); schedule->setCreated(QDateTime::currentDateTime()); QString scheduleID = m_accountDB->createSchedule(schedule); //æ ¹æ�®æ˜¯å�¦ä¸ºç½‘络å¸�户判断是å�¦éœ€è¦�更新任务列表 if (m_account->isNetWorkAccount()) { qCDebug(ServiceLogger) << "Schedule type is network account"; DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Create); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(scheduleID); m_accountDB->addUploadTask(uploadTask); qCDebug(ServiceLogger) << "Added schedule upload task for network account"; //å¼€å�¯ä¸Šä¼ ä»»åŠ¡ uploadNetWorkAccountData(); } //æ ¹æ�®æ˜¯å�¦ä¸ºæ��醒日程更新æ��醒任务 if (schedule->alarms().size() > 0) { qCDebug(ServiceLogger) << "Updating reminders for new schedule:" << scheduleID; updateRemindSchedules(false); } //å�‘é€�日程更新信å�· emit signalScheduleUpdate(); return scheduleID; } bool DAccountModule::updateSchedule(const QString &scheduleInfo) { qCDebug(ServiceLogger) << "Updating schedule for account:" << m_account->accountID() << "with info:" << scheduleInfo; //æ ¹æ�®æ˜¯å�¦ä¸ºæ��醒日程更新æ��醒任务 DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleInfo); DSchedule::Ptr oldSchedule = m_accountDB->getScheduleByScheduleID(schedule->uid()); schedule->setLastModified(QDateTime::currentDateTime()); schedule->setRevision(schedule->revision() + 1); //如果旧日程为æ��醒日程 if (oldSchedule->alarms().size() > 0) { qCDebug(ServiceLogger) << "Old schedule had alarms, checking for reminders to update/delete."; //æ ¹æ�®æ—¥ç¨‹ID获å�–æ��醒日程信æ�¯ DRemindData::List remindList = m_accountDB->getRemindByScheduleID(schedule->schedulingID()); DRemindData::List deleteRemind; //如果是é‡�å¤�日程且é‡�å¤�规则ä¸�一样 if ((schedule->recurs() || oldSchedule->recurs()) && *schedule->recurrence() != *oldSchedule->recurrence()) { QDateTime dtEnd = schedule->dtStart(); for (int i = remindList.size() - 1; i >= 0; --i) { dtEnd = dtEnd > remindList.at(i)->dtStart() ? dtEnd : remindList.at(i)->dtStart(); } if (remindList.size() > 0) { //获å�–新日程的é‡�å¤�æ—¶é—´ QList dtList = schedule->recurrence()->timesInInterval(schedule->dtStart(), dtEnd); foreach (auto remind, remindList) { //如果生æˆ�的开始时间列表内ä¸�包å�«æ��醒日程的开始时间,则表示该é‡�å¤�日程被删除 if (!dtList.contains(remind->dtStart())) { //如果改日程已ç»�æ��醒,且通知弹框未æ“�作 if (remind->notifyid() > 0) { emit signalCloseNotification(static_cast(remind->notifyid())); deleteRemind.append(remind); } else if (remind->dtRemind() > QDateTime::currentDateTime()) { //删除没有触å�‘çš„æ��醒日程 deleteRemind.append(remind); } } } } } else { qCDebug(ServiceLogger) << "Not a repeat schedule"; //ä¸�是é‡�å¤�日程 if (remindList.size() > 0 && remindList.at(0)->notifyid() > 0) { deleteRemind.append(remindList.at(0)); } } for (int i = 0; i < deleteRemind.size(); ++i) { m_accountDB->deleteRemindInfoByAlarmID(deleteRemind.at(i)->alarmID()); } } bool ok = m_accountDB->updateSchedule(schedule); //如果存在æ��醒 if (oldSchedule->alarms().size() > 0 || schedule->alarms().size() > 0) { updateRemindSchedules(false); } emit signalScheduleUpdate(); //æ ¹æ�®æ˜¯å�¦ä¸ºç½‘络å¸�户判断是å�¦éœ€è¦�更新任务列表 if (m_account->isNetWorkAccount()) { qCDebug(ServiceLogger) << "Schedule is network account"; DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Modify); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(schedule->uid()); m_accountDB->addUploadTask(uploadTask); //å¼€å�¯ä¸Šä¼ ä»»åŠ¡ uploadNetWorkAccountData(); } return ok; } QString DAccountModule::getScheduleByScheduleID(const QString &scheduleID) { qCDebug(ServiceLogger) << "Getting schedule by ID:" << scheduleID << "for account:" << m_account->accountID(); DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(scheduleID); QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); return scheduleStr; } bool DAccountModule::deleteScheduleByScheduleID(const QString &scheduleID) { qCDebug(ServiceLogger) << "Deleting schedule by ID:" << scheduleID << "for account:" << m_account->accountID(); //æ ¹æ�®æ˜¯å�¦ä¸ºç½‘络判断是å�¦éœ€è¦�弱删除 bool isOK; DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(scheduleID); if (m_account->isNetWorkAccount()) { qCDebug(ServiceLogger) << "Schedule is network account"; isOK = m_accountDB->deleteScheduleByScheduleID(scheduleID); //更新上传任务表 DUploadTaskData::Ptr uploadTask(new DUploadTaskData); uploadTask->setTaskType(DUploadTaskData::TaskType::Delete); uploadTask->setTaskObject(DUploadTaskData::Task_Schedule); uploadTask->setObjectId(scheduleID); m_accountDB->addUploadTask(uploadTask); //å¼€å�¯ä»»åŠ¡ uploadNetWorkAccountData(); } else { qCDebug(ServiceLogger) << "Schedule is not network account"; isOK = m_accountDB->deleteScheduleByScheduleID(scheduleID, 1); } //如果删除的是æ��醒日程 if (schedule->alarms().size() > 0) { qCDebug(ServiceLogger) << "Schedule has alarms, closing notification and updating remind schedules"; //关闭æ��醒消æ�¯å’Œå¯¹åº”的通知弹框 closeNotification(scheduleID); updateRemindSchedules(false); } emit signalScheduleUpdate(); return isOK; } QString DAccountModule::querySchedulesWithParameter(const QString ¶ms) { qCDebug(ServiceLogger) << "Querying schedules for account:" << m_account->accountID() << "with params:" << params; DScheduleQueryPar::Ptr queryPar = DScheduleQueryPar::fromJsonString(params); if (queryPar.isNull()) { qCWarning(ServiceLogger) << "Failed to parse query parameters."; return QString(); } DSchedule::List scheduleList; if (queryPar->queryType() == DScheduleQueryPar::Query_RRule) { qCDebug(ServiceLogger) << "Querying schedules by RRule"; scheduleList = m_accountDB->querySchedulesByRRule(queryPar->key(), queryPar->rruleType()); } else if (queryPar->queryType() == DScheduleQueryPar::Query_ScheduleID) { qCDebug(ServiceLogger) << "Querying schedule by ScheduleID"; DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(queryPar->key()); if (schedule.isNull()) { return QString(); } scheduleList.append(schedule); } else { qCDebug(ServiceLogger) << "Querying schedules by key"; scheduleList = m_accountDB->querySchedulesByKey(queryPar->key()); } bool extend = queryPar->queryType() == DScheduleQueryPar::Query_None; //æ ¹æ�®æ�¡ä»¶åˆ¤æ–­æ˜¯å�¦éœ€è¦�添加节å�‡æ—¥æ—¥ç¨‹ if (isChineseEnv() && extend && m_account->accountType() == DAccount::Account_Local) { qCDebug(ServiceLogger) << "Querying festival schedules"; scheduleList.append(getFestivalSchedule(queryPar->dtStart(), queryPar->dtEnd(), queryPar->key())); } qCDebug(ServiceLogger) << "Querying schedules result:" << scheduleList.size(); return DSchedule::toListString(params, scheduleList); } DSchedule::List DAccountModule::getRemindScheduleList(const QDateTime &dtStart, const QDateTime &dtEnd) { qCDebug(ServiceLogger) << "Getting remind schedule list for account:" << m_account->accountID() << "from" << dtStart << "to" << dtEnd; //获å�–范围内需è¦�æ��醒的日程信æ�¯ DSchedule::List scheduleList; //当å‰�最多æ��å‰�一周æ��醒。所以结æ�Ÿæ—¶é—´+8天 QMap scheduleMap = getScheduleTimesOn(dtStart, dtEnd.addDays(8), m_accountDB->getRemindSchedule(), false); QMap::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { foreach (auto schedule, iter.value()) { if (schedule->alarms().size() > 0 && schedule->alarms()[0]->time() >= dtStart && schedule->alarms()[0]->time() <= dtEnd) { scheduleList.append(schedule); } } } qCDebug(ServiceLogger) << "Remind schedule list size:" << scheduleList.size(); return scheduleList; } QString DAccountModule::getSysColors() { qCDebug(ServiceLogger) << "Getting system colors for account:" << m_account->accountID(); DTypeColor::List colorList = m_accountDB->getSysColor(); std::sort(colorList.begin(), colorList.end()); return DTypeColor::toJsonString(colorList); } DAccount::Ptr DAccountModule::account() const { // qCDebug(ServiceLogger) << "Getting account object."; return m_account; } void DAccountModule::updateRemindSchedules(bool isClear) { qCDebug(ServiceLogger) << "Updating remind schedules for account:" << m_account->accountID() << "isClear:" << isClear; //因为全天的当å‰�æ��醒日程会在开始时间延å�Ž9å°�æ—¶æ��醒 QDateTime dtCurrent = QDateTime::currentDateTime(); QDateTime dtStart = dtCurrent.addSecs(-9*60*60); QDateTime dtEnd = dtCurrent.addMSecs(UPDATEREMINDJOBTIMEINTERVAL); //获å�–未æ��醒的日程相关信æ�¯ DRemindData::List noRemindList = m_accountDB->getValidRemindJob(); //获å�–æ¯�个账户下需è¦�æ��醒的日程信æ�¯ DRemindData::List accountRemind; DSchedule::List scheduleList = getRemindScheduleList(dtStart, dtEnd); foreach (auto &remind, scheduleList) { DRemindData::Ptr remindData = DRemindData::Ptr(new DRemindData); remindData->setScheduleID(remind->uid()); remindData->setAccountID(m_account->accountID()); remindData->setDtStart(remind->dtStart()); remindData->setDtEnd(remind->dtEnd()); remindData->setRecurrenceId(remind->recurrenceId()); //由于获å�–的都是需è¦�æ��醒的日程,所以日程的æ��醒列表size必然是大于0çš„ remindData->setDtRemind(remind->alarms()[0]->time()); remindData->setNotifyid(0); remindData->setRemindCount(0); accountRemind.append(remindData); } //获å�–未æ��醒的ç¨�å�Žæ—¥ç¨‹ä¿¡æ�¯,由于15分钟å�Žï¼Œ1xxxå�Žç­‰ä¸�会修改æ��醒次数 //所以需è¦�æ ¹æ�®æ��醒时间,日程id,日程é‡�å¤�idæ�¥åˆ¤æ–­æ˜¯å�¦æ˜¯æ²¡æœ‰è¢«è§¦å�‘点æ��醒日程 for (int i = 0; i < noRemindList.size(); i++) { for (int j = accountRemind.size() - 1; j >= 0; j--) { if (accountRemind.at(j)->scheduleID() == noRemindList.at(i)->scheduleID() && accountRemind.at(j)->recurrenceId() == noRemindList.at(i)->recurrenceId() && accountRemind.at(j)->dtRemind() == noRemindList.at(i)->dtRemind()) //如果该日程没有被触å�‘æ��醒过(创建å�Žæ²¡æœ‰è¢«æ��醒,而ä¸�是æ��醒å�Žç‚¹äº†15分钟å�Žç­‰ä¸�改å�˜æ��醒次数的日程) //则移除 accountRemind.removeAt(j); } } if (isClear) { qCDebug(ServiceLogger) << "Clearing remind job database"; //清空数æ�®åº“ m_accountDB->clearRemindJobDatabase(); foreach (auto remind, noRemindList) { m_accountDB->createRemindInfo(remind); } } //添加从账户中获å�–到的需è¦�æ��醒的日程信æ�¯ foreach (auto remind, accountRemind) { m_accountDB->createRemindInfo(remind); } accountRemind.append(noRemindList); //æ›´æ–°æ��醒任务 m_alarm->updateRemind(accountRemind); } void DAccountModule::notifyMsgHanding(const QString &alarmID, const qint32 operationNum) { qCDebug(ServiceLogger) << "Handling notification message for alarm:" << alarmID << "operation:" << operationNum; DRemindData::Ptr remindData = m_accountDB->getRemindData(alarmID); remindData->setAccountID(m_account->accountID()); //如果相应的日程被删除,则ä¸�å�šå¤„ç�† if (remindData.isNull()) { qCDebug(ServiceLogger) << "Remind data is null, skipping notification handling"; return; } //如果为ç¨�å�Žæ��醒æ“�作则需è¦�更新对应的é‡�å¤�次数和æ��醒时间 qint64 Minute = 60 * 1000; qint64 Hour = Minute * 60; switch (operationNum) { case 2: { //ç¨�å�Žæ��醒 remindData->setRemindCount(remindData->remindCount() + 1); remindData->updateRemindTimeByCount(); m_accountDB->updateRemindInfo(remindData); } break; case 21: { //15minå�Žæ��醒 remindData->updateRemindTimeByMesc(15 * Minute); m_accountDB->updateRemindInfo(remindData); } break; case 22: { //一个å°�æ—¶å�Žæ��醒 remindData->updateRemindTimeByMesc(Hour); m_accountDB->updateRemindInfo(remindData); } break; case 23: { //四个å°�æ—¶å�Žæ��醒 remindData->updateRemindTimeByMesc(4 * Hour); m_accountDB->updateRemindInfo(remindData); } break; case 3: { //明天æ��醒 remindData->updateRemindTimeByMesc(24 * Hour); m_accountDB->updateRemindInfo(remindData); } break; case 1: { //打开日历 } break; case 4: { //æ��å‰�1天æ��醒 DSchedule::Ptr schedule = getScheduleByRemind(remindData); //TODO:如果是é‡�å¤�日程是å�¦éœ€è¦�修改所有日程的æ��醒?还是å�ªä¿®æ”¹æ­¤æ—¥ç¨‹ï¼Ÿ if (schedule->allDay()) { schedule->setAlarmType(DSchedule::Alarm_15Min_Front); } else { schedule->setAlarmType(DSchedule::Alarm_1Day_Front); } m_accountDB->updateSchedule(schedule); //删除对应æ��醒任务数æ�® m_accountDB->deleteRemindInfoByAlarmID(alarmID); emit signalScheduleUpdate(); } break; default: //删除对应æ��醒任务数æ�® m_accountDB->deleteRemindInfoByAlarmID(alarmID); break; } m_alarm->notifyMsgHanding(remindData, operationNum); } void DAccountModule::remindJob(const QString &alarmID) { qCDebug(ServiceLogger) << "Executing remind job for alarm:" << alarmID; DRemindData::Ptr remindData = m_accountDB->getRemindData(alarmID); remindData->setAccountID(m_account->accountID()); DSchedule::Ptr schedule = getScheduleByRemind(remindData); int notifyid = m_alarm->remindJob(remindData, schedule); remindData->setNotifyid(notifyid); m_accountDB->updateRemindInfo(remindData); } void DAccountModule::accountDownload() { qCDebug(ServiceLogger) << "Account download triggered for account:" << m_account->accountID(); if (m_dataSync != nullptr) { qCInfo(ServiceLogger) << "Starting data download for account:" << m_account->accountID(); m_dataSync->syncData(this->account()->accountID(), this->account()->accountName(), (int)this->account()->accountState(), DDataSyncBase::Sync_Upload | DDataSyncBase::Sync_Download); } else { qCWarning(ServiceLogger) << "Cannot download data - sync not available for account:" << m_account->accountID(); } } void DAccountModule::uploadNetWorkAccountData() { qCDebug(ServiceLogger) << "Upload network account data triggered for account:" << m_account->accountID(); if (m_dataSync != nullptr) { qCInfo(ServiceLogger) << "Starting data upload for account:" << m_account->accountID(); m_dataSync->syncData(this->account()->accountID(), this->account()->accountName(), (int)this->account()->accountState(), DDataSyncBase::Sync_Upload); } else { qCWarning(ServiceLogger) << "Cannot upload data - sync not available for account:" << m_account->accountID(); } } QString DAccountModule::getDtLastUpdate() { // qCDebug(ServiceLogger) << "Getting last update time for account:" << m_account->accountID(); return dtToString(m_account->dtLastSync()); } void DAccountModule::removeDB() { qCDebug(ServiceLogger) << "Removing database for account:" << m_account->accountID(); m_accountDB->removeDB(); //如果为uidå¸�户退出则清空目录下所有关于uid的数æ�®åº“文件 //解决在æŸ�些æ�¡ä»¶ä¸‹æ•°æ�®åº“没有被移除的问题(自测未å�‘现) if(account()->accountType() == DAccount::Type::Account_UnionID){ QString dbPatch = getHomeConfigPath().append(QString("/deepin/dde-calendar-service/")); QDir dir(dbPatch); if (dir.exists()) { qCDebug(ServiceLogger) << "Removing all UID account DB files from:" << dbPatch; QStringList filters; filters << QString("account_uid_*"); dir.setFilter(QDir::Files | QDir::NoSymLinks); dir.setNameFilters(filters); for (uint i = 0; i < dir.count(); ++i) { QFile::remove(dbPatch + dir[i]); } } } } QMap DAccountModule::getScheduleTimesOn(const QDateTime &dtStart, const QDateTime &dtEnd, const DSchedule::List &scheduleList, bool extend) { qCDebug(ServiceLogger) << "Getting scheduled times on for" << scheduleList.size() << "schedules, from" << dtStart << "to" << dtEnd << "extend:" << extend; QMap m_scheduleMap; //相差多少天 int days = static_cast(dtStart.daysTo(dtEnd)); for (int i = 0; i <= days; ++i) { DSchedule::List scheduleList; m_scheduleMap[dtStart.addDays(i).date()] = scheduleList; } foreach (auto &schedule, scheduleList) { //获å�–日程的开始结æ�Ÿæ—¶é—´å·® qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); //如果存在é‡�å¤�日程 if (schedule->recurs()) { //如果为农历日程 if (schedule->lunnar()) { //农历é‡�å¤�日程计算 LunarDateInfo lunardate(schedule->recurrence()->defaultRRuleConst(), interval); QMap ruleStartDate = lunardate.getRRuleStartDate(dtStart.date(), dtEnd.date(), schedule->dtStart().date()); QDateTime recurDateTime; recurDateTime.setTime(schedule->dtStart().time()); QDateTime copyEnd; QMap::ConstIterator iter = ruleStartDate.constBegin(); for (; iter != ruleStartDate.constEnd(); iter++) { recurDateTime.setDate(iter.value()); //如果在忽略时间列表中,则忽略 if (schedule->recurrence()->exDateTimes().contains(recurDateTime)) continue; copyEnd = recurDateTime.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(new DSchedule(*schedule.data())); newSchedule->setDtStart(recurDateTime); newSchedule->setDtEnd(copyEnd); //å�ªæœ‰é‡�å¤�日程设置RecurrenceId if (schedule->dtStart() != recurDateTime) { newSchedule->setRecurrenceId(recurDateTime); } if (extend) { //需è¦�扩展的天数 int extenddays = static_cast(recurDateTime.daysTo(copyEnd)); for (int i = 0; i <= extenddays; ++i) { m_scheduleMap[recurDateTime.date().addDays(i)].append(newSchedule); } } else { m_scheduleMap[recurDateTime.date()].append(newSchedule); } } } else { //é�žå†œåŽ†æ—¥ç¨‹ extendRecurrence(m_scheduleMap, schedule, dtStart, dtEnd, extend); } } else { //普通日程 //如果在查询时间范围内 QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结æ�Ÿæ—¶é—´éƒ½æ˜¯0点 if(schedule->allDay()){ queryDtStart.setTime(QTime(0,0,0)); } if (!(schedule->dtEnd() < queryDtStart || schedule->dtStart() > dtEnd)) { if (extend && schedule->isMultiDay()) { //需è¦�扩展的天数 int extenddays = static_cast(schedule->dtStart().daysTo(schedule->dtEnd())); for (int i = 0; i <= extenddays; ++i) { //如果扩展的日期在查询范围内则添加,å�¦åˆ™é€€å‡º if(m_scheduleMap.contains(schedule->dtStart().date().addDays(i))){ m_scheduleMap[schedule->dtStart().date().addDays(i)].append(schedule); } else { break; } } } else { m_scheduleMap[schedule->dtStart().date()].append(schedule); } } } } qCDebug(ServiceLogger) << "Getting scheduled times on result:" << m_scheduleMap.size(); return m_scheduleMap; } DSchedule::List DAccountModule::getFestivalSchedule(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &key) { qCDebug(ServiceLogger) << "Getting festival schedules from" << dtStart << "to" << dtEnd << "with key:" << key; QList festivaldays = GetFestivalsInRange(dtStart, dtEnd); if (!key.isEmpty()) { festivaldays = FilterDayFestival(festivaldays, key); } DSchedule::List scheduleList; foreach (stDayFestival festivalDay, festivaldays) { foreach (QString festival, festivalDay.Festivals) { if (!festival.isEmpty()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); schedule->setSummary(festival); schedule->setAllDay(true); schedule->setDtStart(QDateTime(QDate(festivalDay.date.date()), QTime(0, 0))); schedule->setDtEnd(QDateTime(QDate(festivalDay.date.date()), QTime(23, 59))); //设置UID为开始时间+内容 schedule->setUid(dtToString(schedule->dtStart()) + schedule->summary()); schedule->setScheduleTypeID(m_accountDB->getFestivalTypeID()); scheduleList.append(schedule); } } } qCDebug(ServiceLogger) << "Getting festival schedules result:" << scheduleList.size(); return scheduleList; } void DAccountModule::extendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd, bool extend) { // qCDebug(ServiceLogger) << "Extending recurrence for schedule:" << schedule->summary() << "from" << dtStart << "to" << dtEnd << "extend:" << extend; QDateTime queryDtStart = dtStart; //如果日程为全天日程,则查询的开始时间设置为0点,因为全天日程的开始和结æ�Ÿæ—¶é—´éƒ½æ˜¯0点 if(schedule->allDay()){ qCDebug(ServiceLogger) << "Schedule is all day"; queryDtStart.setTime(QTime(0,0,0)); } if (schedule->recurs()) { qCDebug(ServiceLogger) << "Schedule is recursive"; //获å�–日程的开始结æ�Ÿæ—¶é—´å·® qint64 interval = schedule->dtStart().secsTo(schedule->dtEnd()); QList dtList = schedule->recurrence()->timesInInterval(queryDtStart, dtEnd); foreach (auto &dt, dtList) { QDateTime scheduleDtEnd = dt.addSecs(interval); DSchedule::Ptr newSchedule = DSchedule::Ptr(schedule->clone()); newSchedule->setDtStart(dt); newSchedule->setDtEnd(scheduleDtEnd); //å�ªæœ‰é‡�å¤�日程设置RecurrenceId if (schedule->dtStart() != dt) { newSchedule->setRecurrenceId(dt); } if (extend) { //需è¦�扩展的天数 int extenddays = static_cast(dt.daysTo(scheduleDtEnd)); for (int i = 0; i <= extenddays; ++i) { scheduleMap[dt.date().addDays(i)].append(newSchedule); } } else { scheduleMap[dt.date()].append(newSchedule); } } } else { qCDebug(ServiceLogger) << "Schedule is not recursive"; if (!(schedule->dtStart() > dtEnd || schedule->dtEnd() < queryDtStart)) { scheduleMap[schedule->dtStart().date()].append(schedule); } } } void DAccountModule::closeNotification(const QString &scheduleId) { qCDebug(ServiceLogger) << "Closing notifications for schedule ID:" << scheduleId; //æ ¹æ�®æ—¥ç¨‹ID获å�–æ��醒日程信æ�¯ DRemindData::List remindList = m_accountDB->getRemindByScheduleID(scheduleId); foreach (auto remind, remindList) { m_accountDB->deleteRemindInfoByAlarmID(remind->alarmID()); emit signalCloseNotification(static_cast(remind->notifyid())); } } DSchedule::Ptr DAccountModule::getScheduleByRemind(const DRemindData::Ptr &remindData) { // qCDebug(ServiceLogger) << "Getting schedule by reminder data for schedule ID:" << remindData->scheduleID(); DSchedule::Ptr schedule = m_accountDB->getScheduleByScheduleID(remindData->scheduleID()); if (!schedule.isNull() && schedule->dtStart() != remindData->dtStart()) { schedule->setDtStart(remindData->dtStart()); schedule->setDtEnd(remindData->dtEnd()); schedule->setRecurrenceId(remindData->recurrenceId()); } return schedule; } void DAccountModule::downloadTaskhanding(int index) { qCDebug(ServiceLogger) << "Handling download task for account:" << m_account->accountID() << "index:" << index; //index: 0:å¸�户登录 1:修改å�Œæ­¥é¢‘率 2:å¸�户登出 CSystemdTimerControl sysControl; if (index > 0) { qCDebug(ServiceLogger) << "Stopping download task for account:" << m_account->accountID(); //修改和å�œæ­¢éƒ½éœ€è¦�å�œæ­¢å®šæ—¶ä»»åŠ¡ sysControl.stopDownloadTask(m_account->accountID()); } if (index != 2) { qCDebug(ServiceLogger) << "Starting download task for account:" << m_account->accountID(); //如果å¸�户刚刚登录开å�¯å®šæ—¶ä»»åŠ¡ //设置å�Œæ­¥é¢‘率 if (m_account->isNetWorkAccount()) { int sync = -1; switch (m_account->syncFreq()) { case DAccount::SyncFreq_15Mins: sync = 15; break; case DAccount::SyncFreq_30Mins: sync = 30; break; case DAccount::SyncFreq_1hour: sync = 60; break; case DAccount::SyncFreq_24hour: sync = 24 * 60; break; default: break; } if (sync > 0) { sysControl.startDownloadTask(m_account->accountID(), sync); } } } } void DAccountModule::uploadTaskHanding(int open) { qCDebug(ServiceLogger) << "Handling upload task for account:" << m_account->accountID() << "open:" << open; CSystemdTimerControl sysControl; if (1 == open) { qCDebug(ServiceLogger) << "Starting upload task for account:" << m_account->accountID(); sysControl.startUploadTask(15); return; } if (0 == open) { qCDebug(ServiceLogger) << "Stopping upload task for account:" << m_account->accountID(); //TODO:需è¦�考虑多个å¸�户情况 sysControl.stopUploadTask(); return; } } void DAccountModule::slotOpenCalendar(const QString &alarmID) { qCDebug(ServiceLogger) << "Slot: Open calendar requested for alarm ID:" << alarmID; DbusUIOpenSchedule openCalendar("com.deepin.Calendar", "/com/deepin/Calendar", QDBusConnection::sessionBus(), this); DRemindData::Ptr remindData = m_accountDB->getRemindData(alarmID); if (remindData.isNull()) { qCWarning(ServiceLogger) << "No corresponding reminder ID found"; return; } DSchedule::Ptr schedule = getScheduleByRemind(remindData); QString scheduleStr; DSchedule::toJsonString(schedule, scheduleStr); openCalendar.OpenSchedule(scheduleStr); //删除对应æ��醒任务数æ�® m_accountDB->deleteRemindInfoByAlarmID(alarmID); } void DAccountModule::slotSyncState(const int syncState) { qCDebug(ServiceLogger) << "Slot: Sync state changed for account:" << m_account->accountID() << "New state:" << syncState; m_account->setDtLastSync(QDateTime::currentDateTime()); switch (syncState) { case 0: //执行正常 m_account->setSyncState(DAccount::Sync_Normal); m_accountDB->updateAccountInfo(); qCDebug(ServiceLogger) << "Sync completed successfully for account:" << m_account->accountID(); //å�Œæ­¥æˆ�功å�Žæ›´æ–°æ��醒任务 updateRemindSchedules(false); break; case 7506: //网络异常 m_account->setSyncState(DAccount::Sync_NetworkAnomaly); qCWarning(ServiceLogger) << "Network anomaly during sync for account:" << m_account->accountID(); break; case 7508: //存储已满 m_account->setSyncState(DAccount::Sync_StorageFull); qCWarning(ServiceLogger) << "Storage full during sync for account:" << m_account->accountID(); break; default: qCWarning(ServiceLogger) << "Server exception during sync for account:" << m_account->accountID() << "Error code:" << syncState; //默认æœ�务器异常 m_account->setSyncState(DAccount::Sync_ServerException); break; } emit signalDtLastUpdate(); //错误处ç�† emit signalSyncState(); } void DAccountModule::slotDateUpdate(const DDataSyncBase::UpdateTypes updateType) { qCDebug(ServiceLogger) << "Slot: Data update notification received. Type:" << updateType; if (updateType.testFlag(DDataSyncBase::Update_Setting)) { qCDebug(ServiceLogger) << "Updating setting change"; emit signalSettingChange(); } if (updateType.testFlag(DDataSyncBase::Update_Schedule)) { qCDebug(ServiceLogger) << "Updating schedule change"; emit signalScheduleUpdate(); } if (updateType.testFlag(DDataSyncBase::Update_ScheduleType)) { qCDebug(ServiceLogger) << "Updating schedule type change"; emit signalScheduleTypeUpdate(); } } // 导入日程 bool DAccountModule::importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists) { qCDebug(ServiceLogger) << "Importing schedules from" << icsFilePath << "into type" << typeID << "Clean exists:" << cleanExists; KCalendarCore::ICalFormat icalformat; QTimeZone timezone = QDateTime::currentDateTime().timeZone(); KCalendarCore::MemoryCalendar::Ptr cal(new KCalendarCore::MemoryCalendar(timezone)); auto ok = icalformat.load(cal, icsFilePath); if (!ok) { qCWarning(ServiceLogger) << "Failed to load ICS file:" << icsFilePath; return false; } auto events = cal->events(); if (cleanExists) { qCDebug(ServiceLogger) << "Cleaning existing schedules for type:" << typeID; ok = m_accountDB->deleteSchedulesByScheduleTypeID(typeID, true); if (!ok) { qCWarning(ServiceLogger) << "Failed to clean existing schedules for type:" << typeID; return false; } }; int importedCount = 0; foreach (auto event, events) { auto data = event.data(); auto sch = DSchedule::Ptr(new DSchedule(*data)); sch->setScheduleTypeID(typeID); QString scheduleID = m_accountDB->createSchedule(sch); if (!scheduleID.isEmpty()) { importedCount++; qCDebug(ServiceLogger) << "Successfully imported schedule:" << data->summary() << "Start:" << data->dtStart().toString() << "ID:" << scheduleID; } else { qCWarning(ServiceLogger) << "Failed to import schedule:" << data->summary() << "Start:" << data->dtStart().toString(); } }; qCInfo(ServiceLogger) << "Import completed: " << importedCount << " out of " << events.size() << " events successfully imported for type " << typeID; if (importedCount == 0 && !events.isEmpty()) { qCWarning(ServiceLogger) << "WARNING: No schedules were successfully imported, despite having " << events.size() << " events in ICS file: " << icsFilePath; } // å�‘é€�日程更新信å�· emit signalScheduleUpdate(); return importedCount > 0 || events.isEmpty(); // 如果没有事件或者至少导入了一个事件,则认为æˆ�功 } // 导出日程 bool DAccountModule::exportSchedule(const QString &icsFilePath, const QString &typeID) { qCDebug(ServiceLogger) << "Exporting schedules to" << icsFilePath << "from type" << typeID; auto typeInfo = m_accountDB->getScheduleTypeByID(typeID); KCalendarCore::MemoryCalendar::Ptr cal(new KCalendarCore::MemoryCalendar(nullptr)); // 附加扩展信æ�¯ cal->setNonKDECustomProperty("X-DDE-CALENDAR-TYPE-ID", typeID); cal->setNonKDECustomProperty("X-DDE-CALENDAR-TYPE-NAME", typeInfo->displayName()); cal->setNonKDECustomProperty("X-DDE-CALENDAR-TYPE-COLOR", typeInfo->getColorCode()); cal->setNonKDECustomProperty("X-WR-CALNAME", typeInfo->displayName()); auto ids = m_accountDB->getScheduleIDListByTypeID(typeID); foreach (auto id, ids) { auto schedule = m_accountDB->getScheduleByScheduleID(id); cal->addEvent(schedule); } qCDebug(ServiceLogger) << "Exporting" << cal->events().count() << "schedules."; KCalendarCore::ICalFormat icalformat; return icalformat.save(cal, icsFilePath); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager/daccountmodule.h000066400000000000000000000113631523260663500325740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTMODULE_H #define DACCOUNTMODULE_H #include "daccount.h" #include "daccountdatabase.h" #include "dschedule.h" #include "dalarmmanager.h" #include "ddatasyncbase.h" #include "icalformat.h" #include "memorycalendar.h" #include #include //å¸�户模å�— //处ç�†å�Žç«¯æ•°æ�®èŽ·å�–,æ��醒,上传下载等 class DAccountModule : public QObject { Q_OBJECT public: typedef QSharedPointer Ptr; typedef QList List; explicit DAccountModule(const DAccount::Ptr &account, QObject *parent = nullptr); ~DAccountModule(); //获å�–å¸�户信æ�¯ QString getAccountInfo(); //设置获å�–å¸�户是å�¦å±•å¼€ bool getExpand(); void setExpand(const bool &isExpand); //å¸�户状æ€�。 int getAccountState(); void setAccountState(const int accountState); //获å�–å�Œæ­¥çжæ€� int getSyncState(); QString getSyncFreq(); void setSyncFreq(const QString &freq); //获å�–类型 QString getScheduleTypeList(); QString getScheduleTypeByID(const QString &typeID); QString createScheduleType(const QString &typeInfo); bool deleteScheduleTypeByID(const QString &typeID); bool scheduleTypeByUsed(const QString &typeID); bool updateScheduleType(const QString &typeInfo); //日程信æ�¯ QString createSchedule(const QString &scheduleInfo); bool updateSchedule(const QString &scheduleInfo); QString getScheduleByScheduleID(const QString &scheduleID); bool deleteScheduleByScheduleID(const QString &scheduleID); QString querySchedulesWithParameter(const QString ¶ms); bool exportSchedule(const QString &icsFilePath, const QString &typeID); // 导出ICS文件 bool importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists); // 导入ICS文件 //获å�–需è¦�æ��醒的日程 DSchedule::List getRemindScheduleList(const QDateTime &dtStart, const QDateTime &dtEnd); //内置颜色 QString getSysColors(); DAccount::Ptr account() const; /** * @brief updateRemindSchedules 更新未æ�¥10分钟的æ��醒任务 * @param isClear 是å�¦æ¸…空æ��醒任务数æ�®åº“ */ void updateRemindSchedules(bool isClear); /** * @brief notifyMsgHanding 通知æ��示框交互处ç�† * @param alarmID æ��醒任务id * @param operationNum æ“�作编å�· * 1:打开日历, * 2:ç¨�å�Žæ��醒 21:15minå�Žæ��醒 22:一个å°�æ—¶å�Žæ��醒 23:四个å°�æ—¶å�Žæ��醒 * 3:明天æ��醒 4: æ��å‰�1天æ��醒 */ void notifyMsgHanding(const QString &alarmID, const qint32 operationNum); void remindJob(const QString &alarmID); void accountDownload(); void uploadNetWorkAccountData(); //删除数æ�®åº“ void removeDB(); //index: 0:å¸�户登录 1:修改å�Œæ­¥é¢‘率 2:å¸�户登出 void downloadTaskhanding(int index); // 0:关闭 1:å�¯åЍ void uploadTaskHanding(int open); //获å�–最å�Žä¸€æ¬¡å�Œæ­¥æ—¶é—´ QString getDtLastUpdate(); private: QMap getScheduleTimesOn(const QDateTime &dtStart, const QDateTime &dtEnd, const DSchedule::List &scheduleList, bool extend = true); DSchedule::List getFestivalSchedule(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &key); //æ ¹æ�®é‡�å¤�规则扩展é�žå†œåކé‡�å¤�日程 void extendRecurrence(DSchedule::Map &scheduleMap, const DSchedule::Ptr &schedule, const QDateTime &dtStart, const QDateTime &dtEnd, bool extend = true); /** * @brief closeNotification 关闭通知弹框 * @param scheduleId 日程id */ void closeNotification(const QString &scheduleId); //æ ¹æ�®æ��醒任务获å�–对应的日程信æ�¯ DSchedule::Ptr getScheduleByRemind(const DRemindData::Ptr &remindData); signals: void signalScheduleUpdate(); void signalScheduleTypeUpdate(); //关闭通知弹框 void signalCloseNotification(quint64 notifyID); void signalAccountState(); void signalSyncState(); void signalDtLastUpdate(); //通用设置å�‘生改å�˜ void signalSettingChange(); //æ•°æ�®å�Œæ­¥å®Œæˆ� void signalSyncFinished(int); public slots: void slotOpenCalendar(const QString &alarmID); void slotSyncState(const int syncState); void slotDateUpdate(const DDataSyncBase::UpdateTypes updateType); private: DAccount::Ptr m_account; DAccountDataBase::Ptr m_accountDB; DAlarmManager::Ptr m_alarm; DDataSyncBase *m_dataSync; }; #endif // DACCOUNTMODULE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager/duploadtaskdata.cpp000066400000000000000000000064501523260663500332670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "duploadtaskdata.h" #include "commondef.h" QString DUploadTaskData::sql_table_name(int task_obj) { qCDebug(ServiceLogger) << "Getting SQL table name for task object:" << task_obj; switch(task_obj) { case DUploadTaskData::Task_ScheduleType: qCDebug(ServiceLogger) << "Returning table name for ScheduleType"; return "scheduleType"; case DUploadTaskData::Task_Schedule: qCDebug(ServiceLogger) << "Returning table name for Schedule"; return "schedules"; case DUploadTaskData::Task_Color: qCDebug(ServiceLogger) << "Returning table name for Color"; return "typeColor"; } qCDebug(ServiceLogger) << "Unknown task object, returning empty string"; return ""; } QString DUploadTaskData::sql_table_primary_key(int task_obj) { qCDebug(ServiceLogger) << "Getting SQL table primary key for task object:" << task_obj; switch(task_obj) { case DUploadTaskData::Task_ScheduleType: qCDebug(ServiceLogger) << "Returning primary key for ScheduleType"; return "typeID"; case DUploadTaskData::Task_Schedule: qCDebug(ServiceLogger) << "Returning primary key for Schedule"; return "scheduleID"; case DUploadTaskData::Task_Color: qCDebug(ServiceLogger) << "Returning primary key for Color"; return "colorID"; } qCDebug(ServiceLogger) << "Unknown task object, returning empty primary key"; return ""; } DUploadTaskData::DUploadTaskData() : m_taskType(Create) , m_taskObject(Task_ScheduleType) , m_objectId("") , m_taskID("") { qCDebug(ServiceLogger) << "Creating DUploadTaskData instance with default values"; } DUploadTaskData::TaskType DUploadTaskData::taskType() const { // qCDebug(ServiceLogger) << "Getting task type:" << m_taskType; return m_taskType; } void DUploadTaskData::setTaskType(const TaskType &taskType) { // qCDebug(ServiceLogger) << "Setting task type to:" << taskType; m_taskType = taskType; } DUploadTaskData::TaskObject DUploadTaskData::taskObject() const { // qCDebug(ServiceLogger) << "Getting task object:" << m_taskObject; return m_taskObject; } void DUploadTaskData::setTaskObject(const TaskObject &taskObject) { // qCDebug(ServiceLogger) << "Setting task object to:" << taskObject; m_taskObject = taskObject; } QString DUploadTaskData::objectId() const { // qCDebug(ServiceLogger) << "Getting object ID:" << m_objectId; return m_objectId; } void DUploadTaskData::setObjectId(const QString &objectId) { // qCDebug(ServiceLogger) << "Setting object ID to:" << objectId; m_objectId = objectId; } QString DUploadTaskData::taskID() const { // qCDebug(ServiceLogger) << "Getting task ID:" << m_taskID; return m_taskID; } void DUploadTaskData::setTaskID(const QString &taskID) { // qCDebug(ServiceLogger) << "Setting task ID to:" << taskID; m_taskID = taskID; } QDateTime DUploadTaskData::dtCreate() const { // qCDebug(ServiceLogger) << "Getting creation datetime:" << m_dtCreate; return m_dtCreate; } void DUploadTaskData::setDtCreate(const QDateTime &dtCreate) { // qCDebug(ServiceLogger) << "Setting creation datetime to:" << dtCreate; m_dtCreate = dtCreate; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarDataManager/duploadtaskdata.h000066400000000000000000000025501523260663500327310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUPLOADTASKDATA_H #define DUPLOADTASKDATA_H #include #include #include #include //上传任务相关数æ�® class DUploadTaskData { public: //任务类型 enum TaskType { Create, //创建 Modify, //修改 Delete, //删除 }; //任务对象 enum TaskObject { Task_ScheduleType, //日程类型 Task_Schedule, //日程 Task_Color, //类型颜色 }; static QString sql_table_name(int task_obj); static QString sql_table_primary_key(int task_obj); typedef QSharedPointer Ptr; typedef QVector List; DUploadTaskData(); TaskType taskType() const; void setTaskType(const TaskType &taskType); TaskObject taskObject() const; void setTaskObject(const TaskObject &taskObject); QString objectId() const; void setObjectId(const QString &objectId); QString taskID() const; void setTaskID(const QString &taskID); QDateTime dtCreate() const; void setDtCreate(const QDateTime &dtCreate); private: TaskType m_taskType; TaskObject m_taskObject; QString m_objectId; QString m_taskID; QDateTime m_dtCreate; }; #endif // DUPLOADTASKDATA_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarhuangli.cpp000066400000000000000000000162671523260663500274140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarhuangli.h" #include "lunarandfestival/lunarmanager.h" #include "commondef.h" CalendarHuangLi::CalendarHuangLi(QObject *parent) : QObject(parent) , m_database(new DHuangLiDataBase(this)) { qCDebug(ServiceLogger) << "Creating CalendarHuangLi instance"; } //获å�–指定公历月的å�‡æ—¥ä¿¡æ�¯ QJsonArray CalendarHuangLi::getFestivalMonth(quint32 year, quint32 month) { qCDebug(ServiceLogger) << "Getting festival month for year:" << year << "month:" << month; return m_database->queryFestivalList(year, month); } QString CalendarHuangLi::getHuangLiDay(quint32 year, quint32 month, quint32 day) { qCDebug(ServiceLogger) << "Getting HuangLi day info for:" << year << "/" << month << "/" << day; stDay viewday{static_cast(year), static_cast(month), static_cast(day)}; QList viewdate{viewday}; CaHuangLiDayInfo hldayinfo; //获å�–阴历信æ�¯ stLunarDayInfo lunardayinfo = SolarToLunar(static_cast(year), static_cast(month), static_cast(day)); //获å�–宜忌信æ�¯ QList hllist = m_database->queryHuangLiByDays(viewdate); //将黄历信æ�¯ä¿�存到CaHuangLiDayInfo qCDebug(ServiceLogger) << "Populating HuangLi day info structure"; hldayinfo.mSuit = hllist.begin()->Suit; hldayinfo.mAvoid = hllist.begin()->Avoid; hldayinfo.mGanZhiYear = lunardayinfo.GanZhiYear; hldayinfo.mGanZhiMonth = lunardayinfo.GanZhiMonth; hldayinfo.mGanZhiDay = lunardayinfo.GanZhiDay; hldayinfo.mLunarDayName = lunardayinfo.LunarDayName; hldayinfo.mLunarFestival = lunardayinfo.LunarFestival; hldayinfo.mLunarLeapMonth = lunardayinfo.LunarLeapMonth; hldayinfo.mLunarMonthName = lunardayinfo.LunarMonthName; hldayinfo.mSolarFestival = lunardayinfo.SolarFestival; hldayinfo.mTerm = lunardayinfo.Term; hldayinfo.mZodiac = lunardayinfo.Zodiac; hldayinfo.mWorktime = lunardayinfo.Worktime; //返回json qCDebug(ServiceLogger) << "Converting HuangLi day info to JSON"; return hldayinfo.toJson(); } QString CalendarHuangLi::getHuangLiMonth(quint32 year, quint32 month, bool fill) { qCDebug(ServiceLogger) << "Getting HuangLi month info for:" << year << "/" << month << "fill:" << fill; CaHuangLiMonthInfo monthinfo; SolarMonthInfo solarmonth = GetSolarMonthCalendar(static_cast(year), static_cast(month), fill); LunarMonthInfo lunarmonth = GetLunarMonthCalendar(static_cast(year), static_cast(month), fill); monthinfo.mFirstDayWeek = lunarmonth.FirstDayWeek; monthinfo.mDays = lunarmonth.Days; QList hllist = m_database->queryHuangLiByDays(solarmonth.Datas); qCDebug(ServiceLogger) << "Processing" << lunarmonth.Datas.size() << "days for month"; for (int i = 0; i < lunarmonth.Datas.size(); ++i) { CaHuangLiDayInfo hldayinfo; hldayinfo.mAvoid = hllist.at(i).Avoid; hldayinfo.mSuit = hllist.at(i).Suit; stLunarDayInfo lunardayinfo = lunarmonth.Datas.at(i); hldayinfo.mGanZhiYear = lunardayinfo.GanZhiYear; hldayinfo.mGanZhiMonth = lunardayinfo.GanZhiMonth; hldayinfo.mGanZhiDay = lunardayinfo.GanZhiDay; hldayinfo.mLunarDayName = lunardayinfo.LunarDayName; hldayinfo.mLunarFestival = lunardayinfo.LunarFestival; hldayinfo.mLunarLeapMonth = lunardayinfo.LunarLeapMonth; hldayinfo.mLunarMonthName = lunardayinfo.LunarMonthName; hldayinfo.mSolarFestival = lunardayinfo.SolarFestival; hldayinfo.mTerm = lunardayinfo.Term; hldayinfo.mZodiac = lunardayinfo.Zodiac; hldayinfo.mWorktime = lunardayinfo.Worktime; monthinfo.mCaLunarDayInfo.append(hldayinfo); // qCDebug(ServiceLogger) << hldayinfo.mGanZhiYear << hldayinfo.mGanZhiMonth << hldayinfo.mGanZhiDay // << hldayinfo.mLunarDayName << hldayinfo.mLunarFestival << hldayinfo.mLunarFestival // << hldayinfo.mLunarLeapMonth << hldayinfo.mLunarMonthName << hldayinfo.mSolarFestival // << hldayinfo.mTerm << hldayinfo.mZodiac << hldayinfo.mWorktime; } qCDebug(ServiceLogger) << "Converting HuangLi month info to JSON"; return monthinfo.toJson(); } CaLunarDayInfo CalendarHuangLi::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { qCDebug(ServiceLogger) << "Getting lunar info by solar date:" << year << "/" << month << "/" << day; CaLunarDayInfo lunardayinfo; //获å�–阴历信æ�¯ qCDebug(ServiceLogger) << "Converting solar to lunar date"; stLunarDayInfo m_lunardayinfo = SolarToLunar(static_cast(year), static_cast(month), static_cast(day)); //将阴历信æ�¯ä¿�存到CaLunarDayInfo qCDebug(ServiceLogger) << "Populating lunar day info structure"; lunardayinfo.mGanZhiYear = m_lunardayinfo.GanZhiYear; lunardayinfo.mGanZhiMonth = m_lunardayinfo.GanZhiMonth; lunardayinfo.mGanZhiDay = m_lunardayinfo.GanZhiDay; lunardayinfo.mLunarDayName = m_lunardayinfo.LunarDayName; lunardayinfo.mLunarFestival = m_lunardayinfo.LunarFestival; lunardayinfo.mLunarLeapMonth = m_lunardayinfo.LunarLeapMonth; lunardayinfo.mLunarMonthName = m_lunardayinfo.LunarMonthName; lunardayinfo.mSolarFestival = m_lunardayinfo.SolarFestival; lunardayinfo.mTerm = m_lunardayinfo.Term; lunardayinfo.mZodiac = m_lunardayinfo.Zodiac; lunardayinfo.mWorktime = m_lunardayinfo.Worktime; //返回CaLunarDayInfo qCDebug(ServiceLogger) << "Returning lunar day info"; return lunardayinfo; } CaLunarMonthInfo CalendarHuangLi::getLunarCalendarMonth(quint32 year, quint32 month, bool fill) { qCDebug(ServiceLogger) << "Getting lunar calendar month for:" << year << "/" << month << "fill:" << fill; CaLunarMonthInfo lunarmonthinfo; //获å�–阴历月信æ�¯ LunarMonthInfo lunarmonth = GetLunarMonthCalendar(static_cast(year), static_cast(month), fill); //将阴历月信æ�¯ä¿�存到CaLunarMonthInfo lunarmonthinfo.mDays = lunarmonth.Days; lunarmonthinfo.mFirstDayWeek = lunarmonth.FirstDayWeek; qCDebug(ServiceLogger) << "Processing" << lunarmonth.Datas.size() << "lunar days"; for (int i = 0; i < lunarmonth.Datas.size(); ++i) { CaLunarDayInfo m_lunardayinfo; stLunarDayInfo lunardayinfo = lunarmonth.Datas.at(i); m_lunardayinfo.mGanZhiYear = lunardayinfo.GanZhiYear; m_lunardayinfo.mGanZhiMonth = lunardayinfo.GanZhiMonth; m_lunardayinfo.mGanZhiDay = lunardayinfo.GanZhiDay; m_lunardayinfo.mLunarDayName = lunardayinfo.LunarDayName; m_lunardayinfo.mLunarFestival = lunardayinfo.LunarFestival; m_lunardayinfo.mLunarLeapMonth = lunardayinfo.LunarLeapMonth; m_lunardayinfo.mLunarMonthName = lunardayinfo.LunarMonthName; m_lunardayinfo.mSolarFestival = lunardayinfo.SolarFestival; m_lunardayinfo.mTerm = lunardayinfo.Term; m_lunardayinfo.mZodiac = lunardayinfo.Zodiac; m_lunardayinfo.mWorktime = lunardayinfo.Worktime; lunarmonthinfo.mCaLunarDayInfo.append(m_lunardayinfo); } //返回CaLunarMonthInfo qCDebug(ServiceLogger) << "Returning lunar month info"; return lunarmonthinfo; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarhuangli.h000066400000000000000000000015621523260663500270510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARHUANGLI_H #define CALENDARHUANGLI_H #include "dhuanglidatabase.h" #include "huangliData/dbusdatastruct.h" #include #include class DHuangLiDataBase; class CalendarHuangLi : public QObject { Q_OBJECT public: explicit CalendarHuangLi(QObject *parent = nullptr); QJsonArray getFestivalMonth(quint32 year, quint32 month); QString getHuangLiDay(quint32 year, quint32 month, quint32 day); QString getHuangLiMonth(quint32 year, quint32 month, bool fill); CaLunarDayInfo getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); CaLunarMonthInfo getLunarCalendarMonth(quint32 year, quint32 month, bool fill); private: DHuangLiDataBase *m_database; }; #endif // CALENDARHUANGLI_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarprogramexitcontrol.cpp000066400000000000000000000045631523260663500317230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "calendarprogramexitcontrol.h" #include "commondef.h" #include #include bool CalendarProgramExitControl::m_clientIsOpen = false; CalendarProgramExitControl *CalendarProgramExitControl::getProgramExitControl() { // qCDebug(ServiceLogger) << "Getting program exit control instance"; static CalendarProgramExitControl programExitControl; return &programExitControl; } CalendarProgramExitControl *CalendarProgramExitControl::operator->() const { // qCDebug(ServiceLogger) << "Using operator-> to get program exit control"; return getProgramExitControl(); } void CalendarProgramExitControl::addExc() { qCDebug(ServiceLogger) << "Adding execution counter"; #ifdef CALENDAR_SERVICE_AUTO_EXIT qCDebug(ServiceLogger) << "Auto exit enabled, incrementing execution number"; readWriteLock.lockForWrite(); ++m_excNum; qCDebug(ServiceLogger) << "Execution number incremented to:" << m_excNum; readWriteLock.unlock(); #endif } void CalendarProgramExitControl::reduce() { qCDebug(ServiceLogger) << "Reducing execution counter"; #ifdef CALENDAR_SERVICE_AUTO_EXIT qCDebug(ServiceLogger) << "Auto exit enabled, scheduling counter reduction"; //3ç§’å�Žé€€å‡º,防止程åº�频ç¹�的开å�¯å…³é—­ QTimer::singleShot(3000, [=] { readWriteLock.lockForWrite(); --m_excNum; if (m_excNum < 1 && !m_clientIsOpen) { qCDebug(ServiceLogger) << "Conditions met for exit: excNum <1 and client not open"; exit(); } readWriteLock.unlock(); }); #endif } void CalendarProgramExitControl::exit() { qCDebug(ServiceLogger) << "Exit requested"; #ifdef NDEBUG qCDebug(ServiceLogger) << "Release build, executing application exit"; qApp->exit(); #endif } bool CalendarProgramExitControl::getClientIsOpen() { // qCDebug(ServiceLogger) << "Getting client open status:" << m_clientIsOpen; return m_clientIsOpen; } void CalendarProgramExitControl::setClientIsOpen(bool clientIsOpen) { // qCDebug(ServiceLogger) << "Setting client open status to:" << clientIsOpen; m_clientIsOpen = clientIsOpen; } CalendarProgramExitControl::CalendarProgramExitControl() { qCDebug(ServiceLogger) << "Creating CalendarProgramExitControl instance"; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/calendarprogramexitcontrol.h000066400000000000000000000030061523260663500313570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CALENDARPROGRAMEXITCONTROL_H #define CALENDARPROGRAMEXITCONTROL_H #include /** * @brief The CalendarProgramExitControl class * å�Žç«¯ç¨‹åº�退出控制 * 采用计数的方å¼�æ�¥åˆ¤æ–­ç¨‹åº�是å�¦é€€å‡º * 在接å�£å…¥å�£å¤„添加计数,接å�£å¤„ç�†ç»“æ�Ÿå�Žå‡�少计数,若计数为0则程åº�退出 */ class CalendarProgramExitControl { public: static CalendarProgramExitControl *getProgramExitControl(); CalendarProgramExitControl *operator->() const; /** * @brief addExc 接å�£å…¥å�£å¤„添加计数,跟reduceé…�对使用 */ void addExc(); /** * @brief reduce 接å�£å¤„ç�†ç»“æ�Ÿå�Žä½¿ç”¨è¯¥å‡½æ•°ï¼Œç”¨æ�¥å‡�少计数,跟addExcé…�对使用 */ void reduce(); static bool getClientIsOpen(); static void setClientIsOpen(bool clientIsOpen); private: CalendarProgramExitControl(); void exit(); private: static bool m_clientIsOpen; int m_excNum = 0; QReadWriteLock readWriteLock; }; class DServiceExitControl { public: DServiceExitControl() { CalendarProgramExitControl::getProgramExitControl()->addExc(); } ~DServiceExitControl() { CalendarProgramExitControl::getProgramExitControl()->reduce(); } void setClientIsOpen(bool isOpen) { CalendarProgramExitControl::setClientIsOpen(isOpen); } }; #endif // CALENDARPROGRAMEXITCONTROL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/csystemdtimercontrol.cpp000066400000000000000000000363461523260663500305700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "csystemdtimercontrol.h" #include "commondef.h" #include "units.h" #include #include #include #include #include #include #include const QString UPLOADTASK_SERVICE = "uploadNetWorkAccountData_calendar.service"; const QString UPLOADTASK_TIMER = "uploadNetWorkAccountData_calendar.timer"; CSystemdTimerControl::CSystemdTimerControl(QObject *parent) : QObject(parent) { qCDebug(ServiceLogger) << "Creating CSystemdTimerControl"; createPath(); } CSystemdTimerControl::~CSystemdTimerControl() { qCDebug(ServiceLogger) << "Destroying CSystemdTimerControl"; } void CSystemdTimerControl::buildingConfiggure(const QVector &infoVector) { qCInfo(ServiceLogger) << "Building systemd configuration for " << infoVector.size() << " info(s)."; if (infoVector.size() == 0) { qCWarning(ServiceLogger) << "No systemd info provided, skipping build."; return; } QStringList fileNameList{}; foreach (auto info, infoVector) { fileNameList.append(QString("calendar-remind-%1-%2-%3").arg(info.accountID.mid(0,8)).arg(info.alarmID.mid(0, 8)).arg(info.laterCount)); // 构建æ��醒命令 QString remindCMD = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.remindJob string:%1 string:%2") .arg(info.accountID) .arg(info.alarmID); // 使用模æ�¿æ–¹æ³•创建æœ�务和定时器 createServiceFromTemplate(fileNameList.last(), remindCMD); createTimerFromTemplate(fileNameList.last(), info.triggerTimer); } // 使用新的QProcessæ–¹å¼� execSystemdCommand(QStringList() << "daemon-reload"); startSystemdTimer(fileNameList); } void CSystemdTimerControl::stopSystemdTimerByJobInfos(const QVector &infoVector) { qCInfo(ServiceLogger) << "Stopping systemd timers for " << infoVector.size() << " job infos."; QStringList fileNameList; foreach (auto info, infoVector) { fileNameList.append(QString("calendar-remind-%1-%2-%3").arg(info.accountID.mid(0,8)).arg(info.alarmID.mid(0, 8)).arg(info.laterCount)); } stopSystemdTimer(fileNameList); } void CSystemdTimerControl::stopSystemdTimerByJobInfo(const SystemDInfo &info) { qCInfo(ServiceLogger) << "Stopping systemd timer for single job info. AccountID:" << info.accountID << "AlarmID:" << info.alarmID << "LaterCount:" << (info.laterCount - 1); QStringList fileName; //å�œæ­¢åˆšåˆšæ��醒的ç¨�å�Žæ��醒,所以需è¦�对æ��醒次数å‡�一 QString name = QString("calendar-remind-%1-%2-%3").arg(info.accountID.mid(0,8)).arg(info.alarmID).arg(info.laterCount - 1); qCDebug(ServiceLogger) << "Stopping timer for single job info. Name:" << name; fileName << name; stopSystemdTimer(fileName); } void CSystemdTimerControl::startSystemdTimer(const QStringList &timerName) { qCInfo(ServiceLogger) << "Starting systemd timers. TimerNames:" << timerName.join(","); if (timerName.isEmpty()) { qCDebug(ServiceLogger) << "No timers to start"; return; } // 构建完整的å�•å…ƒå��称列表 QStringList stopUnits; QStringList startUnits; foreach (auto str, timerName) { stopUnits << QString("%1.timer").arg(str); startUnits << QString("%1.timer").arg(str); } // 批é‡�å�œæ­¢æ‰€æœ‰å®šæ—¶å™¨ï¼ˆä¸€æ�¡å‘½ä»¤ï¼‰ execSystemdCommand(QStringList() << "stop" << stopUnits); // 批é‡�å�¯åŠ¨æ‰€æœ‰å®šæ—¶å™¨ï¼ˆä¸€æ�¡å‘½ä»¤ï¼‰ execSystemdCommand(QStringList() << "start" << startUnits); } void CSystemdTimerControl::stopSystemdTimer(const QStringList &timerName) { qCInfo(ServiceLogger) << "Stopping systemd timers. TimerNames:" << timerName.join(","); if (timerName.isEmpty()) { qCDebug(ServiceLogger) << "No timers to stop"; return; } // 构建完整的å�•å…ƒå��称列表 QStringList stopUnits; foreach (auto str, timerName) { stopUnits << QString("%1.timer").arg(str); } // 批é‡�å�œæ­¢æ‰€æœ‰å®šæ—¶å™¨ï¼ˆä¸€æ�¡å‘½ä»¤ï¼‰ execSystemdCommand(QStringList() << "stop" << stopUnits); } void CSystemdTimerControl::removeFile(const QStringList &fileName) { qCInfo(ServiceLogger) << "Removing file(s):" << fileName.join(","); foreach (auto f, fileName) { qCDebug(ServiceLogger) << "Removing file:" << f; QFile::remove(f); } } void CSystemdTimerControl::stopAllRemindSystemdTimer(const QString &accountID) { qCInfo(ServiceLogger) << "Stopping all remind systemd timer for accountID:" << accountID; // 注æ„�:这里使用通é…�符å�œæ­¢æ‰€æœ‰åŒ¹é…�的定时器 execSystemdCommand(QStringList() << "stop" << QString("calendar-remind-%1-*.timer").arg(accountID.mid(0,8))); } void CSystemdTimerControl::removeRemindFile(const QString &accountID) { qCInfo(ServiceLogger) << "Removing remind file(s) for accountID:" << accountID; QDir dir(m_systemdPath); if (dir.exists()) { QStringList filters; filters << QString("calendar-remind-%1*").arg(accountID.mid(0,8)); dir.setFilter(QDir::Files | QDir::NoSymLinks); dir.setNameFilters(filters); qCDebug(ServiceLogger) << "Removing files matching filter:" << filters.join(",") << " in dir:" << m_systemdPath; for (uint i = 0; i < dir.count(); ++i) { qCDebug(ServiceLogger) << "Removing file:" << (m_systemdPath + dir[i]); QFile::remove(m_systemdPath + dir[i]); } } else { qCWarning(ServiceLogger) << "Directory does not exist:" << m_systemdPath; } } void CSystemdTimerControl::startCalendarServiceSystemdTimer() { qCInfo(ServiceLogger) << "Starting calendar service systemd timer"; // 清ç�†ç޲ç�‘包的残留 QFile(m_systemdPath + "com.dde.calendarserver.calendar.service").remove(); QFile(m_systemdPath + "com.dde.calendarserver.calendar.timer").remove(); QFileInfo fileInfo(m_systemdPath + "timers.target.wants/com.dde.calendarserver.calendar.timer"); //如果没有设置定时任务则开å�¯å®šæ—¶ä»»åŠ¡ if (!fileInfo.exists()) { execSystemdCommand(QStringList() << "enable" << "com.dde.calendarserver.calendar.timer"); execSystemdCommand(QStringList() << "start" << "com.dde.calendarserver.calendar.timer"); } } void CSystemdTimerControl::startDownloadTask(const QString &accountID, const int minute) { qCInfo(ServiceLogger) << "Starting download task for accountID:" << accountID << "Minute:" << minute; { //.service - 使用模æ�¿åˆ›å»º QString remindCMD = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.downloadByAccountID string:%1 ") .arg(accountID); QString serviceName = accountID + "_calendar"; createServiceFromTemplate(serviceName, remindCMD); } { //timer - 使用周期性定时器 QString timerName = accountID + "_calendar"; createPeriodicTimerFromTemplate(timerName, minute); const QString accountTimer = accountID + "_calendar.timer"; execSystemdCommand(QStringList() << "enable" << accountTimer); execSystemdCommand(QStringList() << "start" << accountTimer); } } void CSystemdTimerControl::stopDownloadTask(const QString &accountID) { qCInfo(ServiceLogger) << "Stopping download task for accountID:" << accountID; QString timerName = accountID + "_calendar.timer"; execSystemdCommand(QStringList() << "stop" << timerName); QFile::remove(m_systemdPath + accountID + "_calendar.timer"); QFile::remove(m_systemdPath + accountID + "_calendar.service"); } void CSystemdTimerControl::startUploadTask(const int minute) { qCInfo(ServiceLogger) << "Starting upload task. Minute:" << minute; { //如果定时器为激活状æ€�则退出 QStringList checkArgs; checkArgs << "is-active" << UPLOADTASK_SERVICE; QString isActive = execSystemdCommand(checkArgs); if (isActive.trimmed() == "active") { qCInfo(ServiceLogger) << "Upload task is already active, skipping start."; return; } } { //.service - 使用模æ�¿åˆ›å»º QString remindCMD = QString("dbus-send --session --print-reply --dest=com.deepin.dataserver.Calendar " "/com/deepin/dataserver/Calendar/AccountManager " "com.deepin.dataserver.Calendar.AccountManager.uploadNetWorkAccountData "); QString serviceName = UPLOADTASK_SERVICE.chopped(8); // 移除 ".service" å�Žç¼€ createServiceFromTemplate(serviceName, remindCMD); } { //timer - 使用周期性定时器 QString timerName = UPLOADTASK_TIMER.chopped(6); // 移除 ".timer" å�Žç¼€ createPeriodicTimerFromTemplate(timerName, minute); qCInfo(ServiceLogger) << "Enabling and starting upload timer:" << UPLOADTASK_TIMER; execSystemdCommand(QStringList() << "enable" << UPLOADTASK_TIMER); execSystemdCommand(QStringList() << "start" << UPLOADTASK_TIMER); } } void CSystemdTimerControl::stopUploadTask() { qCInfo(ServiceLogger) << "Stopping upload task"; execSystemdCommand(QStringList() << "stop" << UPLOADTASK_TIMER); QFile::remove(m_systemdPath + UPLOADTASK_TIMER); QFile::remove(m_systemdPath + UPLOADTASK_SERVICE); } void CSystemdTimerControl::createPath() { qCInfo(ServiceLogger) << "Creating systemd path"; m_systemdPath = getHomeConfigPath().append("/systemd/user/"); // 如果ä½�于玲ç�‘环境, 更改systemd path路径 QString linglongAppID = qgetenv("LINGLONG_APPID"); if (!linglongAppID.isEmpty()) { m_systemdPath = "/run/host/rootfs" + m_systemdPath; qCInfo(ServiceLogger) << "In Linglong environment, change the systemd path to " << m_systemdPath; } QDir dir; // 如果该路径ä¸�存在,则创建该文件夹 if (!dir.exists(m_systemdPath)) { qCInfo(ServiceLogger) << "Creating systemd user directory:" << m_systemdPath; dir.mkpath(m_systemdPath); } else { qCInfo(ServiceLogger) << "Systemd user directory already exists:" << m_systemdPath; } } QString CSystemdTimerControl::execDirectCommand(const QString &program, const QStringList &args) { qCDebug(ServiceLogger) << "Executing command:" << program << "with args:" << args; QProcess process; // 直接å�¯åŠ¨ç¨‹åº�,ä¸�通过 shell process.start(program, args); // 设置超时时间(30秒) if (!process.waitForStarted(5000)) { qCWarning(ServiceLogger) << "Failed to start process:" << program << "Error:" << process.errorString(); return QString(); } if (!process.waitForFinished(30000)) { qCWarning(ServiceLogger) << "Process timeout:" << program; process.terminate(); process.waitForFinished(1000); return QString(); } QString strResult = QString::fromUtf8(process.readAllStandardOutput()); qCDebug(ServiceLogger) << "Command output:" << strResult; return strResult; } QString CSystemdTimerControl::execSystemdCommand(const QStringList &args) { // 使用 systemctl --user 模å¼� QStringList fullArgs; fullArgs << "--user" << args; return execDirectCommand("systemctl", fullArgs); } void CSystemdTimerControl::createFile(const QString &fileName, const QString &content) { qCDebug(ServiceLogger) << "Creating file:" << fileName << "Content:" << content; QFile file; file.setFileName(fileName); file.open(QIODevice::ReadWrite | QIODevice::Text); file.write(content.toLatin1()); file.close(); } QString CSystemdTimerControl::loadTemplateFile(const QString &templatePath) { qCDebug(ServiceLogger) << "Loading template file from resources:" << templatePath; QFile file(":/" + templatePath); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qCWarning(ServiceLogger) << "Failed to open template file:" << templatePath; return QString(); } QString content = QString::fromLatin1(file.readAll()); file.close(); qCDebug(ServiceLogger) << "Template loaded successfully, size:" << content.size(); return content; } void CSystemdTimerControl::createServiceFromTemplate(const QString &name, const QString &command) { qCInfo(ServiceLogger) << "Creating service from template for name:" << name; QString fileName = m_systemdPath + name + ".service"; // Load template and replace placeholder QString templateContent = loadTemplateFile("systemd-service-template.service"); if (templateContent.isEmpty()) { qCWarning(ServiceLogger) << "Template is empty, using fallback"; templateContent = "[Unit]\nDescription=Calendar Schedule Task\n[Service]\nExecStart=@COMMAND@\n"; } // Replace @COMMAND@ placeholder QString content = templateContent.replace("@COMMAND@", command); qCDebug(ServiceLogger) << "Creating service file:" << fileName << "with command:" << command; createFile(fileName, content); } void CSystemdTimerControl::createTimerFromTemplate(const QString &name, const QDateTime &triggerTimer) { qCInfo(ServiceLogger) << "Creating timer from template for name:" << name << "TriggerTimer:" << triggerTimer.toString("yyyy-MM-dd hh:mm:ss"); QString fileName = m_systemdPath + name + ".timer"; // Load template and replace placeholder QString templateContent = loadTemplateFile("systemd-timer-template.timer"); if (templateContent.isEmpty()) { qCWarning(ServiceLogger) << "Template is empty, using fallback"; templateContent = "[Unit]\nDescription=Calendar Schedule Timer\n[Timer]\nAccuracySec=1ms\nRandomizedDelaySec=0\nOnCalendar=@SCHEDULE@\n[Install]\nWantedBy=timers.target\n"; } // Replace @SCHEDULE@ placeholder QString schedule = triggerTimer.toString("yyyy-MM-dd hh:mm:ss"); QString content = templateContent.replace("@SCHEDULE@", schedule); qCDebug(ServiceLogger) << "Creating timer file:" << fileName << "with schedule:" << schedule; createFile(fileName, content); } void CSystemdTimerControl::createPeriodicTimerFromTemplate(const QString &name, int intervalMinutes) { qCInfo(ServiceLogger) << "Creating periodic timer from template for name:" << name << "Interval:" << intervalMinutes << "minutes"; QString fileName = m_systemdPath + name + ".timer"; // Create periodic timer content (based on old implementation) QString content; content += "[Unit]\n"; content += "Description=Calendar Periodic Task\n"; content += "[Timer]\n"; content += "OnActiveSec=1s\n"; content += QString("OnUnitInactiveSec=%1m\n").arg(intervalMinutes); content += "AccuracySec=1us\n"; content += "RandomizedDelaySec=0\n"; content += "[Install]\n"; content += "WantedBy=timers.target\n"; qCDebug(ServiceLogger) << "Creating periodic timer file:" << fileName << "with interval:" << intervalMinutes << "minutes"; createFile(fileName, content); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/csystemdtimercontrol.h000066400000000000000000000113771523260663500302320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSYSTEMDTIMERCONTROL_H #define CSYSTEMDTIMERCONTROL_H #include #include #include struct SystemDInfo { QString accountID = ""; //å¸�户ID QString alarmID = ""; //æ��醒编å�·id qint64 laterCount = 0; //ç¨�å�Žæ��醒次数 QDateTime triggerTimer; //触å�‘æ—¶é—´ }; /** * @brief The CSystemdTimerControl class * systemd timer 控制类 */ class CSystemdTimerControl : public QObject { Q_OBJECT public: explicit CSystemdTimerControl(QObject *parent = nullptr); ~CSystemdTimerControl(); /** * @brief buildingConfiggure æ ¹æ�®æ—¥ç¨‹ä¿¡æ�¯é›†ï¼Œåˆ›å»ºç›¸å…³çš„systemdé…�置文件,å¹¶å¼€å�¯å®šæ—¶ä»»åŠ¡ * @param infoVector */ void buildingConfiggure(const QVector &infoVector); /** * @brief stopSystemdTimerByJobInfos æ ¹æ�®æ—¥ç¨‹ä¿¡æ�¯é›†ï¼Œå�œæ­¢ç›¸åº”的任务 * @param infoVector */ void stopSystemdTimerByJobInfos(const QVector &infoVector); /** * @brief stopSystemdTimerByJobInfo æ ¹æ�®æ—¥ç¨‹ä¿¡æ�¯ï¼Œå�œæ­¢ç›¸å…³ä»»åŠ¡ * @param info */ void stopSystemdTimerByJobInfo(const SystemDInfo &info); /** * @brief startSystemdTimer å¼€å�¯å®šæ—¶ä»»åŠ¡ * @param timerName 定时任务.timerå��称集å�ˆ */ void startSystemdTimer(const QStringList &timerName); /** * @brief stopSystemdTimer å�œæ­¢å®šæ—¶ä»»åŠ¡ * @param timerName 定时任务.timerå��称集å�ˆ */ void stopSystemdTimer(const QStringList &timerName); /** * @brief stopAllRemindSystemdTimer å�œæ­¢æ‰€æœ‰çš„æ—¥ç¨‹å®šæ—¶ä»»åŠ¡ */ void stopAllRemindSystemdTimer(const QString &accountID); /** * @brief removeRemindFile 移除日程定时任务相关文件 */ void removeRemindFile(const QString &accountID); /** * @brief startCalendarServiceSystemdTimer å¼€å�¯æ—¥ç¨‹å�Žç«¯å®šæ—¶å™¨ */ void startCalendarServiceSystemdTimer(); //å¼€å�¯å®šæ—¶ä¸‹è½½ä»»åŠ¡ void startDownloadTask(const QString &accountID, const int minute); void stopDownloadTask(const QString &accountID); //å¼€å�¯å®šæ—¶ä¸Šä¼ ä»»åŠ¡ void startUploadTask(const int minute); void stopUploadTask(); private: /** * @brief removeFile 移除.serviceå’Œ.timer文件 * @param fileName */ void removeFile(const QStringList &fileName); /** * @brief createPath * 创建systemd文件路径 */ void createPath(); /** * @brief loadTemplateFile 从Qt资æº�文件加载模æ�¿å†…容 * @param templatePath 模æ�¿æ–‡ä»¶è·¯å¾„ * @return 模æ�¿å†…容 */ QString loadTemplateFile(const QString &templatePath); /** * @brief createServiceFromTemplate 从模æ�¿åˆ›å»ºæœ�务文件 * @param name æœ�务å��ç§° * @param command è¦�执行的命令 */ void createServiceFromTemplate(const QString &name, const QString &command); /** * @brief createTimerFromTemplate 从模æ�¿åˆ›å»ºå®šæ—¶å™¨æ–‡ä»¶ï¼ˆä¸€æ¬¡æ€§æ��醒) * @param name 定时器å��ç§° * @param triggerTimer 触å�‘æ—¶é—´ */ void createTimerFromTemplate(const QString &name, const QDateTime &triggerTimer); /** * @brief createPeriodicTimerFromTemplate 从模æ�¿åˆ›å»ºå‘¨æœŸæ€§å®šæ—¶å™¨æ–‡ä»¶ï¼ˆç”¨äºŽä¸‹è½½/上传任务) * @param name 定时器å��ç§° * @param minuteMinutes é‡�å¤�间隔(分钟) */ void createPeriodicTimerFromTemplate(const QString &name, int intervalMinutes); /** * @brief execSystemdCommand 执行systemctl命令,使用QProcess直接调用,ä¸�ä¾�èµ–shell * @param args systemctl命令的å�‚数列表 * @return 命令输出 */ QString execSystemdCommand(const QStringList &args); /** * @brief execDirectCommand 直接执行命令,ä¸�使用shell * @param program 程åº�å�� * @param args å�‚数列表 * @return 命令输出 */ QString execDirectCommand(const QString &program, const QStringList &args = QStringList()); /** * @brief createFile 创建文件 * @param fileName 文件å��ç§° * @param content 内容 * @note 此方法为内部辅助方法,供模æ�¿æ–¹æ³•使用 */ void createFile(const QString &fileName, const QString &content); signals: public slots: private: QString m_systemdPath; }; #endif // CSYSTEMDTIMERCONTROL_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/000077500000000000000000000000001523260663500254735ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/daccountdatabase.cpp000066400000000000000000001372341523260663500314760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountdatabase.h" #include "commondef.h" #include "units.h" #include "pinyin/pinyinsearch.h" #include #include #include #include #include #include DAccountDataBase::DAccountDataBase(const DAccount::Ptr &account, QObject *parent) : DDataBase(parent) , m_account(account) { setConnectionName(m_account->accountName()); } QString DAccountDataBase::createSchedule(const DSchedule::Ptr &schedule) { if (!schedule.isNull()) { qCDebug(ServiceLogger) << "Creating schedule:" << schedule->summary() << "Start:" << schedule->dtStart().toString(); SqliteQuery query(m_database); schedule->setUid(DDataBase::createUuid()); QString strSql("INSERT INTO schedules \ (scheduleID, scheduleTypeID, summary, description, allDay, dtStart \ , dtEnd, isAlarm, titlePinyin,isLunar, ics, fileName, dtCreate, isDeleted) \ VALUES(?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?);"); if (query.prepare(strSql)) { query.addBindValue(schedule->schedulingID()); query.addBindValue(schedule->scheduleTypeID()); query.addBindValue(schedule->summary()); query.addBindValue(schedule->description()); query.addBindValue(schedule->allDay()); query.addBindValue(dtToString(schedule->dtStart())); query.addBindValue(dtToString(schedule->dtEnd())); query.addBindValue(schedule->hasEnabledAlarms()); query.addBindValue(pinyinsearch::getPinPinSearch()->CreatePinyin(schedule->summary())); query.addBindValue(schedule->lunnar()); query.addBindValue(DSchedule::toIcsString(schedule)); query.addBindValue(schedule->fileName()); query.addBindValue(dtToString(schedule->created())); query.addBindValue(0); if (!query.exec()) { schedule->setUid(""); qCWarning(ServiceLogger) << "Failed to create schedule:" << query.lastError().text(); } else { qCDebug(ServiceLogger) << "Successfully created schedule with ID:" << schedule->uid(); } if (query.isActive()) { query.finish(); } } else { schedule->setUid(""); qCWarning(ServiceLogger) << "Failed to prepare schedule creation query:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Attempted to create null schedule"; } return schedule->uid(); } bool DAccountDataBase::updateSchedule(const DSchedule::Ptr &schedule) { bool resbool = false; if (!schedule.isNull()) { qCDebug(ServiceLogger) << "Updating schedule:" << schedule->summary() << "ID:" << schedule->schedulingID(); SqliteQuery query(m_database); QString strSql("UPDATE schedules \ SET scheduleTypeID=?, summary=?, description=?, allDay=? \ , dtStart=?, dtEnd=?, isAlarm=?,titlePinyin=?, isLunar=?, ics=?, fileName=? \ , dtUpdate=? WHERE scheduleID= ?;"); if (query.prepare(strSql)) { query.addBindValue(schedule->scheduleTypeID()); query.addBindValue(schedule->summary()); query.addBindValue(schedule->description()); query.addBindValue(schedule->allDay()); query.addBindValue(dtToString(schedule->dtStart())); query.addBindValue(dtToString(schedule->dtEnd())); query.addBindValue(schedule->hasEnabledAlarms()); query.addBindValue(pinyinsearch::getPinPinSearch()->CreatePinyin(schedule->summary())); query.addBindValue(schedule->lunnar()); query.addBindValue(DSchedule::toIcsString(schedule)); query.addBindValue(schedule->fileName()); query.addBindValue(dtToString(schedule->lastModified())); query.addBindValue(schedule->schedulingID()); if (query.exec()) { resbool = true; qCDebug(ServiceLogger) << "Successfully updated schedule:" << schedule->schedulingID(); } else { qCWarning(ServiceLogger) << "Failed to update schedule:" << query.lastError().text(); } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } return resbool; } DSchedule::Ptr DAccountDataBase::getScheduleByScheduleID(const QString &scheduleID) { QString strSql("SELECT scheduleID, scheduleTypeID, summary, description, allDay, dtStart, dtEnd, \ isAlarm,titlePinyin,isLunar, ics, fileName, dtCreate, dtUpdate, dtDelete, isDeleted \ FROM schedules WHERE scheduleID = ? ;"); SqliteQuery query(m_database); DSchedule::Ptr schedule; if (query.prepare(strSql)) { query.addBindValue(scheduleID); schedule = DSchedule::Ptr(new DSchedule); if (query.exec()) { if (query.next()) { QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); schedule->setScheduleTypeID(query.value("scheduleTypeID").toString()); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); return schedule; } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); return schedule; } return schedule; } QStringList DAccountDataBase::getScheduleIDListByTypeID(const QString &typeID) { QStringList scheduleIDList; QString strSql("SELECT scheduleID FROM schedules WHERE scheduleTypeID = ?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(typeID); if (query.exec()) { while (query.next()) { scheduleIDList.append(query.value("scheduleID").toString()); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } return scheduleIDList; } bool DAccountDataBase::deleteScheduleByScheduleID(const QString &scheduleID, const int isDeleted) { QString strSql; if (isDeleted) { strSql = "DELETE FROM schedules WHERE scheduleID=?;"; } else { strSql = QString("UPDATE schedules SET dtDelete = '%1' , isDeleted = 1 WHERE scheduleID=?").arg(dtToString(QDateTime::currentDateTime())); } SqliteQuery query(m_database); bool resBool = false; if (query.prepare(strSql)) { query.addBindValue(scheduleID); resBool = query.exec(); } if (!resBool) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return resBool; } bool DAccountDataBase::deleteSchedulesByScheduleTypeID(const QString &typeID, const int isDeleted) { QString strSql; if (isDeleted) { strSql = "DELETE FROM schedules WHERE scheduleTypeID=?;"; } else { strSql = QString("UPDATE schedules SET dtDelete = '%1' , isDeleted = 1 WHERE scheduleTypeID=?").arg(dtToString(QDateTime::currentDateTime())); } SqliteQuery query(m_database); bool resBool = false; if (query.prepare(strSql)) { query.addBindValue(typeID); resBool = query.exec(); } if (!resBool) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return resBool; } DSchedule::List DAccountDataBase::querySchedulesByKey(const QString &key) { DSchedule::List scheduleList; QString strSql("SELECT s.scheduleID, s.scheduleTypeID, s.summary, s.description, s.allDay, s.dtStart, s.dtEnd, \ s.isAlarm,s.titlePinyin,s.isLunar, s.ics, s.fileName, s.dtCreate, s.dtUpdate, s.dtDelete, s.isDeleted \ FROM schedules s inner join scheduleType st WHERE s.isDeleted = 0 and st.showState =1 and s.scheduleTypeID = st.typeID "); //如果关键字ä¸�为空,添加查询æ�¡ä»¶ pinyinsearch *psearch = pinyinsearch::getPinPinSearch(); QMap sqlBindValue; QString strKey = key.trimmed(); if (psearch->CanQueryByPinyin(key)) { //å�¯ä»¥æŒ‰ç…§æ‹¼éŸ³æŸ¥è¯¢ QString pinyin = psearch->CreatePinyinQuery(strKey.toLower()); strSql += QString("and ( instr(UPPER(s.summary), UPPER(:key)) OR s.titlePinyin LIKE :pinyin )"); sqlBindValue[":key"] = key; sqlBindValue[":pinyin"] = pinyin; } else if (!key.isEmpty()) { //按照key查询 strSql += QString(" and instr(UPPER(s.summary), UPPER(:key))"); sqlBindValue[":key"] = key; } strSql.append(QString(" order by :strsort ")); sqlBindValue[":strsort"] = "s.dtStart asc"; SqliteQuery query(m_database); if (query.prepare(strSql)) { for (auto iter = sqlBindValue.constBegin(); iter != sqlBindValue.constEnd(); iter++) { query.bindValue(iter.key(), iter.value()); } if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule; QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); schedule->setScheduleTypeID(query.value("scheduleTypeID").toString()); scheduleList.append(schedule); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return scheduleList; } DSchedule::List DAccountDataBase::querySchedulesByRRule(const QString &key, const int &rruleType) { DSchedule::List scheduleList; QString strSql("SELECT scheduleID, scheduleTypeID, summary, description, allDay, dtStart, dtEnd, \ isAlarm,titlePinyin,isLunar, ics, fileName, dtCreate, dtUpdate, dtDelete, isDeleted \ FROM schedules "); SqliteQuery query(m_database); if (!key.isEmpty()) { strSql += " WHERE summary = ? "; } if (query.prepare(strSql)) { if (!key.isEmpty()) { query.addBindValue(key); } if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); schedule->setScheduleTypeID(query.value("scheduleTypeID").toString()); DSchedule::RRuleType rRuleType = schedule->getRRuleType(); //如果存在é‡�å¤�规则 if (schedule->recurs()) { //如果为需è¦�获å�–çš„é‡�å¤�规则 if (rruleType == rRuleType) { scheduleList.append(schedule); } } } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return scheduleList; } DSchedule::List DAccountDataBase::getRemindSchedule() { QString strSql("SELECT scheduleID, scheduleTypeID, summary, description, allDay, dtStart, dtEnd, isAlarm, \ titlePinyin, isLunar, ics, fileName, dtCreate, dtUpdate, dtDelete, isDeleted \ FROM schedules WHERE isAlarm =1;"); SqliteQuery query(m_database); DSchedule::List scheduleList; if (query.prepare(strSql)) { if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); QString &&icsStr = query.value("ics").toString(); DSchedule::fromIcsString(schedule, icsStr); scheduleList.append(schedule); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return scheduleList; } void DAccountDataBase::initDBData() { //如果ä¸�存在对应的数æ�®åº“则创建 if (!dbFileExists()) { qCDebug(ServiceLogger) << "Database file does not exist, creating new database"; createDB(); initTypeColor(); initScheduleDB(); initScheduleType(); initAccountDB(); } else { //如果存在则连接数æ�®åº“ qCDebug(ServiceLogger) << "Database file exists, opening connection"; dbOpen(); } } QString DAccountDataBase::createScheduleType(const DScheduleType::Ptr &scheduleType) { qCDebug(ServiceLogger) << "Creating schedule type:" << scheduleType->typeName(); QString strSql("INSERT INTO scheduleType ( \ typeID, typeName, typeDisplayName, typePath, \ typeColorID, description, privilege, showState, \ syncTag,dtCreate,isDeleted) \ VALUES(?,?,?,?,?,?,?,?,?,?,?)"); SqliteQuery query(m_database); if (query.prepare(strSql)) { if (scheduleType->typeID().size() < 30) { scheduleType->setTypeID(DDataBase::createUuid()); qCDebug(ServiceLogger) << "Generated new type ID:" << scheduleType->typeID(); } query.addBindValue(scheduleType->typeID()); query.addBindValue(scheduleType->typeName()); query.addBindValue(scheduleType->displayName()); query.addBindValue(scheduleType->typePath()); query.addBindValue(scheduleType->typeColor().colorID()); query.addBindValue(scheduleType->description()); query.addBindValue(int(scheduleType->privilege())); query.addBindValue(scheduleType->showState()); query.addBindValue(scheduleType->syncTag()); query.addBindValue(dtToString(scheduleType->dtCreate())); query.addBindValue(scheduleType->deleted()); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to create schedule type:" << query.lastError().text(); scheduleType->setTypeID(""); } } else { qCWarning(ServiceLogger) << "Failed to prepare schedule type creation query:" << query.lastError().text(); scheduleType->setTypeID(""); } if (query.isActive()) { query.finish(); } return scheduleType->typeID(); } DScheduleType::Ptr DAccountDataBase::getScheduleTypeByID(const QString &typeID, const int isDeleted) { DScheduleType::Ptr type; QString strSql("SELECT \ st.typeID , st.typeName ,st.typeDisplayName , \ st.typePath ,st.typeColorID ,tc.ColorHex , \ tc.privilege as colorPri,st.description, \ st.privilege as typePri,st.showState ,st.syncTag , \ st.dtCreate ,st.dtUpdate ,st.dtDelete ,st.isDeleted \ FROM \ scheduleType st \ inner join typeColor tc on \ st.typeColorID = tc.ColorID \ WHERE \ st.typeID = ? AND st.isDeleteD = ?"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(typeID); query.addBindValue(isDeleted); if (query.exec() && query.next()) { type = DScheduleType::Ptr(new DScheduleType(m_account->accountID())); type->setTypeID(typeID); type->setTypeName(query.value("typeName").toString()); type->setDisplayName(query.value("typeDisplayName").toString()); type->setTypePath(query.value("typePath").toString()); DTypeColor color; color.setColorID(query.value("typeColorID").toString()); color.setColorCode(query.value("ColorHex").toString()); color.setPrivilege(static_cast(query.value("colorPri").toInt())); type->setTypeColor(color); type->setDescription(query.value("description").toString()); type->setPrivilege(static_cast(query.value("typePri").toInt())); type->setSyncTag(query.value("syncTag").toInt()); type->setDtCreate(dtFromString(query.value("dtCreate").toString())); type->setDtUpdate(dtFromString(query.value("dtUpdate").toString())); type->setDtDelete(dtFromString(query.value("dtDelete").toString())); type->setShowState(static_cast(query.value("showState").toInt())); type->setDeleted(query.value("isDeleted").toInt()); systemTypeTran(type); } } else { qCWarning(ServiceLogger) << query.lastError(); } query.addBindValue(typeID); query.addBindValue(isDeleted); if (query.isActive()) { query.finish(); } return type; } DScheduleType::List DAccountDataBase::getScheduleTypeList(const int isDeleted) { QString strSql("SELECT \ st.typeID , st.typeName ,st.typeDisplayName , \ st.typePath ,st.typeColorID ,tc.ColorHex , \ tc.privilege as colorPri,st.description, \ st.privilege as typePri,st.showState ,st.syncTag , \ st.dtCreate ,st.dtUpdate ,st.dtDelete ,st.isDeleted \ FROM \ scheduleType st \ inner join typeColor tc on \ st.typeColorID = tc.ColorID \ WHERE \ st.isDeleted = ?"); DScheduleType::List typeList; SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(isDeleted); if (query.exec()) { while (query.next()) { DScheduleType::Ptr type = DScheduleType::Ptr(new DScheduleType(m_account->accountID())); type->setTypeID(query.value("typeID").toString()); type->setTypeName(query.value("typeName").toString()); type->setDisplayName(query.value("typeDisplayName").toString()); type->setTypePath(query.value("typePath").toString()); DTypeColor color; color.setColorID(query.value("typeColorID").toString()); color.setColorCode(query.value("ColorHex").toString()); color.setPrivilege(static_cast(query.value("colorPri").toInt())); type->setTypeColor(color); type->setDescription(query.value("description").toString()); type->setPrivilege(static_cast(query.value("typePri").toInt())); type->setSyncTag(query.value("syncTag").toInt()); type->setDtCreate(dtFromString(query.value("dtCreate").toString())); type->setDtUpdate(dtFromString(query.value("dtUpdate").toString())); type->setDtDelete(dtFromString(query.value("dtDelete").toString())); type->setShowState(static_cast(query.value("showState").toInt())); type->setDeleted(query.value("isDeleted").toInt()); systemTypeTran(type); typeList.append(type); } } else { qCWarning(ServiceLogger) << "getScheduleTypeList error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "getScheduleTypeList error:" << query.lastError(); } if (query.isActive()) { query.finish(); } return typeList; } bool DAccountDataBase::scheduleTypeByUsed(const QString &typeID, const int isDeleted) { QString strSql("SELECT COUNT(scheduleTypeID) FROM schedules WHERE scheduleTypeID = ? AND isDeleted = ?;"); SqliteQuery query(m_database); int typeCount = 0; if (query.prepare(strSql)) { query.addBindValue(typeID); query.addBindValue(isDeleted); if (query.exec() && query.next()) { typeCount = query.value(0).toInt(); } } else { qCWarning(ServiceLogger) << query.lastError(); } if (query.isActive()) { query.finish(); } return typeCount; } bool DAccountDataBase::deleteScheduleTypeByID(const QString &typeID, const int isDeleted) { SqliteQuery query(m_database); QString strSql; if (isDeleted == 0) { //弱删除 QDateTime &&dtCurrent = QDateTime::currentDateTime(); strSql = QString("UPDATE scheduleType SET dtDelete='%1', isDeleted=1 WHERE typeID=?;") .arg(dtToString(dtCurrent)); } else { //真删除 strSql = "DELETE FROM scheduleType WHERE typeID = ?"; } bool res = false; if (query.prepare(strSql)) { query.addBindValue(typeID); res = query.exec(); if (!res) { qCWarning(ServiceLogger) << "DELETE scheduleType error by typeID:" << typeID << " " << query.lastError(); } if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << "DELETE scheduleType error by typeID:" << typeID << " " << query.lastError(); } return res; } bool DAccountDataBase::updateScheduleType(const DScheduleType::Ptr &scheduleType) { bool res = false; SqliteQuery query(m_database); QString strSql("UPDATE scheduleType \ SET typeName=?, typeDisplayName=?, typePath=?, typeColorID=?, description=?, \ privilege=?, showState=?, dtUpdate=?, dtDelete=?, isDeleted=? \ WHERE typeID = ?"); if (query.prepare(strSql)) { query.addBindValue(scheduleType->typeName()); query.addBindValue(scheduleType->displayName()); query.addBindValue(scheduleType->typePath()); query.addBindValue(scheduleType->typeColor().colorID()); query.addBindValue(scheduleType->description()); query.addBindValue(int(scheduleType->privilege())); query.addBindValue(scheduleType->showState()); query.addBindValue(dtConvert(scheduleType->dtUpdate())); query.addBindValue(dtConvert(scheduleType->dtDelete())); query.addBindValue(scheduleType->deleted()); query.addBindValue(scheduleType->typeID()); if (query.exec()) { res = true; } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } if (query.isActive()) { query.finish(); } return res; } QString DAccountDataBase::getFestivalTypeID() { QString strSql("SELECT typeID FROM scheduleType WHERE privilege = 0;"); SqliteQuery query(m_database); QString typeID(""); if (query.prepare(strSql)) { if (query.exec()) { if (query.next()) { typeID = query.value("typeID").toString(); } } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "updateScheduleType error:" << query.lastError(); } if (query.isActive()) { query.finish(); } return typeID; } void DAccountDataBase::getAccountInfo(const DAccount::Ptr &account) { qCDebug(ServiceLogger) << "Getting account info for:" << account->accountName(); QString strSql("SELECT syncState,accountState, accountName, displayName, cloudPath, \ accountType, syncFreq, intervalTime, syncTag, expandStatus, dtLastUpdate \ FROM account WHERE id = 1;"); SqliteQuery query(m_database); if (query.prepare(strSql) && query.exec() && query.next()) { account->setSyncState(static_cast(query.value("syncState").toInt())); // accountState字段以accountmanager.db中accountManager字段为准,它会在登陆和切æ�¢çжæ€�æ—¶æ ¹æ�®æœ€æ–°äº‘å�Œæ­¥çжæ€�去更新开关状æ€� // account->setAccountState(static_cast(query.value("accountState").toInt())); account->setAccountName(query.value("accountName").toString()); account->setDisplayName(query.value("displayName").toString()); account->setCloudPath(query.value("cloudPath").toString()); account->setAccountType(static_cast(query.value("accountType").toInt())); account->setSyncFreq(static_cast(query.value("syncFreq").toInt())); account->setIntervalTime(query.value("intervalTime").toInt()); account->setSyncTag(query.value("syncTag").toInt()); account->setIsExpandDisplay(query.value("expandStatus").toBool()); account->setDtLastSync(dtFromString(query.value("dtLastUpdate").toString())); qCDebug(ServiceLogger) << "Successfully retrieved account info for:" << account->accountName(); } else { qCWarning(ServiceLogger) << "Failed to get account info:" << query.lastError().text(); } if (query.isActive()) { query.finish(); } } void DAccountDataBase::updateAccountInfo() { QString strSql("UPDATE account \ SET syncState=?, accountState = ?,accountName=?, displayName=?, \ cloudPath=?, accountType=?, syncFreq=?, intervalTime=?, syncTag=? \ , expandStatus = ?, dtLastUpdate = ? WHERE id=1;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(m_account->syncState()); query.addBindValue(int(m_account->accountState())); query.addBindValue(m_account->accountName()); query.addBindValue(m_account->displayName()); query.addBindValue(m_account->cloudPath()); query.addBindValue(m_account->accountType()); query.addBindValue(m_account->syncFreq()); query.addBindValue(m_account->intervalTime()); query.addBindValue(m_account->syncTag()); query.addBindValue(m_account->isExpandDisplay()); query.addBindValue(dtToString(m_account->dtLastSync())); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to update account info:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Failed to prepare account info update query:" << query.lastError().text(); } if (query.isActive()) { query.finish(); } } bool DAccountDataBase::addTypeColor(const DTypeColor::Ptr &typeColor) { if (typeColor.isNull()) return false; return addTypeColor(*typeColor.data()); } bool DAccountDataBase::addTypeColor(DTypeColor &typeColor) { QString strSql("INSERT INTO TypeColor \ (ColorID, ColorHex, privilege,dtCreate) \ VALUES(:ColorID, :ColorHex, :privilege,:dtCreate)"); //如果为空则创建颜色id if (typeColor.colorID().isEmpty()) { typeColor.setColorID(createUuid()); } if (typeColor.dtCreate().isNull()) { typeColor.setDtCreate(QDateTime::currentDateTime()); } SqliteQuery query(m_database); bool res = false; if (query.prepare(strSql)) { query.bindValue(":ColorID", typeColor.colorID()); query.bindValue(":ColorHex", typeColor.colorCode()); query.bindValue(":privilege", typeColor.privilege()); query.bindValue(":dtCreate", dtToString(typeColor.dtCreate())); if (query.exec()) { res = true; } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } if (query.isActive()) { query.finish(); } return res; } void DAccountDataBase::deleteTypeColor(const QString &colorNo) { QString strSql("DELETE FROM typeColor WHERE ColorID = ?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(colorNo); if (!query.exec()) { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } if (query.isActive()) { query.finish(); } } DTypeColor::List DAccountDataBase::getSysColor() { QString strSql("SELECT ColorID, ColorHex, privilege,dtCreate FROM typeColor WHERE privilege =1;"); SqliteQuery query(m_database); DTypeColor::List typeColorList; if (query.prepare(strSql) && query.exec()) { while (query.next()) { DTypeColor::Ptr color = DTypeColor::Ptr(new DTypeColor); color->setColorID(query.value("ColorID").toString()); color->setColorCode(query.value("ColorHex").toString()); color->setPrivilege(static_cast(query.value("privilege").toInt())); color->setDtCreate(dtFromString(query.value("dtCreate").toString())); typeColorList.append(color); } } else { qCWarning(ServiceLogger) << __FUNCTION__ << query.lastError(); } if (query.isActive()) { query.finish(); } return typeColorList; } void DAccountDataBase::createRemindInfo(const DRemindData::Ptr &remind) { QString strSql("INSERT INTO remindTask \ (alarmID, scheduleID, recurID,remindCount,notifyID \ , dtRemind, dtStart, dtEnd) \ VALUES(?,?,?,?,?,?,?,?);"); SqliteQuery query(m_database); if (query.prepare(strSql)) { remind->setAlarmID(createUuid()); query.addBindValue(remind->alarmID()); query.addBindValue(remind->scheduleID()); query.addBindValue(dtToString(remind->recurrenceId())); query.addBindValue(remind->remindCount()); query.addBindValue(remind->notifyid()); query.addBindValue(dtToString(remind->dtRemind())); query.addBindValue(dtToString(remind->dtStart())); query.addBindValue(dtToString(remind->dtEnd())); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to create reminder:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Failed to prepare reminder creation query:" << query.lastError().text(); } } void DAccountDataBase::updateRemindInfo(const DRemindData::Ptr &remind) { QString strSql("UPDATE remindTask \ SET scheduleID=?, recurID=?, remindCount=?, \ notifyID=?, dtRemind=?, dtStart=?, dtEnd=? WHERE alarmID = ?"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(remind->scheduleID()); query.addBindValue(dtToString(remind->recurrenceId())); query.addBindValue(remind->remindCount()); query.addBindValue(remind->notifyid()); query.addBindValue(dtToString(remind->dtRemind())); query.addBindValue(dtToString(remind->dtStart())); query.addBindValue(dtToString(remind->dtEnd())); query.addBindValue(remind->alarmID()); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to update reminder:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Failed to prepare reminder update query:" << query.lastError().text(); } } void DAccountDataBase::deleteRemindInfoByAlarmID(const QString &alarmID) { QString strSql("DELETE FROM remindTask WHERE alarmID=?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(alarmID); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to delete reminder:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Failed to prepare reminder deletion query:" << query.lastError().text(); } if (query.isActive()) { query.finish(); } } DRemindData::Ptr DAccountDataBase::getRemindData(const QString &alarmID) { QString strSql("SELECT alarmID, scheduleID, recurID, remindCount, notifyID, dtRemind, dtStart, dtEnd \ FROM remindTask WHERE alarmID = ? ;"); SqliteQuery query(m_database); DRemindData::Ptr remindData; if (query.prepare(strSql)) { query.addBindValue(alarmID); if (query.exec()) { while (query.next()) { remindData = DRemindData::Ptr(new DRemindData); remindData->setAlarmID(query.value("alarmID").toString()); remindData->setScheduleID(query.value("scheduleID").toString()); remindData->setRemindCount(query.value("remindCount").toInt()); remindData->setNotifyid(query.value("notifyID").toInt()); remindData->setDtStart(dtFromString(query.value("dtStart").toString())); remindData->setDtEnd(dtFromString(query.value("dtEnd").toString())); remindData->setDtRemind(dtFromString(query.value("dtRemind").toString())); remindData->setRecurrenceId(dtFromString(query.value("recurID").toString())); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return remindData; } DRemindData::List DAccountDataBase::getValidRemindJob() { QString strSql("SELECT alarmID,scheduleID, recurID, remindCount, notifyID, dtRemind, dtStart, dtEnd \ FROM remindTask WHERE dtRemind > ? ;"); SqliteQuery query(m_database); DRemindData::List remindList; if (query.prepare(strSql)) { query.addBindValue(dtToString(QDateTime::currentDateTime())); if (query.exec()) { while (query.next()) { DRemindData::Ptr remindData = DRemindData::Ptr(new DRemindData); remindData->setAccountID(m_account->accountID()); remindData->setAlarmID(query.value("alarmID").toString()); remindData->setScheduleID(query.value("scheduleID").toString()); remindData->setRemindCount(query.value("remindCount").toInt()); remindData->setNotifyid(query.value("notifyID").toInt()); remindData->setDtStart(dtFromString(query.value("dtStart").toString())); remindData->setDtEnd(dtFromString(query.value("dtEnd").toString())); remindData->setDtRemind(dtFromString(query.value("dtRemind").toString())); remindData->setRecurrenceId(dtFromString(query.value("recurID").toString())); remindList.append(remindData); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return remindList; } void DAccountDataBase::clearRemindJobDatabase() { SqliteQuery query(m_database); QString sql("delete from remindTask"); if (query.exec(sql)) { if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << "Failed to clear reminder jobs:" << query.lastError().text(); } } DRemindData::List DAccountDataBase::getRemindByScheduleID(const QString &scheduleID) { QString strSql("SELECT alarmID, scheduleID, recurID, remindCount, notifyID, dtRemind, dtStart, dtEnd \ FROM remindTask WHERE scheduleID = ? ;"); SqliteQuery query(m_database); DRemindData::List remindList; if (query.prepare(strSql)) { query.addBindValue(scheduleID); if (query.exec()) { while (query.next()) { DRemindData::Ptr remindData = DRemindData::Ptr(new DRemindData); remindData->setAlarmID(query.value("alarmID").toString()); remindData->setScheduleID(query.value("scheduleID").toString()); remindData->setRemindCount(query.value("remindCount").toInt()); remindData->setNotifyid(query.value("notifyID").toInt()); remindData->setDtStart(dtFromString(query.value("dtStart").toString())); remindData->setDtEnd(dtFromString(query.value("dtEnd").toString())); remindData->setDtRemind(dtFromString(query.value("dtRemind").toString())); remindData->setRecurrenceId(dtFromString(query.value("recurID").toString())); remindList.append(remindData); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return remindList; } void DAccountDataBase::addUploadTask(const DUploadTaskData::Ptr &uploadTask) { QString strSql("INSERT INTO uploadTask \ (taskID, uploadType, uploadObject, objectID, dtCreate) \ VALUES(?, ?, ?, ?, ?);"); SqliteQuery query(m_database); if (query.prepare(strSql)) { uploadTask->setTaskID(createUuid()); query.addBindValue(uploadTask->taskID()); query.addBindValue(uploadTask->taskType()); query.addBindValue(uploadTask->taskObject()); query.addBindValue(uploadTask->objectId()); query.addBindValue(dtToString(QDateTime::currentDateTime())); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } DUploadTaskData::List DAccountDataBase::getUploadTask() { DUploadTaskData::List uploadList; QString strSql("SELECT taskID, uploadType, uploadObject, objectID, dtCreate \ FROM uploadTask;"); SqliteQuery query(m_database); if (query.prepare(strSql) && query.exec()) { while (query.next()) { DUploadTaskData::Ptr upload = DUploadTaskData::Ptr(new DUploadTaskData); upload->setTaskID(query.value("taskID").toString()); upload->setTaskType(static_cast(query.value("uploadType").toInt())); upload->setTaskObject(static_cast(query.value("uploadObject").toInt())); upload->setObjectId(query.value("objectID").toString()); upload->setDtCreate(dtFromString(query.value("dtCreate").toString())); uploadList.append(upload); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } return uploadList; } void DAccountDataBase::deleteUploadTask(const QString &taskID) { QString strSql("DELETE FROM uploadTask WHERE taskID = ?;"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(taskID); if (!query.exec()) { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } } else { qCWarning(ServiceLogger) << Q_FUNC_INFO << query.lastError(); } if (query.isActive()) { query.finish(); } } void DAccountDataBase::createDB() { dbOpen(); //这里用QFileæ�¥ä¿®æ”¹æ—¥åŽ†æ•°æ�®åº“文件的æ�ƒé™� QFile file; file.setFileName(getDBPath()); //如果ä¸�存在该文件则创建 if (!file.exists() && m_database.open()) { m_database.close(); qCDebug(ServiceLogger) << "Created new database file:" << getDBPath(); } //å°†æ�ƒé™�修改为600(对文件的所有者å�¯ä»¥è¯»å†™ï¼Œå…¶ä»–用户ä¸�å�¯è¯»ä¸�å�¯å†™ï¼‰ if (!file.setPermissions(QFile::WriteOwner | QFile::ReadOwner)) { qCWarning(ServiceLogger) << "Failed to set database file permissions:" << file.errorString(); } if (m_database.open()) { SqliteQuery query(m_database); bool res = true; //å¸�户信æ�¯è¡¨ res = query.exec(sql_create_account); if (!res) { qCWarning(ServiceLogger) << "Failed to create account table:" << query.lastError().text(); } //日程表 res = query.exec(sql_create_schedules); if (!res) { qCWarning(ServiceLogger) << "Failed to create schedules table:" << query.lastError().text(); } //类型表 res = query.exec(sql_create_scheduleType); if (!res) { qCWarning(ServiceLogger) << "Failed to create scheduleType table:" << query.lastError().text(); } //颜色表 res = query.exec(sql_create_typeColor); if (!res) { qCWarning(ServiceLogger) << "Failed to create typeColor table:" << query.lastError().text(); } //创建上传任务表 res = query.exec(sql_create_uploadTask); if (!res) { qCWarning(ServiceLogger) << "Failed to create uploadTask table:" << query.lastError().text(); } //创建æ��醒任务表 res = query.exec(sql_create_remindTask); if (!res) { qCWarning(ServiceLogger) << "Failed to create remindTask table:" << query.lastError().text(); } if (query.isActive()) { query.finish(); } } } void DAccountDataBase::initScheduleDB() { //创建数æ�®åº“时,需è¦�åˆ�始化的日程数æ�® } void DAccountDataBase::initScheduleType() { //创建数æ�®åº“时,需è¦�åˆ�始化的类型数æ�® initSysType(); } void DAccountDataBase::initSysType() { //如果为本地å¸�户则åˆ�始化本地日程类型数æ�® if (m_account->accountType() == DAccount::Account_Local) { QDateTime currentTime = QDateTime::currentDateTime(); //添加节å�‡æ—¥æ—¥ç¨‹ç±»åž‹ï¼Œä¸�会展示在类型列表中 DScheduleType::Ptr scheduleType(new DScheduleType); scheduleType->setTypeID(createUuid()); scheduleType->setDtCreate(currentTime.addDays(-3)); scheduleType->setPrivilege(DScheduleType::None); scheduleType->setTypeName("festival"); scheduleType->setDisplayName("Holiday schedule type"); scheduleType->setColorID(GFestivalColorID); scheduleType->setColorCode("#FF9436"); scheduleType->setShowState(DScheduleType::Show); createScheduleType(scheduleType); //工作类型 DScheduleType::Ptr workType(new DScheduleType(m_account->accountID())); workType->setTypeID("107c369e-b13a-4d45-9ff3-de4eb3c0475b"); workType->setDtCreate(currentTime.addDays(-2)); workType->setPrivilege(DScheduleType::Read); workType->setTypeName("Work"); workType->setDisplayName("Work"); DTypeColor workColor; workColor.setColorID(GWorkColorID); workColor.setColorCode("#ff5e97"); workColor.setPrivilege(DTypeColor::PriSystem); workType->setTypeColor(workColor); workType->setShowState(DScheduleType::Show); createScheduleType(workType); //生活 DScheduleType::Ptr lifeType(new DScheduleType(m_account->accountID())); lifeType->setTypeID("24cf3ae3-541d-487f-83df-f068416b56b6"); lifeType->setDtCreate(currentTime.addDays(-1)); lifeType->setPrivilege(DScheduleType::Read); lifeType->setTypeName("Life"); lifeType->setDisplayName("Life"); DTypeColor lifeColor; lifeColor.setColorID(GLifeColorID); lifeColor.setColorCode("#5d51ff"); lifeColor.setPrivilege(DTypeColor::PriSystem); lifeType->setTypeColor(lifeColor); lifeType->setShowState(DScheduleType::Show); createScheduleType(lifeType); //å…¶ä»– DScheduleType::Ptr otherType(new DScheduleType(m_account->accountID())); otherType->setTypeID("403bf009-2005-4679-9c76-e73d9f83a8b4"); otherType->setDtCreate(currentTime); otherType->setPrivilege(DScheduleType::Read); otherType->setTypeName("Other"); otherType->setDisplayName("Other"); DTypeColor otherColor; otherColor.setColorID(GOtherColorID); otherColor.setColorCode("#5bdd80"); otherColor.setPrivilege(DTypeColor::PriSystem); otherType->setTypeColor(otherColor); otherType->setShowState(DScheduleType::Show); createScheduleType(otherType); } } void DAccountDataBase::systemTypeTran(const DScheduleType::Ptr &type) { //如果为本地å¸�户且类型为默认类型 if ((m_account->accountType() == DAccount::Account_Local || m_account->accountType() == DAccount::Account_UnionID) && type->privilege() == DScheduleType::Privilege::Read) { if (type->typeName() == "Work") { type->setDisplayName(tr("Work")); } else if (type->typeName() == "Life") { type->setDisplayName(tr("Life")); } else if (type->typeName() == "Other") { type->setDisplayName(tr("Other")); } } } void DAccountDataBase::initTypeColor() { QDateTime currentTime = QDateTime::currentDateTime(); int index = -10; QMap::const_iterator iter = GTypeColor.constBegin(); for (; iter != GTypeColor.constEnd(); ++iter) { DTypeColor::Ptr typeColor(new DTypeColor); typeColor->setDtCreate(currentTime.addDays(++index)); typeColor->setPrivilege(DTypeColor::PriSystem); typeColor->setColorCode(iter.value()); typeColor->setColorID(iter.key()); addTypeColor(typeColor); } } void DAccountDataBase::initAccountDB() { QString strSql("INSERT \ INTO \ account \ (syncState,accountState,accountName, \ displayName,cloudPath,accountType, \ syncFreq,intervalTime,syncTag, expandStatus) \ VALUES(?,?,?,?,?,?,?,?,?,?);"); SqliteQuery query(m_database); if (query.prepare(strSql)) { query.addBindValue(m_account->syncState()); query.addBindValue(int(m_account->accountState())); query.addBindValue(m_account->accountName()); query.addBindValue(m_account->displayName()); query.addBindValue(m_account->cloudPath()); query.addBindValue(m_account->accountType()); query.addBindValue(m_account->syncFreq()); query.addBindValue(m_account->intervalTime()); query.addBindValue(m_account->syncTag()); query.addBindValue(m_account->isExpandDisplay()); if (!query.exec()) { qCWarning(ServiceLogger) << "initAccountDB error:" << query.lastError(); } } else { qCWarning(ServiceLogger) << "initAccountDB error:" << query.lastError(); } if (query.isActive()) { query.finish(); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/daccountdatabase.h000066400000000000000000000102761523260663500311370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTDATABASE_H #define DACCOUNTDATABASE_H #include "ddatabase.h" #include "daccount.h" #include "dschedule.h" #include "dscheduletype.h" #include "dreminddata.h" #include "duploadtaskdata.h" #include "dtypecolor.h" #include class DAccountDataBase : public DDataBase { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAccountDataBase(const DAccount::Ptr &account, QObject *parent = nullptr); //åˆ�始化数æ�®åº“æ•°æ�®ï¼Œä¼šåˆ›å»ºæ•°æ�®åº“文件和相关数æ�®è¡¨ void initDBData() override; ///////////////日程信æ�¯ //创建日程 QString createSchedule(const DSchedule::Ptr &schedule); bool updateSchedule(const DSchedule::Ptr &schedule); //æ ¹æ�®æ—¥ç¨‹id获å�–日程信æ�¯ DSchedule::Ptr getScheduleByScheduleID(const QString &scheduleID); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–日程id列表 QStringList getScheduleIDListByTypeID(const QString &typeID); bool deleteScheduleByScheduleID(const QString &scheduleID, const int isDeleted = 0); bool deleteSchedulesByScheduleTypeID(const QString &typeID, const int isDeleted = 0); //æ ¹æ�®å…³é”®å­—查询一定范围内的日程 DSchedule::List querySchedulesByKey(const QString &key); //æ ¹æ�®é‡�å¤�规则查询一定范围内的日程 DSchedule::List querySchedulesByRRule(const QString &key, const int &rruleType); //获å�–需è¦�æ��醒的日程信æ�¯ DSchedule::List getRemindSchedule(); ///////////////类型信æ�¯ /** * @brief createScheduleType 创建日程类型 * @param typeInfo * @return */ QString createScheduleType(const DScheduleType::Ptr &scheduleType); virtual DScheduleType::Ptr getScheduleTypeByID(const QString &typeID, const int isDeleted = 0); virtual DScheduleType::List getScheduleTypeList(const int isDeleted = 0); bool scheduleTypeByUsed(const QString &typeID, const int isDeleted = 0); bool deleteScheduleTypeByID(const QString &typeID, const int isDeleted = 0); bool updateScheduleType(const DScheduleType::Ptr &scheduleType); //获å�–节å�‡æ—¥ç±»åž‹ID QString getFestivalTypeID(); ///////////////å¸�户信æ�¯ void getAccountInfo(const DAccount::Ptr &account); void updateAccountInfo(); ///////////////////类型颜色 bool addTypeColor(const DTypeColor::Ptr &typeColor); bool addTypeColor(DTypeColor &typeColor); void deleteTypeColor(const QString &colorNo); //获å�–内置类型颜色 DTypeColor::List getSysColor(); ////////////////////任务 /** * @brief createRemindInfo 存储æ��醒日程的相关信æ�¯ * @param remind */ void createRemindInfo(const DRemindData::Ptr &remind); /** * @brief updateRemindJob 更新对应的ç¨�å�Žæ��醒日程 * @param job 日程信æ�¯ */ void updateRemindInfo(const DRemindData::Ptr &remind); void deleteRemindInfoByAlarmID(const QString &alarmID); DRemindData::Ptr getRemindData(const QString &alarmID); /** * @brief getValidRemindJob 获å�–未æ��醒的ç¨�å�Žæ��醒日程 * @return */ DRemindData::List getValidRemindJob(); /** * @brief clearRemindJobDatabase 清空ç¨�å�Žæ��醒表 */ void clearRemindJobDatabase(); DRemindData::List getRemindByScheduleID(const QString &scheduleID); /** * @brief deleteRemindJobs æ ¹æ�®æ—¥ç¨‹id删除æ��醒日程信æ�¯ * @param Ids 日程id集 */ void deleteRemindInfos(const QStringList &jobIDs); //添加上传任务 void addUploadTask(const DUploadTaskData::Ptr &uploadTask); DUploadTaskData::List getUploadTask(); void deleteUploadTask(const QString &taskID); protected: virtual void initScheduleType(); //åˆ�始化系统类型 virtual void initSysType(); void systemTypeTran(const DScheduleType::Ptr &type); protected: void createDB() override; //åˆ�始化日程数æ�®åº“ void initScheduleDB(); void initTypeColor(); void initAccountDB(); protected: DAccount::Ptr m_account; }; #endif // DACCOUNTDATABASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/daccountmanagerdatabase.cpp000066400000000000000000000400651523260663500330240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmanagerdatabase.h" #include "units.h" #include "commondef.h" #include #include #include #include DAccountManagerDataBase::DAccountManagerDataBase(QObject *parent) : DDataBase(parent) { qCDebug(ServiceLogger) << "DAccountManagerDataBase constructor"; setConnectionName(NameAccountManager); } void DAccountManagerDataBase::initDBData() { qCDebug(ServiceLogger) << "Initializing account manager database"; createDB(); initAccountManagerDB(); } DAccount::List DAccountManagerDataBase::getAccountList() { qCDebug(ServiceLogger) << "Getting account list"; DAccount::List accountList; QString strSql("SELECT accountID,accountName, displayName, accountState, accountAvatar, \ accountDescription, accountType, dbName,dBusPath,dBusInterface, dtCreate, expandStatus, dtDelete, dtUpdate, isDeleted \ FROM accountManager"); SqliteQuery query(m_database); if (query.prepare(strSql) && query.exec()) { while (query.next()) { DAccount::Type type = static_cast(query.value("accountType").toInt()); DAccount::Ptr account(new DAccount(type)); account->setAccountID(query.value("accountID").toString()); account->setAccountName(query.value("accountName").toString()); account->setDisplayName(query.value("displayName").toString()); account->setAccountState(static_cast(query.value("accountState").toInt())); account->setAvatar(query.value("accountAvatar").toString()); account->setDescription(query.value("accountDescription").toString()); account->setDbName(query.value("dbName").toString()); account->setDbusPath(query.value("dBusPath").toString()); account->setDbusInterface(query.value("dBusInterface").toString()); account->setIsExpandDisplay(query.value("expandStatus").toBool()); account->setDtCreate(QDateTime::fromString(query.value("dtCreate").toString(), Qt::ISODate)); accountList.append(account); } } else { qCWarning(ServiceLogger) << "Failed to get account list:" << query.lastError().text(); } return accountList; } DAccount::Ptr DAccountManagerDataBase::getAccountByID(const QString &accountID) { qCDebug(ServiceLogger) << "Getting account by ID:" << accountID; QString strSql("SELECT accountName, displayName, accountState, accountAvatar, \ accountDescription, accountType, dbName,dBusPath,dBusInterface, dtCreate, dtDelete, dtUpdate, expandStatus, isDeleted \ FROM accountManager WHERE accountID = ?"); SqliteQuery query(m_database); if (query.prepare(strSql)) { qCDebug(ServiceLogger) << "Preparing query for account ID:" << accountID; query.addBindValue(accountID); if (query.exec() && query.next()) { DAccount::Type type = static_cast(query.value("accountType").toInt()); DAccount::Ptr account(new DAccount(type)); account->setAccountID(accountID); account->setAccountName(query.value("accountName").toString()); account->setDisplayName(query.value("displayName").toString()); account->setAccountState(static_cast(query.value("accountState").toInt())); account->setAvatar(query.value("accountAvatar").toString()); account->setDescription(query.value("accountDescription").toString()); account->setDbName(query.value("dbName").toString()); account->setDbusPath(query.value("dBusPath").toString()); account->setDbusInterface(query.value("dBusInterface").toString()); account->setIsExpandDisplay(query.value("expandStatus").toBool()); account->setDtCreate(QDateTime::fromString(query.value("dtCreate").toString(), Qt::ISODate)); return account; } else { qCWarning(ServiceLogger) << "Account not found or query failed:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Failed to prepare account query:" << query.lastError().text(); } return nullptr; } QString DAccountManagerDataBase::addAccountInfo(const DAccount::Ptr &accountInfo) { qCDebug(ServiceLogger) << "Adding new account:" << accountInfo->accountName(); SqliteQuery query(m_database); //生æˆ�唯一标识 if (accountInfo->accountID().isEmpty()) { qCDebug(ServiceLogger) << "Generating new account ID"; accountInfo->setAccountID(DDataBase::createUuid()); qCDebug(ServiceLogger) << "Generated new account ID:" << accountInfo->accountID(); } QString strSql("INSERT INTO accountManager \ (accountID, accountName, displayName, accountState, accountAvatar, \ accountDescription, accountType, dbName,dBusPath,dBusInterface, dtCreate, \ expandStatus, isDeleted) \ VALUES(?,?, ?, ?,?,?,?,?,?,?,?,?,?)"); if (query.prepare(strSql)) { query.addBindValue(accountInfo->accountID()); query.addBindValue(accountInfo->accountName()); query.addBindValue(accountInfo->displayName()); query.addBindValue(int(accountInfo->accountState())); query.addBindValue(accountInfo->avatar()); query.addBindValue(accountInfo->description()); query.addBindValue(accountInfo->accountType()); query.addBindValue(accountInfo->dbName()); query.addBindValue(accountInfo->dbusPath()); query.addBindValue(accountInfo->dbusInterface()); query.addBindValue(dtToString(accountInfo->dtCreate())); query.addBindValue(accountInfo->isExpandDisplay()); query.addBindValue(0); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to add account:" << query.lastError().text(); accountInfo->setAccountID(""); } } else { qCWarning(ServiceLogger) << "Failed to prepare account insertion query:" << query.lastError().text(); accountInfo->setAccountID(""); } return accountInfo->accountID(); } bool DAccountManagerDataBase::updateAccountInfo(const DAccount::Ptr &accountInfo) { qCDebug(ServiceLogger) << "Updating account:" << accountInfo->accountName() << "ID:" << accountInfo->accountID(); QString strSql("UPDATE accountManager \ SET accountName=?, displayName=?, accountState= ?, \ accountAvatar=?, accountDescription=?, accountType=?, dbName=?, \ dBusPath = ? ,dBusInterface = ?, expandStatus = ? WHERE accountID=?"); SqliteQuery query(m_database); bool res = false; if (query.prepare(strSql)) { query.addBindValue(accountInfo->accountName()); query.addBindValue(accountInfo->displayName()); query.addBindValue(int(accountInfo->accountState())); query.addBindValue(accountInfo->avatar()); query.addBindValue(accountInfo->description()); query.addBindValue(accountInfo->accountType()); query.addBindValue(accountInfo->dbName()); query.addBindValue(accountInfo->dbusPath()); query.addBindValue(accountInfo->dbusInterface()); query.addBindValue(accountInfo->isExpandDisplay()); query.addBindValue(accountInfo->accountID()); res = query.exec(); } if (!res) { qCWarning(ServiceLogger) << "Failed to update account:" << query.lastError().text(); } return res; } bool DAccountManagerDataBase::deleteAccountInfo(const QString &accountID) { qCDebug(ServiceLogger) << "Deleting account with ID:" << accountID; QString strSql("DELETE FROM accountManager \ WHERE accountID=?"); SqliteQuery query(m_database); bool res = false; if (query.prepare(strSql)) { query.addBindValue(accountID); res = query.exec(); } if (!res) { qCWarning(ServiceLogger) << "Failed to delete account:" << query.lastError().text(); } return res; } // ä¿�存通用设置 DCalendarGeneralSettings::Ptr DAccountManagerDataBase::getCalendarGeneralSettings() { qCDebug(ServiceLogger) << "Getting calendar general settings"; DCalendarGeneralSettings::Ptr cgSet(new DCalendarGeneralSettings); SqliteQuery query(m_database); query.exec("select vch_value from calendargeneralsettings where vch_key = 'firstDayOfWeek' "); if (query.next()) { cgSet->setFirstDayOfWeek(static_cast(query.value(0).toInt())); qCDebug(ServiceLogger) << "Retrieved first day of week:" << cgSet->firstDayOfWeek(); } query.exec("select vch_value from calendargeneralsettings where vch_key = 'timeShowType' "); if (query.next()) { cgSet->setTimeShowType(static_cast(query.value(0).toInt())); qCDebug(ServiceLogger) << "Retrieved time show type:" << cgSet->timeShowType(); } return cgSet; } // 获å�–通用设置 void DAccountManagerDataBase::setCalendarGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet) { qCDebug(ServiceLogger) << "Updating calendar general settings"; SqliteQuery query(m_database); query.prepare("update calendargeneralsettings set vch_value = ? where vch_key = 'firstDayOfWeek' "); query.addBindValue(cgSet->firstDayOfWeek()); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to update first day of week:" << query.lastError().text(); } query.prepare("update calendargeneralsettings set vch_value = ? where vch_key = 'timeShowType' "); query.addBindValue(cgSet->timeShowType()); if (!query.exec()) { qCWarning(ServiceLogger) << "Failed to update time show type:" << query.lastError().text(); } } void DAccountManagerDataBase::createDB() { qCDebug(ServiceLogger) << "Creating account manager database"; dbOpen(); //这里用QFileæ�¥ä¿®æ”¹æ—¥åŽ†æ•°æ�®åº“文件的æ�ƒé™� QFile file; file.setFileName(getDBPath()); //如果ä¸�存在该文件则创建 if (!file.exists()) { m_database.open(); m_database.close(); qCDebug(ServiceLogger) << "Created new database file:" << getDBPath(); } //å°†æ�ƒé™�修改为600(对文件的所有者å�¯ä»¥è¯»å†™ï¼Œå…¶ä»–用户ä¸�å�¯è¯»ä¸�å�¯å†™ï¼‰ if (!file.setPermissions(QFile::WriteOwner | QFile::ReadOwner)) { qCWarning(ServiceLogger) << "Failed to set database file permissions:" << file.errorString(); } if (m_database.open()) { SqliteQuery query(m_database); bool res = true; //创建å¸�户管ç�†è¡¨ res = query.exec(sql_create_accountManager); if (!res) { qCWarning(ServiceLogger) << "Failed to create accountManager table:" << query.lastError().text(); } //日历通用设置 res = query.exec(sql_create_calendargeneralsettings); if (!res) { qCWarning(ServiceLogger) << "Failed to create calendargeneralsettings table:" << query.lastError().text(); } //创建calendargeneralsettings的触å�‘器,数æ�®æœ‰å�˜åŠ¨æ—¶ï¼Œæ›´æ–°dt_update query.exec("SELECT name FROM sqlite_master WHERE type = 'trigger' and name = 'trigger_sync_calendargeneralsettings_datetime_when_insert'"); if (!query.next()) { query.exec("CREATE TRIGGER trigger_sync_calendargeneralsettings_datetime_when_insert AFTER INSERT " "ON calendargeneralsettings " "BEGIN " " replace into calendargeneralsettings (vch_key, vch_value) values('dt_update', datetime(CURRENT_TIMESTAMP,'localtime')); " "END;"); } query.exec("SELECT name FROM sqlite_master WHERE type = 'trigger' and name = 'trigger_sync_calendargeneralsettings_datetime_when_update'"); if (!query.next()) { query.exec("CREATE TRIGGER trigger_sync_calendargeneralsettings_datetime_when_update AFTER UPDATE " "ON calendargeneralsettings " "BEGIN " " replace into calendargeneralsettings (vch_key, vch_value) values('dt_update', datetime(CURRENT_TIMESTAMP,'localtime')); " "END;"); } query.exec("SELECT name FROM sqlite_master WHERE type = 'trigger' and name = 'trigger_sync_calendargeneralsettings_datetime_when_delete'"); if (!query.next()) { query.exec("CREATE TRIGGER trigger_sync_calendargeneralsettings_datetime_when_delete AFTER DELETE " "ON calendargeneralsettings " "BEGIN " " replace into calendargeneralsettings (vch_key, vch_value) values('dt_update', datetime(CURRENT_TIMESTAMP,'localtime')); " "END;"); } if (query.isActive()) { query.finish(); } } } void DAccountManagerDataBase::initAccountManagerDB() { qCDebug(ServiceLogger) << "Initializing account manager database tables"; QDateTime currentDateTime = QDateTime::currentDateTime(); currentDateTime.setOffsetFromUtc(currentDateTime.offsetFromUtc()); m_database = QSqlDatabase::database(NameAccountManager); m_database.setDatabaseName(getDBPath()); //å¸�户管ç�†è¡¨ { SqliteQuery query(m_database); QString strsql("INSERT INTO accountManager \ (accountID, accountName, displayName, \ accountState, accountAvatar, accountDescription, \ accountType, dbName,dBusPath,dBusInterface,dtCreate, dtUpdate, \ expandStatus, isDeleted) \ VALUES(:accountID,:accountName,:displayName,:accountState,:accountAvatar, \ :accountDescription,:accountType,:dbName,:dBusPath,:dBusInterface,:dtCreate,:dtUpdate, \ :expandStatus, :isDeleted);"); if (query.prepare(strsql)) { query.bindValue(":accountID", DDataBase::createUuid()); query.bindValue(":accountName", "localAccount"); query.bindValue(":displayName", "localAccount"); query.bindValue(":accountState", 0); query.bindValue(":accountAvatar", ""); query.bindValue(":accountDescription", ""); query.bindValue(":accountType", 0); query.bindValue(":dbName", m_loaclDB); query.bindValue(":dBusPath", serviceBasePath + "/account_local"); query.bindValue(":dBusInterface", accountServiceInterface); query.bindValue(":dtCreate", dtToString(currentDateTime)); query.bindValue(":expandStatus", 1); query.bindValue(":isDeleted", 0); if (query.exec()) { if (query.isActive()) { query.finish(); } } else { qCWarning(ServiceLogger) << "Failed to create local account:" << query.lastError().text(); } } else { qCWarning(ServiceLogger) << "Failed to prepare local account creation query:" << query.lastError().text(); } } //通用设置 { SqliteQuery query(m_database); if (query.exec("insert into calendargeneralsettings values" "('firstDayOfWeek', '7')," "('timeShowType', '0')")) { qCDebug(ServiceLogger) << "Initialized calendar general settings"; m_database.commit(); } else { qCWarning(ServiceLogger) << "Failed to initialize calendar general settings:" << query.lastError().text(); } } } void DAccountManagerDataBase::setLoaclDB(const QString &loaclDB) { qCDebug(ServiceLogger) << "Setting local database name:" << loaclDB; m_loaclDB = loaclDB; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/daccountmanagerdatabase.h000066400000000000000000000027431523260663500324720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DACCOUNTMANAGERDATABASE_H #define DACCOUNTMANAGERDATABASE_H #include "daccount.h" #include "dschedule.h" #include "ddatabase.h" #include "dcalendargeneralsettings.h" #include #include class DAccountManagerDataBase : public DDataBase { Q_OBJECT public: typedef QSharedPointer Ptr; explicit DAccountManagerDataBase(QObject *parent = nullptr); //åˆ�始化数æ�®åº“æ•°æ�®ï¼Œå�ªæœ‰åœ¨åˆ›å»ºè¡¨çš„æ—¶å€™æ‰�需è¦� void initDBData() override; ///////////////å¸�户 //获å�–所有å¸�户信æ�¯ DAccount::List getAccountList(); //æ ¹æ�®å¸�户id获å�–å¸�户信æ�¯ DAccount::Ptr getAccountByID(const QString &accountID); //添加å¸�户信æ�¯ QString addAccountInfo(const DAccount::Ptr &accountInfo); //æ›´æ–°å¸�户信æ�¯ bool updateAccountInfo(const DAccount::Ptr &accountInfo); //æ ¹æ�®å¸�户id删除对应å¸�户 bool deleteAccountInfo(const QString &accountID); ///////////////通用设置 DCalendarGeneralSettings::Ptr getCalendarGeneralSettings(); void setCalendarGeneralSettings(const DCalendarGeneralSettings::Ptr &cgSet); void setLoaclDB(const QString &loaclDB); protected: //创建数æ�®åº“ void createDB() override; void initAccountManagerDB(); private: QString m_loaclDB; }; #endif // DACCOUNTMANAGERDATABASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/ddatabase.cpp000066400000000000000000000265251523260663500301210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddatabase.h" #include "commondef.h" #include #include #include #include static QMap DbpathMutexMap;//记录所有用到的数æ�®åº“文件é”� static QMutex DbpathMutexMapMutex; //DbpathMutexMapçš„é”� /** * @brief getDbMutexRef æ ¹æ�®dbpath获å�–æ•°æ�®åº“文件é”�的引用 */ SqliteMutex &getDbMutexRef(const QString &dbpath) { qCDebug(ServiceLogger) << "Getting database mutex reference for path:" << dbpath; QMutexLocker locker(&DbpathMutexMapMutex); if (!DbpathMutexMap.contains(dbpath)) { qCDebug(ServiceLogger) << "Creating new mutex for database path:" << dbpath; DbpathMutexMap.insert(dbpath, SqliteMutex()); } return DbpathMutexMap[dbpath]; } const QString DDataBase::NameAccountManager = "AccountManager"; const QString DDataBase::NameSync = "SyncManager"; const QString DDataBase::sql_create_account = " CREATE TABLE if not exists account( " " id integer not null primary key, " " syncState integer not null , " " accountState integer not null, " " accountName text not null, " " displayName text not null, " " cloudPath text , " " accountType integer not null, " " syncFreq integer not null, " " intervalTime integer, " " syncTag integer, " " expandStatus integer, " " dtLastUpdate DATETIME " " )"; //日程表 const QString DDataBase::sql_create_schedules = " CREATE TABLE if not exists schedules (" " scheduleID TEXT not null primary key, " " scheduleTypeID TEXT not null, " " summary TEXT not null, " " description TEXT, " " allDay BOOL not null, " " dtStart DATETIME not null, " " dtEnd DATETIME not null, " " isAlarm INTEGER , " " titlePinyin TEXT, " " isLunar INTEGER not null, " " ics TEXT not null, " " fileName TEXT, " " dtCreate DATETIME not null, " " dtUpdate DATETIME , " " dtDelete DATETIME, " " isDeleted INTEGER not null)"; //类型表 const QString DDataBase::sql_create_scheduleType = " CREATE TABLE if not exists scheduleType ( " " typeID TEXT not null PRIMARY KEY, " " typeName TEXT not null, " " typeDisplayName TEXT, " " typePath TEXT, " " typeColorID TEXT not null, " " description TEXT , " " privilege INTEGER not null, " " showState INTEGER not null, " " syncTag INTEGER, " " dtCreate DATETIME not null, " " dtUpdate DATETIME, " " dtDelete DATETIME, " " isDeleted INTEGER not null)"; //颜色表 const QString DDataBase::sql_create_typeColor = " CREATE TABLE if not exists typeColor ( " " ColorID TEXT not null PRIMARY KEY, " " ColorHex TEXT not null, " " privilege INTEGER not null," " dtCreate DATETIME not null)"; //创建上传任务表 const QString DDataBase::sql_create_uploadTask = " CREATE TABLE if not exists uploadTask ( " " taskID TEXT NOT NULL PRIMARY KEY, " " uploadType integer NOT NULL, " " uploadObject integer NOT NULL, " " objectID TEXT NOT NULL, " " dtCreate DATETIME NOT NULL)"; //创建æ��醒任务表 const QString DDataBase::sql_create_remindTask = " CREATE TABLE if not exists remindTask ( " " alarmID TEXT NOT NULL PRIMARY KEY, " " scheduleID TEXT NOT NULL, " " recurID DATETIME , " " remindCount INTEGER, " " notifyID INTEGER , " " dtRemind DATETIME NOT NULL, " " dtStart DATETIME NOT NULL, " " dtEnd DATETIME NOT NULL)"; //创建å¸�户管ç�†è¡¨ const QString DDataBase::sql_create_accountManager = " CREATE TABLE if not exists accountManager ( " " accountID TEXT NOT NULL PRIMARY KEY, " " accountName TEXT NOT NULL, " " displayName TEXT NOT NULL, " " accountState INTEGER not null, " " accountAvatar TEXT, " " accountDescription TEXT , " " accountType INTEGER not null, " " dbName TEXT not null, " " dBusPath TEXT not null, " " dBusInterface TEXT not null, " " dtCreate DATETIME not null, " " dtDelete DATETIME, " " dtUpdate DATETIME, " " expandStatus integer, " " isDeleted INTEGER not null)"; //日历通用设置 const QString DDataBase::sql_create_calendargeneralsettings = " CREATE TABLE if not exists calendargeneralsettings( " " vch_key TEXT NOT NULL PRIMARY KEY, " " vch_value TEXT NOT NULL " " )"; const QString DDataBase::GWorkColorID = "0cecca8a-291b-46e2-bb92-63a527b77d46"; const QString DDataBase::GLifeColorID = "6cfd1459-1085-47e9-8ca6-379d47ec319a"; const QString DDataBase::GOtherColorID = "35e70047-98bb-49b9-8ad8-02d1c942f5d0"; const QString DDataBase::GFestivalColorID = "10af78a1-3c25-4744-91db-6fbe5e88083b"; DDataBase::DDataBase(QObject *parent) : QObject(parent) , m_DBPath("") , m_connectionName("") { qCDebug(ServiceLogger) << "Creating DDataBase instance"; } DDataBase::~DDataBase() { qCDebug(ServiceLogger) << "Destroying DDataBase instance"; } QString DDataBase::getDBPath() const { // qCDebug(ServiceLogger) << "Getting database path:" << m_DBPath; return m_DBPath; } void DDataBase::setDBPath(const QString &DBPath) { // qCDebug(ServiceLogger) << "Setting database path to:" << DBPath; m_DBPath = DBPath; } QString DDataBase::createUuid() { qCDebug(ServiceLogger) << "Creating new UUID"; return QUuid::createUuid().toString(QUuid::WithoutBraces); } QString DDataBase::getConnectionName() const { // qCDebug(ServiceLogger) << "Getting connection name:" << m_connectionName; return m_connectionName; } void DDataBase::setConnectionName(const QString &connectionName) { // qCDebug(ServiceLogger) << "Setting connection name to:" << connectionName; m_connectionName = connectionName; } void DDataBase::initDBData() { qCDebug(ServiceLogger) << "Initializing database data"; createDB(); } void DDataBase::dbOpen() { qCDebug(ServiceLogger) << "Opening database connection"; QStringList cntNames = QSqlDatabase::connectionNames(); if (cntNames.contains(getConnectionName())) { qCDebug(ServiceLogger) << "Using existing database connection:" << getConnectionName(); m_database = QSqlDatabase::database(getConnectionName()); //如果数æ�®åº“ä¸�一致则设置新的数æ�®åº“ if (m_database.databaseName() != getDBPath()) { qCDebug(ServiceLogger) << "Database path mismatch, updating to:" << getDBPath(); m_database.setDatabaseName(getDBPath()); } } else { qCDebug(ServiceLogger) << "Creating new database connection:" << getConnectionName(); m_database = QSqlDatabase::addDatabase("QSQLITE", getConnectionName()); m_database.setDatabaseName(getDBPath()); m_database.open(); } } bool DDataBase::dbFileExists() { qCDebug(ServiceLogger) << "Checking if database file exists:" << getDBPath(); QFile file; file.setFileName(getDBPath()); bool exists = file.exists(); qCDebug(ServiceLogger) << "Database file exists:" << exists; return exists; } void DDataBase::removeDB() { qCDebug(ServiceLogger) << "Removing database file:" << getDBPath(); QFile::remove(getDBPath()); } void SqliteMutex::lock() { // qCDebug(ServiceLogger) << "Attempting to lock SQLite mutex"; if (transactionLocked && transactionThreadId == qint64(QThread::currentThreadId())) { // qCDebug(ServiceLogger) << "Transaction already locked by current thread, skipping lock"; return; } // qCDebug(ServiceLogger) << "Acquiring SQLite mutex lock"; m.lock(); } void SqliteMutex::unlock() { // qCDebug(ServiceLogger) << "Attempting to unlock SQLite mutex"; if (transactionLocked && transactionThreadId == qint64(QThread::currentThreadId())) { // qCDebug(ServiceLogger) << "Transaction locked by current thread, skipping unlock"; return; } // qCDebug(ServiceLogger) << "Releasing SQLite mutex lock"; m.unlock(); } void SqliteMutex::transactionLock() { qCDebug(ServiceLogger) << "Acquiring transaction lock"; m.lock(); transactionLocked = true; transactionThreadId = qint64(QThread::currentThreadId()); qCDebug(ServiceLogger) << "Transaction lock acquired for thread:" << transactionThreadId; } void SqliteMutex::transactionUnlock() { qCDebug(ServiceLogger) << "Releasing transaction lock for thread:" << transactionThreadId; transactionLocked = false; transactionThreadId = 0; m.unlock(); qCDebug(ServiceLogger) << "Transaction lock released"; } SqliteQuery::SqliteQuery(QSqlDatabase db) : QSqlQuery(db) , _db(db) { qCDebug(ServiceLogger) << "Creating SqliteQuery with database connection"; } SqliteQuery::SqliteQuery(const QString &connectionName) : SqliteQuery(QSqlDatabase::database(connectionName)) { qCDebug(ServiceLogger) << "Creating SqliteQuery with connection name:" << connectionName; } SqliteQuery::SqliteQuery(const QString &query, QSqlDatabase db) : QSqlQuery(query, db) , _db(db) { qCDebug(ServiceLogger) << "Creating SqliteQuery with query:" << query; } bool SqliteQuery::exec(QString sql) { qCDebug(ServiceLogger) << "Executing SQL query:" << sql; getDbMutexRef(_db.databaseName()).lock(); bool f = QSqlQuery::exec(sql); qCDebug(ServiceLogger) << "SQL query execution result:" << f; getDbMutexRef(_db.databaseName()).unlock(); return f; } bool SqliteQuery::exec() { qCDebug(ServiceLogger) << "Executing prepared SQL query"; getDbMutexRef(_db.databaseName()).lock(); bool f = QSqlQuery::exec(); qCDebug(ServiceLogger) << "Prepared SQL query execution result:" << f; getDbMutexRef(_db.databaseName()).unlock(); return f; } void SqliteQuery::transaction() { qCDebug(ServiceLogger) << "Starting database transaction"; getDbMutexRef(_db.databaseName()).transactionLock(); _db.transaction(); } void SqliteQuery::commit() { qCDebug(ServiceLogger) << "Committing database transaction"; _db.commit(); getDbMutexRef(_db.databaseName()).transactionUnlock(); } void SqliteQuery::rollback() { qCDebug(ServiceLogger) << "Rolling back database transaction"; _db.rollback(); getDbMutexRef(_db.databaseName()).transactionUnlock(); } void SqliteMutex::UnCopyMutex::lock() { // qCDebug(ServiceLogger) << "Acquiring UnCopyMutex lock"; m.lock(); } void SqliteMutex::UnCopyMutex::unlock() { // qCDebug(ServiceLogger) << "Releasing UnCopyMutex lock"; m.unlock(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/ddatabase.h000066400000000000000000000074261523260663500275650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDATABASE_H #define DDATABASE_H #include #include #include #include #include #include #include //账户数æ�®åº“的实例 #define DBAccountManager QSqlDatabase::database(DDataBase::NameAccountManager) //云å�Œæ­¥çš„临时数æ�®åº“的实例 #define DBSync QSqlDatabase::database(DDataBase::NameSync) class DDataBase : public QObject { Q_OBJECT public: //账户数æ�®åº“的别å�� static const QString NameAccountManager; //云å�Œæ­¥çš„临时数æ�®åº“的别å�� static const QString NameSync; //账户 static const QString sql_create_account; //日程表 static const QString sql_create_schedules; //类型表 static const QString sql_create_scheduleType; //颜色表 static const QString sql_create_typeColor; //创建上传任务表 static const QString sql_create_uploadTask; //创建æ��醒任务表 static const QString sql_create_remindTask; //创建å¸�户管ç�†è¡¨ static const QString sql_create_accountManager; //日历通用设置 static const QString sql_create_calendargeneralsettings; //工作颜色id static const QString GWorkColorID; //生活颜色id static const QString GLifeColorID; //其他颜色id static const QString GOtherColorID; //节å�‡æ—¥é¢œè‰²id static const QString GFestivalColorID; public: explicit DDataBase(QObject *parent = nullptr); virtual ~DDataBase(); QString getDBPath() const; void setDBPath(const QString &DBPath); static QString createUuid(); QString getConnectionName() const; void setConnectionName(const QString &connectionName); //åˆ�始化数æ�®åº“æ•°æ�®ï¼Œä¼šåˆ›å»ºæ•°æ�®åº“文件和相关数æ�®è¡¨ virtual void initDBData(); void dbOpen(); //判断数æ�®åº“是å�¦å­˜åœ¨ bool dbFileExists(); //删除dbæ•°æ�®åº“文件 void removeDB(); protected: //创建数æ�®åº“ virtual void createDB() = 0; protected: QSqlDatabase m_database; QString m_DBPath; QString m_connectionName; }; /** * @brief The DbPathMutex struct æ•´ç�†äº†sqliteæ•°æ�®åº“文件é”�的相关æ“�作 */ struct SqliteMutex { private: /** * @brief The SqliteMutex struct 用于跳过QMutex的拷è´�构造函数和operator=函数的调用 */ struct UnCopyMutex { UnCopyMutex(){} UnCopyMutex(const UnCopyMutex &) {} UnCopyMutex &operator=(const UnCopyMutex &) {return *this;} void lock(); void unlock(); private: QMutex m; } m; //æ•°æ�®åº“文件é”� bool transactionLocked = false; //是å�¦å¼€å�¯äº‹åŠ¡ å�Š æ•°æ�®åº“文件是å�¦è¢«é”�定 qint64 transactionThreadId = 0; //å¼€å�¯äº‹åŠ¡çš„çº¿ç¨‹id public: /** * @brief lock æ•°æ�®åº“文件被é”�定,用于é�žäº‹åŠ¡åœºæ™¯ */ void lock(); /** * @brief unlock æ•°æ�®åº“文件被解é”�,用于é�žäº‹åŠ¡åœºæ™¯ */ void unlock(); /** * @brief transactionLock æ•°æ�®åº“文件被é”�定,用é�žäº‹åŠ¡åœºæ™¯ */ void transactionLock(); /** * @brief transactionUnlock æ•°æ�®åº“文件被解é”�,用é�žäº‹åŠ¡åœºæ™¯ */ void transactionUnlock(); }; /** * @brief The SqliteQuery class æ ¹æ�®æ•°æ�®åº“文件é”�æ�¥æ‰§è¡Œsql语å�¥çš„ç±» */ class SqliteQuery : public QSqlQuery { public: explicit SqliteQuery(QSqlDatabase db); explicit SqliteQuery(const QString &connectionName); SqliteQuery(const QString &query, QSqlDatabase db); bool exec(QString sql); bool exec(); void transaction(); void commit(); void rollback(); private: QSqlDatabase _db; }; #endif // DDATABASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/ddatabasemanagement.cpp000066400000000000000000000516141523260663500321530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddatabasemanagement.h" #include "commondef.h" #include "ddatabase.h" #include "vcalformat.h" #include "daccountdatabase.h" #include "daccountmanagerdatabase.h" #include "units.h" #include "recurrence.h" #include "alarm.h" #include "icalformat.h" #include "memorycalendar.h" #include #include #include #include #include #include #include const QString localDBName = "localAccount.db"; DDataBaseManagement::DDataBaseManagement() : m_newDatabaseName("accountmanager.db") , m_oldDatabaseName("scheduler.db") { qCDebug(ServiceLogger) << "Creating DDataBaseManagement instance"; //旧文件路径 qCDebug(ServiceLogger) << "Setting up database paths"; QString oldDbPath = getHomeConfigPath().append("/deepin/dde-daemon/calendar"); setOldDatabasePath(oldDbPath); //新文件路径 QString newDbPath = getDBPath(); setNewDatabasePath(newDbPath); QString newDB(newDatabasePath() + "/" + m_newDatabaseName); qCDebug(ServiceLogger) << "New database path:" << newDB; //如果新数æ�®åº“ä¸�存在 if (!databaseExists(newDatabasePath())) { qCDebug(ServiceLogger) << "New database does not exist, creating initial setup"; QString localAccountDB(newDatabasePath() + "/" + localDBName); qCDebug(ServiceLogger) << "Initializing account manager database"; DAccountManagerDataBase accountManager; accountManager.setDBPath(newDB); accountManager.setLoaclDB(localDBName); accountManager.initDBData(); qCDebug(ServiceLogger) << "Getting account list"; DAccount::List accountList = accountManager.getAccountList(); DAccount::Ptr localAccount; for (auto account : accountList) { if (account->accountType() == DAccount::Account_Local) { qCDebug(ServiceLogger) << "Found local account:" << account->accountName(); localAccount = account; break; } } qCDebug(ServiceLogger) << "Initializing local account database"; DAccountDataBase localDB(localAccount); localDB.setDBPath(localAccountDB); localDB.initDBData(); qCDebug(ServiceLogger) << "Getting system color list"; DTypeColor::List sysColorList = localDB.getSysColor(); QMap oldSysColor={ {"#FF5E97",1} ,{"#FF9436",2} ,{"#FFDC00",3} ,{"#5BDD80",4} ,{"#00B99B",5} ,{"#4293FF",6} ,{"#5D51FF",7} ,{"#A950FF",8} ,{"#717171",9} }; qCDebug(ServiceLogger) << "Mapping system colors"; foreach (const auto &sysColor, sysColorList) { if(oldSysColor.contains(sysColor->colorCode())){ // qCDebug(ServiceLogger) << "Mapping color:" << sysColor->colorCode() << "to ID:" << sysColor->colorID(); m_sysColorID.insert(oldSysColor[sysColor->colorCode()],sysColor->colorID()); } } //判断是å�¦å­˜åœ¨æ—§çš„æ•°æ�®åº“ QString oldDBFile(oldDatabasePath() + "/" + m_oldDatabaseName); qCDebug(ServiceLogger) << "Checking for old database at:" << oldDBFile; if (databaseExists(oldDBFile)) { qCDebug(ServiceLogger) << "Found old database, starting migration from:" << oldDBFile; //对数æ�®è¿›è¡Œè¿�ç§» qCDebug(ServiceLogger) << "Opening old database for migration"; QSqlDatabase oldDB = QSqlDatabase::addDatabase("QSQLITE", "oldDB"); oldDB.setDatabaseName(oldDBFile); oldDB.open(); qCDebug(ServiceLogger) << "Setting up default type mappings"; m_typeMap.insert(1, "107c369e-b13a-4d45-9ff3-de4eb3c0475b"); m_typeMap.insert(2, "24cf3ae3-541d-487f-83df-f068416b56b6"); m_typeMap.insert(3, "403bf009-2005-4679-9c76-e73d9f83a8b4"); //获å�–类型 qCDebug(ServiceLogger) << "Checking if old database has type table"; if (hasTypeDB(oldDB)) { qCDebug(ServiceLogger) << "Old database has type table, migrating types"; DScheduleType::List typeList = queryOldJobTypeData(oldDB); foreach (auto &type, typeList) { int &&typeid_int = type->typeID().toInt(); QString &&type_ID = localDB.createScheduleType(type); qCDebug(ServiceLogger) << "Mapped old type ID" << typeid_int << "to new ID" << type_ID; m_typeMap.insert(typeid_int, type_ID); } //获å�–颜色 qCDebug(ServiceLogger) << "Migrating old type colors"; QVector colorList = queryOldTypeColorData(oldDB); foreach (auto color, colorList) { localDB.addTypeColor(color); } } qCDebug(ServiceLogger) << "Migrating schedule data"; DSchedule::List scheduleList = queryOldJobData(oldDB, hasLunnarField(oldDB)); //将原数æ�®åº“中日程编å�·ä¸Žå½“å‰�日程编å�·åŒ¹é…�上 foreach (auto schedule, scheduleList) { int scheduleID = schedule->uid().toInt(); QString newScheduleID = localDB.createSchedule(schedule); // qCDebug(ServiceLogger) << "Mapped old schedule ID" << scheduleID << "to new ID" << newScheduleID; m_schedule.insert(scheduleID, newScheduleID); } //æ��醒任务 qCDebug(ServiceLogger) << "Checking if old database has reminder table"; if (hasRemindDB(oldDB)) { qCDebug(ServiceLogger) << "Migrating reminder data"; DRemindData::List remindList = querOldRemindData(oldDB); foreach (auto remind, remindList) { remind->setAccountID(localAccount->accountID()); localDB.createRemindInfo(remind); } qCDebug(ServiceLogger) << "Migrated" << remindList.size() << "reminder entries"; } qCDebug(ServiceLogger) << "Database migration completed successfully"; m_hasTransfer = true; } else { qCDebug(ServiceLogger) << "No old database found, skipping migration"; } } else { qCDebug(ServiceLogger) << "New database already exists, skipping initialization"; } } QString DDataBaseManagement::newDatabasePath() const { // qCDebug(ServiceLogger) << "Getting new database path:" << m_newDatabasePath; return m_newDatabasePath; } void DDataBaseManagement::setNewDatabasePath(const QString &newDatabasePath) { // qCDebug(ServiceLogger) << "Setting new database path to:" << newDatabasePath; m_newDatabasePath = newDatabasePath; } QString DDataBaseManagement::oldDatabasePath() const { // qCDebug(ServiceLogger) << "Getting old database path:" << m_oldDatabasePath; return m_oldDatabasePath; } void DDataBaseManagement::setOldDatabasePath(const QString &oldDatabasePath) { // qCDebug(ServiceLogger) << "Setting old database path to:" << oldDatabasePath; m_oldDatabasePath = oldDatabasePath; } bool DDataBaseManagement::databaseExists(const QString &databasePath, bool create) { qCDebug(ServiceLogger) << "Checking if database exists:" << databasePath << "create:" << create; QDir dir; bool exist = false; if (dir.exists(databasePath)) { exist = true; qCDebug(ServiceLogger) << "Database path exists:" << databasePath; } else { qCDebug(ServiceLogger) << "Database path does not exist:" << databasePath; if (create) { qCDebug(ServiceLogger) << "Creating database path:" << databasePath; dir.mkpath(databasePath); } } return exist; } bool DDataBaseManagement::hasLunnarField(QSqlDatabase &db) { qCDebug(ServiceLogger) << "Checking if database has lunar field"; SqliteQuery query(db); bool haslunnar = false; QString hasIsLunarField = "select count(1) from sqlite_master where type='table' and " "tbl_name = 'jobs' and sql like '%is_Lunar%'"; if (query.exec(hasIsLunarField) && query.next()) { //获å�–是å�¦å­˜åœ¨ä¸ºå†œåŽ†æ ‡è¯†å­—æ®µï¼Œè‹¥å­˜åœ¨åˆ™è¿”å›ž1,ä¸�存在则返回0 haslunnar = query.value(0).toInt(); qCDebug(ServiceLogger) << "Lunar field check result:" << haslunnar; } else { qCWarning(ServiceLogger) << "Failed to check lunar field:" << query.lastError().text(); } if (query.isActive()) { qCDebug(ServiceLogger) << "Finishing query"; query.finish(); } return haslunnar; } bool DDataBaseManagement::hasTypeDB(QSqlDatabase &db) { qCDebug(ServiceLogger) << "Checking if database has JobType table"; SqliteQuery query(db); bool hasType = false; QString strSql = "select count(1) from sqlite_master where type='table' and " "tbl_name = 'JobType'"; if (query.exec(strSql) && query.next()) { //获å�–是å�¦å­˜åœ¨ä¸ºå†œåŽ†æ ‡è¯†å­—æ®µï¼Œè‹¥å­˜åœ¨åˆ™è¿”å›ž1,ä¸�存在则返回0 hasType = query.value(0).toInt(); qCDebug(ServiceLogger) << "Type table check result:" << hasType; } else { qCWarning(ServiceLogger) << "Failed to check type table:" << query.lastError().text(); } if (query.isActive()) { qCDebug(ServiceLogger) << "Finishing query"; query.finish(); } return hasType; } bool DDataBaseManagement::hasRemindDB(QSqlDatabase &db) { qCDebug(ServiceLogger) << "Checking if database has jobsReminder table"; SqliteQuery query(db); bool hasRemind = false; QString strSql = "select count(1) from sqlite_master where type='table' and " "tbl_name = 'jobsReminder'"; if (query.exec(strSql) && query.next()) { //获å�–是å�¦å­˜åœ¨ä¸ºå†œåŽ†æ ‡è¯†å­—æ®µï¼Œè‹¥å­˜åœ¨åˆ™è¿”å›ž1,ä¸�存在则返回0 hasRemind = query.value(0).toInt(); qCDebug(ServiceLogger) << "Reminder table check result:" << hasRemind; } else { qCWarning(ServiceLogger) << "Failed to check reminder table:" << query.lastError().text(); } if (query.isActive()) { qCDebug(ServiceLogger) << "Finishing query"; query.finish(); } return hasRemind; } DScheduleType::List DDataBaseManagement::queryOldJobTypeData(QSqlDatabase &db) { qCDebug(ServiceLogger) << "Querying old job type data"; SqliteQuery query(db); //æ—§æ•°æ�®æ—¥ç¨‹é»˜è®¤åŒ…å�«ä¸€ä¸ªèŠ‚å�‡æ—¥æ—¥ç¨‹ç±»åž‹,其他的都为用户创建的类型 QString strSql("SELECT TypeNo, TypeName, ColorTypeNo, CreateTime, Authority \ FROM JobType where Authority >0;"); DScheduleType::List typeList; query.prepare(strSql); if (query.exec()) { while (query.next()) { DScheduleType::Ptr type = DScheduleType::Ptr(new DScheduleType); type->setTypeID(QString::number(query.value("TypeNo").toInt())); type->setTypeName(query.value("TypeName").toString()); type->setDisplayName(query.value("TypeName").toString()); type->setDtCreate(query.value("CreateTime").toDateTime()); type->setPrivilege(static_cast(query.value("Authority").toInt())); int oldColorTypeID = query.value("ColorTypeNo").toInt(); //如果为系统色 if(oldColorTypeID <10){ // qCDebug(ServiceLogger) << "Using system color for type:" << type->typeName(); type->setColorID(m_sysColorID[oldColorTypeID]); }else { //如果为用户自定义颜色 // qCDebug(ServiceLogger) << "Using custom color for type:" << type->typeName(); if (!m_typeColorID.contains(oldColorTypeID)) { m_typeColorID[oldColorTypeID] = DDataBase::createUuid(); } type->setColorID(m_typeColorID[oldColorTypeID]); } typeList.append(type); } qCDebug(ServiceLogger) << "Retrieved" << typeList.size() << "job types"; } else { qCWarning(ServiceLogger) << "Failed to query job types:" << query.lastError().text(); } return typeList; } DSchedule::List DDataBaseManagement::queryOldJobData(QSqlDatabase &db, const bool haslunar) { qCDebug(ServiceLogger) << "Querying old job data, has lunar field:" << haslunar; SqliteQuery query(db); QString strSql; if (haslunar) { qCDebug(ServiceLogger) << "Using SQL query with lunar field"; strSql = "SELECT id, created_at, \"type\", title, description, all_day, \ \"start\", \"end\", r_rule, remind, \"ignore\", title_pinyin, is_Lunar \ FROM jobs;"; } else { qCDebug(ServiceLogger) << "Using SQL query without lunar field"; strSql = "SELECT id, created_at, \"type\", title, description, all_day, \ \"start\", \"end\", r_rule, remind, \"ignore\", title_pinyin \ FROM jobs;"; } DSchedule::List scheduleList; query.prepare(strSql); if (query.exec()) { while (query.next()) { DSchedule::Ptr schedule = DSchedule::Ptr(new DSchedule); schedule->setUid(QString::number(query.value("id").toInt())); schedule->setDtStart(dtFromString(query.value("start").toString())); schedule->setCreated(dtFromString(query.value("created_at").toString())); schedule->setSummary(query.value("title").toString()); schedule->setAllDay(query.value("all_day").toBool()); schedule->setDtEnd(dtFromString(query.value("end").toString())); //如果有农历信æ�¯åˆ™è®¾ç½®ç›¸å…³ä¿¡æ�¯ if(haslunar){ bool isLunar = query.value("is_Lunar").toBool(); // qCDebug(ServiceLogger) << "Setting lunar info for schedule:" << schedule->summary() << "isLunar:" << isLunar; schedule->setLunnar(isLunar); } QString rrule = query.value("r_rule").toString(); if (!rrule.isEmpty()) { qCDebug(ServiceLogger) << "Processing recurrence rule for schedule:" << schedule->summary(); //é‡�å¤�规则 KCalendarCore::Recurrence *recurrence = schedule->recurrence(); KCalendarCore::ICalFormat ical; KCalendarCore::RecurrenceRule *rule = new KCalendarCore::RecurrenceRule; if (ical.fromString(rule, query.value("r_rule").toString())) { recurrence->addRRule(rule); qCDebug(ServiceLogger) << "Added recurrence rule for schedule:" << schedule->summary(); } else { qCWarning(ServiceLogger) << "Failed to parse recurrence rule for schedule:" << schedule->summary(); } //添加忽略列表 QJsonArray ignore = query.value("Ignore").toJsonArray(); qCDebug(ServiceLogger) << "Processing" << ignore.size() << "ignore entries for schedule:" << schedule->summary(); foreach (auto ignoreTime, ignore) { if (schedule->allDay()) { recurrence->addExDate(dtFromString(ignoreTime.toString()).date()); } else { recurrence->addExDateTime(dtFromString(ignoreTime.toString())); } } } QString remind = query.value("remind").toString(); if (!remind.isEmpty()) { qCDebug(ServiceLogger) << "Processing reminder for schedule:" << schedule->summary(); //æ��醒规则 QStringList strList = remind.split(";", QT_SKIP_EMPTY_PARTS); int remindNum = strList.at(0).toInt(); //å°�于0表示ä¸�æ��醒 if (remindNum >= 0) { qCDebug(ServiceLogger) << "Setting up reminder with offset:" << remindNum; KCalendarCore::Alarm::Ptr alarm = KCalendarCore::Alarm::Ptr(new KCalendarCore::Alarm(schedule.data())); alarm->setEnabled(true); alarm->setType(KCalendarCore::Alarm::Display); alarm->setDisplayAlarm(schedule->summary()); if (schedule->allDay()) { qCDebug(ServiceLogger) << "Setting all-day reminder for schedule:" << schedule->summary(); //æ��å‰�多少秒 int offset = 0; if (strList.size() > 1) { QTime time = QTime::fromString(strList.at(1), "hh:mm"); offset = time.hour() * 60 * 60 + time.second() * 60; } KCalendarCore::Duration duration(-(24 * 60 * 60 * remindNum - offset)); alarm->setStartOffset(duration); } else { qCDebug(ServiceLogger) << "Setting timed reminder for schedule:" << schedule->summary(); KCalendarCore::Duration duration(-(60 * remindNum)); alarm->setStartOffset(duration); } schedule->addAlarm(alarm); } } int type = query.value("type").toInt(); if (m_typeMap.contains(type)) { qCDebug(ServiceLogger) << "Setting schedule type for:" << schedule->summary() << "type:" << type; schedule->setScheduleTypeID(m_typeMap[type]); } else { qCWarning(ServiceLogger) << "Cannot find type mapping for type:" << type << "in schedule:" << schedule->summary(); } scheduleList.append(schedule); } } if (query.isActive()) { query.finish(); } return scheduleList; } QVector DDataBaseManagement::queryOldTypeColorData(QSqlDatabase &db) { qCDebug(ServiceLogger) << "Querying old type color data"; SqliteQuery query(db); QVector colorVector; //获å�–用户创建颜色 QString strSql("SELECT TypeNo, ColorHex, Authority \ FROM ColorType WHERE ID >9;"); query.prepare(strSql); if (query.exec()) { while (query.next()) { DTypeColor color; int oldTpyeID = query.value("TypeNo").toInt(); //如果包å�«åˆ™æ·»åŠ ,没有则丢弃 if (m_typeColorID.contains(oldTpyeID)) { // qCDebug(ServiceLogger) << "Migrating color with type ID:" << oldTpyeID; color.setColorID(m_typeColorID[oldTpyeID]); color.setColorCode(query.value("ColorHex").toString()); color.setPrivilege(DTypeColor::PriUser); colorVector.append(color); } else { // qCDebug(ServiceLogger) << "Skipping color with unmapped type ID:" << oldTpyeID; } } } if (query.isActive()) { query.finish(); } return colorVector; } DRemindData::List DDataBaseManagement::querOldRemindData(QSqlDatabase &db) { qCDebug(ServiceLogger) << "Querying old reminder data"; SqliteQuery query(db); DRemindData::List remindList; QString strSql("SELECT jobid, recurid, remindCount, notifyid, remindTime, jobStartTime, jobEndTime FROM jobsReminder;"); query.prepare(strSql); if (query.exec()) { while (query.next()) { int jobid = query.value("jobid").toInt(); if (m_schedule.contains(jobid)) { qCDebug(ServiceLogger) << "Migrating reminder for job ID:" << jobid; DRemindData::Ptr remind = DRemindData::Ptr(new DRemindData); remind->setScheduleID(m_schedule[jobid]); remind->setRemindCount(query.value("remindCount").toInt()); remind->setNotifyid(query.value("notifyid").toInt()); remind->setDtRemind(dtFromString(query.value("remindTime").toString())); remind->setDtStart(dtFromString(query.value("jobStartTime").toString())); remind->setDtEnd(dtFromString(query.value("jobEndTime").toString())); int recurid = query.value("recurid").toInt(); //如果é‡�å¤�id大于0,则表示为é‡�å¤�日程的æ��醒,设置æ��醒id为日程开始时间 if (recurid > 0) { // qCDebug(ServiceLogger) << "Setting recurrence ID for reminder"; remind->setRecurrenceId(remind->dtStart()); } remindList.append(remind); } else { // qCDebug(ServiceLogger) << "Skipping reminder for unmapped job ID:" << jobid; } } } if (query.isActive()) { query.finish(); } return remindList; } bool DDataBaseManagement::hasTransfer() const { // qCDebug(ServiceLogger) << "Checking transfer status:" << m_hasTransfer; return m_hasTransfer; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/ddatabasemanagement.h000066400000000000000000000035571523260663500316230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDATABASEMANAGEMENT_H #define DDATABASEMANAGEMENT_H #include "dschedule.h" #include "dscheduletype.h" #include "dreminddata.h" #include #include /** * @brief The DDataBaseManagement class * æ•°æ�®åº“åˆ�始化 ,管ç�†æ•°æ�®çš„创建和对旧版本的数æ�®è¿�ç§» */ class DDataBaseManagement { public: DDataBaseManagement(); bool hasTransfer() const; private: QString newDatabasePath() const; void setNewDatabasePath(const QString &newDatabasePath); QString oldDatabasePath() const; void setOldDatabasePath(const QString &oldDatabasePath); //æ•°æ�®åº“所在文件夹是å�¦å­˜åœ¨ï¼Œè‹¥ä¸�存在则创建该文件夹 bool databaseExists(const QString &databasePath, bool create = true); //æ—§æ•°æ�®åº“jab表是å�¦å­˜åœ¨æ˜¯å�¦ä¸ºå†œåŽ†æ—¥ç¨‹å­—æ®µ bool hasLunnarField(QSqlDatabase &db); //存在日程类型相关数æ�® bool hasTypeDB(QSqlDatabase &db); //存在æ��醒任务表 bool hasRemindDB(QSqlDatabase &db); DScheduleType::List queryOldJobTypeData(QSqlDatabase &db); DSchedule::List queryOldJobData(QSqlDatabase &db, const bool haslunar); QVector queryOldTypeColorData(QSqlDatabase &db); DRemindData::List querOldRemindData(QSqlDatabase &db); private: //æ–°æ•°æ�®åº“路径地å�€ QString m_newDatabasePath; //æ—§æ•°æ�®åº“路径地å�€ QString m_oldDatabasePath; QString m_newDatabaseName; QString m_oldDatabaseName; bool m_hasTransfer = false; QMap m_typeMap; QMap m_sysColorID; //日程类型内置颜色新旧id对应map QMap m_schedule; QMap m_typeColorID; //日程类型颜色新旧id对应map }; #endif // DDATABASEMANAGEMENT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/dhuanglidatabase.cpp000066400000000000000000000167251523260663500314720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dhuanglidatabase.h" #include "commondef.h" #include "units.h" #include #include #include #include #include #include #include #include #include const QString HolidayDir = ":/holiday-cn"; const QString HolidayUpdateURLPrefix ="https://cdn-nu-common.uniontech.com/deepin-calendar"; const QString HolidayUpdateDateSetKey = "festivalUpdateDate"; DHuangLiDataBase::DHuangLiDataBase(QObject *parent) : DDataBase(parent) , m_settings(getAppConfigDir().filePath("config.ini"), QSettings::IniFormat) { qCDebug(ServiceLogger) << "Initializing HuangLi database with config file:" << getAppConfigDir().filePath("config.ini"); QString huangliPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QString("dde-calendar/data/huangli.db"), QStandardPaths::LocateFile); setDBPath(huangliPath); qCDebug(ServiceLogger) << "Found huangli database at:" << huangliPath; setConnectionName("HuangLi"); dbOpen(); // 延迟一段时间å�Žï¼Œä»Žç½‘络更新节å�‡æ—¥ int delay = QRandomGenerator::global()->bounded(1000, 9999); qCDebug(ServiceLogger) << "Scheduling festival update in" << delay << "ms"; QTimer::singleShot(delay, this, &DHuangLiDataBase::updateFestivalList); } // readJSON 会读å�–一个JSON文件,如果 cache 为 true,则会缓存对象,以供下次使用 QJsonDocument DHuangLiDataBase::readJSON(QString filename, bool cache) { qCDebug(ServiceLogger) << "Reading JSON file:" << filename << "with cache:" << cache; if (cache && readJSONCache.contains(filename)) { qCDebug(ServiceLogger) << "Using cached JSON data for file:" << filename; return readJSONCache.value(filename); } qCDebug(ServiceLogger) << "Reading JSON file:" << filename; QJsonDocument doc; QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { qCWarning(ServiceLogger) << "Failed to open JSON file:" << filename << "Error:" << file.errorString(); } else { qCDebug(ServiceLogger) << "Successfully opened JSON file:" << filename; auto data = file.readAll(); doc = QJsonDocument::fromJson(data); qCDebug(ServiceLogger) << "Parsed JSON document from file:" << filename; } readJSONCache.insert(filename, doc); return readJSONCache.value(filename); } void DHuangLiDataBase::updateFestivalList() { qCDebug(ServiceLogger) << "Starting festival list update process"; auto now = QDateTime::currentDateTime(); auto festivalUpdateDate = now.toString("yyyy-MM-dd"); // æ¯�天更新一次 if (m_settings.value(HolidayUpdateDateSetKey, "") == festivalUpdateDate) { qCDebug(ServiceLogger) << "Festival data already updated today, skipping update"; return; } qCDebug(ServiceLogger) << "Updating festival data for date:" << festivalUpdateDate; m_settings.setValue(HolidayUpdateDateSetKey, festivalUpdateDate); // 获å�–今年和明年的节å�‡æ—¥æ•°æ�® for (auto i = 0; i < 2; i++) { auto year = now.date().year() + i; auto filename = getAppCacheDir().filePath(QString("%1.json").arg(year)); auto url = QString("%1/%2.json").arg(HolidayUpdateURLPrefix).arg(year); qCDebug(ServiceLogger) << "Downloading festival data for year" << year << "from" << url << "to" << filename; auto process = DownloadFile(url, filename); connect(process.get(), &QProcess::readyReadStandardError, [process, year]() { qCWarning(ServiceLogger) << "Download error for year" << year << ":" << process->readAllStandardError(); }); } qCDebug(ServiceLogger) << "Completed festival list update process"; } // queryFestivalList 查询指定月份的节å�‡æ—¥åˆ—表 QJsonArray DHuangLiDataBase::queryFestivalList(quint32 year, quint8 month) { qCDebug(ServiceLogger) << "Querying festival list for year:" << year << "month:" << month; QJsonArray dataset; QFile file(QString("%1/%2.json").arg(HolidayDir).arg(year)); if (file.open(QIODevice::ReadOnly)) { qCDebug(ServiceLogger) << "Successfully opened festival data file for year:" << year; auto data = file.readAll(); file.close(); auto doc = QJsonDocument::fromJson(data); auto daysArray = doc.object().value("days").toArray(); qCDebug(ServiceLogger) << "Processing" << daysArray.size() << "festival entries for year:" << year; for (auto val : daysArray) { auto day = val.toObject(); auto name = day.value("name").toString(); auto date = QDate::fromString(day.value("date").toString(), "yyyy-MM-dd"); auto isOffday = day.value("isOffDay").toBool(); if (quint32(date.year()) == year && quint32(date.month()) == month) { qCDebug(ServiceLogger) << "Found matching festival entry:" << name << "date:" << date.toString() << "isOffDay:" << isOffday; QJsonObject obj; obj.insert("name", name); obj.insert("date", date.toString("yyyy-MM-dd")); obj.insert("status", isOffday ? 1 : 2); dataset.append(obj); } } file.close(); } else { qCWarning(ServiceLogger) << "Failed to open festival data file for year:" << year; } qCDebug(ServiceLogger) << "Found" << dataset.size() << "festival entries for year:" << year << "month:" << month; return dataset; } QList DHuangLiDataBase::queryHuangLiByDays(const QList &days) { qCDebug(ServiceLogger) << "Querying HuangLi data for" << days.size() << "days"; QList infos; SqliteQuery query(m_database); foreach (stDay d, days) { // 查询的id qint64 id = QString().asprintf("%d%02d%02d", d.Year, d.Month, d.Day).toInt(); qCDebug(ServiceLogger) << "Querying HuangLi data for date:" << d.Year << "-" << d.Month << "-" << d.Day << "with id:" << id; QString strsql("SELECT id, avoid, suit FROM huangli WHERE id = %1"); strsql = strsql.arg(id); // æ•°æ�®åº“中的宜忌信æ�¯æ˜¯ä»Ž2008年开始的 stHuangLi sthuangli; // 因此这里先将sthuangli内容åˆ�始化 sthuangli.ID = id; // 如果数æ�®åº“中有查询到数æ�®ï¼Œåˆ™è¿›è¡Œèµ‹å€¼ï¼Œå¦‚果没有,则使用åˆ�始值 if (query.exec(strsql) && query.next()) { qCDebug(ServiceLogger) << "Found HuangLi data in database for id:" << id; sthuangli.ID = query.value("id").toInt(); sthuangli.Avoid = query.value("avoid").toString(); sthuangli.Suit = query.value("suit").toString(); } else { qCDebug(ServiceLogger) << "No HuangLi data found in database for id:" << id << ", using default values"; } // 将黄历数æ�®æ”¾åˆ°list中 infos.append(sthuangli); } if (query.isActive()) { qCDebug(ServiceLogger) << "Finishing HuangLi query"; query.finish(); } qCDebug(ServiceLogger) << "Retrieved HuangLi data for" << infos.size() << "days"; return infos; } void DHuangLiDataBase::initDBData() { qCDebug(ServiceLogger) << "Initializing HuangLi database data (placeholder method)"; } void DHuangLiDataBase::createDB() { qCDebug(ServiceLogger) << "Creating HuangLi database (placeholder method)"; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbmanager/dhuanglidatabase.h000066400000000000000000000016261523260663500311310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DHUANGLIDATABASE_H #define DHUANGLIDATABASE_H #include "ddatabase.h" #include "huangliData/lunardatastruct.h" #include "lunarandfestival/lunarandfestival.h" #include #include #include class DHuangLiDataBase : public DDataBase { Q_OBJECT public: explicit DHuangLiDataBase(QObject *parent = nullptr); QJsonArray queryFestivalList(quint32 year, quint8 month); QList queryHuangLiByDays(const QList &days); void initDBData() override; private: QJsonDocument readJSON(QString filename, bool cache); QHash readJSONCache; void updateFestivalList(); QSettings m_settings; protected: //创建数æ�®åº“ void createDB() override; }; #endif // DHUANGLIDATABASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/000077500000000000000000000000001523260663500245105ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/dbusnotify.cpp000066400000000000000000000012151523260663500274010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusnotify.h" DBusNotify::DBusNotify(const QString &service, const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, interface.toLatin1().data(), connection, parent) { } //æ ¹æ�®é€šçŸ¥ID关闭桌é�¢é¡¶éƒ¨é€šçŸ¥ void DBusNotify::closeNotification(quint32 notifyID) { QList argumentList; argumentList << notifyID; callWithArgumentList(QDBus::NoBlock, QStringLiteral("CloseNotification"), argumentList); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/dbusnotify.h000066400000000000000000000026551523260663500270570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSNOTIFY_H #define DBUSNOTIFY_H #include "commondef.h" #include class DBusNotify : public QDBusAbstractInterface { Q_OBJECT public: explicit DBusNotify(const QString &service, const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent = nullptr); inline int Notify(const QList &argumentList) { QDBusMessage reply = callWithArgumentList(QDBus::Block, QStringLiteral("Notify"), argumentList); int notifyid = -1; if (QDBusMessage::ReplyMessage == reply.type()) { qCDebug(ServiceLogger) << reply.type() << reply.errorName() << reply.errorMessage(); QDBusReply id = reply; if (id.isValid()) { notifyid = id.value(); } } else { qCDebug(ServiceLogger) << reply.type() << reply.errorName() << reply.errorMessage(); } return notifyid; } /** * @brief closeNotification æ ¹æ�®é€šçŸ¥ID关闭桌é�¢é¡¶éƒ¨é€šçŸ¥ * @param notifyID 通知ID */ void closeNotification(quint32 notifyID); Q_SIGNALS: // SIGNALS Q_SCRIPTABLE void NotificationClosed(quint32 id, quint32 reason); Q_SCRIPTABLE void ActionInvoked(quint32 id, const QString &reason); }; #endif // DBUSNOTIFY_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/dbusuiopenschedule.cpp000066400000000000000000000006051523260663500311070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusuiopenschedule.h" DbusUIOpenSchedule::DbusUIOpenSchedule(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/dbusuiopenschedule.h000066400000000000000000000015251523260663500305560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSUIOPENSCHEDULE_H #define DBUSUIOPENSCHEDULE_H #include class DbusUIOpenSchedule : public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "com.deepin.Calendar"; } explicit DbusUIOpenSchedule(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr); inline void OpenSchedule(const QString strjson) { QList argumentList; argumentList << strjson; //ä¸�需è¦�返回结果,å�‘é€�完直接结æ�Ÿ callWithArgumentList(QDBus::NoBlock, QStringLiteral("OpenSchedule"), argumentList); } }; #endif // DBUSUIOPENSCHEDULE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/dunioniddbus.cpp000066400000000000000000000017611523260663500277100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dunioniddbus.h" #include "commondef.h" #include DUnionIDDbus::DUnionIDDbus(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent) { auto reply = this->SwitcherDump(); reply.waitForFinished(); if (!reply.isValid()) { qCWarning(ServiceLogger) << "Error connecting remote object, service:" << this->service() << ",path:" << this->path() << ",interface" << this->interface(); qCWarning(ServiceLogger) << reply.error(); } else { qCInfo(ServiceLogger) << "connected remote object, service:" << this->service() << ",path:" << this->path() << ",interface" << this->interface(); qCInfo(ServiceLogger) << "switcher dump" << reply.value(); } } DUnionIDDbus::~DUnionIDDbus() { } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbus/dunioniddbus.h000066400000000000000000000074411523260663500273560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUNIONIDDBUS_H #define DUNIONIDDBUS_H #include "daccount.h" #include #include class DUnionIDDbus : public QDBusAbstractInterface { Q_OBJECT public: static inline const char *staticInterfaceName() { return "com.deepin.utcloud.Daemon"; } public: explicit DUnionIDDbus(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = nullptr); ~DUnionIDDbus(); public slots: /** * @brief login 调用系统用户登入接å�£ * @param * @return */ inline QDBusPendingReply<> login() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Login"), argumentList); } /** * @brief logout 调用系统用户登出接å�£ * @param * @return */ inline QDBusPendingReply<> logout() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("Logout"), argumentList); } /** * @brief Upload 云å�Œæ­¥ä¸Šä¼ æŽ¥å�£ * @param key æ•°æ�®æ ‡è¯†æˆ–文件ç»�对路径等 * @return data 上传æˆ�功数æ�®çš„元信æ�¯ID值 * err 错误信æ�¯ */ inline QDBusPendingReply Upload(const QString &key) { QList argumentList; argumentList << QVariant::fromValue(key); return asyncCallWithArgumentList(QStringLiteral("Upload"), argumentList); } /** * @brief Download 云å�Œæ­¥ä¸‹è½½æŽ¥å�£ * @param key æ•°æ�®æ ‡è¯†æˆ–文件ç»�对路径等 * path1 指定缓存数æ�®çš„路径 * @return path2 下载数æ�®çš„路径 * err 错误信æ�¯ */ inline QDBusPendingReply Download(const QString &key, const QString &path1) { QList argumentList; argumentList << QVariant::fromValue(key) << QVariant::fromValue(path1); return asyncCallWithArgumentList(QStringLiteral("Download"), argumentList); } /** * @brief Delete 云å�Œæ­¥åˆ é™¤æŽ¥å�£ * @param key æ•°æ�®æ ‡è¯†æˆ–文件ç»�对路径等 * @return id 删除id * err 错误信æ�¯ */ inline QDBusPendingReply Delete(const QString &key) { QList argumentList; argumentList << QVariant::fromValue(key); return asyncCallWithArgumentList(QStringLiteral("Delete"), argumentList); } /** * @brief Metadata 元数æ�®èŽ·å�–接å�£ * @param key æ•°æ�®æ ‡è¯†æˆ–文件ç»�对路径等 * @return meta 元数æ�®ä¿¡æ�¯ * err 错误信æ�¯ */ inline QDBusPendingReply Metadata(const QString &key) { QList argumentList; argumentList << QVariant::fromValue(key); return asyncCallWithArgumentList(QStringLiteral("Metadata"), argumentList); } /** * @brief SwitcherGet 获å�–总开关状æ€� * @param * @return * */ inline QDBusPendingReply SwitcherDump() { QList argumentList; return asyncCallWithArgumentList(QStringLiteral("SwitcherDump"), argumentList); } /** * @brief SwitcherGet 获å�–指定应用的开关状æ€� * @param arg 指定应用云å�Œæ­¥çš„ç»�对路径 * @return * */ inline QDBusPendingReply SwitcherGet(const QString &arg) { QList argumentList; argumentList << QVariant::fromValue(arg); return asyncCallWithArgumentList(QStringLiteral("SwitcherGet"), argumentList); } }; namespace com { namespace deepin { namespace sync { typedef ::DUnionIDDbus cloudopt; } } } #endif // DUNIONIDDBUS_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/000077500000000000000000000000001523260663500260715ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/daccountmanagerservice.cpp000066400000000000000000000232261523260663500333160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountmanagerservice.h" #include "commondef.h" #include "units.h" #include "calendarprogramexitcontrol.h" #include #include #include DAccountManagerService::DAccountManagerService(QObject *parent) : DServiceBase(serviceBasePath + "/AccountManager", serviceBaseName + ".AccountManager", parent) , m_accountManager(new DAccountManageModule(this)) { qCDebug(ServiceLogger) << "Initializing AccountManagerService with path:" << serviceBasePath + "/AccountManager"; //自动退出 DServiceExitControl exitControl; connect(m_accountManager.data(), &DAccountManageModule::signalLoginStatusChange, this, &DAccountManagerService::accountUpdate); qCDebug(ServiceLogger) << "Connected login status change signal"; connect(m_accountManager.data(), &DAccountManageModule::firstDayOfWeekChange, this, [&]() { qCDebug(ServiceLogger) << "First day of week changed, notifying property change"; notifyPropertyChanged(getInterface(), "firstDayOfWeek"); }); connect(m_accountManager.data(), &DAccountManageModule::timeFormatTypeChange, this, [&]() { qCDebug(ServiceLogger) << "Time format type changed, notifying property change"; notifyPropertyChanged(getInterface(), "timeFormatType"); }); qCDebug(ServiceLogger) << "AccountManagerService initialization completed"; } QString DAccountManagerService::getAccountList() { qCDebug(ServiceLogger) << "Getting account list"; DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, returning empty account list"; return QString(); } QString accountList = m_accountManager->getAccountList(); qCDebug(ServiceLogger) << "Retrieved account list with length:" << accountList.length(); return accountList; } void DAccountManagerService::remindJob(const QString &accountID, const QString &alarmID) { qCDebug(ServiceLogger) << "Processing remind job for accountID:" << accountID << "alarmID:" << alarmID; DServiceExitControl exitControl; m_accountManager->remindJob(accountID, alarmID); qCDebug(ServiceLogger) << "Completed remind job processing"; } void DAccountManagerService::updateRemindJob(bool isClear) { qCDebug(ServiceLogger) << "Updating remind job with clear flag:" << isClear; DServiceExitControl exitControl; m_accountManager->updateRemindSchedules(isClear); qCDebug(ServiceLogger) << "Completed remind job update"; } void DAccountManagerService::notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum) { qCDebug(ServiceLogger) << "Handling notification message for accountID:" << accountID << "alarmID:" << alarmID << "operation:" << operationNum; DServiceExitControl exitControl; m_accountManager->notifyMsgHanding(accountID, alarmID, operationNum); qCDebug(ServiceLogger) << "Completed notification message handling"; } void DAccountManagerService::downloadByAccountID(const QString &accountID) { qCDebug(ServiceLogger) << "Starting download for accountID:" << accountID; //TODO:云å�Œæ­¥èŽ·å�–æ•°æ�® DServiceExitControl exitControl; m_accountManager->downloadByAccountID(accountID); qCDebug(ServiceLogger) << "Completed download for accountID:" << accountID; } void DAccountManagerService::uploadNetWorkAccountData() { qCDebug(ServiceLogger) << "Starting network account data upload"; //TODO:云å�Œæ­¥ä¸Šä¼ æ•°æ�® DServiceExitControl exitControl; m_accountManager->uploadNetWorkAccountData(); qCDebug(ServiceLogger) << "Completed network account data upload"; } QString DAccountManagerService::getCalendarGeneralSettings() { qCDebug(ServiceLogger) << "Getting calendar general settings"; DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, returning empty settings"; return QString(); } QString settings = m_accountManager->getCalendarGeneralSettings(); qCDebug(ServiceLogger) << "Retrieved calendar general settings with length:" << settings.length(); return settings; } void DAccountManagerService::setCalendarGeneralSettings(const QString &cgSet) { qCDebug(ServiceLogger) << "Setting calendar general settings with length:" << cgSet.length(); DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, canceling settings update"; return; } m_accountManager->setFirstDayOfWeekSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setTimeFormatTypeSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setCalendarGeneralSettings(cgSet); qCDebug(ServiceLogger) << "Completed calendar general settings update"; } void DAccountManagerService::calendarIsShow(const bool &isShow) { qCDebug(ServiceLogger) << "Setting calendar show status to:" << isShow; DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, canceling show status update"; return; } exitControl.setClientIsOpen(isShow); m_accountManager->calendarOpen(isShow); qCDebug(ServiceLogger) << "Completed calendar show status update"; } void DAccountManagerService::login() { qCDebug(ServiceLogger) << "Starting user login process"; DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, canceling login"; return; } m_accountManager->login(); qCDebug(ServiceLogger) << "Completed user login process"; } void DAccountManagerService::logout() { qCDebug(ServiceLogger) << "Starting user logout process"; DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, canceling logout"; return; } m_accountManager->logout(); qCDebug(ServiceLogger) << "Completed user logout process"; } bool DAccountManagerService::isSupportUid() { qCDebug(ServiceLogger) << "Checking UID support"; DServiceExitControl exitControl; if (!clientWhite(0)) { qCDebug(ServiceLogger) << "Client not whitelisted, returning false for UID support"; return false; } bool isSupported = m_accountManager->isSupportUid(); qCDebug(ServiceLogger) << "UID support status:" << isSupported; return isSupported; } int DAccountManagerService::getfirstDayOfWeek() const { qCDebug(ServiceLogger) << "Getting first day of week"; DServiceExitControl exitControl; int firstDay = m_accountManager->getfirstDayOfWeek(); qCDebug(ServiceLogger) << "First day of week:" << firstDay; return firstDay; } void DAccountManagerService::setFirstDayOfWeek(const int firstday) { qCDebug(ServiceLogger) << "Setting first day of week to:" << firstday; DServiceExitControl exitControl; m_accountManager->setFirstDayOfWeekSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setFirstDayOfWeek(firstday); qCDebug(ServiceLogger) << "Completed first day of week update"; } int DAccountManagerService::getTimeFormatType() const { qCDebug(ServiceLogger) << "Getting time format type"; DServiceExitControl exitControl; int timeType = m_accountManager->getTimeFormatType(); qCDebug(ServiceLogger) << "Time format type:" << timeType; return timeType; } void DAccountManagerService::setTimeFormatType(const int timeType) { qCDebug(ServiceLogger) << "Setting time format type to:" << timeType; DServiceExitControl exitControl; m_accountManager->setTimeFormatTypeSource(DCalendarGeneralSettings::Source_Database); m_accountManager->setTimeFormatType(timeType); qCDebug(ServiceLogger) << "Completed time format type update"; } int DAccountManagerService::getFirstDayOfWeekSource() { qCDebug(ServiceLogger) << "Getting first day of week source"; int source = static_cast(m_accountManager->getFirstDayOfWeekSource()); qCDebug(ServiceLogger) << "First day of week source:" << source; return source; } void DAccountManagerService::setFirstDayOfWeekSource(const int source) { qCDebug(ServiceLogger) << "Setting first day of week source to:" << source; if (source >= 0 && source < DCalendarGeneralSettings::GeneralSettingSource::Source_Unknown) { qCDebug(ServiceLogger) << "Valid source value, applying setting"; auto val = static_cast(source); m_accountManager->setFirstDayOfWeekSource(val); } else { qCWarning(ServiceLogger) << "Invalid source value:" << source << ", ignoring request"; } qCDebug(ServiceLogger) << "Completed first day of week source update"; } int DAccountManagerService::getTimeFormatTypeSource() { qCDebug(ServiceLogger) << "Getting time format type source"; int source = static_cast(m_accountManager->getTimeFormatTypeSource()); qCDebug(ServiceLogger) << "Time format type source:" << source; return source; } void DAccountManagerService::setTimeFormatTypeSource(const int source) { qCDebug(ServiceLogger) << "Setting time format type source to:" << source; if (source >= 0 && source < DCalendarGeneralSettings::GeneralSettingSource::Source_Unknown) { qCDebug(ServiceLogger) << "Valid source value, applying setting"; auto val = static_cast(source); m_accountManager->setTimeFormatTypeSource(val); } else { qCWarning(ServiceLogger) << "Invalid source value:" << source << ", ignoring request"; } qCDebug(ServiceLogger) << "Completed time format type source update"; }linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/daccountmanagerservice.h000066400000000000000000000054341523260663500327640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTMANAGERSERVICE_H #define ACCOUNTMANAGERSERVICE_H #include "dservicebase.h" #include "daccountmanagemodule.h" #include /** * @brief The DAccountManagerService class å¸�户管ç�†æœ�务 */ class DAccountManagerService : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.dataserver.Calendar.AccountManager") Q_PROPERTY(int firstDayOfWeek READ getfirstDayOfWeek WRITE setFirstDayOfWeek) Q_PROPERTY(int timeFormatType READ getTimeFormatType WRITE setTimeFormatType) Q_PROPERTY(int firstDayOfWeekSource READ getFirstDayOfWeekSource WRITE setFirstDayOfWeekSource) Q_PROPERTY(int timeFormatTypeSource READ getTimeFormatTypeSource WRITE setTimeFormatTypeSource) public: explicit DAccountManagerService(QObject *parent = nullptr); public slots: /** * @brief getAccountList 获å�–å¸�户列表 * @return */ Q_SCRIPTABLE QString getAccountList(); //ç¨�å�Žæ��醒相关接å�£ Q_SCRIPTABLE void remindJob(const QString &accountID, const QString &alarmID); /** * @brief updateRemindJob æ¯�éš”10分钟更新æ��醒日程 * @param isClear 是å�¦æƒ…况日程定时任务数æ�®åº“ */ Q_SCRIPTABLE void updateRemindJob(bool isClear); /** * @brief notifyMsgHanding 通知æ��示框交互处ç�† * @param alarmID æ��醒任务id * @param operationNum æ“�作编å�· , 1:打开日历,2:ç¨�å�Žæ��醒 3: 明天æ��醒 4: æ��å‰�1天æ��醒 5:关闭按钮 */ Q_SCRIPTABLE void notifyMsgHanding(const QString &accountID, const QString &alarmID, const qint32 operationNum); Q_SCRIPTABLE void downloadByAccountID(const QString &accountID); Q_SCRIPTABLE void uploadNetWorkAccountData(); //获å�–通用设置 Q_SCRIPTABLE QString getCalendarGeneralSettings(); //设置通用设置 Q_SCRIPTABLE void setCalendarGeneralSettings(const QString &cgSet); //日历打开关闭 Q_SCRIPTABLE void calendarIsShow(const bool &isShow); //账户登录 Q_SCRIPTABLE void login(); //账户登出 Q_SCRIPTABLE void logout(); //是å�¦æ”¯æŒ�云å�Œæ­¥ Q_SCRIPTABLE bool isSupportUid(); signals: Q_SCRIPTABLE void accountUpdate(); private: int getfirstDayOfWeek() const; void setFirstDayOfWeek(const int firstday); int getTimeFormatType() const; void setTimeFormatType(const int timeType); int getFirstDayOfWeekSource(); void setFirstDayOfWeekSource(const int source); int getTimeFormatTypeSource(); void setTimeFormatTypeSource(const int source); private: DAccountManageModule::Ptr m_accountManager; }; #endif // ACCOUNTMANAGERSERVICE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/daccountservice.cpp000066400000000000000000000216471523260663500317700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "daccountservice.h" #include "calendarprogramexitcontrol.h" #include "commondef.h" DAccountService::DAccountService(const QString &path, const QString &interface, const DAccountModule::Ptr &accountModule, QObject *parent) : DServiceBase(path, interface, parent) , m_accountModel(accountModule) { connect(m_accountModel.data(), &DAccountModule::signalScheduleUpdate, this, &DAccountService::scheduleUpdate); connect(m_accountModel.data(), &DAccountModule::signalScheduleTypeUpdate, this, &DAccountService::scheduleTypeUpdate); connect(m_accountModel.data(), &DAccountModule::signalAccountState, this, [&]() { qCDebug(ServiceLogger) << "Account state changed, notifying property change"; notifyPropertyChanged(getInterface(), "accountState"); }); connect(m_accountModel.data(), &DAccountModule::signalSyncState, this, [&]() { qCDebug(ServiceLogger) << "Sync state changed, notifying property change"; notifyPropertyChanged(getInterface(), "syncState"); }); connect(m_accountModel.data(), &DAccountModule::signalDtLastUpdate, this, [&]() { qCDebug(ServiceLogger) << "Last update time changed, notifying property change"; notifyPropertyChanged(getInterface(), "dtLastUpdate"); }); } QString DAccountService::getAccountInfo() { //如果ä¸�在白å��å�•内直接放回无效值 DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Getting account info"; return m_accountModel->getAccountInfo(); } QString DAccountService::getScheduleTypeList() { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Getting schedule type list"; return m_accountModel->getScheduleTypeList(); } QString DAccountService::getScheduleTypeByID(const QString &typeID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Getting schedule type by ID:" << typeID; return m_accountModel->getScheduleTypeByID(typeID); } QString DAccountService::createScheduleType(const QString &typeInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Creating new schedule type:" << typeInfo; return m_accountModel->createScheduleType(typeInfo); } bool DAccountService::updateScheduleType(const QString &typeInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return false; } qCDebug(ServiceLogger) << "Updating schedule type:" << typeInfo; return m_accountModel->updateScheduleType(typeInfo); } bool DAccountService::deleteScheduleTypeByID(const QString &typeID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return false; } qCDebug(ServiceLogger) << "Deleting schedule type by ID:" << typeID; return m_accountModel->deleteScheduleTypeByID(typeID); } bool DAccountService::scheduleTypeByUsed(const QString &typeID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return false; } qCDebug(ServiceLogger) << "Checking if schedule type is in use:" << typeID; return m_accountModel->scheduleTypeByUsed(typeID); } QString DAccountService::createSchedule(const QString &scheduleInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Creating new schedule:" << scheduleInfo; return m_accountModel->createSchedule(scheduleInfo); } bool DAccountService::updateSchedule(const QString &scheduleInfo) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return false; } qCDebug(ServiceLogger) << "Updating schedule:" << scheduleInfo; return m_accountModel->updateSchedule(scheduleInfo); } QString DAccountService::getScheduleByScheduleID(const QString &scheduleID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Getting schedule by ID:" << scheduleID; return m_accountModel->getScheduleByScheduleID(scheduleID); } bool DAccountService::deleteScheduleByScheduleID(const QString &scheduleID) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return false; } qCDebug(ServiceLogger) << "Deleting schedule by ID:" << scheduleID; return m_accountModel->deleteScheduleByScheduleID(scheduleID); } QString DAccountService::querySchedulesWithParameter(const QString ¶ms) { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } qCDebug(ServiceLogger) << "Querying schedules with parameters:" << params; return m_accountModel->querySchedulesWithParameter(params); } QString DAccountService::getSysColors() { DServiceExitControl exitControl; if (!clientWhite(m_accountModel->account()->accountType())) { qCWarning(ServiceLogger) << "Access denied: Account type not in whitelist" << "\n Account type:" << m_accountModel->account()->accountType(); return QString(); } return m_accountModel->getSysColors(); } bool DAccountService::getExpand() { return m_accountModel->getExpand(); } void DAccountService::setExpand(const bool &isExpand) { m_accountModel->setExpand(isExpand); } int DAccountService::getAccountState() { return m_accountModel->getAccountState(); } void DAccountService::setAccountState(const int accountState) { m_accountModel->setAccountState(accountState); } int DAccountService::getSyncState() { return m_accountModel->getSyncState(); } QString DAccountService::getSyncFreq() { return m_accountModel->getSyncFreq(); } void DAccountService::setSyncFreq(const QString &freq) { m_accountModel->setSyncFreq(freq); } QString DAccountService::getDtLastUpdate() { return m_accountModel->getDtLastUpdate(); } bool DAccountService::importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists) { return m_accountModel->importSchedule(icsFilePath, typeID, cleanExists); } bool DAccountService::exportSchedule(const QString &icsFilePath, const QString &typeID) { return m_accountModel->exportSchedule(icsFilePath, typeID); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/daccountservice.h000066400000000000000000000124711523260663500314300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTSERVICE_H #define ACCOUNTSERVICE_H #include "dservicebase.h" #include "daccountmodule.h" #include "units.h" #include class DAccountService : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface", accountServiceInterface) Q_PROPERTY(bool isExpand READ getExpand WRITE setExpand) Q_PROPERTY(int accountState READ getAccountState WRITE setAccountState) Q_PROPERTY(int syncState READ getSyncState) Q_PROPERTY(QString syncFreq READ getSyncFreq WRITE setSyncFreq) Q_PROPERTY(QString dtLastUpdate READ getDtLastUpdate) public: typedef QSharedPointer Ptr; DAccountService(const QString &path, const QString &interface, const DAccountModule::Ptr &accountModule, QObject *parent = nullptr); public slots: /** * @brief getAccountInfo 获å�–å¸�户信æ�¯ * @return */ Q_SCRIPTABLE QString getAccountInfo(); /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ Q_SCRIPTABLE QString getScheduleTypeList(); /** * @brief getScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–日程类型信æ�¯ * @param typeID 日程类型ID * @return */ Q_SCRIPTABLE QString getScheduleTypeByID(const QString &typeID); /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信æ�¯ * @return 日程类型ID */ Q_SCRIPTABLE QString createScheduleType(const QString &typeInfo); /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ Q_SCRIPTABLE bool updateScheduleType(const QString &typeInfo); /** * @brief deleteScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程类型 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ Q_SCRIPTABLE bool deleteScheduleTypeByID(const QString &typeID); /** * @brief scheduleTypeByUsed 日程类型是å�¦è¢«ä½¿ç”¨ * @param typeID 日程类型ID * @return */ Q_SCRIPTABLE bool scheduleTypeByUsed(const QString &typeID); /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信æ�¯ * @return 返回日程ID */ Q_SCRIPTABLE QString createSchedule(const QString &scheduleInfo); /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ Q_SCRIPTABLE bool updateSchedule(const QString &scheduleInfo); /** * @brief getScheduleByScheduleID æ ¹æ�®æ—¥ç¨‹id获å�–日程信æ�¯ * @param scheduleID 日程id * @return 日程信æ�¯ */ Q_SCRIPTABLE QString getScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteScheduleByScheduleID æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param ScheduleID 日程ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ Q_SCRIPTABLE bool deleteScheduleByScheduleID(const QString &scheduleID); /** * @brief querySchedulesWithParameter æ ¹æ�®æŸ¥è¯¢å�‚数查询日程 * @param params 具体的查询å�‚æ•° * @return 查询到的日程集 */ Q_SCRIPTABLE QString querySchedulesWithParameter(const QString ¶ms); /** * @brief querySchedulesWithParameter 导出日程到ics文件 * @param icsFilePath ics文件路径 * @param typeID 导入到的类型ID * @return 是å�¦æˆ�功,true: æˆ�功 */ Q_SCRIPTABLE bool exportSchedule(const QString &icsFilePath, const QString &typeID); /** * @brief querySchedulesWithParameter 导入ics文件到日程 * @param icsFilePath ics文件路径 * @param typeID 导入到的类型ID * @param cleanExists 是å�¦æ¸…ç�†å·²å­˜åœ¨çš„æ—¥ç¨‹ * @return 是å�¦æˆ�功,true: æˆ�功 */ Q_SCRIPTABLE bool importSchedule(const QString &icsFilePath, const QString &typeID, const bool cleanExists); ///////获å�–内置类型颜色 Q_SCRIPTABLE QString getSysColors(); signals: //日程更新信å�·ï¼Œæ—¥ç¨‹é¢œè‰²æ›´æ–°ä¿¡å�· void scheduleUpdate(); void scheduleTypeUpdate(); private: //å¸�户列表是å�¦å±•å¼€ bool getExpand(); void setExpand(const bool &isExpand); //å¸�户状æ€�。 int getAccountState(); void setAccountState(const int accountState); //获å�–å�Œæ­¥çжæ€� int getSyncState(); //设置å�Œæ­¥é¢‘率相关信æ�¯ QString getSyncFreq(); void setSyncFreq(const QString &freq); //获å�–最å�Žä¸€æ¬¡å�Œæ­¥æ—¶é—´ QString getDtLastUpdate(); public slots: private: DAccountModule::Ptr m_accountModel; }; #endif // ACCOUNTSERVICE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/dhuangliservice.cpp000066400000000000000000000074761523260663500317670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dhuangliservice.h" #include "commondef.h" #include "calendarprogramexitcontrol.h" #include "units.h" DHuangliService::DHuangliService(QObject *parent) : DServiceBase(serviceBasePath + "/HuangLi", serviceBaseName + ".HuangLi", parent) , m_huangli(new CalendarHuangLi(this)) { qCDebug(ServiceLogger) << "Initializing HuangliService with path:" << serviceBasePath + "/HuangLi"; CaLunarDayInfo::registerMetaType(); CaLunarMonthInfo::registerMetaType(); CaHuangLiDayInfo::registerMetaType(); CaHuangLiMonthInfo::registerMetaType(); qCDebug(ServiceLogger) << "Registered all HuangLi meta types"; qCDebug(ServiceLogger) << "HuangliService initialization completed"; } // 获å�–指定公历月的å�‡æ—¥ä¿¡æ�¯ // !这个接å�£ dde-daemon 在使用,ä¸�能å�˜åЍ! QString DHuangliService::getFestivalMonth(quint32 year, quint32 month) { qCDebug(ServiceLogger) << "Getting festival month data for year:" << year << "month:" << month; DServiceExitControl exitControl; auto list = m_huangli->getFestivalMonth(year, month); qCDebug(ServiceLogger) << "Retrieved" << list.size() << "festival entries"; // ä¿�æŒ�接å�£è¿”回值兼容 QJsonArray result; if (!list.empty()) { qCDebug(ServiceLogger) << "Creating JSON response with first entry ID:" << list.at(0)["date"]; QJsonObject obj; obj.insert("id", list.at(0)["date"]); obj.insert("description", ""); obj.insert("list", list); result.push_back(obj); } else { qCDebug(ServiceLogger) << "No festival data found, returning empty result"; } QJsonDocument doc; doc.setArray(result); QString jsonResult = doc.toJson(QJsonDocument::Compact); qCDebug(ServiceLogger) << "Returning festival month JSON with length:" << jsonResult.length(); return jsonResult; } // 获å�–指定公历日的黄历信æ�¯ QString DHuangliService::getHuangLiDay(quint32 year, quint32 month, quint32 day) { qCDebug(ServiceLogger) << "Getting HuangLi day data for date:" << year << "-" << month << "-" << day; DServiceExitControl exitControl; QString huangliInfo = m_huangli->getHuangLiDay(year, month, day); qCDebug(ServiceLogger) << "Retrieved HuangLi day data with length:" << huangliInfo.length(); return huangliInfo; } // 获å�–指定公历月的黄历信æ�¯ QString DHuangliService::getHuangLiMonth(quint32 year, quint32 month, bool fill) { qCDebug(ServiceLogger) << "Getting HuangLi month data for year:" << year << "month:" << month << "fill:" << fill; DServiceExitControl exitControl; QString huangliInfo = m_huangli->getHuangLiMonth(year, month, fill); qCDebug(ServiceLogger) << "Retrieved HuangLi month data with length:" << huangliInfo.length(); return huangliInfo; } // 通过公历获å�–阴历信æ�¯ CaLunarDayInfo DHuangliService::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { qCDebug(ServiceLogger) << "Getting lunar info by solar date:" << year << "-" << month << "-" << day; DServiceExitControl exitControl; CaLunarDayInfo huangliInfo = m_huangli->getLunarInfoBySolar(year, month, day); qCDebug(ServiceLogger) << "Retrieved lunar day info for date:" << year << "-" << month << "-" << day; return huangliInfo; } // 获å�–阴历月信æ�¯ CaLunarMonthInfo DHuangliService::getLunarMonthCalendar(quint32 year, quint32 month, bool fill) { qCDebug(ServiceLogger) << "Getting lunar month calendar for year:" << year << "month:" << month << "fill:" << fill; DServiceExitControl exitControl; CaLunarMonthInfo huangliInfo = m_huangli->getLunarCalendarMonth(year, month, fill); qCDebug(ServiceLogger) << "Retrieved lunar month calendar for year:" << year << "month:" << month; return huangliInfo; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/dhuangliservice.h000066400000000000000000000020241523260663500314140ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef HUANGLISERVICE_H #define HUANGLISERVICE_H #include "dservicebase.h" #include "huangliData/dbusdatastruct.h" #include "calendarhuangli.h" /** * @brief The DHuangliService class 黄历æœ�务 */ class DHuangliService : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.dataserver.HuangLi") public: explicit DHuangliService(QObject *parent = nullptr); public slots: Q_SCRIPTABLE QString getFestivalMonth(quint32 year, quint32 month); Q_SCRIPTABLE QString getHuangLiDay(quint32 year, quint32 month, quint32 day); Q_SCRIPTABLE QString getHuangLiMonth(quint32 year, quint32 month, bool fill); Q_SCRIPTABLE CaLunarDayInfo getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); Q_SCRIPTABLE CaLunarMonthInfo getLunarMonthCalendar(quint32 year, quint32 month, bool fill); private: CalendarHuangLi *m_huangli; }; #endif // HUANGLISERVICE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/dservicebase.cpp000066400000000000000000000072111523260663500312350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dservicebase.h" #include "commondef.h" #include #include #include #include #include DServiceBase::DServiceBase(const QString &path, const QString &interface, QObject *parent) : QObject(parent) , m_path(path) , m_interface(interface) { qCDebug(ServiceLogger) << "Initializing ServiceBase with path:" << path << "interface:" << interface; } QString DServiceBase::getPath() const { qCDebug(ServiceLogger) << "Getting service path:" << m_path; return m_path; } QString DServiceBase::getInterface() const { qCDebug(ServiceLogger) << "Getting service interface:" << m_interface; return m_interface; } QString DServiceBase::getClientName() { qCDebug(ServiceLogger) << "Getting client name for service:" << message().service(); uint pid = QDBusConnection::sessionBus().interface()->servicePid(message().service()); qCDebug(ServiceLogger) << "Client PID:" << pid; QString name; QFile file(QString("/proc/%1/status").arg(pid)); if (file.open(QFile::ReadOnly)) { qCDebug(ServiceLogger) << "Successfully opened proc status file for PID:" << pid; name = QString(file.readLine()).section(QRegularExpression("([\\t ]*:[\\t ]*|\\n)"), 1, 1); file.close(); qCDebug(ServiceLogger) << "Retrieved client name:" << name; } else { qCWarning(ServiceLogger) << "Failed to open proc status file for PID:" << pid; } return name; } bool DServiceBase::clientWhite(const int index) { qCDebug(ServiceLogger) << "Checking client whitelist for index:" << index; // DeepinAIAssista #ifdef CALENDAR_SERVICE_AUTO_EXIT qCDebug(ServiceLogger) << "Auto-exit mode enabled, checking whitelist"; //æ ¹æ�®ç¼–å�·,获å�–ä¸�å�Œåˆ°ç™½å��å�• static QVector whiteList {{"dde-calendar", "DeepinAIAssistant"}, {"dde-calendar"}, {"dde-calendar"}}; if (whiteList.size() < index) { qCWarning(ServiceLogger) << "Index" << index << "out of range for whitelist, denying access"; return false; } QString clientName = getClientName(); qCDebug(ServiceLogger) << "Checking client" << clientName << "against whitelist" << index; for (int i = 0; i < whiteList.at(index).size(); ++i) { if (whiteList.at(index).at(i).contains(clientName)) { qCDebug(ServiceLogger) << "Client" << clientName << "found in whitelist, allowing access"; return true; } } qCDebug(ServiceLogger) << "Client" << clientName << "not found in whitelist, denying access"; return false; #else qCDebug(ServiceLogger) << "Auto-exit mode disabled, allowing all clients"; Q_UNUSED(index) return true; #endif } void DServiceBase::notifyPropertyChanged(const QString &interface, const QString &propertyName) { qCDebug(ServiceLogger) << "Notifying property change for interface:" << interface << "property:" << propertyName; QDBusMessage signal = QDBusMessage::createSignal( getPath(), "org.freedesktop.DBus.Properties", "PropertiesChanged"); signal << interface; QVariantMap changedProps; QVariant propertyValue = property(propertyName.toUtf8()); changedProps.insert(propertyName, propertyValue); qCDebug(ServiceLogger) << "Property" << propertyName << "changed to value:" << propertyValue; signal << changedProps; signal << QStringList(); QDBusConnection::sessionBus().send(signal); qCDebug(ServiceLogger) << "Property change notification sent for" << propertyName; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/dservicebase.h000066400000000000000000000014141523260663500307010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSERVICEBASE_H #define DSERVICEBASE_H #include #include /** * @brief The serviceBase class æœ�务基类 */ class DServiceBase : public QObject , protected QDBusContext { Q_OBJECT public: explicit DServiceBase(const QString &path, const QString &interface, QObject *parent = nullptr); QString getPath() const; QString getInterface() const; protected: QString getClientName(); bool clientWhite(const int index); void notifyPropertyChanged(const QString &interface, const QString &propertyName); private: QString m_path; QString m_interface; }; #endif // DSERVICEBASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/dservicemanager.cpp000066400000000000000000000115521523260663500317400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dservicemanager.h" #include "dhuangliservice.h" #include "daccountmanagerservice.h" #include "units.h" #include "commondef.h" #include "dbuscloudsync.h" #include #include #include DServiceManager::DServiceManager(QObject *parent) : QObject(parent) { qCDebug(ServiceLogger) << "DServiceManager constructor"; //注册æœ�务 QDBusConnection sessionBus = QDBusConnection::sessionBus(); qCDebug(ServiceLogger) << "Registering service:" << serviceBaseName; if (!sessionBus.registerService(serviceBaseName)) { QDBusError error = sessionBus.lastError(); qCritical(ServiceLogger) << "Failed to register service" << "\n Service name:" << serviceBaseName << "\n Error name:" << error.name() << "\n Error message:" << error.message() << "\n Error type:" << error.type(); exit(0x0001); } qCInfo(ServiceLogger) << "Successfully registered service:" << serviceBaseName; QDBusConnection::RegisterOptions options = QDBusConnection::ExportAllSlots | QDBusConnection::ExportAllSignals | QDBusConnection::ExportAllProperties; //创建黄历æœ�务 qCDebug(ServiceLogger) << "Creating Huangli service"; DServiceBase *huangliService = new class DHuangliService(this); if (!sessionBus.registerObject(huangliService->getPath(), huangliService->getInterface(), huangliService, options)) { QDBusError error = sessionBus.lastError(); qCritical(ServiceLogger) << "Failed to register Huangli service object" << "\n Path:" << huangliService->getPath() << "\n Interface:" << huangliService->getInterface() << "\n Error name:" << error.name() << "\n Error message:" << error.message() << "\n Error type:" << error.type(); exit(0x0002); } qCInfo(ServiceLogger) << "Successfully registered Huangli service" << "\n Path:" << huangliService->getPath() << "\n Interface:" << huangliService->getInterface(); //创建å¸�户管ç�†æœ�务 qCDebug(ServiceLogger) << "Creating account manager service"; m_accountManagerService = new class DAccountManagerService(this); if (!sessionBus.registerObject(m_accountManagerService->getPath(), m_accountManagerService->getInterface(), m_accountManagerService, options)) { QDBusError error = sessionBus.lastError(); qCritical(ServiceLogger) << "Failed to register account manager service object" << "\n Path:" << m_accountManagerService->getPath() << "\n Interface:" << m_accountManagerService->getInterface() << "\n Error name:" << error.name() << "\n Error message:" << error.message() << "\n Error type:" << error.type(); exit(0x0003); } qCInfo(ServiceLogger) << "Successfully registered account manager service" << "\n Path:" << m_accountManagerService->getPath() << "\n Interface:" << m_accountManagerService->getInterface(); //创建云å�Œæ­¥å›žè°ƒæœ�务 qCDebug(ServiceLogger) << "Creating cloud sync service"; DServiceBase *cloudsyncService = new class Dbuscloudsync(this); if (!sessionBus.registerObject(cloudsyncService->getPath(), cloudsyncService->getInterface(), cloudsyncService, options)) { QDBusError error = sessionBus.lastError(); qCritical(ServiceLogger) << "Failed to register cloud sync service object" << "\n Path:" << cloudsyncService->getPath() << "\n Interface:" << cloudsyncService->getInterface() << "\n Error name:" << error.name() << "\n Error message:" << error.message() << "\n Error type:" << error.type(); exit(0x0004); } qCInfo(ServiceLogger) << "Successfully registered cloud sync service" << "\n Path:" << cloudsyncService->getPath() << "\n Interface:" << cloudsyncService->getInterface(); qCInfo(ServiceLogger) << "Service manager initialization completed successfully"; } void DServiceManager::updateRemindJob() { qCDebug(ServiceLogger) << "Updating remind job"; if(nullptr != m_accountManagerService){ qCDebug(ServiceLogger) << "Updating remind job for account manager service"; m_accountManagerService->updateRemindJob(false); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/dbusservice/dservicemanager.h000066400000000000000000000010521523260663500313770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SERVICEMANAGER_H #define SERVICEMANAGER_H #include "daccountmanagerservice.h" /** * @brief The DServiceManager class æœ�务管ç�†ç±» */ class DServiceManager : public QObject { Q_OBJECT public: explicit DServiceManager(QObject *parent = nullptr); void updateRemindJob(); signals: public slots: private: DAccountManagerService *m_accountManagerService = nullptr; }; #endif // SERVICEMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/main.cpp000066400000000000000000000072771523260663500252200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dservicemanager.h" #include "ddatabasemanagement.h" #include "commondef.h" #include "logger.h" #include #include #include #include #include #include DCORE_USE_NAMESPACE bool loadTranslator(QCoreApplication *app, QList localeFallback = QList() << QLocale::system()) { qCDebug(ServiceLogger) << "Loading translator..."; bool bsuccess = false; QString CalendarServiceTranslationsDir = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QString("dde-calendar/translations"), QStandardPaths::LocateDirectory); qCDebug(ServiceLogger) << "Translations directory:" << CalendarServiceTranslationsDir; for (auto &locale : localeFallback) { QString translateFilename = QString("%1_%2").arg(app->applicationName()).arg(locale.name()); QString translatePath = QString("%1/%2.qm").arg(CalendarServiceTranslationsDir).arg(translateFilename); // qCDebug(ServiceLogger) << "Attempting to load translation file:" << translatePath; if (QFile(translatePath).exists()) { QTranslator *translator = new QTranslator(app); translator->load(translatePath); app->installTranslator(translator); bsuccess = true; } QStringList parseLocalNameList = locale.name().split("_", QT_SKIP_EMPTY_PARTS); if (parseLocalNameList.length() > 0 && !bsuccess) { translateFilename = QString("%1_%2").arg(app->applicationName()).arg(parseLocalNameList.at(0)); QString parseTranslatePath = QString("%1/%2.qm").arg(CalendarServiceTranslationsDir).arg(translateFilename); // qCDebug(ServiceLogger) << "Attempting to load fallback translation file:" << parseTranslatePath; if (QFile::exists(parseTranslatePath)) { QTranslator *translator = new QTranslator(app); translator->load(parseTranslatePath); app->installTranslator(translator); bsuccess = true; } } } return bsuccess; } int main(int argc, char *argv[]) { // 日志处ç�†è¦�放在app之å‰�,å�¦åˆ™QApplication内部å�¯èƒ½è¿›è¡Œäº†æ—¥å¿—打å�°ï¼Œå¯¼è‡´çŽ¯å¢ƒå�˜é‡�设置ä¸�生效 CalendarLogger("org.deepin.dde.calendar.service"); qCInfo(ServiceLogger) << "Starting dde-calendar-service."; QCoreApplication a(argc, argv); a.setOrganizationName("deepin"); a.setApplicationName("dde-calendar-service"); // Initialize logging system CalendarLogger::initLogger(); //加载翻译 if (!loadTranslator(&a)) { qCWarning(ServiceLogger) << "Translation load failed."; } qCDebug(ServiceLogger) << "Initializing DDataBaseManagement..."; DDataBaseManagement dbManagement; qCDebug(ServiceLogger) << "DDataBaseManagement initialized."; qCDebug(ServiceLogger) << "Initializing DServiceManager..."; DServiceManager serviceManager; qCDebug(ServiceLogger) << "DServiceManager initialized."; //如果存在è¿�移,则更新æ��醒 if(dbManagement.hasTransfer()){ qCInfo(ServiceLogger) << "Database transfer detected, scheduling remind job update."; //延迟处ç�† QTimer::singleShot(0,[&](){ qCDebug(ServiceLogger) << "Executing delayed remind job update."; serviceManager.updateRemindJob(); qCDebug(ServiceLogger) << "Delayed remind job update finished."; }); } qCInfo(ServiceLogger) << "dde-calendar-service start."; return a.exec(); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/000077500000000000000000000000001523260663500270145ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/dataencrypt.cpp000066400000000000000000000153611523260663500320440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dataencrypt.h" #include "commondef.h" #include //暂时加解密ä¸�适ç”¨ï¼Œå¾…å�Žç»­è¡¥å…… //QByteArray DataEncrypt::aesCbcEncrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // qCDebug(ServiceLogger) << "Starting AES CBC encryption with data size:" << data.size() << "key size:" << key.size(); // QByteArray result; // AES_KEY aesKey; // if (AES_set_encrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "AES encryption key init failed"; // return result; // } // result = aesCbcEncrypt(data, aesKey, initialVector, AES_ENCRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "AES CBC encrypt failed"; // else // qCDebug(ServiceLogger) << "AES CBC encrypt completed, result size:" << result.size(); // return result; //} //QByteArray DataEncrypt::aesCbcDecrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // qCDebug(ServiceLogger) << "Starting AES CBC decryption with data size:" << data.size() << "key size:" << key.size(); // QByteArray result; // AES_KEY aesKey; // if (AES_set_decrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "AES decryption key init failed"; // return result; // } // result = aesCbcEncrypt(data, aesKey, initialVector, AES_DECRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "AES CBC decrypt failed"; // else // qCDebug(ServiceLogger) << "AES CBC decrypt completed, result size:" << result.size(); // return result; //} //QByteArray DataEncrypt::aesCbcEncrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt) //{ // qCDebug(ServiceLogger) << "Performing AES CBC operation, encrypt mode:" << isEncrypt << "data size:" << data.size(); // QByteArray result; // if (initialVector.size() != AES_BLOCK_SIZE) { // qCWarning(ServiceLogger) << "Invalid init vector length:" << initialVector.size() << "expected:" << AES_BLOCK_SIZE; // return result; // } // int remainder = data.size() % AES_BLOCK_SIZE; // int paddingSize = (remainder == 0) ? 0 : (AES_BLOCK_SIZE - remainder); // qCDebug(ServiceLogger) << "AES padding calculation - remainder:" << remainder << "padding size:" << paddingSize; // result.resize(data.size() + paddingSize); // result.fill(0); // QByteArray tmpIinitialVector = initialVector; // åˆ�å§‹å�‘é‡�会被修改,故需è¦�临时å�˜é‡�æ�¥æš‚å­˜ // AES_cbc_encrypt(reinterpret_cast(data.data()), // reinterpret_cast(result.data()), // static_cast(data.size()), &key, // reinterpret_cast(tmpIinitialVector.data()), // (isEncrypt ? AES_ENCRYPT : AES_DECRYPT)); // qCDebug(ServiceLogger) << "AES CBC operation completed"; // return result; //} //QByteArray DataEncrypt::aesCfb128Encrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // qCDebug(ServiceLogger) << "Starting AES CFB128 encryption with data size:" << data.size() << "key size:" << key.size(); // QByteArray result; // AES_KEY aesKey; // if (AES_set_encrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "AES CFB128 encryption key init failed"; // return result; // } // result = aesCfb128Encrypt(data, aesKey, initialVector, AES_ENCRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "AES CFB128 encrypt failed"; // else // qCDebug(ServiceLogger) << "AES CFB128 encrypt completed, result size:" << result.size(); // return result; //} //QByteArray DataEncrypt::aesCfb128Decrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector) //{ // qCDebug(ServiceLogger) << "Starting AES CFB128 decryption with data size:" << data.size() << "key size:" << key.size(); // QByteArray result; // if (data.isEmpty()) { // qCDebug(ServiceLogger) << "Empty data provided for CFB128 decryption, returning empty result"; // return result; // } // AES_KEY aesKey; // if (AES_set_encrypt_key(reinterpret_cast(key.data()), key.size() * 8, // &aesKey) // != 0) { // qCWarning(ServiceLogger) << "AES CFB128 decryption key init failed"; // return result; // } // result = aesCfb128Encrypt(data, aesKey, initialVector, AES_DECRYPT); // if (result.isEmpty()) // qCWarning(ServiceLogger) << "AES CFB128 decrypt failed"; // else // qCDebug(ServiceLogger) << "AES CFB128 decrypt completed, result size:" << result.size(); // return result; //} //QByteArray DataEncrypt::aesCfb128Encrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt) //{ // qCDebug(ServiceLogger) << "Performing AES CFB128 operation, encrypt mode:" << isEncrypt << "data size:" << data.size(); // QByteArray result; // if (initialVector.size() != AES_BLOCK_SIZE) { // qCWarning(ServiceLogger) << "Invalid init vector length for CFB128:" << initialVector.size() << "expected:" << AES_BLOCK_SIZE; // return result; // } //// int remainder = data.size() % AES_BLOCK_SIZE; //// int paddingSize = (remainder == 0) ? 0 : (AES_BLOCK_SIZE - remainder); // result.resize(data.size() + 0); // result.fill(0); // int num = 0; // QByteArray tmpIinitialVector = initialVector; // åˆ�å§‹å�‘é‡�会被修改,故需è¦�临时å�˜é‡�æ�¥æš‚å­˜ // qCDebug(ServiceLogger) << "Executing AES CFB128 encryption/decryption"; // AES_cfb128_encrypt(reinterpret_cast(data.data()), // reinterpret_cast(result.data()), // static_cast(data.size()), &key, // reinterpret_cast(tmpIinitialVector.data()), &num, // (isEncrypt ? AES_ENCRYPT : AES_DECRYPT)); // qCDebug(ServiceLogger) << "AES CFB128 operation completed"; // return result; //} linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/dataencrypt.h000066400000000000000000000025061523260663500315060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DATAENCRYPT_H #define DATAENCRYPT_H #include #include //#include //const QString aesCbcKey = "kjX3yBgJCaFHszod"; //class DataEncrypt //{ //public: // static QByteArray aesCbcEncrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); // static QByteArray aesCbcDecrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); // static QByteArray aesCfb128Encrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); // static QByteArray aesCfb128Decrypt(const QByteArray &data, const QByteArray &key, // const QByteArray &initialVector); //private: // static QByteArray aesCbcEncrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt); // static QByteArray aesCfb128Encrypt(const QByteArray &data, const AES_KEY &key, // const QByteArray &initialVector, bool isEncrypt); //}; #endif // DATAENCRYPT_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/dbuscloudsync.cpp000066400000000000000000000013741523260663500324060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbuscloudsync.h" #include #include #include "units.h" #include "commondef.h" Dbuscloudsync::Dbuscloudsync(QObject *parent) : DServiceBase(serviceBasePath + "/CloudSync", serviceBaseName + ".CloudSync", parent) { qCDebug(ServiceLogger) << "Creating Dbuscloudsync"; } void Dbuscloudsync::MsgCallBack(const QByteArray &msg) { qCDebug(ServiceLogger) << "MsgCallBack"; //msgä¿¡æ�¯å¤„ç�† QJsonObject json; json = QJsonDocument::fromJson(msg).object(); //TODO:è§£æž�获å�–到的数æ�®ï¼Œä¾�æ�®éœ€è¦�å�šå�Žç»­æ“�作 qCWarning(CommonLogger) << "Get " << " error."; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/dbuscloudsync.h000066400000000000000000000011101523260663500320370ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSCLOUDSYNC_H #define DBUSCLOUDSYNC_H #include "dservicebase.h" #include "daccountmodule.h" class Dbuscloudsync : public DServiceBase { Q_OBJECT Q_CLASSINFO("D-Bus Interface","com.deepin.dataserver.cloudsync") public: Dbuscloudsync(QObject* parent = nullptr); public slots: /** * @brief MsgCallBack 云å�Œæ­¥ä¿¡æ�¯å›žè°ƒ * @return */ void MsgCallBack(const QByteArray &msg); }; #endif // DBUSCLOUDSYNC_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/syncfilemanage.cpp000066400000000000000000000156741523260663500325220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "syncfilemanage.h" #include "commondef.h" #include #include "units.h" #include SyncFileManage::SyncFileManage(QObject *parent) : QObject(parent) , m_syncoperation(new Syncoperation) , m_account(new DAccount(DAccount::Account_UnionID)) { qCDebug(ServiceLogger) << "SyncFileManage constructor"; } SyncFileManage::~SyncFileManage() { qCDebug(ServiceLogger) << "SyncFileManage destructor"; } bool SyncFileManage::SyncDataDownload(const QString &uid, QString &filepath, int &errorcode) { qCDebug(ServiceLogger) << "Starting sync data download for user:" << uid; //文件下载目录检查 QString usersyncdir(getDBPath() + QString("/%1_calendar").arg(uid)); qCDebug(ServiceLogger) << "Checking user sync directory:" << usersyncdir; UserSyncDirectory(usersyncdir); QString syncDB = usersyncdir + "/" + syncDBname; QFile syncDBfile(syncDB); if (syncDBfile.exists()) { qCDebug(ServiceLogger) << "Removing existing sync DB file:" << syncDB; //存在文件å�³åˆ é™¤ if (!syncDBfile.remove()) { qCWarning(ServiceLogger) << "Failed to remove existing sync DB file:" << syncDB; } } qCDebug(ServiceLogger) << "Downloading sync data to:" << syncDB; SyncoptResult result; result = m_syncoperation->optDownload(syncDB, syncDB); if (result.error_code == SYNC_No_Error) { qCInfo(ServiceLogger) << "Successfully downloaded sync data"; //下载æˆ�功 if (result.data != syncDB) { qCDebug(ServiceLogger) << "Downloaded file path differs from target path, moving file" << "\n From:" << result.data << "\n To:" << syncDB; //文件下载路径ä¸�正确 //将文件移动到正确路径 if (!QFile::rename(result.data, syncDB)) { qCWarning(ServiceLogger) << "Failed to move downloaded file to correct path" << "\n From:" << result.data << "\n To:" << syncDB; errorcode = -1; return false; } } filepath = syncDB; return true; } else if (result.error_code == SYNC_Data_Not_Exist) { qCInfo(ServiceLogger) << "Sync data does not exist, creating new database"; //云å�Œæ­¥æ•°æ�®åº“文件ä¸�存在 if (SyncDbCreate(syncDB)) { qCInfo(ServiceLogger) << "Successfully created new sync database:" << syncDB; filepath = syncDB; return true; } else { qCWarning(ServiceLogger) << "Failed to create new sync database:" << syncDB; errorcode = -1; return false; } } qCWarning(ServiceLogger) << "Sync download failed with error code:" << result.error_code; errorcode = result.error_code; return false; } bool SyncFileManage::SyncDbCreate(const QString &DBpath) { qCDebug(ServiceLogger) << "Creating sync database at:" << DBpath; QFile file(DBpath); if (!file.exists()) { qCDebug(ServiceLogger) << "Creating new database file"; bool bRet = file.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append); if (!bRet) { qCWarning(ServiceLogger) << "Failed to create database file:" << DBpath << "\n Error:" << file.errorString(); return false; } file.close(); } else { qCDebug(ServiceLogger) << "Database file already exists:" << DBpath; } QSqlDatabase m_db; m_db = QSqlDatabase::addDatabase("QSQLITE"); m_db.setPassword(syncDBpassword); m_db.setDatabaseName(DBpath); qCDebug(ServiceLogger) << "Opening database connection"; if (!m_db.open()) { qCWarning(ServiceLogger) << "Failed to open database:" << DBpath << "\n Error:" << m_db.lastError().text(); return false; } qCInfo(ServiceLogger) << "Successfully opened database:" << DBpath; m_db.close(); return true; } bool SyncFileManage::SyncDbDelete(const QString &DBpath) { qCDebug(ServiceLogger) << "Deleting sync database:" << DBpath; if (DBpath.isEmpty()) { qCWarning(ServiceLogger) << "Cannot delete database: path is empty"; return false; } QFileInfo fileinfo(DBpath); QDir dir = fileinfo.dir(); if (dir.exists()) { qCDebug(ServiceLogger) << "Removing directory recursively:" << dir.path(); if (!dir.removeRecursively()) { qCWarning(ServiceLogger) << "Failed to remove directory:" << dir.path(); return false; } qCInfo(ServiceLogger) << "Successfully removed directory:" << dir.path(); } else { qCDebug(ServiceLogger) << "Directory does not exist:" << dir.path(); } return true; } bool SyncFileManage::SyncDataUpload(const QString &filepath, int &errorcode) { qCDebug(ServiceLogger) << "Uploading sync data from:" << filepath; SyncoptResult result; result = m_syncoperation->optUpload(filepath); errorcode = result.error_code; if (result.error_code != SYNC_No_Error) { qCWarning(ServiceLogger) << "Failed to upload sync data" << "\n File:" << filepath << "\n Error code:" << errorcode; return false; } qCInfo(ServiceLogger) << "Successfully uploaded sync data:" << filepath; return true; } bool SyncFileManage::syncDataDelete(const QString &filepath) { qCDebug(ServiceLogger) << "Deleting sync data file:" << filepath; if (!SyncDbDelete(filepath)) { qCWarning(ServiceLogger) << "Failed to delete sync data file:" << filepath; return false; } qCInfo(ServiceLogger) << "Successfully deleted sync data file:" << filepath; return true; } DAccount::Ptr SyncFileManage::getuserInfo() { QVariantMap userInfoMap; if (!m_syncoperation->optUserData(userInfoMap)) { qCWarning(ServiceLogger) << "Failed to get user information"; return nullptr; } m_account->setDisplayName(userInfoMap.value("username").toString()); m_account->setAccountID(userInfoMap.value("uid").toString()); m_account->setAvatar(userInfoMap.value("profile_image").toString()); m_account->setAccountName(userInfoMap.value("nickname").toString()); return m_account; } Syncoperation *SyncFileManage::getSyncoperation() { // qCDebug(ServiceLogger) << "Getting sync operation"; return m_syncoperation; } void SyncFileManage::UserSyncDirectory(const QString &dir) { qCDebug(ServiceLogger) << "Creating user sync directory:" << dir; QDir udir(dir); if (!udir.exists()) { qCDebug(ServiceLogger) << "User sync directory does not exist, creating it"; udir.mkdir(dir); } } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/syncfilemanage.h000066400000000000000000000034711523260663500321570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SYNCFILEMANAGE_H #define SYNCFILEMANAGE_H #include "syncoperation.h" #include "dschedule.h" #include #include "dataencrypt.h" #include const QString syncDBname = "synccalendarDB.db"; const QString syncDBpassword = "calendar123"; class SyncFileManage : public QObject { Q_OBJECT public: explicit SyncFileManage(QObject *parent = nullptr); ~SyncFileManage(); /** * @brief SyncDataUpload 云端文件下载接å�£ * @param UID:用户UIDä¿¡æ�¯ * @return filename: 下载数æ�®åº“文件路径 * 返回值: -1 æ•°æ�®åº“文件创建失败 * 云å�Œæ­¥é”™è¯¯ç � */ bool SyncDataDownload(const QString &uid, QString &filepath, int &errorcode); /** * @brief SyncDataUpload å�Œæ­¥æ•°æ�®ä¸Šä¼  * @param * @return */ bool SyncDataUpload(const QString &filepath, int &errorcode); /** * @brief syncDataDelete 删除临时数æ�® * @param filepath * @return */ bool syncDataDelete(const QString &filepath); /** * @brief getuserInfo 获å�–用户信æ�¯ * @param * @return */ DAccount::Ptr getuserInfo(); Syncoperation *getSyncoperation(); private: /** * @brief SyncDbCreate å�Œæ­¥æ•°æ�®åº“文件创建 * @param * @return */ bool SyncDbCreate(const QString &DBpath); /** * @brief SyncDbCreate å�Œæ­¥æ•°æ�®åº“文件创建 * @param * @return */ bool SyncDbDelete(const QString &DBpath); void UserSyncDirectory(const QString &dir); private: Syncoperation *m_syncoperation = nullptr; DAccount::Ptr m_account; }; #endif // SYNCFILEMANAGE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/syncoperation.cpp000066400000000000000000000273241523260663500324250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "syncoperation.h" #include "commondef.h" #include Syncoperation::Syncoperation(QObject *parent) : QObject(parent) , m_syncInter(new SyncInter(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, QDBusConnection::sessionBus(), this)) { qCDebug(ServiceLogger) << "Syncoperation constructor"; if (!QDBusConnection::sessionBus().connect(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, "org.freedesktop.DBus.Properties", QLatin1String("PropertiesChanged"), this, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)))) { qCWarning(ServiceLogger) << "Failed to connect to PropertiesChanged signal on DBus!"; } else { qCDebug(ServiceLogger) << "Connected to PropertiesChanged signal on DBus."; } if (!QDBusConnection::sessionBus().connect(m_syncInter->service(), m_syncInter->path(), m_syncInter->interface(), "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(ServiceLogger) << "Failed to connect to DBus call! Path:" << m_syncInter->path() << "Interface:" << m_syncInter->interface(); } else { qCDebug(ServiceLogger) << "Connected to DBus call. Path:" << m_syncInter->path() << "Interface:" << m_syncInter->interface(); } } Syncoperation::~Syncoperation() { qCDebug(ServiceLogger) << "Syncoperation destructor"; } void Syncoperation::optlogin() { qCDebug(ServiceLogger) << "Optlogin"; //异步调用无需等待结果,ç”±å�Žç»­LoginStatus触å�‘处ç�† m_syncInter->login(); } void Syncoperation::optlogout() { qCDebug(ServiceLogger) << "Optlogout"; //异步调用无需等待结果,ç”±å�Žç»­LoginStatus触å�‘处ç�† m_syncInter->logout(); } SyncoptResult Syncoperation::optUpload(const QString &key) { qCDebug(ServiceLogger) << "Starting upload operation. Key:" << key; SyncoptResult result; QDBusPendingReply reply = m_syncInter->Upload(key); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Upload succeeded. Key:" << key; result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Upload failed. Key:" << key << "Error:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << "Upload error code:" << result.error_code; } } return result; } SyncoptResult Syncoperation::optDownload(const QString &key, const QString &path) { qCDebug(ServiceLogger) << "Starting download operation. Key:" << key << "Path:" << path; SyncoptResult result; QDBusPendingReply reply = m_syncInter->Download(key, path); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Download succeeded. Key:" << key << "Path:" << path; result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Download failed. Key:" << key << "Path:" << path << "Error:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << "Download error code:" << result.error_code; } } return result; } SyncoptResult Syncoperation::optDelete(const QString &key) { qCDebug(ServiceLogger) << "Starting delete operation. Key:" << key; SyncoptResult result; QDBusPendingReply reply = m_syncInter->Delete(key); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Delete succeeded. Key:" << key; result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Delete failed. Key:" << key << "Error:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << "Delete error code:" << result.error_code; } } return result; } SyncoptResult Syncoperation::optMetadata(const QString &key) { qCDebug(ServiceLogger) << "Starting metadata operation. Key:" << key; SyncoptResult result; QDBusPendingReply reply = m_syncInter->Metadata(key); reply.waitForFinished(); if (reply.error().message().isEmpty()) { qCInfo(ServiceLogger) << "Metadata succeeded. Key:" << key; result.data = reply.value(); result.ret = true; result.error_code = SYNC_No_Error; } else { qCWarning(ServiceLogger) << "Metadata failed. Key:" << key << "Error:" << reply.error().message(); result.ret = false; QJsonDocument jsonDocument = QJsonDocument::fromJson(reply.error().message().toLocal8Bit().data()); QJsonObject obj = jsonDocument.object(); if (obj.contains(QString("code"))) { result.error_code = obj.value(QString("code")).toInt(); qCWarning(ServiceLogger) << "Metadata error code:" << result.error_code; } } return result; } bool Syncoperation::optUserData(QVariantMap &userInfoMap) { qCDebug(ServiceLogger) << "Requesting user data via DBus"; QDBusMessage msg = QDBusMessage::createMethodCall(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, "org.freedesktop.DBus.Properties", QStringLiteral("Get")); msg << QString("com.deepin.utcloud.Daemon") << QString("UserData"); QDBusMessage reply = QDBusConnection::sessionBus().call(msg); if (reply.type() == QDBusMessage::ReplyMessage) { QVariant variant = reply.arguments().first(); QDBusArgument argument = variant.value().variant().value(); argument >> userInfoMap; qCInfo(ServiceLogger) << "Successfully retrieved user data via DBus."; return true; } else { qCWarning(ServiceLogger) << "Failed to retrieve user data via DBus. Message type:" << reply.type(); return false; } } bool Syncoperation::hasAvailable() { qCDebug(ServiceLogger) << "Checking if sync service is available via DBus"; QDBusMessage msg = QDBusMessage::createMethodCall(SYNC_DBUS_PATH, SYNC_DBUS_INTERFACE, "org.freedesktop.DBus.Introspectable", QStringLiteral("Introspect")); QDBusMessage reply = QDBusConnection::sessionBus().call(msg); qCInfo(ServiceLogger) << "Syncoperation hasAvailable reply type:" << reply.type(); if (reply.type() == QDBusMessage::ReplyMessage) { qCDebug(ServiceLogger) << "Sync service is available."; return true; } else { qCWarning(ServiceLogger) << "Sync service is not available. Message type:" << reply.type(); return false; } } SyncoptResult Syncoperation::optGetMainSwitcher() { qCDebug(ServiceLogger) << "Getting main switcher state via DBus"; SyncoptResult result; QDBusPendingReply reply = m_syncInter->SwitcherDump(); reply.waitForFinished(); if (reply.error().message().isEmpty()) { QJsonObject json; json = QJsonDocument::fromJson(reply.value().toUtf8()).object(); if (json.contains(QString("enabled"))) { bool state = json.value(QString("enabled")).toBool(); result.switch_state = state; qCInfo(ServiceLogger) << "Main switcher state:" << state; } result.ret = true; } else { qCWarning(ServiceLogger) << "Failed to get main switcher state via DBus. Error:" << reply.error().message(); result.ret = false; } return result; } SyncoptResult Syncoperation::optGetCalendarSwitcher() { qCDebug(ServiceLogger) << "Getting calendar switcher state via DBus"; //登录å�Žç«‹å�³èŽ·å�–开关状æ€�有问题,需è¦�延迟获å�– QThread::msleep(500); SyncoptResult mainswitcher = optGetMainSwitcher(); SyncoptResult result; result.switch_state = false; //默认关闭 if (mainswitcher.ret) { if (mainswitcher.switch_state) { //总开关开å�¯,获å�–日历按钮状æ€� QDBusPendingReply reply = m_syncInter->SwitcherGet(utcloudcalendatpath); reply.waitForFinished(); if (reply.error().message().isEmpty()) { result.switch_state = reply.value(); result.ret = true; qCInfo(ServiceLogger) << "Calendar switcher state:" << result.switch_state; } else { qCWarning(ServiceLogger) << "Failed to get calendar switcher state via DBus. Error:" << reply.error().message(); result.ret = false; } } else { qCWarning(ServiceLogger) << "Main switcher is off, calendar switcher state not available."; result.ret = false; } } else { qCWarning(ServiceLogger) << "Failed to get main switcher, cannot get calendar switcher state."; result.ret = false; } return result; } void Syncoperation::slotDbusCall(const QDBusMessage &msg) { qCDebug(ServiceLogger) << "Received DBus call. Member:" << msg.member(); if (msg.member() == "SwitcherChange") { SyncoptResult result; //获å�–总开关状æ€� result = optGetCalendarSwitcher(); if (result.ret) { qCDebug(ServiceLogger) << "SwitcherChange: Calendar switcher state:" << result.switch_state; Q_EMIT SwitcherChange(result.switch_state); } else { qCWarning(ServiceLogger) << "SwitcherChange: Failed to get calendar switcher state."; Q_EMIT SwitcherChange(false); } } else if (msg.member() == "LoginStatus") { //å¸�户登陆登出信å�·ç›‘测 QVariant variant = msg.arguments().first(); const QDBusArgument &tmp = variant.value(); QVector loginStatus; tmp.beginArray(); while (!tmp.atEnd()) { tmp >> loginStatus; } tmp.endArray(); if (loginStatus.size() > 0) { qCDebug(ServiceLogger) << "LoginStatus changed. New status:" << loginStatus.first(); emit signalLoginStatusChange(loginStatus.first()); } else { qCWarning(ServiceLogger) << "Failed to get loginStatus from DBus message."; } } } void Syncoperation::onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties) { // qCDebug(ServiceLogger) << "onPropertiesChanged"; Q_UNUSED(interfaceName); Q_UNUSED(invalidatedProperties); if (!changedProperties.contains("UserData")) return; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/synchronization/syncoperation.h000066400000000000000000000060321523260663500320630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SYNCOPERATION_H #define SYNCOPERATION_H #include #include #include #include #include "dunioniddbus.h" //云å�Œæ­¥DBUS接å�£ä¿¡æ�¯ #define SYNC_DBUS_PATH "com.deepin.sync.Daemon" #define SYNC_DBUS_INTERFACE "/com/deepin/utcloud/Daemon" //云å�Œæ­¥é”™è¯¯ç � #define SYNC_No_Error 0 /*执行正常*/ #define SYNC_Internal_Error 7500 /*内部错误*/ #define SYNC_Parameter_Error 7501 /*å�‚数错误*/ #define SYNC_Login_Expired 7502 /*未登录或登录过期*/ #define SYNC_No_Access 7503 /*ç¦�止访问,ä¸�在白å��å�•内*/ #define SYNC_Data_Not_Exist 7504 /*æ•°æ�®ä¸�存在*/ #define SYNC_File_Operation_Failed 7505 /*文件æ“�作失败*/ #define SYNC_Network_Request_Error 7506 /*网络请求出错错误*/ #define SYNC_Oss_Operation_Error 7507 /*ossæ“�作出错*/ #define SYNC_Space_Not_Available 7508 /*空间ä¸�å�¯ç”¨*/ #define SYNC_File_Or_Path_Error 7509 /*文件或者路径出错*/ #define SYNC_Invalid_File_Size 7510 /*文件大å°�ä¸�å�ˆæ³•*/ #define SYNC_Metadata_Check_Error 7511 /*元数æ�®æ ¡éªŒå‡ºé”™*/ const QString utcloudcalendatpath = CALENDAR_SERVICE_PATH"/dde-calendar-service"; using SyncInter = com::deepin::sync::cloudopt; struct SyncoptResult { QString data = ""; //执行结果数æ�® bool ret = false; //执行云å�Œæ­¥æ“�作的结果 int error_code = 0; //错误ç � bool switch_state = false; //开关状æ€� }; class Syncoperation : public QObject { Q_OBJECT public: explicit Syncoperation(QObject *parent = nullptr); ~Syncoperation(); void optlogin(); void optlogout(); SyncoptResult optUpload(const QString &key); SyncoptResult optDownload(const QString &key, const QString &path); SyncoptResult optDelete(const QString &key); SyncoptResult optMetadata(const QString &key); bool optUserData(QVariantMap &userInfoMap); /** * @brief hasAvailable 判断云å�Œæ­¥æ˜¯å�¦æ��ä¾›Available方法 * @return */ bool hasAvailable(); //获å�–总开关状æ€� SyncoptResult optGetMainSwitcher(); //获å�–日历开关状æ€� SyncoptResult optGetCalendarSwitcher(); Q_SIGNALS: void signalLoginStatusChange(const int staus); void LoginStatus(const int data); void SwitcherChange(const bool state); private Q_SLOTS: void slotDbusCall(const QDBusMessage &msg); void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); private: SyncInter *m_syncInter; }; #endif // SYNCUPLOAD_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/000077500000000000000000000000001523260663500255535ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/ddatasyncbase.cpp000066400000000000000000000011221523260663500310600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "ddatasyncbase.h" #include "commondef.h" #include "dunioniddav.h" DDataSyncBase::DDataSyncBase() { qCDebug(ServiceLogger) << "Initializing DataSyncBase"; qRegisterMetaType("DDataSyncBase::UpdateTypes"); qRegisterMetaType("SyncTypes"); qCDebug(ServiceLogger) << "DataSyncBase initialization completed"; } DDataSyncBase::~DDataSyncBase() { qCDebug(ServiceLogger) << "Destroying DataSyncBase"; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/ddatasyncbase.h000066400000000000000000000026361523260663500305400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DDATASYNCBASE_H #define DDATASYNCBASE_H #include "daccount.h" #include "daccountdatabase.h" #include "syncfilemanage.h" #include #include #include #include #include #ifndef Q_MOC_RUN #define Q_DECLARE_FLAGS(Flags, Enum)\ typedef QFlags Flags; #endif /** * @brief The DDataSyncBase class 云å�Œæ­¥çš„基类 */ class DDataSyncBase : public QObject { Q_OBJECT public: enum UpdateType { Update_None = 0, /*æ— */ Update_Schedule = 1, /*更新日程*/ Update_ScheduleType = 2, /*更新日程类型*/ Update_Setting = 4, /*更新设置*/ }; Q_DECLARE_FLAGS(UpdateTypes, UpdateType) enum SyncType { Sync_None = 0, /*æ— */ Sync_Upload = 1, /*上传*/ Sync_Download = 2, /*下载*/ }; Q_DECLARE_FLAGS(SyncTypes, SyncType) DDataSyncBase(); virtual ~DDataSyncBase(); virtual void syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) = 0; signals: // void signalUpdate(const UpdateTypes updateType); void signalSyncState(const int syncState); }; Q_DECLARE_OPERATORS_FOR_FLAGS(DDataSyncBase::UpdateTypes) Q_DECLARE_OPERATORS_FOR_FLAGS(DDataSyncBase::SyncTypes) #endif // DDATASYNCBASE_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/dsyncdatafactory.cpp000066400000000000000000000017361523260663500316300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dsyncdatafactory.h" #include "dunioniddav.h" #include "commondef.h" #include DSyncDataFactory::DSyncDataFactory() { qCDebug(ServiceLogger) << "Creating DSyncDataFactory"; } DDataSyncBase *DSyncDataFactory::createDataSync(const DAccount::Ptr &account) { qCDebug(ServiceLogger) << "Creating data sync for account type:" << account->accountType(); DDataSyncBase *syncBase = nullptr; switch (account->accountType()) { case DAccount::Account_UnionID: qCDebug(ServiceLogger) << "Creating UnionID data sync"; syncBase = new DUnionIDDav(); qCInfo(ServiceLogger) << "创建å�Œæ­¥ä»»åŠ¡"; break; default: qCDebug(ServiceLogger) << "Creating default data sync"; syncBase = nullptr; break; } qCDebug(ServiceLogger) << "Data sync created"; return syncBase; } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/dsyncdatafactory.h000066400000000000000000000007351523260663500312730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSYNCDATAFACTORY_H #define DSYNCDATAFACTORY_H #include "ddatasyncbase.h" /** * @brief The DSyncDataFactory class æ ¹æ�®ä¸�å�Œç±»åž‹çš„è´¦å�·ï¼Œç”Ÿäº§ä¸�å�Œçš„上传实例 */ class DSyncDataFactory { public: DSyncDataFactory(); static DDataSyncBase *createDataSync(const DAccount::Ptr &account); }; #endif // DSYNCDATAFACTORY_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/dunioniddav.cpp000066400000000000000000000656131523260663500305760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dunioniddav.h" #include "dcalendargeneralsettings.h" #include "syncfilemanage.h" #include "units.h" #include "commondef.h" #include "ddatabase.h" #include "dunioniddav_p.h" #include #include #include #include #include #include #include #include #include /** * @brief The SqlTransactionLocker class 用于数æ�®åº“事务相关 */ bool SyncAccount::defaultScheduleType() { qCDebug(ServiceLogger) << "Setting default schedule type for account:" << _accountID; //工作类型 QDateTime currentTime = QDateTime::currentDateTime(); DScheduleType::Ptr workType(new DScheduleType(_accountID)); workType->setTypeID(DDataBase::createUuid()); workType->setDtCreate(currentTime.addDays(-3)); workType->setPrivilege(DScheduleType::Read); workType->setTypeName("Work"); workType->setDisplayName("Work"); DTypeColor workColor; workColor.setColorID(DDataBase::GWorkColorID); workColor.setColorCode("#ff5e97"); workColor.setPrivilege(DTypeColor::PriSystem); workType->setTypeColor(workColor); workType->setShowState(DScheduleType::Show); if (!insertToScheduleType(workType)) { qCWarning(ServiceLogger) << "Failed to insert default 'Work' schedule type for account:" << _accountID; return false; } //生活 DScheduleType::Ptr lifeType(new DScheduleType(_accountID)); lifeType->setTypeID(DDataBase::createUuid()); lifeType->setDtCreate(currentTime.addDays(-2)); lifeType->setPrivilege(DScheduleType::Read); lifeType->setTypeName("Life"); lifeType->setDisplayName("Life"); DTypeColor lifeColor; lifeColor.setColorID(DDataBase::GLifeColorID); lifeColor.setColorCode("#5d51ff"); lifeColor.setPrivilege(DTypeColor::PriSystem); lifeType->setTypeColor(lifeColor); lifeType->setShowState(DScheduleType::Show); if (!insertToScheduleType(lifeType)) { qCWarning(ServiceLogger) << "Failed to insert default 'Life' schedule type for account:" << _accountID; return false; } //å…¶ä»– DScheduleType::Ptr otherType(new DScheduleType(_accountID)); otherType->setTypeID(DDataBase::createUuid()); otherType->setDtCreate(currentTime); otherType->setPrivilege(DScheduleType::Read); otherType->setTypeName("Other"); otherType->setDisplayName("Other"); DTypeColor otherColor; otherColor.setColorID(DDataBase::GOtherColorID); otherColor.setColorCode("#5bdd80"); otherColor.setPrivilege(DTypeColor::PriSystem); otherType->setTypeColor(otherColor); otherType->setShowState(DScheduleType::Show); if (!insertToScheduleType(otherType)) { qCWarning(ServiceLogger) << "Failed to insert default 'Other' schedule type for account:" << _accountID; return false; } return true; } bool SyncAccount::defaultTypeColor() { qCDebug(ServiceLogger) << "Setting default type color for account:" << _accountID; QDateTime currentTime = QDateTime::currentDateTime(); int index = -10; //使用与本地一致的颜色id QMap::const_iterator iter = GTypeColor.constBegin(); for (; iter != GTypeColor.constEnd(); ++iter) { DTypeColor typeColor; typeColor.setDtCreate(currentTime.addDays(++index)); typeColor.setPrivilege(DTypeColor::PriSystem); typeColor.setColorCode(iter.value()); typeColor.setColorID(iter.key()); if (!insertToTypeColor(typeColor)) { qCWarning(ServiceLogger) << "Failed to insert type color. ColorID:" << typeColor.colorID() << "Account:" << _accountID; return false; }; } return true; } bool SyncAccount::insertToScheduleType(const DScheduleType::Ptr &scheduleType) { qCDebug(ServiceLogger) << "Inserting schedule type:" << scheduleType->typeName() << "for account:" << _accountID; QString strSql("INSERT INTO scheduleType ( \ typeID, typeName, typeDisplayName, typePath, \ typeColorID, description, privilege, showState, \ syncTag,dtCreate,isDeleted) \ VALUES(?,?,?,?,?,?,?,?,?,?,?)"); SqliteQuery query(_connectionName); query.prepare(strSql); if (scheduleType->typeID().size() < 30) { scheduleType->setTypeID(DDataBase::createUuid()); } query.addBindValue(scheduleType->typeID()); query.addBindValue(scheduleType->typeName()); query.addBindValue(scheduleType->displayName()); query.addBindValue(scheduleType->typePath()); query.addBindValue(scheduleType->typeColor().colorID()); query.addBindValue(scheduleType->description()); query.addBindValue(int(scheduleType->privilege())); query.addBindValue(scheduleType->showState()); query.addBindValue(scheduleType->syncTag()); query.addBindValue(dtToString(scheduleType->dtCreate())); query.addBindValue(scheduleType->deleted()); return query.exec(); } bool SyncAccount::insertToTypeColor(const DTypeColor &typeColor) { qCDebug(ServiceLogger) << "Inserting type color:" << typeColor.colorID() << "for account:" << _accountID; SqliteQuery query(_connectionName); QString strSql("INSERT INTO TypeColor \ (ColorID, ColorHex, privilege,dtCreate) \ VALUES(:ColorID, :ColorHex, :privilege,:dtCreate)"); query.prepare("replace into TypeColor (ColorID, ColorHex, privilege,dtCreate) \ VALUES(:ColorID, :ColorHex, :privilege,:dtCreate)"); query.bindValue(":ColorID", typeColor.colorID()); query.bindValue(":ColorHex", typeColor.colorCode()); query.bindValue(":privilege", typeColor.privilege()); query.bindValue(":dtCreate", dtToString(typeColor.dtCreate())); return query.exec(); } void DUIDSynDataWorker::syncData(SyncStack syncType) { qCDebug(ServiceLogger) << "Syncing data for account:" << syncType.accountId; if (nullptr == mSyncTimer) { qCDebug(ServiceLogger) << "Creating sync timer"; mSyncTimer = new QTimer(this); mSyncTimer->setSingleShot(true); connect(mSyncTimer, &QTimer::timeout, this, &DUIDSynDataWorker::slotSync); } mSyncTimer->start(200); mSyncList.append(syncType); } void DUIDSynDataWorker::slotSync() { qCDebug(ServiceLogger) << "Syncing data"; bool next = false; for (int k = mSyncList.count() - 1; k >= 0; k--) { if (k == mSyncList.count() - 1) { mSync = mSyncList[k]; next = true; } else { mSync.syncType |= mSyncList[k].syncType; } if (mSync.syncType.testFlag(DDataSyncBase::Sync_Upload) && mSync.syncType.testFlag(DDataSyncBase::Sync_Download)) break; } mSyncList.clear(); if (next) startUpdate(); } void DUIDSynDataWorker::startUpdate() { qCDebug(ServiceLogger) << "Starting update"; /* * A为本地数æ�®åº“ * B为云端下载的临时数æ�®åº“ * 1.下载B * 2.å°†Açš„uploadTaskå�Œæ­¥åˆ°B * 3.å°†B的数æ�®åº“完全å¤�制到A * 4.上传B */ SyncFileManage fileManger; int errCode = 0; DUnionIDDav::UpdateTypes updateType = DUnionIDDav::Update_None; QSqlDatabase::cloneDatabase(mSync.db_account, mSync.dbname_account_thread); QSqlDatabase::cloneDatabase(mSync.db_manager, mSync.dbname_manager_thread); //获å�–云端数æ�® bool isInitSyncData = false; errCode = mSync.downloadUidData(isInitSyncData, fileManger); //如果下载失败 if(errCode != 0){ qCWarning(ServiceLogger) << "Failed to download UID data. Error code:" << errCode; //å�‘é€�å�Œæ­¥çжæ€� emit signalSyncState(errCode); return; } SqlTransactionLocker transactionLocker({mSync.dbname_account_thread, mSync.dbname_manager_thread, mSync.dbname_sync_thread}); //本地数æ�®è¿�移到临时文件中 if (errCode == 0) { qCDebug(ServiceLogger) << "Loading local data to temporary file"; errCode = mSync.loadToTmp(); } //将临时文件数æ�®è¿�移到本地中 if (errCode == 0 && mSync.syncType.testFlag(DDataSyncBase::SyncType::Sync_Download)) { qCDebug(ServiceLogger) << "Loading temporary data to local"; errCode = mSync.tmpToLoad(updateType); } if (errCode == 0) { qCInfo(ServiceLogger) << "Committing transaction for sync."; transactionLocker.commit(); } else { qCWarning(ServiceLogger) << "Rolling back transaction for sync. Error code:" << errCode; transactionLocker.rollback(); } QSqlDatabase::removeDatabase(mSync.dbname_account_thread); QSqlDatabase::removeDatabase(mSync.dbname_manager_thread); QSqlDatabase::removeDatabase(mSync.dbname_sync_thread); //如果为上传需è¦�上传数æ�® if (errCode == 0 && (isInitSyncData || mSync.syncType.testFlag(DDataSyncBase::SyncType::Sync_Upload))) { qCInfo(ServiceLogger) << "Uploading temporary data after sync."; errCode = mSync.uploadTmpData(fileManger); } //删除临时文件 mSync.deleteTmpData(fileManger); qCInfo(ServiceLogger) << "Sync workflow completed. Error code:" << errCode; if (errCode == 0) { //å�‘é€�æ•°æ�®æ›´æ–°æ¶ˆæ�¯ qCInfo(ServiceLogger) << "Sync update successful. Emitting signalUpdate."; emit signalUpdate(updateType); } //å�‘é€�å�Œæ­¥çжæ€� emit signalSyncState(errCode); } DUnionIDDav::DUnionIDDav() : DDataSyncBase() , d(new DUIDSynDataPrivate()) { qCDebug(ServiceLogger) << "DUnionIDDav constructor"; connect(d, &DUIDSynDataPrivate::signalUpdate, this, &DUnionIDDav::signalUpdate); connect(d, &DUIDSynDataPrivate::signalSyncState, this, &DUnionIDDav::signalSyncState); } DUnionIDDav::~DUnionIDDav() { qCDebug(ServiceLogger) << "DUnionIDDav destructor"; delete d; } void DUnionIDDav::syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) { qCInfo(ServiceLogger) << "DUnionIDDav syncData called. AccountID:" << accountId << "AccountName:" << accountName << "AccountState:" << accountState << "SyncType:" << syncType; d->syncData(accountId, accountName, accountState, syncType); } int SyncStack::downloadUidData(bool &isInitSyncData, SyncFileManage &fileManger) { qCDebug(ServiceLogger) << "Downloading UID data. AccountID:" << accountId; int errCode = 0; isInitSyncData = false; //下载数æ�®åº“sync if (!fileManger.SyncDataDownload(accountId, dbpath_sync, errCode)) { qCWarning(ServiceLogger) << "Failed to download sync data for account:" << accountId << "Error code:" << errCode; return errCode; } QSqlDatabase db_sync = QSqlDatabase::addDatabase("QSQLITE", dbname_sync_thread); db_sync.setDatabaseName(dbpath_sync); if (!db_sync.open()) { qCWarning(ServiceLogger) << "Failed to open sync database. DBPath:" << dbpath_sync; return -1; } qCInfo(ServiceLogger) << "Initialized table structure for sync database."; SqliteQuery query(dbname_sync_thread); if (!query.exec(DAccountDataBase::sql_create_schedules)) return -1; if (!query.exec(DAccountDataBase::sql_create_scheduleType)) return -1; if (!query.exec(DAccountDataBase::sql_create_typeColor)) return -1; if (!query.exec(DAccountDataBase::sql_create_calendargeneralsettings)) return -1; // if(!repairTable("schedules", dbname_account_thread, dbname_sync_thread)) { // return -1; // } // if(!repairTable("scheduleType", dbname_account_thread, dbname_sync_thread)) { // return -1; // } // if(!repairTable("typeColor", dbname_account_thread, dbname_sync_thread)) { // return -1; // } query.exec("select count(0) from scheduleType"); if (query.next() && query.value(0).toInt() == 0) { qCInfo(ServiceLogger) << "No data found. Setting default schedule types, colors, and general settings."; SyncAccount accountDb(dbname_sync_thread, accountId); qCInfo(ServiceLogger) << "默认日程类型"; if (!accountDb.defaultScheduleType()) { qCWarning(ServiceLogger) << "Failed to set default schedule types for sync database."; return -1; } qCInfo(ServiceLogger) << "默认颜色"; if (!accountDb.defaultTypeColor()) { qCWarning(ServiceLogger) << "Failed to set default type colors for sync database."; return -1; } if (accountState & DAccount::Account_Setting) { qCInfo(ServiceLogger) << "Setting default general settings for sync database."; if(needUpdateSettingValue()) { if (!syncIntoTable("calendargeneralsettings", dbname_manager_thread, dbname_sync_thread)) { qCWarning(ServiceLogger) << "Failed to sync general settings into sync database."; return -1; } } } //云端没有对应数æ�®éœ€è¦�åˆ�始化,返回åˆ�始化状æ€� isInitSyncData = true; } return 0; } int SyncStack::loadToTmp() { qCInfo(ServiceLogger) << "Syncing local uploadTask to downloaded DB."; if(accountState & DAccount::Account_Calendar) { SqliteQuery query(dbname_account_thread); query.exec("select taskID,uploadType,uploadObject,objectID from uploadTask"); while (query.next()) { int type = query.value("uploadType").toInt(); int obj = query.value("uploadObject").toInt(); QString key_value = query.value("objectID").toString(); QString key_name = DUploadTaskData::sql_table_primary_key(obj); QString table_name = DUploadTaskData::sql_table_name(obj); switch (type) { case DUploadTaskData::Create: case DUploadTaskData::Modify: if (!replaceIntoRecord(table_name, selectRecord(table_name, key_name, key_value, dbname_account_thread), dbname_sync_thread)){ qCWarning(ServiceLogger) << "Failed to replace record in table:" << table_name << "Key:" << key_value; return -1; } break; case DUploadTaskData::Delete: if (!deleteTableLine(table_name, key_name, key_value, dbname_sync_thread)){ qCWarning(ServiceLogger) << "Failed to delete record in table:" << table_name << "Key:" << key_value; return -1; } break; } } qCInfo(ServiceLogger) << "Clearing uploadTask table after sync."; if (!deleteTable("uploadTask", dbname_account_thread)){ qCWarning(ServiceLogger) << "Failed to clear uploadTask table after sync."; return -1; } } if (accountState & DAccount::Account_Setting) { qCInfo(ServiceLogger) << "Syncing general settings."; if(needUpdateSettingValue()) { QDateTime managerDate = selectValue("vch_value", "calendargeneralsettings", "vch_key", "dt_update", dbname_manager_thread).toDateTime(); QDateTime syncDate = selectValue("vch_value", "calendargeneralsettings", "vch_key", "dt_update", dbname_sync_thread).toDateTime(); if (managerDate > syncDate) if (!syncIntoTable("calendargeneralsettings", dbname_manager_thread, dbname_sync_thread)){ qCWarning(ServiceLogger) << "Failed to sync general settings from manager to sync DB."; return -1; } if (syncDate > managerDate) if (!syncIntoTable("calendargeneralsettings", dbname_sync_thread, dbname_manager_thread)){ qCWarning(ServiceLogger) << "Failed to sync general settings from sync to manager DB."; return -1; } } } return 0; } bool SyncStack::needUpdateSettingValue() { qCDebug(ServiceLogger) << "Checking if setting values need to be updated"; int mangerdayweek = selectValue("vch_value", "calendargeneralsettings", "vch_key", "firstDayOfWeek", dbname_manager_thread).toInt(); int syncdayweek = selectValue("vch_value", "calendargeneralsettings", "vch_key", "firstDayOfWeek", dbname_sync_thread).toInt(); if(mangerdayweek != syncdayweek) { qCDebug(ServiceLogger) << "Manger day week:" << mangerdayweek << "Sync day week:" << syncdayweek; return true; } int mangerTimeShow = selectValue("vch_value", "calendargeneralsettings", "vch_key", "timeShowType", dbname_manager_thread).toInt(); int syncTimeShow = selectValue("vch_value", "calendargeneralsettings", "vch_key", "timeShowType", dbname_sync_thread).toInt(); if(mangerTimeShow != syncTimeShow) { qCDebug(ServiceLogger) << "Manger time show:" << mangerTimeShow << "Sync time show:" << syncTimeShow; return true; } return false; } int SyncStack::tmpToLoad(DDataSyncBase::UpdateTypes &updateType) { qCDebug(ServiceLogger) << "Updating schedules, schedule types, and type colors from sync DB to account DB."; if (accountState & DAccount::Account_Calendar) { qCInfo(ServiceLogger) << "Updating schedules, schedule types, and type colors from sync DB to account DB."; if (!syncIntoTable("schedules", dbname_sync_thread, dbname_account_thread)){ qCWarning(ServiceLogger) << "Failed to update schedules from sync DB to account DB."; return -1; } if (!syncIntoTable("scheduleType", dbname_sync_thread, dbname_account_thread)){ qCWarning(ServiceLogger) << "Failed to update schedule types from sync DB to account DB."; return -1; } if (!syncIntoTable("typeColor", dbname_sync_thread, dbname_account_thread)){ qCWarning(ServiceLogger) << "Failed to update type colors from sync DB to account DB."; return -1; } updateType = DUnionIDDav::Update_Schedule | DUnionIDDav::Update_ScheduleType; } if (accountState & DAccount::Account_Setting) { qCInfo(ServiceLogger) << "Updating general settings from sync DB to manager DB."; if(needUpdateSettingValue()) { if (!syncIntoTable("calendargeneralsettings", dbname_sync_thread, dbname_manager_thread)){ qCWarning(ServiceLogger) << "Failed to update general settings from sync DB to manager DB."; return -1; } } updateType = updateType | DUnionIDDav::Update_Setting; } return 0; } int SyncStack::uploadTmpData(SyncFileManage &fileManger) { qCDebug(ServiceLogger) << "Uploading temporary sync data. DBPath:" << dbpath_sync; int errCode = 0; fileManger.SyncDataUpload(dbpath_sync, errCode); return errCode; } void SyncStack::deleteTmpData(SyncFileManage &fileManger) { qCDebug(ServiceLogger) << "Deleting temporary sync data. DBPath:" << dbpath_sync; fileManger.syncDataDelete(dbpath_sync); } QString SyncStack::prepareQuest(int count) { // qCDebug(ServiceLogger) << "Preparing question marks for count:" << count; QString r; while (count--) { r += "?,"; } r.chop(1); return r; } void SyncStack::prepareBinds(QSqlQuery &query, QSqlRecord source) { qCDebug(ServiceLogger) << "Preparing binds for count:" << source.count(); for (int k = 0; k < source.count(); k++) query.addBindValue(source.value(k)); } bool SyncStack::syncIntoTable(const QString &table_name, const QString &connection_name_source, const QString &connection_name_target) { qCDebug(ServiceLogger) << "Syncing into table:" << table_name << "from:" << connection_name_source << "to:" << connection_name_target; SqliteQuery source(QSqlDatabase::database(connection_name_source)); SqliteQuery target(QSqlDatabase::database(connection_name_target)); if (!target.exec(" delete from " + table_name)){ qCWarning(ServiceLogger) << target.lastError() <<"table_name:"< local_header_info; QMap server_header_info; SqliteQuery query_local(connection_name_local); SqliteQuery query_server(connection_name_server); QString select_sql = QString("SELECT name, type FROM pragma_table_info('%1')").arg(table_name); QMap default_map = { {"TEXT", ""}, {"INTEGER", "0"}, {"BOOL", "false"}, {"DATETIME", QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")} }; query_local.exec(select_sql); while (query_local.next()) { local_header_info.insert(query_local.value("name").toString(), query_local.value("type").toString()); } query_server.exec(select_sql); while (query_server.next()) { server_header_info.insert(query_server.value("name").toString(), query_server.value("type").toString()); } auto exceptFunc = [](QSet local, QSet server) -> QSet { QSet ret = local; local.intersect(server); ret.subtract(local); return ret; }; //本地数æ�®çš„字段 都需è¦� 在æœ�务端数æ�®åº“里 #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) auto local_header_info_keys = QSet(local_header_info.keys().begin(),local_header_info.keys().end()); auto server_header_info_keys = QSet(server_header_info.keys().begin(),server_header_info.keys().end()); #else auto local_header_info_keys = QSet::fromList(local_header_info.keys()); auto server_header_info_keys = QSet::fromList(server_header_info.keys()); #endif QSet header_ready = exceptFunc(local_header_info_keys, server_header_info_keys); if (header_ready.isEmpty()) return true; //将本地数æ�®åº“ä¸�在æœ�务器数æ�®åº“的字段 æ�’å…¥ æœ�务器数æ�®åº“ for (auto header : header_ready) { QString sql_type = local_header_info.value(header); QString default_value = default_map.value(sql_type); QString alter_sql = QString("ALTER TABLE %1 ADD COLUMN %2 %3 DEFAULT '%4';") .arg(table_name) .arg(header) .arg(sql_type) .arg(default_value); if (!query_server.exec(alter_sql)) { qCInfo(ServiceLogger) << query_server.lastError(); return false; } } return true; } DUnionIDDav::DUIDSynDataPrivate::DUIDSynDataPrivate() { qCDebug(ServiceLogger) << "DUIDSynDataPrivate constructor"; mThread = new QThread(this); DUIDSynDataWorker *mWorker = new DUIDSynDataWorker; qRegisterMetaType("SyncStack"); mWorker->moveToThread(mThread); connect(mThread, &QThread::finished, mWorker, &DUIDSynDataWorker::deleteLater); connect(mThread, &QThread::finished, mThread, &QThread::deleteLater); connect(mWorker, &DUIDSynDataWorker::signalUpdate, this, &DUIDSynDataPrivate::signalUpdate); connect(mWorker, &DUIDSynDataWorker::signalSyncState, this, &DUIDSynDataPrivate::signalSyncState); connect(this, &DUIDSynDataPrivate::signalSyncData, mWorker, &DUIDSynDataWorker::syncData); mThread->start(); } DUnionIDDav::DUIDSynDataPrivate::~DUIDSynDataPrivate() { qCDebug(ServiceLogger) << "DUIDSynDataPrivate destructor"; if (mThread->isRunning()) { qCDebug(ServiceLogger) << "Quitting thread"; mThread->quit(); mThread->wait(); } } void DUnionIDDav::DUIDSynDataPrivate::syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) { qCDebug(ServiceLogger) << "Syncing data for account:" << accountId; emit signalSyncData(SyncStack{accountId, accountName, accountState, syncType}); } linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/dunioniddav.h000066400000000000000000000011261523260663500302300ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUNIONIDDAV_H #define DUNIONIDDAV_H #include "ddatasyncbase.h" /** * @brief The DUnionIDDav class * Union ID 云å�Œæ­¥ */ class DUnionIDDav : public DDataSyncBase { Q_OBJECT public: DUnionIDDav(); ~DUnionIDDav() override; void syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType) override; private: class DUIDSynDataPrivate; DUIDSynDataPrivate *const d; }; #endif // DUNIONIDDAV_H linuxdeepin-dde-calendar-f6d670a/src/calendar-service/src/unionIDDav/dunioniddav_p.h000066400000000000000000000141051523260663500305500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DUNIONIDDAV_P_H #define DUNIONIDDAV_P_H #include "ddatabase.h" #include "ddatasyncbase.h" #include "units.h" #include #include #include #include /** * @brief The SyncStack struct 记录å�•次上传的信æ�¯å’Œç›¸å…³æ“�作 */ struct SyncStack { SyncStack() {} SyncStack(QString _accountId, QString _accountName, int _accountState, DDataSyncBase::SyncTypes _syncType) : accountId(_accountId) , dbname_account(_accountName) , dbname_manager(DDataBase::NameAccountManager) , dbname_account_thread(DDataBase::createUuid()) , dbname_manager_thread(DDataBase::createUuid()) , dbname_sync_thread(DDataBase::createUuid()) , accountState(_accountState) , db_account(QSqlDatabase::database(dbname_account)) , db_manager(QSqlDatabase::database(dbname_manager)) , syncType(_syncType) {} //data QString accountId; //账户ID QString dbname_account; //主线程的账户数æ�®åº“别å�� QString dbname_manager; //主线程的管ç�†æ•°æ�®åº“别å�� QString dbname_account_thread; //å­�线程的账户数æ�®åº“别å�� QString dbname_manager_thread; //å­�线程的管ç�†æ•°æ�®åº“别å�� QString dbname_sync_thread; //å­�线程的å�Œæ­¥æ•°æ�®åº“别å�� int accountState = 0; //账户状æ€� QSqlDatabase db_account; //主线程的账户数æ�®åº“实例 QSqlDatabase db_manager; //主线程的管ç�†æ•°æ�®åº“实例 DDataSyncBase::SyncTypes syncType;//记录类型:上传或下载 //sync QString dbpath_sync; //func //下载云端数æ�® int downloadUidData(bool &isInitSyncData, SyncFileManage &fileManger); //将本地修改数æ�®ç§»åŠ¨åˆ°ä¸‹è½½çš„ä¸´æ—¶æ–‡ä»¶ä¸­ int loadToTmp(); //将临时文件中的数æ�®ç§»åŠ¨åˆ°æœ¬åœ°æ•°æ�®åº“中 int tmpToLoad(DDataSyncBase::UpdateTypes &updateType); //上传修改过的临时数æ�® int uploadTmpData(SyncFileManage &fileManger); void deleteTmpData(SyncFileManage &fileManger); //sql prepare QString prepareQuest(int count); //sql bindvalue void prepareBinds(QSqlQuery &query, QSqlRecord source); //sql sync db1.table to db2.table bool syncIntoTable(const QString &table_name, const QString &connection_name_source, const QString &connection_name_target); //sql select first record QSqlRecord selectRecord(const QString &table_name, const QString &key_name, const QVariant &key_value, const QString &connection_name); //sql replace db1.record to db2.table bool replaceIntoRecord(const QString &table_name, QSqlRecord record, const QString &connection_name); //sql select first value QVariant selectValue(const QString &value_name, const QString &table_name, const QString &key_name, const QVariant &key_value, const QString &connection_name); //sql select first value QVariant selectValue(const QString &sql, const QString &connection_name); //sql delete table bool deleteTableLine(const QString &table_name, const QString &key_name, const QVariant &key_value, const QString &connection_name); //sql delete table bool deleteTable(const QString &table_name, const QString &connection_name); //sql add column to server bool repairTable(const QString &table_name, const QString &connection_name_local, const QString &connection_name_server); bool needUpdateSettingValue(); }; /** * @brief The ThrowAccount struct 用于åˆ�始化日程类型和类型颜色 */ struct SyncAccount { explicit SyncAccount(const QString &connectionName, QString accountID) : _accountID(accountID) , _connectionName(connectionName) { } bool defaultScheduleType(); bool defaultTypeColor(); bool insertToScheduleType(const DScheduleType::Ptr &scheduleType); bool insertToTypeColor(const DTypeColor &typeColor); QString _accountID; QString _connectionName; }; /** * @brief The SqlTransactionLocker class 用于数æ�®åº“事务 */ class SqlTransactionLocker { public: explicit SqlTransactionLocker(const QStringList &connectionNames) : _connectionNames(connectionNames) { for (auto name : _connectionNames) { SqliteQuery(name).transaction(); } } ~SqlTransactionLocker() { if (hasCommited) return; for (auto name : _connectionNames) SqliteQuery(name).rollback(); } void commit() { hasCommited = true; for (auto name : _connectionNames) SqliteQuery(name).commit(); } void rollback() { hasCommited = true; for (auto name : _connectionNames) SqliteQuery(name).rollback(); } private: QStringList _connectionNames; bool hasCommited = false; }; /** * @brief The DUIDSynDataWorker class 用于多线程上传下载 */ class DUIDSynDataWorker : public QObject { Q_OBJECT public: DUIDSynDataWorker() : QObject(nullptr) { } ~DUIDSynDataWorker() { } public slots: void syncData(SyncStack syncType); public slots: void slotSync(); signals: void signalUpdate(const DDataSyncBase::UpdateTypes updateType); void signalSyncState(const int syncState); private: void startUpdate(); private: //sync QString dbpath_sync; QTimer *mSyncTimer = nullptr; //thread SyncStack mSync; QVector mSyncList; }; /** * @brief The DUnionIDDav::DUIDSynDataPrivate class DUIDSynDataçš„ç§�有类 */ class DUnionIDDav::DUIDSynDataPrivate : public QObject { Q_OBJECT public: DUIDSynDataPrivate(); ~DUIDSynDataPrivate(); void syncData(QString accountId, QString accountName, int accountState, DDataSyncBase::SyncTypes syncType); signals: void signalUpdate(const DDataSyncBase::UpdateTypes updateType); void signalSyncState(const int syncState); void signalSyncData(const SyncStack syncType); private: QThread *mThread; }; #endif // DUNIONIDDAV_P_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/000077500000000000000000000000001523260663500226455ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/CMakeLists.txt000066400000000000000000000051131523260663500254050ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) include(qt-version-macros) if(NOT DEFINED VERSION) set(VERSION 1.2.2) endif() # common resource names set(APP_RES_DIR "assets") set(APP_BIN_NAME "uosschedulex-plugin") set(APP_QRC "${APP_RES_DIR}/resources.qrc") project(${APP_BIN_NAME}) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "sw_64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") endif() add_definitions("-DSCHEDULEPLUGIN_LIBRARY") add_definitions("-DQT_DEPRECATED_WARNINGS") # compile flags if(CMAKE_BUILD_TYPE MATCHES Debug) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Wextra") # Enable Qt builtin debug mode add_definitions("-DQT_MESSAGELOGCONTEXT") else() # -Wl, -O2 Enable linker optimizations # -Wl, --gc-sections Remove unused code resulting from -fdsta-sections and # -ffunction-sections set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -Wl,-O1 -Wl,--gc-sections") endif() # 安全编译å�‚æ•° set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") macro(SUBDIRLIST result curdir) file(GLOB children RELATIVE ${curdir} ${curdir}/*) set(dirlist "") foreach(child ${children}) if(IS_DIRECTORY ${curdir}/${child}) LIST(APPEND dirlist ${child}) endif() endforeach() set(${result} ${dirlist}) endmacro() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) SUBDIRLIST(all_src ${CMAKE_CURRENT_SOURCE_DIR}/src) # Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE Schedule_Plugin_SRC ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp) find_package(PkgConfig REQUIRED) find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Widget) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Svg DBus) QT_INCLUDE_GUI_PRIVATE_DIRS() # Tell CMake to create the lib add_library(${PROJECT_NAME} SHARED ${Schedule_Plugin_SRC} ${APP_QRC} src/interface/service.h) target_include_directories(${PROJECT_NAME} PUBLIC ${OBJECT_BINARY_DIR} ../calendar-common/src) target_link_libraries(${PROJECT_NAME} Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::DBus Dtk${DTK_VERSION_MAJOR}::Widget commondata ) # Install files install(TARGETS ${PROJECT_NAME} DESTINATION lib/deepin-aiassistant/serivce-plugins) linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/000077500000000000000000000000001523260663500241475ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources.qrc000066400000000000000000000053241523260663500266740ustar00rootroot00000000000000 resources/DynamicIcon/calendar_bg.svg resources/DynamicIcon/day1.svg resources/DynamicIcon/day2.svg resources/DynamicIcon/day3.svg resources/DynamicIcon/day4.svg resources/DynamicIcon/day5.svg resources/DynamicIcon/day6.svg resources/DynamicIcon/day7.svg resources/DynamicIcon/day8.svg resources/DynamicIcon/day9.svg resources/DynamicIcon/day10.svg resources/DynamicIcon/day11.svg resources/DynamicIcon/day12.svg resources/DynamicIcon/day13.svg resources/DynamicIcon/day14.svg resources/DynamicIcon/day15.svg resources/DynamicIcon/day16.svg resources/DynamicIcon/day17.svg resources/DynamicIcon/day18.svg resources/DynamicIcon/day19.svg resources/DynamicIcon/day20.svg resources/DynamicIcon/day21.svg resources/DynamicIcon/day22.svg resources/DynamicIcon/day23.svg resources/DynamicIcon/day24.svg resources/DynamicIcon/day25.svg resources/DynamicIcon/day26.svg resources/DynamicIcon/day27.svg resources/DynamicIcon/day28.svg resources/DynamicIcon/day29.svg resources/DynamicIcon/day30.svg resources/DynamicIcon/day31.svg resources/DynamicIcon/month1.svg resources/DynamicIcon/month2.svg resources/DynamicIcon/month3.svg resources/DynamicIcon/month4.svg resources/DynamicIcon/month5.svg resources/DynamicIcon/month6.svg resources/DynamicIcon/month7.svg resources/DynamicIcon/month8.svg resources/DynamicIcon/month9.svg resources/DynamicIcon/month10.svg resources/DynamicIcon/month11.svg resources/DynamicIcon/month12.svg resources/DynamicIcon/week1.svg resources/DynamicIcon/week2.svg resources/DynamicIcon/week3.svg resources/DynamicIcon/week4.svg resources/DynamicIcon/week5.svg resources/DynamicIcon/week6.svg resources/DynamicIcon/week7.svg linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/000077500000000000000000000000001523260663500261615ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/000077500000000000000000000000001523260663500303565ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/calendar_bg.svg000066400000000000000000000050401523260663500333170ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day1.svg000066400000000000000000000016271523260663500317430ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day10.svg000066400000000000000000000035761523260663500320300ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day11.svg000066400000000000000000000022031523260663500320130ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day12.svg000066400000000000000000000035601523260663500320230ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day13.svg000066400000000000000000000052501523260663500320220ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day14.svg000066400000000000000000000024701523260663500320240ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day15.svg000066400000000000000000000050551523260663500320270ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day16.svg000066400000000000000000000120511523260663500320220ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day17.svg000066400000000000000000000022561523260663500320310ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day18.svg000066400000000000000000000057751523260663500320430ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day19.svg000066400000000000000000000117071523260663500320340ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day2.svg000066400000000000000000000032621523260663500317410ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day20.svg000066400000000000000000000051461523260663500320240ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day21.svg000066400000000000000000000035631523260663500320260ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day22.svg000066400000000000000000000051421523260663500320220ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day23.svg000066400000000000000000000066141523260663500320300ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day24.svg000066400000000000000000000040651523260663500320270ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day25.svg000066400000000000000000000065111523260663500320260ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day26.svg000066400000000000000000000134361523260663500320330ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day27.svg000066400000000000000000000036651523260663500320370ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day28.svg000066400000000000000000000073441523260663500320360ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day29.svg000066400000000000000000000131771523260663500320400ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day3.svg000066400000000000000000000047641523260663500317520ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day30.svg000066400000000000000000000066571523260663500320350ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day31.svg000066400000000000000000000052721523260663500320260ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day4.svg000066400000000000000000000020001523260663500317300ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day5.svg000066400000000000000000000046251523260663500317500ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day6.svg000066400000000000000000000115761523260663500317540ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day7.svg000066400000000000000000000016521523260663500317470ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day8.svg000066400000000000000000000055111523260663500317460ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/day9.svg000066400000000000000000000114041523260663500317450ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month1.svg000066400000000000000000000022621523260663500323070ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month10.svg000066400000000000000000000022471523260663500323720ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month11.svg000066400000000000000000000023611523260663500323700ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month12.svg000066400000000000000000000027601523260663500323740ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month2.svg000066400000000000000000000023761523260663500323160ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month3.svg000066400000000000000000000035501523260663500323120ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month4.svg000066400000000000000000000032311523260663500323070ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month5.svg000066400000000000000000000032571523260663500323200ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month6.svg000066400000000000000000000026551523260663500323220ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month7.svg000066400000000000000000000021551523260663500323160ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month8.svg000066400000000000000000000033221523260663500323140ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/month9.svg000066400000000000000000000034731523260663500323240ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week1.svg000066400000000000000000000027011523260663500321130ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week2.svg000066400000000000000000000037371523260663500321260ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week3.svg000066400000000000000000000031751523260663500321230ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week4.svg000066400000000000000000000030411523260663500321140ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week5.svg000066400000000000000000000021101523260663500321110ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week6.svg000066400000000000000000000033171523260663500321240ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/assets/resources/DynamicIcon/week7.svg000066400000000000000000000030211523260663500321150ustar00rootroot00000000000000 linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/000077500000000000000000000000001523260663500234345ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/000077500000000000000000000000001523260663500257775ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/accountitem.cpp000066400000000000000000000177521523260663500310320ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountitem.h" AccountItem::AccountItem(const DAccount::Ptr &account, QObject *parent) : QObject(parent) , m_account(account) , m_dbusRequest(new DbusAccountRequest(account->dbusPath(), account->dbusInterface(), this)) { initConnect(); } void AccountItem::initConnect() { connect(m_dbusRequest, &DbusAccountRequest::signalCreateScheduleFinish, this, &AccountItem::signalCreateFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleFinish, this, &AccountItem::signalGetScheduleFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetAccountInfoFinish, this, &AccountItem::slotGetAccountInfoFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleTypeListFinish, this, &AccountItem::slotGetScheduleTypeListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetScheduleListFinish, this, &AccountItem::slotGetScheduleListFinish); connect(m_dbusRequest, &DbusAccountRequest::signalGetSysColorsFinish, this, &AccountItem::slotGetSysColorsFinish); } /** * @brief AccountItem::resetAccount * é‡�新获å�–账户相关数æ�® */ void AccountItem::resetAccount() { m_scheduleTypeList = m_dbusRequest->getScheduleTypeList(); m_typeColorList = m_dbusRequest->getSysColors(); } /** * @brief AccountItem::getAccount * 获å�–账户数æ�® * @return */ DAccount::Ptr AccountItem::getAccount() { return m_account; } //获å�–日程 QMap AccountItem::getScheduleMap() { return m_scheduleMap; } /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ DScheduleType::List AccountItem::getScheduleTypeList() { DScheduleType::List list; for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->privilege() != DScheduleType::None) { list.push_back(p); } } return list; } //æ ¹æ�®ç±»åž‹ID获å�–日程类型 DScheduleType::Ptr AccountItem::getScheduleTypeByID(const QString &typeID) { for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeID() == typeID) { return p; } } return nullptr; } DScheduleType::Ptr AccountItem::getScheduleTypeByName(const QString &typeName) { for (DScheduleType::Ptr p : m_scheduleTypeList) { if (p->typeName() == typeName || p->displayName() == typeName) { return p; } } return nullptr; } DSchedule::Ptr AccountItem::getScheduleByID(const QString &scheduleID) { return m_dbusRequest->getScheduleByID(scheduleID); } DTypeColor::List AccountItem::getColorTypeList() { return m_typeColorList; } /** * @brief AccountItem::updateAccountInfo * 更新账户信æ�¯ * @param callback */ void AccountItem::updateAccountInfo(CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateAccountInfo(m_account); } /** * @brief AccountItem::createJobType * 创建日程类型 * @param typeInfo 日程类型数æ�® * @param callback */ void AccountItem::createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); typeInfo->setPrivilege(DScheduleType::User); m_dbusRequest->createScheduleType(typeInfo); } /** * @brief AccountItem::updateScheduleType * 更新类型信æ�¯ * @param typeInfo 新的日程类型数æ�® * @param callback */ void AccountItem::updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateScheduleType(typeInfo); } /** * @brief AccountItem::deleteScheduleTypeByID * æ ¹æ�®ç±»åž‹ID删除日程类型 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleTypeByID(typeID); } /** * @brief AccountItem::scheduleTypeIsUsed * 类型是å�¦è¢«æ—¥ç¨‹ä½¿ç”¨ * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::scheduleTypeIsUsed(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->scheduleTypeByUsed(typeID); } /** * @brief AccountItem::createSchedule * 创建日程 * @param scheduleInfo 日程数æ�® * @param callback 回调函数 */ QString AccountItem::createSchedule(const DSchedule::Ptr &scheduleInfo) { return m_dbusRequest->createSchedule(scheduleInfo); } /** * @brief AccountItem::updateSchedule * 更新日程 * @param scheduleInfo 新的日程数æ�® * @param callback 回调函数 */ void AccountItem::updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->updateSchedule(scheduleInfo); } /** * @brief AccountItem::deleteScheduleByID * æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param schedule ID日程id * @param callback 回调函数 */ void AccountItem::deleteScheduleByID(const QString &scheduleID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteScheduleByScheduleID(scheduleID); } /** * @brief AccountItem::deleteSchedulesByTypeID * æ ¹æ�®ç±»åž‹ID删除日程 * @param typeID 日程类型id * @param callback 回调函数 */ void AccountItem::deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->deleteSchedulesByScheduleTypeID(typeID); } /** * @brief AccountItem::querySchedulesWithParameter * æ ¹æ�®æŸ¥è¯¢æ�¡ä»¶æŸ¥è¯¢æ•°æ�® * @param params 查询æ�¡ä»¶ * @param callback 回调函数 */ DSchedule::Map AccountItem::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { return m_dbusRequest->querySchedulesWithParameter(params); } /** * @brief AccountItem::monitorScheduleTypeData * 监å�¬æ—¥ç¨‹ç±»åž‹æ•°æ�®å®Œæˆ�事件 * @param callback 回调函数 */ void AccountItem::monitorScheduleTypeData(Func callback) { auto statusIterator = m_dataStatus.find("ScheduleType"); if (statusIterator != m_dataStatus.end() && statusIterator.value()) { callback(); } else { m_dataStatus.insert("ScheduleType", false); } auto iterator = m_callbackMap.find("ScheduleType"); QList funcList; if (iterator == m_callbackMap.end()) { funcList.append(callback); } else { funcList = iterator.value(); } m_callbackMap.insert("ScheduleType", funcList); } /** * @brief AccountItem::slotGetAccountInfoFinish * 获å�–账户信æ�¯å®Œæˆ�事件 * @param account 账户数æ�® */ void AccountItem::slotGetAccountInfoFinish(DAccount::Ptr account) { m_account = account; emit signalAccountDataUpdate(); } /** * @brief AccountItem::slotGetScheduleTypeListFinish * 获å�–日程类型数æ�®å®Œæˆ�事件 * @param scheduleTypeList 日程类型数æ�® */ void AccountItem::slotGetScheduleTypeListFinish(DScheduleType::List scheduleTypeList) { m_scheduleTypeList = scheduleTypeList; m_dataStatus.insert("ScheduleType", true); auto iterator = m_callbackMap.find("ScheduleType"); if (iterator != m_callbackMap.end()) { for (Func func : iterator.value()) { func(); } } emit signalScheduleTypeUpdate(); } /** * @brief AccountItem::slotGetScheduleListFinish * 获å�–日程数æ�®å®Œæˆ�事件 * @param map 日程数æ�® */ void AccountItem::slotGetScheduleListFinish(QMap map) { m_scheduleMap = map; emit signalScheduleUpdate(); } /** * @brief AccountItem::slotSearchScheduleListFinish * æ�œç´¢æ—¥ç¨‹æ•°æ�®å®Œæˆ�事件 * @param map 日程数æ�® */ void AccountItem::slotSearchScheduleListFinish(QMap map) { m_searchedScheduleMap = map; emit signalSearchScheduleUpdate(); } /** * @brief AccountItem::slotGetSysColorsFinish * 获å�–系统颜色完æˆ�事件 */ void AccountItem::slotGetSysColorsFinish(DTypeColor::List typeColorList) { m_typeColorList = typeColorList; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/accountitem.h000066400000000000000000000073411523260663500304700ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTITEM_H #define ACCOUNTITEM_H #include "dbus/dbusaccountrequest.h" #include //å�•项账户信æ�¯ç®¡ç�†ç±» class AccountItem : public QObject { Q_OBJECT public: explicit AccountItem(const DAccount::Ptr &account, QObject *parent = nullptr); typedef std::function Func; typedef QSharedPointer Ptr; void resetAccount(); //获å�–账户数æ�® DAccount::Ptr getAccount(); //获å�–日程 QMap getScheduleMap(); // 获å�–日程类型信æ�¯é›† DScheduleType::List getScheduleTypeList(); //æ ¹æ�®ç±»åž‹ID获å�–日程类型 DScheduleType::Ptr getScheduleTypeByID(const QString &typeID); DScheduleType::Ptr getScheduleTypeByName(const QString &typeName); DSchedule::Ptr getScheduleByID(const QString &scheduleID); //获å�–颜色类型列表 DTypeColor::List getColorTypeList(); //更新账户信æ�¯ void updateAccountInfo(CallbackFunc callback = nullptr); //创建日程类型 void createJobType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //更新类型信æ�¯ void updateScheduleType(const DScheduleType::Ptr &typeInfo, CallbackFunc callback = nullptr); //æ ¹æ�®ç±»åž‹ID删除日程类型 void deleteScheduleTypeByID(const QString &typeID, CallbackFunc callback = nullptr); //类型是å�¦è¢«æ—¥ç¨‹ä½¿ç”¨ void scheduleTypeIsUsed(const QString &typeID, CallbackFunc callback); //创建日程 QString createSchedule(const DSchedule::Ptr &scheduleInfo); //更新日程 void updateSchedule(const DSchedule::Ptr &scheduleInfo, CallbackFunc callback = nullptr); //æ ¹æ�®æ—¥ç¨‹ID删除日程 void deleteScheduleByID(const QString &scheduleID, CallbackFunc callback = nullptr); //æ ¹æ�®ç±»åž‹ID删除日程 void deleteSchedulesByTypeID(const QString &typeID, CallbackFunc callback = nullptr); //æ ¹æ�®æŸ¥è¯¢æ�¡ä»¶æŸ¥è¯¢æ•°æ�® DSchedule::Map querySchedulesWithParameter(const DScheduleQueryPar::Ptr &); //监å�¬æ—¥ç¨‹ç±»åž‹æ•°æ�®å®Œæˆ�事件 void monitorScheduleTypeData(Func callback); signals: void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); void signalCreateFinish(const QString &scheduleID); void signalGetScheduleFinish(const DSchedule::Ptr &); public slots: //获å�–账户信æ�¯å®Œæˆ�事件 void slotGetAccountInfoFinish(DAccount::Ptr); //获å�–日程类型数æ�®å®Œæˆ�事件 void slotGetScheduleTypeListFinish(DScheduleType::List); //获å�–日程数æ�®å®Œæˆ�事件 void slotGetScheduleListFinish(QMap); //æ�œç´¢æ—¥ç¨‹æ•°æ�®å®Œæˆ�事件 void slotSearchScheduleListFinish(QMap); //获å�–系统颜色完æˆ� void slotGetSysColorsFinish(DTypeColor::List); private: void initConnect(); private: DAccount::Ptr m_account; //账户数æ�® DScheduleType::List m_scheduleTypeList; //日程类型数æ�® DTypeColor::List m_typeColorList; //颜色数æ�® DbusAccountRequest *m_dbusRequest = nullptr; //dbus请求实例 //一年的日程信æ�¯ QMap m_scheduleMap {}; //æ�œç´¢çš„æ—¥ç¨‹ä¿¡æ�¯ QMap m_searchedScheduleMap {}; //一年是å�¦å�«æœ‰æ—¥ç¨‹ QMap m_fullInfo {}; //一年的ç�­ä¼‘ä¿¡æ�¯ QMap m_festivalInfo {}; QVector m_searchScheduleInfoVector {}; //回调函数 QMap> m_callbackMap; QMap m_dataStatus; //æ•°æ�®çжæ€� }; #endif // ACCOUNTITEM_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/accountmanager.cpp000066400000000000000000000140261523260663500314750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "accountmanager.h" AccountManager *AccountManager::m_accountManager = nullptr; AccountManager::AccountManager(QObject *parent) : QObject(parent) , m_dbusRequest(new DbusAccountManagerRequest(this)) { initConnect(); m_dbusRequest->clientIsShow(true); } void AccountManager::initConnect() { connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetAccountListFinish, this, &AccountManager::slotGetAccountListFinish); connect(m_dbusRequest, &DbusAccountManagerRequest::signalGetGeneralSettingsFinish, this, &AccountManager::slotGetGeneralSettingsFinish); } AccountManager::~AccountManager() { m_dbusRequest->clientIsShow(false); } AccountManager *AccountManager::getInstance() { static AccountManager m_accountManager; return &m_accountManager; } /** * @brief AccountManager::getAccountList * 获å�–å¸�户列表 * @return å¸�户列表 */ QList AccountManager::getAccountList() { return m_accountItemList; } /** * @brief AccountManager::getLocalAccountItem * 获å�–本地å¸�户 * @return */ AccountItem::Ptr AccountManager::getLocalAccountItem() { return m_localAccountItem; } /** * @brief AccountManager::getUnionAccountItem * 获å�–unionIDå¸�户 * @return */ AccountItem::Ptr AccountManager::getUnionAccountItem() { return m_unionAccountItem; } DScheduleType::Ptr AccountManager::getScheduleTypeByScheduleTypeId(const QString &schduleTypeId) { DScheduleType::Ptr type = nullptr; for (AccountItem::Ptr p : gAccounManager->getAccountList()) { type = p->getScheduleTypeByID(schduleTypeId); if (nullptr != type) { break; } } return type; } AccountItem::Ptr AccountManager::getAccountItemByScheduleTypeId(const QString &schduleTypeId) { DScheduleType::Ptr type = getScheduleTypeByScheduleTypeId(schduleTypeId); return getAccountItemByAccountId(type->accountID()); } AccountItem::Ptr AccountManager::getAccountItemByAccountId(const QString &accountId) { AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccounManager->getAccountList()) { if (p->getAccount()->accountID() == accountId) { account = p; break; } } return account; } AccountItem::Ptr AccountManager::getAccountItemByAccountName(const QString &accountName) { AccountItem::Ptr account = nullptr; for (AccountItem::Ptr p : gAccounManager->getAccountList()) { if (p->getAccount()->accountName() == accountName) { account = p; break; } } return account; } DCalendarGeneralSettings::Ptr AccountManager::getGeneralSettings() { return m_settings; } /** * @brief AccountManager::resetAccount * é‡�ç½®å¸�户信æ�¯ */ void AccountManager::resetAccount() { m_dataInitFinished = false; m_localAccountItem.clear(); m_unionAccountItem.clear(); slotGetAccountListFinish(m_dbusRequest->getAccountList()); } /** * @brief AccountManager::downloadByAccountID * æ ¹æ�®å¸�户ID下拉数æ�® * @param accountID å¸�户id * @param callback 回调函数 */ void AccountManager::downloadByAccountID(const QString &accountID, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->downloadByAccountID(accountID); } /** * @brief AccountManager::uploadNetWorkAccountData * 更新网络å¸�户数æ�® * @param callback 回调函数 */ void AccountManager::uploadNetWorkAccountData(CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->uploadNetWorkAccountData(); } void AccountManager::setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr, CallbackFunc callback) { m_dbusRequest->setCallbackFunc(callback); m_dbusRequest->setCalendarGeneralSettings(ptr); } /** * @brief AccountManager::waitingData * 等待数æ�®èŽ·å�–完æˆ�的事件,若数æ�®å·²èŽ·å�–完æˆ�则直接执行回调函数,若数æ�®è¿˜æ²¡æœ‰èŽ·å�–完æˆ�则将回调函数ä¿�存,待数æ�®èŽ·å�–完æˆ�å�Žæ‰§è¡Œ * @param callback 回调函数 */ void AccountManager::waitingData(Func callback) { if (m_dataInitFinished) { callback(); } else { m_waitingCallList.append(callback); } } /** * @brief AccountManager::execWaitingCall * 执行回调函数 */ void AccountManager::execWaitingCall() { m_dataInitFinished = true; for (Func call : m_waitingCallList) { call(); } //回调函数å�ªæ˜¯ç”¨ä¸€æ¬¡ m_waitingCallList.clear(); } /** * @brief AccountManager::slotGetAccountListFinish * 获å�–å¸�户信æ�¯å®Œæˆ�事件 * @param accountList å¸�户列表 */ void AccountManager::slotGetAccountListFinish(DAccount::List accountList) { for (DAccount::Ptr account : accountList) { if (account->accountType() == DAccount::Account_Local) { m_localAccountItem.reset(new AccountItem(account, this)); m_localAccountItem->resetAccount(); m_accountItemList.append(m_localAccountItem); } if (account->accountType() == DAccount::Account_UnionID) { m_unionAccountItem.reset(new AccountItem(account, this)); m_unionAccountItem->resetAccount(); m_accountItemList.append(m_unionAccountItem); } } for (AccountItem::Ptr p : getAccountList()) { connect(p.data(), &AccountItem::signalScheduleUpdate, this, &AccountManager::signalScheduleUpdate); connect(p.data(), &AccountItem::signalSearchScheduleUpdate, this, &AccountManager::signalSearchScheduleUpdate); connect(p.data(), &AccountItem::signalScheduleTypeUpdate, this, &AccountManager::signalScheduleTypeUpdate); } } /** * @brief AccountManager::slotGetGeneralSettingsFinish * 获å�–通用设置完æˆ�事件 * @param ptr 通用设置数æ�® */ void AccountManager::slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr) { m_settings = ptr; if (!m_dataInitFinished) { execWaitingCall(); } emit signalDataInitFinished(); emit signalGeneralSettingsUpdate(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/accountmanager.h000066400000000000000000000051631523260663500311440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ACCOUNTMANAGER_H #define ACCOUNTMANAGER_H #include "dbus/dbusaccountmanagerrequest.h" #include "accountitem.h" //所有账户管ç�†ç±» class AccountManager : public QObject { Q_OBJECT public: typedef std::function Func; ~AccountManager() override; static AccountManager *getInstance(); QList getAccountList(); AccountItem::Ptr getLocalAccountItem(); AccountItem::Ptr getUnionAccountItem(); DScheduleType::Ptr getScheduleTypeByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByScheduleTypeId(const QString &schduleTypeId); AccountItem::Ptr getAccountItemByAccountId(const QString &accountId); AccountItem::Ptr getAccountItemByAccountName(const QString &accountName); DCalendarGeneralSettings::Ptr getGeneralSettings(); //é‡�新获å�–账户信æ�¯ void resetAccount(); //æ ¹æ�®å¸�户ID下拉数æ�® void downloadByAccountID(const QString &accountID, CallbackFunc callback = nullptr); //更新网络å¸�户数æ�® void uploadNetWorkAccountData(CallbackFunc callback = nullptr); //设置通用设置 void setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr, CallbackFunc callback = nullptr); //等待数æ�®èŽ·å�–完æˆ�的事件 void waitingData(Func callback); signals: void signalDataInitFinished(); void signalAccountUpdate(); void signalGeneralSettingsUpdate(); void signalAccountDataUpdate(); void signalScheduleUpdate(); void signalScheduleTypeUpdate(); void signalSearchScheduleUpdate(); public slots: //获å�–账户信æ�¯å®Œæˆ�事件 void slotGetAccountListFinish(DAccount::List accountList); //获å�–通用设置完æˆ�事件 void slotGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); protected: explicit AccountManager(QObject *parent = nullptr); private: void initConnect(); //è¿�行等待数æ�®å®Œæˆ�的回调函数 void execWaitingCall(); private: static AccountManager *m_accountManager; AccountItem::Ptr m_localAccountItem; AccountItem::Ptr m_unionAccountItem; DCalendarGeneralSettings::Ptr m_settings; QList m_accountItemList; DbusAccountManagerRequest *m_dbusRequest; QList m_waitingCallList; bool m_dataInitFinished = false; }; #define gAccounManager AccountManager::getInstance() #define gLocalAccountItem AccountManager::getLocalAccountItem() #define gUosAccountItem AccountManager::getUosAccountItem() #endif // ACCOUNTMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/dscheduledatamanager.cpp000066400000000000000000000104331523260663500326310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dscheduledatamanager.h" #include "commondef.h" #include "accountmanager.h" DScheduleDataManager *DScheduleDataManager::getInstance() { static DScheduleDataManager scheduleManager; return &scheduleManager; } QString DScheduleDataManager::createSchedule(const DSchedule::Ptr &schedule) { AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(PluginLogger) << "Failed to create schedule: Local account is null"; return QString(); } qCInfo(PluginLogger) << "Creating new schedule with ID:" << schedule->uid() << "Title:" << schedule->summary(); return account->createSchedule(schedule); } DSchedule::Ptr DScheduleDataManager::queryScheduleByScheduleID(const QString &scheduleID) { DSchedule::Ptr schedule; AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(PluginLogger) << "Failed to query schedule: Local account is null"; return nullptr; } qCDebug(PluginLogger) << "Querying schedule with ID:" << scheduleID; return account->getScheduleByID(scheduleID); } bool DScheduleDataManager::deleteScheduleByScheduleID(const QString &scheduleID) { AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(PluginLogger) << "Failed to delete schedule: Local account is null"; return false; } qCInfo(PluginLogger) << "Deleting schedule with ID:" << scheduleID; account->deleteScheduleByID(scheduleID); return true; } bool DScheduleDataManager::updateSchedule(const DSchedule::Ptr &schedule) { AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); if (account.isNull()) { qCWarning(PluginLogger) << "Failed to update schedule: Local account is null"; return false; } qCInfo(PluginLogger) << "Updating schedule with ID:" << schedule->uid() << "Title:" << schedule->summary(); account->updateSchedule(schedule); return true; } bool DScheduleDataManager::isFestivalSchedule(const QString &scheduleTypeID) { return gAccounManager->getLocalAccountItem()->getScheduleTypeByID(scheduleTypeID)->privilege() == DScheduleType::Privilege::None; } DSchedule::Map DScheduleDataManager::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { DSchedule::Map scheduleMap; AccountItem::Ptr account = gAccounManager->getLocalAccountItem(); return account.isNull() ? scheduleMap : account->querySchedulesWithParameter(params); } DSchedule::Map DScheduleDataManager::queryScheduleByRRule(const QDateTime &dtStart, const QDateTime &dtEnd, const DScheduleQueryPar::RRuleType &rrultTyep) { qCDebug(PluginLogger) << "Querying schedules by RRule - Start:" << dtStart << "End:" << dtEnd << "RRuleType:" << rrultTyep; DScheduleQueryPar::Ptr queryPar(new DScheduleQueryPar); queryPar->setDtStart(dtStart); queryPar->setDtEnd(dtEnd); queryPar->setQueryType(DScheduleQueryPar::Query_RRule); queryPar->setRruleType(rrultTyep); return querySchedulesWithParameter(queryPar); } DSchedule::Map DScheduleDataManager::queryScheduleByLimit(const QDateTime &dtStart, const QDateTime &dtEnd, int topNum) { qCDebug(PluginLogger) << "Querying schedules by limit - Start:" << dtStart << "End:" << dtEnd << "Top:" << topNum; DScheduleQueryPar::Ptr queryPar(new DScheduleQueryPar); queryPar->setDtStart(dtStart); queryPar->setDtEnd(dtEnd); queryPar->setQueryType(DScheduleQueryPar::Query_Top); queryPar->setQueryTop(topNum); return querySchedulesWithParameter(queryPar); } DSchedule::Map DScheduleDataManager::queryScheduleBySummary(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &summary) { qCDebug(PluginLogger) << "Querying schedules by summary - Start:" << dtStart << "End:" << dtEnd << "Summary:" << summary; DScheduleQueryPar::Ptr queryPar(new DScheduleQueryPar); queryPar->setDtStart(dtStart); queryPar->setDtEnd(dtEnd); queryPar->setKey(summary); queryPar->setQueryType(DScheduleQueryPar::Query_None); return querySchedulesWithParameter(queryPar); } DScheduleDataManager::DScheduleDataManager() { gAccounManager->resetAccount(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/dscheduledatamanager.h000066400000000000000000000023621523260663500323000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DSCHEDULEDATAMANAGER_H #define DSCHEDULEDATAMANAGER_H #include "dschedule.h" #include "dschedulequerypar.h" #include //日程数æ�®ç®¡ç�†æ¨¡å�— class DScheduleDataManager { public: static DScheduleDataManager *getInstance(); QString createSchedule(const DSchedule::Ptr &schedule); DSchedule::Ptr queryScheduleByScheduleID(const QString &scheduleID); bool deleteScheduleByScheduleID(const QString &scheduleID); bool updateSchedule(const DSchedule::Ptr &schedule); //æ ¹æ�®ç±»åž‹ID判断是å�¦ä¸ºèŠ‚å�‡æ—¥æ—¥ç¨‹ bool isFestivalSchedule(const QString &scheduleTypeID); DSchedule::Map querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms); DSchedule::Map queryScheduleByRRule(const QDateTime &dtStart, const QDateTime &dtEnd, const DScheduleQueryPar::RRuleType &rrultTyep); DSchedule::Map queryScheduleByLimit(const QDateTime &dtStart, const QDateTime &dtEnd, int topNum); DSchedule::Map queryScheduleBySummary(const QDateTime &dtStart, const QDateTime &dtEnd, const QString &summary); private: DScheduleDataManager(); }; #endif // DSCHEDULEDATAMANAGER_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/scheduledatamanage.cpp000066400000000000000000000032651523260663500323100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduledatamanage.h" #include "accountmanager.h" #include "accountmanager.h" #include #include CScheduleDataManage *CScheduleDataManage::m_vscheduleDataManage = new CScheduleDataManage; // CSchedulesColor CScheduleDataManage::getScheduleColorByType(const QString &type) { CSchedulesColor color; DTypeColor colorinfo; DScheduleType::Ptr typePtr = gAccounManager->getScheduleTypeByScheduleTypeId(type); QColor typeColor; if (!typePtr.isNull()) { typeColor = QColor(gAccounManager->getScheduleTypeByScheduleTypeId(type)->typeColor().colorCode()); } color.orginalColor = typeColor; color.normalColor = color.orginalColor; color.normalColor.setAlphaF(0.2); color.pressColor = color.orginalColor; color.pressColor.setAlphaF(0.35); color.hoverColor = color.orginalColor; color.hoverColor.setAlphaF(0.3); color.hightColor = color.orginalColor; color.hightColor.setAlphaF(0.35); return color; } QColor CScheduleDataManage::getSystemActiveColor() { return DGuiApplicationHelper::instance()->applicationPalette().highlight().color(); } QColor CScheduleDataManage::getTextColor() { return DGuiApplicationHelper::instance()->applicationPalette().text().color(); } void CScheduleDataManage::setTheMe(int type) { m_theme = type; } CScheduleDataManage *CScheduleDataManage::getScheduleDataManage() { return m_vscheduleDataManage; } CScheduleDataManage::CScheduleDataManage(QObject *parent) : QObject(parent) { } CScheduleDataManage::~CScheduleDataManage() { } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/calendarData/scheduledatamanage.h000066400000000000000000000022511523260663500317470ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEDATAMANAGE_H #define SCHEDULEDATAMANAGE_H #include "dschedule.h" #include "dscheduletype.h" #include #include #include #include DGUI_USE_NAMESPACE struct CSchedulesColor { QColor normalColor; //正常状æ€�颜色 QColor hoverColor; //鼠标悬浮颜色 QColor pressColor; //鼠标点击颜色 QColor hightColor; //高亮色 QColor orginalColor; //最åˆ�的颜色 }; class CScheduleDataManage : public QObject { Q_OBJECT public: static CScheduleDataManage *getScheduleDataManage(); //æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–颜色信æ�¯ CSchedulesColor getScheduleColorByType(const QString &type); static QColor getSystemActiveColor(); static QColor getTextColor(); void setTheMe(int type = 0); int getTheme() const { return m_theme; } private: CScheduleDataManage(QObject *parent = nullptr); ~CScheduleDataManage(); private: int m_theme = 0; static CScheduleDataManage *m_vscheduleDataManage; }; #endif // SCHEDULEVIEW_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/000077500000000000000000000000001523260663500243455ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/canceljsondata.cpp000066400000000000000000000004541523260663500300250ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "canceljsondata.h" #include #include "../globaldef.h" cancelJsonData::cancelJsonData() : JsonData() { } cancelJsonData::~cancelJsonData() { } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/canceljsondata.h000066400000000000000000000005201523260663500274640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CANCELJSONDATA_H #define CANCELJSONDATA_H #include "jsondata.h" class cancelJsonData : public JsonData { public: cancelJsonData(); ~cancelJsonData() override; }; #endif // CANCELJSONDATA_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/changejsondata.cpp000066400000000000000000000036661523260663500300350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "changejsondata.h" #include "../globaldef.h" #include changejsondata::changejsondata() : JsonData() { } void changejsondata::jsonObjResolve(const QJsonObject &jsobj) { if (jsobj[JSON_NAME] == JSON_FROMDATETIME) { fromDatetimeJsonResolve(jsobj); return; } if (jsobj[JSON_NAME] == JSON_TODATETIME) { toDatetimeJsonResolve(jsobj); return; } if (jsobj[JSON_NAME] == JSON_TOPLACE) { toPlaceJsonResolve(jsobj); return; } } void changejsondata::setDefaultValue() { JsonData::setDefaultValue(); m_fromDateTime.clear(); m_toDateTime.clear(); m_toPlaceStr.clear(); } void changejsondata::fromDatetimeJsonResolve(const QJsonObject &jsobj) { setFromDateTime(suggestDatetimeResolve(jsobj)); } void changejsondata::toDatetimeJsonResolve(const QJsonObject &jsobj) { setToDateTime(suggestDatetimeResolve(jsobj)); } void changejsondata::toPlaceJsonResolve(const QJsonObject &jsobj) { setToPlaceStr(jsobj[JSON_VALUE].toString()); } QString changejsondata::toPlaceStr() const { return m_toPlaceStr; } void changejsondata::setToPlaceStr(const QString &toPlaceStr) { m_toPlaceStr = toPlaceStr; } bool changejsondata::isVaild() const { return this->m_toDateTime.suggestDatetime.size() ==0 && this->m_fromDateTime.suggestDatetime.size()==0 && this->toPlaceStr().isEmpty() && JsonData::isVaild(); } SemanticsDateTime changejsondata::toDateTime() const { return m_toDateTime; } void changejsondata::setToDateTime(const SemanticsDateTime &toDateTime) { m_toDateTime = toDateTime; } SemanticsDateTime changejsondata::fromDateTime() const { return m_fromDateTime; } void changejsondata::setFromDateTime(const SemanticsDateTime &fromDateTime) { m_fromDateTime = fromDateTime; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/changejsondata.h000066400000000000000000000034341523260663500274730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CHANGEJSONDATA_H #define CHANGEJSONDATA_H #include "jsondata.h" class changejsondata : public JsonData { public: changejsondata(); /** * @brief fromDateTime 获å�–语义fromæ—¶é—´æ•°æ�® * @return æ—¶é—´æ•°æ�® */ SemanticsDateTime fromDateTime() const; /** * @brief setFromDateTime 设置语义fromæ—¶é—´æ•°æ�® * @param fromDateTime æ—¶é—´æ•°æ�® */ void setFromDateTime(const SemanticsDateTime &fromDateTime); /** * @brief toDateTime 获å�–语义toDateTimeæ—¶é—´æ•°æ�® * @return æ—¶é—´æ•°æ�® */ SemanticsDateTime toDateTime() const; /** * @brief setToDateTime 设置语义toDateTimeæ—¶é—´æ•°æ�® * @param toDateTime æ—¶é—´æ•°æ�® */ void setToDateTime(const SemanticsDateTime &toDateTime); QString toPlaceStr() const; void setToPlaceStr(const QString &toPlaceStr); /** * @brief isVaild 判断json是å�¦ä¸ºåŽŸå§‹æ•°æ�® * @return true为原始数æ�® */ bool isVaild() const override; private: void jsonObjResolve(const QJsonObject &jsobj) override; void setDefaultValue() override; void fromDatetimeJsonResolve(const QJsonObject &jsobj); void toDatetimeJsonResolve(const QJsonObject &jsobj); void toPlaceJsonResolve(const QJsonObject &jsobj); private: /** * @brief m_fromDateTime 需è¦�修改的时间信æ�¯ */ SemanticsDateTime m_fromDateTime {}; /** * @brief m_toDateTime 修改到的时间信æ�¯ */ SemanticsDateTime m_toDateTime {}; /** * @brief m_toPlaceStr 修改的日常内容 */ QString m_toPlaceStr {}; }; #endif // CHANGEJSONDATA_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/clocaldata.cpp000066400000000000000000000022611523260663500271410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "clocaldata.h" CLocalData::CLocalData() { } DSchedule::List CLocalData::scheduleInfoVector() const { return m_scheduleInfoVector; } void CLocalData::setScheduleInfoVector(const DSchedule::List &scheduleInfoVector) { m_scheduleInfoVector = scheduleInfoVector; } DSchedule::Ptr CLocalData::SelectInfo() const { return m_SelectInfo; } void CLocalData::setSelectInfo(const DSchedule::Ptr &SelectInfo) { m_SelectInfo = SelectInfo; } void CLocalData::setToTitleName(const QString &title) { m_ToTitleName = title; } QString CLocalData::getToTitleName() const { return m_ToTitleName; } void CLocalData::setToTime(const SemanticsDateTime &timeInfo) { m_ToTime = timeInfo; } SemanticsDateTime CLocalData::getToTime() const { return m_ToTime; } int CLocalData::getOffet() const { return m_offset; } void CLocalData::setOffset(int offset) { m_offset = offset; } void CLocalData::setNewInfo(const DSchedule::Ptr &newInfo) { m_NewInfo = newInfo; } DSchedule::Ptr CLocalData::getNewInfo() const { return m_NewInfo; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/clocaldata.h000066400000000000000000000024611523260663500266100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CLOCALDATA_H #define CLOCALDATA_H #include "dschedule.h" #include "timedatastruct.h" #include class CLocalData { public: typedef QSharedPointer Ptr; CLocalData(); DSchedule::List scheduleInfoVector() const; void setScheduleInfoVector(const DSchedule::List &scheduleInfoVector); DSchedule::Ptr SelectInfo() const; void setSelectInfo(const DSchedule::Ptr &SelectInfo); void setToTitleName(const QString &title); QString getToTitleName() const; /** * @brief setToTime 设置修改的日程时间 * @param timeInfo 日程时间 */ void setToTime(const SemanticsDateTime &timeInfo); /** * @brief getToTime 获å�–修改的日程时间 * @return */ SemanticsDateTime getToTime() const; int getOffet() const; void setOffset(int offset); void setNewInfo(const DSchedule::Ptr &newInfo); DSchedule::Ptr getNewInfo() const; private: DSchedule::List m_scheduleInfoVector {}; DSchedule::Ptr m_SelectInfo {}; DSchedule::Ptr m_NewInfo {}; QString m_ToTitleName {""}; SemanticsDateTime m_ToTime {}; int m_offset {-1}; }; #endif // CLOCALDATA_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/createjsondata.cpp000066400000000000000000000005211523260663500300360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "createjsondata.h" #include #include #include #include #include "../globaldef.h" CreateJsonData::CreateJsonData() : JsonData() { } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/createjsondata.h000066400000000000000000000004731523260663500275110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATEJSONDATA_H #define CREATEJSONDATA_H #include "jsondata.h" class CreateJsonData : public JsonData { public: CreateJsonData(); private: }; #endif // CREATEJSONDATA_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/jsondata.cpp000066400000000000000000000256661523260663500266730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "jsondata.h" #include #include #include #include #include "../globaldef.h" JsonData::JsonData() { } JsonData::~JsonData() { } void JsonData::JosnResolve(const QJsonObject &jsObj) { setDefaultValue(); if (jsObj.contains("slots") && jsObj["slots"].isArray()) { auto slotsObjArr = jsObj["slots"].toArray(); for (int j = 0; j < slotsObjArr.size(); ++j) { auto slotsObj = slotsObjArr[j].toObject(); if (slotsObj.contains(JSON_NAME) && slotsObj[JSON_NAME].isString()) { if (slotsObj[JSON_NAME] == JSON_CONTENT) { contentJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_REPEAT) { repeatJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_DATETIME) { datetimeJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_PROPERTY) { propertyJsonResolve(slotsObj); continue; } if (slotsObj[JSON_NAME] == JSON_POSRANK_OFFSET) { posRankOffsetResolve(slotsObj); continue; } //如果存在时间无效槽 则表示输入了无效的时间 if (slotsObj[JSON_NAME] == JSON_DateTimeInvalid) { m_DateTimeInvalid = true; continue; } jsonObjResolve(slotsObj); } } } } QString JsonData::SuggestMsg() const { return m_SuggestMsg; } void JsonData::setSuggestMsg(const QString &SuggestMsg) { m_SuggestMsg = SuggestMsg; } bool JsonData::ShouldEndSession() const { return m_ShouldEndSession; } void JsonData::setShouldEndSession(bool ShouldEndSession) { m_ShouldEndSession = ShouldEndSession; } void JsonData::setRepeatStatus(const JsonData::RepeatStatus &RepeatStatus) { m_RepeatStatus = RepeatStatus; } QString JsonData::TitleName() const { return m_TitleName; } void JsonData::setTitleName(const QString &TitleName) { m_TitleName = TitleName; } void JsonData::setDateTimeStatus(const JsonData::DateTimeStatus &DateTimeStatus) { m_DateTimeStatus = DateTimeStatus; } JsonData::RepeatStatus JsonData::getRepeatStatus() const { return m_RepeatStatus; } QVector JsonData::getRepeatNum() const { return m_RepeatNum; } void JsonData::setRepeatNum(const QVector &RepeatNum) { m_RepeatNum = RepeatNum; } SemanticsDateTime JsonData::getDateTime() const { return m_DateTime; } void JsonData::setDateTime(const SemanticsDateTime &DateTime) { m_DateTime = DateTime; } void JsonData::contentJsonResolve(const QJsonObject &jsobj) { setTitleName(jsobj[JSON_VALUE].toString()); } void JsonData::repeatJsonResolve(const QJsonObject &jsobj) { QString repeatValue = jsobj[JSON_VALUE].toString(); if (repeatValue.contains("EVERYEAR")) { setRepeatStatus(EVEY); return; } if (repeatValue.contains("EVERYDAY")) { setRepeatStatus(EVED); return; } if (repeatValue.contains("WORKDAY")) { setRepeatStatus(WORKD); return; } if (repeatValue.contains("RESTDAY")) { setRepeatStatus(RESTD); return; } if (repeatValue.contains("WEEKEND")) { setRepeatStatus(RESTD); return; } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QRegularExpression rxlen("([W,M])([0-9]{0,2})"); QVector repeatnum {}; repeatnum.clear(); QRegularExpressionMatchIterator it = rxlen.globalMatch(repeatValue); while (it.hasNext()) { QRegularExpressionMatch match = it.next(); if (match.captured(1).contains("M")) { setRepeatStatus(EVEM); } if (match.captured(1).contains("W")) { setRepeatStatus(EVEW); } if (match.captured(0).size() > 0 && match.captured(2) != "") { repeatnum.append(match.captured(2).toInt()); } } #else QRegExp rxlen("([W,M])([0-9]{0,2})"); int pos = 0; QVector repeatnum {}; repeatnum.clear(); while ((pos = rxlen.indexIn(repeatValue, pos)) != -1) { if (rxlen.cap(1).contains("M")) { setRepeatStatus(EVEM); } if (rxlen.cap(1).contains("W")) { setRepeatStatus(EVEW); } if (rxlen.cap(0).size() > 0 && rxlen.cap(2) != "") { repeatnum.append(rxlen.cap(2).toInt()); } pos += rxlen.matchedLength(); } #endif setRepeatNum(repeatnum); } void JsonData::datetimeJsonResolve(const QJsonObject &jsobj) { setDateTime(suggestDatetimeResolve(jsobj)); } void JsonData::propertyJsonResolve(const QJsonObject &jsobj) { QString propertyValue = jsobj[JSON_VALUE].toString(); if (propertyValue == JSON_NEXT) { setPropertyStatus(NEXT); return; } if (propertyValue == JSON_LAST) { setPropertyStatus(LAST); return; } if (propertyValue == JSON_ALL) { setPropertyStatus(ALL); return; } if (propertyValue == JSON_THIS) { setPropertyStatus(PRO_THIS); return; } } void JsonData::posRankOffsetResolve(const QJsonObject &jsobj) { setOffset(jsobj[JSON_VALUE].toString().toInt()); } SemanticsDateTime JsonData::suggestDatetimeResolve(const QJsonObject &jsobj) { SemanticsDateTime semdatetime {}; semdatetime.clear(); QString DateTimeJson = jsobj[JSON_NORMVALUE].toString(); QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(DateTimeJson.toUtf8(), &jsonError); //建议时间 QString sugdateTimeStr{""}; //模糊时间 QString dateTimeStr{""}; if (!doc.isNull() && (jsonError.error == QJsonParseError::NoError)) { auto rootObject = doc.object(); sugdateTimeStr = (rootObject["suggestDatetime"].toString()); dateTimeStr = rootObject["datetime"].toString(); } //建议时间解æž�赋值 if (sugdateTimeStr != "") { if (sugdateTimeStr.contains("/")) { QStringList dateTimeList = sugdateTimeStr.split("/"); for (int i = 0; i < dateTimeList.size(); ++i) { //如果数æ�®ä¸�为空,添加解æž�æ•°æ�® if (!dateTimeList.at(i).isEmpty()) { semdatetime.suggestDatetime.append(resolveNormValue(dateTimeList.at(i))); } } } else { semdatetime.suggestDatetime.append(resolveNormValue(sugdateTimeStr)); } } //模糊时间解æž�赋值 if (!dateTimeStr.isEmpty()) { if (dateTimeStr.contains("/")) { QStringList dateTimeList = dateTimeStr.split("/"); for (int i = 0; i < dateTimeList.size(); ++i) { //如果数æ�®ä¸�为空,添加解æž�æ•°æ�® if (!dateTimeList.at(i).isEmpty()) { semdatetime.dateTime.append(resolveDateTimeValeu(dateTimeList.at(i))); } } } else { semdatetime.dateTime.append(resolveDateTimeValeu(dateTimeStr)); } } return semdatetime; } SuggestDatetimeInfo JsonData::resolveNormValue(const QString &str) { SuggestDatetimeInfo datetimeInfo; datetimeInfo.hasTime = str.contains(JSON_DATETIME_DELIMITER); datetimeInfo.datetime = QDateTime::fromString(str, Qt::ISODate); //设置处ç�†å�Žçš„æ—¥æœŸå­—符 datetimeInfo.strDateTime = strTransform(str); return datetimeInfo; } DateTimeInfo JsonData::resolveDateTimeValeu(const QString &dateTimeStr) { DateTimeInfo dateTimeInfo{}; dateTimeInfo.strDateTime = dateTimeStr; //æ ¹æ�®å…³é”®ç¬¦å�ˆâ€œTâ€�分割字符 QStringList dateList = dateTimeStr.split(JSON_DATETIME_DELIMITER); //如果å�ªæœ‰ä¸€ä¸ªè¡¨ç¤ºæ²¡æœ‰æ—¶é—´ä¿¡æ�¯ if (dateList.size() == 1) { dateTimeInfo.m_Date = QDate::fromString(dateList.at(0), DATEFORMAT); dateTimeInfo.hasDate = true; dateTimeInfo.hasTime = false; } else if (dateList.size() > 1) { //如果第一个数æ�®ä¸ºç©ºè¡¨ç¤ºæ²¡æœ‰æ—¥æœŸä¿¡æ�¯ if (dateList.at(0).isEmpty()) { dateTimeInfo.hasDate = false; } else { dateTimeInfo.m_Date = QDate::fromString(dateList.at(0), DATEFORMAT); dateTimeInfo.hasDate = true; } dateTimeInfo.m_Time = QTime::fromString(dateList.at(1), TIMEFORMAT); dateTimeInfo.hasTime = true; } return dateTimeInfo; } QString JsonData::strTransform(QString oldStr) { QString newStr; //对助手返回的字符进行分割 QStringList dateList = oldStr.split(JSON_DATETIME_DELIMITER); if (dateList.size() == 1) { //å�ªæœ‰æ—¥æœŸ //处ç�†æ—¥æœŸ QString strDate = strDateTransform(dateList.at(0)); //返回字符é�žç©º if (!strDate.isEmpty()) return strDate; } else if (dateList.size() > 1) { //有日期和时间 QString strDate = ""; if (!dateList.at(0).isEmpty()) { //设置日期格å¼� if (!strDateTransform(dateList.at(0)).isEmpty()) strDate = strDateTransform(dateList.at(0)); } //返回日期+具体时间 return strDate + dateList.at(1); } //如果ä¸�包å�«ä»¥ä¸Šæƒ…况,返回空 return ""; } QString JsonData::strDateTransform(QString oldStrDate) { //对日期进行分割 QStringList strDateList = oldStrDate.split(JSON_STR_DATE_DELIMITER); if (strDateList.size() == 1) { //å�ªæœ‰å¹´ä»½ return strDateList.at(0) + YEAR; } else if (strDateList.size() == 2) { //年份+月份 return strDateList.at(0) + YEAR + strDateList.at(1) + MONTH; } else if (strDateList.size() == 3) { //å¹´+月+æ—¥ return strDateList.at(0) + YEAR + strDateList.at(1) + MONTH + strDateList.at(2) + DAY; } //如果没有以上情况,返回空 return ""; } void JsonData::setDefaultValue() { setTitleName(""); setDateTimeStatus(NODATE); setRepeatStatus(NONE); setPropertyStatus(PRO_NONE); m_RepeatNum.clear(); m_DateTime.clear(); setOffset(-1); } void JsonData::jsonObjResolve(const QJsonObject &jsobj) { Q_UNUSED(jsobj); } bool JsonData::getDateTimeInvalid() const { return m_DateTimeInvalid; } JsonData::PropertyStatus JsonData::getPropertyStatus() const { return m_propertyStatus; } void JsonData::setPropertyStatus(const PropertyStatus &propertyStatus) { m_propertyStatus = propertyStatus; } int JsonData::offset() const { return m_offset; } void JsonData::setOffset(int offset) { m_offset = offset; } bool JsonData::isVaild() const { return TitleName() == "" && getDateTime().suggestDatetime.size() == 0 && m_offset == -1 && m_RepeatStatus == NONE && m_propertyStatus == PRO_NONE; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/jsondata.h000066400000000000000000000070311523260663500263220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef JSONDATA_H #define JSONDATA_H #include #include #include "timedatastruct.h" class QJsonObject; class JsonData { public: enum RepeatStatus { NONE, EVED, EVEW, EVEM, EVEY, WORKD, RESTD }; enum DateTimeStatus { NODATE, NOTIME, ALLHAS }; enum PropertyStatus { PRO_NONE, NEXT, LAST, ALL, PRO_THIS }; public: JsonData(); virtual ~JsonData(); void JosnResolve(const QJsonObject &jsObj); QString SuggestMsg() const; void setSuggestMsg(const QString &SuggestMsg); bool ShouldEndSession() const; void setShouldEndSession(bool ShouldEndSession); void setRepeatStatus(const RepeatStatus &RepeatStatus); QString TitleName() const; void setTitleName(const QString &TitleName); void setDateTimeStatus(const DateTimeStatus &DateTimeStatus); RepeatStatus getRepeatStatus() const; QVector getRepeatNum() const; void setRepeatNum(const QVector &RepeatNum); SemanticsDateTime getDateTime() const; void setDateTime(const SemanticsDateTime &DateTime); PropertyStatus getPropertyStatus() const; void setPropertyStatus(const PropertyStatus &propertyStatus); int offset() const; void setOffset(int offset); /** * @brief isVaild 判断json是å�¦ä¸ºåŽŸå§‹æ•°æ�® * @return true为原始数æ�® */ virtual bool isVaild() const; //获å�–时间有效性 bool getDateTimeInvalid() const; protected: void contentJsonResolve(const QJsonObject &jsobj); void repeatJsonResolve(const QJsonObject &jsobj); /** * @brief datetimeJsonResolve 时间关键字解æž� * @param jsobj json对象 */ void datetimeJsonResolve(const QJsonObject &jsobj); void propertyJsonResolve(const QJsonObject &jsobj); /** * @brief posRankOffsetResolve å��移关键字解æž� * @param jsobj json对象 */ void posRankOffsetResolve(const QJsonObject &jsobj); SemanticsDateTime suggestDatetimeResolve(const QJsonObject &jsobj); /** * @brief resolveNormValue è§£æž�建议时间数æ�® * @param str stringæ ¼å¼�的建议时间 * @return 建议时间 */ SuggestDatetimeInfo resolveNormValue(const QString &str); /** * @brief resolveDateTimeValeu è§£æž�模糊时间数æ�® * @param dateTimeStr stringæ ¼å¼�的模糊时间 * @return 模糊时间 */ DateTimeInfo resolveDateTimeValeu(const QString &dateTimeStr); //修改助手返回日期和时间字符格å¼� QString strTransform(QString oldStr); //修改助手返回日期的字符格å¼� QString strDateTransform(QString oldStrDate); virtual void setDefaultValue(); virtual void jsonObjResolve(const QJsonObject &jsobj); private: QString m_SuggestMsg {""}; bool m_ShouldEndSession {false}; RepeatStatus m_RepeatStatus {NONE}; QVector m_RepeatNum {}; DateTimeStatus m_DateTimeStatus {NODATE}; PropertyStatus m_propertyStatus {PRO_NONE}; QString m_TitleName {""}; SemanticsDateTime m_DateTime {}; int m_offset {-1}; bool m_DateTimeInvalid {false}; }; #endif // JSONDATA_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/queryjsondata.cpp000066400000000000000000000005161523260663500277440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryjsondata.h" #include #include #include #include #include "../globaldef.h" QueryJsonData::QueryJsonData() : JsonData() { } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/queryjsondata.h000066400000000000000000000004541523260663500274120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYJSONDATA_H #define QUERYJSONDATA_H #include "jsondata.h" class QueryJsonData : public JsonData { public: QueryJsonData(); }; #endif // QUERYJSONDATA_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/data/timedatastruct.h000066400000000000000000000024741523260663500275620ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TIMEDATASTRUCT_H #define TIMEDATASTRUCT_H #include #include /** * @brief The ToDateTimeInfo struct 修改时间信æ�¯ * m_Date 日期信æ�¯ * m_Time æ—¶é—´ä¿¡æ�¯ * hasDate 是å�¦å­˜åœ¨æ—¥æœŸä¿¡æ�¯ * hasTime 是å�¦å­˜åœ¨æ—¶é—´ä¿¡æ�¯ */ struct DateTimeInfo { QDate m_Date{}; QTime m_Time{}; bool hasDate{false}; bool hasTime{false}; QString strDateTime; //ä¿�存原始数æ�® }; /** * @brief The SuggestDatetimeInfo struct 建议时间信æ�¯ * datetime æ—¶é—´ä¿¡æ�¯ * hasTime 是å�¦å­˜åœ¨å…·ä½“时间点 */ struct SuggestDatetimeInfo { QDateTime datetime {}; bool hasTime {false}; QString strDateTime; //ä¿�存原始数æ�® }; /** * @brief The ScheduleDateTime struct 语言时间信æ�¯ * m_DateTime æ—¶é—´ä¿¡æ�¯ï¼ŒèŽ·å�–时间点的时候需è¦�用到 * m_sugTime 建议使用的时间信æ�¯ */ struct SemanticsDateTime { QVector dateTime{}; QVector suggestDatetime{}; /** * @brief clear 清空数æ�® */ void clear() { this->dateTime.clear(); this->suggestDatetime.clear(); } }; #endif // TIMEDATASTRUCT_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/000077500000000000000000000000001523260663500243715ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/cdbuspendingcallwatcher.cpp000066400000000000000000000020461523260663500317560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cdbuspendingcallwatcher.h" CDBusPendingCallWatcher::CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent) : QDBusPendingCallWatcher(call, parent) , m_member(member) { connect(this, &QDBusPendingCallWatcher::finished, this, [this]() { //转å�‘调用完æˆ�事件 emit this->signalCallFinished(this); }); } /** * @brief CDBusPendingCallWatcher::setCallbackFunc * 设置回调函数 * @param func 回调函数 */ void CDBusPendingCallWatcher::setCallbackFunc(CallbackFunc func) { m_func = func; } /** * @brief CDBusPendingCallWatcher::getCallbackFunc * 获å�–回调函数 * @return 回调函数 */ CallbackFunc CDBusPendingCallWatcher::getCallbackFunc() { return m_func; } /** * @brief CDBusPendingCallWatcher::getmember * 设置调用方法å�� * @return 方法å�� */ QString CDBusPendingCallWatcher::getmember() { return m_member; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/cdbuspendingcallwatcher.h000066400000000000000000000024051523260663500314220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CDBUSPENDINGCALLWATCHER_H #define CDBUSPENDINGCALLWATCHER_H #include /** * @brief The CallMessge struct * dbus请求回调数æ�® */ struct CallMessge { int code; //返回ç �,0:请求æˆ�功,大于0:请求失败 QString msg; //返回ç �说明,根æ�®å®žé™…需求å�¯è¿”回任æ„�字符串 }; /** * @brief CallbackFunc * dbus请求回调函数类型 */ typedef std::function CallbackFunc; //继承QDbus回调观察者,将部分自定义的数æ�®åŒ…装在回调类中 class CDBusPendingCallWatcher : public QDBusPendingCallWatcher { Q_OBJECT public: explicit CDBusPendingCallWatcher(const QDBusPendingCall &call, QString member, QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); //获å�–回调函数 CallbackFunc getCallbackFunc(); //设置调用方法å�� QString getmember(); signals: void signalCallFinished(CDBusPendingCallWatcher *); public slots: private: QString m_member; //调用的dbus方法å�� CallbackFunc m_func = nullptr; //回调函数指针 }; #endif // CDBUSPENDINGCALLWATCHER_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbusaccountmanagerrequest.cpp000066400000000000000000000114041523260663500323530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountmanagerrequest.h" #include "commondef.h" #include DbusAccountManagerRequest::DbusAccountManagerRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/AccountManager", "com.deepin.dataserver.Calendar.AccountManager", QDBusConnection::sessionBus(), parent) { } /** * @brief DbusAccountManagerRequest::getAccountList * 请求å¸�户列表 */ DAccount::List DbusAccountManagerRequest::getAccountList() { DAccount::List accountList; QList argumentList; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getAccountList"), argumentList); pCall.waitForFinished(); QDBusPendingReply reply = pCall.reply(); //获å�–返回值 QString str = reply.argumentAt<0>(); //è§£æž�字符串 DAccount::fromJsonListString(accountList, str); return accountList; } /** * @brief DbusAccountManagerRequest::downloadByAccountID * æ ¹æ�®å¸�户id下拉数æ�® * @param accountID å¸�户id */ void DbusAccountManagerRequest::downloadByAccountID(const QString &accountID) { qCInfo(PluginLogger) << "Requesting download for account ID:" << accountID; QList argumentList; argumentList << QVariant(accountID); asyncCall("downloadByAccountID", argumentList); } /** * @brief DbusAccountManagerRequest::uploadNetWorkAccountData * 更新网络å¸�户数æ�® */ void DbusAccountManagerRequest::uploadNetWorkAccountData() { asyncCall("uploadNetWorkAccountData"); } /** * @brief DbusAccountManagerRequest::getCalendarGeneralSettings * 获å�–通用设置 */ void DbusAccountManagerRequest::getCalendarGeneralSettings() { asyncCall("getCalendarGeneralSettings"); } /** * @brief DbusAccountManagerRequest::setCalendarGeneralSettings * 设置通用设置 * @param ptr 通用设置 */ void DbusAccountManagerRequest::setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr) { QString jsonStr; DCalendarGeneralSettings::toJsonString(ptr, jsonStr); asyncCall("setCalendarGeneralSettings", {QVariant(jsonStr)}); } void DbusAccountManagerRequest::clientIsShow(bool isShow) { QList argumentList; argumentList << isShow; //ä¸�需è¦�返回结果,å�‘é€�完直接结æ�Ÿ callWithArgumentList(QDBus::NoBlock, QStringLiteral("calendarIsShow"), argumentList); } /** * @brief DbusAccountManagerRequest::slotCallFinished * dbus调用完æˆ�事件 * @param call 回调类 */ void DbusAccountManagerRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; //错误处ç�† if (call->isError()) { //打å�°é”™è¯¯ä¿¡æ�¯ qCWarning(PluginLogger) << "DBus call failed - Method:" << call->reply().member() << "Error:" << call->error().message(); ret = 1; } else if (call->getmember() == "getAccountList") { //"getAccountList"方法回调事件 QDBusPendingReply reply = *call; //获å�–返回值 QString str = reply.argumentAt<0>(); DAccount::List accountList; //è§£æž�字符串 if (DAccount::fromJsonListString(accountList, str)) { qCDebug(PluginLogger) << "Successfully processed account list with" << accountList.size() << "accounts"; emit signalGetAccountListFinish(accountList); } else { qCWarning(PluginLogger) << "Failed to parse account list from JSON response"; ret = 2; } } else if (call->getmember() == "getCalendarGeneralSettings") { qCDebug(PluginLogger) << "Processing calendar general settings response"; QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); DCalendarGeneralSettings::Ptr ptr; ptr.reset(new DCalendarGeneralSettings()); if (DCalendarGeneralSettings::fromJsonString(ptr, str)) { qCDebug(PluginLogger) << "Successfully parsed calendar general settings"; emit signalGetGeneralSettingsFinish(ptr); } else { qCWarning(PluginLogger) << "Failed to parse calendar general settings from JSON"; ret = 2; } } else if (call->getmember() == "setCalendarGeneralSettings") { qCDebug(PluginLogger) << "Calendar settings updated, refreshing general settings"; canCall = false; setCallbackFunc(call->getCallbackFunc()); getCalendarGeneralSettings(); } //执行回调函数 if (canCall && call->getCallbackFunc() != nullptr) { qCDebug(PluginLogger) << "Executing callback for method:" << call->getmember() << "with ret:" << ret; call->getCallbackFunc()({ret, ""}); } //释放内存 call->deleteLater(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbusaccountmanagerrequest.h000066400000000000000000000023711523260663500320230ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTMANAGERREQUEST_H #define DBUSACCOUNTMANAGERREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dcalendargeneralsettings.h" //所有账户信æ�¯ç®¡ç�†ç±» class DbusAccountManagerRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountManagerRequest(QObject *parent = nullptr); //获å�–账户列表 DAccount::List getAccountList(); //æ ¹æ�®è´¦æˆ·id下拉数æ�® void downloadByAccountID(const QString &accountID); //更新网络账户数æ�® void uploadNetWorkAccountData(); //获å�–通用设置 void getCalendarGeneralSettings(); //设置通用设置 void setCalendarGeneralSettings(DCalendarGeneralSettings::Ptr ptr); // void clientIsShow(bool isShow); signals: //获å�–账户列表数æ�®å®Œæˆ�ä¿¡å�· void signalGetAccountListFinish(DAccount::List accountList); //获å�–通用设置完æˆ�ä¿¡å�· void signalGetGeneralSettingsFinish(DCalendarGeneralSettings::Ptr ptr); public slots: //dbus调用完æˆ�事件 void slotCallFinished(CDBusPendingCallWatcher *) override; }; #endif // DBUSACCOUNTMANAGERREQUEST_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbusaccountrequest.cpp000066400000000000000000000303551523260663500310260ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusaccountrequest.h" #include "commondef.h" #include DbusAccountRequest::DbusAccountRequest(const QString &path, const QString &interface, QObject *parent) : DbusRequestBase(path, interface, QDBusConnection::sessionBus(), parent) { } /** * @brief getAccountInfo 获å�–å¸�户信æ�¯ * @return */ void DbusAccountRequest::getAccountInfo() { asyncCall("getAccountInfo"); } void DbusAccountRequest::updateAccountInfo(const DAccount::Ptr &account) { QString jsonStr; DAccount::toJsonString(account, jsonStr); asyncCall("updateAccountInfo", {QVariant(jsonStr)}); } /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ DScheduleType::List DbusAccountRequest::getScheduleTypeList() { qCDebug(PluginLogger) << "Requesting schedule type list"; DScheduleType::List typeList; QList argumentList; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getScheduleTypeList"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(PluginLogger) << "Failed to get schedule type list:" << reply.errorMessage(); return typeList; } QDBusReply scheduleReply = reply; DScheduleType::fromJsonListString(typeList, scheduleReply.value()); return typeList; } /** * @brief getScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–日程类型信æ�¯ * @param typeID 日程类型ID * @return */ void DbusAccountRequest::getScheduleTypeByID(const QString &typeID) { qCDebug(PluginLogger) << "Requesting schedule type by ID:" << typeID; asyncCall("getScheduleTypeByID", {QVariant(typeID)}); } /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信æ�¯ * @return 日程类型ID */ void DbusAccountRequest::createScheduleType(const DScheduleType::Ptr &typeInfo) { qCInfo(PluginLogger) << "Creating new schedule type:" << typeInfo->typeName(); QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("createScheduleType", {QVariant(jsonStr)}); } /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void DbusAccountRequest::updateScheduleType(const DScheduleType::Ptr &typeInfo) { qCInfo(PluginLogger) << "Updating schedule type:" << typeInfo->typeName() << "ID:" << typeInfo->typeID(); QString jsonStr; DScheduleType::toJsonString(typeInfo, jsonStr); asyncCall("updateScheduleType", {QVariant(jsonStr)}); } /** * @brief deleteScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程类型 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void DbusAccountRequest::deleteScheduleTypeByID(const QString &typeID) { qCInfo(PluginLogger) << "Deleting schedule type with ID:" << typeID; QList argumentList; asyncCall("deleteScheduleTypeByID", {QVariant(typeID)}); } /** * @brief scheduleTypeByUsed 日程类型是å�¦è¢«ä½¿ç”¨ * @param typeID 日程类型ID * @return */ void DbusAccountRequest::scheduleTypeByUsed(const QString &typeID) { qCDebug(PluginLogger) << "Checking if schedule type is in use:" << typeID; asyncCall("scheduleTypeByUsed", {QVariant(typeID)}); } /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信æ�¯ * @return 返回日程ID */ QString DbusAccountRequest::createSchedule(const DSchedule::Ptr &scheduleInfo) { qCInfo(PluginLogger) << "Creating new schedule:" << scheduleInfo->summary(); QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); QList argumentList; argumentList << QVariant::fromValue(jsonStr); QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("createSchedule"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(PluginLogger) << "Failed to create schedule:" << reply.errorMessage(); return nullptr; } QDBusReply scheduleReply = reply; return scheduleReply.value(); } /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void DbusAccountRequest::updateSchedule(const DSchedule::Ptr &scheduleInfo) { qCInfo(PluginLogger) << "Updating schedule:" << scheduleInfo->summary() << "ID:" << scheduleInfo->uid(); QString jsonStr; DSchedule::toJsonString(scheduleInfo, jsonStr); asyncCall("updateSchedule", {QVariant(jsonStr)}); } DSchedule::Ptr DbusAccountRequest::getScheduleByID(const QString &scheduleID) { qCDebug(PluginLogger) << "Requesting schedule by ID:" << scheduleID; QList argumentList; argumentList << QVariant::fromValue(scheduleID); QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getScheduleByScheduleID"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(PluginLogger) << "Failed to get schedule by ID:" << reply.errorMessage(); return nullptr; } QDBusReply scheduleReply = reply; QString scheduleStr = scheduleReply.value(); DSchedule::Ptr schedule; DSchedule::fromJsonString(schedule, scheduleStr); return schedule; } /** * @brief deleteScheduleByScheduleID æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param ScheduleID 日程ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void DbusAccountRequest::deleteScheduleByScheduleID(const QString &scheduleID) { qCInfo(PluginLogger) << "Deleting schedule with ID:" << scheduleID; QList argumentList; asyncCall("deleteScheduleByScheduleID", {QVariant(scheduleID)}); } /** * @brief deleteSchedulesByScheduleTypeID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void DbusAccountRequest::deleteSchedulesByScheduleTypeID(const QString &typeID) { qCInfo(PluginLogger) << "Deleting all schedules for type ID:" << typeID; QList argumentList; asyncCall("deleteSchedulesByScheduleTypeID", {QVariant(typeID)}); } /** * @brief querySchedulesWithParameter æ ¹æ�®æŸ¥è¯¢å�‚数查询日程 * @param params 具体的查询å�‚æ•° * @return 查询到的日程集 */ DSchedule::Map DbusAccountRequest::querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms) { DSchedule::Map scheduleMap; QList argumentList; QString jsonStr = DScheduleQueryPar::toJsonString(params); argumentList << jsonStr; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("querySchedulesWithParameter"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(PluginLogger) << "Failed to query schedules:" << reply.errorMessage(); return scheduleMap; } QDBusReply scheduleReply = reply; scheduleMap = DSchedule::fromMapString(scheduleReply.value()); qCDebug(PluginLogger) << "Successfully queried" << scheduleMap.size() << "schedule dates"; return scheduleMap; } DTypeColor::List DbusAccountRequest::getSysColors() { qCDebug(PluginLogger) << "Requesting system colors"; DTypeColor::List colorList; QList argumentList; QDBusPendingCall pCall = asyncCallWithArgumentList(QStringLiteral("getSysColors"), argumentList); pCall.waitForFinished(); QDBusMessage reply = pCall.reply(); if (reply.type() != QDBusMessage::ReplyMessage) { qCWarning(PluginLogger) << "Failed to get system colors:" << reply.errorMessage(); return colorList; } QDBusReply scheduleReply = reply; colorList = DTypeColor::fromJsonString(scheduleReply.value()); qCDebug(PluginLogger) << "Successfully retrieved" << colorList.size() << "system colors"; return colorList; } void DbusAccountRequest::slotCallFinished(CDBusPendingCallWatcher *call) { int ret = 0; bool canCall = true; QString msg = ""; if (call->isError()) { qCWarning(PluginLogger) << "DBus call failed - Method:" << call->reply().member() << "Error:" << call->error().message(); ret = 1; } else { QDBusPendingReply reply = *call; QVariant str = reply.argumentAt<0>(); if (call->getmember() == "getAccountInfo") { DAccount::Ptr ptr; ptr.reset(new DAccount()); if (DAccount::fromJsonString(ptr, str.toString())) { qCDebug(PluginLogger) << "Successfully processed account info for:" << ptr->accountName(); emit signalGetAccountInfoFinish(ptr); } else { qCWarning(PluginLogger) << "Failed to parse account info from JSON"; ret = 2; } } else if (call->getmember() == "getScheduleTypeList") { DScheduleType::List stList; if (DScheduleType::fromJsonListString(stList, str.toString())) { qCDebug(PluginLogger) << "Successfully processed" << stList.size() << "schedule types"; emit signalGetScheduleTypeListFinish(stList); } else { qCWarning(PluginLogger) << "Failed to parse schedule type list from JSON"; ret = 2; } } else if (call->getmember() == "querySchedulesWithParameter") { QMap map = DSchedule::fromMapString(str.toString()); qCDebug(PluginLogger) << "Successfully processed schedule query with" << map.size() << "dates"; emit signalGetScheduleListFinish(map); } else if (call->getmember() == "searchSchedulesWithParameter") { QMap map = DSchedule::fromMapString(str.toString()); qCDebug(PluginLogger) << "Successfully processed schedule search with" << map.size() << "dates"; emit signalSearchScheduleListFinish(map); } else if (call->getmember() == "getSysColors") { DTypeColor::List list = DTypeColor::fromJsonString(str.toString()); qCDebug(PluginLogger) << "Successfully processed" << list.size() << "system colors"; emit signalGetSysColorsFinish(list); } else if (call->getmember() == "createScheduleType") { qCDebug(PluginLogger) << "Schedule type created, refreshing type list"; canCall = false; //在å�‘èµ·æ•°æ�®èŽ·å�–刷新数æ�®ï¼Œå¹¶å°†æœ¬å›žè°ƒå‡½æ•°å’Œæ•°æ�®ä¼ åˆ°ä¸‹ä¸€ä¸ªäº‹ä»¶ä¸­ CallbackFunc func = call->getCallbackFunc(); setCallbackFunc([=](CallMessge) { func({0, str.toString()}); }); getScheduleTypeList(); } else if (call->getmember() == "createSchedule") { qCDebug(PluginLogger) << "Schedule created, refreshing schedule list"; setCallbackFunc(call->getCallbackFunc()); querySchedulesWithParameter(m_priParams); msg = str.toString(); } else if (call->getmember() == "deleteScheduleByScheduleID") { qCDebug(PluginLogger) << "Schedule deleted, refreshing schedule list"; canCall = false; //é‡�新读å�–日程数æ�® setCallbackFunc(call->getCallbackFunc()); querySchedulesWithParameter(m_priParams); } else if (call->getmember() == "getScheduleByID") { DSchedule::Ptr schedule(new DSchedule); DSchedule::fromJsonString(schedule, str.toString()); emit signalGetScheduleFinish(schedule); } if (canCall && call->getCallbackFunc() != nullptr) { qCDebug(PluginLogger) << "Executing callback for method:" << call->getmember() << "with ret:" << ret; call->getCallbackFunc()({ret, msg}); } } call->deleteLater(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbusaccountrequest.h000066400000000000000000000103131523260663500304630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSACCOUNTREQUEST_H #define DBUSACCOUNTREQUEST_H #include "dbusrequestbase.h" #include "daccount.h" #include "dschedule.h" #include "dscheduletype.h" #include "dtypecolor.h" #include "dschedulequerypar.h" //å�•项账户信æ�¯è¯·æ±‚ç±» class DbusAccountRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusAccountRequest(const QString &path, const QString &interface, QObject *parent = nullptr); /** * @brief getAccountInfo 获å�–å¸�户信æ�¯ * @return */ void getAccountInfo(); /** * @brief updateAccountInfo æ›´æ–°å¸�户信æ�¯ * @param accountInfo å¸�户信æ�¯ */ void updateAccountInfo(const DAccount::Ptr &accountInfo); /** * @brief getScheduleTypeList 获å�–日程类型信æ�¯é›† * @return */ DScheduleType::List getScheduleTypeList(); /** * @brief getScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID获å�–日程类型信æ�¯ * @param typeID 日程类型ID * @return */ void getScheduleTypeByID(const QString &typeID); /** * @brief createScheduleType 创建日程类型 * @param typeInfo 类型信æ�¯ * @return 日程类型ID */ void createScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief updateScheduleType 更新日程类型 * @param typeInfo 类型信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void updateScheduleType(const DScheduleType::Ptr &typeInfo); /** * @brief deleteScheduleTypeByID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程类型 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void deleteScheduleTypeByID(const QString &typeID); /** * @brief scheduleTypeByUsed 日程类型是å�¦è¢«ä½¿ç”¨ * @param typeID 日程类型ID * @return */ void scheduleTypeByUsed(const QString &typeID); /** * @brief createSchedule 创建日程 * @param ScheduleInfo 日程信æ�¯ * @return 返回日程ID */ QString createSchedule(const DSchedule::Ptr &scheduleInfo); /** * @brief updateSchedule 更新日程 * @param ScheduleInfo 日程信æ�¯ * @return 是å�¦æˆ�功,true:æ›´æ–°æˆ�功 */ void updateSchedule(const DSchedule::Ptr &scheduleInfo); DSchedule::Ptr getScheduleByID(const QString &scheduleID); /** * @brief deleteScheduleByScheduleID æ ¹æ�®æ—¥ç¨‹ID删除日程 * @param ScheduleID 日程ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void deleteScheduleByScheduleID(const QString &scheduleID); /** * @brief deleteSchedulesByScheduleTypeID æ ¹æ�®æ—¥ç¨‹ç±»åž‹ID删除日程 * @param typeID 日程类型ID * @return 是å�¦æˆ�功,true:删除æˆ�功 */ void deleteSchedulesByScheduleTypeID(const QString &typeID); /** * @brief querySchedulesWithParameter æ ¹æ�®æŸ¥è¯¢å�‚数查询日程 * @param params 具体的查询å�‚æ•° * @return 查询到的日程集 */ DSchedule::Map querySchedulesWithParameter(const DScheduleQueryPar::Ptr ¶ms); DTypeColor::List getSysColors(); signals: void signalCreateScheduleFinish(const QString &scheduleID); void signalGetAccountInfoFinish(DAccount::Ptr); void signalGetScheduleFinish(const DSchedule::Ptr &); void signalGetScheduleTypeListFinish(DScheduleType::List); void signalGetScheduleListFinish(QMap); void signalSearchScheduleListFinish(QMap); void signalGetSysColorsFinish(DTypeColor::List); public slots: void slotCallFinished(CDBusPendingCallWatcher *) override; private: DScheduleQueryPar::Ptr m_priParams; //上一次查询日程的数æ�® }; #endif // DBUSACCOUNTREQUEST_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbushuanglirequest.cpp000066400000000000000000000043421523260663500310160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbushuanglirequest.h" #include "commondef.h" #include DbusHuangLiRequest::DbusHuangLiRequest(QObject *parent) : DbusRequestBase("/com/deepin/dataserver/Calendar/HuangLi", "com.deepin.dataserver.Calendar.HuangLi", QDBusConnection::sessionBus(), parent) { } /** * @brief DbusHuangLiRequest::getFestivalMonth * 按月获å�–节å�‡æ—¥ä¿¡æ�¯ * @param year * @param month */ void DbusHuangLiRequest::getFestivalMonth(quint32 year, quint32 month) { asyncCall("getFestivalMonth", {QVariant(year), QVariant(month)}); } /** * @brief DbusHuangLiRequest::getHuangLiDay * 按天获å�–黄历信æ�¯ * @param year * @param month * @param day */ void DbusHuangLiRequest::getHuangLiDay(quint32 year, quint32 month, quint32 day) { asyncCall("getHuangLiDay", {QVariant(year), QVariant(month), QVariant(day)}); } /** * @brief DbusHuangLiRequest::getHuangLiMonth * 按月获å�–黄历信æ�¯ * @param year * @param month * @param fill */ void DbusHuangLiRequest::getHuangLiMonth(quint32 year, quint32 month, bool fill) { asyncCall("getHuangLiMonth", {QVariant(year), QVariant(month), QVariant(fill)}); } /** * @brief DbusHuangLiRequest::getLunarInfoBySolar * 获å�–农历信æ�¯ * @param year * @param month * @param day */ void DbusHuangLiRequest::getLunarInfoBySolar(quint32 year, quint32 month, quint32 day) { asyncCall("getLunarInfoBySolar", {QVariant(year), QVariant(month), QVariant(day)}); } /** * @brief DbusHuangLiRequest::getLunarMonthCalendar * 获å�–农历月日程 * @param year * @param month * @param fill */ void DbusHuangLiRequest::getLunarMonthCalendar(quint32 year, quint32 month, bool fill) { asyncCall("getLunarMonthCalendar", {QVariant(year), QVariant(month), QVariant(fill)}); } void DbusHuangLiRequest::slotCallFinished(CDBusPendingCallWatcher *call) { if (call->isError()) { qCWarning(PluginLogger) << call->reply().member() << call->error().message(); return; } if (call->getmember() == "getFestivalMonth") { QDBusPendingReply reply = *call; QString str = reply.argumentAt<0>(); } call->deleteLater(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbushuanglirequest.h000066400000000000000000000017241523260663500304640ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSHUANGLIREQUEST_H #define DBUSHUANGLIREQUEST_H #include "dbusrequestbase.h" //黄历数æ�®è¯·æ±‚ç±» class DbusHuangLiRequest : public DbusRequestBase { Q_OBJECT public: explicit DbusHuangLiRequest(QObject *parent = nullptr); //按月获å�–节å�‡æ—¥ä¿¡æ�¯ void getFestivalMonth(quint32 year, quint32 month); //按天获å�–黄历信æ�¯ void getHuangLiDay(quint32 year, quint32 month, quint32 day); //按月获å�–黄历信æ�¯ void getHuangLiMonth(quint32 year, quint32 month, bool fill); //获å�–农历信æ�¯ void getLunarInfoBySolar(quint32 year, quint32 month, quint32 day); //获å�–农历月日程 void getLunarMonthCalendar(quint32 year, quint32 month, bool fill); signals: public slots: void slotCallFinished(CDBusPendingCallWatcher *) override; }; #endif // DBUSHUANGLIREQUEST_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbusrequestbase.cpp000066400000000000000000000044511523260663500303020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dbusrequestbase.h" #include "commondef.h" #include DbusRequestBase::DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection, QObject *parent) : QDBusAbstractInterface(DBUS_SERVER_NAME, path, interface.toStdString().c_str(), connection, parent) { //å…³è�”å�Žç«¯dbus触å�‘ä¿¡å�· if (!QDBusConnection::sessionBus().connect(this->service(), this->path(), this->interface(), "", this, SLOT(slotDbusCall(QDBusMessage)))) { qCWarning(PluginLogger) << "the connection was fail!" << "path: " << this->path() << "interface: " << this->interface(); }; } void DbusRequestBase::setCallbackFunc(CallbackFunc func) { m_callbackFunc = func; } /** * @brief DbusRequestBase::asyncCall * 异步访问dbus接å�£ * @param method dbus方法å�� * @param args å�‚æ•° */ void DbusRequestBase::asyncCall(const QString &method, const QList &args) { QDBusPendingCall async = QDBusAbstractInterface::asyncCallWithArgumentList(method, args); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, method, this); //将回调函数放进CallWatcher中,éš�CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } void DbusRequestBase::asyncCall(const QString &method, QString callName, const QList &args) { QDBusPendingCall async = QDBusAbstractInterface::asyncCallWithArgumentList(method, args); CDBusPendingCallWatcher *watcher = new CDBusPendingCallWatcher(async, callName, this); //将回调函数放进CallWatcher中,éš�CallWatcher调用结果返回 watcher->setCallbackFunc(m_callbackFunc); //清楚回调函数,防止多方法调用时混淆 setCallbackFunc(nullptr); connect(watcher, &CDBusPendingCallWatcher::signalCallFinished, this, &DbusRequestBase::slotCallFinished); } /** * @brief slotDbusCall * dbusæœ�务端调用 * @param msg 调用消æ�¯ */ void DbusRequestBase::slotDbusCall(const QDBusMessage &msg) { } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/dbus/dbusrequestbase.h000066400000000000000000000024301523260663500277420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DBUSREQUESTBASE_H #define DBUSREQUESTBASE_H #include "cdbuspendingcallwatcher.h" #include #include #define DBUS_SERVER_NAME "com.deepin.dataserver.Calendar" //继承QDbus接å�£ç±»ï¼ŒåŒ…装自定义接å�£è®¿é—® class DbusRequestBase : public QDBusAbstractInterface { Q_OBJECT public: explicit DbusRequestBase(const QString &path, const QString &interface, const QDBusConnection &connection = QDBusConnection::sessionBus(), QObject *parent = nullptr); //设置回调函数 void setCallbackFunc(CallbackFunc func); signals: public slots: //dbusæœ�务端调用 virtual void slotDbusCall(const QDBusMessage &msg); //dbus调用完æˆ�事件 virtual void slotCallFinished(CDBusPendingCallWatcher *) = 0; protected: //异步调用,包装异步调用事件 void asyncCall(const QString &method, const QList &args = {}); void asyncCall(const QString &method, QString callName, const QList &args = {}); private: CallbackFunc m_callbackFunc = nullptr; //回调函数 }; #endif // DBUSREQUESTBASE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/globaldef.h000066400000000000000000000152571523260663500255360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef GLOBALDEF_H #define GLOBALDEF_H #define PLUGIN_TITLE_NAME "日历" #define LOG_FILENAME "/home/uniontech/.cache/deepin/dde-calendar/scheduleplugin.log" #define SERVICE_NAME "scheduleX" #define DBUS_SERVICE "com.deepin.dataserver.Calendar" #define DBUS_PATCH "/com/deepin/dataserver/Calendar" #define DBUS_CALENDAR_SERVICE "com.deepin.Calendar" #define DBUS_CALENDAR_PATCH "/com/deepin/Calendar" #define DBUS_CALENDAR_INTFACE "com.deepin.Calendar" #define NEW_SCHEDULE "新建日程" #define DATETIME_FRAME "yyyyMMdd hh:mm:ss" //日期格å¼� #define DATEFORMAT "yyyy-MM-dd" //æ—¶é—´æ ¼å¼� #define TIMEFORMAT "hh:mm:ss" #define PROCESS_OPEN_CALENDAR_PROGRAM "dbus-send" #define PROCESS_OPEN_CALENDAR_ARGUMENTS "--print-reply --dest=com.deepin.Calendar /com/deepin/Calendar com.deepin.Calendar.RaiseWindow" //日程é‡�å¤�类型 //æ¯�天 #define DBUS_RRUL_EVED "FREQ=DAILY" //æ¯�周 #define DBUS_RRUL_EVEW "FREQ=WEEKLY" //æ¯�月 #define DBUS_RRUL_EVEM "FREQ=MONTHLY" //æ¯�å¹´ #define DBUS_RRUL_EVEY "FREQ=YEARLY" //æ¯�个工作日 #define DBUS_RRUL_WORK "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR" //日程json关键字 #define JSON_CREATE "CREATE" #define JSON_VIEW "VIEW" #define JSON_CANCEL "CANCEL" #define JSON_CHANGE "CHANGE" #define JSON_NO_INTENT "NO_INTENT" #define JSON_YES_INTENT "YES_INTENT" //日程jsonæ§½ä½�关键字 #define JSON_NAME "name" #define JSON_CONTENT "content" #define JSON_REPEAT "repeat" #define JSON_DATETIME "datetime" #define JSON_VALUE "value" #define JSON_NORMVALUE "normValue" #define JSON_PROPERTY "property" #define JSON_NEXT "next" #define JSON_LAST "last" #define JSON_FROMDATETIME "fromTime" #define JSON_TODATETIME "toTime" #define JSON_TOPLACE "toPlace" #define JSON_ALL "all" #define JSON_THIS "this" #define JSON_POSRANK_OFFSET "posRank.offset" #define JSON_DateTimeInvalid "datetimeInvalid" #define JSON_DATE_DELIMITER "/" #define JSON_STR_DATE_DELIMITER "-" #define JSON_DATETIME_DELIMITER "T" #define YEAR "å¹´" #define MONTH "月" #define DAY "æ—¥" //æ¯�天多少秒 #define ONE_DAY_SECS 60 * 60 * 24 //widget show #define CONFIRM_BUTTON_STRING "确定" #define CANCEL_BUTTON_STRING "å�–消" #define DELETE_BUTTON_STRING "删除日程" #define DELETEALL_BUTTON_STRING "删除全部" #define ONLY_DELETE_THIS_BUTTON_STRING "仅删除此日程" #define CHANGE_ALL_BUTTON_STRING "修改全部" #define CHANGE_ONLYL_BUTTON_STRING "仅修改此日程" #define CREATE_ERR_TTS "新建功能ä¸�支æŒ�此说法" #define DATETIME_ERR_TTS "您æˆ�功难ä½�我啦,ä¸�存在这个时间呢ï¼�" #define CANCEL_ERR_TTS "查询功能ä¸�支æŒ�此说法" //没有对应日程的回å¤�语 #define QUERY_ERR_TTS "您还没有日程æ��醒,无法寻找对应的日程ï¼�" //修改日程åˆ�始状æ€�错误回å¤�语 #define CHANGE_INI_ERR_TSS "当å‰�场景ä¸�支æŒ�这个æ“�作哦。请问您è¦�将什么日程修改到什么时间或修改到什么内容?" //修改日程询问回å¤�语 #define CHANGE_TO_TTS "请问您è¦�将此日程修改到什么时间或修改到什么内容?" //错误æ“�作回å¤�语 #define G_ERR_TTS "当å‰�场景ä¸�支æŒ�这个æ“�作哦。" //å�–消删除日程回å¤�语 #define CANCEL_DELETION_TTS "已为您å�–消删除日程。" //确认删除日程回å¤�语 #define CONFIRM_DELETION_TTS "已为您删除日程。" //å�–消修改日程回å¤�语 #define CANCEL_CHANGE_TTS "已为您å�–消修改日程。" //确认修改日程回å¤�语 #define CONFIRM_CHANGE_TTS "已为您修改日程。" //没有日程æ��醒回å¤�语 #define NO_SCHEDULE_TTS "您还没有日程æ��醒。" //删除é‡�å¤�日程询问回å¤�语 #define REPEST_SCHEDULE_CANCEL_TTS "该日程是循环的日程,请问是仅删除此日程还是删除全部?" //删除普通日程询问回å¤�语 #define CONFIRM_SCHEDULE_CANCEL_TTS "我è¦�帮您å�–消这个日程å�—?æ“�作å�Žå°†åœ¨æ—¥åކ䏭å�Œæ­¥åˆ é™¤ã€‚" //删除选择日程回å¤�语 #define CANCEL_SELECT_TTS "这是您的所有日程,您è¦�删除哪一个日程?" //选择修改回å¤�语 #define SELECT_CHANGE_TTS "这是您的所有日程,您è¦�修改哪一个日程?" //修改é‡�å¤�日程询问回å¤�语 #define REPEST_SCHEDULE_CHANGE_TTS "该日程是循环的日程,请问是修改当å‰�日程还是所有日程?" //修改普通日程询问回å¤�语 #define CONFIRM_SCHEDULE_CHANGE_TTS "我è¦�帮您修改这个日程å�—?æ“�作å�Žå°†åœ¨æ—¥åކ䏭å�Œæ­¥ä¿®æ”¹ã€‚" //修改到的时间ä¸�在规定时间范围内 #define CHANGE_TIME_OUT_TTS "修改日程的时间范围为未æ�¥å�Šå¹´å“¦ã€‚" #define ALL_DAY "全天" //修改或å�–消时间ä¸�在未æ�¥å�Šå¹´çš„回å¤�语 #define OVERTIME_TTS "å�ªèƒ½å�–消或修改未æ�¥å�Šå¹´çš„æ—¥ç¨‹ï¼�" //新建日程开始时间ä¸�在规定时间范围内 #define CREATE_TIME_OUT_TTS "å�ªèƒ½åˆ›å»ºæœªæ�¥å�Šå¹´çš„æ—¥ç¨‹" //新建æ¯�周末æ��醒的日程的回å¤�语 #define EVERY_WEEKEND_TTS "好的,æ¯�周六到周日的%1我都会æ��醒您。" //日程时间无效 #define ISVALID_DATE_TIME "您æˆ�功难ä½�我啦,ä¸�存在%1这个日期呢" //跨天日程,开始日期å°�于当å‰�时间的回å¤�语 #define BEGINDATETIME_LATER_THAN_CURRENTDATETIME_ACROSS_THE_DAY_TTS "好的,%1我会æ��醒您。" //查询日期过期 #define VIEW_DATE_IS_OVERDUE_TTS "抱歉,ä¸�能查询过期的æ��醒" //查询日程时间ä¸�å†�规定范围内 #define VIEW_DATETIME_OUT_TTS "å�ªèƒ½æŸ¥è¯¢æœªæ�¥å�Šå¹´çš„æ—¥ç¨‹" //没有查询到日程 #define NO_SCHEDULE_VIEWED_TTS "没有找到对应的日程" //查找到n个日程 #define VIEW_SCHEDULE_TTS "找到%1个日程" //å�Šå¹´å¤©æ•° #define MAXIMUM_DAYS_IN_THE_FUTURE 183 //ä¸�带窗å�£çš„回å¤�å®�定义 #define REPLY_ONLY_TTS(reply, msgtts, dsptts, isEnd) \ reply.setReplyType(Reply::RT_STRING_TTS | Reply::RT_STRING_DISPLAY); \ reply.ttsMessage(msgtts); \ reply.displayMessage(dsptts); \ reply.code(0); \ reply.setShouldEndSession(isEnd); \ //带窗å�£çš„回å¤�å®�定义 #define REPLY_WIDGET_TTS(reply, widget, msgtts, dsptts, isEnd) \ reply.setReplyType(Reply::RT_INNER_WIDGET | Reply::RT_STRING_TTS | Reply::RT_STRING_DISPLAY); \ reply.setReplyWidget(widget); \ reply.ttsMessage(msgtts); \ reply.displayMessage(dsptts); \ reply.code(0); \ reply.setShouldEndSession(isEnd); \ //未æ�¥å�Šå¹´å¼€å§‹æ—¶é—´å’Œç»“æ�Ÿæ—¶é—´ #define TIME_FRAME_IN_THE_NEXT_SIX_MONTHT \ QDateTime beginTime = QDateTime::currentDateTime(); \ QDateTime endTime = QDateTime::currentDateTime().addMonths(6); //modifyScheduleItem #define MODIFY_ITEM_HEIGHT 48 //item圆角 #define ITEM_RADIUS 8 //最多显示10个item #define ITEM_SHOW_NUM 10 #define OPENCALENDAR_WIDGET_TITLE "在“日历â€�中查看所有%1个结果..." #define OPENCALENDAR_WDIGET_HEIGHT 17 #endif // GLOBALDEF_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/interface/000077500000000000000000000000001523260663500253745ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/interface/reply.h000066400000000000000000000116521523260663500267050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef REPLY_H #define REPLY_H #include #include #include #include enum IRet { ERR_SUCCESS = (0), /* 一切正常 */ ERR_FAIL = (-1), /* 常规错误 */ ERR_PARAM = (-2), /* 函数入å�‚异常 */ ERR_CONFIG = (-3), /* é…�置错误 */ ERR_NOT_FOUND = (-4), /* 未找到对应项 */ ERR_UNSUPPORT_SERVICE = (-20), /* ä¸�支æŒ�çš„æœ�务 */ ERR_UNSUPPORT_INTENT = (-21), /* ä¸�支æŒ�çš„æ“�作 */ ERR_UNSUPPORT_SLOTS = (-22), /* ä¸�支æŒ�的槽ä½� */ ERR_UNSUPPORT_ABILITY = (-23), /* ä¸�支æŒ�的能力 */ ERR_UNSUPPORT_EXPRESS = (-24), /* ä¸�支æŒ�的说法 */ ERR_CLOUD_SERVICE = (-100), /* 云端æœ�务内容异常 */ ERR_CLOUD_INTENT = (-101), /* 云端æ„�图内容异常 */ ERR_CLOUD_SLOTS = (-102) /* 云端å�‚数内容异常 */ }; class Reply { public: enum ReplyType { RT_NONE = 0, RT_STRING_DISPLAY = 1, RT_STRING_TTS = 2, RT_POP_WIDGET = 4, RT_INNER_WIDGET = 8 }; public: Reply() : messageCode(ERR_FAIL) , messageDisplay() , messageTTS() , m_widget(nullptr) , m_replyType(RT_NONE) , m_shouldEndSession(true) { } Reply(int msgCode, const QString &message, int type = RT_STRING_TTS | RT_STRING_DISPLAY) : messageCode(msgCode) , messageDisplay(message) , messageTTS(message) , m_widget(nullptr) , m_replyType(type) , m_shouldEndSession(true) { } Reply(int msgCode, const QString &msgDisplay, const QString &msgSynthesis, int type, QWidget *parent) : messageCode(msgCode) , messageDisplay(msgDisplay) , messageTTS(msgSynthesis) , m_widget(parent) , m_replyType(type) , m_shouldEndSession(true) { } Reply(const Reply &reply) : messageCode(reply.messageCode) , messageDisplay(reply.messageDisplay) , messageTTS(reply.messageTTS) , m_widget(reply.m_widget) , m_replyType(reply.m_replyType) , m_shouldEndSession(reply.m_shouldEndSession) { } Reply &operator=(const Reply &reply) { this->messageCode = reply.messageCode; this->messageDisplay = reply.messageDisplay; this->messageTTS = reply.messageTTS; this->m_widget = reply.m_widget; this->m_replyType = reply.m_replyType; m_shouldEndSession = reply.m_shouldEndSession; return *this; } int code() { if (messageCode.isValid()) { return messageCode.toInt(); } else { return ERR_SUCCESS; } } void code(int msgCode) { this->messageCode = msgCode; } const QString displayMessage() { if (messageDisplay.isValid()) { return messageDisplay.toString(); } else { return ""; } } void displayMessage(const QString &msgDisplay) { this->messageDisplay = msgDisplay; } const QString ttsMessage() { if (messageTTS.isValid()) { return messageTTS.toString(); } else { return ""; } } void ttsMessage(const QString &msgSynthesis) { this->messageTTS = msgSynthesis; } void update(int msgCode) { this->messageCode = msgCode; } void update(int msgCode, const QString &message, int replyType = RT_STRING_TTS | RT_STRING_DISPLAY) { this->messageCode = msgCode; this->messageDisplay = message; this->messageTTS = message; this->m_replyType = replyType; } void update(int msgCode, const QString &msgDisplay, const QString &msgSynthesis, int replyType = RT_STRING_TTS | RT_STRING_DISPLAY) { this->messageCode = msgCode; this->messageDisplay = msgDisplay; this->messageTTS = msgSynthesis; this->m_replyType = replyType; } operator int() { return messageCode.toInt(); } bool isCodeValid() { return messageCode.isValid(); } bool isDisplayMessageValid() { return messageDisplay.isValid(); } bool isSynthesisMessageValid() { return messageTTS.isValid(); } QWidget *getReplyWidget() { return m_widget; } void setReplyWidget(QWidget *w) { m_widget = w; } int getReplyType() { return m_replyType; } void setReplyType(int type) { m_replyType = type; } int getShouldEndSession() { return m_shouldEndSession; } void setShouldEndSession(bool bShouldEndSession) { m_shouldEndSession = bShouldEndSession; } private: QVariant messageCode; QVariant messageDisplay; QVariant messageTTS; QWidget *m_widget; int m_replyType; bool m_shouldEndSession; }; #endif // REPLY_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/interface/service.h000066400000000000000000000016421523260663500272100ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SERVICE_H #define SERVICE_H #include #include "reply.h" /* æœ�务优先级: * SeriesIgnore表示该serviceå�¯å¿½ç•¥ * ServicePriorityPatch表示æœ�务修å¤�代ç �,直接覆盖旧的æœ�务 */ enum ServicePriority { ServicePriorityIgnore = -10, ServicePriorityLow = 0, SerivcePriorityNormal = 10, SerivcePriorityHigh = 50, SerivcePriorityPatch = 127 }; class IService : public QObject // IReplyHandler { Q_OBJECT public: virtual ~IService() {} virtual QString serviceName() = 0; virtual int servicePriority() = 0; virtual bool canHandle(const QString &s) = 0; virtual IRet service(const QString &semantic) = 0; virtual Reply &getServiceReply() = 0; signals: void signalSendShowMessage(Reply reply); }; #endif // SERVICE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/interface/systemsemanticplugin.h000066400000000000000000000031351523260663500320360ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SYSTEM_SEMANTIC_PLUGIN_H #define SYSTEM_SEMANTIC_PLUGIN_H #include #include "service.h" #if defined(SYSTEM_SEMANTIC_LIBRARY) #define SYSTEMSEMANTICSHARED_EXPORT Q_DECL_EXPORT #else #define SYSTEMSEMANTICSHARED_EXPORT Q_DECL_IMPORT #endif #define AIAPluginProtocolVersion 1 class SYSTEMSEMANTICSHARED_EXPORT IServicePlugin { typedef std::function replyCallback; public: virtual ~IServicePlugin() {} virtual int init() = 0; /* 加载é…�置,åˆ�始化整个æ�’件或æœ�务 */ virtual void uninit() = 0; /* æ�’件逆å�‘åˆ�始化 */ virtual QStringList getSupportService() = 0; virtual IService *createService(const QString &service) = 0; /* 获å�–一个æœ�务,为多线程考é‡�新建æœ�务 */ virtual void releaseService(IService *service) = 0; /* 释放一个æœ�务 */ virtual bool needRunInDifferentThread() { return true; /*当å‰�线程是å�¦éœ€è¦�在å�•独的线程中è¿�行*/ } virtual bool isAutoDetectSession() { return true; /*是å�¦è‡ªåŠ¨æ£€æµ‹å¤šè½®å¯¹è¯�*/ } virtual int getPluginProtocolVersion() { return AIAPluginProtocolVersion; } virtual void setMessageHandle(replyCallback callback) { m_messageHandle = callback; } protected: replyCallback m_messageHandle; }; #define PluginInterface_iid "com.deepin.iflytek.aiassistant.3" Q_DECLARE_INTERFACE(IServicePlugin, PluginInterface_iid) #endif // SYSTEM_SEMANTIC_PLUGIN_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/scheduleplugin.cpp000066400000000000000000000032221523260663500271520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleplugin.h" #include "scheduleservice.h" #include "globaldef.h" #include "task/schedulemanagetask.h" Scheduleplugin::Scheduleplugin(QObject *parent) { Q_UNUSED(parent); } Scheduleplugin::~Scheduleplugin() { ScheduleManageTask::releaseInstance(); } int Scheduleplugin::init() { return 0; } void Scheduleplugin::uninit() { } QStringList Scheduleplugin::getSupportService() { return QStringList {SERVICE_NAME}; } IService *Scheduleplugin::createService(const QString &service) { if (!getSupportService().contains(service)) { return nullptr; } QMutexLocker lock(&m_ServiceLock); auto pService = new scheduleservice(); connect(pService->getScheduleManageTask(), &ScheduleManageTask::signaleSendMessage, this, &Scheduleplugin::slotSendMessage, Qt::UniqueConnection); m_ServiceSet.insert(pService); return pService; } void Scheduleplugin::releaseService(IService *service) { QMutexLocker lock(&m_ServiceLock); for (auto iter = m_ServiceSet.begin(); iter != m_ServiceSet.end(); iter++) { if (service && service == *iter) { m_ServiceSet.erase(iter); break; } } if (service) { delete service; } } bool Scheduleplugin::needRunInDifferentThread() { return false; } bool Scheduleplugin::isAutoDetectSession() { //设置为ä¸�自动检测是å�¦å¤šè®º return false; } void Scheduleplugin::slotSendMessage(Reply reply) { if (this->m_messageHandle) this->m_messageHandle(this, reply); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/scheduleplugin.h000066400000000000000000000021621523260663500266210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEPLUGIN_H #define SCHEDULEPLUGIN_H #include "interface/systemsemanticplugin.h" #include "interface/reply.h" #include class Scheduleplugin : public QObject , public IServicePlugin { Q_OBJECT Q_INTERFACES(IServicePlugin) Q_PLUGIN_METADATA(IID PluginInterface_iid) public: explicit Scheduleplugin(QObject *parent = nullptr); ~Scheduleplugin() override; int init() override; void uninit() override; QStringList getSupportService() override; IService *createService(const QString &service) override; void releaseService(IService *service) override; bool needRunInDifferentThread() override; /** * @brief isAutoDetectSession 是å�¦è‡ªåŠ¨æ£€æµ‹å¤šè½®å¯¹è¯� * @return true 检测 falseä¸�检测由æ�’件设置 */ bool isAutoDetectSession() override; public slots: void slotSendMessage(Reply reply); private: QSet m_ServiceSet; QMutex m_ServiceLock; }; #endif // SCHEDULEPLUGIN_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/scheduleservice.cpp000066400000000000000000000021401523260663500273120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleservice.h" #include "globaldef.h" #include "task/schedulemanagetask.h" #include "task/semanticanalysistask.h" scheduleservice::scheduleservice() { } scheduleservice::~scheduleservice() { } QString scheduleservice::serviceName() { return SERVICE_NAME; } int scheduleservice::servicePriority() { return 0; } bool scheduleservice::canHandle(const QString &s) { Q_UNUSED(s); return true; } IRet scheduleservice::service(const QString &semantic) { //è§£æž�云端返回的数æ�®,进行业务处ç�† QString str = semantic; semanticAnalysisTask task; if (!task.resolveTaskJson(str)) { return ERR_FAIL; } ScheduleManageTask::getInstance()->process(task); return ERR_SUCCESS; } Reply &scheduleservice::getServiceReply() { m_reply = ScheduleManageTask::getInstance()->getReply(); return m_reply; } ScheduleManageTask *scheduleservice::getScheduleManageTask() const { return ScheduleManageTask::getInstance(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/scheduleservice.h000066400000000000000000000012551523260663500267650ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULESERVICE_H #define SCHEDULESERVICE_H #include "interface/service.h" class ScheduleManageTask; class scheduleservice : public IService { Q_OBJECT public: scheduleservice(); ~scheduleservice() override; QString serviceName() override; int servicePriority() override; bool canHandle(const QString &s) override; IRet service(const QString &semantic) override; Reply &getServiceReply() override; ScheduleManageTask *getScheduleManageTask() const; private: Reply m_reply; }; #endif // SCHEDULESERVICE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/000077500000000000000000000000001523260663500245545ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/confirwfeedbackstate.cpp000066400000000000000000000022471523260663500314420ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "confirwfeedbackstate.h" #include "../globaldef.h" #include "../task/schedulebasetask.h" #include "../data/clocaldata.h" #include "../data/changejsondata.h" confirwFeedbackState::confirwFeedbackState(scheduleBaseTask *task) : scheduleState(task) { } Reply confirwFeedbackState::getReplyByIntent(bool isOK) { return m_Task->confirmInfo(isOK); } scheduleState::Filter_Flag confirwFeedbackState::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::NEXT) { return Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST || jsonData->offset() > 0) { return Fileter_Err; } Filter_Flag result = changeDateErrJudge(jsonData, Fileter_Init); return result; } Reply confirwFeedbackState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } Reply confirwFeedbackState::normalEvent(const JsonData *jsonData) { Q_UNUSED(jsonData); return m_Task->confirwScheduleHandle(m_localData->SelectInfo()); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/confirwfeedbackstate.h000066400000000000000000000011151523260663500311000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CONFIRWFEEDBACKSTATE_H #define CONFIRWFEEDBACKSTATE_H #include "schedulestate.h" class confirwFeedbackState : public scheduleState { public: explicit confirwFeedbackState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; }; #endif // CONFIRWFEEDBACKSTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/getchangedatastate.cpp000066400000000000000000000064301523260663500311030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "getchangedatastate.h" #include "commondef.h" #include "../globaldef.h" #include "../data/changejsondata.h" #include "../task/changescheduletask.h" getChangeDataState::getChangeDataState(scheduleBaseTask *task) : scheduleState(task) { } Reply getChangeDataState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK); return ErrEvent(); } scheduleState::Filter_Flag getChangeDataState::eventFilter(const JsonData *jsonData) { //如果语义包å�«å…¨éƒ¨å…³é”®å­—则为修改åˆ�始状æ€� if (jsonData->getPropertyStatus() == JsonData::ALL //如果语义包å�«ä¸‹ä¸€ä¸ªå…³é”®å­—则为修改åˆ�始状æ€� || jsonData->getPropertyStatus() == JsonData::NEXT || jsonData->isVaild() //如果语义包å�«æ—¶é—´åˆ™ä¸ºä¿®æ”¹åˆ�始状æ€� || jsonData->getDateTime().suggestDatetime.size() > 0 // 如果语义包å�«å†…容则为修改åˆ�始状æ€� || !jsonData->TitleName().isEmpty() //如果语义包å�«é‡�å¤�类型则为修改åˆ�始状æ€� || jsonData->getRepeatStatus() != JsonData::NONE) { return Filter_Flag::Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST) { qCDebug(PluginLogger) << "Event filter: Error state - Property status is LAST"; return Fileter_Err; } if (jsonData->offset() > 0) { qCDebug(PluginLogger) << "Event filter: Error state - Invalid offset:" << jsonData->offset(); return Fileter_Err; } //类型转æ�¢ JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); //如果存在formä¿¡æ�¯åˆ™è¡¨ç¤ºä¸€ä¸ªæ–°çš„修改 if (mchangeJsonData->fromDateTime().suggestDatetime.size() > 0) { qCDebug(PluginLogger) << "Event filter: Initial state - Has from datetime"; return Fileter_Init; } //如果存在修改的信æ�¯åˆ™ä¸ºæ­£å¸¸çжæ€� if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0 || !mchangeJsonData->toPlaceStr().isEmpty()) { return Fileter_Normal; } else { qCDebug(PluginLogger) << "Event filter: Error state - No valid modification data"; return Fileter_Err; } } Reply getChangeDataState::ErrEvent() { Reply reply; //返回错误输入的回å¤�语 REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } Reply getChangeDataState::normalEvent(const JsonData *jsonData) { //类型转æ�¢ JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); //如果有修改时间的信æ�¯åˆ™èµ‹å€¼ if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0) { qCDebug(PluginLogger) << "Updating schedule with new datetime"; m_localData->setToTime(mchangeJsonData->toDateTime()); } //如果有修改内容的信æ�¯åˆ™èŽ·å�– if (!mchangeJsonData->toPlaceStr().isEmpty()) { qCDebug(PluginLogger) << "Updating schedule with new title:" << mchangeJsonData->toPlaceStr(); m_localData->setToTitleName(mchangeJsonData->toPlaceStr()); } return m_Task->getReplyBySelectSchedule(m_localData->SelectInfo()); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/getchangedatastate.h000066400000000000000000000022631523260663500305500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef GETCHANGEDATASTATE_H #define GETCHANGEDATASTATE_H #include "schedulestate.h" /** * @brief The getChangeDataState class 获å�–修改信æ�¯çжæ€� */ class getChangeDataState : public scheduleState { public: explicit getChangeDataState(scheduleBaseTask *task); /** * @brief getReplyByIntent æ ¹æ�®æ„�图判断回å¤� * @param isOK 确认 或 å�–消 * @return 回å¤� */ Reply getReplyByIntent(bool isOK) override; protected: /** * @brief eventFilter æ ¹æ�®json过滤事件 * @param jsonData json对象 * @return 返回过滤结果 åˆ�始化,错误 或正常 */ Filter_Flag eventFilter(const JsonData *jsonData) override; /** * @brief ErrEvent 错误事件处ç�† * @return 给助手的回å¤� */ Reply ErrEvent() override; /** * @brief normalEvent 正常事件处ç�† * @param jsonData 需è¦�处ç�†çš„jsonæ•°æ�® * @return 给助手的回å¤� */ Reply normalEvent(const JsonData *jsonData) override; }; #endif // GETCHANGEDATASTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/queryschedulestate.cpp000066400000000000000000000056651523260663500312170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryschedulestate.h" #include "commondef.h" #include "../task/queryscheduleproxy.h" #include "../task/schedulebasetask.h" #include "dschedule.h" #include "../data/changejsondata.h" #include "../globaldef.h" #include "../data/clocaldata.h" queryScheduleState::queryScheduleState(scheduleBaseTask *task) : scheduleState(task) { } Reply queryScheduleState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK); return ErrEvent(); } Reply queryScheduleState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, false) return reply; } Reply queryScheduleState::normalEvent(const JsonData *jsonData) { DSchedule::List m_scheduleInfo {}; JsonData *queryData = const_cast(jsonData); queryScheduleProxy m_querySchedule(queryData); m_scheduleInfo = m_querySchedule.scheduleMapToList(m_querySchedule.querySchedule()); if (m_querySchedule.getTimeIsExpired()) { qCDebug(PluginLogger) << "Schedule time is expired, processing overdue schedule"; return m_Task->overdueScheduleProcess(); } else { changejsondata *mchangeJsonData = dynamic_cast(queryData); if (mchangeJsonData != nullptr) { qCDebug(PluginLogger) << "Processing change data for schedule"; if (m_localData.isNull()) { qCDebug(PluginLogger) << "Creating new local data"; m_localData = CLocalData::Ptr(new CLocalData()); } if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0) { qCDebug(PluginLogger) << "Updating schedule with new datetime"; m_localData->setToTime(mchangeJsonData->toDateTime()); } if (!mchangeJsonData->toPlaceStr().isEmpty()) { qCDebug(PluginLogger) << "Updating schedule with new title:" << mchangeJsonData->toPlaceStr(); m_localData->setToTitleName(mchangeJsonData->toPlaceStr()); } } return m_Task->getFeedbackByQuerySchedule(m_scheduleInfo); } } scheduleState::Filter_Flag queryScheduleState::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::LAST || jsonData->getPropertyStatus() == JsonData::PRO_THIS) { qCDebug(PluginLogger) << "Event filter: Error state - Invalid property status:" << jsonData->getPropertyStatus(); return Fileter_Err; } if (jsonData->offset() > -1 && jsonData->getPropertyStatus() == JsonData::PRO_NONE) { qCDebug(PluginLogger) << "Event filter: Error state - Invalid offset:" << jsonData->offset() << "with property status:" << jsonData->getPropertyStatus(); return Fileter_Err; } Filter_Flag result = changeDateErrJudge(jsonData, Fileter_Normal); return result; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/queryschedulestate.h000066400000000000000000000011501523260663500306450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYSCHEDULESTATE_H #define QUERYSCHEDULESTATE_H #include "schedulestate.h" #include "accountitem.h" class queryScheduleState : public scheduleState { public: explicit queryScheduleState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; protected: }; #endif // QUERYSCHEDULESTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/repeatfeedbackstate.cpp000066400000000000000000000052331523260663500312510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "repeatfeedbackstate.h" #include "commondef.h" #include "../globaldef.h" #include "../task/schedulebasetask.h" #include "../data/clocaldata.h" #include "../data/changejsondata.h" repeatfeedbackstate::repeatfeedbackstate(scheduleBaseTask *task) : scheduleState(task) { } Reply repeatfeedbackstate::getReplyByIntent(bool isOK) { if (isOK) { qCDebug(PluginLogger) << "Getting reply by intent - returning error TTS reply"; Q_UNUSED(isOK) Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } else { qCDebug(PluginLogger) << "Getting reply by intent - transitioning to init state"; return m_Task->InitState(nullptr); } } scheduleState::Filter_Flag repeatfeedbackstate::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::NEXT //如果语义包å�«æ—¶é—´åˆ™ä¸ºä¿®æ”¹åˆ�始状æ€� || jsonData->getDateTime().suggestDatetime.size() > 0 // 如果语义包å�«å†…容则为修改åˆ�始状æ€� || !jsonData->TitleName().isEmpty() //如果语义包å�«é‡�å¤�类型则为修改åˆ�始状æ€� || jsonData->getRepeatStatus() != JsonData::NONE) { return Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::ALL || jsonData->getPropertyStatus() == JsonData::PRO_THIS) { qCDebug(PluginLogger) << "Event filter: Normal state - Property status:" << jsonData->getPropertyStatus(); return Fileter_Normal; } if (jsonData->getPropertyStatus() == JsonData::LAST || jsonData->offset() > 0) { qCDebug(PluginLogger) << "Event filter: Error state - Property status:" << jsonData->getPropertyStatus() << "Offset:" << jsonData->offset(); return Fileter_Err; } Filter_Flag result = changeDateErrJudge(jsonData, Fileter_Init); qCDebug(PluginLogger) << "Event filter: Date error judgment result:" << result; return result; } Reply repeatfeedbackstate::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } Reply repeatfeedbackstate::normalEvent(const JsonData *jsonData) { bool isOnlyOne = true; if (jsonData->getPropertyStatus() == JsonData::ALL) { qCDebug(PluginLogger) << "Processing repeat schedule for all instances"; isOnlyOne = false; } else { qCDebug(PluginLogger) << "Processing repeat schedule for single instance"; } return m_Task->repeatScheduleHandle(m_localData->SelectInfo(), isOnlyOne); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/repeatfeedbackstate.h000066400000000000000000000011071523260663500307120ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef REPEATFEEDBACKSTATE_H #define REPEATFEEDBACKSTATE_H #include "schedulestate.h" class repeatfeedbackstate : public scheduleState { public: explicit repeatfeedbackstate(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; }; #endif // REPEATFEEDBACKSTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/schedulestate.cpp000066400000000000000000000060561523260663500301240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulestate.h" #include "commondef.h" #include "../task/schedulebasetask.h" #include "../data/changejsondata.h" #include "../globaldef.h" #include "../state/queryschedulestate.h" scheduleState::scheduleState(scheduleBaseTask *task) : m_Task(task) { } scheduleState::~scheduleState() { } Reply scheduleState::process(const JsonData *jsonData) { Reply reply; //如果时间无效 if (jsonData->getDateTimeInvalid()) { qCDebug(PluginLogger) << "DateTime is invalid, transitioning to queryScheduleState"; scheduleState *nextState = new queryScheduleState(m_Task); setNextState(nextState); REPLY_ONLY_TTS(reply, DATETIME_ERR_TTS, DATETIME_ERR_TTS, true); return reply; } Filter_Flag filterResult = eventFilter(jsonData); qCDebug(PluginLogger) << "Event filter result:" << filterResult; switch (filterResult) { case Fileter_Err: { qCDebug(PluginLogger) << "Processing error event"; reply = ErrEvent(); } break; case Fileter_Normal: { qCDebug(PluginLogger) << "Processing normal event"; reply = normalEvent(jsonData); } break; case Fileter_Init: { qCDebug(PluginLogger) << "Processing init event"; reply = initEvent(jsonData); } break; } return reply; } void scheduleState::setNextState(scheduleState *nextState) { m_nextState = nextState; } scheduleState *scheduleState::getNextState() const { return m_nextState; } void scheduleState::setLocalData(const CLocalData::Ptr &localData) { m_localData = localData; } CLocalData::Ptr scheduleState::getLocalData() const { return m_localData; } Reply scheduleState::initEvent(const JsonData *jsonData) { return m_Task->InitState(jsonData); } scheduleState::Filter_Flag scheduleState::changeDateErrJudge(const JsonData *jsonData, const scheduleState::Filter_Flag &defaultflag) { Filter_Flag resultFlag {defaultflag}; //如果å�ªæœ‰ä¿®æ”¹ä¿¡æ�¯æ²¡æœ‰è¢«ä¿®æ”¹ä¿¡æ�¯è¿”回错误 JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); if (mchangeJsonData != nullptr) { //是å�¦å�«æœ‰ä¿®æ”¹ä¿¡æ�¯ bool hasChangeToData = !mchangeJsonData->toPlaceStr().isEmpty() || mchangeJsonData->toDateTime().suggestDatetime.size() > 0; //是å�¦ä¸�包å�«éœ€è¦�修改的信æ�¯ bool noChangeDate = mchangeJsonData->fromDateTime().suggestDatetime.size() == 0 && mchangeJsonData->TitleName().isEmpty(); if (hasChangeToData && noChangeDate) { qCDebug(PluginLogger) << "Invalid change data detected - has change to but no change from"; resultFlag = Filter_Flag::Fileter_Err; } } else { qCDebug(PluginLogger) << "Not a change data type, using default flag"; } qCDebug(PluginLogger) << "Date change error judgment result:" << resultFlag; return resultFlag; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/schedulestate.h000066400000000000000000000031311523260663500275600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULESTATE_H #define SCHEDULESTATE_H #include "../data/jsondata.h" #include "../interface/reply.h" #include "../data/clocaldata.h" class JsonData; class CSchedulesDBus; class scheduleBaseTask; class scheduleState { public: enum Filter_Flag { Fileter_Err, Fileter_Normal, Fileter_Init }; public: scheduleState(scheduleBaseTask *task); virtual ~scheduleState(); Reply process(const JsonData *jsonData); void setNextState(scheduleState *nextState); scheduleState *getNextState() const; void setLocalData(const CLocalData::Ptr &localData); CLocalData::Ptr getLocalData() const; virtual Reply getReplyByIntent(bool isOK) = 0; protected: virtual Filter_Flag eventFilter(const JsonData *jsonData) = 0; virtual Reply ErrEvent() = 0; virtual Reply normalEvent(const JsonData *jsonData) = 0; Reply initEvent(const JsonData *jsonData); /** * @brief changeDateErrJudge 修改数æ�®é”™è¯¯åˆ¤æ–­ï¼Œåœ¨é�žèŽ·å�–修改数æ�®çжæ€�下,输入“修改到xxxâ€�返回错误信æ�¯ * @param jsonData jsonæ•°æ�® * @param defaultflag 默认返回标志 * @return 过滤标志 */ Filter_Flag changeDateErrJudge(const JsonData *jsonData, const Filter_Flag &defaultflag); protected: scheduleBaseTask *m_Task {nullptr}; scheduleState *m_nextState {nullptr}; CLocalData::Ptr m_localData {nullptr}; }; #endif // SCHEDULESTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/selectandquerystate.cpp000066400000000000000000000105571523260663500313610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "selectandquerystate.h" #include "../globaldef.h" #include "commondef.h" #include "../task/schedulebasetask.h" #include "../data/changejsondata.h" #include SelectAndQueryState::SelectAndQueryState(scheduleBaseTask *task) : scheduleState(task) { } Reply SelectAndQueryState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK) Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } scheduleState::Filter_Flag SelectAndQueryState::eventFilter(const JsonData *jsonData) { //如果语义包å�«å…¨éƒ¨å…³é”®å­—则为修改åˆ�始状æ€� if (jsonData->getPropertyStatus() == JsonData::ALL //如果语义包å�«ä¸‹ä¸€ä¸ªå…³é”®å­—则为修改åˆ�始状æ€� || jsonData->getPropertyStatus() == JsonData::NEXT || jsonData->isVaild() //如果语义包å�«æ—¶é—´åˆ™ä¸ºä¿®æ”¹åˆ�始状æ€� || jsonData->getDateTime().suggestDatetime.size() > 0 // 如果语义包å�«å†…容则为修改åˆ�始状æ€� || !jsonData->TitleName().isEmpty() //如果语义包å�«é‡�å¤�类型则为修改åˆ�始状æ€� || jsonData->getRepeatStatus() != JsonData::NONE) { return Filter_Flag::Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST) { qCDebug(PluginLogger) << "Event filter: Normal state detected for LAST property status"; return Fileter_Normal; } JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); if (mchangeJsonData->fromDateTime().suggestDatetime.size() > 0) { qCDebug(PluginLogger) << "Event filter: Initial state detected due to fromDateTime"; return Filter_Flag::Fileter_Init; } //æ ¹æ�®åˆ—表编å�·åˆ¤æ–­ if (m_localData->getOffet() < 0 && jsonData->offset() < 0) { qCDebug(PluginLogger) << "Event filter: Error state detected - invalid offset combination"; return Fileter_Err; } bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); if (jsonData->offset() > showcount) { qCDebug(PluginLogger) << "Event filter: Error state detected - offset exceeds show count"; return Fileter_Err; } qCDebug(PluginLogger) << "Event filter: Normal state detected"; return Fileter_Normal; } Reply SelectAndQueryState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, QUERY_ERR_TTS, QUERY_ERR_TTS, true) return reply; } Reply SelectAndQueryState::normalEvent(const JsonData *jsonData) { bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); int offset = 0; //获å�–第N个日程 if (jsonData->getPropertyStatus() == JsonData::LAST) { qCDebug(PluginLogger) << "Processing LAST property status, using showcount as offset:" << showcount; offset = showcount; } else { offset = jsonData->offset(); qCDebug(PluginLogger) << "Using provided offset:" << offset; } if (offset > 0) { m_localData->setOffset(offset); m_localData->setSelectInfo(m_localData->scheduleInfoVector().at(offset - 1)); DSchedule::Ptr info = m_localData->SelectInfo(); //如果语义为“第xx个修改到xxxâ€�,添加对修改信æ�¯çš„获å�– //类型转æ�¢ JsonData *queryData = const_cast(jsonData); changejsondata *mchangeJsonData = dynamic_cast(queryData); //如果有修改时间的信æ�¯åˆ™èµ‹å€¼ if (mchangeJsonData->toDateTime().suggestDatetime.size() > 0) { m_localData->setToTime(mchangeJsonData->toDateTime()); } //如果有修改内容的信æ�¯åˆ™èŽ·å�– if (!mchangeJsonData->toPlaceStr().isEmpty()) { m_localData->setToTitleName(mchangeJsonData->toPlaceStr()); } return m_Task->getReplyBySelectSchedule(m_localData->SelectInfo()); } else { qCWarning(PluginLogger) << "Invalid offset value:" << offset; Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, false); return reply; } } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/selectandquerystate.h000066400000000000000000000011101523260663500310070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SELECTANDQUERYSTATE_H #define SELECTANDQUERYSTATE_H #include "schedulestate.h" class SelectAndQueryState : public scheduleState { public: explicit SelectAndQueryState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; }; #endif // SELECTANDQUERYSTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/selectinquirystate.cpp000066400000000000000000000054721523260663500312310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "selectinquirystate.h" #include "commondef.h" #include "../globaldef.h" #include "../widget/repeatschedulewidget.h" #include "../task/schedulebasetask.h" selectInquiryState::selectInquiryState(scheduleBaseTask *task) : scheduleState(task) { } Reply selectInquiryState::getReplyByIntent(bool isOK) { Q_UNUSED(isOK) Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } scheduleState::Filter_Flag selectInquiryState::eventFilter(const JsonData *jsonData) { if (jsonData->getPropertyStatus() == JsonData::ALL || jsonData->getPropertyStatus() == JsonData::NEXT || jsonData->isVaild() || jsonData->getRepeatStatus() != JsonData::NONE) { qCDebug(PluginLogger) << "Event filter: Initial state detected due to property status or repeat status"; return Filter_Flag::Fileter_Init; } if (jsonData->getPropertyStatus() == JsonData::LAST) { qCDebug(PluginLogger) << "Event filter: Normal state detected for LAST property status"; return Fileter_Normal; } if (jsonData->getDateTime().suggestDatetime.size() > 0 || !jsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Event filter: Initial state detected due to datetime or title"; return Fileter_Init; } bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); if (jsonData->offset() > showcount) { qCDebug(PluginLogger) << "Event filter: Error state detected - offset exceeds show count"; return Fileter_Err; } qCDebug(PluginLogger) << "Event filter: Normal state detected"; return Fileter_Normal; } Reply selectInquiryState::ErrEvent() { Reply reply; REPLY_ONLY_TTS(reply, QUERY_ERR_TTS, QUERY_ERR_TTS, true) return reply; } Reply selectInquiryState::normalEvent(const JsonData *jsonData) { bool showOpenWidget = m_localData->scheduleInfoVector().size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_localData->scheduleInfoVector().size(); int offset = 0; if (jsonData->getPropertyStatus() == JsonData::LAST) { qCDebug(PluginLogger) << "Processing LAST property status, using showcount as offset:" << showcount; offset = showcount; } else { offset = jsonData->offset(); qCDebug(PluginLogger) << "Using provided offset:" << offset; } Reply m_reply; DSchedule::Ptr info = m_localData->scheduleInfoVector().at(offset - 1); qCDebug(PluginLogger) << "Getting reply for selected schedule with ID:" << info->uid(); return m_Task->getReplyBySelectSchedule(info); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/state/selectinquirystate.h000066400000000000000000000011441523260663500306660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SELECTINQUIRYSTATE_H #define SELECTINQUIRYSTATE_H #include "schedulestate.h" #include "dschedule.h" class selectInquiryState : public scheduleState { public: explicit selectInquiryState(scheduleBaseTask *task); Reply getReplyByIntent(bool isOK) override; protected: Filter_Flag eventFilter(const JsonData *jsonData) override; Reply ErrEvent() override; Reply normalEvent(const JsonData *jsonData) override; private: }; #endif // SELECTINQUIRYSTATE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/000077500000000000000000000000001523260663500243765ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/cancelscheduletask.cpp000066400000000000000000000225701523260663500307350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "cancelscheduletask.h" #include "../data/canceljsondata.h" #include "../globaldef.h" #include "../widget/schedulelistwidget.h" #include "../widget/repeatschedulewidget.h" #include "queryscheduleproxy.h" #include "../state/queryschedulestate.h" #include "../state/selectinquirystate.h" #include "../state/repeatfeedbackstate.h" #include "../data/clocaldata.h" #include "../state/confirwfeedbackstate.h" #include "dscheduledatamanager.h" #include "commondef.h" cancelScheduleTask::cancelScheduleTask() : scheduleBaseTask(new queryScheduleState(this)) { } void cancelScheduleTask::slotSelectScheduleIndex(int index) { scheduleState *currentState = getCurrentState(); CLocalData::Ptr localData = currentState->getLocalData(); if (!(localData->scheduleInfoVector().size() < index)) { Reply reply = getReplyBySelectSchedule(localData->scheduleInfoVector().at(index - 1)); updateState(); emit signaleSendMessage(reply); } } void cancelScheduleTask::slotButtonCheckNum(int index, const QString &text, const int buttonCount) { Q_UNUSED(text); Reply reply; scheduleState *currentState = getCurrentState(); if (buttonCount == 2) { if (index == 1) { qCDebug(PluginLogger) << "Processing confirm schedule cancellation"; reply = confirwScheduleHandle(currentState->getLocalData()->SelectInfo()); } } if (buttonCount == 3) { if (index == 1) { qCDebug(PluginLogger) << "Processing single instance repeat schedule cancellation"; reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), false); } if (index == 2) { qCDebug(PluginLogger) << "Processing all instances repeat schedule cancellation"; reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), true); } } if (index == 0) { qCDebug(PluginLogger) << "Cancelling operation, returning to initial state"; reply = InitState(nullptr, true); } else { qCDebug(PluginLogger) << "Updating state after button check"; InitState(nullptr, true); } emit signaleSendMessage(reply); } scheduleState *cancelScheduleTask::getCurrentState() { scheduleState *currentState = m_State; while (currentState->getNextState() != nullptr) { currentState = currentState->getNextState(); } return currentState; } Reply cancelScheduleTask::getFeedbackByQuerySchedule(const DSchedule::List &infoVector) { Reply m_reply; scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); if (infoVector.size() == 0) { qCDebug(PluginLogger) << "No schedules found"; QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = NO_SCHEDULE_TTS; m_DisplyMessage = NO_SCHEDULE_TTS; REPLY_ONLY_TTS(m_reply, m_TTSMessage, m_DisplyMessage, true); currentState->setNextState(nextState); } else if (infoVector.size() == 1) { qCDebug(PluginLogger) << "Single schedule found, getting reply"; m_reply = getReplyBySelectSchedule(infoVector.at(0)); } else { qCDebug(PluginLogger) << "Multiple schedules found, creating inquiry state"; nextState = new selectInquiryState(this); CLocalData::Ptr m_Data(new CLocalData()); m_Data->setScheduleInfoVector(infoVector); nextState->setLocalData(m_Data); m_reply = getListScheduleReply(infoVector); currentState->setNextState(nextState); } return m_reply; } Reply cancelScheduleTask::getReplyBySelectSchedule(const DSchedule::Ptr &info) { Reply m_reply; CLocalData::Ptr m_Data(new CLocalData()); scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); m_Data->setSelectInfo(info); if (info->getRRuleType() == DSchedule::RRuleType::RRule_None) { qCDebug(PluginLogger) << "Creating confirm feedback state for non-recurring schedule"; nextState = new confirwFeedbackState(this); m_reply = getConfirwScheduleReply(info); } else { qCDebug(PluginLogger) << "Creating repeat feedback state for recurring schedule"; nextState = new repeatfeedbackstate(this); m_reply = getRepeatReply(info); } nextState->setLocalData(m_Data); currentState->setNextState(nextState); return m_reply; } Reply cancelScheduleTask::InitState(const JsonData *jsonData, bool isUpdateState) { Reply m_reply; scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); if (jsonData != nullptr) { m_reply = nextState->process(jsonData); } else { REPLY_ONLY_TTS(m_reply, CANCEL_DELETION_TTS, CANCEL_DELETION_TTS, true); } if (isUpdateState) { updateState(); } return m_reply; } Reply cancelScheduleTask::repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) { deleteRepeatSchedule(info, isOnlyOne); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_DELETION_TTS, CONFIRM_DELETION_TTS, true); scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); return reply; } Reply cancelScheduleTask::confirwScheduleHandle(const DSchedule::Ptr &info) { deleteOrdinarySchedule(info); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_DELETION_TTS, CONFIRM_DELETION_TTS, true); scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); return reply; } Reply cancelScheduleTask::confirmInfo(bool isOK) { if (isOK) { scheduleState *currentState = getCurrentState(); return confirwScheduleHandle(currentState->getLocalData()->SelectInfo()); } else { return InitState(nullptr); } } QWidget *cancelScheduleTask::createRepeatWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *repeatWidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Cancel, repeatScheduleWidget::Widget_Repeat); repeatWidget->setSchedule(info); connect(repeatWidget, &repeatScheduleWidget::signalButtonCheckNum, this, &cancelScheduleTask::slotButtonCheckNum); return repeatWidget; } QWidget *cancelScheduleTask::createConfirmWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *cwidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Cancel, repeatScheduleWidget::Widget_Confirm); cwidget->setSchedule(info); connect(cwidget, &repeatScheduleWidget::signalButtonCheckNum, this, &cancelScheduleTask::slotButtonCheckNum); return cwidget; } Reply cancelScheduleTask::getListScheduleReply(const DSchedule::List &infoVector) { scheduleListWidget *m_viewWidget = new scheduleListWidget(); m_viewWidget->setScheduleInfoVector(infoVector); connect(m_viewWidget, &scheduleListWidget::signalSelectScheduleIndex, this, &cancelScheduleTask::slotSelectScheduleIndex); QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = CANCEL_SELECT_TTS; m_DisplyMessage = CANCEL_SELECT_TTS; Reply reply; REPLY_WIDGET_TTS(reply, m_viewWidget, m_TTSMessage, m_DisplyMessage, false); return reply; } Reply cancelScheduleTask::getConfirwScheduleReply(const DSchedule::Ptr &info) { QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = CONFIRM_SCHEDULE_CANCEL_TTS; m_DisplyMessage = CONFIRM_SCHEDULE_CANCEL_TTS; QWidget *m_confirwWidget = createConfirmWidget(info); Reply reply; REPLY_WIDGET_TTS(reply, m_confirwWidget, m_TTSMessage, m_DisplyMessage, false); return reply; } Reply cancelScheduleTask::getRepeatReply(const DSchedule::Ptr &info) { QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = REPEST_SCHEDULE_CANCEL_TTS; m_DisplyMessage = REPEST_SCHEDULE_CANCEL_TTS; QWidget *m_repeatReply = createRepeatWidget(info); Reply reply; REPLY_WIDGET_TTS(reply, m_repeatReply, m_TTSMessage, m_DisplyMessage, false); return reply; } void cancelScheduleTask::deleteRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne) { if (isOnlyOne) { qCDebug(PluginLogger) << "Deleting single instance of repeat schedule"; DSchedule::Ptr newschedule = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(info->uid()); newschedule->recurrence()->addExDateTime(info->dtStart()); DScheduleDataManager::getInstance()->updateSchedule(newschedule); } else { if (info->recurrenceId().isValid() == 0) { qCDebug(PluginLogger) << "Deleting entire repeat schedule"; DScheduleDataManager::getInstance()->deleteScheduleByScheduleID(info->uid()); } else { qCDebug(PluginLogger) << "Modifying repeat schedule end date"; DSchedule::Ptr newschedule = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(info->uid()); newschedule->recurrence()->setDuration(0); newschedule->recurrence()->setEndDateTime(info->dtStart().addDays(-1)); DScheduleDataManager::getInstance()->updateSchedule(newschedule); } } } void cancelScheduleTask::deleteOrdinarySchedule(const DSchedule::Ptr &info) { DScheduleDataManager::getInstance()->deleteScheduleByScheduleID(info->uid()); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/cancelscheduletask.h000066400000000000000000000026731523260663500304040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CANCELSCHEDULETASK_H #define CANCELSCHEDULETASK_H #include "schedulebasetask.h" class scheduleState; class cancelScheduleTask : public scheduleBaseTask { Q_OBJECT public: cancelScheduleTask(); Reply getFeedbackByQuerySchedule(const DSchedule::List &infoVector) override; Reply getReplyBySelectSchedule(const DSchedule::Ptr &info) override; Reply InitState(const JsonData *jsonData, bool isUpdateState = false) override; Reply repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) override; Reply confirwScheduleHandle(const DSchedule::Ptr &info) override; Reply confirmInfo(bool isOK) override; public slots: void slotSelectScheduleIndex(int index); void slotButtonCheckNum(int index, const QString &text, const int buttonCount); private: scheduleState *getCurrentState(); QWidget *createRepeatWidget(const DSchedule::Ptr &info); QWidget *createConfirmWidget(const DSchedule::Ptr &info); Reply getListScheduleReply(const DSchedule::List &infoVector); Reply getConfirwScheduleReply(const DSchedule::Ptr &info); Reply getRepeatReply(const DSchedule::Ptr &info); void deleteRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne = true); void deleteOrdinarySchedule(const DSchedule::Ptr &info); private: }; #endif // CANCELSCHEDULETASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/changescheduletask.cpp000066400000000000000000000477601523260663500307450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "changescheduletask.h" #include "../data/changejsondata.h" #include "../globaldef.h" #include "../widget/schedulelistwidget.h" #include "../widget/repeatschedulewidget.h" #include "queryscheduleproxy.h" #include "../state/selectandquerystate.h" #include "../state/confirwfeedbackstate.h" #include "../state/queryschedulestate.h" #include "../state/repeatfeedbackstate.h" #include "../state/getchangedatastate.h" #include "dscheduledatamanager.h" #include "commondef.h" #include #include changeScheduleTask::changeScheduleTask() : scheduleBaseTask(new queryScheduleState(this)) { } Reply changeScheduleTask::getFeedbackByQuerySchedule(const DSchedule::List &infoVector) { Reply m_reply; scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); if (infoVector.size() == 0) { qCDebug(PluginLogger) << "No schedules found"; QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = NO_SCHEDULE_TTS; m_DisplyMessage = NO_SCHEDULE_TTS; REPLY_ONLY_TTS(m_reply, m_TTSMessage, m_DisplyMessage, true); currentState->setNextState(nextState); } else if (infoVector.size() == 1) { qCDebug(PluginLogger) << "Single schedule found, setting as selected info"; currentState->getLocalData()->setSelectInfo(infoVector.at(0)); m_reply = getReplyBySelectSchedule(infoVector.at(0)); } else { qCDebug(PluginLogger) << "Multiple schedules found, creating select and query state"; nextState = new SelectAndQueryState(this); CLocalData::Ptr m_Data = currentState->getLocalData(); m_Data->setScheduleInfoVector(infoVector); nextState->setLocalData(m_Data); m_reply = getListScheduleReply(infoVector); currentState->setNextState(nextState); } return m_reply; } void changeScheduleTask::slotSelectScheduleIndex(int index) { scheduleState *currentState = getCurrentState(); CLocalData::Ptr localData = currentState->getLocalData(); if (!(localData->scheduleInfoVector().size() < index)) { qCDebug(PluginLogger) << "Processing schedule selection - Index:" << index << "Total schedules:" << localData->scheduleInfoVector().size(); localData->setSelectInfo(localData->scheduleInfoVector().at(index - 1)); Reply reply = getReplyBySelectSchedule(localData->scheduleInfoVector().at(index - 1)); updateState(); emit signaleSendMessage(reply); } } void changeScheduleTask::slotButtonCheckNum(int index, const QString &text, const int buttonCount) { Q_UNUSED(text); Reply reply; scheduleState *currentState = getCurrentState(); if (buttonCount == 2) { if (index == 1) { qCDebug(PluginLogger) << "Processing confirm schedule change"; reply = confirwScheduleHandle(currentState->getLocalData()->SelectInfo()); } } if (buttonCount == 3) { if (index == 1) { qCDebug(PluginLogger) << "Processing single instance repeat schedule change"; reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), false); } if (index == 2) { qCDebug(PluginLogger) << "Processing all instances repeat schedule change"; reply = repeatScheduleHandle(currentState->getLocalData()->SelectInfo(), true); } } if (index == 0) { qCDebug(PluginLogger) << "Cancelling operation, returning to initial state"; reply = InitState(nullptr, true); } else { qCDebug(PluginLogger) << "Updating state after button check"; InitState(nullptr, true); } emit signaleSendMessage(reply); } scheduleState *changeScheduleTask::getCurrentState() { scheduleState *currentState = m_State; while (currentState->getNextState() != nullptr) { currentState = currentState->getNextState(); } return currentState; } Reply changeScheduleTask::getReplyBySelectSchedule(const DSchedule::Ptr &info) { Reply m_reply; scheduleState *nextState = nullptr; scheduleState *currentState = getCurrentState(); CLocalData::Ptr m_Data = currentState->getLocalData(); m_Data->setSelectInfo(info); if (m_Data->getOffet() < 0) { qCDebug(PluginLogger) << "Resetting offset to 1"; m_Data->setOffset(1); } if (m_Data->getToTime().suggestDatetime.size() == 0 && m_Data->getToTitleName() == "") { qCDebug(PluginLogger) << "Creating inquiry widget for schedule change"; QWidget *infoWidget = createInquiryWidget(info); REPLY_WIDGET_TTS(m_reply, infoWidget, CHANGE_TO_TTS, CHANGE_TO_TTS, false); //添加获å�–修改信æ�¯çжæ€� nextState = new getChangeDataState(this); nextState->setLocalData(m_Data); } else { //获å�–下一个状æ€� qCDebug(PluginLogger) << "Getting next state based on schedule info"; nextState = getNextStateBySelectScheduleInfo(info, m_Data, m_reply); } currentState->setNextState(nextState); return m_reply; } Reply changeScheduleTask::InitState(const JsonData *jsonData, bool isUpdateState) { Reply m_reply; scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); if (jsonData != nullptr) { if (currentState->getLocalData() != nullptr) { qCDebug(PluginLogger) << "Clearing existing local data"; currentState->setLocalData(nullptr); } m_reply = nextState->process(jsonData); } else { REPLY_ONLY_TTS(m_reply, CANCEL_CHANGE_TTS, CANCEL_CHANGE_TTS, true); } if (isUpdateState) { updateState(); } return m_reply; } Reply changeScheduleTask::repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) { changeRepeatSchedule(info, isOnlyOne); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_CHANGE_TTS, CONFIRM_CHANGE_TTS, true); scheduleState *nextState = new queryScheduleState(this); scheduleState *currentState = getCurrentState(); currentState->setNextState(nextState); return reply; } Reply changeScheduleTask::confirwScheduleHandle(const DSchedule::Ptr &info) { Q_UNUSED(info); scheduleState *currentState = getCurrentState(); changeOrdinarySchedule(currentState->getLocalData()->getNewInfo()); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_CHANGE_TTS, CONFIRM_CHANGE_TTS, true); scheduleState *nextState = new queryScheduleState(this); currentState->setNextState(nextState); return reply; } Reply changeScheduleTask::confirmInfo(bool isOK) { scheduleState *currentState = getCurrentState(); if (isOK) { Q_UNUSED(isOK) changeOrdinarySchedule(currentState->getLocalData()->getNewInfo()); Reply reply; REPLY_ONLY_TTS(reply, CONFIRM_CHANGE_TTS, CONFIRM_CHANGE_TTS, true) return reply; } else { return InitState(nullptr); } } QWidget *changeScheduleTask::createRepeatWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *repeatWidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Change, repeatScheduleWidget::Widget_Repeat); repeatWidget->setSchedule(info); connect(repeatWidget, &repeatScheduleWidget::signalButtonCheckNum, this, &changeScheduleTask::slotButtonCheckNum); return repeatWidget; } QWidget *changeScheduleTask::createConfirmWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *cwidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Change, repeatScheduleWidget::Widget_Confirm); cwidget->setSchedule(info); connect(cwidget, &repeatScheduleWidget::signalButtonCheckNum, this, &changeScheduleTask::slotButtonCheckNum); return cwidget; } QWidget *changeScheduleTask::createInquiryWidget(const DSchedule::Ptr &info) { repeatScheduleWidget *infoWidget = new repeatScheduleWidget(repeatScheduleWidget::Operation_Change, repeatScheduleWidget::Widget_Confirm, false); infoWidget->setSchedule(info); return infoWidget; } Reply changeScheduleTask::getListScheduleReply(const DSchedule::List &infoVector) { scheduleListWidget *m_viewWidget = new scheduleListWidget(); connect(m_viewWidget, &scheduleListWidget::signalSelectScheduleIndex, this, &changeScheduleTask::slotSelectScheduleIndex); m_viewWidget->setScheduleInfoVector(infoVector); QString m_TTSMessage; QString m_DisplyMessage; m_TTSMessage = SELECT_CHANGE_TTS; m_DisplyMessage = SELECT_CHANGE_TTS; Reply reply; REPLY_WIDGET_TTS(reply, m_viewWidget, m_TTSMessage, m_DisplyMessage, false); return reply; } scheduleState *changeScheduleTask::getNextStateBySelectScheduleInfo(const DSchedule::Ptr &info, const CLocalData::Ptr &localData, Reply &reply) { qCDebug(PluginLogger) << "Getting next state by schedule info - ID:" << info->uid(); QString m_TTSMessage; QString m_DisplyMessage; //获å�–当å‰�状æ€� scheduleState *currentState = getCurrentState(); //下一个状æ€� scheduleState *nextState{nullptr}; //如果修改的新日程时间在范围内则正常æ��醒 if (getNewInfo()) { //需è¦�显示的窗å�£ qCDebug(PluginLogger) << "Schedule change is within normal range"; QWidget *_showWidget; if (info->getRRuleType() == DSchedule::RRule_None) { qCDebug(PluginLogger) << "Creating confirm widget for non-recurring schedule"; m_TTSMessage = CONFIRM_SCHEDULE_CHANGE_TTS; m_DisplyMessage = CONFIRM_SCHEDULE_CHANGE_TTS; _showWidget = createConfirmWidget(currentState->getLocalData()->getNewInfo()); //设置下一个状æ€�为普通日程确认状æ€� nextState = new confirwFeedbackState(this); } else { qCDebug(PluginLogger) << "Creating repeat widget for recurring schedule"; m_TTSMessage = REPEST_SCHEDULE_CHANGE_TTS; m_DisplyMessage = REPEST_SCHEDULE_CHANGE_TTS; _showWidget = createRepeatWidget(currentState->getLocalData()->getNewInfo()); //设置下一个状æ€�为é‡�å¤�日程确认状æ€� nextState = new repeatfeedbackstate(this); } //设置修改的日程信æ�¯ localData->setNewInfo(currentState->getLocalData()->getNewInfo()); //设置存储数æ�® nextState->setLocalData(localData); REPLY_WIDGET_TTS(reply, _showWidget, m_TTSMessage, m_DisplyMessage, false); } else { //如果修改的日程ä¸�在正常范围内则回å¤�错误,并设置下一个状æ€�为询问查询状æ€� qCDebug(PluginLogger) << "Schedule change is outside normal range"; m_TTSMessage = CHANGE_TIME_OUT_TTS; m_DisplyMessage = CHANGE_TIME_OUT_TTS; REPLY_ONLY_TTS(reply, m_TTSMessage, m_DisplyMessage, true); nextState = new queryScheduleState(this); } return nextState; } bool changeScheduleTask::getNewInfo() { scheduleState *currentState = getCurrentState(); DSchedule::Ptr m_NewInfo = currentState->getLocalData()->SelectInfo(); if (!currentState->getLocalData()->getToTitleName().isEmpty()) { qCDebug(PluginLogger) << "Updating schedule title"; m_NewInfo->setSummary(currentState->getLocalData()->getToTitleName()); } QVector m_ToTime = currentState->getLocalData()->getToTime().dateTime; //获å�–建议时间 QVector m_suggestDatetime = currentState->getLocalData()->getToTime().suggestDatetime; if (m_ToTime.size() > 0) { qCDebug(PluginLogger) << "Processing time changes - Time points:" << m_ToTime.size(); if (m_ToTime.size() == 1) { //如果存在日期信æ�¯ if (m_ToTime.at(0).hasDate) { //获å�–日程的开始结æ�Ÿæ—¶é—´å·® qCDebug(PluginLogger) << "Updating schedule date"; qint64 interval = m_NewInfo->dtStart().secsTo(m_NewInfo->dtEnd()); //设置修改的开始日期 m_NewInfo->setDtStart(QDateTime(m_ToTime.at(0).m_Date, m_NewInfo->dtStart().time())); //设置修改的结æ�Ÿæ—¥æœŸ m_NewInfo->setDtEnd(m_NewInfo->dtStart().addSecs(interval)); } //如果修改的DateTime带时间则设置该时间,å�¦åˆ™ä¿�æŒ�原æ�¥çš„æ—¶é—´ç‚¹ if (m_ToTime.at(0).hasTime) { //如果修改的日期为当天则å�–suggestTimeæ—¶é—´ qCDebug(PluginLogger) << "Updating schedule time"; if (m_NewInfo->dtStart().date() == QDate::currentDate()) { m_NewInfo->setDtStart(m_suggestDatetime.at(0).datetime); } else { m_NewInfo->setDtStart(QDateTime(m_NewInfo->dtStart().date(), m_ToTime.at(0).m_Time)); } m_NewInfo->setDtEnd(m_NewInfo->dtStart().addSecs(3600)); //如果存在时间点则将全天的日程修改为é�žå…¨å¤©å¹¶ä¿®æ”¹æ��醒规则 if (m_NewInfo->allDay()) { qCDebug(PluginLogger) << "Converting all-day schedule to timed schedule"; m_NewInfo->setAllDay(false); //é�žå…¨å¤©è®¾ç½®ä¸ºç«‹å�³æ��醒 m_NewInfo->setAlarmType(DSchedule::Alarm_Begin); } } } if (m_ToTime.size() == 2) { //如果存在日期信æ�¯ qCDebug(PluginLogger) << "Processing start and end time changes"; if (m_ToTime.at(0).hasDate) { //设置修改的开始日期 #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) m_NewInfo->setDtStart(m_ToTime.at(0).m_Date.startOfDay()); #else // Qt5.11.3 兼容:QDate::startOfDay() 从 Qt5.12+ 开始 m_NewInfo->setDtStart(QDateTime(m_ToTime.at(0).m_Date)); #endif } //如果修改的DateTime带时间则设置该时间,å�¦åˆ™ä¿�æŒ�原æ�¥çš„æ—¶é—´ç‚¹ if (m_ToTime.at(0).hasTime) { m_NewInfo->setDtStart(QDateTime(m_NewInfo->dtStart().date(), m_ToTime.at(0).m_Time)); } //如果存在日期信æ�¯ if (m_ToTime.at(1).hasDate) { //设置修改的结æ�Ÿæ—¥æœŸ #if QT_VERSION >= QT_VERSION_CHECK(5, 12, 0) m_NewInfo->setDtEnd(m_ToTime.at(1).m_Date.startOfDay()); #else // Qt5.11.3 兼容:QDate::startOfDay() 从 Qt5.12+ 开始 m_NewInfo->setDtEnd(QDateTime(m_ToTime.at(1).m_Date)); #endif } //如果修改的DateTime带时间则设置该时间,å�¦åˆ™ä¿�æŒ�原æ�¥çš„æ—¶é—´ç‚¹ if (m_ToTime.at(1).hasTime) m_NewInfo->setDtEnd(QDateTime(m_NewInfo->dtEnd().date(), m_ToTime.at(1).m_Time)); //如果开始时间大于结æ�Ÿæ—¶é—´åˆ™è®¾ç½®ç»“æ�Ÿæ—¶é—´ä¸ºå¼€å§‹æ—¶é—´å¾€å�Žä¸€å°�æ—¶ if (m_NewInfo->dtEnd() < m_NewInfo->dtStart()) { qCDebug(PluginLogger) << "Adjusting end time to be after start time"; m_NewInfo->setDtEnd(m_NewInfo->dtStart().addSecs(3600)); } //TODO 对于多个时间点还未支æŒ�,全天é�žå…¨å¤©çš„修改待å�š } } currentState->getLocalData()->setNewInfo(m_NewInfo); return changeDateTimeIsInNormalRange(m_NewInfo); } void changeScheduleTask::changeRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne) { if (isOnlyOne) { changeOnlyInfo(info); } else { changeAllInfo(info); } } void changeScheduleTask::changeOnlyInfo(const DSchedule::Ptr &info) { Q_UNUSED(info) scheduleState *currentState = getCurrentState(); DSchedule::Ptr newschedule = currentState->getLocalData()->getNewInfo(); //原始信æ�¯ DSchedule::Ptr updatescheduleData = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(newschedule->uid()); updatescheduleData->recurrence()->addExDateTime(newschedule->dtStart()); newschedule->setRRuleType(DSchedule::RRule_None); newschedule->setUid(DScheduleDataManager::getInstance()->createSchedule(newschedule)); DScheduleDataManager::getInstance()->updateSchedule(updatescheduleData); } void changeScheduleTask::changeAllInfo(const DSchedule::Ptr &info) { scheduleState *currentState = getCurrentState(); DSchedule::Ptr newinfo = currentState->getLocalData()->getNewInfo(); if (info->getRRuleType() == DSchedule::RRule_None) { qCDebug(PluginLogger) << "Updating non-recurring schedule"; DSchedule::Ptr schedule = newinfo; DScheduleDataManager::getInstance()->updateSchedule(schedule); } else { //获å�–原始日程信æ�¯ DSchedule::Ptr updatescheduleData = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(info->uid()); //第几次é‡�å¤�日程 int repetNum = DSchedule::numberOfRepetitions(updatescheduleData, newinfo->dtStart()); qCDebug(PluginLogger) << "Processing repeat schedule change - Repetition number:" << repetNum; if (repetNum == 1) { //如果为第一个 qCDebug(PluginLogger) << "Updating first instance of repeat schedule"; DScheduleDataManager::getInstance()->updateSchedule(newinfo); } else { //如果ä¸�是第一个 if (newinfo->recurrence()->duration() > 1) { qCDebug(PluginLogger) << "Adjusting repeat schedule duration"; int duration = newinfo->recurrence()->duration() - repetNum + 1; //结æ�ŸäºŽæ¬¡æ•° if (duration < 2) { newinfo->setRRuleType(DSchedule::RRule_None); } else { newinfo->recurrence()->setDuration(duration); } //修改原始日程,如果原始日程剩余的é‡�å¤�次数为1,则修改为普通日程 updatescheduleData->recurrence()->setDuration(repetNum - 1); if (updatescheduleData->recurrence()->duration() == 1) { updatescheduleData->setRRuleType(DSchedule::RRule_None); } } else if (newinfo->recurrence()->duration() == 0) { //结æ�ŸäºŽæ—¶é—´ qCDebug(PluginLogger) << "Adjusting repeat schedule end date"; if (newinfo->dtStart().date() == newinfo->recurrence()->endDateTime().date()) { newinfo->setRRuleType(DSchedule::RRule_None); } updatescheduleData->recurrence()->setEndDate(newinfo->dtStart().date().addDays(-1)); if (updatescheduleData->dtStart().date() == updatescheduleData->recurrence()->endDate()) { updatescheduleData->setRRuleType(DSchedule::RRule_None); } } else { //æ°¸ä¸� qCDebug(PluginLogger) << "Adjusting infinite repeat schedule"; updatescheduleData->recurrence()->setEndDate(newinfo->dtStart().date().addDays(-1)); if (updatescheduleData->dtStart().date() == updatescheduleData->recurrence()->endDate()) { updatescheduleData->setRRuleType(DSchedule::RRule_None); } } DScheduleDataManager::getInstance()->createSchedule(newinfo); //修改原始日程 DScheduleDataManager::getInstance()->updateSchedule(updatescheduleData); } } } void changeScheduleTask::changeOrdinarySchedule(const DSchedule::Ptr &info) { DScheduleDataManager::getInstance()->updateSchedule(info); } bool changeScheduleTask::changeDateTimeIsInNormalRange(const DSchedule::Ptr &info) { bool result {true}; //当å‰�æ—¶é—´ QDateTime currentDateTime {QDateTime::currentDateTime()}; //最大时间 QDateTime maxDateTime = currentDateTime.addMonths(6); //如果开始时间为过期时间则为false if (info->dtStart() < currentDateTime) { qCDebug(PluginLogger) << "Schedule start time is in the past"; result = false; } if (info->dtStart() > maxDateTime || info->dtEnd() > maxDateTime) { qCDebug(PluginLogger) << "Schedule time is beyond maximum range"; result = false; } return result; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/changescheduletask.h000066400000000000000000000050131523260663500303730ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CHANGESCHEDULETASK_H #define CHANGESCHEDULETASK_H #include "schedulebasetask.h" #include "dschedule.h" #include "clocaldata.h" class changeScheduleTask : public scheduleBaseTask { Q_OBJECT public: explicit changeScheduleTask(); Reply getFeedbackByQuerySchedule(const DSchedule::List &infoVector) override; Reply getReplyBySelectSchedule(const DSchedule::Ptr &info) override; Reply InitState(const JsonData *jsonData, bool isUpdateState = false) override; Reply repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) override; Reply confirwScheduleHandle(const DSchedule::Ptr &info) override; Reply confirmInfo(bool isOK) override; public slots: void slotSelectScheduleIndex(int index); void slotButtonCheckNum(int index, const QString &text, const int buttonCount); private: scheduleState *getCurrentState(); QWidget *createRepeatWidget(const DSchedule::Ptr &info); QWidget *createConfirmWidget(const DSchedule::Ptr &info); QWidget *createInquiryWidget(const DSchedule::Ptr &info); Reply getListScheduleReply(const DSchedule::List &infoVector); /** * @brief getNextStateBySelectScheduleInfo æ ¹æ�®é€‰æ‹©çš„æ—¥ç¨‹èŽ·å�–下一个修改状æ€� * @param info 选择的日程信æ�¯ * @param localData 当å‰�状æ€�的存储数æ�® * @param reply 修改的回å¤� * @return 下一个状æ€� */ scheduleState *getNextStateBySelectScheduleInfo(const DSchedule::Ptr &info, const CLocalData::Ptr &localData, Reply &reply); /** * @brief getNewInfo æ ¹æ�®ä¿®æ”¹ä¿¡æ�¯èŽ·å�–新的日程信æ�¯ * @return 在时间范围内返回true */ bool getNewInfo(); void changeRepeatSchedule(const DSchedule::Ptr &info, bool isOnlyOne); void changeOnlyInfo(const DSchedule::Ptr &info); void changeAllInfo(const DSchedule::Ptr &info); void changeOrdinarySchedule(const DSchedule::Ptr &info); /** * @brief changeDateTimeIsInRange 判断修改的日期在正确的时间范围内 * @param info 修改过的日程 * @return 在正常范围内则返回true */ bool changeDateTimeIsInNormalRange(const DSchedule::Ptr &info); private: DSchedule::List m_scheduleInfo; }; #endif // CHANGESCHEDULETASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/createscheduletask.cpp000066400000000000000000001151161523260663500307520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "createscheduletask.h" #include "../globaldef.h" #include "commondef.h" #include "dscheduledatamanager.h" createScheduleTask::createScheduleTask() : scheduleBaseTask() { } Reply createScheduleTask::SchedulePress(semanticAnalysisTask &semanticTask) { //创建 CreateJsonData *createJsonData = dynamic_cast(semanticTask.getJsonData()); //如果转æ�¢å¤±è´¥åˆ™è¿”回错误消æ�¯ if (createJsonData == nullptr) { qCWarning(PluginLogger) << "Failed to cast json data to CreateJsonData"; return errorMessage(); } Reply m_reply; if (createJsonData->getPropertyStatus() != JsonData::PRO_NONE || createJsonData->offset() > -1) { qCWarning(PluginLogger) << "Invalid property status or offset - Status:" << createJsonData->getPropertyStatus() << "Offset:" << createJsonData->offset(); REPLY_ONLY_TTS(m_reply, CREATE_ERR_TTS, CREATE_ERR_TTS, true); return m_reply; } //如果时间无效 if (createJsonData->getDateTimeInvalid()) { qCWarning(PluginLogger) << "Invalid date time in create request"; REPLY_ONLY_TTS(m_reply, DATETIME_ERR_TTS, DATETIME_ERR_TTS, true); return m_reply; } m_widget = new createSchedulewidget(); //设置日程时间 setDateTime(createJsonData); if (m_begintime > m_endtime) { //日程的开始时间大于结æ�Ÿæ—¶é—´ï¼Œ qCritical(PluginLogger) << "Invalid schedule time range - Begin:" << m_begintime << "End:" << m_endtime; } if (shouldEndSession(createJsonData)) { if (!isValidDateTime) { qCInfo(PluginLogger) << "Invalid schedule time - Begin:" << m_begintime << "End:" << m_endtime; //无效时间,直接返回回å¤�语 REPLY_ONLY_TTS(m_reply, replyNotValidDT, replyNotValidDT, true); //设置时间有效标志为true isValidDateTime = true; return m_reply; } else if (!beginDateTimeIsinHalfYear()) { if (beginDateTimeBeforeCurrent()) { qCInfo(PluginLogger) << "Schedule begin time is before current time - Begin:" << m_begintime; //"我现在有点慌,因为我还ä¸�会制定过去的æ��醒" REPLY_ONLY_TTS(m_reply, createJsonData->SuggestMsg(), createJsonData->SuggestMsg(), true); } else if (beginDateTimeOutHalfYear()) { qCInfo(PluginLogger) << "Schedule begin time is beyond half year - Begin:" << m_begintime; //"å�ªèƒ½åˆ›å»ºæœªæ�¥å�Šå¹´çš„æ—¥ç¨‹" REPLY_ONLY_TTS(m_reply, CREATE_TIME_OUT_TTS, CREATE_TIME_OUT_TTS, true); } return m_reply; } else { //设置日程titlename setScheduleTitleName(createJsonData); //创建日程和æ�’ä»¶ QString scheduleID = createScheduleWithRepeatStatus(createJsonData); qCInfo(PluginLogger) << "Created schedule with ID:" << scheduleID; creareScheduleUI(scheduleID); //带有æ�’件的回å¤�语 REPLY_WIDGET_TTS(m_reply, m_widget, getReply(createJsonData), getReply(createJsonData), true); } } else { //如果需è¦�进行多轮,需è¦�先将此标志设置为true isValidDateTime = true; qCDebug(PluginLogger) << "Starting multi-round schedule creation"; //开始date为今天,没有给time(默认为00:00,å°�于当å‰�time),需è¦�进行多轮,设置默认回å¤�语 //å�ªæœ‰å›žå¤�语 REPLY_ONLY_TTS(m_reply, createJsonData->SuggestMsg(), createJsonData->SuggestMsg(), false); } return m_reply; } void createScheduleTask::setDateTime(CreateJsonData *createJsonData) { //助手返回时间的个数 int DateTimeSize = createJsonData->getDateTime().suggestDatetime.size(); switch (DateTimeSize) { case 1: { //å�ªæœ‰ä¸€ä¸ªæ—¶é—´ï¼Œä¸ºæ—¥ç¨‹å¼€å§‹æ—¶é—´ï¼Œç»“æ�Ÿæ—¶é—´ä¸ºå¼€å§‹æ—¶é—´ä¸€ä¸ªå°�æ—¶å�Ž m_begintime = createJsonData->getDateTime().suggestDatetime.at(0).datetime; m_endtime = m_begintime.addSecs(60 * 60); qCDebug(PluginLogger) << "Single time point - Begin:" << m_begintime << "End:" << m_endtime; if (!validDateTime(m_begintime)) { //日程时间是å�¦æœ‰æ•ˆ QString strDateTime = createJsonData->getDateTime().suggestDatetime.at(0).strDateTime; qCWarning(PluginLogger) << "Invalid date time:" << strDateTime; isValidDateTime = false; replyNotValidDT = QString(ISVALID_DATE_TIME).arg(strDateTime); break; } if (!createJsonData->getDateTime().suggestDatetime.at(0).hasTime) { qCDebug(PluginLogger) << "No time specified, using current time"; m_begintime.setTime(QTime::currentTime()); m_endtime = m_begintime.addSecs(60 * 60); } } break; case 2: { //日程是å�¦å¸¦æœ‰å…·ä½“æ—¶é—´ bool firstScheduleHasTime = createJsonData->getDateTime().suggestDatetime.at(0).hasTime; bool secondScheduleHasTime = createJsonData->getDateTime().suggestDatetime.at(1).hasTime; qCDebug(PluginLogger) << "Two time points - First has time:" << firstScheduleHasTime << "Second has time:" << secondScheduleHasTime; //有两个时间 m_begintime = createJsonData->getDateTime().suggestDatetime.at(0).datetime; m_endtime = createJsonData->getDateTime().suggestDatetime.at(1).datetime; //日程开始时间是å�¦æœ‰æ•ˆ if (!validDateTime(m_begintime)) { QString strDateTime = createJsonData->getDateTime().suggestDatetime.at(0).strDateTime; qCWarning(PluginLogger) << "Invalid begin date time:" << strDateTime; isValidDateTime = false; replyNotValidDT = QString(ISVALID_DATE_TIME).arg(strDateTime); break; } //日程结æ�Ÿæ—¶é—´æ˜¯å�¦æœ‰æ•ˆ if (!validDateTime(m_endtime)) { QString endDateTime = createJsonData->getDateTime().suggestDatetime.at(1).strDateTime; qCWarning(PluginLogger) << "Invalid end date time:" << endDateTime; isValidDateTime = false; replyNotValidDT = QString(ISVALID_DATE_TIME).arg(endDateTime); break; } //开始时间为当天的,如果开始日期å°�于当天ä¸�å�šå¤„ç�†ï¼Œ if (m_begintime.date() == QDateTime::currentDateTime().date()) { if (m_begintime.time() > QTime::currentTime()) { //跨天日程,如果日程开始时间大于当å‰�时间,则开始时间为当天 qCDebug(PluginLogger) << "Adjusting begin time for same day schedule"; m_begintime.setDate(m_begintime.date().addDays(m_begintime.date().daysTo(QDate::currentDate()))); } else { //跨天日程,如果日程开始时间å°�于等于当å‰�时间,则开始时间加一天 qCDebug(PluginLogger) << "Adjusting begin time to next day"; m_begintime.setDate(m_begintime.date().addDays(m_begintime.date().daysTo(QDate::currentDate()) + 1)); } } //开始时间没有具体时间点,设置为当å‰�时间点 if (firstScheduleHasTime && !secondScheduleHasTime) { qCDebug(PluginLogger) << "Setting end time to match begin time"; m_endtime.setTime(m_begintime.time()); } else if (!firstScheduleHasTime && secondScheduleHasTime) { qCDebug(PluginLogger) << "Setting begin time to match end time"; m_begintime.setTime(m_endtime.time()); } } break; default: { //其他情况视为错误输入 qCWarning(PluginLogger) << "Invalid number of date time suggestions:" << DateTimeSize; isValidDateTime = false; replyNotValidDT = "您输入的时间ä¸�正确,请é‡�新输入"; } break; } } void createScheduleTask::setScheduleTitleName(CreateJsonData *createJsonData) { if (createJsonData->TitleName().isEmpty()) //如果没有titlename,默认为:新建日程 m_widget->setTitleName(NEW_SCHEDULE); else //设置日程titlename m_widget->setTitleName(createJsonData->TitleName()); } QString createScheduleTask::createScheduleWithRepeatStatus(CreateJsonData *createJsonData) { qCDebug(PluginLogger) << "Creating schedule with repeat status:" << createJsonData->getRepeatStatus(); //创建的日程信æ�¯ QString scheduleID; //é‡�å¤�日程的时间 QVector getDayNum = createJsonData->getRepeatNum(); //æ ¹æ�®ä¸�å�Œç±»åž‹åˆ†åˆ«åˆ›å»ºæ—¥ç¨‹ switch (createJsonData->getRepeatStatus()) { case CreateJsonData::NONE: { //é�žé‡�å¤�日程,ä¸�能创建过期日程 if (m_begintime >= QDateTime::currentDateTime() && m_begintime < QDateTime::currentDateTime().addMonths(6)) { qCDebug(PluginLogger) << "Creating non-repeating schedule"; scheduleID = getNotRepeatDaySchedule(); } } break; case CreateJsonData::EVED: //æ¯�天é‡�å¤�日程 qCDebug(PluginLogger) << "Creating daily repeating schedule"; scheduleID = getEveryDaySchedule(); break; case CreateJsonData::EVEW: { //æ¯�周é‡�å¤�日程 qCDebug(PluginLogger) << "Creating weekly repeating schedule - Days:" << getDayNum; scheduleID = getEveryWeekSchedule(getDayNum); } break; case CreateJsonData::EVEM: { //æ¯�月é‡�å¤�日程 qCDebug(PluginLogger) << "Creating monthly repeating schedule - Days:" << getDayNum; scheduleID = getEveryMonthSchedule(getDayNum); } break; case CreateJsonData::EVEY: { //æ¯�å¹´é‡�å¤�日程,ä¸�能创建过期或者超过å�Šå¹´çš„æ—¥ç¨‹ if (m_begintime > QDateTime::currentDateTime() && m_begintime < QDateTime::currentDateTime().addMonths(6)) { qCDebug(PluginLogger) << "Creating yearly repeating schedule"; scheduleID = getEveryYearSchedule(); } } break; case CreateJsonData::WORKD: //工作日 qCDebug(PluginLogger) << "Creating workday repeating schedule"; scheduleID = getEveryWorkDaySchedule(); break; case CreateJsonData::RESTD: { //休æ�¯æ—¥ qCDebug(PluginLogger) << "Creating rest day repeating schedule"; scheduleID = getEveryRestDaySchedule(); } break; } qCDebug(PluginLogger) << "Created schedule with ID:" << scheduleID; return scheduleID; } void createScheduleTask::creareScheduleUI(const QString &scheduleID) { if (!scheduleID.isEmpty()) { m_widget->scheduleEmpty(true); //更新界é�¢ m_widget->updateUI(scheduleID); } else { qCritical("Creat ScheduleInfo is Empty!"); } } QString createScheduleTask::getReply(CreateJsonData *createJsonData) { QString str_reply; //为特殊情况拼接回å¤�语 if (createJsonData->getRepeatStatus() == CreateJsonData::RESTD && createJsonData->getDateTime().suggestDatetime.size() > 0 && createJsonData->getDateTime().suggestDatetime.at(0).hasTime) { //如果为休æ�¯æ—¥ï¼Œå¹¶ä¸”有开始时间,拼接回å¤�语 str_reply = QString(EVERY_WEEKEND_TTS).arg(m_begintime.toString("hh:mm")); } else if (createJsonData->getRepeatStatus() == CreateJsonData::NONE && createJsonData->getDateTime().suggestDatetime.size() > 0 && createJsonData->getDateTime().suggestDatetime.at(0).hasTime && createJsonData->getDateTime().suggestDatetime.at(0).datetime < QDateTime::currentDateTime() && createJsonData->getDateTime().suggestDatetime.size() == 2 && createJsonData->ShouldEndSession()) { //对于跨天日程,开始datetimeå°�于当å‰�datetime,则开始date增加一天,为其拼接回å¤�语 str_reply = QString(BEGINDATETIME_LATER_THAN_CURRENTDATETIME_ACROSS_THE_DAY_TTS).arg(m_begintime.toString("hh:mm")); } else { //没有特殊情况使用默认回å¤�语 str_reply = createJsonData->SuggestMsg(); } return str_reply; } bool createScheduleTask::beginDateTimeIsinHalfYear() { qCDebug(PluginLogger) << "Checking if begin time is within half year - Begin:" << m_begintime; //判断日程开始时间是å�¦åœ¨å�Šå¹´å†… if (m_begintime < QDateTime::currentDateTime() || m_begintime > QDateTime::currentDateTime().addMonths(6)) { qCDebug(PluginLogger) << "Begin time is outside half year range"; return false; } qCDebug(PluginLogger) << "Begin time is within half year range"; return true; } bool createScheduleTask::beginDateTimeOutHalfYear() { qCDebug(PluginLogger) << "Checking if begin time is beyond half year - Begin:" << m_begintime; //日程开始时间ä¸�在å�Šå¹´èŒƒå›´å†… if (m_begintime > QDateTime::currentDateTime().addMonths(6)) { qCDebug(PluginLogger) << "Begin time is beyond half year"; return true; } return false; } bool createScheduleTask::beginDateTimeBeforeCurrent() { qCDebug(PluginLogger) << "Checking if begin time is before current time - Begin:" << m_begintime; //日程开始时间早于当å‰�æ—¶é—´ if (m_begintime < QDateTime::currentDateTime()) { qCDebug(PluginLogger) << "Begin time is before current time"; return true; } return false; } QString createScheduleTask::getNotRepeatDaySchedule() { qCDebug(PluginLogger) << "Creating non-repeating schedule - Begin:" << m_begintime << "End:" << m_endtime; //设置é‡�å¤�类型 m_widget->setRpeat(0); //创建日程 DSchedule::Ptr scheduleinfo = setDateTimeAndGetSchedule(m_begintime, m_endtime); return DScheduleDataManager::getInstance()->createSchedule(scheduleinfo); } QString createScheduleTask::getEveryDaySchedule() { qCDebug(PluginLogger) << "Creating daily repeating schedule - Begin:" << m_begintime << "End:" << m_endtime; //设置é‡�å¤�类型 m_widget->setRpeat(1); DSchedule::Ptr scheduleinfo = setDateTimeAndGetSchedule(m_begintime, m_endtime); //设置完æˆ�å�Žï¼Œå°†everyDayState设置为false everyDayState = false; //创建日程 return DScheduleDataManager::getInstance()->createSchedule(scheduleinfo); } QString createScheduleTask::getEveryWeekSchedule(QVector dateRange) { QStringList scheduleIDs; //设置é‡�å¤�类型 m_widget->setRpeat(3); QVector beginDateTime {}; //获å�–è§£æž�æ—¶é—´ beginDateTime = analysisEveryWeekDate(dateRange); //æ¯�天é‡�å¤� if (everyDayState) return getEveryDaySchedule(); for (int i = 0; i < beginDateTime.count(); i++) { //设置日程结æ�Ÿæ—¶é—´ m_endtime.setDate(beginDateTime.at(i).date()); //创建日程 scheduleIDs.append(DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime))); } //创建多个日程返回第一个 return scheduleIDs.isEmpty() ? QString() : scheduleIDs.first(); } QString createScheduleTask::getEveryMonthSchedule(QVector dateRange) { QVector beginDateTime {}; QStringList scheduleIDs; //设置é‡�å¤�类型 m_widget->setRpeat(4); //获å�–è§£æž�日期 beginDateTime = analysisEveryMonthDate(dateRange); //æ¯�天é‡�å¤� if (everyDayState) return getEveryDaySchedule(); for (int i = 0; i < beginDateTime.count(); i++) { //设置日程结æ�Ÿæ—¶é—´ m_endtime.setDate(beginDateTime.at(i).date()); //创建日程 scheduleIDs.append(DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime))); } //创建多个日程返回第一个 return scheduleIDs.isEmpty() ? QString() : scheduleIDs.first(); } QString createScheduleTask::getEveryYearSchedule() { //设置é‡�å¤�类型 m_widget->setRpeat(5); //创建日程 return DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(m_begintime, m_endtime)); } QString createScheduleTask::getEveryWorkDaySchedule() { // QVector beginDateTime {}; // DSchedule::List schedule; //获å�–è§£æž�日期 // beginDateTime = analysisWorkDayDate(); //设置é‡�å¤�类型 m_widget->setRpeat(2); //创建日程 return DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(m_begintime, m_endtime)); // for (int i = 0; i < beginDateTime.count(); i++) { // //设置日程结æ�Ÿæ—¶é—´ // m_endtime.setDate(beginDateTime.at(i).date()); // //创建日程 // DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime)); // //将所有日程添加到日程容器中 // schedule.append(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime)); // } // return schedule; } QString createScheduleTask::getEveryRestDaySchedule() { QVector beginDateTime {}; QStringList scheduleIDs; //设置é‡�å¤�类型 m_widget->setRpeat(3); //获å�–è§£æž�的时间 beginDateTime = analysisRestDayDate(); for (int i = 0; i < beginDateTime.count(); i++) { //设置日程结æ�Ÿæ—¶é—´ m_endtime.setDate(beginDateTime.at(i).date()); //创建日程 scheduleIDs.append(DScheduleDataManager::getInstance()->createSchedule(setDateTimeAndGetSchedule(beginDateTime.at(i), m_endtime))); } //创建多个日程返回第一个 return scheduleIDs.isEmpty() ? QString() : scheduleIDs.first(); } DSchedule::Ptr createScheduleTask::getFirstSchedule(DSchedule::List scheduleInfo) { //第一个日程的时间 QDate earlyDate = scheduleInfo.at(0)->dtStart().date(); //第一个日程的索引 int index = 0; for (int i = 1; i < scheduleInfo.count(); i++) { if (earlyDate > scheduleInfo.at(i)->dtStart().date()) { earlyDate = scheduleInfo.at(i)->dtStart().date(); index = i; } } return scheduleInfo.at(index); } int createScheduleTask::getCreatesDays(int firstDay, int secondday, bool containsToday) { if (containsToday) //如果包å�«ä»Šå¤©+1 return secondday - firstDay + 1; else //ä¸�包å�«ä»Šå¤© return secondday - firstDay; } QVector createScheduleTask::getNoneWeekNumDate() { QVector beginDateTime {}; if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当天时间 m_begintime.setDate(QDate::currentDate()); } else { //日程开始时间å°�于等于当天时间 m_begintime.setDate(QDate::currentDate().addDays(1)); } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getOneWeekNumDate(int firstWeekNum) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); if (firstWeekNum >= currentDayofWeek) { //开始周数大于等于今天所在周数 if (firstWeekNum == currentDayofWeek && m_begintime.time() <= QTime::currentTime()) { //开始周数等于今天所在周数,并且日程开始时间å°�于等于当å‰�æ—¶é—´ m_begintime.setDate(QDate::currentDate().addDays(firstWeekNum + 7 - currentDayofWeek)); } else { //日程开始时间大于当å‰�æ—¶é—´ m_begintime.setDate(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek)); } } else { //开始周数å°�于今天所在周数 m_begintime.setDate(QDate::currentDate().addDays(firstWeekNum + 7 - currentDayofWeek)); } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getTwoWeekNumDate(int firstWeekNum, int secondWeekNum) { QVector beginDateTime {}; if (firstWeekNum == secondWeekNum || secondWeekNum - firstWeekNum == 6) { //开始周数等于结æ�Ÿå‘¨æ•°ï¼Œæˆ–者结æ�Ÿå‘¨æ•°æ˜¯7开始周数是1,为æ¯�天 everyDayState = true; return beginDateTime; } else if (firstWeekNum < secondWeekNum) { //开始周数å°�于结æ�Ÿå‘¨æ•° beginDateTime = firstWeekNumLessThanSecond(firstWeekNum, secondWeekNum); } else { //开始周数大于结æ�Ÿå‘¨æ•° if (firstWeekNum - secondWeekNum == 1) { //开始周数比结æ�Ÿå‘¨æ•°å¤§1,为æ¯�天 everyDayState = true; return beginDateTime; } else { //除去æ¯�天的其他情况 beginDateTime = firstWeekNumGreaterThanSecondButEveryDay(firstWeekNum, secondWeekNum); } } return beginDateTime; } QVector createScheduleTask::firstWeekNumLessThanSecond(int firstWeekNum, int secondWeekNum) { //对于工作日和休æ�¯æ—¥çš„æƒ…况,助手已自动区分,此处ä¸�å†�讨论 //对获å�–到的时间范围分情况讨论 QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); //当å‰�日期所在周数å°�于开始的周数 if (currentDayofWeek < firstWeekNum) { beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, secondWeekNum)); } else if (currentDayofWeek >= firstWeekNum && currentDayofWeek <= secondWeekNum) { if (m_begintime.time() > QTime::currentTime()) { //开始时间大于当å‰�æ—¶é—´ beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate(), secondWeekNum, true)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, false)); } else { //开始时间å°�于等于当å‰�æ—¶é—´ beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate().addDays(1), secondWeekNum, false)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, true)); } } else if (currentDayofWeek > secondWeekNum) { beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum + 7 - currentDayofWeek), firstWeekNum, secondWeekNum)); } return beginDateTime; } QVector createScheduleTask::firstWeekNumGreaterThanSecondButEveryDay(int firstWeekNum, int secondWeekNum) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); if (currentDayofWeek >= firstWeekNum) { //今天所在周数大于等于开始周数 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate(), 7, true)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(1 + 7 - currentDayofWeek), 1, secondWeekNum)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, false)); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate().addDays(1), 7, false)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(1 + 7 - currentDayofWeek), 1, secondWeekNum)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), firstWeekNum, true)); } } else if (currentDayofWeek < firstWeekNum && currentDayofWeek > secondWeekNum) { //今天所在周数å°�于开始周数,大于结æ�Ÿå‘¨æ•° beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, 7)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(1 + 7 - currentDayofWeek), 1, secondWeekNum)); } else if (currentDayofWeek <= secondWeekNum) { //今天所在周数å°�于等于结æ�Ÿå‘¨æ•° if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate(), secondWeekNum, true)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, 7)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), 1, false)); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ beginDateTime.append(getWeekBackPartDateTime(QDate::currentDate().addDays(1), secondWeekNum, false)); beginDateTime.append(getWeekAllDateTime(QDate::currentDate().addDays(firstWeekNum - currentDayofWeek), firstWeekNum, 7)); beginDateTime.append(getWeekFrontPartDateTime(QDate::currentDate(), 1, true)); } } return beginDateTime; } QVector createScheduleTask::getWeekAllDateTime(QDate BeginDate, int firstWeekNum, int secondWeekNum) { QVector beginDateTime; for (int i = 0; i < secondWeekNum - firstWeekNum + 1; i ++) { m_begintime.setDate(BeginDate.addDays(i)); beginDateTime.append(m_begintime); } return beginDateTime; } QVector createScheduleTask::getWeekFrontPartDateTime(QDate BeginDate, int firstWeekNum, bool containsToday) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); int addDays = getCreatesDays(firstWeekNum, currentDayofWeek, containsToday); for (int i = 0; i < addDays; i++) { m_begintime.setDate(BeginDate.addDays(firstWeekNum + 7 - currentDayofWeek + i)); beginDateTime.append(m_begintime); } return beginDateTime; } QVector createScheduleTask::getWeekBackPartDateTime(QDate BeginDate, int secondWeekNum, bool containsToday) { QVector beginDateTime {}; int currentDayofWeek = QDate::currentDate().dayOfWeek(); int addDays = getCreatesDays(currentDayofWeek, secondWeekNum, containsToday); for (int i = 0; i < addDays; i++) { m_begintime.setDate(BeginDate.addDays(i)); beginDateTime.append(m_begintime); } return beginDateTime; } DSchedule::Ptr createScheduleTask::setDateTimeAndGetSchedule(QDateTime beginDateTime, QDateTime endDateTime) { qCDebug(PluginLogger) << "Setting schedule date time and getting schedule - Begin:" << beginDateTime << "End:" << endDateTime; m_widget->setDateTime(beginDateTime, endDateTime); m_widget->setschedule(); return m_widget->getScheduleDtailInfo(); } QVector createScheduleTask::analysisWorkDayDate() { QVector beginDateTime {}; if (m_begintime.date().dayOfWeek() == 6) m_begintime.setDate(m_begintime.date().addDays(2)); if (m_begintime.date().dayOfWeek() == 7) m_begintime.setDate(m_begintime.date().addDays(1)); beginDateTime.append(m_begintime); return beginDateTime; } QDate createScheduleTask::getValidDate(QDate viewDate, int viewDateDay) { //设置一个无效时间 QDate validDate(QDate(0, 0, 0)); //åˆ�始化年 int month = viewDate.month(); //判断未æ�¥å�Šå¹´çš„æ—¶é—´æ˜¯å�¦å�ˆæ³• for (int i = month; i <= month + 6; i++) { //设置月 validDate = viewDate.addMonths(i - month); //设置时间 validDate.setDate(validDate.year(), validDate.month(), viewDateDay); //判断日期是å�¦å�ˆæ³• if (validDate.isValid()) return validDate; } //返回判断时间 return validDate; } /** * @brief createScheduleTask::shouldEndSession 是å�¦éœ€è¦�进行多轮 * @return */ bool createScheduleTask::shouldEndSession(CreateJsonData *createjsondate) { return createjsondate->ShouldEndSession(); } /** * @brief createScheduleTask::validDateTime 是å�¦æ˜¯æœ‰æ•ˆæ—¶é—´ * @param datetime 查询的时间 * @return */ bool createScheduleTask::validDateTime(QDateTime datetime) { return datetime.isValid(); } QVector createScheduleTask::analysisEveryWeekDate(QVector dateRange) { QVector beginDateTime {}; switch (dateRange.size()) { case 0: { //æ¯�周é‡�å¤�日程,没有具体周数 beginDateTime = getNoneWeekNumDate(); } break; case 1: { //æ¯�周é‡�å¤�日程,å�ªæœ‰ä¸€ä¸ªå‘¨æ•° beginDateTime = getOneWeekNumDate(dateRange[0]); } break; case 2: { //æ¯�周é‡�å¤�日程,有两个周数 beginDateTime = getTwoWeekNumDate(dateRange[0], dateRange[1]); } break; } return beginDateTime; } QVector createScheduleTask::analysisEveryMonthDate(QVector dateRange) { QVector beginDateTime {}; switch (dateRange.size()) { case 0: { //æ¯�月é‡�å¤�日程,没有具体日期 beginDateTime = getNoneMonthNumDate(); } break; case 1: { //æ¯�月é‡�å¤�日程,å�ªæœ‰ä¸€ä¸ªæ—¥æœŸ beginDateTime = getOneMonthNumDate(dateRange[0]); } break; case 2: { //æ¯�月é‡�å¤�日程,有两个日期 beginDateTime = getTwoMonthNumDate(dateRange[0], dateRange[1]); } break; } return beginDateTime; } QVector createScheduleTask::getNoneMonthNumDate() { QVector beginDateTime {}; if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ m_begintime.setDate(QDate::currentDate()); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ m_begintime.setDate(QDate::currentDate().addDays(1)); } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getOneMonthNumDate(int firstMonthNum) { QVector beginDateTime {}; //今天 int currentDayofMonth = QDate::currentDate().day(); if (currentDayofMonth < firstMonthNum) { //今天å°�于开始日期 //获å�–å�ˆæ³•日期 QDate validDate = getValidDate(QDate::currentDate(), firstMonthNum); //日期å�ˆæ³•,设置日期 if (validDate.isValid()) m_begintime.setDate(validDate); } else if (currentDayofMonth > firstMonthNum) { //获å�–å�ˆæ³•日期 QDate validDate = getValidDate(QDate::currentDate().addMonths(1), firstMonthNum); //日期å�ˆæ³•,设置日期 if (validDate.isValid()) m_begintime.setDate(validDate); } else { //当å‰�日期等于开始日期 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ m_begintime.setDate(QDate::currentDate()); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ m_begintime.setDate(QDate::currentDate().addMonths(1)); } } beginDateTime.append(m_begintime); return beginDateTime; } QVector createScheduleTask::getTwoMonthNumDate(int firstMonthNum, int secondMonthNum) { QVector beginDateTime {}; if (firstMonthNum == secondMonthNum) { //开始日期等于结æ�Ÿæ—¥æœŸï¼Œä¸ºæ¯�天 everyDayState = true; return beginDateTime; } else if (firstMonthNum < secondMonthNum) { //开始日期å°�于结æ�Ÿæ—¥æœŸ beginDateTime.append(firstMonthNumLessThanSecond(firstMonthNum, secondMonthNum)); } else { //开始日期大于结æ�Ÿæ—¥æœŸ if (firstMonthNum - secondMonthNum == 1) { //开始日期和结æ�Ÿæ—¥æœŸå·®ä¸€å¤©ï¼Œä¸ºæ¯�天 everyDayState = true; return beginDateTime; } else { //开始日期大于结æ�Ÿæ—¥æœŸçš„其他情况 beginDateTime.append(firstMonthNumGreaterThanSecondButEveryDay(firstMonthNum, secondMonthNum)); } } return beginDateTime; } QVector createScheduleTask::firstMonthNumLessThanSecond(int firstMonthNum, int secondWMonthNum) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); if (currentDayofMonth < firstMonthNum) { //今天的日期å°�于开始日期 beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, secondWMonthNum)); } else if (currentDayofMonth >= firstMonthNum && currentDayofMonth <= secondWMonthNum) { //今天的日期大于等于开始日期,å°�于等于结æ�Ÿæ—¥æœŸ if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate(), secondWMonthNum, true)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, false)); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate().addDays(1), secondWMonthNum, false)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, true)); } } else if (currentDayofMonth > secondWMonthNum) { //今天的日程大于结æ�Ÿæ—¥æœŸ beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth).addMonths(1), firstMonthNum, secondWMonthNum)); } return beginDateTime; } QVector createScheduleTask::getMonthAllDateTime(QDate BeginDate, int firstMonthNum, int secondMonthNum) { QVector beginDateTime; //设置日期 for (int i = firstMonthNum; i <= secondMonthNum; i++) { //日期是å�¦å�ˆæ³• QDate validDate = getValidDate(BeginDate, i); //å�ˆæ³•日期,设置日期 if (validDate.isValid()) { m_begintime.setDate(validDate); beginDateTime.append(m_begintime); } } return beginDateTime; } QVector createScheduleTask::getMonthFrontPartDateTime(QDate BeginDate, int firstMonthNum, bool containsToday) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); //包å�«ä»Šå¤© if (containsToday) currentDayofMonth += 1; //设置日期 for (int i = firstMonthNum; i < currentDayofMonth; i++) { //获å�–å�ˆæ³•日期 QDate validDate = getValidDate(BeginDate.addDays(firstMonthNum - currentDayofMonth).addMonths(1), i); //å�ˆæ³•日期 if (validDate.isValid()) { m_begintime.setDate(validDate); beginDateTime.append(m_begintime); } } return beginDateTime; } QVector createScheduleTask::getMonthBackPartDateTime(QDate BeginDate, int secondMonthNum, bool containsToday) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); //ä¸�包å�«ä»Šå¤© if (!containsToday) currentDayofMonth += 1; //设置日期 for (int i = currentDayofMonth; i < secondMonthNum + 1; i++) { //获å�–å�ˆæ³•日期 QDate validDate = getValidDate(BeginDate, i); //日期å�ˆæ³• if (validDate.isValid()) { m_begintime.setDate(validDate); beginDateTime.append(m_begintime); } } return beginDateTime; } QVector createScheduleTask::firstMonthNumGreaterThanSecondButEveryDay(int firstMonthNum, int secondMonthNum) { QVector beginDateTime {}; int currentDayofMonth = QDate::currentDate().day(); if (currentDayofMonth >= firstMonthNum) { //今天的日期大于等于开始的日期 if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate(), QDate::currentDate().daysInMonth(), true)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(1 - currentDayofMonth), 1, secondMonthNum)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, false)); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate().addDays(1), QDate::currentDate().daysInMonth(), false)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(1 - currentDayofMonth), 1, secondMonthNum)); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), firstMonthNum, true)); } } else if (currentDayofMonth < firstMonthNum && currentDayofMonth > secondMonthNum) { //今天的日期å°�于开始日期,大于结æ�Ÿæ—¥æœŸ beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, QDate::currentDate().daysInMonth())); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(1 - currentDayofMonth).addMonths(1), 1, secondMonthNum)); } else if (currentDayofMonth <= secondMonthNum) { //今天的日期å°�于等于结æ�Ÿæ—¥æœŸ if (m_begintime.time() > QTime::currentTime()) { //日程开始时间大于当å‰�æ—¶é—´ beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate(), secondMonthNum, true)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, QDate::currentDate().daysInMonth())); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), 1, false)); } else { //日程开始时间å°�于等于当å‰�æ—¶é—´ beginDateTime.append(getMonthBackPartDateTime(QDate::currentDate().addDays(1), secondMonthNum, false)); beginDateTime.append(getMonthAllDateTime(QDate::currentDate().addDays(firstMonthNum - currentDayofMonth), firstMonthNum, QDate::currentDate().daysInMonth())); beginDateTime.append(getMonthFrontPartDateTime(QDate::currentDate(), 1, true)); } } return beginDateTime; } QVector createScheduleTask::analysisRestDayDate() { QVector beginDateTime {}; //周六的日程开始时间 QDateTime beginDateTimeSat = m_begintime; //周日的日程开始时间 QDateTime beginDateTimeSun = m_begintime; int currentDayofWeek = QDate::currentDate().dayOfWeek(); //设置周六的时间 beginDateTimeSat.setDate(QDate::currentDate().addDays(6 - currentDayofWeek)); //设置周日的时间 beginDateTimeSun.setDate(QDate::currentDate().addDays(7 - currentDayofWeek)); //如果周六的时间å°�于当å‰�时间,设置日程开始时间为下一周的周六 if (beginDateTimeSat < QDateTime::currentDateTime()) beginDateTimeSat.setDate(beginDateTimeSat.date().addDays(7)); //如果周日的时间å°�于当å‰�时间,设置日程开始时间为下一周的周日 if (beginDateTimeSun < QDateTime::currentDateTime()) beginDateTimeSun.setDate(beginDateTimeSun.date().addDays(7)); //将周末的日程开始时间放到时间容器里é�¢ beginDateTime.append(beginDateTimeSat); beginDateTime.append(beginDateTimeSun); return beginDateTime; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/createscheduletask.h000066400000000000000000000241521523260663500304160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATESCHEDULETASK_H #define CREATESCHEDULETASK_H #include "schedulebasetask.h" #include "../data/createjsondata.h" #include "../widget/createschedulewidget.h" /** * @brief The createScheduleTask class * 创建日程模å�— */ class createScheduleTask : public scheduleBaseTask { Q_OBJECT public: createScheduleTask(); Reply SchedulePress(semanticAnalysisTask &semanticTask) override; private: /** * @brief setDateTime 设置查询的开始结æ�Ÿæ—¶é—´ * @param queryJsonData jsondataå�¥æŸ„ */ void setDateTime(CreateJsonData *createJsonData); /** * @brief setScheduleTitleName 设置日程的titlename * @param createJsonData jsondataå�¥æŸ„ */ void setScheduleTitleName(CreateJsonData *createJsonData); /** * @brief createScheduleWithRepeatStatus 新建日程 * @param createJsonData jsondataå�¥æŸ„ * @return 日程信æ�¯ */ QString createScheduleWithRepeatStatus(CreateJsonData *createJsonData); /** * @brief creareScheduleUI 新建日程æ�’ä»¶ * @param schedule 日程信æ�¯ */ void creareScheduleUI(const QString &scheduleID); /** * @brief getReply 获å�–回å¤�语 * @param createJsonData jsondataå�¥æŸ„ * @return 回å¤�语 */ QString getReply(CreateJsonData *createJsonData); /** * @brief beginDateTimeIsinHalfYear 判断时间是å�¦å�ˆæ³• * @return 时间是å�¦å�ˆæ³• */ bool beginDateTimeIsinHalfYear(); /** * @brief beginDateTimeOutHalfYear 日程开始时间超过å�Šå¹´èŒƒå›´ * @return true or false */ bool beginDateTimeOutHalfYear(); /** * @brief buginDateTimeBeforeCurrent 日程开始时间早于当å‰�æ—¶é—´ * @return true or false */ bool beginDateTimeBeforeCurrent(); /** * @brief setNotRepeatDay 获å�–é�žé‡�å¤�的日程 * @return 日程信æ�¯ */ QString getNotRepeatDaySchedule(); /** * @brief getEveryDaySchedule 获å�–æ¯�天é‡�å¤�的日程 * @return 日程信æ�¯ */ QString getEveryDaySchedule(); /** * @brief getEveryWeekSchedule 获å�–æ¯�周é‡�å¤�的日程 * @param dateRange 开始和结æ�Ÿçš„周数 * @return 日程信æ�¯ */ QString getEveryWeekSchedule(QVector dateRange); /** * @brief getEveryMonthSchedule 获å�–æ¯�月é‡�å¤�的日程 * @param dateRange 开始和结æ�Ÿçš„æ—¥æœŸæ•° * @return 日程信æ�¯ */ QString getEveryMonthSchedule(QVector dateRange); /** * @brief getEveryDYearSchedule 获å�–æ¯�å¹´é‡�å¤�的日程 * @return 日程信æ�¯ */ QString getEveryYearSchedule(); /** * @brief getEveryWorkDaySchedule 获å�–工作日的日程 * @return 日程信æ�¯ */ QString getEveryWorkDaySchedule(); /** * @brief getEveryRestDaySchedule 获å�–休æ�¯æ—¥çš„æ—¥ç¨‹ * @return 日程信æ�¯ */ QString getEveryRestDaySchedule(); /** * @brief getFirstSchedule 获å�–第一个日程 * @param scheduleInfo 所有日程信æ�¯çš„容器 * @return 第一个日程的日程信æ�¯ */ DSchedule::Ptr getFirstSchedule(DSchedule::List scheduleInfo); /** * @brief getCreatesDays 获å�–新建日程的天数 * @param firstDay 开始日期 * @param secondday 结æ�Ÿæ—¥æœŸ * @param containsToday 是å�¦åŒ…å�«ä»Šå¤© * @return 总天数 */ int getCreatesDays(int firstDay, int secondday, bool containsToday); /** * @brief getNoneWeekNumDate 获å�–没有周数的é‡�å¤�日程的日期 * @return 日期容器 */ QVector getNoneWeekNumDate(); /** * @brief getOneWeekNumDate 获å�–有一个周数的é‡�å¤�日程的日期 * @param firstWeekNum 这个周数是周几 * @return 日期容器 */ QVector getOneWeekNumDate(int firstWeekNum); /** * @brief getTwoWeekNumDate 获å�–有两个周数的é‡�å¤�日程的日期 * @param firstWeekNum 第一个周数是周几 * @param secondWeekNum 第二个周数是周几 * @return 日期容器 */ QVector getTwoWeekNumDate(int firstWeekNum, int secondWeekNum); /** * @brief firstWeekNumLessThanSecond 获å�–第一个周数å°�于第二个周数的日程的日期 * @param firstWeekNum 第一个周数 * @param secondWeekNum 第二个周数 * @return 日期容器 */ QVector firstWeekNumLessThanSecond(int firstWeekNum, int secondWeekNum); /** * @brief firstWeekNumGreaterThanSecondButEveryDay 获å�–第一个周数大于第二个周数但ä¸�包å�«å…¨å¤©æ—¥ç¨‹çš„æ—¥ç¨‹ * @param firstWeekNum 第一个周数 * @param secondWeekNum 第二个周数 * @return 日期容器 */ QVector firstWeekNumGreaterThanSecondButEveryDay(int firstWeekNum, int secondWeekNum); /** * @brief getWeekAllDateTime 获å�–所有的周é‡�å¤�日程的时间 * @param BeginDate 日程开始的时间 * @param firstDayofWeek 获å�–到的第一个周数 * @param secondDayofWeek 获å�–到的第二个周数 * @return DateTime容器 */ QVector getWeekAllDateTime(QDate BeginDate, int firstWeekNum, int secondWeekNum); /** * @brief getWeekFrontPartDateTime 获å�–当å‰�时间之å‰�的日程时间 * @param BeginDate 日程开始的时间 * @param firstDate 获å�–到的第一个周数 * @param containsToday 是å�¦åŒ…å�«ä»Šå¤© * @return DateTime容器 */ QVector getWeekFrontPartDateTime(QDate BeginDate, int firstWeekNum, bool containsToday); /** * @brief getWeekBackPartDateTime 获å�–当å‰�时间之å�Žçš„æ—¥ç¨‹æ—¶é—´ * @param BeginDate 日程开始时间 * @param secondDayofWeek 获å�–到的第二个周数 * @param containsToday 是å�¦åŒ…å�«ä»Šå¤© * @return DateTime容器 */ QVector getWeekBackPartDateTime(QDate BeginDate, int secondWeekNum, bool containsToday); /** * @brief analysisEveryWeekDate è§£æž�æ¯�周é‡�å¤�日程的日期 * @param dateRange 周数范围 * @return 日期容器 */ QVector analysisEveryWeekDate(QVector dateRange); /** * @brief analysisEveryMonthDate è§£æž�æ¯�月é‡�å¤�日程的日期 * @param dateRange 日期范围 * @return 日期容器 */ QVector analysisEveryMonthDate(QVector dateRange); /** * @brief getNoneMonthNumDate 获å�–没有日期的æ¯�月é‡�å¤�日程的日期 * @return 日期容器 */ QVector getNoneMonthNumDate(); /** * @brief getOneMonthNumDate 获å�–有一个日期的æ¯�月é‡�å¤�日程的日期 * @param firstMonthNum 第一个日期是几å�· * @return 日期容器 */ QVector getOneMonthNumDate(int firstMonthNum); /** * @brief getTwoMonthNumDate 获å�–有两个日期的æ¯�月é‡�å¤�日程的日程 * @param firstMonthNum 第一个日期是几å�· * @param secondMonthNum 第二个日期是几å�· * @return 日期容器 */ QVector getTwoMonthNumDate(int firstMonthNum, int secondMonthNum); /** * @brief getMonthAllDateTime 获å�–æ¯�月é‡�å¤�日程的日期 * @param BeginDate 开始时间 * @param firstMonthNum 第一个日期 * @param secondMonthNum 第二个日期 * @return 日期容器 */ QVector getMonthAllDateTime(QDate BeginDate, int firstMonthNum, int secondMonthNum); /** * @brief getMonthFrontPartDateTime 获å�–当å‰�时间之å‰�的日程日期 * @param BeginDate 开始时间 * @param firstMonthNum 第一个日期 * @param containsToday 是å�¦åŒ…å�«ä»Šå¤© * @return 日期容器 */ QVector getMonthFrontPartDateTime(QDate BeginDate, int firstMonthNum, bool containsToday); /** * @brief getMonthBackPartDateTime 获å�–当å‰�时间之å�Žçš„æ—¥ç¨‹æ—¥æœŸ * @param BeginDate 开始时间 * @param secondMonthNum 第二个日期 * @param containsToday 是å�¦åŒ…å�«ä»Šå¤© * @return 日期容器 */ QVector getMonthBackPartDateTime(QDate BeginDate, int secondMonthNum, bool containsToday); /** * @brief firstMonthNumLessThanSecond 第一个日期å°�于第二个日期的日程的日期 * @param firstMonthNum 第一个日期 * @param secondWMonthNum 第二个日期 * @return 日期容器 */ QVector firstMonthNumLessThanSecond(int firstMonthNum, int secondWMonthNum); /** * @brief firstMonthNumGreaterThanSecondButEveryDay 第一个日期大于第二个日期但ä¸�包å�«æ¯�天的日程的日期 * @param firstMonthNum 第一个日期 * @param secondMonthNum 第二个日期 * @return 日期容器 */ QVector firstMonthNumGreaterThanSecondButEveryDay(int firstMonthNum, int secondMonthNum); /** * @brief analysisRestDayDate è§£æž�休æ�¯æ—¥çš„æ—¥ç¨‹çš„æ—¥æœŸ * @return 日期容器 */ QVector analysisRestDayDate(); /** * @brief setDateTimeAndGetSchedule 设置日程开始结æ�Ÿæ—¶é—´ï¼Œå¹¶èŽ·å�–日程信æ�¯ * @param beginDateTime 日程开始时间 * @param endDateTime 日程结æ�Ÿæ—¶é—´ * @return 日程信æ�¯ */ DSchedule::Ptr setDateTimeAndGetSchedule(QDateTime beginDateTime, QDateTime endDateTime); /** * @brief analysisWorkDayDate è§£æž�工作日的日程的日期 * @return 日期容器 */ QVector analysisWorkDayDate(); /** * @brief getValidDate 判断是å�¦æ˜¯å�ˆæ³•日期 * @param viewDate 判断的日期 * @param viewDateDay 判断哪一天 * @return 日期 */ QDate getValidDate(QDate viewDate, int viewDateDay); bool shouldEndSession(CreateJsonData *createjsondate); bool validDateTime(QDateTime datetime); private: QDateTime m_begintime; QDateTime m_endtime; bool everyDayState = false; //助手时间是å�¦æœ‰æ•ˆ bool isValidDateTime = true; //无效日期回å¤�语 QString replyNotValidDT; createSchedulewidget *m_widget = nullptr; }; #endif // CREATESCHEDULETASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/queryscheduleproxy.cpp000066400000000000000000000612611523260663500310740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryscheduleproxy.h" #include "commondef.h" #include "../globaldef.h" #include "../data/changejsondata.h" #include "dscheduledatamanager.h" bool scheduleSort(const DSchedule::Ptr &s1, const DSchedule::Ptr &s2) { if (s1->dtStart() < s2->dtStart()) { return true; } else if (s1->dtStart() == s2->dtStart()) { return s1->dtEnd() < s2->dtEnd(); } else { return false; } } queryScheduleProxy::queryScheduleProxy(JsonData *jsonData) : m_queryJsonData(jsonData) { } DSchedule::Map queryScheduleProxy::querySchedule() { DSchedule::Map scheduleInfo {}; scheduleInfo.clear(); switch (m_queryJsonData->getRepeatStatus()) { case JsonData::RepeatStatus::NONE: qCDebug(PluginLogger) << "Querying non-repeating schedules"; scheduleInfo = queryNonRepeatingSchedule(); break; case JsonData::RepeatStatus::EVED: { qCDebug(PluginLogger) << "Querying daily repeating schedules"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryEveryDaySchedule(beginTime, endTime); if (!m_queryJsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Filtering daily schedules by title:" << m_queryJsonData->TitleName(); scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::EVEW: { qCDebug(PluginLogger) << "Querying weekly repeating schedules"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT int beginW = 0; int endW = 0; if (m_queryJsonData->getRepeatNum().size() == 0) { qCDebug(PluginLogger) << "No specific week days specified"; } else if (m_queryJsonData->getRepeatNum().size() == 1) { beginW = m_queryJsonData->getRepeatNum().at(0); endW = m_queryJsonData->getRepeatNum().at(0); qCDebug(PluginLogger) << "Querying single week day:" << beginW; } else { beginW = m_queryJsonData->getRepeatNum().at(0); endW = m_queryJsonData->getRepeatNum().at(1); qCDebug(PluginLogger) << "Querying week day range:" << beginW << "to" << endW; } scheduleInfo = queryWeeklySchedule(beginTime, endTime, beginW, endW); SemanticsDateTime queryDatetime = getQueryDateTime(m_queryJsonData); TimeLimit fileterTime = getTimeFileterByTimeInfo(queryDatetime); if (!fileterTime.isInvalid) { qCDebug(PluginLogger) << "Filtering weekly schedules by time range"; scheduleInfo = scheduleFileterByTime(scheduleInfo, fileterTime.beginTime, fileterTime.endTime); } if (!m_queryJsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Filtering weekly schedules by title:" << m_queryJsonData->TitleName(); scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::EVEM: { qCDebug(PluginLogger) << "Querying monthly repeating schedules"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT int beginM = 0; int endM = 0; if (m_queryJsonData->getRepeatNum().size() == 0) { qCDebug(PluginLogger) << "No specific month days specified"; } else if (m_queryJsonData->getRepeatNum().size() == 1) { beginM = m_queryJsonData->getRepeatNum().at(0); endM = m_queryJsonData->getRepeatNum().at(0); qCDebug(PluginLogger) << "Querying single month day:" << beginM; } else { beginM = m_queryJsonData->getRepeatNum().at(0); endM = m_queryJsonData->getRepeatNum().at(1); qCDebug(PluginLogger) << "Querying month day range:" << beginM << "to" << endM; } scheduleInfo = queryMonthlySchedule(beginTime, endTime, beginM, endM); if (!m_queryJsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Filtering monthly schedules by title:" << m_queryJsonData->TitleName(); scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::EVEY: { qCDebug(PluginLogger) << "Querying yearly repeating schedules"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryEveryYearSchedule(beginTime, endTime); SemanticsDateTime queryDatetime = getQueryDateTime(m_queryJsonData); //查询æ¯�年的日程中包å�«æ—¥æœŸ if (queryDatetime.suggestDatetime.size() == 1) { qCDebug(PluginLogger) << "Filtering yearly schedules by specific date"; //查询的日期 QDate beginD = queryDatetime.suggestDatetime.at(0).datetime.date(); QDate endD = endTime.date(); //过滤包å�«æŸ¥è¯¢æ—¥æœŸçš„æ—¥ç¨‹ scheduleInfo = scheduleFileterByDate(scheduleInfo, beginD, endD); } //获å�–查询的具体时间 TimeLimit fileterTime = getTimeFileterByTimeInfo(queryDatetime); if (!fileterTime.isInvalid) { qCDebug(PluginLogger) << "Filtering yearly schedules by time range"; //过滤包å�«æŸ¥è¯¢æ—¶é—´çš„æ—¥ç¨‹ scheduleInfo = scheduleFileterByTime(scheduleInfo, fileterTime.beginTime, fileterTime.endTime); } if (!m_queryJsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Filtering yearly schedules by title:" << m_queryJsonData->TitleName(); scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::RESTD: { qCDebug(PluginLogger) << "Querying rest day schedules"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryWeeklySchedule(beginTime, endTime, 6, 7); if (!m_queryJsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Filtering rest day schedules by title:" << m_queryJsonData->TitleName(); scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; case JsonData::RepeatStatus::WORKD: { qCDebug(PluginLogger) << "Querying work day schedules"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT scheduleInfo = queryWorkingDaySchedule(beginTime, endTime); if (!m_queryJsonData->TitleName().isEmpty()) { qCDebug(PluginLogger) << "Filtering work day schedules by title:" << m_queryJsonData->TitleName(); scheduleInfo = scheduleFileterByTitleName(scheduleInfo, m_queryJsonData->TitleName()); } } break; } return scheduleInfo; } DSchedule::List queryScheduleProxy::scheduleMapToList(const DSchedule::Map &scheduleMap) { DSchedule::List scheduleList; DSchedule::Map::const_iterator iter = scheduleMap.constBegin(); for (; iter != scheduleMap.constEnd(); ++iter) { scheduleList.append(iter.value()); } return scheduleList; } DSchedule::Map queryScheduleProxy::queryWeeklySchedule(QDateTime &beginTime, QDateTime &endTime, int beginW, int endW) { QSet weeklySet; if (beginW == endW) { weeklySet.insert(beginW); } else if (beginW < endW) { if (beginW == 1) { if (endW == 5) { //WORK return queryWorkingDaySchedule(beginTime, endTime); } else if (endW == 7) { //EVED return queryEveryDaySchedule(beginTime, endTime); } } for (int i = beginW; i <= endW; ++i) { weeklySet.insert(i); } } else { if (beginW - endW == 1) { //EVED return queryEveryDaySchedule(beginTime, endTime); } int w; for (int i = beginW; i <= endW + 7; ++i) { w = i % 7; w = w ? w : 7; weeklySet.insert(w); } } //TODO:查询数æ�® // m_dbus->QueryJobsWithRule(beginTime, endTime, DBUS_RRUL_EVEW, out); DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Week); if (beginW == 0 || endW == 0) { weeklySet.clear(); } return WeeklyScheduleFileter(out, weeklySet); } DSchedule::Map queryScheduleProxy::queryMonthlySchedule(QDateTime &beginTime, QDateTime &endTime, int beginM, int endM) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Month); return MonthlyScheduleFileter(out, beginM, endM); } DSchedule::Map queryScheduleProxy::queryEveryDaySchedule(QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Day); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryEveryYearSchedule(QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Year); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryWorkingDaySchedule(QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByRRule(beginTime, endTime, DScheduleQueryPar::RRule_Work); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryNonRepeatingSchedule() { DSchedule::Map mScheduleInfoVector {}; mScheduleInfoVector.clear(); SemanticsDateTime queryDatetime = getQueryDateTime(m_queryJsonData); //如果开始时间大于结æ�Ÿæ—¶é—´åˆ™é€€å‡º if (!timeFrameIsValid(queryDatetime)) { qCWarning(PluginLogger) << "Invalid time frame for non-repeating schedule query"; return mScheduleInfoVector; } switch (m_queryJsonData->getPropertyStatus()) { case JsonData::PropertyStatus::ALL: { qCDebug(PluginLogger) << "Querying all schedules"; //查询所有日程 DateTimeLimit timeLimit = getTimeLimitByTimeInfo(queryDatetime); if (!getTimeIsExpired()) { mScheduleInfoVector = queryAllSchedule(m_queryJsonData->TitleName(), timeLimit.beginTime, timeLimit.endTime); } } break; case JsonData::PropertyStatus::NEXT: { qCDebug(PluginLogger) << "Querying next schedule"; //查询下个日程 TIME_FRAME_IN_THE_NEXT_SIX_MONTHT mScheduleInfoVector = queryNextNumSchedule(beginTime, endTime, 1); } break; case JsonData::PropertyStatus::LAST: { qCDebug(PluginLogger) << "Querying last schedule (not implemented)"; } break; default: { qCDebug(PluginLogger) << "Querying schedules with default property status"; //NONE //查询所有日程 DateTimeLimit timeLimit = getTimeLimitByTimeInfo(queryDatetime); if (!getTimeIsExpired()) { mScheduleInfoVector = queryAllSchedule(m_queryJsonData->TitleName(), timeLimit.beginTime, timeLimit.endTime); } } break; } return mScheduleInfoVector; } DSchedule::Map queryScheduleProxy::queryNextNumSchedule(QDateTime &beginTime, QDateTime &endTime, int NextNum) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleByLimit(beginTime, endTime, NextNum); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::queryAllSchedule(QString key, QDateTime &beginTime, QDateTime &endTime) { DSchedule::Map out = DScheduleDataManager::getInstance()->queryScheduleBySummary(beginTime, endTime, key); return sortAndFilterSchedule(out); } DSchedule::Map queryScheduleProxy::sortAndFilterSchedule(DSchedule::Map &out) { DSchedule::Map scheduleInfo {}; DSchedule::Iter iter = out.begin(); for (; iter != out.end(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter->size(); ++i) { if (!(scheduleList.contains(iter.value().at(i)) || DScheduleDataManager::getInstance()->isFestivalSchedule(iter.value().at(i)->scheduleTypeID()))) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { scheduleInfo[iter.key()] = scheduleList; } } //TODO:排åº� // std::sort(scheduleInfo.begin(), scheduleInfo.end(), scheduleSort); return scheduleInfo; } DSchedule::Map queryScheduleProxy::WeeklyScheduleFileter(DSchedule::Map &out, QSet &weeklySet) { DSchedule::Map scheduleInfo {}; if (weeklySet.size() == 0) { return sortAndFilterSchedule(out); } else { DSchedule::Iter iter = out.begin(); for (; iter != out.end(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter->size(); ++i) { DSchedule::Ptr schedule = iter.value().at(i); if (!scheduleList.contains(schedule) && weeklyIsIntersections(schedule->dtStart(), schedule->dtEnd(), weeklySet)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { scheduleInfo[iter.key()] = scheduleList; } } } return scheduleInfo; } DSchedule::Map queryScheduleProxy::MonthlyScheduleFileter(DSchedule::Map &out, int beginM, int endM) { if (beginM == 0 || endM == 0) { return sortAndFilterSchedule(out); } DSchedule::Map scheduleInfo {}; DSchedule::Iter iter = out.begin(); for (; iter != out.end(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter->size(); ++i) { DSchedule::Ptr schedule = iter.value().at(i); if (!scheduleList.contains(schedule) && monthlyIsIntersections(schedule->dtStart(), schedule->dtEnd(), beginM, endM)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { scheduleInfo[iter.key()] = scheduleList; } } return scheduleInfo; } bool queryScheduleProxy::monthlyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, int beginM, int endM) { bool b_monthly = false; int beginDay = beginTime.date().day(); int endDay = endTime.date().day(); if (beginM > endM) { b_monthly = beginDay > endM && endDay < beginM ? false : true; } else { b_monthly = (beginM <= beginDay && endM >= beginDay) || (beginM <= endDay && endM >= endDay) || (beginDay <= beginM && endDay >= endM); } return b_monthly; } bool queryScheduleProxy::checkedTimeIsIntersection(QTime &beginTime, QTime &endTime, QTime &fixbeginTime, QTime &fixendTime) { bool b_checked = false; if (beginTime.secsTo(endTime) < 0) { if (fixbeginTime.secsTo(fixendTime) < 0) { b_checked = true; } else { b_checked = endTime.secsTo(fixbeginTime) > 0 && fixendTime.secsTo(beginTime) > 0 ? false : true; } } else { if (fixbeginTime.secsTo(fixendTime) < 0) { b_checked = fixendTime.secsTo(beginTime) > 0 && endTime.secsTo(fixbeginTime) > 0 ? false : true; } else { b_checked = (beginTime.secsTo(fixbeginTime) >= 0 && fixbeginTime.secsTo(endTime) >= 0) || (beginTime.secsTo(fixendTime) >= 0 && fixendTime.secsTo(endTime) >= 0); } } return b_checked; } DSchedule::Map queryScheduleProxy::scheduleFileterByTime(DSchedule::Map &scheduleInfo, QTime &fileterBeginTime, QTime &fileterEndTime) { DSchedule::Map mScheduleFileter {}; qint64 timeoffset_Secs = 0; bool isApppend = false; DSchedule::Map::const_iterator iter = scheduleInfo.constBegin(); for (; iter != scheduleInfo.constEnd(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter.value().size(); ++i) { timeoffset_Secs = iter.value().at(i)->dtStart().secsTo(iter.value().at(i)->dtEnd()); if (timeoffset_Secs < ONE_DAY_SECS) { QTime begTime = iter.value().at(i)->dtStart().time(); QTime endTime = iter.value().at(i)->dtEnd().time(); isApppend = checkedTimeIsIntersection(begTime, endTime, fileterBeginTime, fileterEndTime); } else { isApppend = true; } if (isApppend) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { mScheduleFileter[iter.key()] = scheduleList; } } return mScheduleFileter; } /** * @brief queryScheduleProxy::scheduleFileterByDate 过滤包å�«æŸ¥è¯¢æ—¥æœŸçš„æ—¥ç¨‹ * @param scheduleInfo 日程信æ�¯ * @param fileterBeginDate 查询的开始时间 * @param fileterEndDate 查询的结æ�Ÿæ—¶é—´ * @return 过滤å�Žçš„æ—¥ç¨‹ä¿¡æ�¯ */ DSchedule::Map queryScheduleProxy::scheduleFileterByDate(DSchedule::Map &scheduleInfo, QDate &fileterBeginDate, QDate &fileterEndDate) { DSchedule::Map mScheduleFileter {}; //é��历查询到的日程 DSchedule::Map::const_iterator iter = scheduleInfo.constBegin(); for (; iter != scheduleInfo.constEnd(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter.value().size(); ++i) { //查询到的日程的开始结æ�Ÿæ—¥æœŸ QDate beginD = iter.value().at(i)->dtStart().date(); QDate endD = iter.value().at(i)->dtEnd().date(); //过滤添加包å�«æŸ¥è¯¢æ—¥æœŸçš„æ—¥ç¨‹ if ((fileterBeginDate <= beginD && fileterEndDate >= beginD) || (fileterBeginDate >= endD && fileterBeginDate <= endD)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { mScheduleFileter[iter.key()] = scheduleList; } } return mScheduleFileter; } DSchedule::Map queryScheduleProxy::scheduleFileterByTitleName(DSchedule::Map &scheduleInfo, const QString &strName) { qCDebug(PluginLogger) << "Filtering schedules by title:" << strName; DSchedule::Map mScheduleFileter {}; DSchedule::Map::const_iterator iter = scheduleInfo.constBegin(); for (; iter != scheduleInfo.constEnd(); ++iter) { DSchedule::List scheduleList; for (int i = 0; i < iter.value().size(); ++i) { if (iter.value().at(i)->summary().contains(strName)) { scheduleList.append(iter.value().at(i)); } } if (scheduleList.size() > 0) { mScheduleFileter[iter.key()] = scheduleList; } } qCDebug(PluginLogger) << "Title filter completed - Found" << mScheduleFileter.size() << "schedule groups"; return mScheduleFileter; } bool queryScheduleProxy::weeklyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, QSet &weeklySet) { QSet scheduleWeekSet; bool returnValue = false; scheduleWeekSet.clear(); qint64 dayoffset = beginTime.daysTo(endTime); if (dayoffset > 5) { returnValue = true; } else { int beginW = beginTime.date().dayOfWeek(); int w; for (int i = beginW; i <= beginW + dayoffset; ++i) { w = i % 7; w = w ? w : 7; scheduleWeekSet.insert(w); } returnValue = scheduleWeekSet.intersects(weeklySet); } return returnValue; } SemanticsDateTime queryScheduleProxy::getQueryDateTime(JsonData *jsonData) { changejsondata *changedata = dynamic_cast(jsonData); if (changedata != nullptr && changedata->fromDateTime().suggestDatetime.size() > 0) { return changedata->fromDateTime(); } return jsonData->getDateTime(); } queryScheduleProxy::DateTimeLimit queryScheduleProxy::getTimeLimitByTimeInfo(const SemanticsDateTime &timeInfoVect) { qCDebug(PluginLogger) << "Getting time limit from time info - Suggestions:" << timeInfoVect.suggestDatetime.size(); DateTimeLimit timeLimit; setTimeIsExpired(false); if (timeInfoVect.suggestDatetime.size() == 0) { qCDebug(PluginLogger) << "No time suggestions, using default time frame"; TIME_FRAME_IN_THE_NEXT_SIX_MONTHT timeLimit.beginTime = beginTime; timeLimit.endTime = endTime; } else if (timeInfoVect.suggestDatetime.size() == 1) { if (timeInfoVect.suggestDatetime.at(0).datetime.date() < QDateTime::currentDateTime().date() || timeInfoVect.suggestDatetime.at(0).datetime.date() > QDateTime::currentDateTime().addDays(MAXIMUM_DAYS_IN_THE_FUTURE).date()) { qCWarning(PluginLogger) << "Time suggestion is outside valid range"; setTimeIsExpired(true); return timeLimit; } if (timeInfoVect.suggestDatetime.at(0).hasTime) { if (timeInfoVect.suggestDatetime.at(0).datetime < QDateTime::currentDateTime()) { qCWarning(PluginLogger) << "Time suggestion is in the past"; setTimeIsExpired(true); } else { timeLimit.beginTime = timeInfoVect.suggestDatetime.at(0).datetime; timeLimit.endTime = timeInfoVect.suggestDatetime.at(0).datetime; } } else { if (timeInfoVect.suggestDatetime.at(0).datetime.date() == QDateTime::currentDateTime().date()) { qCDebug(PluginLogger) << "Time suggestion is today, using current time to end of day"; timeLimit.beginTime = QDateTime::currentDateTime(); timeLimit.endTime.setDate(timeLimit.beginTime.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } else { qCDebug(PluginLogger) << "Time suggestion is future date, using full day"; timeLimit.beginTime = timeInfoVect.suggestDatetime.at(0).datetime; timeLimit.endTime.setDate(timeLimit.beginTime.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } } } else { qCDebug(PluginLogger) << "Processing time range suggestion"; QDateTime maxDay = QDateTime::currentDateTime().addDays(MAXIMUM_DAYS_IN_THE_FUTURE); if (timeInfoVect.suggestDatetime.at(1).datetime.date() < QDateTime::currentDateTime().date() || timeInfoVect.suggestDatetime.at(0).datetime.date() > maxDay.date()) { qCWarning(PluginLogger) << "Time range suggestion is outside valid range"; setTimeIsExpired(true); return timeLimit; } if (timeInfoVect.suggestDatetime.at(0).datetime < QDateTime::currentDateTime()) { qCDebug(PluginLogger) << "Adjusting begin time to current time"; timeLimit.beginTime = QDateTime::currentDateTime(); } else { timeLimit.beginTime = timeInfoVect.suggestDatetime.at(0).datetime; } if (timeInfoVect.suggestDatetime.at(1).hasTime) { timeLimit.endTime = timeInfoVect.suggestDatetime.at(1).datetime; } else { timeLimit.endTime.setDate(timeInfoVect.suggestDatetime.at(1).datetime.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } if (timeLimit.endTime.date() > maxDay.date()) { qCDebug(PluginLogger) << "Adjusting end time to maximum allowed date"; timeLimit.endTime.setDate(maxDay.date()); timeLimit.endTime.setTime(QTime(23, 59, 59)); } } qCDebug(PluginLogger) << "Time limit set - Begin:" << timeLimit.beginTime << "End:" << timeLimit.endTime; return timeLimit; } queryScheduleProxy::TimeLimit queryScheduleProxy::getTimeFileterByTimeInfo(const SemanticsDateTime &timeInfoVect) { TimeLimit fileterTime; fileterTime.isInvalid = true; if (timeInfoVect.suggestDatetime.size() == 0) { } else if (timeInfoVect.suggestDatetime.size() == 1) { if (timeInfoVect.suggestDatetime.at(0).hasTime) { fileterTime.beginTime = timeInfoVect.suggestDatetime.at(0).datetime.time(); fileterTime.endTime = fileterTime.beginTime; fileterTime.isInvalid = false; } } else { fileterTime.beginTime = timeInfoVect.suggestDatetime.at(0).datetime.time(); fileterTime.endTime = timeInfoVect.suggestDatetime.at(1).datetime.time(); fileterTime.isInvalid = false; } return fileterTime; } bool queryScheduleProxy::getTimeIsExpired() const { return m_TimeIsExpired; } void queryScheduleProxy::setTimeIsExpired(const bool timeisExp) { m_TimeIsExpired = timeisExp; } bool queryScheduleProxy::timeFrameIsValid(const SemanticsDateTime &timeInfoVect) { qCDebug(PluginLogger) << "Validating time frame"; //如果开始时间大于结æ�Ÿæ—¶é—´åˆ™è¿”回false if (timeInfoVect.suggestDatetime.size() > 1 && timeInfoVect.suggestDatetime.at(0).datetime > timeInfoVect.suggestDatetime.at(1).datetime) { qCWarning(PluginLogger) << "Invalid time frame - Begin time is after end time"; return false; } qCDebug(PluginLogger) << "Time frame is valid"; return true; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/queryscheduleproxy.h000066400000000000000000000056771523260663500305520ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYSCHEDULEPROXY_H #define QUERYSCHEDULEPROXY_H #include "dschedule.h" #include "../data/jsondata.h" #include "accountitem.h" class queryScheduleProxy { public: queryScheduleProxy(JsonData *jsonData); DSchedule::Map querySchedule(); DSchedule::List scheduleMapToList(const DSchedule::Map &scheduleMap); bool getTimeIsExpired() const; private: struct DateTimeLimit { QDateTime beginTime; QDateTime endTime; }; struct TimeLimit { QTime beginTime; QTime endTime; bool isInvalid {false}; }; DSchedule::Map queryWeeklySchedule(QDateTime &beginTime, QDateTime &endTime, int beginW = 0, int endW = 0); DSchedule::Map queryMonthlySchedule(QDateTime &beginTime, QDateTime &endTime, int beginM = 0, int endM = 0); DSchedule::Map queryEveryDaySchedule(QDateTime &beginTime, QDateTime &endTime); DSchedule::Map queryEveryYearSchedule(QDateTime &beginTime, QDateTime &endTime); DSchedule::Map queryWorkingDaySchedule(QDateTime &beginTime, QDateTime &endTime); DSchedule::Map queryNonRepeatingSchedule(); DSchedule::Map queryNextNumSchedule(QDateTime &beginTime, QDateTime &endTime, int NextNum); DSchedule::Map queryAllSchedule(QString key, QDateTime &beginTime, QDateTime &endTime); DSchedule::Map sortAndFilterSchedule(DSchedule::Map &out); DSchedule::Map WeeklyScheduleFileter(DSchedule::Map &out, QSet &weeklySet); DSchedule::Map MonthlyScheduleFileter(DSchedule::Map &out, int beginM = 0, int endM = 0); bool monthlyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, int beginM = 0, int endM = 0); bool checkedTimeIsIntersection(QTime &beginTime, QTime &endTime, QTime &fixbeginTime, QTime &fixendTime); DSchedule::Map scheduleFileterByTime(DSchedule::Map &scheduleInfo, QTime &fileterBeginTime, QTime &fileterEndTime); DSchedule::Map scheduleFileterByDate(DSchedule::Map &scheduleInfo, QDate &fileterBeginDate, QDate &fileterEndDate); DSchedule::Map scheduleFileterByTitleName(DSchedule::Map &scheduleInfo, const QString &strName); bool weeklyIsIntersections(const QDateTime &beginTime, const QDateTime &endTime, QSet &weeklySet); SemanticsDateTime getQueryDateTime(JsonData *jsonData); DateTimeLimit getTimeLimitByTimeInfo(const SemanticsDateTime &timeInfoVect); TimeLimit getTimeFileterByTimeInfo(const SemanticsDateTime &timeInfoVect); void setTimeIsExpired(const bool timeisExp); /** * @brief timeFrameIsValid 时间范围是å�¦æœ‰æ•ˆï¼Œå¼€å§‹æ—¶é—´ä¸�能大于结æ�Ÿæ—¶é—´ * @param timeInfoVect 时间范围 * @return 返回false表示开始时间大于结æ�Ÿæ—¶é—´ */ bool timeFrameIsValid(const SemanticsDateTime &timeInfoVect); private: JsonData *m_queryJsonData; bool m_TimeIsExpired {false}; }; #endif // QUERYSCHEDULEPROXY_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/queryscheduletask.cpp000066400000000000000000000213411523260663500306500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "queryscheduletask.h" #include "../globaldef.h" #include "dscheduledatamanager.h" #include "queryscheduleproxy.h" #include "commondef.h" queryScheduleTask::queryScheduleTask() : scheduleBaseTask() { } Reply queryScheduleTask::SchedulePress(semanticAnalysisTask &semanticTask) { QueryJsonData *queryJsonData = dynamic_cast(semanticTask.getJsonData()); //如果转æ�¢å¤±è´¥åˆ™è¿”回错误消æ�¯ if (queryJsonData == nullptr) { qCWarning(PluginLogger) << "Failed to cast json data to QueryJsonData"; return errorMessage(); } //如果时间无效 if (queryJsonData->getDateTimeInvalid()) { qCWarning(PluginLogger) << "Invalid date time in query request"; Reply m_reply; REPLY_ONLY_TTS(m_reply, DATETIME_ERR_TTS, DATETIME_ERR_TTS, true); return m_reply; } //查询日程 if (queryJsonData->offset() > -1 && queryJsonData->getPropertyStatus() == JsonData::PRO_NONE) { qCWarning(PluginLogger) << "Invalid offset or property status - Offset:" << queryJsonData->offset() << "Status:" << queryJsonData->getPropertyStatus(); Reply m_reply; REPLY_ONLY_TTS(m_reply, CANCEL_ERR_TTS, CANCEL_ERR_TTS, true); return m_reply; } viewWidget = new viewschedulewidget(); queryScheduleProxy m_querySchedule(queryJsonData); DSchedule::Map showdate = m_querySchedule.querySchedule(); setDateTime(queryJsonData); viewWidget->viewScheduleInfoShow(showdate); Reply m_reply; if (queryJsonData->ShouldEndSession()) { qCDebug(PluginLogger) << "Processing end session response"; //ä¸�进行多轮 if (queryOverDueDate(queryJsonData)) { //过期时间 qCInfo(PluginLogger) << "Query date is overdue"; REPLY_ONLY_TTS(m_reply, VIEW_DATE_IS_OVERDUE_TTS, VIEW_DATE_IS_OVERDUE_TTS, true); } else if (queryJsonData->getDateTime().suggestDatetime.size() > 0 && queryJsonData->getDateTime().suggestDatetime.at(0).datetime > QDateTime::currentDateTime().addMonths(6)) { //超过å�Šå¹´çš„æ—¶é—´ qCInfo(PluginLogger) << "Query date is beyond half year"; REPLY_ONLY_TTS(m_reply, VIEW_DATETIME_OUT_TTS, VIEW_DATETIME_OUT_TTS, true); } else { int scheduleCount = viewWidget->getScheduleNum(showdate); if (scheduleCount == 0) { //没有查询的日程 qCInfo(PluginLogger) << "No schedules found for query"; REPLY_ONLY_TTS(m_reply, NO_SCHEDULE_VIEWED_TTS, NO_SCHEDULE_VIEWED_TTS, true); } else { //查询到日程 qCInfo(PluginLogger) << "Found" << scheduleCount << "schedules"; QString str = QString(VIEW_SCHEDULE_TTS).arg(scheduleCount); REPLY_WIDGET_TTS(m_reply, viewWidget, str, str, true); } } } else { //多轮的情况 qCDebug(PluginLogger) << "Starting multi-round query"; REPLY_ONLY_TTS(m_reply, queryJsonData->SuggestMsg(), queryJsonData->SuggestMsg(), false); } return m_reply; } void queryScheduleTask::setDateTime(QueryJsonData *queryJsonData) { switch (queryJsonData->getDateTime().suggestDatetime.size()) { case 1: { qCDebug(PluginLogger) << "Processing single date time suggestion"; m_BeginDateTime = queryJsonData->getDateTime().suggestDatetime.at(0).datetime; m_EndDateTime = m_BeginDateTime; //时间处ç�† if (!queryJsonData->getDateTime().suggestDatetime.at(0).hasTime) { if (m_BeginDateTime.date() == QDate::currentDate()) { qCDebug(PluginLogger) << "Setting begin time to current time for today"; m_BeginDateTime.setTime(QTime::currentTime()); } else { qCDebug(PluginLogger) << "Setting begin time to start of day"; m_BeginDateTime.setTime(QTime(0, 0, 0)); } m_EndDateTime.setTime(QTime(23, 59, 59)); } } break; case 2: { qCDebug(PluginLogger) << "Processing date time range suggestion"; m_BeginDateTime = queryJsonData->getDateTime().suggestDatetime.at(0).datetime; m_EndDateTime = queryJsonData->getDateTime().suggestDatetime.at(1).datetime; //查询时间为过期时间或者是超过å�Šå¹´çš„æ—¶é—´ï¼Œåˆ™è¿”回一个无效的时间 if (queryJsonData->getDateTime().suggestDatetime.at(1).datetime.date() < QDateTime::currentDateTime().date() || queryJsonData->getDateTime().suggestDatetime.at(0).datetime.date() > QDate::currentDate().addMonths(6)) { //如果查询结æ�Ÿæ—¶é—´å°�于当å‰�时间,设置开始结æ�Ÿæ—¶é—´ä¸ºæ— æ•ˆæ—¶é—´ qCWarning(PluginLogger) << "Date range is invalid - setting to invalid time"; m_BeginDateTime.setDate(QDate(0, 0, 0)); m_BeginDateTime.setTime(QTime(0, 0, 0)); m_EndDateTime.setDate(QDate(0, 0, 0)); m_EndDateTime.setTime(QTime(0, 0, 0)); break; } //对查询的开始时间进行处ç�† if (queryJsonData->getDateTime().suggestDatetime.at(0).datetime < QDateTime::currentDateTime()) { //开始时间å°�于当å‰�时间,设置当å‰�æ—¶é—´ qCDebug(PluginLogger) << "Begin time is in past, adjusting to current time"; m_BeginDateTime = QDateTime::currentDateTime(); } else { if (!queryJsonData->getDateTime().suggestDatetime.at(0).hasTime) { //没有time if (queryJsonData->getDateTime().suggestDatetime.at(0).datetime.date() == QDate::currentDate()) { //如果是今天,设置当å‰�æ—¶é—´ qCDebug(PluginLogger) << "Begin time is today, setting to current time"; m_BeginDateTime.setTime(QTime::currentTime()); } else { //ä¸�是今天,设置一天最åˆ�的时间 qCDebug(PluginLogger) << "Begin time is not today, setting to start of day"; m_BeginDateTime.setTime(QTime(0, 0, 0)); } } } //对查询的结æ�Ÿæ—¶é—´è¿›è¡Œå¤„ç�† if (queryJsonData->getDateTime().suggestDatetime.at(1).datetime.date() > QDate::currentDate().addMonths(6)) { //如果查询的结æ�Ÿæ—¶é—´è¶…过了å�Šå¹´ï¼Œåˆ™è®¾ç½®ä¸ºå�Šå¹´ä»¥å�Žçš„æ—¶é—´ qCDebug(PluginLogger) << "End time is beyond half year, adjusting to 6 months from now"; m_EndDateTime.setDate(QDate::currentDate().addMonths(6)); m_EndDateTime.setTime(QTime(23, 59, 59)); } else { //如果查询的结æ�Ÿæ—¶é—´æ²¡æœ‰è¶…过å�Šå¹´ï¼Œå¹¶ä¸”没有具体时间,则设置为一天最晚的时间 if (!queryJsonData->getDateTime().suggestDatetime.at(1).hasTime) { qCDebug(PluginLogger) << "End time has no specific time, setting to end of day"; m_EndDateTime.setTime(QTime(23, 59, 59)); } } } break; default: { //如果没有时间,设置开始结æ�Ÿæ—¶é—´ä¸ºæ— æ•ˆæ—¶é—´ qCWarning(PluginLogger) << "No valid date time suggestions, setting to invalid time"; m_BeginDateTime.setDate(QDate(0, 0, 0)); m_BeginDateTime.setTime(QTime(0, 0, 0)); m_EndDateTime.setDate(QDate(0, 0, 0)); m_EndDateTime.setTime(QTime(0, 0, 0)); } break; } } bool queryScheduleTask::queryOverDueDate(QueryJsonData *queryJsonData) { bool overduedate = false; int datenum; if (queryJsonData->getDateTime().suggestDatetime.size() > 0) { if (queryJsonData->getDateTime().suggestDatetime.size() == 1) datenum = 0; else datenum = 1; if (queryJsonData->getDateTime().suggestDatetime.at(datenum).datetime.date() < QDate::currentDate()) { qCDebug(PluginLogger) << "Query date is in the past"; overduedate = true; } else if (queryJsonData->getDateTime().suggestDatetime.at(datenum).datetime.date() == QDate::currentDate() && queryJsonData->getDateTime().suggestDatetime.at(datenum).hasTime && queryJsonData->getDateTime().suggestDatetime.at(datenum).datetime.time() < QTime::currentTime()) { qCDebug(PluginLogger) << "Query time is in the past for today"; overduedate = true; } else { qCDebug(PluginLogger) << "Query date is valid"; overduedate = false; } } else { qCDebug(PluginLogger) << "No date suggestions, query is not overdue"; overduedate = false; } return overduedate; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/queryscheduletask.h000066400000000000000000000020001523260663500303040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef QUERYSCHEDULETASK_H #define QUERYSCHEDULETASK_H #include "schedulebasetask.h" #include "../data/queryjsondata.h" #include "../widget/viewschedulewidget.h" class queryScheduleTask : public scheduleBaseTask { Q_OBJECT public: queryScheduleTask(); Reply SchedulePress(semanticAnalysisTask &semanticTask) override; private: /** * @brief setDateTime 设置查询的开始结æ�Ÿæ—¶é—´ * @param queryJsonData jsondataå�¥æŸ„ */ void setDateTime(QueryJsonData *queryJsonData); /** * @brief queryOverDueDate 是å�¦æŸ¥è¯¢çš„æ˜¯è¿‡åŽ»çš„æ—¥ç¨‹ * @param queryJsonData jsondataå�¥æŸ„ * @return bool */ bool queryOverDueDate(QueryJsonData *queryJsonData); private: QDateTime m_BeginDateTime; QDateTime m_EndDateTime; viewschedulewidget *viewWidget = nullptr; protected: }; #endif // QUERYSCHEDULETASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/schedulebasetask.cpp000066400000000000000000000047141523260663500304220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulebasetask.h" #include "../state/schedulestate.h" #include "../globaldef.h" scheduleBaseTask::scheduleBaseTask(scheduleState *state) : QObject() , m_State(state) { } scheduleBaseTask::~scheduleBaseTask() { if (m_State == nullptr) { delete m_State; m_State = nullptr; } } Reply scheduleBaseTask::SchedulePress(semanticAnalysisTask &semanticTask) { Reply reply; if (m_State != nullptr) { if (semanticTask.Intent() == JSON_NO_INTENT) { reply = m_State->getReplyByIntent(false); } else if (semanticTask.Intent() == JSON_YES_INTENT) { reply = m_State->getReplyByIntent(true); } else { reply = m_State->process(semanticTask.getJsonData()); } updateState(); } return reply; } Reply scheduleBaseTask::getFeedbackByQuerySchedule(const DSchedule::List &info) { Q_UNUSED(info); return Reply(); } Reply scheduleBaseTask::getReplyBySelectSchedule(const DSchedule::Ptr &info) { Q_UNUSED(info); return Reply(); } Reply scheduleBaseTask::InitState(const JsonData *jsonData, bool isUpdateState) { Q_UNUSED(jsonData); Q_UNUSED(isUpdateState); return Reply(); } Reply scheduleBaseTask::repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne) { Q_UNUSED(info); Q_UNUSED(isOnlyOne); return Reply(); } Reply scheduleBaseTask::confirwScheduleHandle(const DSchedule::Ptr &info) { Q_UNUSED(info); return Reply(); } Reply scheduleBaseTask::confirmInfo(bool isOK) { Q_UNUSED(isOK); return Reply(); } scheduleState *scheduleBaseTask::getState() const { return m_State; } Reply scheduleBaseTask::overdueScheduleProcess() { Reply reply; REPLY_ONLY_TTS(reply, OVERTIME_TTS, OVERTIME_TTS, true); return reply; } void scheduleBaseTask::updateState() { do { scheduleState *nextState = m_State->getNextState(); if (nextState != nullptr) { delete m_State; m_State = nextState; } else { break; } } while (1); } /** * @brief scheduleBaseTask::errorMessage 用户输入无法匹é…�返回错误消æ�¯æ��示 * @return 关于无法处ç�†è¯¥å…³é”®å­—的答å¤� */ Reply scheduleBaseTask::errorMessage() { //ç­”å¤� Reply reply; REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true) return reply; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/schedulebasetask.h000066400000000000000000000025411523260663500300630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEBASETASK_H #define SCHEDULEBASETASK_H #include "semanticanalysistask.h" #include "../interface/reply.h" #include "dschedule.h" #include class scheduleState; class scheduleBaseTask : public QObject { Q_OBJECT public: scheduleBaseTask(scheduleState *state = nullptr); virtual ~scheduleBaseTask(); virtual Reply SchedulePress(semanticAnalysisTask &semanticTask); virtual Reply getFeedbackByQuerySchedule(const DSchedule::List &info); virtual Reply getReplyBySelectSchedule(const DSchedule::Ptr &info); virtual Reply InitState(const JsonData *jsonData, bool isUpdateState = false); virtual Reply repeatScheduleHandle(const DSchedule::Ptr &info, bool isOnlyOne); virtual Reply confirwScheduleHandle(const DSchedule::Ptr &info); virtual Reply confirmInfo(bool isOK); scheduleState *getState() const; Reply overdueScheduleProcess(); signals: void signaleSendMessage(Reply reply); protected: void updateState(); /** * @brief errorMessage 用户输入无法匹é…�返回错误消æ�¯æ��示 * @return 关于无法处ç�†è¯¥å…³é”®å­—的答å¤� */ Reply errorMessage(); protected: scheduleState *m_State {nullptr}; }; #endif // SCHEDULEBASETASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/schedulemanagetask.cpp000066400000000000000000000063701523260663500307400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulemanagetask.h" #include "../globaldef.h" #include "../widget/schedulelistwidget.h" #include "../data/createjsondata.h" #include "../data/queryjsondata.h" #include "../data/canceljsondata.h" #include "../data/changejsondata.h" #include "createscheduletask.h" #include "queryscheduletask.h" #include "cancelscheduletask.h" #include "changescheduletask.h" #include "accountmanager.h" DWIDGET_USE_NAMESPACE ScheduleManageTask::ScheduleManageTask(QObject *parent) : QObject(parent) { gAccounManager->resetAccount(); m_scheduleTaskMap[JSON_CREATE] = new createScheduleTask(); m_scheduleTaskMap[JSON_VIEW] = new queryScheduleTask(); m_scheduleTaskMap[JSON_CANCEL] = new cancelScheduleTask(); m_scheduleTaskMap[JSON_CHANGE] = new changeScheduleTask(); QMap::Iterator inter = m_scheduleTaskMap.begin(); for (; inter != m_scheduleTaskMap.end(); ++inter) { scheduleBaseTask *task = inter.value(); connect(task, &scheduleBaseTask::signaleSendMessage, this, &ScheduleManageTask::signaleSendMessage); } } ScheduleManageTask::~ScheduleManageTask() { QMap::Iterator inter = m_scheduleTaskMap.begin(); for (; inter != m_scheduleTaskMap.end(); ++inter) { scheduleBaseTask *task = inter.value(); delete task; } m_scheduleTaskMap.clear(); } ScheduleManageTask *ScheduleManageTask::getInstance() { static ScheduleManageTask scheduleManageTask; return &scheduleManageTask; } void ScheduleManageTask::releaseInstance() { } void ScheduleManageTask::process(semanticAnalysisTask &semanticTask) { if (m_scheduleTaskMap.contains(semanticTask.Intent())) { if (m_preScheduleTask != m_scheduleTaskMap[semanticTask.Intent()]) { if (m_preScheduleTask != nullptr) m_preScheduleTask->InitState(nullptr, true); m_preScheduleTask = m_scheduleTaskMap[semanticTask.Intent()]; } } Reply reply; if (m_preScheduleTask == nullptr) { REPLY_ONLY_TTS(reply, G_ERR_TTS, G_ERR_TTS, true); } else { reply = m_preScheduleTask->SchedulePress(semanticTask); connectHideEventToInitState(reply); } setReply(reply); } void ScheduleManageTask::slotReceivce(QVariant data, Reply *reply) { Q_UNUSED(data); Q_UNUSED(reply); } void ScheduleManageTask::slotWidgetHideInitState() { if (m_preScheduleTask != nullptr) m_preScheduleTask->InitState(nullptr, true); } void ScheduleManageTask::connectHideEventToInitState(Reply reply) { //判断回å¤�内容是å�¦æœ‰å›žå¤�窗å�£ if (reply.getReplyWidget() != nullptr) { //转æ�¢ä¸ºIconDFrame窗å�£ IconDFrame *_iconWidget = qobject_cast(reply.getReplyWidget()); if (_iconWidget != nullptr) { //如果转æ�¢æˆ�功则关è�” connect(_iconWidget, &IconDFrame::widgetIsHide, this, &ScheduleManageTask::slotWidgetHideInitState, Qt::UniqueConnection); } } } Reply ScheduleManageTask::getReply() const { return m_Reply; } void ScheduleManageTask::setReply(const Reply &reply) { m_Reply = reply; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/schedulemanagetask.h000066400000000000000000000026311523260663500304010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULEMANAGETASK_H #define SCHEDULEMANAGETASK_H #include "../interface/reply.h" #include "semanticanalysistask.h" #include "../widget/icondframe.h" #include "dschedule.h" #include "../widget/createschedulewidget.h" #include "schedulebasetask.h" #include "accountitem.h" #include class ScheduleManageTask : public QObject { Q_OBJECT public: static ScheduleManageTask *getInstance(); static void releaseInstance(); void process(semanticAnalysisTask &semanticTask); Reply getReply() const; void setReply(const Reply &reply); private: explicit ScheduleManageTask(QObject *parent = nullptr); ~ScheduleManageTask(); signals: void signaleSendMessage(Reply reply); public slots: void slotReceivce(QVariant data, Reply *reply); /** * @brief slotWidgetHideInitState 窗å�£éš�è—�时状æ€�åˆ�始化 */ void slotWidgetHideInitState(); private: /** * @brief connectHideEventToInitState 窗å�£éš�è—�绑定状æ€�åˆ�始化 * @param reply 回å¤� */ void connectHideEventToInitState(Reply reply); private: AccountItem::Ptr m_account; QMap m_scheduleTaskMap; Reply m_Reply; scheduleBaseTask *m_preScheduleTask {nullptr}; }; #endif // SCHEDULEMANAGETASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/semanticanalysistask.cpp000066400000000000000000000124221523260663500313350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "semanticanalysistask.h" #include "commondef.h" #include #include #include #include "../data/createjsondata.h" #include "../data/queryjsondata.h" #include "../data/canceljsondata.h" #include "../data/changejsondata.h" #include "../globaldef.h" semanticAnalysisTask::semanticAnalysisTask(QObject *parent) : QObject(parent) { } semanticAnalysisTask::~semanticAnalysisTask() { deleteJsonData(); } bool semanticAnalysisTask::resolveTaskJson(const QString &semantic) { setIntent(""); deleteJsonData(); QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(semantic.toUtf8(), &jsonError); if (!doc.isNull() && (jsonError.error == QJsonParseError::NoError)) { qCDebug(PluginLogger) << "JSON parsed successfully"; auto rootObject = doc.object(); if (!(rootObject.contains("intent") && rootObject["intent"].isObject())) { qCWarning(PluginLogger) << "Invalid JSON structure - missing or invalid intent object"; return false; } auto intentObject = rootObject["intent"].toObject(); if (intentObject.empty()) { qCWarning(PluginLogger) << "Empty intent object"; return false; } if (intentObject.contains("semantic") && intentObject["semantic"].isArray()) { qCDebug(PluginLogger) << "Processing semantic array"; auto semanticObjArr = intentObject["semantic"].toArray(); for (int i = 0; i < semanticObjArr.size(); ++i) { auto semanticObj = semanticObjArr[i].toObject(); if (semanticObj.contains("intent") && semanticObj["intent"].isString()) { setIntent(semanticObj["intent"].toString()); } m_JsonData = createJsonDataFactory(Intent()); if (m_JsonData != nullptr) { qCDebug(PluginLogger) << "Created JSON data handler for intent:" << Intent(); m_JsonData->JosnResolve(semanticObj); } } } if (intentObject.contains("voice_answer") && intentObject["voice_answer"].isArray()) { qCDebug(PluginLogger) << "Processing voice answer array"; auto voiceAnsObjArr = intentObject["voice_answer"].toArray(); for (int i = 0; i < voiceAnsObjArr.size(); ++i) { auto voiceAnsObj = voiceAnsObjArr[i].toObject(); if (voiceAnsObj.contains("type") && voiceAnsObj["type"].isString()) { if (voiceAnsObj["type"] != "TTS") { continue; } if (voiceAnsObj.contains("content") && voiceAnsObj["content"].isString()) { //语音播报的文本 if (m_JsonData != nullptr) { m_JsonData->setSuggestMsg(voiceAnsObj["content"].toString()); } break; } } } } if (intentObject.contains("shouldEndSession") && intentObject["shouldEndSession"].isBool()) { setShouldEndSession(intentObject["shouldEndSession"].toBool()); } else { qCDebug(PluginLogger) << "No shouldEndSession specified, defaulting to true"; setShouldEndSession(true); } } else { qCWarning(PluginLogger) << "JSON parse error:" << jsonError.errorString(); return false; } return true; } QString semanticAnalysisTask::Intent() const { return m_Intent; } void semanticAnalysisTask::setIntent(const QString &Intent) { m_Intent = Intent; } JsonData *semanticAnalysisTask::getJsonData() const { return m_JsonData; } void semanticAnalysisTask::deleteJsonData() { if (m_JsonData != nullptr) { qCDebug(PluginLogger) << "Deleting JSON data handler"; delete m_JsonData; m_JsonData = nullptr; } } JsonData *semanticAnalysisTask::createJsonDataFactory(const QString &Intent) { qCDebug(PluginLogger) << "Creating JSON data handler for intent:" << Intent; JsonData *data = nullptr; if (Intent == JSON_CREATE) { //创建 qCDebug(PluginLogger) << "Creating CreateJsonData handler"; data = new CreateJsonData(); } else if (Intent == JSON_VIEW) { //查询 qCDebug(PluginLogger) << "Creating QueryJsonData handler"; data = new QueryJsonData(); } else if (Intent == JSON_CANCEL) { //å�–消 qCDebug(PluginLogger) << "Creating cancelJsonData handler"; data = new cancelJsonData(); } else if (Intent == JSON_CHANGE) { //改å�˜ qCDebug(PluginLogger) << "Creating changejsondata handler"; data = new changejsondata(); } else { qCWarning(PluginLogger) << "Unknown intent type:" << Intent; } return data; } void semanticAnalysisTask::setShouldEndSession(bool isEnd) { if (m_JsonData != nullptr) { qCDebug(PluginLogger) << "Setting shouldEndSession to:" << isEnd; m_JsonData->setShouldEndSession(isEnd); } } void semanticAnalysisTask::setJsonData(JsonData *JsonData) { m_JsonData = JsonData; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/task/semanticanalysistask.h000066400000000000000000000016141523260663500310030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SEMANTICANALYSISTASK_H #define SEMANTICANALYSISTASK_H #include #include #include "../data/jsondata.h" class QJsonObject; class semanticAnalysisTask : public QObject { Q_OBJECT public: explicit semanticAnalysisTask(QObject *parent = nullptr); ~semanticAnalysisTask(); bool resolveTaskJson(const QString &semantic); QString Intent() const; void setIntent(const QString &Intent); JsonData *getJsonData() const; void setJsonData(JsonData *JsonData); private: void deleteJsonData(); JsonData *createJsonDataFactory(const QString &Intent); void setShouldEndSession(bool isEnd); signals: public slots: private: QString m_Intent; JsonData *m_JsonData {nullptr}; }; #endif // SEMANTICANALYSISTASK_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/000077500000000000000000000000001523260663500247175ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/buttonwidget.cpp000066400000000000000000000055341523260663500301510ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "buttonwidget.h" #include #include #include #include buttonwidget::buttonwidget(QWidget *parent) : DWidget(parent) , buttonLayout(new QHBoxLayout()) , clickedButtonIndex(0) { buttonLayout->setContentsMargins(BTWidget::BUTTON_LAYOUT_LEFT_MARGIN, BTWidget::BUTTON_LAYOUT_TOP_MARGIN, BTWidget::BUTTON_LAYOUT_RIGHT_MARGIN, BTWidget::BUTTON_LAYOUT_BOTTOM_MARGIN); setLayout(buttonLayout); } int buttonwidget::addbutton(const QString &text, bool isDefault, buttonwidget::ButtonType type) { int index = buttonCount(); insertButton(index, text, isDefault, type); return index; } void buttonwidget::insertButton(int index, const QString &text, bool isDefault, buttonwidget::ButtonType type) { QAbstractButton *button; switch (type) { case ButtonWarning: button = new DWarningButton(this); break; case ButtonRecommend: button = new DSuggestButton(this); break; default: button = new DPushButton(this); break; } button->setText(text); button->setObjectName("ActionButton"); insertButton(index, button, isDefault); } void buttonwidget::insertButton(int index, QAbstractButton *button, bool isDefault) { DVerticalLine *line = new DVerticalLine(this); line->setObjectName("VLine"); line->setFixedHeight(30); buttonLayout->insertWidget(index * 2, line); buttonLayout->insertWidget(index * 2 + 1, button); buttonList << button; line->show(); buttonLayout->itemAt(0)->widget()->hide(); connect(button, &QAbstractButton::clicked, this, &buttonwidget::onButtonClicked); if (isDefault) { QPushButton *pushbutton = qobject_cast(button); pushbutton->setDefault(pushbutton); } const QString &text = button->text(); if (text.count() == 2) { for (const QChar &ch : text) { switch (ch.script()) { case QChar::Script_Han: case QChar::Script_Katakana: case QChar::Script_Hiragana: case QChar::Script_Hangul: break; default: return; } } button->setText(QString().append(text.at(0)).append(QChar::Nbsp).append(text.at(1))); } } int buttonwidget::buttonCount() const { return buttonList.count(); } void buttonwidget::onButtonClicked(bool clicked) { Q_UNUSED(clicked); QAbstractButton *button = qobject_cast(this->sender()); clickedButtonIndex = buttonList.indexOf(button); emit buttonClicked(clickedButtonIndex, button->text()); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/buttonwidget.h000066400000000000000000000025721523260663500276150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef BUTTONWIDGET_H #define BUTTONWIDGET_H #include #include #include #include DWIDGET_USE_NAMESPACE namespace BTWidget { const int BUTTON_LAYOUT_TOP_MARGIN = 0; const int BUTTON_LAYOUT_BOTTOM_MARGIN = 0; const int BUTTON_LAYOUT_LEFT_MARGIN = 0; const int BUTTON_LAYOUT_RIGHT_MARGIN = 0; } // namespace BTWidget class buttonwidget : public DWidget { Q_OBJECT public: explicit buttonwidget(QWidget *parent = nullptr); enum ButtonType { ButtonNormal, ButtonWarning, ButtonRecommend }; //å°†isDefault设置为true,ä¿�è¯�有焦点时,点击enterå�¯ä»¥é€‰ä¸­ int addbutton(const QString &text, bool isDefault = true, ButtonType type = ButtonNormal); void insertButton(int index, const QString &text, bool isDefault = true, ButtonType type = ButtonNormal); void insertButton(int index, QAbstractButton *button, bool isDefault = true); int buttonCount() const; signals: void buttonClicked(int index, const QString &text); public slots: void onButtonClicked(bool clicked); private: QList buttonList; QSpacerItem *spacer = nullptr; QHBoxLayout *buttonLayout; int clickedButtonIndex; }; #endif // BUTTONWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/createschedulewidget.cpp000066400000000000000000000143641523260663500316170ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "createschedulewidget.h" #include "buttonwidget.h" #include "../globaldef.h" #include "dscheduledatamanager.h" #include "commondef.h" #include #include #include #include #include #include createSchedulewidget::createSchedulewidget(QWidget *parent) : IconDFrame(parent) , m_scheduleDtailInfo(new DSchedule) , m_scheduleitemwidget(new scheduleitemwidget(this)) { connect(m_scheduleitemwidget, &scheduleitemwidget::signalItemPress, this, &createSchedulewidget::slotItemPress); } DSchedule::Ptr createSchedulewidget::getScheduleDtailInfo() { return m_scheduleDtailInfo; } void createSchedulewidget::setTitleName(const QString &titleName) { m_titleName = titleName; } void createSchedulewidget::setDateTime(QDateTime begintime, QDateTime endtime) { qCDebug(PluginLogger) << "Setting schedule time range - Begin:" << begintime << "End:" << endtime; m_BeginDateTime = begintime; m_EndDateTime = endtime; } void createSchedulewidget::setRpeat(int rpeat) { m_rpeat = rpeat; } void createSchedulewidget::setschedule() { qCDebug(PluginLogger) << "Creating schedule with title:" << m_titleName; QDateTime m_beginTime; QDateTime m_endTime; m_beginTime = m_BeginDateTime; m_endTime = m_EndDateTime; m_scheduleDtailInfo->setDtStart(m_beginTime); m_scheduleDtailInfo->setDtEnd(m_endTime); m_scheduleDtailInfo->setSummary(m_titleName); m_scheduleDtailInfo->setScheduleTypeID("403bf009-2005-4679-9c76-e73d9f83a8b4"); m_scheduleDtailInfo->setAllDay(false); m_scheduleDtailInfo->setAlarmType(DSchedule::Alarm_Begin); switch (m_rpeat) { case 1: qCDebug(PluginLogger) << "Setting daily repeat rule"; m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Day); break; case 2: qCDebug(PluginLogger) << "Setting workday repeat rule"; m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Work); break; case 3: qCDebug(PluginLogger) << "Setting weekly repeat rule"; m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Week); break; case 4: qCDebug(PluginLogger) << "Setting monthly repeat rule"; m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Month); break; case 5: qCDebug(PluginLogger) << "Setting yearly repeat rule"; m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_Year); break; default: qCDebug(PluginLogger) << "Setting no repeat rule"; m_scheduleDtailInfo->setRRuleType(DSchedule::RRule_None); break; } if (m_scheduleDtailInfo->getRRuleType() != DSchedule::RRule_None) { qCDebug(PluginLogger) << "Setting infinite repeat duration"; //结æ�Ÿé‡�å¤�于类型为:永ä¸� m_scheduleDtailInfo->recurrence()->setDuration(-1); } } void createSchedulewidget::scheduleEmpty(bool isEmpty) { m_scheduleEmpty = isEmpty; } void createSchedulewidget::updateUI(const QString &scheduleID) { qCDebug(PluginLogger) << "Updating UI for schedule ID:" << scheduleID; if (m_scheduleEmpty) { qCDebug(PluginLogger) << "Schedule is empty, fetching from DBus"; //获å�–筛选到的日程信æ�¯ getCreatScheduleFromDbus(scheduleID); //如果筛选到的日程ä¸�为空,则展示日程æ�’ä»¶ if (!m_scheduleInfo.isEmpty()) { qCDebug(PluginLogger) << "Creating UI with" << m_scheduleInfo.size() << "schedules"; QVBoxLayout *mainlayout = new QVBoxLayout(); m_scheduleitemwidget->setScheduleDtailInfo(m_scheduleInfo); m_scheduleitemwidget->addscheduleitem(); mainlayout->addWidget(m_scheduleitemwidget); setCenterLayout(mainlayout); } else { qCritical(PluginLogger) << "No matching schedule found in database for ID:" << scheduleID; } } else { qCDebug(PluginLogger) << "Creating UI with confirmation buttons"; //是å�¦åˆ›å»ºæ—¥ç¨‹ QVBoxLayout *mainlayout = new QVBoxLayout(); buttonwidget *button = new buttonwidget(this); button->addbutton(CANCEL_BUTTON_STRING, true, buttonwidget::ButtonRecommend); button->addbutton(CONFIRM_BUTTON_STRING); connect(button, &buttonwidget::buttonClicked, this, &createSchedulewidget::slotsbuttonchance); m_scheduleitemwidget->setScheduleDtailInfo(m_scheduleInfo); m_scheduleitemwidget->addscheduleitem(); mainlayout->addWidget(m_scheduleitemwidget); mainlayout->addSpacing(4); mainlayout->addWidget(button); setCenterLayout(mainlayout); } } bool createSchedulewidget::buttonclicked() { return m_buttonclicked; } void createSchedulewidget::slotsbuttonchance(int index, const QString &text) { Q_UNUSED(text) if (index == 0) { m_buttonclicked = false; } if (index == 1) { m_buttonclicked = true; } } void createSchedulewidget::slotItemPress(const DSchedule::Ptr &info) { qCDebug(PluginLogger) << "Schedule item pressed - ID:" << info->uid() << "Title:" << info->summary(); QProcess proc; qCDebug(PluginLogger) << "Launching calendar program"; proc.startDetached(PROCESS_OPEN_CALENDAR_PROGRAM, QString(PROCESS_OPEN_CALENDAR_ARGUMENTS).split(" ")); QThread::msleep(750); QString schedulestr; DSchedule::toJsonString(info, schedulestr); qCDebug(PluginLogger) << "Sending OpenSchedule DBus message"; QDBusMessage message = QDBusMessage::createMethodCall(DBUS_CALENDAR_SERVICE, DBUS_CALENDAR_PATCH, DBUS_CALENDAR_INTFACE, "OpenSchedule"); message << schedulestr; //å�‘é€�消æ�¯ QDBusMessage response = QDBusConnection::sessionBus().call(message); } void createSchedulewidget::getCreatScheduleFromDbus(const QString &scheduleID) { qCDebug(PluginLogger) << "Fetching schedule from DBus - ID:" << scheduleID; DSchedule::Ptr schedule = DScheduleDataManager::getInstance()->queryScheduleByScheduleID(scheduleID); m_scheduleInfo.append(schedule); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/createschedulewidget.h000066400000000000000000000026421523260663500312600ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATESCHEDULE_H #define CREATESCHEDULE_H #include "dschedule.h" #include "icondframe.h" #include "scheduleitemwidget.h" #include #include #include DWIDGET_USE_NAMESPACE class createSchedulewidget : public IconDFrame { Q_OBJECT public: explicit createSchedulewidget(QWidget *parent = nullptr); public: DSchedule::Ptr getScheduleDtailInfo(); void setTitleName(const QString &titleName); void setDateTime(QDateTime begintime, QDateTime endtime); void setRpeat(int rpeat); void setschedule(); void scheduleEmpty(bool isEmpty); void updateUI(const QString &scheduleID); bool buttonclicked(); public slots: void slotsbuttonchance(int index, const QString &text); void slotItemPress(const DSchedule::Ptr &info); /** * @brief getCreatScheduleFromDbus 通过dbus获å�–新建的日程信æ�¯ */ void getCreatScheduleFromDbus(const QString &scheduleID); private: DSchedule::Ptr m_scheduleDtailInfo; QDateTime m_BeginDateTime; QDateTime m_EndDateTime; QString m_titleName; int m_rpeat; bool m_scheduleEmpty = false; scheduleitemwidget *m_scheduleitemwidget; DSchedule::List m_scheduleInfo; bool m_buttonclicked = false; signals: public slots: }; #endif // CREATESCHEDULE_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/icondframe.cpp000066400000000000000000000113621523260663500275350ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "icondframe.h" #include #include #include #include #include #include "../globaldef.h" #include "../interface/reply.h" #include IconDFrame::IconDFrame(QWidget *parent) : DFrame(parent) , m_Dayrenderer(new QSvgRenderer()) , m_Weekrenderer(new QSvgRenderer()) , m_Monthrenderer(new QSvgRenderer()) , m_backgroundrenderer(new QSvgRenderer()) { //设置接å�—tab切æ�¢ setFocusPolicy(Qt::TabFocus); } IconDFrame::~IconDFrame() { delete m_Dayrenderer; m_Dayrenderer = nullptr; delete m_Weekrenderer; m_Weekrenderer = nullptr; delete m_Monthrenderer; m_Monthrenderer = nullptr; delete m_backgroundrenderer; m_backgroundrenderer = nullptr; } void IconDFrame::setCenterLayout(QLayout *layout) { QVBoxLayout *vlayout = new QVBoxLayout(); vlayout->addSpacing(25); vlayout->addLayout(layout); this->setLayout(vlayout); } void IconDFrame::paintEvent(QPaintEvent *event) { setTheMe(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()); DFrame::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; //绘制tab切æ�¢focus效果 if (m_tabFocusIn) { QPen pen; //设置边框为2 pen.setWidth(2); //设置边框颜色为活动色 pen.setColor(Dtk::Gui::DGuiApplicationHelper::instance()->applicationPalette().highlight().color()); painter.setPen(pen); //设置边框矩形,由于æ�’ä»¶widget会被助手覆盖一个åƒ�素,所以需è¦�å‡�去一个åƒ�素的外边 QRect _showRect(1, 1, this->width() - 2, this->height() - 2); painter.drawRoundedRect(_showRect, 8, 8); } //绘制图标 paintPixmap(painter); //绘制标题 paintTitle(painter); painter.end(); } void IconDFrame::hideEvent(QHideEvent *event) { Q_UNUSED(event); if (isEnabled()) { //如果窗å�£ä¸ºå�¯ç”¨çжæ€�则触å�‘窗å�£éš�è—�ä¿¡å�· emit widgetIsHide(); } } void IconDFrame::focusInEvent(QFocusEvent *event) { Q_UNUSED(event); //设置focus标志为true //TODO æ ¹æ�®éœ€æ±‚å…ˆå�–消tab选中效果 m_tabFocusIn = false; //刷新界é�¢ update(); } void IconDFrame::focusOutEvent(QFocusEvent *event) { Q_UNUSED(event); //设置focus标志为false m_tabFocusIn = false; //刷新界é�¢ update(); } void IconDFrame::setTheMe(const int type) { QColor titleColor; if (type == 0 || type == 1) { titleColor.setRgb(0, 0, 0); titleColor.setAlphaF(0.4); } else { titleColor.setRgb(255, 255, 255); titleColor.setAlphaF(0.4); } setTitleColor(titleColor); } void IconDFrame::paintPixmap(QPainter &painter) { QString dayfile = QString(":/resources/DynamicIcon/day%1.svg").arg(QDate::currentDate().day()); m_Dayrenderer->load(dayfile); QString weekfile = QString(":/resources/DynamicIcon/week%1.svg").arg(QDate::currentDate().dayOfWeek()); m_Weekrenderer->load(weekfile); QString monthfile = QString(":/resources/DynamicIcon/month%1.svg").arg(QDate::currentDate().month()); m_Monthrenderer->load(monthfile); QString backgroundfile(":/resources/DynamicIcon/calendar_bg.svg"); m_backgroundrenderer->load(backgroundfile); painter.save(); painter.setRenderHint(QPainter::SmoothPixmapTransform); //draw background QRectF backgroundRect = QRectF(11, 9, 16, 16); m_backgroundrenderer->render(&painter, backgroundRect); //draw month qreal month_x = 13; qreal month_y = 10; qreal month_w = 11; qreal month_h = 4; m_Monthrenderer->render(&painter, QRectF(month_x, month_y, month_w, month_h)); //draw day qreal day_x = 14; qreal day_y = 14; qreal day_w = 9; qreal day_h = 7; m_Dayrenderer->render(&painter, QRectF(day_x, day_y, day_w, day_h)); painter.restore(); } void IconDFrame::paintTitle(QPainter &painter) { QRect rect(34, 7, 24, 17); painter.save(); painter.setPen(TitleColor()); painter.setFont(TitleFont()); painter.drawText(rect, Qt::AlignCenter, tr(PLUGIN_TITLE_NAME)); painter.restore(); } void IconDFrame::slotReceivce(QVariant data, Reply *reply) { Q_UNUSED(data); Q_UNUSED(reply); } QColor IconDFrame::TitleColor() const { return m_TitleColor; } void IconDFrame::setTitleColor(const QColor &TitleColor) { m_TitleColor = TitleColor; } QFont IconDFrame::TitleFont() { m_TitleFont.setPixelSize(12); return m_TitleFont; } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/icondframe.h000066400000000000000000000025471523260663500272070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ICONDFRAME_H #define ICONDFRAME_H #include class QSvgRenderer; class Reply; DWIDGET_USE_NAMESPACE class IconDFrame : public DFrame { Q_OBJECT public: explicit IconDFrame(QWidget *parent = nullptr); ~IconDFrame() override; void setCenterLayout(QLayout *layout); QColor TitleColor() const; void setTitleColor(const QColor &TitleColor); private: QFont TitleFont(); protected: void paintEvent(QPaintEvent *event) override; void hideEvent(QHideEvent *event) override; void focusInEvent(QFocusEvent *event) override; void focusOutEvent(QFocusEvent *event) override; private: void setTheMe(const int type); void paintPixmap(QPainter &painter); void paintTitle(QPainter &painter); signals: void signaleSendMessage(QString text); /** * @brief widgetIsHide 窗å�£éš�è—�ä¿¡å�· */ void widgetIsHide(); public slots: virtual void slotReceivce(QVariant data, Reply *reply); private: QSvgRenderer *m_Dayrenderer; QSvgRenderer *m_Weekrenderer; QSvgRenderer *m_Monthrenderer; QSvgRenderer *m_backgroundrenderer; QColor m_TitleColor; QFont m_TitleFont; bool m_tabFocusIn {false}; //获å�–tab焦点标记 }; #endif // ICONDFRAME_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/itemwidget.cpp000066400000000000000000000125121523260663500275660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "itemwidget.h" #include #include ItemWidget::ItemWidget(QWidget *parent) : DWidget(parent) { QFont datetimefont; datetimefont.setPixelSize(12); QFont titlefont; titlefont.setPixelSize(14); setTitleFont(titlefont); setDateTimeFont(datetimefont); } void ItemWidget::paintEvent(QPaintEvent *event) { setTheMe(DGuiApplicationHelper::instance()->themeType()); DWidget::paintEvent(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // å��锯齿; drawBackground(painter); DrawItem(painter); } void ItemWidget::drawBackground(QPainter &painter) { const int radius = 8; const int diameter = radius * 2; const int RectWidth = this->rect().width(); const int RectHeight = this->rect().height(); painter.save(); painter.setPen(Qt::NoPen); QColor backgroundcolor(getBackgroundColor()); painter.setBrush(backgroundcolor); switch (m_Positon) { case ItemTop: { QPainterPath painterPath; painterPath.moveTo(0, RectHeight); painterPath.lineTo(RectWidth, RectHeight); painterPath.lineTo(RectWidth, diameter); painterPath.arcTo(QRect(RectWidth - diameter, 0, diameter, diameter), 0, 90); painterPath.lineTo(diameter, 0); painterPath.arcTo(QRect(0, 0, diameter, diameter), 90, 90); painterPath.lineTo(0, RectHeight); painterPath.closeSubpath(); painter.drawPath(painterPath); } break; case ItemMiddle: painter.drawRect(this->rect()); break; case ItemBottom: { QPainterPath painterPath; painterPath.moveTo(0, 0); painterPath.lineTo(0, RectHeight - diameter); painterPath.arcTo(QRect(0, RectHeight - diameter, diameter, diameter), 180, 90); painterPath.lineTo(RectWidth - diameter, RectHeight); painterPath.arcTo(QRect(RectWidth - diameter, RectHeight - diameter, diameter, diameter), 270, 90); painterPath.lineTo(RectWidth, 0); painterPath.lineTo(0, 0); painterPath.closeSubpath(); painter.drawPath(painterPath); } break; case ItemOnly: painter.drawRoundedRect(this->rect(), 8, 8); break; } painter.restore(); } QColor ItemWidget::getBackgroundColor() { return m_BackgroundColor; } void ItemWidget::setTheMe(const int type) { QColor titleColor; QColor datetimeColor; if (type == 0 || type == 1) { titleColor.setRgb(0, 0, 0); titleColor.setAlphaF(0.8); datetimeColor.setRgb(0, 0, 0); datetimeColor.setAlphaF(0.6); //设置浅色背景色 m_BackgroundColor = "#000000"; m_BackgroundColor.setAlphaF(0.05); } else { titleColor.setRgb(255, 255, 255); titleColor.setAlphaF(1); datetimeColor.setRgb(255, 255, 255); datetimeColor.setAlphaF(0.6); //设置深色背景色 m_BackgroundColor = "#FFFFFF"; m_BackgroundColor.setAlphaF(0.05); } setTitleColor(titleColor); setDateTimeColor(datetimeColor); } QColor ItemWidget::ScheduleColor() { return CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(m_scheduleInfo->scheduleTypeID()).orginalColor; } DSchedule::Ptr ItemWidget::getScheduleInfo() const { return m_scheduleInfo; } void ItemWidget::setDateTimeFont(const QFont &DateTimeFont) { m_DateTimeFont = DateTimeFont; } void ItemWidget::setTitleFont(const QFont &TitleFont) { m_TitleFont = TitleFont; } void ItemWidget::setDateTimeColor(const QColor &DateTimeColor) { m_DateTimeColor = DateTimeColor; } DSchedule::Ptr ItemWidget::scheduleInfo() const { return m_scheduleInfo; } void ItemWidget::setScheduleInfo(const DSchedule::Ptr &scheduleInfo) { m_scheduleInfo = scheduleInfo; setScheduleBeginTime(scheduleInfo->dtStart()); setScheduleEndTime(scheduleInfo->dtEnd()); setShowDate(scheduleInfo->dtStart().date()); setTitleContent(scheduleInfo->summary()); } void ItemWidget::setTitleColor(const QColor &TitleColor) { m_TitleColor = TitleColor; } QColor ItemWidget::getDateTimeColor() const { return m_DateTimeColor; } QFont ItemWidget::getDateTimeFont() const { return m_DateTimeFont; } QColor ItemWidget::getTitleColor() const { return m_TitleColor; } QFont ItemWidget::getTitleFont() const { return m_TitleFont; } QDateTime ItemWidget::getScheduleEndTime() const { return m_ScheduleEndTime; } void ItemWidget::setScheduleEndTime(const QDateTime &ScheduleEndTime) { m_ScheduleEndTime = ScheduleEndTime; } QDateTime ItemWidget::getScheduleBeginTime() const { return m_ScheduleBeginTime; } void ItemWidget::setScheduleBeginTime(const QDateTime &ScheduleBeginTime) { m_ScheduleBeginTime = ScheduleBeginTime; } QDate ItemWidget::getShowDate() const { return m_ShowDate; } void ItemWidget::setShowDate(const QDate &ShowDate) { m_ShowDate = ShowDate; } QString ItemWidget::getTitleContent() const { return m_TitleContent; } void ItemWidget::setTitleContent(const QString &TitleContent) { m_TitleContent = TitleContent; } void ItemWidget::setPositon(const Item_Position &Positon) { m_Positon = Positon; } void ItemWidget::DrawItem(QPainter &painter) { Q_UNUSED(painter); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/itemwidget.h000066400000000000000000000043371523260663500272410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef ITEMWIDGET_H #define ITEMWIDGET_H #include "scheduledatamanage.h" #include "dschedule.h" #include #include #include #include DWIDGET_USE_NAMESPACE class ItemWidget : public DWidget { Q_OBJECT public: enum Item_Position { ItemTop, ItemMiddle, ItemBottom, ItemOnly }; public: explicit ItemWidget(QWidget *parent = nullptr); void setPositon(const Item_Position &Positon); virtual void DrawItem(QPainter &painter); void setTitleContent(const QString &TitleContent); QString getTitleContent() const; QDate getShowDate() const; void setShowDate(const QDate &ShowDate); QDateTime getScheduleBeginTime() const; void setScheduleBeginTime(const QDateTime &ScheduleBeginTime); QDateTime getScheduleEndTime() const; void setScheduleEndTime(const QDateTime &ScheduleEndTime); DSchedule::Ptr scheduleInfo() const; void setScheduleInfo(const DSchedule::Ptr &scheduleInfo); DSchedule::Ptr getScheduleInfo() const; protected: QFont getTitleFont() const; QColor getTitleColor() const; QFont getDateTimeFont() const; QColor getDateTimeColor() const; void setTitleColor(const QColor &TitleColor); void setDateTimeColor(const QColor &DateTimeColor); void setTitleFont(const QFont &TitleFont); void setDateTimeFont(const QFont &DateTimeFont); protected: void paintEvent(QPaintEvent *event) override; void drawBackground(QPainter &painter); QColor getBackgroundColor(); virtual void setTheMe(const int type); QColor ScheduleColor(); signals: public slots: private: Item_Position m_Positon {ItemMiddle}; QString m_TitleContent; QDate m_ShowDate; QDateTime m_ScheduleBeginTime; QDateTime m_ScheduleEndTime; QFont m_TitleFont; QColor m_TitleColor; QFont m_DateTimeFont; QColor m_DateTimeColor; /** * @brief m_BackgroundColor 绘制背景色 */ QColor m_BackgroundColor{"#000000"}; DSchedule::Ptr m_scheduleInfo; }; #endif // ITEMWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/modifyscheduleitem.cpp000066400000000000000000000073461523260663500313200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "modifyscheduleitem.h" #include "../globaldef.h" #include modifyScheduleItem::modifyScheduleItem(QWidget *parent) : ItemWidget(parent) { setFixedHeight(MODIFY_ITEM_HEIGHT); } void modifyScheduleItem::DrawItem(QPainter &painter) { drawIndex(painter); drawLine(painter); drawTitleContent(painter); drawScheduleColorLine(painter); drawTime(painter); drawDate(painter); } int modifyScheduleItem::getIndex() const { return m_Index; } void modifyScheduleItem::setIndex(int Index) { m_Index = Index; } void modifyScheduleItem::drawIndex(QPainter &painter) { painter.save(); painter.setFont(getTitleFont()); painter.setPen(getDateTimeColor()); const QRect indexRect(m_IndexX, 0, m_IndexWidth, this->rect().height()); painter.drawText(indexRect, Qt::AlignCenter, QString::number(getIndex())); painter.restore(); } void modifyScheduleItem::drawLine(QPainter &painter) { painter.save(); QRect rect(40, 10, 1, 28); painter.setPen(Qt::NoPen); painter.setBrush(LineColor()); painter.drawRect(rect); painter.restore(); } void modifyScheduleItem::drawTitleContent(QPainter &painter) { painter.save(); painter.setFont(getTitleFont()); painter.setPen(getTitleColor()); const int textRectWidth = this->rect().width() - m_TItleRightMargin - m_TitleX; const QRect titleContent(m_TitleX, 0, textRectWidth, this->rect().height()); QFontMetrics metrics(getTitleFont()); painter.drawText(titleContent, Qt::AlignLeft | Qt::AlignVCenter, metrics.elidedText(getTitleContent(), Qt::ElideRight, textRectWidth)); painter.restore(); } void modifyScheduleItem::drawScheduleColorLine(QPainter &painter) { painter.save(); QRect rect(this->width() - m_TItleRightMargin, 0, 2, this->height()); painter.setPen(Qt::NoPen); painter.setBrush(ScheduleColor()); painter.drawRect(rect); painter.restore(); } void modifyScheduleItem::drawTime(QPainter &painter) { painter.save(); QRect rect(this->width() - 75, 10 - m_DateTimeOffset, 65, 17); painter.setPen(getDateTimeColor()); painter.setFont(getDateTimeFont()); QString timestr; if (scheduleInfo()->allDay()) { timestr = ALL_DAY; } else { timestr = QString("%1-%2").arg(getScheduleBeginTime().toString("hh:mm")).arg(getScheduleEndTime().toString("hh:mm")); } painter.drawText(rect, Qt::AlignLeft | Qt::AlignTop, timestr); painter.restore(); } void modifyScheduleItem::drawDate(QPainter &painter) { painter.save(); QRect rect(this->width() - 75, 27 - m_DateTimeOffset, 65, 17); painter.setPen(getDateTimeColor()); painter.setFont(getDateTimeFont()); painter.drawText(rect, Qt::AlignLeft | Qt::AlignTop, getShowDate().toString("yyyy/MM/dd")); painter.restore(); } void modifyScheduleItem::setLineColor(const QColor &LineColor) { m_LineColor = LineColor; } void modifyScheduleItem::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { emit signalSendSelectScheduleIndex(getIndex()); } } QColor modifyScheduleItem::LineColor() const { return m_LineColor; } void modifyScheduleItem::setTheMe(const int type) { ItemWidget::setTheMe(type); QColor lineColor; if (type == 0 || type == 1) { lineColor = QColor("#000000"); lineColor.setAlphaF(0.1); } else { //设置深色主题分割线颜色 lineColor = QColor("#FFFFFF"); lineColor.setAlphaF(0.1); } setLineColor(lineColor); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/modifyscheduleitem.h000066400000000000000000000023361523260663500307570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef MODIFYSCHEDULEITEM_H #define MODIFYSCHEDULEITEM_H #include "itemwidget.h" class modifyScheduleItem : public ItemWidget { Q_OBJECT public: explicit modifyScheduleItem(QWidget *parent = nullptr); int getIndex() const; void setIndex(int Index); protected: QColor LineColor() const; void setLineColor(const QColor &LineColor); protected: void mousePressEvent(QMouseEvent *event) override; private: void setTheMe(const int type) override; void DrawItem(QPainter &painter) override; void drawIndex(QPainter &painter); void drawLine(QPainter &painter); void drawTitleContent(QPainter &painter); void drawScheduleColorLine(QPainter &painter); void drawTime(QPainter &painter); void drawDate(QPainter &painter); signals: void signalSendSelectScheduleIndex(int index); public slots: private: int m_Index = 1; const int m_IndexWidth {16}; const int m_IndexX {14}; QColor m_LineColor {"#000000"}; const int m_TitleX {51}; const int m_TItleRightMargin {97}; const int m_DateTimeOffset = 3; }; #endif // MODIFYSCHEDULEITEM_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/opencalendarwidget.cpp000066400000000000000000000034001523260663500312570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "opencalendarwidget.h" #include #include #include #include "../globaldef.h" #include OpenCalendarWidget::OpenCalendarWidget(QWidget *parent) : DWidget(parent) { setFixedHeight(OPENCALENDAR_WDIGET_HEIGHT); } void OpenCalendarWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); setTheMe(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()); QPainter painter(this); painter.setPen(TitleColor()); painter.setFont(TitleFont()); painter.drawText(this->rect(), Qt::AlignLeft | Qt::AlignVCenter, QString(OPENCALENDAR_WIDGET_TITLE).arg(m_ScheduleCount)); } void OpenCalendarWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { QProcess proc; proc.startDetached(PROCESS_OPEN_CALENDAR_PROGRAM, QString(PROCESS_OPEN_CALENDAR_ARGUMENTS).split(" ")); } } QColor OpenCalendarWidget::TitleColor() const { return m_TitleColor; } void OpenCalendarWidget::setTitleColor(const QColor &TitleColor) { m_TitleColor = TitleColor; } QFont OpenCalendarWidget::TitleFont() { m_TitleFont.setPixelSize(12); return m_TitleFont; } void OpenCalendarWidget::setTheMe(const int type) { QColor titleColor; if (type == 0 || type == 1) { titleColor.setRgb(0, 0, 0); titleColor.setAlphaF(0.4); } else { titleColor.setRgb(255, 255, 255); titleColor.setAlphaF(0.4); } setTitleColor(titleColor); } void OpenCalendarWidget::setScheduleCount(int ScheduleCount) { m_ScheduleCount = ScheduleCount; update(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/opencalendarwidget.h000066400000000000000000000015151523260663500307310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef OPENCALENDARWIDGET_H #define OPENCALENDARWIDGET_H #include #include #include DWIDGET_USE_NAMESPACE class OpenCalendarWidget : public DWidget { Q_OBJECT public: explicit OpenCalendarWidget(QWidget *parent = nullptr); void setScheduleCount(int ScheduleCount); QFont TitleFont(); QColor TitleColor() const; void setTitleColor(const QColor &TitleColor); private: void setTheMe(const int type); protected: void paintEvent(QPaintEvent *event) override; void mousePressEvent(QMouseEvent *event) override; signals: public slots: private: int m_ScheduleCount; QColor m_TitleColor; QFont m_TitleFont; }; #endif // OPENCALENDARWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/repeatschedulewidget.cpp000066400000000000000000000047021523260663500316270ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "repeatschedulewidget.h" #include "scheduleitemwidget.h" #include "buttonwidget.h" #include "../globaldef.h" repeatScheduleWidget::repeatScheduleWidget(repeatScheduleWidget::Operation_type operation, repeatScheduleWidget::Widget_type widgetype, bool tocreateBtn, QWidget *parent) : IconDFrame(parent) , m_OperationType(operation) , m_WidgetType(widgetype) , m_createBtnBool(tocreateBtn) { } void repeatScheduleWidget::setSchedule(const DSchedule::Ptr &info) { m_scheduleInfo.clear(); m_scheduleInfo.append(info); initUI(); } void repeatScheduleWidget::initUI() { m_scheduleitemwidget = new scheduleitemwidget(this); QVBoxLayout *mainlayout = new QVBoxLayout(); m_scheduleitemwidget->setScheduleDtailInfo(m_scheduleInfo); m_scheduleitemwidget->addscheduleitem(); mainlayout->addWidget(m_scheduleitemwidget); if (m_createBtnBool) { buttonwidget *button = new buttonwidget(this); m_buttonCount = 0; switch (m_WidgetType) { case Widget_Confirm: { button->addbutton(CANCEL_BUTTON_STRING); if (m_OperationType == Operation_Cancel) { button->addbutton(CONFIRM_BUTTON_STRING, true, buttonwidget::ButtonWarning); } else { button->addbutton(CONFIRM_BUTTON_STRING, true, buttonwidget::ButtonRecommend); } } break; default: { if (m_OperationType == Operation_Cancel) { button->addbutton(CANCEL_BUTTON_STRING); button->addbutton(DELETEALL_BUTTON_STRING); button->addbutton(ONLY_DELETE_THIS_BUTTON_STRING, true, buttonwidget::ButtonWarning); } else { button->addbutton(CANCEL_BUTTON_STRING); button->addbutton(CHANGE_ALL_BUTTON_STRING); button->addbutton(CHANGE_ONLYL_BUTTON_STRING, true, buttonwidget::ButtonRecommend); } } break; } m_buttonCount = button->buttonCount(); connect(button, &buttonwidget::buttonClicked, this, &repeatScheduleWidget::slotButtonCheckNum); mainlayout->addSpacing(4); mainlayout->addWidget(button); } setCenterLayout(mainlayout); } void repeatScheduleWidget::slotButtonCheckNum(int index, const QString &text) { emit signalButtonCheckNum(index, text, m_buttonCount); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/repeatschedulewidget.h000066400000000000000000000022701523260663500312720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef REPEATSCHEDULEWIDGET_H #define REPEATSCHEDULEWIDGET_H #include "icondframe.h" #include "dschedule.h" class scheduleitemwidget; class repeatScheduleWidget : public IconDFrame { Q_OBJECT public: enum Operation_type { Operation_Cancel, Operation_Change }; enum Widget_type { Widget_Repeat, Widget_Confirm }; public: explicit repeatScheduleWidget(Operation_type operation, Widget_type widgetype, bool tocreateBtn = true, QWidget *parent = nullptr); void setSchedule(const DSchedule::Ptr &info); private: void initUI(); signals: void signalButtonCheckNum(int index, const QString &text, const int buttonCount); public slots: void slotButtonCheckNum(int index, const QString &text); private: scheduleitemwidget *m_scheduleitemwidget {nullptr}; DSchedule::List m_scheduleInfo; Operation_type m_OperationType {Operation_Cancel}; Widget_type m_WidgetType {Widget_Confirm}; int m_buttonCount {0}; bool m_createBtnBool {true}; }; #endif // REPEATSCHEDULEWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/scheduleitemwidget.cpp000066400000000000000000000126231523260663500313060ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "scheduleitemwidget.h" #include "commondef.h" #include "../globaldef.h" #include #include scheduleitemwidget::scheduleitemwidget(QWidget *parent) : DWidget(parent) { } scheduleitemwidget::~scheduleitemwidget() { } void scheduleitemwidget::setScheduleDtailInfo(const DSchedule::List &scheduleInfo) { m_scheduleInfo = scheduleInfo; sortScheduleWithTime(); } void scheduleitemwidget::addscheduleitem() { QVBoxLayout *mainlayout = new QVBoxLayout(); scheduleitemdate *m_scheduleitemdate = new scheduleitemdate(); mainlayout->setContentsMargins(0, 0, 0, 0); mainlayout->addWidget(m_scheduleitemdate); mainlayout->addSpacing(10); mainlayout->setSpacing(1); if (m_scheduleInfo.count() == 1) { //å�•个日程 qCDebug(PluginLogger) << "Creating single schedule item"; scheduleitem *m_scheduleitem = new scheduleitem(); connect(m_scheduleitem, &scheduleitem::signalItemPress, this, &scheduleitemwidget::signalItemPress); m_scheduleitem->setPositon(ItemWidget::ItemOnly); m_scheduleitemdate->setScheduleDtailInfo(m_scheduleInfo.first()); m_scheduleitem->setScheduleInfo(m_scheduleInfo.first()); mainlayout->addWidget(m_scheduleitem); } else if (m_scheduleInfo.count() > 1) { //多个日程 qCDebug(PluginLogger) << "Creating multiple schedule items - Count:" << m_scheduleInfo.count(); for (int i = 0; i < m_scheduleInfo.count(); i++) { scheduleitem *m_scheduleitem = new scheduleitem(); connect(m_scheduleitem, &scheduleitem::signalItemPress, this, &scheduleitemwidget::signalItemPress); if (i == 0) { m_scheduleitem->setPositon(ItemWidget::ItemTop); } else if (i == m_scheduleInfo.count() - 1) { m_scheduleitem->setPositon(ItemWidget::ItemBottom); } else { m_scheduleitem->setPositon(ItemWidget::ItemMiddle); } m_scheduleitemdate->setScheduleDtailInfo(m_scheduleInfo[i]); m_scheduleitem->setScheduleInfo(m_scheduleInfo[i]); mainlayout->addWidget(m_scheduleitem); } } this->setLayout(mainlayout); } void scheduleitemwidget::sortScheduleWithTime() { for (int i = 0; i < m_scheduleInfo.count(); i++) { for (int j = 0; j < m_scheduleInfo.count() - i - 1; j++) { if (m_scheduleInfo[j]->dtStart() > m_scheduleInfo[j + 1]->dtStart()) std::swap(m_scheduleInfo[j], m_scheduleInfo[j + 1]); } } } scheduleitem::scheduleitem(QWidget *parent) : ItemWidget(parent) { setFixedHeight(36); } void scheduleitem::DrawItem(QPainter &painter) { drawScheduleColorLine(painter); drawTime(painter); drawDetails(painter); } void scheduleitem::drawScheduleColorLine(QPainter &painter) { painter.save(); QRect rect(m_LineRightMargin, 0, 2, this->height()); painter.setPen(Qt::NoPen); painter.setBrush(ScheduleColor()); painter.drawRect(rect); painter.restore(); } void scheduleitem::drawTime(QPainter &painter) { painter.save(); QRect rect(m_timeLeftMargin, 0, 82, this->rect().height()); painter.setPen(getDateTimeColor()); painter.setFont(getDateTimeFont()); QString timestr; if (scheduleInfo()->allDay()) { timestr = ALL_DAY; } else { timestr = QString("%1-%2").arg(scheduleInfo()->dtStart().toString("hh:mm")).arg(scheduleInfo()->dtEnd().toString("hh:mm")); } painter.drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, timestr); painter.restore(); } void scheduleitem::drawDetails(QPainter &painter) { painter.save(); QRect rect(m_DetailsRightMargin + m_LineRightMargin + 2, 0, m_DetailsWidth, this->rect().height()); painter.setPen(getTitleColor()); painter.setFont(getTitleFont()); QFontMetrics metrics(getTitleFont()); painter.drawText(rect, Qt::AlignLeft | Qt::AlignVCenter, metrics.elidedText(getTitleContent(), Qt::ElideRight, rect.width() - m_EllipsisWidth)); painter.restore(); } void scheduleitem::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { emit signalItemPress(getScheduleInfo()); } } scheduleitemdate::scheduleitemdate(QWidget *parent) : QWidget(parent) { setFixedHeight(20); } void scheduleitemdate::setScheduleDtailInfo(const DSchedule::Ptr &scheduelDtailInfo) { m_scheduleDtailInfo = scheduelDtailInfo; } QColor scheduleitemdate::DetailsColor() { int type = DGuiApplicationHelper::instance()->themeType(); if (type == 0 || type == 1) { m_DateTimeColor.setRgb(0, 0, 0); } else { m_DateTimeColor.setRgb(255, 255, 255); } return m_DateTimeColor; } void scheduleitemdate::paintEvent(QPaintEvent *event) { QWidget::paintEvent(event); QPainter painter(this); painter.save(); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(DetailsColor()); painter.drawText(QRect(m_LeftMargin, 0, this->rect().width(), 20), Qt::AlignLeft | Qt::AlignVCenter, QString("%1 %2").arg(m_scheduleDtailInfo->dtStart().date().toString("yyyyå¹´MM月ddæ—¥")).arg(m_scheduleDtailInfo->dtStart().toString("dddd"))); painter.restore(); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/scheduleitemwidget.h000066400000000000000000000035211523260663500307500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CREATSHCEDULEITEM_H #define CREATSHCEDULEITEM_H #include "itemwidget.h" #include "dschedule.h" #include class scheduleitemdate; class scheduleitem; class scheduleitemwidget : public DWidget { Q_OBJECT public: explicit scheduleitemwidget(QWidget *parent = nullptr); ~scheduleitemwidget(); void setScheduleDtailInfo(const DSchedule::List &scheduleInfo); void addscheduleitem(); signals: void signalItemPress(const DSchedule::Ptr &info); private: void sortScheduleWithTime(); private: DSchedule::Ptr m_scheduleDtailInfo; DSchedule::List m_scheduleInfo; }; class scheduleitem : public ItemWidget { Q_OBJECT public: explicit scheduleitem(QWidget *parent = nullptr); private: void DrawItem(QPainter &painter) override; void drawScheduleColorLine(QPainter &painter); void drawTime(QPainter &painter); void drawDetails(QPainter &painter); protected: void mousePressEvent(QMouseEvent *event) override; signals: void signalItemPress(const DSchedule::Ptr &info); private: const int m_timeLeftMargin = 13; const int m_timeTopMargin = 9; const int m_LineRightMargin = 84; const int m_DetailsRightMargin = 7; const int m_DetailsTopMargin = 7; const int m_DetailsWidth = 256; const int m_EllipsisWidth = 8; }; class scheduleitemdate : public QWidget { Q_OBJECT public: explicit scheduleitemdate(QWidget *parent = nullptr); void setScheduleDtailInfo(const DSchedule::Ptr &scheduelDtailInfo); QColor DetailsColor(); protected: void paintEvent(QPaintEvent *event); private: DSchedule::Ptr m_scheduleDtailInfo; QColor m_DateTimeColor; const int m_LeftMargin = 13; }; #endif // CREATSHCEDULEITEM_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/schedulelistwidget.cpp000066400000000000000000000032261523260663500313220ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "schedulelistwidget.h" #include #include "modifyscheduleitem.h" #include "opencalendarwidget.h" #include "../globaldef.h" scheduleListWidget::scheduleListWidget(QWidget *parent) : IconDFrame(parent) { } void scheduleListWidget::setScheduleInfoVector(const DSchedule::List &ScheduleInfoVector) { m_ScheduleInfoVector = ScheduleInfoVector; updateUI(); } void scheduleListWidget::updateUI() { QVBoxLayout *layout = new QVBoxLayout(); layout->setSpacing(1); bool showOpenWidget = m_ScheduleInfoVector.size() > ITEM_SHOW_NUM; const int showcount = showOpenWidget ? ITEM_SHOW_NUM : m_ScheduleInfoVector.size(); for (int i = 0; i < showcount; ++i) { modifyScheduleItem *item = new modifyScheduleItem(); if (i == 0) { item->setPositon(ItemWidget::ItemTop); } else if (i == showcount - 1) { item->setPositon(ItemWidget::ItemBottom); } else { item->setPositon(ItemWidget::ItemMiddle); } item->setIndex(i + 1); item->setScheduleInfo(m_ScheduleInfoVector[i]); connect(item, &modifyScheduleItem::signalSendSelectScheduleIndex, this, &scheduleListWidget::signalSelectScheduleIndex); layout->addWidget(item); } if (showOpenWidget) { OpenCalendarWidget *openWidget = new OpenCalendarWidget(); openWidget->setScheduleCount(m_ScheduleInfoVector.size()); layout->addSpacing(6); layout->addWidget(openWidget); } this->setCenterLayout(layout); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/schedulelistwidget.h000066400000000000000000000012061523260663500307630ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SCHEDULELISTWIDGET_H #define SCHEDULELISTWIDGET_H #include #include "dschedule.h" #include "icondframe.h" DWIDGET_USE_NAMESPACE class scheduleListWidget : public IconDFrame { Q_OBJECT public: explicit scheduleListWidget(QWidget *parent = nullptr); void setScheduleInfoVector(const DSchedule::List &ScheduleInfoVector); void updateUI(); signals: void signalSelectScheduleIndex(int index); private: DSchedule::List m_ScheduleInfoVector; }; #endif // SCHEDULELISTWIDGET_H linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/viewschedulewidget.cpp000066400000000000000000000060421523260663500313200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "viewschedulewidget.h" #include "opencalendarwidget.h" #include "dscheduledatamanager.h" #include "../globaldef.h" #include #include #include #include viewschedulewidget::viewschedulewidget(QWidget *parent) : IconDFrame(parent) { } viewschedulewidget::~viewschedulewidget() { } void viewschedulewidget::setScheduleDateRangeInfo(const DSchedule::Map &scheduleDateInfo) { m_scheduleDateInfo = scheduleDateInfo; } void viewschedulewidget::viewScheduleInfoShow(const DSchedule::Map &showSchedule) { QVBoxLayout *mainlayout = new QVBoxLayout(); mainlayout->setSpacing(10); int scheduleNum = 0; DSchedule::List scheduleInfo; DSchedule::Map::const_iterator iter = showSchedule.constBegin(); for (; iter != showSchedule.constEnd(); ++iter) { for (int i = 0; i < iter.value().size(); ++i) { scheduleInfo.append(iter.value().at(i)); scheduleNum++; if (scheduleNum == 10) break; } scheduleitemwidget *item = new scheduleitemwidget(); connect(item, &scheduleitemwidget::signalItemPress, this, &viewschedulewidget::slotItemPress); item->setScheduleDtailInfo(scheduleInfo); item->addscheduleitem(); mainlayout->addWidget(item); scheduleInfo.clear(); if (scheduleNum == 10) break; } // int scheduleCount = getScheduleNum(showSchedule); if (scheduleCount > 10) { OpenCalendarWidget *openWidget = new OpenCalendarWidget(); openWidget->setScheduleCount(scheduleCount); mainlayout->addWidget(openWidget); } setCenterLayout(mainlayout); } int viewschedulewidget::getScheduleNum(DSchedule::Map scheduleList) { int scheduleTotalNum = 0; DSchedule::Map::const_iterator iter = scheduleList.constBegin(); for (; iter != scheduleList.constEnd(); ++iter) { scheduleTotalNum += iter.value().size(); } return scheduleTotalNum; } void viewschedulewidget::setQueryBeginDateTime(QDateTime begindatetime) { m_beginDateTime = begindatetime; } void viewschedulewidget::setQueryEndDateTime(QDateTime enddatetime) { m_endDateTime = enddatetime; } void viewschedulewidget::slotItemPress(const DSchedule::Ptr &info) { QProcess proc; proc.startDetached(PROCESS_OPEN_CALENDAR_PROGRAM, QString(PROCESS_OPEN_CALENDAR_ARGUMENTS).split(" ")); QThread::msleep(750); QString schedulestr; DSchedule::toJsonString(info, schedulestr); QDBusMessage message = QDBusMessage::createMethodCall(DBUS_CALENDAR_SERVICE, DBUS_CALENDAR_PATCH, DBUS_CALENDAR_INTFACE, "OpenSchedule"); message << schedulestr; //å�‘é€�消æ�¯ QDBusMessage response = QDBusConnection::sessionBus().call(message); } linuxdeepin-dde-calendar-f6d670a/src/schedule-plugin/src/widget/viewschedulewidget.h000066400000000000000000000022311523260663500307610ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef VIEWSCHEDULEWIDGET_H #define VIEWSCHEDULEWIDGET_H #include "icondframe.h" #include "dschedule.h" #include "scheduleitemwidget.h" #include class viewschedulewidget : public IconDFrame { Q_OBJECT public: explicit viewschedulewidget(QWidget *parent = nullptr); ~viewschedulewidget(); void setScheduleDateRangeInfo(const DSchedule::Map &scheduleDateInfo); void viewScheduleInfoShow(const DSchedule::Map &showSchedule); int getScheduleNum(DSchedule::Map scheduleList); void setQueryBeginDateTime(QDateTime begindatetime); void setQueryEndDateTime(QDateTime enddatetime); /** * @brief getNextScheduleInfo 获å�–下一个日程 * @return 下一个日程信æ�¯ */ DSchedule::Map getNextScheduleInfo(); public slots: void slotItemPress(const DSchedule::Ptr &info); private: DSchedule::List m_scheduleInfo; DSchedule::Map m_scheduleDateInfo; DSchedule::Map m_showdate; QDateTime m_beginDateTime; QDateTime m_endDateTime; }; #endif // QUERYSCHEDULEWIDGET_H linuxdeepin-dde-calendar-f6d670a/tests/000077500000000000000000000000001523260663500201305ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/CMakeLists.txt000066400000000000000000000011741523260663500226730ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar-test) set(ASAN_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cmake) ADD_SUBDIRECTORY(dde-calendar-client-test) ADD_SUBDIRECTORY(dde-calendar-service-test) include_directories(third-party_stub) add_custom_target(test) add_custom_command(TARGET test COMMAND echo " =================== CREAT LCOV REPROT BEGIN ==================== " COMMAND ${CMAKE_BINARY_DIR}/tests/dde-calendar-client-test/dde-calendar-test COMMAND ${CMAKE_BINARY_DIR}/tests/dde-calendar-service-test/dde-calendar-service-test COMMAND echo " =================== TEST END ==================== " ) linuxdeepin-dde-calendar-f6d670a/tests/cmake-lcov-test.sh000066400000000000000000000013521523260663500234630ustar00rootroot00000000000000utdir=build-ut rm -r $utdir rm -r ../$utdir mkdir ../$utdir cd ../$utdir cmake -DCMAKE_BUILD_TYPE=Debug .. make -j16 ./tests/dde-calendar-client-test/dde-calendar-test --gtest_output=xml:./report/report_calendar_client.xml ./tests/dde-calendar-service-test/dde-calendar-service-test --gtest_output=xml:./report/report_calendar_service.xml workdir=$(cd ../$(dirname $0)/$utdir; pwd) mkdir -p report lcov -d $workdir -c -o ./report/coverage.info lcov --extract ./report/coverage.info '*/calendar-basicstruct/*' '*/src/calendar-client/*' '*/src/calendar-service/*' '*/src/schedule-plugin/*' -o ./report/coverage.info lcov --remove ./report/coverage.info '*/tests/*' -o ./report/coverage.info genhtml -o ./report ./report/coverage.info exit 0linuxdeepin-dde-calendar-f6d670a/tests/cmake/000077500000000000000000000000001523260663500212105ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/cmake/asan.cmake000066400000000000000000000012621523260663500231350ustar00rootroot00000000000000set(CMAKE_SAFETYTEST "${CMAKE_SAFETYTEST_ARG}") if(CMAKE_SAFETYTEST STREQUAL "") set(CMAKE_SAFETYTEST "CMAKE_SAFETYTEST_ARG_OFF") endif() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D${CMAKE_SAFETYTEST}") if(CMAKE_SAFETYTEST STREQUAL "CMAKE_SAFETYTEST_ARG_ON") #安全测试选项 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -fsanitize=undefined,address -O2") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=undefined,address -O2") endif() #安全编译å�‚æ•° set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong -z noexecstack -pie -fPIC -z lazy") # 设置添加gocv相关信æ�¯çš„输出 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fprofile-arcs -ftest-coverage") linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/000077500000000000000000000000001523260663500246645ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/CMakeLists.txt000066400000000000000000000053701523260663500274310ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) include(../qt-version-macros) # common resource names project(dde-calendar-client-test) ADD_COMPILE_OPTIONS(-fno-access-control) set(APP_CLIENT_DIR "${CMAKE_SOURCE_DIR}/src/calendar-client") set(APP_COMMON_DIR "${CMAKE_SOURCE_DIR}/src/calendar-common") set(APP_3PARTY_DIR "${CMAKE_SOURCE_DIR}/3rdparty/kcalendarcore") # set(APP_RES_DIR "${APP_CLIENT_DIR}/assets") # set(APP_QRC "${APP_RES_DIR}/resources.qrc") set(APP_BIN_NAME "dde-calendar-test") set(PROJECT_NAME_TEST ${APP_BIN_NAME}) find_package(PkgConfig REQUIRED) find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Widget) find_package(Qt${QT_VERSION_MAJOR} REQUIRED Gui Widgets DBus Svg Test) find_package(GTest REQUIRED) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--as-needed -fPIE") set(CMAKE_EXE_LINKER_FLAGS "-pie") include_directories(${APP_CLIENT_DIR}/src) SUBDIRLIST(all_src ${APP_CLIENT_DIR}/src) include_directories(${APP_COMMON_DIR}/src) SUBDIRLIST(all_src ${APP_COMMON_DIR}/src) include_directories(${APP_3PARTY_DIR}/src) SUBDIRLIST(all_src ${APP_3PARTY_DIR}/src) # Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${APP_CLIENT_DIR}/src/${subdir}) include_directories(${APP_COMMON_DIR}/src/${subdir}) include_directories(${APP_COMMON_DIR}/src/${subdir}) endforeach() QT_INCLUDE_GUI_PRIVATE_DIRS() file(GLOB_RECURSE Calendar_CLIENTSRC ${APP_CLIENT_DIR}/src/*.cpp) file(GLOB_RECURSE Calendar_COMMONSRC ${APP_COMMON_DIR}/src/*.cpp) file(GLOB_RECURSE Calendar_3PARTYSRC ${APP_3PARTY_DIR}/src/*.cpp) list(REMOVE_ITEM Calendar_CLIENTSRC ${APP_CLIENT_DIR}/src/main.cpp) list(REMOVE_ITEM Calendar_COMMONSRC ${APP_COMMON_DIR}/src/main.cpp) list(REMOVE_ITEM Calendar_3PARTYSRC ${APP_3PARTY_DIR}/src/main.cpp) # test SRC SUBDIRLIST(TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src) foreach(subdir ${TEST_SRC}) include_directories(${subdir}) endforeach() file(GLOB_RECURSE Calendar_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) include_directories(../../calendar-basicstruct/) list(APPEND CMAKE_MODULE_PATH "${ASAN_CMAKE_DIR}") include(asan) # Tell CMake to create the executable add_executable(${APP_BIN_NAME} ${Calendar_TEST_SRC} ${Calendar_CLIENTSRC} ${Calendar_COMMONSRC} ${Calendar_3PARTYSRC} ${APP_QRC}) target_include_directories(${APP_BIN_NAME} PUBLIC ${OBJECT_BINARY_DIR}) target_link_libraries(${APP_BIN_NAME} Dtk${DTK_VERSION_MAJOR}::Core Dtk${DTK_VERSION_MAJOR}::Gui Dtk${DTK_VERSION_MAJOR}::Widget Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Svg Qt${QT_VERSION_MAJOR}::Test ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread basestruct ) linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/000077500000000000000000000000001523260663500254535ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/client_main.cpp000066400000000000000000000011171523260663500304410ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "gtest/gtest.h" #if defined(CMAKE_SAFETYTEST_ARG_ON) #include #endif #include DWIDGET_USE_NAMESPACE int main(int argc, char **argv) { qputenv("QT_QPA_PLATFORM", "offscreen"); DApplication application(argc, argv); ::testing::InitGoogleTest(&argc, argv); int ret = RUN_ALL_TESTS(); #if defined(CMAKE_SAFETYTEST_ARG_ON) __sanitizer_set_report_path("asan.log"); #endif return ret; } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/cscheduledbusstub.cpp000066400000000000000000000027061523260663500316770ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "cscheduledbusstub.h" //#include "cscheduledbus.h" //#include //qint64 CreateJob_stub(void *obj, const ScheduleDataInfo &info) //{ // Q_UNUSED(obj) // Q_UNUSED(info) // return 1; //} //bool UpdateJob_stub(void *obj, const ScheduleDataInfo &info) //{ // Q_UNUSED(obj) // Q_UNUSED(info) // return true; //} //bool DeleteJob_stub(void *obj, qint64 jobId) //{ // Q_UNUSED(obj) // Q_UNUSED(jobId) // return true; //} //bool GetJob_stub(void *obj, qint64 jobId, ScheduleDataInfo &out) //{ // Q_UNUSED(obj) // Q_UNUSED(jobId) // Q_UNUSED(out) // return true; //} //bool QueryJobs_stub(void *obj, QString key, QDateTime starttime, QDateTime endtime, QMap> &out) //{ // Q_UNUSED(obj) // Q_UNUSED(key) // Q_UNUSED(starttime) // Q_UNUSED(endtime) // Q_UNUSED(out) // return true; //} //void cscheduleDbusStub(Stub &stub) //{ // stub.set(ADDR(CScheduleDBus, CreateJob), CreateJob_stub); // stub.set(ADDR(CScheduleDBus, UpdateJob), UpdateJob_stub); // stub.set(ADDR(CScheduleDBus, DeleteJob), DeleteJob_stub); // stub.set(ADDR(CScheduleDBus, GetJob), GetJob_stub); // stub.set((bool (CScheduleDBus::*)(QString, QDateTime, QDateTime, QMap> &))ADDR(CScheduleDBus, QueryJobs), QueryJobs_stub); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/cscheduledbusstub.h000066400000000000000000000004431523260663500313400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CSCHEDULEDBUSSTUB_H #define CSCHEDULEDBUSSTUB_H #include "../third-party_stub/stub.h" void cscheduleDbusStub(Stub &stub); #endif // CSCHEDULEDBUSSTUB_Hlinuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/dialog_stub.cpp000066400000000000000000000012611523260663500304530ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "dialog_stub.h" #include "dialog/dcalendarddialog.h" #include "dialog/myscheduleview.h" #include int calendarDDialogExecReturn = 0; int calendar_DDialog_Exec_stub(void *obj) { Q_UNUSED(obj) return calendarDDialogExecReturn; } void calendarDDialogExecStub(Stub &stub) { typedef int (*fptr)(DDialog *); fptr A_foo = (fptr)(&DDialog::exec); stub.set(A_foo, calendar_DDialog_Exec_stub); typedef int (*fptr2)(QDialog *); fptr2 A_foo2 = (fptr2)(&QDialog::exec); stub.set(A_foo2, calendar_DDialog_Exec_stub); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/dialog_stub.h000066400000000000000000000006261523260663500301240ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef DIALOG_STUB_H #define DIALOG_STUB_H #include "../third-party_stub/stub.h" //DCalendarDDialog //对è¯�框 exec 打桩 int calendar_DDialog_Exec_stub(void *obj); void calendarDDialogExecStub(Stub &stub); extern int calendarDDialogExecReturn; #endif // DIALOG_STUB_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_configsettings.cpp000066400000000000000000000015421523260663500322460ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_configsettings.h" test_configsettings::test_configsettings() { } test_configsettings::~test_configsettings() { } void test_configsettings::SetUp() { conf = CConfigSettings::getInstance(); } void test_configsettings::TearDown() { } void stub_Handle() { } void setValue_stub(void *obj, const QString &key, const QVariant &value) { Q_UNUSED(obj) Q_UNUSED(key) Q_UNUSED(value)} //void CConfigSettings::sync() TEST_F(test_configsettings, sync) { Stub stub; stub.set(ADDR(CConfigSettings, sync), stub_Handle); conf->sync(); } TEST_F(test_configsettings, setOption) { Stub stub; stub.set(ADDR(QSettings, setValue), setValue_stub); conf->setOption("base.state", 0); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_configsettings.h000066400000000000000000000010761523260663500317150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CONFIGSETTINGS_H #define TEST_CONFIGSETTINGS_H #include "configsettings.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include class test_configsettings : public QObject, public::testing::Test { public: test_configsettings(); ~test_configsettings(); void SetUp() override; void TearDown() override; protected: CConfigSettings *conf = nullptr; }; #endif // TEST_CONFIGSETTINGS_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_cscheduleoperation.cpp000066400000000000000000000145231523260663500331030ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscheduleoperation.h" //#include "cscheduledbus.h" //#include "dialog/dcalendarddialog.h" //#include "schedulectrldlg.h" //#include "dialog_stub.h" //#include "cscheduledbusstub.h" //test_cscheduleoperation::test_cscheduleoperation() //{ //} //test_cscheduleoperation::~test_cscheduleoperation() //{ //} //namespace ScheduleTestBtnNum { //static int button_num = 0; //} //int clickButton_stub(void *obj) //{ // Q_UNUSED(obj) // return ScheduleTestBtnNum::button_num; //} //void test_cscheduleoperation::SetUp() //{ // cscheduleDbusStub(stub); //} //void test_cscheduleoperation::TearDown() //{ //} //TEST_F(test_cscheduleoperation, createSchedule) //{ // ScheduleDataInfo info; // operation.createSchedule(info); //} //TEST_F(test_cscheduleoperation, changeSchedule) //{ // calendarDDialogExecStub(stub); // stub.set(ADDR(CScheduleCtrlDlg, clickButton), clickButton_stub); // ScheduleDataInfo info; // QDate current = QDate::currentDate(); // info.setBeginDateTime(QDateTime(current, QTime(0, 0, 0))); // info.setEndDateTime(QDateTime(current, QTime(23, 59, 59))); // info.setTitleName(tr("New Event")); // info.setAllDay(true); // info.setRemindData(RemindData(1, QTime(9, 0))); // info.setID(0); // info.setRecurID(0); // ScheduleDataInfo newinfo = info; // newinfo.setTitleName(tr("test")); // newinfo.setAllDay(false); // info.getRepetitionRule().setRuleId(RepetitionRule::RRule_NONE); // ScheduleTestBtnNum::button_num = 0; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 1; // operation.changeSchedule(newinfo, info); // newinfo.setAllDay(true); // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 0; // newinfo.getRepetitionRule().setRuleId(RepetitionRule::RRule_EVEDAY); // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 1; // operation.changeSchedule(newinfo, info); // info.getRepetitionRule().setRuleId(RepetitionRule::RRule_EVEDAY); // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 0; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 2; // operation.changeSchedule(newinfo, info); // newinfo.setRecurID(2); // ScheduleTestBtnNum::button_num = 0; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 1; // operation.changeSchedule(newinfo, info); // ScheduleTestBtnNum::button_num = 2; // operation.changeSchedule(newinfo, info); //} //TEST_F(test_cscheduleoperation, changeSchedule_01) //{ // calendarDDialogExecStub(stub); // ScheduleDataInfo oldInfo; // ScheduleDataInfo newInfo; // oldInfo.setAllDay(true); // oldInfo.m_ScheduleRRule.setRuleId(RepetitionRule::RRule_NONE); // newInfo.setAllDay(false); // newInfo.m_ScheduleRRule.setRuleId(RepetitionRule::RRule_EVEDAY); // operation.changeSchedule(oldInfo, newInfo); //} //TEST_F(test_cscheduleoperation, deleteSchedule) //{ // calendarDDialogExecStub(stub); // stub.set(ADDR(CScheduleCtrlDlg, clickButton), clickButton_stub); // ScheduleDataInfo info; // QDate current = QDate::currentDate(); // info.setBeginDateTime(QDateTime(current, QTime(0, 0, 0))); // info.setEndDateTime(QDateTime(current, QTime(23, 59, 59))); // info.setTitleName(tr("New Event")); // info.setAllDay(true); // info.setRemindData(RemindData(1, QTime(9, 0))); // info.setID(0); // info.setRecurID(0); // ScheduleTestBtnNum::button_num = 0; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 1; // operation.deleteSchedule(info); // //删除é‡�å¤�日程 // info.getRepetitionRule().setRuleId(RepetitionRule::RRule_EVEDAY); // ScheduleTestBtnNum::button_num = 0; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 1; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 2; // operation.deleteSchedule(info); // info.setRecurID(2); // ScheduleTestBtnNum::button_num = 0; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 1; // operation.deleteSchedule(info); // ScheduleTestBtnNum::button_num = 2; // operation.deleteSchedule(info); //} //TEST_F(test_cscheduleoperation, queryScheduleStr) //{ // QDateTime currenttime = QDateTime::currentDateTime(); // operation.queryScheduleStr("", currenttime, currenttime); //} //TEST_F(test_cscheduleoperation, deleteOnlyInfo_01) //{ // ScheduleDataInfo info; // operation.deleteOnlyInfo(info); //} //TEST_F(test_cscheduleoperation, deleteOnlyInfo_02) //{ // ScheduleDataInfo info; // info.m_ScheduleRRule.setRuleId(RepetitionRule::RRule_EVEDAY); // operation.deleteOnlyInfo(info); //} //TEST_F(test_cscheduleoperation, deleteOnlyInfo_03) //{ // ScheduleDataInfo info; // info.setType(4); // operation.deleteOnlyInfo(info); //} //TEST_F(test_cscheduleoperation, queryScheduleInfo_01) //{ // ScheduleDataInfo info; // QDateTime date; // QMap> map; // operation.queryScheduleInfo("", date, date, map); //} //TEST_F(test_cscheduleoperation, updateJobType_01) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(0); // JobTypeInfo newInfo; // operation.updateJobType(oldInfo, newInfo); //} //TEST_F(test_cscheduleoperation, updateJobType_02) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1); // JobTypeInfo newInfo(1); // EXPECT_TRUE(operation.updateJobType(oldInfo, newInfo)); //} //TEST_F(test_cscheduleoperation, updateJobType_03) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1, "", 10); // JobTypeInfo newInfo(0, "", 0); // operation.updateJobType(oldInfo, newInfo); // EXPECT_EQ(oldInfo.getColorTypeNo(), newInfo.getColorTypeNo()); //} //TEST_F(test_cscheduleoperation, updateJobType_04) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1, "", 5); // JobTypeInfo newInfo(0, "", 0); // operation.updateJobType(oldInfo, newInfo); // EXPECT_TRUE(newInfo.getColorTypeNo() != 5); //} //TEST_F(test_cscheduleoperation, updateJobType_05) //{ // calendarDDialogExecStub(stub); // JobTypeInfo oldInfo(1, "", 5); // operation.updateJobType(oldInfo); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_cscheduleoperation.h000066400000000000000000000012001523260663500325340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CSCHEDULEOPERATION_H #define TEST_CSCHEDULEOPERATION_H #include "../third-party_stub/stub.h" #include "scheduleTask/cscheduleoperation.h" #include "gtest/gtest.h" #include class test_cscheduleoperation : public QObject , public ::testing::Test { public: test_cscheduleoperation(); ~test_cscheduleoperation(); void SetUp() override; void TearDown() override; public: CScheduleOperation operation; public: Stub stub; }; #endif // TEST_CSCHEDULEOPERATION_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/000077500000000000000000000000001523260663500311705ustar00rootroot00000000000000test_animationstackedwidget.cpp000066400000000000000000000050351523260663500374010ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_animationstackedwidget.h" test_animationstackedwidget::test_animationstackedwidget() { } test_animationstackedwidget::~test_animationstackedwidget() { } //void AnimationStackedWidget::setDuration(int duration) TEST_F(test_animationstackedwidget, setDuration) { mAnimationStackedWidget->setDuration(400); } //void AnimationStackedWidget::animationFinished() TEST_F(test_animationstackedwidget, animationfinished) { mAnimationStackedWidget->animationFinished(); } //void AnimationStackedWidget::setCurrent(int index) TEST_F(test_animationstackedwidget, setCurrent) { mAnimationStackedWidget->setCurrent(4); } //void AnimationStackedWidget::setPre() TEST_F(test_animationstackedwidget, setPre) { mAnimationStackedWidget->setPre(); } //void AnimationStackedWidget::setNext() TEST_F(test_animationstackedwidget, setNext) { mAnimationStackedWidget->setNext(); } //void AnimationStackedWidget::setCurrentWidget(int &index, int beginWidth) TEST_F(test_animationstackedwidget, setCurrentWidget) { int index = 2; mAnimationStackedWidget->setCurrentWidget(index, 8); } //int AnimationStackedWidget::getBeginValue() TEST_F(test_animationstackedwidget, getBeginValue) { mAnimationStackedWidget->getBeginValue(); } //AnimationStackedWidget::MoveOrientation AnimationStackedWidget::getMoveOrientation(const int currIndex, const int nextIndex) TEST_F(test_animationstackedwidget, getMoveOrientation) { mAnimationStackedWidget->getMoveOrientation(2, 4); } //double AnimationStackedWidget::offset() const TEST_F(test_animationstackedwidget, offset) { mAnimationStackedWidget->offset(); } //void AnimationStackedWidget::setOffset(double offset) TEST_F(test_animationstackedwidget, setOffset) { mAnimationStackedWidget->setOffset(2.0); } TEST_F(test_animationstackedwidget,animationtest) { mAnimationStackedWidget->setCurrentIndex(0); mAnimationStackedWidget->setDuration(250); mAnimationStackedWidget->setCurrent(1); mAnimationStackedWidget->setFixedSize(500, 800); QPixmap pixmap(mAnimationStackedWidget->size()); for (int i = 0; i <10; ++i) { mAnimationStackedWidget->setOffset(i); pixmap = mAnimationStackedWidget->grab(); } mAnimationStackedWidget->setCurrentIndex(1); mAnimationStackedWidget->setCurrent(0); for (int i = 0; i <10; ++i) { mAnimationStackedWidget->setOffset(i); pixmap = mAnimationStackedWidget->grab(); } } test_animationstackedwidget.h000066400000000000000000000020711523260663500370430ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_ANIMATIONSTACKEDWIDGET_H #define TEST_ANIMATIONSTACKEDWIDGET_H #include #include #include "customWidget/animationstackedwidget.h" class test_animationstackedwidget: public::QObject, public::testing::Test { public: test_animationstackedwidget(); ~test_animationstackedwidget(); virtual void SetUp() { mAnimationStackedWidget = new AnimationStackedWidget(); widget1 = new QWidget(mAnimationStackedWidget); widget2 = new QWidget(mAnimationStackedWidget); mAnimationStackedWidget->addWidget(widget1); mAnimationStackedWidget->addWidget(widget2); } virtual void TearDown() { delete mAnimationStackedWidget; mAnimationStackedWidget = nullptr; } protected: AnimationStackedWidget *mAnimationStackedWidget = nullptr; QWidget *widget1 = nullptr; QWidget *widget2 = nullptr; }; #endif // TEST_ANIMATIONSTACKEDWIDGET_H test_ccustomtimeedit.cpp000066400000000000000000000026621523260663500360640ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ccustomtimeedit.h" #include #include void test_CCustomTimeEdit::SetUp() { m_timeEdit = new CCustomTimeEdit(); } void test_CCustomTimeEdit::TearDown() { delete m_timeEdit; m_timeEdit = nullptr; } //mouseEventTest TEST_F(test_CCustomTimeEdit, mouseEventTest) { QWidget *widget = new QWidget(); m_timeEdit->setParent(widget); QTest::mousePress(m_timeEdit, Qt::LeftButton); QTest::mouseRelease(m_timeEdit, Qt::LeftButton); QTest::mouseDClick(m_timeEdit, Qt::LeftButton); QTest::mouseRelease(m_timeEdit, Qt::LeftButton); m_timeEdit->setParent(nullptr); delete widget; } TEST_F(test_CCustomTimeEdit,focusInEvent) { QFocusEvent focusEvent_in(QEvent::FocusIn,Qt::FocusReason::ActiveWindowFocusReason); QApplication::sendEvent(m_timeEdit,&focusEvent_in); } TEST_F(test_CCustomTimeEdit,focusOutEvent) { QFocusEvent focusEvent_out( QEvent::FocusOut,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(m_timeEdit,&focusEvent_out); } TEST_F(test_CCustomTimeEdit,keyPressEvent) { QWidget *widget = new QWidget(); m_timeEdit->setParent(widget); QKeyEvent keyevent(QEvent::KeyPress,Qt::Key_Left,Qt::NoModifier); QApplication::sendEvent(m_timeEdit,&keyevent); m_timeEdit->setParent(nullptr); delete widget; } test_ccustomtimeedit.h000066400000000000000000000012071523260663500355230ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CCUSTOMTIMEEDIT_H #define TEST_CCUSTOMTIMEEDIT_H #include #include "customWidget/ccustomtimeedit.h" #include class test_CCustomTimeEdit : public QObject , public testing::Test { Q_OBJECT public: explicit test_CCustomTimeEdit(QObject *parent = nullptr) : QObject(parent) { }; void SetUp() override; void TearDown() override; signals: public slots: public: CCustomTimeEdit *m_timeEdit = nullptr; }; #endif // TEST_CCUSTOMTIMEEDIT_H test_cdateedit.cpp000066400000000000000000000071271523260663500346110ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cdateedit.h" //test_cdateedit::test_cdateedit(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_cdateedit, setDate_001) //{ // QDate date = QDate(2022, 4, 20); // mWidget->setDate(date); // EXPECT_EQ(mWidget->date().toString(), date.toString()); //} //TEST_F(test_cdateedit, setDisplayFormat_001) //{ // mWidget->setDisplayFormat("123"); // EXPECT_EQ(mWidget->m_format, "123") << "123"; // mWidget->setDisplayFormat("yyyy/MM/dd"); // EXPECT_EQ(mWidget->m_format, "yyyy/MM/dd") << "yyyy/MM/dd"; //} //TEST_F(test_cdateedit, displayFormat_001) //{ // mWidget->setDisplayFormat("123"); // EXPECT_EQ(mWidget->displayFormat(), "123") << "123"; // mWidget->setDisplayFormat("yyyy/MM/dd"); // EXPECT_EQ(mWidget->displayFormat(), "yyyy/MM/dd") << "yyyy/MM/dd"; //} //TEST_F(test_cdateedit, setLunarCalendarStatus_001) //{ // mWidget->setLunarCalendarStatus(true); // EXPECT_TRUE(mWidget->m_showLunarCalendar) << "true"; // mWidget->setLunarCalendarStatus(false); // EXPECT_FALSE(mWidget->m_showLunarCalendar) << "false"; //} //TEST_F(test_cdateedit, setLunarTextFormat_001) //{ // QTextCharFormat format; // mWidget->setLunarTextFormat(format); // EXPECT_EQ(mWidget->m_lunarTextFormat, format); //} //TEST_F(test_cdateedit, getsetLunarTextFormat_001) //{ // QTextCharFormat format; // mWidget->setLunarTextFormat(format); // EXPECT_EQ(mWidget->getsetLunarTextFormat(), format); //} //TEST_F(test_cdateedit, setCalendarPopup_001) //{ // mWidget->setCalendarPopup(true); //} //TEST_F(test_cdateedit, slotDateEidtInfo_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->slotDateEidtInfo(QDate()); //} //TEST_F(test_cdateedit, slotDateEidtInfo_002) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->slotDateEidtInfo(QDate()); //} //TEST_F(test_cdateedit, slotRefreshLineEditTextFormat_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->slotRefreshLineEditTextFormat("1232/23/13"); //} //TEST_F(test_cdateedit, slotCursorPositionChanged_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->slotCursorPositionChanged(0, 2); //} //TEST_F(test_cdateedit, slotCursorPositionChanged_002) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->slotCursorPositionChanged(0, 2); //} //TEST_F(test_cdateedit, slotCursorPositionChanged_003) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->selectAll(); // mWidget->slotCursorPositionChanged(2, 4); //} //TEST_F(test_cdateedit, slotSelectionChanged_001) //{ // mWidget->setLunarCalendarStatus(true); // mWidget->selectAll(); // mWidget->slotSelectionChanged(); //} //TEST_F(test_cdateedit, slotSelectionChanged_002) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->selectAll(); // mWidget->slotSelectionChanged(); //} //TEST_F(test_cdateedit, getLunarName_001) //{ // mWidget->setLunarCalendarStatus(false); // mWidget->getLunarName(QDate(2022, 4, 20)); //} //TEST_F(test_cdateedit, setLineEditTextFormat_001) //{ // mWidget->setLineEditTextFormat(mWidget->lineEdit(), QList()); //} //TEST_F(test_cdateedit, updateCalendarWidget_001) //{ // mWidget->setCalendarPopup(true); // mWidget->setLunarCalendarStatus(true); // mWidget->updateCalendarWidget(); //} //TEST_F(test_cdateedit, updateCalendarWidget_002) //{ // mWidget->setCalendarPopup(true); // mWidget->setLunarCalendarStatus(false); // mWidget->updateCalendarWidget(); //} test_cdateedit.h000066400000000000000000000012601523260663500342460ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEXT_CDATEEDIT_H #define TEXT_CDATEEDIT_H //#include "cdateedit.h" //#include //#include //#include //class test_cdateedit : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_cdateedit(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new CDateEdit(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CDateEdit *mWidget = nullptr; //}; #endif // TEXT_CDATEEDIT_H test_cdynamicicon.cpp000066400000000000000000000013411523260663500353130ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cdynamicicon.h" test_cdynamicicon::test_cdynamicicon() { mDynamicicon = new CDynamicIcon(8, 8); } test_cdynamicicon::~test_cdynamicicon() { delete mDynamicicon; mDynamicicon = nullptr; } //void CDynamicIcon::setDate(const QDate &date) TEST_F(test_cdynamicicon, setDate) { mDynamicicon->setDate(QDate::currentDate()); } //void CDynamicIcon::setTitlebar(DTitlebar *titlebar) TEST_F(test_cdynamicicon, setTitlebar) { DTitlebar *titlebar = new DTitlebar(); mDynamicicon->setTitlebar(titlebar); EXPECT_EQ(mDynamicicon->m_Titlebar, titlebar); delete titlebar; } test_cdynamicicon.h000066400000000000000000000007421523260663500347640ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CDYNAMICICON_H #define TEST_CDYNAMICICON_H #include #include #include "customWidget/cdynamicicon.h" class test_cdynamicicon: public::QObject, public::testing::Test { public: test_cdynamicicon(); ~test_cdynamicicon(); protected: CDynamicIcon *mDynamicicon = nullptr; }; #endif // TEST_CDYNAMICICON_H test_colorWidget/000077500000000000000000000000001523260663500344325ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidgettest_colorlabel.cpp000066400000000000000000000067211523260663500403210ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_colorlabel.h" //test_colorlabel::test_colorlabel(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorlabel, getColor_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // EXPECT_EQ(colorLabel->getColor(0, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(1, 0.5, 0.5).name(), "#3f7e7f");; // EXPECT_EQ(colorLabel->getColor(1, 0.2, 0.5).name(), "#667f7f"); // EXPECT_EQ(colorLabel->getColor(1, 0.1, 0.9).name(), "#cee5e5"); // EXPECT_EQ(colorLabel->getColor(1, 0.3, 0.4).name(), "#476566"); // EXPECT_EQ(colorLabel->getColor(2, 0.5, 0.5).name(), "#3f7d7f"); // EXPECT_EQ(colorLabel->getColor(0.5, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(colorLabel->getColor(5, 0.5, 0.5).name(), "#3f7a7f"); // EXPECT_EQ(colorLabel->getColor(1, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(colorLabel->getColor(10, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(60, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(120, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(180, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(241, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(305, 0, 0).name(), "#000000"); // EXPECT_EQ(colorLabel->getColor(360, 0, 0).name(), "#000000"); // delete colorLabel; //} //TEST_F(test_colorlabel, setHue_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // colorLabel->setHue(1); // EXPECT_EQ(1, colorLabel->m_hue); // colorLabel->setHue(5); // EXPECT_EQ(5, colorLabel->m_hue); // colorLabel->setHue(100); // EXPECT_EQ(100, colorLabel->m_hue); // delete colorLabel; //} //TEST_F(test_colorlabel, pickColor) //{ // ColorLabel *colorLabel = new ColorLabel(); // colorLabel->pickColor(QPoint(), 0); // delete colorLabel; //} //TEST_F(test_colorlabel, paintEvent_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QPaintEvent *e = new QPaintEvent(QRect()); // colorLabel->m_entered = true; // colorLabel->paintEvent(e); // colorLabel->m_entered = false; // colorLabel->paintEvent(e); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, mousePressEvent_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // colorLabel->mousePressEvent(e); // EXPECT_TRUE(colorLabel->m_pressed); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, mouseMoveEvent) //{ // ColorLabel *colorLabel = new ColorLabel(); // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // colorLabel->mouseMoveEvent(e); // EXPECT_TRUE(colorLabel->m_entered); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, mouseReleaseEvent_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // colorLabel->mouseReleaseEvent(e); // EXPECT_FALSE(colorLabel->m_pressed); // delete e; // delete colorLabel; //} //TEST_F(test_colorlabel, pickColorCursor_001) //{ // ColorLabel *colorLabel = new ColorLabel(); // QCursor cursor = colorLabel->pickColorCursor(); // EXPECT_NE(cursor, QCursor()); // delete colorLabel; //} test_colorlabel.h000066400000000000000000000007671523260663500377720ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_COLORLABEL_H #define TEST_COLORLABEL_H //#include //#include //#include //#include //class test_colorlabel : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorlabel(QObject *parent = nullptr); //signals: //public slots: //}; #endif // TEST_COLORLABEL_H test_colorpickerwidget.cpp000066400000000000000000000036341523260663500417230ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_colorpickerwidget.h" //test_colorpickerwidget::test_colorpickerwidget(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorpickerwidget, getSelectedColor_001) //{ // mWidget->slotUpdateColor(QColor("#000000")); // EXPECT_EQ(mWidget->getSelectedColor(), "#000000") << "text: #000000"; // mWidget->slotUpdateColor(QColor("#123456")); // EXPECT_EQ(mWidget->getSelectedColor(), "#123456") << "text: #123456"; //} //TEST_F(test_colorpickerwidget, setColorHexLineEdit_001) //{ // mWidget->setColorHexLineEdit(); // EXPECT_TRUE(mWidget->m_colHexLineEdit->text().isEmpty()); //} //TEST_F(test_colorpickerwidget, slotUpdateColor) //{ // mWidget->slotUpdateColor(QColor("#000000")); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "000000") << "text: #000000"; // mWidget->slotUpdateColor(QColor("#123456")); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "123456") << "text: #123456"; //} //TEST_F(test_colorpickerwidget, slotHexLineEditChange_001) //{ // mWidget->slotHexLineEditChange(""); // EXPECT_FALSE(mWidget->m_enterBtn->isEnabled()); //} //TEST_F(test_colorpickerwidget, slotHexLineEditChange_002) //{ // mWidget->slotHexLineEditChange("FFfF"); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "ffff") << "eq"; // EXPECT_FALSE(mWidget->m_enterBtn->isEnabled()) << "false"; //} //TEST_F(test_colorpickerwidget, slotHexLineEditChange_003) //{ // mWidget->slotHexLineEditChange("FFfFff"); // EXPECT_EQ(mWidget->m_colHexLineEdit->text(), "ffffff") << "eq"; // EXPECT_TRUE(mWidget->m_enterBtn->isEnabled()) << "true"; //} //TEST_F(test_colorpickerwidget, slotCancelBtnClicked_001) //{ // mWidget->slotCancelBtnClicked(); //} //TEST_F(test_colorpickerwidget, slotEnterBtnClicked_001) //{ // mWidget->slotEnterBtnClicked(); //} test_colorpickerwidget.h000066400000000000000000000013761523260663500413710ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_COLORPICKERWIDGET_H #define TEST_COLORPICKERWIDGET_H //#include //#include //#include //#include //class test_colorpickerwidget : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorpickerwidget(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new CColorPickerWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CColorPickerWidget *mWidget = nullptr; //}; #endif // TEST_COLORPICKERWIDGET_H test_colorslider.cpp000066400000000000000000000023221523260663500405150ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_colorslider.h" //test_colorslider::test_colorslider(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorslider, getColor_001) //{ // EXPECT_EQ(mWidget->getColor(0, 0, 0).name(), "#000000"); // EXPECT_EQ(mWidget->getColor(1, 0.5, 0.5).name(), "#3f7e7f");; // EXPECT_EQ(mWidget->getColor(1, 0.2, 0.5).name(), "#667f7f"); // EXPECT_EQ(mWidget->getColor(1, 0.1, 0.9).name(), "#cee5e5"); // EXPECT_EQ(mWidget->getColor(1, 0.3, 0.4).name(), "#476566"); // EXPECT_EQ(mWidget->getColor(2, 0.5, 0.5).name(), "#3f7d7f"); // EXPECT_EQ(mWidget->getColor(0.5, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(mWidget->getColor(5, 0.5, 0.5).name(), "#3f7a7f"); // EXPECT_EQ(mWidget->getColor(1, 0.5, 0.5).name(), "#3f7e7f"); // EXPECT_EQ(mWidget->getColor(10, 0, 0).name(), "#000000"); // EXPECT_EQ(mWidget->getColor(60, 0, 0).name(), "#000000"); // EXPECT_EQ(mWidget->getColor(71, 0, 0).name(), "#000000"); //} //TEST_F(test_colorslider, paintEvent_001) //{ // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->paintEvent(e); // delete e; //} test_colorslider.h000066400000000000000000000013141523260663500401620ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget/test_colorWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEXT_COLORSLIDER_H #define TEXT_COLORSLIDER_H //#include //#include //#include //#include //class test_colorslider : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorslider(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new ColorSlider(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // ColorSlider *mWidget = nullptr; //}; #endif // TEXT_COLORSLIDER_H test_colorseletorwidget.cpp000066400000000000000000000107531523260663500366020ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_colorseletorwidget.h" #include "../dialog_stub.h" //test_colorseletorwidget::test_colorseletorwidget(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_colorseletorwidget, reset_001) //{ // mWidget->reset(); // EXPECT_TRUE(mWidget->m_colorEntityMap.isEmpty()); //} //TEST_F(test_colorseletorwidget, getSelectedColorInfo_001) //{ // JobTypeColorInfo info(0, "#123456", 1); // mWidget->m_colorInfo = info; // EXPECT_TRUE(mWidget->getSelectedColorInfo() == info); //} //TEST_F(test_colorseletorwidget, setUserColor_001) //{ // JobTypeColorInfo info(0, "#123456", ColorSeletorWidget::TypeSystem); // mWidget->setUserColor(info); // EXPECT_TRUE(mWidget->m_userColorBtn == nullptr); //} //TEST_F(test_colorseletorwidget, setUserColor_002) //{ // JobTypeColorInfo info(0, "#123456", ColorSeletorWidget::TypeUser); // mWidget->setUserColor(info); // EXPECT_TRUE(mWidget->m_userColorBtn != nullptr); //} //TEST_F(test_colorseletorwidget, setSelectedColorByIndex_001) //{ // mWidget->reset(); // JobTypeColorInfo info(0, "#123456", ColorSeletorWidget::TypeUser); // mWidget->setUserColor(info); // mWidget->setSelectedColorByIndex(0); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()); //} //TEST_F(test_colorseletorwidget, setSelectedColorById_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(1, "#123456", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(2, "#111111", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(3, "#222222", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // mWidget->setSelectedColorById(0); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()) << "0"; // mWidget->setSelectedColorById(3); // EXPECT_FALSE(mWidget->m_userColorBtn->isChecked()) << "3"; //} //TEST_F(test_colorseletorwidget, setSelectedColor_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(1, "#123456", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(2, "#111111", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(3, "#222222", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // mWidget->setSelectedColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()) << "1"; // mWidget->setSelectedColor((JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem))); // EXPECT_FALSE(mWidget->m_userColorBtn->isChecked()) << "2"; // mWidget->setSelectedColor((JobTypeColorInfo(4, "#555555", ColorSeletorWidget::TypeSystem))); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()) << "3"; //} //TEST_F(test_colorseletorwidget, initColorButton_001) //{ // mWidget->initColorButton(); //} //TEST_F(test_colorseletorwidget, slotButtonClicked_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(1, "#123456", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(2, "#111111", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(3, "#222222", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(4, "#333333", ColorSeletorWidget::TypeSystem)); // mWidget->addColor(JobTypeColorInfo(0, "#444444", ColorSeletorWidget::TypeUser)); // mWidget->slotButtonClicked(1); // mWidget->slotButtonClicked(6); //} //TEST_F(test_colorseletorwidget, slotAddColorButClicked_001) //{ // calendarDDialogExecReturn = 1; // Stub stub; // calendarDDialogExecStub(stub); // mWidget->slotAddColorButClicked(); // EXPECT_TRUE(mWidget->m_userColorBtn->isChecked()); //} //TEST_F(test_colorseletorwidget, addColor_001) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(0, "", 1)); // EXPECT_EQ(mWidget->m_colorEntityMap.size(), 1); //} //TEST_F(test_colorseletorwidget, addColor_002) //{ // mWidget->reset(); // mWidget->addColor(JobTypeColorInfo(0, "", ColorSeletorWidget::TypeUser)); // EXPECT_EQ(mWidget->m_colorEntityMap.size(), 1) << "eq"; // EXPECT_NE(mWidget->m_userColorBtn, nullptr) << "ne"; //} test_colorseletorwidget.h000066400000000000000000000013701523260663500362420ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_COLORSELETORWIDGET_H #define TEST_COLORSELETORWIDGET_H //#include //#include //#include //#include //class test_colorseletorwidget : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_colorseletorwidget(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new ColorSeletorWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // ColorSeletorWidget *mWidget = nullptr; //}; #endif // TEST_COLORSELETORWIDGET_H test_cpushbutton.cpp000066400000000000000000000032111523260663500352270ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cpushbutton.h" //test_cpushbutton::test_cpushbutton(QObject *parent) : QObject(parent) //{ //} //TEST_F(test_cpushbutton, setHighlight_001) //{ // mWidget->setHighlight(true); // EXPECT_TRUE(mWidget->m_Highlighted); //} //TEST_F(test_cpushbutton, setHighlight_002) //{ // mWidget->setHighlight(false); // EXPECT_FALSE(mWidget->m_Highlighted); //} //TEST_F(test_cpushbutton, isHighlight_001) //{ // mWidget->setHighlight(true); // EXPECT_TRUE(mWidget->isHighlight()); //} //TEST_F(test_cpushbutton, isHighlight_002) //{ // mWidget->setHighlight(false); // EXPECT_FALSE(mWidget->isHighlight()); //} //TEST_F(test_cpushbutton, mousePressEvent_001) //{ // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mWidget->mousePressEvent(e); // EXPECT_TRUE(mWidget->m_pressed); // delete e; //} //TEST_F(test_cpushbutton, mouseReleaseEvent_001) //{ // QMouseEvent *e = new QMouseEvent(QEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mWidget->mouseReleaseEvent(e); // EXPECT_FALSE(mWidget->m_pressed); // delete e; //} //TEST_F(test_cpushbutton, paintEvent_001) //{ // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->setHighlight(true); // mWidget->paintEvent(e); // delete e; //} //TEST_F(test_cpushbutton, paintEvent_002) //{ // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->setHighlight(false); // mWidget->paintEvent(e); // delete e; //} test_cpushbutton.h000066400000000000000000000012771523260663500347060ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CPUSHBUTTON_H #define TEST_CPUSHBUTTON_H //#include "cpushbutton.h" //#include //#include //#include //class test_cpushbutton : public QObject, public::testing::Test //{ // Q_OBJECT //public: // explicit test_cpushbutton(QObject *parent = nullptr); // virtual void SetUp() // { // mWidget = new CPushButton(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CPushButton *mWidget = nullptr; //}; #endif // TEST_CPUSHBUTTON_H test_cradiobutton.cpp000066400000000000000000000015351523260663500353550ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cradiobutton.h" //test_cradiobutton::test_cradiobutton() //{ //} //TEST_F(test_cradiobutton, setColor_001) //{ // QColor color("#000000"); // mWidget->setColor(color); // EXPECT_EQ(mWidget->getColor(), color); //} //TEST_F(test_cradiobutton, paintEvent_001) //{ // QColor color("#000000"); // mWidget->setColor(color); // mWidget->setChecked(true); // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->paintEvent(e); // delete e; //} //TEST_F(test_cradiobutton, paintEvent_002) //{ // QColor color("#000000"); // mWidget->setColor(color); // mWidget->setChecked(false); // QPaintEvent *e = new QPaintEvent(QRect()); // mWidget->paintEvent(e); // delete e; //} test_cradiobutton.h000066400000000000000000000012061523260663500350150ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CRADIOBUTTON_H #define TEST_CRADIOBUTTON_H //#include "cradiobutton.h" //#include //#include //#include //class test_cradiobutton: public::testing::Test //{ //public: // test_cradiobutton(); // virtual void SetUp() // { // mWidget = new CRadioButton(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CRadioButton *mWidget = nullptr; //}; #endif // TEST_CRADIOBUTTON_H test_ctitlewidget.cpp000066400000000000000000000045371523260663500353550ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_ctitlewidget.h" //test_ctitlewidget::test_ctitlewidget() //{ //} //TEST_F(test_ctitlewidget, setShowState_001) //{ // mWidget->setShowState(CTitleWidget::Title_State_Mini); // EXPECT_EQ(mWidget->m_showState, CTitleWidget::Title_State_Mini); //} //TEST_F(test_ctitlewidget, setShowState_002) //{ // mWidget->setShowState(CTitleWidget::Title_State_Normal); // EXPECT_EQ(mWidget->m_showState, CTitleWidget::Title_State_Normal); //} //TEST_F(test_ctitlewidget, buttonBox_001) //{ // EXPECT_EQ(mWidget->buttonBox(), mWidget->m_buttonBox); //} //TEST_F(test_ctitlewidget, searchEdit_001) //{ // EXPECT_EQ(mWidget->searchEdit(), mWidget->m_searchEdit); //} //TEST_F(test_ctitlewidget, stateUpdate_001) //{ // mWidget->setShowState(CTitleWidget::Title_State_Mini); // mWidget->stateUpdate(); //} //TEST_F(test_ctitlewidget, stateUpdate_002) //{ // mWidget->setShowState(CTitleWidget::Title_State_Normal); // mWidget->stateUpdate(); //} //TEST_F(test_ctitlewidget, miniStateShowSearchEdit_001) //{ // mWidget->miniStateShowSearchEdit(); // EXPECT_EQ(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, normalStateUpdateSearchEditWidth_001) //{ // mWidget->normalStateUpdateSearchEditWidth(); // EXPECT_NE(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, eventFilter_001) //{ // DButtonBoxButton btn(""); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); // mWidget->eventFilter(&btn, &e); // EXPECT_NE(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, eventFilter_002) //{ // QFocusEvent e(QEvent::FocusOut, Qt::TabFocusReason); // mWidget->eventFilter(mWidget->m_searchEdit, &e); // EXPECT_NE(mWidget->width(), mWidget->m_searchEdit->maximumWidth()); //} //TEST_F(test_ctitlewidget, slotShowSearchEdit_001) //{ // mWidget->slotShowSearchEdit(); //} //TEST_F(test_ctitlewidget, slotSearchEditFocusChanged_001) //{ // mWidget->slotSearchEditFocusChanged(true); //} //TEST_F(test_ctitlewidget, slotSearchEditFocusChanged_002) //{ // mWidget->setShowState(CTitleWidget::Title_State_Mini); // mWidget->slotSearchEditFocusChanged(false); //} test_ctitlewidget.h000066400000000000000000000012071523260663500350110ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CTITLEWIDGET_H #define TEST_CTITLEWIDGET_H //#include "ctitlewidget.h" //#include //#include //#include //class test_ctitlewidget: public::testing::Test //{ //public: // test_ctitlewidget(); // virtual void SetUp() // { // mWidget = new CTitleWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // CTitleWidget *mWidget = nullptr; //}; #endif // TEST_CTITLEWIDGET_H test_customframe.cpp000066400000000000000000000032731523260663500352060ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_customframe.h" test_customframe::test_customframe() { mCustomFrame = new CustomFrame(); } test_customframe::~test_customframe() { delete mCustomFrame; mCustomFrame = nullptr; } //void CustomFrame::setBColor(QColor normalC) TEST_F(test_customframe, setBcolor) { mCustomFrame->setBColor(Qt::red); } //void CustomFrame::setRoundState(bool lstate, bool tstate, bool rstate, bool bstate) TEST_F(test_customframe, setRoundState) { mCustomFrame->setRoundState(true, true, true, true); } //void CustomFrame::setTextStr(QFont font, QColor tc, QString strc, int flag) TEST_F(test_customframe, setTextStr) { QFont font; mCustomFrame->setTextStr(font, Qt::red, "hello", 1); } //void CustomFrame::setTextStr(QString strc) TEST_F(test_customframe, setTextstr) { mCustomFrame->setTextStr("hello"); } //void CustomFrame::setTextColor(QColor tc) TEST_F(test_customframe, setTextColor) { mCustomFrame->setTextColor(Qt::red); } //void CustomFrame::setTextFont(QFont font) TEST_F(test_customframe, setTextFont) { QFont font; mCustomFrame->setTextFont(font); } //void CustomFrame::setTextAlign(int flag) TEST_F(test_customframe, setTextAlign) { mCustomFrame->setTextAlign(2); } //void CustomFrame::setRadius(int radius) TEST_F(test_customframe, setRadius) { mCustomFrame->setRadius(4); } //void CustomFrame::setboreder(int framew) TEST_F(test_customframe, setboreder) { mCustomFrame->setboreder(4); } //void CustomFrame::setFixedSize(int w, int h) TEST_F(test_customframe, setFixedSize) { mCustomFrame->setFixedSize(40, 44); } test_customframe.h000066400000000000000000000007321523260663500346500ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CUSTOMFRAME_H #define TEST_CUSTOMFRAME_H #include #include #include "customWidget/customframe.h" class test_customframe: public::QObject, public::testing::Test { public: test_customframe(); ~test_customframe(); protected: CustomFrame *mCustomFrame = nullptr; }; #endif // TEST_CUSTOMFRAME_H test_jobtypecombobox.cpp000066400000000000000000000136651523260663500360740ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_jobtypecombobox.h" //#include "../third-party_stub/stub.h" //static QList jobtypecombobox_stub_JobTypeInfos1() //{ // QList infos; // infos.push_back(JobTypeInfo(1, "1", 0, "#000000")); // infos.push_back(JobTypeInfo(2)); // infos.push_back(JobTypeInfo(3, "3", 2, "#000000")); // return infos; //} //static QList jobtypecombobox_stub_JobTypeInfos2() //{ // QList infos; // infos.push_back(JobTypeInfo(1, "1", 0, "#000000")); // infos.push_back(JobTypeInfo(2, "2", 1, "#000000")); // infos.push_back(JobTypeInfo(3, "3", 2, "#000000")); // return infos; //} //static int jobtypecombobox_stub_flase() //{ // return 0; //} //test_jobtypecombobox::test_jobtypecombobox() //{ //} //TEST_F(test_jobtypecombobox, setAlert_001) //{ // mWidget->setAlert(true); // EXPECT_TRUE(mWidget->m_control->isAlert()); //} //TEST_F(test_jobtypecombobox, isAlert_001) //{ // mWidget->setAlert(true); // EXPECT_TRUE(mWidget->isAlert()); //} //TEST_F(test_jobtypecombobox, isAlert_002) //{ // mWidget->setAlert(false); // EXPECT_FALSE(mWidget->isAlert()); //} //TEST_F(test_jobtypecombobox, showAlertMessage_001) //{ // mWidget->showAlertMessage(""); //} //TEST_F(test_jobtypecombobox, showAlertMessage_002) //{ // mWidget->showAlertMessage("", mWidget); //} //TEST_F(test_jobtypecombobox, setAlertMessageAlignment_001) //{ // mWidget->setAlertMessageAlignment(Qt::AlignLeft); // EXPECT_EQ(mWidget->m_control->messageAlignment(), Qt::AlignLeft); //} //TEST_F(test_jobtypecombobox, hideAlertMessage_001) //{ // mWidget->hideAlertMessage(); //} //TEST_F(test_jobtypecombobox, getCurrentEditPositione_001) //{ // EXPECT_EQ(mWidget->getCurrentEditPosition(), mWidget->m_newPos); //} //TEST_F(test_jobtypecombobox, updateJobType_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // EXPECT_TRUE(mWidget->updateJobType()); //} //TEST_F(test_jobtypecombobox, getCurrentJobTypeNo_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos1); // stub.set(ADDR(QComboBox, currentIndex), jobtypecombobox_stub_flase); // mWidget->updateJobType(); // mWidget->getCurrentJobTypeNo(); //} //TEST_F(test_jobtypecombobox, setCurrentJobTypeNo_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos1); // mWidget->updateJobType(); // mWidget->setCurrentJobTypeNo(3); //} //TEST_F(test_jobtypecombobox, slotBtnAddItemClicked_001) //{ // mWidget->slotBtnAddItemClicked(); // EXPECT_TRUE(mWidget->isEditable()); // EXPECT_TRUE(mWidget->currentText().isEmpty()); //} //TEST_F(test_jobtypecombobox, showPopup_001) //{ // mWidget->showPopup(); // EXPECT_FALSE(mWidget->isEditable()); //} //TEST_F(test_jobtypecombobox, eventFilter_001) //{ // QPointF point(1, 1); // QEnterEvent e(point, point, point); // mWidget->showPopup(); // mWidget->eventFilter(mWidget->m_addBtn, &e); //} //TEST_F(test_jobtypecombobox, eventFilter_002) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QFocusEvent e(QEvent::FocusIn); // mWidget->showPopup(); // mWidget->eventFilter(mWidget->m_addBtn, &e); //} //TEST_F(test_jobtypecombobox, eventFilter_003) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); // mWidget->showPopup(); // mWidget->m_addBtn->setHighlight(true); // mWidget->eventFilter(mWidget->m_addBtn, &e); // EXPECT_TRUE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, eventFilter_004) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); // mWidget->showPopup(); // mWidget->m_addBtn->setHighlight(true); // mWidget->eventFilter(mWidget->m_addBtn, &e); // EXPECT_TRUE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, eventFilter_005) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // QPointF point(1, 1); // QKeyEvent e(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); // mWidget->showPopup(); // mWidget->m_addBtn->setHighlight(true); // mWidget->eventFilter(mWidget->m_customWidget, &e); // EXPECT_TRUE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, initUI_001) //{ // mWidget->initUI(); // EXPECT_FALSE(mWidget->isEditable()); //} //TEST_F(test_jobtypecombobox, addJobTypeItem_001) //{ // mWidget->addJobTypeItem(1, "#000000", ""); //} //TEST_F(test_jobtypecombobox, addCustomWidget_001) //{ // QFrame *viewContainer = mWidget->findChild(); // mWidget->addCustomWidget(viewContainer); // EXPECT_TRUE(mWidget->m_addBtn != nullptr); //} //TEST_F(test_jobtypecombobox, setItemSelectable_001) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // mWidget->showPopup(); // mWidget->setItemSelectable(true); // EXPECT_FALSE(mWidget->m_addBtn->isHighlight()); //} //TEST_F(test_jobtypecombobox, setItemSelectable_002) //{ // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypecombobox_stub_JobTypeInfos2); // mWidget->updateJobType(); // mWidget->showPopup(); // mWidget->setItemSelectable(false); //} test_jobtypecombobox.h000066400000000000000000000013121523260663500355230ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_JOBTYPECOMBOBOX_H #define TEST_JOBTYPECOMBOBOX_H //#include "jobtypecombobox.h" //#include //#include //#include //class test_jobtypecombobox: public::testing::Test //{ //public: // test_jobtypecombobox(); // virtual void SetUp() // { // mWidget = new JobTypeComboBox(); // mWidget->slotBtnAddItemClicked(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // JobTypeComboBox *mWidget = nullptr; //}; #endif // TEST_JOBTYPECOMBOBOX_H test_jobtypelistview.cpp000066400000000000000000000037721523260663500361300ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_jobtypelistview.h" //#include "cscheduleoperation.h" //#include "../dialog_stub.h" //static int jobtypelistview_stub_true(int) //{ // return 1; //} //test_jobtypelistview::test_jobtypelistview() //{ //} //TEST_F(test_jobtypelistview, canAdd_001) //{ // mWidget->canAdd(); //} //TEST_F(test_jobtypelistview, viewportEvent_001) //{ // QHoverEvent e(QEvent::HoverLeave, QPointF(0, 0), QPointF(0, 0)); // mWidget->viewportEvent(&e); //} //TEST_F(test_jobtypelistview, viewportEvent_002) //{ // QHoverEvent e(QEvent::HoverLeave, QPointF(0, 0), QPointF(0, 0)); // mWidget->m_iIndexCurrentHover = 0; // mWidget->viewportEvent(&e); //} //TEST_F(test_jobtypelistview, viewportEvent_003) //{ // QHoverEvent e(QEvent::HoverMove, QPointF(1, 1), QPointF(1, 1)); // mWidget->m_iIndexCurrentHover = 1; // mWidget->viewportEvent(&e); //} //TEST_F(test_jobtypelistview, initUI_001) //{ // mWidget->initUI(); //} //TEST_F(test_jobtypelistview, addJobTypeItem_001) //{ // mWidget->addJobTypeItem(JobTypeInfo()); //} //TEST_F(test_jobtypelistview, slotUpdateJobType_001) //{ // Stub stub; // calendarDDialogExecStub(stub); // mWidget->slotUpdateJobType(); //} //TEST_F(test_jobtypelistview, slotDeleteJobType_001) //{ // mWidget->slotDeleteJobType(); //} //TEST_F(test_jobtypelistview, slotDeleteJobType_002) //{ // mWidget->m_iIndexCurrentHover = 1; // mWidget->slotDeleteJobType(); //} //TEST_F(test_jobtypelistview, slotDeleteJobType_003) //{ // Stub stub; // calendarDDialogExecStub(stub); // stub.set(ADDR(CScheduleOperation, isJobTypeUsed), jobtypelistview_stub_true); // mWidget->m_iIndexCurrentHover = 1; // mWidget->slotDeleteJobType(); //} //TEST_F(test_jobtypelistview, updateJobType_003) //{ // mWidget->m_iIndexCurrentHover = 1; // mWidget->updateJobType(); // EXPECT_EQ(mWidget->m_iIndexCurrentHover, -1); //} test_jobtypelistview.h000066400000000000000000000021311523260663500355610ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_JOBTYPELISTVIEW_H #define TEST_JOBTYPELISTVIEW_H //#include "jobtypelistview.h" //#include "../third-party_stub/stub.h" //#include //#include //#include //static QList jobtypelistview_stub_JobTypeInfos() //{ // QList infos; // infos.push_back(JobTypeInfo(1, "1", 0, "#000000")); // infos.push_back(JobTypeInfo(2, "2", 1, "#000000")); // infos.push_back(JobTypeInfo(3, "3", 2, "#000000")); // return infos; //} //class test_jobtypelistview: public::testing::Test //{ //public: // test_jobtypelistview(); // void SetUp() // { // Stub stub; // stub.set(ADDR(JobTypeInfoManager, getJobTypeList), jobtypelistview_stub_JobTypeInfos); // mWidget = new JobTypeListView(); // } // void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // JobTypeListView *mWidget = nullptr; //}; #endif // TEST_JOBTYPELISTVIEW_H test_labelwidget.cpp000066400000000000000000000005651523260663500351450ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_labelwidget.h" //#include "../third-party_stub/stub.h" //test_labelwidget::test_labelwidget() //{ //} //TEST_F(test_labelwidget, paintEvent_001) //{ // QPaintEvent e(QRect(0, 0, 0, 0)); // mWidget->paintEvent(&e); //} test_labelwidget.h000066400000000000000000000011761523260663500346110ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_LABELWIDGET_H #define TEST_LABELWIDGET_H //#include "labelwidget.h" //#include //#include //#include //class test_labelwidget: public::testing::Test //{ //public: // test_labelwidget(); // virtual void SetUp() // { // mWidget = new LabelWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // LabelWidget *mWidget = nullptr; //}; #endif // TEST_LABELWIDGET_H test_lunarcalendarwidget.cpp000066400000000000000000000007531523260663500367000ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_lunarcalendarwidget.h" //test_lunarcalendarwidget::test_lunarcalendarwidget() //{ //} //TEST_F(test_lunarcalendarwidget, setLunarYearText_001) //{ // mWidget->setLunarYearText("2023"); // EXPECT_EQ(mWidget->lunarYearText(), "2023"); //} //TEST_F(test_lunarcalendarwidget, minimumSizeHint_001) //{ // mWidget->minimumSizeHint(); //} test_lunarcalendarwidget.h000066400000000000000000000012761523260663500363460ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_LUNARCALENDARWIDGET_H #define TEST_LUNARCALENDARWIDGET_H //#include "lunarcalendarwidget.h" //#include //#include //#include //class test_lunarcalendarwidget: public::testing::Test //{ //public: // test_lunarcalendarwidget(); // virtual void SetUp() // { // mWidget = new LunarCalendarWidget(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // LunarCalendarWidget *mWidget = nullptr; //}; #endif // TEST_LUNARCALENDARWIDGET_H test_monthbrefwidget.cpp000066400000000000000000000124521523260663500360500ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthbrefwidget.h" #include #include #include #include test_monthbrefwidget::test_monthbrefwidget() { } test_monthbrefwidget::~test_monthbrefwidget() { } void test_monthbrefwidget::SetUp() { mMonthBrefWidget = new MonthBrefWidget(); mMonthDayRect = new CMonthDayRect(); } void test_monthbrefwidget::TearDown() { delete mMonthBrefWidget; mMonthBrefWidget = nullptr; delete mMonthDayRect; mMonthDayRect = nullptr; } QVector getDateList() { QDate currentdate = QDate::currentDate(); QVector dateList; for (int i = 0; i < 42; i++) { dateList.append(currentdate.addDays(i)); } return dateList; } QVector getBoolList() { QVector lineList; for (int i = 0; i < 42; i++) { if (i % 2 == 0) lineList.append(true); else lineList.append(false); } return lineList; } //void MonthBrefWidget::setDate(const int showMonth, const QVector &showDate) TEST_F(test_monthbrefwidget, setDate) { const int month = 4; mMonthBrefWidget->setDate(month, getDateList()); } //void MonthBrefWidget::setTheMe(int type) TEST_F(test_monthbrefwidget, setTheMe) { mMonthBrefWidget->setTheMe(1); mMonthBrefWidget->setTheMe(2); } //void MonthBrefWidget::setLintFlag(const QVector &lineFlag) TEST_F(test_monthbrefwidget, setLintFlag) { mMonthBrefWidget->setLintFlag(getBoolList()); } //void MonthBrefWidget::setSearchScheduleFlag(const QVector &searchFlag) TEST_F(test_monthbrefwidget, setSearchScheduleFlag) { mMonthBrefWidget->setSearchScheduleFlag(getBoolList()); } //void MonthBrefWidget::updateSize() TEST_F(test_monthbrefwidget, updateSize) { mMonthBrefWidget->updateSize(); } //int MonthBrefWidget::getMousePosItem(const QPointF &pos) TEST_F(test_monthbrefwidget, getMousePosItem) { QPointF pointf; mMonthBrefWidget->getMousePosItem(pointf); } //void MonthBrefWidget::mousePress(const QPoint &point TEST_F(test_monthbrefwidget, mousePress) { QPoint point; mMonthBrefWidget->mousePress(point); } //void CMonthDayRect::setTheMe(int type) TEST_F(test_monthbrefwidget, settheme) { mMonthDayRect->setTheMe(1); mMonthDayRect->setTheMe(2); } //void CMonthDayRect::setDate(const QDate &date) TEST_F(test_monthbrefwidget, setdate) { mMonthDayRect->setDate(QDate::currentDate()); } //QDate CMonthDayRect::getDate() const TEST_F(test_monthbrefwidget, getdate) { mMonthDayRect->setDate(QDate::currentDate()); mMonthDayRect->getDate(); } //void CMonthDayRect::setCellEvent(const CMonthDayRect::CellEventType &type) TEST_F(test_monthbrefwidget, setCellEvent) { mMonthDayRect->setCellEvent(CMonthDayRect::CellEventType::Cellhover); } //void CMonthDayRect::setIsCurrentMonth(const bool isCurrMonth) TEST_F(test_monthbrefwidget, setIsCurrentMonth) { mMonthDayRect->setIsCurrentMonth(true); } //QRectF CMonthDayRect::rect() const TEST_F(test_monthbrefwidget, rect) { mMonthDayRect->setRect(QRect(10, 10, 8, 8)); mMonthDayRect->rect(); } //void CMonthDayRect::setRect(const QRectF &rect) TEST_F(test_monthbrefwidget, setRect) { mMonthDayRect->setRect(QRect(10, 10, 8, 8)); } //void CMonthDayRect::setRect(qreal x, qreal y, qreal w, qreal h) TEST_F(test_monthbrefwidget, setrect) { // mMonthDayRect->setRect(8, 8, 8, 8); } //void CMonthDayRect::setLineFlag(const bool flag) TEST_F(test_monthbrefwidget, setLIneflag) { mMonthDayRect->setLineFlag(true); } //void CMonthDayRect::setSearchScheduleFlag(const bool flag) TEST_F(test_monthbrefwidget, setSearchScheduleflag) { mMonthDayRect->setSearchScheduleFlag(true); } //void CMonthDayRect::setDevicePixelRatio(const qreal pixel) TEST_F(test_monthbrefwidget, setDevicePixelRatio) { mMonthDayRect->setDevicePixelRatio(2); } //void CMonthDayRect::setCurrentRect(CMonthDayRect *currrect) TEST_F(test_monthbrefwidget, setCurrentrect) { mMonthDayRect->setCurrentRect(mMonthDayRect); } //void CMonthDayRect::setSystemActiveColor(const QColor &activeColor) TEST_F(test_monthbrefwidget, setSystemActiveColor) { mMonthDayRect->setSystemActiveColor(Qt::red); } //getPixmap TEST_F(test_monthbrefwidget, getPixmap) { mMonthBrefWidget->setFixedSize(800, 500); mMonthBrefWidget->setDate(QDate::currentDate().month(), getDateList()); QPixmap pixmap(mMonthBrefWidget->size()); mMonthBrefWidget->render(&pixmap); } TEST_F(test_monthbrefwidget, resizeEvent) { mMonthBrefWidget->setFixedSize(QSize(600, 500)); QResizeEvent resizeEvent(QSize(600, 501), QSize(600, 500)); QApplication::sendEvent(mMonthBrefWidget, &resizeEvent); } TEST_F(test_monthbrefwidget, mouseEvent) { mMonthBrefWidget->setFixedSize(QSize(600, 500)); mMonthBrefWidget->setDate(QDate::currentDate().month(), getDateList()); QTest::mouseDClick(mMonthBrefWidget, Qt::MouseButton::LeftButton); QTest::mouseRelease(mMonthBrefWidget, Qt::MouseButton::LeftButton); } //mouseDoubleClickEvent TEST_F(test_monthbrefwidget, mouseDoubleClickEvent) { mMonthBrefWidget->setFixedSize(QSize(600, 500)); mMonthBrefWidget->setDate(QDate::currentDate().month(), getDateList()); QTest::mouseDClick(mMonthBrefWidget, Qt::MouseButton::LeftButton); } test_monthbrefwidget.h000066400000000000000000000011441523260663500355110ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHBREFWIDGET_H #define TEST_MONTHBREFWIDGET_H #include #include #include "customWidget/monthbrefwidget.h" class test_monthbrefwidget : public::QObject, public::testing::Test { public: test_monthbrefwidget(); ~test_monthbrefwidget(); void SetUp() override; void TearDown() override; protected: MonthBrefWidget *mMonthBrefWidget = nullptr; CMonthDayRect *mMonthDayRect = nullptr; }; #endif // TEST_MONTHBREFWIDGET_H test_scheduleremindwidget.cpp000066400000000000000000000052361523260663500370610ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduleremindwidget.h" test_scheduleremindwidget::test_scheduleremindwidget() { mScheduleRemindWidget = new ScheduleRemindWidget(); mCenterWidget = new CenterWidget(); } test_scheduleremindwidget::~test_scheduleremindwidget() { delete mScheduleRemindWidget; mScheduleRemindWidget = nullptr; delete mCenterWidget; mCenterWidget = nullptr; } QVector getScheduleRemindData() { ScheduleDataInfo schedule1, schedule2; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(false); schedule2.setType(2); schedule2.setRecurID(0); QVector scheduleList{}; scheduleList.append(schedule1); scheduleList.append(schedule2); return scheduleList; } //void SchecduleRemindWidget::setData(const ScheduleDataInfo &vScheduleInfo, const CSchedulesColor &gcolor) TEST_F(test_scheduleremindwidget, setData) { CSchedulesColor gdcolor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(2); mScheduleRemindWidget->setData(getScheduleRemindData().first(), gdcolor); } //void SchecduleRemindWidget::setDirection(DArrowRectangle::ArrowDirection value) TEST_F(test_scheduleremindwidget, setdirection) { mScheduleRemindWidget->setDirection(DArrowRectangle::ArrowDirection::ArrowRight); } //void CenterWidget::setData(const ScheduleDataInfo &vScheduleInfo, const CSchedulesColor &gcolor) TEST_F(test_scheduleremindwidget, setDate) { CSchedulesColor gdcolor = CScheduleDataManage::getScheduleDataManage()->getScheduleColorByType(2); mCenterWidget->setData(getScheduleRemindData().first(), gdcolor); } //void CenterWidget::setTheMe(const int type) TEST_F(test_scheduleremindwidget, setTheMe) { mCenterWidget->setTheMe(1); mCenterWidget->setTheMe(2); } //void CenterWidget::UpdateTextList() TEST_F(test_scheduleremindwidget, updateTextList) { mCenterWidget->UpdateTextList(); } //getPixmap TEST_F(test_scheduleremindwidget, getPixmap) { mCenterWidget->setFixedSize(800, 500); QPixmap pixmap(mCenterWidget->size()); mCenterWidget->render(&pixmap); } test_scheduleremindwidget.h000066400000000000000000000011271523260663500365210ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEREMINDWIDGET_H #define TEST_SCHEDULEREMINDWIDGET_H #include #include #include "customWidget/scheduleRemindWidget.h" class test_scheduleremindwidget : public::QObject, public::testing::Test { public: test_scheduleremindwidget(); ~test_scheduleremindwidget(); protected: ScheduleRemindWidget *mScheduleRemindWidget = nullptr; CenterWidget *mCenterWidget = nullptr; }; #endif // TEST_SCHEDULEREMINDWIDGET_H test_scheduleview.cpp000066400000000000000000000202501523260663500353420ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduleview.h" #include "../third-party_stub/stub.h" static QLocale::Language scheduleview_stub_language() { return QLocale::English; } static bool scheduleview_stub_event() { return true; } static touchGestureOperation::TouchState scheduleview_getTouchState = touchGestureOperation::T_STATE_NONE; static touchGestureOperation::TouchState scheduleview_stub_getTouchState() { return scheduleview_getTouchState; } test_scheduleview::test_scheduleview() { mScheduleView = new CScheduleView(); } test_scheduleview::~test_scheduleview() { delete mScheduleView; mScheduleView = nullptr; } QVector getScheduleData() { ScheduleDataInfo schedule1, schedule2; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(false); schedule2.setType(2); schedule2.setRecurID(0); QVector scheduleList{}; scheduleList.append(schedule1); scheduleList.append(schedule2); return scheduleList; } //void CScheduleView::setviewMargin(int left, int top, int right, int bottom) TEST_F(test_scheduleview, setviewMargin) { mScheduleView->setviewMargin(8, 8, 4, 4); } //void CScheduleView::setRange(int w, int h, QDate begin, QDate end) TEST_F(test_scheduleview, setRange) { mScheduleView->setRange(4, 4, QDate::currentDate(), QDate::currentDate().addDays(1)); } //void CScheduleView::setRange(QDate begin, QDate end) TEST_F(test_scheduleview, setrange) { mScheduleView->setRange(QDate::currentDate(), QDate::currentDate().addDays(1)); } //void CScheduleView::setTheMe(int type) TEST_F(test_scheduleview, setTheMe) { mScheduleView->setTheMe(1); mScheduleView->setTheMe(2); } //void CScheduleView::setLunarVisible(bool state) TEST_F(test_scheduleview, setLunarVisible) { mScheduleView->setLunarVisible(true); } //void CScheduleView::setTime(QTime time) TEST_F(test_scheduleview, setTime) { mScheduleView->setTime(QTime::currentTime()); } //void CScheduleView::setSelectSchedule(const ScheduleDataInfo &scheduleInfo) TEST_F(test_scheduleview, setSelectSchedule) { ScheduleDataInfo scheduleinfo = getScheduleData().first(); mScheduleView->setSelectSchedule(scheduleinfo); scheduleinfo = getScheduleData().at(1); mScheduleView->setSelectSchedule(scheduleinfo); } //void CScheduleView::updateHeight() TEST_F(test_scheduleview, updateHeight) { mScheduleView->updateHeight(); } //bool CScheduleView::IsDragging() TEST_F(test_scheduleview, IsDragging) { mScheduleView->IsDragging(); } //void CScheduleView::setCurrentDate(const QDateTime ¤tDate) TEST_F(test_scheduleview, setCurrentDate) { mScheduleView->setCurrentDate(QDateTime::currentDateTime()); } //void CScheduleView::setShowScheduleInfo(const QMap > &scheduleInfo) TEST_F(test_scheduleview, setShowScheduleInfo) { QMap > dateInfoMap; dateInfoMap.insert(QDate::currentDate(), getScheduleData()); mScheduleView->setShowScheduleInfo(dateInfoMap); } //void CScheduleView::setDate(QDate date) TEST_F(test_scheduleview, setDate) { mScheduleView->setDate(QDate::currentDate()); } //void CScheduleView::slotupdateSchedule() TEST_F(test_scheduleview, slotupdateSchedule) { mScheduleView->slotupdateSchedule(); } //void CScheduleView::slotPosHours(QVector vPos, QVector vHours, int currentTimeType) TEST_F(test_scheduleview, slotPosHours) { QVector pos; pos.append(1); pos.append(2); pos.append(3); pos.append(4); QVector hours; hours.append(4); hours.append(8); hours.append(16); hours.append(20); mScheduleView->slotPosHours(pos, hours, 1); } //void CScheduleView::slotCurrentScheduleDate(QDate date) TEST_F(test_scheduleview, slotCurrentScheduleDate) { mScheduleView->slotCurrentScheduleDate(QDate::currentDate()); } //void CScheduleView::slotScheduleShow(const bool isShow, const ScheduleDataInfo &out) TEST_F(test_scheduleview, slotScheduleShow) { mScheduleView->slotScheduleShow(false, getScheduleData().first()); mScheduleView->slotScheduleShow(true, getScheduleData().at(1)); } //void CScheduleView::slotUpdatePaint(const int topM) TEST_F(test_scheduleview, slotUpdatePaint) { const int top = 4; mScheduleView->slotUpdatePaint(top); } //void CScheduleView::slotUpdateScene() TEST_F(test_scheduleview, slotUpdateScene) { mScheduleView->slotUpdateScene(); } //void CScheduleView::updateSchedule() TEST_F(test_scheduleview, updateSchedule) { mScheduleView->updateSchedule(); } //void CScheduleView::updateAllday() TEST_F(test_scheduleview, updateAllday) { mScheduleView->updateAllday(); } //int CScheduleView::scheduleViewHeight() TEST_F(test_scheduleview, scheduleViewHeight) { mScheduleView->scheduleViewHeight(); } //getPixmap TEST_F(test_scheduleview, getPixmap) { QVector pos; pos.append(1); pos.append(2); pos.append(3); pos.append(4); QVector hours; hours.append(4); hours.append(8); hours.append(16); hours.append(20); mScheduleView->slotPosHours(pos, hours, 1); mScheduleView->setFixedSize(800, 500); QPixmap pixmap(mScheduleView->size()); mScheduleView->render(&pixmap); } TEST_F(test_scheduleview, paintEvent_01) { QPaintEvent e(QRect(0, 0, 100, 100)); mScheduleView->paintEvent(&e); } TEST_F(test_scheduleview, paintEvent_02) { mScheduleView->m_currentTimeType = 1; QPaintEvent e(QRect(0, 0, 100, 100)); mScheduleView->paintEvent(&e); } TEST_F(test_scheduleview, paintEvent_03) { Stub stub; stub.set(ADDR(QLocale, language), scheduleview_stub_language); QPaintEvent e(QRect(0, 0, 100, 100)); CScheduleView view; view.paintEvent(&e); } TEST_F(test_scheduleview, paintEvent_04) { Stub stub; stub.set(ADDR(QLocale, language), scheduleview_stub_language); QPaintEvent e(QRect(0, 0, 100, 100)); CScheduleView view; view.m_currentTimeType = 1; view.paintEvent(&e); } TEST_F(test_scheduleview, event_01) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_STATE_NONE; CScheduleView view; view.event(&e); } TEST_F(test_scheduleview, event_02) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_SINGLE_CLICK; CScheduleView view; view.event(&e); } TEST_F(test_scheduleview, event_03) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_SLIDE; CScheduleView view; view.m_touchGesture.setUpdate(true); view.m_touchGesture.m_movingDir = touchGestureOperation::T_LEFT; view.event(&e); } TEST_F(test_scheduleview, event_04) { Stub stub; stub.set(ADDR(touchGestureOperation, event), scheduleview_stub_event); stub.set(ADDR(touchGestureOperation, getTouchState), scheduleview_stub_getTouchState); QPaintEvent e(QRect(0, 0, 100, 100)); scheduleview_getTouchState = touchGestureOperation::T_SLIDE; CScheduleView view; view.m_touchGesture.setUpdate(true); view.m_touchGesture.m_movingDir = touchGestureOperation::T_RIGHT; view.event(&e); } test_scheduleview.h000066400000000000000000000007451523260663500350160ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEVIEW_H #define TEST_SCHEDULEVIEW_H #include #include #include "customWidget/scheduleview.h" class test_scheduleview : public::QObject, public::testing::Test { public: test_scheduleview(); ~test_scheduleview(); protected: CScheduleView *mScheduleView = nullptr; }; #endif // TEST_SCHEDULEVIEW_H test_timeedit.cpp000066400000000000000000000030211523260663500344540ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_timeedit.h" #include #include #include test_timeedit::test_timeedit() { mTimeEdit = new CTimeEdit(); } test_timeedit::~test_timeedit() { delete mTimeEdit; mTimeEdit = nullptr; } //void CTimeEdit::setTime(QTime time) TEST_F(test_timeedit, setTime) { mTimeEdit->setTime(QTime(23, 59, 59)); } //QTime CTimeEdit::getTime() TEST_F(test_timeedit, getTime) { mTimeEdit->getTime(); } //setTimeFormat TEST_F(test_timeedit, setTimeFormat) { mTimeEdit->setTimeFormat(1); mTimeEdit->setTimeFormat(0); } //slotFocusDraw TEST_F(test_timeedit, slotFocusDraw) { mTimeEdit->slotFocusDraw(false); } //getPixmap TEST_F(test_timeedit, getPixmap) { mTimeEdit->slotFocusDraw(true); mTimeEdit->setFixedSize(200, 50); QPixmap pixmap(mTimeEdit->size()); mTimeEdit->render(&pixmap); } TEST_F(test_timeedit,focusInEvent) { QFocusEvent focusEvent_in( QEvent::FocusIn,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(mTimeEdit,&focusEvent_in); } TEST_F(test_timeedit, slotActivated_01) { mTimeEdit->slotActivated(""); } TEST_F(test_timeedit, slotEditingFinished_01) { mTimeEdit->slotEditingFinished(); } TEST_F(test_timeedit, initUI_01) { mTimeEdit->initUI(); } TEST_F(test_timeedit, initConnection_01) { mTimeEdit->initConnection(); } TEST_F(test_timeedit, showPopup_01) { mTimeEdit->showPopup(); } test_timeedit.h000066400000000000000000000007041523260663500341260ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TIMEEDIT_H #define TEST_TIMEEDIT_H #include #include #include "customWidget/timeedit.h" class test_timeedit : public QObject , public testing::Test { public: test_timeedit(); ~test_timeedit(); protected: CTimeEdit *mTimeEdit = nullptr; }; #endif // TEST_TIMEEDIT_H test_titlewidget.cpp000066400000000000000000000034371523260663500352100ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_titlewidget.h" #include #include #include #include test_titleWidget::test_titleWidget() { } void test_titleWidget::SetUp() { m_titleWidget = new CTitleWidget(); } void test_titleWidget::TearDown() { delete m_titleWidget; m_titleWidget = nullptr; } TEST_F(test_titleWidget,resizeEvent) { m_titleWidget->setFixedSize(600,30); QResizeEvent resizeEvent(QSize(500,30),QSize(600,30)); QApplication::sendEvent(m_titleWidget, &resizeEvent); m_titleWidget->setFixedSize(1900,30); QResizeEvent resizeEvent1(QSize(1920,30),QSize(1900,30)); QApplication::sendEvent(m_titleWidget, &resizeEvent1); } TEST_F(test_titleWidget,eventFilter) { DButtonBoxButton *boxbtn = m_titleWidget->findChild(); if(boxbtn){ QKeyEvent keyevent(QEvent::KeyPress,Qt::Key_Return,Qt::NoModifier); QApplication::sendEvent(boxbtn,&keyevent); } DSearchEdit *edit = m_titleWidget->findChild(); if(edit){ QFocusEvent focusEvent_in( QEvent::FocusIn,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(edit->lineEdit(),&focusEvent_in); QFocusEvent focusEvent_out( QEvent::FocusOut,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(edit->lineEdit(),&focusEvent_out); } DButtonBox *buttonBox = m_titleWidget->findChild(); if(buttonBox){ buttonBox->button(0)->setFocus(); buttonBox->button(0)->setChecked(true); QFocusEvent focusEvent_in(QEvent::FocusIn,Qt::FocusReason::ActiveWindowFocusReason); QApplication::sendEvent(buttonBox,&focusEvent_in); } }test_titlewidget.h000066400000000000000000000010461523260663500346470ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TITLEWIDGET_H #define TEST_TITLEWIDGET_H #include #include #include "customWidget/ctitlewidget.h" class test_titleWidget : public QObject,public testing::Test { Q_OBJECT public: explicit test_titleWidget(); void SetUp() override; void TearDown() override; signals: public slots: public: CTitleWidget *m_titleWidget = nullptr; }; #endif // TEST_TITLEWIDGET_H test_todaybutton.cpp000066400000000000000000000050631523260663500352340ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_todaybutton.h" #include #include #include //#include test_todaybutton::test_todaybutton() { } void test_todaybutton::SetUp() { mTodayButton = new CTodayButton(); } void test_todaybutton::TearDown() { delete mTodayButton; mTodayButton = nullptr; } //void CTodayButton::setBColor(QColor normalC, QColor hoverC, QColor pressc, QColor normalC1, QColor hoverC1, QColor pressc1) TEST_F(test_todaybutton, setBColor) { mTodayButton->setBColor("#FFFFFF", "#000000", "#000000", "#FFFFFF", "#000000", "#000000"); } //void CTodayButton::setTColor(QColor normalC, QColor hoverC, QColor pressc) TEST_F(test_todaybutton, setTColor) { mTodayButton->setTColor(Qt::red, "#001A2E", "#0081FF"); } //void CTodayButton::setshadowColor(QColor sc) TEST_F(test_todaybutton, setshadowColor) { mTodayButton->setshadowColor("#FFFFFF"); } //test mouse event TEST_F(test_todaybutton, mouseEventTest) { QTest::mousePress(mTodayButton, Qt::LeftButton); QTest::mouseRelease(mTodayButton, Qt::LeftButton); QWidget *testWidget = new QWidget(); CTodayButton *toDayButton = new CTodayButton(testWidget); toDayButton->setGeometry(10, 10, 20, 20); testWidget->setFixedSize(50, 50); toDayButton->setFocus(Qt::TabFocusReason); QTest::mouseMove(testWidget, QPoint(2, 2)); QTest::mouseMove(testWidget, QPoint(15, 15)); QTest::mouseMove(testWidget, QPoint(45, 45)); QTest::keyClick(testWidget, Qt::Key_Tab); QTest::keyClick(testWidget->focusWidget(), Qt::Key_Tab); QTest::keyClick(testWidget->focusWidget(), Qt::Key_Tab); delete testWidget; } //test key event TEST_F(test_todaybutton, keyEventTest) { QTest::keyClick(mTodayButton, Qt::Key_Enter); QTest::keyClick(mTodayButton, Qt::Key_Tab); } //QTEST_MAIN(testGUI_toDayButton) TEST_F(test_todaybutton,focusOutEvent) { mTodayButton->setFocus(); QFocusEvent focusEvent_out( QEvent::FocusOut,Qt::FocusReason::TabFocusReason); QApplication::sendEvent(mTodayButton,&focusEvent_out); } TEST_F(test_todaybutton,enterEvent) { QEnterEvent enterEvent(QPointF(10,2),QPointF(11,3),QPointF(12,4)); QApplication::sendEvent(mTodayButton,&enterEvent); QEvent event(QEvent::Leave); QApplication::sendEvent(mTodayButton,&event); } TEST_F(test_todaybutton,keypressEvent) { QKeyEvent keyevent(QEvent::KeyPress,Qt::Key_Return,Qt::NoModifier); QApplication::sendEvent(mTodayButton,&keyevent); } test_todaybutton.h000066400000000000000000000010111523260663500346660ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_customWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TODAYBUTTON_H #define TEST_TODAYBUTTON_H #include #include #include "customWidget/todaybutton.h" class test_todaybutton : public::QObject, public::testing::Test { Q_OBJECT public: test_todaybutton(); void SetUp() override; void TearDown() override; protected: CTodayButton *mTodayButton = nullptr; }; #endif // TEST_TODAYBUTTON_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage/000077500000000000000000000000001523260663500305345ustar00rootroot00000000000000test_calendardatedatamanage.cpp000066400000000000000000000101441523260663500366320ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_calendardatedatamanage.h" //#include //test_calendardatedatamanage::test_calendardatedatamanage() //{ //} //void test_calendardatedatamanage::SetUp() //{ // calendarDateDataManager = new CalendarDateDataManager(); //} //void test_calendardatedatamanage::TearDown() //{ // delete calendarDateDataManager; // calendarDateDataManager = nullptr; //} ///** // *本类是为获å�–当å‰�日期的类,所拿到的数æ�®ä¼šæ ¹æ�®å½“å‰�æ—¶é—´ä¸�æ–­å�˜åŒ–,因此暂时ä¸�å�šè¿”回值判断 // */ ////void CalendarDateDataManager::setSelectDate(const QDate &selectDate, const bool isSwitchYear) //TEST_F(test_calendardatedatamanage, setSelectDate) //{ // QDate selectDate(2020, 12, 25); // bool isSwitchYear = true; // calendarDateDataManager->setSelectDate(selectDate, isSwitchYear); // isSwitchYear = false; // calendarDateDataManager->setSelectDate(selectDate, isSwitchYear); //} ////QDate CalendarDateDataManager::getSelectDate() const //TEST_F(test_calendardatedatamanage, getSelectDate) //{ // QDate selectDate; // selectDate = calendarDateDataManager->getSelectDate(); // //qCInfo(CommonLogger) << selectDate; //} ////void CalendarDateDataManager::setCurrentDateTime(const QDateTime ¤tDateTime) //TEST_F(test_calendardatedatamanage, setCurrentDateTime) //{ // QDate date(2020, 12, 25); // QDateTime currentDateTime(date); // calendarDateDataManager->setCurrentDateTime(currentDateTime); //} ////QDateTime CalendarDateDataManager::getCurrentDate() const //TEST_F(test_calendardatedatamanage, getCurrentDate) //{ // QDateTime currentDateTime; // currentDateTime = calendarDateDataManager->getCurrentDate(); //} ////QMap > CalendarDateDataManager::getYearDate() //TEST_F(test_calendardatedatamanage, getYearDate) //{ // QMap > dateTime; // dateTime = calendarDateDataManager->getYearDate(); //} ////QVector CalendarDateDataManager::getWeekDate(const QDate &date) //TEST_F(test_calendardatedatamanage, getWeekDate) //{ // QDate selectDate(2020, 12, 25); // QVector dateV = calendarDateDataManager->getWeekDate(selectDate); //} ////void CalendarDateDataManager::setWeekFirstDay(const Qt::DayOfWeek &firstDay) //TEST_F(test_calendardatedatamanage, setWeekFirstDay) //{ // Qt::DayOfWeek firstDay(Qt::Sunday); // calendarDateDataManager->setWeekFirstDay(firstDay); //} //// Qt::DayOfWeek CalendarDateDataManager::getWeekFirstDay() //TEST_F(test_calendardatedatamanage, getWeekFirstDay) //{ // assert(Qt::Sunday == calendarDateDataManager->getWeekFirstDay()); //} ////void CalendarDateDataManager::setWeekDayFormatByID(const int &weekDayFormatID) //TEST_F(test_calendardatedatamanage, setWeekDayFormatByID) //{ // int setWeekDayFormatByID = 0; // calendarDateDataManager->setWeekDayFormatByID(setWeekDayFormatByID); // setWeekDayFormatByID = 1; // calendarDateDataManager->setWeekDayFormatByID(setWeekDayFormatByID); //} ////QString CalendarDateDataManager::getWeekDayFormat() const //TEST_F(test_calendardatedatamanage, getWeekDayFormat) //{ // QString getWEKfomat; // calendarDateDataManager->getWeekDayFormat(); //} ////ShowDateRange CalendarDateDataManager::getShowDateRange() const //TEST_F(test_calendardatedatamanage, getShowDateRange) //{ // ShowDateRange showDateR; // showDateR = calendarDateDataManager->getShowDateRange(); //} ////int CalendarDateDataManager::getWeekNumOfYear(const QDate &date) //TEST_F(test_calendardatedatamanage, getWeekNumOfYear) //{ // //2020-12-25 为第52周 // QDate date(2020, 12, 25); // assert(52 == calendarDateDataManager->getWeekNumOfYear(date)); //} //TEST_F(test_calendardatedatamanage, setDateFormatChanged) //{ // for (int i = 0; i < 10; ++i) { // calendarDateDataManager->setDateFormatChanged(i); // } //} ////setTimeFormatChanged //TEST_F(test_calendardatedatamanage, setTimeFormatChanged) //{ // calendarDateDataManager->setTimeFormatChanged(0); // calendarDateDataManager->setTimeFormatChanged(1); //} test_calendardatedatamanage.h000066400000000000000000000011371523260663500363010ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARDATEDATAMANAGE_H #define TEST_CALENDARDATEDATAMANAGE_H //#include "calendardatedatamanage.h" //#include "gtest/gtest.h" //#include //class test_calendardatedatamanage : public QObject, public::testing::Test //{ //public: // test_calendardatedatamanage(); // void SetUp() override; // void TearDown() override; //protected: // CalendarDateDataManager *calendarDateDataManager = nullptr; //}; #endif // TEST_CALENDARDATEDATAMANAGE_H test_schedulecoormanage.cpp000066400000000000000000000125471523260663500360610ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_schedulecoormanage.h" //#include //test_schedulecoormanage::test_schedulecoormanage() //{ // cScheduleCoorManage = new CScheduleCoorManage(); //} //test_schedulecoormanage::~test_schedulecoormanage() //{ // delete cScheduleCoorManage; //} ////void CScheduleCoorManage::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) //TEST_F(test_schedulecoormanage, setRange) //{ // int w = 100; // int h = 100; // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, begindate, enddate, rightmagin); //} ////void CScheduleCoorManage::setDateRange(QDate begindate, QDate enddate) //TEST_F(test_schedulecoormanage, setDateRange) //{ // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 21); // cScheduleCoorManage->setDateRange(begindate, enddate); // cScheduleCoorManage->setDateRange(enddate, begindate); // int w = 100; // int h = 100; // QDate m_begindate(2020, 12, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // cScheduleCoorManage->setDateRange(begindate, enddate); //} ///** // * @brief test_schedulecoormanage, getDrawRegion // * (QDateTime begintime, QDateTime endtime) // * (QDateTime begintime, QDateTime endtime, int index, int coount) // * (QDate date, QDateTime begintime, QDateTime endtime, int index, int coount, int maxnum, int type) // */ //TEST_F(test_schedulecoormanage, getDrawRegion) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cScheduleCoorManage->getDrawRegion(begindate, enddate); // cScheduleCoorManage->getDrawRegion(enddate, begindate); // int index = 2; // int coount = 1; // cScheduleCoorManage->getDrawRegion(begindate, enddate, index, coount); // cScheduleCoorManage->getDrawRegion(enddate, begindate, index, coount); // QDate date(2020, 12, 31); // int maxnum = 3; // int type = 0; // cScheduleCoorManage->getDrawRegion(date, begindate, enddate, index, coount, maxnum, type); // cScheduleCoorManage->getDrawRegion(date, enddate, begindate, index, coount, maxnum, type); // int w = 100; // int h = 100; // QDate m_begindate(2020, 11, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // cScheduleCoorManage->getDrawRegion(begindate, enddate); // cScheduleCoorManage->getDrawRegion(begindate, enddate, index, coount); // coount = 5; // cScheduleCoorManage->getDrawRegion(date, begindate, enddate, index, coount, maxnum, type); // index = 5; // cScheduleCoorManage->getDrawRegion(date, begindate, enddate, index, coount, maxnum, type); //} ////QRectF CScheduleCoorManage::getDrawRegionF(QDateTime begintime, QDateTime endtime) //TEST_F(test_schedulecoormanage, getDrawRegionF) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cScheduleCoorManage->getDrawRegionF(begindate, enddate); // cScheduleCoorManage->getDrawRegionF(enddate, begindate); // int w = 100; // int h = 100; // QDate m_begindate(2020, 11, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // cScheduleCoorManage->getDrawRegionF(begindate, enddate); //} ////QRectF CScheduleCoorManage::getAllDayDrawRegion(QDate begin, QDate end) //TEST_F(test_schedulecoormanage, getAllDayDrawRegion) //{ // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 31); // cScheduleCoorManage->getAllDayDrawRegion(begindate, enddate); // cScheduleCoorManage->getAllDayDrawRegion(enddate, begindate); //} ////QDateTime CScheduleCoorManage::getDate(QPointF pos) //TEST_F(test_schedulecoormanage, getDate) //{ // QPointF pos(0, 0); // QDateTime dateTime = cScheduleCoorManage->getDate(pos); // qCInfo(CommonLogger) << dateTime; // QPointF pos1(-1, 0); // QDateTime dateTime1 = cScheduleCoorManage->getDate(pos1); //} ////QDate CScheduleCoorManage::getsDate(QPointF pos) //TEST_F(test_schedulecoormanage, getsDate) //{ // QPointF pos(0, 0); // QDate date = cScheduleCoorManage->getsDate(pos); // qCInfo(CommonLogger) << date; // QPointF pos1(-1, 0); // cScheduleCoorManage->getsDate(pos1); //} ////float CScheduleCoorManage::getHeight(const QTime &time) //TEST_F(test_schedulecoormanage, getHeight) //{ // QTime time(18, 8, 9, 30); // assert(0 <= cScheduleCoorManage->getHeight(time)); //} ////QDate getBegindate() //TEST_F(test_schedulecoormanage, getBegindate) //{ // int w = 100; // int h = 100; // QDate m_begindate(2020, 11, 11); // QDate m_enddate(2020, 12, 31); // int rightmagin = 1; // cScheduleCoorManage->setRange(w, h, m_begindate, m_enddate, rightmagin); // assert(m_begindate == cScheduleCoorManage->getBegindate()); //} test_schedulecoormanage.h000066400000000000000000000010431523260663500355130ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULECOORMANAGE_H #define TEST_SCHEDULECOORMANAGE_H //#include "schedulecoormanage.h" //#include "gtest/gtest.h" //#include //class test_schedulecoormanage : public QObject, public::testing::Test //{ //public: // test_schedulecoormanage(); // ~test_schedulecoormanage(); //protected: // CScheduleCoorManage *cScheduleCoorManage = nullptr; //}; #endif // TEST_SCHEDULECOORMANAGE_H test_scheduledatamanage.cpp000066400000000000000000000017531523260663500360250ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_scheduledatamanage.h" //test_scheduledatamanage::test_scheduledatamanage() //{ // datamanage = new CScheduleDataManage(); //} //test_scheduledatamanage::~test_scheduledatamanage() //{ // delete datamanage; //} ////bool CScheduleDataManage::getSearchResult(QDate date) //TEST_F(test_scheduledatamanage, getSearchResult) //{ // //QDate date(2020, 12, 01); // //datamanage->getSearchResult(date); //} ////CScheduleDataManage *CScheduleDataManage::getScheduleDataManage() //TEST_F(test_scheduledatamanage, getScheduleDataManage) //{ // datamanage->getScheduleDataManage(); //} ////QColor CScheduleDataManage::getSystemActiveColor() //TEST_F(test_scheduledatamanage, getSystemActiveColor) //{ // datamanage->getSystemActiveColor(); //} ////int getTheme() //TEST_F(test_scheduledatamanage, getTheme) //{ // datamanage->getTheme(); //} test_scheduledatamanage.h000066400000000000000000000010321523260663500354600ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dataManage// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEDATAMANAGE_H #define TEST_SCHEDULEDATAMANAGE_H //#include "scheduledatamanage.h" //#include "gtest/gtest.h" //#include //class test_scheduledatamanage : public QObject, public::testing::Test //{ //public: // test_scheduledatamanage(); // ~test_scheduledatamanage(); //protected: // CScheduleDataManage *datamanage = nullptr; //}; #endif // TEST_SCHEDULEDATAMANAGE_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog/000077500000000000000000000000001523260663500277515ustar00rootroot00000000000000test_myscheduleview.cpp000066400000000000000000000065551523260663500345050ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_myscheduleview.h" //#include "../dialog_stub.h" //#include //#include //QVector getScheduleViewData() //{ // ScheduleDataInfo schedule1, schedule2; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // QVector scheduleList{}; // scheduleList.append(schedule1); // scheduleList.append(schedule2); // return scheduleList; //} //test_myscheduleview::test_myscheduleview() //{ // ScheduleDataInfo scheduleinfo = getScheduleViewData().first(); // mScheduleView = new CMyScheduleView(scheduleinfo); //} //test_myscheduleview::~test_myscheduleview() //{ // delete mScheduleView; // mScheduleView = nullptr; //} ////void CMyScheduleView::setLabelTextColor(const int type) //TEST_F(test_myscheduleview, setLabelTextColor) //{ // mScheduleView->setLabelTextColor(1); // mScheduleView->setLabelTextColor(2); //} //// //TEST_F(test_myscheduleview, CMyScheduleView) //{ // ScheduleDataInfo scheduleinfo; // QDateTime currentDateTime = QDateTime::currentDateTime(); // scheduleinfo.setID(1); // scheduleinfo.setBeginDateTime(currentDateTime); // scheduleinfo.setEndDateTime(currentDateTime.addDays(1)); // scheduleinfo.setTitleName("测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试" // "测试测试测试测试测试测试测试测试测试测试测试测试测试测试"); // scheduleinfo.setAllDay(true); // scheduleinfo.setType(4); // scheduleinfo.setRecurID(0); // CMyScheduleView scheduleView(scheduleinfo); //} ////FontChange //TEST_F(test_myscheduleview, FontChange) //{ // QEvent event(QEvent::FontChange); // QApplication::sendEvent(mScheduleView, &event); //} ////slotBtClick //TEST_F(test_myscheduleview, slotBtClick) //{ // Stub stub; // calendarDDialogExecStub(stub); // mScheduleView->slotBtClick(1, "tt"); //} test_myscheduleview.h000066400000000000000000000007561523260663500341470ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MYSCHEDULEVIEW_H #define TEST_MYSCHEDULEVIEW_H #include #include #include "dialog/myscheduleview.h" class test_myscheduleview : public::QObject, public::testing::Test { public: test_myscheduleview(); ~test_myscheduleview(); protected: CMyScheduleView *mScheduleView = nullptr; }; #endif // TEST_MYSCHEDULEVIEW_H test_schedulectrldlg.cpp000066400000000000000000000044241523260663500346110ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_schedulectrldlg.h" #include #include test_schedulectrldlg::test_schedulectrldlg() { mScheduleCtrlDlg = new CScheduleCtrlDlg(); } test_schedulectrldlg::~test_schedulectrldlg() { delete mScheduleCtrlDlg; mScheduleCtrlDlg = nullptr; } //void CScheduleCtrlDlg::setTheMe(const int type) TEST_F(test_schedulectrldlg, setTheMe) { mScheduleCtrlDlg->setTheMe(1); mScheduleCtrlDlg->setTheMe(2); } //void CScheduleCtrlDlg::buttonJudge(int id) TEST_F(test_schedulectrldlg, buttonJudge) { mScheduleCtrlDlg->buttonJudge(1); } //QAbstractButton *CScheduleCtrlDlg::addPushButton(QString btName, bool type) TEST_F(test_schedulectrldlg, addPushButton) { mScheduleCtrlDlg->addPushButton("schedule", true); mScheduleCtrlDlg->addPushButton("schedule", false); } //QAbstractButton *CScheduleCtrlDlg::addsuggestButton(QString btName, bool type) TEST_F(test_schedulectrldlg, addsuggestButton) { mScheduleCtrlDlg->addsuggestButton("schedule", true); mScheduleCtrlDlg->addsuggestButton("schedule", false); } //QAbstractButton *CScheduleCtrlDlg::addWaringButton(QString btName, bool type) TEST_F(test_schedulectrldlg, addWaringButton) { mScheduleCtrlDlg->addsuggestButton("schedule", true); mScheduleCtrlDlg->addsuggestButton("schedule", false); } //void CScheduleCtrlDlg::setText(QString str) TEST_F(test_schedulectrldlg, setText) { mScheduleCtrlDlg->setText("schedule"); } //void CScheduleCtrlDlg::setInformativeText(QString str) TEST_F(test_schedulectrldlg, setInfomativeText) { mScheduleCtrlDlg->setInformativeText("schedule"); } //int CScheduleCtrlDlg::clickButton() TEST_F(test_schedulectrldlg, clickButton) { mScheduleCtrlDlg->clickButton(); } //changeEvent TEST_F(test_schedulectrldlg, changeEvent) { QEvent event(QEvent::FontChange); mScheduleCtrlDlg->setText(tr("You are changing the repeating rule of this event.")); mScheduleCtrlDlg->setInformativeText(tr("Do you want to change all occurrences?")); mScheduleCtrlDlg->addPushButton(tr("Cancel", "button"), true); mScheduleCtrlDlg->addWaringButton(tr("Change All"), true); QApplication::sendEvent(mScheduleCtrlDlg, &event); } test_schedulectrldlg.h000066400000000000000000000007721523260663500342600ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULECTRLDLG_H #define TEST_SCHEDULECTRLDLG_H #include #include #include "dialog/schedulectrldlg.h" class test_schedulectrldlg : public::QObject, public::testing::Test { public: test_schedulectrldlg(); ~test_schedulectrldlg(); protected: CScheduleCtrlDlg *mScheduleCtrlDlg = nullptr; }; #endif // TEST_SCHEDULECTRLDLG_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog/test_scheduledlg.cpp000066400000000000000000000131441523260663500340020ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduledlg.h" #include "../cscheduledbusstub.h" #include "../dialog_stub.h" #include test_scheduledlg::test_scheduledlg() { mScheduleDlg = new CScheduleDlg(1); } test_scheduledlg::~test_scheduledlg() { delete mScheduleDlg; mScheduleDlg = nullptr; } QVector getScheduleDlgData() { ScheduleDataInfo schedule1, schedule2; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(true); schedule2.setType(2); schedule2.setRecurID(0); QVector scheduleList{}; scheduleList.append(schedule1); scheduleList.append(schedule2); return scheduleList; } //void CScheduleDlg::setData(const ScheduleDataInfo &info) TEST_F(test_scheduledlg, setData) { mScheduleDlg->setData(getScheduleDlgData().first()); } //void CScheduleDlg::setDate(const QDateTime &date) TEST_F(test_scheduledlg, setDate) { QDateTime datetime1 = QDateTime(QDate::currentDate(), QTime(23, 54, 55)); mScheduleDlg->setDate(datetime1); QDateTime datetime11 = QDateTime(QDate::currentDate(), QTime(13, 54, 55)); mScheduleDlg->setDate(datetime1); QDateTime datetime2 = QDateTime(QDate::currentDate(), QTime(13, 40, 55)); mScheduleDlg->setDate(datetime2); } //void CScheduleDlg::setAllDay(bool flag) TEST_F(test_scheduledlg, setAllDay) { mScheduleDlg->setAllDay(true); } //bool CScheduleDlg::clickOkBtn() TEST_F(test_scheduledlg, clickOkBtn) { Stub stub; cscheduleDbusStub(stub); mScheduleDlg->clickOkBtn(); //begindatetime < enddatetime ScheduleDataInfo schedule; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule.setID(1); schedule.setBeginDateTime(currentDateTime); schedule.setEndDateTime(currentDateTime.addDays(-1)); schedule.setTitleName("scheduleOne"); schedule.setAllDay(true); schedule.setType(1); schedule.setRecurID(0); mScheduleDlg->setData(schedule); mScheduleDlg->clickOkBtn(); // mScheduleDlg->m_type = 1; schedule.setEndDateTime(currentDateTime.addDays(1)); mScheduleDlg->setData(schedule); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(3); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(4); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(5); mScheduleDlg->clickOkBtn(); schedule.setAllDay(false); mScheduleDlg->setData(schedule); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(3); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(4); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_rmindCombox->setCurrentIndex(5); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_endrepeatCombox->setCurrentIndex(2); mScheduleDlg->clickOkBtn(); mScheduleDlg->m_endrepeatCombox->setCurrentIndex(3); mScheduleDlg->clickOkBtn(); } //void CScheduleDlg::slotBtClick(int buttonIndex, QString buttonName) TEST_F(test_scheduledlg, slotBtClick) { Stub stub; cscheduleDbusStub(stub); mScheduleDlg->slotBtClick(0, "ok"); mScheduleDlg->slotBtClick(1, "ok"); } //void CScheduleDlg::slotTextChange() TEST_F(test_scheduledlg, slotTextChange) { mScheduleDlg->slotTextChange(); } //void CScheduleDlg::slotendrepeatTextchange() TEST_F(test_scheduledlg, slotendrepeaTextchange) { mScheduleDlg->slotendrepeatTextchange(); } //void CScheduleDlg::slotBDateEidtInfo(const QDate &date) TEST_F(test_scheduledlg, slotBDateEidtInfo) { mScheduleDlg->slotBDateEidtInfo(QDate::currentDate()); } //void CScheduleDlg::slotallDayStateChanged(int state) TEST_F(test_scheduledlg, slotallDayStateCheanged) { mScheduleDlg->slotallDayStateChanged(1); mScheduleDlg->slotallDayStateChanged(0); } //void CScheduleDlg::slotbRpeatactivated(int index) TEST_F(test_scheduledlg, slotbRpearactivated) { mScheduleDlg->slotbRpeatactivated(0); mScheduleDlg->slotbRpeatactivated(2); } //void CScheduleDlg::sloteRpeatactivated(int index) TEST_F(test_scheduledlg, sloteRpearactivated) { mScheduleDlg->sloteRpeatactivated(0); mScheduleDlg->sloteRpeatactivated(1); mScheduleDlg->sloteRpeatactivated(2); } //void CScheduleDlg::setTheMe(const int type) TEST_F(test_scheduledlg, setTheMe) { mScheduleDlg->setTheMe(1); mScheduleDlg->setTheMe(2); } // TEST_F(test_scheduledlg, exec) { Stub stub; calendarDDialogExecStub(stub); mScheduleDlg->exec(); } //setDateFormat TEST_F(test_scheduledlg, setDateFormat) { for (int i = 0; i < 10; ++i) { mScheduleDlg->setDateFormat(i); } } //setTimeFormat TEST_F(test_scheduledlg, setTimeFormat) { mScheduleDlg->setTimeFormat(0); mScheduleDlg->setTimeFormat(1); } //mouseMoveEvent TEST_F(test_scheduledlg, mouseMoveEvent) { QTest::mouseMove(mScheduleDlg); } //updateDateTimeFormat TEST_F(test_scheduledlg, updateDateTimeFormat) { mScheduleDlg->updateDateTimeFormat(); } //changeEvent TEST_F(test_scheduledlg, changeEvent) { QEvent event(QEvent::FontChange); QApplication::sendEvent(mScheduleDlg, &event); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog/test_scheduledlg.h000066400000000000000000000007251523260663500334500ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEDLG_H #define TEST_SCHEDULEDLG_H #include #include #include "dialog/scheduledlg.h" class test_scheduledlg : public::QObject, public::testing::Test { public: test_scheduledlg(); ~test_scheduledlg(); protected: CScheduleDlg *mScheduleDlg = nullptr; }; #endif // TEST_SCHEDULEDLG_H test_scheduletypeeditdlg.cpp000066400000000000000000000023031523260663500354660ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_scheduletypeeditdlg.h" //test_scheduletypeeditdlg::test_scheduletypeeditdlg() //{ //} //TEST_F(test_scheduletypeeditdlg, slotEditTextChanged_001) //{ // mWidget->m_typeText = "123"; // mWidget->slotEditTextChanged("21212312312315456489512315489456123165489456123135485"); // EXPECT_EQ(mWidget->m_lineEdit->text(), "123"); //} //TEST_F(test_scheduletypeeditdlg, slotEditTextChanged_002) //{ // mWidget->m_typeText = "123"; // mWidget->slotEditTextChanged(""); // EXPECT_FALSE(mWidget->getButton(1)->isEnabled()); //} //TEST_F(test_scheduletypeeditdlg, slotEditTextChanged_003) //{ // mWidget->m_typeText = "123"; // mWidget->slotEditTextChanged(" "); // EXPECT_FALSE(mWidget->getButton(1)->isEnabled()); //} //TEST_F(test_scheduletypeeditdlg, slotFocusChanged_001) //{ // mWidget->m_lineEdit->setText(""); // mWidget->slotFocusChanged(false); //} //TEST_F(test_scheduletypeeditdlg, slotBtnCancel_001) //{ // mWidget->slotBtnCancel(); //} //TEST_F(test_scheduletypeeditdlg, slotBtnNext_001) //{ // mWidget->slotBtnNext(); //} test_scheduletypeeditdlg.h000066400000000000000000000012761523260663500351430ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_dialog// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULETYPEEDITDLG_H #define TEST_SCHEDULETYPEEDITDLG_H //#include "scheduletypeeditdlg.h" //#include //#include //#include //class test_scheduletypeeditdlg: public::testing::Test //{ //public: // test_scheduletypeeditdlg(); // virtual void SetUp() // { // mWidget = new ScheduleTypeEditDlg(); // } // virtual void TearDown() // { // delete mWidget; // mWidget = nullptr; // } //protected: // ScheduleTypeEditDlg *mWidget = nullptr; //}; #endif // TEST_SCHEDULETYPEEDITDLG_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress/000077500000000000000000000000001523260663500303575ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress/keypressstub.cpp000066400000000000000000000060701523260663500336310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "keypressstub.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "view/cgraphicsscene.h" #include "keypress/cscenetabkeydeal.h" #include bool itemFocus = false; bool scene_activeSwitching = false; bool WeekDayBackgroundItem_hasNextItem = false; bool WeekDayBackgroundItem_showFocus = false; QGraphicsItem *SceneCurrentItem = nullptr; CFocusItem::CItemType focusItemType = CFocusItem::CBACK; QDate itemDate = QDate::currentDate(); //bbbbbbbbbbbbb CFocusItem stub bbbbbbbbbbbbbbbbbbbbbb bool getItemFocus_stub() { return itemFocus; } CFocusItem::CItemType getItemType_stub() { return focusItemType; } //eeeeeeeeeeeeeeeeeeeeeee // CGraphicsScene stub void setActiveSwitching_stub(bool activeSwitching) { scene_activeSwitching = activeSwitching; } QGraphicsItem *getCurrentFocusItem_stub(void *obj) { Q_UNUSED(obj) return SceneCurrentItem; } void signalSwitchView_stub(const QDate &focusDate, bool setItemFocus = false) { Q_UNUSED(focusDate); Q_UNUSED(setItemFocus); } // CWeekDayBackgroundItem stub void setItemFocus(void *obj, bool isFocus) { Q_UNUSED(obj) itemFocus = isFocus; } bool hasNextSubItem_stub(void *obj) { Q_UNUSED(obj) return WeekDayBackgroundItem_hasNextItem; } bool showFocus_stub(void *obj) { Q_UNUSED(obj) return WeekDayBackgroundItem_showFocus; } void initState_stub(void *obj) { Q_UNUSED(obj)} QDate getDate_stub(void *obj) { Q_UNUSED(obj) return itemDate; } // SceneTabHandle stub //bool focusItemDeal_stub(CSceneBackgroundItem *item, CGraphicsScene *scene) //{ // Q_UNUSED(item) // Q_UNUSED(scene) // return false; //} KeyPressStub::KeyPressStub() { SceneCurrentItem = new CWeekDayBackgroundItem(); typedef void (*fptr)(CWeekDayBackgroundItem *, bool); fptr A_foo = (fptr)(&CWeekDayBackgroundItem::setItemFocus); //obtaining an address stub.set(ADDR(CFocusItem, getItemFocus), getItemFocus_stub); stub.set(ADDR(CFocusItem, getItemType), getItemType_stub); stub.set(A_foo, setItemFocus); stub.set(ADDR(CGraphicsScene, setActiveSwitching), setActiveSwitching_stub); stub.set(ADDR(CGraphicsScene, signalSwitchView), signalSwitchView_stub); stub.set(ADDR(CGraphicsScene, getCurrentFocusItem), getCurrentFocusItem_stub); stub.set(ADDR(CWeekDayBackgroundItem, hasNextSubItem), hasNextSubItem_stub); stub.set(ADDR(CWeekDayBackgroundItem, showFocus), showFocus_stub); stub.set(ADDR(CWeekDayBackgroundItem, initState), initState_stub); stub.set(ADDR(CWeekDayBackgroundItem, getDate), getDate_stub); // typedef bool (*sceneTabKeyHandle)(CSceneTabKeyDeal *, CSceneBackgroundItem *, CGraphicsScene *); // sceneTabKeyHandle SceneTabHandle = (sceneTabKeyHandle)(&CSceneTabKeyDeal::focusItemDeal); // stub.set(SceneTabHandle, focusItemDeal_stub); } KeyPressStub::~KeyPressStub() { delete SceneCurrentItem; SceneCurrentItem = nullptr; } Stub &KeyPressStub::getStub() { return stub; } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress/keypressstub.h000066400000000000000000000012751523260663500333000ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef KEYPRESSSTUB_H #define KEYPRESSSTUB_H #include "../third-party_stub/stub.h" #include "view/graphicsItem/cfocusitem.h" #include class QGraphicsItem; class KeyPressStub { public: KeyPressStub(); ~KeyPressStub(); Stub &getStub(); private: Stub stub; }; extern bool itemFocus; extern bool scene_activeSwitching; extern bool WeekDayBackgroundItem_hasNextItem; extern bool WeekDayBackgroundItem_showFocus; extern QGraphicsItem *SceneCurrentItem; extern CFocusItem::CItemType focusItemType; extern QDate itemDate; #endif // KEYPRESSSTUB_H test_calldaykeyleftdeal.cpp000066400000000000000000000012721523260663500356700ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calldaykeyleftdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/calldaykeyleftdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CAllDayKeyLeftDeal::test_CAllDayKeyLeftDeal(QObject *parent) : QObject(parent) { } TEST(LeftHandle_test, test_CAllDayKeyLeftDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CAllDayKeyLeftDeal alldayLeftDeal(scene); alldayLeftDeal.dealEvent(); delete scene; } test_calldaykeyleftdeal.h000066400000000000000000000006641523260663500353410ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALLDAYKEYLEFTDEAL_H #define TEST_CALLDAYKEYLEFTDEAL_H #include #include class test_CAllDayKeyLeftDeal : public QObject { Q_OBJECT public: explicit test_CAllDayKeyLeftDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CALLDAYKEYLEFTDEAL_Htest_calldaykeyrightdeal.cpp000066400000000000000000000013031523260663500360460ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calldaykeyrightdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/calldaykeyrightdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CAllDayKeyRightDeal::test_CAllDayKeyRightDeal(QObject *parent) : QObject(parent) { } TEST(RightHandle_test, test_CAllDayKeyRightDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CAllDayKeyRightDeal alldayRightDeal(scene); alldayRightDeal.dealEvent(); delete scene; } test_calldaykeyrightdeal.h000066400000000000000000000006461523260663500355240ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALLDAYKEYRIGHTDEAL_H #define TEST_CALLDAYKEYRIGHTDEAL_H #include class test_CAllDayKeyRightDeal : public QObject { Q_OBJECT public: explicit test_CAllDayKeyRightDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CALLDAYKEYRIGHTDEAL_Htest_ckeydowndeal.cpp000066400000000000000000000012121523260663500345100ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeydowndeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/ckeydowndeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyDownDeal::test_CKeyDownDeal(QObject *parent) : QObject(parent) { } TEST(DownHandle_test, test_CKeyDownDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyDownDeal downDeal(scene); downDeal.dealEvent(); delete scene; } test_ckeydowndeal.h000066400000000000000000000006031523260663500341600ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYDOWNDEAL_H #define TEST_CKEYDOWNDEAL_H #include class test_CKeyDownDeal : public QObject { Q_OBJECT public: explicit test_CKeyDownDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYDOWNDEAL_Htest_ckeyenabledeal.cpp000066400000000000000000000031571523260663500350010ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyenabledeal.h" #include "../third-party_stub/stub.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "../dialog_stub.h" #include "view/graphicsItem/scheduleitem.h" #include test_CKeyEnableDeal::test_CKeyEnableDeal() { } void test_CKeyEnableDeal::SetUp() { delete SceneCurrentItem; SceneCurrentItem = new CSceneBackgroundItem(CSceneBackgroundItem::OnMonthView); calendarDDialogExecStub(stub.getStub()); scene = QSharedPointer(new CGraphicsScene()); view = QSharedPointer(new QGraphicsView()); view->setScene(scene.get()); enableDeal = QSharedPointer(new CKeyEnableDeal(scene.get())); } void test_CKeyEnableDeal::TearDown() { } TEST_F(test_CKeyEnableDeal, focusItemDeal_Back) { enableDeal->dealEvent(); } TEST_F(test_CKeyEnableDeal, focusItemDeal_Back_addDay) { itemDate = QDate::currentDate().addDays(1); enableDeal->dealEvent(); } CFocusItem *focusItem = nullptr; CFocusItem *getFocusItem_stub() { return focusItem; } TEST_F(test_CKeyEnableDeal, focusItemDeal_Item) { QRectF rect(0, 0, 100, 100); focusItem = new CScheduleItem(rect); stub.getStub().set(ADDR(CSceneBackgroundItem, getFocusItem), getFocusItem_stub); focusItemType = CFocusItem::CITEM; enableDeal->dealEvent(); delete focusItem; focusItem = nullptr; } TEST_F(test_CKeyEnableDeal, focusItemDeal_Other) { focusItemType = CFocusItem::COTHER; enableDeal->dealEvent(); } test_ckeyenabledeal.h000066400000000000000000000013201523260663500344340ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYENABLEDEAL_H #define TEST_CKEYENABLEDEAL_H #include "keypressstub.h" #include "view/cgraphicsscene.h" #include "gtest/gtest.h" #include "keypress/ckeyenabledeal.h" #include class test_CKeyEnableDeal : public QObject , public ::testing::Test { Q_OBJECT public: test_CKeyEnableDeal(); void SetUp(); void TearDown(); public: KeyPressStub stub; QSharedPointer scene; QSharedPointer view; QSharedPointer enableDeal; }; extern CFocusItem *focusItem; #endif // TEST_CKEYENABLEDEAL_Htest_ckeyleftdeal.cpp000066400000000000000000000012121523260663500344730ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyleftdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/ckeyleftdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyLeftDeal::test_CKeyLeftDeal(QObject *parent) : QObject(parent) { } TEST(LeftHandle_test, test_CKeyLeftDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyLeftDeal leftDeal(scene); leftDeal.dealEvent(); delete scene; } test_ckeyleftdeal.h000066400000000000000000000006031523260663500341430ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYLEFTDEAL_H #define TEST_CKEYLEFTDEAL_H #include class test_CKeyLeftDeal : public QObject { Q_OBJECT public: explicit test_CKeyLeftDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYLEFTDEAL_Htest_ckeypressprxy.cpp000066400000000000000000000015321523260663500347770ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_ckeypressprxy.h" //#include "ckeyleftdeal.h" //test_CKeyPressPrxy::test_CKeyPressPrxy() //{ // keyPressPrxy = QSharedPointer(new CKeyPressPrxy); //} //TEST_F(test_CKeyPressPrxy, keyPressDeal_NoEvent) //{ // ASSERT_FALSE(keyPressPrxy->keyPressDeal(Qt::Key_Tab)); //} //TEST_F(test_CKeyPressPrxy, keyPressDeal) //{ // keyPressPrxy->addkeyPressDeal(new CKeyLeftDeal()); // ASSERT_FALSE(keyPressPrxy->keyPressDeal(Qt::Key_Left)); //} //TEST_F(test_CKeyPressPrxy, removeDeal) //{ // CKeyLeftDeal *leftDeal = new CKeyLeftDeal(); // keyPressPrxy->addkeyPressDeal(leftDeal); // keyPressPrxy->removeDeal(leftDeal); // ASSERT_FALSE(keyPressPrxy->keyPressDeal(Qt::Key_Left)); //} test_ckeypressprxy.h000066400000000000000000000011101523260663500344340ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYPRESSPRXY_H #define TEST_CKEYPRESSPRXY_H //#include "configsettings.h" //#include "gtest/gtest.h" //#include "ckeypressprxy.h" //#include //#include //class test_CKeyPressPrxy : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_CKeyPressPrxy(); //signals: //public slots: //public: // QSharedPointer keyPressPrxy; //}; #endif // TEST_CKEYPRESSPRXY_H test_ckeyrightdeal.cpp000066400000000000000000000012231523260663500346600ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyrightdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/ckeyrightdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyRightDeal::test_CKeyRightDeal(QObject *parent) : QObject(parent) { } TEST(RightHandle_test, test_CKeyRightDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyRightDeal rightDeal(scene); rightDeal.dealEvent(); delete scene; } test_ckeyrightdeal.h000066400000000000000000000006101523260663500343240ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYRIGHTDEAL_H #define TEST_CKEYRIGHTDEAL_H #include class test_CKeyRightDeal : public QObject { Q_OBJECT public: explicit test_CKeyRightDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYRIGHTDEAL_Htest_ckeyupdeal.cpp000066400000000000000000000011701523260663500341700ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_ckeyupdeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/ckeyupdeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CKeyUpDeal::test_CKeyUpDeal(QObject *parent) : QObject(parent) { } TEST(UpHandle_test, test_CKeyUpDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CKeyUpDeal upDeal(scene); upDeal.dealEvent(); delete scene; } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress/test_ckeyupdeal.h000066400000000000000000000005711523260663500337200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CKEYUPDEAL_H #define TEST_CKEYUPDEAL_H #include class test_CKeyUpDeal : public QObject { Q_OBJECT public: explicit test_CKeyUpDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CKEYUPDEAL_Htest_cscenetabkeydeal.cpp000066400000000000000000000012441523260663500353320ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscenetabkeydeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/cscenetabkeydeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CSceneTabKeyDeal::test_CSceneTabKeyDeal(QObject *parent) : QObject(parent) { } TEST(SceneTabHandle_test, test_CSceneTabKeyDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CSceneTabKeyDeal tabDeal(scene); tabDeal.dealEvent(); delete scene; } test_cscenetabkeydeal.h000066400000000000000000000006271523260663500350030ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CSCENETABKEYDEAL_H #define TEST_CSCENETABKEYDEAL_H #include class test_CSceneTabKeyDeal : public QObject { Q_OBJECT public: explicit test_CSceneTabKeyDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CSCENETABKEYDEAL_Htest_cweekdayscenetabkeydeal.cpp000066400000000000000000000013351523260663500367050ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cweekdayscenetabkeydeal.h" #include "../third-party_stub/stub.h" #include "gtest/gtest.h" #include "view/cgraphicsscene.h" #include "keypress/cweekdayscenetabkeydeal.h" #include "view/graphicsItem/cweekdaybackgrounditem.h" #include "keypressstub.h" test_CWeekDaySceneTabKeyDeal::test_CWeekDaySceneTabKeyDeal(QObject *parent) : QObject(parent) { } TEST(WeekDaySceneTabHandle_test, test_CWeekDaySceneTabKeyDeal) { KeyPressStub stub; CGraphicsScene *scene = new CGraphicsScene(); CWeekDaySceneTabKeyDeal weektabDeal(scene); weektabDeal.dealEvent(); delete scene; } test_cweekdayscenetabkeydeal.h000066400000000000000000000006721523260663500363550ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_keypress// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CWEEKDAYSCENETABKEYDEAL_H #define TEST_CWEEKDAYSCENETABKEYDEAL_H #include class test_CWeekDaySceneTabKeyDeal : public QObject { Q_OBJECT public: explicit test_CWeekDaySceneTabKeyDeal(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_CWEEKDAYSCENETABKEYDEAL_Hlinuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_shortcut.cpp000066400000000000000000000005601523260663500310720ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_shortcut.h" #include "shortcut.h" #include "gtest/gtest.h" test_Shortcut::test_Shortcut(QObject *parent) : QObject(parent) { } TEST(shorcutTest, shorcut) { Shortcut shortcut; QString str = shortcut.toStr(); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_shortcut.h000066400000000000000000000005571523260663500305450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SHORTCUT_H #define TEST_SHORTCUT_H #include class test_Shortcut : public QObject { Q_OBJECT public: explicit test_Shortcut(QObject *parent = nullptr); signals: public slots: }; #endif // TEST_SHORTCUT_Hlinuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_tabletconfig.cpp000066400000000000000000000006561523260663500316660ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_tabletconfig.h" test_TabletConfig::test_TabletConfig() { } TEST(istableTest, TabletConfig) { TabletConfig tabletconfig; tabletconfig.setIsTablet(true); ASSERT_TRUE(tabletconfig.isTablet()); tabletconfig.setIsTablet(false); ASSERT_FALSE(tabletconfig.isTablet()); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_tabletconfig.h000066400000000000000000000006631523260663500313310ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TABLETCONFIG_H #define TEST_TABLETCONFIG_H #include "tabletconfig.h" #include "gtest/gtest.h" #include class test_TabletConfig : public QObject , public ::testing::Test { Q_OBJECT public: test_TabletConfig(); signals: public slots: }; #endif // TEST_TABLETCONFIG_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/000077500000000000000000000000001523260663500274645ustar00rootroot00000000000000test_alldayeventview.cpp000066400000000000000000000305021523260663500343530ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_alldayeventview.h" //#include "../dialog_stub.h" //#include //#include //#include //test_alldayeventview::test_alldayeventview() //{ //} //void test_alldayeventview::SetUp() //{ // cAllDayEventWeekView = new CAllDayEventWeekView(); // cAllDayEventWeekView->setFixedSize(QSize(800, 300)); //} //void test_alldayeventview::TearDown() //{ // delete cAllDayEventWeekView; // cAllDayEventWeekView = nullptr; //} ////void CAllDayEventWeekView::setTheMe(int type) //TEST_F(test_alldayeventview, setTheMe) //{ // int type = 1; // cAllDayEventWeekView->setTheMe(); // cAllDayEventWeekView->setTheMe(type); //} ////bool CAllDayEventWeekView::MeetCreationConditions(const QDateTime &date) //TEST_F(test_alldayeventview, MeetCreationConditions) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime date = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // cAllDayEventWeekView->MeetCreationConditions(date); //} ////bool CAllDayEventWeekView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) //TEST_F(test_alldayeventview, IsEqualtime) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // assert(false == cAllDayEventWeekView->IsEqualtime(begindate, enddate)); // enddate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // assert(true == cAllDayEventWeekView->IsEqualtime(begindate, enddate)); //} ////void CAllDayEventWeekView::setRange(int w, int h, QDate begindate, QDate enddate, int rightmagin) //TEST_F(test_alldayeventview, setRange) //{ // int w = 3; // int h = 2; // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 21); // int rightmagin = 2; // cAllDayEventWeekView->setRange(w, h, begindate, enddate, rightmagin); //} //QVector getTestScheduleDataInfo() //{ // ScheduleDataInfo info1; // info1.setID(1); // info1.setType(2); // info1.setAllDay(true); // info1.setRecurID(2); // info1.setTitleName("测试1"); // QString strDate = "2020-12-02 12:24:36"; // QDateTime ignoreDate = QDateTime::fromString(strDate, "yyyy-MM-dd hh:mm:ss"); // QVector ignoreDateList; // ignoreDateList.append(ignoreDate); // info1.setIgnoreTime(ignoreDateList); // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-03 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // info1.setBeginDateTime(begindate); // info1.setEndDateTime(enddate); // ScheduleDataInfo info2; // info2.setID(1); // info2.setType(2); // info2.setAllDay(true); // info2.setRecurID(2); // info2.setTitleName("测试2"); // QString strDate2 = "2020-12-12 12:24:36"; // QDateTime ignoreDate2 = QDateTime::fromString(strDate2, "yyyy-MM-dd hh:mm:ss"); // QVector ignoreDateList2; // ignoreDateList2.append(ignoreDate2); // info2.setIgnoreTime(ignoreDateList2); // QString begin2 = "2020-12-11 12:24:36"; // QDateTime begindate2 = QDateTime::fromString(begin2, "yyyy-MM-dd hh:mm:ss"); // QString end2 = "2020-12-13 12:24:36"; // QDateTime enddate2 = QDateTime::fromString(end2, "yyyy-MM-dd hh:mm:ss"); // info2.setBeginDateTime(begindate2); // info2.setEndDateTime(enddate2); // ScheduleDataInfo info3; // info3.setID(1); // info3.setType(2); // info3.setAllDay(true); // info3.setRecurID(2); // info3.setTitleName("测试3"); // QString strDate3 = "2020-12-22 12:24:36"; // QDateTime ignoreDate3 = QDateTime::fromString(strDate3, "yyyy-MM-dd hh:mm:ss"); // QVector ignoreDateList3; // ignoreDateList3.append(ignoreDate3); // info3.setIgnoreTime(ignoreDateList3); // QString begin3 = "2020-12-21 12:24:36"; // QDateTime begindate3 = QDateTime::fromString(begin3, "yyyy-MM-dd hh:mm:ss"); // QString end3 = "2020-12-23 12:24:36"; // QDateTime enddate3 = QDateTime::fromString(end3, "yyyy-MM-dd hh:mm:ss"); // info3.setBeginDateTime(begindate3); // info3.setEndDateTime(enddate3); // QVector infoList; // infoList.append(info1); // infoList.append(info2); // infoList.append(info3); // return infoList; //} ////void CAllDayEventWeekView::setDayData(const QVector> &vlistData) //TEST_F(test_alldayeventview, setDayData) //{ // QVector> vlistData; // QVector infoList1; // infoList1.append(getTestScheduleDataInfo().at(0)); // infoList1.append(getTestScheduleDataInfo().at(1)); // QVector infoList2; // infoList2.append(getTestScheduleDataInfo().at(2)); // vlistData.append(infoList1); // vlistData.append(infoList2); // cAllDayEventWeekView->setDayData(vlistData); //} ////void CAllDayEventWeekView::setInfo(const QVector &info) //TEST_F(test_alldayeventview, setInfo) //{ // cAllDayEventWeekView->setInfo(getTestScheduleDataInfo()); //} ////void CAllDayEventWeekView::slotDoubleEvent() //TEST_F(test_alldayeventview, slotDoubleEvent) //{ // cAllDayEventWeekView->slotDoubleEvent(); //} ////void CAllDayEventWeekView::createItemWidget(int index, bool average) //TEST_F(test_alldayeventview, createItemWidget) //{ // QVector> vlistData; // QVector infoList1; // infoList1.append(getTestScheduleDataInfo().at(0)); // infoList1.append(getTestScheduleDataInfo().at(1)); // QVector infoList2; // infoList2.append(getTestScheduleDataInfo().at(2)); // vlistData.append(infoList1); // vlistData.append(infoList2); // cAllDayEventWeekView->setDayData(vlistData); // int w = 1000; // int h = 900; // QDate begindate(2020, 12, 01); // QDate enddate(2020, 12, 21); // int rightmagin = 2; // cAllDayEventWeekView->setRange(w, h, begindate, enddate, rightmagin); // int index = 0; // bool average = true; // cAllDayEventWeekView->createItemWidget(index, average); // cAllDayEventWeekView->updateHeight(); // //setSelectSearchSchedule // cAllDayEventWeekView->setSelectSearchSchedule(getTestScheduleDataInfo().at(1)); //} ////void CAllDayEventWeekView::updateItemHeightByFontSize() //TEST_F(test_alldayeventview, updateItemHeightByFontSize) //{ // cAllDayEventWeekView->updateItemHeightByFontSize(); //} ////void CAllDayEventWeekView::upDateInfoShow(const DragStatus &status, const ScheduleDataInfo &info) //TEST_F(test_alldayeventview, upDateInfoShow) //{ // cAllDayEventWeekView->setInfo(getTestScheduleDataInfo()); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::ChangeEnd, getTestScheduleDataInfo().at(1)); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::ChangeBegin, getTestScheduleDataInfo().at(1)); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::ChangeWhole, getTestScheduleDataInfo().at(1)); // cAllDayEventWeekView->upDateInfoShow(DragInfoGraphicsView::DragStatus::IsCreate, getTestScheduleDataInfo().at(1)); //} //// //TEST_F(test_alldayeventview, getPixmap) //{ // cAllDayEventWeekView->setFixedSize(500, 800); // QPixmap pixmap(cAllDayEventWeekView->size()); // pixmap = cAllDayEventWeekView->grab(); //} //// //TEST_F(test_alldayeventview, eventTest) //{ // QTest::keyEvent(QTest::Press, cAllDayEventWeekView, Qt::Key::Key_Enter); // cAllDayEventWeekView->setFixedSize(500, 100); // QTest::mouseDClick(cAllDayEventWeekView, Qt::LeftButton, Qt::NoModifier, QPoint(200, 50)); //} ////slotCreate //TEST_F(test_alldayeventview, slotCreate) //{ // calendarDDialogExecReturn = 1; // Stub stub; // calendarDDialogExecStub(stub); // cAllDayEventWeekView->slotCreate(QDateTime::currentDateTime()); //} ////getDragScheduleInfoBeginTime //TEST_F(test_alldayeventview, getDragScheduleInfoBeginTime) //{ // cAllDayEventWeekView->getDragScheduleInfoBeginTime(QDateTime::currentDateTime()); //} ////changeEvent //TEST_F(test_alldayeventview, changeEvent) //{ // QEvent event(QEvent::FontChange); // QApplication::sendEvent(cAllDayEventWeekView, &event); //} ////mousePressEvent //TEST_F(test_alldayeventview, mousePressEvent) //{ // QMouseEvent event(QEvent::MouseButtonPress, QPointF(32, 13), QPointF(646, 438), QPointF(646, 438), // Qt::LeftButton, Qt::LeftButton, Qt::NoModifier, Qt::MouseEventSynthesizedByQt); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} //TEST_F(test_alldayeventview, JudgeIsCreate) //{ // QPointF point(32, 13); // cAllDayEventWeekView->JudgeIsCreate(point); //} //QAction *stub_exec(const QPoint &pos, QAction *at = nullptr) //{ // Q_UNUSED(pos) // Q_UNUSED(at) // return nullptr; //} ////RightClickToCreate //TEST_F(test_alldayeventview, RightClickToCreate) //{ // Stub stub; // stub.set((QAction * (QMenu::*)(const QPoint &, QAction *)) ADDR(QMenu, exec), stub_exec); // cAllDayEventWeekView->RightClickToCreate(nullptr, QPoint(30, 50)); //} ////MoveInfoProcess //TEST_F(test_alldayeventview, MoveInfoProcess) //{ // ScheduleDataInfo info; // QDateTime currentTime = QDateTime::currentDateTime(); // info.setBeginDateTime(currentTime); // info.setEndDateTime(currentTime.addDays(1)); // info.setAllDay(true); // cAllDayEventWeekView->MoveInfoProcess(info, QPointF(0, 0)); // info.setAllDay(false); // cAllDayEventWeekView->MoveInfoProcess(info, QPointF(0, 0)); //} ////getDragScheduleInfoEndTime //TEST_F(test_alldayeventview, getDragScheduleInfoEndTime) //{ // cAllDayEventWeekView->getDragScheduleInfoEndTime(QDateTime::currentDateTime()); //} ////slotUpdateScene //TEST_F(test_alldayeventview, slotUpdateScene) //{ // cAllDayEventWeekView->slotUpdateScene(); //} //TEST_F(test_alldayeventview, updateInfo) //{ // cAllDayEventWeekView->updateInfo(); // cAllDayEventWeekView->m_DragStatus = DragInfoGraphicsView::IsCreate; // cAllDayEventWeekView->updateInfo(); //} ////mouseDoubleClickEvent //TEST_F(test_alldayeventview, mouseDoubleClickEvent) //{ // Stub stub; // calendarDDialogExecStub(stub); // QTest::mouseDClick(cAllDayEventWeekView->viewport(), Qt::LeftButton); //} //// //TEST_F(test_alldayeventview, setSceneRect) //{ // cAllDayEventWeekView->setSceneRect(20, 20, 1000, 1500); // cAllDayEventWeekView->updateBackgroundShowItem(); //} ////slotPosOnView //TEST_F(test_alldayeventview, slotPosOnView) //{ // cAllDayEventWeekView->slotPosOnView(1); //} ////mouseReleaseEvent //TEST_F(test_alldayeventview, mouseReleaseEvent) //{ // QMouseEvent event(QEvent::MouseButtonRelease, QPointF(32, 13), QPointF(646, 438), QPointF(646, 438), // Qt::RightButton, Qt::RightButton, Qt::NoModifier, Qt::MouseEventSynthesizedByQt); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} ////mouseReleaseEvent //TEST_F(test_alldayeventview, mouseReleaseEvent1) //{ // cAllDayEventWeekView->m_TouchBeginTime = QDateTime::currentDateTime().toMSecsSinceEpoch() - 10; // QMouseEvent event(QEvent::MouseButtonRelease, QPointF(32, 13), QPointF(646, 438), QPointF(646, 438), // Qt::LeftButton, Qt::LeftButton, Qt::NoModifier, Qt::MouseEventSynthesizedByQt); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} ////mouseMoveEvent //TEST_F(test_alldayeventview, mouseMoveEvent) //{ // cAllDayEventWeekView->m_touchState = DragInfoGraphicsView::TS_PRESS; // QTest::mouseMove(cAllDayEventWeekView->viewport()); //} ////wheelEvent //TEST_F(test_alldayeventview, wheelEvent) //{ // QEvent event(QEvent::Wheel); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} ////contextMenuEvent //TEST_F(test_alldayeventview, contextMenuEvent) //{ // // QEvent event(QEvent::ContextMenu); // QContextMenuEvent event(QContextMenuEvent::Mouse, QPoint(20, 20), QPoint(120, 120), Qt::NoModifier); // Stub stub; // stub.set((QAction * (QMenu::*)(const QPoint &, QAction *)) ADDR(QMenu, exec), stub_exec); // calendarDDialogExecStub(stub); // QApplication::sendEvent(cAllDayEventWeekView->viewport(), &event); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_alldayeventview.h000066400000000000000000000010601523260663500340740ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_ALLDAYEVENTVIEW_H #define TEST_ALLDAYEVENTVIEW_H //#include "alldayeventview.h" //#include "gtest/gtest.h" //#include //class test_alldayeventview : public QObject, public::testing::Test //{ //public: // test_alldayeventview(); // void SetUp() override; // void TearDown() override; //protected: // CAllDayEventWeekView *cAllDayEventWeekView = nullptr; //}; #endif // TEST_ALLDAYEVENTVIEW_H test_calldayscheduleitem.cpp000066400000000000000000000026161523260663500351620ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calldayscheduleitem.h" #include "../testscheduledata.h" #include //test_CAlldayscheduleitem::test_CAlldayscheduleitem() //{ //} //void test_CAlldayscheduleitem::SetUp() //{ // m_rectF.setRect(0, 0, 200, 50); // m_allItem = new CAllDayScheduleItem(m_rectF); //} //void test_CAlldayscheduleitem::TearDown() //{ // delete m_allItem; // m_allItem = nullptr; //} ////paintBackground //TEST_F(test_CAlldayscheduleitem, paintBackground) //{ // m_allItem->setData(TestDataInfo::getScheduleItemDInfo().first()); // QPixmap pixmap(m_rectF.toRect().size()); // pixmap.fill(Qt::transparent); // QPainter painter(&pixmap); // m_allItem->setPressSchedule(TestDataInfo::getScheduleItemDInfo().first()); // m_allItem->m_vSelectflag = true; // m_allItem->paintBackground(&painter, pixmap.rect(), true); // m_allItem->m_vHoverflag = true; // m_allItem->m_vSelectflag = false; // m_allItem->paintBackground(&painter, pixmap.rect(), true); //} ////hasSelectSchedule //TEST_F(test_CAlldayscheduleitem, hasSelectSchedule) //{ // m_allItem->setData(TestDataInfo::getScheduleItemDInfo().first()); // bool hasSelectInfo = m_allItem->hasSelectSchedule(TestDataInfo::getScheduleItemDInfo().first()); // ASSERT_TRUE(hasSelectInfo); //} test_calldayscheduleitem.h000066400000000000000000000012041523260663500346170ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALLDAYSCHEDULEITEM_H #define TEST_CALLDAYSCHEDULEITEM_H //#include "gtest/gtest.h" //#include "graphicsItem/calldayscheduleitem.h" //#include //class test_CAlldayscheduleitem : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_CAlldayscheduleitem(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CAllDayScheduleItem *m_allItem; // QRectF m_rectF; //}; #endif // TEST_CALLDAYSCHEDULEITEM_H test_cweekdaybackgrounditem.cpp000066400000000000000000000023711523260663500356660ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_cweekdaybackgrounditem.h" //test_CWeekDayBackgroundItem::test_CWeekDayBackgroundItem() //{ //} //void test_CWeekDayBackgroundItem::SetUp() //{ // m_weekItem = new CWeekDayBackgroundItem(); //} //void test_CWeekDayBackgroundItem::TearDown() //{ // delete m_weekItem; // m_weekItem = nullptr; //} ////showFocus //TEST_F(test_CWeekDayBackgroundItem, showFocus) //{ // m_weekItem->setShowFocus(true); // ASSERT_TRUE(m_weekItem->showFocus()); // m_weekItem->setShowFocus(false); // ASSERT_FALSE(m_weekItem->showFocus()); //} ////setItemFocus //TEST_F(test_CWeekDayBackgroundItem, setItemFocus) //{ // m_weekItem->setItemFocus(true); //} ////hasNextSubItem //TEST_F(test_CWeekDayBackgroundItem, hasNextSubItem) //{ // bool hasNextSub; // hasNextSub = m_weekItem->hasNextSubItem(); // ASSERT_FALSE(hasNextSub); //} ////drawDividingLine //TEST_F(test_CWeekDayBackgroundItem, drawDividingLine) //{ // m_weekItem->setDrawDividingLine(false); // ASSERT_FALSE(m_weekItem->drawDividingLine()); // m_weekItem->setDrawDividingLine(true); // ASSERT_TRUE(m_weekItem->drawDividingLine()); //} test_cweekdaybackgrounditem.h000066400000000000000000000013161523260663500353310ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CWEEKDAYBACKGROUNDITEM_H #define TEST_CWEEKDAYBACKGROUNDITEM_H //#include "graphicsItem/cweekdaybackgrounditem.h" //#include "gtest/gtest.h" //#include //class test_CWeekDayBackgroundItem : public QObject // , public testing::Test //{ // Q_OBJECT //public: // test_CWeekDayBackgroundItem(); // // Sets up the test fixture. // void SetUp() override; // // Tears down the test fixture. // void TearDown() override; //signals: //public slots: //public: // CWeekDayBackgroundItem *m_weekItem; //}; #endif // TEST_CWEEKDAYBACKGROUNDITEM_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem/000077500000000000000000000000001523260663500331425ustar00rootroot00000000000000test_cmonthdayitem.cpp000066400000000000000000000023171523260663500374760ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cmonthdayitem.h" #include #include //test_cmonthdayitem::test_cmonthdayitem() //{ //} //TEST_F(test_cmonthdayitem, paint_01) //{ // mItem->m_isFocus = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->paint(&painter, &item); //} //TEST_F(test_cmonthdayitem, paint_02) //{ // CMonthDayItem::m_LunarVisible = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->paint(&painter, &item); //} //TEST_F(test_cmonthdayitem, paint_03) //{ // CMonthDayItem::m_LunarVisible = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->setStatus(CMonthDayItem::H_REST); // EXPECT_EQ(mItem->m_DayStatus, CMonthDayItem::H_REST); // mItem->paint(&painter, &item); //} //TEST_F(test_cmonthdayitem, paint_04) //{ // CMonthDayItem::m_LunarVisible = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->setStatus(CMonthDayItem::H_WORK); // EXPECT_EQ(mItem->m_DayStatus, CMonthDayItem::H_WORK); // mItem->paint(&painter, &item); //} test_cmonthdayitem.h000066400000000000000000000012001523260663500371310ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CMONTHDAYITEM_H #define TEST_CMONTHDAYITEM_H //#include "graphicsItem/cmonthdayitem.h" //#include //#include //class test_cmonthdayitem: public::testing::Test //{ //public: // test_cmonthdayitem(); // virtual void SetUp() // { // mItem = new CMonthDayItem(); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // } //protected: // CMonthDayItem *mItem = nullptr; //}; #endif // TEST_CMONTHDAYITEM_H test_cmonthschedulenumitem.cpp000066400000000000000000000023331523260663500412330ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cmonthschedulenumitem.h" #include #include //test_cmonthschedulenumItem::test_cmonthschedulenumItem() //{ //} //TEST_F(test_cmonthschedulenumItem, setColor_01) //{ // QColor color1("#000000"); // QColor color2("#111111"); // mItem->setColor(color1, color2); // EXPECT_EQ(mItem->m_color1, color1); // EXPECT_EQ(mItem->m_color2, color2); //} //TEST_F(test_cmonthschedulenumItem, setText_01) //{ // QColor color("#000000"); // mItem->setText(color, QFont()); // EXPECT_EQ(mItem->m_textcolor, color); //} //TEST_F(test_cmonthschedulenumItem, setSizeType_01) //{ // QColor color("#000000"); // mItem->setSizeType(DFontSizeManager::T5); // EXPECT_EQ(mItem->m_SizeType, DFontSizeManager::T5); //} //TEST_F(test_cmonthschedulenumItem, setData_01) //{ // QColor color("#000000"); // mItem->setData(4); // EXPECT_EQ(mItem->m_num, 4); //} //TEST_F(test_cmonthschedulenumItem, paint_01) //{ // mItem->m_isFocus = true; // QPainter painter; // QStyleOptionGraphicsItem item; // mItem->paint(&painter, &item); //} test_cmonthschedulenumitem.h000066400000000000000000000013001523260663500406710ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CMONTHSCHEDULENUMITEM_H #define TEST_CMONTHSCHEDULENUMITEM_H //#include "graphicsItem/cmonthschedulenumitem.h" //#include //#include //class test_cmonthschedulenumItem: public::testing::Test //{ //public: // test_cmonthschedulenumItem(); // virtual void SetUp() // { // mItem = new CMonthScheduleNumItem(); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // } //protected: // CMonthScheduleNumItem *mItem = nullptr; //}; #endif // TEST_CMONTHSCHEDULENUMITEM_H test_cscenebackgrounditem.cpp000066400000000000000000000023671523260663500410150ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscenebackgrounditem.h" //test_cscenebackgrounditem::test_cscenebackgrounditem() //{ //} //TEST_F(test_cscenebackgrounditem, setNextItemFocusAndGetNextItem_01) //{ // mItem->m_showItemIndex = 0; // mItem->setNextItemFocusAndGetNextItem(); //} //TEST_F(test_cscenebackgrounditem, setNextItemFocusAndGetNextItem_02) //{ // mItem->m_showItemIndex = 1; // mItem->setNextItemFocusAndGetNextItem(); //} //TEST_F(test_cscenebackgrounditem, setNextItemFocusAndGetNextItem_03) //{ // mItem->m_showItemIndex = -1; // mItem->m_isFocus = true; // mItem->setNextItemFocusAndGetNextItem(); //} //TEST_F(test_cscenebackgrounditem, setItemFocus_01) //{ // mItem->m_showItemIndex = -1; // mItem->setItemFocus(true); //} //TEST_F(test_cscenebackgrounditem, setItemFocus_02) //{ // mItem->m_showItemIndex = 1; // mItem->setItemFocus(true); //} //TEST_F(test_cscenebackgrounditem, initState_01) //{ // mItem->m_showItemIndex = 1; // mItem->initState(); //} //TEST_F(test_cscenebackgrounditem, updateCurrentItemShow_01) //{ // mItem->m_showItemIndex = 1; // mItem->updateCurrentItemShow(); //} test_cscenebackgrounditem.h000066400000000000000000000022271523260663500404550ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CSCENEBACKGROUNDITEM_H #define TEST_CSCENEBACKGROUNDITEM_H //#include "graphicsItem/cscenebackgrounditem.h" //#include //#include <../third-party_stub/stub.h> //#include //#include //class test_cscenebackgrounditem: public::testing::Test //{ //public: // test_cscenebackgrounditem(); // virtual void SetUp() // { // mItem = new CSceneBackgroundItem(CSceneBackgroundItem::OnMonthView); // mFocusItem = new CFocusItem(); // mScene = new QGraphicsScene(); // mScene->addItem(mItem); // mScene->addItem(mFocusItem); // mItem->m_item.append(mFocusItem); // mItem->m_item.append(mFocusItem); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // delete mFocusItem; // delete mScene; // } //protected: // CSceneBackgroundItem *mItem = nullptr; // CFocusItem *mFocusItem = nullptr; // QGraphicsScene *mScene = nullptr; //}; #endif // TEST_CSCENEBACKGROUNDITEM_H test_cscheduleitem.cpp000066400000000000000000000022761523260663500374530ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_cscheduleitem.h" #include //test_cscheduleitem::test_cscheduleitem() //{ //} //TEST_F(test_cscheduleitem, setData_01) //{ // mItem->setData(ScheduleDataInfo(), QDate(), 2); // EXPECT_EQ(mItem->m_totalNum, 2); //} //TEST_F(test_cscheduleitem, hasSelectSchedule_01) //{ // ScheduleDataInfo info; // mItem->setData(info, QDate(), 2); // EXPECT_TRUE(mItem->hasSelectSchedule(info)); //} //TEST_F(test_cscheduleitem, splitTexte_01) //{ // QFont font; // QStringList strList; // QFontMetrics metrics(font); // ScheduleDataInfo info; // mItem->splitText(font, 20, 10, "123", strList, metrics); //} //TEST_F(test_cscheduleitem, paintBackground_01) //{ // QPainter painter; // QRectF rect; // mItem->m_vHoverflag = true; // mItem->m_vSelectflag = false; // mItem->paintBackground(&painter, rect); //} //TEST_F(test_cscheduleitem, paintBackground_02) //{ // QPainter painter; // QRectF rect; // mItem->m_vHoverflag = true; // mItem->m_vSelectflag = true; // mItem->paintBackground(&painter, rect); //} test_cscheduleitem.h000066400000000000000000000013531523260663500371130ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsItem// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DRAGINFOITEM_H #define TEST_DRAGINFOITEM_H //#include "graphicsItem/scheduleitem.h" //#include //#include <../third-party_stub/stub.h> //#include //#include //class test_cscheduleitem: public::testing::Test //{ //public: // test_cscheduleitem(); // virtual void SetUp() // { // QRectF rect(0, 0, 100, 100); // mItem = new CScheduleItem(rect); // } // virtual void TearDown() // { // delete mItem; // mItem = nullptr; // } //protected: // CScheduleItem *mItem = nullptr; //}; #endif // TEST_DRAGINFOITEM_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsscene.cpp000066400000000000000000000044751523260663500340570ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_graphicsscene.h" #include #include #include #include #include "view/graphicsItem/cfocusitem.h" //test_graphicsscene::test_graphicsscene() //{ //} //void test_graphicsscene::SetUp() //{ // m_Scene = new CGraphicsScene(); //} //void test_graphicsscene::TearDown() //{ // delete m_Scene; // m_Scene = nullptr; //} //TEST_F(test_graphicsscene, getCurrentFocusItem) //{ // QGraphicsItem *item = m_Scene->getCurrentFocusItem(); // Q_UNUSED(item) //} ////setPrePage //TEST_F(test_graphicsscene, setPrePage) //{ // m_Scene->setPrePage(QDate::currentDate(), false); //} ////focusInDeal //TEST_F(test_graphicsscene, focusInDeal) //{ // m_Scene->setIsShowCurrentItem(true); // QFocusEvent event(QEvent::FocusIn, Qt::TabFocusReason); // QApplication::sendEvent(m_Scene, &event); //} //TEST_F(test_graphicsscene, focusInDeal1) //{ // CFocusItem *item = new CFocusItem(); // m_Scene->setCurrentFocusItem(item); // m_Scene->addItem(item); // QFocusEvent event(QEvent::FocusIn, Qt::ActiveWindowFocusReason); // QApplication::sendEvent(m_Scene, &event); // m_Scene->clear(); //} ////focusOutDeal //TEST_F(test_graphicsscene, focusOutDeal) //{ // QFocusEvent event(QEvent::FocusOut, Qt::TabFocusReason); // m_Scene->setActiveSwitching(true); // QApplication::sendEvent(m_Scene, &event); //} ////focusOutDeal //TEST_F(test_graphicsscene, focusOutDeal1) //{ // QFocusEvent event(QEvent::FocusOut, Qt::TabFocusReason); // m_Scene->setActiveSwitching(false); // QApplication::sendEvent(m_Scene, &event); //} //TEST_F(test_graphicsscene, event) //{ // QFocusEvent event(QEvent::FocusOut); // m_Scene->event(&event); //} ////setIsContextMenu //TEST_F(test_graphicsscene, setIsContextMenu) //{ // m_Scene->setIsShowCurrentItem(false); //} ////currentItemInit //TEST_F(test_graphicsscene, currentItemInit) //{ // CFocusItem *item = new CFocusItem(); // m_Scene->setCurrentFocusItem(item); // m_Scene->addItem(item); // m_Scene->currentItemInit(); // m_Scene->clear(); //} ////getActiveSwitching //TEST_F(test_graphicsscene, getActiveSwitching) //{ // m_Scene->getActiveSwitching(); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsscene.h000066400000000000000000000011021523260663500335040ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_GRAPHICSSCENE_H #define TEST_GRAPHICSSCENE_H //#include "gtest/gtest.h" //#include "cgraphicsscene.h" //#include //class test_graphicsscene : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_graphicsscene(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CGraphicsScene *m_Scene = nullptr; //}; #endif // TEST_GRAPHICSSCENE_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsview.cpp000066400000000000000000000230301523260663500337200ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_graphicsview.h" //#include "graphicsItem/scheduleitem.h" //#include "../third-party_stub/stub.h" //#include "../dialog_stub.h" //#include //test_graphicsview::test_graphicsview() //{ // cGraphicsView = new CGraphicsView(nullptr, CGraphicsView::WeekPos); //} //test_graphicsview::~test_graphicsview() //{ // delete cGraphicsView; //} ////void CGraphicsView::setMargins(int left, int top, int right, int bottom) //TEST_F(test_graphicsview, setMargins) //{ // int left = 50; // int top = 50; // int right = 50; // int bottom = 50; // cGraphicsView->setMargins(left, top, right, bottom); // assert(cGraphicsView->m_margins.left() == 50); //} ////void CGraphicsView::setTheMe(int type) //TEST_F(test_graphicsview, setTheMe) //{ // int type = 0; // cGraphicsView->setTheMe(type); // type = 2; // cGraphicsView->setTheMe(type); //} ////bool CGraphicsView::MeetCreationConditions(const QDateTime &date) //TEST_F(test_graphicsview, MeetCreationConditions) //{ // QString strDate = "2020-12-28 12:24:36"; // QDateTime date = QDateTime::fromString(strDate, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->MeetCreationConditions(date); //} //TEST_F(test_graphicsview, updateHeight_01) //{ // cGraphicsView->updateHeight(); //} ////void CGraphicsView::setRange(int w, int h, QDate begindate, QDate enddate, int rightMargin) //TEST_F(test_graphicsview, setRange) //{ // int w = 20; // int h = 20; // QDate begindate(2020, 11, 11); // QDate enddate(2020, 11, 31); // int rightMargin = 10; // cGraphicsView->setRange(w, h, begindate, enddate, rightMargin); // cGraphicsView->setRange(begindate, enddate); //} ////void CGraphicsView::setCurrentDate(const QDateTime ¤tDate) //TEST_F(test_graphicsview, setCurrentDate) //{ // QDateTime date = QDateTime::currentDateTime(); // cGraphicsView->setCurrentDate(date); //} ////void CGraphicsView::setInfo(const QVector &info) //TEST_F(test_graphicsview, setInfo) //{ // QVector infos = QVector {}; // cGraphicsView->setInfo(infos); //} //bool MScheduleTimeThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2); //TEST_F(test_graphicsview, MScheduleTimeThan) //{ // ScheduleDataInfo info1 = ScheduleDataInfo{}; // ScheduleDataInfo info2 = ScheduleDataInfo{}; // MScheduleTimeThan(info1, info2); //} ////void CGraphicsView::upDateInfoShow(const CGraphicsView::DragStatus &status, const ScheduleDataInfo &info) //TEST_F(test_graphicsview, upDateInfoShow) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::IsCreate, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::ChangeEnd, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::ChangeBegin, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::ChangeWhole, info); // cGraphicsView->upDateInfoShow(CGraphicsView::DragStatus::NONE, info); //} ////QDateTime CGraphicsView::getPosDate(const QPoint &p) //TEST_F(test_graphicsview, getPosDate) //{ // QDateTime dateTime; // QPoint point(50, 40); // dateTime = cGraphicsView->getPosDate(point); //} ////void CGraphicsView::ShowSchedule(DragInfoItem *infoitem) ////TEST_F(test_graphicsview, ShowSchedule) ////{ //// QPoint point(50, 40); //// QGraphicsItem *listItem = itemAt(point); //// DragInfoItem *infoitem = dynamic_cast(listItem); //// CScheduleItem *scheduleitem = dynamic_cast(infoitem); //// qCInfo(CommonLogger) << scheduleitem->getType(); //// cGraphicsView->ShowSchedule(infoitem); ////} //TEST_F(test_graphicsview, MoveInfoProcess_01) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // QPointF pos(1, 1); // info.setAllDay(true); // cGraphicsView->MoveInfoProcess(info, pos); // EXPECT_FALSE(info.getAllDay()); //} //TEST_F(test_graphicsview, MoveInfoProcess_02) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // QPointF pos(1, 1); // info.setAllDay(false); // cGraphicsView->MoveInfoProcess(info, pos); // EXPECT_FALSE(info.getAllDay()); //} ////void CGraphicsView::addScheduleItem(const ScheduleDataInfo &info, QDate date, int index, int totalNum, int type, int viewtype, int maxnum) //TEST_F(test_graphicsview, addScheduleItem_01) //{ // ScheduleDataInfo info = ScheduleDataInfo{}; // QDate date(2020, 12, 28); // int index = 1; // int totalNum = 2; // int type = 1; // int viewtype = 1; // int maxnum = 3; // cGraphicsView->addScheduleItem(info, date, index, totalNum, type, viewtype, maxnum); //} //TEST_F(test_graphicsview, clearSchedule_01) //{ // cGraphicsView->clearSchedule(); // EXPECT_TRUE(cGraphicsView->m_updateDflag); // EXPECT_TRUE(cGraphicsView->m_vScheduleItem.isEmpty()); //} ////void CGraphicsView::scheduleClassificationType(QVector &scheduleInfolist, QList &info) //TEST_F(test_graphicsview, schedusleClassificationType) //{ // QVector scheduleInfolist = QVector {}; // QList info = QList {}; // cGraphicsView->scheduleClassificationType(scheduleInfolist, info); //} ////void CGraphicsView::slotDoubleEvent(int type) //TEST_F(test_graphicsview, slotDoubleEvent) //{ // int type = 1; // cGraphicsView->slotDoubleEvent(type); //} ////void CGraphicsView::slotScrollBar() //TEST_F(test_graphicsview, slotScrollBar) //{ // cGraphicsView->slotScrollBar(); //} ////void CGraphicsView::slotUpdateScene() //TEST_F(test_graphicsview, slotUpdateScene) //{ // cGraphicsView->slotUpdateScene(); //} ////void CGraphicsView::scrollBarValueChangedSlot() //TEST_F(test_graphicsview, scrollBarValueChangedSlot_01) //{ // cGraphicsView->scrollBarValueChangedSlot(); //} ////ScheduleDataInfo CGraphicsView::getScheduleInfo(const QDateTime &beginDate, const QDateTime &endDate) //TEST_F(test_graphicsview, getScheduleInfo_01) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getScheduleInfo(begindate, enddate); //} //TEST_F(test_graphicsview, getScheduleInfo_02) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getScheduleInfo(enddate, begindate); //} ////bool CGraphicsView::IsEqualtime(const QDateTime &timeFirst, const QDateTime &timeSecond) //TEST_F(test_graphicsview, IsEqualtime) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->IsEqualtime(begindate, enddate); //} ////bool CGraphicsView::JudgeIsCreate(const QPointF &pos) //TEST_F(test_graphicsview, JudgeIsCreate) //{ // QPointF pos(20, 20); // cGraphicsView->JudgeIsCreate(pos); //} ////void CGraphicsView::RightClickToCreate(QGraphicsItem *listItem, const QPoint &pos) //TEST_F(test_graphicsview, RightClickToCreate) //{ //// QGraphicsItem *listItem = nullptr; //// QPoint pos(20, 20); // //cGraphicsView->RightClickToCreate(listItem, pos); //} ////QDateTime CGraphicsView::getDragScheduleInfoBeginTime(const QDateTime &moveDateTime) //TEST_F(test_graphicsview, getDragScheduleInfoBeginTime) //{ // QString begin = "2020-12-01 12:24:36"; // QDateTime begindate = QDateTime::fromString(begin, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getDragScheduleInfoBeginTime(begindate); //} ////QDateTime CGraphicsView::getDragScheduleInfoEndTime(const QDateTime &moveDateTime) //TEST_F(test_graphicsview, getDragScheduleInfoEndTime) //{ // QString end = "2020-12-21 12:24:36"; // QDateTime enddate = QDateTime::fromString(end, "yyyy-MM-dd hh:mm:ss"); // cGraphicsView->getDragScheduleInfoEndTime(enddate); //} ////void CGraphicsView::keepCenterOnScene() //TEST_F(test_graphicsview, keepCenterOnScene) //{ // cGraphicsView->keepCenterOnScene(); //} ////void CGraphicsView::setTime(QTime time) //TEST_F(test_graphicsview, setTime) //{ // QTime time(7, 30, 5, 100); // cGraphicsView->setTime(time); //} ////void CGraphicsView::updateInfo() //TEST_F(test_graphicsview, updateInfo) //{ // cGraphicsView->updateInfo(); //} //TEST_F(test_graphicsview, mouseDoubleClickEvent_01) //{ // Stub stub; // calendarDDialogExecStub(stub); // QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // cGraphicsView->mouseDoubleClickEvent(&event); //} //TEST_F(test_graphicsview, mousePressEvent_01) //{ // QMouseEvent event(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // cGraphicsView->mousePressEvent(&event); //} //TEST_F(test_graphicsview, mouseMoveEvent_01) //{ // QMouseEvent event(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // cGraphicsView->mouseMoveEvent(&event); //} //TEST_F(test_graphicsview, resizeEvent_01) //{ // QResizeEvent event(QSize(50, 50), QSize(100, 100)); // cGraphicsView->resizeEvent(&event); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_graphicsview.h000066400000000000000000000007551523260663500333760ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_GRAPHICSVIEW_H #define TEST_GRAPHICSVIEW_H //#include "graphicsview.h" //#include "gtest/gtest.h" //#include //class test_graphicsview : public QObject, public::testing::Test //{ //public: // test_graphicsview(); // ~test_graphicsview(); //protected: // CGraphicsView *cGraphicsView = nullptr; //}; #endif // TEST_GRAPHICSVIEW_H test_monthgraphiview.cpp000066400000000000000000000147611523260663500343740ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthgraphiview.h" #include "../third-party_stub/stub.h" #include "../dialog_stub.h" #include "widget/monthWidget/monthscheduleview.h" static void monthgraphiview_stub_void() { } test_monthgraphiview::test_monthgraphiview() { cMonthGraphiview = new CMonthGraphicsview(); } test_monthgraphiview::~test_monthgraphiview() { delete cMonthGraphiview; } //void CMonthGraphiview::setTheMe(int type) TEST_F(test_monthgraphiview, setTheMe) { int type = 1; cMonthGraphiview->setTheMe(); cMonthGraphiview->setTheMe(type); } //void CMonthGraphiview::setDate(const QVector &showDate) TEST_F(test_monthgraphiview, setDate) { QVector showDate; QDate date1(2020, 10, 1); QDate date2(2020, 12, 1); for (int i = 0; i < 42; ++i) { if (i % 2 == 0) { showDate.append(date1); } else { showDate.append(date2); } } std::cout << showDate.size() << std::endl; cMonthGraphiview->setDate(showDate); } //void CMonthGraphiview::setLunarInfo(const QMap &lunarCache) TEST_F(test_monthgraphiview, setLunarInfo) { QMap lunarCache = QMap {}; cMonthGraphiview->setLunarInfo(lunarCache); } //void CMonthGraphiview::setLunarVisible(bool visible) TEST_F(test_monthgraphiview, setLunarVisible) { bool visible = false; cMonthGraphiview->setLunarVisible(visible); } //void CMonthGraphiview::setScheduleInfo(const QMap > &info) TEST_F(test_monthgraphiview, setScheduleInfo) { QMap > info = QMap > {}; cMonthGraphiview->setScheduleInfo(info); } //void CMonthGraphiview::setSelectSearchSchedule(const ScheduleDataInfo &scheduleInfo) TEST_F(test_monthgraphiview, setSelectSearchSchedule) { ScheduleDataInfo scheduleInfo = ScheduleDataInfo{}; cMonthGraphiview->setSelectSearchSchedule(scheduleInfo); } //QPointF CMonthGraphiview::getItemPos(const QPoint &p, const QRectF &itemRect) TEST_F(test_monthgraphiview, getItemPos) { QPoint p(100, 100); QRectF itemRect; cMonthGraphiview->getItemPos(p, itemRect); } //QDateTime CMonthGraphiview::getPosDate(const QPoint &p) TEST_F(test_monthgraphiview, getPosDate_01) { QPoint p(100, 100); cMonthGraphiview->getPosDate(p); } TEST_F(test_monthgraphiview, getPosDate_02) { QPoint p(-100, -1); cMonthGraphiview->getPosDate(p); } TEST_F(test_monthgraphiview, getPosDate_03) { QPoint p(-1, -1); cMonthGraphiview->setSceneRect(-2, -2, 100, 100); cMonthGraphiview->getPosDate(p); } ////void CMonthGraphiview::upDateInfoShow(const CMonthGraphiview::DragStatus &status, const ScheduleDataInfo &info) TEST_F(test_monthgraphiview, upDateInfoShow_01) { Stub stub; stub.set(ADDR(CWeekScheduleView, addData), monthgraphiview_stub_void); stub.set(ADDR(CWeekScheduleView, changeDate), monthgraphiview_stub_void); ScheduleDataInfo info = ScheduleDataInfo{}; cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::IsCreate, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::ChangeBegin, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::ChangeEnd, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::ChangeWhole, info); cMonthGraphiview->upDateInfoShow(CMonthGraphicsview::NONE, info); } TEST_F(test_monthgraphiview, slideEvent_01) { QPointF pos(1, 1); QPointF stopPos(2, 2); cMonthGraphiview->slideEvent(pos, stopPos); } TEST_F(test_monthgraphiview, mouseDoubleClickEvent_01) { QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(0, 0), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); cMonthGraphiview->mouseDoubleClickEvent(&event); } TEST_F(test_monthgraphiview, mouseDoubleClickEvent_02) { QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(0, 0), Qt::RightButton, Qt::RightButton, Qt::NoModifier); cMonthGraphiview->mouseDoubleClickEvent(&event); } TEST_F(test_monthgraphiview, mouseDoubleClickEvent_03) { QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); cMonthGraphiview->mouseDoubleClickEvent(&event); } TEST_F(test_monthgraphiview, resizeEvent_01) { QResizeEvent event(QSize(50, 50), QSize(100, 100)); cMonthGraphiview->resizeEvent(&event); } TEST_F(test_monthgraphiview, changeEvent_01) { QEvent event(QEvent::FontChange); cMonthGraphiview->changeEvent(&event); } TEST_F(test_monthgraphiview, wheelEvent_01) { QWheelEvent event(QPointF(1, 1), 0, Qt::LeftButton, Qt::NoModifier); cMonthGraphiview->wheelEvent(&event); } TEST_F(test_monthgraphiview, updateBackgroundShowItem_01) { cMonthGraphiview->updateBackgroundShowItem(); } TEST_F(test_monthgraphiview, setDragPixmap_01) { QDrag drag(cMonthGraphiview); CMonthScheduleItem item(QRect(0, 0, 10, 10)); cMonthGraphiview->setDragPixmap(&drag, &item); } TEST_F(test_monthgraphiview, MeetCreationConditions_01) { QDateTime date; EXPECT_TRUE(cMonthGraphiview->MeetCreationConditions(date)); } TEST_F(test_monthgraphiview, IsEqualtime_01) { QDateTime date; EXPECT_TRUE(cMonthGraphiview->IsEqualtime(date, date)); } TEST_F(test_monthgraphiview, JudgeIsCreate_01) { EXPECT_FALSE(cMonthGraphiview->JudgeIsCreate(QPointF(1, 1))); } TEST_F(test_monthgraphiview, RightClickToCreate_01) { QPoint pos(1, 1); cMonthGraphiview->RightClickToCreate(nullptr, pos); } TEST_F(test_monthgraphiview, MoveInfoProcess_01) { QPointF pos(1, 1); ScheduleDataInfo info; cMonthGraphiview->MoveInfoProcess(info, pos); } TEST_F(test_monthgraphiview, MoveInfoProcess_02) { QPointF pos(1, -1); ScheduleDataInfo info; cMonthGraphiview->MoveInfoProcess(info, pos); } TEST_F(test_monthgraphiview, getDragScheduleInfoBeginTime_02) { QPointF pos(1, -1); QDateTime time; cMonthGraphiview->m_InfoEndTime = time; EXPECT_EQ(cMonthGraphiview->getDragScheduleInfoBeginTime(time), time); } TEST_F(test_monthgraphiview, getDragScheduleInfoEndTime_02) { QPointF pos(1, -1); QDateTime time; cMonthGraphiview->m_InfoEndTime = time; EXPECT_EQ(cMonthGraphiview->getDragScheduleInfoEndTime(time), time); } TEST_F(test_monthgraphiview, slotCreate_02) { Stub stub; calendarDDialogExecStub(stub); QPointF pos(1, -1); QDateTime time; cMonthGraphiview->m_InfoEndTime = time; cMonthGraphiview->slotCreate(time); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_monthgraphiview.h000066400000000000000000000010071523260663500341050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHGRAPHVIEW_H #define TEST_MONTHGRAPHVIEW_H //#include "monthgraphiview.h" //#include "gtest/gtest.h" //#include //class test_monthgraphiview : public QObject, public::testing::Test //{ //public: // test_monthgraphiview(); // ~test_monthgraphiview(); //protected: // CMonthGraphicsview *cMonthGraphiview = nullptr; //}; #endif // TEST_MONTHGRAPHVIEW_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_scheduleitem.cpp000066400000000000000000000112321523260663500337010ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_scheduleitem.h" #include "../third-party_stub/stub.h" #include //test_scheduleitem::test_scheduleitem() //{ // QRectF rectf; // mScheduleItem = new CScheduleItem(rectf); //} //test_scheduleitem::~test_scheduleitem() //{ // delete mScheduleItem; // mScheduleItem = nullptr; //} //QVector getScheduleItemDInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(currentDateTime.addDays(2)); // schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); // schedule3.setTitleName("scheduleThree"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(currentDateTime.addDays(3)); // schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); // schedule4.setTitleName("scheduleFour"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(currentDateTime.addDays(4)); // schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); // schedule5.setTitleName("scheduleFive"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); // scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); // scheduleFes.setTitleName("scheduleFestival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} ////void CScheduleItem::setData(const ScheduleDataInfo &info, QDate date, int totalNum) //TEST_F(test_scheduleitem, setData) //{ // ScheduleDataInfo scheduleinof = getScheduleItemDInfo().first(); // mScheduleItem->setData(scheduleinof, QDate::currentDate(), 4); //} ////bool CScheduleItem::hasSelectSchedule(const ScheduleDataInfo &info) //TEST_F(test_scheduleitem, hasSelectSchedule) //{ // ScheduleDataInfo scheduleinfo1 = getScheduleItemDInfo().first(); // ScheduleDataInfo scheduleinfo2 = getScheduleItemDInfo().at(1); // mScheduleItem->setData(scheduleinfo1, QDate::currentDate(), 4); // bool res = mScheduleItem->hasSelectSchedule(scheduleinfo1); // EXPECT_TRUE(res); // res = mScheduleItem->hasSelectSchedule(scheduleinfo2); // EXPECT_FALSE(res); //} ////void CScheduleItem::splitText(QFont font, int w, int h, QString str, QStringList &liststr, QFontMetrics &fontm) //TEST_F(test_scheduleitem, splitText) //{ // QFont font; // QString str = "helo"; // QStringList strlist("hello,word!"); // QFontMetrics fontmetrics(font); // mScheduleItem->splitText(font, 10, 12, str, strlist, fontmetrics); // mScheduleItem->splitText(font, 40, 40, str, strlist, fontmetrics); //} //bool getItemFocus_Stub() //{ // return true; //} ////paintBackground //TEST_F(test_scheduleitem, paintBackground) //{ // QRectF rectf(0, 0, 100, 100); // mScheduleItem->setRect(rectf); // mScheduleItem->setData(getScheduleItemDInfo().first(), QDate::currentDate(), 4); // QPixmap pixmap(rectf.toRect().size()); // pixmap.fill(Qt::transparent); // QPainter painter(&pixmap); // mScheduleItem->m_vHighflag = true; // mScheduleItem->m_vSelectflag = false; // mScheduleItem->paintBackground(&painter, pixmap.rect(), true); // Stub stub; // stub.set(ADDR(CFocusItem, getItemFocus), getItemFocus_Stub); // mScheduleItem->m_vSelectflag = true; // mScheduleItem->paintBackground(&painter, pixmap.rect(), true); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_view/test_scheduleitem.h000066400000000000000000000010051523260663500333430ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULEITEM_H #define TEST_SCHEDULEITEM_H //#include //#include //#include "graphicsItem/scheduleitem.h" //class test_scheduleitem : public ::QObject // , public ::testing::Test //{ //public: // test_scheduleitem(); // ~test_scheduleitem(); //protected: // CScheduleItem *mScheduleItem = nullptr; //}; #endif // TEST_SCHEDULEITEM_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/000077500000000000000000000000001523260663500277755ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget/000077500000000000000000000000001523260663500327555ustar00rootroot00000000000000test_dayhuangliview.cpp000066400000000000000000000026231523260663500374640ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_dayhuangliview.h" //test_dayhuangliview::test_dayhuangliview() //{ // mDayHuangLiLabel = new CDayHuangLiLabel(); //} //test_dayhuangliview::~test_dayhuangliview() //{ // delete mDayHuangLiLabel; // mDayHuangLiLabel = nullptr; //} ////void CDayHuangLiLabel::setbackgroundColor(QColor backgroundColor) //TEST_F(test_dayhuangliview, setbackgroundColor) //{ // mDayHuangLiLabel->setbackgroundColor(QColor(100, 100, 255)); //} ////void CDayHuangLiLabel::setTextInfo(QColor tcolor, QFont font) //TEST_F(test_dayhuangliview, setTextInfo) //{ // mDayHuangLiLabel->setTextInfo(QColor(100, 100, 255), QFont()); //} ////void CDayHuangLiLabel::setHuangLiText(QStringList vhuangli, int type) //TEST_F(test_dayhuangliview, setHuangLiText) //{ // QStringList strlist("å«�娶 入土"); // mDayHuangLiLabel->setHuangLiText(strlist, 1); // QStringList strlist1(""); // mDayHuangLiLabel->setHuangLiText(strlist1, 2); //} //TEST_F(test_dayhuangliview, getPixmap) //{ // QStringList strlist("å«�娶 入土"); // mDayHuangLiLabel->setHuangLiText(strlist, 1); // mDayHuangLiLabel->setbackgroundColor(QColor(100, 100, 255)); // mDayHuangLiLabel->setFixedSize(200, 50); // QPixmap pixmap(mDayHuangLiLabel->size()); // mDayHuangLiLabel->render(&pixmap); //} test_dayhuangliview.h000066400000000000000000000010241523260663500371230ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DAYHUANGLIVIEW_H #define TEST_DAYHUANGLIVIEW_H //#include //#include //#include //class test_dayhuangliview : public QObject // , public ::testing::Test //{ //public: // test_dayhuangliview(); // ~test_dayhuangliview(); //protected: // CDayHuangLiLabel *mDayHuangLiLabel = nullptr; //}; #endif // TEST_DAYHUANGLIVIEW_H test_daymonthview.cpp000066400000000000000000000075321523260663500371660ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_daymonthview.h" //test_daymonthview::test_daymonthview() //{ // mDayMonthView = new CDayMonthView(); //} //test_daymonthview::~test_daymonthview() //{ // delete mDayMonthView; // mDayMonthView = nullptr; //} //QVector dayMonthviewGetDayList() //{ // QVector dateList {}; // QDate currentDate = QDate::currentDate(); // for (int i = 0; i < 42; i++) { // dateList.append(currentDate.addDays(i)); // } // return dateList; //} //QMap dayMonthViewGetHuangLiDayInfo() //{ // QMap huangLiDayInfo {}; // CaHuangLiDayInfo huangLiInfo1 {}; // huangLiInfo1.mGanZhiYear = "辛丑牛年"; //年干支 // huangLiInfo1.mGanZhiMonth = "庚寅月"; //月干支 // huangLiInfo1.mGanZhiDay = "è¾›å�¯æ—¥"; //日干支 // huangLiInfo1.mLunarMonthName = "正月"; //农历月å��ç§° // huangLiInfo1.mLunarDayName = "åˆ�一"; //农历日å��ç§° // huangLiInfo1.mLunarLeapMonth = 4; //闰月 // huangLiInfo1.mZodiac = "牛"; //生肖 // huangLiInfo1.mTerm = ""; //农历节气 // huangLiInfo1.mSolarFestival = "国庆节"; //阳历节日 // huangLiInfo1.mLunarFestival = "除夕"; //农历节日 // huangLiInfo1.mSuit = "å«�娶"; //黄历宜 // huangLiInfo1.mAvoid = "入土"; //黄历忌 // huangLiDayInfo.insert(QDate::currentDate(), huangLiInfo1); // return huangLiDayInfo; //} //QVector dayMonthViewGetLineFlag() //{ // QVector flags {}; // for (int i = 0; i < 42; i++) { // flags.append(true); // } // return flags; //} ////void CDayMonthView::setShowDate(const QVector &showDate, const QDate &selectDate, const QDate ¤tDate) //TEST_F(test_daymonthview, setShowDate) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate(), QDate::currentDate()); //} ////void CDayMonthView::setLunarVisible(bool visible) //TEST_F(test_daymonthview, setLunarVisible) //{ // mDayMonthView->setLunarVisible(true); //} ////void CDayMonthView::setTheMe(int type) //TEST_F(test_daymonthview, setTheMe) //{ // mDayMonthView->setTheMe(1); // mDayMonthView->setTheMe(2); //} ////void CDayMonthView::setSearchFlag(bool flag) //TEST_F(test_daymonthview, setSearchFlag) //{ // mDayMonthView->setSearchFlag(true); //} ////void CDayMonthView::setHuangLiInfo(const CaHuangLiDayInfo &huangLiInfo) //TEST_F(test_daymonthview, setHuangLiInfo) //{ // mDayMonthView->setHuangLiInfo(dayMonthViewGetHuangLiDayInfo().value(QDate::currentDate())); //} ////void CDayMonthView::setHasScheduleFlag(const QVector &hasScheduleFlag) //TEST_F(test_daymonthview, setHasScheduleFlag) //{ // mDayMonthView->setHasScheduleFlag(dayMonthViewGetLineFlag()); //} ////void CDayMonthView::updateDateLunarDay() //TEST_F(test_daymonthview, updateDateLunarDay) //{ // mDayMonthView->updateDateLunarDay(); //} ////void CDayMonthView::changeSelectDate(const QDate &date) //TEST_F(test_daymonthview, changeSelectDate) //{ // mDayMonthView->changeSelectDate(QDate::currentDate()); //} ////void CDayMonthView::slotprev() //TEST_F(test_daymonthview, slotprev) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate().addDays(1), QDate::currentDate().addDays(1)); // mDayMonthView->slotprev(); //} ////void CDayMonthView::slotnext() //TEST_F(test_daymonthview, slotnext) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate().addDays(1), QDate::currentDate().addDays(1)); // mDayMonthView->slotnext(); //} ////void CDayMonthView::slottoday() //TEST_F(test_daymonthview, slottoday) //{ // mDayMonthView->setShowDate(dayMonthviewGetDayList(), QDate::currentDate().addDays(1), QDate::currentDate().addDays(1)); // mDayMonthView->slottoday(); //} test_daymonthview.h000066400000000000000000000010001523260663500366130ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DAYMONTHVIEW_H #define TEST_DAYMONTHVIEW_H //#include //#include //#include //class test_daymonthview : public QObject // , public ::testing::Test //{ //public: // test_daymonthview(); // ~test_daymonthview(); //protected: // CDayMonthView *mDayMonthView = nullptr; //}; #endif // TEST_DAYMONTHVIEW_H test_daywindow.cpp000066400000000000000000000025441523260663500364530ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_daywindow.h" //test_dayWindow::test_dayWindow() //{ //} //void test_dayWindow::SetUp() //{ // QDateTime currentTime = QDateTime::currentDateTime(); // m_dayWindow = new CDayWindow(); // m_dayWindow->setCurrentDateTime(currentTime); // m_dayWindow->setSelectDate(currentTime.date()); //} //void test_dayWindow::TearDown() //{ // delete m_dayWindow; // m_dayWindow = nullptr; //} ////测试paintevent //TEST_F(test_dayWindow, getPixmap) //{ // m_dayWindow->setFixedSize(800, 600); // QPixmap pixmap(m_dayWindow->size()); // m_dayWindow->render(&pixmap); //} ////setTheme //TEST_F(test_dayWindow, setTheme) //{ // m_dayWindow->setTheMe(0); // m_dayWindow->setTheMe(1); // m_dayWindow->setTheMe(2); //} ////setSearchWFlag //TEST_F(test_dayWindow, setSearchWFlag) //{ // m_dayWindow->setSearchWFlag(false); //} ////slotChangeSelectDate //TEST_F(test_dayWindow, slotChangeSelectDate) //{ // m_dayWindow->slotChangeSelectDate(m_dayWindow->getSelectDate()); //} ////slotSwitchPrePage //TEST_F(test_dayWindow, slotSwitchPrePage) //{ // m_dayWindow->slotSwitchPrePage(); //} ////slotSwitchNextPage //TEST_F(test_dayWindow, slotSwitchNextPage) //{ // m_dayWindow->slotSwitchNextPage(); //} test_daywindow.h000066400000000000000000000010501523260663500361070ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_dayWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_DAYWINDOW_H #define TEST_DAYWINDOW_H //#include "gtest/gtest.h" //#include "dayWidget/daywindow.h" //#include //class test_dayWindow : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // test_dayWindow(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CDayWindow *m_dayWindow; //}; #endif // TEST_DAYWINDOW_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget/000077500000000000000000000000001523260663500333255ustar00rootroot00000000000000test_monthdayview.cpp000066400000000000000000000124311523260663500375300ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_monthdayview.h" //#include "touchgestureoperation.h" //#include "../third-party_stub/stub.h" //#include //#include //static int monthdayview_int = 0; //static int monthdayview_stub_int() //{ // return monthdayview_int; //} //test_monthdayview::test_monthdayview() //{ // mMonthDayView = new CMonthDayView(); // mMonthWidget = new CMonthWidget(); // mMonthRect = new CMonthRect(); // mMonthRect->setDate(QDate()); // CMonthRect::setSelectRect(mMonthRect); //} //test_monthdayview::~test_monthdayview() //{ // delete mMonthDayView; // mMonthDayView = nullptr; // delete mMonthWidget; // mMonthWidget = nullptr; // delete mMonthRect; // mMonthRect = nullptr; //} ////void CMonthDayView::setSelectDate(const QDate &date) //TEST_F(test_monthdayview, setSelectdate) //{ // mMonthDayView->setSelectDate(QDate::currentDate()); //} ////void CMonthDayView::setTheMe(int type) //TEST_F(test_monthdayview, setTheMe) //{ // mMonthDayView->setTheMe(1); // mMonthDayView->setTheMe(2); //} ////void CMonthDayView::setSearchflag(bool flag) //TEST_F(test_monthdayview, setSearchflag) //{ // mMonthDayView->setSearchflag(false); //} //TEST_F(test_monthdayview, event_01) //{ // Stub stub; // stub.set(ADDR(touchGestureOperation, getTouchState), monthdayview_stub_int); // QMouseEvent e(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mMonthDayView->event(&e); //} ////void CMonthWidget::setDate(const QDate date[12]) //TEST_F(test_monthdayview, setDate) //{ // QDate m_days[12]; // QDate currentDate = QDate::currentDate(); // for (int i = 0; i < 12; i++) { // m_days[i] = currentDate.addDays(i); // } // mMonthWidget->setDate(m_days); //} ////void CMonthWidget::updateSize() //TEST_F(test_monthdayview, updateSize) //{ // mMonthWidget->updateSize(); //} ////void CMonthRect::setDate(const QDate &date) //TEST_F(test_monthdayview, setRectDate) //{ // mMonthRect->setDate(QDate::currentDate()); // mMonthRect->getDate(); //} ////void CMonthRect::setRect(const QRectF &rect) //TEST_F(test_monthdayview, setRect) //{ // mMonthRect->setRect(QRectF()); // mMonthRect->rect(); //} ////void CMonthRect::setDevicePixelRatio(const qreal pixel) //TEST_F(test_monthdayview, setDevicePixelRatio) //{ // mMonthRect->setDevicePixelRatio(1.2); //} ////void CMonthRect::setTheMe(int type) //TEST_F(test_monthdayview, setRTheMe) //{ // mMonthRect->setTheMe(1); // mMonthRect->setTheMe(2); //} //TEST_F(test_monthdayview, paintEvent_01) //{ // QPaintEvent paint(QRect(0, 0, 1, 1)); // mMonthWidget->paintEvent(&paint); //} //TEST_F(test_monthdayview, mouseReleaseEvent_01) //{ // QMouseEvent e(QEvent::MouseButtonPress, QPointF(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mMonthWidget->mouseReleaseEvent(&e); //} //TEST_F(test_monthdayview, keyPressEvent_01) //{ // QKeyEvent e(QEvent::KeyPress, Qt::Key_Left, Qt::NoModifier); // mMonthWidget->keyPressEvent(&e); //} //TEST_F(test_monthdayview, keyPressEvent_02) //{ // QKeyEvent e(QEvent::KeyPress, Qt::Key_Right, Qt::NoModifier); // mMonthWidget->keyPressEvent(&e); //} //TEST_F(test_monthdayview, keyPressEvent_03) //{ // QKeyEvent e(QEvent::KeyPress, Qt::Key_Up, Qt::NoModifier); // mMonthWidget->keyPressEvent(&e); //} //TEST_F(test_monthdayview, focusInEvent_01) //{ // QFocusEvent e(QEvent::FocusIn, Qt::TabFocusReason); // mMonthWidget->focusInEvent(&e); // EXPECT_TRUE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, focusInEvent_02) //{ // QFocusEvent e(QEvent::FocusIn, Qt::OtherFocusReason); // mMonthWidget->focusInEvent(&e); // EXPECT_FALSE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, focusOutEvent_01) //{ // QFocusEvent e(QEvent::FocusIn, Qt::OtherFocusReason); // mMonthWidget->focusOutEvent(&e); // EXPECT_FALSE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, mousePress_01) //{ // mMonthWidget->mousePress(QPoint(0, 0)); // EXPECT_FALSE(mMonthWidget->m_isFocus); //} //TEST_F(test_monthdayview, updateSize_01) //{ // mMonthWidget->updateSize(); //} //TEST_F(test_monthdayview, getMousePosItem_01) //{ // mMonthWidget->getMousePosItem(QPointF()); //} //TEST_F(test_monthdayview, updateShowDate_01) //{ // mMonthWidget->updateShowDate(QDate()); //} //TEST_F(test_monthdayview, paintItem_01) //{ // mMonthRect->m_Date = QDate(2022, 4, 22); // QPainter pa(mMonthWidget); // mMonthRect->paintItem(&pa, QRect(), true); //} //TEST_F(test_monthdayview, paintItem_02) //{ // mMonthRect->m_Date = QDate(2022, 4, 22); // mMonthRect->m_SelectRect = mMonthRect; // QPainter pa(mMonthWidget); // mMonthRect->paintItem(&pa, QRect(), true); //} //TEST_F(test_monthdayview, setDevicePixelRatio_01) //{ // mMonthRect->setDevicePixelRatio(10); // EXPECT_EQ(mMonthRect->m_DevicePixelRatio, 10); //} //TEST_F(test_monthdayview, setTheMe_01) //{ // mMonthRect->setTheMe(0); // EXPECT_EQ(mMonthRect->m_defaultTextColor, Qt::black); //} //TEST_F(test_monthdayview, setTheMe_02) //{ // mMonthRect->setTheMe(2); // EXPECT_EQ(mMonthRect->m_defaultTextColor, QColor("#C0C6D4")); //} test_monthdayview.h000066400000000000000000000011241523260663500371720ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHDAYVIEW_H #define TEST_MONTHDAYVIEW_H #include //#include "monthWidget/monthdayview.h" //#include "gtest/gtest.h" //class test_monthdayview : public QObject // , public ::testing::Test //{ //public: // test_monthdayview(); // ~test_monthdayview(); //protected: // CMonthDayView *mMonthDayView = nullptr; // CMonthWidget *mMonthWidget = nullptr; // CMonthRect *mMonthRect = nullptr; //}; #endif // TEST_MONTHDAYVIEW_H test_monthscheduleview.cpp000066400000000000000000000331611523260663500405520ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthscheduleview.h" #include "dataManage/scheduledaterangeinfo.h" //test_monthscheduleview::test_monthscheduleview() //{ // QRect rect; // m_scene = new QGraphicsScene(); // mMonthScheduleView = new CMonthScheduleView(nullptr, m_scene); // mMonthScheduleWidgetItem = new CMonthScheduleItem(rect); // mWeekScheduleView = new CWeekScheduleView(); // mMonthScheduleNumButton = new CMonthScheduleNumItem(); //} //test_monthscheduleview::~test_monthscheduleview() //{ // delete mMonthScheduleView; // mMonthScheduleView = nullptr; // delete m_scene; // m_scene = nullptr; // delete mWeekScheduleView; // mWeekScheduleView = nullptr; // delete mMonthScheduleNumButton; // mMonthScheduleNumButton = nullptr; // delete mMonthScheduleWidgetItem; // mMonthScheduleWidgetItem = nullptr; //} //QVector getMonthScheduleDInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(currentDateTime.addDays(2)); // schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); // schedule3.setTitleName("scheduleThree"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(currentDateTime.addDays(3)); // schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); // schedule4.setTitleName("scheduleFour"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(currentDateTime.addDays(4)); // schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); // schedule5.setTitleName("scheduleFive"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); // scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); // scheduleFes.setTitleName("scheduleFestival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} //QMap> getMonthMapScheduleDInfo(int getDays) //{ // QDate currentDate = QDate::currentDate(); // QVector scheduleInfo {}; // QMap> scheduleDateInfo {}; // switch (getDays) { // case 0: { // scheduleInfo.append(getMonthScheduleDInfo().at(0)); // scheduleDateInfo[currentDate] = scheduleInfo; // } break; // case 1: { // scheduleInfo.append(getMonthScheduleDInfo().at(1)); // scheduleDateInfo[currentDate.addDays(1)] = scheduleInfo; // } break; // case 2: { // scheduleInfo.append(getMonthScheduleDInfo().at(2)); // scheduleDateInfo[currentDate.addDays(2)] = scheduleInfo; // } break; // default: { // scheduleInfo.append(getMonthScheduleDInfo().at(3)); // scheduleDateInfo[currentDate.addDays(3)] = scheduleInfo; // scheduleInfo.append(getMonthScheduleDInfo().at(4)); // scheduleDateInfo[currentDate.addDays(4)] = scheduleInfo; // scheduleInfo.append(getMonthScheduleDInfo().at(5)); // scheduleDateInfo[currentDate.addDays(5)] = scheduleInfo; // } break; // } // return scheduleDateInfo; //} //QVector getScheduleDateRangeInfo() //{ // QVector scheduleDateRangeInfo {}; // MScheduleDateRangeInfo scheduledaterangeinfo1; // scheduledaterangeinfo1.num = 4; // scheduledaterangeinfo1.bdate = QDate::currentDate(); // scheduledaterangeinfo1.edate = QDate::currentDate().addDays(1); // scheduledaterangeinfo1.state = true; // scheduledaterangeinfo1.tData = getMonthScheduleDInfo().first(); // // MScheduleDateRangeInfo scheduledaterangeinfo2; // // scheduledaterangeinfo2.num = 2; // // scheduledaterangeinfo2.bDate = QDate(2021, 1, 23); // // scheduledaterangeinfo2.eDate = QDate(2021, 1, 24); // // scheduledaterangeinfo2.state = false; // // scheduledaterangeinfo2.tData = getMonthScheduleDInfo().at(1); // // MScheduleDateRangeInfo scheduledaterangeinfo3; // // scheduledaterangeinfo3.num = 2; // // scheduledaterangeinfo3.bDate = QDate(2021, 1, 25); // // scheduledaterangeinfo3.eDate = QDate(2021, 1, 26); // // scheduledaterangeinfo3.state = false; // // scheduledaterangeinfo3.tData = getMonthScheduleDInfo().at(2); // // MScheduleDateRangeInfo scheduledaterangeinfo4; // // scheduledaterangeinfo4.num = 2; // // scheduledaterangeinfo4.bDate = QDate(2021, 1, 27); // // scheduledaterangeinfo4.eDate = QDate(2021, 1, 28); // // scheduledaterangeinfo4.state = false; // // scheduledaterangeinfo4.tData = getMonthScheduleDInfo().at(3); // scheduleDateRangeInfo.append(scheduledaterangeinfo1); // // scheduleDateRangeInfo.append(scheduledaterangeinfo2); // // scheduleDateRangeInfo.append(scheduledaterangeinfo3); // // scheduleDateRangeInfo.append(scheduledaterangeinfo4); // return scheduleDateRangeInfo; //} ////void CMonthScheduleView::setallsize(int w, int h, int left, int top, int buttom, int itemHeight) //TEST_F(test_monthscheduleview, setallsize) //{ // mMonthScheduleView->setallsize(1, 1, 1, 1, 1, 1); //} ////void CMonthScheduleView::setData(QMap > &data, int currentMonth) //TEST_F(test_monthscheduleview, setData) //{ // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // mMonthScheduleView->setData(mapScheduleInfo, 1); //} ////void CMonthScheduleView::slotFontChange() //TEST_F(test_monthscheduleview, slotFontChange) //{ // mMonthScheduleView->slotFontChange(); //} ////void CMonthScheduleView::updateData() //TEST_F(test_monthscheduleview, updateDate) //{ // mMonthScheduleView->updateData(); //} ////void CMonthScheduleView::updateHeight() //TEST_F(test_monthscheduleview, updateHeight) //{ // mMonthScheduleView->updateHeight(); //} ////QVector CMonthScheduleView::getScheduleShowItem() const //TEST_F(test_monthscheduleview, getScheduleShowItem) //{ // mMonthScheduleView->getScheduleShowItem(); //} ////void CMonthScheduleView::updateDate(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, updateData) //{ // mMonthScheduleView->updateDate(getMonthScheduleDInfo().first()); //} ////void CMonthScheduleView::changeDate(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, changeDate) //{ // mMonthScheduleView->changeDate(getMonthScheduleDInfo().first()); //} ////void CMonthScheduleView::updateDate(const int row, const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, updatedate) //{ // mMonthScheduleView->updateDate(2, getMonthScheduleDInfo().first()); //} ////void CMonthScheduleView::updateDateShow(QVector> &vCMDaySchedule, QVector &scheduleShowItem) //TEST_F(test_monthscheduleview, updateDateShow) //{ // QVector scheduleinfo = getScheduleDateRangeInfo(); // QVector> m_scheduledaterangeinfo {}; // QVector m_scheduleshowinfo {}; // m_scheduledaterangeinfo.append(scheduleinfo); // m_scheduleshowinfo.append(mMonthScheduleWidgetItem); // mMonthScheduleView->updateDateShow(m_scheduledaterangeinfo, m_scheduleshowinfo); //} ////void CMonthScheduleView::createScheduleItemWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) //TEST_F(test_monthscheduleview, createScheduleItemWidget) //{ // QVector scheduledaterangeinfo = getScheduleDateRangeInfo(); // QVector m_scheduleshowinfo {}; // m_scheduleshowinfo.append(mMonthScheduleWidgetItem); // mMonthScheduleView->createScheduleItemWidget(scheduledaterangeinfo.first(), 1, m_scheduleshowinfo); //} ////void CMonthScheduleView::createScheduleNumWidget(MScheduleDateRangeInfo info, int cNum, QVector &scheduleShowItem) //TEST_F(test_monthscheduleview, createScheduleNumWidget) //{ // MScheduleDateRangeInfo scheduledaterangeinfo = getScheduleDateRangeInfo().first(); // QVector m_scheduleshowinfo {}; // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // mMonthScheduleView->setData(mapScheduleInfo, 3); // mMonthScheduleView->createScheduleNumWidget(scheduledaterangeinfo, 2, m_scheduleshowinfo); //} ////void CMonthScheduleView::computePos(int cnum, QDate bgeindate, QDate enddate, QPoint &pos, int &fw, int &fh) //TEST_F(test_monthscheduleview, computePos) //{ // QDate bDate = QDate(2020, 1, 20); // QDate eDate = QDate(2021, 1, 23); // QPoint pos = QPoint(4, 4); // int fw = 8; // int fh = 8; // mMonthScheduleView->computePos(2, bDate, eDate, pos, fw, fh); //} ////void CWeekScheduleView::setData(QMap > &data, const QDate &startDate, const QDate &stopDate) //TEST_F(test_monthscheduleview, setweekData) //{ // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // QDate startDate = QDate(2021, 1, 21); // QDate stopData = QDate(2021, 1, 27); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); //} ////bool CWeekScheduleView::addData(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, addData) //{ // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // QDate startDate = QDate::currentDate(); // QDate stopData = startDate.addDays(6); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); // bool re = mWeekScheduleView->addData(getMonthScheduleDInfo().first()); // EXPECT_TRUE(re); // startDate = QDate::currentDate().addDays(-7); // stopData = QDate::currentDate().addDays(-1); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); // re = mWeekScheduleView->addData(getMonthScheduleDInfo().first()); // EXPECT_FALSE(re); //} ////void CWeekScheduleView::changeDate(const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, changedate) //{ // mWeekScheduleView->changeDate(getMonthScheduleDInfo().first()); //} ////void CWeekScheduleView::setHeight(const int ScheduleHeight, const int DayHeigth) //TEST_F(test_monthscheduleview, setHeight) //{ // mWeekScheduleView->setHeight(10, 10); //} ////void CWeekScheduleView::updateSchedule(const bool isNormalDisplay, const ScheduleDataInfo &info) //TEST_F(test_monthscheduleview, updateSchedule) //{ // mWeekScheduleView->updateSchedule(true, getMonthScheduleDInfo().first()); // mWeekScheduleView->updateSchedule(false, getMonthScheduleDInfo().first()); //} ////void CWeekScheduleView::clearItem() //TEST_F(test_monthscheduleview, clearItem) //{ // mWeekScheduleView->clearItem(); //} ////void CWeekScheduleView::setMaxNum() //TEST_F(test_monthscheduleview, setMacNum) //{ // mWeekScheduleView->setMaxNum(); //} ////void CWeekScheduleView::mScheduleClear() //TEST_F(test_monthscheduleview, mScheduleClear) //{ // mWeekScheduleView->mScheduleClear(); //} ////void CWeekScheduleView::sortAndFilter(QVector &vMDaySchedule) //TEST_F(test_monthscheduleview, sortAndFileter) //{ // QVector scheduleinfo = getScheduleDateRangeInfo(); // mWeekScheduleView->setHeight(4, 20); // QMap> mapScheduleInfo = getMonthMapScheduleDInfo(4); // QDate startDate = QDate::currentDate(); // QDate stopData = startDate.addDays(6); // mWeekScheduleView->setData(mapScheduleInfo, startDate, stopData); // mWeekScheduleView->sortAndFilter(scheduleinfo); //} ////void CMonthScheduleNumButton::setColor(QColor color1, QColor color2, bool GradientFlag) //TEST_F(test_monthscheduleview, setColor) //{ // QColor color1(100, 100, 255); // QColor color2(200, 200, 255); // mMonthScheduleNumButton->setColor(color1, color2); //} ////void CMonthScheduleNumButton::setText(QColor tcolor, QFont font, QPoint pos) //TEST_F(test_monthscheduleview, setText) //{ // QColor color(100, 100, 255); // QFont font; // mMonthScheduleNumButton->setText(color, font); //} ////void CMonthScheduleNumButton::setSizeType(DFontSizeManager::SizeType sizeType) //TEST_F(test_monthscheduleview, setSizeType) //{ // mMonthScheduleNumButton->setSizeType(DFontSizeManager::SizeType::T1); //} ////QPixmap CMonthScheduleWidgetItem::getPixmap() //TEST_F(test_monthscheduleview, getPixmap) //{ // mMonthScheduleWidgetItem->getPixmap(); //} test_monthscheduleview.h000066400000000000000000000015531523260663500402170ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHSCHEDULEVIEW_H #define TEST_MONTHSCHEDULEVIEW_H #include //#include "monthWidget/monthscheduleview.h" //#include "graphicsItem/cmonthscheduleitem.h" //#include "graphicsItem/cmonthschedulenumitem.h" //#include "gtest/gtest.h" //class test_monthscheduleview : public QObject // , public ::testing::Test //{ //public: // test_monthscheduleview(); // ~test_monthscheduleview(); //protected: // CMonthScheduleView *mMonthScheduleView = nullptr; // CMonthScheduleItem *mMonthScheduleWidgetItem = nullptr; // CWeekScheduleView *mWeekScheduleView = nullptr; // CMonthScheduleNumItem *mMonthScheduleNumButton = nullptr; // QGraphicsScene *m_scene = nullptr; //}; #endif // TEST_MONTHSCHEDULEVIEW_H test_monthview.cpp000066400000000000000000000147651523260663500370460ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthview.h" //test_monthview::test_monthview() //{ // mMonthView = new CMonthView(); //} //test_monthview::~test_monthview() //{ // delete mMonthView; // mMonthView = nullptr; //} //QVector getMonthViewScheduleDInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // QDateTime currentDateTime = QDateTime::currentDateTime(); // schedule1.setID(1); // schedule1.setBeginDateTime(currentDateTime); // schedule1.setEndDateTime(currentDateTime.addDays(1)); // schedule1.setTitleName("scheduleOne"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(currentDateTime.addDays(1)); // schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); // schedule2.setTitleName("scheduleTwo"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(currentDateTime.addDays(2)); // schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); // schedule3.setTitleName("scheduleThree"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(currentDateTime.addDays(3)); // schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); // schedule4.setTitleName("scheduleFour"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(currentDateTime.addDays(4)); // schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); // schedule5.setTitleName("scheduleFive"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); // scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); // scheduleFes.setTitleName("scheduleFestival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} //QVector MonthviewGetDayList() //{ // QVector dateList {}; // QDate currentDate = QDate::currentDate(); // for (int i = 0; i < 42; i++) { // dateList.append(currentDate.addDays(i)); // } // return dateList; //} //QMap MonthViewGetHuangLiDayInfo() //{ // QMap huangLiDayinfo {}; // CaHuangLiDayInfo huangLiInfo1 {}; // huangLiInfo1.mGanZhiYear = "辛丑牛年"; //年干支 // huangLiInfo1.mGanZhiMonth = "庚寅月"; //月干支 // huangLiInfo1.mGanZhiDay = "è¾›å�¯æ—¥"; //日干支 // huangLiInfo1.mLunarMonthName = "正月"; //农历月å��ç§° // huangLiInfo1.mLunarDayName = "åˆ�一"; //农历日å��ç§° // huangLiInfo1.mLunarLeapMonth = 4; //闰月 // huangLiInfo1.mZodiac = "牛"; //生肖 // huangLiInfo1.mTerm = ""; //农历节气 // huangLiInfo1.mSolarFestival = "国庆节"; //阳历节日 // huangLiInfo1.mLunarFestival = "除夕"; //农历节日 // huangLiInfo1.mSuit = "å«�娶"; //黄历宜 // huangLiInfo1.mAvoid = "入土"; //黄历忌 // huangLiDayinfo.insert(QDate::currentDate(), huangLiInfo1); // return huangLiDayinfo; //} ////void CMonthView::setTheMe(int type) //TEST_F(test_monthview, setTheMe) //{ // mMonthView->setTheMe(1); // mMonthView->setTheMe(2); //} ////void CMonthView::setSelectSchedule(const ScheduleDataInfo &scheduleInfo) //TEST_F(test_monthview, setSelectSchedule) //{ // ScheduleDataInfo scheduleinfo = getMonthViewScheduleDInfo().first(); // mMonthView->setSelectSchedule(scheduleinfo); //} ////void CMonthView::slotScheduleRemindWidget(const bool isShow, const ScheduleDataInfo &out) //TEST_F(test_monthview, slotScheduleRemindWidget) //{ // ScheduleDataInfo scheduleinfo = getMonthViewScheduleDInfo().first(); // mMonthView->slotScheduleRemindWidget(false, scheduleinfo); // mMonthView->slotScheduleRemindWidget(true, scheduleinfo); //} ////void CMonthView::setFirstWeekday(Qt::DayOfWeek weekday) //TEST_F(test_monthview, setFirstWeekday) //{ // mMonthView->setFirstWeekday(Qt::Sunday); //} ////void CMonthView::setShowDate(const QVector &showDate) //TEST_F(test_monthview, setShowDate) //{ // mMonthView->setShowDate(MonthviewGetDayList()); //} ////void CMonthView::setHuangLiInfo(const QMap &huangLiInfo) //TEST_F(test_monthview, setHuangLiInfo) //{ // mMonthView->setHuangLiInfo(MonthViewGetHuangLiDayInfo()); //} ////void CMonthView::setFestival(const QMap &festivalInfo) //TEST_F(test_monthview, setFestival) //{ // QMap festivalInfo {}; // festivalInfo.insert(QDate::currentDate(), 1); // festivalInfo.insert(QDate::currentDate().addDays(1), 2); // mMonthView->setFestival(festivalInfo); //} ////void CMonthView::setScheduleInfo(const QMap > &scheduleInfo) //TEST_F(test_monthview, setScheduleInfo) //{ // QMap> scheduleinfo {}; // scheduleinfo.insert(QDate::currentDate(), getMonthViewScheduleDInfo()); // mMonthView->setScheduleInfo(scheduleinfo); //} ////void CMonthView::setSearchScheduleInfo(const QVector &searchScheduleInfo) //TEST_F(test_monthview, setSearchScheduleInfo) //{ // mMonthView->setSearchScheduleInfo(getMonthViewScheduleDInfo()); //} ////void CMonthView::setCurrentDate(const QDate ¤tDate) //TEST_F(test_monthview, setCurrentDate) //{ // mMonthView->setCurrentDate(QDate::currentDate()); //} ////ScheduleDataInfo CMonthView::getScheduleInfo(const QDate &beginDate, const QDate &endDate) //TEST_F(test_monthview, getScheduleInfo) //{ // QDate currentDate = QDate::currentDate(); // QDate currentDate1 = QDate::currentDate().addDays(1); // mMonthView->getScheduleInfo(currentDate, currentDate1); // mMonthView->getScheduleInfo(currentDate1, currentDate); //} //TEST_F(test_monthview, isDragging) //{ // mMonthView->isDragging(); //} test_monthview.h000066400000000000000000000007431523260663500365020ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHVIEW_H #define TEST_MONTHVIEW_H #include #include "gtest/gtest.h" //#include "monthWidget/monthview.h" //class test_monthview : public QObject // , public ::testing::Test //{ //public: // test_monthview(); // ~test_monthview(); //protected: // CMonthView *mMonthView = nullptr; //}; #endif // TEST_MONTHVIEW_H test_monthweekview.cpp000066400000000000000000000036511523260663500377120ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_monthweekview.h" #include #include //test_monthweekview::test_monthweekview() //{ // mMonthWeekView = new CMonthWeekView(); // mWeekRect = new WeekRect(); //} //test_monthweekview::~test_monthweekview() //{ // delete mMonthWeekView; // mMonthWeekView = nullptr; // delete mWeekRect; // mWeekRect = nullptr; //} ////void CMonthWeekView::setFirstDay(const Qt::DayOfWeek weekday) //TEST_F(test_monthweekview, setFirstDay) //{ // mMonthWeekView->setFirstDay(static_cast(QDate::currentDate().dayOfWeek())); // mMonthWeekView->setFirstDay(static_cast(QDate::currentDate().addDays(1).dayOfWeek())); //} ////void CMonthWeekView::setTheMe(int type) //TEST_F(test_monthweekview, setTheMe) //{ // mMonthWeekView->setTheMe(1); // mMonthWeekView->setTheMe(2); //} ////void CMonthWeekView::setCurrentDate(const QDate ¤tDate) //TEST_F(test_monthweekview, setCurrentDate) //{ // mMonthWeekView->setCurrentDate(QDate::currentDate()); //} //TEST_F(test_monthweekview, paintEvent_01) //{ // QPaintEvent e(QRect(0, 0, 1, 1)); // mMonthWeekView->paintEvent(&e); //} ////void WeekRect::setWeek(const Qt::DayOfWeek &showWeek, const bool &showLine) //TEST_F(test_monthweekview, setWeek) //{ // mWeekRect->setWeek(Qt::Sunday, false); //} ////void WeekRect::setRect(const QRectF &rectF) //TEST_F(test_monthweekview, setRect) //{ // mWeekRect->setRect(QRectF()); //} ////void WeekRect::setTheMe(int type) //TEST_F(test_monthweekview, setRectTheMe_01) //{ // mWeekRect->setTheMe(1); // EXPECT_EQ(mWeekRect->m_testColor, QColor("#6F6F6F")); //} ////void WeekRect::setTheMe(int type) //TEST_F(test_monthweekview, setRectTheMe_02) //{ // mWeekRect->setTheMe(3); // EXPECT_EQ(mWeekRect->m_testColor, QColor("#C0C6D4")); //} test_monthweekview.h000066400000000000000000000010561523260663500373540ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHWEEKVIEW_H #define TEST_MONTHWEEKVIEW_H #include //#include "monthWidget/monthweekview.h" //#include "gtest/gtest.h" //class test_monthweekview : public QObject // , public ::testing::Test //{ //public: // test_monthweekview(); // ~test_monthweekview(); //protected: // CMonthWeekView *mMonthWeekView = nullptr; // WeekRect *mWeekRect = nullptr; //}; #endif // TEST_MONTHWEEKVIEW_H test_monthwindow.cpp000066400000000000000000000035131523260663500373700ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "test_monthwindow.h" //#include "../third-party_stub/stub.h" //#include "monthWidget/monthview.h" //test_monthWindow::test_monthWindow() //{ //} //void test_monthWindow::SetUp() //{ // m_monthWindow = new CMonthWindow(nullptr); //} //void test_monthWindow::TearDown() //{ // delete m_monthWindow; // m_monthWindow = nullptr; //} //TEST_F(test_monthWindow, setTheMe) //{ // m_monthWindow->setTheMe(0); // m_monthWindow->setTheMe(1); // m_monthWindow->setTheMe(2); //} //namespace MonthWindow { //void deleteselectschedule_Stub(void *obj) //{ // Q_UNUSED(obj) //} //} // namespace MonthWindow //TEST_F(test_monthWindow, deleteselectSchedule) //{ // Stub stub; // stub.set(ADDR(CMonthView, deleteSelectSchedule), MonthWindow::deleteselectschedule_Stub); // m_monthWindow->deleteselectSchedule(); //} //TEST_F(test_monthWindow, previousMonth) //{ // QDate currentDate = QDate::currentDate(); // m_monthWindow->setSelectDate(currentDate); // m_monthWindow->previousMonth(); // ASSERT_EQ(m_monthWindow->getSelectDate(), currentDate.addMonths(1)); //} //TEST_F(test_monthWindow, nextMonth) //{ // QDate currentDate = QDate::currentDate(); // m_monthWindow->setSelectDate(currentDate); // m_monthWindow->nextMonth(); // ASSERT_EQ(m_monthWindow->getSelectDate(), currentDate.addMonths(-1)); //} //TEST_F(test_monthWindow, slotViewSelectDate) //{ // QDate currentDate = QDate::currentDate(); // m_monthWindow->slotViewSelectDate(currentDate); //} //TEST_F(test_monthWindow, resizeEvent) //{ // m_monthWindow->setFixedSize(500, 300); // m_monthWindow->setFixedSize(600, 400); //} //TEST_F(test_monthWindow, slottoday) //{ // m_monthWindow->slottoday(); //} test_monthwindow.h000066400000000000000000000010601523260663500370300ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_monthWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_MONTHWINDOW_H #define TEST_MONTHWINDOW_H #include "gtest/gtest.h" //#include "monthWidget/monthwindow.h" //#include //class test_monthWindow : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // explicit test_monthWindow(); // void SetUp() override; // void TearDown() override; //public: // CMonthWindow *m_monthWindow {nullptr}; //}; #endif // TEST_MONTHWINDOW_H test_schedulesearchview.cpp000066400000000000000000000323461523260663500353460ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_schedulesearchview.h" #include "../third-party_stub/stub.h" #include "../calendar-basicstruct/src/utils.h" #include "../third-party_stub/addr_pri.h" #include "scheduleTask/cscheduledbus.h" #include "scheduleTask/scheduletask.h" #include "constants.h" #include "../testscheduledata.h" #include "../dialog_stub.h" #include QVector getScheduleDInfo() { QVector scheduleDate {}; ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addSecs(60 * 60)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(true); schedule2.setType(2); schedule2.setRecurID(0); schedule3.setID(3); schedule3.setBeginDateTime(currentDateTime.addDays(2)); schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); schedule3.setTitleName("scheduleThree"); schedule3.setAllDay(false); schedule3.setType(3); schedule3.setRecurID(0); schedule4.setID(4); schedule4.setBeginDateTime(currentDateTime.addDays(3)); schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); schedule4.setTitleName("scheduleFour"); schedule4.setAllDay(false); schedule4.setType(1); schedule4.setRecurID(0); schedule5.setID(5); schedule5.setBeginDateTime(currentDateTime.addDays(4)); schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); schedule5.setTitleName("scheduleFive"); schedule5.setAllDay(false); schedule5.setType(2); schedule5.setRecurID(0); scheduleFes.setID(6); scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); scheduleFes.setTitleName("scheduleFestival"); scheduleFes.setAllDay(true); scheduleFes.setType(4); scheduleFes.setRecurID(0); scheduleDate.append(schedule1); scheduleDate.append(schedule2); scheduleDate.append(schedule3); scheduleDate.append(schedule4); scheduleDate.append(schedule5); scheduleDate.append(scheduleFes); return scheduleDate; } QMap> getMapScheduleDInfo(int getDays) { QDate currentDate = QDate::currentDate(); QVector scheduleInfo {}; QMap> scheduleDateInof {}; switch (getDays) { case 0: { scheduleInfo.append(getScheduleDInfo().at(0)); scheduleDateInof[currentDate] = scheduleInfo; } break; case 1: { scheduleInfo.append(getScheduleDInfo().at(1)); scheduleDateInof[currentDate.addDays(1)] = scheduleInfo; } break; case 2: { scheduleInfo.append(getScheduleDInfo().at(2)); scheduleDateInof[currentDate.addDays(2)] = scheduleInfo; } break; default: { scheduleInfo.append(getScheduleDInfo().at(3)); scheduleDateInof[currentDate.addDays(3)] = scheduleInfo; scheduleInfo.append(getScheduleDInfo().at(4)); scheduleDateInof[currentDate.addDays(4)] = scheduleInfo; scheduleInfo.append(getScheduleDInfo().at(5)); scheduleDateInof[currentDate.addDays(5)] = scheduleInfo; } break; } return scheduleDateInof; } bool stub_QueryJobs(const QString &key, QDateTime starttime, QDateTime endtime, QMap> &out) { Q_UNUSED(key); int days = static_cast(starttime.daysTo(endtime)); switch (days) { case 0: { out = getMapScheduleDInfo(0); } break; case 1: { out = getMapScheduleDInfo(1); } break; case 2: { out = getMapScheduleDInfo(2); } break; default: { out = getMapScheduleDInfo(days); } break; } return true; } static QAction* schedulesearchview_stub_QMenu_exec() { return nullptr; } test_schedulesearchview::test_schedulesearchview() { } test_schedulesearchview::~test_schedulesearchview() { } void test_schedulesearchview::SetUp() { mScheduleSearchView = new CScheduleSearchView(); mScheduleSearchDateItem = new CScheduleSearchDateItem(); mScheduleListWidget = new CScheduleListWidget(); mScheduleSearchItem = new CScheduleSearchItem(); } void test_schedulesearchview::TearDown() { delete mScheduleSearchView; mScheduleSearchView = nullptr; delete mScheduleSearchDateItem; mScheduleSearchDateItem = nullptr; delete mScheduleListWidget; mScheduleListWidget = nullptr; delete mScheduleSearchItem; mScheduleSearchItem = nullptr; } //void CScheduleSearchView::setTheMe(int type) TEST_F(test_schedulesearchview, setTheMe) { int type = 1; mScheduleSearchView->setTheMe(type); type = 2; mScheduleSearchView->setTheMe(type); } //void CScheduleSearchView::clearSearch() TEST_F(test_schedulesearchview, clearSearch) { ScheduleDataInfo schedule1; schedule1.setID(1); schedule1.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(0, 0, 0))); schedule1.setEndDateTime(QDateTime(QDate(2021, 1, 2), QTime(23, 59, 59))); schedule1.setTitleName("schedule test one"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); mScheduleSearchView->createItemWidget(schedule1, QDate(2021, 1, 1), 1); mScheduleSearchView->clearSearch(); } //void CScheduleSearchView::setMaxWidth(const int w) TEST_F(test_schedulesearchview, setMacWidth) { mScheduleSearchView->setMaxWidth(44); } //void CScheduleSearchView::slotsetSearch() TEST_F(test_schedulesearchview, slotsetSearch) { // mScheduleSearchView->slotsetSearch("jie"); } //void CScheduleSearchView::createItemWidget(ScheduleDataInfo info, QDate date, int rtype) TEST_F(test_schedulesearchview, createItemWidget) { ScheduleDataInfo scheduleinof = getScheduleDInfo().first(); mScheduleSearchView->createItemWidget(scheduleinof, QDate::currentDate(), 3); } //QListWidgetItem *CScheduleSearchView::createItemWidget(QDate date) TEST_F(test_schedulesearchview, createItemWidgetDate) { mScheduleSearchView->createItemWidget(QDate::currentDate()); } //void CScheduleSearchView::slotSelectSchedule(const ScheduleDataInfo &scheduleInfo) TEST_F(test_schedulesearchview, slotSelectSchedule) { ScheduleDataInfo scheduleinof = getScheduleDInfo().first(); mScheduleSearchView->slotSelectSchedule(scheduleinof); } //void CScheduleSearchView::updateSearch() TEST_F(test_schedulesearchview, updateSearch) { mScheduleSearchView->updateSearch(); } //void CScheduleSearchDateItem::setBackgroundColor(QColor color1) TEST_F(test_schedulesearchview, setBachgroundColor) { QColor color1(240, 100, 100); mScheduleSearchDateItem->setBackgroundColor(color1); } //void CScheduleSearchDateItem::setText(QColor tcolor, QFont font) TEST_F(test_schedulesearchview, setText) { QColor color(240, 100, 100); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeTwelve); mScheduleSearchDateItem->setText(color, font); } //void CScheduleSearchDateItem::setDate(QDate date) TEST_F(test_schedulesearchview, setDate) { mScheduleSearchDateItem->setDate(QDate::currentDate()); } //void CScheduleSearchItem::setBackgroundColor(QColor color1) TEST_F(test_schedulesearchview, setBackGroundColor) { QColor color(240, 100, 100); mScheduleSearchItem->setBackgroundColor(color); } //void CScheduleSearchItem::setText(QColor tcolor, QFont font) TEST_F(test_schedulesearchview, setItemText) { QColor color(240, 100, 100); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeTwelve); mScheduleSearchItem->setText(color, font); } //void CScheduleSearchItem::setTimeC(QColor tcolor, QFont font) TEST_F(test_schedulesearchview, setTimeC) { QColor color(240, 100, 100); QFont font; font.setWeight(QFont::Medium); font.setPixelSize(DDECalendar::FontSizeTwelve); mScheduleSearchItem->setTimeC(color, font); } //void CScheduleSearchItem::setData(ScheduleDataInfo vScheduleInfo, QDate date) TEST_F(test_schedulesearchview, setItemDate) { ScheduleDataInfo scheduleinfo = getScheduleDInfo().first(); mScheduleSearchItem->setData(scheduleinfo, QDate::currentDate()); } //void CScheduleSearchItem::setRoundtype(int rtype) TEST_F(test_schedulesearchview, setRoundtype) { mScheduleSearchItem->setRoundtype(3); mScheduleSearchItem->setRoundtype(2); } //void CScheduleSearchItem::setTheMe(int type) TEST_F(test_schedulesearchview, setItemTheMe) { mScheduleSearchItem->setTheMe(1); mScheduleSearchItem->setTheMe(2); } //void CScheduleSearchItem::slotEdit() TEST_F(test_schedulesearchview, slotEdit_01) { Stub stub; calendarDDialogExecStub(stub); ScheduleDataInfo scheduleinfo = getScheduleDInfo().first(); CScheduleSearchItem item; item.setData(scheduleinfo, QDate::currentDate()); item.slotEdit(); } //void CScheduleSearchItem::slotDelete() TEST_F(test_schedulesearchview, slotDelete_01) { Stub stub; calendarDDialogExecStub(stub); ScheduleDataInfo scheduleinfo = getScheduleDInfo().first(); CScheduleSearchItem item; item.setData(scheduleinfo, QDate::currentDate()); item.slotDelete(); } TEST_F(test_schedulesearchview, slotTimeFormatChanged_01) { mScheduleSearchItem->slotTimeFormatChanged(1); EXPECT_EQ(mScheduleSearchItem->m_timeFormat, "hh:mm"); } TEST_F(test_schedulesearchview, slotTimeFormatChanged_02) { mScheduleSearchItem->slotTimeFormatChanged(0); EXPECT_EQ(mScheduleSearchItem->m_timeFormat, "h:mm"); } TEST_F(test_schedulesearchview, slotSchotCutClicked_01) { Stub stub; stub.set((QAction*(QMenu::*)(const QPoint &, QAction *))ADDR(QMenu, exec), schedulesearchview_stub_QMenu_exec); CScheduleSearchItem item; item.slotSchotCutClicked(); } TEST_F(test_schedulesearchview, contextMenuEvent_01) { Stub stub; stub.set((QAction*(QMenu::*)(const QPoint &, QAction *))ADDR(QMenu, exec), schedulesearchview_stub_QMenu_exec); CScheduleSearchItem item; QContextMenuEvent event(QContextMenuEvent::Mouse, QPoint()); item.contextMenuEvent(&event); } TEST_F(test_schedulesearchview, mouseDoubleClickEvent_01) { Stub stub; calendarDDialogExecStub(stub); CScheduleSearchItem item; QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); item.mouseDoubleClickEvent(&event); } TEST_F(test_schedulesearchview, mousePressEvent_01) { CScheduleSearchItem item; QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); item.mousePressEvent(&event); EXPECT_FALSE(item.m_tabFocus); } TEST_F(test_schedulesearchview, mouseReleaseEvent_01) { CScheduleSearchItem item; QMouseEvent event(QEvent::MouseButtonDblClick, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); item.mouseReleaseEvent(&event); EXPECT_EQ(item.m_mouseStatus, CScheduleSearchItem::M_HOVER); } TEST_F(test_schedulesearchview, enterEvent_01) { CScheduleSearchItem item; QEvent event(QEvent::Enter); item.enterEvent(&event); EXPECT_EQ(item.m_mouseStatus, CScheduleSearchItem::M_HOVER); } TEST_F(test_schedulesearchview, focusOutEvent_01) { CScheduleSearchItem item; QFocusEvent event(QEvent::FocusOut, Qt::TabFocusReason); item.focusOutEvent(&event); } TEST_F(test_schedulesearchview, focusInEvent_01) { CScheduleSearchItem item; QFocusEvent event(QEvent::FocusIn, Qt::TabFocusReason); item.focusInEvent(&event); } TEST_F(test_schedulesearchview, keyPressEvent_01) { Stub stub; calendarDDialogExecStub(stub); CScheduleSearchItem item; QKeyEvent event(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); item.keyPressEvent(&event); } TEST_F(test_schedulesearchview, keyPressEvent_02) { CScheduleSearchItem item; QKeyEvent event(QEvent::KeyPress, Qt::Key_M, Qt::AltModifier); item.keyPressEvent(&event); } //const ScheduleDataInfo &getData() const TEST_F(test_schedulesearchview, getDate) { mScheduleSearchItem->getData(); } QMap> stub_getSearchScheduleInfo(void *obj, const QString &key, const QDateTime &startTime, const QDateTime &endTime) { Q_UNUSED(obj) Q_UNUSED(key) Q_UNUSED(startTime) Q_UNUSED(endTime) QMap> searchScheduleInfo {}; searchScheduleInfo[QDate::currentDate()] = TestDataInfo::getScheduleItemDInfo(); return searchScheduleInfo; } // TEST_F(test_schedulesearchview, getPixmap) { Stub stub; stub.set((QMap>(CScheduleTask::*)(const QString &, const QDateTime &, const QDateTime &))ADDR(CScheduleTask, getSearchScheduleInfo), stub_getSearchScheduleInfo); mScheduleSearchView->slotsetSearch("xjrc"); mScheduleSearchView->setFixedSize(300, 800); QPixmap pixmap(mScheduleListWidget->size()); pixmap = mScheduleSearchView->grab(); } test_schedulesearchview.h000066400000000000000000000014041523260663500350020ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULESEARCHVIEW_H #define TEST_SCHEDULESEARCHVIEW_H #include "widget/schedulesearchview.h" #include "gtest/gtest.h" #include class test_schedulesearchview : public QObject , public ::testing::Test { public: test_schedulesearchview(); ~test_schedulesearchview(); void SetUp() override; void TearDown() override; protected: CScheduleSearchView *mScheduleSearchView = nullptr; CScheduleSearchDateItem *mScheduleSearchDateItem = nullptr; CScheduleListWidget *mScheduleListWidget = nullptr; CScheduleSearchItem *mScheduleSearchItem = nullptr; }; #endif // TEST_SCHEDULESEARCHVIEW_H test_touchgestureoperation.cpp000066400000000000000000000035101523260663500361220ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_touchgestureoperation.h" test_touchgestureoperation::test_touchgestureoperation() { mTouchGestureOperation = new touchGestureOperation(); } test_touchgestureoperation::~test_touchgestureoperation() { delete mTouchGestureOperation; mTouchGestureOperation = nullptr; } //void touchGestureOperation::setUpdate(bool b) TEST_F(test_touchgestureoperation, setUpdate) { mTouchGestureOperation->setUpdate(true); } //bool touchGestureOperation::isUpdate() const TEST_F(test_touchgestureoperation, isUpdate) { mTouchGestureOperation->setUpdate(false); bool res = mTouchGestureOperation->isUpdate(); EXPECT_FALSE(res); mTouchGestureOperation->setUpdate(true); res = mTouchGestureOperation->isUpdate(); EXPECT_TRUE(res); } //touchGestureOperation::TouchState touchGestureOperation::getTouchState() const TEST_F(test_touchgestureoperation, getTouchState) { mTouchGestureOperation->getTouchState(); } //touchGestureOperation::TouchMovingDirection touchGestureOperation::getMovingDir() const TEST_F(test_touchgestureoperation, getMovingDir) { mTouchGestureOperation->getMovingDir(); } //touchGestureOperation::TouchMovingDirection touchGestureOperation::getTouchMovingDir(QPointF &startPoint, QPointF &stopPoint, qreal &movingLine) TEST_F(test_touchgestureoperation, getTouchMovingDir) { QPointF point1; QPointF point2; qreal num = 2; mTouchGestureOperation->getTouchMovingDir(point1, point2, num); } //void touchGestureOperation::calculateAzimuthAngle(QPointF &startPoint, QPointF &stopPoint) TEST_F(test_touchgestureoperation, calculateAzimuthAngle) { QPointF point1; QPointF point2; mTouchGestureOperation->calculateAzimuthAngle(point1, point2); } test_touchgestureoperation.h000066400000000000000000000010671523260663500355740ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_TOUCHGESTUREOPERATION_H #define TEST_TOUCHGESTUREOPERATION_H #include #include #include class test_touchgestureoperation : public ::QObject , public ::testing::Test { public: test_touchgestureoperation(); ~test_touchgestureoperation(); protected: touchGestureOperation *mTouchGestureOperation = nullptr; }; #endif // TEST_TOUCHGESTUREOPERATION_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget/000077500000000000000000000000001523260663500331335ustar00rootroot00000000000000test_weekheadview.cpp000066400000000000000000000065211523260663500372730ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_weekheadview.h" #include "../third-party_stub/stub.h" //test_weekheadview::test_weekheadview() //{ // mWeekHeadView = new CWeekHeadView(); //} //test_weekheadview::~test_weekheadview() //{ // delete mWeekHeadView; // mWeekHeadView = nullptr; //} //QMap getHuangLiDayInfo() //{ // QMap huangLiDayInfo {}; // CaHuangLiDayInfo huangLiInfo1 {}; // huangLiInfo1.mGanZhiYear = "辛丑牛年"; //年干支 // huangLiInfo1.mGanZhiMonth = "庚寅月"; //月干支 // huangLiInfo1.mGanZhiDay = "è¾›å�¯æ—¥"; //日干支 // huangLiInfo1.mLunarMonthName = "正月"; //农历月å��ç§° // huangLiInfo1.mLunarDayName = "åˆ�一"; //农历日å��ç§° // huangLiInfo1.mLunarLeapMonth = 4; //闰月 // huangLiInfo1.mZodiac = "牛"; //生肖 // huangLiInfo1.mTerm = ""; //农历节气 // huangLiInfo1.mSolarFestival = "国庆节"; //阳历节日 // huangLiInfo1.mLunarFestival = "除夕"; //农历节日 // huangLiInfo1.mSuit = "å«�娶"; //黄历宜 // huangLiInfo1.mAvoid = "入土"; //黄历忌 // huangLiDayInfo.insert(QDate::currentDate(), huangLiInfo1); // return huangLiDayInfo; //} //QVector getDayList() //{ // QVector dateList {}; // QDate currentDate = QDate::currentDate(); // dateList.append(currentDate); // dateList.append(currentDate.addDays(1)); // dateList.append(currentDate.addDays(2)); // dateList.append(currentDate.addDays(3)); // dateList.append(currentDate.addDays(4)); // dateList.append(currentDate.addDays(5)); // dateList.append(currentDate.addDays(6)); // return dateList; //} ////void CWeekHeadView::setTheMe(int type) //TEST_F(test_weekheadview, setTheMe) //{ // mWeekHeadView->setTheMe(1); // mWeekHeadView->setTheMe(2); //} ////void CWeekHeadView::setWeekDay(QVector vDays, const QDate &selectDate) //TEST_F(test_weekheadview, setWeekDay) //{ // QVector dateList {}; // dateList.append(getDayList().first()); // mWeekHeadView->setWeekDay(dateList, QDate::currentDate()); // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); //} ////void CWeekHeadView::setLunarVisible(bool visible) //TEST_F(test_weekheadview, setLunarvisible) //{ // mWeekHeadView->setLunarVisible(false); // mWeekHeadView->setLunarVisible(true); //} ////const QString CWeekHeadView::getCellDayNum(int pos) //TEST_F(test_weekheadview, getCellDayNum) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->getCellDayNum(4); //} ////const QDate CWeekHeadView::getCellDate(int pos) //TEST_F(test_weekheadview, getCellDate) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->getCellDate(4); //} ////const QString CWeekHeadView::getLunar(int pos) //TEST_F(test_weekheadview, getLunar) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->setHunagLiInfo(getHuangLiDayInfo()); // mWeekHeadView->getLunar(1); //} //TEST_F(test_weekheadview, getPixmap) //{ // mWeekHeadView->setWeekDay(getDayList(), QDate::currentDate()); // mWeekHeadView->setFixedSize(600, 80); // QPixmap pixmap(mWeekHeadView->size()); // mWeekHeadView->render(&pixmap); //} test_weekheadview.h000066400000000000000000000010011523260663500367240ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_WEEKHEADVIEW_H #define TEST_WEEKHEADVIEW_H //#include "weekWidget/weekheadview.h" //#include "gtest/gtest.h" //#include //class test_weekheadview : public QObject // , public ::testing::Test //{ //public: // test_weekheadview(); // ~test_weekheadview(); //protected: // CWeekHeadView *mWeekHeadView = nullptr; //}; #endif // TEST_WEEKHEADVIEW_H test_weekview.cpp000066400000000000000000000021201523260663500364400ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_weekview.h" //int getWeekNumOfYear(const QDate &date) //{ // Q_UNUSED(date); // return 4; //} //test_weekview::test_weekview() //{ // mWeekView = new CWeekView(&getWeekNumOfYear); //} //test_weekview::~test_weekview() //{ // delete mWeekView; // mWeekView = nullptr; //} ////void CWeekView::setSelectDate(const QDate date) //TEST_F(test_weekview, setSelectDate) //{ // mWeekView->setSelectDate(QDate::currentDate()); //} ////void CWeekView::setCurrent(const QDateTime &dateTime) //TEST_F(test_weekview, setCurrent) //{ // mWeekView->setCurrent(QDateTime::currentDateTime()); //} ////void CWeekView::setTheMe(int type) //TEST_F(test_weekview, setTheMe) //{ // mWeekView->setTheMe(1); // mWeekView->setTheMe(2); //} //TEST_F(test_weekview, getPixmap) //{ // mWeekView->setSelectDate(QDate::currentDate()); // mWeekView->setFixedSize(600, 50); // QPixmap pixmap(mWeekView->size()); // mWeekView->render(&pixmap); //} test_weekview.h000066400000000000000000000007351523260663500361170ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_WEEKVIEW_H #define TEST_WEEKVIEW_H //#include "weekWidget/weekview.h" //#include "gtest/gtest.h" //#include //class test_weekview : public QObject // , public ::testing::Test //{ //public: // test_weekview(); // ~test_weekview(); //protected: // CWeekView *mWeekView = nullptr; //}; #endif // TEST_WEEKVIEW_H test_weekwindow.cpp000066400000000000000000000027151523260663500370070ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_weekwindow.h" #include "../third-party_stub/stub.h" #include "customWidget/scheduleview.h" test_weekWindow::test_weekWindow() { } void test_weekWindow::SetUp() { m_weekWindow = new CWeekWindow(nullptr); } void test_weekWindow::TearDown() { delete m_weekWindow; m_weekWindow = nullptr; } TEST_F(test_weekWindow, setTheMe) { m_weekWindow->setTheMe(0); m_weekWindow->setTheMe(1); m_weekWindow->setTheMe(2); } TEST_F(test_weekWindow, updateHeight) { m_weekWindow->updateHeight(); } TEST_F(test_weekWindow, setTime) { QTime time = QTime::currentTime(); //定ä½�é�žå…¨å¤©æ˜¾ç¤ºä½�ç½® m_weekWindow->setTime(time); } TEST_F(test_weekWindow, setYearData) { m_weekWindow->setYearData(); } namespace WeekDeleteItem { void slotDeleteitem_Stub(void *obj) { Q_UNUSED(obj) } } // namespace WeekDeleteItem TEST_F(test_weekWindow, deleteselectSchedule) { Stub stub; stub.set(ADDR(CScheduleView, slotDeleteitem), WeekDeleteItem::slotDeleteitem_Stub); m_weekWindow->deleteselectSchedule(); } bool IsDragging_Stub(void *obj) { Q_UNUSED(obj) return false; } TEST_F(test_weekWindow, slotIsDragging) { Stub stub; stub.set(ADDR(CScheduleView, IsDragging), IsDragging_Stub); bool isDragging; m_weekWindow->slotIsDragging(isDragging); ASSERT_EQ(isDragging, false); } test_weekwindow.h000066400000000000000000000011021523260663500364410ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_weekWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_WEEKWINDOW_H #define TEST_WEEKWINDOW_H #include "gtest/gtest.h" //#include "weekWidget/weekwindow.h" //#include //class test_weekWindow : public QObject // , public ::testing::Test //{ // Q_OBJECT //public: // explicit test_weekWindow(); // void SetUp() override; // void TearDown() override; //signals: //public slots: //public: // CWeekWindow *m_weekWindow {nullptr}; //}; #endif // TEST_WEEKWINDOW_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget/000077500000000000000000000000001523260663500331405ustar00rootroot00000000000000test_yearscheduleview.cpp000066400000000000000000000277001523260663500402020ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_yearscheduleview.h" #include "../third-party_stub/stub.h" #include "constants.h" #include //test_yearscheduleview::test_yearscheduleview() //{ //} //test_yearscheduleview::~test_yearscheduleview() //{ //} //void test_yearscheduleview::SetUp() //{ // cYearScheduleView = new CYearScheduleView(); // zYearScheduleOutView = new CYearScheduleOutView(); //} //void test_yearscheduleview::TearDown() //{ // delete cYearScheduleView; // cYearScheduleView = nullptr; // delete zYearScheduleOutView; // zYearScheduleOutView = nullptr; //} //QVector test_yearscheduleview::getScheduleDataInfo() //{ // QVector scheduleDate {}; // ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; // schedule1.setID(1); // schedule1.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(0, 0, 0))); // schedule1.setEndDateTime(QDateTime(QDate(2021, 1, 2), QTime(23, 59, 59))); // schedule1.setTitleName("schedule test one"); // schedule1.setAllDay(true); // schedule1.setType(1); // schedule1.setRecurID(0); // schedule2.setID(2); // schedule2.setBeginDateTime(QDateTime(QDate(2021, 1, 3), QTime(0, 0, 0))); // schedule2.setEndDateTime(QDateTime(QDate(2021, 1, 5), QTime(23, 59, 59))); // schedule2.setTitleName("schedule test two"); // schedule2.setAllDay(true); // schedule2.setType(2); // schedule2.setRecurID(0); // schedule3.setID(3); // schedule3.setBeginDateTime(QDateTime(QDate(2021, 1, 6), QTime(5, 23, 40))); // schedule3.setEndDateTime(QDateTime(QDate(2021, 1, 9), QTime(6, 23, 40))); // schedule3.setTitleName("schedule test three"); // schedule3.setAllDay(false); // schedule3.setType(3); // schedule3.setRecurID(0); // schedule4.setID(4); // schedule4.setBeginDateTime(QDateTime(QDate(2021, 1, 10), QTime(7, 23, 40))); // schedule4.setEndDateTime(QDateTime(QDate(2021, 1, 14), QTime(8, 23, 40))); // schedule4.setTitleName("schedule test four"); // schedule4.setAllDay(false); // schedule4.setType(1); // schedule4.setRecurID(0); // schedule5.setID(5); // schedule5.setBeginDateTime(QDateTime(QDate(2021, 1, 15), QTime(9, 23, 40))); // schedule5.setEndDateTime(QDateTime(QDate(2021, 1, 20), QTime(10, 23, 40))); // schedule5.setTitleName("schedule test five"); // schedule5.setAllDay(false); // schedule5.setType(2); // schedule5.setRecurID(0); // scheduleFes.setID(6); // scheduleFes.setBeginDateTime(QDateTime(QDate(2021, 1, 21), QTime(0, 0, 0))); // scheduleFes.setEndDateTime(QDateTime(QDate(2021, 1, 21), QTime(23, 59, 59))); // scheduleFes.setTitleName("schedule test festival"); // scheduleFes.setAllDay(true); // scheduleFes.setType(4); // scheduleFes.setRecurID(0); // scheduleDate.append(schedule1); // scheduleDate.append(schedule2); // scheduleDate.append(schedule3); // scheduleDate.append(schedule4); // scheduleDate.append(schedule5); // scheduleDate.append(scheduleFes); // return scheduleDate; //} //QVector test_yearscheduleview::getScheduleDateAndTitle() //{ // QVector scheduleDate {}; // ScheduleDataInfo s11, s12; // s11.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s11.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s12.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s12.setEndDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // ScheduleDataInfo s21, s22; // s21.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s21.setEndDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s22.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s22.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s31, s32; // s31.setBeginDateTime(QDateTime(QDate(2020, 12, 30), QTime(16, 23, 40))); // s31.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s32.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s32.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s41, s42; // s41.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s41.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s42.setBeginDateTime(QDateTime(QDate(2020, 12, 30), QTime(16, 23, 40))); // s42.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s51, s52; // s51.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s51.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s51.setTitleName("ab"); // s52.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s52.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s52.setTitleName("ba"); // ScheduleDataInfo s61, s62; // s61.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s61.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s61.setTitleName("ba"); // s62.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s62.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s62.setTitleName("ab"); // ScheduleDataInfo s71, s72; // s71.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 2, 40))); // s71.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s72.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s72.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s81, s82; // s81.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s81.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s82.setBeginDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 2, 40))); // s82.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // ScheduleDataInfo s91, s92; // s91.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s91.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // s92.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // s92.setEndDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // ScheduleDataInfo sa1, sa2; // sa1.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // sa1.setEndDateTime(QDateTime(QDate(2021, 1, 1), QTime(16, 23, 40))); // sa2.setBeginDateTime(QDateTime(QDate(2020, 12, 31), QTime(16, 23, 40))); // sa2.setEndDateTime(QDateTime(QDate(2021, 12, 31), QTime(16, 23, 40))); // scheduleDate << s11 << s12 << s21 << s22 << s31 << s32 << s41 << s42 // << s51 << s52 << s61 << s62 << s71 << s72 << s81 << s82 // << s91 << s92 << sa1 << sa2; // return scheduleDate; //} ////bool YScheduleDateThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2) //bool YScheduleDateThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2); //TEST_F(test_yearscheduleview, yschesuledatethan) //{ // //bdate1 != edate1 && bdate2 == edate2 // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(0), getScheduleDateAndTitle().at(1))); // //bdate1 == edate1 && bdate2 != edate2 // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(2), getScheduleDateAndTitle().at(3))); // //bdate1 != edate1 && bdate2 != edate2 // //bdate1 < bdate2 // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(4), getScheduleDateAndTitle().at(5))); // //bdate1 != edate1 && bdate2 != edate2 // //bdate1 < bdate2 // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(6), getScheduleDateAndTitle().at(7))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getTitleName() < s2.getTitleName() // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(8), getScheduleDateAndTitle().at(9))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getBeginDateTime() == s2.getBeginDateTime() // //s1.getTitleName() < s2.getTitleName() // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(10), getScheduleDateAndTitle().at(11))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getBeginDateTime() != s2.getBeginDateTime() // //s1.getBeginDateTime() < s2.getBeginDateTime() // EXPECT_TRUE(YScheduleDateThan(getScheduleDateAndTitle().at(12), getScheduleDateAndTitle().at(13))); // //bdate1 = edate1 && bdate2 = edate2 // //s1.getBeginDateTime() != s2.getBeginDateTime() // //s1.getBeginDateTime() < s2.getBeginDateTime() // EXPECT_FALSE(YScheduleDateThan(getScheduleDateAndTitle().at(14), getScheduleDateAndTitle().at(15))); //} ////bool YScheduleDaysThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2) //bool YScheduleDaysThan(const ScheduleDataInfo &s1, const ScheduleDataInfo &s2); //TEST_F(test_yearscheduleview, yscheduleDaysThan) //{ // //s1.getBeginDateTime().date().daysTo(s1.getEndDateTime().date()) > s2.getBeginDateTime().date().daysTo(s2.getEndDateTime().date()) // EXPECT_TRUE(YScheduleDaysThan(getScheduleDateAndTitle().at(16), getScheduleDateAndTitle().at(17))); // //s1.getBeginDateTime().date().daysTo(s1.getEndDateTime().date()) > s2.getBeginDateTime().date().daysTo(s2.getEndDateTime().date()) // EXPECT_FALSE(YScheduleDaysThan(getScheduleDateAndTitle().at(18), getScheduleDateAndTitle().at(19))); //} ////void CYearScheduleView::setData(QVector &vListData) //TEST_F(test_yearscheduleview, setDate) //{ // QVector scheduleinfo = getScheduleDataInfo(); // cYearScheduleView->setData(scheduleinfo); //} ////void CYearScheduleView::clearData() //TEST_F(test_yearscheduleview, clearDate) //{ // cYearScheduleView->clearData(); //} ////int CYearScheduleView::showWindow() //TEST_F(test_yearscheduleview, showWindow) //{ // QVector vlistData = getScheduleDataInfo(); // cYearScheduleView->showWindow(); // cYearScheduleView->setData(vlistData); // cYearScheduleView->showWindow(); //} ////void CYearScheduleView::setTheMe(int type) //TEST_F(test_yearscheduleview, setTheMe) //{ // int type = 1; // cYearScheduleView->setTheMe(type); // type = 2; // cYearScheduleView->setTheMe(type); //} ////void CYearScheduleView::setCurrentDate(QDate cdate) //TEST_F(test_yearscheduleview, setCurrentDate) //{ // cYearScheduleView->setCurrentDate(QDate(2021, 1, 6)); //} ////QDate CYearScheduleView::getCurrentDate() //TEST_F(test_yearscheduleview, getCurrentDate) //{ // QDate currentDate = QDate::currentDate(); // cYearScheduleView->setCurrentDate(currentDate); // bool iscurrent = currentDate == cYearScheduleView->getCurrentDate(); // EXPECT_TRUE(iscurrent); // QDate earlyDate = QDate(1999, 1, 1); // cYearScheduleView->setCurrentDate(earlyDate); // iscurrent = currentDate == cYearScheduleView->getCurrentDate(); // EXPECT_FALSE(iscurrent); //} ////void CYearScheduleOutView::setData(QVector &vListData) //TEST_F(test_yearscheduleview, setOutData) //{ // QVector scheduleInfo = getScheduleDataInfo(); // zYearScheduleOutView->setData(scheduleInfo); //} ////void CYearScheduleOutView::clearData() //TEST_F(test_yearscheduleview, clearOutData) //{ // zYearScheduleOutView->clearData(); //} ////void CYearScheduleOutView::setTheMe(int type) //TEST_F(test_yearscheduleview, setTheOutMe) //{ // zYearScheduleOutView->setTheMe(1); //} ////void CYearScheduleOutView::setCurrentDate(QDate cdate) //TEST_F(test_yearscheduleview, setCurrentOutDate) //{ // zYearScheduleOutView->setCurrentDate(QDate(2021, 1, 6)); //} //TEST_F(test_yearscheduleview, paintEvent) //{ // QPixmap pixmap(cYearScheduleView->size()); // QVector scheduleInfo = getScheduleDataInfo(); // cYearScheduleView->setData(scheduleInfo); // cYearScheduleView->render(&pixmap); //} //TEST_F(test_yearscheduleview, mousePressEvent) //{ //} test_yearscheduleview.h000066400000000000000000000014231523260663500376410ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_YEARSCHEDULEVIEW_H #define TEST_YEARSCHEDULEVIEW_H //#include "yearWidget/yearscheduleview.h" //#include "gtest/gtest.h" //#include //class test_yearscheduleview : public QObject, public::testing::Test //{ //public: // test_yearscheduleview(); // ~test_yearscheduleview(); // void SetUp() override; // void TearDown() override; //protected: // CYearScheduleView *cYearScheduleView = nullptr; // CYearScheduleOutView *zYearScheduleOutView = nullptr; //public: // QVector getScheduleDataInfo(); // QVector getScheduleDateAndTitle(); //}; #endif // TEST_YEARSCHEDULEVIEW_H test_yearview.cpp000066400000000000000000000060301523260663500364560ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_yearview.h" #include "../third-party_stub/stub.h" #include test_yearview::test_yearview() { } test_yearview::~test_yearview() { } void test_yearview::SetUp() { cYearView = new CYearView(); } void test_yearview::TearDown() { delete cYearView; cYearView = nullptr; } QVector getListDate() { QVector listDate {}; QDate date = QDate::currentDate(); for (int i = 0; i < 42; i++) { listDate.append(date); date = date.addDays(1); } return listDate; } //void CYearView::slotDoubleClickDate(const QDate &date) TEST_F(test_yearview, slotDoubltClickDate) { cYearView->slotDoubleClickDate(QDate(2021, 1, 6)); } //void CYearView::slotPressClickDate(const QDate &date) TEST_F(test_yearview, slotPressClickDate) { cYearView->slotPressClickDate(QDate(2021, 1, 6)); } //void CYearView::setTheMe(int type) TEST_F(test_yearview, setTheMe) { cYearView->setTheMe(1); cYearView->setTheMe(2); } //void CYearView::setShowDate(const QDate &showMonth, const QVector &showDate) TEST_F(test_yearview, setShowDate) { cYearView->setShowDate(getListDate().first(), getListDate()); } //void CYearView::setHasScheduleFlag(const QVector &hasScheduleFlag) TEST_F(test_yearview, setHasScheduleFlag) { QVector listLintFlag {}; listLintFlag.append(false); listLintFlag.append(true); cYearView->setHasScheduleFlag(listLintFlag); } //void CYearView::setHasSearchScheduleFlag(const QVector &hasSearchScheduleFlag) TEST_F(test_yearview, setHasSearchScheduleFlag) { QVector listLintFlag {}; listLintFlag.append(false); listLintFlag.append(true); cYearView->setHasSearchScheduleFlag(listLintFlag); } void setDate_Stub(const int showMonth, const QVector &showDate) { Q_UNUSED(showMonth) Q_UNUSED(showDate)} //bool CYearView::getStartAndStopDate(QDate &startDate, QDate &stopDate) TEST_F(test_yearview, getStartAndStopDate) { QDate startDate(QDate(2021, 1, 7)); QDate stopDate(QDate(2021, 1, 8)); cYearView->setShowDate(getListDate().first(), getListDate()); bool result = cYearView->getStartAndStopDate(startDate, stopDate); EXPECT_TRUE(result); QVector listDate {}; Stub stub; stub.set(ADDR(MonthBrefWidget, setDate), setDate_Stub); cYearView->setShowDate(getListDate().first(), listDate); bool result_false = cYearView->getStartAndStopDate(startDate, stopDate); EXPECT_FALSE(result_false); } bool hasFocus_Stub() { return true; } TEST_F(test_yearview, paintEvent) { Stub stub; stub.set(ADDR(QWidget, hasFocus), hasFocus_Stub); cYearView->setFixedSize(600, 600); QPixmap pixmap(cYearView->size()); cYearView->render(&pixmap); } TEST_F(test_yearview, guitest) { QWidget *currentMonth = cYearView->findChild("currentMouth"); if (currentMonth) { QTest::mouseDClick(currentMonth, Qt::LeftButton); } } test_yearview.h000066400000000000000000000010321523260663500361200ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_YEARVIEW_H #define TEST_YEARVIEW_H //#include "yearWidget/yearview.h" //#include "gtest/gtest.h" //#include //class test_yearview : public QObject // , public ::testing::Test //{ //public: // test_yearview(); // ~test_yearview(); // void SetUp() override; // void TearDown() override; //protected: // CYearView *cYearView = nullptr; //}; #endif // TEST_YEARVIEW_H test_yearwindow.cpp000066400000000000000000000034621523260663500370210ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_yearwindow.h" #include "customWidget/customframe.h" #include "widget/yearWidget/yearscheduleview.h" #include "calendarglobalenv.h" #include "constants.h" test_yearwindow::test_yearwindow() { CalendarGlobalEnv::getGlobalEnv()->registerKey(DDECalendar::CursorPointKey, QPoint(20, 20)); mYearWindow = new CYearWindow(); dateaManger = new CalendarDateDataManager(); } test_yearwindow::~test_yearwindow() { delete mYearWindow; mYearWindow = nullptr; delete dateaManger; dateaManger = nullptr; } //void CYearWindow::setTheMe(int type) TEST_F(test_yearwindow, setTheMe) { int type = 1; mYearWindow->setTheMe(type); type = 2; mYearWindow->setTheMe(type); } TEST_F(test_yearwindow, slotMousePress) { CalendarGlobalEnv::getGlobalEnv()->reviseValue(DDECalendar::CursorPointKey, QPoint(20, 20)); QDate currentDate = QDate::currentDate(); mYearWindow->slotMousePress(currentDate, 0); ASSERT_EQ(mYearWindow->getSelectDate(), currentDate); mYearWindow->slotMousePress(currentDate, 1); mYearWindow->slotMousePress(currentDate, 2); mYearWindow->slotMousePress(currentDate, 3); mYearWindow->slotMousePress(currentDate, 4); } TEST_F(test_yearwindow, calculateAzimuthAngle) { QPointF startPoint(0, 0); QPointF stopPoint(30, 20); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); stopPoint.setX(20); stopPoint.setY(30); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); stopPoint.setX(-20); stopPoint.setY(30); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); stopPoint.setX(-30); stopPoint.setY(20); mYearWindow->calculateAzimuthAngle(startPoint, stopPoint); } test_yearwindow.h000066400000000000000000000010451523260663500364610ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/test_widget/test_yearWidget// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_YEARWINDOW_H #define TEST_YEARWINDOW_H //#include "yearWidget/yearwindow.h" //#include "gtest/gtest.h" //#include //class test_yearwindow : public QObject // , public ::testing::Test //{ //public: // test_yearwindow(); // ~test_yearwindow(); //protected: // CYearWindow *mYearWindow = nullptr; // CalendarDateDataManager *dateaManger = nullptr; //}; #endif // TEST_YEARWINDOW_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/testmainwindowgui.cpp000066400000000000000000000204451523260663500317450ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later //#include "testmainwindowgui.h" //#include "configsettings.h" //#include "view/monthgraphiview.h" //#include "yearWidget/yearwindow.h" //#include "monthWidget/monthwindow.h" //#include "dialog_stub.h" //#include "testscheduledata.h" //#include //testMainWindowGUI::testMainWindowGUI() //{ //} //QVariant getSetView(const QString &str) //{ // QVariant variant; // if (str == "base.geometry") { // QByteArray byteArray("\x01\xD9\xD0\xCB\x00\x02\x00\x00\x00\x00\x02\x12\x00\x00\x00\xF3\x00\x00\x05m\x00\x00\x03l\x00\x00\x02\x12\x00\x00\x00\xF3\x00\x00\x05m\x00\x00\x03l\x00\x00\x00\x00\x00\x00\x00\x00\x07\x80"); // variant.setValue(byteArray); // } else if (str == "base.state") { // variant.setValue(1); // } else if (str == "base.view") { // variant.setValue(2); // } // return variant; //} //void testMainWindowGUI::SetUp() //{ // Stub stub; // stub.set(ADDR(CConfigSettings, value), getSetView); //} //void testMainWindowGUI::TearDown() //{ //} //TEST_F(testMainWindowGUI, yearGUITest) //{ // Calendarmainwindow mainWindow(0); // CYearWindow *myYearWindow = mainWindow.findChild("yearwindow"); // if (myYearWindow != nullptr) { // DIconButton *m_prevButton = myYearWindow->findChild("PrevButton"); // DIconButton *m_nextButton = myYearWindow->findChild("NextButton"); // LabelWidget *m_today = myYearWindow->findChild("yearToDay"); // if (m_prevButton != nullptr) { // QTest::mouseClick(m_prevButton, Qt::LeftButton); // } // if (m_today != nullptr) { // QTest::mouseClick(m_today, Qt::LeftButton); // } // if (m_nextButton != nullptr) { // QTest::mouseClick(m_nextButton, Qt::LeftButton); // } // //获å�–QStackedWidget // QStackedWidget *stackedWidget = myYearWindow->findChild(); // if (stackedWidget) { // QWidget *currentWidget = stackedWidget->currentWidget(); // if (currentWidget) { // currentWidget->setFocus(); // QTest::keyPress(currentWidget, Qt::Key_Up); // } // currentWidget = stackedWidget->currentWidget(); // if (currentWidget) { // currentWidget->setFocus(); // QTest::keyPress(currentWidget, Qt::Key_Down); // } // } // //year_resizeEvent // myYearWindow->setSearchWFlag(true); // mainWindow.resize(1000, 400); // myYearWindow->setSearchWFlag(false); // mainWindow.resize(700, 400); // } //} //TEST_F(testMainWindowGUI, monthGUITest) //{ // Calendarmainwindow mainWindow(1); // CMonthWindow *mymonthWindow = mainWindow.findChild("monthWindow"); // if (mymonthWindow != nullptr) { // } //} //TEST_F(testMainWindowGUI, weekGUIKeyTest) //{ // Calendarmainwindow mainWindow(2); //} //TEST_F(testMainWindowGUI, dayGUIKeyTest) //{ // Calendarmainwindow mainWindow(3); //} //TEST_F(testMainWindowGUI, slotCurrentDateUpdate) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotCurrentDateUpdate(); //} ////slotSetSearchFocus //TEST_F(testMainWindowGUI, slotSetSearchFocus) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotSetSearchFocus(); //} ////viewWindow //TEST_F(testMainWindowGUI, viewWindow) //{ // Calendarmainwindow mainWindow(1); // mainWindow.viewWindow(3, false); // mainWindow.viewWindow(0, true); //} ////setSearchWidth //TEST_F(testMainWindowGUI, setSearchWidth) //{ // Calendarmainwindow mainWindow(1); // mainWindow.setSearchWidth(500); //} ////slotTheme //TEST_F(testMainWindowGUI, slotTheme) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotTheme(0); // mainWindow.slotTheme(1); // mainWindow.slotTheme(2); //} ////slotOpenSchedule //TEST_F(testMainWindowGUI, slotOpenSchedule) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // QString job = ScheduleDataInfo::ScheduleToJsonStr(TestDataInfo::getScheduleItemDInfo().first()); // mainWindow.slotOpenSchedule(job); //} ////slotWUpdateSchedule //TEST_F(testMainWindowGUI, slotWUpdateSchedule) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotWUpdateSchedule(); //} ////slotStextChanged //TEST_F(testMainWindowGUI, slotStextChanged) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotStextChanged(); //} ////slotStextfocusChanged //TEST_F(testMainWindowGUI, slotStextfocusChanged) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotStextfocusChanged(true); //} ////slotDeleteitem //TEST_F(testMainWindowGUI, slotDeleteitem) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotDeleteitem(); //} ////slotNewSchedule //TEST_F(testMainWindowGUI, slotNewSchedule) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotNewSchedule(); //} ////slotSwitchView //TEST_F(testMainWindowGUI, slotSwitchView) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotSwitchView(0); // mainWindow.slotSwitchView(1); // mainWindow.slotSwitchView(2); // mainWindow.slotSwitchView(3); //} ////slotViewtransparentFrame //TEST_F(testMainWindowGUI, slotViewtransparentFrame) //{ // Calendarmainwindow mainWindow(1); // mainWindow.slotViewtransparentFrame(true); // mainWindow.slotViewtransparentFrame(false); //} //bool stub_startDetached(const QString &program, const QStringList &arguments) //{ // Q_UNUSED(program) // Q_UNUSED(arguments) // return true; //} ////slotViewShortcut //TEST_F(testMainWindowGUI, slotViewShortcut) //{ // Stub stub; // stub.set((bool (*)(const QString &, const QStringList &))ADDR(QProcess, startDetached), // stub_startDetached); // Calendarmainwindow mainWindow(1); // mainWindow.slotViewShortcut(); //} //TEST_F(testMainWindowGUI, resizeEvent_01) //{ // QResizeEvent event(QSize(10, 10), QSize(100, 100)); // Calendarmainwindow mainWindow(1); // mainWindow.resizeEvent(&event); //} //TEST_F(testMainWindowGUI, resizeEvent_02) //{ // QResizeEvent event(QSize(10, 10), QSize(1000, 1000)); // Calendarmainwindow mainWindow(1); // mainWindow.resize(1000, 1000); // mainWindow.resizeEvent(&event); //} //TEST_F(testMainWindowGUI, slotstackWClicked_01) //{ // Calendarmainwindow mainWindow(1); // QPushButton btn; // mainWindow.m_buttonBox->setId(&btn, 0); // mainWindow.slotstackWClicked(&btn); //} //TEST_F(testMainWindowGUI, slotWUpdateSchedule_01) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_opensearchflag = true; // mainWindow.m_searchEdit->setText("123"); // mainWindow.slotWUpdateSchedule(); //} //TEST_F(testMainWindowGUI, slotSreturnPressed_01) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_opensearchflag = true; // mainWindow.m_searchEdit->setText("123"); // mainWindow.slotSreturnPressed(); //} //TEST_F(testMainWindowGUI, slotStextChanged_01) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_searchEdit->setText("123"); // mainWindow.slotStextChanged(); //} //TEST_F(testMainWindowGUI, slotStextChanged_02) //{ // Calendarmainwindow mainWindow(1); // mainWindow.m_searchEdit->setText(""); // mainWindow.slotStextChanged(); //} //TEST_F(testMainWindowGUI, slotSearchSelectSchedule_02) //{ // Calendarmainwindow mainWindow(1); // ScheduleDataInfo info; // mainWindow.slotSearchSelectSchedule(info); //} //TEST_F(testMainWindowGUI, mouseMoveEvent_01) //{ // Calendarmainwindow mainWindow(1); // QMouseEvent event(QMouseEvent::MouseMove, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); // mainWindow.mouseMoveEvent(&event); //} //TEST_F(testMainWindowGUI, changeEvent_01) //{ // Calendarmainwindow mainWindow(1); // QEvent event(QEvent::ActivationChange); // mainWindow.changeEvent(&event); //} //TEST_F(testMainWindowGUI, slotOpenSettingDialog_01) //{ // Stub stub; // calendarDDialogExecStub(stub); // Calendarmainwindow mainWindow(1); // mainWindow.slotOpenSettingDialog(); //} linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/testmainwindowgui.h000066400000000000000000000011001523260663500313750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TESTMAINWINDOWGUI_H #define TESTMAINWINDOWGUI_H //#include "calendarmainwindow.h" //#include "gtest/gtest.h" //#include "../third-party_stub/stub.h" //#include //#include //class testMainWindowGUI : public QObject // , public ::testing::Test //{ //public: // testMainWindowGUI(); // void SetUp() override; // void TearDown() override; //public: // Stub stub; //}; #endif // TESTMAINWINDOWGUI_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/testscheduledata.cpp000066400000000000000000000046131523260663500315110ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "testscheduledata.h" TestScheduleData::TestScheduleData() { } QVector TestDataInfo::getScheduleItemDInfo() { QVector scheduleDate {}; ScheduleDataInfo schedule1, schedule2, schedule3, schedule4, schedule5, scheduleFes; QDateTime currentDateTime = QDateTime::currentDateTime(); schedule1.setID(1); schedule1.setBeginDateTime(currentDateTime); schedule1.setEndDateTime(currentDateTime.addDays(1)); schedule1.setTitleName("scheduleOne"); schedule1.setAllDay(true); schedule1.setType(1); schedule1.setRecurID(0); schedule2.setID(2); schedule2.setBeginDateTime(currentDateTime.addDays(1)); schedule2.setEndDateTime(currentDateTime.addDays(1).addSecs(60 * 60)); schedule2.setTitleName("scheduleTwo"); schedule2.setAllDay(true); schedule2.setType(2); schedule2.setRecurID(0); schedule3.setID(3); schedule3.setBeginDateTime(currentDateTime.addDays(2)); schedule3.setEndDateTime(currentDateTime.addDays(2).addSecs(60 * 60)); schedule3.setTitleName("scheduleThree"); schedule3.setAllDay(false); schedule3.setType(3); schedule3.setRecurID(0); schedule4.setID(4); schedule4.setBeginDateTime(currentDateTime.addDays(3)); schedule4.setEndDateTime(currentDateTime.addDays(3).addSecs(60 * 60)); schedule4.setTitleName("scheduleFour"); schedule4.setAllDay(false); schedule4.setType(1); schedule4.setRecurID(0); schedule5.setID(5); schedule5.setBeginDateTime(currentDateTime.addDays(4)); schedule5.setEndDateTime(currentDateTime.addDays(4).addSecs(60 * 60)); schedule5.setTitleName("scheduleFive"); schedule5.setAllDay(false); schedule5.setType(2); schedule5.setRecurID(0); scheduleFes.setID(6); scheduleFes.setBeginDateTime(currentDateTime.addDays(5)); scheduleFes.setEndDateTime(currentDateTime.addDays(5).addSecs(60 * 60)); scheduleFes.setTitleName("scheduleFestival"); scheduleFes.setAllDay(true); scheduleFes.setType(4); scheduleFes.setRecurID(0); scheduleDate.append(schedule1); scheduleDate.append(schedule2); scheduleDate.append(schedule3); scheduleDate.append(schedule4); scheduleDate.append(schedule5); scheduleDate.append(scheduleFes); return scheduleDate; } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-client-test/src/testscheduledata.h000066400000000000000000000006531523260663500311560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TESTSCHEDULEDATA_H #define TESTSCHEDULEDATA_H //#include "src/scheduledatainfo.h" //#include //class TestScheduleData //{ //public: // TestScheduleData(); //}; //namespace TestDataInfo { //QVector getScheduleItemDInfo(); //} #endif // TESTSCHEDULEDATA_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/000077500000000000000000000000001523260663500250465ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/CMakeLists.txt000066400000000000000000000036211523260663500276100ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.7) project(dde-calendar-service-test) ADD_COMPILE_OPTIONS(-fno-access-control) set(CMAKE_CXX_STANDARD 11) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(APP_BIN_NAME "dde-calendar-service-test") set(APP_SERVICE_DIR "${CMAKE_SOURCE_DIR}/src/calendar-service") set(APP_SERVICE_RES_DIR "${APP_SERVICE_DIR}/assets") set(APP_QRC "${APP_SERVICE_RES_DIR}/resources.qrc") # Find the library find_package(PkgConfig REQUIRED) find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core DBus Sql Test) find_package(GTest REQUIRED) set(LINK_LIBS Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::DBus Qt${QT_VERSION_MAJOR}::Sql Dtk${DTK_VERSION_MAJOR}::Core ) include_directories(${APP_SERVICE_DIR}/src) SUBDIRLIST(all_src ${APP_SERVICE_DIR}/src) # Include all app own subdirectories foreach(subdir ${all_src}) include_directories(${APP_SERVICE_DIR}/src/${subdir}) endforeach() file(GLOB_RECURSE CALENDARSERVICE_SRCS ${APP_SERVICE_DIR}/src/*.cpp) include_directories(../../calendar-basicstruct/) list(REMOVE_ITEM CALENDARSERVICE_SRCS ${APP_SERVICE_DIR}/src/main.cpp) # test src SUBDIRLIST(TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src) foreach(subdir ${TEST_SRC}) include_directories(${subdir}) endforeach() set(HL_DATABASE_DIR ${APP_SERVICE_RES_DIR}/data/huangli.db) set(SD_DATABASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/scheduler.db) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in config.h @ONLY) file(GLOB_RECURSE Calendar_Service_TEST_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) list(APPEND CMAKE_MODULE_PATH "${ASAN_CMAKE_DIR}") include(asan) add_executable(${APP_BIN_NAME} ${Calendar_Service_TEST_SRC} ${CALENDARSERVICE_SRCS} ${APP_QRC}) target_link_libraries(${APP_BIN_NAME} ${LINK_LIBS} ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} pthread basestruct )linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/scheduler.db000066400000000000000000000600001523260663500273270ustar00rootroot00000000000000SQLite format 3@ ãXã.0:  °ß1o °Y3yindexidx_jobs_deleted_atjobsCREATE INDEX idx_jobs_deleted_at ON "jobs"(deleted_at)‚a…%tablejobsjobsCREATE TABLE "jobs" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"type" integer,"title" varchar(255),"description" varchar(255),"all_day" bool,"start" datetime,"end" datetime,"r_rule" varchar(255),"remind" varchar(255),"ignore" varchar(255) , "title_pinyin" varchar(255))n=� indexidx_job_types_deleted_atjob_typesCREATE INDEX idx_job_types_deleted_at ON "job_types"(deleted_at)P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)�L‚gtablejob_typesjob_typesCREATE TABLE "job_types" ("id" integer primary key autoincrement,"created_at" datetime,"updated_at" datetime,"deleted_at" datetime,"name" varchar(255),"color" varchar(255) ) ¸p(Έo??;=2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:002021-04-14 16:40:28.530UT测试Y——ID应为6#FFFFFFD?;2021-04-14T16:40:28+08:002021-04-14 16:40:28.528嗨皮#CC99AAX??=2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00UT测试X——ID应为4#FFFFFFF??2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00å…¶ä»–#800080F??2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00工作#00FF00F??2021-04-14T16:40:28+08:002021-04-14T16:40:28+08:00学习#FF0000 çñçjobs job_types Ìü÷òíèÌ;2021-04-14 16:40:28.530 _I_ À·�gGG  ??yG2021-04-14T16:40:28.511+08:002021-04-14T16:40:28.524+08:00UT测试X2020-12-09T00:00:00+08:002020-12-09T23:59:00+08:00FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;UNTIL=20201130T000000Z1;09:00["2020-12-06T00:00:00+08:00"][ce][shi]�4GG  ??[2021-04-14T16:40:28.496+08:002021-04-14T16:40:28.496+08:00UT测试A2020-12-05T00:00:00+08:002020-12-05T23:59:00+08:00FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=31;09:00[] ÷ü÷ò linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/000077500000000000000000000000001523260663500256355ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/config.h.in000066400000000000000000000004201523260663500276540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef CONFIG_H #define CONFIG_H #define HL_DATABASE_DIR "@HL_DATABASE_DIR@" #define SD_DATABASE_DIR "@SD_DATABASE_DIR@" #endif // CONFIG_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/service_stub.cpp000066400000000000000000000016271523260663500310440ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "service_stub.h" #include "dbusuiopenschedule.h" #include "dbusnotify.h" QDBusMessage callWithArgumentList_stub(QDBus::CallMode mode, const QString &method, const QList &args) { Q_UNUSED(mode); Q_UNUSED(method); Q_UNUSED(args); QDBusMessage reply; reply.createReply("succ"); return reply; } void qDBusAbstractInterface_callWithArgumentList_stub(Stub &stub) { stub.set(ADDR(QDBusAbstractInterface, callWithArgumentList), callWithArgumentList_stub); qDBusMessage_type_Stub(stub); } QDBusMessage::MessageType type_Stub() { return QDBusMessage::ReplyMessage; } void qDBusMessage_type_Stub(Stub &stub) { stub.set(ADDR(QDBusMessage, type), type_Stub); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/service_stub.h000066400000000000000000000005361523260663500305070ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef SERVICE_STUB_H #define SERVICE_STUB_H #include "../third-party_stub/stub.h" void qDBusMessage_type_Stub(Stub &stub); void qDBusAbstractInterface_callWithArgumentList_stub(Stub &stub); #endif // SERVICE_STUB_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_calendarhuangli.cpp000066400000000000000000000076351523260663500325340ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calendarhuangli.h" #include "../third-party_stub/stub.h" #include "config.h" #include #include bool stub_OpenHuangliDB(void *obj, const QString &dbpath) { Q_UNUSED(dbpath); HuangLiDataBase *o = reinterpret_cast(obj); o->m_database = QSqlDatabase::addDatabase("QSQLITE"); o->m_database.setDatabaseName(HL_DATABASE_DIR); return o->m_database.open(); } test_calendarhuangli::test_calendarhuangli() { Stub stub; stub.set(ADDR(HuangLiDataBase, OpenHuangliDatabase), stub_OpenHuangliDB); calendarHuangLi = new CalendarHuangLi(); } test_calendarhuangli::~test_calendarhuangli() { if (calendarHuangLi->m_database->m_database.isOpen()) { calendarHuangLi->m_database->m_database.close(); } delete calendarHuangLi; } //QString CalendarHuangLi::GetFestivalMonth(quint32 year, quint32 month) TEST_F(test_calendarhuangli, GetFestivalMonth) { quint32 year = 2020; quint32 month = 12; QString fesMonth = calendarHuangLi->getFestivalMonth(year, month); } //QString CalendarHuangLi::GetHuangLiDay(quint32 year, quint32 month, quint32 day) TEST_F(test_calendarhuangli, GetHuangLiDay) { //2020å¹´12月13日黄历信æ�¯ const QString huangli_20201213 = "{\"Avoid\":\"å«�娶.祈ç¦�.出ç�«.移徙.入宅.\",\"GanZhiDay\":\"庚寅\",\"GanZhiMonth\":\"戊å­�\"," "\"GanZhiYear\":\"庚å­�\",\"LunarDayName\":\"廿ä¹�\",\"LunarFestival\":\"\",\"LunarLeapMonth\":0," "\"LunarMonthName\":\"å��月\",\"SolarFestival\":\"å�—京大屠æ�€æ­»éš¾è€…国家公祭日\"," "\"Suit\":\"纳财.开市.交易.立券.会亲å�‹.进人å�£.ç»�络.祭祀.祈ç¦�.安香.出ç�«.求医.治病.修造.动土.拆å�¸.扫èˆ�.安床." "æ ½ç§�.牧养.开生å�Ÿ.å�ˆå¯¿æœ¨.入殓.安葬.å�¯æ”’.\",\"Term\":\"\",\"Worktime\":0,\"Zodiac\":\"é¼ \"}"; quint32 year = 2020; quint32 month = 12; quint32 day = 13; QString gethuangli = calendarHuangLi->getHuangLiDay(year, month, day); assert(huangli_20201213 == gethuangli); //2020å¹´12月14日黄历信æ�¯ const QString huangli_20201214 = "{\"Avoid\":\"入宅.修造.动土.破土.安门.上æ¢�.\",\"GanZhiDay\":\"è¾›å�¯\",\"GanZhiMonth\":\"戊å­�\"," "\"GanZhiYear\":\"庚å­�\",\"LunarDayName\":\"三å��\",\"LunarFestival\":\"\",\"LunarLeapMonth\":0," "\"LunarMonthName\":\"å��月\",\"SolarFestival\":\"\",\"Suit\":\"祭祀.入殓.移柩.余事勿å�–.\",\"Term\":" "\"\",\"Worktime\":0,\"Zodiac\":\"é¼ \"}"; day = 14; gethuangli = calendarHuangLi->getHuangLiDay(year, month, day); assert(huangli_20201214 == gethuangli); } //QString CalendarHuangLi::GetHuangLiMonth(quint32 year, quint32 month, bool fill) TEST_F(test_calendarhuangli, GetHuangLiMonth) { quint32 year = 2020; quint32 month = 12; bool fill = false; calendarHuangLi->getHuangLiMonth(year, month, fill); fill = true; calendarHuangLi->getHuangLiMonth(year, month, fill); } //CaLunarDayInfo CalendarHuangLi::GetLunarInfoBySolar(quint32 year, quint32 month, quint32 day) TEST_F(test_calendarhuangli, GetLunarInfoBySolar) { quint32 year = 2020; quint32 month = 12; quint32 day = 13; CaLunarDayInfo huangliDayInfo = calendarHuangLi->getLunarInfoBySolar(year, month, day); } //CaLunarMonthInfo CalendarHuangLi::GetLunarCalendarMonth(quint32 year, quint32 month, bool fill) TEST_F(test_calendarhuangli, GetLunarCalendarMonth) { quint32 year = 2020; quint32 month = 12; bool fill = false; calendarHuangLi->getLunarCalendarMonth(year, month, fill); fill = true; calendarHuangLi->getLunarCalendarMonth(year, month, fill); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_calendarhuangli.h000066400000000000000000000007601523260663500321710ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARHUANGLI_H #define TEST_CALENDARHUANGLI_H #include "calendarhuangli.h" #include "gtest/gtest.h" #include class test_calendarhuangli : public QObject, public::testing::Test { public: test_calendarhuangli(); ~test_calendarhuangli(); protected: CalendarHuangLi *calendarHuangLi = nullptr; }; #endif // TEST_CALENDARHUANGLI_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_calendarscheduler.cpp000066400000000000000000000130371523260663500330540ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calendarscheduler.h" #include "../third-party_stub/stub.h" #include "service_stub.h" test_calendarscheduler::test_calendarscheduler() { } TEST_F(test_calendarscheduler, DeleteJob_01) { mCalendar->DeleteJob(0); } TEST_F(test_calendarscheduler, GetJob_01) { EXPECT_TRUE(mCalendar->GetJob(0).isEmpty()); } TEST_F(test_calendarscheduler, CreateJob_01) { mCalendar->CreateJob(""); } TEST_F(test_calendarscheduler, UpdateJob_01) { mCalendar->UpdateJob(""); } TEST_F(test_calendarscheduler, GetJobs_01) { QDateTime starTime; QDateTime endTime = starTime.addDays(1); EXPECT_FALSE(mCalendar->GetJobs(starTime, endTime).isEmpty()); } TEST_F(test_calendarscheduler, QueryJobs_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mCalendar->QueryJobs(str).isEmpty()); } TEST_F(test_calendarscheduler, QueryJobsWithLimit_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mCalendar->QueryJobsWithLimit(str, 5).isEmpty()); } TEST_F(test_calendarscheduler, QueryJobsWithRule_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mCalendar->QueryJobsWithRule(str, "").isEmpty()); } TEST_F(test_calendarscheduler, CreateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); EXPECT_FALSE(mCalendar->CreateJobType(str)); } TEST_F(test_calendarscheduler, DeleteJobType_01) { mCalendar->DeleteJobType(7); } TEST_F(test_calendarscheduler, UpdateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); mCalendar->UpdateJobType(str); } TEST_F(test_calendarscheduler, GetJobTypeList_01) { mCalendar->GetJobTypeList().isEmpty(); } TEST_F(test_calendarscheduler, isJobTypeUsed_01) { mCalendar->isJobTypeUsed(0); } TEST_F(test_calendarscheduler, GetColorTypeList_01) { mCalendar->GetColorTypeList().isEmpty(); } TEST_F(test_calendarscheduler, UpdateRemindTimeout_01) { mCalendar->UpdateRemindTimeout(true); mCalendar->UpdateRemindTimeout(false); } TEST_F(test_calendarscheduler, notifyMsgHanding_01) { for (int i = 0; i < 25; i++) { mCalendar->notifyMsgHanding(1, 1, i); } } TEST_F(test_calendarscheduler, initConnections_01) { mCalendar->initConnections(); } TEST_F(test_calendarscheduler, GetFestivalId_01) { mCalendar->GetFestivalId("123"); } TEST_F(test_calendarscheduler, IsFestivalJobEnabled_01) { mCalendar->IsFestivalJobEnabled(); } TEST_F(test_calendarscheduler, GetJobTimesBetween_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); QDateTime starTime; QDateTime endTime = starTime.addDays(-10); EXPECT_TRUE(mCalendar->GetJobTimesBetween(starTime, endTime, job).isEmpty()); } TEST_F(test_calendarscheduler, ParseRRule_01) { QString str = "BYDAY=MO,TU,WE,TH,FR;COUNT=2;UNTIL=3"; QStringList sList; sList << ";FREQ=DAILY" << ";FREQ=WEEKLY" << ";FREQ=MONTHLY" << ";FREQ=YEARLY"; for (QString s : sList) { mCalendar->ParseRRule(str + s); } } TEST_F(test_calendarscheduler, GetJobRemindTime_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); mCalendar->GetJobRemindTime(job); } TEST_F(test_calendarscheduler, josnStringToJob_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); EXPECT_TRUE(job.AllDay); EXPECT_TRUE(job.ID == 0); } TEST_F(test_calendarscheduler, getRemindTimeByCount_01) { mCalendar->getRemindTimeByCount(0); } TEST_F(test_calendarscheduler, getRemindTimeByMesc_01) { mCalendar->getRemindTimeByMesc(0); } TEST_F(test_calendarscheduler, closeNotification_01) { mCalendar->closeNotification(0); } TEST_F(test_calendarscheduler, OnModifyJobRemind_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); mCalendar->OnModifyJobRemind(job, ""); } TEST_F(test_calendarscheduler, saveNotifyID_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":0,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); Job job = mCalendar->josnStringToJob(str); mCalendar->saveNotifyID(job, 1); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_calendarscheduler.h000066400000000000000000000011751523260663500325210ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARSCHEDULER_H #define TEST_CALENDARSCHEDULER_H #include "calendarscheduler.h" #include #include class test_calendarscheduler: public::testing::Test { public: test_calendarscheduler(); virtual void SetUp() { mCalendar = new CalendarScheduler(); } virtual void TearDown() { delete mCalendar; mCalendar = nullptr; } protected: CalendarScheduler *mCalendar = nullptr; }; #endif // TEST_CALENDARSCHEDULER_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_calendarservice.cpp000066400000000000000000000073331523260663500325400ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_calendarservice.h" test_calendarservice::test_calendarservice() { } TEST_F(test_calendarservice, GetFestivalMonth_01) { mService->GetFestivalMonth(2022, 4); } TEST_F(test_calendarservice, GetHuangLiDay_01) { EXPECT_FALSE(mService->GetHuangLiDay(2022, 4, 22).isEmpty()); } TEST_F(test_calendarservice, GetHuangLiMonth_01) { EXPECT_FALSE(mService->GetHuangLiMonth(2022, 4, true).isEmpty()); } TEST_F(test_calendarservice, GetLunarInfoBySolar_01) { EXPECT_FALSE(mService->GetLunarInfoBySolar(2022, 4, true).mLunarDayName.isEmpty()); } TEST_F(test_calendarservice, GetLunarMonthCalendar_01) { EXPECT_TRUE(mService->GetLunarMonthCalendar(2022, 4, true).mDays); } TEST_F(test_calendarservice, CreateJob_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":1,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); mService->CreateJob(str); } TEST_F(test_calendarservice, CreateType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":12}]"); mService->CreateType(str); } TEST_F(test_calendarservice, DeleteJob_01) { mService->DeleteJob(1); } TEST_F(test_calendarservice, GetJob_01) { mService->GetJob(1); } TEST_F(test_calendarservice, GetJobs_01) { mService->GetJobs(2022, 2, 1, 2022, 4, 1); } TEST_F(test_calendarservice, UpdateJob_01) { QString str("{\"AllDay\":true,\"Description\":\"\",\"End\":\"2022-04-07T23:59:00+08:00\",\"ID\":1,\"Ignore\":[],\"IsLunar\":false,\"RRule\":\"\",\"RecurID\":0,\"Remind\":\"1;09:00\",\"Start\":\"2022-04-06T00:00:00+08:00\",\"Title\":\"新建日程\",\"Type\":1}"); mService->UpdateJob(str); } TEST_F(test_calendarservice, QueryJobs_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mService->QueryJobs(str).isEmpty()); } TEST_F(test_calendarservice, QueryJobsWithLimit_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mService->QueryJobsWithLimit(str, 5).isEmpty()); } TEST_F(test_calendarservice, QueryJobsWithRule_01) { QString str("{\"End\":\"2022-10-22T14:52:29+08:00\",\"Key\":\"sd\",\"Start\":\"2021-10-22T14:52:29+08:00\"}"); EXPECT_FALSE(mService->QueryJobsWithRule(str, "").isEmpty()); } TEST_F(test_calendarservice, remindJob_01) { mService->remindJob(1, 2); } TEST_F(test_calendarservice, updateRemindJob_01) { mService->updateRemindJob(true); } TEST_F(test_calendarservice, CreateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); EXPECT_FALSE(mService->CreateJobType(str)); } TEST_F(test_calendarservice, DeleteJobType_01) { mService->DeleteJobType(7); } TEST_F(test_calendarservice, UpdateJobType_01) { QString str("[{\"Authority\":7,\"ColorHex\":\"#5bdd80\",\"ColorTypeNo\":4,\"JobTypeName\":\"123\",\"JobTypeNo\":8}]"); mService->UpdateJobType(str); } TEST_F(test_calendarservice, GetJobTypeList_01) { mService->GetJobTypeList().isEmpty(); } TEST_F(test_calendarservice, isJobTypeUsed_01) { mService->isJobTypeUsed(0); } TEST_F(test_calendarservice, GetColorTypeList_01) { mService->GetColorTypeList().isEmpty(); } TEST_F(test_calendarservice, notifyMsgHanding_01) { mService->notifyMsgHanding(1, 1, 1); } TEST_F(test_calendarservice, initConnections_01) { mService->initConnections(); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_calendarservice.h000066400000000000000000000011511523260663500321750ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_CALENDARSERVICE_H #define TEST_CALENDARSERVICE_H #include "calendarservice.h" #include #include class test_calendarservice: public::testing::Test { public: test_calendarservice(); virtual void SetUp() { mService = new CalendarService(); } virtual void TearDown() { delete mService; mService = nullptr; } protected: CalendarService *mService = nullptr; }; #endif // TEST_CALENDARSERVICE_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_dbmanager/000077500000000000000000000000001523260663500306145ustar00rootroot00000000000000test_huanglidatabase.cpp000066400000000000000000000063351523260663500354230ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_dbmanager// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_huanglidatabase.h" #include "../third-party_stub/stub.h" #include "config.h" bool stub_OpenHuangliDatabase(void *obj, const QString &dbpath) { Q_UNUSED(dbpath); HuangLiDataBase *o = reinterpret_cast(obj); o->m_database = QSqlDatabase::addDatabase("QSQLITE"); o->m_database.setDatabaseName(HL_DATABASE_DIR); return o->m_database.open(); } test_huanglidatabase::test_huanglidatabase() { Stub stub; stub.set(ADDR(HuangLiDataBase, OpenHuangliDatabase), stub_OpenHuangliDatabase); hlDb = new HuangLiDataBase(); } test_huanglidatabase::~test_huanglidatabase() { if (hlDb->m_database.isOpen()) { hlDb->m_database.close(); } delete hlDb; } //QString HuangLiDataBase::QueryFestivalList(quint32 year, quint8 month) TEST_F(test_huanglidatabase, QueryFestivalList) { quint32 year = 2020; quint8 month = 10; const QString strFes = "[{\"description\":\"10月1日至10月8日放å�‡8天,9月27日,10月10日上ç�­\",\"id\":\"2020100110\",\"list\":" "[{\"date\":\"2020-10-1\",\"status\":1}," "{\"date\":\"2020-10-2\",\"status\":1}," "{\"date\":\"2020-10-3\",\"status\":1}," "{\"date\":\"2020-10-4\",\"status\":1}," "{\"date\":\"2020-10-5\",\"status\":1}," "{\"date\":\"2020-10-6\",\"status\":1}," "{\"date\":\"2020-10-7\",\"status\":1}," "{\"date\":\"2020-10-8\",\"status\":1}," "{\"date\":\"2020-9-27\",\"status\":2}," "{\"date\":\"2020-10-10\",\"status\":2}]," "\"month\":10,\"name\":\"中秋节\",\"rest\":" "\"10月9日至10月10日请å�‡2天,与周末连休å�¯æ‹¼11天长å�‡ã€‚\"}]"; QString getFes = hlDb->QueryFestivalList(year, month); assert(strFes == getFes); } //QList HuangLiDataBase::QueryHuangLiByDays(const QList &days) TEST_F(test_huanglidatabase, QueryHuangLiByDays) { QList days; stDay day1, day2; day1.Year = day2.Year = 2020; day1.Month = day2.Month = 10; day1.Day = 1; day2.Day = 2; days << day1 << day2; QList getHuangli = hlDb->QueryHuangLiByDays(days); stHuangLi hl1, hl2; hl1 = getHuangli.at(0); hl2 = getHuangli.at(1); QString hl2Suit = "开光.解除.起基.动土.拆å�¸.上æ¢�.立碑.ä¿®å�Ÿ.安葬.破土.å�¯æ”’.移柩."; QString hl2Avoid = "å«�娶.出行.安床.作ç�¶.祭祀.入宅.移徙.出ç�«.进人å�£.置产."; assert(20201001 == hl1.ID && 20201002 == hl2.ID); assert(hl2Suit == hl2.Suit && hl2Avoid == hl2.Avoid); } ////bool HuangLiDataBase::OpenHuangliDatabase(const QString &dbpath) //TEST_F(test_huanglidatabase, OpenHuangliDatabase) //{ // QString dbpath = ""; // hlDb->OpenHuangliDatabase(dbpath); // dbpath = "123123"; // hlDb->OpenHuangliDatabase(dbpath); // dbpath = "%s%s%s%s%s%s"; // hlDb->OpenHuangliDatabase(dbpath); // hlDb->OpenHuangliDatabase(HL_DATABASE_DIR); //} test_huanglidatabase.h000066400000000000000000000007571523260663500350720ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_dbmanager// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_HUANGLIDATABASE_H #define TEST_HUANGLIDATABASE_H #include "dbmanager/huanglidatabase.h" #include "gtest/gtest.h" #include class test_huanglidatabase : public QObject, public::testing::Test { public: test_huanglidatabase(); ~test_huanglidatabase(); protected: HuangLiDataBase *hlDb = nullptr; }; #endif // TEST_HUANGLIDATABASE_H test_schedulerdatabase.cpp000066400000000000000000000033151523260663500357450ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_dbmanager// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_schedulerdatabase.h" test_schedulerdatabase::test_schedulerdatabase() { } TEST_F(test_schedulerdatabase, GetJob_01) { schedulerdatabase_next = false; mBase->GetJob(0); } TEST_F(test_schedulerdatabase, GetAllOriginJobs_01) { schedulerdatabase_next = false; mBase->GetAllOriginJobs("", ""); } TEST_F(test_schedulerdatabase, saveRemindJob_01) { schedulerdatabase_next = false; mBase->saveRemindJob(Job()); } TEST_F(test_schedulerdatabase, updateRemindJob_01) { schedulerdatabase_next = false; mBase->updateRemindJob(Job()); } TEST_F(test_schedulerdatabase, getValidRemindJob_01) { schedulerdatabase_next = false; mBase->getValidRemindJob(); } TEST_F(test_schedulerdatabase, getRemindJob_01) { schedulerdatabase_next = false; mBase->getRemindJob(1, 2); } TEST_F(test_schedulerdatabase, getRemindJob_02) { schedulerdatabase_next = false; mBase->getRemindJob(1); } TEST_F(test_schedulerdatabase, UpdateJobIgnore_01) { schedulerdatabase_next = false; mBase->UpdateJobIgnore("", 0); } TEST_F(test_schedulerdatabase, DeleteJobsByJobType_01) { schedulerdatabase_next = false; mBase->DeleteJobsByJobType(0); } TEST_F(test_schedulerdatabase, getJobIDByJobType_01) { schedulerdatabase_next = false; mBase->getJobIDByJobType(0); } TEST_F(test_schedulerdatabase, updateColorType_01) { schedulerdatabase_next = false; mBase->updateColorType(0, "#000000"); } TEST_F(test_schedulerdatabase, setDbPath_01) { schedulerdatabase_next = false; mBase->setDbPath("123"); EXPECT_EQ(mBase->m_dbPath, "123"); } test_schedulerdatabase.h000066400000000000000000000030431523260663500354100ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_dbmanager// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_SCHEDULERDATABASE_H #define TEST_SCHEDULERDATABASE_H #include "schedulerdatabase.h" #include "gtest/gtest.h" #include "../third-party_stub/stub.h" #include #include #include static bool schedulerdatabase_next = false; static bool schedulerdatabase_stub_exec(const QString&) { schedulerdatabase_next = false; return true; }; static bool schedulerdatabase_stub_next() { static int count = 0; if (!schedulerdatabase_next) { schedulerdatabase_next = true; count = 0; } count++; if (count >= 10) { schedulerdatabase_next = false; count = 0; } return schedulerdatabase_next; }; static QVariant schedulerdatabase_stub_value(const QString&) { return QVariant(); }; class test_schedulerdatabase: public::testing::Test { public: test_schedulerdatabase(); virtual void SetUp() { Stub stub; stub.set((bool(QSqlQuery::*)(const QString&))ADDR(QSqlQuery, exec), schedulerdatabase_stub_exec); stub.set((QVariant(QSqlQuery::*)(const QString&)const)ADDR(QSqlQuery, value), schedulerdatabase_stub_value); stub.set(ADDR(QSqlQuery, next), schedulerdatabase_stub_next); mBase = new SchedulerDatabase(); } virtual void TearDown() { delete mBase; mBase = nullptr; } protected: SchedulerDatabase *mBase = nullptr; }; #endif // TEST_SCHEDULERDATABASE_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_jobremindmanager.cpp000066400000000000000000000062661523260663500327160ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_jobremindmanager.h" #include "../third-party_stub/stub.h" #include "service_stub.h" #include #include void stub_callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList &args) { Q_UNUSED(mode); Q_UNUSED(method); Q_UNUSED(args); } test_jobremindmanager::test_jobremindmanager() { Stub stub; stub.set(ADDR(QDBusAbstractInterface, callWithArgumentList), stub_callWithArgumentList); jobRemindManager = new JobRemindManager(); } test_jobremindmanager::~test_jobremindmanager() { delete jobRemindManager; } QList createJobs() { Job job1; job1.Start = QDateTime::fromString("2020-12-21T00:00:00+08:00", Qt::ISODate); job1.End = QDateTime::fromString("2020-12-21T23:59:00+08:00", Qt::ISODate); job1.AllDay = true; job1.Type = 1; job1.Description = ""; job1.ID = 1; job1.Ignore = "[]"; job1.Title = "UT测试A"; job1.RRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=3"; job1.RecurID = 0; job1.Remind = "1;09:00"; Job job2; job2.Start = QDateTime::fromString("2020-12-22T00:00:00+08:00", Qt::ISODate); job2.End = QDateTime::fromString("2020-12-22T23:59:00+08:00", Qt::ISODate); job2.AllDay = true; job2.Type = 1; job2.Description = ""; job2.ID = 2; job2.Ignore = "[\"2020-12-11T00:00:00+08:00\"]"; job2.Title = "UT测试B"; job2.RRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=2"; job2.RecurID = 0; job2.Remind = "1;09:00"; Job job3; job3.Start = QDateTime::fromString("2020-12-24T00:00:00+08:00", Qt::ISODate); job3.End = QDateTime::fromString("2020-12-24T23:59:00+08:00", Qt::ISODate); job3.AllDay = true; job3.Type = 1; job3.Description = ""; job3.ID = 3; job3.Ignore = "[]"; job3.Title = "UT测试C"; job3.RRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR;COUNT=4"; job3.RecurID = 0; job3.Remind = "1;09:00"; QList jobs; jobs << job1 << job2 << job3; return jobs; } //void JobRemindManager::CallUiOpenSchedule(const Job &job) TEST_F(test_jobremindmanager, CallUiOpenSchedule) { Stub stub; qDBusAbstractInterface_callWithArgumentList_stub(stub); jobRemindManager->CallUiOpenSchedule(createJobs().at(0)); } //void JobRemindManager::RemindJob(const Job &job) TEST_F(test_jobremindmanager, RemindJob) { Stub stub; qDBusAbstractInterface_callWithArgumentList_stub(stub); jobRemindManager->RemindJob(createJobs().at(0)); } //int JobRemindManager::GetRemindAdvanceDays(const QString &remind) TEST_F(test_jobremindmanager, GetRemindAdvanceDays) { const QString remind = "1,09:00"; jobRemindManager->GetRemindAdvanceDays(remind); } //void JobRemindManager::RemindJobLater(const Job &job) TEST_F(test_jobremindmanager, RemindJobLater) { jobRemindManager->RemindJobLater(createJobs().at(0), 1); } //void JobRemindManager::UpdateRemindJobs(const QList &jobs) TEST_F(test_jobremindmanager, UpdateRemindJobs) { jobRemindManager->UpdateRemindJobs(createJobs()); } linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_jobremindmanager.h000066400000000000000000000007711523260663500323560ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_JOBREMINDMANAGER_H #define TEST_JOBREMINDMANAGER_H #include "jobremindmanager.h" #include "gtest/gtest.h" #include class test_jobremindmanager : public QObject, public::testing::Test { public: test_jobremindmanager(); ~test_jobremindmanager(); protected: JobRemindManager *jobRemindManager = nullptr; }; #endif // TEST_JOBREMINDMANAGER_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_lunarandfestival/000077500000000000000000000000001523260663500322365ustar00rootroot00000000000000test_method_interface.cpp000066400000000000000000000133121523260663500372220ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_lunarandfestival// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "test_method_interface.h" #include #include #include test_method_interface::test_method_interface() { } //QString GetLunarMonthName(int lunarmonthname, bool isleap) TEST_F(test_method_interface, GetLunarMonthName) { // 腊月 int lunarmonthname = 12; bool isleap = false; QString lunarMName = GetLunarMonthName(lunarmonthname, isleap); assert("腊月" == lunarMName); // 闰腊月 isleap = true; lunarMName = GetLunarMonthName(lunarmonthname, isleap); assert("闰腊月" == lunarMName); } //QString GetLunarDayName(int lundayname) TEST_F(test_method_interface, GetLunarDayName) { // "åˆ�å…«" int lundayname = 8; QString lunarDayName = GetLunarDayName(lundayname); //qCInfo(CommonLogger) << lunarDayName; assert("åˆ�å…«" == lunarDayName); // "廿五" lundayname = 25; lunarDayName = GetLunarDayName(lundayname); //qCInfo(CommonLogger) << lunarDayName; assert("廿五" == lunarDayName); } //QString GetLunarDayFestival(int monthname, int lunarday, int lunarmonthdays, int solarterm) TEST_F(test_method_interface, GetLunarDayFestival) { // "除夕" int monthname = 12; int lunarday = 30; int lunarmonthdays = 30; int solarterm = 1; QString dayFestival = GetLunarDayFestival(monthname, lunarday, lunarmonthdays, solarterm); //qCInfo(CommonLogger) << dayFestival; assert("除夕" == dayFestival); // "清明节" monthname = 4; lunarday = 2; lunarmonthdays = 23; solarterm = 1; dayFestival = GetLunarDayFestival(monthname, lunarday, lunarmonthdays, solarterm); //qCInfo(CommonLogger) << dayFestival; assert("清明节" == dayFestival); // "" monthname = 5; lunarday = 1; lunarmonthdays = 13; solarterm = 0; dayFestival = GetLunarDayFestival(monthname, lunarday, lunarmonthdays, solarterm); //qCInfo(CommonLogger) << dayFestival; assert("" == dayFestival); } //QString GetSolarTermName(int order) TEST_F(test_method_interface, GetSolarTermName) { // "å°�满" QString stName = GetSolarTermName(4); assert("å°�满" == stName); // "" stName = GetSolarTermName(24); assert("" == stName); } //QString GetGanZhiMonth(int year, int monthzhi) TEST_F(test_method_interface, GetGanZhiMonth) { QString ganzhi = GetGanZhiMonth(2020, 12); assert("戊å­�" == ganzhi); } //QString GetGanZhiYear(int lunaryear) TEST_F(test_method_interface, GetGanZhiYear) { // "庚å­�" QString ganzhi = GetGanZhiYear(2020); assert("庚å­�" == ganzhi); } //QString GetGanZhiDay(int year, int month, int day) TEST_F(test_method_interface, GetGanZhiDay) { // "己丑" QString ganzhi = GetGanZhiDay(2020, 12, 12); assert("己丑" == ganzhi); } //QString GetYearZodiac(int lunaryear) TEST_F(test_method_interface, GetYearZodiac) { // "é¼ " QString Zodiac = GetYearZodiac(2020); assert("é¼ " == Zodiac); // "猪" Zodiac = GetYearZodiac(2019); assert("猪" == Zodiac); } //QVector get25SolarTermJDs(int year, int start) TEST_F(test_method_interface, get25SolarTermJDs) { QVector jds = get25SolarTermJDs(0, 0); } //double GetSolarTermJD(int year, int order) TEST_F(test_method_interface, GetSolarTermJD) { //春分 3月20æ—¥ assert(2.45893e+06 > GetSolarTermJD(2020, 0)); } //bool IsLeapYear(int year) TEST_F(test_method_interface, IsLeapYear) { assert(true == IsLeapYear(2020) && false == IsLeapYear(2019)); } // int GetSolarMonthDays(int year, int month) TEST_F(test_method_interface, GetSolarMonthDays) { assert(29 == GetSolarMonthDays(2020, 2)); } //int GetWeekday(int y, int m, int d) TEST_F(test_method_interface, GetWeekday) { assert(6 == GetWeekday(2020, 2, 29)); } //double DmsToDegrees(int degrees, int mintues, double seconds) TEST_F(test_method_interface, DmsToDegrees) { assert(qAbs(6.05 - DmsToDegrees(4, 3, 7200)) < 0.001); } //double DmsToSeconds(int d, int m, double s) TEST_F(test_method_interface, DmsToSeconds) { assert(qAbs(21780 - DmsToSeconds(4, 3, 7200)) < 0.001); } //double DmsToRadians(int d, int m, int s) TEST_F(test_method_interface, DmsToRadians) { assert(0.105592 <= DmsToRadians(4, 3, 7200)); } //QDateTime GetDateTimeFromJulianDay(double jd) TEST_F(test_method_interface, GetDateTimeFromJulianDay) { QString strJulianDay = "周五 3月 20 03:49:33 2020 GMT"; //qCInfo(CommonLogger) << julianDay.toString(); assert(strJulianDay.contains(GetDateTimeFromJulianDay(GetSolarTermJD(2020, 0)).toString())); } //double GetDeltaT(int year, int month) TEST_F(test_method_interface, GetDeltaT) { const int count = 15; const int year[count] = {-501, 0, 1599, 1699, 1799, 1859, 1899, 1919, 1940, 1960, 1985, 2004, 2049, 2149, 2150 }; for (int i = 0; i < count; ++i) { GetDeltaT(year[i], 6); } } //double JDBeijingTime2UTC(double bjtJD) TEST_F(test_method_interface, JDBeijingTime2UTC) { assert(0.67667 > JDBeijingTime2UTC(1.01)); } //QString GetSolarDayFestival(int year, int month, int day) TEST_F(test_method_interface, GetSolarDayFestival) { QString getFesStr = GetSolarDayFestival(2020, 8, 1); assert("建军节" == getFesStr); getFesStr = GetSolarDayFestival(2020, 6, 1); assert("儿童节" == getFesStr); } //double CalcEarthObliquityNutation(double dt) TEST_F(test_method_interface, CalcEarthObliquityNutation) { CalcEarthObliquityNutation(GetJulianCentury(1)); } //double lightAberration() TEST_F(test_method_interface, lightAberration) { lightAberration(); //qCInfo(CommonLogger) << lightAb; } test_method_interface.h000066400000000000000000000006361523260663500366740ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_lunarandfestival// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef TEST_METHOD_INTERFACE_H #define TEST_METHOD_INTERFACE_H #include "method_interface.h" #include "gtest/gtest.h" #include class test_method_interface : public QObject, public::testing::Test { public: test_method_interface(); }; #endif // TEST_METHOD_INTERFACE_H linuxdeepin-dde-calendar-f6d670a/tests/dde-calendar-service-test/src/test_main.cpp000066400000000000000000000011011523260663500303150ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #include "gtest/gtest.h" #if defined(CMAKE_SAFETYTEST_ARG_ON) #include #endif #include int main(int argc, char **argv) { qputenv("QT_QPA_PLATFORM", "offscreen"); QCoreApplication application(argc, argv); ::testing::InitGoogleTest(&argc, argv); int ret = RUN_ALL_TESTS(); #if defined(CMAKE_SAFETYTEST_ARG_ON) __sanitizer_set_report_path("asan.log"); #endif return ret; } linuxdeepin-dde-calendar-f6d670a/tests/test-prj-running.sh000066400000000000000000000020701523260663500237110ustar00rootroot00000000000000#!/bin/bash builddir=build reportdir=build-ut rm -r $builddir rm -r ../$builddir rm -r $reportdir rm -r ../$reportdir mkdir ../$builddir mkdir ../$reportdir cd ../$builddir #编译 cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_SAFETYTEST_ARG="CMAKE_SAFETYTEST_ARG_ON" .. make -j8 #生æˆ�asan日志和ut测试xml结果 ./tests/dde-calendar-client-test/dde-calendar-test --gtest_output=xml:./report/report_dde-calendar-client.xml sleep 5 ./tests/dde-calendar-service-test/dde-calendar-service-test --gtest_output=xml:./report/report_dde-calendar-service.xml workdir=$(cd ../$(dirname $0)/$builddir; pwd) mkdir -p report #统计代ç �覆盖率并生æˆ�html报告 lcov -d $workdir -c -o ./coverage.info lcov --extract ./coverage.info '*/src/*' -o ./coverage.info lcov --remove ./coverage.info '*/tests/*' -o ./coverage.info genhtml -o ./html ./coverage.info mv ./html/index.html ./html/cov_dde-calendar.html #对asanã€�utã€�代ç �覆盖率结果收集至指定文件夹 cp -r html ../$reportdir/ cp -r report ../$reportdir/ cp -r asan*.log* ../$reportdir/asan_dde-calendar.log exit 0 linuxdeepin-dde-calendar-f6d670a/tests/third-party_stub/000077500000000000000000000000001523260663500234345ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/tests/third-party_stub/addr_pri.h000066400000000000000000000245651523260663500254050ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef __ADDR_PRI_H__ #define __ADDR_PRI_H__ #include #include //base on C++11 /********************************************************** access private function **********************************************************/ namespace std { template using enable_if_t = typename enable_if::type; template using remove_reference_t = typename remove_reference::type; } // std // Unnamed namespace is used to avoid duplicate symbols if the macros are used namespace { namespace private_access_detail { // @tparam TagType, used to declare different "get" funciton overloads for // different members/statics template struct private_access { // Normal lookup cannot find in-class defined (inline) friend functions. friend PtrType get(TagType) { return PtrValue; } }; } // namespace private_access_detail } // namespace // Used macro naming conventions: // The "namespace" of this macro library is PRIVATE_ACCESS, i.e. all // macro here has this prefix. // All implementation macro, which are not meant to be used directly have the // PRIVATE_ACCESS_DETAIL prefix. // Some macros have the ABCD_IMPL form, which means they contain the // implementation details for the specific ABCD macro. #define PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) x##y #define PRIVATE_ACCESS_DETAIL_CONCATENATE(x, y) \ PRIVATE_ACCESS_DETAIL_CONCATENATE_IMPL(x, y) // @param PtrTypeKind E.g if we have "class A", then it can be "A::*" in case of // members, or it can be "*" in case of statics. #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, \ PtrTypeKind) \ namespace { \ namespace private_access_detail { \ /* Tag type, used to declare different get funcitons for different \ * members \ */ \ struct Tag {}; \ /* Explicit instantiation */ \ template struct private_access; \ /* We can build the PtrType only with two aliases */ \ /* E.g. using PtrType = int(int) *; would be illformed */ \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) = Type; \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) = \ PRIVATE_ACCESS_DETAIL_CONCATENATE(Alias_, Tag) PtrTypeKind; \ /* Declare the friend function, now it is visible in namespace scope. \ * Note, \ * we could declare it inside the Tag type too, in that case ADL would \ * find \ * the declaration. By choosing to declare it here, the Tag type remains \ * a \ * simple tag type, it has no other responsibilities. */ \ PRIVATE_ACCESS_DETAIL_CONCATENATE(PtrType_, Tag) get(Tag); \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(Tag, Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ namespace { \ namespace access_private_field { \ Type &Class##Name(Class &&t) { return t.*get(private_access_detail::Tag{}); } \ Type &Class##Name(Class &t) { return t.*get(private_access_detail::Tag{}); } \ /* The following usings are here to avoid duplicate const qualifier \ * warnings \ */ \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag) = Type; \ using PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) = \ const PRIVATE_ACCESS_DETAIL_CONCATENATE(X, Tag); \ PRIVATE_ACCESS_DETAIL_CONCATENATE(Y, Tag) & Class##Name(const Class &t) {\ return t.*get(private_access_detail::Tag{}); \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(Tag, Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, Class::*) \ namespace { \ namespace call_private_fun { \ /* We do perfect forwarding, but we want to restrict the overload set \ * only for objects which have the type Class. */ \ template , \ Class>::value> * = nullptr, \ typename... Args> \ auto Class##Name(Obj &&o, Args &&... args) -> decltype( \ (std::forward(o).* \ get(private_access_detail::Tag{}))(std::forward(args)...)) { \ return (std::forward(o).*get(private_access_detail::Tag{}))( \ std::forward(args)...); \ } \ } \ namespace get_private_fun { \ auto Class##Name() -> decltype( \ get(private_access_detail::Tag{})) { \ return (get(private_access_detail::Tag{})); \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD(Tag, Class, Type, \ Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ namespace { \ namespace access_private_static_field { \ namespace Class { \ Type &Class##Name() { return *get(private_access_detail::Tag{}); } \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN(Tag, Class, Type, \ Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE(Tag, Class, Type, Name, *) \ namespace { \ namespace call_private_static_fun { \ namespace Class { \ template \ auto Class##Name(Args &&... args) -> decltype( \ get(private_access_detail::Tag{})(std::forward(args)...)) { \ return get(private_access_detail::Tag{})( \ std::forward(args)...); \ } \ } \ } \ namespace get_private_static_fun { \ namespace Class { \ auto Class##Name() -> decltype(get(private_access_detail::Tag{})) { \ return get(private_access_detail::Tag{}); \ } \ } \ } \ } #define PRIVATE_ACCESS_DETAIL_UNIQUE_TAG \ PRIVATE_ACCESS_DETAIL_CONCATENATE(PrivateAccessTag, __COUNTER__) #define ACCESS_PRIVATE_FIELD(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FIELD(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ Class, Type, Name) #define ACCESS_PRIVATE_FUN(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_FUN(PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, \ Class, Type, Name) #define ACCESS_PRIVATE_STATIC_FIELD(Class, Type, Name) \ Type Class::Name; \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FIELD( \ PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) #define ACCESS_PRIVATE_STATIC_FUN(Class, Type, Name) \ PRIVATE_ACCESS_DETAIL_ACCESS_PRIVATE_STATIC_FUN( \ PRIVATE_ACCESS_DETAIL_UNIQUE_TAG, Class, Type, Name) #endif linuxdeepin-dde-calendar-f6d670a/tests/third-party_stub/stub.h000066400000000000000000000237301523260663500245670ustar00rootroot00000000000000// SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later #ifndef __STUB_H__ #define __STUB_H__ #ifdef _WIN32 //windows #include #include #else //linux #include #include #endif //c #include #include //c++ #include #include #define ADDR(CLASS_NAME,MEMBER_NAME) (&CLASS_NAME::MEMBER_NAME) /********************************************************** replace function **********************************************************/ #ifdef _WIN32 #define CACHEFLUSH(addr, size) FlushInstructionCache(GetCurrentProcess(), addr, size) #else #define CACHEFLUSH(addr, size) __builtin___clear_cache(addr, addr + size) #endif #if defined(__aarch64__) || defined(_M_ARM64) #define CODESIZE 16U #define CODESIZE_MIN 16U #define CODESIZE_MAX CODESIZE // ldr x9, +8 // br x9 // addr #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t*)fn)[0] = 0x58000040 | 9;\ ((uint32_t*)fn)[1] = 0xd61f0120 | (9 << 5);\ *(long long *)(fn + 8) = (long long )fn_stub;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__arm__) || defined(_M_ARM) #define CODESIZE 8U #define CODESIZE_MIN 8U #define CODESIZE_MAX CODESIZE // ldr pc, [pc, #-4] #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t*)fn)[0] = 0xe51ff004;\ ((uint32_t*)fn)[1] = (uint32_t)fn_stub;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__mips64) #define CODESIZE 80U #define CODESIZE_MIN 80U #define CODESIZE_MAX CODESIZE //MIPS has no PC pointer, so you need to manually enter and exit the stack //120000ce0: 67bdffe0 daddiu sp, sp, -32 //enter the stack //120000ce4: ffbf0018 sd ra, 24(sp) //120000ce8: ffbe0010 sd s8, 16(sp) //120000cec: ffbc0008 sd gp, 8(sp) //120000cf0: 03a0f025 move s8, sp //120000d2c: 03c0e825 move sp, s8 //exit the stack //120000d30: dfbf0018 ld ra, 24(sp) //120000d34: dfbe0010 ld s8, 16(sp) //120000d38: dfbc0008 ld gp, 8(sp) //120000d3c: 67bd0020 daddiu sp, sp, 32 //120000d40: 03e00008 jr ra #define REPLACE_FAR(t, fn, fn_stub)\ ((uint32_t *)fn)[0] = 0x67bdffe0;\ ((uint32_t *)fn)[1] = 0xffbf0018;\ ((uint32_t *)fn)[2] = 0xffbe0010;\ ((uint32_t *)fn)[3] = 0xffbc0008;\ ((uint32_t *)fn)[4] = 0x03a0f025;\ *(uint16_t *)(fn + 20) = (long long)fn_stub >> 32;\ *(fn + 22) = 0x19;\ *(fn + 23) = 0x24;\ ((uint32_t *)fn)[6] = 0x0019cc38;\ *(uint16_t *)(fn + 28) = (long long)fn_stub >> 16;\ *(fn + 30) = 0x39;\ *(fn + 31) = 0x37;\ ((uint32_t *)fn)[8] = 0x0019cc38;\ *(uint16_t *)(fn + 36) = (long long)fn_stub;\ *(fn + 38) = 0x39;\ *(fn + 39) = 0x37;\ ((uint32_t *)fn)[10] = 0x0320f809;\ ((uint32_t *)fn)[11] = 0x00000000;\ ((uint32_t *)fn)[12] = 0x00000000;\ ((uint32_t *)fn)[13] = 0x03c0e825;\ ((uint32_t *)fn)[14] = 0xdfbf0018;\ ((uint32_t *)fn)[15] = 0xdfbe0010;\ ((uint32_t *)fn)[16] = 0xdfbc0008;\ ((uint32_t *)fn)[17] = 0x67bd0020;\ ((uint32_t *)fn)[18] = 0x03e00008;\ ((uint32_t *)fn)[19] = 0x00000000;\ CACHEFLUSH((char *)fn, CODESIZE); #define REPLACE_NEAR(t, fn, fn_stub) REPLACE_FAR(t, fn, fn_stub) #elif defined(__thumb__) || defined(_M_THUMB) #error "Thumb is not supported" #else //__i386__ _x86_64__ _M_IX86 _M_X64 #define CODESIZE 13U #define CODESIZE_MIN 5U #define CODESIZE_MAX CODESIZE //13 byte(jmp m16:64) //movabs $0x102030405060708,%r11 //jmpq *%r11 #define REPLACE_FAR(t, fn, fn_stub)\ *fn = 0x49;\ *(fn + 1) = 0xbb;\ *(long long *)(fn + 2) = (long long)fn_stub;\ *(fn + 10) = 0x41;\ *(fn + 11) = 0xff;\ *(fn + 12) = 0xe3;\ //CACHEFLUSH((char *)fn, CODESIZE); //5 byte(jmp rel32) #define REPLACE_NEAR(t, fn, fn_stub)\ *fn = 0xE9;\ *(int *)(fn + 1) = (int)(fn_stub - fn - CODESIZE_MIN);\ //CACHEFLUSH((char *)fn, CODESIZE); #endif struct func_stub { char *fn; unsigned char code_buf[CODESIZE]; bool far_jmp; }; class Stub { public: Stub() { #ifdef _WIN32 SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); m_pagesize = sys_info.dwPageSize; #else m_pagesize = sysconf(_SC_PAGE_SIZE); #endif if (m_pagesize < 0) { m_pagesize = 4096; } } ~Stub() { std::map::iterator iter; struct func_stub *pstub; for(iter=m_result.begin(); iter != m_result.end(); iter++) { pstub = iter->second; #ifdef _WIN32 DWORD lpflOldProtect; if(0 != VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (0 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { if(pstub->far_jmp) { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); } else { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); } #if defined(__aarch64__) || defined(_M_ARM64) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__arm__) || defined(_M_ARM) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__mips64) CACHEFLUSH(pstub->fn, CODESIZE); #else //__i386__ _x86_64__ _M_IX86 _M_X64 //CACHEFLUSH(pstub->fn, CODESIZE); #endif #ifdef _WIN32 VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect); #else mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC); #endif } iter->second = NULL; delete pstub; } return; } template void set(T addr, S addr_stub) { char * fn; char * fn_stub; fn = addrof(addr); fn_stub = addrof(addr_stub); struct func_stub *pstub; pstub = new func_stub; //start reset(fn); // pstub->fn = fn; if(distanceof(fn, fn_stub)) { pstub->far_jmp = true; std::memcpy(pstub->code_buf, fn, CODESIZE_MAX); } else { pstub->far_jmp = false; std::memcpy(pstub->code_buf, fn, CODESIZE_MIN); } #ifdef _WIN32 DWORD lpflOldProtect; if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { throw("stub set memory protect to w+r+x faild"); } if(pstub->far_jmp) { REPLACE_FAR(this, fn, fn_stub); } else { REPLACE_NEAR(this, fn, fn_stub); } #ifdef _WIN32 if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) #endif { throw("stub set memory protect to r+x failed"); } m_result.insert(std::pair(fn,pstub)); return; } template void reset(T addr) { char * fn; fn = addrof(addr); std::map::iterator iter = m_result.find(fn); if (iter == m_result.end()) { return; } struct func_stub *pstub; pstub = iter->second; #ifdef _WIN32 DWORD lpflOldProtect; if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READWRITE, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_WRITE | PROT_EXEC)) #endif { throw("stub reset memory protect to w+r+x faild"); } if(pstub->far_jmp) { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MAX); } else { std::memcpy(pstub->fn, pstub->code_buf, CODESIZE_MIN); } #if defined(__aarch64__) || defined(_M_ARM64) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__arm__) || defined(_M_ARM) CACHEFLUSH(pstub->fn, CODESIZE); #elif defined(__mips64) CACHEFLUSH(pstub->fn, CODESIZE); #else //__i386__ _x86_64__ _M_IX86 _M_X64 //CACHEFLUSH(pstub->fn, CODESIZE); #endif #ifdef _WIN32 if(0 == VirtualProtect(pageof(pstub->fn), m_pagesize * 2, PAGE_EXECUTE_READ, &lpflOldProtect)) #else if (-1 == mprotect(pageof(pstub->fn), m_pagesize * 2, PROT_READ | PROT_EXEC)) #endif { throw("stub reset memory protect to r+x failed"); } m_result.erase(iter); delete pstub; return; } private: char *pageof(char* addr) { #ifdef _WIN32 return (char *)((unsigned long long)addr & ~(m_pagesize - 1)); #else return (char *)((unsigned long)addr & ~(m_pagesize - 1)); #endif } template char* addrof(T addr) { union { T _s; char* _d; }ut; ut._s = addr; return ut._d; } bool distanceof(char* addr, char* addr_stub) { std::ptrdiff_t diff = addr_stub >= addr ? addr_stub - addr : addr - addr_stub; if((sizeof(addr) > 4) && (((diff >> 31) - 1) > 0)) { return true; } return false; } private: #ifdef _WIN32 //LLP64 long long m_pagesize; #else //LP64 long m_pagesize; #endif std::map m_result; }; #endif linuxdeepin-dde-calendar-f6d670a/toolGenerate/000077500000000000000000000000001523260663500214165ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/000077500000000000000000000000001523260663500240425ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/com.deepin.CalendarAdaptor.cpp000066400000000000000000000024761523260663500316230ustar00rootroot00000000000000/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-calendar/calendar-client/assets/dbus/com.deepin.Calendar.xml -a ./dde-calendar/toolGenerate/qdbusxml2cpp/com.deepin.CalendarAdaptor -i ./dde-calendar/toolGenerate/qdbusxml2cpp/com.deepin.Calendar.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-calendar/toolGenerate/qdbusxml2cpp/com.deepin.CalendarAdaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class CalendarAdaptor */ CalendarAdaptor::CalendarAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } CalendarAdaptor::~CalendarAdaptor() { // destructor } void CalendarAdaptor::OpenSchedule(const QString &job) { // handle method call com.deepin.dde.Calendar.OpenSchedule QMetaObject::invokeMethod(parent(), "OpenSchedule", Q_ARG(QString, job)); } void CalendarAdaptor::RaiseWindow() { // handle method call com.deepin.dde.Calendar.RaiseWindow QMetaObject::invokeMethod(parent(), "RaiseWindow"); } linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/com.deepin.CalendarAdaptor.h000066400000000000000000000030451523260663500312610ustar00rootroot00000000000000/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-calendar/calendar-client/assets/dbus/com.deepin.Calendar.xml -a ./dde-calendar/toolGenerate/qdbusxml2cpp/com.deepin.CalendarAdaptor -i ./dde-calendar/toolGenerate/qdbusxml2cpp/com.deepin.Calendar.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef COM_DEEPIN_CALENDARADAPTOR_H #define COM_DEEPIN_CALENDARADAPTOR_H #include #include #include "./dde-calendar/toolGenerate/qdbusxml2cpp/com.deepin.Calendar.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface com.deepin.dde.Calendar */ class CalendarAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.deepin.dde.Calendar") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" "") public: CalendarAdaptor(QObject *parent); virtual ~CalendarAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS void OpenSchedule(const QString &job); void RaiseWindow(); Q_SIGNALS: // SIGNALS }; #endif linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfoAdaptor.cpp000066400000000000000000000013631523260663500334670ustar00rootroot00000000000000/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-calendar/calendar-client/assets/org.deepin.calendar.metainfo.xml -a ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfoAdaptor -i ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfo.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfoAdaptor.h" #include #include #include #include #include #include #include linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfoAdaptor.h000066400000000000000000000016451523260663500331370ustar00rootroot00000000000000/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-calendar/calendar-client/assets/org.deepin.calendar.metainfo.xml -a ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfoAdaptor -i ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfo.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef ORG_DEEPIN_CALENDAR_METAINFOADAPTOR_H #define ORG_DEEPIN_CALENDAR_METAINFOADAPTOR_H #include #include #include "./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.calendar.metainfo.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE #endif linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenterAdaptor.cpp000066400000000000000000000023361523260663500334320ustar00rootroot00000000000000/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-calendar/calendar-client/src/dbus/org.deepin.dde.ControlCenter.xml -a ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenterAdaptor -i ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenter.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenterAdaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class ControlCenter1Adaptor */ ControlCenter1Adaptor::ControlCenter1Adaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } ControlCenter1Adaptor::~ControlCenter1Adaptor() { // destructor } void ControlCenter1Adaptor::ShowPage(const QString &url) { // handle method call org.deepin.dde.ControlCenter1.ShowPage QMetaObject::invokeMethod(parent(), "ShowPage", Q_ARG(QString, url)); } linuxdeepin-dde-calendar-f6d670a/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenterAdaptor.h000066400000000000000000000030651523260663500330770ustar00rootroot00000000000000/* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-calendar/calendar-client/src/dbus/org.deepin.dde.ControlCenter.xml -a ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenterAdaptor -i ./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenter.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef ORG_DEEPIN_DDE_CONTROLCENTERADAPTOR_H #define ORG_DEEPIN_DDE_CONTROLCENTERADAPTOR_H #include #include #include "./dde-calendar/toolGenerate/qdbusxml2cpp/org.deepin.dde.ControlCenter.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface org.deepin.dde.ControlCenter1 */ class ControlCenter1Adaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.deepin.dde.ControlCenter1") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" "") public: ControlCenter1Adaptor(QObject *parent); virtual ~ControlCenter1Adaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS void ShowPage(const QString &url); Q_SIGNALS: // SIGNALS }; #endif linuxdeepin-dde-calendar-f6d670a/translations/000077500000000000000000000000001523260663500215075ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service.ts000066400000000000000000001455471523260663500260400ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the <a href='/'>Control Center</a> to change system settings Monday Monday Sunday Sunday Use System Setting 12-hour clock 12-hour clock 24-hour clock 24-hour clock CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Manage calendar Manage calendar Calendar account Calendar account Event types Event types General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Name: Name: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ady.ts000066400000000000000000001403301523260663500266560ustar00rootroot00000000000000 AccountItem Sync successful تранÑ�лÑ�циÑ� уÑ�пешна Network error Ошибка Ñ�ети Server exception ИÑ�ключение Ñ�ервера Storage full ПамÑ�ть заполнена AccountManager Local account Локальный аккаунт Event types Типы Ñ�обытий CColorPickerWidget Color Цвет Cancel button Отменить Save button Сохранить CDayMonthView Monday Понедельник Tuesday Вторник Wednesday Среда Thursday Четверг Friday ПÑ�тница Saturday Суббота Sunday ВоÑ�креÑ�енье CDayWindow Y Й M М D Д Lunar Лунный CGraphicsView New Event Ð�овое Ñ�обытие CMonthScheduleNumItem %1 more %1 больше CMonthView New event Ð�овое Ñ�обытие New Event Ð�овое Ñ�обытие CMonthWindow Y Й CMyScheduleView My Event Мое Ñ�обытие OK button ОК Delete button Удалить Edit button Редактировать CPushButton New event type Ð�овый тип Ñ�обытиÑ� CScheduleDlg New Event تÛ�كىن ھەندىس Edit Event تÛ�كىن ھەندىسىنى تەكىر End time must be greater than start time تÛ�كىن ھەندىسىنىڭ ھەندىسى ۋاقىты ھەندىسىنىڭ باش ۋاقىтыغا ÙƒÛ†Ù¾ بولۇشى ھەققىدە OK button تايىن Never ھەققىدە ھەمدە At time of event ھەندىسىنىڭ ۋاقىتىدا 15 minutes before 15 دىن ھەنچىس 30 minutes before 30 دىن ھەنچىس 1 hour before 1 ساچا ھەنچىس 1 day before 1 كۈنى ھەنچىس 2 days before 2 كۈنى ھەنچىس 1 week before 1 Ù‡Û•Ù�تە ھەنچىس On start day (9:00 AM) باش كۈنىدا (9:00 AM) time(s) ۋاقىت(لار) Enter a name please ئىسم بÛ�رىشىڭىز ÙƒÛ�رەك The name can not only contain whitespaces ئىسمنىڭ ھەققىدە ئەمەس ئەنچە ھەجىملىك ئىشلەتكەن Type: تىپى: Description: تەسىر: All Day: كۈندە ئىشلەتكەن: Starts: باشلىنىش: Ends: تÛ�تىنىش: Remind Me: ئادەتلىق قىلغۇن: Repeat: تەكرار: End Repeat: تەكرارنى تÛ�تىش: Calendar account: كەندرىلەر ھەكىملىكى: Calendar account كەندرىلەر ھەكىملىكى Type تىپى Description تەسىر All Day كۈندە ئىشلەتكەن Time: ۋاقىت: Time زمان Solar سولار Lunar لунار Starts شарт Ends Ù†Û�ت Remind Me Ù†Û�تىم Repeat تÛ�كرار Daily روزلى Weekdays Ú¾Û•Ù�تەنىڭ كۈنى Weekly Ú¾Û•Ù�تەلىك Monthly ئايلىك Yearly يللىك End Repeat تÛ�كرارنى Ù†Û�ت After Ù†Û�تىدىن ÙƒÛ�يىن On بۇر Cancel button بەرەك Save button ساقلا CScheduleOperation All occurrences of a repeating event must have the same all-day status. تÛ�كرارلىق ھەدەكى بارلىق ھەدەلەرنىڭ ئەڭ ئەمەللىك ھالىتىنى ئۆز-ئۆزىنىڭ بىر-بىرلىقى بولۇشى شарт. Do you want to change all occurrences? بۇر ھەدەلەرنى ئۆزگەرتىشنى چەقىرىشىڭ مۇمكىن بۇمۇ؟ Cancel button بەرەك Change All بەزىنى ئۆزگەرت You are changing the repeating rule of this event. بۇ ھەدەنىڭ تÛ�كرارلىق قۇرالىنى ئۆزگەرتىۋاتىسىز. You are deleting an event. بۇ ھەدەنى ئۆزگەرتكەن. Are you sure you want to delete this event? بۇ ھەدەنى ئۆزگەرتكەن بولۇشىڭ مۇمكىن بۇمۇ؟ Delete button ئۆزگەرت Do you want to delete all occurrences of this event, or only the selected occurrence? بۇ ھەدەنىڭ بارلىق ھەدەلەرىنى ئۆزگەرتكەن بولۇشىڭ مۇمكىن بۇمۇ، ياكى ئەڭ ÙƒÛ†Ù¾ ئەڭ ئەمەللىك ھەدەنى ئۆزگەرتكەن بولۇشىڭ مۇمكىن بۇمۇ؟ Delete All بەزىنى ئۆزگەرتكەن Delete Only This Event بۇ ھەدەنى ئۆزگەرتكەن Do you want to delete this and all future occurrences of this event, or only the selected occurrence? بۇ ھەدەنى Û‹Û• ئۇنىڭ ئالدىنقى ئەمەللىك ھەدەلەرىنى ئۆزگەرتكەن بولۇشىڭ مۇمكىن بۇمۇ، ياكى ئەڭ ÙƒÛ†Ù¾ ئەڭ ئەمەللىك ھەدەنى ئۆزگەرتكەن بولۇشىڭ مۇمكىن بۇمۇ؟ Delete All Future Events بەزىنىڭ ئالدىنقى ئەمەللىك ھەدەلەرىنى ئۆزگەرتكەن You are changing a repeating event. أنتم تغيرون حدثًا تكراريًا. Do you want to change only this occurrence of the event, or all occurrences? هل ترغب Ù�ÙŠ تغيير هذه الملاحظة Ù�قط، أم جميع الملاحظات؟ All الكل Only This Event Ù�قط هذا الحدث Do you want to change only this occurrence of the event, or this and all future occurrences? هل ترغب Ù�ÙŠ تغيير هذه الملاحظة Ù�قط، أم هذه والملاحظات المستقبلية؟ All Future Events جميع الملاحظات المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترتم شهرًا مزدوجًا، وسوÙ� تÙ�ذكَّرون ÙˆÙ�قًا لقواعد التقويم القمري. OK button أوكي CScheduleSearchDateItem Y ÙŠ M Ù… D د CScheduleSearchItem Edit تعديل Delete حذÙ� All Day ال整天 CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY ال整天 CSettingDialog import ICS file استيراد ملÙ� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync المزامنة الأخيرة Please go to the Control Center to change system settings يرجى الانتقال إلى مركز التحكم لتغيير إعدادات النظام Monday الاثنين Sunday الاحد Use System Setting استخدام إعداد النظام 12-hour clock الساعة بالصيغة 12 ساعة 24-hour clock الساعة بالصيغة 24 ساعة CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y ÙŠ M Ù… W Ùˆ D د Search events and festivals ابحث عن الÙ�عاليات والمناسبات CWeekWindow Week الأسبوع Y ÙŠ CYearScheduleView All Day ال整天 No event لا حدث CYearWindow Y ÙŠ CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو أداة لعرض التواريخ، كما هو مخطط يومي ذكي لتنظيم جميع الأمور Ù�ÙŠ الحياة. Calendarmainwindow Calendar التقويم Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جارÙ� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later Ù�شل التزامن، من Ù�ضلك جرّب مرة أخرى لاحقًا CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other آخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكّرني غدًا Remind me later تذكّرني لاحقًا 15 mins later 15 دقيقة لاحقًا 1 hour later 1 სáƒ�áƒ�თის შემდეგ 4 hours later 4 სáƒ�áƒ�თის შემდეგ Tomorrow ხვáƒ�ლ Schedule Reminder გáƒ�ნლáƒ�გების გáƒ�ნáƒ�ხლებáƒ� %1 to %2 '%1 მდე %2' Today დღეს DragInfoGraphicsView Edit რედáƒ�ქტირებáƒ� Delete წáƒ�შლáƒ� New event áƒ�ხáƒ�ლი მáƒ�მდევნáƒ�ბáƒ� New Event áƒ�ხáƒ�ლი მáƒ�მდევნáƒ�ბáƒ� JobTypeListView export ექსპáƒ�რტი import ICS file იმპáƒ�რტი ICS ფáƒ�ილიდáƒ�ნ You are deleting an event type. თქვენ წáƒ�შლáƒ� მáƒ�მდევნáƒ�ბის ტიპი. All events under this type will be deleted and cannot be recovered. áƒ�მ ტიპის ყველáƒ� მáƒ�მდევნáƒ�ბáƒ� წáƒ�შლული იქნებáƒ� დáƒ� áƒ�რ შეიძლებáƒ� áƒ�ღáƒ�დგინდეს. Cancel button გáƒ�უქმებáƒ� Delete button წáƒ�შლáƒ� QObject Account settings áƒ�კáƒ�უნტის პáƒ�რáƒ�მეტრები Account áƒ�კáƒ�უნტი Select items to be synced áƒ�ირჩიეთ სივრცეები, რáƒ�მლებიც სინქრáƒ�ნიზდებáƒ� Events მáƒ�მდევნáƒ�ბები General settings ზáƒ�გáƒ�დი პáƒ�რáƒ�მეტრები Sync interval სინქრáƒ�ნიზáƒ�ციის ინტერვáƒ�ლი Manage calendar კáƒ�ლენდáƒ�რის მáƒ�რთვáƒ� Calendar account კáƒ�ლენდáƒ�რის áƒ�კáƒ�უნტი Event types მáƒ�მდევნáƒ�ბის ტიპები General ზáƒ�გáƒ�დი First day of week კვირის პირველი დღე Time დრáƒ� Return Today Return დღეს Return Today Today Return Today დღეს ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: ICS File: Cancel button Save button The name can not only contain whitespaces Enter a name please Shortcut Help Delete event Copy Cut Paste Delete Select all SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_af.ts000066400000000000000000001323701523260663500264740ustar00rootroot00000000000000 AccountItem Sync successful Sins geslaag Network error Netwerkfout Server exception Server-afwykings Storage full Opslag vol AccountManager Local account Locale rekening Event types Gebeurtenistipes CColorPickerWidget Color Kleur Cancel button Kanselleer Save button Stoor CDayMonthView Monday Maandag Tuesday Dinsdag Wednesday Woensdag Thursday Donderdag Friday Vrydag Saturday Saterdag Sunday Sondag CDayWindow Y Y M M D D Lunar Lunaar CGraphicsView New Event Nawe gebeurtenis CMonthScheduleNumItem %1 more %1 meer CMonthView New event Nawe gebeurtenis New Event Nawe gebeurtenis CMonthWindow Y Y CMyScheduleView My Event My gebeurtenis OK button OK Delete button Verwyder Edit button Wysig CPushButton New event type Nawe gebeurtenistipe CScheduleDlg New Event Nieuwe wyd Edit Event Wys Event End time must be greater than start time Eindtyd moet groter wees as begin tyd OK button OK Never Nooit At time of event By tyd van wyd 15 minutes before 15 minute voor 30 minutes before 30 minute voor 1 hour before 1 uur voor 1 day before 1 dag voor 2 days before 2 dae voor 1 week before 1 week voor On start day (9:00 AM) Op begin dag (9:00 AM) time(s) tyd(s) Enter a name please Voer asseblief 'n naam in The name can not only contain whitespaces Die naam kan nie alleen spaties bevat nie Type: Soort: Description: Beskrywing: All Day: Hele Dag: Starts: Begin: Ends: Eind: Remind Me: Herinner My: Repeat: Herhaal: End Repeat: Eind Herhaal: Calendar account: Kalenderrekening: Calendar account Kalenderrekening Type Soort Description Beskrywing All Day Hele Dag Time: Tyd: Time Tyd Solar Solaar Lunar Maan Starts Begin Ends Eind Remind Me Herinner my Repeat Herhaal Daily Daaglik Weekdays Weekdae Weekly Weelik Monthly Maandelik Yearly Jaarlik End Repeat Stop herhaal After Na On Op Cancel button Annuleer Save button Stoor CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle voorkomen van 'n herhalende gebeurtenis moet dieselfde hele-dag status hê. Do you want to change all occurrences? Wilt u alle voorkomen verander? Cancel button Annuleer Change All Verander alles You are changing the repeating rule of this event. U verander die herhalende reël van hierdie gebeurtenis. You are deleting an event. U verwyder 'n gebeurtenis. Are you sure you want to delete this event? Is u seker u wil hierdie gebeurtenis verwyder? Delete button Verwyder Do you want to delete all occurrences of this event, or only the selected occurrence? Wilt u alle voorkomen van hierdie gebeurtenis verwyder, of slegs die gekose voorkoms? Delete All Verwyder alles Delete Only This Event Verwyder slegs hierdie gebeurtenis Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Wilt u hierdie en alle toekomstige voorkomen van hierdie gebeurtenis verwyder, of slegs die gekose voorkoms? Delete All Future Events Verwyder alle toekomstige gebeurente You are changing a repeating event. Jy verander 'n herhalende gebeurtenis. Do you want to change only this occurrence of the event, or all occurrences? Wen jy wil verander slegs hierdie voorkoms van die gebeurtenis, of alle voorkoms? All Alles Only This Event Slegs Hierdie Gebeurtenis Do you want to change only this occurrence of the event, or this and all future occurrences? Wen jy wil verander slegs hierdie voorkoms van die gebeurtenis, of hierdie en alle toekomstige voorkoms? All Future Events Alle Toekomstige Gebeurtenisse You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Jy het 'n skipmaand gekies, en sal volgens die reëls van die maan kalender gewaarsku word. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Wysig Delete Verwyder All Day Hele Dag CScheduleSearchView No search results Geen soekresultate CScheduleView ALL DAY ALLE DAG CSettingDialog import ICS file laai ICS-lêer Manual Handmatig 15 mins 15 minute 30 mins 30 minute 1 hour 1 uur 24 hours 24 ure Sync Now Synk Nou Last sync Laaste synk Please go to the Control Center to change system settings Gaan asseblief na die Besturingsentraal om stelselinstellings te verander Monday Maandag Sunday Sondag Use System Setting Gebruik Stelselinstelling 12-hour clock 12-uur-klok 24-hour clock 24-uur-klok CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 uur) (%1 hours) (%1 ure) CTitleWidget Y Y M M W W D D Search events and festivals Soek gebeure en feeste CWeekWindow Week Week Y Y CYearScheduleView All Day Hele Dag No event Geen gebeurte CYearWindow Y Y CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender is 'n instrument om datums te sien, en ook 'n slim daaglikse planer om alles in die lewe te plan. Calendarmainwindow Calendar Kalender Manage Beheer Privacy Policy Privacybeleid Syncing... Synchroniseer... Sync successful Synchronisering suksesvol Sync failed, please try later Synchronisering misluk, probeer asseblief later CenterWidget All Day Hele Dag DAccountDataBase Work Wer Life Lewe Other Ander DAlarmManager Close button Sluit One day before start Een dag voor start Remind me tomorrow Herinner my môre Remind me later Herinner my later 15 mins later 15 min later 1 hour later 1 uur later 4 hours later 4 uur later Tomorrow Môre Schedule Reminder Programmeer herinnering %1 to %2 '%1 tot %2' Today Vandag DragInfoGraphicsView Edit Wysig Delete Verwijder New event Nieuwe gebeurtenis New Event Nieuwe Gebeurtenis JobTypeListView export eksport import ICS file importeer ICS-lêer You are deleting an event type. Jy verwijder 'n gebeurtenistipe. All events under this type will be deleted and cannot be recovered. Al gebeurensisse onder hierdie tipe sal verwijder word en kan nie herstel word nie. Cancel button Kanselleer Delete button Verwijder QObject Account settings Rekening instellings Account Rekening Select items to be synced Kies items wat gesinkroniseer moet word Events Gebeurensisse General settings Algemene instellings Sync interval Synchronisering interval Manage calendar Beheer kalender Calendar account Kalender rekening Event types Gebeurtenistypies General Algemene First day of week Eerste dag van die week Time Tyd Return Today Return Vandag Return Today Today Return Today Vandag ScheduleTypeEditDlg New event type Nieuwe gebeurtenistipe Edit event type Wysig gebeurtenistipe Import ICS file Importeer ICS-lêer Name: Naam: Color: Kleur: ICS File: ICS-lêer: Cancel button Kanselleer Save button Stoor The name can not only contain whitespaces Die naam kan nie slegs wyse spaties bevat nie Enter a name please Voer asseblief 'n naam in Shortcut Help Hulp Delete event Verwys gebeurtenis Copy Kopieer Cut Knip Paste Plak Delete Verwys Select all Kies alles SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Ga UserloginWidget Sign In button Aanmeld Sign Out button Afmeld YearFrame Y Y today Today Today Vandag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_am_ET.ts000066400000000000000000001374061523260663500271000ustar00rootroot00000000000000 AccountItem Sync successful መá‹�áŒ�ść እá‹�áŠ�ታዊ áŠ�á‹� Network error á‹�á‹�ርት አይáŠ�ት እラー Server exception ሴርቨር áˆ�ክንያት Storage full መemory እርáˆ�ጃ AccountManager Local account የቦታ አካá‹�ንት Event types ክስ በት CColorPickerWidget Color ቀለáˆ� Cancel button መሰረዣ Save button ማስቀመጫ CDayMonthView Monday ሰባት Tuesday ሰከላት Wednesday ረቡዕ Thursday ረቡዕ ስንጂ Friday አርብ Saturday ሰኑር Sunday ቅዳሜ CDayWindow Y Y M M D ወ Lunar áŠ�áˆ�ሴ CGraphicsView New Event አዲስ á‹“á‹­áŠ�ት CMonthScheduleNumItem %1 more '%1 የተጨመረ' CMonthView New event አዲስ á‹“á‹­áŠ�ት New Event አዲስ á‹“á‹­áŠ�ት CMonthWindow Y Y CMyScheduleView My Event እኔ á‹“á‹­áŠ�ት OK button እሺ Delete button ማጥá�Šá‹« Edit button ማረሚያ CPushButton New event type አዲስ á‹“á‹­áŠ�ት CScheduleDlg New Event አዲስ á‹“á‹­áŠ�ት Edit Event አስተካክáˆ� á‹“á‹­áŠ�ት End time must be greater than start time መጨረሻ ጊዜ በመáŠ�ሻ ጊዜ ያለበት áŠ�á‹� OK button እሺ Never በá��ጹáˆ� At time of event á‹“á‹­áŠ�ቱ ጊዜ ላይ 15 minutes before 15 á‹“á‹­áŠ�ት በት 30 minutes before 30 á‹“á‹­áŠ�ት በት 1 hour before 1 áˆ�á‹•á‹� በት 1 day before 1 ዓመት በት 2 days before 2 ዓመት በት 1 week before 1 Õ·Õ¡Õ¢Õ¡Õ© Õ¡Õ¼Õ¡Õ» On start day (9:00 AM) Õ�Õ¯Õ¦Õ¢Õ¡Õ¶Õ¯Õ¡Õ¶ Ö…Ö€Õ¨ (9:00 Õ¡.Õ´.) time(s) ÕªÕ¡Õ´Õ¡Õ¶Õ¡Õ¯(Õ¶Õ¥Ö€) Enter a name please Ô½Õ¶Õ¤Ö€Õ¸Ö‚Õ´ Õ¥Õ¶Ö„ Õ´Õ¸Ö‚Õ¿Ö„Õ¡Õ£Ö€Õ¥Ö„ Õ¡Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´Õ¨ The name can not only contain whitespaces Ô±Õ¶Õ¾Õ¡Õ¶Õ¸Ö‚Õ´Õ¨ Õ¯Õ¡Ö€Õ¸Õ² Õ§ Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬ Õ´Õ«Õ¡ÕµÕ¶ Õ¢Õ¡Ö� Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Type: አይáŠ�ት: Description: Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶: All Day: Ô¸Õ¶Õ©Õ¡Ö�Õ«Õ¯ Ö…Ö€Õ¨: Starts: Õ�Õ¯Õ½Õ¸Ö‚Õ´ Õ§: Ends: Ô±Õ¾Õ¡Ö€Õ¿Õ¸Ö‚Õ´ Õ§: Remind Me: Õ€Õ«Õ·Õ¥Õ¬ Õ¥Õ´: Repeat: Ô¿Ö€Õ¯Õ¶Õ¥Õ¬Õ¨: End Repeat: Ô±Õ¾Õ¡Ö€Õ¿Õ¥Õ¬ Õ¯Ö€Õ¯Õ¶Õ¸Ö‚Õ´Õ¨: Calendar account: Ô¿Õ¡Õ¬Õ¥Õ¶Õ¤Õ¡Ö€Õ« Õ°Õ¡Õ·Õ«Õ¾Õ¨: Calendar account Ô¿Õ¡Õ¬Õ¥Õ¶Õ¤Õ¡Ö€Õ« Õ°Õ¡Õ·Õ«Õ¾ Type አይáŠ�ት Description መáŒ�ለጫ All Day Ô¸Õ¶Õ©Õ¡Ö�Õ«Õ¯ Ö…Ö€ Time: ÔºÕ¡Õ´Õ¡Õ¶Õ¡Õ¯: Time ÔºÕ¡Õ´Õ¡Õ¶Õ¡Õ¯ Solar Ô±Ö€Ö‡Õ¡ÕµÕ«Õ¶ Lunar Ô¼Õ¸Ö‚Õ½Õ¡ÕµÕ«Õ¶ Starts Õ�Õ¯Õ½Õ¸Ö‚Õ´ Õ§ Ends Remind Me Õ€Õ«Õ·Õ¥Õ¬ Õ¥Õ´ Repeat መድገሚያ Daily Õ•Ö€Õ¡Õ¯Õ¡Õ¶ Weekdays Õ‡Õ¡Õ¢Õ¡Õ©Õ¾Õ¡Ö€Õ¯ Weekly Õ‡Õ¡Õ¢Õ¡Õ©Õ¡Õ¯Õ¡Õ¶ Monthly Ô±Õ´Õ½Õ¡Õ¯Õ¡Õ¶ Yearly Õ�Õ¡Ö€Õ¥Õ¯Õ¡Õ¶ End Repeat Ô±Õ¾Õ¡Ö€Õ¿Õ¥Õ¬ Õ¯Ö€Õ¯Õ¶Õ¸Ö‚Õ´Õ¨ After Õ€Õ¥Õ¿Õ¸ On ማብሪያ Cancel button መሰረዣ Save button ማስቀመጫ CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ô¿Ö€Õ¯Õ¶Õ¾Õ¸Õ² Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¢Õ¸Õ¬Õ¸Ö€ Õ°Õ¡Õ¶Õ¤Õ¥Õ½Õ¡Ö�Õ¸Ö‚Õ´Õ¶Õ¥Ö€Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¸Ö‚Õ¶Õ¥Õ¶Õ¡Õ¶ Õ´Õ«Õ¡Õ¶Õ´Õ¡Õ¶ Õ¨Õ¶Õ©Õ¡Ö�Õ«Õ¯ Ö…Ö€Õ« Õ¾Õ«Õ³Õ¡Õ¯Õ¨ Do you want to change all occurrences? እርስዎ የáˆ�ሉáˆ� á‹“á‹­áŠ�ቶች ተ измен á‹­á�ˆáˆ�ጋáˆ�? Cancel button መሰረዣ Change All áˆ�ሉን á‹“á‹­áŠ�ቶች ተ измен You are changing the repeating rule of this event. እርስዎ የዚህ አירוע የሚቀå¤� የáˆ�ርጫ ተ измен á‹­á�ˆáˆ�ጋáˆ� You are deleting an event. እርስዎ የአירוע ተ ይሰርá‹� Are you sure you want to delete this event? እርስዎ የዚህ አירוע ተ ይሰርá‹� á‹­á�ˆáˆ�ጋáˆ�? Delete button ማጥá�Šá‹« Do you want to delete all occurrences of this event, or only the selected occurrence? እርስዎ የዚህ አירוע የáˆ�ሉáˆ� á‹“á‹­áŠ�ቶች ተ ይሰርá‹� ወይáˆ� በመ-selection á‹“á‹­áŠ�ት ተ ይሰርá‹� á‹­á�ˆáˆ�ጋáˆ�? Delete All áˆ�ሉን á‹“á‹­áŠ�ቶች ተ ይሰርá‹� Delete Only This Event ዚህ አירוע ተ ይሰርá‹� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? እርስዎ የዚህ አירוע ተ ይሰርá‹� እና የዚህ አירוע የሚቀጣጠሩ á‹“á‹­áŠ�ቶች እና የዚህ አירוע ተ ይሰርá‹� á‹­á�ˆáˆ�ጋáˆ�? እና በመ-selection á‹“á‹­áŠ�ት ተ ይሰርá‹� á‹­á�ˆáˆ�ጋáˆ�? Delete All Future Events áˆ�ሉáˆ� የሚቀጣጠሩ አירוע ተ ይሰርá‹� You are changing a repeating event. እርስዎ የሚቀå¤� አירוע ተ ይሰርá‹� Do you want to change only this occurrence of the event, or all occurrences? እርስዎ የዚህ አירוע ተ ይሰርá‹� ወይáˆ� በመ-selection á‹“á‹­áŠ�ት ተ ይሰርá‹� á‹­á�ˆáˆ�ጋáˆ�? All áˆ�ሉáˆ� Only This Event ዚህ አירוע Do you want to change only this occurrence of the event, or this and all future occurrences? እርስዎ የዚህ አירוע ተ ይሰርá‹� ወይáˆ� የዚህ አירוע ተ ይሰርá‹� እና የሚቀጣጠሩ á‹“á‹­áŠ�ቶች á‹­á�ˆáˆ�ጋáˆ�? All Future Events áˆ�ሉáˆ� የሚቀጣጠሩ አ ×�ירועי×� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. እርስዎ የተመለከበ የተጨረጓáˆ� ስáˆ� ተ ይመለከበ እና የተመለከበ የዚህ ሰሜናዊ የáˆ�ርጫ ተ ይመለከበ OK button እሺ CScheduleSearchDateItem Y Y M M D የቀጣይ CScheduleSearchItem Edit ማረሚያ Delete ማጥá�Šá‹« All Day áˆ�ሉáˆ� ቀን CScheduleSearchView No search results áˆ�ንáˆ� መá�ˆáˆˆáŒŠá‹« የለáˆ� CScheduleView ALL DAY áˆ�ሉáˆ� ቀን CSettingDialog import ICS file ICS መ档 ተ ይመáˆ�ሳáˆ� Manual በ እጅ 15 mins 15 á‹“á‹­áŠ�ት 30 mins 30 á‹“á‹­áŠ�ት 1 hour 1 ሰአት 24 hours 24 ቀን Sync Now አáˆ�ን ተ ይሰርá‹� Last sync የተሻለ ተ ይሰርá‹� Please go to the Control Center to change system settings Monday እር tá»� Sunday ቅዳሜ Use System Setting መቆጣጠር ተ á‹­á�ˆáŒ áˆ­ 12-hour clock ÔºÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ¡Ö�Õ¸Ö‚ÕµÖ� 12-Ö€Õ¤ Õ¿Õ¥Õ½Õ¡Õ¯ 24-hour clock ÔºÕ¡Õ´Õ¡Õ¶Õ¡Õ¯Õ¡Ö�Õ¸Ö‚ÕµÖ� 24-Ö€Õ¤ Õ¿Õ¥Õ½Õ¡Õ¯ CTimeEdit (%1 mins) (%1 Ö€Õ¸ÕºÕ¥) (%1 hour) (%1 ÕªÕ¡Õ´) (%1 hours) (%1 ÕªÕ¡Õ´) CTitleWidget Y Y M M W W D D Search events and festivals ÕˆÖ€Õ¸Õ¶Õ¥Õ¬ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Ö‡ Õ¡Õ´Õ¥Õ¶Õ¡ÕµÕ¶ Õ°Õ¡Õ¶Ö€Õ¡ÕºÕ¥Õ¿Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ CWeekWindow Week Õ‡Õ¡Õ¢Õ¡Õ© Y Y CYearScheduleView All Day Ô¸Õ¶Õ¤Õ¡Õ´Õ¥Õ¶Õ¨ Ö…Ö€Õ¨ No event Ô¸Õ¶Õ¤Õ¡Õ´Õ¥Õ¶Õ¨ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ CYearWindow Y Y CalendarWindow Calendar ቀን መá‰�ጠሪያ Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Ô¿Õ¡Õ¬Õ¥Õ¶Õ¤Õ¡Ö€Õ¨ Ö…Ö€Õ¡Ö�Õ¸Ö‚ÕµÖ�Õ« Õ¿Õ¥Õ½Õ¡Õ¯Õ¶ Õ§, Õ¸Ö€Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ´ Õ§ Õ¡Õ´Õ½Õ¡Õ©Õ¾Õ¥Ö€Õ« Ö‡ Ö…Ö€Õ¥Ö€Õ« Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ« Õ¯Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€, Ö‡ Õ¶Õ¡Ö‡ Õ´Õ¥Õ¯Õ¶ Ö…Ö€Õ¡Ö�Õ¸Ö‚ÕµÖ�Õ« Õ¿Õ¥Õ½Õ¡Õ¯Õ¶ Õ§, Õ¸Ö€Õ¨ Ö…Õ£Õ¿Õ¡Õ£Õ¸Ö€Õ®Õ¸Ö‚Õ´ Õ§ Õ¡Õ´Õ¥Õ¶ Õ«Õ¶Õ¹Õ« ÕºÕ¬Õ¡Õ¶Õ¡Õ¾Õ¸Ö€Õ´Õ¡Õ¶ Õ°Õ¡Õ´Õ¡Ö€Ö‰ Calendarmainwindow Calendar ቀን መá‰�ጠሪያ Manage Ô¿Õ¡Õ¼Õ¡Õ¾Õ¡Ö€Õ¥Õ¬ Privacy Policy Ô±Õ¶Õ¾Õ¿Õ¡Õ¶Õ£Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Ö„Õ¡Ö€Õ¿Õ¥Õ¦Õ¨ Syncing... Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¾Õ¸Ö‚Õ´ Õ§... Sync successful Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¡Õ»Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Sync failed, please try later Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¾Õ¸Ö‚Õ´ Õ§ Õ°Õ¡Õ¶Õ¤Õ¥Õº Õ¡Õ¶Õ°Õ¡Õ»Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¡Õ¶, Õ­Õ¶Õ¤Ö€Õ¸Ö‚Õ´ Õ¥Õ¶Ö„ ÖƒÕ¸Ö€Õ±Õ¥Ö„ Õ¡Õ¾Õ¥Õ¬Õ« Õ¸Ö‚Õ· CenterWidget All Day Ô¸Õ¶Õ¤Õ¡Õ´Õ¥Õ¶Õ¨ Ö…Ö€Õ¨ DAccountDataBase Work Ô±Õ·Õ­Õ¡Õ¿Õ¡Õ¶Ö„ Life Ô¿ÕµÕ¡Õ¶Ö„ Other ለላ DAlarmManager Close button መá‹�ጊያ One day before start አንድ ቀን ከ መጀመሩ በá�Šá‰µ Remind me tomorrow áŠ�ገ አስታá‹�ሰáŠ� Remind me later በኋላ አስታá‹�ሰáŠ� 15 mins later 15 Ö€Õ¸ÕºÕ¥ Õ°Õ¥Õ¿Õ¸ 1 hour later 1 ÕªÕ¡Õ´ Õ°Õ¥Õ¿Õ¸ 4 hours later 4 ÕªÕ¡Õ´ Õ°Õ¥Õ¿Õ¸ Tomorrow áŠ�ገ Schedule Reminder አስታዋሽ ማሰናጃ %1 to %2 %1 እስከ %2 Today ዛሬ DragInfoGraphicsView Edit ማረሚያ Delete ማጥá�Šá‹« New event Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ New Event Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ JobTypeListView export Õ°Õ¡Õ¶Õ¤Õ«Õ½Õ¡Ö�Õ¸Ö‚Ö�Õ¡Õ¯Õ¨ import ICS file ICS Õ¡Õ¶Õ¾Õ¿Õ¡Õ¶Õ£Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¢Õ¡Õ¶Õ¡Õ±Ö‡Õ¨ Õ¶Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Õ¬ You are deleting an event type. Ô´Õ¸Ö‚Ö„ Õ»Õ¡Õ¶Ö„Õ¡Ö€Õ¯Õ¸Ö‚Õ´ Õ¥Ö„ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¿Õ¥Õ½Õ¡Õ¯Õ¨Ö‰ All events under this type will be deleted and cannot be recovered. Ô±ÕµÕ½ Õ¿Õ¥Õ½Õ¡Õ¯Õ« Õ¢Õ¸Õ¬Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Õ¯Õ¡Ö€Õ¤Õ¡Ö�Õ¾Õ¥Õ¶ Ö‡ Õ¹Õ« Õ¯Õ¡Ö€Õ¸Õ² Õ¾Õ¥Ö€Õ¡Õ¯Õ¡Õ¶Õ£Õ¶Õ¾Õ¥Õ¬Ö‰ Cancel button መሰረዣ Delete button ማጥá�Šá‹« QObject Account settings Ô±Õ·Õ­Õ¡Õ¿Õ¡Õ¶Ö„Õ¡ÕµÕ«Õ¶ Õ¶ÕµÕ¸Ö‚Õ©Õ¥Ö€Õ« Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€Õ¨ Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General ባጠቃላይ First day of week Time Return Today Return ዛሬ Return Today Today Return Today ዛሬ ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: ስáˆ�: Color: ICS File: Cancel button መሰረዣ Save button ማስቀመጫ The name can not only contain whitespaces Enter a name please Shortcut Help እርዳታ Delete event Copy ኮá�’ Cut መá‰�ረጫ Paste መለጠá�Šá‹« Delete ማጥá�Šá‹« Select all áˆ�ሉንáˆ� መáˆ�ረጫ SidebarCalendarWidget Y Y M M TimeJumpDialog Go button UserloginWidget Sign In button መáŒ�ቢያ Sign Out button መá‹�ጫ YearFrame Y Y today Today Today ዛሬ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ar.ts000066400000000000000000001353441523260663500265140ustar00rootroot00000000000000 AccountItem Sync successful تم التزامن بنجاح Network error خطأ Ù�ÙŠ الشبكة Server exception استثناء Ù�ÙŠ الخادم Storage full التخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color لون Cancel button إلغاء Save button Ø­Ù�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y السنة M الشهر D اليوم Lunar الهجري CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more 1% أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y السنة CMyScheduleView My Event الحدث الخاص بي OK button مواÙ�Ù‚ Delete button حذÙ� Edit button تحرير CPushButton New event type نوع حدث جديد CScheduleDlg New Event لا أحداث Edit Event تعديل الأحداث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button حسنا Never أبدا At time of event Ù�ÙŠ وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before 1 ساعة قبل 1 day before 1 يوم قبل 2 days before “2“يومين قبل 1 week before 1 أسبوع قبل On start day (9:00 AM) Ù�ÙŠ يوم البَدْء (9:00 صباحا) time(s) الوقت(ج) Enter a name please أدخل اسمًا من Ù�ضلك The name can not only contain whitespaces لا يمكن أن يحتوي الاسم Ù�قط على المساÙ�ات البيضاء Type: النوع: Description: الوصÙ�: All Day: طوال اليوم: Starts: يبدأ: Ends: ينتهي: Remind Me: ذكرني: Repeat: تكرار End Repeat: نهاية التكرار Calendar account: حساب التقويم: Calendar account حساب التقويم Type النوع Description الوصÙ� All Day طوال اليوم Time: الوقت: Time الوقت Solar السولي Lunar الهجري Starts يبدأ Ends ينتهي Remind Me ذكرني Repeat تكرار Daily يوميا Weekdays أيام الأسبوع Weekly أسبوعيا Monthly شهريا Yearly سنويا End Repeat نهاية التكرار After بعد On تشغيل Cancel button إلغاء Save button Ø­Ù�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون لجميع حالات تكرار الحدث Ù†Ù�س الوضع طوال اليوم. Do you want to change all occurrences? هل تريد تغيير كل الأحداث؟ Cancel button إلغاء Change All تغيير الكل You are changing the repeating rule of this event. أنت تغير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذÙ� حدث. Are you sure you want to delete this event? هل أنت متأكد من أنك تريد حذÙ� هذا الحدث؟ Delete button حذÙ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل تريد حذÙ� جميع حالات هذا الحدث، أو Ù�قط الأحداث المحددة؟ Delete All حذÙ� الكل Delete Only This Event حذÙ� هذا الحدث Ù�قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل تريد حذÙ� هذا وجميع الحالات المستقبلية لهذا الحدث، أو Ù�قط الأحداث المحددة؟ Delete All Future Events حذÙ� جميع الأحداث المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث متكرر. Do you want to change only this occurrence of the event, or all occurrences? هل تريد تغيير هذا الحدث Ù�قط، أو كل الأحداث؟ All الجميع Only This Event هذا الحدث Ù�قط Do you want to change only this occurrence of the event, or this and all future occurrences? هل تريد تغيير هذا الحدث Ù�قط، أو هذا وكل الأحداث المستقبلية؟ All Future Events كل الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا شراريًا، وستتم إخبارك ÙˆÙ�قًا للقواعد الخاصة بالتقويم الهجري. OK button مواÙ�Ù‚ CScheduleSearchDateItem Y سنة M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذÙ� All Day طوال اليوم CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY طوال اليوم CSettingDialog import ICS file استيراد ملÙ� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامن الآن Last sync المزامن السابق Please go to the Control Center to change system settings يرجى الانتقال لـ مركز التحكم لتغيير إعدادات النظام Monday الاثنين Sunday الأحد Use System Setting استخدم إعداد النظام 12-hour clock الساعة 12 ساعة 24-hour clock الساعة 24 ساعة CTimeEdit (%1 mins) (%1 دقيقة) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y سنة M شهر W أسبوع D يوم Search events and festivals ابحث عن الأحداث والاحتÙ�الات CWeekWindow Week الأسبوع Y السنة CYearScheduleView All Day طوال اليوم No event لا يوجد حدث CYearWindow Y السنة CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو برنامج لعرض التواريخ وللتخطيط الذكي لجميع الأشياء Ù�ÙŠ الحياة Calendarmainwindow Calendar التقويم Manage الإدارة Privacy Policy سياسة الخصوصية Syncing... جاري المزامنة... Sync successful تم التزامن بنجاح Sync failed, please try later Ù�شل التزامن، من Ù�ضلك حاول لاحقًا CenterWidget All Day طوال اليوم DAccountDataBase Work عمل Life حياة Other أخرى DAlarmManager Close button إغلاق One day before start يوم قبل البداية Remind me tomorrow ذكرني غدا Remind me later ذكرني لاحقا 15 mins later بعد 15 دقيقة 1 hour later بعد ساعة 4 hours later بعد 4 ساعات Tomorrow غدا Schedule Reminder تذكير بالبرنامج %1 to %2 '%1 إلى %2' Today اليوم DragInfoGraphicsView Edit تحرير Delete حذÙ� New event حدث جديد New Event حدث جديد JobTypeListView export التصدير import ICS file استيراد ملÙ� ICS You are deleting an event type. أنت ت Deleting نوع حدث. All events under this type will be deleted and cannot be recovered. جميع الأحداث تحت هذا النوع سيتم حذÙ�ها ولا يمكن استعادتها. Cancel button إلغاء Delete button حذÙ� QObject Account settings إعدادات الحساب Account حساب Select items to be synced اختر العناصر التي سيتم تزامنها Events الأحداث General settings إعدادات عامة Sync interval Ù�ترة التزامن Manage calendar إدارة التقويم Calendar account حساب التقويم Event types أنواع الأحداث General عام First day of week اليوم الأول من الأسبوع Time الوقت Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تعديل نوع الحدث Import ICS file استيراد ملÙ� ICS Name: الاسم : Color: 'اللون:' ICS File: 'ملÙ� ICS:' Cancel button إلغاء Save button Ø­Ù�ظ The name can not only contain whitespaces لا يمكن أن يحتوي الاسم Ù�قط على المساÙ�ات البيضاء Enter a name please أدخل اسمًا من Ù�ضلك Shortcut Help مساعدة Delete event حذÙ� حدث Copy نسخ Cut قص Paste لصق Delete حذÙ� Select all تحديد الكل SidebarCalendarWidget Y السنة M الشهر TimeJumpDialog Go button اذهب UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y السنة today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ast.ts000066400000000000000000001343211523260663500266730ustar00rootroot00000000000000 AccountItem Sync successful التماسك ناجح Network error خطأ Ù�ÙŠ الشبكة Server exception استثناء Ù�ÙŠ الخادم Storage full الخزن ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button إلغاء Save button Ø­Ù�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y ÙŠ M Ù… D د Lunar القمرى CGraphicsView New Event الحدث الجديد CMonthScheduleNumItem %1 more %1 أكثر CMonthView New event الحدث الجديد New Event الحدث الجديد CMonthWindow Y ÙŠ CMyScheduleView My Event الحدث الخاص بي OK button مواÙ�Ù‚ Delete button حذÙ� Edit button تعديل CPushButton New event type نوع حدث جديد CScheduleDlg New Event الحدث الجديد Edit Event تعديل الحدث End time must be greater than start time وقت إنهاء الحدث يجب أن يكون أكبر من وقت البدء OK button مواÙ�Ù‚ Never 从ä¸� At time of event Ù�ÙŠ وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة واحدة قبل 1 day before يوم واحد قبل 2 days before يومين قبل 1 week before أسبوع واحد قبل On start day (9:00 AM) Ù�ÙŠ يوم البدء (9:00 صباحًا) time(s) وقت(ا) Enter a name please الرجاء إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يتكون Ù�قط من الÙ�راغات Type: النوع: Description: الوصÙ�: All Day: الكل يوم: Starts: يبدأ Ù�ÙŠ: Ends: ينتهي Ù�ÙŠ: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب الجدول الزمني: Calendar account حساب الجدول الزمني Type النوع Description الوصÙ� All Day الكل يوم Time: الوقت: Time الوقت Solar الشمسية Lunar القمرية Starts تبدأ Ends تنتهي Remind Me تذكّرني Repeat تكرار Daily يوميًا Weekdays الأيام الأسبوعية Weekly أسبوعيًا Monthly شهرية Yearly سنوية End Repeat انتهي التكرار After بعد On Ù�ÙŠ Cancel button إلغاء Save button Ø­Ù�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. كل الظهورات لحدث تكراري يجب أن تكون بنÙ�س حالة اليوم الكامل. Do you want to change all occurrences? هل ترغب Ù�ÙŠ تغيير جميع الظهورات؟ Cancel button إلغاء Change All تغيير جميعها You are changing the repeating rule of this event. أنت تغيّر قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تÙ�حذّÙ� حدثًا. Are you sure you want to delete this event? هل أنت متأكد من رغبتك Ù�ÙŠ حذÙ� هذا الحدث؟ Delete button حذÙ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب Ù�ÙŠ حذÙ� جميع الظهورات لهذا الحدث، أم Ù�قط الظهور المحدد؟ Delete All حذÙ� جميعها Delete Only This Event حذÙ� هذا الحدث Ù�قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل ترغب Ù�ÙŠ حذÙ� هذا الحدث وكل الظهورات المستقبلية له، أم Ù�قط الظهور المحدد؟ Delete All Future Events حذÙ� جميع الظهورات المستقبلية You are changing a repeating event. Esti cambiando un eventu repetíu. Do you want to change only this occurrence of the event, or all occurrences? Quier cambiar solo esta ocurrencia del eventu, o todas? All Totu Only This Event Solo este eventu Do you want to change only this occurrence of the event, or this and all future occurrences? Quier cambiar solo esta ocurrencia del eventu, o esta y todas las futuras? All Future Events Todos los eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Has seleccionáu un mes bisiesto, y serás recordáu según les regles del calendariu lunar. OK button OK CScheduleSearchDateItem Y S M M D D CScheduleSearchItem Edit Editar Delete Borrar All Day Toda el día CScheduleSearchView No search results Nun hai resultaos de busca CScheduleView ALL DAY TODA EL DÃ�A CSettingDialog import ICS file Importa un fichero ICS Manual Manual 15 mins 15 minutus 30 mins 30 minutus 1 hour 1 hora 24 hours 24 horas Sync Now Sincroniza agora Last sync Última sincronización Please go to the Control Center to change system settings Por favor, vaya al Centru de Control pa cambiar los ajustes del sistema Monday Luns Sunday Domingo Use System Setting Usa configuración del sistema 12-hour clock Reloj de 12 horas 24-hour clock Reloj de 24 horas CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos y festivales CWeekWindow Week Semana Y 'Y' CYearScheduleView All Day ال整天 No event لا حدث CYearWindow Y 'Y' CalendarWindow Calendar الجدول Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. الجدول هو أداة لعرض التواريخ، ومرآة ذكية يومية للجدولة كل شيء Ù�ÙŠ الحياة. Calendarmainwindow Calendar الجدول Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جارÙ� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later Ù�شل التزامن، من Ù�ضلك جرّب مرة أخرى لاحقاً CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other آخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكّرني غدًا Remind me later تذكّرني لاحقاً 15 mins later 15 دقيقة لاحقاً 1 hour later Una hora más tarde 4 hours later Cuatro horas más tarde Tomorrow Mañana Schedule Reminder Recuerdo de programación %1 to %2 '%1 إلى %2' Today Hoy DragInfoGraphicsView Edit Editar Delete Eliminar New event Nuevo evento New Event Nuevo Evento JobTypeListView export exportar import ICS file importar un archivo ICS You are deleting an event type. Estás eliminando un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos los eventos bajo este tipo serán eliminados y no podrán recuperarse. Cancel button Cancelar Delete button Eliminar QObject Account settings Configuración del cuenta Account Cuenta Select items to be synced Selecciona elementos para sincronizar Events Eventos General settings Configuración general Sync interval Intervalo de sincronización Manage calendar Administrar calendario Calendar account Cuenta del calendario Event types Tipos de eventos General General First day of week Primer día de la semana Time Tiempo Return Today Return Hoy Return Today Today Return Today Hoy ScheduleTypeEditDlg New event type Tipu de evento nuevu Edit event type Editar tipu de evento Import ICS file Importar ficheru ICS Name: Nome: Color: Color: ICS File: Ficheru ICS: Cancel button Anular Save button Gardar The name can not only contain whitespaces El nome nun pue solamente cuntener espacios en blancu Enter a name please Introduz un nome, por favor Shortcut Help Axuda Delete event Borrar evento Copy Copiar Cut Cortar Paste Pegar Delete Borrar Select all Seleccionar totu SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Cerrar sesión YearFrame Y Y today Today Today Hoy linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_az.ts000066400000000000000000001333421523260663500265200ustar00rootroot00000000000000 AccountItem Sync successful UÄŸurlu eyniləşdirmÉ™ Network error ŞəbÉ™kÉ™ xÉ™tası Server exception Server istisnası Storage full YaddaÅŸ dolub AccountManager Local account Yerli hesab Event types TÉ™dbirin növlÉ™ri CColorPickerWidget Color RÉ™ng Cancel button İmtina Save button Saxlayın CDayMonthView Monday Bazar ertÉ™si Tuesday ÇərÅŸÉ™nbÉ™ axÅŸamı Wednesday ÇərÅŸÉ™nbÉ™ Thursday CümÉ™ axÅŸamı Friday CümÉ™ Saturday ŞənbÉ™ Sunday Bazar CDayWindow Y İl M Ay D G Lunar Ay CGraphicsView New Event Yeni tÉ™dbir CMonthScheduleNumItem %1 more %1 daha çox CMonthView New event Yeni tÉ™dbir New Event Yeni tÉ™dbir CMonthWindow Y İl CMyScheduleView My Event MÉ™nim tÉ™dbirim OK button OLDU Delete button Silin Edit button DüzÉ™liÅŸ edin CPushButton New event type Yeni tÉ™dbir növü CScheduleDlg New Event Yeni tÉ™dbir Edit Event TÉ™dbirÉ™ düzÉ™liÅŸ etmÉ™k End time must be greater than start time BitmÉ™ tarixi baÅŸlama tarixindÉ™n böyük olmalıdır OK button OK Never Heç vaxt At time of event TÉ™dbir zamanı 15 minutes before 15 dÉ™qiqÉ™ É™vvÉ™l 30 minutes before 30 dÉ™qiqÉ™ É™vvÉ™l 1 hour before 1 saat É™vvÉ™l 1 day before 1 gün É™vvÉ™l 2 days before 2 gün É™vvÉ™l 1 week before 1 hÉ™ftÉ™ É™vvÉ™l On start day (9:00 AM) BaÅŸlanğıc günü (9:00) time(s) vaxt(lar) Enter a name please LütfÉ™n adı daxil edin The name can not only contain whitespaces Ad tÉ™kcÉ™ ara boÅŸluqlarından ibarÉ™t ola bilmÉ™z Type: Növ: Description: TÉ™sviri: All Day: Bütün gün: Starts: BaÅŸlayır: Ends: BaÅŸa çatır: Remind Me: MÉ™nÉ™ xatırlat: Repeat: TÉ™krar: End Repeat: TÉ™krarın sonu: Calendar account: TÉ™qvim hesabı: Calendar account TÉ™qvim hesabı Type Növ Description TÉ™sviri All Day Bütün gün Time: Vaxt: Time Vaxt Solar Günəş Lunar Ay Starts BaÅŸlayır Ends BaÅŸa çatır Remind Me MÉ™nÉ™ xatırlat Repeat TÉ™krar Daily HÉ™r gün Weekdays HÉ™ftÉ™nin günlÉ™ri Weekly HÉ™ftÉ™ Monthly Ay Yearly İl End Repeat TÉ™krarın sonu After Sonra On Açıq Cancel button İmtina Save button Saxlayın CScheduleOperation All occurrences of a repeating event must have the same all-day status. TÉ™krarlanan tÉ™dbirlÉ™rin bütün hadisÉ™lÉ™ri gün boyu eyni statusa malik olmalıdır. Do you want to change all occurrences? Bütün hadisÉ™lÉ™rÉ™ dÉ™yiÅŸmÉ™k istÉ™yrisiniz? Cancel button İmtina Change All Hamısını dÉ™yiÅŸmÉ™k You are changing the repeating rule of this event. Siz bu tÉ™dbirin tÉ™krarlanma qaydasını dÉ™yiÅŸirsiniz. You are deleting an event. Siz tÉ™dbiri silirsiniz. Are you sure you want to delete this event? Bu tÉ™dbiri silmÉ™k istÉ™diyinizÉ™ É™minsiniz? Delete button SilmÉ™k Do you want to delete all occurrences of this event, or only the selected occurrence? Siz bu tÉ™dbirin bütün hadisÉ™lÉ™rini, yoxsa yalnız seçilmiÅŸ hadisÉ™sini silmÉ™k istÉ™yirsiniz? Delete All Hamısını silin Delete Only This Event Yalnız bu tÉ™dbiri silin Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Siz bu tÉ™dbirin bütün gÉ™lÉ™cÉ™k hadisÉ™lÉ™rini, yoxsa yalnız seçilmiÅŸ hadisÉ™sini silmÉ™k istÉ™yirsiniz? Delete All Future Events Bütün gÉ™lÉ™cÉ™k tÉ™dbirlÉ™ri silin You are changing a repeating event. Siz tÉ™krarlanan tÉ™dbiri dÉ™yiÅŸirsiniz. Do you want to change only this occurrence of the event, or all occurrences? Siz bu tÉ™dbirin yalnız bu hadisÉ™sini, yoxsa bütün hadisÉ™lÉ™rini silmÉ™k istÉ™yirsiniz? All Hamısını Only This Event Yalnız bu tÉ™dbiri Do you want to change only this occurrence of the event, or this and all future occurrences? Siz tÉ™dbirin yalnız bu hadisÉ™sini yoxsa, bu vÉ™ bütün gÉ™lÉ™cÉ™k hadisÉ™lÉ™rini silmÉ™k istÉ™yirsiniz? All Future Events Bütün gÉ™lÉ™cÉ™k tÉ™dbirlÉ™r You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Siz uzun ay seÅŸmisiniz vÉ™ xatırlatma ay tÉ™qvimi qaydalarına uyÄŸun olacaq. OK button OLDU CScheduleSearchDateItem Y İl M Ay D G CScheduleSearchItem Edit DüzÉ™liÅŸ edin Delete Silin All Day Bütün gün CScheduleSearchView No search results Axtarış nÉ™ticÉ™siz oldu CScheduleView ALL DAY BÜTÜN GÜN CSettingDialog import ICS file ICS fayli yüklÉ™ Manual Æ�l ilÉ™ 15 mins 15 dÉ™qiqÉ™ 30 mins 30 dÉ™qiqÉ™ 1 hour 1 saat 24 hours 24 saat Sync Now İndi eyniləşdirin Last sync Sonuncu eyniləşmÉ™ Please go to the Control Center to change system settings Sistem ayarlarını dÉ™yiÅŸmÉ™k üçün Kontrol MÉ™rkÉ™zinÉ™ gedin Monday Bazar ertÉ™si Sunday Bazar Use System Setting Sistem Ayarını Kullan 12-hour clock 12 saat vaxt formatı 24-hour clock 24 saat vaxt formatı CTimeEdit (%1 mins) (%1 dÉ™qiqÉ™) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y İl M Ay W H D G Search events and festivals TÉ™dbirlÉ™ri vÉ™ festivalları axtarın CWeekWindow Week HÉ™ftÉ™ Y İl CYearScheduleView All Day Bütün gün No event TÉ™dbir yoxdur CYearWindow Y İl CalendarWindow Calendar TÉ™qvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. TÉ™qvim tarixlÉ™ri göstÉ™rÉ™n vÉ™ hÉ™mçinin gündÉ™lik hÉ™yatınızdakı gÉ™lÉ™cÉ™k iÅŸlÉ™rinizi planlamaq üçün bir gündÉ™likdir. Calendarmainwindow Calendar TÉ™qvim Manage İdarÉ™ edin Privacy Policy MÉ™xfilik SiyasÉ™ti Syncing... Eyniləşdirilir... Sync successful EyniləşdirmÉ™ uÄŸurlu oldu Sync failed, please try later EyniləşdirmÉ™ alınmadı, lütfÉ™n yenidÉ™n cÉ™hd edin CenterWidget All Day Bütün gün DAccountDataBase Work İş Life HÉ™yat Other DigÉ™r DAlarmManager Close button BaÄŸlayın One day before start BaÅŸlamadan bir gün É™vvÉ™l Remind me tomorrow MÉ™nÉ™ sabah xatırlat Remind me later MÉ™nÉ™ sonra xatırlat 15 mins later 15 dÉ™q sonra 1 hour later 1 saat sonra 4 hours later 4 saat sonra Tomorrow Sabah Schedule Reminder Xatırlatma cÉ™dvÉ™li %1 to %2 %1 ilÉ™ %2 arası Today Bu gün DragInfoGraphicsView Edit DüzÉ™lt Delete Sil New event Yeni tÉ™dbir New Event Yeni tÉ™dbir JobTypeListView export export import ICS file ICS fayli yüklÉ™ You are deleting an event type. Siz tÉ™dbir növünü silirsiniz. All events under this type will be deleted and cannot be recovered. Bu qÉ™bildÉ™n bütün tÉ™dbirlÉ™r silinÉ™cÉ™klÉ™r vÉ™ bÉ™rpa oluna bilmÉ™zlÉ™r. Cancel button İmtina Delete button Silin QObject Account settings Hesab ayarları Account İstifadəçi hesabı Select items to be synced EyniləşdirilÉ™cÉ™k elementlÉ™ri seçin Events TÉ™dbirlÉ™r General settings Ümumi ayarlar Sync interval EyniləşdirmÉ™ aralığı Manage calendar TÉ™qvimi idarÉ™ edin Calendar account TÉ™qvim hesabı Event types TÉ™dbirin növlÉ™ri General Ümumi First day of week HÉ™ftÉ™nin ilk günü Time Vaxt Return Today Return Bu gün Return Today Today Return Today Bu gün ScheduleTypeEditDlg New event type Yeni tÉ™dbir növü Edit event type TÉ™dbir növünü dÉ™yiÅŸin Import ICS file ICS faylı yüklÉ™ Name: Ad: Color: RÉ™ng: ICS File: ICS Faylı: Cancel button İmtina Save button Saxla The name can not only contain whitespaces Ad tÉ™kcÉ™ ara boÅŸluqlarından ibarÉ™t ola bilmÉ™z Enter a name please LütfÉ™n adı daxil edin Shortcut Help KömÉ™k Delete event TÉ™dbiri silmÉ™k Copy Kopyala Cut KÉ™smÉ™k Paste Æ�lavÉ™ et Delete Sil Select all Hamısını seçmÉ™k SidebarCalendarWidget Y İl M Ay TimeJumpDialog Go button Keçin UserloginWidget Sign In button Hesaba giriÅŸ Sign Out button Hesabdan çıxış YearFrame Y İl today Today Today Bu gün linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_bg.ts000066400000000000000000001376161523260663500265060ustar00rootroot00000000000000 AccountItem Sync successful СинхронизациÑ� уÑ�пешна Network error Грешка в мрежата Server exception ИÑ�ключениe на Ñ�ървeра Storage full Съхранение запълнено AccountManager Local account Локален акаунт Event types Видове Ñ�ъбитиÑ� CColorPickerWidget Color ЦвÑ�Ñ‚ Cancel button Отказ Save button Запази CDayMonthView Monday Понеделник Tuesday Вторник Wednesday СрÑ�да Thursday Четвъртък Friday Петък Saturday Събота Sunday Ð�еделÑ� CDayWindow Y Г M М D Д Lunar Лунарен CGraphicsView New Event Ð�ово Ñ�ъбитие CMonthScheduleNumItem %1 more %1 повече CMonthView New event Ð�ово Ñ�ъбитие New Event Ð�ово Ñ�ъбитие CMonthWindow Y Г CMyScheduleView My Event Моето Ñ�ъбитие OK button Добре Delete button Изтрий Edit button Редактирай CPushButton New event type Ð�ов вид Ñ�ъбитие CScheduleDlg New Event Ð�ов подвиз Edit Event Редактиране на подвиз End time must be greater than start time Времето на приключване трÑ�бва да е по-голÑ�мо от времето на Ñ�тартиране OK button ДÐ� Never Ð�икога At time of event Ð’ момента на подвиза 15 minutes before 15 минути преди 30 minutes before 30 минути преди 1 hour before 1 чаÑ� преди 1 day before 1 ден преди 2 days before 2 дни преди 1 week before 1 Ñ�едмица преди On start day (9:00 AM) Ð�а денÑ� на Ñ�тартиране (9:00) time(s) време(а) Enter a name please Въведете име, молÑ� The name can not only contain whitespaces Името не може да Ñ�ъдържа Ñ�амо интервали Type: Вид: Description: ОпиÑ�ание: All Day: ЦÑ�л ден: Starts: Старт: Ends: Краен: Remind Me: Ð�апомни ми: Repeat: Повтори: End Repeat: Краен повтор Calendar account: Календарен акаунт: Calendar account Календарен акаунт Type Вид Description ОпиÑ�ание All Day ЦÑ�л ден Time: Време: Time Време Solar Соларно Lunar Лунарно Starts Започва Ends Краи Remind Me Ð�апомни ми Repeat Повтори Daily Дневно Weekdays Работни дни Weekly Седмично Monthly МеÑ�ечно Yearly Годишно End Repeat Краи повторението After След On Върху Cancel button Отказ Save button Запази CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ð’Ñ�ички Ñ�ъбитиÑ� на повтарÑ�що Ñ�е Ñ�ъбитие трÑ�бва да имат Ñ�ъщото Ñ�татуÑ� на цÑ�л ден. Do you want to change all occurrences? ИÑ�кате ли да промените вÑ�ички Ñ�ъбитиÑ�? Cancel button Отказ Change All Промени вÑ�ички You are changing the repeating rule of this event. ПроменÑ�те повтарÑ�щото правило на това Ñ�ъбитие. You are deleting an event. Премахвате Ñ�ъбитие. Are you sure you want to delete this event? Сигурни ли Ñ�те, че иÑ�кате да изтриете това Ñ�ъбитие? Delete button Изтрий Do you want to delete all occurrences of this event, or only the selected occurrence? ИÑ�кате ли да изтриете вÑ�ички Ñ�ъбитиÑ� на това Ñ�ъбитие, или Ñ�амо избраното? Delete All Изтрий вÑ�ички Delete Only This Event Изтрий Ñ�амо това Ñ�ъбитие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ИÑ�кате ли да изтриете това и вÑ�ички бъдещи Ñ�ъбитиÑ�, или Ñ�амо избраното? Delete All Future Events Изтрий вÑ�ички бъдещи Ñ�ъбитиÑ� You are changing a repeating event. ПроменÑ�те повторÑ�що Ñ�ъбитие. Do you want to change only this occurrence of the event, or all occurrences? ИÑ�кате ли да промените Ñ�амо тази инÑ�танциÑ� на Ñ�ъбитието, или вÑ�ички инÑ�танции? All Ð’Ñ�ички Only This Event Само това Ñ�ъбитие Do you want to change only this occurrence of the event, or this and all future occurrences? ИÑ�кате ли да промените Ñ�амо тази инÑ�танциÑ� на Ñ�ъбитието, или тази и вÑ�ички бъдещи инÑ�танции? All Future Events Ð’Ñ�ички бъдещи Ñ�ъбитиÑ� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Избрахте приÑ�кокнат меÑ�ец и ще бъдете извеÑ�тени Ñ�поред правилата на лунниÑ� календар. OK button Да CScheduleSearchDateItem Y Д M М D Д CScheduleSearchItem Edit Редактиране Delete Изтриване All Day ЦÑ�л ден CScheduleSearchView No search results Ð�Ñ�ма резулирани резултати CScheduleView ALL DAY ЦЕЛ ДЕÐ� CSettingDialog import ICS file импортиране ICS файл Manual Ръчно 15 mins 15 минути 30 mins 30 минути 1 hour 1 чаÑ� 24 hours 24 чаÑ�а Sync Now Синхронизиране Ñ�ега Last sync ПоÑ�ледно Ñ�инхронизиране Please go to the Control Center to change system settings МолÑ�, отидете до Центъра за управление, за да промените Ñ�иÑ�темните наÑ�тройки Monday Понеделник Sunday Ð�еделÑ� Use System Setting Използвайте Ñ�иÑ�темни наÑ�тройки 12-hour clock 12-чаÑ�овен чаÑ�овник 24-hour clock 24-чаÑ�овен чаÑ�овник CTimeEdit (%1 mins) (%1 минути) (%1 hour) (%1 чаÑ�) (%1 hours) (%1 чаÑ�а) CTitleWidget Y Г M М W Ð’ D Д Search events and festivals ТърÑ�и Ñ�ъбитиÑ� и феÑ�тивали CWeekWindow Week Седмица Y 'Г' CYearScheduleView All Day ЦÑ�л ден No event Без Ñ�ъбитие CYearWindow Y 'Г' CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар е инÑ�трумент за преглед на дати, и Ñ�ъщо така умно дневно планиране за организиране на вÑ�ички неща в живота. Calendarmainwindow Calendar Календар Manage Управление Privacy Policy Политика за поверителноÑ�Ñ‚ Syncing... Синхронизиране... Sync successful СинхронизациÑ�та е уÑ�пешна Sync failed, please try later СинхронизациÑ�та Ñ�е провали, молÑ� опитайте по-къÑ�но CenterWidget All Day ЦÑ�л ден DAccountDataBase Work Работа Life Живот Other Друго DAlarmManager Close button Затвори One day before start Един ден преди Ñ�тартиране Remind me tomorrow Ð�апомни ми утре Remind me later Ð�апомни ми по-къÑ�но 15 mins later 15 минути по-къÑ�но 1 hour later 1 чаÑ� по-Ñ�ледÑ�твиe 4 hours later 4 чаÑ�а по-Ñ�ледÑ�твиe Tomorrow Утре Schedule Reminder Планиране на напомнÑ�не %1 to %2 '%1 до %2' Today ДнеÑ� DragInfoGraphicsView Edit Редактиране Delete Изтриване New event Ð�ово Ñ�ъбитие New Event Ð�ово Събитие JobTypeListView export изноÑ� import ICS file внеÑ�ете ICS файл You are deleting an event type. Планирате да изтриете тип Ñ�ъбитие. All events under this type will be deleted and cannot be recovered. Ð’Ñ�ички Ñ�ъбитиÑ� под този тип ще бъдат изтрити и не могат да бъдат възÑ�тановени. Cancel button Отказ Delete button Изтриване QObject Account settings Ð�аÑ�тройки на акаунта Account Ð�каунт Select items to be synced Изберете елементи за Ñ�инхронизиране Events СъбитиÑ� General settings Общи наÑ�тройки Sync interval Интервал за Ñ�инхронизиране Manage calendar Управление на календар Calendar account Календарен акаунт Event types Типове Ñ�ъбитиÑ� General Общи First day of week Първи ден от Ñ�едмицата Time Време Return Today Return ДнеÑ� Return Today Today Return Today ДнеÑ� ScheduleTypeEditDlg New event type Ð�ов тип Ñ�ъбитие Edit event type Редактиране на тип Ñ�ъбитие Import ICS file Импортиране ICS файл Name: Име: Color: ЦвÑ�Ñ‚: ICS File: ICS Файл: Cancel button Отказ Save button Запази The name can not only contain whitespaces Името не може да Ñ�ъдържа Ñ�амо интервали Enter a name please МолÑ�, въведете име Shortcut Help Помощ Delete event Изтриване на Ñ�ъбитие Copy Копиране Cut Ð�ож Paste ПоÑ�тавÑ�не Delete Изтриване Select all Изберете вÑ�ичко SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Върви UserloginWidget Sign In button Влез Sign Out button Излез YearFrame Y Г today Today Today ДнеÑ� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_bn.ts000066400000000000000000001436501523260663500265100ustar00rootroot00000000000000 AccountItem Sync successful সিঙà§�ক সফল Network error নেটওয়ারà§�ক তà§�রà§�টি Server exception সারà§�ভার অপেকà§�ষা Storage full সà§�টোরেজ পূরà§�ণ AccountManager Local account সà§�থানীয় অà§�যাকাউনà§�ট Event types সমà§�পরà§�কিত ধরণ CColorPickerWidget Color রং Cancel button বাতিল Save button সংরকà§�ষণ CDayMonthView Monday সোমবার Tuesday মঙà§�গলবার Wednesday বà§�ধবার Thursday বৃহসà§�পতিবার Friday শà§�কà§�রবার Saturday শনিবার Sunday রবিবার CDayWindow Y য M ম D ড Lunar লà§�নার CGraphicsView New Event নতà§�ন ঘটনা CMonthScheduleNumItem %1 more %1 বেশি CMonthView New event নতà§�ন ঘটনা New Event নতà§�ন ঘটনা CMonthWindow Y য CMyScheduleView My Event আমার ঘটনা OK button ও.কে. Delete button মà§�ছà§�ন Edit button সমà§�পাদনা CPushButton New event type নতà§�ন ঘটনা ধরণ CScheduleDlg New Event নতà§�ন ঘটনা Edit Event সমà§�পাদনা ঘটনা End time must be greater than start time শেষ সময় শà§�রà§� সময়ের চেয়ে বড় হতে হবে OK button ও.কি. Never কখনও নয় At time of event ঘটনার সময় 15 minutes before 15 মিনিট আগে 30 minutes before 30 মিনিট আগে 1 hour before 1 ঘনà§�টা আগে 1 day before 1 দিন আগে 2 days before 2 দিন আগে 1 week before 1 সপà§�তাহ আগে On start day (9:00 AM) শà§�রà§� দিনে (9:00 সকাল) time(s) সময়(গà§�লি) Enter a name please নাম দিন দয়া করে The name can not only contain whitespaces নাম কেবলমাতà§�র সà§�পেস বাদে অনà§�য কিছà§� না হতে হবে Type: পà§�রকার: Description: বরà§�ণনা: All Day: পà§�রো দিন: Starts: শà§�রà§� হয়: Ends: শেষ হয়: Remind Me: তোমাকে অনà§�সà§�মরণ দিন: Repeat: পà§�নরাবৃতà§�তি: End Repeat: পà§�নরাবৃতà§�তি শেষ করà§�ন: Calendar account: কà§�যালেনà§�ডার অà§�যাকাউনà§�ট: Calendar account কà§�যালেনà§�ডার অà§�যাকাউনà§�ট Type পà§�রকার Description বরà§�ণনা All Day পà§�রো দিন Time: সময়: Time সময় Solar সৌর Lunar চাà¦�দের Starts শà§�রà§� হয় Ends শেষ হয় Remind Me আমাকে অনà§�সà§�মরণ দাও Repeat পà§�নরাবৃতà§�তি Daily দৈনিক Weekdays পরà§�বত দিবস Weekly সাপà§�তাহিক Monthly মাসিক Yearly বারà§�ষিক End Repeat পà§�নরাবৃতà§�তি শেষ করà§�ন After পরে On উপরে Cancel button বাতিল Save button সংরকà§�ষণ CScheduleOperation All occurrences of a repeating event must have the same all-day status. à¦�কটি পà§�নরাবৃতà§�তি ঘটনার সব ঘটনা à¦�কই সময় অবসà§�থা থাকতে হবে। Do you want to change all occurrences? আপনি সব ঘটনা পরিবরà§�তন করতে চান? Cancel button বাতিল Change All সব পরিবরà§�তন করà§�ন You are changing the repeating rule of this event. আপনি à¦�ই ঘটনার পà§�নরাবৃতà§�তি নিয়ম পরিবরà§�তন করছেন। You are deleting an event. আপনি à¦�কটি ঘটনা মà§�ছছেন। Are you sure you want to delete this event? আপনি à¦�ই ঘটনা মà§�ছতে চান কি? Delete button মà§�ছà§�ন Do you want to delete all occurrences of this event, or only the selected occurrence? আপনি à¦�ই ঘটনার সব ঘটনা মà§�ছতে চান কি, বা কেবল নিরà§�বাচিত ঘটনাটি মà§�ছতে চান? Delete All সব মà§�ছà§�ন Delete Only This Event কেবল à¦�ই ঘটনা মà§�ছà§�ন Do you want to delete this and all future occurrences of this event, or only the selected occurrence? আপনি à¦�ই ঘটনার à¦�ই ঘটনা à¦�বং ভবিষà§�যতের সব ঘটনা মà§�ছতে চান কি, বা কেবল নিরà§�বাচিত ঘটনাটি মà§�ছতে চান? Delete All Future Events সব ভবিষà§�যতের ঘটনা মà§�ছà§�ন You are changing a repeating event. আপনি à¦�কটি পà§�নরাবৃতà§�তি ঘটনা পরিবরà§�তন করছেন। Do you want to change only this occurrence of the event, or all occurrences? আপনি ঘটনার কেবল à¦�ই ঘটনাটি পরিবরà§�তন করতে চান কিংবা সব ঘটনা? All সব Only This Event কেবল à¦�ই ঘটনা Do you want to change only this occurrence of the event, or this and all future occurrences? আপনি ঘটনার কেবল à¦�ই ঘটনাটি পরিবরà§�তন করতে চান কিংবা à¦�ই à¦�বং সব ভবিষà§�যতের ঘটনা? All Future Events সব ভবিষà§�যতের ঘটনা You have selected a leap month, and will be reminded according to the rules of the lunar calendar. আপনি à¦�কটি কà§�রমাগত মাস বেছে নেন, à¦�বং চানà§�দà§�র কà§�যালেনà§�ডারের নিয়মানà§�যায়ী আপনকে সà§�মরণ করানো হবে। OK button ও.কি CScheduleSearchDateItem Y পূরà§�ব M মাস D দিন CScheduleSearchItem Edit সমà§�পাদনা Delete মà§�ছà§�ন All Day সমà§�পূরà§�ণ দিন CScheduleSearchView No search results অনà§�সনà§�ধান ফলাফল নেই CScheduleView ALL DAY সমà§�পূরà§�ণ দিন CSettingDialog import ICS file ICS ফাইল আমদানি করà§�ন Manual মà§�যানà§�য়াল 15 mins 15 মিনিট 30 mins 30 মিনিট 1 hour 1 ঘনà§�টা 24 hours 24 ঘনà§�টা Sync Now à¦�খন সিঙà§�ক করà§�ন Last sync শেষ সিঙà§�ক Please go to the Control Center to change system settings দà§�ঃখিত, বà§�যবসà§�থাপনা করার জনà§�য অনà§�গà§�রহ করে কনà§�টà§�রোল সেনà§�টার à¦� যান Monday শনিবার Sunday রবিবার Use System Setting সিসà§�টেম বà§�যবসà§�থাপনা বà§�যবহার করà§�ন 12-hour clock 12 ঘনà§�টা ঘড়ি 24-hour clock 24 ঘনà§�টা ঘড়ি CTimeEdit (%1 mins) (%1 মিনিট) (%1 hour) (%1 ঘনà§�টা) (%1 hours) (%1 ঘনà§�টা) CTitleWidget Y য় M à¦�ম W ও D ডি Search events and festivals সমাপà§�ত ঘটনা à¦�বং উৎসব খà§�à¦�জà§�ন CWeekWindow Week সপà§�তাহ Y 'য়' CYearScheduleView All Day সমসà§�ত দিন No event কোন ঘটনা নেই CYearWindow Y 'য়' CalendarWindow Calendar কà§�যালেনà§�ডার Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. কà§�যালেনà§�ডার তারিখ দেখার à¦�কটি যনà§�তà§�র à¦�বং জীবনের সমসà§�ত কিছà§� সà§�রেফ করার জনà§�য à¦�কটি চাকরি পরিকলà§�পনা করার জনà§�য à¦�কটি বà§�দà§�ধিমান দৈনিক পরিকলà§�পনা যনà§�তà§�র। Calendarmainwindow Calendar কà§�যালেনà§�ডার Manage পরিচালনা Privacy Policy গোপনীয়তা নীতি Syncing... সিঙà§�কিং... Sync successful সিঙà§�কিং সফল Sync failed, please try later সিঙà§�কিং বà§�যরà§�থ, অনà§�গà§�রহ করে পরে চেষà§�টা করà§�ন CenterWidget All Day সমসà§�ত দিন DAccountDataBase Work কাজ Life জীবন Other অনà§�য DAlarmManager Close button বনà§�ধ করà§�ন One day before start পà§�রারমà§�ভের আগে à¦�ক দিন Remind me tomorrow আমাকে আগামী দিন অনà§�রোধ করà§�ন Remind me later আমাকে পরে অনà§�রোধ করà§�ন 15 mins later 15 মিনিট পরে 1 hour later à¦�ক ঘনà§�টা পর 4 hours later চার ঘনà§�টা পর Tomorrow আগামীকাল Schedule Reminder সà§�রোত অনà§�সà§�মরণ %1 to %2 '%1 থেকে %2' Today আজ DragInfoGraphicsView Edit সমà§�পাদনা Delete মà§�ছà§�ন New event নতà§�ন ঘটনা New Event নতà§�ন ঘটনা JobTypeListView export পরিমোকà§�তি import ICS file ICS ফাইল আমনà§�তà§�রণ করà§�ন You are deleting an event type. আপনি à¦�কটি ঘটনা ধরন মà§�ছছেন। All events under this type will be deleted and cannot be recovered. à¦�ই ধরনের সব ঘটনা মà§�ছে ফেলা হবে à¦�বং আবার পà§�নরà§�দà§�ধার করা যাবে না। Cancel button বাতিল Delete button মà§�ছà§�ন QObject Account settings অà§�যাকাউনà§�ট সেটিংস Account অà§�যাকাউনà§�ট Select items to be synced সিঙà§�ক করার জনà§�য পà§�নরায় পছনà§�দ করà§�ন Events ঘটনা General settings সাধারণ সেটিংস Sync interval সিঙà§�ক ইনà§�টারভাল Manage calendar কà§�যালেনà§�ডার পরিচালনা Calendar account কà§�যালেনà§�ডার অà§�যাকাউনà§�ট Event types ঘটনা ধরন General সাধারণ First day of week সপà§�তাহের পà§�রথম দিন Time সময় Return Today Return ফিরে আসà§�ন Return Today Today Return Today আজ ফিরে আসà§�ন ScheduleTypeEditDlg New event type নতà§�ন ইভেনà§�ট টাইপ Edit event type ইভেনà§�ট টাইপ সমà§�পাদনা করà§�ন Import ICS file ICS ফাইল আমদানি করà§�ন Name: নাম: Color: রং: ICS File: ICS ফাইল: Cancel button বাতিল Save button সংরকà§�ষণ The name can not only contain whitespaces নাম কেবলমাতà§�র সà§�পেস বা খালি সà§�থান ধারণ করতে পারে না Enter a name please দয়া করে à¦�কটি নাম পà§�রবেশ করান Shortcut Help সাহাযà§�য Delete event ইভেনà§�ট মà§�ছà§�ন Copy কপি Cut কাট Paste পেসà§�ট Delete মà§�ছà§�ন Select all সবগà§�লো নিরà§�বাচন করà§�ন SidebarCalendarWidget Y জি M মাস TimeJumpDialog Go button যান UserloginWidget Sign In button লগ ইন Sign Out button লগ আউট YearFrame Y জি today Today Today আজ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_bo.ts000066400000000000000000001533221523260663500265060ustar00rootroot00000000000000 AccountItem Sync successful མཉམ་བགྲོད་ལེགས་གྲུབà¼� Network error དྲ་རྒྱ་ནོར་བà¼� Server exception ཞབས་ཞུ་འཕྲུལ་ཆས་རྒྱུན་འགལà¼� Storage full ཉར་གསོག་གང་བà¼� AccountManager Local account རང་སའི་རྩའི་à½�ྲà¼� Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲསà¼� CColorPickerWidget Color ཚོན་མདོག Cancel button འདོར་བà¼� Save button ཉར་གསོག་ CDayMonthView Monday གཟའ་ཟླ་བà¼� Tuesday གཟའ་མིག་དམརà¼� Wednesday གཟའ་ལྷག་པà¼� Thursday གཟའ་ཕུར་བུà¼� Friday གཟའ་པ་སངསà¼� Saturday གཟའ་སྤེན་པà¼� Sunday གཟའ་ཉི་མà¼� CDayWindow Y ལོà¼� M ཟླà¼� D ཚེསà¼� Lunar ལུགས་རྙིང་ལོ་à½�ོà¼� CGraphicsView New Event ལས་རིམ་གསར་པà¼� CMonthScheduleNumItem %1 more ད་དུང་%1ཡོདà¼� CMonthView New event ལས་རིམ་གསར་པà¼� New Event ལས་རིམ་གསར་པà¼� CMonthWindow Y ལོà¼� CMyScheduleView My Event ངའི་ལས་རིམà¼� OK button གà½�ན་à½�ེལà¼� Delete button སུབ་པà¼� Edit button རྩོམ་སྒྲིག CPushButton New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགསà¼� CScheduleDlg New Event ལས་རིམ་གསར་པà¼� Edit Event ལས་རིམ་རྩོམ་སྒྲིག End time must be greater than start time མཇུག་འགྲིལ་བའི་དུས་ཚོད་འགོ་འཛུགས་དུས་ཚོད་ལས་འཕྱི་བ་དགོསà¼� OK button གà½�ན་à½�ེལà¼� Never ནམ་ཡང་མིནà¼� At time of event ལས་རིམ་འགོ་འཛུགས་དུསà¼� 15 minutes before སà¾�ར་མ་15སྔོན་ལà¼� 30 minutes before སà¾�ར་མ་30སྔོན་ལà¼� 1 hour before ཆུ་ཚོད་1སྔོན་ལà¼� 1 day before ཉིན་1སྔོན་ལà¼� 2 days before ཉིན་2སྔོན་ལà¼� 1 week before གཟའ་འà½�ོར་1སྔོན་ལà¼� On start day (9:00 AM) ལས་རིམ་འགོ་ཚུགས་པའི་ཉིནà¼�(9:00སྔ་དྲོའི་ཆུ་ཚོདà¼�) time(s) à½�ེངས་གྲངསà¼�(à½�ེངས) Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་à¼� The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བསà¼� བཟོ་བཅོས་བྱེད་རོགསà¼� Type: རིགས་གྲསà¼� Description: ནང་དོནà¼� All Day: ཉིན་གང་à¼� Starts: འགོ་འཛུགས་དུས་ཚོདà¼� Ends: མཇུག་སྒྲིལ་དུས་ཚོདà¼� Remind Me: དྲན་སà¾�ུལà¼� Repeat: བསà¾�ྱར་ཟློསà¼� End Repeat: བསà¾�ྱར་ཟློས་མཇུག་འགྲིལ་བà¼� Calendar account: ལོ་à½�ོའི་རྩིས་à½�ྲà¼� Calendar account ལོ་à½�ོའི་རྩིས་à½�ྲà¼� Type རིགས་གྲསà¼� Description ནང་དོནà¼� All Day ཉིན་གང་à¼� Time: དུས་ཚོདà¼� Time à½�ོ་འཇུག་པའི་དུས་ཚོདà¼� Solar སྤྱི་ལོà¼� Lunar ལུགས་རྙིང་ལོ་à½�ོà¼� Starts འགོ་འཛུགས་དུས་ཚོདà¼� Ends མཇུག་སྒྲིལ་དུས་ཚོདà¼� Remind Me དྲན་སà¾�ུལà¼� Repeat བསà¾�ྲར་ཟློསà¼� Daily ཉིན་རེà¼� Weekdays ལས་ཀའི་ཉིན་གྲངསà¼� Weekly བདུན་རེà¼� Monthly ཟླ་རེà¼� Yearly ལོ་རེà¼� End Repeat བསà¾�ྱར་ཟློས་མཇུག་འགྲིལ་བà¼� After རྗེས་ལà¼� On ལà¼� Cancel button ཕྱིར་འà½�ེནà¼� Save button ཉར་གསོག་ CScheduleOperation All occurrences of a repeating event must have the same all-day status. བསà¾�ྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་གྱི་བསà¾�ྱར་ཟློས་ཚང་མར་ཉིན་ཧྲིལ་པོའི་རྣམ་པ་གཅིག་མཚུངས་ཡོད་དགོསà¼� Do you want to change all occurrences? à½�ྱོད་ཀྱིས་བསà¾�ྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམà¼� Cancel button ཕྱིར་འà½�ེནà¼� Change All ཚང་མ་བཟོ་བཅོས་བྱེདà¼� You are changing the repeating rule of this event. à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་གྱི་བསà¾�ྱར་ཟློས་ཀྱི་སྒྲིག་སྲོལ་བཟོ་བཅོས་བྱེད་བཞིན་ཡོདà¼� You are deleting an event. à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་བསུབ་བཞིན་ཡོདà¼� Are you sure you want to delete this event? à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདི་བསུབ་རྒྱུ་ཡིན་པ་གà½�ན་འà½�ེལ་ལམà¼� Delete button སུབ་པà¼� Do you want to delete all occurrences of this event, or only the selected occurrence? à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསà¾�ྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམà¼� ཡང་ན་བདམས་ཡོད་པའི་བསà¾�ྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིནà¼� Delete All ཚང་མ་སུབ་པà¼� Delete Only This Event ཉིན་རེའི་ལས་རིམ་འདི་སུབ་པà¼� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསà¾�ྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བསà¾�ྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམà¼� ཡང་ན་བདམས་ཡོད་པའི་བསà¾�ྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིནà¼� Delete All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་པà¼� You are changing a repeating event. à½�ྱོད་ཀྱིས་བསà¾�ྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་དག་བཟོ་བཅོས་བྱེད་བཞིན་ཡོདà¼� Do you want to change only this occurrence of the event, or all occurrences? à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསà¾�ྱར་ཟློས་འདི་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམà¼� ཡང་ན་དེའི་བསà¾�ྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིནà¼� All ཉིན་རེའི་ལས་རིམ་ཆ་ཚང་à¼� Only This Event ཉིན་རེའི་ལས་རིམ་འདི་ཉིདà¼� Do you want to change only this occurrence of the event, or this and all future occurrences? à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བསà¾�ྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བསà¾�ྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམà¼� ཡང་ན་བདམས་ཡོད་པའི་བསà¾�ྱར་ཟློས་དག་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིནà¼� All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མà¼� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. à½�ྱོད་ཀྱིས་བདམས་པ་དེ་ཟླ་བཤོལ་ཡིན་པསà¼� ལུགས་རྙིང་ལོ་à½�ོའི་སྒྲིག་སྲོལ་ལྟར་དྲན་སà¾�ུལ་བྱེད་སྲིདà¼� OK button གà½�ན་à½�ེལà¼� CScheduleSearchDateItem Y ལོà¼� M ཟླà¼� D ཚེསà¼� CScheduleSearchItem Edit རྩོམ་སྒྲིག Delete སུབ་པà¼� All Day ཉིན་གང་à¼� CScheduleSearchView No search results འཚོལ་ཞིབ་བྱས་འབྲས་མེདà¼� CScheduleView ALL DAY ཉིན་གང་à¼� CSettingDialog import ICS file ཡིག་ཆོས་སོགས་རྒྱུད་བཟུང་à¼� Manual ལག་à½�བསà¼� 15 mins སà¾�ར་མ་15རེà¼� 30 mins སà¾�ར་མ་30རེà¼� 1 hour ཆུ་ཚོད་1རེà¼� 24 hours ཆུ་ཚོད་24རེà¼� Sync Now ལམ་སེང་མཉམ་བགྲོདà¼� Last sync ཉེ་དུས་ཀྱི་མཉམ་བགྲོད་དུས་ཚོདà¼� Please go to the Control Center to change system settings བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབ་བྱེད་སྒྲིབà¼� Monday གཟའ་ཟླ་བà¼� Sunday གཟའ་ཉི་མà¼� Use System Setting 12-hour clock ཆུ་ཚོད་12ཀྱི་ལུགསà¼� 24-hour clock ཆུ་ཚོད་24ཡི་ལུགསà¼� CTimeEdit (%1 mins) (%1སà¾�ར་མà¼�) (%1 hour) (%1ཆུ་ཚོདà¼�) (%1 hours) (%1ཆུ་ཚོདà¼�) CTitleWidget Y ལོà¼� M ཟླà¼� W གཟའà¼� D ཚེསà¼� Search events and festivals ཉིན་རེའི་ལས་རིམ་དང་དུས་ཆེན་འཚོལ་ཞིབà¼� CWeekWindow Week གཟའ་འà½�ོརà¼� Y ལོà¼� CYearScheduleView All Day ཉིན་གང་à¼� No event ལས་རིམ་མེདà¼� CYearWindow Y ལོà¼� CalendarWindow Calendar ལོ་à½�ོà¼� Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ལོ་à½�ོ་ནི་ཚེས་གྲངས་བལྟ་བ་དང་ལས་རིམ་དོ་དམ་བྱེད་པའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེདà¼� Calendarmainwindow Calendar ལོ་à½�ོà¼� Manage དོ་དམà¼� Privacy Policy གསང་དོན་སྲིད་ཇུསà¼� Syncing... མཉམ་བགྲོད་བྱེད་བཞིན་པà¼� Sync successful མཉམ་བགྲོད་ལེགས་གྲུབà¼� Sync failed, please try later མཉམ་བགྲོད་བྱེད་མ་à½�ུབ་པསà¼� à½�ོག་ཙམ་ནས་ཡང་བསà¾�ྱར་ཚོད་ལྟ་བྱོསà¼� CenterWidget All Day ཉིན་གང་à¼� DAccountDataBase Work ལས་ཀ Life འཆོ་བà¼� Other གཞན་དག DAlarmManager Close button à½�་རྒྱག One day before start ཉིན་1སྔོན་ལ་དྲན་སà¾�ུལ་བྱེད་པà¼� Remind me tomorrow སང་ཉིན་དྲན་སà¾�ུལ་བྱེདà¼� Remind me later གà½�ོགས་ཙམ་ནས་དྲན་སà¾�ུལ་བྱེདà¼� 15 mins later སà¾�ར་མ་15རྗེསà¼� 1 hour later ཆུ་ཚོད་1རྗེསà¼� 4 hours later ཆུ་ཚོད་4རྗེསà¼� Tomorrow སང་ཉིནà¼� Schedule Reminder ཉིན་རེའི་ལས་རིམ་དྲན་སà¾�ུལà¼� %1 to %2 %1 ནས་ %2བརà¼� Today དེ་རིང་à¼� DragInfoGraphicsView Edit རྩོམ་སྒྲིག Delete སུབ་པà¼� New event ལས་རིམ་གསར་པà¼� New Event ལས་རིམ་གསར་པà¼� JobTypeListView export གྱིག་འོད་རྒྱུད་བཟུང་à¼� import ICS file ཡིག་ཆོས་སོགས་རྒྱུད་བཟུང་à¼� You are deleting an event type. à½�ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་སུབ་བཞིན་ཡོདà¼� All events under this type will be deleted and cannot be recovered. ཉིན་རེའི་ལས་རིམ་འདིའི་འོག་གི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་ངེས་པ་མ་ཟད་སླར་གསོ་བྱ་à½�བས་མེདà¼� Cancel button འདོར་བà¼� Delete button སུབ་པà¼� QObject Account settings རྩིས་à½�ོ་སྒྲིག་འགོདà¼� Account རྩིས་à½�ྲà¼� Select items to be synced à½�ྱེད་ཀྱི་མཉམ་བགྲོད་ཚན་པ་སྒྲིག་འགོདà¼� Events ཉིན་རེའི་ལས་རིམà¼� General settings ཀུན་སྤྱོད་སྒྲིག་འགོདà¼� Sync interval མཉམ་བགྲོད་བྱུང་ཚདà¼� Manage calendar ལོ་à½�ོ་དོ་དམà¼� Calendar account ལོ་à½�ོའི་རྩིས་à½�ྲà¼� Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲསà¼� General ཀུན་སྤྱོདà¼� First day of week གཟའ་འà½�ོར་གཅིག་གི་ཉིན་དང་པོà¼� Time à½�ོ་འཇུག་པའི་དུས་ཚོདà¼� Return Today Return དེ་རིང་à¼� Return Today Today Return Today དེ་རིང་à¼� ScheduleTypeEditDlg New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགསà¼� Edit event type ཉིན་རེའི་ལས་རིམ་རིགས་གྲས་རྩོམ་སྒྲིག Import ICS file ཡིག་ཆོས་སོགས་རྒྱུད་བཟུང་à¼� Name: མིང་à¼� Color: ཚོན་མདོག ICS File: ཡིག་ཆོས་སོགས་རྒྱུད་བཟུང་à¼� Cancel button འདོར་བà¼� Save button ཉར་གསོག་ The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བསà¼� བཟོ་བཅོས་བྱེད་རོགསà¼� Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་à¼� Shortcut Help རོགས་རམà¼� Delete event ལས་རིམ་སུབ་པà¼� Copy མà½�ོ་ཕབà¼� Cut དྲས་གà½�ུབà¼� Paste སྦྱར་བà¼� Delete སུབ་པà¼� Select all ཡོངས་འདེམསà¼� SidebarCalendarWidget Y ལོà¼� M ཟླà¼� TimeJumpDialog Go button མཆོང་སྒྱུརà¼� UserloginWidget Sign In button à½�ོ་འཇུག Sign Out button à½�ོ་འབུདà¼� YearFrame Y ལོà¼� today Today Today དེ་རིང་à¼� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_bqi.ts000066400000000000000000001356531523260663500266700ustar00rootroot00000000000000 AccountItem Sync successful تم التزامن بنجاح Network error خطأ Ù�ÙŠ الشبكة Server exception استثناء Ù�ÙŠ الخادم Storage full الخزنة ممتلئة AccountManager Local account الحساب المحلي Event types أنواع الÙ�عّالات CColorPickerWidget Color اللون Cancel button إلغاء Save button Ø­Ù�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعه Saturday السبت Sunday الأحد CDayWindow Y الي M الشهر D اليوم Lunar القمر CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more %1 أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y الي CMyScheduleView My Event حدثي الخاص OK button مواÙ�Ù‚ Delete button حذÙ� Edit button تحرير CPushButton New event type نوع حدث جديد CScheduleDlg New Event دÛ� واقعيت نوي Edit Event دÛ� واقعيت ویرکول End time must be greater than start time پایان Ú†Û�رÛ� د شروع Ú†Û�رÛ� نسبت ÛŒÛ� بیشتر ويند OK button OK Never هیڅکله At time of event د واقعيت Ú†Û�رÛ� د وقت 15 minutes before 15 دقیقÛ� Ú†Û�رÛ� د پیش 30 minutes before 30 دقیقÛ� Ú†Û�رÛ� د پیش 1 hour before 1 ساعت Ú†Û�رÛ� د پیش 1 day before 1 روز Ú†Û�رÛ� د پیش 2 days before 2 روز Ú†Û�رÛ� د پیش 1 week before 1 Ù‡Ù�ته Ú†Û�رÛ� د پیش On start day (9:00 AM) شروع روز (9:00 AM) time(s) زمان (Ù‡) Enter a name please لطÙ�اً نوم ورکړئ The name can not only contain whitespaces نوم دا Ú†Û�رÛ� ÛŒÛ� Ú†Û�رÛ� د خالي Ú†Û�رÛ� نسبت ÛŒÛ� بیشتر ويند Type: نوع: Description: توضيحات: All Day: د Ú†Û�رÛ� د ټول روز: Starts: شروع کوي: Ends: پایان کوي: Remind Me: من ته یاد دوه: Repeat: د اکر: End Repeat: د اکر پایان: Calendar account: کالندر اکاونټ: Calendar account کالندر اکاونټ Type نوع Description توضيحات All Day د Ú†Û�رÛ� د ټول روز Time: زمان: Time زمان Solar سالار Lunar لوار Starts شروع Ends نهاية Remind Me تذكير Repeat تكرار Daily يومي Weekdays أيام الأسبوع Weekly أسبوعي Monthly شهري Yearly سنوي End Repeat نهاية التكرار After بعد On Ù�ÙŠ Cancel button إلغاء Save button Ø­Ù�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن تكون جميع وقائع التكرار بنÙ�س حالة اليوم الكامل. Do you want to change all occurrences? هل تريد تغيير جميع الاقتباسات؟ Cancel button إلغاء Change All تغيير جميع You are changing the repeating rule of this event. أنت تقوم بتغيير قاعدة التكرار لهذه الÙ�عالية. You are deleting an event. أنت تقوم بحذÙ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك Ù�ÙŠ حذÙ� هذا الحدث؟ Delete button حذÙ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل تريد حذÙ� جميع وقائع هذا الحدث، أم Ù�قط الاقتباس المحدد؟ Delete All حذÙ� جميع Delete Only This Event حذÙ� هذا الحدث Ù�قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل تريد حذÙ� هذا الحدث وجميع الاقتباسات المستقبلية، أم Ù�قط الاقتباس المحدد؟ Delete All Future Events حذÙ� جميع الاقتباسات المستقبلية You are changing a repeating event. أنت تغيّر حدثًا متكررًا. Do you want to change only this occurrence of the event, or all occurrences? هل ترغب Ù�ÙŠ تغيير هذه الحالة Ù�قط من الحدث، أم جميع الحالات؟ All الجميع Only This Event هذا الحدث Ù�قط Do you want to change only this occurrence of the event, or this and all future occurrences? هل ترغب Ù�ÙŠ تغيير هذه الحالة Ù�قط من الحدث، أم هذه الحالة والمستقبلية؟ All Future Events جميع الحوادث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، وستتم إخبارك ÙˆÙ�قًا لقواعد التقويم القمري. OK button مواÙ�Ù‚ CScheduleSearchDateItem Y نعم M شهر D يوم CScheduleSearchItem Edit تحرير Delete حذÙ� All Day ال整天 CScheduleSearchView No search results لا توجد نتائج للبحث CScheduleView ALL DAY ال整天 CSettingDialog import ICS file استيراد ملÙ� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث السابق Please go to the <a href='/'>Control Center</a> to change system settings يرجى الذهاب إلى <a href='/'>مركز التحكم</a> لتغيير إعدادات النظام Monday الاثنين Sunday الأحد Use System Setting استخدام إعداد النظام 12-hour clock الساعة 12 24-hour clock الساعة 24 CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y ÙŠ M Ù… W Ùˆ D د Search events and festivals ابحث عن الÙ�عاليات والمناسبات CWeekWindow Week الأسبوع Y 'ÙŠ' CYearScheduleView All Day ال整天 No event لا يوجد حدث CYearWindow Y 'ÙŠ' CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو أداة لعرض التواريخ، كما هو مخطط يومي ذكي لتنظيم كل شيء Ù�ÙŠ الحياة. Calendarmainwindow Calendar التقويم Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جارÙ� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later Ù�شل التزامن، من Ù�ضلك حاول لاحقًا CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other الآخر DAlarmManager Close button إغلاق One day before start يوم قبل البدء Remind me tomorrow تذكّرني غدًا Remind me later تذكّرني لاحقًا 15 mins later 15 دقيقة لاحقًا 1 hour later 1 ساعت دیگر 4 hours later 4 ساعت دیگر Tomorrow Ù�ردا Schedule Reminder ذکر برنامه %1 to %2 '%1 تا %2' Today امروز DragInfoGraphicsView Edit ویرایش Delete حذÙ� New event رویداد جدید New Event رویداد جدید JobTypeListView export صدور import ICS file وارد کردن Ù�ایل ICS You are deleting an event type. شما در حال حذÙ� نوعی رویداد هستید. All events under this type will be deleted and cannot be recovered. همه رویدادهای زیر این نوع حذÙ� خواهند شد Ùˆ قابل بازیابی نیستند. Cancel button لغو Delete button حذÙ� QObject Account settings تنظیمات حساب Account حساب Select items to be synced آیتم هایی Ú©Ù‡ قرار است هماهنگ شوند را انتخاب کنید Events رویدادها General settings تنظیمات عمومی Sync interval Ù�اصله هماهنگ Manage calendar مدیریت کالندر Calendar account حساب کالندر Event types انواع رویداد General عمومی First day of week روز اول Ù‡Ù�ته Time زمان Return Today Return امروز Return Today Today Return Today امروز ScheduleTypeEditDlg New event type نوع حیثیت جدید Edit event type ویرایش نوع حیثیت Import ICS file ورود Ù�ایل ICS Name: نام: Color: رنگ: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Ù�ایل ICS: Cancel button لغو Save button ذخیره The name can not only contain whitespaces نام Ù�قط می‌تواند شامل Ù�ضاها نباشد Enter a name please لطÙ�اً یک نام وارد کنید Shortcut Help Ú©Ù…Ú© Delete event حذÙ� حیثیت Copy Ú©Ù¾ÛŒ Cut بر Paste چسباندن Delete حذÙ� Select all همه را انتخاب کنید SidebarCalendarWidget Y سال M ماه TimeJumpDialog Go button رÙ�ت UserloginWidget Sign In button ورود Sign Out button خروج YearFrame Y سال today Today Today امروز linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_br.ts000066400000000000000000001353051523260663500265120ustar00rootroot00000000000000 AccountItem Sync successful مزامنة ناجحة Network error خطأ Ù�ÙŠ الشبكة Server exception استثناء Ù�ÙŠ الخادم Storage full التخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button إلغاء Save button Ø­Ù�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y الي M الشهر D اليوم Lunar القمرى CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more %1 إضاÙ�ÙŠ CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y الي CMyScheduleView My Event حدثي OK button مواÙ�Ù‚ Delete button حذÙ� Edit button تحرير CPushButton New event type Ù†Ù�وع حدث جديد CScheduleDlg New Event حدث جديد Edit Event تحرير الحدث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button مواÙ�Ù‚ Never 从ä¸� At time of event Ù�ÙŠ وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة واحدة قبل 1 day before يوم واحد قبل 2 days before يومين قبل 1 week before أسبوع واحد قبل On start day (9:00 AM) Ù�ÙŠ يوم البدء (9:00 صباحًا) time(s) وقت(ا) Enter a name please الرجاء إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يحتوي Ù�قط على مساÙ�ات Ù�ارغة Type: نوع: Description: الوصÙ�: All Day: الكل يوم: Starts: يبدأ Ù�ÙŠ: Ends: ينتهي Ù�ÙŠ: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب التقويم: Calendar account حساب التقويم Type نوع Description الوصÙ� All Day الكل يوم Time: الوقت: Time وقت Solar سولي Lunar لوري Starts يبدأ Ends ينتهي Remind Me تذكير Repeat تكرار Daily يومي Weekdays أيام الأسبوع Weekly أسبوعي Monthly شهري Yearly سنوي End Repeat إنهاء التكرار After بعد On Ù�ÙŠ Cancel button إلغاء Save button Ø­Ù�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن تكون جميع مرات حدث تكراري لها Ù†Ù�س الحالة (الكل يوم) Do you want to change all occurrences? هل ترغب Ù�ÙŠ تعديل جميع المهام؟ Cancel button إلغاء Change All تغيير جميع You are changing the repeating rule of this event. أنت تقوم بتعديل قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذÙ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك Ù�ÙŠ حдалه هذا الحدث؟ Delete button حذÙ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب Ù�ÙŠ حذÙ� جميع مرات هذا الحدث، أم Ù�قط المرة المحددة؟ Delete All حذÙ� جميع Delete Only This Event حذÙ� هذا الحدث Ù�قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل ترغب Ù�ÙŠ حذÙ� هذا الحدث وجميع المهام المستقبلية له، أم Ù�قط المرة المحددة؟ Delete All Future Events حذÙ� جميع المهام المستقبلية You are changing a repeating event. أنت تقوم بتعديل حدث يتكرر. Do you want to change only this occurrence of the event, or all occurrences? هل تريد تعديل هذه الحالة Ù�قط من الحدث، أم جميع الحوادث؟ All كل Only This Event هذا الحدث Ù�قط Do you want to change only this occurrence of the event, or this and all future occurrences? هل تريد تعديل هذه الحالة Ù�قط من الحدث، أم هذه الحالة وجميع الحوادث المستقبلية؟ All Future Events جميع الحوادث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، وستتم الإذن لك ÙˆÙ�قًا للقواعد الخاصة بالGregorian calendar. OK button مواÙ�Ù‚ CScheduleSearchDateItem Y نعم M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذÙ� All Day ال整天 CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY ال整天 CSettingDialog import ICS file استيراد ملÙ� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث السابق Please go to the Control Center to change system settings يرجى الانتقال إلى مركز التحكم لتغيير إعدادات النظام Monday الاثنين Sunday الجمعة Use System Setting استخدم إعداد النظام 12-hour clock الساعة 12 24-hour clock الساعة 24 CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y Ø£ M أغسطس W ج D د Search events and festivals ابحث عن الÙ�عاليات والمناسبات CWeekWindow Week الأسبوع Y Ø£ CYearScheduleView All Day ال整天 No event لا يوجد Ù�عальة CYearWindow Y Ø£ CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو أداة لعرض التواريخ، كما هو مخطط يومي ذكي لتنظيم جميع الأمور Ù�ÙŠ الحياة. Calendarmainwindow Calendar التقويم Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جارÙ� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later Ù�شل التزامن، من Ù�ضلك حاول لاحقًا CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other آخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكير لي غدًا Remind me later تذكير لي لاحقًا 15 mins later 15 دقائق لاحقًا 1 hour later Ù�ÙŠ الساعة القادمة 4 hours later بعد 4 ساعات Tomorrow غدًا Schedule Reminder تذكير الجدولة %1 to %2 %1 إلى %2 Today اليوم DragInfoGraphicsView Edit تحرير Delete حذÙ� New event حدث جديد New Event حدث جديد JobTypeListView export تصدير import ICS file استيراد ملÙ� ICS You are deleting an event type. أنت ت Deleting نوع الحدث. All events under this type will be deleted and cannot be recovered. كل الأحداث تحت هذا النوع سيتم حذÙ�ها ولا يمكن استرجاعها. Cancel button إلغاء Delete button حذÙ� QObject Account settings إعدادات الحساب Account الحساب Select items to be synced اختر العناصر التي سيتم تزامنها Events الÙ�عاليات General settings إعدادات عامة Sync interval Ù�ترة التزامن Manage calendar إدارة التقويم Calendar account حساب التقويم Event types أنواع الÙ�عاليات General عام First day of week أول يوم من الأسبوع Time الوقت Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع الحدث Import ICS file استيراد ملÙ� ICS Name: الاسم: Color: اللون: ICS File: ملÙ� ICS: Cancel button إلغاء Save button Ø­Ù�ظ The name can not only contain whitespaces الاسم لا يمكن أن يحتوي Ù�قط على مساÙ�ات Ù�ارغة Enter a name please الرجاء إدخال اسم Shortcut Help مساعدة Delete event حذÙ� الحدث Copy نسخ Cut قص Paste لصق Delete حذÙ� Select all اختر كل شيء SidebarCalendarWidget Y ÙŠ M شهر TimeJumpDialog Go button الذهاب UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y ÙŠ today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ca.ts000066400000000000000000001333041523260663500264670ustar00rootroot00000000000000 AccountItem Sync successful Sincronització correcta Network error Error de xarxa Server exception Excepció del servidor Storage full Emmagatzematge ple AccountManager Local account Compte local Event types Tipus d'esdeveniment CColorPickerWidget Color Color Cancel button Cancel·la Save button Desa-ho CDayMonthView Monday Dilluns Tuesday Dimarts Wednesday Dimecres Thursday Dijous Friday Divendres Saturday Dissabte Sunday Diumenge CDayWindow Y any M mes D D Lunar Lunar CGraphicsView New Event Esdeveniment nou CMonthScheduleNumItem %1 more %1 més CMonthView New event Nou esdeveniment New Event Esdeveniment nou CMonthWindow Y any CMyScheduleView My Event El meu esdeveniment OK button D'acord Delete button Elimina Edit button Edita CPushButton New event type Tipus d'esdeveniment nou CScheduleDlg New Event Esdeveniment nou Edit Event Edita l'esdeveniment End time must be greater than start time L'hora d'acabament ha de ser superior a l'hora d'inici. OK button D'acord Never Mai At time of event Al moment de l'esdeveniment 15 minutes before 15 minuts abans 30 minutes before 30 minuts abans 1 hour before 1 hora abans 1 day before 1 dia abans 2 days before 2 dies abans 1 week before 1 setmana abans On start day (9:00 AM) El dia d'inici (9:00) time(s) cop/s Enter a name please Escriviu un nom, si us plau. The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Type: Tipus: Description: Descripció: All Day: Tot el dia: Starts: Comença: Ends: Acaba: Remind Me: Recorda-m'ho: Repeat: Repeteix: End Repeat: Acaba la repetició: Calendar account: Compte del calendari: Calendar account Compte del calendari Type Tipus Description Descripció All Day Tot el dia Time: Hora: Time Hora Solar solar Lunar lunar Starts Comença Ends Acaba Remind Me Recorda-m'ho Repeat Repeteix Daily Diàriament Weekdays Els dies feiners Weekly Setmanalment Monthly Mensualment Yearly Anualment End Repeat Acaba la repetició After Després On Activat Cancel button Cancel·la Save button Desa CScheduleOperation All occurrences of a repeating event must have the same all-day status. Totes les ocurrències d'un esdeveniment repetitiu han de tenir el mateix estat de tot el dia. Do you want to change all occurrences? Voleu canviar-ne totes les ocurrències? Cancel button Cancel·la Change All Canvia-les totes You are changing the repeating rule of this event. Canvieu la regla de repetició d'aquest esdeveniment. You are deleting an event. Elimineu un esdeveniment. Are you sure you want to delete this event? Segur que voleu eliminar aquest esdeveniment? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Voleu eliminar totes les ocurrències d'aquest esdeveniment o només la seleccionada? Delete All Elimina-les totes Delete Only This Event Elimina només aquest esdeveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voleu eliminar aquesta i totes les ocurrències futures d'aquest esdeveniment o només la seleccionada? Delete All Future Events Elimina tots els esdeveniments futurs You are changing a repeating event. Canvieu un esdeveniment repetitiu. Do you want to change only this occurrence of the event, or all occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment o totes? All Totes Only This Event Només aquest esdeveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment, o aquesta i totes les ocurrències futures? All Future Events Tots els esdeveniments futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Heu seleccionat un mes de traspàs i se us recordarà segons les regles del calendari lunar. OK button D'acord CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Edita Delete Elimina All Day Tot el dia CScheduleSearchView No search results No hi ha resultats de la cerca. CScheduleView ALL DAY TOT EL DIA CSettingDialog import ICS file Importar fitxer ICS Manual Manual 15 mins 15 min 30 mins 30 min 1 hour 1 hora 24 hours 24 hores Sync Now Sincronitza ara Last sync Darrera sincronització Please go to the Control Center to change system settings Si us plau, aneu al Centre de Control per canviar les configuracions del sistema Monday Dilluns Sunday Diumenge Use System Setting Utilitza configuració del sistema 12-hour clock Rellotge de 12 hores 24-hour clock Rellotge de 24 hores CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 hora) (%1 hours) (%1 hores) CTitleWidget Y any M mes W setmana D dia Search events and festivals Cerca esdeveniments i festivals CWeekWindow Week Setmana Y any CYearScheduleView All Day Tot el dia No event Cap esdeveniment CYearWindow Y any CalendarWindow Calendar Calendari Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. El Calendari és una eina per veure dates i també un planificador diari intel·ligent per programar totes les coses de la vida. Calendarmainwindow Calendar Calendari Manage Gestiona Privacy Policy Política de privadesa Syncing... Se sincronitza... Sync successful Sincronització correcta Sync failed, please try later La sincronització ha fallat. Si us plau, proveu-ho més tard. CenterWidget All Day Tot el dia DAccountDataBase Work Feina Life Vida Other Altres DAlarmManager Close button Tanca One day before start Un dia abans de l'inici Remind me tomorrow Recorda-m'ho demà. Remind me later Recorda-m'ho més tard. 15 mins later 15 minuts més tard 1 hour later 1 hora més tard 4 hours later 4 hores més tard Tomorrow Demà Schedule Reminder Programació del recrdatori %1 to %2 de %1 a %2 Today Avui DragInfoGraphicsView Edit Edita Delete Elimina New event Esdeveniment nou New Event Esdeveniment nou JobTypeListView export exportar import ICS file importar fitxer ICS You are deleting an event type. Elimineu un tipus d'esdeveniment. All events under this type will be deleted and cannot be recovered. Tots els esdeveniments d'aquest tipus s'eliminaran i no es podran recuperar. Cancel button Cancel·la Delete button Elimina QObject Account settings Paràmetres del compte Account Compte Select items to be synced Seleccioneu els elements per sincronitzar Events Esdeveniments General settings Configuració general Sync interval Interval de sincronització Manage calendar Gestiona el calendari Calendar account Compte del calendari Event types Tipus d'esdeveniment General General First day of week Primer dia de la setmana Time Hora Return Today Return Avui Return Today Today Return Today Avui ScheduleTypeEditDlg New event type Tipus d'esdeveniment nou Edit event type Edita el tipus d'esdeveniment Import ICS file Importar fitxer ICS Name: Nom: Color: Color: ICS File: Fitxer ICS: Cancel button Cancel·la Save button Desa-ho The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Enter a name please Escriviu un nom, si us plau. Shortcut Help Ajuda Delete event Suprimeix l'esdeveniment Copy Copia Cut Retalla Paste Enganxa Delete Elimina Select all Selecciona-ho tot SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ves-hi UserloginWidget Sign In button Inicia la sessió Sign Out button Surt de la sessió YearFrame Y any today Today Today Avui linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_cs.ts000066400000000000000000001327051523260663500265150ustar00rootroot00000000000000 AccountItem Sync successful Synchronizace byla úspěšná Network error Síťová chyba Server exception Výjimka na serveru Storage full ÚložiÅ¡tÄ› je plné AccountManager Local account Místní úÄ�et Event types Typy událostí CColorPickerWidget Color Barva Cancel button ZruÅ¡it Save button Uložit CDayMonthView Monday pondÄ›lí Tuesday úterý Wednesday stÅ™eda Thursday Ä�tvrtek Friday pátek Saturday sobota Sunday nedÄ›le CDayWindow Y R M M D D Lunar MÄ›síÄ�ní CGraphicsView New Event Nová událost CMonthScheduleNumItem %1 more %1 další CMonthView New event Nová událost New Event Nová událost CMonthWindow Y R CMyScheduleView My Event Moje událost OK button OK Delete button Smazat Edit button Upravit CPushButton New event type Nový typ události CScheduleDlg New Event Nová událost Edit Event Upravit událost End time must be greater than start time Je tÅ™eba, aby okamžik konce následoval až po okamžiku zaÄ�átku OK button OK Never Nikdy At time of event V okamžiku události 15 minutes before 15 minut pÅ™ed 30 minutes before 30 minut pÅ™ed 1 hour before 1 hodinu pÅ™ed 1 day before 1 den pÅ™ed 2 days before 2 dny pÅ™ed 1 week before 1 týden pÅ™ed On start day (9:00 AM) V den zaÄ�átku (9:00 dop.) time(s) krát Enter a name please Zadejte, prosím, název The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Type: Typ: Description: Popis: All Day: Celý den: Starts: ZaÄ�íná: Ends: KonÄ�í: Remind Me: PÅ™ipomenout: Repeat: Opakovat: End Repeat: UkonÄ�it opakování: Calendar account: Kalendářový úÄ�et: Calendar account Kalendářový úÄ�et Type Typ Description Popis All Day Celý den Time: ÄŒas: Time ÄŒas Solar SluneÄ�ní Lunar MÄ›síÄ�ní Starts ZaÄ�íná Ends KonÄ�í Remind Me PÅ™ipomenout Repeat Opakování Daily DennÄ› Weekdays VÅ¡ední dny Weekly TýdnÄ› Monthly MÄ›síÄ�nÄ› Yearly RoÄ�nÄ› End Repeat UkonÄ�it opakování After Po On Zapnuto Cancel button ZruÅ¡it Save button Uložit CScheduleOperation All occurrences of a repeating event must have the same all-day status. Je tÅ™eba, aby vÅ¡echny výskyty opakující se události mÄ›ly stejný stav „celý den“. Do you want to change all occurrences? Chcete zmÄ›nit vÅ¡echny výskyty? Cancel button ZruÅ¡it Change All ZmÄ›nit vÅ¡e You are changing the repeating rule of this event. MÄ›níte pravidlo opakování této události. You are deleting an event. Mažete událost. Are you sure you want to delete this event? Opravdu chcete tuto událost smazat? Delete button Smazat Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete smazat vÅ¡echny výskyty této události, nebo jen vybraný výskyt? Delete All Smazat vÅ¡e Delete Only This Event Smazat jen tuto událost Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete smazat tento a vÅ¡echny budoucí výskyty této události, nebo jen ten vybraný? Delete All Future Events Smazat vÅ¡echny budoucí události You are changing a repeating event. MÄ›níte pravidlo opakující se události. Do you want to change only this occurrence of the event, or all occurrences? Chcete zmÄ›nit jen tento výskyt události, nebo vÅ¡echny výskyty? All VÅ¡e Only This Event Jen tato událost Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete zmÄ›nit jen tento výskyt události, nebo tento a vÅ¡echny budoucí výskyty? All Future Events VÅ¡echny budoucí události You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vybrali jste pÅ™estupný mÄ›síc, a bude vám pÅ™ipomenut podle pravidel mÄ›síÄ�ního kalendáře. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upravit Delete Smazat All Day Celý den CScheduleSearchView No search results Nic nenalezeno CScheduleView ALL DAY CELÃ� DEN CSettingDialog import ICS file importovat soubor ICS Manual PříruÄ�ka 15 mins 15 minut 30 mins 30 minut 1 hour 1 hodina 24 hours 24 hodin Sync Now Seřídit nyní Last sync Naposledy synchronizováno Please go to the Control Center to change system settings Prosím, půjde do Centra pro správu a změňte systémové nastavení Monday pondÄ›lí Sunday nedÄ›le Use System Setting Použít systémové nastavení 12-hour clock 12 hodinové hodiny 24-hour clock 24 hodinové hodiny CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 hod) (%1 hours) (%1 hod.) CTitleWidget Y R M M W T D D Search events and festivals Vyhledávání událostí a festivalů CWeekWindow Week Týden Y R CYearScheduleView All Day Celý den No event Žádná událost CYearWindow Y R CalendarWindow Calendar Kalendář Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendář slouží k zobrazování datumů a také jako chytrý každodenní plánovaÄ� vÅ¡eho v životÄ›. Calendarmainwindow Calendar Kalendář Manage Spravovat Privacy Policy Zásady ochrany soukromí Syncing... Synchronizace… Sync successful Synchronizace úspěšná Sync failed, please try later Synchronizace se nezdaÅ™ila, zkuste to, prosím, pozdÄ›ji CenterWidget All Day Celý den DAccountDataBase Work Práce Life Soukromé Other Ostatní DAlarmManager Close button Zavřít One day before start Jeden den pÅ™ed zaÄ�átkem Remind me tomorrow PÅ™ipomenout zítra Remind me later PÅ™ipomenout pozdÄ›ji 15 mins later o 15 minut pozdÄ›ji 1 hour later o 1 hodinu pozdÄ›ji 4 hours later o 4 hodiny pozdÄ›ji Tomorrow Zítra Schedule Reminder PÅ™ipomínání naplánovaného %1 to %2 %1 až %2 Today Dnes DragInfoGraphicsView Edit Upravit Delete Smazat New event Nová událost New Event Nová událost JobTypeListView export exportovat import ICS file importovat soubor ICS You are deleting an event type. Mažete typ události. All events under this type will be deleted and cannot be recovered. VÅ¡echny události tohoto typu budou smazány a nelze je obnovit. Cancel button ZruÅ¡it Delete button Smazat QObject Account settings Nastavení úÄ�tu Account ÚÄ�et Select items to be synced Vyberte položky, které mají být synchronizovány Events Události General settings Obecná nastavení Sync interval SeÅ™izovací interval Manage calendar Spravovat kalendář Calendar account Kalendářový úÄ�et Event types Typy událostí General Obecné First day of week První den týdne Time ÄŒas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ události Edit event type Upravit typ události Import ICS file Importovat soubor ICS Name: Název: Color: Barva: ICS File: Soubor ICS: Cancel button ZruÅ¡it Save button Uložit The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Enter a name please Zadejte, prosím, název Shortcut Help NápovÄ›da Delete event Smazat událost Copy Kopírovat Cut Vyjmout Paste Vložit Delete Smazat Select all Vybrat vÅ¡e SidebarCalendarWidget Y R M M TimeJumpDialog Go button Jde se UserloginWidget Sign In button PÅ™ihlásit se Sign Out button Odhlásit se YearFrame Y R today Today Today Dnes linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_da.ts000066400000000000000000001324121523260663500264670ustar00rootroot00000000000000 AccountItem Sync successful Synchronisation lykkedes Network error Netværksfejl Server exception Serverfejl Storage full Lager full AccountManager Local account Lokalt konto Event types Hændelsetyper CColorPickerWidget Color Farve Cancel button Afbryd Save button Gem CDayMonthView Monday Mandag Tuesday Tirsdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lørdag Sunday Søndag CDayWindow Y Ã… M M D D Lunar MÃ¥nekalender CGraphicsView New Event Ny begivenhed CMonthScheduleNumItem %1 more %1 mere CMonthView New event Ny begivenhed New Event Ny begivenhed CMonthWindow Y Ã… CMyScheduleView My Event Min begivenhed OK button OK Delete button Slet Edit button Rediger CPushButton New event type Ny hændelsetype CScheduleDlg New Event Ny begivenhed Edit Event Rediger begivenhed End time must be greater than start time Sluttidspunktet skal være større end starttidspunktet OK button OK Never Aldrig At time of event PÃ¥ tidspunktet for begivenheden 15 minutes before 15 minutter før 30 minutes before 30 minutter før 1 hour before 1 time før 1 day before 1 dag før 2 days before 2 dage før 1 week before 1 uge før On start day (9:00 AM) PÃ¥ starten af dagen (9:00) time(s) gang(e) Enter a name please Indtast venligst et navn The name can not only contain whitespaces Navnet kan ikke kun bestÃ¥ af mellemrum Type: Type: Description: Beskrivelse: All Day: Hele dagen: Starts: Starter: Ends: Slutter: Remind Me: PÃ¥mind mig: Repeat: Gentag: End Repeat: Slut gentag: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Type Description Beskrivelse All Day Hele dagen Time: Tid: Time Klokkeslæt Solar Solarkalender Lunar MÃ¥nekalender Starts Starts Ends Slutter Remind Me Mindes mig Repeat Gentag Daily Dagligt Weekdays Ugedage Weekly Ugentligt Monthly MÃ¥nedligt Yearly Ã…rligt End Repeat Slut gentagelse After Efter On Til Cancel button Annuller Save button Gem CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle forekomster af en begivenhed som gentages skal have den samme hele dagen-status. Do you want to change all occurrences? Vil du ændre alle forekomster? Cancel button Annuller Change All Ændr alle You are changing the repeating rule of this event. Du er ved at ændre gentagelsesreglen for begivenheden. You are deleting an event. Du er ved at slette en begivenhed. Are you sure you want to delete this event? Er du sikker pÃ¥, at du vil slette begivenheden? Delete button Slet Do you want to delete all occurrences of this event, or only the selected occurrence? Vil du slette alle forekomster af begivenheden eller kun den valgte forekomst? Delete All Slet alle Delete Only This Event Slet kun denne begivenhed Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vil du slette denne og alle fremtidige forekomster af begivenheden eller kun den valgte forekomst? Delete All Future Events Slet alle fremtidige begivenheder You are changing a repeating event. Du er ved at ændre en begivenhed som gentages. Do you want to change only this occurrence of the event, or all occurrences? Vil du kun ændre denne forekomst for begivenheden, eller alle forekomster? All Alle Only This Event Kun denne begivenhed Do you want to change only this occurrence of the event, or this and all future occurrences? Vil du kun ændre denne forekomst for begivenheden, eller denne og alle fremtidige forekomster? All Future Events Alle fremtidige begivenheder You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Du har valgt et skudmÃ¥ned, og vil blive mindet efter reglerne for mÃ¥nekalenderen. OK button OK CScheduleSearchDateItem Y Ã… M M D D CScheduleSearchItem Edit Rediger Delete Slet All Day Hele dagen CScheduleSearchView No search results Ingen søgeresultater CScheduleView ALL DAY HELE DAGEN CSettingDialog import ICS file Importér ICS-fil Manual Manuel 15 mins 15 minutter 30 mins 30 minutter 1 hour 1 time 24 hours 24 timer Sync Now Synk nu Last sync Sidste synk Please go to the Control Center to change system settings GÃ¥ venligst til Kontrolcentret, for at ændre systemindstillinger Monday Mandag Sunday Søndag Use System Setting Brug systemindstillinger 12-hour clock 12-timersur 24-hour clock 24-timersur CTimeEdit (%1 mins) (%1 minutter) (%1 hour) (%1 time) (%1 hours) (%1 timer) CTitleWidget Y Ã… M M W W D D Search events and festivals Søg efter arrangementer og fester CWeekWindow Week Uge Y Ã… CYearScheduleView All Day Hele dagen No event Ingen begivenhed CYearWindow Y Ã… CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender er et værktøj til at vise datoer, og er ogsÃ¥ en smart dagsplanlægger til alt i dit liv. Calendarmainwindow Calendar Kalender Manage Styr Privacy Policy Privatlivspolitik Syncing... Synkroniserer... Sync successful Synchronisation lykkedes Sync failed, please try later Synchronisation fejlede, prøv venligst igen CenterWidget All Day Hele dagen DAccountDataBase Work Arbejde Life Leve Other Andre DAlarmManager Close button Luk One day before start En dag før start Remind me tomorrow PÃ¥mind mig i morgen Remind me later PÃ¥mind mig senere 15 mins later 15 minutter senere 1 hour later 1 time senere 4 hours later 4 timer senere Tomorrow I morgen Schedule Reminder Planlæg pÃ¥mindelse %1 to %2 '%1 til %2' Today I dag DragInfoGraphicsView Edit Rediger Delete Slet New event Ny begivenhed New Event Ny begivenhed JobTypeListView export eksport import ICS file importér ICS-fil You are deleting an event type. Du sletter en begivenheds-type. All events under this type will be deleted and cannot be recovered. Alle begivenheder under denne type vil blive slettet og kan ikke gendannes. Cancel button Afbryd Delete button Slet QObject Account settings Kontoindstillinger Account Konto Select items to be synced Vælg elementer, der skal synkroniseres Events Arrangementer General settings Generelle indstillinger Sync interval Synkronisationsinterval Manage calendar Styr kalender Calendar account Kalenderkonto Event types Begivenheds-typer General Generelt First day of week Første dag i ugen Time Klokkeslæt Return Today Return I dag Return Today Today Return Today I dag ScheduleTypeEditDlg New event type Ny begivenheds-type Edit event type Rediger begivenheds-type Import ICS file Importér ICS-fil Name: Navn: Color: 'Farve:' ICS File: 'ICS-fil:' Cancel button Afbryd Save button Gem The name can not only contain whitespaces Navnet kan ikke kun bestÃ¥ af mellemrum Enter a name please Indtast et navn, venligst Shortcut Help Hjælp Delete event Slet begivenhed Copy Kopiér Cut Klip Paste Indsæt Delete Slet Select all Vælg alle SidebarCalendarWidget Y Ã… M M TimeJumpDialog Go button GÃ¥ UserloginWidget Sign In button Log ind Sign Out button Log ud YearFrame Y Ã… today Today Today I dag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_de.ts000066400000000000000000001466421523260663500265050ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Serverausnahme Storage full Speicher voll AccountManager Local account Lokales Konto Event types Termintypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neuer Termin CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neuer Termin New Event Neuer Termin CMonthWindow Y J CMyScheduleView My Event Mein Termin OK button OK Delete button Löschen Edit button Bearbeiten CPushButton New event type Neuer Termintyp CScheduleDlg New Event Neuer Termin Edit Event Termin bearbeiten End time must be greater than start time Endzeit muss größer als Startzeit sein OK button OK Never Nie At time of event Zum Zeitpunkt des Termins 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde vorher 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Starttag (9:00 Uhr) time(s) mal Enter a name please Bitte einen Namen eingeben The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Typ: Description: Beschreibung: All Day: Ganztägig: Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholung: End Repeat: Wiederholung beenden: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Typ Description Beschreibung All Day Ganztägig Time: Zeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholung Daily Täglich Weekdays Wochentage Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholung beenden After Nach On Am Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle Vorkommen eines sich wiederholenden Termins müssen den gleichen Ganztagsstatus haben. Do you want to change all occurrences? Möchten Sie alle Vorkommen ändern? Cancel button Abbrechen Change All Alle ändern You are changing the repeating rule of this event. Sie ändern die Wiederholungsregel dieses Termins. You are deleting an event. Sie löschen einen Termin. Are you sure you want to delete this event? Sind Sie sicher, dass Sie diesen Termin löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle Vorkommen dieses Termins löschen oder nur das ausgewählte Vorkommen? Delete All Alle löschen Delete Only This Event Nur diesen Termin löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie diesen und alle zukünftigen Vorkommen dieses Termins löschen, oder nur das ausgewählte Vorkommen? Delete All Future Events Alle zukünftigen Termine löschen You are changing a repeating event. Sie ändern einen sich wiederholenden Termin. Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses Vorkommen des Termins oder alle Vorkommnisse ändern? All Alle Only This Event Nur diesen Termin Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses Ereignis oder dieses und alle zukünftigen Ereignisse ändern? All Future Events Alle zukünftigen Termine You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Mondkalenders daran erinnert. OK button OK CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Bearbeiten Delete Löschen All Day Ganztägig CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY GANZTÄGIG CSettingDialog import ICS file Manual Manuell 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Please go to the <a href='/'>Control Center</a> to change system settings Monday Montag Sunday Sonntag Use System Setting 12-hour clock 12-Stunden-Uhr 24-hour clock 24-Stunden-Uhr CTimeEdit (%1 mins) (%1 Minuten) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals Termine und Veranstaltungen suchen CWeekWindow Week Woche Y J CYearScheduleView All Day Ganztägig No event Kein Termin CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Der Kalender ist ein Werkzeug zum Anzeigen von Terminen und auch ein intelligenter Tagesplaner, um alle Dinge im Leben zu planen. Calendarmainwindow Calendar Kalender Manage Verwalten Privacy Policy Datenschutzerklärung Syncing... Wird synchronisiert ... Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte später erneut versuchen CenterWidget All Day Ganztägig DAccountDataBase Work Arbeit Life Leben Other Andere DAlarmManager Close button Schließen One day before start Einen Tag vor Beginn Remind me tomorrow Erinnere mich morgen Remind me later Erinnere mich später 15 mins later 15 Min. später 1 hour later 1 Stunde später 4 hours later 4 Stunden später Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 bis %2 Today Heute DragInfoGraphicsView Edit Bearbeiten Delete Löschen New event Neuer Termin New Event Neuer Termin JobTypeListView export import ICS file You are deleting an event type. Sie löschen einen Termintyp. All events under this type will be deleted and cannot be recovered. Alle Termine dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Account settings Kontoeinstellungen Account Konto Select items to be synced Zu synchronisierende Elemente auswählen Events Termine General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Manage calendar Kalender verwalten Calendar account Kalenderkonto Event types Termintypen General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Termintyp Edit event type Termintyp bearbeiten Import ICS file Name: Name: Color: Farbe: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Bitte einen Namen eingeben Shortcut Help Hilfe Delete event Termin löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alles auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_de_DE.ts000066400000000000000000001466561523260663500270620ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Server-Exception-Fehler Storage full Speicher voll AccountManager Local account Lokales Konto Event types Ereignistypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neues Ereignis CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neues Ereignis New Event Neues Ereignis CMonthWindow Y J CMyScheduleView My Event Mein Ereignis OK button O.K. Delete button Löschen Edit button Ändern CPushButton New event type Neuer Ereignis-Typ CScheduleDlg New Event Neues Ereignis Edit Event Ereignis ändern End time must be greater than start time Endzeitpunkt muss hinter dem Beginn liegen OK button O.K. Never Niemals At time of event Zum Ereigniszeitpunkt 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde davor 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Anfang des Starttages (9:00Uhr) time(s) Zeit(en) Enter a name please Geben Sie bitte einen Namen ein The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Art: Description: Beschreibung: All Day: Ganzer Tag Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholen End Repeat: Wiederholen bis: Calendar account: Kalender-Konto Calendar account Kalender-Konto Type Art: Description Beschreibung All Day Ganzer Tag Time: Uhrzeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholen Daily Täglich Weekdays Wochentäglich Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholungsende After Nach On m Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wiederholungsereignisse müssen alle den selben Ganzer-Tag-Status haben. Do you want to change all occurrences? Möchen Sie den Status bei allen Wiederholungen ändern? Cancel button Abbrechen Change All Alle Ändern You are changing the repeating rule of this event. Sie ändern die Wiederhol-Regel dieses Ereignisses. You are deleting an event. Sie löschen ein Ereignis Are you sure you want to delete this event? Sind Sie sicher, dass Sie dieses Ereignis löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle oder nur das ausgewählte Ereignis löschen? Delete All Alle löschen Delete Only This Event Nur dieses Ereignis löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie dieses Ereignis und auch die zukünftigen oder nur das ausgewählte löschen? Delete All Future Events Alle zukünftigen Ereignisse löschen You are changing a repeating event. Sie ändern ein Wiederholungsereignis Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses eine Ereignis oder gleich alle löschen? All Alle Only This Event Nur dieses eine Ereignis Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses eine Ereignis oder dieses sowie alle zukünftigen löschen? All Future Events Alle zukünftigen Ereignisse You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Lunar-Kalenders erinnert. OK button O.K. CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Ändern Delete Löschen All Day Ganzer Tag CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY Ganzer Tag CSettingDialog import ICS file Manual Selbsteingabe 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Please go to the <a href='/'>Control Center</a> to change system settings Monday Montag Sunday Sonntag Use System Setting 12-hour clock 12-Stunden-Zeit 24-hour clock 24-Stunden-Zeit CTimeEdit (%1 mins) (%1 Min) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals In Ereignissen und Feiertagen suchen CWeekWindow Week Woche Y J CYearScheduleView All Day Ganzer Tag No event Kein Ereignis CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender ist ein Werkzeug um Termine nachzuschauen, aber auch um schlau die all die Dinge des Lebens zu organisieren. Calendarmainwindow Calendar Kalender Manage Organisieren Privacy Policy Datenschutzerklärung Syncing... Synchronisieren… Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte nochmals versuchen CenterWidget All Day Ganzer Tag DAccountDataBase Work Arbeit Life Privatleben Other Anderes DAlarmManager Close button Schließen One day before start Ein Tag vor Beginn Remind me tomorrow Morgen daran erinnern Remind me later Später erinnern 15 mins later 15 Minuten danach 1 hour later 1 Stunde danach 4 hours later 4 Stunden danach Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 zu %2 Today Heute DragInfoGraphicsView Edit Ändern Delete Löschen New event Neues Ereignis New Event Neues Ereignis JobTypeListView export import ICS file You are deleting an event type. Sie löschen einen Ereignis-Typ All events under this type will be deleted and cannot be recovered. Alle Ereignisse dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Account settings Kontoeinstellungen Account Konto Select items to be synced Das zu synchronisierende Ereignis auswählen Events Ereignisse General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Manage calendar Kalender einrichten Calendar account Kalender-Konto Event types Ereignistypen General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Ereignis-Typ Edit event type Ereignis-Typ ändern Import ICS file Name: Name: Color: Farbe: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Geben Sie bitte einen Namen ein Shortcut Help Hilfe Delete event Ereignis löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alle auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los geht's UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_el.ts000066400000000000000000001411151523260663500265030ustar00rootroot00000000000000 AccountItem Sync successful Επιτυχής συγχÏ�ονισμός Network error Σφάλμα δικτÏ�ου Server exception Αποκλειστική εξαίÏ�εση Storage full Το αποθετήÏ�ιο είναι γεμάτο AccountManager Local account Τοπικός λογαÏ�ιασμός Event types ΤÏ�ποι γεγονότων CColorPickerWidget Color ΧÏ�ώμα Cancel button ΑκÏ�Ï�ωση Save button Αποθήκευση CDayMonthView Monday ΔευτέÏ�α Tuesday ΤÏ�ίτη Wednesday ΤετάÏ�τη Thursday Πέμπτη Friday ΠαÏ�ασκευή Saturday Σάββατο Sunday ΚυÏ�ιακή CDayWindow Y Ε M Μ D Η Lunar Ηλιακό CGraphicsView New Event Î�έο Συμβάν CMonthScheduleNumItem %1 more %1 πεÏ�ισσότεÏ�ο-α CMonthView New event Î�έο συμβάν New Event Î�έο Συμβάν CMonthWindow Y Y CMyScheduleView My Event Το συμβάν μου OK button ΟΚ Delete button ΔιαγÏ�αφή Edit button ΕπεξεÏ�γασία CPushButton New event type Î�έος Ï„Ï�πος συμβάντος CScheduleDlg New Event Î�έο συμβάν Edit Event ΕπεξεÏ�γασία συμβάντος End time must be greater than start time Ο χÏ�όνος λήξης Ï€Ï�έπει να είναι μεγαλÏ�τεÏ�ος του χÏ�όνου έναÏ�ξης OK button OK Never Ποτέ At time of event Την ÏŽÏ�α του συμβάντος 15 minutes before 15 λεπτά Ï€Ï�ιν 30 minutes before 30 λεπτά Ï€Ï�ιν 1 hour before 1 ÏŽÏ�α Ï€Ï�ιν 1 day before 1 ημέÏ�α Ï€Ï�ιν 2 days before 2 ημέÏ�ες Ï€Ï�ιν 1 week before 1 εβδομάδα Ï€Ï�ιν On start day (9:00 AM) Στην έναÏ�ξη της ημέÏ�ας (9:00 ΠΜ) time(s) φοÏ�ά(ές) Enter a name please ΠαÏ�ακαλώ εισάγετε ένα όνομα The name can not only contain whitespaces Το όνομα δεν μποÏ�Ï�εί να πεÏ�ιέχει μόνο κενοÏ�Ï‚ χαÏ�ακτήÏ�ες Type: ΤÏ�πος: Description: ΠεÏ�ιγÏ�αφή: All Day: ΟλοήμεÏ�ο: Starts: ΑÏ�χίζει: Ends: Τελειώνει: Remind Me: ΥπενθÏ�μισέ μου: Repeat: Επανάληψη: End Repeat: Τέλος Επανάληψης: Calendar account: ΛογαÏ�ιασμός ημεÏ�ολογίου: Calendar account ΛογαÏ�ιασμός ημεÏ�ολογίου Type ΤÏ�πος Description ΠεÏ�ιγÏ�αφή All Day ΟλοήμεÏ�ο Time: Î�Ï�α: Time Î�Ï�α Solar Ηλιακό Lunar Ηλιακό Starts ΑÏ�χίζει Ends Τελειώνει Remind Me ΥπενθÏ�μισέ μου Repeat Επανάληψη Daily ΗμεÏ�ήσιο Weekdays ΕÏ�γάσιμες Weekly Εβδομαδιαίο Monthly Μηνιαίο Yearly Ετήσιο End Repeat Τέλος Επανάληψης After Μετά On ΕνεÏ�γό Cancel button ΑκÏ�Ï�ωση Save button Αποθήκευση CScheduleOperation All occurrences of a repeating event must have the same all-day status. Όλες οι εμφανίσεις ενός επαναλαμβανόμενου συμβάντος Ï€Ï�έπει να έχουν την ίδια ολοήμεÏ�η κατάσταση. Do you want to change all occurrences? Θέλετε να αλλάξετε όλες τις εμφανίσεις; Cancel button ΑκÏ�Ï�ωση Change All Αλλαγή Όλων You are changing the repeating rule of this event. Αλλάζεις τον κανόνα επανάληψης αυτοÏ� του συμβάντος. You are deleting an event. ΔιαγÏ�άφεις ένα συμβάν Are you sure you want to delete this event? Είστε σίγουÏ�ος ότι θέλετε να διαγÏ�άψετε αυτό το συμβάν; Delete button ΔιαγÏ�αφή Do you want to delete all occurrences of this event, or only the selected occurrence? Θέλετε να διαγÏ�άψετε όλες τις εμφανίσεις αυτοÏ� του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All ΔιαγÏ�αφή όλων Delete Only This Event ΔιαγÏ�αφή Μόνο ΑυτοÏ� του Συμβάντος Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Θέλετε να διαγÏ�άψετε αυτήν και όλες τις μελλοντικές εμφανίσεις αυτοÏ� του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Future Events ΔιαγÏ�αφή Όλων των Μελλοντικών Συμβάντων You are changing a repeating event. Αλλάζεις ένα επαναλαμβανόμενο συμβάν. Do you want to change only this occurrence of the event, or all occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή όλες τις εμφανίσεις; All Όλα Only This Event Μόνο Αυτό το Συμβάν Do you want to change only this occurrence of the event, or this and all future occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή αυτήν και όλες τις μελλοντικές εμφανίσεις; All Future Events Όλα τα Μελλοντικά Συμβάντα You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Έχετε επιλέξει ένα ηλιακό μήνα, και θα ενημεÏ�ωνόμαστε σÏ�μφωνα με τους κανόνες του ηλιακοÏ� καλενδαÏ�ιοÏ�. OK button ΟΚ CScheduleSearchDateItem Y Ε M Μ D Η CScheduleSearchItem Edit ΕπεξεÏ�γασία Delete ΔιαγÏ�αφή All Day ΟλοήμεÏ�ο CScheduleSearchView No search results ΧωÏ�ίς αποτελέσματα αναζήτησης CScheduleView ALL DAY ΟΛΟΗΜΕΡΟ CSettingDialog import ICS file Εισαγωγή αÏ�χείου ICS Manual Μη αυτόματα 15 mins 15 λεπτά 30 mins 30 λεπτά 1 hour 1 ÏŽÏ�α 24 hours 24 ÏŽÏ�ες Sync Now ΣυγχÏ�ονισμός ΤώÏ�α Last sync Τελευταίος συγχÏ�ονισμός Please go to the Control Center to change system settings ΠαÏ�ακαλώ πάτε στο ΚέντÏ�ο Ελέγχου για να αλλάξετε τις συστηματικές Ï�υθμίσεις Monday ΔευτέÏ�α Sunday ΚυÏ�ιακή Use System Setting ΧÏ�ήση Συστηματικής ΡÏ�θμισης 12-hour clock 12-ωÏ�ο Ï�ολόι 24-hour clock 24-ωÏ�ο Ï�ολόι CTimeEdit (%1 mins) (%1 λεπτά) (%1 hour) (%1 ÏŽÏ�α) (%1 hours) (%1 ÏŽÏ�ες) CTitleWidget Y Ε M Μ W Î’ D Η Search events and festivals Αναζήτηση γεγονότων και εοÏ�τών CWeekWindow Week Εβδομάδα Y Y CYearScheduleView All Day ΟλοήμεÏ�ο No event ΧωÏ�ίς συμβάν CYearWindow Y Y CalendarWindow Calendar ΗμεÏ�ολόγιο Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Το ΗμεÏ�ολόγιο είναι ένα εÏ�γαλείο για να δεις ημεÏ�ομηνίες, αλλα και επίσης ένας εξÏ�πνος σχεδιαστής ημέÏ�ας για να Ï€Ï�ογÏ�αμματίσεις όλα τα Ï€Ï�άγματα στην ζωή. Calendarmainwindow Calendar ΗμεÏ�ολόγιο Manage ΔιαχείÏ�ηση Privacy Policy Πολιτική ΑποÏ�Ï�ήτου Syncing... ΣυγχÏ�ονισμός... Sync successful Επιτυχής συγχÏ�ονισμός Sync failed, please try later Η συγχÏ�ονισμός απέτυχε, παÏ�ακαλώ Ï€Ï�οσπαθήστε ξανά αÏ�γότεÏ�α CenterWidget All Day ΟλοήμεÏ�ο DAccountDataBase Work ΕÏ�γασία Life Ζωή Other Άλλο DAlarmManager Close button Κλείσιμο One day before start Μια ημέÏ�α Ï€Ï�ιν την εκκίνηση Remind me tomorrow ΥπενθÏ�μισέ μου αÏ�Ï�ιο Remind me later ΥπεθÏ�μισέ μου αÏ�γότεÏ�α 15 mins later 15 λεπτά αÏ�γότεÏ�α 1 hour later 1 ÏŽÏ�α αÏ�γότεÏ�α 4 hours later 4 ÏŽÏ�ες αÏ�γότεÏ�α Tomorrow ΑÏ�Ï�ιο Schedule Reminder ΠÏ�ογÏ�αμματισμός ΥπενθÏ�μισης %1 to %2 %1 εως %2 Today ΣήμεÏ�α DragInfoGraphicsView Edit ΕπεξεÏ�γασία Delete ΔιαγÏ�αφή New event Î�έο συμβάν New Event Î�έο Συμβάν JobTypeListView export εξαγωγή import ICS file εισαγωγή αÏ�χείου ICS You are deleting an event type. ΔιαγÏ�άφετε έναν Ï„Ï�πο γεγονότων. All events under this type will be deleted and cannot be recovered. Όλα τα γεγονότα υπό αυτόν τον Ï„Ï�πο θα διαγÏ�αφοÏ�ν και δεν θα μποÏ�έσετε να τα ανάκτησετε. Cancel button ΑκÏ�Ï�ωση Delete button ΔιαγÏ�αφή QObject Account settings Ρυθμίσεις λογαÏ�ιασμοÏ� Account ΛογαÏ�ιασμός Select items to be synced Επιλέξτε στοιχεία για συγχÏ�ονισμό Events Συμβάντα General settings Γενικές Ï�υθμίσεις Sync interval Διάστημα συγχÏ�ονισμοÏ� Manage calendar ΔιαχείÏ�ιση καλενδαÏ�ιοÏ� Calendar account ΛογαÏ�ιασμός ημεÏ�ολογίου Event types ΤÏ�ποι γεγονότων General Γενικά First day of week ΠÏ�ώτη ημέÏ�α της εβδομάδας Time Î�Ï�α Return Today Return ΣήμεÏ�α Return Today Today Return Today ΣήμεÏ�α ScheduleTypeEditDlg New event type Î�έος Ï„Ï�πος συμβάντος Edit event type ΕπεξεÏ�γασία Ï„Ï�που γεγονότων Import ICS file Εισαγωγή αÏ�χείου ICS Name: Όνομα: Color: ΧÏ�ώμα: ICS File: ΑÏ�χείο ICS: Cancel button ΑκÏ�Ï�ωση Save button Αποθήκευση The name can not only contain whitespaces Το όνομα δεν μποÏ�Ï�εί να πεÏ�ιέχει μόνο κενοÏ�Ï‚ χαÏ�ακτήÏ�ες Enter a name please ΠαÏ�ακαλώ εισάγετε ένα όνομα Shortcut Help Βοήθεια Delete event ΔιαγÏ�αφή συμβάντος Copy ΑντιγÏ�αφή Cut Αποκοπή Paste Επικόλληση Delete ΔιαγÏ�αφή Select all Επιλογή όλων SidebarCalendarWidget Y Ε M Μ TimeJumpDialog Go button Πάει UserloginWidget Sign In button ΣÏ�νδεση Sign Out button Έξοδος YearFrame Y Y today Today Today ΣήμεÏ�α linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_en.ts000066400000000000000000001473371523260663500265210ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color Cancel button Save button CDayMonthView Monday Tuesday Wednesday Thursday Friday Saturday Sunday CDayWindow Y M D Lunar CGraphicsView New Event CMonthScheduleNumItem %1 more CMonthView New event New Event CMonthWindow Y CMyScheduleView My Event OK button Delete button Edit button CPushButton New event type CScheduleDlg New Event Edit Event End time must be greater than start time OK button Never At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: Description: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Calendar account Type Description All Day Time: Time Solar Lunar Starts Ends Remind Me Repeat Daily Weekdays Weekly Monthly Yearly End Repeat After On Cancel button Save button CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Delete button Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button CScheduleSearchDateItem Y M D CScheduleSearchItem Edit Delete All Day CScheduleSearchView No search results CScheduleView ALL DAY CSettingDialog Sunday Monday Use System Setting 24-hour clock 12-hour clock Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings import ICS file CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWindow Week Y CYearScheduleView All Day No event CYearWindow Y CalendarWindow Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Delete New event New Event JobTypeListView You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Delete button export import ICS file QObject Account settings Account Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General First day of week Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type Edit event type Name: Color: Cancel button Save button The name can not only contain whitespaces Enter a name please Import ICS file <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Shortcut Help Delete event Copy Cut Paste Delete Select all SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_en_US.ts000066400000000000000000001316331523260663500271200ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog import ICS file Import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the Control Center to change system settings Please go to the Control Center to change system settings Monday Monday Sunday Sunday Use System Setting Use System Setting 12-hour clock 12-hour clock 24-hour clock 24-hour clock CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export export import ICS file import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Manage calendar Manage calendar Calendar account Calendar account Event types Event types General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Import ICS file Name: Name: Color: Color: ICS File: ICS File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_eo.ts000066400000000000000000001323101523260663500265030ustar00rootroot00000000000000 AccountItem Sync successful Sincronizado sukcese Network error Reto erroro Server exception Servo ekzepco Storage full Aldonado plena AccountManager Local account Loka konto Event types Eventaj tipoj CColorPickerWidget Color Koloro Cancel button Anule Save button Konservi CDayMonthView Monday Lundo Tuesday Mardo Wednesday Merkredo Thursday Ä´evo Friday Vendredo Saturday Sambato Sunday Dimanço CDayWindow Y Y M M D D Lunar Lunara CGraphicsView New Event Nova Evento CMonthScheduleNumItem %1 more %1 pli CMonthView New event Nova evento New Event Nova Evento CMonthWindow Y Y CMyScheduleView My Event Mia Evento OK button OK Delete button Forigi Edit button Redakti CPushButton New event type Nova evento tipo CScheduleDlg New Event Nova evento Edit Event Redakti evento End time must be greater than start time La tempo de fino devas esti pli granda ol tempo de komenco OK button OK Never Neniam At time of event En tempo de evento 15 minutes before 15 minutoj antaÅ­ 30 minutes before 30 minutoj antaÅ­ 1 hour before 1 horo antaÅ­ 1 day before 1 tago antaÅ­ 2 days before 2 tagoj antaÅ­ 1 week before 1 semajno antaÅ­ On start day (9:00 AM) Sur komencantajn tagojn (9:00 AM) time(s) tempo(j) Enter a name please Enigu nomon, bonvolu The name can not only contain whitespaces La nomo ne povas enhavi nur blankojn Type: Tipo: Description: Priskribo: All Day: Tuta tago: Starts: Komencas: Ends: Finas: Remind Me: Memorigu Mian: Repeat: Repeti: End Repeat: Fine de Repeti: Calendar account: Kalendaro-konto: Calendar account Kalendaro-konto Type Tipo Description Priskribo All Day Tuta tago Time: Tempo: Time Tempo Solar Solaro Lunar Lunara Starts Komencas Ends Fine Remind Me Memoru Repeat Repeti Daily Tagaj Weekdays Ä´armajn Weekly Semanaj Monthly Monataj Yearly Jarej End Repeat Fine de la ripeti After Post On Sur Cancel button Anuligi Save button Konservi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ĉiuj okazaĵoj de ripetanta evento devas havi la saman tuttagan statuson. Do you want to change all occurrences? Ĉu vi volas Å�anÄ�i ĉiujn okazaĵojn? Cancel button Anuligi Change All ÅœanÄ�i ĉiujn You are changing the repeating rule of this event. Vi Å�anÄ�as la ripetan regulon de ĉi tiu evento. You are deleting an event. Vi forigas eventon. Are you sure you want to delete this event? Ĉu vi certas, ke vi volas forigi ĉi tiun eventon? Delete button Forigi Do you want to delete all occurrences of this event, or only the selected occurrence? Ĉu vi volas forigi ĉiujn okazaĵojn de ĉi tiu evento, aÅ­ nur la elektitan okazaĵon? Delete All Forigi ĉiujn Delete Only This Event Forigi nur ĉi tiun eventon Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ĉu vi volas forigi ĉi tiun kaj ĉiujn futurajn okazaĵojn de ĉi tiu evento, aÅ­ nur la elektitan okazaĵon? Delete All Future Events Forigi ĉiujn futurajn eventojn You are changing a repeating event. Vi estas Å�anÄ�ante ripetantan eventon. Do you want to change only this occurrence of the event, or all occurrences? Ĉu vi volas Å�anÄ�i nur tiun okazion de la evento, aÅ­ ĉiujn okazojn? All Ĉiuj Only This Event Nur Tiu Evento Do you want to change only this occurrence of the event, or this and all future occurrences? Ĉu vi volas Å�anÄ�i nur tiun okazion de la evento, aÅ­ tiun kaj ĉiujn estontajn okazojn? All Future Events Ĉiuj Estontaj Eventoj You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vi elektis saltmonaton, kaj vi estos informita konsiderante la regulojn de la luna kalendro. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Redakti Delete Forigi All Day Tuta Tago CScheduleSearchView No search results Neniu serĉo rezultoj CScheduleView ALL DAY TUTA TAGO CSettingDialog import ICS file importi ICS dosieron Manual Manuale 15 mins 15 minutoj 30 mins 30 minutoj 1 hour 1 horo 24 hours 24 horoj Sync Now Sincronigi Nun Last sync Lasta sincrono Please go to the Control Center to change system settings Bonvolu iri al Kontrolcentro por Å�anÄ�i sistemon agordojn Monday Lundo Sunday Dimanĉo Use System Setting Uzi Sistemon Agordojn 12-hour clock 12-horaj horloko 24-hour clock 24-horaj horloko CTimeEdit (%1 mins) (%1 minutoj) (%1 hour) (%1 horo) (%1 hours) (%1 horoj) CTitleWidget Y Y M M W W D D Search events and festivals Serĉi eventojn kaj festojn CWeekWindow Week Semajno Y Y CYearScheduleView All Day Tuta tago No event Neniu evento CYearWindow Y Y CalendarWindow Calendar Kalendro Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendro estas ilo por vidigi datojn, kaj ankaÅ­ inteligenta taga plannisto por agordi ĉion en via vivo. Calendarmainwindow Calendar Kalendro Manage Administraci Privacy Policy Privata politiko Syncing... Sincronigado... Sync successful Sincronigo sukcesis Sync failed, please try later Sincronigo malsukcesis, bonvolu provu pli malfrue CenterWidget All Day Tuta tago DAccountDataBase Work Laboro Life Vivo Other Alia DAlarmManager Close button Fermi One day before start Unu tago antaÅ­ komenco Remind me tomorrow Memorigu min morgaÅ­ Remind me later Memorigu min pli malfrue 15 mins later 15 minutoj malfrue 1 hour later 1 horo post 4 hours later 4 horo post Tomorrow Morga Schedule Reminder Agendi Memo %1 to %2 '%1 Ä�is %2' Today HodiaÅ­ DragInfoGraphicsView Edit Redakti Delete Forigi New event Nova evento New Event Nova Evento JobTypeListView export eksporti import ICS file importi dosieron ICS You are deleting an event type. Vi forigas eventotipon. All events under this type will be deleted and cannot be recovered. Ĉiuj evento sub tiu tipo estos forigitaj kaj ne povos esti rekonstruitaj. Cancel button Anuli Delete button Forigi QObject Account settings Konto agordoj Account Konto Select items to be synced Elektu itemojn por sincroni Events Evento General settings Äœenerala agordoj Sync interval Sincrona intervalo Manage calendar Administri kalendaron Calendar account Kalendara konto Event types Eventotipoj General Äœenerala First day of week Unua tago de la semajno Time Tempo Return Today Return HodiaÅ­ Return Today Today Return Today HodiaÅ­ ScheduleTypeEditDlg New event type Nova evento tipo Edit event type Redakti evento tipo Import ICS file Importi ICS dosiero Name: Nomo: Color: Koloro: ICS File: ICS Dosiero: Cancel button Anuligi Save button Konservi The name can not only contain whitespaces La nomo ne povas nur konsisti el blankoj Enter a name please Bonvolu entre noman Shortcut Help Helpo Delete event Forigi evento Copy Kopii Cut Tagordi Paste MalkaÅ�i Delete Forigi Select all Elekti ĉion SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Malfermi UserloginWidget Sign In button Åœalti al Sign Out button Åœalti for YearFrame Y Y today Today Today HodiaÅ­ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_es.ts000066400000000000000000001466121523260663500265210ustar00rootroot00000000000000 AccountItem Sync successful Sincronización exitosa Network error Error de red Server exception Excepción del servidor Storage full Almacenamiento lleno AccountManager Local account Cuenta local Event types Tipos de eventos CColorPickerWidget Color Color Cancel button Cancelar Save button Guardar CDayMonthView Monday lunes Tuesday martes Wednesday miércoles Thursday jueves Friday viernes Saturday sábado Sunday domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Nuevo evento CMonthScheduleNumItem %1 more %1 más CMonthView New event Nuevo evento New Event Nuevo evento CMonthWindow Y A CMyScheduleView My Event Mi evento OK button Aceptar Delete button Borrar Edit button Editar CPushButton New event type Nuevo tipo de evento CScheduleDlg New Event Nuevo evento Edit Event Editar evento End time must be greater than start time El tiempo final debe ser mayor que el tiempo inicial OK button Aceptar Never Nunca At time of event En el momento del evento. 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) El día de inicio (9:00 a.m.) time(s) hora(s) Enter a name please Por favor ingrese un nombre The name can not only contain whitespaces El nombre no puede contener espacios en blanco Type: Tipo: Description: Descripción: All Day: Todo el día: Starts: Inicia: Ends: Termina: Remind Me: Recordarme: Repeat: Repetir: End Repeat: Fin de repetición: Calendar account: Cuenta de calendario: Calendar account Cuenta de calendario Type Tipo Description Descripción All Day Todo el día Time: Tiempo: Time Tiempo Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Recordarme Repeat Repetir Daily Diariamente Weekdays Días laborables Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Fin de repetición After Después On Encendido Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas las instancias de un evento repetido debe tener el mismo estado todo el día. Do you want to change all occurrences? ¿Desea cambiar todas las instancias? Cancel button Cancelar Change All Cambiar todos You are changing the repeating rule of this event. Está cambiando la regla de repetición de este evento. You are deleting an event. Esta borrando un evento Are you sure you want to delete this event? ¿Está seguro que desea borrar este evento? Delete button Borrar Do you want to delete all occurrences of this event, or only the selected occurrence? ¿Desea borrar todas las instancias de este evento, o solo la instancia seleccionada? Delete All Eliminar todo Delete Only This Event Borrar solo este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ¿Desea eliminar este y todas las instancias futuras de este evento, o solo la instancia seleccionada? Delete All Future Events Borrar todos los eventos futuros You are changing a repeating event. Esta cambiando una repetición de un evento. Do you want to change only this occurrence of the event, or all occurrences? ¿Desea cambiar solo la instancia de este evento, o todas las instancias? All Todos Only This Event Solo este evento Do you want to change only this occurrence of the event, or this and all future occurrences? ¿Desea cambiar solo este acontecimiento del evento, o este y todos los acontecimientos futuros? All Future Events Todos los eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ha seleccionado un mes bisiesto y se le recordará de acuerdo con las reglas del calendario lunar. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo el día CScheduleSearchView No search results Sin resultados CScheduleView ALL DAY EVENTOS CSettingDialog import ICS file Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar ahora Last sync Ultima sincronizacion Please go to the <a href='/'>Control Center</a> to change system settings Monday Lunes Sunday Domingo Use System Setting 12-hour clock Reloj de 12 horas 24-hour clock Reloj de 24 horas CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos y festivales CWeekWindow Week Semana Y A CYearScheduleView All Day Todo el día No event No hay eventos CYearWindow Y A CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario de Deepin es una herramienta para consultar fechas, y un conveniente planificador para agendar sus reuniones y eventos. Calendarmainwindow Calendar Calendario Manage Ajustes Privacy Policy Política de privacidad Syncing... Sincronizando… Sync successful Sincronización exitosa Sync failed, please try later La sincronización falló, intentelo más tarde CenterWidget All Day Todo el día DAccountDataBase Work Trabajo Life Vida Other Otro DAlarmManager Close button Cerrar One day before start El día anterior al evento Remind me tomorrow Recuérdame mañana Remind me later Recuérdame luego 15 mins later 15 minutos después 1 hour later 1 hora después 4 hours later 4 horas después Tomorrow Mañana Schedule Reminder Programar Recordatorio %1 to %2 %1 a %2 Today Hoy DragInfoGraphicsView Edit Editar Delete Borrar New event Nuevo evento New Event Nuevo evento JobTypeListView export import ICS file You are deleting an event type. Está eliminando un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos los eventos de este tipo se eliminarán y no se podrán recuperar. Cancel button Cancelar Delete button Eliminar QObject Account settings Ajustes de la cuenta Account Cuenta Select items to be synced Seleccionar elementos a sincronizar Events Eventos General settings Ajustes generales Sync interval Intervalo de sincronización Manage calendar Administrar calendario Calendar account Cuenta de calendario Event types Tipos de eventos General General First day of week Primer día de la semana Time Tiempo Return Today Return Hoy Return Today Today Return Today Hoy ScheduleTypeEditDlg New event type Nuevo tipo de evento Edit event type Editar tipo de evento Import ICS file Name: Nombre: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancelar Save button Guardar The name can not only contain whitespaces El nombre no puede contener espacios en blanco Enter a name please Por favor ingrese un nombre Shortcut Help Ayuda Delete event Borrar evento Copy Duplicar Cut Cortar Paste Pegar Delete Borrar Select all Seleccionar todo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Cerrar sesión YearFrame Y A today Today Today Hoy linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_et.ts000066400000000000000000001323531523260663500265170ustar00rootroot00000000000000 AccountItem Sync successful Sünk onnistus Network error Võrgu viga Server exception Serveri viga Storage full Salvestusruum täis AccountManager Local account Kohalik kasutaja Event types Sündmustüübid CColorPickerWidget Color Värv Cancel button Tühjenda Save button Salvesta CDayMonthView Monday Esmaspäev Tuesday Teisipäev Wednesday Kolmapäev Thursday Neljapäev Friday Reede Saturday Laupäev Sunday Pühapäev CDayWindow Y Y M M D D Lunar Luuar CGraphicsView New Event Uus sündmus CMonthScheduleNumItem %1 more %1 rohkem CMonthView New event Uus sündmus New Event Uus sündmus CMonthWindow Y Y CMyScheduleView My Event Minu sündmus OK button OK Delete button Kustuta Edit button Muuda CPushButton New event type Uus sündmustüüp CScheduleDlg New Event Uus sündmus Edit Event Muuda sündmust End time must be greater than start time Lõppaeg peab olema suurem kui algus OK button OK Never Kordamata At time of event Sündmuse aeg 15 minutes before 15 minutit enne 30 minutes before 30 minutit enne 1 hour before 1 tund enne 1 day before 1 päev enne 2 days before 2 päeva enne 1 week before 1 nädal enne On start day (9:00 AM) Alguspäeval (9:00) time(s) aeg(a) Enter a name please Sisestage nimi The name can not only contain whitespaces Nimi ei tohi sisaldada ainult tühikuid Type: Tüüp: Description: Kirjeldus: All Day: Kogu päev: Starts: Alustab: Ends: Lõpetab: Remind Me: Tuletage meelde: Repeat: Kordu: End Repeat: Lõpeta kordumine Calendar account: Kalendri konto: Calendar account Kalendri konto Type Tüüp Description Kirjeldus All Day Kogu päev Time: Aeg: Time Aeg Solar Sool Lunar Kuu Starts Alustab Ends Lõppeb Remind Me Tuletage mind meelde Repeat Kordu Daily Käivitada igapäevat Weekdays Käivitada tööpäevadel Weekly Käivitada nädalalt Monthly Käivitada kuuval Yearly Käivitada aastalt End Repeat Lõpeta kordumine After Pärast On Päeval Cancel button Kellega Save button Salvesta CScheduleOperation All occurrences of a repeating event must have the same all-day status. Korduvuse kõik toimunud sündmused peavad olema samasugune kogu päeva staatusega. Do you want to change all occurrences? Kas soovite kõiki toimunud sündmusi muuta? Cancel button Kellega Change All Muuda kõiki You are changing the repeating rule of this event. Teie muudavad seda sündmuse korduvuse reeglit. You are deleting an event. Teie kustutate sündmuse. Are you sure you want to delete this event? Kas soovite kindlasti kustutada seda sündmuse? Delete button Kustuta Do you want to delete all occurrences of this event, or only the selected occurrence? Kas soovite kustutada kõiki sündmusi, või ainult valitud sündmust? Delete All Kustuta kõik Delete Only This Event Kustuta ainult see sündmus Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Kas soovite kustutada seda ja kõiki tulevaid sündmusi, või ainult valitud sündmust? Delete All Future Events Kustuta kõik tulevased sündmused You are changing a repeating event. Te muudavad korduvat sündmust. Do you want to change only this occurrence of the event, or all occurrences? Soovite muuta ainult seda sündmust, või kõiki sündmusi? All Kõik Only This Event Ainult see sündmus Do you want to change only this occurrence of the event, or this and all future occurrences? Soovite muuta ainult seda sündmust või seda ja kõiki tulevaseid sündmusi? All Future Events Kõik tulevased sündmused You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Olete valinud kuuksa kuu ja teadlikkuse saamiseks järgite lünar kalendrit. OK button OK CScheduleSearchDateItem Y J M K D P CScheduleSearchItem Edit Muuda Delete Kustuta All Day Kogu päev CScheduleSearchView No search results Otsingutulemusi pole CScheduleView ALL DAY KOGU PÄEV CSettingDialog import ICS file Impordi ICS fail Manual Manuaalne 15 mins 15 minutit 30 mins 30 minutit 1 hour 1 tund 24 hours 24 tundi Sync Now Sünkrooni nüüd Last sync Viimane sünkroon Please go to the Control Center to change system settings Palun minnige Kontrollkeskus muuta süsteemi seadeid Monday Esmaspäev Sunday Pühapäev Use System Setting Kasuta süsteemi seadet 12-hour clock 12-tundeline kell 24-hour clock 24-tundeline kell CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 tund) (%1 hours) (%1 tundi) CTitleWidget Y Y M M W W D D Search events and festivals Otsi sündmusi ja festivalisid CWeekWindow Week Nädal Y Y CYearScheduleView All Day Kogu päev No event Päevakava CYearWindow Y Y CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender on tööriist, millega saab kuupäevaid vaadata, ja ka tugev päevakava, et planeerida elu kõike. Calendarmainwindow Calendar Kalender Manage Haldamine Privacy Policy Privatsuspoliitika Syncing... Sünkroniseerimine... Sync successful Sünkroniseerimine õnnestus Sync failed, please try later Sünkroniseerimine ebaõnnestus, proovige hiljem CenterWidget All Day Kogu päev DAccountDataBase Work Töö Life Elu Other Muud DAlarmManager Close button Sulge One day before start Ühe päeva enne algust Remind me tomorrow Tuletage mind tühja päevaga Remind me later Tuletage mind hiljem 15 mins later 15 minutit hiljem 1 hour later 1 tunni pärast 4 hours later 4 tunni pärast Tomorrow Eestimäe Schedule Reminder Aja märgata %1 to %2 '%1 kuni %2' Today Täna DragInfoGraphicsView Edit Muuda Delete Kustuta New event Uus sündmus New Event Uus Sündmus JobTypeListView export eksport import ICS file impordi ICS fail You are deleting an event type. Teie kustutate sündmusliiki. All events under this type will be deleted and cannot be recovered. Kõik sündmused selle liigis kustutatakse ja neid ei saa tagasi saada. Cancel button Tühista Delete button Kustuta QObject Account settings Kontokirjeldus Account Konto Select items to be synced Vali ühendatavad elemendid Events Sündmused General settings Üldised seaded Sync interval Sünkrodeerimise vahetus Manage calendar Haldama kalendrit Calendar account Kalendri konto Event types Sündmusliigid General Üldine First day of week Nädalavahepäev Time Aeg Return Today Return Täna Return Today Today Return Today Täna ScheduleTypeEditDlg New event type Uue sündmusliik Edit event type Muuda sündmusliiki Import ICS file Impordi ICS fail Name: Nimi: Color: Värv: ICS File: ICS Fail: Cancel button Tühjasta Save button Salvesta The name can not only contain whitespaces Nimi ei tohi sisaldada ainult tühjusruumis Enter a name please Sisesta nimi, palun Shortcut Help Abi Delete event Kustuta sündmus Copy Kopeeri Cut Lõika Paste Liiku Delete Kustuta Select all Vali kõik SidebarCalendarWidget Y A M Kuu TimeJumpDialog Go button Mine UserloginWidget Sign In button Logi sisse Sign Out button Logi välja YearFrame Y A today Today Today Täna linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_eu.ts000066400000000000000000001327041523260663500265200ustar00rootroot00000000000000 AccountItem Sync successful Sinhak on ezarotu Network error Errore netwerkarraren Server exception Aurrekontaren erorria Storage full Garderoa bete AccountManager Local account Kontua lokale Event types Aurrekontu motak CColorPickerWidget Color Kolorea Cancel button Utzi Save button Gorde CDayMonthView Monday Astelehena Tuesday Asteartea Wednesday Osteguna Thursday Ostirala Friday Larunbata Saturday Maites Sunday Igandea CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event Ezagin berria CMonthScheduleNumItem %1 more %1 gehiago CMonthView New event Ezagin berria New Event Ezagin berria CMonthWindow Y Y CMyScheduleView My Event Nire ezagin OK button OK Delete button Ezabatu Edit button Aldatu CPushButton New event type Ezagin mota berria CScheduleDlg New Event Ere newa Edit Event Aldatu Ere End time must be greater than start time Denbora bukaeran ezin da izan hasiera denbora baino txikia izatea OK button OK Never Inoiz At time of event Erearen denbora 15 minutes before 15 minutu lehenago 30 minutes before 30 minutu lehenago 1 hour before 1 ordu lehenago 1 day before 1 egun lehenago 2 days before 2 egun lehenago 1 week before 1 heburo lehenago On start day (9:00 AM) Hasiera egunaren (9:00 AM) time(s) denborak Enter a name please Sartu izena mesedez The name can not only contain whitespaces Izena ezin da soilik espazioa izatea Type: Mota: Description: Deskribapena: All Day: Denbora osoa: Starts: Hasieratzen: Ends: Bukatzen: Remind Me: Gogoratu Nire: Repeat: Berrizten: End Repeat: Bukatu Berrizten: Calendar account: Kalendariorako kontua: Calendar account Kalendariorako kontua Type Mota Description Deskribapena All Day Denbora osoa Time: Denbora: Time Denbarka Solar Solarraren Lunar Lunarraren Starts Hasieratzen Ends Amaitzen Remind Me Kontatu Nirekin Repeat Berriztu Daily Eguneratik Weekdays Astelehentzat Weekly Asteratik Monthly Hunetik Yearly Urteratik End Repeat Berriztu Amaitu After Ona On Ona Cancel button Utzi Save button Gorde CScheduleOperation All occurrences of a repeating event must have the same all-day status. Berriztu egin daitekeen gertaera guztiak berdin den eguneko egoera izan behar dute. Do you want to change all occurrences? Gertaera guztiak aldatu nahi dizkiozu? Cancel button Utzi Change All Den guztiak aldatu You are changing the repeating rule of this event. Gertaera honen berriztu erregea aldatzen ari zara. You are deleting an event. Gertaera bat ezabatzen ari zara. Are you sure you want to delete this event? Zuretzat gertaera hau ezabatzea ziur zaio? Delete button Ezabatu Do you want to delete all occurrences of this event, or only the selected occurrence? Gertaera hau ezabatzea nahi dizkiozu, edo aukeratutako gertaera bakar bat? Delete All Den guztiak ezabatu Delete Only This Event Gertaera hau bakarrik ezabatu Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Gertaera hau eta den ondorengoak ezabatzea nahi dizkiozu, edo aukeratutako gertaera bakar bat? Delete All Future Events Den ondorengoak ezabatu You are changing a repeating event. Zurekin aldakuntza egingo duzula Do you want to change only this occurrence of the event, or all occurrences? Zurekin aldakuntza egingo duzula, soilabere edo guztiak? All Guztiak Only This Event Soilabere Zurekin Do you want to change only this occurrence of the event, or this and all future occurrences? Zurekin aldakuntza egingo duzula, soilabere edo zurekin eta guztiak ondorengo? All Future Events Guztiak Ondorengo You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Zurekin aukeratutako hilabete lepua da, eta egunekoaren arabera ezagutzera egingo dizula lunaren kalendarioko erregelak OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editatu Delete Ezabatu All Day Guztiak Eguneko CScheduleSearchView No search results Bilaketa emaitzak ez daude CScheduleView ALL DAY ALL DAY CSettingDialog import ICS file ICS fitxategia inportatu Manual Manuala 15 mins 15 minutu 30 mins 30 minutu 1 hour 1 ordu 24 hours 24 ordu Sync Now Sinhon Last sync Azken sinhona Please go to the Control Center to change system settings Mesedez, Kontrol Zentroa joan ezazu sistema ezarpenak aldatzeko Monday Astelehena Sunday Astearraga Use System Setting Sistema Ezarpena erabili 12-hour clock 12 orduko ordua 24-hour clock 24 orduko ordua CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 ora) (%1 hours) (%1 orak) CTitleWidget Y Y M M W W D D Search events and festivals Bilatu gertakariak eta festuak CWeekWindow Week Astea Y Y CYearScheduleView All Day Denbora osoa No event Ez da gertakaria CYearWindow Y Y CalendarWindow Calendar Kalendaria Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendaria datak ikusteko tresna da, eta gainera, denbora eguneko planifikatzaile zinigarrira da, bizitzan egon dauden guztiak programatzeko. Calendarmainwindow Calendar Kalendaria Manage Kudeatu Privacy Policy Pribatutasun politikak Syncing... Sinhronizatzen... Sync successful Sinhronizazioa ondo egin da Sync failed, please try later Sinhronizazioa huts egin da, mesedez saiatu berriro CenterWidget All Day Denbora osoa DAccountDataBase Work Lan Life Bizi Other Beste DAlarmManager Close button Itzuli One day before start Hasierako egun ekin baino lehen Remind me tomorrow Nora egin nahi dut tomorra Remind me later Nora egin nahi dut ondoren 15 mins later 15 minutu ondoren 1 hour later 1 ordu barruan 4 hours later 4 ordu barruan Tomorrow Astelehen Schedule Reminder Programatzen Orotz %1 to %2 '%1 %2' Today Gaur DragInfoGraphicsView Edit Editatu Delete Ezabatu New event Aurreko gertaera New Event Aurreko Gertaera JobTypeListView export esportatu import ICS file ICS fitxategia inportatu You are deleting an event type. Gertaera mota bat ezabatzen ari zara. All events under this type will be deleted and cannot be recovered. Aurreko gertaera guztiak hau mota dutan ezabatuko dira eta berreskuratu ezin dira. Cancel button Utzi Delete button Ezabatu QObject Account settings Kontu ezarpenak Account Kontu Select items to be synced Sinhronizatzeko elementuak aukeratu Events Gertaera General settings Orokorra ezarpenak Sync interval Sinhronizazio intervalua Manage calendar Kalendarioa kudeatu Calendar account Kalendario kontua Event types Gertaera mota General Orokorra First day of week Astearen lehen eguna Time Denbora Return Today Return Gaur Return Today Today Return Today Gaur ScheduleTypeEditDlg New event type Ezki eventu mota berria Edit event type Editatu eventu mota Import ICS file Inportatu ICS fitxategia Name: Izena: Color: Kolora: ICS File: ICS Fitxategia: Cancel button Utzi Save button Gorde The name can not only contain whitespaces Izena ezin da soilik espazio hutsak izan Enter a name please Sartu izena mesedez Shortcut Help Laguntza Delete event Ezabatu eventua Copy Kopiatu Cut Aurkitu Paste Itsatsi Delete Ezabatu Select all Aukeratu dena SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Joan UserloginWidget Sign In button Inregistratu Sign Out button Irten YearFrame Y Y today Today Today Gaur linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_fa.ts000066400000000000000000001366641523260663500265060ustar00rootroot00000000000000 AccountItem Sync successful زمان‌بندی با موÙ�قیت انجام شد Network error خطای شبکه Server exception استثناء سرور Storage full پشتیبان‌گیری پر است AccountManager Local account حساب محلی Event types نوع‌های رویداد CColorPickerWidget Color رنگ Cancel button انصراÙ� Save button ذخیره CDayMonthView Monday دوشنبه Tuesday سه‌شنبه Wednesday چهارشنبه Thursday پنج‌شنبه Friday جمعه Saturday شنبه Sunday یکشنبه CDayWindow Y یکشنبه M ماه D روز Lunar ماهی CGraphicsView New Event رویداد جدید CMonthScheduleNumItem %1 more %1 بیشتر CMonthView New event رویداد جدید New Event رویداد جدید CMonthWindow Y رویداد من CMyScheduleView My Event نوع رویداد جدید OK button تایید Delete button حذÙ� Edit button ویرایش CPushButton New event type رویداد جدید CScheduleDlg New Event ویرایش رویداد Edit Event زمان پایان باید بیشتر از زمان شروع باشد End time must be greater than start time در زمان رویداد OK button تایید Never هرگز At time of event قبل از Û±Ûµ دقیقه 15 minutes before قبل از Û³Û° دقیقه 30 minutes before 30 دقیقه قبل 1 hour before 1 ساعت قبل 1 day before 1 روز قبل 2 days before 2 روز قبل 1 week before 1 Ù‡Ù�ته قبل On start day (9:00 AM) در روز شروع (9:00 ص) time(s) زمان(ها) Enter a name please لطÙ�اً یک نام وارد کنید The name can not only contain whitespaces نام تنها می‌تواند شامل Ù�ضاها نباشد Type: نوع: Description: توضیحات: All Day: تمام روز: Starts: شروع می‌شود: Ends: پایان می‌شود: Remind Me: مرا به یاد آور Repeat: تکرار: End Repeat: پایان تکرار: Calendar account: سчетка کалендار: Calendar account سчетка کالендار Type نوع Description توضیحات All Day تمام روز Time: زمان: Time زمان Solar خورشیدی Lunar ماهیی Starts شروع می‌شود Ends پایان می‌شود Remind Me مرا به یاد آور Repeat تکرار Daily روزانه Weekdays روزهای کاری Weekly Ù‡Ù�تگی Monthly ماهانه Yearly سالیانه End Repeat پایان تکرار After بعد On در Cancel button انصراÙ� Save button ذخیره CScheduleOperation All occurrences of a repeating event must have the same all-day status. تمام تکرارهای رویداد تکراری باید وضعیت یک روز کامل یکسانی داشته باشند. Do you want to change all occurrences? آیا می‌خواهید تمام تکرارها را تغییر دهید؟ Cancel button انصراÙ� Change All همه را تغییر ده You are changing the repeating rule of this event. شما قاعده تکراری این رویداد را تغییر می‌دهید. You are deleting an event. شما یک رویداد را حذÙ� می‌کنید. Are you sure you want to delete this event? آیا مطمئن هستید Ú©Ù‡ می‌خواهید این رویداد را حذÙ� کنید؟ Delete button حذÙ� Do you want to delete all occurrences of this event, or only the selected occurrence? آیا می‌خواهید تمام تکرارهای این رویداد را حذÙ� نمایید یا Ù�قط تکرار انتخاب شده؟ Delete All همه را حذÙ� Ú©Ù† Delete Only This Event Ù�قط این رویداد را حذÙ� Ú©Ù† Do you want to delete this and all future occurrences of this event, or only the selected occurrence? آیا می‌خواهید این رویداد Ùˆ تمام تکرارهای آینده آن را حذÙ� کنید یا Ù�قط تکرار انتخاب شده؟ Delete All Future Events تمام رویدادهای آینده را حذÙ� Ú©Ù† You are changing a repeating event. شما یک رویداد تکراری را تغییر می‌دهید. Do you want to change only this occurrence of the event, or all occurrences? آیا می‌خواهید Ù�قط تکرار این رویداد را تغییر دهید یا تمام تکرارها؟ All همه Only This Event Ù�قط این رویداد Do you want to change only this occurrence of the event, or this and all future occurrences? آیا می‌خواهید Ù�قط تکرار این رویداد را تغییر دهید یا این رویداد Ùˆ تمام تکرارهای آینده آن؟ All Future Events تمام رویدادهای آینده You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ماهی Ú©Ù‡ انتخاب کرده‌اید یک ماه گرÙ�تار است Ùˆ به شما اطلاع رسانی خواهد شد به طوری Ú©Ù‡ قوانین کالندر ماهیانه را رعایت کند. OK button تایید CScheduleSearchDateItem Y سال M ماه D روز CScheduleSearchItem Edit ویرایش Delete حذÙ� All Day تمام روز CScheduleSearchView No search results نتیجه جستجو یاÙ�ت نشد CScheduleView ALL DAY تمام روز CSettingDialog import ICS file ورود Ù�ایل ICS Manual دستی 15 mins 15 دقیقه 30 mins 30 دقیقه 1 hour Û± ساعت 24 hours 24 ساعت Sync Now هماچنین هماهنوا Last sync آخرین هماهنوا Please go to the Control Center to change system settings لطÙ�ا به مرکز کنترل بروید تا تنظیمات سیستم را تغییر دهید Monday دوشنبه Sunday شنبه Use System Setting از تنظیمات سیستم استÙ�اده کنید 12-hour clock ساعت 12 ساعتی 24-hour clock ساعت 24 ساعتی CTimeEdit (%1 mins) (%1 دقیقه) (%1 hour) (%1 ساعت) (%1 hours) (%1 ساعت) CTitleWidget Y ÛŒ M Ù… W روز D روز Search events and festivals جستجوی رویدادها Ùˆ جشنها CWeekWindow Week Ù‡Ù�ته Y ÛŒ CYearScheduleView All Day تمام روز No event هیچ رویدادی CYearWindow Y ÛŒ CalendarWindow Calendar تقویم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. تقویم ابزاری برای مشاهده تاریخها Ùˆ همچنین یک برنامه روزانه هوشمند برای برنامه ریزی همه چیزهای زندگی است. Calendarmainwindow Calendar تقویم Manage مدیریت Privacy Policy سیاست حریم خصوصی Syncing... در حال همگام سازی... Sync successful هماهنوا موÙ�Ù‚ بود Sync failed, please try later هماهنوا ناموÙ�Ù‚ بود، لطÙ�ا دوباره تلاش کنید CenterWidget All Day تمام روز DAccountDataBase Work کار Life زندگی Other سایر DAlarmManager Close button بستن One day before start یک روز قبل از شروع Remind me tomorrow Ù�ردا یادم بنداز Remind me later بعدا Ù‹ به من یادآوری Ú©Ù† 15 mins later 15 دقیقه دیگر 1 hour later 1 ساعت دیگر 4 hours later 4 ساعت بعد Tomorrow Ù�ردا Schedule Reminder یادآور برنامه %1 to %2 '%1 به %2' Today امروز DragInfoGraphicsView Edit ویرایش Delete حذÙ� New event رویداد جدید New Event رویداد جدید JobTypeListView export صدور import ICS file وارد کردن Ù�ایل ICS You are deleting an event type. شما در حال حذÙ� نوعی رویداد هستید. All events under this type will be deleted and cannot be recovered. تمام رویدادهای زیر این نوع حذÙ� خواهند شد Ùˆ قابل بازیابی نیستند. Cancel button انصراÙ� Delete button حذÙ� QObject Account settings تنظیمات حساب Account حساب کاربری Select items to be synced آیتم هایی Ú©Ù‡ Ù…ÛŒ خواهید همزمان سازی شوند را انتخاب کنید Events رویدادها General settings تنظیمات عمومی Sync interval بازه همزمان سازی Manage calendar مدیریت کالندر Calendar account حساب کالندر Event types نوع های رویداد General Ú©Ù„ÛŒ First day of week روز اول Ù‡Ù�ته Time زمان Return Today Return امروز Return Today Today Return Today امروز ScheduleTypeEditDlg New event type نوع جدید رویداد Edit event type ویرایش نوع رویداد Import ICS file وارد کردن Ù�ایل ICS Name: نام: Color: رنگ: ICS File: Ù�ایل ICS: Cancel button انصراÙ� Save button ذخیره The name can not only contain whitespaces نام تنها Ù…ÛŒ تواند شامل Ù�اصله های بیشمار باشد Enter a name please لطÙ�اً یک نام وارد کنید Shortcut Help راهنما Delete event حذÙ� رویداد Copy Ú©Ù¾ÛŒ Cut برش Paste اÙ�زودن Delete حذÙ� Select all انتخاب همه SidebarCalendarWidget Y 'ÛŒ' M ماه TimeJumpDialog Go button رود UserloginWidget Sign In button وارد شدن به حساب کاربری Sign Out button خارج شدن از حساب کاربری YearFrame Y سال today Today Today امروز linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_fi.ts000066400000000000000000001323731523260663500265070ustar00rootroot00000000000000 AccountItem Sync successful Synkronointi onnistui Network error Verkkovirhe Server exception Palvelimen poikkeus Storage full Levytila täynnä AccountManager Local account Paikallinen tili Event types Tapahtumatyypit CColorPickerWidget Color Väri Cancel button Peruuta Save button Tallenna CDayMonthView Monday Maanantai Tuesday Tiistai Wednesday Keskiviikko Thursday Torstai Friday Perjantai Saturday Lauantai Sunday Sunnuntai CDayWindow Y V M K D P Lunar Kuu CGraphicsView New Event Uusi tapahtuma CMonthScheduleNumItem %1 more %1 lisää CMonthView New event Uusi tapahtuma New Event Uusi tapahtuma CMonthWindow Y V CMyScheduleView My Event Tapahtuma OK button OK Delete button Poista Edit button Muokkaa CPushButton New event type Uusi tapahtuman tyyppi CScheduleDlg New Event Uusi tapahtuma Edit Event Muokkaa tapahtumaa End time must be greater than start time Lopetusajan on oltava pidempi kuin aloitusaika OK button OK Never Ei koskaan At time of event Tapahtuman aikaan 15 minutes before 15 min ennen 30 minutes before 30 min ennen 1 hour before 1 tunti ennen 1 day before 1 päivä ennen 2 days before 2 päivää ennen 1 week before 1 viikko ennen On start day (9:00 AM) Aloituspäivänä (9:00) time(s) kertaa Enter a name please Anna nimi The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Type: Tyyppi: Description: Kuvaus: All Day: Koko päivä: Starts: Alkaa: Ends: Loppuu: Remind Me: Muistuta minua: Repeat: Toista: End Repeat: Lopeta toisto: Calendar account: Kalenteritili: Calendar account Kalenteritili Type Tyyppi Description Kuvaus All Day Koko päivä Time: Aika: Time Aika Solar Aurinko Lunar Kuu Starts Alkaa Ends Loppuu Remind Me Muistuta minua Repeat Toista Daily Päivittäin Weekdays Arkisin Weekly Viikoittain Monthly Kuukausittain Yearly Vuosittain End Repeat Lopeta toisto After Jälkeen On Päällä Cancel button Peruuta Save button Tallenna CScheduleOperation All occurrences of a repeating event must have the same all-day status. Kaikilla toistuvilla tapahtumilla on oltava sama koko päivän tila. Do you want to change all occurrences? Haluatko muuttaa kaikkia tapahtumia? Cancel button Peruuta Change All Vaihda kaikki You are changing the repeating rule of this event. Olet muuttamassa tämän tapahtuman toistuvaa sääntöä. You are deleting an event. Olet poistamassa tapahtumaa. Are you sure you want to delete this event? Haluatko varmasti poistaa tämän tapahtuman? Delete button Poista Do you want to delete all occurrences of this event, or only the selected occurrence? Haluatko poistaa kaikki tämän tapahtuman esiintymät vai vain valitun tapahtuman? Delete All Poista kaikki Delete Only This Event Poista vain tämä tapahtuma Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Haluatko poistaa tämän ja kaikki tämän tapahtuman tulevat esiintymät vai vain valitun tapahtuman? Delete All Future Events Poista kaikki tulevat tapahtumat You are changing a repeating event. Olet vaihtamassa toistuvaa tapahtumaa. Do you want to change only this occurrence of the event, or all occurrences? Haluatko muuttaa vain tämän tapahtuman vai kaikki tapahtumat? All Kaikki Only This Event Vain tämä tapahtuma Do you want to change only this occurrence of the event, or this and all future occurrences? Haluatko muuttaa vain tämän tapahtuman vai tätä ja kaikkia tulevia tapahtumia? All Future Events Kaikki tulevat tapahtumat You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Olet valinnut karkauskuukauden ja sinua muistutetaan kuukalenterin sääntöjen mukaisesti. OK button OK CScheduleSearchDateItem Y V M K D P CScheduleSearchItem Edit Muokkaa Delete Poista All Day Koko päivä CScheduleSearchView No search results Ei hakutuloksia CScheduleView ALL DAY AIKA CSettingDialog import ICS file Tuo ICS-kalenteri Manual Manuaalinen 15 mins 15 min 30 mins 30 min 1 hour 1 tunti 24 hours 24 tuntia Sync Now Synkronoi nyt Last sync Viimeisin synkronointi Please go to the Control Center to change system settings Siirry ohjauspaneeliin ja muuta asetuksia Monday Maanantai Sunday Sunnuntai Use System Setting Käytä järjestelmän asetuksia 12-hour clock 12h kello 24-hour clock 24h kello CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 tunti) (%1 hours) (%1 tuntia) CTitleWidget Y V M KK W VK D PV Search events and festivals Hae tapahtumia ja festivaaleja CWeekWindow Week Viikko Y V CYearScheduleView All Day Koko päivä No event Ei tapahtumaa CYearWindow Y V CalendarWindow Calendar Kalenteri Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalenteri on työkalu almanakan tarkasteluun ja voit myös tehdä hälytykset ja muistutukset kalenteriin. Calendarmainwindow Calendar Kalenteri Manage Hallitse Privacy Policy Tietosuojakäytäntö Syncing... Synkronoidaan... Sync successful Synkronointi onnistui Sync failed, please try later Synkronointi epäonnistui, yritä myöhemmin CenterWidget All Day Koko päivä DAccountDataBase Work Työ Life Oma Other Muu DAlarmManager Close button Sulje One day before start Päivä ennen alkua Remind me tomorrow Muistuta huomenna Remind me later Muistuta myöhemmin 15 mins later 15 min myöhemmin 1 hour later 1 tunnin kuluttua 4 hours later 4 tunnin kuluttua Tomorrow Huomenna Schedule Reminder Ajasta muistutus %1 to %2 %1 - %2 Today Tänään DragInfoGraphicsView Edit Muokkaa Delete Poista New event Uusi tapahtuma New Event Uusi tapahtuma JobTypeListView export vie import ICS file tuo ICS kalenteri You are deleting an event type. Olet poistamassa tapahtumatyyppiä. All events under this type will be deleted and cannot be recovered. Kaikki tämän tyypin tapahtumat poistetaan, eikä niitä voi palauttaa. Cancel button Peruuta Delete button Poista QObject Account settings Tilin asetukset Account Tili Select items to be synced Valitse synkronoitavat kohteet Events Tapahtumat General settings Yleiset asetukset Sync interval Synkronointiväli Manage calendar Hallitse kalenteria Calendar account Kalenteritili Event types Tapahtumatyypit General Yleinen First day of week Viikon ensimmäinen päivä Time Aika Return Today Return Tänään Return Today Today Return Today Tänään ScheduleTypeEditDlg New event type Uusi tapahtuman tyyppi Edit event type Muokkaa tapahtuman tyyppiä Import ICS file tuo ICS kalenteri Name: Nimi: Color: Väri: ICS File: ICS-tiedosto: Cancel button Peruuta Save button Tallenna The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Enter a name please Anna nimi Shortcut Help Ohje Delete event Poista tapahtuma Copy Kopioi Cut Leikkaa Paste Liitä Delete Poista Select all Valitse kaikki SidebarCalendarWidget Y V M K TimeJumpDialog Go button Mene UserloginWidget Sign In button Kirjaudu sisään Sign Out button Kirjaudu ulos YearFrame Y V today Today Today Tänään linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_fil.ts000066400000000000000000001334121523260663500266560ustar00rootroot00000000000000 AccountItem Sync successful Nag-sync na Network error Mga error sa network Server exception Pangungusap ng server Storage full Napuno ang storage AccountManager Local account Local account Event types Uri ng mga event CColorPickerWidget Color Kolor Cancel button Iwan Save button I-save CDayMonthView Monday Lunes Tuesday Martes Wednesday Miyerkules Thursday Huwebes Friday Biyernes Saturday Sabado Sunday Linggo CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event Bagong Event CMonthScheduleNumItem %1 more %1 pa CMonthView New event Bagong event New Event Bagong Event CMonthWindow Y Y CMyScheduleView My Event Aking Event OK button OK Delete button Tanggalin Edit button I-edit CPushButton New event type Bagong uri ng event CScheduleDlg New Event Bagong Evento Edit Event I-edit ang Evento End time must be greater than start time Dapat ang oras ng pagtatapos ay mas malaki kaysa sa oras ng pagmamarka OK button OK Never Kailanman At time of event Sa oras ng event 15 minutes before 15 minuto bago 30 minutes before 30 minuto bago 1 hour before 1 oras bago 1 day before 1 araw bago 2 days before 2 araw bago 1 week before 1 linggo bago On start day (9:00 AM) Sa araw ng pagmamarka (9:00 AM) time(s) oras (s) Enter a name please Pakisulat ang pangalan The name can not only contain whitespaces Ang pangalan ay di maaaring magmula lamang sa espasyo Type: Uri: Description: Paliwanag: All Day: Bawat Araw: Starts: Nagsisimula: Ends: Nagtatapos: Remind Me: I-remind ako: Repeat: Ibuwang: End Repeat: Tumigil sa pagbubuwag Calendar account: Konting akademya: Calendar account Konting akademya Type Uri Description Paliwanag All Day Bawat Araw Time: Oras: Time Oras Solar Sariling araw Lunar Lunary Starts Nagsisimula Ends Natutapos Remind Me Tandaan ako Repeat Palakasin Daily Araw-araw Weekdays Araw ng linggo Weekly Linggo-linggo Monthly Buwan-buwan Yearly Taon-taon End Repeat Tapusin ang palakasan After Pagkatapos On Sa Cancel button Iwan Save button I-save CScheduleOperation All occurrences of a repeating event must have the same all-day status. Lahat ng mga pangyayari ng isang palakasang pangyayari ay dapat magkaroon ng parehong status ng buong araw. Do you want to change all occurrences? Nais mo bang baguhin ang lahat ng mga pangyayari? Cancel button Iwan Change All Baguhin ang lahat You are changing the repeating rule of this event. Nagbabago ka ng palakasang pautok ng pangyayari na ito. You are deleting an event. Naglalagay ka ng isang pangyayari. Are you sure you want to delete this event? Sigurado ka ba na nais mong iwanan ang pangyayari na ito? Delete button Iwan Do you want to delete all occurrences of this event, or only the selected occurrence? Nais mo bang iwanan ang lahat ng mga pangyayari ng pangyayari na ito, o lamang ang napiling pangyayari? Delete All Iwanan ang lahat Delete Only This Event Iwanan lamang ang pangyayari na ito Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Nais mo bang iwanan ang pangyayari na ito at lahat ng mga pangyayari sa hinaharap, o lamang ang napiling pangyayari? Delete All Future Events Iwanan ang lahat ng mga pangyayari sa hinaharap You are changing a repeating event. Nagbabago ka ng isang repetitive event. Do you want to change only this occurrence of the event, or all occurrences? Gusto mo bang baguhin ang eksaktong pangyayari ng event o lahat ng mga pangyayari? All Lahat Only This Event Bago lang ang Event Do you want to change only this occurrence of the event, or this and all future occurrences? Gusto mo bang baguhin ang eksaktong pangyayari ng event, o ito at lahat ng mga pangyayari sa hinaharap? All Future Events Lahat ng Mga Pangyayari sa Hinaharap You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Nagpili ka ng isang leap month, at susuringin ka sa pamamagitan ng mga patakaran ng lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit I-edit Delete I-delete All Day Bumuo ang Araw CScheduleSearchView No search results Walang mga resulta ng paghahanap CScheduleView ALL DAY BUMUO ANG ARAW CSettingDialog import ICS file import ICS file Manual Manwal 15 mins 15 minuto 30 mins 30 minuto 1 hour 1 oras 24 hours 24 oras Sync Now Synchronize Ngayon Last sync Ultimo Sync Please go to the Control Center to change system settings Pakibisita sa Control Center upang baguhin ang mga system settings. Monday Lunes Sunday Linggo Use System Setting Gamitin ang System Setting 12-hour clock 12-oras clock 24-hour clock 24-oras clock CTimeEdit (%1 mins) (%1 minuto) (%1 hour) (%1 oras) (%1 hours) (%1 oras) CTitleWidget Y Y M M W W D D Search events and festivals Hanapin ang mga pangyayari at pista CWeekWindow Week Araw Y Y CYearScheduleView All Day Bawat Araw No event Walang pangyayari CYearWindow Y Y CalendarWindow Calendar Kalendaryo Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Ang kalendaryo ay angkop para makita ang mga petsa, at isang malikmós na pang-araw-araw na planner para mag-schedule ng lahat ng mga bagay sa buhay. Calendarmainwindow Calendar Kalendaryo Manage Pangasiwaan Privacy Policy Patakaran sa Pribadidad Syncing... Nagsisimula ang pag-sync... Sync successful Nagawa ang pag-sync Sync failed, please try later Napagawa ang pag-sync, subukin ito muli nang maaga CenterWidget All Day Bawat Araw DAccountDataBase Work Trabaho Life Buhay Other Iba pa DAlarmManager Close button I-close One day before start Isang araw bago magsimula Remind me tomorrow Tandaan ako bukas Remind me later Tandaan ako nang maaga 15 mins later 15 minuto nang maaga 1 hour later Isang oras na ang susunod 4 hours later Apat na oras na ang susunod Tomorrow Bumaba Schedule Reminder I schedule ang pahinga %1 to %2 '%1 hanggang %2' Today Ngayon DragInfoGraphicsView Edit I-edit Delete I-delete New event Bagong pangyayari New Event Bagong Pangyayari JobTypeListView export eksport import ICS file import ICS file You are deleting an event type. Naglalagay ka ng isang uri ng pangyayari. All events under this type will be deleted and cannot be recovered. Ang lahat ng mga pangyayari sa ilalim ng uri na ito ay iilalim at hindi makakapanalunan. Cancel button Iwanan Delete button I-delete QObject Account settings Pangkabahayang setting Account Acount Select items to be synced Pumili ng mga item na dapat i-sync Events Mga pangyayari General settings Pangkabahayang setting Sync interval Interval ng pag-sync Manage calendar Pangasiwaan ang kalendaryo Calendar account Acount sa kalendaryo Event types Mga uri ng pangyayari General Pangkabahayang First day of week Unang araw ng linggo Time Oras Return Today Return Ngayon Return Today Today Return Today Ngayon ScheduleTypeEditDlg New event type Bagong uri ng pangyayari Edit event type I-edit ang uri ng pangyayari Import ICS file Ilipat ang file ng ICS Name: Pangalan: Color: Kulay: ICS File: File ng ICS: Cancel button Iwanan Save button I-save The name can not only contain whitespaces Ang pangalan ay hindi lamang maaaring maglalaman ng espasio Enter a name please Sulat ng pangalan, please Shortcut Help Tulong Delete event Tanggalin ang pangyayari Copy Kopyahin Cut I-cut Paste I-paste Delete Tanggalin Select all Pumili ng lahat SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Pumunta UserloginWidget Sign In button Mag-login Sign Out button Mag-sign out YearFrame Y Y today Today Today Ngayon linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_fr.ts000066400000000000000000001337641523260663500265250ustar00rootroot00000000000000 AccountItem Sync successful Synchronisation réussie Network error Erreur réseau Server exception Exception de serveur Storage full Stockage plein AccountManager Local account Compte local Event types Type d'événement CColorPickerWidget Color Couleur Cancel button Annuler Save button Sauvegarder CDayMonthView Monday Lundi Tuesday Mardi Wednesday Mercredi Thursday Jeudi Friday Vendredi Saturday Samedi Sunday Dimanche CDayWindow Y A M M D J Lunar Lunaire CGraphicsView New Event Nouvel événement CMonthScheduleNumItem %1 more %1 de plus CMonthView New event Nouvel événement New Event Nouvel événement CMonthWindow Y A CMyScheduleView My Event Mon événement OK button OK Delete button Supprimer Edit button Éditer CPushButton New event type Nouveau type d'événement CScheduleDlg New Event Nouvel évènement Edit Event Éditer l'événement End time must be greater than start time L'heure de fin doit être supérieure à l'heure de début OK button OK Never Jamais At time of event Au moment de l'événement 15 minutes before 15 minutes avant 30 minutes before 30 minutes avant 1 hour before 1 heure avant 1 day before 1 jour avant 2 days before 2 jours avant 1 week before 1 semaine avant On start day (9:00 AM) Le jour de début (9h00) time(s) heure(s) Enter a name please Entrer un nom s'il vous plait The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Type: Type : Description: Description : All Day: Toute la journée : Starts: Débuts : Ends: Fin : Remind Me: Rappelez-moi : Repeat: Répéter : End Repeat: Fin de la répétition : Calendar account: Compte de calendrier : Calendar account Compte de calendrier Type Type Description Description All Day Toute la journée Time: Temps : Time Temps Solar Solaire Lunar Lunaire Starts Débuts Ends Fin Remind Me Rappelez-moi Repeat Répéter Daily Journalier Weekdays Jours de la semaine Weekly Hebdomadaire Monthly Mensuel Yearly Annuel End Repeat Terminer la répétition After Après On Sur Cancel button Annuler Save button Sauvegarder CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toutes les occurrences d'un événement répétitif doivent avoir le même statut toute la journée. Do you want to change all occurrences? Voulez-vous modifier toutes les occurrences ? Cancel button Annuler Change All Tout changer You are changing the repeating rule of this event. Vous modifiez la règle de répétition de cet événement. You are deleting an event. Vous êtes en train de supprimer un événement. Are you sure you want to delete this event? Êtes-vous sûr de vouloir supprimer cet événement ? Delete button Supprimer Do you want to delete all occurrences of this event, or only the selected occurrence? Voulez-vous supprimer toutes les occurrences de cet événement ou uniquement l'occurrence sélectionnée ? Delete All Tout supprimer Delete Only This Event Supprimer uniquement cet événement Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voulez-vous supprimer cet événement et toutes les occurrences futures de cet événement, ou uniquement l'occurrence sélectionnée ? Delete All Future Events Supprimer tous les événements futurs You are changing a repeating event. Vous modifiez un événement récurrent. Do you want to change only this occurrence of the event, or all occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement ou toutes les occurrences ? All Tout Only This Event Seulement cet événement Do you want to change only this occurrence of the event, or this and all future occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement, ou cette occurrence et toutes les occurrences futures ? All Future Events Tous les événements futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vous avez sélectionné un mois bissextile, et sera rappelé selon les règles du calendrier lunaire. OK button OK CScheduleSearchDateItem Y A M M D J CScheduleSearchItem Edit Éditer Delete Supprimer All Day Toute la journée CScheduleSearchView No search results Aucun résultat trouvé CScheduleView ALL DAY TOUTE LA JOURNÉE CSettingDialog import ICS file Importer un fichier ICS Manual Manuel 15 mins 15 min 30 mins 30 min 1 hour 1 heure 24 hours 24 heures Sync Now Synchroniser maintenant Last sync Dernière synchronisation Please go to the Control Center to change system settings Veuillez accéder au Centre de contrôle pour modifier les paramètres système Monday Lundi Sunday Dimanche Use System Setting Utiliser les paramètres système 12-hour clock horloge 12 heures 24-hour clock Horloge 24 heures CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 heure) (%1 hours) (%1 heures) CTitleWidget Y A M M W W D J Search events and festivals Rechercher des événements et des festivals CWeekWindow Week Semaine Y A CYearScheduleView All Day Toute la journée No event Pas d'évènement CYearWindow Y A CalendarWindow Calendar Calendrier Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Le calendrier est un outil pour afficher les dates, et aussi un planificateur quotidien intelligent pour planifier toutes les choses de la vie. Calendarmainwindow Calendar Calendrier Manage Gérer Privacy Policy Politique de confidentialité Syncing... Synchronisation... Sync successful Synchronisation réussie Sync failed, please try later Échec de la synchronisation, veuillez réessayer plus tard CenterWidget All Day Toute la journée DAccountDataBase Work Travail Life Vie Other Autre DAlarmManager Close button Fermer One day before start Un jour avant le début Remind me tomorrow Rappel demain Remind me later Rappeler plus tard 15 mins later 15 minutes plus tard 1 hour later 1 heure plus tard 4 hours later 4 heures plus tard Tomorrow Demain Schedule Reminder Rappel de programme %1 to %2 %1 à %2 Today Aujourd'hui DragInfoGraphicsView Edit Éditer Delete Supprimer New event Nouvel événement New Event Nouvel événement JobTypeListView export exporter import ICS file Importer un fichier ICS You are deleting an event type. Vous êtes en train de supprimer un type d'événement. All events under this type will be deleted and cannot be recovered. Tous les événements de ce type seront supprimés et ne pourront pas être récupérés. Cancel button Annuler Delete button Supprimer QObject Account settings Paramètres du compte Account Compte Select items to be synced Sélectionnez les éléments à synchroniser Events Événements General settings Paramètres généraux Sync interval Intervalle de synchronisation Manage calendar Gérer le calendrier Calendar account Compte de calendrier Event types Type d'événement General Général First day of week Premier jour de la semaine Time Temps Return Today Return Aujourd'hui Return Today Today Return Today Aujourd'hui ScheduleTypeEditDlg New event type Nouveau type d'événement Edit event type Éditer le type d'événement Import ICS file Importer un fichier ICS Name: Nom : Color: Couleur : ICS File: Fichier ICS : Cancel button Annuler Save button Sauvegarder The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Enter a name please Entrez un nom s'il vous plait Shortcut Help Aide Delete event Supprimer l'événement Copy Copier Cut Couper Paste Coller Delete Supprimer Select all Tout sélectionner SidebarCalendarWidget Y A M M TimeJumpDialog Go button Aller UserloginWidget Sign In button S'identifier Sign Out button Se déconnecter YearFrame Y A today Today Today Aujourd'hui linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_gl_ES.ts000066400000000000000000001334021523260663500270740ustar00rootroot00000000000000 AccountItem Sync successful تمت المزامنة بنجاح Network error خطأ Ù�ÙŠ الشبكة Server exception استثناء Ù�ÙŠ الخادم Storage full التخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الÙ�عاليات CColorPickerWidget Color Cor Cancel button Cancelar Save button Gardar CDayMonthView Monday Luns Tuesday Martes Wednesday Mércores Thursday Xoves Friday Venres Saturday Sábado Sunday Domingo CDayWindow Y Y M M D D Lunar القمرية CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more %1 máis CMonthView New event Novo evento New Event Novo evento CMonthWindow Y Y CMyScheduleView My Event O meu evento OK button Aceptar Delete button Eliminar Edit button Editar CPushButton New event type نوع Ù�عالية جديد CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time O tempo de finalización ten de ser maior que o de inicio OK button Aceptar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) Ao comezo do día (9:00 AM) time(s) vez(ces) Enter a name please من Ù�ضلك أدخل اسمًا The name can not only contain whitespaces لا يمكن أن يحتوي الاسم Ù�قط على مساÙ�ات بيضاء Type: Tipo: Description: Descrición: All Day: Todo o día: Starts: Comeza: Ends: Remata: Remind Me: Lembrarme: Repeat: Repetir: End Repeat: Fin da repetición: Calendar account: الحساب التقويمي: Calendar account الحساب التقويمي Type Tipo Description Descrición All Day Todo o día Time: الوقت: Time الوقت Solar الشمسية Lunar القمرية Starts Comeza Ends Remata Remind Me Lembrarme Repeat Repetir Daily Diariamente Weekdays Días da semana Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Finalizar a repetición After Despois On O Cancel button Cancelar Save button Gardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrencias dun evento repetitivo teñen de ter o mesmo estado durante todo o día. Do you want to change all occurrences? Queres cambiar todas as ocorrencias? Cancel button Cancelar Change All Cambiar todo You are changing the repeating rule of this event. Estás a cambiar a regra de repetición deste evento. You are deleting an event. Estás eliminando un evento. Are you sure you want to delete this event? Tes a certeza de querer eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Queres eliminar todas as ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Eliminar todo Delete Only This Event Eliminar só este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Queres eliminar esta e todas as vindeiras ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Future Events Eliminar todo os eventos futuros You are changing a repeating event. Estás a cambiar un evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? Queres cambiar só esta ocorrencia deste evento, ou todas as ocorrencias? All Todo Only This Event Só este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Queres cambiar só esta ocorrencia deste evento, ou esta e todas as vindeiras ocorrencias? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، وستتم الإذن لك ÙˆÙ�قًا لقواعد التقويم القمري. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo o día CScheduleSearchView No search results Sen resultados CScheduleView ALL DAY TODO O DÃ�A CSettingDialog import ICS file استيراد ملÙ� ICS Manual Manual 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 hora 24 hours 24 ساعة Sync Now مزامنة الآن Last sync المزامنة الأخيرة Please go to the Control Center to change system settings يرجى الانتقال إلى مركز التحكم لتغيير إعدادات النظام Monday Luns Sunday Domingo Use System Setting استخدم إعداد النظام 12-hour clock الساعة بتنسيق 12 ساعة 24-hour clock الساعة بتنسيق 24 ساعة CTimeEdit (%1 mins) (%1 دقيقة) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعة) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos e festivales CWeekWindow Week Semana Y Y CYearScheduleView All Day Todo o día No event Sen evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O calendario é unha ferramenta para ver as datas e tamén un planificador diario intelixente para programar todas as cousas da vida. Calendarmainwindow Calendar Calendario Manage Xestionar Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sincronización exitosa Sync failed, please try later A sincronización fallou, por favor inténtao máis tarde CenterWidget All Day Todo o día DAccountDataBase Work Traballo Life Persoal Other Outros DAlarmManager Close button Pechar One day before start Un día antes do comezo Remind me tomorrow Lembrarme mañá Remind me later Lembrarme máis tarde 15 mins later 15 minutos despois 1 hour later 1 hora despois 4 hours later 4 horas despois Tomorrow Mañá Schedule Reminder Programar recordatorio %1 to %2 %1 a %2 Today Hoxe DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar ficheiro ICS You are deleting an event type. Estás a eliminar un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serán eliminados e non poden ser recuperados. Cancel button Cancelar Delete button Eliminar QObject Account settings Ajustes da conta Account Conta Select items to be synced Seleccionar elementos para sincronizar Events Eventos General settings Ajustes xerais Sync interval Intervalo de sincronización Manage calendar Xestionar calendario Calendar account Conta de calendario Event types Tipos de evento General Xeral First day of week Primeiro día da semana Time Tempo Return Today Return Hoxe Return Today Today Return Today Hoxe ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar ficheiro ICS Name: Nome: Color: Cor: ICS File: Ficheiro ICS: Cancel button Cancelar Save button Gardar The name can not only contain whitespaces O nome non pode incluir só espazos en branco Enter a name please Introduce un nome, por favor Shortcut Help Axuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Pegar Delete Eliminar Select all Seleccionar todo SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Pechar sesión YearFrame Y Y today Today Today Hoxe linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_he.ts000066400000000000000000001361641523260663500265070ustar00rootroot00000000000000 AccountItem Sync successful הסנכרון הצליח Network error שגי×�ת רשת Server exception ×�יחור שרת Storage full ה貯蔵庫 מל×� AccountManager Local account חשבון מקומי Event types סוגי ×�ירועי×� CColorPickerWidget Color צבע Cancel button בטל Save button שמור CDayMonthView Monday שני Tuesday שלישי Wednesday רביעי Thursday חמישי Friday שישי Saturday שבת Sunday ר×�שון CDayWindow Y ×™ M מ D ד Lunar לונ×�רי CGraphicsView New Event ×�ירוע חדש CMonthScheduleNumItem %1 more %1 נוסף CMonthView New event ×�ירוע חדש New Event ×�ירוע חדש CMonthWindow Y ×™ CMyScheduleView My Event ×�ירועיי OK button בסדר Delete button מחק Edit button עריכה CPushButton New event type סוג ×�ירוע חדש CScheduleDlg New Event ×�ירוע חדש Edit Event ערוך ×�ירוע End time must be greater than start time זמן הסיו×� חייב להיות גדול מזמן התחלה OK button בסדר Never 从ä¸� At time of event בזמן ×”×�ירוע 15 minutes before 15 דקות לפני 30 minutes before 30 דקות לפני 1 hour before שעתיי×� לפני 1 day before יו×� ×�חד לפני 2 days before שני ימי×� לפני 1 week before שבוע ×�חד לפני On start day (9:00 AM) בתחילת היו×� (9:00 בוקר) time(s) זמן(×™×�) Enter a name please הכנס ש×� בבקשה The name can not only contain whitespaces הש×� ל×� יכול להכיל רק רווחי×� Type: סוג: Description: תי×�ור: All Day: יו×�整天: Starts: เริ่มต้น: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ซ้ำ: End Repeat: หยุดซ้ำ: Calendar account: บัà¸�ชีปà¸�ิทิน: Calendar account บัà¸�ชีปà¸�ิทิน Type ประเภท Description คำอธิบาย All Day ตลอดวัน Time: เวลา: Time זמן Solar סורי Lunar לונרי Starts เริ่มต้น Ends สิ้นสุด Remind Me เตือนฉัน Repeat ซ้ำ Daily รายวัน Weekdays วันทำà¸�าร Weekly รายสัปดาห์ Monthly รายเดือน Yearly รายปี End Repeat สิ้นสุดà¸�ารซ้ำ After หลังจาà¸� On ในวัน Cancel button ยà¸�เลิà¸� Save button บันทึà¸� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ทุà¸�à¸�ารเà¸�ิดขึ้นของเหตุà¸�ารณ์ที่ซ้ำต้องมีสถานะ 'ตลอดวัน' เหมือนà¸�ัน Do you want to change all occurrences? คุณต้องà¸�ารเปลี่ยนทุà¸�à¸�ารเà¸�ิดขึ้นหรือไม่? Cancel button ยà¸�เลิà¸� Change All เปลี่ยนทั้งหมด You are changing the repeating rule of this event. คุณà¸�ำลังเปลี่ยนà¸�ฎà¸�ารซ้ำของเหตุà¸�ารณ์นี้ You are deleting an event. คุณà¸�ำลังลบเหตุà¸�ารณ์นี้ Are you sure you want to delete this event? คุณà¹�น่ใจว่าต้องà¸�ารลบเหตุà¸�ารณ์นี้หรือไม่? Delete button ลบ Do you want to delete all occurrences of this event, or only the selected occurrence? คุณต้องà¸�ารลบทุà¸�à¸�ารเà¸�ิดขึ้นของเหตุà¸�ารณ์นี้ หรือเพียงà¹�ค่à¸�ารเà¸�ิดขึ้นที่เลือà¸�? Delete All ลบทั้งหมด Delete Only This Event ลบเฉพาะเหตุà¸�ารณ์นี้ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? คุณต้องà¸�ารลบเหตุà¸�ารณ์นี้à¹�ละทุà¸�à¸�ารเà¸�ิดขึ้นในอนาคต หรือเพียงà¹�ค่à¸�ารเà¸�ิดขึ้นที่เลือà¸�? Delete All Future Events ลบทุà¸�à¸�ารเà¸�ิดขึ้นในอนาคต You are changing a repeating event. ×�ת×� בוחרי×� לחanging ×�ירוע מחזורי. Do you want to change only this occurrence of the event, or all occurrences? ×”×�×� תרצו לשנות רק ×�ת התרחשות זו של ×”×�ירוע, ×�ו toutes התרחישי×�? All הכל Only This Event רק ×�ת ×”×�ירוע ×”×–×” Do you want to change only this occurrence of the event, or this and all future occurrences? ×”×�×� תרצו לשנות רק ×�ת התרחשות זו של ×”×�ירוע, ×�ו ×�ת התרחשות זו ו×�ת כל התרחישי×� העתידיי×�? All Future Events כל ×”×�ירועי×� העתידיי×� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ×�ת×� בחרת×� חודש מדבר, ויתרמו נזכר לפי הור×�ות הירח. OK button בסדר CScheduleSearchDateItem Y כן M מ D ×™ CScheduleSearchItem Edit עריכה Delete מחיקה All Day יו×�整天 CScheduleSearchView No search results ×�ין תוצ×�ות חיפוש CScheduleView ALL DAY כל היו×� CSettingDialog import ICS file להוריד קובץ ICS Manual manuel 15 mins 15 דקות 30 mins 30 דקות 1 hour שעה 24 hours 24 שעות Sync Now סינק כעת Last sync סינק ×�חרון Please go to the Control Center to change system settings ×�× ×� היכנסו למרכז הבקרה כדי לשנות הגדרות 시스템 Monday שני Sunday יו×� ר×�שון Use System Setting השתמש בהגדרות 시스템 12-hour clock שעון 12 שעות 24-hour clock שעון 24 שעות CTimeEdit (%1 mins) (%1 דקות) (%1 hour) (%1 שעה) (%1 hours) (%1 שעות) CTitleWidget Y ×™ M מ W ×� D ד Search events and festivals ابحث عن ×�ירועי×� ופסטיבלי×� CWeekWindow Week שבוע Y '×™' CYearScheduleView All Day כל היו×� No event ×�ין ×�ירוע CYearWindow Y '×™' CalendarWindow Calendar לוח שנה Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. לוח שנה הו×� כלי לצפייה בת×�ריכי×�, וג×� מخطط יומי ×—×›×� לניהול כל הדברי×� בחיי×�. Calendarmainwindow Calendar לוח שנה Manage ניהול Privacy Policy מדיניות הפרטיות Syncing... מתנש×�... Sync successful הסנכרון התבצע בהצלחה Sync failed, please try later הסנכרון נכשלה, ×�× ×� נסה מ×�וחר יותר CenterWidget All Day כל היו×� DAccountDataBase Work עבודה Life ×—×™×™×� Other ×�חר DAlarmManager Close button סגור One day before start יו×� ×�חד לפני הبدء Remind me tomorrow ×”indr× ×™ ×�ותי מחר Remind me later ×”indr× ×™ ×�ותי מ×�וחר יותר 15 mins later 15 דקות מ×�וחר יותר 1 hour later ×�חת השעות 4 hours later ×�רבע שעות מ×�וחר Tomorrow מחר Schedule Reminder תזכורת לסדר %1 to %2 '%1 עד %2' Today היו×� DragInfoGraphicsView Edit עריכה Delete מחיקה New event ×�ירוע חדש New Event ×�ירוע חדש JobTypeListView export יצו×� import ICS file นำ입 קובץ ICS You are deleting an event type. ×�ת×� מוחקי×� סוג ×�ירוע. All events under this type will be deleted and cannot be recovered. כל ×”×�ירועי×� תחת הסוג ×”×–×” ימחקו ול×� יוכלו לשחזר. Cancel button לצ×�ת Delete button למחוק QObject Account settings הגדרות חשבון Account חשבון Select items to be synced בחר פריטי×� להכנה Events ×�ירועי×� General settings הגדרות עיקריות Sync interval מרווח ×”×”×›× ×” Manage calendar ניהול תقوим Calendar account חשבון תقوימ Event types סוגי ×�ירועי×� General עיקרי First day of week יו×� ר×�שון בשבוע Time זמן Return Today Return היו×� Return Today Today Return Today היו×� ScheduleTypeEditDlg New event type סוג ×�ירוע חדש Edit event type עריכה לסוג ×�ירוע Import ICS file ייבור קובץ ICS Name: ש×�: Color: צבע: ICS File: קובץ ICS: Cancel button למחוק Save button לשמור The name can not only contain whitespaces הש×� ל×� יכול לכלול רק רווחי×� Enter a name please × ×� להזין ש×� Shortcut Help עזרה Delete event löschein Ereignis Copy לעתק Cut לחתוך Paste לדביק Delete למחוק Select all בחר הכל SidebarCalendarWidget Y ×™ M מ TimeJumpDialog Go button לעבור UserloginWidget Sign In button להירש×� Sign Out button להירש×� החוצה YearFrame Y ×™ today Today Today היו×� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_hi_IN.ts000066400000000000000000001433521523260663500270760ustar00rootroot00000000000000 AccountItem Sync successful सिंक सफल Network error नेटवरà¥�क तà¥�रà¥�टि Server exception सरà¥�वर अपवाद Storage full संगà¥�रहण भर गया AccountManager Local account सà¥�थानीय खाता Event types संगति पà¥�रकार CColorPickerWidget Color रंग Cancel button रदà¥�द करें Save button संचित करें CDayMonthView Monday सोमवार Tuesday मंगलवार Wednesday बà¥�धवार Thursday गà¥�रà¥�वार Friday शà¥�कà¥�रवार Saturday शनिवार Sunday रविवार CDayWindow Y Y M M D दिन Lunar चांदी का CGraphicsView New Event नई संगति CMonthScheduleNumItem %1 more %1 अधिक CMonthView New event नया इवेंट New Event नई संगति CMonthWindow Y Y CMyScheduleView My Event मेरी संगति OK button ठीक है Delete button हटाà¤�à¤� Edit button संपादित करें CPushButton New event type नया संगति पà¥�रकार CScheduleDlg New Event नई संगति Edit Event संगति संपादित करें End time must be greater than start time समापन समय शà¥�रूआत समय से अधिक होना चाहिà¤� OK button ठीक है Never कभी नहीं At time of event संगति के समय 15 minutes before 15 मिनट पहले 30 minutes before 30 मिनट पहले 1 hour before 1 घंटा पहले 1 day before 1 दिन पहले 2 days before 2 दिन पहले 1 week before 1 सपà¥�ताह पहले On start day (9:00 AM) शà¥�रूआत दिन (9:00 सà¥�बह) time(s) समय(à¤�) Enter a name please कृपया à¤�क नाम दरà¥�ज करें The name can not only contain whitespaces नाम केवल रिकà¥�तसà¥�थान नहीं हो सकता Type: पà¥�रकार : Description: विवरण: All Day: पूरे दिन: Starts: शà¥�रू होता है: Ends: समापà¥�त होता है: Remind Me: मà¥�à¤�े याद दें: Repeat: पà¥�नरावरà¥�तित करें: End Repeat: पà¥�नरावरà¥�तन समापà¥�त करें: Calendar account: कैलेंडर खाता: Calendar account कैलेंडर खाता Type पà¥�रकार Description विवरण All Day पूरे दिन Time: समय: Time समय Solar सौर Lunar चांदी Starts शà¥�रू होता है Ends समापà¥�त होता है Remind Me मà¥�à¤�े याद दें Repeat दोहराà¤�à¤� Daily दैनिक Weekdays कारà¥�य दिवस Weekly सापà¥�ताहिक Monthly मासिक Yearly वारà¥�षिक End Repeat पà¥�नरावरà¥�तन समापà¥�त करें After के बाद On चालू Cancel button रदà¥�द करें Save button संचित करें CScheduleOperation All occurrences of a repeating event must have the same all-day status. à¤� रिपीटिंग घटना के सभी घटनाà¤�à¤� à¤�क ही समय अवसà¥�था की होनी चाहिà¤�। Do you want to change all occurrences? कà¥�या आप सभी घटनाओं को बदलना चाहते हैं? Cancel button रदà¥�द करें Change All सभी बदलें You are changing the repeating rule of this event. आप इस घटना के पà¥�नरावरà¥�तित नियम को बदल रहे हैं। You are deleting an event. आप इस इवेंट को मिटाने वाले हैं Are you sure you want to delete this event? कà¥�या आप निशà¥�चित रूप से इस इवेंट को मिटाना करना चाहते है Delete button हटाà¤�à¤� Do you want to delete all occurrences of this event, or only the selected occurrence? कà¥�या आप इस घटना की सभी घटनाओं को हटाना चाहते हैं, या केवल चयनित घटना को? Delete All सभी हटाà¤�ं Delete Only This Event केवल इसी इवेंट को मिटाये Do you want to delete this and all future occurrences of this event, or only the selected occurrence? कà¥�या आप इस घटना के साथ सभी भविषà¥�य के घटनाओं को हटाना चाहते हैं, या केवल चयनित घटना को? Delete All Future Events सभी भविषà¥�य के घटनाà¤�à¤� हटाà¤�ं You are changing a repeating event. आप à¤�क पà¥�नरावरà¥�तित घटना बदल रहे हैं। Do you want to change only this occurrence of the event, or all occurrences? कà¥�या आप केवल इस घटना की à¤�क घटना को बदलना चाहते हैं, या सभी घटनाओं को? All सभी Only This Event केवल इस घटना Do you want to change only this occurrence of the event, or this and all future occurrences? कà¥�या आप इस घटना के केवल इस घटना को बदलना चाहते हैं, या इस और सभी भविषà¥�य की घटनाओं को बदलना चाहते हैं? All Future Events सभी भविषà¥�य की घटनाà¤�ं You have selected a leap month, and will be reminded according to the rules of the lunar calendar. आपने à¤�क लीप महीना चà¥�न लिया है, और आपको चांद के परिकà¥�रमा के नियमों के अनà¥�सार याद रखा जाà¤�गा। OK button ठीक है CScheduleSearchDateItem Y Y M M D द CScheduleSearchItem Edit संपादित करें Delete हटाà¤�à¤� All Day पूरे दिन CScheduleSearchView No search results खोज का कोई परिणाम नहीं मिला CScheduleView ALL DAY पूरा दिन CSettingDialog import ICS file ICS फ़ाइल आयात करें Manual मैनà¥�अल 15 mins 15 मिनट 30 mins 30 मिनट 1 hour 1 घणà¥�टा 24 hours 24 घंटे Sync Now अब सिंक करें Last sync पिछला सिंक Please go to the Control Center to change system settings कृपया पà¥�रणाली सेटिंग के लिà¤� नियंतà¥�रण केंदà¥�र जाà¤�ं Monday सोमवार Sunday रविवार Use System Setting पà¥�रणाल सेटिंग का उपयोग करें 12-hour clock 12 घंटे की घड़ी 24-hour clock 24 घंटे की घड़ी CTimeEdit (%1 mins) (%1 मिनट) (%1 hour) (%1 घंटा) (%1 hours) (%1 घंटे) CTitleWidget Y Y M M W व D द Search events and festivals ईवेंट और तà¥�योहार खोजें CWeekWindow Week हफà¥�ता Y Y CYearScheduleView All Day पूरे दिन No event कोई ईवेंट नहीं CYearWindow Y Y CalendarWindow Calendar दिनदरà¥�शिका Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. कैलेंडर तारीखों को देखने के लिà¤� à¤�क उपकरण है, और आपके जीवन में सभी बातों को बà¥�क करने के लिà¤� à¤�क सà¥�मारà¥�ट दैनिक योजना बनाने वाला उपकरण भी है। Calendarmainwindow Calendar दिनदरà¥�शिका Manage पà¥�रबंधित करें Privacy Policy गोपनीयता नीति Syncing... सिंक कर रहे हैं... Sync successful सिंक सफल रहा Sync failed, please try later सिंक फ़ेल हो गया, कृपया बाद में पà¥�रयास करें CenterWidget All Day पूरे दिन DAccountDataBase Work काम Life जीवन Other अनà¥�य DAlarmManager Close button बंद करें One day before start आरंभ से पूरà¥�व à¤�क दिन Remind me tomorrow कल पà¥�नः सूचित करें Remind me later बाद में पà¥�नः सूचित करें 15 mins later 15 मिनट बाद 1 hour later 1 घंटा बाद 4 hours later 4 घंटा बाद Tomorrow आने वाला कल Schedule Reminder कारà¥�यकà¥�रम अनà¥�सà¥�मारक %1 to %2 %1 से %2 तक Today आज DragInfoGraphicsView Edit संपादित करें Delete हटाà¤�à¤� New event नया इवेंट New Event नया घटना JobTypeListView export निरà¥�यात import ICS file ई.सी.à¤�स. फ़ाइल आयात करें You are deleting an event type. आप à¤�क घटना पà¥�रकार हटा रहे हैं। All events under this type will be deleted and cannot be recovered. इस पà¥�रकार के सभी घटनाà¤�ं हटा दी जाà¤�ंगी और बहाल नहीं की जा सकेंगी। Cancel button रदà¥�द करें Delete button हटाà¤�à¤� QObject Account settings खाता सेटिंगà¥�स Account खाता Select items to be synced सिंक करने वाले आइटम चà¥�नें Events घटनाà¤�ं General settings सामानà¥�य सेटिंगà¥�स Sync interval सिंक अंतराल Manage calendar कैलेंडर पà¥�रबंधित करें Calendar account कैलेंडर खाता Event types घटना पà¥�रकार General सामानà¥�य First day of week सपà¥�ताह का पहला दिन Time समय Return Today Return आज Return Today Today Return Today आज ScheduleTypeEditDlg New event type नया घटना पà¥�रकार Edit event type घटना पà¥�रकार संपादित करें Import ICS file ई.सी.à¤�स. फ़ाइल आयात करें Name: नाम : Color: रंग: ICS File: ई.सी.à¤�स. फ़ाइल: Cancel button रदà¥�द करें Save button संचित करें The name can not only contain whitespaces नाम केवल अंतराल नहीं रख सकता है Enter a name please कृपया à¤�क नाम दरà¥�ज करें Shortcut Help सहायता Delete event घटना हटा दें Copy कॉपी करें Cut काटें Paste चिपकाà¤�à¤� Delete हटाà¤�à¤� Select all सबको चà¥�नें SidebarCalendarWidget Y Y M M TimeJumpDialog Go button जाà¤�ं UserloginWidget Sign In button साइन इन Sign Out button साइन आउट YearFrame Y Y today Today Today आज linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_hr.ts000066400000000000000000001325151523260663500265200ustar00rootroot00000000000000 AccountItem Sync successful Sinhronizacija je uspjeÅ¡na Network error Mrežna greÅ¡ka Server exception Izuzetak servera Storage full Parnik je pun AccountManager Local account Lokalni raÄ�un Event types Vrste dogaÄ‘aja CColorPickerWidget Color Boja Cancel button Otkaži Save button Spremi CDayMonthView Monday Ponedjeljak Tuesday Utorak Wednesday Srijeda Thursday ÄŒetvrtak Friday Petak Saturday Subota Sunday Nedjelja CDayWindow Y Y M M D D Lunar MjesaÄ�ni CGraphicsView New Event Novi dogaÄ‘aj CMonthScheduleNumItem %1 more %1 viÅ¡e CMonthView New event Novi dogaÄ‘aj New Event Novi dogaÄ‘aj CMonthWindow Y Y CMyScheduleView My Event Moj dogaÄ‘aj OK button U redu Delete button ObriÅ¡i Edit button Uredi CPushButton New event type Nova vrsta dogaÄ‘aja CScheduleDlg New Event Novi dogaÄ‘aj Edit Event Uredi dogaÄ‘aj End time must be greater than start time Vrijeme zavrÅ¡etka mora biti veće od vremena poÄ�etka OK button U redu Never Nikada At time of event U vrijeme dogaÄ‘aja 15 minutes before 15 minuta prije 30 minutes before 30 minuta prije 1 hour before 1 sat prije 1 day before 1 dan prije 2 days before 2 dana prije 1 week before 1 tjedan prije On start day (9:00 AM) Na dan poÄ�etka (9:00 AM) time(s) vrijeme(s) Enter a name please Molim unesite ime The name can not only contain whitespaces Ime ne može sadržavati samo razmake Type: Vrsta: Description: Opis: All Day: Cijeli dan: Starts: ZapoÄ�inje: Ends: ZavrÅ¡ava: Remind Me: Podsjeti me: Repeat: Ponovi: End Repeat: ZavrÅ¡i ponavljanje: Calendar account: Kalendarski raÄ�un: Calendar account Kalendarski raÄ�un Type Vrsta Description Opis All Day Cijeli dan Time: Vrijeme: Time Vrijeme Solar Suncem Lunar ZavrÅ¡i ponavljanje Starts PoÄ�inje Ends ZavrÅ¡ava Remind Me Podsjeti me Repeat Ponovi Daily Dnevno Weekdays Dani vikenda Weekly Tjedno Monthly MjeseÄ�no Yearly GodiÅ¡nje End Repeat Sve ponavljajuće dogaÄ‘aje moraju imati isti status za cijeli dan. After Poslije On UkljuÄ�eno Cancel button Otkaži Save button Spremi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Želite li promijeniti sve ponavljajuće dogaÄ‘aje? Do you want to change all occurrences? Promjenjujete ponavljajuću pravilu ovog dogaÄ‘aja. Cancel button Otkaži Change All Promijeni sve You are changing the repeating rule of this event. Želite li izbrisati sve ponavljajuće dogaÄ‘aje, ili samo odabrani dogaÄ‘aj? You are deleting an event. BriÅ¡ete dogaÄ‘aj. Are you sure you want to delete this event? Jeste li sigurni da želite izbrisati ovaj dogaÄ‘aj? Delete button ObriÅ¡i Do you want to delete all occurrences of this event, or only the selected occurrence? Želite li izbrisati ovaj i sve buduće ponavljajuće dogaÄ‘aje, ili samo odabrani dogaÄ‘aj? Delete All ObriÅ¡ite sve Delete Only This Event ObriÅ¡ite samo ovaj dogaÄ‘aj Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Promjenjujete ponavljajući dogaÄ‘aj. Delete All Future Events ObriÅ¡i sve buduće dogaÄ‘aje You are changing a repeating event. Želite li promijeniti samo ovaj dogaÄ‘aj, ili sve ponavljajuće dogaÄ‘aje? Do you want to change only this occurrence of the event, or all occurrences? Želite li promijeniti samo ovaj dogaÄ‘aj, ili ovaj i sve buduće ponavljajuće dogaÄ‘aje? All Sve Only This Event Samo ovaj dogaÄ‘aj Do you want to change only this occurrence of the event, or this and all future occurrences? Odabrali ste prelazni mjesec, i bit ćećete podsjetni na pravila mjesaÄ�nog kalendar. All Future Events Svi budući dogaÄ‘aji You have selected a leap month, and will be reminded according to the rules of the lunar calendar. uvoziti ICS datoteku OK button U redu CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Uredi Delete ObriÅ¡i All Day Cijeli dan CScheduleSearchView No search results Nema rezultata pretrage CScheduleView ALL DAY CIJELI DAN CSettingDialog import ICS file 15 minuta Manual RuÄ�no 15 mins 30 minuta 30 mins 24 sata 1 hour 1 sat 24 hours Sinhroniziraj sada Sync Now Zadnja sinhronizacija Last sync Zadnja sinhronizacija Please go to the Control Center to change system settings molimo idite na Control Center da biste promenili sistemsko podeÅ¡avanje Monday Ponedjeljak Sunday Nedjelja Use System Setting Koristite sistemsko podeÅ¡avanje 12-hour clock 12-satni sat 24-hour clock 24-satni sat CTimeEdit (%1 mins) (%1 minuta) (%1 hour) (%1 sat) (%1 hours) (%1 sata) CTitleWidget Y Y M M W W D D Search events and festivals Traži dogaÄ‘aje i festivala CWeekWindow Week Tjedan Y Y CYearScheduleView All Day Cijeli dan No event Nema dogaÄ‘aja CYearWindow Y Y CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendar je alat za pregled datuma, a takoÄ‘e i pametan dnevnik za planiranje svih stvari u životu. Calendarmainwindow Calendar Kalendar Manage Upravljaj Privacy Policy Pravila privatnosti Syncing... Sinhronizacija... Sync successful Sinhronizacija je uspjeÅ¡na Sync failed, please try later Sinhronizacija je neuspjeÅ¡na, molimo pokuÅ¡ajte kasnije CenterWidget All Day Cijeli dan DAccountDataBase Work Posao Life Život Other Ostalo DAlarmManager Close button Zatvori One day before start Jedan dan prije poÄ�etka Remind me tomorrow Podsjeti me sutra Remind me later Podsjeti me kasnije 15 mins later 15 minuta kasnije 1 hour later 1 sat kasnije 4 hours later 4 sata kasnije Tomorrow Sutra Schedule Reminder Podsjetnik rasporeda %1 to %2 %1 do %2 Today Danas DragInfoGraphicsView Edit Uredi Delete ObriÅ¡i New event Novi dogaÄ‘aj New Event Novi dogaÄ‘aj JobTypeListView export izvoz import ICS file uÄ�itajte ICS datoteku You are deleting an event type. Brizate vrstu dogaÄ‘aja. All events under this type will be deleted and cannot be recovered. Svi dogaÄ‘aji pod ovom vrstom će biti obrisani i ne mogu se vratiti. Cancel button Otkaži Delete button ObriÅ¡i QObject Account settings PodeÅ¡avanja raÄ�una Account RaÄ�un Select items to be synced Odaberite stavke za sinhronizaciju Events DogaÄ‘aji General settings OpÅ¡ta podeÅ¡avanja Sync interval Vremenski interval sinhronizacije Manage calendar Upravljaj kalendarom Calendar account RaÄ�un kalendar Event types Vrste dogaÄ‘aja General Općenito First day of week Prvi dan u tjednu Time Vrijeme Return Today Return Danas Return Today Today Return Today Danas ScheduleTypeEditDlg New event type Nova vrsta dogaÄ‘aja Edit event type Uredi vrstu dogaÄ‘aja Import ICS file Uvezi ICS datoteku Name: Ime: Color: Boja: ICS File: Datoteka ICS: Cancel button Otkaži Save button Spremi The name can not only contain whitespaces Ime ne može sadržavati samo razmake Enter a name please Molim unesite ime Shortcut Help Pomoć Delete event IzbriÅ¡i dogaÄ‘aj Copy Kopiraj Cut Izreži Paste Zalijepi Delete ObriÅ¡i Select all Odaberi sve SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Idi UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danas linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_hu.ts000066400000000000000000001334321523260663500265220ustar00rootroot00000000000000 AccountItem Sync successful A szinkronizálás sikeres Network error Hálózati hiba Server exception Szerver kivétel Storage full A tárhely megtelt AccountManager Local account Helyi fiók Event types Esemény típusok CColorPickerWidget Color Szín Cancel button Mégsem Save button Mentés CDayMonthView Monday HétfÅ‘ Tuesday Kedd Wednesday Szerda Thursday Csütörtök Friday Péntek Saturday Szombat Sunday Vasárnap CDayWindow Y Év M Hónap D Nap Lunar Hold naptár CGraphicsView New Event Új esemény CMonthScheduleNumItem %1 more %1 továbbiak CMonthView New event Új esemény New Event Új esemény CMonthWindow Y Év CMyScheduleView My Event Eseményeim OK button OK Delete button Törlés Edit button Szerkesztés CPushButton New event type Új esemény típusa CScheduleDlg New Event Új esemény Edit Event Esemény szerkesztése End time must be greater than start time A befejezés idÅ‘pontja csak a kezdés idÅ‘pontja után lehetséges OK button OK Never Soha At time of event Az esemény idÅ‘pontjában 15 minutes before 15 perccel elÅ‘tte 30 minutes before 30 perccel elÅ‘tte 1 hour before 1 órával elÅ‘tte 1 day before 1 nappal elÅ‘tte 2 days before 2 nappal elÅ‘tte 1 week before 1 héttel elÅ‘tte On start day (9:00 AM) Esemény kezdete napján (De. 09:00) time(s) IdÅ‘pont(ok) Enter a name please Kérjük adjon meg egy nevet The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Type: Típus: Description: Leírás: All Day: Egész nap: Starts: Kezdés: Ends: Befejezés: Remind Me: Emlékeztessen: Repeat: Ismétlés: End Repeat: Ismétlés vége: Calendar account: Naptár fiók: Calendar account Naptár fiók Type Típus Description Leírás All Day Egész nap Time: IdÅ‘: Time IdÅ‘ Solar Nap Lunar Hold Starts Kezdés Ends Befejezés Remind Me Emlékeztessen Repeat Ismétlés Daily Naponta Weekdays Hétköznapokon Weekly Hetente Monthly Havonta Yearly Évente End Repeat Ismétlés vége After Utána On Ekkor Cancel button Mégsem Save button Mentés CScheduleOperation All occurrences of a repeating event must have the same all-day status. Az ismétlÅ‘dÅ‘ események valamennyiének "egész nap" állapotúnak kell lennie. Do you want to change all occurrences? Minden alkalmat módosítani szeretne? Cancel button Mégsem Change All Összes módosítása You are changing the repeating rule of this event. Módosítja az esemény ismétlÅ‘dési szabályát. You are deleting an event. Ön töröl egy eseményt. Are you sure you want to delete this event? Biztosan törli ezt az eseményt? Delete button Törlés Do you want to delete all occurrences of this event, or only the selected occurrence? Törlöni szeretné az esemény összes elÅ‘fordulását, vagy csak a kiválasztott eseményt? Delete All Összes törlése Delete Only This Event Csak ezen esemény törlése Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Törölni szeretné ezt, és az esemény összes jövÅ‘beli elÅ‘fordulását, vagy csak a kiválasztott eseményt? Delete All Future Events Összes jövÅ‘beli esemény törlése You are changing a repeating event. Ön egy ismétlÅ‘dÅ‘ eseményt módosít. Do you want to change only this occurrence of the event, or all occurrences? Csak az esemény ezen elÅ‘fordulását akarja megváltoztatni, vagy az összes jövÅ‘beni eseményt? All Összes Only This Event Csak ezen esemény Do you want to change only this occurrence of the event, or this and all future occurrences? Csak az esemény ezen elÅ‘fordulását akarja megváltoztatni, vagy ezt és az összes jövÅ‘beni eseményt? All Future Events Összes jövÅ‘beli esemény You have selected a leap month, and will be reminded according to the rules of the lunar calendar. SzökÅ‘hónap lett kiválasztva, ezért a holdnaptár szabályai fognak érvényesülni. OK button OK CScheduleSearchDateItem Y Év M Hónap D Nap CScheduleSearchItem Edit Szerkesztés Delete Törlés All Day Egész nap CScheduleSearchView No search results Nincs keresési eredmény CScheduleView ALL DAY Egész nap CSettingDialog import ICS file ICS fájl importálása Manual Manuális 15 mins 15 perc 30 mins 30 perc 1 hour 1 óra 24 hours 24 óra Sync Now Szinkronizálás most Last sync Utolsó szinkronizálás Please go to the Control Center to change system settings Kérem, változtassa meg a rendszertárgyak beállításait a vezérlÅ‘központban Monday HétfÅ‘ Sunday Vasárnap Use System Setting Rendszerbeállítás használata 12-hour clock 12 órás óra formátum 24-hour clock 24 órás óra formátum CTimeEdit (%1 mins) (%1 perc) (%1 hour) (%1 óra) (%1 hours) (%1 óra) CTitleWidget Y Éves M Havi W Hét D Napi Search events and festivals Események és fesztiválok keresése CWeekWindow Week Heti Y Év CYearScheduleView All Day Egész nap No event Nincs esemény CYearWindow Y Év CalendarWindow Calendar Naptár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. A Naptár egy eszköz a dátumok megtekintésére, valamint egy intelligens napi tervezÅ‘ az élet minden dolgának ütemezéséhez. Calendarmainwindow Calendar Naptár Manage Kezelés Privacy Policy Adatvédelmi irányelvek Syncing... Szinkronizálás... Sync successful A szinkronizálás sikeres Sync failed, please try later A szinkronizálás sikertelen, kérjük próbálja késÅ‘bb CenterWidget All Day Egész nap DAccountDataBase Work Munka Life Magánélet Other Egyéb DAlarmManager Close button Bezárás One day before start Egy nappal kezdés elÅ‘tt Remind me tomorrow Emlékeztessen holnap Remind me later Emlékeztessen késÅ‘bb 15 mins later 15 perc múlva 1 hour later 1 óra múlva 4 hours later 4 óra múlva Tomorrow Holnap Schedule Reminder Ütemezési emlékeztetÅ‘ %1 to %2 %1-tÅ‘l %2-ig Today Ma DragInfoGraphicsView Edit Szerkesztés Delete Törlés New event Új esemény New Event Új esemény JobTypeListView export export import ICS file ICS fájl importálása You are deleting an event type. Ön töröl egy eseménytípust. All events under this type will be deleted and cannot be recovered. Az összes ilyen típusú esemény törlÅ‘dik, és nem állítható helyre. Cancel button Mégsem Delete button Törlés QObject Account settings Felhasználói fiók beállítások Account Felhasználói fiók Select items to be synced Válassza ki a szinkronizálni kívánt elemeket Events Események General settings Ã�ltalános beállítások Sync interval Szinkronizálási idÅ‘intervallum Manage calendar Naptár kezelése Calendar account Naptár fiók Event types Esemény típusok General Ã�ltalános First day of week A hét elsÅ‘ napja Time IdÅ‘ Return Today Return Ma Return Today Today Return Today Ma ScheduleTypeEditDlg New event type Új esemény típusa Edit event type Eseménytípus szerkesztése Import ICS file ICS fájl importálása Name: Név: Color: Szín: ICS File: ICS Fájl: Cancel button Mégsem Save button Mentés The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Enter a name please Kérjük adjon meg egy nevet Shortcut Help Segítség Delete event Esemény törlése Copy Másolás Cut Kivágás Paste Beillesztés Delete Törlés Select all Összes kijelölése SidebarCalendarWidget Y Év M Hónap TimeJumpDialog Go button Ugrás UserloginWidget Sign In button Bejelentkezés Sign Out button Kijelentkezés YearFrame Y Év today Today Today Ma linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_hy.ts000066400000000000000000001414541523260663500265310ustar00rootroot00000000000000 AccountItem Sync successful Õ‡Õ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Õ°Õ¡Õ»Õ¸Õ²Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Network error Ö�Õ¡Õ¶Ö�Õ« Õ½Õ­Õ¡Õ¬ Server exception Õ½Õ¥Ö€Õ¾Õ¥Ö€Õ« Õ¢Õ¡Ö�Õ¡Õ½Õ¡Õ¯Õ¡Õ¶ Õ¤Õ¥ÕºÖ„ Storage full ÕŠÕ¡Õ°Õ¥Õ½Õ¿Õ¨ Õ¬Ö�Õ¾Õ¡Õ® Õ§ AccountManager Local account Õ¿Õ¥Õ²Õ¡Õ¯Õ¡Õ¶ Õ°Õ¡Õ·Õ«Õ¾ Event types Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ« Õ¿Õ¥Õ½Õ¡Õ¯Õ¶Õ¥Ö€ CColorPickerWidget Color Ô³Õ¸Ö‚ÕµÕ¶ Cancel button Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Save button ÕŠRES CDayMonthView Monday ÔµÖ€Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ« Tuesday ÔµÖ€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ« Wednesday Õ‰Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ« Thursday ÕˆÖ‚Ö€Õ¸Õ·Õ¡Õ¢Õ©Õ« Friday Õ€Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ« Saturday ÕˆÖ‚Ö€Õ«Õ·Õ¡Õ¢Õ©Õ« Sunday Õ‡Õ¡Õ¢Õ¡Õ© CDayWindow Y Õ�Õ¡Ö€Õ¸Ö‚Õ´ M Ô±Õ´Õ½Õ¡Õ©Õ«Õ¾ D Õ•Ö€ Lunar Ô¼Õ¸Ö‚Õ¶Õ¡Ö€ CGraphicsView New Event Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ CMonthScheduleNumItem %1 more %1 Õ¡Õ¾Õ¥Õ¬Õ«Õ¶ CMonthView New event Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ New Event Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ CMonthWindow Y Õ�Õ¡Ö€Õ¸Ö‚Õ´ CMyScheduleView My Event Ô»Õ´ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ OK button Ô±ÕµÕ¸ Delete button Õ‹Õ¡Õ¶Õ« Edit button Ô½Õ´Õ¢Õ¡Õ£Ö€Õ¥Õ¬ CPushButton New event type Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¿Õ¥Õ½Õ¡Õ¯ CScheduleDlg New Event Õ†Õ¸Ö€ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ Edit Event Ô½Õ´Õ¢Õ¡Õ£Ö€Õ¥Õ¬ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ End time must be greater than start time ÕŽÕ¥Ö€Õ»Õ¶Õ¡Õ¯Õ¡Õ¶ ÕªÕ¡Õ´Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ´Õ¥Õ® Õ¬Õ«Õ¶Õ« Õ½Õ¯Õ¦Õ¢Õ¶Õ¡Õ¯Õ¡Õ¶ ÕªÕ¡Õ´Õ«Ö� OK button Ô¼Õ¡Õ¾ Never ÕˆÕ¹ Õ´Õ« Õ¡Õ¶Õ£Õ¡Õ´ At time of event Ô»Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ ÕªÕ¡Õ´Õ«Õ¶ 15 minutes before 15 Ö€Õ¸ÕºÕ¥ Õ¡Õ¼Õ¡Õ» 30 minutes before 30 Ö€Õ¸ÕºÕ¥ Õ¡Õ¼Õ¡Õ» 1 hour before 1 ÕªÕ¡Õ´ Õ¡Õ¼Õ¡Õ» 1 day before 1 Ö…Ö€ Õ¡Õ¼Õ¡Õ» 2 days before 2 Ö…Ö€ Õ¡Õ¼Õ¡Õ» 1 week before 1 Õ·Õ¡Õ¢Õ¡Õ© Õ¡Õ¼Õ¡Õ» On start day (9:00 AM) Õ�Õ¯Õ¦Õ¢Õ¶Õ¡Õ¯Õ¡Õ¶ Ö…Ö€Õ¨ (9:00 Õ¡Õ¼Õ¡Õ¾Õ¸Õ¿) time(s) ÕªÕ¡Õ´(Õ¶Õ¥Ö€) Enter a name please Ô½Õ¶Õ¤Ö€Õ¸Ö‚Õ´ Õ¥Õ¶Ö„ Õ´Õ¸Ö‚Õ¿Ö„Õ¡Õ£Ö€Õ¥Õ¬ Õ¡Õ¶Õ¸Ö‚Õ¶Õ¨ The name can not only contain whitespaces Ô±Õ¶Õ¸Ö‚Õ¶Õ¨ Õ¹Õ« Õ¯Õ¡Ö€Õ¸Õ² ÕºÕ¡Ö€Õ¸Ö‚Õ¶Õ¡Õ¯Õ¥Õ¬ Õ´Õ«Õ¡ÕµÕ¶ Õ¢Õ¡Ö� Õ¿Õ¡Ö€Õ¡Õ®Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ Type: Õ�Õ«Õº: Description: Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶: All Day: Ô±Õ´Õ¢Õ¸Õ²Õ» Ö…Ö€Õ¨: Starts: Õ�Õ¯Õ«Õ¦Õ¢Õ¨: Ends: ÕŽÕ¥Ö€Õ»Õ¨: Remind Me: Õ€Õ«Õ·Õ¥Õ¬ Õ«Õ¶Õ±: Repeat: Ô¿Ö€Õ¯Õ¶Õ¥Õ¬: End Repeat: Ô±Õ¾Õ¡Ö€Õ¿Õ¥Õ¬ Õ¯Ö€Õ¯Õ¶Õ¸Ö‚Õ´Õ¨: Calendar account: Ô¿Õ¡ÕµÖ„Õ« Õ°Õ¡Õ·Õ«Õ¾Õ¨: Calendar account Ô¿Õ¡ÕµÖ„Õ« Õ°Õ¡Õ·Õ«Õ¾ Type Õ�Õ«Õº Description Õ†Õ¯Õ¡Ö€Õ¡Õ£Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ All Day Ô±Õ´Õ¢Õ¸Õ²Õ» Ö…Ö€Õ¨ Time: ÔºÕ¡Õ´: Time ÔºÕ¡Õ´Õ¡Õ¶Õ¡Õ¯ Solar Ô±Õ´Õ¥Õ¶Õ¡ÕµÕ¶ Õ¡Õ´Õ¡Õ¼Õ¡ÕµÕ«Õ¶ Lunar Ô¼Õ¸Ö‚ÕµÕ½Õ¡ÕµÕ«Õ¶ Starts Õ�Õ¯Õ½Õ¾Õ¸Ö‚Õ´ Õ§ Ends Ô±Õ¾Õ¡Ö€Õ¿Õ¾Õ¸Ö‚Õ¶ Õ§ Remind Me Õ€Õ«Õ¡ Õ°Õ¡Õ¶Õ±Õ¶Õ¥Õ¬ Repeat Ô¿Ö€Õ¯Õ¶Õ¥Õ¬ Daily Õ•Ö€Õ¡Õ¯Õ¡Õ¶ Weekdays Õ‡Õ¡Õ¢Õ¡Õ©Õ¾Õ¡ Ö…Ö€Õ¥Ö€Õ¨ Weekly Õ‡Õ¡Õ¢Õ¡Õ©Õ¡Õ¯Õ¡Õ¶ Monthly Ô±Õ´Õ½Õ¡Õ¯Õ¡Õ¶ Yearly Õ�Õ¡Ö€Õ¥Õ¯Õ¡Õ¶ End Repeat Ô±Õ¾Õ¡Ö€Õ¿Õ¥Õ¬ Õ¯Ö€Õ¯Õ¶Õ¨ After Õ€Õ¥Õ¿Õ¸ On Ô¸Õ¶Õ©Õ¡Ö�Õ«Õ¯ Cancel button Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Save button ÕŠÕ¡Õ°ÕºÕ¡Õ¶Õ¥Õ¬ CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ô¿Ö€Õ¯Õ¶Õ¾Õ¸Õ² Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¢Õ¸Õ¬Õ¸Ö€ Õ°Õ¡Õ¶Õ¤Õ¥ÕºÕ¡Õ¶Ö„Õ¶Õ¥Ö€Õ¨ ÕºÕ¥Õ¿Ö„ Õ§ Õ¸Ö‚Õ¶Õ¥Õ¶Õ¡Õ¶ Õ¶Õ¸Ö‚ÕµÕ¶ Õ¨Õ¶Õ©Õ¡Ö�Õ«Õ¯ Õ¾Õ¡ÕµÖ€Õ¥Ö€Õ« Õ¯Õ¡Ö€Õ£Õ¡Õ¾Õ«Õ³Õ¡Õ¯Õ¨Ö‰ Do you want to change all occurrences? Õ‘Õ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ ÖƒÕ¸Õ­Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€ Õ°Õ¡Õ¶Õ¤Õ¥ÕºÕ¡Õ¶Ö„Õ¶Õ¥Ö€Õ¨Õ� Õ¡ÕµÕ¸ Õ©Õ¥ Õ¸Õ¹Ö‰ Cancel button Õ‰Õ¥Õ²Õ¡Ö€Õ¯Õ¥Õ¬ Change All Õ“Õ¸Õ­Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨ You are changing the repeating rule of this event. Ô´Õ¸Ö‚Ö„ ÖƒÕ¸Õ­Õ¸Ö‚Õ´ Õ¥Ö„ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¯Ö€Õ¯Õ¶Õ¾Õ¸Õ² Õ¯Õ¡Õ¶Õ¸Õ¶Õ¨Ö‰ You are deleting an event. Ô´Õ¸Ö‚Ö„ Õ»Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Õ¥Ö„ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨Ö‰ Are you sure you want to delete this event? Ô±Õ¶Õ°Õ¡Õ¿Õ¡Õ¯Õ¡Õ¶ Õ¥Ö„ Õ¸Ö‚Õ¦Õ¸Ö‚Õ´ Õ»Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨Õ� Õ¡ÕµÕ¸ Õ©Õ¥ Õ¸Õ¹Ö‰ Delete button Õ‹Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Do you want to delete all occurrences of this event, or only the selected occurrence? Õ‘Õ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ¢Õ¸Õ¬Õ¸Ö€ Õ°Õ¡Õ¶Õ¤Õ¥ÕºÕ¡Õ¶Ö„Õ¶Õ¥Ö€Õ¨, Õ©Õ¥ Õ´Õ«Õ¡ÕµÕ¶ Õ¨Õ¶Õ¿Ö€Õ¾Õ¡Õ®Õ¨Õ� Õ¡ÕµÕ¸ Õ©Õ¥ Õ¸Õ¹Ö‰ Delete All Õ‹Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€Õ¨ Delete Only This Event Õ‹Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Õ´Õ«Õ¡ÕµÕ¶ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Õ‘Õ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ Õ»Õ¡Õ¶Õ¡ÕºÕ¡Õ¿Õ¥Õ¬ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Ö‡ Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡ÕµÕ¶Õ¸Ö‚Õ°Õ¥Õ¿Ö‡ Õ°Õ¡Õ¶Õ¤Õ¥ÕºÕ¡Õ¶Ö„Õ¶Õ¥Ö€Õ¨, Õ©Õ¥ Õ´Õ«Õ¡ÕµÕ¶ Õ¨Õ¶Õ¿Ö€Õ¾Õ¡Õ®Õ¨Õ� Õ¡ÕµÕ¸ Õ©Õ¥ Õ¸Õ¹Ö‰ Delete All Future Events Õ‹Õ¡Õ¶Õ¡Õ¿Õ¥Õ¬ Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡ÕµÕ¶Õ¸Ö‚Õ°Õ¥Õ¿Ö‡ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ You are changing a repeating event. Ô´Õ¸Ö‚Ö„ Õ¯Ö€Õ¯Õ¶Õ¾Õ¸Õ² Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶ ÖƒÕ¸Õ­Õ¸Ö‚Õ´ Õ¥Ö„ Do you want to change only this occurrence of the event, or all occurrences? Ô´Õ¸Ö‚Ö„ Ö�Õ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ ÖƒÕ¸Õ­Õ¥Õ¬ Õ´Õ«Õ¡ÕµÕ¶ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ´Õ« Õ´Õ«Õ¡Õ¶Õ¤Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, Õ©Õ¥Õž Õ¢Õ¸Õ¬Õ¸Ö€Õ¨? All Ô²Õ¸Õ¬Õ¸Ö€Õ¨ Only This Event Õ„Õ«Õ¡ÕµÕ¶ Ô±ÕµÕ½ Ô»Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨ Do you want to change only this occurrence of the event, or this and all future occurrences? Ô´Õ¸Ö‚Ö„ Ö�Õ¡Õ¶Õ¯Õ¡Õ¶Õ¸Ö‚Õ´ Õ¥Ö„ ÖƒÕ¸Õ­Õ¥Õ¬ Õ´Õ«Õ¡ÕµÕ¶ Õ¡ÕµÕ½ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¡Õ¶ Õ´Õ« Õ´Õ«Õ¡Õ¶Õ¤Ö€Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¨, Õ©Õ¥Õž Õ¡ÕµÕ½ Ö‡ Õ¢Õ¸Õ¬Õ¸Ö€ Õ¡ÕµÕ¶Õ¸Ö‚Õ°Õ¥Õ¿Ö‡ Õ«Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨? All Future Events Ô²Õ¸Õ¬Õ¸Ö€ Ô±ÕµÕ¶Õ¸Ö‚Õ°Õ¥Õ¿Ö‡ Ô»Ö€Õ¡Õ¤Õ¡Ö€Õ±Õ¸Ö‚Õ©ÕµÕ¸Ö‚Õ¶Õ¶Õ¥Ö€Õ¨ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Դուք ընտրել եք տարեկան ամսաթիվ, և կհանդիպեք ամսաթվի ամենամեծ օրը լուսային օրա�ույ�ի կանոններին համապատասխան OK button Այո CScheduleSearchDateItem Y Այո M Մայիս D Դեկտեմբեր CScheduleSearchItem Edit Խմբագրել Delete Ջանատել All Day Ընդամենը Օրը CScheduleSearchView No search results Ոչ մի որոնում արդյունք չկա CScheduleView ALL DAY ԸՆԴԱՄԵՆԸ Օ�Ը CSettingDialog import ICS file ներմուծել ICS ֆայլը Manual Մանուալ 15 mins 15 րոպե 30 mins 30 րոպե 1 hour 1 ժամ 24 hours 24 ժամ Sync Now Շարունակել հիմա Last sync Ան�յալ համապատասխանությունը Please go to the Control Center to change system settings Խնդրում ենք գնալ համապատասխանությունը փոխելու համար Կառավարման կենտրոն էջը Monday Երկուշաբթի Sunday Կիրակի Use System Setting Օգտագործել համակարգի կանոնակշառը 12-hour clock 12-ժամանակային ժամա�ույ� 24-hour clock 24-ժամանակային ժամա�ույ� CTimeEdit (%1 mins) (%1 րոպե) (%1 hour) (%1 ժամ) (%1 hours) (%1 ժամ) CTitleWidget Y Ե M Մ W Շ D Դ Search events and festivals Որոշեք իրադարձությունները և փառատոնները CWeekWindow Week Շաբաթ Y Ե CYearScheduleView All Day Ընթա�իկ օրը No event Իրադարձություն չկա CYearWindow Y Անգամ CalendarWindow Calendar Կայք Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Կայքը օրերի դիտման և մաքսիմալ օրա�ույ� պատրաստման գործիք է, որը օգնում է կարգավորել մարդկան� կյանքի բոլոր գործերը։ Calendarmainwindow Calendar Կայք Manage Ընթա�իկ Privacy Policy Անձնական տվյալների քաղաքականությունը Syncing... Համապատասխանություն... Sync successful Համապատասխանման հաջողություն Sync failed, please try later Համապատասխանությունը հանդեպ արած է, խնդրում ենք փորձեք ավելի ուշ CenterWidget All Day Ընթա�իկ օրը DAccountDataBase Work Աշխատանք Life Կյանք Other Այլ DAlarmManager Close button Փակել One day before start �կզբի� մեկ օր առաջ Remind me tomorrow Հիշե�րեք ինձ հաջորդ օրը Remind me later Հիշե�րեք ինձ ավելի ուշ 15 mins later 15 րոպե առաջ 1 hour later մեկ ժամ հետո 4 hours later չորս ժամ հետո Tomorrow Առավոտը Schedule Reminder Ընթա�իկ նամակ %1 to %2 %1 մինչև %2 Today Այսօր DragInfoGraphicsView Edit Խմբագրել Delete Ջնջել New event Նոր իրադարձություն New Event Նոր Իրադարձություն JobTypeListView export արտահան import ICS file մուտքագրել ICS ֆայլը You are deleting an event type. Դուք ջնջում եք իրադարձության տեսակը։ All events under this type will be deleted and cannot be recovered. Այս տեսակի բոլոր իրադարձությունները կարող են ջնջվել և չի կարող վերականգնվել։ Cancel button Չեղարկել Delete button Ջնջել QObject Account settings Հաշիվի կարգավորումները Account Հաշիվ Select items to be synced Ընտրեք կարգավորվող տարբերակները Events Իրադարձությունները General settings Ընդհանուր կարգավորումները Sync interval Կարգավորման հարաբերականությունը Manage calendar Կառավարել օրա�ույ�ը Calendar account Օրա�ույ�ի հաշիվը Event types Իրադարձության տեսակները General Ընդհանուր First day of week Շաբաթվա առաջին օրը Time Ժամը Return Today Return Այսօր Return Today Today Return Today Այսօր ScheduleTypeEditDlg New event type Նոր իրադարձության տիպ Edit event type Խմբագրել իրադարձության տիպ Import ICS file Իմպորտել ICS ֆայլը Name: Անուն: Color: Գուն: ICS File: ICS Ֆայլը: Cancel button Չեղարկել Save button Պահպանել The name can not only contain whitespaces Անունը կարող է պարունակել միայն բա� տակտեր Enter a name please Խնդրում ենք մուտքագրեք անուն Shortcut Help Օգնություն Delete event Ջանտարձակել իրադարձությունը Copy Կապակ�ել Cut Կտրել Paste Փոխադրել Delete Ջանտարձակել Select all Ընտրել բոլորը SidebarCalendarWidget Y Երկիր M Ամիս TimeJumpDialog Go button Շարունակել UserloginWidget Sign In button Մուտք Sign Out button Ելք YearFrame Y Երկիր today Today Today Այսօր linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_id.ts000066400000000000000000001323021523260663500264750ustar00rootroot00000000000000 AccountItem Sync successful Sinkronisasi berhasil Network error Jaringan bermasalah Server exception Kesalahan server Storage full Penyimpanan penuh AccountManager Local account Akun lokal Event types Jenis Event CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Senin Tuesday Selasa Wednesday Rabu Thursday Kamis Friday Jum'at Saturday Sabtu Sunday Minggu CDayWindow Y T M B D H Lunar Bulan CGraphicsView New Event Peristiwa Baru CMonthScheduleNumItem %1 more 1% lagi CMonthView New event acara baru New Event Acara baru CMonthWindow Y T CMyScheduleView My Event Acara saya OK button OK Delete button Hapus Edit button Sunting CPushButton New event type Jenis event baru CScheduleDlg New Event Acara baru Edit Event Ubah acara End time must be greater than start time Waktu akhir harus lebih lama dari waktu mulai OK button OK Never Tidak pernah At time of event Pada saat acara 15 minutes before 15 menit sebelumnya 30 minutes before 30 menit sebelumnya 1 hour before 1 jam sebelumnya 1 day before 1 hari sebelumnya 2 days before 2 hari sebelumnya 1 week before 1 minggu sebelumnya On start day (9:00 AM) Pada hari mulai (9:00) time(s) waktu Enter a name please Mohon masukkan nama The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Type: Tipe: Description: Deskripsi: All Day: Sepanjang hari: Starts: Mulai: Ends: Berakhir: Remind Me: Ingatkan Aku: Repeat: Ulangi: End Repeat: Akhir Pengulangan: Calendar account: Akun Kalender: Calendar account Akun Kalender Type Tipe Description Keterangan All Day Semua Hari Time: Waktu: Time Waktu Solar Solar Lunar Bulan Starts Mulai Ends Berakhir Remind Me Ingatkan saya Repeat Ulangi Daily Harian Weekdays Hari kerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Akhiri Perulangan After Setelah On Nyala Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan acara berulang harus memiliki status sepanjang hari yang sama. Do you want to change all occurrences? Apakah Anda ingin mengubah semua kejadian? Cancel button Batal Change All Ubah semua You are changing the repeating rule of this event. Anda mengubah aturan pengulangan acara ini. You are deleting an event. Anda sedang menghapus sebuah peristiwa Are you sure you want to delete this event? Anda yakin akan menghapus peristiwa ini? Delete button Hapus Do you want to delete all occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus semua kejadian dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Hapus Semua Delete Only This Event Hapus hanya peristiwa ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus ini dan semua kejadian mendatang dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Future Events Hapus semua peristiwa yang akan datang You are changing a repeating event. Anda mengubah acara berulang. Do you want to change only this occurrence of the event, or all occurrences? Apakah Anda ingin mengubah hanya pengulangan acara ini, atau semua pengulangan? All Semua Only This Event Hanya Acara Ini Do you want to change only this occurrence of the event, or this and all future occurrences? Apakah Anda ingin mengubah hanya pengulangan acara ini, atau ini dan semua pengulangan masa depan? All Future Events Semua Acara Masa Depan You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Anda telah memilih bulan luar, dan akan diberi ingat sesuai dengan aturan kalender bulan. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Hapus All Day Semua Hari CScheduleSearchView No search results Tidak ada hasil pencarian CScheduleView ALL DAY SEHARI PENUH CSettingDialog import ICS file import file ICS Manual Manual 15 mins 15 menit 30 mins 30 menit 1 hour 1 jam 24 hours 24 jam Sync Now Sinkron Sekarang Last sync Sinkron Terakhir Please go to the Control Center to change system settings Silakan pergi ke Pusat Kontrol untuk mengubah pengaturan sistem Monday Senin Sunday Minggu Use System Setting Gunakan Pengaturan Sistem 12-hour clock Jam 12 jam 24-hour clock Jam 24 jam CTimeEdit (%1 mins) (%1 menit) (%1 hour) (%1 jam) (%1 hours) (%1 jam) CTitleWidget Y T M B W W D H Search events and festivals Cari acara dan festival CWeekWindow Week Minggu Y T CYearScheduleView All Day Semua Hari No event Tidak ada acara CYearWindow Y T CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender adalah alat untuk melihat tanggal, serta pengaturan harian cerdas untuk mengatur segala hal dalam kehidupan. Calendarmainwindow Calendar Kalender Manage Kelola Privacy Policy Kebijakan Privasi Syncing... Menyinkronkan... Sync successful Sinkronisasi berhasil Sync failed, please try later Sinkron gagal, silakan coba lagi CenterWidget All Day Semua Hari DAccountDataBase Work Kerja Life Kehidupan Other Lainnya DAlarmManager Close button Tutup One day before start Satu hari sebelum dimulai Remind me tomorrow Ingatkan saya besok Remind me later Ingatkan saya nanti 15 mins later 15 menit kemudian 1 hour later 1 jam kemudian 4 hours later 4 jam kemudian Tomorrow Besok Schedule Reminder Jadwalkan Pengingat %1 to %2 '%1 sampai %2' Today Hari ini DragInfoGraphicsView Edit Sunting Delete Hapus New event acara baru New Event Acara baru JobTypeListView export ekspor import ICS file impor file ICS You are deleting an event type. Anda sedang menghapus jenis acara. All events under this type will be deleted and cannot be recovered. Semua acara di bawah jenis ini akan dihapus dan tidak dapat dipulihkan. Cancel button Batal Delete button Hapus QObject Account settings Pengaturan akun Account Akun Select items to be synced Pilih item yang akan disinkronkan Events Acara General settings Pengaturan umum Sync interval Interval sinkronisasi Manage calendar Kelola kalender Calendar account Akun Kalender Event types Jenis Event General Umum First day of week Hari pertama dalam seminggu Time Waktu Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Jenis event baru Edit event type Sunting jenis acara Import ICS file Impor file ICS Name: Nama: Color: 'Warna:' ICS File: 'File ICS:' Cancel button Batal Save button Simpan The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Enter a name please Mohon masukkan nama Shortcut Help Bantuan Delete event Hapus acara Copy Salin Cut Potong Paste Tempel Delete Hapus Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button Go UserloginWidget Sign In button Masuk Sign Out button Keluar YearFrame Y T today Today Today Hari ini linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_it.ts000066400000000000000000001466651523260663500265360ustar00rootroot00000000000000 AccountItem Sync successful Sincronizzazione riuscita Network error Errore rete Server exception Eccezione del server Storage full Memoria piena AccountManager Local account Account locale Event types Tipi di evento CColorPickerWidget Color Colore Cancel button Annulla Save button Salva CDayMonthView Monday Lunedì Tuesday Martedì Wednesday Mercoledì Thursday Giovedì Friday Venerdì Saturday Sabato Sunday Domenica CDayWindow Y Y M M D D Lunar Lunare CGraphicsView New Event Nuovo evento CMonthScheduleNumItem %1 more %1 in più CMonthView New event Nuovo evento New Event Nuovo evento CMonthWindow Y Y CMyScheduleView My Event I miei eventi OK button OK Delete button Elimina Edit button Modifica CPushButton New event type Nuovo tipo di evento CScheduleDlg New Event Nuovo evento Edit Event Modifica evento End time must be greater than start time La data di fine deve essere maggiore di quella di inizio OK button OK Never Mai At time of event All'ora dell'evento 15 minutes before 15 minuti prima 30 minutes before 30 minuti prima 1 hour before 1 ora prima 1 day before 1 giorno prima 2 days before 2 giorni prima 1 week before 1 settimana prima On start day (9:00 AM) All'inizio della giornata (9:00 AM) time(s) volta(e) Enter a name please Inserisci un nome The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Type: Tipo: Description: Descrizione: All Day: Tutto il giorno: Starts: Inizio: Ends: Fine: Remind Me: Promemoria: Repeat: Ripetizione: End Repeat: Fine ripetizione: Calendar account: Account calendario: Calendar account Account calendario Type Tipo Description Descrizione All Day Tutto il giorno Time: Ora: Time Ora Solar Solare Lunar Lunare Starts Inizio Ends Fine Remind Me Promemoria Repeat Ripetizione Daily Giornaliera Weekdays Giorni della settimana Weekly Settimanale Monthly Mensile Yearly Annuale End Repeat Fine ripetizione After Dopo On Acceso Cancel button Annulla Save button Salva CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tutte le occorrenze di una ripetizione devono avere i medesimi parametri. Do you want to change all occurrences? Desideri modificare tutte le occorrenze? Cancel button Annulla Change All Cambia tutte You are changing the repeating rule of this event. Stai cambiando le regole di pianificazione di questo evento. You are deleting an event. Stai eliminando un evento. Are you sure you want to delete this event? Sicuro di voler eliminare questo evento? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Desideri eliminare tutte le occorrenze di questo evento, oppure solo quella selezionata? Delete All Eliminale tutte Delete Only This Event Elimina solo questo evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Desideri eliminare questa e tutte le occorrenze successive di questo evento, oppure solo quella selezionata? Delete All Future Events Tutte le occorrenze future You are changing a repeating event. Stai modificando un evento ripetitivo Do you want to change only this occurrence of the event, or all occurrences? Desideri modificare solo questa occorrenza dell'evento, o tutte quelle ad esso associate? All Tutti Only This Event Solo questo evento Do you want to change only this occurrence of the event, or this and all future occurrences? Desideri modificare solo il singolo evento,oppure tutte le future ripetizioni? All Future Events Tutte le future ripetizioni You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Hai selezionato un mese bisestile e ti verrà ricordato secondo le regole del calendario lunare. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Modifica Delete Elimina All Day Tutto il giorno CScheduleSearchView No search results Nessun risultato disponibile CScheduleView ALL DAY Tutto il giorno CSettingDialog import ICS file Manual Manuale 15 mins 15 minuti 30 mins 30 minuti 1 hour 1 ora 24 hours 24 ore Sync Now Sincronizza ora Last sync Ultima sincronizzazione Please go to the <a href='/'>Control Center</a> to change system settings Monday Lunedì Sunday Domenica Use System Setting 12-hour clock Orologio 12 ore 24-hour clock Orologio 24 ore CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 ora) (%1 hours) (%1 ore) CTitleWidget Y A M M W S D G Search events and festivals Cerca eventi CWeekWindow Week Settimana Y Y CYearScheduleView All Day Tutto il giorno No event Nessun evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario è uno strumento per visualizzare il calendario ma anche per pianificare in modo intelligente tutti gli eventi della propria vita quotidiana. Localizzazione italiana a cura di Massimo A. Carofano. Calendarmainwindow Calendar Calendario Manage Gestisci Privacy Policy Privacy Policy Syncing... Sincronizzazione... Sync successful Sincronizzazione riuscita Sync failed, please try later Sincronizzazione fallita, riprova più tardi CenterWidget All Day Tutto il giorno DAccountDataBase Work Lavoro Life Personale Other Altro DAlarmManager Close button Chiudi One day before start Un giorno prima di iniziare Remind me tomorrow Ricordamelo domani Remind me later Ricordamelo piu tardi 15 mins later Dopo 15 minuti 1 hour later Dopo 1 ora 4 hours later Dopo 4 ore Tomorrow Domani Schedule Reminder Pianifica promemoria %1 to %2 %1 a %2 Today Oggi DragInfoGraphicsView Edit Modifica Delete Elimina New event Nuovo evento New Event Nuovo evento JobTypeListView export import ICS file You are deleting an event type. Stai eliminando un tipo di evento. All events under this type will be deleted and cannot be recovered. Tutti gli eventi di questo tipo verranno eliminati e non potranno essere recuperati. Cancel button Annulla Delete button Elimina QObject Account settings Impostazioni account Account Account Select items to be synced Seleziona elementi da sincronizzare Events Eventi General settings Impostazioni generali Sync interval Intervallo di sincronizzazione Manage calendar Gestisci calendario Calendar account Account calendario Event types Tipi di evento General Generale First day of week Primo giorno della settimana Time Ora Return Today Return Oggi Return Today Today Return Today Oggi ScheduleTypeEditDlg New event type Nuovo tipo di evento Edit event type Modifica tipo di evento Import ICS file Name: Nome: Color: Colore: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Annulla Save button Salva The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Enter a name please Inserisci un nome Shortcut Help Aiuto Delete event Elimina evento Copy Copia Cut Taglia Paste Incolla Delete Elimina Select all Seleziona tutto SidebarCalendarWidget Y A M M TimeJumpDialog Go button Vai UserloginWidget Sign In button Login Sign Out button Logout YearFrame Y Y today Today Today Oggi linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ja.ts000066400000000000000000001461101523260663500264750ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color 色 Cancel button キャンセル Save button �存 CDayMonthView Monday 月曜日 Tuesday �曜日 Wednesday 水曜日 Thursday 木曜日 Friday 金曜日 Saturday 土曜日 Sunday 日曜日 CDayWindow Y 年 M 月 D 日 Lunar CGraphicsView New Event 新�イベント CMonthScheduleNumItem %1 more CMonthView New event 新�イベント New Event 新�イベント CMonthWindow Y 年 CMyScheduleView My Event イベント OK button OK Delete button 削除 Edit button 編集 CPushButton New event type CScheduleDlg New Event 新�イベント Edit Event イベントを編集 End time must be greater than start time 開始時間より��時間を設定��下�� OK button OK Never ��� At time of event イベント時 15 minutes before 15分� 30 minutes before 30分� 1 hour before 1時間� 1 day before 一日� 2 days before 2日� 1 week before 1週間� On start day (9:00 AM) 開始日 (9:00) � time(s) 回後 Enter a name please The name can not only contain whitespaces Type: 種類: Description: 説明: All Day: 終日: Starts: 開始: Ends: 終了: Remind Me: 通知: Repeat: 繰り返�: End Repeat: 繰り返�終了: Calendar account: Calendar account Type 種類 Description 説明 All Day 終日 Time: Time タイム Solar Lunar Starts 開始 Ends 終了 Remind Me 通知 Repeat 繰り返� Daily 毎日 Weekdays 平日 Weekly 毎週 Monthly 毎月 Yearly 毎年 End Repeat 繰り返�終了 After On オン Cancel button キャンセル Save button �存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button キャンセル Change All ���変更 You are changing the repeating rule of this event. ��イベント�繰り返�ルールを変更�����。 You are deleting an event. イベントを削除�����。 Are you sure you want to delete this event? イベントを削除��もよ������? Delete button 削除 Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All 全�削除 Delete Only This Event ��イベント��削除 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events 今後�イベントを���削除 You are changing a repeating event. 繰り返�イベントを変更�����。 Do you want to change only this occurrence of the event, or all occurrences? All ��� Only This Event ��イベント�� Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events 今後�����イベント You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 編集 Delete 削除 All Day 終日 CScheduleSearchView No search results 検索�果�� CScheduleView ALL DAY 終日 CSettingDialog import ICS file Manual 手動 15 mins 30 mins 1 hour 1時間 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings Monday 月曜日 Sunday 日曜日 Use System Setting 12-hour clock 24-hour clock CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y 年 M 月 W 週 D 日 Search events and festivals CWeekWindow Week 週 Y 年 CYearScheduleView All Day 終日 No event イベント�� CYearWindow Y 年 CalendarWindow Calendar カレンダー Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. カレンダー��日付を表示�るツール��り���生活��らゆる��をスケジューリング�るスマートデイリープランナー��。 Calendarmainwindow Calendar カレンダー Manage Privacy Policy プライ�シー�リシー Syncing... �期�����… Sync successful Sync failed, please try later CenterWidget All Day 終日 DAccountDataBase Work 仕事 Life 生活 Other ��他 DAlarmManager Close button 閉�る One day before start Remind me tomorrow 明日通知 Remind me later 後�通知 15 mins later 1 hour later 4 hours later Tomorrow 明日 Schedule Reminder スケジュール通知 %1 to %2 Today 今日 DragInfoGraphicsView Edit 編集 Delete 削除 New event 新�イベント New Event 新�イベント JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button キャンセル Delete button 削除 QObject Account settings Account アカウント Select items to be synced Events General settings Sync interval Manage calendar Calendar account Event types General 一般 First day of week Time タイム Return Today Return 今日 Return Today Today Return Today 今日 ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button キャンセル Save button �存 The name can not only contain whitespaces Enter a name please Shortcut Help ヘルプ Delete event イベントを削除 Copy コピー Cut 切り�り Paste 貼り付� Delete 削除 Select all ����択 SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go button Go UserloginWidget Sign In button サインイン Sign Out button サインアウト YearFrame Y 年 today Today Today 今日 linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ka.ts000066400000000000000000001444001523260663500264760ustar00rootroot00000000000000 AccountItem Sync successful სინქრ�ნიზ�ცი� წ�რმ�ტებული� Network error ქსელის შეცდ�მ� Server exception სერვერის გ�რეშე შეცდ�მ� Storage full სინდის სივრცე ს�კმ�რისი� AccountManager Local account ლ�კ�ლური �ნგ�რიში Event types მ�ivedის ტიპები CColorPickerWidget Color ფერი Cancel button გ�უქმებ� Save button შენ�ხვ� CDayMonthView Monday �რშ�ბ�თი Tuesday ს�მშ�ბ�თი Wednesday �თხშ�ბ�თი Thursday ხუთშ�ბ�თი Friday პ�რ�სკევი Saturday შ�ბ�თი Sunday კვირ� CDayWindow Y წ M თ D დ Lunar ლური� CGraphicsView New Event �ხ�ლი ივენთი CMonthScheduleNumItem %1 more %1 მეტი CMonthView New event �ხ�ლი ივენთი New Event �ხ�ლი ივენთი CMonthWindow Y წ CMyScheduleView My Event ჩემი ივენთები OK button OK Delete button წ�შლ� Edit button რედ�ქტირებ� CPushButton New event type �ხ�ლი მ�ivedის ტიპი CScheduleDlg New Event ჩემი ივენთები Edit Event ივენთის რედ�ქტირებ� End time must be greater than start time დ�სრულების დრ� უნდ� �ღემ�ტებ�დეს დ�წყების დრ�ს OK button OK Never �რ�სდრ�ს At time of event ივენთის სრული დრ� 15 minutes before 15 წუთით �დრე 30 minutes before 30 წუთით �დრე 1 hour before 1 ს��თით �დრე 1 day before 1 დღით �დრე 2 days before 2 დღით �დრე 1 week before 1 კვირით �დრე On start day (9:00 AM) დრის დ�ს�წყისში (9:00 AM) time(s) ჯერ Enter a name please გთხ�ვთ შეიყვ�ნ�თ ს�ხელი The name can not only contain whitespaces ს�ხელში �რ შეიძლებ� მხ�ლ�დ სივრცეების შეს�ხებ იყ�ს Type: ტიპი: Description: �ღწერ�: All Day: მთელი დღე: Starts: დ�ს�წყისი: Ends: დ�ს�სრული: Remind Me: შემ�ხსენე: Repeat: გ�მე�რებ�: End Repeat: გ�მე�რების დ�ს�სრული: Calendar account: კ�ლენდ�რის �ნგ�რიში: Calendar account კ�ლენდ�რის �ნგ�რიში Type ტიპი Description �ღწერ� All Day ყველ� დღე Time: დრ�: Time დრ� Solar ს�ლ�რი Lunar ლური� Starts დ�ს�წყისი Ends დ�ს�სრული Remind Me შემ�ხსენე Repeat გ�ნმე�რებ� Daily დღიური Weekdays ვიქენდი Weekly კვირეული Monthly თვიური Yearly წლიური End Repeat გ�ნმე�რების დ�ს�სრული After შემდეგ On ზე Cancel button გ�უქმებ� Save button შენ�ხვ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ყველ� გ�ნმე�რებ�დ მ�ვლენებს უნდ� ჰქ�ნდეს ყველ� დღის სტ�ტუს Do you want to change all occurrences? გსურთი მ�ვლენების შეცვლ�? Cancel button გ�უქმებ� Change All ყველ�ს შეცვლ� You are changing the repeating rule of this event. თქვენ ცვლით გ�ნმე�რების რულებს �ღნიშნული ივენთისთვის You are deleting an event. თქვენ შლით ივენთს Are you sure you want to delete this event? დ�წრმუნებული ხ�რთ, რ�მ გსურთ �მ ივენთის წ�შლ�? Delete button წ�შლ� Do you want to delete all occurrences of this event, or only the selected occurrence? გსრუთ �ღნიშნული მ�ვლენების ივენთიდ�ნ �მ�შლ�? Delete All ყველ�ს წ�შლ� Delete Only This Event მხ�ლ�დ �მ ივენთის წ�შლ� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? გსურთ წ�შ�ლ�თ ყველ� შემდგ�მი მ�ვლენ�, თუ მხ�ლ�დ �რჩეული მ�ვლენები? Delete All Future Events ყველ� მ�მდევნ� მ�ვლენის წ�შლ� You are changing a repeating event. თქვენ ცვლით გ�ნმე�რებ�დ ივენთს Do you want to change only this occurrence of the event, or all occurrences? გსრუთ ყველ� მ�ვლენის შეცვლ�, თუ მხ�ლ�დ მ�ნიშნულის? All ყველ� Only This Event მხ�ლ�დ ეს ივენთი Do you want to change only this occurrence of the event, or this and all future occurrences? მხ�ლ�დ �მ ერთი მ�ვლენის შეცვლ�, თუ ყველ� მ�მდევნ� მ�ვლენის შეცვლ�? All Future Events ყველ� მ�მდევნ� ივენთი You have selected a leap month, and will be reminded according to the rules of the lunar calendar. თქვენ შეხვდეთ დ�მ�ტებითი თვე, დ� გ�ინტერესდებ�თ ლური� კ�ლენდ�რის წესების მიხედვით. OK button OK CScheduleSearchDateItem Y წ M თ D დ CScheduleSearchItem Edit რედ�ქტირებ� Delete წ�შლ� All Day ყველ� დღე CScheduleSearchView No search results �რ �რის ძებნის რეზულტ�ტი CScheduleView ALL DAY ყველ� დღე CSettingDialog import ICS file იმპ�რტირებ� ICS ფ�ილი Manual მექნიკურ�დ 15 mins 15 წუთი 30 mins 30 წუთი 1 hour 1 ს��თი 24 hours 24 ს��თი Sync Now სინქრ�ნიზ�ცი� �ხლ� Last sync ბ�ლ� სინქრ�ნიზ�ცი� Please go to the Control Center to change system settings გთხ�ვთ მ�ხვდეთ კ�ნტრ�ლის ცენტრში სისტემის პ�რ�მეტრების შეცვლის თვ�ლს�ჩინ�ბ�დ Monday �რშ�ბ�თი Sunday კვირ� Use System Setting სისტემის პ�რ�მეტრების გ�მ�ყენებ� 12-hour clock 12 ს��თი�ნი ს��თი 24-hour clock 24 ს��თი�ნი ს��თი CTimeEdit (%1 mins) (%1 წუთი) (%1 hour) 1 ს��თი (%1 hours) 1 ს��თი CTitleWidget Y წ M თ W კ D დ Search events and festivals იპ�იერე შემდეგი მ�gebenები დ� ფესტივ�ლები CWeekWindow Week კვირ� Y წ CYearScheduleView All Day ყველ� დღე No event �რ �რის ივენთი CYearWindow Y წ CalendarWindow Calendar კ�ლენდ�რი Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. კ�ლენდ�რი �რის ხელს�წყ� თ�რიღების ს�ნ�ხ�ვ�დ დ� გრ�ფიკის დ�ს�გეგმ�დ Calendarmainwindow Calendar კ�ლენდ�რი Manage მ�რთვ� Privacy Policy პირ�დი ინფ�რმ�ციის პ�ლიტიკ� Syncing... სინქრ�ნიზირებ�... Sync successful სინქრ�ნიზ�ცი� წ�რმ�ტებული� Sync failed, please try later სინქრ�ნიზ�ცი� ვერ მ�ხდ�, გთხ�ვთ სც�დ�თ გ�ნ�ხლებით CenterWidget All Day ყველ� დღე DAccountDataBase Work ს�მს�ხური Life ცხ�ვრებ� Other სხვ� DAlarmManager Close button დ�ხურვ� One day before start დ�წყებ�მდე 1 დღით �დრე Remind me tomorrow შემ�ხსენე ხვ�ლ Remind me later შემ�ხსენე მ�გვი�ნებით 15 mins later 15 წუთის შემდეგ 1 hour later 1 ს��თის შემდეგ 4 hours later 4 ს��თის შემდეგ Tomorrow ხვ�ლ Schedule Reminder შეხსენების დ�გეგმვ� %1 to %2 %1 დ�ნ %2 Today დღეს DragInfoGraphicsView Edit რედ�ქტირებ� Delete წ�შლ� New event �ხ�ლი ივენთი New Event �ხ�ლი ივენთი JobTypeListView export ექსპ�რტი import ICS file იმპ�რტი ICS ფ�ილში You are deleting an event type. თქვენ �რ გ�ნს�ზღვრული� მ�gebenების ტიპი. All events under this type will be deleted and cannot be recovered. ყველ� მ�gebenები �მ ტიპის ქვეშ გ�ნს�ზღვრული� დ� �რ შეიძლებ� დ�ბრუნდეს. Cancel button გ�უქმებ� Delete button წ�შლ� QObject Account settings �კ�უნტის პ�რ�მეტრები Account �კ�უნტი Select items to be synced �ირჩიეთ სინქრ�ნიზირების ს�იდუმლ� ელემენტები Events მ�gebenები General settings ს�ზ�გ�დ� პ�რ�მეტრები Sync interval სინქრ�ნიზ�ციის ინტერვ�ლი Manage calendar ს��თის მ�რთვ� Calendar account კ�ლენდ�რის �კ�უნტი Event types მ�gebenების ტიპები General ძირით�დი First day of week კვების პირველი დღე Time დრ� Return Today Return დღეს Return Today Today Return Today დღეს ScheduleTypeEditDlg New event type �ხ�ლი მ�gebenების ტიპი Edit event type რედ�ქტირებ� მ�gebenების ტიპის Import ICS file იმპ�რტი ICS ფ�ილში Name: ს�ხელი: Color: ფერი: ICS File: ICS ფ�ილი: Cancel button გ�უქმებ� Save button შენ�ხვ� The name can not only contain whitespaces ს�ხელი �რ უნდ� შედგებ�დეს მხ�ლ�დ სპეისებისგ�ნ Enter a name please გ�იტ�ნეთ ს�ხელი გთხ�ვთ Shortcut Help დ�ხმ�რებ� Delete event ივენთის წ�შლ� Copy კ�პირებ� Cut �მ�ჭრ� Paste ჩ�სმ� Delete წ�შლ� Select all ყველ�ს მ�ნიშნვ� SidebarCalendarWidget Y წ M თ TimeJumpDialog Go button გ�დ�სვლ� UserloginWidget Sign In button შესვლ� Sign Out button გ�სვლ� YearFrame Y წ today Today Today დღეს linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_kab.ts000066400000000000000000000733441523260663500266500ustar00rootroot00000000000000 AccountItem Sync successful التناسق ناجح Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full التخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button Sefsex Save button Sekles CDayMonthView Monday Arim Tuesday Aram Wednesday Ahad Thursday Amhad Friday Sem Saturday Sed Sunday Acer CDayWindow Y Aseggas M Ayyur D Ass Lunar القمر CGraphicsView New Event Tadyant tamaynut CMonthScheduleNumItem %1 more Ugar n 1% CMonthView New event Tadyant tamaynut New Event Tadyant tamaynut CMonthWindow Y Aseggas CMyScheduleView My Event Tadyant-iw OK button IH Delete button Kkes Edit button Ẓreg CPushButton New event type نوع حدث جديد CScheduleDlg New Event Tadyant tamaynut Edit Event Ẓreg tadyant End time must be greater than start time Akud n taggara yezmer d netta ara igerrzen ɣef wakud n tazwara OK button IH Never Werǧin At time of event Deg wakud n tedyant 15 minutes before 15 tesdatin send 30 minutes before 30 tesdatin send 1 hour before 1 usrag send 1 day before 1 wass send 2 days before 2 wussan send 1 week before 1 dduṛt send On start day (9:00 AM) Deg tazwara n wass (9:00 SRG) time(s) Akud (akuden) Enter a name please الرجاء إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على المسا�ات البيضاء Type: Anaw: Description: Aglam: All Day: Yal ass: Starts: Yebda Ends: Yekfa Remind Me: Smekti-yi-d: Repeat: Ales End Repeat: Taggara n wallus: Calendar account: حساب الجدول: Calendar account حساب الجدول Type Anaw Description Aglam All Day Meṛṛa ass Time: الوقت: Time الوقت Solar الشمس Lunar القمر Starts Yebda Ends Yekfa Remind Me Smekti-yi-d Repeat Ales Daily S wass Weekdays Ussan n yimalas Weekly S yimalas Monthly S wayyur Yearly S useggas End Repeat Taggara n wallus After Seld On Ɣef Cancel button Sefsex Save button Sekles CScheduleOperation All occurrences of a repeating event must have the same all-day status. Meṛṛa time�riwin n tedyant i d-yettuɣalen ilaq ad sɛunt yiwen waddad i wass kamel. Do you want to change all occurrences? Tebɣi� ad tesnefle� meṛṛa time�riwin? Cancel button Sefsex Change All Senfel kullec You are changing the repeating rule of this event. Tbeddle� alugen i d-yettuɣalen n tedyant-a. You are deleting an event. Tekkse� yiwet tedyant. Are you sure you want to delete this event? D tidet tebɣi� ad tekkse� tadyant-a? Delete button Kkes Do you want to delete all occurrences of this event, or only the selected occurrence? Tebɣi� ad tekkse� meṛṛa time�riwin n tedyant-a neɣ tid kan i d-yettwafernen? Delete All Kkes kullec Delete Only This Event Kkes kan tadyant-a Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Tebɣi� ad tekkse� time�riwt-a d tid meṛṛa i d-iteddun, neɣ d tid kan i d-yettufernen? Delete All Future Events Kkes meṛṛa tidyanin i d-iteddun You are changing a repeating event. Tbeddle� tadyant i d-yettuɣalen. Do you want to change only this occurrence of the event, or all occurrences? Tebɣi� ad tbeddle� time�riwt-agi kan n tedyant, neɣ meṛṛa time�riwen? All Meṛṛa Only This Event Tadyant-agi kan Do you want to change only this occurrence of the event, or this and all future occurrences? Tebɣi� ad tbeddle� time�riwt-a n tedyant, neɣ tagi d meṛṛa time�riwen i d-iteddun? All Future Events Tidyanin akk i d-iteddun You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، ولسو� ت�ذكَّر و�قًا للقواعد الخاصة بالGregorian calendar. OK button IH CScheduleSearchDateItem Y Aseggas M Ayyur D Ass CScheduleSearchItem Edit Ẓreg Delete Kkes All Day Meṛṛa ass CScheduleSearchView No search results Ulac igma� n unadi CScheduleView ALL DAY YAL ASS CSettingDialog Manual S ufus 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour ساعة واحدة 24 hours 24 ساعة Sync Now التناسق الآن Last sync التناسق السابق Monday Arim Sunday Acer 12-hour clock الساعة بتنسيق 12 ساعة 24-hour clock الساعة بتنسيق 24 ساعة Tuesday يوم الثلاثاء Wednesday يوم الأربعاء Thursday يوم الخميس Friday يوم الجمعة Saturday الأربعاء CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y Aseggas M Ayyur W Imalas D Ass Search events and festivals ابحث عن الأحداث والمعارض CWeekWidget Sun الأحد Mon الاثنين Tue الثلاثاء Wed الأربعاء Thu الخميس Fri الجمعة Sat السبت CWeekWindow Week Dduṛt Y Aseggas CYearScheduleView All Day Meṛṛa ass No event Ulac tadyant CYearWindow Y Aseggas CalendarWindow Calendar Awitay Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Awitay d afecku i uskan n wazemz akked daɣen d aɣawas n yal ass i usɣiwes n wayen akk ara tge� deg tudert. Calendarmainwindow Calendar Awitay Manage الإدارة Privacy Policy Tasertit n tba�nit Syncing... Amtawi... Sync successful تم التزامن بنجاح Sync failed, please try later �شل التزامن، يرجى المحاولة لاحقًا CenterWidget All Day Yal ass DAccountDataBase Work Amahil Life Tudert Other Waye� DAlarmManager Close button Mdel One day before start Yiwen wass send beddu Remind me tomorrow Smekti-yi-d azekka Remind me later Smekti-yi-d ticki 15 mins later بعد 15 دقيقة 1 hour later بعد ساعة 4 hours later بعد 4 ساعات Tomorrow Azekka Schedule Reminder Asmekti s usɣiwes %1 to %2 %1 ɣer %2 Today Ass-a DragInfoGraphicsView Edit Ẓreg Delete Kkes New event Tadyant tamaynut New Event Tadyant tamaynut JobTypeListView You are deleting an event type. أنت تقوم بحذ� نوع حدث. All events under this type will be deleted and cannot be recovered. سيتم حذ� جميع الأحداث المرتبطة بهذا النوع ولا يمكن استعادتها. Cancel button Sefsex Delete button Kkes QObject Account settings إعدادات الحساب Account الحساب Select items to be synced اختر العناصر التي سيتم تزامنها Events الأحداث General settings الإعدادات العامة Sync interval �ترة التزامن Manage calendar إدارة التقويم Calendar account حساب التقويم Event types أنواع الأحداث General Amatu First day of week أول يوم من الأسبوع Time أوقات Return Today Return Ass-a Return Today Today Return Today Ass-a ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع الحدث Name: Isem: Color: اللون: Cancel button Sefsex Save button Sekles The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات بيضاء Enter a name please الرجاء إدخال اسم Shortcut Help Tallalt Delete event Kkes tadyant Copy Nɣel Cut Gzem Paste Sente� Delete Kkes Select all Fren kullec SidebarCalendarWidget Y Aseggas M Ayyur TimeJumpDialog Go button اذهب UserloginWidget Sign In button Kcem Sign Out button Ffeɣ YearFrame Y Aseggas today Today Today Ass-a linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_km_KH.ts000066400000000000000000001466751523260663500271140ustar00rootroot00000000000000 AccountItem Sync successful ការសំដែងបានជោគជ�យ Network error កំហុសបណ្�ាញ Server exception កំហុសនៃម៉ាស៊ីនបម្លែង Storage full អា�ិ�្�ព�ញ AccountManager Local account គណនីដែលប្រើបាន Event types ប្រភ�ទព្រៃផ្សាយ CColorPickerWidget Color ពណ៌ Cancel button បោះបង់ Save button រក្សាទុក CDayMonthView Monday �្ងៃចន្ទ Tuesday �្ងៃអង្គារ Wednesday �្ងៃពុធ Thursday �្ងៃព្រហស្ប�ិ� Friday �្ងៃសុក្រ Saturday �្ងៃសៅរ� Sunday �្ងៃអាទិ�្យ CDayWindow Y ឆ្នាំ M �ែ D �្ងៃ Lunar គ្រឿងបុរាណ CGraphicsView New Event ព្រឹ�្�ិការណ��្មី CMonthScheduleNumItem %1 more '%1 មួឲ្យទៀ�' CMonthView New event ព្រឹ�្�ិការណ��្មី New Event ព្រឹ�្�ិការណ��្មី CMonthWindow Y ឆ្នាំ CMyScheduleView My Event ព្រឹ�្�ិការណ�របស់�្ញុំ OK button យល់ព្រម Delete button លុប Edit button កែសម្រួល CPushButton New event type ប្រភ�ទព្រៃផ្សាយ�្មី CScheduleDlg New Event ព្រឹ�្�ិការណ��្មី Edit Event កែព្រឹ�្�ិការណ� End time must be greater than start time ព�លបញ្ចប់�្រូវបានធ្វើដោយផ្ទះលើព�លកើ�ឡើង OK button យល់ព្រម Never មិនដែល At time of event នៅព�លព្រឹ�្�ិការណ� 15 minutes before 15 នាទីមុន 30 minutes before 30 នាទីមុន 1 hour before 1 ម៉ោងមុន 1 day before 1 �្ងៃមុន 2 days before 2 �្ងៃមុន 1 week before 1 សប្�ាហ�មុន On start day (9:00 AM) នៅ�្ងៃចាប់ផ្�ើម (9:00 ព្រឹក) time(s) ដង() Enter a name please សូមបញ្ចូលឈ្មោះ The name can not only contain whitespaces ឈ្មោះមិនអាចមាន�ែស្នាក់នៅក្នុងចំណុច�្ទង់ប៉ុណ្ណោះ Type: ប្រភ�ទ: Description: ការពិពណ៌នាសង្��ប: All Day: ព�ញមួយ�្ងៃ៖ Starts: ចាប់ផ្�ើម៖ Ends: បញ្ចប់៖ Remind Me: រំឭក​�្ញុំ: Repeat: ធ្វើម្�ងទៀ�៖ End Repeat: បញ្ចប់ម្�ងទៀ�៖ Calendar account: គណនីស្�ីពីកា�់ស្�ីពីប្រព�ន្ធមួយ Calendar account គណនីស្�ីពីកា�់ស្�ីពីប្រព�ន្ធមួយ Type ប្រភ�ទ Description បញ្ចែញ All Day ព�ញមួយ�្ងៃ Time: ព�ល៖ Time ព�ល Solar សូល�រ Lunar គ្រឿងបុរាណ Starts ចាប់ផ្�ើម Ends បញ្ចប់ Remind Me ចា�់ចែង Repeat កំណ�់ឡើងវិញ Daily រាល់�្ងៃ Weekdays �្ងៃធ្វើការ Weekly ប្រចាំសប្�ាហ� Monthly ប្រចាំ�ែ Yearly ប្រចាំឆ្នាំ End Repeat បញ្ចប់កំណ�់ឡើងវិញ After បន្ទាប់ពី On បើក Cancel button បោះបង់ Save button រក្សាទុក CScheduleOperation All occurrences of a repeating event must have the same all-day status. រាល់ការកើ�ឡើងនៃព្រឹ�្�ិការណ�ដដែលៗ�្រូវ�ែមានស្�ានភាពព�ញមួយ�្ងៃ។ Do you want to change all occurrences? �ើអ្នកចង់ផ្លាស់ប្�ូរការកើ�ឡើងទាំងអស់ទ�? Cancel button បោះបង់ Change All ផ្លាស់ប្�ូរទាំងអស់ You are changing the repeating rule of this event. អ្នកកំពុងផ្លាស់ប្�ូរវិធានដដែលៗនៃព្រឹ�្�ិការណ�ន�ះ។ You are deleting an event. អ្នកកំពុងលុបព្រឹ�្�ិការណ�មួយ។ Are you sure you want to delete this event? �ើអ្នកប្រាកដជាចង់លុបព្រឹ�្�ិការណ�ន�ះឬ? Delete button លុប Do you want to delete all occurrences of this event, or only the selected occurrence? �ើអ្នកចង់លុបរាល់ការកើ�ឡើងនៃព្រឹ�្�ិការណ�ន�ះឬ�ែការកើ�ឡើងដែលបានជ្រើសរើសទ�? Delete All លុបទាំងអស់ Delete Only This Event លុប�ែព្រឹ�្�ិការណ�ន�ះ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? �ើអ្នកចង់លុបវានិងការកើ�ឡើងនាព�លអនាគ�នៃព្រឹ�្�ិការណ�ន�ះឬមាន�ែការកើ�ឡើងដែលបានជ្រើសរើសទ�? Delete All Future Events លុបព្រឹ�្�ិការណ�អនាគ�ទាំងអស់ You are changing a repeating event. អ្នកកំពុងផ្លាស់ប្�ូរព្រឹ�្�ិការណ�ដដែលៗ។ Do you want to change only this occurrence of the event, or all occurrences? �ើអ្នកចង់ផ្លាស់ប្�ូរ�ែការកើ�ឡើងនៃព្រឹ�្�ិការណ�ន�ះឬការកើ�ឡើងទាំងអស់ទ�? All ទាំងអស់ Only This Event �ែព្រឹ�្�ិការណ�ន�ះទ� Do you want to change only this occurrence of the event, or this and all future occurrences? �ើអ្នកចង់ផ្លាស់ប្�ូរ�ែការកើ�ឡើងនៃព្រឹ�្�ិការណ�ន�ះឬព្រឹ�្�ិការណ�ន�ះនិងការកើ�ឡើងនាព�លអនាគ�ទ�? All Future Events ព្រឹ�្�ិការណ�អនាគ�ទាំងអស់ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. អ្នកបានជ្រើសរើស�ែមួយដែលបានបន្�ែម និងនឹងទទួលបានការចា�់ចែង�ាម�ម្លៃនៃប្រព�ន្ធមួយគ្រឿងបុរាណ។ OK button យល់ព្រម CScheduleSearchDateItem Y ឆ្នាំ M �ែ D �្ងៃ CScheduleSearchItem Edit កែសម្រួល Delete លុប All Day ព�ញមួយ�្ងៃ CScheduleSearchView No search results គ្មានលទ្ធផលស្វែងរកទ� CScheduleView ALL DAY ព�ញមួយ�្ងៃ CSettingDialog import ICS file ប្រមូលឯកសារ ICS Manual ដោយដៃ 15 mins ១៥នាទី 30 mins 30 នាទី 1 hour 1 ម៉ោង 24 hours 24 ម៉ោង Sync Now សំნើយ​ឥឡូវ​ន�ះ Last sync ការសំនើយចុះ Please go to the Control Center to change system settings សូមទៅកាន់ ប្រព�ន្ធសំនើយ ដើម្បីកែប្រែការកំណ�់​ប្រព�ន្ធមួយ។ Monday �្ងៃចន្ទ Sunday �្ងៃអាទិ�្យ Use System Setting ប្រើ​ការកំណ�់​ប្រព�ន្ធមួយ 12-hour clock ម៉ោង 12 ម៉ោង 24-hour clock ម៉ោង 24 ម៉ោង CTimeEdit (%1 mins) (%1 នាទី) (%1 hour) (%1 ម៉ោង) (%1 hours) (%1 ម៉ោង) CTitleWidget Y ឆ្នាំ M �ែ W សប្ដាហ� D �្ងៃ Search events and festivals ស្វែងរកព្រឹ�្�ិការនិងវគ្គ​សំ�ាន់ CWeekWindow Week សប្ដាហ� Y ឆ្នាំ CYearScheduleView All Day ព�ញមួយ�្ងៃ No event គ្មានព្រឹ�្�ិការណ� CYearWindow Y ឆ្នាំ CalendarWindow Calendar ប្រ�ិទិន Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ប្រ�ិទិនគឺជាឧបករណ�សម្រាប់មើលកាលបរិច្ឆ�ទហើយក�ជាអ្នករៀបចំផែនការប្រចាំ�្ងៃដ�ឆ្លា�វៃផងដែរដើម្បីរៀបចំកាលវិភាគទាំងអស់ក្នុងជីវិ�។ Calendarmainwindow Calendar ប្រ�ិទិន Manage គ្រប់គ្រង Privacy Policy គោលនយោបាយ​ស្�ីពី​ការ​សម�យ​ទ�សចរណ� Syncing... កំពុង​សំនើយ... Sync successful ការ​សំនើយ​ជោគជ�យ Sync failed, please try later ការ​សំនើយ​ដំណើរការ​បា�់បង់​សូម​ព្យាយាម​វិញ​នៅព�ល​ក្រោយ CenterWidget All Day ព�ញមួយ�្ងៃ DAccountDataBase Work ធ្វើការ Life ជីវិ� Other ផ្ស�ងទៀ� DAlarmManager Close button បិទ One day before start មួយ�្ងៃមុនព�ល​ចាប់ផ្�ើះ Remind me tomorrow ជំនាញ​�្ញុំ​នៅ�្ងៃស្��ច Remind me later ជំនាញ​�្ញុំ​នៅព�រ​ទៀ� 15 mins later 15 នាទី​នៅព�ល​ក្រោយ 1 hour later 1 ម៉ោង​នៅព�ល​ក្រោយ 4 hours later 4 ម៉ោង​នៅព�ល​ក្រោយ Tomorrow នៅ�្ងៃស្��ច Schedule Reminder ការ​សំនើយ​ជំនាញ %1 to %2 '%1 ដល់ %2' Today �្ងៃន�ះ DragInfoGraphicsView Edit កែសម្រួល Delete លុប New event ព្រឹ�្�ិការណ��្មី New Event ព្រឹ�្�ិការណ��្មី JobTypeListView export ប្រមូល​ទៅ import ICS file ចូល​ទៅ​ឯកសារ​ICS You are deleting an event type. អ្នកកំពុង​លុប​ប្រភ�ទ​ព្រឹ�្�ិការ។ All events under this type will be deleted and cannot be recovered. ការប្រគួសទាំងអស់នៅក្រោមប្រភ�ទន�ះនឹង�្រូវបា�់បង់ហើយមិនអាចប្រគួសបាន។ Cancel button បោះបង់ Delete button លុប QObject Account settings ការកំណ�់�ំបន់គណនី Account គណនី Select items to be synced ជ្រើសរើសធា�ុដែល�្រូវបានស្�ិ�នៅក្នុងការស្�ិ�នៅក្នុងប្រព�ន្ធដោយស្វ�យប្រវ�្�ិ Events ការប្រគួស General settings ការកំណ�់�ំបន់ទូទៅ Sync interval អំឡុងព�លស្�ិ�នៅក្នុងប្រព�ន្ធដោយស្វ�យប្រវ�្�ិ Manage calendar គ្រប់គ្រងកា�ាល់ Calendar account គណនីកា�ាល់ Event types ប្រភ�ទការប្រគួស General ទូទៅ First day of week �្ងៃដំបូងនៃសប្�ាហ� Time ព�ល Return Today Return �្ងៃន�ះ Return Today Today Return Today �្ងៃន�ះ ScheduleTypeEditDlg New event type ប្រភ�ទការប្រគួស�្មី Edit event type កែប្រែប្រភ�ទការប្រគួស Import ICS file ចូលនិវ�្�ន�ឯកសារ ICS Name: ឈ្មោះ: Color: ពណ៌: ICS File: ឯកសារ ICS: Cancel button បោះបង់ Save button រក្សាទុក The name can not only contain whitespaces ឈ្មោះមិនអាចមានស្រោមប៉ុណ្ណោះ Enter a name please សូមបញ្ចូលឈ្មោះមួយ Shortcut Help ជំនួយ Delete event លុបព្រឹ�្�ិការណ� Copy ចម្លង Cut កា�់ Paste បិទភ្ជាប់ Delete លុប Select all ជ្រើស​យក​ទាំងអស់ SidebarCalendarWidget Y ឆ្នាំ M �ែ TimeJumpDialog Go button ទៅ UserloginWidget Sign In button ចុះឈ្មោះចូល Sign Out button ចែកចូល YearFrame Y ឆ្នាំ today Today Today �្ងៃន�ះ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_kn_IN.ts000066400000000000000000001465111523260663500271060ustar00rootroot00000000000000 AccountItem Sync successful ಸಿಂಕ� ಸ�ಪರ� Network error ನೆಟ�ವರ�ಕ� ತಪ�ಪ� Server exception ಸರ�ವರ� ಅಸ�ಥಿರತೆ Storage full ಸಂಗ�ರಹಣೆ ಪೂರ�ಣ AccountManager Local account ಲೋಕಲ� ಅಕೌಂಟ� Event types ಘಟನಾ ಪ�ರಕಾರಗಳ� CColorPickerWidget Color ರಂಗ Cancel button ವಾಪಾಸ� Save button ಸೇವ� CDayMonthView Monday ಮಂಗಳವಾರ Tuesday ಗ�ರ�ವಾರ Wednesday ಶ�ಕ�ರವಾರ Thursday ಶನಿವಾರ Friday ರವಿವಾರ Saturday ಸೋಮವಾರ Sunday ಮಂಗಳವಾರ CDayWindow Y ಯ M ಮ D ಡಿ Lunar ಲೂನರ� CGraphicsView New Event ಹೊಸ ಘಟನೆ CMonthScheduleNumItem %1 more %1 ಅಧಿಕ CMonthView New event ಹೊಸ ಘಟನೆ New Event ಹೊಸ ಘಟನೆ CMonthWindow Y ಯ CMyScheduleView My Event ನನ�ನ ಘಟನೆ OK button ಒಕ� Delete button ಅಪ�ಪಾಸ� Edit button ಸ�ಧಾರಣೆ CPushButton New event type ಹೊಸ ಘಟನಾ ಪ�ರಕಾರ CScheduleDlg New Event ಹೊಸ ಕಾರ�ಯಕ�ರಮ Edit Event ಕಾರ�ಯಕ�ರಮವನ�ನ� ಮಾರ�ಪಡಿಸಿ End time must be greater than start time ಅಂತ�ಯ ಸಮಯ ಆರಂಭದ ಸಮಯಕ�ಕಿಂತ ಹೆಚ�ಚಾಗಿರಬೇಕ� OK button ಆಯ�ಕೆ ಮಾಡಿ Never ಯಾವ�ದೂ ಅಲ�ಲ At time of event ಕಾರ�ಯಕ�ರಮದ ಸಮಯದಲ�ಲಿ 15 minutes before 15 ನಿಮಿಷಗಳ ಮ�ಂಚೆ 30 minutes before 30 ನಿಮಿಷಗಳ ಮ�ಂಚೆ 1 hour before 1 ಗಂಟೆಯ ಮ�ಂಚೆ 1 day before 1 ದಿನದ ಮ�ಂಚೆ 2 days before 2 ದಿನಗಳ ಮ�ಂಚೆ 1 week before 1 ವಾರದ ಮ�ಂಚೆ On start day (9:00 AM) ಆರಂಭದ ದಿನ (9:00 AM) time(s) ಸಮಯ(ಗಳ�) Enter a name please ಸೂಚನೆಗೆ ಒಂದ� ಹೆಸರ� ನಮ�ಮ ಬಳಕೆಯನ�ನ� ನೀಡಿ The name can not only contain whitespaces ಹೆಸರ� ಮಾತ�ರ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ ಬಳಸಿಕೊಂಡಿರ�ವ Type: ಬಳಸಿಕೊಂಡಿರ�ವ: Description: ವಿವರಗಳ�: All Day: ಒಟ�ಟ� ದಿನದಲ�ಲಿ: Starts: ಆರಂಭಿಸ�ತ�ತದೆ: Ends: ಅಂತ�ಯಗೊಳ�ಳ�ತ�ತದೆ: Remind Me: ನನ�ನನ�ನ� ನೆನಪಿಸಿ: Repeat: ಮರ�ಪ�ರಾರಂಭಿಸಿ: End Repeat: ಮರ�ಪ�ರಾರಂಭವನ�ನ� ಅಂತ�ಯಗೊಳ�ಳಿ: Calendar account: ಕ�ಯಾಲೆಂಡರ� ಖಾತೆ: Calendar account ಕ�ಯಾಲೆಂಡರ� ಖಾತೆ Type ಬಳಸಿಕೊಂಡಿರ�ವ Description ವಿವರಗಳ� All Day ಒಟ�ಟ� ದಿನ Time: ಸಮಯ: Time ಸಮಯ Solar ಸೂರ�ಯ Lunar ಚಂದ�ರ Starts ಆರಂಭ Ends ಅಂತ Remind Me ನನ�ನನ�ನ� ನೆನಪಿಸಿ Repeat ಮರ�ಪ�ರಾರಂಭ Daily ದೈನಂದಿನ Weekdays ವಾರದ ದಿನಗಳ� Weekly ವಾರದ Monthly ಮಾಸಿಕ Yearly ವರ�ಷದ End Repeat ಮರ�ಪ�ರಾರಂಭ ಅಂತ After ಅಂತರ On ಆಗ Cancel button ವಾಪಸ� Save button ಸೇವ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ಮರ�ಪ�ರಾರಂಭವಾದ ಘಟನೆಯ ಎಲ�ಲಾ ಸಂಭವನೆಗಳ� ಒಂದೇ ಮೊದಲಾಗ�ವ ದಿನದ ಸ�ಥಿತಿಯನ�ನ� ಹೊಂದಿರಬೇಕ�. Do you want to change all occurrences? ನೀವ� ಎಲ�ಲಾ ಸಂಭವನೆಗಳನ�ನ� ಬದಲಿಸಲ� ಬಯಸ�ತ�ತೀರಾ? Cancel button ವಾಪಸ� Change All ಎಲ�ಲಾ ಬದಲಿಸಿ You are changing the repeating rule of this event. ನೀವ� ಈ ಘಟನೆಯ ಮರ�ಪ�ರಾರಂಭ ನಿಯಮವನ�ನ� ಬದಲಿಸ�ತ�ತೀರಾ. You are deleting an event. ನೀವ� ಒಂದ� ಘಟನೆಯನ�ನ� ಅಪ�ಪಳಿಸ�ತ�ತೀರಾ. Are you sure you want to delete this event? ನೀವ� ಇದನ�ನ� ಅಪ�ಪಳಿಸಲ� ನಿಶ�ಚಯರಾದೀರಾ? Delete button ಅಪ�ಪಳಿಸಿ Do you want to delete all occurrences of this event, or only the selected occurrence? ನೀವ� ಈ ಘಟನೆಯ ಎಲ�ಲಾ ಸಂಭವನೆಗಳನ�ನ� ಅಪ�ಪಳಿಸಲ� ಬಯಸ�ತ�ತೀರಾ, ಅಥವಾ ಮಾತ�ರ ಆಯ�ದ ಸಂಭವನೆಯನ�ನ�? Delete All ಎಲ�ಲಾ ಅಪ�ಪಳಿಸಿ Delete Only This Event ಮಾತ�ರ ಈ ಘಟನೆಯನ�ನ� ಅಪ�ಪಳಿಸಿ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ನೀವ� ಈ ಘಟನೆಯ ಇದನ�ನ� ಮತ�ತ� ಅದರ ಎಲ�ಲಾ ಭವಿಷ�ಯದ ಸಂಭವನೆಗಳನ�ನ� ಅಪ�ಪಳಿಸಲ� ಬಯಸ�ತ�ತೀರಾ, ಅಥವಾ ಮಾತ�ರ ಆಯ�ದ ಸಂಭವನೆಯನ�ನ�? Delete All Future Events ಎಲ�ಲಾ ಭವಿಷ�ಯದ ಘಟನೆಗಳನ�ನ� ಅಪ�ಪಳಿಸಿ You are changing a repeating event. ನೀವ� ಪ�ನರಾವರ�ತನೆಯ ಘಟನೆಯನ�ನ� ಬದಲಾಯಿಸ�ತ�ತಿರಿ. Do you want to change only this occurrence of the event, or all occurrences? ನೀವ� ಘಟನೆಯ ಇದೇ ಒಂದ� ಸಂಗತಿಯನ�ನ� ಬದಲಾಯಿಸಲ� ಬಯಸ�ತ�ತೀರಿ, ಅಥವಾ ಎಲ�ಲಾ ಸಂಗತಿಗಳನ�ನ� ಬದಲಾಯಿಸಲ� ಬಯಸ�ತ�ತೀರಿ? All ಎಲ�ಲ Only This Event ಇದೇ ಘಟನೆ Do you want to change only this occurrence of the event, or this and all future occurrences? ನೀವ� ಘಟನೆಯ ಇದೇ ಒಂದ� ಸಂಗತಿಯನ�ನ� ಬದಲಾಯಿಸಲ� ಬಯಸ�ತ�ತೀರಿ, ಅಥವಾ ಇದನ�ನ� ಮತ�ತ� ಎಲ�ಲಾ ಭವಿಷ�ಯದ ಸಂಗತಿಗಳನ�ನ� ಬದಲಾಯಿಸಲ� ಬಯಸ�ತ�ತೀರಿ? All Future Events ಎಲ�ಲಾ ಭವಿಷ�ಯದ ಘಟನೆಗಳ� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ನೀವ� ಒಂದ� ಕ�ರಮಾnt ಮಾಸವನ�ನ� ಆಯ�ಕೆ ಮಾಡಿದ�ದೀರಿ, ಮತ�ತ� ಚಂದ�ರಗ�ರಹಣ ಕಲೆಗಳ ನಿಯಮಗಳನ�ನ� ಅನ�ಸರಿಸಿ ನೀವನ�ನ� ಅಪ�ಪಿಕೊಳ�ಳಲಾಗ�ತ�ತದೆ. OK button ಆಯ�ಕೆ ಮಾಡಿ CScheduleSearchDateItem Y ಹಾಗೆ M ಮಾಸ D ದಿನ CScheduleSearchItem Edit ಸಂಪಾದಿಸಿ Delete ಅಪ�ಪಿಕೊಳ�ಳಿ All Day ಎಲ�ಲಾ ದಿನ CScheduleSearchView No search results ಹ�ಡ�ಕಲಾಗದ ಫಲಿತಾಂಶಗಳಿಲ�ಲ CScheduleView ALL DAY ಎಲ�ಲಾ ದಿನ CSettingDialog import ICS file ICS ಅಂತರ�ಜಾಲ ಅಥವಾ ಅಂತರ�ಜಾಲ ಫೈಲ� ಅನ�ನ� ಆಯ�ಕೆ ಮಾಡಿ Manual ಮ�ಯಾನ�ಯಲ� 15 mins 15 ನಿಮಿಷಗಳ� 30 mins 30 ನಿಮಿಷಗಳ� 1 hour 1 ಗಂಟೆ 24 hours 24 ಗಂಟೆಗಳ� Sync Now ಈಗ ಸಿಂಕ� ಮಾಡಿ Last sync ಕೊನೆಯ ಸಿಂಕ� Please go to the Control Center to change system settings ಸಿಸ�ಟಮ� ಸೆಟ�ಟಿಂಗ�ಸ� ಬದಲಾಯಿಸಲ� ಬೇಕಾದರೆ ನಿಯಂತ�ರಣ ಕೇಂದ�ರ ಗೆ ಹೋಗಿ Monday ಶನಿವಾರ Sunday ಬ�ಧವಾರ Use System Setting ಸಿಸ�ಟಮ� ಸೆಟ�ಟಿಂಗ�ಸ� ಅನ�ನ� ಬಳಸಿ 12-hour clock 12 ಗಂಟೆ ಸಮಯ ಸೂಚಿಕೆ 24-hour clock 24 ಗಂಟೆ ಸಮಯ ಸೂಚಿಕೆ CTimeEdit (%1 mins) (%1 ನಿಮಿತ�ತ�) (%1 hour) (%1 ಗಂಟೆ) (%1 hours) (%1 ಗಂಟೆಗಳ�) CTitleWidget Y ಯ M ಮ W ವ D ಡಿ Search events and festivals ಘಟನೆಗಳನ�ನ� ಮತ�ತ� ಸಮಾರಾಧನೆಗಳನ�ನ� ಹ�ಡ�ಕಿ CWeekWindow Week ವಾರ Y ಯ CYearScheduleView All Day ಎಲ�ಲಾ ದಿನ No event ಘಟನೆಯಿಲ�ಲ CYearWindow Y ಯ CalendarWindow Calendar ಕಲೆಂಡರ� Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ಕಲೆಂಡರ� ದಿನಗಳನ�ನ� ನೋಡಲ� ಸಾಧನ, ಮತ�ತ� ನೀವ� ಜೀವನದಲ�ಲಿ ಎಲ�ಲಾ ವಿಷಯಗಳನ�ನ� ಸ�ಚೇದಿಸಲ� ಸ�ಮಾರ�ಟ� ದಿನ ಯೋಜಕವಾಗಿದೆ. Calendarmainwindow Calendar ಕಲೆಂಡರ� Manage ಸಂಪಾದಿಸ� Privacy Policy ಪ�ರೈವೇಸಿ ನೀತಿ Syncing... ಸಿಂಕ� ಮಾಡ�ತ�ತಿದೆ... Sync successful ಸಿಂಕ� ಯಶಸ�ವಿಯಾಯಿತ� Sync failed, please try later ಸಿಂಕ� ವಿಫಲವಾಯಿತ�, ಬಳಿಕ ಪ�ರಯತ�ನಿಸಿ CenterWidget All Day ಎಲ�ಲಾ ದಿನ DAccountDataBase Work ಕಾರ�ಯ Life ಜೀವನ Other ಇತರ DAlarmManager Close button ಮ�ಚ�ಚ� One day before start ಆರಂಭದ ಒಂದ� ದಿನ ಮೊದಲ� Remind me tomorrow ನನ�ನನ�ನ� ನಾಳೆ ನೋತ�ರ� Remind me later ನನ�ನನ�ನ� ಬಳಿಕ ನೋತ�ರ� 15 mins later 15 ನಿಮಿತ�ತ� ಬಳಿಕ 1 hour later ಒಂದ� ಗಂಟೆ ಬಾರಿ 4 hours later �ಳ� ಗಂಟೆ ಬಾರಿ Tomorrow ನಾಳೆ Schedule Reminder ಪ�ರತಿಯೊಂದ� ಸ�ಥಿತಿಯನ�ನ� ಸೂಚಿಸಿ %1 to %2 '%1 ರಿಂದ %2' Today ಇಂದ� DragInfoGraphicsView Edit ಸ�ಧಾರಣೆ Delete ಅಪ�ಪಾ New event ಹೊಸ ಘಟನೆ New Event ಹೊಸ ಘಟನೆ JobTypeListView export ನಿರ�ಗಮನ import ICS file �ಸಿಎಸ� ಅಥ�ಯ� ಆಯ�ದ�ಕೊಳ�ಳಿ You are deleting an event type. ನೀವ� ಒಂದ� ಘಟನೆಯ ಪ�ರಕಾರವನ�ನ� ಅಪ�ಪಾ ಮಾಡ�ತ�ತೀರಿ. All events under this type will be deleted and cannot be recovered. ಈ ಪ�ರಕಾರದ ಮ�ಖ�ಯ ಘಟನೆಗಳೆಲ�ಲವ� ಅಪ�ಪಾ ಮಾಡ�ತ�ತವೆ ಮತ�ತ� ಮರ�ಪಡೆಯಲ� ಸಾಧ�ಯವಿಲ�ಲ. Cancel button ವಾಪಸ� Delete button ಅಪ�ಪಾ QObject Account settings ಖಾತೆ ಸೆಟ�ಟಿಂಗ�ಸ� Account ಖಾತೆ Select items to be synced ಸಿನ�ಕ� ಆಗ�ವ ವಸ�ತ�ಗಳನ�ನ� ಆಯ�ದ�ಕೊಳ�ಳಿ Events ಘಟನೆಗಳ� General settings ಸಾಮಾನ�ಯ ಸೆಟ�ಟಿಂಗ�ಸ� Sync interval ಸಿನ�ಕ� ಅವಧಿ Manage calendar ಕ�ಯಾಲೆಂಡರ� ನಿರ�ವಹಣೆ Calendar account ಕ�ಯಾಲೆಂಡರ� ಖಾತೆ Event types ಘಟನೆಯ ಪ�ರಕಾರಗಳ� General ಸಾಮಾನ�ಯ First day of week ವಾರದ ಮೊದಲ ದಿನ Time ಸಮಯ Return Today Return ಇಂದ� Return Today Today Return Today ಇಂದ� ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: ICS File: Cancel button Save button The name can not only contain whitespaces Enter a name please Shortcut Help Delete event Copy Cut Paste Delete Select all SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ko.ts000066400000000000000000001331771523260663500265250ustar00rootroot00000000000000 AccountItem Sync successful �기화 성공 Network error 네트워� 오류 Server exception 서버 예외 Storage full 저장 공간� 가� 찼습니다 AccountManager Local account 로컬 계정 Event types �벤트 유형 CColorPickerWidget Color 색� Cancel button 취소 Save button 저장 CDayMonthView Monday 월요� Tuesday 화요� Wednesday 수요� Thursday 목요� Friday 금요� Saturday 토요� Sunday �요� CDayWindow Y 년 M 월 D � Lunar �력 CGraphicsView New Event 새 �벤트 CMonthScheduleNumItem %1 more %1 � CMonthView New event 새 �벤트 New Event 새 �벤트 CMonthWindow Y 년 CMyScheduleView My Event 나� �벤트 OK button 확� Delete button 삭제 Edit button 편집 CPushButton New event type 신규 �벤트 유형 CScheduleDlg New Event 새 �벤트 Edit Event �벤트 편집 End time must be greater than start time 종료 시간� 시작 시간보다 커야 합니다. OK button 확� Never 없� At time of event �벤트 시 15 minutes before 15분 전 30 minutes before 30분 전 1 hour before 1시간 전 1 day before 1� 전 2 days before 2� 전 1 week before 1주� 전 On start day (9:00 AM) 시작� (오전 9:00) time(s) 시간 Enter a name please �름� 입력해 주세요 The name can not only contain whitespaces �름� 단�으로 공백� �함할 수 없습니다 Type: 종류: Description: 설명: All Day: 하루 종�: Starts: 시작: Ends: 종료 Remind Me: 알림 메시지: Repeat: 반복: End Repeat: 종료 반복: Calendar account: 캘린� 계정: Calendar account 캘린� 계정 Type 타입 Description 설명 All Day 하루 종� Time: 시간: Time 시간 Solar 양력 Lunar �력 Starts 시작 Ends 종료 Remind Me 알림 Repeat 다시 Daily 매� Weekdays 요� Weekly 매주 Monthly 매달 Yearly 매년 End Repeat 반복 종료 After �후 On 진행 Cancel button 취소 Save button 저장 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 반복 �벤트� 모든 발�� 하루 종� ��한 �태를 가져야 합니다. Do you want to change all occurrences? 모든 항목� 변경하시겠습니까? Cancel button 취소 Change All 모� 변경 You are changing the repeating rule of this event. � �벤트� 반복 규칙� 변경하고 있습니다. You are deleting an event. �벤트를 삭제하는 중. Are you sure you want to delete this event? � �벤트를 삭제하시겠습니까? Delete button 삭제 Do you want to delete all occurrences of this event, or only the selected occurrence? � �벤트� 모든 발� 항목� 삭제하시겠습니까, 아니면 선�한 발� 항목만 삭제하시겠습니까? Delete All 모� 삭제 Delete Only This Event � �벤트만 삭제 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? � �벤트와 � �벤트� 모든 향후 발� 항목� 삭제하시겠습니까? 아니면 선�한 발� 항목만 삭제하시겠습니까? Delete All Future Events 모든 향후 �벤트 삭제 You are changing a repeating event. 반복 �벤트를 변경하는 중입니다. Do you want to change only this occurrence of the event, or all occurrences? �벤트� � 발�만 변경하시겠습니까, 아니면 모든 발�� 변경하시겠습니까? All 모� Only This Event � �벤트만 Do you want to change only this occurrence of the event, or this and all future occurrences? �벤트� � 발�만 변경하시겠습니까, 아니면 � 발�과 향후 모든 발�만 변경하시겠습니까? All Future Events 모든 향후 �벤트 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 당신� 윤달� 선�했습니다. �력 규칙� 따� 알림� 제공�니다. OK button 확� CScheduleSearchDateItem Y 년 M 월 D � CScheduleSearchItem Edit 편집 Delete 삭제 All Day 하루 종� CScheduleSearchView No search results 검색결과가 없습니다. CScheduleView ALL DAY 하루 종� CSettingDialog import ICS file ICS 파� 가져오기 Manual 수� 15 mins 15분 30 mins 30분 1 hour 1 시간 24 hours 24시간 Sync Now 즉시 �기화 Last sync 마지막 �기화 Please go to the Control Center to change system settings 시스템 설정� 변경하려면 제어 센터로 ��해 주세요 Monday 월요� Sunday �요� Use System Setting 시스템 설정 사용 12-hour clock 12시간제 시계 24-hour clock 24시간제 시계 CTimeEdit (%1 mins) (%1 분) (%1 hour) (%1 시간) (%1 hours) (%1 시간) CTitleWidget Y 년 M 월 W 주 D � Search events and festivals �벤트 � 축제 검색 CWeekWindow Week �주� Y 년 CYearScheduleView All Day 하루 종� No event �벤트 없� CYearWindow Y 년 CalendarWindow Calendar 달력 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 캘린�는 날짜를 볼 수있는 �구�며, ��� 모든 것� 예약 할 수있는 현명한 �� 플래너입니다 Calendarmainwindow Calendar 달력 Manage 관리 Privacy Policy 개�정보 보호정책 Syncing... �기화중... Sync successful �기화 성공 Sync failed, please try later �기화 실패, 나중� 다시 시�해 주세요 CenterWidget All Day 하루 종� DAccountDataBase Work 작업 Life �활 Other 기타 DAlarmManager Close button 닫기 One day before start 시작 하루 전 Remind me tomorrow 내� 알림 Remind me later 나중� 알림 15 mins later 15분 후 1 hour later 1시간 후 4 hours later 4시간 후 Tomorrow 내� Schedule Reminder �정 알림 %1 to %2 '%1부터 %2까지' Today 오늘 DragInfoGraphicsView Edit 편집 Delete 삭제 New event 새 �벤트 New Event 새 �벤트 JobTypeListView export 내보내기 import ICS file ICS 파� 가져오기 You are deleting an event type. � �벤트 유형� 삭제하고 있습니다. All events under this type will be deleted and cannot be recovered. � 유형� 모든 �벤트가 삭제�고 복구할 수 없습니다. Cancel button 취소 Delete button 삭제 QObject Account settings 계정 설정 Account 계정 Select items to be synced �기화할 항목� 선�하세요 Events �벤트 General settings �반 설정 Sync interval �기화 간격 Manage calendar 달력 관리 Calendar account 달력 계정 Event types �벤트 유형 General �반 First day of week 주간 시작 요� Time 시간 Return Today Return 오늘 Return Today Today Return Today 오늘 ScheduleTypeEditDlg New event type 새로운 �벤트 유형 Edit event type �벤트 유형 편집 Import ICS file ICS 파� 가져오기 Name: �름: Color: 색�: ICS File: ICS 파�: Cancel button 취소 Save button 저장 The name can not only contain whitespaces �름� 공백 문�만 �함할 수 없습니다 Enter a name please �름� 입력해 주세요 Shortcut Help �움� Delete event �벤트 삭제 Copy 복사 Cut 잘�내기 Paste 붙여넣기 Delete 삭제 Select all 전체 선� SidebarCalendarWidget Y 년 M 월 TimeJumpDialog Go button Go UserloginWidget Sign In button 로그� Sign Out button 로그아웃 YearFrame Y 년 today Today Today 오늘 linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ku.ts000066400000000000000000001374101523260663500265250ustar00rootroot00000000000000 AccountItem Sync successful ئەوەتە ھەقیقیتە Network error کارەتە ئەوەتە Server exception سەرڤەر ئەوەتە Storage full بەرە گەمە AccountManager Local account ئەکاانتی کۆمەکان Event types تیپە ئەوەتە CColorPickerWidget Color رنگ Cancel button بەرە Save button بچە CDayMonthView Monday ئەیتەن Tuesday ئەیتەنە دووەم Wednesday ئەیتەنە سێگەم Thursday ئەیتەنە چوارگەم Friday پەنچەم Saturday سەتەم Sunday هەپتەم CDayWindow Y یەك M مەس D دەن Lunar لۇنار CGraphicsView New Event ئەوەتە نوو CMonthScheduleNumItem %1 more %1 زیادە CMonthView New event ئەوەتە نوو New Event ئەوەتە نوو CMonthWindow Y یەك CMyScheduleView My Event ئەوەتەم OK button بەرە Delete button چاپە Edit button بەرە CPushButton New event type تیپە ئەوەتە نوو CScheduleDlg New Event تۆمارێک جدید Edit Event تۆمارێک بەکارهێنەر End time must be greater than start time زمانی کۆنەکە بەهۆیەتی زمانی شەرووەکە OK button بەڵام Never هیچوقت At time of event بە زمانی تۆمار 15 minutes before 15 دەقیکە پێش 30 minutes before 30 دەقیکە پێش 1 hour before 1 گەم پێش 1 day before 1 ڕۆژ پێش 2 days before 2 ڕۆژ پێش 1 week before 1 هە�تە پێش On start day (9:00 AM) بە ڕۆژی شەرووەکە (9:00 AM) time(s) زمان(ەکان) Enter a name please ناویکە بەکارهێنەر The name can not only contain whitespaces ناویکە نەدەوێت ئەندامی ھەڵدەنگەکان بێت Type: تۆمار: Description: تەخمیت: All Day: بەتەواو ڕۆژ: Starts: شەرووەکە: Ends: کۆنەکە: Remind Me: بەمەوە بەگرێتەوە: Repeat: بەرەوە بەکارهێنەر: End Repeat: کۆنەکە بەرەوە بەکارهێنەر: Calendar account: کۆنەکەی کالندار: Calendar account کۆنەکەی کالندار Type تۆمار Description تەخمیت All Day بەتەواو ڕۆژ Time: زمان: Time زمان Solar سولار Lunar لور Starts بەرھەمە Ends تەکمە Remind Me بۆمەنە Repeat تەکرار Daily هە�تەن Weekdays هە�تەن Weekly هە�تەن Monthly ماهان Yearly سالان End Repeat تەکرارى بەتەکمە After پشت On بەر Cancel button بەرکە Save button بەسە CScheduleOperation All occurrences of a repeating event must have the same all-day status. هەر گونه ئەوەرەکى تەکرارى بەرھەمە بە بەتەکمە بەرھەمە بەرە Do you want to change all occurrences? دەمان دەوەمە بەرھەمە بەرە بۆتەکمە بەرھەمە بەرە؟ Cancel button بەرکە Change All بەرە بەرھەمە بەرە You are changing the repeating rule of this event. ئەوەرەکى تەکرارى بەرە بەرە بۆتەکمە بەرە دەکەن. You are deleting an event. ئەوەرەکى تەکرارى بەرە بەرە بۆتەکمە بەرە دەکەن. Are you sure you want to delete this event? ئەوەرەکى تەکرارى بەرە بەرە بۆتەکمە بەرە دەکەن؟ Delete button بەرکە Do you want to delete all occurrences of this event, or only the selected occurrence? >- ئەوەرەکى تەکرارى بەرە بەرە بەرھەمە بەرە بۆتەکمە بەرە دەکەن، یا بەرە بەرھەمە بەرە بەرە دەکەن؟ Delete All بەرە بەرھەمە بەرە Delete Only This Event بەرە بەرھەمە بەرە بەرە دەکەن Do you want to delete this and all future occurrences of this event, or only the selected occurrence? >- ئەوەرەکى تەکرارى بەرە بەرە بەرھەمە بەرە بە تەکە بەرە بەرە دەکەئەت، یا بەرە بەرھەمە بەرە بەرە دەکەن؟ Delete All Future Events بەرە بەرھەمە بەرە بەرە دەکەئەت You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button CScheduleSearchDateItem Y M D CScheduleSearchItem Edit Delete All Day CScheduleSearchView No search results CScheduleView ALL DAY CSettingDialog import ICS file Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the Control Center to change system settings Monday Sunday Use System Setting 12-hour clock 24-hour clock CTimeEdit (%1 mins) (%1 دەقیقە) (%1 hour) (%1 ساچە) (%1 hours) (%1 ساچە) CTitleWidget Y يەك M مەس W هە�ته D روز Search events and festivals تەمەمەت و �ەستیڤالەکان نەمەنەن CWeekWindow Week هە�ته Y 'يەك' CYearScheduleView All Day هەر ڕۆز No event تەمەمەت نەدە CYearWindow Y 'يەك' CalendarWindow Calendar کالەندار Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. کالەندار ڕۆزەکان نەمەنەن دەکرێت و هەر چەمەتەکان نەمەنەن دەکرێت بۆ نەمەنەن چەمەتەکانی دەنیا. Calendarmainwindow Calendar کالەندار Manage هەنگەمەکردن Privacy Policy پەلیسی بەرەھەرە Syncing... سنسکردن... Sync successful سنسکردن دەستکاری شوو Sync failed, please try later سنسکردن نەدەستکاری کردوو، لەوە بەردەوام بکەردن CenterWidget All Day هەر ڕۆز DAccountDataBase Work کار Life چەمەت Other دەگە DAlarmManager Close button بەند کردن One day before start هەر ڕۆزەکانی دەنیا لە ڕۆزەکانی دەنیا بەردەوام Remind me tomorrow بەردەوام کردنەوە ڕۆزەکانی دەنیا Remind me later بەردەوام کردنەوە دەگە 15 mins later 15 دەقیقە دەگە 1 hour later 1 ساعت دوو 4 hours later 4 ساعت دوو Tomorrow بەروار Schedule Reminder تەنەریسمەنی نێتەرەکە %1 to %2 %1 تا %2 Today هینە DragInfoGraphicsView Edit دەگرتن Delete پەرەسەن New event ھەنە کار New Event ھەنە کار JobTypeListView export ئەکسپۆرت import ICS file ئەیمپۆرت �ایلی ICS You are deleting an event type. تو نێتەرەکە بەکارهێنەری ھەنە کارەکە دەپەرەسەنەوە. All events under this type will be deleted and cannot be recovered. کۆنە ھەنە کارەکە بەکارهێنەری ھەنە کارەکە دەپەرەسەنەوە و نەدەتوانرێت دووبارە کەشی بکات. Cancel button بەخێرکردن Delete button پەرەسەن QObject Account settings بەکارهێنەری نەتەرەکە Account بەکارهێنەر Select items to be synced بەکارهێنەرەکە بەکارهێنەری نەتەرەکە دەخوێنرێت Events ھەنە کار General settings نەتەرەکە بەکارهێنەری نەتەرەکە Sync interval زمانی نەتەرەکە Manage calendar کالەندەری نەتەرەکە Calendar account بەکارهێنەری کالەندەر Event types نەتەرەکە بەکارهێنەری ھەنە کار General بەکارهێنەری نەتەرەکە First day of week ئەو ڕۆژە بەکارهێنەری ھەنە کارەکە Time زمان Return Today Return هینە Return Today Today Return Today هینە ScheduleTypeEditDlg New event type ئەوە بەرھەمە Edit event type ئەوە بەرھەمە دەوە Import ICS file ICS �ایلو بەرھەمە کەرە Name: ناڤ: Color: رنگ: ICS File: ICS �ایل: Cancel button بەرە Save button بەسە The name can not only contain whitespaces ناڤ بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەسەرە بەرە بە ئەس === Enter a name please Shortcut Help تەمەم Delete event ئەڤەت دەرە Copy کۆپی Cut تەک Paste پەسە Delete دەرە Select all هەموو دەرە SidebarCalendarWidget Y يە M مە TimeJumpDialog Go button بەرە UserloginWidget Sign In button دەرە Sign Out button دەرە YearFrame Y يە today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ku_IQ.ts000066400000000000000000001402111523260663500271070ustar00rootroot00000000000000 AccountItem Sync successful بەرەمەری بەکارهێنەر Network error کارکردنەوەی کۆمەڵە گەرمان Server exception کارکردنەوەی سێرڤەر Storage full بەرەمەری چەمەر AccountManager Local account کۆمەڵە گەرمانی Event types نەتیجەکانی کارکردنەوە CColorPickerWidget Color رنگ Cancel button بەکارهێنەرەوە Save button بەسەرکەوتن CDayMonthView Monday ئەیتۇنى Tuesday چارەشەنبە Wednesday چۆمەر Thursday پێنەم Friday پەیتۆن Saturday شەممەر Sunday هەپتەن CDayWindow Y ی M م D د Lunar لۆنار CGraphicsView New Event کارکردنەوە جدی CMonthScheduleNumItem %1 more %1 بەشە CMonthView New event کارکردنەوە جدی New Event کارکردنىەوە جدی CMonthWindow Y ی CMyScheduleView My Event کارکردنەوەم OK button بەرەمەر Delete button چاک کردن Edit button بەدەستهێنان CPushButton New event type نەتیجە جدی CScheduleDlg New Event تاییدیەت جدید Edit Event وەزی�ە جدید End time must be greater than start time زمانی پێکھەوە بایەد بە زمانی کۆشەوە بەکاربێت OK button تاییدی Never هەرگز At time of event لە زمانی تاییدی 15 minutes before 15 دەنگە پێکەوە 30 minutes before 30 دەنگە پێکەوە 1 hour before 1 شەوە پێکەوە 1 day before 1 ڕۆژ پێکەوە 2 days before 2 ڕۆژ پێکەوە 1 week before 1 هە�تە پێکەوە On start day (9:00 AM) لە ڕۆژی کۆشەوە (9:00 AM) time(s) زمان (هەندێک بەکارهێنەر) Enter a name please نومرەکان بەکارهێنەر بەکاربەرە The name can not only contain whitespaces نومرەکە بەکارهێنەر چەندە دەنگە بەکاربەرە Type: نوع: Description: تەخمیەت: All Day: هەموو ڕۆژ: Starts: کۆشەوە: Ends: پێکەوە: Remind Me: بە خەیا کەرە: Repeat: بە دووبارە کەرە: End Repeat: کاری دووبارە Calendar account: کۆتاکەی کالەندار: Calendar account کۆتاکەی کالەندار Type نوع Description تەخمیەت All Day هەموو ڕۆژ Time: زمان: Time زمان Solar سولار Lunar لور Starts بەرەو Ends کەرەو Remind Me بەمەرەو Repeat بەرەو Daily هە�تەن Weekdays هە�تەن Weekly هە�تەن Monthly ماهیان Yearly ساڵیان End Repeat بەرەو کەرەو After بەرەو On بەرەو Cancel button بەکەرەو Save button بەسەرەو CScheduleOperation All occurrences of a repeating event must have the same all-day status. هەر ئەوەرەوەکانی یەکەم ڕەویتەکە بەردەوام بە دەوامیتەکانی یەکەم ڕەویتەکە بەردەوام بێن Do you want to change all occurrences? دەرەوەکانی یەکەم ڕەویتەکە بەردەوام بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن؟ Cancel button بەکەرەو Change All بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن You are changing the repeating rule of this event. تووەکانی یەکەم ڕەویتەکە بەردەوام بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن. You are deleting an event. تووەکانی یەکەم ڕەویتەکە بەردەوام بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن. Are you sure you want to delete this event? تووەکانی یەکەم ڕەویتەکە بەردەوام بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن؟ Delete button بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن Do you want to delete all occurrences of this event, or only the selected occurrence? تووەکانی یەکەم ڕەویتەکە بەردەوام بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن یاخود چەندەکانی یەکەم ڕەویتەکە بەردەوام بێن؟ Delete All بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن Delete Only This Event بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن Do you want to delete this and all future occurrences of this event, or only the selected occurrence? تووەکانی یەکەم ڕەویتەکە بەردەوام بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن یاخود چەندەکانی یەکەم ڕەویتەکە بەردەوام بێن؟ Delete All Future Events بەمەرەوەکانی یەکەم ڕەویتەکە بەردەوام بێن You are changing a repeating event. ئەمە بەرەقەتەن ڤىزى دەوام کردنە. Do you want to change only this occurrence of the event, or all occurrences? بەرەقەتەن بەرەقەتەن ڤىزى دەوام کردنە، یان بەرەقەتەن ھەر ڤىزى دەوام کردنە؟ All ھەر Only This Event بەرەقەتەن ڤىزى دەوام کردنە Do you want to change only this occurrence of the event, or this and all future occurrences? بەرەقەتەن بەرەقەتەن ڤىزى دەوام کردنە، یان بەرەقەتەن و بەرەقەتەن ھەر ڤىزى دەوام کردنە؟ All Future Events ھەر ڤىزى دەوام کردنە You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ئەمە چەکەن گەرەم مەسەلە، ھەر ڤىزى دەوام کردنە بە بەرەقەتەن قانۇنەتەن چەنەرەن گەرەم ھە�تە بەھەت کردنە. OK button بەرە CScheduleSearchDateItem Y يە M مەسەلە D دەن CScheduleSearchItem Edit ئەدیت کردنە Delete چ�کەن All Day ھەر گۆشە CScheduleSearchView No search results تەمەم چەکەن نەھىت CScheduleView ALL DAY ھەر گۆشە CSettingDialog import ICS file ICS �ايلى ئەدەت کردنە Manual ئەدەت 15 mins 15 دىن 30 mins 30 دىن 1 hour 1 ساچ 24 hours 24 ساچ Sync Now ئەدەت کردنە Last sync ئەدەت کردنە سەر Please go to the Control Center to change system settings سیستەم چەکەن بەرەقەتەن چەنەرەن ڤىزى دەوام کردنە بۆیۆنە Control Center گەتەن بارە Monday ئەشەمە Sunday چەمەن Use System Setting سیستەم چەکەن بەرەقەتەن چەنەرەن ڤىزى دەوام کردنە 12-hour clock 12-ساچ ئەدەت 24-hour clock 24-ساچ ئەدەت CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y M W D Search events and festivals CWeekWindow Week Y CYearScheduleView All Day No event CYearWindow Y CalendarWindow Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Manage Privacy Policy Syncing... Sync successful Sync failed, please try later CenterWidget All Day DAccountDataBase Work Life Other DAlarmManager Close button One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 1 ساعت دووه 4 hours later 4 ساعت دووه Tomorrow بەروەھ Schedule Reminder تەنەریمەن دەرەجە %1 to %2 '%1 تۆ %2' Today هەنگا DragInfoGraphicsView Edit بەروەھەن Delete پەڕەن New event ئەوەن ھەنگا New Event ئەوەن ھەنگا JobTypeListView export ئەگەرکردن import ICS file چەنە کردن پەڕەی ICS You are deleting an event type. تۆ دەرەجەی ھەنگاکە دەپەڕەن. All events under this type will be deleted and cannot be recovered. هەنگاکە دەرەجەی ھەنگاکە دەپەڕەن و نەدەوە کە بەرەکەر بێن. Cancel button بەرەکەر کردن Delete button پەڕەن QObject Account settings ئەگەرکردن سەرەکەر Account ئەگەرکردن Select items to be synced ئەوەنەکە دەرەجەی بەرەکەر کردن Events هەنگاکە General settings سەرەکەر سەرەکەر Sync interval دەرەجەی بەرەکەر کردن Manage calendar تەنە کردن کەرەندا Calendar account کەرەندا ئەگەرکردن Event types دەرەجەی ھەنگاکە General سەرەکەر First day of week ئەوەنەکە دەرەجەی ھە�ته Time زمان Return Today Return هەنگا Return Today Today Return Today هەنگا ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: ICS File: Cancel button Save button The name can not only contain whitespaces Enter a name please Shortcut Help Delete event Copy Cut Paste Delete Select all SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ky.ts000066400000000000000000001371521523260663500265340ustar00rootroot00000000000000 AccountItem Sync successful Синхрондагы үн Network error Телеком қате Server exception Сервер қате Storage full Жады тол AccountManager Local account Жергиликтәк аккаунт Event types Эвент төрөлдөр CColorPickerWidget Color Рәнг Cancel button Батал Save button Сақлау CDayMonthView Monday Дүйшөн Tuesday Сәйбән Wednesday Сәнбәт Thursday Пайшан Friday Жума Saturday Шәмә Sunday Якшы CDayWindow Y Y M M D D Lunar �йлык CGraphicsView New Event Жаңы үн CMonthScheduleNumItem %1 more %1 өкөт CMonthView New event Жаңы үн New Event Жаңы үн CMonthWindow Y Y CMyScheduleView My Event Мендин үн OK button OK Delete button Жүзөрте Edit button Төҙөрте CPushButton New event type Жаңы үн төрөлөө CScheduleDlg New Event Жаңы үйлөө Edit Event Түзөө үйлөө End time must be greater than start time Батын убакытты баштап убакыттан күп болуш керек OK button Түзөө Never �лбет At time of event Үйлөө убакытында 15 minutes before 15 минуттан өткөн 30 minutes before 30 минуттан өткөн 1 hour before 1 �ааттан өткөн 1 day before 1 күндөн өткөн 2 days before 2 күндөн өткөн 1 week before 1 айдан өткөн On start day (9:00 AM) Баштап күнүнде (9:00 AM) time(s) уаҡыт(лар) Enter a name please �тын киреңиз The name can not only contain whitespaces �тта ғана күп күңәләр барлау үткөрөлө Type: Төрүнчө: Description: Та�вир: All Day: Бүтөн күн: Starts: Башта: Ends: Тамамлашты: Remind Me: Э�ке үткөрөн: Repeat: Такрарлау: End Repeat: Такрарлау тамамлашты: Calendar account: Календарь аккаунты: Calendar account Календарь аккаунты Type Төрү Description Та�вир All Day Бүтөн күн Time: Уаҡыт: Time Врем� Solar Солнечный Lunar Лунный Starts Башына Ends Тамағына Remind Me Менән үткөр Repeat Такрарла Daily Күнөнөн Weekdays Күнөнөн Weekly Күнөнөн Monthly �йлык Yearly Жылдық End Repeat Такрарлау а�қла After �ртка On Бер Cancel button Баш тотур Save button Сақла CScheduleOperation All occurrences of a repeating event must have the same all-day status. Такрарланатын иштәрдің барлығы үчүн өткөрүү мөлөктөрү бирдей болуы керек. Do you want to change all occurrences? Барлық иштерди өзгөртке�із ба? Cancel button Баш тотур Change All Барлығын өзгөрт You are changing the repeating rule of this event. Сиз бул иштің такрарлау үлгі�ін өзгөртүүде. You are deleting an event. Сиз ишті өчүрүүде. Are you sure you want to delete this event? Сиз бул ишти өчүрүүгө ишене�із ба? Delete button Өчүр Do you want to delete all occurrences of this event, or only the selected occurrence? Сиз бул иштиң барлық иштерин өчүрүүгө, әлбетте, танланган ишти өчүрүүгө ишене�із ба? Delete All Барлығын өчүр Delete Only This Event Бул ишти өчүр Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Сиз бул ишти өчүрүүгө және андан кейінгі барлық иштерди өчүрүүгө ишене�із ба, әлбетте, танланган ишти өчүрүүгеге? Delete All Future Events Барлық кейінгі иштерди өчүр You are changing a repeating event. Сиз үчөн үздөн өткөн ылдамдыгын өзгөртө�өз. Do you want to change only this occurrence of the event, or all occurrences? Сиз үчөн үздөн өткөн ылдамдыгын өзгөртө�өз, �ки үздөн өткөн ылдамдыгын өзг�ртө�өз? All Бардык Only This Event Жана үчөн үздөн өткөн ылдамдыгын Do you want to change only this occurrence of the event, or this and all future occurrences? Сиз үчөн үздөн өткөн ылдамдыгын өзгөртө�өз, �ки үздөн өткөн ылдамдыгын өзгөртө�өз? All Future Events Бардык күзгөн ылдамдыктар You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Сиз үчөн үздөн өткөн ылдамдыгын өзгөртө�өз, �ки үздөн өткөн ылдамдыгын өзгөртө�өз? OK button Жакшы CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Түзөт Delete Жокко All Day Бардык күн CScheduleSearchView No search results Тапшырмалар табылган жок CScheduleView ALL DAY Б�РДЫҚ КҮ� CSettingDialog import ICS file ICS файлын импорттоо Manual Көпкүнө 15 mins 15 минут 30 mins 30 минут 1 hour 1 �аат 24 hours 24 �аат Sync Now �лдын-ала �инхрондотоо Last sync �лдын-ала �инхрондотоо Please go to the Control Center to change system settings Си�тема ылдамдыгын өзгөртүү үчүн Контролдүү үзүрүга барыңыз. Monday Дүйшөмбө Sunday Жума Use System Setting Си�тема ылдамдыгын өзгөртүү 12-hour clock 12 �ааттык �аат 24-hour clock 24 �ааттык �аат CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 �аат) (%1 hours) (%1 �ааттар) CTitleWidget Y Ж M М W С D К Search events and festivals Сәйәхәт һәм фе�тивальләр ө�өн һөйләм CWeekWindow Week Сәйәхәт Y Y CYearScheduleView All Day Яңы һөйләм No event Ж CYearWindow Y Календарь CalendarWindow Calendar Календарь Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календарь Calendarmainwindow Calendar Уңышлар Manage Мәгълүмат һаҡлау һәм ҡулланыу ҡағиҙәләре Privacy Policy Синхронләштерелә... Syncing... Синхронләштереү уңышлы Sync successful Синхронләштереү үткәрелмәгән, ә�әрәк әле ҡайта тырыш Sync failed, please try later Барлык ө�төн CenterWidget All Day Иш DAccountDataBase Work Һәмән Life Башҡа Other Яҡын DAlarmManager Close button Башланғы� өҫтөнән береһе One day before start Утҡын һәмән үткәр Remind me tomorrow Ял һәмән үткәр Remind me later 15 минут һәмән 15 mins later 15 минуттан кийин 1 hour later 1 �ааттан кейин 4 hours later 4 �ааттан кейин Tomorrow Бүgünкөнөн кейин Schedule Reminder Жоба ��ке �аклао %1 to %2 '%1 to %2' Today Бүгүн DragInfoGraphicsView Edit Түзөт Delete Жогоруу New event Жаңы ы�ң New Event Жаңы ы�ң JobTypeListView export �к�порт import ICS file ICS файлын импорт кылыш You are deleting an event type. Сиз ы�ң түрүн жогоруу кылып тур�ыз. All events under this type will be deleted and cannot be recovered. Бул түрдөгү бардык ы�ңдар жогоруу кылынып, өзгөртүүлөрөн өзгөртүүлөрөн кайтарып алуу мүмкин �ме�. Cancel button Баткыч Delete button Жогоруу QObject Account settings �каунт өзгөртөөлөрү Account �каунт Select items to be synced Синхрондойтyn ы�ңдарды тандалоо Events Ы�ңдар General settings Жалпы өзгөртөөлөр Sync interval Синхрондойтyn аралыгы Manage calendar Календарды өзгөртөө Calendar account Календар акаунт Event types Ы�ң түрү General Жалпы First day of week �йылдын биринчи күнү Time Врем� Return Today Return Бүгүн Return Today Today Return Today Бүгүн ScheduleTypeEditDlg New event type Жаңы қызмет түрү Edit event type Қызмет түрүн өзгөрт Import ICS file ICS файлын киргиз Name: �т: Color: Рәнг: ICS File: ICS Файл: Cancel button Батыл Save button Сақлау The name can not only contain whitespaces �т ғана бо� орындарды ғана үзгөртпе Enter a name please �т киргизиңиз Shortcut Help Ярдам Delete event Эвентди өчүр Copy Көчүрүү Cut Жылып өчүрүү Paste Жылып қой Delete Өчүрүү Select all Барлыгын тандаңыз SidebarCalendarWidget Y Y M �й TimeJumpDialog Go button Барып үзгөрт UserloginWidget Sign In button Киргиз Sign Out button Чыгып үзгөрт YearFrame Y Y today Today Today Бүгүн linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_lo.ts000066400000000000000000001612561523260663500265250ustar00rootroot00000000000000 AccountItem Sync successful ລូຫ្នបញ្ហាសម្របជាស�្�ិ� Network error បញ្ហាអ�რូវិក Server exception ប្រ�ិប�្�ិការទូទៅល�ចឡាំង Storage full ផ្ទុកទៅដល់ព�ញ AccountManager Local account គណន៌ល��ាសម្ព�ន្ធ Event types ប្រភ�ទសកម្មភាព CColorPickerWidget Color ពណ៌ Cancel button បំបាក់ច�ញ Save button រក្សា CDayMonthView Monday �្ងៃចំពោះទុក្រ Tuesday �្ងៃចំពោះទុក្រម្បែរ Wednesday �្ងៃចំពោះទុក្រព្រាហាន Thursday �្ងៃចំពោះទុក្រចុងសបាំ Friday �្ងៃចំពោះទុក្រអាទិ�ិ Saturday �្ងៃចំពោះទុក្រសុបាំ Sunday ສົ້ນදາວ CDayWindow Y � M ມ D � Lunar ເດືອນສົ້ນ CGraphicsView New Event ໃຫ້ເພີ່ມຫຼົງ�ານ CMonthScheduleNumItem %1 more %1 ང�້າ� CMonthView New event ໃຫ້ເພີ່ມຫຼົງ�ານ New Event ໃຫ້ເພີ່ມຫຼົງ�ານ CMonthWindow Y � CMyScheduleView My Event ຫຼົງ�ານຂອງຂ້ອ� OK button ຕົວຢ່າງ Delete button ລົບ Edit button ��້ໄຂ CPushButton New event type ເຫດທີ່ມີ�ານເພີ່ມຫຼົງ�ານ CScheduleDlg New Event ເຫດ�្មិ��្មិ��្មិ� Edit Event កំណ�់ເຫດ�្មិ� End time must be greater than start time ព�លបញ្ចប់�្រូវ�ែធ្លើជាងព�លចាប់ផ្�ើម OK button យល់ Never សំណាល់ At time of event នៅព�លເຫດកើ�ឡើង 15 minutes before មួយម៉ែនបឹងមុន 30 minutes before 30នាទីមុន 1 hour before មួយម៉ែនមុន 1 day before មួយ�្ងៃមុន 2 days before ពីរ�្ងៃមុន 1 week before មួយសប្�ាហ់មុន On start day (9:00 AM) នៅ�្ងៃចាប់ផ្�ើម (9:00) time(s) ព�ល Enter a name please សូមបញ្ចូលឈ្មោះ The name can not only contain whitespaces ຊື່ບ�່ສາມາດມີພຽບຢາງເທີໃ�ນະພາ� Type: ປະເພດ: Description: ອະທິບາ�: All Day: ຕະຫຼອດມື້: Starts: ເລົາເລົ່າ: Ends: ສົ່ງເຖິງ: Remind Me: ຈຸດປະສົງ: Repeat: ຊ້ຳ: End Repeat: ສິ້ນສຸດ�ານຊ້ຳ: Calendar account: ບົດບາດສະບິມ སາງຄໆນານ: Calendar account ບົດບາດສະບິມ སາງຄໆນານ Type ປະເພດ Description ອະທິບາ� All Day ຕະຫຼອດມື້ Time: ເວລາ: Time �្�ូល Solar �្មើង Lunar ��ពី Starts ចាប់ផ្�ើម Ends បញ្ចប់ Remind Me ជួយជម្ល់�្លឹប Repeat ຊ້ຳ Daily ប្រចាំ�្ងៃ Weekdays �្ងៃធ្វើការ Weekly ប្រចាំសប្�ាហ់ Monthly ប្រចាំ�ែ Yearly ប្រចាំឆ្នាំ End Repeat បញ្ចប់ការ повторить After បន្ទាប់ពី On បុរាណ Cancel button បatal Save button ບຶར CScheduleOperation All occurrences of a repeating event must have the same all-day status. ທຸ��ານເ�ີດຂຶ້ນຂອງເຫດ�ານທີ່ຊ້ຳຕ້ອງມີສະຖານະ�ານຕະຫຼອດມື້ຄື�ັນ. Do you want to change all occurrences? ທ່ານຕ້ອງ�ານ��້ໄຂທຸ��ານເ�ີດຂຶ້ນບ�? Cancel button �ົ�ເລີ� Change All ��້ໄຂທັງ�ົດ You are changing the repeating rule of this event. ທ່ານ�ຳລັງ��້ໄຂ�ົດ�ານຊ້ຳຂອງເຫດ�ານນີ້. You are deleting an event. ທ່ານ�ຳລັງລຶບເຫດ�ານ. Are you sure you want to delete this event? ທ່ານ�ນ່ໃຈບ�ທີ່ຈະລຶບເຫດ�ານນີ້? Delete button ລຶບ Do you want to delete all occurrences of this event, or only the selected occurrence? ທ່ານຕ້ອງ�ານລຶບທຸ��ານເ�ີດຂຶ້ນຂອງເຫດ�ານນີ້ ຫຼືສະເພາະອັນທີ່ເລືອ�? Delete All ລຶບທັງ�ົດ Delete Only This Event ລຶບສະເພາະເຫດ�ານນີ້ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ທ່ານຕ້ອງ�ານລຶບເຫດ�ານນີ້�ລະທຸ��ານເ�ີດຂຶ້ນໃນອະນາຄົດ ຫຼືສະເພາະອັນທີ່ເລືອ�? Delete All Future Events ລຶບທຸ�ເຫດ�ານໃນອະນາຄົດ You are changing a repeating event. ທ່ານ�ຳລັງ��້ໄຂເຫດ�ານທີ່ຊ້ຳ. Do you want to change only this occurrence of the event, or all occurrences? ທ່ານຕ້ອງ�ານ��້ໄຂພຽນນີ້�ນວນີ້�ນ�, ຫຼືທີ່ນີ້�ລະທີ່ອີງ�ັບພວ�ມັນທີ່ມາອີງ? All ທີ່ທີ່ອີງ�ັບພວ�ມັນທີ່ມາອີງ Only This Event ພຽນນີ້�ນ��ນ� Do you want to change only this occurrence of the event, or this and all future occurrences? ທ່ານຕ້ອງ�ານ��້ໄຂພຽນນີ້�ນວນີ້�ນ�, ຫຼືພຽນນີ້�ນວນີ້�ລະທີ່ອີງ�ັບພວ�ມັນທີ່ມາອີງອະນາຄ຤ມ? All Future Events ທີ່ອີງ�ັບພວ�ມັນທີ່ມາອີງອະນາຄ຤ມ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ທ່ານໄດ້ເລືອ�ເດືອນຫຼື, �ລະຈະຖື�ຈັບ່ງຕາມເຫຼົ່າ�ົນໄ�່ເດືອນເຕົ່າ. OK button ຕົວຢ່າງ CScheduleSearchDateItem Y '�' M ເດືອນ D ວັນ CScheduleSearchItem Edit ��້ໄຂ Delete ລ�້າງ All Day ເລົ່າງວັນທີ້າງວຳງ CScheduleSearchView No search results ບ�່ມີຜົນ�ານຄີ�ຄົວ CScheduleView ALL DAY ທີ່ທີ່�ລ້ງ CSettingDialog Sunday ອາທີ་ຫວານ Monday ຈະນີ້ 24-hour clock ໂມງ 24 ຊີ໅ 12-hour clock ໂມງ 12 ຊີ໅ Manual ມຸນຸນ 15 mins 15 ປ຿ນ 30 mins 30 ປ຿ນ 1 hour 1 ຊີ໅ 24 hours 24 ຊີ໅ Sync Now ອັດເັນຄ�້ນຕອນ Last sync ຄົວນັ�ດື່ງຊົງສັງ�ັບຄວາມປັບປຸງລ່າສັ້ນ import ICS file ອັດເັນໄດ້ໄົ້�ົນໄດ້ໄ�້ Use System Setting ນີ້�ມ່ນ�ານຕິດຕັ້ງຂອງລະບຸບລະບຸບ Please go to the <a href='/'>Control Center</a> to change system settings �ະລຸນາໄປຫາ <a href='/'>�ົມະສານຈັດ�ານ</a> ສັງເ�ດ�ານຕິດຕັ້ງລະບຸບ CTimeEdit (%1 mins) (%1 មែន) (%1 hour) (%1 ម៉ែន) (%1 hours) (%1 ម៉ែន) CTitleWidget Y 'ཡ' M M W W D D Search events and festivals ស្វែងរកអាជីវកម្មនិងប្រាសាប់មហាយូរ CWeekWindow Week សបា Y 'ཡ' CYearScheduleView All Day ទាំងមូល No event គ្មានអាជីវកម្ម CYearWindow Y 'ཡ' CalendarWindow Calendar �ំបំណ្�ើរ Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. �ំបំណ្�ើរគឺជាដំបូងមុ�ដើម្បីមើល�្ងៃប្រវ�្�ិសាស្�្រនិងក�ជាដំបូងមុ�ប្រចាំ�្ងៃដើម្បីរៀបចំទាំងអ្វីក�ប៉ុណ្ណោះ។ Calendarmainwindow Calendar ເລནිය� Manage ຈັດ�ານ Privacy Policy ຄວາມເປັນໄ�ຂ້ອງຄວາມສະ່ວນຮ່ວມ Syncing... �ັບຄຸນສະ່ວນ... Sync successful �ັບຄຸນສະ່ວນສຳເລັດ Sync failed, please try later �ັບຄຸນສະ່ວນລີເຊັນ, མີ່ນ མາພະ�າ�າມອີ�ຄັ້ງ CenterWidget All Day ນັ້ນວັນໄ� DAccountDataBase Work ງານງານ Life ຊີວິດ Other ອື່ນ� DAlarmManager Close button ປຸງປະສິດທິພາບ One day before start ເລົ່ານັ້ນວັນເລິ່ງເລົ່າ Remind me tomorrow ເຕືອນຂ້ອງຂ້ອງອີງຕອບ Remind me later ເຕືອນຂ້ອງຂ້ອງອີ�ຄັ້ງ 15 mins later 15 �ົວທີ່ອີ� 1 hour later មួយម៉ែនៗ បន្ទាប់ 4 hours later ប្រាំម៉ែនៗ បន្ទាប់ Tomorrow ស្វាល់�្មី Schedule Reminder ការជួបជុំកម្មវិធី %1 to %2 %1 ដល់ %2 Today �្ងៃន�ះ DragInfoGraphicsView Edit កំណ�់ Delete លើយ៉ាងច្រើន New event ការជួបជុំ�្មី New Event ការជួបជុំ�្មី JobTypeListView You are deleting an event type. អ្នកកំពុងលើយ៉ាងច្រើនប្រភ�ទការជួបជុំ. All events under this type will be deleted and cannot be recovered. ទាំងអ្នកជួបជុំទាំងអស់ដែលមានប្រភ�ទន�ះនឹង�្រូវលើយ៉ាងច្រើនហើយមិនអាចសង្ឃឹម�្រូវស្វែងរកបានឡើយ. Cancel button បំផុ� Delete button លើយ៉ាងច្រើន export ចំណាយច�ញ import ICS file นำเข้าไฟล์ ICS QObject Account settings ตั้งค่าบั�ชี Account บั�ชี Select items to be synced เลือ�ข้อมูลที่ต้อง�ารซิงค์ Events เหตุ�ารณ์ General settings ตั้งค่าทั่วไป Sync interval ระยะเวลาซิงค์ข้อมูล Manage calendar จัด�ารป�ิทิน Calendar account บั�ชีป�ิทิน Event types ประเภทเหตุ�ารณ์ General ทั่วไป First day of week วัน�ร�ของสัปดาห์ Time เวลา Return Today Return วันนี้ Return Today Today Return Today ມີນາ ScheduleTypeEditDlg New event type ປະຫົວ�ານເຫຼົ່າໃຫ້ Edit event type ��້ໄດ້ປະຫົວ�ານເຫຼົ່າ Name: ຊື່: Color: ສີ່ນ: Cancel button �ົ�ເລີ� Save button ບົດບຳນ� The name can not only contain whitespaces ຊື່ບ�່ສາມາດມີພຽນຄວ�່ພຽນຫວ່າງເທີ່ງເປຨ້ນ Enter a name please �ະລຸນາປ້ອນຊື່ Import ICS file ອ�ົບຸລົມICSໄດ້ <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> �ະນຼາມ: Shortcut Help ຊ່ວ�ເບ຺້ມ Delete event ລ�ງ�ານເຫຼົ່າ Copy ຄຸນມາະນະ Cut �ຳນົດ Paste ຳນົດ Delete លិច Select all ເລືອ�ທີ່ງານ SidebarCalendarWidget Y 'ཡ' M M TimeJumpDialog Go button ເດີ໔ UserloginWidget Sign In button ເຂົ້າສົ່ງ Sign Out button ອອ�ສົ່ງ YearFrame Y 'ཡ' today Today Today ມີນາ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_lt.ts000066400000000000000000001333021523260663500265210ustar00rootroot00000000000000 AccountItem Sync successful Sinhronizavimas sėkmingas Network error Tinklo klaida Server exception Serverio klaida Storage full Saugykla pilna AccountManager Local account Vietinė paskyra Event types Įvykio tipai CColorPickerWidget Color Spalva Cancel button Atsisakyti Save button Įrašyti CDayMonthView Monday Pirmadienis Tuesday Antradienis Wednesday Tre�iadienis Thursday Ketvirtadienis Friday Penktadienis Saturday Šeštadienis Sunday Sekmadienis CDayWindow Y M M m D d Lunar Mėnesinis CGraphicsView New Event Naujas įvykis CMonthScheduleNumItem %1 more %1 daugiau CMonthView New event Naujas įvykis New Event Naujas įvykis CMonthWindow Y M CMyScheduleView My Event Mano įvykis OK button Gerai Delete button Ištrinti Edit button Redaguoti CPushButton New event type Naujas įvykio tipas CScheduleDlg New Event Naujas įvykis Edit Event Redaguoti įvykį End time must be greater than start time Pabaigos laikas turi būti didesnis už pradžios laiką OK button Gerai Never Niekada At time of event Įvykio laiką 15 minutes before 15 minu�ių prieš 30 minutes before 30 minu�ių prieš 1 hour before 1 valandą prieš 1 day before 1 dieną prieš 2 days before 2 dienas prieš 1 week before 1 savaitę prieš On start day (9:00 AM) Pradžios dieną (9:00 AM) time(s) laikas (s) Enter a name please Įveskite vardą The name can not only contain whitespaces Vardas gali būti tik tarpais Type: Tipas: Description: Aprašas: All Day: Visą dieną: Starts: Prasideda: Ends: Baigiasi: Remind Me: Primink man: Repeat: Pakartoti: End Repeat: Baigti pakartoti: Calendar account: Kalendoriaus paskyra: Calendar account Kalendoriaus paskyra Type Tipas Description Aprašas All Day Visą dieną Time: Laikas: Time Laikas Solar Saulės Lunar Mėnesio Starts Prasideda Ends Baigiasi Remind Me Priminėk man Repeat Pakartokite Daily Kiekvieną dieną Weekdays Per p管 Weekly Kiekvieną savaitę Monthly Kiekvieną mėnesį Yearly Kiekvieną metų End Repeat Baigti kartojimą After Po On Įjungta Cancel button Atsisakyti Save button Įrašyti CScheduleOperation All occurrences of a repeating event must have the same all-day status. Visos pasikartojan�io įvykio įvykiai turi turėti tą patį visą dieną statusą. Do you want to change all occurrences? Ar norite pakeisti visas įvykio įvykiai? Cancel button Atsisakyti Change All Pakeisti visas You are changing the repeating rule of this event. Jūs kei�iate pasikartojan�io įvykio taisyklę. You are deleting an event. Jūs pašalinate įvykį. Are you sure you want to delete this event? Ar tikrai norite ištrinti šį įvykį? Delete button Ištrinti Do you want to delete all occurrences of this event, or only the selected occurrence? Ar norite pašalinti visas šio įvykio įvykiai, ar tik pasirinktą įvykį? Delete All Pašalinti visas Delete Only This Event Pašalinti tik šį įvykį Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ar norite pašalinti šį įvykį ir visus ateities įvykiai, ar tik pasirinktą įvykį? Delete All Future Events Pašalinti visas ateities įvykiai You are changing a repeating event. Jūs kei�iate pasikartojantį įvykį. Do you want to change only this occurrence of the event, or all occurrences? Ar norite pakeisti tik šį įvykio įvykį, ar visus įvykio įvykiai? All Visi Only This Event Tik šis įvykis Do you want to change only this occurrence of the event, or this and all future occurrences? Ar norite pakeisti tik šį įvykio įvykį, ar šį įvykį ir visus ateities įvykiai? All Future Events Visi ateities įvykiai You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Jūs pasirinkote skaitmeninį mėnesį, ir bus priminama pagal mėnesio kalendoriaus taisykles. OK button Gerai CScheduleSearchDateItem Y M M m D d CScheduleSearchItem Edit Redaguoti Delete Ištrinti All Day Visą dieną CScheduleSearchView No search results Paieškos rezultatų nėra CScheduleView ALL DAY VISĄ DIENĄ CSettingDialog import ICS file importuoti ICS failą Manual Rankinis 15 mins 15 minu�ių 30 mins 30 minu�ių 1 hour 1 valanda 24 hours 24 valandos Sync Now Synchronizuoti dabar Last sync Paskutinis sinchronizavimas Please go to the Control Center to change system settings Pereikite į Valdymo centrą, kad pakeistumėte sistemos nustatymus Monday Pirmadienis Sunday Sekmadienis Use System Setting Naudoti sistemos nustatymus 12-hour clock 12 valandų piešiklis 24-hour clock 24 valandų piešiklis CTimeEdit (%1 mins) (%1 minu�ių) (%1 hour) (%1 valandą) (%1 hours) (%1 valandų) CTitleWidget Y M M m W W D d Search events and festivals Paieška įvykių ir šventės CWeekWindow Week Savaitė Y M CYearScheduleView All Day Visą dieną No event Nėra įvykio CYearWindow Y M CalendarWindow Calendar Kalendorius Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendorius yra įrankis datų peržiūrai, o taip pat šaukštų dienų planuotojas, kuris leidžia planuoti viską gyvenime. Calendarmainwindow Calendar Kalendorius Manage Valdyti Privacy Policy Privatumo politika Syncing... Sinchronizuojama... Sync successful Synchronizavimas sėkmingas Sync failed, please try later Synchronizavimas nepavyko, bandykite vėl vėliau CenterWidget All Day Visą dieną DAccountDataBase Work Darbas Life Gyvenimas Other Kita DAlarmManager Close button Užverti One day before start Vieną dieną prieš įvykį Remind me tomorrow Priminti rytoj Remind me later Priminti vėliau 15 mins later 15 minu�ių vėliau 1 hour later 1 valandą vėliau 4 hours later 4 valandų vėliau Tomorrow Rytojus Schedule Reminder Planuoti priminimą %1 to %2 %1 iki %2 Today Šiandien DragInfoGraphicsView Edit Redaguoti Delete Ištrinti New event Naujas įvykis New Event Naujas įvykis JobTypeListView export eksportuoti import ICS file importuoti ICS failą You are deleting an event type. Jūs pašalinate įvykio tipą. All events under this type will be deleted and cannot be recovered. Visi įvykiai šiame tipo požiūriu bus pašalinti ir negalės būti atkurti. Cancel button Atsisakyti Delete button Ištrinti QObject Account settings Paskyros nustatymai Account Paskyra Select items to be synced Pasirinkite elementus, kurie turi būti sinchronizuoti Events Įvykiai General settings Bendrasis nustatymai Sync interval Sinchronizavimo intervalas Manage calendar Tvarkyti kalendorių Calendar account Kalendoriaus paskyra Event types Įvykio tipai General Bendra First day of week Savaitės pirmas diena Time Laikas Return Today Return Šiandien Return Today Today Return Today Šiandien ScheduleTypeEditDlg New event type Naujas įvykio tipas Edit event type Redaguoti įvykio tipą Import ICS file Importuoti ICS failą Name: Pavadinimas: Color: Spalva: ICS File: ICS failas: Cancel button Atsisakyti Save button Įrašyti The name can not only contain whitespaces Pavadinimas negali būti sudarytas tik iš tarpų Enter a name please Įveskite pavadinimą Shortcut Help Žinynas Delete event Ištrinti įvykį Copy Kopijuoti Cut Iškirpti Paste Įdėti Delete Ištrinti Select all Žymėti viską SidebarCalendarWidget Y M M m TimeJumpDialog Go button Eiti UserloginWidget Sign In button Prisijungti Sign Out button Atsijungti YearFrame Y M today Today Today Šiandien linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_lv.ts000066400000000000000000001330261523260663500265260ustar00rootroot00000000000000 AccountItem Sync successful Sinhroniz�cija veiksmīga Network error Tīkla kļūda Server exception Servera izņemšana Storage full Saglab�šanas vieta pilna AccountManager Local account Vietējais konts Event types Notikumu veidi CColorPickerWidget Color Kr�sa Cancel button Atcelt Save button Saglab�t CDayMonthView Monday Pirmdiena Tuesday Otrdiena Wednesday Trešdiena Thursday Ceturtdiena Friday Piektdiena Saturday Sestdiena Sunday Svētdiena CDayWindow Y G M M D D Lunar Mēness CGraphicsView New Event Jauns notikums CMonthScheduleNumItem %1 more %1 vair�k CMonthView New event Jauns notikums New Event Jauns notikums CMonthWindow Y G CMyScheduleView My Event Mans notikums OK button Labi Delete button Dzēst Edit button Rediģēt CPushButton New event type Jauns notikumu veids CScheduleDlg New Event Jauns notikums Edit Event Rediģēt notikumu End time must be greater than start time Beigu laikam ir j�būt vēl�kam k� s�kuma laikam OK button Labi Never Nekad At time of event Notikuma laik� 15 minutes before 15 minūtes pirms 30 minutes before 30 minūtes pirms 1 hour before 1 Stundu pirms 1 day before 1 Dienu pirms 2 days before 2 Dienas pirms 1 week before 1 Nedēļu pirms On start day (9:00 AM) Dienas s�kum� (9:00) time(s) reize(s) Enter a name please Lūdzu, ievadi v�rdu The name can not only contain whitespaces V�rds nevar saturēt tikai tukšumus Type: Veids: Description: Apraksts: All Day: Visu dienu: Starts: S�kas: Ends: Beidzas: Remind Me: Atg�din�t: Repeat: Atk�rtot: End Repeat: Beigt atk�rtošanu: Calendar account: Kalendara konts: Calendar account Kalendara konts Type Veids Description Apraksts All Day Visu dienu Time: Laiks: Time Laiks Solar Saulē Lunar Mēness Starts S�kas Ends Beidzas Remind Me Atg�din�t Repeat Atk�rtot Daily Katru dienu Weekdays Darba dien�s Weekly Katru nedēļu Monthly Katru mēnesi Yearly Katru gadu End Repeat Beigt atk�rtošanu After Pēc On Līdz Cancel button Atcelt Save button Saglab�t CScheduleOperation All occurrences of a repeating event must have the same all-day status. Visiem periodiska notikuma atk�rtojumiem ir j�būt identiskam visas dienas statusam Do you want to change all occurrences? Vai vēlaties mainīt visus periodiskos atk�rtojumus? Cancel button Atcelt Change All Mainīt visus You are changing the repeating rule of this event. Jūs main�t notikuma periodiskas atk�rtošan�s iestatījumus You are deleting an event. Jūs dzēšat notikumu Are you sure you want to delete this event? Vai esat drošs, ka vēlaties dzēst šo notikumu? Delete button Dzēst Do you want to delete all occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst visus periodiskos notikumus vai tikai atlasīto notikumu? Delete All Dzēst visu Delete Only This Event Dzēst Tikai Šo Notikumu Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst šo un turpm�kos notikums vai tikai šo notikumu? Delete All Future Events Dzēst visus n�kotnes notikums You are changing a repeating event. Jūs main�t periodisku notikumu. Do you want to change only this occurrence of the event, or all occurrences? Jūs vēlaties mainīt tikai šo notikumu vai visus periodiskos notikumus? All Visi Only This Event Tikai Šo Notikumu Do you want to change only this occurrence of the event, or this and all future occurrences? Jūs vēlaties mainīt tikai šo notikumu vai šo un visus turpm�kos notikumus? All Future Events Visus Turpm�kos Notikumus You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Jūs esat izvēlējies p�rg�jēj� mēnesī, un jūs tiksiet atg�din�ts saskaņ� ar mēness kalendara noteikumiem. OK button Labi CScheduleSearchDateItem Y G M M D D CScheduleSearchItem Edit Rediģēt Delete Dzēst All Day Visu dienu CScheduleSearchView No search results Nav atrasts neviens rezult�ts CScheduleView ALL DAY VISU DIENU CSettingDialog import ICS file Importēt ICS failu Manual Manu�ls 15 mins 15 minūtes 30 mins 30 minūtes 1 hour 1 stunda 24 hours 24 stundas Sync Now Sinhronizēt tagad Last sync Pēdēj� sinhroniz�cija Please go to the Control Center to change system settings Lūdzu, ejiet uz Kontrolcentru, lai mainītu sistēmas iestatījumus Monday Pirmdiena Sunday Svētdiena Use System Setting Izmantot sistēmas iestatījumus 12-hour clock 12 stundu pulkstenis 24-hour clock 24 stundu pulkstenis CTimeEdit (%1 mins) (%1 мин) (%1 hour) (%1 stundas) (%1 hours) (%1 stundas) CTitleWidget Y G M M W N D D Search events and festivals Meklēt notikumus un svētkus CWeekWindow Week Nedēļa Y G CYearScheduleView All Day Visu dienu No event Nav notikumu CYearWindow Y G CalendarWindow Calendar Kalend�rs Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalend�rs ir palīgs ikdienas dzīvē kas palīdz sak�rtot tavu laiku. Calendarmainwindow Calendar Kalend�rs Manage P�rvaldīt Privacy Policy Priv�cijas politika Syncing... Sinhroniz�cija... Sync successful Sinhroniz�cija veiksmīga Sync failed, please try later Sinhroniz�cija neizdev�s, lūdzu, mēģiniet vēl�k CenterWidget All Day Visu dienu DAccountDataBase Work Darbs Life Dzīve Other Cits DAlarmManager Close button Aizvērt One day before start Viena diena pirms s�kuma Remind me tomorrow Atg�d�jiet man rīt Remind me later Atg�d�jiet man vēl�k 15 mins later 15 minūtes vēl�k 1 hour later 1 stunda vēl�k 4 hours later 4 stundas vēl�k Tomorrow Rīt Schedule Reminder Pl�not atg�din�jumu %1 to %2 '%1 līdz %2' Today Šodiena DragInfoGraphicsView Edit Rediģēt Delete Dzēst New event Jauns notikums New Event Jauns notikums JobTypeListView export eksportēt import ICS file importēt ICS failu You are deleting an event type. Jūs dzēsiet notikumu veidu. All events under this type will be deleted and cannot be recovered. Visi notikumi šaj� veid� tiks dzēsti un nevarēs tikt atgūti. Cancel button Atcelt Delete button Dzēst QObject Account settings Konta iestatījumi Account Konts Select items to be synced Izvēlēties elementus, kas j�sinhronizē Events Notikumi General settings Visp�rējie iestatījumi Sync interval Sinhroniz�cijas interv�ls Manage calendar P�rvaldīt kalend�ru Calendar account Kalend�ra konts Event types Notikas veidus General Visp�rīgi First day of week Nedēļas pirm� diena Time Laiks Return Today Return Šodiena Return Today Today Return Today Šodiena ScheduleTypeEditDlg New event type Jauns notikuma veids Edit event type Rediģēt notikuma veidu Import ICS file Importēt ICS failu Name: Nosaukums: Color: Kr�sa: ICS File: ICS fails: Cancel button Atcelt Save button Saglab�t The name can not only contain whitespaces Nosaukum� nevar būt tikai t�lak�s atstarpes Enter a name please Lūdzu, ievadiet nosaukumu Shortcut Help Palīdzība Delete event Dzēst notikumu Copy Kopēt Cut Izgriezt Paste Ielīmēt Delete Dzēst Select all Izvēlēties visus SidebarCalendarWidget Y G M M TimeJumpDialog Go button Doties UserloginWidget Sign In button Pieteikties Sign Out button Atvienoties YearFrame Y G today Today Today Šodiena linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ml.ts000066400000000000000000001516551523260663500265250ustar00rootroot00000000000000 AccountItem Sync successful സിൻക� വിജയിച�ച� Network error ഓൺലൈൻ പിശക� Server exception സർവർ പരിപാടി Storage full സ�റ�റോറേജ� പൂർണ�ണമായി AccountManager Local account ലോകൽ അക�കൗണ�ട� Event types ഇവന�റ� ടൈപ�പ�കൾ CColorPickerWidget Color രംഗം Cancel button അക�കൽ Save button സേവ� CDayMonthView Monday ഒമ�പർവ�വ Tuesday ത�മ�പർവ�വ Wednesday വെൻസ�ഡേ Thursday ത�രസ�ഡേ Friday ഫ�രൈഡേ Saturday സാത�വർഡേ Sunday സൺഡേ CDayWindow Y ഒമ�പർവ�വ M മാർച�ച� D ഡേ Lunar ചന�ദ�രനിർമ�മാണം CGraphicsView New Event പ�തിയ ഇവന�റ� CMonthScheduleNumItem %1 more %1 കൂട�തൽ CMonthView New event പ�തിയ ഇവന�റ� New Event പ�തിയ ഇവന�റ� CMonthWindow Y ഒമ�പർവ�വ CMyScheduleView My Event എന�റെ ഇവന�റ� OK button ഓക� Delete button ഡിലീറ�റ� Edit button എഡിറ�റ� CPushButton New event type പ�തിയ ഇവന�റ� ടൈപ�പ� CScheduleDlg New Event പ�തിയ ക�രമീകരണം Edit Event ക�രമീകരണം തിര�ത�ത�ക End time must be greater than start time അവസാന സമയം ആരംഭ സമയത�തേക�കാൾ കൂടിയതായിരിക�കണം OK button ശരി Never ഒരിക�കല�ം At time of event ക�രമീകരണത�തിന�റെ സമയത�ത� 15 minutes before 15 മിനിറ�റ� മ�മ�പ� 30 minutes before 30 മിനിറ�റ� മ�മ�പ� 1 hour before 1 മണിക�കൂർ മ�മ�പ� 1 day before 1 ദിവസം മ�മ�പ� 2 days before 2 ദിവസം മ�മ�പ� 1 week before 1 വാരം മ�മ�പെ On start day (9:00 AM) ആരംഭ ദിവസം (9:00 ആം) time(s) സമയം (മിനിറ�റ�/മണിക�കൂർ) Enter a name please നാമം പ�രവർത�തനക�ഷമമാക�ക�ക The name can not only contain whitespaces നാമത�തിൽ മാത�രം സ�ഥലം അടങ�ങാൻ കഴിയില�ല Type: പരിഭാഷഃ Description: വിവരം: All Day: എല�ലാ ദിവസത�തിൽ: Starts: ആരംഭം: Ends: അവസാനം: Remind Me: എന�നെ ഓർമ�മിപ�പിക�ക�ക: Repeat: പ�നർപ�രവർത�തനം: End Repeat: പ�നർപ�രവർത�തനം അവസാനിപ�പിക�ക�ക: Calendar account: ക�യാൽക�ക�ലേറ�റർ അക�കൌണ�ട�: Calendar account ക�യാൽക�ക�ലേറ�റർ അക�കൌണ�ട� Type പരിഭാഷ Description വിവരം All Day എല�ലാ ദിവസത�തിൽ Time: സമയം: Time സമയം Solar സോലർ Lunar ലൂനർ Starts ആരംഭം Ends അവസാനം Remind Me എന�നെ ഓർമ�മിക�ക�ക Repeat പ�നർപ�രാപ�തി Daily ഒര� ദിവസം Weekdays ആഴ�ചയിൽ Weekly ആഴ�ചയിൽ Monthly മാസത�തിൽ Yearly വർഷത�തിൽ End Repeat പ�നർപ�രാപ�തി അവസാനിപ�പിക�ക�ക After പിന�നെ On ആ Cancel button റദ�ദാക�ക�ക Save button സേവ� ചെയ�യ�ക CScheduleOperation All occurrences of a repeating event must have the same all-day status. പ�നർപ�രാപ�തി സംഭവങ�ങൾ ഒര� ദിവസത�തെ പ�രവിശ�യ സ�ഥിതി പോലെ ഒരേ ദിവസത�തെ പ�രവിശ�യ സ�ഥിതി പോലെ ആയിരിക�കണം. Do you want to change all occurrences? എല�ലാ സംഭവങ�ങള�ം മാറ�റം വര�ത�താന�ം ആഗ�രഹിക�ക�ന�ന�വോ? Cancel button റദ�ദാക�ക�ക Change All എല�ലാവ�ം മാറ�റം വര�ത�ത�ക You are changing the repeating rule of this event. നിങ�ങൾ ഈ സംഭവത�തിന�റെ പ�നർപ�രാപ�തി നിയമം മാറ�റം വര�ത�ത�കയാണ�. You are deleting an event. നിങ�ങൾ ഒര� സംഭവം അപ�പോൾ പ�റത�താക�ക�കയാണ�. Are you sure you want to delete this event? നിങ�ങൾ ഈ സംഭവം പ�റത�താക�കാന�ം ആഗ�രഹിക�ക�ന�ന�വോ? Delete button പ�റത�താക�ക�ക Do you want to delete all occurrences of this event, or only the selected occurrence? നിങ�ങൾ ഈ സംഭവത�തിന�റെ എല�ലാ സംഭവങ�ങള�ം പ�റത�താക�കാന�ം ആഗ�രഹിക�ക�ന�ന�വോ, അല�ലെങ�കിൽ മാത�രം തിരഞ�ഞെട�ത�ത സംഭവം മാത�രം പ�റത�താക�കാന�ം? Delete All എല�ലാവ�ം പ�റത�താക�ക�ക Delete Only This Event മാത�രം ഈ സംഭവം പ�റത�താക�ക�ക Do you want to delete this and all future occurrences of this event, or only the selected occurrence? നിങ�ങൾ ഈ സംഭവത�തിന�റെ എല�ലാ ഭവിഷ�യത�തില�ള�ള സംഭവങ�ങള�ം പ�റത�താക�കാന�ം ആഗ�രഹിക�ക�ന�ന�വോ, അല�ലെങ�കിൽ മാത�രം തിരഞ�ഞെട�ത�ത സംഭവം മാത�രം പ�റത�താക�കാന�ം? Delete All Future Events എല�ലാ ഭവിഷ�യത�തില�ള�ള സംഭവങ�ങൾ പ�റത�താക�ക�ക You are changing a repeating event. നിങ�ങൾ ഒര� പ�നരാവർത�തന ക�രമീകരണം മാറ�റിക�കൊണ�ടിരിക�ക�കയാണ�. Do you want to change only this occurrence of the event, or all occurrences? നിങ�ങൾ ക�രമീകരണത�തിന�റെ മാത�രം ഈ സംഭവം മാറ�റിക�കൊണ�ടിരിക�ക�കയാണോ, അല�ലെങ�കിൽ എല�ലാ സംഭവങ�ങള�ം മാറ�റിക�കൊണ�ടിരിക�ക�കയാണോ? All എല�ലാ Only This Event ഇത� മാത�രം ക�രമീകരണം Do you want to change only this occurrence of the event, or this and all future occurrences? നിങ�ങൾ ക�രമീകരണത�തിന�റെ മാത�രം ഈ സംഭവം മാറ�റിക�കൊണ�ടിരിക�ക�കയാണോ, അല�ലെങ�കിൽ ഈ സംഭവവ�ം അതിന�ശേഷം എല�ലാ സംഭവങ�ങള�ം മാറ�റിക�കൊണ�ടിരിക�ക�കയാണോ? All Future Events എല�ലാ ഭവിഷ�യത�തിന�റെ ക�രമീകരണങ�ങൾ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. നിങ�ങൾ ഒര� ക�റ�റിപ�പെട�ട മാസം തിരഞ�ഞെട�ത�തിരിക�ക�ന�ന�, അതിനന�സരിച�ച� ചിറക�കൽ കലെണ�ടറിന�റെ നിയമങ�ങൾ പ�രകാരം ഓർമ�മിക�കാൻ നിങ�ങൾക�ക� അർഹമായിരിക�ക�ന�ന�. OK button ഓക�കെ CScheduleSearchDateItem Y ഇ M മാസം D ദിവസം CScheduleSearchItem Edit തിര�ത�ത�ക Delete നീക�കം All Day എല�ലാ ദിവസത�തില�ം CScheduleSearchView No search results തിരയൽ ഫലങ�ങൾ കണ�ടെത�താനായില�ല CScheduleView ALL DAY എല�ലാ ദിവസത�തില�ം CSettingDialog import ICS file ICS ഫയൽ ഇറക�ക�ക Manual മാന�വൽ 15 mins 15 മിനിറ�റ� 30 mins 30 മിനിറ�റ� 1 hour 1 മണിക�കൂർ 24 hours 24 മണിക�കൂർ Sync Now നിലവിലെ സിൻക� ചെയ�യ�ക Last sync കഴിഞ�ഞ സിൻക� Please go to the Control Center to change system settings നിങ�ങൾക�ക� സിസ�റ�റം സെറ�റിംഗ� മാറ�റാൻ കൺട�രോൾ സെന�റർ എന�ന സ�ഥലത�തേക�ക� പോകണം Monday ശനിവാരം Sunday ഞായർവാരം Use System Setting സിസ�റ�റം സെറ�റിംഗ� ഉപയോഗിക�ക�ക 12-hour clock 12 മണിക�കൂർ ക�ലോക�ക�ം 24-hour clock 24 മണിക�കൂർ ക�ലോക�ക�ം CTimeEdit (%1 mins) (%1 മിനിറ�റ�) (%1 hour) (%1 മണിക�കൂർ) (%1 hours) (%1 മണിക�കൂർ) CTitleWidget Y ഒന�ന� M മാസം W ആഴ�ച D ദിവസം Search events and festivals ഇവന�റ�കള�ടെയ�ം പരിപാടികള�ടെയ�ം തിരയൽ CWeekWindow Week ആഴ�ച Y 'ഒന�ന�' CYearScheduleView All Day എല�ലാ ദിവസത�തെയ�ം No event ഇവന�റ� ഇല�ല CYearWindow Y 'ഒന�ന�' CalendarWindow Calendar കലെൻഡർ Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. കലെൻഡർ തീയതികൾ കാണാൻ ഉപയോഗിക�ക�ന�ന ഒര� കരട� കൂടി, ജീവിതത�തിലെ എല�ലാ കാര�യങ�ങള�ം തിരിച�ച�വിളിക�കാൻ ഉപയോഗിക�ക�ന�ന ഒര� മാർഗ�ഗം കൂടിയാണ�. Calendarmainwindow Calendar കലെൻഡർ Manage നിർദ�ദേശം Privacy Policy പ�രാതന നയം Syncing... സിൻക� ചെയ�യ�ന�ന�... Sync successful സിൻക� വിജയിച�ച� Sync failed, please try later സിൻക� വിജയിച�ചില�ല, പിന�നീട� ശ�രമിക�ക�ക CenterWidget All Day എല�ലാ ദിവസത�തെയ�ം DAccountDataBase Work പ�രവർത�തനം Life ജീവിതം Other ഇതരം DAlarmManager Close button അടയ� One day before start ആരംഭത�തിന� ഒര� ദിവസം മ�മ�പ� Remind me tomorrow നാളെ എന�നെ ഓർമ�മിപ�പിക�ക�ക Remind me later നാളെ എന�നെ ഓർമ�മിപ�പിക�ക�ക 15 mins later 15 മിനിറ�റ� പിന�നെ 1 hour later ഒര� മണിക�കൂർ പിന�നെ 4 hours later നാല� മണിക�കൂർ പിന�നെ Tomorrow പിന�നെയ�ള�ള ദിവസം Schedule Reminder സ�രഷ�ചെഡ� റിമിഡർ %1 to %2 '%1 ന� മ�തൽ %2 വരെ' Today നാൾ DragInfoGraphicsView Edit തിര�ത�ത�ക Delete നീക�കം New event പ�തിയ ക�രമീകരണം New Event പ�തിയ ക�രമീകരണം JobTypeListView export ഇറ�റ� ചെയ�യ�ക import ICS file ICS ഫയൽ ഇറ�റ� ചെയ�യ�ക You are deleting an event type. നിങ�ങൾ ഒര� ക�രമീകരണ വിഭാഗം നീക�കം ചെയ�യ�കയാണ�. All events under this type will be deleted and cannot be recovered. ഇത� വിഭാഗത�തിൽ പെട�ട എല�ലാ ക�രമീകരണങ�ങള�ം നീക�കം ചെയ�യ�കയ�ം പ�നർപ�രാപ�തി ചെയ�യാൻ കഴിയില�ലെന�ന�ം പറയ�ന�ന�. Cancel button റദ�ദാക�ക�ക Delete button നീക�കം QObject Account settings അക�കൗണ�ട� സെറ�റിംഗ�സ� Account അക�കൗണ�ട� Select items to be synced സിൻക� ചെയ�യ�ന�ന ഇനങ�ങളെ തിരഞ�ഞെട�ക�ക�ക Events ക�രമീകരണങ�ങൾ General settings സാമാന�യ സെറ�റിംഗ�സ� Sync interval സിൻക� ഇന�റർവൽ Manage calendar കലൻ�റർ കൈകാര�യം ചെയ�യ�ക Calendar account കലൻ�റർ അക�കൗണ�ട� Event types ക�രമീകരണ വിഭാഗങ�ങൾ General സാമാന�യ First day of week ആഴ�ചയ�ടെ ആദ�യ ദിവസം Time സമയം Return Today Return നാൾ Return Today Today Return Today നാൾ ScheduleTypeEditDlg New event type പ�തിയ ക�രമീകരണ തരം Edit event type ക�രമീകരണ തരം പരിഷ�കരിക�ക�ക Import ICS file ICS ഫയൽ ഇപ�പ�റത�ത�ക Name: പേര�: Color: രംഗം: ICS File: ICS ഫയൽ: Cancel button റദ�ദിക�ക�ക Save button സേവ� ചെയ�യ�ക The name can not only contain whitespaces പേര� മാത�രം വെള�ളിടങ�ങൾ അടങ�ങിയിരിക�കാൻ കഴിയില�ല Enter a name please പേര� ഇന�ന� പ�രവേശിക�ക�ക Shortcut Help സഹായം Delete event ഇംപോർട�ട� ക�രമീകരണം നീക�ക�ക Copy കോപ�പി Cut കട�ട� Paste പേസ�റ�റ� Delete നീക�ക�ക Select all എല�ലാം തിരഞ�ഞെട�ക�ക�ക SidebarCalendarWidget Y വർഷം M മാസം TimeJumpDialog Go button പോക�ക UserloginWidget Sign In button പ�രവേശിക�ക�ക Sign Out button പ�റത�ത� പോക�ക YearFrame Y വർഷം today Today Today നാളെ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_mn.ts000066400000000000000000001403771523260663500265260ustar00rootroot00000000000000 AccountItem Sync successful Синхронизаци� амжилттай Network error Х�р�г�л�лтийн алдаа Server exception Серверийн алдаа Storage full Хадгалах х�мж�� бүр�н AccountManager Local account Хувь хүнний дүн Event types Үйлдлийн төрлүүд CColorPickerWidget Color Хөнгөлөлт Cancel button Цуцлах Save button Хадгалах CDayMonthView Monday Даваа Tuesday М�гмар Wednesday Лхагва Thursday Пүгд� Friday Баа�ан Saturday ��м Sunday Даваа CDayWindow Y Өдөр M Сар D Өдөр Lunar Лунар CGraphicsView New Event ��гж үйлд�л CMonthScheduleNumItem %1 more %1-ийн д��д CMonthView New event ��гж үйлд�л New Event ��гж үйлд�л CMonthWindow Y Өдөр CMyScheduleView My Event Биийн үйлд�л OK button OK Delete button У�тгах Edit button За�ах CPushButton New event type ��гж үйлдлийн төрөл CScheduleDlg New Event ���лтт�й догол Edit Event За�ах догол End time must be greater than start time Дуу�ах хугацаа �хл�х хугацаа түүн��� их байх шаардлагатай OK button Хү��лтийг батлах Never Хийхгүй At time of event Доголын хугацаанд 15 minutes before 15 минутын өмнө 30 minutes before 30 минутын өмнө 1 hour before 1 цагийн өмнө 1 day before 1 өдрийн өмнө 2 days before 2 өдрийн өмнө 1 week before 1 �арын өмнө On start day (9:00 AM) Эхл�х өдөрт (9:00 өдөр) time(s) хугацаа(үүд) Enter a name please ��р оруулах The name can not only contain whitespaces ��р д��р т�мд�гт байх боломжгүй Type: Төрөл: Description: Тайлбар: All Day: Доголын үе�р: Starts: Эхл�х: Ends: Дуу�ах: Remind Me: Санах ойлох: Repeat: Давтах: End Repeat: Давтахыг дуу�гах: Calendar account: Календарины аккаунт: Calendar account Календарины аккаунт Type Төрөл Description Тайлбар All Day Доголын үе�р Time: Хугацаа: Time Цаг Solar Хөл Lunar Луан Starts Эхл�х Ends Дуу�ах Remind Me Өөрийгөө �рь Repeat Дахин удахгүй Daily Өдөрт Weekdays Х�т�р Weekly Хоногт Monthly Сард Yearly Жилд End Repeat Дахин удахгүй дуу�ах After Дараа On Өөрөө Cancel button Цуцлах Save button Хадгалах CScheduleOperation All occurrences of a repeating event must have the same all-day status. Дахин удахгүй тохиолдолд бүгдийн үн�лг��ний үн�лг��ний нөхөрчлөл нь ижил байх ё�оор. Do you want to change all occurrences? Бүгдийг өөрчлөх үү? Cancel button Цуцлах Change All Бүгдийг өөрчлөх You are changing the repeating rule of this event. Таны нь �н� тохиолдлын дахин удахгүй дүр�мгүйг өөрчлөн байна. You are deleting an event. Таны нь тохиолдлыг у�тгаж байна. Are you sure you want to delete this event? Таны нь �н� тохиолдлыг у�тгахдаа итг�лт�й байна уу? Delete button У�тгах Do you want to delete all occurrences of this event, or only the selected occurrence? Таны нь �н� тохиолдлын бүгдийг у�тгах уу, ��в�л �онго�он тохиолдлыг у�тгах уу? Delete All Бүгдийг у�тгах Delete Only This Event Бүгдийг у�тгахгүй �н� тохиолдлыг у�тгах Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Таны нь �н� тохиолдолд үүнийг у�тгахаар итг�лт�й байна уу, ��в�л �онго�он тохиолдлыг у�тгах уу? Delete All Future Events Бүгдийг у�тгах You are changing a repeating event. Хүүх�д таны үрг�лжлүүл�х үйлд�л өөрчлөгдөж байна. Do you want to change only this occurrence of the event, or all occurrences? Хүүх�д таны үүд�х үйлд�лд�� өөрчлөхөөр байгаа ���х, ��в�л бүх үйлд�лд�� өөрчлөхөөр байгаа ���х? All Бүх Only This Event Хүүх�д үүд�х үйлд�л Do you want to change only this occurrence of the event, or this and all future occurrences? Хүүх�д үүд�х үйлд�лд�� өөрчлөхөөр байгаа ���х, ��в�л �н� болон бүх дараах үйлд�лд�� өөрчлөхөөр байгаа ���х? All Future Events Бүх дараах үйлд�л You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Хүүх�д таны тавар �ар өөрчлөгдөж байна, өөрөөр х�лб�л �арын хуваарийг үзүүл�хд�� ту� �арын н�гдүг��р хуваарийг х�р�гл�н�. OK button Хүүх�д CScheduleSearchDateItem Y Тийм M Сар D Өдөр CScheduleSearchItem Edit За�ах Delete У�тгах All Day Бүх өдөр CScheduleSearchView No search results Хайлтанд олд�он үр дүнгүүд байхгүй CScheduleView ALL DAY БҮХ ӨДӨР CSettingDialog import ICS file ICS файлыг импортлох Manual Хөтөлбөр 15 mins 15 минут 30 mins 30 минут 1 hour 1 цаг 24 hours 24 цаг Sync Now Хүүх�д �инхронлох Last sync Өмнөх �инхронлол Please go to the Control Center to change system settings Си�тем нарийвчлан хөтөлбөрийг өөрчлөхийн тулд Хөтөлбөрийн хү�н�гт руу очно уу. Monday Даваа Sunday ��м Use System Setting Си�тем нарийвчлан хөтөлбөрийг ашиглах 12-hour clock 12 цагийн дугаар 24-hour clock 24 цагийн дугаар CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 цаг) (%1 hours) (%1 цаг) CTitleWidget Y Өдөр M Сар W Хоног D ��г өдөр Search events and festivals Үйл ажиллагаа болон н�м�лтт�й номын үешид хайх CWeekWindow Week Хоног Y Өдөр CYearScheduleView All Day Өдөрний бүх цаг No event Үйл ажиллагаагүй CYearWindow Y Өдөр CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар нь дүр�м, үе шатыг харах болон амьдралд х�р�гл�гд�х боломжтой хү�н�гт�нд ашигладаг хү�н�гт юм. Calendarmainwindow Calendar Календар Manage Хөгжүүл�х Privacy Policy �ууцлалын заавар Syncing... Синхронлолт... Sync successful Синхронлолт амжилттай Sync failed, please try later Синхронлолт амжилтгүй, дараа дахин оролдоно уу CenterWidget All Day Өдөрний бүх цаг DAccountDataBase Work �ж Life �мьдрал Other Бу�ад DAlarmManager Close button Хаах One day before start Хоёр өдөр өмнө Remind me tomorrow Өчигдөр нь �анал болгох Remind me later Дараа дахин �анал болгох 15 mins later 15 минутын дараа 1 hour later 1 �арын дараа 4 hours later 4 �арын дараа Tomorrow ��г�н өдөр Schedule Reminder �жиллах үйлд�л %1 to %2 %1-��� %2 Today Өнөөдөр DragInfoGraphicsView Edit За�ах Delete У�тгах New event Шин� үйлд�л New Event Шин� Үйлд�л JobTypeListView export �к�порт import ICS file ICS файлыг импортлох You are deleting an event type. Та н�г үйлд�лийг у�тгаж байна. All events under this type will be deleted and cannot be recovered. Эн� үйлд�лд хамаар�ан бүх үйлд�л у�тгагдаж, буцаах боломжгүй байна. Cancel button Цуцлах Delete button У�тгах QObject Account settings Х�р�гл�гчийн тохиргоо Account Х�р�гл�гч Select items to be synced Синхронлох үйлд�л �онгох Events Үйлд�л General settings Зохицуулалт Sync interval Синхронлох өдрөөр Manage calendar Календарыг зохицуулах Calendar account Календарын х�р�гл�гч Event types Үйлд�лт�й төрөл General Зохицуулалт First day of week Хоногийн �хний өдөр Time Цаг Return Today Return Өнөөдөр Return Today Today Return Today Өнөөдөр ScheduleTypeEditDlg New event type �ууц үйлдлийн төрөл Edit event type За�ах үйлдлийн төрөл Import ICS file ICS файлыг импортлох Name: ��р: Color: Хувь�гал: ICS File: ICS Файл: Cancel button Цуцлах Save button Хадгалах The name can not only contain whitespaces ��р нь х���г х���гт�йг��� өөрөөр х�лб�л, түүнийг��� өөрөөр х�лб�л, н�р нь т�мд�гт�йг��� өөрөөр х�лб�л Enter a name please ��р�� оруулна уу Shortcut Help Ту�ламж Delete event Үйлд�л у�тгах Copy Хуваах Cut Хөрвүүл�х Paste ��м�х Delete У�тгах Select all Бүхийг �онгох SidebarCalendarWidget Y Өдөр M Сар TimeJumpDialog Go button Хөдөл UserloginWidget Sign In button ��втр�х Sign Out button Гарах YearFrame Y Өдөр today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_mr.ts000066400000000000000000001427131523260663500265260ustar00rootroot00000000000000 AccountItem Sync successful सिंक स�केलसफ़ Network error नेटवर�क त�र�टी Server exception सर�वर अपेक�षा Storage full स�टोरेज पूर�ण AccountManager Local account स�थानिक खाते Event types वेंट टाइप�स CColorPickerWidget Color रंग Cancel button रद�द करा Save button सेव करा CDayMonthView Monday सोमवार Tuesday मंगळवार Wednesday ब�धवार Thursday ग�रूवार Friday श�क�रवार Saturday शनिवार Sunday रविवार CDayWindow Y य M म D ड Lunar चांदीचा CGraphicsView New Event नवीन वेंट CMonthScheduleNumItem %1 more %1 अधिक CMonthView New event नवीन वेंट New Event नवीन वेंट CMonthWindow Y य CMyScheduleView My Event मा�े वेंट OK button ओके Delete button भ�लवा Edit button स�धारा CPushButton New event type नवीन वेंट टाइप CScheduleDlg New Event नवीन घटना Edit Event संपादित करा End time must be greater than start time स�र�वाती वेळापत�रक खालो खाली असलेला अंती वेळापत�रक असावा OK button ओके Never कधीही At time of event घटनेच�या वेळी 15 minutes before 15 मिनीट पूर�वी 30 minutes before 30 मिनीट पूर�वी 1 hour before 1 तास पूर�वी 1 day before 1 दिवस पूर�वी 2 days before 2 दिवस पूर�वी 1 week before 1 सप�ताह पूर�वी On start day (9:00 AM) स�र�वाती दिवसावर (9:00 �म.�म.) time(s) वेळा Enter a name please म�ळाने नाव द�या The name can not only contain whitespaces नाव केवळ अंतरांक न घेता Type: प�रकार: Description: विवरण: All Day: पूर�ण दिवस: Starts: स�र� होते: Ends: संपते: Remind Me: मला आठववा: Repeat: प�नरावृत�ती: End Repeat: प�नरावृत�ती संपवा: Calendar account: कॅलेंडर खाते: Calendar account कॅलेंडर खाते Type प�रकार Description विवरण All Day पूर�ण दिवस Time: वेळा: Time સમય Solar સૂર�ય Lunar ચંદ Starts શરૂ થાય છે Ends સમાપ�ત થાય છે Remind Me યાદ રાખો Repeat પ�નરાવર�તન Daily દૈનિક Weekdays સાંજના દિવસો Weekly સપ�તાહ Monthly સૌરાષ�ટ�ર Yearly વાર�ષિક End Repeat પ�નરાવર�તન સમાપ�ત કરો After પછી On પર Cancel button રદ કરો Save button બચાવો CScheduleOperation All occurrences of a repeating event must have the same all-day status. પ�નરાવર�તન થયેલ ઘટનાના બધા પ�રસંગોને �કસરખો પૂર�ણ દિવસનો સ�થિતિ હોવો જોઈ�. Do you want to change all occurrences? તમારે બધા પ�રસંગોને બદલવા છે કે કે નહીં? Cancel button રદ કરો Change All બધા બદલો You are changing the repeating rule of this event. તમે આ ઘટનાન�ં પ�નરાવર�તન નિયમ બદલી રહ�યા છો. You are deleting an event. તમે �ક ઘટના નાશ કરી રહ�યા છો. Are you sure you want to delete this event? તમારે આ ઘટનાનો નાશ કરવા છે કે કે નહીં? Delete button નાશ કરો Do you want to delete all occurrences of this event, or only the selected occurrence? તમારે આ ઘટનાના બધા પ�રસંગોને નાશ કરવા છે કે કે માત�ર પસંદ કરેલ પ�રસંગ? Delete All બધા નાશ કરો Delete Only This Event માત�ર આ ઘટનાનો નાશ કરો Do you want to delete this and all future occurrences of this event, or only the selected occurrence? તમારે આ ઘટનાનો આ પ�રસંગ અને તેના ભવિષ�યના બધા પ�રસંગોને નાશ કરવા છે કે કે માત�ર પસંદ કરેલ પ�રસંગ? Delete All Future Events બધા ભવિષ�યના ઘટનાનો નાશ કરો You are changing a repeating event. आप �क प�नरावृत�त घटना बदलत आहात. Do you want to change only this occurrence of the event, or all occurrences? आप घटनेची केवळ या घटना बदलू इच�छित आहात की, सर�व घटना? All सर�व Only This Event केवळ या घटना Do you want to change only this occurrence of the event, or this and all future occurrences? आप घटनेची केवळ या घटना बदलू इच�छित आहात की, या आणि सर�व भविष�यातील घटना? All Future Events सर�व भविष�यातील घटना You have selected a leap month, and will be reminded according to the rules of the lunar calendar. आपने �क लीप महिना निवडला आहे, आणि आपली याद�दाश�त चांदीच�या कलंदरच�या नियमांन�सार केली जाईल. OK button ओके CScheduleSearchDateItem Y य M म D ड CScheduleSearchItem Edit स�धारा Delete हटवा All Day सर�व दिवस CScheduleSearchView No search results कोणतेही शोध निकाल मिळाले नाही CScheduleView ALL DAY सर�व दिवस CSettingDialog import ICS file ईसी�स फाइल आयात करा Manual मन�अल 15 mins 15 मिनिट 30 mins 30 मिनिट 1 hour 1 तास 24 hours 24 तास Sync Now अद�यतन करा Last sync पिछले अद�यतन Please go to the Control Center to change system settings कृपया सिस�टम सेटिंग�स बदलण�यासाठी नियंत�रण केंद�र वर जा Monday सोमवार Sunday रविवार Use System Setting सिस�टम सेटिंग वापरा 12-hour clock 12 घडी घडी 24-hour clock 24 घडी घडी CTimeEdit (%1 mins) (%1 मिनिट) (%1 hour) (%1 तास) (%1 hours) (%1 तास) CTitleWidget Y य M म W व D ड Search events and festivals ઇवेंट आणि फेस�टिवल शोधा CWeekWindow Week सप�ताह Y य CYearScheduleView All Day पूर�ण दिवस No event कोणताही इवेंट नाही CYearWindow Y य CalendarWindow Calendar कॅलेंडर Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. कॅलेंडर तारखा पहायचा उपकरण आहे, आणि आपल�या आय�ष�यातील सर�व गोष�टी योजना करण�यासाठी �क चांगला दैनिक योजना तयार करणारा उपकरण आहे. Calendarmainwindow Calendar कॅलेंडर Manage मानेने Privacy Policy गोपनीयता नीती Syncing... सिंकिंग... Sync successful सिंकिंग यशस�वी Sync failed, please try later सिंकिंग अयशस�वी, कृपया नंतर प�न�हा प�रयत�न करा CenterWidget All Day पूर�ण दिवस DAccountDataBase Work काम Life जीवन Other अन�य DAlarmManager Close button बंद करा One day before start प�रारंभापूर�वी �क दिवस Remind me tomorrow मला आज आठववा Remind me later मला नंतर आठववा 15 mins later 15 मिनिट नंतर 1 hour later 1 तास नंतर 4 hours later 4 तास नंतर Tomorrow उद�या Schedule Reminder तारखेचा आठव बनवा %1 to %2 '%1 ते %2' Today आज DragInfoGraphicsView Edit स�धारा Delete हटवा New event नवीन घटना New Event नवीन घटना JobTypeListView export eksport import ICS file ICS फाइल आयपॅट You are deleting an event type. आपण �क घटना प�रकार हटवत आहात. All events under this type will be deleted and cannot be recovered. ह�या प�रकाराखालील सर�व घटना हटवली जाईल आणि प�न�हा मिळवता येणार नाही. Cancel button रद�द करा Delete button हटवा QObject Account settings खाते सेटिंग�ज Account खाते Select items to be synced सिंक करायची घटना निवडा Events घटना General settings सामान�य सेटिंग�ज Sync interval सिंक अंतराळ Manage calendar कॅलेंडर व�यवस�थापन Calendar account कॅलेंडर खाते Event types घटना प�रकार General सामान�य First day of week सप�ताहाचा पहिला दिवस Time वेळ Return Today Return आज Return Today Today Return Today आज ScheduleTypeEditDlg New event type नवीन घटना प�रकार Edit event type संपादित करा घटना प�रकार Import ICS file ICS फाइल आयात करा Name: नाव: Color: रंग: ICS File: ICS फाइल: Cancel button रद�द करा Save button सेव करा The name can not only contain whitespaces नाव केवळ बे�र अक�षरांमध�ये नसून अ�ॅक�षरांमध�ये असावे Enter a name please कृपया नाव नमूना Shortcut Help सहायता Delete event घटना डिलीट करा Copy कॉपी करा Cut कट करा Paste पेस�ट करा Delete डिलीट करा Select all सर�व निवडा SidebarCalendarWidget Y य M म TimeJumpDialog Go button जा UserloginWidget Sign In button लॉग इन करा Sign Out button लॉग आउट करा YearFrame Y य today Today Today आज linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ms.ts000066400000000000000000001324101523260663500265200ustar00rootroot00000000000000 AccountItem Sync successful Sesuai Network error Ralat rangkaian Server exception Pengecualian pelayan Storage full Penyimpanan penuh AccountManager Local account Akaun tempatan Event types Jenis acara CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Isnin Tuesday Selasa Wednesday Rabu Thursday Khamis Friday Jumaat Saturday Sabtu Sunday Ahad CDayWindow Y T M B D H Lunar Bulan CGraphicsView New Event Peristiwa Baharu CMonthScheduleNumItem %1 more %1 lagi CMonthView New event Peristiwa baharu New Event Peristiwa Baharu CMonthWindow Y T CMyScheduleView My Event Peristiwa Saya OK button OK Delete button Padam Edit button Sunting CPushButton New event type Jenis acara baru CScheduleDlg New Event Peristiwa Baharu Edit Event Sunting Peristiwa End time must be greater than start time Masa tamat mesti lebih besar dari masa mula OK button OK Never Tidak sesekali At time of event Semua tempoh peristiwa 15 minutes before 15 minit sebelum 30 minutes before 30 minit sebelum 1 hour before 1 jam sebelum 1 day before 1 hari sebelum 2 days before 2 hari sebelum 1 week before 1 minggu sebelum On start day (9:00 AM) Pada hari mula (9:00 AM) time(s) kali Enter a name please Masukkan nama sila The name can not only contain whitespaces Nama tidak boleh hanya mengandungi ruang Type: Jenis: Description: Keterangan: All Day: Sepanjang Hari: Starts: Mula: Ends: Tamat: Remind Me: Ingatkan Saya: Repeat: Ulang: End Repeat: Tamat Ulang: Calendar account: Akaun kalendar: Calendar account Akaun kalendar Type Jenis Description Keterangan All Day Sepanjang Hari Time: Masa: Time Masa Solar Matahari Lunar Bulan Starts Mula Ends Tamat Remind Me Ingatkan Saya Repeat Ulang Daily Harian Weekdays Hari Bekerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Tamat Ulang After Selepas On Pada Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan bagi peristiwa berulang mesti mempunyai status sepanjang-hari yang sama. Do you want to change all occurrences? Anda pasti mahu mengubah semua kemunculan? Cancel button Batal Change All Ubah Semua You are changing the repeating rule of this event. Anda mengubah peraturan berulang bagi peristiwa ini. You are deleting an event. Anda telah memadam satu peristiwa. Are you sure you want to delete this event? Anda pasti mahu memadam peristiwa ini? Delete button Padam Do you want to delete all occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini, atau hanya kemunculan terpilih? Delete All Padam Semua Delete Only This Event Hanya Padam Peristiwa Ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini dan akan datang, atau hanya kemunculan terpilih? Delete All Future Events Padam Semua Peristiwa Akan Datang You are changing a repeating event. Anda mengubah satu peristiwa berulang. Do you want to change only this occurrence of the event, or all occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau semua kemunculan? All Semua Only This Event Hanya Peristiwa Ini Do you want to change only this occurrence of the event, or this and all future occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau ini dan semua kemunculan masa hadapan? All Future Events Semua Peristiwa Masa Hadapan You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Anda telah memilih bulan lompat, dan akan diberi pengingat mengikut aturan kalendar bulan. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Padam All Day Sepanjang Hari CScheduleSearchView No search results Tiada keputusan gelintar CScheduleView ALL DAY SEPANJANG HARI CSettingDialog import ICS file mengimport fail ICS Manual Manual 15 mins 15 minit 30 mins 30 minit 1 hour 1 jam 24 hours 24 jam Sync Now Sync Kini Last sync Sync Terakhir Please go to the Control Center to change system settings Sila pergi ke Pusat Kawalan untuk mengubah tetapan sistem Monday Isnin Sunday Ahad Use System Setting Gunakan Tetapan Sistem 12-hour clock Jam 12-jam 24-hour clock Jam 24-jam CTimeEdit (%1 mins) (%1 minit) (%1 hour) (%1 jam) (%1 hours) (%1 jam) CTitleWidget Y T M B W M D H Search events and festivals Cari acara dan pertandingan CWeekWindow Week Minggu Y T CYearScheduleView All Day Sepanjang Hari No event Tiada peristiwa CYearWindow Y T CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendar ialah sebuah alat untuk melihat tarikh, dan juga satu perancang harian pintar yang dapat menjadualkan semua perkara dalam hidup ini. Calendarmainwindow Calendar Kalendar Manage Kelola Privacy Policy Dasar Persendirian Syncing... Menyegerak... Sync successful Sinkron kejayaan Sync failed, please try later Sinksron gagal, sila cuba kemudian CenterWidget All Day Sepanjang Hari DAccountDataBase Work Kerja Life Lapang Other Lain-lain DAlarmManager Close button Tutup One day before start Satu hari sebelum mula Remind me tomorrow Ingatkan saya esok hari Remind me later Ingatkan saya kemudian 15 mins later 15 minit kemudian 1 hour later 1 jam kemudian 4 hours later 4 jam kemudian Tomorrow Esok Schedule Reminder Peringatan Berjadual %1 to %2 %1 hingga %2 Today Hari ini DragInfoGraphicsView Edit Sunting Delete Padam New event Peristiwa baharu New Event Peristiwa Baharu JobTypeListView export ekspor import ICS file import fail ICS You are deleting an event type. Anda sedang memadam jenis acara. All events under this type will be deleted and cannot be recovered. Semua acara di bawah jenis ini akan dipadamkan dan tidak dapat dipulihkan. Cancel button Batal Delete button Padam QObject Account settings Pengaturan akaun Account Akaun Select items to be synced Pilih item yang akan disinkronkan Events Acara General settings Pengaturan umum Sync interval Jangka waktu sinkron Manage calendar Kelola kalendar Calendar account Akaun kalendar Event types Jenis acara General Am First day of week Hari pertama seminggu Time Masa Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Jenis acara baru Edit event type Sunting jenis acara Import ICS file Import fail ICS Name: Nama: Color: Warna: ICS File: Fail ICS: Cancel button Batal Save button Simpan The name can not only contain whitespaces Nama ini tidak boleh hanya mengandungi ruang kosong Enter a name please Masukkan nama sila Shortcut Help Bantuan Delete event Padam peristiwa Copy Salin Cut Potong Paste Tampal Delete Padam Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button Pergi UserloginWidget Sign In button Daftar Masuk Sign Out button Daftar Keluar YearFrame Y T today Today Today Hari ini linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_my.ts000066400000000000000000001503371523260663500265360ustar00rootroot00000000000000 AccountItem Sync successful �ျိန်ညှိမှုအောင်မြင်ပါသည် Network error အက်�မ်းကွန်းအမှား Server exception ဆိုက်ရှိ အမှား Storage full သိုလျော်မှု ပြည့်နှင်းပါသည် AccountManager Local account ဒိုင်းအက်ကွန်း Event types အာ�ာရှိ အမျိုးအစားများ CColorPickerWidget Color အိမ်ရောင် Cancel button အိမ်ပြန် Save button သိမ်းဆည်း CDayMonthView Monday �နင်္ဂနွေ Tuesday �နင်္လာ Wednesday သောက္က�် Thursday ကြာသပ�ေး Friday လေးနှင်္ဂနွေ Saturday စနေ Sunday �နင်္ဂနွေ CDayWindow Y �နင်္ဂနွေ M နွေရာသီ D နေ့ Lunar လောင်းရာသီ CGraphicsView New Event အသစ်ဖြစ်ပွားမှု CMonthScheduleNumItem %1 more %1 ပိုပြီး CMonthView New event အသစ်ဖြစ်ပွားမှု New Event အသစ်ဖြစ်ပွားမှု CMonthWindow Y �နင်္ဂနွေ CMyScheduleView My Event ကိုယ့်အသစ်ဖြစ်ပွားမှု OK button အောင်မြင်ပါသည် Delete button ဖျက်ပါ Edit button ပြင်ဆင်ပါ CPushButton New event type အသစ်ဖြစ်ပွားမှု အမျိုးအစား CScheduleDlg New Event เหตุ�ารณ์ใหม่ Edit Event ��้ไขเหตุ�ารณ์ End time must be greater than start time เวลาสิ้นสุดต้องมา��ว่าเวลาเริ่มต้น OK button ต�ลง Never 从� At time of event ขณะเ�ิดเหตุ�ารณ์ 15 minutes before 15 นาที�่อน 30 minutes before 30 นาที�่อน 1 hour before 1 ชั่วโมง�่อน 1 day before 1 วัน�่อน 2 days before 2 วัน�่ำ 1 week before 1 สัปดาห์�่อน On start day (9:00 AM) วันเริ่มต้น (เวลา 09:00) time(s) เวลา(ๆ) Enter a name please �รุณาป้อนชื่อ The name can not only contain whitespaces ชื่อนี้ไม่สามารถประ�อบด้วยช่องว่างได้เพียงอย่างเดียว Type: ประเภท: Description: คำอธิบาย: All Day: ตลอดวัน: Starts: เริ่มต้น: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ซ้ำ: End Repeat: หยุดซ้ำ: Calendar account: บั�ชีป�ิทิน: Calendar account บั�ชีป�ิทิน Type ประเภท Description คำอธิบาย All Day ตลอดวัน Time: เวลา: Time အ�ျိန် Solar စီးရီးယား Lunar လေးရီးယား Starts စ�င်သည့်အ�ျိန် Ends အဆုံးသ�်သည့်အ�ျိန် Remind Me အရှိန်အားဖြင့် အမှ�်ပြုပါ Repeat လုပ်ဆောင်�ျက်ကို ကူးယူပါ Daily �စ်နေ့လျော့နည်း Weekdays ပ�်စ်နေ့များ Weekly �စ်ပ�်လျော့နည်း Monthly �စ်လလျော့နည်း Yearly �စ်နှစ်လျော့နည်း End Repeat လုပ်ဆောင်�ျက်ကို အဆုံးသ�်ပါ After အပြီး�ွင် On ပေါ်�ွင် Cancel button ရပ်ပါ Save button သိမ်းပါ CScheduleOperation All occurrences of a repeating event must have the same all-day status. လုပ်ဆောင်�ျက်ကို ကူးယူသည့် အ�ျိန်အားလုံးသည် အမှ�်ပြု�ျက်များအ�ွက် အဆုံးအဖြင်နှင့် �စ်နေ့လုံး အ�ျိန်အားလုံး �ူညီသင့်သည်� Do you want to change all occurrences? သင်သည် အ�ျိန်အားလုံးကို ပြောင်းလဲလိုသလား� Cancel button ရပ်ပါ Change All အားလုံးကို ပြောင်းပါ You are changing the repeating rule of this event. သင်သည် အ�ျိန်အားလုံးကို ပြောင်းလဲလိုသလား� You are deleting an event. သင်သည် အ�ျိန်အားလုံးကို ပြောင်းလဲလိုသလား� Are you sure you want to delete this event? သင်သည် အ�ျိန်အားလုံးကို ပြောင်းလဲလိုသလား� Delete button ဖျက်ပါ Do you want to delete all occurrences of this event, or only the selected occurrence? သင်သည် ဤအ�ျိန်အားလုံးကို ဖျက်လိုသလား သို့မဟု�် ရွေးထားသည့် အ�ျိန်ကို ဖျက်လိုသလား� Delete All အားလုံးကို ဖျက်ပါ Delete Only This Event အ�ျိန်ကို ဖျက်ပါ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? သင်သည် ဤအ�ျိန်နှင့် အနောက်ပိုင်း အ�ျိန်အားလုံးကို ဖျက်လိုသလား သို့မဟု�် ရွေးထားသည့် အ�ျိန်ကို ဖျက်လိုသလား� Delete All Future Events အနောက်ပိုင်း အ�ျိန်အားလုံးကို ဖျက်ပါ You are changing a repeating event. သင်သည် ကြိမ်ပွဲ�စ်�ုကို ပြောင်းလဲနေပါသည်� Do you want to change only this occurrence of the event, or all occurrences? အားလုံးကို ပြောင်းလဲမည်နည်း သို့မဟု�် အားလုံးကို ပြောင်းလဲမည်နည်း� All အားလုံး Only This Event အဆိုပါအားလုံးကို သာ ပြောင်းလဲမည်နည်း Do you want to change only this occurrence of the event, or this and all future occurrences? အားလုံးကို ပြောင်းလဲမည်နည်း သို့မဟု�် အားလုံးကို ပြောင်းလဲမည်နည်း� All Future Events အနောင်းအမှန် ကြိမ်ပွဲအားလုံး You have selected a leap month, and will be reminded according to the rules of the lunar calendar. သင်သည် ကြိမ်ပွဲ�စ်�ုကို ပြောင်းလဲနေပါသည်� လူမှုနှစ်ပေါ်�ွင် အ�ြေ�ံ� အသိအမှ�်ပြုမည်ဖြစ်သည်� OK button အကောင်းဆုံး CScheduleSearchDateItem Y �စ်�ု M လ D ရက် CScheduleSearchItem Edit ပြင်ဆင် Delete ဖျက်ပါ All Day အားလုံးကို ကြိမ်ပွဲ CScheduleSearchView No search results ရှာရှားရှားမှန်းမထိ CScheduleView ALL DAY အားလုံးကို ကြိမ်ပွဲ CSettingDialog import ICS file ICS ဖိုင်ကို �င်လိုက်ပါ Manual လက်လီ 15 mins �� မိနစ် 30 mins �� မိနစ် 1 hour �နာရီ 24 hours ��နာရီ Sync Now ယ�ုအ�ျိန်�ွင် အ�ြေအနေအ�ိုင်း အညီအညွ�် လုပ်ဆောင်ပါ Last sync နောက်ဆုံး အညီအညွ�် Please go to the Control Center to change system settings စနစ်�ျိန်ကို ပြောင်းလဲရန် Control Center သို့ သွားပါ� Monday နေ့�ွင် အကြိမ်ပွဲ Sunday နေ့�ွင် အကြိမ်ပွဲ Use System Setting စနစ်�ျိန်ကို အသုံးပြုပါ 12-hour clock ��နာရီ အသုံးပြုမည် 24-hour clock ��နာရီ အသုံးပြုမည် CTimeEdit (%1 mins) (%1 นาที) (%1 hour) (%1 ชั่วโมง) (%1 hours) (%1 ชั่วโมง) CTitleWidget Y จ M เดือน W สัปดาห์ D วัน Search events and festivals ค้นหาเหตุ�ารณ์�ละงานเทศ�าล CWeekWindow Week สัปดาห์ Y จ CYearScheduleView All Day ตลอดทั้งวัน No event ไม่มีเหตุ�ารณ์ CYearWindow Y จ CalendarWindow Calendar ป�ิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ป�ิทินเป็นเครื่องมือสำหรับดูวันที่ �ละยังเป็นผู้วาง�ผนรายวันที่ชา�ฉลาดใน�ารจัดตารางเวลาทุ�สิ่งในชีวิต Calendarmainwindow Calendar ป�ิทิน Manage จัด�าร Privacy Policy นโยบายความเป็นส่วนตัว Syncing... �ำลังซิงค์... Sync successful ซิงค์สำเร็จ Sync failed, please try later ซิงค์ล้มเหลว โปรดลองใหม่ในภายหลัง CenterWidget All Day ตลอดทั้งวัน DAccountDataBase Work ทำงาน Life ชีวิต Other อื่นๆ DAlarmManager Close button ปิด One day before start หนึ่งวัน�่อนเริ่มต้น Remind me tomorrow เตือนฉันพรุ่งนี้ Remind me later เตือนฉันในภายหลัง 15 mins later 15 นาทีต่อมา 1 hour later 1 နာရီ နောက်�စ်ရက် 4 hours later 4 နာရီ နောက်�စ်ရက် Tomorrow နောက်�စ်ရက် Schedule Reminder အစီအစဉ် အရေးပေး�ျက် %1 to %2 '%1 မှ %2' Today ယနေ့ DragInfoGraphicsView Edit ပြင် Delete ဖျက် New event အသစ် အ�ြေအနေ New Event �င်းဖို့အ�ွက် အသစ် အ�ြေအနေ JobTypeListView export အထွက်ထား import ICS file ICS ဖိုင်ကို အမှန်ကန်ကို �င်လိုက်ပါ You are deleting an event type. သင်သည် အ�ြေအနေ အမျိုးအစား �စ်မျိုးကို ဖျက်နေပါသည်� All events under this type will be deleted and cannot be recovered. အ�ြေအနေ အမျိုးအစား အောက်�ွင် ရှိသော အ�ြေအနေ အားလုံးသည် ဖျက်ပြီး ပြန်လည်ရယူရန် မဖြစ်နိုင်ပါ Cancel button ရပ်ပါ Delete button ဖျက်ပါ QObject Account settings အကောင့် စာရင်းသွင်း�ျက် Account အကောင့် Select items to be synced စာရင်းသွင်းရန် အကောင့် အမျိုးအစားကို ရွေးပါ Events အ�ြေအနေများ General settings အ�ြေအနေ စွမ်းဆောင်ရည် Sync interval စာရင်းသွင်း�ျက် အကြားအကား Manage calendar အကောင့် စာရင်းသွင်း�ျက် Calendar account အကောင့် စာရင်းသွင်း�ျက် Event types အ�ြေအနေ အမျိုးအစားများ General အ�ြေအနေ စွမ်းဆောင်ရည် First day of week ပ�်စုံ�ွင် ပထမ နေ့ Time အ�ျိန် Return Today Return ယနေ့ Return Today Today Return Today ယနေ့ ScheduleTypeEditDlg New event type အ�ြောက်အ�ြားအက်ေစ်အမျိုးအစား Edit event type အက်ေစ်အမျိုးအစားပြင်ဆင်ရေး Import ICS file ICS ဖိုင်ကိုအက်ေစ်အမျိုးအစားသို့�င်ရောက်ရေး Name: အမည်: Color: အောင်းအဆိုင်: ICS File: ICS ဖိုင်: Cancel button အပ်ပေး�ြင်း Save button သိမ်းဆည်း�ြင်း The name can not only contain whitespaces အမည်သည် အိုင်းအိုင်းများသာ ပါသွားနိုင်သည် Enter a name please အမည်ကိုထည့်ပေးပါ Shortcut Help ကူညီပေး�ြင်း Delete event အက်ေစ်ကိုဖျက်ရေး Copy အမှ�်အသားပြု�ြင်း Cut ဖြု�်�ျ�ြင်း Paste ထည့်သွင်း�ြင်း Delete ဖျက်ရေး Select all အားလုံးကိုရွေး�ျယ်�ြင်း SidebarCalendarWidget Y နှစ် M လ TimeJumpDialog Go button သွားရေး UserloginWidget Sign In button �င်ရောက်�ြင်း Sign Out button ထွက်�ွာ�ြင်း YearFrame Y နှစ် today Today Today ယနေ့ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_nb.ts000066400000000000000000001322661523260663500265110ustar00rootroot00000000000000 AccountItem Sync successful Synkning vellykket Network error Nettverkfeil Server exception Serverfeil Storage full Lagring full AccountManager Local account Lokalt konto Event types Hendelses typer CColorPickerWidget Color Farge Cancel button Avbryt Save button Lagre CDayMonthView Monday Mandag Tuesday Tirsdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lørdag Sunday Søndag CDayWindow Y Y M M D D Lunar Måne CGraphicsView New Event Ny hendelse CMonthScheduleNumItem %1 more %1 flere CMonthView New event Ny hendelse New Event Ny hendelse CMonthWindow Y Y CMyScheduleView My Event Min hendelse OK button OK Delete button Slett Edit button Rediger CPushButton New event type Ny hendelses type CScheduleDlg New Event Nytt arrangement Edit Event Rediger arrangement End time must be greater than start time Sluttid må være større enn starttid OK button OK Never Aldri At time of event Ved tidspunkt for arrangement 15 minutes before 15 minutter før 30 minutes before 30 minutter før 1 hour before 1 time før 1 day before 1 dag før 2 days before 2 dager før 1 week before 1 uke før On start day (9:00 AM) På startdag (09:00) time(s) tid(e) Enter a name please Skriv inn et navn venligst The name can not only contain whitespaces Navnet kan ikke bare bestå av mellomrom Type: Type: Description: Beskrivelse: All Day: Hele dagen: Starts: Starts: Ends: Slutter: Remind Me: Påminn meg: Repeat: Gjenta: End Repeat: Slutt gjenta: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Type Description Beskrivelse All Day Hele dagen Time: Tid: Time Tid Solar Sol Lunar Måne Starts Starts Ends Slutter Remind Me Remind Me Repeat Gjenta Daily Daglig Weekdays Ukedagene Weekly Ukentlig Monthly Månedlig Yearly Årlig End Repeat Slutt å gjenta After Etter On På Cancel button Avbryt Save button Lagre CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle forekomster av en gjentakende hendelse må ha samme hele-dagen-status. Do you want to change all occurrences? Vil du endre alle forekomster? Cancel button Avbryt Change All Endre alle You are changing the repeating rule of this event. Du endrer gentakende regelen for denne hendelsen. You are deleting an event. Du sletter en hendelse. Are you sure you want to delete this event? Er du sikker på at du vil slette denne hendelsen? Delete button Slett Do you want to delete all occurrences of this event, or only the selected occurrence? Vil du slete all forekomster av denne hendelsen, eller bare den valgte? Delete All Slett alle Delete Only This Event Slett bare denne hendelsen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vil du slette denne og alle fremtidige forekomster av denne hendelsen, eller bare den valgte? Delete All Future Events Slett alle fremtidige hendelser You are changing a repeating event. Du endrer en gjentagende hendelse. Do you want to change only this occurrence of the event, or all occurrences? Vil du endre kun denne forekomsten av hendelsen, eller alle forekomster? All Alle Only This Event Kun denne hendelsen Do you want to change only this occurrence of the event, or this and all future occurrences? Vil du endre kun denne forekomsten av hendelsen, eller denne og alle fremtidige forekomster? All Future Events Alle fremtidige hendelser You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Du har valgt en skuddårs måned, og vil bli påminnet etter reglene for den måne kalenderen. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Rediger Delete Slett All Day Hele dagen CScheduleSearchView No search results Ingen søkeresultater CScheduleView ALL DAY HELE DAGEN CSettingDialog import ICS file importer ICS-fil Manual Manuell 15 mins 15 minutter 30 mins 30 minutter 1 hour 1 time 24 hours 24 timer Sync Now Synk nå Last sync Siste synk Please go to the Control Center to change system settings Vennligst gå til Kontrollsentrum for å endre systeminnstillinger Monday Mandag Sunday Søndag Use System Setting Bruk systeminnstilling 12-hour clock 12-timers klokke 24-hour clock 24-timers klokke CTimeEdit (%1 mins) (%1 minutter) (%1 hour) (%1 time) (%1 hours) (%1 timer) CTitleWidget Y Y M M W W D D Search events and festivals Søk etter arrangementer og festspill CWeekWindow Week Uke Y Y CYearScheduleView All Day Hele dagen No event Ingen arrangement CYearWindow Y Y CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender er et verktøy for å se datoer, og også en smart daglig planlegger for å planlegge alt i livet. Calendarmainwindow Calendar Kalender Manage Administrer Privacy Policy Personvernspolicy Syncing... Synkroniserer... Sync successful Synkronisering vellykket Sync failed, please try later Synkronisering feilet, prøv igjen senere CenterWidget All Day Hele dagen DAccountDataBase Work Arbeid Life Liv Other Andre DAlarmManager Close button Lukk One day before start En dag før start Remind me tomorrow Påminn meg i morgen Remind me later Påminn meg senere 15 mins later 15 minutter senere 1 hour later En time senere 4 hours later Fire timer senere Tomorrow I morgen Schedule Reminder Planlegg påminnelse %1 to %2 '%1 til %2' Today I dag DragInfoGraphicsView Edit Rediger Delete Slett New event Nytt arrangement New Event Nytt Arrangement JobTypeListView export eksport import ICS file importer ICS-fil You are deleting an event type. Du sletter en type arrangement. All events under this type will be deleted and cannot be recovered. Alle arrangementer under denne typen vil bli slettet og kan ikke gjenopprettes. Cancel button Avbryt Delete button Slett QObject Account settings Kontoinnstillinger Account Konto Select items to be synced Velg elementer som skal synkroniseres Events Arrangementer General settings Generelle innstillinger Sync interval Synkroniseringsintervall Manage calendar Administrer kalender Calendar account Kalenderkonto Event types Arrangementstype General Generelt First day of week Første dag i uken Time Tid Return Today Return I dag Return Today Today Return Today I dag ScheduleTypeEditDlg New event type Ny hendelses type Edit event type Rediger hendelses type Import ICS file Importere ICS-fil Name: Navn: Color: Farge: ICS File: ICS-fil: Cancel button Avbryt Save button Lagre The name can not only contain whitespaces Navnet kan ikke bare inneholde mellomrom Enter a name please Skriv inn et navn venligst Shortcut Help Hjelp Delete event Slett hendelse Copy Kopier Cut Klipp ut Paste Lim inn Delete Slett Select all Velg alt SidebarCalendarWidget Y M M Måned TimeJumpDialog Go button Gå UserloginWidget Sign In button Logg inn Sign Out button Logg ut YearFrame Y År today Today Today I dag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ne.ts000066400000000000000000001440771523260663500265170ustar00rootroot00000000000000 AccountItem Sync successful सिङ�क सफल Network error नेटवर�क त�र�टि Server exception सर�भर अपवाद Storage full स�टोरेज भरि�को AccountManager Local account स�थानीय खाता Event types आवेदन प�रकार CColorPickerWidget Color रंग Cancel button रद�द गर�न�होस� Save button सेभ गर�न�होस� CDayMonthView Monday सोमवार Tuesday मंगलवार Wednesday ब�धवार Thursday ग�र�वार Friday श�क�रवार Saturday शनिवार Sunday रविवार CDayWindow Y य M म D ड Lunar संसारी CGraphicsView New Event न आवेदन CMonthScheduleNumItem %1 more %1 बढी CMonthView New event न आवेदन New Event न आवेदन CMonthWindow Y य CMyScheduleView My Event म आवेदन OK button ओके Delete button हटाउन�होस� Edit button संपादन गर�न�होस� CPushButton New event type न आवेदन प�रकार CScheduleDlg New Event नया घटना Edit Event घटना संपादन गर�न� End time must be greater than start time समापन समय स�र� गर�न� भन�दा बढी ह�न� पर�छ OK button ओक Never कदापि At time of event घटनाको समयमा 15 minutes before 15 मिनेट अगाडि 30 minutes before 30 मिनेट अगाडि 1 hour before 1 घण�टा अगाडि 1 day before 1 दिन अगाडि 2 days before 2 दिन अगाडि 1 week before 1 साप�ताहिक अगाडि On start day (9:00 AM) स�र� गर�ने दिनमा (9:00 AM) time(s) समযां (समय) Enter a name please कृपया �उटा नाम दिन�होस� The name can not only contain whitespaces नाममा धेरै खाली स�थान ह�न सक�दैन Type: प�रकार: Description: विवरण: All Day: सम�पूर�ण दिन: Starts: स�र� ह�न�छ: Ends: समापन ह�न�छ: Remind Me: मलाई याद गर�न�होस�: Repeat: प�नरावृत�ति: End Repeat: प�नरावृत�ति समापन: Calendar account: कैलेंडर खाता: Calendar account कैलेंडर खाता Type प�रकार Description विवरण All Day सम�पूर�ण दिन Time: समय: Time समय Solar सौर Lunar चा�दी Starts श�रू ह�न�छ Ends अंत ह�न�छ Remind Me मलाई याद गराउन� Repeat प�नरावृत�ति Daily हरेक दिन Weekdays हरेक साप�ताहिक दिन Weekly हरेक साप�ताहिक Monthly हरेक महिना Yearly हरेक वर�ष End Repeat प�नरावृत�ति अंत After अघि On पर Cancel button रद�द गर�न� Save button सेभ गर�न� CScheduleOperation All occurrences of a repeating event must have the same all-day status. हरेक प�नरावृत�ति घटनाका सभी घटनाहरू �उटै सम�पूर�ण दिन स�थिति राख�न� आवश�यक छ। Do you want to change all occurrences? सबै घटनाहरू बदल�न चाहान� छ? Cancel button रद�द गर�न� Change All सबै बदल�न� You are changing the repeating rule of this event. तपाईं यस घटनाको प�नरावृत�ति नियम बदल�दै छ। You are deleting an event. तपाईं �उटी घटना मिट�दै छ। Are you sure you want to delete this event? तपाईं यस घटनाको निश�चित रूपमा हटाउन चाहान� छ? Delete button हटाउन� Do you want to delete all occurrences of this event, or only the selected occurrence? तपाईं यस घटनाका सबै घटनाहरू हटाउन चाहन� छ वा केवल चयन गरि�को घटना? Delete All सबै हटाउन� Delete Only This Event केवल यस घटना हटाउन� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? तपाईं यस घटना र भविष�यमा सबै घटनाहरू हटाउन चाहन� छ वा केवल चयन गरि�को घटना? Delete All Future Events सबै भविष�यमा घटनाहरू हटाउन� You are changing a repeating event. तपाई� �उटा दोहोर�ने घटनामा परिवर�तन गरिरहिछन�। Do you want to change only this occurrence of the event, or all occurrences? तपाई� घटनाको �कल घटनामा परिवर�तन गर�न वा सबै घटनामा परिवर�तन गर�न चाहान छन�? All सबै Only This Event केवल यो घटना Do you want to change only this occurrence of the event, or this and all future occurrences? तपाई� घटनाको �कल घटनामा परिवर�तन गर�न वा यो र सबै भविष�यका घटनामा परिवर�तन गर�न चाहान छन�? All Future Events सबै भविष�यका घटनाहरू You have selected a leap month, and will be reminded according to the rules of the lunar calendar. तपाई� �क छठ महिनाको छनोट गरेका छन�, र चांदीको आवर�तन नियम अन�सार याद गरिनेछ। OK button ठीक CScheduleSearchDateItem Y य M म D द CScheduleSearchItem Edit संपादन गर�न�होस� Delete हटाउन�होस� All Day सम�पूर�ण दिन CScheduleSearchView No search results क�नै खोज फलाउ�दैन CScheduleView ALL DAY सम�पूर�ण दिन CSettingDialog import ICS file ICS फाइल आयात गर�न�होस� Manual हात बाट 15 mins 15 मिनेट 30 mins 30 मिनेट 1 hour 1 घण�टा 24 hours 24 घण�टा Sync Now अब सिङ�क गर�न�होस� Last sync गतश�रृंखला सिङ�क Please go to the Control Center to change system settings कृपया सिस�टम सेटिङ�ग बदल�नको लागि कन�ट�रोल सेन�टर मा जान�होस� Monday सोमवार Sunday रविवार Use System Setting सिस�टम सेटिङ�ग प�रयोग गर�न�होस� 12-hour clock 12 घण�टा घडी 24-hour clock 24 घण�टा घडी CTimeEdit (%1 mins) (%1 मिनेट) (%1 hour) (%1 घण�टा) (%1 hours) (%1 घण�टा) CTitleWidget Y य M म W व D द Search events and festivals आइत�याक र त�योग खोज�न�होस� CWeekWindow Week सप�ताह Y 'य' CYearScheduleView All Day पूर�ण दिवस No event क�नै आइत�याक CYearWindow Y 'य' CalendarWindow Calendar कैलेंडर Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. कैलेंडर दिनहरू देख�नको उपकरण हो, र जीवनमा सबै विषयहरू आयोजना गर�नका लागि �उटै रो दिनको योजना बनाउने �क ब�द�धिमान उपकरण पनि हो। Calendarmainwindow Calendar कैलेंडर Manage बर�बाद गर�न� Privacy Policy गोपनीयता नीति Syncing... सिङ�किंग... Sync successful सिङ�किंग सफल Sync failed, please try later सिङ�किंग असफल, कृपया पछी फर�काउन�होस� CenterWidget All Day पूर�ण दिवस DAccountDataBase Work कार�य Life जीवन Other अन�य DAlarmManager Close button बन�द गर�न� One day before start प�रारम�भ अगाडि �क दिन Remind me tomorrow म तपाईंलाई अगाडि ब��ाउ�दछ Remind me later म तपाईंलाई बाद ब��ाउ�दछ 15 mins later 15 मिनेट बाद 1 hour later 1 घण�टा बाहिर 4 hours later 4 घण�टा बाहिर Tomorrow अगलो दिन Schedule Reminder योजना यादगारी %1 to %2 '%1 से %2' Today आज DragInfoGraphicsView Edit संपादित करो Delete हटाउ New event नयो घटना New Event नयो घटना JobTypeListView export निर�यात import ICS file ICS फाइल आयात You are deleting an event type. तपाईं �उटा घटना प�रकार हटाउ रहिछान All events under this type will be deleted and cannot be recovered. यस प�रकार अन�तर�गत सबै घटनाहरू हटाइ�को ह�नेछ र प�नः प�राप�त गर�न सकिनेछ छैन Cancel button रद�द गर�न� Delete button हटाउन� QObject Account settings खाता सेटिंग�स Account खाता Select items to be synced सिन�क गरिने आइटम चयन गर�न� Events घटनाहरू General settings सामान�य सेटिंग�स Sync interval सिन�क अन�तराल Manage calendar कैलेंडर संचालन Calendar account कैलेंडर खाता Event types घटना प�रकारहरू General सामान�य First day of week सप�ताहको पहिलो दिन Time समय Return Today Return आज Return Today Today Return Today आज ScheduleTypeEditDlg New event type नया घटना प�रकार Edit event type घटना प�रकार संपादन गर�न�होस Import ICS file ICS फाइल आयात गर�न�होस Name: नाम: Color: रंग: ICS File: ICS फाइल: Cancel button बर�बाद गर�न�होस Save button सेभ गर�न�होस The name can not only contain whitespaces नाम फरक रंग वा अक�षरहरू बर�बाद गर�न�होस Enter a name please कृपया �उटा नाम लेख�न�होस Shortcut Help सहायता Delete event घटना हटाउन�होस Copy काट�न�होस Cut काट�न�होस Paste पेस�ट गर�न�होस Delete हटाउन�होस Select all सबै छान�न�होस SidebarCalendarWidget Y वर�ष M महिना TimeJumpDialog Go button जान�होस UserloginWidget Sign In button लगिन Sign Out button लग आउट YearFrame Y वर�ष today Today Today आज linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_nl.ts000066400000000000000000001325641523260663500265240ustar00rootroot00000000000000 AccountItem Sync successful Sychroniseren voltooid Network error Netwerkfout Server exception Serveruitzondering Storage full Geen vrije schijfruimte AccountManager Local account Lokaal account Event types Soorten afspraken CColorPickerWidget Color Kleur Cancel button Annuleren Save button Opslaan CDayMonthView Monday Maandag Tuesday Dinsdag Wednesday Woensdag Thursday Donderdag Friday Vrijdag Saturday Zaterdag Sunday Zondag CDayWindow Y J M M D D Lunar Maan CGraphicsView New Event Nieuwe afspraak CMonthScheduleNumItem %1 more Nog %1 andere CMonthView New event Nieuwe afspraak New Event Nieuwe afspraak CMonthWindow Y J CMyScheduleView My Event Mijn afspraak OK button Oké Delete button Verwijderen Edit button Bewerken CPushButton New event type Nieuw soort afspraak CScheduleDlg New Event Nieuwe afspraak Edit Event Afspraak bewerken End time must be greater than start time De eindtijd moet later zijn dan de begintijd OK button Oké Never Nooit At time of event Bij aanvang 15 minutes before 15 minuten van tevoren 30 minutes before 30 minuten van tevoren 1 hour before 1 uur van tevoren 1 day before 1 dag van tevoren 2 days before 2 dagen van tevoren 1 week before 1 week van tevoren On start day (9:00 AM) Op de dag van de afspraak (9:00 AM) time(s) keer Enter a name please Voer een naam in The name can not only contain whitespaces De naam mag niet alleen uit spaties bestaan Type: Soort: Description: Omschrijving: All Day: Hele dag: Starts: Begint om: Ends: Eindigt om: Remind Me: Herinneren: Repeat: Herhalen: End Repeat: Herhaling eindigt op: Calendar account: Agenda-account: Calendar account Agenda-account Type Soort Description Omschrijving All Day Hele dag Time: Tijdstip: Time Tijdstip Solar Zon Lunar Maan Starts Begint om Ends Eindigt om Remind Me Herinneren Repeat Herhalen Daily Dagelijks Weekdays Weekdagen Weekly Wekelijks Monthly Maandelijks Yearly Jaarlijks End Repeat Herhaling eindigt op After Na On Op Cancel button Annuleren Save button Opslaan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle afspraken in de reeks moeten voorzien zijn van de status ‘hele dag’. Do you want to change all occurrences? Wil je alle afspraken in de reeks bewerken? Cancel button Annuleren Change All Reeks bewerken You are changing the repeating rule of this event. Je past de herhaalinstellingen van deze afspraak aan. You are deleting an event. Je staat op het punt een afspraak te verwijderen. Are you sure you want to delete this event? Weet je zeker dat je deze afspraak wilt verwijderen? Delete button Verwijderen Do you want to delete all occurrences of this event, or only the selected occurrence? Wil je alle afspraken in de reeks verwijderen of enkel deze? Delete All Reeks verwijderen Delete Only This Event Deze afspraak verwijderen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Wil je deze en toekomstige afspraken verwijderen of enkel de deze? Delete All Future Events Toekomstige afspraken verwijderen You are changing a repeating event. Je staat op het punt een reeks aan te passen. Do you want to change only this occurrence of the event, or all occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Reeks Only This Event Deze afspraak Do you want to change only this occurrence of the event, or this and all future occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Future Events Toekomstige afspraken You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Je hebt een schrikkelmaand gekozen. De herinnering wordt op basis van de maankalender getoond. OK button Oké CScheduleSearchDateItem Y J M M D D CScheduleSearchItem Edit Bewerken Delete Verwijderen All Day Hele dag CScheduleSearchView No search results Geen zoekresultaten CScheduleView ALL DAY HELE DAG CSettingDialog import ICS file ICS-bestand importeren Manual Handmatig 15 mins 15 min. 30 mins 30 min. 1 hour 1 uur 24 hours 24 uur Sync Now Nu synchroniseren Last sync Recentste synchronisatie Please go to the Control Center to change system settings Ga naar het Control Center om systeeminstellingen te wijzigen Monday maandag Sunday zondag Use System Setting Systeeminstelling gebruiken 12-hour clock 12-uursklok 24-hour clock 24-uursklok CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 uur) (%1 hours) (%1 uur) CTitleWidget Y J M M W W D D Search events and festivals Zoeken naar afspraken en evenementen CWeekWindow Week Week Y J CYearScheduleView All Day Hele dag No event Geen afspraak CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Met Kalender kun je je afspraken en planning beheren, zowel werk als privé. Calendarmainwindow Calendar Kalender Manage Instellingen Privacy Policy Privacybeleid Syncing... Bezig met synchroniseren… Sync successful Sychroniseren voltooid Sync failed, please try later Synchroniseren mislukt - probeer het later opnieuw CenterWidget All Day Hele dag DAccountDataBase Work Werk Life Privé Other Overig DAlarmManager Close button Sluiten One day before start Eén dag van tevoren Remind me tomorrow Herinner me morgen Remind me later Herinner me later 15 mins later 15 min. later 1 hour later 1 uur later 4 hours later 4 uur later Tomorrow Morgen Schedule Reminder Herinnering inplannen %1 to %2 van %1 tot %2 Today Vandaag DragInfoGraphicsView Edit Aanpassen Delete Verwijderen New event Nieuwe afspraak New Event Nieuwe afspraak JobTypeListView export exporteren import ICS file ICS-bestand importeren You are deleting an event type. Je staat op het punt om een afspraaktype te verwijderen. All events under this type will be deleted and cannot be recovered. Alle bijbehorende afspraken worden verwijderd en kunnen niet worden hersteld. Cancel button Annuleren Delete button Verwijderen QObject Account settings Accountinstellingen Account Account Select items to be synced Selecteer de te synchroniseren items Events Afspraken General settings Algemene instellingen Sync interval Synchroniseren, elke Manage calendar Agenda beheren Calendar account Agenda-account Event types Soorten afspraken General Algemeen First day of week Eerste dag van de week Time Tijdsklok Return Today Return Vandaag Return Today Today Return Today Vandaag ScheduleTypeEditDlg New event type Nieuw soort afspraak Edit event type Afspraaktype bewerken Import ICS file ICS-bestand importeren Name: Naam: Color: Kleur: ICS File: ICS-bestand: Cancel button Annuleren Save button Opslaan The name can not only contain whitespaces De naam mag niet alleen bestaan uit spaties Enter a name please Voer een naam in Shortcut Help Hulp Delete event Afspraak verwijderen Copy Kopiëren Cut Knippen Paste Plakken Delete Verwijderen Select all Alles selecteren SidebarCalendarWidget Y J M M TimeJumpDialog Go button Ga UserloginWidget Sign In button Inloggen Sign Out button Uitloggen YearFrame Y J today Today Today Vandaag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_pam.ts000066400000000000000000001334001523260663500266560ustar00rootroot00000000000000 AccountItem Sync successful Nag-sync na Network error Error sa network Server exception Exception sa server Storage full Storage nangunguna AccountManager Local account Local account Event types Mga uri ng event CColorPickerWidget Color Kolor Cancel button Iwan Save button I-save CDayMonthView Monday Lunes Tuesday Martes Wednesday Miyerkules Thursday Huwebes Friday Biyernes Saturday Sabado Sunday Pangalawang araw CDayWindow Y Y M M D D Lunar Lunary CGraphicsView New Event Bagong Event CMonthScheduleNumItem %1 more %1 pa CMonthView New event Bagong event New Event Bagong Event CMonthWindow Y Y CMyScheduleView My Event Aking Event OK button OK Delete button I-delete Edit button I-edit CPushButton New event type Bagong uri ng event CScheduleDlg New Event Bag-o nga pangyayari Edit Event Bag-o nga pangayari End time must be greater than start time Dapat ang oras ng pagtatapos ay mas malaki kaysa oras ng pagmamarka OK button OK Never Sakop At time of event Sa oras ng pangyayari 15 minutes before 15 minuto bago 30 minutes before 30 minuto bago 1 hour before 1 oras bago 1 day before 1 araw bago 2 days before 2 araw bago 1 week before 1 linggo bago On start day (9:00 AM) Sa araw ng pagmamarka (9:00 AM) time(s) oras (s) Enter a name please Pakiusap, ipasok ang pangalan The name can not only contain whitespaces Ang pangalan ay di makakakita lamang ng espasyo Type: Uri: Description: Pagsusulat: All Day: Kabugtang Araw: Starts: Nagsisimula: Ends: Nagsisimula: Remind Me: Sugurin ako: Repeat: Iulat: End Repeat: Tumapos ng ulat: Calendar account: Konting akademya: Calendar account Konting akademya Type Uri Description Pagsusulat All Day Kabugtang Araw Time: Oras: Time Oras Solar Saral Lunar Laral Starts Nagsisimula Ends Natutapos Remind Me Tandaan ako Repeat Uulitin Daily Arawan Weekdays Araw ng Linggo Weekly Lingguan Monthly Mga Buwan Yearly Tahim End Repeat Tapos ang Uulitin After Pagkatapos On Sa Cancel button Iwanan Save button I-save CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ang lahat ng mga pagkakaroon ng isang ulaping pangyayari ay dapat magkaroon ng parehong status ng buong araw. Do you want to change all occurrences? Gusto mo bang baguhin ang lahat ng mga pagkakaroon? Cancel button Iwanan Change All Baguhin ang Lahat You are changing the repeating rule of this event. Nagbabago ka ng ulaping pangunawa ng pangyayari. You are deleting an event. Naglalagay ka ng isang pangyayari. Are you sure you want to delete this event? Sigurado ka ba na gusto mong i-delete ang pangyayari? Delete button I-delete Do you want to delete all occurrences of this event, or only the selected occurrence? Gusto mo bang i-delete ang lahat ng mga pagkakaroon ng pangyayari, o lamang ang piniling pagkakaroon? Delete All I-delete ang Lahat Delete Only This Event I-delete lamang ang Pangyayari Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Gusto mo bang i-delete ang pangyayari at lahat ng mga susunod na pagkakaroon, o lamang ang piniling pagkakaroon? Delete All Future Events I-delete ang Lahat ng Mga Susunod na Pangyayari You are changing a repeating event. Nagbabago ka ng isang pangunahing pangyayari. Do you want to change only this occurrence of the event, or all occurrences? Gusto mo bang baguhin ang pangyayari lamang ng pangyayari, o lahat ng mga pangyayari? All Lahat Only This Event Lamang ang Pangyayari Do you want to change only this occurrence of the event, or this and all future occurrences? Gusto mo bang baguhin ang pangyayari lamang ng pangyayari, o ang pangyayari at lahat ng mga pangyayari sa hinaharap? All Future Events Laat Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Nagpili ka ng isang leap month, at magsisimula ka sa pag-remind ayon sa mga tuntunin ng kalendaryo ng buwan. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit I-edit Delete I-delete All Day Bawat Araw CScheduleSearchView No search results Walang mga resulta ng paghahanap CScheduleView ALL DAY BANAT ARAW CSettingDialog import ICS file import ICS file Manual Manwal 15 mins 15 minuto 30 mins 30 minuto 1 hour 1 oras 24 hours 24 oras Sync Now Synchronize Ngayon Last sync Ultimo sync Please go to the Control Center to change system settings Mangyaring pumunta sa Control Center upang baguhin ang mga setting ng sistema Monday Lunes Sunday Biernes Use System Setting Gamitin ang Setting ng Sistema 12-hour clock 12-oras na orasan 24-hour clock 24-oras na orasan CTimeEdit (%1 mins) (%1 minuto) (%1 hour) (%1 oras) (%1 hours) (%1 oras) CTitleWidget Y Y M M W W D D Search events and festivals Maghanap ng mga pangyayari at pista CWeekWindow Week Lingo Y Y CYearScheduleView All Day Bawat Araw No event Walang pangyayari CYearWindow Y Y CalendarWindow Calendar Kalendaryo Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Ang kalendaryo ay angkop para makita ang mga petsa, at ay isang mapagkakatiwalaan na araw-araw na planner para mag-iskedula ng lahat ng mga bagay sa buhay. Calendarmainwindow Calendar Kalendaryo Manage Pangasiwaan Privacy Policy Patakaran sa Priyansya Syncing... Nag-sync... Sync successful Nag-success ang sync Sync failed, please try later Nag-failed ang sync, subukin ito muli nang maayos CenterWidget All Day Bawat Araw DAccountDataBase Work Trabaho Life Buhay Other Iba pa DAlarmManager Close button I-close One day before start Isang araw bago magsimula Remind me tomorrow Alisahan ako bukas Remind me later Alisahan ako nang maayos 15 mins later 15 minuto nang maayos 1 hour later 1 oras na 4 hours later 4 oras na Tomorrow Bukingot Schedule Reminder Panahon ng pagsusulat ng tanda %1 to %2 '%1 hanggang %2' Today Ngayon DragInfoGraphicsView Edit I-edit Delete I-delete New event Bagong pangyayari New Event Bagong Pangyayari JobTypeListView export eksport import ICS file import ICS file You are deleting an event type. Nagpapapayag ka ng isang uri ng pangyayari. All events under this type will be deleted and cannot be recovered. Ang lahat ng mga pangyayari sa ilalim ng uri na ito ay iilalim na at hindi makaroroleback. Cancel button Iwanan Delete button I-delete QObject Account settings Mga setting ng account Account Account Select items to be synced Piliin ang mga item na dapat isynchronize Events Mga pangyayari General settings Mga pangkalahatang setting Sync interval Mga interval ng synchronization Manage calendar Mangalap ng kalendaryo Calendar account Kalendaryo Account Event types Mga uri ng pangyayari General Pangkalahatang First day of week Unang araw ng linggo Time Oras Return Today Return Ngayon Return Today Today Return Today Ngayon ScheduleTypeEditDlg New event type Nagmumuo nga klase han event Edit event type Mga edit han klase han event Import ICS file Importa ICS nga file Name: Pangalan: Color: Kolor: ICS File: ICS nga File: Cancel button Ibalik Save button Sagbana The name can not only contain whitespaces An pangalan wala sing pagsusugot nga makakab-ot lamang han whitespaces Enter a name please Pakita an pangalan Shortcut Help Tulong Delete event Tanggal event Copy Kopya Cut I-cut Paste Paste Delete Tanggal Select all Pili an lahat SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Punta UserloginWidget Sign In button Pirma In Sign Out button Pirma Out YearFrame Y Y today Today Today Sugad han karon linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_pl.ts000066400000000000000000001331061523260663500265170ustar00rootroot00000000000000 AccountItem Sync successful Synchronizacja zakończona Network error Błąd sieci Server exception Wyjątek serwera Storage full Pamięć pełna AccountManager Local account Konto lokalne Event types Typy wydarzeń CColorPickerWidget Color Kolor Cancel button Anuluj Save button Zapisz CDayMonthView Monday Poniedziałek Tuesday Wtorek Wednesday Środa Thursday Czwartek Friday Piątek Saturday Sobota Sunday Niedziela CDayWindow Y R M M D D Lunar Księżycowy CGraphicsView New Event Nowe wydarzenie CMonthScheduleNumItem %1 more jeszcze 1% CMonthView New event Nowe wydarzenie New Event Nowe wydarzenie CMonthWindow Y R CMyScheduleView My Event Moje wydarzenie OK button OK Delete button Usuń Edit button Edytuj CPushButton New event type Nowy typ wydarzenia CScheduleDlg New Event Nowe wydarzenie Edit Event Edytuj wydarzenie End time must be greater than start time Czas zakończenia musi być późniejszy niż czas rozpoczęcia OK button OK Never Nigdy At time of event W czasie wydarzenia 15 minutes before 15 minut przed 30 minutes before 30 minut przed 1 hour before 1 godzinę przed 1 day before 1 dzień przed 2 days before 2 dni przed 1 week before 1 tydzień przed On start day (9:00 AM) W dniu rozpoczęcia (9:00) time(s) raz(y) Enter a name please Wprowadź nazwę The name can not only contain whitespaces Nazwa nie może zawierać tylko białych znaków Type: Typ: Description: Opis: All Day: Cały dzień: Starts: Początek: Ends: Koniec: Remind Me: Przypomnij mi: Repeat: Powtórz: End Repeat: Zakończ powtarzanie: Calendar account: Konto kalendarza: Calendar account Konto kalendarza Type Typ Description Opis All Day Cały dzień Time: Czas: Time Czas Solar Słoneczny Lunar Księżycowy Starts Początek Ends Koniec Remind Me Przypomnij mi Repeat Powtórz Daily Codziennie Weekdays W dni robocze Weekly Co tydzień Monthly Co miesiąc Yearly Co rok End Repeat Zakończ Powtarzanie After Po On Wł Cancel button Anuluj Save button Zapisz CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wszystkie wystąpienia powtarzającego się wydarzenia muszą zawierać ten sam stan całodniowy. Do you want to change all occurrences? Czy chcesz zmienić wszystkie wystąpienia? Cancel button Anuluj Change All Zmień wszystkie You are changing the repeating rule of this event. Zmieniasz regułę powtarzania tego wydarzenia. You are deleting an event. Usuwasz wydarzenie. Are you sure you want to delete this event? Czy na pewno chcesz usunąć to wydarzenie? Delete button Usuń Do you want to delete all occurrences of this event, or only the selected occurrence? Czy chcesz usunąć wszystkie wystąpienia tego zdarzenia, czy tylko wybrane wystąpienie? Delete All Usuń wszystkie Delete Only This Event Usuń tylko to wydarzenie Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Czy chcesz usunąć to i wszystkie przyszłe wystąpienia tego wydarzenia, czy tylko wybrane wystąpienie? Delete All Future Events Usuń wszystkie przyszłe wydarzenia You are changing a repeating event. Zmieniasz powtarzające się wydarzenie. Do you want to change only this occurrence of the event, or all occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy wszystkie wydarzenia? All Wszystko Only This Event Tylko to wydarzenie Do you want to change only this occurrence of the event, or this and all future occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy to i wszystkie przyszłe wydarzenia? All Future Events Wszystkie przyszłe wydarzenia You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Zaznaczono miesiąc przestępny, przypomnienie będzie działać zgodnie z zasadami kalendarza księżycowego. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Edytuj Delete Usuń All Day Cały dzień CScheduleSearchView No search results Brak wyników wyszukiwania CScheduleView ALL DAY CA�Y DZIEŃ CSettingDialog import ICS file zaimportuj plik ICS Manual Ręcznie 15 mins 15 min 30 mins 30 min 1 hour 1 godz 24 hours 24 godz Sync Now Synchronizuj teraz Last sync Ostatnia synchronizacja Please go to the Control Center to change system settings Proszę przejdź do Centrum Sterowania, aby zmienić ustawienia systemu Monday Poniedziałek Sunday Niedziela Use System Setting Użyj ustawień systemowych 12-hour clock Zegar 12-godzinny 24-hour clock Zegar 24-godzinny CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 godzina) (%1 hours) (%1 godzin) CTitleWidget Y R M M W T D D Search events and festivals Szukaj wydarzeń i festiwalów CWeekWindow Week Tydzień Y R CYearScheduleView All Day Cały dzień No event Brak wydarzeń CYearWindow Y R CalendarWindow Calendar Kalendarz Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendarz to narzędzie umożliwiające przeglądanie dat, jak i inteligentny terminarz, w którym możesz zaplanować wszystkie wydarzenia w życiu. Calendarmainwindow Calendar Kalendarz Manage Zarządzaj Privacy Policy Polityka prywatności Syncing... Synchronizuję... Sync successful Synchronizacja zakończona Sync failed, please try later Błąd synchronizacji, spróbuj ponownie później CenterWidget All Day Cały dzień DAccountDataBase Work Praca Life Życie Other Inne DAlarmManager Close button Zamknij One day before start Dzień przed rozpoczęciem Remind me tomorrow Przypomnij mi jutro Remind me later Przypomnij mi później 15 mins later 15 minut później 1 hour later 1 godzinę później 4 hours later 4 godziny później Tomorrow Jutro Schedule Reminder Zaplanuj przypomnienie %1 to %2 %1 do %2 Today Dzisiaj DragInfoGraphicsView Edit Edytuj Delete Usuń New event Nowe wydarzenie New Event Nowe wydarzenie JobTypeListView export eksport import ICS file zaimportuj plik ICS You are deleting an event type. Usuwasz typ wydarzenia. All events under this type will be deleted and cannot be recovered. Wszystkie wydarzenia skatalogowane pod tym typem zostaną usunięte i nie będzie można ich przywrócić. Cancel button Anuluj Delete button Usuń QObject Account settings Ustawienia konta Account Konto Select items to be synced Wybierz przedmioty do synchronizacji Events Wydarzenia General settings Ustawienia ogólne Sync interval Interwał synchronizacji Manage calendar Zarządzaj kalendarzem Calendar account Konto kalendarza Event types Typy wydarzeń General Ogólne First day of week Pierwszy dzień tygodnia Time Czas Return Today Return Dzisiaj Return Today Today Return Today Dzisiaj ScheduleTypeEditDlg New event type Nowy typ wydarzenia Edit event type Edytuj typ wydarzenia Import ICS file Zaimportuj plik ICS Name: Nazwa: Color: Kolor: ICS File: Plik ICS: Cancel button Anuluj Save button Zapisz The name can not only contain whitespaces Nazwa nie może zawierać tylko znaków spacji Enter a name please Wprowadź nazwę Shortcut Help Pomoc Delete event Usuń wydarzenie Copy Kopiuj Cut Wytnij Paste Wklej Delete Usuń Select all Zaznacz wszystko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Przejdź UserloginWidget Sign In button Zaloguj się Sign Out button Wyloguj się YearFrame Y R today Today Today Dzisiaj linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_pt.ts000066400000000000000000001326071523260663500265340ustar00rootroot00000000000000 AccountItem Sync successful Sincronização bem sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de evento CColorPickerWidget Color Cor Cancel button Cancelar Save button Guardar CDayMonthView Monday Seg Tuesday Ter Wednesday Qua Thursday Qui Friday Sex Saturday Sáb Sunday Dom CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more mais %1 CMonthView New event Novo evento New Event Novo evento CMonthWindow Y A CMyScheduleView My Event O meu evento OK button Aceitar Delete button Eliminar Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time A hora de fim deve ser maior do que a hora de início OK button Aceitar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No início do dia (9:00 AM) time(s) vez(es) Enter a name please Introduza um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia todo: Starts: Inicia: Ends: Termina: Remind Me: Lembrar-me: Repeat: Repetir: End Repeat: Fim de repetição: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia todo Time: Hora: Time Hora Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Lembrar-me Repeat Repetir Daily Diário Weekdays Dias da semana Weekly Semanal Monthly Mensal Yearly Anual End Repeat Fim da repetição After Depois On Em Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetido devem ter o mesmo estado durante todo o dia. Do you want to change all occurrences? Deseja alterar todas as ocorrências? Cancel button Cancelar Change All Alterar tudo You are changing the repeating rule of this event. Está a alterar a regra da repetição deste evento. You are deleting an event. Está a eliminar um evento. Are you sure you want to delete this event? Tem a certeza que deseja eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Deseja eliminar todas as ocorrências deste evento ou apenas a ocorrência selecionada? Delete All Eliminar tudo Delete Only This Event Eliminar apenas este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Deseja eliminar esta e todas as ocorrências futuras deste evento ou apenas a ocorrência selecionada? Delete All Future Events Eliminar todos os eventos futuros You are changing a repeating event. Está a alterar um evento repetido. Do you want to change only this occurrence of the event, or all occurrences? Deseja alterar apenas esta ocorrência do evento, ou todas as ocorrências? All Tudo Only This Event Apenas este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Deseja alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Selecionou um mês bissexto, e será lembrado de acordo com as regras do calendário lunar. OK button Aceitar CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Dia todo CScheduleSearchView No search results Sem resultados de pesquisa CScheduleView ALL DAY DIA TODO CSettingDialog import ICS file importar arquivo ICS Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar agora Last sync Última sincronização Please go to the Control Center to change system settings Por favor, acesse o Centro de Controle para alterar as configurações do sistema Monday Segunda Sunday Domingo Use System Setting Usar Configuração do Sistema 12-hour clock Relógio de 12 horas 24-hour clock Relógio de 24 horas CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Pesquisar eventos e festivais CWeekWindow Week Semana Y A CYearScheduleView All Day Dia todo No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também uma agenda diária inteligente para agendar todas as coisas na vida. Calendarmainwindow Calendar Calendário Manage Gerir Privacy Policy Política de privacidade Syncing... A sincronizar... Sync successful Sincronização bem sucedida Sync failed, please try later Falha ao sincronizar. Tente novamente mais tarde CenterWidget All Day Dia todo DAccountDataBase Work Trabalho Life Vida Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembra-me amanhã Remind me later Lembrar-me mais tarde 15 mins later 15 mins depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar lembrete %1 to %2 %1 até %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar arquivo ICS You are deleting an event type. Está a eliminar um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão eliminados e não podem ser recuperados. Cancel button Cancelar Delete button Eliminar QObject Account settings Definições de conta Account Conta Select items to be synced Selecionar itens a sincronizar Events Eventos General settings Definições gerais Sync interval Intervalo de sincronização Manage calendar Gerir calendário Calendar account Conta de calendário Event types Tipos de evento General Geral First day of week Primeiro dia da semana Time Hora Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar arquivo ICS Name: Nome: Color: Cor: ICS File: Arquivo ICS: Cancel button Cancelar Save button Guardar The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Enter a name please Introduza um nome Shortcut Help Ajuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Colar Delete Eliminar Select all Selecionar tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sessão Sign Out button Terminar sessão YearFrame Y A today Today Today Hoje linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_pt_BR.ts000066400000000000000000001326511523260663500271160ustar00rootroot00000000000000 AccountItem Sync successful Conexão bem-sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de eventos CColorPickerWidget Color Cor Cancel button Cancelar Save button Salvar CDayMonthView Monday Segunda-feira Tuesday Terça-feira Wednesday Quarta-feira Thursday Quinta-feira Friday Sexta-feira Saturday Sábado Sunday Domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo Evento CMonthScheduleNumItem %1 more %1 mais CMonthView New event Novo evento New Event Novo Evento CMonthWindow Y A CMyScheduleView My Event Meu Evento OK button Ok Delete button Excluir Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo Evento Edit Event Editar Evento End time must be greater than start time O tempo de término deve ser maior que o tempo de início OK button Ok Never Nunca At time of event No momento do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No dia de início (9:00 AM) time(s) vez(es) Enter a name please Insira um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia Inteiro: Starts: Inicia em: Ends: Termina em: Remind Me: Lembre-me: Repeat: Repetir: End Repeat: Termina em: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia Inteiro Time: Horário: Time Horário Solar Solar Lunar Lunar Starts Inicia em Ends Termina em Remind Me Lembre-me Repeat Repetir Daily Diariamente Weekdays Dias úteis Weekly Semanalmente Monthly Mensalmente Yearly Anualmente End Repeat Termina em After Depois On Ativo Cancel button Cancelar Save button Salvar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetitivo devem ter o mesmo status durante o dia inteiro. Do you want to change all occurrences? Alterar todas as ocorrências? Cancel button Cancelar Change All Alterar Tudo You are changing the repeating rule of this event. Você está alterando a regra de repetição deste evento. You are deleting an event. Você está deletando um evento. Are you sure you want to delete this event? Excluir este evento? Delete button Excluir Do you want to delete all occurrences of this event, or only the selected occurrence? Excluir todas as ocorrências deste evento ou apenas a ocorrência selecionada? Delete All Excluir tudo Delete Only This Event Excluir Apenas Este Evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Excluir este evento e todas as suas ocorrências futuras; ou apenas a ocorrência selecionada? Delete All Future Events Excluir todos os eventos futuros You are changing a repeating event. Um evento repetido será alterado. Do you want to change only this occurrence of the event, or all occurrences? Alterar apenas esta ocorrência do evento ou todas as ocorrências? All Tudo Only This Event Apenas Este Evento Do you want to change only this occurrence of the event, or this and all future occurrences? Alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os Eventos Futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Você selecionou um mês bissexto e será lembrado de acordo com as regras do calendário lunar. OK button Ok CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Excluir All Day Dia Inteiro CScheduleSearchView No search results Nenhum resultado encontrado CScheduleView ALL DAY DIA INTEIRO CSettingDialog import ICS file Importar arquivo ICS Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar Agora Last sync Última sincronização Please go to the Control Center to change system settings Acesse as Configurações para alterar as configurações do sistema Monday Segunda-feira Sunday Domingo Use System Setting Utilizar a configuração do sistema 12-hour clock Formato de 12 horas 24-hour clock Formato de 24 horas CTimeEdit (%1 mins) (%1 minutos) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Procurar eventos e datas comemorativas CWeekWindow Week Semana Y A CYearScheduleView All Day Dia Inteiro No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também um planejador diário inteligente para programar todas as coisas da vida. Calendarmainwindow Calendar Calendário Manage Gerenciar Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sincronização bem-sucedida Sync failed, please try later A sincronização falhou, tente novamente mais tarde CenterWidget All Day Dia Inteiro DAccountDataBase Work Trabalho Life Social Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembre-me amanhã Remind me later Lembre-me mais tarde 15 mins later 15 minutos depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar Lembrete %1 to %2 %1 às %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Excluir New event Novo evento New Event Novo Evento JobTypeListView export exportar import ICS file importar arquivo ICS You are deleting an event type. Você está deletando um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão deletados e não poderão ser recuperados. Cancel button Cancelar Delete button Excluir QObject Account settings Configurações de conta Account Contas Select items to be synced Selecionar itens para sincronizar Events Eventos General settings Configurações gerais Sync interval Intervalo de sincronização Manage calendar Gerenciar calendário Calendar account Conta de calendário Event types Tipos de eventos General Geral First day of week Primeiro dia da semana Time Horário Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar o tipo de evento Import ICS file Importar arquivo ICS Name: Nome: Color: Cor: ICS File: Arquivo ICS: Cancel button Cancelar Save button Salvar The name can not only contain whitespaces O nome não pode ser apenas espaços em branco Enter a name please Insira um nome Shortcut Help Ajuda Delete event Excluir evento Copy Copiar Cut Recortar Paste Colar Delete Excluir Select all Selecionar tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Entrar Sign Out button Sair YearFrame Y A today Today Today Hoje linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ro.ts000066400000000000000000001333171523260663500265300ustar00rootroot00000000000000 AccountItem Sync successful Sincronizare reușită Network error Eroare de rețea Server exception Excepție server Storage full Spațiu de stocare încărcat AccountManager Local account Cont local Event types Tipuri de evenimente CColorPickerWidget Color Culoare Cancel button Anulează Save button Salvare CDayMonthView Monday Luni Tuesday Marţi Wednesday Miercuri Thursday Joi Friday Vineri Saturday Sâmbătă Sunday Duminică CDayWindow Y Y M l D z Lunar Lunar CGraphicsView New Event Eveniment nou CMonthScheduleNumItem %1 more %1 mai mult CMonthView New event Eveniment nou New Event Eveniment nou CMonthWindow Y A CMyScheduleView My Event Evenimentul meu OK button Ok Delete button Ștergeți Edit button Editare CPushButton New event type Tip nou de eveniment CScheduleDlg New Event Eveniment nou Edit Event Editare eveniment End time must be greater than start time Ora de încheiere trebuie să fie mai mare decât ora de început OK button Ok Never Niciodată At time of event La momentul evenimentului 15 minutes before Cu 15 minute înainte 30 minutes before Cu 30 minute înainte 1 hour before Cu 1 oră înainte 1 day before Cu 1 zi înainte 2 days before Cu 2 zile înainte 1 week before Cu 1 săptămână înainte On start day (9:00 AM) Începutul zilei (9:00 AM) time(s) ori Enter a name please Introduceți un nume, vă rugăm The name can not only contain whitespaces Numele nu poate conține numai spații libere Type: Tip: Description: Descriere: All Day: Toată ziua: Starts: Începe: Ends: Se termină: Remind Me: Aminteşte-mi: Repeat: Repetă: End Repeat: Repetarea se termină: Calendar account: Cont calendar: Calendar account Cont calendar Type Tip Description Descriere All Day Toată ziua Time: Oră: Time Oră Solar Solar Lunar Lunar Starts Începe Ends Se termină Remind Me Aminteşte-mi Repeat Repetă Daily Zilnic Weekdays Zilele saptămânii Weekly Săptămânal Monthly Lunar Yearly Anual End Repeat Opreşte repetarea After După On Pornire Cancel button Anulează Save button Salvare CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toate aparițiile unui eveniment repetat trebuie să aibă același statut toată ziua. Do you want to change all occurrences? Doriți să schimbați toate aparițiile? Cancel button Anulează Change All Schimbă tot You are changing the repeating rule of this event. Modificați regula de repetare a acestui eveniment. You are deleting an event. Ştergeţi un eveniment. Are you sure you want to delete this event? Sigur doriţi să ştergeţi acest eveniment? Delete button Ștergeți Do you want to delete all occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Şterge tot Delete Only This Event Şterge doar acest eveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Future Events Şterge toate evenimentele viitoare You are changing a repeating event. Modificați un eveniment care se repetă. Do you want to change only this occurrence of the event, or all occurrences? Doriți să schimbați doar această apariție a evenimentului sau toate evenimentele? All Tot Only This Event Doar acest eveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Doriți să schimbați doar această apariție a evenimentului sau aceasta și toate evenimentele viitoare? All Future Events Toate evenimentele viitoare You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ați selectat o lună bisectă și vi se va aminti în conformitate cu regulile calendarului lunar. OK button Ok CScheduleSearchDateItem Y A M L D Z CScheduleSearchItem Edit Editează Delete Șterge All Day Toată ziua CScheduleSearchView No search results Niciun rezultat la căutare CScheduleView ALL DAY TOATĂ ZIUA CSettingDialog import ICS file importați fișierul ICS Manual Manual 15 mins 15 minute 30 mins 30 minute 1 hour 1 oră 24 hours 24 ore Sync Now Sincronizează acum Last sync Ultima sincronizare Please go to the Control Center to change system settings Vă rugăm să mergeți la Centrul de Control pentru a modifica setările sistemului Monday Luni Sunday Duminică Use System Setting Utilizați setările sistemului 12-hour clock Mod ceas 12 ore 24-hour clock Mod ceas 24 ore CTimeEdit (%1 mins) (%1 minnute) (%1 hour) (%1 oră) (%1 hours) (%1 ore) CTitleWidget Y A M L W S D Z Search events and festivals Căutare evenimente și festivaluri CWeekWindow Week Săptămână Y A CYearScheduleView All Day Toată ziua No event Nici un eveniment CYearWindow Y A CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarul este un instrument pentru a vizualiza datele și, de asemenea, un planificator inteligent zilnic pentru a programa toate lucrurile din viață. Calendarmainwindow Calendar Calendar Manage Gestionare Privacy Policy Politica de Confidențialitate Syncing... Sincronizare... Sync successful Sincronizare reușită Sync failed, please try later Sincronizarea a eșuat, vă rugăm să încercați mai târziu CenterWidget All Day Toată ziua DAccountDataBase Work Serviciu Life Viaţă Other Altul DAlarmManager Close button Închidere One day before start O zi înainte de a începe Remind me tomorrow Reaminteşte mâine Remind me later Reaminteşte mai târziu 15 mins later peste 15 minute 1 hour later peste 1 oră 4 hours later peste 4 ore Tomorrow Mâine Schedule Reminder Programare Reminder %1 to %2 %1 la %2 Today Astăzi DragInfoGraphicsView Edit Editare Delete Ștergeți New event Eveniment nou New Event Eveniment nou JobTypeListView export export import ICS file importați fișierul ICS You are deleting an event type. Ștergeți un tip de eveniment. All events under this type will be deleted and cannot be recovered. Toate evenimentele de acest tip vor fi șterse și nu vor putea fi recuperate. Cancel button Anulează Delete button Ștergeți QObject Account settings Setări cont Account Cont Select items to be synced Selectați elementele care urmează să fie sincronizate Events Evenimente General settings Setări generale Sync interval Interval de sincronizare Manage calendar Gestionare calendar Calendar account Cont calendar Event types Tipuri de evenimente General General First day of week Prima zi a săptămânii Time Oră Return Today Return Astăzi Return Today Today Return Today Astăzi ScheduleTypeEditDlg New event type Tip nou de eveniment Edit event type Editarea tipului de eveniment Import ICS file Importați fișierul ICS Name: Nume: Color: Culoare: ICS File: Fișier ICS: Cancel button Anulează Save button Salvare The name can not only contain whitespaces Numele nu poate conține numai spații albe Enter a name please Introduceți un nume, vă rugăm Shortcut Help Ajutor Delete event Ştergere eveniment Copy Copiere Cut Tăiere Paste Lipire Delete Ștergeți Select all Selectează totul SidebarCalendarWidget Y Y M l TimeJumpDialog Go button Mergi UserloginWidget Sign In button Conectați-vă Sign Out button Deconectați-vă YearFrame Y A today Today Today Astăzi linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ru.ts000066400000000000000000001402341523260663500265320ustar00rootroot00000000000000 AccountItem Sync successful У�пешна� �инхронизаци� Network error Ошибка �ети Server exception И�ключение �ервера Storage full Хранилище заполнено AccountManager Local account Учетна� запи�ь домена Event types Типы �обытий CColorPickerWidget Color Цвет Cancel button Отмена Save button Сохранить CDayMonthView Monday Понедельник Tuesday Вторник Wednesday Среда Thursday Четверг Friday П�тница Saturday Суббота Sunday Во�кре�енье CDayWindow Y Г M М D Д Lunar Лунный CGraphicsView New Event �овое Событие CMonthScheduleNumItem %1 more более %1 CMonthView New event �овое �обытие New Event �овое Событие CMonthWindow Y Г CMyScheduleView My Event Моё �обытие OK button OK Delete button Удалить Edit button Редактировать CPushButton New event type �овый тип �обыти� CScheduleDlg New Event �овое �обытие Edit Event Редактировать �обытие End time must be greater than start time Врем� окончани� должно быть больше времени начала OK button OK Never �икогда At time of event Во врем� �обыти� 15 minutes before За 15 минут до �того 30 minutes before За 30 минут до �того 1 hour before За 1 ча� до �того 1 day before За 1 день до �того 2 days before За 2 дн� до �того 1 week before За 1 неделю до �того On start day (9:00 AM) В день начала (9:00) time(s) раз(а) Enter a name please Введите им�, пожалуй�та The name can not only contain whitespaces Им� не может �одержать только пробелы Type: Тип: Description: Опи�ание: All Day: Ве�ь день: Starts: �ачинает��: Ends: Заканчивает��: Remind Me: �апомнить: Repeat: Повтор�ть: End Repeat: Повтор�ть до: Calendar account: Учетна� запи�ь календар�: Calendar account Учетна� запи�ь календар�: Type Тип Description Опи�ание All Day Ве�ь день Time: Врем�: Time Врем� Solar Солнечно Lunar Лунный Starts �ачало Ends Конец Remind Me �апомнить Repeat Повтор�ть Daily Ежедневно Weekdays По будн�м Weekly Еженедельно Monthly Ежеме��чно Yearly Ежегодно End Repeat Повтор�ть до: After По�ле On Вкл. Cancel button Отмена Save button Сохранить CScheduleOperation All occurrences of a repeating event must have the same all-day status. В�е �кземпл�ры повтор�ющего�� �обыти� должны иметь одинаковый �тату� в течение в�его дн�. Do you want to change all occurrences? Вы хотите изменить в�е �кземпл�ры? Cancel button Отмена Change All Изменить в�е You are changing the repeating rule of this event. Вы измен�ете правило повторени� �того �обыти�. You are deleting an event. Вы удал�ете �обытие. Are you sure you want to delete this event? Вы дей�твительно хотите удалить �обытие? Delete button Удалить Do you want to delete all occurrences of this event, or only the selected occurrence? Вы хотите удалить в�е �кземпл�ры данного �обыти� или только выбранного �кземпл�ра? Delete All Удалить в�е Delete Only This Event Удалить только �то �обытие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Вы хотите удалить только �то и будущие про�влени� �обыти� или только выбранные про�влени�? Delete All Future Events Удалить В�е Будущие Событи� You are changing a repeating event. Вы измен�ете повтор�ющее�� �обытие Do you want to change only this occurrence of the event, or all occurrences? Вы хотите изменить только �то про�вление �обыти� или в�е про�влени�. All В�е Only This Event Только Это Событие Do you want to change only this occurrence of the event, or this and all future occurrences? Вы хотите изменить только �то про�вление данного �обыти� или в�ё �обытие и в�е будущие про�влени�? All Future Events Только Будущие Событи� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вы выбрали ви�око�ный ме��ц, вы будете оповещены об �том в �оответ�твии � правилами лунного календар�. OK button OK CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Правка Delete Удалить All Day Ве�ь День CScheduleSearchView No search results Пои�к результатов не дал CScheduleView ALL DAY ВЕСЬ ДЕ�Ь CSettingDialog import ICS file импорт файла ICS Manual Вручную 15 mins 15 минут 30 mins 30 минут 1 hour 1 ча� 24 hours 24 ча�а Sync Now Синхронизировать Сейча� Last sync По�ледн�� �инхронизаци� Please go to the Control Center to change system settings Пожалуй�та, перейдите в Центр управлени�, чтобы изменить �и�темные на�тройки Monday Понедельник Sunday Во�кре�енье Use System Setting И�пользовать �и�темные на�тройки 12-hour clock 12-ча�овой формат времени 24-hour clock 24-ча�овой CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 ча�) (%1 hours) (%1 ча�ов) CTitleWidget Y Г M М W � D Д Search events and festivals Пои�к меропри�тий и фе�тивалей CWeekWindow Week �едел� Y Г CYearScheduleView All Day Ве�ь День No event �ет �обыти� CYearWindow Y Г CalendarWindow Calendar Календарь Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календарь - �то ин�трумент дл� про�мотра дат, а также умный ежедневник дл� планировани� в�ех �обытий вашей пов�едневной жизни. Calendarmainwindow Calendar Календарь Manage Управление Privacy Policy Политика конфиденциально�ти Syncing... Синхронизаци�... Sync successful У�пешна� �инхронизаци� Sync failed, please try later �е удало�ь �инхронизировать, пожалуй�та, попробуйте позже CenterWidget All Day Ве�ь День: DAccountDataBase Work Работа Life Жизнь Other О�тальное DAlarmManager Close button Закрыть One day before start За день до начала Remind me tomorrow �апомнить завтра Remind me later �апомнить позже 15 mins later Спу�т� 15 минут 1 hour later Спу�т� 1 ча� 4 hours later Спу�т� 4 ча�а Tomorrow Завтра Schedule Reminder �апоминание о ра�пи�ании %1 to %2 от 1% до %2 Today Сегодн� DragInfoGraphicsView Edit Редактировать Delete Удалить New event �овое �обытие New Event �овое Событие JobTypeListView export �к�порт import ICS file импорт файла ICS You are deleting an event type. Вы удал�ете тип �обыти�. All events under this type will be deleted and cannot be recovered. В�е �обыти� �того типа будут удалены и не подлежат во��тановлению. Cancel button Отмена Delete button Удалить QObject Account settings �а�тройки учетной запи�и Account Учетна� запи�ь Select items to be synced Выберите �лементы дл� �инхронизации Events Событи� General settings Общие на�тройки Sync interval Интервал �инхронизации Manage calendar Управление календарем Calendar account Учетна� запи�ь календар�: Event types Типы �обытий General Общие First day of week Первый день недели Time Врем� Return Today Return Сегодн� Return Today Today Return Today Сегодн� ScheduleTypeEditDlg New event type �овый тип �обыти� Edit event type Редактировать тип �обыти� Import ICS file Импорт файла ICS Name: Им�: Color: Цвет: ICS File: Файл ICS: Cancel button Отмена Save button Сохранить The name can not only contain whitespaces Им� не может �одержать только пробелы Enter a name please Введите им�, пожалуй�та Shortcut Help Помощь Delete event Удалить �обытие Copy Копировать Cut Вырезать Paste В�тавить Delete Удалить Select all Выбрать в�ё SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Вперед UserloginWidget Sign In button Войти Sign Out button Выйти YearFrame Y Г today Today Today Сегодн� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sc.ts000066400000000000000000001361661523260663500265220ustar00rootroot00000000000000 AccountItem Sync successful تم التزامن بنجاح Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full التخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button إلغاء Save button ح�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y السنة M الشهر D اليوم Lunar القمرية CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more %1 أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y السنة CMyScheduleView My Event حدثي OK button موا�ق Delete button حذ� Edit button تحرير CPushButton New event type نوع حدث جديد CScheduleDlg New Event حدث جديد Edit Event تعديل الحدث End time must be greater than start time يجب أن تكون وقت الانتهاء أكبر من وقت البدء OK button موا�ق Never 从� At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة واحدة قبل 1 day before يوم واحد قبل 2 days before يومان قبل 1 week before أسبوع واحد قبل On start day (9:00 AM) �ي يوم البدء (9:00 صباحًا) time(s) وقت(ا) Enter a name please الرجاء إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات بيضاء Type: النوع: Description: الوص�: All Day: ال整天: Starts: البدء: Ends: الانتهاء: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب الجدول الزمني: Calendar account حساب الجدول الزمني Type النوع Description الوص� All Day ال整天 Time: الوقت: Time الوقت Solar السولي Lunar الل�ّنار�ي Starts يبدأ Ends ينتهي Remind Me تذكّرني Repeat تكرار Daily يوميًا Weekdays أيام الأسبوع Weekly أسبوعيًا Monthly شهريًا Yearly سنويًا End Repeat إنهاء التكرار After بعد On �ي Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون جميع أحداث التكرار ذات الحالة ن�سها لـ全天. Do you want to change all occurrences? هل ترغب �ي تغيير جميع الأحداث؟ Cancel button إلغاء Change All تغيير جميع You are changing the repeating rule of this event. أنت تقوم بتغيير قاعدة التكرار لهذه الأحداث. You are deleting an event. أنت تقوم بحذ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك �ي حذ� هذا الحدث؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� جميع أحداث هذا الحدث، أم �قط الحدث المحدد؟ Delete All حذ� جميع Delete Only This Event حذ� هذا الحدث �قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� هذا الحدث وأي حدث مستقبلي له، أم �قط الحدث المحدد؟ Delete All Future Events حذ� جميع الأحداث المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث تكراري. Do you want to change only this occurrence of the event, or all occurrences? هل ترغب �ي تغيير هذه المدة �قط من الحدث، أم جميع المدد؟ All جميع Only This Event هذا الحدث �قط Do you want to change only this occurrence of the event, or this and all future occurrences? هل ترغب �ي تغيير هذه المدة �قط من الحدث، أم هذه المدة والمستقبلية؟ All Future Events جميع الحدث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، وسو� ت�ذكَّر و�قًا للقواعد الخاصة بالGregorian. OK button نعم CScheduleSearchDateItem Y نعم M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذ� All Day ال整天 CScheduleSearchView No search results لا نتائج لبحث CScheduleView ALL DAY ال整天 CSettingDialog import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث الأخير Please go to the Control Center to change system settings يرجى الذهاب إلى مركز التحكم لتغيير إعدادات النظام Monday الاثنين Sunday الجمعة Use System Setting استخدام إعدادات النظام 12-hour clock الساعة 12 24-hour clock الساعة 24 CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y اليوم M الشهر W الأسبوع D اليوم Search events and festivals ابحث عن ال�عاليات والمناسبات CWeekWindow Week الأسبوع Y اليوم CYearScheduleView All Day ال整天 No event لا يوجد حدث CYearWindow Y اليوم CalendarWindow Calendar الป�ิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. الป�ิทินเป็นเครื่องมือใน�ารดูวันที่ �ละยังเป็นผู้วาง�ผนประจำวันอันชา�ฉลาดใน�ารจัดตารางเวลาทุ�สิ่งในชีวิต Calendarmainwindow Calendar ป�ิทิน Manage จัด�าร Privacy Policy นโยบายความเป็นส่วนตัว Syncing... �ำลังซิงค์... Sync successful ซิงค์สำเร็จ Sync failed, please try later �ารซิงค์ล้มเหลว �รุณาลองใหม่ในภายหลัง CenterWidget All Day ตลอดวัน DAccountDataBase Work �ารทำงาน Life ชีวิต Other อื่น ๆ DAlarmManager Close button ปิด One day before start หนึ่งวัน�่อนเริ่มต้น Remind me tomorrow เตือนฉันพรุ่งนี้ Remind me later เตือนฉันในภายหลัง 15 mins later 15 นาทีต่อมา 1 hour later ساعه بعد 4 hours later 4 ساعات بعد Tomorrow غدًا Schedule Reminder تذكير الجدول %1 to %2 '%1 إلى %2' Today اليوم DragInfoGraphicsView Edit تحرير Delete حذ� New event حدث جديد New Event حدث جديد JobTypeListView export تصدير import ICS file استيراد مل� ICS You are deleting an event type. أنت تقوم بحذ� نوع الحدث. All events under this type will be deleted and cannot be recovered. سيتم حذ� جميع الحوادث الموجودة �ي هذا النوع ولا يمكن استرجاعها. Cancel button إلغاء Delete button حذ� QObject Account settings إعدادات الحساب Account الحساب Select items to be synced اختر العناصر التي سيتم تزامنها Events الحوادث General settings إعدادات عامة Sync interval �ترة التزامن Manage calendar إدارة التقويم Calendar account حساب التقويم Event types أنواع الحوادث General عام First day of week اليوم الأول من الأسبوع Time الوقت Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع الحدث Import ICS file استيراد مل� ICS Name: الاسم: Color: اللون: ICS File: مل� ICS: Cancel button إلغاء Save button ح�ظ The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات �ارغة Enter a name please الرجاء إدخال اسم Shortcut Help مساعدة Delete event حذ� الحدث Copy نسخ Cut قص Paste لصق Delete حذ� Select all اختر جميعها SidebarCalendarWidget Y س M شهر TimeJumpDialog Go button الذهاب UserloginWidget Sign In button تسجيل الدخول Sign Out button الخروج YearFrame Y س today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_si.ts000066400000000000000000001463601523260663500265250ustar00rootroot00000000000000 AccountItem Sync successful සම්පූර්ණ සියලුම අවසන් විය Network error නොට්ව�ර්ක් අභ�වය Server exception සේවර් අභ�වය Storage full ස්ට�ර්ඩ් අවසන් විය AccountManager Local account ලොකල් අයිතිය Event types සිදුවීම් වර්ගය CColorPickerWidget Color රුපිය� Cancel button අවලංගු කරන්න Save button සුරකින්න CDayMonthView Monday සඳුද� Tuesday අඟහරුව�ද� Wednesday බද�ද� Thursday බ්�රහස්පතින්ද� Friday සිකුර�ද� Saturday සෙනසුර�ද� Sunday ඉරිද� CDayWindow Y වස M මස D දින Lunar මිනිසුරු CGraphicsView New Event නව හමුවක් CMonthScheduleNumItem %1 more තවත් %1 CMonthView New event නව සිදුවීමක් New Event නව හමුවක් CMonthWindow Y වස CMyScheduleView My Event මගේ හමුව OK button හරි Delete button මක� දමන්න Edit button සංස්කරණය කරන්න CPushButton New event type නව සිදුවීම් වර්ගය CScheduleDlg New Event නව හමුවක් Edit Event හමුව සංස්කරණය කරන්න End time must be greater than start time අවසන් කෙරෙන වේල�ව ආරම්භ කෙරෙන වේල�වට වඩ� ව�ඩි විය යුතුය OK button හරි Never කිසිද� න�ත At time of event හමුව යොද�ගත් වේල�වේදී 15 minutes before මිනිත්තු 15 කට පෙර 30 minutes before මින්ත්තු 30 කට පෙර 1 hour before ප�ය 1 කට පෙර 1 day before දින 1 කට පෙර 2 days before දින 2 කට පෙර 1 week before සති 1 කට පෙර On start day (9:00 AM) ඇරඹෙන දින (පෙ.ව 9.00) time(s) වේල�ව (න්) Enter a name please කරුණ�කර නමක් ඇති කරන්න The name can not only contain whitespaces නම පමණක් අවම අවක�� විය හ�කි නොවේ Type: වර්ගය: Description: විස්තරය: All Day: දිනය පුර�ම: Starts: අ��රම්භය: Ends: අවස�නය: Remind Me: මට මතක් කරන්න: Repeat: න�වත කරන්න: End Repeat: පුනර�වර්තනය අවසන් කරන්න: Calendar account: ක�ල් අයිතිය: Calendar account ක�ල් අයිතිය Type වර්ගය Description විස්තරය All Day දිනය පුර�ම Time: ක�ලය: Time ක�ලය Solar සූර්ය Lunar මිනිසුරු Starts ආරම්භය Ends අවස�නය Remind Me මට මතක් කරන්න Repeat පුනර�වර්තන Daily දිනපත� Weekdays සතියේ දින Weekly සති පත� Monthly ම�සිකව Yearly ව�ර්ෂිකව End Repeat පුනර�වර්තනය අවසන් කරන්න After පසුව On මත Cancel button අවලංගු කරන්න Save button සුරකින්න CScheduleOperation All occurrences of a repeating event must have the same all-day status. පුනර�වර්තන හමුවන්ගේ සියලු හමුවන් දිනය පුර� තත්වයේ තිබිය යුතුය. Do you want to change all occurrences? ඔබට සියලු පුනර�වර්ථනයන් වෙනස් කිරීමද අව�්�යද? Cancel button අවලංගු කරන්න Change All සියල්ල වෙනස් කරන්න You are changing the repeating rule of this event. ඔබ මෙම හමුවේ පුනර�වර්තන රීතීන් වෙනස් කරමින් සිටී. You are deleting an event. ඔබ හමුවක් මක� දමයි. Are you sure you want to delete this event? මෙම හමුව මක� ද�මීමට අව�්�ය බව ඔබට වි�්ව�සද? Delete button මක� දමන්න Do you want to delete all occurrences of this event, or only the selected occurrence? මෙම හමුවේ සියලුම පුනර�වර්තනයන් මක� ද�මීමට ඔබට අව�්�යද, න�තහොත් ත�ර�ගත් හමුව පමණක්ද? Delete All සියල්ල මක� දමන්න Delete Only This Event මෙම හමුව පමණක් මක� දමන්න Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ඔබට මෙම හමුව සහ මෙම හමුවේ ස�ලසුම් කල සියලු හමුවන් මක� ද�මීමට අව�්�යද, න�තහොත් මෙම ත�ර�ගත් හමුව පමණද? Delete All Future Events සියලු යොද�ගත් හමුවන් මක� දමන්න You are changing a repeating event. ඔබ පුනර�වර්තන හමුවක් වෙනස් කරමින් සිටී. Do you want to change only this occurrence of the event, or all occurrences? ඔබට මෙම පුනර�වර්තන හමුවේ මෙම හමුව පමණක් වෙනස් කිරීමට අව�්�යද, න�තිනම් සියලු පුනර�වර්තනයන් වෙනස් කල යුතුද? All සියල්ලම Only This Event මෙම හමුව පමණි Do you want to change only this occurrence of the event, or this and all future occurrences? ඔබට මෙම හමුව සහ මෙම හමුවේ ස�ලසුම් කල සියලු හමුවන් වෙනස් කිරීමට අව�්�යද, න�තහොත් මෙම ත�ර�ගත් හමුව පමණද? All Future Events සියලුම අන�ගත හමුවන් You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ඔබ මිනිසුරු ප්�රම�ණයක දී දී අවසන් විය තිබේ අතර, මිනිසුරු ප්�රම�ණයේ රූපිය� සිදුවීම් සඳහ� ප්�රම�ණය අනුව ඔබ අසන් සිදුවීම් සඳහ� තිබේ. OK button හරි CScheduleSearchDateItem Y වස M මස D දින CScheduleSearchItem Edit සංස්කරණය කරන්න Delete මක� දමන්න All Day දිනය පුර�ම CScheduleSearchView No search results සෙවුම් ප්�රතිඵල නොම�ත CScheduleView ALL DAY දිනය පුර�ම CSettingDialog import ICS file ICS ය�ඩ් බ�ගින් අයිතිය අව�්�ය නොවේ Manual සව්�යං 15 mins 15 මිනිත්තු 30 mins 30 මිනිත්තු 1 hour 1 විෂය 24 hours 24 විෂය Sync Now ද�න් අයිතිය Last sync අවසන් අයිතිය Please go to the Control Center to change system settings කරුණ�කර ඔබට අවසන් විය යුතු අයිතිය සඳහ� අවසන් විය යුතු අයිතිය අව�්�ය නොවේ Monday සඳුද� Sunday ඉරිද� Use System Setting ස්ථ�නීය අයිතිය භ�විත� කරන්න 12-hour clock 12 මිනිත්තු අයිතිය 24-hour clock 24 මිනිත්තු අයිතිය CTimeEdit (%1 mins) (%1 මිනිත්තු) (%1 hour) (%1 နာရီ) (%1 hours) (%1 နာရီ) CTitleWidget Y වස M මස W සති D දින Search events and festivals အားလုံးရှိ အစီအစဉ်နှင့် ပွဲလမ်းများကို ရှာဖွေပါ CWeekWindow Week සතිය Y වර් CYearScheduleView All Day දිනය පුර�ම No event හමුවන් නොම�ත CYearWindow Y වර් CalendarWindow Calendar දින දසුන Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. දින දසුන යනු දිනයන් බ�ලීමට මෙන්ම ජීවිතයේ සෑම දෙයක්ම ස�ලසුම් කිරීමට �භ�විත කල හ�කි දෛනික ස�ලසුම්කරන යෙදවුමකි. Calendarmainwindow Calendar දින දසුන Manage အုပ်�ျုပ်ရန် Privacy Policy အမှန်ကန်သော စီးပွားရေး သဘော�ူညီမှု Syncing... සමමුහුර්ත වෙමින්... Sync successful စုစည်းမှုအောင်မြင်ပါသည် Sync failed, please try later စုစည်းမှု ကျော်လွန်�ဲ့ပြီး အောက်ပိုင်း�ွင် ကြိုးစားပါ CenterWidget All Day දිනය පුර�ම DAccountDataBase Work ක�ර්යය Life ජීවිතය Other වෙනත් DAlarmManager Close button වස� දමන්න One day before start ආරම්භ කිරීමට ඇත්තේ එක් දිනක් පමණි Remind me tomorrow මට හෙට මතක් කරන්න Remind me later මට පසුව මතක් කරන්න 15 mins later �� မိနစ်နောက်ပိုင်း 1 hour later � နာရီနောက်ပိုင်း 4 hours later � နာရီနောက်ပိုင်း Tomorrow හෙට Schedule Reminder මතක් කිරීමක් සකසන්න %1 to %2 '%1 မှ %2' Today අද DragInfoGraphicsView Edit සංස්කරණය කරන්න Delete මක� දමන්න New event නව සිදුවීමක් New Event නව හමුවක් JobTypeListView export ထု�်ပြန် import ICS file ICS ဖိုင်ကို အသုံးပြု You are deleting an event type. သင်သည် အစီအစဉ်အမျိုးအစား�စ်မျိုးကို ဖျက်ပစ်နေပါသည်� All events under this type will be deleted and cannot be recovered. အစီအစဉ်အမျိုးအစား�စ်မျိုးအောက်�ွင် ရှိသော အစီအစဉ်များသည် ဖျက်ပစ်ပြီး ပြန်လည်ရယူရန် မဖြစ်နိုင်ပါ� Cancel button අවලංගු කරන්න Delete button මක� දමන්න QObject Account settings အကောင့် အဆိုပါ Account පරි�ීලක ගිණුම Select items to be synced စုစည်းမည့် အစီအစဉ်များကို ရွေးပါ Events အစီအစဉ်များ General settings အားလုံး အဆိုပါ Sync interval စုစည်းမှု အကြားအကွာ Manage calendar အစီအစဉ်များကို အုပ်�ျုပ်ရန် Calendar account အစီအစဉ် အကောင့် Event types အစီအစဉ်အမျိုးအစားများ General පොදු First day of week ပ�်အ�ွင်း ပထမနေ့ Time အ�ျိန် Return Today Return අද Return Today Today Return Today අද ScheduleTypeEditDlg New event type အစီအစဉ်အမျိုးအစားသစ် Edit event type အစီအစဉ်အမျိုးအစားကို ပြင်ဆင် Import ICS file ICS ဖိုင်ကို အသုံးပြု Name: නම: Color: 'အားအားသား:' ICS File: 'ICS ဖိုင်:' Cancel button අවලංගු කරන්න Save button සුරකින්න The name can not only contain whitespaces ຊື່ບ�່ສາມາດມີພຽງ�ຕ່ຄວາມວ່າງໄດ້ Enter a name please �ະລຸນາປ້ອນຊື່ Shortcut Help උදව් Delete event හමුව මක� දමන්න Copy පිටපත් කරන්න Cut කපන්න Paste අලවන්න Delete මකන්න Select all සියල්ල ලකුණු කරන්න SidebarCalendarWidget Y වස M මස TimeJumpDialog Go button ໄປ UserloginWidget Sign In button පුරනය වන්න Sign Out button ඉවත් වන්න YearFrame Y වර් today Today Today අද linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sk.ts000066400000000000000000001327241523260663500265260ustar00rootroot00000000000000 AccountItem Sync successful Synchronizácia úspešná Network error Chyba siete Server exception Výnimka serveru Storage full Úložisko je plné AccountManager Local account Miestny ú�et Event types Typy udalostí CColorPickerWidget Color Farba Cancel button Zrušiť Save button Uložiť CDayMonthView Monday Pondelok Tuesday Utorok Wednesday Streda Thursday Štvrtok Friday Piatok Saturday Sobota Sunday Nedeľa CDayWindow Y R M M D D Lunar Lunárny CGraphicsView New Event Nová udalosť CMonthScheduleNumItem %1 more ešte %1 CMonthView New event Nová udalosť New Event Nová udalosť CMonthWindow Y R CMyScheduleView My Event Moja udalosť OK button OK Delete button Vymazať Edit button Upraviť CPushButton New event type Nový typ udalosti CScheduleDlg New Event Nová udalosť Edit Event Upraviť udalosť End time must be greater than start time Čas ukon�enia musí byť neskôr ako �as za�iatku OK button OK Never Nikdy At time of event V �ase udalosti 15 minutes before 15 minút pred 30 minutes before 30 minút pred 1 hour before 1 hodinu pred 1 day before 1 deň pred 2 days before 2 dni pred 1 week before 1 týždeň pred On start day (9:00 AM) V deň za�iatku (9:00) time(s) krát Enter a name please Zadajte prosím meno The name can not only contain whitespaces Názov nemá byť možné obsahovať len medzery Type: Typ: Description: Popis: All Day: Celý deň: Starts: Za�ína: Ends: Kon�í: Remind Me: Pripomenúť Repeat: Opakovať: End Repeat: Ukon�iť opakovanie: Calendar account: Kalendárske ú�ty: Calendar account Kalendárske ú�ty Type Typ Description Popis All Day Celý deň Time: Čas: Time Čas Solar Solárny Lunar Lunárny Starts Za�ína Ends Kon�í Remind Me Pripomenúť Repeat Opakovať Daily Denne Weekdays Pracovné dni Weekly Týždenne Monthly Mesa�ne Yearly Ro�ne End Repeat Ukon�iť opakovanie After Po On Zapnuté Cancel button Zrušiť Save button Uložiť CScheduleOperation All occurrences of a repeating event must have the same all-day status. Všetky výskyty opakujúcej sa udalosti musia mať rovnaký celodenný stav. Do you want to change all occurrences? Chcete zmeniť všetky výskyty? Cancel button Zrušiť Change All Zmeniť všetky You are changing the repeating rule of this event. Meníte pravidlo opakovania tejto udalosti. You are deleting an event. Odstraňujete udalosť. Are you sure you want to delete this event? Naozaj chcete odstrániť túto udalosť? Delete button Vymazať Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete odstrániť všetky výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Vymazať všetko Delete Only This Event Vymazať iba túto udalosť Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete odstrániť tento a všetky budúce výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Future Events Vymazať všetky budúce udalosti You are changing a repeating event. Meníte opakujúcu sa udalosť. Do you want to change only this occurrence of the event, or all occurrences? Chcete zmeniť iba tento výskyt udalosti alebo všetky jej výskyty? All Všetky Only This Event Iba táto udalosť Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete zmeniť iba tento výskyt udalosti alebo túto a aj všetky budúce udalosti? All Future Events Všetky budúce udalosti You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vybrať ste bol preskokový mesiac a budete upozornený podľa pravidiel lunárneho kalendára. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upraviť Delete Vymazať All Day Celý deň CScheduleSearchView No search results Žiadne výsledky vyhľadávania CScheduleView ALL DAY CEL� DEŇ CSettingDialog import ICS file Importovať súbor ICS Manual Ru�né 15 mins 15 minút 30 mins 30 minút 1 hour 1 hodina 24 hours 24 hodín Sync Now Synchronizovať teraz Last sync Posledná synchronizácia Please go to the Control Center to change system settings Prosim, pýtajte sa na centrálny panel pre zmeny systémových nastavení Monday Pondelok Sunday Nedeľa Use System Setting Použiť systémové nastavenie 12-hour clock 12-hodinový �as 24-hour clock 24-hodinový �as CTimeEdit (%1 mins) (%1 minút) (%1 hour) (%1 hodina) (%1 hours) (%1 hodín) CTitleWidget Y R M M W T D D Search events and festivals Hľadať udalosti a svátky CWeekWindow Week Týždeň Y R CYearScheduleView All Day Celý deň No event Žiadna udalosť CYearWindow Y R CalendarWindow Calendar Kalendár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendár je nástroj na prezeranie dátumov a tiež inteligentný denný plánova� na plánovanie všetkých vecí v živote. Calendarmainwindow Calendar Kalendár Manage Spravovať Privacy Policy Zásady ochrany osobných údajov Syncing... Synchronizácia... Sync successful Synchronizácia úspešná Sync failed, please try later Synchronizácia zlyhala, skúste to neskôr CenterWidget All Day Celý deň DAccountDataBase Work Práca Life Život Other Ostatné DAlarmManager Close button Zavrieť One day before start Jeden deň pred za�iatkom Remind me tomorrow Pripomenúť zajtra Remind me later Pripomenúť neskôr 15 mins later o 15 minút neskôr 1 hour later o 1 hodinu neskôr 4 hours later o 4 hodiny neskôr Tomorrow Zajtra Schedule Reminder Nastaviť pripomienku %1 to %2 %1 do %2 Today Dnes DragInfoGraphicsView Edit Upraviť Delete Vymazať New event Nová udalosť New Event Nová udalosť JobTypeListView export export import ICS file importovať súbor ICS You are deleting an event type. Odstraňujete typ udalosti. All events under this type will be deleted and cannot be recovered. Všetky udalosti pod týmto typom budú odstránené a nemôžu byť obnovené. Cancel button Zrušiť Delete button Vymazať QObject Account settings Nastavenia ú�tu Account Ú�et Select items to be synced Vybrať položky na synchronizáciu Events Udalosti General settings Všeobecné nastavenia Sync interval Interval synchronizácie Manage calendar Spravovať kalendár Calendar account Kalendárske ú�ty Event types Typy udalostí General Hlavné First day of week Prvý deň v týždni Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ udalosti Edit event type Upraviť typ udalosti Import ICS file Importovať súbor ICS Name: Názov: Color: Farba: ICS File: Súbor ICS: Cancel button Zrušiť Save button Uložiť The name can not only contain whitespaces Názov nemá byť možné obsahovať len medzery Enter a name please Zadajte prosím meno Shortcut Help Nápoveda Delete event Vymazať udalosť Copy Kopírovať Cut Vystrihnúť Paste Prilepiť Delete Vymazať Select all Vybrať všetko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Prejsť UserloginWidget Sign In button Prihlásiť sa Sign Out button Odhlásiť sa YearFrame Y R today Today Today Dnes linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sl.ts000066400000000000000000001321121523260663500265160ustar00rootroot00000000000000 AccountItem Sync successful Sinhronizacija uspešna Network error Napaka omrežja Server exception Pomanjkljivost strežnika Storage full Shranjevje je polno AccountManager Local account Lokalni ra�un Event types Vrste dogodkov CColorPickerWidget Color Barva Cancel button Prekli�i Save button Shrani CDayMonthView Monday Ponedeljek Tuesday Torek Wednesday Sreda Thursday Četrtek Friday Petek Saturday Sobota Sunday Nedelja CDayWindow Y L M M D D Lunar Lunarni CGraphicsView New Event Nov dogodek CMonthScheduleNumItem %1 more %1 ve� CMonthView New event Nov dogodek New Event Nov dogodek CMonthWindow Y L CMyScheduleView My Event Moj dogodek OK button V redu Delete button Izbriši Edit button Uredi CPushButton New event type Novi tip dogodka CScheduleDlg New Event Nov dogodek Edit Event Uredi dogodek End time must be greater than start time Kon�ni �as mora biti kasnejši od za�etnega OK button V redu Never Nikoli At time of event Ob �asu dogodka 15 minutes before 15 minut prej 30 minutes before 30 minut prej 1 hour before 1 uro prej 1 day before 1 dan prej 2 days before 2 dni prej 1 week before 1 teden prej On start day (9:00 AM) Na dan dogodka (9:00) time(s) �as (s) Enter a name please Vnesite ime, prosim The name can not only contain whitespaces Ime ne more vsebovati le presledkov Type: Vrsta: Description: Opis: All Day: Cel dan: Starts: Za�etek: Ends: Konec: Remind Me: Opomnik: Repeat: Ponovi: End Repeat: Konec ponavljanj: Calendar account: Ra�un kalendara: Calendar account Ra�un kalendara Type Vrsta Description Opis All Day Cel dan Time: Čas: Time Čas Solar Solarni Lunar Lunarni Starts Za�etek Ends Konec Remind Me Opomnik Repeat Ponovitev Daily Dnevno Weekdays Ob dnevih Weekly Tedensko Monthly Mese�no Yearly Letno End Repeat Konec ponavljanj After Po On Na Cancel button Prekini Save button Shrani CScheduleOperation All occurrences of a repeating event must have the same all-day status. Vsako pojavljanje ponavljajo�ega dogodka mora imeti enak celodnevni status. Do you want to change all occurrences? Želite spremeniti vsa pojavljanja? Cancel button Prekini Change All Spremeni vse You are changing the repeating rule of this event. Spreminjate ponavljajo�e se pravilo za ta dogodek. You are deleting an event. Brišete dogodek. Are you sure you want to delete this event? Želite res izbrisati ta dogodek? Delete button Izbriši Do you want to delete all occurrences of this event, or only the selected occurrence? Želite izbrisati vsa pojavljanja tega dogodka, ali zgolj izbrana? Delete All Izbriši vse Delete Only This Event Izbriši le ta dogodek Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Želite izbrisati to in vsa ostala pojavljanja tega dogodka ali zgolj izbrana pojavljanja? Delete All Future Events Izbriši vse prihodnje dogodke You are changing a repeating event. Spreminjate ponavljajo�i se dogodek. Do you want to change only this occurrence of the event, or all occurrences? Želite spremeniti le to pojavitev dogodka ali vsa pojavljanja? All Vse Only This Event Zgolj ta dogodek Do you want to change only this occurrence of the event, or this and all future occurrences? Ali želite spremeniti le ta pojav dogodka ali vse prihodnje pojave? All Future Events Vse prihodnje dogodke You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ste izbrali prestopni mesec, boste opomaknjeni v skladu s pravili lunarnega kalendara. OK button V redu CScheduleSearchDateItem Y L M M D D CScheduleSearchItem Edit Uredi Delete Izbriši All Day Cel dan CScheduleSearchView No search results Ni rezultatov iskanja CScheduleView ALL DAY CEL DAN CSettingDialog import ICS file Uvozi datoteko ICS Manual Ro�no 15 mins 15 minut 30 mins 30 minut 1 hour 1 ura 24 hours 24 ur Sync Now Sinhroniziraj zdaj Last sync Zadnja sinhronizacija Please go to the Control Center to change system settings Prosim, se prijavite v Strojno središ�e, da spremenite sistemske nastavitve Monday Ponedeljek Sunday Nedelja Use System Setting Uporabi sistemske nastavitve 12-hour clock 12-ur�ni ur 24-hour clock 24-ur�ni ur CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 ura) (%1 hours) (%1 ur) CTitleWidget Y L M M W T D D Search events and festivals Iskanje dogodkov in praznikov CWeekWindow Week Teden Y L CYearScheduleView All Day Cel dan No event Ni dogodka CYearWindow Y L CalendarWindow Calendar Koledar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Koledar je orodje za prikaz datumov, a tudi pametni terminski planer za na�rtovanje življenjskih dogodkov. Calendarmainwindow Calendar Koledar Manage Upraviti Privacy Policy Pravilnik zasebnosti Syncing... Sinhronizacija... Sync successful Sinhronizacija uspešna Sync failed, please try later Sinhronizacija je spodletela, poskusite kasneje CenterWidget All Day Cel dan DAccountDataBase Work o Life ivljenje Other Ostalo DAlarmManager Close button Zapri One day before start Dan pred pri�etkom Remind me tomorrow Opomni me jutri Remind me later Opomni me kasneje 15 mins later 15 minut pozneje 1 hour later 1 ura pozneje 4 hours later 4 ure pozneje Tomorrow Jutri Schedule Reminder Nastavi opomnik %1 to %2 %1 do %2 Today Danes DragInfoGraphicsView Edit Uredi Delete Izbriši New event Nov dogodek New Event Nov dogodek JobTypeListView export izvoz import ICS file uvoz ICS datoteke You are deleting an event type. Brisanje vrste dogodka. All events under this type will be deleted and cannot be recovered. Vsi dogodki pod temi vrstami bodo izbrisani in ne bodo mogli biti obnovljeni. Cancel button Prekli�i Delete button Izbriši QObject Account settings Nastavitve ra�una Account Ra�un Select items to be synced Izberite predmete za sinhronizacijo Events Dogodki General settings Splošne nastavitve Sync interval Interval sinhronizacije Manage calendar Upraviti s kalendarjem Calendar account Kalendarji ra�un Event types Vrste dogodka General Splošno First day of week Prvi dan tedna Time Čas Return Today Return Danes Return Today Today Return Today Danes ScheduleTypeEditDlg New event type Nova vrsta dogodka Edit event type Uredi vrsto dogodka Import ICS file Uvoz ICS datoteke Name: Ime: Color: Barva: ICS File: ICS Datoteka: Cancel button Prekli�i Save button Shrani The name can not only contain whitespaces Ime ne more vsebovati samo presledkov Enter a name please Vnesite ime, prosim Shortcut Help Pomo� Delete event Izbriši dogodek Copy Kopiraj Cut Izreži Paste Prilepi Delete Izbriši Select all Izberi vse SidebarCalendarWidget Y L M M TimeJumpDialog Go button Idi UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danes linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sq.ts000066400000000000000000001472741523260663500265420ustar00rootroot00000000000000 AccountItem Sync successful Njëkohësim i suksesshëm Network error Gabim rrjeti Server exception Përjashtim në shërbyes Storage full Depozita plot AccountManager Local account Llogari vendore Event types Lloje veprimtarish CColorPickerWidget Color Ngjyrë Cancel button Anuloje Save button Ruaje CDayMonthView Monday E hënë Tuesday E martë Wednesday E mërkurë Thursday E enjte Friday E premte Saturday E shtunë Sunday E diel CDayWindow Y V M M D D Lunar Hënor CGraphicsView New Event Veprimtari e Re CMonthScheduleNumItem %1 more %1 më tepër CMonthView New event Veprimtari e re New Event Veprimtari e Re CMonthWindow Y V CMyScheduleView My Event Veprimtari e Imja OK button OK Delete button Fshije Edit button Përpunojeni CPushButton New event type Lloj veprimtarie të re CScheduleDlg New Event Veprimtari e Re Edit Event Përpunoni Veprimtari End time must be greater than start time Koha e përfundimit duhet të jetë më e madhe se koha e fillimit OK button OK Never Kurrë At time of event Në kohën e veprimtarisë 15 minutes before 15 minuta para 30 minutes before 30 minuta para 1 hour before 1 orë para 1 day before 1 ditë para 2 days before 2 ditë para 1 week before 1 javë para On start day (9:00 AM) Ditën e fillimit (9:00 AM) time(s) kohë() Enter a name please Ju lutemi, jepni një emër The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Type: Lloj: Description: Përshkrim: All Day: Tërë Ditën: Starts: Fillon më: Ends: Përfundon më: Remind Me: Kujtoma: Repeat: Përsërite: End Repeat: Përfundoje Përsëritjen Më: Calendar account: Llogari kalendari: Calendar account Llogari kalendari Type Lloj Description Përshkrim All Day Tërë Ditën Time: Kohë: Time Kohë Solar Diellore Lunar Hënore Starts Fillon më Ends Përfundon më Remind Me Kujtoma më Repeat Përsërite Daily Përditë Weekdays Ditë të javës Weekly Çdo javë Monthly Çdo muaj Yearly Çdo vit End Repeat Përfundoje Përsëritjen Më After Pas On Më Cancel button Anuloje Save button Ruaje CScheduleOperation All occurrences of a repeating event must have the same all-day status. Krejt rastet e një veprimtarie që përsëritet duhet të kenë të njëjtën gjendje gjithë-ditën. Do you want to change all occurrences? Doni të ndryshohen krejt përsëritjet? Cancel button Anuloje Change All Ndryshoji Krejt You are changing the repeating rule of this event. Po ndryshoni rregullin e përsëritjes së kësaj veprimtarie. You are deleting an event. Po fshini një veprimtari. Are you sure you want to delete this event? Jeni i sigurt se doni të fshihet kjo veprimtari? Delete button Fshije Do you want to delete all occurrences of this event, or only the selected occurrence? Doni të fshihen krejt përsëritjet e kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Fshiji Krejt Delete Only This Event Fshi Vetëm Këtë Veprimtari Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doni të fshihet kjo dhe krejt përsëritjet e ardhshme të kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Future Events Fshi Krejt Veprimtaritë e Ardhshme You are changing a repeating event. Po ndryshoni një veprimtari me përsëritje. Do you want to change only this occurrence of the event, or all occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo krejt përsëritjet? All Krejt Only This Event Vetëm Këtë Veprimtari Do you want to change only this occurrence of the event, or this and all future occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo këtë dhe krejt përsëritjet e ardhshme? All Future Events Krejt Veprimtaritë e Ardhshme You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Keni përzgjedhur një muaj të brishtë dhe do t’ju kujtohet në përputhje me rregullat e kalendarit hënor. OK button OK CScheduleSearchDateItem Y V M M D D CScheduleSearchItem Edit Përpunojeni Delete Fshije All Day Tërë Ditën CScheduleSearchView No search results S’ka përfundime kërkimi CScheduleView ALL DAY TËRË DITËN CSettingDialog import ICS file Manual Dorazi 15 mins 15 min. 30 mins 30 min. 1 hour 1 orë 24 hours 24 orë Sync Now Njëkohësoje Tani Last sync Njëkohësimi i fundit më Please go to the <a href='/'>Control Center</a> to change system settings Monday E hënë Sunday E diel Use System Setting 12-hour clock Sahat 12-orësh 24-hour clock Sahat 24-orësh CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 orë) (%1 hours) (%1 orë) CTitleWidget Y V M M W J D D Search events and festivals Kërkoni në veprimtari dhe festivale CWeekWindow Week Javë Y V CYearScheduleView All Day Tërë Ditën No event S’ka veprimtari CYearWindow Y V CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendari është një mjet për parje datash, si dhe një planifikues i mençur ditor për të vënë në plan krejt gjërat e jetës së përditshme. Calendarmainwindow Calendar Kalendar Manage Administrojeni Privacy Policy Rregulla Privatësie Syncing... Po njëkohësohet… Sync successful Njëkohësim i suksesshëm Sync failed, please try later Njëkohësimi dështoi, ju lutemi, provoni më vonë CenterWidget All Day Tërë Ditën DAccountDataBase Work Pune Life Shtëpie Other Tjetër DAlarmManager Close button Mbylle One day before start Një ditë para fillimit Remind me tomorrow Kujtoma nesër Remind me later Kujtoma më vonë 15 mins later pas 15 minutash 1 hour later pas 1 ore 4 hours later pas 4 orësh Tomorrow Nesër Schedule Reminder Kujtues Planesh %1 to %2 %1 deri më %2 Today Sot DragInfoGraphicsView Edit Përpunim Delete Fshije New event Veprimtari e re New Event Veprimtari e Re JobTypeListView export import ICS file You are deleting an event type. Po fshini një lloj veprimtarish. All events under this type will be deleted and cannot be recovered. Krejt veprimtaritë nën këtë lloj do të fshihen dhe s’mund të rikthehen. Cancel button Anuloje Delete button Fshije QObject Account settings Rregullime llogarie Account Llogari Select items to be synced Përzgjidhni objekte për t’u njëkohësuar Events Veprimtari General settings Rregullime të përgjithshme Sync interval Interval njëkohësimi Manage calendar Administroni kalendar Calendar account Llogari Kalendari Event types Lloje veprimtarish General Të përgjithshme First day of week Ditën e parë të javës Time Kohë Return Today Return Sot Return Today Today Return Today Sot ScheduleTypeEditDlg New event type Lloj veprimtarie të re Edit event type Përpunoni lloj veprimtarie Import ICS file Name: Emër: Color: Ngjyrë: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Anuloje Save button Ruaje The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Enter a name please Ju lutemi, jepni një emër Shortcut Help Ndihmë Delete event Fshije veprimtarinë Copy Kopjoje Cut Prije Paste Ngjite Delete Fshije Select all Përzgjidhi krejt SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Jepi UserloginWidget Sign In button Hyni Sign Out button Dilni YearFrame Y V today Today Today Sot linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sr.ts000066400000000000000000001367671523260663500265500ustar00rootroot00000000000000 AccountItem Sync successful Синхронизација је у�пешна Network error Грешка у мрежи Server exception И�еченија на �ерверу Storage full Спремиште је и�пуњено AccountManager Local account Локални налог Event types Вр�те догађаја CColorPickerWidget Color Боја Cancel button Откажи Save button Сачувај CDayMonthView Monday Понедељак Tuesday Уторак Wednesday Среда Thursday Четвртак Friday Петак Saturday Субота Sunday �едеља CDayWindow Y Г M М D Д Lunar Лунарно CGraphicsView New Event �ови догађај CMonthScheduleNumItem %1 more Још %1 CMonthView New event �ови догађај New Event �ови догађај CMonthWindow Y Г CMyScheduleView My Event Мој догађај OK button У реду Delete button Обриши Edit button Уреди CPushButton New event type �ови тип догађаја CScheduleDlg New Event �ови догађај Edit Event Уреди догађај End time must be greater than start time Крајње време мора бити након почетног OK button У реду Never �икад At time of event У време догађаја 15 minutes before 15 минута раније 30 minutes before 30 минута раније 1 hour before 1 �ат раније 1 day before 1 дан раније 2 days before 2 дана раније 1 week before 1 �едмица раније On start day (9:00 AM) �а дан почетка (9:00 �М) time(s) пут(а) Enter a name please Уне�ите име, молимо The name can not only contain whitespaces Име не може �адржати �амо празне ме�та Type: Вр�та: Description: Опи�: All Day: Цео дан: Starts: Почетак: Ends: Крај: Remind Me: Под�етник: Repeat: Понови: End Repeat: Окончај: Calendar account: Календарни налог: Calendar account Календарни налог Type Вр�та Description Опи� All Day Цео дан Time: Време: Time Време Solar Сунчан Lunar Лунарно Starts Почетак Ends Крај Remind Me Под�етник Repeat Понови Daily Свакодневно Weekdays Радним данима Weekly Седмично Monthly Ме�ечно Yearly Годишње End Repeat Окончај After �акон On Укључ. Cancel button Откажи Save button Сачувај CScheduleOperation All occurrences of a repeating event must have the same all-day status. Све појаве понављајућег догађаја морају имати и�ти целодневни �тату�. Do you want to change all occurrences? Желите ли да промените �ве појаве? Cancel button Откажи Change All Промени �ве You are changing the repeating rule of this event. Мењате правило понављања овог догађаја. You are deleting an event. Бришете догађај. Are you sure you want to delete this event? Заи�та желите да обришете овај догађај? Delete button Обриши Do you want to delete all occurrences of this event, or only the selected occurrence? Да ли желите да обришете �ве појаве овог догађаја или �амо изабрану �тавку? Delete All Обриши �ве Delete Only This Event Обриши �амо овај догађај Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Желите ли да обришете ову и �ве будуће појаве овог догађаја или �амо изабрану �тавку? Delete All Future Events Обриши �ве будуће догађаје You are changing a repeating event. Мењате понаљајући догађај. Do you want to change only this occurrence of the event, or all occurrences? Желите ли да промените �амо ову појаву догађаја или �ве? All Све Only This Event Само овај догађај Do you want to change only this occurrence of the event, or this and all future occurrences? Желите ли да промените ову појаву догађаја или ову појаву и �ве будуће појаве? All Future Events Сви будући догађаји You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Изабрали �те пре�кокнути ме�ец, и ћете бити напоменути према правилу ме�ечног календара. OK button У реду CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Уреди Delete Обриши All Day Цео дан CScheduleSearchView No search results �ема резултата претраге CScheduleView ALL DAY ЦЕО Д�� CSettingDialog import ICS file Увезите ICS датотеку Manual Ручно 15 mins 15 минута 30 mins 30 минута 1 hour 1 �ат 24 hours 24 �ати Sync Now Синхронизирај �ад Last sync По�ледња �инхронизација Please go to the Control Center to change system settings Молимо, идите на Центар за управљање да би�те променили �и�тем�ке подешавања Monday Понедељак Sunday �едеља Use System Setting Кори�тите �и�тем�ко подешавање 12-hour clock 12-ча�ни �ат 24-hour clock 24-ча�ни �ат CTimeEdit (%1 mins) (%1 минута) (%1 hour) (%1 �ат) (%1 hours) (%1 �ати) CTitleWidget Y Г M М W С D Д Search events and festivals Претрага догађаја и фе�тивала CWeekWindow Week Седмица Y Г CYearScheduleView All Day Цео дан No event �ема догађаја CYearWindow Y Г CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар је алат за приказ датума и паметани роковник за под�ећање на �ве догађаје у животу. Calendarmainwindow Calendar Календар Manage Управљај Privacy Policy Политика приватно�ти Syncing... Синхронизација... Sync successful Синхронизација је у�пешна Sync failed, please try later Синхронизација је неу�пела, молимо ва� покушајте поновно ка�није CenterWidget All Day Цео дан DAccountDataBase Work По�ао Life Живот Other О�тало DAlarmManager Close button Затвори One day before start Један дан пре пчетка Remind me tomorrow Под�ети ме �утра Remind me later Под�ети ка�није 15 mins later 15 минута ка�није 1 hour later 1 �ат ка�није 4 hours later 4 �ата ка�није Tomorrow Сутра Schedule Reminder Под�етник догађаја %1 to %2 %1 до %2 Today Дана� DragInfoGraphicsView Edit Уреди Delete Обриши New event �ови догађај New Event �ови догађај JobTypeListView export извоз import ICS file увоз ICS датотеке You are deleting an event type. Бришете једну вр�ту догађаја. All events under this type will be deleted and cannot be recovered. Сви догађаји под овом вр�том ће бити обри�ани и не могу �е вратити. Cancel button Откажи Delete button Обриши QObject Account settings Подешавања налога Account �алог Select items to be synced Изаберите елементе за �инхронизацију Events Догађаји General settings Општа подешавања Sync interval Интервал �инхронизације Manage calendar Управљај календаром Calendar account �алог календара Event types Вр�те догађаја General Опште First day of week Први дан недеље Time Време Return Today Return Дана� Return Today Today Return Today Дана� ScheduleTypeEditDlg New event type �ова вр�та догађаја Edit event type Измени вр�ту догађаја Import ICS file Увоз ICS датотеке Name: Име: Color: Boja: ICS File: ICS Датотека: Cancel button Откажи Save button Сачувај The name can not only contain whitespaces Име не може �адржавати �амо празне ме�та Enter a name please Уне�ите име, молимо Shortcut Help Помоћ Delete event Обриши догађај Copy Копирај Cut И�еци Paste Убаци Delete Обриши Select all Изабери �ве SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Идите UserloginWidget Sign In button Пријави �е Sign Out button Одајави �е YearFrame Y Г today Today Today Дана� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sv.ts000066400000000000000000001324601523260663500265360ustar00rootroot00000000000000 AccountItem Sync successful Synkning lyckad Network error Nätverksfel Server exception Serverundantag Storage full Lagring full AccountManager Local account Lokalt konto Event types Händelsetyper CColorPickerWidget Color Färg Cancel button Avbryt Save button Spara CDayMonthView Monday Måndag Tuesday Tisdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lördag Sunday Söndag CDayWindow Y Y M M D D Lunar Månlig CGraphicsView New Event Ny händelse CMonthScheduleNumItem %1 more %1 mer CMonthView New event Ny händelse New Event Ny händelse CMonthWindow Y Y CMyScheduleView My Event Min händelse OK button OK Delete button Radera Edit button Redigera CPushButton New event type Ny händelsetyp CScheduleDlg New Event Nytt händelse Edit Event Redigera händelse End time must be greater than start time Sluttid måste vara större än starttid OK button OK Never Nikom At time of event Vid tidpunkten för händelsen 15 minutes before 15 minuter före 30 minutes before 30 minuter före 1 hour before 1 timme före 1 day before 1 dag före 2 days before 2 dagar före 1 week before 1 vecka före On start day (9:00 AM) På startdagen (9:00 AM) time(s) tid(en) Enter a name please Ange ett namn, vänligen The name can not only contain whitespaces Namnet kan inte endast innehålla mellanslag Type: Typ: Description: Beskrivning: All Day: Hela dagen: Starts: Börjar: Ends: Slutar: Remind Me: Remind Me: Repeat: Upprepa: End Repeat: Sluta upprepa: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Typ Description Beskrivning All Day Hela dagen Time: Tid: Time Tid Solar Sol Lunar Måne Starts Startar Ends Slutar Remind Me Remind Me Repeat Upprepa Daily Daglig Weekdays Veckodagar Weekly Vardaglig Monthly Månatlig Yearly Årlig End Repeat Sluta Upprepa After Efter On På Cancel button Avbryt Save button Spara CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alla förekomster av ett upprepande händelse måste ha samma all-day-status. Do you want to change all occurrences? Vill du ändra alla förekomster? Cancel button Avbryt Change All Ändra Alla You are changing the repeating rule of this event. Du ändrar upprepningsschemat för denna händelse. You are deleting an event. Du tar bort en händelse. Are you sure you want to delete this event? Är du säker på att du vill ta bort denna händelse? Delete button Ta Bort Do you want to delete all occurrences of this event, or only the selected occurrence? Vill du ta bort alla förekomster av denna händelse eller endast den valda förekomsten? Delete All Ta Bort Alla Delete Only This Event Ta Bort Endast Denna Händelse Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vill du ta bort denna och alla framtida förekomster av denna händelse, eller endast den valda förekomsten? Delete All Future Events Ta Bort Alla Framtida Händelser You are changing a repeating event. Du ändrar ett upprepande händelse. Do you want to change only this occurrence of the event, or all occurrences? Vill du ändra endast denna uppkomst av händelsen eller alla uppkomster? All Alla Only This Event Endast denna händelse Do you want to change only this occurrence of the event, or this and all future occurrences? Vill du ändra endast denna uppkomst av händelsen, eller denna och alla framtida uppkomster? All Future Events Alla framtida händelser You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Du har valt en skottmånad, och du kommer att få påminnelse enligt reglerna för den månads kalendern. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Redigera Delete Radera All Day Hela dagen CScheduleSearchView No search results Inga sökresultat CScheduleView ALL DAY HÄLLE DÄGEN CSettingDialog import ICS file Importera ICS-fil Manual Manuell 15 mins 15 minuter 30 mins 30 minuter 1 hour 1 timme 24 hours 24 timmar Sync Now Synchronisera nu Last sync Senaste synkroniseringen Please go to the Control Center to change system settings Vänligen gå till Styrningscentrum för att ändra systeminställningar Monday Måndag Sunday Söndag Use System Setting Använd systeminställning 12-hour clock 12-timmars klocka 24-hour clock 24-timmars klocka CTimeEdit (%1 mins) (%1 minuter) (%1 hour) (%1 timme) (%1 hours) (%1 timmar) CTitleWidget Y Y M M W W D D Search events and festivals Sök händelser och festivaler CWeekWindow Week Vecka Y Y CYearScheduleView All Day Hela dagen No event Ingen händelse CYearWindow Y Y CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender är ett verktyg för att visa datum och också en smart daglig planerare för att planera allt i livet. Calendarmainwindow Calendar Kalender Manage Hantera Privacy Policy Integritetspolicy Syncing... Synkroniserar... Sync successful Synkronisering lyckades Sync failed, please try later Synkronisering misslyckades, försök igen senare CenterWidget All Day Hela dagen DAccountDataBase Work Arbete Life Liv Other Annat DAlarmManager Close button Stäng One day before start En dag före start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 minuter senare 1 hour later Ett timme senare 4 hours later Fyra timmar senare Tomorrow I morgon Schedule Reminder Schemalägg påminnelse %1 to %2 '%1 till %2' Today Idag DragInfoGraphicsView Edit Redigera Delete Ta bort New event Nytt händelse New Event Nytt Händelse JobTypeListView export Exportera import ICS file Importera ICS-fil You are deleting an event type. Du tar bort en händelsetyp. All events under this type will be deleted and cannot be recovered. Alla händelser under denna typ kommer att tas bort och kan inte återställas. Cancel button Avbryt Delete button Ta bort QObject Account settings Kontoinställningar Account Konto Select items to be synced Välj objekt att synkronisera Events Händelser General settings Allmäna inställningar Sync interval Synkronintervall Manage calendar Hantera kalender Calendar account Kalenderkonto Event types Händelsetyper General Allmänt First day of week Första dagen i veckan Time Tid Return Today Return Idag Return Today Today Return Today Idag ScheduleTypeEditDlg New event type Nytt händelseformat Edit event type Redigera händelseformat Import ICS file Importera ICS-fil Name: Namn: Color: Färg: ICS File: ICS-fil: Cancel button Avbryt Save button Spara The name can not only contain whitespaces Namnet kan inte bara innehålla mellanslag Enter a name please Ange ett namn, vänligen Shortcut Help Hjälp Delete event Ta bort händelse Copy Kopiera Cut Klipp ut Paste Klistra in Delete Ta bort Select all Välj allt SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Gå UserloginWidget Sign In button Logga in Sign Out button Logga ut YearFrame Y Y today Today Today Idag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_sw.ts000066400000000000000000001326551523260663500265450ustar00rootroot00000000000000 AccountItem Sync successful Sync kujifanywa Network error Error ya network Server exception Exception ya server Storage full Storage inayofanywa AccountManager Local account Account ya kati Event types Mipaka ya event CColorPickerWidget Color Rangi Cancel button Bado Save button Hifadhi CDayMonthView Monday Jumapili Tuesday Jumalicio Wednesday Jumato Thursday Jumada Friday Jumavipili Saturday Jumamoshi Sunday Jumamoshi CDayWindow Y Jumapili M Jumalicio D Jumada Lunar Lunari CGraphicsView New Event Event ya mwingi CMonthScheduleNumItem %1 more %1 ya kati CMonthView New event Event ya mwingi New Event Event ya mwingi CMonthWindow Y Jumapili CMyScheduleView My Event Event ya wangu OK button OK Delete button Ongeza Edit button Tambua CPushButton New event type Mipaka ya event ya mwingi CScheduleDlg New Event Eventi ya mpya Edit Event Tafuta Eventi End time must be greater than start time Wakati wa kimo cha kimo inaweza kubadilika kwa wakati wa kimo cha kimo OK button OK Never Sasa At time of event Pamoja na wakati wa eventi 15 minutes before 15 dakika ya kimo 30 minutes before 30 dakika ya kimo 1 hour before 1 saa ya kimo 1 day before 1 siku ya kimo 2 days before 2 siku ya kimo 1 week before 1 mingi ya kimo On start day (9:00 AM) Pamoja na siku ya kimo (9:00 AM) time(s) wakati (wa) Enter a name please Andika jina kwa kiasi The name can not only contain whitespaces Jina haweza kubadilika kwa kiasi Type: Tingi: Description: Maelezo: All Day: Kimo Kali: Starts: Begins: Ends: Ends: Remind Me: Tafuta Sijui: Repeat: Kupakia: End Repeat: Kupakia Kimo: Calendar account: Konto ya kalenda: Calendar account Konto ya kalenda Type Tingi Description Maelezo All Day Kimo Kali Time: Wakati: Time Muda Solar Salaria Lunar Lalaria Starts Yapuka Ends Yapuka Remind Me Tumekimia Repeat Tumekariri Daily Siku Weekdays Siku ya Jumla Weekly Siku Monthly Mwaka Yearly Mwaka End Repeat Tumekariri After Baada ya On Pia Cancel button Futa Save button Hifadhi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wote wakati ya kipindi cha kipindi kifupi kozalishwa kwa muda mwingi wa kipindi. Do you want to change all occurrences? Ukiwamia kuzalisha wote wakati ya kipindi cha kipindi kifupi? Cancel button Futa Change All Zalisha wote You are changing the repeating rule of this event. Ukiwamia kuzalisha kipindi cha kipindi kifupi. You are deleting an event. Ukiwamia kufuta kipindi. Are you sure you want to delete this event? Ukiwamia kufuta kipindi hiki? Delete button Futa Do you want to delete all occurrences of this event, or only the selected occurrence? Ukiwamia kufuta wote wakati ya kipindi cha kipindi kifupi, au kufuta kipindi kifupi cha kipindi? Delete All Futa wote Delete Only This Event Futa kipindi kifupi Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ukiwamia kufuta kipindi hiki na wote wakati ya kipindi cha kipindi kifupi, au kufuta kipindi kifupi? Delete All Future Events Futa wote wakati ya kipindi cha kipindi kifupi You are changing a repeating event. Unyote unakimbia kazi ya kipindi cha kipindi. Do you want to change only this occurrence of the event, or all occurrences? Unaweza kuchangia kazi ya kipindi cha kipindi, au kazi ya wote? All Wote Only This Event Kazi ya kipindi cha kipindi Do you want to change only this occurrence of the event, or this and all future occurrences? Unaweza kuchangia kazi ya kipindi cha kipindi, au kazi ya kipindi cha kipindi na wote kwa baadaye? All Future Events Wote kazi ya baadaye You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Unatambua mwezi wa kipindi, na utakuwa unatambua kwa kuzungusha matokeo ya kalenderi ya mwenzi. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Kamenge Delete Ondoa All Day Kwa muda wa siku CScheduleSearchView No search results Hakuna matokeo ya utafuta CScheduleView ALL DAY SIKI KWA MUDA CSettingDialog import ICS file Ukimbua faili ya ICS Manual Manuzali 15 mins 15 dakika 30 mins 30 dakika 1 hour 1 saa 24 hours 24 saa Sync Now Hakikisha kwa muda Last sync Hakikisha ya kwanza Please go to the Control Center to change system settings Tafuta Kutambua Kati kuchangia matokeo ya mifumo Monday Jumapili Sunday Jumla Use System Setting Tafuta matokeo ya mifumo 12-hour clock Kilometer ya 12 24-hour clock Kilometer ya 24 CTimeEdit (%1 mins) (%1 dakika) (%1 hour) (%1 saa) (%1 hours) (%1 saa) CTitleWidget Y Jumla M Mwezi W Siku D Lililo Search events and festivals Tazama michezo na mafunzo CWeekWindow Week Mwezi Y 'Jumla' CYearScheduleView All Day Kwa jumla No event Hakuna michezo CYearWindow Y 'Jumla' CalendarWindow Calendar Kabati Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kabati ni alamini ya kujaribu tarehe, na pia kabati ya kusafiri michezo ya kila siku kujaribu kila miongoni. Calendarmainwindow Calendar Kabati Manage Kuamua Privacy Policy Mangaliso ya Kujitokeza Syncing... Kuwaacha... Sync successful Kuwaacha kwa njia ya mafanikio Sync failed, please try later Kuwaacha kati, tafadhali kujaribu siku ya baadhi CenterWidget All Day Kwa jumla DAccountDataBase Work Kazi Life Mafunzo Other Mengine DAlarmManager Close button Futa One day before start Siku moja kabla ya kuanza Remind me tomorrow Tafadhali tuma kwa siku ya baadhi Remind me later Tafadhali tuma kati 15 mins later 15 dakika kati 1 hour later Siku ya kwanza baadhi 4 hours later Siku ya kwanza bano Tomorrow Siku ya kwanza Schedule Reminder Onesha Kifaa %1 to %2 '%1 hadi %2' Today Lililo DragInfoGraphicsView Edit Tumia Delete Ondoa New event Eventi Mpya New Event Eventi Mpya JobTypeListView export Eksporta import ICS file Importa faili ICS You are deleting an event type. Unaweza kuchapisha kifaa cha eventi. All events under this type will be deleted and cannot be recovered. Kila eventi katika kifaa hiki kikochapisha kifaa cha eventi, na hauweza kuchapisha tena. Cancel button Bado Delete button Ondoa QObject Account settings Mipango ya konto Account Konto Select items to be synced Chagua kifaa kizalishwa Events Eventi General settings Mipango ya kifaa Sync interval Masa ya kizalishwa Manage calendar Kamukisa kipengele cha muda Calendar account Konto cha muda Event types Kifaa cha eventi General Kifaa First day of week Siku ya kwanza ya mwezi Time Muda Return Today Return Lililo Return Today Today Return Today Lililo ScheduleTypeEditDlg New event type Mipaka ya mazungumzo Edit event type Tambua mipaka ya mazungumzo Import ICS file Pakia faili ya ICS Name: Jina: Color: Rangi: ICS File: Faili ya ICS: Cancel button Bado Save button Tafsiri The name can not only contain whitespaces Jina hauweza kushukilizwa kwa kipaka cha kipengele Enter a name please Tambua jina kwa kipaka cha kipengele Shortcut Help Msaada Delete event Ondoa mazungumzo Copy Kopia Cut Kutia Paste Lipia Delete Ondoa Select all Tambua wote SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Begu UserloginWidget Sign In button Tengeneza Sign Out button Ondoa YearFrame Y Y today Today Today Lay linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ta.ts000066400000000000000000001503071523260663500265120ustar00rootroot00000000000000 AccountItem Sync successful சேன� வெற�றி Network error நெட�வேர� தவற� Server exception சர�வர� தவற� Storage full சேமிப�ப� நிரம�பி AccountManager Local account மின� கணக�க� Event types சம�பவ வகைகள� CColorPickerWidget Color நிறம� Cancel button ரத�த� செய� Save button மீட�டர� CDayMonthView Monday ஞாயிற� Tuesday செவ�வாய� Wednesday ப�த�வை Thursday வியாழை Friday வெள�ளி Saturday சனி Sunday திங�கள� CDayWindow Y யே M மே D டி Lunar நிலவ� CGraphicsView New Event ப�திய சம�பவம� CMonthScheduleNumItem %1 more %1 அதிகம� CMonthView New event ப�திய சம�பவம� New Event ப�திய சம�பவம� CMonthWindow Y யே CMyScheduleView My Event என� சம�பவம� OK button சரி Delete button அகற�ற� Edit button திர�த�த� CPushButton New event type ப�திய சம�பவ வகை CScheduleDlg New Event ப�திய தேர�வ� Edit Event தேர�வை திர�த�த� End time must be greater than start time ம�டிவ� நேரம� ஆரம�ப நேரத�தை விட அதிகமாக இர�க�க வேண�ட�ம� OK button சரி Never ஒர�ம�றைய�ம� At time of event தேர�வ� நேரத�தில� 15 minutes before 15 நிமிடங�கள�க�க� ம�ன�ப� 30 minutes before 30 நிமிடங�கள�க�க� ம�ன�ப� 1 hour before 1 மணித�தியாழ�க�க� ம�ன�ப� 1 day before 1 நாள� ம�ன�ப� 2 days before 2 நாள� ம�ன�ப� 1 week before 1 வாரம� ம�ன�ப� On start day (9:00 AM) ஆரம�ப நாளில� (9:00 ம�ற�பகல�) time(s) நேரம�(கள�) Enter a name please ஒர� பெயரை உள�ளிடவ�ம� The name can not only contain whitespaces பெயர� சில�ல�களை மட�ட�ம� கொண�டிர�க�க ம�டியாத� Type: வகை: Description: விவரம�: All Day: தொடர�ந�த� நாள�: Starts: தொடங�க�கிறத�: Ends: ம�டிகிறத�: Remind Me: என�னை நினைவ�பட�த�தவ�ம�: Repeat: திர�ம�பி வர�கிறத�: End Repeat: திர�ம�பி வராத�: Calendar account: கல�லர� கணக�க�: Calendar account கல�லர� கணக�க� Type வகை Description விவரம� All Day தொடர�ந�த� நாள� Time: நேரம�: Time நேரம� Solar சூரிய Lunar நிலவ� Starts தொடங�க�கிறத� Ends ம�டிகிறத� Remind Me என�னை நினைவ�கொள� Repeat மீண�ட�ம� மீண�ட�ம� Daily நாள�தோற�ம� Weekdays ஞாயிற� அல�லத� ப�த�தாண�ட� மற�ற�ம� வாரம� Weekly வாரத�திற�க� ஒர�ம�றை Monthly மாதத�திற�க� ஒர�ம�றை Yearly ஆண�ட�த�தோற�ம� End Repeat மீண�ட�ம� மீண�ட�ம� ம�டிக�க After அட�த�த On அட�த�த Cancel button தள�ளவ�ம� Save button சேமிக�கவ�ம� CScheduleOperation All occurrences of a repeating event must have the same all-day status. மீண�ட�ம� மீண�ட�ம� நிகழ�வ�கள� அனைத�த�ம� ஒரே நேரம� நிலையில� இர�க�க வேண�ட�ம�. Do you want to change all occurrences? அனைத�த� நிகழ�வ�களைய�ம� மாற�ற விர�ம�ப�கிறீர�களா? Cancel button தள�ளவ�ம� Change All அனைத�தைய�ம� மாற�ற� You are changing the repeating rule of this event. நீங�கள� இந�த நிகழ�வின� மீண�ட�ம� மீண�ட�ம� விதியை மாற�ற�கிறீர�கள�. You are deleting an event. நீங�கள� ஒர� நிகழ�வை நீக�க�கிறீர�கள�. Are you sure you want to delete this event? இந�த நிகழ�வை நீக�க விர�ம�ப�கிறீர�களா? Delete button நீக�கவ�ம� Do you want to delete all occurrences of this event, or only the selected occurrence? இந�த நிகழ�வின� அனைத�த� நிகழ�வ�களைய�ம� நீக�க விர�ம�ப�கிறீர�களா, அல�லத� தேர�ந�தெட�க�கப�பட�ட நிகழ�வை மட�ட�ம�? Delete All அனைத�தைய�ம� நீக�க� Delete Only This Event இந�த நிகழ�வை மட�ட�ம� நீக�க� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? இந�த நிகழ�வ� மற�ற�ம� அதன� அனைத�த� ம�ன�னேற�ற நிகழ�வ�களைய�ம� நீக�க விர�ம�ப�கிறீர�களா, அல�லத� தேர�ந�தெட�க�கப�பட�ட நிகழ�வை மட�ட�ம�? Delete All Future Events ம�ன�னேற�ற நிகழ�வ�களைய�ம� நீக�க� You are changing a repeating event. நீங�கள� ஒர� மிகைப�ப� வரவ� மாற�ற�கிறீர�கள�. Do you want to change only this occurrence of the event, or all occurrences? நீங�கள� வரவின� இந�த ம�றையை மட�ட�ம� மாற�ற விர�ம�ப�கிறீர�களா, அல�லி, 24 மணி நேரத�திற�க� மேல� அனைத�த� ம�றைகளைய�ம� மாற�ற விர�ம�ப�கிறீர�களா? All அனைத�த� Only This Event இந�த வரவை மட�ட�ம� Do you want to change only this occurrence of the event, or this and all future occurrences? நீங�கள� வரவின� இந�த ம�றையை மட�ட�ம� மாற�ற விர�ம�ப�கிறீர�களா, அல�லி, இத�மட�ட�ம� மற�ற�ம� அனைத�த� எதிர�கால ம�றைகளைய�ம� மாற�ற விர�ம�ப�கிறீர�களா? All Future Events அனைத�த� எதிர�கால வரவ�களைய�ம� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. நீங�கள� ஒர� சிறப�ப� மாதத�தை தேர�வ� செய�த�ள�ளீர�கள�, மற�ற�ம� மாதிரியின� விதிகள�க�க� அடிப�படையாக நீங�கள� ஓரளவ� நினைவ�கூரப�பட�வீர�கள�. OK button சரி CScheduleSearchDateItem Y ஆம� M மாதம� D நாள� CScheduleSearchItem Edit திர�த�த� Delete அழிக�க All Day அனைத�த� நாள�ம� CScheduleSearchView No search results தேடல� விளைவ�கள� இல�லை CScheduleView ALL DAY அனைத�த� நாள�ம� CSettingDialog import ICS file ICS கோப�பை இறக�க�மதி செய�யவ�ம� Manual மேலாண�மை 15 mins 15 நிமிடங�கள� 30 mins 30 நிமிடங�கள� 1 hour ஒர� மணி நேரம� 24 hours 24 மணி நேரம� Sync Now இப�போத� ஒப�பநிதியாக�க� Last sync ம�ந�தைய ஒப�பநிதியாக�க� Please go to the Control Center to change system settings ம�றைகளை மாற�ற கோப�பை மாற�றவ�ம� கட�ட�ப�பாட�ட� மையம� க�க�ச� செல�லவ�ம�. Monday திங�கள� Sunday ஞாயிற� Use System Setting ம�றைகளை மாற�றவ�ம� அமைப�ப� ம�றைகளை பயன�பட�த�தவ�ம� 12-hour clock 12 மணி நேர காலணி 24-hour clock 24 மணி நேர காலணி CTimeEdit (%1 mins) (%1 மினிட�ட�கள�) (%1 hour) (%1 மணி) (%1 hours) (%1 மணி) CTitleWidget Y ஒர� M மாதம� W ஒர� தினம� D நாள� Search events and festivals மாதிரி நிகழ�வ�கள� மற�ற�ம� விழாக�களை தேடவ�ம� CWeekWindow Week தினம� Y ஒர� CYearScheduleView All Day நாளே ம�ழ�வத�ம� No event நிகழ�வ� இல�லை CYearWindow Y ஒர� CalendarWindow Calendar கலந�தாரம� Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. கலந�தாரம� தேதிகளைக� காண�பதற�கான கர�விய�ம�, நாள�தோற�ம� நிகழ�வ�களைத� திட�டமிட�ம� தெர�க�கள� மற�ற�ம� வாழ�வின� அனைத�தைத� திட�டமிட�ம� தொடர�ப�டைய திட�டமிடல� கர�விய�ம� ஆக�ம�. Calendarmainwindow Calendar கலந�தாரம� Manage மேலாண�மை Privacy Policy மூல தொடர�ப�டைய காப�ப�ரிமை Syncing... சேர�க�கை செய�யப�பட�கிறத�... Sync successful சேர�க�கை வெற�றிகரமாக மேற�கொள�ளப�பட�டத� Sync failed, please try later சேர�க�கை வெற�றிகரமாக மேற�கொள�ள ம�டியவில�லை, பின�னர� ம�யற�சி செய�யவ�ம� CenterWidget All Day நாளே ம�ழ�வத�ம� DAccountDataBase Work வேலை Life உயிர� Other மற�றவை DAlarmManager Close button மூட� One day before start தொடக�கத�திற�க� ஒர� நாள� ம�ன�ப� Remind me tomorrow நாளை நினைவ� கூற� Remind me later பின�னர� நினைவ� கூற� 15 mins later 15 மினிட�ட�கள� பின�னர� 1 hour later ஒர� மணி நேரம� பிறக� 4 hours later நான�க� மணி நேரம� பிறக� Tomorrow நாளை Schedule Reminder தினசரி நினைவூட�ட� %1 to %2 '%1 க�க�ம� %2 க�க�ம�' Today இன�ற� DragInfoGraphicsView Edit திர�த�த� Delete அழித�தல� New event ப�திய நிகழ�வ� New Event ப�திய நிகழ�வ� JobTypeListView export தொக�ப�ப� import ICS file ICS கோப�பை பதிவேட� You are deleting an event type. நீங�கள� ஒர� நிகழ�வ� வகையை அழிக�கிறீர�கள�. All events under this type will be deleted and cannot be recovered. இந�த வகையின� அனைத�த� நிகழ�வ�கள�ம� அழிக�கப�பட�ம� மற�ற�ம� மீட�க ம�டியாத�. Cancel button ரத�த� செய� Delete button அழித�தல� QObject Account settings கணக�க� ம�றைமை Account கணக�க� Select items to be synced சேர�த�தல�க�க� பொர�ட�களை தேர�வ� செய� Events நிகழ�வ�கள� General settings பொத� ம�றைமை Sync interval சேர�த�தல� இடைவெளி Manage calendar காலண�டர� மேலாண�மை Calendar account காலண�டர� கணக�க� Event types நிகழ�வ� வகைகள� General பொத� First day of week வாரத�தின� ம�தல� நாள� Time நேரம� Return Today Return இன�ற� Return Today Today Return Today இன�ற� ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: ICS File: Cancel button Save button The name can not only contain whitespaces Enter a name please Shortcut Help Delete event Copy Cut Paste Delete Select all SidebarCalendarWidget Y M TimeJumpDialog Go button UserloginWidget Sign In button Sign Out button YearFrame Y today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_th.ts000066400000000000000000001436451523260663500265300ustar00rootroot00000000000000 AccountItem Sync successful �ารซิงค์สำเร็จ Network error ข้อผิดพลาดของเครือข่าย Server exception ข้อผิดพลาดของเซิร์ฟเวอร์ Storage full พื้นที่จัดเ�็บเต็ม AccountManager Local account บั�ชีท้องถิ่น Event types ประเภทเหตุ�ารณ์ CColorPickerWidget Color สี Cancel button ย�เลิ� Save button บันทึ� CDayMonthView Monday วันจันทร์ Tuesday วันอังคาร Wednesday วันพุธ Thursday วันพฤหัสบดี Friday วันศุ�ร์ Saturday วันศุ�ร์ Sunday วันอาทิตย์ CDayWindow Y ป M ด D ว Lunar ป�ิทินจันทรค력 CGraphicsView New Event �ิจ�รรมใหม่ CMonthScheduleNumItem %1 more อี� 1% CMonthView New event เหตุ�ารณ์ใหม่ New Event �ิจ�รรมใหม่ CMonthWindow Y ป CMyScheduleView My Event �ิจ�รรมของฉัน OK button ต�ลง Delete button ลบ Edit button ��้ไข CPushButton New event type ประเภทเหตุ�ารณ์ใหม่ CScheduleDlg New Event �ิจ�รรมใหม่ Edit Event ��้ไข�ิจ�รรม End time must be greater than start time เวลาสิ้นสุดต้องมา��ว่าเวลาเริ่มต้น OK button ต�ลง Never ไม่เคย At time of event ในช่วงเวลาของ�ิจ�รรม 15 minutes before 15 นาที�่อน 30 minutes before 30 นาที�่อน 1 hour before 1 ชั่วโมง�่อน 1 day before 1 วัน�่อน 2 days before 2 วัน�่อน 1 week before 1 สัปดาห์�่อน On start day (9:00 AM) ท�า�ารในเวลา (09:00 น.) time(s) เวลา (s) Enter a name please �รุณาป้อนชื่อ The name can not only contain whitespaces ชื่อนั้นไม่สามารถประ�อบด้วยช่องว่างเพียงอย่างเดียว Type: ประเภท: Description: รายละเอียด: All Day: ทั้งวัน: Starts: เริ่ม: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ทำซ้ำ: End Repeat: สิ้นสุด�ารทำซ้ำ: Calendar account: บั�ชีป�ิทิน: Calendar account บั�ชีป�ิทิน Type ประเภท Description รายละเอียด All Day ทั้งวัน Time: เวลา: Time เวลา Solar ป�ิทินสุริยค력 Lunar ป�ิทินจันทรค력 Starts เริ่ม Ends สิ้นสุด Remind Me เตือนฉัน Repeat ทำซ้ำ Daily ประจำวัน Weekdays วันธรรมดา Weekly รายสัปดาห์ Monthly รายเดือน Yearly รายปี End Repeat สิ้นสุด�ารทำซ้ำ After หลังจา� On เปิด Cancel button ย�เลิ� Save button บันทึ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. �ิจ�รรมที่เ�ิดขึ้นซ้ำทั้งหมดต้องมีสถานะตลอดทั้งวันเหมือน�ัน Do you want to change all occurrences? คุณต้อง�ารเปลี่ยน�ิจ�รรมทั้งหมดหรือไม่? Cancel button ย�เลิ� Change All เปลี่ยนทั้งหมด You are changing the repeating rule of this event. คุณ�ำลังเปลี่ยน�ฎ�ารทำซ้ำของ�ิจ�รรมนี้ You are deleting an event. คุณ�ำลังลบ�ิจ�รรม Are you sure you want to delete this event? คุณ�น่ใจหรือไม่ว่าคุณต้อง�ารที่จะลบ�ิจ�รรมนี้ Delete button ลบ Do you want to delete all occurrences of this event, or only the selected occurrence? คุณต้อง�ารลบ�ิจ�รรมทั้งหมดที่เ�ิดขึ้นหรือเฉพาะ�ิจ�รรมที่เลือ�ไว้หรือไม่ ? Delete All ลบทั้งหมด Delete Only This Event ลบเฉพาะ�ิจ�รรมนี้ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? คุณต้อง�ารลบ�ิจ�รรมนี้�ละ�ิจ�รรมที่จะเ�ิดขึ้นในอนาคตทั้งหมดหรือเฉพาะ�ิจ�รรมที่เลือ� ? Delete All Future Events ลบ�ิจ�รรมในอนาคตทั้งหมด You are changing a repeating event. คุณ�ำลังเปลี่ยน�ิจ�รรมที่เ�ิดซ้ำ Do you want to change only this occurrence of the event, or all occurrences? คุณต้อง�ารเปลี่ยนเฉพาะ�ิจ�รรมนี้หรือ�ิจ�รรมทั้งหมดหรือไม่ All ทั้งหมด Only This Event �ิจ�รรมนี้เท่านั้น Do you want to change only this occurrence of the event, or this and all future occurrences? คุณต้อง�ารเปลี่ยนเฉพาะ�ิจ�รรมที่เ�ิดขึ้นนี้หรือ�ิจ�รรมนี้�ละ�ิจ�รรมในอนาคตทั้งหมดหรือไม่ All Future Events �ิจ�รรมในอนาคตทั้งหมด You have selected a leap month, and will be reminded according to the rules of the lunar calendar. คุณได้เลือ�เดือนที่เพิ่มเติม �ละจะถู�เตือนตาม�ฎของป�ิทินจันทรค력 OK button ต�ลง CScheduleSearchDateItem Y ป M ด D ว CScheduleSearchItem Edit ��้ไข Delete ลบ All Day ทั้งวัน CScheduleSearchView No search results ไม่มีผลลัพธ์�ารค้นหา CScheduleView ALL DAY ทั้งวัน CSettingDialog import ICS file นำเข้าไฟล์ ICS Manual �มนนวล 15 mins 15 นาที 30 mins 30 นาที 1 hour 1 ชั่วโมง 24 hours 24 ชั่วโมง Sync Now ซิงค์ตอนนี้ Last sync �ารซิงค์ครั้งสุดท้าย Please go to the Control Center to change system settings �รุณาไปที่ ศูนย์ควบคุม เพื่อเปลี่ยนตั้งค่าระบบ Monday วันจันทร์ Sunday วันอาทิตย์ Use System Setting ใช้�ารตั้งค่าระบบ 12-hour clock นาฬิ�า�บบ 12 ชั่วโมง 24-hour clock นาฬิ�า�บบ 24 ชั่วโมง CTimeEdit (%1 mins) (%1 นาที) (%1 hour) (%1 ชั่วโมง) (%1 hours) (%1 ชั่วโมง) CTitleWidget Y ป M ด W W D ว Search events and festivals ค้นหาเหตุ�ารณ์�ละงานเทศ�าล CWeekWindow Week สัปดาห์ Y ป CYearScheduleView All Day ทั้งวัน No event ไม่มี�ิจ�รรม CYearWindow Y ป CalendarWindow Calendar ป�ิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ป�ิทินเป็นเครื่องมือใน�ารดูวันที่�ละยังเป็นนั�วาง�ผนรายวันที่ชา�ฉลาดเพื่อ�ำหนดเวลาทุ�สิ่งในชีวิต Calendarmainwindow Calendar ป�ิทิน Manage จัด�าร Privacy Policy นโยบายความเป็นส่วนตัว Syncing... �ำลังซิงค์... Sync successful ซิงค์สำเร็จ Sync failed, please try later �ารซิงค์ล้มเหลว �รุณาลองใหม่ในภายหลัง CenterWidget All Day ทั้งวัน DAccountDataBase Work งาน Life ชีวิต Other อื่น ๆ DAlarmManager Close button ปิด One day before start หนึ่งวัน�่อนเริ่มต้น Remind me tomorrow เตือนฉันพรุ่งนี้ Remind me later เตือนฉันในภายหลัง 15 mins later 15 นาทีต่อมา 1 hour later 1 ชั่วโมงต่อมา 4 hours later 4 ชั่วโมงต่อมา Tomorrow พรุ่งนี้ Schedule Reminder �ำหนดเวลาเตือน %1 to %2 '%1 ถึง %2' Today วันนี้ DragInfoGraphicsView Edit ��้ไข Delete ลบ New event �ิจ�รรมใหม่ New Event �ิจ�รรมใหม่ JobTypeListView export ส่งออ� import ICS file นำเข้าไฟล์ ICS You are deleting an event type. คุณ�ำลังลบประเภทเหตุ�ารณ์ All events under this type will be deleted and cannot be recovered. เหตุ�ารณ์ทั้งหมดภายใต้ประเภทนี้จะถู�ลบ�ละไม่สามารถ�ู้คืนได้ Cancel button ย�เลิ� Delete button ลบ QObject Account settings ตั้งค่าบั�ชี Account บั�ชี Select items to be synced เลือ�ข้อมูลที่ต้อง�ารซิงค์ Events เหตุ�ารณ์ General settings ตั้งค่าทั่วไป Sync interval ช่วงเวลาซิงค์ Manage calendar จัด�ารป�ิทิน Calendar account บั�ชีป�ิทิน Event types ประเภทเหตุ�ารณ์ General ทั่วไป First day of week วัน�ร�ของสัปดาห์ Time เวลา Return Today Return วันนี้ Return Today Today Return Today วันนี้ ScheduleTypeEditDlg New event type ประเภทเหตุ�ารณ์ใหม่ Edit event type ��้ไขประเภทเหตุ�ารณ์ Import ICS file นำเข้าไฟล์ ICS Name: ชื่อ: Color: สี: ICS File: ไฟล์ ICS: Cancel button ย�เลิ� Save button บันทึ� The name can not only contain whitespaces ชื่อนี้ไม่สามารถมีเฉพาะช่องว่างได้ Enter a name please �รุณาป้อนชื่อ Shortcut Help วิธีใช้ Delete event ลบ�ิจ�รรม Copy ทำสำเนา Cut ตัด Paste วาง Delete ลบ Select all เลือ�ทั้งหมด SidebarCalendarWidget Y ป M ด TimeJumpDialog Go button ไป UserloginWidget Sign In button เข้าสู่ระบบ Sign Out button ออ�จา�ระบบ YearFrame Y ป today Today Today วันนี้ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_tr.ts000066400000000000000000001327541523260663500265410ustar00rootroot00000000000000 AccountItem Sync successful Eşitleme başarılı Network error Ağ hatası Server exception Sunucu istisnası Storage full Hafıza dolu AccountManager Local account Yerel hesap Event types Etkinlik türleri CColorPickerWidget Color Renk Cancel button İptal Save button Kaydet CDayMonthView Monday Pazartesi Tuesday Salı Wednesday Çarşamba Thursday Perşembe Friday Cuma Saturday Cumartesi Sunday Pazar CDayWindow Y Y M A D G Lunar Ay CGraphicsView New Event Yeni Etkinlik CMonthScheduleNumItem %1 more %1 daha fazla CMonthView New event Yeni etkinlik New Event Yeni Etkinlik CMonthWindow Y Y CMyScheduleView My Event Etkinliğim OK button Tamam Delete button Sil Edit button Düzenle CPushButton New event type Yeni etkinlik türü CScheduleDlg New Event Yeni Etkinlik Edit Event Etkinliği Düzenle End time must be greater than start time Bitiş zamanı başlangıç ​​zamanından büyük olmalıdır OK button Tamam Never Asla At time of event Etkinlik anında 15 minutes before 15 dakika önce 30 minutes before 30 dakika önce 1 hour before 1 saat önce 1 day before 1 gün önce 2 days before 2 gün önce 1 week before 1 hafta önce On start day (9:00 AM) Başlangıç ​​gününde (09:00) time(s) zaman(lar) Enter a name please Lütfen bir ad girin The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Type: Tür: Description: Açıklama: All Day: Tüm Gün: Starts: Başlangıç: Ends: Bitiş: Remind Me: Hatırlat: Repeat: Tekrar: End Repeat: Tekrar Sonu: Calendar account: Takvim hesabı: Calendar account Takvim hesabı Type Tür Description Açıklama All Day Tüm Gün Time: Zaman: Time Zaman Solar Güneş Lunar Ay Starts Başlangıç Ends Bitiş Remind Me Hatırlat Repeat Tekrar Daily Günlük Weekdays Hafta içi Weekly Haftalık Monthly Aylık Yearly Yıllık End Repeat Tekrar Sonu After Sonra On Açık Cancel button İptal Save button Kaydet CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tekrarlanan bir etkinliğin tüm tekrarlamaları, tüm gün boyunca aynı duruma sahip olmalıdır. Do you want to change all occurrences? Tüm tekrarlamaları değiştirmek ister misiniz? Cancel button İptal Change All Tümünü Değiştir You are changing the repeating rule of this event. Bu etkinliğin tekrarlama kuralını değiştiriyorsunuz. You are deleting an event. Bir etkinliği siliyorsunuz. Are you sure you want to delete this event? Bu etkinliği silmek istediğinizden emin misiniz? Delete button Sil Do you want to delete all occurrences of this event, or only the selected occurrence? Bu olayın tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsun? Delete All Tümünü Sil Delete Only This Event Yalnızca Bu Etkinliği Sil Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bunu ve bu olayın gelecekteki tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsunuz? Delete All Future Events Gelecekteki Tüm Etkinlikleri Sil You are changing a repeating event. Tekrarlanan bir etkinliği değiştiriyorsunuz. Do you want to change only this occurrence of the event, or all occurrences? Etkinliğin yalnızca bu tekrarlamasını mı yoksa tüm tekrarlamalarını mı değiştirmek istiyorsunuz? All Tümü Only This Event Sadece Bu Etkinlik Do you want to change only this occurrence of the event, or this and all future occurrences? Yalnızca etkinliğin bu etkinliğini mi, yoksa bunu ve gelecekteki tüm etkinlikleri değiştirmek istiyorsunuz? All Future Events Gelecekteki Tüm Etkinlikler You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Artık bir ay seçtiniz ve ay takvimi kurallarına göre hatırlatılacak. OK button Tamam CScheduleSearchDateItem Y Y M A D G CScheduleSearchItem Edit Düzenle Delete Sil All Day Tüm Gün CScheduleSearchView No search results Arama sonucu bulunamadı CScheduleView ALL DAY TÜM GÜN CSettingDialog import ICS file ICS dosyası içe aktar Manual Manuel 15 mins 15 Dakika 30 mins 30 Dakika 1 hour 1 Saat 24 hours 24 Saat Sync Now Şimdi senkronize et Last sync Son senkronizasyon Please go to the Control Center to change system settings Lütfen sistem ayarlarını değiştirmek için Kontrol Merkezine gidin Monday Pazartesi Sunday Pazar Use System Setting Sistem Ayarını Kullan 12-hour clock 12 saatlik zaman 24-hour clock 24 saatlik zaman CTimeEdit (%1 mins) (%1 dakika) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y Y M A W H D G Search events and festivals Etkinlikleri ve bayramları ara CWeekWindow Week Hafta Y Y CYearScheduleView All Day Tüm Gün No event Etkinlik yok CYearWindow Y Y CalendarWindow Calendar Takvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Takvim tarihleri ​​görüntülemek için bir araçtır ve aynı zamanda hayattaki her şeyi planlamak için akıllı bir günlük planlayıcısıdır. Calendarmainwindow Calendar Takvim Manage Yönet Privacy Policy Gizlilik Politikası Syncing... Eşitleniyor... Sync successful Senkronizasyon başarılı Sync failed, please try later Eşitleme başarısız, lütfen daha sonra deneyin CenterWidget All Day Tüm Gün DAccountDataBase Work Çalışma Life Yaşam Other Diğer DAlarmManager Close button Kapat One day before start Başlamadan bir gün önce Remind me tomorrow Bana yarın hatırlat Remind me later Bana daha sonra hatırlat 15 mins later 15 Dakika sonra 1 hour later 1 Saat sonra 4 hours later 4 Saat sonra Tomorrow Yarın Schedule Reminder Zamanlama hatırlatıcısı %1 to %2 %1 ila %2 Today Bugün DragInfoGraphicsView Edit Düzenle Delete Sil New event Yeni etkinlik New Event Yeni Etkinlik JobTypeListView export dışa aktar import ICS file ICS dosyası içe aktar You are deleting an event type. Bir etkinlik türünü siliyorsunuz. All events under this type will be deleted and cannot be recovered. Bu türün altındaki etkinlikler silinir ve geri getirilemez. Cancel button İptal Delete button Sil QObject Account settings Hesap ayarları Account Hesap Select items to be synced Senkronize edilecek öğeyi seçin Events Etkinlikler General settings Genel ayarlar Sync interval Senkronizasyon aralığı Manage calendar Takvimi yönet Calendar account Takvim hesabı Event types Etkinlik türleri General Genel First day of week Haftanın ilk günü Time Zaman Return Today Return Bugün Return Today Today Return Today Bugün ScheduleTypeEditDlg New event type Yeni etkinlik türü Edit event type Etkinlik türünü düzenle Import ICS file ICS dosyası içe aktar Name: Ad: Color: Renk: ICS File: ICS Dosyası: Cancel button İptal Save button Kaydet The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Enter a name please Lütfen bir ad girin Shortcut Help Yardım Delete event Etkinliği sil Copy Kopyala Cut Kes Paste Yapıştır Delete Sil Select all Tümünü seç SidebarCalendarWidget Y Y M A TimeJumpDialog Go button Git UserloginWidget Sign In button Giriş Sign Out button Çıkış YearFrame Y Y today Today Today Bugün linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_tzm.ts000066400000000000000000001401231523260663500267130ustar00rootroot00000000000000 AccountItem Sync successful تَشْك�يل م�نْجَح Network error تَكْل�ي� ن�تْوَرْك Server exception تَكْل�ي� س��َر Storage full تَخْز�ين م�كْمَل AccountManager Local account تَكْل�ي� ل�وكَل Event types تَكْل�ي� إ��ْت�نْ ت�يْبْس CColorPickerWidget Color تَكْل�ي� ك�رْو Cancel button تَكْل�ي� كَنْك�يل Save button تَكْل�ي� سَوْ� CDayMonthView Monday أَوْنْد�ي Tuesday ت�وْنْز�ي Wednesday وَنْز�ي Thursday ث�وْرْسْدَي Friday �ْر�يدَي Saturday سَت�ورْدَي Sunday س�نْدَي CDayWindow Y يَوْم M شَوْن D يَوْم Lunar ل�نَر CGraphicsView New Event ن�وْو ت�كْل�ي� CMonthScheduleNumItem %1 more %1 مَرَّة CMonthView New event ن�وْو ت�كْل�ي� New Event ن�وْو ت�كْل�ي� CMonthWindow Y يَوْم CMyScheduleView My Event ت�كْل�ي�ي OK button أَوْك Delete button تَكْل�ي� Edit button إ�د�ت CPushButton New event type ن�وْو ت�كْل�ي� ت�يْب CScheduleDlg New Event ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� Edit Event ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� End time must be greater than start time الوقت اللي مي لزز ينطوي ميد�ه دو وقت دكير OK button ⵜⴰⵎⵣⵓⵜ Never ⵜⴰⵎⵣⵓⵜ At time of event ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� ⴰⵣⵓ� 15 minutes before ⵜⴰⵎⵣⵓⵜ 15 ⴰⵎⵉ�ⵓṭ 30 minutes before ⵜⴰⵎⵣⵓⵜ 30 ⴰⵎⵉ�ⵓṭ 1 hour before ⵜⴰⵎⵣⵓⵜ 1 ⴰⵙⵔ 1 day before ⵜⴰⵎⵣⵓⵜ 1 ⴰⵙ 2 days before ⵜⴰⵎⵣⵓⵜ 2 ⴰⵙ 1 week before ⵜⴰⵎⵣⵓⵜ 1 ⴰⵙⵔ On start day (9:00 AM) ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� ⴰⵣⵓ� (9:00 ⴰⵎ) time(s) ⵜⴰⵎⵣⵓⵜ Enter a name please ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� ⴰⵣⵓ� The name can not only contain whitespaces ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� ⴰⵣⵓ� ⴰⵣⵓ� ⴰⵣⵓ� ⴰⵣⵓ� Type: ⵜⴰⵎⵣⵓⵜ: Description: ⵜⴰⵎⵣⵓⵜ: All Day: ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ�: Starts: ⵜⴰⵎⵣⵓⵜ: Ends: ⵜⴰⵎⵣⵓⵜ: Remind Me: ⵜⴰⵎⵣⵓⵜ: Repeat: ⵜⴰⵎⵣⵓⵜ: End Repeat: ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ�: Calendar account: ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ�: Calendar account ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� Type ⵜⴰⵎⵣⵓⵜ Description ⵜⴰⵎⵣⵓⵜ All Day ⵜⴰⵎⵣⵓⵜ ⴰⵣⵓ� Time: ⵜⴰⵎⵣⵓⵜ: Time زمن Solar شمس Lunar قمر Starts يبدأ Ends يوق� Remind Me تذكير Repeat تكرار Daily يومي Weekdays أيام الأسبوع Weekly أسبوعي Monthly شهري Yearly سنوي End Repeat إنهاء التكرار After بعد On �ي Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. كل التكرارات من الحدث المتكرر يجب أن تكون بن�س حالة اليوم整天. Do you want to change all occurrences? هل تريد تغيير جميع التكرارات؟ Cancel button إلغاء Change All تغيير جميع You are changing the repeating rule of this event. أنت تغيّر قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تمسح حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك �ي مسح هذا الحدث؟ Delete button مسح Do you want to delete all occurrences of this event, or only the selected occurrence? هل تريد مسح جميع التكرارات من هذا الحدث، أم �قط التكرار المختار؟ Delete All مسح جميع Delete Only This Event مسح هذا الحدث �قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل تريد مسح هذا الحدث وجميع التكرارات المستقبلية، أم �قط التكرار المختار؟ Delete All Future Events مسح جميع التكرارات المستقبلية You are changing a repeating event. تَتْرَكْ كَتْرَوْن� أَكْت��َيْتْ تَرَكْ كَتْرَوْن�. Do you want to change only this occurrence of the event, or all occurrences? تَتْرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن�, أَوْ ك�لْ كَتْرَوْن�؟ All ك�لْ Only This Event تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� Do you want to change only this occurrence of the event, or this and all future occurrences? تَتْرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن�, أَوْ تَرَكْ كَتْرَوْن� وَ ك�لْ كَتْرَوْن� تَرَكْ كَتْرَوْن�؟ All Future Events ك�لْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. تَتْرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن�, تَتْرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن�. OK button إ�يْكَرْ CScheduleSearchDateItem Y ي M م D د CScheduleSearchItem Edit تَرَكْ كَتْرَوْن� Delete تَرَكْ كَتْرَوْن� All Day ك�لْ كَتْرَوْن� CScheduleSearchView No search results لا تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� CScheduleView ALL DAY ك�لْ كَتْرَوْن� CSettingDialog import ICS file تَرَكْ كَتْرَوْن� ICS تَرَكْ كَتْرَوْن� Manual تَرَكْ كَتْرَوْن� 15 mins 15 دَق�يقَتْ 30 mins 30 دَق�يقَتْ 1 hour 1 سَاعَتْ 24 hours 24 سَاعَتْ Sync Now تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� Last sync تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� Please go to the Control Center to change system settings تَتْرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن�. Monday أَسْ�َرْ Sunday أَشْم�سْ Use System Setting تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� تَرَكْ كَتْرَوْن� 12-hour clock تَرَكْ كَتْرَوْن� 12 تَرَكْ كَتْرَوْن� 24-hour clock تَرَكْ كَتْرَوْن� 24 تَرَكْ كَتْرَوْن� CTimeEdit (%1 mins) (%1 دقايق) (%1 hour) (%1 ساعت) (%1 hours) (%1 ساعت) CTitleWidget Y ي M م W و D د Search events and festivals تلاشيل ت�اصيل و�عاليات CWeekWindow Week أسبوع Y ي CYearScheduleView All Day كل النهار No event لا وقته CYearWindow Y ي CalendarWindow Calendar كالياندر Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كالياندر دوده يرمازت ت�اصيل، ولي يرمازت كالياندر دوده ت�اصيل وقته يرمازت ت�اصيل كالياندر. Calendarmainwindow Calendar كالياندر Manage تديير Privacy Policy سياسة الخصوصية Syncing... تتم التزامن... Sync successful تم التزامن ناجح Sync failed, please try later �شل التزامن، يرمازت تجربة لاحقا CenterWidget All Day كل النهار DAccountDataBase Work عمل Life حياة Other أخرى DAlarmManager Close button إغلاق One day before start واحد يوم قبل البدء Remind me tomorrow تذكيرني غدا Remind me later تذكيرني لاحقا 15 mins later 15 دقايق لاحقا 1 hour later 1 ساعت ليه 4 hours later 4 ساعت ليه Tomorrow غد Schedule Reminder تذكير الجدول %1 to %2 '%1 ل %2' Today الى DragInfoGraphicsView Edit تmodifier Delete تdelete New event تتليه تيغ New Event تتلاه تيغ JobTypeListView export تتصدير import ICS file تتيرج ICS تيغ You are deleting an event type. تتلاه تيغ تيغ لـ تdelete. All events under this type will be deleted and cannot be recovered. تتلاه تيغ لـ تيغ تيغ لـ تdelete و تتلاه تيغ لـ تيغ تيغ لـ تretrieve. Cancel button تتلاه Delete button تdelete QObject Account settings تتلاه إعدادات الحساب Account الحساب Select items to be synced تتلاه تيغ لـ ت�步 Events تتلاه تيغ General settings تتلاه إعدادات عامة Sync interval تتلاه تيغ لـ ت�步 Manage calendar تتلاه تيغ لـ تتلاه Calendar account الحساب لـ التقويم Event types تتلاه تيغ General تتلاه First day of week أول يوم �ي الأسبوع Time تتلاه Return Today Return الى Return Today Today Return Today الى ScheduleTypeEditDlg New event type تايپ وقتي نيو Edit event type تايپ وقتي لكات Import ICS file تايغ ICS �ايل Name: اسم: Color: لون: ICS File: ICS �ايل: Cancel button تامين Save button تامين The name can not only contain whitespaces الاسم لزز ينطوي ميد�ه سبيس Enter a name please تايغ اسم بليز Shortcut Help تايغ Delete event تايغ وقتي Copy كوبى Cut كوت Paste باست Delete تايغ Select all تايغ كول SidebarCalendarWidget Y ي M م TimeJumpDialog Go button تايغ UserloginWidget Sign In button تايغ Sign Out button تايغ YearFrame Y ي today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ug.ts000066400000000000000000001407471523260663500265300ustar00rootroot00000000000000 AccountItem Sync successful ماس قەدەملەندى Network error تور خاتالىقى Server exception مۇلازىمىت�ر نورمالسىز Storage full بوشلۇق توشۇپ كەتتى AccountManager Local account يەرلىك ھ�سابات Event types كۈنتەرتىپ تۈرى CColorPickerWidget Color رەڭ Cancel button بىكار قىلىش Save button ساقلاش CDayMonthView Monday دۈشەنبە Tuesday سەيشەنبە Wednesday چارشەنبە Thursday پەيشەنبە Friday جۈمە Saturday شەنبە Sunday يەكشەنبە CDayWindow Y يىلى M ئاي D كۈنى Lunar د�ھقانلار كال�ندارى CGraphicsView New Event ي�ڭى كۈنتەرتىپ قۇرۇش CMonthScheduleNumItem %1 more يەنە %1 تۈر بار CMonthView New event كۈنتەرتىپ قۇرۇش New Event ي�ڭى كۈنتەرتىپ قۇرۇش CMonthWindow Y يىلى CMyScheduleView My Event كۈنتەرتىپىم OK button تامام Delete button ئۆچۈرۈش Edit button تەھرىرلەش CPushButton New event type كۈنتەرتىپ تۈرى قوشۇش CScheduleDlg New Event كۈنتەرتىپ قۇرۇش Edit Event كۈنتەرتىپنى تەھرىرلەش End time must be greater than start time ئاخىرلىشىش ۋاقتى باشلىنىش ۋاقتىدىن ك�يىن بولۇشى ك�رەك OK button تامام Never ھەرگىز At time of event كۈتەرتىپ باشلانغاندا 15 minutes before 15 مىنۇت بۇرۇن 30 minutes before 30 مىنۇت بۇرۇن 1 hour before 1 سائەت بۇرۇن 1 day before 1 كۈن بۇرۇن 2 days before 2 كۈن بۇرۇن 1 week before 1 ھەپتە بۇرۇن On start day (9:00 AM) كۈنتەرتىپ باشلانغان كۈن (چۈشتىن بۇرۇن 9 دا) time(s) ۋاقىت Enter a name please نام قۇرۇق قالمىسۇن The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Type: تۈرى: Description: مەزمۇنى: All Day: پۈتۈن كۈن: Starts: باشلىنىدىغان ۋاقىت: Ends: ئاخىرلىشىدىغان ۋاقىت: Remind Me: ئەسكەرتىش: Repeat: قايتىلاش: End Repeat: قايتىلاشنى ئاخىرلاشتۇرۇش: Calendar account: كال�ندار ھ�ساباتى: Calendar account كال�ندار ھ�ساباتى: Type تۈر Description مەزمۇن All Day پۈتۈن كۈن Time: ۋاقىت: Time ۋاقىت Solar مىلادىيە كال�ندارى Lunar د�ھقانلار كال�ندارى Starts باشلىنىدىغان ۋاقىت Ends ئاخىرلىشىدىغان ۋاقىت Remind Me ئەسكەرتىش Repeat قايتىلاش Daily ھەر كۈنى Weekdays خىزمەت كۈنى Weekly ھەر ھەپتە Monthly ھەر ئاي Yearly ھەر يىلى End Repeat قايتىلاشنى ئاخىرلاشتۇرۇش After دىن On غىچە ۋاقىت Cancel button بىكار قىلىش Save button ساقلاش CScheduleOperation All occurrences of a repeating event must have the same all-day status. تەكرارلانغان كۈنتەرتىپتىكى بارلىق تەكرارلىنىش چوقۇم پۈتۈن كۈنلۈك ھالەتتە بولۇشى ك�رەك. Do you want to change all occurrences? بارلىق تەكرارلاشلارنى ئۆزگەرتمەكچىمۇ؟ Cancel button بىكار قىلىش Change All ھەممىنى ئۆزگەرتىش You are changing the repeating rule of this event. كۈنتەرتىپنىڭ تەكرارلىنىش قائىدىسىنى ئۆزگەرتىۋاتىسىز. You are deleting an event. كۈنتەرتىپنى ئۆچۈرۈۋاتىسىز. Are you sure you want to delete this event? بۇ كۈنتەرتىپنى ئۆچۈرمەكچىمۇ؟ Delete button ئۆچۈرۈش Do you want to delete all occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆچۈرەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆچۈرەمسىز؟ Delete All ھەممىنى ئۆچۈرۈش Delete Only This Event مۇشۇنىلا ئۆچۈرۈرش Do you want to delete this and all future occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆچۈرەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆچۈرەمسىز؟ Delete All Future Events بارلىق كۈنتەرتىپنى ئۆچۈرۈش You are changing a repeating event. قايتىلىنىدىغان كۈنتەرتىپنى ئۆزگەرتىۋاتىسىز. Do you want to change only this occurrence of the event, or all occurrences? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆزگەرتەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆزگەرتەمسىز؟ All ھەممىنى Only This Event تاللانغىنىنى Do you want to change only this occurrence of the event, or this and all future occurrences? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆزگەرتەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆزگەرتەمسىز؟ All Future Events بارلىق كۈنتەرتىپلەر You have selected a leap month, and will be reminded according to the rules of the lunar calendar. تاللىغىنىڭىز كەبىسە ئ�يى، د�ھقانلار كال�ندارى بويىچە ئەسكەرتىدۇ OK button جەزىملەشتۈرۈش CScheduleSearchDateItem Y يىل M ئاي D كۈن CScheduleSearchItem Edit تەھرىرلەش Delete ئۆچۈرۈش All Day پۈتۈن كۈن CScheduleSearchView No search results ئىزدەش نەتىجىسى تىپىلمىدى CScheduleView ALL DAY پۈتۈن كۈن CSettingDialog import ICS file ICS �ايلى ئىلغۇرۇش Manual قولدا 15 mins ھەر 15 مىنۇتتا 30 mins ھەر 30 مىنۇتتا 1 hour ھەر 1 سائەتتە 24 hours ھەر 24 سائەتتە Sync Now ماس قەدەملەش Last sync ي�قىنقى ماس قەدەملىگەن ۋاقىت Please go to the Control Center to change system settings سىست�م ھەمدە ئىلغۇرۇش چۈشىنىشى ئۈچۈن كۆنترول مەركىزىغا بارىڭ Monday دۈشەنبە Sunday يەكشەنبە Use System Setting سىست�م ھەمدە ئىلغۇرۇش 12-hour clock 12 سائەتلىك 24-hour clock 24 سائەتلىك CTimeEdit (%1 mins) (%1 مىنۇت) (%1 hour) (%1 سائەت) (%1 hours) (%1 سائەت) CTitleWidget Y يىل M ئاي W ھەپتە D كۈن Search events and festivals كۈنتەرتىپ/بايرام ئىزدەش CWeekWindow Week ھەپتە Y يىلى CYearScheduleView All Day پۈتۈن كۈن No event كۈنتەرتىپ يوق CYearWindow Y يىلى CalendarWindow Calendar كال�ندار Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كال�ندار چ�سلا كۆرۈش، كۈنتەرتىپ باشقۇرۇشتا ئىشلىتىلىدىغان كىچىك قورال. Calendarmainwindow Calendar كال�ندار Manage باشقۇرۇش Privacy Policy شەخسىيەت سىياسىتى Syncing... ماس قەدەملەۋاتىدۇ... Sync successful ماس قەدەملەندى Sync failed, please try later ماس قەدەملەنمىدى، قايتا سىناڭ CenterWidget All Day پۈتۈن كۈن DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button تاقاش One day before start 1 كۈن بۇرۇن ئەسكەرتىش Remind me tomorrow ئەتە ئەسكەرتسۇن Remind me later بىر ئازدىن ك�يىن ئەسكەرتىش 15 mins later 15 مىنۇتتىن ك�يىن 1 hour later 1 سائەتىن ك�يىن 4 hours later 4 سائەتىن ك�يىن Tomorrow ئەتە Schedule Reminder كۈنتەرتىپ ئەسكەرتىشى %1 to %2 %1 دىن %2 گىچە Today Today DragInfoGraphicsView Edit تەھرىرلەش Delete ئۆچۈرۈش New event ي�ڭى كۈنتەرتىپ قۇرۇش New Event كۈنتەرتىپ قۇرۇش JobTypeListView export چыگارۇش import ICS file ICS �ايلى ئىلغۇرۇش You are deleting an event type. كۈنتەرت تۈرىنى ئۆچۈرۈۋاتىسىز. All events under this type will be deleted and cannot be recovered. بۇ كۈنتەرتىپ تۈرى ئاستىدىكى بارلىق كۈنتەرتىپ ئۆچۈرۈلىدۇ ھەمدە ئەسلىگە كەلتۈرگىلى بولمايدۇ Cancel button بىكار قىلىش Delete button ئۆچۈرۈش QObject Account settings ھ�سابات تەڭشىكى Account ھ�سابات Select items to be synced ماس قەدەملەيدىغان تۈرلەرنى تەڭشەڭ Events كۈنتەرتىپ General settings ئادەتتىكى تەڭشەكلەر Sync interval ماس قەدەملەش چاستوتىسى Manage calendar كال�ندار باشقۇرۇش Calendar account كال�ندار ھ�ساباتى: Event types كال�ندار تۈرى General ئۇنىۋ�رسال First day of week ھەپتە قايسى كۈندىن باشلانسۇن Time ۋاقىت Return Today Return بۈگۈنگە قايتىش Return Today Today Return Today بۈگۈنگە قايتىش ScheduleTypeEditDlg New event type كۈنتەرتىپ تۈرى قوشۇش Edit event type كۈنتەرتىپ تۈرىنى تەھرىرلەش Import ICS file ICS �ايلى ئىلغۇرۇش Name: نامى: Color: رەڭ: ICS File: ICS �ايلى: Cancel button بىكار قىلىش Save button ساقلاش The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Enter a name please نام قۇرۇق قالمىسۇن Shortcut Help ياردەم Delete event كۈنتەرتىپنى ئۆچۈرۈش Copy كۆچۈرۈش Cut ك�سىش Paste چاپلاش Delete ئۆچۈرۈش Select all ھەممىنى تاللاش SidebarCalendarWidget Y يىلى M ئاي TimeJumpDialog Go button ئاتلاش UserloginWidget Sign In button كىرىش Sign Out button چ�كىنىش YearFrame Y يىلى today Today Today بۈگۈن linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_uk.ts000066400000000000000000001533731523260663500265330ustar00rootroot00000000000000 AccountItem Sync successful У�пішна �инхронізаці� Network error Помилка мережі Server exception Виключенн� �ервера Storage full Переповнено �ховище даних AccountManager Local account Локальний обліковий запи� Event types Типи подій CColorPickerWidget Color Колір Cancel button Ска�увати Save button Зберегти CDayMonthView Monday Понеділок Tuesday Вівторок Wednesday Середа Thursday Четвер Friday П'�тниц� Saturday Субота Sunday �еділ� CDayWindow Y Р M М D Д Lunar Мі��чний CGraphicsView New Event �ова поді� CMonthScheduleNumItem %1 more і ще %1 CMonthView New event �ова поді� New Event �ова поді� CMonthWindow Y Р CMyScheduleView My Event Мо� поді� OK button Гаразд Delete button Вилучити Edit button Змінити CPushButton New event type �овий тип події CScheduleDlg New Event �ова поді� Edit Event Редагуванн� події End time must be greater than start time Кінцевий ча� не повинен передувати початковому ча�у OK button Гаразд Never �іколи At time of event У момент події 15 minutes before За 15 хвилин до події 30 minutes before За 30 хвилин до події 1 hour before За годину до події 1 day before За день до події 2 days before За 2 дні до події 1 week before За тиждень до події On start day (9:00 AM) У день початку (9:00) time(s) раз(ів) Enter a name please Будь ла�ка, введіть назву The name can not only contain whitespaces �азва не може �кладати�� лише з пробілів Type: Тип: Description: Опи�: All Day: Ве�ь день: Starts: Починаєть��: Ends: Завершуєть��: Remind Me: �агадати мені: Repeat: Повторенн�: End Repeat: Завершити повтори: Calendar account: Обліковий запи� календар�: Calendar account Обліковий запи� календар� Type Тип Description Опи� All Day Ве�ь день Time: Ча�: Time Ча� Solar Сон�чний Lunar Мі��чний Starts Починаєть�� Ends Кінці Remind Me �агадати мені Repeat Повторенн� Daily Щодн� Weekdays Дні тижн� Weekly Щотижн� Monthly Щомі��ц� Yearly Щорічно End Repeat Завершити повтори After Пі�л� On У Cancel button Ска�увати Save button Зберегти CScheduleOperation All occurrences of a repeating event must have the same all-day status. В у�іх повторень події має бути однаковий �тан щодо заповненн� подією у�ього дн�. Do you want to change all occurrences? Хочете змінити у�і повторенн�? Cancel button Ска�увати Change All Змінити у�і You are changing the repeating rule of this event. Ви змінюєте правило повторенн� цієї події. You are deleting an event. Ви вилучаєте запи� події. Are you sure you want to delete this event? Ви впевнені, що бажаєте вилучити цей запи� події? Delete button Вилучити Do you want to delete all occurrences of this event, or only the selected occurrence? Ви хочете вилучити у�і повторенн� цієї події чи лише позначений запи�? Delete All Вилучити в�і Delete Only This Event Вилучити лише цей запи� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ви хочете вилучити у�і майбутні повторенн� цієї події чи лише позначені запи�и? Delete All Future Events Вилучити у�і майбутні повторенн� You are changing a repeating event. Ви вно�ите зміни до повторюваної події. Do you want to change only this occurrence of the event, or all occurrences? Хочете змінити лише це повторенн� події чи у�і повторенн�? All У�і Only This Event Лише цей запи� Do you want to change only this occurrence of the event, or this and all future occurrences? Хочете змінити лише це повторенн� події чи у�і майбутні повторенн�? All Future Events У�і майбутні повторенн� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вами вибрано ви�око�ний мі��ць. Ва� буде попереджено відповідно до правил мі��чного календар�. OK button Гаразд CScheduleSearchDateItem Y Р M М D Д CScheduleSearchItem Edit Змінити Delete Вилучити All Day Ве�ь день CScheduleSearchView No search results �ічого не знайдено CScheduleView ALL DAY УВЕСЬ ДЕ�Ь CSettingDialog import ICS file Manual Вручну 15 mins 15 хвилин 30 mins 30 хвилин 1 hour 1 година 24 hours 24 години Sync Now Синхронізувати зараз Last sync О�танн� �инхронізаці� Please go to the <a href='/'>Control Center</a> to change system settings Monday Понеділок Sunday �еділ� Use System Setting 12-hour clock 12-годинний формат ча�у 24-hour clock 24-годинний формат ча�у CTimeEdit (%1 mins) (%1 хв.) (%1 hour) (%1 год.) (%1 hours) (%1 год.) CTitleWidget Y Р M М W Т D Д Search events and festivals Шукати події та �в�та CWeekWindow Week Тиждень Y Р CYearScheduleView All Day Ве�ь день No event �емає події CYearWindow Y Р CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. «Календар» — ін�трумент дл� перегл�ду календар� дат, також чудовий планувальник дл� �творенн� розкладів на кожен день. Calendarmainwindow Calendar Календар Manage Керувати Privacy Policy Правила конфіденційно�ті Syncing... Синхронізаці�... Sync successful У�пішна �инхронізаці� Sync failed, please try later Помилка �инхронізації. Будь ла�ка, повторіть �пробу пізніше CenterWidget All Day Ве�ь день DAccountDataBase Work Робота Life Житт� Other Інше DAlarmManager Close button Закрити One day before start За день до початку Remind me tomorrow �агадати мені завтра Remind me later �агадати мені пізніше 15 mins later За 15 хвилин 1 hour later За 1 годину 4 hours later За 4 години Tomorrow Завтра Schedule Reminder Розклад нагадуванн� %1 to %2 з %1 до %2 Today Сьогодні DragInfoGraphicsView Edit Редагувати Delete Видалити New event �ова поді� New Event �ова поді� JobTypeListView export import ICS file You are deleting an event type. Ви вилучаєте тип події. All events under this type will be deleted and cannot be recovered. У�і події цього типу буде вилучено, їх не можна буде відновити. Cancel button Ска�увати Delete button Вилучити QObject Account settings Параметри облікового запи�у Account Обліковий запи� Select items to be synced Виберіть запи�и дл� �инхронізації Events Події General settings Загальні параметри Sync interval Інтервал �инхронізації Manage calendar Керувати календарем Calendar account Обліковий запи� календар� Event types Типи подій General Загальне First day of week Перший день тижн� Time Ча� Return Today Return Сьогодні Return Today Today Return Today Сьогодні ScheduleTypeEditDlg New event type �овий тип події Edit event type Редагувати тип події Import ICS file Name: �азва: Color: Колір: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Ска�увати Save button Зберегти The name can not only contain whitespaces �азва не може �кладати�� лише з пробілів Enter a name please Будь ла�ка, введіть назву Shortcut Help Допомога Delete event Вилучити подію Copy Копіювати Cut Вирізати Paste В�тавити Delete Вилучити Select all Вибрати в�е SidebarCalendarWidget Y Р M М TimeJumpDialog Go button Перейти UserloginWidget Sign In button Увійти Sign Out button Вийти YearFrame Y Р today Today Today Сьогодні linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_ur.ts000066400000000000000000001360401523260663500265320ustar00rootroot00000000000000 AccountItem Sync successful سنس کیسیل Network error نیٹ ورک گر �و گیا Server exception سیور اکسيشن Storage full سٹوریج پوری AccountManager Local account لوکل اکاؤنٹ Event types واقعات کے نوع CColorPickerWidget Color رنگ Cancel button ریٹر Save button ذخیر� کریں CDayMonthView Monday پیر Tuesday ماو Wednesday اتوار Thursday جمعرات Friday پنجاب Saturday شنب� Sunday اتوار CDayWindow Y ی M ام D ڈی Lunar چاندی CGraphicsView New Event نیو واقع� CMonthScheduleNumItem %1 more %1 زیاد� CMonthView New event نیو واقع� New Event نیو واقع� CMonthWindow Y ی CMyScheduleView My Event میرا واقع� OK button اکی Delete button حذ� Edit button ویڈیٹ CPushButton New event type نیو واقع� نوع CScheduleDlg New Event نیا ایونٹ Edit Event ایونٹ ویڈیٹ کریں End time must be greater than start time شروع کے وقت سے زیاد� اختتام وقت �ونا چا�یے OK button ٹھیک Never �ر کبھی ن�یں At time of event ایونٹ کے وقت 15 minutes before 15 منٹ پ�لے 30 minutes before 30 منٹ پ�لے 1 hour before 1 گھنٹ� پ�لے 1 day before 1 دن پ�لے 2 days before 2 دن پ�لے 1 week before 1 ��ت� پ�لے On start day (9:00 AM) شروع کے دن (9:00 AM) time(s) ٹائم(س) Enter a name please برا� کرم ایک نام درج کریں The name can not only contain whitespaces نام صر� �یڈ سپیس کے ذریع� ن�یں �و سکتا Type: ٹائپ: Description: Description: All Day: پورا دن: Starts: شروع �وتا �ے: Ends: ختم �وتا �ے: Remind Me: مجھے یاد دیں: Repeat: تکرار: End Repeat: تکرار ختم کریں: Calendar account: کیلنڈر اکاونٹ: Calendar account کیلنڈر اکاونٹ Type ٹائپ Description Description All Day پورا دن Time: ٹائم: Time وقت Solar سولار Lunar لور Starts شروع Ends نهاية Remind Me ذكّرني Repeat تكرار Daily يومي Weekdays أيام الأسبوع Weekly أسبوعي Monthly 월간 Yearly سنوي End Repeat نهاية التكرار After بعد On عند Cancel button الغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. تمامًا، ایک تکراری واقع� کی تمام واقعات کے ایک �ی تمام دن کی حیثیت �ونی چا�ئے۔ Do you want to change all occurrences? آپ تمام واقعات کو تبدیل کرنا چا�تے �یں؟ Cancel button الغاء Change All تمام تبدیل کریں You are changing the repeating rule of this event. آپ ایک تکراری قاعد� تبدیل کر ر�ے �یں۔ You are deleting an event. آپ ایک واقع� حذ� کر ر�ے �یں۔ Are you sure you want to delete this event? کیا آپ اس واقع� کو حذ� کرنا چا�تے �یں؟ Delete button حذ� کریں Do you want to delete all occurrences of this event, or only the selected occurrence? آپ اس واقع� کی تمام واقعات حذ� کرنا چا�تے �یں یا صر� منتخب واقع�؟ Delete All تمام حذ� کریں Delete Only This Event صر� اس واقع� کو حذ� کریں Do you want to delete this and all future occurrences of this event, or only the selected occurrence? آپ اس واقع� اور اس کی تمام مستقبل کی واقعات حذ� کرنا چا�تے �یں یا صر� منتخب واقع�؟ Delete All Future Events تمام مستقبل واقعات حذ� کریں You are changing a repeating event. آپ ایک د�رائی جاری� واقع� تبدیل کر ر�ے �یں۔ Do you want to change only this occurrence of the event, or all occurrences? کیا آپ ایک واقع� کی صر� ی� واقع� تبدیل کرنا چا�تے �یں یا تمام واقعات؟ All تمام Only This Event صر� ی� واقع� Do you want to change only this occurrence of the event, or this and all future occurrences? کیا آپ ایک واقع� کی صر� ی� واقع� تبدیل کرنا چا�تے �یں یا ی� اور تمام مستقبل کے واقعات؟ All Future Events تمام مستقبل کے واقعات You have selected a leap month, and will be reminded according to the rules of the lunar calendar. آپ نے ایک چاندی کے م�ینے کا انتخاب کیا �ے، اور آپ کو ما� مسیح کے قواعد کے مطابق یاد دلایا جائے گا۔ OK button ٹھیک �ے CScheduleSearchDateItem Y ج M م D د CScheduleSearchItem Edit تبدیل کریں Delete حذ� کریں All Day تمام دن CScheduleSearchView No search results کوئی تلاش نتائج ن�یں ملا CScheduleView ALL DAY تمام دن CSettingDialog import ICS file ICS �ائل استور کریں Manual �نڈل کریں 15 mins 15 منٹ 30 mins 30 منٹ 1 hour 1 گھنٹ� 24 hours 24 گھنٹ� Sync Now اب سینکر کریں Last sync آخری سینکر Please go to the Control Center to change system settings ل�ذا سسٹم سیٹنگ تبدیل کرنے کے لئے کنٹرول سینٹر جائیں۔ Monday اتوار Sunday ��ت� Use System Setting سیسٹم سیٹنگ استعمال کریں 12-hour clock 12 گھنٹ� گھڑی 24-hour clock 24 گھنٹ� گھڑی CTimeEdit (%1 mins) (%1 دقیق�) (%1 hour) (%1 گھنٹ�) (%1 hours) (%1 گھنٹے) CTitleWidget Y ج M م W اے D د Search events and festivals واقعات اور تقریبات تلاش کریں CWeekWindow Week ��ت� Y 'ج' CYearScheduleView All Day پورا دن No event کوئی واقع� ن�یں CYearWindow Y 'ج' CalendarWindow Calendar کیلینڈر Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. کیلینڈر ایک ڈیٹس دیکھنے کے لئے اور ایک ذ�ین روزان� پلانر �ے جو زندگی کے تمام چیزوں کو سکیولڈ کرنے کے لئے استعمال کیا جاتا �ے۔ Calendarmainwindow Calendar کیلینڈر Manage میںج�ر Privacy Policy خصوصیتیں پالیسی Syncing... سنسن کر ر�ے �یں... Sync successful سنسن کامیابی سے �و گیا Sync failed, please try later سنسن کا �یل �و گیا، کچھ دیر بعد کوشش کریں CenterWidget All Day پورا دن DAccountDataBase Work کام Life زندگی Other دوسرے DAlarmManager Close button بند کریں One day before start شروع �ونے کے ایک دن پ�لے Remind me tomorrow میری یاد دیں کل Remind me later میری یاد دیں بعد 15 mins later 15 دقیق� بعد 1 hour later 1 گھنٹ� بعد 4 hours later 4 گھنٹ� بعد Tomorrow کل Schedule Reminder نظم یادگار %1 to %2 '%1 تا %2' Today آج DragInfoGraphicsView Edit ویرایش Delete حذ� New event نیا واقع� New Event نیا واقع� JobTypeListView export تصدير import ICS file ICS �ائل درآمد You are deleting an event type. آپ ایک واقع� نوع حذ� کر ر�ے �یں۔ All events under this type will be deleted and cannot be recovered. اس نوع کے تمام واقعات حذ� کر دیے جائیں گے اور با�ر لے جاٸے جا سکتے �یں۔ Cancel button رکو Delete button حذ� QObject Account settings اکاؤنٹ سیٹنگز Account اکاؤنٹ Select items to be synced سینکچن کے لیے آئٹم منتخب کریں Events واقعات General settings عام سیٹنگز Sync interval سینکچن �اصل� Manage calendar کیلینڈر �دایت کریں Calendar account کیلینڈر اکاؤنٹ Event types واقع� نوع General عام First day of week ��تے کا پ�لا دن Time وقت Return Today Return آج Return Today Today Return Today آج ScheduleTypeEditDlg New event type نیو ایونٹ ٹائپ Edit event type ایڈیٹ ایونٹ ٹائپ Import ICS file ایکس �ائل ایمپورٹ کریں Name: نام: Color: کرور: ICS File: ایکس �ائل: Cancel button انسول Save button سیو The name can not only contain whitespaces نام صر� �یڈریاکس کے ذریعے �وسکتا �ے Enter a name please اپنا نام درج کریں Shortcut Help مدد Delete event ایونٹ �ٹا دیں Copy کاپی Cut کٹ Paste پیسٹ Delete �ٹا دیں Select all سیلکٹ �ر چیز SidebarCalendarWidget Y ی M م TimeJumpDialog Go button جایں UserloginWidget Sign In button سائن ان Sign Out button سائن آؤٹ YearFrame Y ی today Today Today آج linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_vi.ts000066400000000000000000001343611523260663500265260ustar00rootroot00000000000000 AccountItem Sync successful �ồng bộ thành công Network error Lỗi mạng Server exception Lỗi ngoại lệ máy chủ Storage full Ổ đĩa đầy AccountManager Local account Tài khoản địa phương Event types Loại sự kiện CColorPickerWidget Color Màu sắc Cancel button Hủy Save button Lưu CDayMonthView Monday Thứ hai Tuesday Thứ ba Wednesday Thứ tư Thursday Thứ năm Friday Thứ sáu Saturday Thứ bảy Sunday Chủ nhật CDayWindow Y Y M M D D Lunar Âm lịch CGraphicsView New Event Sự kiện mới CMonthScheduleNumItem %1 more thêm %1 CMonthView New event Sự kiện mới New Event Sự kiện mới CMonthWindow Y Y CMyScheduleView My Event Sự kiện của Tôi OK button OK Delete button Xóa Edit button Chỉnh sửa CPushButton New event type Loại sự kiện mới CScheduleDlg New Event Sự kiện mới Edit Event Chỉnh sửa Sự kiện End time must be greater than start time Th�i gian kết thúc phải lớn hơn th�i gian bắt đầu OK button OK Never Không bao gi� At time of event Vào th�i điểm sự kiện 15 minutes before trước 15 phút 30 minutes before trước 30 phút 1 hour before 1 gi� trước 1 day before 1 ngày trước 2 days before 2 ngày trước 1 week before 1 tuần trước On start day (9:00 AM) Bắt đầu lúc (9:00 AM) time(s) th�i gian(s) Enter a name please Vui lòng nhập tên The name can not only contain whitespaces Tên không thể chỉ chứa khoảng trắng Type: Loại: Description: Mô tả: All Day: Tất cả các ngày: Starts: Bắt đầu: Ends: Kết thúc: Remind Me: Nhắc nhở tôi: Repeat: Lặp lại: End Repeat: Kết thúc lặp lại: Calendar account: Tài khoản lịch: Calendar account Tài khoản lịch Type Loại Description Mô tả All Day Tất cả các ngày Time: Th�i gian: Time Th�i gian Solar Nhật lịch Lunar Âm lịch Starts Bắt đầu Ends Kết thúc Remind Me Nhắc nhở tôi Repeat Lặp lại Daily Hằng ngày Weekdays Các ngày trong tuần Weekly Hàng tuần Monthly Hàng tháng Yearly Hàng năm End Repeat Kết thúc lặp lại After Sau On Mở Cancel button Hủy Save button Lưu CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tất cả các lần xuất hiện của một sự kiện lặp lại phải có cùng trạng thái ngày. Do you want to change all occurrences? Bạn có muốn thay đổi tất cả các lần xuất hiện? Cancel button Hủy Change All Thay đổi tất cả You are changing the repeating rule of this event. Bạn đang thay đổi quy tắc lặp lại của sự kiện này. You are deleting an event. Bạn đã xóa một sự kiện Are you sure you want to delete this event? Bạn có muốn xóa sự kiện này không Delete button Xóa Do you want to delete all occurrences of this event, or only the selected occurrence? Bạn có muốn xóa tất cả các lần xuất hiện của sự kiện này hay chỉ xảy ra sự kiện đã ch�n? Delete All Xóa tất cả Delete Only This Event Chỉ xóa sự kiện này Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bạn có muốn xóa sự kiện này và tất cả các lần xuất hiện trong tương lai của sự kiện này hay chỉ xảy ra sự kiện đã ch�n? Delete All Future Events Xóa tất cả các sự kiện trong tương lai You are changing a repeating event. Bạn đang thay đổi một sự kiện lặp lại. Do you want to change only this occurrence of the event, or all occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này hay tất cả các sự kiện? All Tất cả Only This Event Chỉ sự kiện này Do you want to change only this occurrence of the event, or this and all future occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này, hoặc tất cả các lần xuất hiện trong tương lai? All Future Events Tất cả các sự kiện trong tương lai You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Bạn đã ch�n tháng nhuận, và sẽ được nhắc nhở theo quy tắc của lịch âm. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Chỉnh sửa Delete Xóa All Day Tất cả các ngày CScheduleSearchView No search results Không có kết quả tìm kiếm nào CScheduleView ALL DAY Tất cả các ngày CSettingDialog import ICS file Nhập tệp ICS Manual Tự chỉnh 15 mins 15 phút 30 mins 30 phút 1 hour 1 gi� 24 hours 24 gi� Sync Now �ồng bộ ngay Last sync �ồng bộ lần cuối Please go to the Control Center to change system settings Vui lòng truy cập Trung tâm �i�u khiển để thay đổi cài đặt hệ thống Monday Thứ hai Sunday Chủ nhật Use System Setting Sử dụng Cài đặt Hệ thống 12-hour clock �ồng hồ 12 gi� 24-hour clock �ồng hồ 24 gi� CTimeEdit (%1 mins) (%1 phút) (%1 hour) (%1 gi�) (%1 hours) (%1 gi�) CTitleWidget Y Y M M W W D D Search events and festivals Tìm sự kiện và lễ hội CWeekWindow Week Tuần Y Y CYearScheduleView All Day Tất cả các ngày No event Không có sự kiện nào CYearWindow Y Y CalendarWindow Calendar Lịch Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Lịch là một công cụ để xem ngày, và cũng là công cụ sắp xếp kế hoạch, sự kiện hàng ngày thông minh. Calendarmainwindow Calendar Lịch Manage Quản lý Privacy Policy Chính sách bảo mật Syncing... �ồng bộ hóa... Sync successful �ồng bộ thành công Sync failed, please try later �ồng bộ thất bại, vui lòng thử lại sau CenterWidget All Day Tất cả các ngày DAccountDataBase Work Công việc Life Cuộc sống Other Khác DAlarmManager Close button �óng lại One day before start Một ngày trước khi bắt đầu Remind me tomorrow Nhắc tôi ngày mai Remind me later Nhắc tôi sau 15 mins later 15 phút sau 1 hour later 1 gi� sau 4 hours later 4 gi� sau Tomorrow Ngày mai Schedule Reminder Lịch trình nhắc nhở %1 to %2 '%1 đến %2' Today Hôm nay DragInfoGraphicsView Edit Chỉnh sửa Delete Xóa New event Sự kiện mới New Event Sự kiện mới JobTypeListView export xuất import ICS file nhập tệp ICS You are deleting an event type. Bạn đang xóa một loại sự kiện. All events under this type will be deleted and cannot be recovered. Tất cả sự kiện thuộc loại này sẽ bị xóa và không thể khôi phục. Cancel button Hủy Delete button Xóa QObject Account settings Cài đặt tài khoản Account Tài khoản Select items to be synced Ch�n các mục cần đồng bộ Events Sự kiện General settings Cài đặt chung Sync interval Khoảng th�i gian đồng bộ Manage calendar Quản lý lịch Calendar account Tài khoản lịch Event types Loại sự kiện General Tổng quát First day of week Ngày đầu tuần Time Th�i gian Return Today Return Hôm nay Return Today Today Return Today Hôm nay ScheduleTypeEditDlg New event type Loại sự kiện mới Edit event type Chỉnh sửa loại sự kiện Import ICS file Nhập tệp ICS Name: Tên: Color: 'Màu:' ICS File: 'Tệp ICS:' Cancel button Hủy Save button Lưu The name can not only contain whitespaces Tên không chỉ chứa khoảng trống Enter a name please Vui lòng nhập tên Shortcut Help Giúp đỡ Delete event Xóa sự kiện Copy Sao chép Cut Cắt Paste Dán Delete Xóa Select all Ch�n tất cả SidebarCalendarWidget Y Y M M TimeJumpDialog Go button �i UserloginWidget Sign In button �ăng nhập Sign Out button �ăng xuất YearFrame Y Y today Today Today Hôm nay linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_zh_CN.ts000066400000000000000000001315761523260663500271160ustar00rootroot00000000000000 AccountItem Sync successful �步�功 Network error 网络异常 Server exception �务器异常 Storage full 存储已满 AccountManager Local account 本地�户 Event types 日程类型 CColorPickerWidget Color 颜色 Cancel button � 消 Save button � 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y 年 M 月 D 日 Lunar 农历 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 还有%1项 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y 年 CMyScheduleView My Event 我的日程 OK button 确 定 Delete button 删 除 Edit button 编 辑 CPushButton New event type 新增日程类型 CScheduleDlg New Event 新建日程 Edit Event 编辑日程 End time must be greater than start time 结�时间需晚于开始时间 OK button 确 定 Never 从� At time of event 日程开始时 15 minutes before 15分钟� 30 minutes before 30分钟� 1 hour before 1�时� 1 day before 1天� 2 days before 2天� 1 week before 1周� On start day (9:00 AM) 日程�生当天(上�9点) time(s) 次� Enter a name please �称�能为空 The name can not only contain whitespaces �称�能设置为全空格,请修改 Type: 类型: Description: 内容: All Day: 全天: Starts: 开始时间: Ends: 结�时间: Remind Me: �醒: Repeat: ��: End Repeat: 结���: Calendar account: 日历�户: Calendar account 日历�户 Type 类型 Description 内容 All Day 全天 Time: 时间: Time 时间 Solar 公历 Lunar 农历 Starts 开始时间 Ends 结�时间 Remind Me �醒 Repeat �� Daily �天 Weekdays 工作日 Weekly �周 Monthly �月 Yearly �年 End Repeat 结��� After 于 On 于日期 Cancel button � 消 Save button � 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. ��日程的所有��必须具有相�的全天状�。 Do you want to change all occurrences? 您�更改所有���? Cancel button � 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的��规则。 You are deleting an event. 您正在删除日程。 Are you sure you want to delete this event? 您确定�删除此日程�? Delete button 删 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您�删除此日程的所有��,还是�删除所选��? Delete All 全部删除 Delete Only This Event 仅删除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您�删除此日程的这个��和所有将���,还是�删除所选��? Delete All Future Events 删除所有将�日程 You are changing a repeating event. 您正在更改��日程。 Do you want to change only this occurrence of the event, or all occurrences? 您�更改此日程的仅这一个��,还是更改它的所有��? All 全部日程 Only This Event 仅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您�更改此日程的这个��和所有将���,还是�更改所选��? All Future Events 所有将�日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您选择的是闰月,将按照农历规则�醒 OK button 确 定 CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 编辑 Delete 删除 All Day 全天 CScheduleSearchView No search results 无�索结果 CScheduleView ALL DAY 全天 CSettingDialog import ICS file 导入ICS文件 Manual 手动 15 mins �15分钟 30 mins �30分钟 1 hour �1�时 24 hours �24�时 Sync Now 立��步 Last sync 最近�步时间 Please go to the Control Center to change system settings 请�往控制中心更改系统设置 Monday 周一 Sunday 周日 Use System Setting 使用系统设置 12-hour clock 12�时制 24-hour clock 24�时制 CTimeEdit (%1 mins) (%1分钟) (%1 hour) (%1�时) (%1 hours) (%1�时) CTitleWidget Y 年 M 月 W 周 D 日 Search events and festivals �索日程/节日 CWeekWindow Week 周 Y 年 CYearScheduleView All Day 全天 No event 无日程 CYearWindow Y 年 CalendarWindow Calendar 日历 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日历是一款查看日期�管�日程的�工具。 Calendarmainwindow Calendar 日历 Manage 管� Privacy Policy ��政策 Syncing... 正在�步... Sync successful �步�功 Sync failed, please try later �步失败,请���试 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 关 闭 One day before start ��1天�醒 Remind me tomorrow 明天�醒 Remind me later ���醒 15 mins later 15分钟� 1 hour later 1�时� 4 hours later 4�时� Tomorrow 明天 Schedule Reminder 日程�醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 编辑 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView export 导出 import ICS file 导入ICS文件 You are deleting an event type. 您正在删除日程类型。 All events under this type will be deleted and cannot be recovered. 此日程类型下的所有日程都会删除且����。 Cancel button � 消 Delete button 删 除 QObject Account settings �户设置 Account �户 Select items to be synced 设置您的�步项 Events 日程 General settings 通用设置 Sync interval �步频率 Manage calendar 日历管� Calendar account 日历�户 Event types 日程类型 General 通用 First day of week �星期开始于 Time 时间 Return Today Return 返回今天 Return Today Today Return Today 返回今天 ScheduleTypeEditDlg New event type 新增日程类型 Edit event type 编辑日程类型 Import ICS file 导入ICS文件 Name: �称: Color: 颜色: ICS File: ICS文件: Cancel button � 消 Save button � 存 The name can not only contain whitespaces �称�能设置为全空格,请修改 Enter a name please �称�能为空 Shortcut Help 帮助 Delete event 删除日程 Copy �制 Cut 剪切 Paste 粘贴 Delete 删除 Select all 全选 SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go button 跳 转 UserloginWidget Sign In button 登 录 Sign Out button 退出登录 YearFrame Y 年 today Today Today 今天 linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_zh_HK.ts000066400000000000000000001571631523260663500271200ustar00rootroot00000000000000 AccountItem Sync successful �步�功 Network error 網絡異常 Server exception 伺�器異常 Storage full 存儲已滿 AccountManager Local account 本地帳戶 Event types 日程類型 CColorPickerWidget Color �色 Cancel � 消 button Save � 存 button CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y 年 M 月 D 日 Lunar 農曆 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y 年 CMyScheduleView My Event 我的日程 OK 確 定 button Delete 刪 除 button Edit 更 改 button CPushButton New event type 新增日程類型 CScheduleDlg New Event 新建日程 Edit Event 更改日程 End time must be greater than start time ��時間需晚於開始時間 OK 確 定 button Never 永� At time of event 日程開始時 15 minutes before 15分�� 30 minutes before 30分�� 1 hour before 1�時� 1 day before 1天� 2 days before 2天� 1 week before 1週� On start day (9:00 AM) 日程發生當天(上�9點) time(s) 次後 Enter a name please �稱�能為空 The name can not only contain whitespaces �稱�能設置為全空格,請修改 Type: 類型: Description: �述: All Day: 全天: Starts: 開始時間: Ends: ��時間: Remind Me: �醒: Repeat: �複: End Repeat: ���複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description �述 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends ��時間 Remind Me �醒 Repeat �複 Daily �天 Weekdays 工作日 Weekly �週 Monthly �月 Yearly �年 End Repeat ���複 After 於 On 於日期 Cancel � 消 button Save � 存 button CScheduleOperation All occurrences of a repeating event must have the same all-day status. �複日程的所有�複必須具有相�的全天狀態。 Do you want to change all occurrences? 您�更改所有�複嗎? Cancel � 消 button Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的�複�則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定�刪除此日程嗎? Delete 刪 除 button Do you want to delete all occurrences of this event, or only the selected occurrence? 您�刪除此日程的所有�複,還是�刪除所��複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您�刪除此日程的這個�複和所有將來�複,還是�刪除所��複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改�複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您�更改此日程的僅這一個�複,還是更改它的所有�複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您�更改此日程的這個�複和所有將來�複,還是�更改所��複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您�擇的是�月,將按照農曆�則�醒 OK 確 定 button CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 更改 Delete 刪除 All Day 全天 CScheduleSearchView No search results 無�索�果 CScheduleView ALL DAY 全天 CSettingDialog import ICS file 導入ICS文件 Manual 手動 15 mins �15分� 30 mins �30分� 1 hour �1�時 24 hours �24�時 Sync Now 立��步 Last sync 最近�步時間 Please go to the <a href='/'>Control Center</a> to change system settings 請�往控制中心更改系統設置 Monday 週一 Sunday 週日 Use System Setting 使用系統設置 12-hour clock 12�時制 24-hour clock 24�時制 CTimeEdit (%1 mins) (%1分�) (%1 hour) (%1�時) (%1 hours) (%1�時) CTitleWidget Y 年 M 月 W 週 D 日 Search events and festivals �索日程/節日 CWeekWindow Week 週 Y 年 CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y 年 CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期�管�日程的�工具。 Calendarmainwindow Calendar 日曆 Manage 管� Privacy Policy �隱政策 Syncing... 正在�步... Sync successful �步�功 Sync failed, please try later �步失敗,請�後�試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close 關 閉 button One day before start ��1天�醒 Remind me tomorrow 明天�醒 Remind me later �後�醒 15 mins later 15分�後 1 hour later 1�時後 4 hours later 4�時後 Tomorrow 明天 Schedule Reminder 日程�醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 更改 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView export 導出 import ICS file 導入ICS文件 You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且���復。 Cancel � 消 button Delete 刪 除 button QObject Account settings 帳戶設置 Account 賬戶 Select items to be synced 設置您的�步項 Events 日程 General settings 通用設置 Sync interval �步頻率 Manage calendar 日曆管� Calendar account 日曆帳戶 Event types 日程類型 General 通用 First day of week �星期開始於 Time 時間 Return Today 今天 Return Return Today Today 今天 Return Today ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Import ICS file 導入ICS文件 Name: �稱: Color: �色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: ICS文件: Cancel � 消 button Save � 存 button The name can not only contain whitespaces �稱�能設置為全空格,請修改 Enter a name please �稱�能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste �貼 Delete 刪除 Select all �擇全部 SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go 跳 轉 button UserloginWidget Sign In 登 錄 button Sign Out 退出登錄 button YearFrame Y 年 today Today 今天 Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar-service_zh_TW.ts000066400000000000000000001571551523260663500271510ustar00rootroot00000000000000 AccountItem Sync successful �步�功 Network error 網路異常 Server exception 伺�器異常 Storage full 儲存已滿 AccountManager Local account 本機帳戶 Event types 日程類型 CColorPickerWidget Color �色 Cancel � 消 button Save 儲 存 button CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y 年 M 月 D 日 Lunar 農曆 CGraphicsView New Event 建立日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 建立日程 New Event 建立日程 CMonthWindow Y 年 CMyScheduleView My Event 我的日程 OK 確 定 button Delete 刪 除 button Edit 編 輯 button CPushButton New event type 新增日程類型 CScheduleDlg New Event 建立日程 Edit Event 編輯日程 End time must be greater than start time ��時間需晚於開始時間 OK 確 定 button Never 從� At time of event 日程開始時 15 minutes before 15分�� 30 minutes before 30分�� 1 hour before 1�時� 1 day before 1天� 2 days before 2天� 1 week before 1週� On start day (9:00 AM) 日程發生當天(上�9點) time(s) 次後 Enter a name please �稱�能為空 The name can not only contain whitespaces �稱�能設置為全空格,請修改 Type: 類型: Description: 內容: All Day: 全天: Starts: 開始時間: Ends: ��時間: Remind Me: �醒: Repeat: �複: End Repeat: ���複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description 內容 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends ��時間 Remind Me �醒 Repeat �複 Daily �天 Weekdays 工作日 Weekly �週 Monthly �月 Yearly �年 End Repeat ���複 After 於 On 於日期 Cancel � 消 button Save 儲 存 button CScheduleOperation All occurrences of a repeating event must have the same all-day status. �複日程的所有�複必須具有相�的全天狀態。 Do you want to change all occurrences? 您�更改所有�複嗎? Cancel � 消 button Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的�複�則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定�刪除此日程嗎? Delete 刪 除 button Do you want to delete all occurrences of this event, or only the selected occurrence? 您�刪除此日程的所有�複,還是�刪除所��複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您�刪除此日程的這個�複和所有將來�複,還是�刪除所��複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改�複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您�更改此日程的僅這一個�複,還是更改它的所有�複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您�更改此日程的這個�複和所有將來�複,還是�更改所��複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您�擇的是�月,將按照農曆�則�醒 OK 確 定 button CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 編輯 Delete 刪除 All Day 全天 CScheduleSearchView No search results 找�到�果 CScheduleView ALL DAY 全天 CSettingDialog import ICS file 匯入ICS檔案 Manual 手動 15 mins �15分� 30 mins �30分� 1 hour �1�時 24 hours �24�時 Sync Now 立��步 Last sync 最近�步時間 Please go to the <a href='/'>Control Center</a> to change system settings 請�往控制中心更改系統設定 Monday 週一 Sunday 週日 Use System Setting 使用系統設定 12-hour clock 12�時制 24-hour clock 24�時制 CTimeEdit (%1 mins) (%1分�) (%1 hour) (%1�時) (%1 hours) (%1�時) CTitleWidget Y 年 M 月 W 週 D 日 Search events and festivals �尋日程/節日 CWeekWindow Week 週 Y 年 CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y 年 CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期�管�日程的�工具。 Calendarmainwindow Calendar 日曆 Manage 管� Privacy Policy 隱�政策 Syncing... 正在�步... Sync successful �步�功 Sync failed, please try later �步失敗,請�後�試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close 關 閉 button One day before start ��1天�醒 Remind me tomorrow 明天�醒 Remind me later �後�醒 15 mins later 15分�後 1 hour later 1�時後 4 hours later 4�時後 Tomorrow 明天 Schedule Reminder 日程�醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 編輯 Delete 刪除 New event 建立日程 New Event 建立日程 JobTypeListView export 匯出 import ICS file 匯入ICS檔案 You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且���復。 Cancel � 消 button Delete 刪 除 button QObject Account settings 帳戶設定 Account 帳戶 Select items to be synced 設定您的�步項 Events 日程 General settings 一般設定 Sync interval �步頻率 Manage calendar 日曆管� Calendar account 日曆帳戶 Event types 日程類型 General 通用 First day of week �星期開始於 Time 時間 Return Today 今天 Return Return Today Today 今天 Return Today ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Import ICS file 匯入ICS檔案 Name: �稱: Color: �色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: ICS檔案: Cancel � 消 button Save 儲 存 button The name can not only contain whitespaces �稱�能設置為全空格,請修改 Enter a name please �稱�能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste 貼上 Delete 刪除 Select all 全� SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go 跳 轉 button UserloginWidget Sign In 登 入 button Sign Out 退出登入 button YearFrame Y 年 today Today 今天 Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar.ts000066400000000000000000001455471523260663500244020ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Use System Setting 24-hour clock 24-hour clock 12-hour clock 12-hour clock import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Manage calendar Event types Event types Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Calendar account Calendar account General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Name: Name: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ady.ts000066400000000000000000001410121523260663500252160ustar00rootroot00000000000000 AccountItem Sync successful تран�л�ци� у�пешна Network error Ошибка �ети Server exception И�ключение �ервера Storage full Пам�ть заполнена AccountManager Local account Локальный аккаунт Event types Типы �обытий CColorPickerWidget Color Цвет Cancel button Отменить Save button Сохранить CDayMonthView Monday Понедельник Tuesday Вторник Wednesday Среда Thursday Четверг Friday П�тница Saturday Суббота Sunday Во�кре�енье CDayWindow Y Й M М D Д Lunar Лунный CGraphicsView New Event �овое �обытие CMonthScheduleNumItem %1 more %1 еще CMonthView New event �овое �обытие New Event �овое �обытие CMonthWindow Y Й CMyScheduleView My Event Мое �обытие OK button Да Delete button Удалить Edit button Редактировать CPushButton New event type �овый тип �обыти� CScheduleDlg New Event ئەڭ ئەتە ھەدە Edit Event تەھرىرلا End time must be greater than start time تاماملاش ۋاقىتى بىرگە ھەققىيەتلىك بەشىدىن ھەققىيەتلىك كۆپ OK button ت�بىدىن Never ھەققىيەتلىك بىرگە At time of event ھەققىيەتلىك بىرگە ھەدە ۋاقىتىدا 15 minutes before 15 دىن ھەققىيەتلىك بىرگە 30 minutes before 30 دىن ھەققىيەتلىك بىرگە 1 hour before 1 ھەن ھەققىيەتلىك بىرگە 1 day before 1 كۈنى ھەققىيەتلىك بىرگە 2 days before 2 كۈنى ھەققىيەتلىك بىرگە 1 week before 1 هەپتە ھەققىيەتلىك بىرگە On start day (9:00 AM) بىرگە باشلىنىش كۈنى (9:00 AM) time(s) ۋاقىت(لار) Enter a name please ئىسم ئەگەر ب�رىشىڭىز ك�رەك The name can not only contain whitespaces ئىسم ئەگەر ئەتە ئىشلارنىڭ ئاراچە قىسقىچىلىقىنى ئەھۋاللىق Type: نەچە: Description: تەھرىرلا: All Day: كۈن بىرگە: Starts: بىرگە باشلىنىش: Ends: تاماملاش: Remind Me: ئادەتلىق: Repeat: تەكرارلا End Repeat: تەكرارنى تاماملا Calendar account: كۈن بىرگە ئەكەунت: Calendar account كۈن بىرگە ئەكەونت Type نەچە Description تەھرىرلا All Day كۈن بىرگە Time: ۋاقىت: Time زمان Solar Солнечный Lunar Лунный Starts �ачинает�� Ends Заканчивает Remind Me �апомни мне Repeat Повтор�ть Daily Ежедневно Weekdays Рабочие дни Weekly Еженедельно Monthly Ежеме��чно Yearly Ежегодно End Repeat О�тановить повтор After По�ле On В Cancel button Отменить Save button Сохранить CScheduleOperation All occurrences of a repeating event must have the same all-day status. В�е повтор�ющие�� �обыти� должны иметь одинаковый �тату� "ве�ь день". Do you want to change all occurrences? Вы хотите изменить в�е �обыти�? Cancel button Отменить Change All Изменить в�е You are changing the repeating rule of this event. Вы измен�ете повтор�ющую�� правило �того �обыти�. You are deleting an event. Вы удал�ете �обытие. Are you sure you want to delete this event? Вы уверены, что хотите удалить �то �обытие? Delete button Удалить Do you want to delete all occurrences of this event, or only the selected occurrence? Вы хотите удалить в�е �обыти� �того повтор�ющего��, или только выбранное? Delete All Удалить в�е Delete Only This Event Удалить только �то �обытие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Вы хотите удалить �то �обытие и в�е будущие, или только выбранное? Delete All Future Events Удалить в�е будущие �обыти� You are changing a repeating event. أنتم تغيرون حدثًا متكررًا. Do you want to change only this occurrence of the event, or all occurrences? هل ترغب �ي تغيير هذه الحالة �قط من الحدث، أم جميع الحالات؟ All الكل Only This Event �قط هذا الحدث Do you want to change only this occurrence of the event, or this and all future occurrences? هل ترغب �ي تغيير هذه الحالة �قط من الحدث، أم هذه الحالة والمستقبلية؟ All Future Events جميع الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، وستتم الإذن لك و�قًا لقواعد التقويم القمري. OK button أوكي CScheduleSearchDateItem Y ي M م D د CScheduleSearchItem Edit تعديل Delete حذ� All Day الكل �ي اليوم CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY الكل �ي اليوم CSettingDialog Sunday الأحد Monday الاثنين Use System Setting استخدم إعداد النظام 24-hour clock الساعة 24 ساعة 12-hour clock الساعة 12 ساعة import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقه 30 mins 30 دقيقه 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث السابق Please go to the Control Center to change system settings يرجى الذهاب إلى مركز التحكم لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y ي M م W س D د Search events and festivals بحث عن ال�عاليات والمناسبات CWeekWindow Week الأسبوع Y ي CYearScheduleView All Day ال整天 No event لا يوجد حدث CYearWindow Y ي CalendarWindow Calendar الป�ิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. الป�ิทินเป็นเครื่องมือใน�ารดูวันที่ �ละยังเป็นผู้วาง�ผนประจำวันอัจฉริยะเพื่อจัดตารางเรื่องต่างๆ ในชีวิต Calendarmainwindow Calendar الป�ิทิน Manage จัด�าร Privacy Policy นโยบายความเป็นส่วนตัว Syncing... �ำลังซิงค์... Sync successful ซิงค์สำเร็จ Sync failed, please try later �ารซิงค์ล้มเหลว �รุณาลองใหม่ในภายหลัง CenterWidget All Day ال整天 DAccountDataBase Work �ารทำงาน Life ชีวิต Other อื่นๆ DAlarmManager Close button ปิด One day before start หนึ่งวัน�่อนเริ่มต้น Remind me tomorrow เตือนฉันพรุ่งนี้ Remind me later เตือนฉันในภายหลัง 15 mins later 15 นาทีต่อไป 1 hour later 1 ს�ს�მ�რთლ� შემდეგ 4 hours later 4 ს�ს�მ�რთლ� შემდეგ Tomorrow ხვ�ლ Schedule Reminder შემდეგი �პირის გ�ნს�ზღვრ� %1 to %2 '%1 დ�ნ %2' Today დღეს DragInfoGraphicsView Edit რედ�ქტირებ� Delete წ�შლ� New event �ხ�ლი მ�მხმ�რებელი New Event �ხ�ლი მ�მხმ�რებელი JobTypeListView export ექსპ�რტი import ICS file იმპортშ ICS ფ�ილი You are deleting an event type. თქვენ წ�შლით მ�მხმ�რებელი ტიპს. All events under this type will be deleted and cannot be recovered. ყველ� მ�მხმ�რებელი �მ ტიპის ქვეშ წ�შლის დ� �რ შეიძლებ� �ღდგეს. Cancel button გ�უქმებ� Delete button წ�შლ� QObject Manage calendar კ�ლენდ�რის მ�რთვ� Event types მ�მხმ�რებელი ტიპები Account settings �კ�უნტის პ�რ�მეტრები Account �კ�უნტი Select items to be synced �ირჩიეთ სიის ელემენტები სინქრ�ნიზ�ციის მიზნით Events მ�მხმ�რებელები General settings ს�ზ�გ�დ� პ�რ�მეტრები Sync interval სინქრ�ნიზ�ციის ინტერვ�ლი Calendar account კ�ლენდ�რის �კ�უნტი General ს�ზ�გ�დ� First day of week თ�რიღის პირველი დღე Time დრ� Return Today Return დღეს Return Today Today Return Today დღეს ScheduleTypeEditDlg New event type ئەۋەن تىپى Edit event type تەكشۈرۈش تىپى Import ICS file ICS �ايلىنى كىرۈت Name: ئىسمى: Color: رەڭ: ICS File: ICS �ايلى: Cancel button بەرەلمەيدۇ Save button ساقلايدۇ The name can not only contain whitespaces ئىسمى ئەپەت ئەڭ ئەھەمپىيەتلىك ئىشلەپ چىقىرغا بارىدۇ Enter a name please ئىسمىنى كىرۈتىڭ Shortcut Help كىملىك Delete event ئەۋەنى چۈشۈرۈش Copy كۆپەرە Cut كىتىرە Paste بىرلاشتۇرۇش Delete چۈشۈرۈش Select all بەزىنى تەكشۈرۈش SidebarCalendarWidget Y يى M ئاينى TimeJumpDialog Go button ب�رىدۇ UserloginWidget Sign In button كىرگۈچ Sign Out button چыققۇچ YearFrame Y يى today Today Today بۈgün linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_af.ts000066400000000000000000001324211523260663500250330ustar00rootroot00000000000000 AccountItem Sync successful Sins suksesvol Network error Netwerk fout Server exception Server uitzondering Storage full Opslag vol AccountManager Local account Lokale rekening Event types Gebeurtenistipes CColorPickerWidget Color Kleur Cancel button Annuleer Save button Stoor CDayMonthView Monday Maandag Tuesday Dinsdag Wednesday Woensdag Thursday Donderdag Friday Vrydag Saturday Saterdag Sunday Sondag CDayWindow Y Y M M D D Lunar Lunaar CGraphicsView New Event Nuwe Gebeurtenis CMonthScheduleNumItem %1 more %1 meer CMonthView New event Nuwe gebeurtenis New Event Nuwe Gebeurtenis CMonthWindow Y Y CMyScheduleView My Event My Gebeurtenis OK button OK Delete button Verwyder Edit button Redigeer CPushButton New event type Nuwe gebeurtenistipe CScheduleDlg New Event Nieuwe wyd Edit Event Wyd wys End time must be greater than start time Eindtyd moet groter as begin tyd wees OK button AK Never Nooit At time of event By tyd van wyd 15 minutes before 15 minute voor 30 minutes before 30 minute voor 1 hour before 1 uur voor 1 day before 1 dag voor 2 days before 2 dae voor 1 week before 1 week voor On start day (9:00 AM) Op begin dag (9:00 AM) time(s) tyd(s) Enter a name please Voer asseblief 'n naam in The name can not only contain whitespaces Die naam kan nie slegs spasies bevat nie Type: Soort: Description: Beskrywing: All Day: Hele Dag: Starts: Begin: Ends: Eind: Remind Me: Herinner My: Repeat: Herhaal: End Repeat: Eind Herhaal: Calendar account: Kalenderrekening: Calendar account Kalenderrekening Type Soort Description Beskrywing All Day Hele Dag Time: Tyd: Time Tyd Solar Solaar Lunar Maan Starts Begin Ends Eind Remind Me Herinner my Repeat Herhaal Daily Daglik Weekdays Weekenddae Weekly Weelik Monthly Maandelik Yearly Jaarlik End Repeat Stop Herhaal After Na On Op Cancel button Kanselleer Save button Stoor CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle voorkomings van 'n herhalende gebeurtenis moet dieselfde volledig-dag status hê. Do you want to change all occurrences? Wen wil jy alle voorkomings verander? Cancel button Kanselleer Change All Verander Alles You are changing the repeating rule of this event. Jy verander die herhalende reël van hierdie gebeurtenis. You are deleting an event. Jy verwyder 'n gebeurtenis. Are you sure you want to delete this event? Is jy seker jy wil hierdie gebeurtenis verwyder? Delete button Verwyder Do you want to delete all occurrences of this event, or only the selected occurrence? Wen wil jy alle voorkomings van hierdie gebeurtenis verwyder, of slegs die gekose voorkoming? Delete All Verwyder Alles Delete Only This Event Verwyder Slegs Hierdie Gebeurtenis Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Wen wil jy hierdie en alle toekomstige voorkomings van hierdie gebeurtenis verwyder, of slegs die gekose voorkoming? Delete All Future Events Verwyder Alles Toekomstige Gebeurtenisse You are changing a repeating event. Jy verander 'n herhalende gebeurtenis. Do you want to change only this occurrence of the event, or all occurrences? Wen jy wil verander slegs hierdie voorkoms van die gebeurtenis, of alle voorkoms? All Alles Only This Event Slegs Hierdie Gebeurtenis Do you want to change only this occurrence of the event, or this and all future occurrences? Wen jy wil verander slegs hierdie voorkoms van die gebeurtenis, of hierdie en alle toekomstige voorkoms? All Future Events Alle Toekomstige Gebeurtenisse You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Jy het 'n skrikkelmaand gekies, en sal volgens die reëls van die maan kalender gewaarsku word. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Wysig Delete Verwyder All Day Hele Dag CScheduleSearchView No search results Geen soekresultate CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sondag Monday Maandag Use System Setting Gebruik Sisteem Instelling 24-hour clock 24-uur-klok 12-hour clock 12-uur-klok import ICS file importeer ICS-lêer Manual Handmatig 15 mins 15 minute 30 mins 30 minute 1 hour 1 uur 24 hours 24 ure Sync Now Synchroniseer Nou Last sync Laaste Synchronisering Please go to the Control Center to change system settings Gaan asseblief na die Beheer Sentrum om sisteem instellings te verander CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 uur) (%1 hours) (%1 ure) CTitleWidget Y Y M M W W D D Search events and festivals Soek gebeure en feeste CWeekWindow Week Week Y Y CYearScheduleView All Day Hele Daag No event Geen gebeur CYearWindow Y Y CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender is 'n instrument om datums te sien, en ook 'n slim dagplaner om alles in lewe te plan. Calendarmainwindow Calendar Kalender Manage Beheer Privacy Policy Privacybeleid Syncing... Sinsing... Sync successful Sinsing geslaag Sync failed, please try later Sinsing misluk, probeer asseblief later CenterWidget All Day Hele Daag DAccountDataBase Work Werk Life Lewe Other Ander DAlarmManager Close button Sluit One day before start Een dag voor start Remind me tomorrow Herinner my môre Remind me later Herinner my later 15 mins later 15 min later 1 hour later 1 uur later 4 hours later 4 uur later Tomorrow Môre Schedule Reminder Skeduler herinnering %1 to %2 '%1 tot %2' Today Vandag DragInfoGraphicsView Edit Wysig Delete Verwys New event Nieuwe gebeurtenis New Event Nieuwe Gebeurtenis JobTypeListView export uitvoer import ICS file importeer ICS-lêer You are deleting an event type. Jy verwyder 'n gebeurtenistipe. All events under this type will be deleted and cannot be recovered. Alle gebeurende onder hierdie tipe sal verwyder word en kan nie herstel word nie. Cancel button Kanselleer Delete button Verwyder QObject Manage calendar Beheer kalender Event types Gebeurtenistipes Account settings Rekeninginstellings Account Rekening Select items to be synced Kies items wat gesinkroniseer moet word Events Gebeurende General settings Algemene instellings Sync interval Sinkroniseringstempo Calendar account Kalenderrekening General Algemene First day of week Eerste dag van die week Time Tyd Return Today Return Vandag Return Today Today Return Today Vandag ScheduleTypeEditDlg New event type Nieuwe gebeurtenistype Edit event type Wijzig gebeurtenistype Import ICS file Importeer ICS-lêer Name: Naam: Color: Kleur: ICS File: ICS-lêer: Cancel button Annuleer Save button Stoor The name can not only contain whitespaces Die naam kan slegs blanco ruimtes bevat Enter a name please Voer asseblief 'n naam in Shortcut Help Hulp Delete event Verwijdere gebeurtenis Copy Kopieer Cut Knip Paste Plak Delete Verwijdere Select all Selekteer alles SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Ga UserloginWidget Sign In button Aanmeld Sign Out button Afmeld YearFrame Y Y today Today Today Vandag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_am_ET.ts000066400000000000000000001404511523260663500254340ustar00rootroot00000000000000 AccountItem Sync successful ስינክ ይ��ጉ Network error �ትዕር �ቭ Server exception ሴርቨር የተገ� አይ�ት Storage full ማስታወሻ የሙሉ AccountManager Local account የመደብ አካунት Event types ስ�ገታት አይ�ት CColorPickerWidget Color መጋ� Cancel button መጥ� Save button ማስቀመጥ CDayMonthView Monday ሰኞ Tuesday ማክሰኞ Wednesday ረቡዕ Thursday �ሙስ Friday አርብ Saturday ቅዳሜ Sunday ቅዳሜ CDayWindow Y የ M መ D ወ Lunar �ጋሥ CGraphicsView New Event አዲስ የስ�ገት CMonthScheduleNumItem %1 more %1 የተጨመረ CMonthView New event አዲስ የስ�ገት New Event አዲስ የስ�ገት CMonthWindow Y የ CMyScheduleView My Event የኔ የስ�ገት OK button አ� Delete button ጥաrix Edit button መቃጠ� CPushButton New event type አዲስ የስ�ገት አይ�ት CScheduleDlg New Event አዲስ የ�ርጫ Edit Event �ርጫ ይዘን End time must be greater than start time መጨረሻ ጊዜ የመጀመሪያ ጊዜ በላይ �� OK button አይ� Never ማንኛ At time of event �ርጫ የተለያዩ ጊዜ 15 minutes before 15 ዓይ�ት በ�ት 30 minutes before 30 ዓይ�ት በ�ት 1 hour before 1 ሰዓት በ�ት 1 day before 1 ዓመት በ�ት 2 days before 2 ዓመት በ�ት 1 week before 1 ደynamo በ�ት On start day (9:00 AM) መጀመሪያ ዓመት ላይ (9:00 ሰዓት) time(s) ጊዜ(ዎች) Enter a name please እባክህ የ�ርጫ ስ� ይ�ቡ The name can not only contain whitespaces ስ� በጣ� የ�ርጫ አይ�ት በማይኖር �� Type: ጥር: Description: ማ tả: All Day: �ሉ� ዓመት: Starts: �� ላይ: Ends: ማድረ� ላይ: Remind Me: እኔ ይከረክቡ: Repeat: ተደጋጋሚ: End Repeat: ተደጋጋሚ ማድረ�: Calendar account: ካሌንድር አካ�ንት: Calendar account ካሌንድር አካ�ንት Type ጥር Description ማ tả All Day �ሉ� ዓመት Time: ጊዜ: Time Ժամ Solar Արևել Lunar Լուսային Starts �կսվում է Ends Ավարտվում է Remind Me Հիշե�րու ինձ Repeat Կրկնիր Daily Օրական Weekdays Շաբաթվարկ Weekly Շաբաթական Monthly Ամսական Yearly �արեկան End Repeat Ավարտիր կրկնումը After Հետո On Ընթա�իկ Cancel button Չեղարկել Save button Պահպանել CScheduleOperation All occurrences of a repeating event must have the same all-day status. Կրկնվող իրադարձության բոլոր տեղադրումները պետք է ունենան միևնույն ամբողջ օրի վիճակը։ Do you want to change all occurrences? Արդյոք �անկանում եք փոխել բոլոր տեղադրումները? Cancel button Չեղարկել Change All Փոխել բոլորը You are changing the repeating rule of this event. Դուք փոխում եք այս իրադարձության կրկնումի կանոնը։ You are deleting an event. Դուք ջանքի իրադարձություն եք ջանանում։ Are you sure you want to delete this event? Անհատական վերահսկողությամբ �անկանում եք ջանքի այս իրադարձությունը? Delete button Ջանքի Do you want to delete all occurrences of this event, or only the selected occurrence? Անհատական վերահսկողությամբ �անկանում եք ջանքի այս իրադարձության բոլոր տեղադրումները, թե միայն ընտրվածը? Delete All Ջանքի բոլորը Delete Only This Event Ջանքի միայն այս իրադարձությունը Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Անհատական վերահսկողությամբ �անկանում եք ջանքի այս իրադարձությունը և բոլոր այնուհետև տեղադրումները, թե միայն ընտրվածը? Delete All Future Events Ջանքի բոլոր այնուհետև իրադարձությունները You are changing a repeating event. Դուք կրկնողական իրադարձություն փոխել եք Do you want to change only this occurrence of the event, or all occurrences? Դուք �անկանում եք փոխել միայն այս իրադարձության մի միակ տեսակը, թե՞ բոլորը? All Բոլորը Only This Event Միայն այս իրադարձությունը Do you want to change only this occurrence of the event, or this and all future occurrences? Դուք �անկանում եք փոխել միայն այս իրադարձության մի միակ տեսակը, թե՞ այս և բոլորը ապագայի իրադարձությունները? All Future Events Բոլորը ապագայի իրադարձությունները You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Դուք ընտրել եք տարեկան ամսաթիվ, և կարող եք նախազուրկ լինել լուսա�ան�ի օրինականությունների համաձայն OK button Այո CScheduleSearchDateItem Y Այո M Մայիս D Ընդամենը CScheduleSearchItem Edit Խմբագրել Delete Ջամախոսել All Day Ընդամենը օրը CScheduleSearchView No search results Որոնման արդյունքներ չկան CScheduleView ALL DAY ԸՆԴԱՄԵՆԸ Օ�Ը CSettingDialog Sunday նիստական Monday երկուշաբթի Use System Setting Օգտագործել համակարգի նախատեսումը 24-hour clock 24 ժամանակա�ույ� 12-hour clock 12 ժամանակա�ույ� import ICS file իմպորտել ICS ֆայլը Manual Կարգավորումներ 15 mins 15 րոպե 30 mins 30 րոպե 1 hour 1 ժամ 24 hours 24 ժամ Sync Now Ընթա�իկ համապատասխանություն Last sync Վերջին համապատասխանություն Please go to the Control Center to change system settings Խնդրում ենք գնանք Կառավարում կենտրոնը համակարգի նախատեսումները փոխելու համար CTimeEdit (%1 mins) (%1 ዓይ�ት) (%1 hour) (%1 ሰዓት) (%1 hours) (%1 ሰዓት) CTitleWidget Y የ M መ W � D ዜ Search events and festivals ስር�e የተመዘገቡ አ�ያዎች እና የአ�esome የተመዘገቡ ተዋህዶች CWeekWindow Week ማ�ት Y የ CYearScheduleView All Day �ሉ� ዓይ�ት No event አuc የተመዘገቡ አ�ያ CYearWindow Y የ CalendarWindow Calendar ካሌንዳር Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ካሌንዳር ዓይ�ቶችን የመ�ከት ��ክት ��� እና የተለይ የቀን የተመዘገበ �ርጫ �� ዓይ�ቶችን አስተያየት የሚሰጥተ�� Calendarmainwindow Calendar ካሌንዳር Manage መቆጣጠር Privacy Policy የመረዳት አመጣጥ Syncing... ማስተካከ� Sync successful ማስተካከ� ይ�ቅ Sync failed, please try later ማስተካከ� �ቻ ይ�ቅ� የ�ትሞክ የተገለጸ የተጨማሪ ይሞክር CenterWidget All Day �ሉ� ዓይ�ት DAccountDataBase Work ሥራ Life ሕይወት Other ሌላ DAlarmManager Close button �ጋ One day before start መ�ት የተመዘገቡ ዓይ�ት ይበ�ጥ Remind me tomorrow እኔ ለመ�ት ይከ�ተኛ Remind me later እኔ የተጨማሪ ይከ�ተኛ 15 mins later 15 ዓይ�ት የተጨማሪ ይከ�ተኛ 1 hour later 1 እሑድ በኔ� 4 hours later 4 እሑድ በኔ� Tomorrow �ርጫ Schedule Reminder ማስያ� የቀ茬 የማስታወስ ��ክት %1 to %2 '%1 ወደ %2' Today ዛሑ DragInfoGraphicsView Edit ማስተካከ� Delete ጥաrix New event አዲስ እเห New Event አዲስ እเห JobTypeListView export ክለት import ICS file ICS የไฟ� ተመ�ስ You are deleting an event type. �ርጫ እเห የድርጅት መሰረት የተለያዩ የተመ�ስ ይኖርታ� All events under this type will be deleted and cannot be recovered. ይህ የድርጅት መሰረት የሚገ� የ�ሉ እเห ይደርጋሉ እና የተለያዩ የተመ�ሰ የማይመ�ስ እንዲኖር እንደሚችሉ ይገኛሉ Cancel button መሰረ� Delete button ጥረ� QObject Manage calendar ካሌንደር ማስተዳደር Event types የሚያ� የድርጅት መሰረቶች Account settings አካ�ንት ማስተዳደር Account አካ�ንት Select items to be synced የሚመ�ስ የዚህ የ�ርጫ የተመ�ሰ የ�ርጫ ማ�ረጋት Events እเห General settings መ�ገበ ማስተዳደር Sync interval መመ�ስ ማለት Calendar account ካሌንደር አካ�ንት General መ�ገበ First day of week አመት �ስጢ ስናወር Time ጋር Return Today Return ዛሑ Return Today Today Return Today ዛሑ ScheduleTypeEditDlg New event type የስራ የተጠየቅ የክ�� Edit event type የስራ የተጠየቅ የክ�� �ርጫ Import ICS file ICS የክ�� ማስገቢያ Name: ስ�: Color: ማለት: ICS File: ICS የክ��: Cancel button መሰረ� Save button ማስቀመጥ The name can not only contain whitespaces ስ� የማያገ� የተጨረጚ �� እንዳይገኛ� Enter a name please እባክዎ �ርጫ የስ� ይስጠኛ� Shortcut Help እርዳታ Delete event ስራ ማሰረ� Copy ቀ coppie Cut ማስረጋ�ጋ Paste ይትስ Delete ማሰረ� Select all �ሉን� �ርጫ SidebarCalendarWidget Y የ M ወር TimeJumpDialog Go button መጣ UserloginWidget Sign In button �ባ Sign Out button መ�ረድ YearFrame Y የ today Today Today ዛ �ሽት linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ar.ts000066400000000000000000001352461523260663500250570ustar00rootroot00000000000000 AccountItem Sync successful الانزلاق ناجح Network error خطأ �ي الشبكة Server exception استثناء خادم Storage full المساحة ممتلئة AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color لون Cancel button إلغاء Save button ح�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y السنة M الشهر D اليوم Lunar القمرية CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more 1% أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y السنة CMyScheduleView My Event الحدث الخاص بي OK button موا�ق Delete button حذ� Edit button تحرير CPushButton New event type نوع حدث جديد CScheduleDlg New Event لا أحداث Edit Event تعديل الأحداث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button حسنا Never أبدا At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before 1 ساعة قبل 1 day before 1 يوم قبل 2 days before “2“يومين قبل 1 week before 1 أسبوع قبل On start day (9:00 AM) �ي يوم البَدْء (9:00 صباحا) time(s) الوقت(ج) Enter a name please أدخل اسمًا من �ضلك The name can not only contain whitespaces لا يمكن أن يحتوي الاسم �قط على مسا�ات بيضاء Type: النوع: Description: الوص�: All Day: طوال اليوم: Starts: يبدأ: Ends: ينتهي: Remind Me: ذكرني: Repeat: تكرار End Repeat: نهاية التكرار Calendar account: حساب الجدول: Calendar account حساب الجدول Type النوع Description الوص� All Day طوال اليوم Time: الوقت: Time الوقت Solar الشمسية Lunar القمرية Starts يبدأ Ends ينتهي Remind Me ذكرني Repeat تكرار Daily يوميا Weekdays أيام الأسبوع Weekly أسبوعيا Monthly شهريا Yearly سنويا End Repeat نهاية التكرار After بعد On تشغيل Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون لجميع حالات تكرار الحدث ن�س الوضع طوال اليوم. Do you want to change all occurrences? هل تريد تغيير كل الأحداث؟ Cancel button إلغاء Change All تغيير الكل You are changing the repeating rule of this event. أنت تغير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذ� حدث. Are you sure you want to delete this event? هل أنت متأكد من أنك تريد حذ� هذا الحدث؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل تريد حذ� جميع حالات هذا الحدث، أو �قط الأحداث المحددة؟ Delete All حذ� الكل Delete Only This Event حذ� هذا الحدث �قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل تريد حذ� هذا وجميع الحالات المستقبلية لهذا الحدث، أو �قط الأحداث المحددة؟ Delete All Future Events حذ� جميع الأحداث المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث متكرر. Do you want to change only this occurrence of the event, or all occurrences? هل تريد تغيير هذا الحدث �قط، أو كل الأحداث؟ All الجميع Only This Event هذا الحدث �قط Do you want to change only this occurrence of the event, or this and all future occurrences? هل تريد تغيير هذا الحدث �قط، أو هذا وكل الأحداث المستقبلية؟ All Future Events كل الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت الشهر nhuận، وستتم الإذن لك و�قًا للقواعد القمرية. OK button موا�ق CScheduleSearchDateItem Y سنة M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذ� All Day طوال اليوم CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY طوال اليوم CSettingDialog Sunday الأحد Monday الاثنين Use System Setting استخدم إعداد النظام 24-hour clock الساعة 24 ساعة 12-hour clock الساعة 12 ساعة import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث الأخير Please go to the Control Center to change system settings يرجى الانتقال إلى مركز التحكم لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقيقة) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y سنة M شهر W أسبوع D يوم Search events and festivals ابحث عن الأحداث والمناسبات CWeekWindow Week الأسبوع Y السنة CYearScheduleView All Day طوال اليوم No event لا يوجد حدث CYearWindow Y السنة CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو برنامج لعرض التواريخ وللتخطيط الذكي لجميع الأشياء �ي الحياة Calendarmainwindow Calendar التقويم Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جاري المزامنة... Sync successful تم التزامن بنجاح Sync failed, please try later �شل التزامن، من �ضلك حاول لاحقًا CenterWidget All Day طوال اليوم DAccountDataBase Work عمل Life حياة Other أخرى DAlarmManager Close button إغلاق One day before start يوم قبل البداية Remind me tomorrow ذكرني غدا Remind me later ذكرني لاحقا 15 mins later بعد 15 دقيقة 1 hour later بعد ساعة 4 hours later بعد 4 ساعات Tomorrow غدا Schedule Reminder تذكير بالبرنامج %1 to %2 '%1 إلى %2' Today اليوم DragInfoGraphicsView Edit تحرير Delete حذ� New event حدث جديد New Event حدث جديد JobTypeListView export تصدير import ICS file استيراد مل� ICS You are deleting an event type. أنت تقوم بإزالة نوع حدث. All events under this type will be deleted and cannot be recovered. سيتم حذ� جميع الأحداث ضمن هذا النوع ولا يمكن استعادةها. Cancel button إلغاء Delete button حذ� QObject Manage calendar إدارة التقويم Event types أنواع الأحداث Account settings إعدادات الحساب Account حساب Select items to be synced اختر العناصر التي سيتم تزامنها Events الأحداث General settings إعدادات عامة Sync interval �ترة التزامن Calendar account حساب التقويم General عام First day of week أول يوم من الأسبوع Time الوقت Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع حدث Import ICS file استيراد مل� ICS Name: الاسم : Color: 'اللون:' ICS File: 'مل� ICS:' Cancel button إلغاء Save button ح�ظ The name can not only contain whitespaces لا ي�سمح لاسم هذا النوع بالتمام �قط من ال�راغات Enter a name please من �ضلك أدخل اسمًا Shortcut Help مساعدة Delete event حذ� حدث Copy نسخ Cut قص Paste لصق Delete حذ� Select all تحديد الكل SidebarCalendarWidget Y السنة M الشهر TimeJumpDialog Go button اذهب UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y السنة today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ast.ts000066400000000000000000001340401523260663500252330ustar00rootroot00000000000000 AccountItem Sync successful الإسنك ناجح Network error أوшибка نت Server exception أوшибка سر�ر Storage full الخزن مل AccountManager Local account Cuenta local Event types Tipos d'eventos CColorPickerWidget Color Color Cancel button Anula Save button Gardar CDayMonthView Monday Luns Tuesday Marts Wednesday Miercoles Thursday Xerues Friday Viernes Saturday Sábado Sunday Domingo CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event Nuevu eventu CMonthScheduleNumItem %1 more %1 más CMonthView New event Nuevu eventu New Event Nuevu eventu CMonthWindow Y Y CMyScheduleView My Event Mi Eventu OK button OK Delete button Borrar Edit button Editar CPushButton New event type Nuevu tipo d'eventu CScheduleDlg New Event الحدث الجديد Edit Event ویریوکس الحدث End time must be greater than start time وقت انتهاء لابد أن يكون أكبر من وقت البداية OK button موا�ق Never 从� At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before 1 ساعة قبل 1 day before 1 يوم قبل 2 days before 2 أيام قبل 1 week before 1 أسبوع قبل On start day (9:00 AM) �ي يوم البداية (9:00 صباحا) time(s) وقت(ات) Enter a name please أدخل اسم من �ضلك The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على ال�راغات Type: نوع: Description: الوص�: All Day: 全日: Starts: يبدأ �ي: Ends: ينتهي �ي: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب الجدول: Calendar account حساب الجدول Type نوع Description الوص� All Day 全日 Time: وقت: Time الوقت Solar الشمسية Lunar القمرية Starts تبدأ Ends تنتهي Remind Me تذكّرني Repeat تكرار Daily يوميًا Weekdays أيام الأسبوع Weekly أسبوعيًا Monthly شهريًا Yearly سنويًا End Repeat إنهاء التكرار After بعد On �ي Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. كل مرات حدوث حدث تكراري يجب أن تكون بن�س حالة اليوم الكامل. Do you want to change all occurrences? هل ترغب �ي تغيير جميع المرات؟ Cancel button إلغاء Change All تغيير جميعها You are changing the repeating rule of this event. أنتم تغيرون قاعدة التكرار لهذا الحدث. You are deleting an event. أنتم تمسكون بحذ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك �ي حذ� هذا الحدث؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� جميع مرات هذا الحدث، أم �قط المرة المحددة؟ Delete All حذ� جميعها Delete Only This Event حذ� هذا الحدث �قط Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� هذا الحدث وجميع المرات المستقبلية له، أم �قط المرة المحددة؟ Delete All Future Events حذ� جميع المرات المستقبلية You are changing a repeating event. Esti cambiando un evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? ¿Quieres cambiáu solo esta ocurrencia del evento o todas las ocurrencias? All Todos Only This Event Solo este evento Do you want to change only this occurrence of the event, or this and all future occurrences? ¿Quieres cambiáu solo esta ocurrencia del evento o esta y todas las futuras ocurrencias? All Future Events Todos los eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Has seleccionáu un mes de luna, y serás recordáu según les regles del calendari lunar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edita Delete Elimina All Day Todo el día CScheduleSearchView No search results No hay resultados de búsqueda CScheduleView ALL DAY TODO EL D�A CSettingDialog Sunday Domingo Monday Lunes Use System Setting Usa la configuración del sistema 24-hour clock Reloj de 24 horas 12-hour clock Reloj de 12 horas import ICS file Importa un fichero ICS Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincroniza ahora Last sync Última sincronización Please go to the Control Center to change system settings Por favor, vaya al Centro de Control para cambiar la configuración del sistema CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos y festivales CWeekWindow Week Semana Y 'Y' CYearScheduleView All Day الكامل �ي اليوم No event لا حدث CYearWindow Y 'Y' CalendarWindow Calendar الجدول Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. الجدول هو أداة لعرض التواريخ، ومرآة ذكية لتنظيم كل شيء �ي الحياة اليومية. Calendarmainwindow Calendar الجدول Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جار� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later �شل التزامن، يرجى المحاولة لاحقاً CenterWidget All Day الكامل �ي اليوم DAccountDataBase Work العمل Life الحياة Other آخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكّرني غداً Remind me later تذكّرني لاحقاً 15 mins later 15 دقيقة لاحقاً 1 hour later Una hora más tarde 4 hours later Cuatro horas más tarde Tomorrow Mañana Schedule Reminder Recordatorio de programación %1 to %2 '%1 إلى %2' Today Hoy DragInfoGraphicsView Edit Editar Delete Eliminar New event Nuevo evento New Event Nuevo Evento JobTypeListView export exportar import ICS file importar un fitxer ICS You are deleting an event type. Estas eliminando un tipu d'eventu. All events under this type will be deleted and cannot be recovered. Todos los eventos subordinados a este tipu serán eliminados y non se podrán recuperar. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Gestionar calendariu Event types Tipos d'eventu Account settings Configuración d'accounts Account Account Select items to be synced Selecciona elementos pa sincronizar Events Eventos General settings Configuración xeneral Sync interval Intervalu de sincronización Calendar account Conta de calendariu General Xeneral First day of week Primer día de la semana Time Tiempo Return Today Return Hoy Return Today Today Return Today Retornar Hoy ScheduleTypeEditDlg New event type Tipu de evento nuevu Edit event type Editar tipu de evento Import ICS file Importar ficheru ICS Name: Nome: Color: Color: ICS File: Ficheru ICS: Cancel button Anular Save button Gardar The name can not only contain whitespaces El nome nun pue cuntener espacios en blancos Enter a name please Introduz un nome por favor Shortcut Help Ayuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Pegar Delete Eliminar Select all Seleccionar totu SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Cerrar sesión YearFrame Y Y today Today Today Hoxe linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_az.ts000066400000000000000000001474541523260663500250730ustar00rootroot00000000000000 AccountItem Sync successful Uğurlu eyniləşdirmə Network error Şəbəkə xətası Server exception Server istisnası Storage full Yaddaş dolub AccountManager Local account Yerli hesab Event types Tədbirin növləri CColorPickerWidget Color Rəng Cancel button İmtina Save button Saxlayın CDayMonthView Monday Bazar ertəsi Tuesday Çərşənbə axşamı Wednesday Çərşənbə Thursday Cümə axşamı Friday Cümə Saturday Şənbə Sunday Bazar CDayWindow Y İl M Ay D G Lunar Ay CGraphicsView New Event Yeni tədbir CMonthScheduleNumItem %1 more %1 daha çox CMonthView New event Yeni tədbir New Event Yeni tədbir CMonthWindow Y İl CMyScheduleView My Event Mənim tədbirim OK button OLDU Delete button Silin Edit button Düzəliş edin CPushButton New event type Yeni tədbir növü CScheduleDlg New Event Yeni tədbir Edit Event Tədbirə düzəliş etmək End time must be greater than start time Bitmə tarixi başlama tarixindən böyük olmalıdır OK button OK Never Heç vaxt At time of event Tədbir zamanı 15 minutes before 15 dəqiqə əvvəl 30 minutes before 30 dəqiqə əvvəl 1 hour before 1 saat əvvəl 1 day before 1 gün əvvəl 2 days before 2 gün əvvəl 1 week before 1 həftə əvvəl On start day (9:00 AM) Başlanğıc günü (9:00) time(s) vaxt(lar) Enter a name please Lütfən adı daxil edin The name can not only contain whitespaces Ad təkcə ara boşluqlarından ibarət ola bilməz Type: Növ: Description: Təsviri: All Day: Bütün gün: Starts: Başlayır: Ends: Başa çatır: Remind Me: Mənə xatırlat: Repeat: Təkrar: End Repeat: Təkrarın sonu: Calendar account: Təqvim hesabı: Calendar account Təqvim hesabı Type Növ Description Təsviri All Day Bütün gün Time: Vaxt: Time Vaxt Solar Günəş Lunar Ay Starts Başlayır Ends Başa çatır Remind Me Mənə xatırlat Repeat Təkrar Daily Hər gün Weekdays Həftənin günləri Weekly Həftə Monthly Ay Yearly İl End Repeat Təkrarın sonu After Sonra On Açıq Cancel button İmtina Save button Saxlayın CScheduleOperation All occurrences of a repeating event must have the same all-day status. Təkrarlanan tədbirlərin bütün hadisələri gün boyu eyni statusa malik olmalıdır. Do you want to change all occurrences? Bütün hadisələrə dəyişmək istəyrisiniz? Cancel button İmtina Change All Hamısını dəyişmək You are changing the repeating rule of this event. Siz bu tədbirin təkrarlanma qaydasını dəyişirsiniz. You are deleting an event. Siz tədbiri silirsiniz. Are you sure you want to delete this event? Bu tədbiri silmək istədiyinizə əminsiniz? Delete button Silmək Do you want to delete all occurrences of this event, or only the selected occurrence? Siz bu tədbirin bütün hadisələrini, yoxsa yalnız seçilmiş hadisəsini silmək istəyirsiniz? Delete All Hamısını silin Delete Only This Event Yalnız bu tədbiri silin Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Siz bu tədbirin bütün gələcək hadisələrini, yoxsa yalnız seçilmiş hadisəsini silmək istəyirsiniz? Delete All Future Events Bütün gələcək tədbirləri silin You are changing a repeating event. Siz təkrarlanan tədbiri dəyişirsiniz. Do you want to change only this occurrence of the event, or all occurrences? Siz bu tədbirin yalnız bu hadisəsini, yoxsa bütün hadisələrini silmək istəyirsiniz? All Hamısını Only This Event Yalnız bu tədbiri Do you want to change only this occurrence of the event, or this and all future occurrences? Siz tədbirin yalnız bu hadisəsini yoxsa, bu və bütün gələcək hadisələrini silmək istəyirsiniz? All Future Events Bütün gələcək tədbirlər You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Siz uzun ay seşmisiniz və xatırlatma ay təqvimi qaydalarına uyğun olacaq. OK button OLDU CScheduleSearchDateItem Y İl M Ay D G CScheduleSearchItem Edit Düzəliş edin Delete Silin All Day Bütün gün CScheduleSearchView No search results Axtarış nəticəsiz oldu CScheduleView ALL DAY BÜTÜN GÜN CSettingDialog Sunday Bazar Monday Bazar ertəsi Use System Setting Sistem ayarını istifadə edin 24-hour clock 24 saat vaxt formatı 12-hour clock 12 saat vaxt formatı import ICS file ICS faylını idxal edin Manual �l ilə 15 mins 15 dəqiqə 30 mins 30 dəqiqə 1 hour 1 saat 24 hours 24 saat Sync Now İndi eyniləşdirin Last sync Sonuncu eyniləşmə Please go to the <a href='/'>Control Center</a> to change system settings Ayarları dəyişmək üçün <a href='/'>İdarəetmə mərkəzinə</a> keçin CTimeEdit (%1 mins) (%1 dəqiqə) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y İl M Ay W H D G Search events and festivals Tədbirləri və festivalları axtarın CWeekWindow Week Həftə Y İl CYearScheduleView All Day Bütün gün No event Tədbir yoxdur CYearWindow Y İl CalendarWindow Calendar Təqvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Təqvim tarixləri göstərən və həmçinin gündəlik həyatınızdakı gələcək işlərinizi planlamaq üçün bir gündəlikdir. Calendarmainwindow Calendar Təqvim Manage İdarə edin Privacy Policy Məxfilik Siyasəti Syncing... Eyniləşdirilir... Sync successful Eyniləşdirmə uğurlu oldu Sync failed, please try later Eyniləşdirmə alınmadı, lütfən yenidən cəhd edin CenterWidget All Day Bütün gün DAccountDataBase Work İş Life Həyat Other Digər DAlarmManager Close button Bağlayın One day before start Başlamadan bir gün əvvəl Remind me tomorrow Mənə sabah xatırlat Remind me later Mənə sonra xatırlat 15 mins later 15 dəq sonra 1 hour later 1 saat sonra 4 hours later 4 saat sonra Tomorrow Sabah Schedule Reminder Xatırlatma cədvəli %1 to %2 %1 ilə %2 arası Today Bu gün DragInfoGraphicsView Edit Düzəlt Delete Sil New event Yeni tədbir New Event Yeni tədbir JobTypeListView export ixrac edin import ICS file ICS faylını idxal edin You are deleting an event type. Siz tədbir növünü silirsiniz. All events under this type will be deleted and cannot be recovered. Bu qəbildən bütün tədbirlər silinəcəklər və bərpa oluna bilməzlər. Cancel button İmtina Delete button Silin QObject Manage calendar Təqvimi idarə edin Event types Tədbirin növləri Account settings Hesab ayarları Account İstifadəçi hesabı Select items to be synced Eyniləşdiriləcək elementləri seçin Events Tədbirlər General settings Ümumi ayarlar Sync interval Eyniləşdirmə aralığı Calendar account Təqvim hesabı General Ümumi First day of week Həftənin ilk günü Time Vaxt Return Today Return Bu gün Return Today Today Return Today Bu gün ScheduleTypeEditDlg New event type Yeni tədbir növü Edit event type Tədbir növünü dəyişin Import ICS file ICS faylını idxal edin Name: Ad: Color: Rəng: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Fayl: Cancel button İmtina Save button Saxla The name can not only contain whitespaces Ad təkcə ara boşluqlarından ibarət ola bilməz Enter a name please Lütfən adı daxil edin Shortcut Help Kömək Delete event Tədbiri silmək Copy Kopyala Cut Kəsmək Paste �lavə et Delete Sil Select all Hamısını seçmək SidebarCalendarWidget Y İl M Ay TimeJumpDialog Go button Keçin UserloginWidget Sign In button Hesaba giriş Sign Out button Hesabdan çıxış YearFrame Y İl today Today Today Bu gün linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_bg.ts000066400000000000000000001401021523260663500250300ustar00rootroot00000000000000 AccountItem Sync successful Синхронизаци� у�пешна Network error Грешка в мрежата Server exception И�ключителна �итуаци� на �ървъра Storage full Паметта е пълна AccountManager Local account Локален акаунт Event types Видове �ъбити� CColorPickerWidget Color Цв�т Cancel button Отказ Save button Запази CDayMonthView Monday Понеделник Tuesday Вторник Wednesday Ср�да Thursday Четвъртък Friday Петък Saturday Събота Sunday �едел� CDayWindow Y Y M M D D Lunar Лунен CGraphicsView New Event �ово �ъбитие CMonthScheduleNumItem %1 more %1 повече CMonthView New event �ово �ъбитие New Event �ово �ъбитие CMonthWindow Y Y CMyScheduleView My Event Моето �ъбитие OK button Добре Delete button Изтриване Edit button Редактиране CPushButton New event type �ов вид �ъбитие CScheduleDlg New Event �ов подвиз Edit Event Редактиране на подвиз End time must be greater than start time Времето на кра� тр�бва да е по-гол�мо от времето на �тартиране OK button Д� Never �икога At time of event В момента на подвиза 15 minutes before 15 минути преди 30 minutes before 30 минути преди 1 hour before 1 ча� преди 1 day before 1 ден преди 2 days before 2 дни преди 1 week before 1 �едмица преди On start day (9:00 AM) �а ден от �тартиране (9:00 �утринта) time(s) време(а) Enter a name please Въведете име, мол� The name can not only contain whitespaces Името не може да �ъдържа �амо интервали Type: Вид: Description: Опи�ание: All Day: Ц�л ден: Starts: Започва: Ends: Краи: Remind Me: Поми�ли ми: Repeat: Повтор�ване: End Repeat: Край на повтор�ване: Calendar account: Календарен акаунт: Calendar account Календарен акаунт Type Вид Description Опи�ание All Day Ц�л ден Time: Време: Time Време Solar Соларно Lunar Лунарно Starts Стартира Ends Краи Remind Me �апомни ми Repeat Повтори Daily Дневно Weekdays Работни дни Weekly Седмично Monthly Ме�ечно Yearly Годишно End Repeat Краи повторението After След On Върху Cancel button Отказ Save button Запази CScheduleOperation All occurrences of a repeating event must have the same all-day status. В�ички възможно�ти на повтар�що �е �ъбитие тр�бва да имат �ъщото �ъ�то�ние на ц�л ден. Do you want to change all occurrences? И�кате ли да промените в�ички възможно�ти? Cancel button Отказ Change All Промени в�ички You are changing the repeating rule of this event. Промен�те повтар�щото правило на този избор. You are deleting an event. Премахвате �ъбитие. Are you sure you want to delete this event? Сигурни ли �те, че и�кате да изтриете това �ъбитие? Delete button Изтрий Do you want to delete all occurrences of this event, or only the selected occurrence? И�кате ли да изтриете в�ички възможно�ти на това �ъбитие, или �амо избраното? Delete All Изтрий в�ички Delete Only This Event Изтрий �амо това �ъбитие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? И�кате ли да изтриете това и в�ички бъдещи възможно�ти на това �ъбитие, или �амо избраното? Delete All Future Events Изтрий в�ички бъдещи �ъбити� You are changing a repeating event. Вие промен�те повтар�щ �ъбитие. Do you want to change only this occurrence of the event, or all occurrences? И�кате ли да промените �амо това �ъбитие, или в�ички �ъбити�? All В�ички Only This Event Само това �ъбитие Do you want to change only this occurrence of the event, or this and all future occurrences? И�кате ли да промените �амо това �ъбитие, или това и в�ички бъдещи �ъбити�? All Future Events В�ички бъдещи �ъбити� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Избрахте пролетен ме�ец и ще бъдете напомн�ни �поред правилата на лунното календар. OK button Добре CScheduleSearchDateItem Y Д M М D Д CScheduleSearchItem Edit Редактиране Delete Изтриване All Day Ц�л ден CScheduleSearchView No search results ��ма резултати от тър�ене CScheduleView ALL DAY ЦЕЛ ДЕ� CSettingDialog Sunday �едел� Monday Понеделник Use System Setting Използвайте �и�темни на�тройки 24-hour clock 24-ча�овен ча�овник 12-hour clock 12-ча�овен ча�овник import ICS file импортирайте ICS файл Manual Ръчно 15 mins 15 минути 30 mins 30 минути 1 hour 1 ча� 24 hours 24 ча�а Sync Now Синхронизирайте �ега Last sync По�ледна �инхронизаци� Please go to the Control Center to change system settings Мол�, отидете до Център за управление, за да промените �и�темните на�тройки CTimeEdit (%1 mins) (%1 минути) (%1 hour) (%1 ча�) (%1 hours) (%1 ча�а) CTitleWidget Y П M М W В D Д Search events and festivals Тър�и �ъбити� и фе�тивали CWeekWindow Week Седмица Y П CYearScheduleView All Day Ц�л ден No event Без �ъбитие CYearWindow Y П CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар е ин�трумент за преглед на дати и �ъщо така умна дневна планираничка за планиране на в�ички неща в живота. Calendarmainwindow Calendar Календар Manage Управление Privacy Policy Политика за поверително�т Syncing... Синхронизиране... Sync successful Синхронизаци�та е у�пешна Sync failed, please try later Синхронизаци�та �е провали, мол� опитайте по-къ�но CenterWidget All Day Ц�л ден DAccountDataBase Work Работа Life Живот Other Друго DAlarmManager Close button Затвори One day before start Един ден преди �тартиране Remind me tomorrow �апомни ми утре Remind me later �апомни ми по-къ�но 15 mins later 15 минути по-къ�но 1 hour later 1 ча� по-�лед�твие 4 hours later 4 ча�а по-�лед�твие Tomorrow Утре Schedule Reminder Планиране на напомн�не %1 to %2 '%1 до %2' Today Дне� DragInfoGraphicsView Edit Редактиране Delete Премахване New event �ово �ъбитие New Event �ово �ъбитие JobTypeListView export изно� import ICS file вно� ICS файл You are deleting an event type. Премахването на тип �ъбитие ще доведе до изтриване на в�ички �ъбити� под този тип и н�ма да могат да бъдат въз�тановени. All events under this type will be deleted and cannot be recovered. В�ички �ъбити� под този вид ще бъдат изтрити и н�ма да могат да бъдат въз�тановени. Cancel button Отказ Delete button Премахни QObject Manage calendar Управление на календар Event types Типове �ъбити� Account settings �а�тройки на акаунт Account �каунт Select items to be synced Изберете елементи за �инхронизаци� Events Събити� General settings Общи на�тройки Sync interval Интервал за �инхронизаци� Calendar account Календарен акаунт General Общи First day of week Първи ден от �едмицата Time Време Return Today Return Дне� Return Today Today Return Today Дне� ScheduleTypeEditDlg New event type �ов тип �ъбитие Edit event type Редактиране на тип �ъбитие Import ICS file Импортиране ICS файл Name: Име: Color: Цв�т: ICS File: ICS Файл: Cancel button Отказ Save button Запази The name can not only contain whitespaces Името не може да �ъдържа �амо празни ме�та Enter a name please Мол�, въведете име Shortcut Help Помощ Delete event Изтрий �ъбитие Copy Копиране Cut Изрежи Paste По�тави Delete Изтрий Select all Избери в�ичко SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Влез UserloginWidget Sign In button Влез Sign Out button Излез YearFrame Y Г today Today Today Дне� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_bn.ts000066400000000000000000001440071523260663500250470ustar00rootroot00000000000000 AccountItem Sync successful সিঙ�ক সাফল�যপূর�বক Network error নেটওয়ার�ক ত�র�টি Server exception সার�ভার বিস�তার Storage full স�টোরেজ পূর�ণ AccountManager Local account স�থানীয় অ�যাকাউন�ট Event types সম�পর�কিত ধরণ CColorPickerWidget Color রং Cancel button বাতিল Save button সংরক�ষণ CDayMonthView Monday শনিবার Tuesday রবিবার Wednesday সোমবার Thursday মঙ�গলবার Friday ব�ধবার Saturday বৃহস�পতিবার Sunday শ�ক�রবার CDayWindow Y য় M ম D ড Lunar চা�দের CGraphicsView New Event নত�ন ঘটনা CMonthScheduleNumItem %1 more %1 আরও CMonthView New event নত�ন ঘটনা New Event নত�ন ঘটনা CMonthWindow Y য় CMyScheduleView My Event আমার ঘটনা OK button ও.কি. Delete button ম�ছ�ন Edit button সম�পাদনা CPushButton New event type নত�ন ঘটনা ধরণ CScheduleDlg New Event নত�ন ইভেন�ট Edit Event সম�পাদনা কর�ন ইভেন�ট End time must be greater than start time শেষ সময় শ�র� সাময়িক হতে হবে OK button ও.কি. Never কখনো না At time of event ইভেন�ট সময়ে 15 minutes before 15 মিনিট আগে 30 minutes before 30 মিনিট আগে 1 hour before 1 ঘন�টা আগে 1 day before 1 দিন আগে 2 days before 2 দিন আগে 1 week before 1 সপ�তাহ আগে On start day (9:00 AM) শ�র� দিনে (9:00 সকাল) time(s) সময়(গ�লি) Enter a name please নাম দিন দয়া করে The name can not only contain whitespaces নাম কেবলমাত�র হ�বহ� স�পেস বা খালি স�থান সম�পূর�ণ হতে পারে না Type: ধরন: Description: বর�ণনা: All Day: সমস�ত দিন: Starts: শ�র� হয়: Ends: শেষ হয়: Remind Me: আমাকে অন�স�মরণ দিন: Repeat: প�নরাবৃত�তি: End Repeat: প�নরাবৃত�তি শেষ কর�ন: Calendar account: ক�যালেন�ডার অ�যাকাউন�ট: Calendar account ক�যালেন�ডার অ�যাকাউন�ট Type ধরন Description বর�ণনা All Day সমস�ত দিন Time: সময়: Time সময় Solar সৌর Lunar চা�দের Starts শ�র� হয় Ends শেষ হয় Remind Me আমাকে অন�রোধ কর�ন Repeat প�নরাবৃ হওয়া Daily দৈনিক Weekdays পর�বত দিবস Weekly নৃত�য দিবস Monthly মাসিক Yearly বার�ষিক End Repeat প�নরাবৃ শেষ কর�ন After পরে On না Cancel button বাতিল Save button সংরক�ষণ CScheduleOperation All occurrences of a repeating event must have the same all-day status. প�নরাবৃত ঘটনার সব ঘটনা �কই সম�পূর�ণ দিনের অবস�থা থাকতে হবে। Do you want to change all occurrences? আপনি সব ঘটনা পরিবর�তন করতে চান? Cancel button বাতিল Change All সব পরিবর�তন কর�ন You are changing the repeating rule of this event. আপনি �ই ঘটনার প�নরাবৃত নিয়ম পরিবর�তন করছেন। You are deleting an event. আপনি �কটি ঘটনা ম�ছছেন। Are you sure you want to delete this event? আপনি �ই ঘটনা ম��ছতে চান কি? Delete button ম�ছ�ন Do you want to delete all occurrences of this event, or only the selected occurrence? আপনি �ই ঘটনার সব ঘটনা ম�ছতে চান কি, বা কেবল বাছাই করা ঘটনাটি ম�ছতে চান? Delete All সব ম�ছ�ন Delete Only This Event কেবল �ই ঘটনাটি ম�ছ�ন Do you want to delete this and all future occurrences of this event, or only the selected occurrence? আপনি �ই ঘটনাটি �বং �র সব ভবিষ�যতের ঘটনা ম�ছতে চান কি, বা কেবল বাছাই করা ঘটনাটি ম�ছতে চান? Delete All Future Events সব ভবিষ�যতের ঘটনাটি ম�ছ�ন You are changing a repeating event. আপনি �কটি প�নরাবৃত�তি ঘটনা পরিবর�তন করছেন। Do you want to change only this occurrence of the event, or all occurrences? আপনি ঘটনার কেবল �ই ঘটনাটি পরিবর�তন করতে চান নাকি সবগ�লি ঘটনাটি? All সবগ�লি Only This Event কেবল �ই ঘটনাটি Do you want to change only this occurrence of the event, or this and all future occurrences? আপনি ঘটনার কেবল �ই ঘটনাটি পরিবর�তন করতে চান নাকি �টি �বং সবগ�লি ভবিষ�যতের ঘটনা? All Future Events সবগ�লি ভবিষ�যতের ঘটনা You have selected a leap month, and will be reminded according to the rules of the lunar calendar. আপনি �কটি ক�র�সান�ড মাস বেছে নিয়েছেন, �বং চান�দ�র ক�যালেন�ডারের নিয়ম অন�যায়ী আপনাকে অন�স�মারক দেওয়া হবে। OK button ও.কি. CScheduleSearchDateItem Y হ�যা� M মাস D দিন CScheduleSearchItem Edit সম�পাদনা Delete ম�ছ�ন All Day সম�পূর�ণ দিন CScheduleSearchView No search results কোন অন�সন�ধান ফলাফল পাওয়া যায়নি CScheduleView ALL DAY সম�পূর�ণ দিন CSettingDialog Sunday রবিবার Monday সোমবার Use System Setting সিস�টেম সেটিং ব�যবহার কর�ন 24-hour clock 24 ঘন�টা ঘড়ি 12-hour clock 12 ঘন�টা ঘড়ি import ICS file ICS ফাইল আমদানি কর�ন Manual ম�যান�য়াল 15 mins 15 মিনিট 30 mins 30 মিনিট 1 hour 1 ঘন�টা 24 hours 24 ঘন�টা Sync Now �খন সিঙ�ক কর�ন Last sync শেষ সিঙ�ক Please go to the Control Center to change system settings দৃষ�টিকেন�দ�র বা সিস�টেম সেটিং পরিবর�তন করতে অন�গ�রহ করে ক�লিক কর�ন কন�ট�রোল সেন�টার � CTimeEdit (%1 mins) (%1 মিনিট) (%1 hour) (%1 ঘন�টা) (%1 hours) (%1 ঘন�টা) CTitleWidget Y য় M �ম W ওয় D ড় Search events and festivals সংগঠন ও উৎসব খ��জ�ন CWeekWindow Week সপ�তাহ Y য় CYearScheduleView All Day সমস�ত দিন No event কোনও ঘটনা নেই CYearWindow Y য় CalendarWindow Calendar ক�যালেন�ডার Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ক�যালেন�ডার তারিখ দেখার �কটি উপকরণ �বং সমস�ত জিনিসের জন�য �র �কটি স�মার�ট দৈনিক পরিকল�পনা করার জন�যও ব�যবহৃত হয়। Calendarmainwindow Calendar ক�যালেন�ডার Manage পরিচালনা কর�ন Privacy Policy গোপনীয় নীতি Syncing... সিঙ�কিং... Sync successful সিঙ�কিং সফল Sync failed, please try later সিঙ�কিং ব�যর�থ, অন�গ�রহ করে আবার চেষ�টা কর�ন CenterWidget All Day সমস�ত দিন DAccountDataBase Work কাজ Life জীবন Other অন�য DAlarmManager Close button বন�ধ কর�ন One day before start শ�র�র �ক দিন আগে Remind me tomorrow আমাকে আগামীকাল অন�স�মরণ দিন Remind me later আমাকে আর বেশি অন�স�মরণ দিন 15 mins later 15 মিনিট পর 1 hour later �ক ঘন�টা পরে 4 hours later চার ঘন�টা পরে Tomorrow আগামীকাল Schedule Reminder যোগাযোগ অন�স�মারক %1 to %2 '%1 থেকে %2' Today আজ DragInfoGraphicsView Edit সম�পাদনা Delete ম�ছ�ন New event নত�ন ঘটনা New Event নত�ন ঘটনা JobTypeListView export প�রকাশ import ICS file ICS ফাইল আমদানি কর�ন You are deleting an event type. আপনি �কটি ঘটনা ধরন ম�ছছেন। All events under this type will be deleted and cannot be recovered. �ই ধরনের সব ঘটনা ম�ছে ফেলা হবে �বং প�নর�দ�ধার করা যাবে না। Cancel button বাতিল Delete button ম�ছ�ন QObject Manage calendar �লক�যালেন�ডার পরিচালনা কর�ন Event types ঘটনা ধরন Account settings অ�যাকাউন�ট সেটিংস Account অ�যাকাউন�ট Select items to be synced সিনক করার জন�য আইটেম বাছাই কর�ন Events ঘটনা General settings সাধারণ সেটিংস Sync interval সিনক সময় অন�তরাল Calendar account ক�যালেন�ডার অ�যাকাউন�ট General সাধারণ First day of week সপ�তাহের প�রথম দিন Time সম�পর�কে সময় Return Today Return আজ Return Today Today Return Today আজ ScheduleTypeEditDlg New event type নত�ন ইভেন�ট ধরন Edit event type ইভেন�ট ধরন সম�পাদনা কর�ন Import ICS file ICS ফাইল আমদানি কর�ন Name: নাম: Color: রং: ICS File: ICS ফাইল: Cancel button বাতিল Save button সংরক�ষণ The name can not only contain whitespaces নাম কেবলমাত�র হোয়াইটস�পেস বা ফা�কা জায়গা ধারণ করতে পারে না Enter a name please নাম প�রবেশ কর�ন Shortcut Help সাহায�য Delete event ইভেন�ট ম�ছ�ন Copy কপি Cut কাট Paste পেস�ট Delete ম�ছ�ন Select all সবগ�লো বাছ�ন SidebarCalendarWidget Y বছর M মাস TimeJumpDialog Go button যান UserloginWidget Sign In button সাইন ইন Sign Out button সাইন আউট YearFrame Y বছর today Today Today আজ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_bo.ts000066400000000000000000001667431523260663500250630ustar00rootroot00000000000000 AccountItem Sync successful མཉམ་བགྲོད་ལེགས་གྲུབ� Network error དྲ་རྒྱ་ནོར་བ� Server exception ཞབས་ཞུ་འཕྲུལ་ཆས་རྒྱུན་འགལ� Storage full ཉར་གསོག་གང་བ� AccountManager Local account རང་སའི་རྩའི་�ྲ� Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲས� CColorPickerWidget Color ཚོན་མདོག Cancel button འདོར་བ� Save button ཉར་གསོག་ CDayMonthView Monday གཟའ་ཟླ་བ� Tuesday གཟའ་མིག་དམར� Wednesday གཟའ་ལྷག་པ� Thursday གཟའ་ཕུར་བུ� Friday གཟའ་པ་སངས� Saturday གཟའ་སྤེན་པ� Sunday གཟའ་ཉི་མ� CDayWindow Y ལོ� M ཟླ� D ཚེས� Lunar ལུགས་རྙིང་ལོ་�ོ� CGraphicsView New Event ལས་རིམ་གསར་པ� CMonthScheduleNumItem %1 more ད་དུང་%1ཡོད� CMonthView New event ལས་རིམ་གསར་པ� New Event ལས་རིམ་གསར་པ� CMonthWindow Y ལོ� CMyScheduleView My Event ངའི་ལས་རིམ� OK button ག�ན་�ེལ� Delete button སུབ་པ� Edit button རྩོམ་སྒྲིག CPushButton New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགས� CScheduleDlg New Event ལས་རིམ་གསར་པ� Edit Event ལས་རིམ་རྩོམ་སྒྲིག End time must be greater than start time མཇུག་འགྲིལ་བའི་དུས་ཚོད་འགོ་འཛུགས་དུས་ཚོད་ལས་འཕྱི་བ་དགོས� OK button ག�ན་�ེལ� Never ནམ་ཡང་མིན� At time of event ལས་རིམ་འགོ་འཛུགས་དུས� 15 minutes before ས�ར་མ་15སྔོན་ལ� 30 minutes before ས�ར་མ་30སྔོན་ལ� 1 hour before ཆུ་ཚོད་1སྔོན་ལ� 1 day before ཉིན་1སྔོན་ལ� 2 days before ཉིན་2སྔོན་ལ� 1 week before གཟའ་འ�ོར་1སྔོན་ལ� On start day (9:00 AM) ལས་རིམ་འགོ་ཚུགས་པའི་ཉིན�(9:00སྔ་དྲོའི་ཆུ་ཚོད�) time(s) �ེངས་གྲངས�(�ེངས) Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་� The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བས� བཟོ་བཅོས་བྱེད་རོགས� Type: རིགས་གྲས� Description: ནང་དོན� All Day: ཉིན་གང་� Starts: འགོ་འཛུགས་དུས་ཚོད� Ends: མཇུག་སྒྲིལ་དུས་ཚོད� Remind Me: དྲན་ས�ུལ� Repeat: བས�ྱར་ཟློས� End Repeat: བས�ྱར་ཟློས་མཇུག་འགྲིལ་བ� Calendar account: ལོ་�ོའི་རྩིས་�ྲ� Calendar account ལོ་�ོའི་རྩིས་�ྲ� Type རིགས་གྲས� Description ནང་དོན� All Day ཉིན་གང་� Time: དུས་ཚོད� Time �ོ་འཇུག་པའི་དུས་ཚོད� Solar སྤྱི་ལོ� Lunar ལུགས་རྙིང་ལོ་�ོ� Starts འགོ་འཛུགས་དུས་ཚོད� Ends མཇུག་སྒྲིལ་དུས་ཚོད� Remind Me དྲན་ས�ུལ� Repeat བས�ྲར་ཟློས� Daily ཉིན་རེ� Weekdays ལས་ཀའི་ཉིན་གྲངས� Weekly བདུན་རེ� Monthly ཟླ་རེ� Yearly ལོ་རེ� End Repeat བས�ྱར་ཟློས་མཇུག་འགྲིལ་བ� After རྗེས་ལ� On ལ� Cancel button ཕྱིར་འ�ེན� Save button ཉར་གསོག་ CScheduleOperation All occurrences of a repeating event must have the same all-day status. བས�ྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་གྱི་བས�ྱར་ཟློས་ཚང་མར་ཉིན་ཧྲིལ་པོའི་རྣམ་པ་གཅིག་མཚུངས་ཡོད་དགོས� Do you want to change all occurrences? �ྱོད་ཀྱིས་བས�ྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ� Cancel button ཕྱིར་འ�ེན� Change All ཚང་མ་བཟོ་བཅོས་བྱེད� You are changing the repeating rule of this event. �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་གྱི་བས�ྱར་ཟློས་ཀྱི་སྒྲིག་སྲོལ་བཟོ་བཅོས་བྱེད་བཞིན་ཡོད� You are deleting an event. �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་བསུབ་བཞིན་ཡོད� Are you sure you want to delete this event? �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདི་བསུབ་རྒྱུ་ཡིན་པ་ག�ན་འ�ེལ་ལམ� Delete button སུབ་པ� Do you want to delete all occurrences of this event, or only the selected occurrence? �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བས�ྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམ� ཡང་ན་བདམས་ཡོད་པའི་བས�ྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིན� Delete All ཚང་མ་སུབ་པ� Delete Only This Event ཉིན་རེའི་ལས་རིམ་འདི་སུབ་པ� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བས�ྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བས�ྱར་ཟློས་ཚང་མ་བསུབ་རྒྱུ་ཡིན་ནམ� ཡང་ན་བདམས་ཡོད་པའི་བས�ྱར་ཟློས་དག་བསུབ་རྒྱུ་ཡིན� Delete All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་པ� You are changing a repeating event. �ྱོད་ཀྱིས་བས�ྱར་ཟློས་ཀྱི་ཉིན་རེའི་ལས་རིམ་དག་བཟོ་བཅོས་བྱེད་བཞིན་ཡོད� Do you want to change only this occurrence of the event, or all occurrences? �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བས�ྱར་ཟློས་འདི་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ� ཡང་ན་དེའི་བས�ྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན� All ཉིན་རེའི་ལས་རིམ་ཆ་ཚང་� Only This Event ཉིན་རེའི་ལས་རིམ་འདི་ཉིད� Do you want to change only this occurrence of the event, or this and all future occurrences? �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་འདིའི་བས�ྱར་ཟློས་འདི་དང་མ་འོངས་ཀྱི་བས�ྱར་ཟློས་ཚང་མ་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན་ནམ� ཡང་ན་བདམས་ཡོད་པའི་བས�ྱར་ཟློས་དག་བཟོ་བཅོས་བྱེད་རྒྱུ་ཡིན� All Future Events མ་འོངས་ཀྱི་ཉིན་རེའི་ལས་རིམ་ཚང་མ� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. �ྱོད་ཀྱིས་བདམས་པ་དེ་ཟླ་བཤོལ་ཡིན་པས� ལུགས་རྙིང་ལོ་�ོའི་སྒྲིག་སྲོལ་ལྟར་དྲན་ས�ུལ་བྱེད་སྲིད� OK button ག�ན་�ེལ� CScheduleSearchDateItem Y ལོ� M ཟླ� D ཚེས� CScheduleSearchItem Edit རྩོམ་སྒྲིག Delete སུབ་པ� All Day ཉིན་གང་� CScheduleSearchView No search results འཚོལ་ཞིབ་བྱས་འབྲས་མེད� CScheduleView ALL DAY ཉིན་གང་� CSettingDialog Sunday གཟའ་ཉི་མ� Monday གཟའ་ཟླ་བ� Use System Setting རྒྱུད་�ོངས་རྗེས་སུ་འབྲང་བ� 24-hour clock ཆུ་ཚོད་24ཡི་ལུགས� 12-hour clock ཆུ་ཚོད་12ཀྱི་ལུགས� import ICS file ICSཡིག་ཆ་ནང་འདྲེན� Manual ལག་�བས� 15 mins ས�ར་མ་15རེ� 30 mins ས�ར་མ་30རེ� 1 hour ཆུ་ཚོད་1རེ� 24 hours ཆུ་ཚོད་24རེ� Sync Now ལམ་སེང་མཉམ་བགྲོད� Last sync ཉེ་དུས་ཀྱི་མཉམ་བགྲོད་དུས་ཚོད� Please go to the <a href='/'>Control Center</a> to change system settings <a href='/'>ཚོད་འཛིན་ལྟེ་གནས་</a>ནས་རྒྱུད་�ོངས་སྒྲིག་འགོད་ལ་བཟོ་བཅོས་བྱེད་པ� CTimeEdit (%1 mins) (%1ས�ར་མ�) (%1 hour) (%1ཆུ་ཚོད�) (%1 hours) (%1ཆུ་ཚོད�) CTitleWidget Y ལོ� M ཟླ� W གཟའ� D ཚེས� Search events and festivals ཉིན་རེའི་ལས་རིམ་དང་དུས་ཆེན་འཚོལ་ཞིབ� CWeekWindow Week གཟའ་འ�ོར� Y ལོ� CYearScheduleView All Day ཉིན་གང་� No event ལས་རིམ་མེད� CYearWindow Y ལོ� CalendarWindow Calendar ལོ་�ོ� Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ལོ་�ོ་ནི་ཚེས་གྲངས་བལྟ་བ་དང་ལས་རིམ་དོ་དམ་བྱེད་པའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེད� Calendarmainwindow Calendar ལོ་�ོ� Manage དོ་དམ� Privacy Policy གསང་དོན་སྲིད་ཇུས� Syncing... མཉམ་བགྲོད་བྱེད་བཞིན་པ� Sync successful མཉམ་བགྲོད་ལེགས་གྲུབ� Sync failed, please try later མཉམ་བགྲོད་བྱེད་མ་�ུབ་པས� �ོག་ཙམ་ནས་ཡང་བས�ྱར་ཚོད་ལྟ་བྱོས� CenterWidget All Day ཉིན་གང་� DAccountDataBase Work ལས་ཀ Life འཆོ་བ� Other གཞན་དག DAlarmManager Close button �་རྒྱག One day before start ཉིན་1སྔོན་ལ་དྲན་ས�ུལ་བྱེད་པ� Remind me tomorrow སང་ཉིན་དྲན་ས�ུལ་བྱེད� Remind me later ག�ོགས་ཙམ་ནས་དྲན་ས�ུལ་བྱེད� 15 mins later ས�ར་མ་15རྗེས� 1 hour later ཆུ་ཚོད་1རྗེས� 4 hours later ཆུ་ཚོད་4རྗེས� Tomorrow སང་ཉིན� Schedule Reminder ཉིན་རེའི་ལས་རིམ་དྲན་ས�ུལ� %1 to %2 %1 ནས་ %2བར� Today དེ་རིང་� DragInfoGraphicsView Edit རྩོམ་སྒྲིག Delete སུབ་པ� New event ལས་རིམ་གསར་པ� New Event ལས་རིམ་གསར་པ� JobTypeListView export ཕྱིར་འདྲེན� import ICS file ICSཡིག་ཆ་ནང་འདྲེན� You are deleting an event type. �ྱོད་ཀྱིས་ཉིན་རེའི་ལས་རིམ་སུབ་བཞིན་ཡོད� All events under this type will be deleted and cannot be recovered. ཉིན་རེའི་ལས་རིམ་འདིའི་འོག་གི་ཉིན་རེའི་ལས་རིམ་ཚང་མ་སུབ་ངེས་པ་མ་ཟད་སླར་གསོ་བྱ་�བས་མེད� Cancel button འདོར་བ� Delete button སུབ་པ� QObject Manage calendar ལོ་�ོ་དོ་དམ� Event types ཉིན་རེའི་ལས་རིམ་རིགས་གྲས� Account settings རྩིས་�ོ་སྒྲིག་འགོད� Account རྩིས་�ྲ� Select items to be synced �ྱེད་ཀྱི་མཉམ་བགྲོད་ཚན་པ་སྒྲིག་འགོད� Events ཉིན་རེའི་ལས་རིམ� General settings ཀུན་སྤྱོད་སྒྲིག་འགོད� Sync interval མཉམ་བགྲོད་བྱུང་ཚད� Calendar account ལོ་�ོའི་རྩིས་�ྲ� General ཀུན་སྤྱོད� First day of week གཟའ་འ�ོར་གཅིག་གི་ཉིན་དང་པོ� Time �ོ་འཇུག་པའི་དུས་ཚོད� Return Today Return དེ་རིང་� Return Today Today Return Today དེ་རིང་� ScheduleTypeEditDlg New event type གསར་སྣོན་ཉིན་རེའི་ལས་རིམ་རིགས� Edit event type ཉིན་རེའི་ལས་རིམ་རིགས་གྲས་རྩོམ་སྒྲིག Import ICS file ICSཡིག་ཆ་ནང་འདྲེན� Name: མིང་� Color: ཚོན་མདོག <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> ཡིག་ཆ� Cancel button འདོར་བ� Save button ཉར་གསོག་ The name can not only contain whitespaces མིང་ཚང་མ་སྟོང་པ་ཡིན་མི་རུང་བས� བཟོ་བཅོས་བྱེད་རོགས� Enter a name please མིང་སྟོང་པ་ཡིན་མི་རུང་� Shortcut Help རོགས་རམ� Delete event ལས་རིམ་སུབ་པ� Copy མ�ོ་ཕབ� Cut དྲས་ག�ུབ� Paste སྦྱར་བ� Delete སུབ་པ� Select all ཡོངས་འདེམས� SidebarCalendarWidget Y ལོ� M ཟླ� TimeJumpDialog Go button མཆོང་སྒྱུར� UserloginWidget Sign In button �ོ་འཇུག Sign Out button �ོ་འབུད� YearFrame Y ལོ� today Today Today དེ་རིང་� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_bqi.ts000066400000000000000000001360461523260663500252270ustar00rootroot00000000000000 AccountItem Sync successful التناسق ناجح Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full الخزن ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button إلغاء Save button ح�ظ CDayMonthView Monday الأحد Tuesday الاثنين Wednesday الثلاثاء Thursday الأربعاء Friday الخميس Saturday الجمعة Sunday السبت CDayWindow Y السنة M الشهر D اليوم Lunar القمرية CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more %1 أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y السنة CMyScheduleView My Event حدثي الخاص OK button موا�ق Delete button حذ� Edit button تعديل CPushButton New event type نوع حدث جديد CScheduleDlg New Event حدث جديد Edit Event تحرير الحدث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button موا�ق Never 从� At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة واحدة قبل 1 day before يوم واحد قبل 2 days before يومين قبل 1 week before أسبوع واحد قبل On start day (9:00 AM) �ي يوم البدء (9:00 صباحًا) time(s) وقت(ات) Enter a name please من �ضلك أدخل اسمًا The name can not only contain whitespaces لا يمكن أن يحتوي الاسم �قط على مسا�ات �ارغة Type: النوع: Description: الوص�: All Day: الكل يوم: Starts: يبدأ �ي: Ends: ينتهي �ي: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب الجدول الزمني: Calendar account حساب الجدول الزمني Type النوع Description الوص� All Day الكل يوم Time: الوقت: Time زمان Solar سالار Lunar لوار Starts شروع می‌شود Ends پایان می‌یابد Remind Me ذکر کن Repeat تکرار Daily روزانه Weekdays روزهای کاری Weekly ه�تگی Monthly ماهانه Yearly سالانه End Repeat پایان تکرار After پس از On بر روی Cancel button لغو Save button ذخیره CScheduleOperation All occurrences of a repeating event must have the same all-day status. تمام تکرارهای یک رویداد تکراری باید وضعیت یک روز کامل یکسان داشته باشند. Do you want to change all occurrences? آیا می‌خواهید تمام تکرارها را تغییر دهید؟ Cancel button لغو Change All تغییر تمام You are changing the repeating rule of this event. شما قاعده تکراری این رویداد را تغییر می‌دهید. You are deleting an event. شما یک رویداد را حذ� می‌کنید. Are you sure you want to delete this event? آیا مطمئن هستید که می‌خواهید این رویداد را حذ� کنید؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? آیا می‌خواهید تمام تکرارهای این رویداد را حذ� کنید یا �قط تکرار انتخابی؟ Delete All حذ� تمام Delete Only This Event �قط این رویداد را حذ� کن Do you want to delete this and all future occurrences of this event, or only the selected occurrence? آیا می‌خواهید این رویداد و تمام تکرارهای آتی آن را حذ� کنید یا �قط تکرار انتخابی؟ Delete All Future Events حذ� تمام رویدادهای آتی You are changing a repeating event. أنت تقوم بتغيير حدث تكراري. Do you want to change only this occurrence of the event, or all occurrences? هل ترغب �ي تعديل هذه الحالة �قط من الحدث، أم جميع الحالات؟ All كل Only This Event هذا الحدث �قط Do you want to change only this occurrence of the event, or this and all future occurrences? هل ترغب �ي تعديل هذه الحالة �قط من الحدث، أم هذه الحالة والمستقبلية؟ All Future Events كل الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائداً، وستتم إخبارك و�قًا لقواعد التقويم القمري. OK button موا�ق CScheduleSearchDateItem Y نعم M شهر D يوم CScheduleSearchItem Edit تحرير Delete حذ� All Day 整天 CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY ال整天 CSettingDialog Sunday الأحد Monday الاثنين Use System Setting استخدم إعداد النظام 24-hour clock ساعة 24 ساعة 12-hour clock ساعة 12 ساعة import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث السابق Please go to the Control Center to change system settings يرجى الذهاب إلى مركز التحكم لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y السنة M الشهر W الاسبوع D اليوم Search events and festivals بحث عن ال�عاليات والمناسبات CWeekWindow Week الأسبوع Y السنة CYearScheduleView All Day ال整天 No event لا حدث CYearWindow Y السنة CalendarWindow Calendar الكالندر Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. الكالندر هو أداة لعرض التواريخ، كما هو مخطط يومي ذكي لتنظيم جميع الأمور �ي الحياة. Calendarmainwindow Calendar الكالندر Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جار� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later �شل التزامن، من �ضلك حاول مرة أخرى لاحقًا CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other الآخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكّرني غدًا Remind me later تذكّرني لاحقًا 15 mins later 15 دقيقة لاحقًا 1 hour later 1 ساعت دیگر 4 hours later 4 ساعت دیگر Tomorrow �ردا Schedule Reminder یادآور برنامه %1 to %2 '%1 تا %2' Today امروز DragInfoGraphicsView Edit ویرایش Delete حذ� New event رویداد جدید New Event رویداد جدید JobTypeListView export صدور import ICS file وارد کردن �ایل ICS You are deleting an event type. شما در حال حذ� نوعی رویداد هستید. All events under this type will be deleted and cannot be recovered. تمام رویدادهایی که تحت این نوع قرار دارند حذ� خواهند شد و قابل بازیابی نیستند. Cancel button لغو Delete button حذ� QObject Manage calendar مدیریت کALENDAR Event types نوعهای رویداد Account settings تنظیمات حساب Account حساب Select items to be synced ایتم هایی که می خواهید همگام سازی شوند را انتخاب کنید Events رویدادها General settings تنظیمات عمومی Sync interval �اصله همگام سازی Calendar account حساب کALENDAR General عمومی First day of week روز اول ه�ته Time زمان Return Today Return امروز Return Today Today Return Today امروز ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع الحدث Import ICS file استيراد مل� ICS Name: الاسم: Color: اللون: ICS File: مل� ICS: Cancel button إلغاء Save button ح�ظ The name can not only contain whitespaces لا يمكن أن يحتوي الاسم �قط على المسا�ات البيضاء Enter a name please الرجاء إدخال اسم Shortcut Help مساعدة Delete event حذ� الحدث Copy نسخ Cut قص Paste لصق Delete حذ� Select all تحديد الكل SidebarCalendarWidget Y س M شهر TimeJumpDialog Go button الذهاب UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y س today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_br.ts000066400000000000000000001352571523260663500250620ustar00rootroot00000000000000 AccountItem Sync successful تم التزامن بنجاح Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full الخزن ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button إلغاء Save button ح�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y ي M م D د Lunar ل�ونار CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more %1 أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y ي CMyScheduleView My Event حدثي OK button موا�ق Delete button حذ� Edit button تعديل CPushButton New event type نوع حدث جديد CScheduleDlg New Event حدث جديد Edit Event تحرير الحدث End time must be greater than start time يجب أن يكون وقت النهاية أكبر من وقت البدء OK button موا�ق Never 从� At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة قبل 1 day before يوم قبل 2 days before يومين قبل 1 week before أسبوع قبل On start day (9:00 AM) �ي يوم البدء (9:00 صباحًا) time(s) وقت(ا) Enter a name please الرجاء إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات �ارغة Type: النوع: Description: الوص�: All Day: ال整天: Starts: يبدأ �ي: Ends: ينتهي �ي: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب الجدول: Calendar account حساب الجدول Type النوع Description الوص� All Day ال整天 Time: الوقت: Time الوقت Solar الشمسية Lunar القمرية Starts تبدأ Ends تنتهي Remind Me تذكّرني Repeat تكرار Daily يوميًا Weekdays أيام الأسبوع Weekly أسبوعيًا Monthly شهريًا Yearly سنويًا End Repeat إنهاء التكرار After بعد On �ي Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون جميع أحداث التكرار ذات الحالة ن�سها للكامل �ي اليوم. Do you want to change all occurrences? هل ترغب �ي تغيير جميع الأحداث؟ Cancel button إلغاء Change All تغيير جميعها You are changing the repeating rule of this event. أنت تقوم بتغيير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك �ي حذ� هذا الحدث؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� هذا الحدث وكل حدث مستقبلي له، أم �قط الحدث المحدد؟ Delete All حذ� جميع الأحداث المستقبلية Delete Only This Event حذ� جميعها Do you want to delete this and all future occurrences of this event, or only the selected occurrence? حذ� هذا الحدث �قط Delete All Future Events حذ� جميع الأحداث المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث تكراري. Do you want to change only this occurrence of the event, or all occurrences? هل ترغب �ي تعديل هذه الحالة �قط من الحدث، أم جميع الحوادث؟ All الكل Only This Event �قط هذا الحدث Do you want to change only this occurrence of the event, or this and all future occurrences? هل ترغب �ي تعديل هذه الحالة �قط من الحدث، أم هذه الحالة والمستقبلية؟ All Future Events جميع الحوادث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائجًا، وسيتم تذكيرك و�قًا للقواعد القمرية. OK button موا�ق CScheduleSearchDateItem Y نعم M شهر D يوم CScheduleSearchItem Edit تحرير Delete حذ� All Day ال整天 CScheduleSearchView No search results لا توجد نتائج بحث CScheduleView ALL DAY ال整天 CSettingDialog Sunday الأحد Monday الاثنين Use System Setting استخدم إعداد النظام 24-hour clock الساعة 24 ساعة 12-hour clock الساعة 12 ساعة import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour ساعة واحدة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث الأخير Please go to the Control Center to change system settings يرجى الانتقال إلى مركز التحكم لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y اليوم M الشهر W الأسبوع D اليوم Search events and festivals ابحث عن ال�عاليات والمناسبات CWeekWindow Week الأسبوع Y اليوم CYearScheduleView All Day ال整天 No event لا يوجد حدث CYearWindow Y اليوم CalendarWindow Calendar الجدول Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. الجدول هو أداة لعرض التواريخ، ولديه أيضًا مخطط يومي أذكى لتنظيم كل شيء �ي الحياة. Calendarmainwindow Calendar الجدول Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جار� التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later �شل التزامن، يرجى المحاولة لاحقًا CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other آخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكير لي غدًا Remind me later تذكير لي لاحقًا 15 mins later 15 دقيقة لاحقًا 1 hour later �ي الساعة القادمة 4 hours later بعد 4 ساعات Tomorrow غدًا Schedule Reminder تذكير الجدول %1 to %2 '%1 إلى %2' Today اليوم DragInfoGraphicsView Edit تحرير Delete حذ� New event حدث جديد New Event حدث جديد JobTypeListView export تصدير import ICS file استيراد مل� ICS You are deleting an event type. أنت تقوم بحذ� نوع الحدث. All events under this type will be deleted and cannot be recovered. سيتم حذ� جميع الحوادث التابعة لهذا النوع ولا يمكن استعادتها. Cancel button إلغاء Delete button حذ� QObject Manage calendar إدارة الجدول Event types أنواع الحوادث Account settings إعدادات الحساب Account الحساب Select items to be synced اختر العناصر المراد إرسالها للتوا�ق Events الحوادث General settings إعدادات عامة Sync interval �ترة التزام Calendar account حساب الجدول General عام First day of week اليوم الأول من الأسبوع Time الوقت Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تعديل نوع الحدث Import ICS file استيراد مل� ICS Name: الاسم: Color: اللون: ICS File: مل� ICS: Cancel button إلغاء Save button ح�ظ The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات بيضاء Enter a name please الرجاء إدخال اسم Shortcut Help مساعدة Delete event حذ� الحدث Copy نسخ Cut القص Paste اللصق Delete حذ� Select all اختيار الكل SidebarCalendarWidget Y س M أ TimeJumpDialog Go button الذهاب UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y س today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ca.ts000066400000000000000000001476141523260663500250420ustar00rootroot00000000000000 AccountItem Sync successful Sincronització correcta Network error Error de xarxa Server exception Excepció del servidor Storage full Emmagatzematge ple AccountManager Local account Compte local Event types Tipus d'esdeveniment CColorPickerWidget Color Color Cancel button Cancel·la Save button Desa-ho CDayMonthView Monday Dilluns Tuesday Dimarts Wednesday Dimecres Thursday Dijous Friday Divendres Saturday Dissabte Sunday Diumenge CDayWindow Y any M mes D D Lunar Lunar CGraphicsView New Event Esdeveniment nou CMonthScheduleNumItem %1 more %1 més CMonthView New event Nou esdeveniment New Event Esdeveniment nou CMonthWindow Y any CMyScheduleView My Event El meu esdeveniment OK button D'acord Delete button Elimina Edit button Edita CPushButton New event type Tipus d'esdeveniment nou CScheduleDlg New Event Esdeveniment nou Edit Event Edita l'esdeveniment End time must be greater than start time L'hora d'acabament ha de ser superior a l'hora d'inici. OK button D'acord Never Mai At time of event Al moment de l'esdeveniment 15 minutes before 15 minuts abans 30 minutes before 30 minuts abans 1 hour before 1 hora abans 1 day before 1 dia abans 2 days before 2 dies abans 1 week before 1 setmana abans On start day (9:00 AM) El dia d'inici (9:00) time(s) cop/s Enter a name please Escriviu un nom, si us plau. The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Type: Tipus: Description: Descripció: All Day: Tot el dia: Starts: Comença: Ends: Acaba: Remind Me: Recorda-m'ho: Repeat: Repeteix: End Repeat: Acaba la repetició: Calendar account: Compte del calendari: Calendar account Compte del calendari Type Tipus Description Descripció All Day Tot el dia Time: Hora: Time Hora Solar solar Lunar lunar Starts Comença Ends Acaba Remind Me Recorda-m'ho Repeat Repeteix Daily Diàriament Weekdays Els dies feiners Weekly Setmanalment Monthly Mensualment Yearly Anualment End Repeat Acaba la repetició After Després On Activat Cancel button Cancel·la Save button Desa CScheduleOperation All occurrences of a repeating event must have the same all-day status. Totes les ocurrències d'un esdeveniment repetitiu han de tenir el mateix estat de tot el dia. Do you want to change all occurrences? Voleu canviar-ne totes les ocurrències? Cancel button Cancel·la Change All Canvia-les totes You are changing the repeating rule of this event. Canvieu la regla de repetició d'aquest esdeveniment. You are deleting an event. Elimineu un esdeveniment. Are you sure you want to delete this event? Segur que voleu eliminar aquest esdeveniment? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Voleu eliminar totes les ocurrències d'aquest esdeveniment o només la seleccionada? Delete All Elimina-les totes Delete Only This Event Elimina només aquest esdeveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voleu eliminar aquesta i totes les ocurrències futures d'aquest esdeveniment o només la seleccionada? Delete All Future Events Elimina tots els esdeveniments futurs You are changing a repeating event. Canvieu un esdeveniment repetitiu. Do you want to change only this occurrence of the event, or all occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment o totes? All Totes Only This Event Només aquest esdeveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Voleu canviar només aquesta ocurrència de l'esdeveniment, o aquesta i totes les ocurrències futures? All Future Events Tots els esdeveniments futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Heu seleccionat un mes de traspàs i se us recordarà segons les regles del calendari lunar. OK button D'acord CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Edita Delete Elimina All Day Tot el dia CScheduleSearchView No search results No hi ha resultats de la cerca. CScheduleView ALL DAY TOT EL DIA CSettingDialog Sunday Diumenge Monday Dilluns Use System Setting Usa la configuració del sistema 24-hour clock Rellotge de 24 hores 12-hour clock Rellotge de 12 hores import ICS file importa un fitxer ICS Manual Manual 15 mins 15 min 30 mins 30 min 1 hour 1 hora 24 hours 24 hores Sync Now Sincronitza ara Last sync Darrera sincronització Please go to the <a href='/'>Control Center</a> to change system settings Si us plau, aneu al <a href='/'>Centre de control</a> per canviar la configuració del sistema. CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 hora) (%1 hours) (%1 hores) CTitleWidget Y any M mes W setmana D dia Search events and festivals Cerca esdeveniments i festivals CWeekWindow Week Setmana Y any CYearScheduleView All Day Tot el dia No event Cap esdeveniment CYearWindow Y any CalendarWindow Calendar Calendari Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. El Calendari és una eina per veure dates i també un planificador diari intel·ligent per programar totes les coses de la vida. Calendarmainwindow Calendar Calendari Manage Gestiona Privacy Policy Política de privadesa Syncing... Se sincronitza... Sync successful Sincronització correcta Sync failed, please try later La sincronització ha fallat. Si us plau, proveu-ho més tard. CenterWidget All Day Tot el dia DAccountDataBase Work Feina Life Vida Other Altres DAlarmManager Close button Tanca One day before start Un dia abans de l'inici Remind me tomorrow Recorda-m'ho demà. Remind me later Recorda-m'ho més tard. 15 mins later 15 minuts més tard 1 hour later 1 hora més tard 4 hours later 4 hores més tard Tomorrow Demà Schedule Reminder Programació del recrdatori %1 to %2 de %1 a %2 Today Avui DragInfoGraphicsView Edit Edita Delete Elimina New event Esdeveniment nou New Event Esdeveniment nou JobTypeListView export exporta import ICS file Importa un fitxer ICS You are deleting an event type. Elimineu un tipus d'esdeveniment. All events under this type will be deleted and cannot be recovered. Tots els esdeveniments d'aquest tipus s'eliminaran i no es podran recuperar. Cancel button Cancel·la Delete button Elimina QObject Manage calendar Gestiona el calendari Event types Tipus d'esdeveniment Account settings Paràmetres del compte Account Compte Select items to be synced Seleccioneu els elements per sincronitzar Events Esdeveniments General settings Configuració general Sync interval Interval de sincronització Calendar account Compte del calendari General General First day of week Primer dia de la setmana Time Hora Return Today Return Avui Return Today Today Return Today Avui ScheduleTypeEditDlg New event type Tipus d'esdeveniment nou Edit event type Edita el tipus d'esdeveniment Import ICS file Importa un fitxer ICS Name: Nom: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Fitxer <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Cancel·la Save button Desa-ho The name can not only contain whitespaces El nom no només pot contenir espais en blanc. Enter a name please Escriviu un nom, si us plau. Shortcut Help Ajuda Delete event Suprimeix l'esdeveniment Copy Copia Cut Retalla Paste Enganxa Delete Elimina Select all Selecciona-ho tot SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ves-hi UserloginWidget Sign In button Inicia la sessió Sign Out button Surt de la sessió YearFrame Y any today Today Today Avui linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_cs.ts000066400000000000000000001332241523260663500250540ustar00rootroot00000000000000 AccountItem Sync successful Synchronizace byla úspěšná Network error Síťová chyba Server exception Výjimka na serveru Storage full Úložiště je plné AccountManager Local account Místní ú�et Event types Typy událostí CColorPickerWidget Color Barva Cancel button Zrušit Save button Uložit CDayMonthView Monday pondělí Tuesday úterý Wednesday středa Thursday �tvrtek Friday pátek Saturday sobota Sunday neděle CDayWindow Y R M M D D Lunar Měsí�ní CGraphicsView New Event Nová událost CMonthScheduleNumItem %1 more %1 další CMonthView New event Nová událost New Event Nová událost CMonthWindow Y R CMyScheduleView My Event Moje událost OK button OK Delete button Smazat Edit button Upravit CPushButton New event type Nový typ události CScheduleDlg New Event Nová událost Edit Event Upravit událost End time must be greater than start time Je třeba, aby okamžik konce následoval až po okamžiku za�átku OK button OK Never Nikdy At time of event V okamžiku události 15 minutes before 15 minut před 30 minutes before 30 minut před 1 hour before 1 hodinu před 1 day before 1 den před 2 days before 2 dny před 1 week before 1 týden před On start day (9:00 AM) V den za�átku (9:00 dop.) time(s) krát Enter a name please Zadejte, prosím, název The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Type: Typ: Description: Popis: All Day: Celý den: Starts: Za�íná: Ends: Kon�í: Remind Me: Připomenout: Repeat: Opakovat: End Repeat: Ukon�it opakování: Calendar account: Kalendářový ú�et: Calendar account Kalendářový ú�et Type Typ Description Popis All Day Celý den Time: Čas: Time Čas Solar Slune�ní Lunar Měsí�ní Starts Za�íná Ends Kon�í Remind Me Připomenout Repeat Opakování Daily Denně Weekdays Všední dny Weekly Týdně Monthly Měsí�ně Yearly Ro�ně End Repeat Ukon�it opakování After Po On Zapnuto Cancel button Zrušit Save button Uložit CScheduleOperation All occurrences of a repeating event must have the same all-day status. Je třeba, aby všechny výskyty opakující se události měly stejný stav „celý den“. Do you want to change all occurrences? Chcete změnit všechny výskyty? Cancel button Zrušit Change All Změnit vše You are changing the repeating rule of this event. Měníte pravidlo opakování této události. You are deleting an event. Mažete událost. Are you sure you want to delete this event? Opravdu chcete tuto událost smazat? Delete button Smazat Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete smazat všechny výskyty této události, nebo jen vybraný výskyt? Delete All Smazat vše Delete Only This Event Smazat jen tuto událost Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete smazat tento a všechny budoucí výskyty této události, nebo jen ten vybraný? Delete All Future Events Smazat všechny budoucí události You are changing a repeating event. Měníte pravidlo opakující se události. Do you want to change only this occurrence of the event, or all occurrences? Chcete změnit jen tento výskyt události, nebo všechny výskyty? All Vše Only This Event Jen tato událost Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete změnit jen tento výskyt události, nebo tento a všechny budoucí výskyty? All Future Events Všechny budoucí události You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vybrali jste přestupný měsíc, a bude vám připomenut podle pravidel měsí�ního kalendáře. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upravit Delete Smazat All Day Celý den CScheduleSearchView No search results Nic nenalezeno CScheduleView ALL DAY CEL� DEN CSettingDialog Sunday neděle Monday pondělí Use System Setting Použít nastavení systému 24-hour clock 24 hodinové hodiny 12-hour clock 12 hodinové hodiny import ICS file naimportovat ICS soubor Manual Příru�ka 15 mins 15 minut 30 mins 30 minut 1 hour 1 hodina 24 hours 24 hodin Sync Now Seřídit nyní Last sync Naposledy synchronizováno Please go to the <a href='/'>Control Center</a> to change system settings Prosím, přejděte na <a href='/'>Centrum ovládání</a>, abyste změnili nastavení systému CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 hod) (%1 hours) (%1 hod.) CTitleWidget Y R M M W T D D Search events and festivals Vyhledávání událostí a festivalů CWeekWindow Week Týden Y R CYearScheduleView All Day Celý den No event Žádná událost CYearWindow Y R CalendarWindow Calendar Kalendář Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendář slouží k zobrazování datumů a také jako chytrý každodenní plánova� všeho v životě. Calendarmainwindow Calendar Kalendář Manage Spravovat Privacy Policy Zásady ochrany soukromí Syncing... Synchronizace… Sync successful Synchronizace úspěšná Sync failed, please try later Synchronizace se nezdařila, zkuste to, prosím, později CenterWidget All Day Celý den DAccountDataBase Work Práce Life Soukromé Other Ostatní DAlarmManager Close button Zavřít One day before start Jeden den před za�átkem Remind me tomorrow Připomenout zítra Remind me later Připomenout později 15 mins later o 15 minut později 1 hour later o 1 hodinu později 4 hours later o 4 hodiny později Tomorrow Zítra Schedule Reminder Připomínání naplánovaného %1 to %2 %1 až %2 Today Dnes DragInfoGraphicsView Edit Upravit Delete Smazat New event Nová událost New Event Nová událost JobTypeListView export export import ICS file naimportovat ICS soubor You are deleting an event type. Mažete typ události. All events under this type will be deleted and cannot be recovered. Všechny události tohoto typu budou smazány a nelze je obnovit. Cancel button Zrušit Delete button Smazat QObject Manage calendar Spravovat kalendář Event types Typy událostí Account settings Nastavení ú�tu Account Ú�et Select items to be synced Vyberte položky, které mají být synchronizovány Events Události General settings Obecná nastavení Sync interval Seřizovací interval Calendar account Kalendářový ú�et General Obecné First day of week První den týdne Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ události Edit event type Upravit typ události Import ICS file Naimportovat ICS soubor Name: Název: Color: Barva: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> soubor: Cancel button Zrušit Save button Uložit The name can not only contain whitespaces Název nemůže obsahovat pouze mezery Enter a name please Zadejte, prosím, název Shortcut Help Nápověda Delete event Smazat událost Copy Kopírovat Cut Vyjmout Paste Vložit Delete Smazat Select all Vybrat vše SidebarCalendarWidget Y R M M TimeJumpDialog Go button Jde se UserloginWidget Sign In button Přihlásit se Sign Out button Odhlásit se YearFrame Y R today Today Today Dnes linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_da.ts000066400000000000000000001324111523260663500250300ustar00rootroot00000000000000 AccountItem Sync successful Synchronisation lykkedes Network error Netværksfejl Server exception Serverfejl Storage full Lager er fuldt AccountManager Local account Lokalt konto Event types Hændelsetyper CColorPickerWidget Color Farve Cancel button Afbryd Save button Gem CDayMonthView Monday Mandag Tuesday Tirsdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lørdag Sunday Søndag CDayWindow Y Å M M D D Lunar Månekalender CGraphicsView New Event Ny begivenhed CMonthScheduleNumItem %1 more %1 mere CMonthView New event Ny begivenhed New Event Ny begivenhed CMonthWindow Y Å CMyScheduleView My Event Min begivenhed OK button OK Delete button Slet Edit button Rediger CPushButton New event type Ny hændelsetype CScheduleDlg New Event Ny begivenhed Edit Event Rediger begivenhed End time must be greater than start time Sluttidspunktet skal være større end starttidspunktet OK button OK Never Aldrig At time of event På tidspunktet for begivenheden 15 minutes before 15 minutter før 30 minutes before 30 minutter før 1 hour before 1 time før 1 day before 1 dag før 2 days before 2 dage før 1 week before 1 uge før On start day (9:00 AM) På starten af dagen (9:00) time(s) gang(e) Enter a name please Indtast et navn, venligst The name can not only contain whitespaces Navnet kan ikke kun bestå af mellemrum Type: Type: Description: Beskrivelse: All Day: Hele dagen: Starts: Starter: Ends: Slutter: Remind Me: Påmind mig: Repeat: Gentag: End Repeat: Slut gentag: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Type Description Beskrivelse All Day Hele dagen Time: Tid: Time Klokkeslæt Solar Solkalender Lunar Månekalender Starts Starts Ends Slutter Remind Me Mindre mig Repeat Gentag Daily Dagligt Weekdays Ugedage Weekly Ugentligt Monthly Månedligt Yearly Årligt End Repeat Slut gentagelse After Efter On Til Cancel button Annuller Save button Gem CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle forekomster af en begivenhed som gentages skal have den samme hele dagen-status. Do you want to change all occurrences? Vil du ændre alle forekomster? Cancel button Annuller Change All Ændr alle You are changing the repeating rule of this event. Du er ved at ændre gentagelsesreglen for begivenheden. You are deleting an event. Du er ved at slette en begivenhed. Are you sure you want to delete this event? Er du sikker på, at du vil slette begivenheden? Delete button Slet Do you want to delete all occurrences of this event, or only the selected occurrence? Vil du slette alle forekomster af begivenheden eller kun den valgte forekomst? Delete All Slet alle Delete Only This Event Slet kun denne begivenhed Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vil du slette denne og alle fremtidige forekomster af begivenheden eller kun den valgte forekomst? Delete All Future Events Slet alle fremtidige begivenheder You are changing a repeating event. Du er ved at ændre en begivenhed som gentages. Do you want to change only this occurrence of the event, or all occurrences? Vil du kun ændre denne forekomst for begivenheden, eller alle forekomster? All Alle Only This Event Kun denne begivenhed Do you want to change only this occurrence of the event, or this and all future occurrences? Vil du kun ændre denne forekomst for begivenheden, eller denne og alle fremtidige forekomster? All Future Events Alle fremtidige begivenheder You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Du har valgt en skudmåned, og vil blive mindret efter reglerne for månekalenderen. OK button OK CScheduleSearchDateItem Y Å M M D D CScheduleSearchItem Edit Rediger Delete Slet All Day Hele dagen CScheduleSearchView No search results Ingen søgeresultater CScheduleView ALL DAY HELE DAGEN CSettingDialog Sunday Søndag Monday Mandag Use System Setting Brug systemindstillinger 24-hour clock 24-timersur 12-hour clock 12-timersur import ICS file importér ICS-fil Manual Manuel 15 mins 15 minutter 30 mins 30 minutter 1 hour 1 time 24 hours 24 timer Sync Now Synk nu Last sync Sidste synk Please go to the Control Center to change system settings Gå venligst til Kontrolcenteret for at ændre systemindstillinger CTimeEdit (%1 mins) (%1 minutter) (%1 hour) (%1 time) (%1 hours) (%1 timer) CTitleWidget Y Å M M W W D D Search events and festivals Søg efter begivenheder og festligheder CWeekWindow Week Uge Y Å CYearScheduleView All Day Hele dagen No event Ingen begivenhed CYearWindow Y Å CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender er et værktøj til at vise datoer, og er også en smart dagsplanlægger til alt i dit liv. Calendarmainwindow Calendar Kalender Manage Styr Privacy Policy Privatlivspolitik Syncing... Synkroniserer... Sync successful Synkronisering lykkedes Sync failed, please try later Synkronisering fejlede, prøv igen senere CenterWidget All Day Hele dagen DAccountDataBase Work Arbejde Life Leve Other Andre DAlarmManager Close button Luk One day before start En dag før start Remind me tomorrow Påmind mig i morgen Remind me later Påmind mig senere 15 mins later 15 minutter senere 1 hour later 1 time senere 4 hours later 4 timer senere Tomorrow I morgen Schedule Reminder Planlæg påmindelse %1 to %2 '%1 til %2' Today I dag DragInfoGraphicsView Edit Rediger Delete Slet New event Ny begivenhed New Event Ny begivenhed JobTypeListView export eksport import ICS file importér ICS-fil You are deleting an event type. Du sletter en begivenheds-type. All events under this type will be deleted and cannot be recovered. Alle begivenheder under denne type vil blive slettet og kan ikke gendannes. Cancel button Afbryd Delete button Slet QObject Manage calendar Styr kalender Event types Begivenheds-typer Account settings Kontoindstillinger Account Konto Select items to be synced Vælg elementer til synkronisering Events Begivenheder General settings Generelle indstillinger Sync interval Synkronisationsinterval Calendar account Kalenderkonto General Generelt First day of week Første dag i ugen Time Klokkeslæt Return Today Return I dag Return Today Today Return Today I dag ScheduleTypeEditDlg New event type Ny begivenheds-type Edit event type Rediger begivenheds-type Import ICS file Importér ICS-fil Name: Navn: Color: 'Farve:' ICS File: 'ICS-fil:' Cancel button Afbryd Save button Gem The name can not only contain whitespaces Navnet kan ikke kun bestå af mellemrum Enter a name please Indtast et navn, venligst Shortcut Help Hjælp Delete event Slet begivenhed Copy Kopiér Cut Klip Paste Indsæt Delete Slet Select all Vælg alle SidebarCalendarWidget Y Å M M TimeJumpDialog Go button Gå UserloginWidget Sign In button Log ind Sign Out button Log ud YearFrame Y Å today Today Today I dag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_de.ts000066400000000000000000001467441523260663500250520ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Serverausnahme Storage full Speicher voll AccountManager Local account Lokales Konto Event types Termintypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neuer Termin CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neuer Termin New Event Neuer Termin CMonthWindow Y J CMyScheduleView My Event Mein Termin OK button OK Delete button Löschen Edit button Bearbeiten CPushButton New event type Neuer Termintyp CScheduleDlg New Event Neuer Termin Edit Event Termin bearbeiten End time must be greater than start time Endzeit muss größer als Startzeit sein OK button OK Never Nie At time of event Zum Zeitpunkt des Termins 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde vorher 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Starttag (9:00 Uhr) time(s) mal Enter a name please Bitte einen Namen eingeben The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Typ: Description: Beschreibung: All Day: Ganztägig: Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholung: End Repeat: Wiederholung beenden: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Typ Description Beschreibung All Day Ganztägig Time: Zeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholung Daily Täglich Weekdays Wochentage Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholung beenden After Nach On Am Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle Vorkommen eines sich wiederholenden Termins müssen den gleichen Ganztagsstatus haben. Do you want to change all occurrences? Möchten Sie alle Vorkommen ändern? Cancel button Abbrechen Change All Alle ändern You are changing the repeating rule of this event. Sie ändern die Wiederholungsregel dieses Termins. You are deleting an event. Sie löschen einen Termin. Are you sure you want to delete this event? Sind Sie sicher, dass Sie diesen Termin löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle Vorkommen dieses Termins löschen oder nur das ausgewählte Vorkommen? Delete All Alle löschen Delete Only This Event Nur diesen Termin löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie diesen und alle zukünftigen Vorkommen dieses Termins löschen, oder nur das ausgewählte Vorkommen? Delete All Future Events Alle zukünftigen Termine löschen You are changing a repeating event. Sie ändern einen sich wiederholenden Termin. Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses Vorkommen des Termins oder alle Vorkommnisse ändern? All Alle Only This Event Nur diesen Termin Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses Ereignis oder dieses und alle zukünftigen Ereignisse ändern? All Future Events Alle zukünftigen Termine You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Mondkalenders daran erinnert. OK button OK CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Bearbeiten Delete Löschen All Day Ganztägig CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY GANZTÄGIG CSettingDialog Sunday Sonntag Monday Montag Use System Setting Systemeinstellung verwenden 24-hour clock 24-Stunden-Uhr 12-hour clock 12-Stunden-Uhr import ICS file ICS-Datei importieren Manual Manuell 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 Minuten) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals Termine und Veranstaltungen suchen CWeekWindow Week Woche Y J CYearScheduleView All Day Ganztägig No event Kein Termin CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Der Kalender ist ein Werkzeug zum Anzeigen von Terminen und auch ein intelligenter Tagesplaner, um alle Dinge im Leben zu planen. Calendarmainwindow Calendar Kalender Manage Verwalten Privacy Policy Datenschutzerklärung Syncing... Wird synchronisiert ... Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte später erneut versuchen CenterWidget All Day Ganztägig DAccountDataBase Work Arbeit Life Leben Other Andere DAlarmManager Close button Schließen One day before start Einen Tag vor Beginn Remind me tomorrow Erinnere mich morgen Remind me later Erinnere mich später 15 mins later 15 Min. später 1 hour later 1 Stunde später 4 hours later 4 Stunden später Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 bis %2 Today Heute DragInfoGraphicsView Edit Bearbeiten Delete Löschen New event Neuer Termin New Event Neuer Termin JobTypeListView export exportieren import ICS file ICS-Datei importieren You are deleting an event type. Sie löschen einen Termintyp. All events under this type will be deleted and cannot be recovered. Alle Termine dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Manage calendar Kalender verwalten Event types Termintypen Account settings Kontoeinstellungen Account Konto Select items to be synced Zu synchronisierende Elemente auswählen Events Termine General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Calendar account Kalenderkonto General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Termintyp Edit event type Termintyp bearbeiten Import ICS file ICS-Datei importieren Name: Name: Color: Farbe: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>-Datei: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Bitte einen Namen eingeben Shortcut Help Hilfe Delete event Termin löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alles auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_de_DE.ts000066400000000000000000001471051523260663500254120ustar00rootroot00000000000000 AccountItem Sync successful Synchronisierung erfolgreich Network error Netzwerkfehler Server exception Server-Exception-Fehler Storage full Speicher voll AccountManager Local account Lokales Konto Event types Ereignistypen CColorPickerWidget Color Farbe Cancel button Abbrechen Save button Speichern CDayMonthView Monday Montag Tuesday Dienstag Wednesday Mittwoch Thursday Donnerstag Friday Freitag Saturday Samstag Sunday Sonntag CDayWindow Y J M M D T Lunar Lunar CGraphicsView New Event Neues Ereignis CMonthScheduleNumItem %1 more %1 weitere CMonthView New event Neues Ereignis New Event Neues Ereignis CMonthWindow Y J CMyScheduleView My Event Mein Ereignis OK button O.K. Delete button Löschen Edit button Ändern CPushButton New event type Neuer Ereignis-Typ CScheduleDlg New Event Neues Ereignis Edit Event Ereignis ändern End time must be greater than start time Endzeitpunkt muss hinter dem Beginn liegen OK button O.K. Never Niemals At time of event Zum Ereigniszeitpunkt 15 minutes before 15 Minuten vorher 30 minutes before 30 Minuten vorher 1 hour before 1 Stunde davor 1 day before 1 Tag vorher 2 days before 2 Tage vorher 1 week before 1 Woche vorher On start day (9:00 AM) Am Anfang des Starttages (9:00Uhr) time(s) Zeit(en) Enter a name please Geben Sie bitte einen Namen ein The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Type: Art: Description: Beschreibung: All Day: Ganzer Tag Starts: Beginnt: Ends: Endet: Remind Me: Erinnere mich: Repeat: Wiederholen End Repeat: Wiederholen bis: Calendar account: Kalender-Konto Calendar account Kalender-Konto Type Art: Description Beschreibung All Day Ganzer Tag Time: Uhrzeit: Time Zeit Solar Solar Lunar Lunar Starts Beginnt Ends Endet Remind Me Erinnere mich Repeat Wiederholen Daily Täglich Weekdays Wochentäglich Weekly Wöchentlich Monthly Monatlich Yearly Jährlich End Repeat Wiederholungsende After Nach On m Cancel button Abbrechen Save button Speichern CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wiederholungsereignisse müssen alle den selben Ganzer-Tag-Status haben. Do you want to change all occurrences? Möchen Sie den Status bei allen Wiederholungen ändern? Cancel button Abbrechen Change All Alle Ändern You are changing the repeating rule of this event. Sie ändern die Wiederhol-Regel dieses Ereignisses. You are deleting an event. Sie löschen ein Ereignis Are you sure you want to delete this event? Sind Sie sicher, dass Sie dieses Ereignis löschen möchten? Delete button Löschen Do you want to delete all occurrences of this event, or only the selected occurrence? Möchten Sie alle oder nur das ausgewählte Ereignis löschen? Delete All Alle löschen Delete Only This Event Nur dieses Ereignis löschen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Möchten Sie dieses Ereignis und auch die zukünftigen oder nur das ausgewählte löschen? Delete All Future Events Alle zukünftigen Ereignisse löschen You are changing a repeating event. Sie ändern ein Wiederholungsereignis Do you want to change only this occurrence of the event, or all occurrences? Möchten Sie nur dieses eine Ereignis oder gleich alle löschen? All Alle Only This Event Nur dieses eine Ereignis Do you want to change only this occurrence of the event, or this and all future occurrences? Möchten Sie nur dieses eine Ereignis oder dieses sowie alle zukünftigen löschen? All Future Events Alle zukünftigen Ereignisse You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Sie haben einen Schaltmonat ausgewählt und werden nach den Regeln des Lunar-Kalenders erinnert. OK button O.K. CScheduleSearchDateItem Y J M M D T CScheduleSearchItem Edit Ändern Delete Löschen All Day Ganzer Tag CScheduleSearchView No search results Keine Suchergebnisse CScheduleView ALL DAY Ganzer Tag CSettingDialog Sunday Sonntag Monday Montag Use System Setting Systemeinstellungen verwenden 24-hour clock 24-Stunden-Zeit 12-hour clock 12-Stunden-Zeit import ICS file ICS-Datei importieren Manual Selbsteingabe 15 mins 15 Minuten 30 mins 30 Minuten 1 hour 1 Stunde 24 hours 24 Stunden Sync Now Jetzt synchronisieren Last sync Letzte Synchronisierung Please go to the <a href='/'>Control Center</a> to change system settings Bitte gehen Sie ins <a href='/'>Kontrollzentrum</a> um die Systemeinstellungen zu ändern CTimeEdit (%1 mins) (%1 Min) (%1 hour) (%1 Stunde) (%1 hours) (%1 Stunden) CTitleWidget Y J M M W W D T Search events and festivals In Ereignissen und Feiertagen suchen CWeekWindow Week Woche Y J CYearScheduleView All Day Ganzer Tag No event Kein Ereignis CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender ist ein Werkzeug um Termine nachzuschauen, aber auch um schlau die all die Dinge des Lebens zu organisieren. Calendarmainwindow Calendar Kalender Manage Organisieren Privacy Policy Datenschutzerklärung Syncing... Synchronisieren… Sync successful Synchronisierung erfolgreich Sync failed, please try later Synchronisierung fehlgeschlagen, bitte nochmals versuchen CenterWidget All Day Ganzer Tag DAccountDataBase Work Arbeit Life Privatleben Other Anderes DAlarmManager Close button Schließen One day before start Ein Tag vor Beginn Remind me tomorrow Morgen daran erinnern Remind me later Später erinnern 15 mins later 15 Minuten danach 1 hour later 1 Stunde danach 4 hours later 4 Stunden danach Tomorrow Morgen Schedule Reminder Terminerinnerung %1 to %2 %1 zu %2 Today Heute DragInfoGraphicsView Edit Ändern Delete Löschen New event Neues Ereignis New Event Neues Ereignis JobTypeListView export Exportieren import ICS file ICS-Datei importieren You are deleting an event type. Sie löschen einen Ereignis-Typ All events under this type will be deleted and cannot be recovered. Alle Ereignisse dieses Typs werden gelöscht und können nicht wiederhergestellt werden. Cancel button Abbrechen Delete button Löschen QObject Manage calendar Kalender einrichten Event types Ereignistypen Account settings Kontoeinstellungen Account Konto Select items to be synced Das zu synchronisierende Ereignis auswählen Events Ereignisse General settings Allgemeine Einstellungen Sync interval Synchronisierungsintervall Calendar account Kalender-Konto General Allgemein First day of week Erster Tag der Woche Time Zeit Return Today Return Heute Return Today Today Return Today Heute ScheduleTypeEditDlg New event type Neuer Ereignis-Typ Edit event type Ereignis-Typ ändern Import ICS file ICS-Datei importieren Name: Name: Color: Farbe: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>-Datei: Cancel button Abbrechen Save button Speichern The name can not only contain whitespaces Der Name darf nicht nur Leerzeichen enthalten Enter a name please Geben Sie bitte einen Namen ein Shortcut Help Hilfe Delete event Ereignis löschen Copy Kopieren Cut Ausschneiden Paste Einfügen Delete Löschen Select all Alle auswählen SidebarCalendarWidget Y J M M TimeJumpDialog Go button Los geht's UserloginWidget Sign In button Anmelden Sign Out button Abmelden YearFrame Y J today Today Today Heute linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_el.ts000066400000000000000000001411631523260663500250500ustar00rootroot00000000000000 AccountItem Sync successful Επιτυχής συγχ�ονισμός Network error Σφάλμα δικτ�ου Server exception Ανατ�οπή διακομιστή Storage full Πλή�ες αποθετή�ιο AccountManager Local account Τοπικός λογα�ιασμός Event types Τ�ποι γεγονότων CColorPickerWidget Color Χ�ώμα Cancel button Ακ��ωση Save button Αποθήκευση CDayMonthView Monday Δευτέ�α Tuesday Τ�ίτη Wednesday Τετά�τη Thursday Πέμπτη Friday Πα�ασκευή Saturday Σάββατο Sunday Κυ�ιακή CDayWindow Y Ε M Μ D Η Lunar Λουνα�ικό CGraphicsView New Event �έο Συμβάν CMonthScheduleNumItem %1 more %1 πε�ισσότε�ο-α CMonthView New event �έο συμβάν New Event �έο Συμβάν CMonthWindow Y Y CMyScheduleView My Event Το συμβάν μου OK button ΟΚ Delete button Διαγ�αφή Edit button Επεξε�γασία CPushButton New event type �έος τ�πος συμβάντος CScheduleDlg New Event �έο συμβάν Edit Event Επεξε�γασία συμβάντος End time must be greater than start time Ο χ�όνος λήξης π�έπει να είναι μεγαλ�τε�ος του χ�όνου ένα�ξης OK button OK Never Ποτέ At time of event Την ώ�α του συμβάντος 15 minutes before 15 λεπτά π�ιν 30 minutes before 30 λεπτά π�ιν 1 hour before 1 ώ�α π�ιν 1 day before 1 ημέ�α π�ιν 2 days before 2 ημέ�ες π�ιν 1 week before 1 εβδομάδα π�ιν On start day (9:00 AM) Στην ένα�ξη της ημέ�ας (9:00 ΠΜ) time(s) φο�ά(ές) Enter a name please Πα�ακαλώ εισάγετε ένα όνομα The name can not only contain whitespaces Το όνομα δεν μπο��εί να πε�ιέχει μόνο κενο�ς χα�ακτή�ες Type: Τ�πος: Description: Πε�ιγ�αφή: All Day: Ολοήμε�ο: Starts: Α�χίζει: Ends: Τελειώνει: Remind Me: Υπενθ�μισέ μου: Repeat: Επανάληψη: End Repeat: Τέλος Επανάληψης: Calendar account: Λογα�ιασμός ημε�ολογίου: Calendar account Λογα�ιασμός ημε�ολογίου Type Τ�πος Description Πε�ιγ�αφή All Day Ολοήμε�ο Time: ��α: Time ��α Solar Ηλιοκεντ�ικό Lunar Λουνα�ικό Starts Α�χίζει Ends Τελειώνει Remind Me Υπενθ�μισέ μου Repeat Επανάληψη Daily Ημε�ήσιο Weekdays Ε�γάσιμες Weekly Εβδομαδιαίο Monthly Μηνιαίο Yearly Ετήσιο End Repeat Τέλος Επανάληψης After Μετά On Ενε�γό Cancel button Ακ��ωση Save button Αποθήκευση CScheduleOperation All occurrences of a repeating event must have the same all-day status. Όλες οι εμφανίσεις ενός επαναλαμβανόμενου συμβάντος π�έπει να έχουν την ίδια ολοήμε�η κατάσταση. Do you want to change all occurrences? Θέλετε να αλλάξετε όλες τις εμφανίσεις; Cancel button Ακ��ωση Change All Αλλαγή Όλων You are changing the repeating rule of this event. Αλλάζεις τον κανόνα επανάληψης αυτο� του συμβάντος. You are deleting an event. Διαγ�άφεις ένα συμβάν Are you sure you want to delete this event? Είστε σίγου�ος ότι θέλετε να διαγ�άψετε αυτό το συμβάν; Delete button Διαγ�αφή Do you want to delete all occurrences of this event, or only the selected occurrence? Θέλετε να διαγ�άψετε όλες τις εμφανίσεις αυτο� του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Διαγ�αφή όλων Delete Only This Event Διαγ�αφή Μόνο Αυτο� του Συμβάντος Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Θέλετε να διαγ�άψετε αυτήν και όλες τις μελλοντικές εμφανίσεις αυτο� του συμβάντος ή μόνο την επιλεγμένη εμφάνιση; Delete All Future Events Διαγ�αφή Όλων των Μελλοντικών Συμβάντων You are changing a repeating event. Αλλάζεις ένα επαναλαμβανόμενο συμβάν. Do you want to change only this occurrence of the event, or all occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή όλες τις εμφανίσεις; All Όλα Only This Event Μόνο Αυτό το Συμβάν Do you want to change only this occurrence of the event, or this and all future occurrences? Θέλετε να αλλάξετε μόνο αυτήν την εμφάνιση του συμβάντος ή αυτήν και όλες τις μελλοντικές εμφανίσεις; All Future Events Όλα τα Μελλοντικά Συμβάντα You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Έχετε επιλέξει ένα άλλο μήνα, θα σας ενημε�ώσουν σ�μφωνα με τους κανόνες του λουνα�ικο� καλενδα�ιο�. OK button ΟΚ CScheduleSearchDateItem Y Ε M Μ D Η CScheduleSearchItem Edit Επεξε�γασία Delete Διαγ�αφή All Day Ολοήμε�ο CScheduleSearchView No search results Χω�ίς αποτελέσματα αναζήτησης CScheduleView ALL DAY ΟΛΟΗΜΕΡΟ CSettingDialog Sunday Κυ�ιακή Monday Δευτέ�α Use System Setting Χ�ησιμοποιήστε τις �υθμίσεις του συστήματος 24-hour clock 24-ω�ο �ολόι 12-hour clock 12-ω�ο �ολόι import ICS file εισαγωγή α�χείου ICS Manual Μη αυτόματα 15 mins 15 λεπτά 30 mins 30 λεπτά 1 hour 1 ώ�α 24 hours 24 ώ�ες Sync Now Συγχ�ονισμός Τώ�α Last sync Τελευταίος συγχ�ονισμός Please go to the Control Center to change system settings Πα�ακαλώ πάτε στο Κέντ�ο Ελέγχου για να αλλάξετε τις �υθμίσεις του συστήματος CTimeEdit (%1 mins) (%1 λεπτά) (%1 hour) (%1 ώ�α) (%1 hours) (%1 ώ�ες) CTitleWidget Y Ε M Μ W Β D Η Search events and festivals Αναζήτηση γεγονότων και ημε�ομηνίων CWeekWindow Week Εβδομάδα Y Y CYearScheduleView All Day Ολοήμε�ο No event Χω�ίς συμβάν CYearWindow Y Y CalendarWindow Calendar Ημε�ολόγιο Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Το Ημε�ολόγιο είναι ένα ε�γαλείο για να δεις ημε�ομηνίες, αλλα και επίσης ένας εξ�πνος σχεδιαστής ημέ�ας για να π�ογ�αμματίσεις όλα τα π�άγματα στην ζωή. Calendarmainwindow Calendar Ημε�ολόγιο Manage Διαχεί�ηση Privacy Policy Πολιτική Απο��ήτου Syncing... Συγχ�ονισμός... Sync successful Επιτυχής συγχ�ονισμός Sync failed, please try later Η συγχ�ονισμός απέτυχε, πα�ακαλώ π�οσπαθήστε α�γότε�α CenterWidget All Day Ολοήμε�ο DAccountDataBase Work Ε�γασία Life Ζωή Other Άλλο DAlarmManager Close button Κλείσιμο One day before start Μια ημέ�α π�ιν την εκκίνηση Remind me tomorrow Υπενθ�μισέ μου α��ιο Remind me later Υπεθ�μισέ μου α�γότε�α 15 mins later 15 λεπτά α�γότε�α 1 hour later 1 ώ�α α�γότε�α 4 hours later 4 ώ�ες α�γότε�α Tomorrow Α��ιο Schedule Reminder Π�ογ�αμματισμός Υπενθ�μισης %1 to %2 %1 εως %2 Today Σήμε�α DragInfoGraphicsView Edit Επεξε�γασία Delete Διαγ�αφή New event �έο συμβάν New Event �έο Συμβάν JobTypeListView export εκπό�ευση import ICS file εισαγωγή α�χείου ICS You are deleting an event type. Διαγ�άφετε έναν τ�πο γεγονότων. All events under this type will be deleted and cannot be recovered. Όλα τα γεγονότα υπό αυτόν τον τ�πο θα διαγ�αφο�ν και δεν θα μπο�ο�ν να ανακτηθο�ν. Cancel button Ακ��ωση Delete button Διαγ�αφή QObject Manage calendar Διαχει�ιστείτε το καλενδά�ι Event types Τ�ποι γεγονότων Account settings Ρυθμίσεις λογα�ιασμο� Account Λογα�ιασμός Select items to be synced Επιλέξτε στοιχεία για συγχ�ονισμό Events Συμβάντα General settings Γενικές �υθμίσεις Sync interval Διάστημα συγχ�ονισμο� Calendar account Λογα�ιασμός ημε�ολογίου General Γενικά First day of week Π�ώτη ημέ�α της εβδομάδας Time ��α Return Today Return Σήμε�α Return Today Today Return Today Σήμε�α ScheduleTypeEditDlg New event type �έος τ�πος συμβάντος Edit event type Επεξε�γασία τ�που γεγονότων Import ICS file Εισαγωγή α�χείου ICS Name: Όνομα: Color: Χ�ώμα: ICS File: Α�χείο ICS: Cancel button Ακ��ωση Save button Αποθήκευση The name can not only contain whitespaces Το όνομα δεν μπο��εί να πε�ιέχει μόνο κενο�ς χα�ακτή�ες Enter a name please Πα�ακαλώ εισάγετε ένα όνομα Shortcut Help Βοήθεια Delete event Διαγ�αφή συμβάντος Copy Αντιγ�αφή Cut Αποκοπή Paste Επικόλληση Delete Διαγ�αφή Select all Επιλογή όλων SidebarCalendarWidget Y Ε M Μ TimeJumpDialog Go button Πάει UserloginWidget Sign In button Σ�νδεση Sign Out button Έξοδος YearFrame Y Y today Today Today Σήμε�α linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_en.ts000066400000000000000000001457221523260663500250570ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Use System Setting 24-hour clock 24-hour clock 12-hour clock 12-hour clock import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Life Other DAlarmManager Close button One day before start Remind me tomorrow Remind me later 15 mins later 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Manage calendar Event types Event types Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Calendar account Calendar account General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Name: Name: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_en_US.ts000066400000000000000000001316331523260663500254620ustar00rootroot00000000000000 AccountItem Sync successful Sync successful Network error Network error Server exception Server exception Storage full Storage full AccountManager Local account Local account Event types Event types CColorPickerWidget Color Color Cancel button Cancel Save button Save CDayMonthView Monday Monday Tuesday Tuesday Wednesday Wednesday Thursday Thursday Friday Friday Saturday Saturday Sunday Sunday CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event New Event CMonthScheduleNumItem %1 more %1 more CMonthView New event New event New Event New Event CMonthWindow Y Y CMyScheduleView My Event My Event OK button OK Delete button Delete Edit button Edit CPushButton New event type New event type CScheduleDlg New Event New Event Edit Event Edit Event End time must be greater than start time End time must be greater than start time OK button OK Never Never At time of event At time of event 15 minutes before 15 minutes before 30 minutes before 30 minutes before 1 hour before 1 hour before 1 day before 1 day before 2 days before 2 days before 1 week before 1 week before On start day (9:00 AM) On start day (9:00 AM) time(s) time(s) Enter a name please Enter a name please The name can not only contain whitespaces The name can not only contain whitespaces Type: Type: Description: Description: All Day: All Day: Starts: Starts: Ends: Ends: Remind Me: Remind Me: Repeat: Repeat: End Repeat: End Repeat: Calendar account: Calendar account: Calendar account Calendar account Type Type Description Description All Day All Day Time: Time: Time Time Solar Solar Lunar Lunar Starts Starts Ends Ends Remind Me Remind Me Repeat Repeat Daily Daily Weekdays Weekdays Weekly Weekly Monthly Monthly Yearly Yearly End Repeat End Repeat After After On On Cancel button Cancel Save button Save CScheduleOperation All occurrences of a repeating event must have the same all-day status. All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Do you want to change all occurrences? Cancel button Cancel Change All Change All You are changing the repeating rule of this event. You are changing the repeating rule of this event. You are deleting an event. You are deleting an event. Are you sure you want to delete this event? Are you sure you want to delete this event? Delete button Delete Do you want to delete all occurrences of this event, or only the selected occurrence? Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete All Delete Only This Event Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events Delete All Future Events You are changing a repeating event. You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? Do you want to change only this occurrence of the event, or all occurrences? All All Only This Event Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Edit Delete Delete All Day All Day CScheduleSearchView No search results No search results CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Sunday Monday Monday Use System Setting Use System Setting 24-hour clock 24-hour clock 12-hour clock 12-hour clock import ICS file import ICS file Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hour 24 hours 24 hours Sync Now Sync Now Last sync Last sync Please go to the Control Center to change system settings Please go to the Control Center to change system settings CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hour) (%1 hours) (%1 hours) CTitleWidget Y Y M M W W D D Search events and festivals Search events and festivals CWeekWindow Week Week Y Y CYearScheduleView All Day All Day No event No event CYearWindow Y Y CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarmainwindow Calendar Calendar Manage Manage Privacy Policy Privacy Policy Syncing... Syncing... Sync successful Sync successful Sync failed, please try later Sync failed, please try later CenterWidget All Day All Day DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button Close One day before start One day before start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 mins later 1 hour later 1 hour later 4 hours later 4 hours later Tomorrow Tomorrow Schedule Reminder Schedule Reminder %1 to %2 %1 to %2 Today Today DragInfoGraphicsView Edit Edit Delete Delete New event New event New Event New Event JobTypeListView export export import ICS file import ICS file You are deleting an event type. You are deleting an event type. All events under this type will be deleted and cannot be recovered. All events under this type will be deleted and cannot be recovered. Cancel button Cancel Delete button Delete QObject Manage calendar Manage calendar Event types Event types Account settings Account settings Account Account Select items to be synced Select items to be synced Events Events General settings General settings Sync interval Sync interval Calendar account Calendar account General General First day of week First day of week Time Time Return Today Return Today Return Today Today Return Today Today ScheduleTypeEditDlg New event type New event type Edit event type Edit event type Import ICS file Import ICS file Name: Name: Color: Color: ICS File: ICS File: Cancel button Cancel Save button Save The name can not only contain whitespaces The name can not only contain whitespaces Enter a name please Enter a name please Shortcut Help Help Delete event Delete event Copy Copy Cut Cut Paste Paste Delete Delete Select all Select all SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Go UserloginWidget Sign In button Sign In Sign Out button Sign Out YearFrame Y Y today Today Today Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_eo.ts000066400000000000000000001323051523260663500250510ustar00rootroot00000000000000 AccountItem Sync successful Sincronizado sukcese Network error Reto erroro Server exception Servo ekzemplo Storage full Depozito plena AccountManager Local account Loka konto Event types Evento tipoj CColorPickerWidget Color Koloro Cancel button Anuligi Save button Konservi CDayMonthView Monday Lundo Tuesday Mardo Wednesday Merkredo Thursday Ĵaŭdo Friday Vendredo Saturday Sabato Sunday Dimanço CDayWindow Y Y M M D D Lunar Lunara CGraphicsView New Event Nova evento CMonthScheduleNumItem %1 more %1 pli CMonthView New event Nova evento New Event Nova evento CMonthWindow Y Y CMyScheduleView My Event Mia evento OK button OK Delete button Forigi Edit button Redakti CPushButton New event type Nova evento tipo CScheduleDlg New Event Nova evento Edit Event Redakti evento End time must be greater than start time La tempo de fino devas esti pli granda ol tempo de komenco OK button OK Never Neniam At time of event En tempo de evento 15 minutes before 15 minutoj antaŭ 30 minutes before 30 minutoj antaŭ 1 hour before 1 horo antaŭ 1 day before 1 tago antaŭ 2 days before 2 tagoj antaŭ 1 week before 1 semajno antaŭ On start day (9:00 AM) La tago de komenco (9:00 AM) time(s) tempo(j) Enter a name please Enigu nomon, bonvolu The name can not only contain whitespaces La nomo ne povas enhavi nur blankojn Type: Tipo: Description: Priskribo: All Day: Tuta tago: Starts: Komencas: Ends: Finis: Remind Me: Memorigu Mian: Repeat: Repeti: End Repeat: Fine de Repeti: Calendar account: Kalendaro konto: Calendar account Kalendaro konto Type Tipo Description Priskribo All Day Tuta tago Time: Tempo: Time Tempo Solar Solaro Lunar Lunara Starts Komencas Ends Fine Remind Me Memorigu M Repeat Repeti Daily Malka Weekdays Jornadaj Weekly Semanale Monthly Mensuala Yearly Jare End Repeat Fine Repeti After Post On Sur Cancel button Anuligi Save button Konservi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ĉiuj okazoj de ripetanta evento devas havi la saman tuttagan staton. Do you want to change all occurrences? Ĉu vi volas �an�i ĉiujn okazojn? Cancel button Anuligi Change All Ŝan�i Ĉiujn You are changing the repeating rule of this event. Vi �an �an�i la ripetantan regulon de ĉi tiu evento. You are deleting an event. Vi faras la deletadon de evento. Are you sure you want to delete this event? Ĉu vi certas, ke vi volas deletigi ĉi tiun evento? Delete button Deleti Do you want to delete all occurrences of this event, or only the selected occurrence? Ĉu vi volas deleti ĉiujn okazojn de ĉi tiu evento, aŭ nur la elektitan okazon? Delete All Deleti Ĉiujn Delete Only This Event Deleti Nur Ĉi Tiun Eventon Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ĉu vi volas deleti ĉi tiun kaj ĉiujn futurajn okazojn de ĉi tiu evento, aŭ nur la elektitan okazon? Delete All Future Events Deleti Ĉiujn Futurajn Eventojn You are changing a repeating event. Vi estas �an�ante ripetantan evento. Do you want to change only this occurrence of the event, or all occurrences? Ĉu vi volas �an�i nur tiun okazon de la evento, aŭ ĉiujn okazojn? All Ĉiuj Only This Event Nur Tiu Evento Do you want to change only this occurrence of the event, or this and all future occurrences? Ĉu vi volas �an�i nur tiun okazon de la evento, aŭ tiun kaj ĉiujn venontajn okazojn? All Future Events Ĉiuj Futuraj Eventoj You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vi elektis saltmonato, kaj vi estos memorigita konsiderante la regulojn de la lunara kalendro. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Redakti Delete Forigi All Day Tuta Tago CScheduleSearchView No search results Neniu serĉo de rezultoj CScheduleView ALL DAY TUTA TAGO CSettingDialog Sunday Dimanĉo Monday Lundo Use System Setting Uzi Sistemon de Agordoj 24-hour clock 24-horaj horoj 12-hour clock 12-horaj horoj import ICS file importi ICS dosieron Manual Manuale 15 mins 15 minutoj 30 mins 30 minutoj 1 hour 1 horo 24 hours 24 horoj Sync Now Sincronigi Nun Last sync Lasta sincrono Please go to the Control Center to change system settings Bonvolu iri al la Kontrolcentro por �an�i sistemon de agordoj CTimeEdit (%1 mins) (%1 minutoj) (%1 hour) (%1 horo) (%1 hours) (%1 horoj) CTitleWidget Y Y M M W W D D Search events and festivals Serĉi eventojn kaj festojn CWeekWindow Week Semajno Y Y CYearScheduleView All Day Tuta tago No event Neniu evento CYearWindow Y Y CalendarWindow Calendar Kalendro Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendro estas ilo por vidigi datojn, kaj ankaŭ inteligenta taga plenigilo por programi ĉion en via vivo. Calendarmainwindow Calendar Kalendro Manage Ĝerhardi Privacy Policy Privata Politiko Syncing... Sincroni�ante... Sync successful Sincroni�is sukcese Sync failed, please try later Sincroni�is mal sukcese, bonvolu provi pli post CenterWidget All Day Tuta tago DAccountDataBase Work Laboro Life Vivo Other Alia DAlarmManager Close button Ŝlosi One day before start Unu tago antaŭ komenco Remind me tomorrow Memorigu min hieraŭ Remind me later Memorigu min pli poste 15 mins later 15 minutoj poste 1 hour later 1 horo post 4 hours later 4 horo post Tomorrow Morgo Schedule Reminder Agendi Memorilo %1 to %2 '%1 �is %2' Today Hodiaŭ DragInfoGraphicsView Edit Redakti Delete Forigi New event Nova evento New Event Nova Evento JobTypeListView export eksporti import ICS file importi dosieron ICS You are deleting an event type. Vi forigas eventotipon. All events under this type will be deleted and cannot be recovered. Ĉiuj evento sub tiu tipo estos forigitaj kaj ne povos esti rekonstruitaj. Cancel button Anuli Delete button Forigi QObject Manage calendar Administraci kalendro Event types Eventotipoj Account settings Kontoaj agordoj Account Konto Select items to be synced Elektu itemojn por sincroni Events Eventoj General settings Ĝenerala agordoj Sync interval Sincrona intervalo Calendar account Kalendro konto General Ĝenerala First day of week Unua tago de la semajno Time Tempo Return Today Return Hodiaŭ Return Today Today Return Today Hodiaŭ ScheduleTypeEditDlg New event type Nova evento tipo Edit event type Redakti evento tipo Import ICS file Importi ICS dosieron Name: Nomo: Color: Koloro: ICS File: ICS Dosiero: Cancel button Malka�i Save button Konservi The name can not only contain whitespaces La nomo ne povas enhavi nur blankojn Enter a name please Enigu nomon, bonvolu Shortcut Help Helpo Delete event Forigi evento Copy Kopii Cut Ŝteli Paste Malka�i Delete Forigi Select all Selekti ĉion SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Iradi UserloginWidget Sign In button Ensaluti Sign Out button Eliris YearFrame Y Y today Today Today Hodiaŭ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_es.ts000066400000000000000000001470211523260663500250560ustar00rootroot00000000000000 AccountItem Sync successful Sincronización exitosa Network error Error de red Server exception Excepción del servidor Storage full Almacenamiento lleno AccountManager Local account Cuenta local Event types Tipos de eventos CColorPickerWidget Color Color Cancel button Cancelar Save button Guardar CDayMonthView Monday lunes Tuesday martes Wednesday miércoles Thursday jueves Friday viernes Saturday sábado Sunday domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Nuevo evento CMonthScheduleNumItem %1 more %1 más CMonthView New event Nuevo evento New Event Nuevo evento CMonthWindow Y A CMyScheduleView My Event Mi evento OK button Aceptar Delete button Borrar Edit button Editar CPushButton New event type Nuevo tipo de evento CScheduleDlg New Event Nuevo evento Edit Event Editar evento End time must be greater than start time El tiempo final debe ser mayor que el tiempo inicial OK button Aceptar Never Nunca At time of event En el momento del evento. 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) El día de inicio (9:00 a.m.) time(s) hora(s) Enter a name please Por favor ingrese un nombre The name can not only contain whitespaces El nombre no puede contener espacios en blanco Type: Tipo: Description: Descripción: All Day: Todo el día: Starts: Inicia: Ends: Termina: Remind Me: Recordarme: Repeat: Repetir: End Repeat: Fin de repetición: Calendar account: Cuenta de calendario: Calendar account Cuenta de calendario Type Tipo Description Descripción All Day Todo el día Time: Tiempo: Time Tiempo Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Recordarme Repeat Repetir Daily Diariamente Weekdays Días laborables Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Fin de repetición After Después On Encendido Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas las instancias de un evento repetido debe tener el mismo estado todo el día. Do you want to change all occurrences? ¿Desea cambiar todas las instancias? Cancel button Cancelar Change All Cambiar todos You are changing the repeating rule of this event. Está cambiando la regla de repetición de este evento. You are deleting an event. Esta borrando un evento Are you sure you want to delete this event? ¿Está seguro que desea borrar este evento? Delete button Borrar Do you want to delete all occurrences of this event, or only the selected occurrence? ¿Desea borrar todas las instancias de este evento, o solo la instancia seleccionada? Delete All Eliminar todo Delete Only This Event Borrar solo este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ¿Desea eliminar este y todas las instancias futuras de este evento, o solo la instancia seleccionada? Delete All Future Events Borrar todos los eventos futuros You are changing a repeating event. Esta cambiando una repetición de un evento. Do you want to change only this occurrence of the event, or all occurrences? ¿Desea cambiar solo la instancia de este evento, o todas las instancias? All Todos Only This Event Solo este evento Do you want to change only this occurrence of the event, or this and all future occurrences? ¿Desea cambiar solo este acontecimiento del evento, o este y todos los acontecimientos futuros? All Future Events Todos los eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ha seleccionado un mes bisiesto y se le recordará de acuerdo con las reglas del calendario lunar. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo el día CScheduleSearchView No search results Sin resultados CScheduleView ALL DAY EVENTOS CSettingDialog Sunday Domingo Monday Lunes Use System Setting Usar configuración del sistema 24-hour clock Reloj de 24 horas 12-hour clock Reloj de 12 horas import ICS file Importar archivo ICS Manual Manual 15 mins 15 minutos 30 mins 30 minutos 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar ahora Last sync Ultima sincronizacion Please go to the <a href='/'>Control Center</a> to change system settings Vaya al </a>Centro de control</a> para cambiar la configuración del sistema CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y Y M M W W D D Search events and festivals Buscar eventos y festivales CWeekWindow Week Semana Y A CYearScheduleView All Day Todo el día No event No hay eventos CYearWindow Y A CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario de Deepin es una herramienta para consultar fechas, y un conveniente planificador para agendar sus reuniones y eventos. Calendarmainwindow Calendar Calendario Manage Ajustes Privacy Policy Política de privacidad Syncing... Sincronizando… Sync successful Sincronización exitosa Sync failed, please try later La sincronización falló, intentelo más tarde CenterWidget All Day Todo el día DAccountDataBase Work Trabajo Life Vida Other Otro DAlarmManager Close button Cerrar One day before start El día anterior al evento Remind me tomorrow Recuérdame mañana Remind me later Recuérdame luego 15 mins later 15 minutos después 1 hour later 1 hora después 4 hours later 4 horas después Tomorrow Mañana Schedule Reminder Programar Recordatorio %1 to %2 %1 a %2 Today Hoy DragInfoGraphicsView Edit Editar Delete Borrar New event Nuevo evento New Event Nuevo evento JobTypeListView export Exportar import ICS file Importar archivo ICS You are deleting an event type. Está eliminando un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos los eventos de este tipo se eliminarán y no se podrán recuperar. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Administrar calendario Event types Tipos de eventos Account settings Ajustes de la cuenta Account Cuenta Select items to be synced Seleccionar elementos a sincronizar Events Eventos General settings Ajustes generales Sync interval Intervalo de sincronización Calendar account Cuenta de calendario General General First day of week Primer día de la semana Time Tiempo Return Today Return Hoy Return Today Today Return Today Hoy ScheduleTypeEditDlg New event type Nuevo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar archivo ICS Name: Nombre: Color: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>Archivo: Cancel button Cancelar Save button Guardar The name can not only contain whitespaces El nombre no puede contener espacios en blanco Enter a name please Por favor ingrese un nombre Shortcut Help Ayuda Delete event Borrar evento Copy Duplicar Cut Cortar Paste Pegar Delete Borrar Select all Seleccionar todo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Cerrar sesión YearFrame Y A today Today Today Hoy linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_et.ts000066400000000000000000001323461523260663500250630ustar00rootroot00000000000000 AccountItem Sync successful Sünk ongeld Network error Võrgu viga Server exception Serveri erand Storage full Salvestusruum täis AccountManager Local account Lokaalne konto Event types Sündmustüübid CColorPickerWidget Color Värv Cancel button Tühjenda Save button Salvesta CDayMonthView Monday Esmaspäev Tuesday Teisipäev Wednesday Kolmapäev Thursday Neljapäev Friday Reede Saturday Laupäev Sunday Pühapäev CDayWindow Y Y M M D D Lunar Luuurahv CGraphicsView New Event Uus sündmus CMonthScheduleNumItem %1 more %1 rohkem CMonthView New event Uus sündmus New Event Uus sündmus CMonthWindow Y Y CMyScheduleView My Event Minu sündmus OK button OK Delete button Kustuta Edit button Muuda CPushButton New event type Uus sündmustüüp CScheduleDlg New Event Uus sündmus Edit Event Muuda sündmust End time must be greater than start time Lõppaeg peab olema suurem kui algus OK button OK Never Kordamata At time of event Sündmuse aja 15 minutes before 15 minutit enne 30 minutes before 30 minutit enne 1 hour before 1 tund enne 1 day before 1 päev enne 2 days before 2 päeva enne 1 week before 1 nädal enne On start day (9:00 AM) Algusaia päeval (9:00) time(s) aeg(a) Enter a name please Sisesta nimi The name can not only contain whitespaces Nimi ei tohi sisaldada ainult tühikuid Type: Tüüp: Description: Kirjeldus: All Day: Kogu päev: Starts: Alustab: Ends: Lõpetab: Remind Me: Tuletage meelde: Repeat: Kordu: End Repeat: Lõpeta kordumine Calendar account: Kalendri kont: Calendar account Kalendri kont Type Tüüp Description Kirjeldus All Day Kogu päev Time: Aeg: Time Aeg Solar Sool Lunar Kuu Starts Alustab Ends Lõpetab Remind Me Tuletage mind meelde Repeat Korduv Daily Iga päev Weekdays Kolmepäevad Weekly Igakuuline Monthly Kuu Yearly Aastas End Repeat Lõpeta korduv After Pärast On Alates Cancel button Tühista Save button Salvesta CScheduleOperation All occurrences of a repeating event must have the same all-day status. Korduvate sündmuste kõik toimumised peavad olema samasugune koguajaline olemus. Do you want to change all occurrences? Soovitakse kõiki toimumisi muuta? Cancel button Tühista Change All Muuda kõiki You are changing the repeating rule of this event. Sa muudad selle sündmuse korduvat reeglit. You are deleting an event. Sa kustutad sündmuse. Are you sure you want to delete this event? Kas sa tõesti soovid selle sündmuse kustutada? Delete button Kustuta Do you want to delete all occurrences of this event, or only the selected occurrence? Soovitakse kõiki sündmuste toimumisi kustutada, või ainult valitud toimumist? Delete All Kustuta kõik Delete Only This Event Kustuta ainult selle sündmus Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Soovitakse kustutada selle sündmus ja kõik tulevased toimumised, või ainult valitud toimumist? Delete All Future Events Kustuta kõik tulevased sündmused You are changing a repeating event. Te muutused korduvusevahetuse. Do you want to change only this occurrence of the event, or all occurrences? Soovitakse vahetada ainult selle sündmuse või kõiki sündmusi? All Kõik Only This Event Vaid selle sündmuse Do you want to change only this occurrence of the event, or this and all future occurrences? Soovitakse vahetada ainult selle sündmuse või selle ja kõiki tulevaid sündmusi? All Future Events Kõik tulevased sündmused You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Te valisite ümberjäänud kuu, ja te tõstetakse tõhe kuu kalendri reeglite kohaselt. OK button OK CScheduleSearchDateItem Y J M M D D CScheduleSearchItem Edit Redigeerida Delete Kustuta All Day Kogu päev CScheduleSearchView No search results Otsingutulemusi ei leitud CScheduleView ALL DAY KOGU PÄEV CSettingDialog Sunday Pühapäev Monday Esmaspäev Use System Setting Kasuta süsteemi seadistust 24-hour clock 24 tunni kell 12-hour clock 12 tunni kell import ICS file impordi ICS faili Manual Käsitsi 15 mins 15 minutit 30 mins 30 minutit 1 hour 1 tund 24 hours 24 tundi Sync Now Sünkrooni nüüd Last sync Viimane sünkroon Please go to the Control Center to change system settings Palun liikuge Kontrollkeskus süsteemi seadistuste muutmiseks CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 tund) (%1 hours) (%1 tundi) CTitleWidget Y Y M M W W D D Search events and festivals Otsi sündmusi ja festivalisid CWeekWindow Week Nädal Y 'Y' CYearScheduleView All Day Kogu päev No event Päevata CYearWindow Y 'Y' CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender on tööriist, mis näitab kuupäevi, ja ka tark daily plaaner, mis aitab plaanida kõiki elu asju. Calendarmainwindow Calendar Kalender Manage Haldama Privacy Policy Privatsuspoliitika Syncing... Sünkroniseerimine... Sync successful Sünkroniseerimine õnnestus Sync failed, please try later Sünkroniseerimine ebaõnnestus, proovige hiljem CenterWidget All Day Kogu päev DAccountDataBase Work Töö Life Elu Other Muu DAlarmManager Close button Sulge One day before start Ühe päeva enne algust Remind me tomorrow Tuletage mind tühja päevale Remind me later Tuletage mind hiljem 15 mins later 15 minutit hiljem 1 hour later 1 tunne pärast 4 hours later 4 tunne pärast Tomorrow Eesroheline Schedule Reminder Aeglas taastumine %1 to %2 '%1 kuni %2' Today Täna DragInfoGraphicsView Edit Muuda Delete Kustuta New event Uus sündmus New Event Uus Sündmus JobTypeListView export eksport import ICS file impordi ICS faili You are deleting an event type. Teie kustutate sündmusliiki. All events under this type will be deleted and cannot be recovered. Kõik sündmused selle liigis kustutatakse ja neid ei saa tagasi saada. Cancel button Tühista Delete button Kustuta QObject Manage calendar Järgida kalendrit Event types Sündmusliigid Account settings Kontokonfiguratsioon Account Konto Select items to be synced Valige ühendatavad elemendid Events Sündmused General settings Üldised seaded Sync interval Sünkroniseerimisvahemik Calendar account Kalendrikonto General Üldine First day of week Nädalavaikne päev Time Aeg Return Today Return Täna Return Today Today Return Today Täna ScheduleTypeEditDlg New event type Uus sündmusliik Edit event type Muuda sündmusliiki Import ICS file Impordi ICS fail Name: Nimi: Color: Värv: ICS File: ICS Fail: Cancel button Tühista Save button Salvesta The name can not only contain whitespaces Nimi ei tohi sisaldada ainult tühikuid Enter a name please Sisesta nimi, palun Shortcut Help Abi Delete event Kustuta sündmus Copy Kopeeri Cut Lõika Paste Liimi Delete Kustuta Select all Vali kõik SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Mine UserloginWidget Sign In button Logi sisse Sign Out button Logi välja YearFrame Y Y today Today Today Täna linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_eu.ts000066400000000000000000001330101523260663500250510ustar00rootroot00000000000000 AccountItem Sync successful Sinhonatua Network error Errore netwerkala Server exception Aurrebideko erorria Storage full Garderoa beterik AccountManager Local account Kontua lokale Event types Edukien motak CColorPickerWidget Color Kolorea Cancel button Utzi Save button Gorde CDayMonthView Monday Astelehena Tuesday Asteartea Wednesday Osteguna Thursday Ostirala Friday Larunbata Saturday Igande Sunday Osteguna CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event Edukia berria CMonthScheduleNumItem %1 more %1 gehiago CMonthView New event Edukia berria New Event Edukia berria CMonthWindow Y Y CMyScheduleView My Event Nire edukia OK button On Delete button Ezabatu Edit button Editatu CPushButton New event type Edukien mota berria CScheduleDlg New Event Erekin berria Edit Event Erekin editatu End time must be greater than start time Hasierako denbora baino eguneroko denbora handiagoa izan behar da OK button Ados Never Inoiz At time of event Erekin hasieran 15 minutes before 15 minutu lehenago 30 minutes before 30 minutez lehenago 1 hour before 1 orduz lehenago 1 day before 1 egunz lehenago 2 days before 2 egunz lehenago 1 week before 1 hebemana lehenago On start day (9:00 AM) Hasierako egunan (9:00 AM) time(s) denbora(k) Enter a name please Sartu izena mesedez The name can not only contain whitespaces Izenak ezin du soilik espasioak barne hartu Type: Mota: Description: Deskribapena: All Day: Buztaintzat: Starts: Hasierako: Ends: Finalizatzen: Remind Me: Gogoratu nirekin: Repeat: Berriztu: End Repeat: Finalizatu berriztu: Calendar account: Kalendariorako kontua: Calendar account Kalendariorako kontua Type Mota Description Deskribapena All Day Buztaintzat Time: Denbora: Time Denbarka Solar Solar Lunar Lunar Starts Hasieratzen Ends Bukatzen Remind Me Gogoratu Nirek Repeat Berritzen Daily Eguneratik Weekdays Astelekuak Weekly Astean Monthly Hilera Yearly Urtea End Repeat Berritzea Bueltatu After Eragotzi On On Cancel button Utzi Save button Gorde CScheduleOperation All occurrences of a repeating event must have the same all-day status. Berritzen den ikasketaren guztien ezkutua berdina izatea beharrezkoa da. Do you want to change all occurrences? Denbarrak guztien aldatu nahi duzu? Cancel button Utzi Change All Denbarrak Guztiak Aldatu You are changing the repeating rule of this event. Eskeraren berritzearen ezkutua aldatzen ari zara. You are deleting an event. Esker bat ezabatzen ari zara. Are you sure you want to delete this event? Zu nahi duzu eskera ezabatu? Delete button Ezabatu Do you want to delete all occurrences of this event, or only the selected occurrence? Zu nahi duzu eskera guztien ezabatu, edo aukeratutako denbarrak bakarrik ezabatu? Delete All Denbarrak Guztiak Ezabatu Delete Only This Event Eskera Bakarrik Ezabatu Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Zu nahi duzu eskera hau eta denbarrak ondoko guztiak ezabatu, edo aukeratutako denbarrak bakarrik ezabatu? Delete All Future Events Denbarrak Ondoko Guztiak Ezabatu You are changing a repeating event. Zurekin aldakizko eskiroa aldatzen ari zara. Do you want to change only this occurrence of the event, or all occurrences? Zurekin eskiroaren soilik gertaera aldatu nahi zara, edo guztiak? All Guztia Only This Event Soilik hau eskiroa Do you want to change only this occurrence of the event, or this and all future occurrences? Zurekin eskiroaren soilik gertaera aldatu nahi zara, edo hau eta guztizko gertaera ondorengoak? All Future Events Guztiak gertaera ondorengoak You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Zurekin hau eskiroa aukeratu duzula, egutegi lunarraren erregeloen arabera ezagutuko duzula. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editatu Delete Ezabatu All Day Egun osoa CScheduleSearchView No search results Bilaketa emaitzatarik ez CScheduleView ALL DAY ALL DAY CSettingDialog Sunday Astelehena Monday Asteartea Use System Setting Sistema ezarpena erabili 24-hour clock 24 orduko ordu-klocka 12-hour clock 12 orduko ordu-klocka import ICS file ICS fitxategia inportatu Manual Manuala 15 mins 15 minutu 30 mins 30 minutu 1 hour 1 ordu 24 hours 24 ordu Sync Now Sinhorri Last sync Azken sinhronizazioa Please go to the Control Center to change system settings Mesedez, egin Kontrol Zentroa sistema ezarpenak aldatzeko. CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 ordu) (%1 hours) (%1 ordu) CTitleWidget Y Y M M W W D D Search events and festivals Bilatu gertakariak eta festivalak CWeekWindow Week Astea Y 'Y' CYearScheduleView All Day Eguneko No event Ez dago gertakaria CYearWindow Y 'Y' CalendarWindow Calendar Kalendaria Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendaria datak ikusteko tresna da, eta gainera eguneko planifikatzaile inteligentea da denbora guztien planifikatzeko. Calendarmainwindow Calendar Kalendaria Manage Kudeatu Privacy Policy Pribatutasunaren politika Syncing... Sinhronizatzen... Sync successful Sinhronizazioa ondo egin da Sync failed, please try later Sinhronizazioa huts egin da, mesedez saiatu berriro CenterWidget All Day Eguneko DAccountDataBase Work Lan Life Bizi Other Beste DAlarmManager Close button Itxi One day before start Hasierako egunetik aurreko egun Remind me tomorrow Irekitu nire egun hurrengoan Remind me later Irekitu nire ondoren 15 mins later 15 minutu ondoren 1 hour later 4 hours later Tomorrow Schedule Reminder %1 to %2 Today DragInfoGraphicsView Edit Delete New event New Event JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button Delete button QObject Manage calendar Event types Account settings Account Select items to be synced Events General settings Sync interval Calendar account General First day of week Time Return Today Return Return Today Today Return Today ScheduleTypeEditDlg New event type Karga evento mota Edit event type Editatu evento mota Import ICS file Iportatu ICS fitxategia Name: Izena: Color: Kolora: ICS File: ICS Fitxategia: Cancel button Utzi Save button Gorde The name can not only contain whitespaces Izena ezin da soilik espazio hutsak edukiko Enter a name please Sartu izena mesedez Shortcut Help Laguntza Delete event Ezabatu evento Copy Kopiatu Cut Moztu Paste Itsatsi Delete Ezabatu Select all Aukeratu dena SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Joan UserloginWidget Sign In button Inisten Sign Out button Argitaratu YearFrame Y Y today Today Today Gaur linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_fa.ts000066400000000000000000001361071523260663500250400ustar00rootroot00000000000000 AccountItem Sync successful همایش مو�ق Network error خطا در اینترنت Server exception استثناء سرور Storage full خازن پر AccountManager Local account �户 محلی Event types نوع رویداد CColorPickerWidget Color رنگ Cancel button لغو Save button ذخیره CDayMonthView Monday دوشنبه Tuesday سه‌شنبه Wednesday چهارشنبه Thursday پنجشنبه Friday جمعه Saturday شنبه Sunday یکشنبه CDayWindow Y ی M م D د Lunar ماهی CGraphicsView New Event رویداد جدید CMonthScheduleNumItem %1 more %1 بیشتر CMonthView New event رویداد جدید New Event رویداد جدید CMonthWindow Y ی CMyScheduleView My Event رویداد من OK button تایید Delete button حذ� Edit button ویرایش CPushButton New event type نوع رویداد جدید CScheduleDlg New Event رویداد جدید Edit Event ویرایش رویداد End time must be greater than start time زمان پایان باید بیشتر از زمان شروع باشد OK button تایید Never هرگز At time of event در زمان رویداد 15 minutes before 15 دقیقه قبل 30 minutes before 30 دقیقه قبل 1 hour before 1 ساعت قبل 1 day before 1 روز قبل 2 days before 2 روز قبل 1 week before 1 ه�ته قبل On start day (9:00 AM) روی روز شروع (9:00 صبح) time(s) زمان(ها) Enter a name please لط�اً یک نام وارد کنید The name can not only contain whitespaces نام �قط می‌تواند شامل �ضاهای خالی نباشد Type: نوع: Description: توضیحات: All Day: کل روز: Starts: شروع می‌شود: Ends: پایان می‌یابد: Remind Me: ذکر کن: Repeat: تکرار: End Repeat: پایان تکرار: Calendar account: حساب کALENDAR: Calendar account حساب کALENDAR Type نوع Description توضیحات All Day کل روز Time: زمان: Time زمان Solar خورشیدی Lunar ماهی Starts شروع می‌شود Ends پایان می‌یابد Remind Me ذکر کن Repeat تکرار Daily روزانه Weekdays روزهای کاری Weekly ه�تگی Monthly �月 Yearly سالانه End Repeat پایان تکرار After بعد از On در Cancel button لغو Save button ذخیره CScheduleOperation All occurrences of a repeating event must have the same all-day status. تمام پیشامدهای تکراری باید وضعیت یک روز کامل یکسانی داشته باشند. Do you want to change all occurrences? آیا می‌خواهید تمام پیشامدها را تغییر دهید؟ Cancel button لغو Change All تغییر تمام You are changing the repeating rule of this event. شما قاعده تکراری این رویداد را تغییر می‌دهید. You are deleting an event. شما یک رویداد را حذ� می‌کنید. Are you sure you want to delete this event? آیا مطمئن هستید که می‌خواهید این رویداد را حذ� کنید؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? آیا می‌خواهید تمام پیشامدهای این رویداد را حذ� کنید یا �قط پیشامد انتخاب شده؟ Delete All حذ� تمام Delete Only This Event �قط این رویداد را حذ� کن Do you want to delete this and all future occurrences of this event, or only the selected occurrence? آیا می‌خواهید این رویداد و تمام پیشامدهای آینده آن را حذ� کنید یا �قط پیشامد انتخاب شده؟ Delete All Future Events حذ� تمام پیشامدهای آینده You are changing a repeating event. شما در حال تغییر یک رویداد تکراری هستید. Do you want to change only this occurrence of the event, or all occurrences? آیا �قط این رویداد یا همه رویدادها را تغییر دهید؟ All همه Only This Event �قط این رویداد Do you want to change only this occurrence of the event, or this and all future occurrences? آیا �قط این رویداد یا این و همه رویدادهای آینده را تغییر دهید؟ All Future Events همه رویدادهای آینده You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ماهیابانه ای را انتخاب کرده اید و به طور معمول بر اساس قواعد ماهیابانه به یاد خواهید آورد. OK button _OK_ CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit ویرایش Delete حذ� All Day تمام روز CScheduleSearchView No search results نتیجه ای پیدا نشد CScheduleView ALL DAY تمام روز CSettingDialog Sunday شنبه Monday دوشنبه Use System Setting از تنظیمات سیستم است�اده کنید 24-hour clock ساعت 24 ساعته 12-hour clock ساعت 12 ساعته import ICS file �ایل ICS را وارد کنید Manual دستی 15 mins 15 دقیقه 30 mins 30 دقیقه 1 hour 1 ساعت 24 hours 24 ساعت Sync Now هم اکنون هم از Sync Last sync آخرین هم از Sync Please go to the Control Center to change system settings لط�اً به مرکز کنترل بروید تا تنظیمات سیستم را تغییر دهید CTimeEdit (%1 mins) (%1 دقیقه) (%1 hour) (%1 ساعت) (%1 hours) (%1 ساعت) CTitleWidget Y چهارشنبه M ماه W ه�ته D روز Search events and festivals جستجوی رویدادها و جشنها CWeekWindow Week ه�ته Y 'چهارشنبه' CYearScheduleView All Day تمام روز No event هیچ رویدادی CYearWindow Y 'چهارشنبه' CalendarWindow Calendar تقویم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. تقویم ابزاری برای مشاهده تاریخها و همچنین یک برنامه روزانه هوشمندانه برای برنامه ریزی همه چیزهای زندگی است. Calendarmainwindow Calendar تقویم Manage مدیریت Privacy Policy سیاست حریم خصوصی Syncing... در حال هماهنگی... Sync successful هماهنگی با مو�قیت انجام شد Sync failed, please try later هماهنگی با شکست مواجه شد، لط�اً دوباره تلاش کنید CenterWidget All Day تمام روز DAccountDataBase Work کار Life زندگی Other سایر DAlarmManager Close button بستن One day before start یک روز پیش از شروع Remind me tomorrow امروز به من یادآوری کن Remind me later به من بعداً یادآوری کن 15 mins later 15 دقیقه بعداً 1 hour later 1 ساعت پس 4 hours later 4 ساعت پس Tomorrow �ردا Schedule Reminder یادآور برنامه %1 to %2 '%1 تا %2' Today امروز DragInfoGraphicsView Edit ویرایش Delete حذ� New event رویداد جدید New Event رویداد جدید JobTypeListView export صدور import ICS file ورود �ایل ICS You are deleting an event type. شما در حال حذ� یک نوع رویداد هستید. All events under this type will be deleted and cannot be recovered. همه رویدادهای در این نوع حذ� شده و قابل بازیابی نیستند. Cancel button لغو Delete button حذ� QObject Manage calendar مدیریت جدول زمانی Event types انواع رویداد Account settings تنظیمات حساب Account حساب Select items to be synced انتخاب اقلامی که باید به صورت همزمان شوند Events رویدادها General settings تنظیمات عمومی Sync interval بازه زمانی همزمان سازی Calendar account حساب جدول زمانی General عمومی First day of week روز اول ه�ته Time زمان Return Today Return بازگشت Return Today Today Return Today بازگشت به امروز ScheduleTypeEditDlg New event type نوع رویداد جدید Edit event type ویرایش نوع رویداد Import ICS file وارد کردن �ایل ICS Name: نام: Color: رنگ: ICS File: �ایل ICS: Cancel button لغو Save button ذخیره The name can not only contain whitespaces نام �قط می‌تواند شامل �ضاها باشد Enter a name please لط�اً یک نام وارد کنید Shortcut Help کمک Delete event حذ� رویداد Copy کپی Cut برید Paste چسباندن Delete حذ� Select all انتخاب همه SidebarCalendarWidget Y سال M ماه TimeJumpDialog Go button ر�ت UserloginWidget Sign In button ورود Sign Out button خروج YearFrame Y سال today Today Today امروز linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_fi.ts000066400000000000000000001465151523260663500250540ustar00rootroot00000000000000 AccountItem Sync successful Synkronointi onnistui Network error Verkkovirhe Server exception Palvelimen poikkeus Storage full Levytila täynnä AccountManager Local account Paikallinen tili Event types Tapahtumatyypit CColorPickerWidget Color Väri Cancel button Peruuta Save button Tallenna CDayMonthView Monday Maanantai Tuesday Tiistai Wednesday Keskiviikko Thursday Torstai Friday Perjantai Saturday Lauantai Sunday Sunnuntai CDayWindow Y V M K D P Lunar Kuu CGraphicsView New Event Uusi tapahtuma CMonthScheduleNumItem %1 more %1 lisää CMonthView New event Uusi tapahtuma New Event Uusi tapahtuma CMonthWindow Y V CMyScheduleView My Event Tapahtuma OK button OK Delete button Poista Edit button Muokkaa CPushButton New event type Uusi tapahtuman tyyppi CScheduleDlg New Event Uusi tapahtuma Edit Event Muokkaa tapahtumaa End time must be greater than start time Lopetusajan on oltava pidempi kuin aloitusaika OK button OK Never Ei koskaan At time of event Tapahtuman aikaan 15 minutes before 15 min ennen 30 minutes before 30 min ennen 1 hour before 1 tunti ennen 1 day before 1 päivä ennen 2 days before 2 päivää ennen 1 week before 1 viikko ennen On start day (9:00 AM) Aloituspäivänä (9:00) time(s) kertaa Enter a name please Anna nimi The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Type: Tyyppi: Description: Kuvaus: All Day: Koko päivä: Starts: Alkaa: Ends: Loppuu: Remind Me: Muistuta minua: Repeat: Toista: End Repeat: Lopeta toisto: Calendar account: Kalenteritili: Calendar account Kalenteritili Type Tyyppi Description Kuvaus All Day Koko päivä Time: Aika: Time Aika Solar Aurinko Lunar Kuu Starts Alkaa Ends Loppuu Remind Me Muistuta minua Repeat Toista Daily Päivittäin Weekdays Arkisin Weekly Viikoittain Monthly Kuukausittain Yearly Vuosittain End Repeat Lopeta toisto After Jälkeen On Päällä Cancel button Peruuta Save button Tallenna CScheduleOperation All occurrences of a repeating event must have the same all-day status. Kaikilla toistuvilla tapahtumilla on oltava sama koko päivän tila. Do you want to change all occurrences? Haluatko muuttaa kaikkia tapahtumia? Cancel button Peruuta Change All Vaihda kaikki You are changing the repeating rule of this event. Olet muuttamassa tämän tapahtuman toistuvaa sääntöä. You are deleting an event. Olet poistamassa tapahtumaa. Are you sure you want to delete this event? Haluatko varmasti poistaa tämän tapahtuman? Delete button Poista Do you want to delete all occurrences of this event, or only the selected occurrence? Haluatko poistaa kaikki tämän tapahtuman esiintymät vai vain valitun tapahtuman? Delete All Poista kaikki Delete Only This Event Poista vain tämä tapahtuma Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Haluatko poistaa tämän ja kaikki tämän tapahtuman tulevat esiintymät vai vain valitun tapahtuman? Delete All Future Events Poista kaikki tulevat tapahtumat You are changing a repeating event. Olet vaihtamassa toistuvaa tapahtumaa. Do you want to change only this occurrence of the event, or all occurrences? Haluatko muuttaa vain tämän tapahtuman vai kaikki tapahtumat? All Kaikki Only This Event Vain tämä tapahtuma Do you want to change only this occurrence of the event, or this and all future occurrences? Haluatko muuttaa vain tämän tapahtuman vai tätä ja kaikkia tulevia tapahtumia? All Future Events Kaikki tulevat tapahtumat You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Olet valinnut karkauskuukauden ja sinua muistutetaan kuukalenterin sääntöjen mukaisesti. OK button OK CScheduleSearchDateItem Y V M K D P CScheduleSearchItem Edit Muokkaa Delete Poista All Day Koko päivä CScheduleSearchView No search results Ei hakutuloksia CScheduleView ALL DAY AIKA CSettingDialog Sunday Sunnuntai Monday Maanantai Use System Setting Käytä järjestelmän asetuksia 24-hour clock 24h kello 12-hour clock 12h kello import ICS file tuo ICS kalenteri Manual Manuaalinen 15 mins 15 min 30 mins 30 min 1 hour 1 tunti 24 hours 24 tuntia Sync Now Synkronoi nyt Last sync Viimeisin synkronointi Please go to the <a href='/'>Control Center</a> to change system settings Siirry <a href='/'>Ohjauspaneeliin</a> ja muuta järjestelmän asetuksia CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 tunti) (%1 hours) (%1 tuntia) CTitleWidget Y V M KK W VK D PV Search events and festivals Hae tapahtumia ja festivaaleja CWeekWindow Week Viikko Y V CYearScheduleView All Day Koko päivä No event Ei tapahtumaa CYearWindow Y V CalendarWindow Calendar Kalenteri Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalenteri on työkalu almanakan tarkasteluun ja voit myös tehdä hälytykset ja muistutukset kalenteriin. Calendarmainwindow Calendar Kalenteri Manage Hallitse Privacy Policy Tietosuojakäytäntö Syncing... Synkronoidaan... Sync successful Synkronointi onnistui Sync failed, please try later Synkronointi epäonnistui, yritä myöhemmin CenterWidget All Day Koko päivä DAccountDataBase Work Työ Life Oma Other Muu DAlarmManager Close button Sulje One day before start Päivä ennen alkua Remind me tomorrow Muistuta huomenna Remind me later Muistuta myöhemmin 15 mins later 15 min myöhemmin 1 hour later 1 tunnin kuluttua 4 hours later 4 tunnin kuluttua Tomorrow Huomenna Schedule Reminder Ajasta muistutus %1 to %2 %1 - %2 Today Tänään DragInfoGraphicsView Edit Muokkaa Delete Poista New event Uusi tapahtuma New Event Uusi tapahtuma JobTypeListView export vie import ICS file tuo ICS kalenteri You are deleting an event type. Olet poistamassa tapahtumatyyppiä. All events under this type will be deleted and cannot be recovered. Kaikki tämän tyypin tapahtumat poistetaan, eikä niitä voi palauttaa. Cancel button Peruuta Delete button Poista QObject Manage calendar Hallitse kalenteria Event types Tapahtumatyypit Account settings Tilin asetukset Account Tili Select items to be synced Valitse synkronoitavat kohteet Events Tapahtumat General settings Yleiset asetukset Sync interval Synkronointiväli Calendar account Kalenteritili General Yleinen First day of week Viikon ensimmäinen päivä Time Aika Return Today Return Tänään Return Today Today Return Today Tänään ScheduleTypeEditDlg New event type Uusi tapahtuman tyyppi Edit event type Muokkaa tapahtuman tyyppiä Import ICS file tuo ICS kalenteri Name: Nimi: Color: Väri: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> kalenteri: Cancel button Peruuta Save button Tallenna The name can not only contain whitespaces Nimi ei voi sisältää vain välilyöntejä Enter a name please Anna nimi Shortcut Help Ohje Delete event Poista tapahtuma Copy Kopioi Cut Leikkaa Paste Liitä Delete Poista Select all Valitse kaikki SidebarCalendarWidget Y V M K TimeJumpDialog Go button Mene UserloginWidget Sign In button Kirjaudu sisään Sign Out button Kirjaudu ulos YearFrame Y V today Today Today Tänään linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_fil.ts000066400000000000000000001334521523260663500252240ustar00rootroot00000000000000 AccountItem Sync successful Nakakasunod na tagumpay Network error Kasalanan sa network Server exception Pangungusap sa server Storage full Lumabas na espasyo AccountManager Local account Mga lokal na account Event types Mga uri ng event CColorPickerWidget Color Kulay Cancel button Kanselahin Save button I-save CDayMonthView Monday Lunes Tuesday Martes Wednesday Mikolos Thursday Huwebes Friday Biyernes Saturday Sabado Sunday Pangalawang araw CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event Bagong event CMonthScheduleNumItem %1 more %1 pa CMonthView New event Bagong event New Event Bagong Event CMonthWindow Y Y CMyScheduleView My Event Aking event OK button OK Delete button Tanggalin Edit button I-edit CPushButton New event type Bagong uri ng event CScheduleDlg New Event Bagong Paganahin Edit Event Bagayin ang Paganahin End time must be greater than start time Dapat ang oras ng pagtatapos ay mas mataas kaysa sa oras ng pagmamarka OK button OK Never Sapagkat At time of event Sa oras ng pagaganahin 15 minutes before 15 minuto bago 30 minutes before 30 minuto bago 1 hour before 1 oras bago 1 day before 1 araw bago 2 days before 2 araw bago 1 week before 1 linggo bago On start day (9:00 AM) Sa araw ng pagmamarka (9:00 AM) time(s) oras(ng) Enter a name please Pakiusap, ipasok ang pangalan The name can not only contain whitespaces Ang pangalan ay hindi maaaring mag-iba ngunit mayroon lamang mga espasyo Type: Uri: Description: Paliwanag: All Day: Bawat Araw: Starts: Nagsisimula: Ends: Natutapos: Remind Me: Sugurin ako: Repeat: Uulitin: End Repeat: Tumapos ng Uulitin: Calendar account: Kalendaryo Account: Calendar account Kalendaryo Account Type Uri Description Paliwanag All Day Bawat Araw Time: Oras: Time Oras Solar Solar Lunar Lunar Starts Nagsisimula Ends Natutapos Remind Me Remind Me Repeat Ibalik Daily Araw-araw Weekdays Araw ng Linggo Weekly Linggoan Monthly Buwanan Yearly Taunan End Repeat Tumapos ng Pagbabalik After Pagkatapos On Sa Cancel button Iwan Save button I-save CScheduleOperation All occurrences of a repeating event must have the same all-day status. Lahat ng mga pangyayari ng isang pang repeatedly event kailangan magkaroon ng parehong status ng buong araw. Do you want to change all occurrences? Gusto mo bang baguhin ang lahat ng mga pangyayari? Cancel button Iwan Change All Baguhin Lahat You are changing the repeating rule of this event. Ang iyong nagbabago ang pautok na pautok ng pangyayari na ito. You are deleting an event. Ang iyong naglalagay ng isang pangyayari. Are you sure you want to delete this event? Sigurado ka ba na gusto mong i-delete ang pangyayari na ito? Delete button I-delete Do you want to delete all occurrences of this event, or only the selected occurrence? Gusto mo bang i-delete ang lahat ng mga pangyayari ng pangyayari na ito, o lamang ang napiling pangyayari? Delete All I-delete Lahat Delete Only This Event I-delete Lamang Ang Pangyayari Na Ito Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Gusto mo bang i-delete ang pangyayari na ito at lahat ng mga pangyayari sa kinabukasan, o lamang ang napiling pangyayari? Delete All Future Events I-delete Lahat ng Mga Pangyayari sa Kinabukasan You are changing a repeating event. Nagbabago ka ng isang repeated event. Do you want to change only this occurrence of the event, or all occurrences? Gusto mo bang baguhin ang eksaktong pangyayari ng event, o lahat ng mga pangyayari? All Lahat Only This Event Lamang Ang Event Do you want to change only this occurrence of the event, or this and all future occurrences? Gusto mo bang baguhin lamang ang eksaktong pangyayari ng event, o ang event na ito at lahat ng mga pangyayari sa hinaharap? All Future Events Laat Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Nagpili ka ng isang leap month, at babanggitin ka ayon sa mga pautang ng kalendaryo ng buwan. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit I-edit Delete I-delete All Day Bawat Araw CScheduleSearchView No search results Walang mga resulta ng paghanap CScheduleView ALL DAY BAWAT ARAW CSettingDialog Sunday Linggo Monday Lunes Use System Setting Gamitin ang System Setting 24-hour clock 24-oras na orasan 12-hour clock 12-oras na orasan import ICS file mag-import ng ICS file Manual Manwal 15 mins 15 minuto 30 mins 30 minuto 1 hour 1 oras 24 hours 24 oras Sync Now Synchronize Ngayon Last sync Huling Synchronize Please go to the Control Center to change system settings Saan ka makakarating ng Control Center upang baguhin ang system settings CTimeEdit (%1 mins) (%1 minuto) (%1 hour) (%1 oras) (%1 hours) (%1 oras) CTitleWidget Y Y M M W W D D Search events and festivals Hanapin ang mga pangyayari at pista CWeekWindow Week Linggo Y Y CYearScheduleView All Day Bawat Araw No event Walang pangyayari CYearWindow Y Y CalendarWindow Calendar Kalendaryo Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Ang kalendaryo ay angkop para makita ang mga petsa, at isang malikmik na araw na planner para mag-schedule ng lahat ng mga bagay sa buhay. Calendarmainwindow Calendar Kalendaryo Manage Pangasiwaan Privacy Policy Policies sa Kaligtasan Syncing... Syncing... Sync successful Nagawa ang Sync Sync failed, please try later Napakadali ang Sync, subukin ito muli mamaya CenterWidget All Day Bawat Araw DAccountDataBase Work Kasalanan Life Buhay Other Iba pa DAlarmManager Close button I-close One day before start Isang araw bago magsimula Remind me tomorrow Remind ako bukas Remind me later Remind ako mamaya 15 mins later 15 minuto mamaya 1 hour later Isang oras na ang susunod 4 hours later Apat na oras na ang susunod Tomorrow Bukas Schedule Reminder Paghahatag ng Alarma %1 to %2 '%1 hanggang %2' Today Ngayon DragInfoGraphicsView Edit I-edit Delete I-delete New event Bagong pangyayari New Event Bagong Pangyayari JobTypeListView export eksport import ICS file import ICS file You are deleting an event type. Naglalagay ka ng isang uri ng pangyayari. All events under this type will be deleted and cannot be recovered. Ang lahat ng mga pangyayari sa ilalim ng uri na ito ay iilalim at hindi maisasakatuparan. Cancel button Iwanan Delete button I-delete QObject Manage calendar Pangasiwaan ang kalendaryo Event types Mga uri ng pangyayari Account settings Pangkatang setting Account Acount Select items to be synced Pumili ng mga item na dapat isynchronize Events Mga pangyayari General settings Pangkakalikasan na setting Sync interval Mga interval na isynchronize Calendar account Kalendaryong Acount General Pangkakalikasan First day of week Unang araw sa linggo Time Oras Return Today Return Ngayon Return Today Today Return Today Ngayon ScheduleTypeEditDlg New event type Bagong uri ng event Edit event type I-edit ang uri ng event Import ICS file Ilipat ang file ng ICS Name: Pangalan: Color: Kulay: ICS File: File ng ICS: Cancel button Bumalik Save button I-save The name can not only contain whitespaces Ang pangalan ay hindi maaaring maglalaman lamang ng espasyo Enter a name please Sulat ng pangalan, please Shortcut Help Tulong Delete event Tanggalin ang event Copy Kopyahin Cut I-cut Paste I-paste Delete Tanggalin Select all Pumili ng lahat SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Pumunta UserloginWidget Sign In button Mag-login Sign Out button Mag-sign out YearFrame Y Y today Today Today Ngayon linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_fr.ts000066400000000000000000001502341523260663500250560ustar00rootroot00000000000000 AccountItem Sync successful Synchronisation réussie Network error Erreur réseau Server exception Exception de serveur Storage full Stockage plein AccountManager Local account Compte local Event types Type d'événement CColorPickerWidget Color Couleur Cancel button Annuler Save button Sauvegarder CDayMonthView Monday Lundi Tuesday Mardi Wednesday Mercredi Thursday Jeudi Friday Vendredi Saturday Samedi Sunday Dimanche CDayWindow Y A M M D J Lunar Lunaire CGraphicsView New Event Nouvel événement CMonthScheduleNumItem %1 more %1 de plus CMonthView New event Nouvel événement New Event Nouvel événement CMonthWindow Y A CMyScheduleView My Event Mon événement OK button OK Delete button Supprimer Edit button Éditer CPushButton New event type Nouveau type d'événement CScheduleDlg New Event Nouvel évènement Edit Event Éditer l'événement End time must be greater than start time L'heure de fin doit être supérieure à l'heure de début OK button OK Never Jamais At time of event Au moment de l'événement 15 minutes before 15 minutes avant 30 minutes before 30 minutes avant 1 hour before 1 heure avant 1 day before 1 jour avant 2 days before 2 jours avant 1 week before 1 semaine avant On start day (9:00 AM) Le jour de début (9h00) time(s) heure(s) Enter a name please Entrer un nom s'il vous plait The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Type: Type : Description: Description : All Day: Toute la journée : Starts: Débuts : Ends: Fin : Remind Me: Rappelez-moi : Repeat: Répéter : End Repeat: Fin de la répétition : Calendar account: Compte de calendrier : Calendar account Compte de calendrier Type Type Description Description All Day Toute la journée Time: Temps : Time Temps Solar Solaire Lunar Lunaire Starts Débuts Ends Fin Remind Me Rappelez-moi Repeat Répéter Daily Journalier Weekdays Jours de la semaine Weekly Hebdomadaire Monthly Mensuel Yearly Annuel End Repeat Terminer la répétition After Après On Sur Cancel button Annuler Save button Sauvegarder CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toutes les occurrences d'un événement répétitif doivent avoir le même statut toute la journée. Do you want to change all occurrences? Voulez-vous modifier toutes les occurrences ? Cancel button Annuler Change All Tout changer You are changing the repeating rule of this event. Vous modifiez la règle de répétition de cet événement. You are deleting an event. Vous êtes en train de supprimer un événement. Are you sure you want to delete this event? Êtes-vous sûr de vouloir supprimer cet événement ? Delete button Supprimer Do you want to delete all occurrences of this event, or only the selected occurrence? Voulez-vous supprimer toutes les occurrences de cet événement ou uniquement l'occurrence sélectionnée ? Delete All Tout supprimer Delete Only This Event Supprimer uniquement cet événement Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Voulez-vous supprimer cet événement et toutes les occurrences futures de cet événement, ou uniquement l'occurrence sélectionnée ? Delete All Future Events Supprimer tous les événements futurs You are changing a repeating event. Vous modifiez un événement récurrent. Do you want to change only this occurrence of the event, or all occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement ou toutes les occurrences ? All Tout Only This Event Seulement cet événement Do you want to change only this occurrence of the event, or this and all future occurrences? Voulez-vous modifier uniquement cette occurrence de l'événement, ou cette occurrence et toutes les occurrences futures ? All Future Events Tous les événements futurs You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vous avez sélectionné un mois bissextile, et sera rappelé selon les règles du calendrier lunaire. OK button OK CScheduleSearchDateItem Y A M M D J CScheduleSearchItem Edit Éditer Delete Supprimer All Day Toute la journée CScheduleSearchView No search results Aucun résultat trouvé CScheduleView ALL DAY TOUTE LA JOURNÉE CSettingDialog Sunday Dimanche Monday Lundi Use System Setting Utiliser les réglages du système 24-hour clock Horloge 24 heures 12-hour clock horloge 12 heures import ICS file importer un fichier ICS Manual Manuel 15 mins 15 min 30 mins 30 min 1 hour 1 heure 24 hours 24 heures Sync Now Synchroniser maintenant Last sync Dernière synchronisation Please go to the <a href='/'>Control Center</a> to change system settings Veuillez aller dans le <a href='/'>Centre de contrôle</a> pour changer les réglages système CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 heure) (%1 hours) (%1 heures) CTitleWidget Y A M M W W D J Search events and festivals Rechercher des événements et des festivals CWeekWindow Week Semaine Y A CYearScheduleView All Day Toute la journée No event Pas d'évènement CYearWindow Y A CalendarWindow Calendar Calendrier Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Le calendrier est un outil pour afficher les dates, et aussi un planificateur quotidien intelligent pour planifier toutes les choses de la vie. Calendarmainwindow Calendar Calendrier Manage Gérer Privacy Policy Politique de confidentialité Syncing... Synchronisation... Sync successful Synchronisation réussie Sync failed, please try later Échec de la synchronisation, veuillez réessayer plus tard CenterWidget All Day Toute la journée DAccountDataBase Work Travail Life Vie Other Autre DAlarmManager Close button Fermer One day before start Un jour avant le début Remind me tomorrow Rappel demain Remind me later Rappeler plus tard 15 mins later 15 minutes plus tard 1 hour later 1 heure plus tard 4 hours later 4 heures plus tard Tomorrow Demain Schedule Reminder Rappel de programme %1 to %2 %1 à %2 Today Aujourd'hui DragInfoGraphicsView Edit Éditer Delete Supprimer New event Nouvel événement New Event Nouvel événement JobTypeListView export exporter import ICS file importer un fichier ICS You are deleting an event type. Vous êtes en train de supprimer un type d'événement. All events under this type will be deleted and cannot be recovered. Tous les événements de ce type seront supprimés et ne pourront pas être récupérés. Cancel button Annuler Delete button Supprimer QObject Manage calendar Gérer le calendrier Event types Type d'événement Account settings Paramètres du compte Account Compte Select items to be synced Sélectionnez les éléments à synchroniser Events Événements General settings Paramètres généraux Sync interval Intervalle de synchronisation Calendar account Compte de calendrier General Général First day of week Premier jour de la semaine Time Temps Return Today Return Aujourd'hui Return Today Today Return Today Aujourd'hui ScheduleTypeEditDlg New event type Nouveau type d'événement Edit event type Éditer le type d'événement Import ICS file Importer un fichier ICS Name: Nom : Color: Couleur : <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Fichier <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> : Cancel button Annuler Save button Sauvegarder The name can not only contain whitespaces Le nom ne peut pas contenir que des espaces blancs Enter a name please Entrez un nom s'il vous plait Shortcut Help Aide Delete event Supprimer l'événement Copy Copier Cut Couper Paste Coller Delete Supprimer Select all Tout sélectionner SidebarCalendarWidget Y A M M TimeJumpDialog Go button Aller UserloginWidget Sign In button S'identifier Sign Out button Se déconnecter YearFrame Y A today Today Today Aujourd'hui linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_gl_ES.ts000066400000000000000000001333271523260663500254440ustar00rootroot00000000000000 AccountItem Sync successful الإسناد ناجح Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full التخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color Cor Cancel button Cancelar Save button Gardar CDayMonthView Monday Luns Tuesday Martes Wednesday Mércores Thursday Xoves Friday Venres Saturday Sábado Sunday Domingo CDayWindow Y Y M M D D Lunar القمر CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more %1 máis CMonthView New event Novo evento New Event Novo evento CMonthWindow Y Y CMyScheduleView My Event O meu evento OK button Aceptar Delete button Eliminar Edit button Editar CPushButton New event type نوع حدث جديد CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time O tempo de finalización ten de ser maior que o de inicio OK button Aceptar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 día antes 2 days before 2 días antes 1 week before 1 semana antes On start day (9:00 AM) Ao comezo do día (9:00 AM) time(s) vez(ces) Enter a name please المرجو إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات بيضاء Type: Tipo: Description: Descrición: All Day: Todo o día: Starts: Comeza: Ends: Remata: Remind Me: Lembrarme: Repeat: Repetir: End Repeat: Fin da repetición: Calendar account: الحساب التقويمي: Calendar account الحساب التقويمي Type Tipo Description Descrición All Day Todo o día Time: الوقت: Time الوقت Solar الشمس Lunar القمر Starts Comeza Ends Remata Remind Me Lembrarme Repeat Repetir Daily Diariamente Weekdays Días da semana Weekly Semanalmente Monthly Mensualmente Yearly Anualmente End Repeat Finalizar a repetición After Despois On O Cancel button Cancelar Save button Gardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrencias dun evento repetitivo teñen de ter o mesmo estado durante todo o día. Do you want to change all occurrences? Queres cambiar todas as ocorrencias? Cancel button Cancelar Change All Cambiar todo You are changing the repeating rule of this event. Estás a cambiar a regra de repetición deste evento. You are deleting an event. Estás eliminando un evento. Are you sure you want to delete this event? Tes a certeza de querer eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Queres eliminar todas as ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Eliminar todo Delete Only This Event Eliminar só este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Queres eliminar esta e todas as vindeiras ocorrencias deste evento, ou só a ocorrencia seleccionada? Delete All Future Events Eliminar todo os eventos futuros You are changing a repeating event. Estás a cambiar un evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? Queres cambiar só esta ocorrencia deste evento, ou todas as ocorrencias? All Todo Only This Event Só este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Queres cambiar só esta ocorrencia deste evento, ou esta e todas as vindeiras ocorrencias? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا متأخرًا، وسو� ت�ذكَّر و�قًا لقواعد التقويم القمري. OK button Aceptar CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Todo o día CScheduleSearchView No search results Sen resultados CScheduleView ALL DAY TODO O D�A CSettingDialog Sunday Domingo Monday Luns Use System Setting استخدم إعداد النظام 24-hour clock الساعة بال二�四 ساعة 12-hour clock الساعة بالاثنى عشر ساعة import ICS file استيراد مل� ICS Manual Manual 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 hora 24 hours 24 ساعة Sync Now إسناد الآن Last sync الإسناد السابق Please go to the Control Center to change system settings المرجو الذهاب إلى مركز التحكم لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقيقة) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعة) CTitleWidget Y Y M M W W D D Search events and festivals Busca eventos e festivales CWeekWindow Week Semana Y Y CYearScheduleView All Day Todo o día No event Sen evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O calendario é unha ferramenta para ver as datas e tamén un planificador diario intelixente para programar todas as cousas da vida. Calendarmainwindow Calendar Calendario Manage Xestionar Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sincronización exitosa Sync failed, please try later Sincronización fallida, inténtao máis tarde CenterWidget All Day Todo o día DAccountDataBase Work Traballo Life Persoal Other Outros DAlarmManager Close button Pechar One day before start Un día antes do comezo Remind me tomorrow Lembrarme mañá Remind me later Lembrarme máis tarde 15 mins later 15 minutos despois 1 hour later 1 hora despois 4 hours later 4 horas despois Tomorrow Mañá Schedule Reminder Programar recordatorio %1 to %2 %1 a %2 Today Hoxe DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar ficheiro ICS You are deleting an event type. Estás a eliminar un tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serán eliminados e non se poden recuperar. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Xestionar calendario Event types Tipos de eventos Account settings Configuración da conta Account Conta Select items to be synced Selecciona elementos para sincronizar Events Eventos General settings Configuración xeral Sync interval Intervalo de sincronización Calendar account Conta de calendario General Xeral First day of week Primer día da semana Time Tempo Return Today Return Hoxe Return Today Today Return Today Hoxe ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar ficheiro ICS Name: Nome: Color: Cor: ICS File: Ficheiro ICS: Cancel button Cancelar Save button Gardar The name can not only contain whitespaces O nome non pode só conter espazos en branco Enter a name please Introduce un nome por favor Shortcut Help Axuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Pegar Delete Eliminar Select all Seleccionar todo SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sesión Sign Out button Pechar sesión YearFrame Y Y today Today Today Hoxe linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_he.ts000066400000000000000000001361731523260663500250510ustar00rootroot00000000000000 AccountItem Sync successful הסינכרון הצליח Network error שגי�ת רשת Server exception استثناء שרת Storage full �חסון מל� AccountManager Local account חשבון מקומי Event types סוגי �ירועי� CColorPickerWidget Color צבע Cancel button בטל Save button שמור CDayMonthView Monday שני Tuesday שלישי Wednesday רביעי Thursday חמישי Friday שישי Saturday שביעי Sunday ר�שון CDayWindow Y י M מ D ד Lunar לונ�רי CGraphicsView New Event �ירוע חדש CMonthScheduleNumItem %1 more %1 נוסף CMonthView New event �ירוע חדש New Event �ירוע חדש CMonthWindow Y י CMyScheduleView My Event �ירועיי OK button בסדר Delete button מחק Edit button עריכה CPushButton New event type סוג �ירוע חדש CScheduleDlg New Event حدث جديد Edit Event تحرير الحدث End time must be greater than start time يجب أن تكون وقت الانتهاء أكبر من وقت البدء OK button موا�ق Never 从� At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة واحدة قبل 1 day before يوم واحد قبل 2 days before يومين قبل 1 week before اسبوع واحد قبل On start day (9:00 AM) �ي يوم البدء (9:00 صباحًا) time(s) وقت(ات) Enter a name please أدخل اسمًا من �ضلك The name can not only contain whitespaces لا يمكن أن يحتوي الاسم �قط على مسا�ات بيضاء Type: نوع: Description: الوص�: All Day: ال整天: Starts: يبدأ �ي: Ends: ينتهي �ي: Remind Me: تذكير لي: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب حساب التقويم: Calendar account حساب حساب التقويم Type نوع Description الوص� All Day ال整天 Time: الوقت: Time זמן Solar שמשי Lunar יומי Starts เริ่มต้น Ends สิ้นสุด Remind Me เตือนฉัน Repeat ซ้ำ Daily รายวัน Weekdays วันทำ�าร Weekly รายสัปดาห์ Monthly รายเดือน Yearly รายปี End Repeat สิ้นสุด�ารซ้ำ After หลังจา� On เมื่อ Cancel button ย�เลิ� Save button บันทึ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ทุ��ารเ�ิดซ้ำของเหตุ�ารณ์ต้องมีสถานะทั้งวันเดียว�ัน Do you want to change all occurrences? คุณต้อง�ารเปลี่ยนทุ��ารเ�ิดซ้ำหรือไม่? Cancel button ย�เลิ� Change All เปลี่ยนทั้งหมด You are changing the repeating rule of this event. คุณ�ำลังเปลี่ยน�ฎ�ารซ้ำของเหตุ�ารณ์นี้ You are deleting an event. คุณ�ำลังลบเหตุ�ารณ์ Are you sure you want to delete this event? คุณ�น่ใจว่าต้อง�ารลบเหตุ�ารณ์นี้หรือไม่? Delete button ลบ Do you want to delete all occurrences of this event, or only the selected occurrence? คุณต้อง�ารลบทุ��ารเ�ิดซ้ำของเหตุ�ารณ์นี้ หรือเพียง�ค่�ารเ�ิดซ้ำที่เลือ�เท่านั้น? Delete All ลบทั้งหมด Delete Only This Event ลบเฉพาะเหตุ�ารณ์นี้ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? คุณต้อง�ารลบเหตุ�ารณ์นี้�ละทุ��ารเ�ิดซ้ำในอนาคต หรือเพียง�ค่�ารเ�ิดซ้ำที่เลือ�เท่านั้น? Delete All Future Events ลบทุ��ารเ�ิดซ้ำในอนาคต You are changing a repeating event. �תה מחליף �ירוע שמתكرר. Do you want to change only this occurrence of the event, or all occurrences? �תה רוצה להחליף רק �ת המופע הזה של ה�ירוע, �ו �ת כל המופעי�? All הכל Only This Event רק המ�ורע הזה Do you want to change only this occurrence of the event, or this and all future occurrences? �תה רוצה להחליף רק �ת המופע הזה של ה�ירוע, �ו �ת זה ו�ת כל המופעי� העתידיי�? All Future Events כל ה�ירועי� העתידיי� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. �תה בחר חודש מתקד�, ולפי כללי הלוחות תקבל תזכורת. OK button בסדר CScheduleSearchDateItem Y כן M מ D י CScheduleSearchItem Edit עריכה Delete מחיקה All Day כל היו� CScheduleSearchView No search results �ין תוצ�ות חיפוש CScheduleView ALL DAY כל היו� CSettingDialog Sunday יו� ר�שון Monday יו� שני Use System Setting השתמש בהגדרות מערכת 24-hour clock שעון 24 שעות 12-hour clock שעון 12 שעות import ICS file הוספת קובץ ICS Manual manuel 15 mins 15 דקות 30 mins 30 דקות 1 hour שעה �חת 24 hours 24 שעות Sync Now הסנכרון עכשיו Last sync הסנכרון ה�חרון Please go to the Control Center to change system settings �נ� היכן ל מרכז התحكم כדי לשנות �ת ההגדרות CTimeEdit (%1 mins) (%1 דקות) (%1 hour) (%1 שעה) (%1 hours) (%1 שעות) CTitleWidget Y י M מ W ש D ד Search events and festivals ابحث عن �ירועי� ופסטיבלי� CWeekWindow Week שבוע Y י CYearScheduleView All Day בכל היו� No event �ין �ירוע CYearWindow Y י CalendarWindow Calendar לוח שנה Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. לוח שנה הו� כלי לגישה לת�ריכי�, וג� מתכנן יומיי� ذكي כדי ל�רגן כל הדברי� בחיי�. Calendarmainwindow Calendar לוח שנה Manage ניהול Privacy Policy מדיניות הפרטיות Syncing... מתבצעת סינכרון... Sync successful סינכרון הושל� Sync failed, please try later סינכרון נכשל, נסה שוב מ�וחר יותר CenterWidget All Day בכל היו� DAccountDataBase Work עבודה Life חיי� Other �חר DAlarmManager Close button סגור One day before start יו� �חד לפני ההתחלה Remind me tomorrow הזכיר לי מחר Remind me later הזכיר לי מ�וחר יותר 15 mins later 15 דקות מ�וחר יותר 1 hour later שעתיי� �חד 4 hours later �רבע שעות מ�וחר Tomorrow היו� הב� Schedule Reminder ה kịch bản תזכורת %1 to %2 '%1 עד %2' Today היו� DragInfoGraphicsView Edit עריכה Delete מחיקה New event �ירוע חדש New Event �ירוע חדש JobTypeListView export יצו� import ICS file יבו� קובץ ICS You are deleting an event type. �ת� מוחקי� סוג �ירוע. All events under this type will be deleted and cannot be recovered. כל ה�ירועי� תחת הסוג הזה ימחקו ול� יוכלו לשוחזר. Cancel button לבטל Delete button מחיקה QObject Manage calendar ניהול לוח שנה Event types סוגי �ירועי� Account settings הגדרות חשבון Account חשבון Select items to be synced בחר פריטי� להכנה Events �ירועי� General settings הגדרות כלליות Sync interval תקופת הסנכרון Calendar account חשבון לוח שנה General כללי First day of week יו� הר�שון בשבוע Time זמן Return Today Return היו� Return Today Today Return Today היו� ScheduleTypeEditDlg New event type סוג �ירוע جديد Edit event type ערוך סוג �ירוע Import ICS file ייב� קובץ ICS Name: ש�: Color: لون: ICS File: קובץ ICS: Cancel button לצ�ת Save button לשמור The name can not only contain whitespaces הש� ל� יכול להכיל רק רווחי� Enter a name please �נ� הזן ש� Shortcut Help עזרה Delete event למחוק �ירוע Copy לעתק Cut לחתוך Paste לדביק Delete למחוק Select all בחירת כל SidebarCalendarWidget Y י M מ TimeJumpDialog Go button להת�מה UserloginWidget Sign In button להירש� Sign Out button להירשmem YearFrame Y י today Today Today היו� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_hi_IN.ts000066400000000000000000001427401523260663500254400ustar00rootroot00000000000000 AccountItem Sync successful सिंक सफल Network error नेटवर�क त�र�टि Server exception सर�वर अपवाद Storage full स�टोरेज भरा ह�आ AccountManager Local account स�थानीय खाता Event types संगति प�रकार CColorPickerWidget Color रंग Cancel button रद�द करें Save button सेव करें CDayMonthView Monday सोमवार Tuesday मंगलवार Wednesday ब�धवार Thursday ग�र�वार Friday श�क�रवार Saturday शनिवार Sunday रविवार CDayWindow Y य M म D ड Lunar चांदी का CGraphicsView New Event नई घटना CMonthScheduleNumItem %1 more %1 अधिक CMonthView New event नई घटना New Event नई घटना CMonthWindow Y य CMyScheduleView My Event मेरी घटना OK button ओके Delete button हटा�ं Edit button संपादित करें CPushButton New event type नई घटना के प�रकार CScheduleDlg New Event नया घटना Edit Event संपादित करें End time must be greater than start time समापन समय श�रूआती समय से अधिक होना चाहि� OK button ओके Never कभी नहीं At time of event घटना के समय 15 minutes before 15 मिनट पहले 30 minutes before 30 मिनट पहले 1 hour before 1 घंटा पहले 1 day before 1 दिन पहले 2 days before 2 दिन पहले 1 week before 1 सप�ताह पहले On start day (9:00 AM) श�रूआती दिन (9:00 �म�म) time(s) समय(�स) Enter a name please कृपया �क नाम दर�ज करें The name can not only contain whitespaces नाम केवल स�पेस नहीं हो सकता है Type: प�रकार: Description: विवरण: All Day: पूरे दिन: Starts: श�रू होता है: Ends: समापन होता है: Remind Me: म��े याद रखें: Repeat: प�न: करें: End Repeat: प�न: करना बंद करें: Calendar account: कैलेंडर खाता: Calendar account कैलेंडर खाता Type प�रकार Description विवरण All Day पूरे दिन Time: समय: Time समय Solar सौर Lunar चा�दी Starts श�रू होता है Ends खतम होता है Remind Me म��े याद दो Repeat प�नरावृत�ति Daily दैनिक Weekdays प�रतिपाद Weekly साप�ताहिक Monthly मासिक Yearly वार�षिक End Repeat प�नरावृत�ति खतम करें After अपने बाद On पर Cancel button रद�द करें Save button सहेजें CScheduleOperation All occurrences of a repeating event must have the same all-day status. �क प�नरावृत�ति घटना के सभी घटना�ं �क ही पूर�ण दिन के स�थिति के रूप में होनी चाहि�। Do you want to change all occurrences? क�या आप सभी घटनाओं को बदलना चाहते हैं? Cancel button रद�द करें Change All सभी बदलें You are changing the repeating rule of this event. आप इस घटना के प�नरावृत�ति नियम को बदल रहे हैं। You are deleting an event. आप �क घटना डिलीट कर रहे हैं। Are you sure you want to delete this event? क�या आप इस घटना को डिलीट करना चाहते हैं? Delete button हटा�ं Do you want to delete all occurrences of this event, or only the selected occurrence? >- क�या आप इस घटना के सभी घटनाओं को हटाना चाहते हैं, या केवल चयनित घटना को हटाना चाहते हैं? Delete All सभी हटा�ं Delete Only This Event केवल इस घटना को हटा�ं Do you want to delete this and all future occurrences of this event, or only the selected occurrence? >- क�या आप इस घटना और इसकी सभी भविष�य घटनाओं को हटाना चाहते हैं, या केवल चयनित घटना को हटाना चाहते हैं? Delete All Future Events सभी भविष�य घटनाओं को हटा�ं You are changing a repeating event. आप �क दोहरा� ग� घटना को बदल रहे हैं। Do you want to change only this occurrence of the event, or all occurrences? क�या आप घटना की इस घटना को केवल बदलना चाहते हैं, या सभी घटनाओं को? All सभी Only This Event केवल इस घटना Do you want to change only this occurrence of the event, or this and all future occurrences? क�या आप घटना की इस घटना को केवल बदलना चाहते हैं, या इस और सभी भविष�य की घटनाओं को? All Future Events सभी भविष�य की घटना�ं You have selected a leap month, and will be reminded according to the rules of the lunar calendar. आप �क कैलेंडर के नियमों के अन�सार �क लीप महीना च�न रहे हैं, और आपको इसके अन�सार याद रखा जा�गा। OK button ठीक CScheduleSearchDateItem Y य M म D द CScheduleSearchItem Edit संपादित करें Delete हटा�ं All Day पूरे दिन CScheduleSearchView No search results कोई खोज परिणाम नहीं मिले CScheduleView ALL DAY पूरे दिन CSettingDialog Sunday रविवार Monday सोमवार Use System Setting सिस�टम सेटिंग का उपयोग करें 24-hour clock 24 घंटे की घड़ी 12-hour clock 12 घंटे की घड़ी import ICS file ICS फ़ाइल आयात करें Manual मैन�अल 15 mins 15 मिनट 30 mins 30 मिनट 1 hour 1 घंटा 24 hours 24 घंटे Sync Now अब सिंक करें Last sync अंतिम सिंक Please go to the Control Center to change system settings कृपया सिस�टम सेटिंग बदलने के लि� नियंत�रण केंद�र जा�ं CTimeEdit (%1 mins) (%1 मिनट) (%1 hour) (%1 घंटा) (%1 hours) (%1 घंटे) CTitleWidget Y य M म W व D द Search events and festivals ईवेंट और त�योहार खोजें CWeekWindow Week सप�ताह Y य CYearScheduleView All Day पूरा दिन No event कोई ईवेंट नहीं CYearWindow Y य CalendarWindow Calendar कैलेंडर Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. कैलेंडर तारीखों के देखने के लि� �क उपकरण है, और जीवन में सभी चीजों के आयोजन के लि� �क स�गम दैनिक योजनक है। Calendarmainwindow Calendar कैलेंडर Manage प�रबंधन Privacy Policy गोपनीयता नीति Syncing... सिंकिंग... Sync successful सिंक सफल Sync failed, please try later सिंक विफल, कृपया बाद में प�नः प�रयास करें CenterWidget All Day पूरा दिन DAccountDataBase Work काम Life जीवन Other अन�य DAlarmManager Close button बंद करें One day before start श�रूआत के �क दिन पहले Remind me tomorrow म��े कल याद रखें Remind me later म��े बाद में याद रखें 15 mins later 15 मिनट बाद 1 hour later 1 घंटा बाद 4 hours later 4 घंटा बाद Tomorrow कल Schedule Reminder अपना याद दिला�ं %1 to %2 '%1 से %2 तक' Today आज DragInfoGraphicsView Edit संपादित करें Delete हटा�ं New event नया घटना New Event नया घटना JobTypeListView export आउटप�ट import ICS file ICS फ़ाइल आयात करें You are deleting an event type. आप �क घटना प�रकार हटा रहे हैं। All events under this type will be deleted and cannot be recovered. इस प�रकार के सभी घटना�ं हटा दी जा�ंगी और वापस नहीं ली जा सकती हैं। Cancel button रद�द करें Delete button हटा�ं QObject Manage calendar कैलेंडर का प�रबंधन करें Event types घटना प�रकार Account settings खाता सेटिंग�स Account खाता Select items to be synced सिंक करने के लि� आइटम च�नें Events घटना�ं General settings सामान�य सेटिंग�स Sync interval सिंक अंतराल Calendar account कैलेंडर खाता General सामान�य First day of week सप�ताह का पहला दिन Time समय Return Today Return आज Return Today Today Return Today आज ScheduleTypeEditDlg New event type नया घटना प�रकार Edit event type घटना प�रकार संपादित करें Import ICS file ICS फ़ाइल आयात करें Name: नाम: Color: रंग: ICS File: ICS फ़ाइल: Cancel button रद�द करें Save button सेव करें The name can not only contain whitespaces नाम केवल स�थान छोड़े ह�� वर�णों को नहीं रख सकता Enter a name please कृपया �क नाम दर�ज करें Shortcut Help सहायता Delete event घटना मिटा�ं Copy कॉपी Cut काट Paste पेस�ट Delete मिटा�ं Select all सभी का चयन करें SidebarCalendarWidget Y य M म TimeJumpDialog Go button जा�ं UserloginWidget Sign In button लॉग इन Sign Out button लॉग आउट YearFrame Y य today Today Today आज linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_hr.ts000066400000000000000000001323321523260663500250570ustar00rootroot00000000000000 AccountItem Sync successful Sinhronizacija je uspješna Network error Mrežna greška Server exception Serverska iznimka Storage full Skladište je puno AccountManager Local account Lokalni ra�un Event types Vrste događaja CColorPickerWidget Color Boja Cancel button Otkaži Save button Spremi CDayMonthView Monday Ponedjeljak Tuesday Utorak Wednesday Srijeda Thursday Četvrtak Friday Petak Saturday Subota Sunday Nedjelja CDayWindow Y Y M M D D Lunar Mjesna CGraphicsView New Event Novi događaj CMonthScheduleNumItem %1 more %1 više CMonthView New event Novi događaj New Event Novi događaj CMonthWindow Y Y CMyScheduleView My Event Moj događaj OK button U redu Delete button Obriši Edit button Uredi CPushButton New event type Nova vrsta događaja CScheduleDlg New Event Novi događaj Edit Event Uredi događaj End time must be greater than start time Vrijeme završetka mora biti veće od vremena po�etka OK button U redu Never Nikada At time of event U vrijeme događaja 15 minutes before 15 minuta prije 30 minutes before 30 minuta prije 1 hour before 1 sat prije 1 day before 1 dan prije 2 days before 2 dana prije 1 week before 1 tjedan prije On start day (9:00 AM) Na dan po�etka (9:00 AM) time(s) vrijeme(s) Enter a name please Molim unesite ime The name can not only contain whitespaces Ime ne može sadržavati samo razmake Type: Vrsta: Description: Opis: All Day: Cijeli dan: Starts: Zapo�inje: Ends: Završava: Remind Me: Podsjeti me: Repeat: Ponovi: End Repeat: Završi ponavljanje: Calendar account: Kalendarski ra�un: Calendar account Kalendarski ra�un Type Vrsta Description Opis All Day Cijeli dan Time: Vrijeme: Time Vrijeme Solar Suncana Lunar Završi ponavljanje Starts Po�inje Ends Završava Remind Me Podsjeti me Repeat Ponovi Daily Dnevno Weekdays Dani vikenda Weekly Tjedno Monthly Mjese�no Yearly Godišnje End Repeat Sve ponavljanja događaja moraju imati isti status za cijeli dan. After Poslije On Uklju�eno Cancel button Otkaži Save button Spremi CScheduleOperation All occurrences of a repeating event must have the same all-day status. Želite li promijeniti sve ponavljanja? Do you want to change all occurrences? Promijenite ponavljajuću pravilo ovog događaja. Cancel button Otkaži Change All Promijeni sve You are changing the repeating rule of this event. Želite li izbrisati sve ponavljanja ovog događaja, ili samo odabrani događaj? You are deleting an event. Brišete događaj. Are you sure you want to delete this event? Jeste li sigurni da želite izbrisati ovaj događaj? Delete button Obriši Do you want to delete all occurrences of this event, or only the selected occurrence? Želite li izbrisati ovaj i sve buduće ponavljanja ovog događaja, ili samo odabrani događaj? Delete All Obrišite sve Delete Only This Event Obrišite samo ovaj događaj Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Promijenite ponavljajući događaj. Delete All Future Events Obriši sve buduće događaje You are changing a repeating event. Želite li promijeniti samo ovaj događaj, ili sve ponavljanja? Do you want to change only this occurrence of the event, or all occurrences? Želite li promijeniti samo ovaj događaj, ili ovaj i sve buduće ponavljanja? All Sve Only This Event Samo ovaj događaj Do you want to change only this occurrence of the event, or this and all future occurrences? Odabrali ste prelazni mjesec, i bit ćete podsjetni prema pravilima mjesnog kalendar. All Future Events Svi budući događaji You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Koristite sustavno postavljeno OK button U redu CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Uredi Delete Obriši All Day Cijeli dan CScheduleSearchView No search results Nema rezultata pretrage CScheduleView ALL DAY CIJELI DAN CSettingDialog Sunday Nedjelja Monday Ponedjeljak Use System Setting 24-satni sat 24-hour clock 12-satni sat 12-hour clock uvoz ICS datoteke import ICS file 15 minuta Manual Ru�no 15 mins 30 minuta 30 mins 30 minuta 1 hour 1 sat 24 hours 24 sata Sync Now Sinh sada Last sync Posljednji sinh Please go to the Control Center to change system settings Molimo vas da odete na Control Center da promijenite sustavne postavke CTimeEdit (%1 mins) (%1 minuta) (%1 hour) (%1 sat) (%1 hours) (%1 sata) CTitleWidget Y Y M M W W D D Search events and festivals Traži događaje i svjetovne praznike CWeekWindow Week Tjedan Y Y CYearScheduleView All Day Cijeli dan No event Nema događaja CYearWindow Y Y CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. >- Kalendarski je alat za pregled datuma, a također je pametan dnevnik za planiranje svih stvari u životu. Calendarmainwindow Calendar Kalendar Manage Upravljanje Privacy Policy Pravila privatnosti Syncing... Sinh... Sync successful Sinh uspješan Sync failed, please try later Sinh neuspješan, molimo pokušajte kasnije CenterWidget All Day Cijeli dan DAccountDataBase Work Posao Life Život Other Ostalo DAlarmManager Close button Zatvori One day before start Jedan dan prije po�etka Remind me tomorrow Podsjeti me sutra Remind me later Podsjeti me kasnije 15 mins later 15 minuta kasnije 1 hour later 1 sat kasnije 4 hours later 4 sata kasnije Tomorrow Sutra Schedule Reminder Podsjetnik rasporeda %1 to %2 %1 do %2 Today Danas DragInfoGraphicsView Edit Uredi Delete Obriši New event Novi događaj New Event Novi događaj JobTypeListView export izvoz import ICS file u�itajte ICS datoteku You are deleting an event type. Brišete vrstu događaja. All events under this type will be deleted and cannot be recovered. Svi događaji pod ovom vrstom bit će obrisani i ne mogu se vratiti. Cancel button Otkaži Delete button Obriši QObject Manage calendar Upravljaj kalendarom Event types Vrste događaja Account settings Postavke ra�una Account Ra�un Select items to be synced Odaberite stavke za sinh Events Događaji General settings Opće postavke Sync interval Interval sinh-a Calendar account Kalendarski ra�un General Općenito First day of week Prvi dan u tjednu Time Vrijeme Return Today Return Danas Return Today Today Return Today Danas ScheduleTypeEditDlg New event type Nova vrsta događaja Edit event type Uredi vrstu događaja Import ICS file Uvoz ICS datoteke Name: Ime: Color: Boja: ICS File: Datoteka ICS: Cancel button Otkaži Save button Spremi The name can not only contain whitespaces Ime ne može sadržavati samo razmake Enter a name please Molim unesite ime Shortcut Help Pomoć Delete event Izbriši događaj Copy Kopiraj Cut Izreži Paste Zalijepi Delete Obriši Select all Odaberi sve SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Idi UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danas linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_hu.ts000066400000000000000000001475231523260663500250720ustar00rootroot00000000000000 AccountItem Sync successful A szinkronizálás sikeres Network error Hálózati hiba Server exception Szerver kivétel Storage full A tárhely megtelt AccountManager Local account Helyi fiók Event types Esemény típusok CColorPickerWidget Color Szín Cancel button Mégsem Save button Mentés CDayMonthView Monday Hétfő Tuesday Kedd Wednesday Szerda Thursday Csütörtök Friday Péntek Saturday Szombat Sunday Vasárnap CDayWindow Y Év M Hónap D Nap Lunar Hold naptár CGraphicsView New Event Új esemény CMonthScheduleNumItem %1 more %1 továbbiak CMonthView New event Új esemény New Event Új esemény CMonthWindow Y Év CMyScheduleView My Event Eseményeim OK button OK Delete button Törlés Edit button Szerkesztés CPushButton New event type Új esemény típusa CScheduleDlg New Event Új esemény Edit Event Esemény szerkesztése End time must be greater than start time A befejezés időpontja csak a kezdés időpontja után lehetséges OK button OK Never Soha At time of event Az esemény időpontjában 15 minutes before 15 perccel előtte 30 minutes before 30 perccel előtte 1 hour before 1 órával előtte 1 day before 1 nappal előtte 2 days before 2 nappal előtte 1 week before 1 héttel előtte On start day (9:00 AM) Esemény kezdete napján (De. 09:00) time(s) Időpont(ok) Enter a name please Kérjük adjon meg egy nevet The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Type: Típus: Description: Leírás: All Day: Egész nap: Starts: Kezdés: Ends: Befejezés: Remind Me: Emlékeztessen: Repeat: Ismétlés: End Repeat: Ismétlés vége: Calendar account: Naptár fiók: Calendar account Naptár fiók Type Típus Description Leírás All Day Egész nap Time: Idő: Time Idő Solar Nap Lunar Hold Starts Kezdés Ends Befejezés Remind Me Emlékeztessen Repeat Ismétlés Daily Naponta Weekdays Hétköznapokon Weekly Hetente Monthly Havonta Yearly Évente End Repeat Ismétlés vége After Utána On Ekkor Cancel button Mégsem Save button Mentés CScheduleOperation All occurrences of a repeating event must have the same all-day status. Az ismétlődő események valamennyiének "egész nap" állapotúnak kell lennie. Do you want to change all occurrences? Minden alkalmat módosítani szeretne? Cancel button Mégsem Change All Összes módosítása You are changing the repeating rule of this event. Módosítja az esemény ismétlődési szabályát. You are deleting an event. Ön töröl egy eseményt. Are you sure you want to delete this event? Biztosan törli ezt az eseményt? Delete button Törlés Do you want to delete all occurrences of this event, or only the selected occurrence? Törlöni szeretné az esemény összes előfordulását, vagy csak a kiválasztott eseményt? Delete All Összes törlése Delete Only This Event Csak ezen esemény törlése Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Törölni szeretné ezt, és az esemény összes jövőbeli előfordulását, vagy csak a kiválasztott eseményt? Delete All Future Events Összes jövőbeli esemény törlése You are changing a repeating event. Ön egy ismétlődő eseményt módosít. Do you want to change only this occurrence of the event, or all occurrences? Csak az esemény ezen előfordulását akarja megváltoztatni, vagy az összes jövőbeni eseményt? All Összes Only This Event Csak ezen esemény Do you want to change only this occurrence of the event, or this and all future occurrences? Csak az esemény ezen előfordulását akarja megváltoztatni, vagy ezt és az összes jövőbeni eseményt? All Future Events Összes jövőbeli esemény You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Szökőhónap lett kiválasztva, ezért a holdnaptár szabályai fognak érvényesülni. OK button OK CScheduleSearchDateItem Y Év M Hónap D Nap CScheduleSearchItem Edit Szerkesztés Delete Törlés All Day Egész nap CScheduleSearchView No search results Nincs keresési eredmény CScheduleView ALL DAY Egész nap CSettingDialog Sunday Vasárnap Monday Hétfő Use System Setting Rendszerbeállítások használata 24-hour clock 24 órás óra formátum 12-hour clock 12 órás óra formátum import ICS file ICS fájl importálása Manual Manuális 15 mins 15 perc 30 mins 30 perc 1 hour 1 óra 24 hours 24 óra Sync Now Szinkronizálás most Last sync Utolsó szinkronizálás Please go to the <a href='/'>Control Center</a> to change system settings Kérjük lépjen a <a href='/'>Vezérlőközpontba</a> a beállítások módosításához CTimeEdit (%1 mins) (%1 perc) (%1 hour) (%1 óra) (%1 hours) (%1 óra) CTitleWidget Y Éves M Havi W Heti D Napi Search events and festivals Események és fesztiválok keresése CWeekWindow Week Heti Y Év CYearScheduleView All Day Egész nap No event Nincs esemény CYearWindow Y Év CalendarWindow Calendar Naptár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. A Naptár egy eszköz a dátumok megtekintésére, valamint egy intelligens napi tervező az élet minden dolgának ütemezéséhez. Calendarmainwindow Calendar Naptár Manage Kezelés Privacy Policy Adatvédelmi irányelvek Syncing... Szinkronizálás... Sync successful A szinkronizálás sikeres Sync failed, please try later A szinkronizálás sikertelen, kérjük próbálja később CenterWidget All Day Egész nap DAccountDataBase Work Munka Life Magánélet Other Egyéb DAlarmManager Close button Bezárás One day before start Egy nappal kezdés előtt Remind me tomorrow Emlékeztessen holnap Remind me later Emlékeztessen később 15 mins later 15 perc múlva 1 hour later 1 óra múlva 4 hours later 4 óra múlva Tomorrow Holnap Schedule Reminder Ütemezési emlékeztető %1 to %2 %1-től %2-ig Today Ma DragInfoGraphicsView Edit Szerkesztés Delete Törlés New event Új esemény New Event Új esemény JobTypeListView export Exportálás import ICS file ICS fájl importálása You are deleting an event type. Ön töröl egy eseménytípust. All events under this type will be deleted and cannot be recovered. Az összes ilyen típusú esemény törlődik, és nem állítható helyre. Cancel button Mégsem Delete button Törlés QObject Manage calendar Naptár kezelése Event types Esemény típusok Account settings Felhasználói fiók beállítások Account Felhasználói fiók Select items to be synced Válassza ki a szinkronizálni kívánt elemeket Events Események General settings �ltalános beállítások Sync interval Szinkronizálási időintervallum Calendar account Naptár fiók General �ltalános First day of week A hét első napja Time Idő Return Today Return Ma Return Today Today Return Today Ma ScheduleTypeEditDlg New event type Új esemény típusa Edit event type Eseménytípus szerkesztése Import ICS file ICS fájl importálása Name: Név: Color: Szín: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Fájl: Cancel button Mégsem Save button Mentés The name can not only contain whitespaces A név nem tartalmazhat csak szóközöket Enter a name please Kérjük adjon meg egy nevet Shortcut Help Segítség Delete event Esemény törlése Copy Másolás Cut Kivágás Paste Beillesztés Delete Törlés Select all Összes kijelölése SidebarCalendarWidget Y Év M Hónap TimeJumpDialog Go button Ugrás UserloginWidget Sign In button Bejelentkezés Sign Out button Kijelentkezés YearFrame Y Év today Today Today Ma linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_hy.ts000066400000000000000000001401011523260663500250570ustar00rootroot00000000000000 AccountItem Sync successful Համապատասակություն հաջողված է Network error Ցան�ի սխալ Server exception �երվերի անհասանելիություն Storage full Պահեստը լ�ված է AccountManager Local account տուրքային հաշիվ Event types Իրադարձությունների տեսակներ CColorPickerWidget Color Գունավորություն Cancel button Չեղարկել Save button Պահպանել CDayMonthView Monday Երեկո Tuesday Երկուշաբթի Wednesday Երեքշաբթի Thursday Չորեքշաբթի Friday Հինգշաբթի Saturday Ուրոշաբթի Sunday Շաբաթ CDayWindow Y �արի M Ամիս D Օր Lunar Լունար CGraphicsView New Event Նոր իրադարձություն CMonthScheduleNumItem %1 more %1 ավելին CMonthView New event Նոր իրադարձություն New Event Նոր իրադարձություն CMonthWindow Y �արի CMyScheduleView My Event Իմ իրադարձությունը OK button ՕԿ Delete button Ջնջել Edit button Խմբագրել CPushButton New event type Նոր իրադարձության տեսակ CScheduleDlg New Event Նոր իրադարձություն Edit Event Խմբագրել իրադարձությունը End time must be greater than start time �կզբի� հետո պետք է լինի վերջա�ման ժաмը OK button Այո Never Բա�առիկ At time of event Իրադարձության ժամանակ 15 minutes before 15 րոպե առաջ 30 minutes before 30 րոպե առաջ 1 hour before 1 ժամ առաջ 1 day before 1 օր առաջ 2 days before 2 օր առաջ 1 week before 1 շաբաթ առաջ On start day (9:00 AM) �կզբին օրը (9:00 առավոտյան) time(s) ժամանակ(ներ) Enter a name please Խնդրում ենք մուտքագրել անունը The name can not only contain whitespaces Անունը չի կարող պարունակել միայն բա�ատրությունները Type: �իպ: Description: Նկարագրություն: All Day: Ընթա�իկ օրը: Starts: �կսում է: Ends: Ավարտում է: Remind Me: Հշտել եմ: Repeat: Կրկնել: End Repeat: Ավարտել կրկնումը: Calendar account: Կալենդարի հաշիվ: Calendar account Կալենդարի հաշիվ Type �իպ Description Նկարագրություն All Day Ընթա�իկ օրը Time: Ժամանակ: Time Ժամանակ Solar Արևային Lunar Լунական Starts �կսվում է Ends Ավարտվում է Remind Me Հիշե�նել Repeat Կրկնել Daily Օրական Weekdays Շաբաթվա օրերը Weekly Շաբաթական Monthly Ամսական Yearly �արեկան End Repeat Ավարտել կրկնումը After Հետո On Ընթա�իկ Cancel button Չեղարկել Save button Պահպան CScheduleOperation All occurrences of a repeating event must have the same all-day status. Կրկնվող իրադարձության բոլոր օրինակները պետք է ունենան նույն ամբողջ օրը �ույ� տալ կապակ�ությունը Do you want to change all occurrences? Կամ �անկանում եք փոխել բոլոր օրինակները? Cancel button Չեղարկել Change All Փոխել բոլորը You are changing the repeating rule of this event. Դուք փոխում եք այս իրադարձության կրկնումը կանոնը. You are deleting an event. Դուք ջանատել եք իրադարձությունը. Are you sure you want to delete this event? Շատ հար�ազրույ� եք կատարում այս իրադարձությունը ջանատելը? Delete button Ջանատել Do you want to delete all occurrences of this event, or only the selected occurrence? Կամ �անկանում եք ջանատել այս իրադարձության բոլոր օրինակները, կամ միայն ընտրվածը? Delete All Ջանատել բոլորը Delete Only This Event Ջանատել միայն այս իրադարձությունը Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Կամ �անկանում եք ջանատել այս իրադարձությունը և բոլոր այնուհետև օրինակները, կամ միայն ընտրվածը? Delete All Future Events Ջանատել բոլոր այնուհետև իրադարձությունները You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button CScheduleSearchDateItem Y M D CScheduleSearchItem Edit Delete All Day CScheduleSearchView No search results CScheduleView ALL DAY CSettingDialog Sunday Monday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the Control Center to change system settings CTimeEdit (%1 mins) (%1 րոպե) (%1 hour) (%1 ժամ) (%1 hours) (%1 ժամ) CTitleWidget Y Ե M Մ W Շ D Օ Search events and festivals Դիմում իրադարձություններ և փառատոններ CWeekWindow Week Շաբաթ Y Ե CYearScheduleView All Day Ամբո�券交易 No event Ոչ իրադարձություն CYearWindow Y Ե CalendarWindow Calendar Կայք Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Կայքը գումարական արտադրող է օրերի համար, ինչպես նաեւ մեծագույն օրա�ույ� գործիք է կենսական բաների պլանավորման համար։ Calendarmainwindow Calendar Կայք Manage Ծառայու ա կարգավորել Privacy Policy Անձնական տվյալների քաղաքականություն Syncing... Շարունակվում է... Sync successful Շարունակումը հաջողվել է Sync failed, please try later Շարունակումը չի հաջողվել, խնդրում ենք փորձեք ավելի ուշ CenterWidget All Day Ամբո�券交易 DAccountDataBase Work Աշխատանք Life Կենսական Other Այլ DAlarmManager Close button Փակել One day before start �կզբի� մեկ օր առաջ Remind me tomorrow Հիշել եմ առաջին օրը Remind me later Հիշել եմ ավելի ուշ 15 mins later 15 րոպե ավելի ուշ 1 hour later մեկ ժամ հետո 4 hours later չորս ժամ հետո Tomorrow Առավոտը Schedule Reminder Ծանու�ում պայմանական հաս�եին %1 to %2 '%1 մինչև %2' Today Այսօր DragInfoGraphicsView Edit Խմբագրել Delete Ջնջել New event Նոր իրադարձություն New Event Նոր Իրադարձություն JobTypeListView export հարթական արտահան import ICS file մուտքագրել ICS անվան անվան անվան You are deleting an event type. Դուք ջնջում եք իրադարձության տիպը. All events under this type will be deleted and cannot be recovered. Այս տիպի բոլոր իրադարձությունները կարող են ջնջվել և չեն կարող վերականգնվել. Cancel button Չեղարկել Delete button Ջնջել QObject Manage calendar Կառավարել օրա�ույ�ը Event types Իրադարձությունների տիպեր Account settings Աշխատանքային անձնական տվյալներ Account Աշխատանքային հաշիվ Select items to be synced Ընտրեք անձնական տվյալների համար սինքրոնա�վող տարրերը Events Իրադարձություններ General settings Ընդհանուր կարգավորումներ Sync interval �ինքրոնա�ման հատվածը Calendar account Օրա�ույ�ի հաշիվ General Ընդհանուր First day of week Շաբաթվա առաջին օրը Time Ժամանակ Return Today Return Այսօր Return Today Today Return Today Այսօր ScheduleTypeEditDlg New event type Նոր իրադարձության տիպ Edit event type Խմբագրել իրադարձության տիպը Import ICS file Ներմուտա�նել ICS ամսագիրը Name: Անվանումը: Color: Գունը: ICS File: ICS աշխատանքը: Cancel button Չեղարկել Save button Պահպանել The name can not only contain whitespaces Անվանումը կարող է պարունակել միայն բա�ատրությունները Enter a name please Խնդրում ենք մուտքագրեք անվանումը Shortcut Help Օգնություն Delete event Ջամակարգել իրադարձությունը Copy Կապակ�ել Cut Կտրել Paste Փոխան�ել Delete Ջամակարգել Select all Ընտրել բոլորը SidebarCalendarWidget Y Ե M Մ TimeJumpDialog Go button Շարունակել UserloginWidget Sign In button Մուտք գործել Sign Out button Ելք գործել YearFrame Y Ե today Today Today Այսօր linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_id.ts000066400000000000000000001323241523260663500250430ustar00rootroot00000000000000 AccountItem Sync successful Sinkronisasi berhasil Network error Jaringan bermasalah Server exception Kesalahan server Storage full Penyimpanan penuh AccountManager Local account Akun lokal Event types Jenis Event CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Senin Tuesday Selasa Wednesday Rabu Thursday Kamis Friday Jum'at Saturday Sabtu Sunday Minggu CDayWindow Y T M B D H Lunar Bulan CGraphicsView New Event Peristiwa Baru CMonthScheduleNumItem %1 more 1% lagi CMonthView New event acara baru New Event Acara baru CMonthWindow Y T CMyScheduleView My Event Acara saya OK button OK Delete button Hapus Edit button Sunting CPushButton New event type Jenis event baru CScheduleDlg New Event Acara baru Edit Event Ubah acara End time must be greater than start time Waktu akhir harus lebih lama dari waktu mulai OK button OK Never Tidak pernah At time of event Pada saat acara 15 minutes before 15 menit sebelumnya 30 minutes before 30 menit sebelumnya 1 hour before 1 jam sebelumnya 1 day before 1 hari sebelumnya 2 days before 2 hari sebelumnya 1 week before 1 minggu sebelumnya On start day (9:00 AM) Pada hari mulai (9:00) time(s) waktu Enter a name please Mohon masukkan nama The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Type: Tipe: Description: Deskripsi: All Day: Sepanjang hari: Starts: Mulai: Ends: Berakhir: Remind Me: Ingatkan Aku: Repeat: Ulangi: End Repeat: Akhir Pengulangan: Calendar account: Akun Kalender: Calendar account Akun Kalender Type Tipe Description Keterangan All Day Semua Hari Time: Waktu: Time Waktu Solar Solar Lunar Bulan Starts Mulai Ends Berakhir Remind Me Ingatkan saya Repeat Ulangi Daily Harian Weekdays Hari kerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Akhiri Perulangan After Setelah On Nyala Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan acara berulang harus memiliki status sepanjang hari yang sama. Do you want to change all occurrences? Apakah Anda ingin mengubah semua kejadian? Cancel button Batal Change All Ubah semua You are changing the repeating rule of this event. Anda mengubah aturan pengulangan acara ini. You are deleting an event. Anda sedang menghapus sebuah peristiwa Are you sure you want to delete this event? Anda yakin akan menghapus peristiwa ini? Delete button Hapus Do you want to delete all occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus semua kejadian dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Hapus Semua Delete Only This Event Hapus hanya peristiwa ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Apakah Anda ingin menghapus ini dan semua kejadian mendatang dari peristiwa ini, atau hanya kejadian yang dipilih? Delete All Future Events Hapus semua peristiwa yang akan datang You are changing a repeating event. Anda mengubah acara berulang. Do you want to change only this occurrence of the event, or all occurrences? Apakah Anda ingin mengubah hanya kejadian ini dari acara, atau semua kejadian? All Semua Only This Event Hanya Acara Ini Do you want to change only this occurrence of the event, or this and all future occurrences? Apakah Anda ingin mengubah hanya kejadian ini dari acara, atau ini dan semua kejadian di masa depan? All Future Events Semua Kejadian di Masa Depan You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Anda telah memilih bulan luar, dan akan diberi pengingat sesuai aturan kalender lunar. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Hapus All Day Semua Hari CScheduleSearchView No search results Tidak ada hasil pencarian CScheduleView ALL DAY SEHARI PENUH CSettingDialog Sunday Minggu Monday Senin Use System Setting Gunakan Pengaturan Sistem 24-hour clock Jam 24 jam 12-hour clock Jam 12 jam import ICS file Impor file ICS Manual Manual 15 mins 15 menit 30 mins 30 menit 1 hour 1 jam 24 hours 24 jam Sync Now Sinkron Sekarang Last sync Sinkron Terakhir Please go to the Control Center to change system settings Silakan pergi ke Pusat Kontrol untuk mengubah pengaturan sistem CTimeEdit (%1 mins) (%1 menit) (%1 hour) (%1 jam) (%1 hours) (%1 jam) CTitleWidget Y T M B W Minggu D H Search events and festivals Cari acara dan festival CWeekWindow Week Minggu Y T CYearScheduleView All Day Semua Hari No event Tidak ada acara CYearWindow Y T CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender adalah alat untuk melihat tanggal, serta pengatur hari harian pintar untuk menjadwalkan segala hal dalam kehidupan. Calendarmainwindow Calendar Kalender Manage Kelola Privacy Policy Kebijakan Privasi Syncing... Menyinkronkan... Sync successful Sinkronisasi berhasil Sync failed, please try later Sinkron gagal, silakan coba lagi CenterWidget All Day Semua Hari DAccountDataBase Work Kerja Life Kehidupan Other Lainnya DAlarmManager Close button Tutup One day before start Satu hari sebelum dimulai Remind me tomorrow ingatkan saya besok Remind me later ingatkan saya nanti 15 mins later 15 menit kemudian 1 hour later 1 jam kemudian 4 hours later 4 jam kemudian Tomorrow Besok Schedule Reminder Jadwalkan Pengingat %1 to %2 '%1 sampai %2' Today Hari ini DragInfoGraphicsView Edit Sunting Delete Hapus New event acara baru New Event Acara baru JobTypeListView export ekspor import ICS file impor file ICS You are deleting an event type. Anda sedang menghapus jenis acara. All events under this type will be deleted and cannot be recovered. Semua acara di bawah jenis ini akan dihapus dan tidak dapat dipulihkan. Cancel button Batal Delete button Hapus QObject Manage calendar Kelola kalender Event types Jenis Event Account settings Pengaturan akun Account Akun Select items to be synced Pilih item yang akan disinkronkan Events Acara General settings Pengaturan umum Sync interval Interval sinkronisasi Calendar account Akun Kalender General Umum First day of week Hari pertama dalam seminggu Time Waktu Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Jenis event baru Edit event type Sunting jenis acara Import ICS file Impor file ICS Name: Nama: Color: 'Warna:' ICS File: 'File ICS:' Cancel button Batal Save button Simpan The name can not only contain whitespaces Nama tidak boleh hanya berisi spasi Enter a name please Mohon masukkan nama Shortcut Help Bantuan Delete event Hapus acara Copy Salin Cut Potong Paste Tempel Delete Hapus Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button Pergi UserloginWidget Sign In button Masuk Sign Out button Keluar YearFrame Y T today Today Today Hari ini linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_it.ts000066400000000000000000001467331523260663500250740ustar00rootroot00000000000000 AccountItem Sync successful Sincronizzazione riuscita Network error Errore rete Server exception Eccezione del server Storage full Memoria piena AccountManager Local account Account locale Event types Tipi di evento CColorPickerWidget Color Colore Cancel button Annulla Save button Salva CDayMonthView Monday Lunedì Tuesday Martedì Wednesday Mercoledì Thursday Giovedì Friday Venerdì Saturday Sabato Sunday Domenica CDayWindow Y Y M M D D Lunar Lunare CGraphicsView New Event Nuovo evento CMonthScheduleNumItem %1 more %1 in più CMonthView New event Nuovo evento New Event Nuovo evento CMonthWindow Y Y CMyScheduleView My Event I miei eventi OK button OK Delete button Elimina Edit button Modifica CPushButton New event type Nuovo tipo di evento CScheduleDlg New Event Nuovo evento Edit Event Modifica evento End time must be greater than start time La data di fine deve essere maggiore di quella di inizio OK button OK Never Mai At time of event All'ora dell'evento 15 minutes before 15 minuti prima 30 minutes before 30 minuti prima 1 hour before 1 ora prima 1 day before 1 giorno prima 2 days before 2 giorni prima 1 week before 1 settimana prima On start day (9:00 AM) All'inizio della giornata (9:00 AM) time(s) volta(e) Enter a name please Inserisci un nome The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Type: Tipo: Description: Descrizione: All Day: Tutto il giorno: Starts: Inizio: Ends: Fine: Remind Me: Promemoria: Repeat: Ripetizione: End Repeat: Fine ripetizione: Calendar account: Account calendario: Calendar account Account calendario Type Tipo Description Descrizione All Day Tutto il giorno Time: Ora: Time Ora Solar Solare Lunar Lunare Starts Inizio Ends Fine Remind Me Promemoria Repeat Ripetizione Daily Giornaliera Weekdays Giorni della settimana Weekly Settimanale Monthly Mensile Yearly Annuale End Repeat Fine ripetizione After Dopo On Acceso Cancel button Annulla Save button Salva CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tutte le occorrenze di una ripetizione devono avere i medesimi parametri. Do you want to change all occurrences? Desideri modificare tutte le occorrenze? Cancel button Annulla Change All Cambia tutte You are changing the repeating rule of this event. Stai cambiando le regole di pianificazione di questo evento. You are deleting an event. Stai eliminando un evento. Are you sure you want to delete this event? Sicuro di voler eliminare questo evento? Delete button Elimina Do you want to delete all occurrences of this event, or only the selected occurrence? Desideri eliminare tutte le occorrenze di questo evento, oppure solo quella selezionata? Delete All Eliminale tutte Delete Only This Event Elimina solo questo evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Desideri eliminare questa e tutte le occorrenze successive di questo evento, oppure solo quella selezionata? Delete All Future Events Tutte le occorrenze future You are changing a repeating event. Stai modificando un evento ripetitivo Do you want to change only this occurrence of the event, or all occurrences? Desideri modificare solo questa occorrenza dell'evento, o tutte quelle ad esso associate? All Tutti Only This Event Solo questo evento Do you want to change only this occurrence of the event, or this and all future occurrences? Desideri modificare solo il singolo evento,oppure tutte le future ripetizioni? All Future Events Tutte le future ripetizioni You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Hai selezionato un mese bisestile e ti verrà ricordato secondo le regole del calendario lunare. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Modifica Delete Elimina All Day Tutto il giorno CScheduleSearchView No search results Nessun risultato disponibile CScheduleView ALL DAY Tutto il giorno CSettingDialog Sunday Domenica Monday Lunedì Use System Setting 24-hour clock Orologio 24 ore 12-hour clock Orologio 12 ore import ICS file Importa file ICS Manual Manuale 15 mins 15 minuti 30 mins 30 minuti 1 hour 1 ora 24 hours 24 ore Sync Now Sincronizza ora Last sync Ultima sincronizzazione Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 min) (%1 hour) (%1 ora) (%1 hours) (%1 ore) CTitleWidget Y A M M W S D G Search events and festivals Cerca eventi CWeekWindow Week Settimana Y Y CYearScheduleView All Day Tutto il giorno No event Nessun evento CYearWindow Y Y CalendarWindow Calendar Calendario Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendario è uno strumento per visualizzare il calendario ma anche per pianificare in modo intelligente tutti gli eventi della propria vita quotidiana. Localizzazione italiana a cura di Massimo A. Carofano. Calendarmainwindow Calendar Calendario Manage Gestisci Privacy Policy Privacy Policy Syncing... Sincronizzazione... Sync successful Sincronizzazione riuscita Sync failed, please try later Sincronizzazione fallita, riprova più tardi CenterWidget All Day Tutto il giorno DAccountDataBase Work Lavoro Life Personale Other Altro DAlarmManager Close button Chiudi One day before start Un giorno prima di iniziare Remind me tomorrow Ricordamelo domani Remind me later Ricordamelo piu tardi 15 mins later Dopo 15 minuti 1 hour later Dopo 1 ora 4 hours later Dopo 4 ore Tomorrow Domani Schedule Reminder Pianifica promemoria %1 to %2 %1 a %2 Today Oggi DragInfoGraphicsView Edit Modifica Delete Elimina New event Nuovo evento New Event Nuovo evento JobTypeListView export esporta import ICS file Importa file ICS You are deleting an event type. Stai eliminando un tipo di evento. All events under this type will be deleted and cannot be recovered. Tutti gli eventi di questo tipo verranno eliminati e non potranno essere recuperati. Cancel button Annulla Delete button Elimina QObject Manage calendar Gestisci calendario Event types Tipi di evento Account settings Impostazioni account Account Account Select items to be synced Seleziona elementi da sincronizzare Events Eventi General settings Impostazioni generali Sync interval Intervallo di sincronizzazione Calendar account Account calendario General Generale First day of week Primo giorno della settimana Time Ora Return Today Return Oggi Return Today Today Return Today Oggi ScheduleTypeEditDlg New event type Nuovo tipo di evento Edit event type Modifica tipo di evento Import ICS file Importa file ICS Name: Nome: Color: Colore: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: File <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> : Cancel button Annulla Save button Salva The name can not only contain whitespaces Il nome non può contenere solo spazi bianchi Enter a name please Inserisci un nome Shortcut Help Aiuto Delete event Elimina evento Copy Copia Cut Taglia Paste Incolla Delete Elimina Select all Seleziona tutto SidebarCalendarWidget Y A M M TimeJumpDialog Go button Vai UserloginWidget Sign In button Login Sign Out button Logout YearFrame Y Y today Today Today Oggi linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ja.ts000066400000000000000000001461101523260663500250370ustar00rootroot00000000000000 AccountItem Sync successful Network error Server exception Storage full AccountManager Local account Event types CColorPickerWidget Color 色 Cancel button キャンセル Save button �存 CDayMonthView Monday 月曜日 Tuesday �曜日 Wednesday 水曜日 Thursday 木曜日 Friday 金曜日 Saturday 土曜日 Sunday 日曜日 CDayWindow Y 年 M 月 D 日 Lunar CGraphicsView New Event 新�イベント CMonthScheduleNumItem %1 more CMonthView New event 新�イベント New Event 新�イベント CMonthWindow Y 年 CMyScheduleView My Event イベント OK button OK Delete button 削除 Edit button 編集 CPushButton New event type CScheduleDlg New Event 新�イベント Edit Event イベントを編集 End time must be greater than start time 開始時間より��時間を設定��下�� OK button OK Never ��� At time of event イベント時 15 minutes before 15分� 30 minutes before 30分� 1 hour before 1時間� 1 day before 一日� 2 days before 2日� 1 week before 1週間� On start day (9:00 AM) 開始日 (9:00) � time(s) 回後 Enter a name please The name can not only contain whitespaces Type: 種類: Description: 説明: All Day: 終日: Starts: 開始: Ends: 終了: Remind Me: 通知: Repeat: 繰り返�: End Repeat: 繰り返�終了: Calendar account: Calendar account Type 種類 Description 説明 All Day 終日 Time: Time タイム Solar Lunar Starts 開始 Ends 終了 Remind Me 通知 Repeat 繰り返� Daily 毎日 Weekdays 平日 Weekly 毎週 Monthly 毎月 Yearly 毎年 End Repeat 繰り返�終了 After On オン Cancel button キャンセル Save button �存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button キャンセル Change All ���変更 You are changing the repeating rule of this event. ��イベント�繰り返�ルールを変更�����。 You are deleting an event. イベントを削除�����。 Are you sure you want to delete this event? イベントを削除��もよ������? Delete button 削除 Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All 全�削除 Delete Only This Event ��イベント��削除 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events 今後�イベントを���削除 You are changing a repeating event. 繰り返�イベントを変更�����。 Do you want to change only this occurrence of the event, or all occurrences? All ��� Only This Event ��イベント�� Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events 今後�����イベント You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button OK CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 編集 Delete 削除 All Day 終日 CScheduleSearchView No search results 検索�果�� CScheduleView ALL DAY 終日 CSettingDialog Sunday 日曜日 Monday 月曜日 Use System Setting 24-hour clock 12-hour clock import ICS file Manual 手動 15 mins 30 mins 1 hour 1時間 24 hours Sync Now Last sync Please go to the <a href='/'>Control Center</a> to change system settings CTimeEdit (%1 mins) (%1 hour) (%1 hours) CTitleWidget Y 年 M 月 W 週 D 日 Search events and festivals CWeekWindow Week 週 Y 年 CYearScheduleView All Day 終日 No event イベント�� CYearWindow Y 年 CalendarWindow Calendar カレンダー Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. カレンダー��日付を表示�るツール��り���生活��らゆる��をスケジューリング�るスマートデイリープランナー��。 Calendarmainwindow Calendar カレンダー Manage Privacy Policy プライ�シー�リシー Syncing... �期�����… Sync successful Sync failed, please try later CenterWidget All Day 終日 DAccountDataBase Work 仕事 Life 生活 Other ��他 DAlarmManager Close button 閉�る One day before start Remind me tomorrow 明日通知 Remind me later 後�通知 15 mins later 1 hour later 4 hours later Tomorrow 明日 Schedule Reminder スケジュール通知 %1 to %2 Today 今日 DragInfoGraphicsView Edit 編集 Delete 削除 New event 新�イベント New Event 新�イベント JobTypeListView export import ICS file You are deleting an event type. All events under this type will be deleted and cannot be recovered. Cancel button キャンセル Delete button 削除 QObject Manage calendar Event types Account settings Account アカウント Select items to be synced Events General settings Sync interval Calendar account General 一般 First day of week Time タイム Return Today Return 今日 Return Today Today Return Today 今日 ScheduleTypeEditDlg New event type Edit event type Import ICS file Name: Color: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Cancel button キャンセル Save button �存 The name can not only contain whitespaces Enter a name please Shortcut Help ヘルプ Delete event イベントを削除 Copy コピー Cut 切り�り Paste 貼り付� Delete 削除 Select all ����択 SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go button Go UserloginWidget Sign In button サインイン Sign Out button サインアウト YearFrame Y 年 today Today Today 今日 linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ka.ts000066400000000000000000001446461523260663500250540ustar00rootroot00000000000000 AccountItem Sync successful სინქრ�ნİZ�ცი� წ�რმ�ტებული� Network error ქსელის შეცდ�მ� Server exception სერვერის გ�რეშე გ�მ�ნ�კლისი Storage full სინდის სივრცე ს�კმ�რისი� AccountManager Local account ლ�კ�ლური �ნგ�რიში Event types ივენტის ტიპები CColorPickerWidget Color ს�ფერი Cancel button გ�უქმებ� Save button შენ�ხვ� CDayMonthView Monday �რშ�ბ�თი Tuesday ს�მშ�ბ�თი Wednesday �თხშ�ბ�თი Thursday ხუთშ�ბ�თი Friday პ�რ�სკევი Saturday შ�ბ�თი Sunday კვირ� CDayWindow Y წ M თ D დ Lunar ლური�ნი CGraphicsView New Event �ხ�ლი ივენთი CMonthScheduleNumItem %1 more %1 მეტი CMonthView New event �ხ�ლი ივენთი New Event �ხ�ლი ივენთი CMonthWindow Y წ CMyScheduleView My Event ჩემი ივენთები OK button OK Delete button წ�შლ� Edit button რედ�ქტირებ� CPushButton New event type �ხ�ლი ივენტის ტიპი CScheduleDlg New Event ჩემი ივენთები Edit Event ივენთის რედ�ქტირებ� End time must be greater than start time დ�სრულების დრ� უნდ� �ღემ�ტებ�დეს დ�წყების დრ�ს OK button OK Never �რ�სდრ�ს At time of event ივენთის სრული დრ� 15 minutes before 15 წუთით �დრე 30 minutes before 30 წუთით �დრე 1 hour before 1 ს��თით �დრე 1 day before 1 დღით �დრე 2 days before 2 დღით �დრე 1 week before 1 კვირით �დრე On start day (9:00 AM) დრის დ�ს�წყისში (9:00 AM) time(s) ჯერ Enter a name please გთხ�ვთ შეიყვ�ნ�თ ს�ხელი The name can not only contain whitespaces ს�ხელი �რ შეიძლებ� შეიც�ვდეს მხ�ლ�დ სპეისებს Type: ტიპი: Description: �ღწერ�: All Day: მთელი დღე: Starts: დ�ს�წყისი: Ends: დ�ს�სრული: Remind Me: შემ�ხსენე: Repeat: გ�მე�რებ�: End Repeat: გ�მე�რების დ�ს�სრული: Calendar account: კ�ლენდ�რის �ნგ�რიში: Calendar account კ�ლენდ�რის �კ�უნტი Type ტიპი Description �ღწერ� All Day ყველ� დღე Time: დრ�: Time დრ� Solar ს�ლ�რი�ნი Lunar ლური�ნი Starts დ�ს�წყისი Ends დ�ს�სრული Remind Me შემ�ხსენე Repeat გ�ნმე�რებ� Daily დღიური Weekdays ვიქენდი Weekly კვირეული Monthly თვიური Yearly წლიური End Repeat გ�ნმე�რების დ�ს�სრული After შემდეგ On ზე Cancel button გ�უქმებ� Save button შენ�ხვ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ყველ� გ�ნმე�რებ�დ მ�ვლენებს უნდ� ჰქ�ნდეს ყველ� დღის სტ�ტუს Do you want to change all occurrences? გსურთი მ�ვლენების შეცვლ�? Cancel button გ�უქმებ� Change All ყველ�ს შეცვლ� You are changing the repeating rule of this event. თქვენ ცვლით გ�ნმე�რების რულებს �ღნიშნული ივენთისთვის You are deleting an event. თქვენ შლით ივენთს Are you sure you want to delete this event? დ�წრმუნებული ხ�რთ, რ�მ გსურთ �მ ივენთის წ�შლ�? Delete button წ�შლ� Do you want to delete all occurrences of this event, or only the selected occurrence? გსრუთ �ღნიშნული მ�ვლენების ივენთიდ�ნ �მ�შლ�? Delete All ყველ�ს წ�შლ� Delete Only This Event მხ�ლ�დ �მ ივენთის წ�შლ� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? გსურთ წ�შ�ლ�თ ყველ� შემდგ�მი მ�ვლენ�, თუ მხ�ლ�დ �რჩეული მ�ვლენები? Delete All Future Events ყველ� მ�მდევნ� მ�ვლენის წ�შლ� You are changing a repeating event. თქვენ ცვლით გ�ნმე�რებ�დ ივენთს Do you want to change only this occurrence of the event, or all occurrences? გსრუთ ყველ� მ�ვლენის შეცვლ�, თუ მხ�ლ�დ მ�ნიშნულის? All ყველ� Only This Event მხ�ლ�დ ეს ივენთი Do you want to change only this occurrence of the event, or this and all future occurrences? მხ�ლ�დ �მ ერთი მ�ვლენის შეცვლ�, თუ ყველ� მ�მდევნ� მ�ვლენის შეცვლ�? All Future Events ყველ� მ�მდევნ� ივენთი You have selected a leap month, and will be reminded according to the rules of the lunar calendar. თქვენ �რჩიეთ დ�მ�ტებითი თვე, დ� თქვენ გ�მ�იყ� ლური�ნი კ�ლენდ�რის წე則ების მიხედვით. OK button OK CScheduleSearchDateItem Y წ M თ D დ CScheduleSearchItem Edit რედ�ქტირებ� Delete წ�შლ� All Day ყველ� დღე CScheduleSearchView No search results �რ �რის ძებნის რეზულტ�ტი CScheduleView ALL DAY ყველ� დღე CSettingDialog Sunday კვირ� Monday �რშ�ბ�თი Use System Setting სისტემის პ�რ�მეტრების გ�მ�ყენებ� 24-hour clock 24 ს��თის ს��თი 12-hour clock 12 ს��თის ს��თი import ICS file ICS ფ�ილის იმპ�რტი Manual მექნიკურ�დ 15 mins 15 წუთი 30 mins 30 წუთი 1 hour 1 ს��თი 24 hours 24 ს��თი Sync Now სინქრ�ნიზ�ცი� �ხლ� Last sync ბ�დის სინქრ�ნიზ�ცი� Please go to the Control Center to change system settings გთხ�ვთ გ�დ��დგილ�თ კ�ნტრ�ლის ცენტრში სისტემის პ�რ�მეტრების შეცვლ� დ� შეცვ�ლ�თ CTimeEdit (%1 mins) (%1 წუთი) (%1 hour) უკ�ნ მ�დის (%1 ს��თი) (%1 hours) უკ�ნ მ�დის (%1 ს��თი) CTitleWidget Y წ M თ W კ D დ Search events and festivals იერ�დ მ�ძებნეთ ღ�ნისძიერებები დ� ფе�тივ�ლები CWeekWindow Week კვირ� Y წ CYearScheduleView All Day ყველ� დღე No event �რ �რის ივენთი CYearWindow Y წ CalendarWindow Calendar კ�ლენდ�რი Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. კ�ლენდ�რი �რის ხელს�წყ� თ�რიღების ს�ნ�ხ�ვ�დ დ� გრ�ფიკის დ�ს�გეგმ�დ Calendarmainwindow Calendar კ�ლენდ�რი Manage მ�რთვ� Privacy Policy პირ�დი მ�ნ�ცემების პ�ლიტიკ� Syncing... სინქრ�ნიზ�ცი�... Sync successful სინქრ�ნიზ�ცი� წ�რმ�ტებული� Sync failed, please try later სინქრ�ნიზ�ცი� ვერ მ�ხდ�, გთხ�ვთ სც�დ�თ მ�მდევნ� დრ�ს CenterWidget All Day ყველ� დღე DAccountDataBase Work ს�მს�ხური Life ცხ�ვრებ� Other სხვ� DAlarmManager Close button დ�ხურვ� One day before start დ�წყებ�მდე 1 დღით �დრე Remind me tomorrow შემ�ხსენე ხვ�ლ Remind me later შემ�ხსენე მ�გვი�ნებით 15 mins later 15 წუთში უკ�ნ 1 hour later 1 ს��თში უკ�ნ 4 hours later 4 ს��თში უკ�ნ Tomorrow ხვ�ლ Schedule Reminder შეხსენების დ�გეგმვ� %1 to %2 %1 დ�ნ %2 Today დღეს DragInfoGraphicsView Edit რედ�ქტირებ� Delete წ�შლ� New event �ხ�ლი ივენთი New Event �ხ�ლი ივენთი JobTypeListView export ექსპ�რტი import ICS file იმპ�რტი ICS ფ�ილში You are deleting an event type. თქვენ წ�რმ��დგენთ ღ�ნისძიერების ტიპს. All events under this type will be deleted and cannot be recovered. ყველ� ღ�ნისძიერებ� �მ ტიპის ქვეშ წ�რმ��დგენთ დ� �რ შეიძლებ� დ�ბრუნდეს. Cancel button გ�უქმებ� Delete button წ�შლ� QObject Manage calendar კ�ლენდ�რის მ�რთვ� Event types ღ�ნისძიერების ტიპები Account settings �ნგ�რის პ�რ�მეტრები Account �ნგ�რი Select items to be synced �ირჩიეთ სინქრ�ნიზ�ციის მიზნის ნივთები Events ღ�ნისძიერებები General settings ს�ერთ� პ�რ�მეტრები Sync interval სინქრ�ნიზ�ციის ინტერვ�ლი Calendar account კ�ლენდ�რის �ნგ�რი General ძირით�დი First day of week კ�ლენდ�რის პირველი დღე Time დრ� Return Today Return დღეს Return Today Today Return Today დღეს ScheduleTypeEditDlg New event type �ხ�ლი ღ�ნისძიერების ტიპი Edit event type რედ�ქტირებ� ღ�ნისძიერების ტიპის მიხედვით Import ICS file იმპ�რტი ICS ფ�ილში Name: 'ს�ხელი:' Color: ფერი: ICS File: ICS ფ�ილი: Cancel button გ�უქმებ� Save button შენ�ხვ� The name can not only contain whitespaces ს�ხელი �რ უნდ� შედგებ�დეს მხ�ლ�დ სpacებისგ�ნ Enter a name please გთხ�ვთ შეიტ�ნите ს�ხელი Shortcut Help დ�ხმ�რებ� Delete event ივენთის წ�შლ� Copy კ�პირებ� Cut �მ�ჭრ� Paste ჩ�სმ� Delete წ�შლ� Select all ყველ�ს მ�ნიშნვ� SidebarCalendarWidget Y წ M თ TimeJumpDialog Go button გ�დ�სვლ� UserloginWidget Sign In button შესვლ� Sign Out button გ�სვლ� YearFrame Y წ today Today Today დღეს linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_kab.ts000066400000000000000000001354741523260663500252150ustar00rootroot00000000000000 AccountItem Sync successful التناسق ناجح Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full الخزين ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button Sefsex Save button Sekles CDayMonthView Monday Arim Tuesday Aram Wednesday Ahad Thursday Amhad Friday Sem Saturday Sed Sunday Acer CDayWindow Y Aseggas M Ayyur D Ass Lunar القمر CGraphicsView New Event Tadyant tamaynut CMonthScheduleNumItem %1 more Ugar n 1% CMonthView New event Tadyant tamaynut New Event Tadyant tamaynut CMonthWindow Y Aseggas CMyScheduleView My Event Tadyant-iw OK button IH Delete button Kkes Edit button Ẓreg CPushButton New event type نوع حدث جديد CScheduleDlg New Event Tadyant tamaynut Edit Event Ẓreg tadyant End time must be greater than start time Akud n taggara yezmer d netta ara igerrzen ɣef wakud n tazwara OK button IH Never Werǧin At time of event Deg wakud n tedyant 15 minutes before 15 tesdatin send 30 minutes before 30 tesdatin send 1 hour before 1 usrag send 1 day before 1 wass send 2 days before 2 wussan send 1 week before 1 dduṛt send On start day (9:00 AM) Deg tazwara n wass (9:00 SRG) time(s) Akud (akuden) Enter a name please أدخل اسمًا من �ضلك The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات �ارغة Type: Anaw: Description: Aglam: All Day: Yal ass: Starts: Yebda Ends: Yekfa Remind Me: Smekti-yi-d: Repeat: Ales End Repeat: Taggara n wallus: Calendar account: الحساب التقويمي: Calendar account الحساب التقويمي Type Anaw Description Aglam All Day Meṛṛa ass Time: الوقت: Time الوقت Solar الشمس Lunar القمر Starts Yebda Ends Yekfa Remind Me Smekti-yi-d Repeat Ales Daily S wass Weekdays Ussan n yimalas Weekly S yimalas Monthly S wayyur Yearly S useggas End Repeat Taggara n wallus After Seld On Ɣef Cancel button Sefsex Save button Sekles CScheduleOperation All occurrences of a repeating event must have the same all-day status. Meṛṛa time�riwin n tedyant i d-yettuɣalen ilaq ad sɛunt yiwen waddad i wass kamel. Do you want to change all occurrences? Tebɣi� ad tesnefle� meṛṛa time�riwin? Cancel button Sefsex Change All Senfel kullec You are changing the repeating rule of this event. Tbeddle� alugen i d-yettuɣalen n tedyant-a. You are deleting an event. Tekkse� yiwet tedyant. Are you sure you want to delete this event? D tidet tebɣi� ad tekkse� tadyant-a? Delete button Kkes Do you want to delete all occurrences of this event, or only the selected occurrence? Tebɣi� ad tekkse� meṛṛa time�riwin n tedyant-a neɣ tid kan i d-yettwafernen? Delete All Kkes kullec Delete Only This Event Kkes kan tadyant-a Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Tebɣi� ad tekkse� time�riwt-a d tid meṛṛa i d-iteddun, neɣ d tid kan i d-yettufernen? Delete All Future Events Kkes meṛṛa tidyanin i d-iteddun You are changing a repeating event. Tbeddle� tadyant i d-yettuɣalen. Do you want to change only this occurrence of the event, or all occurrences? Tebɣi� ad tbeddle� time�riwt-agi kan n tedyant, neɣ meṛṛa time�riwen? All Meṛṛa Only This Event Tadyant-agi kan Do you want to change only this occurrence of the event, or this and all future occurrences? Tebɣi� ad tbeddle� time�riwt-a n tedyant, neɣ tagi d meṛṛa time�riwen i d-iteddun? All Future Events Tidyanin akk i d-iteddun You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائجًا، وست�ذكَّر و�قًا لقواعد التقويم القمري. OK button IH CScheduleSearchDateItem Y Aseggas M Ayyur D Ass CScheduleSearchItem Edit Ẓreg Delete Kkes All Day Meṛṛa ass CScheduleSearchView No search results Ulac igma� n unadi CScheduleView ALL DAY YAL ASS CSettingDialog Sunday Acer Monday Arim Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Use System Setting استخدم إعداد النظام 24-hour clock الساعة على 24 ساعة 12-hour clock الساعة على 12 ساعة import ICS file استيراد مل� ICS Manual S ufus 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour 1 ساعة 24 hours 24 ساعة Sync Now تَنْز�يلٌ الآن Last sync التَنْز�يل� الأَخَر Please go to the Control Center to change system settings الْخَ�َّا�� إلَى الْمَرْكَز� الْم�نْتَج� ل�تَشْغ�يل� إعدادات� الأنظمة CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y Aseggas M Ayyur W Imalas D Ass Search events and festivals بَحْث� الأَعْبَار� وَ الْ�َعَالَات� CWeekWidget Sun أَحْمَر Mon أَصْغَر Tue ث�وَيْر Wed ث�رَيْد Thu ث�وَر Fri �َر Sat سَات CWeekWindow Week Dduṛt Y Aseggas CYearScheduleView All Day Meṛṛa ass No event Ulac tadyant CYearWindow Y Aseggas CalendarWindow Calendar Awitay Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Awitay d afecku i uskan n wazemz akked daɣen d aɣawas n yal ass i usɣiwes n wayen akk ara tge� deg tudert. Calendarmainwindow Calendar Awitay Manage تَدْبير Privacy Policy Tasertit n tba�nit Syncing... Amtawi... Sync successful تَنْز�يلٌ ناجح Sync failed, please try later تَنْز�يلٌ �َش�لَ، يَرجى محاولةٌ لاحقاً CenterWidget All Day Yal ass DAccountDataBase Work Amahil Life Tudert Other Waye� DAlarmManager Close button Mdel One day before start Yiwen wass send beddu Remind me tomorrow Smekti-yi-d azekka Remind me later Smekti-yi-d ticki 15 mins later 15 دقائق لاحقاً 1 hour later 1 ساعة لاحقاً 4 hours later 4 ساعات لاحقاً Tomorrow Azekka Schedule Reminder Asmekti s usɣiwes %1 to %2 %1 ɣer %2 Today Ass-a DragInfoGraphicsView Edit Ẓreg Delete Kkes New event Tadyant tamaynut New Event Tadyant tamaynut JobTypeListView export تصدير import ICS file استيراد مل� ICS You are deleting an event type. أنت ت�حْذ��� نوعَ �عالية. All events under this type will be deleted and cannot be recovered. كل�ّ الأحداث� الم�تَّس�ل�ّطة� على هذا النوع سَت�حْذَ�� وَ لا ت�عَوَّد�. Cancel button Sefsex Delete button Kkes QObject Manage calendar تَدْبير� التَاريْخ� Event types نوعَات� الأحداث� Account settings إعدادات� الحساب Account حساب Select items to be synced اختر الأشياء التي ت�نْزَل� Events الأحداث General settings الإعدادات العامة Sync interval �ترة التزام Calendar account حساب التقويم General Amatu First day of week اليوم الأول من الأسبوع Time الوقت Return Today Return Ass-a Return Today Today Return Today Ass-a ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع الحدث Import ICS file استيراد مل� ICS Name: Isem: Color: اللون: ICS File: مل� ICS: Cancel button Sefsex Save button Sekles The name can not only contain whitespaces لا يمكن أن يحتوي الاسم �قط على المسا�ات البيضاء Enter a name please يرجى إدخال اسم Shortcut Help Tallalt Delete event Kkes tadyant Copy Nɣel Cut Gzem Paste Sente� Delete Kkes Select all Fren kullec SidebarCalendarWidget Y Aseggas M Ayyur TimeJumpDialog Go button اذهب UserloginWidget Sign In button Kcem Sign Out button Ffeɣ YearFrame Y Aseggas today Today Today Ass-a linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_km_KH.ts000066400000000000000000001462071523260663500254450ustar00rootroot00000000000000 AccountItem Sync successful ការសynchronize បានជោគជំ assured Network error បញ្ហាអ៊ីនធឺណិ� Server exception កំហុសម៉ាស៊ីនមួយ Storage full អាកាសរក្សាទុកព�ញ AccountManager Local account គណនីក្នុងប្រទ�ស Event types ប្រភ�ទព្រឹ�្�ិការណ� CColorPickerWidget Color ពណ៌ Cancel button បោះបង់ Save button រក្សាទុក CDayMonthView Monday �្ងៃចន្ទ Tuesday �្ងៃអង្គារ Wednesday �្ងៃពុធ Thursday �្ងៃព្រហស្ប�ិ� Friday �្ងៃសុក្រ Saturday �្ងៃសៅរ� Sunday �្ងៃអាទិ�្យ CDayWindow Y ឆ្នាំ M �ែ D �្ងៃ Lunar �ែដែលមានប្រវ�្�ិសាស្�្រ CGraphicsView New Event ព្រឹ�្�ិការណ��្មី CMonthScheduleNumItem %1 more '%1 ផ្ស�ងទៀ�' CMonthView New event ព្រឹ�្�ិការណ��្មី New Event ព្រឹ�្�ិការណ��្មី CMonthWindow Y ឆ្នាំ CMyScheduleView My Event ព្រឹ�្�ិការណ�របស់�្ញុំ OK button យល់ព្រម Delete button លុប Edit button កែសម្រួល CPushButton New event type ប្រភ�ទព្រឹ�្�ិការណ��្មី CScheduleDlg New Event ព្រឹ�្�ិការណ��្មី Edit Event កែព្រឹ�្�ិការណ� End time must be greater than start time ព�លបញ្ចប់�្រូវ�ែធ្ងន់ជាងព�លចាប់ផ្�ើម OK button យល់ព្រម Never មិនដែល At time of event នៅព�លព្រឹ�្�ិការណ� 15 minutes before 15 នាទីមុន 30 minutes before 30 នាទីមុន 1 hour before 1 ម៉ោងមុន 1 day before 1 �្ងៃមុន 2 days before 2 �្ងៃមុន 1 week before 1 សប្�ាហ�មុន On start day (9:00 AM) នៅ�្ងៃចាប់ផ្�ើម (9:00 ព្រឹក) time(s) ដង() Enter a name please សូមបញ្ចូលឈ្មោះ The name can not only contain whitespaces ឈ្មោះមិនអាចមាន�ែស្ល�ងប៉ុណ្ណោះ Type: ប្រភ�ទ: Description: ការពិពណ៌នាសង្��ប: All Day: ព�ញមួយ�្ងៃ៖ Starts: ចាប់ផ្�ើម៖ Ends: បញ្ចប់៖ Remind Me: រំឭក​�្ញុំ: Repeat: ធ្វើម្�ងទៀ�៖ End Repeat: បញ្ចប់ម្�ងទៀ�៖ Calendar account: គណនីកា�់�្រា: Calendar account គណនីកា�់�្រា Type ប្រភ�ទ Description ពណ៌នា All Day ព�ញមួយ�្ងៃ Time: ព�ល: Time ព�ល Solar ពន្លឺ�្ងៃ Lunar �ែដែលមានប្រវ�្�ិសាស្�្រ Starts ចាប់ផ្�ើម Ends បញ្ចប់ Remind Me ជួយចូលចិ�្� Repeat កំណ�់ឡើងវិញ Daily រាល់�្ងៃ Weekdays �្ងៃធ្វើការ Weekly ប្រចាំសប្�ាហ� Monthly ប្រចាំ�ែ Yearly ប្រចាំឆ្នាំ End Repeat បញ្ចប់ការកំណ�់ឡើងវិញ After បន្ទាប់ពី On បើក Cancel button បោះបង់ Save button រក្សាទុក CScheduleOperation All occurrences of a repeating event must have the same all-day status. រាល់ការកើ�ឡើងនៃព្រឹ�្�ិការណ�ដដែលៗ�្រូវ�ែមានស្�ានភាពព�ញមួយ�្ងៃ។ Do you want to change all occurrences? �ើអ្នកចង់ផ្លាស់ប្�ូរការកើ�ឡើងទាំងអស់ទ�? Cancel button បោះបង់ Change All ផ្លាស់ប្�ូរទាំងអស់ You are changing the repeating rule of this event. អ្នកកំពុងផ្លាស់ប្�ូរវិធានដដែលៗនៃព្រឹ�្�ិការណ�ន�ះ។ You are deleting an event. អ្នកកំពុងលុបព្រឹ�្�ិការណ�មួយ។ Are you sure you want to delete this event? �ើអ្នកប្រាកដជាចង់លុបព្រឹ�្�ិការណ�ន�ះឬ? Delete button លុប Do you want to delete all occurrences of this event, or only the selected occurrence? �ើអ្នកចង់លុបរាល់ការកើ�ឡើងនៃព្រឹ�្�ិការណ�ន�ះឬ�ែការកើ�ឡើងដែលបានជ្រើសរើសទ�? Delete All លុបទាំងអស់ Delete Only This Event លុប�ែព្រឹ�្�ិការណ�ន�ះ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? �ើអ្នកចង់លុបវានិងការកើ�ឡើងនាព�លអនាគ�នៃព្រឹ�្�ិការណ�ន�ះឬមាន�ែការកើ�ឡើងដែលបានជ្រើសរើសទ�? Delete All Future Events លុបព្រឹ�្�ិការណ�អនាគ�ទាំងអស់ You are changing a repeating event. អ្នកកំពុងផ្លាស់ប្�ូរព្រឹ�្�ិការណ�ដដែលៗ។ Do you want to change only this occurrence of the event, or all occurrences? �ើអ្នកចង់ផ្លាស់ប្�ូរ�ែការកើ�ឡើងនៃព្រឹ�្�ិការណ�ន�ះឬការកើ�ឡើងទាំងអស់ទ�? All ទាំងអស់ Only This Event �ែព្រឹ�្�ិការណ�ន�ះទ� Do you want to change only this occurrence of the event, or this and all future occurrences? �ើអ្នកចង់ផ្លាស់ប្�ូរ�ែការកើ�ឡើងនៃព្រឹ�្�ិការណ�ន�ះឬព្រឹ�្�ិការណ�ន�ះនិងការកើ�ឡើងនាព�លអនាគ�ទ�? All Future Events ព្រឹ�្�ិការណ�អនាគ�ទាំងអស់ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. អ្នកបានជ្រើសរើស�ែឆ្លា�​ដែលមានប្រវ�្�ិសាស្�្រ ហើយនឹង�្រូវបានចូលចិ�្��ាម�ម្លៃនៃប្រវ�្�ិសាស្�្រ�ែ។ OK button យល់ព្រម CScheduleSearchDateItem Y ឆ្នាំ M �ែ D �្ងៃ CScheduleSearchItem Edit កែសម្រួល Delete លុប All Day ព�ញមួយ�្ងៃ CScheduleSearchView No search results គ្មានលទ្ធផលស្វែងរកទ� CScheduleView ALL DAY ព�ញមួយ�្ងៃ CSettingDialog Sunday �្ងៃអាទិ�្យ Monday �្ងៃចន្ទ Use System Setting ប្រើការកំណ�់របស់ប្រព�ន្ធដែលមានប្រវ�្�ិសាស្�្រ 24-hour clock ម៉ោង 24 ម៉ោង 12-hour clock ម៉ោង 12 ម៉ោង import ICS file ការបញ្ជូនឯកសារ ICS Manual ដៃគ guide 15 mins ១៥នាទី 30 mins ៣០នាទី 1 hour ១ម៉ោង 24 hours ២៤ម៉ោង Sync Now សម្រាកឥឡូវន�ះ Last sync សម្រាកចុះសម្រាកចុងក្រោយ Please go to the Control Center to change system settings សូមទៅកាន់ កណ្ដាលដំណើរការ ដើម្បីកែប្ដូរការកំណ�់ប្រព�ន្ធមួយ CTimeEdit (%1 mins) (%1 នាទី) (%1 hour) (%1 ម៉ោង) (%1 hours) (%1 ម៉ោង) CTitleWidget Y ឆ្នាំ M �ែ W សប្ដាហ� D �្ងៃ Search events and festivals ស្វែងរកការប្រគុំនិងកំសាន្� CWeekWindow Week សប្ដាហ� Y ឆ្នាំ CYearScheduleView All Day ព�ញមួយ�្ងៃ No event គ្មានព្រឹ�្�ិការណ� CYearWindow Y ឆ្នាំ CalendarWindow Calendar ប្រ�ិទិន Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ប្រ�ិទិនគឺជាឧបករណ�សម្រាប់មើលកាលបរិច្ឆ�ទហើយក�ជាអ្នករៀបចំផែនការប្រចាំ�្ងៃដ�ឆ្លា�វៃផងដែរដើម្បីរៀបចំកាលវិភាគទាំងអស់ក្នុងជីវិ�។ Calendarmainwindow Calendar ប្រ�ិទិន Manage គ្រប់គ្រង Privacy Policy គោលនយោបាយសុវ�្�ិភាព Syncing... កំពុងសម្រាក... Sync successful សម្រាកជោគជ�យ Sync failed, please try later សម្រាកបាក់ប្រមាណ សូមព្យាយាមម្�ងទៀ� CenterWidget All Day ព�ញមួយ�្ងៃ DAccountDataBase Work ធ្វើការ Life ជីវិ� Other ផ្ស�ងទៀ� DAlarmManager Close button បិទ One day before start មួយ�្ងៃមុនព�លចាប់ផ្�ើម Remind me tomorrow គ្រោះ�្ញុំ�្ងៃស្អែក Remind me later គ្រោះ�្ញុំក្រោយ 15 mins later ១៥នាទីក្រោយ 1 hour later ១ម៉ោងក្រោយ 4 hours later ៤ម៉ោងក្រោយ Tomorrow �្ងៃស្អែក Schedule Reminder ការជំនួយការចងចាំ %1 to %2 '%1 ដល់ %2' Today �្ងៃន�ះ DragInfoGraphicsView Edit កែសម្រួល Delete លុប New event ព្រឹ�្�ិការណ��្មី New Event ព្រឹ�្�ិការណ��្មី JobTypeListView export បញ្ជូន import ICS file ការបញ្ជូនឯកសារ ICS You are deleting an event type. អ្នកកំពុងលុបប្រភ�ទការប្រគុំមួយ។ All events under this type will be deleted and cannot be recovered. ការប្រគុំទាំងអស់នៅក្រោមប្រភ�ទន�ះនឹង�្រូវបានលុបហើយមិនអាចបំណើស្�ើរបាន Cancel button បោះបង់ Delete button លុប QObject Manage calendar គ្រប់គ្រងកា�់បន្�យ Event types ប្រភ�ទការប្រគុំ Account settings ការកំណ�់�ម្លៃគណនី Account គណនី Select items to be synced ជ្រើសរើសធា�ុដែល�្រូវបានស្វែងរក Events ការប្រគុំ General settings ការកំណ�់�ម្លៃទូទៅ Sync interval អ៊ីនធឺណែ�ស្វែងរក Calendar account គណនីកា�់បន្�យ General ទូទៅ First day of week �្ងៃដំបូងនៃសប្�ាហ� Time ព�លវ�លា Return Today Return �្ងៃន�ះ Return Today Today Return Today �្ងៃន�ះ ScheduleTypeEditDlg New event type ប្រភ�ទការប្រគុំ�្មី Edit event type កែប្រែប្រភ�ទការប្រគុំ Import ICS file បញ្ចូលឯកសារ ICS Name: ឈ្មោះ: Color: ពណ៌: ICS File: ឯកសារ ICS: Cancel button បោះបង់ Save button រក្សាទុក The name can not only contain whitespaces ឈ្មោះអាចមានលំហូរទន្លោះបានប៉ុន្មាន Enter a name please សូមបញ្ចូលឈ្មោះ Shortcut Help ជំនួយ Delete event លុបព្រឹ�្�ិការណ� Copy ចម្លង Cut កា�់ Paste បិទភ្ជាប់ Delete លុប Select all ជ្រើស​យក​ទាំងអស់ SidebarCalendarWidget Y ឆ្នាំ M �ែ TimeJumpDialog Go button ទៅ UserloginWidget Sign In button ចុះឈ្មោះចូល Sign Out button ចុះឈ្មោះច�ញ YearFrame Y ឆ្នាំ today Today Today �្ងៃន�ះ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_kn_IN.ts000066400000000000000000001456721523260663500254570ustar00rootroot00000000000000 AccountItem Sync successful ಸಿಂಕ� ಸ�ಪರ� Network error ಜಾಲ ತಪ�ಪ� Server exception ಸರ�ವರ� ಅಪವಾದ Storage full ಸಂಗ�ರಹಣೆ ತ�ಂಬಿದೆ AccountManager Local account ಸ�ಥಳೀಯ ಅಕೌಂಟ� Event types ಘಟನಾ ಪ�ರಕಾರಗಳ� CColorPickerWidget Color ರಂಗ Cancel button ವಾಪಸ� Save button ಸೇವ� CDayMonthView Monday ಸೋಮವಾರ Tuesday ಮಂಗಳವಾರ Wednesday ಬ�ಧವಾರ Thursday ಗ�ರ�ವಾರ Friday ಶ�ಕ�ರವಾರ Saturday ಶನಿವಾರ Sunday ರವಿವಾರ CDayWindow Y ಯ M ಮ D ಡಿ Lunar ಚಂದ�ರ CGraphicsView New Event ಹೊಸ ಘಟನೆ CMonthScheduleNumItem %1 more %1 ಇನ�ನ� CMonthView New event ಹೊಸ ಘಟನೆ New Event ಹೊಸ ಘಟನೆ CMonthWindow Y ಯ CMyScheduleView My Event ನನ�ನ ಘಟನೆ OK button ಒಂದ� Delete button ಅಪ�ಲಿಕೇಶಿನ� Edit button ಸಂಪಾದಿಸಿ CPushButton New event type ಹೊಸ ಘಟನಾ ಪ�ರಕಾರ CScheduleDlg New Event ಮ�ಂದಿನ ಘಟನೆ Edit Event ಸಂಪಾದಿಸಲ� ಘಟನೆ End time must be greater than start time ಆರಂಭಿಕ ಸಮಯದಿಂದ ಅಂತ�ಯ ಸಮಯವ� ಹೆಚ�ಚಿನದಾಗಿರಬೇಕ� OK button ಸರಿ Never ಯಾವಾಗಲೂ At time of event ಘಟನೆಯ ಸಮಯದಲ�ಲಿ 15 minutes before 15 ನಿಮಿಷಗಳ ಮೊದಲ� 30 minutes before 30 ನಿಮಿಷಗಳ ಮೊದಲ� 1 hour before 1 ಗಂಟೆ ಮೊದಲ� 1 day before 1 ದಿನ ಮೊದಲ� 2 days before 2 ದಿನಗಳ ಮೊದಲ� 1 week before 1 ವಾರದ ಮೊದಲ� On start day (9:00 AM) ಆರಂಭಿಕ ದಿನ (9:00 ನ�ನ�) time(s) ಸಮಯ (ಗಳ�) Enter a name please ಸೆರಿ ಹೆಸರನ�ನ� ನಮ�ಮ ಮ�ಂದೆ The name can not only contain whitespaces ಹೆಸರ� ಮಾತ�ರ ಬಿಟ�ಟ�ಕೊಳ�ಳಲ� ಅನ�ಮತಿಸ�ವ�ದಿಲ�ಲ Type: ಬಗ�ಗೆ: Description: ವಿವರಣೆ: All Day: ಒಟ�ಟ� ದಿನ: Starts: ಆರಂಭಿಸ�ತ�ತದೆ: Ends: ಅಂತ�ಯಗೊಳ�ಳ�ತ�ತದೆ: Remind Me: ನನ�ನನ�ನ� ನೆನಪಿಸಿ: Repeat: ಮರ�ಪ�ರಾರಂಭಿಸ�ವ�ದ�: End Repeat: ಮರ�ಪ�ರಾರಂಭವನ�ನ� ಅಂತ�ಯಗೊಳಿಸಿ: Calendar account: ಕ�ಯಾಲೆಂಡರ� ಖಾತೆ: Calendar account ಕ�ಯಾಲೆಂಡರ� ಖಾತೆ Type ಬಗ�ಗೆ Description ವಿವರಣೆ All Day ಒಟ�ಟ� ದಿನ Time: ಸಮಯ: Time ಸಮಯ Solar ಸೂರ�ಯ Lunar ಮಾಸ� Starts ಆರಂಭ Ends ಅಂತ Remind Me ನನ�ನನ�ನ� ನೆನಪಿಸಿ Repeat ಮರ�ಪ�ರಕ�ರಿಯೆ Daily ದೈನಂದಿನ Weekdays ವಾರದ ದಿನಗಳ� Weekly ವಾರದ Monthly ತಿಂಗಳಿನ Yearly ವರ�ಷದ End Repeat ಮರ�ಪ�ರಕ�ರಿಯೆ ಅಂತ After ಅಂತರ On ಅನ�ನ� Cancel button ವಾಪಸ� Save button ಸೇವ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ಮರ�ಪ�ರಕ�ರಿಯೆಯ ಪ�ರತಿ ಘಟನೆಗಳ� ಒಂದೇ ಸಮಯದಲ�ಲಿ ಹೊಂದಿರಬೇಕ�. Do you want to change all occurrences? ನೀವ� ಪ�ರತಿ ಘಟನೆಯನ�ನ� ಬದಲಾಯಿಸಲ� ಬಯಸ�ತ�ತೀರಾ? Cancel button ವಾಪಸ� Change All ಮತ�ತ� ಬದಲಾಯಿಸಿ You are changing the repeating rule of this event. ನೀವ� ಈ ಘಟನೆಯ ಮರ�ಪ�ರಕ�ರಿಯೆಯ ನಿಯಮವನ�ನ� ಬದಲಾಯಿಸ�ತ�ತೀರಾ. You are deleting an event. ನೀವ� ಒಂದ� ಘಟನೆಯನ�ನ� ಅಪ�ಪಳಿಸ�ತ�ತೀರಾ. Are you sure you want to delete this event? ನೀವ� ಈ ಘಟನೆಯನ�ನ� ಅಪ�ಪಳಿಸಲ� ನಿಶ�ಚಯರಾದಿರಾ? Delete button ಅಪ�ಪಳಿಸಿ Do you want to delete all occurrences of this event, or only the selected occurrence? ನೀವ� ಈ ಘಟನೆಯ ಪ�ರತಿ ಘಟನೆಗಳನ�ನ� ಅಪ�ಪಳಿಸಲ� ಬಯಸ�ತ�ತೀರಾ, ಅಥವಾ ಮಾತ�ರ ಆಯ�ಕೆ ಮಾಡಿದ ಘಟನೆಯನ�ನ�? Delete All ಮತ�ತ� ಅಪ�ಪಳಿಸಿ Delete Only This Event ಮಾತ�ರ ಈ ಘಟನೆಯನ�ನ� ಅಪ�ಪಳಿಸಿ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ನೀವ� ಈ ಘಟನೆಯನ�ನ� ಮತ�ತ� ಅದರ ಭವಿಷ�ಯದ ಪ�ರತಿ ಘಟನೆಗಳನ�ನ� ಅಪ�ಪಳಿಸಲ� ಬಯಸ�ತ�ತೀರಾ, ಅಥವಾ ಮಾತ�ರ ಆಯ�ಕೆ ಮಾಡಿದ ಘಟನೆಯನ�ನ�? Delete All Future Events ಭವಿಷ�ಯದ ಎಲ�ಲಾ ಘಟನೆಗಳನ�ನ� ಅಪ�ಪಳಿಸಿ You are changing a repeating event. ನೀವ� ಪ�ನರಾವರ�ತನೆಯಾದ ಘಟನೆಯನ�ನ� ಬದಲಿಸ�ತ�ತೀರಿ. Do you want to change only this occurrence of the event, or all occurrences? ನೀವ� ಘಟನೆಯ ಈ ಒಂದ� ಸಂಭವನೆಯನ�ನ� ಮಾತ�ರ ಬದಲಿಸಲ� ಬಯಸ�ತ�ತೀರಿ, ಅಥವಾ ಎಲ�ಲಾ ಸಂಭವನೆಗಳನ�ನ� ಬದಲಿಸಲ� ಬಯಸ�ತ�ತೀರಿ? All ಎಲ�ಲ Only This Event ಮಾತ�ರ ಈ ಘಟನೆ Do you want to change only this occurrence of the event, or this and all future occurrences? ನೀವ� ಘಟನೆಯ ಈ ಒಂದ� ಸಂಭವನೆಯನ�ನ� ಮಾತ�ರ ಬದಲಿಸಲ� ಬಯಸ�ತ�ತೀರಿ, ಅಥವಾ ಈ ಸಂಭವನೆಯನ�ನ� ಮತ�ತ� ಎಲ�ಲಾ ಭವಿಷ�ಯದಲ�ಲಿ ಸಂಭವಿಸ�ವ ಸಂಭವನೆಗಳನ�ನ� ಬದಲಿಸಲ� ಬಯಸ�ತ�ತೀರಿ? All Future Events ಎಲ�ಲಾ ಭವಿಷ�ಯದಲ�ಲಿ ಸಂಭವಿಸ�ವ ಘಟನೆಗಳ� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ನೀವ� �ಕಾದಶಮಿ ಮಾಸವನ�ನ� ಆಯ�ಕೆ ಮಾಡಿಕೊಂಡಿರ�ವ�ದರಿಂದ, ಚಂದ�ರ ಕಲೆಗಳ ನಿಯಮಗಳನ�ನ� ಅನ�ಸರಿಸಿ ನೀವ� ಸೂಚನೆ ಪಡೆಯ�ವ�ದಿದೆ. OK button ಆಯ�ಕೆ ಮಾಡಿ CScheduleSearchDateItem Y ಹಾಯ� M ಮಾಸ D ದಿನ CScheduleSearchItem Edit ಸಂಪಾದಿಸಿ Delete ಅಪಹರಿಸಿ All Day ಎಲ�ಲಾ ದಿನ CScheduleSearchView No search results ಹ�ಡ�ಕಾಟದ ಫಲಿತಾಂಶಗಳಿಲ�ಲ CScheduleView ALL DAY ಎಲ�ಲಾ ದಿನ CSettingDialog Sunday ಬ�ಧವಾರ Monday ಶನಿವಾರ Use System Setting ಸ�ಯೆಟಿಂಗ� ಅನ�ನ� ಬಳಸಿ 24-hour clock 24 ಗಂಟೆಯ ಗಣಕ 12-hour clock 12 ಗಂಟೆಯ ಗಣಕ import ICS file �ಸಿಎಸ� ಫೈಲ� ಅನ�ನ� ಆಯ�ಕೆ ಮಾಡಿ Manual ಮ�ಯಾನ�ವಲ� 15 mins 15 ನಿಮಿಷಗಳ� 30 mins 30 ನಿಮಿಷಗಳ� 1 hour 1 ಗಂಟೆ 24 hours 24 ಗಂಟೆಗಳ� Sync Now ಅಂತರಿಕ�ಷ ಅನ�ಕ�ರಮಣೆ ಮಾಡಿ Last sync ಕಳೆದ ಅಂತರಿಕ�ಷ ಅನ�ಕ�ರಮಣೆ Please go to the Control Center to change system settings ಸಿಸ�ಟಮ� ಸೆಟಿಂಗ� ಗಳನ�ನ� ಬದಲಿಸಲ� ಕಂಟ�ರೋಲ� ಸೆಂಟರ� ಗೆ ಹೋಗಿ CTimeEdit (%1 mins) (%1 ನಿಮಿಷ) (%1 hour) (%1 ಗಂಟೆ) (%1 hours) (%1 ಗಂಟೆಗಳ�) CTitleWidget Y ಯ� M ಮಿ W ವಿ D ಡಿ Search events and festivals ಘಟನೆಗಳ� ಮತ�ತ� ಸಮಾರಂಭಗಳನ�ನ� ಹ�ಡ�ಕಿ CWeekWindow Week ವಾರ Y 'ಯ�' CYearScheduleView All Day ನಿಮ�ಮ ದಿನದ No event ಯಾವ�ದೇ ಘಟನೆ CYearWindow Y 'ಯ�' CalendarWindow Calendar ಕ�ಯಾಲೆಂಡರ� Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ಕ�ಯಾಲೆಂಡರ� ದಿನಗಳನ�ನ� ನೋಡಲ� ಸಾಧನವಾಗಿದೆ, ಮತ�ತ� ನಿಮ�ಮ ಜೀವನದಲ�ಲಿ ಎಲ�ಲವನ�ನ� ಸೆಲೆಕ�ಟ� ಮಾಡಲ� ಸ�ಮಾರ�ಟ� ದಿನ ಯೋಜಕವಾಗಿದೆ. Calendarmainwindow Calendar ಕ�ಯಾಲೆಂಡರ� Manage ಸ�ವಯಂಪ�ರಮಾಣೀಕರಿಸಿ Privacy Policy ಮಾಹಿತಿ ಸ�ರಕ�ಷತೆ ನೀತಿ Syncing... ಸ�ಯೂನ�ಸ� ಆಗ�ತ�ತಿದೆ... Sync successful ಸ�ಯೂನ�ಸ� ಯಶಸ�ವಿಯಾಗಿ ಸಂಯೋಜಿಸಲಾಗಿದೆ Sync failed, please try later ಸ�ಯೂನ�ಸ� ವಿಫಲ, ಬಳಿಕ ಪ�ರಯತ�ನಿಸಿ CenterWidget All Day ನಿಮ�ಮ ದಿನದ DAccountDataBase Work ಕೆಲಸ Life ಜೀವನ Other ಇತರ DAlarmManager Close button ಮ�ಚ�ಚ� One day before start ಆರಂಭದ ಒಂದ� ದಿನ ಮ�ಂಚೆ Remind me tomorrow ನನ�ನನ�ನ� ನಾಳೆ ನೋಡಿಸಿ Remind me later ನನ�ನನ�ನ� ಬಳಿಕ ನೋಡಿಸಿ 15 mins later 15 ನಿಮಿಷಗಳ ಬಳಿಕ 1 hour later 1 ಗಂಟೆಯ ನಂತರ 4 hours later 4 ಗಂಟೆಯ ನಂತರ Tomorrow ಬೆಳೆಯ� Schedule Reminder ಸ�ಕೆಡ�ಯೂಲ� ಅವಶ�ಯಕತೆ %1 to %2 '%1 ಕ�ಕೆ %2' Today ಇಂದ� DragInfoGraphicsView Edit ಸ�ಧಾರಣೆ Delete ಅಪ�ಲಿಕೇಶನ� ಅನ�ನ� ಕ�ಯಾನ�ಸಲ� ಮಾಡಿ New event ಹೊಸ ಘಟನೆ New Event ಹೊಸ ಘಟನೆ JobTypeListView export ಆಮದ� import ICS file �ಸಿಎಸ� ಫೈಲ� ಆಮದ� You are deleting an event type. ನೀವ� ಒಂದ� ಘಟನೆ ರೂಪವನ�ನ� ಅಪ�ಲಿಕೇಶನ� ಮಾಡ�ತ�ತೀರಿ. All events under this type will be deleted and cannot be recovered. ಈ ರೂಪದಲ�ಲಿರ�ವ ಎಲ�ಲಾ ಘಟನೆಗಳ� ಅಪ�ಲಿಕೇಶನ� ಮಾಡಲ�ಪಡ�ತ�ತವೆ ಮತ�ತ� ಪ�ನಃ ಪಡೆಯಲ� ಸಾಧ�ಯವಲ�ಲ. Cancel button ಅಪ�ಲಿಕೇಶನ� Delete button ಅಪ�ಲಿಕೇಶನ� QObject Manage calendar ಕಲೆಂಡರ� ನಿರ�ವಹಣೆ Event types ಘಟನೆ ರೂಪಗಳ� Account settings ಅಕೌಂಟ� ಸೆಟ�ಟಿಂಗ�ಸ� Account ಅಕೌಂಟ� Select items to be synced ಸಿನ�ಕ� ಆಗಲ� ಅಗತ�ಯವಾದ ಅಂಶಗಳನ�ನ� ಆಯ�ಕೆ ಮಾಡಿ Events ಘಟನೆಗಳ� General settings ಸಾಮಾನ�ಯ ಸೆಟ�ಟಿಂಗ�ಸ� Sync interval ಸಿನ�ಕ� ಅವಧಿ Calendar account ಕಲೆಂಡರ� ಅಕೌಂಟ� General ಸಾಮಾನ�ಯ First day of week ವಾರದ ಮೊದಲ ದಿನ Time ಸಮಯ Return Today Return ಇಂದ� Return Today Today Return Today ಇಂದ� ScheduleTypeEditDlg New event type ನವ ಘಟನಾ ರೂಪ Edit event type ಘಟನಾ ರೂಪ ಸ�ಧಾರಣೆ Import ICS file ICS ಫೈಲ� ಆಮದ� Name: ಸೈನ�: Color: ರಂಗ: ICS File: ICS ಫೈಲ�: Cancel button ವಾಪಾಸ� Save button ಸಂಗ�ರಹಿಸ� The name can not only contain whitespaces ಈ ಹೆಸರ� ಮಾತ�ರ ಬಿಳಿ ಬಾಕ�ಸ�‌ಗಳನ�ನ� ಹೊಂದಿರಬಾರದ� Enter a name please ಸೈನ� ನ�ನ� ನಮ�ಮ ಮ�ಂಚೆ ನೀಡಿ Shortcut Help ಸಹಾಯ Delete event ಘಟನೆಯನ�ನ� ಅಥವಾ ಕತ�ತರಿಸಿ Copy ನಕಲಿಸಿ Cut ಕತ�ತರಿಸಿ Paste ಪೇಸ�ಟ� ಮಾಡಿ Delete ಅಥವಾ ಕತ�ತರಿಸಿ Select all ಎಲ�ಲವನ�ನ� ಆಯ�ಕೆ ಮಾಡಿ SidebarCalendarWidget Y ಯ�ಯಾ M ಮಾಸ� TimeJumpDialog Go button ಹೋಗ� UserloginWidget Sign In button ಸಂಗ�ರಹಿಸಿ Sign Out button ಸಂಗ�ರಹಿಸಿ YearFrame Y ಯ�ಯಾ today Today Today ಆಜ� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ko.ts000066400000000000000000001331601523260663500250570ustar00rootroot00000000000000 AccountItem Sync successful �기화 성공 Network error 네트워� 오류 Server exception 서버 예외 Storage full 저장소가 가� 참 AccountManager Local account 로컬 계정 Event types �벤트 유형 CColorPickerWidget Color 색� Cancel button 취소 Save button 저장 CDayMonthView Monday 월요� Tuesday 화요� Wednesday 수요� Thursday 목요� Friday 금요� Saturday 토요� Sunday �요� CDayWindow Y 년 M 월 D � Lunar �력 CGraphicsView New Event 새 �벤트 CMonthScheduleNumItem %1 more %1 � CMonthView New event 새 �벤트 New Event 새 �벤트 CMonthWindow Y 년 CMyScheduleView My Event 나� �벤트 OK button 확� Delete button 삭제 Edit button 편집 CPushButton New event type 새로운 �벤트 유형 CScheduleDlg New Event 새 �벤트 Edit Event �벤트 편집 End time must be greater than start time 종료 시간� 시작 시간보다 커야 합니다. OK button 확� Never 없� At time of event �벤트 시 15 minutes before 15분 전 30 minutes before 30분 전 1 hour before 1시간 전 1 day before 1� 전 2 days before 2� 전 1 week before 1주� 전 On start day (9:00 AM) 시작� (오전 9:00) time(s) 시간 Enter a name please �름� 입력해 주세요 The name can not only contain whitespaces �름� 공백 문�만 �함할 수 없습니다 Type: 종류: Description: 설명: All Day: 하루 종�: Starts: 시작: Ends: 종료 Remind Me: 알림 메시지: Repeat: 반복: End Repeat: 종료 반복: Calendar account: 달력 계정: Calendar account 달력 계정 Type 타입 Description 설명 All Day 하루 종� Time: 시간: Time 시간 Solar 양력 Lunar �력 Starts 시작 Ends 종료 Remind Me 알림 Repeat 다시 Daily 매� Weekdays 요� Weekly 매주 Monthly 매달 Yearly 매년 End Repeat 반복 종료 After �후 On 진행 Cancel button 취소 Save button 저장 CScheduleOperation All occurrences of a repeating event must have the same all-day status. 반복 �벤트� 모든 발�� 하루 종� ��한 �태를 가져야 합니다. Do you want to change all occurrences? 모든 항목� 변경하시겠습니까? Cancel button 취소 Change All 모� 변경 You are changing the repeating rule of this event. � �벤트� 반복 규칙� 변경하고 있습니다. You are deleting an event. �벤트를 삭제하는 중. Are you sure you want to delete this event? � �벤트를 삭제하시겠습니까? Delete button 삭제 Do you want to delete all occurrences of this event, or only the selected occurrence? � �벤트� 모든 발� 항목� 삭제하시겠습니까, 아니면 선�한 발� 항목만 삭제하시겠습니까? Delete All 모� 삭제 Delete Only This Event � �벤트만 삭제 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? � �벤트와 � �벤트� 모든 향후 발� 항목� 삭제하시겠습니까? 아니면 선�한 발� 항목만 삭제하시겠습니까? Delete All Future Events 모든 향후 �벤트 삭제 You are changing a repeating event. 반복 �벤트를 변경하는 중입니다. Do you want to change only this occurrence of the event, or all occurrences? �벤트� � 발�만 변경하시겠습니까, 아니면 모든 발�� 변경하시겠습니까? All 모� Only This Event � �벤트만 Do you want to change only this occurrence of the event, or this and all future occurrences? �벤트� � 발�만 변경하시겠습니까, 아니면 � 발�과 향후 모든 발�만 변경하시겠습니까? All Future Events 모든 향후 �벤트 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 당신� 윤달� 선�했습니다. 월력 달력� 규칙� 따� 알림� 받게 �니다. OK button 확� CScheduleSearchDateItem Y 년 M 월 D � CScheduleSearchItem Edit 편집 Delete 삭제 All Day 하루 종� CScheduleSearchView No search results 검색결과가 없습니다. CScheduleView ALL DAY 하루 종� CSettingDialog Sunday �요� Monday 월요� Use System Setting 시스템 설정 사용 24-hour clock 24시간 시계 12-hour clock 12시간 시계 import ICS file ICS 파� 불러오기 Manual 수� 15 mins 15분 30 mins 30분 1 hour 1 시간 24 hours 24시간 Sync Now 즉시 �기화 Last sync 마지막 �기화 Please go to the Control Center to change system settings 시스템 설정� 변경하려면 제어 센터로 ��해 주세요 CTimeEdit (%1 mins) (%1 분) (%1 hour) (%1 시간) (%1 hours) (%1 시간) CTitleWidget Y 년 M 월 W 주 D � Search events and festivals �벤트 � 축제 검색 CWeekWindow Week �주� Y 년 CYearScheduleView All Day 하루 종� No event �벤트 없� CYearWindow Y 년 CalendarWindow Calendar 달력 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 캘린�는 날짜를 볼 수있는 �구�며, ��� 모든 것� 예약 할 수있는 현명한 �� 플래너입니다 Calendarmainwindow Calendar 달력 Manage 관리 Privacy Policy 개�정보 보호정책 Syncing... �기화중... Sync successful �기화 성공 Sync failed, please try later �기화 실패, 나중� 다시 시�해 주세요 CenterWidget All Day 하루 종� DAccountDataBase Work 작업 Life �활 Other 기타 DAlarmManager Close button 닫기 One day before start 시작 하루 전 Remind me tomorrow 내� 알림 Remind me later 나중� 알림 15 mins later 15분 후 1 hour later 1시간 후 4 hours later 4시간 후 Tomorrow 내� Schedule Reminder �정 알림 %1 to %2 '%1부터 %2까지' Today 오늘 DragInfoGraphicsView Edit 편집 Delete 삭제 New event 새 �벤트 New Event 새 �벤트 JobTypeListView export 내보내기 import ICS file ICS 파� 가져오기 You are deleting an event type. � �벤트 유형� 삭제하고 있습니다. All events under this type will be deleted and cannot be recovered. � 유형 아래� 모든 �벤트가 삭제�고 복구할 수 없습니다. Cancel button 취소 Delete button 삭제 QObject Manage calendar 달력 관리 Event types �벤트 유형 Account settings 계정 설정 Account 계정 Select items to be synced �기화할 항목 선� Events �벤트 General settings �반 설정 Sync interval �기화 간격 Calendar account 달력 계정 General �반 First day of week 주간 시작 요� Time 시간 Return Today Return 오늘 Return Today Today Return Today 오늘 ScheduleTypeEditDlg New event type 새로운 �벤트 유형 Edit event type �벤트 유형 수정 Import ICS file ICS 파� 가져오기 Name: �름: Color: '색�:' ICS File: 'ICS 파�:' Cancel button 취소 Save button 저장 The name can not only contain whitespaces �름� 공백 문�열만 �함할 수 없습니다 Enter a name please �름� 입력해 주세요 Shortcut Help �움� Delete event �벤트 삭제 Copy 복사 Cut 잘�내기 Paste 붙여넣기 Delete 삭제 Select all 전체 선� SidebarCalendarWidget Y 년 M 월 TimeJumpDialog Go button Go UserloginWidget Sign In button 로그� Sign Out button 로그아웃 YearFrame Y 년 today Today Today 오늘 linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ku.ts000066400000000000000000001375251523260663500250760ustar00rootroot00000000000000 AccountItem Sync successful بەرەوە یەکەم Network error خەرەکتەرەوە Server exception کۆرەکتەرەوە Storage full ئەمەکتەرەوە AccountManager Local account هەڵقەتەرەوە Event types تیپەکانی ڤەرەکتەرەوە CColorPickerWidget Color رنگ Cancel button بەکێشەوە Save button بەسەرکەوە CDayMonthView Monday ئەیتەن Tuesday ئەیتەوە Wednesday ئەیتەسەر Thursday ئەیتەر Friday پەیتەن Saturday سەرەتەن Sunday یەکەم CDayWindow Y یەکەم M مەرەکتەن D دەن Lunar لۇنار CGraphicsView New Event ئەوەتەوە نوو CMonthScheduleNumItem %1 more %1 زیادە CMonthView New event ئەوەتەوە نوو New Event ئەوەتەوە نوو CMonthWindow Y یەکەم CMyScheduleView My Event ئەوەتەوەم OK button بەرەوە Delete button چاکەوە Edit button بەرەوە CPushButton New event type تیپی نوو ڤەرەکتەرەوە CScheduleDlg New Event تێبینی نوو Edit Event وەرگیرەی تێبینی End time must be greater than start time توتەی ئەوەی چاک کردنەوە بەشی دەبێتەوە چاک کردنەوە بەشی دەبێت OK button تەواو Never هەیە At time of event بە چاک کردنەوە بەشی تێبینی 15 minutes before 15 دەقیقە بە گەورەتر 30 minutes before 30 دەقیقە بە گەورەتر 1 hour before 1 کەش بە گەورەتر 1 day before 1 ڕۆژ بە گەورەتر 2 days before 2 ڕۆژ بە گەورەتر 1 week before 1 ھە�تە بە گەورەتر On start day (9:00 AM) لە ڕۆژی چاک کردنەوە (9:00 بە ئەوەی) time(s) زمان (هەڵبەند) Enter a name please نامێک بەخوێنەوە The name can not only contain whitespaces نامەکە نەدەبێت چەکەکان بەتەواو بێت Type: نوع: Description: تەرجیمە: All Day: هەموو ڕۆژ: Starts: بەشی چاک کردنەوە: Ends: بەشی کۆنەوە: Remind Me: بەمەوە بەخوێنەوە: Repeat: بەرگرە: End Repeat: کۆنەوە بەرگرە Calendar account: کۆنەوە بەکارهێنەری کالەندەر: Calendar account کۆنەوە بەکارهێنەری کالەندەر Type نوع Description تەرجیمە All Day هەموو ڕۆژ Time: زمان: Time زمان Solar سولار Lunar لور Starts باید بارو Ends کۆتاری Remind Me بۆمەن بکەرەو Repeat تکرار کەرەو Daily هەر گونه Weekdays هەر چەند Weekly هە�ته Monthly ماهیان Yearly سالیان End Repeat تکرار کۆتاری After پاش On لە Cancel button بەکارهێنەر Save button بچێنەرەو CScheduleOperation All occurrences of a repeating event must have the same all-day status. هەر گونه تکراری نەخشیان باید دەبێن چەند چەند کۆتاری کردنەوەی کۆتاری هەر گونه. Do you want to change all occurrences? دەبێن گۆڕەوەی هەر گونه تکراری بکەرەو؟ Cancel button بەکارهێنەر Change All گۆڕەوەی هەر گونه You are changing the repeating rule of this event. دەبێن گۆڕەوەی قواعد تکراری نەخشیان بکەرەو. You are deleting an event. دەبێن چاک کردنەوەی نەخشیان بکەرەو. Are you sure you want to delete this event? دەبێن چاک کردنەوەی نەخشیان بکەرەو؟ Delete button چاک کردنەوە Do you want to delete all occurrences of this event, or only the selected occurrence? دەبێن چاک کردنەوەی هەر گونه تکراری نەخشیان بکەرەو یاخود چاک کردنەوەی گۆڕەوەکە؟ Delete All چاک کردنەوەی هەر گونه Delete Only This Event چاک کردنەوەی نەخشیان Do you want to delete this and all future occurrences of this event, or only the selected occurrence? دەبێن چاک کردنەوەی نەخشیان یاخود هەر گونه تکراری کۆتاری هەر گونه بکەرەو؟ Delete All Future Events چاک کردنەوەی هەر گونه کۆتاری هەر گونه You are changing a repeating event. ئەمە قەدەر ھەققىدە ھەجمە دەۋاملى بارلىق بىلەن چەكشىلە Do you want to change only this occurrence of the event, or all occurrences? ئەمە قەدەر بارلىق بىلەن چەكشىلە ھەن ھەققىدە ھەجمە دەۋاملى بىلەن چەكشىلە ھەن؟ All بارلىق Only This Event ئەمە قەدەر بىلەن چەكشىلە Do you want to change only this occurrence of the event, or this and all future occurrences? ئەمە قەدەر بارلىق بىلەن چەكشىلە ھەن ھەققىدە ھەجمە دەۋاملى بىلەن چەكشىلە ھەن؟ All Future Events بارلىق ئەگەر بارلىق بىلەن چەكشىلە You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ئەمە قەدەر ھەجمە دەۋاملى بارلىق بىلەن چەكشىلە ھەن ھەققىدە ھەجمە دەۋاملى بىلەن چەكشىلە ھەن؟ OK button بىر قەدەر CScheduleSearchDateItem Y بىر M ئەی D كۈنى CScheduleSearchItem Edit تەھرىر قىلىش Delete حەققىدە ھەجمە All Day كۈنى بىر قەدەر CScheduleSearchView No search results ئىزدەش نەتىجىسى بارلىق CScheduleView ALL DAY كۈنى بىر قەدەر CSettingDialog Sunday يەكشەنبە Monday ئەشەنبە Use System Setting سىست�م نەمەنى كىشىلىش 24-hour clock 24-سەنە چەكشىلە 12-hour clock 12-سەنە چەكشىلە import ICS file ICS �ايلىنى كىرگۈزۈش Manual ئەھلىيە 15 mins 15 دىنە 30 mins 30 دىنە 1 hour 1 سەنە 24 hours 24 سەنە Sync Now ھەللىق سىنىپ Last sync ئەگەر سىنىپ Please go to the Control Center to change system settings سىست�م نەمەنى كىشىلىش ئۈچۈن كۆرۈنۈش مەركىزىغا چەقىرىش CTimeEdit (%1 mins) (%1 دەقیقە) (%1 hour) (%1 گۆش) (%1 hours) (%1 گۆش) CTitleWidget Y ی M M W W D D Search events and festivals تەقdimەت و �ەستیوالەکان بۆگەرەوە CWeekWindow Week هە�تە Y ی CYearScheduleView All Day هەممە دەن No event هیچ تەقdimەتێک نیست CYearWindow Y ی CalendarWindow Calendar کالندر Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. کالندر ھەندێکی دەن بۆگەرەوە، و هەمچەن یەک چەنی دەنەرەوە بۆ ئەمەوە دەنەکانی ھەر چەنی ژیان بەکارهێنرەوە. Calendarmainwindow Calendar کالندر Manage بەکارهێنە Privacy Policy سەرچاوەی پریڤاسی Syncing... بەکارهێنە Sync successful بەکارهێنە Sync failed, please try later بەکارهێنە، لە ھەمیشەدا بەکارهێنە CenterWidget All Day هەممە دەن DAccountDataBase Work کار Life ژیان Other دیگە DAlarmManager Close button بەندە One day before start یەک گۆش پێش دەن Remind me tomorrow بۆ ناوەڕاست بەسەرچاوە Remind me later بەسەرچاوە بەکارهێنە 15 mins later 15 دەقیقە بەکارهێنە 1 hour later 1 ساعت دوور 4 hours later 4 ساعت دوور Tomorrow بەروەس Schedule Reminder تەنەریمەنی چەک کردن %1 to %2 '%1 تا %2' Today هەنگا DragInfoGraphicsView Edit بەڕێوەبردن Delete پاک کردن New event ئەوەی نوو New Event ئەوەی نوو JobTypeListView export ئەورشەن کردن import ICS file ICS �ایلی بەرەوە کردن You are deleting an event type. تۆ دەوەی نووکردنەوەی یەک چەکەیە. All events under this type will be deleted and cannot be recovered. هەموو چەکەکانی گەورەکە چەکەیە دەوەی نووکردنەوەیە و نەدەوەی بەرەوە کردنەوە. Cancel button بەرەوە کردن Delete button پاک کردن QObject Manage calendar کەلەندار بەڕێوەبردن Event types چەکەکان Account settings کۆتاکە کردن Account کۆتا Select items to be synced ئیتمە ئەوەی کە دەبێت بەرەوە کردن Events چەکەکان General settings گەرمەنی کردن Sync interval بەرەوە کردن �اصلە Calendar account کەلەندار کۆتا General گەرمەن First day of week هە�تەی نخست Time زمان Return Today Return هەنگا Return Today Today Return Today هەنگا ScheduleTypeEditDlg New event type تایپی کۆمەڵە جدی Edit event type تایپی کۆمەڵە بەکارهێنەر Import ICS file بارکردنی �ایل ICS Name: ناو: Color: رنگ: ICS File: �ایل ICS: Cancel button بەخێرە Save button بچڕە The name can not only contain whitespaces ناو نەدە بتوانێت چەند کاراکتەر بەکارهێنرەوە Enter a name please لە بارە چەند ناو بەکارهێنرەوە Shortcut Help کارکردن Delete event پاک کردنی کۆمەڵە Copy کۆپی Cut بەکارهێنەر Paste بچڕە Delete پاک کردن Select all هەموو بەکارهێنەر SidebarCalendarWidget Y ی M م TimeJumpDialog Go button بەدەستهێنە UserloginWidget Sign In button دەخڵ کردن Sign Out button چاک کردن YearFrame Y ی today Today Today بەروار linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ku_IQ.ts000066400000000000000000001403771523260663500254660ustar00rootroot00000000000000 AccountItem Sync successful بەرەوە بەرەوە Network error گەرەوە دەرەوە Server exception بەرەوە بەرەوە Storage full بەرەوە بەرەوە AccountManager Local account هەڵەکەرەوە Event types تایبەتەکان CColorPickerWidget Color رنگ Cancel button بەرەوە Save button بەرەوە CDayMonthView Monday یەمەن Tuesday دووشەمەن Wednesday سێشەمەن Thursday چهارشەمەن Friday پێنجشەمەن Saturday شەمەن Sunday هەپتەن CDayWindow Y یە M مە D دە Lunar لۇنار CGraphicsView New Event تایبەت نوان CMonthScheduleNumItem %1 more %1 دوو CMonthView New event تایبەت نوان New Event تایبەت نوان CMonthWindow Y یە CMyScheduleView My Event تایبەتیم OK button بەرەوە Delete button چاپە Edit button بەرەوە CPushButton New event type تایبەتی نوان CScheduleDlg New Event ئەۋەت جدید Edit Event ئەۋەت دوورە End time must be greater than start time زامانی پەرە ھەرەکەتی دوورە بەزامانی ھەرەکەتی جدید بەزامانی ھەرەکەتی دوورە بەزامانی ھەرەکەتی جدید بەزامانی ھەرەکەتی دوورە OK button بەڵا Never هەرگەز At time of event دەرەجە ھەرەکەتی 15 minutes before 15 دەقیقە پێنجەر 30 minutes before 30 دەقیقە پێنجەر 1 hour before 1 گەم پێنجەر 1 day before 1 ڕۆژ پێنجەر 2 days before 2 ڕۆژ پێنجەر 1 week before 1 هە�تە پێنجەر On start day (9:00 AM) لە ڕۆژی ھەرەکەتی (9:00 AM) time(s) زامان (هەڵبەند) Enter a name please ئەدەمەکە بە نامەیەک بەکاربێرە The name can not only contain whitespaces نامەکە ھەندێک ھەڵبەند بە کارهێنەرە Type: تیپ: Description: تەرجیمە: All Day: هەموو ڕۆژ: Starts: بەرە: Ends: پەرە: Remind Me: بەمەنگەرە: Repeat: بەرەوەرە: End Repeat: بەرەوەرە چاپە Calendar account: کالەندەر کۆتاتە: Calendar account کالەندەر کۆتاتە Type تیپ Description تەرجیمە All Day هەموو ڕۆژ Time: زامان: Time زمان Solar سولار Lunar لور Starts بەرە Ends نەتە Remind Me بۆمەن بەکە Repeat تەکرار Daily هە�تەن Weekdays هە�تەن Weekly هە�تەن Monthly ماهان Yearly سالان End Repeat تەکرار بەن After پشت On بە Cancel button بەخە Save button بەسە CScheduleOperation All occurrences of a repeating event must have the same all-day status. هەر گەلەکانی یەکە کە تەکرار کردنەوە دەکەن بەشی ھەر یەکە دەبێت ھەمە چەمکانەوە دەبێت. Do you want to change all occurrences? دەخوێندەت کە ھەر گەلەکانی یەکە کە تەکرار کردنەوە دەکەن بەشی چەمکانەوە بەگەڕاوە؟ Cancel button بەخە Change All ھەر یەکە بەگەڕاوە You are changing the repeating rule of this event. تەکرار کردنەوە دەبێت کە یەکە کە تەکرار کردنەوە دەکەن بەشی چەمکانەوە بەگەڕاوە. You are deleting an event. تەکرار کردنەوە دەبێت کە یەکە کە تەکرار کردنەوە دەکەن بەشی چەمکانەوە بەگەڕاوە. Are you sure you want to delete this event? دەخوێندەت کە چەمکانەوە بەگەڕاوە؟ Delete button بەگەڕاوە Do you want to delete all occurrences of this event, or only the selected occurrence? دەخوێندەت کە ھەر گەلەکانی یەکە کە تەکرار کردنەوە دەکەن بەشی چەمکانەوە بەگەڕاوە یاخو چەمکانەوە دەبێت کە بەشی چەمکانەوە بەگەڕاوە؟ Delete All ھەر یەکە بەگەڕاوە Delete Only This Event چەمکانەوە دەبێت کە بەشی چەمکانەوە بەگەڕاوە Do you want to delete this and all future occurrences of this event, or only the selected occurrence? دەخوێندەت کە چەمکانەوە دەبێت کە بەشی چەمکانەوە بەگەڕاوا یاخو ھەر یەکە دەبێت کە بەشی چەمکانەوە بەگەڕاوە؟ Delete All Future Events ھەر یەکە دەبێت کە بەشی چەمکانەوە بەگەڕاوە You are changing a repeating event. دەرەزە ھەڵبەندی کردنەوەی یەکەم بەرەزە کردنەوەی ھەڵبەندی دەرەزە Do you want to change only this occurrence of the event, or all occurrences? دەرەزە ھەڵبەندی کردنەوەی یەکەم بەرەزە کردنەوەی ھەڵبەندی دەرەزە، یان هەر ھەڵبەندی دەرەزە؟ All هەر ھەڵبەندی دەرەزە Only This Event تنها ھەڵبەندی دەرەزە Do you want to change only this occurrence of the event, or this and all future occurrences? دەرەزە ھەڵبەندی کردنەوەی یەکەم بەرەزە کردنەوەی ھەڵبەندی دەرەزە، یان ھەمین و هەر ھەڵبەندی دەرەزەی کۆمەڵەی پشتی؟ All Future Events هەر ھەڵبەندی دەرەزەی کۆمەڵەی پشتی You have selected a leap month, and will be reminded according to the rules of the lunar calendar. دەرەزە ھەڵبەندی کردنەوەی یەکەم بەرەزە کردنەوەی ھەڵبەندی دەرەزە، یان ھەمین و هەر ھەڵبەندی دەرەزەی کۆمەڵەی پشتی؟ OK button بەرەزە CScheduleSearchDateItem Y بەرەزە M مەسەلە D دایرە CScheduleSearchItem Edit وەرگرتن Delete چاک کردن All Day هەر ڕۆژە CScheduleSearchView No search results نتییە کۆمەڵەی گەڕان CScheduleView ALL DAY ALL DAY CSettingDialog Sunday یەکشەممە Monday دووشەممە Use System Setting سیستەم بەکارھێنەری دەرەزە 24-hour clock سەکوونی 24 کات 12-hour clock سەکوونی 12 کات import ICS file بەرەزە کردنەوەی �ایل ICS Manual ئەمەندە 15 mins 15 دەنگ 30 mins 30 دەنگ 1 hour یەک کات 24 hours 24 کات Sync Now سینک کەردن Last sync سینک ھەڵبەندی کۆمەڵەی پشتی Please go to the Control Center to change system settings لەوە بەرەزە کردنەوەی ھەڵبەندی کۆمەڵەی پشتی بەکارهێنەری سیستەم بارەکردنەوەی ھەڵبەندی کۆمەڵەی پشتی CTimeEdit (%1 mins) (%1 دەقیقە) (%1 hour) (%1 ڕۆژ) (%1 hours) (%1 ڕۆژ) CTitleWidget Y يەك M مەس W سەر D دەن Search events and festivals تەمەمە و �ەستیвалە ئەنجامەن و گەڕان CWeekWindow Week هە�تە Y يەك CYearScheduleView All Day کۆلەم No event هیچ تەمەمە CYearWindow Y يەك CalendarWindow Calendar كۆلەم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كۆلەم یەک چەند ئەنجامە و ڕۆژنامە بۆ چەند چەند ئەنجامە بەشداری بکاتەن. Calendarmainwindow Calendar كۆلەم Manage ھەجمنە Privacy Policy پولیسیەی پەرەسەن Syncing... سینک کردن... Sync successful سینک كردن ھەقیقیتە Sync failed, please try later سینک كردن چاک نەکردن، بەرەت بکەن لە ڕەتەکەتە CenterWidget All Day کۆلەم DAccountDataBase Work کار Life حیات Other دیگەر DAlarmManager Close button بەرەت One day before start یەک ڕۆژ دەقیقە بەرەت Remind me tomorrow بەرەت بکەن یەک ڕۆژ دەقیقە Remind me later بەرەت بکەن دەقیقە دەقیقە دەقیقە 15 mins later 15 دەقیقە دەقیقە دەقیقە 1 hour later 1 ساعت بەردەوە 4 hours later 4 ساعت بەردەوە Tomorrow بەردەوە Schedule Reminder تێبەمارکردنی کەش %1 to %2 '%1 تا %2' Today بەروبار DragInfoGraphicsView Edit دەخانەوە Delete پڕۆسەکردن New event کەشی نووسە New Event کەشی نووسە JobTypeListView export چاپ کردن import ICS file بارکردنی �ایل ICS You are deleting an event type. کەشی یەک گۆشە دەبێتەوە. All events under this type will be deleted and cannot be recovered. هەموو کەشەکان کە لە ئەم گۆشەنە دەبێتەوە بەردەوە و نەدەتوانرێت بەردەوە بگرێت. Cancel button کەلەوە Delete button پڕۆسەکردن QObject Manage calendar تەمەم کردنی کەلەندار Event types نوعەکانی کەش Account settings تەمەم کردنی کۆتا Account کۆتا Select items to be synced کۆتاکانی کە دەبێتەوە بەردەوە Events کەشەکان General settings تەمەم کردنی ئامانج Sync interval دەرەوە بکردنی ھەڵدەست Calendar account کۆتای کەلەندار General ئامانج First day of week ڕۆژی پێدەوە Time زمان Return Today Return بەروبار Return Today Today Return Today بەروبار ScheduleTypeEditDlg New event type ئەوەت نووەت Edit event type ئەوەت دوورە Import ICS file ICS �ایلو بەرگری Name: ناو: Color: رنگ: ICS File: ICS �ایل: Cancel button بەرە Save button بەسە The name can not only contain whitespaces ناو دەتوانێت بەرە چەند �اصلە بێت Enter a name please لەوانە بەرە ناوی دەرەکە Shortcut Help کارکردنەوە Delete event ئەوەت دوورکردن Copy کۆپی Cut بەکارهێنان Paste چاپەوە Delete دوورکردن Select all ھەممی چاپەوە SidebarCalendarWidget Y ي M م TimeJumpDialog Go button بەرە UserloginWidget Sign In button دەرەکە Sign Out button بەرە YearFrame Y ي today Today Today بەرە linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ky.ts000066400000000000000000001375231523260663500251000ustar00rootroot00000000000000 AccountItem Sync successful Синхронданды Network error Жүйөлөө қате Server exception Сервер қате Storage full Жадында жеткен AccountManager Local account Жергилик аккаунт Event types Эвент түрлөрү CColorPickerWidget Color Рәнг Cancel button Баталоо Save button Сақтоо CDayMonthView Monday Дүйнө Tuesday Сей�ен Wednesday Шаршан Thursday Бей�ен Friday Жума Saturday Ишемби Sunday Жекшемби CDayWindow Y Y M M D D Lunar �йлык CGraphicsView New Event Жаңы қызмат CMonthScheduleNumItem %1 more %1 өзгөрүү CMonthView New event Жаңы қызмат New Event Жаңы қызмат CMonthWindow Y Y CMyScheduleView My Event Мендин қызматы OK button OK Delete button Жогуу Edit button Түзөө CPushButton New event type Жаңы қызмат түрү CScheduleDlg New Event Жаңы үйлөө Edit Event Мәлүмәт үзгәрте End time must be greater than start time Башланғыч ваҡыттан ө�төн а�ҡ ваҡыт һаны булырға тейеш OK button Тамам Never Ялғыҙ At time of event Үйлөө ваҡытында 15 minutes before 15 минут өҫтөн 30 minutes before 30 минут өҫтөн 1 hour before 1 �әгать өҫтөн 1 day before 1 көн өҫтөн 2 days before 2 көн өҫтөн 1 week before 1 аҙаҡ өҫтөн On start day (9:00 AM) Башланғыч көнөнда (9:00 AM) time(s) ваҡыт(лар) Enter a name please Иҫтәләт атamasын кире ҡуйырға The name can not only contain whitespaces Иҫтәләт атама�ы ғәҙәти ҡылыҡтарҙан ғына үткән Type: Төрө: Description: Та�одифа: All Day: Бөтен Көн: Starts: Башлана: Ends: ��ҡлана: Remind Me: Таҡырып ҡуйырға: Repeat: Такрарлау: End Repeat: Такрарлау а�ҡлана: Calendar account: Календарь аккаунты: Calendar account Календарь аккаунты Type Төрө Description Та�одифа All Day Бөтен Көн Time: Ваҡыт: Time Врем� Solar Солнечный Lunar Лунный Starts Башқалары Ends Тамылы Remind Me Мені қайта қайта үзіңіз Repeat Таралу Daily Күн �айын Weekdays Жұма күндері Weekly �пта�ына Monthly �й �айын Yearly Жылына End Repeat Таралуын а�қтау After Соңынан On Бүгін Cancel button Баттырыу Save button Сақтау CScheduleOperation All occurrences of a repeating event must have the same all-day status. Таралуы бар оқиғалардың барлығы бірдей кеше күн �тату�ына ие болуы керек. Do you want to change all occurrences? Барлық оқиғаларды өзгерту үшін болады ма? Cancel button Баттырыу Change All Барлығын өзгерту You are changing the repeating rule of this event. Сіз бұл оқиғаның таралу ереже�ін өзгертуде. You are deleting an event. Сіз оқиғаны өшіруде. Are you sure you want to delete this event? Сіз бұл оқиғаны өшіруге құрымды? Delete button Жо�у Do you want to delete all occurrences of this event, or only the selected occurrence? Сіз бұл оқиғаның барлық оқиғаларын өшіру үшін, әлде тек таңдалған оқиғаны өшіру үшін? Delete All Барлығын жо�у Delete Only This Event Сіздің оқиғаны ғана жо�у Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Сіз бұл оқиғаны және оның барлық болашақ оқиғаларын өшіру үшін, әлде тек таңдалған оқиғаны өшіру үшін? Delete All Future Events Барлық болашақ оқиғаларды жо�у You are changing a repeating event. Сіз қайта қайтарылған құқықты өзгертуіз келеді. Do you want to change only this occurrence of the event, or all occurrences? Сіз құқықтың ғана бір өзгері�ін өзгертуіз келеді әлде барлық өзгері�терін? All Барлығы Only This Event Ғана бұл құқық Do you want to change only this occurrence of the event, or this and all future occurrences? Сіз құқықтың ғана бір өзгері�ін өзгертуіз келеді әлде бұл және барлық келешектегі өзгері�терін? All Future Events Барлық келешектегі құқықтар You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Сіз қаңтар айын таңдап алдыңыз, және айналу күні бойынша айналу күнінің ережелеріне �әйке� қайта қайта е�те �ақтауыз келеді. OK button Жақ�ы CScheduleSearchDateItem Y Ж M �й D Күн CScheduleSearchItem Edit Түзету Delete Жою All Day Барлық күн CScheduleSearchView No search results Құрылымыз жоқ CScheduleView ALL DAY Б�РЛЫҚ КҮ� CSettingDialog Sunday Жүзім Monday Дүй�енбі Use System Setting Си�темалық құрылымды қолдану 24-hour clock 24 �ағаттық �ағат 12-hour clock 12 �ағаттық �ағат import ICS file ICS файлын импорттау Manual Кезекші 15 mins 15 минут 30 mins 30 минут 1 hour 1 �ағат 24 hours 24 �ағат Sync Now Қазір �инхрондау Last sync Соңғы �инхрондау Please go to the Control Center to change system settings Си�темалық құрылымдарды өзгерту үшін Ба�қару центріне бару керек CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 �аат) (%1 hours) (%1 �ааттар) CTitleWidget Y Я M М W W D D Search events and festivals Эвенттер жана фе�тивалдарды көзөрө CWeekWindow Week �йыл Y Я CYearScheduleView All Day Бүтün өйлөө No event Эвент жок CYearWindow Y Я CalendarWindow Calendar Календарь Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календарь күндөрү көзөрөө үчүн ыңгайлы аркылык, жана бүтün өйлөөгө үйрөө үчүн ыңгайлы өйлөөчө болуп �аналат. Calendarmainwindow Calendar Календарь Manage Уюштуруу Privacy Policy Жыны� үлгү�ү Syncing... Синхрондой... Sync successful Синхрондойуу муваффақиаттуу Sync failed, please try later Синхрондойуу өтпөгөн, кийин ыйынбай CenterWidget All Day Бүтün өйлөө DAccountDataBase Work Иш Life Жан-өмүр Other Башка DAlarmManager Close button Жабуу One day before start Башта одуң өтөн Remind me tomorrow Кийин өтөн үзгөртө Remind me later Кийин үзгөртө 15 mins later 15 минуттан кийин 1 hour later 1 �ааттан кийин 4 hours later 4 �ааттан кийин Tomorrow Эртең Schedule Reminder Жобалаштырылган ��ке алу %1 to %2 '%1-дән %2-гә' Today Бүген DragInfoGraphicsView Edit Төзөт Delete Жогоруу New event Жаңы қызмет New Event Жаңы Қызмет JobTypeListView export �к�порт import ICS file ICS файлын импорт You are deleting an event type. Сиз қызмет түрүн жогоруу киләт. All events under this type will be deleted and cannot be recovered. Бул түрдөгөн қызметтер бүтүнлөөн жогоруу һәм қайта алынбайт. Cancel button Берәр Delete button Жогоруу QObject Manage calendar Календарьды башкаруу Event types Қызмет түрҙәре Account settings �ккаунт әйләнеше Account �ккаунт Select items to be synced Синхронизаци� ө�өн өнөкөттәр таныла Events Қызметтер General settings �лгебралыҡ әйләнеше Sync interval Синхронизаци� аралығы Calendar account Календарь аккаунты General �лгебралыҡ First day of week �йын ө�өн өнөкөт Time Врем� Return Today Return Бүген Return Today Today Return Today Бүген ScheduleTypeEditDlg New event type Жаңы әкиәти төрө Edit event type Төзөм әкиәти төрө Import ICS file ICS файлын кире алу Name: �ты: Color: Рәнг: ICS File: ICS файлы: Cancel button Барак Save button Сақлау The name can not only contain whitespaces �тта ғана көп күңәлдән ғана барып қалған Enter a name please �тты кірізіңіз Shortcut Help Ярдам Delete event Эвентті өшіріңіз Copy Көпкә Cut Түшіріңіз Paste Па�та Delete Өшіріңіз Select all Барлығын таңдау SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Барып қою UserloginWidget Sign In button Кіру Sign Out button Шығу YearFrame Y Y today Today Today Бүгін linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_lo.ts000066400000000000000000001575031523260663500250670ustar00rootroot00000000000000 AccountItem Sync successful ຊິງສຳເລັດ Network error ຂ�້ຜິດພາດເຄືອຂ່າ� Server exception ຂ�້ຜິດພາດເຊີບເວີ Storage full ພື້ນທີ່ເ�ັບຂ�້ມູນເຕັມ AccountManager Local account ບັນຊີທ້ອງຖິ່ນ Event types ປະເພດເຫດ�ານ CColorPickerWidget Color ສີ Cancel button �ົ�ເລີ� Save button ບັນທຶ� CDayMonthView Monday ວັນຈັນ Tuesday ວັນອັງຄານ Wednesday ວັນພຸດ Thursday ວັນພະຫັດ Friday ວັນສຸ� Saturday ວັນເສົາ Sunday ວັນອາທິດ CDayWindow Y ປີ M ເດືອນ D ວັນ Lunar ປະຕິທິນຈັນທະຄະຕິ CGraphicsView New Event ເຫດ�ານໃ�່ CMonthScheduleNumItem %1 more ອີ� %1 CMonthView New event ເຫດ�ານໃ�່ New Event ເຫດ�ານໃ�່ CMonthWindow Y ປີ CMyScheduleView My Event ເຫດ�ານຂອງຂ້ອ� OK button ຕົ�ລົງ Delete button ລຶບ Edit button ��້ໄຂ CPushButton New event type ປະເພດເຫດ�ານໃ�່ CScheduleDlg New Event ເຫດ�ານໃ�່ Edit Event ��້ໄຂເຫດ�ານ End time must be greater than start time ເວລາສິ້ນສຸດຕ້ອງຫຼາ��ວ່າເວລາເລີ່ມຕົ້ນ OK button ຕົ�ລົງ Never ບ�່ເຄີ� At time of event ໃນເວລາເຫດ�ານ 15 minutes before 15 ນາທີ�່ອນ 30 minutes before 30 ນາທີ�່ອນ 1 hour before 1 ຊົ່ວໂມງ�່ອນ 1 day before 1 ມື້�່ອນ 2 days before 2 ມື້�່ອນ 1 week before 1 ອາທິດ�່ອນ On start day (9:00 AM) ໃນມື້ເລີ່ມຕົ້ນ (9:00 ຕອນເຊົ້າ) time(s) ຄັ້ງ Enter a name please �ະລຸນາໃສ່ຊື່ The name can not only contain whitespaces ຊື່ບ�່ສາມາດປະ�ອບດ້ວ�ຊ່ອງວ່າງເທົ່ານັ້ນ Type: ປະເພດ: Description: ລາ�ລະອຽດ: All Day: ຕະຫຼອດມື້: Starts: ເລີ່ມຕົ້ນ: Ends: ສິ້ນສຸດ: Remind Me: �ຈ້ງເຕືອນ: Repeat: ຊ້ຳ: End Repeat: ສິ້ນສຸດ�ານຊ້ຳ: Calendar account: ບັນຊີປະຕິທິນ: Calendar account ບັນຊີປະຕິທິນ Type ປະເພດ Description ລາ�ລະອຽດ All Day ຕະຫຼອດມື້ Time: ເວລາ: Time ເວລາ Solar ປະຕິທິນສຸລິ�ະຄະຕິ Lunar ປະຕິທິນຈັນທະຄະຕິ Starts ເລີ່ມຕົ້ນ Ends ສິ້ນສຸດ Remind Me �ຈ້ງເຕືອນ Repeat ຊ້ຳ Daily ທຸ�ມື້ Weekdays ວັນທຳ�ານ Weekly ທຸ�ອາທິດ Monthly ທຸ�ເດືອນ Yearly ທຸ�ປີ End Repeat ສິ້ນສຸດ�ານຊ້ຳ After ຫຼັງຈາ� On ໃນວັນທີ Cancel button �ົ�ເລີ� Save button ບັນທຶ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. ທຸ��ານເ�ີດຂຶ້ນຂອງເຫດ�ານທີ່ຊ້ຳ�ັນຕ້ອງມີສະຖານະຕະຫຼອດມື້ຄື�ັນ. Do you want to change all occurrences? ທ່ານຕ້ອງ�ານປ່ຽນ�ປງທຸ��ານເ�ີດຂຶ້ນບ�? Cancel button �ົ�ເລີ� Change All ປ່ຽນທັງ�ົດ You are changing the repeating rule of this event. ທ່ານ�ຳລັງປ່ຽນ�ົດ�ານຊ້ຳຂອງເຫດ�ານນີ້. You are deleting an event. ທ່ານ�ຳລັງລຶບເຫດ�ານ. Are you sure you want to delete this event? ທ່ານ�ນ່ໃຈບ�ວ່າຈະລຶບເຫດ�ານນີ້? Delete button ລຶບ Do you want to delete all occurrences of this event, or only the selected occurrence? ທ່ານຕ້ອງ�ານລຶບທຸ��ານເ�ີດຂຶ້ນຂອງເຫດ�ານນີ້ ຫຼື ເພີງ�ຕ່ອັນທີ່ເລືອ�? Delete All ລຶບທັງ�ົດ Delete Only This Event ລຶບເຫດ�ານນີ້ເທົ່ານັ້ນ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ທ່ານຕ້ອງ�ານລຶບເຫດ�ານນີ້�ລະທຸ��ານເ�ີດຂຶ້ນໃນອະນາຄົດ ຫຼື ເພີງ�ຕ່ອັນທີ່ເລືອ�? Delete All Future Events ລຶບເຫດ�ານທັງ�ົດໃນອະນາຄົດ You are changing a repeating event. ທ່ານ�ຳລັງປ່ຽນ�ປງເຫດ�ານທີ່ຊ້ຳ�ັນ. Do you want to change only this occurrence of the event, or all occurrences? ທ່ານຕ້ອງ�ານປ່ຽນ�ປງພຽງ�ຕ່�ານເ�ີດຂຶ້ນນີ້ ຫຼື ທຸ��ານເ�ີດຂຶ້ນ? All ທັງ�ົດ Only This Event ເຫດ�ານນີ້ເທົ່ານັ້ນ Do you want to change only this occurrence of the event, or this and all future occurrences? ທ່ານຕ້ອງ�ານປ່ຽນ�ປງພຽງ�ຕ່�ານເ�ີດຂຶ້ນນີ້ ຫຼື �ານເ�ີດຂຶ້ນນີ້�ລະທຸ��ານເ�ີດຂຶ້ນໃນອະນາຄົດ? All Future Events ເຫດ�ານທັງ�ົດໃນອະນາຄົດ You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ທ່ານໄດ້ເລືອ�ເດືອນອຸດທິ �ລະຈະໄດ້ຮັບ�ານ�ຈ້ງເຕືອນຕາມ�ົດຂອງປະຕິທິນຈັນທະຄະຕິ. OK button ຕົ�ລົງ CScheduleSearchDateItem Y ປີ M ເດືອນ D ວັນ CScheduleSearchItem Edit ��້ໄຂ Delete ລຶບ All Day ຕະຫຼອດມື້ CScheduleSearchView No search results ບ�່ມີຜົນ�ານຊອ�ຫາ CScheduleView ALL DAY ຕະຫຼອດມື້ CSettingDialog Sunday ວັນອາທິດ Monday ວັນຈັນ Use System Setting ໃຊ້�ານຕັ້ງຄ່າລະບົບ 24-hour clock ໂມງ 24 ຊົ່ວໂມງ 12-hour clock ໂມງ 12 ຊົ່ວໂມງ import ICS file ນຳເຂົ້າໄຟລ໌ ICS Manual ດ້ວ�ຕົນເອງ 15 mins 15 ນາທີ 30 mins 30 ນາທີ 1 hour 1 ຊົ່ວໂມງ 24 hours 24 ຊົ່ວໂມງ Sync Now ຊິງຄ໌ຕອນນີ້ Last sync ຊິງຄ໌ຄັ້ງຫຼ້າສຸດ Please go to the <a href='/'>Control Center</a> to change system settings �ະລຸນາໄປທີ່ <a href='/'>ສູນ�ານຄວບຄຸມ</a> ເພື່ອປ່ຽນ�ານຕັ້ງຄ່າລະບົບ CTimeEdit (%1 mins) (%1 ນາທີ) (%1 hour) (%1 ຊົ່ວໂມງ) (%1 hours) (%1 ຊົ່ວໂມງ) CTitleWidget Y ປີ M ເດືອນ W ອາທິດ D ວັນ Search events and festivals ຄົ້ນຫາເຫດ�ານ�ລະງານບຸນ CWeekWindow Week ອາທິດ Y ປີ CYearScheduleView All Day ຕະຫລອດມື້ No event ບ�່ມີເຫດ�ານ CYearWindow Y ປີ CalendarWindow Calendar ປະຕິທິນ Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ປະຕິທິນ�ມ່ນເຄື່ອງມືໃນ�ານເບິ່ງວັນທີ, �ລະ�ັງເປັນເຄື່ອງມືວາງ�ຜນປະຈຳວັນທີ່ສະຫລາດເພື່ອ�ຳນົດເວລາທຸ�ສິ່ງໃນຊີວິດ. Calendarmainwindow Calendar ປະຕິທິນ Manage ຈັດ�ານ Privacy Policy ນະໂ�ບາ�ຄວາມເປັນສ່ວນຕົວ Syncing... �ຳລັງຊິງຄ໌... Sync successful ຊິງຄ໌ສຳເລັດ Sync failed, please try later ຊິງຄ໌ລົ້ມເຫລວ, �ະລຸນາລອງໃ�່ພາ�ຫຼັງ CenterWidget All Day ຕະຫລອດມື້ DAccountDataBase Work ວຽ� Life ຊີວິດ Other ອື່ນໆ DAlarmManager Close button ປິດ One day before start ໜຶ່ງວັນ�່ອນເລີ່ມ Remind me tomorrow �ຈ້ງເຕືອນຂ້ອ�ມື້ອື່ນ Remind me later �ຈ້ງເຕືອນຂ້ອ�ພາ�ຫຼັງ 15 mins later 15 ນາທີພາ�ຫຼັງ 1 hour later 1 ຊົ່ວໂມງພາ�ຫຼັງ 4 hours later 4 ຊົ່ວໂມງພາ�ຫຼັງ Tomorrow ມື້ອື່ນ Schedule Reminder �ານ�ຈ້ງເຕືອນ�ຳນົດເວລາ %1 to %2 %1 ຫາ %2 Today ມື້ນີ້ DragInfoGraphicsView Edit ��້ໄຂ Delete ລຶບ New event ເຫດ�ານໃ�່ New Event ເຫດ�ານໃ�່ JobTypeListView export ສົ່ງອອ� import ICS file ນຳເຂົ້າໄຟລ໌ ICS You are deleting an event type. ທ່ານ�ຳລັງລຶບປະເພດເຫດ�ານ. All events under this type will be deleted and cannot be recovered. ເຫດ�ານທັງ�ົດໃນປະເພດນີ້ຈະຖື�ລຶບ�ລະບ�່ສາມາດ�ູ້ຄືນໄດ້. Cancel button �ົ�ເລີ� Delete button ລຶບ QObject Manage calendar ຈັດ�ານປະຕິທິນ Event types ປະເພດເຫດ�ານ Account settings �ານຕັ້ງຄ່າບັນຊີ Account ບັນຊີ Select items to be synced ເລືອ�ລາ��ານທີ່ຈະຊິງຄ໌ Events ເຫດ�ານ General settings �ານຕັ້ງຄ່າທົ່ວໄປ Sync interval ຊ່ວງເວລາຊິງຄ໌ Calendar account ບັນຊີປະຕິທິນ General ທົ່ວໄປ First day of week ວັນທຳອິດຂອງອາທິດ Time ເວລາ Return Today Return ມື້ນີ້ Return Today Today Return Today ມື້ນີ້ ScheduleTypeEditDlg New event type ປະເພດເຫດ�ານໃ�່ Edit event type ��້ໄຂປະເພດເຫດ�ານ Import ICS file ນຳເຂົ້າໄຟລ໌ ICS Name: ຊື່: Color: ສີ: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: ໄຟລ໌ <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button �ົ�ເລີ� Save button ບັນທຶ� The name can not only contain whitespaces ຊື່ບ�່ສາມາດມີພຽງ�ຕ່ຊ່ອງຫວ່າງໄດ້ Enter a name please �ະລຸນາປ້ອນຊື່ Shortcut Help ຊ່ວ�ເຫຼືອ Delete event ລຶບເຫດ�ານ Copy ຄັດລອ� Cut ຕັດ Paste ວາງ Delete ລຶບ Select all ເລືອ�ທັງ�ົດ SidebarCalendarWidget Y ປີ M ເດືອນ TimeJumpDialog Go button ໄປ UserloginWidget Sign In button ເຂົ້າສູ່ລະບົບ Sign Out button ອອ�ຈາ�ລະບົບ YearFrame Y ປີ today Today Today ມື້ນີ້ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_lt.ts000066400000000000000000001332361523260663500250710ustar00rootroot00000000000000 AccountItem Sync successful Sinhronizacija sėjo Network error Tinklo klaida Server exception Serverio klaida Storage full Talpinis pilnas AccountManager Local account Vietinė paskyra Event types Įvykių tipai CColorPickerWidget Color Spalva Cancel button Atsisakyti Save button Įrašyti CDayMonthView Monday Pirmadienis Tuesday Antradienis Wednesday Tre�iadienis Thursday Ketvirtadienis Friday Penktadienis Saturday Šeštadienis Sunday Sekmadienis CDayWindow Y M M m D d Lunar Mėnesinis CGraphicsView New Event Naujas įvykis CMonthScheduleNumItem %1 more %1 daugiau CMonthView New event Naujas įvykis New Event Naujas įvykis CMonthWindow Y M CMyScheduleView My Event Mano įvykis OK button Gerai Delete button Ištrinti Edit button Redaguoti CPushButton New event type Naujas įvykio tipas CScheduleDlg New Event Naujas įvykis Edit Event Redaguoti įvykį End time must be greater than start time Pabaigos laikas turi būti didesnis už pradžios laiką OK button Gerai Never Niekada At time of event Prie įvykio laiko 15 minutes before 15 minu�ių prieš 30 minutes before 30 minu�ių prieš 1 hour before 1 valandą prieš 1 day before 1 dieną prieš 2 days before 2 dienas prieš 1 week before 1 savaitę prieš On start day (9:00 AM) Pradžios dieną (9:00 AM) time(s) laikas(ai) Enter a name please Įveskite vardą The name can not only contain whitespaces Vardas negali būti sudarytas tik iš tarpu Type: Tipas: Description: Aprašas: All Day: Visą dieną: Starts: Prasideda: Ends: Baigiasi: Remind Me: Priminimai: Repeat: Pakartoti: End Repeat: Baigti pakartoti: Calendar account: Kalendoriaus paskyra: Calendar account Kalendoriaus paskyra Type Tipas Description Aprašas All Day Visą dieną Time: Laikas: Time Laikas Solar Saulės Lunar Mėnesinė Starts Prasideda Ends Baigiasi Remind Me Primink man Repeat Pakartokite Daily Kiekvieną dieną Weekdays Perkėlimo dienas Weekly Savaitės Monthly Mėnesio Yearly Metų End Repeat Baigti kartojimą After Po On Įjungta Cancel button Atsisakyti Save button Įrašyti CScheduleOperation All occurrences of a repeating event must have the same all-day status. Visos pasikartojan�ios įvykio klausimai turi būti taisyklingos visų dienų būklės. Do you want to change all occurrences? Ar norite pakeist visus įvykius? Cancel button Atsisakyti Change All Pakeisti visus You are changing the repeating rule of this event. Jūs kei�iate šio įvykio pasikartojamą taisyklę. You are deleting an event. Jūs šalinate įvykį. Are you sure you want to delete this event? Ar tikrai norite ištrinti šį įvykį? Delete button Ištrinti Do you want to delete all occurrences of this event, or only the selected occurrence? Ar norite pašalinti visus šio įvykio įvykius, ar tik pasirinktą įvykį? Delete All Pašalinti visus Delete Only This Event Pašalinti tik šį įvykį Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ar norite pašalinti šį įvykį ir visus ateities įvykius, ar tik pasirinktą įvykį? Delete All Future Events Pašalinti visus ateities įvykius You are changing a repeating event. Jūs kei�iate pasikartojantį įvykį. Do you want to change only this occurrence of the event, or all occurrences? Ar norite pakeisti tik šį įvykio klausimą, ar visus įvykius? All Visi Only This Event Tik šis įvykis Do you want to change only this occurrence of the event, or this and all future occurrences? Ar norite pakeisti tik šį įvykio klausimą, ar šį ir visus ateities įvykius? All Future Events Visi ateities įvykiai You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Jūs pasirinkote kelionio mėnesį, ir bus priminta pagal mėnesinės kalendoriaus taisykles. OK button Gerai CScheduleSearchDateItem Y M M m D d CScheduleSearchItem Edit Redaguoti Delete Ištrinti All Day Visa diena CScheduleSearchView No search results Paieškos rezultatų nėra CScheduleView ALL DAY VISĄ DIENĄ CSettingDialog Sunday Sekmadienis Monday Pirmadienis Use System Setting Naudoti sistemos nustatymus 24-hour clock 24 valandų pievelė 12-hour clock 12 valandų pievelė import ICS file importuoti ICS failą Manual Rankinis 15 mins 15 minu�ių 30 mins 30 minu�ių 1 hour 1 valanda 24 hours 24 valandos Sync Now Synchronizuoti dabar Last sync Paskutinis sinchronizavimas Please go to the Control Center to change system settings Pereikite į Valdymo centras, kad pakeistumėte sistemos nustatymus CTimeEdit (%1 mins) (%1 minu�ių) (%1 hour) (%1 valandą) (%1 hours) (%1 valandų) CTitleWidget Y M M m W W D d Search events and festivals Paieška įvykių ir šventės CWeekWindow Week Savaitė Y M CYearScheduleView All Day Visą dieną No event Nėra įvykio CYearWindow Y M CalendarWindow Calendar Kalendorius Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendorius yra įrankis datos peržiūrai, taip pat inteligentiškas kasdienis planavimo įrankis, skirtas planuoti viską gyvenime. Calendarmainwindow Calendar Kalendorius Manage Valdyti Privacy Policy Privatumo politika Syncing... Sinchronizuojama... Sync successful Sinchronizavimas sėkmingas Sync failed, please try later Sinchronizavimas nepavyko, bandykite vėliau CenterWidget All Day Visą dieną DAccountDataBase Work Darbas Life Gyvenimas Other Kita DAlarmManager Close button Užverti One day before start Vieną dieną prieš įvykį Remind me tomorrow Priminti rytoj Remind me later Priminti vėliau 15 mins later 15 minu�ių vėliau 1 hour later 1 valandą vėliau 4 hours later 4 valandų vėliau Tomorrow Rytojus Schedule Reminder Planuoti priminimą %1 to %2 %1 iki %2 Today Šiandien DragInfoGraphicsView Edit Redaguoti Delete Ištrinti New event Naujas įvykis New Event Naujas įvykis JobTypeListView export eksporavimas import ICS file importuoti ICS failą You are deleting an event type. Jūs pašalinate įvykio tipą. All events under this type will be deleted and cannot be recovered. Visi įvykiai šiame tipo požyme bus pašalinti ir negalės būti atkurti. Cancel button Atsisakyti Delete button Ištrinti QObject Manage calendar Tvarkyti kalendorių Event types Įvykio tipai Account settings Paskyros nustatymai Account Paskyra Select items to be synced Pasirinkite elementus, kurie bus sinchronizuoti Events Įvykiai General settings Bendrai nustatymai Sync interval Sinchronizavimo intervalas Calendar account Kalendoriaus paskyra General Bendra First day of week Savaitės pirmasis diena Time Laikas Return Today Return Šiandien Return Today Today Return Today Šiandien ScheduleTypeEditDlg New event type Naujas įvykio tipas Edit event type Redaguoti įvykio tipą Import ICS file Importuoti ICS failą Name: Pavadinimas: Color: Spalva: ICS File: ICS failas: Cancel button Atsisakyti Save button Įrašyti The name can not only contain whitespaces Pavadinimas negali tikrai sudaryti iš tarstų Enter a name please Įveskite pavadinimą, prašom Shortcut Help Žinynas Delete event Ištrinti įvykį Copy Kopijuoti Cut Iškirpti Paste Įdėti Delete Ištrinti Select all Žymėti viską SidebarCalendarWidget Y M M m TimeJumpDialog Go button Eiti UserloginWidget Sign In button Prisijungti Sign Out button Atsijungti YearFrame Y M today Today Today Šiandien linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_lv.ts000066400000000000000000001327501523260663500250730ustar00rootroot00000000000000 AccountItem Sync successful Sinhēs izdevies Network error Tīkla kļūda Server exception Servera izņēmums Storage full Skrūvīte pilna AccountManager Local account Vietēj� konta Event types Notikumu veidi CColorPickerWidget Color Kr�sa Cancel button Atcelt Save button Saglab�t CDayMonthView Monday Pirmdiena Tuesday Otrdiena Wednesday Trešdiena Thursday Ceturtdiena Friday Piektdiena Saturday Sestdiena Sunday Svētdiena CDayWindow Y G M M D D Lunar Mēness CGraphicsView New Event Jauns notikums CMonthScheduleNumItem %1 more %1 vair�k CMonthView New event Jauns notikums New Event Jauns notikums CMonthWindow Y G CMyScheduleView My Event Mans notikums OK button Labi Delete button Dzēst Edit button Rediģēt CPushButton New event type Jauns notikumu veids CScheduleDlg New Event Jauns notikums Edit Event Rediģēt notikumu End time must be greater than start time Beigu laikam ir j�būt vēl�kam k� s�kuma laikam OK button Labi Never Nekad At time of event Notikuma laik� 15 minutes before 15 minūtes pirms 30 minutes before 30 minūtes pirms 1 hour before 1 Stundu pirms 1 day before 1 Dienu pirms 2 days before 2 Dienas pirms 1 week before 1 Nedēļu pirms On start day (9:00 AM) Dienas s�kum� (9:00) time(s) reize(s) Enter a name please Lūdzu, ievadi v�rdu The name can not only contain whitespaces V�rds nevar saturēt tikai tukšumus Type: Veids: Description: Apraksts: All Day: Visu dienu: Starts: S�kas: Ends: Beidzas: Remind Me: Atg�din�t: Repeat: Atk�rtot: End Repeat: Beigt atk�rtošanu: Calendar account: Kalend�ra konta: Calendar account Kalend�ra konta Type Veids Description Apraksts All Day Visu dienu Time: Laiks: Time Laiks Solar Saule Lunar Mēness Starts S�kas Ends Beidzas Remind Me Atg�din�t Repeat Atk�rtot Daily Katru dienu Weekdays Darba dien�s Weekly Katru nedēļu Monthly Katru mēnesi Yearly Katru gadu End Repeat Beigt atk�rtošanu After Pēc On Līdz Cancel button Atcelt Save button Saglab�t CScheduleOperation All occurrences of a repeating event must have the same all-day status. Visiem periodiska notikuma atk�rtojumiem ir j�būt identiskam visas dienas statusam Do you want to change all occurrences? Vai vēlaties mainīt visus periodiskos atk�rtojumus? Cancel button Atcelt Change All Mainīt visus You are changing the repeating rule of this event. Jūs main�t notikuma periodiskas atk�rtošan�s iestatījumus You are deleting an event. Jūs dzēšat notikumu Are you sure you want to delete this event? Vai esat drošs, ka vēlaties dzēst šo notikumu? Delete button Dzēst Do you want to delete all occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst visus periodiskos notikumus vai tikai atlasīto notikumu? Delete All Dzēst visu Delete Only This Event Dzēst Tikai Šo Notikumu Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Jūs vēlaties dzēst šo un turpm�kos notikums vai tikai šo notikumu? Delete All Future Events Dzēst visus n�kotnes notikums You are changing a repeating event. Jūs main�t periodisku notikumu. Do you want to change only this occurrence of the event, or all occurrences? Jūs vēlaties mainīt tikai šo notikumu vai visus periodiskos notikumus? All Visi Only This Event Tikai Šo Notikumu Do you want to change only this occurrence of the event, or this and all future occurrences? Jūs vēlaties mainīt tikai šo notikumu vai šo un visus turpm�kos notikumus? All Future Events Visus Turpm�kos Notikumus You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Jūs esat izvēlējies p�rslēgšanas mēnesi, un jūs tiksiet atg�din�ts saskaņ� ar mēness kalend�ra noteikumiem. OK button Labi CScheduleSearchDateItem Y G M M D D CScheduleSearchItem Edit Rediģēt Delete Dzēst All Day Visu dienu CScheduleSearchView No search results Nav atrasts neviens rezult�ts CScheduleView ALL DAY VISU DIENU CSettingDialog Sunday Svētdiena Monday Pirmdiena Use System Setting Izvēlēties sistēmas iestatījumus 24-hour clock 24 stundu pulkstenis 12-hour clock 12 stundu pulkstenis import ICS file Importēt ICS failu Manual Manu�li 15 mins 15 minūtes 30 mins 30 minūtes 1 hour 1 stunda 24 hours 24 stundas Sync Now Sinhēs tagad Last sync Pēdēj� sinhēs Please go to the Control Center to change system settings Lūdzu, aiziet uz Kontrolcentru, lai mainītu sistēmas iestatījumus CTimeEdit (%1 mins) (%1 minūtes) (%1 hour) (%1 stundas) (%1 hours) (%1 stundas) CTitleWidget Y G M M W N D D Search events and festivals Meklēt notikumus un svētkus CWeekWindow Week Nedēļa Y G CYearScheduleView All Day Visu dienu No event Nav notikumu CYearWindow Y G CalendarWindow Calendar Kalend�rs Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalend�rs ir palīgs ikdienas dzīvē kas palīdz sak�rtot tavu laiku. Calendarmainwindow Calendar Kalend�rs Manage P�rvaldīt Privacy Policy Priv�cijas politika Syncing... Sinhroniz�cija... Sync successful Sinhroniz�cija veiksmīga Sync failed, please try later Sinhroniz�cija neizdev�s, lūdzu, mēģiniet vēl�k CenterWidget All Day Visu dienu DAccountDataBase Work Darbs Life Dzīve Other Cits DAlarmManager Close button Aizvērt One day before start Viena diena pirms s�kuma Remind me tomorrow Atg�din�jums rīt Remind me later Atg�din�jums vēl�k 15 mins later 15 minūtes vēl�k 1 hour later 1 stunda vēl�k 4 hours later 4 stundas vēl�k Tomorrow Rīt Schedule Reminder Pl�not atg�din�jumu %1 to %2 '%1 līdz %2' Today Šodiena DragInfoGraphicsView Edit Rediģēt Delete Dzēst New event Jauns notikums New Event Jauns notikums JobTypeListView export eksportēt import ICS file importēt ICS failu You are deleting an event type. Jūs dzēs�t notikuma veidu. All events under this type will be deleted and cannot be recovered. Visi notikumi šaj� veid� tiks dzēsti un nevarēs tikt atgūti. Cancel button Atcelt Delete button Dzēst QObject Manage calendar P�rvaldīt kalend�ru Event types Notikuma veidi Account settings Pieteikuma iestatījumi Account Pieteikums Select items to be synced Izvēlēties elementus, kas j�sinhronizē Events Notikumi General settings P�raš�jumi Sync interval Sinhroniz�cijas interv�ls Calendar account Kalendara konts General Visp�rējais First day of week Nedēļas pirm� diena Time Laiks Return Today Return Šodiena Return Today Today Return Today Šodiena ScheduleTypeEditDlg New event type Jauns notikuma veids Edit event type Rediģēt notikuma veidu Import ICS file Importēt ICS failu Name: Nosaukums: Color: Kr�sa: ICS File: ICS fails: Cancel button Atcelt Save button Saglab�t The name can not only contain whitespaces Nosaukums nevar saturēt tikai tukšumus Enter a name please Lūdzu, ievadiet nosaukumu Shortcut Help Palīdzība Delete event Dzēst notikumu Copy Kopēt Cut Izgriezt Paste Ielīmēt Delete Dzēst Select all Izvēlēties visus SidebarCalendarWidget Y G M M TimeJumpDialog Go button Iet UserloginWidget Sign In button Pieteikties Sign Out button Iziet YearFrame Y G today Today Today Šodiena linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ml.ts000066400000000000000000001506231523260663500250610ustar00rootroot00000000000000 AccountItem Sync successful സിൻക� വിജയിച�ച� Network error ജാലിന�� പരിശോധന Server exception സർവർ പരിശോധന Storage full സ�റ�റോറേജ� പൂർണമായി AccountManager Local account ഔദ�യോഗിക അക�കൗണ�ട� Event types ഇവന�റ� ടൈപ�പ�കൾ CColorPickerWidget Color കളർ Cancel button റദ�ദാക�ക� Save button സേവ� ചെയ�യ� CDayMonthView Monday വ�യാഴം Tuesday വെള�ളിയാഴ�‌ച Wednesday ബ�ധന�� Thursday ചൊവ�വാഴ�‌ച Friday വ�യാഴം Saturday ശനിവാരം Sunday രാവിലെ CDayWindow Y യ M എം D ഡി Lunar ചിന�താ മാസം CGraphicsView New Event പ�തിയ ഇവന�റ� CMonthScheduleNumItem %1 more %1 കൂട�തൽ CMonthView New event പ�തിയ ഇവന�റ� New Event പ�തിയ ഇവന�റ� CMonthWindow Y യ CMyScheduleView My Event എന�റെ ഇവന�റ� OK button ഓക�കെ Delete button ഡിലീറ�റ� Edit button എഡിറ�റ� CPushButton New event type പ�തിയ ഇവന�റ� ടൈപ�പ� CScheduleDlg New Event പ�തിയ ക�രമീകരണം Edit Event പരിഷ�കരിക�ക�ക End time must be greater than start time അവസാന സമയം ആരംഭ സമയത�തിനേക�കാൾ കൂടിയതായിരിക�കണം OK button സമ�മതിക�ക�ക Never ഇത�വരെയ�ം At time of event ക�രമീകരണത�തിന�റെ സമയത�ത� 15 minutes before 15 മിനിറ�റ� മ�മ�പ� 30 minutes before 30 മിനിറ�റ� മ�മ�പ� 1 hour before 1 മണിക�കൂർ മ�മ�പ� 1 day before 1 ദിവസം മ�മ�പ� 2 days before 2 ദിവസം മ�മ�പ� 1 week before 1 ആഴ�ച മ�മ�പ� On start day (9:00 AM) ആരംഭ ദിവസത�തിന� (9:00 അമേരിക�കൻ സമയം) time(s) സമയം(കൾ) Enter a name please പേര� നൽക�ക The name can not only contain whitespaces പേര� മാത�രം വാക�ക�കൾ ഉൾപ�പെട�ത�താൻ കഴിയില�ല Type: പരിഭാഷാ: Description: വിവരം: All Day: എല�ലാ ദിവസത�തിന�: Starts: ആരംഭം: Ends: അവസാനം: Remind Me: എന�നെ ഓർമ�മിപ�പിക�ക�ക: Repeat: പ�നർപ�രവർത�തിപ�പിക�ക�ക: End Repeat: പ�നർപ�രവർത�തനം അവസാനിപ�പിക�ക�ക: Calendar account: ക�യാൾണ�ടർ അക�കൌണ�ട�: Calendar account ക�യാൾണ�ടർ അക�കൌണ�ട� Type പരിഭാഷാ Description വിവരം All Day എല�ലാ ദിവസത�തിന� Time: സമയം: Time സമയം Solar സോലർ Lunar ലൂനർ Starts ആരംഭം Ends അവസാനം Remind Me എന�നെ ഓർമ�മിക�കണം Repeat പ�നർവാചകം Daily ഒര� ദിവസം Weekdays ആഴ�ചകൾ Weekly ആഴ�ചയിൽ Monthly മാസം Yearly വർഷത�തിൽ End Repeat പ�നർവാചകം അവസാനിക�ക�ക After അതിന�ശേഷം On പ�റകിൽ Cancel button റദ�ദാക�ക�ക Save button സൂക�ഷിക�ക�ക CScheduleOperation All occurrences of a repeating event must have the same all-day status. പ�നർവാചക സംഭവങ�ങള�ടെ എല�ലാ സംഭവങ�ങൾക�ക�ം ഒരേ സമയം പ�റകിൽ ആയിരിക�കണം. Do you want to change all occurrences? എല�ലാ സംഭവങ�ങള�ം മാറ�റാന�ം ആഗ�രഹിക�ക�ന�ന� കൂട�ടായിരിക�ക�ന�ന�? Cancel button റദ�ദാക�ക�ക Change All എല�ലാവയ�ം മാറ�റ�ക You are changing the repeating rule of this event. നിങ�ങൾ ഈ സംഭവത�തിന�റെ പ�നർവാചക നിയമം മാറ�റ�കയാണ�. You are deleting an event. നിങ�ങൾ ഒര� സംഭവം മാറ�റ�കയാണ�. Are you sure you want to delete this event? നിങ�ങൾ ഈ സംഭവം മാറ�റ�കയാണോ? Delete button മാറ�റ�ക Do you want to delete all occurrences of this event, or only the selected occurrence? നിങ�ങൾ ഈ സംഭവം ആയിരിക�ക�ന�നത� പ�റകിൽ പ�നർവാചക സംഭവങ�ങൾ എല�ലാവയ�ം മാറ�റ�കയാണോ, അല�ലെങ�കിൽ തിരഞ�ഞെട�ത�ത സംഭവം മാത�രം മാറ�റ�കയാണോ? Delete All എല�ലാ ഭവിഷ�യത�തിലെ സംഭവങ�ങള�ം മാറ�റ�ക Delete Only This Event ഇവിടെ പ�രത�യേകം വെട�ടിനീക�ക�ക Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ഇവിടെ പ�രത�യേകം ഈ സംഭവവ�ം അതിന� ശേഷം എല�ലാ പ�രത�യേകതകള�ം നീക�കം ചെയ�യാൻ ആഗ�രഹിക�ക�ന�ന� അല�ലെങ�കിൽ മാത�രം തിരഞ�ഞെട�ത�ത പ�രത�യേകത നീക�കം ചെയ�യാൻ ആഗ�രഹിക�ക�ന�ന�? Delete All Future Events ഇതിന� ശേഷം എല�ലാ സംഭവങ�ങള�ം നീക�കം ചെയ�യ�ക You are changing a repeating event. നിങ�ങൾ ഒര� പ�നരാവർത�തന ക�രമീകരണം മാറ�റ�കയാണ�. Do you want to change only this occurrence of the event, or all occurrences? നിങ�ങൾ ക�രമീകരണം മാറ�റ�കയാണെങ�കിൽ, ഇത� മാത�രം അല�ലെങ�കിൽ എല�ലാ സംഭവങ�ങള�ം മാറ�റാന�ം ആഗ�രഹിക�ക�ന�ന�വെയ�യോ? All എല�ലാ Only This Event ഇത� മാത�രം ക�രമീകരണം Do you want to change only this occurrence of the event, or this and all future occurrences? നിങ�ങൾ ക�രമീകരണം മാറ�റ�കയാണെങ�കിൽ, ഇത� മാത�രം അല�ലെങ�കിൽ ഈ ആൻഡ� എല�ലാ ഭവിഷ�യത�തിന�റെ സംഭവങ�ങള�ം മാറ�റാന�ം ആഗ�രഹിക�ക�ന�ന�വെയ�യോ? All Future Events എല�ലാ ഭവിഷ�യത�തിന�റെ ക�രമീകരണങ�ങള�ം You have selected a leap month, and will be reminded according to the rules of the lunar calendar. നിങ�ങൾ ഒര� പ�രത�യേക മാസം തിരഞ�ഞെട�ത�തിരിക�ക�ന�ന�, മാസം പ�രകാരം മാസം പ�രകാരമ�ള�ള നിയംങ�ങൾക�കന�സരിച�ച� നിങ�ങളെ ഓർമ�മിപ�പിക�ക�ം. OK button ഒക� CScheduleSearchDateItem Y നൈ M മാ D ഡി CScheduleSearchItem Edit തിര�ത�ത�ക Delete നീക�കം All Day എല�ലാ ദിവസവ�ം CScheduleSearchView No search results തിരയൽ ഫലങ�ങൾ ഇല�ല CScheduleView ALL DAY എല�ലാ ദിവസവ�ം CSettingDialog Sunday ഞായറാഴ�ച Monday തിങ�കളാഴ�ച Use System Setting സിസ�റ�റം സെറ�റിംഗ� ഉപയോഗിക�ക�ക 24-hour clock 24 മണിക�കൂർ ക�ലോക�ക� 12-hour clock 12 മണിക�കൂർ ക�ലോക�ക� import ICS file �സിഎസ� ഫയൽ ഇർപ�പോർട�ട� ചെയ�യ�ക Manual മാന�വൽ 15 mins 15 മിനിറ�റ� 30 mins 30 മിനിറ�റ� 1 hour 1 മ�ഴ�വൻ മണിക�കൂർ 24 hours 24 മണിക�കൂർ Sync Now നിലവിലെ സിൻക� ചെയ�യ�ക Last sync അവസാന സിൻക� Please go to the Control Center to change system settings സിസ�റ�റം സെറ�റിംഗ� മാറ�റാൻ കൺട�രോൾ സെന�റർ എന�ന സ�ഥലത�ത� പോക�ക CTimeEdit (%1 mins) (%1 മിനിറ�റ�) (%1 hour) (%1 മണിക�കൂർ) (%1 hours) (%1 മണിക�കൂർ) CTitleWidget Y ഒന�ന� M മാസം W ആഴ�ച D ദിവസം Search events and festivals ഇ벤�റ� ആൻഡ� ഫെസ�റ�റിവൽ തിരയ�ക CWeekWindow Week ആഴ�ച Y ഒന�ന� CYearScheduleView All Day എല�ലാ ദിവസവ�ം No event ഇവന�റ� ഇല�ല CYearWindow Y ഒന�ന� CalendarWindow Calendar കലന�ദർ Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. കലന�ദർ തീയതികൾ കാണാൻ ഉപയോഗിക�ക�ന�ന ഒര� സാധനമാണ�, അതേസമയം ജീവിതത�തിലെ എല�ലാ കാര�യങ�ങള�ം പരിപാടിക�കാന�പയോഗിക�ക�ന�ന ഒര� മാതൃകാ ദിവസ പ�ലാനർ ആണ�. Calendarmainwindow Calendar കലന�ദർ Manage നിർത�ത�ക Privacy Policy സ�രക�ഷാ നയം Syncing... സിൻക� ചെയ�യ�ന�ന�... Sync successful സിൻക� വിജയിച�ച� Sync failed, please try later സിൻക� വിജയിച�ചില�ല, പിന�നീട� ശ�രമിക�ക�ക CenterWidget All Day എല�ലാ ദിവസവ�ം DAccountDataBase Work പ�രവർത�തനം Life ജീവിതം Other മറ�റത� DAlarmManager Close button അടയ�ക�ക�ക One day before start ആരംഭത�തിന� ഒര� ദിവസം മ�മ�പ� Remind me tomorrow എന�നെ വേണ�ടത� പിന�നെ ഓർമ�മിക�കണം Remind me later എന�നെ പിന�നെ ഓർമ�മിക�കണം 15 mins later 15 മിനിറ�റ� പിന�നെ 1 hour later ഒര� മണിക�കൂർ പിന�നെ 4 hours later നാല� മണിക�കൂർ പിന�നെ Tomorrow മാത�രം Schedule Reminder സജീവ ഓർമ�മ %1 to %2 '%1 ന�ം %2 ന�ം ഇടയിലാണ�' Today നാളെ DragInfoGraphicsView Edit തിര�ത�ത�ക Delete നീക�കം New event പ�തിയ സംഭവം New Event പ�തിയ സംഭവം JobTypeListView export ഔട�ട� പോർട�ട� import ICS file ഇക�സ� ഫയൽ ഇമ�പോർട�ട� ചെയ�യ�ക You are deleting an event type. നിങ�ങൾ ഒര� സംഭവ തരം നീക�കം ചെയ�യ�കയാണ�. All events under this type will be deleted and cannot be recovered. ഇത� തരത�തില�ള�ള എല�ലാ സംഭവങ�ങള�ം നീക�കം ചെയ�യ�കയ�ം അവ പ�നരധിവേശനം ചെയ�യാനാവാതായിരിക�ക�ം. Cancel button റദ�ദാക�ക�ക Delete button നീക�കം QObject Manage calendar കലെൻ�ഡർ സംഭാവന Event types സംഭവ തരങ�ങൾ Account settings അക�കൗണ�ട� സെറ�റിംഗ�സ� Account അക�കൗണ�ട� Select items to be synced സിൻക� ചെയ�യേണ�ട ഇനങ�ങൾ തിരഞ�ഞെട�ക�ക�ക Events സംഭവങ�ങൾ General settings ആന�കൂലന സെറ�റിംഗ�സ� Sync interval സിൻക� ഇന�റർവൽ Calendar account കലെൻ�ഡർ അക�കൗണ�ട� General ആന�കൂലന First day of week ആഴ�ചയ�ടെ ആദ�യ ദിവസം Time സമയം Return Today Return നാളെ Return Today Today Return Today നാളെ ScheduleTypeEditDlg New event type പ�തിയ സംഭവ തരം Edit event type സംഭവ തരം എഡിറ�റ� ചെയ�യ�ക Import ICS file ICS ഫയൽ ഇപ�പ�റത�തേക�ക� എണ�ണിക�ക�ക Name: പേര�: Color: നിറം: ICS File: ICS ഫയൽ: Cancel button റദ�ദാക�ക�ക Save button സേവ� ചെയ�യ�ക The name can not only contain whitespaces പേര� മാത�രം വായ� അടങ�ങാൻ പ�റത�ത�ള�ളത� കഴിയാത�തത� Enter a name please പേര� ഇട�ക Shortcut Help സഹായം Delete event സംഭവം നീക�കം ചെയ�യ�ക Copy കോപ�പി ചെയ�യ�ക Cut കട�ട� ചെയ�യ�ക Paste പേസ�റ�റ� ചെയ�യ�ക Delete നീക�കം ചെയ�യ�ക Select all എല�ലാവര�ം തിരഞ�ഞെട�ക�ക�ക SidebarCalendarWidget Y ജി M മാർച�ച� TimeJumpDialog Go button പോക�ക UserloginWidget Sign In button സൈൻ ഇൻ ചെയ�യ�ക Sign Out button സൈൻ ഔട�ട� ചെയ�യ�ക YearFrame Y ജി today Today Today നാളെ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_mn.ts000066400000000000000000001377601523260663500250720ustar00rootroot00000000000000 AccountItem Sync successful Синхронизаци� амжилттай Network error Х�р�гл�гчийн алдаа Server exception Серверийн алдаа Storage full Хадгалах х�мж�� бүр�н AccountManager Local account Хувийн х�р�гл�гч Event types Үйлдлийн төрлүүд CColorPickerWidget Color Хөнгөн өнгө Cancel button Цуцлах Save button Хадгалах CDayMonthView Monday Даваа Tuesday М�гмар Wednesday Лхагва Thursday Пүгд� Friday Баа�ан Saturday Дархан Sunday ��м CDayWindow Y Өдөр M Сар D Өдөр Lunar Лунар CGraphicsView New Event ��м�гд��н үйлд�л CMonthScheduleNumItem %1 more %1-ийн д��д CMonthView New event ��м�гд��н үйлд�л New Event ��м�гд��н үйлд�л CMonthWindow Y Өдөр CMyScheduleView My Event Биийн үйлд�л OK button Хүл��н зөвшөөрөх Delete button У�тгах Edit button За�ах CPushButton New event type ��м�гд��н үйлдлийн төрөл CScheduleDlg New Event ���лт�� хийх Edit Event За�ах End time must be greater than start time Хугацааны дуу�ах өдөр нь �хл�х өдөрөө� их байх шаардлагатай OK button Хү��� Never Хийхгүй At time of event Хүр�х үе�р 15 minutes before 15 минутын өмнө 30 minutes before 30 минутын өмнө 1 hour before 1 цагийн өмнө 1 day before 1 өдөрийн өмнө 2 days before 2 өдөрийн өмнө 1 week before 1 �арын өмнө On start day (9:00 AM) Эхл�х өдрөө� (9:00-д) time(s) хугацаа(н) Enter a name please ��р�� оруулна уу The name can not only contain whitespaces ��р нь зөвхөн т�мд�гт�й байх боломжгүй Type: Төрөл: Description: Тайлбар: All Day: Эер�г өдөр: Starts: Эхл�х: Ends: Дуу�ах: Remind Me: �амайг �анах: Repeat: Дахин хийх: End Repeat: Дахин хийхийг дуу�гах: Calendar account: Календарын х�р�гл�гчийн аккаунт: Calendar account Календарын х�р�гл�гчийн аккаунт Type Төрөл Description Тайлбар All Day Эер�г өдөр Time: Хугацаа: Time Цаг Solar Хөл Lunar Сар Starts Хайрцаг Ends Дуу�ах Remind Me Төлөөлөх Repeat Хүр��л�н Daily Өдөр Weekdays Хичн�� өдөр Weekly Хоног Monthly Сар Yearly Жил End Repeat Хүр��л�н дуу�ах After Хүр��л�н дуу��ан дараа On Он Cancel button Цуцлах Save button Хадгалах CScheduleOperation All occurrences of a repeating event must have the same all-day status. Хүр��л�н үйл �вдлын бүх х�р�г��л нь ижил өдрөөр х�р�гл�гд�н� Do you want to change all occurrences? Бүх х�р�г��л нь өөрчлөх үү? Cancel button Цуцлах Change All Бүх өөрчлөх You are changing the repeating rule of this event. Та �н� үйл �вдлын хүр��л�н дүр�мийг өөрчлөж байна. You are deleting an event. Та үйл �вдлыг у�тгаж байна. Are you sure you want to delete this event? Та �н� үйл �вдлыг у�тгахдаа итг�лт�й байна уу? Delete button У�тгах Do you want to delete all occurrences of this event, or only the selected occurrence? Та �н� үйл �вдлын бүх х�р�г��л нь у�тгах уу, ��в�л �онго�он х�р�г��л нь у�тгах уу? Delete All Бүх у�тгах Delete Only This Event Харин �н� нь у�тгах Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Та �н� үйл �вдлын дараа бүх х�р�г��л нь у�тгах уу, ��в�л �онго�он х�р�г��л нь у�тгах уу? Delete All Future Events Бүх дараа бүх үйл �вдлыг у�тгах You are changing a repeating event. Х�д х�д болгох үйлдлийг өөрчлөхөөр байна. Do you want to change only this occurrence of the event, or all occurrences? Х�д х�д болгох үйлдлийн үн�н зөөн үзүүл�лд өөрчлөхөөр байна ���х, ��в�л бүх үзүүл�лд өөрчлөхөөр байна? All Бүх Only This Event Хүнд хүнд үйлдлийг өөрчлөх Do you want to change only this occurrence of the event, or this and all future occurrences? Х�д х�д болгох үйлдлийн үн�н зөөн үзүүл�лд өөрчлөхөөр байна ���х, ��в�л үн�н зөөн үзүүл�л болон бүх дараагийн үзүүл�лд өөрчлөхөөр байна? All Future Events Бүх Дараагийн Үйлдлүүд You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Хүнд хүнд �арыг �онго�он бол, �арын төрөлдөөнөө� хамааран та баримтлах болно. OK button Хүн CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit За�ах Delete У�тгах All Day Бүх өдөр CScheduleSearchView No search results Хайлтанд олд�он үр дүнгүй CScheduleView ALL DAY БҮХ ӨДӨР CSettingDialog Sunday ��м Monday Даваа Use System Setting Си�темийн баримтлалыг ашиглах 24-hour clock 24 цагийн цаглал 12-hour clock 12 цагийн цаглал import ICS file ICS файлыг импортлох Manual Хөтөлбөр 15 mins 15 минут 30 mins 30 минут 1 hour 1 цаг 24 hours 24 цаг Sync Now Хүнд хүнд �инхрончлох Last sync Өмнөх �инхрончлол Please go to the Control Center to change system settings Си�темийн баримтлалыг өөрчлөхийн тулд хөтөлбөр ц�г рүү очоод үз��р�й CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 цаг) (%1 hours) (%1 цаг) CTitleWidget Y Өдөр M Сар W Хоног D ��г Search events and festivals Үйл �вдлын болон фе�тивалийг хайх CWeekWindow Week Хоног Y Өдөр CYearScheduleView All Day Өдөрийн дотор No event Үйл �вдаггүй CYearWindow Y Өдөр CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар нь дүр�м, үйл �вдлыг үз�х болон өөрийн амьдралд бүх зүйлүүдийг ха�жих хү�н�гт юм. Calendarmainwindow Calendar Календар Manage Үзүүл�х Privacy Policy �ийтл�л Syncing... Синхронлох... Sync successful Синхронлох амжилттай Sync failed, please try later Синхронлох үйлд�л амжилтгүй, дараа дахин оролдоно уу CenterWidget All Day Өдөрийн дотор DAccountDataBase Work �жил Life �мьдрал Other Бу�ад DAlarmManager Close button Хаах One day before start Эхл�х��� өдөр өмнө Remind me tomorrow Өдөрт�й болгох Remind me later Дараа болгох 15 mins later 15 минутын дараа 1 hour later 1 �арын дараа 4 hours later 4 �арын дараа Tomorrow �ийт Schedule Reminder �жилын хуваарь %1 to %2 '%1-��� %2' хүрт�л Today Өнөөдөр DragInfoGraphicsView Edit За�ах Delete У�тгах New event Шин� ажил New Event Шин� �жил JobTypeListView export �к�порт import ICS file ICS файл авах You are deleting an event type. Та ажилын төрлөө у�тгаж байна. All events under this type will be deleted and cannot be recovered. Эн� төрөлд хамаар�ан бүх ажилууд у�тгагдаж, үүрг��� ��рг��х боломжгүй байна. Cancel button Цуцлах Delete button У�тгах QObject Manage calendar Хүүх�д хуваарь Event types �жилын төрлүүд Account settings Х�р�гл�гчийн ��тг�гд�л Account Х�р�гл�гч Select items to be synced Хүүх�д хуваарьтай холбох бүт�ц�үүдийг �онгоно уу Events �жил General settings Холбооны ��тг�гд�л Sync interval Холбооны хугацаа Calendar account Хүүх�д хуваарь General Холбооны First day of week Хоногийн �х�нд Time Хугацаа Return Today Return Өнөөдөр Return Today Today Return Today Өнөөдөр ScheduleTypeEditDlg New event type ��г��р дүр�м Edit event type Дүр�м за�ах Import ICS file ICS файлыг импортлох Name: ��р: Color: Хувь�гал: ICS File: ICS файл: Cancel button Цуцлах Save button Хадгалах The name can not only contain whitespaces ��р нь өөрөө�өө өөрөө�өө өөрөө�өө өөрөө�өө өөрөө�өө өөрөө�өө өөрөө� Enter a name please ��р оруулаарай Shortcut Help Ту�ламж Delete event Дүр�м у�тгах Copy Хуваах Cut Хуваах Paste ��м�х Delete У�тгах Select all Бүхийг �онгох SidebarCalendarWidget Y Өдөр M Сар TimeJumpDialog Go button Хөдөлгөх UserloginWidget Sign In button ��втр�х Sign Out button Гарах YearFrame Y Өдөр today Today Today Өнөөдөр linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_mr.ts000066400000000000000000001427061523260663500250720ustar00rootroot00000000000000 AccountItem Sync successful सिंक स�केलसफ�ल Network error नेटवर�क गलती Server exception सर�वर अपवाद Storage full स�टोरेज पूर�ण AccountManager Local account स�थानिक खाता Event types वेंट टाइप CColorPickerWidget Color रंग Cancel button रद�द करा Save button सेव करा CDayMonthView Monday सोमवार Tuesday मंगळवार Wednesday ब�धवार Thursday ग�र�वार Friday श�क�रवार Saturday शनिवार Sunday रविवार CDayWindow Y य M म D ड Lunar संभार CGraphicsView New Event नवीन घटना CMonthScheduleNumItem %1 more %1 अधिक CMonthView New event नवीन घटना New Event नवीन घटना CMonthWindow Y य CMyScheduleView My Event मा�ी घटना OK button ओके Delete button हटवा Edit button संपादित करा CPushButton New event type नवीन घटना टाइप CScheduleDlg New Event नवी घटना Edit Event घटना संपादन करा End time must be greater than start time स�र�वाती वेळापेक�षा ख�प जास�त असणे आवश�यक आहे OK button ओके Never कधीही At time of event घटनेच�या वेळी 15 minutes before 15 मिनिट पूर�वी 30 minutes before 30 मिनिट पूर�वी 1 hour before 1 तास पूर�वी 1 day before 1 दिवस पूर�वी 2 days before 2 दिवस पूर�वी 1 week before 1 आठवडा पूर�वी On start day (9:00 AM) स�र�वाती दिवसावर (9:00 आम) time(s) वेळा (s) Enter a name please म�ळात नाव द�या The name can not only contain whitespaces नाव केवळ ब�लॅकस�पेस नाही असू शकते Type: प�रकार: Description: वर�णन: All Day: पूर�ण दिवस: Starts: स�र� होते: Ends: संप�ष�टी �ाले: Remind Me: मला आठववा: Repeat: प�न�हा करा: End Repeat: प�न�हा करणे संप�ष�टी Calendar account: कॅलेंडर खाते: Calendar account कॅलेंडर खाते Type प�रकार Description वर�णन All Day पूर�ण दिवस Time: वेळा: Time સમય Solar સૂર�ય Lunar ચંદ Starts શરૂ થાય Ends સમાપ�ત થાય Remind Me યાદ રાખો Repeat પ�નરાવર�તન Daily દૈનિક Weekdays સાંજો Weekly સપ�તાહિક Monthly સૌરાષ�ટ�રિક Yearly વાર�ષિક End Repeat પ�નરાવર�તન અંત After પછી On �ટલે Cancel button ના Save button બચાવો CScheduleOperation All occurrences of a repeating event must have the same all-day status. પ�નરાવર�તન થયેલ ઘટનાના બધા પ�રસંગોને �કસરખો પૂર�ણ દિવસનો સ�થિતિ હોવો જોઈ�. Do you want to change all occurrences? તમે બધા પ�રસંગોને બદલવા માંગો છો? Cancel button ના Change All બધા બદલો You are changing the repeating rule of this event. તમે આ ઘટનાની પ�નરાવર�તન નિયમને બદલી રહ�યા છો. You are deleting an event. તમે �ક ઘટના નાખી રહ�યા છો. Are you sure you want to delete this event? તમે આ ઘટનાને નાખવા માંગો છો? Delete button નાખો Do you want to delete all occurrences of this event, or only the selected occurrence? તમે આ ઘટનાના બધા પ�રસંગોને નાખવા માંગો છો, કે કેવો પ�રસંગ નાખવા માંગો છો? Delete All બધા નાખો Delete Only This Event કેવો પ�રસંગ નાખો Do you want to delete this and all future occurrences of this event, or only the selected occurrence? તમે આ ઘટનાને અને તેના બધા ભવિષ�યમાં આવતા પ�રસંગોને નાખવા માંગો છો, કે કેવો પ�રસંગ નાખવા માંગો છો? Delete All Future Events બધા ભવિષ�યમાં આવતા પ�રસંગો નાખો You are changing a repeating event. आप �क प�नरावृत�त घटना बदलत आहात. Do you want to change only this occurrence of the event, or all occurrences? आपल�याला घटनेची केवळ �क घटना बदलायची आहे की सर�व घटना? All सर�व Only This Event केवळ ही घटना Do you want to change only this occurrence of the event, or this and all future occurrences? आपल�याला घटनेची केवळ �क घटना बदलायची आहे की ही आणि सर�व भविष�यातील घटना? All Future Events सर�व भविष�यातील घटना You have selected a leap month, and will be reminded according to the rules of the lunar calendar. आपने �क लीप महिना निवडला आहे, आणि आपल�याला महिना लूनर कॅलेंडरच�या नियमांन�सार आठववून देण�यात येईल. OK button ओके CScheduleSearchDateItem Y य M म D ड CScheduleSearchItem Edit संपादित करा Delete हटवा All Day सर�व दिवस CScheduleSearchView No search results कोणतेही शोध निकाल नाहीत CScheduleView ALL DAY सर�व दिवस CSettingDialog Sunday रविवार Monday सोमवार Use System Setting सिस�टम सेटिंग वापरा 24-hour clock 24 तास घडी 12-hour clock 12 तास घडी import ICS file ICS फाइल आयात करा Manual मॅन�य�अल 15 mins 15 मिनिट 30 mins 30 मिनिट 1 hour 1 तास 24 hours 24 तास Sync Now आता सिंक करा Last sync पिछला सिंक Please go to the Control Center to change system settings कृपया सिस�टम सेटिंग बदलण�यासाठी कंट�रोल सेंटर वर जा. CTimeEdit (%1 mins) (%1 मिनिट) (%1 hour) (%1 तास) (%1 hours) (%1 तास) CTitleWidget Y य M म W व D ड Search events and festivals ઇवेंट आणि फेस�टिवल शोधा CWeekWindow Week सप�ताह Y य CYearScheduleView All Day पूर�ण दिवस No event कोणतेही इवेंट नाही CYearWindow Y य CalendarWindow Calendar कॅलेंडर Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. कॅलेंडर तारखा पहायचा उपकरण आहे, आणि त�याच वेळी आपल�या आय�ष�यातील सर�व गोष�टी योजना बनवण�याचे �क चांगले दैनिक योजना उपकरण आहे. Calendarmainwindow Calendar कॅलेंडर Manage मानेन�स Privacy Policy गोपनीयता नीती Syncing... सिंकिंग... Sync successful सिंकिंग यशस�वी Sync failed, please try later सिंकिंग अयशस�वी, कृपया नंतर प�न�हा प�रयत�न करा CenterWidget All Day पूर�ण दिवस DAccountDataBase Work काम Life जीवन Other अन�य DAlarmManager Close button बंद करा One day before start प�रारंभापूर�वी �क दिवस Remind me tomorrow मा��या आज आठव करा Remind me later मा��या नंतर आठव करा 15 mins later 15 मिनिट नंतर 1 hour later 1 तास नंतर 4 hours later 4 तास नंतर Tomorrow उद�या Schedule Reminder योजना अलर�ट %1 to %2 '%1 ते %2' Today आज DragInfoGraphicsView Edit संपादित करा Delete हटवा New event नवीन घटना New Event नवीन घटना JobTypeListView export eksport import ICS file ICS फाइल आयात करा You are deleting an event type. आपण �क घटना प�रकार हटवत आहात. All events under this type will be deleted and cannot be recovered. ह�या प�रकाराखालील सर�व घटना हटवल�या जातील आणि प�नर�स�थापित केल�या जाऊ शकत नाहीत. Cancel button रद�द करा Delete button हटवा QObject Manage calendar कॅलेंडर व�यवस�थापन करा Event types घटना प�रकार Account settings खाता सेटिंग�स Account खाता Select items to be synced सिंक करण�यासाठी घटना निवडा Events घटना General settings सामान�य सेटिंग�स Sync interval सिंक अंतराळ Calendar account कॅलेंडर खाता General सामान�य First day of week सप�ताहाचा पहिला दिवस Time वेळ Return Today Return आज Return Today Today Return Today आज परत ScheduleTypeEditDlg New event type नवीन घटना प�रकार Edit event type संपादित करा घटना प�रकार Import ICS file आय आई सी फाइल आयात करा Name: नाव: Color: रंग: ICS File: आय आई सी फाइल: Cancel button रद�द करा Save button सेव करा The name can not only contain whitespaces नाव मध�ये केवळ अक�षरे नसल�याचे निश�चित करा Enter a name please मृद� नाव द�या Shortcut Help सहाय�य Delete event घटना डिलीट करा Copy कॉपी करा Cut कट करा Paste पेस�ट करा Delete डिलीट करा Select all सर�व निवडा SidebarCalendarWidget Y Y M M TimeJumpDialog Go button जा UserloginWidget Sign In button लॉग इन करा Sign Out button लॉग आउट करा YearFrame Y Y today Today Today आज linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ms.ts000066400000000000000000001324021523260663500250630ustar00rootroot00000000000000 AccountItem Sync successful Sinks berjaya Network error Ralat rangkaian Server exception Pengecualian pelayan Storage full Storaj penuh AccountManager Local account Akaun tempatan Event types Jenis acara CColorPickerWidget Color Warna Cancel button Batal Save button Simpan CDayMonthView Monday Isnin Tuesday Selasa Wednesday Rabu Thursday Khamis Friday Jumaat Saturday Sabtu Sunday Ahad CDayWindow Y T M B D H Lunar Bulan CGraphicsView New Event Peristiwa Baharu CMonthScheduleNumItem %1 more %1 lagi CMonthView New event Peristiwa baharu New Event Peristiwa Baharu CMonthWindow Y T CMyScheduleView My Event Peristiwa Saya OK button OK Delete button Padam Edit button Sunting CPushButton New event type Jenis acara baru CScheduleDlg New Event Peristiwa Baharu Edit Event Sunting Peristiwa End time must be greater than start time Masa tamat mesti lebih besar dari masa mula OK button OK Never Tidak sesekali At time of event Semua tempoh peristiwa 15 minutes before 15 minit sebelum 30 minutes before 30 minit sebelum 1 hour before 1 jam sebelum 1 day before 1 hari sebelum 2 days before 2 hari sebelum 1 week before 1 minggu sebelum On start day (9:00 AM) Pada hari mula (9:00 AM) time(s) kali Enter a name please Masukkan nama sila The name can not only contain whitespaces Nama tidak boleh hanya mengandungi ruang kosong Type: Jenis: Description: Keterangan: All Day: Sepanjang Hari: Starts: Mula: Ends: Tamat: Remind Me: Ingatkan Saya: Repeat: Ulang: End Repeat: Tamat Ulang: Calendar account: Akaun kalendar: Calendar account Akaun kalendar Type Jenis Description Keterangan All Day Sepanjang Hari Time: Masa: Time Masa Solar Matahari Lunar Bulan Starts Mula Ends Tamat Remind Me Ingatkan Saya Repeat Ulang Daily Harian Weekdays Hari Bekerja Weekly Mingguan Monthly Bulanan Yearly Tahunan End Repeat Tamat Ulang After Selepas On Pada Cancel button Batal Save button Simpan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Semua kemunculan bagi peristiwa berulang mesti mempunyai status sepanjang-hari yang sama. Do you want to change all occurrences? Anda pasti mahu mengubah semua kemunculan? Cancel button Batal Change All Ubah Semua You are changing the repeating rule of this event. Anda mengubah peraturan berulang bagi peristiwa ini. You are deleting an event. Anda telah memadam satu peristiwa. Are you sure you want to delete this event? Anda pasti mahu memadam peristiwa ini? Delete button Padam Do you want to delete all occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini, atau hanya kemunculan terpilih? Delete All Padam Semua Delete Only This Event Hanya Padam Peristiwa Ini Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Anda pasti mahu memadam semua kemunculan peristiwa ini dan akan datang, atau hanya kemunculan terpilih? Delete All Future Events Padam Semua Peristiwa Akan Datang You are changing a repeating event. Anda mengubah satu peristiwa berulang. Do you want to change only this occurrence of the event, or all occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau semua kemunculan? All Semua Only This Event Hanya Peristiwa Ini Do you want to change only this occurrence of the event, or this and all future occurrences? Anda pasti mahu mengubah hanya kemunculan peristiwa ini, atau ini dan semua kemunculan masa hadapan? All Future Events Semua Peristiwa Masa Hadapan You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Anda telah memilih bulan kecil, dan akan diberi peringatan mengikut aturan kalendar bulan. OK button OK CScheduleSearchDateItem Y T M B D H CScheduleSearchItem Edit Sunting Delete Padam All Day Sepanjang Hari CScheduleSearchView No search results Tiada keputusan gelintar CScheduleView ALL DAY SEPANJANG HARI CSettingDialog Sunday Ahad Monday Isnin Use System Setting Gunakan Tetapan Sistem 24-hour clock Jam 24 jam 12-hour clock Jam 12 jam import ICS file import fail ICS Manual Manual 15 mins 15 minit 30 mins 30 minit 1 hour 1 jam 24 hours 24 jam Sync Now Sync Kini Last sync Sync terakhir Please go to the Control Center to change system settings Sila pergi ke Pusat Kawalan untuk mengubah tetapan sistem CTimeEdit (%1 mins) (%1 minit) (%1 hour) (%1 jam) (%1 hours) (%1 jam) CTitleWidget Y T M B W M D H Search events and festivals Cari acara dan sambutan CWeekWindow Week Minggu Y T CYearScheduleView All Day Sepanjang Hari No event Tiada peristiwa CYearWindow Y T CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendar ialah sebuah alat untuk melihat tarikh, dan juga satu perancang harian pintar yang dapat menjadualkan semua perkara dalam hidup ini. Calendarmainwindow Calendar Kalendar Manage Kelola Privacy Policy Dasar Persendirian Syncing... Menyegerak... Sync successful Pemirsaan berjaya Sync failed, please try later Pemirsaan gagal, sila cuba kemudian CenterWidget All Day Sepanjang Hari DAccountDataBase Work Kerja Life Lapang Other Lain-lain DAlarmManager Close button Tutup One day before start Satu hari sebelum mula Remind me tomorrow Ingatkan saya esok hari Remind me later Ingatkan saya kemudian 15 mins later 15 minit kemudian 1 hour later 1 jam kemudian 4 hours later 4 jam kemudian Tomorrow Esok Schedule Reminder Peringatan Berjadual %1 to %2 %1 hingga %2 Today Hari ini DragInfoGraphicsView Edit Sunting Delete Padam New event Peristiwa baharu New Event Peristiwa Baharu JobTypeListView export eksport import ICS file import fail ICS You are deleting an event type. Anda sedang memadam jenis acara. All events under this type will be deleted and cannot be recovered. Semua acara di bawah jenis ini akan dipadam dan tidak dapat dipulihkan. Cancel button Batal Delete button Padam QObject Manage calendar Kelola kalendar Event types Jenis acara Account settings Pengaturan akaun Account Akaun Select items to be synced Pilih item untuk dimirsa Events Acara General settings Pengaturan umum Sync interval Jangka waktu pemirsaan Calendar account Akaun kalendar General Am First day of week Hari pertama seminggu Time Masa Return Today Return Hari ini Return Today Today Return Today Hari ini ScheduleTypeEditDlg New event type Jenis acara baru Edit event type Sunting jenis acara Import ICS file Import fail ICS Name: Nama: Color: Warna: ICS File: Fail ICS: Cancel button Batal Save button Simpan The name can not only contain whitespaces Nama ini tidak boleh hanya mengandungi ruang kosong Enter a name please Masukkan nama sila Shortcut Help Bantuan Delete event Padam peristiwa Copy Salin Cut Potong Paste Tampal Delete Padam Select all Pilih semua SidebarCalendarWidget Y T M B TimeJumpDialog Go button Pergi UserloginWidget Sign In button Daftar Masuk Sign Out button Daftar Keluar YearFrame Y T today Today Today Hari ini linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_my.ts000066400000000000000000001457131523260663500251020ustar00rootroot00000000000000 AccountItem Sync successful ညီမျှ�ြင်းအောင်မြင်ပြီ Network error အင်�ာနက်အဆိုးရွား Server exception လုပ်ဆောင်ရေးကိရိယာအမှား Storage full သို့ထားမှုပြည့်နေပြီ AccountManager Local account ဒေ�ာကိုင်းအကောင့် Event types အားလုံးအမျိုးအစား CColorPickerWidget Color အိမ်အရောင် Cancel button အဆုံးသ�် Save button သိမ်းဆည်း CDayMonthView Monday နေ့ရက်�န်း Tuesday အနေ့ရက်�န်း Wednesday �ော်လာရက်�န်း Thursday ကြာသပ�ေးရက်�န်း Friday ပရော်ဖက်ရက်�န်း Saturday စနေရက်�န်း Sunday �နင်္ဂနွေရက်�န်း CDayWindow Y နေ့ M လ D ရက် Lunar လေးလေး CGraphicsView New Event အသစ်အားလုံး CMonthScheduleNumItem %1 more %1 ပိုပြီ CMonthView New event အသစ်အားလုံး New Event အသစ်အားလုံး CMonthWindow Y နေ့ CMyScheduleView My Event ကျွန်�ော့်အားလုံး OK button အမှန်ကြိုး Delete button ဖျက်ပါ Edit button ပြင်ဆင်ပါ CPushButton New event type အသစ်အားလုံးအမျိုးအစား CScheduleDlg New Event เหตุ�ารณ์ใหม่ Edit Event ��้ไขเหตุ�ารณ์ End time must be greater than start time เวลาสิ้นสุดต้องมา��ว่าเวลาเริ่มต้น OK button ต�ลง Never 从� At time of event ในเวลาที่เ�ิดเหตุ�ารณ์ 15 minutes before 15 นาที�่อน 30 minutes before 30 นาที�่อน 1 hour before 1 ชั่วโมง�่อน 1 day before 1 วัน�่อน 2 days before 2 วัน�่อน 1 week before 1 สัปดาห์�่อน On start day (9:00 AM) ในวันที่เริ่มต้น (เวลา 09:00) time(s) เวลา (s) Enter a name please �รุณา�รอ�ชื่อ The name can not only contain whitespaces ชื่อนั้นไม่สามารถประ�อบด้วยช่องว่างเพียงอย่างเดียว Type: ประเภท: Description: คำอธิบาย: All Day: ตลอดทั้งวัน: Starts: เริ่มต้น: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ซ้ำ: End Repeat: หยุดซ้ำ: Calendar account: บั�ชีป�ิทิน: Calendar account บั�ชีป�ิทิน Type ประเภท Description คำอธิบาย All Day ตลอดทั้งวัน Time: เวลา: Time အ�ျိန် Solar အိုးရား Lunar လက္ကန်း Starts စ�င်�ြင်း Ends အဆုံးသ�်�ြင်း Remind Me အရှိန်အားဖြင့် နှိုးဆော်ပါ Repeat ကြိုးပွဲပြုလုပ်ပါ Daily �စ်နေ့စီ Weekdays ပ�်ပ�်လည်ရက်များ Weekly �စ်ပ�်စီ Monthly �စ်လစီ Yearly �စ်နှစ်စီ End Repeat ကြိုးပွဲကို အဆုံးသ�်ပါ After နောက်ပိုင်း�ွင် On ပေါ်�ွင် Cancel button ရပ်ပါ Save button သိမ်းဆည်းပါ CScheduleOperation All occurrences of a repeating event must have the same all-day status. ကြိုးပွဲပြုလုပ်သည့် အ�ျိန်များသည် အားလုံး�ွင် �စ်နေ့လုံး အ�ျိန်အားဖြင့် အ�ြေအနေများကို �ူညီသော အ�ြေအနေ�ွင် ရှိရမည်� Do you want to change all occurrences? အားလုံးကို ပြောင်းလဲရန် လိုလားပါသလား� Cancel button ရပ်ပါ Change All အားလုံးကို ပြောင်းလဲပါ You are changing the repeating rule of this event. သင်သည် အ�ျိန်များကို ပြောင်းလဲနေသည့် ကြိုးပွဲအမျိုးအစားကို ပြောင်းလဲနေပါသည်� You are deleting an event. သင်သည် အ�ျိန်များကို ထု�်ပယ်နေပါသည်� Are you sure you want to delete this event? သင်သည် အ�ျိန်များကို ထု�်ပယ်ရန် သေ�ျာပါသလား� Delete button ဖျက်ပါ Do you want to delete all occurrences of this event, or only the selected occurrence? သင်သည် အ�ျိန်များကို အားလုံးကို ဖျက်ပါမည်နှင့် သို့မဟု�် ရွေး�ျယ်ထားသော အ�ျိန်ကို သာ ဖျက်ပါမည်နှင့် ကြိုးပွဲအမျိုးအစားကို ပြောင်းလဲနေပါသလား� Delete All အားလုံးကို ဖျက်ပါ Delete Only This Event အားလုံးကို ဖျက်ပါ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? သင်သည် အ�ျိန်များကို နှင့် အနောက်ပိုင်းရှိ အားလုံးကို ဖျက်ပါမည်နှင့် သို့မဟု�် ရွေး�ျယ်ထားသော အ�ျိန်ကို သာ ဖျက်ပါမည်နှင့် ကြိုးပွဲအမျိုးအစားကို ပြောင်းလဲနေပါသလား� Delete All Future Events နောက်ပိုင်းရှိ အားလုံးကို ဖျက်ပါ You are changing a repeating event. Do you want to change only this occurrence of the event, or all occurrences? All Only This Event Do you want to change only this occurrence of the event, or this and all future occurrences? All Future Events You have selected a leap month, and will be reminded according to the rules of the lunar calendar. OK button CScheduleSearchDateItem Y M D CScheduleSearchItem Edit Delete All Day CScheduleSearchView No search results CScheduleView ALL DAY CSettingDialog Sunday Monday Use System Setting 24-hour clock 12-hour clock import ICS file Manual 15 mins 30 mins 1 hour 24 hours Sync Now Last sync Please go to the Control Center to change system settings CTimeEdit (%1 mins) (%1 นาที) (%1 hour) (%1 ชั่วโมง) (%1 hours) (%1 ชั่วโมง) CTitleWidget Y จ M ม W ส D พฤ Search events and festivals ค้นหาเหตุ�ารณ์�ละเทศ�าล CWeekWindow Week สัปดาห์ Y จ CYearScheduleView All Day ตลอดทั้งวัน No event ไม่มีเหตุ�ารณ์ CYearWindow Y จ CalendarWindow Calendar ป�ิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ป�ิทินคือเครื่องมือสำหรับดูวันที่ �ละยังเป็นผู้วาง�ผนประจำวันอัจฉริยะที่ช่วยจัด�ารทุ�สิ่งในชีวิต Calendarmainwindow Calendar ป�ิทิน Manage จัด�าร Privacy Policy นโยบายความเป็นส่วนตัว Syncing... �ำลังซิงค์... Sync successful ซิงค์สำเร็จ Sync failed, please try later �ารซิงค์ล้มเหลว โปรดลองอี�ครั้งในภายหลัง CenterWidget All Day ตลอดทั้งวัน DAccountDataBase Work งาน Life ชีวิต Other อื่น ๆ DAlarmManager Close button ปิด One day before start หนึ่งวัน�่อนเริ่มต้น Remind me tomorrow เตือนฉันพรุ่งนี้ Remind me later เตือนฉันในภายหลัง 15 mins later 15 นาทีต่อมา 1 hour later 1 နာရီပိုပြီး 4 hours later 4 နာရီပိုပြီး Tomorrow နောက်နေ့ Schedule Reminder ဇယားအရေးကြီးသော အသံေ�ကာင္း %1 to %2 '%1 မှ %2' Today ယ�ုနေ့ DragInfoGraphicsView Edit ပြင်ဆိုင်ရာ Delete ဖျက်ပါ New event အသစ်ဖြစ်ပွားမှု New Event အသစ်ဖြစ်ပွားမှု JobTypeListView export အောက်ယူ import ICS file ICS ဖိုင်ကို အောက်ယူ You are deleting an event type. သင်သည် ဖြစ်ပွားမှုအမျိုးအစား�စ်မျိုးကို ဖျက်ပါလျက်ရှိပါသည်� All events under this type will be deleted and cannot be recovered. အမျိုးအစားအောက်�ွင် ပါ�င်သော ဖြစ်ပွားမှုအားလုံးကို ဖျက်ပြီး ပြန်လည်ရယူရန် မဖြစ်နိုင်ပါ� Cancel button ဖျက်ပါ Delete button ဖျက်ပါ QObject Manage calendar ဇယားကို စီမံပါ Event types ဖြစ်ပွားမှုအမျိုးအစားများ Account settings ကိုယ်ပိုင်အက်စ်ကို စီမံပါ Account အက်စ် Select items to be synced စီမံကိုယ်ပိုင် ဖြစ်ပွားမှုများကို ရွေးပါ Events ဖြစ်ပွားမှုများ General settings အားလုံးကို စီမံပါ Sync interval စီမံကိုယ်ပိုင် အကြားအလိုက် Calendar account ဇယားအက်စ် General အားလုံး First day of week ပြီးသော နေ့အ�ွင်း ပထမနေ့ Time အ�ျိန် Return Today Return ယ�ုနေ့ Return Today Today Return Today ယ�ုနေ့ ScheduleTypeEditDlg New event type အသစ်ဖြစ်စေ�ျင်သောအ�ျိန်မျိုး Edit event type ဖြစ်စေ�ျင်သောအ�ျိန်မျိုးကိုပြင်ရန် Import ICS file ICS ဖိုင်ကိုအသုံးပြုပါ Name: အမည်: Color: အိမ်အရောင်: ICS File: ICS ဖိုင်: Cancel button ပယ်ဖျက် Save button သိမ်းဆည်း The name can not only contain whitespaces အမည်သည် အားလုံးမှာ အားလုံး�ွင် အားလုံးကို အားလုံးပြုလုပ်ရန် မှားယွင်းနေသည် Enter a name please အမည်ကို ရိုက်ထည့်ပါ Shortcut Help ကူညီမှု Delete event ဖြစ်စေ�ျင်သောအ�ျိန်မျိုးကိုပယ်ဖျက် Copy အမှ�်�မဲ့ Cut ဖြ�်�ောက် Paste အမှ�်�မဲ့ Delete ပယ်ဖျက် Select all အားလုံးကိုရွေးပါ SidebarCalendarWidget Y နှစ် M လ TimeJumpDialog Go button သွား UserloginWidget Sign In button �င်ရောက် Sign Out button ထွက်ပြေး YearFrame Y နှစ် today Today Today ယနေ့ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_nb.ts000066400000000000000000001322521523260663500250460ustar00rootroot00000000000000 AccountItem Sync successful Synchronisering vellykket Network error Nettverrfel Server exception Serverfeil Storage full Lagring full AccountManager Local account Lokal konto Event types Hendelses typer CColorPickerWidget Color Farge Cancel button Avbryt Save button Lagre CDayMonthView Monday Mandag Tuesday Tirsdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lørdag Sunday Søndag CDayWindow Y Y M M D D Lunar Måne CGraphicsView New Event Ny hendelse CMonthScheduleNumItem %1 more %1 mer CMonthView New event Ny hendelse New Event Ny hendelse CMonthWindow Y Y CMyScheduleView My Event Min hendelse OK button OK Delete button Slett Edit button Rediger CPushButton New event type Ny hendelses type CScheduleDlg New Event Ny hendelse Edit Event Rediger hendelse End time must be greater than start time Sluttid må være større enn starttid OK button OK Never Aldri At time of event I tid for hendelse 15 minutes before 15 minutter før 30 minutes before 30 minutter før 1 hour before 1 time før 1 day before 1 dag før 2 days before 2 dager før 1 week before 1 uke før On start day (9:00 AM) På startdag (9:00 OM) time(s) tid(e) Enter a name please Skriv inn et navn venligst The name can not only contain whitespaces Navnet kan ikke bare bestå av mellomrom Type: Type: Description: Beskrivelse: All Day: Hele dagen: Starts: Starts: Ends: Slutter: Remind Me: Påminn meg: Repeat: Gjenta: End Repeat: Slutt gjenta: Calendar account: Kalenderkonto: Calendar account Kalenderkonto Type Type Description Beskrivelse All Day Hele dagen Time: Tid: Time Tid Solar Solsikkerhet Lunar Måne Starts Starts Ends Slutter Remind Me Påminn meg Repeat Gjenta Daily Daglig Weekdays Arbeidsdager Weekly Ukentlig Monthly Månedlig Yearly Årlig End Repeat Slutt gjenta After Etter On På Cancel button Avbryt Save button Lagre CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle forekomster av et gjentakende hendelse må ha samme all-day-status. Do you want to change all occurrences? Vil du endre alle forekomster? Cancel button Avbryt Change All Endre alle You are changing the repeating rule of this event. Du endrer gjentakende regel for denne hendelsen. You are deleting an event. Du sletter en hendelse. Are you sure you want to delete this event? Er du sikker på at du vil slette denne hendelsen? Delete button Slett Do you want to delete all occurrences of this event, or only the selected occurrence? Vil du slette alle forekomster av denne hendelsen, eller bare den valgte forekomsten? Delete All Slett alle Delete Only This Event Slett bare denne hendelsen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vil du slette denne og alle fremtidige forekomster av denne hendelsen, eller bare den valgte forekomsten? Delete All Future Events Slett alle fremtidige hendelser You are changing a repeating event. Du endrer en gjentagende hendelse. Do you want to change only this occurrence of the event, or all occurrences? Vil du endre kun denne forekomsten av hendelsen, eller alle forekomster? All Alle Only This Event Kun denne hendelsen Do you want to change only this occurrence of the event, or this and all future occurrences? Vil du endre kun denne forekomsten av hendelsen, eller denne og alle fremtidige forekomster? All Future Events Alle fremtidige hendelser You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Du har valgt en skuddagsmåned, og vil bli påminnet etter reglene for den månlige kalenderen. OK button OK CScheduleSearchDateItem Y J M M D D CScheduleSearchItem Edit Rediger Delete Slett All Day Hele dagen CScheduleSearchView No search results Ingen søkeresultater CScheduleView ALL DAY HELE DAGEN CSettingDialog Sunday Søndag Monday Mandag Use System Setting Bruk systeminnstillinger 24-hour clock 24-timersklokke 12-hour clock 12-timersklokke import ICS file Importer ICS-fil Manual Manuell 15 mins 15 minutter 30 mins 30 minutter 1 hour 1 time 24 hours 24 timer Sync Now Synk nå Last sync Siste synk Please go to the Control Center to change system settings Vennligst gå til Kontrollsentralen for å endre systeminnstillinger CTimeEdit (%1 mins) (%1 minutter) (%1 hour) (%1 time) (%1 hours) (%1 timer) CTitleWidget Y Y M M W W D D Search events and festivals Søk etter hendelser og festivaller CWeekWindow Week Uke Y Y CYearScheduleView All Day Hele dagen No event Ingen hendelse CYearWindow Y Y CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender er et verktøy for å se datoer, og også en smart daglig planlegger for å planlegge alt i livet. Calendarmainwindow Calendar Kalender Manage Administrer Privacy Policy Personvernspolicy Syncing... Synchroniserer... Sync successful Synchronisering vellykket Sync failed, please try later Synchronisering feilet, prøv igjen senere CenterWidget All Day Hele dagen DAccountDataBase Work Arbeid Life Liv Other Annet DAlarmManager Close button Lukk One day before start En dag før start Remind me tomorrow Påminn meg i morgen Remind me later Påminn meg senere 15 mins later 15 minutter senere 1 hour later Etter 1 time 4 hours later Etter 4 timer Tomorrow I morgen Schedule Reminder Planlegg påminnelse %1 to %2 '%1 til %2' Today I dag DragInfoGraphicsView Edit Rediger Delete Slett New event Ny hendelse New Event Ny hendelse JobTypeListView export eksport import ICS file importer ICS-fil You are deleting an event type. Du sletter et hendelses type. All events under this type will be deleted and cannot be recovered. Alle hendelser under denne typen vil bli slettet og kan ikke gjenopprettes. Cancel button Avbryt Delete button Slett QObject Manage calendar Administrer kalender Event types Hendelses typer Account settings Kontoinnstillinger Account Konto Select items to be synced Velg elementer som skal synkroniseres Events Hendelser General settings Generelle innstillinger Sync interval Synkroniseringsintervall Calendar account Kalenderkonto General Generelt First day of week Første dag i uken Time Tid Return Today Return I dag Return Today Today Return Today I dag ScheduleTypeEditDlg New event type Ny hendelses type Edit event type Rediger hendelses type Import ICS file Importere ICS-fil Name: Navn: Color: Farge: ICS File: ICS-fil: Cancel button Avbryt Save button Lagre The name can not only contain whitespaces Navnet kan ikke bare inneholde mellomrom Enter a name please Skriv inn et navn, vennligst Shortcut Help Hjelp Delete event Slett hendelse Copy Kopier Cut Klipp ut Paste Lim inn Delete Slett Select all Velg alt SidebarCalendarWidget Y M M M TimeJumpDialog Go button Gå UserloginWidget Sign In button Logg inn Sign Out button Logg ut YearFrame Y M today Today Today I dag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ne.ts000066400000000000000000001440251523260663500250520ustar00rootroot00000000000000 AccountItem Sync successful सिङ�क सफल Network error नेटवर�क त�र�टि Server exception सर�भर अपवाद Storage full स�टोरेज भरि�को AccountManager Local account स�थानिय खाता Event types आवेदन प�रकार CColorPickerWidget Color रंग Cancel button रद�द गर�न� Save button सेभ गर�न� CDayMonthView Monday सोमवार Tuesday मंगलवार Wednesday ब�धवार Thursday बिहार Friday श�क�रवार Saturday शनिवार Sunday रविवार CDayWindow Y य M म D ड Lunar चा�दी CGraphicsView New Event नया� आवेदन CMonthScheduleNumItem %1 more %1 बढी CMonthView New event नया� आवेदन New Event नया� आवेदन CMonthWindow Y य CMyScheduleView My Event मेरो आवेदन OK button ओके Delete button हटाउन� Edit button सम�पादन गर�न� CPushButton New event type नया� आवेदन प�रकार CScheduleDlg New Event नया घटना Edit Event सम�पादन घटना End time must be greater than start time समापन समय स�र� गर�न� पर�छ OK button ओके Never कदापि At time of event घटना कालो 15 minutes before 15 मिनेट अगाडि 30 minutes before 30 मिनेट अगाडि 1 hour before 1 घण�टा अगाडि 1 day before 1 दिन अगाडि 2 days before 2 दिन अगाडि 1 week before 1 साप�ताहिक अगाडि On start day (9:00 AM) स�र� गर�ने दिनमा (9:00 �म time(s) समय(हर�) Enter a name please कृपया �उटा नाम दर�ज गर�न�होस The name can not only contain whitespaces नाममा केवल स�पेस रहेन निश�चित गर�न�होस Type: प�रकार: Description: विवरण: All Day: सम�पूर�ण दिन: Starts: स�र� ह�न�छ: Ends: समापन ह�न�छ: Remind Me: मलाई याद गर�न�होस: Repeat: प�नरावृत�ति: End Repeat: प�नरावृत�ति समापन: Calendar account: कैलेन�डर खाता: Calendar account कैलेन�डर खाता Type प�रकार Description विवरण All Day सम�पूर�ण दिन Time: समय: Time समय Solar सौर Lunar चांदी Starts श�रू ह�न�छ Ends अंत ह�न�छ Remind Me मलाई याद गर�न�होस� Repeat प�नरावर�तन Daily हरेक दिन Weekdays हरेक साप�ताहिक दिन Weekly हरेक साप�ताहिक Monthly हरेक महिना Yearly हरेक वर�ष End Repeat प�नरावर�तन अंत After समाप�त On कार�यकाल Cancel button रद�द गर�न�होस� Save button सेभ गर�न�होस� CScheduleOperation All occurrences of a repeating event must have the same all-day status. �क रिपेटिंग घटनाको सबै घटनाहरू �कै दिन अवस�थाको छन�। Do you want to change all occurrences? सबै घटनाहरू बदल�न चाहान� छ? Cancel button रद�द गर�न�होस� Change All सबै बदल�न�होस� You are changing the repeating rule of this event. तपाईं यस घटनाको प�नरावर�तन नियम बदल�दै छिन�। You are deleting an event. तपाईं �उटि घटना डिलिट गर�दै छिन�। Are you sure you want to delete this event? तपाईं यस घटनालाई हटाउन निश�चित छ�न� छ? Delete button हटाउन�होस� Do you want to delete all occurrences of this event, or only the selected occurrence? तपाईं यस घटनाको सबै घटनाहरू हटाउन चाहान� छ वा मात�र चयन गरि�को घटना? Delete All सबै हटाउन�होस� Delete Only This Event मात�र यस घटना हटाउन�होस� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? तपाईं यस घटना र भविष�यका सबै घटनाहरू हटाउन चाहान� छ वा मात�र चयन गरि�को घटना? Delete All Future Events सबै भविष�यका घटनाहरू हटाउन�होस� You are changing a repeating event. तपाई� �उटा दोहोर�याउ�दै आ�को घटना बदलिरहिछन�। Do you want to change only this occurrence of the event, or all occurrences? तपाई� घटनाको �उटै घटनामात�र बदल�न चाहान� भयो वा सबै घटनामा बदल�न चाहान� भयो? All सबै Only This Event �उटै घटनामात�र Do you want to change only this occurrence of the event, or this and all future occurrences? तपाई� घटनाको �उटै घटनामात�र बदल�न चाहान� भयो वा यो र सबै भविष�य घटनामा बिच संशोधन गर�न चाहान� भयो? All Future Events सारा भविष�य घटनाहरू You have selected a leap month, and will be reminded according to the rules of the lunar calendar. तपाई� �उटा छठ महिना चयन गरेका छन�, र चा�दीको कैलेंडरको नियम अन�सार तपाई�लाई याद गराइनेछ। OK button ठिक CScheduleSearchDateItem Y य M म D ड CScheduleSearchItem Edit सम�पादन गर�न� Delete हटाउन� All Day सारा दिन CScheduleSearchView No search results क�नै खोज फलाम CScheduleView ALL DAY सारा दिन CSettingDialog Sunday रविवार Monday सोमवार Use System Setting सिस�टम सेटिङ उपयोग गर�न� 24-hour clock 24 घण�टा घडी 12-hour clock 12 घण�टा घडी import ICS file ICS फाइल आयात गर�न� Manual हात बाट 15 mins 15 मिनेट 30 mins 30 मिनेट 1 hour 1 काल 24 hours 24 काल Sync Now अब सिङ�क गर�न� Last sync तल चिङ�क Please go to the Control Center to change system settings कृपया सिस�टम सेटिङ बदल�नको लागि कन�ट�रोल सेन�टर मा जान�होल CTimeEdit (%1 mins) (%1 मिनेट) (%1 hour) (%1 घण�टा) (%1 hours) (%1 घण�टा) CTitleWidget Y य M म W व D द Search events and festivals आइत�याक र त�योहारहरू खोज�न�होस� CWeekWindow Week सप�ताह Y 'य' CYearScheduleView All Day सधैं दिन No event क�नै आइत�याक छैन CYearWindow Y 'य' CalendarWindow Calendar कैलेंडर Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. कैलेंडर तारिखहरू देख�नका लागि �क उपकरण हो, र जीवनमा सबै वस�त�हरू बर�तन गर�नका लागि �क स�सज�जित दैनिक योजनाकार हो। Calendarmainwindow Calendar कैलेंडर Manage सञ�चालन Privacy Policy गोपनीयता नीति Syncing... सिङ�किंग... Sync successful सिङ�किंग सफल Sync failed, please try later सिङ�किंग असफल, कृपया बाटो छोड�न�होस� CenterWidget All Day सधैं दिन DAccountDataBase Work काम Life जीवन Other अन�य DAlarmManager Close button बन�द गर�न�होस� One day before start आरम�भ भन�दा �क दिन अगाडि Remind me tomorrow म अगाडि याद गर�न�होस� Remind me later म बाटो याद गर�न�होस� 15 mins later 15 मिनेट बाटो 1 hour later 1 घण�टा बाहिर 4 hours later 4 घण�टा बाहिर Tomorrow आउट दिन Schedule Reminder स�केडूल रिमिंडर %1 to %2 '%1 से %2 तक' Today आज DragInfoGraphicsView Edit संपादित करो Delete हटाउ New event नया घटना New Event नया घटना JobTypeListView export निर�यात import ICS file ई.सी.�स. फाइल आयात गर�न�होस� You are deleting an event type. तपाईं �उटा घटना प�रकार हटाउ रहेका छन�। All events under this type will be deleted and cannot be recovered. यस प�रकारका सबै घटनाहरू हटाइ�को र हालै फिर�ता लिइ�को छैन। Cancel button रद�द गर�न�होस� Delete button हटाउ QObject Manage calendar कैलेंडर सम�पर�क गर�न�होस� Event types घटना प�रकार Account settings खाता सेटिंग�स Account खाता Select items to be synced सिङ�क को लागि आइटम चयन गर�न�होस� Events घटनाहरू General settings सामान�य सेटिंग�स Sync interval सिङक अंतराल Calendar account कैलेंडर खाता General सामान�य First day of week सप�ताहको पहिलो दिन Time समय Return Today Return आउट Return Today Today Return Today आउट आज ScheduleTypeEditDlg New event type नया घटना प�रकार Edit event type घटना प�रकार संपादन गर�न�होस Import ICS file ICS फाइल आयात गर�न�होस Name: नाम: Color: रंग: ICS File: ICS फाइल: Cancel button बन�द गर�न�होस Save button सेभ गर�न�होस The name can not only contain whitespaces नाममा �कै ठाउ�मा चार चार बिच भ�को छैन Enter a name please कृपया �उटा नाम भर�न�होस Shortcut Help सहायता Delete event घटना हटाउन�होस Copy काट�न�होस Cut काट�न�होस Paste पेस�ट गर�न�होस Delete हटाउन�होस Select all सबै छान�न�होस SidebarCalendarWidget Y वर�ष M महिना TimeJumpDialog Go button जान�होस UserloginWidget Sign In button लगिन Sign Out button लगाउट YearFrame Y वर�ष today Today Today आज linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_nl.ts000066400000000000000000001466541523260663500250730ustar00rootroot00000000000000 AccountItem Sync successful Sychroniseren voltooid Network error Netwerkfout Server exception Serveruitzondering Storage full Geen vrije schijfruimte AccountManager Local account Lokaal account Event types Soorten afspraken CColorPickerWidget Color Kleur Cancel button Annuleren Save button Opslaan CDayMonthView Monday Maandag Tuesday Dinsdag Wednesday Woensdag Thursday Donderdag Friday Vrijdag Saturday Zaterdag Sunday Zondag CDayWindow Y J M M D D Lunar Maan CGraphicsView New Event Nieuwe afspraak CMonthScheduleNumItem %1 more Nog %1 andere CMonthView New event Nieuwe afspraak New Event Nieuwe afspraak CMonthWindow Y J CMyScheduleView My Event Mijn afspraak OK button Oké Delete button Verwijderen Edit button Bewerken CPushButton New event type Nieuw soort afspraak CScheduleDlg New Event Nieuwe afspraak Edit Event Afspraak bewerken End time must be greater than start time De eindtijd moet later zijn dan de begintijd OK button Oké Never Nooit At time of event Bij aanvang 15 minutes before 15 minuten van tevoren 30 minutes before 30 minuten van tevoren 1 hour before 1 uur van tevoren 1 day before 1 dag van tevoren 2 days before 2 dagen van tevoren 1 week before 1 week van tevoren On start day (9:00 AM) Op de dag van de afspraak (9:00 AM) time(s) keer Enter a name please Voer een naam in The name can not only contain whitespaces De naam mag niet alleen uit spaties bestaan Type: Soort: Description: Omschrijving: All Day: Hele dag: Starts: Begint om: Ends: Eindigt om: Remind Me: Herinneren: Repeat: Herhalen: End Repeat: Herhaling eindigt op: Calendar account: Agenda-account: Calendar account Agenda-account Type Soort Description Omschrijving All Day Hele dag Time: Tijdstip: Time Tijdstip Solar Zon Lunar Maan Starts Begint om Ends Eindigt om Remind Me Herinneren Repeat Herhalen Daily Dagelijks Weekdays Weekdagen Weekly Wekelijks Monthly Maandelijks Yearly Jaarlijks End Repeat Herhaling eindigt op After Na On Op Cancel button Annuleren Save button Opslaan CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alle afspraken in de reeks moeten voorzien zijn van de status ‘hele dag’. Do you want to change all occurrences? Wil je alle afspraken in de reeks bewerken? Cancel button Annuleren Change All Reeks bewerken You are changing the repeating rule of this event. Je past de herhaalinstellingen van deze afspraak aan. You are deleting an event. Je staat op het punt een afspraak te verwijderen. Are you sure you want to delete this event? Weet je zeker dat je deze afspraak wilt verwijderen? Delete button Verwijderen Do you want to delete all occurrences of this event, or only the selected occurrence? Wil je alle afspraken in de reeks verwijderen of enkel deze? Delete All Reeks verwijderen Delete Only This Event Deze afspraak verwijderen Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Wil je deze en toekomstige afspraken verwijderen of enkel de deze? Delete All Future Events Toekomstige afspraken verwijderen You are changing a repeating event. Je staat op het punt een reeks aan te passen. Do you want to change only this occurrence of the event, or all occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Reeks Only This Event Deze afspraak Do you want to change only this occurrence of the event, or this and all future occurrences? Wil je deze en toekomstige afspraken aanpassen of enkel deze? All Future Events Toekomstige afspraken You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Je hebt een schrikkelmaand gekozen. De herinnering wordt op basis van de maankalender getoond. OK button Oké CScheduleSearchDateItem Y J M M D D CScheduleSearchItem Edit Bewerken Delete Verwijderen All Day Hele dag CScheduleSearchView No search results Geen zoekresultaten CScheduleView ALL DAY HELE DAG CSettingDialog Sunday zondag Monday maandag Use System Setting Systeeminstellingen gebruiken 24-hour clock 24-uursklok 12-hour clock 12-uursklok import ICS file Ics-bestand importeren Manual Handmatig 15 mins 15 min. 30 mins 30 min. 1 hour 1 uur 24 hours 24 uur Sync Now Nu synchroniseren Last sync Recentste synchronisatie Please go to the <a href='/'>Control Center</a> to change system settings De instellingen kunnen worden aangepast in het <a href='/'>instellingencentrum</a> CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 uur) (%1 hours) (%1 uur) CTitleWidget Y J M M W W D D Search events and festivals Zoeken naar afspraken en evenementen CWeekWindow Week Week Y J CYearScheduleView All Day Hele dag No event Geen afspraak CYearWindow Y J CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Met Kalender kun je je afspraken en planning beheren, zowel werk als privé. Calendarmainwindow Calendar Kalender Manage Instellingen Privacy Policy Privacybeleid Syncing... Bezig met synchroniseren… Sync successful Sychroniseren voltooid Sync failed, please try later Synchroniseren mislukt - probeer het later opnieuw CenterWidget All Day Hele dag DAccountDataBase Work Werk Life Privé Other Overig DAlarmManager Close button Sluiten One day before start Eén dag van tevoren Remind me tomorrow Herinner me morgen Remind me later Herinner me later 15 mins later 15 min. later 1 hour later 1 uur later 4 hours later 4 uur later Tomorrow Morgen Schedule Reminder Herinnering inplannen %1 to %2 van %1 tot %2 Today Vandaag DragInfoGraphicsView Edit Aanpassen Delete Verwijderen New event Nieuwe afspraak New Event Nieuwe afspraak JobTypeListView export Exporteren import ICS file Ics-bestand importeren You are deleting an event type. Je staat op het punt om een afspraaktype te verwijderen. All events under this type will be deleted and cannot be recovered. Alle bijbehorende afspraken worden verwijderd en kunnen niet worden hersteld. Cancel button Annuleren Delete button Verwijderen QObject Manage calendar Agenda beheren Event types Soorten afspraken Account settings Accountinstellingen Account Account Select items to be synced Selecteer de te synchroniseren items Events Afspraken General settings Algemene instellingen Sync interval Synchroniseren, elke Calendar account Agenda-account General Algemeen First day of week Eerste dag van de week Time Tijdsklok Return Today Return Vandaag Return Today Today Return Today Vandaag ScheduleTypeEditDlg New event type Nieuw soort afspraak Edit event type Afspraaktype bewerken Import ICS file Ics-bestand importeren Name: Naam: Color: Kleur: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>Ics</a>-bestand: Cancel button Annuleren Save button Opslaan The name can not only contain whitespaces De naam mag niet alleen bestaan uit spaties Enter a name please Voer een naam in Shortcut Help Hulp Delete event Afspraak verwijderen Copy Kopiëren Cut Knippen Paste Plakken Delete Verwijderen Select all Alles selecteren SidebarCalendarWidget Y J M M TimeJumpDialog Go button Ga UserloginWidget Sign In button Inloggen Sign Out button Uitloggen YearFrame Y J today Today Today Vandaag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_pam.ts000066400000000000000000001335051523260663500252260ustar00rootroot00000000000000 AccountItem Sync successful Nag-sync na Network error Error sa network Server exception Mga exception sa server Storage full Storage ay puno na AccountManager Local account Local account Event types Mga uri ng event CColorPickerWidget Color Kolor Cancel button I-cancel Save button I-save CDayMonthView Monday Lunes Tuesday Martes Wednesday Miyerkules Thursday Huwebes Friday Biyernes Saturday Sabado Sunday Linggo CDayWindow Y Y M M D D Lunar Lunar CGraphicsView New Event Bagong Event CMonthScheduleNumItem %1 more %1 pa CMonthView New event Bagong event New Event Bagong Event CMonthWindow Y Y CMyScheduleView My Event Aking Event OK button OK Delete button I-delete Edit button I-edit CPushButton New event type Bagong uri ng event CScheduleDlg New Event Bag-o nga pangyayari Edit Event I-edit ang pangyayari End time must be greater than start time Dapat nga mas daku ang oras nga pagtatapos kay sa oras nga pagmamarka OK button OK Never Sapagkaangay At time of event Sa oras nga pangyayari 15 minutes before 15 minuto bago 30 minutes before 30 minuto bago 1 hour before 1 oras bago 1 day before 1 adlaw bago 2 days before 2 adlaw bago 1 week before 1 semana bago On start day (9:00 AM) Sa adlaw nga pagmamarka (9:00 AM) time(s) oras (s) Enter a name please Ipasok ang pangalan, mangalap The name can not only contain whitespaces Ang pangalan dili mabug-os nga makakab-ot sa mga espasio Type: Tipo: Description: Pangalan: All Day: Kabug-os nga adlaw: Starts: Nagsimula: Ends: Nagtatapos: Remind Me: I-remind ako: Repeat: Ipalalang: End Repeat: Tapuson ang palalang: Calendar account: Kalendar account: Calendar account Kalendar account Type Tipo Description Pangalan All Day Kabug-os nga adlaw Time: Oras: Time Oras Solar Saral Lunar Laral Starts Nagsisimula Ends Natutapos Remind Me Tandaan ako Repeat Pangalawang Daily Arari Weekdays Araw ng linggo Weekly Lingguan Monthly Mga buwan Yearly Taunan End Repeat Tumapos ng pangalawang After Pagkatapos On Sa Cancel button Iwan Save button I-save CScheduleOperation All occurrences of a repeating event must have the same all-day status. Ang lahat ng mga pangyayari ng isang pangalawang kaganapan ay dapat may parehong status ng buong araw. Do you want to change all occurrences? Gusto mo bang baguhin ang lahat ng mga pangyayari? Cancel button Iwan Change All Baguhin ang lahat You are changing the repeating rule of this event. Nagbabago ka ng pangalawang pautang ng kaganapan na ito. You are deleting an event. Naglilinis ka ng isang kaganapan. Are you sure you want to delete this event? Sigurado ka bang gusto mong i-delete ang kaganapan na ito? Delete button I-delete Do you want to delete all occurrences of this event, or only the selected occurrence? Gusto mo bang i-delete ang lahat ng mga pangyayari ng kaganapan na ito, o lamang ang napiling pangyayari? Delete All I-delete ang lahat Delete Only This Event I-delete lamang ang kaganapan na ito Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Gusto mo bang i-delete ang kaganapan na ito at lahat ng mga pangyayari sa hinaharap, o lamang ang napiling pangyayari? Delete All Future Events I-delete ang lahat ng mga pangyayari sa hinaharap You are changing a repeating event. Nagbabago ka ng isang pangunahing pangyayari. Do you want to change only this occurrence of the event, or all occurrences? Gusto mo bang baguhin ang pangyayari lamang ng pangyayari, o lahat ng mga pangyayari? All Lahat Only This Event Lamang ang Pangyayari Do you want to change only this occurrence of the event, or this and all future occurrences? Gusto mo bang baguhin lamang ang pangyayari ng pangyayari, o ang pangyayari at lahat ng mga pangyayari sa hinaharap? All Future Events Laat ng Mga Pangyayari sa Hinaharap You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Nagpili ka ng isang leap month, at iisipin ka ayon sa mga tuntunin ng lunar calendar. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit I-edit Delete I-delete All Day Bawat araw CScheduleSearchView No search results Walay mga resulta ng paghanap CScheduleView ALL DAY BANAT ARAW CSettingDialog Sunday Linggo Monday Lunes Use System Setting Gamit ang Sistema Setting 24-hour clock 24-oras na orasan 12-hour clock 12-oras na orasan import ICS file import ICS file Manual Manwal 15 mins 15 minuto 30 mins 30 minuto 1 hour 1 oras 24 hours 24 oras Sync Now Synchronize Ngayon Last sync Ultimo Sync Please go to the Control Center to change system settings Siyempre, pumunta sa Control Center upang baguhin ang sistema setting CTimeEdit (%1 mins) (%1 minuto) (%1 hour) (%1 oras) (%1 hours) (%1 oras) CTitleWidget Y Y M M W W D D Search events and festivals Sugad nga mga pangyayari ngan mga himaraot CWeekWindow Week Araw Y Y CYearScheduleView All Day Bawat Araw No event Wala pangyayari CYearWindow Y Y CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendar usa nga tool para makita an mga petsa, ngan usab usa nga intelihenteng daily planner para mag-schedule han tanan nga mga butang ha kinabuhi. Calendarmainwindow Calendar Kalendar Manage Pagbubuhat Privacy Policy Pamangkot han Privacidad Syncing... Pag-ikot... Sync successful Pag-ikot nga nakakat-on Sync failed, please try later Pag-ikot nga nagsugod, palihog gamita na uli CenterWidget All Day Bawat Araw DAccountDataBase Work Trabaho Life Kinabuhi Other Anot DAlarmManager Close button Tumutok One day before start Sugad nga usa nga adlaw ha pagmula Remind me tomorrow Panginahanglan ko an buok adlaw Remind me later Panginahanglan ko an mas tapos 15 mins later 15 minuto mas tapos 1 hour later Isang oras na ang huli 4 hours later Apat na oras na ang huli Tomorrow Bukas Schedule Reminder Pangalawang pagpapahintulot %1 to %2 '%1 hanggang %2' Today Ngayon DragInfoGraphicsView Edit I-edit Delete I-delete New event Bagong pangyayari New Event Bagong Pangyayari JobTypeListView export eksport import ICS file importa ICS file You are deleting an event type. Nagpapahintulot ka ng isang uri ng pangyayari. All events under this type will be deleted and cannot be recovered. Ang lahat ng mga pangyayari sa ilalim ng uri na ito ay iilalim at hindi maaaring i-backup. Cancel button Iwan Delete button I-delete QObject Manage calendar Pangasiwaan ang kalendaryo Event types Uri ng pangyayari Account settings Pangkatang setting Account Acount Select items to be synced Pumili ng mga item na dapat isynchronize Events Pangyayari General settings Pangkabug-os na setting Sync interval Mga interval ng pagkakasunod-sunod Calendar account Kalendaryo account General Pangkabug-os First day of week Unang araw ng linggo Time Oras Return Today Return Ngayon Return Today Today Return Today Ngayon ScheduleTypeEditDlg New event type Bag-o nga pangungusap Edit event type I-edit ang pangungusap Import ICS file I-import ang ICS file Name: Pangalan: Color: Kulay: ICS File: ICS File: Cancel button I-cancel Save button I-save The name can not only contain whitespaces Ang pangalan ay hindi maaaring maglalaman lamang ng espasio Enter a name please Sulat ang pangalan, please Shortcut Help Tulong Delete event I-delete ang pangungusap Copy Kopyahin Cut I-cut Paste I-paste Delete I-delete Select all Pumili ng lahat SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Pumunta UserloginWidget Sign In button Mag-login Sign Out button Mag-sign out YearFrame Y Y today Today Today Ngayon linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_pl.ts000066400000000000000000001471511523260663500250660ustar00rootroot00000000000000 AccountItem Sync successful Synchronizacja zakończona Network error Błąd sieci Server exception Wyjątek serwera Storage full Pamięć pełna AccountManager Local account Konto lokalne Event types Typy wydarzeń CColorPickerWidget Color Kolor Cancel button Anuluj Save button Zapisz CDayMonthView Monday Poniedziałek Tuesday Wtorek Wednesday Środa Thursday Czwartek Friday Piątek Saturday Sobota Sunday Niedziela CDayWindow Y R M M D D Lunar Księżycowy CGraphicsView New Event Nowe wydarzenie CMonthScheduleNumItem %1 more jeszcze 1% CMonthView New event Nowe wydarzenie New Event Nowe wydarzenie CMonthWindow Y R CMyScheduleView My Event Moje wydarzenie OK button OK Delete button Usuń Edit button Edytuj CPushButton New event type Nowy typ wydarzenia CScheduleDlg New Event Nowe wydarzenie Edit Event Edytuj wydarzenie End time must be greater than start time Czas zakończenia musi być późniejszy niż czas rozpoczęcia OK button OK Never Nigdy At time of event W czasie wydarzenia 15 minutes before 15 minut przed 30 minutes before 30 minut przed 1 hour before 1 godzinę przed 1 day before 1 dzień przed 2 days before 2 dni przed 1 week before 1 tydzień przed On start day (9:00 AM) W dniu rozpoczęcia (9:00) time(s) raz(y) Enter a name please Wprowadź nazwę The name can not only contain whitespaces Nazwa nie może zawierać tylko białych znaków Type: Typ: Description: Opis: All Day: Cały dzień: Starts: Początek: Ends: Koniec: Remind Me: Przypomnij mi: Repeat: Powtórz: End Repeat: Zakończ powtarzanie: Calendar account: Konto kalendarza: Calendar account Konto kalendarza Type Typ Description Opis All Day Cały dzień Time: Czas: Time Czas Solar Słoneczny Lunar Księżycowy Starts Początek Ends Koniec Remind Me Przypomnij mi Repeat Powtórz Daily Codziennie Weekdays W dni robocze Weekly Co tydzień Monthly Co miesiąc Yearly Co rok End Repeat Zakończ Powtarzanie After Po On Wł Cancel button Anuluj Save button Zapisz CScheduleOperation All occurrences of a repeating event must have the same all-day status. Wszystkie wystąpienia powtarzającego się wydarzenia muszą zawierać ten sam stan całodniowy. Do you want to change all occurrences? Czy chcesz zmienić wszystkie wystąpienia? Cancel button Anuluj Change All Zmień wszystkie You are changing the repeating rule of this event. Zmieniasz regułę powtarzania tego wydarzenia. You are deleting an event. Usuwasz wydarzenie. Are you sure you want to delete this event? Czy na pewno chcesz usunąć to wydarzenie? Delete button Usuń Do you want to delete all occurrences of this event, or only the selected occurrence? Czy chcesz usunąć wszystkie wystąpienia tego zdarzenia, czy tylko wybrane wystąpienie? Delete All Usuń wszystkie Delete Only This Event Usuń tylko to wydarzenie Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Czy chcesz usunąć to i wszystkie przyszłe wystąpienia tego wydarzenia, czy tylko wybrane wystąpienie? Delete All Future Events Usuń wszystkie przyszłe wydarzenia You are changing a repeating event. Zmieniasz powtarzające się wydarzenie. Do you want to change only this occurrence of the event, or all occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy wszystkie wydarzenia? All Wszystko Only This Event Tylko to wydarzenie Do you want to change only this occurrence of the event, or this and all future occurrences? Czy chcesz zmienić tylko to wystąpienie wydarzenia, czy to i wszystkie przyszłe wydarzenia? All Future Events Wszystkie przyszłe wydarzenia You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Zaznaczono miesiąc przestępny, przypomnienie będzie działać zgodnie z zasadami kalendarza księżycowego. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Edytuj Delete Usuń All Day Cały dzień CScheduleSearchView No search results Brak wyników wyszukiwania CScheduleView ALL DAY CA�Y DZIEŃ CSettingDialog Sunday Niedziela Monday Poniedziałek Use System Setting Użyj ustawienia systemowego 24-hour clock Zegar 24-godzinny 12-hour clock Zegar 12-godzinny import ICS file Importuj plik ICS Manual Ręcznie 15 mins 15 min 30 mins 30 min 1 hour 1 godz 24 hours 24 godz Sync Now Synchronizuj teraz Last sync Ostatnia synchronizacja Please go to the <a href='/'>Control Center</a> to change system settings Przejdź do <a href='/'>Centrum kontroli</a>, aby zmienić ustawienia systemu CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 godzina) (%1 hours) (%1 godzin) CTitleWidget Y R M M W T D D Search events and festivals Szukaj wydarzeń i festiwalów CWeekWindow Week Tydzień Y R CYearScheduleView All Day Cały dzień No event Brak wydarzeń CYearWindow Y R CalendarWindow Calendar Kalendarz Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendarz to narzędzie umożliwiające przeglądanie dat, jak i inteligentny terminarz, w którym możesz zaplanować wszystkie wydarzenia w życiu. Calendarmainwindow Calendar Kalendarz Manage Zarządzaj Privacy Policy Polityka prywatności Syncing... Synchronizuję... Sync successful Synchronizacja zakończona Sync failed, please try later Błąd synchronizacji, spróbuj ponownie później CenterWidget All Day Cały dzień DAccountDataBase Work Praca Life Życie Other Inne DAlarmManager Close button Zamknij One day before start Dzień przed rozpoczęciem Remind me tomorrow Przypomnij mi jutro Remind me later Przypomnij mi później 15 mins later 15 minut później 1 hour later 1 godzinę później 4 hours later 4 godziny później Tomorrow Jutro Schedule Reminder Zaplanuj przypomnienie %1 to %2 %1 do %2 Today Dzisiaj DragInfoGraphicsView Edit Edytuj Delete Usuń New event Nowe wydarzenie New Event Nowe wydarzenie JobTypeListView export Eksportuj import ICS file Importuj plik ICS You are deleting an event type. Usuwasz typ wydarzenia. All events under this type will be deleted and cannot be recovered. Wszystkie wydarzenia skatalogowane pod tym typem zostaną usunięte i nie będzie można ich przywrócić. Cancel button Anuluj Delete button Usuń QObject Manage calendar Zarządzaj kalendarzem Event types Typy wydarzeń Account settings Ustawienia konta Account Konto Select items to be synced Wybierz przedmioty do synchronizacji Events Wydarzenia General settings Ustawienia ogólne Sync interval Interwał synchronizacji Calendar account Konto kalendarza General Ogólne First day of week Pierwszy dzień tygodnia Time Czas Return Today Return Dzisiaj Return Today Today Return Today Dzisiaj ScheduleTypeEditDlg New event type Nowy typ wydarzenia Edit event type Edytuj typ wydarzenia Import ICS file Importuj plik ICS Name: Nazwa: Color: Kolor: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Plik <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Anuluj Save button Zapisz The name can not only contain whitespaces Nazwa nie może zawierać tylko znaków spacji Enter a name please Wprowadź nazwę Shortcut Help Pomoc Delete event Usuń wydarzenie Copy Kopiuj Cut Wytnij Paste Wklej Delete Usuń Select all Zaznacz wszystko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Przejdź UserloginWidget Sign In button Zaloguj się Sign Out button Wyloguj się YearFrame Y R today Today Today Dzisiaj linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_pt.ts000066400000000000000000001331021523260663500250650ustar00rootroot00000000000000 AccountItem Sync successful Sincronização bem sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de evento CColorPickerWidget Color Cor Cancel button Cancelar Save button Guardar CDayMonthView Monday Seg Tuesday Ter Wednesday Qua Thursday Qui Friday Sex Saturday Sáb Sunday Dom CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more mais %1 CMonthView New event Novo evento New Event Novo evento CMonthWindow Y A CMyScheduleView My Event O meu evento OK button Aceitar Delete button Eliminar Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo evento Edit Event Editar evento End time must be greater than start time A hora de fim deve ser maior do que a hora de início OK button Aceitar Never Nunca At time of event Na hora do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No início do dia (9:00 AM) time(s) vez(es) Enter a name please Introduza um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia todo: Starts: Inicia: Ends: Termina: Remind Me: Lembrar-me: Repeat: Repetir: End Repeat: Fim de repetição: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia todo Time: Hora: Time Hora Solar Solar Lunar Lunar Starts Inicia Ends Termina Remind Me Lembrar-me Repeat Repetir Daily Diário Weekdays Dias da semana Weekly Semanal Monthly Mensal Yearly Anual End Repeat Fim da repetição After Depois On Em Cancel button Cancelar Save button Guardar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetido devem ter o mesmo estado durante todo o dia. Do you want to change all occurrences? Deseja alterar todas as ocorrências? Cancel button Cancelar Change All Alterar tudo You are changing the repeating rule of this event. Está a alterar a regra da repetição deste evento. You are deleting an event. Está a eliminar um evento. Are you sure you want to delete this event? Tem a certeza que deseja eliminar este evento? Delete button Eliminar Do you want to delete all occurrences of this event, or only the selected occurrence? Deseja eliminar todas as ocorrências deste evento ou apenas a ocorrência selecionada? Delete All Eliminar tudo Delete Only This Event Eliminar apenas este evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Deseja eliminar esta e todas as ocorrências futuras deste evento ou apenas a ocorrência selecionada? Delete All Future Events Eliminar todos os eventos futuros You are changing a repeating event. Está a alterar um evento repetido. Do you want to change only this occurrence of the event, or all occurrences? Deseja alterar apenas esta ocorrência do evento, ou todas as ocorrências? All Tudo Only This Event Apenas este evento Do you want to change only this occurrence of the event, or this and all future occurrences? Deseja alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os eventos futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Selecionou um mês bissexto, e será lembrado de acordo com as regras do calendário lunar. OK button Aceitar CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Eliminar All Day Dia todo CScheduleSearchView No search results Sem resultados de pesquisa CScheduleView ALL DAY DIA TODO CSettingDialog Sunday Domingo Monday Segunda Use System Setting Usar Configuração do Sistema 24-hour clock Relógio de 24 horas 12-hour clock Relógio de 12 horas import ICS file importar ficheiro ICS Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar agora Last sync Última sincronização Please go to the <a href='/'>Control Center</a> to change system settings Por favor, acesse o <a href='/'>Centro de Controle</a> para alterar as configurações do sistema CTimeEdit (%1 mins) (%1 mins) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Pesquisar eventos e festivais CWeekWindow Week Semana Y A CYearScheduleView All Day Dia todo No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também uma agenda diária inteligente para agendar todas as coisas na vida. Calendarmainwindow Calendar Calendário Manage Gerir Privacy Policy Política de privacidade Syncing... A sincronizar... Sync successful Sincronização bem sucedida Sync failed, please try later Falha ao sincronizar. Tente novamente mais tarde CenterWidget All Day Dia todo DAccountDataBase Work Trabalho Life Vida Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembra-me amanhã Remind me later Lembrar-me mais tarde 15 mins later 15 mins depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar lembrete %1 to %2 %1 até %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Eliminar New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar ficheiro ICS You are deleting an event type. Está a eliminar um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão eliminados e não podem ser recuperados. Cancel button Cancelar Delete button Eliminar QObject Manage calendar Gerir calendário Event types Tipos de evento Account settings Definições de conta Account Conta Select items to be synced Selecionar itens a sincronizar Events Eventos General settings Definições gerais Sync interval Intervalo de sincronização Calendar account Conta de calendário General Geral First day of week Primeiro dia da semana Time Hora Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar tipo de evento Import ICS file Importar ficheiro ICS Name: Nome: Color: Cor: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Ficheiro <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> : Cancel button Cancelar Save button Guardar The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Enter a name please Introduza um nome Shortcut Help Ajuda Delete event Eliminar evento Copy Copiar Cut Cortar Paste Colar Delete Eliminar Select all Selecionar tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Iniciar sessão Sign Out button Terminar sessão YearFrame Y A today Today Today Hoje linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_pt_BR.ts000066400000000000000000001326321523260663500254570ustar00rootroot00000000000000 AccountItem Sync successful Conexão bem-sucedida Network error Erro de rede Server exception Exceção do servidor Storage full Armazenamento cheio AccountManager Local account Conta local Event types Tipos de eventos CColorPickerWidget Color Cor Cancel button Cancelar Save button Salvar CDayMonthView Monday Segunda-feira Tuesday Terça-feira Wednesday Quarta-feira Thursday Quinta-feira Friday Sexta-feira Saturday Sábado Sunday Domingo CDayWindow Y A M M D D Lunar Lunar CGraphicsView New Event Novo evento CMonthScheduleNumItem %1 more %1 mais CMonthView New event Novo evento New Event Novo evento CMonthWindow Y A CMyScheduleView My Event Meu Evento OK button Ok Delete button Excluir Edit button Editar CPushButton New event type Novo tipo de evento CScheduleDlg New Event Novo Evento Edit Event Editar Evento End time must be greater than start time O tempo de término deve ser maior que o tempo de início OK button Ok Never Nunca At time of event No momento do evento 15 minutes before 15 minutos antes 30 minutes before 30 minutos antes 1 hour before 1 hora antes 1 day before 1 dia antes 2 days before 2 dias antes 1 week before 1 semana antes On start day (9:00 AM) No dia de início (9:00 AM) time(s) vez(es) Enter a name please Insira um nome The name can not only contain whitespaces O nome não pode conter apenas espaços em branco Type: Tipo: Description: Descrição: All Day: Dia Inteiro: Starts: Inicia em: Ends: Termina em: Remind Me: Lembre-me: Repeat: Repetir: End Repeat: Termina em: Calendar account: Conta de calendário: Calendar account Conta de calendário Type Tipo Description Descrição All Day Dia Inteiro Time: Horário: Time Formato de hora Solar Solar Lunar Lunar Starts Inicia em Ends Termina em Remind Me Lembre-me Repeat Repetir Daily Diariamente Weekdays Dias úteis Weekly Semanalmente Monthly Mensalmente Yearly Anualmente End Repeat Termina em After Depois On Ativo Cancel button Cancelar Save button Salvar CScheduleOperation All occurrences of a repeating event must have the same all-day status. Todas as ocorrências de um evento repetitivo devem ter o mesmo status durante o dia inteiro. Do you want to change all occurrences? Alterar todas as ocorrências? Cancel button Cancelar Change All Alterar Tudo You are changing the repeating rule of this event. A regra de repetição deste evento será alterada. You are deleting an event. Um evento será excluído. Are you sure you want to delete this event? Excluir este evento? Delete button Excluir Do you want to delete all occurrences of this event, or only the selected occurrence? Excluir todas as ocorrências deste evento; ou apenas a ocorrência selecionada? Delete All Excluir tudo Delete Only This Event Excluir Apenas Este Evento Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Excluir este evento e todas as suas ocorrências futuras; ou apenas a ocorrência selecionada? Delete All Future Events Excluir todos os eventos futuros You are changing a repeating event. Você está alterando um evento repetitivo. Do you want to change only this occurrence of the event, or all occurrences? Alterar apenas esta ocorrência do evento ou todas as ocorrências? All Tudo Only This Event Apenas Este Evento Do you want to change only this occurrence of the event, or this and all future occurrences? Alterar apenas esta ocorrência do evento ou esta e todas as ocorrências futuras? All Future Events Todos os Eventos Futuros You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Você selecionou um mês bissexto e será lembrado de acordo com as regras do calendário lunar. OK button Ok CScheduleSearchDateItem Y A M M D D CScheduleSearchItem Edit Editar Delete Excluir All Day Dia Inteiro CScheduleSearchView No search results Nenhum resultado encontrado CScheduleView ALL DAY DIA INTEIRO CSettingDialog Sunday Domingo Monday Segunda-feira Use System Setting Utilizar a configuração do sistema 24-hour clock 24 horas 12-hour clock 12 horas import ICS file importar arquivo ICS Manual Manual 15 mins 15 mins 30 mins 30 mins 1 hour 1 hora 24 hours 24 horas Sync Now Sincronizar Agora Last sync Última sincronização Please go to the Control Center to change system settings Acesse as Configurações para alterar as configurações do sistema CTimeEdit (%1 mins) (%1 minutos) (%1 hour) (%1 hora) (%1 hours) (%1 horas) CTitleWidget Y A M M W S D D Search events and festivals Procurar eventos e datas comemorativas CWeekWindow Week Semana Y A CYearScheduleView All Day Dia Inteiro No event Nenhum evento CYearWindow Y A CalendarWindow Calendar Calendário Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. O Calendário é uma ferramenta para visualizar datas e também um planejador diário inteligente para programar todas as coisas da vida. Calendarmainwindow Calendar Calendário Manage Gerenciar Privacy Policy Política de privacidade Syncing... Sincronizando... Sync successful Sincronização bem-sucedida Sync failed, please try later A sincronização falhou, tente novamente mais tarde CenterWidget All Day Dia Inteiro DAccountDataBase Work Trabalho Life Social Other Outro DAlarmManager Close button Fechar One day before start Um dia antes do início Remind me tomorrow Lembre-me amanhã Remind me later Lembre-me mais tarde 15 mins later 15 minutos depois 1 hour later 1 hora depois 4 hours later 4 horas depois Tomorrow Amanhã Schedule Reminder Agendar Lembrete %1 to %2 %1 às %2 Today Hoje DragInfoGraphicsView Edit Editar Delete Excluir New event Novo evento New Event Novo evento JobTypeListView export exportar import ICS file importar arquivo ICS You are deleting an event type. Você está eliminando um tipo de evento. All events under this type will be deleted and cannot be recovered. Todos os eventos deste tipo serão eliminados e não poderão ser recuperados. Cancel button Cancelar Delete button Excluir QObject Manage calendar Gerenciar calendário Event types Tipos de eventos Account settings Configurações de conta Account Contas Select items to be synced Selecionar itens para sincronizar Events Eventos General settings Configurações gerais Sync interval Intervalo de sincronização Calendar account Conta de calendário General Geral First day of week Primeiro dia da semana Time Formato de hora Return Today Return Hoje Return Today Today Return Today Hoje ScheduleTypeEditDlg New event type Novo tipo de evento Edit event type Editar o tipo de evento Import ICS file Importar arquivo ICS Name: Nome: Color: Cor: ICS File: Arquivo ICS: Cancel button Cancelar Save button Salvar The name can not only contain whitespaces O nome não pode ser apenas espaços em branco Enter a name please Insira um nome Shortcut Help Ajuda Delete event Excluir evento Copy Copiar Cut Recortar Paste Colar Delete Excluir Select all Selecionar Tudo SidebarCalendarWidget Y A M M TimeJumpDialog Go button Ir UserloginWidget Sign In button Entrar Sign Out button Sair YearFrame Y A today Today Today Hoje linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ro.ts000066400000000000000000001473721523260663500251000ustar00rootroot00000000000000 AccountItem Sync successful Sincronizare reușită Network error Eroare de rețea Server exception Excepție server Storage full Spațiu de stocare încărcat AccountManager Local account Cont local Event types Tipuri de evenimente CColorPickerWidget Color Culoare Cancel button Anulează Save button Salvare CDayMonthView Monday Luni Tuesday Marţi Wednesday Miercuri Thursday Joi Friday Vineri Saturday Sâmbătă Sunday Duminică CDayWindow Y Y M l D z Lunar Lunar CGraphicsView New Event Eveniment nou CMonthScheduleNumItem %1 more %1 mai mult CMonthView New event Eveniment nou New Event Eveniment nou CMonthWindow Y A CMyScheduleView My Event Evenimentul meu OK button Ok Delete button Ștergeți Edit button Editare CPushButton New event type Tip nou de eveniment CScheduleDlg New Event Eveniment nou Edit Event Editare eveniment End time must be greater than start time Ora de încheiere trebuie să fie mai mare decât ora de început OK button Ok Never Niciodată At time of event La momentul evenimentului 15 minutes before Cu 15 minute înainte 30 minutes before Cu 30 minute înainte 1 hour before Cu 1 oră înainte 1 day before Cu 1 zi înainte 2 days before Cu 2 zile înainte 1 week before Cu 1 săptămână înainte On start day (9:00 AM) Începutul zilei (9:00 AM) time(s) ori Enter a name please Introduceți un nume, vă rugăm The name can not only contain whitespaces Numele nu poate conține numai spații libere Type: Tip: Description: Descriere: All Day: Toată ziua: Starts: Începe: Ends: Se termină: Remind Me: Aminteşte-mi: Repeat: Repetă: End Repeat: Repetarea se termină: Calendar account: Cont calendar: Calendar account Cont calendari Type Tip Description Descriere All Day Toată ziua Time: Oră: Time Oră Solar Solar Lunar Lunar Starts Începe Ends Se termină Remind Me Aminteşte-mi Repeat Repetă Daily Zilnic Weekdays Zilele saptămânii Weekly Săptămânal Monthly Lunar Yearly Anual End Repeat Opreşte repetarea After După On Pornire Cancel button Anulează Save button Salvare CScheduleOperation All occurrences of a repeating event must have the same all-day status. Toate aparițiile unui eveniment repetat trebuie să aibă același statut toată ziua. Do you want to change all occurrences? Doriți să schimbați toate aparițiile? Cancel button Anulează Change All Schimbă tot You are changing the repeating rule of this event. Modificați regula de repetare a acestui eveniment. You are deleting an event. Ştergeţi un eveniment. Are you sure you want to delete this event? Sigur doriţi să ştergeţi acest eveniment? Delete button Ștergeți Do you want to delete all occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Şterge tot Delete Only This Event Şterge doar acest eveniment Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doriți să ștergeți toate aparițiile acestui eveniment sau doar evenimentul selectat? Delete All Future Events Şterge toate evenimentele viitoare You are changing a repeating event. Modificați un eveniment care se repetă. Do you want to change only this occurrence of the event, or all occurrences? Doriți să schimbați doar această apariție a evenimentului sau toate evenimentele? All Tot Only This Event Doar acest eveniment Do you want to change only this occurrence of the event, or this and all future occurrences? Doriți să schimbați doar această apariție a evenimentului sau aceasta și toate evenimentele viitoare? All Future Events Toate evenimentele viitoare You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ați selectat o lună bisectă și vi se va aminti în conformitate cu regulile calendarului lunar. OK button Ok CScheduleSearchDateItem Y A M L D Z CScheduleSearchItem Edit Editează Delete Șterge All Day Toată ziua CScheduleSearchView No search results Niciun rezultat la căutare CScheduleView ALL DAY TOATĂ ZIUA CSettingDialog Sunday Duminică Monday Luni Use System Setting Utilizați setarea sistemului 24-hour clock Mod ceas 24 ore 12-hour clock Mod ceas 12 ore import ICS file importați fișierul ICS Manual Manual 15 mins 15 minute 30 mins 30 minute 1 hour 1 oră 24 hours 24 ore Sync Now Sincronizează acum Last sync Ultima sincronizare Please go to the <a href='/'>Control Center</a> to change system settings Vă rugăm să accesați <a href='/'>Control Center</a> pentru a modifica setările sistemului CTimeEdit (%1 mins) (%1 minnute) (%1 hour) (%1 oră) (%1 hours) (%1 ore) CTitleWidget Y A M L W S D Z Search events and festivals Căutare evenimente și festivaluri CWeekWindow Week Săptămână Y A CYearScheduleView All Day Toată ziua No event Nici un eveniment CYearWindow Y A CalendarWindow Calendar Calendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Calendarul este un instrument pentru a vizualiza datele și, de asemenea, un planificator inteligent zilnic pentru a programa toate lucrurile din viață. Calendarmainwindow Calendar Calendar Manage Gestionare Privacy Policy Politica de Confidențialitate Syncing... Sincronizare... Sync successful Sincronizare reușită Sync failed, please try later Sincronizarea a eșuat, vă rugăm să încercați mai târziu CenterWidget All Day Toată ziua DAccountDataBase Work Serviciu Life Viaţă Other Altul DAlarmManager Close button Închidere One day before start O zi înainte de a începe Remind me tomorrow Reaminteşte mâine Remind me later Reaminteşte mai târziu 15 mins later peste 15 minute 1 hour later peste 1 oră 4 hours later peste 4 ore Tomorrow Mâine Schedule Reminder Programare Reminder %1 to %2 %1 la %2 Today Astăzi DragInfoGraphicsView Edit Editare Delete Ștergeți New event Eveniment nou New Event Eveniment nou JobTypeListView export exportare import ICS file importați fișierul ICS You are deleting an event type. Ștergeți un tip de eveniment. All events under this type will be deleted and cannot be recovered. Toate evenimentele de acest tip vor fi șterse și nu vor putea fi recuperate. Cancel button Anulează Delete button Ștergeți QObject Manage calendar Gestionare calendar Event types Tipuri de evenimente Account settings Setări cont Account Cont Select items to be synced Selectați elementele care urmează să fie sincronizate Events Evenimente General settings Setări generale Sync interval Interval de sincronizare Calendar account Cont calendar General General First day of week Prima zi a săptămânii Time Oră Return Today Return Astăzi Return Today Today Return Today Astăzi ScheduleTypeEditDlg New event type Tip nou de eveniment Edit event type Editarea tipului de eveniment Import ICS file Importați fișierul ICS Name: Nume: Color: Culoare: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Fișier <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Cancel button Anulează Save button Salvare The name can not only contain whitespaces Numele nu poate conține numai spații albe Enter a name please Introduceți un nume, vă rugăm Shortcut Help Ajutor Delete event Ştergere eveniment Copy Copiere Cut Tăiere Paste Lipire Delete Ștergeți Select all Selectează totul SidebarCalendarWidget Y Y M l TimeJumpDialog Go button Mergi UserloginWidget Sign In button Conectați-vă Sign Out button Deconectați-vă YearFrame Y A today Today Today Astăzi linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ru.ts000066400000000000000000001405341523260663500250770ustar00rootroot00000000000000 AccountItem Sync successful У�пешна� �инхронизаци� Network error Ошибка �ети Server exception И�ключение �ервера Storage full Хранилище заполнено AccountManager Local account Учетна� запи�ь домена Event types Типы �обытий CColorPickerWidget Color Цвет Cancel button Отмена Save button Сохранить CDayMonthView Monday Понедельник Tuesday Вторник Wednesday Среда Thursday Четверг Friday П�тница Saturday Суббота Sunday Во�кре�енье CDayWindow Y Г M М D Д Lunar Лунный CGraphicsView New Event �овое Событие CMonthScheduleNumItem %1 more более %1 CMonthView New event �овое �обытие New Event �овое Событие CMonthWindow Y Г CMyScheduleView My Event Моё �обытие OK button OK Delete button Удалить Edit button Редактировать CPushButton New event type �овый тип �обыти� CScheduleDlg New Event �овое �обытие Edit Event Редактировать �обытие End time must be greater than start time Врем� окончани� должно быть больше времени начала OK button OK Never �икогда At time of event Во врем� �обыти� 15 minutes before За 15 минут до �того 30 minutes before За 30 минут до �того 1 hour before За 1 ча� до �того 1 day before За 1 день до �того 2 days before За 2 дн� до �того 1 week before За 1 неделю до �того On start day (9:00 AM) В день начала (9:00) time(s) раз(а) Enter a name please Введите им�, пожалуй�та The name can not only contain whitespaces Им� не может �одержать только пробелы Type: Тип: Description: Опи�ание: All Day: Ве�ь день: Starts: �ачинает��: Ends: Заканчивает��: Remind Me: �апомнить: Repeat: Повтор�ть: End Repeat: Повтор�ть до: Calendar account: Учетна� запи�ь календар�: Calendar account Учетна� запи�ь календар�: Type Тип Description Опи�ание All Day Ве�ь день Time: Врем�: Time Врем� Solar Солнечно Lunar Лунный Starts �ачало Ends Конец Remind Me �апомнить Repeat Повтор�ть Daily Ежедневно Weekdays По будн�м Weekly Еженедельно Monthly Ежеме��чно Yearly Ежегодно End Repeat Повтор�ть до: After По�ле On Вкл. Cancel button Отмена Save button Сохранить CScheduleOperation All occurrences of a repeating event must have the same all-day status. В�е �кземпл�ры повтор�ющего�� �обыти� должны иметь одинаковый �тату� в течение в�его дн�. Do you want to change all occurrences? Вы хотите изменить в�е �кземпл�ры? Cancel button Отмена Change All Изменить в�е You are changing the repeating rule of this event. Вы измен�ете правило повторени� �того �обыти�. You are deleting an event. Вы удал�ете �обытие. Are you sure you want to delete this event? Вы дей�твительно хотите удалить �обытие? Delete button Удалить Do you want to delete all occurrences of this event, or only the selected occurrence? Вы хотите удалить в�е �кземпл�ры данного �обыти� или только выбранного �кземпл�ра? Delete All Удалить в�е Delete Only This Event Удалить только �то �обытие Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Вы хотите удалить только �то и будущие про�влени� �обыти� или только выбранные про�влени�? Delete All Future Events Удалить В�е Будущие Событи� You are changing a repeating event. Вы измен�ете повтор�ющее�� �обытие Do you want to change only this occurrence of the event, or all occurrences? Вы хотите изменить только �то про�вление �обыти� или в�е про�влени�. All В�е Only This Event Только Это Событие Do you want to change only this occurrence of the event, or this and all future occurrences? Вы хотите изменить только �то про�вление данного �обыти� или в�ё �обытие и в�е будущие про�влени�? All Future Events Только Будущие Событи� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вы выбрали ви�око�ный ме��ц, вы будете оповещены об �том в �оответ�твии � правилами лунного календар�. OK button OK CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Правка Delete Удалить All Day Ве�ь День CScheduleSearchView No search results Пои�к результатов не дал CScheduleView ALL DAY ВЕСЬ ДЕ�Ь CSettingDialog Sunday Во�кре�енье Monday Понедельник Use System Setting И�пользовать на�тройки �и�темы 24-hour clock 24-ча�овой 12-hour clock 12-ча�овой формат времени import ICS file импорт файла ICS Manual Вручную 15 mins 15 минут 30 mins 30 минут 1 hour 1 ча� 24 hours 24 ча�а Sync Now Синхронизировать Сейча� Last sync По�ледн�� �инхронизаци� Please go to the <a href='/'>Control Center</a> to change system settings Пожалуй�та, перейдите в <a href='/'>Центр управлени�</a>, чтобы изменить на�тройки �и�темы CTimeEdit (%1 mins) (%1 минут) (%1 hour) (%1 ча�) (%1 hours) (%1 ча�ов) CTitleWidget Y Г M М W � D Д Search events and festivals Пои�к меропри�тий и фе�тивалей CWeekWindow Week �едел� Y Г CYearScheduleView All Day Ве�ь День No event �ет �обыти� CYearWindow Y Г CalendarWindow Calendar Календарь Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календарь - �то ин�трумент дл� про�мотра дат, а также умный ежедневник дл� планировани� в�ех �обытий вашей пов�едневной жизни. Calendarmainwindow Calendar Календарь Manage Управление Privacy Policy Политика конфиденциально�ти Syncing... Синхронизаци�... Sync successful У�пешна� �инхронизаци� Sync failed, please try later �е удало�ь �инхронизировать, пожалуй�та, попробуйте позже CenterWidget All Day Ве�ь День: DAccountDataBase Work Работа Life Жизнь Other О�тальное DAlarmManager Close button Закрыть One day before start За день до начала Remind me tomorrow �апомнить завтра Remind me later �апомнить позже 15 mins later Спу�т� 15 минут 1 hour later Спу�т� 1 ча� 4 hours later Спу�т� 4 ча�а Tomorrow Завтра Schedule Reminder �апоминание о ра�пи�ании %1 to %2 от 1% до %2 Today Сегодн� DragInfoGraphicsView Edit Редактировать Delete Удалить New event �овое �обытие New Event �овое Событие JobTypeListView export Эк�порт import ICS file импорт файла ICS You are deleting an event type. Вы удал�ете тип �обыти�. All events under this type will be deleted and cannot be recovered. В�е �обыти� �того типа будут удалены и не подлежат во��тановлению. Cancel button Отмена Delete button Удалить QObject Manage calendar Управление календарем Event types Типы �обытий Account settings �а�тройки учетной запи�и Account Учетна� запи�ь Select items to be synced Выберите �лементы дл� �инхронизации Events Событи� General settings Общие на�тройки Sync interval Интервал �инхронизации Calendar account Учетна� запи�ь календар�: General Общие First day of week Первый день недели Time Врем� Return Today Return Сегодн� Return Today Today Return Today Сегодн� ScheduleTypeEditDlg New event type �овый тип �обыти� Edit event type Редактировать тип �обыти� Import ICS file импорт файла ICS Name: Им�: Color: Цвет: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS1</a>Файл: Cancel button Отмена Save button Сохранить The name can not only contain whitespaces Им� не может �одержать только пробелы Enter a name please Введите им�, пожалуй�та Shortcut Help Помощь Delete event Удалить �обытие Copy Копировать Cut Вырезать Paste В�тавить Delete Удалить Select all Выбрать в�ё SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Вперед UserloginWidget Sign In button Войти Sign Out button Выйти YearFrame Y Г today Today Today Сегодн� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sc.ts000066400000000000000000001353241523260663500250570ustar00rootroot00000000000000 AccountItem Sync successful مزامنة ناجحة Network error خطأ �ي الشبكة Server exception استثناء �ي الخادم Storage full الخزن ممتلئ AccountManager Local account الحساب المحلي Event types أنواع الأحداث CColorPickerWidget Color اللون Cancel button إلغاء Save button ح�ظ CDayMonthView Monday الاثنين Tuesday الثلاثاء Wednesday الأربعاء Thursday الخميس Friday الجمعة Saturday السبت Sunday الأحد CDayWindow Y ي M م D د Lunar 农历 CGraphicsView New Event حدث جديد CMonthScheduleNumItem %1 more %1 أكثر CMonthView New event حدث جديد New Event حدث جديد CMonthWindow Y ي CMyScheduleView My Event حدثي OK button نعم Delete button حذ� Edit button تعديل CPushButton New event type نوع حدث جديد CScheduleDlg New Event حدث جديد Edit Event تحرير الحدث End time must be greater than start time يجب أن يكون وقت الانتهاء أكبر من وقت البدء OK button موا�ق Never 从� At time of event �ي وقت الحدث 15 minutes before 15 دقيقة قبل 30 minutes before 30 دقيقة قبل 1 hour before ساعة قبل 1 day before يوم قبل 2 days before يومين قبل 1 week before أسبوع قبل On start day (9:00 AM) �ي يوم البدء (9:00 صباحًا) time(s) الوقت(ات) Enter a name please يرجى إدخال اسم The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على المسا�ات البيضاء Type: نوع: Description: الوص�: All Day: ال整天: Starts: يبدأ �ي: Ends: ينتهي �ي: Remind Me: ت Remind Me: Repeat: تكرار: End Repeat: إنهاء التكرار: Calendar account: حساب الجدول الزمني: Calendar account حساب الجدول الزمني Type نوع Description الوص� All Day ال整天 Time: الوقت: Time الوقت Solar الس�ّنّي Lunar الق�مري Starts يبدأ Ends ينتهي Remind Me تذكّرني Repeat تكرار Daily يوميًا Weekdays أيام الأسبوع Weekly أسبوعيًا Monthly شهريًا Yearly سنويًا End Repeat إنهاء التكرار After بعد On �ي Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. يجب أن يكون جميع المواجهات لحدث تكراري لها الحالة ن�سها من الحضور الكامل. Do you want to change all occurrences? هل ترغب �ي تغيير جميع المواجهات؟ Cancel button إلغاء Change All تغيير جميع You are changing the repeating rule of this event. أنت تقوم بتغيير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك �ي حذ� هذا الحدث؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� جميع المواجهات لهذا الحدث، أم �قط المواجهة المحددة؟ Delete All حذ� جميع Delete Only This Event حذ� �قط هذا الحدث Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� هذا الحدث وأيامه المستقبلية، أم �قط المواجهة المحددة؟ Delete All Future Events حذ� جميع المواجهات المستقبلية You are changing a repeating event. أنت تقوم بتغيير حدث تكراري. Do you want to change only this occurrence of the event, or all occurrences? هل تريد تغيير هذه المرة �قط من الحدث، أم جميع المرات؟ All جميع Only This Event �قط هذا الحدث Do you want to change only this occurrence of the event, or this and all future occurrences? هل تريد تغيير هذه المرة �قط من الحدث، أم هذه والجميع �ي المستقبل؟ All Future Events جميع الأحداث المستقبلية You have selected a leap month, and will be reminded according to the rules of the lunar calendar. لقد اخترت شهرًا زائدًا، وسيتم تذكيرك و�قًا للقواعد الخاصة بالGregorian. OK button موا�ق CScheduleSearchDateItem Y نعم M شهر D يوم CScheduleSearchItem Edit تعديل Delete حذ� All Day ال整天 CScheduleSearchView No search results لا نتائج للبحث CScheduleView ALL DAY ال整天 CSettingDialog Sunday الأحد Monday الاثنين Use System Setting استخدم إعداد النظام 24-hour clock الساعة 24 ساعة 12-hour clock الساعة 12 ساعة import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour ساعة واحدة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync التحديث الأخير Please go to the Control Center to change system settings يرجى الانتقال إلى مركز التحكم لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقائق) (%1 hour) (%1 ساعة) (%1 hours) (%1 ساعات) CTitleWidget Y Y M M W W D D Search events and festivals بحث عن ال�عاليات والاحت�الات CWeekWindow Week الأسبوع Y Y CYearScheduleView All Day ال整天 No event لا يوجد حدث CYearWindow Y Y CalendarWindow Calendar التقويم Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. التقويم هو أداة لعرض التواريخ، كما هو مخطط يومي ذكي لتنظيم جميع الأمور �ي الحياة. Calendarmainwindow Calendar التقويم Manage إدارة Privacy Policy سياسة الخصوصية Syncing... جاري التزامن... Sync successful تم التزامن بنجاح Sync failed, please try later �شل التزامن، يرجى المحاولة لاحقًا CenterWidget All Day ال整天 DAccountDataBase Work العمل Life الحياة Other الآخر DAlarmManager Close button إغلاق One day before start يوم واحد قبل البدء Remind me tomorrow تذكيرني غدًا Remind me later تذكيرني لاحقًا 15 mins later 15 دقيقة لاحقًا 1 hour later 1 ساعة لاحقاً 4 hours later 4 ساعات لاحقاً Tomorrow غدًا Schedule Reminder تذكير الجدول %1 to %2 '%1 إلى %2' Today اليوم DragInfoGraphicsView Edit تعديل Delete حذ� New event حدث جديد New Event حدث جديد JobTypeListView export تصدير import ICS file استيراد مل� ICS You are deleting an event type. أنت تقوم بحذ� نوع الحدث. All events under this type will be deleted and cannot be recovered. سيتم حذ� جميع الحوادث التابعة لهذا النوع ولا يمكن استعادتها. Cancel button إلغاء Delete button حذ� QObject Manage calendar إدارة الجدول Event types أنواع الحوادث Account settings إعدادات الحساب Account الحساب Select items to be synced اختر العناصر التي سيتم تزامنها Events الحوادث General settings إعدادات العامة Sync interval �ترة التزامن Calendar account حساب الجدول General العامة First day of week اليوم الأول من الأسبوع Time الوقت Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type نوع حدث جديد Edit event type تحرير نوع الحدث Import ICS file استيراد مل� ICS Name: الاسم: Color: اللون: ICS File: مل� ICS: Cancel button إلغاء Save button ح�ظ The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات بيضاء Enter a name please يرجى إدخال اسم Shortcut Help مساعدة Delete event حذ� الحدث Copy نسخ Cut قص Paste لصق Delete حذ� Select all اختر الكل SidebarCalendarWidget Y س M شهر TimeJumpDialog Go button الذهاب UserloginWidget Sign In button تسجيل الدخول Sign Out button تسجيل الخروج YearFrame Y س today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_si.ts000066400000000000000000001464351523260663500250720ustar00rootroot00000000000000 AccountItem Sync successful සම්පූර්ණ ස්�යුන්ක් විය Network error නෑට්වර්ක් අයිතිය Server exception සර්වර් අයිතිය Storage full ස්ට�ර්ඩ් අති අවම විය AccountManager Local account ලොකල් අක�ළු Event types උදෙස� ප්�රක�ර� CColorPickerWidget Color ර��ි Cancel button අවලංගු කරන්න Save button සුරකින්න CDayMonthView Monday සඳුද� Tuesday අඟහරුව�ද� Wednesday බද�ද� Thursday බ්�රහස්පතින්ද� Friday සිකුර�ද� Saturday සෙනසුර�ද� Sunday ඉරිද� CDayWindow Y වස M මස D දින Lunar ල�න�ර් CGraphicsView New Event නව හමුවක් CMonthScheduleNumItem %1 more තවත් %1 CMonthView New event නව සිදුවීමක් New Event නව හමුවක් CMonthWindow Y වස CMyScheduleView My Event මගේ හමුව OK button හරි Delete button මක� දමන්න Edit button සංස්කරණය කරන්න CPushButton New event type නව උදෙස� ප්�රක�ර� CScheduleDlg New Event නව හමුවක් Edit Event හමුව සංස්කරණය කරන්න End time must be greater than start time අවසන් කෙරෙන වේල�ව ආරම්භ කෙරෙන වේල�වට වඩ� ව�ඩි විය යුතුය OK button හරි Never කිසිද� න�ත At time of event හමුව යොද�ගත් වේල�වේදී 15 minutes before මිනිත්තු 15 කට පෙර 30 minutes before මින්ත්තු 30 කට පෙර 1 hour before ප�ය 1 කට පෙර 1 day before දින 1 කට පෙර 2 days before දින 2 කට පෙර 1 week before සති 1 කට පෙර On start day (9:00 AM) ඇරඹෙන දින (පෙ.ව 9.00) time(s) වේල�ව (න්) Enter a name please කරුණ�කර නමක් ඇති කරන්න The name can not only contain whitespaces නමක් පමණක් ප්�රං� අක්ෂර සඳහ� ඇති විය Type: වර්ගය: Description: විස්තරය: All Day: දිනය පුර�ම: Starts: අ��රම්භය: Ends: අවස�නය: Remind Me: මට මතක් කරන්න: Repeat: න�වත කරන්න: End Repeat: පුනර�වර්තනය අවසන් කරන්න: Calendar account: ක�ල් අක�ළු: Calendar account ක�ල් අක�ළු Type වර්ගය Description විස්තරය All Day දිනය පුර�ම Time: සියල්ල අවම විය Time සියල්ල Solar ස�ල�ර් Lunar ල�න�ර් Starts ආරම්භය Ends අවස�නය Remind Me මට මතක් කරන්න Repeat පුනර�වර්තන Daily දිනපත� Weekdays සතියේ දින Weekly සති පත� Monthly ම�සිකව Yearly ව�ර්ෂිකව End Repeat පුනර�වර්තනය අවසන් කරන්න After පසුව On මත Cancel button අවලංගු කරන්න Save button සුරකින්න CScheduleOperation All occurrences of a repeating event must have the same all-day status. පුනර�වර්තන හමුවන්ගේ සියලු හමුවන් දිනය පුර� තත්වයේ තිබිය යුතුය. Do you want to change all occurrences? ඔබට සියලු පුනර�වර්ථනයන් වෙනස් කිරීමද අව�්�යද? Cancel button අවලංගු කරන්න Change All සියල්ල වෙනස් කරන්න You are changing the repeating rule of this event. ඔබ මෙම හමුවේ පුනර�වර්තන රීතීන් වෙනස් කරමින් සිටී. You are deleting an event. ඔබ හමුවක් මක� දමයි. Are you sure you want to delete this event? මෙම හමුව මක� ද�මීමට අව�්�ය බව ඔබට වි�්ව�සද? Delete button මක� දමන්න Do you want to delete all occurrences of this event, or only the selected occurrence? මෙම හමුවේ සියලුම පුනර�වර්තනයන් මක� ද�මීමට ඔබට අව�්�යද, න�තහොත් ත�ර�ගත් හමුව පමණක්ද? Delete All සියල්ල මක� දමන්න Delete Only This Event මෙම හමුව පමණක් මක� දමන්න Do you want to delete this and all future occurrences of this event, or only the selected occurrence? ඔබට මෙම හමුව සහ මෙම හමුවේ ස�ලසුම් කල සියලු හමුවන් මක� ද�මීමට අව�්�යද, න�තහොත් මෙම ත�ර�ගත් හමුව පමණද? Delete All Future Events සියලු යොද�ගත් හමුවන් මක� දමන්න You are changing a repeating event. ඔබ පුනර�වර්තන හමුවක් වෙනස් කරමින් සිටී. Do you want to change only this occurrence of the event, or all occurrences? ඔබට මෙම පුනර�වර්තන හමුවේ මෙම හමුව පමණක් වෙනස් කිරීමට අව�්�යද, න�තිනම් සියලු පුනර�වර්තනයන් වෙනස් කල යුතුද? All සියල්ලම Only This Event මෙම හමුව පමණි Do you want to change only this occurrence of the event, or this and all future occurrences? ඔබට මෙම හමුව සහ මෙම හමුවේ ස�ලසුම් කල සියලු හමුවන් වෙනස් කිරීමට අව�්�යද, න�තහොත් මෙම ත�ර�ගත් හමුව පමණද? All Future Events සියලුම අන�ගත හමුවන් You have selected a leap month, and will be reminded according to the rules of the lunar calendar. ඔබ ලෙප් ම�සයක් ත�ර� ගත්තේ තිබේ ය�ම සියල්ල අවම විය සියල්ල අවම විය අනුව ප්�රම�ණය නියුති කරන්න OK button හරි CScheduleSearchDateItem Y වස M මස D දින CScheduleSearchItem Edit සංස්කරණය කරන්න Delete මක� දමන්න All Day දිනය පුර�ම CScheduleSearchView No search results සෙවුම් ප්�රතිඵල නොම�ත CScheduleView ALL DAY දිනය පුර�ම CSettingDialog Sunday ඉරිද� Monday සඳුද� Use System Setting ස්යුස්ටම් ස්�යුටින් භ�විත� කරන්න 24-hour clock 24 විය මිනිත්තු ප්�රක�ර� 12-hour clock 12 විය මිනිත්තු ප්�රක�ර� import ICS file ICS අර්බුදය භ�වයිත� කරන්න Manual සව්�යං 15 mins 15 මිනිත්තු 30 mins 30 මිනිත්තු 1 hour 1 විය 24 hours 24 විය Sync Now සම්පූර්ණ න�වත Last sync අවසන් සම්පූර්ණය Please go to the Control Center to change system settings කරුණ�කර ස්�යුස්ටම් ස්�යුටින් වෙනස් කරන්න අති අවම විය ක්�රොස් කේන්ටර් CTimeEdit (%1 mins) (%1 මිනිත්තු) (%1 hour) (%1 နာရီ) (%1 hours) (%1 နာရီ) CTitleWidget Y වස M මස W සති D දින Search events and festivals အာ�ာပြုံးနှင့် ပွဲလမ်းများကို ရှာဖွေပါ CWeekWindow Week සතිය Y වර් CYearScheduleView All Day දිනය පුර�ම No event හමුවන් නොම�ත CYearWindow Y වර් CalendarWindow Calendar දින දසුන Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. දින දසුන යනු දිනයන් බ�ලීමට මෙන්ම ජීවිතයේ සෑම දෙයක්ම ස�ලසුම් කිරීමට �භ�විත කල හ�කි දෛනික ස�ලසුම්කරන යෙදවුමකි. Calendarmainwindow Calendar දින දසුන Manage စီမံ�န့်မှန်း�ျက် Privacy Policy ပိုင်�ွ�利ာစီမံ�န့်မှန်း�ျက် Syncing... සමමුහුර්ත වෙමින්... Sync successful စီမံ�န့်မှန်း�ျက်အောင်မြင်ပါသည် Sync failed, please try later မှားယွင်း�ဲ့ပါသည်� နောက်�စ်ကြိမ်ကြိုးစားပါ CenterWidget All Day දිනය පුර�ම DAccountDataBase Work ක�ර්යය Life ජීවිතය Other වෙනත් DAlarmManager Close button වස� දමන්න One day before start ආරම්භ කිරීමට ඇත්තේ එක් දිනක් පමණි Remind me tomorrow මට හෙට මතක් කරන්න Remind me later මට පසුව මතක් කරන්න 15 mins later �� မိနစ်နောက်�ွင် 1 hour later � နာရီနောက်�ွင် 4 hours later � နာရီနောက်�ွင် Tomorrow හෙට Schedule Reminder මතක් කිරීමක් සකසන්න %1 to %2 '%1 မှ %2' Today අද DragInfoGraphicsView Edit සංස්කරණය කරන්න Delete මක� දමන්න New event නව සිදුවීමක් New Event නව හමුවක් JobTypeListView export ထု�်ပြန် import ICS file ICS ဖိုင်ကို အသုံးပြု You are deleting an event type. သင်သည် အာ�ာပြုံးအမျိုးအစားကို ဖျက်ပစ်နေပါသည်� All events under this type will be deleted and cannot be recovered. အာ�ာပြုံးအမျိုးအစားအောက်ရှိ အာ�ာပြုံးများသည် ဖျက်� ပြန်လည်ရယူနိုင်မည်မဟု�်ပါ Cancel button අවලංගු කරන්න Delete button මක� දමන්න QObject Manage calendar အာ�ာပြုံးကို စီမံ�န့်မှန်း�ျက် Event types အာ�ာပြုံးအမျိုးအစားများ Account settings အကောင့် စီမံ�န့်မှန်း�ျက် Account පරි�ීලක ගිණුම Select items to be synced စီမံ�န့်မှန်း�ျက်အ�ွက် ပစ္စည်းများကို ရွေးပါ Events အာ�ာပြုံးများ General settings အသီးသီး စီမံ�န့်မှန်း�ျက် Sync interval စီမံ�န့်မှန်း�ျက်အကြားအကွာအ�ေး Calendar account အာ�ာပြုံးအကောင့် General පොදු First day of week ပြုံးအ�ွင် ပထမနေ့ Time အ�ျိန် Return Today Return අද Return Today Today Return Today අද ScheduleTypeEditDlg New event type အသစ်အာ�ာပြုံးအမျိုးအစား Edit event type အာ�ာပြုံးအမျိုးအစားကို ပြင်ဆင် Import ICS file ICS ဖိုင်ကို အသုံးပြု Name: නම: Color: 'အားလုံး:' ICS File: 'ICS ဖိုင်:' Cancel button අවලංගු කරන්න Save button සුරකින්න The name can not only contain whitespaces මෙම නම අවම අඩංගු වි��ල පිය�ස් විය හ�කි Enter a name please කරුණ�කර නමක් ඇතිව තිය� ගන්න Shortcut Help උදව් Delete event හමුව මක� දමන්න Copy පිටපත් කරන්න Cut කපන්න Paste අලවන්න Delete මකන්න Select all සියල්ල ලකුණු කරන්න SidebarCalendarWidget Y වස M මස TimeJumpDialog Go button විය UserloginWidget Sign In button පුරනය වන්න Sign Out button ඉවත් වන්න YearFrame Y වර් today Today Today අද linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sk.ts000066400000000000000000001331611523260663500250640ustar00rootroot00000000000000 AccountItem Sync successful Synchronizácia úspešná Network error Chyba siete Server exception Výnimka serveru Storage full Úložisko je plné AccountManager Local account Miestny ú�et Event types Typy udalostí CColorPickerWidget Color Farba Cancel button Zrušiť Save button Uložiť CDayMonthView Monday Pondelok Tuesday Utorok Wednesday Streda Thursday Štvrtok Friday Piatok Saturday Sobota Sunday Nedeľa CDayWindow Y R M M D D Lunar Lunárny CGraphicsView New Event Nová udalosť CMonthScheduleNumItem %1 more ešte %1 CMonthView New event Nová udalosť New Event Nová udalosť CMonthWindow Y R CMyScheduleView My Event Moja udalosť OK button OK Delete button Vymazať Edit button Upraviť CPushButton New event type Nový typ udalosti CScheduleDlg New Event Nová udalosť Edit Event Upraviť udalosť End time must be greater than start time Čas ukon�enia musí byť neskôr ako �as za�iatku OK button OK Never Nikdy At time of event V �ase udalosti 15 minutes before 15 minút pred 30 minutes before 30 minút pred 1 hour before 1 hodinu pred 1 day before 1 deň pred 2 days before 2 dni pred 1 week before 1 týždeň pred On start day (9:00 AM) V deň za�iatku (9:00) time(s) krát Enter a name please Zadajte prosím meno The name can not only contain whitespaces Názov nemôže obsahovať len medzery Type: Typ: Description: Popis: All Day: Celý deň: Starts: Za�ína: Ends: Kon�í: Remind Me: Pripomenúť Repeat: Opakovať: End Repeat: Ukon�iť opakovanie: Calendar account: Kalendárske ú�ty: Calendar account Kalendárske ú�ty Type Typ Description Popis All Day Celý deň Time: Čas: Time Čas Solar Solárny Lunar Lunárny Starts Za�ína Ends Kon�í Remind Me Pripomenúť Repeat Opakovať Daily Denne Weekdays Pracovné dni Weekly Týždenne Monthly Mesa�ne Yearly Ro�ne End Repeat Ukon�iť opakovanie After Po On Zapnuté Cancel button Zrušiť Save button Uložiť CScheduleOperation All occurrences of a repeating event must have the same all-day status. Všetky výskyty opakujúcej sa udalosti musia mať rovnaký celodenný stav. Do you want to change all occurrences? Chcete zmeniť všetky výskyty? Cancel button Zrušiť Change All Zmeniť všetky You are changing the repeating rule of this event. Meníte pravidlo opakovania tejto udalosti. You are deleting an event. Odstraňujete udalosť. Are you sure you want to delete this event? Naozaj chcete odstrániť túto udalosť? Delete button Vymazať Do you want to delete all occurrences of this event, or only the selected occurrence? Chcete odstrániť všetky výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Vymazať všetko Delete Only This Event Vymazať iba túto udalosť Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Chcete odstrániť tento a všetky budúce výskyty tejto udalosti alebo iba vybratú udalosť? Delete All Future Events Vymazať všetky budúce udalosti You are changing a repeating event. Meníte opakujúcu sa udalosť. Do you want to change only this occurrence of the event, or all occurrences? Chcete zmeniť iba tento výskyt udalosti alebo všetky jej výskyty? All Všetky Only This Event Iba táto udalosť Do you want to change only this occurrence of the event, or this and all future occurrences? Chcete zmeniť iba tento výskyt udalosti alebo túto a aj všetky budúce udalosti? All Future Events Všetky budúce udalosti You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Vybrali ste preskokový mesiac, a budete upozornený podľa pravidiel lunárneho kalendára. OK button OK CScheduleSearchDateItem Y R M M D D CScheduleSearchItem Edit Upraviť Delete Vymazať All Day Celý deň CScheduleSearchView No search results Žiadne výsledky vyhľadávania CScheduleView ALL DAY CEL� DEŇ CSettingDialog Sunday Nedeľa Monday Pondelok Use System Setting Použiť systémové nastavenie 24-hour clock 24-hodinový �as 12-hour clock 12-hodinový �as import ICS file importovať súbor ICS Manual Ru�né 15 mins 15 minút 30 mins 30 minút 1 hour 1 hodina 24 hours 24 hodín Sync Now Synchronizovať teraz Last sync Posledná synchronizácia Please go to the <a href='/'>Control Center</a> to change system settings Prosím, prejdite na <a href='/'>Centrum správy</a>, aby ste zmenili systémové nastavenie CTimeEdit (%1 mins) (%1 minút) (%1 hour) (%1 hodina) (%1 hours) (%1 hodín) CTitleWidget Y R M M W T D D Search events and festivals Hľadať udalosti a sviatky CWeekWindow Week Týždeň Y R CYearScheduleView All Day Celý deň No event Žiadna udalosť CYearWindow Y R CalendarWindow Calendar Kalendár Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendár je nástroj na prezeranie dátumov a tiež inteligentný denný plánova� na plánovanie všetkých vecí v živote. Calendarmainwindow Calendar Kalendár Manage Spravovať Privacy Policy Zásady ochrany osobných údajov Syncing... Synchronizácia... Sync successful Synchronizácia úspešná Sync failed, please try later Synchronizácia zlyhala, skúste to neskôr CenterWidget All Day Celý deň DAccountDataBase Work Práca Life Život Other Ostatné DAlarmManager Close button Zavrieť One day before start Jeden deň pred za�iatkom Remind me tomorrow Pripomenúť zajtra Remind me later Pripomenúť neskôr 15 mins later o 15 minút neskôr 1 hour later o 1 hodinu neskôr 4 hours later o 4 hodiny neskôr Tomorrow Zajtra Schedule Reminder Nastaviť pripomienku %1 to %2 %1 do %2 Today Dnes DragInfoGraphicsView Edit Upraviť Delete Vymazať New event Nová udalosť New Event Nová udalosť JobTypeListView export export import ICS file importovať súbor ICS You are deleting an event type. Odstraňujete typ udalosti. All events under this type will be deleted and cannot be recovered. Všetky udalosti pod týmto typom budú vymazané a nemôžu byť obnovené. Cancel button Zrušiť Delete button Vymazať QObject Manage calendar Spravovať kalendár Event types Typy udalostí Account settings Nastavenia ú�tu Account Ú�et Select items to be synced Vybrať položky k synchronizácii Events Udalosti General settings Všeobecné nastavenia Sync interval Interval synchronizácie Calendar account Kalendárske ú�ty General Hlavné First day of week Prvý deň v týždni Time Čas Return Today Return Dnes Return Today Today Return Today Dnes ScheduleTypeEditDlg New event type Nový typ udalosti Edit event type Upraviť typ udalosti Import ICS file Importovať súbor ICS Name: Názov: Color: Farba: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> súbor: Cancel button Zrušiť Save button Uložiť The name can not only contain whitespaces Názov nemôže obsahovať len medzery Enter a name please Zadajte prosím meno Shortcut Help Nápoveda Delete event Vymazať udalosť Copy Kopírovať Cut Vystrihnúť Paste Prilepiť Delete Vymazať Select all Vybrať všetko SidebarCalendarWidget Y R M M TimeJumpDialog Go button Prejsť UserloginWidget Sign In button Prihlásiť sa Sign Out button Odhlásiť sa YearFrame Y R today Today Today Dnes linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sl.ts000066400000000000000000001320671523260663500250710ustar00rootroot00000000000000 AccountItem Sync successful Sinhronizacija uspešna Network error Napaka omrežja Server exception Izjema strežnika Storage full Shranjevje je polno AccountManager Local account Lokalni ra�un Event types Vrste dogodkov CColorPickerWidget Color Barva Cancel button Prekli�i Save button Shrani CDayMonthView Monday Ponedeljek Tuesday Torek Wednesday Sreda Thursday Četrtek Friday Petek Saturday Sobota Sunday Nedelja CDayWindow Y L M M D D Lunar Lunarni CGraphicsView New Event Nov dogodek CMonthScheduleNumItem %1 more %1 ve� CMonthView New event Nov dogodek New Event Nov dogodek CMonthWindow Y L CMyScheduleView My Event Moj dogodek OK button V redu Delete button Izbriši Edit button Uredi CPushButton New event type Novi tip dogodka CScheduleDlg New Event Nov dogodek Edit Event Uredi dogodek End time must be greater than start time Kon�ni �as mora biti kasnejši od za�etnega OK button V redu Never Nikoli At time of event Ob �asu dogodka 15 minutes before 15 minut prej 30 minutes before 30 minut prej 1 hour before 1 uro prej 1 day before 1 dan prej 2 days before 2 dni prej 1 week before 1 teden prej On start day (9:00 AM) Na dan dogodka (9:00) time(s) �as (s) Enter a name please Vnesite ime, prosim The name can not only contain whitespaces Ime ne more vsebovati le presledkov Type: Vrsta: Description: Opis: All Day: Cel dan: Starts: Za�etek: Ends: Konec: Remind Me: Opomnik: Repeat: Ponovi: End Repeat: Konec ponavljanj: Calendar account: Ra�un kalendara: Calendar account Ra�un kalendara Type Vrsta Description Opis All Day Cel dan Time: Čas: Time Čas Solar Son�ni Lunar Lunarni Starts Za�etek Ends Konec Remind Me Opomnik Repeat Ponovitev Daily Dnevno Weekdays Ob dnevih Weekly Tedensko Monthly Mese�no Yearly Letno End Repeat Konec ponavljanj After Po On Na Cancel button Prekini Save button Shrani CScheduleOperation All occurrences of a repeating event must have the same all-day status. Vsako pojavljanje ponavljajo�ega dogodka mora imeti enak celodnevni status. Do you want to change all occurrences? Želite spremeniti vsa pojavljanja? Cancel button Prekini Change All Spremeni vse You are changing the repeating rule of this event. Spreminjate ponavljajo�e se pravilo za ta dogodek. You are deleting an event. Brišete dogodek. Are you sure you want to delete this event? Želite res izbrisati ta dogodek? Delete button Izbriši Do you want to delete all occurrences of this event, or only the selected occurrence? Želite izbrisati vsa pojavljanja tega dogodka, ali zgolj izbrana? Delete All Izbriši vse Delete Only This Event Izbriši le ta dogodek Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Želite izbrisati to in vsa ostala pojavljanja tega dogodka ali zgolj izbrana pojavljanja? Delete All Future Events Izbriši vse prihodnje dogodke You are changing a repeating event. Spreminjate ponavljajo�i se dogodek. Do you want to change only this occurrence of the event, or all occurrences? Želite spremeniti le to pojavitev dogodka ali vsa pojavljanja? All Vse Only This Event Zgolj ta dogodek Do you want to change only this occurrence of the event, or this and all future occurrences? Ali želite spremeniti le ta pojav dogodka ali vse prihodnje pojave? All Future Events Vse prihodnje dogodke You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Ste izbrali skokovni mese�, in boste opozornjeni glede na pravila lunarnega kalendara. OK button V redu CScheduleSearchDateItem Y L M M D D CScheduleSearchItem Edit Uredi Delete Izbriši All Day Cel dan CScheduleSearchView No search results Ni rezultatov iskanja CScheduleView ALL DAY CEL DAN CSettingDialog Sunday Nedelja Monday Ponedeljek Use System Setting Uporabi nastavitve sistema 24-hour clock 24-urni sat 12-hour clock 12-urni sat import ICS file Uvozi datoteko ICS Manual Ro�no 15 mins 15 minut 30 mins 30 minut 1 hour 1 ura 24 hours 24 ur Sync Now Sinhroniziraj zdaj Last sync Zadnja sinhronizacija Please go to the Control Center to change system settings Prosim, se prijavite v Nastavni center, da spremenite nastavitve sistema CTimeEdit (%1 mins) (%1 minut) (%1 hour) (%1 ura) (%1 hours) (%1 ur) CTitleWidget Y L M M W T D D Search events and festivals Iskanje dogodkov in praznovanj CWeekWindow Week Teden Y L CYearScheduleView All Day Cel dan No event Ni dogodka CYearWindow Y L CalendarWindow Calendar Koledar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Koledar je orodje za prikaz datumov, a tudi pametni terminski planer za na�rtovanje življenjskih dogodkov. Calendarmainwindow Calendar Koledar Manage Upravljaj Privacy Policy Pravilnik zasebnosti Syncing... Sinhronizacija... Sync successful Sinhronizacija uspešna Sync failed, please try later Sinhronizacija je spodletela, poskusite kasneje CenterWidget All Day Cel dan DAccountDataBase Work o Life ivljenje Other Ostalo DAlarmManager Close button Zapri One day before start Dan pred pri�etkom Remind me tomorrow Opomni me jutri Remind me later Opomni me kasneje 15 mins later 15 minut pozneje 1 hour later 1 ura pozneje 4 hours later 4 ura pozneje Tomorrow Jutri Schedule Reminder Nastavi opomnik %1 to %2 %1 do %2 Today Danes DragInfoGraphicsView Edit Uredi Delete Izbriši New event Nov dogodek New Event Nov dogodek JobTypeListView export izvoz import ICS file uvoz ICS datoteke You are deleting an event type. Brisanje vrste dogodka. All events under this type will be deleted and cannot be recovered. Vsi dogodki pod temi vrstmi bodo izbrisani in ne bodo mogo�e obnoviti. Cancel button Prekli�i Delete button Izbriši QObject Manage calendar Upravljaj s kalendarjem Event types Vrste dogodka Account settings Nastavitve ra�una Account Ra�un Select items to be synced Izberite elemente za sinhronizacijo Events Dogodki General settings Splošne nastavitve Sync interval Interval sinhronizacije Calendar account Ra�un kalendarja General Splošno First day of week Prvi dan teden Time Čas Return Today Return Danes Return Today Today Return Today Danes ScheduleTypeEditDlg New event type Nova vrsta dogodka Edit event type Uredi vrsto dogodka Import ICS file Uvoz ICS datoteke Name: Ime: Color: Barva: ICS File: ICS Datoteka: Cancel button Prekli�i Save button Shrani The name can not only contain whitespaces Ime ne sme vsebovati le presledkov Enter a name please Vnesite ime, prosim Shortcut Help Pomo� Delete event Izbriši dogodek Copy Kopiraj Cut Izreži Paste Prilepi Delete Izbriši Select all Izberi vse SidebarCalendarWidget Y L M M TimeJumpDialog Go button Izvedi UserloginWidget Sign In button Prijava Sign Out button Odjava YearFrame Y Y today Today Today Danes linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sq.ts000066400000000000000000001475351523260663500251040ustar00rootroot00000000000000 AccountItem Sync successful Njëkohësim i suksesshëm Network error Gabim rrjeti Server exception Përjashtim në shërbyes Storage full Depozita plot AccountManager Local account Llogari vendore Event types Lloje veprimtarish CColorPickerWidget Color Ngjyrë Cancel button Anuloje Save button Ruaje CDayMonthView Monday E hënë Tuesday E martë Wednesday E mërkurë Thursday E enjte Friday E premte Saturday E shtunë Sunday E diel CDayWindow Y V M M D D Lunar Hënor CGraphicsView New Event Veprimtari e Re CMonthScheduleNumItem %1 more %1 më tepër CMonthView New event Veprimtari e re New Event Veprimtari e Re CMonthWindow Y V CMyScheduleView My Event Veprimtari e Imja OK button OK Delete button Fshije Edit button Përpunojeni CPushButton New event type Lloj veprimtarie të re CScheduleDlg New Event Veprimtari e Re Edit Event Përpunoni Veprimtari End time must be greater than start time Koha e përfundimit duhet të jetë më e madhe se koha e fillimit OK button OK Never Kurrë At time of event Në kohën e veprimtarisë 15 minutes before 15 minuta para 30 minutes before 30 minuta para 1 hour before 1 orë para 1 day before 1 ditë para 2 days before 2 ditë para 1 week before 1 javë para On start day (9:00 AM) Ditën e fillimit (9:00 AM) time(s) kohë() Enter a name please Ju lutemi, jepni një emër The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Type: Lloj: Description: Përshkrim: All Day: Tërë Ditën: Starts: Fillon më: Ends: Përfundon më: Remind Me: Kujtoma: Repeat: Përsërite: End Repeat: Përfundoje Përsëritjen Më: Calendar account: Llogari kalendari: Calendar account Llogari kalendari Type Lloj Description Përshkrim All Day Tërë Ditën Time: Kohë: Time Kohë Solar Diellore Lunar Hënore Starts Fillon më Ends Përfundon më Remind Me Kujtoma më Repeat Përsërite Daily Përditë Weekdays Ditë të javës Weekly Çdo javë Monthly Çdo muaj Yearly Çdo vit End Repeat Përfundoje Përsëritjen Më After Pas On Më Cancel button Anuloje Save button Ruaje CScheduleOperation All occurrences of a repeating event must have the same all-day status. Krejt rastet e një veprimtarie që përsëritet duhet të kenë të njëjtën gjendje gjithë-ditën. Do you want to change all occurrences? Doni të ndryshohen krejt përsëritjet? Cancel button Anuloje Change All Ndryshoji Krejt You are changing the repeating rule of this event. Po ndryshoni rregullin e përsëritjes së kësaj veprimtarie. You are deleting an event. Po fshini një veprimtari. Are you sure you want to delete this event? Jeni i sigurt se doni të fshihet kjo veprimtari? Delete button Fshije Do you want to delete all occurrences of this event, or only the selected occurrence? Doni të fshihen krejt përsëritjet e kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Fshiji Krejt Delete Only This Event Fshi Vetëm Këtë Veprimtari Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Doni të fshihet kjo dhe krejt përsëritjet në të ardhmen të kësaj veprimtarie, apo vetëm përsëritjen e përzgjedhur? Delete All Future Events Fshi Krejt Veprimtaritë e Ardhshme You are changing a repeating event. Po ndryshoni një veprimtari me përsëritje. Do you want to change only this occurrence of the event, or all occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo krejt përsëritjet? All Krejt Only This Event Vetëm Këtë Veprimtari Do you want to change only this occurrence of the event, or this and all future occurrences? Doni të ndryshohet vetëm kjo përsëritje e veprimtarisë, apo këtë dhe krejt përsëritjet në të ardhmen? All Future Events Krejt Veprimtaritë e Ardhshme You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Keni përzgjedhur një muaj të brishtë dhe do t’ju kujtohet në përputhje me rregullat e kalendarit hënor. OK button OK CScheduleSearchDateItem Y V M M D D CScheduleSearchItem Edit Përpunojeni Delete Fshije All Day Tërë Ditën CScheduleSearchView No search results S’ka përfundime kërkimi CScheduleView ALL DAY TËRË DITËN CSettingDialog Sunday E diel Monday E hënë Use System Setting Përdor Rregullime Sistemi 24-hour clock Sahat 24-orësh 12-hour clock Sahat 12-orësh import ICS file importo kartelë ICS Manual Dorazi 15 mins 15 min. 30 mins 30 min. 1 hour 1 orë 24 hours 24 orë Sync Now Njëkohësoje Tani Last sync Njëkohësimi i fundit më Please go to the <a href='/'>Control Center</a> to change system settings Që të ndryshoni rregullime sistemit, ju lutemi, kaloni te <a href='/'>Qendra e Kontrollit</a> CTimeEdit (%1 mins) (%1 min.) (%1 hour) (%1 orë) (%1 hours) (%1 orë) CTitleWidget Y V M M W J D D Search events and festivals Kërkoni në veprimtari dhe festivale CWeekWindow Week Javë Y V CYearScheduleView All Day Tërë Ditën No event S’ka veprimtari CYearWindow Y V CalendarWindow Calendar Kalendar Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalendari është një mjet për parje datash, si dhe një planifikues i përditshëm për të vënë në plan krejt gjërat e jetës së përditshme. Calendarmainwindow Calendar Kalendar Manage Administrojeni Privacy Policy Rregulla Privatësie Syncing... Po njëkohësohet… Sync successful Njëkohësim i suksesshëm Sync failed, please try later Njëkohësimi dështoi, ju lutemi, provoni më vonë CenterWidget All Day Tërë Ditën DAccountDataBase Work Pune Life Shtëpie Other Tjetër DAlarmManager Close button Mbylle One day before start Një ditë para fillimit Remind me tomorrow Kujtoma nesër Remind me later Kujtoma më vonë 15 mins later pas 15 minutash 1 hour later pas 1 ore 4 hours later pas 4 orësh Tomorrow Nesër Schedule Reminder Kujtues Planesh %1 to %2 %1 deri më %2 Today Sot DragInfoGraphicsView Edit Përpunim Delete Fshije New event Veprimtari e re New Event Veprimtari e Re JobTypeListView export eksportim import ICS file importo kartelë ICS You are deleting an event type. Po fshini një lloj veprimtarish. All events under this type will be deleted and cannot be recovered. Krejt veprimtaritë nën këtë lloj do të fshihen dhe s’mund të rikthehen. Cancel button Anuloje Delete button Fshije QObject Manage calendar Administroni kalendar Event types Lloje veprimtarish Account settings Rregullime llogarie Account Llogari Select items to be synced Përzgjidhni objekte për t’u njëkohësuar Events Veprimtari General settings Rregullime të përgjithshme Sync interval Interval njëkohësimi Calendar account Llogari Kalendari General Të përgjithshme First day of week Ditën e parë të javës Time Kohë Return Today Return Sot Return Today Today Return Today Sot ScheduleTypeEditDlg New event type Lloj veprimtarie të re Edit event type Përpunoni lloj veprimtarie Import ICS file Importo kartelë ICS Name: Emër: Color: Ngjyrë: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Kartelë <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Anuloje Save button Ruaje The name can not only contain whitespaces Emri s’mund të përmbajë vetëm hapësira të zbrazëta Enter a name please Ju lutemi, jepni një emër Shortcut Help Ndihmë Delete event Fshije veprimtarinë Copy Kopjoje Cut Prije Paste Ngjite Delete Fshije Select all Përzgjidhi krejt SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Jepi UserloginWidget Sign In button Hyni Sign Out button Dilni YearFrame Y V today Today Today Sot linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sr.ts000066400000000000000000001367121523260663500251000ustar00rootroot00000000000000 AccountItem Sync successful Синхронизација је у�пешна Network error Грешка у мрежи Server exception �кцент на �ерверу Storage full Спремиште је и�пуњено AccountManager Local account Локални налог Event types Вр�те догађаја CColorPickerWidget Color Боја Cancel button Откажи Save button Сачувај CDayMonthView Monday Понедељак Tuesday Уторак Wednesday Среда Thursday Четвртак Friday Петак Saturday Субота Sunday �едеља CDayWindow Y Г M М D Д Lunar Лунарно CGraphicsView New Event �ови догађај CMonthScheduleNumItem %1 more Још %1 CMonthView New event �ови догађај New Event �ови догађај CMonthWindow Y Г CMyScheduleView My Event Мој догађај OK button У реду Delete button Обриши Edit button Уреди CPushButton New event type �ови тип догађаја CScheduleDlg New Event �ови догађај Edit Event Уреди догађај End time must be greater than start time Крајње време мора бити након почетног OK button У реду Never �икад At time of event У време догађаја 15 minutes before 15 минута раније 30 minutes before 30 минута раније 1 hour before 1 �ат раније 1 day before 1 дан раније 2 days before 2 дана раније 1 week before 1 �едмица раније On start day (9:00 AM) �а дан почетка (9:00 �М) time(s) пут(а) Enter a name please Уне�ите име, молимо The name can not only contain whitespaces Име не може �адржати �амо празна ме�та Type: Вр�та: Description: Опи�: All Day: Цео дан: Starts: Почетак: Ends: Крај: Remind Me: Под�етник: Repeat: Понови: End Repeat: Окончај: Calendar account: Календарни налог: Calendar account Календарни налог Type Вр�та Description Опи� All Day Цео дан Time: Време: Time Време Solar Сунчев Lunar Лунарно Starts Почетак Ends Крај Remind Me Под�етник Repeat Понови Daily Свакодневно Weekdays Радним данима Weekly Седмично Monthly Ме�ечно Yearly Годишње End Repeat Окончај After �акон On Укључ. Cancel button Откажи Save button Сачувај CScheduleOperation All occurrences of a repeating event must have the same all-day status. Све појаве понављајућег догађаја морају имати и�ти целодневни �тату�. Do you want to change all occurrences? Желите ли да промените �ве појаве? Cancel button Откажи Change All Промени �ве You are changing the repeating rule of this event. Мењате правило понављања овог догађаја. You are deleting an event. Бришете догађај. Are you sure you want to delete this event? Заи�та желите да обришете овај догађај? Delete button Обриши Do you want to delete all occurrences of this event, or only the selected occurrence? Да ли желите да обришете �ве појаве овог догађаја или �амо изабрану �тавку? Delete All Обриши �ве Delete Only This Event Обриши �амо овај догађај Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Желите ли да обришете ову и �ве будуће појаве овог догађаја или �амо изабрану �тавку? Delete All Future Events Обриши �ве будуће догађаје You are changing a repeating event. Мењате понаљајући догађај. Do you want to change only this occurrence of the event, or all occurrences? Желите ли да промените �амо ову појаву догађаја или �ве? All Све Only This Event Само овај догађај Do you want to change only this occurrence of the event, or this and all future occurrences? Желите ли да промените ову појаву догађаја или ову појаву и �ве будуће појаве? All Future Events Сви будући догађаји You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Изабрали �те пре�кокнути ме�ец, и ћете бити напоменути према правилу ме�ечевог календара. OK button У реду CScheduleSearchDateItem Y Г M М D Д CScheduleSearchItem Edit Уреди Delete Обриши All Day Цео дан CScheduleSearchView No search results �ема резултата претраге CScheduleView ALL DAY ЦЕО Д�� CSettingDialog Sunday �едеља Monday Понедељак Use System Setting Кори�тите �и�тем�ки по�тавке 24-hour clock 24-ча�ни �ат 12-hour clock 12-ча�ни �ат import ICS file Увезите ICS датотеку Manual Ручно 15 mins 15 минута 30 mins 30 минута 1 hour 1 �ат 24 hours 24 �ати Sync Now Синхронизирај �ада Last sync По�ледња �инхронизација Please go to the Control Center to change system settings Молимо, појдите на Центар управљања да би�те променили �и�тем�ке по�тавке CTimeEdit (%1 mins) (%1 минута) (%1 hour) (%1 �ат) (%1 hours) (%1 �ати) CTitleWidget Y Г M М W С D Д Search events and festivals Претрага догађаја и празника CWeekWindow Week Седмица Y Г CYearScheduleView All Day Цео дан No event �ема догађаја CYearWindow Y Г CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Календар је алат за приказ датума и паметани роковник за под�ећање на �ве догађаје у животу. Calendarmainwindow Calendar Календар Manage Управљај Privacy Policy Политика приватно�ти Syncing... Синхронизација... Sync successful Синхронизација је у�пешна Sync failed, please try later Синхронизација је неuspела, молимо ва� покушајте поново ка�није CenterWidget All Day Цео дан DAccountDataBase Work По�ао Life Живот Other О�тало DAlarmManager Close button Затвори One day before start Један дан пре пчетка Remind me tomorrow Под�ети ме �утра Remind me later Под�ети ка�није 15 mins later 15 минута ка�није 1 hour later 1 �ат ка�није 4 hours later 4 �ата ка�није Tomorrow Сутра Schedule Reminder Под�етник догађаја %1 to %2 %1 до %2 Today Дана� DragInfoGraphicsView Edit Уреди Delete Обриши New event �ови догађај New Event �ови догађај JobTypeListView export извоз import ICS file увоз ICS фајла You are deleting an event type. Обришите једну вр�ту догађаја. All events under this type will be deleted and cannot be recovered. Сви догађаји под овом вр�том је обри�ан и не могу �е враћати. Cancel button Откажи Delete button Обриши QObject Manage calendar Управљај календаром Event types Вр�те догађаја Account settings Подешавања налога Account �алог Select items to be synced Изаберите �тавке за �инхронизацију Events Догађаји General settings Општа подешавања Sync interval Интервал �инхронизације Calendar account �алог календар General Опште First day of week Први дан недеље Time Време Return Today Return Дана� Return Today Today Return Today Дана� ScheduleTypeEditDlg New event type �ова вр�та догађаја Edit event type Измени вр�ту догађаја Import ICS file Увоз ICS фајла Name: Име: Color: Boja: ICS File: ICS Фајл: Cancel button Откажи Save button Сачувај The name can not only contain whitespaces Име �е не може �а�тоjeћи �амо од празних ме�та Enter a name please Уне�ите име, молимо Shortcut Help Помоћ Delete event Обриши догађај Copy Копирај Cut И�еци Paste Убаци Delete Обриши Select all Изабери �ве SidebarCalendarWidget Y Г M М TimeJumpDialog Go button Идите UserloginWidget Sign In button Пријави �е Sign Out button Одајави �е YearFrame Y Г today Today Today Дана� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sv.ts000066400000000000000000001323721523260663500251020ustar00rootroot00000000000000 AccountItem Sync successful Synkning lyckad Network error Nätverksfel Server exception Serverundantag Storage full Lagring full AccountManager Local account Lokalt konto Event types Händelsetyper CColorPickerWidget Color Färg Cancel button Avbryt Save button Spara CDayMonthView Monday Måndag Tuesday Tisdag Wednesday Onsdag Thursday Torsdag Friday Fredag Saturday Lördag Sunday Söndag CDayWindow Y Y M M D D Lunar Månliga CGraphicsView New Event Ny händelse CMonthScheduleNumItem %1 more %1 mer CMonthView New event Ny händelse New Event Ny händelse CMonthWindow Y Y CMyScheduleView My Event Min händelse OK button OK Delete button Radera Edit button Redigera CPushButton New event type Ny händelsetyp CScheduleDlg New Event Nytt händelse Edit Event Redigera händelse End time must be greater than start time Sluttid måste vara större än starttid OK button OK Never Nikom At time of event Vid händelse 15 minutes before 15 minuter före 30 minutes before 30 minuter före 1 hour before 1 timme före 1 day before 1 dag före 2 days before 2 dagar före 1 week before 1 vecka före On start day (9:00 AM) På startdagen (kl 9:00) time(s) tid(ar) Enter a name please Ange ett namn vänligen The name can not only contain whitespaces Namnet får inte endast innehålla mellanslag Type: Typ: Description: Beskrivning: All Day: Hela dagen: Starts: Startar: Ends: Slutar: Remind Me: Remind Me: Repeat: Upprepa: End Repeat: Sluta upprepa: Calendar account: Kalenderkonto: Calendar account kalenderkonto Type Typ Description Beskrivning All Day Hela dagen Time: Tid: Time Tid Solar Sol Lunar Måne Starts Startar Ends Slutar Remind Me Remind Me Repeat Upprepning Daily Daglig Weekdays Veckodagar Weekly Varje vecka Monthly Månatlig Yearly Årlig End Repeat Sluta upprepa After Efter On På Cancel button Avbryt Save button Spara CScheduleOperation All occurrences of a repeating event must have the same all-day status. Alla upprepningar av ett upprepande händelse måste ha samma all-day-status. Do you want to change all occurrences? Vill du ändra alla upprepningar? Cancel button Avbryt Change All Ändra alla You are changing the repeating rule of this event. Du ändrar upprepningsregeln för denna händelse. You are deleting an event. Du tar bort en händelse. Are you sure you want to delete this event? Är du säker på att du vill ta bort denna händelse? Delete button Ta bort Do you want to delete all occurrences of this event, or only the selected occurrence? Vill du ta bort alla upprepningar av denna händelse eller bara den valda upprepningen? Delete All Ta bort alla Delete Only This Event Ta bort endast denna händelse Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Vill du ta bort denna händelse och alla framtida upprepningar, eller bara den valda upprepningen? Delete All Future Events Ta bort alla framtida händelser You are changing a repeating event. Du ändrar ett upprepande händelse. Do you want to change only this occurrence of the event, or all occurrences? Vill du ändra endast denna upprepning av händelsen, eller alla upprepningar? All Alla Only This Event Endast denna händelse Do you want to change only this occurrence of the event, or this and all future occurrences? Vill du ändra endast denna upprepning av händelsen, eller denna och alla framtida upprepningar? All Future Events Alla framtida händelser You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Du har valt ett skottmånad, och du kommer att påminnas enligt reglerna för månkalendern. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Redigera Delete Radera All Day Hela dagen CScheduleSearchView No search results Inga sökresultat CScheduleView ALL DAY ALLA DAGAR CSettingDialog Sunday Söndag Monday Måndag Use System Setting Använd systeminställning 24-hour clock 24-timmarsklocka 12-hour clock 12-timmarsklocka import ICS file Importera ICS-fil Manual Manuell 15 mins 15 minuter 30 mins 30 minuter 1 hour 1 timme 24 hours 24 timmar Sync Now Synkra nu Last sync Senaste synkroniseringen Please go to the Control Center to change system settings Vänligen gå till Styrbordet för att ändra systeminställningarna CTimeEdit (%1 mins) (%1 minuter) (%1 hour) (%1 timme) (%1 hours) (%1 timmar) CTitleWidget Y M M T W W D D Search events and festivals Sök händelser och festivaler CWeekWindow Week Vecka Y M CYearScheduleView All Day Hela dagen No event Ingen händelse CYearWindow Y M CalendarWindow Calendar Kalender Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kalender är ett verktyg för att visa datum och också en smart daglig planerare för att planera allt i livet. Calendarmainwindow Calendar Kalender Manage Hantera Privacy Policy Integritetspolicy Syncing... Synkroniserar... Sync successful Synkronisering lyckades Sync failed, please try later Synkronisering misslyckades, försök igen senare CenterWidget All Day Hela dagen DAccountDataBase Work Arbete Life Liv Other Annat DAlarmManager Close button Stäng One day before start En dag före start Remind me tomorrow Remind me tomorrow Remind me later Remind me later 15 mins later 15 minuter senare 1 hour later Ett timme senare 4 hours later Fyra timmar senare Tomorrow I morgon Schedule Reminder Schema påminnelse %1 to %2 '%1 till %2' Today Idag DragInfoGraphicsView Edit Redigera Delete Radera New event Nytt händelse New Event Nytt Händelse JobTypeListView export Exportera import ICS file Importera ICS-fil You are deleting an event type. Du raderar en händelsetyp. All events under this type will be deleted and cannot be recovered. Alla händelser under denna typ kommer att raderas och kan inte återställas. Cancel button Avbryt Delete button Radera QObject Manage calendar Hantera kalender Event types Händelsetyper Account settings Kontoinställningar Account Konto Select items to be synced Välj element att synkronisera Events Händelser General settings Allmäna inställningar Sync interval Synkronintervall Calendar account Kalenderkonto General Allmänt First day of week Första dagen i veckan Time Tid Return Today Return Idag Return Today Today Return Today Idag ScheduleTypeEditDlg New event type Nytt händelseformat Edit event type Redigera händelseformat Import ICS file Importera ICS-fil Name: Namn: Color: Färg: ICS File: ICS-fil: Cancel button Avbryt Save button Spara The name can not only contain whitespaces Namnet kan inte bestå endast av mellanrum Enter a name please Ange ett namn vänligen Shortcut Help Hjälp Delete event Ta bort händelse Copy Kopiera Cut Klipp ut Paste Klistra in Delete Ta bort Select all Välj allt SidebarCalendarWidget Y Y M M TimeJumpDialog Go button Gå UserloginWidget Sign In button Logga in Sign Out button Logga ut YearFrame Y Y today Today Today Idag linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_sw.ts000066400000000000000000001327061523260663500251040ustar00rootroot00000000000000 AccountItem Sync successful Sync kati Network error Uzalio error Server exception Server exception Storage full Storage full AccountManager Local account Nchi account Event types Event types CColorPickerWidget Color Rangi Cancel button Batali Save button Tafsiri CDayMonthView Monday Jumapili Tuesday Jumathari Wednesday Jumalani Thursday Arembo Friday Jumavipindi Saturday Jumamoshi Sunday Jumapili CDayWindow Y Y M M D D Lunar Lunani CGraphicsView New Event Kazi ya muda CMonthScheduleNumItem %1 more %1 kati CMonthView New event Kazi ya muda New Event Kazi ya muda CMonthWindow Y Y CMyScheduleView My Event Kazi ya wangu OK button OK Delete button Ondoa Edit button Sauti CPushButton New event type Kazi ya muda ya kati CScheduleDlg New Event Eventi ya mpya Edit Event Badilika Eventi End time must be greater than start time Wakati wa kimo kifurahi kuwa kubwa kuliko wakati wa kikubaki OK button OK Never Sikipata At time of event Pamoja na wakati wa eventi 15 minutes before 15 dakika kabla 30 minutes before 30 dakika kabla 1 hour before 1 saa kabla 1 day before 1 loki kabla 2 days before 2 loki kabla 1 week before 1 wiki kabla On start day (9:00 AM) Pamoja na loki ya kikubaki (9:00 AM) time(s) wakati Enter a name please Andika jina kama kati The name can not only contain whitespaces Jina hauwezi kuwa kifurahi kuchapwa whitespaces Type: Type: Description: Maelezo: All Day: Kikubaki: Starts: Begins: Ends: Ends: Remind Me: Tambua Nili: Repeat: Kuripoti: End Repeat: Kuripoti Kwa Kimo Calendar account: Mifumo ya kalendari: Calendar account Mifumo ya kalendari Type Type Description Maelezo All Day Kikubaki Time: Wakati: Time Solar Lunar Starts Ends Remind Me Repeat Daily Weekdays Weekly Monthly Yearly End Repeat After On Cancel button Save button CScheduleOperation All occurrences of a repeating event must have the same all-day status. Do you want to change all occurrences? Cancel button Change All You are changing the repeating rule of this event. You are deleting an event. Are you sure you want to delete this event? Delete button Do you want to delete all occurrences of this event, or only the selected occurrence? Delete All Delete Only This Event Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Delete All Future Events You are changing a repeating event. Unyana unaweza kuchangisha mazungumzo ya muda muzingi. Do you want to change only this occurrence of the event, or all occurrences? Unaweza kuchangisha mazungumzo ya muda muzingi kwa kipindi cha muda muzingi, au kipindi cha muda muzingi kote? All Kote Only This Event Kipindi cha muda muzingi Do you want to change only this occurrence of the event, or this and all future occurrences? Unaweza kuchangisha mazungumzo ya muda muzingi kwa kipindi cha muda muzingi, au kipindi cha muda muzingi na mazungumzo ya muda muzingi kote? All Future Events Kote mazungumzo ya muda muzingi You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Unaweza kichangisha muda muzingi, na unaweza kuchangisha mazungumzo ya muda muzingi kwa kipindi cha muda muzingi, au kipindi cha muda muzingi na mazungumzo ya muda muzingi kote? OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Sauti Delete Ondoa All Day Kote Siku CScheduleSearchView No search results Hakuna matokeo ya utafuta CScheduleView ALL DAY KOTE SIKU CSettingDialog Sunday Jumapili Monday Jumatatu Use System Setting Kupangisha Mipango ya Kijamii 24-hour clock Mwaka wa muda 24 12-hour clock Mwaka wa muda 12 import ICS file kupakia faili ya ICS Manual Kipindi cha muda muzingi 15 mins 15 Miniti 30 mins 30 Miniti 1 hour 1 Saat 24 hours 24 Saat Sync Now Sinc kama hivi Last sync Sinc ya mwisho Please go to the Control Center to change system settings Tafuta Control Center kuchangisha mazungumzo ya kijamii CTimeEdit (%1 mins) (%1 dakika) (%1 hour) (%1 saa) (%1 hours) (%1 saa) CTitleWidget Y Jumla M Mwaka W Witu D Lita Search events and festivals Tazama michezo na mafunzo CWeekWindow Week Witu Y Jumla CYearScheduleView All Day Kila siku No event Hakuna michezo CYearWindow Y Jumla CalendarWindow Calendar Kampuni Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Kampuni ni kifaa kutazama tarehe, na pia ni mabadiliko ya siku ya kujitambua matokeo ya kila asasi ya kifaa. Calendarmainwindow Calendar Kampuni Manage Kuamua Privacy Policy Safu ya Kifaa Syncing... Kuungana... Sync successful Kuungana kiumiana Sync failed, please try later Kuungana kiumiana, tafakari sasa CenterWidget All Day Kila siku DAccountDataBase Work Kazi Life Moyo Other Mengine DAlarmManager Close button Futa One day before start Siku moja kabla ya kuanza Remind me tomorrow Tambua siku ya kizazi Remind me later Tambua sasa 15 mins later 15 dakika ya kizazi 1 hour later Siku ya kwanza baadhi 4 hours later Siku ya kwanza bao Tomorrow Siku ya kibii Schedule Reminder Tambua Mwaka %1 to %2 %1 hadi %2 Today Siku ya asubuhi DragInfoGraphicsView Edit Tambua Delete Ondoa New event Event ya kibii New Event Event ya kibii JobTypeListView export Eksporta import ICS file Importa faili ya ICS You are deleting an event type. Unaweza kushirikisha matokeo ya event type. All events under this type will be deleted and cannot be recovered. Matokeo yote ya kibii katika type hili itakuwa yoyote kushirikisha na hauwezi kushirikisha tena. Cancel button Batali Delete button Ondoa QObject Manage calendar Tambua kalendari Event types Matokeo ya event Account settings Mipango ya konto Account Konto Select items to be synced Tambua matokeo ya kushirikisha Events Matokeo General settings Mipango ya kifalaki Sync interval Masa ya kushirikisha Calendar account Konto ya kalendari General Kifalaki First day of week Siku ya kwanza ya mingi Time Wakati Return Today Return Siku ya asubuhi Return Today Today Return Today Siku ya asubuhi ScheduleTypeEditDlg New event type Sikilishi kazi ya muda Edit event type Tuziki kazi ya muda Import ICS file Ukumbusha faili ya ICS Name: Jina: Color: Rangi: ICS File: Faili ya ICS: Cancel button Bado Save button Hifadhi The name can not only contain whitespaces Jina haina kuchapishwa kama bila kipengele ya kisasa Enter a name please Tafuta jina kama huna Shortcut Help Msaada Delete event Ongeza kazi Copy Kopya Cut Kutua Paste Lipisha Delete Ongeza Select all Chagua wote SidebarCalendarWidget Y Mwezi M Mwezi TimeJumpDialog Go button Jiunga UserloginWidget Sign In button Jiunga Sign Out button Bado YearFrame Y Mwezi today Today Today Leo linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ta.ts000066400000000000000000001503571523260663500250610ustar00rootroot00000000000000 AccountItem Sync successful சிங�க� வெற�றிகரமாக ம�டிந�தத� Network error நெட�வொர�க� போலியர� Server exception சர�வர� பிழை Storage full கணினி வசதி நிரம�பிய�ள�ளத� AccountManager Local account மின�னல� கணக�க� Event types மாற�றங�கள� வகைகள� CColorPickerWidget Color நிறம� Cancel button தவறாக�க� Save button மீட�டர� CDayMonthView Monday ஞாயிற� Tuesday வியாழை Wednesday வியாழன� Thursday செவ�வாய� Friday ப�தன� Saturday வியாழன� Sunday வியாழன� CDayWindow Y வியாழன� M மாதம� D நாள� Lunar நிலநடை CGraphicsView New Event ப�திய நிகழ�வ� CMonthScheduleNumItem %1 more %1 அதிகம� CMonthView New event ப�திய நிகழ�வ� New Event ப�திய நிகழ�வ� CMonthWindow Y வியாழன� CMyScheduleView My Event என� நிகழ�வ� OK button சரி Delete button அழித�தல� Edit button திர�த�த� CPushButton New event type ப�திய நிகழ�வ� வகை CScheduleDlg New Event ப�திய தேர�வ� Edit Event தேர�வ� திர�த�த� End time must be greater than start time ம�டிவ� நேரம� ஆரம�ப நேரத�தை விட அதிகமாக இர�க�க வேண�ட�ம� OK button சரி Never ஒர�ம�றைய�ம� At time of event தேர�வ� நேரத�தில� 15 minutes before 15 நிமிடங�கள� ம�ன�ப� 30 minutes before 30 நிமிடங�கள� ம�ன�ப� 1 hour before 1 மணி நேரம� ம�ன�ப� 1 day before 1 நாள� ம�ன�ப� 2 days before 2 நாள� ம�ன�ப� 1 week before 1 வாரம� ம�ன�ப� On start day (9:00 AM) ஆரம�ப நாளில� (9:00 மாலை) time(s) நேரம� (காலம�) Enter a name please மீண�ட�ம� ஒர� பெயரை உள�ளிடவ�ம� The name can not only contain whitespaces பெயர� சில வெளிச�செல� இல�லாமல� தான� இர�க�க ம�டியாத� Type: வகை: Description: விவரம�: All Day: தொடர�ந�த� நாள�: Starts: தொடங�க�கிறத�: Ends: ம�டிகிறத�: Remind Me: என�னை நினைவ�கூரவ�ம�: Repeat: மீண�ட�ம� தொடரவ�ம�: End Repeat: ம�டிவ� தொடரம�: Calendar account: கல�லாலர� கணக�க�: Calendar account கல�லாலர� கணக�க� Type வகை Description விவரம� All Day தொடர�ந�த� நாள� Time: நேரம�: Time நேரம� Solar சூரிய Lunar நெల� Starts தொடங�க�கிறத� Ends ம�டிகிறத� Remind Me என�னை நினைவ�கூர Repeat மீண�ட�ம� மீண�ட�ம� Daily நாள�தோற�ம� Weekdays வாரங�கள� Weekly வார�தோற�ம� Monthly நவம�பர� Yearly ஆண�ட�தோற�ம� End Repeat மீண�ட�ம� மீண�ட�ம� ம�டிக�க After மேல� On அன�ற� Cancel button ரத�த� செஞ�சல� Save button சேமிக�க CScheduleOperation All occurrences of a repeating event must have the same all-day status. மீண�ட�ம� மீண�ட�ம� நிகழ�வ�கள� அனைத�த�ம� ஒரே நாள� நிலையில� இர�க�க வேண�ட�ங�கள�. Do you want to change all occurrences? நீங�கள� அனைத�த�ம� மாற�ற விர�ம�ப�கிறீர�களா? Cancel button ரத�த� செஞ�சல� Change All அனைத�தைய�ம� மாற�ற� You are changing the repeating rule of this event. நீங�கள� இந�த நிகழ�வின� மீண�ட�ம� மீண�ட�ம� நிலையை மாற�ற�கிறீர�கள�. You are deleting an event. நீங�கள� ஒர� நிகழ�வை நீக�க�கிறீர�கள�. Are you sure you want to delete this event? நீங�கள� இந�த நிகழ�வை நீக�க விர�ம�ப�கிறீர�களா? Delete button நீக�க� Do you want to delete all occurrences of this event, or only the selected occurrence? இந�த நிகழ�வின� அனைத�த�ம� நிகழ�வ�களைய�ம� நீக�க விர�ம�ப�கிறீர�களா, அல�லத� தேர�வ�செய�யப�பட�ட ஒர� நிகழ�வையே? Delete All அனைத�தைய�ம� நீக�க� Delete Only This Event இந�த நிகழ�வையே நீக�க� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? இந�த நிகழ�வின� தற�போதைய மற�ற�ம� அதன� அனைத�த� க�றிப�பிட�ட நிகழ�வ�களைய�ம� நீக�க விர�ம�ப�கிறீர�களா, அல�லத� தேர�வ�செய�யப�பட�ட நிகழ�வையே? Delete All Future Events அனைத�த� க�றிப�பிட�ட நிகழ�வ�களைய�ம� நீக�க� You are changing a repeating event. நீங�கள� ஒர� மீட�டாண�ட� நிகழ�வை மாற�ற�கிறீர�கள�. Do you want to change only this occurrence of the event, or all occurrences? நீங�கள� நிகழ�வின� இந�த பிரிவை மட�ட�ம� மாற�ற விர�ம�ப�கிறீர�களா, அல�லத� அனைத�த� பிரிவ�களைய�ம� மாற�ற விர�ம�ப�கிறீர�களா? All அனைத�த� Only This Event இந�த நிகழ�வை மட�ட�ம� Do you want to change only this occurrence of the event, or this and all future occurrences? நீங�கள� நிகழ�வின� இந�த பிரிவை மட�ட�ம� மாற�ற விர�ம�ப�கிறீர�களா, அல�லத� இத�மட�ட�ம� மற�ற�ம� அனைத�த� எதிர�கால பிரிவ�களைய�ம� மாற�ற விர�ம�ப�கிறீர�களா? All Future Events அனைத�த� எதிர�கால நிகழ�வ�களைய�ம� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. நீங�கள� ஒர� ப�த�மாதத�தை தேர�ந�தெட�த�த�ள�ளீர�கள�, மற�ற�ம� மாதிரிக� காலண�டரின� விதிகள�க�கேற�ப நீங�கள� எச�சரிக�கை செய�யப�பட�வீர�கள�. OK button சரி CScheduleSearchDateItem Y ஆம� M மாதம� D நாள� CScheduleSearchItem Edit திர�த�த� Delete அழித�தல� All Day அனைத�த� நாள� CScheduleSearchView No search results தேடல� ம�டிவ�கள� இல�லை CScheduleView ALL DAY அனைத�த� நாள� CSettingDialog Sunday ஞாயிற� Monday திங� கிர�த�த� Use System Setting ம�றை அமைப�பை பயன�பட�த�த� 24-hour clock 24 மணி நேர காலண�டர� 12-hour clock 12 மணி நேர காலண�டர� import ICS file ICS கோப�பை இறக�க� Manual மேல�ம� தகவல� 15 mins 15 நிமிடங�கள� 30 mins 30 நிமிடங�கள� 1 hour 1 மணி நேரம� 24 hours 24 மணி நேரம� Sync Now இப�போத� ஒப�பநிலை Last sync கடந�த ஒப�பநிலை Please go to the Control Center to change system settings கோப�பை அமைப�பை மாற�ற கீழே உள�ள கட�ட�ப�பாட�ட� மையம� க�க�ச� செல�லவ�ம� CTimeEdit (%1 mins) (%1 மினிட�ட�கள�) (%1 hour) (%1 மணி) (%1 hours) (%1 மணி) CTitleWidget Y ஈ M மி W வி D டி Search events and festivals சிக�கல� நிகழ�வ�கள� மற�ற�ம� விழாக�களைத� தேட� CWeekWindow Week வாரம� Y ஈ CYearScheduleView All Day நாளேற�றம� No event நிகழ�வில�லை CYearWindow Y ஈ CalendarWindow Calendar கலெண�டர� Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. கலெண�டர� தேதிகளைக� காண�பிக�க�ம� கர�விய�ம� நாளைக�கான காலணிப�ப� மற�ற�ம� வாழ�க�கையில� அனைத�த� விஷயங�களைத� திட�டமிட�ம� தெரிவ� செய�ய�ம� கர�விய�ம� ஆக�ம�. Calendarmainwindow Calendar கலெண�டர� Manage திட�டமிட� Privacy Policy மூல திட�டமிட�தல� Syncing... சேர�க�கை செய�யப�பட�கிறத�... Sync successful சேர�க�கை வெற�றிகரமாக ம�டிந�தத� Sync failed, please try later சேர�க�கை வெற�றிகரமாக ம�டியாத�, இன�ன�ம� ம�யற�சி செய�யவ�ம� CenterWidget All Day நாளேற�றம� DAccountDataBase Work வேலை Life வாழ�வ� Other மற�றவை DAlarmManager Close button மூட� One day before start தொடக�கத�திற�க� ஒர� நாள� ம�ன�ப� Remind me tomorrow நாளை நினைவூட�ட� Remind me later மீண�ட�ம� நினைவூட�ட� 15 mins later 15 மினிட�ட�கள� ம�ன�ப� 1 hour later 1 மணி நேரம� கழித�த� 4 hours later 4 மணி நேரம� கழித�த� Tomorrow நாளை Schedule Reminder தினசரி நினைவூற�ற� %1 to %2 '%1 க�க� %2' Today இன�ற� DragInfoGraphicsView Edit தொக�க�க Delete அழித�தல� New event ப�திய காட�சி New Event ப�திய காட�சி JobTypeListView export இறக�க� import ICS file ICS கோப�பை பெற� You are deleting an event type. நீங�கள� ஒர� காட�சி வகையை அழிக�கிறீர�கள�. All events under this type will be deleted and cannot be recovered. இந�த வகையின� அனைத�த� காட�சிகள�ம� அழிக�கப�பட�ம� மற�ற�ம� மீட�கப�பட ம�டியாத�. Cancel button ரத�த� செய� Delete button அழித�தல� QObject Manage calendar கல�நட�சி மேலாண�மை Event types காட�சி வகைகள� Account settings கணக�க� ம�றைமை Account கணக�க� Select items to be synced செயல�பட�த�தப�படவேண�டிய பொர�ட�களை தேர�வ� செய�ய�ங�கள� Events காட�சிகள� General settings பொத� ம�றைமை Sync interval செயல�பட�த�த� இடைவெளி Calendar account கல�நட�சி கணக�க� General பொத� First day of week வாரத�தின� ம�தல� நாள� Time நேரம� Return Today Return இன�ற� Return Today Today Return Today இன�ற� ScheduleTypeEditDlg New event type ப�திய காணொளி வகை Edit event type திர�த�த� காணொளி வகை Import ICS file ICS கோப�பை இறக�க�மதி செய�யவ�ம� Name: பெயர�: Color: நிறம�: ICS File: ICS கோப�பை: Cancel button ரத�த� செய� Save button சேமிக�க The name can not only contain whitespaces பெயர� கூட�ட� விட�தலை மட�ட�ம� கொண�டிர�க�க ம�டியாத� Enter a name please மன�னிக�கவ�ம�, பெயர� உள�ளிடவ�ம� Shortcut Help த�ணை Delete event காணொளி நீக�க� Copy காப�பி Cut அகற�ற� Paste விட� Delete நீக�க� Select all அனைத�தைய�ம� தேர�வ� செய� SidebarCalendarWidget Y ஈ M மா TimeJumpDialog Go button செல�ல UserloginWidget Sign In button உள�ந�ழை Sign Out button வெளியேற� YearFrame Y ஈ today Today Today இன�ற� linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_th.ts000066400000000000000000001435161523260663500250670ustar00rootroot00000000000000 AccountItem Sync successful �ารซинค์สำเร็จ Network error ข้อผิดพลาดของเครือข่าย Server exception ข้อผิดพลาดของเซิร์ฟเวอร์ Storage full พื้นที่จัดเ�็บเต็ม AccountManager Local account บั�ชีท้องถิ่น Event types ประเภทเหตุ�ารณ์ CColorPickerWidget Color สี Cancel button ย�เลิ� Save button บันทึ� CDayMonthView Monday วันจันทร์ Tuesday วันอังคาร Wednesday วันพุธ Thursday วันพฤหัสบดี Friday วันศุ�ร์ Saturday วันศุ�ร์ Sunday วันอาทิตย์ CDayWindow Y ป M ด D ว Lunar ป�ิทินจันทรคติ CGraphicsView New Event �ิจ�รรมใหม่ CMonthScheduleNumItem %1 more อี� 1% CMonthView New event เหตุ�ารณ์ใหม่ New Event �ิจ�รรมใหม่ CMonthWindow Y ป CMyScheduleView My Event �ิจ�รรมของฉัน OK button ต�ลง Delete button ลบ Edit button ��้ไข CPushButton New event type ประเภทเหตุ�ารณ์ใหม่ CScheduleDlg New Event �ิจ�รรมใหม่ Edit Event ��้ไข�ิจ�รรม End time must be greater than start time เวลาสิ้นสุดต้องมา��ว่าเวลาเริ่มต้น OK button ต�ลง Never ไม่เคย At time of event ในช่วงเวลาของ�ิจ�รรม 15 minutes before 15 นาที�่อน 30 minutes before 30 นาที�่อน 1 hour before 1 ชั่วโมง�่อน 1 day before 1 วัน�่อน 2 days before 2 วัน�่อน 1 week before 1 สัปดาห์�่อน On start day (9:00 AM) ท�า�ารในเวลา (09:00 น.) time(s) เวลา (s) Enter a name please �รุณาป้อนชื่อ The name can not only contain whitespaces ชื่อสามารถมีช่องว่างได้เพียง�ค่ไม่ได้ Type: ประเภท: Description: รายละเอียด: All Day: ทั้งวัน: Starts: เริ่ม: Ends: สิ้นสุด: Remind Me: เตือนฉัน: Repeat: ทำซ้ำ: End Repeat: สิ้นสุด�ารทำซ้ำ: Calendar account: บั�ชีป�ิทิน: Calendar account บั�ชีป�ิทิน Type ประเภท Description รายละเอียด All Day ทั้งวัน Time: เวลา: Time เวลา Solar ป�ิทินสุริยคติ Lunar จันทรคติ Starts เริ่ม Ends สิ้นสุด Remind Me เตือนฉัน Repeat ทำซ้ำ Daily ประจำวัน Weekdays วันธรรมดา Weekly รายสัปดาห์ Monthly รายเดือน Yearly รายปี End Repeat สิ้นสุด�ารทำซ้ำ After หลังจา� On ใช้�ารตั้งค่าระบบ Cancel button ย�เลิ� Save button บันทึ� CScheduleOperation All occurrences of a repeating event must have the same all-day status. �ิจ�รรมที่เ�ิดขึ้นซ้ำทั้งหมดต้องมีสถานะตลอดทั้งวันเหมือน�ัน Do you want to change all occurrences? คุณต้อง�ารเปลี่ยน�ิจ�รรมทั้งหมดหรือไม่? Cancel button ย�เลิ� Change All เปลี่ยนทั้งหมด You are changing the repeating rule of this event. คุณ�ำลังเปลี่ยน�ฎ�ารทำซ้ำของ�ิจ�รรมนี้ You are deleting an event. คุณ�ำลังลบ�ิจ�รรม Are you sure you want to delete this event? คุณ�น่ใจหรือไม่ว่าคุณต้อง�ารที่จะลบ�ิจ�รรมนี้ Delete button ลบ Do you want to delete all occurrences of this event, or only the selected occurrence? คุณต้อง�ารลบ�ิจ�รรมทั้งหมดที่เ�ิดขึ้นหรือเฉพาะ�ิจ�รรมที่เลือ�ไว้หรือไม่ ? Delete All ลบทั้งหมด Delete Only This Event ลบเฉพาะ�ิจ�รรมนี้ Do you want to delete this and all future occurrences of this event, or only the selected occurrence? คุณต้อง�ารลบ�ิจ�รรมนี้�ละ�ิจ�รรมที่จะเ�ิดขึ้นในอนาคตทั้งหมดหรือเฉพาะ�ิจ�รรมที่เลือ� ? Delete All Future Events ลบ�ิจ�รรมในอนาคตทั้งหมด You are changing a repeating event. คุณ�ำลังเปลี่ยน�ิจ�รรมที่เ�ิดซ้ำ Do you want to change only this occurrence of the event, or all occurrences? คุณต้อง�ารเปลี่ยนเฉพาะ�ิจ�รรมนี้หรือ�ิจ�รรมทั้งหมดหรือไม่ All ทั้งหมด Only This Event �ิจ�รรมนี้เท่านั้น Do you want to change only this occurrence of the event, or this and all future occurrences? คุณต้อง�ารเปลี่ยนเฉพาะ�ิจ�รรมที่เ�ิดขึ้นนี้หรือ�ิจ�รรมนี้�ละ�ิจ�รรมในอนาคตทั้งหมดหรือไม่ All Future Events �ิจ�รรมในอนาคตทั้งหมด You have selected a leap month, and will be reminded according to the rules of the lunar calendar. นาฬิ�า 24 ชั่วโมง OK button ต�ลง CScheduleSearchDateItem Y ป M ด D ว CScheduleSearchItem Edit ��้ไข Delete ลบ All Day ทั้งวัน CScheduleSearchView No search results ไม่มีผลลัพธ์�ารค้นหา CScheduleView ALL DAY ทั้งวัน CSettingDialog Sunday วันอาทิตย์ Monday วันจันทร์ Use System Setting นาฬิ�า 12 ชั่วโมง 24-hour clock นำเข้าไฟล์ ICS 12-hour clock 15 นาที import ICS file 30 นาที Manual �มนนวล 15 mins 1 ชั่วโมง 30 mins 24 ชั่วโมง 1 hour ซินค์ทันที 24 hours �ารซินค์ครั้งล่าสุด Sync Now �รุณาไปที่ ศูนย์ควบคุม เพื่อเปลี่ยน�ารตั้งค่าระบบ Last sync �ารซิงค์ล่าสุด Please go to the Control Center to change system settings �รุณาไปที่ศูนย์ควบคุมเพื่อเปลี่ยน�ารตั้งค่าระบบ CTimeEdit (%1 mins) (%1 นาที) (%1 hour) (%1 ชั่วโมง) (%1 hours) (%1 ชั่วโมง) CTitleWidget Y ป M ด W ว D ว Search events and festivals ค้นหาเหตุ�ารณ์�ละงานเทศ�าล CWeekWindow Week สัปดาห์ Y ป CYearScheduleView All Day ทั้งวัน No event ไม่มี�ิจ�รรม CYearWindow Y ป CalendarWindow Calendar ป�ิทิน Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. ป�ิทินเป็นเครื่องมือใน�ารดูวันที่�ละยังเป็นนั�วาง�ผนรายวันที่ชา�ฉลาดเพื่อ�ำหนดเวลาทุ�สิ่งในชีวิต Calendarmainwindow Calendar ป�ิทิน Manage จัด�าร Privacy Policy นโยบายความเป็นส่วนตัว Syncing... �ำลังซинค์... Sync successful ซินค์สำเร็จ Sync failed, please try later �ารซินค์ล้มเหลว �รุณาลองใหม่ในภายหลัง CenterWidget All Day ทั้งวัน DAccountDataBase Work งาน Life ชีวิต Other อื่น ๆ DAlarmManager Close button ปิด One day before start หนึ่งวัน�่อนเริ่มต้น Remind me tomorrow เตือนฉันพรุ่งนี้ Remind me later เตือนฉันในภายหลัง 15 mins later 15 นาทีต่อมา 1 hour later 1 ชั่วโมงต่อมา 4 hours later 4 ชั่วโมงต่อมา Tomorrow พรุ่งนี้ Schedule Reminder จัด�าร�ารเตือน %1 to %2 '%1 ถึง %2' Today วันนี้ DragInfoGraphicsView Edit ��้ไข Delete ลบ New event �ิจ�รรมใหม่ New Event �ิจ�รรมใหม่ JobTypeListView export ส่งออ� import ICS file นำเข้าไฟล์ ICS You are deleting an event type. คุณ�ำลังลบประเภทเหตุ�ารณ์ All events under this type will be deleted and cannot be recovered. เหตุ�ารณ์ทั้งหมดภายใต้ประเภทนี้จะถู�ลบ�ละไม่สามารถ�ู้คืนได้ Cancel button ย�เลิ� Delete button ลบ QObject Manage calendar จัด�ารป�ิทิน Event types ประเภทเหตุ�ารณ์ Account settings �ารตั้งค่าบั�ชี Account บั�ชี Select items to be synced เลือ�ข้อมูลที่จะซินค์ Events เหตุ�ารณ์ General settings �ารตั้งค่าทั่วไป Sync interval ช่วงเวลาซิงค์ Calendar account บั�ชีป�ิทิน General ทั่วไป First day of week วัน�ร�ของสัปดาห์ Time เวลา Return Today Return วันนี้ Return Today Today Return Today วันนี้ ScheduleTypeEditDlg New event type ประเภทเหตุ�ารณ์ใหม่ Edit event type ��้ไขประเภทเหตุ�ารณ์ Import ICS file นำเข้าไฟล์ ICS Name: ชื่อ: Color: สี: ICS File: ไฟล์ ICS: Cancel button ย�เลิ� Save button บันทึ� The name can not only contain whitespaces ชื่อสามารถมีช่องว่างได้เพียง�ค่ Enter a name please �รุณา�รอ�ชื่อ Shortcut Help วิธีใช้ Delete event ลบ�ิจ�รรม Copy ทำสำเนา Cut ตัด Paste วาง Delete ลบ Select all เลือ�ทั้งหมด SidebarCalendarWidget Y ป M ด TimeJumpDialog Go button ไป UserloginWidget Sign In button เข้าสู่ระบบ Sign Out button ออ�จา�ระบบ YearFrame Y ป today Today Today วันนี้ linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_tr.ts000066400000000000000000001333121523260663500250720ustar00rootroot00000000000000 AccountItem Sync successful Eşitleme başarılı Network error Ağ hatası Server exception Sunucu istisnası Storage full Hafıza dolu AccountManager Local account Yerel hesap Event types Etkinlik türleri CColorPickerWidget Color Renk Cancel button İptal Save button Kaydet CDayMonthView Monday Pazartesi Tuesday Salı Wednesday Çarşamba Thursday Perşembe Friday Cuma Saturday Cumartesi Sunday Pazar CDayWindow Y Y M A D G Lunar Ay CGraphicsView New Event Yeni Etkinlik CMonthScheduleNumItem %1 more %1 daha fazla CMonthView New event Yeni etkinlik New Event Yeni Etkinlik CMonthWindow Y Y CMyScheduleView My Event Etkinliğim OK button Tamam Delete button Sil Edit button Düzenle CPushButton New event type Yeni etkinlik türü CScheduleDlg New Event Yeni Etkinlik Edit Event Etkinliği Düzenle End time must be greater than start time Bitiş zamanı başlangıç ​​zamanından büyük olmalıdır OK button Tamam Never Asla At time of event Etkinlik anında 15 minutes before 15 dakika önce 30 minutes before 30 dakika önce 1 hour before 1 saat önce 1 day before 1 gün önce 2 days before 2 gün önce 1 week before 1 hafta önce On start day (9:00 AM) Başlangıç ​​gününde (09:00) time(s) zaman(lar) Enter a name please Lütfen bir ad girin The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Type: Tür: Description: Açıklama: All Day: Tüm Gün: Starts: Başlangıç: Ends: Bitiş: Remind Me: Hatırlat: Repeat: Tekrar: End Repeat: Tekrar Sonu: Calendar account: Takvim hesabı: Calendar account Takvim hesabı Type Tür Description Açıklama All Day Tüm Gün Time: Zaman: Time Zaman Solar Güneş Lunar Ay Starts Başlangıç Ends Bitiş Remind Me Hatırlat Repeat Tekrar Daily Günlük Weekdays Hafta içi Weekly Haftalık Monthly Aylık Yearly Yıllık End Repeat Tekrar Sonu After Sonra On Açık Cancel button İptal Save button Kaydet CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tekrarlanan bir etkinliğin tüm tekrarlamaları, tüm gün boyunca aynı duruma sahip olmalıdır. Do you want to change all occurrences? Tüm tekrarlamaları değiştirmek ister misiniz? Cancel button İptal Change All Tümünü Değiştir You are changing the repeating rule of this event. Bu etkinliğin tekrarlama kuralını değiştiriyorsunuz. You are deleting an event. Bir etkinliği siliyorsunuz. Are you sure you want to delete this event? Bu etkinliği silmek istediğinizden emin misiniz? Delete button Sil Do you want to delete all occurrences of this event, or only the selected occurrence? Bu olayın tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsun? Delete All Tümünü Sil Delete Only This Event Yalnızca Bu Etkinliği Sil Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bunu ve bu olayın gelecekteki tüm tekrarlarını mı yoksa yalnızca seçilen olayı mı silmek istiyorsunuz? Delete All Future Events Gelecekteki Tüm Etkinlikleri Sil You are changing a repeating event. Tekrarlanan bir etkinliği değiştiriyorsunuz. Do you want to change only this occurrence of the event, or all occurrences? Etkinliğin yalnızca bu tekrarlamasını mı yoksa tüm tekrarlamalarını mı değiştirmek istiyorsunuz? All Tümü Only This Event Sadece Bu Etkinlik Do you want to change only this occurrence of the event, or this and all future occurrences? Yalnızca etkinliğin bu etkinliğini mi, yoksa bunu ve gelecekteki tüm etkinlikleri değiştirmek istiyorsunuz? All Future Events Gelecekteki Tüm Etkinlikler You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Artık bir ay seçtiniz ve ay takvimi kurallarına göre hatırlatılacak. OK button Tamam CScheduleSearchDateItem Y Y M A D G CScheduleSearchItem Edit Düzenle Delete Sil All Day Tüm Gün CScheduleSearchView No search results Arama sonucu bulunamadı CScheduleView ALL DAY TÜM GÜN CSettingDialog Sunday Pazar Monday Pazartesi Use System Setting Sistem Ayarlarını Kullan 24-hour clock 24 saatlik zaman 12-hour clock 12 saatlik zaman import ICS file ICS dosyasını içeri aktar Manual Manuel 15 mins 15 Dakika 30 mins 30 Dakika 1 hour 1 Saat 24 hours 24 Saat Sync Now Şimdi senkronize et Last sync Son senkronizasyon Please go to the <a href='/'>Control Center</a> to change system settings Sistem ayarlarını değiştirmek için lütfen <a href='/'>Kontrol Merkezi</a> ye gidin CTimeEdit (%1 mins) (%1 dakika) (%1 hour) (%1 saat) (%1 hours) (%1 saat) CTitleWidget Y Y M A W H D G Search events and festivals Etkinlikleri ve bayramları ara CWeekWindow Week Hafta Y Y CYearScheduleView All Day Tüm Gün No event Etkinlik yok CYearWindow Y Y CalendarWindow Calendar Takvim Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Takvim tarihleri ​​görüntülemek için bir araçtır ve aynı zamanda hayattaki her şeyi planlamak için akıllı bir günlük planlayıcısıdır. Calendarmainwindow Calendar Takvim Manage Yönet Privacy Policy Gizlilik Politikası Syncing... Eşitleniyor... Sync successful Senkronizasyon başarılı Sync failed, please try later Eşitleme başarısız, lütfen daha sonra deneyin CenterWidget All Day Tüm Gün DAccountDataBase Work Çalışma Life Yaşam Other Diğer DAlarmManager Close button Kapat One day before start Başlamadan bir gün önce Remind me tomorrow Bana yarın hatırlat Remind me later Bana daha sonra hatırlat 15 mins later 15 Dakika sonra 1 hour later 1 Saat sonra 4 hours later 4 Saat sonra Tomorrow Yarın Schedule Reminder Zamanlama hatırlatıcısı %1 to %2 %1 ila %2 Today Bugün DragInfoGraphicsView Edit Düzenle Delete Sil New event Yeni etkinlik New Event Yeni Etkinlik JobTypeListView export dışarı aktar import ICS file ICS dosyasını içeri aktar You are deleting an event type. Bir etkinlik türünü siliyorsunuz. All events under this type will be deleted and cannot be recovered. Bu türün altındaki etkinlikler silinir ve geri getirilemez. Cancel button İptal Delete button Sil QObject Manage calendar Takvimi yönet Event types Etkinlik türleri Account settings Hesap ayarları Account Hesap Select items to be synced Senkronize edilecek öğeyi seçin Events Etkinlikler General settings Genel ayarlar Sync interval Senkronizasyon aralığı Calendar account Takvim hesabı General Genel First day of week Haftanın ilk günü Time Zaman Return Today Return Bugün Return Today Today Return Today Bugün ScheduleTypeEditDlg New event type Yeni etkinlik türü Edit event type Etkinlik türünü düzenle Import ICS file ICS dosyasını içeri aktar Name: Ad: Color: Renk: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> Dosyası: Cancel button İptal Save button Kaydet The name can not only contain whitespaces Ad sadece boşluk karakterlerinden oluşamaz Enter a name please Lütfen bir ad girin Shortcut Help Yardım Delete event Etkinliği sil Copy Kopyala Cut Kes Paste Yapıştır Delete Sil Select all Tümünü seç SidebarCalendarWidget Y Y M A TimeJumpDialog Go button Git UserloginWidget Sign In button Giriş Sign Out button Çıkış YearFrame Y Y today Today Today Bugün linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_tzm.ts000066400000000000000000001360701523260663500252630ustar00rootroot00000000000000 AccountItem Sync successful تَسْن�يْكْ مَكْت�وب Network error تَرْكْزْ تَكْت�وب Server exception تَكْرْزْ تَكْت�وب Storage full تَكْرْزْ تَك�لْ AccountManager Local account تَكْرْزْ تَكْت�وب Event types تَكْرْزْ تَكْت�وب CColorPickerWidget Color تَكْرْزْ تَكْت�وب Cancel button تَكْرْزْ تَكْت�وب Save button تَكْرْزْ تَكْت�وب CDayMonthView Monday إ�نْسَانْ Tuesday إ�نْسَانْ Wednesday إ�نْسَانْ Thursday إ�نْسَانْ Friday إ�نْسَانْ Saturday إ�نْسَانْ Sunday إ�نْسَانْ CDayWindow Y يَ M مَ D دَ Lunar ل�نَر�ي CGraphicsView New Event تَكْرْزْ تَكْت�وب CMonthScheduleNumItem %1 more تَكْرْزْ تَكْت�وب CMonthView New event تَكْرْزْ تَكْت�وب New Event تَكْرْزْ تَكْت�وب CMonthWindow Y يَ CMyScheduleView My Event تَكْرْزْ تَكْت�وب OK button تَكْرْزْ تَكْت�وب Delete button تَكْرْزْ تَكْت�وب Edit button تَكْرْزْ تَكْت�وب CPushButton New event type تَكْرْزْ تَكْت�وب CScheduleDlg New Event Edit Event End time must be greater than start time OK button Never At time of event 15 minutes before 30 minutes before 1 hour before 1 day before 2 days before 1 week before On start day (9:00 AM) time(s) Enter a name please The name can not only contain whitespaces Type: Description: All Day: Starts: Ends: Remind Me: Repeat: End Repeat: Calendar account: Calendar account Type Description All Day Time: Time ساعة Solar سولار Lunar ل�ونار Starts يبدأ Ends ي�نتهي Remind Me تذكّرني Repeat تكرار Daily يومي Weekdays أيام الأسبوع Weekly أسبوعي Monthly شهري Yearly سنوي End Repeat إنهاء التكرار After بعد On �ي Cancel button إلغاء Save button ح�ظ CScheduleOperation All occurrences of a repeating event must have the same all-day status. كل أحداث التكرار يجب أن تكون بن�س وضعية اليوم الكامل. Do you want to change all occurrences? هل ترغب �ي تغيير جميع الأحداث؟ Cancel button إلغاء Change All تغيير جميع You are changing the repeating rule of this event. أنت تقوم بتغيير قاعدة التكرار لهذا الحدث. You are deleting an event. أنت تقوم بحذ� حدث. Are you sure you want to delete this event? هل أنت متأكد من رغبتك �ي حذ� هذا الحدث؟ Delete button حذ� Do you want to delete all occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� جميع أحداث هذا الحدث، أم �قط الحدث المحدد؟ Delete All حذ� جميع Delete Only This Event حذ� �قط هذا الحدث Do you want to delete this and all future occurrences of this event, or only the selected occurrence? هل ترغب �ي حذ� هذا الحدث وجميع الأحداث المستقبلية، أم �قط الحدث المحدد؟ Delete All Future Events حذ� جميع الأحداث المستقبلية You are changing a repeating event. تاقرر تغيير تكرارية. Do you want to change only this occurrence of the event, or all occurrences? تاقرر تغيير دارا ده تكرارية، أو كول؟ All كول Only This Event دك تكرارية Do you want to change only this occurrence of the event, or this and all future occurrences? تاقرر تغيير دارا ده تكرارية، أو ده و كول ده تكراريات تابيت؟ All Future Events كول تكراريات تابيت You have selected a leap month, and will be reminded according to the rules of the lunar calendar. تاقرر تختار تكيرت ليب، و تيكون مذكورة و�قا لقواعد تكيرت القمرية. OK button يا CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit تديير Delete مسح All Day كول اليوم CScheduleSearchView No search results لا نتائج تابيت CScheduleView ALL DAY كول اليوم CSettingDialog Sunday الأحد Monday الاثنين Use System Setting استخدم إعداد النظام 24-hour clock الساعة 24 ساعة 12-hour clock الساعة 12 ساعة import ICS file استيراد مل� ICS Manual يدوي 15 mins 15 دقيقة 30 mins 30 دقيقة 1 hour ساعة 24 hours 24 ساعة Sync Now مزامنة الآن Last sync مزامنة سابقة Please go to the Control Center to change system settings تاقرر تذهب إلى الوحدة الإدارية لتغيير إعدادات النظام CTimeEdit (%1 mins) (%1 دقايق) (%1 hour) (%1 ساع (%1 hours) (%1 ساعات) CTitleWidget Y ي M م W و D د Search events and festivals تچيخت چيڭا و تيغميت CWeekWindow Week أيام Y 'ي' CYearScheduleView All Day كل يوم No event لا شيغ CYearWindow Y 'ي' CalendarWindow Calendar كالندر Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كالندر دووند چيڭا و تيغميت چيڭا و تيغميت دووند چيڭا و تيغميت چيڭا و تيغميت چيڭا و تيغميت دووند چيڭا و تيغميت چيڭا و تيغميت دووند چيڭا و تيغميت چيڭا و تيغميت دووند چيڭاو تيغميت. Calendarmainwindow Calendar كالندر Manage تديير Privacy Policy سياسة الخصوصية Syncing... تنيير... Sync successful تنيير ناچيخت Sync failed, please try later تنيير �ايليد، تيغميت تنيير گيتي CenterWidget All Day كل يوم DAccountDataBase Work تامير Life حيات Other آخرى DAlarmManager Close button تغلي One day before start واحد يوم قبل البدء Remind me tomorrow تذكيرني غادي Remind me later تذكيرني لاحقا 15 mins later 15 دقايق لاحقا 1 hour later 1 ساعت لار 4 hours later 4 ساعت لار Tomorrow غد Schedule Reminder تذكير الجدول %1 to %2 '%1 ل %2' Today اليوم DragInfoGraphicsView Edit وَضْع Delete تَحْذ�ي� New event دَرْس جَديد New Event دَرْس جَديد JobTypeListView export تَصدير import ICS file تَصدير أَرشي� ICS You are deleting an event type. أَنتَ تَحْذ�� تَصْني� دَرْس. All events under this type will be deleted and cannot be recovered. كل الدَّرَوس ب�هَذا التَّصْني� ستَتَحْذَ� وَلا ت�مك�ن مَرَّة دَرْس. Cancel button إلغاء Delete button تَحْذ�ي� QObject Manage calendar إدارة الجدول Event types أنواع الدَّرَوس Account settings إعدادات الحساب Account حساب Select items to be synced اختَر العناصر اللي تَتَمكَّن تَش�ير Events دَرَوس General settings إعدادات عامة Sync interval �َترة التَّش�ير Calendar account حساب الجدول General عام First day of week اليوم الأول من الأسبوع Time الزَّمَن Return Today Return اليوم Return Today Today Return Today اليوم ScheduleTypeEditDlg New event type تيم دو إي�ينت Edit event type تيم دو إي�ينت Import ICS file تيم دو إي�ينت Name: اسم: Color: لون: ICS File: �айл إي�ينت Cancel button إلغاء Save button ح�ظ The name can not only contain whitespaces الاسم لا يمكن أن يحتوي �قط على مسا�ات بيضاء Enter a name please أدخل اسمًا من �ضلك Shortcut Help تيم دو إي�ينت Delete event تيم دو إي�ينت Copy تيم دو إي�ينت Cut تيم دو إي�ينت Paste تيم دو إي�ينت Delete تيم دو إي�ينت Select all تيم دو إي�ينت SidebarCalendarWidget Y Y M M TimeJumpDialog Go button تيم دو إي�ينت UserloginWidget Sign In button تيم دو إي�ينت Sign Out button تيم دو إي�ينت YearFrame Y Y today Today Today اليوم linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ug.ts000066400000000000000000001407021523260663500250610ustar00rootroot00000000000000 AccountItem Sync successful ماس قەدەملەندى Network error تور خاتالىقى Server exception مۇلازىمىت�ر نورمالسىز Storage full بوشلۇق توشۇپ كەتتى AccountManager Local account يەرلىك ھ�سابات Event types كۈنتەرتىپ تۈرى CColorPickerWidget Color رەڭ Cancel button بىكار قىلىش Save button ساقلاش CDayMonthView Monday دۈشەنبە Tuesday سەيشەنبە Wednesday چارشەنبە Thursday پەيشەنبە Friday جۈمە Saturday شەنبە Sunday يەكشەنبە CDayWindow Y يىلى M ئاي D كۈنى Lunar د�ھقانلار كال�ندارى CGraphicsView New Event ي�ڭى كۈنتەرتىپ قۇرۇش CMonthScheduleNumItem %1 more يەنە %1 تۈر بار CMonthView New event كۈنتەرتىپ قۇرۇش New Event ي�ڭى كۈنتەرتىپ قۇرۇش CMonthWindow Y يىلى CMyScheduleView My Event كۈنتەرتىپىم OK button تامام Delete button ئۆچۈرۈش Edit button تەھرىرلەش CPushButton New event type كۈنتەرتىپ تۈرى قوشۇش CScheduleDlg New Event كۈنتەرتىپ قۇرۇش Edit Event كۈنتەرتىپنى تەھرىرلەش End time must be greater than start time ئاخىرلىشىش ۋاقتى باشلىنىش ۋاقتىدىن ك�يىن بولۇشى ك�رەك OK button تامام Never ھەرگىز At time of event كۈتەرتىپ باشلانغاندا 15 minutes before 15 مىنۇت بۇرۇن 30 minutes before 30 مىنۇت بۇرۇن 1 hour before 1 سائەت بۇرۇن 1 day before 1 كۈن بۇرۇن 2 days before 2 كۈن بۇرۇن 1 week before 1 ھەپتە بۇرۇن On start day (9:00 AM) كۈنتەرتىپ باشلانغان كۈن (چۈشتىن بۇرۇن 9 دا) time(s) ۋاقىت Enter a name please نام قۇرۇق قالمىسۇن The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Type: تۈرى: Description: مەزمۇنى: All Day: پۈتۈن كۈن: Starts: باشلىنىدىغان ۋاقىت: Ends: ئاخىرلىشىدىغان ۋاقىت: Remind Me: ئەسكەرتىش: Repeat: قايتىلاش: End Repeat: قايتىلاشنى ئاخىرلاشتۇرۇش: Calendar account: كال�ندار ھ�ساباتى: Calendar account كال�ندار ھ�ساباتى: Type تۈر Description مەزمۇن All Day پۈتۈن كۈن Time: ۋاقىت: Time ۋاقىت Solar مىلادىيە كال�ندارى Lunar د�ھقانلار كال�ندارى Starts باشلىنىدىغان ۋاقىت Ends ئاخىرلىشىدىغان ۋاقىت Remind Me ئەسكەرتىش Repeat قايتىلاش Daily ھەر كۈنى Weekdays خىزمەت كۈنى Weekly ھەر ھەپتە Monthly ھەر ئاي Yearly ھەر يىلى End Repeat قايتىلاشنى ئاخىرلاشتۇرۇش After دىن On غىچە ۋاقىت Cancel button بىكار قىلىش Save button ساقلاش CScheduleOperation All occurrences of a repeating event must have the same all-day status. تەكرارلانغان كۈنتەرتىپتىكى بارلىق تەكرارلىنىش چوقۇم پۈتۈن كۈنلۈك ھالەتتە بولۇشى ك�رەك. Do you want to change all occurrences? بارلىق تەكرارلاشلارنى ئۆزگەرتمەكچىمۇ؟ Cancel button بىكار قىلىش Change All ھەممىنى ئۆزگەرتىش You are changing the repeating rule of this event. كۈنتەرتىپنىڭ تەكرارلىنىش قائىدىسىنى ئۆزگەرتىۋاتىسىز. You are deleting an event. كۈنتەرتىپنى ئۆچۈرۈۋاتىسىز. Are you sure you want to delete this event? بۇ كۈنتەرتىپنى ئۆچۈرمەكچىمۇ؟ Delete button ئۆچۈرۈش Do you want to delete all occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆچۈرەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆچۈرەمسىز؟ Delete All ھەممىنى ئۆچۈرۈش Delete Only This Event مۇشۇنىلا ئۆچۈرۈرش Do you want to delete this and all future occurrences of this event, or only the selected occurrence? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆچۈرەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆچۈرەمسىز؟ Delete All Future Events بارلىق كۈنتەرتىپنى ئۆچۈرۈش You are changing a repeating event. قايتىلىنىدىغان كۈنتەرتىپنى ئۆزگەرتىۋاتىسىز. Do you want to change only this occurrence of the event, or all occurrences? بۇ كۈنتەرتىپتىكى بارلىق تەكرارلىنىشىنى ئۆزگەرتەمسىز ياكى پەقەت تاللانغان تەكرارلاشلارنىلا ئۆزگەرتەمسىز؟ All ھەممىنى Only This Event تاللانغىنىنى Do you want to change only this occurrence of the event, or this and all future occurrences? بۇ كۈنتەرتىپتىكى تەكرارلانغان ۋە كەلگۈسىدە تەكرارلىنىدىغانلىرى ئۆزگەرتەمسىز ياكى تاللانغان تەكرارلاشنىلا ئۆزگەرتەمسىز؟ All Future Events بارلىق كۈنتەرتىپلەر You have selected a leap month, and will be reminded according to the rules of the lunar calendar. تاللىغىنىڭىز كەبىسە ئ�يى، د�ھقانلار كال�ندارى بويىچە ئەسكەرتىدۇ OK button جەزىملەشتۈرۈش CScheduleSearchDateItem Y يىل M ئاي D كۈن CScheduleSearchItem Edit تەھرىرلەش Delete ئۆچۈرۈش All Day پۈتۈن كۈن CScheduleSearchView No search results ئىزدەش نەتىجىسى تىپىلمىدى CScheduleView ALL DAY پۈتۈن كۈن CSettingDialog Sunday يەكشەنبە Monday دۈشەنبە Use System Setting سىست�م ھەجىملىرىنى كىشىم 24-hour clock 24 سائەتلىك 12-hour clock 12 سائەتلىك import ICS file ICS �ايلىنى كىشىم Manual قولدا 15 mins ھەر 15 مىنۇتتا 30 mins ھەر 30 مىنۇتتا 1 hour ھەر 1 سائەتتە 24 hours ھەر 24 سائەتتە Sync Now ماس قەدەملەش Last sync ي�قىنقى ماس قەدەملىگەن ۋاقىت Please go to the Control Center to change system settings سىست�م ھەجىملىرىنى ھۆججىت قىلغانغا چۈشىنىڭ CTimeEdit (%1 mins) (%1 مىنۇت) (%1 hour) (%1 سائەت) (%1 hours) (%1 سائەت) CTitleWidget Y يىل M ئاي W ھەپتە D كۈن Search events and festivals كۈنتەرتىپ/بايرام ئىزدەش CWeekWindow Week ھەپتە Y يىلى CYearScheduleView All Day پۈتۈن كۈن No event كۈنتەرتىپ يوق CYearWindow Y يىلى CalendarWindow Calendar كال�ندار Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. كال�ندار چ�سلا كۆرۈش، كۈنتەرتىپ باشقۇرۇشتا ئىشلىتىلىدىغان كىچىك قورال. Calendarmainwindow Calendar كال�ندار Manage باشقۇرۇش Privacy Policy شەخسىيەت سىياسىتى Syncing... ماس قەدەملەۋاتىدۇ... Sync successful ماس قەدەملەندى Sync failed, please try later ماس قەدەملەنمىدى، قايتا سىناڭ CenterWidget All Day پۈتۈن كۈن DAccountDataBase Work Work Life Life Other Other DAlarmManager Close button تاقاش One day before start 1 كۈن بۇرۇن ئەسكەرتىش Remind me tomorrow ئەتە ئەسكەرتسۇن Remind me later بىر ئازدىن ك�يىن ئەسكەرتىش 15 mins later 15 مىنۇتتىن ك�يىن 1 hour later 1 سائەتىن ك�يىن 4 hours later 4 سائەتىن ك�يىن Tomorrow ئەتە Schedule Reminder كۈنتەرتىپ ئەسكەرتىشى %1 to %2 %1 دىن %2 گىچە Today Today DragInfoGraphicsView Edit تەھرىرلەش Delete ئۆچۈرۈش New event ي�ڭى كۈنتەرتىپ قۇرۇش New Event كۈنتەرتىپ قۇرۇش JobTypeListView export چыغۇر import ICS file ICS �ايلىنى كىشىم You are deleting an event type. كۈنتەرت تۈرىنى ئۆچۈرۈۋاتىسىز. All events under this type will be deleted and cannot be recovered. بۇ كۈنتەرتىپ تۈرى ئاستىدىكى بارلىق كۈنتەرتىپ ئۆچۈرۈلىدۇ ھەمدە ئەسلىگە كەلتۈرگىلى بولمايدۇ Cancel button بىكار قىلىش Delete button ئۆچۈرۈش QObject Manage calendar كال�ندار باشقۇرۇش Event types كال�ندار تۈرى Account settings ھ�سابات تەڭشىكى Account ھ�سابات Select items to be synced ماس قەدەملەيدىغان تۈرلەرنى تەڭشەڭ Events كۈنتەرتىپ General settings ئادەتتىكى تەڭشەكلەر Sync interval ماس قەدەملەش چاستوتىسى Calendar account كال�ندار ھ�ساباتى: General ئۇنىۋ�رسال First day of week ھەپتە قايسى كۈندىن باشلانسۇن Time ۋاقىت Return Today Return بۈگۈنگە قايتىش Return Today Today Return Today بۈگۈنگە قايتىش ScheduleTypeEditDlg New event type كۈنتەرتىپ تۈرى قوشۇش Edit event type كۈنتەرتىپ تۈرىنى تەھرىرلەش Import ICS file ICS �ايلىنى كىشىم Name: نامى: Color: رەڭ: ICS File: ICS �ايلى: Cancel button بىكار قىلىش Save button ساقلاش The name can not only contain whitespaces نامنىڭ ھەممىسى بوشلۇق بولسا بولمايدۇ، ئۆزگەرتىڭ Enter a name please نام قۇرۇق قالمىسۇن Shortcut Help ياردەم Delete event كۈنتەرتىپنى ئۆچۈرۈش Copy كۆچۈرۈش Cut ك�سىش Paste چاپلاش Delete ئۆچۈرۈش Select all ھەممىنى تاللاش SidebarCalendarWidget Y يىلى M ئاي TimeJumpDialog Go button ئاتلاش UserloginWidget Sign In button كىرىش Sign Out button چ�كىنىش YearFrame Y يىلى today Today Today بۈگۈن linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_uk.ts000066400000000000000000001540451523260663500250720ustar00rootroot00000000000000 AccountItem Sync successful У�пішна �инхронізаці� Network error Помилка мережі Server exception Виключенн� �ервера Storage full Переповнено �ховище даних AccountManager Local account Локальний обліковий запи� Event types Типи подій CColorPickerWidget Color Колір Cancel button Ска�увати Save button Зберегти CDayMonthView Monday Понеділок Tuesday Вівторок Wednesday Середа Thursday Четвер Friday П'�тниц� Saturday Субота Sunday �еділ� CDayWindow Y Р M М D Д Lunar Мі��чний CGraphicsView New Event �ова поді� CMonthScheduleNumItem %1 more і ще %1 CMonthView New event �ова поді� New Event �ова поді� CMonthWindow Y Р CMyScheduleView My Event Мо� поді� OK button Гаразд Delete button Вилучити Edit button Змінити CPushButton New event type �овий тип події CScheduleDlg New Event �ова поді� Edit Event Редагуванн� події End time must be greater than start time Кінцевий ча� не повинен передувати початковому ча�у OK button Гаразд Never �іколи At time of event У момент події 15 minutes before За 15 хвилин до події 30 minutes before За 30 хвилин до події 1 hour before За годину до події 1 day before За день до події 2 days before За 2 дні до події 1 week before За тиждень до події On start day (9:00 AM) У день початку (9:00) time(s) раз(ів) Enter a name please Будь ла�ка, введіть назву The name can not only contain whitespaces �азва не може �кладати�� лише з пробілів Type: Тип: Description: Опи�: All Day: Ве�ь день: Starts: Починаєть��: Ends: Завершуєть��: Remind Me: �агадати мені: Repeat: Повторенн�: End Repeat: Завершити повтори: Calendar account: Обліковий запи� календар�: Calendar account Обліковий запи� календар� Type Тип Description Опи� All Day Ве�ь день Time: Ча�: Time Ча� Solar Сон�чний Lunar Мі��чний Starts Починаєть�� Ends Кінці Remind Me �агадати мені Repeat Повторенн� Daily Щодн� Weekdays Дні тижн� Weekly Щотижн� Monthly Щомі��ц� Yearly Щорічно End Repeat Завершити повтори After Пі�л� On У Cancel button Ска�увати Save button Зберегти CScheduleOperation All occurrences of a repeating event must have the same all-day status. В у�іх повторень події має бути однаковий �тан щодо заповненн� подією у�ього дн�. Do you want to change all occurrences? Хочете змінити у�і повторенн�? Cancel button Ска�увати Change All Змінити у�і You are changing the repeating rule of this event. Ви змінюєте правило повторенн� цієї події. You are deleting an event. Ви вилучаєте запи� події. Are you sure you want to delete this event? Ви впевнені, що бажаєте вилучити цей запи� події? Delete button Вилучити Do you want to delete all occurrences of this event, or only the selected occurrence? Ви хочете вилучити у�і повторенн� цієї події чи лише позначений запи�? Delete All Вилучити в�і Delete Only This Event Вилучити лише цей запи� Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Ви хочете вилучити у�і майбутні повторенн� цієї події чи лише позначені запи�и? Delete All Future Events Вилучити у�і майбутні повторенн� You are changing a repeating event. Ви вно�ите зміни до повторюваної події. Do you want to change only this occurrence of the event, or all occurrences? Хочете змінити лише це повторенн� події чи у�і повторенн�? All У�і Only This Event Лише цей запи� Do you want to change only this occurrence of the event, or this and all future occurrences? Хочете змінити лише це повторенн� події чи у�і майбутні повторенн�? All Future Events У�і майбутні повторенн� You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Вами вибрано ви�око�ний мі��ць. Ва� буде попереджено відповідно до правил мі��чного календар�. OK button Гаразд CScheduleSearchDateItem Y Р M М D Д CScheduleSearchItem Edit Змінити Delete Вилучити All Day Ве�ь день CScheduleSearchView No search results �ічого не знайдено CScheduleView ALL DAY УВЕСЬ ДЕ�Ь CSettingDialog Sunday �еділ� Monday Понеділок Use System Setting Викори�тати �и�темні параметри 24-hour clock 24-годинний формат ча�у 12-hour clock 12-годинний формат ча�у import ICS file імпортувати файл ICS Manual Вручну 15 mins 15 хвилин 30 mins 30 хвилин 1 hour 1 година 24 hours 24 години Sync Now Синхронізувати зараз Last sync О�танн� �инхронізаці� Please go to the <a href='/'>Control Center</a> to change system settings Будь ла�ка, перейдіть до <a href='/'>Центру керуванн�</a>, щоб змінити параметри �и�теми CTimeEdit (%1 mins) (%1 хв.) (%1 hour) (%1 год.) (%1 hours) (%1 год.) CTitleWidget Y Р M М W Т D Д Search events and festivals Шукати події та �в�та CWeekWindow Week Тиждень Y Р CYearScheduleView All Day Ве�ь день No event �емає події CYearWindow Y Р CalendarWindow Calendar Календар Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. «Календар» — ін�трумент дл� перегл�ду календар� дат, також чудовий планувальник дл� �творенн� розкладів на кожен день. Calendarmainwindow Calendar Календар Manage Керувати Privacy Policy Правила конфіденційно�ті Syncing... Синхронізаці�... Sync successful У�пішна �инхронізаці� Sync failed, please try later Помилка �инхронізації. Будь ла�ка, повторіть �пробу пізніше CenterWidget All Day Ве�ь день DAccountDataBase Work Робота Life Житт� Other Інше DAlarmManager Close button Закрити One day before start За день до початку Remind me tomorrow �агадати мені завтра Remind me later �агадати мені пізніше 15 mins later За 15 хвилин 1 hour later За 1 годину 4 hours later За 4 години Tomorrow Завтра Schedule Reminder Розклад нагадуванн� %1 to %2 з %1 до %2 Today Сьогодні DragInfoGraphicsView Edit Редагувати Delete Видалити New event �ова поді� New Event �ова поді� JobTypeListView export ек�портувати import ICS file імпортувати файл ICS You are deleting an event type. Ви вилучаєте тип події. All events under this type will be deleted and cannot be recovered. У�і події цього типу буде вилучено, їх не можна буде відновити. Cancel button Ска�увати Delete button Вилучити QObject Manage calendar Керувати календарем Event types Типи подій Account settings Параметри облікового запи�у Account Обліковий запи� Select items to be synced Виберіть запи�и дл� �инхронізації Events Події General settings Загальні параметри Sync interval Інтервал �инхронізації Calendar account Обліковий запи� календар� General Загальне First day of week Перший день тижн� Time Ча� Return Today Return Сьогодні Return Today Today Return Today Сьогодні ScheduleTypeEditDlg New event type �овий тип події Edit event type Редагувати тип події Import ICS file Імпортувати файл ICS Name: �азва: Color: Колір: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: Файл <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>: Cancel button Ска�увати Save button Зберегти The name can not only contain whitespaces �азва не може �кладати�� лише з пробілів Enter a name please Будь ла�ка, введіть назву Shortcut Help Допомога Delete event Вилучити подію Copy Копіювати Cut Вирізати Paste В�тавити Delete Вилучити Select all Вибрати в�е SidebarCalendarWidget Y Р M М TimeJumpDialog Go button Перейти UserloginWidget Sign In button Увійти Sign Out button Вийти YearFrame Y Р today Today Today Сьогодні linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_ur.ts000066400000000000000000001361761523260663500251060ustar00rootroot00000000000000 AccountItem Sync successful سنسکسیس �عال Network error گریز نیٹور Server exception اکسیشن سرور Storage full سٹوریج بھرا �وا AccountManager Local account لکل اکاونٹ Event types اکسیشن ٹائپس CColorPickerWidget Color کولر Cancel button انسیل Save button سیو CDayMonthView Monday منگل Tuesday سوموار Wednesday بدھ Thursday جمعرات Friday پیر Saturday آپر Sunday اربع CDayWindow Y ی M ام D ڈی Lunar چاندی CGraphicsView New Event نیو اکسیشن CMonthScheduleNumItem %1 more %1 زیاد� CMonthView New event نیو اکسیشن New Event نیو اکسیشن CMonthWindow Y ی CMyScheduleView My Event می اکسیشن OK button OK Delete button ڈیلیٹ Edit button ایڈٹ CPushButton New event type نیو اکسیشن ٹائپ CScheduleDlg New Event نیا ایونٹ Edit Event ایونٹ وائیٹ End time must be greater than start time اکثر وقت شروع وقت سے زیاد� �ونا چا�یے OK button اکثر Never �ر کبھی At time of event ایونٹ کے وقت 15 minutes before 15 منٹ پ�لے 30 minutes before 30 منٹ پ�لے 1 hour before 1 گھنٹ� پ�لے 1 day before 1 دن پ�لے 2 days before 2 دن پ�لے 1 week before 1 ��ت� پ�لے On start day (9:00 AM) شروع دن پر (9:00 AM) time(s) ٹائم(ز) Enter a name please نام درج کریں The name can not only contain whitespaces نام صر� �یڈ سپیسز کو شامل ن�یں کر سکتا Type: ٹائیپ: Description: Description: All Day: پورا دن: Starts: شروع �وتا �ے: Ends: ختم �وتا �ے: Remind Me: ذکر کر دیجیے: Repeat: تکرار: End Repeat: تکرار ختم کریں Calendar account: کیلنڈر اکاؤنٹ: Calendar account کیلنڈر اکاؤنٹ Type ٹائیپ Description Description All Day پورا دن Time: ٹائم: Time وقت Solar سولر Lunar لوار Starts شروع Ends نهاية Remind Me ذكّرني Repeat تكرار Daily يومي Weekdays أيام الأسبوع Weekly أسبوعي Monthly 월간 Yearly سنوي End Repeat نهاية التكرار After بعد On على Cancel button الغاء Save button ذخیره CScheduleOperation All occurrences of a repeating event must have the same all-day status. �ر تکراری واقع� کی تمام واقعات کے ایک �ی �ول دن حیثیت رکنی �ے۔ Do you want to change all occurrences? آپ تمام واقعات کو تبدیل کرنا چا�تے �یں؟ Cancel button الغاء Change All تمام تبدیل کریں You are changing the repeating rule of this event. آپ اس واقع� کی تکراری قاعد� تبدیل کر ر�ے �یں۔ You are deleting an event. آپ ایک واقع� �ٹار�ے �یں۔ Are you sure you want to delete this event? آپ اس واقع� کو �ٹانا چا�تے �یں؟ Delete button �ٹا دیں Do you want to delete all occurrences of this event, or only the selected occurrence? آپ اس واقع� کی تمام واقعات �ٹانا چا�تے �یں یا صر� منتخب واقع� �ٹانا؟ Delete All تمام �ٹا دیں Delete Only This Event صر� اس واقع� کو �ٹا دیں Do you want to delete this and all future occurrences of this event, or only the selected occurrence? آپ اس واقع� اور اس کی تمام مستقبل کی واقعات �ٹانا چا�تے �یں یا صر� منتخب واقع� �ٹانا؟ Delete All Future Events تمام مستقبل کی واقعات �ٹا دیں You are changing a repeating event. آپ �میش� د�ری واقع� تبدیل کر ر�ے �یں۔ Do you want to change only this occurrence of the event, or all occurrences? کیا آپ �میش� د�ری واقع� کی صر� ی� واقع� تبدیل کرنا چا�تے �یں، یا سب واقعات؟ All سب Only This Event صر� ی� واقع� Do you want to change only this occurrence of the event, or this and all future occurrences? کیا آپ �میش� د�ری واقع� کی صر� ی� واقع� تبدیل کرنا چا�تے �یں، یا ی� اور سب مستقبل کی واقعات؟ All Future Events سب مستقبل واقعات You have selected a leap month, and will be reminded according to the rules of the lunar calendar. آپ نے ایک چاندی کے م�ین� کی توسیع کیا �ے، اور آپ کو ما� مبارک کے قواعد کے مطابق یاد دلایا جائے گا۔ OK button ٹوکر CScheduleSearchDateItem Y ی M م D ڈی CScheduleSearchItem Edit ویڈیٹ Delete ڈیلیٹ All Day پورا دن CScheduleSearchView No search results تلاش کے نتائج ن�یں ملے CScheduleView ALL DAY پورا دن CSettingDialog Sunday اتوار Monday سوموار Use System Setting سیسٹم سیٹنگ استعمال کریں 24-hour clock 24 گھنٹ� گھڑی 12-hour clock 12 گھنٹ� گھڑی import ICS file ICS �ائل درواز� کریں Manual �نڈل 15 mins 15 منٹ 30 mins 30 منٹ 1 hour 1 گھنٹ� 24 hours 24 �نٹ� Sync Now اب سنک کریں Last sync آخری سنک Please go to the Control Center to change system settings ل�ٰذا سسٹم سیٹنگ تبدیل کرنے کے لئے کنٹرول سنٹر جائیں CTimeEdit (%1 mins) (%1 دقیق�) (%1 hour) (%1 گھنٹ�) (%1 hours) (%1 گھنٹے) CTitleWidget Y ج M م W اے D د Search events and festivals واقعات اور �ضیلتیں تلاش کریں CWeekWindow Week ��ت� Y 'ج' CYearScheduleView All Day �ر دن No event کوئی واقع� ن�یں CYearWindow Y 'ج' CalendarWindow Calendar کیلینڈر Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. کیلینڈر دن کی تاریخ دیکھنے کے لئے ایک ادا کیلئے �ے، اور ایک ذ�ین دن کا منصوب� بنانے کا ادا بھی �ے جس کے ذریعی آپ اپنی زندگی کے تمام چیزوں کو منظم کر سکتے �یں۔ Calendarmainwindow Calendar کیلینڈر Manage ا�نچا کریں Privacy Policy خصوصیتیں پالیسی Syncing... سنسن کر ر�ے �یں... Sync successful سنسن کامیاب ر�ے Sync failed, please try later سنسن کا �یل �و گیا، کچھ دیر بعد کوشش کریں CenterWidget All Day �ر دن DAccountDataBase Work کام Life زندگی Other دیگر DAlarmManager Close button بند کریں One day before start شروع کرنے کے ایک دن پ�لے Remind me tomorrow میں کل یاد کریں Remind me later میں کچھ دیر بعد یاد کریں 15 mins later 15 دقیق� بعد 1 hour later 1 گھنٹ� بعد 4 hours later 4 گھنٹ� بعد Tomorrow کل Schedule Reminder اپنی یادداشت کے لیے وقت ضبط کریں %1 to %2 '%1 تا %2' Today آج DragInfoGraphicsView Edit ویراگ کریں Delete حذ� کریں New event نیا ایونٹ New Event نیا ایونٹ JobTypeListView export ایکسپورٹ import ICS file ایکس �ائل اتے ایکسپورٹ کریں You are deleting an event type. آپ ایک ایونٹ کی قسم حذ� کر ر�ے �یں۔ All events under this type will be deleted and cannot be recovered. اس قسم کے تمام ایونٹ حذ� کر دیے جائیں گے اور واپس ن� لے کیے جا سکیں گے۔ Cancel button انصرا� Delete button حذ� QObject Manage calendar کیلینڈر �یڈ کریں Event types اےونٹ کی قسم Account settings اکاونٹ سیٹنگز Account اکاونٹ Select items to be synced سینکن کرنے والے آئٹمز کو منتخب کریں Events اےونٹس General settings عام سیٹنگز Sync interval سینکن انٹریوال Calendar account کیلینڈر اکاونٹ General عام First day of week ��تے کا پ�لا دن Time ٹائم Return Today Return آج Return Today Today Return Today آج ScheduleTypeEditDlg New event type نیا واقع� کی قسم Edit event type واقع� کی قسم تبدیل کریں Import ICS file ICS �ائل استور کریں Name: نام: Color: رنگ: ICS File: ICS �ائل: Cancel button انصرا� Save button ذخیر� کریں The name can not only contain whitespaces نام صر� خالی جگ�وں سے تیار کیا جا سکتا �ے Enter a name please برا� کرم ایک نام درج کریں Shortcut Help مدد Delete event واقع� حذ� کریں Copy کاپی Cut کٹ Paste پیسٹ Delete حذ� Select all سب کو انتخاب کریں SidebarCalendarWidget Y ج M م TimeJumpDialog Go button چلیں UserloginWidget Sign In button لوگ ان Sign Out button لوگ آؤٹ YearFrame Y ج today Today Today آج linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_vi.ts000066400000000000000000001343661523260663500250750ustar00rootroot00000000000000 AccountItem Sync successful �ồng bộ thành công Network error Lỗi mạng Server exception Lỗi ngoại lệ máy chủ Storage full Ổ chứa đầy AccountManager Local account Tài khoản địa phương Event types Loại sự kiện CColorPickerWidget Color Màu Cancel button Hủy Save button Lưu CDayMonthView Monday Thứ hai Tuesday Thứ ba Wednesday Thứ tư Thursday Thứ năm Friday Thứ sáu Saturday Thứ bảy Sunday Chủ nhật CDayWindow Y Y M M D D Lunar Âm lịch CGraphicsView New Event Sự kiện mới CMonthScheduleNumItem %1 more thêm %1 CMonthView New event Sự kiện mới New Event Sự kiện mới CMonthWindow Y Y CMyScheduleView My Event Sự kiện của Tôi OK button OK Delete button Xóa Edit button Chỉnh sửa CPushButton New event type Loại sự kiện mới CScheduleDlg New Event Sự kiện mới Edit Event Chỉnh sửa Sự kiện End time must be greater than start time Th�i gian kết thúc phải lớn hơn th�i gian bắt đầu OK button OK Never Không bao gi� At time of event Vào th�i điểm sự kiện 15 minutes before trước 15 phút 30 minutes before trước 30 phút 1 hour before 1 gi� trước 1 day before 1 ngày trước 2 days before 2 ngày trước 1 week before 1 tuần trước On start day (9:00 AM) Bắt đầu lúc (9:00 AM) time(s) th�i gian(s) Enter a name please Vui lòng nhập tên The name can not only contain whitespaces Tên không thể chỉ chứa khoảng trắng Type: Loại: Description: Mô tả: All Day: Tất cả các ngày: Starts: Bắt đầu: Ends: Kết thúc: Remind Me: Nhắc nhở tôi: Repeat: Lặp lại: End Repeat: Kết thúc lặp lại: Calendar account: Tài khoản lịch: Calendar account Tài khoản lịch Type Loại Description Mô tả All Day Tất cả các ngày Time: Th�i gian: Time Th�i gian Solar Nhiệt đới Lunar Âm lịch Starts Bắt đầu Ends Kết thúc Remind Me Nhắc nhở tôi Repeat Lặp lại Daily Hằng ngày Weekdays Các ngày trong tuần Weekly Hàng tuần Monthly Hàng tháng Yearly Hàng năm End Repeat Kết thúc lặp lại After Sau On Mở Cancel button Hủy Save button Lưu CScheduleOperation All occurrences of a repeating event must have the same all-day status. Tất cả các lần xuất hiện của một sự kiện lặp lại phải có cùng trạng thái ngày. Do you want to change all occurrences? Bạn có muốn thay đổi tất cả các lần xuất hiện? Cancel button Hủy Change All Thay đổi tất cả You are changing the repeating rule of this event. Bạn đang thay đổi quy tắc lặp lại của sự kiện này. You are deleting an event. Bạn đã xóa một sự kiện Are you sure you want to delete this event? Bạn có muốn xóa sự kiện này không Delete button Xóa Do you want to delete all occurrences of this event, or only the selected occurrence? Bạn có muốn xóa tất cả các lần xuất hiện của sự kiện này hay chỉ xảy ra sự kiện đã ch�n? Delete All Xóa tất cả Delete Only This Event Chỉ xóa sự kiện này Do you want to delete this and all future occurrences of this event, or only the selected occurrence? Bạn có muốn xóa sự kiện này và tất cả các lần xuất hiện trong tương lai của sự kiện này hay chỉ xảy ra sự kiện đã ch�n? Delete All Future Events Xóa tất cả các sự kiện trong tương lai You are changing a repeating event. Bạn đang thay đổi một sự kiện lặp lại. Do you want to change only this occurrence of the event, or all occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này hay tất cả các sự kiện? All Tất cả Only This Event Chỉ sự kiện này Do you want to change only this occurrence of the event, or this and all future occurrences? Bạn có muốn chỉ thay đổi sự xuất hiện của sự kiện này, hoặc tất cả các lần xuất hiện trong tương lai? All Future Events Tất cả các sự kiện trong tương lai You have selected a leap month, and will be reminded according to the rules of the lunar calendar. Bạn đã ch�n một tháng nhuận, và sẽ được nhắc nhở theo các quy tắc của lịch âm. OK button OK CScheduleSearchDateItem Y Y M M D D CScheduleSearchItem Edit Chỉnh sửa Delete Xóa All Day Tất cả các ngày CScheduleSearchView No search results Không có kết quả tìm kiếm nào CScheduleView ALL DAY Tất cả các ngày CSettingDialog Sunday Chủ nhật Monday Thứ hai Use System Setting Sử dụng cài đặt hệ thống 24-hour clock �ồng hồ 24 gi� 12-hour clock �ồng hồ 12 gi� import ICS file Nhập tệp ICS Manual Tự chỉnh 15 mins 15 phút 30 mins 30 phút 1 hour 1 gi� 24 hours 24 gi� Sync Now �ồng bộ ngay Last sync �ồng bộ lần cuối Please go to the Control Center to change system settings Vui lòng truy cập Trung tâm �i�u khiển để thay đổi cài đặt hệ thống CTimeEdit (%1 mins) (%1 phút) (%1 hour) (%1 gi�) (%1 hours) (%1 gi�) CTitleWidget Y Y M M W W D D Search events and festivals Tìm sự kiện và lễ hội CWeekWindow Week Tuần Y Y CYearScheduleView All Day Tất cả các ngày No event Không có sự kiện nào CYearWindow Y Y CalendarWindow Calendar Lịch Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. Lịch là một công cụ để xem ngày, và cũng là công cụ sắp xếp kế hoạch, sự kiện hàng ngày thông minh. Calendarmainwindow Calendar Lịch Manage Quản lý Privacy Policy Chính sách bảo mật Syncing... �ồng bộ hóa... Sync successful �ồng bộ thành công Sync failed, please try later �ồng bộ thất bại, vui lòng thử lại sau CenterWidget All Day Tất cả các ngày DAccountDataBase Work Công việc Life Cuộc sống Other Khác DAlarmManager Close button �óng lại One day before start Một ngày trước khi bắt đầu Remind me tomorrow Nhắc tôi ngày mai Remind me later Nhắc tôi sau 15 mins later 15 phút sau 1 hour later 1 gi� sau 4 hours later 4 gi� sau Tomorrow Ngày mai Schedule Reminder Lịch trình nhắc nhở %1 to %2 '%1 đến %2' Today Hôm nay DragInfoGraphicsView Edit Chỉnh sửa Delete Xóa New event Sự kiện mới New Event Sự kiện mới JobTypeListView export xuất import ICS file nhập tệp ICS You are deleting an event type. Bạn đang xóa một loại sự kiện. All events under this type will be deleted and cannot be recovered. Tất cả sự kiện trong loại này sẽ bị xóa và không thể khôi phục. Cancel button Hủy Delete button Xóa QObject Manage calendar Quản lý lịch Event types Loại sự kiện Account settings Cài đặt tài khoản Account Tài khoản Select items to be synced Ch�n các mục để đồng bộ Events Sự kiện General settings Cài đặt chung Sync interval Khoảng th�i gian đồng bộ Calendar account Tài khoản lịch General Tổng quát First day of week Ngày đầu tuần Time Th�i gian Return Today Return Hôm nay Return Today Today Return Today Hôm nay ScheduleTypeEditDlg New event type Loại sự kiện mới Edit event type Chỉnh sửa loại sự kiện Import ICS file Nhập tệp ICS Name: Tên: Color: 'Màu:' ICS File: 'Tệp ICS:' Cancel button Hủy Save button Lưu The name can not only contain whitespaces Tên không chỉ chứa khoảng trống Enter a name please Vui lòng nhập tên Shortcut Help Giúp đỡ Delete event Xóa sự kiện Copy Sao chép Cut Cắt Paste Dán Delete Xóa Select all Ch�n tất cả SidebarCalendarWidget Y Y M M TimeJumpDialog Go button �i UserloginWidget Sign In button �ăng nhập Sign Out button �ăng xuất YearFrame Y Y today Today Today Hôm nay linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_zh_CN.ts000066400000000000000000001456451523260663500254620ustar00rootroot00000000000000 AccountItem Sync successful �步�功 Network error 网络异常 Server exception �务器异常 Storage full 存储已满 AccountManager Local account 本地�户 Event types 日程类型 CColorPickerWidget Color 颜色 Cancel button � 消 Save button � 存 CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y 年 M 月 D 日 Lunar 农历 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 还有%1项 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y 年 CMyScheduleView My Event 我的日程 OK button 确 定 Delete button 删 除 Edit button 编 辑 CPushButton New event type 新增日程类型 CScheduleDlg New Event 新建日程 Edit Event 编辑日程 End time must be greater than start time 结�时间需晚于开始时间 OK button 确 定 Never 从� At time of event 日程开始时 15 minutes before 15分钟� 30 minutes before 30分钟� 1 hour before 1�时� 1 day before 1天� 2 days before 2天� 1 week before 1周� On start day (9:00 AM) 日程�生当天(上�9点) time(s) 次� Enter a name please �称�能为空 The name can not only contain whitespaces �称�能设置为全空格,请修改 Type: 类型: Description: 内容: All Day: 全天: Starts: 开始时间: Ends: 结�时间: Remind Me: �醒: Repeat: ��: End Repeat: 结���: Calendar account: 日历�户: Calendar account 日历�户 Type 类型 Description 内容 All Day 全天 Time: 时间: Time 时间 Solar 公历 Lunar 农历 Starts 开始时间 Ends 结�时间 Remind Me �醒 Repeat �� Daily �天 Weekdays 工作日 Weekly �周 Monthly �月 Yearly �年 End Repeat 结��� After 于 On 于日期 Cancel button � 消 Save button � 存 CScheduleOperation All occurrences of a repeating event must have the same all-day status. ��日程的所有��必须具有相�的全天状�。 Do you want to change all occurrences? 您�更改所有���? Cancel button � 消 Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的��规则。 You are deleting an event. 您正在删除日程。 Are you sure you want to delete this event? 您确定�删除此日程�? Delete button 删 除 Do you want to delete all occurrences of this event, or only the selected occurrence? 您�删除此日程的所有��,还是�删除所选��? Delete All 全部删除 Delete Only This Event 仅删除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您�删除此日程的这个��和所有将���,还是�删除所选��? Delete All Future Events 删除所有将�日程 You are changing a repeating event. 您正在更改��日程。 Do you want to change only this occurrence of the event, or all occurrences? 您�更改此日程的仅这一个��,还是更改它的所有��? All 全部日程 Only This Event 仅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您�更改此日程的这个��和所有将���,还是�更改所选��? All Future Events 所有将�日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您选择的是闰月,将按照农历规则�醒 OK button 确 定 CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 编辑 Delete 删除 All Day 全天 CScheduleSearchView No search results 无�索结果 CScheduleView ALL DAY 全天 CSettingDialog Sunday 周日 Monday 周一 Use System Setting 跟�系统 24-hour clock 24�时制 12-hour clock 12�时制 import ICS file 导入ICS文件 Manual 手动 15 mins �15分钟 30 mins �30分钟 1 hour �1�时 24 hours �24�时 Sync Now 立��步 Last sync 最近�步时间 Please go to the <a href='/'>Control Center</a> to change system settings 请到<a href='/'>控制中心</a>更改系统设置 CTimeEdit (%1 mins) (%1分钟) (%1 hour) (%1�时) (%1 hours) (%1�时) CTitleWidget Y 年 M 月 W 周 D 日 Search events and festivals �索日程/节日 CWeekWindow Week 周 Y 年 CYearScheduleView All Day 全天 No event 无日程 CYearWindow Y 年 CalendarWindow Calendar 日历 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日历是一款查看日期�管�日程的�工具。 Calendarmainwindow Calendar 日历 Manage 管� Privacy Policy ��政策 Syncing... 正在�步... Sync successful �步�功 Sync failed, please try later �步失败,请���试 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close button 关 闭 One day before start ��1天�醒 Remind me tomorrow 明天�醒 Remind me later ���醒 15 mins later 15分钟� 1 hour later 1�时� 4 hours later 4�时� Tomorrow 明天 Schedule Reminder 日程�醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 编辑 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView export 导出 import ICS file 导入ICS文件 You are deleting an event type. 您正在删除日程类型。 All events under this type will be deleted and cannot be recovered. 此日程类型下的所有日程都会删除且����。 Cancel button � 消 Delete button 删 除 QObject Manage calendar 日历管� Event types 日程类型 Account settings �户设置 Account �户 Select items to be synced 设置您的�步项 Events 日程 General settings 通用设置 Sync interval �步频率 Calendar account 日历�户 General 通用 First day of week �星期开始于 Time 时间 Return Today Return 返回今天 Return Today Today Return Today 返回今天 ScheduleTypeEditDlg New event type 新增日程类型 Edit event type 编辑日程类型 Import ICS file 导入ICS文件 Name: �称: Color: 颜色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>文件: Cancel button � 消 Save button � 存 The name can not only contain whitespaces �称�能设置为全空格,请修改 Enter a name please �称�能为空 Shortcut Help 帮助 Delete event 删除日程 Copy �制 Cut 剪切 Paste 粘贴 Delete 删除 Select all 全选 SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go button 跳 转 UserloginWidget Sign In button 登 录 Sign Out button 退出登录 YearFrame Y 年 today Today Today 今天 linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_zh_HK.ts000066400000000000000000001573051523260663500254600ustar00rootroot00000000000000 AccountItem Sync successful �步�功 Network error 網絡異常 Server exception 伺�器異常 Storage full 存儲已滿 AccountManager Local account 本地帳戶 Event types 日程類型 CColorPickerWidget Color �色 Cancel � 消 button Save � 存 button CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y 年 M 月 D 日 Lunar 農曆 CGraphicsView New Event 新建日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 新建日程 New Event 新建日程 CMonthWindow Y 年 CMyScheduleView My Event 我的日程 OK 確 定 button Delete 刪 除 button Edit 更 改 button CPushButton New event type 新增日程類型 CScheduleDlg New Event 新建日程 Edit Event 更改日程 End time must be greater than start time ��時間需晚於開始時間 OK 確 定 button Never 永� At time of event 日程開始時 15 minutes before 15分�� 30 minutes before 30分�� 1 hour before 1�時� 1 day before 1天� 2 days before 2天� 1 week before 1週� On start day (9:00 AM) 日程發生當天(上�9點) time(s) 次後 Enter a name please �稱�能為空 The name can not only contain whitespaces �稱�能設置為全空格,請修改 Type: 類型: Description: �述: All Day: 全天: Starts: 開始時間: Ends: ��時間: Remind Me: �醒: Repeat: �複: End Repeat: ���複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description �述 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends ��時間 Remind Me �醒 Repeat �複 Daily �天 Weekdays 工作日 Weekly �週 Monthly �月 Yearly �年 End Repeat ���複 After 於 On 於日期 Cancel � 消 button Save � 存 button CScheduleOperation All occurrences of a repeating event must have the same all-day status. �複日程的所有�複必須具有相�的全天狀態。 Do you want to change all occurrences? 您�更改所有�複嗎? Cancel � 消 button Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的�複�則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定�刪除此日程嗎? Delete 刪 除 button Do you want to delete all occurrences of this event, or only the selected occurrence? 您�刪除此日程的所有�複,還是�刪除所��複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您�刪除此日程的這個�複和所有將來�複,還是�刪除所��複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改�複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您�更改此日程的僅這一個�複,還是更改它的所有�複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您�更改此日程的這個�複和所有將來�複,還是�更改所��複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您�擇的是�月,將按照農曆�則�醒 OK 確 定 button CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 更改 Delete 刪除 All Day 全天 CScheduleSearchView No search results 無�索�果 CScheduleView ALL DAY 全天 CSettingDialog Sunday 週日 Monday 週一 Use System Setting 跟隨系統 24-hour clock 24�時制 12-hour clock 12�時制 import ICS file 導入ICS文件 Manual 手動 15 mins �15分� 30 mins �30分� 1 hour �1�時 24 hours �24�時 Sync Now 立��步 Last sync 最近�步時間 Please go to the <a href='/'>Control Center</a> to change system settings 請到<a href='/'>控制中心</a>更改系統設置 CTimeEdit (%1 mins) (%1分�) (%1 hour) (%1�時) (%1 hours) (%1�時) CTitleWidget Y 年 M 月 W 週 D 日 Search events and festivals �索日程/節日 CWeekWindow Week 週 Y 年 CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y 年 CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期�管�日程的�工具。 Calendarmainwindow Calendar 日曆 Manage 管� Privacy Policy �隱政策 Syncing... 正在�步... Sync successful �步�功 Sync failed, please try later �步失敗,請�後�試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close 關 閉 button One day before start ��1天�醒 Remind me tomorrow 明天�醒 Remind me later �後�醒 15 mins later 15分�後 1 hour later 1�時後 4 hours later 4�時後 Tomorrow 明天 Schedule Reminder 日程�醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 更改 Delete 删除 New event 新建日程 New Event 新建日程 JobTypeListView export 導出 import ICS file 導入ICS文件 You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且���復。 Cancel � 消 button Delete 刪 除 button QObject Manage calendar 日曆管� Event types 日程類型 Account settings 帳戶設置 Account 賬戶 Select items to be synced 設置您的�步項 Events 日程 General settings 通用設置 Sync interval �步頻率 Calendar account 日曆帳戶 General 通用 First day of week �星期開始於 Time 時間 Return Today 今天 Return Return Today Today 今天 Return Today ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Import ICS file 導入ICS文件 Name: �稱: Color: �色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>文件: Cancel � 消 button Save � 存 button The name can not only contain whitespaces �稱�能設置為全空格,請修改 Enter a name please �稱�能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste �貼 Delete 刪除 Select all �擇全部 SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go 跳 轉 button UserloginWidget Sign In 登 錄 button Sign Out 退出登錄 button YearFrame Y 年 today Today 今天 Today linuxdeepin-dde-calendar-f6d670a/translations/dde-calendar_zh_TW.ts000066400000000000000000001572771523260663500255200ustar00rootroot00000000000000 AccountItem Sync successful �步�功 Network error 網路異常 Server exception 伺�器異常 Storage full 儲存已滿 AccountManager Local account 本機帳戶 Event types 日程類型 CColorPickerWidget Color �色 Cancel � 消 button Save 儲 存 button CDayMonthView Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 CDayWindow Y 年 M 月 D 日 Lunar 農曆 CGraphicsView New Event 建立日程 CMonthScheduleNumItem %1 more 還有%1項 CMonthView New event 建立日程 New Event 建立日程 CMonthWindow Y 年 CMyScheduleView My Event 我的日程 OK 確 定 button Delete 刪 除 button Edit 編 輯 button CPushButton New event type 新增日程類型 CScheduleDlg New Event 建立日程 Edit Event 編輯日程 End time must be greater than start time ��時間需晚於開始時間 OK 確 定 button Never 從� At time of event 日程開始時 15 minutes before 15分�� 30 minutes before 30分�� 1 hour before 1�時� 1 day before 1天� 2 days before 2天� 1 week before 1週� On start day (9:00 AM) 日程發生當天(上�9點) time(s) 次後 Enter a name please �稱�能為空 The name can not only contain whitespaces �稱�能設置為全空格,請修改 Type: 類型: Description: 內容: All Day: 全天: Starts: 開始時間: Ends: ��時間: Remind Me: �醒: Repeat: �複: End Repeat: ���複: Calendar account: 日曆帳戶: Calendar account 日曆帳戶 Type 類型 Description 內容 All Day 全天 Time: 時間: Time 時間 Solar 公曆 Lunar 農曆 Starts 開始時間 Ends ��時間 Remind Me �醒 Repeat �複 Daily �天 Weekdays 工作日 Weekly �週 Monthly �月 Yearly �年 End Repeat ���複 After 於 On 於日期 Cancel � 消 button Save 儲 存 button CScheduleOperation All occurrences of a repeating event must have the same all-day status. �複日程的所有�複必須具有相�的全天狀態。 Do you want to change all occurrences? 您�更改所有�複嗎? Cancel � 消 button Change All 全部更改 You are changing the repeating rule of this event. 您正在更改日程的�複�則。 You are deleting an event. 您正在刪除日程。 Are you sure you want to delete this event? 您確定�刪除此日程嗎? Delete 刪 除 button Do you want to delete all occurrences of this event, or only the selected occurrence? 您�刪除此日程的所有�複,還是�刪除所��複? Delete All 全部刪除 Delete Only This Event 僅刪除此日程 Do you want to delete this and all future occurrences of this event, or only the selected occurrence? 您�刪除此日程的這個�複和所有將來�複,還是�刪除所��複? Delete All Future Events 刪除所有將來日程 You are changing a repeating event. 您正在更改�複日程。 Do you want to change only this occurrence of the event, or all occurrences? 您�更改此日程的僅這一個�複,還是更改它的所有�複? All 全部日程 Only This Event 僅此日程 Do you want to change only this occurrence of the event, or this and all future occurrences? 您�更改此日程的這個�複和所有將來�複,還是�更改所��複? All Future Events 所有將來日程 You have selected a leap month, and will be reminded according to the rules of the lunar calendar. 您�擇的是�月,將按照農曆�則�醒 OK 確 定 button CScheduleSearchDateItem Y 年 M 月 D 日 CScheduleSearchItem Edit 編輯 Delete 刪除 All Day 全天 CScheduleSearchView No search results 找�到�果 CScheduleView ALL DAY 全天 CSettingDialog Sunday 週日 Monday 週一 Use System Setting 跟隨系統 24-hour clock 24�時制 12-hour clock 12�時制 import ICS file 匯入ICS檔案 Manual 手動 15 mins �15分� 30 mins �30分� 1 hour �1�時 24 hours �24�時 Sync Now 立��步 Last sync 最近�步時間 Please go to the <a href='/'>Control Center</a> to change system settings 請到<a href='/'>控制中心</a>更改系統設定 CTimeEdit (%1 mins) (%1分�) (%1 hour) (%1�時) (%1 hours) (%1�時) CTitleWidget Y 年 M 月 W 週 D 日 Search events and festivals �尋日程/節日 CWeekWindow Week 週 Y 年 CYearScheduleView All Day 全天 No event 無日程 CYearWindow Y 年 CalendarWindow Calendar 日曆 Calendar is a tool to view dates, and also a smart daily planner to schedule all things in life. 日曆是一款查看日期�管�日程的�工具。 Calendarmainwindow Calendar 日曆 Manage 管� Privacy Policy 隱�政策 Syncing... 正在�步... Sync successful �步�功 Sync failed, please try later �步失敗,請�後�試 CenterWidget All Day 全天 DAccountDataBase Work 工作 Life 生活 Other 其他 DAlarmManager Close 關 閉 button One day before start ��1天�醒 Remind me tomorrow 明天�醒 Remind me later �後�醒 15 mins later 15分�後 1 hour later 1�時後 4 hours later 4�時後 Tomorrow 明天 Schedule Reminder 日程�醒 %1 to %2 %1 至 %2 Today 今天 DragInfoGraphicsView Edit 編輯 Delete 刪除 New event 建立日程 New Event 建立日程 JobTypeListView export 匯出 import ICS file 匯入ICS檔案 You are deleting an event type. 您正在刪除日程類型。 All events under this type will be deleted and cannot be recovered. 此日程類型下的所有日程都會刪除且���復。 Cancel � 消 button Delete 刪 除 button QObject Manage calendar 日曆管� Event types 日程類型 Account settings 帳戶設定 Account 帳戶 Select items to be synced 設定您的�步項 Events 日程 General settings 一般設定 Sync interval �步頻率 Calendar account 日曆帳戶 General 通用 First day of week �星期開始於 Time 時間 Return Today 今天 Return Return Today Today 今天 Return Today ScheduleTypeEditDlg New event type 新增日程類型 Edit event type 編輯日程類型 Import ICS file 匯入ICS檔案 Name: �稱: Color: �色: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a> File: <a href='https://wikipedia.org/wiki/ICalendar'>ICS</a>檔案: Cancel � 消 button Save 儲 存 button The name can not only contain whitespaces �稱�能設置為全空格,請修改 Enter a name please �稱�能為空 Shortcut Help 幫助 Delete event 刪除日程 Copy 複製 Cut 剪下 Paste 貼上 Delete 刪除 Select all 全� SidebarCalendarWidget Y 年 M 月 TimeJumpDialog Go 跳 轉 button UserloginWidget Sign In 登 入 button Sign Out 退出登入 button YearFrame Y 年 today Today 今天 Today linuxdeepin-dde-calendar-f6d670a/translations/desktop/000077500000000000000000000000001523260663500231605ustar00rootroot00000000000000linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop.ts000066400000000000000000000010521523260663500251770ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendar is a date tool.Deepin CalendarDeepin Calendarlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_am_ET.ts000066400000000000000000000011151523260663500262440ustar00rootroot00000000000000desktopCalendarቀን መ�ጠሪያCalendar is a date tool.ቀን መ�ጠሪያDeepin Calendarዲ�ኢን ቀን መ�ጠሪያlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ar.ts000066400000000000000000000011221523260663500256570ustar00rootroot00000000000000desktopCalendarالتقويمCalendar is a date tool.التقويم هو أداة عرض التاريخ .Deepin Calendarتقويم ديبينlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ast.ts000066400000000000000000000010741523260663500260520ustar00rootroot00000000000000desktopCalendarCalendariuCalendar is a date tool.Calendariu ye una ferramienta de dates.Deepin CalendarDeepin Calendarlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_az.ts000066400000000000000000000010541523260663500256730ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendar tarix alətidirDeepin CalendarDeepin Kalendarılinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_bg.ts000066400000000000000000000011711523260663500256510ustar00rootroot00000000000000desktopCalendarКалендарCalendar is a date tool.Календарът е приложение за показване на датата.Deepin CalendarDeepin Календарlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_bn.ts000066400000000000000000000012251523260663500256600ustar00rootroot00000000000000desktopCalendarক�যালেন�ডারCalendar is a date tool.ক�যালেন�ডার �কটি তারিখ ট�লDeepin Calendarডিপিন ক�যালেন�ডারlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_bo.ts000066400000000000000000000013231523260663500256600ustar00rootroot00000000000000desktopCalendarལོ་�ོ�Calendar is a date tool.ལོ་�ོ་ནི་ཚེས་གྲངས་ལྟ་བའི་ཡོ་བྱད་ཆུང་ཆུང་ཞིག་རེད�Deepin Calendarགྲ་རྒྱས་པའི་ལོ་�ོ�linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_bqi.ts000066400000000000000000000010321523260663500260300ustar00rootroot00000000000000desktopCalendarmâši hês�vCalendar is a date tool.Deepin Calendarvirga dipinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ca.ts000066400000000000000000000010731523260663500256450ustar00rootroot00000000000000desktopCalendarCalendariCalendar is a date tool.El calendari és una eina de cites.Deepin CalendarCalendari del Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_cs.ts000066400000000000000000000011011523260663500256570ustar00rootroot00000000000000desktopCalendarKalendářCalendar is a date tool.Kalendář je nástroj pro práci s datumy.Deepin CalendarDeepin kalendářlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_da.ts000066400000000000000000000010571523260663500256500ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender er et datoværktøj.Deepin CalendarDeepin kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_de.ts000066400000000000000000000010621523260663500256500ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender ist ein Datumswerkzeug.Deepin CalendarDeepin Kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_de_DE.ts000066400000000000000000000011021523260663500262130ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender ist ein Werkzeug für Datum und ZeitDeepin CalendarDeepin Kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_el.ts000066400000000000000000000011221523260663500256550ustar00rootroot00000000000000desktopCalendarΗμε�ολόγιοCalendar is a date tool.Εφα�μογή Ημε�ολογίου Deepin CalendarΗμε�ολόγιο Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_en_US.ts000066400000000000000000000010551523260663500262730ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendar is a date tool.Deepin CalendarDeepin Calendarlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_eo.ts000066400000000000000000000010531523260663500256630ustar00rootroot00000000000000desktopCalendarKalendaroCalendar is a date tool.Kalendaro estas datilo.Deepin CalendarDeepin kalendarolinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_es.ts000066400000000000000000000011301523260663500256630ustar00rootroot00000000000000desktopCalendarCalendarioCalendar is a date tool.Calendario de Deepin es una herramienta de gestión de eventos.Deepin CalendarCalendario de Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_et.ts000066400000000000000000000010631523260663500256710ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender on kuupäeva tööriist.Deepin CalendarDeepin Kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_fa.ts000066400000000000000000000011031523260663500256420ustar00rootroot00000000000000desktopCalendarتقویمCalendar is a date tool.تقویم یک ابزار تاریخ است.Deepin Calendarتقویم Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_fi.ts000066400000000000000000000010711523260663500256560ustar00rootroot00000000000000desktopCalendarKalenteriCalendar is a date tool.Kalenteri on ajankäytön apuohjelma.Deepin CalendarDeepin kalenterilinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_fr.ts000066400000000000000000000010501523260663500256640ustar00rootroot00000000000000desktopCalendarCalendrierCalendar is a date tool.Simple calendrier.Deepin CalendarCalendrier Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_gl_ES.ts000066400000000000000000000011051523260663500262470ustar00rootroot00000000000000desktopCalendarCalendarioCalendar is a date tool.O calendario é unha ferramenta de datas.Deepin CalendarCalendario do Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_hi_IN.ts000066400000000000000000000012401523260663500262440ustar00rootroot00000000000000desktopCalendarदिनदर�शिकाCalendar is a date tool.दिनदर�शिका तिथि हेत� �क साधन है।Deepin Calendarडीपिन दिनदर�शिकाlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_hr.ts000066400000000000000000000010661523260663500256750ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendar je alat za rad sa vremenom.Deepin CalendarDeepin kalendarlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_hu.ts000066400000000000000000000010751523260663500257000ustar00rootroot00000000000000desktopCalendarNaptárCalendar is a date tool.A Naptár egy dátum megjelenítő eszköz.Deepin CalendarDeepin® Naptárlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_id.ts000066400000000000000000000010771523260663500256620ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender adalah sebuah peralatan penanggalan.Deepin CalendarKalender Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_it.ts000066400000000000000000000011671523260663500257020ustar00rootroot00000000000000desktopCalendarCalendarioCalendar is a date tool.Calendario è un tool calendario. Localizzazione italiana a cura di Carofano Massimo Antonio.Deepin CalendarCalendario di Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ja.ts000066400000000000000000000011121523260663500256460ustar00rootroot00000000000000desktopCalendarカレンダーCalendar is a date tool.カレンダー�日付ツール��。Deepin CalendarDeepin カレンダーlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ka.ts000066400000000000000000000012471523260663500256600ustar00rootroot00000000000000desktopCalendarკ�ლენდ�რიCalendar is a date tool.კ�ლენდ�რი �რის თ�რიღებთ�ნ ს�მუშ�� ხელს�წყ�Deepin Calendarკ�ლენდ�რიlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_kab.ts000066400000000000000000000010521523260663500260140ustar00rootroot00000000000000desktopCalendarAwitayCalendar is a date tool.Awitay d afecku n wazemz.Deepin CalendarAwitay n Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_km_KH.ts000066400000000000000000000012171523260663500262530ustar00rootroot00000000000000desktopCalendarប្រ�ិទិនCalendar is a date tool.ប្រ�ិទិនគឺជាឧបករណ�កាលបរិច្ឆ�ទ។Deepin Calendarប្រ�ិទិន Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_kn_IN.ts000066400000000000000000000012131523260663500262540ustar00rootroot00000000000000desktopCalendarCalendar is a date tool.ಕ�ಯಾಲೆಂಡರ� ಒಂದ� ದಿನದರ�ಶಕವಾಗಿದೆ.Deepin Calendarಡೀಪಿನ� ಕ�ಯಾಲೆಂಡರ�linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ko.ts000066400000000000000000000010571523260663500256750ustar00rootroot00000000000000desktopCalendar달력Calendar is a date tool.달력� 날짜 �구입니다.Deepin CalendarDeepin 달력linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ku.ts000066400000000000000000000010611523260663500256760ustar00rootroot00000000000000desktopCalendarSalnameCalendar is a date tool.Salname navgîneke tarîxê ye.Deepin CalendarSalnameya Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ku_IQ.ts000066400000000000000000000011141523260663500262660ustar00rootroot00000000000000desktopCalendarSalnameCalendar is a date tool.ساڵنامە ئامرازێکی بەروارەDeepin Calendarساڵنامەی Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_lo.ts000066400000000000000000000013551523260663500256770ustar00rootroot00000000000000 desktop Calendar ປະຕິທິນ Calendar is a date tool. ປະຕິທິນ�ມ່ນເຄື່ອງມືວັນທີ. Deepin Calendar ປະຕິທິນ Deepin linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_lt.ts000066400000000000000000000010671523260663500257040ustar00rootroot00000000000000desktopCalendarKalendoriusCalendar is a date tool.Kalendorius yra datų įrankis.Deepin CalendarDeepin kalendoriuslinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_lv.ts000066400000000000000000000010611523260663500257000ustar00rootroot00000000000000desktopCalendarKalend�rsCalendar is a date tool.Kalend�rs ir datumu rīks.Deepin CalendarDeepin kalend�rslinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ml.ts000066400000000000000000000011711523260663500256710ustar00rootroot00000000000000desktopCalendarകലണ�ടർCalendar is a date tool.കലണ�ടർ ഒര� തീയതി ഉപകരണം ആണ� Deepin Calendarഡീപിൻ കലണ�ടർlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_mn.ts000066400000000000000000000011441523260663500256730ustar00rootroot00000000000000desktopCalendarХуанлиCalendar is a date tool.Хуанли нь огноо, цагалбарын х�р�г��л.Deepin CalendarДеепин Хуанлиlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ms.ts000066400000000000000000000010611523260663500256760ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendar merupakan alat tarikh.Deepin CalendarKalendar Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_nb.ts000066400000000000000000000011371523260663500256620ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalander er et redskap for å organisere hendelser etter dato og klokkeslett.Deepin CalendarDeepin Kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ne.ts000066400000000000000000000012231523260663500256610ustar00rootroot00000000000000desktopCalendarक�यालेन�डरCalendar is a date tool.क�यालेन�डर �क मिति उपकरण हो।Deepin Calendarडिपिन क�यालेन�डरlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_nl.ts000066400000000000000000000011161523260663500256710ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender is een hulpmiddel voor het bijhouden van afspraken.Deepin CalendarDeepin Kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_pa.ts000066400000000000000000000011501523260663500256560ustar00rootroot00000000000000desktopCalendarਕੈਲੰਡਰCalendar is a date tool.ਕੈਲੰਡਰ ਤਾਰੀਖ ਸਾਧਨ ਹੈ।Deepin Calendarਡੀਪਿਨ ਕੈਲੰਡਰlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_pl.ts000066400000000000000000000011031523260663500256670ustar00rootroot00000000000000desktopCalendarKalendarzCalendar is a date tool.Kalendarz to narzędzie do zarządzania czasem.Deepin CalendarKalendarz Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_pt.ts000066400000000000000000000011001523260663500256740ustar00rootroot00000000000000desktopCalendarCalendárioCalendar is a date tool.O Calendário é uma ferramenta de data.Deepin CalendarCalendário Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_pt_BR.ts000066400000000000000000000010751523260663500262720ustar00rootroot00000000000000desktopCalendarCalendárioCalendar is a date tool.O Calendário é uma ferramenta de datas.Deepin CalendarCalendáriolinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ro.ts000066400000000000000000000010751523260663500257040ustar00rootroot00000000000000desktopCalendarCalendarCalendar is a date tool.Calendarul este un instrument pentru dateDeepin CalendarCalendarul Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ru.ts000066400000000000000000000012351523260663500257100ustar00rootroot00000000000000desktopCalendarКалендарьCalendar is a date tool.Календарь �вл�ет�� приложением дл� планировани� Вашего времени.Deepin CalendarКалендарь Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_si.ts000066400000000000000000000011451523260663500256750ustar00rootroot00000000000000desktopCalendarදින දසුනCalendar is a date tool.දින දසුන දින මෙවලමකි.Deepin CalendarDeepin දින දසුනlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_sk.ts000066400000000000000000000010651523260663500257000ustar00rootroot00000000000000desktopCalendarKalendárCalendar is a date tool.Kalendár je dátumový nástroj.Deepin CalendarDeepin Kalendárlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_sl.ts000066400000000000000000000010661523260663500257020ustar00rootroot00000000000000desktopCalendarKoledarCalendar is a date tool.Koledar je orodje za urejanje datumov.Deepin CalendarDeepin koledarlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_sq.ts000066400000000000000000000010651523260663500257060ustar00rootroot00000000000000desktopCalendarKalendarCalendar is a date tool.Kalendari është një mjet datash.Deepin CalendarKalendar Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_sr.ts000066400000000000000000000011561523260663500257100ustar00rootroot00000000000000desktopCalendarКалендарCalendar is a date tool.Календар је алат за приказивање датума.Deepin CalendarДипин Календарlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_sv.ts000066400000000000000000000010601523260663500257060ustar00rootroot00000000000000desktopCalendarKalenderCalendar is a date tool.Kalender är ett datumverktyg.Deepin CalendarDeepin kalenderlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_sw.ts000066400000000000000000000010561523260663500257140ustar00rootroot00000000000000desktopCalendarKalendaCalendar is a date tool.Kalenda ni chombo ya tareheDeepin CalendarKalenda ya Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ta.ts000066400000000000000000000011651523260663500256700ustar00rootroot00000000000000desktopCalendarCalendar is a date tool.அட�டவணை தேதி கர�வியாக�ம�Deepin Calendarடீபின� நாள�காட�டிlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_tr.ts000066400000000000000000000010731523260663500257070ustar00rootroot00000000000000desktopCalendarTakvimCalendar is a date tool.Takvim, tarihi görüntüleyen bir araçtır.Deepin CalendarDeepin Takvimlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_ug.ts000066400000000000000000000011621523260663500256740ustar00rootroot00000000000000desktopCalendarكال�ندارCalendar is a date tool.كال�ندار ۋاقىتنى تەكشۈرىدىغان كىچىك قورالDeepin CalendarDeepin كال�ندارىlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_uk.ts000066400000000000000000000010621523260663500256770ustar00rootroot00000000000000desktopCalendarКалендарCalendar is a date tool.КалендарDeepin CalendarКалендар Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_vi.ts000066400000000000000000000010671523260663500257030ustar00rootroot00000000000000desktopCalendarLịchCalendar is a date tool.Lịch là một công cụ ngày tháng.Deepin CalendarLịch Deepinlinuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_zh_CN.ts000066400000000000000000000010721523260663500262620ustar00rootroot00000000000000desktopCalendar日历Calendar is a date tool.日历是一款查看日期的�工具。Deepin Calendar深度日历linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_zh_HK.ts000066400000000000000000000010721523260663500262640ustar00rootroot00000000000000desktopCalendar日曆Calendar is a date tool.日曆是一款查看日期的�工具。Deepin Calendar深度日曆linuxdeepin-dde-calendar-f6d670a/translations/desktop/desktop_zh_TW.ts000066400000000000000000000010511523260663500263110ustar00rootroot00000000000000desktopCalendar日曆Calendar is a date tool.簡易日期顯示工具Deepin CalendarDeepin 日曆linuxdeepin-dde-calendar-f6d670a/translations/release.sh000077500000000000000000000003331523260663500234650ustar00rootroot00000000000000#!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com ts_list=(`ls *.ts`) for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" done linuxdeepin-dde-calendar-f6d670a/translations/update.sh000077500000000000000000000000561523260663500233310ustar00rootroot00000000000000#!/bin/bash lupdate ../ -ts -no-obsolete *.ts